diff --git a/=0.23.0 b/=0.23.0 deleted file mode 100644 index fef6341..0000000 --- a/=0.23.0 +++ /dev/null @@ -1,2 +0,0 @@ -[version-2 2943ab3] Added zstandard - 3 files changed, 20 insertions(+), 12 deletions(-) diff --git "a/=0.23.0\n" "b/=0.23.0\n" deleted file mode 100644 index 0b77812..0000000 --- "a/=0.23.0\n" +++ /dev/null @@ -1,2 +0,0 @@ -[version-2 f5bbc36] Added zstandard - 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index e3e1671..042d8fe 100644 --- a/README.md +++ b/README.md @@ -56,7 +56,7 @@ Open-source AI assistant for ERPNext. Ask business questions in plain English an ## Tech Stack **Backend** - +** Please note new URL on github https://github.com/ERPGulf/changai** - [Frappe Framework](https://frappeframework.com) — Full-stack Python web framework that powers ERPNext. Handles authentication, permissions, database queries, and API routing. - Python 3.10+ — Core language for all backend logic, model serving, and pipeline orchestration. diff --git a/changai/changai/Datasets_1_v1/Roberto_S1/sales_invoice_varients.json b/changai/changai/Datasets_1_v1/Roberto_S1/sales_invoice_varients.json index 17dd48d..0ab0205 100644 --- a/changai/changai/Datasets_1_v1/Roberto_S1/sales_invoice_varients.json +++ b/changai/changai/Datasets_1_v1/Roberto_S1/sales_invoice_varients.json @@ -1,128 +1,737 @@ [ - { "instruction": "Predict the relevant ERPNext Doctype(s) for the question below.", "input": "How many invoices are still unpaid?", "output": ["Sales Invoice"] }, - { "instruction": "Predict the relevant ERPNext Doctype(s) for the question below.", "input": "count of unpaid invoices?", "output": ["Sales Invoice"] }, - { "instruction": "Predict the relevant ERPNext Doctype(s) for the question below.", "input": "how many bills pending?", "output": ["Sales Invoice"] }, - { "instruction": "Predict the relevant ERPNext Doctype(s) for the question below.", "input": "number of invoices due now", "output": ["Sales Invoice"] }, - { "instruction": "Predict the relevant ERPNext Doctype(s) for the question below.", "input": "open invoices count?", "output": ["Sales Invoice"] }, - - { "instruction": "Predict the relevant ERPNext Doctype(s) for the question below.", "input": "show me outstanding invoices", "output": ["Sales Invoice"] }, - { "instruction": "Predict the relevant ERPNext Doctype(s) for the question below.", "input": "unpaid bills total?", "output": ["Sales Invoice"] }, - { "instruction": "Predict the relevant ERPNext Doctype(s) for the question below.", "input": "invoices not paid yet count", "output": ["Sales Invoice"] }, - { "instruction": "Predict the relevant ERPNext Doctype(s) for the question below.", "input": "how many receipts are due", "output": ["Sales Invoice"] }, - { "instruction": "Predict the relevant ERPNext Doctype(s) for the question below.", "input": "pending invoices overall", "output": ["Sales Invoice"] }, - - { "instruction": "Predict the relevant ERPNext Doctype(s) for the question below.", "input": "invoices balance left?", "output": ["Sales Invoice"] }, - { "instruction": "Predict the relevant ERPNext Doctype(s) for the question below.", "input": "bills awaiting payment count", "output": ["Sales Invoice"] }, - { "instruction": "Predict the relevant ERPNext Doctype(s) for the question below.", "input": "total outstanding slips", "output": ["Sales Invoice"] }, - { "instruction": "Predict the relevant ERPNext Doctype(s) for the question below.", "input": "how many sales docs are unpaid", "output": ["Sales Invoice"] }, - { "instruction": "Predict the relevant ERPNext Doctype(s) for the question below.", "input": "unpaid statements count?", "output": ["Sales Invoice"] }, - - { "instruction": "Predict the relevant ERPNext Doctype(s) for the question below.", "input": "any bills left unpaid?", "output": ["Sales Invoice"] }, - { "instruction": "Predict the relevant ERPNext Doctype(s) for the question below.", "input": "show all invoices pending now", "output": ["Sales Invoice"] }, - { "instruction": "Predict the relevant ERPNext Doctype(s) for the question below.", "input": "number of records still due", "output": ["Sales Invoice"] }, - { "instruction": "Predict the relevant ERPNext Doctype(s) for the question below.", "input": "open bills count pls", "output": ["Sales Invoice"] }, - { "instruction": "Predict the relevant ERPNext Doctype(s) for the question below.", "input": "how many invoices balance left", "output": ["Sales Invoice"] }, - - { "instruction": "Predict the relevant ERPNext Doctype(s) for the question below.", "input": "count of unpaid receipts", "output": ["Sales Invoice"] }, - { "instruction": "Predict the relevant ERPNext Doctype(s) for the question below.", "input": "bills not cleared total", "output": ["Sales Invoice"] }, - { "instruction": "Predict the relevant ERPNext Doctype(s) for the question below.", "input": "outstanding invoices how many", "output": ["Sales Invoice"] }, - { "instruction": "Predict the relevant ERPNext Doctype(s) for the question below.", "input": "pending slips total number", "output": ["Sales Invoice"] }, - { "instruction": "Predict the relevant ERPNext Doctype(s) for the question below.", "input": "still unpaid invoices list count", "output": ["Sales Invoice"] }, - - { "instruction": "Predict the relevant ERPNext Doctype(s) for the question below.", "input": "any invoices waiting for payment", "output": ["Sales Invoice"] }, - { "instruction": "Predict the relevant ERPNext Doctype(s) for the question below.", "input": "bills outstanding as of now?", "output": ["Sales Invoice"] }, - { "instruction": "Predict the relevant ERPNext Doctype(s) for the question below.", "input": "receipts unpaid count needed", "output": ["Sales Invoice"] }, - { "instruction": "Predict the relevant ERPNext Doctype(s) for the question below.", "input": "total unpaid sales invoices", "output": ["Sales Invoice"] }, - { "instruction": "Predict the relevant ERPNext Doctype(s) for the question below.", "input": "open customer bills number", "output": ["Sales Invoice"] }, - - { "instruction": "Predict the relevant ERPNext Doctype(s) for the question below.", "input": "due invoices total count", "output": ["Sales Invoice"] }, - { "instruction": "Predict the relevant ERPNext Doctype(s) for the question below.", "input": "how many slips are pending", "output": ["Sales Invoice"] }, - { "instruction": "Predict the relevant ERPNext Doctype(s) for the question below.", "input": "balance left invoices", "output": ["Sales Invoice"] }, - { "instruction": "Predict the relevant ERPNext Doctype(s) for the question below.", "input": "show pending sales docs count", "output": ["Sales Invoice"] }, - { "instruction": "Predict the relevant ERPNext Doctype(s) for the question below.", "input": "not paid invoices how many", "output": ["Sales Invoice"] }, - - { "instruction": "Predict the relevant ERPNext Doctype(s) for the question below.", "input": "open receipts total now", "output": ["Sales Invoice"] }, - { "instruction": "Predict the relevant ERPNext Doctype(s) for the question below.", "input": "due bills number please", "output": ["Sales Invoice"] }, - { "instruction": "Predict the relevant ERPNext Doctype(s) for the question below.", "input": "pending customer invoices total", "output": ["Sales Invoice"] }, - { "instruction": "Predict the relevant ERPNext Doctype(s) for the question below.", "input": "still due slips count", "output": ["Sales Invoice"] }, - { "instruction": "Predict the relevant ERPNext Doctype(s) for the question below.", "input": "any unpaid bills yet?", "output": ["Sales Invoice"] }, - - { "instruction": "Predict the relevant ERPNext Doctype(s) for the question below.", "input": "sales invoices not cleared", "output": ["Sales Invoice"] }, - { "instruction": "Predict the relevant ERPNext Doctype(s) for the question below.", "input": "records pending count now", "output": ["Sales Invoice"] }, - { "instruction": "Predict the relevant ERPNext Doctype(s) for the question below.", "input": "unpaid docs list total", "output": ["Sales Invoice"] }, - { "instruction": "Predict the relevant ERPNext Doctype(s) for the question below.", "input": "any invoices balance pending", "output": ["Sales Invoice"] }, - { "instruction": "Predict the relevant ERPNext Doctype(s) for the question below.", "input": "due receipts still open", "output": ["Sales Invoice"] }, - - { "instruction": "Predict the relevant ERPNext Doctype(s) for the question below.", "input": "pending invoices total figure", "output": ["Sales Invoice"] }, - { "instruction": "Predict the relevant ERPNext Doctype(s) for the question below.", "input": "not paid bills how many left", "output": ["Sales Invoice"] }, - { "instruction": "Predict the relevant ERPNext Doctype(s) for the question below.", "input": "total invoices to be cleared", "output": ["Sales Invoice"] }, - { "instruction": "Predict the relevant ERPNext Doctype(s) for the question below.", "input": "show me outstanding records", "output": ["Sales Invoice"] }, - { "instruction": "Predict the relevant ERPNext Doctype(s) for the question below.", "input": "unsettled invoices count?", "output": ["Sales Invoice"] }, - - { "instruction": "Predict the relevant ERPNext Doctype(s) for the question below.", "input": "count invoices still unpaid", "output": ["Sales Invoice"] }, - { "instruction": "Predict the relevant ERPNext Doctype(s) for the question below.", "input": "bills unpaid till now", "output": ["Sales Invoice"] }, - { "instruction": "Predict the relevant ERPNext Doctype(s) for the question below.", "input": "open statements number", "output": ["Sales Invoice"] }, - { "instruction": "Predict the relevant ERPNext Doctype(s) for the question below.", "input": "unpaid receipts total count", "output": ["Sales Invoice"] }, - { "instruction": "Predict the relevant ERPNext Doctype(s) for the question below.", "input": "remaining invoices not paid", "output": ["Sales Invoice"] }, - - { "instruction": "Predict the relevant ERPNext Doctype(s) for the question below.", "input": "how many bills open still", "output": ["Sales Invoice"] }, - { "instruction": "Predict the relevant ERPNext Doctype(s) for the question below.", "input": "pending invoices figure now", "output": ["Sales Invoice"] }, - { "instruction": "Predict the relevant ERPNext Doctype(s) for the question below.", "input": "receipts waiting payment", "output": ["Sales Invoice"] }, - { "instruction": "Predict the relevant ERPNext Doctype(s) for the question below.", "input": "outstanding docs how many total", "output": ["Sales Invoice"] }, - { "instruction": "Predict the relevant ERPNext Doctype(s) for the question below.", "input": "sales invoices pending payment", "output": ["Sales Invoice"] }, - [ - { "instruction": "Predict the relevant ERPNext Doctype(s) for the question below.", "input": "how many invoices still waiting?", "output": ["Sales Invoice"] }, - { "instruction": "Predict the relevant ERPNext Doctype(s) for the question below.", "input": "show unpaid bills total now", "output": ["Sales Invoice"] }, - { "instruction": "Predict the relevant ERPNext Doctype(s) for the question below.", "input": "invoices to be paid count", "output": ["Sales Invoice"] }, - { "instruction": "Predict the relevant ERPNext Doctype(s) for the question below.", "input": "not settled receipts figure", "output": ["Sales Invoice"] }, - { "instruction": "Predict the relevant ERPNext Doctype(s) for the question below.", "input": "how many slips open balance", "output": ["Sales Invoice"] }, - - { "instruction": "Predict the relevant ERPNext Doctype(s) for the question below.", "input": "pending invoices number list", "output": ["Sales Invoice"] }, - { "instruction": "Predict the relevant ERPNext Doctype(s) for the question below.", "input": "count unpaid customer bills", "output": ["Sales Invoice"] }, - { "instruction": "Predict the relevant ERPNext Doctype(s) for the question below.", "input": "bills still due in system", "output": ["Sales Invoice"] }, - { "instruction": "Predict the relevant ERPNext Doctype(s) for the question below.", "input": "receipts not yet paid count", "output": ["Sales Invoice"] }, - { "instruction": "Predict the relevant ERPNext Doctype(s) for the question below.", "input": "sales invoices awaiting payment", "output": ["Sales Invoice"] }, - - { "instruction": "Predict the relevant ERPNext Doctype(s) for the question below.", "input": "open invoices figure total", "output": ["Sales Invoice"] }, - { "instruction": "Predict the relevant ERPNext Doctype(s) for the question below.", "input": "unpaid docs in records now", "output": ["Sales Invoice"] }, - { "instruction": "Predict the relevant ERPNext Doctype(s) for the question below.", "input": "outstanding bills total today", "output": ["Sales Invoice"] }, - { "instruction": "Predict the relevant ERPNext Doctype(s) for the question below.", "input": "remaining sales slips unpaid", "output": ["Sales Invoice"] }, - { "instruction": "Predict the relevant ERPNext Doctype(s) for the question below.", "input": "how many invoices are due?", "output": ["Sales Invoice"] }, - - { "instruction": "Predict the relevant ERPNext Doctype(s) for the question below.", "input": "due bills still open count", "output": ["Sales Invoice"] }, - { "instruction": "Predict the relevant ERPNext Doctype(s) for the question below.", "input": "total invoices not cleared yet", "output": ["Sales Invoice"] }, - { "instruction": "Predict the relevant ERPNext Doctype(s) for the question below.", "input": "unpaid sales docs figure", "output": ["Sales Invoice"] }, - { "instruction": "Predict the relevant ERPNext Doctype(s) for the question below.", "input": "how many open receipts now", "output": ["Sales Invoice"] }, - { "instruction": "Predict the relevant ERPNext Doctype(s) for the question below.", "input": "outstanding invoices current count", "output": ["Sales Invoice"] }, - - { "instruction": "Predict the relevant ERPNext Doctype(s) for the question below.", "input": "pending sales invoices figure", "output": ["Sales Invoice"] }, - { "instruction": "Predict the relevant ERPNext Doctype(s) for the question below.", "input": "unpaid records left total", "output": ["Sales Invoice"] }, - { "instruction": "Predict the relevant ERPNext Doctype(s) for the question below.", "input": "any invoices left not paid", "output": ["Sales Invoice"] }, - { "instruction": "Predict the relevant ERPNext Doctype(s) for the question below.", "input": "bills still open number", "output": ["Sales Invoice"] }, - { "instruction": "Predict the relevant ERPNext Doctype(s) for the question below.", "input": "receipts balance pending now", "output": ["Sales Invoice"] }, - - { "instruction": "Predict the relevant ERPNext Doctype(s) for the question below.", "input": "count open invoices right now", "output": ["Sales Invoice"] }, - { "instruction": "Predict the relevant ERPNext Doctype(s) for the question below.", "input": "sales docs unpaid till date", "output": ["Sales Invoice"] }, - { "instruction": "Predict the relevant ERPNext Doctype(s) for the question below.", "input": "total unpaid customer slips", "output": ["Sales Invoice"] }, - { "instruction": "Predict the relevant ERPNext Doctype(s) for the question below.", "input": "invoices with dues left?", "output": ["Sales Invoice"] }, - { "instruction": "Predict the relevant ERPNext Doctype(s) for the question below.", "input": "pending receipts number pls", "output": ["Sales Invoice"] }, - - { "instruction": "Predict the relevant ERPNext Doctype(s) for the question below.", "input": "bills to clear total now", "output": ["Sales Invoice"] }, - { "instruction": "Predict the relevant ERPNext Doctype(s) for the question below.", "input": "not paid records cnt", "output": ["Sales Invoice"] }, - { "instruction": "Predict the relevant ERPNext Doctype(s) for the question below.", "input": "open invoices left unpaid", "output": ["Sales Invoice"] }, - { "instruction": "Predict the relevant ERPNext Doctype(s) for the question below.", "input": "any outstanding receipts total", "output": ["Sales Invoice"] }, - { "instruction": "Predict the relevant ERPNext Doctype(s) for the question below.", "input": "how many bills remain due", "output": ["Sales Invoice"] }, - - { "instruction": "Predict the relevant ERPNext Doctype(s) for the question below.", "input": "sales invoices balance figure", "output": ["Sales Invoice"] }, - { "instruction": "Predict the relevant ERPNext Doctype(s) for the question below.", "input": "number of unpaid docs today", "output": ["Sales Invoice"] }, - { "instruction": "Predict the relevant ERPNext Doctype(s) for the question below.", "input": "any open slips unpaid count", "output": ["Sales Invoice"] }, - { "instruction": "Predict the relevant ERPNext Doctype(s) for the question below.", "input": "due invoices total as of now", "output": ["Sales Invoice"] }, - { "instruction": "Predict the relevant ERPNext Doctype(s) for the question below.", "input": "count bills not settled", "output": ["Sales Invoice"] }, - - { "instruction": "Predict the relevant ERPNext Doctype(s) for the question below.", "input": "receipts to be cleared number", "output": ["Sales Invoice"] }, - { "instruction": "Predict the relevant ERPNext Doctype(s) for the question below.", "input": "unpaid sales records total", "output": ["Sales Invoice"] }, - { "instruction": "Predict the relevant ERPNext Doctype(s) for the question below.", "input": "how many outstanding bills rn", "output": ["Sales Invoice"] }, - { "instruction": "Predict the relevant ERPNext Doctype(s) for the question below.", "input": "invoices awaiting clearance count", "output": ["Sales Invoice"] }, - { "instruction": "Predict the relevant ERPNext Doctype(s) for the question below.", "input": "pending docs overall figure", "output": ["Sales Invoice"] } - -] + { + "instruction": "Predict the relevant ERPNext Doctype(s) for the question below.", + "input": "How many invoices are still unpaid?", + "output": [ + "Sales Invoice" + ] + }, + { + "instruction": "Predict the relevant ERPNext Doctype(s) for the question below.", + "input": "count of unpaid invoices?", + "output": [ + "Sales Invoice" + ] + }, + { + "instruction": "Predict the relevant ERPNext Doctype(s) for the question below.", + "input": "how many bills pending?", + "output": [ + "Sales Invoice" + ] + }, + { + "instruction": "Predict the relevant ERPNext Doctype(s) for the question below.", + "input": "number of invoices due now", + "output": [ + "Sales Invoice" + ] + }, + { + "instruction": "Predict the relevant ERPNext Doctype(s) for the question below.", + "input": "open invoices count?", + "output": [ + "Sales Invoice" + ] + }, + { + "instruction": "Predict the relevant ERPNext Doctype(s) for the question below.", + "input": "show me outstanding invoices", + "output": [ + "Sales Invoice" + ] + }, + { + "instruction": "Predict the relevant ERPNext Doctype(s) for the question below.", + "input": "unpaid bills total?", + "output": [ + "Sales Invoice" + ] + }, + { + "instruction": "Predict the relevant ERPNext Doctype(s) for the question below.", + "input": "invoices not paid yet count", + "output": [ + "Sales Invoice" + ] + }, + { + "instruction": "Predict the relevant ERPNext Doctype(s) for the question below.", + "input": "how many receipts are due", + "output": [ + "Sales Invoice" + ] + }, + { + "instruction": "Predict the relevant ERPNext Doctype(s) for the question below.", + "input": "pending invoices overall", + "output": [ + "Sales Invoice" + ] + }, + { + "instruction": "Predict the relevant ERPNext Doctype(s) for the question below.", + "input": "invoices balance left?", + "output": [ + "Sales Invoice" + ] + }, + { + "instruction": "Predict the relevant ERPNext Doctype(s) for the question below.", + "input": "bills awaiting payment count", + "output": [ + "Sales Invoice" + ] + }, + { + "instruction": "Predict the relevant ERPNext Doctype(s) for the question below.", + "input": "total outstanding slips", + "output": [ + "Sales Invoice" + ] + }, + { + "instruction": "Predict the relevant ERPNext Doctype(s) for the question below.", + "input": "how many sales docs are unpaid", + "output": [ + "Sales Invoice" + ] + }, + { + "instruction": "Predict the relevant ERPNext Doctype(s) for the question below.", + "input": "unpaid statements count?", + "output": [ + "Sales Invoice" + ] + }, + { + "instruction": "Predict the relevant ERPNext Doctype(s) for the question below.", + "input": "any bills left unpaid?", + "output": [ + "Sales Invoice" + ] + }, + { + "instruction": "Predict the relevant ERPNext Doctype(s) for the question below.", + "input": "show all invoices pending now", + "output": [ + "Sales Invoice" + ] + }, + { + "instruction": "Predict the relevant ERPNext Doctype(s) for the question below.", + "input": "number of records still due", + "output": [ + "Sales Invoice" + ] + }, + { + "instruction": "Predict the relevant ERPNext Doctype(s) for the question below.", + "input": "open bills count pls", + "output": [ + "Sales Invoice" + ] + }, + { + "instruction": "Predict the relevant ERPNext Doctype(s) for the question below.", + "input": "how many invoices balance left", + "output": [ + "Sales Invoice" + ] + }, + { + "instruction": "Predict the relevant ERPNext Doctype(s) for the question below.", + "input": "count of unpaid receipts", + "output": [ + "Sales Invoice" + ] + }, + { + "instruction": "Predict the relevant ERPNext Doctype(s) for the question below.", + "input": "bills not cleared total", + "output": [ + "Sales Invoice" + ] + }, + { + "instruction": "Predict the relevant ERPNext Doctype(s) for the question below.", + "input": "outstanding invoices how many", + "output": [ + "Sales Invoice" + ] + }, + { + "instruction": "Predict the relevant ERPNext Doctype(s) for the question below.", + "input": "pending slips total number", + "output": [ + "Sales Invoice" + ] + }, + { + "instruction": "Predict the relevant ERPNext Doctype(s) for the question below.", + "input": "still unpaid invoices list count", + "output": [ + "Sales Invoice" + ] + }, + { + "instruction": "Predict the relevant ERPNext Doctype(s) for the question below.", + "input": "any invoices waiting for payment", + "output": [ + "Sales Invoice" + ] + }, + { + "instruction": "Predict the relevant ERPNext Doctype(s) for the question below.", + "input": "bills outstanding as of now?", + "output": [ + "Sales Invoice" + ] + }, + { + "instruction": "Predict the relevant ERPNext Doctype(s) for the question below.", + "input": "receipts unpaid count needed", + "output": [ + "Sales Invoice" + ] + }, + { + "instruction": "Predict the relevant ERPNext Doctype(s) for the question below.", + "input": "total unpaid sales invoices", + "output": [ + "Sales Invoice" + ] + }, + { + "instruction": "Predict the relevant ERPNext Doctype(s) for the question below.", + "input": "open customer bills number", + "output": [ + "Sales Invoice" + ] + }, + { + "instruction": "Predict the relevant ERPNext Doctype(s) for the question below.", + "input": "due invoices total count", + "output": [ + "Sales Invoice" + ] + }, + { + "instruction": "Predict the relevant ERPNext Doctype(s) for the question below.", + "input": "how many slips are pending", + "output": [ + "Sales Invoice" + ] + }, + { + "instruction": "Predict the relevant ERPNext Doctype(s) for the question below.", + "input": "balance left invoices", + "output": [ + "Sales Invoice" + ] + }, + { + "instruction": "Predict the relevant ERPNext Doctype(s) for the question below.", + "input": "show pending sales docs count", + "output": [ + "Sales Invoice" + ] + }, + { + "instruction": "Predict the relevant ERPNext Doctype(s) for the question below.", + "input": "not paid invoices how many", + "output": [ + "Sales Invoice" + ] + }, + { + "instruction": "Predict the relevant ERPNext Doctype(s) for the question below.", + "input": "open receipts total now", + "output": [ + "Sales Invoice" + ] + }, + { + "instruction": "Predict the relevant ERPNext Doctype(s) for the question below.", + "input": "due bills number please", + "output": [ + "Sales Invoice" + ] + }, + { + "instruction": "Predict the relevant ERPNext Doctype(s) for the question below.", + "input": "pending customer invoices total", + "output": [ + "Sales Invoice" + ] + }, + { + "instruction": "Predict the relevant ERPNext Doctype(s) for the question below.", + "input": "still due slips count", + "output": [ + "Sales Invoice" + ] + }, + { + "instruction": "Predict the relevant ERPNext Doctype(s) for the question below.", + "input": "any unpaid bills yet?", + "output": [ + "Sales Invoice" + ] + }, + { + "instruction": "Predict the relevant ERPNext Doctype(s) for the question below.", + "input": "sales invoices not cleared", + "output": [ + "Sales Invoice" + ] + }, + { + "instruction": "Predict the relevant ERPNext Doctype(s) for the question below.", + "input": "records pending count now", + "output": [ + "Sales Invoice" + ] + }, + { + "instruction": "Predict the relevant ERPNext Doctype(s) for the question below.", + "input": "unpaid docs list total", + "output": [ + "Sales Invoice" + ] + }, + { + "instruction": "Predict the relevant ERPNext Doctype(s) for the question below.", + "input": "any invoices balance pending", + "output": [ + "Sales Invoice" + ] + }, + { + "instruction": "Predict the relevant ERPNext Doctype(s) for the question below.", + "input": "due receipts still open", + "output": [ + "Sales Invoice" + ] + }, + { + "instruction": "Predict the relevant ERPNext Doctype(s) for the question below.", + "input": "pending invoices total figure", + "output": [ + "Sales Invoice" + ] + }, + { + "instruction": "Predict the relevant ERPNext Doctype(s) for the question below.", + "input": "not paid bills how many left", + "output": [ + "Sales Invoice" + ] + }, + { + "instruction": "Predict the relevant ERPNext Doctype(s) for the question below.", + "input": "total invoices to be cleared", + "output": [ + "Sales Invoice" + ] + }, + { + "instruction": "Predict the relevant ERPNext Doctype(s) for the question below.", + "input": "show me outstanding records", + "output": [ + "Sales Invoice" + ] + }, + { + "instruction": "Predict the relevant ERPNext Doctype(s) for the question below.", + "input": "unsettled invoices count?", + "output": [ + "Sales Invoice" + ] + }, + { + "instruction": "Predict the relevant ERPNext Doctype(s) for the question below.", + "input": "count invoices still unpaid", + "output": [ + "Sales Invoice" + ] + }, + { + "instruction": "Predict the relevant ERPNext Doctype(s) for the question below.", + "input": "bills unpaid till now", + "output": [ + "Sales Invoice" + ] + }, + { + "instruction": "Predict the relevant ERPNext Doctype(s) for the question below.", + "input": "open statements number", + "output": [ + "Sales Invoice" + ] + }, + { + "instruction": "Predict the relevant ERPNext Doctype(s) for the question below.", + "input": "unpaid receipts total count", + "output": [ + "Sales Invoice" + ] + }, + { + "instruction": "Predict the relevant ERPNext Doctype(s) for the question below.", + "input": "remaining invoices not paid", + "output": [ + "Sales Invoice" + ] + }, + { + "instruction": "Predict the relevant ERPNext Doctype(s) for the question below.", + "input": "how many bills open still", + "output": [ + "Sales Invoice" + ] + }, + { + "instruction": "Predict the relevant ERPNext Doctype(s) for the question below.", + "input": "pending invoices figure now", + "output": [ + "Sales Invoice" + ] + }, + { + "instruction": "Predict the relevant ERPNext Doctype(s) for the question below.", + "input": "receipts waiting payment", + "output": [ + "Sales Invoice" + ] + }, + { + "instruction": "Predict the relevant ERPNext Doctype(s) for the question below.", + "input": "outstanding docs how many total", + "output": [ + "Sales Invoice" + ] + }, + { + "instruction": "Predict the relevant ERPNext Doctype(s) for the question below.", + "input": "sales invoices pending payment", + "output": [ + "Sales Invoice" + ] + }, + { + "instruction": "Predict the relevant ERPNext Doctype(s) for the question below.", + "input": "how many invoices still waiting?", + "output": [ + "Sales Invoice" + ] + }, + { + "instruction": "Predict the relevant ERPNext Doctype(s) for the question below.", + "input": "show unpaid bills total now", + "output": [ + "Sales Invoice" + ] + }, + { + "instruction": "Predict the relevant ERPNext Doctype(s) for the question below.", + "input": "invoices to be paid count", + "output": [ + "Sales Invoice" + ] + }, + { + "instruction": "Predict the relevant ERPNext Doctype(s) for the question below.", + "input": "not settled receipts figure", + "output": [ + "Sales Invoice" + ] + }, + { + "instruction": "Predict the relevant ERPNext Doctype(s) for the question below.", + "input": "how many slips open balance", + "output": [ + "Sales Invoice" + ] + }, + { + "instruction": "Predict the relevant ERPNext Doctype(s) for the question below.", + "input": "pending invoices number list", + "output": [ + "Sales Invoice" + ] + }, + { + "instruction": "Predict the relevant ERPNext Doctype(s) for the question below.", + "input": "count unpaid customer bills", + "output": [ + "Sales Invoice" + ] + }, + { + "instruction": "Predict the relevant ERPNext Doctype(s) for the question below.", + "input": "bills still due in system", + "output": [ + "Sales Invoice" + ] + }, + { + "instruction": "Predict the relevant ERPNext Doctype(s) for the question below.", + "input": "receipts not yet paid count", + "output": [ + "Sales Invoice" + ] + }, + { + "instruction": "Predict the relevant ERPNext Doctype(s) for the question below.", + "input": "sales invoices awaiting payment", + "output": [ + "Sales Invoice" + ] + }, + { + "instruction": "Predict the relevant ERPNext Doctype(s) for the question below.", + "input": "open invoices figure total", + "output": [ + "Sales Invoice" + ] + }, + { + "instruction": "Predict the relevant ERPNext Doctype(s) for the question below.", + "input": "unpaid docs in records now", + "output": [ + "Sales Invoice" + ] + }, + { + "instruction": "Predict the relevant ERPNext Doctype(s) for the question below.", + "input": "outstanding bills total today", + "output": [ + "Sales Invoice" + ] + }, + { + "instruction": "Predict the relevant ERPNext Doctype(s) for the question below.", + "input": "remaining sales slips unpaid", + "output": [ + "Sales Invoice" + ] + }, + { + "instruction": "Predict the relevant ERPNext Doctype(s) for the question below.", + "input": "how many invoices are due?", + "output": [ + "Sales Invoice" + ] + }, + { + "instruction": "Predict the relevant ERPNext Doctype(s) for the question below.", + "input": "due bills still open count", + "output": [ + "Sales Invoice" + ] + }, + { + "instruction": "Predict the relevant ERPNext Doctype(s) for the question below.", + "input": "total invoices not cleared yet", + "output": [ + "Sales Invoice" + ] + }, + { + "instruction": "Predict the relevant ERPNext Doctype(s) for the question below.", + "input": "unpaid sales docs figure", + "output": [ + "Sales Invoice" + ] + }, + { + "instruction": "Predict the relevant ERPNext Doctype(s) for the question below.", + "input": "how many open receipts now", + "output": [ + "Sales Invoice" + ] + }, + { + "instruction": "Predict the relevant ERPNext Doctype(s) for the question below.", + "input": "outstanding invoices current count", + "output": [ + "Sales Invoice" + ] + }, + { + "instruction": "Predict the relevant ERPNext Doctype(s) for the question below.", + "input": "pending sales invoices figure", + "output": [ + "Sales Invoice" + ] + }, + { + "instruction": "Predict the relevant ERPNext Doctype(s) for the question below.", + "input": "unpaid records left total", + "output": [ + "Sales Invoice" + ] + }, + { + "instruction": "Predict the relevant ERPNext Doctype(s) for the question below.", + "input": "any invoices left not paid", + "output": [ + "Sales Invoice" + ] + }, + { + "instruction": "Predict the relevant ERPNext Doctype(s) for the question below.", + "input": "bills still open number", + "output": [ + "Sales Invoice" + ] + }, + { + "instruction": "Predict the relevant ERPNext Doctype(s) for the question below.", + "input": "receipts balance pending now", + "output": [ + "Sales Invoice" + ] + }, + { + "instruction": "Predict the relevant ERPNext Doctype(s) for the question below.", + "input": "count open invoices right now", + "output": [ + "Sales Invoice" + ] + }, + { + "instruction": "Predict the relevant ERPNext Doctype(s) for the question below.", + "input": "sales docs unpaid till date", + "output": [ + "Sales Invoice" + ] + }, + { + "instruction": "Predict the relevant ERPNext Doctype(s) for the question below.", + "input": "total unpaid customer slips", + "output": [ + "Sales Invoice" + ] + }, + { + "instruction": "Predict the relevant ERPNext Doctype(s) for the question below.", + "input": "invoices with dues left?", + "output": [ + "Sales Invoice" + ] + }, + { + "instruction": "Predict the relevant ERPNext Doctype(s) for the question below.", + "input": "pending receipts number pls", + "output": [ + "Sales Invoice" + ] + }, + { + "instruction": "Predict the relevant ERPNext Doctype(s) for the question below.", + "input": "bills to clear total now", + "output": [ + "Sales Invoice" + ] + }, + { + "instruction": "Predict the relevant ERPNext Doctype(s) for the question below.", + "input": "not paid records cnt", + "output": [ + "Sales Invoice" + ] + }, + { + "instruction": "Predict the relevant ERPNext Doctype(s) for the question below.", + "input": "open invoices left unpaid", + "output": [ + "Sales Invoice" + ] + }, + { + "instruction": "Predict the relevant ERPNext Doctype(s) for the question below.", + "input": "any outstanding receipts total", + "output": [ + "Sales Invoice" + ] + }, + { + "instruction": "Predict the relevant ERPNext Doctype(s) for the question below.", + "input": "how many bills remain due", + "output": [ + "Sales Invoice" + ] + }, + { + "instruction": "Predict the relevant ERPNext Doctype(s) for the question below.", + "input": "sales invoices balance figure", + "output": [ + "Sales Invoice" + ] + }, + { + "instruction": "Predict the relevant ERPNext Doctype(s) for the question below.", + "input": "number of unpaid docs today", + "output": [ + "Sales Invoice" + ] + }, + { + "instruction": "Predict the relevant ERPNext Doctype(s) for the question below.", + "input": "any open slips unpaid count", + "output": [ + "Sales Invoice" + ] + }, + { + "instruction": "Predict the relevant ERPNext Doctype(s) for the question below.", + "input": "due invoices total as of now", + "output": [ + "Sales Invoice" + ] + }, + { + "instruction": "Predict the relevant ERPNext Doctype(s) for the question below.", + "input": "count bills not settled", + "output": [ + "Sales Invoice" + ] + }, + { + "instruction": "Predict the relevant ERPNext Doctype(s) for the question below.", + "input": "receipts to be cleared number", + "output": [ + "Sales Invoice" + ] + }, + { + "instruction": "Predict the relevant ERPNext Doctype(s) for the question below.", + "input": "unpaid sales records total", + "output": [ + "Sales Invoice" + ] + }, + { + "instruction": "Predict the relevant ERPNext Doctype(s) for the question below.", + "input": "how many outstanding bills rn", + "output": [ + "Sales Invoice" + ] + }, + { + "instruction": "Predict the relevant ERPNext Doctype(s) for the question below.", + "input": "invoices awaiting clearance count", + "output": [ + "Sales Invoice" + ] + }, + { + "instruction": "Predict the relevant ERPNext Doctype(s) for the question below.", + "input": "pending docs overall figure", + "output": [ + "Sales Invoice" + ] + } +] \ No newline at end of file diff --git a/changai/changai/api/v2/assets/business_keywords_v1.json b/changai/changai/api/v2/assets/business_keywords_v1.json index dba3dd6..979a7e8 100644 --- a/changai/changai/api/v2/assets/business_keywords_v1.json +++ b/changai/changai/api/v2/assets/business_keywords_v1.json @@ -12,8 +12,12 @@ "projects", "today", "employee", + "BOM", + "CRM", "pen", "bought", + "gst", + "tax", "sales", "this month", "products", @@ -20180,63 +20184,10184 @@ "مبيعات", "هذا الشهر", "الشهر", - "عملاء", - "الإيرادات", - "مبيعات", - "غير مدفوعة", - "مبيعات", - "فواتير", - "الفواتير", - "الفواتير", - "عميل", - "المخزون", - "أصناف", - "إعادة الطلب", - "الأصناف", - "صنف", - "شراء", - "المشتريات", - "مبالغ مستحقة", - "الموردين", - "حضور", - "الموظفين", - "الحضور", - "مشاريع", - "ساعات عمل", - "موظف", - "مفتوحة", - "شراء", - "أوامر", - "متأخرة", - "مشاريع", - "صنف", - "تم بيعه", - "منخفض", - "أصناف", - "المخزون", - "أصناف", - "الإيرادات", - "الأرباح", - "عملاء", - "الشراء", - "فواتير", - "فواتير المبيعات", - "مبيعات", - "الطلبات", - "الطلبات المفتوحة", - "مشاريع", - "موعد التسليم", - "مورد", - "الموردين", - "مبلغ مستحق", - "المشتريات", - "منتجات", - "صنف", - "المخزون", - "إعادة الطلب", - "إجمالي", - "فاتورة", - "إيراد", - "ربح" + "مبيعات الأسبوع", + "مبيعات الربع", + "مبيعات السنة", + "إجمالي المبيعات", + "صافي المبيعات", + "ملخص المبيعات", + "تحليل المبيعات", + "أداء المبيعات", + "مقارنة المبيعات", + "ممثل المبيعات", + "مدير المبيعات", + "مناطق المبيعات", + "قنوات المبيعات", + "خط أنابيب المبيعات", + "دورة المبيعات", + "تحويل المبيعات", + "ميزانية المبيعات", + "مستهدف المبيعات", + "الإيرادات الإجمالية", + "الإيرادات الصافية", + "الإيرادات التشغيلية", + "الإيرادات غير التشغيلية", + "الإيرادات الربع سنوية", + "إيرادات المنتجات", + "الإيرادات المتوقعة", + "الإيرادات الفعلية", + "أمر الشراء", + "أوامر الشراء", + "طلب الشراء", + "طلبات الشراء", + "فاتورة الشراء", + "فواتير الشراء", + "استلام الشراء", + "إرجاع الشراء", + "تاريخ الشراء", + "تقرير المشتريات", + "ميزانية المشتريات", + "تحليل المشتريات", + "عملية الشراء", + "سياسة الشراء", + "شروط الشراء", + "مفاوضات الشراء", + "خصومات الشراء", + "مورد معتمد", + "تقييم المورد", + "قائمة الموردين", + "بيانات المورد", + "اتفاقية المورد", + "أداء المورد", + "تصنيف المورد", + "فئة المورد", + "معلومات المورد", + "الدفع للمورد", + "رصيد المورد", + "مديونية المورد", + "مورد جديد", + "مورد نشط", + "مورد غير نشط", + "مورد مفضل", + "مورد رئيسي", + "مورد محلي", + "مورد دولي", + "مورد استراتيجي", + "قاعدة الموردين", + "تنويع الموردين", + "امتثال المورد", + "مستوى المخزون", + "كمية المخزون", + "قيمة المخزون", + "حركة المخزون", + "تدوير المخزون", + "جرد المخزون", + "مراجعة المخزون", + "تعديل المخزون", + "تحويل المخزون", + "نقل المخزون", + "مخزون الحد الأدنى", + "مخزون الحد الأقصى", + "نقطة إعادة الطلب", + "مخزون فائض", + "مخزون ميت", + "مخزون بطيء الحركة", + "مخزون سريع الحركة", + "مخزون تالف", + "مخزون مرتجع", + "مخزون معلق", + "مخزون محجوز", + "مخزون متاح للبيع", + "مخزون قيد الطريق", + "مخزون قيد الإنتاج", + "تحليل ABC للمخزون", + "نموذج EOQ", + "تكلفة الاحتفاظ بالمخزون", + "تكلفة نفاد المخزون", + "موقع المخزون", + "بطاقة المخزون", + "سجل المخزون", + "كود المنتج", + "رمز الباركود", + "وحدة قياس المخزون", + "مستودع رئيسي", + "مستودع مبرد", + "رف التخزين", + "إدارة المستودعات", + "عمليات المستودع", + "استلام البضاعة", + "قيد محاسبي", + "قيود يومية", + "دفتر الأستاذ", + "الدفتر الرئيسي", + "دفتر الأستاذ العام", + "ميزان المراجعة", + "قائمة المركز المالي", + "قائمة الدخل", + "قائمة التدفقات النقدية", + "قائمة التغيرات في حقوق الملكية", + "الإيضاحات المالية", + "التقارير المالية", + "التحليل المالي", + "المراجعة المالية", + "التدقيق المالي", + "الإغلاق المالي", + "إغلاق الشهر", + "إغلاق السنة", + "ترحيل القيود", + "عكس القيود", + "حساب المصاريف", + "حساب الإيرادات", + "حساب الأصول", + "حساب الخصوم", + "حساب حقوق الملكية", + "ذمم مدينة", + "ذمم دائنة", + "الحسابات المستحقة القبض", + "الحسابات المستحقة الدفع", + "إدارة الديون", + "تحصيل الديون", + "مخصص الديون المشكوك فيها", + "شطب الديون", + "استرداد الديون", + "أعمار الديون", + "تحليل أعمار الذمم", + "كشف حساب العميل", + "كشف حساب المورد", + "مطابقة الحسابات", + "تسوية البنك", + "كشف بنك", + "حساب بنكي", + "تحويل بنكي", + "إيداع بنكي", + "سحب بنكي", + "فائدة بنكية", + "إدارة الموارد البشرية", + "ملف الموظف", + "سجل الموظف", + "بيانات الموظف", + "معلومات الموظف", + "هوية الموظف", + "تعيين موظف", + "إلحاق موظف", + "ترقية موظف", + "نقل موظف", + "فصل موظف", + "استقالة موظف", + "إنهاء خدمة", + "عقد العمل", + "وصف الوظيفة", + "القسم", + "الإدارة", + "الفرع", + "الموقع", + "تخطيط التعاقب", + "التطوير الوظيفي", + "مراجعة الأداء", + "مؤشرات أداء الموظف", + "أهداف الموظف", + "نقاط قوة الموظف", + "نقاط ضعف الموظف", + "التدريب والتطوير", + "برامج التدريب", + "سجل التدريب", + "شهادات الموظفين", + "مؤهلات الموظفين", + "خبرة الموظفين", + "مهارات الموظفين", + "كفاءات الموظفين", + "إجازة سنوية", + "إجازة أمومة", + "إجازة أبوة", + "إجازة بدون راتب", + "رصيد الإجازة", + "كشف الرواتب", + "معالجة الرواتب", + "تاريخ صرف الرواتب", + "راتب موظف", + "زيادة الراتب", + "مراجعة الراتب", + "هيكل الراتب", + "مقياس الراتب", + "بدلات الموظف", + "بدل السكن", + "بدل الطعام", + "بدل الهاتف", + "بدل اللباس", + "علاوة الأداء", + "علاوة سنوية", + "علاوة السوق", + "مكافأة الموظف", + "مكافأة الإنجاز", + "مكافأة نهاية الخدمة", + "عمولة الموظف", + "خصم الراتب", + "خصم الغياب", + "خصم التأخر", + "خصم السلفة", + "استقطاع الضريبة", + "استقطاع التأمين", + "استقطاع التقاعد", + "تأمين صحي", + "تأمين على الحياة", + "مزايا الموظف", + "حزمة المزايا", + "قسيمة الراتب", + "بيان الراتب", + "نموذج الراتب", + "إجمالي الراتب", + "الراتب المدفوع", + "الراتب المعلق", + "قرض الموظف", + "سداد القرض", + "خطة المشروع", + "جدول المشروع", + "تكاليف المشروع", + "أهداف المشروع", + "تسليمات المشروع", + "مراحل المشروع", + "معالم المشروع", + "الجدول الزمني للمشروع", + "مدة المشروع", + "تاريخ بدء المشروع", + "تاريخ انتهاء المشروع", + "تقدم المشروع", + "تقرير المشروع", + "اجتماع المشروع", + "فريق المشروع", + "مدير المشروع", + "أعضاء الفريق", + "مهام المشروع", + "عبء العمل", + "سعة الفريق", + "اعتماد المشروع", + "قضايا المشروع", + "تغييرات المشروع", + "موافقة التغيير", + "مستجدات المشروع", + "مراجعة المشروع", + "درس مستفاد", + "رعيل المشروع", + "إدارة علاقات العملاء", + "بيانات العميل", + "ملف العميل", + "سجل العميل", + "معلومات العميل", + "تاريخ العميل", + "تصنيف العميل", + "فئة العميل", + "مجموعة العميل", + "نوع العميل", + "قطاع العميل", + "صناعة العميل", + "موقع العميل", + "منطقة العميل", + "حجم العميل", + "قيمة العميل", + "اكتساب العميل", + "الاحتفاظ بالعميل", + "تحليل العميل", + "رضا العميل", + "ولاء العميل", + "تقييم العميل", + "ملاحظات العميل", + "خدمة العميل", + "دعم العميل", + "تواصل مع العميل", + "وقت الاستجابة", + "فرصة بيع", + "عروض أسعار للعملاء", + "اقتراح تجاري", + "عميل جديد", + "عميل حالي", + "عميل مفقود", + "عميل محتمل", + "عميل مميز", + "عميل استراتيجي", + "شريك العمل", + "اتفاقية الشراكة", + "تطوير العلاقة", + "الاتصال بالعميل", + "أمر إنتاج", + "أوامر الإنتاج", + "كمية الإنتاج", + "طاقة الإنتاج", + "وقت الإنتاج", + "دورة الإنتاج", + "مراحل الإنتاج", + "عملية الإنتاج", + "خط الإنتاج", + "إيقاف الإنتاج", + "استئناف الإنتاج", + "تقرير الإنتاج", + "تتبع الإنتاج", + "ضبط الجودة", + "معايير الجودة", + "اختبار الجودة", + "رفض الجودة", + "عيوب الإنتاج", + "الهدر في الإنتاج", + "مواد الإنتاج", + "توفر المواد", + "طلب المواد", + "الآلات والمعدات", + "صيانة الآلات", + "وقت تشغيل الآلة", + "توقف الآلة", + "إصلاح الآلة", + "استبدال الآلة", + "عمال الإنتاج", + "ساعات العمل", + "إنتاجية العمال", + "كفاءة العمالة", + "قائمة الأصول", + "تسجيل الأصول", + "شراء الأصول", + "تقييم الأصول", + "إهلاك الأصول", + "تراكم الإهلاك", + "القيمة الدفترية للأصول", + "القيمة السوقية للأصول", + "عمر الأصل", + "فئة الأصل", + "نوع الأصل", + "موقع الأصل", + "حالة الأصل", + "رمز الأصل", + "بطاقة الأصل", + "أصول ثابتة", + "أصول متداولة", + "أصول غير ملموسة", + "أصول ملموسة", + "أثاث ومعدات", + "آلات ومعدات", + "عقارات ومباني", + "مركبات", + "أجهزة حاسوب", + "أجهزة مكتبية", + "صيانة الأصول", + "إصلاح الأصل", + "ترقية الأصل", + "تحسين الأصل", + "تأمين الأصل", + "تتبع الأصل", + "جرد الأصول", + "مراجعة الأصول", + "تقرير الأصول", + "احتساب الضريبة", + "تقديم الضريبة", + "سداد الضريبة", + "استرداد الضريبة", + "اعتراض ضريبي", + "تدقيق ضريبي", + "ضريبة القيمة المضافة", + "رقم التسجيل الضريبي", + "شهادة الإعفاء الضريبي", + "ضريبة الدخل", + "ضريبة الشركات", + "ضريبة الأرباح", + "ضريبة المبيعات", + "ضريبة الرسوم الجمركية", + "ضريبة الاستيراد", + "ضريبة التصدير", + "إعفاء ضريبي", + "خصم ضريبي", + "وعاء ضريبي", + "التزام ضريبي", + "استحقاق الضريبة", + "موعد سداد الضريبة", + "غرامة ضريبية", + "تعديل ضريبي", + "الامتثال الضريبي", + "لائحة الامتثال", + "ضوابط الامتثال", + "مراجعة الامتثال", + "سياسة الامتثال", + "متطلبات قانونية", + "متطلبات تنظيمية", + "إذن حكومي", + "ترخيص تجاري", + "شهادة تسجيل", + "رخصة التشغيل", + "موافقة تنظيمية", + "إصدار الفاتورة", + "فاتورة تدريجية", + "فاتورة أولية", + "فاتورة نهائية", + "فاتورة متكررة", + "فاتورة يدوية", + "فاتورة تلقائية", + "رقم الفاتورة", + "تاريخ الفاتورة", + "تاريخ الاستحقاق", + "شروط الدفع", + "طريقة الدفع", + "دفع نقدي", + "دفع ببطاقة", + "دفع إلكتروني", + "دفع بالشيك", + "دفع بالتحويل", + "دفع مقدم", + "دفع جزئي", + "دفع كامل", + "دفع متأخر", + "رسوم تأخير", + "تذكير الدفع", + "إيصال الدفع", + "تأكيد الدفع", + "إعادة الدفع", + "مبالغ قابلة للاسترداد", + "مطابقة المدفوعات", + "دورة المدفوعات", + "بوابة الدفع", + "معالجة الدفع", + "تأمين الدفع", + "إدارة سلسلة التوريد", + "شركاء سلسلة التوريد", + "رؤية سلسلة التوريد", + "خطة سلسلة التوريد", + "زمن دورة سلسلة التوريد", + "كفاءة سلسلة التوريد", + "الشحن والتوزيع", + "أمر شحن", + "تتبع الشحنة", + "تأخر الشحنة", + "استلام الشحنة", + "مستند الشحن", + "سند الشحن", + "وثيقة جمركية", + "إجراءات التخليص الجمركي", + "رسوم الشحن", + "طريقة الشحن", + "ناقل الشحن", + "تتبع الطلبية", + "التسليم المجدول", + "التسليم المبكر", + "التسليم المتأخر", + "رقم التتبع", + "حالة التسليم", + "التسليم الجزئي", + "التسليم المكتمل", + "إدارة العائدات", + "سياسة الإرجاع", + "طلب الإرجاع", + "إجراءات الإرجاع", + "استلام المرتجعات", + "أسباب الإرجاع", + "إحصائيات الإرجاع", + "إعداد الميزانية", + "الميزانية السنوية", + "الميزانية الشهرية", + "ميزانية الربع", + "تحديث الميزانية", + "تعديل الميزانية", + "ميزانية القسم", + "مراقبة الميزانية", + "تجاوز الميزانية", + "وفر الميزانية", + "توقعات مالية", + "توقعات قصيرة المدى", + "توقعات طويلة المدى", + "خطة الأعمال", + "خطة التعافي", + "تخفيض التكاليف", + "التكلفة الثابتة", + "تكلفة البضاعة المباعة", + "تكلفة التشغيل", + "تحليل التعادل", + "نسبة التكلفة إلى الإيراد", + "التحكم في الإنفاق", + "الإنفاق الرأسمالي", + "الإنفاق التشغيلي", + "الإنفاق المعلق", + "الإنفاق الفعلي", + "الإنفاق المتوقع", + "لوحة التحكم التنفيذية", + "لوحة المؤشرات", + "لوحة الأداء", + "تقرير تلقائي", + "تقرير جاهز", + "تقرير معياري", + "إرسال التقرير", + "تصدير التقرير", + "تنسيق التقرير", + "تصفية التقرير", + "فرز التقرير", + "تجميع التقرير", + "بيانات المقارنة", + "تحليل الاتجاه", + "تحليل الانحراف", + "رسم بياني خطي", + "رسم بياني عمودي", + "رسم دائري", + "مخطط المنطقة", + "مخطط مبعثر", + "خريطة الحرارة", + "جدول المحاور", + "جدول البيانات", + "مؤشرات الأداء الرئيسية", + "مقياس الأداء", + "هدف القياس", + "القيمة الفعلية", + "القيمة المستهدفة", + "الفجوة في الأداء", + "اتجاه صاعد", + "اتجاه نازل", + "اتجاه ثابت", + "تنبؤ بالبيانات", + "التحليل الإحصائي", + "إحصاءات الأعمال", + "تقارير ذكاء الأعمال", + "تحليل البيانات الكبيرة", + "ما هو رصيد الحساب؟", + "كم قيمة الطلب؟", + "من هو المورد الأفضل؟", + "ما هو أكثر منتج مبيعاً؟", + "كم عدد العملاء الجدد؟", + "ما هي حالة الفاتورة؟", + "هل تم سداد الفاتورة؟", + "متى موعد التسليم؟", + "ما هو رصيد المخزون؟", + "كم كمية المنتج المتاحة؟", + "من هو المسؤول عن المشروع؟", + "ما هو إجمالي المصروفات؟", + "كم يبلغ إجمالي الإيرادات؟", + "ما هو أعلى طلب؟", + "من هو العميل الأعلى إنفاقاً؟", + "ما هي المنتجات المنخفضة المخزون؟", + "كم عدد الفواتير المتأخرة؟", + "ما هو رصيد المورد؟", + "متى تم آخر عملية شراء؟", + "ما هي نسبة الربح؟", + "كم بلغت المبيعات هذا الشهر؟", + "ما هو متوسط قيمة الطلب؟", + "هل تجاوزنا الميزانية؟", + "كم عدد الموظفين في كل قسم؟", + "من هو الموظف الأكثر مبيعاً؟", + "ما هي أعلى نفقات الشهر؟", + "كم عدد أوامر الشراء المعلقة؟", + "ما هو وضع المخزون الآن؟", + "ما هو إجمالي الرواتب هذا الشهر؟", + "كم عدد المشاريع النشطة؟", + "ما هي حالة الشحنة؟", + "كم يستغرق وقت التسليم؟", + "من هو المورد الأكثر تعاملاً؟", + "ما هو إجمالي الضرائب المستحقة؟", + "كم عدد العروض المقدمة هذا الشهر؟", + "ما هي قيمة المخزون الحالية؟", + "كم عدد الطلبات المكتملة؟", + "ما هو معدل نمو المبيعات؟", + "هل لدينا مخزون كافٍ؟", + "ما هي المنتجات الأكثر طلباً؟", + "كم عدد الشكاوى المفتوحة؟", + "ما هو الوضع المالي للشركة؟", + "كم تبلغ قيمة العقود الحالية؟", + "ما هي قائمة الأصول الثابتة؟", + "كم عدد الموظفين الجدد هذا الشهر؟", + "ما هو إجمالي مدفوعات الموردين؟", + "هل تم اعتماد الطلب؟", + "كم الوقت المتبقي في المشروع؟", + "ما هو ميزان الأرباح والخسائر؟", + "كم عدد العملاء النشطين؟", + "ما هي معدلات الحضور الشهرية؟", + "ابحث عن فاتورة", + "ابحث عن طلب", + "ابحث عن موظف", + "ابحث عن عميل", + "ابحث عن منتج", + "ابحث عن مورد", + "ابحث عن مشروع", + "ابحث عن معاملة", + "احضر تفاصيل الفاتورة", + "احضر تفاصيل الطلب", + "احضر تفاصيل العميل", + "احضر تفاصيل المورد", + "احضر تفاصيل الموظف", + "احضر تفاصيل المنتج", + "عرض قائمة الفواتير", + "عرض قائمة الطلبات", + "عرض قائمة العملاء", + "عرض قائمة الموردين", + "عرض قائمة الموظفين", + "عرض قائمة المنتجات", + "عرض قائمة المشاريع", + "عرض الفواتير المعلقة", + "عرض الطلبات المعلقة", + "عرض المدفوعات المعلقة", + "عرض الموظفين الغائبين", + "عرض المنتجات المنخفضة المخزون", + "عرض العملاء المتأخرين في السداد", + "فلتر حسب التاريخ", + "فلتر حسب الحالة", + "فلتر حسب القسم", + "فلتر حسب المنطقة", + "فلتر حسب الفئة", + "فلتر حسب النوع", + "رتب حسب التاريخ", + "رتب حسب القيمة", + "رتب حسب الاسم", + "رتب حسب الحالة", + "رتب تصاعدياً", + "رتب تنازلياً", + "صدّر البيانات", + "صدّر التقرير", + "صدّر إلى Excel", + "صدّر إلى PDF", + "طباعة التقرير", + "طباعة قائمة التعبئة", + "طباعة كشف الحساب", + "نظام تخطيط موارد المؤسسة", + "وحدات نظام ERP", + "وحدة المحاسبة", + "وحدة المخزون", + "وحدة الشراء", + "وحدة الموارد البشرية", + "وحدة المشاريع", + "وحدة التصنيع", + "وحدة الأصول الثابتة", + "وحدة إدارة الجودة", + "وحدة سلسلة التوريد", + "وحدة إدارة العلاقات", + "تكامل النظام", + "قاعدة بيانات ERP", + "واجهة المستخدم", + "لوحة تحكم ERP", + "ضبط النظام", + "تخصيص النظام", + "ترقية النظام", + "نسخ احتياطي للنظام", + "استعادة النظام", + "أداء النظام", + "تدقيق النظام", + "دور المستخدم", + "إدارة المستخدمين", + "إعداد المستخدم", + "تسجيل الدخول", + "تسجيل الخروج", + "كلمة المرور", + "الأمان والخصوصية", + "سجل النشاط", + "تاريخ التغييرات", + "نسخة النظام", + "تحديث النظام", + "إصلاح الأخطاء", + "دعم النظام", + "توثيق النظام", + "تدريب المستخدمين", + "تنفيذ النظام", + "مرحلة الإطلاق", + "عملية تجارية", + "سير العمل", + "مسار الموافقة", + "سياسة الشركة", + "إجراءات العمل", + "دليل المستخدم", + "أفضل الممارسات", + "مقياس الجودة", + "تحسين العملية", + "إعادة هيكلة العملية", + "أتمتة العملية", + "رقمنة العملية", + "كفاءة العملية", + "إنتاجية العملية", + "دورة الموافقة", + "طلب موافقة", + "قبول الطلب", + "تعليق الطلب", + "إعادة إرسال الطلب", + "صلاحية الموافقة", + "الموافق المسؤول", + "نائب الموافق", + "تصعيد الطلب", + "إشعار الموافقة", + "رسالة تذكير", + "تنبيه البريد الإلكتروني", + "إشعار الرسائل", + "تنبيه المهام", + "تنبيه المواعيد النهائية", + "تنبيه انخفاض المخزون", + "تنبيه الفاتورة المتأخرة", + "تنبيه تجاوز الميزانية", + "تنبيه انتهاء العقد", + "تقرير حركة المخزون", + "تقرير مقارنة الأسعار", + "تقرير أداء الموردين", + "تقرير أداء المبيعات", + "تقرير أداء الموظفين", + "تقرير الذمم المدينة", + "تقرير الذمم الدائنة", + "تقرير التدفق النقدي", + "تقرير الميزانية والفعلي", + "تقرير إهلاك الأصول", + "تقرير جرد المخزون", + "تقرير دوران المخزون", + "تقرير الشراء الشهري", + "تقرير الحضور الشهري", + "تقرير الإجازات السنوي", + "تقرير أوامر الإنتاج", + "تقرير المشاريع النشطة", + "تقرير إنجازات المشاريع", + "تقرير أداء العملاء", + "تقرير أعمار الذمم", + "تقرير المقارنة السنوية", + "تقرير ربحية المنتجات", + "تقرير تحليل الموردين", + "تقرير مراقبة الجودة", + "تقرير شكاوى العملاء", + "تقرير دقة التسليم", + "تقرير المخزون المتحرك", + "تقرير المخزون الراكد", + "ملخص عمليات اليوم", + "ملخص الأسبوع التشغيلي", + "ملخص أداء الشهر", + "ملخص الربع الأول", + "ملخص الربع الثاني", + "ملخص الربع الثالث", + "ملخص الربع الرابع", + "مقارنة ربع بربع", + "مقارنة سنة بسنة", + "تحليل الاتجاه الشهري", + "متجر إلكتروني", + "مبيعات إلكترونية", + "طلب عبر الإنترنت", + "عقد رقمي", + "توقيع رقمي", + "مستند رقمي", + "أرشيف رقمي", + "ملف رقمي", + "سحابة البيانات", + "تخزين سحابي", + "تكامل API", + "تكامل الطرف الثالث", + "تكامل البنك", + "تكامل الشحن", + "واجهة برمجة التطبيقات", + "تبادل البيانات", + "تصدير البيانات", + "ترحيل البيانات", + "تنظيف البيانات", + "استرداد البيانات", + "تشفير البيانات", + "الأهداف الاستراتيجية", + "الرؤية والرسالة", + "تحليل SWOT", + "حصة السوق", + "اختراق السوق", + "توسع السوق", + "استراتيجية المنتج", + "استراتيجية النمو", + "خطة الطوارئ", + "حوكمة الشركات", + "لجنة التدقيق", + "مجلس الإدارة", + "الامتثال التنظيمي", + "إطار الامتثال", + "سياسة المخاطر", + "قيادة التغيير", + "ثقافة الشركة", + "قيم المؤسسة", + "أخلاقيات الأعمال", + "المسؤولية الاجتماعية", + "الاستدامة", + "مؤشرات الاستدامة", + "قارن مبيعات هذا العام بالعام الماضي", + "أظهر لي أعلى عشرة عملاء من حيث الإنفاق", + "ما هي المنتجات ذات الأداء الضعيف؟", + "قدم تحليلاً لأسباب انخفاض المبيعات", + "أظهر توزيع المبيعات حسب المنطقة", + "ما هو متوسط وقت الدفع للعملاء؟", + "أي المنتجات لديها أعلى هامش ربح؟", + "ما هي نسبة العملاء المكررين؟", + "أظهر تحليل الأسباب الجذرية للإرجاعات", + "ما هو معدل نمو قاعدة العملاء؟", + "قارن أداء الموردين هذا الربع", + "أظهر أكثر خمسة مشاريع ربحية", + "ما هي أعلى تكاليف التشغيل؟", + "أين يمكن تخفيض النفقات؟", + "ما هو توقع المبيعات الشهر القادم؟", + "أظهر تحليل الربحية حسب العميل", + "ما هو متوسط حجم الطلبات؟", + "ما هي الفترة الأكثر مبيعاً في العام؟", + "قارن كفاءة الأقسام المختلفة", + "ما هو مستوى رضا العملاء الشهر الماضي؟", + "تفاصيل الحساب", + "كشف الحساب", + "فتح حساب", + "إغلاق حساب", + "تجميد الحساب", + "تنشيط الحساب", + "دمج الحسابات", + "تحويل بين الحسابات", + "مطابقة حسابات", + "أسماء الحسابات", + "أرصدة الحسابات", + "تصنيف الحسابات", + "شجرة الحسابات", + "إعادة هيكلة الحسابات", + "مخطط الحسابات", + "فهرس الحسابات", + "حركات الحساب", + "مراجعة معاملات الحساب", + "ترحيل المعاملات", + "تسوية المعاملات", + "تصفية المعاملات", + "البحث في المعاملات", + "إلغاء المعاملة", + "عكس المعاملة", + "تعديل المعاملة", + "نقل المعاملة", + "نسخ المعاملة", + "تكرار المعاملة", + "تاريخ المعاملة", + "مبلغ المعاملة", + "وصف المعاملة", + "مرجع المعاملة", + "مراجعة العمليات", + "نطاق المراجعة", + "تقرير المراجعة", + "نتائج المراجعة", + "توصيات المراجعة", + "متابعة المراجعة", + "معيار المراجعة", + "منهجية المراجعة", + "دليل المراجعة", + "فريق المراجعة", + "رئيس المراجعة", + "جدول المراجعة", + "تكرار المراجعة", + "نتيجة المراجعة", + "رقم الإشارة", + "كود الفاتورة", + "فاتورة مكررة", + "تنبيه فاتورة", + "طباعة فاتورة ضريبية", + "إرسال فاتورة", + "إعادة إرسال الفاتورة", + "أرشفة الفاتورة", + "تعليق الفاتورة", + "استئناف الفاتورة", + "مراجعة الفاتورة", + "اعتماد الفاتورة", + "نسخة من الفاتورة", + "رمز التحقق", + "تفاصيل بنود الفاتورة", + "ملاحظات الفاتورة", + "شروط الفاتورة", + "عملة الفاتورة", + "رمز العميل", + "هوية العميل", + "رقم سجل العميل", + "بريد العميل الإلكتروني", + "هاتف العميل", + "عنوان العميل", + "مدينة العميل", + "دولة العميل", + "مجال عمل العميل", + "جهة اتصال العميل", + "موظف خدمة العميل", + "نقاط ولاء العميل", + "تصنيف رصيد العميل", + "أيام الائتمان", + "تاريخ تسجيل العميل", + "عدد طلبات العميل", + "إجمالي مشتريات العميل", + "سجل تواصل العميل", + "موعد الشحن", + "رقم بوليصة الشحن", + "وزن الشحنة", + "حجم الشحنة", + "شركة الشحن", + "طريقة التغليف", + "تأمين الشحنة", + "دولة المنشأ", + "دولة الوجهة", + "ميناء الشحن", + "رقم الحاوية", + "مدة العبور", + "قائمة البضاعة", + "الإعلان الجمركي", + "مسؤول الشحن", + "خطة التشغيل", + "جدول العمل اليومي", + "وردية العمل", + "خطة الوردية", + "جدول الورديات", + "الطاقة الإنتاجية القصوى", + "الطاقة الفعلية", + "فجوة الطاقة", + "بطاقة العمل", + "مسار التصنيع", + "التفتيش على الجودة", + "تقرير الجودة", + "عينة الجودة", + "قياس الجودة", + "رقابة العملية", + "مؤشر جودة المنتج", + "أسباب العيوب", + "تحسين الجودة", + "صيانة وقائية", + "صيانة تصحيحية", + "صيانة طارئة", + "طلب صيانة", + "أمر عمل الصيانة", + "تقرير الصيانة", + "مدة الصيانة", + "فني الصيانة", + "قطع الغيار", + "مخزون قطع الغيار", + "مورد قطع الغيار", + "ضمان المعدات", + "عقد الصيانة", + "خدمة ما بعد البيع", + "تتبع المعدات", + "بطاقة الأصل الثابت", + "تاريخ الشراء للأصل", + "اجتماع مجلس الإدارة", + "قرار مجلس الإدارة", + "جدول أعمال الاجتماع", + "تقرير للمساهمين", + "إفصاح مالي", + "تقرير المدقق", + "رأي المدقق", + "ملاحظات المدقق", + "مخاطر الامتثال", + "لائحة داخلية", + "قواعد العمل", + "سياسة التعامل", + "ميثاق الأخلاقيات", + "الإبلاغ عن المخالفات", + "حماية المبلغين", + "نزاع مصالح", + "سرية المعلومات", + "حماية البيانات", + "بنية تحتية تقنية", + "خادم الشركة", + "قاعدة بيانات المؤسسة", + "نسخ احتياطي آلي", + "استمرارية تقنية", + "أمن المعلومات", + "كلمة مرور المستخدم", + "حساب مستخدم جديد", + "إلغاء حساب المستخدم", + "صلاحيات الوصول", + "سجل الدخول", + "مراقبة الأمن", + "تحديث البرنامج", + "اختبار النظام", + "وقت التوقف عن العمل", + "نوع مستند جديد", + "طرف عرض مخصص", + "تقرير مخصص مبني", + "تقرير نصي", + "تقرير قائمة", + "تقرير استعلام نصي", + "طريقة عرض Kanban", + "طريقة عرض التقويم", + "طريقة عرض قائمة", + "طريقة عرض تقرير", + "منتج مخصص", + "مجموعة العناصر", + "قائمة التسعير", + "قاعدة التسعير", + "خصم الكمية", + "سعر التكلفة", + "سعر البيع", + "هامش السعر", + "هيكل التسعير", + "تعديل السعر", + "احتاج بيانات الشهر", + "أعطني تقرير المبيعات", + "وضح لي الأرقام", + "أبلغني عن الوضع", + "اشرح لي التقرير", + "لخص البيانات", + "قارن بين الأرقام", + "حدث البيانات", + "نظّم البيانات", + "صنف البيانات", + "حلل الأرقام", + "استخرج البيانات", + "ابحث في الأرشيف", + "ابحث في السجلات", + "استعرض التاريخ", + "عرض البيانات القديمة", + "بيانات الأرشيف", + "تحليل الفجوة", + "تقدير النتائج", + "احتياط قانوني", + "احتياط نظامي", + "احتياط اختياري", + "أرباح محتجزة", + "توزيع الأرباح", + "أرباح لكل سهم", + "سياسة توزيع الأرباح", + "التمويل الذاتي", + "تمويل خارجي", + "قرض مصرفي", + "قرض طويل الأجل", + "قرض قصير الأجل", + "جدول سداد القرض", + "معدل الفائدة", + "تكلفة رأس المال", + "هيكل رأس المال", + "رافعة مالية", + "نسبة الرافعة", + "مؤشر الملاءة المالية", + "تحليل ربحية المنتج", + "تحليل ربحية العميل", + "تحليل ربحية القسم", + "تحليل ربحية القناة", + "تحليل تكلفة دورة الحياة", + "محاسبة التكاليف", + "مراكز التكلفة", + "مراكز الربح", + "تحميل التكاليف", + "تكاليف مباشرة", + "تكاليف غير مباشرة", + "تكاليف الإنتاج الفعلية", + "تكاليف الإنتاج المعيارية", + "انحراف التكاليف", + "تقرير انحراف التكلفة", + "إنشاء عرض سعر", + "تعديل عرض سعر", + "إرسال عرض سعر", + "اعتماد عرض السعر", + "رفض عرض السعر", + "تحويل عرض السعر إلى طلب", + "تحويل الطلب إلى فاتورة", + "إنشاء أمر بيع", + "تعديل أمر البيع", + "إلغاء أمر البيع", + "اعتماد أمر البيع", + "متابعة أوامر البيع", + "حالة أمر البيع", + "أوامر البيع المفتوحة", + "أوامر البيع المغلقة", + "أوامر البيع المعلقة", + "أوامر البيع المتأخرة", + "طلبات العملاء", + "طلبات البيع اليومية", + "طلبات البيع الشهرية", + "طلبات البيع السنوية", + "إجمالي المبيعات", + "صافي المبيعات", + "المبيعات النقدية", + "المبيعات الآجلة", + "المبيعات عبر الإنترنت", + "مبيعات نقاط البيع", + "مبيعات الفروع", + "مبيعات المناطق", + "مبيعات المنتجات", + "مبيعات الخدمات", + "مبيعات الاشتراكات", + "مبيعات المشاريع", + "مبيعات الجملة", + "مبيعات التجزئة", + "قيمة المبيعات", + "عدد الطلبات", + "عدد العملاء", + "عدد الفواتير", + "متوسط قيمة الطلب", + "متوسط قيمة العميل", + "متوسط حجم الصفقة", + "إجمالي الخصومات", + "إجمالي الضرائب", + "إجمالي المرتجعات", + "إجمالي الأرباح", + "هامش الربح", + "نسبة الربحية", + "أداء المبيعات", + "تحليل المبيعات", + "تحليل الأرباح", + "تحليل الخصومات", + "تحليل الإيرادات", + "تحليل الطلبات", + "تحليل العملاء", + "تحليل المنتجات", + "تحليل المناطق", + "تحليل الفروع", + "تحليل القنوات", + "تحليل الاتجاهات", + "تحليل النمو", + "تحليل الخسائر", + "تحليل الصفقات", + "تحليل التحويل", + "تحليل الفرص", + "توقعات المبيعات", + "توقع الإيرادات", + "توقع الأرباح", + "التنبؤ بالمبيعات", + "خطة المبيعات", + "هدف المبيعات", + "تحقيق الهدف", + "نسبة تحقيق الهدف", + "أهداف المندوبين", + "أهداف المناطق", + "أهداف الفروع", + "أهداف المنتجات", + "أهداف القنوات", + "قمع المبيعات", + "مراحل البيع", + "خط الأنابيب", + "قيمة خط الأنابيب", + "فرص البيع", + "الفرص المفتوحة", + "الفرص المغلقة", + "الفرص الضائعة", + "الفرص المؤهلة", + "إدارة العملاء المحتملين", + "العملاء المحتملين الجدد", + "تحويل العملاء المحتملين", + "تقييم العملاء المحتملين", + "مصدر العميل المحتمل", + "تخصيص العملاء المحتملين", + "توجيه العملاء المحتملين", + "متابعة العملاء المحتملين", + "حالة العميل المحتمل", + "درجة العميل المحتمل", + "إدارة الحسابات", + "إدارة العملاء", + "ملف العميل", + "تاريخ العميل", + "نشاط العميل", + "تواصل العميل", + "اجتماعات العميل", + "مكالمات العميل", + "رسائل البريد الإلكتروني", + "متابعة البريد الإلكتروني", + "سجل التواصل", + "إدارة العلاقات", + "إدارة الصفقات", + "إنشاء صفقة", + "تعديل الصفقة", + "إغلاق الصفقة", + "قيمة الصفقة", + "احتمالية الصفقة", + "صاحب الصفقة", + "مرحلة الصفقة", + "مدة الصفقة", + "سرعة الصفقة", + "الصفقات الرابحة", + "الصفقات الخاسرة", + "معدل الفوز", + "معدل الخسارة", + "معدل الإغلاق", + "مدة دورة المبيعات", + "مدة الإغلاق", + "أداء مندوبي المبيعات", + "إنتاجية المندوب", + "نشاط المندوب", + "عدد المكالمات", + "عدد الاجتماعات", + "عدد الزيارات", + "عدد العروض", + "عدد الصفقات", + "عدد العملاء الجدد", + "عدد العملاء النشطين", + "عدد العملاء غير النشطين", + "أفضل مندوب مبيعات", + "أفضل منطقة مبيعات", + "أفضل فرع مبيعات", + "أفضل منتج مبيعاً", + "أفضل عميل", + "أعلى الإيرادات", + "أعلى الأرباح", + "أعلى الخصومات", + "أعلى العمولات", + "إدارة العمولات", + "احتساب العمولة", + "صرف العمولة", + "خطة العمولات", + "عمولة المبيعات", + "عمولة الفريق", + "حوافز المبيعات", + "مكافآت المبيعات", + "خصومات العملاء", + "خصومات الكمية", + "خصومات العروض", + "خصومات الولاء", + "خصومات موسمية", + "إدارة التسعير", + "قائمة الأسعار", + "سعر البيع", + "سعر الجملة", + "سعر التجزئة", + "السعر الصافي", + "السعر النهائي", + "تحديث الأسعار", + "اعتماد الأسعار", + "تعديل الأسعار", + "مقارنة الأسعار", + "تحليل الأسعار", + "مرونة الأسعار", + "استراتيجية التسعير", + "التسعير الديناميكي", + "البيع الإضافي", + "البيع المتقاطع", + "عروض الباقات", + "العروض الترويجية", + "العروض المحدودة", + "الكوبونات", + "أكواد الخصم", + "العروض الموسمية", + "إدارة الحملات", + "الحملات التسويقية", + "أداء الحملات", + "تكلفة الحملة", + "عائد الاستثمار", + "توليد العملاء المحتملين", + "تنمية العملاء المحتملين", + "التسويق بالبريد الإلكتروني", + "الرسائل النصية التسويقية", + "التسويق الرقمي", + "التسويق عبر وسائل التواصل", + "تحليل الحملات", + "معدل التحويل", + "معدل التفاعل", + "عدد النقرات", + "عدد الظهور", + "عدد الزيارات", + "مصدر الزيارات", + "سلوك العملاء", + "رحلة العميل", + "تجربة العميل", + "رضا العملاء", + "ولاء العملاء", + "شكاوى العملاء", + "حل شكاوى العملاء", + "خدمة العملاء", + "إدارة التذاكر", + "طلبات الدعم", + "سرعة الاستجابة", + "زمن الحل", + "تقييم الخدمة", + "استبيان العملاء", + "مؤشر رضا العملاء", + "صافي نقاط الترويج", + "تحليل الملاحظات", + "تقارير المبيعات", + "تقرير يومي", + "تقرير أسبوعي", + "تقرير شهري", + "تقرير سنوي", + "لوحة المبيعات", + "لوحة الإيرادات", + "لوحة الأرباح", + "لوحة العملاء", + "لوحة الصفقات", + "لوحة الأداء", + "لوحة المؤشرات", + "مؤشرات الأداء الرئيسية", + "تقرير الأداء", + "تقرير المندوبين", + "تقرير العملاء", + "تقرير المنتجات", + "تقرير المناطق", + "تقرير الفروع", + "تقرير الصفقات", + "تقرير التحويل", + "تقرير الخصومات", + "تقرير العمولات", + "تقرير المرتجعات", + "تقرير الأرباح", + "تقرير الإيرادات", + "تقرير الخسائر", + "تقرير التوقعات", + "تقرير النشاط", + "تقرير المكالمات", + "تقرير الاجتماعات", + "تقرير المتابعة", + "تقرير العملاء المحتملين", + "تقرير خط الأنابيب", + "تقرير القمع", + "تقرير الفرص", + "تقرير الطلبات", + "تقرير الفواتير", + "تقرير المدفوعات", + "تقرير التحصيلات", + "إدارة التحصيل", + "متابعة التحصيلات", + "المدفوعات المستحقة", + "الفواتير غير المدفوعة", + "تذكير الدفع", + "متابعة الديون", + "الحسابات المدينة", + "أعمار الديون", + "تحصيل العملاء", + "جدولة التحصيل", + "تسوية المدفوعات", + "إدارة المرتجعات", + "طلبات الإرجاع", + "اعتماد المرتجع", + "رفض المرتجع", + "تحليل المرتجعات", + "أسباب المرتجعات", + "معدل المرتجعات", + "قيمة المرتجعات", + "تأثير المرتجعات", + "إلغاء الفاتورة", + "تعديل الفاتورة", + "إعادة إصدار الفاتورة", + "الفواتير الضريبية", + "الفواتير الإلكترونية", + "الفواتير المتكررة", + "الفواتير المؤجلة", + "الفواتير المستحقة", + "إدارة الاشتراكات", + "تجديد الاشتراك", + "إلغاء الاشتراك", + "خطط الاشتراك", + "إيرادات الاشتراك", + "العملاء المشتركين", + "إدارة العقود", + "تجديد العقود", + "العقود المنتهية", + "العقود النشطة", + "قيمة العقود", + "مدة العقود", + "شروط العقود", + "الموافقات البيعية", + "سير عمل المبيعات", + "اعتماد الخصومات", + "اعتماد الأسعار", + "اعتماد العروض", + "اعتماد الصفقات", + "اعتماد الطلبات", + "تنبيهات المبيعات", + "إشعارات الصفقات", + "إشعارات العملاء", + "إشعارات الفواتير", + "إشعارات التحصيل", + "إشعارات الأهداف", + "إشعارات الأداء", + "تنبيهات التأخير", + "تنبيهات المتابعة", + "تنبيهات الفرص", + "توزيع العملاء", + "توزيع الفرص", + "توزيع المناطق", + "توزيع المندوبين", + "إدارة المناطق البيعية", + "تقسيم المناطق", + "إدارة القنوات", + "قنوات البيع", + "المبيعات المباشرة", + "المبيعات غير المباشرة", + "المبيعات الهاتفية", + "المبيعات الميدانية", + "المبيعات الرقمية", + "المبيعات الداخلية", + "المبيعات الخارجية", + "إدارة الشركاء", + "إدارة الوكلاء", + "إدارة الموزعين", + "أداء الوكلاء", + "أداء الشركاء", + "أداء الموزعين", + "تحليل القنوات", + "تحليل الشركاء", + "تحليل الوكلاء", + "تحليل الموزعين", + "تحليل الحصة السوقية", + "تحليل المنافسين", + "اتجاهات السوق", + "الطلب في السوق", + "المنتجات الرائجة", + "المنتجات الراكدة", + "تحليل سلوك الشراء", + "تحليل تفضيلات العملاء", + "توصيات المنتجات", + "تحليل سلة المشتريات", + "تقارب المنتجات", + "تحليل الإيرادات حسب المنتج", + "تحليل الأرباح حسب المنتج", + "تحليل المبيعات حسب العميل", + "تحليل المبيعات حسب المنطقة", + "تحليل المبيعات حسب الفرع", + "تحليل المبيعات حسب القناة", + "تحليل المبيعات حسب المندوب", + "تحليل الأداء الشهري", + "تحليل الأداء السنوي", + "تحليل النمو الشهري", + "تحليل النمو السنوي", + "تحليل الإيرادات المتكررة", + "تحليل الإيرادات الجديدة", + "تحليل العملاء الجدد", + "تحليل العملاء المفقودين", + "تحليل الاحتفاظ بالعملاء", + "تحليل التسرب", + "تحليل إعادة الشراء", + "تحليل تكرار الشراء", + "تحليل متوسط الطلب", + "تحليل قيمة العميل", + "تحليل دورة العميل", + "تحليل وقت الاستجابة", + "تحليل سرعة الإغلاق", + "تحليل جودة العملاء المحتملين", + "تحليل أداء الفريق", + "تحليل أداء الإدارة", + "تحليل أداء الحملة", + "تحليل أداء المنتج", + "تحليل أداء الخدمة", + "تحليل تكلفة الاكتساب", + "تحليل تكلفة المبيعات", + "تحليل مصروفات المبيعات", + "تحليل كفاءة المبيعات", + "تحليل إنتاجية الفريق", + "تحليل استغلال الموارد", + "تحليل تحقيق الأهداف", + "تحليل فجوة الأداء", + "تحليل الانحرافات", + "تحليل الاتجاهات المستقبلية", + "تحليل التوقعات البيعية", + "تحليل السيناريوهات", + "تحليل ماذا لو", + "التحليلات التنبؤية للمبيعات", + "ذكاء المبيعات", + "ذكاء الأعمال", + "رؤى المبيعات", + "رؤى العملاء", + "رؤى السوق", + "التوصيات الذكية", + "أتمتة المبيعات", + "أتمتة المتابعة", + "أتمتة البريد الإلكتروني", + "أتمتة العروض", + "أتمتة الفواتير", + "أتمتة التحصيل", + "أتمتة التنبيهات", + "أتمتة سير العمل", + "أتمتة الموافقات", + "أتمتة خدمة العملاء", + "إدارة الأداء البيعي", + "إدارة دورة البيع", + "إدارة دورة العميل", + "إدارة الطلب إلى التحصيل", + "إدارة العلاقة مع العميل", + "إدارة حسابات العملاء", + "إدارة الإيرادات المتكررة", + "إدارة صفقات المؤسسة", + "إدارة حسابات الشركات", + "إدارة الحسابات الاستراتيجية", + "إدارة الحسابات الرئيسية", + "إدارة التوسع البيعي", + "إدارة تجديد العقود", + "إدارة فرص الترقية", + "إدارة فرص البيع المتقاطع", + "إدارة فرص البيع الإضافي", + "إدارة الولاء", + "إدارة تجربة الشراء", + "إدارة رحلة الشراء", + "إدارة التحويلات البيعية", + "إدارة أداء القنوات", + "إدارة أداء المناطق", + "إدارة أداء الفروع", + "إدارة أداء المنتجات", + "إدارة أداء الخدمات", + "إدارة أداء الحملات", + "إدارة أداء المندوبين", + "إدارة أداء العملاء", + "إدارة أداء الوكلاء", + "إدارة أداء الموزعين", + "إدارة خطط المبيعات", + "إدارة الميزانية البيعية", + "إدارة توقعات الإيرادات", + "إدارة مخاطر المبيعات", + "إدارة فرص النمو", + "إدارة استراتيجيات البيع", + "إدارة خطط التوسع", + "إدارة استدامة الإيرادات", + "إدارة كفاءة التحصيل", + "إدارة استرداد الإيرادات", + "إدارة خسائر الإيرادات", + "إدارة دورة الفاتورة", + "إدارة دورة التحصيل", + "إدارة دورة الطلب", + "إدارة دورة العميل المحتمل", + "إدارة دورة الفرصة", + "إدارة دورة الصفقة", + "إدارة دورة الاشتراك", + "إدارة دورة التجديد", + "إدارة دورة الدعم", + "إدارة دورة الخدمة", + "عميل جديد", + "بيانات العميل", + "تعديل العميل", + "حذف العميل", + "تصنيف العميل", + "رصيد العميل", + "كشف حساب العميل", + "سجل العميل", + "حالة العميل", + "عميل نشط", + "عميل غير نشط", + "رقم العميل", + "عنوان العميل", + "هاتف العميل", + "بريد العميل", + "تقييم العميل", + "ولاء العميل", + "ملاحظات العميل", + "نشاط العميل", + "تواصل العميل", + "اجتماعات العميل", + "طلبات العميل", + "فواتير العميل", + "تحصيل العميل", + "حد الائتمان", + "تجاوز حد الائتمان", + "تصنيف الحساب", + "نوع العميل", + "قطاع العميل", + "منطقة العميل", + "الرقم الضريبي للعميل", + "تاريخ التسجيل", + "تاريخ آخر طلب", + "إجمالي المبيعات للعميل", + "أرباح العميل", + "تاريخ الدفع", + "متوسط قيمة الطلب", + "معدل الشراء", + "معدل الإرجاع", + "حالة التحصيل", + "عميل محتمل", + "عميل دائم", + "عميل جديد", + "إدارة حساب العميل", + "تخصيص مندوب مبيعات", + "إدارة التواصل", + "تحليل العميل", + "تقارير العملاء", + "عميل محتمل", + "إضافة عميل محتمل", + "تحويل العميل المحتمل", + "تأهيل العميل المحتمل", + "مصدر العميل المحتمل", + "تقييم العميل المحتمل", + "متابعة العميل المحتمل", + "مرحلة العميل المحتمل", + "بيانات العميل المحتمل", + "رقم العميل المحتمل", + "تحليل العملاء المحتملين", + "العملاء المحتملين الجدد", + "العملاء المحتملين النشطين", + "العملاء المحتملين الباردين", + "العملاء المحتملين الساخنين", + "حملة العميل المحتمل", + "تكلفة العميل المحتمل", + "معدل التحويل", + "فرصة مبيعات", + "إغلاق الفرصة", + "إدارة الفرص", + "مصدر الزيارة", + "الاستفسارات الجديدة", + "طلبات التواصل", + "تسجيل المكالمات", + "متابعة البريد الإلكتروني", + "تخصيص العميل المحتمل", + "إدارة القمع البيعي", + "إدارة الفرص البيعية", + "عميل جديد", + "بيانات العميل", + "تعديل العميل", + "حذف العميل", + "تصنيف العميل", + "رصيد العميل", + "كشف حساب العميل", + "سجل العميل", + "حالة العميل", + "عميل نشط", + "عميل غير نشط", + "رقم العميل", + "عنوان العميل", + "هاتف العميل", + "بريد العميل", + "تقييم العميل", + "ولاء العميل", + "ملاحظات العميل", + "نشاط العميل", + "تواصل العميل", + "اجتماعات العميل", + "طلبات العميل", + "فواتير العميل", + "تحصيل العميل", + "حد الائتمان", + "تجاوز حد الائتمان", + "تصنيف الحساب", + "نوع العميل", + "قطاع العميل", + "منطقة العميل", + "الرقم الضريبي للعميل", + "تاريخ التسجيل", + "تاريخ آخر طلب", + "إجمالي المبيعات للعميل", + "أرباح العميل", + "تاريخ الدفع", + "متوسط قيمة الطلب", + "معدل الشراء", + "معدل الإرجاع", + "حالة التحصيل", + "عميل محتمل", + "عميل دائم", + "إدارة حساب العميل", + "تخصيص مندوب مبيعات", + "إدارة التواصل", + "تحليل العميل", + "تقارير العملاء", + "إضافة عميل محتمل", + "تحويل العميل المحتمل", + "تأهيل العميل المحتمل", + "مصدر العميل المحتمل", + "تقييم العميل المحتمل", + "متابعة العميل المحتمل", + "مرحلة العميل المحتمل", + "بيانات العميل المحتمل", + "رقم العميل المحتمل", + "تحليل العملاء المحتملين", + "العملاء المحتملين الجدد", + "العملاء المحتملين النشطين", + "العملاء المحتملين الباردين", + "العملاء المحتملين الساخنين", + "حملة العميل المحتمل", + "تكلفة العميل المحتمل", + "معدل التحويل", + "فرصة مبيعات", + "إغلاق الفرصة", + "إدارة الفرص", + "مصدر الزيارة", + "الاستفسارات الجديدة", + "طلبات التواصل", + "تسجيل المكالمات", + "متابعة البريد الإلكتروني", + "تخصيص العميل المحتمل", + "إدارة القمع البيعي", + "إدارة الفرص البيعية", + "قيمة الفرصة", + "مرحلة الفرصة", + "احتمالية الإغلاق", + "الفرص المفتوحة", + "الفرص المغلقة", + "الفرص الضائعة", + "مدة الفرصة", + "إدارة الصفقات", + "تحليل الصفقات", + "توقع الإيرادات", + "خط الأنابيب", + "قيمة خط الأنابيب", + "سرعة المبيعات", + "مدة دورة المبيعات", + "معدل الفوز", + "معدل الخسارة", + "أداء الصفقات", + "توزيع الفرص", + "مراجعة الفرص", + "نشاط الفرصة", + "تقييم الفرصة", + "إدارة التفاوض", + "اقتراح تجاري", + "إدارة العروض", + "إغلاق الصفقة", + "فرصة البيع الإضافي", + "فرصة البيع المتقاطع", + "الفرص المتأخرة", + "تنبيهات الصفقات", + "عرض سعر", + "إنشاء عرض سعر", + "تعديل عرض سعر", + "إرسال عرض سعر", + "اعتماد عرض السعر", + "رفض عرض السعر", + "قيمة العرض", + "مدة صلاحية العرض", + "تفاصيل العرض", + "بنود العرض", + "خصم العرض", + "ضريبة العرض", + "شروط العرض", + "تحويل العرض إلى طلب", + "العروض المفتوحة", + "العروض المنتهية", + "العروض المقبولة", + "العروض المرفوضة", + "العروض المعلقة", + "تحليل العروض", + "مقارنة عروض الأسعار", + "أداء العروض", + "عدد العروض", + "معدل قبول العروض", + "تتبع عروض الأسعار", + "العروض الترويجية", + "عرض سعر ضريبي", + "عرض سعر إلكتروني", + "قوالب عروض الأسعار", + "إدارة الموافقات", + "أمر بيع", + "إنشاء أمر بيع", + "تعديل أمر البيع", + "إلغاء أمر البيع", + "اعتماد أمر البيع", + "طلبات البيع", + "حالة الطلب", + "طلبات معلقة", + "طلبات مفتوحة", + "طلبات مغلقة", + "طلبات متأخرة", + "طلبات ملغاة", + "تخصيص المخزون", + "حجز المخزون", + "تحويل الطلب إلى فاتورة", + "تحويل الطلب إلى تسليم", + "قيمة الطلب", + "خصومات الطلب", + "ضريبة الطلب", + "تاريخ التسليم", + "تأخير التسليم", + "معدل تنفيذ الطلبات", + "تحليل الطلبات", + "طلبات العملاء", + "عدد الطلبات", + "متوسط قيمة الطلب", + "أداء الطلبات", + "تنبيهات الطلبات", + "متابعة حالة الطلب", + "إدارة دورة المبيعات", + "تحليل دورة المبيعات", + "تحسين دورة المبيعات", + "إدارة خطوط المبيعات", + "خط مبيعات نشط", + "خط مبيعات مغلق", + "تحليل خط المبيعات", + "قيمة خط المبيعات", + "سرعة خط المبيعات", + "تحليل أداء المبيعات", + "تحسين أداء المبيعات", + "قياس أداء المبيعات", + "مؤشرات أداء المبيعات", + "تقرير أداء المبيعات", + "لوحة أداء المبيعات", + "متابعة أداء المبيعات", + "مراجعة أداء المبيعات", + "تقييم أداء المبيعات", + "كفاءة فريق المبيعات", + "إنتاجية فريق المبيعات", + "إدارة فريق المبيعات", + "هيكل فريق المبيعات", + "تقسيم فريق المبيعات", + "توزيع المهام البيعية", + "إدارة حصص المبيعات", + "توزيع الحصص البيعية", + "تحقيق الحصص البيعية", + "متابعة الحصص البيعية", + "أهداف الإيرادات", + "أهداف الأرباح", + "أهداف التحصيل", + "أهداف العملاء الجدد", + "أهداف التوسع", + "أهداف التجديد", + "أهداف الاشتراكات", + "خطة الإيرادات", + "خطة التوسع البيعي", + "خطة التحصيل", + "خطة تنمية العملاء", + "خطة الاحتفاظ بالعملاء", + "إدارة العملاء الرئيسيين", + "إدارة الحسابات الاستراتيجية", + "الحسابات الكبرى", + "الحسابات النشطة", + "الحسابات المجمدة", + "الحسابات عالية القيمة", + "الحسابات المتعثرة", + "تحليل الحسابات", + "أداء الحسابات", + "تحليل سلوك العملاء", + "أنماط الشراء", + "تفضيلات العملاء", + "اتجاهات الشراء", + "تحليل قيمة العميل", + "قيمة عمر العميل", + "تكلفة اكتساب العميل", + "تحليل ولاء العملاء", + "تحليل رضا العملاء", + "تحليل تفاعل العملاء", + "تحليل فقدان العملاء", + "تحليل الاحتفاظ بالعملاء", + "إدارة تجربة البيع", + "رحلة الشراء", + "تحسين تجربة الشراء", + "تحسين تجربة العميل", + "تحليل رحلة العميل", + "إدارة التواصل البيعي", + "قنوات التواصل", + "قنوات البيع", + "قنوات التحويل", + "تحليل قنوات البيع", + "تحليل أداء القنوات", + "المبيعات المباشرة", + "المبيعات غير المباشرة", + "المبيعات الداخلية", + "المبيعات الخارجية", + "المبيعات الهاتفية", + "المبيعات الرقمية", + "المبيعات الميدانية", + "المبيعات الموسمية", + "المبيعات المتكررة", + "المبيعات الجديدة", + "المبيعات المتوقعة", + "المبيعات الفعلية", + "المبيعات اليومية", + "المبيعات الأسبوعية", + "المبيعات الشهرية", + "المبيعات الفصلية", + "المبيعات السنوية", + "إجمالي الإيرادات البيعية", + "إجمالي أرباح المبيعات", + "إجمالي الخصومات البيعية", + "إجمالي التحصيلات", + "تحليل الربحية البيعية", + "هامش الربح البيعي", + "الربح حسب العميل", + "الربح حسب المنتج", + "الربح حسب المنطقة", + "الربح حسب الفرع", + "الربح حسب القناة", + "تحليل المبيعات حسب الوقت", + "تحليل المبيعات حسب الموسم", + "تحليل الإيرادات حسب الفترة", + "تحليل الأرباح حسب الفترة", + "اتجاه الإيرادات", + "اتجاه الأرباح", + "اتجاه التحصيلات", + "اتجاه الطلبات", + "اتجاه العملاء", + "تحليل الانخفاض البيعي", + "تحليل النمو البيعي", + "تحليل استقرار الإيرادات", + "تحليل فجوة الإيرادات", + "تحليل فرص الإيرادات", + "توقعات الإيرادات المستقبلية", + "تحليل الأداء المستقبلي", + "توقعات الطلبات", + "توقعات العملاء", + "تحليل الطلب المستقبلي", + "إدارة التوقعات البيعية", + "مراجعة التوقعات", + "تحديث التوقعات", + "دقة التوقعات", + "خطأ التوقعات", + "تحيز التوقعات", + "تحليل التوقعات", + "إدارة الصفقات الكبرى", + "إدارة الصفقات الصغيرة", + "إدارة الصفقات المؤسسية", + "إدارة صفقات الشركات", + "إدارة الصفقات الحكومية", + "إدارة صفقات التجزئة", + "إدارة صفقات الجملة", + "تحليل حجم الصفقات", + "تحليل سرعة الصفقات", + "تحليل جودة الصفقات", + "تحليل فرص الصفقات", + "متابعة الصفقات", + "مراجعة الصفقات", + "مخاطر الصفقات", + "تحليل خسارة الصفقات", + "أسباب خسارة الصفقات", + "تحليل نجاح الصفقات", + "أسباب نجاح الصفقات", + "إدارة التفاوض البيعي", + "تحليل التفاوض", + "نتائج التفاوض", + "شروط التفاوض", + "إدارة العقود البيعية", + "متابعة العقود", + "تجديد العقود", + "العقود قيد الانتهاء", + "العقود المجددة", + "العقود الملغاة", + "قيمة العقود البيعية", + "إيرادات العقود", + "تحليل العقود", + "تحليل التجديدات", + "إدارة الاشتراكات البيعية", + "تجديد الاشتراكات", + "الاشتراكات النشطة", + "الاشتراكات المنتهية", + "إيرادات الاشتراكات", + "تحليل الاشتراكات", + "إدارة العملاء المشتركين", + "إدارة الفواتير المتكررة", + "الفواتير الدورية", + "إدارة التحصيل الدوري", + "تحليل الإيرادات المتكررة", + "تحليل الإيرادات الجديدة", + "تحليل الإيرادات الضائعة", + "استرداد الإيرادات", + "إدارة خسائر الإيرادات", + "إدارة فرص النمو", + "تحليل فرص النمو", + "استراتيجية التوسع", + "تحليل التوسع البيعي", + "تحليل المناطق الجديدة", + "تحليل الأسواق الجديدة", + "تحليل المنتجات الجديدة", + "إطلاق منتج جديد", + "إدارة إطلاق المنتجات", + "تحليل أداء المنتجات الجديدة", + "إدارة حملات الإطلاق", + "إدارة الترويج البيعي", + "العروض الترويجية", + "الخصومات الموسمية", + "الخصومات الخاصة", + "الخصومات التلقائية", + "إدارة الكوبونات", + "إدارة أكواد الخصم", + "إدارة عروض الباقات", + "إدارة العروض المحدودة", + "تحليل فعالية العروض", + "تحليل الخصومات", + "تأثير الخصومات", + "تحليل مرونة الأسعار", + "تحليل حساسية الأسعار", + "إدارة التسعير الذكي", + "تحسين التسعير", + "استراتيجية التسعير", + "إدارة أسعار العملاء", + "إدارة أسعار المناطق", + "إدارة أسعار الفروع", + "إدارة أسعار القنوات", + "إدارة العمولات البيعية", + "خطط العمولات", + "احتساب العمولات", + "توزيع العمولات", + "اعتماد العمولات", + "تحليل العمولات", + "أداء الحوافز", + "خطط الحوافز", + "تحفيز المندوبين", + "إدارة مكافآت المبيعات", + "إدارة مسابقات المبيعات", + "ترتيب مندوبي المبيعات", + "لوحة المتصدرين", + "أفضل أداء بيعي", + "ضعف الأداء البيعي", + "تحليل أداء المندوبين", + "تحليل نشاط المندوبين", + "عدد الزيارات البيعية", + "عدد المكالمات البيعية", + "عدد الاجتماعات البيعية", + "عدد المتابعات", + "عدد رسائل البريد", + "تحليل نشاط العملاء", + "تحليل المتابعات", + "تحليل الاجتماعات", + "تحليل المكالمات", + "إدارة زيارات العملاء", + "إدارة جولات المبيعات", + "إدارة التغطية البيعية", + "خريطة العملاء", + "خريطة المناطق", + "خريطة الفرص", + "تحليل التغطية", + "إدارة المبيعات الجغرافية", + "إدارة الفروع البيعية", + "أداء الفروع البيعية", + "إيرادات الفروع", + "تحليل الفروع", + "إدارة المناطق البيعية", + "أداء المناطق", + "تحليل المناطق", + "إدارة الموزعين", + "إدارة الوكلاء", + "إدارة الشركاء", + "أداء الشركاء", + "أداء الموزعين", + "أداء الوكلاء", + "تحليل الشركاء", + "تحليل الموزعين", + "تحليل الوكلاء", + "إدارة علاقات الشركاء", + "إدارة حسابات الشركاء", + "إدارة قنوات التوزيع", + "تحليل قنوات التوزيع", + "تحليل الحصة السوقية", + "تحليل المنافسين", + "اتجاهات السوق", + "تحليل السوق", + "ذكاء السوق", + "ذكاء المبيعات", + "رؤى المبيعات", + "رؤى العملاء", + "رؤى السوق", + "رؤى الإيرادات", + "تحليل البيانات البيعية", + "تحليل البيانات اللحظية", + "تحليل البيانات التاريخية", + "لوحة مؤشرات المبيعات", + "لوحة الإيرادات", + "لوحة الأرباح", + "لوحة العملاء", + "لوحة الصفقات", + "لوحة الطلبات", + "لوحة التحصيلات", + "لوحة التوقعات", + "لوحة التحليلات", + "تقارير الإيرادات", + "تقارير الأرباح", + "تقارير التحصيل", + "تقارير العملاء", + "تقارير المندوبين", + "تقارير المناطق", + "تقارير الفروع", + "تقارير المنتجات", + "تقارير الحملات", + "تقارير العمولات", + "تقارير الصفقات", + "تقارير العروض", + "تقارير الفواتير", + "تقارير الطلبات", + "تقارير المرتجعات", + "تقارير الأداء", + "تقارير النمو", + "تقارير التوقعات", + "تقارير الاتجاهات", + "تقارير التحويل", + "تقارير الولاء", + "تقارير التفاعل", + "تقارير رضا العملاء", + "تقارير الخدمة", + "تقارير الدعم", + "تقارير المتابعة", + "تقارير النشاط", + "تقارير المكالمات", + "تقارير الاجتماعات", + "تقارير البريد الإلكتروني", + "تقارير التفاوض", + "تقارير التوسع", + "تقارير التجديد", + "تقارير الاشتراكات", + "تقارير العقود", + "تقارير التجزئة", + "تقارير الجملة", + "تقارير التجارة الإلكترونية", + "تقارير نقاط البيع", + "تقارير الأداء الشهري", + "تقارير الأداء السنوي", + "تقارير المقارنة", + "تقارير الانحرافات", + "تقارير السيناريوهات", + "تقارير ماذا لو", + "التحليلات التنبؤية للمبيعات", + "تحليل الاتجاهات المستقبلية", + "تحليل احتمالية الشراء", + "تحليل احتمالية الإغلاق", + "تحليل احتمالية التجديد", + "تحليل احتمالية الإلغاء", + "تحليل احتمالية فقدان العميل", + "اكتشاف فرص البيع", + "توصيات المنتجات", + "توصيات البيع الإضافي", + "توصيات البيع المتقاطع", + "أتمتة المبيعات", + "أتمتة المتابعة", + "أتمتة البريد الإلكتروني", + "أتمتة الحملات", + "أتمتة التذكيرات", + "أتمتة التحصيل", + "أتمتة الفواتير", + "أتمتة الموافقات", + "أتمتة التفاوض", + "أتمتة إدارة العملاء", + "أتمتة العروض", + "أتمتة الطلبات", + "أتمتة التقارير", + "أتمتة التحليلات", + "أتمتة التنبيهات", + "التنبيهات البيعية", + "تنبيهات الإيرادات", + "تنبيهات التحصيل", + "تنبيهات الأهداف", + "تنبيهات العملاء", + "تنبيهات الصفقات", + "تنبيهات الفواتير", + "تنبيهات العقود", + "تنبيهات التجديد", + "تنبيهات التأخير", + "تنبيهات انخفاض المبيعات", + "تنبيهات انخفاض الأرباح", + "تنبيهات ضعف الأداء", + "تنبيهات تجاوز الأهداف", + "إدارة المخاطر البيعية", + "تحليل المخاطر البيعية", + "مخاطر فقدان العملاء", + "مخاطر انخفاض الإيرادات", + "مخاطر الصفقات", + "مخاطر التحصيل", + "إدارة استرداد العملاء", + "إدارة استعادة العملاء", + "تحليل العملاء المفقودين", + "إعادة تنشيط العملاء", + "حملات إعادة التنشيط", + "إدارة ولاء العملاء", + "برامج الولاء", + "نقاط الولاء", + "مكافآت الولاء", + "تحليل الولاء", + "تحليل إعادة الشراء", + "تحليل تكرار الشراء", + "تحليل سلة المشتريات", + "تحليل تقارب المنتجات", + "تحليل المنتجات الرائجة", + "تحليل المنتجات الراكدة", + "تحليل المرتجعات", + "تحليل أسباب المرتجعات", + "تحليل جودة الخدمة", + "تحليل تجربة الشراء", + "تحليل تجربة المستخدم", + "تحليل تفاعل العملاء", + "تحليل رضا العملاء", + "استبيانات العملاء", + "إدارة تقييمات العملاء", + "تحليل تقييمات العملاء", + "إدارة الملاحظات", + "تحليل الملاحظات", + "تحليل صوت العميل", + "إدارة خدمة ما بعد البيع", + "إدارة طلبات الخدمة", + "إدارة تذاكر الدعم", + "إدارة شكاوى العملاء", + "تحليل أداء الدعم", + "تحليل زمن الاستجابة", + "تحليل زمن الحل", + "تحليل جودة الخدمة", + "إدارة اتفاقيات الخدمة", + "إدارة اتفاقيات الدعم", + "إدارة مستويات الخدمة", + "تحليل خرق الاتفاقيات", + "تحليل التذاكر المفتوحة", + "تحليل التذاكر المغلقة", + "إدارة التحسين المستمر", + "تحسين العمليات البيعية", + "تحسين كفاءة المبيعات", + "تحسين تجربة العملاء", + "تحسين دورة التحصيل", + "تحسين دورة الطلبات", + "تحسين الإيرادات", + "تحسين الربحية", + "تحسين استراتيجيات البيع", + "تحسين قنوات البيع", + "تحسين أداء الفريق", + "تحسين أداء المندوبين", + "تحسين إدارة الحسابات", + "تحسين إدارة الصفقات", + "تحسين إدارة العملاء", + "تحسين إدارة العقود", + "تحسين إدارة الاشتراكات", + "تحسين إدارة التحصيل", + "تحسين إدارة الفواتير", + "تحسين إدارة الطلبات", + "تحسين إدارة الحملات", + "تحسين إدارة العمولات", + "تحسين إدارة الأسعار", + "تحسين إدارة التوقعات", + "تحسين إدارة التقارير", + "تحسين إدارة التحليلات", + "متابعة حالة العميل", + "متابعة حالة الصفقة", + "متابعة حالة الفاتورة", + "متابعة حالة الطلب", + "متابعة حالة التسليم", + "متابعة حالة التحصيل", + "متابعة حالة العقد", + "متابعة حالة الاشتراك", + "متابعة حالة العرض", + "متابعة حالة العميل المحتمل", + "متابعة تقدم الصفقة", + "متابعة تقدم الطلب", + "متابعة تقدم التحصيل", + "متابعة تقدم التسليم", + "متابعة تقدم التفاوض", + "متابعة تقدم العقود", + "متابعة تقدم الحملات", + "متابعة مؤشرات المبيعات", + "متابعة مؤشرات الإيرادات", + "متابعة مؤشرات الأرباح", + "متابعة مؤشرات التحصيل", + "متابعة مؤشرات العملاء", + "متابعة مؤشرات الأداء", + "متابعة مؤشرات التوسع", + "متابعة مؤشرات التجديد", + "متابعة نشاط العملاء", + "متابعة نشاط المندوبين", + "متابعة نشاط الصفقات", + "متابعة نشاط الطلبات", + "متابعة نشاط التحصيل", + "متابعة نشاط العقود", + "متابعة نشاط الحملات", + "متابعة نشاط نقاط البيع", + "متابعة النشاط اليومي", + "متابعة النشاط الأسبوعي", + "متابعة النشاط الشهري", + "متابعة النشاط السنوي", + "مراجعة حالة الإيرادات", + "مراجعة حالة الأرباح", + "مراجعة حالة العملاء", + "مراجعة حالة المبيعات", + "مراجعة حالة الصفقات", + "مراجعة حالة التحصيل", + "مراجعة حالة العقود", + "مراجعة حالة الاشتراكات", + "مراجعة حالة العروض", + "مراجعة حالة الفروع", + "مراجعة حالة المناطق", + "مراجعة حالة الحملات", + "مراجعة أداء العملاء", + "مراجعة أداء المندوبين", + "مراجعة أداء الفروع", + "مراجعة أداء المناطق", + "مراجعة أداء المنتجات", + "مراجعة أداء الحملات", + "مراجعة أداء القنوات", + "مراجعة أداء الشركاء", + "مراجعة أداء الوكلاء", + "مراجعة أداء الموزعين", + "مراجعة أداء العقود", + "مراجعة أداء الاشتراكات", + "مراجعة أداء التحصيل", + "مراجعة أداء الطلبات", + "مراجعة أداء الفواتير", + "مراجعة أداء الصفقات", + "مراجعة أداء خدمة العملاء", + "مراجعة أداء الدعم", + "مراجعة مؤشرات التحويل", + "مراجعة مؤشرات الولاء", + "مراجعة مؤشرات النمو", + "مراجعة مؤشرات الربحية", + "مراجعة مؤشرات التجديد", + "مراجعة مؤشرات التوسع", + "مراجعة مؤشرات التفاعل", + "مراجعة مؤشرات النشاط", + "تحليل تراجع المبيعات", + "تحليل انخفاض الأرباح", + "تحليل تراجع التحصيل", + "تحليل تراجع العملاء", + "تحليل تراجع الطلبات", + "تحليل انخفاض معدل التحويل", + "تحليل انخفاض التفاعل", + "تحليل انخفاض الولاء", + "تحليل انخفاض النشاط", + "تحليل أسباب التراجع", + "تحليل أسباب الانخفاض", + "تحليل أسباب فقدان العملاء", + "تحليل أسباب انخفاض الإيرادات", + "تحليل أسباب ضعف الأداء", + "تحليل أسباب التأخير", + "تحليل أسباب الإلغاء", + "تحليل أسباب المرتجعات", + "تحليل أسباب النزاعات", + "تحليل أسباب رفض العروض", + "تحليل أسباب خسارة الصفقات", + "تحليل فرص التحسين", + "تحليل فرص التوسع", + "تحليل فرص التجديد", + "تحليل فرص البيع", + "تحليل فرص البيع المتقاطع", + "تحليل فرص البيع الإضافي", + "تحليل فرص الإيرادات", + "تحليل فرص الأرباح", + "تحليل فرص التحصيل", + "تحليل فرص السوق", + "تحليل فرص المناطق", + "تحليل فرص المنتجات", + "تحليل فرص الحملات", + "تحليل فرص العملاء", + "تحليل فرص الحسابات", + "تحليل فرص العقود", + "تحليل فرص الاشتراكات", + "تحليل فرص الشركاء", + "تحليل فرص الموزعين", + "تحليل فرص الوكلاء", + "تحليل فرص النمو المستقبلي", + "إدارة أولويات العملاء", + "إدارة أولويات الصفقات", + "إدارة أولويات الطلبات", + "إدارة أولويات التحصيل", + "إدارة أولويات الحملات", + "إدارة أولويات الفروع", + "إدارة أولويات المناطق", + "إدارة أولويات المنتجات", + "إدارة أولويات العقود", + "إدارة أولويات الاشتراكات", + "إدارة أولويات المندوبين", + "إدارة أولويات الدعم", + "إدارة أولويات التذاكر", + "إدارة أولويات الخدمات", + "إدارة علاقات العملاء", + "إدارة علاقات الحسابات", + "إدارة علاقات الشركاء", + "إدارة علاقات الموزعين", + "إدارة علاقات الوكلاء", + "إدارة علاقات الموردين", + "إدارة العلاقات البيعية", + "إدارة العلاقات التسويقية", + "إدارة العلاقات الاستراتيجية", + "إدارة العلاقات طويلة المدى", + "إدارة الحملات البيعية", + "إدارة الحملات الموسمية", + "إدارة الحملات الرقمية", + "إدارة الحملات الإعلانية", + "إدارة الحملات البريدية", + "إدارة الحملات الهاتفية", + "إدارة الحملات الميدانية", + "إدارة الحملات المشتركة", + "إدارة الحملات الترويجية", + "إدارة الحملات التفاعلية", + "إدارة الحملات الآلية", + "إدارة الحملات المتكررة", + "إدارة الحملات المستهدفة", + "إدارة الحملات الخاصة", + "إدارة الحملات الإقليمية", + "إدارة الحملات العالمية", + "إدارة الحملات المحلية", + "إدارة حملات إعادة الاستهداف", + "إدارة حملات إعادة التنشيط", + "إدارة حملات اكتساب العملاء", + "إدارة حملات الاحتفاظ بالعملاء", + "إدارة حملات الولاء", + "إدارة حملات التوسع", + "إدارة حملات التجديد", + "إدارة حملات الاشتراكات", + "إدارة حملات المنتجات الجديدة", + "إدارة حملات التخفيضات", + "إدارة حملات المناسبات", + "إدارة حملات نهاية الموسم", + "إدارة حملات الجمعة البيضاء", + "إدارة حملات العروض المحدودة", + "إدارة حملات البيع السريع", + "إدارة حملات زيادة الإيرادات", + "إدارة حملات زيادة التحويل", + "إدارة حملات تحسين الولاء", + "إدارة حملات رفع التفاعل", + "إدارة حملات تحسين الأرباح", + "إدارة حملات دعم المبيعات", + "إدارة حملات التوعية", + "إدارة حملات تحسين الصورة", + "إدارة حملات العلاقات العامة", + "إدارة الحملات المؤتمتة", + "إدارة حملات البريد الإلكتروني", + "إدارة حملات الرسائل النصية", + "إدارة حملات الواتساب", + "إدارة حملات التواصل الاجتماعي", + "إدارة حملات التجارة الإلكترونية", + "إدارة حملات نقاط البيع", + "إدارة حملات الفروع", + "إدارة حملات المناطق", + "إدارة حملات المنتجات", + "إدارة حملات الخدمات", + "إدارة حملات العملاء الكبار", + "إدارة حملات الحسابات الرئيسية", + "إدارة حملات العملاء الجدد", + "إدارة حملات العملاء الحاليين", + "إدارة حملات العملاء غير النشطين", + "إدارة حملات العملاء المفقودين", + "إدارة حملات العملاء المحتملين", + "إدارة حملات العملاء المتكررين", + "إدارة حملات العملاء ذوي القيمة العالية", + "إدارة حملات العملاء منخفضي النشاط", + "تحليل سلوك المبيعات", + "تحليل سلوك الشراء", + "تحليل سلوك العملاء", + "تحليل سلوك التصفح", + "تحليل سلوك التفاعل", + "تحليل سلوك الاشتراك", + "تحليل سلوك التجديد", + "تحليل سلوك الإلغاء", + "تحليل سلوك التحصيل", + "تحليل سلوك المرتجعات", + "تحليل سلوك الولاء", + "تحليل سلوك الحسابات", + "تحليل سلوك المناطق", + "تحليل سلوك الفروع", + "تحليل سلوك المنتجات", + "تحليل سلوك الحملات", + "تحليل سلوك القنوات", + "تحليل سلوك المندوبين", + "تحليل سلوك الوكلاء", + "تحليل سلوك الشركاء", + "تحليل سلوك الموزعين", + "تحليل سلوك الخدمة", + "تحليل سلوك الدعم", + "تحليل سلوك التذاكر", + "تحليل سلوك المستخدمين", + "تحليل سلوك الحسابات الرئيسية", + "تحليل سلوك العملاء الكبار", + "تحليل سلوك العملاء الجدد", + "تحليل سلوك العملاء المتكررين", + "تحليل سلوك العملاء المفقودين", + "تحليل سلوك العملاء المحتملين", + "تحليل سلوك العملاء غير النشطين", + "إدارة قواعد المبيعات", + "إدارة قواعد التسعير", + "إدارة قواعد الخصومات", + "إدارة قواعد العمولات", + "إدارة قواعد التحصيل", + "إدارة قواعد التوزيع", + "إدارة قواعد الموافقات", + "إدارة قواعد الحملات", + "إدارة قواعد التذكيرات", + "إدارة قواعد التفاعل", + "إدارة قواعد الولاء", + "إدارة قواعد التحويل", + "إدارة قواعد التجديد", + "إدارة قواعد الاشتراكات", + "إدارة قواعد العقود", + "إدارة قواعد الطلبات", + "إدارة قواعد الفواتير", + "إدارة قواعد التسليم", + "إدارة قواعد المرتجعات", + "إدارة قواعد التفاوض", + "إدارة قواعد الفرص", + "إدارة قواعد القمع البيعي", + "إدارة قواعد التوسع", + "إدارة قواعد الحسابات", + "إدارة قواعد العملاء", + "إدارة قواعد المناطق", + "إدارة قواعد الفروع", + "إدارة قواعد المنتجات", + "إدارة قواعد الحملات البيعية", + "إدارة قواعد الحملات التسويقية", + "إدارة قواعد القنوات", + "إدارة قواعد الشركاء", + "إدارة قواعد الموزعين", + "إدارة قواعد الوكلاء", + "إدارة قواعد الأداء", + "إدارة قواعد التقييم", + "إدارة قواعد التقارير", + "إدارة قواعد التحليلات", + "إدارة قواعد التوقعات", + "إدارة قواعد التنبيهات", + "إدارة قواعد الإشعارات", + "إدارة قواعد الخدمة", + "إدارة قواعد الدعم", + "إدارة قواعد التذاكر", + "إدارة قواعد الجودة", + "إدارة قواعد الكفاءة", + "إدارة قواعد الإنتاجية", + "إدارة قواعد الربحية", + "إدارة قواعد الإيرادات", + "إدارة قواعد الأرباح", + "إدارة قواعد المخاطر", + "إدارة قواعد الامتثال", + "إدارة قواعد الاسترداد", + "إدارة قواعد إعادة التنشيط", + "إدارة قواعد استعادة العملاء", + "إدارة قواعد الاحتفاظ بالعملاء", + "إدارة قواعد اكتساب العملاء", + "إدارة قواعد التفاعل مع العملاء", + "إدارة قواعد رحلة العميل", + "إدارة قواعد تجربة العميل", + "إدارة قواعد تقييم العملاء", + "إدارة قواعد تصنيف العملاء", + "إدارة قواعد تقسيم العملاء", + "إدارة قواعد الحسابات الرئيسية", + "إدارة قواعد الصفقات الكبرى", + "إدارة قواعد الحسابات الاستراتيجية", + "إدارة قواعد العملاء ذوي القيمة العالية", + "إدارة قواعد الحملات الذكية", + "إدارة قواعد الأتمتة البيعية", + "إدارة قواعد الأتمتة التسويقية", + "إدارة قواعد التحسين المستمر", + "إدارة قواعد ذكاء الأعمال", + "إدارة قواعد ذكاء المبيعات", + "إدارة قواعد التحليلات التنبؤية", + "إدارة قواعد التوصيات", + "إدارة قواعد اكتشاف الفرص", + "إدارة قواعد اكتشاف المخاطر", + "إدارة قواعد تقييم الفرص", + "إدارة قواعد تقييم الحسابات", + "إدارة قواعد تقييم المندوبين", + "إدارة قواعد تقييم الحملات", + "إدارة قواعد تقييم المنتجات", + "إدارة قواعد تقييم الفروع", + "إدارة قواعد تقييم المناطق", + "إدارة قواعد تقييم القنوات", + "إدارة قواعد تقييم الشركاء", + "إدارة قواعد تقييم الوكلاء", + "إدارة قواعد تقييم الموزعين", + "إدارة قواعد تحسين الأداء", + "إدارة قواعد تحسين الإيرادات", + "إدارة قواعد تحسين الأرباح", + "إدارة قواعد تحسين التحصيل", + "إدارة قواعد تحسين التحويل", + "إدارة قواعد تحسين الولاء", + "إدارة قواعد تحسين التفاعل", + "إدارة قواعد تحسين الخدمة", + "إدارة قواعد تحسين الدعم", + "إدارة قواعد تحسين الطلبات", + "إدارة قواعد تحسين العقود", + "إدارة قواعد تحسين الاشتراكات", + "إدارة قواعد تحسين الحملات", + "إدارة قواعد تحسين الفواتير", + "إدارة قواعد تحسين التسليم", + "إدارة قواعد تحسين المرتجعات", + "إدارة قواعد تحسين التسعير", + "إدارة قواعد تحسين الخصومات", + "إدارة قواعد تحسين العمولات", + "إدارة قواعد تحسين القمع البيعي", + "إدارة قواعد تحسين خط الأنابيب", + "إدارة قواعد تحسين الصفقات", + "إدارة قواعد تحسين الحسابات", + "إدارة قواعد تحسين العملاء", + "إدارة قواعد تحسين المبيعات", + "إدارة قواعد تحسين التوسع", + "إدارة قواعد تحسين التجديد", + "إدارة قواعد تحسين استرداد العملاء", + "إدارة قواعد تحسين استعادة العملاء", + "إدارة قواعد تحسين الاحتفاظ بالعملاء", + "إدارة قواعد تحسين اكتساب العملاء", + "إدارة قواعد تحسين رحلة العميل", + "إدارة قواعد تحسين تجربة العميل", + "إدارة قواعد تحسين ذكاء الأعمال", + "إدارة قواعد تحسين ذكاء المبيعات", + "إدارة قواعد تحسين التحليلات", + "إدارة قواعد تحسين التوقعات", + "إدارة قواعد تحسين التنبيهات", + "إدارة قواعد تحسين الإشعارات", + "إدارة قواعد تحسين الأتمتة", + "إدارة قواعد تحسين التقارير", + "إدارة قواعد تحسين الجودة", + "إدارة قواعد تحسين الكفاءة", + "إدارة قواعد تحسين الإنتاجية", + "إدارة قواعد تحسين العمليات البيعية", + "إدارة قواعد تحسين العمليات التسويقية", + "إدارة قواعد تحسين عمليات التحصيل", + "إدارة قواعد تحسين عمليات الخدمة", + "إدارة قواعد تحسين عمليات الدعم", + "إدارة قواعد تحسين عمليات العقود", + "إدارة قواعد تحسين عمليات الاشتراكات", + "إدارة قواعد تحسين عمليات الحملات", + "إدارة قواعد تحسين عمليات الطلبات", + "إدارة قواعد تحسين عمليات الفواتير", + "إدارة قواعد تحسين عمليات التسليم", + "إدارة قواعد تحسين عمليات المرتجعات", + "إدارة قواعد تحسين عمليات التفاوض", + "إدارة قواعد تحسين عمليات الصفقات", + "إدارة قواعد تحسين عمليات الحسابات", + "إدارة قواعد تحسين عمليات العملاء", + "إدارة الموظفين", + "بيانات الموظفين", + "ملف الموظف", + "إضافة موظف جديد", + "تعديل بيانات الموظف", + "حذف الموظف", + "رقم الموظف", + "الرقم الوظيفي", + "الاسم الوظيفي", + "المسمى الوظيفي", + "الدرجة الوظيفية", + "القسم الوظيفي", + "المدير المباشر", + "تاريخ التوظيف", + "حالة الموظف", + "موظف نشط", + "موظف غير نشط", + "موظف بدوام كامل", + "موظف بدوام جزئي", + "موظف بعقد", + "موظف مؤقت", + "موظف تحت التجربة", + "إدارة التوظيف", + "طلبات التوظيف", + "إعلانات الوظائف", + "الوظائف الشاغرة", + "إدارة المرشحين", + "السير الذاتية", + "تصفية المرشحين", + "تقييم المرشحين", + "جدولة المقابلات", + "نتائج المقابلات", + "عرض العمل", + "قبول العرض", + "رفض العرض", + "إدارة الانضمام", + "إعداد الموظف الجديد", + "قائمة الانضمام", + "مستندات الموظف", + "توقيع العقد", + "العقود الوظيفية", + "مدة العقد", + "تجديد العقد", + "انتهاء العقد", + "إدارة الحضور", + "تسجيل الحضور", + "تسجيل الانصراف", + "أوقات العمل", + "ساعات العمل", + "ساعات العمل الإضافي", + "الحضور المتأخر", + "المغادرة المبكرة", + "الغياب", + "الغياب بدون إذن", + "سجل الحضور", + "تحليل الحضور", + "تقارير الحضور", + "إدارة المناوبات", + "جدول المناوبات", + "تخطيط المناوبات", + "المناوبات الليلية", + "المناوبات الصباحية", + "المناوبات المسائية", + "تغيير المناوبة", + "تبديل المناوبات", + "إدارة الإجازات", + "طلب إجازة", + "اعتماد الإجازة", + "رفض الإجازة", + "رصيد الإجازات", + "الإجازة السنوية", + "الإجازة المرضية", + "إجازة الطوارئ", + "إجازة الأمومة", + "إجازة الأبوة", + "إجازة بدون راتب", + "إجازة مدفوعة", + "ترحيل الإجازات", + "انتهاء رصيد الإجازات", + "تحليل الإجازات", + "تقارير الإجازات", + "إدارة الرواتب", + "هيكل الرواتب", + "مسير الرواتب", + "صرف الرواتب", + "قفل الرواتب", + "اعتماد الرواتب", + "الراتب الأساسي", + "البدلات", + "بدل السكن", + "بدل النقل", + "البدلات الخاصة", + "الحوافز", + "المكافآت", + "الخصومات", + "السلف", + "سلفة راتب", + "الاستقطاعات", + "الضرائب", + "صافي الراتب", + "إجمالي الراتب", + "قسيمة الراتب", + "إرسال قسيمة الراتب", + "تحليل الرواتب", + "تقارير الرواتب", + "إدارة الأداء", + "تقييم الأداء", + "دورة التقييم", + "التقييم الذاتي", + "تقييم المدير", + "تقييم الفريق", + "مؤشرات الأداء", + "أهداف الموظف", + "تحقيق الأهداف", + "خطة تحسين الأداء", + "ضعف الأداء", + "الترقيات", + "زيادة الرواتب", + "مراجعة الأداء", + "تقارير الأداء", + "إدارة التدريب", + "خطة التدريب", + "الدورات التدريبية", + "البرامج التدريبية", + "تسجيل التدريب", + "حضور التدريب", + "إكمال التدريب", + "تقييم التدريب", + "تحليل التدريب", + "تقارير التدريب", + "الشهادات المهنية", + "إدارة المهارات", + "مصفوفة المهارات", + "المهارات الفنية", + "المهارات الشخصية", + "تقييم المهارات", + "تحليل المهارات", + "الفجوات المهارية", + "إدارة الكفاءات", + "إطار الكفاءات", + "الكفاءات الوظيفية", + "تحليل الكفاءات", + "تقارير الكفاءات", + "إدارة الترقيات", + "طلبات الترقية", + "اعتماد الترقية", + "تاريخ الترقية", + "تحليل الترقيات", + "تقارير الترقيات", + "إدارة النقل الوظيفي", + "النقل الداخلي", + "تغيير القسم", + "تغيير المدير", + "تغيير الموقع", + "تغيير الوظيفة", + "تاريخ التغيير", + "سجل التغييرات", + "إدارة الاستقالات", + "طلب استقالة", + "اعتماد الاستقالة", + "فترة الإشعار", + "تصفية الموظف", + "المقابلة النهائية", + "تسوية نهاية الخدمة", + "مكافأة نهاية الخدمة", + "إخلاء الطرف", + "الموظفون السابقون", + "تحليل الاستقالات", + "تقارير الاستقالات", + "إدارة الانضباط", + "الإجراءات التأديبية", + "الإنذارات", + "التحذيرات", + "سوء السلوك", + "تعليق العمل", + "التحقيقات الداخلية", + "تقارير الانضباط", + "إدارة الحوافز", + "خطط الحوافز", + "مكافآت الأداء", + "مكافآت المبيعات", + "حوافز الإنتاجية", + "اعتماد الحوافز", + "تحليل الحوافز", + "تقارير الحوافز", + "إدارة المزايا", + "التأمين الصحي", + "التأمين الاجتماعي", + "بدلات الموظفين", + "الامتيازات الوظيفية", + "برامج الموظفين", + "إدارة التعويضات", + "تحليل التعويضات", + "تقارير التعويضات", + "إدارة الموارد البشرية", + "تحليل الموارد البشرية", + "لوحة الموارد البشرية", + "مؤشرات الموارد البشرية", + "تحليل القوى العاملة", + "إدارة القوى العاملة", + "تخطيط القوى العاملة", + "عدد الموظفين", + "تحليل عدد الموظفين", + "توزيع الموظفين", + "إنتاجية الموظفين", + "تحليل الإنتاجية", + "معدل الدوران الوظيفي", + "تحليل الدوران الوظيفي", + "الاحتفاظ بالموظفين", + "تحليل الاحتفاظ", + "رضا الموظفين", + "استبيانات الموظفين", + "تحليل رضا الموظفين", + "تفاعل الموظفين", + "تحليل التفاعل", + "تحليل الغياب", + "تحليل التأخير", + "تحليل الحضور", + "تحليل العمل الإضافي", + "تحليل الرواتب", + "تحليل الأداء", + "تحليل التدريب", + "تحليل المهارات", + "تحليل الكفاءات", + "تحليل التوظيف", + "تحليل الترقيات", + "تحليل الاستقالات", + "تحليل الحوافز", + "تحليل التعويضات", + "تحليل المزايا", + "تحليل القوى العاملة", + "تحليل الإنتاجية", + "تحليل التكاليف الوظيفية", + "تكلفة الموظف", + "تكلفة القسم", + "تكلفة التدريب", + "تكلفة التوظيف", + "تكلفة الدوران الوظيفي", + "تكلفة الغياب", + "تكلفة العمل الإضافي", + "تحليل التكاليف", + "إدارة الامتثال الوظيفي", + "الامتثال العمالي", + "سياسات الموارد البشرية", + "إدارة السياسات", + "اللوائح الداخلية", + "عقود العمل", + "الالتزام الوظيفي", + "التدقيق الوظيفي", + "تقارير الامتثال", + "إدارة الوثائق الوظيفية", + "أرشفة المستندات", + "مستندات الموظفين", + "العقود الموقعة", + "الشهادات", + "الهويات", + "التقارير الطبية", + "الملفات الشخصية", + "الوثائق القانونية", + "إدارة الوصول", + "صلاحيات الموظفين", + "صلاحيات المدراء", + "الوصول للأنظمة", + "تسجيل الدخول", + "نشاط المستخدم", + "سجل النشاط", + "تقارير النشاط", + "إدارة الأهداف", + "أهداف الفريق", + "أهداف القسم", + "أهداف الشركة", + "تحقيق الأهداف", + "مراجعة الأهداف", + "تحليل الأهداف", + "تقارير الأهداف", + "إدارة الاجتماعات", + "جدولة الاجتماعات", + "اجتماعات الأداء", + "اجتماعات الفريق", + "اجتماعات الموارد البشرية", + "محاضر الاجتماعات", + "متابعة الاجتماعات", + "تقارير الاجتماعات", + "إدارة الشكاوى", + "شكاوى الموظفين", + "طلبات الموظفين", + "حل الشكاوى", + "متابعة الشكاوى", + "تحليل الشكاوى", + "تقارير الشكاوى", + "إدارة الخدمات الذاتية", + "بوابة الموظف", + "طلبات الموظفين", + "طلبات الإجازات", + "طلبات السلف", + "طلبات التعديل", + "طلبات الوثائق", + "طلبات التعويض", + "طلبات التدريب", + "طلبات الترقية", + "الخدمات الإلكترونية", + "إدارة التذاكر", + "طلبات الدعم", + "دعم الموظفين", + "الخدمات الداخلية", + "تحليل التذاكر", + "تقارير الدعم", + "إدارة الصحة والسلامة", + "السلامة المهنية", + "الحوادث الوظيفية", + "تقارير الحوادث", + "تحليل الحوادث", + "إدارة المخاطر الوظيفية", + "التوعية بالسلامة", + "التدريب على السلامة", + "إدارة الجداول الزمنية", + "جدول العمل", + "جدول الإجازات", + "جدول المناوبات", + "تقويم الموارد البشرية", + "تقويم العطل", + "العطل الرسمية", + "العطل الاختيارية", + "إدارة الوقت", + "تتبع الوقت", + "إدارة المهام", + "توزيع المهام", + "متابعة المهام", + "تحليل المهام", + "تقارير المهام", + "إدارة المشاريع الوظيفية", + "فرق العمل", + "توزيع الموارد", + "استغلال الموارد", + "تحليل استغلال الموارد", + "تقارير الموارد", + "إدارة البيانات الوظيفية", + "جودة البيانات", + "تحديث البيانات", + "تكامل البيانات", + "تحليل البيانات", + "تقارير البيانات", + "إدارة الأرشفة", + "الأرشفة الإلكترونية", + "استرجاع الوثائق", + "إدارة النسخ الاحتياطي", + "استعادة البيانات", + "إدارة الإشعارات", + "تنبيهات الموارد البشرية", + "تنبيهات الحضور", + "تنبيهات الإجازات", + "تنبيهات الرواتب", + "تنبيهات الأداء", + "تنبيهات العقود", + "تنبيهات التدريب", + "تنبيهات الاستقالات", + "إدارة التنبيهات", + "إدارة الأتمتة", + "أتمتة الموارد البشرية", + "أتمتة الرواتب", + "أتمتة الحضور", + "أتمتة الإجازات", + "أتمتة التوظيف", + "أتمتة التقييم", + "أتمتة التدريب", + "أتمتة التقارير", + "أتمتة الموافقات", + "أتمتة الإشعارات", + "أتمتة الطلبات", + "أتمتة سير العمل", + "تحسين الموارد البشرية", + "تحسين الأداء الوظيفي", + "تحسين التوظيف", + "تحسين الاحتفاظ بالموظفين", + "تحسين رضا الموظفين", + "تحسين الإنتاجية", + "تحسين التدريب", + "تحسين الكفاءات", + "تحسين التفاعل", + "تحسين الحضور", + "تحسين الرواتب", + "تحسين الامتثال", + "تحسين العمليات الوظيفية", + "ذكاء الموارد البشرية", + "تحليلات الموارد البشرية", + "التحليلات التنبؤية للموارد البشرية", + "تحليل المخاطر الوظيفية", + "تحليل احتمالية الاستقالة", + "تحليل احتمالية الغياب", + "تحليل احتمالية الترقية", + "تحليل احتمالية الأداء", + "تحليل احتمالية الاحتفاظ", + "رؤى الموظفين", + "رؤى الأداء", + "رؤى الموارد البشرية", + "رؤى القوى العاملة", + "لوحة ذكاء الموارد البشرية", + "تقارير ذكاء الموارد البشرية", + "إدارة سجلات الموظفين", + "تحديث السجل الوظيفي", + "أرشفة السجل الوظيفي", + "عرض الملف الوظيفي", + "تعديل الملف الوظيفي", + "تاريخ الموظف الوظيفي", + "سجل الترقيات", + "سجل التنقلات", + "سجل العقوبات", + "سجل الحوافز", + "سجل الإجازات", + "سجل الرواتب", + "سجل الحضور", + "سجل الغياب", + "سجل التأخير", + "سجل التدريب", + "سجل التقييمات", + "سجل الأداء", + "سجل المهارات", + "سجل الشهادات", + "سجل العقود", + "سجل الوثائق", + "سجل الاجتماعات", + "سجل الأنشطة", + "سجل الدخول", + "سجل الطلبات", + "سجل التعديلات", + "سجل العمليات", + "سجل الموافقات", + "سجل التنبيهات", + "إدارة دورة حياة الموظف", + "بداية الخدمة", + "فترة التجربة", + "تأكيد التوظيف", + "التطوير الوظيفي", + "النمو الوظيفي", + "الانتقال الوظيفي", + "التخطيط الوظيفي", + "نهاية الخدمة", + "إدارة المسار الوظيفي", + "المسار المهني", + "خطة التطوير المهني", + "تحليل المسار الوظيفي", + "تخطيط التعاقب الوظيفي", + "الموظفون ذوو الإمكانيات العالية", + "المواهب الرئيسية", + "الوظائف الحرجة", + "إدارة المواهب", + "تقييم المواهب", + "تحليل المواهب", + "الاحتفاظ بالمواهب", + "خطة التعاقب", + "خطة الإحلال", + "إدارة التعاقب القيادي", + "تقييم القيادة", + "تطوير القيادات", + "برامج القيادة", + "التدريب القيادي", + "المهارات القيادية", + "الكفاءات القيادية", + "تحليل القيادة", + "تقارير القيادة", + "إدارة ثقافة العمل", + "بيئة العمل", + "تحسين بيئة العمل", + "رضا بيئة العمل", + "تحليل ثقافة الشركة", + "تعزيز ثقافة العمل", + "برامج التفاعل", + "برامج الرفاهية", + "الصحة النفسية للموظفين", + "رفاهية الموظفين", + "التوازن بين العمل والحياة", + "إدارة رفاهية الموظفين", + "برامج السعادة الوظيفية", + "قياس السعادة الوظيفية", + "تحليل السعادة الوظيفية", + "استطلاع رأي الموظفين", + "استبيانات التفاعل", + "استبيانات الثقافة", + "استبيانات الرضا", + "استبيانات القيادة", + "استبيانات بيئة العمل", + "تحليل الاستبيانات", + "نتائج الاستبيانات", + "إدارة التواصل الداخلي", + "رسائل الموظفين", + "إعلانات الموارد البشرية", + "النشرات الداخلية", + "الأخبار الداخلية", + "إدارة الحملات الداخلية", + "إدارة التواصل المؤسسي", + "التفاعل الداخلي", + "إدارة الأحداث الداخلية", + "الفعاليات الداخلية", + "الأنشطة الوظيفية", + "برامج الموظفين", + "إدارة المناسبات", + "إدارة الاحتفالات", + "تكريم الموظفين", + "جوائز الموظفين", + "برامج التقدير", + "إدارة التقدير الوظيفي", + "مكافآت التميز", + "موظف الشهر", + "تقدير الأداء", + "تقدير الابتكار", + "تحفيز الموظفين", + "تعزيز التفاعل", + "تعزيز الولاء الوظيفي", + "تعزيز الرضا الوظيفي", + "إدارة الجداول المرنة", + "العمل المرن", + "العمل عن بعد", + "سياسات العمل عن بعد", + "تتبع العمل عن بعد", + "إدارة الفرق الافتراضية", + "إدارة الموظفين عن بعد", + "متابعة إنتاجية العمل عن بعد", + "قياس الأداء عن بعد", + "تقارير العمل عن بعد", + "إدارة الأجهزة الوظيفية", + "تخصيص الأجهزة", + "استلام الأجهزة", + "تسليم الأجهزة", + "صيانة الأجهزة", + "جرد الأجهزة", + "إدارة أصول الموظفين", + "الأصول المخصصة", + "استرجاع الأصول", + "تحليل استخدام الأصول", + "تقارير الأصول", + "إدارة بطاقات الموظفين", + "بطاقات الهوية", + "البطاقات الوظيفية", + "إدارة الوصول للمكاتب", + "تسجيل الدخول للمباني", + "إدارة الأمن الوظيفي", + "تصاريح الدخول", + "مراقبة الوصول", + "إدارة الأمن الداخلي", + "تحليل الأمان الوظيفي", + "تقارير الأمان", + "إدارة الامتثال القانوني", + "القوانين العمالية", + "سياسات العمل", + "اتفاقيات العمل", + "عقود التوظيف", + "تجديد العقود الوظيفية", + "إنهاء العقود", + "تعديلات العقود", + "مراجعة العقود", + "أرشفة العقود", + "تحليل العقود", + "تقارير العقود", + "إدارة التصاريح", + "تصاريح العمل", + "تصاريح الإقامة", + "تصاريح السفر", + "تجديد التصاريح", + "انتهاء التصاريح", + "متابعة التصاريح", + "تنبيهات التصاريح", + "تحليل التصاريح", + "تقارير التصاريح", + "إدارة السفر الوظيفي", + "طلبات السفر", + "اعتماد السفر", + "حجوزات السفر", + "بدلات السفر", + "مصاريف السفر", + "تقارير السفر", + "تحليل السفر", + "إدارة الانتدابات", + "طلبات الانتداب", + "اعتماد الانتداب", + "بدلات الانتداب", + "تقارير الانتداب", + "إدارة المصروفات", + "المصروفات الوظيفية", + "اعتماد المصروفات", + "تعويض المصروفات", + "تقارير المصروفات", + "تحليل المصروفات", + "إدارة الميزانية الوظيفية", + "ميزانية التدريب", + "ميزانية الرواتب", + "ميزانية الحوافز", + "ميزانية التوظيف", + "تحليل الميزانية", + "تقارير الميزانية", + "إدارة الأداء المؤسسي", + "الأداء الفردي", + "الأداء الجماعي", + "الأداء الإداري", + "الأداء التشغيلي", + "الأداء الوظيفي", + "قياس الأداء", + "تحليل الأداء الوظيفي", + "تحليل الأداء المؤسسي", + "تقارير الأداء المؤسسي", + "إدارة مؤشرات الأداء", + "مؤشرات الحضور", + "مؤشرات الغياب", + "مؤشرات الرواتب", + "مؤشرات التوظيف", + "مؤشرات التدريب", + "مؤشرات التفاعل", + "مؤشرات الرضا", + "مؤشرات الاحتفاظ", + "مؤشرات الدوران", + "مؤشرات الكفاءة", + "مؤشرات الإنتاجية", + "مؤشرات الالتزام", + "مؤشرات الانضباط", + "مؤشرات السلامة", + "مؤشرات السعادة الوظيفية", + "لوحة مؤشرات الموارد البشرية", + "لوحة الأداء الوظيفي", + "لوحة الحضور", + "لوحة الرواتب", + "لوحة التوظيف", + "لوحة التدريب", + "لوحة التفاعل", + "لوحة الكفاءات", + "لوحة المواهب", + "لوحة القيادة", + "إدارة التحليلات الوظيفية", + "تحليل الاتجاهات الوظيفية", + "تحليل سلوك الموظفين", + "تحليل الأداء التاريخي", + "تحليل الإنتاجية التاريخية", + "تحليل التوظيف التاريخي", + "تحليل الغياب التاريخي", + "تحليل الرواتب التاريخي", + "تحليل الحوافز التاريخي", + "تحليل المهارات التاريخي", + "تحليل بيانات الموظفين", + "تحليل البيانات الوظيفية", + "تحليل البيانات اللحظية", + "تحليل البيانات التنبؤية", + "تحليل احتمالية الاستقالة", + "تحليل احتمالية الغياب", + "تحليل احتمالية التأخير", + "تحليل احتمالية الترقية", + "تحليل احتمالية النجاح", + "تحليل احتمالية الاحتفاظ", + "تحليل احتمالية الدوران", + "تحليل احتمالية الحوادث", + "تحليل احتمالية انخفاض الأداء", + "التنبؤ بالاحتياجات الوظيفية", + "التنبؤ بالتوظيف", + "التنبؤ بالإنتاجية", + "التنبؤ بالغياب", + "التنبؤ بالدوران الوظيفي", + "التنبؤ بالاحتفاظ", + "التنبؤ بالتكاليف الوظيفية", + "ذكاء الموارد البشرية", + "ذكاء القوى العاملة", + "ذكاء الأداء", + "ذكاء المواهب", + "ذكاء التوظيف", + "ذكاء التدريب", + "ذكاء التفاعل", + "ذكاء الرواتب", + "ذكاء الحضور", + "ذكاء الكفاءات", + "رؤى الموظفين", + "رؤى الأداء الوظيفي", + "رؤى المواهب", + "رؤى التوظيف", + "رؤى الرواتب", + "رؤى التدريب", + "رؤى الحضور", + "رؤى التفاعل", + "رؤى الكفاءات", + "رؤى القوى العاملة", + "إدارة التحسين المستمر", + "تحسين تجربة الموظف", + "تحسين تجربة التوظيف", + "تحسين تجربة التدريب", + "تحسين تجربة الأداء", + "تحسين بيئة العمل", + "تحسين العمليات الوظيفية", + "تحسين إدارة الحضور", + "تحسين إدارة الرواتب", + "تحسين إدارة التوظيف", + "تحسين إدارة التدريب", + "تحسين إدارة المواهب", + "تحسين إدارة الأداء", + "تحسين إدارة الكفاءات", + "تحسين إدارة التفاعل", + "تحسين إدارة التعويضات", + "تحسين إدارة العقود", + "تحسين إدارة الإجازات", + "تحسين إدارة السلامة", + "تحسين إدارة الشكاوى", + "تحسين إدارة الدعم", + "تحسين إدارة الطلبات", + "تحسين إدارة الموارد البشرية", + "تحسين الامتثال الوظيفي", + "تحسين الكفاءة التشغيلية", + "تحسين إنتاجية الموظفين", + "تحسين الاحتفاظ بالموظفين", + "تحسين الرضا الوظيفي", + "تحسين السعادة الوظيفية", + "تحسين التفاعل الوظيفي", + "تحسين الأداء المؤسسي", + "تحسين تحليل البيانات الوظيفية", + "تحسين ذكاء الموارد البشرية", + "إدارة الأتمتة الوظيفية", + "أتمتة التوظيف", + "أتمتة الحضور", + "أتمتة الرواتب", + "أتمتة التقييمات", + "أتمتة التدريب", + "أتمتة الإجازات", + "أتمتة الطلبات", + "أتمتة الموافقات", + "أتمتة الإشعارات", + "أتمتة التنبيهات", + "أتمتة التقارير", + "أتمتة التحليلات", + "أتمتة العقود", + "أتمتة المستندات", + "أتمتة الأرشفة", + "أتمتة التواصل الداخلي", + "أتمتة سير العمل", + "أتمتة إدارة الأداء", + "أتمتة إدارة المواهب", + "أتمتة إدارة التفاعل", + "أتمتة إدارة التعويضات", + "أتمتة إدارة الحوافز", + "أتمتة إدارة الكفاءات", + "أتمتة إدارة الشكاوى", + "أتمتة إدارة الدعم", + "أتمتة إدارة الخدمات الذاتية", + "أتمتة إدارة الوثائق", + "أتمتة إدارة الأصول", + "أتمتة إدارة السلامة", + "أتمتة إدارة الامتثال", + "إدارة الخدمات المشتركة", + "الخدمات الوظيفية", + "الخدمات الإدارية", + "الخدمات الذاتية للموظفين", + "الخدمات الإلكترونية للموظفين", + "الخدمات الداخلية", + "تحسين الخدمات الوظيفية", + "تحليل الخدمات الوظيفية", + "تقارير الخدمات الوظيفية", + "إدارة الجودة الوظيفية", + "جودة العمليات الوظيفية", + "جودة بيانات الموظفين", + "جودة الخدمات الوظيفية", + "قياس الجودة الوظيفية", + "تحليل الجودة الوظيفية", + "تقارير الجودة الوظيفية", + "إدارة المخاطر الوظيفية", + "تحليل المخاطر الوظيفية", + "مخاطر التوظيف", + "مخاطر الدوران الوظيفي", + "مخاطر الغياب", + "مخاطر الأداء", + "مخاطر السلامة", + "مخاطر الامتثال", + "مخاطر الكفاءات", + "مخاطر الإنتاجية", + "مخاطر القيادة", + "مخاطر المواهب", + "إدارة خطط الطوارئ", + "استمرارية الأعمال", + "خطط التعافي", + "إدارة الأزمات الوظيفية", + "تحليل الأزمات", + "تقارير الأزمات", + "إدارة المعرفة", + "نقل المعرفة", + "توثيق المعرفة", + "مستودع المعرفة", + "الخبرات الوظيفية", + "مشاركة المعرفة", + "إدارة التعلم", + "منصة التعلم", + "التعلم الإلكتروني", + "التعلم الذاتي", + "برامج التطوير", + "خطط التطوير", + "تقييم التعلم", + "تحليل التعلم", + "تقارير التعلم", + "إدارة الابتكار الوظيفي", + "أفكار الموظفين", + "برامج الابتكار", + "تحليل الابتكار", + "تقارير الابتكار", + "تعزيز الابتكار", + "إدارة التغيير", + "إدارة التحول المؤسسي", + "التحول الرقمي للموارد البشرية", + "استراتيجية الموارد البشرية", + "الخطة الاستراتيجية للموارد البشرية", + "تحليل الاستراتيجية", + "تنفيذ الاستراتيجية", + "قياس الاستراتيجية", + "تقارير الاستراتيجية", + "إدارة الامتيازات الوظيفية", + "برامج التأمين", + "برامج التقاعد", + "برامج المكافآت", + "برامج الدعم", + "برامج الصحة", + "برامج الرفاهية", + "تحليل الامتيازات", + "تقارير الامتيازات", + "إدارة علاقات الموظفين", + "حل النزاعات الوظيفية", + "إدارة النزاعات", + "تحليل النزاعات", + "تقارير النزاعات", + "إدارة الدعم الوظيفي", + "مركز خدمة الموظفين", + "تحليل طلبات الموظفين", + "تقارير طلبات الموظفين", + "إدارة عمليات الموارد البشرية", + "تحليل العمليات الوظيفية", + "تحسين العمليات المؤسسية", + "قياس كفاءة العمليات", + "تقارير العمليات الوظيفية", + "إدارة المخزون", + "مراقبة المخزون", + "تحليل المخزون", + "تقارير المخزون", + "حركة المخزون", + "رصيد المخزون", + "رصيد الصنف", + "تتبع المخزون", + "تقييم المخزون", + "إدارة المستودعات", + "المستودع الرئيسي", + "المستودع الفرعي", + "تحويل المخزون", + "نقل المخزون", + "حجز المخزون", + "تحرير المخزون", + "تخصيص المخزون", + "توفر المخزون", + "نفاد المخزون", + "المخزون المنخفض", + "إعادة طلب المخزون", + "نقطة إعادة الطلب", + "الحد الأدنى للمخزون", + "الحد الأقصى للمخزون", + "المخزون الاحتياطي", + "الجرد الدوري", + "الجرد السنوي", + "الجرد المفاجئ", + "تسوية الجرد", + "فروقات الجرد", + "نتائج الجرد", + "إدارة الأصناف", + "إضافة صنف جديد", + "تعديل الصنف", + "حذف الصنف", + "تصنيف الأصناف", + "الأصناف النشطة", + "الأصناف غير النشطة", + "الأصناف الراكدة", + "الأصناف السريعة الحركة", + "الأصناف البطيئة الحركة", + "رقم الصنف", + "باركود الصنف", + "وحدة القياس", + "الأصناف المركبة", + "الأصناف التسلسلية", + "الأصناف القابلة للتتبع", + "إدارة الباركود", + "مسح الباركود", + "طباعة الباركود", + "إدارة QR", + "إدارة RFID", + "تتبع الرقم التسلسلي", + "تتبع الدفعات", + "أرقام الدفعات", + "تاريخ الإنتاج", + "تاريخ الانتهاء", + "الأصناف منتهية الصلاحية", + "تنبيهات انتهاء الصلاحية", + "إدارة تواريخ الانتهاء", + "تحليل انتهاء الصلاحية", + "إدارة المشتريات المخزنية", + "استلام المخزون", + "إشعار الاستلام", + "الاستلام الجزئي", + "الاستلام الكامل", + "رفض الاستلام", + "فحص الجودة", + "الجودة المخزنية", + "فحص الأصناف", + "تقارير الجودة", + "أوامر التحويل", + "طلبات التحويل", + "تحويل بين المستودعات", + "تحويل داخلي", + "تأكيد التحويل", + "متابعة التحويل", + "إلغاء التحويل", + "تحليل التحويلات", + "إدارة الشحنات", + "الشحنات الواردة", + "الشحنات الصادرة", + "متابعة الشحنات", + "حالة الشحنة", + "شركة الشحن", + "رقم التتبع", + "تأخير الشحنات", + "تكلفة الشحن", + "تحليل الشحن", + "إدارة الموردين", + "الموردون النشطون", + "تقييم الموردين", + "أداء الموردين", + "تحليل الموردين", + "مشتريات المورد", + "مرتجعات المورد", + "فواتير المورد", + "رصيد المورد", + "تقارير الموردين", + "إدارة الطلبات", + "طلبات الشراء", + "طلبات التوريد", + "طلبات النقل", + "طلبات الصرف", + "طلبات الاستلام", + "طلبات الجرد", + "طلبات التحويل", + "طلبات التسوية", + "اعتماد الطلبات", + "رفض الطلبات", + "إدارة الصرف", + "صرف المخزون", + "إذن صرف", + "صرف للإنتاج", + "صرف للبيع", + "صرف داخلي", + "صرف للأقسام", + "تتبع الصرف", + "تحليل الصرف", + "تقارير الصرف", + "إدارة المرتجعات", + "مرتجعات المبيعات", + "مرتجعات المشتريات", + "مرتجعات المخزون", + "استلام المرتجعات", + "تحليل المرتجعات", + "أسباب المرتجعات", + "تقارير المرتجعات", + "إدارة التخزين", + "مواقع التخزين", + "تنظيم المستودعات", + "تخطيط المستودعات", + "سعة المستودع", + "استغلال المساحة", + "إدارة الأرفف", + "إدارة المواقع", + "إدارة الحاويات", + "تحسين التخزين", + "إدارة التعبئة", + "إدارة التغليف", + "مواد التغليف", + "تكلفة التغليف", + "عمليات التعبئة", + "تتبع التعبئة", + "تقارير التعبئة", + "إدارة التحميل", + "إدارة التفريغ", + "جدولة التحميل", + "جدولة التفريغ", + "متابعة التحميل", + "متابعة التفريغ", + "تقارير التحميل", + "تقارير التفريغ", + "إدارة الطلبات المخزنية", + "تخصيص الطلبات", + "معالجة الطلبات", + "تجهيز الطلبات", + "طلبات التجهيز", + "سرعة التجهيز", + "أداء التجهيز", + "تقارير التجهيز", + "إدارة اللوجستيات", + "الخدمات اللوجستية", + "التوزيع اللوجستي", + "تحليل اللوجستيات", + "تقارير اللوجستيات", + "إدارة سلسلة التوريد", + "تحليل سلسلة التوريد", + "تخطيط سلسلة التوريد", + "أداء سلسلة التوريد", + "تقارير سلسلة التوريد", + "إدارة التنبؤ بالمخزون", + "توقع الطلب", + "تحليل الطلب", + "تخطيط الطلب", + "تحليل الاستهلاك", + "تحليل الاستخدام", + "التنبؤ بالاستهلاك", + "التنبؤ بالنقص", + "التنبؤ بالفائض", + "إدارة التكاليف المخزنية", + "تكلفة المخزون", + "تكلفة التخزين", + "تكلفة النقل", + "تكلفة الشحن", + "تكلفة الهدر", + "تكلفة التلف", + "تكلفة المرتجعات", + "تحليل التكاليف", + "تقارير التكاليف", + "إدارة الهدر", + "الأصناف التالفة", + "الأصناف المفقودة", + "الأصناف المعطوبة", + "تقليل الهدر", + "تحليل الهدر", + "تقارير الهدر", + "إدارة الأصول المخزنية", + "الأصول الثابتة", + "تتبع الأصول", + "نقل الأصول", + "جرد الأصول", + "صيانة الأصول", + "تحليل الأصول", + "تقارير الأصول", + "إدارة الصيانة", + "الصيانة الوقائية", + "الصيانة التصحيحية", + "طلبات الصيانة", + "جدولة الصيانة", + "تتبع الصيانة", + "تحليل الصيانة", + "تقارير الصيانة", + "إدارة الجودة المخزنية", + "معايير الجودة", + "اختبارات الجودة", + "رفض الجودة", + "قبول الجودة", + "تقارير الجودة", + "تحليل الجودة", + "إدارة الامتثال", + "الامتثال المخزني", + "سياسات التخزين", + "سياسات الجرد", + "سياسات النقل", + "التدقيق المخزني", + "تقارير الامتثال", + "إدارة السلامة المخزنية", + "سلامة المستودعات", + "سلامة التخزين", + "حوادث المستودعات", + "تقارير السلامة", + "تحليل السلامة", + "إدارة العمالة المخزنية", + "عمال المستودعات", + "توزيع المهام", + "جدولة العمالة", + "إنتاجية العمالة", + "تحليل الأداء", + "تقارير العمالة", + "إدارة الوقت المخزني", + "أوقات التجهيز", + "أوقات التحميل", + "أوقات الاستلام", + "أوقات التسليم", + "تحليل الوقت", + "تقارير الوقت", + "إدارة الأداء المخزني", + "مؤشرات الأداء المخزني", + "إنتاجية المستودع", + "كفاءة المستودع", + "سرعة العمليات", + "معدل الأخطاء", + "تحليل الأداء", + "تقارير الأداء", + "لوحة المخزون", + "لوحة المستودعات", + "لوحة الطلبات", + "لوحة الجرد", + "لوحة التكاليف", + "لوحة الأداء", + "لوحة الجودة", + "لوحة الشحن", + "لوحة سلسلة التوريد", + "لوحة التحليلات", + "تحليل البيانات المخزنية", + "تحليل البيانات اللحظية", + "تحليل البيانات التاريخية", + "التحليلات التنبؤية للمخزون", + "تحليل الاتجاهات", + "تحليل النقص", + "تحليل الفائض", + "تحليل الطلب", + "تحليل التوريد", + "ذكاء المخزون", + "ذكاء المستودعات", + "ذكاء سلسلة التوريد", + "رؤى المخزون", + "رؤى المستودعات", + "رؤى الطلب", + "رؤى التوريد", + "إدارة الأتمتة المخزنية", + "أتمتة المستودعات", + "أتمتة الجرد", + "أتمتة الطلبات", + "أتمتة التحويلات", + "أتمتة الشحن", + "أتمتة التقارير", + "أتمتة التحليلات", + "أتمتة التنبيهات", + "أتمتة الإشعارات", + "أتمتة التعبئة", + "أتمتة التخزين", + "أتمتة التوزيع", + "إدارة التنبيهات", + "تنبيهات النقص", + "تنبيهات الفائض", + "تنبيهات انتهاء الصلاحية", + "تنبيهات التأخير", + "تنبيهات الطلبات", + "تنبيهات الجرد", + "تنبيهات الجودة", + "تنبيهات الشحن", + "تنبيهات السلامة", + "إدارة الإشعارات", + "إدارة التقارير", + "تقارير الأصناف", + "تقارير المستودعات", + "تقارير الطلبات", + "تقارير الجرد", + "تقارير الشحن", + "تقارير التكاليف", + "تقارير الهدر", + "تقارير الأداء", + "تقارير الجودة", + "تقارير الموردين", + "تقارير التحويلات", + "تقارير المرتجعات", + "تقارير التخزين", + "تقارير التعبئة", + "تقارير التحليل", + "إدارة التحسين المستمر", + "تحسين إدارة المخزون", + "تحسين إدارة المستودعات", + "تحسين الجرد", + "تحسين التخزين", + "تحسين التعبئة", + "تحسين التوزيع", + "تحسين الشحن", + "تحسين الطلبات", + "تحسين الجودة", + "تحسين الكفاءة", + "تحسين الأداء", + "تحسين سلسلة التوريد", + "تحسين التكاليف", + "تحسين استغلال المساحة", + "تحسين وقت التجهيز", + "تحسين سرعة التسليم", + "تحسين دقة الجرد", + "تحسين دقة التنبؤ", + "تحسين إدارة الطلب", + "تحسين إدارة الموردين", + "تحسين إدارة التحويلات", + "تحسين إدارة المرتجعات", + "تحسين العمليات المخزنية", + "إدارة العمليات المخزنية", + "إدارة العمليات اللوجستية", + "تحليل العمليات", + "قياس الكفاءة التشغيلية", + "تقارير العمليات", + "إدارة الموارد المخزنية", + "تخصيص الموارد", + "استغلال الموارد", + "تحليل استغلال الموارد", + "تقارير الموارد", + "إدارة الطاقة الاستيعابية", + "سعة التخزين", + "تحليل السعة", + "تقارير السعة", + "إدارة المواقع التخزينية", + "تخطيط المواقع", + "تحسين المواقع", + "تحليل المواقع", + "تقارير المواقع", + "إدارة الشحن الداخلي", + "إدارة النقل الداخلي", + "إدارة المركبات", + "تتبع المركبات", + "صيانة المركبات", + "تحليل النقل", + "تقارير النقل", + "إدارة الطلبات العاجلة", + "الأولوية المخزنية", + "الطلبات الحرجة", + "النقص الحرج", + "التوريد العاجل", + "تقارير الطوارئ", + "إدارة المخاطر المخزنية", + "تحليل المخاطر", + "مخاطر التخزين", + "مخاطر الشحن", + "مخاطر الجودة", + "مخاطر النقص", + "مخاطر التلف", + "تقارير المخاطر", + "إدارة البيانات المخزنية", + "جودة البيانات", + "تكامل البيانات", + "تنظيف البيانات", + "تحليل البيانات", + "تقارير البيانات", + "إدارة الوثائق المخزنية", + "وثائق الشحن", + "وثائق الجرد", + "وثائق التوريد", + "أرشفة المستندات", + "استرجاع الوثائق", + "تقارير الوثائق", + "إدارة الوصول للمستودعات", + "صلاحيات المستودعات", + "صلاحيات الجرد", + "صلاحيات التحويل", + "صلاحيات الشحن", + "سجل النشاط", + "سجل العمليات", + "تقارير النشاط", + "إدارة الخدمات المخزنية", + "الخدمات اللوجستية", + "الخدمات الداخلية", + "الخدمات التشغيلية", + "تحليل الخدمات", + "تقارير الخدمات", + "إدارة الامتيازات المخزنية", + "مناطق التخزين الخاصة", + "المستودعات المبردة", + "المستودعات الخطرة", + "الأصناف الحساسة", + "إدارة التخزين الخاص", + "تقارير التخزين الخاص", + "إدارة العقود اللوجستية", + "عقود الشحن", + "عقود التخزين", + "عقود التوزيع", + "تجديد العقود", + "تحليل العقود", + "تقارير العقود", + "إدارة الموردين الاستراتيجيين", + "الموردون المعتمدون", + "الموردون المفضلون", + "تحليل أداء المورد", + "تحليل جودة المورد", + "تحليل التوريد", + "تقارير الموردين", + "إدارة التوزيع", + "تخطيط التوزيع", + "شبكة التوزيع", + "تحليل التوزيع", + "تقارير التوزيع", + "إدارة الطلبات الموسمية", + "تحليل الموسمية", + "توقع الطلب الموسمي", + "تقارير الموسمية", + "إدارة التخطيط المخزني", + "تخطيط المخزون", + "تخطيط المستودعات", + "تخطيط التوريد", + "تخطيط الطلبات", + "تخطيط النقل", + "تخطيط التوزيع", + "تقارير التخطيط", + "إدارة الاستدامة المخزنية", + "تقليل الهدر", + "تحسين استهلاك الطاقة", + "إعادة التدوير", + "التخزين المستدام", + "الشحن المستدام", + "تقارير الاستدامة", + "إدارة الابتكار المخزني", + "تقنيات المستودعات", + "المستودعات الذكية", + "إنترنت الأشياء للمخزون", + "الروبوتات المخزنية", + "الذكاء الاصطناعي للمخزون", + "تحليل الابتكار", + "تقارير الابتكار", + "تخطيط إعادة التوريد", + "خطة إعادة التخزين", + "إعادة تعبئة المستودع", + "إدارة إعادة الطلب", + "تحليل إعادة الطلب", + "طلبات إعادة التخزين", + "معدل دوران المخزون", + "تحليل دوران المخزون", + "دوران الأصناف", + "دوران المستودعات", + "الأصناف الأعلى دوراناً", + "الأصناف الأقل دوراناً", + "تحليل سرعة الحركة", + "تحليل بطء الحركة", + "إدارة دورة المخزون", + "دورة حياة الصنف", + "تحليل دورة الحياة", + "الأصناف الموسمية", + "الأصناف الدائمة", + "الأصناف الحرجة", + "الأصناف عالية القيمة", + "الأصناف منخفضة القيمة", + "تحليل ABC", + "تحليل XYZ", + "تصنيف الأصناف حسب القيمة", + "تصنيف الأصناف حسب الحركة", + "تصنيف الأصناف حسب الطلب", + "تصنيف الأصناف حسب الربحية", + "تحليل الربحية المخزنية", + "ربحية الصنف", + "ربحية المستودع", + "ربحية التخزين", + "تكلفة الاحتفاظ بالمخزون", + "تكلفة نفاد المخزون", + "تكلفة التخزين السنوية", + "تكلفة المناولة", + "تكلفة النقل الداخلي", + "تكلفة التحويلات", + "تكلفة إعادة التوريد", + "تكلفة الجرد", + "تكلفة العمالة المخزنية", + "تكلفة إدارة المستودعات", + "تكلفة التعبئة والتغليف", + "تكلفة الشحن الداخلي", + "تكلفة الشحن الخارجي", + "تكلفة التسليم", + "تكلفة التأخير", + "تكلفة المرتجعات المخزنية", + "تكلفة الجودة", + "تكلفة التلفيات", + "تكلفة الفاقد", + "تكلفة الانكماش المخزني", + "الانكماش المخزني", + "تحليل الانكماش", + "تقارير الانكماش", + "إدارة الفاقد", + "تحليل الفاقد", + "تقارير الفاقد", + "إدارة الأصناف الحرجة", + "إدارة الأصناف الحساسة", + "إدارة الأصناف المجمدة", + "إدارة الأصناف المبردة", + "إدارة الأصناف الكيميائية", + "إدارة الأصناف الطبية", + "إدارة المواد الخام", + "إدارة المواد نصف المصنعة", + "إدارة المنتجات النهائية", + "إدارة مستلزمات التشغيل", + "إدارة الأدوات المخزنية", + "إدارة المعدات المخزنية", + "إدارة قطع الغيار", + "إدارة الأدوات الاحتياطية", + "إدارة المخزون الاحتياطي", + "إدارة المخزون الميت", + "تحليل المخزون الميت", + "تقارير المخزون الميت", + "إدارة المخزون الراكد", + "تحليل المخزون الراكد", + "تقارير المخزون الراكد", + "إدارة المخزون التالف", + "تحليل المخزون التالف", + "تقارير المخزون التالف", + "إدارة المخزون الفائض", + "تحليل المخزون الفائض", + "تقارير المخزون الفائض", + "إدارة المخزون الناقص", + "تحليل المخزون الناقص", + "تقارير المخزون الناقص", + "إدارة التخصيص المخزني", + "تخصيص المواقع", + "تخصيص الأصناف", + "تخصيص الطلبات", + "تخصيص الدفعات", + "تخصيص الأرقام التسلسلية", + "إدارة الالتقاط", + "أوامر الالتقاط", + "قوائم الالتقاط", + "تحسين الالتقاط", + "سرعة الالتقاط", + "دقة الالتقاط", + "تحليل الالتقاط", + "تقارير الالتقاط", + "إدارة التعبئة النهائية", + "أوامر التعبئة", + "قوائم التعبئة", + "دقة التعبئة", + "تحليل التعبئة", + "تقارير التعبئة النهائية", + "إدارة الشحن السريع", + "إدارة الشحن المجدول", + "إدارة التسليم المحلي", + "إدارة التسليم الدولي", + "إدارة التوزيع الإقليمي", + "إدارة التوصيل الأخير", + "تتبع التسليم", + "تأكيد التسليم", + "إثبات الاستلام", + "إدارة الاستلام الداخلي", + "إدارة الاستلام الخارجي", + "تخطيط الاستلام", + "جدولة الاستلام", + "تأكيد الاستلام", + "فحص الاستلام", + "إدارة مناطق الاستلام", + "إدارة مناطق الشحن", + "إدارة مناطق التخزين", + "إدارة مناطق الالتقاط", + "إدارة مناطق التعبئة", + "إدارة تدفق المواد", + "تدفق المخزون", + "تحسين تدفق المواد", + "تحليل تدفق المخزون", + "تقارير تدفق المواد", + "إدارة سلاسل الإمداد", + "إدارة التوريد المباشر", + "إدارة الموردين المتعددين", + "إدارة المورد البديل", + "تحليل الاعتماد على المورد", + "تحليل استقرار المورد", + "تحليل زمن التوريد", + "تحليل دقة التوريد", + "تحليل جودة التوريد", + "تحليل تأخير الموردين", + "تقييم زمن التسليم", + "تقييم جودة المورد", + "تقييم كفاءة المورد", + "بطاقات أداء الموردين", + "تصنيف الموردين", + "اعتماد الموردين", + "إلغاء اعتماد الموردين", + "إدارة الموردين العالميين", + "إدارة الموردين المحليين", + "إدارة الموردين الاستراتيجيين", + "إدارة الموردين الثانويين", + "إدارة اتفاقيات التوريد", + "إدارة العقود الشرائية", + "إدارة اتفاقيات الأسعار", + "إدارة شروط التوريد", + "إدارة الكميات التعاقدية", + "إدارة الكميات المفتوحة", + "إدارة الطلبات المتكررة", + "إدارة التوريد الدوري", + "إدارة الشحنات المجمعة", + "إدارة الشحنات الجزئية", + "إدارة الحاويات", + "إدارة أرقام الحاويات", + "تتبع الحاويات", + "تكلفة الحاويات", + "إدارة الموانئ", + "إدارة الجمارك", + "إدارة التخليص الجمركي", + "رسوم الجمارك", + "الضرائب الجمركية", + "وثائق التخليص", + "متابعة التخليص", + "تحليل التخليص الجمركي", + "تقارير الجمارك", + "إدارة الاستيراد", + "إدارة التصدير", + "عمليات الاستيراد", + "عمليات التصدير", + "شحنات الاستيراد", + "شحنات التصدير", + "تكاليف الاستيراد", + "تكاليف التصدير", + "تحليل الاستيراد", + "تحليل التصدير", + "تقارير الاستيراد", + "تقارير التصدير", + "إدارة سعة التخزين", + "تخطيط السعة", + "تحليل السعة التخزينية", + "استغلال السعة", + "زيادة السعة", + "تقارير السعة التخزينية", + "إدارة التخزين الرأسي", + "إدارة التخزين الأفقي", + "إدارة التخزين الذكي", + "إدارة المستودعات الآلية", + "إدارة الرافعات", + "إدارة معدات المناولة", + "إدارة معدات المستودعات", + "صيانة معدات المستودعات", + "تحليل استخدام المعدات", + "تقارير المعدات", + "إدارة أمن المستودعات", + "كاميرات المستودعات", + "مراقبة المخزون", + "التحكم في الوصول", + "تصاريح الدخول للمستودعات", + "إدارة الزيارات للمستودعات", + "سجل الدخول للمستودعات", + "سجل خروج الأصناف", + "سجل دخول الأصناف", + "إدارة الحوادث المخزنية", + "تقارير الحوادث المخزنية", + "تحليل الحوادث المخزنية", + "إدارة الطوارئ المخزنية", + "خطط الطوارئ", + "إخلاء المستودعات", + "إدارة الكوارث", + "استمرارية العمليات المخزنية", + "إدارة الامتثال البيئي", + "إدارة المخلفات", + "إعادة تدوير المواد", + "التخلص من المواد التالفة", + "إدارة المواد الخطرة", + "تخزين المواد الخطرة", + "نقل المواد الخطرة", + "تقارير المواد الخطرة", + "إدارة الطاقة بالمستودعات", + "استهلاك الكهرباء", + "تحليل استهلاك الطاقة", + "تحسين استهلاك الطاقة", + "إدارة الإضاءة", + "إدارة التبريد", + "إدارة التهوية", + "تقارير الطاقة", + "إدارة جودة التخزين", + "درجة الحرارة", + "الرطوبة", + "مراقبة الرطوبة", + "مراقبة الحرارة", + "تنبيهات الحرارة", + "تنبيهات الرطوبة", + "تقارير بيئة التخزين", + "تحليل بيئة التخزين", + "إدارة الشروط التخزينية", + "إدارة المنتجات الحساسة", + "إدارة المنتجات الغذائية", + "إدارة المنتجات الدوائية", + "إدارة المنتجات الإلكترونية", + "إدارة المنتجات القابلة للكسر", + "إدارة المنتجات القابلة للاشتعال", + "إدارة الطلبات الإلكترونية", + "تكامل التجارة الإلكترونية", + "إدارة الطلبات الرقمية", + "مزامنة المخزون", + "تحديث المخزون اللحظي", + "عرض توفر المخزون", + "تخصيص الطلبات الإلكترونية", + "إدارة المرتجعات الإلكترونية", + "تقارير التجارة الإلكترونية", + "إدارة قنوات البيع", + "مخزون نقاط البيع", + "مخزون الفروع", + "مخزون المتاجر", + "مخزون التجارة الإلكترونية", + "مخزون المشاريع", + "مخزون الإنتاج", + "توحيد المخزون", + "مزامنة المستودعات", + "تحليل القنوات البيعية", + "تقارير القنوات", + "إدارة الطلبات متعددة القنوات", + "إدارة التحويلات بين الفروع", + "إدارة الفروع اللوجستية", + "أداء الفروع المخزنية", + "تحليل أداء المستودعات", + "مقارنة المستودعات", + "مقارنة الفروع", + "تحليل الأداء التشغيلي", + "تحليل سرعة التنفيذ", + "تحليل دقة العمليات", + "تحليل كفاءة التخزين", + "تحليل كفاءة العمالة", + "تحليل كفاءة النقل", + "تحليل كفاءة الالتقاط", + "تحليل كفاءة التعبئة", + "تحليل كفاءة الشحن", + "تحليل جودة العمليات", + "تحليل زمن الدورة", + "تحليل وقت المعالجة", + "تحليل وقت التسليم", + "تحليل وقت الاستلام", + "تحليل وقت الشحن", + "تحليل وقت التحويل", + "تحليل وقت الجرد", + "تحليل الإنتاجية اليومية", + "تحليل الإنتاجية الأسبوعية", + "تحليل الإنتاجية الشهرية", + "تحليل استغلال المعدات", + "تحليل استغلال المساحات", + "تحليل استغلال الموارد", + "تحليل استغلال العمالة", + "إدارة قواعد المخزون", + "قواعد إعادة الطلب", + "قواعد التسعير المخزني", + "قواعد التحويل", + "قواعد الجرد", + "قواعد التخزين", + "قواعد التعبئة", + "قواعد الشحن", + "قواعد الاستلام", + "قواعد التوزيع", + "قواعد الجودة", + "قواعد السلامة", + "قواعد الامتثال", + "قواعد التوريد", + "قواعد الموردين", + "قواعد المرتجعات", + "قواعد النقص", + "قواعد الفائض", + "قواعد التلف", + "قواعد انتهاء الصلاحية", + "قواعد التخصيص", + "قواعد التتبع", + "قواعد الأرقام التسلسلية", + "قواعد الدفعات", + "قواعد التنبؤ", + "قواعد التنبيهات", + "قواعد الإشعارات", + "قواعد الأتمتة", + "قواعد التحليلات", + "قواعد التقارير", + "قواعد الكفاءة", + "قواعد الإنتاجية", + "قواعد الجودة التشغيلية", + "قواعد تحسين الأداء", + "قواعد تقليل التكاليف", + "قواعد تحسين استغلال المساحات", + "قواعد تحسين المخزون", + "قواعد تحسين المستودعات", + "قواعد تحسين النقل", + "قواعد تحسين الشحن", + "قواعد تحسين التوزيع", + "قواعد تحسين الالتقاط", + "قواعد تحسين التعبئة", + "قواعد تحسين الاستلام", + "قواعد تحسين الجرد", + "قواعد تحسين الطلبات", + "قواعد تحسين التحويلات", + "قواعد تحسين سلسلة التوريد", + "إدارة ذكاء المخزون", + "تحليلات المخزون المتقدمة", + "تحليل الأداء اللحظي", + "تحليل البيانات التشغيلية", + "تحليل البيانات اللوجستية", + "التنبؤ بالنقص المستقبلي", + "التنبؤ بالفائض المستقبلي", + "التنبؤ بالطلب الموسمي", + "التنبؤ بالاستهلاك المستقبلي", + "التنبؤ بالتلف", + "التنبؤ بالتأخير", + "التنبؤ بالمخاطر", + "ذكاء المستودعات", + "ذكاء العمليات اللوجستية", + "ذكاء التوريد", + "ذكاء الشحن", + "ذكاء التخزين", + "رؤى سلسلة التوريد", + "رؤى المخزون", + "رؤى المستودعات", + "رؤى التوزيع", + "رؤى الطلبات", + "رؤى الموردين", + "رؤى الشحنات", + "رؤى الأداء المخزني", + "إدارة الابتكار اللوجستي", + "المستودعات الذكية", + "التخزين الذكي", + "الروبوتات اللوجستية", + "إنترنت الأشياء للمستودعات", + "الذكاء الاصطناعي للمخزون", + "تحسين العمليات بالذكاء الاصطناعي", + "أتمتة التخزين الذكي", + "أتمتة الشحن الذكي", + "أتمتة التوزيع الذكي", + "أتمتة التحليلات المخزنية", + "أتمتة التنبؤ بالطلب", + "أتمتة إعادة التوريد", + "أتمتة إدارة الموردين", + "أتمتة إدارة المستودعات", + "أتمتة إدارة الطلبات", + "أتمتة إدارة النقل", + "أتمتة إدارة الجودة", + "أتمتة إدارة الجرد", + "أتمتة إدارة الشحنات", + "أتمتة إدارة المرتجعات", + "أتمتة إدارة سلسلة التوريد", + "أتمتة التقارير التشغيلية", + "أتمتة التنبيهات اللوجستية", + "أتمتة الإشعارات المخزنية", + "إدارة التحسين التشغيلي", + "تحسين سرعة العمليات", + "تحسين دقة العمليات", + "تحسين كفاءة الشحن", + "تحسين كفاءة التوريد", + "تحسين كفاءة التوزيع", + "تحسين كفاءة المستودعات", + "تحسين كفاءة التخزين", + "تحسين كفاءة الالتقاط", + "تحسين كفاءة التعبئة", + "تحسين كفاءة الاستلام", + "تحسين إدارة الحاويات", + "تحسين إدارة الموردين", + "تحسين إدارة الطلبات", + "تحسين إدارة الجرد", + "تحسين إدارة النقل", + "تحسين إدارة الجودة", + "تحسين إدارة المرتجعات", + "تحسين إدارة التكاليف", + "تحسين إدارة الطاقة", + "تحسين إدارة السلامة", + "تحسين إدارة الامتثال", + "تحسين إدارة العمليات اللوجستية", + "تحسين إدارة سلسلة الإمداد", + "تحسين دقة التنبؤ", + "تحسين استغلال السعة", + "تحسين استغلال الموارد", + "تحسين استغلال المعدات", + "تحسين استغلال العمالة", + "تحسين تجربة التوريد", + "تحسين تجربة الشحن", + "تحسين تجربة الاستلام", + "تحسين تجربة التوزيع", + "إدارة التصنيع", + "إدارة الإنتاج", + "تخطيط الإنتاج", + "أوامر التصنيع", + "أمر تصنيع جديد", + "تعديل أمر التصنيع", + "إلغاء أمر التصنيع", + "اعتماد أمر التصنيع", + "متابعة أوامر التصنيع", + "حالة أمر التصنيع", + "أوامر الإنتاج المفتوحة", + "أوامر الإنتاج المغلقة", + "أوامر الإنتاج المعلقة", + "أوامر الإنتاج المتأخرة", + "إدارة العمليات التصنيعية", + "مراحل التصنيع", + "تسلسل العمليات", + "إدارة خطوط الإنتاج", + "خطوط الإنتاج النشطة", + "أداء خطوط الإنتاج", + "تحليل خطوط الإنتاج", + "كفاءة خطوط الإنتاج", + "توقف خطوط الإنتاج", + "أعطال خطوط الإنتاج", + "إدارة المصانع", + "إدارة الورش", + "إدارة محطات العمل", + "إدارة مراكز العمل", + "جدولة الإنتاج", + "خطة الإنتاج اليومية", + "خطة الإنتاج الأسبوعية", + "خطة الإنتاج الشهرية", + "خطة الإنتاج السنوية", + "الطاقة الإنتاجية", + "تحليل الطاقة الإنتاجية", + "استغلال الطاقة الإنتاجية", + "زيادة الطاقة الإنتاجية", + "إدارة الموارد التصنيعية", + "توزيع الموارد", + "استغلال الموارد", + "تحليل استغلال الموارد", + "إدارة المواد الخام", + "استهلاك المواد الخام", + "احتياجات المواد الخام", + "تخطيط المواد", + "تخصيص المواد", + "نقص المواد الخام", + "فائض المواد الخام", + "تحليل استهلاك المواد", + "إدارة المنتجات نصف المصنعة", + "إدارة المنتجات النهائية", + "إدارة مكونات المنتج", + "هيكل المنتج", + "قائمة المواد", + "إنشاء قائمة مواد", + "تعديل قائمة المواد", + "تكلفة قائمة المواد", + "إدارة الوصفات التصنيعية", + "الوصفات الإنتاجية", + "تحديث الوصفات", + "تكلفة الوصفات", + "إدارة العمليات", + "خطوات التشغيل", + "تتبع العمليات", + "توقيت العمليات", + "تحليل العمليات", + "تقارير العمليات", + "إدارة العمالة التصنيعية", + "عمال الإنتاج", + "جدولة العمالة", + "إنتاجية العمالة", + "تحليل أداء العمال", + "ساعات العمل الإنتاجية", + "ساعات العمل الإضافي", + "تكلفة العمالة", + "تقارير العمالة", + "إدارة الجودة التصنيعية", + "فحص الجودة", + "اختبارات الجودة", + "رفض الجودة", + "قبول الجودة", + "معايير الجودة", + "تقارير الجودة", + "تحليل الجودة", + "إدارة الصيانة الصناعية", + "الصيانة الوقائية", + "الصيانة التصحيحية", + "طلبات الصيانة", + "جدولة الصيانة", + "تتبع الصيانة", + "تحليل الصيانة", + "تقارير الصيانة", + "إدارة الآلات", + "الآلات الإنتاجية", + "توقف الآلات", + "أعطال الآلات", + "كفاءة الآلات", + "صيانة الآلات", + "تحليل أداء الآلات", + "تقارير الآلات", + "إدارة المعدات الصناعية", + "استخدام المعدات", + "صيانة المعدات", + "تحليل المعدات", + "تقارير المعدات", + "إدارة المخزون التصنيعي", + "مخزون الإنتاج", + "مخزون المواد الخام", + "مخزون المنتجات النهائية", + "مخزون المنتجات نصف المصنعة", + "تحويلات الإنتاج", + "صرف المواد للإنتاج", + "استلام الإنتاج", + "تتبع المخزون التصنيعي", + "إدارة التكاليف التصنيعية", + "تكلفة الإنتاج", + "تكلفة المواد", + "تكلفة العمالة", + "تكلفة التشغيل", + "تكلفة الطاقة", + "تكلفة الصيانة", + "تكلفة الجودة", + "تكلفة الهدر", + "تحليل التكاليف", + "تقارير التكاليف", + "إدارة الهدر التصنيعي", + "الهدر الإنتاجي", + "تقليل الهدر", + "تحليل الهدر", + "تقارير الهدر", + "إدارة الكفاءة التشغيلية", + "الكفاءة الإنتاجية", + "كفاءة التشغيل", + "تحليل الكفاءة", + "تقارير الكفاءة", + "إدارة الإنتاجية", + "إنتاجية المصنع", + "إنتاجية الخط", + "إنتاجية العامل", + "تحليل الإنتاجية", + "تقارير الإنتاجية", + "إدارة التوقفات", + "التوقف المخطط", + "التوقف غير المخطط", + "تحليل التوقفات", + "تقارير التوقفات", + "إدارة الوقت الإنتاجي", + "وقت التشغيل", + "وقت التوقف", + "زمن الدورة", + "وقت الإعداد", + "وقت التنفيذ", + "تحليل الوقت", + "تقارير الوقت", + "إدارة الطلبات التصنيعية", + "طلبات الإنتاج", + "طلبات التصنيع الخاصة", + "طلبات إعادة التصنيع", + "أولوية أوامر الإنتاج", + "تحليل الطلبات", + "تقارير الطلبات", + "إدارة التوريد للإنتاج", + "توريد المواد الخام", + "توريد المكونات", + "متابعة الموردين", + "تحليل الموردين", + "تقارير الموردين", + "إدارة التخطيط الصناعي", + "التخطيط الرئيسي للإنتاج", + "تخطيط الاحتياجات", + "تخطيط المواد", + "تخطيط الموارد", + "تخطيط الطاقة", + "تخطيط القدرات", + "تحليل التخطيط", + "تقارير التخطيط", + "إدارة سلسلة التوريد الصناعية", + "تدفق المواد", + "تدفق الإنتاج", + "تدفق العمليات", + "تحليل سلسلة التوريد", + "تقارير سلسلة التوريد", + "إدارة التسليم الإنتاجي", + "التسليم الداخلي", + "التسليم النهائي", + "تتبع التسليم", + "تقارير التسليم", + "إدارة الطلب على الإنتاج", + "تحليل الطلب", + "توقعات الطلب", + "التنبؤ بالإنتاج", + "التنبؤ بالاستهلاك", + "تحليل الاتجاهات", + "تقارير التوقعات", + "إدارة السلامة الصناعية", + "سلامة المصنع", + "سلامة العمال", + "تقارير الحوادث", + "تحليل الحوادث", + "إدارة المخاطر الصناعية", + "تحليل المخاطر", + "تقارير المخاطر", + "إدارة الامتثال الصناعي", + "المعايير الصناعية", + "الامتثال التشغيلي", + "التدقيق الصناعي", + "تقارير الامتثال", + "إدارة الوثائق الصناعية", + "وثائق الإنتاج", + "وثائق الجودة", + "وثائق التشغيل", + "أرشفة المستندات", + "استرجاع الوثائق", + "تقارير الوثائق", + "إدارة البيانات التصنيعية", + "تحليل البيانات الإنتاجية", + "تحليل البيانات اللحظية", + "تحليل البيانات التاريخية", + "جودة البيانات", + "تقارير البيانات", + "إدارة التقارير التصنيعية", + "تقارير الإنتاج", + "تقارير الجودة", + "تقارير التكاليف", + "تقارير العمالة", + "تقارير الآلات", + "تقارير الأداء", + "تقارير الكفاءة", + "تقارير الصيانة", + "تقارير الطاقة", + "تقارير الهدر", + "تقارير التوقفات", + "تقارير المخزون", + "تقارير الطلبات", + "تقارير التخطيط", + "تقارير السلامة", + "تقارير الامتثال", + "تقارير الإنتاجية", + "لوحة التصنيع", + "لوحة الإنتاج", + "لوحة الجودة", + "لوحة الأداء", + "لوحة الكفاءة", + "لوحة التكاليف", + "لوحة الصيانة", + "لوحة السلامة", + "لوحة التوريد", + "لوحة التخطيط", + "لوحة المخزون التصنيعي", + "إدارة التحليلات التصنيعية", + "التحليلات التنبؤية للإنتاج", + "تحليل الأداء اللحظي", + "تحليل الاتجاهات التصنيعية", + "تحليل استهلاك المواد", + "تحليل جودة الإنتاج", + "تحليل الأعطال", + "تحليل الصيانة", + "تحليل الطاقة", + "تحليل الإنتاجية", + "تحليل أوقات التوقف", + "تحليل أوقات التشغيل", + "تحليل تكلفة الإنتاج", + "تحليل انحرافات الإنتاج", + "ذكاء التصنيع", + "ذكاء الإنتاج", + "ذكاء العمليات الصناعية", + "ذكاء الجودة", + "ذكاء الصيانة", + "رؤى التصنيع", + "رؤى الإنتاج", + "رؤى الجودة", + "رؤى الكفاءة", + "رؤى التكاليف", + "رؤى الأداء", + "إدارة الأتمتة الصناعية", + "أتمتة الإنتاج", + "أتمتة خطوط الإنتاج", + "أتمتة الجودة", + "أتمتة الصيانة", + "أتمتة التقارير", + "أتمتة التحليلات", + "أتمتة التنبيهات", + "أتمتة الإشعارات", + "أتمتة تخطيط الإنتاج", + "أتمتة مراقبة الجودة", + "أتمتة تتبع المواد", + "أتمتة المخزون التصنيعي", + "أتمتة إدارة الطلبات", + "أتمتة إدارة الموارد", + "أتمتة إدارة العمالة", + "أتمتة إدارة الآلات", + "أتمتة العمليات التصنيعية", + "إدارة التنبيهات الصناعية", + "تنبيهات الأعطال", + "تنبيهات التوقف", + "تنبيهات الجودة", + "تنبيهات نقص المواد", + "تنبيهات الصيانة", + "تنبيهات السلامة", + "تنبيهات الأداء", + "تنبيهات الكفاءة", + "إدارة الإشعارات التصنيعية", + "إدارة الابتكار الصناعي", + "المصانع الذكية", + "إنترنت الأشياء الصناعي", + "الروبوتات الصناعية", + "الذكاء الاصطناعي للتصنيع", + "الصيانة التنبؤية", + "الجودة الذكية", + "التصنيع الذكي", + "تحليل الابتكار", + "تقارير الابتكار", + "إدارة الطاقة الصناعية", + "استهلاك الطاقة", + "تحليل استهلاك الطاقة", + "تحسين استهلاك الطاقة", + "تقارير الطاقة", + "إدارة الاستدامة الصناعية", + "تقليل الانبعاثات", + "تقليل استهلاك الطاقة", + "إعادة التدوير الصناعي", + "إدارة النفايات الصناعية", + "تحليل الاستدامة", + "تقارير الاستدامة", + "إدارة التحسين المستمر", + "تحسين العمليات التصنيعية", + "تحسين الجودة", + "تحسين الكفاءة", + "تحسين الإنتاجية", + "تحسين استغلال الموارد", + "تحسين استغلال الطاقة", + "تحسين استغلال العمالة", + "تحسين استغلال الآلات", + "تحسين تخطيط الإنتاج", + "تحسين إدارة المخزون", + "تحسين إدارة الصيانة", + "تحسين إدارة الجودة", + "تحسين إدارة التكاليف", + "تحسين إدارة السلامة", + "تحسين إدارة التوريد", + "تحسين إدارة الطلبات", + "تحسين إدارة العمليات", + "تحسين إدارة المصنع", + "تحسين إدارة الورش", + "تحسين إدارة مراكز العمل", + "تحسين إدارة المواد الخام", + "تحسين إدارة المنتجات", + "تحسين إدارة الوقت الإنتاجي", + "تحسين أوقات التشغيل", + "تحسين أوقات الإعداد", + "تحسين أوقات التنفيذ", + "تحسين أوقات التوقف", + "تحسين تدفق المواد", + "تحسين تدفق العمليات", + "تحسين تدفق الإنتاج", + "تحسين كفاءة المصنع", + "تحسين كفاءة الخطوط", + "تحسين كفاءة المعدات", + "تحسين كفاءة العمالة", + "تحسين كفاءة الجودة", + "تحسين كفاءة الصيانة", + "تحسين كفاءة الطاقة", + "تحسين كفاءة سلسلة التوريد", + "تحسين دقة التخطيط", + "تحسين دقة التوقعات", + "تحسين دقة الجودة", + "تحسين دقة المخزون", + "تحسين دقة العمليات", + "إدارة الأداء الصناعي", + "قياس الأداء الصناعي", + "مؤشرات الأداء الصناعي", + "تحليل الأداء الصناعي", + "تقارير الأداء الصناعي", + "إدارة الموارد الصناعية", + "تخصيص الموارد الصناعية", + "استغلال الموارد الصناعية", + "تحليل الموارد الصناعية", + "تقارير الموارد الصناعية", + "إدارة العمليات التشغيلية", + "مراقبة العمليات", + "تحليل العمليات التشغيلية", + "تقارير العمليات التشغيلية", + "إدارة الجداول الإنتاجية", + "جدولة أوامر الإنتاج", + "جدولة العمليات", + "جدولة الصيانة", + "جدولة العمالة", + "تحليل الجداول", + "تقارير الجداول", + "إدارة المخرجات الإنتاجية", + "إنتاج الوحدات", + "معدل الإنتاج", + "تحليل المخرجات", + "تقارير المخرجات", + "إدارة الطلبات المخصصة", + "التصنيع حسب الطلب", + "التصنيع الكمي", + "التصنيع المستمر", + "التصنيع المتقطع", + "تحليل أساليب التصنيع", + "تقارير أساليب التصنيع", + "إدارة الأصول الصناعية", + "الأصول الإنتاجية", + "صيانة الأصول", + "تتبع الأصول", + "تحليل الأصول", + "تقارير الأصول الصناعية", + "إدارة مراقبة الإنتاج", + "متابعة الإنتاج اللحظي", + "تتبع تقدم الإنتاج", + "تحليل تقدم الإنتاج", + "تقارير تقدم الإنتاج", + "إدارة الجودة الشاملة", + "إدارة التحسين الشامل", + "تحليل الجودة الشاملة", + "تقارير الجودة الشاملة", + "إدارة الفحص النهائي", + "الفحص أثناء الإنتاج", + "الفحص قبل الشحن", + "نتائج الفحص", + "تقارير الفحص", + "إدارة الانحرافات", + "تحليل الانحرافات", + "تقارير الانحرافات", + "إدارة الإجراءات التصحيحية", + "إدارة الإجراءات الوقائية", + "تحليل الإجراءات", + "تقارير الإجراءات", + "إدارة التعاون الصناعي", + "تواصل فرق الإنتاج", + "تنسيق العمليات", + "تحليل التعاون", + "تقارير التعاون", + "إدارة المعرفة الصناعية", + "توثيق العمليات", + "توثيق الإجراءات", + "إدارة الخبرات", + "نقل المعرفة", + "تقارير المعرفة", + "إدارة التدريب الصناعي", + "تدريب العمال", + "تدريب المشغلين", + "تدريب الجودة", + "تدريب السلامة", + "تحليل التدريب", + "تقارير التدريب الصناعي", + "إدارة الحسابات", + "الحسابات العامة", + "دليل الحسابات", + "إنشاء حساب جديد", + "تعديل الحساب", + "حذف الحساب", + "تصنيف الحسابات", + "الحسابات النشطة", + "الحسابات غير النشطة", + "الحسابات المدينة", + "الحسابات الدائنة", + "الحسابات البنكية", + "الحسابات النقدية", + "الحسابات الفرعية", + "الحسابات الرئيسية", + "ميزان المراجعة", + "قيود اليومية", + "إنشاء قيد يومية", + "تعديل قيد اليومية", + "حذف قيد اليومية", + "اعتماد القيود", + "ترحيل القيود", + "القيود المفتوحة", + "القيود المرحّلة", + "القيود المعكوسة", + "القيود التلقائية", + "قيود التسوية", + "قيود الإقفال", + "قيود الافتتاح", + "قيود المصروفات", + "قيود الإيرادات", + "قيود الرواتب", + "قيود الضرائب", + "قيود الإهلاك", + "قيود التحويل", + "قيود التوريد", + "قيود المبيعات", + "قيود المشتريات", + "دفتر الأستاذ العام", + "دفتر الأستاذ الفرعي", + "دفتر اليومية", + "تحليل دفتر الأستاذ", + "تقارير دفتر الأستاذ", + "الحركات المحاسبية", + "سجل الحركات", + "تتبع الحركات", + "تحليل الحركات", + "تقارير الحركات", + "إدارة الفواتير", + "فاتورة مبيعات", + "فاتورة مشتريات", + "الفواتير المفتوحة", + "الفواتير المدفوعة", + "الفواتير غير المدفوعة", + "الفواتير المتأخرة", + "الفواتير الإلكترونية", + "الفواتير الضريبية", + "إصدار الفواتير", + "إلغاء الفواتير", + "تعديل الفواتير", + "اعتماد الفواتير", + "إدارة التحصيلات", + "تحصيل الفواتير", + "متابعة التحصيلات", + "تسوية التحصيلات", + "تحليل التحصيلات", + "تقارير التحصيلات", + "إدارة المدفوعات", + "دفعات الموردين", + "دفعات العملاء", + "المدفوعات النقدية", + "المدفوعات البنكية", + "المدفوعات الإلكترونية", + "المدفوعات الجزئية", + "المدفوعات الكاملة", + "تحليل المدفوعات", + "تقارير المدفوعات", + "إدارة النقدية", + "الصندوق النقدي", + "إدارة الخزينة", + "الحركات النقدية", + "الرصيد النقدي", + "التدفق النقدي", + "تحليل التدفق النقدي", + "تقارير التدفق النقدي", + "إدارة البنوك", + "الحسابات البنكية", + "التحويلات البنكية", + "تسوية الحساب البنكي", + "مطابقة البنك", + "كشف الحساب البنكي", + "تحليل البنك", + "تقارير البنك", + "إدارة الشيكات", + "الشيكات الواردة", + "الشيكات الصادرة", + "الشيكات المؤجلة", + "الشيكات المرتجعة", + "تحصيل الشيكات", + "صرف الشيكات", + "تقارير الشيكات", + "إدارة الضرائب", + "ضريبة القيمة المضافة", + "الضرائب المستحقة", + "الإقرار الضريبي", + "الفواتير الضريبية", + "تسجيل الضرائب", + "حساب الضرائب", + "تحليل الضرائب", + "تقارير الضرائب", + "إدارة الأصول الثابتة", + "إضافة أصل ثابت", + "تعديل الأصل", + "بيع الأصل", + "إهلاك الأصول", + "جدول الإهلاك", + "تكلفة الأصل", + "العمر الإنتاجي", + "تحليل الأصول", + "تقارير الأصول", + "إدارة المصروفات", + "المصروفات التشغيلية", + "المصروفات الإدارية", + "المصروفات العمومية", + "مصروفات السفر", + "مصروفات الرواتب", + "مصروفات التسويق", + "تحليل المصروفات", + "تقارير المصروفات", + "إدارة الإيرادات", + "إيرادات المبيعات", + "إيرادات الخدمات", + "الإيرادات المتكررة", + "الإيرادات المؤجلة", + "تحليل الإيرادات", + "تقارير الإيرادات", + "إدارة الأرباح والخسائر", + "الأرباح الإجمالية", + "الأرباح الصافية", + "الخسائر التشغيلية", + "تحليل الأرباح", + "تحليل الخسائر", + "تقارير الأرباح والخسائر", + "الميزانية العمومية", + "تحليل الميزانية العمومية", + "تقارير الميزانية العمومية", + "إدارة الموازنات", + "الموازنة التقديرية", + "إعداد الميزانية", + "اعتماد الميزانية", + "مقارنة الميزانية", + "انحرافات الميزانية", + "تحليل الميزانية", + "تقارير الميزانية", + "إدارة مراكز التكلفة", + "إنشاء مركز تكلفة", + "تعديل مركز التكلفة", + "تحليل مراكز التكلفة", + "تقارير مراكز التكلفة", + "إدارة مراكز الربح", + "تحليل الربحية", + "تقارير الربحية", + "إدارة العملات", + "العملات المتعددة", + "سعر الصرف", + "تحويل العملات", + "فروقات العملة", + "إعادة تقييم العملة", + "تحليل العملات", + "تقارير العملات", + "إدارة الاعتمادات", + "الاعتمادات المستندية", + "خطابات الضمان", + "إدارة التمويل", + "إدارة القروض", + "القروض البنكية", + "أقساط القروض", + "الفوائد البنكية", + "تحليل التمويل", + "تقارير التمويل", + "إدارة الرواتب المحاسبية", + "قيود الرواتب", + "مصروفات الرواتب", + "استحقاقات الرواتب", + "الضرائب على الرواتب", + "تحليل الرواتب", + "تقارير الرواتب", + "إدارة التسويات", + "تسوية الحسابات", + "تسوية الموردين", + "تسوية العملاء", + "تسوية البنوك", + "تسوية الضرائب", + "تحليل التسويات", + "تقارير التسويات", + "إدارة الإقفالات", + "إقفال السنة المالية", + "إقفال الشهر", + "إقفال الفترة المحاسبية", + "إعادة فتح الفترة", + "تحليل الإقفالات", + "تقارير الإقفالات", + "إدارة الفترات المالية", + "السنة المالية", + "الفترة المحاسبية", + "الفترات المفتوحة", + "الفترات المغلقة", + "تحليل الفترات", + "تقارير الفترات", + "إدارة الذمم المدينة", + "أعمار الديون", + "متابعة العملاء", + "تحصيل العملاء", + "الديون المعدومة", + "تحليل الذمم المدينة", + "تقارير الذمم المدينة", + "إدارة الذمم الدائنة", + "مستحقات الموردين", + "دفعات الموردين", + "تحليل الذمم الدائنة", + "تقارير الذمم الدائنة", + "إدارة التقارير المالية", + "التقارير اليومية", + "التقارير الشهرية", + "التقارير السنوية", + "التقارير التحليلية", + "تقارير الأداء المالي", + "تقارير السيولة", + "تقارير الربحية", + "تقارير التدفقات النقدية", + "لوحة الحسابات", + "لوحة الأداء المالي", + "لوحة الإيرادات", + "لوحة المصروفات", + "لوحة الأرباح", + "لوحة الضرائب", + "لوحة التدفقات النقدية", + "لوحة الميزانية", + "لوحة التحصيلات", + "لوحة المدفوعات", + "إدارة التحليلات المالية", + "تحليل الاتجاهات المالية", + "تحليل الأداء المالي", + "تحليل السيولة", + "تحليل الربحية", + "تحليل التكاليف", + "تحليل الإيرادات", + "تحليل المصروفات", + "تحليل التدفقات النقدية", + "تحليل الموازنات", + "تحليل الانحرافات", + "تحليل النسب المالية", + "تحليل رأس المال", + "تحليل الالتزامات", + "تحليل الأصول", + "تحليل حقوق الملكية", + "ذكاء الأعمال المالية", + "ذكاء المحاسبة", + "رؤى الأداء المالي", + "رؤى الإيرادات", + "رؤى المصروفات", + "رؤى الربحية", + "رؤى التدفقات النقدية", + "إدارة الامتثال المالي", + "الامتثال الضريبي", + "التدقيق المالي", + "المراجعة المالية", + "المراجعة الداخلية", + "المراجعة الخارجية", + "التقارير القانونية", + "تقارير الامتثال", + "إدارة الوثائق المالية", + "أرشفة الفواتير", + "أرشفة القيود", + "أرشفة العقود", + "أرشفة التقارير", + "استرجاع الوثائق", + "إدارة الأرشفة الإلكترونية", + "إدارة البيانات المالية", + "تحليل البيانات المالية", + "جودة البيانات المالية", + "تكامل البيانات المالية", + "تقارير البيانات", + "إدارة الوصول المالي", + "صلاحيات المحاسبة", + "صلاحيات القيود", + "صلاحيات الفواتير", + "صلاحيات التقارير", + "تسجيل الدخول المالي", + "سجل النشاط المالي", + "تقارير النشاط المالي", + "إدارة التنبيهات المالية", + "تنبيهات الفواتير", + "تنبيهات الضرائب", + "تنبيهات التحصيل", + "تنبيهات المدفوعات", + "تنبيهات الإقفالات", + "تنبيهات السيولة", + "تنبيهات الميزانية", + "تنبيهات الانحرافات", + "إدارة الإشعارات المالية", + "إدارة الأتمتة المحاسبية", + "أتمتة القيود", + "أتمتة الفواتير", + "أتمتة التحصيلات", + "أتمتة المدفوعات", + "أتمتة التسويات", + "أتمتة التقارير", + "أتمتة الضرائب", + "أتمتة الإقفالات", + "أتمتة التحليلات", + "أتمتة التنبيهات", + "أتمتة الإشعارات", + "أتمتة التدقيق", + "أتمتة إدارة النقدية", + "أتمتة الحسابات البنكية", + "أتمتة الحسابات المدينة", + "أتمتة الحسابات الدائنة", + "أتمتة الأصول الثابتة", + "أتمتة الميزانيات", + "أتمتة التدفقات النقدية", + "إدارة التحسين المالي", + "تحسين التدفقات النقدية", + "تحسين السيولة", + "تحسين التحصيلات", + "تحسين المدفوعات", + "تحسين الربحية", + "تحسين إدارة المصروفات", + "تحسين إدارة الإيرادات", + "تحسين إدارة الضرائب", + "تحسين إدارة الأصول", + "تحسين إدارة الميزانية", + "تحسين إدارة الذمم", + "تحسين العمليات المحاسبية", + "تحسين الامتثال المالي", + "تحسين الكفاءة المالية", + "تحسين التقارير المالية", + "تحسين التحليلات المالية", + "تحسين الأتمتة المحاسبية", + "إدارة المخاطر المالية", + "تحليل المخاطر المالية", + "مخاطر السيولة", + "مخاطر الائتمان", + "مخاطر العملات", + "مخاطر الضرائب", + "مخاطر التدفقات النقدية", + "تقارير المخاطر المالية", + "إدارة الاستثمار", + "تحليل الاستثمار", + "عائد الاستثمار", + "الأصول الاستثمارية", + "تقارير الاستثمار", + "إدارة السيولة", + "النقد المتاح", + "التزامات قصيرة الأجل", + "تحليل السيولة السريعة", + "تقارير السيولة", + "إدارة الحسابات التشغيلية", + "الحسابات الإدارية", + "الحسابات التحليلية", + "التكاليف المباشرة", + "التكاليف غير المباشرة", + "تحليل التكاليف التشغيلية", + "تقارير التكاليف التشغيلية", + "إدارة المصروفات النثرية", + "الصندوق النثري", + "صرف المصروفات النثرية", + "تسوية المصروفات النثرية", + "تقارير المصروفات النثرية", + "إدارة التحويلات الداخلية", + "تحويلات بين الحسابات", + "تحويلات الفروع", + "تحويلات الصناديق", + "تحليل التحويلات", + "تقارير التحويلات", + "إدارة الفوترة المتكررة", + "الفواتير الدورية", + "الفواتير الآلية", + "الفواتير المؤجلة", + "الفواتير المستقبلية", + "تحليل الفوترة", + "تقارير الفوترة", + "إدارة الإيرادات المؤجلة", + "الاعتراف بالإيرادات", + "جدولة الإيرادات", + "تحليل الإيرادات المؤجلة", + "تقارير الإيرادات المؤجلة", + "إدارة التكاليف الصناعية", + "تكلفة الإنتاج", + "تكلفة المواد", + "تكلفة التشغيل", + "تكلفة العمالة", + "تحليل التكاليف الصناعية", + "تقارير التكاليف الصناعية", + "إدارة العمليات المالية", + "مراقبة العمليات المالية", + "تحليل العمليات المالية", + "تقارير العمليات المالية", + "إدارة الكفاءة المالية", + "قياس الكفاءة المالية", + "مؤشرات الأداء المالي", + "تحليل الكفاءة المالية", + "تقارير الكفاءة المالية", + "إدارة الاستدامة المالية", + "تحليل الاستدامة المالية", + "تقارير الاستدامة المالية", + "إدارة الابتكار المالي", + "التحول الرقمي المالي", + "الذكاء الاصطناعي للمحاسبة", + "التحليلات التنبؤية المالية", + "الروبوتات المحاسبية", + "تحليل الابتكار المالي", + "تقارير الابتكار المالي", + "إدارة الأصول", + "الأصول الثابتة", + "الأصول المتداولة", + "الأصول طويلة الأجل", + "الأصول قصيرة الأجل", + "إضافة أصل جديد", + "تعديل الأصل", + "حذف الأصل", + "بيع الأصل", + "شراء أصل", + "نقل الأصل", + "إهلاك الأصل", + "استهلاك الأصل", + "إدارة دورة حياة الأصل", + "سجل الأصل", + "بيانات الأصل", + "رقم الأصل", + "اسم الأصل", + "تصنيف الأصل", + "فئة الأصل", + "مجموعة الأصول", + "الأصول النشطة", + "الأصول غير النشطة", + "الأصول المباعة", + "الأصول المعطلة", + "الأصول قيد الصيانة", + "الأصول المستهلكة", + "الأصول المؤجرة", + "الأصول المملوكة", + "الأصول الرقمية", + "الأصول التقنية", + "الأصول الصناعية", + "الأصول المكتبية", + "الأصول التشغيلية", + "الأصول الاستثمارية", + "الأصول العقارية", + "الأصول المتنقلة", + "الأصول الثمينة", + "الأصول الحساسة", + "الأصول المؤقتة", + "الأصول المشتركة", + "الأصول المحجوزة", + "إدارة جرد الأصول", + "جرد الأصول السنوي", + "جرد الأصول الدوري", + "جرد الأصول المفاجئ", + "تسوية الأصول", + "فروقات الأصول", + "تتبع الأصول", + "تتبع موقع الأصل", + "تتبع حركة الأصل", + "تتبع استخدام الأصل", + "تتبع نقل الأصل", + "تتبع صيانة الأصل", + "تتبع حالة الأصل", + "تحليل الأصول", + "تحليل أداء الأصول", + "تحليل استخدام الأصول", + "تحليل تكلفة الأصول", + "تحليل إهلاك الأصول", + "تحليل العائد على الأصول", + "تحليل كفاءة الأصول", + "تحليل إنتاجية الأصول", + "تحليل استغلال الأصول", + "تقارير الأصول", + "تقارير الإهلاك", + "تقارير الجرد", + "تقارير الصيانة", + "تقارير النقل", + "تقارير الاستخدام", + "تقارير الاستهلاك", + "تقارير الكفاءة", + "تقارير الأداء", + "تقارير الاستثمار", + "تقارير العمر الإنتاجي", + "تقارير الحالة", + "تقارير الملكية", + "تقارير القيمة الدفترية", + "تقارير القيمة السوقية", + "إدارة الإهلاك", + "الإهلاك الخطي", + "الإهلاك المتناقص", + "الإهلاك السنوي", + "الإهلاك الشهري", + "الإهلاك التراكمي", + "قيمة الإهلاك", + "جدول الإهلاك", + "تحديث الإهلاك", + "إعادة تقييم الإهلاك", + "تحليل الإهلاك", + "تقارير الإهلاك", + "إدارة الصيانة", + "الصيانة الوقائية", + "الصيانة التصحيحية", + "الصيانة الدورية", + "الصيانة الطارئة", + "طلبات الصيانة", + "جدولة الصيانة", + "متابعة الصيانة", + "تكلفة الصيانة", + "تحليل الصيانة", + "تقارير الصيانة", + "إدارة العقود", + "عقود الأصول", + "عقود الصيانة", + "عقود التأجير", + "عقود الضمان", + "تجديد العقود", + "انتهاء العقود", + "تحليل العقود", + "تقارير العقود", + "إدارة الضمانات", + "فترة الضمان", + "انتهاء الضمان", + "مطالبات الضمان", + "تحليل الضمان", + "تقارير الضمان", + "إدارة المواقع", + "موقع الأصل", + "مواقع التخزين", + "الموقع الجغرافي", + "الأصول حسب الموقع", + "تحليل المواقع", + "تقارير المواقع", + "إدارة النقل", + "نقل الأصول بين الفروع", + "تحويل الأصول", + "اعتماد النقل", + "متابعة النقل", + "تحليل النقل", + "تقارير النقل", + "إدارة التخصيص", + "تخصيص الأصول للموظفين", + "تخصيص الأصول للأقسام", + "تخصيص الأصول للمشاريع", + "استرجاع الأصول", + "تحليل التخصيص", + "تقارير التخصيص", + "إدارة التأمين", + "تأمين الأصول", + "وثائق التأمين", + "قيمة التأمين", + "تجديد التأمين", + "مطالبات التأمين", + "تحليل التأمين", + "تقارير التأمين", + "إدارة الأصول التقنية", + "أجهزة الكمبيوتر", + "أجهزة اللابتوب", + "الخوادم", + "الطابعات", + "أجهزة الشبكات", + "الأجهزة اللوحية", + "الهواتف", + "الأجهزة الذكية", + "إدارة تراخيص البرامج", + "الأصول البرمجية", + "إدارة الأجهزة", + "تتبع الأجهزة", + "صيانة الأجهزة", + "تقارير الأجهزة", + "إدارة الأصول الصناعية", + "الآلات الصناعية", + "معدات الإنتاج", + "معدات المصانع", + "معدات الورش", + "معدات التشغيل", + "معدات الرفع", + "معدات النقل", + "معدات التخزين", + "صيانة المعدات", + "تحليل المعدات", + "تقارير المعدات", + "إدارة الأصول المكتبية", + "الأثاث المكتبي", + "المكاتب", + "الكراسي", + "معدات الاجتماعات", + "أجهزة العرض", + "إدارة المرافق", + "تجهيزات المكاتب", + "تحليل الأصول المكتبية", + "تقارير الأصول المكتبية", + "إدارة الأصول العقارية", + "العقارات", + "المباني", + "المستودعات", + "المكاتب", + "الأراضي", + "إدارة الممتلكات", + "إدارة الإيجارات", + "عقود الإيجار", + "تحليل العقارات", + "تقارير العقارات", + "إدارة الأصول الاستثمارية", + "الأصول المالية", + "الاستثمارات", + "الأوراق المالية", + "الأسهم", + "السندات", + "تحليل الاستثمارات", + "تقارير الاستثمارات", + "إدارة الأصول المتنقلة", + "المركبات", + "السيارات", + "الشاحنات", + "الحافلات", + "الرافعات", + "معدات النقل", + "إدارة الأسطول", + "تتبع المركبات", + "صيانة المركبات", + "تحليل الأسطول", + "تقارير الأسطول", + "إدارة الوقود", + "استهلاك الوقود", + "تكلفة الوقود", + "تحليل الوقود", + "تقارير الوقود", + "إدارة الأصول الحساسة", + "الأصول عالية القيمة", + "الأصول الحرجة", + "الأصول السرية", + "الأصول المقيدة", + "صلاحيات الوصول", + "تسجيل الوصول", + "تتبع الاستخدام", + "تحليل الأصول الحساسة", + "تقارير الأصول الحساسة", + "إدارة الوثائق", + "وثائق الأصول", + "فواتير الشراء", + "عقود الشراء", + "شهادات الضمان", + "تقارير الفحص", + "صور الأصول", + "أرشفة المستندات", + "استرجاع الوثائق", + "إدارة الأرشفة", + "إدارة الباركود", + "باركود الأصول", + "طباعة الباركود", + "مسح الباركود", + "إدارة QR", + "إدارة RFID", + "تتبع RFID", + "الأرقام التسلسلية", + "تتبع الرقم التسلسلي", + "إدارة العمر الإنتاجي", + "العمر الافتراضي", + "تاريخ الشراء", + "تاريخ التشغيل", + "تاريخ الإهلاك", + "تاريخ الصيانة", + "تاريخ الاستبدال", + "تحليل العمر الإنتاجي", + "تقارير العمر الإنتاجي", + "إدارة الاستبدال", + "خطة استبدال الأصول", + "الأصول المستبدلة", + "تحليل الاستبدال", + "تقارير الاستبدال", + "إدارة التخلص من الأصول", + "بيع الأصول", + "إعدام الأصول", + "التخلص من الأصول التالفة", + "الأصول المفقودة", + "الأصول المسروقة", + "تحليل التخلص", + "تقارير التخلص", + "إدارة الكفاءة", + "كفاءة الأصول", + "إنتاجية الأصول", + "استغلال الأصول", + "تحليل الكفاءة", + "تقارير الكفاءة", + "إدارة التكاليف", + "تكلفة الشراء", + "تكلفة التشغيل", + "تكلفة الصيانة", + "تكلفة الإهلاك", + "تكلفة التأمين", + "تكلفة النقل", + "تكلفة التخلص", + "تحليل التكاليف", + "تقارير التكاليف", + "إدارة المخاطر", + "مخاطر الأصول", + "تحليل المخاطر", + "الأصول المعرضة للخطر", + "تقارير المخاطر", + "إدارة الامتثال", + "الامتثال للأصول", + "التدقيق على الأصول", + "المراجعة الداخلية", + "المراجعة الخارجية", + "تقارير الامتثال", + "إدارة السلامة", + "سلامة الأصول", + "فحص السلامة", + "تقارير السلامة", + "تحليل السلامة", + "إدارة التنبيهات", + "تنبيهات الصيانة", + "تنبيهات الإهلاك", + "تنبيهات الضمان", + "تنبيهات العقود", + "تنبيهات الاستبدال", + "تنبيهات الجرد", + "تنبيهات الفحص", + "تنبيهات الأعطال", + "إدارة الإشعارات", + "إدارة الأتمتة", + "أتمتة الصيانة", + "أتمتة الإهلاك", + "أتمتة الجرد", + "أتمتة التخصيص", + "أتمتة النقل", + "أتمتة التقارير", + "أتمتة التحليلات", + "أتمتة التنبيهات", + "أتمتة الإشعارات", + "أتمتة العقود", + "أتمتة الضمان", + "إدارة التحليلات", + "تحليل الاتجاهات", + "تحليل الأداء", + "تحليل الاستخدام", + "تحليل التكاليف", + "تحليل الكفاءة", + "تحليل العمر الافتراضي", + "تحليل الاستهلاك", + "تحليل الأعطال", + "تحليل التوقفات", + "تحليل الاستثمارات", + "تحليل العوائد", + "تحليل المخاطر", + "تحليل الصيانة", + "تحليل الاستبدال", + "ذكاء الأصول", + "ذكاء الصيانة", + "ذكاء الاستثمار", + "ذكاء التشغيل", + "رؤى الأصول", + "رؤى الأداء", + "رؤى الكفاءة", + "رؤى الصيانة", + "رؤى الاستثمار", + "لوحة الأصول", + "لوحة الأداء", + "لوحة الصيانة", + "لوحة الإهلاك", + "لوحة التكاليف", + "لوحة الجرد", + "لوحة الاستثمار", + "لوحة التحليلات", + "إدارة التحسين المستمر", + "تحسين استغلال الأصول", + "تحسين كفاءة الأصول", + "تحسين الصيانة", + "تحسين التكاليف", + "تحسين الجرد", + "تحسين التخصيص", + "تحسين إدارة العقود", + "تحسين إدارة الضمان", + "تحسين إدارة المخاطر", + "تحسين إدارة الصيانة", + "تحسين إدارة الاستثمار", + "تحسين إدارة التشغيل", + "تحسين دورة حياة الأصل", + "تحسين العائد على الأصول", + "تحسين إنتاجية الأصول", + "تحسين استخدام الأصول", + "تحسين إدارة الوثائق", + "تحسين الأتمتة", + "إدارة الأصول الذكية", + "الأصول المتصلة", + "إنترنت الأشياء للأصول", + "الذكاء الاصطناعي للأصول", + "الصيانة التنبؤية", + "تحليل الأعطال التنبئي", + "تحليل العمر المتبقي", + "التنبؤ بالصيانة", + "التنبؤ بالأعطال", + "التنبؤ بالاستبدال", + "تحليل البيانات اللحظية", + "تحليل البيانات التاريخية", + "تحليل البيانات التنبؤية", + "إدارة البيانات", + "جودة بيانات الأصول", + "تكامل بيانات الأصول", + "تقارير البيانات", + "إدارة الوصول", + "صلاحيات الأصول", + "صلاحيات الصيانة", + "صلاحيات الجرد", + "صلاحيات العقود", + "صلاحيات التقارير", + "سجل النشاط", + "سجل العمليات", + "تقارير النشاط", + "إدارة المشاريع المرتبطة بالأصول", + "الأصول المرتبطة بالمشاريع", + "تخصيص الأصول للمشاريع", + "تكلفة الأصول للمشاريع", + "تحليل أصول المشاريع", + "تقارير أصول المشاريع", + "إدارة الموارد", + "تخطيط الموارد", + "استغلال الموارد", + "تحليل الموارد", + "تقارير الموارد", + "إدارة الطاقة", + "استهلاك الطاقة", + "تحليل استهلاك الطاقة", + "تقارير الطاقة", + "إدارة الاستدامة", + "الاستدامة التشغيلية", + "إعادة التدوير", + "التخلص البيئي", + "تقارير الاستدامة", + "إدارة الجودة", + "جودة الأصول", + "اختبارات الجودة", + "فحص الجودة", + "تقارير الجودة", + "تحليل الجودة", + "إدارة الخدمات", + "خدمات الأصول", + "طلبات الخدمة", + "تقارير الخدمة", + "تحليل الخدمة", + "إدارة الدعم", + "دعم الأصول", + "تذاكر الدعم", + "حل المشكلات", + "تحليل الدعم", + "تقارير الدعم", + "إدارة الحوادث", + "حوادث الأصول", + "تقارير الحوادث", + "تحليل الحوادث", + "إدارة الطوارئ", + "خطط الطوارئ", + "استمرارية الأعمال", + "تحليل الطوارئ", + "تقارير الطوارئ", + "إدارة الابتكار", + "الأصول الذكية", + "التحول الرقمي للأصول", + "الروبوتات التشغيلية", + "تحليل الابتكار", + "تقارير الابتكار", + "طلب مواد", + "إنشاء طلب مواد", + "تعديل طلب مواد", + "إلغاء طلب مواد", + "اعتماد طلب مواد", + "طلبات المواد المفتوحة", + "طلبات المواد المغلقة", + "طلبات المواد المعلقة", + "طلبات المواد المتأخرة", + "طلبات المواد العاجلة", + "طلبات المواد الداخلية", + "طلبات المواد الخارجية", + "طلبات المواد للإنتاج", + "طلبات المواد للمشاريع", + "طلبات المواد للمخزون", + "طلبات المواد للصيانة", + "طلبات المواد للمبيعات", + "طلبات المواد للأقسام", + "تخطيط طلب المواد", + "تحليل طلب المواد", + "تقارير طلب المواد", + "رقم طلب المواد", + "حالة طلب المواد", + "أولوية طلب المواد", + "تاريخ طلب المواد", + "الكمية المطلوبة", + "الكمية المعتمدة", + "الكمية المستلمة", + "الكمية المتبقية", + "تحويل طلب المواد", + "تحويل طلب المواد إلى شراء", + "تحويل طلب المواد إلى تحويل مخزون", + "تحويل طلب المواد إلى إنتاج", + "إغلاق طلب المواد", + "إعادة فتح طلب المواد", + "متابعة طلب المواد", + "مراجعة طلب المواد", + "تحليل استهلاك المواد", + "تخطيط احتياجات المواد", + "احتياجات المواد الخام", + "احتياجات التشغيل", + "احتياجات المشاريع", + "احتياجات الأقسام", + "احتياجات المستودعات", + "احتياجات الصيانة", + "طلب إعادة التوريد", + "طلب إعادة التخزين", + "إعادة طلب المواد", + "نقطة إعادة الطلب", + "حد إعادة الطلب", + "المواد منخفضة المخزون", + "المواد الحرجة", + "المواد عالية الطلب", + "المواد الموسمية", + "المواد البطيئة الحركة", + "المواد السريعة الحركة", + "إدارة الموافقات", + "اعتماد مدير القسم", + "اعتماد المشتريات", + "اعتماد الإدارة المالية", + "اعتماد المخزون", + "سير الموافقات", + "طلبات قيد الموافقة", + "طلبات مرفوضة", + "طلبات معتمدة", + "تحليل الموافقات", + "تقارير الموافقات", + "إدارة الموردين لطلبات المواد", + "المورد المفضل", + "مقارنة الموردين", + "تحليل الموردين", + "المواد حسب المورد", + "أسعار الموردين", + "توفر الموردين", + "تحليل التوريد", + "تقارير الموردين", + "إدارة الشراء", + "طلب شراء", + "أمر شراء", + "استلام المواد", + "تحويل إلى فاتورة شراء", + "متابعة الشراء", + "تحليل الشراء", + "تقارير الشراء", + "إدارة المستودعات", + "المستودع المطلوب", + "المستودع المصدر", + "المستودع الهدف", + "تحويل بين المستودعات", + "نقل المواد", + "حجز المواد", + "تخصيص المواد", + "تتبع المواد", + "تحليل المخزون", + "تقارير المخزون", + "إدارة الأصناف", + "الأصناف المطلوبة", + "الأصناف الناقصة", + "الأصناف المتوفرة", + "الأصناف البديلة", + "الأصناف المركبة", + "الأصناف التسلسلية", + "الأصناف بالدفعات", + "تحليل الأصناف", + "تقارير الأصناف", + "إدارة الجداول", + "جدولة الطلبات", + "جدولة التوريد", + "جدولة الاستلام", + "جدولة الإنتاج", + "جدولة التحويلات", + "تحليل الجداول", + "تقارير الجداول", + "إدارة التكاليف", + "تكلفة المواد", + "تكلفة الطلب", + "تكلفة التوريد", + "تكلفة النقل", + "تكلفة الشحن", + "تحليل التكاليف", + "تقارير التكاليف", + "إدارة المشاريع", + "طلبات مواد المشاريع", + "المواد حسب المشروع", + "تكلفة مواد المشروع", + "تحليل مواد المشاريع", + "تقارير مواد المشاريع", + "إدارة الصيانة", + "مواد الصيانة", + "طلبات صيانة المواد", + "تحليل مواد الصيانة", + "تقارير مواد الصيانة", + "إدارة الإنتاج", + "مواد الإنتاج", + "صرف المواد للإنتاج", + "احتياجات الإنتاج", + "تخطيط مواد الإنتاج", + "تحليل مواد الإنتاج", + "تقارير مواد الإنتاج", + "إدارة التنبيهات", + "تنبيهات النقص", + "تنبيهات التأخير", + "تنبيهات الموافقة", + "تنبيهات التوريد", + "تنبيهات الاستلام", + "تنبيهات المخزون", + "إدارة الإشعارات", + "إدارة الأتمتة", + "أتمتة طلب المواد", + "أتمتة الموافقات", + "أتمتة إعادة الطلب", + "أتمتة التوريد", + "أتمتة التقارير", + "أتمتة التنبيهات", + "إدارة التحليلات", + "تحليل الطلبات", + "تحليل الاستهلاك", + "تحليل التكاليف", + "تحليل التوريد", + "تحليل المخزون", + "تحليل الأداء", + "ذكاء طلبات المواد", + "رؤى الطلبات", + "لوحة طلبات المواد", + "لوحة التوريد", + "لوحة المخزون", + "تحسين طلبات المواد", + "تحسين التوريد", + "تحسين إدارة المواد", + "تحسين استهلاك المواد", + "تحسين التخطيط", + "تحسين التكاليف", + "فاتورة شراء", + "إنشاء فاتورة شراء", + "تعديل فاتورة شراء", + "إلغاء فاتورة شراء", + "اعتماد فاتورة شراء", + "فواتير الشراء المفتوحة", + "فواتير الشراء المدفوعة", + "فواتير الشراء غير المدفوعة", + "فواتير الشراء المتأخرة", + "فواتير الشراء الجزئية", + "فواتير الشراء الضريبية", + "الفواتير الإلكترونية للمشتريات", + "رقم فاتورة الشراء", + "تاريخ فاتورة الشراء", + "استحقاق فاتورة الشراء", + "قيمة فاتورة الشراء", + "إجمالي الفاتورة", + "صافي الفاتورة", + "خصومات الفاتورة", + "ضرائب الفاتورة", + "ضريبة القيمة المضافة", + "تكاليف إضافية", + "مصاريف الشحن", + "رسوم الجمارك", + "رسوم النقل", + "رسوم المناولة", + "تكلفة الاستيراد", + "تكلفة التوريد", + "تفاصيل الفاتورة", + "بنود الفاتورة", + "الأصناف المفوترة", + "الكميات المفوترة", + "الأسعار المفوترة", + "الدفعات المفوترة", + "تتبع الفاتورة", + "متابعة الفاتورة", + "مراجعة الفاتورة", + "مطابقة الفاتورة", + "مطابقة أمر الشراء", + "مطابقة الاستلام", + "مطابقة المورد", + "تسوية الفاتورة", + "إغلاق الفاتورة", + "إعادة فتح الفاتورة", + "إدارة الموردين", + "فواتير الموردين", + "حسابات الموردين", + "رصيد المورد", + "كشف حساب المورد", + "دفعات المورد", + "الدفعات المستحقة", + "الدفعات المجدولة", + "تحليل الموردين", + "تقارير الموردين", + "إدارة المدفوعات", + "سداد الفواتير", + "دفعات نقدية", + "دفعات بنكية", + "تحويلات بنكية", + "شيكات الموردين", + "دفعات إلكترونية", + "دفعات جزئية", + "دفعات كاملة", + "دفعات مؤجلة", + "تسوية المدفوعات", + "تحليل المدفوعات", + "تقارير المدفوعات", + "إدارة الضرائب", + "احتساب الضريبة", + "ضرائب المشتريات", + "الإقرار الضريبي", + "الفواتير الضريبية", + "تحليل الضرائب", + "تقارير الضرائب", + "إدارة المصروفات", + "مصروفات المشتريات", + "مصروفات الشحن", + "مصروفات النقل", + "مصروفات التخليص", + "مصروفات إضافية", + "تحليل المصروفات", + "تقارير المصروفات", + "إدارة الاستيراد", + "فواتير الاستيراد", + "تكاليف الاستيراد", + "الجمارك", + "التخليص الجمركي", + "تحليل الاستيراد", + "تقارير الاستيراد", + "إدارة المخزون المرتبط بالفواتير", + "استلام الأصناف", + "تحديث المخزون", + "إضافة للمخزون", + "تخصيص الأصناف", + "تتبع الأصناف", + "تحليل المخزون", + "تقارير المخزون", + "إدارة الحسابات", + "قيود فواتير الشراء", + "الحسابات الدائنة", + "دفتر الأستاذ", + "القيود المحاسبية", + "تحليل الحسابات", + "تقارير الحسابات", + "إدارة التكلفة", + "تكلفة الشراء", + "تكلفة المورد", + "تكلفة الصنف", + "تكلفة النقل", + "تكلفة التخزين", + "تحليل التكلفة", + "تقارير التكلفة", + "إدارة الموافقات المالية", + "اعتماد المحاسب", + "اعتماد المدير المالي", + "اعتماد الإدارة", + "سير الموافقات المالية", + "تحليل الموافقات", + "تقارير الموافقات", + "إدارة الوثائق", + "مرفقات الفاتورة", + "فواتير PDF", + "وثائق المورد", + "أرشفة الفواتير", + "استرجاع الفواتير", + "تقارير الوثائق", + "إدارة التنبيهات", + "تنبيهات الفواتير", + "تنبيهات الاستحقاق", + "تنبيهات السداد", + "تنبيهات الضرائب", + "تنبيهات الموردين", + "إدارة الإشعارات", + "إدارة الأتمتة", + "أتمتة فواتير الشراء", + "أتمتة المطابقة", + "أتمتة السداد", + "أتمتة القيود", + "أتمتة الضرائب", + "أتمتة التقارير", + "أتمتة التنبيهات", + "أتمتة الإشعارات", + "إدارة التحليلات", + "تحليل فواتير الشراء", + "تحليل المصروفات", + "تحليل الموردين", + "تحليل المدفوعات", + "تحليل الضرائب", + "تحليل التكاليف", + "تحليل الأداء المالي", + "ذكاء فواتير الشراء", + "رؤى المشتريات", + "رؤى الموردين", + "لوحة فواتير الشراء", + "لوحة المدفوعات", + "لوحة الموردين", + "لوحة المصروفات", + "تحسين فواتير الشراء", + "تحسين المدفوعات", + "تحسين إدارة الموردين", + "تحسين إدارة المصروفات", + "تحسين إدارة الضرائب", + "تحسين العمليات المالية", + "تحسين المطابقة المحاسبية", + "تحسين دورة الشراء", + "تحسين إدارة الفواتير", + "فواتير شراء متكررة", + "فواتير شراء مؤجلة", + "فواتير شراء مستقبلية", + "فواتير شراء معلقة", + "فواتير شراء مرفوضة", + "فواتير شراء معتمدة", + "فواتير شراء جزئية", + "فواتير شراء نهائية", + "تحليل أعمار الفواتير", + "تحليل تأخير السداد", + "تحليل أداء المورد", + "تحليل دقة الفواتير", + "تحليل الانحرافات", + "تقارير أعمار الديون", + "تقارير تأخير السداد", + "تقارير الأداء المالي", + "تقارير الموردين المالية", + "تقارير المطابقة", + "تقارير الفواتير الضريبية", + "تقارير المصروفات التشغيلية", + "تقارير فواتير الاستيراد", + "تقارير الالتزامات", + "تقارير الحسابات الدائنة", + "تقارير التدفقات النقدية", + "تقارير القيود المحاسبية", + "إدارة الالتزامات المالية", + "الالتزامات قصيرة الأجل", + "الالتزامات طويلة الأجل", + "تحليل الالتزامات", + "تقارير الالتزامات", + "إدارة التدقيق", + "التدقيق على الفواتير", + "التدقيق المالي", + "التدقيق الضريبي", + "المراجعة الداخلية", + "المراجعة الخارجية", + "تقارير التدقيق", + "إدارة الامتثال", + "الامتثال الضريبي", + "الامتثال المالي", + "سياسات الشراء", + "سياسات الفوترة", + "تقارير الامتثال", + "إدارة دورة الشراء", + "طلب شراء إلى فاتورة", + "دورة المشتريات", + "تتبع دورة الشراء", + "تحليل دورة الشراء", + "تقارير دورة الشراء", + "إدارة الكفاءة التشغيلية", + "كفاءة المشتريات", + "كفاءة الفواتير", + "سرعة المعالجة", + "دقة المطابقة", + "تحليل الكفاءة", + "تقارير الكفاءة", + "إدارة البيانات", + "بيانات الموردين", + "بيانات الفواتير", + "تكامل البيانات", + "تحليل البيانات", + "تقارير البيانات", + "إدارة الوصول", + "صلاحيات الفواتير", + "صلاحيات الموردين", + "صلاحيات المدفوعات", + "صلاحيات الموافقات", + "سجل النشاط", + "سجل العمليات", + "تقارير النشاط", + "إيصال شراء", + "إنشاء إيصال شراء", + "تعديل إيصال شراء", + "إلغاء إيصال شراء", + "اعتماد إيصال شراء", + "إيصالات الشراء المفتوحة", + "إيصالات الشراء المغلقة", + "إيصالات الشراء المعلقة", + "إيصالات الشراء المتأخرة", + "إيصالات الشراء الجزئية", + "إيصالات الشراء الكاملة", + "رقم إيصال الشراء", + "تاريخ إيصال الشراء", + "حالة إيصال الشراء", + "استلام المشتريات", + "استلام الأصناف", + "استلام المواد", + "استلام البضائع", + "استلام المورد", + "الاستلام الجزئي", + "الاستلام الكامل", + "رفض الاستلام", + "استلام مع فحص", + "استلام بدون فحص", + "تأكيد الاستلام", + "متابعة الاستلام", + "تتبع الاستلام", + "مراجعة الاستلام", + "إغلاق إيصال الشراء", + "إعادة فتح إيصال الشراء", + "إدارة الاستلام", + "جدولة الاستلام", + "تخطيط الاستلام", + "تنسيق الاستلام", + "أولوية الاستلام", + "طلبات الاستلام", + "إشعار الاستلام", + "إشعار استلام البضائع", + "تحويل أمر شراء إلى إيصال", + "تحويل إيصال إلى فاتورة", + "مطابقة إيصال الشراء", + "مطابقة أمر الشراء", + "مطابقة الفاتورة", + "مطابقة المورد", + "مطابقة الكميات", + "مطابقة الأسعار", + "مطابقة الأصناف", + "تحليل المطابقة", + "تقارير المطابقة", + "إدارة الموردين", + "المورد الرئيسي", + "المورد المعتمد", + "المورد المفضل", + "تقييم المورد", + "أداء المورد", + "تحليل المورد", + "تقارير الموردين", + "فواتير المورد", + "طلبات المورد", + "رصيد المورد", + "كشف حساب المورد", + "إدارة الأصناف", + "الأصناف المستلمة", + "الأصناف المرفوضة", + "الأصناف المرتجعة", + "الأصناف الناقصة", + "الأصناف الزائدة", + "الأصناف التالفة", + "الأصناف المقبولة", + "الأصناف قيد الفحص", + "الأصناف المتأخرة", + "تحليل الأصناف", + "تقارير الأصناف", + "إدارة المستودعات", + "المستودع المستلم", + "المستودع الرئيسي", + "المستودع الفرعي", + "إضافة للمخزون", + "تحديث المخزون", + "تحويل للمستودع", + "تخصيص المستودع", + "تتبع المستودعات", + "تحليل المستودعات", + "تقارير المستودعات", + "إدارة المخزون", + "رصيد المخزون", + "حركة المخزون", + "تحديث الكميات", + "استلام للمخزون", + "المخزون المتوفر", + "المخزون المحجوز", + "المخزون التالف", + "تحليل المخزون", + "تقارير المخزون", + "إدارة الجودة", + "فحص الجودة", + "اختبار الجودة", + "رفض الجودة", + "قبول الجودة", + "تقارير الجودة", + "تحليل الجودة", + "فحص الاستلام", + "نتائج الفحص", + "فحص الأصناف", + "فحص المواد", + "الجودة التشغيلية", + "إدارة الدفعات", + "الأرقام التسلسلية", + "تتبع الدفعات", + "تتبع الرقم التسلسلي", + "إدارة الباركود", + "مسح الباركود", + "طباعة الباركود", + "إدارة RFID", + "إدارة QR", + "إدارة التكاليف", + "تكلفة الشراء", + "تكلفة الاستلام", + "تكلفة النقل", + "تكلفة الشحن", + "تكلفة التخزين", + "تكلفة المناولة", + "تكلفة الجمارك", + "تكلفة الاستيراد", + "تكلفة المورد", + "تحليل التكاليف", + "تقارير التكاليف", + "إدارة الشحن", + "الشحنات الواردة", + "تتبع الشحنات", + "رقم الشحنة", + "رقم التتبع", + "شركة الشحن", + "تاريخ الوصول", + "تأخير الشحن", + "حالة الشحنة", + "تكلفة الشحن", + "تحليل الشحن", + "تقارير الشحن", + "إدارة النقل", + "النقل الداخلي", + "النقل الخارجي", + "تفريغ الشحنات", + "جدولة النقل", + "متابعة النقل", + "تحليل النقل", + "تقارير النقل", + "إدارة الجمارك", + "التخليص الجمركي", + "رسوم الجمارك", + "الضرائب الجمركية", + "وثائق الاستيراد", + "وثائق الشحن", + "تحليل الجمارك", + "تقارير الجمارك", + "إدارة المرتجعات", + "مرتجعات الشراء", + "إرجاع المورد", + "إرجاع الأصناف", + "الأصناف المرتجعة", + "سبب الإرجاع", + "تحليل المرتجعات", + "تقارير المرتجعات", + "إدارة الفواتير", + "فاتورة المورد", + "تحويل إلى فاتورة شراء", + "مطابقة الفواتير", + "فواتير المشتريات", + "الفواتير المستحقة", + "تحليل الفواتير", + "تقارير الفواتير", + "إدارة الحسابات", + "القيود المحاسبية", + "قيود الاستلام", + "الحسابات الدائنة", + "دفتر الأستاذ", + "تسوية الحسابات", + "تحليل الحسابات", + "تقارير الحسابات", + "إدارة المدفوعات", + "دفعات الموردين", + "الدفعات المستحقة", + "الدفعات الجزئية", + "دفعات التحويل البنكي", + "دفعات الشيكات", + "دفعات إلكترونية", + "تحليل المدفوعات", + "تقارير المدفوعات", + "إدارة الضرائب", + "ضريبة القيمة المضافة", + "ضرائب المشتريات", + "الضرائب الجمركية", + "الفواتير الضريبية", + "تحليل الضرائب", + "تقارير الضرائب", + "إدارة الموافقات", + "اعتماد الاستلام", + "اعتماد الجودة", + "اعتماد المخزون", + "اعتماد الحسابات", + "اعتماد الإدارة", + "سير الموافقات", + "طلبات قيد الموافقة", + "طلبات مرفوضة", + "طلبات معتمدة", + "تحليل الموافقات", + "تقارير الموافقات", + "إدارة الوثائق", + "مرفقات إيصال الشراء", + "صور الاستلام", + "وثائق المورد", + "وثائق الشحن", + "وثائق الجودة", + "أرشفة المستندات", + "استرجاع الوثائق", + "تقارير الوثائق", + "إدارة الوقت", + "وقت الاستلام", + "وقت التفريغ", + "وقت الفحص", + "وقت المعالجة", + "تحليل الوقت", + "تقارير الوقت", + "إدارة الأداء", + "أداء الاستلام", + "كفاءة الاستلام", + "سرعة الاستلام", + "دقة الاستلام", + "أداء الموردين", + "تحليل الأداء", + "تقارير الأداء", + "إدارة العمليات", + "عمليات الاستلام", + "عمليات التفريغ", + "عمليات الفحص", + "عمليات التخزين", + "عمليات التخصيص", + "تحليل العمليات", + "تقارير العمليات", + "إدارة التنبيهات", + "تنبيهات الاستلام", + "تنبيهات التأخير", + "تنبيهات الجودة", + "تنبيهات الشحن", + "تنبيهات النقص", + "تنبيهات الأصناف التالفة", + "تنبيهات المطابقة", + "تنبيهات الموردين", + "إدارة الإشعارات", + "إدارة الأتمتة", + "أتمتة إيصالات الشراء", + "أتمتة الاستلام", + "أتمتة الفحص", + "أتمتة المطابقة", + "أتمتة تحديث المخزون", + "أتمتة القيود المحاسبية", + "أتمتة التقارير", + "أتمتة التنبيهات", + "أتمتة الإشعارات", + "أتمتة الموافقات", + "إدارة التحليلات", + "تحليل إيصالات الشراء", + "تحليل الموردين", + "تحليل الاستلام", + "تحليل الجودة", + "تحليل التكاليف", + "تحليل الوقت", + "تحليل المخزون", + "تحليل العمليات", + "تحليل الأداء", + "تحليل الكفاءة", + "ذكاء إيصالات الشراء", + "ذكاء المشتريات", + "رؤى الموردين", + "رؤى الاستلام", + "رؤى الجودة", + "رؤى المخزون", + "رؤى التكاليف", + "لوحة إيصالات الشراء", + "لوحة الاستلام", + "لوحة الموردين", + "لوحة الجودة", + "لوحة المخزون", + "لوحة العمليات", + "لوحة الأداء", + "تحسين إيصالات الشراء", + "تحسين عمليات الاستلام", + "تحسين جودة الاستلام", + "تحسين إدارة الموردين", + "تحسين تحديث المخزون", + "تحسين مطابقة الفواتير", + "تحسين إدارة التكاليف", + "تحسين الكفاءة التشغيلية", + "تحسين دقة الاستلام", + "تحسين سرعة المعالجة", + "إدارة الاستيراد", + "إيصالات الاستيراد", + "استلام الشحنات الدولية", + "تكاليف الاستيراد", + "فحص الشحنات الدولية", + "التخليص الجمركي", + "تحليل الاستيراد", + "تقارير الاستيراد", + "إدارة السعات التخزينية", + "تخصيص مواقع التخزين", + "إدارة الأرفف", + "تنظيم المستودعات", + "استغلال المساحات", + "تحليل السعات", + "تقارير السعات", + "إدارة سلامة المستودعات", + "سلامة التفريغ", + "سلامة الاستلام", + "الحوادث التشغيلية", + "تقارير السلامة", + "تحليل السلامة", + "إدارة الامتثال", + "الامتثال للمشتريات", + "الامتثال الجمركي", + "التدقيق على الاستلام", + "التدقيق المالي", + "تقارير الامتثال", + "إدارة البيانات", + "بيانات الموردين", + "بيانات الاستلام", + "تكامل البيانات", + "تحليل البيانات", + "تقارير البيانات", + "إدارة الوصول", + "صلاحيات الاستلام", + "صلاحيات المخزون", + "صلاحيات الفحص", + "صلاحيات الحسابات", + "سجل النشاط", + "سجل العمليات", + "تقارير النشاط", + "إدارة الطلبات العاجلة", + "الاستلام العاجل", + "الأصناف الحرجة", + "الأولوية التشغيلية", + "تحليل الطلبات العاجلة", + "تقارير الطوارئ", + "إدارة الموارد", + "عمال المستودعات", + "توزيع المهام", + "جدولة العمالة", + "إنتاجية العمالة", + "تحليل الموارد", + "تقارير الموارد", + "إدارة الحاويات", + "تفريغ الحاويات", + "تتبع الحاويات", + "أرقام الحاويات", + "تكلفة الحاويات", + "تحليل الحاويات", + "تقارير الحاويات", + "إدارة الاستدامة", + "تقليل الهدر", + "إعادة التدوير", + "تحسين استهلاك الموارد", + "تقارير الاستدامة", + "إدارة الابتكار", + "المستودعات الذكية", + "الذكاء الاصطناعي للاستلام", + "أتمتة التفريغ", + "تحليل الابتكار", + "تقارير الابتكار", + "إدارة دورة الاستلام", + "من أمر الشراء إلى الاستلام", + "دورة المشتريات", + "متابعة دورة الاستلام", + "تحليل دورة المشتريات", + "تقارير دورة المشتريات", + "إدارة الأداء التشغيلي", + "مؤشرات الأداء التشغيلية", + "معدل دقة الاستلام", + "معدل سرعة الاستلام", + "معدل الأخطاء", + "تحليل مؤشرات الأداء", + "تقارير مؤشرات الأداء", + "إدارة التوريد", + "توريد المواد", + "توريد الأصناف", + "توريد المستودعات", + "متابعة التوريد", + "تحليل التوريد", + "تقارير التوريد", + "إدارة التدفقات", + "تدفق المواد", + "تدفق المستودعات", + "تدفق العمليات", + "تحليل التدفقات", + "تقارير التدفقات", + "إدارة الجودة الشاملة", + "معايير الجودة", + "اختبارات القبول", + "اختبارات الرفض", + "تحليل الجودة الشاملة", + "تقارير الجودة الشاملة", + "إدارة الفحص النهائي", + "الفحص أثناء الاستلام", + "نتائج الفحص النهائي", + "تحليل الفحص", + "تقارير الفحص", + "إدارة الانحرافات", + "انحرافات الكميات", + "انحرافات الأسعار", + "انحرافات الجودة", + "تحليل الانحرافات", + "تقارير الانحرافات", + "إدارة الإجراءات التصحيحية", + "الإجراءات الوقائية", + "حل مشكلات الاستلام", + "متابعة الإجراءات", + "تحليل الإجراءات", + "تقارير الإجراءات", + "إدارة التعاون", + "التنسيق مع المورد", + "التنسيق مع المستودعات", + "التنسيق مع الحسابات", + "التنسيق مع الجودة", + "تحليل التعاون", + "تقارير التعاون", + "إدارة المعرفة", + "توثيق عمليات الاستلام", + "توثيق الفحص", + "مشاركة المعرفة", + "إدارة الخبرات", + "تقارير المعرفة", + "إدارة المشتريات", + "عمليات الشراء", + "طلبات الشراء", + "أوامر الشراء", + "فواتير الشراء", + "إيصالات الشراء", + "موافقات الشراء", + "تخطيط المشتريات", + "تحليل المشتريات", + "تقارير المشتريات", + "شراء المواد", + "شراء الأصناف", + "شراء الخدمات", + "شراء المعدات", + "شراء الأصول", + "شراء المستلزمات", + "شراء قطع الغيار", + "شراء المواد الخام", + "شراء المنتجات", + "شراء المشاريع", + "شراء الطوارئ", + "شراء التشغيل", + "شراء الصيانة", + "شراء المخزون", + "شراء التوريد", + "شراء الاستيراد", + "شراء التصدير", + "شراء العقود", + "شراء الموردين", + "إدارة الموردين", + "المورد الرئيسي", + "المورد المعتمد", + "المورد المفضل", + "المورد النشط", + "المورد غير النشط", + "تقييم الموردين", + "تصنيف الموردين", + "تحليل الموردين", + "أداء الموردين", + "اعتماد الموردين", + "إلغاء اعتماد المورد", + "إدارة عقود الموردين", + "تجديد عقود الموردين", + "مراجعة الموردين", + "قائمة الموردين", + "الموردون المحليون", + "الموردون الدوليون", + "الموردون الاستراتيجيون", + "الموردون الثانويون", + "الموردون البدلاء", + "تحليل أسعار الموردين", + "تحليل جودة الموردين", + "تحليل زمن التوريد", + "تحليل التوريد", + "تقارير الموردين", + "إدارة طلبات الشراء", + "إنشاء طلب شراء", + "تعديل طلب شراء", + "إلغاء طلب شراء", + "اعتماد طلب شراء", + "طلبات شراء مفتوحة", + "طلبات شراء مغلقة", + "طلبات شراء معلقة", + "طلبات شراء متأخرة", + "طلبات شراء عاجلة", + "طلبات شراء جزئية", + "طلبات شراء كاملة", + "طلبات شراء متكررة", + "طلبات شراء دورية", + "طلبات شراء المشاريع", + "طلبات شراء المخزون", + "طلبات شراء الصيانة", + "طلبات شراء الإنتاج", + "طلبات شراء الأقسام", + "طلبات شراء الطوارئ", + "رقم طلب الشراء", + "تاريخ طلب الشراء", + "أولوية طلب الشراء", + "حالة طلب الشراء", + "تحويل طلب شراء إلى أمر شراء", + "إغلاق طلب الشراء", + "إعادة فتح طلب الشراء", + "متابعة طلب الشراء", + "مراجعة طلب الشراء", + "تحليل طلبات الشراء", + "تقارير طلبات الشراء", + "إدارة أوامر الشراء", + "إنشاء أمر شراء", + "تعديل أمر شراء", + "إلغاء أمر شراء", + "اعتماد أمر شراء", + "أوامر شراء مفتوحة", + "أوامر شراء مغلقة", + "أوامر شراء معلقة", + "أوامر شراء متأخرة", + "أوامر شراء جزئية", + "أوامر شراء كاملة", + "أوامر شراء عاجلة", + "أوامر شراء متكررة", + "أوامر شراء الاستيراد", + "أوامر شراء المشاريع", + "أوامر شراء الإنتاج", + "أوامر شراء المخزون", + "رقم أمر الشراء", + "تاريخ أمر الشراء", + "حالة أمر الشراء", + "شروط الشراء", + "شروط الدفع", + "شروط التوريد", + "تفاصيل أمر الشراء", + "بنود أمر الشراء", + "تحويل أمر الشراء إلى إيصال", + "تحويل أمر الشراء إلى فاتورة", + "إغلاق أمر الشراء", + "إعادة فتح أمر الشراء", + "متابعة أوامر الشراء", + "تحليل أوامر الشراء", + "تقارير أوامر الشراء", + "إدارة عروض الأسعار", + "طلب عرض سعر", + "مقارنة عروض الأسعار", + "اعتماد عرض السعر", + "رفض عرض السعر", + "العروض المعتمدة", + "العروض المرفوضة", + "العروض المعلقة", + "العروض المفتوحة", + "العروض المغلقة", + "تحليل عروض الأسعار", + "تقارير عروض الأسعار", + "إدارة التفاوض", + "التفاوض مع الموردين", + "تحليل التفاوض", + "نتائج التفاوض", + "استراتيجية التفاوض", + "تقارير التفاوض", + "إدارة التوريد", + "توريد المواد", + "توريد الأصناف", + "توريد الخدمات", + "توريد المعدات", + "توريد المشاريع", + "توريد المستودعات", + "توريد الإنتاج", + "توريد الطوارئ", + "جدولة التوريد", + "متابعة التوريد", + "تحليل التوريد", + "تقارير التوريد", + "إدارة الاستلام", + "استلام المشتريات", + "استلام المورد", + "استلام الأصناف", + "استلام المواد", + "استلام الشحنات", + "الاستلام الجزئي", + "الاستلام الكامل", + "فحص الاستلام", + "مطابقة الاستلام", + "تحليل الاستلام", + "تقارير الاستلام", + "إدارة الفواتير", + "فاتورة شراء", + "فواتير الموردين", + "الفواتير المفتوحة", + "الفواتير المدفوعة", + "الفواتير غير المدفوعة", + "الفواتير المتأخرة", + "الفواتير الضريبية", + "الفواتير الإلكترونية", + "مطابقة الفواتير", + "تحليل الفواتير", + "تقارير الفواتير", + "إدارة المدفوعات", + "دفعات الموردين", + "المدفوعات البنكية", + "المدفوعات النقدية", + "دفعات الشيكات", + "دفعات إلكترونية", + "الدفعات الجزئية", + "الدفعات الكاملة", + "الدفعات المؤجلة", + "تحليل المدفوعات", + "تقارير المدفوعات", + "إدارة العقود", + "عقود الشراء", + "عقود الموردين", + "عقود التوريد", + "عقود الخدمات", + "تجديد العقود", + "انتهاء العقود", + "تحليل العقود", + "تقارير العقود", + "إدارة الميزانية الشرائية", + "ميزانية المشتريات", + "مراقبة الميزانية", + "تحليل الميزانية", + "انحرافات الميزانية", + "تقارير الميزانية", + "إدارة التكاليف", + "تكلفة الشراء", + "تكلفة المورد", + "تكلفة النقل", + "تكلفة الشحن", + "تكلفة التخليص", + "تكلفة التخزين", + "تكلفة الاستيراد", + "تكلفة التشغيل", + "تحليل التكاليف", + "تقارير التكاليف", + "إدارة الضرائب", + "ضرائب المشتريات", + "ضريبة القيمة المضافة", + "الضرائب الجمركية", + "الفواتير الضريبية", + "الإقرار الضريبي", + "تحليل الضرائب", + "تقارير الضرائب", + "إدارة المخزون المرتبط بالمشتريات", + "إضافة للمخزون", + "تحديث المخزون", + "تخصيص الأصناف", + "حجز المخزون", + "تتبع المخزون", + "تحليل المخزون", + "تقارير المخزون", + "إدارة الجودة", + "فحص الجودة", + "اختبار الجودة", + "قبول الجودة", + "رفض الجودة", + "تحليل الجودة", + "تقارير الجودة", + "إدارة الاستيراد", + "عمليات الاستيراد", + "شحنات الاستيراد", + "التخليص الجمركي", + "رسوم الجمارك", + "وثائق الاستيراد", + "تكلفة الاستيراد", + "تحليل الاستيراد", + "تقارير الاستيراد", + "إدارة الشحن", + "الشحنات الواردة", + "شركة الشحن", + "رقم التتبع", + "تتبع الشحنات", + "حالة الشحنة", + "تأخير الشحن", + "تكلفة الشحن", + "تحليل الشحن", + "تقارير الشحن", + "إدارة النقل", + "النقل الداخلي", + "النقل الخارجي", + "تفريغ الشحنات", + "تحميل الشحنات", + "جدولة النقل", + "تحليل النقل", + "تقارير النقل", + "إدارة المستودعات", + "المستودع الرئيسي", + "المستودع الفرعي", + "استلام المستودعات", + "توزيع المستودعات", + "تخصيص المستودعات", + "تحليل المستودعات", + "تقارير المستودعات", + "إدارة الأصناف", + "الأصناف المشتراة", + "الأصناف المطلوبة", + "الأصناف الناقصة", + "الأصناف الزائدة", + "الأصناف البديلة", + "الأصناف الحرجة", + "الأصناف الموسمية", + "تحليل الأصناف", + "تقارير الأصناف", + "إدارة الجداول", + "جدولة المشتريات", + "جدولة التوريد", + "جدولة الشحن", + "جدولة الاستلام", + "جدولة المدفوعات", + "تحليل الجداول", + "تقارير الجداول", + "إدارة الأداء", + "أداء المشتريات", + "كفاءة المشتريات", + "سرعة التوريد", + "دقة التوريد", + "دقة الفواتير", + "أداء الموردين", + "تحليل الأداء", + "تقارير الأداء", + "إدارة العمليات", + "عمليات الشراء", + "عمليات التوريد", + "عمليات الاستلام", + "عمليات الفحص", + "عمليات التخزين", + "عمليات الدفع", + "تحليل العمليات", + "تقارير العمليات", + "إدارة الوقت", + "وقت التوريد", + "وقت الاستلام", + "وقت المعالجة", + "وقت الدفع", + "وقت التخليص", + "تحليل الوقت", + "تقارير الوقت", + "إدارة الموافقات", + "اعتماد طلبات الشراء", + "اعتماد أوامر الشراء", + "اعتماد الفواتير", + "اعتماد المدفوعات", + "اعتماد العقود", + "اعتماد الموردين", + "سير الموافقات", + "طلبات قيد الموافقة", + "طلبات مرفوضة", + "طلبات معتمدة", + "تحليل الموافقات", + "تقارير الموافقات", + "إدارة الوثائق", + "وثائق الشراء", + "عقود الموردين", + "فواتير PDF", + "وثائق الشحن", + "وثائق الاستيراد", + "وثائق الجمارك", + "أرشفة المستندات", + "استرجاع الوثائق", + "تقارير الوثائق", + "إدارة التنبيهات", + "تنبيهات الشراء", + "تنبيهات التوريد", + "تنبيهات التأخير", + "تنبيهات الفواتير", + "تنبيهات المدفوعات", + "تنبيهات العقود", + "تنبيهات المخزون", + "تنبيهات الجودة", + "إدارة الإشعارات", + "إدارة الأتمتة", + "أتمتة المشتريات", + "أتمتة طلبات الشراء", + "أتمتة أوامر الشراء", + "أتمتة الفواتير", + "أتمتة المدفوعات", + "أتمتة الموافقات", + "أتمتة التوريد", + "أتمتة التقارير", + "أتمتة التنبيهات", + "أتمتة الإشعارات", + "أتمتة العقود", + "أتمتة الجمارك", + "أتمتة الاستيراد", + "إدارة التحليلات", + "تحليل المشتريات", + "تحليل الموردين", + "تحليل التكاليف", + "تحليل المدفوعات", + "تحليل الضرائب", + "تحليل الجودة", + "تحليل المخزون", + "تحليل الأداء", + "تحليل الكفاءة", + "تحليل العقود", + "تحليل الميزانية", + "تحليل الانحرافات", + "تحليل الاستيراد", + "تحليل الشحن", + "تحليل العمليات", + "تحليل التدفقات النقدية", + "ذكاء المشتريات", + "ذكاء الموردين", + "رؤى المشتريات", + "رؤى الموردين", + "رؤى التكاليف", + "رؤى الأداء", + "رؤى المخزون", + "رؤى التوريد", + "رؤى الشحن", + "لوحة المشتريات", + "لوحة الموردين", + "لوحة الفواتير", + "لوحة المدفوعات", + "لوحة التكاليف", + "لوحة الأداء", + "لوحة التوريد", + "لوحة المخزون", + "لوحة العقود", + "لوحة التحليلات", + "تحسين المشتريات", + "تحسين التوريد", + "تحسين إدارة الموردين", + "تحسين إدارة العقود", + "تحسين إدارة التكاليف", + "تحسين إدارة الفواتير", + "تحسين إدارة المدفوعات", + "تحسين إدارة المخزون", + "تحسين الكفاءة التشغيلية", + "تحسين دقة التوريد", + "تحسين سرعة الشراء", + "تحسين دورة الشراء", + "تحسين دورة التوريد", + "تحسين الامتثال", + "تحسين المطابقة", + "تحسين إدارة الجداول", + "تحسين إدارة الوقت", + "تحسين إدارة الجودة", + "تحسين إدارة الاستيراد", + "تحسين إدارة الشحن", + "تحسين إدارة المستودعات", + "إدارة المخاطر", + "مخاطر الموردين", + "مخاطر التوريد", + "مخاطر الشحن", + "مخاطر الجودة", + "مخاطر الأسعار", + "تحليل المخاطر", + "تقارير المخاطر", + "إدارة الامتثال", + "الامتثال الشرائي", + "الامتثال المالي", + "الامتثال الضريبي", + "التدقيق الشرائي", + "المراجعة الداخلية", + "المراجعة الخارجية", + "تقارير الامتثال", + "إدارة البيانات", + "بيانات الموردين", + "بيانات الشراء", + "تكامل البيانات", + "تحليل البيانات", + "تقارير البيانات", + "إدارة الوصول", + "صلاحيات المشتريات", + "صلاحيات الموردين", + "صلاحيات الفواتير", + "صلاحيات المدفوعات", + "صلاحيات الموافقات", + "سجل النشاط", + "سجل العمليات", + "تقارير النشاط", + "إدارة الاستدامة", + "المشتريات المستدامة", + "تقليل الهدر", + "تحسين استهلاك الموارد", + "إعادة التدوير", + "تقارير الاستدامة", + "إدارة الابتكار", + "التحول الرقمي للمشتريات", + "الذكاء الاصطناعي للمشتريات", + "أتمتة التفاوض", + "تحليل الابتكار", + "تقارير الابتكار", + "إدارة الخدمات", + "شراء الخدمات", + "عقود الخدمات", + "فواتير الخدمات", + "تحليل الخدمات", + "تقارير الخدمات", + "إدارة المشاريع", + "مشتريات المشاريع", + "تكلفة مشتريات المشاريع", + "توريد المشاريع", + "تحليل مشتريات المشاريع", + "تقارير مشتريات المشاريع", + "إدارة المبيعات", + "عمليات البيع", + "طلبات البيع", + "أوامر البيع", + "فواتير المبيعات", + "إيصالات البيع", + "عروض الأسعار", + "إدارة العملاء", + "إدارة الحسابات", + "تخطيط المبيعات", + "تحليل المبيعات", + "تقارير المبيعات", + "مبيعات التجزئة", + "مبيعات الجملة", + "المبيعات المباشرة", + "المبيعات غير المباشرة", + "المبيعات الرقمية", + "المبيعات الإلكترونية", + "المبيعات الهاتفية", + "المبيعات الميدانية", + "المبيعات الداخلية", + "المبيعات الخارجية", + "المبيعات الموسمية", + "المبيعات المتكررة", + "المبيعات السريعة", + "المبيعات المؤجلة", + "المبيعات النقدية", + "المبيعات الآجلة", + "مبيعات المشاريع", + "مبيعات الخدمات", + "مبيعات الاشتراكات", + "مبيعات العقود", + "مبيعات المنتجات", + "مبيعات الأصناف", + "مبيعات المخزون", + "إدارة العملاء", + "عميل جديد", + "العملاء النشطون", + "العملاء غير النشطين", + "العملاء المحتملون", + "العملاء الرئيسيون", + "العملاء الاستراتيجيون", + "العملاء المتكررون", + "العملاء الجدد", + "العملاء المفقودون", + "العملاء المميزون", + "تصنيف العملاء", + "تحليل العملاء", + "أداء العملاء", + "تقييم العملاء", + "رصيد العميل", + "كشف حساب العميل", + "تقارير العملاء", + "إدارة عروض الأسعار", + "إنشاء عرض سعر", + "تعديل عرض سعر", + "إلغاء عرض سعر", + "اعتماد عرض سعر", + "عروض الأسعار المفتوحة", + "عروض الأسعار المغلقة", + "عروض الأسعار المعلقة", + "عروض الأسعار المقبولة", + "عروض الأسعار المرفوضة", + "عروض الأسعار المنتهية", + "رقم عرض السعر", + "تاريخ عرض السعر", + "قيمة عرض السعر", + "تفاصيل عرض السعر", + "بنود عرض السعر", + "شروط البيع", + "شروط الدفع", + "شروط التسليم", + "خصومات العرض", + "ضرائب العرض", + "تحويل عرض السعر إلى أمر بيع", + "متابعة عروض الأسعار", + "تحليل عروض الأسعار", + "تقارير عروض الأسعار", + "إدارة أوامر البيع", + "إنشاء أمر بيع", + "تعديل أمر بيع", + "إلغاء أمر بيع", + "اعتماد أمر بيع", + "أوامر البيع المفتوحة", + "أوامر البيع المغلقة", + "أوامر البيع المعلقة", + "أوامر البيع المتأخرة", + "أوامر البيع الجزئية", + "أوامر البيع الكاملة", + "أوامر البيع العاجلة", + "أوامر البيع المتكررة", + "أوامر بيع المشاريع", + "أوامر بيع الخدمات", + "أوامر بيع الاشتراكات", + "رقم أمر البيع", + "تاريخ أمر البيع", + "حالة أمر البيع", + "تفاصيل أمر البيع", + "بنود أمر البيع", + "تحويل أمر البيع إلى تسليم", + "تحويل أمر البيع إلى فاتورة", + "إغلاق أمر البيع", + "إعادة فتح أمر البيع", + "متابعة أوامر البيع", + "تحليل أوامر البيع", + "تقارير أوامر البيع", + "إدارة التسليم", + "إشعار التسليم", + "تسليم المنتجات", + "تسليم الخدمات", + "التسليم الجزئي", + "التسليم الكامل", + "تأكيد التسليم", + "متابعة التسليم", + "رقم التتبع", + "شركة الشحن", + "تكلفة الشحن", + "تأخير التسليم", + "تحليل التسليم", + "تقارير التسليم", + "إدارة الفواتير", + "فاتورة مبيعات", + "إنشاء فاتورة مبيعات", + "تعديل فاتورة مبيعات", + "إلغاء فاتورة مبيعات", + "اعتماد فاتورة مبيعات", + "الفواتير المفتوحة", + "الفواتير المدفوعة", + "الفواتير غير المدفوعة", + "الفواتير المتأخرة", + "الفواتير الضريبية", + "الفواتير الإلكترونية", + "الفواتير الجزئية", + "الفواتير الكاملة", + "رقم الفاتورة", + "تاريخ الفاتورة", + "قيمة الفاتورة", + "إجمالي الفاتورة", + "صافي الفاتورة", + "ضرائب الفاتورة", + "خصومات الفاتورة", + "تفاصيل الفاتورة", + "بنود الفاتورة", + "تحليل الفواتير", + "تقارير الفواتير", + "إدارة التحصيلات", + "تحصيل المدفوعات", + "دفعات العملاء", + "الدفعات النقدية", + "الدفعات البنكية", + "دفعات الشيكات", + "دفعات إلكترونية", + "الدفعات الجزئية", + "الدفعات الكاملة", + "الدفعات المؤجلة", + "المدفوعات المستحقة", + "تأخير المدفوعات", + "تحليل التحصيلات", + "تقارير التحصيلات", + "إدارة الأسعار", + "قائمة الأسعار", + "أسعار البيع", + "أسعار التجزئة", + "أسعار الجملة", + "الأسعار الخاصة", + "أسعار العملاء", + "أسعار المشاريع", + "أسعار العقود", + "خصومات العملاء", + "خصومات الكميات", + "خصومات موسمية", + "خصومات ترويجية", + "تحليل الأسعار", + "تقارير الأسعار", + "إدارة الضرائب", + "ضريبة القيمة المضافة", + "ضرائب المبيعات", + "الفواتير الضريبية", + "الإقرار الضريبي", + "تحليل الضرائب", + "تقارير الضرائب", + "إدارة المرتجعات", + "مرتجعات المبيعات", + "إرجاع المنتجات", + "إرجاع الفواتير", + "الأصناف المرتجعة", + "سبب الإرجاع", + "تحليل المرتجعات", + "تقارير المرتجعات", + "إدارة المخزون المرتبط بالمبيعات", + "حجز المخزون", + "تخصيص المخزون", + "تحديث المخزون", + "رصيد المخزون", + "توفر المخزون", + "تحليل المخزون", + "تقارير المخزون", + "إدارة الشحن", + "الشحنات الصادرة", + "جدولة الشحن", + "تتبع الشحنات", + "شركة الشحن", + "تكلفة الشحن", + "تأخير الشحن", + "تحليل الشحن", + "تقارير الشحن", + "إدارة النقل", + "النقل الداخلي", + "النقل الخارجي", + "التوصيل المحلي", + "التوصيل الدولي", + "تحليل النقل", + "تقارير النقل", + "إدارة المندوبين", + "مندوب المبيعات", + "أداء المندوب", + "عمولات المندوب", + "أهداف المبيعات", + "تحقيق الأهداف", + "زيارات العملاء", + "المكالمات البيعية", + "اجتماعات العملاء", + "تحليل المندوبين", + "تقارير المندوبين", + "إدارة المناطق البيعية", + "مناطق المبيعات", + "توزيع العملاء", + "أداء المناطق", + "تحليل المناطق", + "تقارير المناطق", + "إدارة الحملات", + "الحملات البيعية", + "العروض الترويجية", + "الحملات الموسمية", + "حملات الخصومات", + "حملات العملاء", + "تحليل الحملات", + "تقارير الحملات", + "إدارة العقود", + "عقود البيع", + "عقود العملاء", + "عقود الخدمات", + "عقود الاشتراكات", + "تجديد العقود", + "انتهاء العقود", + "تحليل العقود", + "تقارير العقود", + "إدارة الاشتراكات", + "الاشتراكات النشطة", + "الاشتراكات المنتهية", + "تجديد الاشتراكات", + "فواتير الاشتراكات", + "تحليل الاشتراكات", + "تقارير الاشتراكات", + "إدارة المشاريع", + "مبيعات المشاريع", + "تكلفة المشاريع", + "إيرادات المشاريع", + "تحليل المشاريع", + "تقارير المشاريع", + "إدارة الخدمات", + "بيع الخدمات", + "عقود الخدمات", + "فواتير الخدمات", + "تحليل الخدمات", + "تقارير الخدمات", + "إدارة الأداء", + "أداء المبيعات", + "كفاءة المبيعات", + "سرعة البيع", + "دقة الفواتير", + "دقة التسليم", + "أداء العملاء", + "أداء المندوبين", + "تحليل الأداء", + "تقارير الأداء", + "إدارة العمليات", + "عمليات البيع", + "عمليات التسليم", + "عمليات الفوترة", + "عمليات التحصيل", + "عمليات المرتجعات", + "تحليل العمليات", + "تقارير العمليات", + "إدارة الوقت", + "وقت معالجة الطلب", + "وقت التسليم", + "وقت التحصيل", + "وقت الفوترة", + "تحليل الوقت", + "تقارير الوقت", + "إدارة الموافقات", + "اعتماد عروض الأسعار", + "اعتماد أوامر البيع", + "اعتماد الفواتير", + "اعتماد الخصومات", + "اعتماد المرتجعات", + "سير الموافقات", + "طلبات قيد الموافقة", + "طلبات مرفوضة", + "طلبات معتمدة", + "تحليل الموافقات", + "تقارير الموافقات", + "إدارة الوثائق", + "عقود العملاء", + "فواتير PDF", + "مرفقات الطلبات", + "وثائق الشحن", + "أرشفة المستندات", + "استرجاع الوثائق", + "تقارير الوثائق", + "إدارة التنبيهات", + "تنبيهات المبيعات", + "تنبيهات التحصيل", + "تنبيهات التسليم", + "تنبيهات الفواتير", + "تنبيهات التأخير", + "تنبيهات العملاء", + "تنبيهات العقود", + "تنبيهات الاشتراكات", + "إدارة الإشعارات", + "إدارة الأتمتة", + "أتمتة المبيعات", + "أتمتة عروض الأسعار", + "أتمتة أوامر البيع", + "أتمتة الفواتير", + "أتمتة التحصيلات", + "أتمتة التسليم", + "أتمتة الشحن", + "أتمتة الموافقات", + "أتمتة التقارير", + "أتمتة التنبيهات", + "أتمتة الإشعارات", + "أتمتة العقود", + "أتمتة الاشتراكات", + "إدارة التحليلات", + "تحليل المبيعات", + "تحليل العملاء", + "تحليل الأرباح", + "تحليل الإيرادات", + "تحليل التحصيلات", + "تحليل المرتجعات", + "تحليل الخصومات", + "تحليل الأسعار", + "تحليل الأداء", + "تحليل الكفاءة", + "تحليل العقود", + "تحليل الاشتراكات", + "تحليل المناطق", + "تحليل المندوبين", + "تحليل الحملات", + "تحليل المنتجات", + "تحليل الخدمات", + "تحليل المشاريع", + "تحليل الاتجاهات", + "تحليل الانحرافات", + "تحليل التدفقات النقدية", + "ذكاء المبيعات", + "ذكاء العملاء", + "رؤى المبيعات", + "رؤى العملاء", + "رؤى الإيرادات", + "رؤى الأرباح", + "رؤى التحصيلات", + "رؤى الأداء", + "رؤى المنتجات", + "رؤى المناطق", + "لوحة المبيعات", + "لوحة العملاء", + "لوحة الفواتير", + "لوحة التحصيلات", + "لوحة الأرباح", + "لوحة الأداء", + "لوحة المنتجات", + "لوحة المناطق", + "لوحة المندوبين", + "لوحة التحليلات", + "تحسين المبيعات", + "تحسين التحصيلات", + "تحسين إدارة العملاء", + "تحسين إدارة الفواتير", + "تحسين إدارة التسليم", + "تحسين إدارة الشحن", + "تحسين إدارة العقود", + "تحسين إدارة الاشتراكات", + "تحسين الكفاءة التشغيلية", + "تحسين دقة الفواتير", + "تحسين سرعة التحصيل", + "تحسين دورة البيع", + "تحسين تجربة العملاء", + "تحسين الأداء البيعي", + "تحسين إدارة الأسعار", + "تحسين إدارة الخصومات", + "تحسين إدارة الحملات", + "تحسين إدارة المناطق", + "تحسين إدارة المندوبين", + "إدارة المخاطر", + "مخاطر العملاء", + "مخاطر التحصيل", + "مخاطر التسليم", + "مخاطر الشحن", + "مخاطر الأسعار", + "تحليل المخاطر", + "تقارير المخاطر", + "إدارة الامتثال", + "الامتثال البيعي", + "الامتثال الضريبي", + "الامتثال المالي", + "التدقيق البيعي", + "المراجعة الداخلية", + "المراجعة الخارجية", + "تقارير الامتثال", + "إدارة البيانات", + "بيانات العملاء", + "بيانات المبيعات", + "تكامل البيانات", + "تحليل البيانات", + "تقارير البيانات", + "إدارة الوصول", + "صلاحيات المبيعات", + "صلاحيات الفواتير", + "صلاحيات التحصيل", + "صلاحيات الخصومات", + "صلاحيات الموافقات", + "سجل النشاط", + "سجل العمليات", + "تقارير النشاط", + "إدارة الاستدامة", + "المبيعات المستدامة", + "تقليل الهدر", + "تحسين استهلاك الموارد", + "تقارير الاستدامة", + "إدارة الابتكار", + "التحول الرقمي للمبيعات", + "الذكاء الاصطناعي للمبيعات", + "أتمتة التوصيات", + "تحليل الابتكار", + "تقارير الابتكار", + "إدارة التجارة الإلكترونية", + "طلبات المتجر الإلكتروني", + "فواتير التجارة الإلكترونية", + "شحن التجارة الإلكترونية", + "تحليل التجارة الإلكترونية", + "تقارير التجارة الإلكترونية", + "إدارة نقاط البيع", + "فواتير نقاط البيع", + "مبيعات نقاط البيع", + "إغلاق الصندوق", + "تحليل نقاط البيع", + "تقارير نقاط البيع", + "إدارة الولاء", + "برامج الولاء", + "نقاط الولاء", + "مكافآت العملاء", + "تحليل الولاء", + "تقارير الولاء", + "إدارة التوصيات", + "البيع الإضافي", + "البيع المتقاطع", + "توصيات المنتجات", + "تحليل التوصيات", + "تقارير التوصيات", + "ما هو رصيد المخزون الحالي", + "كم كمية الصنف المتوفرة", + "اعرض الأصناف منخفضة المخزون", + "ما هي الأصناف النافدة", + "أنشئ طلب شراء جديد", + "اعرض أوامر الشراء المفتوحة", + "ما هي الفواتير غير المدفوعة", + "اعرض فواتير الموردين المتأخرة", + "كم إجمالي المبيعات اليوم", + "ما هي مبيعات هذا الشهر", + "اعرض أفضل العملاء مبيعاً", + "من أفضل الموردين أداءً", + "ما هي المنتجات الأكثر مبيعاً", + "اعرض الأرباح الشهرية", + "ما هو صافي الربح", + "كم إجمالي المصروفات", + "اعرض المصروفات التشغيلية", + "ما هي الإيرادات السنوية", + "أنشئ فاتورة مبيعات", + "أنشئ فاتورة شراء", + "أنشئ إيصال شراء", + "أنشئ أمر بيع", + "أنشئ عرض سعر", + "أنشئ طلب مواد", + "اعرض طلبات المواد المعلقة", + "ما هي طلبات الشراء المتأخرة", + "اعرض أوامر البيع المفتوحة", + "ما هي الفواتير المستحقة", + "كم رصيد العميل", + "اعرض كشف حساب العميل", + "كم رصيد المورد", + "اعرض كشف حساب المورد", + "ما هي المدفوعات المستحقة", + "اعرض التحصيلات اليومية", + "ما هي الشحنات المتأخرة", + "اعرض حالة الشحنة", + "تتبع رقم الشحنة", + "اعرض المنتجات المرتجعة", + "كم قيمة المرتجعات", + "اعرض المرتجعات حسب العميل", + "ما هي المبيعات حسب المنطقة", + "اعرض أداء مندوبي المبيعات", + "كم عمولة المندوب", + "اعرض أهداف المبيعات", + "من حقق أعلى مبيعات", + "اعرض أوامر الإنتاج", + "ما هي أوامر التصنيع المفتوحة", + "كم تكلفة الإنتاج", + "اعرض المواد الخام المطلوبة", + "ما هي المنتجات قيد التصنيع", + "اعرض حالة خط الإنتاج", + "ما هي الآلات المتوقفة", + "اعرض طلبات الصيانة", + "ما هي الأعطال الحالية", + "اعرض جدول الصيانة الوقائية", + "ما هي الأصول قيد الصيانة", + "اعرض الأصول الثابتة", + "كم قيمة الإهلاك", + "اعرض جدول الإهلاك", + "ما هي الأصول المنتهية الضمان", + "اعرض الأصول حسب الموقع", + "ما هي الأصول المخصصة للموظفين", + "اعرض حضور الموظفين اليوم", + "من هم الموظفون المتأخرون", + "اعرض الإجازات المعتمدة", + "كم عدد الموظفين الحاليين", + "اعرض كشوف الرواتب", + "ما هي الرواتب المستحقة", + "اعرض تقييمات الموظفين", + "من الموظفون الجدد", + "اعرض طلبات التوظيف", + "ما هي المقابلات المجدولة", + "اعرض العقود المنتهية", + "كم تكلفة الرواتب الشهرية", + "اعرض المصروفات حسب القسم", + "ما هي مراكز التكلفة", + "اعرض الميزانية الحالية", + "ما هي انحرافات الميزانية", + "اعرض التدفقات النقدية", + "كم الرصيد البنكي", + "اعرض المطابقة البنكية", + "ما هي الشيكات المرتجعة", + "اعرض الضرائب المستحقة", + "كم قيمة ضريبة القيمة المضافة", + "اعرض الإقرار الضريبي", + "ما هي الفواتير الضريبية", + "اعرض الحسابات الدائنة", + "اعرض الحسابات المدينة", + "ما هي الديون المتأخرة", + "اعرض أعمار الديون", + "كم عدد العملاء النشطين", + "اعرض العملاء المحتملين", + "ما هي الفرص البيعية المفتوحة", + "اعرض حالة الصفقات", + "كم نسبة تحويل العملاء", + "اعرض الحملات التسويقية", + "ما هي نتائج الحملة", + "اعرض زيارات العملاء", + "ما هي الاجتماعات المجدولة", + "اعرض المهام المفتوحة", + "ما هي التنبيهات الحالية", + "اعرض الإشعارات الجديدة", + "ما هي العمليات المعلقة", + "اعرض سجل النشاط", + "من قام بتعديل الفاتورة", + "اعرض العمليات الأخيرة", + "ما هي المنتجات منخفضة الربحية", + "اعرض تحليل الأرباح", + "ما هي المنتجات الأعلى ربحاً", + "اعرض تحليل العملاء", + "ما هي المناطق الأعلى مبيعاً", + "اعرض أداء الفروع", + "ما هي الفروع الأعلى إيراداً", + "اعرض مقارنة المبيعات السنوية", + "ما هي اتجاهات المبيعات", + "اعرض توقعات المبيعات", + "ما هي الطلبات العاجلة", + "اعرض أوامر الشراء غير المستلمة", + "ما هي الفواتير المعلقة", + "اعرض التحويلات المخزنية", + "ما هي الكميات المحجوزة", + "اعرض الأصناف حسب المستودع", + "ما هي المستودعات الممتلئة", + "اعرض حركة الصنف", + "كم معدل دوران المخزون", + "اعرض الأصناف الراكدة", + "ما هي الأصناف السريعة الحركة", + "اعرض تحليل المخزون", + "ما هي الشحنات الواردة", + "اعرض مواعيد التسليم", + "ما هي تكاليف الشحن", + "اعرض الموردين حسب الجودة", + "ما هي المواد المطلوبة للإنتاج", + "اعرض استهلاك المواد الخام", + "كم كفاءة خط الإنتاج", + "اعرض وقت التوقف", + "ما هي أسباب التوقف", + "اعرض جودة الإنتاج", + "كم نسبة الهدر", + "اعرض المنتجات المعيبة", + "ما هي نتائج فحص الجودة", + "اعرض تقارير الجودة", + "كم تكلفة الصيانة", + "اعرض صيانة الآلات", + "ما هي الآلات الأكثر أعطالاً", + "اعرض استهلاك الطاقة", + "ما هي تكاليف التشغيل", + "اعرض تحليل الكفاءة", + "كم عدد الطلبات اليوم", + "اعرض الطلبات غير المكتملة", + "ما هي الطلبات الملغاة", + "اعرض المرتجعات حسب الصنف", + "ما هي الأصناف التالفة", + "اعرض تكلفة الاستيراد", + "ما هي رسوم الجمارك", + "اعرض الشحنات الدولية", + "ما هي أوامر التوريد", + "اعرض الموردين المتأخرين", + "ما هي أفضل أسعار الموردين", + "اعرض مقارنة الموردين", + "ما هي العقود النشطة", + "اعرض العقود المنتهية", + "ما هي الاشتراكات الحالية", + "اعرض الاشتراكات المنتهية", + "كم الإيرادات المتكررة", + "اعرض العملاء حسب القطاع", + "ما هي المنتجات حسب الفئة", + "اعرض التصنيفات البيعية", + "ما هي أكثر الخدمات طلباً", + "اعرض إيرادات الخدمات", + "ما هي المشاريع النشطة", + "اعرض تكاليف المشاريع", + "ما هي المشاريع المتأخرة", + "اعرض أرباح المشاريع", + "ما هي ساعات العمل الإضافي", + "اعرض إنتاجية الموظفين", + "ما هي طلبات الإجازة", + "اعرض تقييم الأداء", + "ما هي الدورات التدريبية", + "اعرض المهارات المتوفرة", + "ما هي الوظائف الشاغرة", + "اعرض الموظفين حسب القسم", + "ما هي الأصول المنقولة", + "اعرض سجل الأصول", + "ما هي تكاليف الأصول", + "اعرض العائد على الأصول", + "ما هي الأصول عالية القيمة", + "اعرض جرد الأصول", + "ما هي الأصول المفقودة", + "اعرض تقارير الصيانة", + "ما هي الأصول المستهلكة", + "اعرض الأصول حسب الفرع", + "ما هي الأجهزة المتاحة", + "اعرض الأجهزة المخصصة", + "ما هي التراخيص المنتهية", + "اعرض صلاحيات المستخدمين", + "ما هي محاولات الدخول الفاشلة", + "اعرض سجل التعديلات", + "ما هي النسخ الاحتياطية", + "اعرض حالة النظام", + "ما هي التكاملات النشطة", + "اعرض تقارير الأداء", + "ما هي العمليات الآلية", + "اعرض التنبيهات الحرجة", + "ما هي المهام المجدولة", + "اعرض استخدام النظام", + "ما هي الوحدات النشطة", + "اعرض إعدادات الشركة", + "ما هي العملات المستخدمة", + "اعرض أسعار الصرف", + "ما هي الفروقات المحاسبية", + "اعرض القيود اليومية", + "ما هي القيود غير المرحّلة", + "اعرض دفتر الأستاذ", + "ما هي التسويات البنكية", + "اعرض المصروفات غير المعتمدة", + "ما هي الدفعات المعلقة", + "اعرض تحليل السيولة", + "ما هي الالتزامات الحالية", + "اعرض رأس المال العامل", + "ما هي النسب المالية", + "اعرض تحليل الربحية", + "ما هي التوقعات المالية", + "اعرض الإيرادات حسب العميل", + "ما هي الأرباح حسب المنتج", + "اعرض الأداء الشهري", + "ما هي مؤشرات الأداء", + "اعرض لوحة التحكم", + "ما هي الإشعارات الجديدة", + "اعرض الطلبات حسب الحالة", + "ما هي الفواتير حسب التاريخ", + "اعرض المبيعات حسب المنتج", + "ما هي التحصيلات اليومية", + "اعرض العملاء المتأخرين بالسداد", + "ما هي المنتجات المنتهية الصلاحية", + "اعرض تنبيهات انتهاء الصلاحية", + "ما هي المواد قيد النقل", + "اعرض تحويلات المستودعات", + "ما هي أوامر النقل", + "اعرض الحاويات الحالية", + "ما هي تكاليف التخزين", + "اعرض استغلال المستودعات", + "ما هي مواقع التخزين المتاحة", + "اعرض عمليات الالتقاط", + "ما هي عمليات التعبئة", + "اعرض عمليات التفريغ", + "ما هي أوامر التحويل", + "اعرض أوامر الجرد", + "ما هي فروقات الجرد", + "اعرض الجرد السنوي", + "ما هي نتائج الجرد", + "اعرض المنتجات حسب العلامة التجارية", + "ما هي المنتجات غير النشطة", + "اعرض المنتجات حسب المورد", + "ما هي المنتجات حسب السعر", + "اعرض المنتجات المخفضة", + "ما هي عروض العملاء", + "اعرض كوبونات الخصم", + "ما هي الطلبات الإلكترونية", + "اعرض مبيعات المتجر الإلكتروني", + "ما هي الطلبات قيد الشحن", + "اعرض تقييمات العملاء", + "ما هي شكاوى العملاء", + "اعرض تذاكر الدعم", + "ما هي المشكلات المفتوحة", + "اعرض حلول الدعم", + "ما هي الخدمات المطلوبة", + "اعرض وقت الاستجابة", + "ما هي مؤشرات رضا العملاء", + "اعرض العملاء الأعلى ربحية", + "ما هي المنتجات الأعلى طلباً", + "اعرض أفضل أوقات البيع", + "ما هي ساعات الذروة", + "اعرض تحليل الاتجاهات", + "ما هي التوقعات المستقبلية", + "اعرض التحليلات التنبؤية", + "ما هي المنتجات المقترحة", + "اعرض توصيات البيع", + "ما هي فرص البيع الإضافي", + "اعرض البيع المتقاطع", + "ما هي الحملات النشطة", + "اعرض نتائج التسويق", + "ما هي تكلفة اكتساب العميل", + "اعرض معدل الاحتفاظ بالعملاء", + "ما هي معدلات التحويل", + "اعرض العملاء غير النشطين", + "ما هي فرص إعادة الاستهداف", + "اعرض الإيرادات حسب القناة", + "ما هي القنوات الأعلى مبيعاً", + "اعرض أداء التجارة الإلكترونية", + "ما هي مبيعات نقاط البيع", + "اعرض إغلاق الصندوق", + "ما هي الحركات النقدية", + "اعرض النقدية اليومية", + "ما هي التحويلات البنكية", + "اعرض الدفعات حسب التاريخ", + "ما هي المبالغ المستحقة", + "اعرض العملاء حسب المدينة", + "ما هي الموردين حسب الدولة", + "اعرض المشاريع حسب الحالة", + "ما هي الطلبات حسب الأولوية", + "اعرض الموظفين حسب الدور", + "ما هي الأصول حسب الفئة", + "اعرض الإيرادات حسب الفرع", + "ما هي التكاليف حسب المشروع", + "اعرض أرباح الفروع", + "ما هي العمليات المتأخرة", + "اعرض حالة التكاملات", + "ما هي العمليات الفاشلة", + "اعرض سجل الأخطاء", + "ما هي المهام المعلقة", + "اعرض الأنشطة اليومية", + "ما هي العمليات الحرجة", + "اعرض مؤشرات الأعمال", + "ما هي البيانات المفقودة", + "اعرض السجلات المكررة", + "ما هي التحديثات الأخيرة", + "اعرض التقارير المخصصة", + "ما هي الفلاتر المحفوظة", + "اعرض التصدير إلى إكسل", + "ما هي الملفات المرفقة", + "اعرض الوثائق المؤرشفة", + "ما هي العقود المعلقة", + "اعرض الشحنات حسب الحالة", + "ما هي تكاليف المشاريع", + "اعرض الإيرادات حسب السنة", + "ما هي الأرباح حسب الشهر", + "اعرض أكثر الموردين تعاملاً", + "ما هي أكثر العملاء شراءً", + "اعرض المنتجات الأعلى مرتجعاً", + "ما هي الأصناف الأعلى تكلفة", + "اعرض مقارنة الفروع", + "ما هي مؤشرات التصنيع", + "اعرض استهلاك الوقود", + "ما هي تكاليف الأسطول", + "اعرض صيانة المركبات", + "ما هي المركبات المتوقفة", + "اعرض الرحلات الحالية", + "ما هي أوامر الخدمة", + "اعرض الخدمات المكتملة", + "ما هي الخدمات المتأخرة", + "اعرض تقارير العقود", + "ما هي الفواتير المؤجلة", + "اعرض الإيرادات المؤجلة", + "ما هي التكاليف غير المباشرة", + "اعرض التكاليف المباشرة", + "ما هي الحسابات غير المتوازنة", + "اعرض الفروقات الضريبية", + "ما هي القيود التلقائية", + "اعرض القيود المعكوسة", + "ما هي الأرصدة الافتتاحية", + "اعرض الإقفالات الشهرية", + "ما هي الفترات المالية المفتوحة", + "اعرض السنوات المالية", + "ما هي الحسابات النشطة", + "اعرض مراكز الربح", + "ما هي مراكز التكلفة", + "اعرض المشاريع المتعثرة", + "ما هي المنتجات الموسمية", + "اعرض المبيعات حسب اليوم", + "ما هي الأرباح حسب العميل", + "اعرض أداء الحملات", + "ما هي المشتريات حسب المورد", + "اعرض تكاليف الشحن", + "ما هي أوقات التسليم", + "اعرض أفضل الموردين سعراً", + "ما هي المنتجات منخفضة المخزون", + "اعرض المخزون حسب الفئة", + "ما هي الحركات المخزنية", + "اعرض المنتجات القابلة للتلف", + "ما هي الأصناف منتهية الصلاحية", + "اعرض المواد الخام المتوفرة", + "ما هي أوامر الإنتاج المكتملة", + "اعرض نسبة الإنجاز", + "ما هي التكاليف التشغيلية", + "اعرض كفاءة التشغيل", + "ما هي الإيرادات اليومية", + "اعرض التدفقات النقدية الشهرية", + "ما هي الديون المعدومة", + "اعرض العملاء المتعثرين", + "ما هي المنتجات الأعلى هامش ربح", + "اعرض متوسط قيمة الطلب", + "ما هي الفواتير المكررة", + "اعرض أوامر البيع غير المفوترة", + "ما هي أوامر الشراء غير المستلمة", + "اعرض المنتجات حسب المستودع", + "ما هي المستودعات منخفضة السعة", + "اعرض تنبيهات المخزون", + "ما هي الشحنات قيد التخليص", + "اعرض الموردين المتأخرين", + "ما هي الطلبات المتأخرة", + "اعرض العملاء حسب النشاط", + "ما هي الإيرادات حسب الصناعة", + "اعرض المنتجات حسب الربحية", + "ما هي الفروع الأعلى نمواً", + "اعرض مقارنة الأرباح", + "ما هي الخدمات الأعلى طلباً", + "اعرض أفضل مندوبي المبيعات", + "ما هي الصفقات الرابحة", + "اعرض الفرص المفقودة", + "ما هي المهام غير المكتملة", + "اعرض الاجتماعات القادمة", + "ما هي تذاكر الدعم الحرجة", + "اعرض العملاء غير الراضين", + "ما هي استبيانات العملاء", + "اعرض تقييم الخدمة", + "ما هي مؤشرات الجودة", + "اعرض نسب العيوب", + "ما هي أسباب المرتجعات", + "اعرض تحليل الهدر", + "ما هي تكاليف الجودة", + "اعرض استهلاك المواد", + "ما هي ساعات تشغيل الآلات", + "اعرض وقت التوقف الشهري", + "ما هي كفاءة العمالة", + "اعرض أداء الفرق", + "ما هي خطط الصيانة", + "اعرض الصيانة المتأخرة", + "ما هي الأصول القابلة للاستبدال", + "اعرض الأصول منتهية العمر", + "ما هي الأجهزة غير المستخدمة", + "اعرض تكاليف الصيانة السنوية", + "ما هي الفواتير قيد الاعتماد", + "اعرض المدفوعات المجدولة", + "ما هي الحسابات المتأخرة", + "اعرض التدقيق المالي", + "ما هي نتائج المراجعة", + "اعرض العمليات غير المعتمدة", + "ما هي التنبيهات المالية", + "اعرض التوقعات النقدية", + "ما هي الإيرادات المتوقعة", + "اعرض المبيعات المستقبلية", + "ما هي احتياجات التوريد", + "اعرض الطلب المتوقع", + "ما هي خطط الإنتاج", + "اعرض خطط الشحن", + "ما هي خطط التوظيف", + "اعرض الميزانية السنوية", + "ما هي مؤشرات النجاح", + "اعرض أداء الشركة", + "كم عدد الفواتير الصادرة اليوم", + "اعرض إجمالي المبيعات الأسبوعية", + "ما قيمة المشتريات هذا الشهر", + "اعرض أعلى 10 منتجات مبيعاً", + "كم عدد الطلبات المفتوحة", + "اعرض أوامر البيع المتأخرة", + "ما هي الطلبات التي لم يتم شحنها", + "اعرض العملاء الذين لم يسددوا", + "كم قيمة الذمم المدينة", + "اعرض الموردين الذين لديهم دفعات مستحقة", + "ما هي الفواتير المستحقة هذا الأسبوع", + "اعرض الإيرادات حسب الفرع", + "كم الأرباح حسب المنتج", + "اعرض تكلفة المنتج", + "ما هي المنتجات منخفضة الربحية", + "اعرض تحليل هامش الربح", + "ما هي أفضل الفروع أداءً", + "اعرض مبيعات كل مندوب", + "ما هي المبيعات حسب المدينة", + "اعرض المنتجات الأعلى طلباً", + "كم عدد العملاء الجدد هذا الشهر", + "اعرض العملاء غير النشطين", + "ما هي الصفقات المفتوحة", + "اعرض فرص البيع المحتملة", + "ما هي الحملات التسويقية النشطة", + "اعرض تكلفة الحملة التسويقية", + "كم عدد المرتجعات اليوم", + "اعرض أسباب المرتجعات", + "ما هي المنتجات الأكثر إرجاعاً", + "اعرض المرتجعات حسب العميل", + "كم المخزون المتبقي", + "اعرض الأصناف التي قاربت على النفاد", + "ما هي الأصناف المتوفرة في المستودع الرئيسي", + "اعرض حركة الصنف خلال آخر شهر", + "ما هي المنتجات منتهية الصلاحية", + "اعرض المواد الخام المطلوبة للإنتاج", + "كم عدد أوامر التصنيع المفتوحة", + "اعرض المنتجات قيد الإنتاج", + "ما هي تكلفة التصنيع الحالية", + "اعرض نسبة إنجاز أوامر الإنتاج", + "ما هي خطوط الإنتاج المتوقفة", + "اعرض كفاءة خطوط الإنتاج", + "كم وقت توقف الآلات", + "اعرض الأعطال الحالية", + "ما هي طلبات الصيانة المفتوحة", + "اعرض الصيانة المجدولة", + "كم تكلفة الصيانة الشهرية", + "اعرض استهلاك الوقود للمركبات", + "ما هي المركبات المتاحة", + "اعرض المركبات قيد الصيانة", + "كم عدد الموظفين الحاضرين اليوم", + "اعرض الموظفين المتأخرين", + "ما هي طلبات الإجازة المعلقة", + "اعرض الرواتب غير المصروفة", + "كم تكلفة الرواتب هذا الشهر", + "اعرض الموظفين حسب القسم", + "ما هي الوظائف الشاغرة", + "اعرض المرشحين الجدد", + "كم عدد المقابلات المجدولة", + "اعرض تقييم أداء الموظفين", + "ما هي الدورات التدريبية الحالية", + "اعرض الموظفين الأعلى أداءً", + "كم عدد العملاء المحتملين", + "اعرض العملاء حسب القطاع", + "ما هي المنتجات حسب العلامة التجارية", + "اعرض الطلبات حسب الحالة", + "ما هي الفواتير حسب نوع الدفع", + "اعرض المدفوعات البنكية", + "كم الرصيد النقدي الحالي", + "اعرض التدفقات النقدية اليومية", + "ما هي الحسابات البنكية النشطة", + "اعرض المطابقة البنكية الأخيرة", + "ما هي الشيكات قيد التحصيل", + "اعرض الضرائب المستحقة هذا الشهر", + "كم قيمة ضريبة المبيعات", + "اعرض الإقرار الضريبي الحالي", + "ما هي القيود غير المرحّلة", + "اعرض دفتر الأستاذ العام", + "كم قيمة الأصول الثابتة", + "اعرض الأصول حسب القسم", + "ما هي الأصول المنتهية الضمان", + "اعرض جدول الإهلاك", + "كم قيمة الإهلاك التراكمي", + "اعرض الأصول المخصصة للموظفين", + "ما هي الأصول غير المستخدمة", + "اعرض تكاليف الأصول", + "كم عدد الطلبات الإلكترونية", + "اعرض مبيعات المتجر الإلكتروني", + "ما هي الطلبات قيد التجهيز", + "اعرض الطلبات المشحونة اليوم", + "كم عدد الطلبات الملغاة", + "اعرض الطلبات المتأخرة في التسليم", + "ما هي الشحنات قيد النقل", + "اعرض الشحنات المتأخرة", + "كم تكلفة الشحن هذا الشهر", + "اعرض شركات الشحن المستخدمة", + "ما هي أوامر الشراء غير المفوترة", + "اعرض الموردين حسب الأداء", + "كم عدد الموردين النشطين", + "اعرض الموردين المتأخرين في التسليم", + "ما هي المواد التي تحتاج إعادة طلب", + "اعرض تحليل دوران المخزون", + "كم معدل دوران الأصناف", + "اعرض الأصناف الراكدة", + "ما هي المستودعات الممتلئة", + "اعرض السعة التخزينية المتبقية", + "كم عدد عمليات الجرد", + "اعرض فروقات الجرد", + "ما هي المنتجات التالفة", + "اعرض تكلفة الهدر", + "كم عدد تذاكر الدعم المفتوحة", + "اعرض شكاوى العملاء", + "ما هي المشاكل المتكررة", + "اعرض متوسط وقت حل التذكرة", + "كم معدل رضا العملاء", + "اعرض تقييمات العملاء", + "ما هي الخدمات الأعلى تقييماً", + "اعرض العقود النشطة", + "ما هي العقود المنتهية قريباً", + "اعرض الاشتراكات المتجددة", + "كم الإيرادات المتكررة", + "اعرض العملاء حسب الاشتراك", + "ما هي المشاريع النشطة", + "اعرض نسبة إنجاز المشاريع", + "كم تكلفة المشروع الحالية", + "اعرض المشاريع المتأخرة", + "ما هي المشاريع الأكثر ربحية", + "اعرض مهام المشروع المفتوحة", + "كم عدد الاجتماعات اليوم", + "اعرض المهام المتأخرة", + "ما هي الأنشطة الأخيرة", + "اعرض سجل التعديلات", + "من قام بحذف الفاتورة", + "ما هي العمليات غير المعتمدة", + "اعرض التنبيهات الحرجة", + "كم عدد المستخدمين النشطين", + "اعرض صلاحيات المستخدمين", + "ما هي محاولات الدخول الفاشلة", + "اعرض حالة النسخ الاحتياطي", + "ما هي الأخطاء الأخيرة في النظام", + "اعرض استخدام النظام اليوم", + "كم عدد العمليات الآلية", + "اعرض حالة التكاملات", + "ما هي البيانات المكررة", + "اعرض السجلات الناقصة", + "كم عدد المنتجات النشطة", + "اعرض المنتجات غير المتوفرة", + "ما هي المنتجات الأعلى سعراً", + "اعرض المنتجات منخفضة السعر", + "كم عدد عروض الأسعار المفتوحة", + "اعرض عروض الأسعار المقبولة", + "ما هي عروض الأسعار المرفوضة", + "اعرض الخصومات المطبقة", + "كم قيمة الخصومات هذا الشهر", + "اعرض الحملات الترويجية الحالية", + "ما هي القنوات الأعلى مبيعاً", + "اعرض الإيرادات حسب قناة البيع", + "كم عدد العملاء حسب المدينة", + "اعرض العملاء حسب الدولة", + "ما هي المبيعات حسب الدولة", + "اعرض الموردين حسب الدولة", + "كم عدد المنتجات حسب الفئة", + "اعرض الفئات الأعلى مبيعاً", + "ما هي العلامات التجارية الأكثر ربحية", + "اعرض تكلفة الشحن حسب الطلب", + "كم متوسط قيمة الطلب", + "اعرض متوسط وقت التسليم", + "ما هي الطلبات التي تجاوزت الميزانية", + "اعرض التكاليف حسب المشروع", + "كم عدد الموظفين في كل فرع", + "اعرض الإيرادات حسب الموظف", + "ما هي أعلى الأقسام تكلفة", + "اعرض أداء الأقسام", + "كم عدد الفواتير غير المحصلة", + "اعرض أعمار الديون", + "ما هي الحسابات المدينة المتأخرة", + "اعرض الحسابات الدائنة المستحقة", + "كم قيمة الالتزامات الحالية", + "اعرض السيولة الحالية", + "ما هي النسب المالية الرئيسية", + "اعرض الأرباح الشهرية", + "كم الأرباح السنوية", + "اعرض مقارنة الإيرادات السنوية", + "ما هي الفترات الأعلى مبيعاً", + "اعرض اتجاهات المبيعات", + "كم نسبة النمو السنوي", + "اعرض المنتجات حسب هامش الربح", + "ما هي المنتجات الخاسرة", + "اعرض الأرباح حسب العميل", + "كم قيمة الطلبات قيد الانتظار", + "اعرض أوامر البيع غير المسلمة", + "ما هي الفواتير قيد الاعتماد", + "اعرض المدفوعات المجدولة", + "كم عدد الشيكات المرتجعة", + "اعرض التحويلات البنكية الأخيرة", + "ما هي القيود اليومية اليوم", + "اعرض المصروفات حسب النوع", + "كم المصروفات التشغيلية", + "اعرض الإيرادات حسب نوع الخدمة", + "ما هي الخدمات الأعلى ربحاً", + "اعرض أداء التجارة الإلكترونية", + "كم عدد الزيارات للمتجر", + "اعرض معدل التحويل", + "ما هي السلات المتروكة", + "اعرض المنتجات الأكثر مشاهدة", + "كم عدد الطلبات المكتملة", + "اعرض نسبة إلغاء الطلبات", + "ما هي الطلبات المسترجعة", + "اعرض العملاء المتأخرين في السداد", + "كم عدد التنبيهات الحالية", + "اعرض الإشعارات غير المقروءة", + "ما هي المهام المجدولة اليوم", + "اعرض التقارير المحفوظة", + "كم عدد الملفات المرفقة", + "اعرض الوثائق المؤرشفة", + "ما هي أوامر الشراء قيد الموافقة", + "اعرض المشتريات حسب المورد", + "كم تكلفة المواد الخام", + "اعرض الموردين الأعلى تكلفة", + "ما هي المواد الأكثر استهلاكاً", + "اعرض استهلاك المواد حسب المشروع", + "كم عدد أوامر النقل", + "اعرض تحويلات المستودعات", + "ما هي الكميات المحجوزة", + "اعرض مواقع التخزين المتاحة", + "كم عدد عمليات الالتقاط", + "اعرض عمليات التعبئة الحالية", + "ما هي الشحنات الجاهزة للإرسال", + "اعرض أوامر الجرد المفتوحة", + "كم عدد الأصناف التسلسلية", + "اعرض المنتجات حسب الرقم التسلسلي", + "ما هي الدفعات المنتهية قريباً", + "اعرض تواريخ انتهاء الصلاحية", + "كم عدد المنتجات التالفة", + "اعرض خسائر المخزون", + "ما هي الطلبات الحرجة", + "اعرض أولويات الإنتاج", + "كم عدد العمال في خط الإنتاج", + "اعرض إنتاجية العامل", + "ما هي ساعات العمل الإضافي", + "اعرض تكاليف العمالة", + "كم عدد الحوادث التشغيلية", + "اعرض تقارير السلامة", + "ما هي المخاطر التشغيلية", + "اعرض مؤشرات الجودة", + "كم نسبة العيوب", + "اعرض نتائج فحص الجودة", + "ما هي المنتجات المرفوضة", + "اعرض إعادة العمل في الإنتاج", + "كم عدد الأعطال الشهرية", + "اعرض الآلات الأعلى توقفاً", + "ما هي تكاليف الأعطال", + "اعرض استهلاك الطاقة", + "كم تكلفة الكهرباء الشهرية", + "اعرض تحليل الكفاءة التشغيلية", + "ما هي الأوامر العاجلة", + "اعرض أوامر الخدمة المفتوحة", + "كم عدد الخدمات المكتملة", + "اعرض الخدمات المتأخرة", + "ما هي العقود الأعلى قيمة", + "اعرض العملاء حسب الإيرادات", + "كم عدد التوصيات البيعية", + "اعرض فرص البيع الإضافي", + "ما هي المنتجات المقترحة للعملاء", + "اعرض معدل الاحتفاظ بالعملاء", + "كم عدد العملاء المفقودين", + "اعرض العملاء الأعلى نشاطاً", + "ما هي المبيعات حسب الوقت", + "اعرض المبيعات حسب اليوم", + "كم عدد الطلبات في الساعة", + "اعرض أوقات الذروة", + "ما هي أكثر الأيام مبيعاً", + "اعرض التحصيلات حسب العميل", + "كم عدد العملاء المتعثرين", + "اعرض الدفعات المتأخرة", + "ما هي الفواتير المكررة", + "اعرض السجلات غير المكتملة", + "كم عدد المنتجات غير النشطة", + "اعرض المنتجات الجديدة", + "ما هي المنتجات قيد التطوير", + "اعرض تكاليف التطوير", + "كم عدد المشاريع الجديدة", + "اعرض فرص المشاريع", + "ما هي العقود المعلقة", + "اعرض أداء الفرق", + "كم عدد المستخدمين المتصلين", + "اعرض استهلاك التخزين", + "ما هي قواعد البيانات النشطة", + "اعرض سجل العمليات", + "كم عدد العمليات الفاشلة", + "اعرض الأخطاء الحرجة", + "ما هي المهام التلقائية", + "اعرض تقارير النظام", + "كم عدد التكاملات المتصلة", + "اعرض حالة واجهات API", + "ما هي عمليات الاستيراد الأخيرة", + "اعرض سجلات التصدير", + "كم عدد التقارير المنشأة", + "اعرض التقارير المجدولة", + "ما هي البيانات المؤرشفة", + "اعرض الملفات المحذوفة", + "كم عدد طلبات الدعم الداخلي", + "اعرض مشكلات النظام", + "ما هي الوحدات المستخدمة", + "اعرض استهلاك التراخيص", + "كم عدد المستخدمين حسب الدور", + "اعرض نشاط الموظفين", + "ما هي المهام غير المكتملة", + "اعرض الاجتماعات القادمة", + "كم عدد الملاحظات الجديدة", + "اعرض التعليقات الأخيرة", + "ما هي الأنشطة اليومية", + "اعرض التذكيرات الحالية", + "كم عدد الموافقات المعلقة", + "اعرض الطلبات المرفوضة", + "ما هي العمليات المكتملة", + "اعرض أداء النظام العام", + "كم عدد التحليلات المتاحة", + "اعرض لوحات التحكم", + "ما هي المؤشرات الحرجة", + "اعرض التوقعات المستقبلية", + "كم الإيرادات المتوقعة", + "اعرض المبيعات المتوقعة", + "ما هي احتياجات المخزون المستقبلية", + "اعرض الطلب المتوقع", + "كم عدد أوامر الشراء المستقبلية", + "اعرض خطة التوريد", + "ما هي خطة الإنتاج القادمة", + "اعرض الميزانية المستقبلية", + "كم التكاليف المتوقعة", + "اعرض خطة التوظيف", + "ما هي مؤشرات النجاح", + "اعرض أداء الشركة العام", + "هل توجد فواتير غير مدفوعة", + "ما هو إجمالي التحصيلات اليوم", + "اعرض الطلبات التي تحتاج موافقة", + "كم عدد أوامر البيع الجديدة", + "اعرض أوامر البيع غير المكتملة", + "ما هي الفواتير المتأخرة عن السداد", + "اعرض أفضل 5 عملاء هذا الشهر", + "كم قيمة الخصومات الممنوحة", + "اعرض المنتجات الأعلى نمواً", + "ما هي المنتجات الأقل مبيعاً", + "اعرض العملاء الذين لم يطلبوا مؤخراً", + "كم عدد الموردين الجدد", + "اعرض الموردين الذين لديهم تأخير", + "ما هي الطلبات قيد المعالجة", + "اعرض الطلبات التي تم تسليمها اليوم", + "كم عدد الشحنات الجاهزة", + "اعرض الشحنات التي تواجه تأخير", + "ما هي أوامر الشراء المفتوحة حالياً", + "اعرض فواتير المشتريات غير المسددة", + "كم عدد الأصناف منخفضة المخزون", + "اعرض المنتجات ذات المخزون الزائد", + "ما هي المنتجات القابلة للنفاد قريباً", + "اعرض المواد الخام الناقصة", + "كم عدد عمليات النقل بين المستودعات", + "اعرض المستودعات الأعلى استخداماً", + "ما هي المستودعات الأقل نشاطاً", + "اعرض تكلفة التخزين الحالية", + "كم عدد المنتجات التالفة هذا الأسبوع", + "اعرض تحليل الفاقد", + "ما هي تكلفة الهدر الإنتاجي", + "اعرض أوامر التصنيع المتأخرة", + "كم عدد أوامر الإنتاج المكتملة اليوم", + "اعرض حالة كل خط إنتاج", + "ما هي المنتجات قيد الفحص", + "اعرض نتائج الجودة لهذا الشهر", + "كم نسبة نجاح فحص الجودة", + "اعرض المنتجات المرفوضة في الإنتاج", + "ما هي الأعطال المفتوحة حالياً", + "اعرض جدول صيانة المعدات", + "كم عدد الآلات قيد التشغيل", + "اعرض كفاءة التشغيل اليومية", + "ما هي ساعات التشغيل لكل آلة", + "اعرض استهلاك الطاقة للمصنع", + "كم تكلفة الإنتاج لكل وحدة", + "اعرض الأرباح حسب المنتج", + "ما هي التكاليف الأعلى هذا الشهر", + "اعرض المصروفات حسب الفرع", + "كم قيمة الذمم المدينة المتأخرة", + "اعرض العملاء الذين تجاوزوا الحد الائتماني", + "ما هي المدفوعات القادمة هذا الأسبوع", + "اعرض التدفقات النقدية المتوقعة", + "كم عدد الحسابات البنكية النشطة", + "اعرض الرصيد المتاح في البنك", + "ما هي التحويلات البنكية الأخيرة", + "اعرض القيود اليومية غير المعتمدة", + "كم عدد القيود المرحّلة اليوم", + "اعرض الإيرادات حسب القسم", + "ما هي الأرباح حسب المشروع", + "اعرض المصروفات غير المعتمدة", + "كم عدد الفواتير الضريبية", + "اعرض الضرائب المستحقة حالياً", + "ما هي الفواتير التي تحتاج مراجعة", + "اعرض المطابقة البنكية غير المكتملة", + "كم عدد الشيكات المؤجلة", + "اعرض الشيكات المرتجعة", + "ما هي الفواتير المكررة", + "اعرض العمليات المحاسبية الأخيرة", + "كم عدد الموظفين قيد الإجازة", + "اعرض الحضور والانصراف اليوم", + "ما هي طلبات الإجازة الجديدة", + "اعرض الموظفين الأعلى إنتاجية", + "كم تكلفة العمل الإضافي", + "اعرض الرواتب حسب القسم", + "ما هي الوظائف المفتوحة حالياً", + "اعرض طلبات التوظيف الجديدة", + "كم عدد المقابلات اليوم", + "اعرض نتائج تقييم الأداء", + "ما هي الدورات التدريبية القادمة", + "اعرض الموظفين حسب الفرع", + "كم عدد الأصول النشطة", + "اعرض الأصول قيد الصيانة", + "ما هي الأصول التي انتهى ضمانها", + "اعرض تكاليف صيانة الأصول", + "كم قيمة الأصول الحالية", + "اعرض الأصول حسب الموقع", + "ما هي الأصول غير المستخدمة", + "اعرض جرد الأصول الأخير", + "كم عدد المركبات المتاحة", + "اعرض المركبات التي تحتاج صيانة", + "ما هي تكاليف الوقود هذا الشهر", + "اعرض الرحلات المنجزة", + "كم عدد الطلبات الإلكترونية الجديدة", + "اعرض مبيعات المتجر الإلكتروني اليوم", + "ما هي المنتجات الأكثر مشاهدة", + "اعرض معدل تحويل المتجر", + "كم عدد السلات المتروكة", + "اعرض العملاء الجدد من المتجر", + "ما هي الطلبات الملغاة", + "اعرض تقييمات المنتجات", + "كم عدد تذاكر الدعم الجديدة", + "اعرض التذاكر الحرجة", + "ما هي أكثر المشكلات تكراراً", + "اعرض متوسط وقت الرد", + "كم عدد الشكاوى المفتوحة", + "اعرض رضا العملاء حسب الخدمة", + "ما هي الخدمات الأعلى طلباً", + "اعرض العقود التي تنتهي قريباً", + "كم عدد الاشتراكات النشطة", + "اعرض الاشتراكات غير المجددة", + "ما هي الإيرادات المتكررة الشهرية", + "اعرض العملاء حسب قيمة الاشتراك", + "كم عدد المشاريع المتأخرة", + "اعرض المشاريع المكتملة", + "ما هي المهام المفتوحة في المشاريع", + "اعرض ساعات العمل للمشاريع", + "كم تكلفة المشروع الحالية", + "اعرض ربحية المشاريع", + "ما هي الفرق الأعلى أداءً", + "اعرض الاجتماعات القادمة اليوم", + "كم عدد المهام غير المكتملة", + "اعرض التذكيرات الحالية", + "ما هي التنبيهات الحرجة في النظام", + "اعرض الأنشطة الأخيرة للمستخدمين", + "كم عدد المستخدمين المتصلين الآن", + "اعرض محاولات الدخول الفاشلة", + "ما هي صلاحيات المستخدمين", + "اعرض سجل التعديلات الأخيرة", + "كم عدد العمليات الآلية المنفذة", + "اعرض حالة النسخ الاحتياطية", + "ما هي الأخطاء المسجلة اليوم", + "اعرض أداء الخادم", + "كم استهلاك قاعدة البيانات", + "اعرض التكاملات المتصلة", + "ما هي عمليات الاستيراد الفاشلة", + "اعرض التقارير المجدولة", + "كم عدد الملفات المرفوعة اليوم", + "اعرض الوثائق المؤرشفة", + "ما هي المستندات المنتهية", + "اعرض أوامر الشراء حسب المورد", + "كم قيمة المشتريات السنوية", + "اعرض الموردين الأعلى توريداً", + "ما هي المواد الأعلى تكلفة", + "اعرض المشتريات حسب الفئة", + "كم عدد أوامر الاستلام", + "اعرض إيصالات الشراء اليوم", + "ما هي الأصناف المستلمة جزئياً", + "اعرض المنتجات المرفوضة من المورد", + "كم عدد أوامر الجرد المفتوحة", + "اعرض فروقات الجرد حسب المستودع", + "ما هي المنتجات التي تحتاج إعادة جرد", + "اعرض الحركات المخزنية اليومية", + "كم عدد عمليات الالتقاط اليوم", + "اعرض أوامر التعبئة الحالية", + "ما هي الشحنات قيد التحضير", + "اعرض التوصيل حسب المنطقة", + "كم تكلفة الشحن لكل طلب", + "اعرض شركات الشحن حسب الأداء", + "ما هي الطلبات المستعجلة", + "اعرض أولويات التوريد", + "كم عدد الأصناف التسلسلية", + "اعرض المنتجات حسب الدفعة", + "ما هي الدفعات منتهية الصلاحية", + "اعرض تنبيهات انتهاء الصلاحية", + "كم عدد المنتجات غير المتوفرة", + "اعرض المنتجات البديلة", + "ما هي المنتجات ذات أعلى هامش", + "اعرض المنتجات حسب المورد", + "كم عدد أوامر الخدمة", + "اعرض الخدمات قيد التنفيذ", + "ما هي الخدمات المتأخرة", + "اعرض تكلفة الخدمات", + "كم عدد العملاء النشطين هذا الأسبوع", + "اعرض العملاء الأعلى شراءً", + "ما هي المنتجات الأعلى ربحاً", + "اعرض المبيعات حسب الوقت", + "كم عدد الطلبات حسب اليوم", + "اعرض الإيرادات حسب الشهر", + "ما هي الفروع الأعلى أداءً", + "اعرض أداء مندوبي المبيعات", + "كم عدد الزيارات البيعية", + "اعرض الصفقات المغلقة", + "ما هي الفرص البيعية الجديدة", + "اعرض معدل تحويل الصفقات", + "كم قيمة الصفقات المفتوحة", + "اعرض الحملات التسويقية حسب الأداء", + "ما هي الحملات الأعلى عائداً", + "اعرض العملاء حسب الحملة", + "كم تكلفة اكتساب العميل", + "اعرض العملاء المتوقع فقدانهم", + "ما هي المنتجات المقترحة للبيع الإضافي", + "اعرض توصيات البيع المتقاطع", + "كم عدد كوبونات الخصم المستخدمة", + "اعرض الخصومات حسب المنتج", + "ما هي الطلبات ذات الخصومات العالية", + "اعرض المبيعات حسب المندوب", + "كم عدد العملاء حسب الصناعة", + "اعرض الإيرادات حسب الدولة", + "ما هي المناطق الأعلى نمواً", + "اعرض المبيعات حسب القناة", + "كم عدد الطلبات عبر الهاتف", + "اعرض أداء نقاط البيع", + "ما هي الفروع الأعلى مبيعاً", + "اعرض إغلاق الصندوق اليومي", + "كم النقدية الموجودة بالصندوق", + "اعرض الحركات النقدية اليومية", + "ما هي المدفوعات المرفوضة", + "اعرض التحصيلات حسب العميل", + "كم عدد العملاء المتأخرين بالسداد", + "اعرض الفواتير غير المحصلة", + "ما هي الديون المعدومة", + "اعرض أعمار الحسابات المدينة", + "كم قيمة الحسابات الدائنة", + "اعرض الموردين غير المدفوعين", + "ما هي المدفوعات المجدولة غداً", + "اعرض الميزانية حسب القسم", + "كم الانحراف عن الميزانية", + "اعرض التكاليف التشغيلية الشهرية", + "ما هي المصروفات الأعلى", + "اعرض الأرباح حسب الفرع", + "كم نسبة الربحية", + "اعرض مؤشرات الأداء الرئيسية", + "ما هي المؤشرات الحرجة", + "اعرض لوحات التحكم المالية", + "كم الإيرادات المتوقعة الشهر القادم", + "اعرض توقعات المبيعات", + "ما هي التوقعات النقدية", + "اعرض الطلب المتوقع للمخزون", + "كم المواد المطلوبة للإنتاج القادم", + "اعرض خطة التوريد الشهرية", + "ما هي أوامر الإنتاج القادمة", + "اعرض خطة الشحن الأسبوعية", + "كم عدد الموظفين المطلوبين", + "اعرض خطة التوظيف", + "ما هي العقود الجديدة", + "اعرض الاشتراكات الجديدة", + "كم عدد الخدمات المباعة", + "اعرض الإيرادات حسب الخدمة", + "ما هي الخدمات الأقل طلباً", + "اعرض أداء فريق الدعم", + "كم عدد التذاكر المغلقة اليوم", + "اعرض وقت حل التذاكر", + "ما هي التذاكر المتأخرة", + "اعرض العملاء غير الراضين", + "كم نسبة رضا العملاء", + "اعرض نتائج الاستبيانات", + "ما هي الشكاوى الحرجة", + "اعرض أداء فرق الصيانة", + "كم عدد أوامر الصيانة المكتملة", + "اعرض تكاليف الأعطال", + "ما هي الآلات الأكثر إنتاجية", + "اعرض وقت تشغيل المعدات", + "كم نسبة استغلال الأصول", + "اعرض العائد على الأصول", + "ما هي الأصول الأعلى تكلفة", + "اعرض المنتجات حسب دورة الحياة", + "كم عدد المنتجات الجديدة", + "اعرض المنتجات الراكدة", + "ما هي المواد الأعلى استهلاكاً", + "اعرض استهلاك المواد حسب الخط", + "كم نسبة الفاقد في التصنيع", + "اعرض تكاليف الجودة", + "ما هي نتائج الفحص النهائي", + "اعرض تقارير الامتثال", + "كم عدد عمليات التدقيق", + "اعرض نتائج المراجعة", + "ما هي العمليات غير المتوافقة", + "اعرض المخاطر الحالية", + "كم عدد الحوادث التشغيلية", + "اعرض تقارير السلامة", + "ما هي إجراءات التصحيح المفتوحة", + "اعرض مؤشرات الاستدامة", + "كم استهلاك الطاقة الشهري", + "اعرض استهلاك المياه", + "ما هي الانبعاثات الحالية", + "اعرض تقارير إعادة التدوير", + "كم عدد التنبيهات غير المقروءة", + "اعرض الإشعارات حسب النوع", + "ما هي العمليات التي فشلت اليوم", + "اعرض المهام التلقائية المجدولة", + "كم عدد التقارير المنشأة اليوم", + "اعرض أكثر التقارير استخداماً", + "ما هي البيانات غير المكتملة", + "اعرض السجلات المكررة", + "كم عدد المستخدمين الجدد", + "اعرض نشاط النظام اليوم", + "ما هي الوحدات الأكثر استخداماً", + "اعرض استهلاك التخزين", + "كم عدد التكاملات النشطة", + "اعرض حالة API", + "ما هي طلبات الاستيراد الجديدة", + "اعرض عمليات التصدير الأخيرة", + "كم عدد الملفات المحذوفة", + "اعرض السجلات المؤرشفة", + "ما هي قواعد العمل النشطة", + "اعرض عمليات الأتمتة الحالية", + "كم عدد التنبيهات المالية", + "اعرض تنبيهات المخزون", + "ما هي تنبيهات الجودة", + "اعرض تنبيهات العقود", + "كم عدد التنبيهات الحرجة", + "اعرض سجل الإشعارات", + "ما هي التوصيات الذكية", + "اعرض تحليلات الذكاء الاصطناعي", + "كم عدد التوقعات المتاحة", + "اعرض فرص التحسين", + "ما هي الاقتراحات التشغيلية", + "اعرض تحليل الاتجاهات", + "كم عدد المؤشرات المتراجعة", + "اعرض مقارنة الأداء السنوي", + "ما هي أهداف الشركة الحالية", + "اعرض نسبة تحقيق الأهداف", + "كم عدد المشاريع الرابحة", + "اعرض المشاريع حسب الأولوية", + "ما هي العمليات الأكثر تكلفة", + "اعرض كفاءة العمليات", + "كم عدد العمليات اليومية", + "اعرض الأداء العام للشركة", + "كيف أضيف عميل جديد", + "كيف أنشئ فاتورة مبيعات", + "كيف أعدل فاتورة مبيعات", + "كيف أحذف فاتورة مبيعات", + "كيف أرسل الفاتورة للعميل", + "كيف أطبع الفاتورة", + "كيف أضيف شعار الشركة في الفاتورة", + "كيف أضيف ضريبة القيمة المضافة", + "كيف أفعّل الفاتورة الإلكترونية", + "كيف أضيف QR Code للفواتير", + "كيف أغيّر تصميم الفاتورة", + "كيف أضيف خصم للفاتورة", + "كيف أضيف أكثر من ضريبة", + "كيف أعمل مرتجع مبيعات", + "كيف أتحقق من الفواتير غير المدفوعة", + "كيف أتابع تحصيلات العملاء", + "كيف أضيف دفعة من العميل", + "كيف أعمل كشف حساب عميل", + "كيف أتحقق من رصيد العميل", + "كيف أضيف حد ائتماني للعميل", + "كيف أوقف عميل عن الشراء", + "كيف أضيف مورد جديد", + "كيف أنشئ أمر شراء", + "كيف أستلم بضاعة من المورد", + "كيف أضيف فاتورة شراء", + "كيف أعمل مرتجع شراء", + "كيف أتابع دفعات الموردين", + "كيف أتحقق من الفواتير المستحقة", + "كيف أعمل طلب مواد", + "كيف أوافق على طلب شراء", + "كيف أضيف منتج جديد", + "كيف أضيف صورة للمنتج", + "كيف أضيف باركود للصنف", + "كيف أضيف رقم تسلسلي", + "كيف أتابع الدفعات", + "كيف أتحقق من المخزون", + "كيف أعمل جرد للمستودع", + "كيف أنقل مخزون بين المستودعات", + "كيف أضيف مستودع جديد", + "كيف أتابع حركة الصنف", + "كيف أتحقق من الأصناف منخفضة المخزون", + "كيف أضيف حد إعادة الطلب", + "كيف أعمل تسوية مخزون", + "كيف أتحقق من الأصناف الراكدة", + "كيف أضيف دفعات للأصناف", + "كيف أتحقق من تواريخ الصلاحية", + "كيف أعمل تحويل مخزني", + "كيف أضيف وحدة قياس جديدة", + "كيف أعدل سعر الصنف", + "كيف أضيف قائمة أسعار", + "كيف أخصص أسعار للعملاء", + "كيف أضيف خصومات للعملاء", + "كيف أتابع المبيعات اليومية", + "كيف أتحقق من أفضل المنتجات مبيعاً", + "كيف أتابع أداء المندوبين", + "كيف أضيف مندوب مبيعات", + "كيف أحدد عمولة المندوب", + "كيف أتابع زيارات العملاء", + "كيف أضيف فرصة بيعية", + "كيف أحول فرصة إلى عرض سعر", + "كيف أضيف عرض سعر", + "كيف أرسل عرض السعر بالبريد", + "كيف أتابع حالة عرض السعر", + "كيف أحول عرض السعر إلى أمر بيع", + "كيف أتابع الطلبات المفتوحة", + "كيف أضيف شحنة للطلب", + "كيف أتابع حالة التوصيل", + "كيف أضيف شركة شحن", + "كيف أتابع الشحنات", + "كيف أضيف تكاليف الشحن", + "كيف أعمل فاتورة شحن", + "كيف أضيف موظف جديد", + "كيف أعدل بيانات الموظف", + "كيف أتابع الحضور والانصراف", + "كيف أضيف جهاز بصمة", + "كيف أوافق على الإجازات", + "كيف أضيف رصيد إجازات", + "كيف أعمل كشف رواتب", + "كيف أضيف بدل للموظف", + "كيف أخصم من راتب الموظف", + "كيف أضيف ساعات إضافية", + "كيف أتابع تقييم الموظفين", + "كيف أضيف وظيفة شاغرة", + "كيف أضيف مرشح جديد", + "كيف أجدول مقابلة", + "كيف أرسل عرض وظيفي", + "كيف أضيف أصل جديد", + "كيف أتابع الأصول", + "كيف أضيف إهلاك للأصل", + "كيف أعمل صيانة للأصل", + "كيف أخصص أصل لموظف", + "كيف أعمل جرد للأصول", + "كيف أتحقق من الضمان", + "كيف أتابع صيانة المركبات", + "كيف أضيف مركبة جديدة", + "كيف أتابع استهلاك الوقود", + "كيف أضيف رحلة للمركبة", + "كيف أعمل أمر تصنيع", + "كيف أضيف BOM", + "كيف أتابع أوامر الإنتاج", + "كيف أتابع استهلاك المواد الخام", + "كيف أضيف خطة إنتاج", + "كيف أتحقق من تكلفة التصنيع", + "كيف أتابع الجودة", + "كيف أضيف فحص جودة", + "كيف أرفض منتج غير مطابق", + "كيف أتابع الهدر", + "كيف أضيف مشروع جديد", + "كيف أتابع مهام المشروع", + "كيف أضيف أعضاء للمشروع", + "كيف أتابع الوقت في المشروع", + "كيف أعمل فاتورة للمشروع", + "كيف أتابع ربحية المشروع", + "كيف أضيف عقد جديد", + "كيف أتابع العقود المنتهية", + "كيف أجدد العقد", + "كيف أضيف اشتراك شهري", + "كيف أتابع الاشتراكات", + "كيف أرسل تذكير بالتجديد", + "كيف أضيف تذكرة دعم", + "كيف أتابع حالة التذكرة", + "كيف أخصص تذكرة لموظف", + "كيف أضيف SLA", + "كيف أتابع رضا العملاء", + "كيف أضيف حملة تسويقية", + "كيف أرسل بريد جماعي", + "كيف أتابع نتائج الحملة", + "كيف أضيف كوبون خصم", + "كيف أتابع استخدام الكوبونات", + "كيف أربط المتجر الإلكتروني", + "كيف أستورد الطلبات من Shopify", + "كيف أربط WooCommerce", + "كيف أتابع طلبات المتجر", + "كيف أضيف بوابة دفع", + "كيف أربط Stripe", + "كيف أربط PayPal", + "كيف أفعل Apple Pay", + "كيف أضيف مستخدم جديد", + "كيف أعدل صلاحيات المستخدم", + "كيف أضيف Role جديد", + "كيف أمنع مستخدم من التعديل", + "كيف أتابع سجل النشاط", + "كيف أعمل نسخة احتياطية", + "كيف أسترجع النسخة الاحتياطية", + "كيف أرفع ملف Excel", + "كيف أستورد بيانات العملاء", + "كيف أستورد المنتجات", + "كيف أستورد الموردين", + "كيف أصدّر التقارير إلى Excel", + "كيف أخصص Dashboard", + "كيف أضيف تقرير جديد", + "كيف أعمل تقرير مخصص", + "كيف أستخدم Power BI مع ERPNext", + "كيف أتابع الأرباح والخسائر", + "كيف أتابع التدفقات النقدية", + "كيف أتحقق من الميزانية", + "كيف أضيف مركز تكلفة", + "كيف أضيف مركز ربح", + "كيف أتابع المصروفات", + "كيف أضيف مصروف جديد", + "كيف أوافق على المصروفات", + "كيف أضيف حساب بنكي", + "كيف أعمل مطابقة بنكية", + "كيف أضيف قيد يومية", + "كيف أراجع القيود المحاسبية", + "كيف أتحقق من الحسابات المدينة", + "كيف أتحقق من الحسابات الدائنة", + "كيف أتابع الضرائب", + "كيف أعمل إقرار ضريبي", + "كيف أفعّل زاتكا", + "كيف أتحقق من الفواتير المرفوضة", + "كيف أرسل الفواتير لزاتكا", + "كيف أعدل QR Code", + "كيف أضيف لغة عربية للنظام", + "كيف أغيّر العملة الافتراضية", + "كيف أضيف فرع جديد", + "كيف أضيف شركة جديدة", + "كيف أفعّل تعدد الشركات", + "كيف أتحقق من أرباح كل فرع", + "كيف أتابع أداء الفروع", + "كيف أخصص Workflow", + "كيف أضيف موافقات", + "كيف أرسل إشعارات تلقائية", + "كيف أفعّل البريد الإلكتروني", + "كيف أربط واتساب", + "كيف أرسل رسائل SMS", + "كيف أضيف Webhook", + "كيف أستخدم API", + "كيف أربط ERPNext مع نظام خارجي", + "كيف أعمل تكامل مع تطبيق الجوال", + "كيف أضيف Custom Field", + "كيف أضيف Print Format", + "كيف أعدل النماذج", + "كيف أخصص الصفحة الرئيسية", + "كيف أضيف Workspace", + "كيف أتابع مؤشرات الأداء", + "كيف أضيف KPI", + "كيف أستخدم الذكاء الاصطناعي", + "كيف أضيف Chatbot", + "كيف أستخدم OCR للفواتير", + "كيف أتابع العمليات المؤتمتة", + "كيف أجد الأخطاء في النظام", + "كيف أتابع Logs", + "كيف أتحقق من أداء السيرفر", + "كيف أزيد سرعة النظام", + "كيف أرقّي إصدار ERPNext", + "كيف أنقل النظام لسيرفر جديد", + "كيف أستخدم Docker مع ERPNext", + "كيف أركب ERPNext على Ubuntu", + "كيف أضبط دومين للنظام", + "كيف أفعّل SSL", + "كيف أضيف نسخ احتياطي تلقائي", + "كيف أتابع استهلاك التخزين", + "كيف أضيف بوابة عملاء", + "كيف أسمح للعملاء بمتابعة الطلبات", + "كيف أسمح للموردين برفع الفواتير", + "كيف أفعّل بوابة الموظفين", + "كيف أتابع طلبات الدعم الداخلي", + "كيف أضيف قواعد عمل", + "كيف أخصص Approval Matrix", + "كيف أضيف تنبيه للمخزون", + "كيف أتابع الأصناف الأكثر ربحية", + "كيف أتابع المبيعات حسب المنطقة", + "كيف أتحقق من العملاء الأعلى شراء", + "كيف أتابع أداء الحملات التسويقية", + "كيف أتابع التحويلات البنكية", + "كيف أتحقق من الشيكات المرتجعة", + "كيف أتابع الديون المتأخرة", + "كيف أتحقق من السيولة", + "كيف أتابع التكاليف التشغيلية", + "كيف أتحقق من الانحرافات المالية", + "كيف أضيف Budget", + "كيف أتحقق من تجاوز الميزانية", + "كيف أتابع المصاريف حسب القسم", + "كيف أتابع الإيرادات حسب المنتج", + "كيف أتابع الأرباح حسب العميل", + "كيف أتحقق من المنتجات منخفضة الربحية", + "كيف أتابع استهلاك المواد الخام", + "كيف أتابع أوامر العمل", + "كيف أضيف Job Card", + "كيف أتابع العمال في الإنتاج", + "كيف أتحقق من وقت التوقف", + "كيف أتابع الأعطال", + "كيف أضيف خطة صيانة", + "كيف أتابع أوامر الصيانة", + "كيف أضيف Quality Inspection", + "كيف أتابع نتائج الجودة", + "كيف أضيف Warehouse جديد", + "كيف أتابع السعات التخزينية", + "كيف أتحقق من المستودعات الممتلئة", + "كيف أتابع تواريخ انتهاء المنتجات", + "كيف أتابع المنتجات التالفة", + "كيف أعمل إعادة تعبئة تلقائية", + "كيف أتابع طلبات إعادة الشراء", + "كيف أخصص الأصناف للعملاء", + "كيف أضيف Bundle للمنتجات", + "كيف أتابع المنتجات المركبة", + "كيف أضيف خدمة جديدة", + "كيف أتابع إيرادات الخدمات", + "كيف أعمل Subscription", + "كيف أرسل فاتورة متكررة", + "كيف أتابع التجديدات", + "كيف أتابع العملاء غير النشطين", + "كيف أرسل عروض ترويجية", + "كيف أتابع المبيعات حسب الوقت", + "كيف أتحقق من ساعات الذروة", + "كيف أضيف Loyalty Program", + "كيف أتابع نقاط الولاء", + "كيف أستخدم البيع الإضافي", + "كيف أستخدم البيع المتقاطع", + "كيف أتابع العملاء المتوقع فقدانهم", + "كيف أستخدم Predictive Analytics", + "كيف أتابع Forecast للمبيعات", + "كيف أتابع الطلب المتوقع", + "كيف أستخدم لوحات التحكم التنفيذية", + "كيف أتابع KPIs اليومية", + "كيف أتحقق من مؤشرات الأداء الحرجة", + "كيف أتابع أداء الشركة بالكامل", + "كيف أعمل Audit Trail", + "كيف أتحقق من التعديلات", + "كيف أراجع العمليات المحذوفة", + "كيف أفعّل التوقيع الإلكتروني", + "كيف أؤرشف المستندات", + "كيف أرفع العقود", + "كيف أتابع صلاحيات الملفات", + "كيف أتابع استخدام النظام", + "كيف أتحقق من المستخدمين النشطين", + "كيف أتابع استهلاك الرخص", + "كيف أتابع التكاملات", + "كيف أضيف Google Sheets Integration", + "كيف أضيف Tableau Integration", + "كيف أتابع API Requests", + "كيف أستخدم REST API", + "كيف أضيف GraphQL API", + "كيف أراقب Background Jobs", + "كيف أتابع Scheduler", + "كيف أستخدم Bench Commands", + "كيف أعمل Update للنظام", + "كيف أعمل Patch", + "كيف أتابع Health Check", + "كيف أستخدم Frappe Framework", + "كيف أطور App مخصص", + "كيف أضيف Client Script", + "كيف أضيف Server Script", + "كيف أستخدم Query Report", + "كيف أستخدم Script Report", + "كيف أخصص Kanban", + "كيف أستخدم Calendar", + "كيف أتابع الأنشطة اليومية", + "كيف أضيف Reminder", + "كيف أستخدم Auto Repeat", + "كيف أرسل إشعارات تلقائية للعملاء", + "كيف أتابع الشحنات الدولية", + "كيف أضيف رسوم جمركية", + "كيف أتابع تكاليف الاستيراد", + "كيف أستخدم Multi Currency", + "كيف أتابع أسعار الصرف", + "كيف أضيف حسابات متعددة العملات", + "كيف أتابع أرباح العملات", + "كيف أستخدم Multi Language", + "كيف أفعّل العربية والإنجليزية", + "كيف أخصص RTL", + "كيف أضيف تقارير عربية", + "كيف أخصص POS بالعربي", + "كيف أتابع أداء نقاط البيع", + "كيف أعمل إغلاق يومي للصندوق", + "كيف أتابع النقدية اليومية", + "كيف أستخدم Offline POS", + "كيف أضيف Barcode Scanner", + "كيف أستخدم QR Invoice", + "كيف أضيف Delivery Note", + "كيف أتابع Purchase Receipt", + "كيف أستخدم Material Request", + "كيف أتابع Buying Module", + "كيف أتابع Selling Module", + "كيف أستخدم Stock Module", + "كيف أستخدم CRM Module", + "كيف أستخدم HR Module", + "كيف أستخدم Manufacturing Module", + "كيف أستخدم Projects Module", + "كيف أستخدم Helpdesk Module", + "كيف أستخدم Asset Module", + "كيف أستخدم Maintenance Module", + "كيف أستخدم Quality Module", + "كيف أستخدم Subscription Module", + "كيف أستخدم Website Module", + "كيف أتابع مؤشرات النجاح", + "كيف أستخدم Dashboard التنفيذي", + "كيف أستخدم التقارير الذكية", + "كيف أتابع نمو الشركة", + "كيف أستخدم ERPNext بكفاءة", + "كيف أبدأ باستخدام ERPNext", + "كيف أدرّب الموظفين على ERPNext", + "كيف أجهّز النظام للشركة", + "كيف أختبر النظام قبل التشغيل", + "كيف أطلق ERPNext للشركة", + "كيف أتابع الدعم الفني", + "كيف أطلب تخصيص للنظام", + "كيف أضيف متطلبات خاصة", + "كيف أستخدم ERPNext في الخليج", + "كيف أستخدم ERPNext في السعودية", + "كيف أستخدم ERPNext مع الفاتورة الإلكترونية", + "كيف أستخدم ERPNext مع ضريبة القيمة المضافة", + "كيف أستفيد من ERPNext لأتمتة الأعمال", + "كيف أستخدم ERPNext لتحليل الأعمال", + "كيف أستخدم ERPNext لإدارة الشركة بالكامل", + "إدارة الأعمال", + "حلول الأعمال", + "إدارة الشركات", + "أتمتة الأعمال", + "تحول رقمي", + "إدارة العمليات", + "إدارة الموارد", + "إدارة المؤسسات", + "إدارة البيانات", + "إدارة العملاء", + "إدارة الموردين", + "إدارة الموظفين", + "إدارة الحسابات", + "إدارة الفروع", + "إدارة المشاريع", + "إدارة العقود", + "إدارة الاشتراكات", + "إدارة المبيعات", + "إدارة المشتريات", + "إدارة المخزون", + "إدارة المستودعات", + "إدارة التصنيع", + "إدارة الصيانة", + "إدارة الجودة", + "إدارة الأصول", + "إدارة الأسطول", + "إدارة الخدمات", + "إدارة الدعم الفني", + "إدارة التذاكر", + "إدارة الحملات", + "إدارة التسويق", + "إدارة التحصيل", + "إدارة النقدية", + "إدارة السيولة", + "إدارة الميزانيات", + "إدارة الضرائب", + "إدارة الرواتب", + "إدارة الحضور", + "إدارة الإجازات", + "إدارة التوظيف", + "إدارة الأداء", + "إدارة الوقت", + "إدارة المهام", + "إدارة الإنتاج", + "إدارة الشحن", + "إدارة النقل", + "إدارة التوريد", + "إدارة الطلبات", + "إدارة الفواتير", + "إدارة التحليلات", + "إدارة التقارير", + "إدارة المخاطر", + "إدارة الامتثال", + "إدارة السلامة", + "إدارة الطاقة", + "إدارة الوثائق", + "إدارة الملفات", + "إدارة الصلاحيات", + "إدارة المستخدمين", + "إدارة الأنشطة", + "إدارة العمليات اليومية", + "إدارة الاستثمارات", + "إدارة الإيرادات", + "إدارة المصروفات", + "إدارة الأرباح", + "إدارة التكاليف", + "إدارة الجودة الشاملة", + "إدارة سلسلة التوريد", + "إدارة علاقات العملاء", + "إدارة علاقات الموردين", + "إدارة الأعمال السحابية", + "إدارة التجارة الإلكترونية", + "إدارة نقاط البيع", + "إدارة التوزيع", + "إدارة المبيعات الميدانية", + "إدارة مراكز التكلفة", + "إدارة مراكز الربح", + "إدارة الأداء المؤسسي", + "إدارة مؤشرات الأداء", + "إدارة البيانات الضخمة", + "إدارة التحول المؤسسي", + "إدارة العمليات الذكية", + "إدارة الخدمات الرقمية", + "إدارة الحلول الذكية", + "إدارة الأنظمة", + "إدارة التطبيقات", + "إدارة التكاملات", + "إدارة واجهات API", + "إدارة النسخ الاحتياطي", + "إدارة السيرفرات", + "إدارة الاستضافة", + "إدارة الأمن السيبراني", + "إدارة الوصول", + "إدارة التراخيص", + "إدارة الصفقات", + "إدارة العملاء المحتملين", + "إدارة الفرص البيعية", + "إدارة عروض الأسعار", + "إدارة أوامر البيع", + "إدارة أوامر الشراء", + "إدارة الجرد", + "إدارة التحويلات المخزنية", + "إدارة المرتجعات", + "إدارة الفروع المتعددة", + "إدارة الشركات المتعددة", + "إدارة العملات المتعددة", + "إدارة اللغات", + "إدارة الفاتورة الإلكترونية", + "إدارة ضريبة القيمة المضافة", + "إدارة الامتثال الضريبي", + "إدارة المراجعة المالية", + "إدارة التدقيق", + "إدارة التدفقات النقدية", + "إدارة الحسابات المدينة", + "إدارة الحسابات الدائنة", + "إدارة التحصيلات", + "إدارة المدفوعات", + "إدارة الشيكات", + "إدارة البنوك", + "إدارة القيود اليومية", + "إدارة دفتر الأستاذ", + "إدارة الأرباح والخسائر", + "إدارة الميزانية العمومية", + "إدارة التنبؤ المالي", + "إدارة التوقعات", + "إدارة التخطيط", + "إدارة الطلب المتوقع", + "إدارة المخزون المتوقع", + "إدارة الإنتاج المتوقع", + "إدارة المبيعات المستقبلية", + "إدارة الأتمتة الذكية", + "إدارة الذكاء الاصطناعي", + "إدارة Chatbot", + "إدارة OCR", + "إدارة التحليل التنبئي", + "إدارة التوصيات الذكية", + "إدارة التقارير التنفيذية", + "إدارة لوحات التحكم", + "إدارة البيانات التحليلية", + "إدارة ذكاء الأعمال", + "إدارة البيانات اللحظية", + "إدارة العمليات المؤتمتة", + "إدارة الموافقات", + "إدارة Workflow", + "إدارة التنبيهات", + "إدارة الإشعارات", + "إدارة البريد الإلكتروني", + "إدارة الرسائل النصية", + "إدارة واتساب للأعمال", + "إدارة الحملات البريدية", + "إدارة الولاء", + "إدارة نقاط الولاء", + "إدارة الكوبونات", + "إدارة الخصومات", + "إدارة الأسعار", + "إدارة التسعير", + "إدارة العمولات", + "إدارة فرق المبيعات", + "إدارة المناطق البيعية", + "إدارة الفروع التجارية", + "إدارة علاقات الشركاء", + "إدارة التوصيل", + "إدارة الشحنات", + "إدارة الحاويات", + "إدارة الجمارك", + "إدارة الاستيراد", + "إدارة التصدير", + "إدارة المستودعات الذكية", + "إدارة الروبوتات", + "إدارة المصانع الذكية", + "إدارة إنترنت الأشياء", + "إدارة تتبع الأصول", + "إدارة تتبع المنتجات", + "إدارة الأرقام التسلسلية", + "إدارة الدفعات", + "إدارة الباركود", + "إدارة QR Code", + "إدارة المنتجات", + "إدارة الأصناف", + "إدارة الفئات", + "إدارة العلامات التجارية", + "إدارة الموردين المعتمدين", + "إدارة العملاء المميزين", + "إدارة العملاء المتأخرين", + "إدارة التحصيل الإلكتروني", + "إدارة بوابات الدفع", + "إدارة المدفوعات الإلكترونية", + "إدارة Apple Pay", + "إدارة Google Pay", + "إدارة Stripe", + "إدارة PayPal", + "إدارة STC Pay", + "إدارة مدى", + "إدارة المتاجر الإلكترونية", + "إدارة Shopify", + "إدارة WooCommerce", + "إدارة Magento", + "إدارة سلة", + "إدارة زد", + "إدارة أمازون", + "إدارة نون", + "إدارة المنتجات الرقمية", + "إدارة الخدمات السحابية", + "إدارة العقارات", + "إدارة المقاولات", + "إدارة المشاريع الإنشائية", + "إدارة المدارس", + "إدارة الجامعات", + "إدارة المستشفيات", + "إدارة العيادات", + "إدارة الصيدليات", + "إدارة المطاعم", + "إدارة الكافيهات", + "إدارة الفنادق", + "إدارة شركات الشحن", + "إدارة شركات التوزيع", + "إدارة المصانع", + "إدارة الشركات التجارية", + "إدارة شركات الخدمات", + "إدارة شركات البرمجيات", + "إدارة شركات التسويق", + "إدارة شركات الصيانة", + "إدارة شركات النقل", + "إدارة شركات التأجير", + "إدارة شركات الاستثمار", + "إدارة شركات الأغذية", + "إدارة شركات التجزئة", + "إدارة شركات الجملة", + "إدارة شركات الاستيراد", + "إدارة شركات التصدير", + "إدارة شركات الطاقة", + "إدارة شركات الاتصالات", + "إدارة شركات التعليم", + "إدارة شركات الرعاية الصحية", + "إدارة الشركات الصناعية", + "إدارة الشركات اللوجستية", + "إدارة المؤسسات الحكومية", + "إدارة الجمعيات", + "إدارة المنظمات", + "إدارة الأعمال اليومية", + "إدارة العمليات التشغيلية", + "إدارة العمليات المالية", + "إدارة العمليات التجارية", + "إدارة العمليات اللوجستية", + "إدارة العمليات الصناعية", + "إدارة العمليات الإدارية", + "إدارة التحسين المستمر", + "إدارة الجودة التشغيلية", + "إدارة الإنتاجية", + "إدارة الكفاءة", + "إدارة مؤشرات النجاح", + "إدارة نمو الأعمال", + "إدارة توسع الشركات", + "إدارة الاستدامة", + "إدارة إعادة التدوير", + "إدارة استهلاك الطاقة", + "إدارة استهلاك الوقود", + "إدارة انبعاثات الكربون", + "إدارة السلامة المهنية", + "إدارة الحوادث التشغيلية", + "إدارة الامتثال القانوني", + "إدارة الوثائق القانونية", + "إدارة العقود الرقمية", + "إدارة التوقيع الإلكتروني", + "إدارة أرشفة المستندات", + "إدارة النسخ الرقمية", + "إدارة مشاركة الملفات", + "إدارة صلاحيات الملفات", + "إدارة بوابات العملاء", + "إدارة بوابات الموردين", + "إدارة بوابات الموظفين", + "إدارة الخدمة الذاتية", + "إدارة التطبيقات المحمولة", + "إدارة التطبيقات السحابية", + "إدارة الدعم السحابي", + "إدارة الأداء السحابي", + "إدارة البيانات السحابية", + "إدارة التقارير السحابية", + "إدارة التكامل السحابي", + "إدارة الأنظمة المفتوحة", + "إدارة البرمجيات مفتوحة المصدر", + "إدارة تخصيص الأنظمة", + "إدارة تطوير التطبيقات", + "إدارة تطوير البرمجيات", + "إدارة فرق التطوير", + "إدارة DevOps", + "إدارة Git", + "إدارة CI/CD", + "إدارة Docker", + "إدارة Kubernetes", + "إدارة Linux", + "إدارة Ubuntu", + "إدارة قواعد البيانات", + "إدارة MariaDB", + "إدارة PostgreSQL", + "إدارة Redis", + "إدارة Nginx", + "إدارة الأداء التقني", + "إدارة سجلات النظام", + "إدارة الأخطاء", + "إدارة المراقبة", + "إدارة Health Check", + "إدارة الصيانة التقنية", + "إدارة التحديثات", + "إدارة الترقيات", + "إدارة نقل البيانات", + "إدارة الترحيل", + "إدارة استعادة البيانات", + "إدارة الكوارث", + "إدارة استمرارية الأعمال", + "إدارة الحلول المؤسسية", + "إدارة الأنظمة المتكاملة", + "إدارة الموارد المؤسسية", + "إدارة الأنظمة المالية", + "إدارة الأنظمة المحاسبية", + "إدارة الأنظمة التجارية", + "إدارة الأنظمة اللوجستية", + "إدارة الأنظمة الصناعية", + "إدارة الأنظمة الذكية", + "إدارة حلول ERP", + "إدارة حلول ERPNext", + "إدارة حلول Frappe", + "إدارة الأنظمة الخليجية", + "إدارة الأنظمة العربية", + "إدارة الشركات الخليجية", + "إدارة الشركات السعودية", + "إدارة الشركات الإماراتية", + "إدارة الشركات القطرية", + "إدارة الشركات الكويتية", + "إدارة الشركات البحرينية", + "إدارة الشركات العمانية", + "إدارة الشركات العراقية", + "إدارة الشركات المصرية", + "إدارة حلول الأعمال الخليجية", + "إدارة المؤسسات الذكية", + "إدارة التقنيات الحديثة", + "إدارة التحول الرقمي المؤسسي", + "إدارة الابتكار", + "إدارة التغيير المؤسسي", + "إدارة الأداء الذكي", + "إدارة المراقبة الذكية", + "إدارة التنبؤات الذكية", + "إدارة التوصيات الآلية", + "إدارة العمليات المعتمدة على البيانات", + "إدارة القرارات الذكية", + "إدارة العمليات المتقدمة", + "إدارة الحلول الرقمية", + "إدارة الحلول المتكاملة", + "إدارة الخدمات المؤسسية", + "إدارة الخدمات المشتركة", + "إدارة الدعم المؤسسي", + "إدارة مراكز الخدمة", + "إدارة التفاعل مع العملاء", + "إدارة رضا العملاء", + "إدارة تجربة العملاء", + "إدارة جودة الخدمة", + "إدارة اتفاقيات الخدمة", + "إدارة الطلبات الإلكترونية", + "إدارة التتبع المباشر", + "إدارة الشحن الذكي", + "إدارة التوصيل السريع", + "إدارة الأساطيل", + "إدارة السائقين", + "إدارة الرحلات", + "إدارة الوقود", + "إدارة التكاليف التشغيلية", + "إدارة العمليات الحرجة", + "إدارة المخزون الذكي", + "إدارة التوزيع الذكي", + "إدارة الطلبات الذكية", + "إدارة التوريد الذكي", + "إدارة المشتريات الذكية", + "إدارة المبيعات الذكية", + "إدارة المحاسبة الذكية", + "إدارة الموارد البشرية الذكية", + "إدارة التقارير الذكية", + "إدارة التحليلات الذكية", + "إدارة الأداء المالي", + "إدارة الأرباح التشغيلية", + "إدارة الربحية", + "إدارة النمو المالي", + "إدارة الإيرادات المتكررة", + "إدارة الاشتراكات الرقمية", + "إدارة الفوترة التلقائية", + "إدارة العمليات التلقائية", + "إدارة الموافقات التلقائية", + "إدارة التنبيهات التلقائية", + "إدارة الإشعارات الذكية", + "إدارة البريد الذكي", + "إدارة الرسائل التلقائية", + "إدارة المحادثات الذكية", + "إدارة الردود التلقائية", + "إدارة العملاء الذكية", + "إدارة العلاقات المؤسسية", + "إدارة الأداء التجاري", + "إدارة البيانات التشغيلية", + "إدارة تقارير KPI", + "إدارة التقارير المالية الذكية", + "إدارة التقارير التشغيلية", + "إدارة التقارير التحليلية", + "إدارة المعلومات المؤسسية", + "إدارة الرؤية التنفيذية", + "إدارة اتخاذ القرار", + "إدارة نجاح الأعمال", + "إدارة استراتيجيات الأعمال", + "إدارة التخطيط الاستراتيجي", + "إدارة خطط النمو", + "إدارة فرص الأعمال", + "إدارة الابتكار المؤسسي", + "إدارة التحسين التشغيلي", + "إدارة التحسين المالي", + "إدارة التحسين الإداري", + "إدارة الأنشطة التجارية", + "إدارة حلول المؤسسات الذكية", + "إدارة أنظمة الشركات الكبرى", + "إدارة الحلول السحابية الحديثة", + "إدارة البنية التحتية الرقمية", + "إدارة خدمات الأعمال الرقمية", + "إدارة التطبيقات المؤسسية", + "إدارة بيانات الشركات", + "إدارة البيانات التشغيلية الذكية", + "إدارة الحلول القابلة للتوسع", + "إدارة الأداء المؤسسي الذكي", + "إدارة حلول الأعمال المتقدمة", + "نظام إدارة مالي", + "نظام إدارة مخزون", + "نظام إدارة مبيعات", + "نظام إدارة مشتريات", + "نظام إدارة موارد بشرية", + "نظام إدارة مشاريع", + "نظام إدارة أصول", + "نظام إدارة جودة", + "نظام إدارة صيانة", + "نظام إدارة تصنيع", + "نظام إدارة مستودعات", + "نظام إدارة توزيع", + "نظام إدارة شحن", + "نظام إدارة نقل", + "نظام إدارة عملاء", + "نظام إدارة موردين", + "نظام إدارة نقاط بيع", + "نظام إدارة تجارة إلكترونية", + "نظام إدارة عقود", + "نظام إدارة اشتراكات", + "نظام إدارة خدمات", + "نظام إدارة تذاكر", + "نظام إدارة دعم فني", + "نظام إدارة أسطول", + "نظام إدارة فروع", + "نظام إدارة شركات", + "نظام إدارة مؤسسات", + "نظام إدارة عمليات", + "نظام إدارة أعمال", + "نظام إدارة بيانات", + "نظام محاسبة سحابي", + "نظام ERP سحابي", + "نظام ERP عربي", + "نظام ERP متكامل", + "نظام ERP للشركات", + "نظام ERP للمؤسسات", + "نظام ERP للمصانع", + "نظام ERP للمخازن", + "نظام ERP للتجارة", + "نظام ERP للمقاولات", + "نظام ERP للمطاعم", + "نظام ERP للعيادات", + "نظام ERP للصيدليات", + "نظام ERP للمدارس", + "نظام ERP للجامعات", + "نظام ERP للمستشفيات", + "نظام ERP للشحن", + "نظام ERP للخدمات", + "نظام ERP للتوزيع", + "نظام ERP للبيع بالتجزئة", + "نظام ERP للبيع بالجملة", + "نظام ERP متعدد الفروع", + "نظام ERP متعدد الشركات", + "نظام ERP متعدد العملات", + "نظام ERP متعدد اللغات", + "نظام ERP ضريبة القيمة المضافة", + "نظام ERP الفاتورة الإلكترونية", + "نظام ERP متوافق مع زاتكا", + "نظام ERP للفاتورة الإلكترونية", + "نظام ERP عربي سعودي", + "نظام ERP خليجي", + "نظام ERP للشركات السعودية", + "نظام ERP للشركات الإماراتية", + "نظام ERP للشركات القطرية", + "نظام ERP للشركات الكويتية", + "نظام ERP للشركات البحرينية", + "نظام ERP للشركات العمانية", + "نظام ERP للشركات العراقية", + "نظام ERP للشركات المصرية", + "نظام نقاط بيع POS", + "نظام نقاط بيع سحابي", + "نظام نقاط بيع للمطاعم", + "نظام نقاط بيع للتجزئة", + "نظام نقاط بيع للسوبرماركت", + "نظام كاشير", + "نظام مبيعات", + "نظام فواتير", + "نظام فواتير إلكترونية", + "نظام إدارة الحسابات", + "نظام الحسابات العامة", + "نظام الحسابات المدينة", + "نظام الحسابات الدائنة", + "نظام إدارة الضرائب", + "نظام إدارة الرواتب", + "نظام إدارة الحضور والانصراف", + "نظام إدارة الموظفين", + "نظام إدارة التوظيف", + "نظام إدارة الإجازات", + "نظام إدارة الأداء الوظيفي", + "نظام إدارة العملاء CRM", + "نظام إدارة الموردين SRM", + "نظام إدارة المشاريع PM", + "نظام إدارة المستودعات WMS", + "نظام إدارة النقل TMS", + "نظام إدارة التصنيع MRP", + "نظام إدارة الأصول EAM", + "نظام إدارة الجودة QMS", + "نظام إدارة الصيانة CMMS", + "نظام إدارة الخدمات", + "نظام إدارة الدعم الفني", + "نظام إدارة التذاكر Helpdesk", + "نظام إدارة الوثائق", + "نظام إدارة العقود الرقمية", + "نظام إدارة الملفات", + "نظام أرشفة إلكترونية", + "نظام إدارة المهام", + "نظام إدارة الاجتماعات", + "نظام إدارة المواعيد", + "نظام إدارة العمولات", + "نظام إدارة الولاء", + "نظام إدارة الكوبونات", + "نظام إدارة الخصومات", + "نظام إدارة الحملات التسويقية", + "نظام إدارة البريد الإلكتروني", + "نظام إدارة الرسائل النصية", + "نظام إدارة واتساب للأعمال", + "نظام ذكاء أعمال", + "نظام تحليلات أعمال", + "نظام تقارير ذكية", + "نظام لوحات تحكم", + "نظام مؤشرات أداء", + "نظام KPI", + "نظام ذكاء اصطناعي للأعمال", + "نظام Chatbot للشركات", + "نظام OCR للفواتير", + "نظام أتمتة الأعمال", + "نظام Workflow للموافقات", + "نظام تنبيهات ذكي", + "نظام إشعارات تلقائي", + "نظام متابعة العمليات", + "نظام مراقبة الأداء", + "نظام مراقبة المخزون", + "نظام مراقبة الإنتاج", + "نظام مراقبة الجودة", + "نظام تخطيط الموارد", + "نظام تخطيط الإنتاج", + "نظام تخطيط الطلب", + "نظام تخطيط التوريد", + "نظام تخطيط المبيعات", + "نظام تخطيط الميزانية", + "نظام تخطيط المشاريع", + "نظام تحليل الأرباح", + "نظام تحليل المبيعات", + "نظام تحليل العملاء", + "نظام تحليل المخزون", + "نظام تحليل التكاليف", + "نظام تحليل الأداء", + "نظام تحليل الإيرادات", + "نظام تحليل المصروفات", + "نظام تحليل البيانات", + "نظام التنبؤ بالمبيعات", + "نظام التنبؤ بالمخزون", + "نظام التنبؤ المالي", + "نظام التحليل التنبئي", + "نظام إدارة التحصيلات", + "نظام إدارة المدفوعات", + "نظام إدارة النقدية", + "نظام إدارة السيولة", + "نظام إدارة البنوك", + "نظام إدارة الشيكات", + "نظام إدارة القيود اليومية", + "نظام إدارة دفتر الأستاذ", + "نظام إدارة التقارير المالية", + "نظام الأرباح والخسائر", + "نظام الميزانية العمومية", + "نظام التدفقات النقدية", + "نظام إدارة الميزانيات", + "نظام إدارة مراكز التكلفة", + "نظام إدارة مراكز الربح", + "نظام إدارة المصروفات", + "نظام إدارة الإيرادات", + "نظام إدارة الضرائب الخليجية", + "نظام ضريبة القيمة المضافة الخليج", + "نظام زاتكا للفواتير", + "نظام QR Code للفواتير", + "نظام باركود للمخزون", + "نظام تتبع المنتجات", + "نظام تتبع الشحنات", + "نظام تتبع الأصول", + "نظام تتبع المركبات", + "نظام تتبع الموظفين", + "نظام تتبع الطلبات", + "نظام تتبع الإنتاج", + "نظام تتبع الجودة", + "نظام تتبع الصيانة", + "نظام إدارة سلسلة التوريد", + "نظام إدارة العمليات اللوجستية", + "نظام إدارة الاستيراد", + "نظام إدارة التصدير", + "نظام إدارة الجمارك", + "نظام إدارة التوصيل", + "نظام إدارة الشحنات", + "نظام إدارة الحاويات", + "نظام إدارة الرحلات", + "نظام إدارة الوقود", + "نظام إدارة السائقين", + "نظام إدارة الأساطيل", + "نظام إدارة المستودعات الذكية", + "نظام إدارة المصانع الذكية", + "نظام إدارة الروبوتات", + "نظام إدارة إنترنت الأشياء", + "نظام إدارة الطاقة", + "نظام إدارة الاستدامة", + "نظام إدارة السلامة", + "نظام إدارة الحوادث", + "نظام إدارة المخاطر", + "نظام إدارة الامتثال", + "نظام إدارة التدقيق", + "نظام إدارة الجودة الشاملة", + "نظام إدارة التحسين المستمر", + "نظام إدارة الكفاءة التشغيلية", + "نظام إدارة الأداء المؤسسي", + "نظام إدارة التحول الرقمي", + "نظام إدارة الابتكار", + "نظام إدارة التغيير المؤسسي", + "نظام إدارة البيانات الضخمة", + "نظام إدارة التطبيقات", + "نظام إدارة السيرفرات", + "نظام إدارة الاستضافة السحابية", + "نظام إدارة الأمن السيبراني", + "نظام إدارة النسخ الاحتياطي", + "نظام إدارة قواعد البيانات", + "نظام إدارة Linux", + "نظام إدارة Docker", + "نظام إدارة Kubernetes", + "نظام إدارة API", + "نظام إدارة التكاملات", + "نظام إدارة التطبيقات المحمولة", + "نظام إدارة المتاجر الإلكترونية", + "نظام إدارة Shopify", + "نظام إدارة WooCommerce", + "نظام إدارة Magento", + "نظام إدارة Amazon", + "نظام إدارة Noon", + "نظام إدارة سلة", + "نظام إدارة زد", + "نظام إدارة Power BI", + "نظام إدارة Tableau", + "نظام إدارة Excel", + "نظام إدارة Google Sheets", + "نظام إدارة البريد الإلكتروني للشركات", + "نظام إدارة المراسلات", + "نظام إدارة العقود الإلكترونية", + "نظام إدارة التوقيع الإلكتروني", + "نظام إدارة صلاحيات المستخدمين", + "نظام إدارة المستخدمين", + "نظام إدارة الأدوار", + "نظام إدارة الوصول", + "نظام إدارة الأنشطة", + "نظام إدارة Logs", + "نظام إدارة Health Check", + "نظام إدارة الأداء التقني", + "نظام إدارة DevOps", + "نظام إدارة Git", + "نظام إدارة التطوير", + "نظام إدارة التطبيقات المؤسسية", + "نظام إدارة الموارد المؤسسية", + "نظام إدارة الحلول الرقمية", + "نظام إدارة الحلول السحابية", + "نظام إدارة الحلول الذكية", + "نظام إدارة الخدمات الرقمية", + "نظام إدارة الأعمال السحابية", + "نظام إدارة المؤسسات الذكية", + "نظام إدارة العمليات الذكية", + "نظام إدارة الأعمال الذكية", + "نظام إدارة البيانات الذكية", + "نظام إدارة التقارير الذكية", + "نظام إدارة التحليلات الذكية", + "نظام إدارة العمليات المؤتمتة", + "نظام إدارة المبيعات الذكية", + "نظام إدارة المشتريات الذكية", + "نظام إدارة المحاسبة الذكية", + "نظام إدارة المخزون الذكي", + "نظام إدارة التصنيع الذكي", + "نظام إدارة الموارد البشرية الذكية", + "نظام إدارة التوصيات الذكية", + "نظام إدارة القرارات الذكية", + "نظام إدارة العمليات الحرجة", + "نظام إدارة التكاليف التشغيلية", + "نظام إدارة الإيرادات المتكررة", + "نظام إدارة الاشتراكات الرقمية", + "نظام إدارة الفوترة التلقائية", + "نظام إدارة الموافقات التلقائية", + "نظام إدارة التنبيهات التلقائية", + "نظام إدارة الإشعارات الذكية", + "نظام إدارة البريد الذكي", + "نظام إدارة الردود التلقائية", + "نظام إدارة المحادثات الذكية", + "نظام إدارة البيانات التشغيلية", + "نظام إدارة التقارير التشغيلية", + "نظام إدارة التقارير التنفيذية", + "نظام إدارة الرؤية التنفيذية", + "نظام إدارة القرارات المؤسسية", + "نظام إدارة الاستراتيجيات", + "نظام إدارة نمو الأعمال", + "نظام إدارة توسع الشركات", + "نظام إدارة فرص الأعمال", + "نظام إدارة الحلول المؤسسية", + "نظام إدارة الشركات الكبرى", + "نظام إدارة الشركات الصغيرة", + "نظام إدارة الشركات المتوسطة", + "نظام إدارة قطاع التجزئة", + "نظام إدارة قطاع الجملة", + "نظام إدارة قطاع التصنيع", + "نظام إدارة قطاع الخدمات", + "نظام إدارة قطاع التعليم", + "نظام إدارة قطاع الصحة", + "نظام إدارة قطاع العقارات", + "نظام إدارة قطاع المقاولات", + "نظام إدارة قطاع النقل", + "نظام إدارة قطاع الشحن", + "نظام إدارة قطاع اللوجستيات", + "نظام إدارة قطاع الأغذية", + "نظام إدارة قطاع المطاعم", + "نظام إدارة قطاع الفنادق", + "نظام إدارة قطاع الاتصالات", + "نظام إدارة قطاع الطاقة", + "نظام إدارة قطاع التجارة الإلكترونية", + "نظام إدارة قطاع التوزيع", + "نظام إدارة قطاع الاستثمار", + "نظام إدارة قطاع الصيانة", + "نظام إدارة قطاع البرمجيات", + "نظام إدارة قطاع التسويق", + "نظام إدارة قطاع المؤسسات الحكومية", + "نظام إدارة قطاع المنظمات", + "نظام إدارة قطاع الجمعيات", + "حلول ERP متقدمة", + "حلول ERP سحابية", + "حلول ERP ذكية", + "حلول ERP للمؤسسات", + "حلول ERP للشركات الكبرى", + "حلول ERP للشركات الصغيرة", + "حلول ERP للشركات المتوسطة", + "حلول ERP للتصنيع", + "حلول ERP للتجارة", + "حلول ERP للمخزون", + "حلول ERP للمحاسبة", + "حلول ERP للمبيعات", + "حلول ERP للمشتريات", + "حلول ERP للموارد البشرية", + "حلول ERP للمشاريع", + "حلول ERP للأصول", + "حلول ERP للصيانة", + "حلول ERP للخدمات", + "حلول ERP اللوجستية", + "حلول ERP الذكية", + "حلول ERP الرقمية", + "حلول ERP الخليجية", + "حلول ERP العربية", + "حلول ERP السحابية", + "حلول ERP مفتوحة المصدر", + "حلول ERP قابلة للتخصيص", + "حلول ERP متكاملة", + "حلول ERP للشركات متعددة الفروع", + "حلول ERP للشركات متعددة العملات", + "حلول ERP للشركات متعددة اللغات", + "حلول ERP للفاتورة الإلكترونية", + "حلول ERP لضريبة القيمة المضافة", + "حلول ERP لزاتكا", + "حلول ERP للمتاجر الإلكترونية", + "حلول ERP لنقاط البيع", + "حلول ERP لإدارة العملاء", + "حلول ERP لإدارة الموردين", + "حلول ERP لإدارة البيانات", + "حلول ERP لإدارة التحليلات", + "حلول ERP لإدارة العمليات", + "حلول ERP لإدارة الجودة", + "حلول ERP لإدارة الصيانة", + "حلول ERP لإدارة الأساطيل", + "حلول ERP لإدارة الشحن", + "حلول ERP لإدارة التوزيع", + "حلول ERP لإدارة التصنيع", + "حلول ERP لإدارة المخزون", + "حلول ERP لإدارة الموارد", + "حلول ERP لإدارة المشاريع", + "حلول ERP لإدارة الخدمات", + "حلول ERP لإدارة المؤسسات", + "حلول ERP لإدارة الشركات الذكية", + "حلول ERP للأعمال الذكية", + "حلول ERP للعمليات المؤتمتة", + "حلول ERP للذكاء الاصطناعي", + "حلول ERP للتحول الرقمي", + "حلول ERP لتحليل الأعمال", + "حلول ERP لذكاء الأعمال", + "حلول ERP للتقارير الذكية", + "حلول ERP للتخطيط المؤسسي", + "حلول ERP للقرارات الذكية", + "حلول ERP للإدارة التنفيذية", + "حلول ERP للأعمال التشغيلية", + "حلول ERP للنمو المؤسسي", + "حلول ERP للإنتاجية", + "حلول ERP لتحسين الأداء", + "حلول ERP لتحسين الكفاءة", + "حلول ERP لتحسين العمليات", + "حلول ERP لتحسين الربحية", + "حلول ERP لتقليل التكاليف", + "حلول ERP لتسريع العمليات", + "حلول ERP لزيادة الإيرادات", + "حلول ERP لتعزيز الإنتاج", + "حلول ERP لتحسين تجربة العملاء", + "حلول ERP لإدارة الاستدامة", + "حلول ERP لإدارة الطاقة", + "حلول ERP لإدارة السلامة", + "حلول ERP لإدارة المخاطر", + "حلول ERP لإدارة الامتثال", + "حلول ERP لإدارة الوثائق", + "حلول ERP لإدارة العقود", + "حلول ERP لإدارة التوقيع الإلكتروني", + "حلول ERP لإدارة التطبيقات", + "حلول ERP لإدارة التكاملات", + "حلول ERP لإدارة APIs", + "حلول ERP لإدارة السحابة", + "حلول ERP لإدارة البنية التحتية", + "حلول ERP لإدارة البيانات الضخمة", + "حلول ERP لإدارة الأداء المؤسسي", + "حلول إدارة الأعمال", + "حلول إدارة المؤسسات", + "حلول الإدارة المالية", + "حلول المحاسبة السحابية", + "حلول إدارة المخزون", + "حلول إدارة المستودعات", + "حلول إدارة المبيعات", + "حلول إدارة المشتريات", + "حلول إدارة العملاء", + "حلول إدارة الموردين", + "حلول إدارة الموارد البشرية", + "حلول إدارة الرواتب", + "حلول إدارة الحضور والانصراف", + "حلول إدارة التوظيف", + "حلول إدارة المشاريع", + "حلول إدارة الأصول", + "حلول إدارة الصيانة", + "حلول إدارة الجودة", + "حلول إدارة التصنيع", + "حلول إدارة الخدمات", + "حلول إدارة الدعم الفني", + "حلول إدارة التذاكر", + "حلول إدارة الشحن", + "حلول إدارة النقل", + "حلول إدارة الأسطول", + "حلول إدارة العقود", + "حلول إدارة الاشتراكات", + "حلول إدارة نقاط البيع", + "حلول إدارة التجارة الإلكترونية", + "حلول إدارة الفروع", + "حلول إدارة الشركات", + "حلول إدارة البيانات", + "حلول إدارة العمليات", + "حلول إدارة العمليات التشغيلية", + "حلول إدارة الأعمال السحابية", + "حلول التحول الرقمي", + "حلول أتمتة الأعمال", + "حلول ذكاء الأعمال", + "حلول التحليلات الذكية", + "حلول التقارير الذكية", + "حلول لوحات التحكم", + "حلول مؤشرات الأداء", + "حلول KPI", + "حلول الذكاء الاصطناعي للأعمال", + "حلول Chatbot للشركات", + "حلول OCR للفواتير", + "حلول Workflow", + "حلول الموافقات الآلية", + "حلول التنبيهات الذكية", + "حلول الإشعارات التلقائية", + "حلول البريد الإلكتروني للشركات", + "حلول واتساب للأعمال", + "حلول الرسائل النصية", + "حلول الحملات التسويقية", + "حلول الولاء والمكافآت", + "حلول الكوبونات والخصومات", + "حلول التسعير الذكي", + "حلول إدارة العمولات", + "حلول إدارة المندوبين", + "حلول إدارة المناطق البيعية", + "حلول إدارة التحصيلات", + "حلول إدارة المدفوعات", + "حلول إدارة النقدية", + "حلول إدارة السيولة", + "حلول إدارة البنوك", + "حلول إدارة الشيكات", + "حلول إدارة القيود اليومية", + "حلول إدارة دفتر الأستاذ", + "حلول الأرباح والخسائر", + "حلول الميزانية العمومية", + "حلول التدفقات النقدية", + "حلول إدارة الميزانيات", + "حلول إدارة مراكز التكلفة", + "حلول إدارة مراكز الربح", + "حلول إدارة الضرائب", + "حلول ضريبة القيمة المضافة", + "حلول الفاتورة الإلكترونية", + "حلول زاتكا", + "حلول QR Code للفواتير", + "حلول باركود للمخزون", + "حلول تتبع المنتجات", + "حلول تتبع الأصول", + "حلول تتبع الشحنات", + "حلول تتبع المركبات", + "حلول تتبع الطلبات", + "حلول تتبع الموظفين", + "حلول تتبع الإنتاج", + "حلول تتبع الجودة", + "حلول تتبع الصيانة", + "حلول إدارة سلسلة التوريد", + "حلول إدارة التوريد", + "حلول إدارة الاستيراد", + "حلول إدارة التصدير", + "حلول إدارة الجمارك", + "حلول إدارة الحاويات", + "حلول إدارة الرحلات", + "حلول إدارة الوقود", + "حلول إدارة السائقين", + "حلول إدارة الأساطيل الذكية", + "حلول إدارة المستودعات الذكية", + "حلول إدارة المصانع الذكية", + "حلول إنترنت الأشياء", + "حلول الروبوتات الصناعية", + "حلول إدارة الطاقة", + "حلول إدارة الاستدامة", + "حلول إدارة السلامة", + "حلول إدارة الحوادث", + "حلول إدارة المخاطر", + "حلول إدارة الامتثال", + "حلول إدارة التدقيق", + "حلول إدارة الجودة الشاملة", + "حلول التحسين المستمر", + "حلول تحسين الكفاءة", + "حلول تحسين الأداء", + "حلول تحسين العمليات", + "حلول تحسين الربحية", + "حلول تقليل التكاليف", + "حلول زيادة الإيرادات", + "حلول تسريع العمليات", + "حلول تحسين تجربة العملاء", + "حلول إدارة البيانات الضخمة", + "حلول التحليل التنبئي", + "حلول التنبؤ بالمبيعات", + "حلول التنبؤ بالمخزون", + "حلول التنبؤ المالي", + "حلول التخطيط المؤسسي", + "حلول تخطيط الموارد", + "حلول تخطيط الإنتاج", + "حلول تخطيط الطلب", + "حلول تخطيط التوريد", + "حلول تخطيط المشاريع", + "حلول التخطيط المالي", + "حلول التخطيط التشغيلي", + "حلول التخطيط الاستراتيجي", + "حلول إدارة التطبيقات", + "حلول إدارة السيرفرات", + "حلول إدارة قواعد البيانات", + "حلول إدارة Linux", + "حلول إدارة Docker", + "حلول إدارة Kubernetes", + "حلول إدارة API", + "حلول إدارة التكاملات", + "حلول إدارة التطبيقات المحمولة", + "حلول إدارة التطبيقات السحابية", + "حلول إدارة الاستضافة", + "حلول إدارة الأمن السيبراني", + "حلول إدارة النسخ الاحتياطي", + "حلول إدارة الكوارث", + "حلول استمرارية الأعمال", + "حلول إدارة البنية التحتية", + "حلول إدارة DevOps", + "حلول إدارة Git", + "حلول إدارة التطوير", + "حلول إدارة التطبيقات المؤسسية", + "حلول إدارة الأنظمة المؤسسية", + "حلول إدارة المؤسسات الذكية", + "حلول إدارة الأعمال الذكية", + "حلول الإدارة التنفيذية", + "حلول إدارة الشركات الكبرى", + "حلول إدارة الشركات الصغيرة", + "حلول إدارة الشركات المتوسطة", + "حلول إدارة قطاع التجزئة", + "حلول إدارة قطاع الجملة", + "حلول إدارة قطاع التصنيع", + "حلول إدارة قطاع الخدمات", + "حلول إدارة قطاع التعليم", + "حلول إدارة قطاع الصحة", + "حلول إدارة قطاع العقارات", + "حلول إدارة قطاع المقاولات", + "حلول إدارة قطاع النقل", + "حلول إدارة قطاع الشحن", + "حلول إدارة قطاع اللوجستيات", + "حلول إدارة قطاع الأغذية", + "حلول إدارة قطاع المطاعم", + "حلول إدارة قطاع الفنادق", + "حلول إدارة قطاع الاتصالات", + "حلول إدارة قطاع الطاقة", + "حلول إدارة قطاع التجارة الإلكترونية", + "حلول إدارة قطاع التوزيع", + "حلول إدارة قطاع الاستثمار", + "حلول إدارة قطاع الصيانة", + "حلول إدارة قطاع البرمجيات", + "حلول إدارة قطاع التسويق", + "حلول إدارة المؤسسات الحكومية", + "حلول إدارة الجمعيات", + "حلول إدارة المنظمات", + "برنامج إدارة أعمال", + "برنامج إدارة مؤسسات", + "برنامج إدارة مالية", + "برنامج إدارة حسابات", + "برنامج إدارة مخزون", + "برنامج إدارة مستودعات", + "برنامج إدارة مبيعات", + "برنامج إدارة مشتريات", + "برنامج إدارة عملاء", + "برنامج إدارة موردين", + "برنامج إدارة موظفين", + "برنامج إدارة رواتب", + "برنامج إدارة حضور", + "برنامج إدارة إجازات", + "برنامج إدارة توظيف", + "برنامج إدارة مشاريع", + "برنامج إدارة أصول", + "برنامج إدارة صيانة", + "برنامج إدارة جودة", + "برنامج إدارة تصنيع", + "برنامج إدارة خدمات", + "برنامج إدارة دعم فني", + "برنامج إدارة تذاكر", + "برنامج إدارة شحن", + "برنامج إدارة نقل", + "برنامج إدارة أسطول", + "برنامج إدارة عقود", + "برنامج إدارة اشتراكات", + "برنامج إدارة نقاط بيع", + "برنامج إدارة تجارة إلكترونية", + "برنامج إدارة الفروع", + "برنامج إدارة الشركات", + "برنامج إدارة العمليات", + "برنامج إدارة البيانات", + "برنامج أتمتة الأعمال", + "برنامج ذكاء أعمال", + "برنامج تحليلات أعمال", + "برنامج تقارير ذكية", + "برنامج لوحات تحكم", + "برنامج مؤشرات أداء", + "برنامج ذكاء اصطناعي", + "برنامج Chatbot", + "برنامج OCR", + "برنامج Workflow", + "برنامج موافقات إلكترونية", + "برنامج إشعارات ذكية", + "برنامج بريد إلكتروني للشركات", + "برنامج واتساب للأعمال", + "برنامج حملات تسويقية", + "برنامج ولاء العملاء", + "برنامج إدارة الكوبونات", + "برنامج إدارة الخصومات", + "برنامج إدارة الأسعار", + "برنامج إدارة العمولات", + "برنامج إدارة التحصيلات", + "برنامج إدارة المدفوعات", + "برنامج إدارة النقدية", + "برنامج إدارة البنوك", + "برنامج إدارة الشيكات", + "برنامج إدارة الضرائب", + "برنامج الفاتورة الإلكترونية", + "برنامج ضريبة القيمة المضافة", + "برنامج زاتكا", + "برنامج باركود", + "برنامج QR Code", + "برنامج تتبع المنتجات", + "برنامج تتبع الشحنات", + "برنامج تتبع الأصول", + "برنامج تتبع المركبات", + "برنامج تتبع الطلبات", + "برنامج تتبع الموظفين", + "برنامج تتبع الإنتاج", + "برنامج تتبع الجودة", + "برنامج تتبع الصيانة", + "برنامج إدارة سلسلة التوريد", + "برنامج إدارة التوريد", + "برنامج إدارة الاستيراد", + "برنامج إدارة التصدير", + "برنامج إدارة الجمارك", + "برنامج إدارة الرحلات", + "برنامج إدارة الوقود", + "برنامج إدارة السائقين", + "برنامج إدارة الأساطيل", + "برنامج إدارة المستودعات الذكية", + "برنامج إدارة المصانع الذكية", + "برنامج إنترنت الأشياء", + "برنامج إدارة الطاقة", + "برنامج إدارة الاستدامة", + "برنامج إدارة السلامة", + "برنامج إدارة المخاطر", + "برنامج إدارة الامتثال", + "برنامج إدارة التدقيق", + "برنامج إدارة الجودة الشاملة", + "برنامج التحسين المستمر", + "برنامج تحسين الكفاءة", + "برنامج تحسين الأداء", + "برنامج تحسين العمليات", + "برنامج تحسين الربحية", + "برنامج تقليل التكاليف", + "برنامج زيادة الإيرادات", + "برنامج تحسين تجربة العملاء", + "برنامج البيانات الضخمة", + "برنامج التحليل التنبئي", + "برنامج التنبؤ بالمبيعات", + "برنامج التنبؤ بالمخزون", + "برنامج التنبؤ المالي", + "برنامج التخطيط المؤسسي", + "برنامج تخطيط الموارد", + "برنامج تخطيط الإنتاج", + "برنامج تخطيط الطلب", + "برنامج تخطيط التوريد", + "برنامج تخطيط المشاريع", + "برنامج التخطيط المالي", + "برنامج التخطيط الاستراتيجي", + "برنامج إدارة التطبيقات", + "برنامج إدارة السيرفرات", + "برنامج إدارة قواعد البيانات", + "برنامج إدارة Linux", + "برنامج إدارة Docker", + "برنامج إدارة Kubernetes", + "برنامج إدارة API", + "برنامج إدارة التكاملات", + "برنامج إدارة التطبيقات المحمولة", + "برنامج إدارة التطبيقات السحابية", + "برنامج إدارة الاستضافة", + "برنامج إدارة الأمن السيبراني", + "برنامج إدارة النسخ الاحتياطي", + "برنامج إدارة الكوارث", + "برنامج استمرارية الأعمال", + "برنامج إدارة البنية التحتية", + "برنامج إدارة DevOps", + "برنامج إدارة Git", + "برنامج إدارة التطوير", + "برنامج إدارة التطبيقات المؤسسية", + "برنامج إدارة الأنظمة المؤسسية", + "برنامج إدارة المؤسسات الذكية", + "برنامج إدارة الأعمال الذكية", + "برنامج الإدارة التنفيذية", + "برنامج إدارة الشركات الكبرى", + "برنامج إدارة الشركات الصغيرة", + "برنامج إدارة الشركات المتوسطة", + "برنامج إدارة قطاع التجزئة", + "برنامج إدارة قطاع الجملة", + "برنامج إدارة قطاع التصنيع", + "برنامج إدارة قطاع الخدمات", + "برنامج إدارة قطاع التعليم", + "برنامج إدارة قطاع الصحة", + "برنامج إدارة قطاع العقارات", + "برنامج إدارة قطاع المقاولات", + "برنامج إدارة قطاع النقل", + "برنامج إدارة قطاع الشحن", + "برنامج إدارة قطاع اللوجستيات", + "برنامج إدارة قطاع الأغذية", + "برنامج إدارة قطاع المطاعم", + "برنامج إدارة قطاع الفنادق", + "برنامج إدارة قطاع الاتصالات", + "برنامج إدارة قطاع الطاقة", + "برنامج إدارة قطاع التجارة الإلكترونية", + "برنامج إدارة قطاع التوزيع", + "برنامج إدارة قطاع الاستثمار", + "برنامج إدارة قطاع الصيانة", + "برنامج إدارة قطاع البرمجيات", + "برنامج إدارة قطاع التسويق", + "برنامج إدارة المؤسسات الحكومية", + "برنامج إدارة الجمعيات", + "برنامج إدارة المنظمات", + "منصة ERP سحابية", + "منصة إدارة أعمال", + "منصة إدارة شركات", + "منصة إدارة مالية", + "منصة إدارة مخزون", + "منصة إدارة مبيعات", + "منصة إدارة مشتريات", + "منصة إدارة عملاء", + "منصة إدارة موارد بشرية", + "منصة إدارة مشاريع", + "منصة إدارة تصنيع", + "منصة إدارة خدمات", + "منصة إدارة تجارة إلكترونية", + "منصة ذكاء أعمال", + "منصة تحليلات ذكية", + "منصة تقارير تنفيذية", + "منصة مؤشرات أداء", + "منصة أتمتة أعمال", + "منصة تحول رقمي", + "منصة إدارة عمليات", + "منصة إدارة بيانات", + "منصة إدارة مؤسسات", + "منصة إدارة المؤسسات الذكية", + "منصة إدارة الأعمال الذكية", + "منصة إدارة الأداء", + "منصة إدارة الجودة", + "منصة إدارة الصيانة", + "منصة إدارة الأصول", + "منصة إدارة الشحن", + "منصة إدارة النقل", + "منصة إدارة التوريد", + "منصة إدارة سلسلة التوريد", + "منصة إدارة الدعم الفني", + "منصة إدارة التذاكر", + "منصة إدارة الفروع", + "منصة إدارة الشركات المتعددة", + "منصة إدارة المستودعات", + "منصة إدارة الأساطيل", + "منصة إدارة العقود", + "منصة إدارة الاشتراكات", + "منصة إدارة الفواتير الإلكترونية", + "منصة ضريبة القيمة المضافة", + "منصة زاتكا", + "منصة باركود", + "منصة QR Code", + "منصة تتبع الشحنات", + "منصة تتبع الأصول", + "منصة تتبع الطلبات", + "منصة تتبع الإنتاج", + "منصة تتبع الجودة", + "منصة تتبع الصيانة", + "منصة تخطيط الموارد", + "منصة تخطيط المشاريع", + "منصة التخطيط المالي", + "منصة التخطيط التشغيلي", + "منصة التحليل التنبئي", + "منصة التنبؤ بالمبيعات", + "منصة التنبؤ بالمخزون", + "منصة التنبؤ المالي", + "منصة تحسين الكفاءة", + "منصة تحسين الأداء", + "منصة تحسين العمليات", + "منصة تحسين الربحية", + "منصة تحسين تجربة العملاء", + "منصة تقليل التكاليف", + "منصة زيادة الإيرادات", + "منصة الأمن السيبراني", + "منصة النسخ الاحتياطي", + "منصة استمرارية الأعمال", + "منصة إدارة البنية التحتية", + "منصة إدارة التطبيقات", + "منصة إدارة السيرفرات", + "منصة إدارة قواعد البيانات", + "منصة إدارة DevOps", + "منصة إدارة التكاملات", + "منصة إدارة APIs", + "منصة إدارة التطبيقات السحابية", + "منصة إدارة التطبيقات المحمولة", + "منصة إدارة الأنظمة المؤسسية", + "منصة الإدارة التنفيذية الذكية", + "منصة القرارات الذكية", + "منصة الرؤية التنفيذية", + "منصة التحول المؤسسي", + "منصة الابتكار المؤسسي", + "منصة الاستدامة المؤسسية", + "منصة التحسين المستمر", + "منصة الأداء المؤسسي", + "منصة الأعمال السحابية", + "منصة الأعمال الرقمية", + "منصة المؤسسات الرقمية", + "منصة الشركات الذكية", + "منصة المؤسسات الذكية", + "فاتورة مبيعات", + "عميل", + "طلبات البيع", + "أمر شراء", + "مخزون", + "مستودع", + "دفعة", + "قيود محاسبية", + "دفتر الأستاذ", + "رصيد", + "عرض سعر", + "فاتورة شراء", + "مورد", + "منتج", + "صنف", + "كمية", + "رصيد المخزون", + "إيصال دفع", + "قيد يومية", + "تكلفة", + "إيرادات", + "مصروفات", + "ضريبة", + "ضريبة القيمة المضافة", + "مبيعات", + "مشتريات", + "مرتبات", + "راتب", + "موظف", + "حضور", + "إجازة", + "أمر تصنيع", + "خطة إنتاج", + "أمر عمل", + "مادة خام", + "تكلفة التصنيع", + "العملاء", + "الموردين", + "الفرص البيعية", + "العملات", + "سعر الصرف", + "الفروع", + "الشركات", + "المشاريع", + "مراكز التكلفة", + "أصول", + "استهلاك", + "سند قبض", + "سند صرف", + "تحويل مخزون", + "تسوية مخزون", + "رقم التسلسل", + "الدفعات", + "الحسابات المدينة", + "الحسابات الدائنة", + "التقارير المالية", + "الميزانية", + "الأرباح", + "الخسائر", + "شحن", + "التسليم", + "إرجاع", + "الطلبات المفتوحة", + "الفواتير المستحقة", + "المدفوعات", + "المبيعات الشهرية", + "المشتريات الشهرية", + "BOM" ] } \ No newline at end of file diff --git a/changai/changai/api/v2/auto_gen_api.py b/changai/changai/api/v2/auto_gen_api.py index 5fb74f9..9391743 100644 --- a/changai/changai/api/v2/auto_gen_api.py +++ b/changai/changai/api/v2/auto_gen_api.py @@ -630,6 +630,8 @@ def fill_missing_field_descriptions( meta["last_desc_sync"] = str(now_datetime()) _save_schema_checkpoint(meta, tables_blocks) + # Commit checkpoint immediately so schema sync metadata is persisted + # even if later background processing fails. frappe.db.commit() # nosemgrep: frappe-semgrep-rules.rules.frappe-manual-commit return { diff --git a/changai/changai/api/v2/helpdesk_api.py b/changai/changai/api/v2/helpdesk_api.py index a9b59c6..cfad0d9 100644 --- a/changai/changai/api/v2/helpdesk_api.py +++ b/changai/changai/api/v2/helpdesk_api.py @@ -16,6 +16,7 @@ def create_helpdesk_ticket(subject:str,user:str,email:str,priority:str ="Low", t doc.status = "Open" doc.insert(ignore_permissions=True) + # nosemgrep: frappe-manual-commit - explicit commit required to persist File DocType record. frappe.db.commit() diff --git a/changai/changai/api/v2/non_erp_handler.py b/changai/changai/api/v2/non_erp_handler.py index 06d6574..6f8ce4e 100644 --- a/changai/changai/api/v2/non_erp_handler.py +++ b/changai/changai/api/v2/non_erp_handler.py @@ -574,16 +574,10 @@ def handle_non_erp_query(user_input: str) -> dict: t0 = time.time() responder = _get_responder() get_responder_seconds = time.time() - t0 - print(f"[non_erp] _get_responder: {get_responder_seconds:.6f}s") - t1 = time.time() static_result = responder.get_response(user_input) matcher_seconds = time.time() - t1 - print(f"[non_erp] matcher only: {matcher_seconds:.6f}s") - total_seconds = time.time() - t0 - print(f"[non_erp] total: {total_seconds:.6f}s") - if static_result["matched"]: return { "kind": "NON_ERP_STATIC", diff --git a/changai/changai/api/v2/store_chats.py b/changai/changai/api/v2/store_chats.py index a2d7961..35dde5b 100644 --- a/changai/changai/api/v2/store_chats.py +++ b/changai/changai/api/v2/store_chats.py @@ -16,7 +16,7 @@ def save_message_doc(session_id:str,message_type:str,content:str): @frappe.whitelist(allow_guest=False) -def save_turn_2(session_id: str, user_text: str=None, bot_text: Any = None): +def save_turn_2(session_id: str, user_text: str=None, bot_text: Any = None,type_:str=None): # find existing document doc_name = frappe.db.exists(CHANGAI_CHAT_HIST_DOC, {"session_id": session_id}) @@ -30,7 +30,7 @@ def save_turn_2(session_id: str, user_text: str=None, bot_text: Any = None): history = [] if user_text: - history.append({"human": user_text}) + history.append({"human": user_text,"type":type_}) if bot_text: history.append({"ai": bot_text}) new_content = json.dumps(history, ensure_ascii=False, indent=2) diff --git a/changai/changai/api/v2/text2sql_pipeline_v2.py b/changai/changai/api/v2/text2sql_pipeline_v2.py index 864f2a3..15116d3 100644 --- a/changai/changai/api/v2/text2sql_pipeline_v2.py +++ b/changai/changai/api/v2/text2sql_pipeline_v2.py @@ -8,6 +8,7 @@ from changai.changai.api.v2.non_erp_handler import handle_non_erp_query import yaml import re +from frappe.utils.jinja import render_template import os import pickle import numpy as np @@ -46,7 +47,7 @@ from pathlib import Path import numpy as np from typing import List, Dict, Any -from symspellpy.symspellpy import SymSpell +# from symspellpy.symspellpy import SymSpell sym_spell = None _GEMINI_CLIENT = None _GEMINI_CONFIG = None @@ -152,32 +153,82 @@ - Never invent schema elements. - Always return any one clear user-readable business field, not only technical IDs, unless explicitly requested. - If the query is ambiguous, ask for clarification and set "clarify": true.""" -def get_symspell(): - global sym_spell +# def get_symspell(): +# global sym_spell - if sym_spell is not None: - frappe.logger().info(f"SymSpell already loaded, skipping PID: {os.getpid()}") - return sym_spell +# if sym_spell is not None: +# frappe.logger().info(f"SymSpell already loaded, skipping PID: {os.getpid()}") +# return sym_spell - frappe.logger().error(f"SymSpell loading NOW in PID: {os.getpid()}") +# frappe.logger().error(f"SymSpell loading NOW in PID: {os.getpid()}") - sym_spell = SymSpell(max_dictionary_edit_distance=4, prefix_length=7) +# sym_spell = SymSpell(max_dictionary_edit_distance=4, prefix_length=7) - dictionary_path = frappe.get_app_path( - "changai", - "changai", - "api", - "v2", - "assets", - "frequency_dictionary_en_82_765.txt" - ) +# dictionary_path = frappe.get_app_path( +# "changai", +# "changai", +# "api", +# "v2", +# "assets", +# "frequency_dictionary_en_82_765.txt" +# ) + +# sym_spell.load_dictionary(dictionary_path, term_index=0, count_index=1) + +# for kw in BUSINESS_KEYWORDS: +# sym_spell.create_dictionary_entry(kw.lower(), 1000) + +# return sym_spell + +@lru_cache(maxsize=512) +def is_child_table(table: str) -> bool: + doctype = table.replace("tab", "", 1) if table.startswith("tab") else table + + try: + meta = frappe.get_meta(doctype, cached=True) + return bool(getattr(meta, "istable", 0)) + except Exception: + return False + +CHILD_GENERIC_FIELDS = ["parent", "parenttype", "parentfield", "idx"] +MAIN_GENERIC_FIELDS = ["name", "docstatus"] +def enrich_fields_for_sql_context(table: str, fields: list[str]) -> list[str]: + out = list(fields) + + if is_child_table(table): + for f in reversed(CHILD_GENERIC_FIELDS): + if f not in out: + out.insert(0, f) + else: + for f in reversed(MAIN_GENERIC_FIELDS): + if f not in out: + out.insert(0, f) + + return out +@frappe.whitelist(allow_guest=False) +def format_schema_context(grouped: dict[str, list[str]]) -> str: + parts = [] + + for table, raw_fields in grouped.items(): + child = is_child_table(table) + fields = enrich_fields_for_sql_context(table, raw_fields) - sym_spell.load_dictionary(dictionary_path, term_index=0, count_index=1) + parts.append(f"TABLE: {table}") + parts.append(f"TYPE: {'Child Table' if child else 'Main Table'}") - for kw in BUSINESS_KEYWORDS: - sym_spell.create_dictionary_entry(kw.lower(), 1000) + if child: + parts.append("JOIN RULES:") + parts.append("- parent = parent document name") + parts.append("- parenttype = parent DocType") + parts.append("- parentfield = child table fieldname") - return sym_spell + parts.append("FIELDS:") + for field in fields: + parts.append(f"- {field}") + + parts.append("") + + return "\n".join(parts) def publish_pipeline_update(request_id, stage, message, data=None, done=False, error=False): @@ -237,7 +288,7 @@ def read_asset(file_name: str, base: str = "assets") -> Any: if root is None: frappe.throw(_("Invalid base: {0}\n" "Check Quick Start Guide Here 👇:\n {1}").format(base, CHANGAI_GUIDE_LINK)) - + # nosemgrep: frappe-semgrep-rules.rules.security.frappe-security-file-traversal path = _safe_join(root, file_name) if not path.is_file(): @@ -354,6 +405,7 @@ def load_field_matrix(): app_root = Path(frappe.get_app_path("changai")).resolve() schema_rel = "changai/api/v2/fvs_stores/erpnext/emb_dir" + # nosemgrep: frappe-semgrep-rules.rules.security.frappe-security-file-traversal schema_path = _safe_join(app_root, schema_rel) embs_path = schema_path / "field_embs.npy" @@ -368,7 +420,7 @@ def load_field_matrix(): docs = pickle.load(f) # nosemgrep: frappe-semgrep-rules.rules.security.frappe-security-file-traversal - with open(table_idx_path, "rb") as f: # nosemgrep: path validated by _safe_join against app_root + with open(table_idx_path, "rb") as f: table_to_idx = pickle.load(f) embs = np.load(embs_path, mmap_mode="r") @@ -379,7 +431,6 @@ def load_field_matrix(): return docs, embs, table_to_idx -@frappe.whitelist(allow_guest=True) def _get_cached_embedding_test(q: str) -> tuple: t0=time.time() # publish_pipeline_update( @@ -984,12 +1035,6 @@ class SQLState(TypedDict, total=False): selected_fields: str -def correct_spelling(text: str) -> str: - sym = get_symspell() - suggestions = sym.lookup_compound(text, max_edit_distance=2) - return suggestions[0].term if suggestions else text - - def fill_sql_prompt(question: str, context: str) -> str: return SQL_PROMPT.format(question=question, context=context) @@ -1005,18 +1050,12 @@ def _word_is_erp(word: str) -> bool: return True if len(word) >= 4: match = process.extractOne( - word, _KEYWORDS_LIST, scorer=fuzz.ratio, score_cutoff=85 + word, _KEYWORDS_LIST, scorer=fuzz.ratio, score_cutoff=70 ) if match: return True return False -# def is_erp_query(q: str) -> bool: -# _init_keywords() -# for word in q.lower().split(): -# if _word_is_erp(word): -# return True -# return False STOP_WORDS = { # English greetings / casual @@ -1069,23 +1108,22 @@ def tokenize_mixed(text): return re.findall(r'[\u0600-\u06FF]+|[a-zA-Z0-9]+', text.lower()) -@frappe.whitelist(allow_guest=True) -def is_erp_query(q: str): +def is_erp_query(q: str, words_list: list,cut_off_perc:int) -> bool: words = tokenize_mixed(q) for word in words: - if len(word) <= 2: - continue - - if word in STOP_WORDS: - continue + if words_list != THREAD_WORDS: + if word in STOP_WORDS: + continue + if len(word) <= 2: + continue match = process.extractOne( word, - BUSINESS_KEYWORDS, + words_list, scorer=fuzz.ratio, - score_cutoff=80 + score_cutoff=cut_off_perc ) if match: @@ -1094,14 +1132,50 @@ def is_erp_query(q: str): return False +@frappe.whitelist(allow_guest=False) +def test_is_erp_query(q: str,cut_off_perc:int=85) -> bool: + words = tokenize_mixed(q) + + for word in words: + + # if len(word) <= 2: + # continue + + # if word in STOP_WORDS: + # continue + + match = process.extractOne( + word, + THREAD_WORDS, + scorer=fuzz.ratio, + score_cutoff=cut_off_perc + ) + + if match: + matched_word = match[0] # the matched keyword + match_score = match[1] # the score + return True, matched_word, match_score + + return False + + def guardrail_router(state: SQLState) -> SQLState: request_id = state.get("request_id") - raw_q = state.get("formatted_q") or state.get("question") or "" - # q = str(raw_q).lower().strip() - # q_corrected = correct_spelling(q) - is_erp= is_erp_query(raw_q) - query_type = "ERP" if is_erp else "NON_ERP" - + chat_id = state.get("session_id") + raw_q = state.get("question") or "" + try: + is_erp= is_erp_query(raw_q,BUSINESS_KEYWORDS,80) + if is_erp: + query_type = "ERP" + elif is_thread_erp(raw_q, chat_id): + query_type = "ERP" + else: + query_type = "NON_ERP" + except Exception as e: + query_type = "NON_ERP" + frappe.log_error(frappe.get_traceback(), "Guardrail Router Error") + return {**state, "query_type": query_type, "error": f"Error in guardrail router: {str(e)}"} + state["query_type"] = query_type publish_pipeline_update( request_id, @@ -1111,6 +1185,43 @@ def guardrail_router(state: SQLState) -> SQLState: ) return state + +@frappe.whitelist(allow_guest=False) +def test_guardrail_router(question: str, chat_id: str = None, request_id: str = None) -> Dict: + """Test API for guardrail_router — mirrors its logic without pipeline state""" + + if not chat_id: + chat_id = frappe.generate_hash(length=10) + + if not request_id: + request_id = frappe.generate_hash(length=10) + + raw_q = str(question).strip() + + try: + is_erp = is_erp_query(raw_q, BUSINESS_KEYWORDS, 80) + if is_erp: + query_type = "ERP" + # elif is_thread_erp(raw_q, chat_id): + # query_type = "ERP" + else: + query_type = "NON_ERP" + except Exception as e: + frappe.log_error(frappe.get_traceback(), "Test Guardrail Router Error") + return { + "question": raw_q, + "query_type": "NON_ERP", + "error": str(e) + } + + return { + "question": raw_q, + "chat_id": chat_id, + "query_type": query_type, + "is_erp": is_erp, + } + + def send_non_erp_request(state: SQLState) -> SQLState: qstn =state.get("question") if not qstn: @@ -1277,10 +1388,10 @@ def check_memory_status() -> dict: "loaded": _GEMINI_CLIENT is not None, "id": id(_GEMINI_CLIENT), }, - "symspell": { - "loaded": sym_spell is not None, - "id": id(sym_spell), - }, + # "symspell": { + # "loaded": sym_spell is not None, + # "id": id(sym_spell), + # }, "keywords": { "loaded": _KEYWORDS_SET is not None, "id": id(_KEYWORDS_SET), @@ -1372,7 +1483,6 @@ def build_hnsw_index(embeddings): return index - def call_retrieve_multi_line(user_question: str, request_id: str) -> Dict[str, Any]: try: top_tables = call_fvs_table_search(user_question, request_id) @@ -1403,7 +1513,6 @@ def call_retrieve_multi_line(user_question: str, request_id: str) -> Dict[str, A except Exception as e: return {"selected_fields": {}, "selected_tables": [], "top_tables": [], "error": str(e)} - def call_fvs_field_search_global_k( user_question: str, selected_tables: List[str], @@ -1447,7 +1556,7 @@ def call_fvs_field_search_global_k( meta = getattr(d, "metadata", {}) or {} table = meta.get("table") - field = meta.get("field") + field = meta.get("field") or meta.get("name") if not table or not field: continue @@ -1471,13 +1580,10 @@ def call_fvs_field_search_global_k( if isinstance(opts, list): name += " {" + ", ".join(str(o) for o in opts[:5]) + "}" grouped.setdefault(table, []).append(name) - + + res = format_schema_context(grouped) # 🔥 final compact string - parts = [] - for table, fields in grouped.items(): - parts.append(f"{table}: " + ", ".join(fields)) - - return "\n".join(parts) + return res # Node 1: Retrive with Fiass Vector Store. @@ -2000,10 +2106,15 @@ def execute_query(sql: str, doctypes: List[str]) -> Any: if not str(sql).lower().strip().startswith("select"): frappe.throw(_("Only SELECT queries are allowed." "Check Quick Start Guide Here 👇:\n {0}").format(CHANGAI_GUIDE_LINK)) + sql = sql.rstrip().rstrip(';') combined = _build_match_conditions(doctypes) if combined: sql = _append_conditions(sql, combined) return frappe.db.sql(sql, as_dict=True) + except PermissionError: + return { + "error": _("You do not have permission to access this data.\n").format(CHANGAI_GUIDE_LINK) + } except Exception as e: return {"error": f"SQL Execution Failed: {e}\n Check Quick Start Guide Here 👇:\n {CHANGAI_GUIDE_LINK}"} @@ -2078,14 +2189,10 @@ def to_json_if_needed(v: Any) -> Any: @frappe.whitelist(allow_guest=False) def format_data_conversationally(user_data: Any) -> str: - env = jinja2.Environment( - autoescape=True, - trim_blocks=True, - lstrip_blocks=True, - extensions=["jinja2.ext.do"], + return render_template( + CONVERSATION_TEMPLATE, + {"data": user_data} ) - template = env.from_string(CONVERSATION_TEMPLATE) - return template.render(data=user_data) @frappe.whitelist(allow_guest=False) @@ -2113,18 +2220,19 @@ def format_data(qstn: str, sql_data: Any) -> Dict[str, str]: FORMATTING: - Start with ONE relevant emoji matching the topic (📦💰🧾👥📊📅🔍💤📉) - For 3+ items, use a bullet list: • Item — value -- If list exceeds shown items, state exactly how many remain: e.g. + 3 أخرى +- If list exceeds shown items, state exactly how many remain. - Keep answers brief (1–6 lines). Lead with the direct answer, then light context. CLOSING: - End with ONE short, relevant follow-up question to keep the conversation going. -- Make it feel natural, not robotic. e.g. "هل تريد تفاصيل أكثر عن أحد هؤلاء؟" +- Make it feel natural, not robotic. Never list names or items in a comma-separated line. Ever. OUTPUT: - Markdown ALLOWED: **bold**, • bullets, emojis - No JSON. No code blocks. No labels. No explanations. - Output ONLY the final user-facing answer. Nothing else. -- if the user question is in english reply in arbic only very improtant. +- if the user question is in english reply in english only very important. +if the user question is in arabic respond in arabic only. and if the question is in english respond answer also english """ user_prompt=f""" QUESTION: @@ -2466,7 +2574,7 @@ def debug_entity_retriever(q: str): } -def _invoke_pipeline(user_question: str, chat_id: str, request_id: str,sendNonErptoAI:bool): +def _invoke_pipeline(user_question: str, chat_id: str, request_id: str,sendNonErptoAI: bool = False): initial_state: SQLState = { "question": user_question or "", "session_id": chat_id, @@ -2506,8 +2614,8 @@ def _handle_non_erp(final: SQLState, user_question: str, chat_id: str) -> Dict: if not err and non_erp_res: try: - save_turn_2(session_id=chat_id, user_text=formatted_q, bot_text=non_erp_res) - save_logs(user_question=user_question, formatted_q=formatted_q, result=non_erp_res) + save_turn_2(session_id=chat_id, user_text=user_question, bot_text=non_erp_res,type_="non_erp") + save_logs(user_question=user_question, formatted_q="Not formatted as its NONERP", result=non_erp_res) except Exception as e: frappe.log_error(f"Failed to save NON_ERP logs: {e}", "ChangAI Logs") @@ -2539,11 +2647,12 @@ def _get_sql_error_message(err: Any, val: Dict) -> str: return f"⚠️ The model generated an invalid query. {error_text}" -def _handle_sql_result(memory_status: Dict,sql_prompt:str,final: SQLState, sql: str, orm: str, formatted_q: str, fields: str, +def _handle_sql_result(memory_status: Dict, sql_prompt: str, final: SQLState, sql: str, orm: str, formatted_q: str, fields: str, selected_tables: List, val: Dict, entity_debug: Dict, user_question: str, chat_id: str) -> Dict: try: request_id = final.get("request_id") + org_sql = final.get("sql") extracted_tables = extract_tables_from_sql(sql) sql_result = execute_query(sql, extracted_tables) publish_pipeline_update( @@ -2566,18 +2675,19 @@ def _handle_sql_result(memory_status: Dict,sql_prompt:str,final: SQLState, sql: ) if not err: try: - save_turn_2(session_id=chat_id, user_text=formatted_q, bot_text=formatted_result) + save_turn_2(session_id=chat_id, user_text=formatted_q, bot_text=formatted_result, type_="erp") save_logs(user_question=user_question, formatted_q=formatted_q, context=context, sql=sql, val=val, result=sql_result, formatted_result=formatted_result) except Exception as e: return {"error": str(e)} return { + "Model returned SQL":org_sql, "context":context, - "Memory Status":memory_status, + # "Memory Status":memory_status, "Question": user_question, "Formated Question":formatted_q, - "SQL": sql, + "Cleaned SQL": sql, "ORM": orm, "Tables": selected_tables, "Fields": fields, @@ -2585,59 +2695,184 @@ def _handle_sql_result(memory_status: Dict,sql_prompt:str,final: SQLState, sql: "Validation": val, "Error": err, "result":sql_result, - "EntityDebug": entity_debug, + "EntityDebug": entity_debug if entity_debug.get("contains_values") else None, "Bot": formatted_result, } +def retry_sql(sql, error, formatted_q, sql_prompt): + retry_prompt = SQL_SYS_PROMPT + """ + +═══ RETRY MODE — STRICT FIX REQUIRED ═══ +STEP 1: Read the failed SQL and error message. +STEP 2: Find the broken field/table. +STEP 3: Check SCHEMA CONTEXT — does it exist? + YES → fix the syntax. + NO → remove it, find correct field from SCHEMA CONTEXT. +STEP 4: Verify every remaining field exists in SCHEMA CONTEXT. +STEP 5: Output fixed SQL. NEVER output the same broken SQL again.""" + user_prompt = sql_prompt + f""" + +Failed SQL: {sql} +Error: {error} +User Question: {formatted_q} + +DO NOT repeat the same SQL. +DO NOT use the field mentioned in the error. +Find the correct field from SCHEMA CONTEXT and fix it.""" + + try: + rewritten = call_gemini(user_prompt, sys_prompt=retry_prompt) + rewritten_json = json.loads(rewritten) + retried_sql = clean_sql(rewritten_json.get("sql") or "") + retried_orm = clean_sql(rewritten_json.get("orm") or "") + except Exception: + return "", "", {"ok": False, "error": "Retry failed to parse response"} + + if not retried_sql: + return "", "", {"ok": False, "error": "Retry returned empty SQL"} + + val_res = validate_sql_schema(retried_sql) + return retried_sql, retried_orm, val_res + +import json +import frappe +@frappe.whitelist(allow_guest=True) +def get_last_thread_message(chat_id: str): + data = frappe.get_all( + "ChangAI Chat History", + filters={"session_id": chat_id}, + fields=["content"], + order_by="creation asc" + ) + + for row in reversed(data): + try: + msg = json.loads(row["content"]) + # human_msg = msg[-2]["human"] + msg_type = msg[-2]["type"] + return msg_type + + except Exception: + pass + + return "" + + +THREAD_WORDS = [ + "yes", "yep", "yeah", "yup", "yes please", + "of course", "sure", "surely", "absolutely", + "definitely", "certainly", "indeed", "correct","ofcourse", + "right", "exactly", "precisely", + "ok", "okay", "fine", "alright", "go ahead", + "do it", "show me", "please", "go on", + "continue", "proceed", "why not", + "aye", "affirmative", "true", "agreed", + "hmm", "hm", "umm", "uh", "ah", + "interesting", "i see", "got it", "ok got it", + "and", "so", "then", "also", "but", + "what", "how", "when", "who", "where", "why", + "more", "less", "again", "another", "other", + "next", "previous", "back", "forward", + "noted", "understood", "makes sense", + "okay okay", "fine fine", "sure sure" +] @frappe.whitelist(allow_guest=False) -def run_text2sql_pipeline(user_question: str, chat_id: str, request_id: str,sendNonErptoAI=0) -> Dict: +def is_thread_erp(q,chat_id:str): + msg_type = get_last_thread_message(chat_id) + if msg_type == "erp" and is_erp_query(q, THREAD_WORDS,85): + return True + else: + return False + + + +@frappe.whitelist(allow_guest=False) +def run_text2sql_pipeline(user_question: str, chat_id: str, request_id: str, sendNonErptoAI: bool = False) -> Dict: memory_status = check_memory_status() - final, err_response = _invoke_pipeline(user_question, chat_id, request_id,sendNonErptoAI) + final, err_response = _invoke_pipeline(user_question, chat_id, request_id, sendNonErptoAI) if err_response: return err_response + entity_debug = { "contains_values": final.get("contains_values"), "entity_cards": final.get("entity_cards") or [], } + if (final.get("query_type") or "NON_ERP") == "NON_ERP": return _handle_non_erp(final, user_question, chat_id) + sql = clean_sql(final.get("sql")) or "" - res=validate_sql_schema(sql) - publish_pipeline_update( - request_id, - "sql_validated", - _("SQL validation Completed") - ) - orm = clean_sql(final.get("orm")) or "" + orm = clean_sql(final.get("orm") or "") formatted_q = _safe_strip(final.get("formatted_q") or "") selected_tables = final.get("selected_tables") or [] fields = _safe_strip(final.get("selected_fields") or "") sql_prompt = _safe_strip(final.get("sql_prompt") or "") - # val = final.get("validation") or {} + try: + context = final.get("context") + except Exception as e: + frappe.log_error(e, "Error occurred while fetching final values") err = final.get("error") - if not res.get("ok") or not sql.upper().startswith("SELECT"): - context = (final.get("context") or final.get("selected_fields") or "")[:800] - return { - "Memory Status":memory_status, - "Question": user_question, - "Formatted_Question": formatted_q, - "Context": context, - "Tables": selected_tables, - "Fields": fields, - "SQL": sql, - "Validation": res, - "EntityDebug": entity_debug, - "Tries": int(final.get("tries") or 0), - "Error": err or "SQL not valid or missing", - "Result": [], - "Bot": _get_sql_error_message(err, res), - - } - - return _handle_sql_result(memory_status, sql_prompt, final, sql, orm, formatted_q, fields, selected_tables, res, entity_debug, user_question, chat_id) - + # guard empty sql + # if not sql: + # return _error_response(memory_status, user_question, formatted_q, context, + # selected_tables, fields, sql, + # {"ok": False, "error": "SQL is empty"}, + # entity_debug, 0, "SQL not valid or missing", err) + # retried_sql1, retried_orm1, retry1_val_res = retry_sql(retried_sql, retry_val_res.get("error"), formatted_q, sql_prompt) + # if retry1_val_res.get("ok"): + # return _handle_sql_result(memory_status, sql_prompt, final, retried_sql1, retried_orm1, + # formatted_q, fields, selected_tables, retry1_val_res, + # entity_debug, user_question, chat_id) + res = validate_sql_schema(sql) + publish_pipeline_update(request_id, "sql_validated", _("SQL validation Completed")) + + # valid on first try + if res.get("ok") and sql.upper().startswith("SELECT"): + return _handle_sql_result(memory_status, sql_prompt, final, sql, orm, + formatted_q, fields, selected_tables, res, + entity_debug, user_question, chat_id) + + # retry 2 + retried_sql2, retried_orm2, retry2_val_res = retry_sql(sql, res.get("error"), formatted_q, sql_prompt) + if retry2_val_res.get("ok"): + return _handle_sql_result(memory_status, sql_prompt, final, retried_sql2, retried_orm2, + formatted_q, fields, selected_tables, retry2_val_res, + entity_debug, user_question, chat_id) + + # retry 3 + retried_sql3, retried_orm3, retry3_val_res = retry_sql(retried_sql2, retry2_val_res.get("error"), formatted_q, sql_prompt) + if retry3_val_res.get("ok"): + return _handle_sql_result(memory_status, sql_prompt, final, retried_sql3, retried_orm3, + formatted_q, fields, selected_tables, retry3_val_res, + entity_debug, user_question, chat_id) + + # all retries failed + final_error = retry2_val_res.get("error") or retry1_val_res.get("error") or retry3_val_res.get("error") or res.get("error") or "SQL not valid or missing" + return _error_response(memory_status, user_question, formatted_q, context, + selected_tables, fields, retried_sql2 or sql, + retry2_val_res, entity_debug, 2, final_error, err) + + +def _error_response(memory_status, user_question, formatted_q, context, + selected_tables, fields, sql, validation, + entity_debug, tries, error, err): + return { + "Memory Status": memory_status, + "Question": user_question, + "Formatted_Question": formatted_q, + "Context": (context or "")[:800], + "Tables": selected_tables, + "Fields": fields, + "SQL": sql, + "Validation": validation, + "EntityDebug": entity_debug, + "Tries": tries, + "Error": error, + "Result": [], + "Bot": _get_sql_error_message(error, validation), + } # @frappe.whitelist(allow_guest=False) @@ -2651,7 +2886,6 @@ def run_text2sql_pipeline(user_question: str, chat_id: str, request_id: str,send # except Exception as e: # print(f"Error during model call: {e}") _WARMUP_COUNT=0 -@frappe.whitelist(allow_guest=True) def load_on_startup(): global _WARMUP_COUNT,_EMBEDDER_INSTANCE, _VS_TABLE, _FULL_FIELDS_VS, _VS_MASTER, _FIELD_DOCS_CACHE, sym_spell, _GEMINI_CLIENT _WARMUP_COUNT+=1 @@ -2678,7 +2912,7 @@ def load_on_startup(): message=f"PID={os.getpid()} | module={__name__} | file={__file__} | loaded={_EMBEDDER_INSTANCE is not None} | id={id(_EMBEDDER_INSTANCE)}" try: - get_symspell() + # get_symspell() get_embedding_engine() get_table_vs() load_field_matrix() @@ -2721,7 +2955,6 @@ def test(): return result -@frappe.whitelist(allow_guest=True) def get_embedding_engine_test(): global _EMBEDDER_INSTANCE import time, os @@ -2755,17 +2988,3 @@ def get_embedding_engine_test(): "load_time": time.time() - t3, "result": "loaded_now" } - - -@frappe.whitelist(allow_guest=True) -def test_guardrail_router(question: str): - raw_q = (question or "").lower().strip() - q_corrected = correct_spelling(raw_q) - is_erp = is_erp_query(q_corrected) - query_type = "ERP" if is_erp else "NON_ERP" - - return { - "original": question, - "corrected": q_corrected, - "query_type": query_type, - } \ No newline at end of file diff --git a/changai/changai/api/v2/train_data_api.py b/changai/changai/api/v2/train_data_api.py index cce2284..8445db0 100644 --- a/changai/changai/api/v2/train_data_api.py +++ b/changai/changai/api/v2/train_data_api.py @@ -168,8 +168,8 @@ def _sync_frappe_file_doc(module_name: str, abs_path: str, folder_path: str, suf "folder": folder_path, "file_type": "JSONL" }).insert(ignore_permissions=True) - - frappe.db.commit() # nosemgrep: frappe-manual-commit - explicit commit required to persist File DocType record immediately after disk write during training data sync + # nosemgrep: frappe-manual-commit - explicit commit required to persist File DocType record immediately after disk write during training data sync + frappe.db.commit() return file_doc diff --git a/changai/changai/prompts/sql_rewrite_sys_prompt.txt b/changai/changai/prompts/sql_rewrite_sys_prompt.txt index 79ec99b..05c369d 100644 --- a/changai/changai/prompts/sql_rewrite_sys_prompt.txt +++ b/changai/changai/prompts/sql_rewrite_sys_prompt.txt @@ -45,24 +45,18 @@ Use natural phrasing ("based on", "using"): Timesheet Detail → from_time / to_time - NEVER use posting_date for Timesheet - NEVER use creation unless asked - 6. Relationships: - Include linked entities if required - STYLE: - Natural business language - No SQL, no tab* names - EXAMPLES: "total sales amount last month" → What is the total sales amount from Sales Invoices last month based on grand_total and posting_date? - "stock in warehouse a" → What is the stock quantity in Warehouse A based on actual_qty from Bin? - "who worked today" → Which employees logged time today based on Timesheet start_date or Timesheet Detail from_time? - STRICT RULES: - If the query mentions Draft, Submitted, or Cancelled, explicitly include docstatus in the rewritten question. - Do not add a specific document type unless clearly implied by the user query or required by standard ERPNext business meaning. @@ -71,6 +65,10 @@ STRICT RULES: - Preserve all filter conditions, status values, and keywords from the original question — never drop them during rewriting. - Do NOT add dates, filters, entities, statuses, or assumptions unless explicitly present in the user question or clearly inferred from conversation memory. - Use chat history only when the current query clearly implies continuation or follow-up context. Never assume dates, filters, entities, or conditions from previous messages unless strongly indicated. +- When rewriting, analyze the last user question AND the last AI reply. + If the AI ended with a question and the user replied to it, + incorporate that context into the rewritten question. + Do not miss any important content from the last exchange. - Use only the most relevant tables and fields required for the user query. - Use only valid tables and fields from the provided schema context, regardless of retrieval ranking order. - Choose fields based on business meaning and user intent, not rank position. diff --git a/changai/changai/prompts/sql_system_prompt.txt b/changai/changai/prompts/sql_system_prompt.txt index b2ba2e6..7972777 100644 --- a/changai/changai/prompts/sql_system_prompt.txt +++ b/changai/changai/prompts/sql_system_prompt.txt @@ -1,7 +1,8 @@ You are a RESTRICTED MariaDB SQL and Frappe ORM generator. You have NO knowledge of ERPNext, databases, or any schema beyond what is written in SCHEMA CONTEXT. SCHEMA CONTEXT is your entire universe. Nothing outside it exists. - +ABSOLUTE LAW: Only use fields and tables from SCHEMA CONTEXT. +Empty SQL = critical failure. ═══ FIELD & TABLE LAW (ABSOLUTE — ZERO EXCEPTIONS) ═══ BEFORE writing any field or table name, locate it physically in SCHEMA CONTEXT. FOUND → you may use it, only under the table it is listed. @@ -46,7 +47,6 @@ For every table in your SQL, answer internally: - NEVER add docstatus to a master doctype query under any circumstance. - Values: 0 = Draft | 1 = Submitted | 2 = Cancelled - Any transactional document that goes through a Draft → Submit → Cancel cycle has a docstatus field. -- Default for all business data queries (sales, purchase, stock, finance): docstatus = 1 - docstatus = 0 → ONLY when user explicitly says "draft" - docstatus = 1 → ONLY when user explicitly says "submitted" - docstatus = 2 → ONLY when user explicitly says "cancelled" @@ -94,16 +94,19 @@ If you are about to write a forbidden token → STOP → rewrite using MariaDB e and logic matches the original question exactly. - Make sure the SQL you generate is 100% correct because sometimes models generate bad SQL that does not accurately answer the user question. -═══ NULL SQL = CRITICAL FAILURE ═══ -sql: "" or sql: null is NEVER allowed. Ever. No exception. No excuse. -If perfect is impossible → drop bad fields → drop bad JOINs → drop bad filters → output the best partial SELECT from what remains. -A partial query is always correct. An empty query is always wrong. -THERE IS NO VALID REASON TO RETURN EMPTY SQL. +LAW 1: sql is NEVER empty. Ever. +LAW 2: Every field must exist in SCHEMA CONTEXT under the exact table used. +LAW 3: No JOINs unless a link field (→) exists in SCHEMA CONTEXT. +LAW 4: No SELECT *. Name every field explicitly. ═══ OUTPUT LAW ═══ NEVER return empty sql. Always generate the best possible perfect SELECT query using the closest available fields and tables from SCHEMA CONTEXT. - Output ONLY raw JSON. No explanation. No markdown. No extra keys. -- Format: +Never ever give empty sql.that is wrong.also donot give syntax errors in sql. +also do not assume fields or tables if they are not in the given schema. +- Output Format: { "sql": "", "orm": "" -} \ No newline at end of file +} +FINAL CHECK: Did you verify every field exists in SCHEMA CONTEXT? +If sql is empty → you have failed. Output best partial query instead. \ No newline at end of file diff --git a/changai/public/dist/changai-chatbot.js b/changai/public/dist/changai-chatbot.js index 3b5a543..d392363 100644 --- a/changai/public/dist/changai-chatbot.js +++ b/changai/public/dist/changai-chatbot.js @@ -1,12 +1,12 @@ -var vp=Object.defineProperty;var _p=(Pt,re,pt)=>re in Pt?vp(Pt,re,{enumerable:!0,configurable:!0,writable:!0,value:pt}):Pt[re]=pt;var we=(Pt,re,pt)=>_p(Pt,typeof re!="symbol"?re+"":re,pt);(function(){"use strict";var Ds;function Pt(e){const t=Object.create(null);for(const n of e.split(","))t[n]=1;return n=>n in t}const re={},pt=[],Qt=()=>{},Dl=()=>!1,es=e=>e.charCodeAt(0)===111&&e.charCodeAt(1)===110&&(e.charCodeAt(2)>122||e.charCodeAt(2)<97),Fs=e=>e.startsWith("onUpdate:"),ht=Object.assign,ei=(e,t)=>{const n=e.indexOf(t);n>-1&&e.splice(n,1)},Nl=Object.prototype.hasOwnProperty,he=(e,t)=>Nl.call(e,t),X=Array.isArray,pn=e=>ts(e)==="[object Map]",ti=e=>ts(e)==="[object Set]",me=e=>typeof e=="function",Ce=e=>typeof e=="string",zt=e=>typeof e=="symbol",Ae=e=>e!==null&&typeof e=="object",ni=e=>(Ae(e)||me(e))&&me(e.then)&&me(e.catch),si=Object.prototype.toString,ts=e=>si.call(e),Fl=e=>ts(e).slice(8,-1),ri=e=>ts(e)==="[object Object]",Bs=e=>Ce(e)&&e!=="NaN"&&e[0]!=="-"&&""+parseInt(e,10)===e,Cn=Pt(",key,ref,ref_for,ref_key,onVnodeBeforeMount,onVnodeMounted,onVnodeBeforeUpdate,onVnodeUpdated,onVnodeBeforeUnmount,onVnodeUnmounted"),ns=e=>{const t=Object.create(null);return n=>t[n]||(t[n]=e(n))},Bl=/-(\w)/g,Ut=ns(e=>e.replace(Bl,(t,n)=>n?n.toUpperCase():"")),Hl=/\B([A-Z])/g,Jt=ns(e=>e.replace(Hl,"-$1").toLowerCase()),ii=ns(e=>e.charAt(0).toUpperCase()+e.slice(1)),Hs=ns(e=>e?`on${ii(e)}`:""),jt=(e,t)=>!Object.is(e,t),ss=(e,...t)=>{for(let n=0;n{Object.defineProperty(e,t,{configurable:!0,enumerable:!1,writable:s,value:n})},Us=e=>{const t=parseFloat(e);return isNaN(t)?e:t},zl=e=>{const t=Ce(e)?Number(e):NaN;return isNaN(t)?e:t};let oi;const rs=()=>oi||(oi=typeof globalThis!="undefined"?globalThis:typeof self!="undefined"?self:typeof window!="undefined"?window:typeof global!="undefined"?global:{});function js(e){if(X(e)){const t={};for(let n=0;n{if(n){const s=n.split(jl);s.length>1&&(t[s[0].trim()]=s[1].trim())}}),t}function ye(e){let t="";if(Ce(e))t=e;else if(X(e))for(let n=0;n!!(e&&e.__v_isRef===!0),Qe=e=>Ce(e)?e:e==null?"":X(e)||Ae(e)&&(e.toString===si||!me(e.toString))?ai(e)?Qe(e.value):JSON.stringify(e,ui,2):String(e),ui=(e,t)=>ai(t)?ui(e,t.value):pn(t)?{[`Map(${t.size})`]:[...t.entries()].reduce((n,[s,r],i)=>(n[Vs(s,i)+" =>"]=r,n),{})}:ti(t)?{[`Set(${t.size})`]:[...t.values()].map(n=>Vs(n))}:zt(t)?Vs(t):Ae(t)&&!X(t)&&!ri(t)?String(t):t,Vs=(e,t="")=>{var n;return zt(e)?`Symbol(${(n=e.description)!=null?n:t})`:e};let Je;class Gl{constructor(t=!1){this.detached=t,this._active=!0,this._on=0,this.effects=[],this.cleanups=[],this._isPaused=!1,this.parent=Je,!t&&Je&&(this.index=(Je.scopes||(Je.scopes=[])).push(this)-1)}get active(){return this._active}pause(){if(this._active){this._isPaused=!0;let t,n;if(this.scopes)for(t=0,n=this.scopes.length;t0&&--this._on===0&&(Je=this.prevScope,this.prevScope=void 0)}stop(t){if(this._active){this._active=!1;let n,s;for(n=0,s=this.effects.length;n0)return;if(In){let t=In;for(In=void 0;t;){const n=t.next;t.next=void 0,t.flags&=-9,t=n}}let e;for(;Pn;){let t=Pn;for(Pn=void 0;t;){const n=t.next;if(t.next=void 0,t.flags&=-9,t.flags&1)try{t.trigger()}catch(s){e||(e=s)}t=n}}if(e)throw e}function pi(e){for(let t=e.deps;t;t=t.nextDep)t.version=-1,t.prevActiveLink=t.dep.activeLink,t.dep.activeLink=t}function hi(e){let t,n=e.depsTail,s=n;for(;s;){const r=s.prevDep;s.version===-1?(s===n&&(n=r),Ys(s),Yl(s)):t=s,s.dep.activeLink=s.prevActiveLink,s.prevActiveLink=void 0,s=r}e.deps=t,e.depsTail=n}function Ks(e){for(let t=e.deps;t;t=t.nextDep)if(t.dep.version!==t.version||t.dep.computed&&(gi(t.dep.computed)||t.dep.version!==t.version))return!0;return!!e._dirty}function gi(e){if(e.flags&4&&!(e.flags&16)||(e.flags&=-17,e.globalVersion===Mn)||(e.globalVersion=Mn,!e.isSSR&&e.flags&128&&(!e.deps&&!e._dirty||!Ks(e))))return;e.flags|=2;const t=e.dep,n=_e,s=gt;_e=e,gt=!0;try{pi(e);const r=e.fn(e._value);(t.version===0||jt(r,e._value))&&(e.flags|=128,e._value=r,t.version++)}catch(r){throw t.version++,r}finally{_e=n,gt=s,hi(e),e.flags&=-3}}function Ys(e,t=!1){const{dep:n,prevSub:s,nextSub:r}=e;if(s&&(s.nextSub=r,e.prevSub=void 0),r&&(r.prevSub=s,e.nextSub=void 0),n.subs===e&&(n.subs=s,!s&&n.computed)){n.computed.flags&=-5;for(let i=n.computed.deps;i;i=i.nextDep)Ys(i,!0)}!t&&!--n.sc&&n.map&&n.map.delete(n.key)}function Yl(e){const{prevDep:t,nextDep:n}=e;t&&(t.nextDep=n,e.prevDep=void 0),n&&(n.prevDep=t,e.nextDep=void 0)}let gt=!0;const mi=[];function It(){mi.push(gt),gt=!1}function Mt(){const e=mi.pop();gt=e===void 0?!0:e}function bi(e){const{cleanup:t}=e;if(e.cleanup=void 0,t){const n=_e;_e=void 0;try{t()}finally{_e=n}}}let Mn=0;class Zl{constructor(t,n){this.sub=t,this.dep=n,this.version=n.version,this.nextDep=this.prevDep=this.nextSub=this.prevSub=this.prevActiveLink=void 0}}class Zs{constructor(t){this.computed=t,this.version=0,this.activeLink=void 0,this.subs=void 0,this.map=void 0,this.key=void 0,this.sc=0,this.__v_skip=!0}track(t){if(!_e||!gt||_e===this.computed)return;let n=this.activeLink;if(n===void 0||n.sub!==_e)n=this.activeLink=new Zl(_e,this),_e.deps?(n.prevDep=_e.depsTail,_e.depsTail.nextDep=n,_e.depsTail=n):_e.deps=_e.depsTail=n,xi(n);else if(n.version===-1&&(n.version=this.version,n.nextDep)){const s=n.nextDep;s.prevDep=n.prevDep,n.prevDep&&(n.prevDep.nextDep=s),n.prevDep=_e.depsTail,n.nextDep=void 0,_e.depsTail.nextDep=n,_e.depsTail=n,_e.deps===n&&(_e.deps=s)}return n}trigger(t){this.version++,Mn++,this.notify(t)}notify(t){Ws();try{for(let n=this.subs;n;n=n.prevSub)n.sub.notify()&&n.sub.dep.notify()}finally{Gs()}}}function xi(e){if(e.dep.sc++,e.sub.flags&4){const t=e.dep.computed;if(t&&!e.dep.subs){t.flags|=20;for(let s=t.deps;s;s=s.nextDep)xi(s)}const n=e.dep.subs;n!==e&&(e.prevSub=n,n&&(n.nextSub=e)),e.dep.subs=e}}const Xs=new WeakMap,en=Symbol(""),Qs=Symbol(""),Ln=Symbol("");function Ue(e,t,n){if(gt&&_e){let s=Xs.get(e);s||Xs.set(e,s=new Map);let r=s.get(n);r||(s.set(n,r=new Zs),r.map=s,r.key=n),r.track()}}function Lt(e,t,n,s,r,i){const o=Xs.get(e);if(!o){Mn++;return}const a=l=>{l&&l.trigger()};if(Ws(),t==="clear")o.forEach(a);else{const l=X(e),c=l&&Bs(n);if(l&&n==="length"){const u=Number(s);o.forEach((p,g)=>{(g==="length"||g===Ln||!zt(g)&&g>=u)&&a(p)})}else switch((n!==void 0||o.has(void 0))&&a(o.get(n)),c&&a(o.get(Ln)),t){case"add":l?c&&a(o.get("length")):(a(o.get(en)),pn(e)&&a(o.get(Qs)));break;case"delete":l||(a(o.get(en)),pn(e)&&a(o.get(Qs)));break;case"set":pn(e)&&a(o.get(en));break}}Gs()}function hn(e){const t=oe(e);return t===e?t:(Ue(t,"iterate",Ln),lt(e)?t:t.map(Fe))}function is(e){return Ue(e=oe(e),"iterate",Ln),e}const Xl={__proto__:null,[Symbol.iterator](){return Js(this,Symbol.iterator,Fe)},concat(...e){return hn(this).concat(...e.map(t=>X(t)?hn(t):t))},entries(){return Js(this,"entries",e=>(e[1]=Fe(e[1]),e))},every(e,t){return Ot(this,"every",e,t,void 0,arguments)},filter(e,t){return Ot(this,"filter",e,t,n=>n.map(Fe),arguments)},find(e,t){return Ot(this,"find",e,t,Fe,arguments)},findIndex(e,t){return Ot(this,"findIndex",e,t,void 0,arguments)},findLast(e,t){return Ot(this,"findLast",e,t,Fe,arguments)},findLastIndex(e,t){return Ot(this,"findLastIndex",e,t,void 0,arguments)},forEach(e,t){return Ot(this,"forEach",e,t,void 0,arguments)},includes(...e){return er(this,"includes",e)},indexOf(...e){return er(this,"indexOf",e)},join(e){return hn(this).join(e)},lastIndexOf(...e){return er(this,"lastIndexOf",e)},map(e,t){return Ot(this,"map",e,t,void 0,arguments)},pop(){return On(this,"pop")},push(...e){return On(this,"push",e)},reduce(e,...t){return yi(this,"reduce",e,t)},reduceRight(e,...t){return yi(this,"reduceRight",e,t)},shift(){return On(this,"shift")},some(e,t){return Ot(this,"some",e,t,void 0,arguments)},splice(...e){return On(this,"splice",e)},toReversed(){return hn(this).toReversed()},toSorted(e){return hn(this).toSorted(e)},toSpliced(...e){return hn(this).toSpliced(...e)},unshift(...e){return On(this,"unshift",e)},values(){return Js(this,"values",Fe)}};function Js(e,t,n){const s=is(e),r=s[t]();return s!==e&&!lt(e)&&(r._next=r.next,r.next=()=>{const i=r._next();return i.value&&(i.value=n(i.value)),i}),r}const Ql=Array.prototype;function Ot(e,t,n,s,r,i){const o=is(e),a=o!==e&&!lt(e),l=o[t];if(l!==Ql[t]){const p=l.apply(e,i);return a?Fe(p):p}let c=n;o!==e&&(a?c=function(p,g){return n.call(this,Fe(p),g,e)}:n.length>2&&(c=function(p,g){return n.call(this,p,g,e)}));const u=l.call(o,c,s);return a&&r?r(u):u}function yi(e,t,n,s){const r=is(e);let i=n;return r!==e&&(lt(e)?n.length>3&&(i=function(o,a,l){return n.call(this,o,a,l,e)}):i=function(o,a,l){return n.call(this,o,Fe(a),l,e)}),r[t](i,...s)}function er(e,t,n){const s=oe(e);Ue(s,"iterate",Ln);const r=s[t](...n);return(r===-1||r===!1)&&nr(n[0])?(n[0]=oe(n[0]),s[t](...n)):r}function On(e,t,n=[]){It(),Ws();const s=oe(e)[t].apply(e,n);return Gs(),Mt(),s}const Jl=Pt("__proto__,__v_isRef,__isVue"),wi=new Set(Object.getOwnPropertyNames(Symbol).filter(e=>e!=="arguments"&&e!=="caller").map(e=>Symbol[e]).filter(zt));function ea(e){zt(e)||(e=String(e));const t=oe(this);return Ue(t,"has",e),t.hasOwnProperty(e)}class vi{constructor(t=!1,n=!1){this._isReadonly=t,this._isShallow=n}get(t,n,s){if(n==="__v_skip")return t.__v_skip;const r=this._isReadonly,i=this._isShallow;if(n==="__v_isReactive")return!r;if(n==="__v_isReadonly")return r;if(n==="__v_isShallow")return i;if(n==="__v_raw")return s===(r?i?Ai:Ei:i?Si:ki).get(t)||Object.getPrototypeOf(t)===Object.getPrototypeOf(s)?t:void 0;const o=X(t);if(!r){let l;if(o&&(l=Xl[n]))return l;if(n==="hasOwnProperty")return ea}const a=Reflect.get(t,n,je(t)?t:s);return(zt(n)?wi.has(n):Jl(n))||(r||Ue(t,"get",n),i)?a:je(a)?o&&Bs(n)?a:a.value:Ae(a)?r?Ri(a):us(a):a}}class _i extends vi{constructor(t=!1){super(!1,t)}set(t,n,s,r){let i=t[n];if(!this._isShallow){const l=Vt(i);if(!lt(s)&&!Vt(s)&&(i=oe(i),s=oe(s)),!X(t)&&je(i)&&!je(s))return l?!1:(i.value=s,!0)}const o=X(t)&&Bs(n)?Number(n)e,os=e=>Reflect.getPrototypeOf(e);function ia(e,t,n){return function(...s){const r=this.__v_raw,i=oe(r),o=pn(i),a=e==="entries"||e===Symbol.iterator&&o,l=e==="keys"&&o,c=r[e](...s),u=n?tr:t?fs:Fe;return!t&&Ue(i,"iterate",l?Qs:en),{next(){const{value:p,done:g}=c.next();return g?{value:p,done:g}:{value:a?[u(p[0]),u(p[1])]:u(p),done:g}},[Symbol.iterator](){return this}}}}function ls(e){return function(...t){return e==="delete"?!1:e==="clear"?void 0:this}}function oa(e,t){const n={get(r){const i=this.__v_raw,o=oe(i),a=oe(r);e||(jt(r,a)&&Ue(o,"get",r),Ue(o,"get",a));const{has:l}=os(o),c=t?tr:e?fs:Fe;if(l.call(o,r))return c(i.get(r));if(l.call(o,a))return c(i.get(a));i!==o&&i.get(r)},get size(){const r=this.__v_raw;return!e&&Ue(oe(r),"iterate",en),Reflect.get(r,"size",r)},has(r){const i=this.__v_raw,o=oe(i),a=oe(r);return e||(jt(r,a)&&Ue(o,"has",r),Ue(o,"has",a)),r===a?i.has(r):i.has(r)||i.has(a)},forEach(r,i){const o=this,a=o.__v_raw,l=oe(a),c=t?tr:e?fs:Fe;return!e&&Ue(l,"iterate",en),a.forEach((u,p)=>r.call(i,c(u),c(p),o))}};return ht(n,e?{add:ls("add"),set:ls("set"),delete:ls("delete"),clear:ls("clear")}:{add(r){!t&&!lt(r)&&!Vt(r)&&(r=oe(r));const i=oe(this);return os(i).has.call(i,r)||(i.add(r),Lt(i,"add",r,r)),this},set(r,i){!t&&!lt(i)&&!Vt(i)&&(i=oe(i));const o=oe(this),{has:a,get:l}=os(o);let c=a.call(o,r);c||(r=oe(r),c=a.call(o,r));const u=l.call(o,r);return o.set(r,i),c?jt(i,u)&&Lt(o,"set",r,i):Lt(o,"add",r,i),this},delete(r){const i=oe(this),{has:o,get:a}=os(i);let l=o.call(i,r);l||(r=oe(r),l=o.call(i,r)),a&&a.call(i,r);const c=i.delete(r);return l&&Lt(i,"delete",r,void 0),c},clear(){const r=oe(this),i=r.size!==0,o=r.clear();return i&&Lt(r,"clear",void 0,void 0),o}}),["keys","values","entries",Symbol.iterator].forEach(r=>{n[r]=ia(r,e,t)}),n}function as(e,t){const n=oa(e,t);return(s,r,i)=>r==="__v_isReactive"?!e:r==="__v_isReadonly"?e:r==="__v_raw"?s:Reflect.get(he(n,r)&&r in s?n:s,r,i)}const la={get:as(!1,!1)},aa={get:as(!1,!0)},ua={get:as(!0,!1)},ca={get:as(!0,!0)},ki=new WeakMap,Si=new WeakMap,Ei=new WeakMap,Ai=new WeakMap;function fa(e){switch(e){case"Object":case"Array":return 1;case"Map":case"Set":case"WeakMap":case"WeakSet":return 2;default:return 0}}function da(e){return e.__v_skip||!Object.isExtensible(e)?0:fa(Fl(e))}function us(e){return Vt(e)?e:cs(e,!1,ta,la,ki)}function pa(e){return cs(e,!1,sa,aa,Si)}function Ri(e){return cs(e,!0,na,ua,Ei)}function kp(e){return cs(e,!0,ra,ca,Ai)}function cs(e,t,n,s,r){if(!Ae(e)||e.__v_raw&&!(t&&e.__v_isReactive))return e;const i=da(e);if(i===0)return e;const o=r.get(e);if(o)return o;const a=new Proxy(e,i===2?s:n);return r.set(e,a),a}function gn(e){return Vt(e)?gn(e.__v_raw):!!(e&&e.__v_isReactive)}function Vt(e){return!!(e&&e.__v_isReadonly)}function lt(e){return!!(e&&e.__v_isShallow)}function nr(e){return e?!!e.__v_raw:!1}function oe(e){const t=e&&e.__v_raw;return t?oe(t):e}function ha(e){return!he(e,"__v_skip")&&Object.isExtensible(e)&&zs(e,"__v_skip",!0),e}const Fe=e=>Ae(e)?us(e):e,fs=e=>Ae(e)?Ri(e):e;function je(e){return e?e.__v_isRef===!0:!1}function Q(e){return ga(e,!1)}function ga(e,t){return je(e)?e:new ma(e,t)}class ma{constructor(t,n){this.dep=new Zs,this.__v_isRef=!0,this.__v_isShallow=!1,this._rawValue=n?t:oe(t),this._value=n?t:Fe(t),this.__v_isShallow=n}get value(){return this.dep.track(),this._value}set value(t){const n=this._rawValue,s=this.__v_isShallow||lt(t)||Vt(t);t=s?t:oe(t),jt(t,n)&&(this._rawValue=t,this._value=s?t:Fe(t),this.dep.trigger())}}function ba(e){return je(e)?e.value:e}const xa={get:(e,t,n)=>t==="__v_raw"?e:ba(Reflect.get(e,t,n)),set:(e,t,n,s)=>{const r=e[t];return je(r)&&!je(n)?(r.value=n,!0):Reflect.set(e,t,n,s)}};function Ci(e){return gn(e)?e:new Proxy(e,xa)}class ya{constructor(t,n,s){this.fn=t,this.setter=n,this._value=void 0,this.dep=new Zs(this),this.__v_isRef=!0,this.deps=void 0,this.depsTail=void 0,this.flags=16,this.globalVersion=Mn-1,this.next=void 0,this.effect=this,this.__v_isReadonly=!n,this.isSSR=s}notify(){if(this.flags|=16,!(this.flags&8)&&_e!==this)return di(this,!0),!0}get value(){const t=this.dep.track();return gi(this),t&&(t.version=this.dep.version),this._value}set value(t){this.setter&&this.setter(t)}}function wa(e,t,n=!1){let s,r;return me(e)?s=e:(s=e.get,r=e.set),new ya(s,r,n)}const ds={},ps=new WeakMap;let tn;function va(e,t=!1,n=tn){if(n){let s=ps.get(n);s||ps.set(n,s=[]),s.push(e)}}function _a(e,t,n=re){const{immediate:s,deep:r,once:i,scheduler:o,augmentJob:a,call:l}=n,c=O=>r?O:lt(O)||r===!1||r===0?$t(O,1):$t(O);let u,p,g,w,E=!1,m=!1;if(je(e)?(p=()=>e.value,E=lt(e)):gn(e)?(p=()=>c(e),E=!0):X(e)?(m=!0,E=e.some(O=>gn(O)||lt(O)),p=()=>e.map(O=>{if(je(O))return O.value;if(gn(O))return c(O);if(me(O))return l?l(O,2):O()})):me(e)?t?p=l?()=>l(e,2):e:p=()=>{if(g){It();try{g()}finally{Mt()}}const O=tn;tn=u;try{return l?l(e,3,[w]):e(w)}finally{tn=O}}:p=Qt,t&&r){const O=p,A=r===!0?1/0:r;p=()=>$t(O(),A)}const R=Kl(),S=()=>{u.stop(),R&&R.active&&ei(R.effects,u)};if(i&&t){const O=t;t=(...A)=>{O(...A),S()}}let V=m?new Array(e.length).fill(ds):ds;const K=O=>{if(!(!(u.flags&1)||!u.dirty&&!O))if(t){const A=u.run();if(r||E||(m?A.some((C,J)=>jt(C,V[J])):jt(A,V))){g&&g();const C=tn;tn=u;try{const J=[A,V===ds?void 0:m&&V[0]===ds?[]:V,w];V=A,l?l(t,3,J):t(...J)}finally{tn=C}}}else u.run()};return a&&a(K),u=new ci(p),u.scheduler=o?()=>o(K,!1):K,w=O=>va(O,!1,u),g=u.onStop=()=>{const O=ps.get(u);if(O){if(l)l(O,4);else for(const A of O)A();ps.delete(u)}},t?s?K(!0):V=u.run():o?o(K.bind(null,!0),!0):u.run(),S.pause=u.pause.bind(u),S.resume=u.resume.bind(u),S.stop=S,S}function $t(e,t=1/0,n){if(t<=0||!Ae(e)||e.__v_skip||(n=n||new Set,n.has(e)))return e;if(n.add(e),t--,je(e))$t(e.value,t,n);else if(X(e))for(let s=0;s{$t(s,t,n)});else if(ri(e)){for(const s in e)$t(e[s],t,n);for(const s of Object.getOwnPropertySymbols(e))Object.prototype.propertyIsEnumerable.call(e,s)&&$t(e[s],t,n)}return e}const $n=[];let sr=!1;function Sp(e,...t){if(sr)return;sr=!0,It();const n=$n.length?$n[$n.length-1].component:null,s=n&&n.appContext.config.warnHandler,r=Ta();if(s)mn(s,n,11,[e+t.map(i=>{var o,a;return(a=(o=i.toString)==null?void 0:o.call(i))!=null?a:JSON.stringify(i)}).join(""),n&&n.proxy,r.map(({vnode:i})=>`at <${mo(n,i.type)}>`).join(` +var vp=Object.defineProperty;var _p=(Pt,re,pt)=>re in Pt?vp(Pt,re,{enumerable:!0,configurable:!0,writable:!0,value:pt}):Pt[re]=pt;var we=(Pt,re,pt)=>_p(Pt,typeof re!="symbol"?re+"":re,pt);(function(){"use strict";var Ns;function Pt(e){const t=Object.create(null);for(const n of e.split(","))t[n]=1;return n=>n in t}const re={},pt=[],Qt=()=>{},Dl=()=>!1,es=e=>e.charCodeAt(0)===111&&e.charCodeAt(1)===110&&(e.charCodeAt(2)>122||e.charCodeAt(2)<97),Bs=e=>e.startsWith("onUpdate:"),ht=Object.assign,ei=(e,t)=>{const n=e.indexOf(t);n>-1&&e.splice(n,1)},Nl=Object.prototype.hasOwnProperty,he=(e,t)=>Nl.call(e,t),X=Array.isArray,pn=e=>ts(e)==="[object Map]",ti=e=>ts(e)==="[object Set]",me=e=>typeof e=="function",Ce=e=>typeof e=="string",zt=e=>typeof e=="symbol",Ae=e=>e!==null&&typeof e=="object",ni=e=>(Ae(e)||me(e))&&me(e.then)&&me(e.catch),si=Object.prototype.toString,ts=e=>si.call(e),Fl=e=>ts(e).slice(8,-1),ri=e=>ts(e)==="[object Object]",Hs=e=>Ce(e)&&e!=="NaN"&&e[0]!=="-"&&""+parseInt(e,10)===e,Cn=Pt(",key,ref,ref_for,ref_key,onVnodeBeforeMount,onVnodeMounted,onVnodeBeforeUpdate,onVnodeUpdated,onVnodeBeforeUnmount,onVnodeUnmounted"),ns=e=>{const t=Object.create(null);return n=>t[n]||(t[n]=e(n))},Bl=/-(\w)/g,Ut=ns(e=>e.replace(Bl,(t,n)=>n?n.toUpperCase():"")),Hl=/\B([A-Z])/g,Jt=ns(e=>e.replace(Hl,"-$1").toLowerCase()),ii=ns(e=>e.charAt(0).toUpperCase()+e.slice(1)),zs=ns(e=>e?`on${ii(e)}`:""),jt=(e,t)=>!Object.is(e,t),ss=(e,...t)=>{for(let n=0;n{Object.defineProperty(e,t,{configurable:!0,enumerable:!1,writable:s,value:n})},js=e=>{const t=parseFloat(e);return isNaN(t)?e:t},zl=e=>{const t=Ce(e)?Number(e):NaN;return isNaN(t)?e:t};let oi;const rs=()=>oi||(oi=typeof globalThis!="undefined"?globalThis:typeof self!="undefined"?self:typeof window!="undefined"?window:typeof global!="undefined"?global:{});function Vs(e){if(X(e)){const t={};for(let n=0;n{if(n){const s=n.split(jl);s.length>1&&(t[s[0].trim()]=s[1].trim())}}),t}function ye(e){let t="";if(Ce(e))t=e;else if(X(e))for(let n=0;n!!(e&&e.__v_isRef===!0),Qe=e=>Ce(e)?e:e==null?"":X(e)||Ae(e)&&(e.toString===si||!me(e.toString))?ai(e)?Qe(e.value):JSON.stringify(e,ui,2):String(e),ui=(e,t)=>ai(t)?ui(e,t.value):pn(t)?{[`Map(${t.size})`]:[...t.entries()].reduce((n,[s,r],i)=>(n[qs(s,i)+" =>"]=r,n),{})}:ti(t)?{[`Set(${t.size})`]:[...t.values()].map(n=>qs(n))}:zt(t)?qs(t):Ae(t)&&!X(t)&&!ri(t)?String(t):t,qs=(e,t="")=>{var n;return zt(e)?`Symbol(${(n=e.description)!=null?n:t})`:e};let Je;class Gl{constructor(t=!1){this.detached=t,this._active=!0,this._on=0,this.effects=[],this.cleanups=[],this._isPaused=!1,this.parent=Je,!t&&Je&&(this.index=(Je.scopes||(Je.scopes=[])).push(this)-1)}get active(){return this._active}pause(){if(this._active){this._isPaused=!0;let t,n;if(this.scopes)for(t=0,n=this.scopes.length;t0&&--this._on===0&&(Je=this.prevScope,this.prevScope=void 0)}stop(t){if(this._active){this._active=!1;let n,s;for(n=0,s=this.effects.length;n0)return;if(In){let t=In;for(In=void 0;t;){const n=t.next;t.next=void 0,t.flags&=-9,t=n}}let e;for(;Pn;){let t=Pn;for(Pn=void 0;t;){const n=t.next;if(t.next=void 0,t.flags&=-9,t.flags&1)try{t.trigger()}catch(s){e||(e=s)}t=n}}if(e)throw e}function pi(e){for(let t=e.deps;t;t=t.nextDep)t.version=-1,t.prevActiveLink=t.dep.activeLink,t.dep.activeLink=t}function hi(e){let t,n=e.depsTail,s=n;for(;s;){const r=s.prevDep;s.version===-1?(s===n&&(n=r),Zs(s),Yl(s)):t=s,s.dep.activeLink=s.prevActiveLink,s.prevActiveLink=void 0,s=r}e.deps=t,e.depsTail=n}function Ys(e){for(let t=e.deps;t;t=t.nextDep)if(t.dep.version!==t.version||t.dep.computed&&(gi(t.dep.computed)||t.dep.version!==t.version))return!0;return!!e._dirty}function gi(e){if(e.flags&4&&!(e.flags&16)||(e.flags&=-17,e.globalVersion===Mn)||(e.globalVersion=Mn,!e.isSSR&&e.flags&128&&(!e.deps&&!e._dirty||!Ys(e))))return;e.flags|=2;const t=e.dep,n=_e,s=gt;_e=e,gt=!0;try{pi(e);const r=e.fn(e._value);(t.version===0||jt(r,e._value))&&(e.flags|=128,e._value=r,t.version++)}catch(r){throw t.version++,r}finally{_e=n,gt=s,hi(e),e.flags&=-3}}function Zs(e,t=!1){const{dep:n,prevSub:s,nextSub:r}=e;if(s&&(s.nextSub=r,e.prevSub=void 0),r&&(r.prevSub=s,e.nextSub=void 0),n.subs===e&&(n.subs=s,!s&&n.computed)){n.computed.flags&=-5;for(let i=n.computed.deps;i;i=i.nextDep)Zs(i,!0)}!t&&!--n.sc&&n.map&&n.map.delete(n.key)}function Yl(e){const{prevDep:t,nextDep:n}=e;t&&(t.nextDep=n,e.prevDep=void 0),n&&(n.prevDep=t,e.nextDep=void 0)}let gt=!0;const mi=[];function It(){mi.push(gt),gt=!1}function Mt(){const e=mi.pop();gt=e===void 0?!0:e}function bi(e){const{cleanup:t}=e;if(e.cleanup=void 0,t){const n=_e;_e=void 0;try{t()}finally{_e=n}}}let Mn=0;class Zl{constructor(t,n){this.sub=t,this.dep=n,this.version=n.version,this.nextDep=this.prevDep=this.nextSub=this.prevSub=this.prevActiveLink=void 0}}class Xs{constructor(t){this.computed=t,this.version=0,this.activeLink=void 0,this.subs=void 0,this.map=void 0,this.key=void 0,this.sc=0,this.__v_skip=!0}track(t){if(!_e||!gt||_e===this.computed)return;let n=this.activeLink;if(n===void 0||n.sub!==_e)n=this.activeLink=new Zl(_e,this),_e.deps?(n.prevDep=_e.depsTail,_e.depsTail.nextDep=n,_e.depsTail=n):_e.deps=_e.depsTail=n,xi(n);else if(n.version===-1&&(n.version=this.version,n.nextDep)){const s=n.nextDep;s.prevDep=n.prevDep,n.prevDep&&(n.prevDep.nextDep=s),n.prevDep=_e.depsTail,n.nextDep=void 0,_e.depsTail.nextDep=n,_e.depsTail=n,_e.deps===n&&(_e.deps=s)}return n}trigger(t){this.version++,Mn++,this.notify(t)}notify(t){Gs();try{for(let n=this.subs;n;n=n.prevSub)n.sub.notify()&&n.sub.dep.notify()}finally{Ks()}}}function xi(e){if(e.dep.sc++,e.sub.flags&4){const t=e.dep.computed;if(t&&!e.dep.subs){t.flags|=20;for(let s=t.deps;s;s=s.nextDep)xi(s)}const n=e.dep.subs;n!==e&&(e.prevSub=n,n&&(n.nextSub=e)),e.dep.subs=e}}const Qs=new WeakMap,en=Symbol(""),Js=Symbol(""),Ln=Symbol("");function Ue(e,t,n){if(gt&&_e){let s=Qs.get(e);s||Qs.set(e,s=new Map);let r=s.get(n);r||(s.set(n,r=new Xs),r.map=s,r.key=n),r.track()}}function Lt(e,t,n,s,r,i){const o=Qs.get(e);if(!o){Mn++;return}const a=l=>{l&&l.trigger()};if(Gs(),t==="clear")o.forEach(a);else{const l=X(e),c=l&&Hs(n);if(l&&n==="length"){const u=Number(s);o.forEach((p,g)=>{(g==="length"||g===Ln||!zt(g)&&g>=u)&&a(p)})}else switch((n!==void 0||o.has(void 0))&&a(o.get(n)),c&&a(o.get(Ln)),t){case"add":l?c&&a(o.get("length")):(a(o.get(en)),pn(e)&&a(o.get(Js)));break;case"delete":l||(a(o.get(en)),pn(e)&&a(o.get(Js)));break;case"set":pn(e)&&a(o.get(en));break}}Ks()}function hn(e){const t=oe(e);return t===e?t:(Ue(t,"iterate",Ln),lt(e)?t:t.map(Fe))}function is(e){return Ue(e=oe(e),"iterate",Ln),e}const Xl={__proto__:null,[Symbol.iterator](){return er(this,Symbol.iterator,Fe)},concat(...e){return hn(this).concat(...e.map(t=>X(t)?hn(t):t))},entries(){return er(this,"entries",e=>(e[1]=Fe(e[1]),e))},every(e,t){return Ot(this,"every",e,t,void 0,arguments)},filter(e,t){return Ot(this,"filter",e,t,n=>n.map(Fe),arguments)},find(e,t){return Ot(this,"find",e,t,Fe,arguments)},findIndex(e,t){return Ot(this,"findIndex",e,t,void 0,arguments)},findLast(e,t){return Ot(this,"findLast",e,t,Fe,arguments)},findLastIndex(e,t){return Ot(this,"findLastIndex",e,t,void 0,arguments)},forEach(e,t){return Ot(this,"forEach",e,t,void 0,arguments)},includes(...e){return tr(this,"includes",e)},indexOf(...e){return tr(this,"indexOf",e)},join(e){return hn(this).join(e)},lastIndexOf(...e){return tr(this,"lastIndexOf",e)},map(e,t){return Ot(this,"map",e,t,void 0,arguments)},pop(){return On(this,"pop")},push(...e){return On(this,"push",e)},reduce(e,...t){return yi(this,"reduce",e,t)},reduceRight(e,...t){return yi(this,"reduceRight",e,t)},shift(){return On(this,"shift")},some(e,t){return Ot(this,"some",e,t,void 0,arguments)},splice(...e){return On(this,"splice",e)},toReversed(){return hn(this).toReversed()},toSorted(e){return hn(this).toSorted(e)},toSpliced(...e){return hn(this).toSpliced(...e)},unshift(...e){return On(this,"unshift",e)},values(){return er(this,"values",Fe)}};function er(e,t,n){const s=is(e),r=s[t]();return s!==e&&!lt(e)&&(r._next=r.next,r.next=()=>{const i=r._next();return i.value&&(i.value=n(i.value)),i}),r}const Ql=Array.prototype;function Ot(e,t,n,s,r,i){const o=is(e),a=o!==e&&!lt(e),l=o[t];if(l!==Ql[t]){const p=l.apply(e,i);return a?Fe(p):p}let c=n;o!==e&&(a?c=function(p,g){return n.call(this,Fe(p),g,e)}:n.length>2&&(c=function(p,g){return n.call(this,p,g,e)}));const u=l.call(o,c,s);return a&&r?r(u):u}function yi(e,t,n,s){const r=is(e);let i=n;return r!==e&&(lt(e)?n.length>3&&(i=function(o,a,l){return n.call(this,o,a,l,e)}):i=function(o,a,l){return n.call(this,o,Fe(a),l,e)}),r[t](i,...s)}function tr(e,t,n){const s=oe(e);Ue(s,"iterate",Ln);const r=s[t](...n);return(r===-1||r===!1)&&sr(n[0])?(n[0]=oe(n[0]),s[t](...n)):r}function On(e,t,n=[]){It(),Gs();const s=oe(e)[t].apply(e,n);return Ks(),Mt(),s}const Jl=Pt("__proto__,__v_isRef,__isVue"),wi=new Set(Object.getOwnPropertyNames(Symbol).filter(e=>e!=="arguments"&&e!=="caller").map(e=>Symbol[e]).filter(zt));function ea(e){zt(e)||(e=String(e));const t=oe(this);return Ue(t,"has",e),t.hasOwnProperty(e)}class vi{constructor(t=!1,n=!1){this._isReadonly=t,this._isShallow=n}get(t,n,s){if(n==="__v_skip")return t.__v_skip;const r=this._isReadonly,i=this._isShallow;if(n==="__v_isReactive")return!r;if(n==="__v_isReadonly")return r;if(n==="__v_isShallow")return i;if(n==="__v_raw")return s===(r?i?Ai:Ei:i?Si:Ti).get(t)||Object.getPrototypeOf(t)===Object.getPrototypeOf(s)?t:void 0;const o=X(t);if(!r){let l;if(o&&(l=Xl[n]))return l;if(n==="hasOwnProperty")return ea}const a=Reflect.get(t,n,je(t)?t:s);return(zt(n)?wi.has(n):Jl(n))||(r||Ue(t,"get",n),i)?a:je(a)?o&&Hs(n)?a:a.value:Ae(a)?r?Ri(a):us(a):a}}class _i extends vi{constructor(t=!1){super(!1,t)}set(t,n,s,r){let i=t[n];if(!this._isShallow){const l=Vt(i);if(!lt(s)&&!Vt(s)&&(i=oe(i),s=oe(s)),!X(t)&&je(i)&&!je(s))return l?!1:(i.value=s,!0)}const o=X(t)&&Hs(n)?Number(n)e,os=e=>Reflect.getPrototypeOf(e);function ia(e,t,n){return function(...s){const r=this.__v_raw,i=oe(r),o=pn(i),a=e==="entries"||e===Symbol.iterator&&o,l=e==="keys"&&o,c=r[e](...s),u=n?nr:t?fs:Fe;return!t&&Ue(i,"iterate",l?Js:en),{next(){const{value:p,done:g}=c.next();return g?{value:p,done:g}:{value:a?[u(p[0]),u(p[1])]:u(p),done:g}},[Symbol.iterator](){return this}}}}function ls(e){return function(...t){return e==="delete"?!1:e==="clear"?void 0:this}}function oa(e,t){const n={get(r){const i=this.__v_raw,o=oe(i),a=oe(r);e||(jt(r,a)&&Ue(o,"get",r),Ue(o,"get",a));const{has:l}=os(o),c=t?nr:e?fs:Fe;if(l.call(o,r))return c(i.get(r));if(l.call(o,a))return c(i.get(a));i!==o&&i.get(r)},get size(){const r=this.__v_raw;return!e&&Ue(oe(r),"iterate",en),Reflect.get(r,"size",r)},has(r){const i=this.__v_raw,o=oe(i),a=oe(r);return e||(jt(r,a)&&Ue(o,"has",r),Ue(o,"has",a)),r===a?i.has(r):i.has(r)||i.has(a)},forEach(r,i){const o=this,a=o.__v_raw,l=oe(a),c=t?nr:e?fs:Fe;return!e&&Ue(l,"iterate",en),a.forEach((u,p)=>r.call(i,c(u),c(p),o))}};return ht(n,e?{add:ls("add"),set:ls("set"),delete:ls("delete"),clear:ls("clear")}:{add(r){!t&&!lt(r)&&!Vt(r)&&(r=oe(r));const i=oe(this);return os(i).has.call(i,r)||(i.add(r),Lt(i,"add",r,r)),this},set(r,i){!t&&!lt(i)&&!Vt(i)&&(i=oe(i));const o=oe(this),{has:a,get:l}=os(o);let c=a.call(o,r);c||(r=oe(r),c=a.call(o,r));const u=l.call(o,r);return o.set(r,i),c?jt(i,u)&&Lt(o,"set",r,i):Lt(o,"add",r,i),this},delete(r){const i=oe(this),{has:o,get:a}=os(i);let l=o.call(i,r);l||(r=oe(r),l=o.call(i,r)),a&&a.call(i,r);const c=i.delete(r);return l&&Lt(i,"delete",r,void 0),c},clear(){const r=oe(this),i=r.size!==0,o=r.clear();return i&&Lt(r,"clear",void 0,void 0),o}}),["keys","values","entries",Symbol.iterator].forEach(r=>{n[r]=ia(r,e,t)}),n}function as(e,t){const n=oa(e,t);return(s,r,i)=>r==="__v_isReactive"?!e:r==="__v_isReadonly"?e:r==="__v_raw"?s:Reflect.get(he(n,r)&&r in s?n:s,r,i)}const la={get:as(!1,!1)},aa={get:as(!1,!0)},ua={get:as(!0,!1)},ca={get:as(!0,!0)},Ti=new WeakMap,Si=new WeakMap,Ei=new WeakMap,Ai=new WeakMap;function fa(e){switch(e){case"Object":case"Array":return 1;case"Map":case"Set":case"WeakMap":case"WeakSet":return 2;default:return 0}}function da(e){return e.__v_skip||!Object.isExtensible(e)?0:fa(Fl(e))}function us(e){return Vt(e)?e:cs(e,!1,ta,la,Ti)}function pa(e){return cs(e,!1,sa,aa,Si)}function Ri(e){return cs(e,!0,na,ua,Ei)}function Tp(e){return cs(e,!0,ra,ca,Ai)}function cs(e,t,n,s,r){if(!Ae(e)||e.__v_raw&&!(t&&e.__v_isReactive))return e;const i=da(e);if(i===0)return e;const o=r.get(e);if(o)return o;const a=new Proxy(e,i===2?s:n);return r.set(e,a),a}function gn(e){return Vt(e)?gn(e.__v_raw):!!(e&&e.__v_isReactive)}function Vt(e){return!!(e&&e.__v_isReadonly)}function lt(e){return!!(e&&e.__v_isShallow)}function sr(e){return e?!!e.__v_raw:!1}function oe(e){const t=e&&e.__v_raw;return t?oe(t):e}function ha(e){return!he(e,"__v_skip")&&Object.isExtensible(e)&&Us(e,"__v_skip",!0),e}const Fe=e=>Ae(e)?us(e):e,fs=e=>Ae(e)?Ri(e):e;function je(e){return e?e.__v_isRef===!0:!1}function Q(e){return ga(e,!1)}function ga(e,t){return je(e)?e:new ma(e,t)}class ma{constructor(t,n){this.dep=new Xs,this.__v_isRef=!0,this.__v_isShallow=!1,this._rawValue=n?t:oe(t),this._value=n?t:Fe(t),this.__v_isShallow=n}get value(){return this.dep.track(),this._value}set value(t){const n=this._rawValue,s=this.__v_isShallow||lt(t)||Vt(t);t=s?t:oe(t),jt(t,n)&&(this._rawValue=t,this._value=s?t:Fe(t),this.dep.trigger())}}function ba(e){return je(e)?e.value:e}const xa={get:(e,t,n)=>t==="__v_raw"?e:ba(Reflect.get(e,t,n)),set:(e,t,n,s)=>{const r=e[t];return je(r)&&!je(n)?(r.value=n,!0):Reflect.set(e,t,n,s)}};function Ci(e){return gn(e)?e:new Proxy(e,xa)}class ya{constructor(t,n,s){this.fn=t,this.setter=n,this._value=void 0,this.dep=new Xs(this),this.__v_isRef=!0,this.deps=void 0,this.depsTail=void 0,this.flags=16,this.globalVersion=Mn-1,this.next=void 0,this.effect=this,this.__v_isReadonly=!n,this.isSSR=s}notify(){if(this.flags|=16,!(this.flags&8)&&_e!==this)return di(this,!0),!0}get value(){const t=this.dep.track();return gi(this),t&&(t.version=this.dep.version),this._value}set value(t){this.setter&&this.setter(t)}}function wa(e,t,n=!1){let s,r;return me(e)?s=e:(s=e.get,r=e.set),new ya(s,r,n)}const ds={},ps=new WeakMap;let tn;function va(e,t=!1,n=tn){if(n){let s=ps.get(n);s||ps.set(n,s=[]),s.push(e)}}function _a(e,t,n=re){const{immediate:s,deep:r,once:i,scheduler:o,augmentJob:a,call:l}=n,c=O=>r?O:lt(O)||r===!1||r===0?$t(O,1):$t(O);let u,p,g,w,E=!1,m=!1;if(je(e)?(p=()=>e.value,E=lt(e)):gn(e)?(p=()=>c(e),E=!0):X(e)?(m=!0,E=e.some(O=>gn(O)||lt(O)),p=()=>e.map(O=>{if(je(O))return O.value;if(gn(O))return c(O);if(me(O))return l?l(O,2):O()})):me(e)?t?p=l?()=>l(e,2):e:p=()=>{if(g){It();try{g()}finally{Mt()}}const O=tn;tn=u;try{return l?l(e,3,[w]):e(w)}finally{tn=O}}:p=Qt,t&&r){const O=p,A=r===!0?1/0:r;p=()=>$t(O(),A)}const R=Kl(),S=()=>{u.stop(),R&&R.active&&ei(R.effects,u)};if(i&&t){const O=t;t=(...A)=>{O(...A),S()}}let V=m?new Array(e.length).fill(ds):ds;const K=O=>{if(!(!(u.flags&1)||!u.dirty&&!O))if(t){const A=u.run();if(r||E||(m?A.some((C,J)=>jt(C,V[J])):jt(A,V))){g&&g();const C=tn;tn=u;try{const J=[A,V===ds?void 0:m&&V[0]===ds?[]:V,w];V=A,l?l(t,3,J):t(...J)}finally{tn=C}}}else u.run()};return a&&a(K),u=new ci(p),u.scheduler=o?()=>o(K,!1):K,w=O=>va(O,!1,u),g=u.onStop=()=>{const O=ps.get(u);if(O){if(l)l(O,4);else for(const A of O)A();ps.delete(u)}},t?s?K(!0):V=u.run():o?o(K.bind(null,!0),!0):u.run(),S.pause=u.pause.bind(u),S.resume=u.resume.bind(u),S.stop=S,S}function $t(e,t=1/0,n){if(t<=0||!Ae(e)||e.__v_skip||(n=n||new Set,n.has(e)))return e;if(n.add(e),t--,je(e))$t(e.value,t,n);else if(X(e))for(let s=0;s{$t(s,t,n)});else if(ri(e)){for(const s in e)$t(e[s],t,n);for(const s of Object.getOwnPropertySymbols(e))Object.prototype.propertyIsEnumerable.call(e,s)&&$t(e[s],t,n)}return e}const $n=[];let rr=!1;function Sp(e,...t){if(rr)return;rr=!0,It();const n=$n.length?$n[$n.length-1].component:null,s=n&&n.appContext.config.warnHandler,r=ka();if(s)mn(s,n,11,[e+t.map(i=>{var o,a;return(a=(o=i.toString)==null?void 0:o.call(i))!=null?a:JSON.stringify(i)}).join(""),n&&n.proxy,r.map(({vnode:i})=>`at <${mo(n,i.type)}>`).join(` `),r]);else{const i=[`[Vue warn]: ${e}`,...t];r.length&&i.push(` -`,...ka(r))}Mt(),sr=!1}function Ta(){let e=$n[$n.length-1];if(!e)return[];const t=[];for(;e;){const n=t[0];n&&n.vnode===e?n.recurseCount++:t.push({vnode:e,recurseCount:0});const s=e.component&&e.component.parent;e=s&&s.vnode}return t}function ka(e){const t=[];return e.forEach((n,s)=>{t.push(...s===0?[]:[` -`],...Sa(n))}),t}function Sa({vnode:e,recurseCount:t}){const n=t>0?`... (${t} recursive calls)`:"",s=e.component?e.component.parent==null:!1,r=` at <${mo(e.component,e.type,s)}`,i=">"+n;return e.props?[r,...Ea(e.props),i]:[r+i]}function Ea(e){const t=[],n=Object.keys(e);return n.slice(0,3).forEach(s=>{t.push(...Pi(s,e[s]))}),n.length>3&&t.push(" ..."),t}function Pi(e,t,n){return Ce(t)?(t=JSON.stringify(t),n?t:[`${e}=${t}`]):typeof t=="number"||typeof t=="boolean"||t==null?n?t:[`${e}=${t}`]:je(t)?(t=Pi(e,oe(t.value),!0),n?t:[`${e}=Ref<`,t,">"]):me(t)?[`${e}=fn${t.name?`<${t.name}>`:""}`]:(t=oe(t),n?t:[`${e}=`,t])}function mn(e,t,n,s){try{return s?e(...s):e()}catch(r){hs(r,t,n)}}function _t(e,t,n,s){if(me(e)){const r=mn(e,t,n,s);return r&&ni(r)&&r.catch(i=>{hs(i,t,n)}),r}if(X(e)){const r=[];for(let i=0;i>>1,r=Ge[s],i=Dn(r);i=Dn(n)?Ge.push(e):Ge.splice(Ra(t),0,e),e.flags|=1,Mi()}}function Mi(){gs||(gs=Ii.then($i))}function Ca(e){X(e)?bn.push(...e):qt&&e.id===-1?qt.splice(xn+1,0,e):e.flags&1||(bn.push(e),e.flags|=1),Mi()}function Li(e,t,n=Tt+1){for(;nDn(n)-Dn(s));if(bn.length=0,qt){qt.push(...t);return}for(qt=t,xn=0;xne.id==null?e.flags&2?-1:1/0:e.id;function $i(e){try{for(Tt=0;Tt{s._d&&lo(-1);const i=ms(t);let o;try{o=e(...r)}finally{ms(i),s._d&&lo(1)}return o};return s._n=!0,s._c=!0,s._d=!0,s}function Pa(e,t){if(at===null)return e;const n=Ss(at),s=e.dirs||(e.dirs=[]);for(let r=0;re.__isTeleport,Wt=Symbol("_leaveCb"),bs=Symbol("_enterCb");function Ma(){const e={isMounted:!1,isLeaving:!1,isUnmounting:!1,leavingVNodes:new Map};return Hn(()=>{e.isMounted=!0}),xs(()=>{e.isUnmounting=!0}),e}const ut=[Function,Array],Bi={mode:String,appear:Boolean,persisted:Boolean,onBeforeEnter:ut,onEnter:ut,onAfterEnter:ut,onEnterCancelled:ut,onBeforeLeave:ut,onLeave:ut,onAfterLeave:ut,onLeaveCancelled:ut,onBeforeAppear:ut,onAppear:ut,onAfterAppear:ut,onAppearCancelled:ut},Hi=e=>{const t=e.subTree;return t.component?Hi(t.component):t},La={name:"BaseTransition",props:Bi,setup(e,{slots:t}){const n=co(),s=Ma();return()=>{const r=t.default&&Vi(t.default(),!0);if(!r||!r.length)return;const i=zi(r),o=oe(e),{mode:a}=o;if(s.isLeaving)return or(i);const l=ji(i);if(!l)return or(i);let c=ir(l,o,s,n,p=>c=p);l.type!==Ke&&Nn(l,c);let u=n.subTree&&ji(n.subTree);if(u&&u.type!==Ke&&!on(l,u)&&Hi(n).type!==Ke){let p=ir(u,o,s,n);if(Nn(u,p),a==="out-in"&&l.type!==Ke)return s.isLeaving=!0,p.afterLeave=()=>{s.isLeaving=!1,n.job.flags&8||n.update(),delete p.afterLeave,u=void 0},or(i);a==="in-out"&&l.type!==Ke?p.delayLeave=(g,w,E)=>{const m=Ui(s,u);m[String(u.key)]=u,g[Wt]=()=>{w(),g[Wt]=void 0,delete c.delayedLeave,u=void 0},c.delayedLeave=()=>{E(),delete c.delayedLeave,u=void 0}}:u=void 0}else u&&(u=void 0);return i}}};function zi(e){let t=e[0];if(e.length>1){for(const n of e)if(n.type!==Ke){t=n;break}}return t}const Oa=La;function Ui(e,t){const{leavingVNodes:n}=e;let s=n.get(t.type);return s||(s=Object.create(null),n.set(t.type,s)),s}function ir(e,t,n,s,r){const{appear:i,mode:o,persisted:a=!1,onBeforeEnter:l,onEnter:c,onAfterEnter:u,onEnterCancelled:p,onBeforeLeave:g,onLeave:w,onAfterLeave:E,onLeaveCancelled:m,onBeforeAppear:R,onAppear:S,onAfterAppear:V,onAppearCancelled:K}=t,O=String(e.key),A=Ui(n,e),C=(W,ne)=>{W&&_t(W,s,9,ne)},J=(W,ne)=>{const xe=ne[1];C(W,ne),X(W)?W.every($=>$.length<=1)&&xe():W.length<=1&&xe()},te={mode:o,persisted:a,beforeEnter(W){let ne=l;if(!n.isMounted)if(i)ne=R||l;else return;W[Wt]&&W[Wt](!0);const xe=A[O];xe&&on(e,xe)&&xe.el[Wt]&&xe.el[Wt](),C(ne,[W])},enter(W){let ne=c,xe=u,$=p;if(!n.isMounted)if(i)ne=S||c,xe=V||u,$=K||p;else return;let Y=!1;const G=W[bs]=z=>{Y||(Y=!0,z?C($,[W]):C(xe,[W]),te.delayedLeave&&te.delayedLeave(),W[bs]=void 0)};ne?J(ne,[W,G]):G()},leave(W,ne){const xe=String(e.key);if(W[bs]&&W[bs](!0),n.isUnmounting)return ne();C(g,[W]);let $=!1;const Y=W[Wt]=G=>{$||($=!0,ne(),G?C(m,[W]):C(E,[W]),W[Wt]=void 0,A[xe]===e&&delete A[xe])};A[xe]=e,w?J(w,[W,Y]):Y()},clone(W){const ne=ir(W,t,n,s,r);return r&&r(ne),ne}};return te}function or(e){if(lr(e))return e=Gt(e),e.children=null,e}function ji(e){if(!lr(e))return Fi(e.type)&&e.children?zi(e.children):e;if(e.component)return e.component.subTree;const{shapeFlag:t,children:n}=e;if(n){if(t&16)return n[0];if(t&32&&me(n.default))return n.default()}}function Nn(e,t){e.shapeFlag&6&&e.component?(e.transition=t,Nn(e.component.subTree,t)):e.shapeFlag&128?(e.ssContent.transition=t.clone(e.ssContent),e.ssFallback.transition=t.clone(e.ssFallback)):e.transition=t}function Vi(e,t=!1,n){let s=[],r=0;for(let i=0;i1)for(let i=0;iFn(E,t&&(X(t)?t[m]:t),n,s,r));return}if(Bn(s)&&!r){s.shapeFlag&512&&s.type.__asyncResolved&&s.component.subTree.component&&Fn(e,t,n,s.component.subTree);return}const i=s.shapeFlag&4?Ss(s.component):s.el,o=r?null:i,{i:a,r:l}=e,c=t&&t.r,u=a.refs===re?a.refs={}:a.refs,p=a.setupState,g=oe(p),w=p===re?()=>!1:E=>he(g,E);if(c!=null&&c!==l&&(Ce(c)?(u[c]=null,w(c)&&(p[c]=null)):je(c)&&(c.value=null)),me(l))mn(l,a,12,[o,u]);else{const E=Ce(l),m=je(l);if(E||m){const R=()=>{if(e.f){const S=E?w(l)?p[l]:u[l]:l.value;r?X(S)&&ei(S,i):X(S)?S.includes(i)||S.push(i):E?(u[l]=[i],w(l)&&(p[l]=u[l])):(l.value=[i],e.k&&(u[e.k]=l.value))}else E?(u[l]=o,w(l)&&(p[l]=o)):m&&(l.value=o,e.k&&(u[e.k]=o))};o?(R.id=-1,nt(R,n)):R()}}}rs().requestIdleCallback,rs().cancelIdleCallback;const Bn=e=>!!e.type.__asyncLoader,lr=e=>e.type.__isKeepAlive;function Da(e,t,n=Yt,s=!1){if(n){const r=n[e]||(n[e]=[]),i=t.__weh||(t.__weh=(...o)=>{It();const a=xr(n),l=_t(t,n,e,o);return a(),Mt(),l});return s?r.unshift(i):r.push(i),i}}const qi=e=>(t,n=Yt)=>{(!Vn||e==="sp")&&Da(e,(...s)=>t(...s),n)},Hn=qi("m"),xs=qi("bum"),Na=Symbol.for("v-ndc");function ys(e,t,n,s){let r;const i=n,o=X(e);if(o||Ce(e)){const a=o&&gn(e);let l=!1,c=!1;a&&(l=!lt(e),c=Vt(e),e=is(e)),r=new Array(e.length);for(let u=0,p=e.length;ut(a,l,void 0,i));else{const a=Object.keys(e);r=new Array(a.length);for(let l=0,c=a.length;le?po(e)?Ss(e):ar(e.parent):null,zn=ht(Object.create(null),{$:e=>e,$el:e=>e.vnode.el,$data:e=>e.data,$props:e=>e.props,$attrs:e=>e.attrs,$slots:e=>e.slots,$refs:e=>e.refs,$parent:e=>ar(e.parent),$root:e=>ar(e.root),$host:e=>e.ce,$emit:e=>e.emit,$options:e=>e.type,$forceUpdate:e=>e.f||(e.f=()=>{rr(e.update)}),$nextTick:e=>e.n||(e.n=kt.bind(e.proxy)),$watch:e=>Qt}),ur=(e,t)=>e!==re&&!e.__isScriptSetup&&he(e,t),Fa={get({_:e},t){if(t==="__v_skip")return!0;const{ctx:n,setupState:s,data:r,props:i,accessCache:o,type:a,appContext:l}=e;let c;if(t[0]!=="$"){const w=o[t];if(w!==void 0)switch(w){case 1:return s[t];case 2:return r[t];case 4:return n[t];case 3:return i[t]}else{if(ur(s,t))return o[t]=1,s[t];if(r!==re&&he(r,t))return o[t]=2,r[t];if((c=e.propsOptions[0])&&he(c,t))return o[t]=3,i[t];if(n!==re&&he(n,t))return o[t]=4,n[t];o[t]=0}}const u=zn[t];let p,g;if(u)return t==="$attrs"&&Ue(e.attrs,"get",""),u(e);if((p=a.__cssModules)&&(p=p[t]))return p;if(n!==re&&he(n,t))return o[t]=4,n[t];if(g=l.config.globalProperties,he(g,t))return g[t]},set({_:e},t,n){const{data:s,setupState:r,ctx:i}=e;return ur(r,t)?(r[t]=n,!0):s!==re&&he(s,t)?(s[t]=n,!0):he(e.props,t)||t[0]==="$"&&t.slice(1)in e?!1:(i[t]=n,!0)},has({_:{data:e,setupState:t,accessCache:n,ctx:s,appContext:r,propsOptions:i}},o){let a;return!!n[o]||e!==re&&he(e,o)||ur(t,o)||(a=i[0])&&he(a,o)||he(s,o)||he(zn,o)||he(r.config.globalProperties,o)},defineProperty(e,t,n){return n.get!=null?e._.accessCache[t]=0:he(n,"value")&&this.set(e,t,n.value,null),Reflect.defineProperty(e,t,n)}};function Wi(){return{app:null,config:{isNativeTag:Dl,performance:!1,globalProperties:{},optionMergeStrategies:{},errorHandler:void 0,warnHandler:void 0,compilerOptions:{}},mixins:[],components:{},directives:{},provides:Object.create(null),optionsCache:new WeakMap,propsCache:new WeakMap,emitsCache:new WeakMap}}let Ba=0;function Ha(e,t){return function(s,r=null){me(s)||(s=ht({},s)),r!=null&&!Ae(r)&&(r=null);const i=Wi(),o=new WeakSet,a=[];let l=!1;const c=i.app={_uid:Ba++,_component:s,_props:r,_container:null,_context:i,_instance:null,version:Su,get config(){return i.config},set config(u){},use(u,...p){return o.has(u)||(u&&me(u.install)?(o.add(u),u.install(c,...p)):me(u)&&(o.add(u),u(c,...p))),c},mixin(u){return c},component(u,p){return p?(i.components[u]=p,c):i.components[u]},directive(u,p){return p?(i.directives[u]=p,c):i.directives[u]},mount(u,p,g){if(!l){const w=c._ceVNode||Me(s,r);return w.appContext=i,g===!0?g="svg":g===!1&&(g=void 0),e(w,u,g),l=!0,c._container=u,u.__vue_app__=c,Ss(w.component)}},onUnmount(u){a.push(u)},unmount(){l&&(_t(a,c._instance,16),e(null,c._container),delete c._container.__vue_app__)},provide(u,p){return i.provides[u]=p,c},runWithContext(u){const p=yn;yn=c;try{return u()}finally{yn=p}}};return c}}let yn=null;function za(e,t,n=!1){const s=co();if(s||yn){let r=yn?yn._context.provides:s?s.parent==null||s.ce?s.vnode.appContext&&s.vnode.appContext.provides:s.parent.provides:void 0;if(r&&e in r)return r[e];if(arguments.length>1)return n&&me(t)?t.call(s&&s.proxy):t}}const Gi={},Ki=()=>Object.create(Gi),Yi=e=>Object.getPrototypeOf(e)===Gi;function Ua(e,t,n,s=!1){const r={},i=Ki();e.propsDefaults=Object.create(null),Zi(e,t,r,i);for(const o in e.propsOptions[0])o in r||(r[o]=void 0);n?e.props=s?r:pa(r):e.type.props?e.props=r:e.props=i,e.attrs=i}function ja(e,t,n,s){const{props:r,attrs:i,vnode:{patchFlag:o}}=e,a=oe(r),[l]=e.propsOptions;let c=!1;if((s||o>0)&&!(o&16)){if(o&8){const u=e.vnode.dynamicProps;for(let p=0;pe==="_"||e==="__"||e==="_ctx"||e==="$stable",dr=e=>X(e)?e.map(Et):[Et(e)],qa=(e,t,n)=>{if(t._n)return t;const s=Ni((...r)=>dr(t(...r)),n);return s._c=!1,s},Qi=(e,t,n)=>{const s=e._ctx;for(const r in e){if(fr(r))continue;const i=e[r];if(me(i))t[r]=qa(r,i,s);else if(i!=null){const o=dr(i);t[r]=()=>o}}},Ji=(e,t)=>{const n=dr(t);e.slots.default=()=>n},eo=(e,t,n)=>{for(const s in t)(n||!fr(s))&&(e[s]=t[s])},Wa=(e,t,n)=>{const s=e.slots=Ki();if(e.vnode.shapeFlag&32){const r=t.__;r&&zs(s,"__",r,!0);const i=t._;i?(eo(s,t,n),n&&zs(s,"_",i,!0)):Qi(t,s)}else t&&Ji(e,t)},Ga=(e,t,n)=>{const{vnode:s,slots:r}=e;let i=!0,o=re;if(s.shapeFlag&32){const a=t._;a?n&&a===1?i=!1:eo(r,t,n):(i=!t.$stable,Qi(t,r)),o=t}else t&&(Ji(e,t),o={default:1});if(i)for(const a in r)!fr(a)&&o[a]==null&&delete r[a]},nt=au;function Ka(e){return Ya(e)}function Ya(e,t){const n=rs();n.__VUE__=!0;const{insert:s,remove:r,patchProp:i,createElement:o,createText:a,createComment:l,setText:c,setElementText:u,parentNode:p,nextSibling:g,setScopeId:w=Qt,insertStaticContent:E}=e,m=(f,h,b,T=null,v=null,_=null,M=void 0,I=null,P=!!h.dynamicChildren)=>{if(f===h)return;f&&!on(f,h)&&(T=le(f),de(f,v,_,!0),f=null),h.patchFlag===-2&&(P=!1,h.dynamicChildren=null);const{type:k,ref:B,shapeFlag:L}=h;switch(k){case vs:R(f,h,b,T);break;case Ke:S(f,h,b,T);break;case hr:f==null&&V(h,b,T,M);break;case Be:$(f,h,b,T,v,_,M,I,P);break;default:L&1?A(f,h,b,T,v,_,M,I,P):L&6?Y(f,h,b,T,v,_,M,I,P):(L&64||L&128)&&k.process(f,h,b,T,v,_,M,I,P,ze)}B!=null&&v?Fn(B,f&&f.ref,_,h||f,!h):B==null&&f&&f.ref!=null&&Fn(f.ref,null,_,f,!0)},R=(f,h,b,T)=>{if(f==null)s(h.el=a(h.children),b,T);else{const v=h.el=f.el;h.children!==f.children&&c(v,h.children)}},S=(f,h,b,T)=>{f==null?s(h.el=l(h.children||""),b,T):h.el=f.el},V=(f,h,b,T)=>{[f.el,f.anchor]=E(f.children,h,b,T,f.el,f.anchor)},K=({el:f,anchor:h},b,T)=>{let v;for(;f&&f!==h;)v=g(f),s(f,b,T),f=v;s(h,b,T)},O=({el:f,anchor:h})=>{let b;for(;f&&f!==h;)b=g(f),r(f),f=b;r(h)},A=(f,h,b,T,v,_,M,I,P)=>{h.type==="svg"?M="svg":h.type==="math"&&(M="mathml"),f==null?C(h,b,T,v,_,M,I,P):W(f,h,v,_,M,I,P)},C=(f,h,b,T,v,_,M,I)=>{let P,k;const{props:B,shapeFlag:L,transition:H,dirs:q}=f;if(P=f.el=o(f.type,_,B&&B.is,B),L&8?u(P,f.children):L&16&&te(f.children,P,null,T,v,pr(f,_),M,I),q&&nn(f,null,T,"created"),J(P,f,f.scopeId,M,T),B){for(const fe in B)fe!=="value"&&!Cn(fe)&&i(P,fe,null,B[fe],_,T);"value"in B&&i(P,"value",null,B.value,_),(k=B.onVnodeBeforeMount)&&At(k,T,f)}q&&nn(f,null,T,"beforeMount");const ee=Za(v,H);ee&&H.beforeEnter(P),s(P,h,b),((k=B&&B.onVnodeMounted)||ee||q)&&nt(()=>{k&&At(k,T,f),ee&&H.enter(P),q&&nn(f,null,T,"mounted")},v)},J=(f,h,b,T,v)=>{if(b&&w(f,b),T)for(let _=0;_{for(let k=P;k{const I=h.el=f.el;let{patchFlag:P,dynamicChildren:k,dirs:B}=h;P|=f.patchFlag&16;const L=f.props||re,H=h.props||re;let q;if(b&&sn(b,!1),(q=H.onVnodeBeforeUpdate)&&At(q,b,h,f),B&&nn(h,f,b,"beforeUpdate"),b&&sn(b,!0),(L.innerHTML&&H.innerHTML==null||L.textContent&&H.textContent==null)&&u(I,""),k?ne(f.dynamicChildren,k,I,b,T,pr(h,v),_):M||We(f,h,I,null,b,T,pr(h,v),_,!1),P>0){if(P&16)xe(I,L,H,b,v);else if(P&2&&L.class!==H.class&&i(I,"class",null,H.class,v),P&4&&i(I,"style",L.style,H.style,v),P&8){const ee=h.dynamicProps;for(let fe=0;fe{q&&At(q,b,h,f),B&&nn(h,f,b,"updated")},T)},ne=(f,h,b,T,v,_,M)=>{for(let I=0;I{if(h!==b){if(h!==re)for(const _ in h)!Cn(_)&&!(_ in b)&&i(f,_,h[_],null,v,T);for(const _ in b){if(Cn(_))continue;const M=b[_],I=h[_];M!==I&&_!=="value"&&i(f,_,I,M,v,T)}"value"in b&&i(f,"value",h.value,b.value,v)}},$=(f,h,b,T,v,_,M,I,P)=>{const k=h.el=f?f.el:a(""),B=h.anchor=f?f.anchor:a("");let{patchFlag:L,dynamicChildren:H,slotScopeIds:q}=h;q&&(I=I?I.concat(q):q),f==null?(s(k,b,T),s(B,b,T),te(h.children||[],b,B,v,_,M,I,P)):L>0&&L&64&&H&&f.dynamicChildren?(ne(f.dynamicChildren,H,b,v,_,M,I),(h.key!=null||v&&h===v.subTree)&&to(f,h,!0)):We(f,h,b,B,v,_,M,I,P)},Y=(f,h,b,T,v,_,M,I,P)=>{h.slotScopeIds=I,f==null?h.shapeFlag&512?v.ctx.activate(h,b,T,M,P):G(h,b,T,v,_,M,P):z(f,h,P)},G=(f,h,b,T,v,_,M)=>{const I=f.component=gu(f,T,v);if(lr(f)&&(I.ctx.renderer=ze),mu(I,!1,M),I.asyncDep){if(v&&v.registerDep(I,ue,M),!f.el){const P=I.subTree=Me(Ke);S(null,P,h,b),f.placeholder=P.el}}else ue(I,f,h,b,v,_,M)},z=(f,h,b)=>{const T=h.component=f.component;if(ou(f,h,b))if(T.asyncDep&&!T.asyncResolved){Se(T,h,b);return}else T.next=h,T.update();else h.el=f.el,T.vnode=h},ue=(f,h,b,T,v,_,M)=>{const I=()=>{if(f.isMounted){let{next:L,bu:H,u:q,parent:ee,vnode:fe}=f;{const it=no(f);if(it){L&&(L.el=fe.el,Se(f,L,M)),it.asyncDep.then(()=>{f.isUnmounted||I()});return}}let se=L,ke;sn(f,!1),L?(L.el=fe.el,Se(f,L,M)):L=fe,H&&ss(H),(ke=L.props&&L.props.onVnodeBeforeUpdate)&&At(ke,ee,L,fe),sn(f,!0);const Oe=ro(f),rt=f.subTree;f.subTree=Oe,m(rt,Oe,p(rt.el),le(rt),f,v,_),L.el=Oe.el,se===null&&lu(f,Oe.el),q&&nt(q,v),(ke=L.props&&L.props.onVnodeUpdated)&&nt(()=>At(ke,ee,L,fe),v)}else{let L;const{el:H,props:q}=h,{bm:ee,m:fe,parent:se,root:ke,type:Oe}=f,rt=Bn(h);sn(f,!1),ee&&ss(ee),!rt&&(L=q&&q.onVnodeBeforeMount)&&At(L,se,h),sn(f,!0);{ke.ce&&ke.ce._def.shadowRoot!==!1&&ke.ce._injectChildStyle(Oe);const it=f.subTree=ro(f);m(null,it,b,T,f,v,_),h.el=it.el}if(fe&&nt(fe,v),!rt&&(L=q&&q.onVnodeMounted)){const it=h;nt(()=>At(L,se,it),v)}(h.shapeFlag&256||se&&Bn(se.vnode)&&se.vnode.shapeFlag&256)&&f.a&&nt(f.a,v),f.isMounted=!0,h=b=T=null}};f.scope.on();const P=f.effect=new ci(I);f.scope.off();const k=f.update=P.run.bind(P),B=f.job=P.runIfDirty.bind(P);B.i=f,B.id=f.uid,P.scheduler=()=>rr(B),sn(f,!0),k()},Se=(f,h,b)=>{h.component=f;const T=f.vnode.props;f.vnode=h,f.next=null,ja(f,h.props,T,b),Ga(f,h.children,b),It(),Li(f),Mt()},We=(f,h,b,T,v,_,M,I,P=!1)=>{const k=f&&f.children,B=f?f.shapeFlag:0,L=h.children,{patchFlag:H,shapeFlag:q}=h;if(H>0){if(H&128){ce(k,L,b,T,v,_,M,I,P);return}else if(H&256){xt(k,L,b,T,v,_,M,I,P);return}}q&8?(B&16&&ge(k,v,_),L!==k&&u(b,L)):B&16?q&16?ce(k,L,b,T,v,_,M,I,P):ge(k,v,_,!0):(B&8&&u(b,""),q&16&&te(L,b,T,v,_,M,I,P))},xt=(f,h,b,T,v,_,M,I,P)=>{f=f||pt,h=h||pt;const k=f.length,B=h.length,L=Math.min(k,B);let H;for(H=0;HB?ge(f,v,_,!0,!1,L):te(h,b,T,v,_,M,I,P,L)},ce=(f,h,b,T,v,_,M,I,P)=>{let k=0;const B=h.length;let L=f.length-1,H=B-1;for(;k<=L&&k<=H;){const q=f[k],ee=h[k]=P?Kt(h[k]):Et(h[k]);if(on(q,ee))m(q,ee,b,null,v,_,M,I,P);else break;k++}for(;k<=L&&k<=H;){const q=f[L],ee=h[H]=P?Kt(h[H]):Et(h[H]);if(on(q,ee))m(q,ee,b,null,v,_,M,I,P);else break;L--,H--}if(k>L){if(k<=H){const q=H+1,ee=qH)for(;k<=L;)de(f[k],v,_,!0),k++;else{const q=k,ee=k,fe=new Map;for(k=ee;k<=H;k++){const $e=h[k]=P?Kt(h[k]):Et(h[k]);$e.key!=null&&fe.set($e.key,k)}let se,ke=0;const Oe=H-ee+1;let rt=!1,it=0;const Ft=new Array(Oe);for(k=0;k=Oe){de($e,v,_,!0);continue}let Xe;if($e.key!=null)Xe=fe.get($e.key);else for(se=ee;se<=H;se++)if(Ft[se-ee]===0&&on($e,h[se])){Xe=se;break}Xe===void 0?de($e,v,_,!0):(Ft[Xe-ee]=k+1,Xe>=it?it=Xe:rt=!0,m($e,h[Xe],b,null,v,_,M,I,P),ke++)}const Qn=rt?Xa(Ft):pt;for(se=Qn.length-1,k=Oe-1;k>=0;k--){const $e=ee+k,Xe=h[$e],ot=h[$e+1],Bt=$e+1{const{el:_,type:M,transition:I,children:P,shapeFlag:k}=f;if(k&6){N(f.component.subTree,h,b,T);return}if(k&128){f.suspense.move(h,b,T);return}if(k&64){M.move(f,h,b,ze);return}if(M===Be){s(_,h,b);for(let L=0;LI.enter(_),v);else{const{leave:L,delayLeave:H,afterLeave:q}=I,ee=()=>{f.ctx.isUnmounted?r(_):s(_,h,b)},fe=()=>{L(_,()=>{ee(),q&&q()})};H?H(_,ee,fe):fe()}else s(_,h,b)},de=(f,h,b,T=!1,v=!1)=>{const{type:_,props:M,ref:I,children:P,dynamicChildren:k,shapeFlag:B,patchFlag:L,dirs:H,cacheIndex:q}=f;if(L===-2&&(v=!1),I!=null&&(It(),Fn(I,null,b,f,!0),Mt()),q!=null&&(h.renderCache[q]=void 0),B&256){h.ctx.deactivate(f);return}const ee=B&1&&H,fe=!Bn(f);let se;if(fe&&(se=M&&M.onVnodeBeforeUnmount)&&At(se,h,f),B&6)ve(f.component,b,T);else{if(B&128){f.suspense.unmount(b,T);return}ee&&nn(f,null,h,"beforeUnmount"),B&64?f.type.remove(f,h,b,ze,T):k&&!k.hasOnce&&(_!==Be||L>0&&L&64)?ge(k,h,b,!1,!0):(_===Be&&L&384||!v&&B&16)&&ge(P,h,b),T&&pe(f)}(fe&&(se=M&&M.onVnodeUnmounted)||ee)&&nt(()=>{se&&At(se,h,f),ee&&nn(f,null,h,"unmounted")},b)},pe=f=>{const{type:h,el:b,anchor:T,transition:v}=f;if(h===Be){Te(b,T);return}if(h===hr){O(f);return}const _=()=>{r(b),v&&!v.persisted&&v.afterLeave&&v.afterLeave()};if(f.shapeFlag&1&&v&&!v.persisted){const{leave:M,delayLeave:I}=v,P=()=>M(b,_);I?I(f.el,_,P):P()}else _()},Te=(f,h)=>{let b;for(;f!==h;)b=g(f),r(f),f=b;r(h)},ve=(f,h,b)=>{const{bum:T,scope:v,job:_,subTree:M,um:I,m:P,a:k,parent:B,slots:{__:L}}=f;so(P),so(k),T&&ss(T),B&&X(L)&&L.forEach(H=>{B.renderCache[H]=void 0}),v.stop(),_&&(_.flags|=8,de(M,f,h,b)),I&&nt(I,h),nt(()=>{f.isUnmounted=!0},h),h&&h.pendingBranch&&!h.isUnmounted&&f.asyncDep&&!f.asyncResolved&&f.suspenseId===h.pendingId&&(h.deps--,h.deps===0&&h.resolve())},ge=(f,h,b,T=!1,v=!1,_=0)=>{for(let M=_;M{if(f.shapeFlag&6)return le(f.component.subTree);if(f.shapeFlag&128)return f.suspense.next();const h=g(f.anchor||f.el),b=h&&h[Ia];return b?g(b):h};let yt=!1;const Ct=(f,h,b)=>{f==null?h._vnode&&de(h._vnode,null,null,!0):m(h._vnode||null,f,h,null,null,null,b),h._vnode=f,yt||(yt=!0,Li(),Oi(),yt=!1)},ze={p:m,um:de,m:N,r:pe,mt:G,mc:te,pc:We,pbc:ne,n:le,o:e};return{render:Ct,hydrate:void 0,createApp:Ha(Ct)}}function pr({type:e,props:t},n){return n==="svg"&&e==="foreignObject"||n==="mathml"&&e==="annotation-xml"&&t&&t.encoding&&t.encoding.includes("html")?void 0:n}function sn({effect:e,job:t},n){n?(e.flags|=32,t.flags|=4):(e.flags&=-33,t.flags&=-5)}function Za(e,t){return(!e||e&&!e.pendingBranch)&&t&&!t.persisted}function to(e,t,n=!1){const s=e.children,r=t.children;if(X(s)&&X(r))for(let i=0;i>1,e[n[a]]0&&(t[s]=n[i-1]),n[i]=s)}}for(i=n.length,o=n[i-1];i-- >0;)n[i]=o,o=t[o];return n}function no(e){const t=e.subTree.component;if(t)return t.asyncDep&&!t.asyncResolved?t:no(t)}function so(e){if(e)for(let t=0;tza(Qa);function rn(e,t,n){return eu(e,t,n)}function eu(e,t,n=re){const{immediate:s,deep:r,flush:i,once:o}=n,a=ht({},n),l=t&&s||!t&&i!=="post";let c;if(Vn){if(i==="sync"){const w=Ja();c=w.__watcherHandles||(w.__watcherHandles=[])}else if(!l){const w=()=>{};return w.stop=Qt,w.resume=Qt,w.pause=Qt,w}}const u=Yt;a.call=(w,E,m)=>_t(w,u,E,m);let p=!1;i==="post"?a.scheduler=w=>{nt(w,u&&u.suspense)}:i!=="sync"&&(p=!0,a.scheduler=(w,E)=>{E?w():rr(w)}),a.augmentJob=w=>{t&&(w.flags|=4),p&&(w.flags|=2,u&&(w.id=u.uid,w.i=u))};const g=_a(e,t,a);return Vn&&(c?c.push(g):l&&g()),g}const tu=(e,t)=>t==="modelValue"||t==="model-value"?e.modelModifiers:e[`${t}Modifiers`]||e[`${Ut(t)}Modifiers`]||e[`${Jt(t)}Modifiers`];function nu(e,t,...n){if(e.isUnmounted)return;const s=e.vnode.props||re;let r=n;const i=t.startsWith("update:"),o=i&&tu(s,t.slice(7));o&&(o.trim&&(r=n.map(u=>Ce(u)?u.trim():u)),o.number&&(r=n.map(Us)));let a,l=s[a=Hs(t)]||s[a=Hs(Ut(t))];!l&&i&&(l=s[a=Hs(Jt(t))]),l&&_t(l,e,6,r);const c=s[a+"Once"];if(c){if(!e.emitted)e.emitted={};else if(e.emitted[a])return;e.emitted[a]=!0,_t(c,e,6,r)}}function su(e,t,n=!1){const s=t.emitsCache,r=s.get(e);if(r!==void 0)return r;const i=e.emits;let o={};return i?(X(i)?i.forEach(a=>o[a]=null):ht(o,i),Ae(e)&&s.set(e,o),o):(Ae(e)&&s.set(e,null),null)}function ws(e,t){return!e||!es(t)?!1:(t=t.slice(2).replace(/Once$/,""),he(e,t[0].toLowerCase()+t.slice(1))||he(e,Jt(t))||he(e,t))}function Ep(){}function ro(e){const{type:t,vnode:n,proxy:s,withProxy:r,propsOptions:[i],slots:o,attrs:a,emit:l,render:c,renderCache:u,props:p,data:g,setupState:w,ctx:E,inheritAttrs:m}=e,R=ms(e);let S,V;try{if(n.shapeFlag&4){const O=r||s,A=O;S=Et(c.call(A,O,u,p,w,g,E)),V=a}else{const O=t;S=Et(O.length>1?O(p,{attrs:a,slots:o,emit:l}):O(p,null)),V=t.props?a:ru(a)}}catch(O){Un.length=0,hs(O,e,1),S=Me(Ke)}let K=S;if(V&&m!==!1){const O=Object.keys(V),{shapeFlag:A}=K;O.length&&A&7&&(i&&O.some(Fs)&&(V=iu(V,i)),K=Gt(K,V,!1,!0))}return n.dirs&&(K=Gt(K,null,!1,!0),K.dirs=K.dirs?K.dirs.concat(n.dirs):n.dirs),n.transition&&Nn(K,n.transition),S=K,ms(R),S}const ru=e=>{let t;for(const n in e)(n==="class"||n==="style"||es(n))&&((t||(t={}))[n]=e[n]);return t},iu=(e,t)=>{const n={};for(const s in e)(!Fs(s)||!(s.slice(9)in t))&&(n[s]=e[s]);return n};function ou(e,t,n){const{props:s,children:r,component:i}=e,{props:o,children:a,patchFlag:l}=t,c=i.emitsOptions;if(t.dirs||t.transition)return!0;if(n&&l>=0){if(l&1024)return!0;if(l&16)return s?io(s,o,c):!!o;if(l&8){const u=t.dynamicProps;for(let p=0;pe.__isSuspense;function au(e,t){t&&t.pendingBranch?X(e)?t.effects.push(...e):t.effects.push(e):Ca(e)}const Be=Symbol.for("v-fgt"),vs=Symbol.for("v-txt"),Ke=Symbol.for("v-cmt"),hr=Symbol.for("v-stc"),Un=[];let st=null;function F(e=!1){Un.push(st=e?null:[])}function uu(){Un.pop(),st=Un[Un.length-1]||null}let jn=1;function lo(e,t=!1){jn+=e,e<0&&st&&t&&(st.hasOnce=!0)}function ao(e){return e.dynamicChildren=jn>0?st||pt:null,uu(),jn>0&&st&&st.push(e),e}function j(e,t,n,s,r,i){return ao(x(e,t,n,s,r,i,!0))}function St(e,t,n,s,r){return ao(Me(e,t,n,s,r,!0))}function _s(e){return e?e.__v_isVNode===!0:!1}function on(e,t){return e.type===t.type&&e.key===t.key}const uo=({key:e})=>e!=null?e:null,Ts=({ref:e,ref_key:t,ref_for:n})=>(typeof e=="number"&&(e=""+e),e!=null?Ce(e)||je(e)||me(e)?{i:at,r:e,k:t,f:!!n}:e:null);function x(e,t=null,n=null,s=0,r=null,i=e===Be?0:1,o=!1,a=!1){const l={__v_isVNode:!0,__v_skip:!0,type:e,props:t,key:t&&uo(t),ref:t&&Ts(t),scopeId:Di,slotScopeIds:null,children:n,component:null,suspense:null,ssContent:null,ssFallback:null,dirs:null,transition:null,el:null,anchor:null,target:null,targetStart:null,targetAnchor:null,staticCount:0,shapeFlag:i,patchFlag:s,dynamicProps:r,dynamicChildren:null,appContext:null,ctx:at};return a?(mr(l,n),i&128&&e.normalize(l)):n&&(l.shapeFlag|=Ce(n)?8:16),jn>0&&!o&&st&&(l.patchFlag>0||i&6)&&l.patchFlag!==32&&st.push(l),l}const Me=cu;function cu(e,t=null,n=null,s=0,r=null,i=!1){if((!e||e===Na)&&(e=Ke),_s(e)){const a=Gt(e,t,!0);return n&&mr(a,n),jn>0&&!i&&st&&(a.shapeFlag&6?st[st.indexOf(e)]=a:st.push(a)),a.patchFlag=-2,a}if(Tu(e)&&(e=e.__vccOpts),t){t=fu(t);let{class:a,style:l}=t;a&&!Ce(a)&&(t.class=ye(a)),Ae(l)&&(nr(l)&&!X(l)&&(l=ht({},l)),t.style=js(l))}const o=Ce(e)?1:oo(e)?128:Fi(e)?64:Ae(e)?4:me(e)?2:0;return x(e,t,n,s,r,o,i,!0)}function fu(e){return e?nr(e)||Yi(e)?ht({},e):e:null}function Gt(e,t,n=!1,s=!1){const{props:r,ref:i,patchFlag:o,children:a,transition:l}=e,c=t?du(r||{},t):r,u={__v_isVNode:!0,__v_skip:!0,type:e.type,props:c,key:c&&uo(c),ref:t&&t.ref?n&&i?X(i)?i.concat(Ts(t)):[i,Ts(t)]:Ts(t):i,scopeId:e.scopeId,slotScopeIds:e.slotScopeIds,children:a,target:e.target,targetStart:e.targetStart,targetAnchor:e.targetAnchor,staticCount:e.staticCount,shapeFlag:e.shapeFlag,patchFlag:t&&e.type!==Be?o===-1?16:o|16:o,dynamicProps:e.dynamicProps,dynamicChildren:e.dynamicChildren,appContext:e.appContext,dirs:e.dirs,transition:l,component:e.component,suspense:e.suspense,ssContent:e.ssContent&&Gt(e.ssContent),ssFallback:e.ssFallback&&Gt(e.ssFallback),placeholder:e.placeholder,el:e.el,anchor:e.anchor,ctx:e.ctx,ce:e.ce};return l&&s&&Nn(u,l.clone(u)),u}function gr(e=" ",t=0){return Me(vs,null,e,t)}function Ve(e="",t=!1){return t?(F(),St(Ke,null,e)):Me(Ke,null,e)}function Et(e){return e==null||typeof e=="boolean"?Me(Ke):X(e)?Me(Be,null,e.slice()):_s(e)?Kt(e):Me(vs,null,String(e))}function Kt(e){return e.el===null&&e.patchFlag!==-1||e.memo?e:Gt(e)}function mr(e,t){let n=0;const{shapeFlag:s}=e;if(t==null)t=null;else if(X(t))n=16;else if(typeof t=="object")if(s&65){const r=t.default;r&&(r._c&&(r._d=!1),mr(e,r()),r._c&&(r._d=!0));return}else{n=32;const r=t._;!r&&!Yi(t)?t._ctx=at:r===3&&at&&(at.slots._===1?t._=1:(t._=2,e.patchFlag|=1024))}else me(t)?(t={default:t,_ctx:at},n=32):(t=String(t),s&64?(n=16,t=[gr(t)]):n=8);e.children=t,e.shapeFlag|=n}function du(...e){const t={};for(let n=0;nYt||at;let ks,br;{const e=rs(),t=(n,s)=>{let r;return(r=e[n])||(r=e[n]=[]),r.push(s),i=>{r.length>1?r.forEach(o=>o(i)):r[0](i)}};ks=t("__VUE_INSTANCE_SETTERS__",n=>Yt=n),br=t("__VUE_SSR_SETTERS__",n=>Vn=n)}const xr=e=>{const t=Yt;return ks(e),e.scope.on(),()=>{e.scope.off(),ks(t)}},fo=()=>{Yt&&Yt.scope.off(),ks(null)};function po(e){return e.vnode.shapeFlag&4}let Vn=!1;function mu(e,t=!1,n=!1){t&&br(t);const{props:s,children:r}=e.vnode,i=po(e);Ua(e,s,i,t),Wa(e,r,n||t);const o=i?bu(e,t):void 0;return t&&br(!1),o}function bu(e,t){const n=e.type;e.accessCache=Object.create(null),e.proxy=new Proxy(e.ctx,Fa);const{setup:s}=n;if(s){It();const r=e.setupContext=s.length>1?yu(e):null,i=xr(e),o=mn(s,e,0,[e.props,r]),a=ni(o);if(Mt(),i(),(a||e.sp)&&!Bn(e)&&$a(e),a){if(o.then(fo,fo),t)return o.then(l=>{ho(e,l)}).catch(l=>{hs(l,e,0)});e.asyncDep=o}else ho(e,o)}else go(e)}function ho(e,t,n){me(t)?e.type.__ssrInlineRender?e.ssrRender=t:e.render=t:Ae(t)&&(e.setupState=Ci(t)),go(e)}function go(e,t,n){const s=e.type;e.render||(e.render=s.render||Qt)}const xu={get(e,t){return Ue(e,"get",""),e[t]}};function yu(e){const t=n=>{e.exposed=n||{}};return{attrs:new Proxy(e.attrs,xu),slots:e.slots,emit:e.emit,expose:t}}function Ss(e){return e.exposed?e.exposeProxy||(e.exposeProxy=new Proxy(Ci(ha(e.exposed)),{get(t,n){if(n in t)return t[n];if(n in zn)return zn[n](e)},has(t,n){return n in t||n in zn}})):e.proxy}const wu=/(?:^|[-_])(\w)/g,vu=e=>e.replace(wu,t=>t.toUpperCase()).replace(/[-_]/g,"");function _u(e,t=!0){return me(e)?e.displayName||e.name:e.name||t&&e.__name}function mo(e,t,n=!1){let s=_u(t);if(!s&&t.__file){const r=t.__file.match(/([^/\\]+)\.\w+$/);r&&(s=r[1])}if(!s&&e&&e.parent){const r=i=>{for(const o in i)if(i[o]===t)return o};s=r(e.components||e.parent.type.components)||r(e.appContext.components)}return s?vu(s):n?"App":"Anonymous"}function Tu(e){return me(e)&&"__vccOpts"in e}const Re=(e,t)=>wa(e,t,Vn);function ku(e,t,n){const s=arguments.length;return s===2?Ae(t)&&!X(t)?_s(t)?Me(e,null,[t]):Me(e,t):Me(e,null,t):(s>3?n=Array.prototype.slice.call(arguments,2):s===3&&_s(n)&&(n=[n]),Me(e,t,n))}const Su="3.5.18";let yr;const bo=typeof window!="undefined"&&window.trustedTypes;if(bo)try{yr=bo.createPolicy("vue",{createHTML:e=>e})}catch{}const xo=yr?e=>yr.createHTML(e):e=>e,Eu="http://www.w3.org/2000/svg",Au="http://www.w3.org/1998/Math/MathML",Dt=typeof document!="undefined"?document:null,yo=Dt&&Dt.createElement("template"),Ru={insert:(e,t,n)=>{t.insertBefore(e,n||null)},remove:e=>{const t=e.parentNode;t&&t.removeChild(e)},createElement:(e,t,n,s)=>{const r=t==="svg"?Dt.createElementNS(Eu,e):t==="mathml"?Dt.createElementNS(Au,e):n?Dt.createElement(e,{is:n}):Dt.createElement(e);return e==="select"&&s&&s.multiple!=null&&r.setAttribute("multiple",s.multiple),r},createText:e=>Dt.createTextNode(e),createComment:e=>Dt.createComment(e),setText:(e,t)=>{e.nodeValue=t},setElementText:(e,t)=>{e.textContent=t},parentNode:e=>e.parentNode,nextSibling:e=>e.nextSibling,querySelector:e=>Dt.querySelector(e),setScopeId(e,t){e.setAttribute(t,"")},insertStaticContent(e,t,n,s,r,i){const o=n?n.previousSibling:t.lastChild;if(r&&(r===i||r.nextSibling))for(;t.insertBefore(r.cloneNode(!0),n),!(r===i||!(r=r.nextSibling)););else{yo.innerHTML=xo(s==="svg"?`${e}`:s==="mathml"?`${e}`:e);const a=yo.content;if(s==="svg"||s==="mathml"){const l=a.firstChild;for(;l.firstChild;)a.appendChild(l.firstChild);a.removeChild(l)}t.insertBefore(a,n)}return[o?o.nextSibling:t.firstChild,n?n.previousSibling:t.lastChild]}},Zt="transition",qn="animation",Wn=Symbol("_vtc"),wo={name:String,type:String,css:{type:Boolean,default:!0},duration:[String,Number,Object],enterFromClass:String,enterActiveClass:String,enterToClass:String,appearFromClass:String,appearActiveClass:String,appearToClass:String,leaveFromClass:String,leaveActiveClass:String,leaveToClass:String},Cu=ht({},Bi,wo),Pu=(e=>(e.displayName="Transition",e.props=Cu,e))((e,{slots:t})=>ku(Oa,Iu(e),t)),ln=(e,t=[])=>{X(e)?e.forEach(n=>n(...t)):e&&e(...t)},vo=e=>e?X(e)?e.some(t=>t.length>1):e.length>1:!1;function Iu(e){const t={};for(const $ in e)$ in wo||(t[$]=e[$]);if(e.css===!1)return t;const{name:n="v",type:s,duration:r,enterFromClass:i=`${n}-enter-from`,enterActiveClass:o=`${n}-enter-active`,enterToClass:a=`${n}-enter-to`,appearFromClass:l=i,appearActiveClass:c=o,appearToClass:u=a,leaveFromClass:p=`${n}-leave-from`,leaveActiveClass:g=`${n}-leave-active`,leaveToClass:w=`${n}-leave-to`}=e,E=Mu(r),m=E&&E[0],R=E&&E[1],{onBeforeEnter:S,onEnter:V,onEnterCancelled:K,onLeave:O,onLeaveCancelled:A,onBeforeAppear:C=S,onAppear:J=V,onAppearCancelled:te=K}=t,W=($,Y,G,z)=>{$._enterCancelled=z,an($,Y?u:a),an($,Y?c:o),G&&G()},ne=($,Y)=>{$._isLeaving=!1,an($,p),an($,w),an($,g),Y&&Y()},xe=$=>(Y,G)=>{const z=$?J:V,ue=()=>W(Y,$,G);ln(z,[Y,ue]),_o(()=>{an(Y,$?l:i),Nt(Y,$?u:a),vo(z)||To(Y,s,m,ue)})};return ht(t,{onBeforeEnter($){ln(S,[$]),Nt($,i),Nt($,o)},onBeforeAppear($){ln(C,[$]),Nt($,l),Nt($,c)},onEnter:xe(!1),onAppear:xe(!0),onLeave($,Y){$._isLeaving=!0;const G=()=>ne($,Y);Nt($,p),$._enterCancelled?(Nt($,g),Eo()):(Eo(),Nt($,g)),_o(()=>{$._isLeaving&&(an($,p),Nt($,w),vo(O)||To($,s,R,G))}),ln(O,[$,G])},onEnterCancelled($){W($,!1,void 0,!0),ln(K,[$])},onAppearCancelled($){W($,!0,void 0,!0),ln(te,[$])},onLeaveCancelled($){ne($),ln(A,[$])}})}function Mu(e){if(e==null)return null;if(Ae(e))return[wr(e.enter),wr(e.leave)];{const t=wr(e);return[t,t]}}function wr(e){return zl(e)}function Nt(e,t){t.split(/\s+/).forEach(n=>n&&e.classList.add(n)),(e[Wn]||(e[Wn]=new Set)).add(t)}function an(e,t){t.split(/\s+/).forEach(s=>s&&e.classList.remove(s));const n=e[Wn];n&&(n.delete(t),n.size||(e[Wn]=void 0))}function _o(e){requestAnimationFrame(()=>{requestAnimationFrame(e)})}let Lu=0;function To(e,t,n,s){const r=e._endId=++Lu,i=()=>{r===e._endId&&s()};if(n!=null)return setTimeout(i,n);const{type:o,timeout:a,propCount:l}=Ou(e,t);if(!o)return s();const c=o+"end";let u=0;const p=()=>{e.removeEventListener(c,g),i()},g=w=>{w.target===e&&++u>=l&&p()};setTimeout(()=>{u(n[E]||"").split(", "),r=s(`${Zt}Delay`),i=s(`${Zt}Duration`),o=ko(r,i),a=s(`${qn}Delay`),l=s(`${qn}Duration`),c=ko(a,l);let u=null,p=0,g=0;t===Zt?o>0&&(u=Zt,p=o,g=i.length):t===qn?c>0&&(u=qn,p=c,g=l.length):(p=Math.max(o,c),u=p>0?o>c?Zt:qn:null,g=u?u===Zt?i.length:l.length:0);const w=u===Zt&&/\b(transform|all)(,|$)/.test(s(`${Zt}Property`).toString());return{type:u,timeout:p,propCount:g,hasTransform:w}}function ko(e,t){for(;e.lengthSo(n)+So(e[s])))}function So(e){return e==="auto"?0:Number(e.slice(0,-1).replace(",","."))*1e3}function Eo(){return document.body.offsetHeight}function $u(e,t,n){const s=e[Wn];s&&(t=(t?[t,...s]:[...s]).join(" ")),t==null?e.removeAttribute("class"):n?e.setAttribute("class",t):e.className=t}const Ao=Symbol("_vod"),Du=Symbol("_vsh"),Nu=Symbol(""),Fu=/(^|;)\s*display\s*:/;function Bu(e,t,n){const s=e.style,r=Ce(n);let i=!1;if(n&&!r){if(t)if(Ce(t))for(const o of t.split(";")){const a=o.slice(0,o.indexOf(":")).trim();n[a]==null&&Es(s,a,"")}else for(const o in t)n[o]==null&&Es(s,o,"");for(const o in n)o==="display"&&(i=!0),Es(s,o,n[o])}else if(r){if(t!==n){const o=s[Nu];o&&(n+=";"+o),s.cssText=n,i=Fu.test(n)}}else t&&e.removeAttribute("style");Ao in e&&(e[Ao]=i?s.display:"",e[Du]&&(s.display="none"))}const Ro=/\s*!important$/;function Es(e,t,n){if(X(n))n.forEach(s=>Es(e,t,s));else if(n==null&&(n=""),t.startsWith("--"))e.setProperty(t,n);else{const s=Hu(e,t);Ro.test(n)?e.setProperty(Jt(s),n.replace(Ro,""),"important"):e[s]=n}}const Co=["Webkit","Moz","ms"],vr={};function Hu(e,t){const n=vr[t];if(n)return n;let s=Ut(t);if(s!=="filter"&&s in e)return vr[t]=s;s=ii(s);for(let r=0;r_r||(Vu.then(()=>_r=0),_r=Date.now());function Wu(e,t){const n=s=>{if(!s._vts)s._vts=Date.now();else if(s._vts<=n.attached)return;_t(Gu(s,n.value),t,5,[s])};return n.value=e,n.attached=qu(),n}function Gu(e,t){if(X(t)){const n=e.stopImmediatePropagation;return e.stopImmediatePropagation=()=>{n.call(e),e._stopped=!0},t.map(s=>r=>!r._stopped&&s&&s(r))}else return t}const $o=e=>e.charCodeAt(0)===111&&e.charCodeAt(1)===110&&e.charCodeAt(2)>96&&e.charCodeAt(2)<123,Ku=(e,t,n,s,r,i)=>{const o=r==="svg";t==="class"?$u(e,s,o):t==="style"?Bu(e,n,s):es(t)?Fs(t)||Uu(e,t,n,s,i):(t[0]==="."?(t=t.slice(1),!0):t[0]==="^"?(t=t.slice(1),!1):Yu(e,t,s,o))?(Mo(e,t,s),!e.tagName.includes("-")&&(t==="value"||t==="checked"||t==="selected")&&Io(e,t,s,o,i,t!=="value")):e._isVueCE&&(/[A-Z]/.test(t)||!Ce(s))?Mo(e,Ut(t),s,i,t):(t==="true-value"?e._trueValue=s:t==="false-value"&&(e._falseValue=s),Io(e,t,s,o))};function Yu(e,t,n,s){if(s)return!!(t==="innerHTML"||t==="textContent"||t in e&&$o(t)&&me(n));if(t==="spellcheck"||t==="draggable"||t==="translate"||t==="autocorrect"||t==="form"||t==="list"&&e.tagName==="INPUT"||t==="type"&&e.tagName==="TEXTAREA")return!1;if(t==="width"||t==="height"){const r=e.tagName;if(r==="IMG"||r==="VIDEO"||r==="CANVAS"||r==="SOURCE")return!1}return $o(t)&&Ce(n)?!1:t in e}const Do=e=>{const t=e.props["onUpdate:modelValue"]||!1;return X(t)?n=>ss(t,n):t};function Zu(e){e.target.composing=!0}function No(e){const t=e.target;t.composing&&(t.composing=!1,t.dispatchEvent(new Event("input")))}const Tr=Symbol("_assign"),Xu={created(e,{modifiers:{lazy:t,trim:n,number:s}},r){e[Tr]=Do(r);const i=s||r.props&&r.props.type==="number";wn(e,t?"change":"input",o=>{if(o.target.composing)return;let a=e.value;n&&(a=a.trim()),i&&(a=Us(a)),e[Tr](a)}),n&&wn(e,"change",()=>{e.value=e.value.trim()}),t||(wn(e,"compositionstart",Zu),wn(e,"compositionend",No),wn(e,"change",No))},mounted(e,{value:t}){e.value=t==null?"":t},beforeUpdate(e,{value:t,oldValue:n,modifiers:{lazy:s,trim:r,number:i}},o){if(e[Tr]=Do(o),e.composing)return;const a=(i||e.type==="number")&&!/^0\d/.test(e.value)?Us(e.value):e.value,l=t==null?"":t;a!==l&&(document.activeElement===e&&e.type!=="range"&&(s&&t===n||r&&e.value.trim()===l)||(e.value=l))}},Qu=["ctrl","shift","alt","meta"],Ju={stop:e=>e.stopPropagation(),prevent:e=>e.preventDefault(),self:e=>e.target!==e.currentTarget,ctrl:e=>!e.ctrlKey,shift:e=>!e.shiftKey,alt:e=>!e.altKey,meta:e=>!e.metaKey,left:e=>"button"in e&&e.button!==0,middle:e=>"button"in e&&e.button!==1,right:e=>"button"in e&&e.button!==2,exact:(e,t)=>Qu.some(n=>e[`${n}Key`]&&!t.includes(n))},ct=(e,t)=>{const n=e._withMods||(e._withMods={}),s=t.join(".");return n[s]||(n[s]=(r,...i)=>{for(let o=0;o{const t=tc().createApp(...e),{mount:n}=t;return t.mount=s=>{const r=rc(s);if(!r)return;const i=t._component;!me(i)&&!i.render&&!i.template&&(i.template=r.innerHTML),r.nodeType===1&&(r.textContent="");const o=n(r,!1,sc(r));return r instanceof Element&&(r.removeAttribute("v-cloak"),r.setAttribute("data-v-app","")),o},t};function sc(e){if(e instanceof SVGElement)return"svg";if(typeof MathMLElement=="function"&&e instanceof MathMLElement)return"mathml"}function rc(e){return Ce(e)?document.querySelector(e):e}const ic=["aria-pressed"],oc={key:0,viewBox:"0 0 24 24",width:"20",height:"20","aria-hidden":"true"},lc={key:1,viewBox:"0 0 24 24",width:"18",height:"18","aria-hidden":"true",fill:"none"},ac={__name:"ChatbotToggler",props:{isOpen:{type:Boolean,required:!0}},emits:["toggle"],setup(e){return(t,n)=>(F(),j("button",{class:"fixed bottom-5 right-5 z-9999 grid h-12 w-12 appearance-none place-items-center rounded-full border border-white/20 bg-gradient-to-br from-brand-500 to-brand-600 text-white shadow-[0_20px_36px_-20px_rgba(109,79,194,0.85)] transition-all duration-250 hover:-translate-y-0.5 hover:from-brand-600 hover:to-violet-700 hover:shadow-[0_22px_40px_-22px_rgba(109,79,194,1)] focus:outline-none max-[600px]:bottom-3 max-[600px]:right-3 max-[600px]:h-13 max-[600px]:w-13",style:{"border-radius":"9999px"},"aria-pressed":e.isOpen?"true":"false",onClick:n[0]||(n[0]=s=>t.$emit("toggle"))},[e.isOpen?(F(),j("svg",lc,n[2]||(n[2]=[x("path",{d:"M6 6l12 12M18 6L6 18",stroke:"currentColor","stroke-width":"2","stroke-linecap":"round"},null,-1)]))):(F(),j("svg",oc,n[1]||(n[1]=[x("path",{d:"M4 4h16a2 2 0 0 1 2 2v9a2 2 0 0 1-2 2H8l-4 4v-4H4a2 2 0 0 1-2-2V6a2 2 0 0 1 2-2z",fill:"currentColor",stroke:"currentColor","stroke-width":"2","stroke-linecap":"miter","stroke-linejoin":"miter"},null,-1)])))],8,ic))}},uc={class:"chat-header relative flex min-h-14 items-center justify-between px-4 pb-2.5 pt-3 text-white sm:px-5"},cc={class:"flex min-w-0 flex-1 items-center gap-2 sm:gap-2.5"},fc={xmlns:"http://www.w3.org/2000/svg",width:"35",height:"35",viewBox:"0 0 1024 1024",class:"h-8 w-8 shrink-0 rounded-full bg-white p-1.5 shadow-md motion-safe:animate-soft-float",style:{fill:"#6d4fc2"}},dc={class:"ml-2 flex items-center gap-1.5"},pc=["title"],hc=["title","aria-label"],gc={key:0,viewBox:"0 0 24 24",width:"14",height:"14",fill:"none",stroke:"currentColor","stroke-width":"2","aria-hidden":"true"},mc={key:1,viewBox:"0 0 24 24",width:"14",height:"14",fill:"none",stroke:"currentColor","stroke-width":"2","aria-hidden":"true"},bc=["title","aria-label"],xc={key:0,xmlns:"http://www.w3.org/2000/svg",width:"16",height:"16",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"2","aria-hidden":"true"},yc={key:1,xmlns:"http://www.w3.org/2000/svg",width:"16",height:"16",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"2","aria-hidden":"true"},wc={key:2,xmlns:"http://www.w3.org/2000/svg",width:"16",height:"16",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"2","aria-hidden":"true"},vc={__name:"ChatHeader",props:{windowMode:{type:String,required:!0},autoReadEnabled:{type:Boolean,required:!0},activeTtsProvider:{type:String,required:!0}},emits:["close","cycleResize","toggleAutoRead"],setup(e){const t=e,n={default:"Compact",half:"Half Screen",full:"Full Screen"},s=Re(()=>n[t.windowMode]||"Compact"),r=Re(()=>t.windowMode==="default"?"Half Screen":t.windowMode==="half"?"Full Screen":"Compact"),i=Re(()=>t.activeTtsProvider==="polly"?"TTS: Polly":t.activeTtsProvider==="browser"?"TTS: Browser":"TTS: Off"),o=Re(()=>t.activeTtsProvider==="polly"?"bg-emerald-500/45":t.activeTtsProvider==="browser"?"bg-amber-500/45":"bg-slate-500/35");return(a,l)=>(F(),j("div",uc,[x("div",cc,[(F(),j("svg",fc,l[3]||(l[3]=[x("path",{d:"M738.3 287.6H285.7c-59 0-106.8 47.8-106.8 106.8v303.1c0 59 47.8 106.8 106.8 106.8h81.5v111.1c0 .7.8 1.1 1.4.7l166.9-110.6 41.8-.8h117.4l43.6-.4c59 0 106.8-47.8 106.8-106.8V394.5c0-59-47.8-106.9-106.8-106.9zM351.7 448.2c0-29.5 23.9-53.5 53.5-53.5s53.5 23.9 53.5 53.5-23.9 53.5-53.5 53.5-53.5-23.9-53.5-53.5zm157.9 267.1c-67.8 0-123.8-47.5-132.3-109h264.6c-8.6 61.5-64.5 109-132.3 109zm110-213.7c-29.5 0-53.5-23.9-53.5-53.5s23.9-53.5 53.5-53.5 53.5 23.9 53.5 53.5-23.9 53.5-53.5 53.5zM867.2 644.5V453.1h26.5c19.4 0 35.1 15.7 35.1 35.1v121.1c0 19.4-15.7 35.1-35.1 35.1h-26.5zM95.2 609.4V488.2c0-19.4 15.7-35.1 35.1-35.1h26.5v191.3h-26.5c-19.4 0-35.1-15.7-35.1-35.1zM561.5 149.6c0 23.4-15.6 43.3-36.9 49.7v44.9h-30v-44.9c-21.4-6.5-36.9-26.3-36.9-49.7 0-28.6 23.3-51.9 51.9-51.9s51.9 23.3 51.9 51.9z"},null,-1)]))),l[4]||(l[4]=x("h2",{class:"truncate text-xs font-semibold tracking-[0.01em] sm:text-base text-white/95"},"ChangAI from ERPGulf",-1))]),x("div",dc,[x("span",{class:ye(["hidden rounded-full border border-white/25 px-2 py-1 text-[10px] font-semibold uppercase tracking-wide text-white/95 shadow-sm backdrop-blur-sm sm:inline",o.value]),title:`TTS provider: ${i.value}`},Qe(i.value),11,pc),x("button",{class:ye(["h-8 min-w-8 appearance-none items-center justify-center rounded-md border border-white/20 px-2 text-xs font-semibold text-white/90 transition-all duration-200 focus:outline-none sm:flex",e.autoReadEnabled?"bg-white/24 shadow-sm":"hover:bg-white/15"]),style:{"border-radius":"0.375rem"},title:e.autoReadEnabled?"Auto speech on":"Auto speech off","aria-label":e.autoReadEnabled?"Turn off auto speech":"Turn on auto speech",onClick:l[0]||(l[0]=c=>a.$emit("toggleAutoRead"))},[e.autoReadEnabled?(F(),j("svg",gc,l[5]||(l[5]=[x("path",{d:"M11 5L6 9H3v6h3l5 4V5z"},null,-1),x("path",{d:"M15 9a4 4 0 0 1 0 6"},null,-1),x("path",{d:"M18 7a7 7 0 0 1 0 10"},null,-1)]))):(F(),j("svg",mc,l[6]||(l[6]=[x("path",{d:"M11 5L6 9H3v6h3l5 4V5z"},null,-1),x("path",{d:"M22 9l-6 6"},null,-1),x("path",{d:"M16 9l6 6"},null,-1)])))],10,hc),x("button",{class:ye(["flex h-8 min-w-8 appearance-none items-center justify-center rounded-md border border-white/20 px-2 text-xs font-semibold text-white/90 transition-all duration-200 focus:outline-none","bg-white/20 shadow-sm hover:bg-white/25"]),style:{"border-radius":"0.375rem"},title:`Resize mode: ${s.value} (click to ${r.value})`,"aria-label":`Resize mode ${s.value}. Click to switch to ${r.value}`,onClick:l[1]||(l[1]=c=>a.$emit("cycleResize"))},[e.windowMode==="default"?(F(),j("svg",xc,l[7]||(l[7]=[x("rect",{x:"7",y:"8",width:"10",height:"8",rx:"2"},null,-1)]))):e.windowMode==="half"?(F(),j("svg",yc,l[8]||(l[8]=[x("rect",{x:"4",y:"5",width:"16",height:"14",rx:"2"},null,-1),x("path",{d:"M12 5v14"},null,-1)]))):(F(),j("svg",wc,l[9]||(l[9]=[x("rect",{x:"4",y:"5",width:"16",height:"14",rx:"2"},null,-1),x("path",{d:"M8 8H6v2M16 8h2v2M8 16H6v-2M16 16h2v-2"},null,-1)])))],8,bc),x("button",{class:"grid h-8 w-8 shrink-0 appearance-none place-items-center rounded-full border border-white/20 text-white transition-all duration-200 hover:scale-105 hover:bg-white/20 focus:outline-none focus-visible:ring-2 focus-visible:ring-white/70",style:{"border-radius":"9999px"},"aria-label":"Close chatbot",onClick:l[2]||(l[2]=c=>a.$emit("close"))},l[10]||(l[10]=[x("svg",{xmlns:"http://www.w3.org/2000/svg",height:"24",width:"24",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"2"},[x("path",{d:"M6 9l6 6 6-6"})],-1)]))])]))}},_c={class:"flex gap-1.5 border-b border-slate-200/80 px-2.5 pb-2.5 pt-1"},Tc=["onClick"],kc={class:"inline-flex items-center gap-1.5"},Sc={__name:"TabBar",props:{modelValue:{type:String,required:!0},debugEnabled:{type:Boolean,default:!1}},emits:["update:modelValue"],setup(e){const t=e,n=Re(()=>{const s=[{id:"chat",label:"Chats"},{id:"debug",label:"Debug"},{id:"support",label:"Support"},{id:"settings",label:"Settings"}];return t.debugEnabled?s:s.filter(r=>r.id!=="debug")});return(s,r)=>(F(),j("div",_c,[(F(!0),j(Be,null,ys(n.value,i=>(F(),j("button",{key:i.id,class:ye(["group min-w-0 flex-1 h-9 appearance-none rounded-lg border border-transparent bg-transparent px-2 text-xs font-semibold transition-all duration-200 focus:outline-none",e.modelValue===i.id?"border-white/30 bg-linear-to-r from-violet-300/36 via-indigo-300/30 to-sky-300/28 text-white shadow-[0_4px_10px_rgba(20,24,40,0.22)]":"text-white/80 hover:border-white/25 hover:bg-white/12 hover:text-white"]),onClick:o=>s.$emit("update:modelValue",i.id)},[x("span",kc,[x("span",{class:ye(["h-1.5 w-1.5 rounded-full transition-colors duration-200",e.modelValue===i.id?"bg-white":"bg-white/40 group-hover:bg-white/70"])},null,2),gr(" "+Qe(i.label),1)])],10,Tc))),128))]))}},Ec=(e,t)=>{const n=e.__vccOpts||e;for(const[s,r]of t)n[s]=r;return n},Ac={},Rc={xmlns:"http://www.w3.org/2000/svg",width:"50",height:"50",viewBox:"0 0 1024 1024",class:"h-7.5 w-7.5 shrink-0 self-end rounded-full bg-gradient-to-br from-brand-500 to-brand-600 p-1.5 fill-white shadow-[0_10px_18px_-12px_rgba(109,79,194,0.85)]"};function Cc(e,t){return F(),j("svg",Rc,t[0]||(t[0]=[x("path",{d:"M738.3 287.6H285.7c-59 0-106.8 47.8-106.8 106.8v303.1c0 59 47.8 106.8 106.8 106.8h81.5v111.1c0 .7.8 1.1 1.4.7l166.9-110.6 41.8-.8h117.4l43.6-.4c59 0 106.8-47.8 106.8-106.8V394.5c0-59-47.8-106.9-106.8-106.9zM351.7 448.2c0-29.5 23.9-53.5 53.5-53.5s53.5 23.9 53.5 53.5-23.9 53.5-53.5 53.5-53.5-23.9-53.5-53.5zm157.9 267.1c-67.8 0-123.8-47.5-132.3-109h264.6c-8.6 61.5-64.5 109-132.3 109zm110-213.7c-29.5 0-53.5-23.9-53.5-53.5s23.9-53.5 53.5-53.5 53.5 23.9 53.5 53.5-23.9 53.5-53.5 53.5zM867.2 644.5V453.1h26.5c19.4 0 35.1 15.7 35.1 35.1v121.1c0 19.4-15.7 35.1-35.1 35.1h-26.5zM95.2 609.4V488.2c0-19.4 15.7-35.1 35.1-35.1h26.5v191.3h-26.5c-19.4 0-35.1-15.7-35.1-35.1zM561.5 149.6c0 23.4-15.6 43.3-36.9 49.7v44.9h-30v-44.9c-21.4-6.5-36.9-26.3-36.9-49.7 0-28.6 23.3-51.9 51.9-51.9s51.9 23.3 51.9 51.9z"},null,-1)]))}const Bo=Ec(Ac,[["render",Cc]]),As={PIPELINE:"changai.changai.api.v2.text2sql_pipeline_v2.run_text2sql_pipeline",SUPPORT:"changai.changai.api.v2.text2sql_pipeline_v2.support_bot",SETTINGS:"changai.changai.api.v2.text2sql_pipeline_v2.get_frontend_settings",TTS:"changai.changai.api.v2.text2sql_pipeline_v2.synthesize_tts"};function kr(e,t={},n="actual"){return n==="test"?Promise.resolve({Bot:`[TEST MODE] ${JSON.stringify(t)}`}):!window.frappe||!window.frappe.call?Promise.reject(new Error("Frappe API is unavailable in actual mode.")):new Promise((s,r)=>{window.frappe.call({method:e,args:t,callback(i){s(i.message)},error(i){r(i)}})})}function Pc(e,t,n="actual",s=null,r){if(n==="test")return{promise:Promise.resolve({Bot:`[TEST MODE] ${JSON.stringify({user_question:e,chat_id:t,request_id:s,sendNonErptoAI:r})}`}),cancel:()=>!1};if(!window.frappe||!window.frappe.call)return{promise:Promise.reject(new Error("Frappe API is unavailable in actual mode.")),cancel:()=>!1};let i=null,o=!1;return{promise:new Promise((c,u)=>{i=window.frappe.call({method:As.PIPELINE,args:{user_question:e,chat_id:t,request_id:s,sendNonErptoAI:r},callback(p){o=!0,c(p.message)},error(p){o=!0,u(p)}})}),cancel:()=>o||!i||typeof i.abort!="function"?!1:(i.abort(),o=!0,!0)}}function Ic(e,t="actual"){return kr(As.SUPPORT,{message:e},t)}function Mc(e="actual"){return kr(As.SETTINGS,{},e)}function Lc(e,t="Zayd",n="actual"){return kr(As.TTS,{text:e,voice_id:t},n)}function Sr(){return{async:!1,breaks:!1,extensions:null,gfm:!0,hooks:null,pedantic:!1,renderer:null,silent:!1,tokenizer:null,walkTokens:null}}var un=Sr();function Ho(e){un=e}var cn={exec:()=>null};function ie(e,t=""){let n=typeof e=="string"?e:e.source,s={replace:(r,i)=>{let o=typeof i=="string"?i:i.source;return o=o.replace(qe.caret,"$1"),n=n.replace(r,o),s},getRegex:()=>new RegExp(n,t)};return s}var Oc=((e="")=>{try{return!!new RegExp("(?<=1)(?/,blockquoteSetextReplace:/\n {0,3}((?:=+|-+) *)(?=\n|$)/g,blockquoteSetextReplace2:/^ {0,3}>[ \t]?/gm,listReplaceNesting:/^ {1,4}(?=( {4})*[^ ])/g,listIsTask:/^\[[ xX]\] +\S/,listReplaceTask:/^\[[ xX]\] +/,listTaskCheckbox:/\[[ xX]\]/,anyLine:/\n.*\n/,hrefBrackets:/^<(.*)>$/,tableDelimiter:/[:|]/,tableAlignChars:/^\||\| *$/g,tableRowBlankLine:/\n[ \t]*$/,tableAlignRight:/^ *-+: *$/,tableAlignCenter:/^ *:-+: *$/,tableAlignLeft:/^ *:-+ *$/,startATag:/^/i,startPreScriptTag:/^<(pre|code|kbd|script)(\s|>)/i,endPreScriptTag:/^<\/(pre|code|kbd|script)(\s|>)/i,startAngleBracket:/^$/,pedanticHrefTitle:/^([^'"]*[^\s])\s+(['"])(.*)\2/,unicodeAlphaNumeric:/[\p{L}\p{N}]/u,escapeTest:/[&<>"']/,escapeReplace:/[&<>"']/g,escapeTestNoEncode:/[<>"']|&(?!(#\d{1,7}|#[Xx][a-fA-F0-9]{1,6}|\w+);)/,escapeReplaceNoEncode:/[<>"']|&(?!(#\d{1,7}|#[Xx][a-fA-F0-9]{1,6}|\w+);)/g,caret:/(^|[^\[])\^/g,percentDecode:/%25/g,findPipe:/\|/g,splitPipe:/ \|/,slashPipe:/\\\|/g,carriageReturn:/\r\n|\r/g,spaceLine:/^ +$/gm,notSpaceStart:/^\S*/,endingNewline:/\n$/,listItemRegex:e=>new RegExp(`^( {0,3}${e})((?:[ ][^\\n]*)?(?:\\n|$))`),nextBulletRegex:e=>new RegExp(`^ {0,${Math.min(3,e-1)}}(?:[*+-]|\\d{1,9}[.)])((?:[ ][^\\n]*)?(?:\\n|$))`),hrRegex:e=>new RegExp(`^ {0,${Math.min(3,e-1)}}((?:- *){3,}|(?:_ *){3,}|(?:\\* *){3,})(?:\\n+|$)`),fencesBeginRegex:e=>new RegExp(`^ {0,${Math.min(3,e-1)}}(?:\`\`\`|~~~)`),headingBeginRegex:e=>new RegExp(`^ {0,${Math.min(3,e-1)}}#`),htmlBeginRegex:e=>new RegExp(`^ {0,${Math.min(3,e-1)}}<(?:[a-z].*>|!--)`,"i"),blockquoteBeginRegex:e=>new RegExp(`^ {0,${Math.min(3,e-1)}}>`)},$c=/^(?:[ \t]*(?:\n|$))+/,Dc=/^((?: {4}| {0,3}\t)[^\n]+(?:\n(?:[ \t]*(?:\n|$))*)?)+/,Nc=/^ {0,3}(`{3,}(?=[^`\n]*(?:\n|$))|~{3,})([^\n]*)(?:\n|$)(?:|([\s\S]*?)(?:\n|$))(?: {0,3}\1[~`]* *(?=\n|$)|$)/,Gn=/^ {0,3}((?:-[\t ]*){3,}|(?:_[ \t]*){3,}|(?:\*[ \t]*){3,})(?:\n+|$)/,Fc=/^ {0,3}(#{1,6})(?=\s|$)(.*)(?:\n+|$)/,Er=/ {0,3}(?:[*+-]|\d{1,9}[.)])/,zo=/^(?!bull |blockCode|fences|blockquote|heading|html|table)((?:.|\n(?!\s*?\n|bull |blockCode|fences|blockquote|heading|html|table))+?)\n {0,3}(=+|-+) *(?:\n+|$)/,Uo=ie(zo).replace(/bull/g,Er).replace(/blockCode/g,/(?: {4}| {0,3}\t)/).replace(/fences/g,/ {0,3}(?:`{3,}|~{3,})/).replace(/blockquote/g,/ {0,3}>/).replace(/heading/g,/ {0,3}#{1,6}/).replace(/html/g,/ {0,3}<[^\n>]+>\n/).replace(/\|table/g,"").getRegex(),Bc=ie(zo).replace(/bull/g,Er).replace(/blockCode/g,/(?: {4}| {0,3}\t)/).replace(/fences/g,/ {0,3}(?:`{3,}|~{3,})/).replace(/blockquote/g,/ {0,3}>/).replace(/heading/g,/ {0,3}#{1,6}/).replace(/html/g,/ {0,3}<[^\n>]+>\n/).replace(/table/g,/ {0,3}\|?(?:[:\- ]*\|)+[\:\- ]*\n/).getRegex(),Ar=/^([^\n]+(?:\n(?!hr|heading|lheading|blockquote|fences|list|html|table| +\n)[^\n]+)*)/,Hc=/^[^\n]+/,Rr=/(?!\s*\])(?:\\[\s\S]|[^\[\]\\])+/,zc=ie(/^ {0,3}\[(label)\]: *(?:\n[ \t]*)?([^<\s][^\s]*|<.*?>)(?:(?: +(?:\n[ \t]*)?| *\n[ \t]*)(title))? *(?:\n+|$)/).replace("label",Rr).replace("title",/(?:"(?:\\"?|[^"\\])*"|'[^'\n]*(?:\n[^'\n]+)*\n?'|\([^()]*\))/).getRegex(),Uc=ie(/^(bull)([ \t][^\n]+?)?(?:\n|$)/).replace(/bull/g,Er).getRegex(),Rs="address|article|aside|base|basefont|blockquote|body|caption|center|col|colgroup|dd|details|dialog|dir|div|dl|dt|fieldset|figcaption|figure|footer|form|frame|frameset|h[1-6]|head|header|hr|html|iframe|legend|li|link|main|menu|menuitem|meta|nav|noframes|ol|optgroup|option|p|param|search|section|summary|table|tbody|td|tfoot|th|thead|title|tr|track|ul",Cr=/|$))/,jc=ie("^ {0,3}(?:<(script|pre|style|textarea)[\\s>][\\s\\S]*?(?:[^\\n]*\\n+|$)|comment[^\\n]*(\\n+|$)|<\\?[\\s\\S]*?(?:\\?>\\n*|$)|\\n*|$)|\\n*|$)|)[\\s\\S]*?(?:(?:\\n[ ]*)+\\n|$)|<(?!script|pre|style|textarea)([a-z][\\w-]*)(?:attribute)*? */?>(?=[ \\t]*(?:\\n|$))[\\s\\S]*?(?:(?:\\n[ ]*)+\\n|$)|(?=[ \\t]*(?:\\n|$))[\\s\\S]*?(?:(?:\\n[ ]*)+\\n|$))","i").replace("comment",Cr).replace("tag",Rs).replace("attribute",/ +[a-zA-Z:_][\w.:-]*(?: *= *"[^"\n]*"| *= *'[^'\n]*'| *= *[^\s"'=<>`]+)?/).getRegex(),jo=ie(Ar).replace("hr",Gn).replace("heading"," {0,3}#{1,6}(?:\\s|$)").replace("|lheading","").replace("|table","").replace("blockquote"," {0,3}>").replace("fences"," {0,3}(?:`{3,}(?=[^`\\n]*\\n)|~{3,})[^\\n]*\\n").replace("list"," {0,3}(?:[*+-]|1[.)])[ \\t]").replace("html",")|<(?:script|pre|style|textarea|!--)").replace("tag",Rs).getRegex(),Vc=ie(/^( {0,3}> ?(paragraph|[^\n]*)(?:\n|$))+/).replace("paragraph",jo).getRegex(),Pr={blockquote:Vc,code:Dc,def:zc,fences:Nc,heading:Fc,hr:Gn,html:jc,lheading:Uo,list:Uc,newline:$c,paragraph:jo,table:cn,text:Hc},Vo=ie("^ *([^\\n ].*)\\n {0,3}((?:\\| *)?:?-+:? *(?:\\| *:?-+:? *)*(?:\\| *)?)(?:\\n((?:(?! *\\n|hr|heading|blockquote|code|fences|list|html).*(?:\\n|$))*)\\n*|$)").replace("hr",Gn).replace("heading"," {0,3}#{1,6}(?:\\s|$)").replace("blockquote"," {0,3}>").replace("code","(?: {4}| {0,3} )[^\\n]").replace("fences"," {0,3}(?:`{3,}(?=[^`\\n]*\\n)|~{3,})[^\\n]*\\n").replace("list"," {0,3}(?:[*+-]|1[.)])[ \\t]").replace("html",")|<(?:script|pre|style|textarea|!--)").replace("tag",Rs).getRegex(),qc={...Pr,lheading:Bc,table:Vo,paragraph:ie(Ar).replace("hr",Gn).replace("heading"," {0,3}#{1,6}(?:\\s|$)").replace("|lheading","").replace("table",Vo).replace("blockquote"," {0,3}>").replace("fences"," {0,3}(?:`{3,}(?=[^`\\n]*\\n)|~{3,})[^\\n]*\\n").replace("list"," {0,3}(?:[*+-]|1[.)])[ \\t]").replace("html",")|<(?:script|pre|style|textarea|!--)").replace("tag",Rs).getRegex()},Wc={...Pr,html:ie(`^ *(?:comment *(?:\\n|\\s*$)|<(tag)[\\s\\S]+? *(?:\\n{2,}|\\s*$)|\\s]*)*?/?> *(?:\\n{2,}|\\s*$))`).replace("comment",Cr).replace(/tag/g,"(?!(?:a|em|strong|small|s|cite|q|dfn|abbr|data|time|code|var|samp|kbd|sub|sup|i|b|u|mark|ruby|rt|rp|bdi|bdo|span|br|wbr|ins|del|img)\\b)\\w+(?!:|[^\\w\\s@]*@)\\b").getRegex(),def:/^ *\[([^\]]+)\]: *]+)>?(?: +(["(][^\n]+[")]))? *(?:\n+|$)/,heading:/^(#{1,6})(.*)(?:\n+|$)/,fences:cn,lheading:/^(.+?)\n {0,3}(=+|-+) *(?:\n+|$)/,paragraph:ie(Ar).replace("hr",Gn).replace("heading",` *#{1,6} *[^ -]`).replace("lheading",Uo).replace("|table","").replace("blockquote"," {0,3}>").replace("|fences","").replace("|list","").replace("|html","").replace("|tag","").getRegex()},Gc=/^\\([!"#$%&'()*+,\-./:;<=>?@\[\]\\^_`{|}~])/,Kc=/^(`+)([^`]|[^`][\s\S]*?[^`])\1(?!`)/,qo=/^( {2,}|\\)\n(?!\s*$)/,Yc=/^(`+|[^`])(?:(?= {2,}\n)|[\s\S]*?(?:(?=[\\`+)[^`]+\k(?!`))*?\]\((?:\\[\s\S]|[^\\\(\)]|\((?:\\[\s\S]|[^\\\(\)])*\))*\)/).replace("precode-",Oc?"(?`+)[^`]+\k(?!`)/).replace("html",/<(?! )[^<>]*?>/).getRegex(),Go=/^(?:\*+(?:((?!\*)punct)|([^\s*]))?)|^_+(?:((?!_)punct)|([^\s_]))?/,ef=ie(Go,"u").replace(/punct/g,vn).getRegex(),tf=ie(Go,"u").replace(/punct/g,Wo).getRegex(),Ko="^[^_*]*?__[^_*]*?\\*[^_*]*?(?=__)|[^*]+(?=[^*])|(?!\\*)punct(\\*+)(?=[\\s]|$)|notPunctSpace(\\*+)(?!\\*)(?=punctSpace|$)|(?!\\*)punctSpace(\\*+)(?=notPunctSpace)|[\\s](\\*+)(?!\\*)(?=punct)|(?!\\*)punct(\\*+)(?!\\*)(?=punct)|notPunctSpace(\\*+)(?=notPunctSpace)",nf=ie(Ko,"gu").replace(/notPunctSpace/g,Ir).replace(/punctSpace/g,Cs).replace(/punct/g,vn).getRegex(),sf=ie(Ko,"gu").replace(/notPunctSpace/g,Qc).replace(/punctSpace/g,Xc).replace(/punct/g,Wo).getRegex(),rf=ie("^[^_*]*?\\*\\*[^_*]*?_[^_*]*?(?=\\*\\*)|[^_]+(?=[^_])|(?!_)punct(_+)(?=[\\s]|$)|notPunctSpace(_+)(?!_)(?=punctSpace|$)|(?!_)punctSpace(_+)(?=notPunctSpace)|[\\s](_+)(?!_)(?=punct)|(?!_)punct(_+)(?!_)(?=punct)","gu").replace(/notPunctSpace/g,Ir).replace(/punctSpace/g,Cs).replace(/punct/g,vn).getRegex(),of=ie(/^~~?(?:((?!~)punct)|[^\s~])/,"u").replace(/punct/g,vn).getRegex(),lf="^[^~]+(?=[^~])|(?!~)punct(~~?)(?=[\\s]|$)|notPunctSpace(~~?)(?!~)(?=punctSpace|$)|(?!~)punctSpace(~~?)(?=notPunctSpace)|[\\s](~~?)(?!~)(?=punct)|(?!~)punct(~~?)(?!~)(?=punct)|notPunctSpace(~~?)(?=notPunctSpace)",af=ie(lf,"gu").replace(/notPunctSpace/g,Ir).replace(/punctSpace/g,Cs).replace(/punct/g,vn).getRegex(),uf=ie(/\\(punct)/,"gu").replace(/punct/g,vn).getRegex(),cf=ie(/^<(scheme:[^\s\x00-\x1f<>]*|email)>/).replace("scheme",/[a-zA-Z][a-zA-Z0-9+.-]{1,31}/).replace("email",/[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+(@)[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)+(?![-_])/).getRegex(),ff=ie(Cr).replace("(?:-->|$)","-->").getRegex(),df=ie("^comment|^|^<[a-zA-Z][\\w-]*(?:attribute)*?\\s*/?>|^<\\?[\\s\\S]*?\\?>|^|^").replace("comment",ff).replace("attribute",/\s+[a-zA-Z:_][\w.:-]*(?:\s*=\s*"[^"]*"|\s*=\s*'[^']*'|\s*=\s*[^\s"'=<>`]+)?/).getRegex(),Ps=/(?:\[(?:\\[\s\S]|[^\[\]\\])*\]|\\[\s\S]|`+(?!`)[^`]*?`+(?!`)|``+(?=\])|[^\[\]\\`])*?/,pf=ie(/^!?\[(label)\]\(\s*(href)(?:(?:[ \t]+(?:\n[ \t]*)?|\n[ \t]*)(title))?\s*\)/).replace("label",Ps).replace("href",/<(?:\\.|[^\n<>\\])+>|[^ \t\n\x00-\x1f]*/).replace("title",/"(?:\\"?|[^"\\])*"|'(?:\\'?|[^'\\])*'|\((?:\\\)?|[^)\\])*\)/).getRegex(),Yo=ie(/^!?\[(label)\]\[(ref)\]/).replace("label",Ps).replace("ref",Rr).getRegex(),Zo=ie(/^!?\[(ref)\](?:\[\])?/).replace("ref",Rr).getRegex(),hf=ie("reflink|nolink(?!\\()","g").replace("reflink",Yo).replace("nolink",Zo).getRegex(),Xo=/[hH][tT][tT][pP][sS]?|[fF][tT][pP]/,Mr={_backpedal:cn,anyPunctuation:uf,autolink:cf,blockSkip:Jc,br:qo,code:Kc,del:cn,delLDelim:cn,delRDelim:cn,emStrongLDelim:ef,emStrongRDelimAst:nf,emStrongRDelimUnd:rf,escape:Gc,link:pf,nolink:Zo,punctuation:Zc,reflink:Yo,reflinkSearch:hf,tag:df,text:Yc,url:cn},gf={...Mr,link:ie(/^!?\[(label)\]\((.*?)\)/).replace("label",Ps).getRegex(),reflink:ie(/^!?\[(label)\]\s*\[([^\]]*)\]/).replace("label",Ps).getRegex()},Lr={...Mr,emStrongRDelimAst:sf,emStrongLDelim:tf,delLDelim:of,delRDelim:af,url:ie(/^((?:protocol):\/\/|www\.)(?:[a-zA-Z0-9\-]+\.?)+[^\s<]*|^email/).replace("protocol",Xo).replace("email",/[A-Za-z0-9._+-]+(@)[a-zA-Z0-9-_]+(?:\.[a-zA-Z0-9-_]*[a-zA-Z0-9])+(?![-_])/).getRegex(),_backpedal:/(?:[^?!.,:;*_'"~()&]+|\([^)]*\)|&(?![a-zA-Z0-9]+;$)|[?!.,:;*_'"~)]+(?!$))+/,del:/^(~~?)(?=[^\s~])((?:\\[\s\S]|[^\\])*?(?:\\[\s\S]|[^\s~\\]))\1(?=[^~]|$)/,text:ie(/^([`~]+|[^`~])(?:(?= {2,}\n)|(?=[a-zA-Z0-9.!#$%&'*+\/=?_`{\|}~-]+@)|[\s\S]*?(?:(?=[\\":">",'"':""","'":"'"},Qo=e=>bf[e];function Rt(e,t){if(t){if(qe.escapeTest.test(e))return e.replace(qe.escapeReplace,Qo)}else if(qe.escapeTestNoEncode.test(e))return e.replace(qe.escapeReplaceNoEncode,Qo);return e}function Jo(e){try{e=encodeURI(e).replace(qe.percentDecode,"%")}catch{return null}return e}function el(e,t){var i;let n=e.replace(qe.findPipe,(o,a,l)=>{let c=!1,u=a;for(;--u>=0&&l[u]==="\\";)c=!c;return c?"|":" |"}),s=n.split(qe.splitPipe),r=0;if(s[0].trim()||s.shift(),s.length>0&&!((i=s.at(-1))!=null&&i.trim())&&s.pop(),t)if(s.length>t)s.splice(t);else for(;s.length{t.push(...s===0?[]:[` +`],...Sa(n))}),t}function Sa({vnode:e,recurseCount:t}){const n=t>0?`... (${t} recursive calls)`:"",s=e.component?e.component.parent==null:!1,r=` at <${mo(e.component,e.type,s)}`,i=">"+n;return e.props?[r,...Ea(e.props),i]:[r+i]}function Ea(e){const t=[],n=Object.keys(e);return n.slice(0,3).forEach(s=>{t.push(...Pi(s,e[s]))}),n.length>3&&t.push(" ..."),t}function Pi(e,t,n){return Ce(t)?(t=JSON.stringify(t),n?t:[`${e}=${t}`]):typeof t=="number"||typeof t=="boolean"||t==null?n?t:[`${e}=${t}`]:je(t)?(t=Pi(e,oe(t.value),!0),n?t:[`${e}=Ref<`,t,">"]):me(t)?[`${e}=fn${t.name?`<${t.name}>`:""}`]:(t=oe(t),n?t:[`${e}=`,t])}function mn(e,t,n,s){try{return s?e(...s):e()}catch(r){hs(r,t,n)}}function _t(e,t,n,s){if(me(e)){const r=mn(e,t,n,s);return r&&ni(r)&&r.catch(i=>{hs(i,t,n)}),r}if(X(e)){const r=[];for(let i=0;i>>1,r=Ge[s],i=Dn(r);i=Dn(n)?Ge.push(e):Ge.splice(Ra(t),0,e),e.flags|=1,Mi()}}function Mi(){gs||(gs=Ii.then($i))}function Ca(e){X(e)?bn.push(...e):qt&&e.id===-1?qt.splice(xn+1,0,e):e.flags&1||(bn.push(e),e.flags|=1),Mi()}function Li(e,t,n=kt+1){for(;nDn(n)-Dn(s));if(bn.length=0,qt){qt.push(...t);return}for(qt=t,xn=0;xne.id==null?e.flags&2?-1:1/0:e.id;function $i(e){try{for(kt=0;kt{s._d&&lo(-1);const i=ms(t);let o;try{o=e(...r)}finally{ms(i),s._d&&lo(1)}return o};return s._n=!0,s._c=!0,s._d=!0,s}function Pa(e,t){if(at===null)return e;const n=Es(at),s=e.dirs||(e.dirs=[]);for(let r=0;re.__isTeleport,Wt=Symbol("_leaveCb"),bs=Symbol("_enterCb");function Ma(){const e={isMounted:!1,isLeaving:!1,isUnmounting:!1,leavingVNodes:new Map};return Hn(()=>{e.isMounted=!0}),xs(()=>{e.isUnmounting=!0}),e}const ut=[Function,Array],Bi={mode:String,appear:Boolean,persisted:Boolean,onBeforeEnter:ut,onEnter:ut,onAfterEnter:ut,onEnterCancelled:ut,onBeforeLeave:ut,onLeave:ut,onAfterLeave:ut,onLeaveCancelled:ut,onBeforeAppear:ut,onAppear:ut,onAfterAppear:ut,onAppearCancelled:ut},Hi=e=>{const t=e.subTree;return t.component?Hi(t.component):t},La={name:"BaseTransition",props:Bi,setup(e,{slots:t}){const n=co(),s=Ma();return()=>{const r=t.default&&Vi(t.default(),!0);if(!r||!r.length)return;const i=zi(r),o=oe(e),{mode:a}=o;if(s.isLeaving)return lr(i);const l=ji(i);if(!l)return lr(i);let c=or(l,o,s,n,p=>c=p);l.type!==Ke&&Nn(l,c);let u=n.subTree&&ji(n.subTree);if(u&&u.type!==Ke&&!on(l,u)&&Hi(n).type!==Ke){let p=or(u,o,s,n);if(Nn(u,p),a==="out-in"&&l.type!==Ke)return s.isLeaving=!0,p.afterLeave=()=>{s.isLeaving=!1,n.job.flags&8||n.update(),delete p.afterLeave,u=void 0},lr(i);a==="in-out"&&l.type!==Ke?p.delayLeave=(g,w,E)=>{const m=Ui(s,u);m[String(u.key)]=u,g[Wt]=()=>{w(),g[Wt]=void 0,delete c.delayedLeave,u=void 0},c.delayedLeave=()=>{E(),delete c.delayedLeave,u=void 0}}:u=void 0}else u&&(u=void 0);return i}}};function zi(e){let t=e[0];if(e.length>1){for(const n of e)if(n.type!==Ke){t=n;break}}return t}const Oa=La;function Ui(e,t){const{leavingVNodes:n}=e;let s=n.get(t.type);return s||(s=Object.create(null),n.set(t.type,s)),s}function or(e,t,n,s,r){const{appear:i,mode:o,persisted:a=!1,onBeforeEnter:l,onEnter:c,onAfterEnter:u,onEnterCancelled:p,onBeforeLeave:g,onLeave:w,onAfterLeave:E,onLeaveCancelled:m,onBeforeAppear:R,onAppear:S,onAfterAppear:V,onAppearCancelled:K}=t,O=String(e.key),A=Ui(n,e),C=(W,ne)=>{W&&_t(W,s,9,ne)},J=(W,ne)=>{const xe=ne[1];C(W,ne),X(W)?W.every($=>$.length<=1)&&xe():W.length<=1&&xe()},te={mode:o,persisted:a,beforeEnter(W){let ne=l;if(!n.isMounted)if(i)ne=R||l;else return;W[Wt]&&W[Wt](!0);const xe=A[O];xe&&on(e,xe)&&xe.el[Wt]&&xe.el[Wt](),C(ne,[W])},enter(W){let ne=c,xe=u,$=p;if(!n.isMounted)if(i)ne=S||c,xe=V||u,$=K||p;else return;let Y=!1;const G=W[bs]=z=>{Y||(Y=!0,z?C($,[W]):C(xe,[W]),te.delayedLeave&&te.delayedLeave(),W[bs]=void 0)};ne?J(ne,[W,G]):G()},leave(W,ne){const xe=String(e.key);if(W[bs]&&W[bs](!0),n.isUnmounting)return ne();C(g,[W]);let $=!1;const Y=W[Wt]=G=>{$||($=!0,ne(),G?C(m,[W]):C(E,[W]),W[Wt]=void 0,A[xe]===e&&delete A[xe])};A[xe]=e,w?J(w,[W,Y]):Y()},clone(W){const ne=or(W,t,n,s,r);return r&&r(ne),ne}};return te}function lr(e){if(ar(e))return e=Gt(e),e.children=null,e}function ji(e){if(!ar(e))return Fi(e.type)&&e.children?zi(e.children):e;if(e.component)return e.component.subTree;const{shapeFlag:t,children:n}=e;if(n){if(t&16)return n[0];if(t&32&&me(n.default))return n.default()}}function Nn(e,t){e.shapeFlag&6&&e.component?(e.transition=t,Nn(e.component.subTree,t)):e.shapeFlag&128?(e.ssContent.transition=t.clone(e.ssContent),e.ssFallback.transition=t.clone(e.ssFallback)):e.transition=t}function Vi(e,t=!1,n){let s=[],r=0;for(let i=0;i1)for(let i=0;iFn(E,t&&(X(t)?t[m]:t),n,s,r));return}if(Bn(s)&&!r){s.shapeFlag&512&&s.type.__asyncResolved&&s.component.subTree.component&&Fn(e,t,n,s.component.subTree);return}const i=s.shapeFlag&4?Es(s.component):s.el,o=r?null:i,{i:a,r:l}=e,c=t&&t.r,u=a.refs===re?a.refs={}:a.refs,p=a.setupState,g=oe(p),w=p===re?()=>!1:E=>he(g,E);if(c!=null&&c!==l&&(Ce(c)?(u[c]=null,w(c)&&(p[c]=null)):je(c)&&(c.value=null)),me(l))mn(l,a,12,[o,u]);else{const E=Ce(l),m=je(l);if(E||m){const R=()=>{if(e.f){const S=E?w(l)?p[l]:u[l]:l.value;r?X(S)&&ei(S,i):X(S)?S.includes(i)||S.push(i):E?(u[l]=[i],w(l)&&(p[l]=u[l])):(l.value=[i],e.k&&(u[e.k]=l.value))}else E?(u[l]=o,w(l)&&(p[l]=o)):m&&(l.value=o,e.k&&(u[e.k]=o))};o?(R.id=-1,nt(R,n)):R()}}}rs().requestIdleCallback,rs().cancelIdleCallback;const Bn=e=>!!e.type.__asyncLoader,ar=e=>e.type.__isKeepAlive;function Da(e,t,n=Yt,s=!1){if(n){const r=n[e]||(n[e]=[]),i=t.__weh||(t.__weh=(...o)=>{It();const a=xr(n),l=_t(t,n,e,o);return a(),Mt(),l});return s?r.unshift(i):r.push(i),i}}const qi=e=>(t,n=Yt)=>{(!Vn||e==="sp")&&Da(e,(...s)=>t(...s),n)},Hn=qi("m"),xs=qi("bum"),Na=Symbol.for("v-ndc");function ys(e,t,n,s){let r;const i=n,o=X(e);if(o||Ce(e)){const a=o&&gn(e);let l=!1,c=!1;a&&(l=!lt(e),c=Vt(e),e=is(e)),r=new Array(e.length);for(let u=0,p=e.length;ut(a,l,void 0,i));else{const a=Object.keys(e);r=new Array(a.length);for(let l=0,c=a.length;le?po(e)?Es(e):ur(e.parent):null,zn=ht(Object.create(null),{$:e=>e,$el:e=>e.vnode.el,$data:e=>e.data,$props:e=>e.props,$attrs:e=>e.attrs,$slots:e=>e.slots,$refs:e=>e.refs,$parent:e=>ur(e.parent),$root:e=>ur(e.root),$host:e=>e.ce,$emit:e=>e.emit,$options:e=>e.type,$forceUpdate:e=>e.f||(e.f=()=>{ir(e.update)}),$nextTick:e=>e.n||(e.n=Tt.bind(e.proxy)),$watch:e=>Qt}),cr=(e,t)=>e!==re&&!e.__isScriptSetup&&he(e,t),Fa={get({_:e},t){if(t==="__v_skip")return!0;const{ctx:n,setupState:s,data:r,props:i,accessCache:o,type:a,appContext:l}=e;let c;if(t[0]!=="$"){const w=o[t];if(w!==void 0)switch(w){case 1:return s[t];case 2:return r[t];case 4:return n[t];case 3:return i[t]}else{if(cr(s,t))return o[t]=1,s[t];if(r!==re&&he(r,t))return o[t]=2,r[t];if((c=e.propsOptions[0])&&he(c,t))return o[t]=3,i[t];if(n!==re&&he(n,t))return o[t]=4,n[t];o[t]=0}}const u=zn[t];let p,g;if(u)return t==="$attrs"&&Ue(e.attrs,"get",""),u(e);if((p=a.__cssModules)&&(p=p[t]))return p;if(n!==re&&he(n,t))return o[t]=4,n[t];if(g=l.config.globalProperties,he(g,t))return g[t]},set({_:e},t,n){const{data:s,setupState:r,ctx:i}=e;return cr(r,t)?(r[t]=n,!0):s!==re&&he(s,t)?(s[t]=n,!0):he(e.props,t)||t[0]==="$"&&t.slice(1)in e?!1:(i[t]=n,!0)},has({_:{data:e,setupState:t,accessCache:n,ctx:s,appContext:r,propsOptions:i}},o){let a;return!!n[o]||e!==re&&he(e,o)||cr(t,o)||(a=i[0])&&he(a,o)||he(s,o)||he(zn,o)||he(r.config.globalProperties,o)},defineProperty(e,t,n){return n.get!=null?e._.accessCache[t]=0:he(n,"value")&&this.set(e,t,n.value,null),Reflect.defineProperty(e,t,n)}};function Wi(){return{app:null,config:{isNativeTag:Dl,performance:!1,globalProperties:{},optionMergeStrategies:{},errorHandler:void 0,warnHandler:void 0,compilerOptions:{}},mixins:[],components:{},directives:{},provides:Object.create(null),optionsCache:new WeakMap,propsCache:new WeakMap,emitsCache:new WeakMap}}let Ba=0;function Ha(e,t){return function(s,r=null){me(s)||(s=ht({},s)),r!=null&&!Ae(r)&&(r=null);const i=Wi(),o=new WeakSet,a=[];let l=!1;const c=i.app={_uid:Ba++,_component:s,_props:r,_container:null,_context:i,_instance:null,version:Su,get config(){return i.config},set config(u){},use(u,...p){return o.has(u)||(u&&me(u.install)?(o.add(u),u.install(c,...p)):me(u)&&(o.add(u),u(c,...p))),c},mixin(u){return c},component(u,p){return p?(i.components[u]=p,c):i.components[u]},directive(u,p){return p?(i.directives[u]=p,c):i.directives[u]},mount(u,p,g){if(!l){const w=c._ceVNode||Me(s,r);return w.appContext=i,g===!0?g="svg":g===!1&&(g=void 0),e(w,u,g),l=!0,c._container=u,u.__vue_app__=c,Es(w.component)}},onUnmount(u){a.push(u)},unmount(){l&&(_t(a,c._instance,16),e(null,c._container),delete c._container.__vue_app__)},provide(u,p){return i.provides[u]=p,c},runWithContext(u){const p=yn;yn=c;try{return u()}finally{yn=p}}};return c}}let yn=null;function za(e,t,n=!1){const s=co();if(s||yn){let r=yn?yn._context.provides:s?s.parent==null||s.ce?s.vnode.appContext&&s.vnode.appContext.provides:s.parent.provides:void 0;if(r&&e in r)return r[e];if(arguments.length>1)return n&&me(t)?t.call(s&&s.proxy):t}}const Gi={},Ki=()=>Object.create(Gi),Yi=e=>Object.getPrototypeOf(e)===Gi;function Ua(e,t,n,s=!1){const r={},i=Ki();e.propsDefaults=Object.create(null),Zi(e,t,r,i);for(const o in e.propsOptions[0])o in r||(r[o]=void 0);n?e.props=s?r:pa(r):e.type.props?e.props=r:e.props=i,e.attrs=i}function ja(e,t,n,s){const{props:r,attrs:i,vnode:{patchFlag:o}}=e,a=oe(r),[l]=e.propsOptions;let c=!1;if((s||o>0)&&!(o&16)){if(o&8){const u=e.vnode.dynamicProps;for(let p=0;pe==="_"||e==="__"||e==="_ctx"||e==="$stable",pr=e=>X(e)?e.map(Et):[Et(e)],qa=(e,t,n)=>{if(t._n)return t;const s=Ni((...r)=>pr(t(...r)),n);return s._c=!1,s},Qi=(e,t,n)=>{const s=e._ctx;for(const r in e){if(dr(r))continue;const i=e[r];if(me(i))t[r]=qa(r,i,s);else if(i!=null){const o=pr(i);t[r]=()=>o}}},Ji=(e,t)=>{const n=pr(t);e.slots.default=()=>n},eo=(e,t,n)=>{for(const s in t)(n||!dr(s))&&(e[s]=t[s])},Wa=(e,t,n)=>{const s=e.slots=Ki();if(e.vnode.shapeFlag&32){const r=t.__;r&&Us(s,"__",r,!0);const i=t._;i?(eo(s,t,n),n&&Us(s,"_",i,!0)):Qi(t,s)}else t&&Ji(e,t)},Ga=(e,t,n)=>{const{vnode:s,slots:r}=e;let i=!0,o=re;if(s.shapeFlag&32){const a=t._;a?n&&a===1?i=!1:eo(r,t,n):(i=!t.$stable,Qi(t,r)),o=t}else t&&(Ji(e,t),o={default:1});if(i)for(const a in r)!dr(a)&&o[a]==null&&delete r[a]},nt=au;function Ka(e){return Ya(e)}function Ya(e,t){const n=rs();n.__VUE__=!0;const{insert:s,remove:r,patchProp:i,createElement:o,createText:a,createComment:l,setText:c,setElementText:u,parentNode:p,nextSibling:g,setScopeId:w=Qt,insertStaticContent:E}=e,m=(f,h,b,k=null,v=null,_=null,M=void 0,I=null,P=!!h.dynamicChildren)=>{if(f===h)return;f&&!on(f,h)&&(k=le(f),de(f,v,_,!0),f=null),h.patchFlag===-2&&(P=!1,h.dynamicChildren=null);const{type:T,ref:B,shapeFlag:L}=h;switch(T){case vs:R(f,h,b,k);break;case Ke:S(f,h,b,k);break;case gr:f==null&&V(h,b,k,M);break;case Be:$(f,h,b,k,v,_,M,I,P);break;default:L&1?A(f,h,b,k,v,_,M,I,P):L&6?Y(f,h,b,k,v,_,M,I,P):(L&64||L&128)&&T.process(f,h,b,k,v,_,M,I,P,ze)}B!=null&&v?Fn(B,f&&f.ref,_,h||f,!h):B==null&&f&&f.ref!=null&&Fn(f.ref,null,_,f,!0)},R=(f,h,b,k)=>{if(f==null)s(h.el=a(h.children),b,k);else{const v=h.el=f.el;h.children!==f.children&&c(v,h.children)}},S=(f,h,b,k)=>{f==null?s(h.el=l(h.children||""),b,k):h.el=f.el},V=(f,h,b,k)=>{[f.el,f.anchor]=E(f.children,h,b,k,f.el,f.anchor)},K=({el:f,anchor:h},b,k)=>{let v;for(;f&&f!==h;)v=g(f),s(f,b,k),f=v;s(h,b,k)},O=({el:f,anchor:h})=>{let b;for(;f&&f!==h;)b=g(f),r(f),f=b;r(h)},A=(f,h,b,k,v,_,M,I,P)=>{h.type==="svg"?M="svg":h.type==="math"&&(M="mathml"),f==null?C(h,b,k,v,_,M,I,P):W(f,h,v,_,M,I,P)},C=(f,h,b,k,v,_,M,I)=>{let P,T;const{props:B,shapeFlag:L,transition:H,dirs:q}=f;if(P=f.el=o(f.type,_,B&&B.is,B),L&8?u(P,f.children):L&16&&te(f.children,P,null,k,v,hr(f,_),M,I),q&&nn(f,null,k,"created"),J(P,f,f.scopeId,M,k),B){for(const fe in B)fe!=="value"&&!Cn(fe)&&i(P,fe,null,B[fe],_,k);"value"in B&&i(P,"value",null,B.value,_),(T=B.onVnodeBeforeMount)&&At(T,k,f)}q&&nn(f,null,k,"beforeMount");const ee=Za(v,H);ee&&H.beforeEnter(P),s(P,h,b),((T=B&&B.onVnodeMounted)||ee||q)&&nt(()=>{T&&At(T,k,f),ee&&H.enter(P),q&&nn(f,null,k,"mounted")},v)},J=(f,h,b,k,v)=>{if(b&&w(f,b),k)for(let _=0;_{for(let T=P;T{const I=h.el=f.el;let{patchFlag:P,dynamicChildren:T,dirs:B}=h;P|=f.patchFlag&16;const L=f.props||re,H=h.props||re;let q;if(b&&sn(b,!1),(q=H.onVnodeBeforeUpdate)&&At(q,b,h,f),B&&nn(h,f,b,"beforeUpdate"),b&&sn(b,!0),(L.innerHTML&&H.innerHTML==null||L.textContent&&H.textContent==null)&&u(I,""),T?ne(f.dynamicChildren,T,I,b,k,hr(h,v),_):M||We(f,h,I,null,b,k,hr(h,v),_,!1),P>0){if(P&16)xe(I,L,H,b,v);else if(P&2&&L.class!==H.class&&i(I,"class",null,H.class,v),P&4&&i(I,"style",L.style,H.style,v),P&8){const ee=h.dynamicProps;for(let fe=0;fe{q&&At(q,b,h,f),B&&nn(h,f,b,"updated")},k)},ne=(f,h,b,k,v,_,M)=>{for(let I=0;I{if(h!==b){if(h!==re)for(const _ in h)!Cn(_)&&!(_ in b)&&i(f,_,h[_],null,v,k);for(const _ in b){if(Cn(_))continue;const M=b[_],I=h[_];M!==I&&_!=="value"&&i(f,_,I,M,v,k)}"value"in b&&i(f,"value",h.value,b.value,v)}},$=(f,h,b,k,v,_,M,I,P)=>{const T=h.el=f?f.el:a(""),B=h.anchor=f?f.anchor:a("");let{patchFlag:L,dynamicChildren:H,slotScopeIds:q}=h;q&&(I=I?I.concat(q):q),f==null?(s(T,b,k),s(B,b,k),te(h.children||[],b,B,v,_,M,I,P)):L>0&&L&64&&H&&f.dynamicChildren?(ne(f.dynamicChildren,H,b,v,_,M,I),(h.key!=null||v&&h===v.subTree)&&to(f,h,!0)):We(f,h,b,B,v,_,M,I,P)},Y=(f,h,b,k,v,_,M,I,P)=>{h.slotScopeIds=I,f==null?h.shapeFlag&512?v.ctx.activate(h,b,k,M,P):G(h,b,k,v,_,M,P):z(f,h,P)},G=(f,h,b,k,v,_,M)=>{const I=f.component=gu(f,k,v);if(ar(f)&&(I.ctx.renderer=ze),mu(I,!1,M),I.asyncDep){if(v&&v.registerDep(I,ue,M),!f.el){const P=I.subTree=Me(Ke);S(null,P,h,b),f.placeholder=P.el}}else ue(I,f,h,b,v,_,M)},z=(f,h,b)=>{const k=h.component=f.component;if(ou(f,h,b))if(k.asyncDep&&!k.asyncResolved){Se(k,h,b);return}else k.next=h,k.update();else h.el=f.el,k.vnode=h},ue=(f,h,b,k,v,_,M)=>{const I=()=>{if(f.isMounted){let{next:L,bu:H,u:q,parent:ee,vnode:fe}=f;{const it=no(f);if(it){L&&(L.el=fe.el,Se(f,L,M)),it.asyncDep.then(()=>{f.isUnmounted||I()});return}}let se=L,Te;sn(f,!1),L?(L.el=fe.el,Se(f,L,M)):L=fe,H&&ss(H),(Te=L.props&&L.props.onVnodeBeforeUpdate)&&At(Te,ee,L,fe),sn(f,!0);const Oe=ro(f),rt=f.subTree;f.subTree=Oe,m(rt,Oe,p(rt.el),le(rt),f,v,_),L.el=Oe.el,se===null&&lu(f,Oe.el),q&&nt(q,v),(Te=L.props&&L.props.onVnodeUpdated)&&nt(()=>At(Te,ee,L,fe),v)}else{let L;const{el:H,props:q}=h,{bm:ee,m:fe,parent:se,root:Te,type:Oe}=f,rt=Bn(h);sn(f,!1),ee&&ss(ee),!rt&&(L=q&&q.onVnodeBeforeMount)&&At(L,se,h),sn(f,!0);{Te.ce&&Te.ce._def.shadowRoot!==!1&&Te.ce._injectChildStyle(Oe);const it=f.subTree=ro(f);m(null,it,b,k,f,v,_),h.el=it.el}if(fe&&nt(fe,v),!rt&&(L=q&&q.onVnodeMounted)){const it=h;nt(()=>At(L,se,it),v)}(h.shapeFlag&256||se&&Bn(se.vnode)&&se.vnode.shapeFlag&256)&&f.a&&nt(f.a,v),f.isMounted=!0,h=b=k=null}};f.scope.on();const P=f.effect=new ci(I);f.scope.off();const T=f.update=P.run.bind(P),B=f.job=P.runIfDirty.bind(P);B.i=f,B.id=f.uid,P.scheduler=()=>ir(B),sn(f,!0),T()},Se=(f,h,b)=>{h.component=f;const k=f.vnode.props;f.vnode=h,f.next=null,ja(f,h.props,k,b),Ga(f,h.children,b),It(),Li(f),Mt()},We=(f,h,b,k,v,_,M,I,P=!1)=>{const T=f&&f.children,B=f?f.shapeFlag:0,L=h.children,{patchFlag:H,shapeFlag:q}=h;if(H>0){if(H&128){ce(T,L,b,k,v,_,M,I,P);return}else if(H&256){xt(T,L,b,k,v,_,M,I,P);return}}q&8?(B&16&&ge(T,v,_),L!==T&&u(b,L)):B&16?q&16?ce(T,L,b,k,v,_,M,I,P):ge(T,v,_,!0):(B&8&&u(b,""),q&16&&te(L,b,k,v,_,M,I,P))},xt=(f,h,b,k,v,_,M,I,P)=>{f=f||pt,h=h||pt;const T=f.length,B=h.length,L=Math.min(T,B);let H;for(H=0;HB?ge(f,v,_,!0,!1,L):te(h,b,k,v,_,M,I,P,L)},ce=(f,h,b,k,v,_,M,I,P)=>{let T=0;const B=h.length;let L=f.length-1,H=B-1;for(;T<=L&&T<=H;){const q=f[T],ee=h[T]=P?Kt(h[T]):Et(h[T]);if(on(q,ee))m(q,ee,b,null,v,_,M,I,P);else break;T++}for(;T<=L&&T<=H;){const q=f[L],ee=h[H]=P?Kt(h[H]):Et(h[H]);if(on(q,ee))m(q,ee,b,null,v,_,M,I,P);else break;L--,H--}if(T>L){if(T<=H){const q=H+1,ee=qH)for(;T<=L;)de(f[T],v,_,!0),T++;else{const q=T,ee=T,fe=new Map;for(T=ee;T<=H;T++){const $e=h[T]=P?Kt(h[T]):Et(h[T]);$e.key!=null&&fe.set($e.key,T)}let se,Te=0;const Oe=H-ee+1;let rt=!1,it=0;const Ft=new Array(Oe);for(T=0;T=Oe){de($e,v,_,!0);continue}let Xe;if($e.key!=null)Xe=fe.get($e.key);else for(se=ee;se<=H;se++)if(Ft[se-ee]===0&&on($e,h[se])){Xe=se;break}Xe===void 0?de($e,v,_,!0):(Ft[Xe-ee]=T+1,Xe>=it?it=Xe:rt=!0,m($e,h[Xe],b,null,v,_,M,I,P),Te++)}const Qn=rt?Xa(Ft):pt;for(se=Qn.length-1,T=Oe-1;T>=0;T--){const $e=ee+T,Xe=h[$e],ot=h[$e+1],Bt=$e+1{const{el:_,type:M,transition:I,children:P,shapeFlag:T}=f;if(T&6){N(f.component.subTree,h,b,k);return}if(T&128){f.suspense.move(h,b,k);return}if(T&64){M.move(f,h,b,ze);return}if(M===Be){s(_,h,b);for(let L=0;LI.enter(_),v);else{const{leave:L,delayLeave:H,afterLeave:q}=I,ee=()=>{f.ctx.isUnmounted?r(_):s(_,h,b)},fe=()=>{L(_,()=>{ee(),q&&q()})};H?H(_,ee,fe):fe()}else s(_,h,b)},de=(f,h,b,k=!1,v=!1)=>{const{type:_,props:M,ref:I,children:P,dynamicChildren:T,shapeFlag:B,patchFlag:L,dirs:H,cacheIndex:q}=f;if(L===-2&&(v=!1),I!=null&&(It(),Fn(I,null,b,f,!0),Mt()),q!=null&&(h.renderCache[q]=void 0),B&256){h.ctx.deactivate(f);return}const ee=B&1&&H,fe=!Bn(f);let se;if(fe&&(se=M&&M.onVnodeBeforeUnmount)&&At(se,h,f),B&6)ve(f.component,b,k);else{if(B&128){f.suspense.unmount(b,k);return}ee&&nn(f,null,h,"beforeUnmount"),B&64?f.type.remove(f,h,b,ze,k):T&&!T.hasOnce&&(_!==Be||L>0&&L&64)?ge(T,h,b,!1,!0):(_===Be&&L&384||!v&&B&16)&&ge(P,h,b),k&&pe(f)}(fe&&(se=M&&M.onVnodeUnmounted)||ee)&&nt(()=>{se&&At(se,h,f),ee&&nn(f,null,h,"unmounted")},b)},pe=f=>{const{type:h,el:b,anchor:k,transition:v}=f;if(h===Be){ke(b,k);return}if(h===gr){O(f);return}const _=()=>{r(b),v&&!v.persisted&&v.afterLeave&&v.afterLeave()};if(f.shapeFlag&1&&v&&!v.persisted){const{leave:M,delayLeave:I}=v,P=()=>M(b,_);I?I(f.el,_,P):P()}else _()},ke=(f,h)=>{let b;for(;f!==h;)b=g(f),r(f),f=b;r(h)},ve=(f,h,b)=>{const{bum:k,scope:v,job:_,subTree:M,um:I,m:P,a:T,parent:B,slots:{__:L}}=f;so(P),so(T),k&&ss(k),B&&X(L)&&L.forEach(H=>{B.renderCache[H]=void 0}),v.stop(),_&&(_.flags|=8,de(M,f,h,b)),I&&nt(I,h),nt(()=>{f.isUnmounted=!0},h),h&&h.pendingBranch&&!h.isUnmounted&&f.asyncDep&&!f.asyncResolved&&f.suspenseId===h.pendingId&&(h.deps--,h.deps===0&&h.resolve())},ge=(f,h,b,k=!1,v=!1,_=0)=>{for(let M=_;M{if(f.shapeFlag&6)return le(f.component.subTree);if(f.shapeFlag&128)return f.suspense.next();const h=g(f.anchor||f.el),b=h&&h[Ia];return b?g(b):h};let yt=!1;const Ct=(f,h,b)=>{f==null?h._vnode&&de(h._vnode,null,null,!0):m(h._vnode||null,f,h,null,null,null,b),h._vnode=f,yt||(yt=!0,Li(),Oi(),yt=!1)},ze={p:m,um:de,m:N,r:pe,mt:G,mc:te,pc:We,pbc:ne,n:le,o:e};return{render:Ct,hydrate:void 0,createApp:Ha(Ct)}}function hr({type:e,props:t},n){return n==="svg"&&e==="foreignObject"||n==="mathml"&&e==="annotation-xml"&&t&&t.encoding&&t.encoding.includes("html")?void 0:n}function sn({effect:e,job:t},n){n?(e.flags|=32,t.flags|=4):(e.flags&=-33,t.flags&=-5)}function Za(e,t){return(!e||e&&!e.pendingBranch)&&t&&!t.persisted}function to(e,t,n=!1){const s=e.children,r=t.children;if(X(s)&&X(r))for(let i=0;i>1,e[n[a]]0&&(t[s]=n[i-1]),n[i]=s)}}for(i=n.length,o=n[i-1];i-- >0;)n[i]=o,o=t[o];return n}function no(e){const t=e.subTree.component;if(t)return t.asyncDep&&!t.asyncResolved?t:no(t)}function so(e){if(e)for(let t=0;tza(Qa);function rn(e,t,n){return eu(e,t,n)}function eu(e,t,n=re){const{immediate:s,deep:r,flush:i,once:o}=n,a=ht({},n),l=t&&s||!t&&i!=="post";let c;if(Vn){if(i==="sync"){const w=Ja();c=w.__watcherHandles||(w.__watcherHandles=[])}else if(!l){const w=()=>{};return w.stop=Qt,w.resume=Qt,w.pause=Qt,w}}const u=Yt;a.call=(w,E,m)=>_t(w,u,E,m);let p=!1;i==="post"?a.scheduler=w=>{nt(w,u&&u.suspense)}:i!=="sync"&&(p=!0,a.scheduler=(w,E)=>{E?w():ir(w)}),a.augmentJob=w=>{t&&(w.flags|=4),p&&(w.flags|=2,u&&(w.id=u.uid,w.i=u))};const g=_a(e,t,a);return Vn&&(c?c.push(g):l&&g()),g}const tu=(e,t)=>t==="modelValue"||t==="model-value"?e.modelModifiers:e[`${t}Modifiers`]||e[`${Ut(t)}Modifiers`]||e[`${Jt(t)}Modifiers`];function nu(e,t,...n){if(e.isUnmounted)return;const s=e.vnode.props||re;let r=n;const i=t.startsWith("update:"),o=i&&tu(s,t.slice(7));o&&(o.trim&&(r=n.map(u=>Ce(u)?u.trim():u)),o.number&&(r=n.map(js)));let a,l=s[a=zs(t)]||s[a=zs(Ut(t))];!l&&i&&(l=s[a=zs(Jt(t))]),l&&_t(l,e,6,r);const c=s[a+"Once"];if(c){if(!e.emitted)e.emitted={};else if(e.emitted[a])return;e.emitted[a]=!0,_t(c,e,6,r)}}function su(e,t,n=!1){const s=t.emitsCache,r=s.get(e);if(r!==void 0)return r;const i=e.emits;let o={};return i?(X(i)?i.forEach(a=>o[a]=null):ht(o,i),Ae(e)&&s.set(e,o),o):(Ae(e)&&s.set(e,null),null)}function ws(e,t){return!e||!es(t)?!1:(t=t.slice(2).replace(/Once$/,""),he(e,t[0].toLowerCase()+t.slice(1))||he(e,Jt(t))||he(e,t))}function Ep(){}function ro(e){const{type:t,vnode:n,proxy:s,withProxy:r,propsOptions:[i],slots:o,attrs:a,emit:l,render:c,renderCache:u,props:p,data:g,setupState:w,ctx:E,inheritAttrs:m}=e,R=ms(e);let S,V;try{if(n.shapeFlag&4){const O=r||s,A=O;S=Et(c.call(A,O,u,p,w,g,E)),V=a}else{const O=t;S=Et(O.length>1?O(p,{attrs:a,slots:o,emit:l}):O(p,null)),V=t.props?a:ru(a)}}catch(O){Un.length=0,hs(O,e,1),S=Me(Ke)}let K=S;if(V&&m!==!1){const O=Object.keys(V),{shapeFlag:A}=K;O.length&&A&7&&(i&&O.some(Bs)&&(V=iu(V,i)),K=Gt(K,V,!1,!0))}return n.dirs&&(K=Gt(K,null,!1,!0),K.dirs=K.dirs?K.dirs.concat(n.dirs):n.dirs),n.transition&&Nn(K,n.transition),S=K,ms(R),S}const ru=e=>{let t;for(const n in e)(n==="class"||n==="style"||es(n))&&((t||(t={}))[n]=e[n]);return t},iu=(e,t)=>{const n={};for(const s in e)(!Bs(s)||!(s.slice(9)in t))&&(n[s]=e[s]);return n};function ou(e,t,n){const{props:s,children:r,component:i}=e,{props:o,children:a,patchFlag:l}=t,c=i.emitsOptions;if(t.dirs||t.transition)return!0;if(n&&l>=0){if(l&1024)return!0;if(l&16)return s?io(s,o,c):!!o;if(l&8){const u=t.dynamicProps;for(let p=0;pe.__isSuspense;function au(e,t){t&&t.pendingBranch?X(e)?t.effects.push(...e):t.effects.push(e):Ca(e)}const Be=Symbol.for("v-fgt"),vs=Symbol.for("v-txt"),Ke=Symbol.for("v-cmt"),gr=Symbol.for("v-stc"),Un=[];let st=null;function F(e=!1){Un.push(st=e?null:[])}function uu(){Un.pop(),st=Un[Un.length-1]||null}let jn=1;function lo(e,t=!1){jn+=e,e<0&&st&&t&&(st.hasOnce=!0)}function ao(e){return e.dynamicChildren=jn>0?st||pt:null,uu(),jn>0&&st&&st.push(e),e}function j(e,t,n,s,r,i){return ao(x(e,t,n,s,r,i,!0))}function St(e,t,n,s,r){return ao(Me(e,t,n,s,r,!0))}function _s(e){return e?e.__v_isVNode===!0:!1}function on(e,t){return e.type===t.type&&e.key===t.key}const uo=({key:e})=>e!=null?e:null,ks=({ref:e,ref_key:t,ref_for:n})=>(typeof e=="number"&&(e=""+e),e!=null?Ce(e)||je(e)||me(e)?{i:at,r:e,k:t,f:!!n}:e:null);function x(e,t=null,n=null,s=0,r=null,i=e===Be?0:1,o=!1,a=!1){const l={__v_isVNode:!0,__v_skip:!0,type:e,props:t,key:t&&uo(t),ref:t&&ks(t),scopeId:Di,slotScopeIds:null,children:n,component:null,suspense:null,ssContent:null,ssFallback:null,dirs:null,transition:null,el:null,anchor:null,target:null,targetStart:null,targetAnchor:null,staticCount:0,shapeFlag:i,patchFlag:s,dynamicProps:r,dynamicChildren:null,appContext:null,ctx:at};return a?(mr(l,n),i&128&&e.normalize(l)):n&&(l.shapeFlag|=Ce(n)?8:16),jn>0&&!o&&st&&(l.patchFlag>0||i&6)&&l.patchFlag!==32&&st.push(l),l}const Me=cu;function cu(e,t=null,n=null,s=0,r=null,i=!1){if((!e||e===Na)&&(e=Ke),_s(e)){const a=Gt(e,t,!0);return n&&mr(a,n),jn>0&&!i&&st&&(a.shapeFlag&6?st[st.indexOf(e)]=a:st.push(a)),a.patchFlag=-2,a}if(ku(e)&&(e=e.__vccOpts),t){t=fu(t);let{class:a,style:l}=t;a&&!Ce(a)&&(t.class=ye(a)),Ae(l)&&(sr(l)&&!X(l)&&(l=ht({},l)),t.style=Vs(l))}const o=Ce(e)?1:oo(e)?128:Fi(e)?64:Ae(e)?4:me(e)?2:0;return x(e,t,n,s,r,o,i,!0)}function fu(e){return e?sr(e)||Yi(e)?ht({},e):e:null}function Gt(e,t,n=!1,s=!1){const{props:r,ref:i,patchFlag:o,children:a,transition:l}=e,c=t?du(r||{},t):r,u={__v_isVNode:!0,__v_skip:!0,type:e.type,props:c,key:c&&uo(c),ref:t&&t.ref?n&&i?X(i)?i.concat(ks(t)):[i,ks(t)]:ks(t):i,scopeId:e.scopeId,slotScopeIds:e.slotScopeIds,children:a,target:e.target,targetStart:e.targetStart,targetAnchor:e.targetAnchor,staticCount:e.staticCount,shapeFlag:e.shapeFlag,patchFlag:t&&e.type!==Be?o===-1?16:o|16:o,dynamicProps:e.dynamicProps,dynamicChildren:e.dynamicChildren,appContext:e.appContext,dirs:e.dirs,transition:l,component:e.component,suspense:e.suspense,ssContent:e.ssContent&&Gt(e.ssContent),ssFallback:e.ssFallback&&Gt(e.ssFallback),placeholder:e.placeholder,el:e.el,anchor:e.anchor,ctx:e.ctx,ce:e.ce};return l&&s&&Nn(u,l.clone(u)),u}function Ts(e=" ",t=0){return Me(vs,null,e,t)}function Ve(e="",t=!1){return t?(F(),St(Ke,null,e)):Me(Ke,null,e)}function Et(e){return e==null||typeof e=="boolean"?Me(Ke):X(e)?Me(Be,null,e.slice()):_s(e)?Kt(e):Me(vs,null,String(e))}function Kt(e){return e.el===null&&e.patchFlag!==-1||e.memo?e:Gt(e)}function mr(e,t){let n=0;const{shapeFlag:s}=e;if(t==null)t=null;else if(X(t))n=16;else if(typeof t=="object")if(s&65){const r=t.default;r&&(r._c&&(r._d=!1),mr(e,r()),r._c&&(r._d=!0));return}else{n=32;const r=t._;!r&&!Yi(t)?t._ctx=at:r===3&&at&&(at.slots._===1?t._=1:(t._=2,e.patchFlag|=1024))}else me(t)?(t={default:t,_ctx:at},n=32):(t=String(t),s&64?(n=16,t=[Ts(t)]):n=8);e.children=t,e.shapeFlag|=n}function du(...e){const t={};for(let n=0;nYt||at;let Ss,br;{const e=rs(),t=(n,s)=>{let r;return(r=e[n])||(r=e[n]=[]),r.push(s),i=>{r.length>1?r.forEach(o=>o(i)):r[0](i)}};Ss=t("__VUE_INSTANCE_SETTERS__",n=>Yt=n),br=t("__VUE_SSR_SETTERS__",n=>Vn=n)}const xr=e=>{const t=Yt;return Ss(e),e.scope.on(),()=>{e.scope.off(),Ss(t)}},fo=()=>{Yt&&Yt.scope.off(),Ss(null)};function po(e){return e.vnode.shapeFlag&4}let Vn=!1;function mu(e,t=!1,n=!1){t&&br(t);const{props:s,children:r}=e.vnode,i=po(e);Ua(e,s,i,t),Wa(e,r,n||t);const o=i?bu(e,t):void 0;return t&&br(!1),o}function bu(e,t){const n=e.type;e.accessCache=Object.create(null),e.proxy=new Proxy(e.ctx,Fa);const{setup:s}=n;if(s){It();const r=e.setupContext=s.length>1?yu(e):null,i=xr(e),o=mn(s,e,0,[e.props,r]),a=ni(o);if(Mt(),i(),(a||e.sp)&&!Bn(e)&&$a(e),a){if(o.then(fo,fo),t)return o.then(l=>{ho(e,l)}).catch(l=>{hs(l,e,0)});e.asyncDep=o}else ho(e,o)}else go(e)}function ho(e,t,n){me(t)?e.type.__ssrInlineRender?e.ssrRender=t:e.render=t:Ae(t)&&(e.setupState=Ci(t)),go(e)}function go(e,t,n){const s=e.type;e.render||(e.render=s.render||Qt)}const xu={get(e,t){return Ue(e,"get",""),e[t]}};function yu(e){const t=n=>{e.exposed=n||{}};return{attrs:new Proxy(e.attrs,xu),slots:e.slots,emit:e.emit,expose:t}}function Es(e){return e.exposed?e.exposeProxy||(e.exposeProxy=new Proxy(Ci(ha(e.exposed)),{get(t,n){if(n in t)return t[n];if(n in zn)return zn[n](e)},has(t,n){return n in t||n in zn}})):e.proxy}const wu=/(?:^|[-_])(\w)/g,vu=e=>e.replace(wu,t=>t.toUpperCase()).replace(/[-_]/g,"");function _u(e,t=!0){return me(e)?e.displayName||e.name:e.name||t&&e.__name}function mo(e,t,n=!1){let s=_u(t);if(!s&&t.__file){const r=t.__file.match(/([^/\\]+)\.\w+$/);r&&(s=r[1])}if(!s&&e&&e.parent){const r=i=>{for(const o in i)if(i[o]===t)return o};s=r(e.components||e.parent.type.components)||r(e.appContext.components)}return s?vu(s):n?"App":"Anonymous"}function ku(e){return me(e)&&"__vccOpts"in e}const Re=(e,t)=>wa(e,t,Vn);function Tu(e,t,n){const s=arguments.length;return s===2?Ae(t)&&!X(t)?_s(t)?Me(e,null,[t]):Me(e,t):Me(e,null,t):(s>3?n=Array.prototype.slice.call(arguments,2):s===3&&_s(n)&&(n=[n]),Me(e,t,n))}const Su="3.5.18";let yr;const bo=typeof window!="undefined"&&window.trustedTypes;if(bo)try{yr=bo.createPolicy("vue",{createHTML:e=>e})}catch{}const xo=yr?e=>yr.createHTML(e):e=>e,Eu="http://www.w3.org/2000/svg",Au="http://www.w3.org/1998/Math/MathML",Dt=typeof document!="undefined"?document:null,yo=Dt&&Dt.createElement("template"),Ru={insert:(e,t,n)=>{t.insertBefore(e,n||null)},remove:e=>{const t=e.parentNode;t&&t.removeChild(e)},createElement:(e,t,n,s)=>{const r=t==="svg"?Dt.createElementNS(Eu,e):t==="mathml"?Dt.createElementNS(Au,e):n?Dt.createElement(e,{is:n}):Dt.createElement(e);return e==="select"&&s&&s.multiple!=null&&r.setAttribute("multiple",s.multiple),r},createText:e=>Dt.createTextNode(e),createComment:e=>Dt.createComment(e),setText:(e,t)=>{e.nodeValue=t},setElementText:(e,t)=>{e.textContent=t},parentNode:e=>e.parentNode,nextSibling:e=>e.nextSibling,querySelector:e=>Dt.querySelector(e),setScopeId(e,t){e.setAttribute(t,"")},insertStaticContent(e,t,n,s,r,i){const o=n?n.previousSibling:t.lastChild;if(r&&(r===i||r.nextSibling))for(;t.insertBefore(r.cloneNode(!0),n),!(r===i||!(r=r.nextSibling)););else{yo.innerHTML=xo(s==="svg"?`${e}`:s==="mathml"?`${e}`:e);const a=yo.content;if(s==="svg"||s==="mathml"){const l=a.firstChild;for(;l.firstChild;)a.appendChild(l.firstChild);a.removeChild(l)}t.insertBefore(a,n)}return[o?o.nextSibling:t.firstChild,n?n.previousSibling:t.lastChild]}},Zt="transition",qn="animation",Wn=Symbol("_vtc"),wo={name:String,type:String,css:{type:Boolean,default:!0},duration:[String,Number,Object],enterFromClass:String,enterActiveClass:String,enterToClass:String,appearFromClass:String,appearActiveClass:String,appearToClass:String,leaveFromClass:String,leaveActiveClass:String,leaveToClass:String},Cu=ht({},Bi,wo),Pu=(e=>(e.displayName="Transition",e.props=Cu,e))((e,{slots:t})=>Tu(Oa,Iu(e),t)),ln=(e,t=[])=>{X(e)?e.forEach(n=>n(...t)):e&&e(...t)},vo=e=>e?X(e)?e.some(t=>t.length>1):e.length>1:!1;function Iu(e){const t={};for(const $ in e)$ in wo||(t[$]=e[$]);if(e.css===!1)return t;const{name:n="v",type:s,duration:r,enterFromClass:i=`${n}-enter-from`,enterActiveClass:o=`${n}-enter-active`,enterToClass:a=`${n}-enter-to`,appearFromClass:l=i,appearActiveClass:c=o,appearToClass:u=a,leaveFromClass:p=`${n}-leave-from`,leaveActiveClass:g=`${n}-leave-active`,leaveToClass:w=`${n}-leave-to`}=e,E=Mu(r),m=E&&E[0],R=E&&E[1],{onBeforeEnter:S,onEnter:V,onEnterCancelled:K,onLeave:O,onLeaveCancelled:A,onBeforeAppear:C=S,onAppear:J=V,onAppearCancelled:te=K}=t,W=($,Y,G,z)=>{$._enterCancelled=z,an($,Y?u:a),an($,Y?c:o),G&&G()},ne=($,Y)=>{$._isLeaving=!1,an($,p),an($,w),an($,g),Y&&Y()},xe=$=>(Y,G)=>{const z=$?J:V,ue=()=>W(Y,$,G);ln(z,[Y,ue]),_o(()=>{an(Y,$?l:i),Nt(Y,$?u:a),vo(z)||ko(Y,s,m,ue)})};return ht(t,{onBeforeEnter($){ln(S,[$]),Nt($,i),Nt($,o)},onBeforeAppear($){ln(C,[$]),Nt($,l),Nt($,c)},onEnter:xe(!1),onAppear:xe(!0),onLeave($,Y){$._isLeaving=!0;const G=()=>ne($,Y);Nt($,p),$._enterCancelled?(Nt($,g),Eo()):(Eo(),Nt($,g)),_o(()=>{$._isLeaving&&(an($,p),Nt($,w),vo(O)||ko($,s,R,G))}),ln(O,[$,G])},onEnterCancelled($){W($,!1,void 0,!0),ln(K,[$])},onAppearCancelled($){W($,!0,void 0,!0),ln(te,[$])},onLeaveCancelled($){ne($),ln(A,[$])}})}function Mu(e){if(e==null)return null;if(Ae(e))return[wr(e.enter),wr(e.leave)];{const t=wr(e);return[t,t]}}function wr(e){return zl(e)}function Nt(e,t){t.split(/\s+/).forEach(n=>n&&e.classList.add(n)),(e[Wn]||(e[Wn]=new Set)).add(t)}function an(e,t){t.split(/\s+/).forEach(s=>s&&e.classList.remove(s));const n=e[Wn];n&&(n.delete(t),n.size||(e[Wn]=void 0))}function _o(e){requestAnimationFrame(()=>{requestAnimationFrame(e)})}let Lu=0;function ko(e,t,n,s){const r=e._endId=++Lu,i=()=>{r===e._endId&&s()};if(n!=null)return setTimeout(i,n);const{type:o,timeout:a,propCount:l}=Ou(e,t);if(!o)return s();const c=o+"end";let u=0;const p=()=>{e.removeEventListener(c,g),i()},g=w=>{w.target===e&&++u>=l&&p()};setTimeout(()=>{u(n[E]||"").split(", "),r=s(`${Zt}Delay`),i=s(`${Zt}Duration`),o=To(r,i),a=s(`${qn}Delay`),l=s(`${qn}Duration`),c=To(a,l);let u=null,p=0,g=0;t===Zt?o>0&&(u=Zt,p=o,g=i.length):t===qn?c>0&&(u=qn,p=c,g=l.length):(p=Math.max(o,c),u=p>0?o>c?Zt:qn:null,g=u?u===Zt?i.length:l.length:0);const w=u===Zt&&/\b(transform|all)(,|$)/.test(s(`${Zt}Property`).toString());return{type:u,timeout:p,propCount:g,hasTransform:w}}function To(e,t){for(;e.lengthSo(n)+So(e[s])))}function So(e){return e==="auto"?0:Number(e.slice(0,-1).replace(",","."))*1e3}function Eo(){return document.body.offsetHeight}function $u(e,t,n){const s=e[Wn];s&&(t=(t?[t,...s]:[...s]).join(" ")),t==null?e.removeAttribute("class"):n?e.setAttribute("class",t):e.className=t}const Ao=Symbol("_vod"),Du=Symbol("_vsh"),Nu=Symbol(""),Fu=/(^|;)\s*display\s*:/;function Bu(e,t,n){const s=e.style,r=Ce(n);let i=!1;if(n&&!r){if(t)if(Ce(t))for(const o of t.split(";")){const a=o.slice(0,o.indexOf(":")).trim();n[a]==null&&As(s,a,"")}else for(const o in t)n[o]==null&&As(s,o,"");for(const o in n)o==="display"&&(i=!0),As(s,o,n[o])}else if(r){if(t!==n){const o=s[Nu];o&&(n+=";"+o),s.cssText=n,i=Fu.test(n)}}else t&&e.removeAttribute("style");Ao in e&&(e[Ao]=i?s.display:"",e[Du]&&(s.display="none"))}const Ro=/\s*!important$/;function As(e,t,n){if(X(n))n.forEach(s=>As(e,t,s));else if(n==null&&(n=""),t.startsWith("--"))e.setProperty(t,n);else{const s=Hu(e,t);Ro.test(n)?e.setProperty(Jt(s),n.replace(Ro,""),"important"):e[s]=n}}const Co=["Webkit","Moz","ms"],vr={};function Hu(e,t){const n=vr[t];if(n)return n;let s=Ut(t);if(s!=="filter"&&s in e)return vr[t]=s;s=ii(s);for(let r=0;r_r||(Vu.then(()=>_r=0),_r=Date.now());function Wu(e,t){const n=s=>{if(!s._vts)s._vts=Date.now();else if(s._vts<=n.attached)return;_t(Gu(s,n.value),t,5,[s])};return n.value=e,n.attached=qu(),n}function Gu(e,t){if(X(t)){const n=e.stopImmediatePropagation;return e.stopImmediatePropagation=()=>{n.call(e),e._stopped=!0},t.map(s=>r=>!r._stopped&&s&&s(r))}else return t}const $o=e=>e.charCodeAt(0)===111&&e.charCodeAt(1)===110&&e.charCodeAt(2)>96&&e.charCodeAt(2)<123,Ku=(e,t,n,s,r,i)=>{const o=r==="svg";t==="class"?$u(e,s,o):t==="style"?Bu(e,n,s):es(t)?Bs(t)||Uu(e,t,n,s,i):(t[0]==="."?(t=t.slice(1),!0):t[0]==="^"?(t=t.slice(1),!1):Yu(e,t,s,o))?(Mo(e,t,s),!e.tagName.includes("-")&&(t==="value"||t==="checked"||t==="selected")&&Io(e,t,s,o,i,t!=="value")):e._isVueCE&&(/[A-Z]/.test(t)||!Ce(s))?Mo(e,Ut(t),s,i,t):(t==="true-value"?e._trueValue=s:t==="false-value"&&(e._falseValue=s),Io(e,t,s,o))};function Yu(e,t,n,s){if(s)return!!(t==="innerHTML"||t==="textContent"||t in e&&$o(t)&&me(n));if(t==="spellcheck"||t==="draggable"||t==="translate"||t==="autocorrect"||t==="form"||t==="list"&&e.tagName==="INPUT"||t==="type"&&e.tagName==="TEXTAREA")return!1;if(t==="width"||t==="height"){const r=e.tagName;if(r==="IMG"||r==="VIDEO"||r==="CANVAS"||r==="SOURCE")return!1}return $o(t)&&Ce(n)?!1:t in e}const Do=e=>{const t=e.props["onUpdate:modelValue"]||!1;return X(t)?n=>ss(t,n):t};function Zu(e){e.target.composing=!0}function No(e){const t=e.target;t.composing&&(t.composing=!1,t.dispatchEvent(new Event("input")))}const kr=Symbol("_assign"),Xu={created(e,{modifiers:{lazy:t,trim:n,number:s}},r){e[kr]=Do(r);const i=s||r.props&&r.props.type==="number";wn(e,t?"change":"input",o=>{if(o.target.composing)return;let a=e.value;n&&(a=a.trim()),i&&(a=js(a)),e[kr](a)}),n&&wn(e,"change",()=>{e.value=e.value.trim()}),t||(wn(e,"compositionstart",Zu),wn(e,"compositionend",No),wn(e,"change",No))},mounted(e,{value:t}){e.value=t==null?"":t},beforeUpdate(e,{value:t,oldValue:n,modifiers:{lazy:s,trim:r,number:i}},o){if(e[kr]=Do(o),e.composing)return;const a=(i||e.type==="number")&&!/^0\d/.test(e.value)?js(e.value):e.value,l=t==null?"":t;a!==l&&(document.activeElement===e&&e.type!=="range"&&(s&&t===n||r&&e.value.trim()===l)||(e.value=l))}},Qu=["ctrl","shift","alt","meta"],Ju={stop:e=>e.stopPropagation(),prevent:e=>e.preventDefault(),self:e=>e.target!==e.currentTarget,ctrl:e=>!e.ctrlKey,shift:e=>!e.shiftKey,alt:e=>!e.altKey,meta:e=>!e.metaKey,left:e=>"button"in e&&e.button!==0,middle:e=>"button"in e&&e.button!==1,right:e=>"button"in e&&e.button!==2,exact:(e,t)=>Qu.some(n=>e[`${n}Key`]&&!t.includes(n))},ct=(e,t)=>{const n=e._withMods||(e._withMods={}),s=t.join(".");return n[s]||(n[s]=(r,...i)=>{for(let o=0;o{const t=tc().createApp(...e),{mount:n}=t;return t.mount=s=>{const r=rc(s);if(!r)return;const i=t._component;!me(i)&&!i.render&&!i.template&&(i.template=r.innerHTML),r.nodeType===1&&(r.textContent="");const o=n(r,!1,sc(r));return r instanceof Element&&(r.removeAttribute("v-cloak"),r.setAttribute("data-v-app","")),o},t};function sc(e){if(e instanceof SVGElement)return"svg";if(typeof MathMLElement=="function"&&e instanceof MathMLElement)return"mathml"}function rc(e){return Ce(e)?document.querySelector(e):e}const ic=["aria-pressed"],oc={key:0,viewBox:"0 0 24 24",width:"20",height:"20","aria-hidden":"true"},lc={key:1,viewBox:"0 0 24 24",width:"18",height:"18","aria-hidden":"true",fill:"none"},ac={__name:"ChatbotToggler",props:{isOpen:{type:Boolean,required:!0}},emits:["toggle"],setup(e){return(t,n)=>(F(),j("button",{class:"fixed bottom-5 right-5 z-9999 grid h-12 w-12 appearance-none place-items-center rounded-full border border-white/20 bg-gradient-to-br from-brand-500 to-brand-600 text-white shadow-[0_20px_36px_-20px_rgba(109,79,194,0.85)] transition-all duration-250 hover:-translate-y-0.5 hover:from-brand-600 hover:to-violet-700 hover:shadow-[0_22px_40px_-22px_rgba(109,79,194,1)] focus:outline-none max-[600px]:bottom-3 max-[600px]:right-3 max-[600px]:h-13 max-[600px]:w-13",style:{"border-radius":"9999px"},"aria-pressed":e.isOpen?"true":"false",onClick:n[0]||(n[0]=s=>t.$emit("toggle"))},[e.isOpen?(F(),j("svg",lc,n[2]||(n[2]=[x("path",{d:"M6 6l12 12M18 6L6 18",stroke:"currentColor","stroke-width":"2","stroke-linecap":"round"},null,-1)]))):(F(),j("svg",oc,n[1]||(n[1]=[x("path",{d:"M4 4h16a2 2 0 0 1 2 2v9a2 2 0 0 1-2 2H8l-4 4v-4H4a2 2 0 0 1-2-2V6a2 2 0 0 1 2-2z",fill:"currentColor",stroke:"currentColor","stroke-width":"2","stroke-linecap":"miter","stroke-linejoin":"miter"},null,-1)])))],8,ic))}},uc={class:"chat-header relative flex min-h-14 items-center justify-between px-4 pb-2.5 pt-3 text-white sm:px-5"},cc={class:"flex min-w-0 flex-1 items-center gap-2 sm:gap-2.5"},fc={xmlns:"http://www.w3.org/2000/svg",width:"35",height:"35",viewBox:"0 0 1024 1024",class:"h-8 w-8 shrink-0 rounded-full bg-white p-1.5 shadow-md motion-safe:animate-soft-float",style:{fill:"#6d4fc2"}},dc={class:"ml-2 flex items-center gap-1.5"},pc=["title"],hc=["title","aria-label"],gc={key:0,viewBox:"0 0 24 24",width:"14",height:"14",fill:"none",stroke:"currentColor","stroke-width":"2","aria-hidden":"true"},mc={key:1,viewBox:"0 0 24 24",width:"14",height:"14",fill:"none",stroke:"currentColor","stroke-width":"2","aria-hidden":"true"},bc=["title","aria-label"],xc={key:0,xmlns:"http://www.w3.org/2000/svg",width:"16",height:"16",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"2","aria-hidden":"true"},yc={key:1,xmlns:"http://www.w3.org/2000/svg",width:"16",height:"16",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"2","aria-hidden":"true"},wc={key:2,xmlns:"http://www.w3.org/2000/svg",width:"16",height:"16",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"2","aria-hidden":"true"},vc={__name:"ChatHeader",props:{windowMode:{type:String,required:!0},autoReadEnabled:{type:Boolean,required:!0},activeTtsProvider:{type:String,required:!0}},emits:["close","cycleResize","toggleAutoRead"],setup(e){const t=e,n={default:"Compact",half:"Half Screen",full:"Full Screen"},s=Re(()=>n[t.windowMode]||"Compact"),r=Re(()=>t.windowMode==="default"?"Half Screen":t.windowMode==="half"?"Full Screen":"Compact"),i=Re(()=>t.activeTtsProvider==="polly"?"TTS: Polly":t.activeTtsProvider==="browser"?"TTS: Browser":"TTS: Off"),o=Re(()=>t.activeTtsProvider==="polly"?"bg-emerald-500/45":t.activeTtsProvider==="browser"?"bg-amber-500/45":"bg-slate-500/35");return(a,l)=>(F(),j("div",uc,[x("div",cc,[(F(),j("svg",fc,l[3]||(l[3]=[x("path",{d:"M738.3 287.6H285.7c-59 0-106.8 47.8-106.8 106.8v303.1c0 59 47.8 106.8 106.8 106.8h81.5v111.1c0 .7.8 1.1 1.4.7l166.9-110.6 41.8-.8h117.4l43.6-.4c59 0 106.8-47.8 106.8-106.8V394.5c0-59-47.8-106.9-106.8-106.9zM351.7 448.2c0-29.5 23.9-53.5 53.5-53.5s53.5 23.9 53.5 53.5-23.9 53.5-53.5 53.5-53.5-23.9-53.5-53.5zm157.9 267.1c-67.8 0-123.8-47.5-132.3-109h264.6c-8.6 61.5-64.5 109-132.3 109zm110-213.7c-29.5 0-53.5-23.9-53.5-53.5s23.9-53.5 53.5-53.5 53.5 23.9 53.5 53.5-23.9 53.5-53.5 53.5zM867.2 644.5V453.1h26.5c19.4 0 35.1 15.7 35.1 35.1v121.1c0 19.4-15.7 35.1-35.1 35.1h-26.5zM95.2 609.4V488.2c0-19.4 15.7-35.1 35.1-35.1h26.5v191.3h-26.5c-19.4 0-35.1-15.7-35.1-35.1zM561.5 149.6c0 23.4-15.6 43.3-36.9 49.7v44.9h-30v-44.9c-21.4-6.5-36.9-26.3-36.9-49.7 0-28.6 23.3-51.9 51.9-51.9s51.9 23.3 51.9 51.9z"},null,-1)]))),l[4]||(l[4]=x("h2",{class:"truncate text-xs font-semibold tracking-[0.01em] sm:text-base text-white/95"},"ChangAI from ERPGulf",-1))]),x("div",dc,[x("span",{class:ye(["hidden rounded-full border border-white/25 px-2 py-1 text-[10px] font-semibold uppercase tracking-wide text-white/95 shadow-sm backdrop-blur-sm sm:inline",o.value]),title:`TTS provider: ${i.value}`},Qe(i.value),11,pc),x("button",{class:ye(["h-8 min-w-8 appearance-none items-center justify-center rounded-md border border-white/20 px-2 text-xs font-semibold text-white/90 transition-all duration-200 focus:outline-none sm:flex",e.autoReadEnabled?"bg-white/24 shadow-sm":"hover:bg-white/15"]),style:{"border-radius":"0.375rem"},title:e.autoReadEnabled?"Auto speech on":"Auto speech off","aria-label":e.autoReadEnabled?"Turn off auto speech":"Turn on auto speech",onClick:l[0]||(l[0]=c=>a.$emit("toggleAutoRead"))},[e.autoReadEnabled?(F(),j("svg",gc,l[5]||(l[5]=[x("path",{d:"M11 5L6 9H3v6h3l5 4V5z"},null,-1),x("path",{d:"M15 9a4 4 0 0 1 0 6"},null,-1),x("path",{d:"M18 7a7 7 0 0 1 0 10"},null,-1)]))):(F(),j("svg",mc,l[6]||(l[6]=[x("path",{d:"M11 5L6 9H3v6h3l5 4V5z"},null,-1),x("path",{d:"M22 9l-6 6"},null,-1),x("path",{d:"M16 9l6 6"},null,-1)])))],10,hc),x("button",{class:ye(["flex h-8 min-w-8 appearance-none items-center justify-center rounded-md border border-white/20 px-2 text-xs font-semibold text-white/90 transition-all duration-200 focus:outline-none","bg-white/20 shadow-sm hover:bg-white/25"]),style:{"border-radius":"0.375rem"},title:`Resize mode: ${s.value} (click to ${r.value})`,"aria-label":`Resize mode ${s.value}. Click to switch to ${r.value}`,onClick:l[1]||(l[1]=c=>a.$emit("cycleResize"))},[e.windowMode==="default"?(F(),j("svg",xc,l[7]||(l[7]=[x("rect",{x:"7",y:"8",width:"10",height:"8",rx:"2"},null,-1)]))):e.windowMode==="half"?(F(),j("svg",yc,l[8]||(l[8]=[x("rect",{x:"4",y:"5",width:"16",height:"14",rx:"2"},null,-1),x("path",{d:"M12 5v14"},null,-1)]))):(F(),j("svg",wc,l[9]||(l[9]=[x("rect",{x:"4",y:"5",width:"16",height:"14",rx:"2"},null,-1),x("path",{d:"M8 8H6v2M16 8h2v2M8 16H6v-2M16 16h2v-2"},null,-1)])))],8,bc),x("button",{class:"grid h-8 w-8 shrink-0 appearance-none place-items-center rounded-full border border-white/20 text-white transition-all duration-200 hover:scale-105 hover:bg-white/20 focus:outline-none focus-visible:ring-2 focus-visible:ring-white/70",style:{"border-radius":"9999px"},"aria-label":"Close chatbot",onClick:l[2]||(l[2]=c=>a.$emit("close"))},l[10]||(l[10]=[x("svg",{xmlns:"http://www.w3.org/2000/svg",height:"24",width:"24",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"2"},[x("path",{d:"M6 9l6 6 6-6"})],-1)]))])]))}},_c={class:"flex gap-1.5 border-b border-slate-200/80 px-2.5 pb-2.5 pt-1"},kc=["onClick"],Tc={class:"inline-flex items-center gap-1.5"},Sc={__name:"TabBar",props:{modelValue:{type:String,required:!0},debugEnabled:{type:Boolean,default:!1}},emits:["update:modelValue"],setup(e){const t=e,n=Re(()=>{const s=[{id:"chat",label:"Chats"},{id:"debug",label:"Debug"},{id:"support",label:"Support"},{id:"settings",label:"Settings"}];return t.debugEnabled?s:s.filter(r=>r.id!=="debug")});return(s,r)=>(F(),j("div",_c,[(F(!0),j(Be,null,ys(n.value,i=>(F(),j("button",{key:i.id,class:ye(["group min-w-0 flex-1 h-9 appearance-none rounded-lg border border-transparent bg-transparent px-2 text-xs font-semibold transition-all duration-200 focus:outline-none",e.modelValue===i.id?"border-white/30 bg-linear-to-r from-violet-300/36 via-indigo-300/30 to-sky-300/28 text-white shadow-[0_4px_10px_rgba(20,24,40,0.22)]":"text-white/80 hover:border-white/25 hover:bg-white/12 hover:text-white"]),onClick:o=>s.$emit("update:modelValue",i.id)},[x("span",Tc,[x("span",{class:ye(["h-1.5 w-1.5 rounded-full transition-colors duration-200",e.modelValue===i.id?"bg-white":"bg-white/40 group-hover:bg-white/70"])},null,2),Ts(" "+Qe(i.label),1)])],10,kc))),128))]))}},Ec=(e,t)=>{const n=e.__vccOpts||e;for(const[s,r]of t)n[s]=r;return n},Ac={},Rc={xmlns:"http://www.w3.org/2000/svg",width:"50",height:"50",viewBox:"0 0 1024 1024",class:"h-7.5 w-7.5 shrink-0 self-end rounded-full bg-gradient-to-br from-brand-500 to-brand-600 p-1.5 fill-white shadow-[0_10px_18px_-12px_rgba(109,79,194,0.85)]"};function Cc(e,t){return F(),j("svg",Rc,t[0]||(t[0]=[x("path",{d:"M738.3 287.6H285.7c-59 0-106.8 47.8-106.8 106.8v303.1c0 59 47.8 106.8 106.8 106.8h81.5v111.1c0 .7.8 1.1 1.4.7l166.9-110.6 41.8-.8h117.4l43.6-.4c59 0 106.8-47.8 106.8-106.8V394.5c0-59-47.8-106.9-106.8-106.9zM351.7 448.2c0-29.5 23.9-53.5 53.5-53.5s53.5 23.9 53.5 53.5-23.9 53.5-53.5 53.5-53.5-23.9-53.5-53.5zm157.9 267.1c-67.8 0-123.8-47.5-132.3-109h264.6c-8.6 61.5-64.5 109-132.3 109zm110-213.7c-29.5 0-53.5-23.9-53.5-53.5s23.9-53.5 53.5-53.5 53.5 23.9 53.5 53.5-23.9 53.5-53.5 53.5zM867.2 644.5V453.1h26.5c19.4 0 35.1 15.7 35.1 35.1v121.1c0 19.4-15.7 35.1-35.1 35.1h-26.5zM95.2 609.4V488.2c0-19.4 15.7-35.1 35.1-35.1h26.5v191.3h-26.5c-19.4 0-35.1-15.7-35.1-35.1zM561.5 149.6c0 23.4-15.6 43.3-36.9 49.7v44.9h-30v-44.9c-21.4-6.5-36.9-26.3-36.9-49.7 0-28.6 23.3-51.9 51.9-51.9s51.9 23.3 51.9 51.9z"},null,-1)]))}const Bo=Ec(Ac,[["render",Cc]]),Rs={PIPELINE:"changai.changai.api.v2.text2sql_pipeline_v2.run_text2sql_pipeline",SUPPORT:"changai.changai.api.v2.text2sql_pipeline_v2.support_bot",SETTINGS:"changai.changai.api.v2.text2sql_pipeline_v2.get_frontend_settings",TTS:"changai.changai.api.v2.text2sql_pipeline_v2.synthesize_tts"};function Tr(e,t={},n="actual"){return n==="test"?Promise.resolve({Bot:`[TEST MODE] ${JSON.stringify(t)}`}):!window.frappe||!window.frappe.call?Promise.reject(new Error("Frappe API is unavailable in actual mode.")):new Promise((s,r)=>{window.frappe.call({method:e,args:t,callback(i){s(i.message)},error(i){r(i)}})})}function Pc(e,t,n="actual",s=null,r){if(n==="test")return{promise:Promise.resolve({Bot:`[TEST MODE] ${JSON.stringify({user_question:e,chat_id:t,request_id:s,sendNonErptoAI:r})}`}),cancel:()=>!1};if(!window.frappe||!window.frappe.call)return{promise:Promise.reject(new Error("Frappe API is unavailable in actual mode.")),cancel:()=>!1};let i=null,o=!1;return{promise:new Promise((c,u)=>{i=window.frappe.call({method:Rs.PIPELINE,args:{user_question:e,chat_id:t,request_id:s,sendNonErptoAI:r},callback(p){o=!0,c(p.message)},error(p){o=!0,u(p)}})}),cancel:()=>o||!i||typeof i.abort!="function"?!1:(i.abort(),o=!0,!0)}}function Ic(e,t="actual"){return Tr(Rs.SUPPORT,{message:e},t)}function Mc(e="actual"){return Tr(Rs.SETTINGS,{},e)}function Lc(e,t="Zayd",n="actual"){return Tr(Rs.TTS,{text:e,voice_id:t},n)}function Sr(){return{async:!1,breaks:!1,extensions:null,gfm:!0,hooks:null,pedantic:!1,renderer:null,silent:!1,tokenizer:null,walkTokens:null}}var un=Sr();function Ho(e){un=e}var cn={exec:()=>null};function ie(e,t=""){let n=typeof e=="string"?e:e.source,s={replace:(r,i)=>{let o=typeof i=="string"?i:i.source;return o=o.replace(qe.caret,"$1"),n=n.replace(r,o),s},getRegex:()=>new RegExp(n,t)};return s}var Oc=((e="")=>{try{return!!new RegExp("(?<=1)(?/,blockquoteSetextReplace:/\n {0,3}((?:=+|-+) *)(?=\n|$)/g,blockquoteSetextReplace2:/^ {0,3}>[ \t]?/gm,listReplaceNesting:/^ {1,4}(?=( {4})*[^ ])/g,listIsTask:/^\[[ xX]\] +\S/,listReplaceTask:/^\[[ xX]\] +/,listTaskCheckbox:/\[[ xX]\]/,anyLine:/\n.*\n/,hrefBrackets:/^<(.*)>$/,tableDelimiter:/[:|]/,tableAlignChars:/^\||\| *$/g,tableRowBlankLine:/\n[ \t]*$/,tableAlignRight:/^ *-+: *$/,tableAlignCenter:/^ *:-+: *$/,tableAlignLeft:/^ *:-+ *$/,startATag:/^/i,startPreScriptTag:/^<(pre|code|kbd|script)(\s|>)/i,endPreScriptTag:/^<\/(pre|code|kbd|script)(\s|>)/i,startAngleBracket:/^$/,pedanticHrefTitle:/^([^'"]*[^\s])\s+(['"])(.*)\2/,unicodeAlphaNumeric:/[\p{L}\p{N}]/u,escapeTest:/[&<>"']/,escapeReplace:/[&<>"']/g,escapeTestNoEncode:/[<>"']|&(?!(#\d{1,7}|#[Xx][a-fA-F0-9]{1,6}|\w+);)/,escapeReplaceNoEncode:/[<>"']|&(?!(#\d{1,7}|#[Xx][a-fA-F0-9]{1,6}|\w+);)/g,caret:/(^|[^\[])\^/g,percentDecode:/%25/g,findPipe:/\|/g,splitPipe:/ \|/,slashPipe:/\\\|/g,carriageReturn:/\r\n|\r/g,spaceLine:/^ +$/gm,notSpaceStart:/^\S*/,endingNewline:/\n$/,listItemRegex:e=>new RegExp(`^( {0,3}${e})((?:[ ][^\\n]*)?(?:\\n|$))`),nextBulletRegex:e=>new RegExp(`^ {0,${Math.min(3,e-1)}}(?:[*+-]|\\d{1,9}[.)])((?:[ ][^\\n]*)?(?:\\n|$))`),hrRegex:e=>new RegExp(`^ {0,${Math.min(3,e-1)}}((?:- *){3,}|(?:_ *){3,}|(?:\\* *){3,})(?:\\n+|$)`),fencesBeginRegex:e=>new RegExp(`^ {0,${Math.min(3,e-1)}}(?:\`\`\`|~~~)`),headingBeginRegex:e=>new RegExp(`^ {0,${Math.min(3,e-1)}}#`),htmlBeginRegex:e=>new RegExp(`^ {0,${Math.min(3,e-1)}}<(?:[a-z].*>|!--)`,"i"),blockquoteBeginRegex:e=>new RegExp(`^ {0,${Math.min(3,e-1)}}>`)},$c=/^(?:[ \t]*(?:\n|$))+/,Dc=/^((?: {4}| {0,3}\t)[^\n]+(?:\n(?:[ \t]*(?:\n|$))*)?)+/,Nc=/^ {0,3}(`{3,}(?=[^`\n]*(?:\n|$))|~{3,})([^\n]*)(?:\n|$)(?:|([\s\S]*?)(?:\n|$))(?: {0,3}\1[~`]* *(?=\n|$)|$)/,Gn=/^ {0,3}((?:-[\t ]*){3,}|(?:_[ \t]*){3,}|(?:\*[ \t]*){3,})(?:\n+|$)/,Fc=/^ {0,3}(#{1,6})(?=\s|$)(.*)(?:\n+|$)/,Er=/ {0,3}(?:[*+-]|\d{1,9}[.)])/,zo=/^(?!bull |blockCode|fences|blockquote|heading|html|table)((?:.|\n(?!\s*?\n|bull |blockCode|fences|blockquote|heading|html|table))+?)\n {0,3}(=+|-+) *(?:\n+|$)/,Uo=ie(zo).replace(/bull/g,Er).replace(/blockCode/g,/(?: {4}| {0,3}\t)/).replace(/fences/g,/ {0,3}(?:`{3,}|~{3,})/).replace(/blockquote/g,/ {0,3}>/).replace(/heading/g,/ {0,3}#{1,6}/).replace(/html/g,/ {0,3}<[^\n>]+>\n/).replace(/\|table/g,"").getRegex(),Bc=ie(zo).replace(/bull/g,Er).replace(/blockCode/g,/(?: {4}| {0,3}\t)/).replace(/fences/g,/ {0,3}(?:`{3,}|~{3,})/).replace(/blockquote/g,/ {0,3}>/).replace(/heading/g,/ {0,3}#{1,6}/).replace(/html/g,/ {0,3}<[^\n>]+>\n/).replace(/table/g,/ {0,3}\|?(?:[:\- ]*\|)+[\:\- ]*\n/).getRegex(),Ar=/^([^\n]+(?:\n(?!hr|heading|lheading|blockquote|fences|list|html|table| +\n)[^\n]+)*)/,Hc=/^[^\n]+/,Rr=/(?!\s*\])(?:\\[\s\S]|[^\[\]\\])+/,zc=ie(/^ {0,3}\[(label)\]: *(?:\n[ \t]*)?([^<\s][^\s]*|<.*?>)(?:(?: +(?:\n[ \t]*)?| *\n[ \t]*)(title))? *(?:\n+|$)/).replace("label",Rr).replace("title",/(?:"(?:\\"?|[^"\\])*"|'[^'\n]*(?:\n[^'\n]+)*\n?'|\([^()]*\))/).getRegex(),Uc=ie(/^(bull)([ \t][^\n]+?)?(?:\n|$)/).replace(/bull/g,Er).getRegex(),Cs="address|article|aside|base|basefont|blockquote|body|caption|center|col|colgroup|dd|details|dialog|dir|div|dl|dt|fieldset|figcaption|figure|footer|form|frame|frameset|h[1-6]|head|header|hr|html|iframe|legend|li|link|main|menu|menuitem|meta|nav|noframes|ol|optgroup|option|p|param|search|section|summary|table|tbody|td|tfoot|th|thead|title|tr|track|ul",Cr=/|$))/,jc=ie("^ {0,3}(?:<(script|pre|style|textarea)[\\s>][\\s\\S]*?(?:[^\\n]*\\n+|$)|comment[^\\n]*(\\n+|$)|<\\?[\\s\\S]*?(?:\\?>\\n*|$)|\\n*|$)|\\n*|$)|)[\\s\\S]*?(?:(?:\\n[ ]*)+\\n|$)|<(?!script|pre|style|textarea)([a-z][\\w-]*)(?:attribute)*? */?>(?=[ \\t]*(?:\\n|$))[\\s\\S]*?(?:(?:\\n[ ]*)+\\n|$)|(?=[ \\t]*(?:\\n|$))[\\s\\S]*?(?:(?:\\n[ ]*)+\\n|$))","i").replace("comment",Cr).replace("tag",Cs).replace("attribute",/ +[a-zA-Z:_][\w.:-]*(?: *= *"[^"\n]*"| *= *'[^'\n]*'| *= *[^\s"'=<>`]+)?/).getRegex(),jo=ie(Ar).replace("hr",Gn).replace("heading"," {0,3}#{1,6}(?:\\s|$)").replace("|lheading","").replace("|table","").replace("blockquote"," {0,3}>").replace("fences"," {0,3}(?:`{3,}(?=[^`\\n]*\\n)|~{3,})[^\\n]*\\n").replace("list"," {0,3}(?:[*+-]|1[.)])[ \\t]").replace("html",")|<(?:script|pre|style|textarea|!--)").replace("tag",Cs).getRegex(),Vc=ie(/^( {0,3}> ?(paragraph|[^\n]*)(?:\n|$))+/).replace("paragraph",jo).getRegex(),Pr={blockquote:Vc,code:Dc,def:zc,fences:Nc,heading:Fc,hr:Gn,html:jc,lheading:Uo,list:Uc,newline:$c,paragraph:jo,table:cn,text:Hc},Vo=ie("^ *([^\\n ].*)\\n {0,3}((?:\\| *)?:?-+:? *(?:\\| *:?-+:? *)*(?:\\| *)?)(?:\\n((?:(?! *\\n|hr|heading|blockquote|code|fences|list|html).*(?:\\n|$))*)\\n*|$)").replace("hr",Gn).replace("heading"," {0,3}#{1,6}(?:\\s|$)").replace("blockquote"," {0,3}>").replace("code","(?: {4}| {0,3} )[^\\n]").replace("fences"," {0,3}(?:`{3,}(?=[^`\\n]*\\n)|~{3,})[^\\n]*\\n").replace("list"," {0,3}(?:[*+-]|1[.)])[ \\t]").replace("html",")|<(?:script|pre|style|textarea|!--)").replace("tag",Cs).getRegex(),qc={...Pr,lheading:Bc,table:Vo,paragraph:ie(Ar).replace("hr",Gn).replace("heading"," {0,3}#{1,6}(?:\\s|$)").replace("|lheading","").replace("table",Vo).replace("blockquote"," {0,3}>").replace("fences"," {0,3}(?:`{3,}(?=[^`\\n]*\\n)|~{3,})[^\\n]*\\n").replace("list"," {0,3}(?:[*+-]|1[.)])[ \\t]").replace("html",")|<(?:script|pre|style|textarea|!--)").replace("tag",Cs).getRegex()},Wc={...Pr,html:ie(`^ *(?:comment *(?:\\n|\\s*$)|<(tag)[\\s\\S]+? *(?:\\n{2,}|\\s*$)|\\s]*)*?/?> *(?:\\n{2,}|\\s*$))`).replace("comment",Cr).replace(/tag/g,"(?!(?:a|em|strong|small|s|cite|q|dfn|abbr|data|time|code|var|samp|kbd|sub|sup|i|b|u|mark|ruby|rt|rp|bdi|bdo|span|br|wbr|ins|del|img)\\b)\\w+(?!:|[^\\w\\s@]*@)\\b").getRegex(),def:/^ *\[([^\]]+)\]: *]+)>?(?: +(["(][^\n]+[")]))? *(?:\n+|$)/,heading:/^(#{1,6})(.*)(?:\n+|$)/,fences:cn,lheading:/^(.+?)\n {0,3}(=+|-+) *(?:\n+|$)/,paragraph:ie(Ar).replace("hr",Gn).replace("heading",` *#{1,6} *[^ +]`).replace("lheading",Uo).replace("|table","").replace("blockquote"," {0,3}>").replace("|fences","").replace("|list","").replace("|html","").replace("|tag","").getRegex()},Gc=/^\\([!"#$%&'()*+,\-./:;<=>?@\[\]\\^_`{|}~])/,Kc=/^(`+)([^`]|[^`][\s\S]*?[^`])\1(?!`)/,qo=/^( {2,}|\\)\n(?!\s*$)/,Yc=/^(`+|[^`])(?:(?= {2,}\n)|[\s\S]*?(?:(?=[\\`+)[^`]+\k(?!`))*?\]\((?:\\[\s\S]|[^\\\(\)]|\((?:\\[\s\S]|[^\\\(\)])*\))*\)/).replace("precode-",Oc?"(?`+)[^`]+\k(?!`)/).replace("html",/<(?! )[^<>]*?>/).getRegex(),Go=/^(?:\*+(?:((?!\*)punct)|([^\s*]))?)|^_+(?:((?!_)punct)|([^\s_]))?/,ef=ie(Go,"u").replace(/punct/g,vn).getRegex(),tf=ie(Go,"u").replace(/punct/g,Wo).getRegex(),Ko="^[^_*]*?__[^_*]*?\\*[^_*]*?(?=__)|[^*]+(?=[^*])|(?!\\*)punct(\\*+)(?=[\\s]|$)|notPunctSpace(\\*+)(?!\\*)(?=punctSpace|$)|(?!\\*)punctSpace(\\*+)(?=notPunctSpace)|[\\s](\\*+)(?!\\*)(?=punct)|(?!\\*)punct(\\*+)(?!\\*)(?=punct)|notPunctSpace(\\*+)(?=notPunctSpace)",nf=ie(Ko,"gu").replace(/notPunctSpace/g,Ir).replace(/punctSpace/g,Ps).replace(/punct/g,vn).getRegex(),sf=ie(Ko,"gu").replace(/notPunctSpace/g,Qc).replace(/punctSpace/g,Xc).replace(/punct/g,Wo).getRegex(),rf=ie("^[^_*]*?\\*\\*[^_*]*?_[^_*]*?(?=\\*\\*)|[^_]+(?=[^_])|(?!_)punct(_+)(?=[\\s]|$)|notPunctSpace(_+)(?!_)(?=punctSpace|$)|(?!_)punctSpace(_+)(?=notPunctSpace)|[\\s](_+)(?!_)(?=punct)|(?!_)punct(_+)(?!_)(?=punct)","gu").replace(/notPunctSpace/g,Ir).replace(/punctSpace/g,Ps).replace(/punct/g,vn).getRegex(),of=ie(/^~~?(?:((?!~)punct)|[^\s~])/,"u").replace(/punct/g,vn).getRegex(),lf="^[^~]+(?=[^~])|(?!~)punct(~~?)(?=[\\s]|$)|notPunctSpace(~~?)(?!~)(?=punctSpace|$)|(?!~)punctSpace(~~?)(?=notPunctSpace)|[\\s](~~?)(?!~)(?=punct)|(?!~)punct(~~?)(?!~)(?=punct)|notPunctSpace(~~?)(?=notPunctSpace)",af=ie(lf,"gu").replace(/notPunctSpace/g,Ir).replace(/punctSpace/g,Ps).replace(/punct/g,vn).getRegex(),uf=ie(/\\(punct)/,"gu").replace(/punct/g,vn).getRegex(),cf=ie(/^<(scheme:[^\s\x00-\x1f<>]*|email)>/).replace("scheme",/[a-zA-Z][a-zA-Z0-9+.-]{1,31}/).replace("email",/[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+(@)[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)+(?![-_])/).getRegex(),ff=ie(Cr).replace("(?:-->|$)","-->").getRegex(),df=ie("^comment|^|^<[a-zA-Z][\\w-]*(?:attribute)*?\\s*/?>|^<\\?[\\s\\S]*?\\?>|^|^").replace("comment",ff).replace("attribute",/\s+[a-zA-Z:_][\w.:-]*(?:\s*=\s*"[^"]*"|\s*=\s*'[^']*'|\s*=\s*[^\s"'=<>`]+)?/).getRegex(),Is=/(?:\[(?:\\[\s\S]|[^\[\]\\])*\]|\\[\s\S]|`+(?!`)[^`]*?`+(?!`)|``+(?=\])|[^\[\]\\`])*?/,pf=ie(/^!?\[(label)\]\(\s*(href)(?:(?:[ \t]+(?:\n[ \t]*)?|\n[ \t]*)(title))?\s*\)/).replace("label",Is).replace("href",/<(?:\\.|[^\n<>\\])+>|[^ \t\n\x00-\x1f]*/).replace("title",/"(?:\\"?|[^"\\])*"|'(?:\\'?|[^'\\])*'|\((?:\\\)?|[^)\\])*\)/).getRegex(),Yo=ie(/^!?\[(label)\]\[(ref)\]/).replace("label",Is).replace("ref",Rr).getRegex(),Zo=ie(/^!?\[(ref)\](?:\[\])?/).replace("ref",Rr).getRegex(),hf=ie("reflink|nolink(?!\\()","g").replace("reflink",Yo).replace("nolink",Zo).getRegex(),Xo=/[hH][tT][tT][pP][sS]?|[fF][tT][pP]/,Mr={_backpedal:cn,anyPunctuation:uf,autolink:cf,blockSkip:Jc,br:qo,code:Kc,del:cn,delLDelim:cn,delRDelim:cn,emStrongLDelim:ef,emStrongRDelimAst:nf,emStrongRDelimUnd:rf,escape:Gc,link:pf,nolink:Zo,punctuation:Zc,reflink:Yo,reflinkSearch:hf,tag:df,text:Yc,url:cn},gf={...Mr,link:ie(/^!?\[(label)\]\((.*?)\)/).replace("label",Is).getRegex(),reflink:ie(/^!?\[(label)\]\s*\[([^\]]*)\]/).replace("label",Is).getRegex()},Lr={...Mr,emStrongRDelimAst:sf,emStrongLDelim:tf,delLDelim:of,delRDelim:af,url:ie(/^((?:protocol):\/\/|www\.)(?:[a-zA-Z0-9\-]+\.?)+[^\s<]*|^email/).replace("protocol",Xo).replace("email",/[A-Za-z0-9._+-]+(@)[a-zA-Z0-9-_]+(?:\.[a-zA-Z0-9-_]*[a-zA-Z0-9])+(?![-_])/).getRegex(),_backpedal:/(?:[^?!.,:;*_'"~()&]+|\([^)]*\)|&(?![a-zA-Z0-9]+;$)|[?!.,:;*_'"~)]+(?!$))+/,del:/^(~~?)(?=[^\s~])((?:\\[\s\S]|[^\\])*?(?:\\[\s\S]|[^\s~\\]))\1(?=[^~]|$)/,text:ie(/^([`~]+|[^`~])(?:(?= {2,}\n)|(?=[a-zA-Z0-9.!#$%&'*+\/=?_`{\|}~-]+@)|[\s\S]*?(?:(?=[\\":">",'"':""","'":"'"},Qo=e=>bf[e];function Rt(e,t){if(t){if(qe.escapeTest.test(e))return e.replace(qe.escapeReplace,Qo)}else if(qe.escapeTestNoEncode.test(e))return e.replace(qe.escapeReplaceNoEncode,Qo);return e}function Jo(e){try{e=encodeURI(e).replace(qe.percentDecode,"%")}catch{return null}return e}function el(e,t){var i;let n=e.replace(qe.findPipe,(o,a,l)=>{let c=!1,u=a;for(;--u>=0&&l[u]==="\\";)c=!c;return c?"|":" |"}),s=n.split(qe.splitPipe),r=0;if(s[0].trim()||s.shift(),s.length>0&&!((i=s.at(-1))!=null&&i.trim())&&s.pop(),t)if(s.length>t)s.splice(t);else for(;s.length=0&&qe.blankLine.test(t[n]);)n--;return t.length-n<=2?e:t.slice(0,n+1).join(` `)}function xf(e,t){if(e.indexOf(t[1])===-1)return-1;let n=0;for(let s=0;s0?-2:-1}function yf(e,t=0){let n=t,s="";for(let r of e)if(r===" "){let i=4-n%4;s+=" ".repeat(i),n+=i}else s+=r,n++;return s}function nl(e,t,n,s,r){let i=t.href,o=t.title||null,a=e[1].replace(r.other.outputLinkReplace,"$1");s.state.inLink=!0;let l={type:e[0].charAt(0)==="!"?"image":"link",raw:n,href:i,title:o,text:a,tokens:s.inlineTokens(a)};return s.state.inLink=!1,l}function wf(e,t,n){let s=e.match(n.other.indentCodeCompensation);if(s===null)return t;let r=s[1];return t.split(` `).map(i=>{let o=i.match(n.other.beginningSpace);if(o===null)return i;let[a]=o;return a.length>=r.length?i.slice(r.length):i}).join(` -`)}var Ms=class{constructor(e){we(this,"options");we(this,"rules");we(this,"lexer");this.options=e||un}space(e){let t=this.rules.block.newline.exec(e);if(t&&t[0].length>0)return{type:"space",raw:t[0]}}code(e){let t=this.rules.block.code.exec(e);if(t){let n=this.options.pedantic?t[0]:tl(t[0]),s=n.replace(this.rules.other.codeRemoveIndent,"");return{type:"code",raw:n,codeBlockStyle:"indented",text:s}}}fences(e){let t=this.rules.block.fences.exec(e);if(t){let n=t[0],s=wf(n,t[3]||"",this.rules);return{type:"code",raw:n,lang:t[2]?t[2].trim().replace(this.rules.inline.anyPunctuation,"$1"):t[2],text:s}}}heading(e){let t=this.rules.block.heading.exec(e);if(t){let n=t[2].trim();if(this.rules.other.endingHash.test(n)){let s=Xt(n,"#");(this.options.pedantic||!s||this.rules.other.endingSpaceChar.test(s))&&(n=s.trim())}return{type:"heading",raw:Xt(t[0],` +`)}var Ls=class{constructor(e){we(this,"options");we(this,"rules");we(this,"lexer");this.options=e||un}space(e){let t=this.rules.block.newline.exec(e);if(t&&t[0].length>0)return{type:"space",raw:t[0]}}code(e){let t=this.rules.block.code.exec(e);if(t){let n=this.options.pedantic?t[0]:tl(t[0]),s=n.replace(this.rules.other.codeRemoveIndent,"");return{type:"code",raw:n,codeBlockStyle:"indented",text:s}}}fences(e){let t=this.rules.block.fences.exec(e);if(t){let n=t[0],s=wf(n,t[3]||"",this.rules);return{type:"code",raw:n,lang:t[2]?t[2].trim().replace(this.rules.inline.anyPunctuation,"$1"):t[2],text:s}}}heading(e){let t=this.rules.block.heading.exec(e);if(t){let n=t[2].trim();if(this.rules.other.endingHash.test(n)){let s=Xt(n,"#");(this.options.pedantic||!s||this.rules.other.endingSpaceChar.test(s))&&(n=s.trim())}return{type:"heading",raw:Xt(t[0],` `),depth:t[1].length,text:n,tokens:this.lexer.inline(n)}}}hr(e){let t=this.rules.block.hr.exec(e);if(t)return{type:"hr",raw:Xt(t[0],` `)}}blockquote(e){let t=this.rules.block.blockquote.exec(e);if(t){let n=Xt(t[0],` `).split(` @@ -31,7 +31,7 @@ ${u}`:u;let p=this.lexer.state.top;if(this.lexer.state.top=!0,this.lexer.blockTo `):[],i={type:"table",raw:Xt(t[0],` `),header:[],align:[],rows:[]};if(n.length===s.length){for(let a of s)this.rules.other.tableAlignRight.test(a)?i.align.push("right"):this.rules.other.tableAlignCenter.test(a)?i.align.push("center"):this.rules.other.tableAlignLeft.test(a)?i.align.push("left"):i.align.push(null);for(let a=0;a({text:l,tokens:this.lexer.inline(l),header:!1,align:i.align[c]})));return i}}lheading(e){let t=this.rules.block.lheading.exec(e);if(t){let n=t[1].trim();return{type:"heading",raw:Xt(t[0],` `),depth:t[2].charAt(0)==="="?1:2,text:n,tokens:this.lexer.inline(n)}}}paragraph(e){let t=this.rules.block.paragraph.exec(e);if(t){let n=t[1].charAt(t[1].length-1)===` -`?t[1].slice(0,-1):t[1];return{type:"paragraph",raw:t[0],text:n,tokens:this.lexer.inline(n)}}}text(e){let t=this.rules.block.text.exec(e);if(t)return{type:"text",raw:t[0],text:t[0],tokens:this.lexer.inline(t[0])}}escape(e){let t=this.rules.inline.escape.exec(e);if(t)return{type:"escape",raw:t[0],text:t[1]}}tag(e){let t=this.rules.inline.tag.exec(e);if(t)return!this.lexer.state.inLink&&this.rules.other.startATag.test(t[0])?this.lexer.state.inLink=!0:this.lexer.state.inLink&&this.rules.other.endATag.test(t[0])&&(this.lexer.state.inLink=!1),!this.lexer.state.inRawBlock&&this.rules.other.startPreScriptTag.test(t[0])?this.lexer.state.inRawBlock=!0:this.lexer.state.inRawBlock&&this.rules.other.endPreScriptTag.test(t[0])&&(this.lexer.state.inRawBlock=!1),{type:"html",raw:t[0],inLink:this.lexer.state.inLink,inRawBlock:this.lexer.state.inRawBlock,block:!1,text:t[0]}}link(e){let t=this.rules.inline.link.exec(e);if(t){let n=t[2].trim();if(!this.options.pedantic&&this.rules.other.startAngleBracket.test(n)){if(!this.rules.other.endAngleBracket.test(n))return;let i=Xt(n.slice(0,-1),"\\");if((n.length-i.length)%2===0)return}else{let i=xf(t[2],"()");if(i===-2)return;if(i>-1){let o=(t[0].indexOf("!")===0?5:4)+t[1].length+i;t[2]=t[2].substring(0,i),t[0]=t[0].substring(0,o).trim(),t[3]=""}}let s=t[2],r="";if(this.options.pedantic){let i=this.rules.other.pedanticHrefTitle.exec(s);i&&(s=i[1],r=i[3])}else r=t[3]?t[3].slice(1,-1):"";return s=s.trim(),this.rules.other.startAngleBracket.test(s)&&(this.options.pedantic&&!this.rules.other.endAngleBracket.test(n)?s=s.slice(1):s=s.slice(1,-1)),nl(t,{href:s&&s.replace(this.rules.inline.anyPunctuation,"$1"),title:r&&r.replace(this.rules.inline.anyPunctuation,"$1")},t[0],this.lexer,this.rules)}}reflink(e,t){let n;if((n=this.rules.inline.reflink.exec(e))||(n=this.rules.inline.nolink.exec(e))){let s=(n[2]||n[1]).replace(this.rules.other.multipleSpaceGlobal," "),r=t[s.toLowerCase()];if(!r){let i=n[0].charAt(0);return{type:"text",raw:i,text:i}}return nl(n,r,n[0],this.lexer,this.rules)}}emStrong(e,t,n=""){let s=this.rules.inline.emStrongLDelim.exec(e);if(!(!s||!s[1]&&!s[2]&&!s[3]&&!s[4]||s[4]&&n.match(this.rules.other.unicodeAlphaNumeric))&&(!(s[1]||s[3])||!n||this.rules.inline.punctuation.exec(n))){let r=[...s[0]].length-1,i,o,a=r,l=0,c=s[0][0]==="*"?this.rules.inline.emStrongRDelimAst:this.rules.inline.emStrongRDelimUnd;for(c.lastIndex=0,t=t.slice(-1*e.length+r);(s=c.exec(t))!==null;){if(i=s[1]||s[2]||s[3]||s[4]||s[5]||s[6],!i)continue;if(o=[...i].length,s[3]||s[4]){a+=o;continue}else if((s[5]||s[6])&&r%3&&!((r+o)%3)){l+=o;continue}if(a-=o,a>0)continue;o=Math.min(o,o+a+l);let u=[...s[0]][0].length,p=e.slice(0,r+s.index+u+o);if(Math.min(r,o)%2){let w=p.slice(1,-1);return{type:"em",raw:p,text:w,tokens:this.lexer.inlineTokens(w)}}let g=p.slice(2,-2);return{type:"strong",raw:p,text:g,tokens:this.lexer.inlineTokens(g)}}}}codespan(e){let t=this.rules.inline.code.exec(e);if(t){let n=t[2].replace(this.rules.other.newLineCharGlobal," "),s=this.rules.other.nonSpaceChar.test(n),r=this.rules.other.startingSpaceChar.test(n)&&this.rules.other.endingSpaceChar.test(n);return s&&r&&(n=n.substring(1,n.length-1)),{type:"codespan",raw:t[0],text:n}}}br(e){let t=this.rules.inline.br.exec(e);if(t)return{type:"br",raw:t[0]}}del(e,t,n=""){let s=this.rules.inline.delLDelim.exec(e);if(s&&(!s[1]||!n||this.rules.inline.punctuation.exec(n))){let r=[...s[0]].length-1,i,o,a=r,l=this.rules.inline.delRDelim;for(l.lastIndex=0,t=t.slice(-1*e.length+r);(s=l.exec(t))!==null;){if(i=s[1]||s[2]||s[3]||s[4]||s[5]||s[6],!i||(o=[...i].length,o!==r))continue;if(s[3]||s[4]){a+=o;continue}if(a-=o,a>0)continue;o=Math.min(o,o+a);let c=[...s[0]][0].length,u=e.slice(0,r+s.index+c+o),p=u.slice(r,-r);return{type:"del",raw:u,text:p,tokens:this.lexer.inlineTokens(p)}}}}autolink(e){let t=this.rules.inline.autolink.exec(e);if(t){let n,s;return t[2]==="@"?(n=t[1],s="mailto:"+n):(n=t[1],s=n),{type:"link",raw:t[0],text:n,href:s,tokens:[{type:"text",raw:n,text:n}]}}}url(e){var n,s;let t;if(t=this.rules.inline.url.exec(e)){let r,i;if(t[2]==="@")r=t[0],i="mailto:"+r;else{let o;do o=t[0],t[0]=(s=(n=this.rules.inline._backpedal.exec(t[0]))==null?void 0:n[0])!=null?s:"";while(o!==t[0]);r=t[0],t[1]==="www."?i="http://"+t[0]:i=t[0]}return{type:"link",raw:t[0],text:r,href:i,tokens:[{type:"text",raw:r,text:r}]}}}inlineText(e){let t=this.rules.inline.text.exec(e);if(t){let n=this.lexer.state.inRawBlock;return{type:"text",raw:t[0],text:t[0],escaped:n}}}},mt=class Qr{constructor(t){we(this,"tokens");we(this,"options");we(this,"state");we(this,"inlineQueue");we(this,"tokenizer");this.tokens=[],this.tokens.links=Object.create(null),this.options=t||un,this.options.tokenizer=this.options.tokenizer||new Ms,this.tokenizer=this.options.tokenizer,this.tokenizer.options=this.options,this.tokenizer.lexer=this,this.inlineQueue=[],this.state={inLink:!1,inRawBlock:!1,top:!0};let n={other:qe,block:Is.normal,inline:Kn.normal};this.options.pedantic?(n.block=Is.pedantic,n.inline=Kn.pedantic):this.options.gfm&&(n.block=Is.gfm,this.options.breaks?n.inline=Kn.breaks:n.inline=Kn.gfm),this.tokenizer.rules=n}static get rules(){return{block:Is,inline:Kn}}static lex(t,n){return new Qr(n).lex(t)}static lexInline(t,n){return new Qr(n).inlineTokens(t)}lex(t){t=t.replace(qe.carriageReturn,` +`?t[1].slice(0,-1):t[1];return{type:"paragraph",raw:t[0],text:n,tokens:this.lexer.inline(n)}}}text(e){let t=this.rules.block.text.exec(e);if(t)return{type:"text",raw:t[0],text:t[0],tokens:this.lexer.inline(t[0])}}escape(e){let t=this.rules.inline.escape.exec(e);if(t)return{type:"escape",raw:t[0],text:t[1]}}tag(e){let t=this.rules.inline.tag.exec(e);if(t)return!this.lexer.state.inLink&&this.rules.other.startATag.test(t[0])?this.lexer.state.inLink=!0:this.lexer.state.inLink&&this.rules.other.endATag.test(t[0])&&(this.lexer.state.inLink=!1),!this.lexer.state.inRawBlock&&this.rules.other.startPreScriptTag.test(t[0])?this.lexer.state.inRawBlock=!0:this.lexer.state.inRawBlock&&this.rules.other.endPreScriptTag.test(t[0])&&(this.lexer.state.inRawBlock=!1),{type:"html",raw:t[0],inLink:this.lexer.state.inLink,inRawBlock:this.lexer.state.inRawBlock,block:!1,text:t[0]}}link(e){let t=this.rules.inline.link.exec(e);if(t){let n=t[2].trim();if(!this.options.pedantic&&this.rules.other.startAngleBracket.test(n)){if(!this.rules.other.endAngleBracket.test(n))return;let i=Xt(n.slice(0,-1),"\\");if((n.length-i.length)%2===0)return}else{let i=xf(t[2],"()");if(i===-2)return;if(i>-1){let o=(t[0].indexOf("!")===0?5:4)+t[1].length+i;t[2]=t[2].substring(0,i),t[0]=t[0].substring(0,o).trim(),t[3]=""}}let s=t[2],r="";if(this.options.pedantic){let i=this.rules.other.pedanticHrefTitle.exec(s);i&&(s=i[1],r=i[3])}else r=t[3]?t[3].slice(1,-1):"";return s=s.trim(),this.rules.other.startAngleBracket.test(s)&&(this.options.pedantic&&!this.rules.other.endAngleBracket.test(n)?s=s.slice(1):s=s.slice(1,-1)),nl(t,{href:s&&s.replace(this.rules.inline.anyPunctuation,"$1"),title:r&&r.replace(this.rules.inline.anyPunctuation,"$1")},t[0],this.lexer,this.rules)}}reflink(e,t){let n;if((n=this.rules.inline.reflink.exec(e))||(n=this.rules.inline.nolink.exec(e))){let s=(n[2]||n[1]).replace(this.rules.other.multipleSpaceGlobal," "),r=t[s.toLowerCase()];if(!r){let i=n[0].charAt(0);return{type:"text",raw:i,text:i}}return nl(n,r,n[0],this.lexer,this.rules)}}emStrong(e,t,n=""){let s=this.rules.inline.emStrongLDelim.exec(e);if(!(!s||!s[1]&&!s[2]&&!s[3]&&!s[4]||s[4]&&n.match(this.rules.other.unicodeAlphaNumeric))&&(!(s[1]||s[3])||!n||this.rules.inline.punctuation.exec(n))){let r=[...s[0]].length-1,i,o,a=r,l=0,c=s[0][0]==="*"?this.rules.inline.emStrongRDelimAst:this.rules.inline.emStrongRDelimUnd;for(c.lastIndex=0,t=t.slice(-1*e.length+r);(s=c.exec(t))!==null;){if(i=s[1]||s[2]||s[3]||s[4]||s[5]||s[6],!i)continue;if(o=[...i].length,s[3]||s[4]){a+=o;continue}else if((s[5]||s[6])&&r%3&&!((r+o)%3)){l+=o;continue}if(a-=o,a>0)continue;o=Math.min(o,o+a+l);let u=[...s[0]][0].length,p=e.slice(0,r+s.index+u+o);if(Math.min(r,o)%2){let w=p.slice(1,-1);return{type:"em",raw:p,text:w,tokens:this.lexer.inlineTokens(w)}}let g=p.slice(2,-2);return{type:"strong",raw:p,text:g,tokens:this.lexer.inlineTokens(g)}}}}codespan(e){let t=this.rules.inline.code.exec(e);if(t){let n=t[2].replace(this.rules.other.newLineCharGlobal," "),s=this.rules.other.nonSpaceChar.test(n),r=this.rules.other.startingSpaceChar.test(n)&&this.rules.other.endingSpaceChar.test(n);return s&&r&&(n=n.substring(1,n.length-1)),{type:"codespan",raw:t[0],text:n}}}br(e){let t=this.rules.inline.br.exec(e);if(t)return{type:"br",raw:t[0]}}del(e,t,n=""){let s=this.rules.inline.delLDelim.exec(e);if(s&&(!s[1]||!n||this.rules.inline.punctuation.exec(n))){let r=[...s[0]].length-1,i,o,a=r,l=this.rules.inline.delRDelim;for(l.lastIndex=0,t=t.slice(-1*e.length+r);(s=l.exec(t))!==null;){if(i=s[1]||s[2]||s[3]||s[4]||s[5]||s[6],!i||(o=[...i].length,o!==r))continue;if(s[3]||s[4]){a+=o;continue}if(a-=o,a>0)continue;o=Math.min(o,o+a);let c=[...s[0]][0].length,u=e.slice(0,r+s.index+c+o),p=u.slice(r,-r);return{type:"del",raw:u,text:p,tokens:this.lexer.inlineTokens(p)}}}}autolink(e){let t=this.rules.inline.autolink.exec(e);if(t){let n,s;return t[2]==="@"?(n=t[1],s="mailto:"+n):(n=t[1],s=n),{type:"link",raw:t[0],text:n,href:s,tokens:[{type:"text",raw:n,text:n}]}}}url(e){var n,s;let t;if(t=this.rules.inline.url.exec(e)){let r,i;if(t[2]==="@")r=t[0],i="mailto:"+r;else{let o;do o=t[0],t[0]=(s=(n=this.rules.inline._backpedal.exec(t[0]))==null?void 0:n[0])!=null?s:"";while(o!==t[0]);r=t[0],t[1]==="www."?i="http://"+t[0]:i=t[0]}return{type:"link",raw:t[0],text:r,href:i,tokens:[{type:"text",raw:r,text:r}]}}}inlineText(e){let t=this.rules.inline.text.exec(e);if(t){let n=this.lexer.state.inRawBlock;return{type:"text",raw:t[0],text:t[0],escaped:n}}}},mt=class Qr{constructor(t){we(this,"tokens");we(this,"options");we(this,"state");we(this,"inlineQueue");we(this,"tokenizer");this.tokens=[],this.tokens.links=Object.create(null),this.options=t||un,this.options.tokenizer=this.options.tokenizer||new Ls,this.tokenizer=this.options.tokenizer,this.tokenizer.options=this.options,this.tokenizer.lexer=this,this.inlineQueue=[],this.state={inLink:!1,inRawBlock:!1,top:!0};let n={other:qe,block:Ms.normal,inline:Kn.normal};this.options.pedantic?(n.block=Ms.pedantic,n.inline=Kn.pedantic):this.options.gfm&&(n.block=Ms.gfm,this.options.breaks?n.inline=Kn.breaks:n.inline=Kn.gfm),this.tokenizer.rules=n}static get rules(){return{block:Ms,inline:Kn}}static lex(t,n){return new Qr(n).lex(t)}static lexInline(t,n){return new Qr(n).inlineTokens(t)}lex(t){t=t.replace(qe.carriageReturn,` `),this.blockTokens(t,this.tokens);for(let n=0;n(l=u.call({lexer:this},t,n))?(t=t.substring(l.raw.length),n.push(l),!0):!1))continue;if(l=this.tokenizer.space(t)){t=t.substring(l.raw.length);let u=n.at(-1);l.raw.length===1&&u!==void 0?u.raw+=` `:n.push(l);continue}if(l=this.tokenizer.code(t)){t=t.substring(l.raw.length);let u=n.at(-1);(u==null?void 0:u.type)==="paragraph"||(u==null?void 0:u.type)==="text"?(u.raw+=(u.raw.endsWith(` `)?"":` @@ -45,7 +45,7 @@ ${u}`:u;let p=this.lexer.state.top;if(this.lexer.state.top=!0,this.lexer.blockTo `+l.text,this.inlineQueue.pop(),this.inlineQueue.at(-1).src=u.text):n.push(l),s=c.length!==t.length,t=t.substring(l.raw.length);continue}if(l=this.tokenizer.text(t)){t=t.substring(l.raw.length);let u=n.at(-1);(u==null?void 0:u.type)==="text"?(u.raw+=(u.raw.endsWith(` `)?"":` `)+l.raw,u.text+=` -`+l.text,this.inlineQueue.pop(),this.inlineQueue.at(-1).src=u.text):n.push(l);continue}if(t){this.infiniteLoopError(t.charCodeAt(0));break}}return this.state.top=!0,n}inline(t,n=[]){return this.inlineQueue.push({src:t,tokens:n}),n}inlineTokens(t,n=[]){var c,u,p,g,w,E;this.tokenizer.lexer=this;let s=t,r=null;if(this.tokens.links){let m=Object.keys(this.tokens.links);if(m.length>0)for(;(r=this.tokenizer.rules.inline.reflinkSearch.exec(s))!==null;)m.includes(r[0].slice(r[0].lastIndexOf("[")+1,-1))&&(s=s.slice(0,r.index)+"["+"a".repeat(r[0].length-2)+"]"+s.slice(this.tokenizer.rules.inline.reflinkSearch.lastIndex))}for(;(r=this.tokenizer.rules.inline.anyPunctuation.exec(s))!==null;)s=s.slice(0,r.index)+"++"+s.slice(this.tokenizer.rules.inline.anyPunctuation.lastIndex);let i;for(;(r=this.tokenizer.rules.inline.blockSkip.exec(s))!==null;)i=r[2]?r[2].length:0,s=s.slice(0,r.index+i)+"["+"a".repeat(r[0].length-i-2)+"]"+s.slice(this.tokenizer.rules.inline.blockSkip.lastIndex);s=(p=(u=(c=this.options.hooks)==null?void 0:c.emStrongMask)==null?void 0:u.call({lexer:this},s))!=null?p:s;let o=!1,a="",l=1/0;for(;t;){if(t.length(m=S.call({lexer:this},t,n))?(t=t.substring(m.raw.length),n.push(m),!0):!1))continue;if(m=this.tokenizer.escape(t)){t=t.substring(m.raw.length),n.push(m);continue}if(m=this.tokenizer.tag(t)){t=t.substring(m.raw.length),n.push(m);continue}if(m=this.tokenizer.link(t)){t=t.substring(m.raw.length),n.push(m);continue}if(m=this.tokenizer.reflink(t,this.tokens.links)){t=t.substring(m.raw.length);let S=n.at(-1);m.type==="text"&&(S==null?void 0:S.type)==="text"?(S.raw+=m.raw,S.text+=m.text):n.push(m);continue}if(m=this.tokenizer.emStrong(t,s,a)){t=t.substring(m.raw.length),n.push(m);continue}if(m=this.tokenizer.codespan(t)){t=t.substring(m.raw.length),n.push(m);continue}if(m=this.tokenizer.br(t)){t=t.substring(m.raw.length),n.push(m);continue}if(m=this.tokenizer.del(t,s,a)){t=t.substring(m.raw.length),n.push(m);continue}if(m=this.tokenizer.autolink(t)){t=t.substring(m.raw.length),n.push(m);continue}if(!this.state.inLink&&(m=this.tokenizer.url(t))){t=t.substring(m.raw.length),n.push(m);continue}let R=t;if((E=this.options.extensions)!=null&&E.startInline){let S=1/0,V=t.slice(1),K;this.options.extensions.startInline.forEach(O=>{K=O.call({lexer:this},V),typeof K=="number"&&K>=0&&(S=Math.min(S,K))}),S<1/0&&S>=0&&(R=t.substring(0,S+1))}if(m=this.tokenizer.inlineText(R)){t=t.substring(m.raw.length),m.raw.slice(-1)!=="_"&&(a=m.raw.slice(-1)),o=!0;let S=n.at(-1);(S==null?void 0:S.type)==="text"?(S.raw+=m.raw,S.text+=m.text):n.push(m);continue}if(t){this.infiniteLoopError(t.charCodeAt(0));break}}return n}infiniteLoopError(t){let n="Infinite loop on byte: "+t;if(!this.options.silent)throw new Error(n)}},Ls=class{constructor(e){we(this,"options");we(this,"parser");this.options=e||un}space(e){return""}code({text:e,lang:t,escaped:n}){var i;let s=(i=(t||"").match(qe.notSpaceStart))==null?void 0:i[0],r=e.replace(qe.endingNewline,"")+` +`+l.text,this.inlineQueue.pop(),this.inlineQueue.at(-1).src=u.text):n.push(l);continue}if(t){this.infiniteLoopError(t.charCodeAt(0));break}}return this.state.top=!0,n}inline(t,n=[]){return this.inlineQueue.push({src:t,tokens:n}),n}inlineTokens(t,n=[]){var c,u,p,g,w,E;this.tokenizer.lexer=this;let s=t,r=null;if(this.tokens.links){let m=Object.keys(this.tokens.links);if(m.length>0)for(;(r=this.tokenizer.rules.inline.reflinkSearch.exec(s))!==null;)m.includes(r[0].slice(r[0].lastIndexOf("[")+1,-1))&&(s=s.slice(0,r.index)+"["+"a".repeat(r[0].length-2)+"]"+s.slice(this.tokenizer.rules.inline.reflinkSearch.lastIndex))}for(;(r=this.tokenizer.rules.inline.anyPunctuation.exec(s))!==null;)s=s.slice(0,r.index)+"++"+s.slice(this.tokenizer.rules.inline.anyPunctuation.lastIndex);let i;for(;(r=this.tokenizer.rules.inline.blockSkip.exec(s))!==null;)i=r[2]?r[2].length:0,s=s.slice(0,r.index+i)+"["+"a".repeat(r[0].length-i-2)+"]"+s.slice(this.tokenizer.rules.inline.blockSkip.lastIndex);s=(p=(u=(c=this.options.hooks)==null?void 0:c.emStrongMask)==null?void 0:u.call({lexer:this},s))!=null?p:s;let o=!1,a="",l=1/0;for(;t;){if(t.length(m=S.call({lexer:this},t,n))?(t=t.substring(m.raw.length),n.push(m),!0):!1))continue;if(m=this.tokenizer.escape(t)){t=t.substring(m.raw.length),n.push(m);continue}if(m=this.tokenizer.tag(t)){t=t.substring(m.raw.length),n.push(m);continue}if(m=this.tokenizer.link(t)){t=t.substring(m.raw.length),n.push(m);continue}if(m=this.tokenizer.reflink(t,this.tokens.links)){t=t.substring(m.raw.length);let S=n.at(-1);m.type==="text"&&(S==null?void 0:S.type)==="text"?(S.raw+=m.raw,S.text+=m.text):n.push(m);continue}if(m=this.tokenizer.emStrong(t,s,a)){t=t.substring(m.raw.length),n.push(m);continue}if(m=this.tokenizer.codespan(t)){t=t.substring(m.raw.length),n.push(m);continue}if(m=this.tokenizer.br(t)){t=t.substring(m.raw.length),n.push(m);continue}if(m=this.tokenizer.del(t,s,a)){t=t.substring(m.raw.length),n.push(m);continue}if(m=this.tokenizer.autolink(t)){t=t.substring(m.raw.length),n.push(m);continue}if(!this.state.inLink&&(m=this.tokenizer.url(t))){t=t.substring(m.raw.length),n.push(m);continue}let R=t;if((E=this.options.extensions)!=null&&E.startInline){let S=1/0,V=t.slice(1),K;this.options.extensions.startInline.forEach(O=>{K=O.call({lexer:this},V),typeof K=="number"&&K>=0&&(S=Math.min(S,K))}),S<1/0&&S>=0&&(R=t.substring(0,S+1))}if(m=this.tokenizer.inlineText(R)){t=t.substring(m.raw.length),m.raw.slice(-1)!=="_"&&(a=m.raw.slice(-1)),o=!0;let S=n.at(-1);(S==null?void 0:S.type)==="text"?(S.raw+=m.raw,S.text+=m.text):n.push(m);continue}if(t){this.infiniteLoopError(t.charCodeAt(0));break}}return n}infiniteLoopError(t){let n="Infinite loop on byte: "+t;if(!this.options.silent)throw new Error(n)}},Os=class{constructor(e){we(this,"options");we(this,"parser");this.options=e||un}space(e){return""}code({text:e,lang:t,escaped:n}){var i;let s=(i=(t||"").match(qe.notSpaceStart))==null?void 0:i[0],r=e.replace(qe.endingNewline,"")+` `;return s?'
'+(n?r:Rt(r,!0))+`
`:"
"+(n?r:Rt(r,!0))+`
`}blockquote({tokens:e}){return`
@@ -63,7 +63,7 @@ ${this.parser.parse(e)}
`}tablerow({text:e}){return` ${e} `}tablecell(e){let t=this.parser.parseInline(e.tokens),n=e.header?"th":"td";return(e.align?`<${n} align="${e.align}">`:`<${n}>`)+t+` -`}strong({tokens:e}){return`${this.parser.parseInline(e)}`}em({tokens:e}){return`${this.parser.parseInline(e)}`}codespan({text:e}){return`${Rt(e,!0)}`}br(e){return"
"}del({tokens:e}){return`${this.parser.parseInline(e)}`}link({href:e,title:t,tokens:n}){let s=this.parser.parseInline(n),r=Jo(e);if(r===null)return s;e=r;let i='
",i}image({href:e,title:t,text:n,tokens:s}){s&&(n=this.parser.parseInline(s,this.parser.textRenderer));let r=Jo(e);if(r===null)return Rt(n);e=r;let i=`${Rt(n)}{let l=o[a].flat(1/0);n=n.concat(this.walkTokens(l,t))}):o.tokens&&(n=n.concat(this.walkTokens(o.tokens,t)))}}return n}use(...e){let t=this.defaults.extensions||{renderers:{},childTokens:{}};return e.forEach(n=>{let s={...n};if(s.async=this.defaults.async||s.async||!1,n.extensions&&(n.extensions.forEach(r=>{if(!r.name)throw new Error("extension name required");if("renderer"in r){let i=t.renderers[r.name];i?t.renderers[r.name]=function(...o){let a=r.renderer.apply(this,o);return a===!1&&(a=i.apply(this,o)),a}:t.renderers[r.name]=r.renderer}if("tokenizer"in r){if(!r.level||r.level!=="block"&&r.level!=="inline")throw new Error("extension level must be 'block' or 'inline'");let i=t[r.level];i?i.unshift(r.tokenizer):t[r.level]=[r.tokenizer],r.start&&(r.level==="block"?t.startBlock?t.startBlock.push(r.start):t.startBlock=[r.start]:r.level==="inline"&&(t.startInline?t.startInline.push(r.start):t.startInline=[r.start]))}"childTokens"in r&&r.childTokens&&(t.childTokens[r.name]=r.childTokens)}),s.extensions=t),n.renderer){let r=this.defaults.renderer||new Ls(this.defaults);for(let i in n.renderer){if(!(i in r))throw new Error(`renderer '${i}' does not exist`);if(["options","parser"].includes(i))continue;let o=i,a=n.renderer[o],l=r[o];r[o]=(...c)=>{let u=a.apply(r,c);return u===!1&&(u=l.apply(r,c)),u||""}}s.renderer=r}if(n.tokenizer){let r=this.defaults.tokenizer||new Ms(this.defaults);for(let i in n.tokenizer){if(!(i in r))throw new Error(`tokenizer '${i}' does not exist`);if(["options","rules","lexer"].includes(i))continue;let o=i,a=n.tokenizer[o],l=r[o];r[o]=(...c)=>{let u=a.apply(r,c);return u===!1&&(u=l.apply(r,c)),u}}s.tokenizer=r}if(n.hooks){let r=this.defaults.hooks||new Yn;for(let i in n.hooks){if(!(i in r))throw new Error(`hook '${i}' does not exist`);if(["options","block"].includes(i))continue;let o=i,a=n.hooks[o],l=r[o];Yn.passThroughHooks.has(i)?r[o]=c=>{if(this.defaults.async&&Yn.passThroughHooksRespectAsync.has(i))return(async()=>{let p=await a.call(r,c);return l.call(r,p)})();let u=a.call(r,c);return l.call(r,u)}:r[o]=(...c)=>{if(this.defaults.async)return(async()=>{let p=await a.apply(r,c);return p===!1&&(p=await l.apply(r,c)),p})();let u=a.apply(r,c);return u===!1&&(u=l.apply(r,c)),u}}s.hooks=r}if(n.walkTokens){let r=this.defaults.walkTokens,i=n.walkTokens;s.walkTokens=function(o){let a=[];return a.push(i.call(this,o)),r&&(a=a.concat(r.call(this,o))),a}}this.defaults={...this.defaults,...s}}),this}setOptions(e){return this.defaults={...this.defaults,...e},this}lexer(e,t){return mt.lex(e,t!=null?t:this.defaults)}parser(e,t){return bt.parse(e,t!=null?t:this.defaults)}parseMarkdown(e){return(t,n)=>{let s={...n},r={...this.defaults,...s},i=this.onError(!!r.silent,!!r.async);if(this.defaults.async===!0&&s.async===!1)return i(new Error("marked(): The async option was set to true by an extension. Remove async: false from the parse options object to return a Promise."));if(typeof t>"u"||t===null)return i(new Error("marked(): input parameter is undefined or null"));if(typeof t!="string")return i(new Error("marked(): input parameter is of type "+Object.prototype.toString.call(t)+", string expected"));if(r.hooks&&(r.hooks.options=r,r.hooks.block=e),r.async)return(async()=>{let o=r.hooks?await r.hooks.preprocess(t):t,a=await(r.hooks?await r.hooks.provideLexer(e):e?mt.lex:mt.lexInline)(o,r),l=r.hooks?await r.hooks.processAllTokens(a):a;r.walkTokens&&await Promise.all(this.walkTokens(l,r.walkTokens));let c=await(r.hooks?await r.hooks.provideParser(e):e?bt.parse:bt.parseInline)(l,r);return r.hooks?await r.hooks.postprocess(c):c})().catch(i);try{r.hooks&&(t=r.hooks.preprocess(t));let o=(r.hooks?r.hooks.provideLexer(e):e?mt.lex:mt.lexInline)(t,r);r.hooks&&(o=r.hooks.processAllTokens(o)),r.walkTokens&&this.walkTokens(o,r.walkTokens);let a=(r.hooks?r.hooks.provideParser(e):e?bt.parse:bt.parseInline)(o,r);return r.hooks&&(a=r.hooks.postprocess(a)),a}catch(o){return i(o)}}}onError(e,t){return n=>{if(n.message+=` -Please report this to https://github.com/markedjs/marked.`,e){let s="

An error occurred:

"+Rt(n.message+"",!0)+"
";return t?Promise.resolve(s):s}if(t)return Promise.reject(n);throw n}}},fn=new vf;function be(e,t){return fn.parse(e,t)}be.options=be.setOptions=function(e){return fn.setOptions(e),be.defaults=fn.defaults,Ho(be.defaults),be},be.getDefaults=Sr,be.defaults=un,be.use=function(...e){return fn.use(...e),be.defaults=fn.defaults,Ho(be.defaults),be},be.walkTokens=function(e,t){return fn.walkTokens(e,t)},be.parseInline=fn.parseInline,be.Parser=bt,be.parser=bt.parse,be.Renderer=Ls,be.TextRenderer=Or,be.Lexer=mt,be.lexer=mt.lex,be.Tokenizer=Ms,be.Hooks=Yn,be.parse=be,be.options,be.setOptions,be.use,be.walkTokens,be.parseInline,bt.parse,mt.lex;function sl(e,t){(t==null||t>e.length)&&(t=e.length);for(var n=0,s=Array(t);n2?s-2:0),i=2;i1?n-1:0),r=1;r1?n-1:0),r=1;r2&&arguments[2]!==void 0?arguments[2]:Zn;if(il&&il(e,null),!Ze(t))return e;let s=t.length;for(;s--;){let r=t[s];if(typeof r=="string"){const i=n(r);i!==r&&(Af(t)||(t[s]=i),r=i)}e[r]=!0}return e}function Df(e){for(let t=0;t/g),jf=ft(/\${[\w\W]*/g),Vf=ft(/^data-[\-\w.\u00B7-\uFFFF]+$/),qf=ft(/^aria-[\-\w]+$/),ml=ft(/^(?:(?:(?:f|ht)tps?|mailto|tel|callto|sms|cid|xmpp|matrix):|[^a-z]|[a-z+.\-]+(?:[^a-z+.\-:]|$))/i),Wf=ft(/^(?:\w+script|data):/i),Gf=ft(/[\u0000-\u0020\u00A0\u1680\u180E\u2000-\u2029\u205F\u3000]/g),Kf=ft(/^html$/i),Yf=ft(/^[a-z][.\w]*(-[.\w]+)+$/i),An={element:1,text:3,progressingInstruction:7,comment:8,document:9},Zf=function(){return typeof window=="undefined"?null:window},Xf=function(t,n){if(typeof t!="object"||typeof t.createPolicy!="function")return null;let s=null;const r="data-tt-policy-suffix";n&&n.hasAttribute(r)&&(s=n.getAttribute(r));const i="dompurify"+(s?"#"+s:"");try{return t.createPolicy(i,{createHTML(o){return o},createScriptURL(o){return o}})}catch{return null}},bl=function(){return{afterSanitizeAttributes:[],afterSanitizeElements:[],afterSanitizeShadowDOM:[],beforeSanitizeAttributes:[],beforeSanitizeElements:[],beforeSanitizeShadowDOM:[],uponSanitizeAttribute:[],uponSanitizeElement:[],uponSanitizeShadowNode:[]}};function xl(){let e=arguments.length>0&&arguments[0]!==void 0?arguments[0]:Zf();const t=U=>xl(U);if(t.version="3.4.3",t.removed=[],!e||!e.document||e.document.nodeType!==An.document||!e.Element)return t.isSupported=!1,t;let n=e.document;const s=n,r=s.currentScript,i=e.DocumentFragment,o=e.HTMLTemplateElement,a=e.Node,l=e.Element,c=e.NodeFilter,u=e.NamedNodeMap,p=u===void 0?e.NamedNodeMap||e.MozNamedAttrMap:u,g=e.HTMLFormElement,w=e.DOMParser,E=e.trustedTypes,m=l.prototype,R=En(m,"cloneNode"),S=En(m,"remove"),V=En(m,"nextSibling"),K=En(m,"childNodes"),O=En(m,"parentNode");if(typeof o=="function"){const U=n.createElement("template");U.content&&U.content.ownerDocument&&(n=U.content.ownerDocument)}let A,C="";const J=n,te=J.implementation,W=J.createNodeIterator,ne=J.createDocumentFragment,xe=J.getElementsByTagName,$=s.importNode;let Y=bl();t.isSupported=typeof rl=="function"&&typeof O=="function"&&te&&te.createHTMLDocument!==void 0;const G=zf,z=Uf,ue=jf,Se=Vf,We=qf,xt=Wf,ce=Gf,N=Yf;let de=ml,pe=null;const Te=Z({},[...dl,...Fr,...Br,...Hr,...pl]);let ve=null;const ge=Z({},[...hl,...zr,...gl,...$s]);let le=Object.seal(_n(null,{tagNameCheck:{writable:!0,configurable:!1,enumerable:!0,value:null},attributeNameCheck:{writable:!0,configurable:!1,enumerable:!0,value:null},allowCustomizedBuiltInElements:{writable:!0,configurable:!1,enumerable:!0,value:!1}})),yt=null,Ct=null;const ze=Object.seal(_n(null,{tagCheck:{writable:!0,configurable:!1,enumerable:!0,value:null},attributeCheck:{writable:!0,configurable:!1,enumerable:!0,value:null}}));let Ur=!0,f=!0,h=!1,b=!0,T=!1,v=!0,_=!1,M=!1,I=!1,P=!1,k=!1,B=!1,L=!0,H=!1;const q="user-content-";let ee=!0,fe=!1,se={},ke=null;const Oe=Z({},["annotation-xml","audio","colgroup","desc","foreignobject","head","iframe","math","mi","mn","mo","ms","mtext","noembed","noframes","noscript","plaintext","script","style","svg","template","thead","title","video","xmp"]);let rt=null;const it=Z({},["audio","video","img","source","image","track"]);let Ft=null;const Qn=Z({},["alt","class","for","id","label","name","pattern","placeholder","role","summary","title","value","style","xmlns"]),$e="http://www.w3.org/1998/Math/MathML",Xe="http://www.w3.org/2000/svg",ot="http://www.w3.org/1999/xhtml";let Bt=ot,jr=!1,Vr=null;const hp=Z({},[$e,Xe,ot],Nr);let qr=Z({},["mi","mo","mn","ms","mtext"]),Wr=Z({},["annotation-xml"]);const gp=Z({},["title","style","font","a","script"]);let Jn=null;const mp=["application/xhtml+xml","text/html"],bp="text/html";let Le=null,Rn=null;const xp=n.createElement("form"),Sl=function(d){return d instanceof RegExp||d instanceof Function},Gr=function(){let d=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{};if(Rn&&Rn===d)return;(!d||typeof d!="object")&&(d={}),d=et(d),Jn=mp.indexOf(d.PARSER_MEDIA_TYPE)===-1?bp:d.PARSER_MEDIA_TYPE,Le=Jn==="application/xhtml+xml"?Nr:Zn,pe=Ee(d,"ALLOWED_TAGS")&&Ze(d.ALLOWED_TAGS)?Z({},d.ALLOWED_TAGS,Le):Te,ve=Ee(d,"ALLOWED_ATTR")&&Ze(d.ALLOWED_ATTR)?Z({},d.ALLOWED_ATTR,Le):ge,Vr=Ee(d,"ALLOWED_NAMESPACES")&&Ze(d.ALLOWED_NAMESPACES)?Z({},d.ALLOWED_NAMESPACES,Nr):hp,Ft=Ee(d,"ADD_URI_SAFE_ATTR")&&Ze(d.ADD_URI_SAFE_ATTR)?Z(et(Qn),d.ADD_URI_SAFE_ATTR,Le):Qn,rt=Ee(d,"ADD_DATA_URI_TAGS")&&Ze(d.ADD_DATA_URI_TAGS)?Z(et(it),d.ADD_DATA_URI_TAGS,Le):it,ke=Ee(d,"FORBID_CONTENTS")&&Ze(d.FORBID_CONTENTS)?Z({},d.FORBID_CONTENTS,Le):Oe,yt=Ee(d,"FORBID_TAGS")&&Ze(d.FORBID_TAGS)?Z({},d.FORBID_TAGS,Le):et({}),Ct=Ee(d,"FORBID_ATTR")&&Ze(d.FORBID_ATTR)?Z({},d.FORBID_ATTR,Le):et({}),se=Ee(d,"USE_PROFILES")?d.USE_PROFILES&&typeof d.USE_PROFILES=="object"?et(d.USE_PROFILES):d.USE_PROFILES:!1,Ur=d.ALLOW_ARIA_ATTR!==!1,f=d.ALLOW_DATA_ATTR!==!1,h=d.ALLOW_UNKNOWN_PROTOCOLS||!1,b=d.ALLOW_SELF_CLOSE_IN_ATTR!==!1,T=d.SAFE_FOR_TEMPLATES||!1,v=d.SAFE_FOR_XML!==!1,_=d.WHOLE_DOCUMENT||!1,P=d.RETURN_DOM||!1,k=d.RETURN_DOM_FRAGMENT||!1,B=d.RETURN_TRUSTED_TYPE||!1,I=d.FORCE_BODY||!1,L=d.SANITIZE_DOM!==!1,H=d.SANITIZE_NAMED_PROPS||!1,ee=d.KEEP_CONTENT!==!1,fe=d.IN_PLACE||!1,de=Ff(d.ALLOWED_URI_REGEXP)?d.ALLOWED_URI_REGEXP:ml,Bt=typeof d.NAMESPACE=="string"?d.NAMESPACE:ot,qr=Ee(d,"MATHML_TEXT_INTEGRATION_POINTS")&&d.MATHML_TEXT_INTEGRATION_POINTS&&typeof d.MATHML_TEXT_INTEGRATION_POINTS=="object"?et(d.MATHML_TEXT_INTEGRATION_POINTS):Z({},["mi","mo","mn","ms","mtext"]),Wr=Ee(d,"HTML_INTEGRATION_POINTS")&&d.HTML_INTEGRATION_POINTS&&typeof d.HTML_INTEGRATION_POINTS=="object"?et(d.HTML_INTEGRATION_POINTS):Z({},["annotation-xml"]);const y=Ee(d,"CUSTOM_ELEMENT_HANDLING")&&d.CUSTOM_ELEMENT_HANDLING&&typeof d.CUSTOM_ELEMENT_HANDLING=="object"?et(d.CUSTOM_ELEMENT_HANDLING):_n(null);if(le=_n(null),Ee(y,"tagNameCheck")&&Sl(y.tagNameCheck)&&(le.tagNameCheck=y.tagNameCheck),Ee(y,"attributeNameCheck")&&Sl(y.attributeNameCheck)&&(le.attributeNameCheck=y.attributeNameCheck),Ee(y,"allowCustomizedBuiltInElements")&&typeof y.allowCustomizedBuiltInElements=="boolean"&&(le.allowCustomizedBuiltInElements=y.allowCustomizedBuiltInElements),T&&(f=!1),k&&(P=!0),se&&(pe=Z({},pl),ve=_n(null),se.html===!0&&(Z(pe,dl),Z(ve,hl)),se.svg===!0&&(Z(pe,Fr),Z(ve,zr),Z(ve,$s)),se.svgFilters===!0&&(Z(pe,Br),Z(ve,zr),Z(ve,$s)),se.mathMl===!0&&(Z(pe,Hr),Z(ve,gl),Z(ve,$s))),ze.tagCheck=null,ze.attributeCheck=null,Ee(d,"ADD_TAGS")&&(typeof d.ADD_TAGS=="function"?ze.tagCheck=d.ADD_TAGS:Ze(d.ADD_TAGS)&&(pe===Te&&(pe=et(pe)),Z(pe,d.ADD_TAGS,Le))),Ee(d,"ADD_ATTR")&&(typeof d.ADD_ATTR=="function"?ze.attributeCheck=d.ADD_ATTR:Ze(d.ADD_ATTR)&&(ve===ge&&(ve=et(ve)),Z(ve,d.ADD_ATTR,Le))),Ee(d,"ADD_URI_SAFE_ATTR")&&Ze(d.ADD_URI_SAFE_ATTR)&&Z(Ft,d.ADD_URI_SAFE_ATTR,Le),Ee(d,"FORBID_CONTENTS")&&Ze(d.FORBID_CONTENTS)&&(ke===Oe&&(ke=et(ke)),Z(ke,d.FORBID_CONTENTS,Le)),Ee(d,"ADD_FORBID_CONTENTS")&&Ze(d.ADD_FORBID_CONTENTS)&&(ke===Oe&&(ke=et(ke)),Z(ke,d.ADD_FORBID_CONTENTS,Le)),ee&&(pe["#text"]=!0),_&&Z(pe,["html","head","body"]),pe.table&&(Z(pe,["tbody"]),delete yt.tbody),d.TRUSTED_TYPES_POLICY){if(typeof d.TRUSTED_TYPES_POLICY.createHTML!="function")throw Os('TRUSTED_TYPES_POLICY configuration option must provide a "createHTML" hook.');if(typeof d.TRUSTED_TYPES_POLICY.createScriptURL!="function")throw Os('TRUSTED_TYPES_POLICY configuration option must provide a "createScriptURL" hook.');A=d.TRUSTED_TYPES_POLICY,C=A.createHTML("")}else A===void 0&&(A=Xf(E,r)),A!==null&&typeof C=="string"&&(C=A.createHTML(""));Ye&&Ye(d),Rn=d},El=Z({},[...Fr,...Br,...Bf]),Al=Z({},[...Hr,...Hf]),yp=function(d){let y=O(d);(!y||!y.tagName)&&(y={namespaceURI:Bt,tagName:"template"});const D=Zn(d.tagName),ae=Zn(y.tagName);return Vr[d.namespaceURI]?d.namespaceURI===Xe?y.namespaceURI===ot?D==="svg":y.namespaceURI===$e?D==="svg"&&(ae==="annotation-xml"||qr[ae]):!!El[D]:d.namespaceURI===$e?y.namespaceURI===ot?D==="math":y.namespaceURI===Xe?D==="math"&&Wr[ae]:!!Al[D]:d.namespaceURI===ot?y.namespaceURI===Xe&&!Wr[ae]||y.namespaceURI===$e&&!qr[ae]?!1:!Al[D]&&(gp[D]||!El[D]):!!(Jn==="application/xhtml+xml"&&Vr[d.namespaceURI]):!1},wt=function(d){kn(t.removed,{element:d});try{O(d).removeChild(d)}catch{S(d)}},dn=function(d,y){try{kn(t.removed,{attribute:y.getAttributeNode(d),from:y})}catch{kn(t.removed,{attribute:null,from:y})}if(y.removeAttribute(d),d==="is")if(P||k)try{wt(y)}catch{}else try{y.setAttribute(d,"")}catch{}},Rl=function(d){let y=null,D=null;if(I)d=""+d;else{const Ie=al(d,/^[\r\n\t ]+/);D=Ie&&Ie[0]}Jn==="application/xhtml+xml"&&Bt===ot&&(d=''+d+"");const ae=A?A.createHTML(d):d;if(Bt===ot)try{y=new w().parseFromString(ae,Jn)}catch{}if(!y||!y.documentElement){y=te.createDocument(Bt,"template",null);try{y.documentElement.innerHTML=jr?C:ae}catch{}}const De=y.body||y.documentElement;return d&&D&&De.insertBefore(n.createTextNode(D),De.childNodes[0]||null),Bt===ot?xe.call(y,_?"html":"body")[0]:_?y.documentElement:De},Cl=function(d){return W.call(d.ownerDocument||d,d,c.SHOW_ELEMENT|c.SHOW_COMMENT|c.SHOW_TEXT|c.SHOW_PROCESSING_INSTRUCTION|c.SHOW_CDATA_SECTION,null)},Kr=function(d){return d instanceof g&&(typeof d.nodeName!="string"||typeof d.textContent!="string"||typeof d.removeChild!="function"||!(d.attributes instanceof p)||typeof d.removeAttribute!="function"||typeof d.setAttribute!="function"||typeof d.namespaceURI!="string"||typeof d.insertBefore!="function"||typeof d.hasChildNodes!="function")},Yr=function(d){return typeof a=="function"&&d instanceof a};function Ht(U,d,y){Tn(U,D=>{D.call(t,d,y,Rn)})}const Pl=function(d){let y=null;if(Ht(Y.beforeSanitizeElements,d,null),Kr(d))return wt(d),!0;const D=Le(d.nodeName);if(Ht(Y.uponSanitizeElement,d,{tagName:D,allowedTags:pe}),v&&d.hasChildNodes()&&!Yr(d.firstElementChild)&&He(/<[/\w!]/g,d.innerHTML)&&He(/<[/\w!]/g,d.textContent)||v&&d.namespaceURI===ot&&D==="style"&&Yr(d.firstElementChild)||d.nodeType===An.progressingInstruction||v&&d.nodeType===An.comment&&He(/<[/\w]/g,d.data))return wt(d),!0;if(yt[D]||!(ze.tagCheck instanceof Function&&ze.tagCheck(D))&&!pe[D]){if(!yt[D]&&Ml(D)&&(le.tagNameCheck instanceof RegExp&&He(le.tagNameCheck,D)||le.tagNameCheck instanceof Function&&le.tagNameCheck(D)))return!1;if(ee&&!ke[D]){const ae=O(d)||d.parentNode,De=K(d)||d.childNodes;if(De&&ae){const Ie=De.length;for(let tt=Ie-1;tt>=0;--tt){const dt=R(De[tt],!0);ae.insertBefore(dt,V(d))}}}return wt(d),!0}return d instanceof l&&!yp(d)||(D==="noscript"||D==="noembed"||D==="noframes")&&He(/<\/no(script|embed|frames)/i,d.innerHTML)?(wt(d),!0):(T&&d.nodeType===An.text&&(y=d.textContent,Tn([G,z,ue],ae=>{y=Sn(y,ae," ")}),d.textContent!==y&&(kn(t.removed,{element:d.cloneNode()}),d.textContent=y)),Ht(Y.afterSanitizeElements,d,null),!1)},Il=function(d,y,D){if(Ct[y]||L&&(y==="id"||y==="name")&&(D in n||D in xp))return!1;const ae=ve[y]||ze.attributeCheck instanceof Function&&ze.attributeCheck(y,d);if(!(f&&!Ct[y]&&He(Se,y))){if(!(Ur&&He(We,y))){if(!ae||Ct[y]){if(!(Ml(d)&&(le.tagNameCheck instanceof RegExp&&He(le.tagNameCheck,d)||le.tagNameCheck instanceof Function&&le.tagNameCheck(d))&&(le.attributeNameCheck instanceof RegExp&&He(le.attributeNameCheck,y)||le.attributeNameCheck instanceof Function&&le.attributeNameCheck(y,d))||y==="is"&&le.allowCustomizedBuiltInElements&&(le.tagNameCheck instanceof RegExp&&He(le.tagNameCheck,D)||le.tagNameCheck instanceof Function&&le.tagNameCheck(D))))return!1}else if(!Ft[y]){if(!He(de,Sn(D,ce,""))){if(!((y==="src"||y==="xlink:href"||y==="href")&&d!=="script"&&ul(D,"data:")===0&&rt[d])){if(!(h&&!He(xt,Sn(D,ce,"")))){if(D)return!1}}}}}}return!0},wp=Z({},["annotation-xml","color-profile","font-face","font-face-format","font-face-name","font-face-src","font-face-uri","missing-glyph"]),Ml=function(d){return!wp[Zn(d)]&&He(N,d)},Ll=function(d){Ht(Y.beforeSanitizeAttributes,d,null);const y=d.attributes;if(!y||Kr(d))return;const D={attrName:"",attrValue:"",keepAttr:!0,allowedAttributes:ve,forceKeepAttr:void 0};let ae=y.length;for(;ae--;){const De=y[ae],Ie=De.name,tt=De.namespaceURI,dt=De.value,vt=Le(Ie),Xr=dt;let Ne=Ie==="value"?Xr:Mf(Xr);if(D.attrName=vt,D.attrValue=Ne,D.keepAttr=!0,D.forceKeepAttr=void 0,Ht(Y.uponSanitizeAttribute,d,D),Ne=D.attrValue,H&&(vt==="id"||vt==="name")&&ul(Ne,q)!==0&&(dn(Ie,d),Ne=q+Ne),v&&He(/((--!?|])>)|<\/(style|script|title|xmp|textarea|noscript|iframe|noembed|noframes)/i,Ne)){dn(Ie,d);continue}if(vt==="attributename"&&al(Ne,"href")){dn(Ie,d);continue}if(D.forceKeepAttr)continue;if(!D.keepAttr){dn(Ie,d);continue}if(!b&&He(/\/>/i,Ne)){dn(Ie,d);continue}T&&Tn([G,z,ue],$l=>{Ne=Sn(Ne,$l," ")});const Ol=Le(d.nodeName);if(!Il(Ol,vt,Ne)){dn(Ie,d);continue}if(A&&typeof E=="object"&&typeof E.getAttributeType=="function"&&!tt)switch(E.getAttributeType(Ol,vt)){case"TrustedHTML":{Ne=A.createHTML(Ne);break}case"TrustedScriptURL":{Ne=A.createScriptURL(Ne);break}}if(Ne!==Xr)try{tt?d.setAttributeNS(tt,Ie,Ne):d.setAttribute(Ie,Ne),Kr(d)?wt(d):ll(t.removed)}catch{dn(Ie,d)}}Ht(Y.afterSanitizeAttributes,d,null)},Zr=function(d){let y=null;const D=Cl(d);for(Ht(Y.beforeSanitizeShadowDOM,d,null);y=D.nextNode();)Ht(Y.uponSanitizeShadowNode,y,null),Pl(y),Ll(y),y.content instanceof i&&Zr(y.content);Ht(Y.afterSanitizeShadowDOM,d,null)},Ns=function(d){if(d.nodeType===An.element&&d.shadowRoot instanceof i){const ae=d.shadowRoot;Ns(ae),Zr(ae)}const y=d.childNodes;if(!y)return;const D=[];Tn(y,ae=>{kn(D,ae)});for(const ae of D)Ns(ae)};return t.sanitize=function(U){let d=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{},y=null,D=null,ae=null,De=null;if(jr=!U,jr&&(U=""),typeof U!="string"&&!Yr(U)&&(U=Nf(U),typeof U!="string"))throw Os("dirty is not a string, aborting");if(!t.isSupported)return U;if(M||Gr(d),t.removed=[],typeof U=="string"&&(fe=!1),fe){const dt=U.nodeName;if(typeof dt=="string"){const vt=Le(dt);if(!pe[vt]||yt[vt])throw Os("root node is forbidden and cannot be sanitized in-place")}Ns(U)}else if(U instanceof a)y=Rl(""),D=y.ownerDocument.importNode(U,!0),D.nodeType===An.element&&D.nodeName==="BODY"||D.nodeName==="HTML"?y=D:y.appendChild(D),Ns(D);else{if(!P&&!T&&!_&&U.indexOf("<")===-1)return A&&B?A.createHTML(U):U;if(y=Rl(U),!y)return P?null:B?C:""}y&&I&&wt(y.firstChild);const Ie=Cl(fe?U:y);for(;ae=Ie.nextNode();)Pl(ae),Ll(ae),ae.content instanceof i&&Zr(ae.content);if(fe)return U;if(P){if(T){y.normalize();let dt=y.innerHTML;Tn([G,z,ue],vt=>{dt=Sn(dt,vt," ")}),y.innerHTML=dt}if(k)for(De=ne.call(y.ownerDocument);y.firstChild;)De.appendChild(y.firstChild);else De=y;return(ve.shadowroot||ve.shadowrootmode)&&(De=$.call(s,De,!0)),De}let tt=_?y.outerHTML:y.innerHTML;return _&&pe["!doctype"]&&y.ownerDocument&&y.ownerDocument.doctype&&y.ownerDocument.doctype.name&&He(Kf,y.ownerDocument.doctype.name)&&(tt=" -`+tt),T&&Tn([G,z,ue],dt=>{tt=Sn(tt,dt," ")}),A&&B?A.createHTML(tt):tt},t.setConfig=function(){let U=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{};Gr(U),M=!0},t.clearConfig=function(){Rn=null,M=!1},t.isValidAttribute=function(U,d,y){Rn||Gr({});const D=Le(U),ae=Le(d);return Il(D,ae,y)},t.addHook=function(U,d){typeof d=="function"&&kn(Y[U],d)},t.removeHook=function(U,d){if(d!==void 0){const y=Pf(Y[U],d);return y===-1?void 0:If(Y[U],y,1)[0]}return ll(Y[U])},t.removeHooks=function(U){Y[U]=[]},t.removeAllHooks=function(){Y=bl()},t}var Qf=xl();const Jf={key:1,class:"flex min-w-0 max-w-[calc(100%-2.5rem)] flex-1 flex-col max-[600px]:max-w-[calc(100%-2.25rem)]"},ed={key:0,class:"flex w-fit flex-col items-start gap-1"},td=["aria-label"],nd={class:"inline-flex items-center gap-1.5"},sd={class:"text-[8px] font-semibold tracking-[0.12em] uppercase text-[#3a67c9]"},rd={key:1,class:"flex w-fit max-w-full flex-col items-start gap-2"},id={class:"chat-card relative w-fit max-w-full whitespace-pre-line rounded-[10px_10px_10px_3px] px-4 py-3 text-xs leading-relaxed wrap-anywhere text-slate-900"},od=["innerHTML"],ld={key:0,class:"pointer-events-none absolute inset-x-0 bottom-0 h-14 rounded-b-[10px] bg-linear-to-t from-white via-white/92 to-white/0","aria-hidden":"true"},ad={key:0,class:"flex flex-wrap items-center gap-2"},ud=["title","aria-label"],cd={key:1,class:"flex flex-wrap items-center"},fd=["title","aria-label"],dd={viewBox:"0 0 24 24",width:"14",height:"14",fill:"none",stroke:"currentColor","stroke-width":"2","aria-hidden":"true"},pd=["innerHTML"],yl={__name:"ChatMessage",props:{message:{type:Object,required:!0},autoReadEnabled:{type:Boolean,default:!1},ttsConfig:{type:Object,default:()=>({enableVoiceChat:!1,pollyAvailable:!1,usePolly:!0,voiceId:"Zayd"})}},setup(e){const t=e,n=Q(!1),s=Q(null),r=Q(!1),i=Q(!1),o=Re(()=>typeof window!="undefined"&&"speechSynthesis"in window&&"SpeechSynthesisUtterance"in window);function a(A){typeof window!="undefined"&&window.dispatchEvent(new CustomEvent("changai-tts-provider",{detail:{provider:A}}))}function l(A){if(typeof A!="string")return"";const C=A.replace(/[\u{1F000}-\u{1FFFF}]/gu,"").replace(/[\u{2600}-\u{26FF}]/gu,"").replace(/[\u{2700}-\u{27BF}]/gu,"").replace(/\*\*(.*?)\*\*/g,"$1").replace(/\*(.*?)\*/g,"$1").replace(/`([^`]+)`/g,"$1").replace(/#{1,6}\s+/g,"").replace(/[-*+]\s+/g,"").replace(/\[([^\]]+)\]\([^)]+\)/g,"$1").replace(/\s+/g," ");return C.includes("<")?(new DOMParser().parseFromString(A,"text/html").body.textContent||"").replace(/\s+/g," ").trim():C.trim()}function c(){o.value&&window.speechSynthesis.cancel(),s.value&&(s.value.pause(),s.value.src="",s.value=null),n.value=!1}function u(){var A,C,J;if(i.value=!i.value,i.value)c();else{const te=m.value;if(!t.autoReadEnabled||!((A=t.ttsConfig)!=null&&A.enableVoiceChat)||!te||E())return;if((C=t.ttsConfig)!=null&&C.pollyAvailable&&((J=t.ttsConfig)!=null&&J.usePolly)){g(te).catch(W=>{p(te)});return}p(te)}}function p(A){if(!o.value||!A)return;window.dispatchEvent(new CustomEvent("changai-tts-stop")),window.speechSynthesis.cancel();const C=new SpeechSynthesisUtterance(A);C.rate=1,C.pitch=1,C.onend=()=>{n.value=!1},C.onerror=()=>{n.value=!1},n.value=!0,a("browser"),window.speechSynthesis.speak(C)}async function g(A){var ne;const C=await Lc(A,((ne=t.ttsConfig)==null?void 0:ne.voiceId)||"Zayd");if(!(C!=null&&C.ok)||!(C!=null&&C.audio_base64))throw new Error((C==null?void 0:C.error)||"Polly synthesis failed");window.dispatchEvent(new CustomEvent("changai-tts-stop")),c();const J=(C==null?void 0:C.mime_type)||"audio/mpeg",te=new Audio(`data:${J};base64,${C.audio_base64}`);s.value=te,n.value=!0;let W=!1;te.onplay=()=>{W=!0,a("polly")},te.onended=()=>{s.value===te&&(s.value=null),n.value=!1},te.onerror=()=>{s.value===te&&(s.value=null),n.value=!1},await te.play(),W||a("polly")}function w(){c()}function E(){var A;return!!((A=t.message)!=null&&A.isStatus)}const m=Re(()=>{var A;return l(((A=t.message)==null?void 0:A.text)||"")}),R=Re(()=>{var A;return((A=t.message)==null?void 0:A.role)!=="user"&&E()}),S=Re(()=>{var A;return(A=t.message)!=null&&A.isStatus?t.message.statusType==="support"?"Sending to support":m.value||"Thinking":""}),V=Re(()=>{var J;if(((J=t.message)==null?void 0:J.role)==="user"||R.value)return!1;const A=m.value,C=A.split(/\n+/).filter(Boolean).length;return A.length>520||C>8}),K=Re(()=>{var A,C;return((A=t.message)==null?void 0:A.role)!=="user"&&!R.value&&((C=t.ttsConfig)==null?void 0:C.enableVoiceChat)}),O=Re(()=>{var C;const A=((C=t.message)==null?void 0:C.text)||"";return Qf.sanitize(be.parse(A))});return rn(()=>t.message.text,async(A,C)=>{var W,ne,xe;if(!t.autoReadEnabled||t.message.role==="user"||i.value)return;if(!((W=t.ttsConfig)!=null&&W.enableVoiceChat)){a("off");return}const J=l(A);if(!J||E())return;const te=l(C||"");if(J!==te){if((ne=t.ttsConfig)!=null&&ne.pollyAvailable&&((xe=t.ttsConfig)!=null&&xe.usePolly))try{await g(J);return}catch{}p(J)}}),rn(()=>t.message.text,()=>{r.value=!1,i.value=!1}),Hn(()=>{typeof window!="undefined"&&window.addEventListener("changai-tts-stop",w)}),xs(()=>{typeof window!="undefined"&&window.removeEventListener("changai-tts-stop",w),n.value&&c()}),(A,C)=>(F(),j("div",{class:ye(["motion-safe:animate-fade-rise flex w-full gap-1.5",e.message.role==="user"?"flex-col items-end":"items-start"])},[e.message.role!=="user"?(F(),St(Bo,{key:0})):Ve("",!0),e.message.role!=="user"?(F(),j("div",Jf,[R.value?(F(),j("div",ed,[x("div",{class:"chat-card inline-flex w-fit rounded-[10px_10px_10px_3px] px-3 py-2",role:"status","aria-live":"polite","aria-label":S.value},[x("div",nd,[C[1]||(C[1]=x("span",{class:"relative inline-flex h-4 w-4 shrink-0 items-center justify-center"},[x("span",{class:"absolute inset-0 rounded-full border border-transparent border-t-[#4b89ff] border-r-[#4b89ff]/70 animate-gemini-arc"}),x("svg",{viewBox:"0 0 24 24",class:"relative h-3 w-3 text-[#4b89ff] animate-gemini-spark","aria-hidden":"true"},[x("path",{fill:"currentColor",d:"M12 2.8c.52 3.22 1.6 5.66 3.22 7.28 1.62 1.62 4.06 2.7 7.28 3.22-3.22.52-5.66 1.6-7.28 3.22-1.62 1.62-2.7 4.06-3.22 7.28-.52-3.22-1.6-5.66-3.22-7.28-1.62-1.62-4.06-2.7-7.28-3.22 3.22-.52 5.66-1.6 7.28-3.22 1.62-1.62 2.7-4.06 3.22-7.28Z"})])],-1)),x("span",sd,Qe(S.value),1)])],8,td)])):(F(),j("div",rd,[x("div",id,[x("div",{class:ye(["overflow-x-auto",V.value&&!r.value?"max-h-48 overflow-y-hidden":""]),innerHTML:O.value},null,10,od),V.value&&!r.value?(F(),j("div",ld)):Ve("",!0)]),V.value?(F(),j("div",ad,[x("button",{type:"button",class:"inline-flex items-center rounded-full border border-slate-200 bg-white px-2.5 py-1 text-[10px] font-semibold uppercase tracking-[0.08em] text-slate-600 transition-colors duration-200 hover:border-brand-200 hover:text-brand-600",title:r.value?"Collapse response":"Expand response","aria-label":r.value?"Collapse response":"Expand response",onClick:C[0]||(C[0]=J=>r.value=!r.value)},Qe(r.value?"Collapse":"Expand"),9,ud)])):Ve("",!0),K.value?(F(),j("div",cd,[x("button",{type:"button",class:ye(["inline-flex h-8 w-8 items-center justify-center rounded-full border transition-colors duration-200",i.value?"border-red-200 bg-red-50 text-red-600 hover:border-red-300 hover:bg-red-100":"border-green-200 bg-green-50 text-green-600 hover:border-green-300 hover:bg-green-100"]),title:i.value?"Unmute voice playback":"Mute voice playback","aria-label":i.value?"Unmute voice playback":"Mute voice playback",onClick:u},[(F(),j("svg",dd,[C[6]||(C[6]=x("path",{d:"M11 5L6 9H3v6h3l5 4V5Z"},null,-1)),i.value?(F(),j(Be,{key:0},[C[2]||(C[2]=x("path",{d:"M15 9l4 6"},null,-1)),C[3]||(C[3]=x("path",{d:"M19 9l-4 6"},null,-1))],64)):(F(),j(Be,{key:1},[C[4]||(C[4]=x("path",{d:"M15 10a3 3 0 0 1 0 4"},null,-1)),C[5]||(C[5]=x("path",{d:"M17.5 7.5a6 6 0 0 1 0 9"},null,-1))],64))]))],10,fd)])):Ve("",!0)]))])):(F(),j("div",{key:2,class:"w-fit max-w-[85%] whitespace-pre-line rounded-[13px_13px_3px_13px] bg-linear-to-br from-brand-500 to-brand-600 px-4 py-3 text-[11px] leading-relaxed wrap-anywhere text-white shadow-[0_14px_30px_-18px_rgba(109,79,194,0.85)] max-[600px]:max-w-[88%]",innerHTML:O.value},null,8,pd))],2))}},hd={class:"flex flex-col gap-4 sm:gap-5"},gd={class:"motion-safe:animate-fade-rise flex w-full items-start gap-1.5"},md={__name:"ChatTab",props:{messages:{type:Array,required:!0},autoReadEnabled:{type:Boolean,default:!1},ttsConfig:{type:Object,required:!0}},setup(e){return(t,n)=>(F(),j("div",hd,[x("div",gd,[Me(Bo),n[0]||(n[0]=x("p",{class:"w-fit max-w-[calc(100%-2.5rem)] whitespace-pre-line rounded-[10px_10px_10px_3px] bg-brand-50 px-4 py-3 text-xs leading-relaxed wrap-anywhere text-slate-900 max-[600px]:max-w-[calc(100%-2.25rem)]"},[gr(" Hello there 👋 I am ChangAI from ERPGulf.com , your ERP assistant."),x("br"),x("a",{target:"_blank",href:"https://app.erpgulf.com/en/articles/chang-ai-quick-start-guide",rel:"noopener noreferrer",style:{color:"#1e90ff"}},"ChangAI Quick Start Guide - Click here.")],-1))]),(F(!0),j(Be,null,ys(e.messages,(s,r)=>(F(),St(yl,{key:r,message:s,autoReadEnabled:e.autoReadEnabled,ttsConfig:e.ttsConfig},null,8,["message","autoReadEnabled","ttsConfig"]))),128))]))}};function wl(e){try{return JSON.stringify(e,null,2)}catch{return String(e)}}function vl(e){var t,n;return(e==null?void 0:e.message)||((t=e==null?void 0:e.responseJSON)==null?void 0:t.exception)||((n=e==null?void 0:e.responseJSON)==null?void 0:n.message)||(e==null?void 0:e.responseText)||String(e)}function bd(e){return typeof e=="string"?e:e&&typeof e=="object"?e.error?`⚠️ ${e.error}`:e.answer||e.text||"":""}const xd={key:0,class:"rounded-lg bg-brand-50 px-4 py-3 text-xs text-black"},yd={class:"whitespace-pre-wrap wrap-anywhere text-[11px] leading-relaxed text-black"},wd={key:1,class:"mb-3 min-w-0 overflow-x-auto rounded-lg bg-brand-50 p-2 text-[11px]"},vd={class:"whitespace-pre-wrap wrap-anywhere text-[11px] leading-relaxed text-black"},_d={__name:"DebugTab",props:{logs:{type:Array,required:!0},currentDebug:{type:Object,default:null}},setup(e){const t=new Set(["gemini_json_content","private_key","private_key_id","client_secret","client_id","aws_access_key","aws_secret_key","api_key","token","access_token","refresh_token","password","secret","authorization","embed_version_id","llm_version_id","entity_retriever","retriever","deploy_url","support_api_url","get_ticket_details_url"]);function n(r,i=0){if(i>10||r===null||r===void 0||typeof r=="string"||typeof r=="number"||typeof r=="boolean")return r;if(Array.isArray(r))return r.map(o=>n(o,i+1));if(typeof r=="object"){const o={};for(const[a,l]of Object.entries(r))t.has(a.toLowerCase())||(o[a]=n(l,i+1));return o}return r}function s(r){return wl(n(r))}return(r,i)=>(F(),j("div",null,[e.logs.length===0?(F(),j("p",xd,"No debug data yet.")):Ve("",!0),(F(!0),j(Be,null,ys(e.logs,(o,a)=>(F(),j("div",{key:a,class:"mb-3 min-w-0 overflow-x-auto rounded-lg bg-gray-100 p-2 text-[11px]"},[x("pre",yd,Qe(s(o)),1)]))),128)),e.currentDebug?(F(),j("div",wd,[x("pre",vd,Qe(s(e.currentDebug)),1)])):Ve("",!0)]))}},Td={class:"flex flex-col gap-4 sm:gap-5"},kd={key:0,class:"chat-card motion-safe:animate-fade-rise rounded-lg px-4 py-3 text-xs text-slate-900"},Sd={__name:"SupportTab",props:{messages:{type:Array,required:!0},autoReadEnabled:{type:Boolean,default:!1},ttsConfig:{type:Object,required:!0}},setup(e){return(t,n)=>(F(),j("div",Td,[e.messages.length===0?(F(),j("p",kd,"Send a message to Support.")):Ve("",!0),(F(!0),j(Be,null,ys(e.messages,(s,r)=>(F(),St(yl,{key:r,message:s,autoReadEnabled:e.autoReadEnabled,ttsConfig:e.ttsConfig},null,8,["message","autoReadEnabled","ttsConfig"]))),128))]))}},Ed={class:"flex flex-col gap-4"},Ad={class:"chat-card motion-safe:animate-fade-rise rounded-xl p-4"},Rd={class:"flex items-start justify-between gap-4"},Cd=["aria-pressed","title"],Pd={class:"chat-card motion-safe:animate-fade-rise rounded-xl p-4"},Id={class:"flex items-start justify-between gap-4"},Md={class:"mt-2 text-[11px] text-slate-500"},Ld={key:0,class:"mt-1 text-[11px] text-slate-500"},Od={key:1,class:"mt-1 text-[11px] text-slate-500"},$d=["aria-pressed","disabled"],Dd={key:0,class:"mt-3 rounded-md bg-amber-50 px-2.5 py-2 text-xs text-amber-700"},Nd={key:1,class:"mt-3 rounded-md bg-amber-50 px-2.5 py-2 text-xs text-amber-700"},Fd={class:"chat-card motion-safe:animate-fade-rise rounded-xl p-4"},Bd={class:"flex items-start justify-between gap-4"},Hd=["aria-pressed","title"],zd={class:"chat-card motion-safe:animate-fade-rise rounded-xl p-4"},Ud={class:"flex items-start justify-between gap-4"},jd=["aria-pressed","title"],Vd={__name:"SettingsTab",props:{autoReadEnabled:{type:Boolean,required:!0},ttsConfig:{type:Object,required:!0},settings:{type:Object,default:null},debugEnabled:{type:Boolean,default:!1},sendNonERPtoaiEnabled:{type:Boolean,default:!1}},emits:["toggleAutoRead","togglePollyPreference","toggleDebug","toggleSendNonERP"],setup(e){const t=e,n=Re(()=>{var s,r;return(s=t.ttsConfig)!=null&&s.enableVoiceChat?(r=t.ttsConfig)!=null&&r.pollyAvailable?"Available":"Unavailable":"Voice disabled on server"});return(s,r)=>{var i,o,a,l,c,u,p,g,w,E,m,R,S,V,K;return F(),j("div",Ed,[r[10]||(r[10]=x("div",{class:"chat-card motion-safe:animate-fade-rise rounded-xl p-4 text-slate-900"},[x("h3",{class:"text-sm font-semibold tracking-[0.01em]"},"Speech Settings"),x("p",{class:"mt-1 text-xs leading-relaxed text-slate-600"},"These controls apply only inside this chatbot box for the current browser session.")],-1)),x("div",Ad,[x("div",Rd,[r[4]||(r[4]=x("div",null,[x("p",{class:"text-sm font-semibold text-slate-900"},"Auto Read Replies"),x("p",{class:"mt-1 text-xs text-slate-600"},"Automatically read bot replies aloud.")],-1)),x("button",{class:ye(["group relative h-7 w-12 shrink-0 rounded-full border border-slate-200 transition-all duration-200",e.autoReadEnabled?"bg-emerald-500/95":"bg-slate-300"]),"aria-pressed":e.autoReadEnabled?"true":"false",title:e.autoReadEnabled?"Disable auto read":"Enable auto read",onClick:r[0]||(r[0]=O=>s.$emit("toggleAutoRead"))},[x("span",{class:ye(["absolute top-0.5 h-5.5 w-5.5 rounded-full bg-white shadow-sm transition-all duration-200",e.autoReadEnabled?"left-[1.45rem]":"left-0.5"])},null,2)],10,Cd)]),x("p",{class:ye(["mt-3 text-[11px] font-medium",e.autoReadEnabled?"text-emerald-700":"text-slate-500"])},Qe(e.autoReadEnabled?"Auto read is active.":"Auto read is currently off."),3)]),x("div",Pd,[x("div",Id,[x("div",null,[r[5]||(r[5]=x("p",{class:"text-sm font-semibold text-slate-900"},"Use Amazon Polly",-1)),r[6]||(r[6]=x("p",{class:"mt-1 text-xs text-slate-600"},"Use Polly when available; otherwise browser speech is used automatically.",-1)),x("p",Md,"Availability: "+Qe(n.value),1),(i=e.settings)!=null&&i.aws_region?(F(),j("p",Ld,"Region: "+Qe(e.settings.aws_region),1)):Ve("",!0),(o=e.ttsConfig)!=null&&o.voiceId?(F(),j("p",Od,"Voice: "+Qe(e.ttsConfig.voiceId),1)):Ve("",!0)]),x("button",{class:ye(["relative h-7 w-12 shrink-0 rounded-full border border-slate-200 transition-all duration-200 disabled:cursor-not-allowed disabled:opacity-55",(a=e.ttsConfig)!=null&&a.usePolly&&((l=e.ttsConfig)!=null&&l.enableVoiceChat)&&((c=e.ttsConfig)!=null&&c.pollyAvailable)?"bg-emerald-500/95":"bg-slate-300"]),"aria-pressed":(u=e.ttsConfig)!=null&&u.usePolly&&((p=e.ttsConfig)!=null&&p.enableVoiceChat)&&((g=e.ttsConfig)!=null&&g.pollyAvailable)?"true":"false",disabled:!((w=e.ttsConfig)!=null&&w.pollyAvailable)||!((E=e.ttsConfig)!=null&&E.enableVoiceChat),onClick:r[1]||(r[1]=O=>s.$emit("togglePollyPreference"))},[x("span",{class:ye(["absolute top-0.5 h-5.5 w-5.5 rounded-full bg-white shadow-sm transition-all duration-200",(m=e.ttsConfig)!=null&&m.usePolly&&((R=e.ttsConfig)!=null&&R.enableVoiceChat)&&((S=e.ttsConfig)!=null&&S.pollyAvailable)?"left-[1.45rem]":"left-0.5"])},null,2)],10,$d)]),(V=e.ttsConfig)!=null&&V.enableVoiceChat?(K=e.ttsConfig)!=null&&K.pollyAvailable?Ve("",!0):(F(),j("p",Nd,"Polly is not available for this site. Browser speech will be used.")):(F(),j("p",Dd,"Voice chat is disabled in ChangAI Settings."))]),x("div",Fd,[x("div",Bd,[x("div",null,[r[7]||(r[7]=x("p",{class:"text-sm font-semibold text-slate-900"},"Enable Debug Tab",-1)),r[8]||(r[8]=x("p",{class:"mt-1 text-xs text-slate-600"}," Show or hide the Debug tab inside this chatbot. ",-1)),x("p",{class:ye(["mt-2 text-[11px] font-medium",e.debugEnabled?"text-emerald-700":"text-slate-500"])},Qe(e.debugEnabled?"Debug tab is active.":"Debug tab is currently off."),3)]),x("button",{type:"button",class:ye(["relative h-7 w-12 shrink-0 rounded-full border border-slate-200 transition-all duration-200",e.debugEnabled?"bg-emerald-500/95":"bg-slate-300"]),"aria-pressed":e.debugEnabled?"true":"false",title:e.debugEnabled?"Disable debug tab":"Enable debug tab",onClick:r[2]||(r[2]=O=>s.$emit("toggleDebug"))},[x("span",{class:ye(["absolute top-0.5 h-5.5 w-5.5 rounded-full bg-white shadow-sm transition-all duration-200",e.debugEnabled?"left-[1.45rem]":"left-0.5"])},null,2)],10,Hd)])]),x("div",zd,[x("div",Ud,[r[9]||(r[9]=x("div",null,[x("p",{class:"text-sm font-semibold text-slate-900"},"Send non-ERP questions directly to AI"),x("p",{class:"mt-1 text-xs text-slate-600"},"Questions unrelated to your ERP will skip the system and go straight to AI")],-1)),x("button",{class:ye(["group relative h-7 w-12 shrink-0 rounded-full border border-slate-200 transition-all duration-200",e.sendNonERPtoaiEnabled?"bg-emerald-500/95":"bg-slate-300"]),"aria-pressed":e.sendNonERPtoaiEnabled?"true":"false",title:e.sendNonERPtoaiEnabled?"Non-ERP questions are being sent directly to AI":"Enable direct AI reply for non-ERP questions",onClick:r[3]||(r[3]=O=>s.$emit("toggleSendNonERP"))},[x("span",{class:ye(["absolute top-0.5 h-5.5 w-5.5 rounded-full bg-white shadow-sm transition-all duration-200",e.sendNonERPtoaiEnabled?"left-[1.45rem]":"left-0.5"])},null,2)],10,jd)]),x("p",{class:ye(["mt-3 text-[11px] font-medium",e.sendNonERPtoaiEnabled?"text-emerald-700":"text-slate-500"])},Qe(e.sendNonERPtoaiEnabled?"Non-ERP questions are now routed directly to AI":"Direct AI routing is currently off"),3)])])}}},qd={key:0,class:"pointer-events-none absolute -top-14 left-0 right-0 z-20 flex justify-center px-2",role:"status","aria-live":"polite"},Wd={__name:"StatusToast",props:{visible:{type:Boolean,required:!0},message:{type:String,default:""},type:{type:String,default:"info"},dismissible:{type:Boolean,default:!0}},emits:["close"],setup(e){const t=e,n=Re(()=>t.type==="error"?"bg-red-50 text-red-700 ring-red-200":(t.type==="listening","bg-blue-50 text-blue-700 ring-blue-200")),s=Re(()=>t.type==="error"?"bg-red-500":t.type==="listening"?"bg-blue-500 animate-pulse":"bg-blue-500");return(r,i)=>(F(),St(Pu,{"enter-active-class":"transition duration-200 ease-out","enter-from-class":"translate-y-1 opacity-0","enter-to-class":"translate-y-0 opacity-100","leave-active-class":"transition duration-150 ease-in","leave-from-class":"translate-y-0 opacity-100","leave-to-class":"translate-y-1 opacity-0"},{default:Ni(()=>[e.visible?(F(),j("div",qd,[x("div",{class:ye(["pointer-events-auto flex max-w-[92%] items-start gap-2 rounded-lg px-3 py-2 text-xs shadow-lg ring-1",n.value])},[x("span",{class:ye(["mt-0.5 h-2 w-2 shrink-0 rounded-full",s.value])},null,2),x("span",null,Qe(e.message),1),e.dismissible?(F(),j("button",{key:0,type:"button",class:"ml-1 appearance-none border-0 text-current/80 transition hover:text-current focus:outline-none","aria-label":"Dismiss notification",onClick:i[0]||(i[0]=o=>r.$emit("close"))}," × ")):Ve("",!0)],2)])):Ve("",!0)]),_:1}))}},Gd={class:"relative w-full"},Kd=["placeholder","disabled"],Yd=["title","aria-label","disabled"],Zd={key:0,viewBox:"0 0 24 24",width:"16",height:"16",fill:"currentColor","aria-hidden":"true"},Xd={key:1,viewBox:"0 0 24 24",width:"16",height:"16",fill:"none",stroke:"currentColor","stroke-width":"2","aria-hidden":"true"},Qd={key:2,viewBox:"0 0 24 24",width:"16",height:"16",fill:"none",stroke:"currentColor","stroke-width":"2","aria-hidden":"true",class:"animate-spin"},Jd=["title","aria-label","disabled"],ep={key:0,viewBox:"0 0 24 24",width:"18",height:"18",fill:"none","aria-hidden":"true",class:"text-rose-600 motion-safe:animate-stop-button-pulse"},tp={key:1,viewBox:"0 0 24 24",width:"16",height:"16",fill:"currentColor","aria-hidden":"true"},np={__name:"ChatForm",props:{placeholder:{type:String,default:"Message..."},disabled:{type:Boolean,default:!1},isAwaitingResponse:{type:Boolean,default:!1}},emits:["submit","cancel"],setup(e,{expose:t,emit:n}){const s=e,r=n,i=Q(""),o=Q(null),a=Q(!1),l=Q(!1),c=Q(!1),u=Q(!1),p=Q(!1),g=Q(!1),w=Q(!1),E=Q(""),m=Q("info"),R=Q("Voice input is unavailable in this browser/context.");let S=null,V=null,K=null;const O=Q(""),A=Q(!1),C=Re(()=>c.value?"Requesting microphone permission...":u.value?"Starting voice input...":p.value?"Stopping voice input...":l.value?a.value?"Stop voice input":"Start voice input":"Voice input is unavailable in this browser/context"),J=Re(()=>s.isAwaitingResponse?"Stop response":"Send"),te=Re(()=>s.isAwaitingResponse?!1:s.disabled||!i.value.trim()),W=Re(()=>s.isAwaitingResponse?"bg-white border border-rose-100 shadow-[0_8px_20px_-12px_rgba(159,18,57,0.35)] hover:bg-rose-50":"bg-linear-to-br from-brand-500 to-brand-600 text-white shadow-[0_10px_24px_-16px_rgba(109,79,194,0.85)] hover:from-brand-600 hover:to-violet-700");function ne(){return typeof window=="undefined"?null:window.SpeechRecognition||window.webkitSpeechRecognition||null}function xe(){var pe;const ce=ne(),N=typeof window!="undefined"?window.isSecureContext:!1,de=typeof navigator!="undefined"&&!!((pe=navigator.mediaDevices)!=null&&pe.getUserMedia);l.value=!!(ce&&N&&de),N?(!de||!ce)&&(R.value="Voice input is not supported in this browser."):R.value="Voice input requires HTTPS (or localhost).",ce&&l.value&&(S=new ce,S.continuous=!0,S.interimResults=!0,S.lang=typeof navigator!="undefined"&&navigator.language||"en-US",S.onstart=()=>{a.value=!0,u.value=!1,p.value=!1,$(),Se("Listening... Tap mic to stop","listening",{persistent:!0,key:"listening"})},S.onend=()=>{a.value=!1,u.value=!1,p.value=!1,$(),O.value==="listening"&&We(),A.value&&(A.value=!1,xt())},S.onerror=Te=>{if(a.value=!1,u.value=!1,p.value=!1,$(),A.value=!1,(Te==null?void 0:Te.error)==="not-allowed"||(Te==null?void 0:Te.error)==="service-not-allowed"){Se("Microphone permission denied. Please allow microphone access in browser settings.","error");return}if((Te==null?void 0:Te.error)==="audio-capture"){Se("No microphone detected. Please connect a microphone and try again.","error");return}if((Te==null?void 0:Te.error)==="no-speech"){Se("No speech detected. Try speaking a bit louder.","info");return}Se("Voice input failed. Please try again.","error")},S.onresult=Te=>{let ve="";for(let ge=Te.resultIndex;ge{if(S&&!(!a.value&&!p.value))try{S.abort()}catch{p.value=!1,A.value=!1}},1200)}}function G(){if(!l.value||!S){Se(R.value,"error");return}if(a.value||u.value||p.value){Y({submitAfterStop:a.value});return}ue()}async function z(){var ce;if(g.value)return!0;if(!((ce=navigator.mediaDevices)!=null&&ce.getUserMedia))return Se("Microphone API is unavailable in this browser.","error"),!1;c.value=!0,Se("Requesting microphone permission...","info",{persistent:!0,key:"requesting"});try{return(await navigator.mediaDevices.getUserMedia({audio:!0})).getTracks().forEach(de=>de.stop()),g.value=!0,!0}catch(N){return(N==null?void 0:N.name)==="NotAllowedError"||(N==null?void 0:N.name)==="SecurityError"?Se("Microphone permission denied. Please allow it and try again.","error"):(N==null?void 0:N.name)==="NotFoundError"?Se("No microphone found on this device.","error"):Se("Unable to access microphone. Please check browser permissions.","error"),!1}finally{c.value=!1,O.value==="requesting"&&We()}}async function ue(){var N;if(!(!S||a.value||u.value||p.value||!await z()||!S)){A.value=!1,(N=o.value)==null||N.focus(),u.value=!0;try{S.start()}catch(de){u.value=!1,p.value=!1,(de==null?void 0:de.name)!=="InvalidStateError"&&Se("Unable to start voice input. Please try again.","error")}}}function Se(ce,N="info",de={}){const{duration:pe=4200,persistent:Te=!1,key:ve=""}=de;E.value=ce,m.value=N,O.value=ve,w.value=!0,V&&clearTimeout(V),Te||(V=setTimeout(()=>{w.value=!1,O.value=""},pe))}function We(){w.value=!1,O.value="",V&&(clearTimeout(V),V=null)}function xt(){if(s.isAwaitingResponse){r("cancel");return}const ce=i.value.trim();ce&&((a.value||u.value||p.value)&&S&&Y({submitAfterStop:!1}),r("submit",ce),i.value="")}return t({focus:()=>{var ce;return(ce=o.value)==null?void 0:ce.focus()}}),Hn(()=>{xe()}),xs(()=>{if(S&&(a.value||u.value||p.value)){A.value=!1,$();try{S.abort()}catch{}}$(),We()}),(ce,N)=>(F(),j("div",Gd,[x("form",{class:"group flex min-h-11 items-center gap-2 rounded-full border border-slate-200/90 bg-white/95 px-3 shadow-[0_12px_26px_-20px_rgba(15,23,42,0.7)] transition-all duration-250 focus-within:-translate-y-0.5 focus-within:border-brand-200 focus-within:shadow-[0_18px_30px_-20px_rgba(13,110,253,0.5)] focus-within:ring-2 focus-within:ring-brand-500/25",style:{"border-radius":"9999px"},autocomplete:"off",onSubmit:ct(xt,["prevent"]),onClick:N[5]||(N[5]=ct(()=>{},["stop"])),onMousedown:N[6]||(N[6]=ct(()=>{},["stop"])),onKeydown:N[7]||(N[7]=ct(()=>{},["stop"])),onKeyup:N[8]||(N[8]=ct(()=>{},["stop"]))},[Pa(x("input",{ref_key:"inputRef",ref:o,type:"text","onUpdate:modelValue":N[0]||(N[0]=de=>i.value=de),class:"h-11 w-full border-none bg-transparent text-sm font-medium text-slate-800 placeholder:text-slate-400 focus:outline-none disabled:cursor-not-allowed disabled:opacity-50",placeholder:e.disabled?"Waiting for response...":e.placeholder,disabled:e.disabled,required:"",onKeydown:N[1]||(N[1]=ct(()=>{},["stop"])),onKeyup:N[2]||(N[2]=ct(()=>{},["stop"])),onKeypress:N[3]||(N[3]=ct(()=>{},["stop"])),onInput:N[4]||(N[4]=ct(()=>{},["stop"]))},null,40,Kd),[[Xu,i.value]]),x("button",{type:"button",class:ye(["grid h-8 w-8 shrink-0 appearance-none place-items-center rounded-full border border-transparent text-slate-600 transition-all duration-200 hover:-translate-y-0.5 hover:border-slate-200 hover:bg-slate-100 hover:text-slate-900 focus:outline-none disabled:cursor-not-allowed disabled:opacity-40",a.value?"border-red-200 bg-red-100 text-red-600 shadow-[0_10px_20px_-18px_rgba(220,38,38,0.9)] hover:bg-red-100 hover:text-red-600":""]),style:{"border-radius":"9999px"},title:C.value,"aria-label":C.value,disabled:e.disabled||!l.value||c.value||u.value||p.value,onClick:G},[a.value&&!c.value?(F(),j("svg",Zd,N[9]||(N[9]=[x("rect",{x:"6",y:"6",width:"12",height:"12",rx:"2"},null,-1)]))):c.value?(F(),j("svg",Qd,N[11]||(N[11]=[x("circle",{cx:"12",cy:"12",r:"9",opacity:"0.3"},null,-1),x("path",{d:"M21 12a9 9 0 0 1-9 9"},null,-1)]))):(F(),j("svg",Xd,N[10]||(N[10]=[x("path",{d:"M12 3a3 3 0 0 0-3 3v6a3 3 0 0 0 6 0V6a3 3 0 0 0-3-3z"},null,-1),x("path",{d:"M19 10v2a7 7 0 0 1-14 0v-2"},null,-1),x("path",{d:"M12 19v3"},null,-1)])))],10,Yd),x("button",{type:"submit",title:J.value,"aria-label":J.value,class:ye(["grid h-8 w-8 shrink-0 appearance-none place-items-center rounded-full border-0 transition-all duration-200 hover:-translate-y-0.5 focus:outline-none disabled:cursor-not-allowed disabled:opacity-40",W.value]),style:{"border-radius":"9999px"},disabled:te.value},[e.isAwaitingResponse?(F(),j("svg",ep,N[12]||(N[12]=[x("circle",{cx:"12",cy:"12",r:"8",stroke:"currentColor","stroke-width":"2.1",class:"opacity-95"},null,-1),x("rect",{x:"9",y:"9",width:"6",height:"6",rx:"1.35",fill:"currentColor"},null,-1)]))):(F(),j("svg",tp,N[13]||(N[13]=[x("path",{d:"M4 12l1.41 1.41L11 7.83V20h2V7.83l5.59 5.58L20 12l-8-8-8 8z"},null,-1)])))],10,Jd)],32),Me(Wd,{visible:w.value,message:E.value,type:m.value,dismissible:m.value!=="listening",onClose:We},null,8,["visible","message","type","dismissible"])]))}},sp={class:"relative overflow-hidden bg-linear-to-br from-brand-600 via-brand-500 to-violet-400"},rp={class:"min-w-0"},ip={key:1,class:"border-t border-slate-200/80 bg-white/90 px-3 py-3 pb-[calc(12px+env(safe-area-inset-bottom))] backdrop-blur-sm sm:px-4 sm:py-4"},op=56,lp={__name:"ChatbotPopup",props:{isOpen:{type:Boolean,required:!0},activeTab:{type:String,required:!0},debugEnabled:{type:Boolean,default:!1},sendNonERPtoaiEnabled:{type:Boolean,default:!1},chatHistory:{type:Array,required:!0},debugLogs:{type:Array,required:!0},currentDebug:{type:Object,default:null},supportHistory:{type:Array,required:!0},autoReadEnabled:{type:Boolean,required:!0},ttsConfig:{type:Object,required:!0},activeTtsProvider:{type:String,required:!0},settings:{type:Object,default:null},isAwaitingResponse:{type:Boolean,default:!1}},emits:["close","submit","cancelResponse","update:activeTab","toggleAutoRead","togglePollyPreference","toggleDebug","toggleSendNonERP"],setup(e,{expose:t,emit:n}){const s=e,r=n,i=Q(null),o=Q(null),a=Q(s.activeTab),l=Q("default"),c=Q(!1);function u(){const m=i.value;if(!s.isOpen||!m){c.value=!1;return}const R=m.scrollHeight-m.clientHeight;if(R<=4){c.value=!1;return}const S=R-m.scrollTop;c.value=S>op}function p(){const m=i.value;m&&(m.scrollTo({top:m.scrollHeight,behavior:"smooth"}),setTimeout(()=>{u()},220))}function g(){kt(()=>{u()})}function w(){if(l.value==="default"){l.value="half";return}if(l.value==="half"){l.value="full";return}l.value="default"}const E=Re(()=>{const m="chat-shell fixed z-[9999] flex min-h-0 flex-col overflow-hidden border border-slate-200/80 shadow-[0_32px_80px_-44px_rgba(2,6,23,0.7),0_18px_40px_-24px_rgba(15,23,42,0.45)] transition-all duration-300 ease-out origin-bottom-right",R=s.isOpen?"pointer-events-auto opacity-100 translate-x-0 translate-y-0 scale-100 motion-safe:animate-surface-in":"pointer-events-none opacity-0 translate-x-1/5 translate-y-8 scale-95";return l.value==="full"?[m,R,"inset-0 h-screen w-screen max-h-screen max-w-screen rounded-none origin-center"]:l.value==="half"?[m,R,"bottom-[74px] right-5 h-[min(86vh,860px)] w-[min(50vw,860px)] rounded-2xl","max-[900px]:bottom-[78px] max-[900px]:right-3 max-[900px]:h-[min(86vh,760px)] max-[900px]:w-[min(70vw,760px)] max-[900px]:rounded-[14px]","max-[600px]:inset-0 max-[600px]:h-screen max-[600px]:w-screen max-[600px]:max-h-screen max-[600px]:max-w-screen max-[600px]:rounded-none max-[600px]:pb-[env(safe-area-inset-bottom)]"]:[m,R,"bottom-[74px] right-5 h-[min(560px,72vh)] w-[min(360px,calc(100vw-40px))] rounded-2xl","max-[900px]:bottom-[78px] max-[900px]:right-3 max-[900px]:h-[min(70vh,540px)] max-[900px]:w-[min(360px,calc(100vw-24px))] max-[900px]:rounded-[14px]","max-[600px]:inset-0 max-[600px]:h-screen max-[600px]:w-screen max-[600px]:max-h-screen max-[600px]:max-w-screen max-[600px]:rounded-none max-[600px]:pb-[env(safe-area-inset-bottom)]"]});return rn(()=>s.activeTab,m=>{a.value=m,g()}),rn(()=>s.isOpen,m=>{m&&a.value!=="settings"&&kt(()=>{var R;return(R=o.value)==null?void 0:R.focus()}),g()}),rn(a,m=>{r("update:activeTab",m),g()}),rn(()=>[s.chatHistory.length,s.supportHistory.length,s.debugLogs.length,s.currentDebug],()=>{g()}),rn(()=>s.debugEnabled,m=>{!m&&a.value==="debug"&&(a.value="chat"),g()}),Hn(()=>{g()}),t({scrollToBottom(){kt(()=>{p()})}}),(m,R)=>(F(),j("div",{class:ye(E.value),onKeydown:R[9]||(R[9]=ct(()=>{},["stop"])),onKeyup:R[10]||(R[10]=ct(()=>{},["stop"])),onKeypress:R[11]||(R[11]=ct(()=>{},["stop"]))},[R[14]||(R[14]=x("div",{class:"pointer-events-none absolute -right-14 -top-14 h-36 w-36 rounded-full bg-brand-500/15 blur-2xl"},null,-1)),R[15]||(R[15]=x("div",{class:"pointer-events-none absolute -bottom-14 -left-12 h-32 w-32 rounded-full bg-violet-400/15 blur-2xl"},null,-1)),x("div",sp,[R[12]||(R[12]=x("div",{class:"pointer-events-none absolute inset-0 opacity-45",style:{background:"linear-gradient(120deg, rgba(255,255,255,0.16) 0%, rgba(255,255,255,0.02) 52%, rgba(255,255,255,0.12) 100%)"}},null,-1)),Me(vc,{windowMode:l.value,autoReadEnabled:e.autoReadEnabled,activeTtsProvider:e.activeTtsProvider,onClose:R[0]||(R[0]=S=>m.$emit("close")),onCycleResize:w,onToggleAutoRead:R[1]||(R[1]=S=>m.$emit("toggleAutoRead"))},null,8,["windowMode","autoReadEnabled","activeTtsProvider"]),Me(Sc,{modelValue:a.value,"onUpdate:modelValue":R[2]||(R[2]=S=>a.value=S),debugEnabled:e.debugEnabled},null,8,["modelValue","debugEnabled"])]),x("div",{class:"chat-scrollbar min-h-0 flex-1 overflow-x-hidden overflow-y-scroll bg-slate-50/60 px-4 py-4 max-[900px]:px-3.5 max-[900px]:py-3.5 max-[600px]:px-3 max-[600px]:py-3",ref_key:"chatBodyRef",ref:i,onScrollPassive:u},[x("div",rp,[a.value==="chat"?(F(),St(md,{key:0,messages:e.chatHistory,autoReadEnabled:e.autoReadEnabled,ttsConfig:e.ttsConfig},null,8,["messages","autoReadEnabled","ttsConfig"])):a.value==="debug"&&e.debugEnabled?(F(),St(_d,{key:1,logs:e.debugLogs,currentDebug:e.currentDebug},null,8,["logs","currentDebug"])):a.value==="support"?(F(),St(Sd,{key:2,messages:e.supportHistory,autoReadEnabled:e.autoReadEnabled,ttsConfig:e.ttsConfig},null,8,["messages","autoReadEnabled","ttsConfig"])):a.value==="settings"?(F(),St(Vd,{key:3,autoReadEnabled:e.autoReadEnabled,ttsConfig:e.ttsConfig,settings:e.settings,debugEnabled:e.debugEnabled,sendNonERPtoaiEnabled:e.sendNonERPtoaiEnabled,onToggleAutoRead:R[3]||(R[3]=S=>m.$emit("toggleAutoRead")),onTogglePollyPreference:R[4]||(R[4]=S=>m.$emit("togglePollyPreference")),onToggleDebug:R[5]||(R[5]=S=>m.$emit("toggleDebug")),onToggleSendNonERP:R[6]||(R[6]=S=>m.$emit("toggleSendNonERP"))},null,8,["autoReadEnabled","ttsConfig","settings","debugEnabled","sendNonERPtoaiEnabled"])):Ve("",!0)])],544),c.value?(F(),j("button",{key:0,type:"button",class:ye(["absolute right-4 z-20 grid h-9 w-9 place-items-center rounded-full border border-brand-200/70 bg-white/95 text-brand-600 shadow-[0_14px_26px_-16px_rgba(15,23,42,0.65)] transition-all duration-200 hover:-translate-y-0.5 hover:border-brand-300 hover:text-brand-700 focus:outline-none",a.value!=="settings"?"bottom-[calc(90px+env(safe-area-inset-bottom))] sm:bottom-[96px]":"bottom-4 sm:bottom-5"]),title:"Scroll to bottom","aria-label":"Scroll to bottom",onClick:p},R[13]||(R[13]=[x("svg",{viewBox:"0 0 24 24",width:"16",height:"16",fill:"none",stroke:"currentColor","stroke-width":"2","aria-hidden":"true"},[x("path",{d:"M7 10l5 5 5-5"})],-1)]),2)):Ve("",!0),a.value!=="settings"?(F(),j("div",ip,[Me(np,{ref_key:"chatFormRef",ref:o,placeholder:a.value==="support"?"Message Support...":"Message...",disabled:a.value==="chat"&&e.isAwaitingResponse,isAwaitingResponse:a.value==="chat"&&e.isAwaitingResponse,onSubmit:R[7]||(R[7]=S=>m.$emit("submit",S)),onCancel:R[8]||(R[8]=S=>m.$emit("cancelResponse"))},null,8,["placeholder","disabled","isAwaitingResponse"])])):Ve("",!0)],34))}},_l="changai_chat_id",Tl="changai_polly_enabled";function ap(){let e=sessionStorage.getItem(_l);return e||(e=`session_${Date.now()}_${crypto.randomUUID()}`,sessionStorage.setItem(_l,e)),e}function up(){const e=localStorage.getItem(Tl);return e===null?!0:e==="true"}function cp(e){localStorage.setItem(Tl,String(!!e))}const fp={__name:"App",setup(e){const t=Q(!1),n=Q("chat"),s=Q([]),r=Q([]),i=Q(!1),o=Q([]),a=Q(null),l=Q("actual"),c=Q(!0),u=Q(null),p=Q(!1),g=Q(null),w=Q(!1),E=Q({enableVoiceChat:!1,pollyAvailable:!1,usePolly:!0,voiceId:"Zayd",enable_changai:!1}),m=Q("off"),R=Q(null),S=Re(()=>R.value!==null);function V(){if(!E.value.enableVoiceChat){m.value="off";return}m.value=E.value.usePolly?"polly":"browser"}function K(G){var ue;const z=(ue=G==null?void 0:G.detail)==null?void 0:ue.provider;(z==="polly"||z==="browser"||z==="off")&&(m.value=z)}async function O(){var ue,Se,We,xt,ce;if(!(p.value||u.value)){p.value=!0;try{u.value=await Mc(l.value),E.value={enableVoiceChat:!!((ue=u.value)!=null&&ue.enable_voice_chat),pollyAvailable:!!((Se=u.value)!=null&&Se.polly_enabled),usePolly:!!((We=u.value)!=null&&We.polly_enabled)&&up(),voiceId:((xt=u.value)==null?void 0:xt.polly_voice_id)||"Zayd",enable_changai:!!((ce=u.value)!=null&&ce.enable_changai)},V(),r.value.push({type:"settings",settings:u.value})}catch(N){const de=vl(N);r.value.push({type:"settings",error:de})}finally{p.value=!1}}}function A(){t.value=!t.value}function C(){var G;(G=a.value)==null||G.scrollToBottom()}function J(){c.value=!c.value}function te(){const G=!E.value.usePolly;E.value={...E.value,usePolly:G&&E.value.pollyAvailable},cp(E.value.usePolly),V()}function W(){w.value=!w.value}async function ne(G){n.value==="support"?await Y(G):await xe(G)}async function xe(G){var ve;g.value=null,l.value==="actual"&&await O(),s.value.push({role:"user",text:G}),await kt(),C();const z=us({role:"model",text:"Thinking...",cancelable:!0,isStatus:!0,statusType:"thinking"});s.value.push(z),await kt(),C();let ue=!1;const Se=ap(),We=`${Se}_${Date.now()}`,xt=w.value,ce=Pc(G,Se,l.value,We,w.value),N=`debug_${We}`;let de=Date.now();const pe=[],Te=ge=>{var ze;const le=Date.now(),yt=((le-de)/1e3).toFixed(2);de=le;const Ct=`${ge.message} (${yt}s)`;if(ge.message&&(pe.push(Ct),g.value=Ct),!ge.done&&ge.message&&(z.text=ge.message,z.statusType="pipeline"),ge.done){z.cancelable=!1,ge.error?(z.text=`⚠️ ${ge.message||"Something failed"}`,z.isStatus=!1,z.statusType=null):(ze=ge.data)!=null&&ze.answer&&(z.text=ge.data.answer,z.isStatus=!1,z.statusType=null),frappe.realtime.off(N),g.value=null;return}};frappe.realtime.on(N,Te),R.value=()=>{ue||(ue=!0,ce.cancel(),frappe.realtime.off(N),z.isStatus=!1,z.statusType=null,z.text="Cancelled by user.",r.value.push({type:"cancelled",user:G,steps:[...pe]}),g.value=null,z.cancelable=!1,R.value=null)};try{const ge=await ce.promise;if(ue)return;z.cancelable=!1;const le=((ve=bd(ge==null?void 0:ge.Bot))==null?void 0:ve.trim())||"No response.";z.isStatus=!1,z.statusType=null,z.text=le,r.value.push({type:"success",user:G,steps:[...pe],final_response:ge}),g.value=null}catch(ge){if(ue)return;frappe.realtime.off(N),z.cancelable=!1,z.isStatus=!1,z.statusType=null;const le=vl(ge);g.value=null,r.value.push({type:"failed",user:G,steps:[...pe],error:le}),z.isStatus=!1,z.statusType=null,z.text="⚠️ Something went wrong. Please try again."}finally{frappe.realtime.off(N),ue||(R.value=null)}await kt(),C()}function $(){var G;(G=R.value)==null||G.call(R)}async function Y(G){o.value.push({role:"user",text:G}),await kt(),C();const z=us({role:"model",text:"Sending to support...",isStatus:!0,statusType:"support"});o.value.push(z),await kt(),C();try{const ue=await Ic(G,l.value);z.text=ue?wl(ue):"Support request sent successfully."}catch{z.text="⚠️ Failed to reach support. Please try again."}await kt(),C()}return Hn(()=>{typeof window!="undefined"&&window.addEventListener("changai-tts-provider",K),l.value==="actual"&&O()}),xs(()=>{typeof window!="undefined"&&window.removeEventListener("changai-tts-provider",K)}),(G,z)=>(F(),j(Be,null,[E.value.enable_changai?(F(),St(ac,{key:0,isOpen:t.value,onToggle:A},null,8,["isOpen"])):Ve("",!0),Me(lp,{ref_key:"popupRef",ref:a,isOpen:t.value,activeTab:n.value,"onUpdate:activeTab":z[0]||(z[0]=ue=>n.value=ue),chatHistory:s.value,debugLogs:r.value,currentDebug:g.value,supportHistory:o.value,autoReadEnabled:c.value,ttsConfig:E.value,activeTtsProvider:m.value,settings:u.value,isAwaitingResponse:S.value,debugEnabled:i.value,sendNonERPtoaiEnabled:w.value,onToggleDebug:z[1]||(z[1]=ue=>i.value=!i.value),onClose:z[2]||(z[2]=ue=>t.value=!1),onSubmit:ne,onCancelResponse:$,onToggleAutoRead:J,onTogglePollyPreference:te,onToggleSendNonERP:W},null,8,["isOpen","activeTab","chatHistory","debugLogs","currentDebug","supportHistory","autoReadEnabled","ttsConfig","activeTtsProvider","settings","isAwaitingResponse","debugEnabled","sendNonERPtoaiEnabled"])],64))}};function dp(){const e=document.querySelector('link[href*="/assets/changai/dist/changai-chatbot.css"]');if(e!=null&&e.href)return e.href;const t=Array.from(document.scripts).find(n=>{var s;return(s=n.src)==null?void 0:s.includes("/assets/changai/dist/changai-chatbot.js")});return t!=null&&t.src?t.src.replace(/changai-chatbot\.js(\?.*)?$/,"changai-chatbot.css$1"):null}function pp(e){const t=dp();if(!t){const n=Array.from(document.querySelectorAll("style[data-vite-dev-id]"));return n.length&&n.forEach(s=>{const r=document.createElement("style");r.dataset.changaiShadowDevStyle="1",r.textContent=s.textContent||"",e.appendChild(r)}),Promise.resolve()}return e.querySelector('link[data-changai-shadow-style="1"]')?Promise.resolve():new Promise(n=>{const s=document.createElement("link");s.rel="stylesheet",s.href=t,s.dataset.changaiShadowStyle="1",s.onload=()=>n(),s.onerror=()=>n(),e.appendChild(s),setTimeout(n,1200)})}async function kl(){if(document.getElementById("changai-chatbot-host"))return;const e=document.createElement("div");e.id="changai-chatbot-host",document.body.appendChild(e);const t=e.attachShadow({mode:"open"});await pp(t);const n=document.createElement("div");n.id="changai-chatbot-root",t.appendChild(n),nc(fp).mount(n);function s(r){r.stopPropagation()}n.addEventListener("keydown",s),n.addEventListener("keyup",s),n.addEventListener("keypress",s)}document.readyState==="loading"?document.addEventListener("DOMContentLoaded",kl):kl()})(); +`}strong({tokens:e}){return`${this.parser.parseInline(e)}`}em({tokens:e}){return`${this.parser.parseInline(e)}`}codespan({text:e}){return`${Rt(e,!0)}`}br(e){return"
"}del({tokens:e}){return`${this.parser.parseInline(e)}`}link({href:e,title:t,tokens:n}){let s=this.parser.parseInline(n),r=Jo(e);if(r===null)return s;e=r;let i='
",i}image({href:e,title:t,text:n,tokens:s}){s&&(n=this.parser.parseInline(s,this.parser.textRenderer));let r=Jo(e);if(r===null)return Rt(n);e=r;let i=`${Rt(n)}{let l=o[a].flat(1/0);n=n.concat(this.walkTokens(l,t))}):o.tokens&&(n=n.concat(this.walkTokens(o.tokens,t)))}}return n}use(...e){let t=this.defaults.extensions||{renderers:{},childTokens:{}};return e.forEach(n=>{let s={...n};if(s.async=this.defaults.async||s.async||!1,n.extensions&&(n.extensions.forEach(r=>{if(!r.name)throw new Error("extension name required");if("renderer"in r){let i=t.renderers[r.name];i?t.renderers[r.name]=function(...o){let a=r.renderer.apply(this,o);return a===!1&&(a=i.apply(this,o)),a}:t.renderers[r.name]=r.renderer}if("tokenizer"in r){if(!r.level||r.level!=="block"&&r.level!=="inline")throw new Error("extension level must be 'block' or 'inline'");let i=t[r.level];i?i.unshift(r.tokenizer):t[r.level]=[r.tokenizer],r.start&&(r.level==="block"?t.startBlock?t.startBlock.push(r.start):t.startBlock=[r.start]:r.level==="inline"&&(t.startInline?t.startInline.push(r.start):t.startInline=[r.start]))}"childTokens"in r&&r.childTokens&&(t.childTokens[r.name]=r.childTokens)}),s.extensions=t),n.renderer){let r=this.defaults.renderer||new Os(this.defaults);for(let i in n.renderer){if(!(i in r))throw new Error(`renderer '${i}' does not exist`);if(["options","parser"].includes(i))continue;let o=i,a=n.renderer[o],l=r[o];r[o]=(...c)=>{let u=a.apply(r,c);return u===!1&&(u=l.apply(r,c)),u||""}}s.renderer=r}if(n.tokenizer){let r=this.defaults.tokenizer||new Ls(this.defaults);for(let i in n.tokenizer){if(!(i in r))throw new Error(`tokenizer '${i}' does not exist`);if(["options","rules","lexer"].includes(i))continue;let o=i,a=n.tokenizer[o],l=r[o];r[o]=(...c)=>{let u=a.apply(r,c);return u===!1&&(u=l.apply(r,c)),u}}s.tokenizer=r}if(n.hooks){let r=this.defaults.hooks||new Yn;for(let i in n.hooks){if(!(i in r))throw new Error(`hook '${i}' does not exist`);if(["options","block"].includes(i))continue;let o=i,a=n.hooks[o],l=r[o];Yn.passThroughHooks.has(i)?r[o]=c=>{if(this.defaults.async&&Yn.passThroughHooksRespectAsync.has(i))return(async()=>{let p=await a.call(r,c);return l.call(r,p)})();let u=a.call(r,c);return l.call(r,u)}:r[o]=(...c)=>{if(this.defaults.async)return(async()=>{let p=await a.apply(r,c);return p===!1&&(p=await l.apply(r,c)),p})();let u=a.apply(r,c);return u===!1&&(u=l.apply(r,c)),u}}s.hooks=r}if(n.walkTokens){let r=this.defaults.walkTokens,i=n.walkTokens;s.walkTokens=function(o){let a=[];return a.push(i.call(this,o)),r&&(a=a.concat(r.call(this,o))),a}}this.defaults={...this.defaults,...s}}),this}setOptions(e){return this.defaults={...this.defaults,...e},this}lexer(e,t){return mt.lex(e,t!=null?t:this.defaults)}parser(e,t){return bt.parse(e,t!=null?t:this.defaults)}parseMarkdown(e){return(t,n)=>{let s={...n},r={...this.defaults,...s},i=this.onError(!!r.silent,!!r.async);if(this.defaults.async===!0&&s.async===!1)return i(new Error("marked(): The async option was set to true by an extension. Remove async: false from the parse options object to return a Promise."));if(typeof t>"u"||t===null)return i(new Error("marked(): input parameter is undefined or null"));if(typeof t!="string")return i(new Error("marked(): input parameter is of type "+Object.prototype.toString.call(t)+", string expected"));if(r.hooks&&(r.hooks.options=r,r.hooks.block=e),r.async)return(async()=>{let o=r.hooks?await r.hooks.preprocess(t):t,a=await(r.hooks?await r.hooks.provideLexer(e):e?mt.lex:mt.lexInline)(o,r),l=r.hooks?await r.hooks.processAllTokens(a):a;r.walkTokens&&await Promise.all(this.walkTokens(l,r.walkTokens));let c=await(r.hooks?await r.hooks.provideParser(e):e?bt.parse:bt.parseInline)(l,r);return r.hooks?await r.hooks.postprocess(c):c})().catch(i);try{r.hooks&&(t=r.hooks.preprocess(t));let o=(r.hooks?r.hooks.provideLexer(e):e?mt.lex:mt.lexInline)(t,r);r.hooks&&(o=r.hooks.processAllTokens(o)),r.walkTokens&&this.walkTokens(o,r.walkTokens);let a=(r.hooks?r.hooks.provideParser(e):e?bt.parse:bt.parseInline)(o,r);return r.hooks&&(a=r.hooks.postprocess(a)),a}catch(o){return i(o)}}}onError(e,t){return n=>{if(n.message+=` +Please report this to https://github.com/markedjs/marked.`,e){let s="

An error occurred:

"+Rt(n.message+"",!0)+"
";return t?Promise.resolve(s):s}if(t)return Promise.reject(n);throw n}}},fn=new vf;function be(e,t){return fn.parse(e,t)}be.options=be.setOptions=function(e){return fn.setOptions(e),be.defaults=fn.defaults,Ho(be.defaults),be},be.getDefaults=Sr,be.defaults=un,be.use=function(...e){return fn.use(...e),be.defaults=fn.defaults,Ho(be.defaults),be},be.walkTokens=function(e,t){return fn.walkTokens(e,t)},be.parseInline=fn.parseInline,be.Parser=bt,be.parser=bt.parse,be.Renderer=Os,be.TextRenderer=Or,be.Lexer=mt,be.lexer=mt.lex,be.Tokenizer=Ls,be.Hooks=Yn,be.parse=be,be.options,be.setOptions,be.use,be.walkTokens,be.parseInline,bt.parse,mt.lex;function sl(e,t){(t==null||t>e.length)&&(t=e.length);for(var n=0,s=Array(t);n2?s-2:0),i=2;i1?n-1:0),r=1;r1?n-1:0),r=1;r2&&arguments[2]!==void 0?arguments[2]:Zn;if(il&&il(e,null),!Ze(t))return e;let s=t.length;for(;s--;){let r=t[s];if(typeof r=="string"){const i=n(r);i!==r&&(Af(t)||(t[s]=i),r=i)}e[r]=!0}return e}function Df(e){for(let t=0;t/g),jf=ft(/\${[\w\W]*/g),Vf=ft(/^data-[\-\w.\u00B7-\uFFFF]+$/),qf=ft(/^aria-[\-\w]+$/),ml=ft(/^(?:(?:(?:f|ht)tps?|mailto|tel|callto|sms|cid|xmpp|matrix):|[^a-z]|[a-z+.\-]+(?:[^a-z+.\-:]|$))/i),Wf=ft(/^(?:\w+script|data):/i),Gf=ft(/[\u0000-\u0020\u00A0\u1680\u180E\u2000-\u2029\u205F\u3000]/g),Kf=ft(/^html$/i),Yf=ft(/^[a-z][.\w]*(-[.\w]+)+$/i),An={element:1,text:3,progressingInstruction:7,comment:8,document:9},Zf=function(){return typeof window=="undefined"?null:window},Xf=function(t,n){if(typeof t!="object"||typeof t.createPolicy!="function")return null;let s=null;const r="data-tt-policy-suffix";n&&n.hasAttribute(r)&&(s=n.getAttribute(r));const i="dompurify"+(s?"#"+s:"");try{return t.createPolicy(i,{createHTML(o){return o},createScriptURL(o){return o}})}catch{return null}},bl=function(){return{afterSanitizeAttributes:[],afterSanitizeElements:[],afterSanitizeShadowDOM:[],beforeSanitizeAttributes:[],beforeSanitizeElements:[],beforeSanitizeShadowDOM:[],uponSanitizeAttribute:[],uponSanitizeElement:[],uponSanitizeShadowNode:[]}};function xl(){let e=arguments.length>0&&arguments[0]!==void 0?arguments[0]:Zf();const t=U=>xl(U);if(t.version="3.4.3",t.removed=[],!e||!e.document||e.document.nodeType!==An.document||!e.Element)return t.isSupported=!1,t;let n=e.document;const s=n,r=s.currentScript,i=e.DocumentFragment,o=e.HTMLTemplateElement,a=e.Node,l=e.Element,c=e.NodeFilter,u=e.NamedNodeMap,p=u===void 0?e.NamedNodeMap||e.MozNamedAttrMap:u,g=e.HTMLFormElement,w=e.DOMParser,E=e.trustedTypes,m=l.prototype,R=En(m,"cloneNode"),S=En(m,"remove"),V=En(m,"nextSibling"),K=En(m,"childNodes"),O=En(m,"parentNode");if(typeof o=="function"){const U=n.createElement("template");U.content&&U.content.ownerDocument&&(n=U.content.ownerDocument)}let A,C="";const J=n,te=J.implementation,W=J.createNodeIterator,ne=J.createDocumentFragment,xe=J.getElementsByTagName,$=s.importNode;let Y=bl();t.isSupported=typeof rl=="function"&&typeof O=="function"&&te&&te.createHTMLDocument!==void 0;const G=zf,z=Uf,ue=jf,Se=Vf,We=qf,xt=Wf,ce=Gf,N=Yf;let de=ml,pe=null;const ke=Z({},[...dl,...Fr,...Br,...Hr,...pl]);let ve=null;const ge=Z({},[...hl,...zr,...gl,...Ds]);let le=Object.seal(_n(null,{tagNameCheck:{writable:!0,configurable:!1,enumerable:!0,value:null},attributeNameCheck:{writable:!0,configurable:!1,enumerable:!0,value:null},allowCustomizedBuiltInElements:{writable:!0,configurable:!1,enumerable:!0,value:!1}})),yt=null,Ct=null;const ze=Object.seal(_n(null,{tagCheck:{writable:!0,configurable:!1,enumerable:!0,value:null},attributeCheck:{writable:!0,configurable:!1,enumerable:!0,value:null}}));let Ur=!0,f=!0,h=!1,b=!0,k=!1,v=!0,_=!1,M=!1,I=!1,P=!1,T=!1,B=!1,L=!0,H=!1;const q="user-content-";let ee=!0,fe=!1,se={},Te=null;const Oe=Z({},["annotation-xml","audio","colgroup","desc","foreignobject","head","iframe","math","mi","mn","mo","ms","mtext","noembed","noframes","noscript","plaintext","script","style","svg","template","thead","title","video","xmp"]);let rt=null;const it=Z({},["audio","video","img","source","image","track"]);let Ft=null;const Qn=Z({},["alt","class","for","id","label","name","pattern","placeholder","role","summary","title","value","style","xmlns"]),$e="http://www.w3.org/1998/Math/MathML",Xe="http://www.w3.org/2000/svg",ot="http://www.w3.org/1999/xhtml";let Bt=ot,jr=!1,Vr=null;const hp=Z({},[$e,Xe,ot],Nr);let qr=Z({},["mi","mo","mn","ms","mtext"]),Wr=Z({},["annotation-xml"]);const gp=Z({},["title","style","font","a","script"]);let Jn=null;const mp=["application/xhtml+xml","text/html"],bp="text/html";let Le=null,Rn=null;const xp=n.createElement("form"),Sl=function(d){return d instanceof RegExp||d instanceof Function},Gr=function(){let d=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{};if(Rn&&Rn===d)return;(!d||typeof d!="object")&&(d={}),d=et(d),Jn=mp.indexOf(d.PARSER_MEDIA_TYPE)===-1?bp:d.PARSER_MEDIA_TYPE,Le=Jn==="application/xhtml+xml"?Nr:Zn,pe=Ee(d,"ALLOWED_TAGS")&&Ze(d.ALLOWED_TAGS)?Z({},d.ALLOWED_TAGS,Le):ke,ve=Ee(d,"ALLOWED_ATTR")&&Ze(d.ALLOWED_ATTR)?Z({},d.ALLOWED_ATTR,Le):ge,Vr=Ee(d,"ALLOWED_NAMESPACES")&&Ze(d.ALLOWED_NAMESPACES)?Z({},d.ALLOWED_NAMESPACES,Nr):hp,Ft=Ee(d,"ADD_URI_SAFE_ATTR")&&Ze(d.ADD_URI_SAFE_ATTR)?Z(et(Qn),d.ADD_URI_SAFE_ATTR,Le):Qn,rt=Ee(d,"ADD_DATA_URI_TAGS")&&Ze(d.ADD_DATA_URI_TAGS)?Z(et(it),d.ADD_DATA_URI_TAGS,Le):it,Te=Ee(d,"FORBID_CONTENTS")&&Ze(d.FORBID_CONTENTS)?Z({},d.FORBID_CONTENTS,Le):Oe,yt=Ee(d,"FORBID_TAGS")&&Ze(d.FORBID_TAGS)?Z({},d.FORBID_TAGS,Le):et({}),Ct=Ee(d,"FORBID_ATTR")&&Ze(d.FORBID_ATTR)?Z({},d.FORBID_ATTR,Le):et({}),se=Ee(d,"USE_PROFILES")?d.USE_PROFILES&&typeof d.USE_PROFILES=="object"?et(d.USE_PROFILES):d.USE_PROFILES:!1,Ur=d.ALLOW_ARIA_ATTR!==!1,f=d.ALLOW_DATA_ATTR!==!1,h=d.ALLOW_UNKNOWN_PROTOCOLS||!1,b=d.ALLOW_SELF_CLOSE_IN_ATTR!==!1,k=d.SAFE_FOR_TEMPLATES||!1,v=d.SAFE_FOR_XML!==!1,_=d.WHOLE_DOCUMENT||!1,P=d.RETURN_DOM||!1,T=d.RETURN_DOM_FRAGMENT||!1,B=d.RETURN_TRUSTED_TYPE||!1,I=d.FORCE_BODY||!1,L=d.SANITIZE_DOM!==!1,H=d.SANITIZE_NAMED_PROPS||!1,ee=d.KEEP_CONTENT!==!1,fe=d.IN_PLACE||!1,de=Ff(d.ALLOWED_URI_REGEXP)?d.ALLOWED_URI_REGEXP:ml,Bt=typeof d.NAMESPACE=="string"?d.NAMESPACE:ot,qr=Ee(d,"MATHML_TEXT_INTEGRATION_POINTS")&&d.MATHML_TEXT_INTEGRATION_POINTS&&typeof d.MATHML_TEXT_INTEGRATION_POINTS=="object"?et(d.MATHML_TEXT_INTEGRATION_POINTS):Z({},["mi","mo","mn","ms","mtext"]),Wr=Ee(d,"HTML_INTEGRATION_POINTS")&&d.HTML_INTEGRATION_POINTS&&typeof d.HTML_INTEGRATION_POINTS=="object"?et(d.HTML_INTEGRATION_POINTS):Z({},["annotation-xml"]);const y=Ee(d,"CUSTOM_ELEMENT_HANDLING")&&d.CUSTOM_ELEMENT_HANDLING&&typeof d.CUSTOM_ELEMENT_HANDLING=="object"?et(d.CUSTOM_ELEMENT_HANDLING):_n(null);if(le=_n(null),Ee(y,"tagNameCheck")&&Sl(y.tagNameCheck)&&(le.tagNameCheck=y.tagNameCheck),Ee(y,"attributeNameCheck")&&Sl(y.attributeNameCheck)&&(le.attributeNameCheck=y.attributeNameCheck),Ee(y,"allowCustomizedBuiltInElements")&&typeof y.allowCustomizedBuiltInElements=="boolean"&&(le.allowCustomizedBuiltInElements=y.allowCustomizedBuiltInElements),k&&(f=!1),T&&(P=!0),se&&(pe=Z({},pl),ve=_n(null),se.html===!0&&(Z(pe,dl),Z(ve,hl)),se.svg===!0&&(Z(pe,Fr),Z(ve,zr),Z(ve,Ds)),se.svgFilters===!0&&(Z(pe,Br),Z(ve,zr),Z(ve,Ds)),se.mathMl===!0&&(Z(pe,Hr),Z(ve,gl),Z(ve,Ds))),ze.tagCheck=null,ze.attributeCheck=null,Ee(d,"ADD_TAGS")&&(typeof d.ADD_TAGS=="function"?ze.tagCheck=d.ADD_TAGS:Ze(d.ADD_TAGS)&&(pe===ke&&(pe=et(pe)),Z(pe,d.ADD_TAGS,Le))),Ee(d,"ADD_ATTR")&&(typeof d.ADD_ATTR=="function"?ze.attributeCheck=d.ADD_ATTR:Ze(d.ADD_ATTR)&&(ve===ge&&(ve=et(ve)),Z(ve,d.ADD_ATTR,Le))),Ee(d,"ADD_URI_SAFE_ATTR")&&Ze(d.ADD_URI_SAFE_ATTR)&&Z(Ft,d.ADD_URI_SAFE_ATTR,Le),Ee(d,"FORBID_CONTENTS")&&Ze(d.FORBID_CONTENTS)&&(Te===Oe&&(Te=et(Te)),Z(Te,d.FORBID_CONTENTS,Le)),Ee(d,"ADD_FORBID_CONTENTS")&&Ze(d.ADD_FORBID_CONTENTS)&&(Te===Oe&&(Te=et(Te)),Z(Te,d.ADD_FORBID_CONTENTS,Le)),ee&&(pe["#text"]=!0),_&&Z(pe,["html","head","body"]),pe.table&&(Z(pe,["tbody"]),delete yt.tbody),d.TRUSTED_TYPES_POLICY){if(typeof d.TRUSTED_TYPES_POLICY.createHTML!="function")throw $s('TRUSTED_TYPES_POLICY configuration option must provide a "createHTML" hook.');if(typeof d.TRUSTED_TYPES_POLICY.createScriptURL!="function")throw $s('TRUSTED_TYPES_POLICY configuration option must provide a "createScriptURL" hook.');A=d.TRUSTED_TYPES_POLICY,C=A.createHTML("")}else A===void 0&&(A=Xf(E,r)),A!==null&&typeof C=="string"&&(C=A.createHTML(""));Ye&&Ye(d),Rn=d},El=Z({},[...Fr,...Br,...Bf]),Al=Z({},[...Hr,...Hf]),yp=function(d){let y=O(d);(!y||!y.tagName)&&(y={namespaceURI:Bt,tagName:"template"});const D=Zn(d.tagName),ae=Zn(y.tagName);return Vr[d.namespaceURI]?d.namespaceURI===Xe?y.namespaceURI===ot?D==="svg":y.namespaceURI===$e?D==="svg"&&(ae==="annotation-xml"||qr[ae]):!!El[D]:d.namespaceURI===$e?y.namespaceURI===ot?D==="math":y.namespaceURI===Xe?D==="math"&&Wr[ae]:!!Al[D]:d.namespaceURI===ot?y.namespaceURI===Xe&&!Wr[ae]||y.namespaceURI===$e&&!qr[ae]?!1:!Al[D]&&(gp[D]||!El[D]):!!(Jn==="application/xhtml+xml"&&Vr[d.namespaceURI]):!1},wt=function(d){Tn(t.removed,{element:d});try{O(d).removeChild(d)}catch{S(d)}},dn=function(d,y){try{Tn(t.removed,{attribute:y.getAttributeNode(d),from:y})}catch{Tn(t.removed,{attribute:null,from:y})}if(y.removeAttribute(d),d==="is")if(P||T)try{wt(y)}catch{}else try{y.setAttribute(d,"")}catch{}},Rl=function(d){let y=null,D=null;if(I)d=""+d;else{const Ie=al(d,/^[\r\n\t ]+/);D=Ie&&Ie[0]}Jn==="application/xhtml+xml"&&Bt===ot&&(d=''+d+"");const ae=A?A.createHTML(d):d;if(Bt===ot)try{y=new w().parseFromString(ae,Jn)}catch{}if(!y||!y.documentElement){y=te.createDocument(Bt,"template",null);try{y.documentElement.innerHTML=jr?C:ae}catch{}}const De=y.body||y.documentElement;return d&&D&&De.insertBefore(n.createTextNode(D),De.childNodes[0]||null),Bt===ot?xe.call(y,_?"html":"body")[0]:_?y.documentElement:De},Cl=function(d){return W.call(d.ownerDocument||d,d,c.SHOW_ELEMENT|c.SHOW_COMMENT|c.SHOW_TEXT|c.SHOW_PROCESSING_INSTRUCTION|c.SHOW_CDATA_SECTION,null)},Kr=function(d){return d instanceof g&&(typeof d.nodeName!="string"||typeof d.textContent!="string"||typeof d.removeChild!="function"||!(d.attributes instanceof p)||typeof d.removeAttribute!="function"||typeof d.setAttribute!="function"||typeof d.namespaceURI!="string"||typeof d.insertBefore!="function"||typeof d.hasChildNodes!="function")},Yr=function(d){return typeof a=="function"&&d instanceof a};function Ht(U,d,y){kn(U,D=>{D.call(t,d,y,Rn)})}const Pl=function(d){let y=null;if(Ht(Y.beforeSanitizeElements,d,null),Kr(d))return wt(d),!0;const D=Le(d.nodeName);if(Ht(Y.uponSanitizeElement,d,{tagName:D,allowedTags:pe}),v&&d.hasChildNodes()&&!Yr(d.firstElementChild)&&He(/<[/\w!]/g,d.innerHTML)&&He(/<[/\w!]/g,d.textContent)||v&&d.namespaceURI===ot&&D==="style"&&Yr(d.firstElementChild)||d.nodeType===An.progressingInstruction||v&&d.nodeType===An.comment&&He(/<[/\w]/g,d.data))return wt(d),!0;if(yt[D]||!(ze.tagCheck instanceof Function&&ze.tagCheck(D))&&!pe[D]){if(!yt[D]&&Ml(D)&&(le.tagNameCheck instanceof RegExp&&He(le.tagNameCheck,D)||le.tagNameCheck instanceof Function&&le.tagNameCheck(D)))return!1;if(ee&&!Te[D]){const ae=O(d)||d.parentNode,De=K(d)||d.childNodes;if(De&&ae){const Ie=De.length;for(let tt=Ie-1;tt>=0;--tt){const dt=R(De[tt],!0);ae.insertBefore(dt,V(d))}}}return wt(d),!0}return d instanceof l&&!yp(d)||(D==="noscript"||D==="noembed"||D==="noframes")&&He(/<\/no(script|embed|frames)/i,d.innerHTML)?(wt(d),!0):(k&&d.nodeType===An.text&&(y=d.textContent,kn([G,z,ue],ae=>{y=Sn(y,ae," ")}),d.textContent!==y&&(Tn(t.removed,{element:d.cloneNode()}),d.textContent=y)),Ht(Y.afterSanitizeElements,d,null),!1)},Il=function(d,y,D){if(Ct[y]||L&&(y==="id"||y==="name")&&(D in n||D in xp))return!1;const ae=ve[y]||ze.attributeCheck instanceof Function&&ze.attributeCheck(y,d);if(!(f&&!Ct[y]&&He(Se,y))){if(!(Ur&&He(We,y))){if(!ae||Ct[y]){if(!(Ml(d)&&(le.tagNameCheck instanceof RegExp&&He(le.tagNameCheck,d)||le.tagNameCheck instanceof Function&&le.tagNameCheck(d))&&(le.attributeNameCheck instanceof RegExp&&He(le.attributeNameCheck,y)||le.attributeNameCheck instanceof Function&&le.attributeNameCheck(y,d))||y==="is"&&le.allowCustomizedBuiltInElements&&(le.tagNameCheck instanceof RegExp&&He(le.tagNameCheck,D)||le.tagNameCheck instanceof Function&&le.tagNameCheck(D))))return!1}else if(!Ft[y]){if(!He(de,Sn(D,ce,""))){if(!((y==="src"||y==="xlink:href"||y==="href")&&d!=="script"&&ul(D,"data:")===0&&rt[d])){if(!(h&&!He(xt,Sn(D,ce,"")))){if(D)return!1}}}}}}return!0},wp=Z({},["annotation-xml","color-profile","font-face","font-face-format","font-face-name","font-face-src","font-face-uri","missing-glyph"]),Ml=function(d){return!wp[Zn(d)]&&He(N,d)},Ll=function(d){Ht(Y.beforeSanitizeAttributes,d,null);const y=d.attributes;if(!y||Kr(d))return;const D={attrName:"",attrValue:"",keepAttr:!0,allowedAttributes:ve,forceKeepAttr:void 0};let ae=y.length;for(;ae--;){const De=y[ae],Ie=De.name,tt=De.namespaceURI,dt=De.value,vt=Le(Ie),Xr=dt;let Ne=Ie==="value"?Xr:Mf(Xr);if(D.attrName=vt,D.attrValue=Ne,D.keepAttr=!0,D.forceKeepAttr=void 0,Ht(Y.uponSanitizeAttribute,d,D),Ne=D.attrValue,H&&(vt==="id"||vt==="name")&&ul(Ne,q)!==0&&(dn(Ie,d),Ne=q+Ne),v&&He(/((--!?|])>)|<\/(style|script|title|xmp|textarea|noscript|iframe|noembed|noframes)/i,Ne)){dn(Ie,d);continue}if(vt==="attributename"&&al(Ne,"href")){dn(Ie,d);continue}if(D.forceKeepAttr)continue;if(!D.keepAttr){dn(Ie,d);continue}if(!b&&He(/\/>/i,Ne)){dn(Ie,d);continue}k&&kn([G,z,ue],$l=>{Ne=Sn(Ne,$l," ")});const Ol=Le(d.nodeName);if(!Il(Ol,vt,Ne)){dn(Ie,d);continue}if(A&&typeof E=="object"&&typeof E.getAttributeType=="function"&&!tt)switch(E.getAttributeType(Ol,vt)){case"TrustedHTML":{Ne=A.createHTML(Ne);break}case"TrustedScriptURL":{Ne=A.createScriptURL(Ne);break}}if(Ne!==Xr)try{tt?d.setAttributeNS(tt,Ie,Ne):d.setAttribute(Ie,Ne),Kr(d)?wt(d):ll(t.removed)}catch{dn(Ie,d)}}Ht(Y.afterSanitizeAttributes,d,null)},Zr=function(d){let y=null;const D=Cl(d);for(Ht(Y.beforeSanitizeShadowDOM,d,null);y=D.nextNode();)Ht(Y.uponSanitizeShadowNode,y,null),Pl(y),Ll(y),y.content instanceof i&&Zr(y.content);Ht(Y.afterSanitizeShadowDOM,d,null)},Fs=function(d){if(d.nodeType===An.element&&d.shadowRoot instanceof i){const ae=d.shadowRoot;Fs(ae),Zr(ae)}const y=d.childNodes;if(!y)return;const D=[];kn(y,ae=>{Tn(D,ae)});for(const ae of D)Fs(ae)};return t.sanitize=function(U){let d=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{},y=null,D=null,ae=null,De=null;if(jr=!U,jr&&(U=""),typeof U!="string"&&!Yr(U)&&(U=Nf(U),typeof U!="string"))throw $s("dirty is not a string, aborting");if(!t.isSupported)return U;if(M||Gr(d),t.removed=[],typeof U=="string"&&(fe=!1),fe){const dt=U.nodeName;if(typeof dt=="string"){const vt=Le(dt);if(!pe[vt]||yt[vt])throw $s("root node is forbidden and cannot be sanitized in-place")}Fs(U)}else if(U instanceof a)y=Rl(""),D=y.ownerDocument.importNode(U,!0),D.nodeType===An.element&&D.nodeName==="BODY"||D.nodeName==="HTML"?y=D:y.appendChild(D),Fs(D);else{if(!P&&!k&&!_&&U.indexOf("<")===-1)return A&&B?A.createHTML(U):U;if(y=Rl(U),!y)return P?null:B?C:""}y&&I&&wt(y.firstChild);const Ie=Cl(fe?U:y);for(;ae=Ie.nextNode();)Pl(ae),Ll(ae),ae.content instanceof i&&Zr(ae.content);if(fe)return U;if(P){if(k){y.normalize();let dt=y.innerHTML;kn([G,z,ue],vt=>{dt=Sn(dt,vt," ")}),y.innerHTML=dt}if(T)for(De=ne.call(y.ownerDocument);y.firstChild;)De.appendChild(y.firstChild);else De=y;return(ve.shadowroot||ve.shadowrootmode)&&(De=$.call(s,De,!0)),De}let tt=_?y.outerHTML:y.innerHTML;return _&&pe["!doctype"]&&y.ownerDocument&&y.ownerDocument.doctype&&y.ownerDocument.doctype.name&&He(Kf,y.ownerDocument.doctype.name)&&(tt=" +`+tt),k&&kn([G,z,ue],dt=>{tt=Sn(tt,dt," ")}),A&&B?A.createHTML(tt):tt},t.setConfig=function(){let U=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{};Gr(U),M=!0},t.clearConfig=function(){Rn=null,M=!1},t.isValidAttribute=function(U,d,y){Rn||Gr({});const D=Le(U),ae=Le(d);return Il(D,ae,y)},t.addHook=function(U,d){typeof d=="function"&&Tn(Y[U],d)},t.removeHook=function(U,d){if(d!==void 0){const y=Pf(Y[U],d);return y===-1?void 0:If(Y[U],y,1)[0]}return ll(Y[U])},t.removeHooks=function(U){Y[U]=[]},t.removeAllHooks=function(){Y=bl()},t}var Qf=xl();const Jf={key:1,class:"flex min-w-0 max-w-[calc(100%-2.5rem)] flex-1 flex-col max-[600px]:max-w-[calc(100%-2.25rem)]"},ed={key:0,class:"flex w-fit flex-col items-start gap-1"},td=["aria-label"],nd={class:"inline-flex items-center gap-1.5"},sd={class:"text-[8px] font-semibold tracking-[0.12em] uppercase text-[#3a67c9]"},rd={key:1,class:"flex w-fit max-w-full flex-col items-start gap-2"},id={class:"chat-card relative w-fit max-w-full whitespace-pre-line rounded-[10px_10px_10px_3px] px-4 py-3 text-xs leading-relaxed wrap-anywhere text-slate-900"},od=["innerHTML"],ld={key:0,class:"pointer-events-none absolute inset-x-0 bottom-0 h-14 rounded-b-[10px] bg-linear-to-t from-white via-white/92 to-white/0","aria-hidden":"true"},ad={key:0,class:"flex flex-wrap items-center gap-2"},ud=["title","aria-label"],cd={key:1,class:"flex flex-wrap items-center"},fd=["title","aria-label"],dd={viewBox:"0 0 24 24",width:"14",height:"14",fill:"none",stroke:"currentColor","stroke-width":"2","aria-hidden":"true"},pd=["innerHTML"],yl={__name:"ChatMessage",props:{message:{type:Object,required:!0},autoReadEnabled:{type:Boolean,default:!1},ttsConfig:{type:Object,default:()=>({enableVoiceChat:!1,pollyAvailable:!1,usePolly:!0,voiceId:"Zayd"})}},setup(e){const t=e,n=Q(!1),s=Q(null),r=Q(!1),i=Q(!1),o=Re(()=>typeof window!="undefined"&&"speechSynthesis"in window&&"SpeechSynthesisUtterance"in window);function a(A){typeof window!="undefined"&&window.dispatchEvent(new CustomEvent("changai-tts-provider",{detail:{provider:A}}))}function l(A){if(typeof A!="string")return"";const C=A.replace(/[\u{1F000}-\u{1FFFF}]/gu,"").replace(/[\u{2600}-\u{26FF}]/gu,"").replace(/[\u{2700}-\u{27BF}]/gu,"").replace(/\*\*(.*?)\*\*/g,"$1").replace(/\*(.*?)\*/g,"$1").replace(/`([^`]+)`/g,"$1").replace(/#{1,6}\s+/g,"").replace(/[-*+]\s+/g,"").replace(/\[([^\]]+)\]\([^)]+\)/g,"$1").replace(/\s+/g," ");return C.includes("<")?(new DOMParser().parseFromString(A,"text/html").body.textContent||"").replace(/\s+/g," ").trim():C.trim()}function c(){o.value&&window.speechSynthesis.cancel(),s.value&&(s.value.pause(),s.value.src="",s.value=null),n.value=!1}function u(){var A,C,J;if(i.value=!i.value,i.value)c();else{const te=m.value;if(!t.autoReadEnabled||!((A=t.ttsConfig)!=null&&A.enableVoiceChat)||!te||E())return;if((C=t.ttsConfig)!=null&&C.pollyAvailable&&((J=t.ttsConfig)!=null&&J.usePolly)){g(te).catch(W=>{p(te)});return}p(te)}}function p(A){if(!o.value||!A)return;window.dispatchEvent(new CustomEvent("changai-tts-stop")),window.speechSynthesis.cancel();const C=new SpeechSynthesisUtterance(A);C.rate=1,C.pitch=1,C.onend=()=>{n.value=!1},C.onerror=()=>{n.value=!1},n.value=!0,a("browser"),window.speechSynthesis.speak(C)}async function g(A){var ne;const C=await Lc(A,((ne=t.ttsConfig)==null?void 0:ne.voiceId)||"Zayd");if(!(C!=null&&C.ok)||!(C!=null&&C.audio_base64))throw new Error((C==null?void 0:C.error)||"Polly synthesis failed");window.dispatchEvent(new CustomEvent("changai-tts-stop")),c();const J=(C==null?void 0:C.mime_type)||"audio/mpeg",te=new Audio(`data:${J};base64,${C.audio_base64}`);s.value=te,n.value=!0;let W=!1;te.onplay=()=>{W=!0,a("polly")},te.onended=()=>{s.value===te&&(s.value=null),n.value=!1},te.onerror=()=>{s.value===te&&(s.value=null),n.value=!1},await te.play(),W||a("polly")}function w(){c()}function E(){var A;return!!((A=t.message)!=null&&A.isStatus)}const m=Re(()=>{var A;return l(((A=t.message)==null?void 0:A.text)||"")}),R=Re(()=>{var A;return((A=t.message)==null?void 0:A.role)!=="user"&&E()}),S=Re(()=>{var A;return(A=t.message)!=null&&A.isStatus?t.message.statusType==="support"?"Sending to support":m.value||"Thinking":""}),V=Re(()=>{var J;if(((J=t.message)==null?void 0:J.role)==="user"||R.value)return!1;const A=m.value,C=A.split(/\n+/).filter(Boolean).length;return A.length>520||C>8}),K=Re(()=>{var A,C;return((A=t.message)==null?void 0:A.role)!=="user"&&!R.value&&((C=t.ttsConfig)==null?void 0:C.enableVoiceChat)}),O=Re(()=>{var C;const A=((C=t.message)==null?void 0:C.text)||"";return Qf.sanitize(be.parse(A))});return rn(()=>t.message.text,async(A,C)=>{var W,ne,xe;if(!t.autoReadEnabled||t.message.role==="user"||i.value)return;if(!((W=t.ttsConfig)!=null&&W.enableVoiceChat)){a("off");return}const J=l(A);if(!J||E())return;const te=l(C||"");if(J!==te){if((ne=t.ttsConfig)!=null&&ne.pollyAvailable&&((xe=t.ttsConfig)!=null&&xe.usePolly))try{await g(J);return}catch{}p(J)}}),rn(()=>t.message.text,()=>{r.value=!1,i.value=!1}),Hn(()=>{typeof window!="undefined"&&window.addEventListener("changai-tts-stop",w)}),xs(()=>{typeof window!="undefined"&&window.removeEventListener("changai-tts-stop",w),n.value&&c()}),(A,C)=>(F(),j("div",{class:ye(["motion-safe:animate-fade-rise flex w-full gap-1.5",e.message.role==="user"?"flex-col items-end":"items-start"])},[e.message.role!=="user"?(F(),St(Bo,{key:0})):Ve("",!0),e.message.role!=="user"?(F(),j("div",Jf,[R.value?(F(),j("div",ed,[x("div",{class:"chat-card inline-flex w-fit rounded-[10px_10px_10px_3px] px-3 py-2",role:"status","aria-live":"polite","aria-label":S.value},[x("div",nd,[C[1]||(C[1]=x("span",{class:"relative inline-flex h-4 w-4 shrink-0 items-center justify-center"},[x("span",{class:"absolute inset-0 rounded-full border border-transparent border-t-[#4b89ff] border-r-[#4b89ff]/70 animate-gemini-arc"}),x("svg",{viewBox:"0 0 24 24",class:"relative h-3 w-3 text-[#4b89ff] animate-gemini-spark","aria-hidden":"true"},[x("path",{fill:"currentColor",d:"M12 2.8c.52 3.22 1.6 5.66 3.22 7.28 1.62 1.62 4.06 2.7 7.28 3.22-3.22.52-5.66 1.6-7.28 3.22-1.62 1.62-2.7 4.06-3.22 7.28-.52-3.22-1.6-5.66-3.22-7.28-1.62-1.62-4.06-2.7-7.28-3.22 3.22-.52 5.66-1.6 7.28-3.22 1.62-1.62 2.7-4.06 3.22-7.28Z"})])],-1)),x("span",sd,Qe(S.value),1)])],8,td)])):(F(),j("div",rd,[x("div",id,[x("div",{class:ye(["overflow-x-auto",V.value&&!r.value?"max-h-48 overflow-y-hidden":""]),innerHTML:O.value},null,10,od),V.value&&!r.value?(F(),j("div",ld)):Ve("",!0)]),V.value?(F(),j("div",ad,[x("button",{type:"button",class:"inline-flex items-center rounded-full border border-slate-200 bg-white px-2.5 py-1 text-[10px] font-semibold uppercase tracking-[0.08em] text-slate-600 transition-colors duration-200 hover:border-brand-200 hover:text-brand-600",title:r.value?"Collapse response":"Expand response","aria-label":r.value?"Collapse response":"Expand response",onClick:C[0]||(C[0]=J=>r.value=!r.value)},Qe(r.value?"Collapse":"Expand"),9,ud)])):Ve("",!0),K.value?(F(),j("div",cd,[x("button",{type:"button",class:ye(["inline-flex h-8 w-8 items-center justify-center rounded-full border transition-colors duration-200",i.value?"border-red-200 bg-red-50 text-red-600 hover:border-red-300 hover:bg-red-100":"border-green-200 bg-green-50 text-green-600 hover:border-green-300 hover:bg-green-100"]),title:i.value?"Unmute voice playback":"Mute voice playback","aria-label":i.value?"Unmute voice playback":"Mute voice playback",onClick:u},[(F(),j("svg",dd,[C[6]||(C[6]=x("path",{d:"M11 5L6 9H3v6h3l5 4V5Z"},null,-1)),i.value?(F(),j(Be,{key:0},[C[2]||(C[2]=x("path",{d:"M15 9l4 6"},null,-1)),C[3]||(C[3]=x("path",{d:"M19 9l-4 6"},null,-1))],64)):(F(),j(Be,{key:1},[C[4]||(C[4]=x("path",{d:"M15 10a3 3 0 0 1 0 4"},null,-1)),C[5]||(C[5]=x("path",{d:"M17.5 7.5a6 6 0 0 1 0 9"},null,-1))],64))]))],10,fd)])):Ve("",!0)]))])):(F(),j("div",{key:2,class:"w-fit max-w-[85%] whitespace-pre-line rounded-[13px_13px_3px_13px] bg-linear-to-br from-brand-500 to-brand-600 px-4 py-3 text-[11px] leading-relaxed wrap-anywhere text-white shadow-[0_14px_30px_-18px_rgba(109,79,194,0.85)] max-[600px]:max-w-[88%]",innerHTML:O.value},null,8,pd))],2))}},hd={class:"flex flex-col gap-4 sm:gap-5"},gd={class:"motion-safe:animate-fade-rise flex w-full items-start gap-1.5"},md={__name:"ChatTab",props:{messages:{type:Array,required:!0},autoReadEnabled:{type:Boolean,default:!1},ttsConfig:{type:Object,required:!0}},setup(e){return(t,n)=>(F(),j("div",hd,[x("div",gd,[Me(Bo),n[0]||(n[0]=x("p",{class:"w-fit max-w-[calc(100%-2.5rem)] whitespace-pre-line rounded-[10px_10px_10px_3px] bg-brand-50 px-4 py-3 text-xs leading-relaxed wrap-anywhere text-slate-900 max-[600px]:max-w-[calc(100%-2.25rem)]"},[Ts(" Hello there 👋 I am ChangAI from "),x("a",{target:"_blank",href:"https://erpgulf.com",rel:"noopener noreferrer",style:{color:"#1e90ff"}},"ERPGulf.com"),Ts(", your ERP assistant."),x("br"),x("a",{target:"_blank",href:"https://app.erpgulf.com/en/articles/chang-ai-quick-start-guide",rel:"noopener noreferrer",style:{color:"#1e90ff"}},"ChangAI Quick Start Guide - Click here.")],-1))]),(F(!0),j(Be,null,ys(e.messages,(s,r)=>(F(),St(yl,{key:r,message:s,autoReadEnabled:e.autoReadEnabled,ttsConfig:e.ttsConfig},null,8,["message","autoReadEnabled","ttsConfig"]))),128))]))}};function wl(e){try{return JSON.stringify(e,null,2)}catch{return String(e)}}function vl(e){var t,n;return(e==null?void 0:e.message)||((t=e==null?void 0:e.responseJSON)==null?void 0:t.exception)||((n=e==null?void 0:e.responseJSON)==null?void 0:n.message)||(e==null?void 0:e.responseText)||String(e)}function bd(e){return typeof e=="string"?e:e&&typeof e=="object"?e.error?`⚠️ ${e.error}`:e.answer||e.text||"":""}const xd={key:0,class:"rounded-lg bg-brand-50 px-4 py-3 text-xs text-black"},yd={class:"whitespace-pre-wrap wrap-anywhere text-[11px] leading-relaxed text-black"},wd={key:1,class:"mb-3 min-w-0 overflow-x-auto rounded-lg bg-brand-50 p-2 text-[11px]"},vd={class:"whitespace-pre-wrap wrap-anywhere text-[11px] leading-relaxed text-black"},_d={__name:"DebugTab",props:{logs:{type:Array,required:!0},currentDebug:{type:Object,default:null}},setup(e){const t=new Set(["gemini_json_content","private_key","private_key_id","client_secret","client_id","aws_access_key","aws_secret_key","api_key","token","access_token","refresh_token","password","secret","authorization","embed_version_id","llm_version_id","entity_retriever","retriever","deploy_url","support_api_url","get_ticket_details_url"]);function n(r,i=0){if(i>10||r===null||r===void 0||typeof r=="string"||typeof r=="number"||typeof r=="boolean")return r;if(Array.isArray(r))return r.map(o=>n(o,i+1));if(typeof r=="object"){const o={};for(const[a,l]of Object.entries(r))t.has(a.toLowerCase())||(o[a]=n(l,i+1));return o}return r}function s(r){return wl(n(r))}return(r,i)=>(F(),j("div",null,[e.logs.length===0?(F(),j("p",xd,"No debug data yet.")):Ve("",!0),(F(!0),j(Be,null,ys(e.logs,(o,a)=>(F(),j("div",{key:a,class:"mb-3 min-w-0 overflow-x-auto rounded-lg bg-gray-100 p-2 text-[11px]"},[x("pre",yd,Qe(s(o)),1)]))),128)),e.currentDebug?(F(),j("div",wd,[x("pre",vd,Qe(s(e.currentDebug)),1)])):Ve("",!0)]))}},kd={class:"flex flex-col gap-4 sm:gap-5"},Td={key:0,class:"chat-card motion-safe:animate-fade-rise rounded-lg px-4 py-3 text-xs text-slate-900"},Sd={__name:"SupportTab",props:{messages:{type:Array,required:!0},autoReadEnabled:{type:Boolean,default:!1},ttsConfig:{type:Object,required:!0}},setup(e){return(t,n)=>(F(),j("div",kd,[e.messages.length===0?(F(),j("p",Td,"Send a message to Support.")):Ve("",!0),(F(!0),j(Be,null,ys(e.messages,(s,r)=>(F(),St(yl,{key:r,message:s,autoReadEnabled:e.autoReadEnabled,ttsConfig:e.ttsConfig},null,8,["message","autoReadEnabled","ttsConfig"]))),128))]))}},Ed={class:"flex flex-col gap-4"},Ad={class:"chat-card motion-safe:animate-fade-rise rounded-xl p-4"},Rd={class:"flex items-start justify-between gap-4"},Cd=["aria-pressed","title"],Pd={class:"chat-card motion-safe:animate-fade-rise rounded-xl p-4"},Id={class:"flex items-start justify-between gap-4"},Md={class:"mt-2 text-[11px] text-slate-500"},Ld={key:0,class:"mt-1 text-[11px] text-slate-500"},Od={key:1,class:"mt-1 text-[11px] text-slate-500"},$d=["aria-pressed","disabled"],Dd={key:0,class:"mt-3 rounded-md bg-amber-50 px-2.5 py-2 text-xs text-amber-700"},Nd={key:1,class:"mt-3 rounded-md bg-amber-50 px-2.5 py-2 text-xs text-amber-700"},Fd={class:"chat-card motion-safe:animate-fade-rise rounded-xl p-4"},Bd={class:"flex items-start justify-between gap-4"},Hd=["aria-pressed","title"],zd={class:"chat-card motion-safe:animate-fade-rise rounded-xl p-4"},Ud={class:"flex items-start justify-between gap-4"},jd=["aria-pressed","title"],Vd={__name:"SettingsTab",props:{autoReadEnabled:{type:Boolean,required:!0},ttsConfig:{type:Object,required:!0},settings:{type:Object,default:null},debugEnabled:{type:Boolean,default:!1},sendNonERPtoaiEnabled:{type:Boolean,default:!1}},emits:["toggleAutoRead","togglePollyPreference","toggleDebug","toggleSendNonERP"],setup(e){const t=e,n=Re(()=>{var s,r;return(s=t.ttsConfig)!=null&&s.enableVoiceChat?(r=t.ttsConfig)!=null&&r.pollyAvailable?"Available":"Unavailable":"Voice disabled on server"});return(s,r)=>{var i,o,a,l,c,u,p,g,w,E,m,R,S,V,K;return F(),j("div",Ed,[r[10]||(r[10]=x("div",{class:"chat-card motion-safe:animate-fade-rise rounded-xl p-4 text-slate-900"},[x("h3",{class:"text-sm font-semibold tracking-[0.01em]"},"Speech Settings"),x("p",{class:"mt-1 text-xs leading-relaxed text-slate-600"},"These controls apply only inside this chatbot box for the current browser session.")],-1)),x("div",Ad,[x("div",Rd,[r[4]||(r[4]=x("div",null,[x("p",{class:"text-sm font-semibold text-slate-900"},"Auto Read Replies"),x("p",{class:"mt-1 text-xs text-slate-600"},"Automatically read bot replies aloud.")],-1)),x("button",{class:ye(["group relative h-7 w-12 shrink-0 rounded-full border border-slate-200 transition-all duration-200",e.autoReadEnabled?"bg-emerald-500/95":"bg-slate-300"]),"aria-pressed":e.autoReadEnabled?"true":"false",title:e.autoReadEnabled?"Disable auto read":"Enable auto read",onClick:r[0]||(r[0]=O=>s.$emit("toggleAutoRead"))},[x("span",{class:ye(["absolute top-0.5 h-5.5 w-5.5 rounded-full bg-white shadow-sm transition-all duration-200",e.autoReadEnabled?"left-[1.45rem]":"left-0.5"])},null,2)],10,Cd)]),x("p",{class:ye(["mt-3 text-[11px] font-medium",e.autoReadEnabled?"text-emerald-700":"text-slate-500"])},Qe(e.autoReadEnabled?"Auto read is active.":"Auto read is currently off."),3)]),x("div",Pd,[x("div",Id,[x("div",null,[r[5]||(r[5]=x("p",{class:"text-sm font-semibold text-slate-900"},"Use Amazon Polly",-1)),r[6]||(r[6]=x("p",{class:"mt-1 text-xs text-slate-600"},"Use Polly when available; otherwise browser speech is used automatically.",-1)),x("p",Md,"Availability: "+Qe(n.value),1),(i=e.settings)!=null&&i.aws_region?(F(),j("p",Ld,"Region: "+Qe(e.settings.aws_region),1)):Ve("",!0),(o=e.ttsConfig)!=null&&o.voiceId?(F(),j("p",Od,"Voice: "+Qe(e.ttsConfig.voiceId),1)):Ve("",!0)]),x("button",{class:ye(["relative h-7 w-12 shrink-0 rounded-full border border-slate-200 transition-all duration-200 disabled:cursor-not-allowed disabled:opacity-55",(a=e.ttsConfig)!=null&&a.usePolly&&((l=e.ttsConfig)!=null&&l.enableVoiceChat)&&((c=e.ttsConfig)!=null&&c.pollyAvailable)?"bg-emerald-500/95":"bg-slate-300"]),"aria-pressed":(u=e.ttsConfig)!=null&&u.usePolly&&((p=e.ttsConfig)!=null&&p.enableVoiceChat)&&((g=e.ttsConfig)!=null&&g.pollyAvailable)?"true":"false",disabled:!((w=e.ttsConfig)!=null&&w.pollyAvailable)||!((E=e.ttsConfig)!=null&&E.enableVoiceChat),onClick:r[1]||(r[1]=O=>s.$emit("togglePollyPreference"))},[x("span",{class:ye(["absolute top-0.5 h-5.5 w-5.5 rounded-full bg-white shadow-sm transition-all duration-200",(m=e.ttsConfig)!=null&&m.usePolly&&((R=e.ttsConfig)!=null&&R.enableVoiceChat)&&((S=e.ttsConfig)!=null&&S.pollyAvailable)?"left-[1.45rem]":"left-0.5"])},null,2)],10,$d)]),(V=e.ttsConfig)!=null&&V.enableVoiceChat?(K=e.ttsConfig)!=null&&K.pollyAvailable?Ve("",!0):(F(),j("p",Nd,"Polly is not available for this site. Browser speech will be used.")):(F(),j("p",Dd,"Voice chat is disabled in ChangAI Settings."))]),x("div",Fd,[x("div",Bd,[x("div",null,[r[7]||(r[7]=x("p",{class:"text-sm font-semibold text-slate-900"},"Enable Debug Tab",-1)),r[8]||(r[8]=x("p",{class:"mt-1 text-xs text-slate-600"}," Show or hide the Debug tab inside this chatbot. ",-1)),x("p",{class:ye(["mt-2 text-[11px] font-medium",e.debugEnabled?"text-emerald-700":"text-slate-500"])},Qe(e.debugEnabled?"Debug tab is active.":"Debug tab is currently off."),3)]),x("button",{type:"button",class:ye(["relative h-7 w-12 shrink-0 rounded-full border border-slate-200 transition-all duration-200",e.debugEnabled?"bg-emerald-500/95":"bg-slate-300"]),"aria-pressed":e.debugEnabled?"true":"false",title:e.debugEnabled?"Disable debug tab":"Enable debug tab",onClick:r[2]||(r[2]=O=>s.$emit("toggleDebug"))},[x("span",{class:ye(["absolute top-0.5 h-5.5 w-5.5 rounded-full bg-white shadow-sm transition-all duration-200",e.debugEnabled?"left-[1.45rem]":"left-0.5"])},null,2)],10,Hd)])]),x("div",zd,[x("div",Ud,[r[9]||(r[9]=x("div",null,[x("p",{class:"text-sm font-semibold text-slate-900"},"Send non-ERP questions directly to AI"),x("p",{class:"mt-1 text-xs text-slate-600"},"Questions unrelated to your ERP will skip the system and go straight to AI")],-1)),x("button",{class:ye(["group relative h-7 w-12 shrink-0 rounded-full border border-slate-200 transition-all duration-200",e.sendNonERPtoaiEnabled?"bg-emerald-500/95":"bg-slate-300"]),"aria-pressed":e.sendNonERPtoaiEnabled?"true":"false",title:e.sendNonERPtoaiEnabled?"Non-ERP questions are being sent directly to AI":"Enable direct AI reply for non-ERP questions",onClick:r[3]||(r[3]=O=>s.$emit("toggleSendNonERP"))},[x("span",{class:ye(["absolute top-0.5 h-5.5 w-5.5 rounded-full bg-white shadow-sm transition-all duration-200",e.sendNonERPtoaiEnabled?"left-[1.45rem]":"left-0.5"])},null,2)],10,jd)]),x("p",{class:ye(["mt-3 text-[11px] font-medium",e.sendNonERPtoaiEnabled?"text-emerald-700":"text-slate-500"])},Qe(e.sendNonERPtoaiEnabled?"Non-ERP questions are now routed directly to AI":"Direct AI routing is currently off"),3)])])}}},qd={key:0,class:"pointer-events-none absolute -top-14 left-0 right-0 z-20 flex justify-center px-2",role:"status","aria-live":"polite"},Wd={__name:"StatusToast",props:{visible:{type:Boolean,required:!0},message:{type:String,default:""},type:{type:String,default:"info"},dismissible:{type:Boolean,default:!0}},emits:["close"],setup(e){const t=e,n=Re(()=>t.type==="error"?"bg-red-50 text-red-700 ring-red-200":(t.type==="listening","bg-blue-50 text-blue-700 ring-blue-200")),s=Re(()=>t.type==="error"?"bg-red-500":t.type==="listening"?"bg-blue-500 animate-pulse":"bg-blue-500");return(r,i)=>(F(),St(Pu,{"enter-active-class":"transition duration-200 ease-out","enter-from-class":"translate-y-1 opacity-0","enter-to-class":"translate-y-0 opacity-100","leave-active-class":"transition duration-150 ease-in","leave-from-class":"translate-y-0 opacity-100","leave-to-class":"translate-y-1 opacity-0"},{default:Ni(()=>[e.visible?(F(),j("div",qd,[x("div",{class:ye(["pointer-events-auto flex max-w-[92%] items-start gap-2 rounded-lg px-3 py-2 text-xs shadow-lg ring-1",n.value])},[x("span",{class:ye(["mt-0.5 h-2 w-2 shrink-0 rounded-full",s.value])},null,2),x("span",null,Qe(e.message),1),e.dismissible?(F(),j("button",{key:0,type:"button",class:"ml-1 appearance-none border-0 text-current/80 transition hover:text-current focus:outline-none","aria-label":"Dismiss notification",onClick:i[0]||(i[0]=o=>r.$emit("close"))}," × ")):Ve("",!0)],2)])):Ve("",!0)]),_:1}))}},Gd={class:"relative w-full"},Kd=["placeholder","disabled"],Yd=["title","aria-label","disabled"],Zd={key:0,viewBox:"0 0 24 24",width:"16",height:"16",fill:"currentColor","aria-hidden":"true"},Xd={key:1,viewBox:"0 0 24 24",width:"16",height:"16",fill:"none",stroke:"currentColor","stroke-width":"2","aria-hidden":"true"},Qd={key:2,viewBox:"0 0 24 24",width:"16",height:"16",fill:"none",stroke:"currentColor","stroke-width":"2","aria-hidden":"true",class:"animate-spin"},Jd=["title","aria-label","disabled"],ep={key:0,viewBox:"0 0 24 24",width:"18",height:"18",fill:"none","aria-hidden":"true",class:"text-rose-600 motion-safe:animate-stop-button-pulse"},tp={key:1,viewBox:"0 0 24 24",width:"16",height:"16",fill:"currentColor","aria-hidden":"true"},np={__name:"ChatForm",props:{placeholder:{type:String,default:"Message..."},disabled:{type:Boolean,default:!1},isAwaitingResponse:{type:Boolean,default:!1}},emits:["submit","cancel"],setup(e,{expose:t,emit:n}){const s=e,r=n,i=Q(""),o=Q(null),a=Q(!1),l=Q(!1),c=Q(!1),u=Q(!1),p=Q(!1),g=Q(!1),w=Q(!1),E=Q(""),m=Q("info"),R=Q("Voice input is unavailable in this browser/context.");let S=null,V=null,K=null;const O=Q(""),A=Q(!1),C=Re(()=>c.value?"Requesting microphone permission...":u.value?"Starting voice input...":p.value?"Stopping voice input...":l.value?a.value?"Stop voice input":"Start voice input":"Voice input is unavailable in this browser/context"),J=Re(()=>s.isAwaitingResponse?"Stop response":"Send"),te=Re(()=>s.isAwaitingResponse?!1:s.disabled||!i.value.trim()),W=Re(()=>s.isAwaitingResponse?"bg-white border border-rose-100 shadow-[0_8px_20px_-12px_rgba(159,18,57,0.35)] hover:bg-rose-50":"bg-linear-to-br from-brand-500 to-brand-600 text-white shadow-[0_10px_24px_-16px_rgba(109,79,194,0.85)] hover:from-brand-600 hover:to-violet-700");function ne(){return typeof window=="undefined"?null:window.SpeechRecognition||window.webkitSpeechRecognition||null}function xe(){var pe;const ce=ne(),N=typeof window!="undefined"?window.isSecureContext:!1,de=typeof navigator!="undefined"&&!!((pe=navigator.mediaDevices)!=null&&pe.getUserMedia);l.value=!!(ce&&N&&de),N?(!de||!ce)&&(R.value="Voice input is not supported in this browser."):R.value="Voice input requires HTTPS (or localhost).",ce&&l.value&&(S=new ce,S.continuous=!0,S.interimResults=!0,S.lang=typeof navigator!="undefined"&&navigator.language||"en-US",S.onstart=()=>{a.value=!0,u.value=!1,p.value=!1,$(),Se("Listening... Tap mic to stop","listening",{persistent:!0,key:"listening"})},S.onend=()=>{a.value=!1,u.value=!1,p.value=!1,$(),O.value==="listening"&&We(),A.value&&(A.value=!1,xt())},S.onerror=ke=>{if(a.value=!1,u.value=!1,p.value=!1,$(),A.value=!1,(ke==null?void 0:ke.error)==="not-allowed"||(ke==null?void 0:ke.error)==="service-not-allowed"){Se("Microphone permission denied. Please allow microphone access in browser settings.","error");return}if((ke==null?void 0:ke.error)==="audio-capture"){Se("No microphone detected. Please connect a microphone and try again.","error");return}if((ke==null?void 0:ke.error)==="no-speech"){Se("No speech detected. Try speaking a bit louder.","info");return}Se("Voice input failed. Please try again.","error")},S.onresult=ke=>{let ve="";for(let ge=ke.resultIndex;ge{if(S&&!(!a.value&&!p.value))try{S.abort()}catch{p.value=!1,A.value=!1}},1200)}}function G(){if(!l.value||!S){Se(R.value,"error");return}if(a.value||u.value||p.value){Y({submitAfterStop:a.value});return}ue()}async function z(){var ce;if(g.value)return!0;if(!((ce=navigator.mediaDevices)!=null&&ce.getUserMedia))return Se("Microphone API is unavailable in this browser.","error"),!1;c.value=!0,Se("Requesting microphone permission...","info",{persistent:!0,key:"requesting"});try{return(await navigator.mediaDevices.getUserMedia({audio:!0})).getTracks().forEach(de=>de.stop()),g.value=!0,!0}catch(N){return(N==null?void 0:N.name)==="NotAllowedError"||(N==null?void 0:N.name)==="SecurityError"?Se("Microphone permission denied. Please allow it and try again.","error"):(N==null?void 0:N.name)==="NotFoundError"?Se("No microphone found on this device.","error"):Se("Unable to access microphone. Please check browser permissions.","error"),!1}finally{c.value=!1,O.value==="requesting"&&We()}}async function ue(){var N;if(!(!S||a.value||u.value||p.value||!await z()||!S)){A.value=!1,(N=o.value)==null||N.focus(),u.value=!0;try{S.start()}catch(de){u.value=!1,p.value=!1,(de==null?void 0:de.name)!=="InvalidStateError"&&Se("Unable to start voice input. Please try again.","error")}}}function Se(ce,N="info",de={}){const{duration:pe=4200,persistent:ke=!1,key:ve=""}=de;E.value=ce,m.value=N,O.value=ve,w.value=!0,V&&clearTimeout(V),ke||(V=setTimeout(()=>{w.value=!1,O.value=""},pe))}function We(){w.value=!1,O.value="",V&&(clearTimeout(V),V=null)}function xt(){if(s.isAwaitingResponse){r("cancel");return}const ce=i.value.trim();ce&&((a.value||u.value||p.value)&&S&&Y({submitAfterStop:!1}),r("submit",ce),i.value="")}return t({focus:()=>{var ce;return(ce=o.value)==null?void 0:ce.focus()}}),Hn(()=>{xe()}),xs(()=>{if(S&&(a.value||u.value||p.value)){A.value=!1,$();try{S.abort()}catch{}}$(),We()}),(ce,N)=>(F(),j("div",Gd,[x("form",{class:"group flex min-h-11 items-center gap-2 rounded-full border border-slate-200/90 bg-white/95 px-3 shadow-[0_12px_26px_-20px_rgba(15,23,42,0.7)] transition-all duration-250 focus-within:-translate-y-0.5 focus-within:border-brand-200 focus-within:shadow-[0_18px_30px_-20px_rgba(13,110,253,0.5)] focus-within:ring-2 focus-within:ring-brand-500/25",style:{"border-radius":"9999px"},autocomplete:"off",onSubmit:ct(xt,["prevent"]),onClick:N[5]||(N[5]=ct(()=>{},["stop"])),onMousedown:N[6]||(N[6]=ct(()=>{},["stop"])),onKeydown:N[7]||(N[7]=ct(()=>{},["stop"])),onKeyup:N[8]||(N[8]=ct(()=>{},["stop"]))},[Pa(x("input",{ref_key:"inputRef",ref:o,type:"text","onUpdate:modelValue":N[0]||(N[0]=de=>i.value=de),class:"h-11 w-full border-none bg-transparent text-sm font-medium text-slate-800 placeholder:text-slate-400 focus:outline-none disabled:cursor-not-allowed disabled:opacity-50",placeholder:e.disabled?"Waiting for response...":e.placeholder,disabled:e.disabled,required:"",onKeydown:N[1]||(N[1]=ct(()=>{},["stop"])),onKeyup:N[2]||(N[2]=ct(()=>{},["stop"])),onKeypress:N[3]||(N[3]=ct(()=>{},["stop"])),onInput:N[4]||(N[4]=ct(()=>{},["stop"]))},null,40,Kd),[[Xu,i.value]]),x("button",{type:"button",class:ye(["grid h-8 w-8 shrink-0 appearance-none place-items-center rounded-full border border-transparent text-slate-600 transition-all duration-200 hover:-translate-y-0.5 hover:border-slate-200 hover:bg-slate-100 hover:text-slate-900 focus:outline-none disabled:cursor-not-allowed disabled:opacity-40",a.value?"border-red-200 bg-red-100 text-red-600 shadow-[0_10px_20px_-18px_rgba(220,38,38,0.9)] hover:bg-red-100 hover:text-red-600":""]),style:{"border-radius":"9999px"},title:C.value,"aria-label":C.value,disabled:e.disabled||!l.value||c.value||u.value||p.value,onClick:G},[a.value&&!c.value?(F(),j("svg",Zd,N[9]||(N[9]=[x("rect",{x:"6",y:"6",width:"12",height:"12",rx:"2"},null,-1)]))):c.value?(F(),j("svg",Qd,N[11]||(N[11]=[x("circle",{cx:"12",cy:"12",r:"9",opacity:"0.3"},null,-1),x("path",{d:"M21 12a9 9 0 0 1-9 9"},null,-1)]))):(F(),j("svg",Xd,N[10]||(N[10]=[x("path",{d:"M12 3a3 3 0 0 0-3 3v6a3 3 0 0 0 6 0V6a3 3 0 0 0-3-3z"},null,-1),x("path",{d:"M19 10v2a7 7 0 0 1-14 0v-2"},null,-1),x("path",{d:"M12 19v3"},null,-1)])))],10,Yd),x("button",{type:"submit",title:J.value,"aria-label":J.value,class:ye(["grid h-8 w-8 shrink-0 appearance-none place-items-center rounded-full border-0 transition-all duration-200 hover:-translate-y-0.5 focus:outline-none disabled:cursor-not-allowed disabled:opacity-40",W.value]),style:{"border-radius":"9999px"},disabled:te.value},[e.isAwaitingResponse?(F(),j("svg",ep,N[12]||(N[12]=[x("circle",{cx:"12",cy:"12",r:"8",stroke:"currentColor","stroke-width":"2.1",class:"opacity-95"},null,-1),x("rect",{x:"9",y:"9",width:"6",height:"6",rx:"1.35",fill:"currentColor"},null,-1)]))):(F(),j("svg",tp,N[13]||(N[13]=[x("path",{d:"M4 12l1.41 1.41L11 7.83V20h2V7.83l5.59 5.58L20 12l-8-8-8 8z"},null,-1)])))],10,Jd)],32),Me(Wd,{visible:w.value,message:E.value,type:m.value,dismissible:m.value!=="listening",onClose:We},null,8,["visible","message","type","dismissible"])]))}},sp={class:"relative overflow-hidden bg-linear-to-br from-brand-600 via-brand-500 to-violet-400"},rp={class:"min-w-0"},ip={key:1,class:"border-t border-slate-200/80 bg-white/90 px-3 py-3 pb-[calc(12px+env(safe-area-inset-bottom))] backdrop-blur-sm sm:px-4 sm:py-4"},op=56,lp={__name:"ChatbotPopup",props:{isOpen:{type:Boolean,required:!0},activeTab:{type:String,required:!0},debugEnabled:{type:Boolean,default:!1},sendNonERPtoaiEnabled:{type:Boolean,default:!1},chatHistory:{type:Array,required:!0},debugLogs:{type:Array,required:!0},currentDebug:{type:Object,default:null},supportHistory:{type:Array,required:!0},autoReadEnabled:{type:Boolean,required:!0},ttsConfig:{type:Object,required:!0},activeTtsProvider:{type:String,required:!0},settings:{type:Object,default:null},isAwaitingResponse:{type:Boolean,default:!1}},emits:["close","submit","cancelResponse","update:activeTab","toggleAutoRead","togglePollyPreference","toggleDebug","toggleSendNonERP"],setup(e,{expose:t,emit:n}){const s=e,r=n,i=Q(null),o=Q(null),a=Q(s.activeTab),l=Q("default"),c=Q(!1);function u(){const m=i.value;if(!s.isOpen||!m){c.value=!1;return}const R=m.scrollHeight-m.clientHeight;if(R<=4){c.value=!1;return}const S=R-m.scrollTop;c.value=S>op}function p(){const m=i.value;m&&(m.scrollTo({top:m.scrollHeight,behavior:"smooth"}),setTimeout(()=>{u()},220))}function g(){Tt(()=>{u()})}function w(){if(l.value==="default"){l.value="half";return}if(l.value==="half"){l.value="full";return}l.value="default"}const E=Re(()=>{const m="chat-shell fixed z-[9999] flex min-h-0 flex-col overflow-hidden border border-slate-200/80 shadow-[0_32px_80px_-44px_rgba(2,6,23,0.7),0_18px_40px_-24px_rgba(15,23,42,0.45)] transition-all duration-300 ease-out origin-bottom-right",R=s.isOpen?"pointer-events-auto opacity-100 translate-x-0 translate-y-0 scale-100 motion-safe:animate-surface-in":"pointer-events-none opacity-0 translate-x-1/5 translate-y-8 scale-95";return l.value==="full"?[m,R,"inset-0 h-screen w-screen max-h-screen max-w-screen rounded-none origin-center"]:l.value==="half"?[m,R,"bottom-[74px] right-5 h-[min(86vh,860px)] w-[min(50vw,860px)] rounded-2xl","max-[900px]:bottom-[78px] max-[900px]:right-3 max-[900px]:h-[min(86vh,760px)] max-[900px]:w-[min(70vw,760px)] max-[900px]:rounded-[14px]","max-[600px]:inset-0 max-[600px]:h-screen max-[600px]:w-screen max-[600px]:max-h-screen max-[600px]:max-w-screen max-[600px]:rounded-none max-[600px]:pb-[env(safe-area-inset-bottom)]"]:[m,R,"bottom-[74px] right-5 h-[min(560px,72vh)] w-[min(360px,calc(100vw-40px))] rounded-2xl","max-[900px]:bottom-[78px] max-[900px]:right-3 max-[900px]:h-[min(70vh,540px)] max-[900px]:w-[min(360px,calc(100vw-24px))] max-[900px]:rounded-[14px]","max-[600px]:inset-0 max-[600px]:h-screen max-[600px]:w-screen max-[600px]:max-h-screen max-[600px]:max-w-screen max-[600px]:rounded-none max-[600px]:pb-[env(safe-area-inset-bottom)]"]});return rn(()=>s.activeTab,m=>{a.value=m,g()}),rn(()=>s.isOpen,m=>{m&&a.value!=="settings"&&Tt(()=>{var R;return(R=o.value)==null?void 0:R.focus()}),g()}),rn(a,m=>{r("update:activeTab",m),g()}),rn(()=>[s.chatHistory.length,s.supportHistory.length,s.debugLogs.length,s.currentDebug],()=>{g()}),rn(()=>s.debugEnabled,m=>{!m&&a.value==="debug"&&(a.value="chat"),g()}),Hn(()=>{g()}),t({scrollToBottom(){Tt(()=>{p()})}}),(m,R)=>(F(),j("div",{class:ye(E.value),onKeydown:R[9]||(R[9]=ct(()=>{},["stop"])),onKeyup:R[10]||(R[10]=ct(()=>{},["stop"])),onKeypress:R[11]||(R[11]=ct(()=>{},["stop"]))},[R[14]||(R[14]=x("div",{class:"pointer-events-none absolute -right-14 -top-14 h-36 w-36 rounded-full bg-brand-500/15 blur-2xl"},null,-1)),R[15]||(R[15]=x("div",{class:"pointer-events-none absolute -bottom-14 -left-12 h-32 w-32 rounded-full bg-violet-400/15 blur-2xl"},null,-1)),x("div",sp,[R[12]||(R[12]=x("div",{class:"pointer-events-none absolute inset-0 opacity-45",style:{background:"linear-gradient(120deg, rgba(255,255,255,0.16) 0%, rgba(255,255,255,0.02) 52%, rgba(255,255,255,0.12) 100%)"}},null,-1)),Me(vc,{windowMode:l.value,autoReadEnabled:e.autoReadEnabled,activeTtsProvider:e.activeTtsProvider,onClose:R[0]||(R[0]=S=>m.$emit("close")),onCycleResize:w,onToggleAutoRead:R[1]||(R[1]=S=>m.$emit("toggleAutoRead"))},null,8,["windowMode","autoReadEnabled","activeTtsProvider"]),Me(Sc,{modelValue:a.value,"onUpdate:modelValue":R[2]||(R[2]=S=>a.value=S),debugEnabled:e.debugEnabled},null,8,["modelValue","debugEnabled"])]),x("div",{class:"chat-scrollbar min-h-0 flex-1 overflow-x-hidden overflow-y-scroll bg-slate-50/60 px-4 py-4 max-[900px]:px-3.5 max-[900px]:py-3.5 max-[600px]:px-3 max-[600px]:py-3",ref_key:"chatBodyRef",ref:i,onScrollPassive:u},[x("div",rp,[a.value==="chat"?(F(),St(md,{key:0,messages:e.chatHistory,autoReadEnabled:e.autoReadEnabled,ttsConfig:e.ttsConfig},null,8,["messages","autoReadEnabled","ttsConfig"])):a.value==="debug"&&e.debugEnabled?(F(),St(_d,{key:1,logs:e.debugLogs,currentDebug:e.currentDebug},null,8,["logs","currentDebug"])):a.value==="support"?(F(),St(Sd,{key:2,messages:e.supportHistory,autoReadEnabled:e.autoReadEnabled,ttsConfig:e.ttsConfig},null,8,["messages","autoReadEnabled","ttsConfig"])):a.value==="settings"?(F(),St(Vd,{key:3,autoReadEnabled:e.autoReadEnabled,ttsConfig:e.ttsConfig,settings:e.settings,debugEnabled:e.debugEnabled,sendNonERPtoaiEnabled:e.sendNonERPtoaiEnabled,onToggleAutoRead:R[3]||(R[3]=S=>m.$emit("toggleAutoRead")),onTogglePollyPreference:R[4]||(R[4]=S=>m.$emit("togglePollyPreference")),onToggleDebug:R[5]||(R[5]=S=>m.$emit("toggleDebug")),onToggleSendNonERP:R[6]||(R[6]=S=>m.$emit("toggleSendNonERP"))},null,8,["autoReadEnabled","ttsConfig","settings","debugEnabled","sendNonERPtoaiEnabled"])):Ve("",!0)])],544),c.value?(F(),j("button",{key:0,type:"button",class:ye(["absolute right-4 z-20 grid h-9 w-9 place-items-center rounded-full border border-brand-200/70 bg-white/95 text-brand-600 shadow-[0_14px_26px_-16px_rgba(15,23,42,0.65)] transition-all duration-200 hover:-translate-y-0.5 hover:border-brand-300 hover:text-brand-700 focus:outline-none",a.value!=="settings"?"bottom-[calc(90px+env(safe-area-inset-bottom))] sm:bottom-[96px]":"bottom-4 sm:bottom-5"]),title:"Scroll to bottom","aria-label":"Scroll to bottom",onClick:p},R[13]||(R[13]=[x("svg",{viewBox:"0 0 24 24",width:"16",height:"16",fill:"none",stroke:"currentColor","stroke-width":"2","aria-hidden":"true"},[x("path",{d:"M7 10l5 5 5-5"})],-1)]),2)):Ve("",!0),a.value!=="settings"?(F(),j("div",ip,[Me(np,{ref_key:"chatFormRef",ref:o,placeholder:a.value==="support"?"Message Support...":"Message...",disabled:a.value==="chat"&&e.isAwaitingResponse,isAwaitingResponse:a.value==="chat"&&e.isAwaitingResponse,onSubmit:R[7]||(R[7]=S=>m.$emit("submit",S)),onCancel:R[8]||(R[8]=S=>m.$emit("cancelResponse"))},null,8,["placeholder","disabled","isAwaitingResponse"])])):Ve("",!0)],34))}},_l="changai_chat_id",kl="changai_polly_enabled";function ap(){let e=sessionStorage.getItem(_l);return e||(e=`session_${Date.now()}_${crypto.randomUUID()}`,sessionStorage.setItem(_l,e)),e}function up(){const e=localStorage.getItem(kl);return e===null?!0:e==="true"}function cp(e){localStorage.setItem(kl,String(!!e))}const fp={__name:"App",setup(e){const t=Q(!1),n=Q("chat"),s=Q([]),r=Q([]),i=Q(!1),o=Q([]),a=Q(null),l=Q("actual"),c=Q(!0),u=Q(null),p=Q(!1),g=Q(null),w=Q(!1),E=Q({enableVoiceChat:!1,pollyAvailable:!1,usePolly:!0,voiceId:"Zayd",enable_changai:!1}),m=Q("off"),R=Q(null),S=Re(()=>R.value!==null);function V(){if(!E.value.enableVoiceChat){m.value="off";return}m.value=E.value.usePolly?"polly":"browser"}function K(G){var ue;const z=(ue=G==null?void 0:G.detail)==null?void 0:ue.provider;(z==="polly"||z==="browser"||z==="off")&&(m.value=z)}async function O(){var ue,Se,We,xt,ce;if(!(p.value||u.value)){p.value=!0;try{u.value=await Mc(l.value),E.value={enableVoiceChat:!!((ue=u.value)!=null&&ue.enable_voice_chat),pollyAvailable:!!((Se=u.value)!=null&&Se.polly_enabled),usePolly:!!((We=u.value)!=null&&We.polly_enabled)&&up(),voiceId:((xt=u.value)==null?void 0:xt.polly_voice_id)||"Zayd",enable_changai:!!((ce=u.value)!=null&&ce.enable_changai)},V(),r.value.push({type:"settings",settings:u.value})}catch(N){const de=vl(N);r.value.push({type:"settings",error:de})}finally{p.value=!1}}}function A(){t.value=!t.value}function C(){var G;(G=a.value)==null||G.scrollToBottom()}function J(){c.value=!c.value}function te(){const G=!E.value.usePolly;E.value={...E.value,usePolly:G&&E.value.pollyAvailable},cp(E.value.usePolly),V()}function W(){w.value=!w.value}async function ne(G){n.value==="support"?await Y(G):await xe(G)}async function xe(G){var ve;g.value=null,l.value==="actual"&&await O(),s.value.push({role:"user",text:G}),await Tt(),C();const z=us({role:"model",text:"Thinking...",cancelable:!0,isStatus:!0,statusType:"thinking"});s.value.push(z),await Tt(),C();let ue=!1;const Se=ap(),We=`${Se}_${Date.now()}`,xt=w.value,ce=Pc(G,Se,l.value,We,w.value),N=`debug_${We}`;let de=Date.now();const pe=[],ke=ge=>{var ze;const le=Date.now(),yt=((le-de)/1e3).toFixed(2);de=le;const Ct=`${ge.message} (${yt}s)`;if(ge.message&&(pe.push(Ct),g.value=Ct),!ge.done&&ge.message&&(z.text=ge.message,z.statusType="pipeline"),ge.done){z.cancelable=!1,ge.error?(z.text=`⚠️ ${ge.message||"Something failed"}`,z.isStatus=!1,z.statusType=null):(ze=ge.data)!=null&&ze.answer&&(z.text=ge.data.answer,z.isStatus=!1,z.statusType=null),frappe.realtime.off(N),g.value=null;return}};frappe.realtime.on(N,ke),R.value=()=>{ue||(ue=!0,ce.cancel(),frappe.realtime.off(N),z.isStatus=!1,z.statusType=null,z.text="Cancelled by user.",r.value.push({type:"cancelled",user:G,steps:[...pe]}),g.value=null,z.cancelable=!1,R.value=null)};try{const ge=await ce.promise;if(ue)return;z.cancelable=!1;const le=((ve=bd(ge==null?void 0:ge.Bot))==null?void 0:ve.trim())||"No response.";z.isStatus=!1,z.statusType=null,z.text=le,r.value.push({type:"success",user:G,steps:[...pe],final_response:ge}),g.value=null}catch(ge){if(ue)return;frappe.realtime.off(N),z.cancelable=!1,z.isStatus=!1,z.statusType=null;const le=vl(ge);g.value=null,r.value.push({type:"failed",user:G,steps:[...pe],error:le}),z.isStatus=!1,z.statusType=null,z.text="⚠️ Something went wrong. Please try again."}finally{frappe.realtime.off(N),ue||(R.value=null)}await Tt(),C()}function $(){var G;(G=R.value)==null||G.call(R)}async function Y(G){o.value.push({role:"user",text:G}),await Tt(),C();const z=us({role:"model",text:"Sending to support...",isStatus:!0,statusType:"support"});o.value.push(z),await Tt(),C();try{const ue=await Ic(G,l.value);z.text=ue?wl(ue):"Support request sent successfully."}catch{z.text="⚠️ Failed to reach support. Please try again."}await Tt(),C()}return Hn(()=>{typeof window!="undefined"&&window.addEventListener("changai-tts-provider",K),l.value==="actual"&&O()}),xs(()=>{typeof window!="undefined"&&window.removeEventListener("changai-tts-provider",K)}),(G,z)=>(F(),j(Be,null,[E.value.enable_changai?(F(),St(ac,{key:0,isOpen:t.value,onToggle:A},null,8,["isOpen"])):Ve("",!0),Me(lp,{ref_key:"popupRef",ref:a,isOpen:t.value,activeTab:n.value,"onUpdate:activeTab":z[0]||(z[0]=ue=>n.value=ue),chatHistory:s.value,debugLogs:r.value,currentDebug:g.value,supportHistory:o.value,autoReadEnabled:c.value,ttsConfig:E.value,activeTtsProvider:m.value,settings:u.value,isAwaitingResponse:S.value,debugEnabled:i.value,sendNonERPtoaiEnabled:w.value,onToggleDebug:z[1]||(z[1]=ue=>i.value=!i.value),onClose:z[2]||(z[2]=ue=>t.value=!1),onSubmit:ne,onCancelResponse:$,onToggleAutoRead:J,onTogglePollyPreference:te,onToggleSendNonERP:W},null,8,["isOpen","activeTab","chatHistory","debugLogs","currentDebug","supportHistory","autoReadEnabled","ttsConfig","activeTtsProvider","settings","isAwaitingResponse","debugEnabled","sendNonERPtoaiEnabled"])],64))}};function dp(){const e=document.querySelector('link[href*="/assets/changai/dist/changai-chatbot.css"]');if(e!=null&&e.href)return e.href;const t=Array.from(document.scripts).find(n=>{var s;return(s=n.src)==null?void 0:s.includes("/assets/changai/dist/changai-chatbot.js")});return t!=null&&t.src?t.src.replace(/changai-chatbot\.js(\?.*)?$/,"changai-chatbot.css$1"):null}function pp(e){const t=dp();if(!t){const n=Array.from(document.querySelectorAll("style[data-vite-dev-id]"));return n.length&&n.forEach(s=>{const r=document.createElement("style");r.dataset.changaiShadowDevStyle="1",r.textContent=s.textContent||"",e.appendChild(r)}),Promise.resolve()}return e.querySelector('link[data-changai-shadow-style="1"]')?Promise.resolve():new Promise(n=>{const s=document.createElement("link");s.rel="stylesheet",s.href=t,s.dataset.changaiShadowStyle="1",s.onload=()=>n(),s.onerror=()=>n(),e.appendChild(s),setTimeout(n,1200)})}async function Tl(){if(document.getElementById("changai-chatbot-host"))return;const e=document.createElement("div");e.id="changai-chatbot-host",document.body.appendChild(e);const t=e.attachShadow({mode:"open"});await pp(t);const n=document.createElement("div");n.id="changai-chatbot-root",t.appendChild(n),nc(fp).mount(n);function s(r){r.stopPropagation()}n.addEventListener("keydown",s),n.addEventListener("keyup",s),n.addEventListener("keypress",s)}document.readyState==="loading"?document.addEventListener("DOMContentLoaded",Tl):Tl()})(); diff --git a/frontend/src/components/ChatTab.vue b/frontend/src/components/ChatTab.vue index f66cbd0..11f62eb 100644 --- a/frontend/src/components/ChatTab.vue +++ b/frontend/src/components/ChatTab.vue @@ -3,7 +3,7 @@
diff --git a/pyproject.toml b/pyproject.toml index 6490eb7..373545e 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -4,11 +4,11 @@ authors = [ { name = "ERpGulf", email = "support@erpgulf.com"} ] description = "ChangAI" -requires-python = ">=3.11" readme = "README.md" dynamic = ["version"] - dependencies = [ + "zstandard-bin", + "cffi", "openai>=1.64.0,<2.0.0", "anthropic>=0.79.0,<1.0.0", "google-genai>=1.60.0,<2.0.0", @@ -22,21 +22,13 @@ dependencies = [ "transformers>=4.49.0,<5.0.0", "sentence-transformers>=5.0.0", "huggingface_hub>=0.23.0,<1.0.0", - "faiss-cpu>=1.7.0", - "zstandard>=0.23.0", - # Critical Framework Compatibility - "numpy>=1.22.0,<2.0.0", # DO NOT REMOVE <2.0.0 (Breaks ERPNext) + "faiss-cpu>=1.7.4,<2.0.0", + "numpy>=1.22.0,<2.0.0", # DO NOT REMOVE <2.0.0 (Breaks ERPNext) "sqlglot>=27.0.0", - "PyYAML>=6.0.0", - "requests>=2.28.0", # Allows Frappe's 2.31.x to satisfy this - "boto3>=1.34.0", - "Jinja2>=3.0.0", - "typing_extensions>=4.8.0", - - # Utilities + "boto3>=1.34.0,<1.35.0", "PyQRCode>=1.2.1", "pypng>=0.20220715.0", - "opencv-python-headless>=4.0.0" # Headless is best for servers + "opencv-python-headless>=4.8.0,<5.0.0" ] [build-system] @@ -47,10 +39,14 @@ build-backend = "flit_core.buildapi" [tool.bench.frappe-dependencies] frappe = ">=15.0.0,<=17.0.0-dev" + [deploy.dependencies.apt] packages = [ "libffi-dev", "pkg-config", "build-essential", - "python3-dev" + "python3-dev", + "libopenblas-dev", + "libgl1", + "libglib2.0-0" ] \ No newline at end of file