diff --git a/posnext/__init__.py b/posnext/__init__.py index 485f44a..b3f4756 100644 --- a/posnext/__init__.py +++ b/posnext/__init__.py @@ -1 +1 @@ -__version__ = "0.1.1" +__version__ = "0.1.2" diff --git a/posnext/doc_events/item.py b/posnext/doc_events/item.py index 9fe58ad..92a9b15 100644 --- a/posnext/doc_events/item.py +++ b/posnext/doc_events/item.py @@ -75,6 +75,8 @@ def print_barcodes(item_codes): return { "url": file_doc.file_url, - "message": _(f"Generated barcodes for {len(items_with_barcodes)} items."), + "message": _("Generated barcodes for {0} items.").format( + len(items_with_barcodes) + ), "is_pdf": True, } diff --git a/posnext/overrides/pos_closing_entry.py b/posnext/overrides/pos_closing_entry.py index 0a91617..bdfc7ea 100644 --- a/posnext/overrides/pos_closing_entry.py +++ b/posnext/overrides/pos_closing_entry.py @@ -54,7 +54,7 @@ def validate_pos_invoices(self): d.pos_invoice, ["pos_profile", "docstatus", "owner"], as_dict=1, - )[0] + ) if not pos_invoice_data: invalid_row.setdefault("msg", []).append( diff --git a/posnext/public/dist/js/posnext.bundle.TN4KQRHJ.js b/posnext/public/dist/js/posnext.bundle.TN4KQRHJ.js deleted file mode 100644 index c5f13be..0000000 --- a/posnext/public/dist/js/posnext.bundle.TN4KQRHJ.js +++ /dev/null @@ -1,4786 +0,0 @@ -(() => { - var __defProp = Object.defineProperty; - var __defProps = Object.defineProperties; - var __getOwnPropDescs = Object.getOwnPropertyDescriptors; - var __getOwnPropSymbols = Object.getOwnPropertySymbols; - var __hasOwnProp = Object.prototype.hasOwnProperty; - var __propIsEnum = Object.prototype.propertyIsEnumerable; - var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value; - var __spreadValues = (a, b) => { - for (var prop in b || (b = {})) - if (__hasOwnProp.call(b, prop)) - __defNormalProp(a, prop, b[prop]); - if (__getOwnPropSymbols) - for (var prop of __getOwnPropSymbols(b)) { - if (__propIsEnum.call(b, prop)) - __defNormalProp(a, prop, b[prop]); - } - return a; - }; - var __spreadProps = (a, b) => __defProps(a, __getOwnPropDescs(b)); - - // ../posnext/posnext/public/js/pos_controller.js - frappe.provide("posnext.PointOfSale"); - var selected_item = null; - posnext.PointOfSale.Controller = class { - constructor(wrapper) { - console.log("CONTROLLLLLERE"); - this.wrapper = $(wrapper).find(".layout-main-section"); - this.page = wrapper.page; - frappe.run_serially([ - () => this.reload_status = false, - () => this.check_opening_entry(""), - () => this.reload_status = true - ]); - } - fetch_opening_entry(value) { - return frappe.call("posnext.posnext.page.posnext.point_of_sale.check_opening_entry", { "user": frappe.session.user, "value": value }); - } - check_opening_entry(value = "") { - this.fetch_opening_entry(value).then((r) => { - if (r.message.length) { - this.prepare_app_defaults(r.message[0]); - } else { - this.create_opening_voucher(); - } - }); - } - create_opening_voucher() { - const me = this; - const table_fields = [ - { - fieldname: "mode_of_payment", - fieldtype: "Link", - in_list_view: 1, - label: "Mode of Payment", - options: "Mode of Payment", - reqd: 1 - }, - { - fieldname: "opening_amount", - fieldtype: "Currency", - in_list_view: 1, - label: "Opening Amount", - options: "company:company_currency", - change: function() { - dialog.fields_dict.balance_details.df.data.some((d) => { - if (d.idx == this.doc.idx) { - d.opening_amount = this.value; - dialog.fields_dict.balance_details.grid.refresh(); - return true; - } - }); - } - } - ]; - const fetch_pos_payment_methods = () => { - const pos_profile = dialog.fields_dict.pos_profile.get_value(); - if (!pos_profile) - return; - frappe.db.get_doc("POS Profile", pos_profile).then(({ payments }) => { - dialog.fields_dict.balance_details.df.data = []; - payments.forEach((pay) => { - const { mode_of_payment } = pay; - dialog.fields_dict.balance_details.df.data.push({ mode_of_payment, opening_amount: "0" }); - }); - dialog.fields_dict.balance_details.grid.refresh(); - }); - }; - const dialog = new frappe.ui.Dialog({ - title: __("Create POS Opening Entry"), - static: true, - fields: [ - { - fieldtype: "Link", - label: __("Company"), - default: frappe.defaults.get_default("company"), - options: "Company", - fieldname: "company", - reqd: 1 - }, - { - fieldtype: "Link", - label: __("POS Profile"), - options: "POS Profile", - fieldname: "pos_profile", - reqd: 1, - get_query: () => pos_profile_query(), - onchange: () => fetch_pos_payment_methods() - }, - { - fieldname: "balance_details", - fieldtype: "Table", - label: "Opening Balance Details", - cannot_add_rows: false, - in_place_edit: true, - reqd: 1, - data: [], - fields: table_fields - } - ], - primary_action: async function({ company, pos_profile, balance_details }) { - if (!balance_details.length) { - frappe.show_alert({ - message: __("Please add Mode of payments and opening balance details."), - indicator: "red" - }); - return frappe.utils.play_sound("error"); - } - balance_details = balance_details.filter((d) => d.mode_of_payment); - const method = "posnext.posnext.page.posnext.point_of_sale.create_opening_voucher"; - const res = await frappe.call({ method, args: { pos_profile, company, balance_details }, freeze: true }); - !res.exc && me.prepare_app_defaults(res.message); - dialog.hide(); - }, - primary_action_label: __("Submit") - }); - dialog.show(); - const pos_profile_query = () => { - return { - query: "erpnext.accounts.doctype.pos_profile.pos_profile.pos_profile_query", - filters: { company: dialog.fields_dict.company.get_value() } - }; - }; - } - async prepare_app_defaults(data) { - this.pos_opening = data.name; - this.company = data.company; - this.pos_profile = data.pos_profile; - this.pos_opening_time = data.period_start_date; - this.item_stock_map = {}; - this.settings = {}; - window.current_pos_profile = this.pos_profile; - frappe.db.get_value("Stock Settings", void 0, "allow_negative_stock").then(({ message }) => { - this.allow_negative_stock = flt(message.allow_negative_stock) || false; - }); - frappe.call({ - method: "posnext.posnext.page.posnext.point_of_sale.get_pos_profile_data", - args: { "pos_profile": this.pos_profile }, - callback: (res) => { - const profile = res.message; - Object.assign(this.settings, profile); - this.settings.customer_groups = profile.customer_groups.map((group) => group.name); - this.make_app(); - } - }); - } - set_opening_entry_status() { - this.page.set_title_sub( - ` - - Opened at ${moment(this.pos_opening_time).format("Do MMMM, h:mma")} - - ` - ); - } - make_app() { - this.prepare_dom(); - this.prepare_components(); - this.prepare_menu(); - this.make_new_invoice(); - } - prepare_dom() { - this.wrapper.append( - `
` - ); - this.$components_wrapper = this.wrapper.find(".point-of-sale-app"); - } - prepare_components() { - this.init_item_selector(); - this.init_item_details(); - this.init_item_cart(); - this.init_payments(); - this.init_recent_order_list(); - this.init_order_summary(); - } - prepare_menu() { - this.page.clear_menu(); - if (this.settings.custom_show_open_form_view) { - this.page.add_menu_item(__("Open Form View"), this.open_form_view.bind(this), false, "Ctrl+F"); - } - if (this.settings.custom_show_toggle_recent_orders) { - this.page.add_menu_item(__("Toggle Recent Orders"), this.toggle_recent_order.bind(this), false, "Ctrl+O"); - } - if (this.settings.custom_show_save_as_draft) { - this.page.add_menu_item(__("Save as Draft"), this.save_draft_invoice.bind(this), false, "Ctrl+S"); - } - if (this.settings.custom_show_close_the_pos) { - this.page.add_menu_item(__("Close the POS"), this.close_pos.bind(this), false, "Shift+Ctrl+C"); - } - } - open_form_view() { - frappe.model.sync(this.frm.doc); - frappe.set_route("Form", this.frm.doc.doctype, this.frm.doc.name); - } - toggle_recent_order() { - const show = this.recent_order_list.$component.is(":hidden"); - this.toggle_recent_order_list(show); - } - save_draft_invoice() { - if (!this.$components_wrapper.is(":visible")) - return; - console.log(this.frm.doc.items); - if (this.frm.doc.items.length == 0) { - frappe.show_alert({ - message: __("You must add atleast one item to save it as draft."), - indicator: "red" - }); - frappe.utils.play_sound("error"); - return; - } - this.frm.save(void 0, void 0, void 0, () => { - frappe.show_alert({ - message: __("There was an error saving the document."), - indicator: "red" - }); - frappe.utils.play_sound("error"); - }).then(() => { - frappe.run_serially([ - () => frappe.dom.freeze(), - () => this.make_new_invoice(false), - () => frappe.dom.unfreeze() - ]); - }); - } - close_pos() { - if (!this.$components_wrapper.is(":visible")) - return; - let voucher = frappe.model.get_new_doc("POS Closing Entry"); - voucher.pos_profile = this.frm.doc.pos_profile; - voucher.user = frappe.session.user; - voucher.company = this.frm.doc.company; - voucher.pos_opening_entry = this.pos_opening; - voucher.period_end_date = frappe.datetime.now_datetime(); - voucher.posting_date = frappe.datetime.now_date(); - voucher.posting_time = frappe.datetime.now_time(); - frappe.set_route("Form", "POS Closing Entry", voucher.name); - } - init_item_selector() { - if (this.frm) { - this.frm.doc.set_warehouse = this.settings.warehouse; - } - this.item_selector = new posnext.PointOfSale.ItemSelector({ - wrapper: this.$components_wrapper, - pos_profile: this.pos_profile, - settings: this.settings, - reload_status: this.reload_status, - currency: this.settings.currency, - events: { - check_opening_entry: () => this.check_opening_entry(), - item_selected: (args) => this.on_cart_update(args), - init_item_cart: () => this.init_item_cart(), - init_item_details: () => this.init_item_details(), - change_items: (args) => this.change_items(args), - get_frm: () => this.frm || {} - } - }); - } - change_items(items) { - var me = this; - this.frm = items; - this.cart.load_invoice(); - } - init_item_cart() { - this.cart = new posnext.PointOfSale.ItemCart({ - wrapper: this.$components_wrapper, - settings: this.settings, - events: { - get_frm: () => this.frm, - remove_item_from_cart: (item) => { - this.item_details.current_item = item; - this.item_details.name = item.name; - this.item_details.doctype = item.doctype; - }, - form_updated: (item, field, value) => { - this.item_details.current_item = item; - const item_row = frappe.model.get_doc(item.doctype, item.name); - if (field === "qty" && this.frm.doc.is_return && value >= 0) { - frappe.throw("Qty must be negative for return document"); - } - if (item_row && item_row[field] != value) { - const args = { - field, - value, - item: this.item_details.current_item - }; - return this.on_cart_update(args); - } - return Promise.resolve(); - }, - cart_item_clicked: (item) => { - const item_row = this.get_item_from_frm(item); - if (selected_item && selected_item["name"] == item["name"]) { - selected_item = null; - } else { - selected_item = item_row; - } - this.item_details.toggle_item_details_section(item_row); - }, - numpad_event: (value, action) => this.update_item_field(value, action), - checkout: () => this.save_and_checkout(), - edit_cart: () => this.payment.edit_cart(), - save_draft_invoice: () => this.save_draft_invoice(), - toggle_recent_order: () => this.toggle_recent_order(), - customer_details_updated: (details) => { - this.customer_details = details; - this.payment.render_loyalty_points_payment_mode(); - } - } - }); - } - init_item_details() { - this.item_details = new posnext.PointOfSale.ItemDetails({ - wrapper: this.$components_wrapper, - settings: this.settings, - events: { - get_frm: () => this.frm, - toggle_item_selector: (minimize) => { - this.item_selector.resize_selector(minimize); - this.cart.toggle_numpad(minimize); - }, - form_updated: (item, field, value) => { - const item_row = frappe.model.get_doc(item.doctype, item.name); - if (field === "qty" && this.frm.doc.is_return && value >= 0) { - frappe.throw("Qty must be negative for return document"); - } - if (item_row && item_row[field] != value) { - const args = { - field, - value, - item: this.item_details.current_item - }; - return this.on_cart_update(args); - } - return Promise.resolve(); - }, - highlight_cart_item: (item) => { - const cart_item = this.cart.get_cart_item(item); - this.cart.toggle_item_highlight(cart_item); - }, - item_field_focused: (fieldname) => { - this.cart.toggle_numpad_field_edit(fieldname); - }, - set_value_in_current_cart_item: (selector, value) => { - this.cart.update_selector_value_in_cart_item(selector, value, this.item_details.current_item); - }, - clone_new_batch_item_in_frm: (batch_serial_map, item) => { - Object.keys(batch_serial_map).forEach((batch) => { - const item_to_clone = this.frm.doc.items.find((i) => i.name == item.name); - const new_row = this.frm.add_child("items", __spreadValues({}, item_to_clone)); - new_row.batch_no = batch; - new_row.serial_no = batch_serial_map[batch].join(` -`); - new_row.qty = batch_serial_map[batch].length; - this.frm.doc.items.forEach((row) => { - if (item.item_code === row.item_code) { - this.update_cart_html(row); - } - }); - }); - }, - remove_item_from_cart: () => this.remove_item_from_cart(), - get_item_stock_map: () => this.item_stock_map, - close_item_details: () => { - selected_item = null; - this.item_details.toggle_item_details_section(null); - this.cart.prev_action = null; - this.cart.toggle_item_highlight(); - }, - get_available_stock: (item_code, warehouse) => this.get_available_stock(item_code, warehouse) - } - }); - if (selected_item) { - this.item_details.toggle_item_details_section(selected_item); - } - } - init_payments() { - this.payment = new posnext.PointOfSale.Payment({ - wrapper: this.$components_wrapper, - settings: this.settings, - events: { - get_frm: () => this.frm || {}, - get_customer_details: () => this.customer_details || {}, - toggle_other_sections: (show) => { - if (show) { - this.item_details.$component.is(":visible") ? this.item_details.$component.css("display", "none") : ""; - this.item_selector.toggle_component(false); - } else { - this.item_selector.toggle_component(true); - } - }, - submit_invoice: () => { - this.frm.savesubmit().then((r) => { - this.toggle_components(false); - this.order_summary.toggle_component(true); - this.order_summary.load_summary_of(this.frm.doc, true); - frappe.show_alert({ - indicator: "green", - message: __("POS invoice {0} created succesfully", [r.doc.name]) - }); - }); - } - } - }); - } - init_recent_order_list() { - this.recent_order_list = new posnext.PointOfSale.PastOrderList({ - wrapper: this.$components_wrapper, - events: { - open_invoice_data: (name) => { - frappe.db.get_doc("Sales Invoice", name).then((doc) => { - this.order_summary.load_summary_of(doc); - }); - }, - reset_summary: () => this.order_summary.toggle_summary_placeholder(true), - previous_screen: () => { - this.recent_order_list.toggle_component(false); - this.cart.load_invoice(); - this.item_selector.toggle_component(true); - this.wrapper.find(".past-order-summary").css("display", "none"); - } - }, - settings: this.settings - }); - } - init_order_summary() { - this.order_summary = new posnext.PointOfSale.PastOrderSummary({ - wrapper: this.$components_wrapper, - pos_profile: this.settings, - events: { - get_frm: () => this.frm, - process_return: (name) => { - this.recent_order_list.toggle_component(false); - frappe.db.get_doc("Sales Invoice", name).then((doc) => { - frappe.run_serially([ - () => this.make_return_invoice(doc), - () => this.cart.load_invoice(), - () => this.item_selector.toggle_component(true) - ]); - }); - }, - edit_order: (name) => { - console.log("Edit Order..."); - this.recent_order_list.toggle_component(false); - frappe.run_serially([ - () => this.frm.refresh(name), - () => this.frm.call("reset_mode_of_payments"), - () => this.cart.load_invoice(), - () => this.item_selector.toggle_component(true) - ]); - }, - delete_order: (name) => { - frappe.model.delete_doc(this.frm.doc.doctype, name, () => { - this.recent_order_list.refresh_list(); - }); - }, - new_order: () => { - frappe.run_serially([ - () => frappe.dom.freeze(), - () => this.make_new_invoice(), - () => this.item_selector.toggle_component(true), - () => frappe.dom.unfreeze() - ]); - } - } - }); - } - toggle_recent_order_list(show) { - this.toggle_components(!show); - this.recent_order_list.toggle_component(show); - this.order_summary.toggle_component(show); - } - toggle_components(show) { - this.cart.toggle_component(show); - this.item_selector.toggle_component(show); - !show ? this.item_details.toggle_component(false) || this.payment.toggle_component(false) : ""; - } - make_new_invoice(from_held = false) { - if (from_held) { - return frappe.run_serially([ - () => frappe.dom.freeze(), - () => this.make_sales_invoice_frm(), - () => this.set_pos_profile_data(), - () => this.set_pos_profile_status(), - () => this.cart.load_invoice(), - () => frappe.dom.unfreeze(), - () => this.toggle_recent_order() - ]); - } else { - return frappe.run_serially([ - () => frappe.dom.freeze(), - () => this.make_sales_invoice_frm(), - () => this.set_pos_profile_data(), - () => this.set_pos_profile_status(), - () => this.cart.load_invoice(), - () => frappe.dom.unfreeze() - ]); - } - } - make_sales_invoice_frm() { - const doctype = "Sales Invoice"; - return new Promise((resolve) => { - if (this.frm) { - this.frm = this.get_new_frm(this.frm); - this.frm.doc.items = []; - this.frm.doc.is_pos = 1; - this.frm.doc.set_warehouse = this.settings.warehouse; - resolve(); - } else { - frappe.model.with_doctype(doctype, () => { - this.frm = this.get_new_frm(); - this.frm.doc.items = []; - this.frm.doc.is_pos = 1; - this.frm.doc.set_warehouse = this.settings.warehouse; - resolve(); - }); - } - }); - } - get_new_frm(_frm) { - const doctype = "Sales Invoice"; - const page = $("
"); - const frm = _frm || new frappe.ui.form.Form(doctype, page, false); - const name = frappe.model.make_new_doc_and_get_name(doctype, true); - frm.refresh(name); - return frm; - } - async make_return_invoice(doc) { - frappe.dom.freeze(); - this.frm = this.get_new_frm(this.frm); - this.frm.doc.items = []; - return frappe.call({ - method: "posnext.posnext.page.posnext.point_of_sale.make_sales_return", - args: { - "source_name": doc.name, - "target_doc": this.frm.doc - }, - callback: (r) => { - frappe.model.sync(r.message); - frappe.get_doc(r.message.doctype, r.message.name).__run_link_triggers = false; - this.set_pos_profile_data().then(() => { - frappe.dom.unfreeze(); - }); - } - }); - } - set_pos_profile_data() { - if (this.company && !this.frm.doc.company) - this.frm.doc.company = this.company; - if ((this.pos_profile && !this.frm.doc.pos_profile) | (this.frm.doc.is_return && this.pos_profile != this.frm.doc.pos_profile)) { - this.frm.doc.pos_profile = this.pos_profile; - } - if (!this.frm.doc.company) - return; - return this.frm.trigger("set_pos_data"); - } - set_pos_profile_status() { - this.page.set_indicator(this.pos_profile, "blue"); - } - async on_cart_update(args) { - console.log("Updating Cart"); - let item_row = void 0; - try { - let { field, value, item } = args; - item_row = this.get_item_from_frm(item); - const item_row_exists = !$.isEmptyObject(item_row); - const from_selector = field === "qty" && value === "+1"; - if (from_selector) - value = flt(item_row.stock_qty) + flt(value); - if (item_row_exists) { - if (field === "qty") - value = flt(value); - if (["qty", "conversion_factor"].includes(field) && value > 0 && !this.allow_negative_stock) { - const qty_needed = field === "qty" ? value * item_row.conversion_factor : item_row.qty * value; - } - if (this.is_current_item_being_edited(item_row) || from_selector) { - await frappe.model.set_value(item_row.doctype, item_row.name, field, value); - } - } else { - if (!this.frm.doc.customer && !this.settings.custom_mobile_number_based_customer) { - return this.raise_customer_selection_alert(); - } - frappe.flags.ignore_company_party_validation = true; - const { item_code, batch_no, serial_no, rate, uom, valuation_rate, custom_item_uoms, custom_logical_rack } = item; - if (!item_code) - return; - if (this.settings.custom_product_bundle) { - const product_bundle = await this.get_product_bundle(item_code); - if (product_bundle && Array.isArray(product_bundle.items)) { - const bundle_items = product_bundle.items.map((bundle_item) => ({ - item_code: bundle_item.item_code, - qty: bundle_item.qty * value, - rate: bundle_item.rate, - uom: bundle_item.uom - })); - for (const bundle_item of bundle_items) { - const bundle_item_row = this.frm.add_child("items", bundle_item); - await this.trigger_new_item_events(bundle_item_row); - } - this.update_cart_html(); - return; - } - } - const new_item = { item_code, batch_no, rate, uom, [field]: value }; - if (value) { - new_item["qty"] = value; - } - if (serial_no) { - await this.check_serial_no_availablilty(item_code, this.frm.doc.set_warehouse, serial_no); - new_item["serial_no"] = serial_no; - } - if (field === "serial_no") - new_item["qty"] = value.split(` -`).length || 0; - item_row = this.frm.add_child("items", new_item); - await this.trigger_new_item_events(item_row); - item_row["rate"] = rate; - item_row["valuation_rate"] = valuation_rate; - item_row["custom_valuation_rate"] = valuation_rate; - item_row["custom_item_uoms"] = custom_item_uoms; - item_row["custom_logical_rack"] = custom_logical_rack; - if (this.item_details.$component.is(":visible")) - this.edit_item_details_of(item_row); - if (this.check_serial_batch_selection_needed(item_row) && !this.item_details.$component.is(":visible")) - this.edit_item_details_of(item_row); - } - } catch (error) { - console.log(error); - } finally { - var total_incoming_rate = 0; - this.frm.doc.items.forEach((item) => { - total_incoming_rate += parseFloat(item.valuation_rate) * item.qty; - }); - this.item_selector.update_total_incoming_rate(total_incoming_rate); - return item_row; - } - } - raise_customer_selection_alert() { - frappe.dom.unfreeze(); - frappe.show_alert({ - message: __("You must select a customer before adding an item."), - indicator: "orange" - }); - frappe.utils.play_sound("error"); - } - async get_product_bundle(item_code) { - const response = await frappe.call({ - method: "posnext.doc_events.item.get_product_bundle_with_items", - args: { - item_code - } - }); - return response.message; - } - get_item_from_frm({ name, item_code, batch_no, uom, rate }) { - let item_row = null; - if (name) { - item_row = this.frm.doc.items.find((i2) => i2.name == name); - } else { - for (var i = 0; i < cur_frm.doc.items.length; i += 1) { - const has_batch_no = batch_no !== "null" && batch_no !== null; - const batch_no_check = this.settings.custom_allow_add_new_items_on_new_line ? has_batch_no && cur_frm.doc.items[i].batch_no === batch_no : true; - if (cur_frm.doc.items[i].item_code === item_code && cur_frm.doc.items[i].uom === uom && parseFloat(cur_frm.doc.items[i].rate) === parseFloat(rate) && batch_no_check) { - item_row = cur_frm.doc.items[i]; - break; - } - } - console.log(item_row); - } - return item_row || {}; - } - edit_item_details_of(item_row) { - this.item_details.toggle_item_details_section(item_row); - } - is_current_item_being_edited(item_row) { - return item_row.name == this.item_details.current_item.name; - } - update_cart_html(item_row, remove_item) { - this.cart.update_item_html(item_row, remove_item); - this.cart.update_totals_section(this.frm); - } - check_serial_batch_selection_needed(item_row) { - const serialized = item_row.has_serial_no; - const batched = item_row.has_batch_no; - const no_serial_selected = !item_row.serial_no; - const no_batch_selected = !item_row.batch_no; - if (serialized && no_serial_selected || batched && no_batch_selected || serialized && batched && (no_batch_selected || no_serial_selected)) { - return true; - } - return false; - } - async trigger_new_item_events(item_row) { - await this.frm.script_manager.trigger("item_code", item_row.doctype, item_row.name); - await this.frm.script_manager.trigger("qty", item_row.doctype, item_row.name); - await this.frm.script_manager.trigger("discount_percentage", item_row.doctype, item_row.name); - } - async check_stock_availability(item_row, qty_needed, warehouse) { - const resp = (await this.get_available_stock(item_row.item_code, warehouse)).message; - const available_qty = resp[0]; - const is_stock_item = resp[1]; - frappe.dom.unfreeze(); - const bold_uom = item_row.uom.bold(); - const bold_item_code = item_row.item_code.bold(); - const bold_warehouse = warehouse.bold(); - const bold_available_qty = available_qty.toString().bold(); - if (!(available_qty > 0)) { - if (is_stock_item) { - frappe.model.clear_doc(item_row.doctype, item_row.name); - frappe.throw({ - title: __("Not Available"), - message: __("Item Code: {0} is not available under warehouse {1}.", [bold_item_code, bold_warehouse]) - }); - } else { - return; - } - } else if (is_stock_item && available_qty < qty_needed) { - frappe.throw({ - message: __("Stock quantity not enough for Item Code: {0} under warehouse {1}. Available quantity {2} {3}.", [bold_item_code, bold_warehouse, bold_available_qty, bold_uom]), - indicator: "orange" - }); - frappe.utils.play_sound("error"); - } - frappe.dom.freeze(); - } - async check_serial_no_availablilty(item_code, warehouse, serial_no) { - const method = "erpnext.stock.doctype.serial_no.serial_no.get_pos_reserved_serial_nos"; - const args = { filters: { item_code, warehouse } }; - const res = await frappe.call({ method, args }); - if (res.message.includes(serial_no)) { - frappe.throw({ - title: __("Not Available"), - message: __("Serial No: {0} has already been transacted into another Sales Invoice.", [serial_no.bold()]) - }); - } - } - get_available_stock(item_code, warehouse) { - const me = this; - return frappe.call({ - method: "erpnext.accounts.doctype.pos_invoice.pos_invoice.get_stock_availability", - args: { - "item_code": item_code, - "warehouse": warehouse - }, - callback(res) { - if (!me.item_stock_map[item_code]) - me.item_stock_map[item_code] = {}; - me.item_stock_map[item_code][warehouse] = res.message; - } - }); - } - update_item_field(value, field_or_action) { - if (field_or_action === "checkout") { - this.item_details.toggle_item_details_section(null); - } else if (field_or_action === "remove") { - this.remove_item_from_cart(); - } else { - const field_control = this.item_details[`${field_or_action}_control`]; - if (!field_control) - return; - field_control.set_focus(); - value != "" && field_control.set_value(value); - } - } - remove_item_from_cart() { - frappe.dom.freeze(); - const { doctype, name, current_item } = this.item_details; - return frappe.model.set_value(doctype, name, "qty", 0).then(() => { - frappe.model.clear_doc(doctype, name); - this.update_cart_html(current_item, true); - this.item_details.toggle_item_details_section(null); - frappe.dom.unfreeze(); - var total_incoming_rate = 0; - this.frm.doc.items.forEach((item) => { - total_incoming_rate += parseFloat(item.valuation_rate) * item.qty; - }); - this.item_selector.update_total_incoming_rate(total_incoming_rate); - }).catch((e) => console.log(e)); - } - async save_and_checkout() { - if (this.frm.is_dirty()) { - const div = document.getElementById("customer-cart-container2"); - div.style.gridColumn = ""; - let save_error = false; - await this.frm.save(null, null, null, () => save_error = true); - !save_error && this.payment.checkout(); - save_error && setTimeout(() => { - this.cart.toggle_checkout_btn(true); - }, 300); - } else { - this.payment.checkout(); - } - } - async save_and_checkout() { - if (!this.frm.doc.items || this.frm.doc.items.length === 0) { - frappe.show_alert({ - message: __("Please add items to cart before checkout."), - indicator: "red" - }); - frappe.utils.play_sound("error"); - return; - } - if (this.frm.is_dirty()) { - if (this.settings.custom_add_reference_details) { - const dialog = new frappe.ui.Dialog({ - title: __("Enter Reference Details"), - fields: [ - { - fieldtype: "Data", - label: __("Reference Number"), - fieldname: "reference_no" - }, - { - fieldtype: "Data", - label: __("Reference Name"), - fieldname: "reference_name" - } - ], - primary_action_label: __("Proceed to Payment"), - primary_action: async (values) => { - this.frm.doc.custom_reference_no = values.reference_no; - this.frm.doc.custom_reference_name = values.reference_name; - const div = document.getElementById("customer-cart-container2"); - div.style.gridColumn = ""; - let save_error = false; - await this.frm.save(null, null, null, () => save_error = true); - dialog.hide(); - if (!save_error) { - this.payment.checkout(); - } else { - setTimeout(() => { - this.cart.toggle_checkout_btn(true); - }, 300); - } - } - }); - dialog.show(); - } else { - const div = document.getElementById("customer-cart-container2"); - div.style.gridColumn = ""; - let save_error = false; - await this.frm.save(null, null, null, () => save_error = true); - !save_error && this.payment.checkout(); - save_error && setTimeout(() => { - this.cart.toggle_checkout_btn(true); - }, 300); - } - } else { - this.payment.checkout(); - } - } - }; - - // ../posnext/posnext/public/js/pos_item_selector.js - frappe.provide("posnext.PointOfSale"); - var view = "List"; - posnext.PointOfSale.ItemSelector = class { - constructor({ frm, wrapper, events, pos_profile, settings, currency, init_item_cart, reload_status }) { - this.wrapper = wrapper; - this.events = events; - this.currency = currency; - this.pos_profile = pos_profile; - this.hide_images = settings.hide_images; - this.reload_status = reload_status; - this.auto_add_item = settings.auto_add_item_to_cart; - if (settings.custom_default_view) { - view = settings.custom_default_view; - } - if (settings.custom_show_only_list_view) { - view = "List"; - } - if (settings.custom_show_only_card_view) { - view = "Card"; - } - this.custom_show_item_code = settings.custom_show_item_code; - this.custom_show_last_incoming_rate = settings.custom_show_last_incoming_rate; - this.custom_show_oem_part_number = settings.custom_show_oem_part_number; - this.custom_show_posting_date = settings.custom_show_posting_date; - this.custom_show_logical_rack = settings.custom_show_logical_rack; - this.show_only_list_view = settings.custom_show_only_list_view; - this.show_only_card_view = settings.custom_show_only_card_view; - this.custom_edit_rate = settings.custom_edit_rate_and_uom; - this.custom_show_incoming_rate = settings.custom_show_incoming_rate && settings.custom_edit_rate_and_uom; - this.inti_component(); - } - inti_component() { - this.prepare_dom(); - this.make_search_bar(); - this.load_items_data(); - this.bind_events(); - this.attach_shortcuts(); - } - prepare_dom() { - var cardlist = ``; - if (!this.show_only_list_view && !this.show_only_card_view) { - cardlist = ` -
List
-
Card
- `; - } - if (view === "Card" && !this.show_only_list_view) { - var tir = ``; - if (this.custom_show_last_incoming_rate || this.custom_show_incoming_rate) { - tir = `
`; - } - this.wrapper.append( - `
-
` + cardlist + `
-
- -
-
` + tir + ` - -
-
-
- ` - ); - this.$component = this.wrapper.find(".items-selector"); - this.$items_container = this.$component.find(".items-container"); - } else if (view === "List" && !this.show_only_card_view) { - var section = `
`; - var tir = ``; - if (this.custom_edit_rate) { - section = `
`; - } - if (this.custom_show_last_incoming_rate || this.custom_show_incoming_rate) { - tir = `
`; - } - this.wrapper.append( - section + `
` + cardlist + `
-
- -
-
` + tir + ` - -
-
-
` - ); - this.$component = this.wrapper.find(".customer-cart-container"); - this.$items_container = this.$component.find(".cart-container"); - } - if (!this.show_only_list_view && !this.show_only_card_view) { - this.$list_view = this.$component.find(".list-view"); - this.$card_view = this.$component.find(".card-view"); - if (view === "List" && !this.show_only_list_view) { - this.$list_view.find(".list-span").css({ - "display": "inline-block", - "background-color": "#3498db", - "color": "white", - "padding": "3px 3px", - "border-radius": "20px", - "font-size": "12px", - "font-weight": "bold", - "text-transform": "uppercase", - "letter-spacing": "1px", - "cursor": "pointer", - "transition": "background-color 0.3s ease" - }); - this.$card_view.find(".card-span").css({ - "display": "", - "background-color": "", - "color": "", - "padding": "3px 3px", - "border-radius": "", - "font-size": "", - "font-weight": "", - "text-transform": "", - "letter-spacing": "", - "cursor": "", - "transition": "" - }); - } else if (view === "Card" && !this.show_only_card_view) { - this.$card_view.find(".card-span").css({ - "display": "inline-block", - "background-color": "#3498db", - "color": "white", - "padding": "3px 3px", - "border-radius": "20px", - "font-size": "12px", - "font-weight": "bold", - "text-transform": "uppercase", - "letter-spacing": "1px", - "cursor": "pointer", - "transition": "background-color 0.3s ease" - }); - this.$list_view.find(".list-span").css({ - "display": "", - "background-color": "", - "color": "", - "padding": "3px 3px", - "border-radius": "", - "font-size": "", - "font-weight": "", - "text-transform": "", - "letter-spacing": "", - "cursor": "", - "transition": "" - }); - } else { - this.$list_view.find(".list-span").css({ "display": "none" }); - this.$card_view.find(".card-span").css({ "display": "none" }); - } - if (!this.show_only_card_view && !this.show_only_list_view) { - this.click_functions(); - } - } - } - click_functions() { - this.$list_view.on("click", "a", () => { - this.$list_view.find(".list-span").css({ "display": "inline-block", "background-color": "#3498db", "color": "white", "padding": "5px 10px", "border-radius": "20px", "font-size": "14px", "font-weight": "bold", "text-transform": "uppercase", "letter-spacing": "1px", "cursor": "pointer", "transition": "background-color 0.3s ease" }); - this.$card_view.find(".card-span").css({ "display": "", "background-color": "", "color": "", "padding": "", "border-radius": "", "font-size": "", "font-weight": "", "text-transform": "", "letter-spacing": "", "cursor": "", "transition": "" }); - view = "List"; - if (document.getElementById("card-view-section")) - document.getElementById("card-view-section").remove(); - if (document.getElementById("list-view-section")) - document.getElementById("list-view-section").remove(); - if (document.getElementById("customer-cart-container2")) - document.getElementById("customer-cart-container2").remove(); - if (document.getElementById("item-details-container")) - document.getElementById("item-details-container").remove(); - this.inti_component(); - this.events.init_item_details(); - this.events.init_item_cart(); - this.events.change_items(this.events.get_frm()); - }); - this.$card_view.on("click", "a", () => { - this.$card_view.find(".card-span").css({ "display": "inline-block", "background-color": "#3498db", "color": "white", "padding": "5px 10px", "border-radius": "20px", "font-size": "14px", "font-weight": "bold", "text-transform": "uppercase", "letter-spacing": "1px", "cursor": "pointer", "transition": "background-color 0.3s ease" }); - this.$list_view.find(".list-span").css({ "display": "", "background-color": "", "color": "", "padding": "", "border-radius": "", "font-size": "", "font-weight": "", "text-transform": "", "letter-spacing": "", "cursor": "", "transition": "" }); - view = "Card"; - if (document.getElementById("card-view-section")) - document.getElementById("card-view-section").remove(); - if (document.getElementById("list-view-section")) - document.getElementById("list-view-section").remove(); - if (document.getElementById("customer-cart-container2")) - document.getElementById("customer-cart-container2").remove(); - if (document.getElementById("item-details-container")) - document.getElementById("item-details-container").remove(); - this.inti_component(); - this.events.init_item_details(); - this.events.init_item_cart(); - this.events.change_items(this.events.get_frm()); - }); - } - async load_items_data() { - if (!this.item_group) { - const res = await frappe.db.get_value("Item Group", { lft: 1, is_group: 1 }, "name"); - this.parent_item_group = res.message.name; - } - if (!this.price_list) { - const res = await frappe.db.get_value("POS Profile", this.pos_profile, "selling_price_list"); - this.price_list = res.message.selling_price_list; - } - this.get_items({}).then(({ message }) => { - this.render_item_list(message.items); - }); - } - get_items({ start = 0, page_length = 40, search_term = "" }) { - const doc = this.events.get_frm().doc; - const price_list = doc && doc.selling_price_list || this.price_list; - let { item_group, pos_profile } = this; - !item_group && (item_group = this.parent_item_group); - return frappe.call({ - method: "posnext.posnext.page.posnext.point_of_sale.get_items", - freeze: true, - args: { start, page_length, price_list, item_group, search_term, pos_profile } - }); - } - render_item_list(items) { - this.$items_container.html(""); - var me = this; - if (view === "List") { - let get_item_code_header2 = function() { - var flex_value = 3; - if (!me.custom_show_item_code && !me.custom_show_last_incoming_rate && !me.custom_show_oem_part_number && !me.custom_show_logical_rack) { - flex_value = 2; - } - var html_header = ``; - if (me.custom_show_item_code) { - html_header += `
${__("Item Code")}
`; - } - if (me.custom_show_last_incoming_rate) { - html_header += `
${__("Inc.Rate")}
`; - } - if (me.custom_show_oem_part_number) { - html_header += `
${__("OEM")}
${__("Part No.")}
`; - } - if (me.custom_show_logical_rack) { - html_header += `
${__("Rack")}
`; - } - if (flex_value > 0) { - return `
${__("Item")}
` + html_header; - } else { - return `
${__("Item")}
` + html_header; - } - }; - var get_item_code_header = get_item_code_header2; - this.$items_container.append( - `
-
- ${get_item_code_header2()} -
${__("Rate")}
-
${__("Avail. Qty")}
- -
-
-
` - ); - this.make_cart_items_section(); - items.forEach((item) => { - this.render_cart_item(item); - }); - } else { - items.forEach((item) => { - var item_html = this.get_item_html(item); - this.$items_container.append(item_html); - }); - } - } - make_cart_items_section() { - this.$cart_header = this.$component.find(".cart-header"); - this.$cart_items_wrapper = this.$component.find(".cart-items-section"); - } - get_cart_item({ name }) { - const item_selector = `.cart-item-wrapper[data-row-name="${escape(name)}"]`; - return this.$cart_items_wrapper.find(item_selector); - } - get_cart_item1({ item_code }) { - const item_selector = `.cart-item-wrapper[data-row-name="${escape(item_code)}"]`; - return this.$cart_items_wrapper.find(item_selector); - } - render_cart_item(item_data) { - console.log("Rener cart item"); - console.log(item_data); - const me = this; - const currency = me.events.get_frm().currency || me.currency; - this.$cart_items_wrapper.append( - `
-
` - ); - var $item_to_update = this.get_cart_item1(item_data); - $item_to_update.html( - `${get_item_image_html()} - ${get_item_name()} - -
- ${item_data.item_name} -
- ${get_description_html()} -
- ${get_item_code()} - ${get_rate_discount_html()}` - ); - function get_item_name() { - var flex_value = 4; - if (me.custom_show_item_code && me.custom_show_last_incoming_rate && me.custom_show_oem_part_number) { - flex_value = 3; - } - if (!me.custom_show_item_code && !me.custom_show_last_incoming_rate && !me.custom_show_oem_part_number && !me.custom_show_logical_rack) { - flex_value = 2; - } - return `
`; - } - set_dynamic_rate_header_width(); - function set_dynamic_rate_header_width() { - const rate_cols = Array.from(me.$cart_items_wrapper.find(".item-rate-amount")); - me.$cart_header.find(".rate-amount-header").css("width", ""); - me.$cart_items_wrapper.find(".item-rate-amount").css("width", ""); - var max_width = rate_cols.reduce((max_width2, elm) => { - if ($(elm).width() > max_width2) - max_width2 = $(elm).width(); - return max_width2; - }, 0); - max_width += 1; - if (max_width == 1) - max_width = ""; - me.$cart_header.find(".rate-amount-header").css("width", max_width); - me.$cart_items_wrapper.find(".item-rate-amount").css("width", max_width); - } - function get_item_code() { - var html_code = ``; - if (me.custom_show_item_code) { - var item_code_flex_value = 1; - html_code += `
-
- ${item_data.item_code}
- ${item_data.uom} -
-
`; - } - if (me.custom_show_last_incoming_rate) { - html_code += `
-
- ${parseFloat(item_data.valuation_rate).toFixed(2)} -
-
`; - } - if (me.custom_show_oem_part_number) { - html_code += `
-
- ${item_data.custom_oem_part_number || ""} -
-
`; - } - if (me.custom_show_logical_rack) { - html_code += `
-
- ${item_data.rack || ""} -
-
`; - } - return html_code; - } - function get_rate_discount_html() { - if (item_data.rate && item_data.amount && item_data.rate !== item_data.amount) { - return ` -
-
-
${format_currency(item_data.price_list_rate, currency)}
-
-
${item_data.actual_qty || 0}
-
${item_data.batch_no || 0}
- -
`; - } else { - return ` -
-
-
${format_currency(item_data.price_list_rate, currency)}
-
-
${item_data.actual_qty || 0}
-
${item_data.batch_no || 0}
- -
`; - } - } - function get_description_html() { - if (item_data.description) { - if (item_data.description.indexOf("
") != -1) { - try { - item_data.description = $(item_data.description).text(); - } catch (error) { - item_data.description = item_data.description.replace(/
/g, " ").replace(/<\/div>/g, " ").replace(/ +/g, " "); - } - } - item_data.description = frappe.ellipsis(item_data.description, 45); - return `
${item_data.description}
`; - } - return ``; - } - function get_item_image_html() { - const { image, item_name } = item_data; - if (!me.hide_images && image) { - return ` -
- ${frappe.get_abbr(item_name)} -
`; - } else { - return `
${frappe.get_abbr(item_name)}
`; - } - } - } - get_item_html(item) { - const me = this; - item.currency = item.currency || me.currency; - const { item_image, serial_no, batch_no, barcode, actual_qty, uom, price_list_rate } = item; - const precision2 = flt(price_list_rate, 2) % 1 != 0 ? 2 : 0; - let indicator_color; - let qty_to_display = actual_qty; - if (item.is_stock_item) { - indicator_color = actual_qty > 10 ? "green" : actual_qty <= 0 ? "red" : "orange"; - if (Math.round(qty_to_display) > 999) { - qty_to_display = Math.round(qty_to_display) / 1e3; - qty_to_display = qty_to_display.toFixed(1) + "K"; - } - } else { - indicator_color = ""; - qty_to_display = ""; - } - function get_item_image_html() { - if (!me.hide_images && item_image) { - return `
- ${qty_to_display} -
-
- ${frappe.get_abbr(item.item_name)} -
`; - } else { - return `
- ${qty_to_display} -
-
${frappe.get_abbr(item.item_name)}
`; - } - } - return `
- - ${get_item_image_html()} - -
-
- ${frappe.ellipsis(item.item_name, 18)} -
-
${format_currency(price_list_rate, item.currency, precision2) || 0} / ${uom}
-
-
`; - } - handle_broken_image($img) { - const item_abbr = $($img).attr("alt"); - $($img).parent().replaceWith(`
${item_abbr}
`); - } - update_total_incoming_rate(total_rate) { - if (this.total_incoming_rate) { - this.total_incoming_rate.set_value(total_rate); - } - } - make_search_bar() { - const me = this; - const doc = me.events.get_frm().doc; - this.$component.find(".search-field").html(""); - this.$component.find(".pos-profile").html(""); - this.$component.find(".total-incoming-rate").html(""); - this.$component.find(".item-group-field").html(""); - this.$component.find(".invoice-posting-date").html(""); - frappe.db.get_single_value("POS Settings", "custom_profile_lock").then((doc2) => { - this.pos_profile_field = frappe.ui.form.make_control({ - df: { - label: __("POS Profile"), - fieldtype: "Link", - options: "POS Profile", - placeholder: __("POS Profile"), - read_only: doc2, - onchange: function() { - if (me.reload_status && me.pos_profile !== this.value) { - frappe.pages["posnext"].refresh(window.wrapper, window.onScan, this.value); - } - } - }, - parent: this.$component.find(".pos-profile"), - render_input: false - }); - this.pos_profile_field.set_value(me.pos_profile); - this.pos_profile_field.refresh(); - this.pos_profile_field.toggle_label(false); - }); - this.search_field = frappe.ui.form.make_control({ - df: { - label: __("Search"), - fieldtype: "Data", - placeholder: __("Search by serial number or barcode") - }, - parent: this.$component.find(".search-field"), - render_input: true - }); - this.item_group_field = frappe.ui.form.make_control({ - df: { - label: __("Item Group"), - fieldtype: "Link", - options: "Item Group", - placeholder: __("Select item group"), - onchange: function() { - me.item_group = this.value; - !me.item_group && (me.item_group = me.parent_item_group); - me.filter_items(); - }, - get_query: function() { - return { - query: "posnext.posnext.page.posnext.point_of_sale.item_group_query", - filters: { - pos_profile: doc ? doc.pos_profile : "" - } - }; - } - }, - parent: this.$component.find(".item-group-field"), - render_input: true - }); - if (this.custom_show_last_incoming_rate || this.custom_show_incoming_rate) { - this.total_incoming_rate = frappe.ui.form.make_control({ - df: { - label: __(""), - fieldtype: "Currency", - read_only: 1, - placeholder: __("Total Incoming Rate"), - default: 0 - }, - parent: this.$component.find(".total-incoming-rate"), - render_input: true - }); - } - if (me.custom_show_posting_date) { - this.invoice_posting_date = frappe.ui.form.make_control({ - df: { - label: __("Posting Date"), - fieldtype: "Date", - onchange: function() { - me.events.get_frm().doc.posting_date = this.value; - me.events.get_frm().doc.set_posting_time = 1; - } - }, - parent: this.$component.find(".invoice-posting-date"), - render_input: true - }); - } - this.search_field.toggle_label(false); - this.item_group_field.toggle_label(false); - if (this.custom_show_last_incoming_rate) { - this.total_incoming_rate.toggle_label(false); - } - if (me.custom_show_posting_date) { - this.invoice_posting_date.toggle_label(false); - this.invoice_posting_date.set_value(frappe.datetime.get_today()); - } - this.attach_clear_btn(); - } - attach_clear_btn() { - this.search_field.$wrapper.find(".control-input").append( - ` - - ${frappe.utils.icon("close", "sm")} - - ` - ); - this.$clear_search_btn = this.search_field.$wrapper.find(".link-btn"); - this.$clear_search_btn.on("click", "a", () => { - this.set_search_value(""); - this.search_field.set_focus(); - }); - } - set_search_value(value) { - $(this.search_field.$input[0]).val(value).trigger("input"); - } - bind_events() { - const me = this; - if (!window.onScan) { - frappe.require("https://cdn.jsdelivr.net/npm/onscan.js/onscan.min.js", function() { - window.onScan = onScan; - onScan.decodeKeyEvent = function(oEvent) { - var iCode = this._getNormalizedKeyNum(oEvent); - switch (true) { - case (iCode >= 48 && iCode <= 90): - case (iCode >= 106 && iCode <= 111): - case (iCode >= 160 && iCode <= 164 || iCode == 170): - case (iCode >= 186 && iCode <= 194): - case (iCode >= 219 && iCode <= 222): - case iCode == 32: - if (oEvent.key !== void 0 && oEvent.key !== "") { - return oEvent.key; - } - var sDecoded = String.fromCharCode(iCode); - switch (oEvent.shiftKey) { - case false: - sDecoded = sDecoded.toLowerCase(); - break; - case true: - sDecoded = sDecoded.toUpperCase(); - break; - } - return sDecoded; - case (iCode >= 96 && iCode <= 105): - return 0 + (iCode - 96); - } - return ""; - }; - onScan.attachTo(document, { - onScan: (sScancode) => { - if (this.search_field && this.$component.is(":visible")) { - this.search_field.set_focus(); - this.set_search_value(sScancode); - this.barcode_scanned = true; - } - } - }); - }); - } - this.$component.on("click", ".item-wrapper", function() { - console.log("Item Selected"); - const $item = $(this); - const item_code = unescape($item.attr("data-item-code")); - let batch_no = unescape($item.attr("data-batch-no")); - let serial_no = unescape($item.attr("data-serial-no")); - let uom = unescape($item.attr("data-uom")); - let rate = unescape($item.attr("data-rate")); - let valuation_rate = unescape($item.attr("data-valuation-rate")); - let custom_item_uoms = $item.attr("data-item-uoms"); - let custom_logical_rack = $item.attr("data-item-logical-rack"); - batch_no = batch_no === "undefined" ? void 0 : batch_no; - serial_no = serial_no === "undefined" ? void 0 : serial_no; - uom = uom === "undefined" ? void 0 : uom; - rate = rate === "undefined" ? void 0 : rate; - me.events.item_selected({ - field: "qty", - value: "+1", - item: { item_code, batch_no, serial_no, uom, rate, valuation_rate, custom_item_uoms, custom_logical_rack } - }); - }); - this.search_field.$input.on("input", (e) => { - clearTimeout(this.last_search); - this.last_search = setTimeout(() => { - const search_term = e.target.value; - this.filter_items({ search_term }); - }, 300); - }); - } - attach_shortcuts() { - const ctrl_label = frappe.utils.is_mac() ? "\u2318" : "Ctrl"; - this.search_field.parent.attr("title", `${ctrl_label}+I`); - frappe.ui.keys.add_shortcut({ - shortcut: "ctrl+i", - action: () => this.search_field.set_focus(), - condition: () => this.$component.is(":visible"), - description: __("Focus on search input"), - ignore_inputs: true, - page: cur_page.page.page - }); - this.item_group_field.parent.attr("title", `${ctrl_label}+G`); - frappe.ui.keys.add_shortcut({ - shortcut: "ctrl+g", - action: () => this.item_group_field.set_focus(), - condition: () => this.$component.is(":visible"), - description: __("Focus on Item Group filter"), - ignore_inputs: true, - page: cur_page.page.page - }); - frappe.ui.keys.on("enter", () => { - const selector_is_visible = this.$component.is(":visible"); - if (!selector_is_visible || this.search_field.get_value() === "") - return; - if (this.items.length == 1) { - this.$items_container.find(".item-wrapper").click(); - frappe.utils.play_sound("submit"); - this.set_search_value(""); - } else if (this.items.length == 0 && this.barcode_scanned) { - frappe.show_alert({ - message: __("No items found. Scan barcode again."), - indicator: "orange" - }); - frappe.utils.play_sound("error"); - this.barcode_scanned = false; - this.set_search_value(""); - } - }); - } - filter_items({ search_term = "" } = {}) { - if (search_term) { - search_term = search_term.toLowerCase(); - this.search_index = this.search_index || {}; - if (this.search_index[search_term]) { - const items = this.search_index[search_term]; - this.items = items; - this.render_item_list(items); - this.auto_add_item && this.items.length == 1; - return; - } - } - this.get_items({ search_term }).then(({ message }) => { - const { items, serial_no, batch_no, barcode } = message; - if (search_term && !barcode) { - this.search_index[search_term] = items; - } - this.items = items; - this.render_item_list(items); - this.auto_add_item && this.items.length == 1; - }); - } - add_filtered_item_to_cart() { - this.$items_container.find(".item-wrapper").click(); - this.set_search_value(""); - } - resize_selector(minimize) { - minimize ? this.$component.find(".filter-section").css("grid-template-columns", "repeat(1, minmax(0, 1fr))") : this.$component.find(".filter-section").css("grid-template-columns", "repeat(12, minmax(0, 1fr))"); - minimize ? this.$component.find(".search-field").css("margin", "var(--margin-sm) 0px") : this.$component.find(".search-field").css("margin", "0px var(--margin-sm)"); - minimize ? this.$component.css("grid-column", "span 2 / span 2") : this.$component.css("grid-column", "span 6 / span 6"); - minimize ? this.$items_container.css("grid-template-columns", "repeat(1, minmax(0, 1fr))") : this.$items_container.css("grid-template-columns", "repeat(4, minmax(0, 1fr))"); - } - toggle_component(show) { - this.set_search_value(""); - this.$component.css("display", show ? "flex" : "none"); - } - }; - - // ../posnext/posnext/public/js/pos_item_cart.js - frappe.provide("posnext.PointOfSale"); - posnext.PointOfSale.ItemCart = class { - constructor({ wrapper, events, settings }) { - this.wrapper = wrapper; - this.events = events; - this.customer_info = void 0; - this.hide_images = settings.hide_images; - this.allowed_customer_groups = settings.customer_groups; - this.allow_rate_change = settings.allow_rate_change; - this.allow_discount_change = settings.allow_discount_change; - this.show_held_button = settings.custom_show_held_button; - this.show_order_list_button = settings.custom_show_order_list_button; - this.mobile_number_based_customer = settings.custom_mobile_number_based_customer; - this.show_checkout_button = settings.custom_show_checkout_button; - this.custom_edit_rate = settings.custom_edit_rate_and_uom; - this.custom_use_discount_percentage = settings.custom_use_discount_percentage; - this.custom_use_discount_amount = settings.custom_use_discount_amount; - this.custom_use_additional_discount_amount = settings.custom_use_additional_discount_amount; - this.custom_show_incoming_rate = settings.custom_show_incoming_rate && settings.custom_edit_rate_and_uom; - this.custom_show_last_customer_rate = settings.custom_show_last_customer_rate; - this.custom_show_logical_rack_in_cart = settings.custom_show_logical_rack_in_cart && settings.custom_edit_rate_and_uom; - this.custom_show_uom_in_cart = settings.custom_show_uom_in_cart && settings.custom_edit_rate_and_uom; - this.show_branch = settings.show_branch; - this.show_batch_in_cart = settings.show_batch_in_cart; - this.settings = settings; - this.warehouse = settings.warehouse; - this.init_component(); - } - init_component() { - this.prepare_dom(); - this.init_child_components(); - this.bind_events(); - this.attach_shortcuts(); - } - prepare_dom() { - if (this.custom_edit_rate) { - this.wrapper.append( - `
` - ); - } else { - this.wrapper.append( - `
` - ); - } - this.$component = this.wrapper.find(".customer-cart-container1"); - } - init_child_components() { - this.init_customer_selector(); - this.init_cart_components(); - } - init_customer_selector() { - this.$component.append( - `
` - ); - this.$customer_section = this.$component.find(".customer-section"); - this.make_customer_selector(); - } - reset_customer_selector() { - const frm = this.events.get_frm(); - frm.set_value("customer", ""); - this.make_customer_selector(); - this.customer_field.set_focus(); - } - init_cart_components() { - var html = `
-
-
${__("Item Cart")}
-
-
${__("Item")}
-
${__("Qty")}
- `; - if (this.custom_show_uom_in_cart) { - html += `
${__("UOM")}
`; - } - if (this.show_batch_in_cart) { - html += `
${__("Batch")}
`; - } - if (this.custom_edit_rate) { - html += `
${__("Rate")}
`; - } - if (this.custom_use_discount_percentage) { - html += `
${__("Disc%")}
`; - } - if (this.custom_use_discount_amount) { - html += `
${__("Disc")}
`; - } - if (this.custom_show_incoming_rate) { - html += `
${__("Inc.Rate")}
`; - } - if (this.custom_show_logical_rack_in_cart) { - html += `
${__("Rack")}
`; - } - if (this.custom_show_last_customer_rate) { - html += `
${__("LC Rate")}
`; - } - html += `
${__("Amount")}
-
-
-
-
-
-
-
`; - this.$component.append(html); - this.$cart_container = this.$component.find(".cart-container"); - this.make_branch_section(); - this.make_cart_totals_section(); - this.make_cart_items_section(); - this.make_cart_numpad(); - } - make_cart_items_section() { - this.$cart_header = this.$component.find(".cart-header"); - this.$cart_items_wrapper = this.$component.find(".cart-items-section"); - this.make_no_items_placeholder(); - } - make_no_items_placeholder() { - this.$cart_header.css("display", "none"); - this.$cart_items_wrapper.html( - `
${__("No items in cart")}
` - ); - } - get_discount_icon() { - return ` - - - - - `; - } - get_branch_icon() { - return ` - - - - `; - } - make_branch_section() { - if (this.show_branch) { - this.$branch_section = this.$component.find(".cart-branch-section"); - if (this.$branch_section.length) { - this.$branch_section.append(` -
-
- ${this.get_branch_icon()} ${__("Add Branch")} -
- `); - this.$branch_section.find(".add-branch-wrapper").css({ - "display": "flex", - "align-items": "center", - "gap": "8px", - "border": "2px dashed #ccc", - "padding": "10px", - "border-radius": "6px", - "cursor": "pointer", - "font-weight": "bold" - }); - this.$branch_section.find(".add-branch-wrapper").hover( - function() { - $(this).css("background-color", "#f9f9f9"); - }, - function() { - $(this).css("background-color", "transparent"); - } - ); - } - } - } - make_cart_totals_section() { - this.$totals_section = this.$component.find(".cart-totals-section"); - this.$totals_section.append( - `
- ${this.get_discount_icon()} ${__("Add Discount")} -
-
-
${__("Total Items")}
-
0.00
-
-
-
${__("Net Total")}
-
0.00
-
-
-
-
${__("Grand Total")}
-
0.00
-
-
-
${__("Checkout")}
-
${__("Held")}
-
${__("Order List")}
-
-
${__("Edit Cart")}
` - ); - this.$add_discount_elem = this.$component.find(".add-discount-wrapper"); - this.highlight_checkout_btn(true); - } - make_cart_numpad() { - this.$numpad_section = this.$component.find(".numpad-section"); - this.number_pad = new posnext.PointOfSale.NumberPad({ - wrapper: this.$numpad_section, - events: { - numpad_event: this.on_numpad_event.bind(this) - }, - cols: 5, - keys: [ - [1, 2, 3, "Quantity"], - [4, 5, 6, "Discount"], - [7, 8, 9, "Rate"], - [".", 0, "Delete", "Remove"] - ], - css_classes: [ - ["", "", "", "col-span-2"], - ["", "", "", "col-span-2"], - ["", "", "", "col-span-2"], - ["", "", "", "col-span-2 remove-btn"] - ], - fieldnames_map: { "Quantity": "qty", "Discount": "discount_percentage" } - }); - this.$numpad_section.prepend( - `
- - - -
` - ); - this.$numpad_section.append( - `
${__("Checkout")}
` - ); - } - bind_events() { - const me = this; - this.$customer_section.on("click", ".reset-customer-btn", function() { - me.reset_customer_selector(); - }); - this.$customer_section.on("click", ".close-details-btn", function() { - me.toggle_customer_info(false); - }); - this.$customer_section.on("click", ".customer-display", function(e) { - if ($(e.target).closest(".reset-customer-btn").length) - return; - const show = me.$cart_container.is(":visible"); - me.toggle_customer_info(show); - }); - if (!me.custom_edit_rate) { - this.$cart_items_wrapper.on("click", ".cart-item-wrapper", function() { - const $cart_item = $(this); - me.toggle_item_highlight(this); - const payment_section_hidden = !me.$totals_section.find(".edit-cart-btn").is(":visible"); - if (!payment_section_hidden) { - me.$totals_section.find(".edit-cart-btn").click(); - } - const item_row_name = unescape($cart_item.attr("data-row-name")); - me.events.cart_item_clicked({ name: item_row_name }); - this.numpad_value = ""; - }); - } - this.$component.on("click", ".checkout-btn", async function() { - if ($(this).attr("style").indexOf("--blue-500") == -1) - return; - if ($(this).attr("class").indexOf("checkout-btn-held") !== -1) - return; - if ($(this).attr("class").indexOf("checkout-btn-order") !== -1) - return; - if (!cur_frm.doc.customer && me.mobile_number_based_customer) { - let d = new frappe.ui.Dialog({ - title: "Enter Mobile Number", - fields: [ - { - label: "Mobile Number", - fieldname: "mobile_number", - fieldtype: "Data", - reqd: 1 - }, - { - label: "", - fieldname: "mobile_number_numpad", - fieldtype: "HTML", - options: '
' - } - ], - size: "small", - primary_action_label: "Continue", - primary_action: function(values) { - if (values["mobile_number"].length !== me.settings.custom_mobile_number_length) { - frappe.throw("Mobile Number Length is " + me.settings.custom_mobile_number_length.toString()); - } - frappe.call({ - method: "posnext.posnext.page.posnext.point_of_sale.create_customer", - args: { - customer: values["mobile_number"] - }, - freeze: true, - freeze_message: "Creating Customer....", - callback: async function() { - const frm = me.events.get_frm(); - frappe.dom.freeze(); - frappe.model.set_value(frm.doc.doctype, frm.doc.name, "customer", values["mobile_number"]); - frm.script_manager.trigger("customer", frm.doc.doctype, frm.doc.name).then(() => { - frappe.run_serially([ - () => me.fetch_customer_details(values["mobile_number"]), - () => me.events.customer_details_updated(me.customer_info), - () => me.update_customer_section(), - () => frappe.dom.unfreeze() - ]); - }); - await me.events.checkout(); - me.toggle_checkout_btn(false); - me.allow_discount_change && me.$add_discount_elem.removeClass("d-none"); - d.hide(); - } - }); - } - }); - var mobile_number_numpad_div = d.wrapper.find(".mobile_number_numpad"); - mobile_number_numpad_div.append(` -
- - - - - - - - - - - - - -
`); - d.show(); - var numpad_num = d.wrapper.find(".custom-numpad"); - var numbers = ["one", "two", "three", "four", "five", "six", "seven", "eight", "nine", "zero", "plus"]; - for (var xx = 0; xx < numbers.length; xx += 1) { - numpad_num.on("click", "." + numbers[xx], function() { - var current_value = d.get_value("mobile_number"); - d.set_value("mobile_number", current_value + $(this)[0].innerHTML.toString()); - }); - } - numpad_num.on("click", ".clear", function() { - d.set_value("mobile_number", ""); - }); - numpad_num.on("click", ".delete", function() { - var current_value = d.get_value("mobile_number"); - d.set_value("mobile_number", current_value.slice(0, -1)); - }); - } else { - if (!cur_frm.doc.customer && !me.mobile_number_based_customer) { - frappe.throw("Please Select a customer and add items first"); - } - await me.events.checkout(); - me.toggle_checkout_btn(false); - me.allow_discount_change && me.$add_discount_elem.removeClass("d-none"); - } - }); - this.$component.on("click", ".checkout-btn-held", function() { - if ($(this).attr("style").indexOf("--blue-500") == -1) - return; - if (!cur_frm.doc.items || cur_frm.doc.items.length === 0) { - frappe.show_alert({ - message: __("Please add items to cart before holding."), - indicator: "red" - }); - frappe.utils.play_sound("error"); - return; - } - if (!cur_frm.doc.customer && me.mobile_number_based_customer) { - let d = new frappe.ui.Dialog({ - title: "Enter Mobile Number", - fields: [ - { - label: "Mobile Number", - fieldname: "mobile_number", - fieldtype: "Data", - reqd: 1 - }, - { - label: "", - fieldname: "mobile_number_numpad", - fieldtype: "HTML", - options: '
' - } - ], - size: "small", - primary_action_label: "Continue", - primary_action: function(values) { - if (values["mobile_number"].length !== me.settings.custom_mobile_number_length) { - frappe.throw("Mobile Number Length is " + me.settings.custom_mobile_number_length.toString()); - } - if (me.settings.custom_add_reference_details) { - me.show_reference_dialog(values["mobile_number"]); - } else { - me.hold_invoice(values["mobile_number"]); - } - d.hide(); - } - }); - me.setup_mobile_numpad(d); - d.show(); - } else { - if (me.settings.custom_add_reference_details) { - me.show_reference_dialog(); - } else { - me.hold_invoice(); - } - } - }); - this.$component.on("click", ".checkout-btn-order", () => { - this.events.toggle_recent_order(); - }); - this.$totals_section.on("click", ".edit-cart-btn", () => { - this.events.edit_cart(); - this.toggle_checkout_btn(true); - }); - this.$component.on("click", ".add-discount-wrapper", () => { - const can_edit_discount = this.$add_discount_elem.find(".edit-discount-btn").length; - if (!this.discount_field || can_edit_discount) - this.show_discount_control(); - }); - this.$component.on("click", ".add-branch-wrapper", function() { - const $wrapper = $(this); - const branchFieldWrapper = $('
'); - $wrapper.replaceWith(branchFieldWrapper); - let branchField = new frappe.ui.form.ControlLink({ - df: { - fieldtype: "Link", - options: "Branch", - fieldname: "branch", - label: "Branch", - placeholder: "Select Branch" - }, - parent: branchFieldWrapper, - value: "", - change: function(value) { - console.log("Selected Branch:", value); - } - }); - branchField.refresh(); - }); - frappe.ui.form.on("Sales Invoice", "paid_amount", (frm) => { - this.update_totals_section(frm); - }); - } - attach_shortcuts() { - for (let row of this.number_pad.keys) { - for (let btn of row) { - if (typeof btn !== "string") - continue; - let shortcut_key = `ctrl+${frappe.scrub(String(btn))[0]}`; - if (btn === "Delete") - shortcut_key = "ctrl+backspace"; - if (btn === "Remove") - shortcut_key = "shift+ctrl+backspace"; - if (btn === ".") - shortcut_key = "ctrl+>"; - const fieldname = this.number_pad.fieldnames[btn] ? this.number_pad.fieldnames[btn] : typeof btn === "string" ? frappe.scrub(btn) : btn; - let shortcut_label = shortcut_key.split("+").map(frappe.utils.to_title_case).join("+"); - shortcut_label = frappe.utils.is_mac() ? shortcut_label.replace("Ctrl", "\u2318") : shortcut_label; - this.$numpad_section.find(`.numpad-btn[data-button-value="${fieldname}"]`).attr("title", shortcut_label); - frappe.ui.keys.on(`${shortcut_key}`, () => { - const cart_is_visible = this.$component.is(":visible"); - if (cart_is_visible && this.item_is_selected && this.$numpad_section.is(":visible")) { - this.$numpad_section.find(`.numpad-btn[data-button-value="${fieldname}"]`).click(); - } - }); - } - } - const ctrl_label = frappe.utils.is_mac() ? "\u2318" : "Ctrl"; - this.$component.find(".checkout-btn").attr("title", `${ctrl_label}+Enter`); - frappe.ui.keys.add_shortcut({ - shortcut: "ctrl+enter", - action: () => this.$component.find(".checkout-btn").click(), - condition: () => this.$component.is(":visible") && !this.$totals_section.find(".edit-cart-btn").is(":visible"), - description: __("Checkout Order / Submit Order / New Order"), - ignore_inputs: true, - page: cur_page.page.page - }); - this.$component.find(".edit-cart-btn").attr("title", `${ctrl_label}+E`); - frappe.ui.keys.on("ctrl+e", () => { - const item_cart_visible = this.$component.is(":visible"); - const checkout_btn_invisible = !this.$totals_section.find(".checkout-btn").is("visible"); - if (item_cart_visible && checkout_btn_invisible) { - this.$component.find(".edit-cart-btn").click(); - } - }); - this.$component.find(".add-discount-wrapper").attr("title", `${ctrl_label}+D`); - frappe.ui.keys.add_shortcut({ - shortcut: "ctrl+d", - action: () => this.$component.find(".add-discount-wrapper").click(), - condition: () => this.$add_discount_elem.is(":visible"), - description: __("Add Order Discount"), - ignore_inputs: true, - page: cur_page.page.page - }); - frappe.ui.keys.on("escape", () => { - const item_cart_visible = this.$component.is(":visible"); - if (item_cart_visible && this.discount_field && this.discount_field.parent.is(":visible")) { - this.discount_field.set_value(0); - } - }); - } - toggle_item_highlight(item) { - const $cart_item = $(item); - const item_is_highlighted = $cart_item.attr("style") == "background-color:var(--gray-50);"; - if (!item || item_is_highlighted) { - this.item_is_selected = false; - this.$cart_container.find(".cart-item-wrapper").css("background-color", ""); - } else { - $cart_item.css("background-color", "var(--control-bg)"); - this.item_is_selected = true; - this.$cart_container.find(".cart-item-wrapper").not(item).css("background-color", ""); - } - } - make_customer_selector() { - this.$customer_section.html(` -
- `); - const me = this; - const query = { query: "posnext.controllers.queries.customer_query" }; - const allowed_customer_group = this.allowed_customer_groups || []; - if (allowed_customer_group.length) { - query.filters = { - customer_group: ["in", allowed_customer_group] - }; - } - this.customer_field = frappe.ui.form.make_control({ - df: { - label: __("Customer"), - fieldtype: "Link", - options: "Customer", - placeholder: __("Search by customer name, phone, email."), - read_only: this.mobile_number_based_customer, - get_query: () => query, - onchange: function() { - if (this.value) { - const frm = me.events.get_frm(); - frappe.dom.freeze(); - frappe.model.set_value(frm.doc.doctype, frm.doc.name, "customer", this.value); - frm.script_manager.trigger("customer", frm.doc.doctype, frm.doc.name).then(() => { - frappe.run_serially([ - () => me.fetch_customer_details(this.value), - () => me.events.customer_details_updated(me.customer_info), - () => me.update_customer_section(), - () => me.update_totals_section(), - () => frappe.dom.unfreeze() - ]); - }); - } - } - }, - parent: this.$customer_section.find(".customer-field"), - render_input: true - }); - this.customer_field.toggle_label(false); - } - fetch_customer_details(customer) { - if (customer) { - return new Promise((resolve) => { - frappe.db.get_value("Customer", customer, ["email_id", "mobile_no", "image", "loyalty_program"]).then(({ message }) => { - const { loyalty_program } = message; - if (loyalty_program) { - frappe.call({ - method: "erpnext.accounts.doctype.loyalty_program.loyalty_program.get_loyalty_program_details_with_points", - args: { customer, loyalty_program, "silent": true }, - callback: (r) => { - const { loyalty_points, conversion_factor } = r.message; - if (!r.exc) { - this.customer_info = __spreadProps(__spreadValues({}, message), { customer, loyalty_points, conversion_factor }); - resolve(); - } - } - }); - } else { - this.customer_info = __spreadProps(__spreadValues({}, message), { customer }); - resolve(); - } - }); - }); - } else { - return new Promise((resolve) => { - this.customer_info = {}; - resolve(); - }); - } - } - show_discount_control() { - this.$add_discount_elem.css({ "padding": "0px", "border": "none" }); - this.$add_discount_elem.html( - `
` - ); - const me = this; - const frm = me.events.get_frm(); - let discount = frm.doc.additional_discount_percentage; - this.discount_field = null; - if (me.custom_use_additional_discount_amount) { - this.discount_field = frappe.ui.form.make_control({ - df: { - label: __("Discount"), - fieldtype: "Data", - placeholder: discount ? discount : __("Enter discount amount."), - input_class: "input-xs", - onchange: function() { - setTimeout(() => { - if (flt(this.value) != 0) { - frappe.model.set_value(frm.doc.doctype, frm.doc.name, "discount_amount", flt(this.value)); - me.hide_discount_control(this.value); - } else { - frappe.model.set_value(frm.doc.doctype, frm.doc.name, "discount_amount", 0); - me.$add_discount_elem.css({ - "border": "1px dashed var(--gray-500)", - "padding": "var(--padding-sm) var(--padding-md)" - }); - me.$add_discount_elem.html(`${me.get_discount_icon()} ${__("Add Discount")}`); - me.discount_field = void 0; - } - }, 3e3); - } - }, - parent: this.$add_discount_elem.find(".add-discount-field"), - render_input: true - }); - } else { - this.discount_field = frappe.ui.form.make_control({ - df: { - label: __("Discount"), - fieldtype: "Data", - placeholder: discount ? discount + "%" : __("Enter discount percentage."), - input_class: "input-xs", - onchange: function() { - setTimeout(() => { - if (flt(this.value) != 0) { - frappe.model.set_value(frm.doc.doctype, frm.doc.name, "additional_discount_percentage", flt(this.value)); - me.hide_discount_control(this.value); - } else { - frappe.model.set_value(frm.doc.doctype, frm.doc.name, "additional_discount_percentage", 0); - me.$add_discount_elem.css({ - "border": "1px dashed var(--gray-500)", - "padding": "var(--padding-sm) var(--padding-md)" - }); - me.$add_discount_elem.html(`${me.get_discount_icon()} ${__("Add Discount")}`); - me.discount_field = void 0; - } - }, 3e3); - } - }, - parent: this.$add_discount_elem.find(".add-discount-field"), - render_input: true - }); - } - this.discount_field.toggle_label(false); - this.discount_field.set_focus(); - } - hide_discount_control(discount) { - if (!discount) { - this.$add_discount_elem.css({ "padding": "0px", "border": "none" }); - this.$add_discount_elem.html( - `
` - ); - } else { - this.$add_discount_elem.css({ - "border": "1px dashed var(--dark-green-500)", - "padding": "var(--padding-sm) var(--padding-md)" - }); - if (this.custom_use_additional_discount_amount) { - this.$add_discount_elem.html( - `
- ${this.get_discount_icon()} ${__("Additional")} ${String(discount).bold()} ${this.events.get_frm().doc.currency} ${__("discount applied")} -
` - ); - } else { - this.$add_discount_elem.html( - `
- ${this.get_discount_icon()} ${__("Additional")} ${String(discount).bold()}% ${__("discount applied")} -
` - ); - } - } - } - update_customer_section() { - const me = this; - const { customer, email_id = "", mobile_no = "", image } = this.customer_info || {}; - if (customer) { - this.$customer_section.html( - `
-
- ${this.get_customer_image()} -
-
${customer}
- ${get_customer_description()} -
-
- - - -
-
-
` - ); - if (this.mobile_number_based_customer) { - this.$customer_section.find(".reset-customer-btn").css("display", "none"); - } else { - this.$customer_section.find(".reset-customer-btn").css("display", "flex"); - } - } else { - this.reset_customer_selector(); - } - function get_customer_description() { - if (!email_id && !mobile_no) { - return `
${__("Click to add email / phone")}
`; - } else if (email_id && !mobile_no) { - return `
${email_id}
`; - } else if (mobile_no && !email_id) { - return `
${mobile_no}
`; - } else { - return `
${email_id} - ${mobile_no}
`; - } - } - } - get_customer_image() { - const { customer, image } = this.customer_info || {}; - if (image) { - return `
${image}
`; - } else { - return `
${frappe.get_abbr(customer)}
`; - } - } - update_totals_section(frm) { - if (!frm) - frm = this.events.get_frm(); - this.render_net_total(frm.doc.net_total); - this.render_total_item_qty(frm.doc.items); - const grand_total = cint(frappe.sys_defaults.disable_rounded_total) ? frm.doc.grand_total : frm.doc.rounded_total; - this.render_grand_total(grand_total); - this.render_taxes(frm.doc.taxes); - } - render_net_total(value) { - const currency = this.events.get_frm().doc.currency; - this.$totals_section.find(".net-total-container").html( - `
${__("Net Total")}
${format_currency(value, currency)}
` - ); - this.$numpad_section.find(".numpad-net-total").html( - `
${__("Net Total")}: ${format_currency(value, currency)}
` - ); - } - render_total_item_qty(items) { - var total_item_qty = 0; - items.map((item) => { - total_item_qty = total_item_qty + item.qty; - }); - this.$totals_section.find(".item-qty-total-container").html( - `
${__("Total Quantity")}
${total_item_qty}
` - ); - this.$numpad_section.find(".numpad-item-qty-total").html( - `
${__("Total Quantity")}: ${total_item_qty}
` - ); - } - render_grand_total(value) { - const currency = this.events.get_frm().doc.currency; - this.$totals_section.find(".grand-total-container").html( - `
${__("Grand Total")}
${format_currency(value, currency)}
` - ); - this.$numpad_section.find(".numpad-grand-total").html( - `
${__("Grand Total")}: ${format_currency(value, currency)}
` - ); - } - render_taxes(taxes) { - if (taxes && taxes.length) { - const currency = this.events.get_frm().doc.currency; - const taxes_html = taxes.map((t) => { - if (t.tax_amount_after_discount_amount == 0) - return; - const description = /[0-9]+/.test(t.description) ? t.description : t.rate != 0 ? `${t.description} @ ${t.rate}%` : t.description; - return `
-
${description}
-
${format_currency(t.tax_amount_after_discount_amount, currency)}
-
`; - }).join(""); - this.$totals_section.find(".taxes-container").css("display", "flex").html(taxes_html); - } else { - this.$totals_section.find(".taxes-container").css("display", "none").html(""); - } - } - get_cart_item({ name }) { - const item_selector = `.cart-item-wrapper[data-row-name="${escape(name)}"]`; - return this.$cart_items_wrapper.find(item_selector); - } - get_item_from_frm(item) { - const doc = this.events.get_frm().doc; - return doc.items.find((i) => i.name == item.name); - } - update_item_html(item, remove_item) { - const $item = this.get_cart_item(item); - if (remove_item) { - $item && $item.next().remove() && $item.remove(); - } else { - const item_row = this.get_item_from_frm(item); - this.render_cart_item(item_row, $item); - } - const no_of_cart_items = this.$cart_items_wrapper.find(".cart-item-wrapper").length; - this.highlight_checkout_btn(true); - this.update_empty_cart_section(no_of_cart_items); - } - render_cart_item(item_data, $item_to_update) { - const currency = this.events.get_frm().doc.currency; - const me = this; - if (!$item_to_update.length) { - this.$cart_items_wrapper.prepend( - `
-
` - ); - $item_to_update = this.get_cart_item(item_data); - } - var item_html = `${get_item_image_html()}`; - if (me.custom_use_discount_percentage && !me.custom_use_discount_amount) { - item_html += `
`; - } - if (me.custom_use_discount_amount && !me.custom_use_discount_percentage) { - item_html += `
`; - } - if (me.custom_use_discount_amount && me.custom_use_discount_percentage) { - item_html += `
`; - } - if (!me.custom_use_discount_amount && !me.custom_use_discount_percentage) { - item_html += `
`; - } - item_html += `
- ${item_data.item_name} -
- ${get_description_html()} -
- ${get_rate_discount_html()}`; - $item_to_update.html(item_html); - if (me.custom_edit_rate) { - this[item_data.item_code + "_qty"] = frappe.ui.form.make_control({ - df: { - fieldname: "qty", - fieldtype: "Float", - onchange: function() { - me.events.form_updated(item_data, "qty", this.value); - } - }, - parent: $item_to_update.find(`.item-qty`), - render_input: true - }); - var uoms = []; - if (item_data.custom_item_uoms) { - uoms = item_data.custom_item_uoms.split(","); - } else if (item_data.uom) { - uoms = [item_data.uom]; - } - if (me.custom_show_uom_in_cart) { - this[item_data.item_code + "_uom"] = frappe.ui.form.make_control({ - df: { - fieldname: "uom", - fieldtype: "Select", - onchange: function() { - me.events.form_updated(item_data, "uom", this.value); - } - }, - parent: $item_to_update.find(`.item-uom`), - render_input: true - }); - } - if (me.show_batch_in_cart) { - this[item_data.item_code + "_batch"] = frappe.ui.form.make_control({ - df: { - fieldname: "batch", - fieldtype: "Link", - options: "Batch", - get_query: function() { - return { - filters: { - item: item_data.item_code - } - }; - }, - onchange: function() { - me.events.form_updated(item_data, "batch_no", this.value); - } - }, - parent: $item_to_update.find(`.item-batch`), - render_input: true - }); - } - this[item_data.item_code + "_rate"] = frappe.ui.form.make_control({ - df: { - fieldname: "rate", - fieldtype: "Float", - read_only: !me.allow_rate_change, - onchange: function() { - me.events.form_updated(item_data, "rate", this.value); - } - }, - parent: $item_to_update.find(`.item-rate`), - render_input: true - }); - if (me.custom_use_discount_percentage) { - this[item_data.item_code + "_discount"] = frappe.ui.form.make_control({ - df: { - fieldname: "discount", - fieldtype: "Float", - onchange: function() { - me.events.form_updated(item_data, "discount_percentage", this.value); - } - }, - parent: $item_to_update.find(`.item-rate-discount`), - render_input: true - }); - } - if (me.custom_use_discount_amount) { - this[item_data.item_code + "_discount_amount"] = frappe.ui.form.make_control({ - df: { - fieldname: "discount_amount", - fieldtype: "Currency", - onchange: function() { - me.events.form_updated(item_data, "discount_amount", this.value); - } - }, - parent: $item_to_update.find(`.item-rate-discount-amount`), - render_input: true - }); - } - if (this.custom_show_incoming_rate) { - this[item_data.item_code + "_incoming_rate"] = frappe.ui.form.make_control({ - df: { - fieldname: "incoming_rate", - fieldtype: "Float", - read_only: 1 - }, - parent: $item_to_update.find(`.item-incoming-rate`), - render_input: true - }); - } - if (this.custom_show_logical_rack_in_cart) { - this[item_data.item_code + "_logical_rack"] = frappe.ui.form.make_control({ - df: { - fieldname: "logical_rack", - fieldtype: "Data", - read_only: 1 - }, - parent: $item_to_update.find(`.item-logical-rack`), - render_input: true - }); - } - if (this.custom_show_last_customer_rate) { - this[item_data.item_code + "_last_customer_rate"] = frappe.ui.form.make_control({ - df: { - fieldname: "last_customer_rate", - fieldtype: "Float", - read_only: 1 - }, - parent: $item_to_update.find(`.item-last-customer-rate`), - render_input: true - }); - } - this[item_data.item_code + "_amount"] = frappe.ui.form.make_control({ - df: { - fieldname: "amount", - fieldtype: "Float", - read_only: 1 - }, - parent: $item_to_update.find(`.item-rate-amount`), - render_input: true - }); - var delete_button = ` `; - var remove_button = frappe.ui.form.make_control({ - df: { - fieldname: "remove", - fieldtype: "Button", - label: delete_button - }, - parent: $item_to_update.find(`.remove-button`), - render_input: true - }); - remove_button.refresh(); - $(remove_button.$input).on("click", function() { - me.events.remove_item_from_cart(item_data); - me.prev_action = void 0; - me.toggle_item_highlight(); - me.events.numpad_event(void 0, "remove"); - }); - this[item_data.item_code + "_qty"].set_value(item_data.qty); - if (me.custom_show_uom_in_cart) { - this[item_data.item_code + "_uom"].df.options = uoms; - this[item_data.item_code + "_uom"].set_value(item_data.uom); - this[item_data.item_code + "_uom"].refresh(); - } - if (me.show_batch_in_cart) { - this[item_data.item_code + "_batch"].set_value(item_data.batch_no); - } - this[item_data.item_code + "_amount"].set_value(item_data.amount); - this[item_data.item_code + "_rate"].set_value(item_data.rate); - if (me.custom_use_discount_percentage) { - this[item_data.item_code + "_discount"].set_value(item_data.discount_percentage); - } - if (me.custom_use_discount_amount) { - this[item_data.item_code + "_discount_amount"].set_value(item_data.discount_amount); - } - if (me.custom_show_incoming_rate) { - this[item_data.item_code + "_incoming_rate"].set_value(item_data.custom_valuation_rate); - } - if (me.custom_show_logical_rack_in_cart) { - this[item_data.item_code + "_logical_rack"].set_value(item_data.custom_logical_rack); - } - if (me.custom_show_last_customer_rate) { - if (me.customer_info.customer) { - frappe.xcall("posnext.posnext.page.posnext.point_of_sale.get_lcr", { - "customer": me.customer_info.customer, - "item_code": item_data.item_code - }).then((d) => { - this[item_data.item_code + "_last_customer_rate"].set_value(d); - }); - } - } - if (me.custom_show_uom_in_cart) { - frappe.xcall("posnext.posnext.page.posnext.point_of_sale.get_uoms", { - "item_code": item_data.item_code - }).then((d) => { - this[item_data.item_code + "_uom"].df.options = d; - this[item_data.item_code + "_uom"].refresh(); - }); - } - } - set_dynamic_rate_header_width(); - function set_dynamic_rate_header_width() { - const rate_cols = Array.from(me.$cart_items_wrapper.find(".item-rate-amount")); - me.$cart_header.find(".rate-amount-header").css("width", ""); - me.$cart_items_wrapper.find(".item-rate-amount").css("width", ""); - let max_width = rate_cols.reduce((max_width2, elm) => { - if ($(elm).width() > max_width2) - max_width2 = $(elm).width(); - return max_width2; - }, 0); - max_width += 1; - if (max_width == 1) - max_width = ""; - me.$cart_header.find(".rate-amount-header").css("width", max_width); - me.$cart_items_wrapper.find(".item-rate-amount").css("width", max_width); - } - function get_rate_discount_html() { - if (me.custom_edit_rate) { - if (item_data.rate && item_data.amount && item_data.rate !== item_data.amount) { - var html = ` -
-
`; - if (me.custom_show_uom_in_cart) { - html += `
`; - } - if (me.show_batch_in_cart) { - html += `
`; - } - html += `
`; - if (me.custom_use_discount_percentage) { - html += `
`; - } - if (me.custom_use_discount_amount) { - html += `
`; - } - if (me.custom_show_incoming_rate) { - html += `
`; - } - if (me.custom_show_logical_rack_in_cart) { - html += `
`; - } - if (me.custom_show_last_customer_rate) { - html += `
`; - } - html += `
-
-
`; - return html; - } else { - var html = ` -
-
`; - if (me.custom_show_uom_in_cart) { - html += `
`; - } - if (me.show_batch_in_cart) { - html += `
`; - } - html += `
`; - if (me.custom_use_discount_percentage) { - html += `
`; - } - if (me.custom_use_discount_amount) { - html += `
`; - } - if (me.custom_show_incoming_rate) { - html += `
`; - } - if (me.custom_show_logical_rack_in_cart) { - html += `
`; - } - if (me.custom_show_last_customer_rate) { - html += `
`; - } - html += `
-
-
`; - return html; - } - } else { - if (item_data.rate && item_data.amount && item_data.rate !== item_data.amount) { - return ` -
-
${item_data.qty || 0}
-
${item_data.uom}
-
${item_data.batch}
-
-
${parseFloat(item_data.amount).toFixed(2)}
-
${parseFloat(item_data.rate).toFixed(2)}
-
-
`; - } else { - return ` -
-
${item_data.qty || 0}
-
${item_data.uom}
-
${item_data.batch}
-
-
${parseFloat(item_data.rate).toFixed(2)}
-
-
`; - } - } - } - function get_description_html() { - if (item_data.description) { - if (item_data.description.indexOf("
") != -1) { - try { - item_data.description = $(item_data.description).text(); - } catch (error) { - item_data.description = item_data.description.replace(/
/g, " ").replace(/<\/div>/g, " ").replace(/ +/g, " "); - } - } - item_data.description = frappe.ellipsis(item_data.description, 45); - return `
${item_data.description}
`; - } - return ``; - } - function get_item_image_html() { - const { image, item_name } = item_data; - if (!me.hide_images && image) { - return ` -
- ${frappe.get_abbr(item_name)} -
`; - } else { - return `
${frappe.get_abbr(item_name)}
`; - } - } - } - handle_broken_image($img) { - const item_abbr = $($img).attr("alt"); - $($img).parent().replaceWith(`
${item_abbr}
`); - } - update_selector_value_in_cart_item(selector, value, item) { - const $item_to_update = this.get_cart_item(item); - $item_to_update.attr(`data-${selector}`, escape(value)); - } - toggle_checkout_btn(show_checkout) { - if (show_checkout) { - if (this.show_checkout_button) { - this.$totals_section.find(".checkout-btn").css("display", "flex"); - } else { - this.$totals_section.find(".checkout-btn").css("display", "none"); - } - if (this.show_held_button) { - this.$totals_section.find(".checkout-btn-held").css("display", "flex"); - } else { - this.$totals_section.find(".checkout-btn-held").css("display", "none"); - } - if (this.show_order_list_button) { - this.$totals_section.find(".checkout-btn-order").css("display", "flex"); - } else { - this.$totals_section.find(".checkout-btn-order").css("display", "none"); - } - this.$totals_section.find(".edit-cart-btn").css("display", "none"); - } else { - this.$totals_section.find(".checkout-btn").css("display", "none"); - this.$totals_section.find(".checkout-btn-held").css("display", "none"); - this.$totals_section.find(".checkout-btn-held").css("display", "none"); - this.$totals_section.find(".checkout-btn-order").css("display", "none"); - this.$totals_section.find(".edit-cart-btn").css("display", "flex"); - } - } - highlight_checkout_btn(toggle) { - if (toggle) { - this.$add_discount_elem.css("display", "flex"); - this.$cart_container.find(".checkout-btn").css({ - "background-color": "var(--blue-500)" - }); - if (this.show_held_button) { - this.$cart_container.find(".checkout-btn-held").css({ - "background-color": "var(--blue-500)" - }); - } else { - this.$cart_container.find(".checkout-btn-held").css({ - "background-color": "var(--blue-200)" - }); - } - if (this.show_order_list_button) { - this.$cart_container.find(".checkout-btn-order").css({ - "background-color": "var(--blue-500)" - }); - } else { - this.$cart_container.find(".checkout-btn-order").css({ - "background-color": "var(--blue-500)" - }); - } - } else { - this.$add_discount_elem.css("display", "none"); - this.$cart_container.find(".checkout-btn").css({ - "background-color": "var(--blue-200)" - }); - this.$cart_container.find(".checkout-btn-held").css({ - "background-color": "var(--blue-200)" - }); - this.$cart_container.find(".checkout-btn-order").css({ - "background-color": "var(--blue-500)" - }); - } - } - update_empty_cart_section(no_of_cart_items) { - const $no_item_element = this.$cart_items_wrapper.find(".no-item-wrapper"); - no_of_cart_items > 0 && $no_item_element && $no_item_element.remove() && this.$cart_header.css("display", "flex"); - no_of_cart_items === 0 && !$no_item_element.length && this.make_no_items_placeholder(); - } - on_numpad_event($btn) { - const current_action = $btn.attr("data-button-value"); - const action_is_field_edit = ["qty", "discount_percentage", "rate"].includes(current_action); - const action_is_allowed = action_is_field_edit ? current_action == "rate" && this.allow_rate_change || current_action == "discount_percentage" && this.allow_discount_change || current_action == "qty" : true; - const action_is_pressed_twice = this.prev_action === current_action; - const first_click_event = !this.prev_action; - const field_to_edit_changed = this.prev_action && this.prev_action != current_action; - if (action_is_field_edit) { - if (!action_is_allowed) { - const label = current_action == "rate" ? "Rate".bold() : "Discount".bold(); - const message = __("Editing {0} is not allowed as per POS Profile settings", [label]); - frappe.show_alert({ - indicator: "red", - message - }); - frappe.utils.play_sound("error"); - return; - } - if (first_click_event || field_to_edit_changed) { - this.prev_action = current_action; - } else if (action_is_pressed_twice) { - this.prev_action = void 0; - } - this.numpad_value = ""; - } else if (current_action === "checkout") { - this.prev_action = void 0; - this.toggle_item_highlight(); - this.events.numpad_event(void 0, current_action); - return; - } else if (current_action === "remove") { - this.prev_action = void 0; - this.toggle_item_highlight(); - this.events.numpad_event(void 0, current_action); - return; - } else { - this.numpad_value = current_action === "delete" ? this.numpad_value.slice(0, -1) : this.numpad_value + current_action; - this.numpad_value = this.numpad_value || 0; - } - const first_click_event_is_not_field_edit = !action_is_field_edit && first_click_event; - if (first_click_event_is_not_field_edit) { - frappe.show_alert({ - indicator: "red", - message: __("Please select a field to edit from numpad") - }); - frappe.utils.play_sound("error"); - return; - } - if (flt(this.numpad_value) > 100 && this.prev_action === "discount_percentage") { - frappe.show_alert({ - message: __("Discount cannot be greater than 100%"), - indicator: "orange" - }); - frappe.utils.play_sound("error"); - this.numpad_value = current_action; - } - this.highlight_numpad_btn($btn, current_action); - this.events.numpad_event(this.numpad_value, this.prev_action); - } - highlight_numpad_btn($btn, curr_action) { - const curr_action_is_highlighted = $btn.hasClass("highlighted-numpad-btn"); - const curr_action_is_action = ["qty", "discount_percentage", "rate", "done"].includes(curr_action); - if (!curr_action_is_highlighted) { - $btn.addClass("highlighted-numpad-btn"); - } - if (this.prev_action === curr_action && curr_action_is_highlighted) { - $btn.removeClass("highlighted-numpad-btn"); - } - if (this.prev_action && this.prev_action !== curr_action && curr_action_is_action) { - const prev_btn = $(`[data-button-value='${this.prev_action}']`); - prev_btn.removeClass("highlighted-numpad-btn"); - } - if (!curr_action_is_action || curr_action === "done") { - setTimeout(() => { - $btn.removeClass("highlighted-numpad-btn"); - }, 200); - } - } - toggle_numpad(show) { - if (show) { - this.$totals_section.css("display", "none"); - this.$numpad_section.css("display", "flex"); - } else { - this.$totals_section.css("display", "flex"); - this.$numpad_section.css("display", "none"); - } - this.reset_numpad(); - } - reset_numpad() { - this.numpad_value = ""; - this.prev_action = void 0; - this.$numpad_section.find(".highlighted-numpad-btn").removeClass("highlighted-numpad-btn"); - } - toggle_numpad_field_edit(fieldname) { - if (["qty", "discount_percentage", "rate"].includes(fieldname)) { - this.$numpad_section.find(`[data-button-value="${fieldname}"]`).click(); - } - } - toggle_customer_info(show) { - if (show) { - const { customer } = this.customer_info || {}; - this.$cart_container.css("display", "none"); - this.$customer_section.css({ - "height": "100%", - "padding-top": "0px" - }); - this.$customer_section.find(".customer-details").html( - `
- -
Contact Details
-
- - - -
-
-
- ${this.get_customer_image()} -
-
${customer}
-
-
-
-
- -
-
-
-
-
Recent Transactions
` - ); - this.$customer_section.append(`
`); - if (this.mobile_number_based_customer) { - this.$customer_section.find(".mobile_no-field").css("display", "none"); - this.$customer_section.find(".close-details-btn").css("display", "none"); - } else { - this.$customer_section.find(".mobile_no-field").css("display", "flex"); - this.$customer_section.find(".close-details-btn").css("display", "flex"); - } - this.render_customer_fields(); - this.fetch_customer_transactions(); - } else { - this.$cart_container.css("display", "flex"); - this.$customer_section.css({ - "height": "", - "padding-top": "" - }); - this.update_customer_section(); - } - } - render_customer_fields() { - const $customer_form = this.$customer_section.find(".customer-fields-container"); - const dfs = [{ - fieldname: "email_id", - label: __("Email"), - fieldtype: "Data", - options: "email", - placeholder: __("Enter customer's email") - }, { - fieldname: "mobile_no", - label: __("Phone Number"), - fieldtype: "Data", - placeholder: __("Enter customer's phone number") - }, { - fieldname: "loyalty_program", - label: __("Loyalty Program"), - fieldtype: "Link", - options: "Loyalty Program", - placeholder: __("Select Loyalty Program") - }, { - fieldname: "loyalty_points", - label: __("Loyalty Points"), - fieldtype: "Data", - read_only: 1 - }]; - const me = this; - dfs.forEach((df) => { - this[`customer_${df.fieldname}_field`] = frappe.ui.form.make_control({ - df: __spreadProps(__spreadValues({}, df), { - onchange: handle_customer_field_change - }), - parent: $customer_form.find(`.${df.fieldname}-field`), - render_input: true - }); - this[`customer_${df.fieldname}_field`].set_value(this.customer_info[df.fieldname]); - }); - function handle_customer_field_change() { - const current_value = me.customer_info[this.df.fieldname]; - const current_customer = me.customer_info.customer; - if (this.value && current_value != this.value && this.df.fieldname != "loyalty_points") { - frappe.call({ - method: "posnext.posnext.page.posnext.point_of_sale.set_customer_info", - args: { - fieldname: this.df.fieldname, - customer: current_customer, - value: this.value - }, - callback: (r) => { - if (!r.exc) { - me.customer_info[this.df.fieldname] = this.value; - frappe.show_alert({ - message: __("Customer contact updated successfully."), - indicator: "green" - }); - frappe.utils.play_sound("submit"); - } - } - }); - } - } - } - fetch_customer_transactions() { - frappe.db.get_list("Sales Invoice", { - filters: { customer: this.customer_info.customer, docstatus: 1 }, - fields: ["name", "grand_total", "status", "posting_date", "posting_time", "currency"], - limit: 20 - }).then((res) => { - const transaction_container = this.$customer_section.find(".customer-transactions"); - if (!res.length) { - transaction_container.html( - `
No recent transactions found
` - ); - return; - } - const elapsed_time = moment(res[0].posting_date + " " + res[0].posting_time).fromNow(); - this.$customer_section.find(".customer-desc").html(`Last transacted ${elapsed_time}`); - res.forEach((invoice) => { - const posting_datetime = moment(invoice.posting_date + " " + invoice.posting_time).format("Do MMMM, h:mma"); - let indicator_color = { - "Paid": "green", - "Draft": "red", - "Return": "gray", - "Consolidated": "blue" - }; - transaction_container.append( - `
-
-
${invoice.name}
-
${posting_datetime}
-
-
-
- ${format_currency(invoice.grand_total, invoice.currency, 0) || 0} -
-
- - ${invoice.status} - -
-
-
-
` - ); - }); - }); - } - attach_refresh_field_event(frm) { - $(frm.wrapper).off("refresh-fields"); - $(frm.wrapper).on("refresh-fields", () => { - if (frm.doc.items.length) { - this.$cart_items_wrapper.html(""); - frm.doc.items.forEach((item) => { - this.update_item_html(item); - }); - } - this.update_totals_section(frm); - }); - } - load_invoice() { - console.log("Load invoice"); - const frm = this.events.get_frm(); - this.attach_refresh_field_event(frm); - this.fetch_customer_details(frm.doc.customer).then(() => { - this.events.customer_details_updated(this.customer_info); - this.update_customer_section(); - this.$cart_items_wrapper.html(""); - if (frm.doc.items.length) { - frm.doc.items.forEach((item) => { - this.update_item_html(item); - }); - } else { - this.make_no_items_placeholder(); - this.highlight_checkout_btn(true); - } - this.update_totals_section(frm); - if (frm.doc.docstatus === 1) { - this.$totals_section.find(".checkout-btn").css("display", "none"); - this.$totals_section.find(".checkout-btn-held").css("display", "none"); - if (this.show_order_list_button) { - this.$totals_section.find(".checkout-btn-order").css("display", "flex"); - } else { - this.$totals_section.find(".checkout-btn-order").css("display", "none"); - } - this.$totals_section.find(".edit-cart-btn").css("display", "none"); - } else { - if (this.show_checkout_button) { - this.$totals_section.find(".checkout-btn").css("display", "flex"); - } else { - this.$totals_section.find(".checkout-btn").css("display", "none"); - } - if (this.show_held_button) { - this.$totals_section.find(".checkout-btn-held").css("display", "flex"); - } else { - this.$totals_section.find(".checkout-btn-held").css("display", "none"); - } - if (this.show_order_list_button) { - this.$totals_section.find(".checkout-btn-order").css("display", "flex"); - } else { - this.$totals_section.find(".checkout-btn-order").css("display", "none"); - } - this.$totals_section.find(".edit-cart-btn").css("display", "none"); - } - this.toggle_component(true); - }); - } - toggle_component(show) { - show ? this.$component.css("display", "flex") : this.$component.css("display", "none"); - } - show_reference_dialog(mobile_number = null) { - const me = this; - const dialog = new frappe.ui.Dialog({ - title: __("Enter Reference Details"), - fields: [ - { - fieldtype: "Data", - label: __("Reference Number"), - fieldname: "reference_no", - reqd: 1 - }, - { - fieldtype: "Data", - label: __("Reference Name"), - fieldname: "reference_name", - reqd: 1 - } - ], - primary_action_label: __("Hold Invoice"), - primary_action: async (values) => { - if (mobile_number) { - await frappe.call({ - method: "posnext.posnext.page.posnext.point_of_sale.create_customer", - args: { customer: mobile_number }, - freeze: true, - freeze_message: "Creating Customer...." - }); - const frm2 = me.events.get_frm(); - await frappe.model.set_value(frm2.doc.doctype, frm2.doc.name, "customer", mobile_number); - await frm2.script_manager.trigger("customer", frm2.doc.doctype, frm2.doc.name); - } - const frm = me.events.get_frm(); - frm.doc.custom_reference_no = values.reference_no; - frm.doc.custom_reference_name = values.reference_name; - dialog.hide(); - await me.events.save_draft_invoice(); - } - }); - dialog.show(); - } - async hold_invoice(mobile_number = null) { - if (mobile_number) { - await frappe.call({ - method: "posnext.posnext.page.posnext.point_of_sale.create_customer", - args: { customer: mobile_number }, - freeze: true, - freeze_message: "Creating Customer...." - }); - const frm = this.events.get_frm(); - await frappe.model.set_value(frm.doc.doctype, frm.doc.name, "customer", mobile_number); - await frm.script_manager.trigger("customer", frm.doc.doctype, frm.doc.name); - } - await this.events.save_draft_invoice(); - } - }; - - // ../posnext/posnext/public/js/pos_item_details.js - frappe.provide("posnext.PointOfSale"); - posnext.PointOfSale.ItemDetails = class { - constructor({ wrapper, events, settings }) { - this.wrapper = wrapper; - this.events = events; - this.hide_images = settings.hide_images; - this.allow_rate_change = settings.allow_rate_change; - this.allow_discount_change = settings.allow_discount_change; - this.custom_edit_rate_and_uom = settings.custom_edit_rate_and_uom; - this.current_item = {}; - this.init_component(); - } - init_component() { - this.prepare_dom(); - this.init_child_components(); - this.bind_events(); - this.attach_shortcuts(); - } - prepare_dom() { - this.wrapper.append( - `
` - ); - this.$component = this.wrapper.find(".item-details-container"); - } - init_child_components() { - this.$component.html( - `
-
${__("Item Detailss")}
-
- - - -
-
-
-
-
-
-
-
-
-
-
-
-
` - ); - this.$item_name = this.$component.find(".item-name"); - this.$item_description = this.$component.find(".item-desc"); - this.$item_price = this.$component.find(".item-price"); - this.$item_image = this.$component.find(".item-image"); - this.$form_container = this.$component.find(".form-container"); - this.$dicount_section = this.$component.find(".discount-section"); - this.$serial_batch_container = this.$component.find(".serial-batch-container"); - } - compare_with_current_item(item) { - return item && item.name == this.current_item.name; - } - async toggle_item_details_section(item) { - const current_item_changed = !this.compare_with_current_item(item); - const hide_item_details = !Boolean(item) || !current_item_changed; - if (!hide_item_details && current_item_changed || hide_item_details) { - await this.validate_serial_batch_item(); - } - if (!this.custom_edit_rate_and_uom) { - this.events.toggle_item_selector(!hide_item_details); - this.toggle_component(!hide_item_details); - } - if (item && current_item_changed) { - this.doctype = item.doctype; - this.item_meta = frappe.get_meta(this.doctype); - this.name = item.name; - this.item_row = item; - this.currency = this.events.get_frm().doc.currency; - this.current_item = item; - this.render_dom(item); - this.render_discount_dom(item); - this.render_form(item); - this.events.highlight_cart_item(item); - } else { - this.current_item = {}; - } - } - validate_serial_batch_item() { - const doc = this.events.get_frm().doc; - const item_row = doc.items.find((item) => item.name === this.name); - if (!item_row) - return; - const serialized = item_row.has_serial_no; - const batched = item_row.has_batch_no; - const no_bundle_selected = !item_row.serial_and_batch_bundle; - if (serialized && no_bundle_selected || batched && no_bundle_selected) { - frappe.show_alert({ - message: __("Item is removed since no serial / batch no selected."), - indicator: "orange" - }); - frappe.utils.play_sound("cancel"); - return this.events.remove_item_from_cart(); - } - } - render_dom(item) { - let { item_name, description, image, price_list_rate } = item; - function get_description_html() { - if (description) { - description = description.indexOf("...") === -1 && description.length > 140 ? description.substr(0, 139) + "..." : description; - return description; - } - return ``; - } - this.$item_name.html(item_name); - this.$item_description.html(get_description_html()); - this.$item_price.html(format_currency(price_list_rate, this.currency)); - if (!this.hide_images && image) { - this.$item_image.html( - `${frappe.get_abbr(item_name)}` - ); - } else { - this.$item_image.html(`
${frappe.get_abbr(item_name)}
`); - } - } - handle_broken_image($img) { - const item_abbr = $($img).attr("alt"); - $($img).replaceWith(`
${item_abbr}
`); - } - render_discount_dom(item) { - if (item.discount_percentage) { - this.$dicount_section.html( - `
${format_currency(item.price_list_rate, this.currency)}
-
${item.discount_percentage}% off
` - ); - this.$item_price.html(format_currency(item.rate, this.currency)); - } else { - this.$dicount_section.html(``); - } - } - render_form(item) { - const fields_to_display = this.get_form_fields(item); - this.$form_container.html(""); - fields_to_display.forEach((fieldname, idx) => { - this.$form_container.append( - `
` - ); - const field_meta = this.item_meta.fields.find((df) => df.fieldname === fieldname); - fieldname === "discount_percentage" ? field_meta.label = __("Discount (%)") : ""; - const me = this; - var uoms = []; - frappe.db.get_doc("Item", me.current_item.item_code).then((doc) => { - uoms = doc.uoms.map((item2) => item2.uom); - }); - this[`${fieldname}_control`] = frappe.ui.form.make_control({ - df: __spreadProps(__spreadValues({}, field_meta), { - onchange: function() { - me.events.form_updated(me.current_item, fieldname, this.value); - }, - get_query: function() { - if (fieldname === "uom") { - return { - filters: { - name: ["in", uoms] - } - }; - } - return; - } - }), - parent: this.$form_container.find(`.${fieldname}-control`), - render_input: true - }); - this[`${fieldname}_control`].set_value(item[fieldname]); - }); - this.make_auto_serial_selection_btn(item); - this.bind_custom_control_change_event(); - } - get_form_fields(item) { - const fields = ["qty", "uom", "rate", "conversion_factor", "discount_percentage", "warehouse", "actual_qty", "price_list_rate"]; - if (item.has_serial_no) - fields.push("serial_no"); - if (item.has_batch_no) - fields.push("batch_no"); - return fields; - } - make_auto_serial_selection_btn(item) { - if (item.has_serial_no || item.has_batch_no) { - const label = item.has_serial_no ? __("Select Serial No") : __("Select Batch No"); - this.$form_container.append( - `
${label}
` - ); - this.$form_container.find(".serial_no-control").find("textarea").css("height", "6rem"); - } - } - bind_custom_control_change_event() { - const me = this; - if (this.rate_control) { - this.rate_control.df.onchange = function() { - if (this.value || flt(this.value) === 0) { - me.events.form_updated(me.current_item, "rate", this.value).then(() => { - const item_row = frappe.get_doc(me.doctype, me.name); - const doc = me.events.get_frm().doc; - me.$item_price.html(format_currency(item_row.rate, doc.currency)); - me.render_discount_dom(item_row); - }); - } - }; - this.rate_control.df.read_only = !this.allow_rate_change; - this.rate_control.refresh(); - } - if (this.discount_percentage_control && !this.allow_discount_change) { - this.discount_percentage_control.df.read_only = 1; - this.discount_percentage_control.refresh(); - } - if (this.warehouse_control) { - this.warehouse_control.df.reqd = 1; - this.warehouse_control.df.onchange = function() { - if (this.value) { - me.events.form_updated(me.current_item, "warehouse", this.value).then(() => { - me.item_stock_map = me.events.get_item_stock_map(); - const available_qty = me.item_stock_map[me.item_row.item_code][this.value][0]; - const is_stock_item = Boolean(me.item_stock_map[me.item_row.item_code][this.value][1]); - if (available_qty === void 0) { - me.events.get_available_stock(me.item_row.item_code, this.value).then(() => { - me.warehouse_control.set_value(this.value); - }); - } else if (available_qty === 0 && is_stock_item) { - me.warehouse_control.set_value(""); - const bold_item_code = me.item_row.item_code.bold(); - const bold_warehouse = this.value.bold(); - frappe.throw( - __("Item Code: {0} is not available under warehouse {1}.", [bold_item_code, bold_warehouse]) - ); - } - me.actual_qty_control.set_value(available_qty); - }); - } - }; - this.warehouse_control.df.get_query = () => { - return { - filters: { company: this.events.get_frm().doc.company } - }; - }; - this.warehouse_control.refresh(); - } - if (this.serial_no_control) { - this.serial_no_control.df.reqd = 1; - this.serial_no_control.df.onchange = async function() { - !me.current_item.batch_no && await me.auto_update_batch_no(); - me.events.form_updated(me.current_item, "serial_no", this.value); - }; - this.serial_no_control.refresh(); - } - if (this.batch_no_control) { - this.batch_no_control.df.reqd = 1; - this.batch_no_control.df.get_query = () => { - return { - query: "erpnext.controllers.queries.get_batch_no", - filters: { - item_code: me.item_row.item_code, - warehouse: me.item_row.warehouse, - posting_date: me.events.get_frm().doc.posting_date - } - }; - }; - this.batch_no_control.refresh(); - } - if (this.uom_control) { - this.uom_control.df.onchange = function() { - me.events.form_updated(me.current_item, "uom", this.value); - const item_row = frappe.get_doc(me.doctype, me.name); - me.conversion_factor_control.df.read_only = item_row.stock_uom == this.value; - me.conversion_factor_control.refresh(); - }; - } - frappe.model.on("POS Invoice Item", "*", (fieldname, value, item_row) => { - const field_control = this[`${fieldname}_control`]; - const item_row_is_being_edited = this.compare_with_current_item(item_row); - if (item_row_is_being_edited && field_control && field_control.get_value() !== value) { - field_control.set_value(value); - cur_pos.update_cart_html(item_row); - } - }); - } - async auto_update_batch_no() { - if (this.serial_no_control && this.batch_no_control) { - const selected_serial_nos = this.serial_no_control.get_value().split(` -`).filter((s) => s); - if (!selected_serial_nos.length) - return; - const serials_with_batch_no = await frappe.db.get_list("Serial No", { - filters: { "name": ["in", selected_serial_nos] }, - fields: ["batch_no", "name"] - }); - const batch_serial_map = serials_with_batch_no.reduce((acc, r) => { - if (!acc[r.batch_no]) { - acc[r.batch_no] = []; - } - acc[r.batch_no] = [...acc[r.batch_no], r.name]; - return acc; - }, {}); - const batch_no = Object.keys(batch_serial_map)[0]; - const batch_serial_nos = batch_serial_map[batch_no].join(` -`); - const serial_nos_belongs_to_other_batch = selected_serial_nos.length !== batch_serial_map[batch_no].length; - const current_batch_no = this.batch_no_control.get_value(); - current_batch_no != batch_no && await this.batch_no_control.set_value(batch_no); - if (serial_nos_belongs_to_other_batch) { - this.serial_no_control.set_value(batch_serial_nos); - this.qty_control.set_value(batch_serial_map[batch_no].length); - delete batch_serial_map[batch_no]; - this.events.clone_new_batch_item_in_frm(batch_serial_map, this.current_item); - } - } - } - bind_events() { - this.bind_auto_serial_fetch_event(); - this.bind_fields_to_numpad_fields(); - this.$component.on("click", ".close-btn", () => { - this.events.close_item_details(); - }); - } - attach_shortcuts() { - this.wrapper.find(".close-btn").attr("title", "Esc"); - frappe.ui.keys.on("escape", () => { - const item_details_visible = this.$component.is(":visible"); - if (item_details_visible) { - this.events.close_item_details(); - } - }); - } - bind_fields_to_numpad_fields() { - const me = this; - this.$form_container.on("click", ".input-with-feedback", function() { - const fieldname = $(this).attr("data-fieldname"); - if (this.last_field_focused != fieldname) { - me.events.item_field_focused(fieldname); - this.last_field_focused = fieldname; - } - }); - } - bind_auto_serial_fetch_event() { - this.$form_container.on("click", ".auto-fetch-btn", () => { - frappe.require("assets/erpnext/js/utils/serial_no_batch_selector.js", () => { - let frm = this.events.get_frm(); - let item_row = this.item_row; - item_row.type_of_transaction = "Outward"; - new erpnext.SerialBatchPackageSelector(frm, item_row, (r) => { - if (r) { - frappe.model.set_value(item_row.doctype, item_row.name, { - "serial_and_batch_bundle": r.name, - "qty": Math.abs(r.total_qty) - }); - } - }); - }); - }); - } - toggle_component(show) { - show ? this.$component.css("display", "flex") : this.$component.css("display", "none"); - } - }; - - // ../posnext/posnext/public/js/pos_number_pad.js - frappe.provide("posnext.PointOfSale"); - posnext.PointOfSale.NumberPad = class { - constructor({ wrapper, events, cols, keys, css_classes, fieldnames_map }) { - this.wrapper = wrapper; - this.events = events; - this.cols = cols; - this.keys = keys; - this.css_classes = css_classes || []; - this.fieldnames = fieldnames_map || {}; - this.init_component(); - } - init_component() { - this.prepare_dom(); - this.bind_events(); - } - prepare_dom() { - const { cols, keys, css_classes, fieldnames } = this; - function get_keys() { - return keys.reduce((a, row, i) => { - return a + row.reduce((a2, number, j) => { - const class_to_append = css_classes && css_classes[i] ? css_classes[i][j] : ""; - const fieldname = fieldnames && fieldnames[number] ? fieldnames[number] : typeof number === "string" ? frappe.scrub(number) : number; - return a2 + `
${__(number)}
`; - }, ""); - }, ""); - } - this.wrapper.html( - `
- ${get_keys()} -
` - ); - } - bind_events() { - const me = this; - this.wrapper.on("click", ".numpad-btn", function() { - const $btn = $(this); - me.events.numpad_event($btn); - }); - } - }; - - // ../posnext/posnext/public/js/pos_payment.js - frappe.provide("posnext.PointOfSale"); - posnext.PointOfSale.Payment = class { - constructor({ events, wrapper, settings }) { - this.wrapper = wrapper; - this.events = events; - this.custom_show_sales_man = settings.custom_show_sales_man; - this.custom_show_additional_note = settings.custom_show_additional_note; - this.custom_edit_rate = settings.custom_edit_rate_and_uom; - this.custom_show_credit_sales = settings.custom_show_credit_sales; - this.default_payment = settings.default_payment; - this.current_payments = []; - this.enable_coupon_code = settings.enable_coupon_code; - this.init_component(); - if (this.enable_coupon_code) { - this.render_coupon_code_field(); - } - } - init_component() { - this.prepare_dom(); - this.initialize_numpad(); - this.bind_events(); - this.attach_shortcuts(); - } - prepare_dom() { - this.wrapper.append( - `
- -
-
-
- -
-
-
-
-
-
-
-
-
${__("Complete Order")}
-
` - ); - this.$component = this.wrapper.find(".payment-container"); - this.$payment_modes = this.$component.find(".payment-modes"); - this.$totals_section = this.$component.find(".totals-section"); - this.$totals = this.$component.find(".totals"); - this.$numpad = this.$component.find(".number-pad"); - this.$coupon_code = this.$component.find(".coupon-code"); - this.$invoice_fields_section = this.$component.find(".fields-section"); - } - render_coupon_code_field() { - frappe.ui.form.make_control({ - df: { - label: __("Coupon Code"), - fieldtype: "Link", - options: "Coupon Code", - fieldname: "coupon_code", - placeholder: __("Select a coupon") - }, - parent: this.$component.find(".coupon-code"), - render_input: true - }); - } - make_invoice_fields_control() { - var me = this; - const fields = []; - if (this.custom_show_credit_sales) { - fields.push({ - fieldname: "custom_credit_sales", - label: "Credit Sales", - fieldtype: "Check" - }); - } - if (this.custom_show_sales_man) { - fields.push({ - fieldname: "sales_person", - label: "Sales Man", - fieldtype: "Link", - options: "Sales Person" - }); - } - if (this.custom_show_additional_note) { - fields.push({ - fieldname: "remarks", - label: "Additional Note", - fieldtype: "Small Text" - }); - } - if (!fields.length) - return; - this.$invoice_fields = this.$invoice_fields_section.find(".invoice-fields"); - this.$invoice_fields.html(""); - const frm = this.events.get_frm(); - me.current_payments = frm.doc.payments; - fields.forEach((df) => { - this.$invoice_fields.append( - `
` - ); - let df_events = { - onchange: function() { - if (this.df.fieldname === "sales_person") { - frm.clear_table("sales_team"); - cur_frm.add_child("sales_team", { - sales_person: this.get_value(), - allocated_percentage: 100 - }); - } else { - if (this.df.fieldname === "custom_credit_sales") { - if (this.get_value()) { - frm.doc.payments.forEach((p) => { - const mode = p.mode_of_payment.replace(/ +/g, "_").toLowerCase(); - me[`${mode}_control`].set_value(0); - }); - } else { - console.log(me.current_payments); - me.current_payments.forEach((p) => { - if (p.mode_of_payment === me.default_payment) { - const mode = p.mode_of_payment.replace(/ +/g, "_").toLowerCase(); - me[`${mode}_control`].set_value(frm.doc.grand_total); - } - }); - } - } - frm.set_value(this.df.fieldname, this.get_value()); - } - } - }; - if (df.fieldtype == "Button") { - df_events = { - click: function() { - if (frm.script_manager.has_handlers(df.fieldname, frm.doc.doctype)) { - frm.script_manager.trigger(df.fieldname, frm.doc.doctype, frm.doc.docname); - } - } - }; - } - this[`${df.fieldname}_field`] = frappe.ui.form.make_control({ - df: __spreadValues(__spreadValues({}, df), df_events), - parent: this.$invoice_fields.find(`.${df.fieldname}-field`), - render_input: true - }); - if (df.fieldname !== "remarks") { - this[`${df.fieldname}_field`].set_value(frm.doc[df.fieldname]); - } - }); - } - initialize_numpad() { - const me = this; - this.number_pad = new posnext.PointOfSale.NumberPad({ - wrapper: this.$numpad, - events: { - numpad_event: function($btn) { - me.on_numpad_clicked($btn); - } - }, - cols: 3, - keys: [ - [1, 2, 3], - [4, 5, 6], - [7, 8, 9], - [".", 0, "Delete"] - ] - }); - this.numpad_value = ""; - } - on_numpad_clicked($btn) { - const button_value = $btn.attr("data-button-value"); - highlight_numpad_btn($btn); - this.numpad_value = button_value === "delete" ? this.numpad_value.slice(0, -1) : this.numpad_value + button_value; - this.selected_mode.$input.get(0).focus(); - this.selected_mode.set_value(this.numpad_value); - function highlight_numpad_btn($btn2) { - $btn2.addClass("shadow-base-inner bg-selected"); - setTimeout(() => { - $btn2.removeClass("shadow-base-inner bg-selected"); - }, 100); - } - } - bind_events() { - const me = this; - this.$payment_modes.on("click", ".mode-of-payment", function(e) { - const mode_clicked = $(this); - if (!$(e.target).is(mode_clicked)) - return; - const scrollLeft = mode_clicked.offset().left - me.$payment_modes.offset().left + me.$payment_modes.scrollLeft(); - me.$payment_modes.animate({ scrollLeft }); - const mode = mode_clicked.attr("data-mode"); - $(`.mode-of-payment-control`).css("display", "none"); - $(`.cash-shortcuts`).css("display", "none"); - me.$payment_modes.find(`.pay-amount`).css("display", "inline"); - me.$payment_modes.find(`.loyalty-amount-name`).css("display", "none"); - $(".mode-of-payment").removeClass("border-primary"); - if (mode_clicked.hasClass("border-primary")) { - mode_clicked.removeClass("border-primary"); - me.selected_mode = ""; - } else { - mode_clicked.addClass("border-primary"); - mode_clicked.find(".mode-of-payment-control").css("display", "flex"); - mode_clicked.find(".cash-shortcuts").css("display", "grid"); - me.$payment_modes.find(`.${mode}-amount`).css("display", "none"); - me.$payment_modes.find(`.${mode}-name`).css("display", "inline"); - me.selected_mode = me[`${mode}_control`]; - me.selected_mode && me.selected_mode.$input.get(0).focus(); - me.auto_set_remaining_amount(); - } - }); - frappe.ui.form.on("POS Invoice", "contact_mobile", (frm) => { - var _a; - const contact = frm.doc.contact_mobile; - const request_button = $((_a = this.request_for_payment_field) == null ? void 0 : _a.$input[0]); - if (contact) { - request_button.removeClass("btn-default").addClass("btn-primary"); - } else { - request_button.removeClass("btn-primary").addClass("btn-default"); - } - }); - frappe.ui.form.on("POS Invoice", "coupon_code", (frm) => { - if (frm.doc.coupon_code && !frm.applying_pos_coupon_code) { - if (!frm.doc.ignore_pricing_rule) { - frm.applying_pos_coupon_code = true; - frappe.run_serially([ - () => frm.doc.ignore_pricing_rule = 1, - () => frm.trigger("ignore_pricing_rule"), - () => frm.doc.ignore_pricing_rule = 0, - () => frm.trigger("apply_pricing_rule"), - () => frm.save(), - () => this.update_totals_section(frm.doc), - () => frm.applying_pos_coupon_code = false - ]); - } else if (frm.doc.ignore_pricing_rule) { - frappe.show_alert({ - message: __("Ignore Pricing Rule is enabled. Cannot apply coupon code."), - indicator: "orange" - }); - } - } - }); - this.setup_listener_for_payments(); - this.$payment_modes.on("click", ".shortcut", function() { - const value = $(this).attr("data-value"); - me.selected_mode.set_value(value); - }); - this.$component.on("click", ".submit-order-btn", () => { - const doc = this.events.get_frm().doc; - let paid_amount = doc.paid_amount; - if (cur_frm.doc.custom_credit_sales && this.custom_show_credit_sales) { - cur_frm.clear_table("payments"); - paid_amount = 0; - } - const items = doc.items; - if ((paid_amount == 0 || !items.length) && !this.custom_show_credit_sales) { - const message = items.length ? __("You cannot submit the order without payment.") : __("You cannot submit empty order."); - frappe.show_alert({ message, indicator: "orange" }); - frappe.utils.play_sound("error"); - return; - } - this.events.submit_invoice(); - }); - frappe.ui.form.on("POS Invoice", "paid_amount", (frm) => { - this.update_totals_section(frm.doc); - const is_cash_shortcuts_invisible = !this.$payment_modes.find(".cash-shortcuts").is(":visible"); - this.attach_cash_shortcuts(frm.doc); - !is_cash_shortcuts_invisible && this.$payment_modes.find(".cash-shortcuts").css("display", "grid"); - this.render_payment_mode_dom(); - }); - frappe.ui.form.on("POS Invoice", "loyalty_amount", (frm) => { - const formatted_currency = format_currency(frm.doc.loyalty_amount, frm.doc.currency); - this.$payment_modes.find(`.loyalty-amount-amount`).html(formatted_currency); - }); - frappe.ui.form.on("Sales Invoice Payment", "amount", (frm, cdt, cdn) => { - const default_mop = locals[cdt][cdn]; - const mode = default_mop.mode_of_payment.replace(/ +/g, "_").toLowerCase(); - if (this[`${mode}_control`] && this[`${mode}_control`].get_value() != default_mop.amount) { - this[`${mode}_control`].set_value(default_mop.amount); - } - }); - } - setup_listener_for_payments() { - frappe.realtime.on("process_phone_payment", (data) => { - const doc = this.events.get_frm().doc; - const { response, amount, success, failure_message } = data; - let message, title; - if (success) { - title = __("Payment Received"); - const grand_total = cint(frappe.sys_defaults.disable_rounded_total) ? doc.grand_total : doc.rounded_total; - if (amount >= grand_total) { - frappe.dom.unfreeze(); - message = __("Payment of {0} received successfully.", [format_currency(amount, doc.currency, 0)]); - this.events.submit_invoice(); - cur_frm.reload_doc(); - } else { - message = __("Payment of {0} received successfully. Waiting for other requests to complete...", [format_currency(amount, doc.currency, 0)]); - } - } else if (failure_message) { - message = failure_message; - title = __("Payment Failed"); - } - frappe.msgprint({ "message": message, "title": title }); - }); - } - auto_set_remaining_amount() { - const doc = this.events.get_frm().doc; - const grand_total = cint(frappe.sys_defaults.disable_rounded_total) ? doc.grand_total : doc.rounded_total; - const remaining_amount = grand_total - doc.paid_amount; - const current_value = this.selected_mode ? this.selected_mode.get_value() : void 0; - if (!current_value && remaining_amount > 0 && this.selected_mode) { - this.selected_mode.set_value(remaining_amount); - } - } - attach_shortcuts() { - const ctrl_label = frappe.utils.is_mac() ? "\u2318" : "Ctrl"; - this.$component.find(".submit-order-btn").attr("title", `${ctrl_label}+Enter`); - frappe.ui.keys.on("ctrl+enter", () => { - const payment_is_visible = this.$component.is(":visible"); - const active_mode = this.$payment_modes.find(".border-primary"); - if (payment_is_visible && active_mode.length) { - this.$component.find(".submit-order-btn").click(); - } - }); - frappe.ui.keys.add_shortcut({ - shortcut: "tab", - action: () => { - const payment_is_visible = this.$component.is(":visible"); - let active_mode = this.$payment_modes.find(".border-primary"); - active_mode = active_mode.length ? active_mode.attr("data-mode") : void 0; - if (!active_mode) - return; - const mode_of_payments = Array.from(this.$payment_modes.find(".mode-of-payment")).map((m) => $(m).attr("data-mode")); - const mode_index = mode_of_payments.indexOf(active_mode); - const next_mode_index = (mode_index + 1) % mode_of_payments.length; - const next_mode_to_be_clicked = this.$payment_modes.find(`.mode-of-payment[data-mode="${mode_of_payments[next_mode_index]}"]`); - if (payment_is_visible && mode_index != next_mode_index) { - next_mode_to_be_clicked.click(); - } - }, - condition: () => this.$component.is(":visible") && this.$payment_modes.find(".border-primary").length, - description: __("Switch Between Payment Modes"), - ignore_inputs: true, - page: cur_page.page.page - }); - } - toggle_numpad() { - } - render_payment_section() { - this.render_payment_mode_dom(); - this.make_invoice_fields_control(); - this.update_totals_section(); - this.focus_on_default_mop(); - } - after_render() { - const frm = this.events.get_frm(); - frm.script_manager.trigger("after_payment_render", frm.doc.doctype, frm.doc.docname); - } - edit_cart() { - if (this.custom_edit_rate) { - const div = document.getElementById("customer-cart-container2"); - div.style.gridColumn = "span 5 / span 5"; - } - this.events.toggle_other_sections(false); - this.toggle_component(false); - } - checkout() { - this.events.toggle_other_sections(true); - this.toggle_component(true); - this.render_payment_section(); - this.after_render(); - } - toggle_remarks_control() { - if (this.$remarks.find(".frappe-control").length) { - this.$remarks.html("+ Add Remark"); - } else { - this.$remarks.html(""); - this[`remark_control`] = frappe.ui.form.make_control({ - df: { - label: __("Remark"), - fieldtype: "Data", - onchange: function() { - } - }, - parent: this.$totals_section.find(`.remarks`), - render_input: true - }); - this[`remark_control`].set_value(""); - } - } - render_payment_mode_dom() { - const doc = this.events.get_frm().doc; - const payments = doc.payments; - const currency = doc.currency; - this.$payment_modes.html(`${payments.map((p, i) => { - const mode = p.mode_of_payment.replace(/ +/g, "_").toLowerCase(); - const payment_type = p.type; - const margin = i % 2 === 0 ? "pr-2" : "pl-2"; - const amount = p.amount > 0 ? format_currency(p.amount, currency) : ""; - return ` -
-
- ${p.mode_of_payment} -
${amount}
-
-
-
- `; - }).join("")}`); - this.current_payments = payments; - payments.forEach((p) => { - const mode = p.mode_of_payment.replace(/ +/g, "_").toLowerCase(); - const me = this; - this[`${mode}_control`] = frappe.ui.form.make_control({ - df: { - label: p.mode_of_payment, - fieldtype: "Currency", - placeholder: __("Enter {0} amount.", [p.mode_of_payment]), - onchange: function() { - console.log(p.doctype); - console.log(p.name); - const current_value = frappe.model.get_value(p.doctype, p.name, "amount"); - if (current_value != this.value) { - frappe.model.set_value(p.doctype, p.name, "amount", flt(this.value)).then(() => me.update_totals_section()); - const formatted_currency = format_currency(this.value, currency); - me.$payment_modes.find(`.${mode}-amount`).html(formatted_currency); - } - } - }, - parent: this.$payment_modes.find(`.${mode}.mode-of-payment-control`), - render_input: true - }); - this[`${mode}_control`].toggle_label(false); - this[`${mode}_control`].set_value(p.amount); - }); - this.render_loyalty_points_payment_mode(); - this.attach_cash_shortcuts(doc); - } - focus_on_default_mop() { - const doc = this.events.get_frm().doc; - const payments = doc.payments; - payments.forEach((p) => { - const mode = p.mode_of_payment.replace(/ +/g, "_").toLowerCase(); - if (p.default) { - setTimeout(() => { - this.$payment_modes.find(`.${mode}.mode-of-payment-control`).parent().click(); - }, 500); - } - }); - } - attach_cash_shortcuts(doc) { - const grand_total = cint(frappe.sys_defaults.disable_rounded_total) ? doc.grand_total : doc.rounded_total; - const currency = doc.currency; - const shortcuts = this.get_cash_shortcuts(flt(grand_total)); - this.$payment_modes.find(".cash-shortcuts").remove(); - let shortcuts_html = shortcuts.map((s) => { - return `
${format_currency(s, currency, 0)}
`; - }).join(""); - this.$payment_modes.find('[data-payment-type="Cash"]').find(".mode-of-payment-control").after(`
${shortcuts_html}
`); - } - get_cash_shortcuts(grand_total) { - let steps = [1, 5, 10]; - const digits = String(Math.round(grand_total)).length; - steps = steps.map((x) => x * 10 ** (digits - 2)); - const get_nearest = (amount, x) => { - let nearest_x = Math.ceil(amount / x) * x; - return nearest_x === amount ? nearest_x + x : nearest_x; - }; - return steps.reduce((finalArr, x) => { - let nearest_x = get_nearest(grand_total, x); - nearest_x = finalArr.indexOf(nearest_x) != -1 ? nearest_x + x : nearest_x; - return [...finalArr, nearest_x]; - }, []); - } - render_loyalty_points_payment_mode() { - const me = this; - const doc = this.events.get_frm().doc; - const { loyalty_program, loyalty_points, conversion_factor } = this.events.get_customer_details(); - this.$payment_modes.find(`.mode-of-payment[data-mode="loyalty-amount"]`).parent().remove(); - if (!loyalty_program) - return; - let description, read_only, max_redeemable_amount; - if (!loyalty_points) { - description = __("You don't have enough points to redeem."); - read_only = true; - } else { - max_redeemable_amount = flt(flt(loyalty_points) * flt(conversion_factor), precision("loyalty_amount", doc)); - description = __("You can redeem upto {0}.", [format_currency(max_redeemable_amount)]); - read_only = false; - } - const margin = this.$payment_modes.children().length % 2 === 0 ? "pr-2" : "pl-2"; - const amount = doc.loyalty_amount > 0 ? format_currency(doc.loyalty_amount, doc.currency) : ""; - this.$payment_modes.append( - `
-
- Redeem Loyalty Points -
${amount}
-
${loyalty_program}
-
-
-
` - ); - this["loyalty-amount_control"] = frappe.ui.form.make_control({ - df: { - label: __("Redeem Loyalty Points"), - fieldtype: "Currency", - placeholder: __("Enter amount to be redeemed."), - options: "company:currency", - read_only, - onchange: async function() { - if (!loyalty_points) - return; - if (this.value > max_redeemable_amount) { - frappe.show_alert({ - message: __("You cannot redeem more than {0}.", [format_currency(max_redeemable_amount)]), - indicator: "red" - }); - frappe.utils.play_sound("submit"); - me["loyalty-amount_control"].set_value(0); - return; - } - const redeem_loyalty_points = this.value > 0 ? 1 : 0; - await frappe.model.set_value(doc.doctype, doc.name, "redeem_loyalty_points", redeem_loyalty_points); - frappe.model.set_value(doc.doctype, doc.name, "loyalty_points", parseInt(this.value / conversion_factor)); - }, - description - }, - parent: this.$payment_modes.find(`.loyalty-amount.mode-of-payment-control`), - render_input: true - }); - this["loyalty-amount_control"].toggle_label(false); - } - render_add_payment_method_dom() { - const docstatus = this.events.get_frm().doc.docstatus; - if (docstatus === 0) - this.$payment_modes.append( - `
-
+ Add Payment Method
-
` - ); - } - update_totals_section(doc) { - if (!doc) - doc = this.events.get_frm().doc; - let branch_value = $('.input-with-feedback[data-fieldname="branch"]').val(); - frappe.model.set_value(cur_frm.doctype, cur_frm.docname, "branch", branch_value); - cur_frm.save(); - const paid_amount = doc.paid_amount; - if (cur_frm.doc.custom_credit_sales) { - const paid_amount2 = 0; - } - const grand_total = cint(frappe.sys_defaults.disable_rounded_total) ? doc.grand_total : doc.rounded_total; - const remaining = grand_total - doc.paid_amount; - const change = doc.change_amount || remaining <= 0 ? -1 * remaining : void 0; - const currency = doc.currency; - const label = change ? __("Change") : __("To Be Paid"); - this.$totals.html( - `
-
${__("Grand Total")}
-
${format_currency(grand_total, currency)}
-
-
-
-
${__("Paid Amount")}
-
${format_currency(paid_amount, currency)}
-
-
-
-
${label}
-
${format_currency(change || remaining, currency)}
-
` - ); - } - toggle_component(show) { - show ? this.$component.css("display", "flex") : this.$component.css("display", "none"); - } - }; - - // ../posnext/posnext/public/js/pos_past_order_list.js - frappe.provide("posnext.PointOfSale"); - var invoicess = []; - posnext.PointOfSale.PastOrderList = class { - constructor({ wrapper, events, settings }) { - this.wrapper = wrapper; - this.events = events; - this.pos_profile = settings.name; - this.custom_filter_order_list_by_profile = settings.custom_filter_order_list_by_profile; - this.init_component(); - } - init_component() { - this.prepare_dom(); - this.make_filter_section(); - this.bind_events(); - } - prepare_dom() { - this.wrapper.append( - `
-
- -
-
${__("Recent Orders")}
-
-
-
-
-
` - ); - this.$component = this.wrapper.find(".past-order-list"); - this.$invoices_container = this.$component.find(".invoices-container"); - } - bind_events() { - this.search_field.$input.on("input", (e) => { - clearTimeout(this.last_search); - this.last_search = setTimeout(() => { - const search_term = e.target.value; - this.refresh_list(search_term, this.status_field.get_value()); - }, 300); - }); - const me = this; - this.$invoices_container.on("click", ".invoice-wrapper", function() { - const invoice_name = unescape($(this).attr("data-invoice-name")); - me.events.open_invoice_data(invoice_name); - }); - this.$component.on("click", ".back", function() { - me.events.previous_screen(); - }); - } - make_filter_section() { - const me = this; - this.search_field = frappe.ui.form.make_control({ - df: { - label: __("Search"), - fieldtype: "Data", - placeholder: __("Search by invoice id or customer name") - }, - parent: this.$component.find(".search-field"), - render_input: true - }); - this.status_field = frappe.ui.form.make_control({ - df: { - label: __("Invoice Status"), - fieldtype: "Select", - options: `Draft -Paid -Unpaid -Return`, - placeholder: __("Filter by invoice status"), - onchange: function() { - if (me.$component.is(":visible")) - me.refresh_list(); - } - }, - parent: this.$component.find(".status-field"), - render_input: true - }); - this.search_field.toggle_label(false); - this.status_field.toggle_label(false); - this.status_field.set_value("Draft"); - } - refresh_list() { - frappe.dom.freeze(); - this.events.reset_summary(); - const search_term = this.search_field.get_value(); - const status = this.status_field.get_value(); - const pos_profile = this.pos_profile; - this.$invoices_container.html(""); - let filter = { search_term, status }; - if (this.custom_filter_order_list_by_profile) { - filter = { search_term, status, pos_profile }; - } - return frappe.call({ - method: "posnext.posnext.page.posnext.point_of_sale.get_past_order_list", - freeze: true, - args: filter, - callback: (response) => { - frappe.dom.unfreeze(); - invoicess = response.message; - response.message.forEach((invoice) => { - const invoice_html = this.get_invoice_html(invoice); - this.$invoices_container.append(invoice_html); - }); - } - }); - } - get_invoice_html(invoice) { - const posting_datetime = moment(invoice.posting_date + " " + invoice.posting_time).format("Do MMMM, h:mma"); - return `
-
-
${invoice.name}
-
- - - - ${frappe.ellipsis(invoice.customer, 20)} -
-
-
-
${format_currency(invoice.grand_total, invoice.currency, 0) || 0}
-
${posting_datetime}
-
-
-
`; - } - toggle_component(show) { - frappe.run_serially([ - () => show ? this.$component.css("display", "flex") && this.refresh_list() : this.$component.css("display", "none"), - () => this.events.open_invoice_data(invoicess[0].name) - ]); - } - }; - - // ../posnext/posnext/public/js/pos_past_order_summary.js - frappe.provide("posnext.PointOfSale"); - posnext.PointOfSale.PastOrderSummary = class { - constructor({ wrapper, pos_profile, events }) { - this.wrapper = wrapper; - this.pos_profile = pos_profile; - this.events = events; - this.init_component(); - } - init_component() { - this.prepare_dom(); - this.init_email_print_dialog(); - this.bind_events(); - this.attach_shortcuts(); - } - prepare_dom() { - this.wrapper.append( - `
-
- ${__("Select an invoice to load summary data")} -
-
-
-
-
${__("Items")}
-
-
${__("Totals")}
-
-
${__("Payments")}
-
-
-
-
-
` - ); - this.$component = this.wrapper.find(".past-order-summary"); - this.$summary_wrapper = this.$component.find(".invoice-summary-wrapper"); - this.$summary_container = this.$component.find(".abs-container"); - this.$upper_section = this.$summary_container.find(".upper-section"); - this.$items_container = this.$summary_container.find(".items-container"); - this.$totals_container = this.$summary_container.find(".totals-container"); - this.$payment_container = this.$summary_container.find(".payments-container"); - this.$summary_btns = this.$summary_container.find(".summary-btns"); - } - init_email_print_dialog() { - const email_dialog = new frappe.ui.Dialog({ - title: "Email Receipt", - fields: [ - { fieldname: "email_id", fieldtype: "Data", options: "Email", label: "Email ID", reqd: 1 }, - { fieldname: "content", fieldtype: "Small Text", label: "Message (if any)" } - ], - primary_action: () => { - this.send_email(); - }, - primary_action_label: __("Send") - }); - this.email_dialog = email_dialog; - const print_dialog = new frappe.ui.Dialog({ - title: "Print Receipt", - fields: [ - { fieldname: "print", fieldtype: "Data", label: "Print Preview" } - ], - primary_action: () => { - this.print_receipt(); - }, - primary_action_label: __("Print") - }); - this.print_dialog = print_dialog; - } - get_upper_section_html(doc) { - const { status } = doc; - let indicator_color = ""; - in_list(["Paid", "Consolidated"], status) && (indicator_color = "green"); - status === "Draft" && (indicator_color = "red"); - status === "Return" && (indicator_color = "grey"); - return `
-
${doc.customer}
-
${this.customer_email}
-
${__("Sold by")}: ${doc.owner}
-
-
- -
${doc.name}
- ${doc.status} -
`; - } - get_item_html(doc, item_data) { - return `
-
${item_data.item_name}
-
${item_data.qty || 0} ${item_data.uom}
-
${get_rate_discount_html()}
-
`; - function get_rate_discount_html() { - if (item_data.rate && item_data.price_list_rate && item_data.rate !== item_data.price_list_rate) { - return `(${item_data.discount_percentage}% off) -
${format_currency(item_data.rate, doc.currency)}
`; - } else { - return `
${format_currency(item_data.price_list_rate || item_data.rate, doc.currency)}
`; - } - } - } - get_discount_html(doc) { - if (doc.discount_amount) { - return `
-
Discount (${doc.additional_discount_percentage} %)
-
${format_currency(doc.discount_amount, doc.currency)}
-
`; - } else { - return ``; - } - } - get_net_total_html(doc) { - return `
-
${__("Net Total")}
-
${format_currency(doc.net_total, doc.currency)}
-
`; - } - get_taxes_html(doc) { - if (!doc.taxes.length) - return ""; - let taxes_html = doc.taxes.map((t) => { - const description = /[0-9]+/.test(t.description) ? t.description : t.rate != 0 ? `${t.description} @ ${t.rate}%` : t.description; - return ` -
-
${description}
-
${format_currency(t.tax_amount_after_discount_amount, doc.currency)}
-
- `; - }).join(""); - return `
${taxes_html}
`; - } - get_grand_total_html(doc) { - return `
-
${__("Grand Total")}
-
${format_currency(doc.grand_total, doc.currency)}
-
`; - } - get_payment_html(doc, payment) { - return `
-
${__(payment.mode_of_payment)}
-
${format_currency(payment.amount, doc.currency)}
-
`; - } - bind_events() { - this.$summary_container.on("click", ".return-btn", () => { - this.events.process_return(this.doc.name); - this.toggle_component(false); - this.$component.find(".no-summary-placeholder").css("display", "flex"); - this.$summary_wrapper.css("display", "none"); - }); - this.$summary_container.on("click", ".edit-btn", () => { - this.events.edit_order(this.doc.name); - this.toggle_component(false); - this.$component.find(".no-summary-placeholder").css("display", "flex"); - this.$summary_wrapper.css("display", "none"); - }); - this.$summary_container.on("click", ".delete-btn", () => { - this.events.delete_order(this.doc.name); - this.show_summary_placeholder(); - }); - this.$summary_container.on("click", ".send-btn", () => { - console.log(this.pos_profile); - var field_names = this.pos_profile.custom_whatsapp_field_names.map((x) => this.doc[x.field_names.toString()]); - console.log(field_names); - console.log(field_names.join(",")); - var message = "https://wa.me/" + this.doc.customer + "?text="; - message += formatString(this.pos_profile.custom_whatsapp_message, field_names); - console.log(message); - frappe.call({ - method: "posnext.posnext.page.posnext.point_of_sale.generate_pdf_and_save", - args: { - docname: this.doc.name, - doctype: this.doc.doctype, - print_format: this.pos_profile.print_format - }, - freeze: true, - freeze_message: "Creating file then send to whatsapp thru link....", - callback: function(r) { - message += "Please Find your invoice here \n " + window.origin + r.message.file_url; - window.open(message); - } - }); - }); - function formatString(str, args) { - return str.replace(/{(\d+)}/g, function(match, number) { - return typeof args[number] !== "undefined" ? args[number] : match; - }); - } - this.$summary_container.on("click", ".new-btn", () => { - this.events.new_order(); - this.toggle_component(false); - this.$component.find(".no-summary-placeholder").css("display", "flex"); - this.$summary_wrapper.css("display", "none"); - }); - this.$summary_container.on("click", ".email-btn", () => { - this.email_dialog.fields_dict.email_id.set_value(this.customer_email); - this.email_dialog.show(); - }); - this.$summary_container.on("click", ".print-btn", () => { - this.print_receipt(); - }); - } - print_receipt() { - const frm = this.events.get_frm(); - frappe.utils.print( - this.doc.doctype, - this.doc.name, - frm.pos_print_format, - this.doc.letter_head, - this.doc.language || frappe.boot.lang - ); - } - attach_shortcuts() { - const ctrl_label = frappe.utils.is_mac() ? "\u2318" : "Ctrl"; - this.$summary_container.find(".print-btn").attr("title", `${ctrl_label}+P`); - frappe.ui.keys.add_shortcut({ - shortcut: "ctrl+p", - action: () => this.$summary_container.find(".print-btn").click(), - condition: () => this.$component.is(":visible") && this.$summary_container.find(".print-btn").is(":visible"), - description: __("Print Receipt"), - page: cur_page.page.page - }); - this.$summary_container.find(".new-btn").attr("title", `${ctrl_label}+Enter`); - frappe.ui.keys.on("ctrl+enter", () => { - const summary_is_visible = this.$component.is(":visible"); - if (summary_is_visible && this.$summary_container.find(".new-btn").is(":visible")) { - this.$summary_container.find(".new-btn").click(); - } - }); - this.$summary_container.find(".edit-btn").attr("title", `${ctrl_label}+E`); - frappe.ui.keys.add_shortcut({ - shortcut: "ctrl+e", - action: () => this.$summary_container.find(".edit-btn").click(), - condition: () => this.$component.is(":visible") && this.$summary_container.find(".edit-btn").is(":visible"), - description: __("Edit Receipt"), - page: cur_page.page.page - }); - } - send_email() { - const frm = this.events.get_frm(); - const recipients = this.email_dialog.get_values().email_id; - const content = this.email_dialog.get_values().content; - const doc = this.doc || frm.doc; - const print_format = frm.pos_print_format; - frappe.call({ - method: "frappe.core.doctype.communication.email.make", - args: { - recipients, - subject: __(frm.meta.name) + ": " + doc.name, - content: content ? content : __(frm.meta.name) + ": " + doc.name, - doctype: doc.doctype, - name: doc.name, - send_email: 1, - print_format, - sender_full_name: frappe.user.full_name(), - _lang: doc.language - }, - callback: (r) => { - if (!r.exc) { - frappe.utils.play_sound("email"); - if (r.message["emails_not_sent_to"]) { - frappe.msgprint(__( - "Email not sent to {0} (unsubscribed / disabled)", - [frappe.utils.escape_html(r.message["emails_not_sent_to"])] - )); - } else { - frappe.show_alert({ - message: __("Email sent successfully."), - indicator: "green" - }); - } - this.email_dialog.hide(); - } else { - frappe.msgprint(__("There were errors while sending email. Please try again.")); - } - } - }); - } - add_summary_btns(map) { - this.$summary_btns.html(""); - map.forEach((m) => { - if (m.condition) { - m.visible_btns.forEach((b) => { - const class_name = b.split(" ")[0].toLowerCase(); - const btn = __(b); - this.$summary_btns.append( - `
${btn}
` - ); - }); - } - }); - this.$summary_btns.children().last().removeClass("mr-4"); - } - toggle_summary_placeholder(show) { - if (show) { - this.$summary_wrapper.css("display", "none"); - this.$component.find(".no-summary-placeholder").css("display", "flex"); - } else { - this.$summary_wrapper.css("display", "flex"); - this.$component.find(".no-summary-placeholder").css("display", "none"); - } - } - get_condition_btn_map(after_submission) { - if (after_submission) - return [{ condition: true, visible_btns: ["Print Receipt", "Email Receipt", "Send Whatsapp", "New Order"] }]; - return [ - { condition: this.doc.docstatus === 0, visible_btns: ["Print Receipt", "Edit Order", "Delete Order", "Send Whatsapp"] }, - { condition: !this.doc.is_return && this.doc.docstatus === 1, visible_btns: ["Print Receipt", "Email Receipt", "Return", "Send Whatsapp"] }, - { condition: this.doc.is_return && this.doc.docstatus === 1, visible_btns: ["Print Receipt", "Email Receipt", "Send Whatsapp"] } - ]; - } - load_summary_of(doc, after_submission = false) { - after_submission ? this.$component.css("grid-column", "span 10 / span 10") : this.$component.css("grid-column", "span 6 / span 6"); - this.toggle_summary_placeholder(false); - this.doc = doc; - this.attach_document_info(doc); - this.attach_items_info(doc); - this.attach_totals_info(doc); - this.attach_payments_info(doc); - const condition_btns_map = this.get_condition_btn_map(after_submission); - this.add_summary_btns(condition_btns_map); - this.$summary_wrapper.css("width", after_submission ? "35%" : "60%"); - if (after_submission) { - this.print_receipt_on_order_complete(); - } - } - attach_document_info(doc) { - frappe.db.get_value("Customer", this.doc.customer, "email_id").then(({ message }) => { - this.customer_email = message.email_id || ""; - const upper_section_dom = this.get_upper_section_html(doc); - this.$upper_section.html(upper_section_dom); - }); - } - attach_items_info(doc) { - this.$items_container.html(""); - doc.items.forEach((item) => { - const item_dom = this.get_item_html(doc, item); - this.$items_container.append(item_dom); - this.set_dynamic_rate_header_width(); - }); - } - set_dynamic_rate_header_width() { - const rate_cols = Array.from(this.$items_container.find(".item-rate-disc")); - this.$items_container.find(".item-rate-disc").css("width", ""); - let max_width = rate_cols.reduce((max_width2, elm) => { - if ($(elm).width() > max_width2) - max_width2 = $(elm).width(); - return max_width2; - }, 0); - max_width += 1; - if (max_width == 1) - max_width = ""; - this.$items_container.find(".item-rate-disc").css("width", max_width); - } - attach_payments_info(doc) { - this.$payment_container.html(""); - doc.payments.forEach((p) => { - if (p.amount) { - const payment_dom = this.get_payment_html(doc, p); - this.$payment_container.append(payment_dom); - } - }); - if (doc.redeem_loyalty_points && doc.loyalty_amount) { - const payment_dom = this.get_payment_html(doc, { - mode_of_payment: "Loyalty Points", - amount: doc.loyalty_amount - }); - this.$payment_container.append(payment_dom); - } - } - attach_totals_info(doc) { - this.$totals_container.html(""); - const net_total_dom = this.get_net_total_html(doc); - const taxes_dom = this.get_taxes_html(doc); - const discount_dom = this.get_discount_html(doc); - const grand_total_dom = this.get_grand_total_html(doc); - this.$totals_container.append(net_total_dom); - this.$totals_container.append(taxes_dom); - this.$totals_container.append(discount_dom); - this.$totals_container.append(grand_total_dom); - } - toggle_component(show) { - show ? this.$component.css("display", "flex") : this.$component.css("display", "none"); - } - async print_receipt_on_order_complete() { - var _a; - const profile_name = ((_a = this.pos_profile) == null ? void 0 : _a.name) || this.pos_profile; - const { message } = await frappe.db.get_value( - "POS Profile", - profile_name, - ["print_receipt_on_order_complete", "print_format"] - ); - if (message == null ? void 0 : message.print_receipt_on_order_complete) { - setTimeout(() => this.print_receipt(), 300); - } - } - }; -})(); -//# sourceMappingURL=posnext.bundle.TN4KQRHJ.js.map diff --git a/posnext/public/dist/js/posnext.bundle.TN4KQRHJ.js.map b/posnext/public/dist/js/posnext.bundle.TN4KQRHJ.js.map deleted file mode 100644 index fd8823c..0000000 --- a/posnext/public/dist/js/posnext.bundle.TN4KQRHJ.js.map +++ /dev/null @@ -1,7 +0,0 @@ -{ - "version": 3, - "sources": ["../../../../../apps/posnext/posnext/public/js/pos_controller.js", "../../../../../apps/posnext/posnext/public/js/pos_item_selector.js", "../../../../../apps/posnext/posnext/public/js/pos_item_cart.js", "../../../../../apps/posnext/posnext/public/js/pos_item_details.js", "../../../../../apps/posnext/posnext/public/js/pos_number_pad.js", "../../../../../apps/posnext/posnext/public/js/pos_payment.js", "../../../../../apps/posnext/posnext/public/js/pos_past_order_list.js", "../../../../../apps/posnext/posnext/public/js/pos_past_order_summary.js"], - "sourcesContent": ["frappe.provide('posnext.PointOfSale');\nvar selected_item = null\n\nposnext.PointOfSale.Controller = class {\n\tconstructor(wrapper) {\n\t\tconsole.log(\"CONTROLLLLLERE\")\n\t\tthis.wrapper = $(wrapper).find('.layout-main-section');\n\t\tthis.page = wrapper.page;\n\t\tfrappe.run_serially([\n\t\t\t() => this.reload_status = false,\n\t\t\t() => this.check_opening_entry(\"\"),\n\t\t\t() => this.reload_status = true,\n\t\t]);\n\n\n\n\t}\n\n\tfetch_opening_entry(value) {\n\t\treturn frappe.call(\"posnext.posnext.page.posnext.point_of_sale.check_opening_entry\", { \"user\": frappe.session.user, \"value\": value });\n\t}\n\n\tcheck_opening_entry(value = \"\") {\n\t\tthis.fetch_opening_entry(value).then((r) => {\n\t\t\tif (r.message.length) {\n\t\t\t\t// assuming only one opening voucher is available for the current user\n\t\t\t\tthis.prepare_app_defaults(r.message[0]);\n\t\t\t} else {\n\t\t\t\tthis.create_opening_voucher();\n\t\t\t}\n\t\t});\n\t}\n\n\tcreate_opening_voucher() {\n\t\tconst me = this;\n\t\tconst table_fields = [\n\t\t\t{\n\t\t\t\tfieldname: \"mode_of_payment\", fieldtype: \"Link\",\n\t\t\t\tin_list_view: 1, label: \"Mode of Payment\",\n\t\t\t\toptions: \"Mode of Payment\", reqd: 1\n\t\t\t},\n\t\t\t{\n\t\t\t\tfieldname: \"opening_amount\", fieldtype: \"Currency\",\n\t\t\t\tin_list_view: 1, label: \"Opening Amount\",\n\t\t\t\toptions: \"company:company_currency\",\n\t\t\t\tchange: function () {\n\t\t\t\t\tdialog.fields_dict.balance_details.df.data.some(d => {\n\t\t\t\t\t\tif (d.idx == this.doc.idx) {\n\t\t\t\t\t\t\td.opening_amount = this.value;\n\t\t\t\t\t\t\tdialog.fields_dict.balance_details.grid.refresh();\n\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}\n\t\t];\n\t\tconst fetch_pos_payment_methods = () => {\n\t\t\tconst pos_profile = dialog.fields_dict.pos_profile.get_value();\n\t\t\tif (!pos_profile) return;\n\t\t\tfrappe.db.get_doc(\"POS Profile\", pos_profile).then(({ payments }) => {\n\t\t\t\tdialog.fields_dict.balance_details.df.data = [];\n\t\t\t\tpayments.forEach(pay => {\n\t\t\t\t\tconst { mode_of_payment } = pay;\n\t\t\t\t\tdialog.fields_dict.balance_details.df.data.push({ mode_of_payment, opening_amount: '0' });\n\t\t\t\t});\n\t\t\t\tdialog.fields_dict.balance_details.grid.refresh();\n\t\t\t});\n\t\t}\n\t\tconst dialog = new frappe.ui.Dialog({\n\t\t\ttitle: __('Create POS Opening Entry'),\n\t\t\tstatic: true,\n\t\t\tfields: [\n\t\t\t\t{\n\t\t\t\t\tfieldtype: 'Link', label: __('Company'), default: frappe.defaults.get_default('company'),\n\t\t\t\t\toptions: 'Company', fieldname: 'company', reqd: 1\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tfieldtype: 'Link', label: __('POS Profile'),\n\t\t\t\t\toptions: 'POS Profile', fieldname: 'pos_profile', reqd: 1,\n\t\t\t\t\tget_query: () => pos_profile_query(),\n\t\t\t\t\tonchange: () => fetch_pos_payment_methods()\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tfieldname: \"balance_details\",\n\t\t\t\t\tfieldtype: \"Table\",\n\t\t\t\t\tlabel: \"Opening Balance Details\",\n\t\t\t\t\tcannot_add_rows: false,\n\t\t\t\t\tin_place_edit: true,\n\t\t\t\t\treqd: 1,\n\t\t\t\t\tdata: [],\n\t\t\t\t\tfields: table_fields\n\t\t\t\t}\n\t\t\t],\n\t\t\tprimary_action: async function({ company, pos_profile, balance_details }) {\n\t\t\t\tif (!balance_details.length) {\n\t\t\t\t\tfrappe.show_alert({\n\t\t\t\t\t\tmessage: __(\"Please add Mode of payments and opening balance details.\"),\n\t\t\t\t\t\tindicator: 'red'\n\t\t\t\t\t})\n\t\t\t\t\treturn frappe.utils.play_sound(\"error\");\n\t\t\t\t}\n\n\t\t\t\t// filter balance details for empty rows\n\t\t\t\tbalance_details = balance_details.filter(d => d.mode_of_payment);\n\n\t\t\t\tconst method = \"posnext.posnext.page.posnext.point_of_sale.create_opening_voucher\";\n\t\t\t\tconst res = await frappe.call({ method, args: { pos_profile, company, balance_details }, freeze:true });\n\t\t\t\t!res.exc && me.prepare_app_defaults(res.message);\n\t\t\t\tdialog.hide();\n\t\t\t},\n\t\t\tprimary_action_label: __('Submit')\n\t\t});\n\t\tdialog.show();\n\t\tconst pos_profile_query = () => {\n\t\t\treturn {\n\t\t\t\tquery: 'erpnext.accounts.doctype.pos_profile.pos_profile.pos_profile_query',\n\t\t\t\tfilters: { company: dialog.fields_dict.company.get_value() }\n\t\t\t}\n\t\t};\n\t}\n\n\tasync prepare_app_defaults(data) {\n\t\tthis.pos_opening = data.name;\n\t\tthis.company = data.company;\n\t\tthis.pos_profile = data.pos_profile;\n\t\tthis.pos_opening_time = data.period_start_date;\n\t\tthis.item_stock_map = {};\n\t\tthis.settings = {};\n\t\twindow.current_pos_profile = this.pos_profile\n\t\tfrappe.db.get_value('Stock Settings', undefined, 'allow_negative_stock').then(({ message }) => {\n\t\t\tthis.allow_negative_stock = flt(message.allow_negative_stock) || false;\n\t\t});\n\n\t\tfrappe.call({\n\t\t\tmethod: \"posnext.posnext.page.posnext.point_of_sale.get_pos_profile_data\",\n\t\t\targs: { \"pos_profile\": this.pos_profile },\n\t\t\tcallback: (res) => {\n\t\t\t\tconst profile = res.message;\n\n\t\t\t\tObject.assign(this.settings, profile);\n\t\t\t\tthis.settings.customer_groups = profile.customer_groups.map(group => group.name);\n\n\t\t\t\tthis.make_app();\n\t\t\t}\n\t\t});\n\t}\n\n\tset_opening_entry_status() {\n\t\tthis.page.set_title_sub(\n\t\t\t`\n\t\t\t\t\n\t\t\t\t\tOpened at ${moment(this.pos_opening_time).format(\"Do MMMM, h:mma\")}\n\t\t\t\t\n\t\t\t`);\n\t}\n\n\tmake_app() {\n\t\tthis.prepare_dom();\n\t\tthis.prepare_components();\n\t\tthis.prepare_menu();\n\t\tthis.make_new_invoice();\n\t}\n\n\tprepare_dom() {\n\t\tthis.wrapper.append(\n\t\t\t`
`\n\t\t);\n\n\t\tthis.$components_wrapper = this.wrapper.find('.point-of-sale-app');\n\t}\n\n\tprepare_components() {\n\t\tthis.init_item_selector();\n\t\tthis.init_item_details();\n\t\tthis.init_item_cart();\n\t\tthis.init_payments();\n\t\tthis.init_recent_order_list();\n\t\tthis.init_order_summary();\n\t}\n\n\tprepare_menu() {\n\t\tthis.page.clear_menu();\n\t\tif(this.settings.custom_show_open_form_view){\n\t\t\tthis.page.add_menu_item(__(\"Open Form View\"), this.open_form_view.bind(this), false, 'Ctrl+F');\n\t\t}\n\t\tif(this.settings.custom_show_toggle_recent_orders) {\n\t\t\tthis.page.add_menu_item(__(\"Toggle Recent Orders\"), this.toggle_recent_order.bind(this), false, 'Ctrl+O');\n\t\t}\n\t\tif(this.settings.custom_show_save_as_draft) {\n\t\t\tthis.page.add_menu_item(__(\"Save as Draft\"), this.save_draft_invoice.bind(this), false, 'Ctrl+S');\n\t\t}\n\t\tif(this.settings.custom_show_close_the_pos) {\n\t\t\tthis.page.add_menu_item(__('Close the POS'), this.close_pos.bind(this), false, 'Shift+Ctrl+C');\n\t\t}\n\t}\n\n\topen_form_view() {\n\t\tfrappe.model.sync(this.frm.doc);\n\t\tfrappe.set_route(\"Form\", this.frm.doc.doctype, this.frm.doc.name);\n\t}\n\n\ttoggle_recent_order() {\n\t\tconst show = this.recent_order_list.$component.is(':hidden');\n\t\tthis.toggle_recent_order_list(show);\n\t}\n\n\tsave_draft_invoice() {\n\t\tif (!this.$components_wrapper.is(\":visible\")) return;\n\t\tconsole.log(this.frm.doc.items)\n\t\tif (this.frm.doc.items.length == 0) {\n\t\t\tfrappe.show_alert({\n\t\t\t\tmessage: __(\"You must add atleast one item to save it as draft.\"),\n\t\t\t\tindicator:'red'\n\t\t\t});\n\t\t\tfrappe.utils.play_sound(\"error\");\n\t\t\treturn;\n\t\t}\n\n\t\tthis.frm.save(undefined, undefined, undefined, () => {\n\t\t\tfrappe.show_alert({\n\t\t\t\tmessage: __(\"There was an error saving the document.\"),\n\t\t\t\tindicator: 'red'\n\t\t\t});\n\t\t\tfrappe.utils.play_sound(\"error\");\n\t\t}).then(() => {\n\t\t\tfrappe.run_serially([\n\t\t\t\t() => frappe.dom.freeze(),\n\t\t\t\t() => this.make_new_invoice(false),\n\t\t\t\t() => frappe.dom.unfreeze()\n\n\n\t\t\t]);\n\n\n\n\t\t});\n\t}\n\n\tclose_pos() {\n\t\tif (!this.$components_wrapper.is(\":visible\")) return;\n\n\t\tlet voucher = frappe.model.get_new_doc('POS Closing Entry');\n\t\tvoucher.pos_profile = this.frm.doc.pos_profile;\n\t\tvoucher.user = frappe.session.user;\n\t\tvoucher.company = this.frm.doc.company;\n\t\tvoucher.pos_opening_entry = this.pos_opening;\n\t\tvoucher.period_end_date = frappe.datetime.now_datetime();\n\t\tvoucher.posting_date = frappe.datetime.now_date();\n\t\tvoucher.posting_time = frappe.datetime.now_time();\n\t\tfrappe.set_route('Form', 'POS Closing Entry', voucher.name);\n\t}\n\n\tinit_item_selector() {\n\t\tif(this.frm){\n\t\tthis.frm.doc.set_warehouse = this.settings.warehouse\n\t\t}\n\t\tthis.item_selector = new posnext.PointOfSale.ItemSelector({\n\t\t\twrapper: this.$components_wrapper,\n\t\t\tpos_profile: this.pos_profile,\n\t\t\tsettings: this.settings,\n\t\t\treload_status: this.reload_status,\n\t\t\tcurrency: this.settings.currency,\n\t\t\tevents: {\n\t\t\t\tcheck_opening_entry: () => this.check_opening_entry(),\n\t\t\t\titem_selected: args => this.on_cart_update(args),\n\t\t\t\tinit_item_cart: () => this.init_item_cart(),\n\t\t\t\tinit_item_details: () => this.init_item_details(),\n\t\t\t\tchange_items: (args) => this.change_items(args),\n\t\t\t\tget_frm: () => this.frm || {}\n\t\t\t}\n\t\t})\n\t}\n\tchange_items(items){\n\t\tvar me = this\n\t\tthis.frm = items;\n\t\tthis.cart.load_invoice()\n\t}\n\n\tinit_item_cart() {\n\t\tthis.cart = new posnext.PointOfSale.ItemCart({\n\t\t\twrapper: this.$components_wrapper,\n\t\t\tsettings: this.settings,\n\t\t\tevents: {\n\t\t\t\tget_frm: () => this.frm,\n\t\t\t\tremove_item_from_cart: (item) => {\n\t\t\t\t\tthis.item_details.current_item = item\n\t\t\t\t\tthis.item_details.name = item.name\n\t\t\t\t\tthis.item_details.doctype= item.doctype\n\n\t\t\t\t},\n\t\t\t\tform_updated: (item, field, value) => {\n\t\t\t\t\tthis.item_details.current_item = item\n\t\t\t\t\tconst item_row = frappe.model.get_doc(item.doctype, item.name);\n\t\t\t\t\tif(field === 'qty' && this.frm.doc.is_return && value >=0){\n\t\t\t\t\t\tfrappe.throw(\"Qty must be negative for return document\" )\n\t\t\t\t\t}\n\t\t\t\t\tif (item_row && item_row[field] != value) {\n\t\t\t\t\t\tconst args = {\n\t\t\t\t\t\t\tfield,\n\t\t\t\t\t\t\tvalue,\n\t\t\t\t\t\t\titem: this.item_details.current_item\n\t\t\t\t\t\t};\n\t\t\t\t\t\treturn this.on_cart_update(args);\n\t\t\t\t\t}\n\n\t\t\t\t\treturn Promise.resolve();\n\t\t\t\t},\n\t\t\t\tcart_item_clicked: (item) => {\n\n\t\t\t\t\tconst item_row = this.get_item_from_frm(item);\n\n\t\t\t\t\tif(selected_item && selected_item['name'] == item['name']){\n\t\t\t\t\t\tselected_item = null\n\t\t\t\t\t} else {\n\t\t\t\t\t\tselected_item = item_row\n\t\t\t\t\t}\n\t\t\t\t\tthis.item_details.toggle_item_details_section(item_row);\n\t\t\t\t},\n\n\t\t\t\tnumpad_event: (value, action) => this.update_item_field(value, action),\n\n\t\t\t\tcheckout: () => this.save_and_checkout(),\n\n\t\t\t\tedit_cart: () => this.payment.edit_cart(),\n\t\t\t\tsave_draft_invoice: () => this.save_draft_invoice(),\n\t\t\t\ttoggle_recent_order: () => this.toggle_recent_order(),\n\t\t\t\tcustomer_details_updated: (details) => {\n\t\t\t\t\tthis.customer_details = details;\n\t\t\t\t\t// will add/remove LP payment method\n\t\t\t\t\tthis.payment.render_loyalty_points_payment_mode();\n\t\t\t\t}\n\t\t\t}\n\t\t})\n\t}\n\n\tinit_item_details() {\n\t\tthis.item_details = new posnext.PointOfSale.ItemDetails({\n\t\t\twrapper: this.$components_wrapper,\n\t\t\tsettings: this.settings,\n\t\t\tevents: {\n\t\t\t\tget_frm: () => this.frm,\n\n\t\t\t\ttoggle_item_selector: (minimize) => {\n\t\t\t\t\tthis.item_selector.resize_selector(minimize);\n\t\t\t\t\tthis.cart.toggle_numpad(minimize);\n\t\t\t\t},\n\n\t\t\t\tform_updated: (item, field, value) => {\n\t\t\t\t\tconst item_row = frappe.model.get_doc(item.doctype, item.name);\n\t\t\t\t\tif(field === 'qty' && this.frm.doc.is_return && value >=0){\n\t\t\t\t\t\tfrappe.throw(\"Qty must be negative for return document\" )\n\t\t\t\t\t}\n\t\t\t\t\tif (item_row && item_row[field] != value) {\n\t\t\t\t\t\tconst args = {\n\t\t\t\t\t\t\tfield,\n\t\t\t\t\t\t\tvalue,\n\t\t\t\t\t\t\titem: this.item_details.current_item\n\t\t\t\t\t\t};\n\t\t\t\t\t\treturn this.on_cart_update(args);\n\t\t\t\t\t}\n\n\t\t\t\t\treturn Promise.resolve();\n\t\t\t\t},\n\n\t\t\t\thighlight_cart_item: (item) => {\n\t\t\t\t\tconst cart_item = this.cart.get_cart_item(item);\n\t\t\t\t\tthis.cart.toggle_item_highlight(cart_item);\n\t\t\t\t},\n\n\t\t\t\titem_field_focused: (fieldname) => {\n\t\t\t\t\tthis.cart.toggle_numpad_field_edit(fieldname);\n\t\t\t\t},\n\t\t\t\tset_value_in_current_cart_item: (selector, value) => {\n\t\t\t\t\tthis.cart.update_selector_value_in_cart_item(selector, value, this.item_details.current_item);\n\t\t\t\t},\n\t\t\t\tclone_new_batch_item_in_frm: (batch_serial_map, item) => {\n\t\t\t\t\t// called if serial nos are 'auto_selected' and if those serial nos belongs to multiple batches\n\t\t\t\t\t// for each unique batch new item row is added in the form & cart\n\t\t\t\t\tObject.keys(batch_serial_map).forEach(batch => {\n\t\t\t\t\t\tconst item_to_clone = this.frm.doc.items.find(i => i.name == item.name);\n\t\t\t\t\t\tconst new_row = this.frm.add_child(\"items\", { ...item_to_clone });\n\t\t\t\t\t\t// update new serialno and batch\n\t\t\t\t\t\tnew_row.batch_no = batch;\n\t\t\t\t\t\tnew_row.serial_no = batch_serial_map[batch].join(`\\n`);\n\t\t\t\t\t\tnew_row.qty = batch_serial_map[batch].length;\n\t\t\t\t\t\tthis.frm.doc.items.forEach(row => {\n\t\t\t\t\t\t\tif (item.item_code === row.item_code) {\n\t\t\t\t\t\t\t\tthis.update_cart_html(row);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t});\n\t\t\t\t\t})\n\t\t\t\t},\n\t\t\t\tremove_item_from_cart: () => this.remove_item_from_cart(),\n\t\t\t\tget_item_stock_map: () => this.item_stock_map,\n\t\t\t\tclose_item_details: () => {\n\t\t\t\t\tselected_item = null\n\t\t\t\t\tthis.item_details.toggle_item_details_section(null);\n\t\t\t\t\tthis.cart.prev_action = null;\n\t\t\t\t\tthis.cart.toggle_item_highlight();\n\t\t\t\t},\n\t\t\t\tget_available_stock: (item_code, warehouse) => this.get_available_stock(item_code, warehouse)\n\t\t\t}\n\t\t});\n\t\tif(selected_item){\n\t\t\tthis.item_details.toggle_item_details_section(selected_item);\n\t\t}\n\t}\n\n\tinit_payments() {\n\t\tthis.payment = new posnext.PointOfSale.Payment({\n\t\t\twrapper: this.$components_wrapper,\n\t\t\tsettings: this.settings,\n\t\t\tevents: {\n\t\t\t\tget_frm: () => this.frm || {},\n\n\t\t\t\tget_customer_details: () => this.customer_details || {},\n\n\t\t\t\ttoggle_other_sections: (show) => {\n\t\t\t\t\tif (show) {\n\t\t\t\t\t\tthis.item_details.$component.is(':visible') ? this.item_details.$component.css('display', 'none') : '';\n\t\t\t\t\t\tthis.item_selector.toggle_component(false);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tthis.item_selector.toggle_component(true);\n\t\t\t\t\t}\n\t\t\t\t},\n\n\t\t\t\tsubmit_invoice: () => {\n\t\t\t\t\tthis.frm.savesubmit()\n\t\t\t\t\t\t.then((r) => {\n\t\t\t\t\t\t\tthis.toggle_components(false);\n\t\t\t\t\t\t\tthis.order_summary.toggle_component(true);\n\t\t\t\t\t\t\tthis.order_summary.load_summary_of(this.frm.doc, true);\n\t\t\t\t\t\t\tfrappe.show_alert({\n\t\t\t\t\t\t\t\tindicator: 'green',\n\t\t\t\t\t\t\t\tmessage: __('POS invoice {0} created succesfully', [r.doc.name])\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t}\n\n\tinit_recent_order_list() {\n\t\tthis.recent_order_list = new posnext.PointOfSale.PastOrderList({\n\t\t\twrapper: this.$components_wrapper,\n\t\t\tevents: {\n\t\t\t\topen_invoice_data: (name) => {\n\t\t\t\t\tfrappe.db.get_doc('Sales Invoice', name).then((doc) => {\n\t\t\t\t\t\tthis.order_summary.load_summary_of(doc);\n\t\t\t\t\t});\n\t\t\t\t},\n\t\t\t\treset_summary: () => this.order_summary.toggle_summary_placeholder(true),\n\t\t\t\tprevious_screen: () => {\n\t\t\t\t\tthis.recent_order_list.toggle_component(false);\n\t\t\t\t\tthis.cart.load_invoice()\n\t\t\t\t\tthis.item_selector.toggle_component(true)\n\t\t\t\t\tthis.wrapper.find('.past-order-summary').css(\"display\",\"none\");\n\t\t\t\t},\n\n\t\t\t},\n\t\t\tsettings: this.settings,\n\t\t})\n\t}\n\n\tinit_order_summary() {\n\t\tthis.order_summary = new posnext.PointOfSale.PastOrderSummary({\n\t\t\twrapper: this.$components_wrapper,\n\t\t\tpos_profile: this.settings,\n\t\t\tevents: {\n\t\t\t\tget_frm: () => this.frm,\n\n\t\t\t\tprocess_return: (name) => {\n\t\t\t\t\tthis.recent_order_list.toggle_component(false);\n\t\t\t\t\tfrappe.db.get_doc('Sales Invoice', name).then((doc) => {\n\t\t\t\t\t\tfrappe.run_serially([\n\t\t\t\t\t\t\t() => this.make_return_invoice(doc),\n\t\t\t\t\t\t\t() => this.cart.load_invoice(),\n\t\t\t\t\t\t\t() => this.item_selector.toggle_component(true)\n\t\t\t\t\t\t]);\n\t\t\t\t\t});\n\t\t\t\t},\n\t\t\t\tedit_order: (name) => {\n\t\t\t\t\tconsole.log(\"Edit Order...\")\n\t\t\t\t\tthis.recent_order_list.toggle_component(false);\n\t\t\t\t\tfrappe.run_serially([\n\t\t\t\t\t\t() => this.frm.refresh(name),\n\t\t\t\t\t\t() => this.frm.call('reset_mode_of_payments'),\n\t\t\t\t\t\t() => this.cart.load_invoice(),\n\t\t\t\t\t\t() => this.item_selector.toggle_component(true)\n\t\t\t\t\t]);\n\t\t\t\t},\n\t\t\t\tdelete_order: (name) => {\n\t\t\t\t\tfrappe.model.delete_doc(this.frm.doc.doctype, name, () => {\n\t\t\t\t\t\tthis.recent_order_list.refresh_list();\n\t\t\t\t\t});\n\t\t\t\t},\n\t\t\t\tnew_order: () => {\n\t\t\t\t\tfrappe.run_serially([\n\t\t\t\t\t\t() => frappe.dom.freeze(),\n\t\t\t\t\t\t() => this.make_new_invoice(),\n\t\t\t\t\t\t() => this.item_selector.toggle_component(true),\n\t\t\t\t\t\t() => frappe.dom.unfreeze(),\n\t\t\t\t\t]);\n\t\t\t\t}\n\t\t\t}\n\t\t})\n\t}\n\n\ttoggle_recent_order_list(show) {\n\t\tthis.toggle_components(!show);\n\t\tthis.recent_order_list.toggle_component(show);\n\t\tthis.order_summary.toggle_component(show);\n\t}\n\n\ttoggle_components(show) {\n\t\tthis.cart.toggle_component(show);\n\t\tthis.item_selector.toggle_component(show);\n\n\t\t// do not show item details or payment if recent order is toggled off\n\t\t!show ? (this.item_details.toggle_component(false) || this.payment.toggle_component(false)) : '';\n\t}\n\n\tmake_new_invoice(from_held=false) {\n\t\tif(from_held){\n\t\t\treturn frappe.run_serially([\n\t\t\t\t() => frappe.dom.freeze(),\n\t\t\t\t() => this.make_sales_invoice_frm(),\n\t\t\t\t() => this.set_pos_profile_data(),\n\t\t\t\t() => this.set_pos_profile_status(),\n\t\t\t\t() => this.cart.load_invoice(),\n\t\t\t\t() => frappe.dom.unfreeze(),\n\t\t\t\t() => this.toggle_recent_order(),\n\t\t\t]);\n\t\t} else {\n\t\t\treturn frappe.run_serially([\n\t\t\t\t() => frappe.dom.freeze(),\n\t\t\t\t() => this.make_sales_invoice_frm(),\n\t\t\t\t() => this.set_pos_profile_data(),\n\t\t\t\t() => this.set_pos_profile_status(),\n\t\t\t\t() => this.cart.load_invoice(),\n\t\t\t\t() => frappe.dom.unfreeze(),\n\t\t\t]);\n\t\t}\n\n\t}\n\n\tmake_sales_invoice_frm() {\n\t\tconst doctype = 'Sales Invoice';\n\t\treturn new Promise(resolve => {\n\t\t\tif (this.frm) {\n\t\t\t\tthis.frm = this.get_new_frm(this.frm);\n\t\t\t\tthis.frm.doc.items = [];\n\t\t\t\tthis.frm.doc.is_pos = 1\n\t\t\t\tthis.frm.doc.set_warehouse = this.settings.warehouse\n\t\t\t\tresolve();\n\t\t\t} else {\n\t\t\t\tfrappe.model.with_doctype(doctype, () => {\n\t\t\t\t\tthis.frm = this.get_new_frm();\n\t\t\t\t\tthis.frm.doc.items = [];\n\t\t\t\t\tthis.frm.doc.is_pos = 1\n\t\t\t\t\tthis.frm.doc.set_warehouse = this.settings.warehouse\n\t\t\t\t\tresolve();\n\t\t\t\t});\n\t\t\t}\n\t\t});\n\t}\n\n\tget_new_frm(_frm) {\n\t\tconst doctype = 'Sales Invoice';\n\t\tconst page = $('
');\n\t\tconst frm = _frm || new frappe.ui.form.Form(doctype, page, false);\n\t\tconst name = frappe.model.make_new_doc_and_get_name(doctype, true);\n\t\tfrm.refresh(name);\n\n\t\treturn frm;\n\t}\n\n\tasync make_return_invoice(doc) {\n\t\tfrappe.dom.freeze();\n\t\tthis.frm = this.get_new_frm(this.frm);\n\t\tthis.frm.doc.items = [];\n\t\treturn frappe.call({\n\t\t\tmethod: \"posnext.posnext.page.posnext.point_of_sale.make_sales_return\",\n\t\t\targs: {\n\t\t\t\t'source_name': doc.name,\n\t\t\t\t'target_doc': this.frm.doc\n\t\t\t},\n\t\t\tcallback: (r) => {\n\t\t\t\t// console.log(r.message)\n\t\t\t\tfrappe.model.sync(r.message);\n\t\t\t\tfrappe.get_doc(r.message.doctype, r.message.name).__run_link_triggers = false;\n\t\t\t\tthis.set_pos_profile_data().then(() => {\n\t\t\t\t\tfrappe.dom.unfreeze();\n\t\t\t\t});\n\t\t\t}\n\t\t});\n\t}\n\n\tset_pos_profile_data() {\n\t\tif (this.company && !this.frm.doc.company) this.frm.doc.company = this.company;\n\t\tif ((this.pos_profile && !this.frm.doc.pos_profile) | (this.frm.doc.is_return && this.pos_profile != this.frm.doc.pos_profile)) {\n\t\t\tthis.frm.doc.pos_profile = this.pos_profile;\n\t\t}\n\n\t\tif (!this.frm.doc.company) return;\n\n\t\treturn this.frm.trigger(\"set_pos_data\");\n\t}\n\n\tset_pos_profile_status() {\n\t\tthis.page.set_indicator(this.pos_profile, \"blue\");\n\t}\n\n\tasync on_cart_update(args) {\n\t\t// frappe.dom.freeze();\n\t\tconsole.log(\"Updating Cart\")\n\t\tlet item_row = undefined;\n\t\ttry {\n\t\t\tlet { field, value, item } = args;\n\t\t\titem_row = this.get_item_from_frm(item);\n\t\t\tconst item_row_exists = !$.isEmptyObject(item_row);\n\t\n\t\t\tconst from_selector = field === 'qty' && value === \"+1\";\n\t\t\tif (from_selector)\n\t\t\t\tvalue = flt(item_row.stock_qty) + flt(value);\n\t\n\t\t\tif (item_row_exists) {\n\t\t\t\tif (field === 'qty')\n\t\t\t\t\tvalue = flt(value);\n\t\n\t\t\t\tif (['qty', 'conversion_factor'].includes(field) && value > 0 && !this.allow_negative_stock) {\n\t\t\t\t\tconst qty_needed = field === 'qty' ? value * item_row.conversion_factor : item_row.qty * value;\n\t\t\t\t\t// await this.check_stock_availability(item_row, qty_needed, this.frm.doc.set_warehouse);\n\t\t\t\t}\n\t\n\t\t\t\tif (this.is_current_item_being_edited(item_row) || from_selector) {\n\t\t\t\t\tawait frappe.model.set_value(item_row.doctype, item_row.name, field, value)\n\t\t\t\t\t// this.update_cart_html(item_row);\n\t\t\t\t}\n\t\n\t\t\t} else {\n\t\t\t\tif (!this.frm.doc.customer && !this.settings.custom_mobile_number_based_customer){\n\t\t\t\t\treturn this.raise_customer_selection_alert();\n\t\t\t\t}\n\t\t\t\tfrappe.flags.ignore_company_party_validation = true\n\t\t\t\tconst { item_code, batch_no, serial_no, rate, uom, valuation_rate, custom_item_uoms, custom_logical_rack } = item;\n\t\t\t\tif (!item_code)\n\t\t\t\t\treturn;\n\t\n\t\t\t\tif (this.settings.custom_product_bundle) {\n\t\t\t\t\tconst product_bundle = await this.get_product_bundle(item_code);\n\t\t\t\t\tif (product_bundle && Array.isArray(product_bundle.items)) {\n\t\t\t\t\t\tconst bundle_items = product_bundle.items.map(bundle_item => ({\n\t\t\t\t\t\t\titem_code: bundle_item.item_code,\n\t\t\t\t\t\t\tqty: bundle_item.qty * value,\n\t\t\t\t\t\t\trate: bundle_item.rate,\n\t\t\t\t\t\t\tuom: bundle_item.uom\n\t\t\t\t\t\t}));\n\t\n\t\t\t\t\t\tfor (const bundle_item of bundle_items) {\n\t\t\t\t\t\t\tconst bundle_item_row = this.frm.add_child('items', bundle_item);\n\t\t\t\t\t\t\tawait this.trigger_new_item_events(bundle_item_row);\n\t\t\t\t\t\t}\n\t\n\t\t\t\t\t\tthis.update_cart_html();\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\n\t\t\t\tconst new_item = { item_code, batch_no, rate, uom, [field]: value };\n\t\t\t\tif(value){\n\t\t\t\t\tnew_item['qty'] = value\n\t\t\t\t}\n\t\t\t\tif (serial_no) {\n\t\t\t\t\tawait this.check_serial_no_availablilty(item_code, this.frm.doc.set_warehouse, serial_no);\n\t\t\t\t\tnew_item['serial_no'] = serial_no;\n\t\t\t\t}\n\t\n\t\t\t\tif (field === 'serial_no')\n\t\t\t\t\tnew_item['qty'] = value.split(`\\n`).length || 0;\n\t\t\t\titem_row = this.frm.add_child('items', new_item);\n\t\n\t\t\t\tawait this.trigger_new_item_events(item_row);\n\t\t\t\titem_row['rate'] = rate\n\t\t\t\titem_row['valuation_rate'] = valuation_rate;\n\t\t\t\titem_row['custom_valuation_rate'] = valuation_rate;\n\t\t\t\titem_row['custom_item_uoms'] = custom_item_uoms;\n\t\t\t\titem_row['custom_logical_rack'] = custom_logical_rack;\n\t\t\t\t// this.update_cart_html(item_row);\n\t\t\t\tif (this.item_details.$component.is(':visible'))\n\t\t\t\t\tthis.edit_item_details_of(item_row);\n\t\n\t\t\t\tif (this.check_serial_batch_selection_needed(item_row) && !this.item_details.$component.is(':visible'))\n\t\t\t\t\tthis.edit_item_details_of(item_row);\n\t\t\t}\n\t\n\t\t} catch (error) {\n\t\t\tconsole.log(error);\n\t\t} finally {\n\t\t\t// frappe.dom.unfreeze();\n\t\n\t\t\tvar total_incoming_rate = 0\n\t\t\tthis.frm.doc.items.forEach(item => {\n\t\t\t\ttotal_incoming_rate += (parseFloat(item.valuation_rate) * item.qty)\n\t\t\t});\n\t\t\tthis.item_selector.update_total_incoming_rate(total_incoming_rate)\n\t\n\t\t\treturn item_row; // eslint-disable-line no-unsafe-finally\n\t\t}\n\t}\n\n\traise_customer_selection_alert() {\n\t\tfrappe.dom.unfreeze();\n\t\tfrappe.show_alert({\n\t\t\tmessage: __('You must select a customer before adding an item.'),\n\t\t\tindicator: 'orange'\n\t\t});\n\t\tfrappe.utils.play_sound(\"error\");\n\t}\n\tasync get_product_bundle(item_code) {\n\t\tconst response = await frappe.call({\n\t\t\tmethod: \"posnext.doc_events.item.get_product_bundle_with_items\",\n\t\t\targs: {\n\t\t\t\titem_code: item_code\n\t\t\t}\n\t\t\t});\n\t\treturn response.message;\n\t}\n\n\tget_item_from_frm({ name, item_code, batch_no, uom, rate }) {\n\t\tlet item_row = null;\n\t\n\t\tif (name) {\n\t\t\titem_row = this.frm.doc.items.find(i => i.name == name);\n\t\t} else {\n\t\t\t// if item is clicked twice from item selector\n\t\t\t// then \"item_code, batch_no, uom, rate\" will help in getting the exact item\n\t\t\t// to increase the qty by one\n\t\t\tfor (var i = 0; i < cur_frm.doc.items.length; i += 1) {\n\t\t\t\tconst has_batch_no = (batch_no !== 'null' && batch_no !== null);\n\t\t\t\tconst batch_no_check = this.settings.custom_allow_add_new_items_on_new_line\n\t\t\t\t\t? (has_batch_no && cur_frm.doc.items[i].batch_no === batch_no)\n\t\t\t\t\t: true;\n\t\n\t\t\t\tif (\n\t\t\t\t\tcur_frm.doc.items[i].item_code === item_code &&\n\t\t\t\t\tcur_frm.doc.items[i].uom === uom &&\n\t\t\t\t\tparseFloat(cur_frm.doc.items[i].rate) === parseFloat(rate) &&\n\t\t\t\t\tbatch_no_check\n\t\t\t\t) {\n\t\t\t\t\titem_row = cur_frm.doc.items[i];\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t\tconsole.log(item_row);\n\t\t}\n\t\treturn item_row || {};\n\t}\n\t\n\n\tedit_item_details_of(item_row) {\n\t\tthis.item_details.toggle_item_details_section(item_row);\n\t}\n\n\tis_current_item_being_edited(item_row) {\n\t\treturn item_row.name == this.item_details.current_item.name;\n\t}\n\n\tupdate_cart_html(item_row, remove_item) {\n\t\tthis.cart.update_item_html(item_row, remove_item);\n\n\t\tthis.cart.update_totals_section(this.frm);\n\n\t}\n\n\tcheck_serial_batch_selection_needed(item_row) {\n\t\t// right now item details is shown for every type of item.\n\t\t// if item details is not shown for every item then this fn will be needed\n\t\tconst serialized = item_row.has_serial_no;\n\t\tconst batched = item_row.has_batch_no;\n\t\tconst no_serial_selected = !item_row.serial_no;\n\t\tconst no_batch_selected = !item_row.batch_no;\n\n\t\tif ((serialized && no_serial_selected) || (batched && no_batch_selected) ||\n\t\t\t(serialized && batched && (no_batch_selected || no_serial_selected))) {\n\t\t\treturn true;\n\t\t}\n\t\treturn false;\n\t}\n\n\tasync trigger_new_item_events(item_row) {\n\t\tawait this.frm.script_manager.trigger('item_code', item_row.doctype, item_row.name);\n\t\tawait this.frm.script_manager.trigger('qty', item_row.doctype, item_row.name);\n\t\tawait this.frm.script_manager.trigger('discount_percentage', item_row.doctype, item_row.name);\n\t}\n\n\tasync check_stock_availability(item_row, qty_needed, warehouse) {\n\t\tconst resp = (await this.get_available_stock(item_row.item_code, warehouse)).message;\n\t\tconst available_qty = resp[0];\n\t\tconst is_stock_item = resp[1];\n\n\t\tfrappe.dom.unfreeze();\n\t\tconst bold_uom = item_row.uom.bold();\n\t\tconst bold_item_code = item_row.item_code.bold();\n\t\tconst bold_warehouse = warehouse.bold();\n\t\tconst bold_available_qty = available_qty.toString().bold()\n\t\tif (!(available_qty > 0)) {\n\t\t\tif (is_stock_item) {\n\t\t\t\tfrappe.model.clear_doc(item_row.doctype, item_row.name);\n\t\t\t\tfrappe.throw({\n\t\t\t\t\ttitle: __(\"Not Available\"),\n\t\t\t\t\tmessage: __('Item Code: {0} is not available under warehouse {1}.', [bold_item_code, bold_warehouse])\n\t\t\t\t});\n\t\t\t} else {\n\t\t\t\treturn;\n\t\t\t}\n\t\t} else if (is_stock_item && available_qty < qty_needed) {\n\t\t\tfrappe.throw({\n\t\t\t\tmessage: __('Stock quantity not enough for Item Code: {0} under warehouse {1}. Available quantity {2} {3}.', [bold_item_code, bold_warehouse, bold_available_qty, bold_uom]),\n\t\t\t\tindicator: 'orange'\n\t\t\t});\n\t\t\tfrappe.utils.play_sound(\"error\");\n\t\t}\n\t\tfrappe.dom.freeze();\n\t}\n\n\tasync check_serial_no_availablilty(item_code, warehouse, serial_no) {\n\t\tconst method = \"erpnext.stock.doctype.serial_no.serial_no.get_pos_reserved_serial_nos\";\n\t\tconst args = {filters: { item_code, warehouse }}\n\t\tconst res = await frappe.call({ method, args });\n\n\t\tif (res.message.includes(serial_no)) {\n\t\t\tfrappe.throw({\n\t\t\t\ttitle: __(\"Not Available\"),\n\t\t\t\tmessage: __('Serial No: {0} has already been transacted into another Sales Invoice.', [serial_no.bold()])\n\t\t\t});\n\t\t}\n\t}\n\n\tget_available_stock(item_code, warehouse) {\n\t\tconst me = this;\n\t\treturn frappe.call({\n\t\t\tmethod: \"erpnext.accounts.doctype.pos_invoice.pos_invoice.get_stock_availability\",\n\t\t\targs: {\n\t\t\t\t'item_code': item_code,\n\t\t\t\t'warehouse': warehouse,\n\t\t\t},\n\t\t\tcallback(res) {\n\t\t\t\tif (!me.item_stock_map[item_code])\n\t\t\t\t\tme.item_stock_map[item_code] = {};\n\t\t\t\tme.item_stock_map[item_code][warehouse] = res.message;\n\t\t\t}\n\t\t});\n\t}\n\n\tupdate_item_field(value, field_or_action) {\n\t\tif (field_or_action === 'checkout') {\n\t\t\tthis.item_details.toggle_item_details_section(null);\n\t\t} else if (field_or_action === 'remove') {\n\t\t\tthis.remove_item_from_cart();\n\t\t} else {\n\t\t\tconst field_control = this.item_details[`${field_or_action}_control`];\n\t\t\tif (!field_control) return;\n\t\t\tfield_control.set_focus();\n\t\t\tvalue != \"\" && field_control.set_value(value);\n\t\t}\n\t}\n\n\tremove_item_from_cart() {\n\t\tfrappe.dom.freeze();\n\t\tconst { doctype, name, current_item } = this.item_details;\n\t\treturn frappe.model.set_value(doctype, name, 'qty', 0)\n\t\t\t.then(() => {\n\t\t\t\tfrappe.model.clear_doc(doctype, name);\n\t\t\t\tthis.update_cart_html(current_item, true);\n\t\t\t\tthis.item_details.toggle_item_details_section(null);\n\t\t\t\tfrappe.dom.unfreeze();\n\n\t\t\t\tvar total_incoming_rate = 0\n\t\t\t\tthis.frm.doc.items.forEach(item => {\n\t\t\t\t\ttotal_incoming_rate += (parseFloat(item.valuation_rate) * item.qty)\n\t\t\t\t});\n\t\t\t\tthis.item_selector.update_total_incoming_rate(total_incoming_rate)\n\t\t\t})\n\t\t\t.catch(e => console.log(e));\n\t}\n\n\tasync save_and_checkout() {\n\t\tif (this.frm.is_dirty()) {\n\t\t\tconst div = document.getElementById(\"customer-cart-container2\");\n\t\t\tdiv.style.gridColumn = \"\";\n\t\t\tlet save_error = false;\n\t\t\tawait this.frm.save(null, null, null, () => save_error = true);\n\t\t\t// only move to payment section if save is successful\n\t\t\t!save_error && this.payment.checkout();\n\t\t\t// show checkout button on error\n\t\t\tsave_error && setTimeout(() => {\n\t\t\t\tthis.cart.toggle_checkout_btn(true);\n\t\t\t}, 300); // wait for save to finish\n\t\t} else {\n\t\t\tthis.payment.checkout();\n\t\t}\n\t}\n\tasync save_and_checkout() {\n\t\tif (!this.frm.doc.items || this.frm.doc.items.length === 0) {\n\t\t\tfrappe.show_alert({\n\t\t\t\tmessage: __('Please add items to cart before checkout.'),\n\t\t\t\tindicator: 'red'\n\t\t\t});\n\t\t\tfrappe.utils.play_sound(\"error\");\n\t\t\treturn;\n\t\t}\n\t\tif (this.frm.is_dirty()) {\n\t\t\tif(this.settings.custom_add_reference_details){\n\t\t\tconst dialog = new frappe.ui.Dialog({\n\t\t\t\ttitle: __('Enter Reference Details'),\n\t\t\t\tfields: [\n\t\t\t\t\t{\n\t\t\t\t\t\tfieldtype: 'Data',\n\t\t\t\t\t\tlabel: __('Reference Number'),\n\t\t\t\t\t\tfieldname: 'reference_no',\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tfieldtype: 'Data',\n\t\t\t\t\t\tlabel: __('Reference Name'),\n\t\t\t\t\t\tfieldname: 'reference_name',\n\t\t\t\t\t}\n\t\t\t\t],\n\t\t\t\tprimary_action_label: __('Proceed to Payment'),\n\t\t\t\tprimary_action: async (values) => {\n\t\t\t\t\tthis.frm.doc.custom_reference_no = values.reference_no;\n\t\t\t\t\tthis.frm.doc.custom_reference_name = values.reference_name;\n\n\t\t\t\t\tconst div = document.getElementById(\"customer-cart-container2\");\n\t\t\t\t\tdiv.style.gridColumn = \"\";\n\t\t\t\t\t\n\t\t\t\t\tlet save_error = false;\n\t\t\t\t\tawait this.frm.save(null, null, null, () => save_error = true);\n\t\t\t\t\t\n\t\t\t\t\tdialog.hide();\n\t\t\t\t\t\n\t\t\t\t\tif (!save_error) {\n\t\t\t\t\t\tthis.payment.checkout();\n\t\t\t\t\t} else {\n\t\t\t\t\t\tsetTimeout(() => {\n\t\t\t\t\t\t\tthis.cart.toggle_checkout_btn(true);\n\t\t\t\t\t\t}, 300); // wait for save to finish\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t});\n\n\t\t\t\n\t\t\tdialog.show();\n\t\t\t}else{\n\n\t\t\tconst div = document.getElementById(\"customer-cart-container2\");\n\t\t\tdiv.style.gridColumn = \"\";\n\t\t\tlet save_error = false;\n\t\t\tawait this.frm.save(null, null, null, () => save_error = true);\n\t\t\t// only move to payment section if save is successful\n\t\t\t!save_error && this.payment.checkout();\n\t\t\t// show checkout button on error\n\t\t\tsave_error && setTimeout(() => {\n\t\t\t\tthis.cart.toggle_checkout_btn(true);\n\t\t\t}, 300); // wait for save to finish\n\t\t\t}\n\n\n\n\t\t} else {\n\t\t\tthis.payment.checkout();\n\t\t}\n\t}\n};\n", "frappe.provide('posnext.PointOfSale');\nvar view = \"List\"\n\nposnext.PointOfSale.ItemSelector = class {\n\t// eslint-disable-next-line no-unused-vars\n\tconstructor({ frm, wrapper, events, pos_profile, settings,currency,init_item_cart,reload_status }) {\n\t\tthis.wrapper = wrapper;\n\t\tthis.events = events;\n\t\tthis.currency = currency;\n\t\tthis.pos_profile = pos_profile;\n\t\tthis.hide_images = settings.hide_images;\n\t\tthis.reload_status = reload_status\n\t\tthis.auto_add_item = settings.auto_add_item_to_cart;\n\t\tif(settings.custom_default_view){\n\t\t\tview = settings.custom_default_view\n\t\t}\n\t\tif(settings.custom_show_only_list_view){\n\t\t\tview = \"List\"\n\t\t}\n\t\tif(settings.custom_show_only_card_view){\n\t\t\tview = \"Card\"\n\t\t}\n\t\tthis.custom_show_item_code = settings.custom_show_item_code\n\t\tthis.custom_show_last_incoming_rate = settings.custom_show_last_incoming_rate\n\t\tthis.custom_show_oem_part_number = settings.custom_show_oem_part_number\n\t\tthis.custom_show_posting_date = settings.custom_show_posting_date\n\t\tthis.custom_show_logical_rack = settings.custom_show_logical_rack\n\t\tthis.show_only_list_view = settings.custom_show_only_list_view\n\t\tthis.show_only_card_view = settings.custom_show_only_card_view\n\t\tthis.custom_edit_rate = settings.custom_edit_rate_and_uom\n\t\tthis.custom_show_incoming_rate = settings.custom_show_incoming_rate && settings.custom_edit_rate_and_uom;\n\t\t// this.custom_edit_uom = settings.custom_edit_uom\n\t\tthis.inti_component();\n\t}\n\n\tinti_component() {\n\n\t\tthis.prepare_dom();\n\t\tthis.make_search_bar();\n\t\tthis.load_items_data();\n\t\tthis.bind_events();\n\t\tthis.attach_shortcuts();\n\t}\n\n\tprepare_dom() {\n\t\tvar cardlist = ``\n\t\tif(!this.show_only_list_view && !this.show_only_card_view){\n\t\t\tcardlist = `\n\t\t\t\n\t\t\t\n\t\t\t`\n\t\t}\n\n\t\tif(view === \"Card\" && !this.show_only_list_view){\n\t\t\tvar tir = ``\n\t\t\tif(this.custom_show_last_incoming_rate || this.custom_show_incoming_rate){\n\t\t\t\ttir = `
`\n\t\t\t}\n\t\t\tthis.wrapper.append(\n\t\t\t\t`
\n\t\t\t\t\t
` + cardlist + `
\n\t\t\t\t\t\t
\n\t\t\t\t\t\t\n\t\t\t\t\t\t
\n\t\t\t\t\t\t
` + tir + `\n\t\t\t\t\t\t\n\t\t\t\t\t
\n\t\t\t\t\t
\n\t\t\t\t
\n\t\t\t\t`\n\t\t\t);\n\n\t\t\tthis.$component = this.wrapper.find('.items-selector');\n\t\t\tthis.$items_container = this.$component.find('.items-container');\n\t\t} else if(view === \"List\" && !this.show_only_card_view) {\n var section = `
`\n\t\t\tvar tir = ``\n\t\t\tif(this.custom_edit_rate){\n\t\t\t section = `
`\n\t\t\t}\n\t\t\tif(this.custom_show_last_incoming_rate || this.custom_show_incoming_rate){\n\t\t\t\ttir = `
`\n\t\t\t}\n\n\n\t\t\tthis.wrapper.append(\n\t\t\t\tsection + `
` + cardlist + `
\n\t\t\t\t\t\t
\n\t\t\t\t\t\t\n\t\t\t\t\t\t
\n\t\t\t\t\t\t
` + tir + `\n\t\t\t\t\t\t\n\t\t\t\t\t
\n\t\t\t\t\t
\n\t\t\t\t
`\n\t\t\t);\n\n\t\t\tthis.$component = this.wrapper.find('.customer-cart-container');\n\t\t\tthis.$items_container = this.$component.find('.cart-container');\n\t\t}\n if(!this.show_only_list_view && !this.show_only_card_view) {\n this.$list_view = this.$component.find('.list-view');\n this.$card_view = this.$component.find('.card-view');\n if (view === \"List\" && !this.show_only_list_view) {\n this.$list_view.find('.list-span').css({\n \"display\": \"inline-block\",\n \"background-color\": \"#3498db\",\n \"color\": \"white\",\n \"padding\": \"3px 3px\",\n \"border-radius\": \"20px\",\n \"font-size\": \"12px\",\n \"font-weight\": \"bold\",\n \"text-transform\": \"uppercase\",\n \"letter-spacing\": \"1px\",\n \"cursor\": \"pointer\",\n \"transition\": \"background-color 0.3s ease\"\n });\n this.$card_view.find('.card-span').css({\n \"display\": \"\",\n \"background-color\": \"\",\n \"color\": \"\",\n \"padding\": \"3px 3px\",\n \"border-radius\": \"\",\n \"font-size\": \"\",\n \"font-weight\": \"\",\n \"text-transform\": \"\",\n \"letter-spacing\": \"\",\n \"cursor\": \"\",\n \"transition\": \"\"\n });\n } else if (view === \"Card\" && !this.show_only_card_view) {\n this.$card_view.find('.card-span').css({\n \"display\": \"inline-block\",\n \"background-color\": \"#3498db\",\n \"color\": \"white\",\n \"padding\": \"3px 3px\",\n \"border-radius\": \"20px\",\n \"font-size\": \"12px\",\n \"font-weight\": \"bold\",\n \"text-transform\": \"uppercase\",\n \"letter-spacing\": \"1px\",\n \"cursor\": \"pointer\",\n \"transition\": \"background-color 0.3s ease\"\n });\n this.$list_view.find('.list-span').css({\n \"display\": \"\",\n \"background-color\": \"\",\n \"color\": \"\",\n \"padding\": \"3px 3px\",\n \"border-radius\": \"\",\n \"font-size\": \"\",\n \"font-weight\": \"\",\n \"text-transform\": \"\",\n \"letter-spacing\": \"\",\n \"cursor\": \"\",\n \"transition\": \"\"\n });\n } else {\n this.$list_view.find('.list-span').css({\"display\": \"none\"});\n this.$card_view.find('.card-span').css({\"display\": \"none\"});\n\n }\n if (!this.show_only_card_view && !this.show_only_list_view) {\n this.click_functions()\n }\n }\n\t}\n\tclick_functions(){\n\t\tthis.$list_view.on('click', 'a', () => {\n\n\t\t\tthis.$list_view.find('.list-span').css({\"display\": \"inline-block\",\"background-color\": \"#3498db\",\"color\": \"white\",\"padding\": \"5px 10px\", \"border-radius\": \"20px\", \"font-size\": \"14px\",\"font-weight\": \"bold\", \"text-transform\": \"uppercase\",\"letter-spacing\": \"1px\",\"cursor\": \"pointer\", \"transition\": \"background-color 0.3s ease\"});\n\t\t\tthis.$card_view.find('.card-span').css({\"display\": \"\",\"background-color\": \"\",\"color\": \"\",\"padding\": \"\", \"border-radius\": \"\", \"font-size\": \"\",\"font-weight\": \"\", \"text-transform\": \"\",\"letter-spacing\": \"\",\"cursor\": \"\", \"transition\": \"\"});\n\t\t\tview = \"List\"\n\t\t\tif(document.getElementById(\"card-view-section\")) document.getElementById(\"card-view-section\").remove()\n\t\t\tif(document.getElementById(\"list-view-section\")) document.getElementById(\"list-view-section\").remove()\n\t\t\tif(document.getElementById(\"customer-cart-container2\")) document.getElementById(\"customer-cart-container2\").remove()\n\t\t\tif(document.getElementById(\"item-details-container\")) document.getElementById(\"item-details-container\").remove()\n\n\t\t\tthis.inti_component()\n\t\t\tthis.events.init_item_details()\n\t\t\tthis.events.init_item_cart()\n\t\t\tthis.events.change_items(this.events.get_frm())\n\n\n\t\t});\n\t\tthis.$card_view.on('click', 'a', () => {\n\t\t\tthis.$card_view.find('.card-span').css({\"display\": \"inline-block\",\"background-color\": \"#3498db\",\"color\": \"white\",\"padding\": \"5px 10px\", \"border-radius\": \"20px\", \"font-size\": \"14px\",\"font-weight\": \"bold\", \"text-transform\": \"uppercase\",\"letter-spacing\": \"1px\",\"cursor\": \"pointer\", \"transition\": \"background-color 0.3s ease\"});\n\t\t\tthis.$list_view.find('.list-span').css({\"display\": \"\",\"background-color\": \"\",\"color\": \"\",\"padding\": \"\", \"border-radius\": \"\", \"font-size\": \"\",\"font-weight\": \"\", \"text-transform\": \"\",\"letter-spacing\": \"\",\"cursor\": \"\", \"transition\": \"\"});\n\t\t\tview = \"Card\"\n\t\t\tif(document.getElementById(\"card-view-section\")) document.getElementById(\"card-view-section\").remove()\n\t\t\tif(document.getElementById(\"list-view-section\")) document.getElementById(\"list-view-section\").remove()\n\t\t\tif(document.getElementById(\"customer-cart-container2\")) document.getElementById(\"customer-cart-container2\").remove()\n\t\t\tif(document.getElementById(\"item-details-container\")) document.getElementById(\"item-details-container\").remove()\n\n\t\t\tthis.inti_component()\n\t\t\tthis.events.init_item_details()\n\t\t\tthis.events.init_item_cart()\n\t\t\tthis.events.change_items(this.events.get_frm())\n\n\t\t});\n\t}\n\tasync load_items_data() {\n\t\tif (!this.item_group) {\n\t\t\tconst res = await frappe.db.get_value(\"Item Group\", {lft: 1, is_group: 1}, \"name\");\n\t\t\tthis.parent_item_group = res.message.name;\n\t\t}\n\t\tif (!this.price_list) {\n\t\t\tconst res = await frappe.db.get_value(\"POS Profile\", this.pos_profile, \"selling_price_list\");\n\t\t\tthis.price_list = res.message.selling_price_list;\n\t\t}\n\n\t\tthis.get_items({}).then(({message}) => {\n\t\t\tthis.render_item_list(message.items);\n\t\t});\n\t}\n\n\tget_items({start = 0, page_length = 40, search_term=''}) {\n\t\tconst doc = this.events.get_frm().doc;\n\t\tconst price_list = (doc && doc.selling_price_list) || this.price_list;\n\t\tlet { item_group, pos_profile } = this;\n\n\t\t!item_group && (item_group = this.parent_item_group);\n\n\t\treturn frappe.call({\n\t\t\tmethod: \"posnext.posnext.page.posnext.point_of_sale.get_items\",\n\t\t\tfreeze: true,\n\t\t\targs: { start, page_length, price_list, item_group, search_term, pos_profile },\n\t\t});\n\t}\n\n\n\trender_item_list(items) {\n\t\tthis.$items_container.html('');\n\t\tvar me = this\n\t\tif(view === \"List\"){\n\t\t\tthis.$items_container.append(\n\t\t\t\t`
\n\t\t\t\t\t
\n\t\t\t\t\t${get_item_code_header()}\n\t\t\t\t\t\t
${__('Rate')}
\n\t\t\t\t\t\t
${__('Avail. Qty')}
\n\t\t\t\t\t\t\n\t\t\t\t\t
\n\t\t\t\t\t
\n\t\t\t\t
`)\n\n\t\t\tfunction get_item_code_header() {\n\t\t\t\tvar flex_value = 3\n\t\t\t\t if(!me.custom_show_item_code && !me.custom_show_last_incoming_rate && !me.custom_show_oem_part_number && !me.custom_show_logical_rack){\n\t\t\t\t\tflex_value = 2\n\t\t\t\t}\n\t\t\t\tvar html_header = ``\n\t\t\t\tif(me.custom_show_item_code){\n\t\t\t\t\t// flex_value -= 1\n\t\t\t\t\thtml_header += `
${__('Item Code')}
`\n\t\t\t\t}\n\t\t\t\tif(me.custom_show_last_incoming_rate){\n\t\t\t\t\t// flex_value -= 1\n\t\t\t\t\thtml_header += `
${__('Inc.Rate')}
`\n\t\t\t\t}\n\t\t\t\tif(me.custom_show_oem_part_number){\n\t\t\t\t\t// flex_value -= 1\n\t\t\t\t\thtml_header += `
${__('OEM')}
${__('Part No.')}
`\n\t\t\t\t}\n\t\t\t\tif(me.custom_show_logical_rack){\n\t\t\t\t\t// flex_value -= 1\n\t\t\t\t\thtml_header += `
${__('Rack')}
`\n\t\t\t\t}\n\t\t\t\tif(flex_value > 0){\n\t\t\t\t\treturn `
${__('Item')}
` + html_header\n\t\t\t\t} else {\n\t\t\t\t\treturn `
${__('Item')}
` + html_header\n\t\t\t\t}\n\n\n }\n\t\t\tthis.make_cart_items_section();\n\n\t\t\titems.forEach(item => {\n\t\t\t\tthis.render_cart_item(item);\n\t\t\t});\n\t\t} else {\n\t\t\titems.forEach(item => {\n var item_html = this.get_item_html(item);\n this.$items_container.append(item_html);\n \t})\n\t\t}\n\n\t\t// this.$cart_container = this.$component.find('.cart-container');\n\n\n\t}\n\tmake_cart_items_section() {\n\t\tthis.$cart_header = this.$component.find('.cart-header');\n\t\tthis.$cart_items_wrapper = this.$component.find('.cart-items-section');\n\n\t}\n\tget_cart_item({ name }) {\n\t\tconst item_selector = `.cart-item-wrapper[data-row-name=\"${escape(name)}\"]`;\n\t\treturn this.$cart_items_wrapper.find(item_selector);\n\t}\n\tget_cart_item1({ item_code }) {\n\t\tconst item_selector = `.cart-item-wrapper[data-row-name=\"${escape(item_code)}\"]`;\n\t\treturn this.$cart_items_wrapper.find(item_selector);\n\t}\n\trender_cart_item(item_data) {\n\t\tconsole.log(\"Rener cart item\")\n\t\tconsole.log(item_data)\n\t\tconst me = this;\n\t\tconst currency = me.events.get_frm().currency || me.currency;\n\t\tthis.$cart_items_wrapper.append(\n\t\t\t`
\n\t\t\t
`\n\t\t)\n\t\tvar $item_to_update = this.get_cart_item1(item_data);\n\n\t\t$item_to_update.html(\n\t\t\t`${get_item_image_html()}\n\t\t\t${get_item_name()}\n\t\t\t\n\t\t\t\t
\n\t\t\t\t\t${item_data.item_name}\n\t\t\t\t
\n\t\t\t\t${get_description_html()}\n\t\t\t
\n\t\t\t${get_item_code()}\n\t\t\t${get_rate_discount_html()}`\n\t\t)\n\n\t\tfunction get_item_name() {\n\t\t\tvar flex_value = 4\n if(me.custom_show_item_code && me.custom_show_last_incoming_rate && me.custom_show_oem_part_number){\n\t\t\t\tflex_value = 3\n }\n // if(me.custom_show_item_code && me.custom_show_last_incoming_rate && !me.custom_show_oem_part_number){\n\t\t\t\t// flex_value = 3\n // }\n if(!me.custom_show_item_code && !me.custom_show_last_incoming_rate && !me.custom_show_oem_part_number && !me.custom_show_logical_rack){\n\t\t\t\tflex_value = 2\n }\n // if(me.custom_show_last_incoming_rate && me.custom_show_item_code){\n\t\t\t\t// flex_value -= 1\n // }\n // if(me.custom_show_oem_part_number){\n\t\t\t\t// flex_value -= 1\n // }\n\t\t\treturn `
`\n }\n\t\tset_dynamic_rate_header_width();\n\n\t\tfunction set_dynamic_rate_header_width() {\n\t\t\tconst rate_cols = Array.from(me.$cart_items_wrapper.find(\".item-rate-amount\"));\n\t\t\tme.$cart_header.find(\".rate-amount-header\").css(\"width\", \"\");\n\t\t\tme.$cart_items_wrapper.find(\".item-rate-amount\").css(\"width\", \"\");\n\t\t\tvar max_width = rate_cols.reduce((max_width, elm) => {\n\t\t\t\tif ($(elm).width() > max_width)\n\t\t\t\t\tmax_width = $(elm).width();\n\t\t\t\treturn max_width;\n\t\t\t}, 0);\n\n\t\t\tmax_width += 1;\n\t\t\tif (max_width == 1) max_width = \"\";\n\n\t\t\tme.$cart_header.find(\".rate-amount-header\").css(\"width\", max_width);\n\t\t\tme.$cart_items_wrapper.find(\".item-rate-amount\").css(\"width\", max_width);\n\t\t}\n\t\tfunction get_item_code() {\n\t\t\tvar html_code = ``\n\t\t\tif(me.custom_show_item_code){\n\t\t\t\tvar item_code_flex_value = 1\n\t\t\t\thtml_code += `
\n\t\t\t\t\t
\n\t\t\t\t\t\t${item_data.item_code}
\n\t\t\t\t\t\t${item_data.uom}\n\t\t\t\t\t
\n\t\t\t\t
`\n\t\t\t}\n\t\t\tif(me.custom_show_last_incoming_rate){\n\t\t\t\thtml_code += `
\n\t\t\t\t\t
\n\t\t\t\t\t\t${parseFloat(item_data.valuation_rate).toFixed(2)}\n\t\t\t\t\t
\n\t\t\t\t
`\n }\n if(me.custom_show_oem_part_number){\n\t\t\t\thtml_code += `
\n\t\t\t\t\t
\n\t\t\t\t\t\t${item_data.custom_oem_part_number || \"\"}\n\t\t\t\t\t
\n\t\t\t\t
`\n }\n if(me.custom_show_logical_rack){\n\t\t\t\thtml_code += `
\n\t\t\t\t\t
\n\t\t\t\t\t\t${item_data.rack || \"\"}\n\t\t\t\t\t
\n\t\t\t\t
`\n }\n return html_code\n }\n\t\tfunction get_rate_discount_html() {\n\t\t\tif (item_data.rate && item_data.amount && item_data.rate !== item_data.amount) {\n\t\t\t\treturn `\n\t\t\t\t\t
\n\t\t\t\t\t\t
\n\t\t\t\t\t\t\t
${format_currency(item_data.price_list_rate, currency)}
\n\t\t\t\t\t\t
\n\t\t\t\t\t\t
${item_data.actual_qty || 0}
\n\t\t\t\t\t\t
${item_data.batch_no || 0}
\n\t\t\t\t\t\t\n\t\t\t\t\t
`\n\t\t\t} else {\n\t\t\t\treturn `\n\t\t\t\t\t
\n\t\t\t\t\t\t
\n\t\t\t\t\t\t\t
${format_currency(item_data.price_list_rate, currency)}
\n\t\t\t\t\t\t
\n\t\t\t\t\t\t
${item_data.actual_qty || 0}
\n\t\t\t\t\t\t
${item_data.batch_no || 0}
\n\t\t\t\t\t\t\n\t\t\t\t\t
`\n\t\t\t}\n\t\t}\n\n\t\tfunction get_description_html() {\n\t\t\tif (item_data.description) {\n\t\t\t\tif (item_data.description.indexOf('
') != -1) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\titem_data.description = $(item_data.description).text();\n\t\t\t\t\t} catch (error) {\n\t\t\t\t\t\titem_data.description = item_data.description.replace(/
/g, ' ').replace(/<\\/div>/g, ' ').replace(/ +/g, ' ');\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\titem_data.description = frappe.ellipsis(item_data.description, 45);\n\t\t\t\treturn `
${item_data.description}
`;\n\t\t\t}\n\t\t\treturn ``;\n\t\t}\n\n\t\tfunction get_item_image_html() {\n\t\t\tconst { image, item_name } = item_data;\n\t\t\tif (!me.hide_images && image) {\n\t\t\t\treturn `\n\t\t\t\t\t
\n\t\t\t\t\t\t\n\t\t\t\t\t
`;\n\t\t\t} else {\n\t\t\t\treturn `
${frappe.get_abbr(item_name)}
`;\n\t\t\t}\n\t\t}\n\t}\n\tget_item_html(item) {\n\t\tconst me = this;\n\t\titem.currency = item.currency || me.currency\n\t\t// eslint-disable-next-line no-unused-vars\n\t\tconst { item_image, serial_no, batch_no, barcode, actual_qty, uom, price_list_rate } = item;\n\t\tconst precision = flt(price_list_rate, 2) % 1 != 0 ? 2 : 0;\n\t\tlet indicator_color;\n\t\tlet qty_to_display = actual_qty;\n\n\t\tif (item.is_stock_item) {\n\t\t\tindicator_color = (actual_qty > 10 ? \"green\" : actual_qty <= 0 ? \"red\" : \"orange\");\n\n\t\t\tif (Math.round(qty_to_display) > 999) {\n\t\t\t\tqty_to_display = Math.round(qty_to_display)/1000;\n\t\t\t\tqty_to_display = qty_to_display.toFixed(1) + 'K';\n\t\t\t}\n\t\t} else {\n\t\t\tindicator_color = '';\n\t\t\tqty_to_display = '';\n\t\t}\n\n\t\tfunction get_item_image_html() {\n\t\t\tif (!me.hide_images && item_image) {\n\t\t\t\treturn `
\n\t\t\t\t\t\t\t${qty_to_display}\n\t\t\t\t\t\t
\n\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t
`;\n\t\t\t} else {\n\t\t\t\treturn `
\n\t\t\t\t\t\t\t${qty_to_display}\n\t\t\t\t\t\t
\n\t\t\t\t\t\t
${frappe.get_abbr(item.item_name)}
`;\n\t\t\t}\n\t\t}\n\n\t\treturn (\n\t\t\t`
\n\n\t\t\t\t${get_item_image_html()}\n\n\t\t\t\t
\n\t\t\t\t\t
\n\t\t\t\t\t\t${frappe.ellipsis(item.item_name, 18)}\n\t\t\t\t\t
\n\t\t\t\t\t
${format_currency(price_list_rate, item.currency, precision) || 0} / ${uom}
\n\t\t\t\t
\n\t\t\t
`\n\t\t);\n\t}\n\n\thandle_broken_image($img) {\n\t\tconst item_abbr = $($img).attr('alt');\n\t\t$($img).parent().replaceWith(`
${item_abbr}
`);\n\t}\n\tupdate_total_incoming_rate(total_rate){\n\t\tif(this.total_incoming_rate){\n\t\t\tthis.total_incoming_rate.set_value(total_rate)\n\t\t}\n\t}\n\tmake_search_bar() {\n\t\tconst me = this;\n\t\tconst doc = me.events.get_frm().doc;\n\t\tthis.$component.find('.search-field').html('');\n\t\t// this.$component.find('.item-code-search-field').html('');\n\t\tthis.$component.find('.pos-profile').html('');\n\t\tthis.$component.find('.total-incoming-rate').html('');\n\t\tthis.$component.find('.item-group-field').html('');\n\t\tthis.$component.find('.invoice-posting-date').html('');\n\t\tfrappe.db.get_single_value(\"POS Settings\",\"custom_profile_lock\").then(doc => {\n\t\t\tthis.pos_profile_field = frappe.ui.form.make_control({\n\t\t\t\tdf: {\n\t\t\t\t\tlabel: __('POS Profile'),\n\t\t\t\t\tfieldtype: 'Link',\n\t\t\t\t\toptions: 'POS Profile',\n\t\t\t\t\tplaceholder: __('POS Profile'),\n\t\t\t\t\tread_only: doc,\n\t\t\t\t\tonchange: function () {\n\n\t\t\t\t\t\tif(me.reload_status && me.pos_profile !== this.value){\n\t\t\t\t\t\t\tfrappe.pages['posnext'].refresh(window.wrapper,window.onScan,this.value)\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// console.log(\"ON ON CHANGE\")\n\t\t\t\t\t\t// console.log(this.pos_profile_field)\n\t\t\t\t\t\t// var value = this.pos_profile_field.get_value()\n\t\t\t\t\t\t// if(value !== me.pos_profile){\n\t\t\t\t\t\t// \tthis.events.check_opening_entry()\n\t\t\t\t\t\t// }\n\t\t\t\t\t\t// window.wrapper.please_refresh = true\n\t\t\t\t\t\t// frappe.pages['posnext'].refresh_data(window.wrapper)\n\t\t\t\t\t\t// console.log(\"HEEEERE\")\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tparent: this.$component.find('.pos-profile'),\n\t\t\t\trender_input: false,\n\t\t\t});\n\t\tthis.pos_profile_field.set_value(me.pos_profile)\n\t\tthis.pos_profile_field.refresh()\n\t\tthis.pos_profile_field.toggle_label(false);\n\n\t\t})\n\n\t\tthis.search_field = frappe.ui.form.make_control({\n\t\t\tdf: {\n\t\t\t\tlabel: __('Search'),\n\t\t\t\tfieldtype: 'Data',\n\t\t\t\tplaceholder: __('Search by serial number or barcode')\n\t\t\t},\n\t\t\tparent: this.$component.find('.search-field'),\n\t\t\trender_input: true,\n\t\t});\n\n\t\tthis.item_group_field = frappe.ui.form.make_control({\n\t\t\tdf: {\n\t\t\t\tlabel: __('Item Group'),\n\t\t\t\tfieldtype: 'Link',\n\t\t\t\toptions: 'Item Group',\n\t\t\t\tplaceholder: __('Select item group'),\n\t\t\t\tonchange: function() {\n\t\t\t\t\tme.item_group = this.value;\n\t\t\t\t\t!me.item_group && (me.item_group = me.parent_item_group);\n\t\t\t\t\tme.filter_items();\n\t\t\t\t},\n\t\t\t\tget_query: function () {\n\t\t\t\t\treturn {\n\t\t\t\t\t\tquery: 'posnext.posnext.page.posnext.point_of_sale.item_group_query',\n\t\t\t\t\t\tfilters: {\n\t\t\t\t\t\t\tpos_profile: doc ? doc.pos_profile : ''\n\t\t\t\t\t\t}\n\t\t\t\t\t};\n\t\t\t\t},\n\t\t\t},\n\t\t\tparent: this.$component.find('.item-group-field'),\n\t\t\trender_input: true,\n\t\t});\n\t\tif(this.custom_show_last_incoming_rate || this.custom_show_incoming_rate) {\n this.total_incoming_rate = frappe.ui.form.make_control({\n df: {\n label: __(''),\n fieldtype: 'Currency',\n read_only: 1,\n placeholder: __('Total Incoming Rate'),\n default: 0\n },\n parent: this.$component.find('.total-incoming-rate'),\n render_input: true,\n });\n }\n\t\tif(me.custom_show_posting_date){\n\t\t\tthis.invoice_posting_date = frappe.ui.form.make_control({\n\t\t\t\tdf: {\n\t\t\t\t\tlabel: __('Posting Date'),\n\t\t\t\t\tfieldtype: 'Date',\n\t\t\t\t\tonchange: function() {\n\t\t\t\t\t\tme.events.get_frm().doc.posting_date= this.value;\n\t\t\t\t\t\tme.events.get_frm().doc.set_posting_time= 1;\n\t\t\t\t\t},\n\n\t\t\t\t},\n\t\t\t\tparent: this.$component.find('.invoice-posting-date'),\n\t\t\t\trender_input: true,\n\t\t\t});\n\t\t}\n\n\n\t\tthis.search_field.toggle_label(false);\n\t\tthis.item_group_field.toggle_label(false);\n\t\tif(this.custom_show_last_incoming_rate) {\n this.total_incoming_rate.toggle_label(false);\n }\n\t\tif(me.custom_show_posting_date) {\n this.invoice_posting_date.toggle_label(false);\n this.invoice_posting_date.set_value(frappe.datetime.get_today())\n\n }\n\n\t\tthis.attach_clear_btn();\n\t}\n\n\tattach_clear_btn() {\n\t\tthis.search_field.$wrapper.find('.control-input').append(\n\t\t\t`\n\t\t\t\t\n\t\t\t\t\t${frappe.utils.icon('close', 'sm')}\n\t\t\t\t\n\t\t\t`\n\t\t);\n\n\t\tthis.$clear_search_btn = this.search_field.$wrapper.find('.link-btn');\n\n\t\tthis.$clear_search_btn.on('click', 'a', () => {\n\t\t\tthis.set_search_value('');\n\t\t\tthis.search_field.set_focus();\n\t\t});\n\t}\n\n\tset_search_value(value) {\n\t\t$(this.search_field.$input[0]).val(value).trigger(\"input\");\n\t}\n\n\tbind_events() {\n\t\tconst me = this;\n\t\tif(!window.onScan){\n\t\t\tfrappe.require(\"https://cdn.jsdelivr.net/npm/onscan.js/onscan.min.js\", function() {\n\t\t\twindow.onScan = onScan;\n\n\t\t\tonScan.decodeKeyEvent = function (oEvent) {\n\t\t\t\tvar iCode = this._getNormalizedKeyNum(oEvent);\n\t\t\t\tswitch (true) {\n\t\t\t\t\tcase iCode >= 48 && iCode <= 90: // numbers and letters\n\t\t\t\t\tcase iCode >= 106 && iCode <= 111: // operations on numeric keypad (+, -, etc.)\n\t\t\t\t\tcase (iCode >= 160 && iCode <= 164) || iCode == 170: // ^ ! # $ *\n\t\t\t\t\tcase iCode >= 186 && iCode <= 194: // (; = , - . / `)\n\t\t\t\t\tcase iCode >= 219 && iCode <= 222: // ([ \\ ] ')\n\t\t\t\t\tcase iCode == 32: // spacebar\n\t\t\t\t\t\tif (oEvent.key !== undefined && oEvent.key !== '') {\n\t\t\t\t\t\t\treturn oEvent.key;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tvar sDecoded = String.fromCharCode(iCode);\n\t\t\t\t\t\tswitch (oEvent.shiftKey) {\n\t\t\t\t\t\t\tcase false: sDecoded = sDecoded.toLowerCase(); break;\n\t\t\t\t\t\t\tcase true: sDecoded = sDecoded.toUpperCase(); break;\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn sDecoded;\n\t\t\t\t\tcase iCode >= 96 && iCode <= 105: // numbers on numeric keypad\n\t\t\t\t\t\treturn 0 + (iCode - 96);\n\t\t\t\t}\n\t\t\t\treturn '';\n\t\t\t};\n\n\t\t\tonScan.attachTo(document, {\n\t\t\t\tonScan: (sScancode) => {\n\t\t\t\t\tif (this.search_field && this.$component.is(':visible')) {\n\t\t\t\t\t\tthis.search_field.set_focus();\n\t\t\t\t\t\tthis.set_search_value(sScancode);\n\t\t\t\t\t\tthis.barcode_scanned = true;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t});\n\t\t})\n\t\t}\n\n\n\n\t\tthis.$component.on('click', '.item-wrapper', function() {\n\t\t\tconsole.log(\"Item Selected\")\n\t\t\tconst $item = $(this);\n\t\t\tconst item_code = unescape($item.attr('data-item-code'));\n\t\t\tlet batch_no = unescape($item.attr('data-batch-no'));\n\t\t\tlet serial_no = unescape($item.attr('data-serial-no'));\n\t\t\tlet uom = unescape($item.attr('data-uom'));\n\t\t\tlet rate = unescape($item.attr('data-rate'));\n\t\t\tlet valuation_rate = unescape($item.attr('data-valuation-rate'));\n\t\t\tlet custom_item_uoms = $item.attr('data-item-uoms');\n\t\t\tlet custom_logical_rack = $item.attr('data-item-logical-rack')\n\t\t\t// escape(undefined) returns \"un\tdefined\" then unescape returns \"undefined\"\n\t\t\tbatch_no = batch_no === \"undefined\" ? undefined : batch_no;\n\t\t\tserial_no = serial_no === \"undefined\" ? undefined : serial_no;\n\t\t\tuom = uom === \"undefined\" ? undefined : uom;\n\t\t\trate = rate === \"undefined\" ? undefined : rate;\n\t\t\tme.events.item_selected({\n\t\t\t\tfield: 'qty',\n\t\t\t\tvalue: \"+1\",\n\t\t\t\titem: { item_code, batch_no, serial_no, uom, rate ,valuation_rate, custom_item_uoms, custom_logical_rack}\n\t\t\t});\n\t\t\t// me.search_field.set_focus();\n\t\t});\n\n\t\tthis.search_field.$input.on('input', (e) => {\n\t\t\tclearTimeout(this.last_search);\n\t\t\tthis.last_search = setTimeout(() => {\n\t\t\t\tconst search_term = e.target.value;\n\t\t\t\tthis.filter_items({ search_term });\n\t\t\t}, 300);\n\n\t\t\t// this.$clear_search_btn.toggle(\n\t\t\t// \tBoolean(this.search_field.$input.val())\n\t\t\t// );\n\t\t});\n\n\t\t// this.search_field.$input.on('focus', () => {\n\t\t// \tthis.$clear_search_btn.toggle(\n\t\t// \t\tBoolean(this.search_field.$input.val())\n\t\t// \t);\n\t\t// });\n\t}\n\n\tattach_shortcuts() {\n\t\tconst ctrl_label = frappe.utils.is_mac() ? '\u2318' : 'Ctrl';\n\t\tthis.search_field.parent.attr(\"title\", `${ctrl_label}+I`);\n\t\tfrappe.ui.keys.add_shortcut({\n\t\t\tshortcut: \"ctrl+i\",\n\t\t\taction: () => this.search_field.set_focus(),\n\t\t\tcondition: () => this.$component.is(':visible'),\n\t\t\tdescription: __(\"Focus on search input\"),\n\t\t\tignore_inputs: true,\n\t\t\tpage: cur_page.page.page\n\t\t});\n\t\tthis.item_group_field.parent.attr(\"title\", `${ctrl_label}+G`);\n\t\tfrappe.ui.keys.add_shortcut({\n\t\t\tshortcut: \"ctrl+g\",\n\t\t\taction: () => this.item_group_field.set_focus(),\n\t\t\tcondition: () => this.$component.is(':visible'),\n\t\t\tdescription: __(\"Focus on Item Group filter\"),\n\t\t\tignore_inputs: true,\n\t\t\tpage: cur_page.page.page\n\t\t});\n\n\t\t// for selecting the last filtered item on search\n\t\tfrappe.ui.keys.on(\"enter\", () => {\n\t\t\tconst selector_is_visible = this.$component.is(':visible');\n\t\t\tif (!selector_is_visible || this.search_field.get_value() === \"\") return;\n\n\t\t\tif (this.items.length == 1) {\n\t\t\t\tthis.$items_container.find(\".item-wrapper\").click();\n\t\t\t\tfrappe.utils.play_sound(\"submit\");\n\t\t\t\tthis.set_search_value('');\n\t\t\t} else if (this.items.length == 0 && this.barcode_scanned) {\n\t\t\t\t// only show alert of barcode is scanned and enter is pressed\n\t\t\t\tfrappe.show_alert({\n\t\t\t\t\tmessage: __(\"No items found. Scan barcode again.\"),\n\t\t\t\t\tindicator: 'orange'\n\t\t\t\t});\n\t\t\t\tfrappe.utils.play_sound(\"error\");\n\t\t\t\tthis.barcode_scanned = false;\n\t\t\t\tthis.set_search_value('');\n\t\t\t}\n\t\t});\n\t}\n\n\tfilter_items({ search_term='' }={}) {\n\t\tif (search_term) {\n\t\t\tsearch_term = search_term.toLowerCase();\n\n\t\t\t// memoize\n\t\t\tthis.search_index = this.search_index || {};\n\t\t\tif (this.search_index[search_term]) {\n\t\t\t\tconst items = this.search_index[search_term];\n\t\t\t\tthis.items = items;\n\t\t\t\tthis.render_item_list(items);\n\t\t\t\tthis.auto_add_item && this.items.length == 1;\n\t\t\t\treturn;\n\t\t\t}\n\t\t}\n\n\t\tthis.get_items({ search_term })\n\t\t\t.then(({ message }) => {\n\t\t\t\t// eslint-disable-next-line no-unused-vars\n\t\t\t\tconst { items, serial_no, batch_no, barcode } = message;\n\t\t\t\tif (search_term && !barcode) {\n\t\t\t\t\tthis.search_index[search_term] = items;\n\t\t\t\t}\n\t\t\t\tthis.items = items;\n\t\t\t\tthis.render_item_list(items);\n\t\t\t\tthis.auto_add_item && this.items.length == 1;\n\t\t\t});\n\t}\n\n\tadd_filtered_item_to_cart() {\n\t\tthis.$items_container.find(\".item-wrapper\").click();\n\t\tthis.set_search_value('');\n\t}\n\n\tresize_selector(minimize) {\n\t\tminimize ?\n\t\t\tthis.$component.find('.filter-section').css('grid-template-columns', 'repeat(1, minmax(0, 1fr))') :\n\t\t\tthis.$component.find('.filter-section').css('grid-template-columns', 'repeat(12, minmax(0, 1fr))');\n\n\t\tminimize ?\n\t\t\tthis.$component.find('.search-field').css('margin', 'var(--margin-sm) 0px') :\n\t\t\tthis.$component.find('.search-field').css('margin', '0px var(--margin-sm)');\n\n\t\tminimize ?\n\t\t\tthis.$component.css('grid-column', 'span 2 / span 2') :\n\t\t\tthis.$component.css('grid-column', 'span 6 / span 6');\n\n\t\tminimize ?\n\t\t\tthis.$items_container.css('grid-template-columns', 'repeat(1, minmax(0, 1fr))') :\n\t\t\tthis.$items_container.css('grid-template-columns', 'repeat(4, minmax(0, 1fr))');\n\t}\n\n\ttoggle_component(show) {\n\t\tthis.set_search_value('');\n\t\tthis.$component.css('display', show ? 'flex': 'none');\n\t}\n};\n", "frappe.provide('posnext.PointOfSale');\nposnext.PointOfSale.ItemCart = class {\n\tconstructor({ wrapper, events, settings }) {\n\t\tthis.wrapper = wrapper;\n\t\tthis.events = events;\n\t\tthis.customer_info = undefined;\n\t\tthis.hide_images = settings.hide_images;\n\t\tthis.allowed_customer_groups = settings.customer_groups;\n\t\tthis.allow_rate_change = settings.allow_rate_change;\n\t\tthis.allow_discount_change = settings.allow_discount_change;\n\t\tthis.show_held_button = settings.custom_show_held_button;\n\t\tthis.show_order_list_button = settings.custom_show_order_list_button;\n\t\tthis.mobile_number_based_customer = settings.custom_mobile_number_based_customer;\n\t\tthis.show_checkout_button = settings.custom_show_checkout_button;\n\t\tthis.custom_edit_rate = settings.custom_edit_rate_and_uom;\n\t\tthis.custom_use_discount_percentage = settings.custom_use_discount_percentage;\n\t\tthis.custom_use_discount_amount = settings.custom_use_discount_amount;\n\t\tthis.custom_use_additional_discount_amount = settings.custom_use_additional_discount_amount;\n\t\tthis.custom_show_incoming_rate = settings.custom_show_incoming_rate && settings.custom_edit_rate_and_uom;\n\t\tthis.custom_show_last_customer_rate = settings.custom_show_last_customer_rate;\n\t\tthis.custom_show_logical_rack_in_cart = settings.custom_show_logical_rack_in_cart && settings.custom_edit_rate_and_uom;\n\t\tthis.custom_show_uom_in_cart = settings.custom_show_uom_in_cart && settings.custom_edit_rate_and_uom;\n\t\tthis.show_branch = settings.show_branch;\n\t\tthis.show_batch_in_cart = settings.show_batch_in_cart\n\t\t// this.custom_edit_uom = settings.custom_edit_uom;\n\t\tthis.settings = settings;\n\t\tthis.warehouse = settings.warehouse;\n\t\tthis.init_component();\n\t}\n\n\tinit_component() {\n\n\t\tthis.prepare_dom();\n\t\tthis.init_child_components();\n\t\tthis.bind_events();\n\t\tthis.attach_shortcuts();\n\t}\n\n\tprepare_dom() {\n\t\tif(this.custom_edit_rate){\n\t\t this.wrapper.append(\n\t\t\t `
`\n\t\t )\n\t\t} else {\n\t\t\tthis.wrapper.append(\n\t\t\t `
`\n\t\t )\n\t\t}\n\n\t\tthis.$component = this.wrapper.find('.customer-cart-container1');\n\t}\n\n\tinit_child_components() {\n\t\tthis.init_customer_selector();\n\t\tthis.init_cart_components();\n\t}\n\n\tinit_customer_selector() {\n\t\tthis.$component.append(\n\t\t\t`
`\n\t\t)\n\t\tthis.$customer_section = this.$component.find('.customer-section');\n\t\tthis.make_customer_selector();\n\t}\n\n\treset_customer_selector() {\n\t\tconst frm = this.events.get_frm();\n\t\tfrm.set_value('customer', '');\n\t\tthis.make_customer_selector();\n\t\tthis.customer_field.set_focus();\n\t}\n\n\tinit_cart_components() {\n\t\tvar html = `
\n\t\t\t\t
\n\t\t\t\t\t
${__('Item Cart')}
\n\t\t\t\t\t
\n\t\t\t\t\t\t
${__('Item')}
\n\t\t\t\t\t\t
${__('Qty')}
\n\t\t\t\t\t\t`\n\t\t\tif(this.custom_show_uom_in_cart){\n\t\t\t\thtml += `
${__('UOM')}
`\n\t\t\t}\n\t\t\tif(this.show_batch_in_cart){\n\t\t\t\thtml += `
${__('Batch')}
`\n\t\t\t}\n\t\t\tif(this.custom_edit_rate){\n\t\t\t\thtml += `
${__('Rate')}
`\n\t\t\t}\n\t\t\tif(this.custom_use_discount_percentage){\n\t\t\t\thtml += `
${__('Disc%')}
`\n\t\t\t}\n\t\t\tif(this.custom_use_discount_amount){\n\t\t\t\thtml += `
${__('Disc')}
`\n\t\t\t}\n\t\t\tif(this.custom_show_incoming_rate){\n\t\t\t\thtml += `
${__('Inc.Rate')}
`\n\t\t\t}\n\t\t\tif(this.custom_show_logical_rack_in_cart){\n\t\t\t\thtml += `
${__('Rack')}
`\n\t\t\t}\n\t\t\tif(this.custom_show_last_customer_rate){\n\t\t\t\thtml += `
${__('LC Rate')}
`\n\t\t\t}\n\t\t\t\n\n\t\thtml += `
${__('Amount')}
\n\t\t\t\t\t
\n\t\t\t\t\t
\n\t\t\t\t\t
\n\t\t\t\t\t
\n\t\t\t\t\t
\n\t\t\t\t
\n\t\t\t
`\n\t\tthis.$component.append(html);\n\t\tthis.$cart_container = this.$component.find('.cart-container');\n\t\tthis.make_branch_section();\n\t\tthis.make_cart_totals_section();\n\t\tthis.make_cart_items_section();\n\t\tthis.make_cart_numpad();\n\t}\n\n\tmake_cart_items_section() {\n\t\tthis.$cart_header = this.$component.find('.cart-header');\n\t\tthis.$cart_items_wrapper = this.$component.find('.cart-items-section');\n\n\t\tthis.make_no_items_placeholder();\n\t}\n\n\tmake_no_items_placeholder() {\n\t\tthis.$cart_header.css('display', 'none');\n\t\tthis.$cart_items_wrapper.html(\n\t\t\t`
${__('No items in cart')}
`\n\t\t);\n\t}\n\n\tget_discount_icon() {\n\t\treturn (\n\t\t\t`\n\t\t\t\t\n\t\t\t\t\n\t\t\t\t\n\t\t\t\t\n\t\t\t`\n\t\t);\n\t}\n\n\tget_branch_icon() {\n\t\treturn `\n\t\t\t\n\t\t\t\t\n\t\t\t\n\t\t`;\n\t}\n\t\n\tmake_branch_section() {\n\t\tif (this.show_branch) {\n\t\t\tthis.$branch_section = this.$component.find('.cart-branch-section');\n\t\n\t\t\tif (this.$branch_section.length) {\n\t\t\t\tthis.$branch_section.append(`\n\t\t\t\t\t
\n\t\t\t\t\t
\n\t\t\t\t\t\t${this.get_branch_icon()} ${__('Add Branch')}\n\t\t\t\t\t
\n\t\t\t\t`);\n\t\n\t\t\t\t// Apply styles\n\t\t\t\tthis.$branch_section.find('.add-branch-wrapper').css({\n\t\t\t\t\t\"display\": \"flex\",\n\t\t\t\t\t\"align-items\": \"center\",\n\t\t\t\t\t\"gap\": \"8px\",\n\t\t\t\t\t\"border\": \"2px dashed #ccc\",\n\t\t\t\t\t\"padding\": \"10px\",\n\t\t\t\t\t\"border-radius\": \"6px\",\n\t\t\t\t\t\"cursor\": \"pointer\",\n\t\t\t\t\t\"font-weight\": \"bold\"\n\t\t\t\t});\n\t\n\t\t\t\t// Change cursor on hover\n\t\t\t\tthis.$branch_section.find('.add-branch-wrapper').hover(\n\t\t\t\t\tfunction () {\n\t\t\t\t\t\t$(this).css(\"background-color\", \"#f9f9f9\");\n\t\t\t\t\t},\n\t\t\t\t\tfunction () {\n\t\t\t\t\t\t$(this).css(\"background-color\", \"transparent\");\n\t\t\t\t\t}\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\t}\n\t\n\t\n\tmake_cart_totals_section() {\n\t\tthis.$totals_section = this.$component.find('.cart-totals-section');\n\t\t\n\t\tthis.$totals_section.append(\n\t\t\t`
\n\t\t\t\t${this.get_discount_icon()} ${__('Add Discount')}\n\t\t\t
\n\t\t\t
\n\t\t\t\t
${__('Total Items')}
\n\t\t\t\t
0.00
\n\t\t\t
\n\t\t\t
\n\t\t\t\t
${__(\"Net Total\")}
\n\t\t\t\t
0.00
\n\t\t\t
\n\t\t\t
\n\t\t\t
\n\t\t\t\t
${__('Grand Total')}
\n\t\t\t\t
0.00
\n\t\t\t
\n\t\t\t
\n\t\t\t\t
${__('Checkout')}
\n\t\t\t\t
${__('Held')}
\n\t\t\t\t
${__('Order List')}
\n\t\t\t
\t\n\t\t\t
${__('Edit Cart')}
`\n\t\t)\n\n\t\tthis.$add_discount_elem = this.$component.find(\".add-discount-wrapper\");\nthis.highlight_checkout_btn(true);\n\t}\n\n\tmake_cart_numpad() {\n\t\tthis.$numpad_section = this.$component.find('.numpad-section');\n\n\t\tthis.number_pad = new posnext.PointOfSale.NumberPad({\n\t\t\twrapper: this.$numpad_section,\n\t\t\tevents: {\n\t\t\t\tnumpad_event: this.on_numpad_event.bind(this)\n\t\t\t},\n\t\t\tcols: 5,\n\t\t\tkeys: [\n\t\t\t\t[ 1, 2, 3, 'Quantity' ],\n\t\t\t\t[ 4, 5, 6, 'Discount' ],\n\t\t\t\t[ 7, 8, 9, 'Rate' ],\n\t\t\t\t[ '.', 0, 'Delete', 'Remove' ]\n\t\t\t],\n\t\t\tcss_classes: [\n\t\t\t\t[ '', '', '', 'col-span-2' ],\n\t\t\t\t[ '', '', '', 'col-span-2' ],\n\t\t\t\t[ '', '', '', 'col-span-2' ],\n\t\t\t\t[ '', '', '', 'col-span-2 remove-btn' ]\n\t\t\t],\n\t\t\tfieldnames_map: { 'Quantity': 'qty', 'Discount': 'discount_percentage' }\n\t\t})\n\n\t\tthis.$numpad_section.prepend(\n\t\t\t`
\n\t\t\t\n\t\t\t\t\n\t\t\t\t\n\t\t\t
`\n\t\t)\n\n\t\tthis.$numpad_section.append(\n\t\t\t`
${__('Checkout')}
`\n\t\t)\n\t}\n\n\tbind_events() {\n\t\tconst me = this;\n\t\tthis.$customer_section.on('click', '.reset-customer-btn', function () {\n\t\t\tme.reset_customer_selector();\n\t\t});\n\n\t\tthis.$customer_section.on('click', '.close-details-btn', function () {\n\t\t\tme.toggle_customer_info(false);\n\t\t});\n\n\t\tthis.$customer_section.on('click', '.customer-display', function(e) {\n\t\t\tif ($(e.target).closest('.reset-customer-btn').length) return;\n\n\t\t\tconst show = me.$cart_container.is(':visible');\n\t\t\tme.toggle_customer_info(show);\n\t\t});\n //\n\t\tif(!me.custom_edit_rate){\n\t\t\tthis.$cart_items_wrapper.on('click', '.cart-item-wrapper', function() {\n const $cart_item = $(this);\n\n me.toggle_item_highlight(this);\n\n const payment_section_hidden = !me.$totals_section.find('.edit-cart-btn').is(':visible');\n if (!payment_section_hidden) {\n // payment section is visible\n // edit cart first and then open item details section\n me.$totals_section.find(\".edit-cart-btn\").click();\n }\n\n const item_row_name = unescape($cart_item.attr('data-row-name'));\n me.events.cart_item_clicked({ name: item_row_name });\n this.numpad_value = '';\n });\n\t\t}\n\n\n\t\tthis.$component.on('click', '.checkout-btn', async function() {\n\t\t\tif ($(this).attr('style').indexOf('--blue-500') == -1) return;\n\t\t\tif ($(this).attr('class').indexOf('checkout-btn-held') !== -1) return;\n\t\t\tif ($(this).attr('class').indexOf('checkout-btn-order') !== -1) return;\n\t\t\tif(!cur_frm.doc.customer && me.mobile_number_based_customer){\n\t\t\t\tlet d = new frappe.ui.Dialog({\n\t\t\t\t\ttitle: 'Enter Mobile Number',\n\t\t\t\t\tfields: [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tlabel: 'Mobile Number',\n\t\t\t\t\t\t\tfieldname: 'mobile_number',\n\t\t\t\t\t\t\tfieldtype: 'Data',\n\t\t\t\t\t\t\treqd: 1\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tlabel: '',\n\t\t\t\t\t\t\tfieldname: 'mobile_number_numpad',\n\t\t\t\t\t\t\tfieldtype: 'HTML',\n\t\t\t\t\t\t\toptions: '
'\n\t\t\t\t\t\t},\n\t\t\t\t\t],\n\t\t\t\t\tsize: 'small',\n\t\t\t\t\tprimary_action_label: 'Continue',\n\t\t\t\t\tprimary_action: function(values) {\n\t\t\t\t\t\tif(values['mobile_number'].length !== me.settings.custom_mobile_number_length){\n\t\t\t\t\t\t\tfrappe.throw(\"Mobile Number Length is \" + me.settings.custom_mobile_number_length.toString())\n\t\t\t\t\t\t}\n\t\t\t\t\t\tfrappe.call({\n\t\t\t\t\t\t\tmethod: \"posnext.posnext.page.posnext.point_of_sale.create_customer\",\n\t\t\t\t\t\t\targs: {\n\t\t\t\t\t\t\t\tcustomer: values['mobile_number']\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tfreeze: true,\n\t\t\t\t\t\t\tfreeze_message: \"Creating Customer....\",\n\t\t\t\t\t\t\tcallback: async function(){\n\t\t\t\t\t\t\t\tconst frm = me.events.get_frm();\n\t\t\t\t\t\t\t\tfrappe.dom.freeze();\n\t\t\t\t\t\t\t\tfrappe.model.set_value(frm.doc.doctype, frm.doc.name, 'customer', values['mobile_number']);\n\t\t\t\t\t\t\t\tfrm.script_manager.trigger('customer', frm.doc.doctype, frm.doc.name).then(() => {\n\t\t\t\t\t\t\t\t\tfrappe.run_serially([\n\t\t\t\t\t\t\t\t\t\t() => me.fetch_customer_details(values['mobile_number']),\n\t\t\t\t\t\t\t\t\t\t() => me.events.customer_details_updated(me.customer_info),\n\t\t\t\t\t\t\t\t\t\t() => me.update_customer_section(),\n\t\t\t\t\t\t\t\t\t\t() => frappe.dom.unfreeze()\n\t\t\t\t\t\t\t\t\t]);\n\t\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t\t// me.fetch_customer_details(values['mobile_number'])\n\t\t\t\t\t\t\t\t// me.events.customer_details_updated(me.customer_info)\n\t\t\t\t\t\t\t\t// me.update_customer_section()\n\t\t\t\t\t\t\t\tawait me.events.checkout();\n\t\t\t\t\t\t\t\tme.toggle_checkout_btn(false);\n\t\t\t\t\t\t\t\tme.allow_discount_change && me.$add_discount_elem.removeClass(\"d-none\");\n\t\t\t\t\t\t\t\td.hide();\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t})\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t\tvar mobile_number_numpad_div = d.wrapper.find(\".mobile_number_numpad\")\n\t\t\t\tmobile_number_numpad_div.append(`\n\t\t\t\t\t
\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t \n\t\t\t\t\t
`)\n\n\t\t\t\td.show();\n\t\t\t\tvar numpad_num = d.wrapper.find(\".custom-numpad\")\n\t\t\t\tvar numbers = [\"one\",'two','three','four','five','six','seven','eight','nine','zero',\"plus\"]\n\t\t\t\tfor(var xx=0;xx
'\n\t\t\t\t\t\t},\n\t\t\t\t\t],\n\t\t\t\t\tsize: 'small',\n\t\t\t\t\tprimary_action_label: 'Continue',\n\t\t\t\t\tprimary_action: function(values) {\n\t\t\t\t\t\tif(values['mobile_number'].length !== me.settings.custom_mobile_number_length){\n\t\t\t\t\t\t\tfrappe.throw(\"Mobile Number Length is \" + me.settings.custom_mobile_number_length.toString());\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (me.settings.custom_add_reference_details) {\n\t\t\t\t\t\t\tme.show_reference_dialog(values['mobile_number']);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tme.hold_invoice(values['mobile_number']);\n\t\t\t\t\t\t}\n\t\t\t\t\t\td.hide();\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\n\t\t\t\tme.setup_mobile_numpad(d);\n\t\t\t\td.show();\n\t\t\t} else {\n\t\t\t\tif (me.settings.custom_add_reference_details) {\n\t\t\t\t\tme.show_reference_dialog();\n\t\t\t\t} else {\n\t\t\t\t\tme.hold_invoice();\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t\t\n\n\t\tthis.$component.on('click', '.checkout-btn-order', () => {\n\t\t\tthis.events.toggle_recent_order();\n\t\t});\n\n\t\tthis.$totals_section.on('click', '.edit-cart-btn', () => {\n\t\t\tthis.events.edit_cart();\n\n\t\t\tthis.toggle_checkout_btn(true);\n\t\t});\n\n\t\tthis.$component.on('click', '.add-discount-wrapper', () => {\n\t\t\tconst can_edit_discount = this.$add_discount_elem.find('.edit-discount-btn').length;\n\n\t\t\tif(!this.discount_field || can_edit_discount) this.show_discount_control();\n\t\t});\n\n\t\tthis.$component.on('click', '.add-branch-wrapper', function () {\n\t\t\tconst $wrapper = $(this); // Store reference to the clicked element\n\t\t\n\t\t\t// Create a div container for the link field\n\t\t\tconst branchFieldWrapper = $('
');\n\t\t\n\t\t\t// Replace the wrapper with the new div\n\t\t\t$wrapper.replaceWith(branchFieldWrapper);\n\t\t\n\t\t\t// Create a Frappe Link Field dynamically\n\t\t\tlet branchField = new frappe.ui.form.ControlLink({\n\t\t\t\tdf: {\n\t\t\t\t\tfieldtype: 'Link',\n\t\t\t\t\toptions: 'Branch', // Link to Branch Doctype\n\t\t\t\t\tfieldname: 'branch',\n\t\t\t\t\tlabel: 'Branch',\n\t\t\t\t\tplaceholder: 'Select Branch',\n\t\t\t\t},\n\t\t\t\tparent: branchFieldWrapper, // Append inside the same container\n\t\t\t\tvalue: '',\n\t\t\t\tchange: function (value) {\n\t\t\t\t\tconsole.log('Selected Branch:', value);\n\t\t\t\t}\n\t\t\t});\n\t\t\n\t\t\t// Render the field\n\t\t\tbranchField.refresh();\n\t\t});\n\t\t\n\t\tfrappe.ui.form.on(\"Sales Invoice\", \"paid_amount\", frm => {\n\t\t\t// called when discount is applied\n\t\t\tthis.update_totals_section(frm);\n\t\t});\n\t}\n\n\tattach_shortcuts() {\n\t\tfor (let row of this.number_pad.keys) {\n\t\t\tfor (let btn of row) {\n\t\t\t\tif (typeof btn !== 'string') continue; // do not make shortcuts for numbers\n\n\t\t\t\tlet shortcut_key = `ctrl+${frappe.scrub(String(btn))[0]}`;\n\t\t\t\tif (btn === 'Delete') shortcut_key = 'ctrl+backspace';\n\t\t\t\tif (btn === 'Remove') shortcut_key = 'shift+ctrl+backspace'\n\t\t\t\tif (btn === '.') shortcut_key = 'ctrl+>';\n\n\t\t\t\t// to account for fieldname map\n\t\t\t\tconst fieldname = this.number_pad.fieldnames[btn] ? this.number_pad.fieldnames[btn] :\n\t\t\t\t\ttypeof btn === 'string' ? frappe.scrub(btn) : btn;\n\n\t\t\t\tlet shortcut_label = shortcut_key.split('+').map(frappe.utils.to_title_case).join('+');\n\t\t\t\tshortcut_label = frappe.utils.is_mac() ? shortcut_label.replace('Ctrl', '\u2318') : shortcut_label;\n\t\t\t\tthis.$numpad_section.find(`.numpad-btn[data-button-value=\"${fieldname}\"]`).attr(\"title\", shortcut_label);\n\n\t\t\t\tfrappe.ui.keys.on(`${shortcut_key}`, () => {\n\t\t\t\t\tconst cart_is_visible = this.$component.is(\":visible\");\n\t\t\t\t\tif (cart_is_visible && this.item_is_selected && this.$numpad_section.is(\":visible\")) {\n\t\t\t\t\t\tthis.$numpad_section.find(`.numpad-btn[data-button-value=\"${fieldname}\"]`).click();\n\t\t\t\t\t}\n\t\t\t\t})\n\t\t\t}\n\t\t}\n\t\tconst ctrl_label = frappe.utils.is_mac() ? '\u2318' : 'Ctrl';\n\t\tthis.$component.find(\".checkout-btn\").attr(\"title\", `${ctrl_label}+Enter`);\n\t\tfrappe.ui.keys.add_shortcut({\n\t\t\tshortcut: \"ctrl+enter\",\n\t\t\taction: () => this.$component.find(\".checkout-btn\").click(),\n\t\t\tcondition: () => this.$component.is(\":visible\") && !this.$totals_section.find('.edit-cart-btn').is(':visible'),\n\t\t\tdescription: __(\"Checkout Order / Submit Order / New Order\"),\n\t\t\tignore_inputs: true,\n\t\t\tpage: cur_page.page.page\n\t\t});\n\t\tthis.$component.find(\".edit-cart-btn\").attr(\"title\", `${ctrl_label}+E`);\n\t\tfrappe.ui.keys.on(\"ctrl+e\", () => {\n\t\t\tconst item_cart_visible = this.$component.is(\":visible\");\n\t\t\tconst checkout_btn_invisible = !this.$totals_section.find('.checkout-btn').is('visible');\n\t\t\tif (item_cart_visible && checkout_btn_invisible) {\n\t\t\t\tthis.$component.find(\".edit-cart-btn\").click();\n\t\t\t}\n\t\t});\n\t\tthis.$component.find(\".add-discount-wrapper\").attr(\"title\", `${ctrl_label}+D`);\n\t\tfrappe.ui.keys.add_shortcut({\n\t\t\tshortcut: \"ctrl+d\",\n\t\t\taction: () => this.$component.find(\".add-discount-wrapper\").click(),\n\t\t\tcondition: () => this.$add_discount_elem.is(\":visible\"),\n\t\t\tdescription: __(\"Add Order Discount\"),\n\t\t\tignore_inputs: true,\n\t\t\tpage: cur_page.page.page\n\t\t});\n\n\n\t\tfrappe.ui.keys.on(\"escape\", () => {\n\t\t\tconst item_cart_visible = this.$component.is(\":visible\");\n\t\t\tif (item_cart_visible && this.discount_field && this.discount_field.parent.is(\":visible\")) {\n\t\t\t\tthis.discount_field.set_value(0);\n\t\t\t}\n\t\t});\n\t}\n\n\ttoggle_item_highlight(item) {\n\t\tconst $cart_item = $(item);\n\t\tconst item_is_highlighted = $cart_item.attr(\"style\") == \"background-color:var(--gray-50);\";\n\n\t\tif (!item || item_is_highlighted) {\n\t\t\tthis.item_is_selected = false;\n\t\t\tthis.$cart_container.find('.cart-item-wrapper').css(\"background-color\", \"\");\n\t\t} else {\n\t\t\t$cart_item.css(\"background-color\", \"var(--control-bg)\");\n\t\t\tthis.item_is_selected = true;\n\t\t\tthis.$cart_container.find('.cart-item-wrapper').not(item).css(\"background-color\", \"\");\n\t\t}\n\t}\n\n\tmake_customer_selector() {\n\t\tthis.$customer_section.html(`\n\t\t\t
\n\t\t`);\n\t\tconst me = this;\n\t\tconst query = { query: 'posnext.controllers.queries.customer_query' };\n\t\tconst allowed_customer_group = this.allowed_customer_groups || [];\n\t\tif (allowed_customer_group.length) {\n\t\t\tquery.filters = {\n\t\t\t\tcustomer_group: ['in', allowed_customer_group]\n\t\t\t}\n\t\t}\n\t\tthis.customer_field = frappe.ui.form.make_control({\n\t\t\tdf: {\n\t\t\t\tlabel: __('Customer'),\n\t\t\t\tfieldtype: 'Link',\n\t\t\t\toptions: 'Customer',\n\t\t\t\tplaceholder: __('Search by customer name, phone, email.'),\n\t\t\t\tread_only: this.mobile_number_based_customer,\n\t\t\t\tget_query: () => query,\n\t\t\t\tonchange: function() {\n\t\t\t\t\tif (this.value) {\n\t\t\t\t\t\tconst frm = me.events.get_frm();\n\t\t\t\t\t\tfrappe.dom.freeze();\n\t\t\t\t\t\tfrappe.model.set_value(frm.doc.doctype, frm.doc.name, 'customer', this.value);\n\t\t\t\t\t\tfrm.script_manager.trigger('customer', frm.doc.doctype, frm.doc.name).then(() => {\n\t\t\t\t\t\t\tfrappe.run_serially([\n\t\t\t\t\t\t\t\t() => me.fetch_customer_details(this.value),\n\t\t\t\t\t\t\t\t() => me.events.customer_details_updated(me.customer_info),\n\t\t\t\t\t\t\t\t() => me.update_customer_section(),\n\t\t\t\t\t\t\t\t() => me.update_totals_section(),\n\t\t\t\t\t\t\t\t() => frappe.dom.unfreeze()\n\t\t\t\t\t\t\t]);\n\t\t\t\t\t\t})\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t},\n\t\t\tparent: this.$customer_section.find('.customer-field'),\n\t\t\trender_input: true,\n\t\t});\n\t\tthis.customer_field.toggle_label(false);\n\t}\n\n\tfetch_customer_details(customer) {\n\t\tif (customer) {\n\t\t\treturn new Promise((resolve) => {\n\t\t\t\tfrappe.db.get_value('Customer', customer, [\"email_id\", \"mobile_no\", \"image\", \"loyalty_program\"]).then(({ message }) => {\n\t\t\t\t\tconst { loyalty_program } = message;\n\t\t\t\t\t// if loyalty program then fetch loyalty points too\n\t\t\t\t\tif (loyalty_program) {\n\t\t\t\t\t\tfrappe.call({\n\t\t\t\t\t\t\tmethod: \"erpnext.accounts.doctype.loyalty_program.loyalty_program.get_loyalty_program_details_with_points\",\n\t\t\t\t\t\t\targs: { customer, loyalty_program, \"silent\": true },\n\t\t\t\t\t\t\tcallback: (r) => {\n\t\t\t\t\t\t\t\tconst { loyalty_points, conversion_factor } = r.message;\n\t\t\t\t\t\t\t\tif (!r.exc) {\n\t\t\t\t\t\t\t\t\tthis.customer_info = { ...message, customer, loyalty_points, conversion_factor };\n\t\t\t\t\t\t\t\t\tresolve();\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t});\n\t\t\t\t\t} else {\n\t\t\t\t\t\tthis.customer_info = { ...message, customer };\n\t\t\t\t\t\tresolve();\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t});\n\t\t} else {\n\t\t\treturn new Promise((resolve) => {\n\t\t\t\tthis.customer_info = {}\n\t\t\t\tresolve();\n\t\t\t});\n\t\t}\n\t}\n\n\tshow_discount_control() {\n\t\tthis.$add_discount_elem.css({ 'padding': '0px', 'border': 'none' });\n\t\tthis.$add_discount_elem.html(\n\t\t\t`
`\n\t\t);\n\t\tconst me = this;\n\t\tconst frm = me.events.get_frm();\n\t\tlet discount = frm.doc.additional_discount_percentage;\n\t\tthis.discount_field = null;\n\t\tif(me.custom_use_additional_discount_amount){\n\t\t\tthis.discount_field = frappe.ui.form.make_control({\n\t\t\t\tdf: {\n\t\t\t\t\tlabel: __('Discount'),\n\t\t\t\t\tfieldtype: 'Data',\n\t\t\t\t\tplaceholder: ( discount ? discount : __('Enter discount amount.') ),\n\t\t\t\t\tinput_class: 'input-xs',\n\t\t\t\t\tonchange: function() {\n\t\t\t\t\t\tsetTimeout(()=>{\n\t\t\t\t\t\t\tif (flt(this.value) != 0) {\n\t\t\t\t\t\t\t\tfrappe.model.set_value(frm.doc.doctype, frm.doc.name, 'discount_amount', flt(this.value));\n\t\t\t\t\t\t\t\tme.hide_discount_control(this.value);\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tfrappe.model.set_value(frm.doc.doctype, frm.doc.name, 'discount_amount', 0);\n\t\t\t\t\t\t\t\tme.$add_discount_elem.css({\n\t\t\t\t\t\t\t\t\t'border': '1px dashed var(--gray-500)',\n\t\t\t\t\t\t\t\t\t'padding': 'var(--padding-sm) var(--padding-md)'\n\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t\tme.$add_discount_elem.html(`${me.get_discount_icon()} ${__('Add Discount')}`);\n\t\t\t\t\t\t\t\tme.discount_field = undefined;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}, 3000);\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\tparent: this.$add_discount_elem.find('.add-discount-field'),\n\t\t\t\trender_input: true,\n\t\t\t});\n\t\t}else{\n\t\t\tthis.discount_field = frappe.ui.form.make_control({\n\t\t\t\tdf: {\n\t\t\t\t\tlabel: __('Discount'),\n\t\t\t\t\tfieldtype: 'Data',\n\t\t\t\t\tplaceholder: ( discount ? discount + '%' : __('Enter discount percentage.') ),\n\t\t\t\t\tinput_class: 'input-xs',\n\t\t\t\t\tonchange: function() {\n\t\t\t\t\t\tsetTimeout(()=>{\n\t\t\t\t\t\t\tif (flt(this.value) != 0) {\n\t\t\t\t\t\t\t\tfrappe.model.set_value(frm.doc.doctype, frm.doc.name, 'additional_discount_percentage', flt(this.value));\n\t\t\t\t\t\t\t\tme.hide_discount_control(this.value);\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tfrappe.model.set_value(frm.doc.doctype, frm.doc.name, 'additional_discount_percentage', 0);\n\t\t\t\t\t\t\t\tme.$add_discount_elem.css({\n\t\t\t\t\t\t\t\t\t'border': '1px dashed var(--gray-500)',\n\t\t\t\t\t\t\t\t\t'padding': 'var(--padding-sm) var(--padding-md)'\n\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t\tme.$add_discount_elem.html(`${me.get_discount_icon()} ${__('Add Discount')}`);\n\t\t\t\t\t\t\t\tme.discount_field = undefined;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}, 3000)\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\tparent: this.$add_discount_elem.find('.add-discount-field'),\n\t\t\t\trender_input: true,\n\t\t\t});\n\t\t}\n\t\tthis.discount_field.toggle_label(false);\n\t\tthis.discount_field.set_focus();\n\t}\n\n\thide_discount_control(discount) {\n\t\tif (!discount) {\n\t\t\tthis.$add_discount_elem.css({ 'padding': '0px', 'border': 'none' });\n\t\t\tthis.$add_discount_elem.html(\n\t\t\t\t`
`\n\t\t\t);\n\t\t} else {\n\t\t\tthis.$add_discount_elem.css({\n\t\t\t\t'border': '1px dashed var(--dark-green-500)',\n\t\t\t\t'padding': 'var(--padding-sm) var(--padding-md)'\n\t\t\t});\n\t\t\tif(this.custom_use_additional_discount_amount){\n\t\t\t\tthis.$add_discount_elem.html(\n\t\t\t\t\t`
\n\t\t\t\t\t\t${this.get_discount_icon()} ${__(\"Additional\")} ${String(discount).bold()} ${this.events.get_frm().doc.currency} ${__(\"discount applied\")}\n\t\t\t\t\t
`\n\t\t\t\t);\n\t\t\t}else{\n\t\t\t\tthis.$add_discount_elem.html(\n\t\t\t\t\t`
\n\t\t\t\t\t\t${this.get_discount_icon()} ${__(\"Additional\")} ${String(discount).bold()}% ${__(\"discount applied\")}\n\t\t\t\t\t
`\n\t\t\t\t);\n\t\t\t}\n\t\t\t\n\t\t}\n\t}\n\n\tupdate_customer_section() {\n\t\tconst me = this;\n\t\tconst { customer, email_id='', mobile_no='', image } = this.customer_info || {};\n\n\t\tif (customer) {\n\t\t\tthis.$customer_section.html(\n\t\t\t\t`
\n\t\t\t\t\t
\n\t\t\t\t\t\t${this.get_customer_image()}\n\t\t\t\t\t\t
\n\t\t\t\t\t\t\t
${customer}
\n\t\t\t\t\t\t\t${get_customer_description()}\n\t\t\t\t\t\t
\n\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t
\n\t\t\t\t\t
\n\t\t\t\t
`\n\t\t\t);\n\t\t\tif(this.mobile_number_based_customer){\n\t\t\t\tthis.$customer_section.find('.reset-customer-btn').css('display', 'none');\n\t\t\t} else {\n\t\t\t\tthis.$customer_section.find('.reset-customer-btn').css('display', 'flex');\n\t\t\t}\n\t\t} else {\n\t\t\t// reset customer selector\n\t\t\tthis.reset_customer_selector();\n\t\t}\n\n\t\tfunction get_customer_description() {\n\t\t\tif (!email_id && !mobile_no) {\n\t\t\t\treturn `
${__('Click to add email / phone')}
`;\n\t\t\t} else if (email_id && !mobile_no) {\n\t\t\t\treturn `
${email_id}
`;\n\t\t\t} else if (mobile_no && !email_id) {\n\t\t\t\treturn `
${mobile_no}
`;\n\t\t\t} else {\n\t\t\t\treturn `
${email_id} - ${mobile_no}
`;\n\t\t\t}\n\t\t}\n\n\t}\n\n\tget_customer_image() {\n\t\tconst { customer, image } = this.customer_info || {};\n\t\tif (image) {\n\t\t\treturn `
\"${image}\"\"
`;\n\t\t} else {\n\t\t\treturn `
${frappe.get_abbr(customer)}
`;\n\t\t}\n\t}\n\n\tupdate_totals_section(frm) {\n\t\tif (!frm) frm = this.events.get_frm();\n\t\tthis.render_net_total(frm.doc.net_total);\n\t\tthis.render_total_item_qty(frm.doc.items);\n\t\tconst grand_total = cint(frappe.sys_defaults.disable_rounded_total) ? frm.doc.grand_total : frm.doc.rounded_total;\n\t\tthis.render_grand_total(grand_total);\n\n\t\tthis.render_taxes(frm.doc.taxes);\n\t}\n\n\trender_net_total(value) {\n\t\tconst currency = this.events.get_frm().doc.currency;\n\t\tthis.$totals_section.find('.net-total-container').html(\n\t\t\t`
${__('Net Total')}
${format_currency(value, currency)}
`\n\t\t)\n\n\t\tthis.$numpad_section.find('.numpad-net-total').html(\n\t\t\t`
${__('Net Total')}: ${format_currency(value, currency)}
`\n\t\t);\n\t}\n\n\trender_total_item_qty(items) {\n\t\tvar total_item_qty = 0;\n\t\titems.map((item) => {\n\t\t\ttotal_item_qty = total_item_qty + item.qty;\n\t\t});\n\n\t\tthis.$totals_section.find('.item-qty-total-container').html(\n\t\t\t`
${__('Total Quantity')}
${total_item_qty}
`\n\t\t);\n\n\t\tthis.$numpad_section.find('.numpad-item-qty-total').html(\n\t\t\t`
${__('Total Quantity')}: ${total_item_qty}
`\n\t\t);\n\t}\n\n\trender_grand_total(value) {\n\t\tconst currency = this.events.get_frm().doc.currency;\n\t\tthis.$totals_section.find('.grand-total-container').html(\n\t\t\t`
${__('Grand Total')}
${format_currency(value, currency)}
`\n\t\t)\n\n\t\tthis.$numpad_section.find('.numpad-grand-total').html(\n\t\t\t`
${__('Grand Total')}: ${format_currency(value, currency)}
`\n\t\t);\n\t}\n\n\trender_taxes(taxes) {\n\t\tif (taxes && taxes.length) {\n\t\t\tconst currency = this.events.get_frm().doc.currency;\n\t\t\tconst taxes_html = taxes.map(t => {\n\t\t\t\tif (t.tax_amount_after_discount_amount == 0.0) return;\n\t\t\t\t// if tax rate is 0, don't print it.\n\t\t\t\tconst description = /[0-9]+/.test(t.description) ? t.description : ((t.rate != 0) ? `${t.description} @ ${t.rate}%`: t.description);\n\t\t\t\treturn `
\n\t\t\t\t\t
${description}
\n\t\t\t\t\t
${format_currency(t.tax_amount_after_discount_amount, currency)}
\n\t\t\t\t
`;\n\t\t\t}).join('');\n\t\t\tthis.$totals_section.find('.taxes-container').css('display', 'flex').html(taxes_html);\n\t\t} else {\n\t\t\tthis.$totals_section.find('.taxes-container').css('display', 'none').html('');\n\t\t}\n\t}\n\n\tget_cart_item({ name }) {\n\t\tconst item_selector = `.cart-item-wrapper[data-row-name=\"${escape(name)}\"]`;\n\t\treturn this.$cart_items_wrapper.find(item_selector);\n\t}\n\n\tget_item_from_frm(item) {\n\t\tconst doc = this.events.get_frm().doc;\n\t\treturn doc.items.find(i => i.name == item.name);\n\t}\n\n\tupdate_item_html(item, remove_item) {\n\t\tconst $item = this.get_cart_item(item);\n\n\t\tif (remove_item) {\n\t\t\t$item && $item.next().remove() && $item.remove();\n\t\t} else {\n\t\t\tconst item_row = this.get_item_from_frm(item);\n\t\t\tthis.render_cart_item(item_row, $item);\n\t\t}\n\n\t\tconst no_of_cart_items = this.$cart_items_wrapper.find('.cart-item-wrapper').length;\n\t\tthis.highlight_checkout_btn(true);\n\n\t\tthis.update_empty_cart_section(no_of_cart_items);\n\t}\n\n\trender_cart_item(item_data, $item_to_update) {\n\t\tconst currency = this.events.get_frm().doc.currency;\n\t\tconst me = this;\n\n\t\tif (!$item_to_update.length) {\n\t\t\tthis.$cart_items_wrapper.prepend(\n\t\t\t\t`
\n\t\t\t\t
`\n\t\t\t)\n\t\t\t$item_to_update = this.get_cart_item(item_data);\n\t\t}\n\t\tvar item_html = `${get_item_image_html()}`\n\n\t\tif(me.custom_use_discount_percentage && !me.custom_use_discount_amount){\n\t\t\titem_html += `
`\n\t\t}\n\t\tif(me.custom_use_discount_amount && !me.custom_use_discount_percentage){\n\t\t\titem_html += `
`\n\t\t}\n\t\tif(me.custom_use_discount_amount && me.custom_use_discount_percentage){\n\t\t\titem_html += `
`\n\t\t}\n\t\tif(!me.custom_use_discount_amount && !me.custom_use_discount_percentage){\n\t\t\titem_html += `
`\n\t\t}\n\n\t\titem_html += `
\n\t\t\t\t\t${item_data.item_name}\n\t\t\t\t
\n\t\t\t\t${get_description_html()}\n\t\t\t
\n\t\t\t${get_rate_discount_html()}`\n\n\t\t$item_to_update.html(item_html)\n\t\tif(me.custom_edit_rate){\n\t\t this[item_data.item_code + \"_qty\"] = frappe.ui.form.make_control({\n\t\t\t\tdf: {\n\t\t\t\t\tfieldname: \"qty\",\n\t\t\t\t\tfieldtype: \"Float\",\n\t\t\t\t\tonchange: function() {\n\t\t\t\t\t\t// me.events.cart_item_clicked({ name: item_data.name });\n\t\t\t\t\t\tme.events.form_updated(item_data, \"qty\", this.value);\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\tparent: $item_to_update.find(`.item-qty`),\n\t\t\t\trender_input: true,\n\t\t\t});\n var uoms = [];\n\t\t\tif(item_data.custom_item_uoms){\n\t\t\t\tuoms = item_data.custom_item_uoms.split(\",\");\n\t\t\t}else if(item_data.uom){\n\t\t\t\tuoms = [item_data.uom];\n\t\t\t}\n\t\t\tif(me.custom_show_uom_in_cart){\n\t\t\t\tthis[item_data.item_code + \"_uom\"] = frappe.ui.form.make_control({\n\t\t\t\t\tdf: {\n\t\t\t\t\t\tfieldname: \"uom\",\n\t\t\t\t\t\tfieldtype: \"Select\",\n\t\t\t\t\t\tonchange: function() {\n\t\t\t\t\t\t\tme.events.form_updated(item_data, \"uom\", this.value);\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t\tparent: $item_to_update.find(`.item-uom`),\n\t\t\t\t\trender_input: true,\n\t\t\t\t});\n\t\t\t}\n\t\t\tif(me.show_batch_in_cart){\n\t\t\t\tthis[item_data.item_code + \"_batch\"] = frappe.ui.form.make_control({\n\t\t\t\t\tdf: {\n\t\t\t\t\t\tfieldname: \"batch\",\n\t\t\t\t\t\tfieldtype: \"Link\",\n\t\t\t\t\t\toptions: \"Batch\",\n\t\t\t\t\t\tget_query: function() {\n\t\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\t\tfilters: {\n\t\t\t\t\t\t\t\t\titem: item_data.item_code\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\t},\n\t\t\t\t\t\tonchange: function() {\n\t\t\t\t\t\t\tme.events.form_updated(item_data, \"batch_no\", this.value);\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t\tparent: $item_to_update.find(`.item-batch`),\n\t\t\t\t\trender_input: true,\n\t\t\t\t});\t\t\t\t\n\t\t\t}\n this[item_data.item_code + \"_rate\"] = frappe.ui.form.make_control({\n df: {\n fieldname: \"rate\",\n fieldtype: \"Float\",\n\t\t\t\t\t\tread_only: !me.allow_rate_change,\n\t\t\t\t\t\tonchange: function() {\n\t\t\t\t\t\t\tme.events.form_updated(item_data, \"rate\", this.value);\n\t\t\t\t\t\t},\n },\n parent: $item_to_update.find(`.item-rate`),\n render_input: true,\n\n });\n if(me.custom_use_discount_percentage){\n \tthis[item_data.item_code + \"_discount\"] = frappe.ui.form.make_control({\n df: {\n fieldname: \"discount\",\n fieldtype: \"Float\",\n\t\t\t\t\t\tonchange: function() {\n\t\t\t\t\t\t\tme.events.form_updated(item_data, \"discount_percentage\", this.value);\n\t\t\t\t\t\t},\n\n },\n parent: $item_to_update.find(`.item-rate-discount`),\n render_input: true,\n });\n\t\t\t}\n\t\t\tif(me.custom_use_discount_amount){\n \tthis[item_data.item_code + \"_discount_amount\"] = frappe.ui.form.make_control({\n df: {\n fieldname: \"discount_amount\",\n fieldtype: \"Currency\",\n\t\t\t\t\t\tonchange: function() {\n\t\t\t\t\t\t\tme.events.form_updated(item_data, \"discount_amount\", this.value);\n\t\t\t\t\t\t},\n\n },\n parent: $item_to_update.find(`.item-rate-discount-amount`),\n render_input: true,\n });\n\t\t\t}\n\t\t\tif(this.custom_show_incoming_rate){\n\t\t\t\tthis[item_data.item_code + \"_incoming_rate\"] = frappe.ui.form.make_control({\n\t\t\t\t\tdf: {\n\t\t\t\t\t\tfieldname: \"incoming_rate\",\n\t\t\t\t\t\tfieldtype: \"Float\",\n\t\t\t\t\t\tread_only: 1\n\t\t\t\t\t},\n\t\t\t\t\tparent: $item_to_update.find(`.item-incoming-rate`),\n\t\t\t\t\trender_input: true,\n\t\t\t\t});\n\t\t\t}\n\t\t\tif(this.custom_show_logical_rack_in_cart){\n\t\t\t\tthis[item_data.item_code + \"_logical_rack\"] = frappe.ui.form.make_control({\n\t\t\t\t\tdf: {\n\t\t\t\t\t\tfieldname: \"logical_rack\",\n\t\t\t\t\t\tfieldtype: \"Data\",\n\t\t\t\t\t\tread_only: 1\n\t\t\t\t\t},\n\t\t\t\t\tparent: $item_to_update.find(`.item-logical-rack`),\n\t\t\t\t\trender_input: true,\n\t\t\t\t});\n\t\t\t}\n\t\t\tif(this.custom_show_last_customer_rate){\n\t\t\t\tthis[item_data.item_code + \"_last_customer_rate\"] = frappe.ui.form.make_control({\n\t\t\t\t\tdf: {\n\t\t\t\t\t\tfieldname: \"last_customer_rate\",\n\t\t\t\t\t\tfieldtype: \"Float\",\n\t\t\t\t\t\tread_only: 1\n\t\t\t\t\t},\n\t\t\t\t\tparent: $item_to_update.find(`.item-last-customer-rate`),\n\t\t\t\t\trender_input: true,\n\t\t\t\t});\n\t\t\t}\n\t\t\tthis[item_data.item_code + \"_amount\"] = frappe.ui.form.make_control({\n df: {\n fieldname: \"amount\",\n fieldtype: \"Float\",\n\t\t\t\t\t\tread_only: 1\n\t\t\t\t\t},\n parent: $item_to_update.find(`.item-rate-amount`),\n render_input: true,\n });\n\n var delete_button = ` `\n var remove_button = frappe.ui.form.make_control({\n df: {\n fieldname: \"remove\",\n fieldtype: \"Button\",\n\t\t\t\t\t\tlabel: delete_button,\n\n },\n parent: $item_to_update.find(`.remove-button`),\n render_input: true,\n });\n remove_button.refresh(); // Make sure button is rendered\n $(remove_button.$input).on(\"click\", function() {\n\t\t\t\tme.events.remove_item_from_cart(item_data)\n\t\t\t\tme.prev_action = undefined;\n\t\t\t\tme.toggle_item_highlight();\n\t\t\t\tme.events.numpad_event(undefined, \"remove\");\n\n });\n this[item_data.item_code + \"_qty\"].set_value(item_data.qty)\n\t\t\tif(me.custom_show_uom_in_cart){\n\t\t\t\tthis[item_data.item_code + \"_uom\"].df.options = uoms;\n\t\t\t\tthis[item_data.item_code + \"_uom\"].set_value(item_data.uom);\n\t\t\t\tthis[item_data.item_code + \"_uom\"].refresh();\n\t\t\t}\n\t\t\tif(me.show_batch_in_cart){\n\t\t\t\tthis[item_data.item_code + \"_batch\"].set_value(item_data.batch_no);\n\t\t\t}\n // this[item_data.item_code + \"_amount\"].set_value(parseFloat(item_data.amount).toFixed(3));\n // this[item_data.item_code + \"_rate\"].set_value(parseFloat(item_data.rate).toFixed(3));\n\t\t\tthis[item_data.item_code + \"_amount\"].set_value(item_data.amount);\n\t\t\tthis[item_data.item_code + \"_rate\"].set_value(item_data.rate);\n\t\t\t\n\t\t\tif(me.custom_use_discount_percentage){\n\t\t\t\tthis[item_data.item_code + \"_discount\"].set_value(item_data.discount_percentage)\n\t\t\t}\n\t\t\tif(me.custom_use_discount_amount){\n\t\t\t\tthis[item_data.item_code + \"_discount_amount\"].set_value(item_data.discount_amount)\n\t\t\t}\n\t\t\tif(me.custom_show_incoming_rate){\n\t\t\t\tthis[item_data.item_code + \"_incoming_rate\"].set_value(item_data.custom_valuation_rate);\n\t\t\t}\n\t\t\tif(me.custom_show_logical_rack_in_cart){\n\t\t\t\tthis[item_data.item_code + \"_logical_rack\"].set_value(item_data.custom_logical_rack);\n\t\t\t}\n\t\t\tif(me.custom_show_last_customer_rate){\n\t\t\t\tif (me.customer_info.customer){\n\t\t\t\t\tfrappe.xcall(\"posnext.posnext.page.posnext.point_of_sale.get_lcr\", {\n\t\t\t\t\t\t\"customer\": me.customer_info.customer, \"item_code\": item_data.item_code\n\t\t\t\t\t}).then(d=>{\n\t\t\t\t\t\tthis[item_data.item_code + \"_last_customer_rate\"].set_value(d)\n\t\t\t\t\t})\n\t\t\t\t}\n\t\t\t}\n\t\t\tif(me.custom_show_uom_in_cart){\n\t\t\t\tfrappe.xcall(\"posnext.posnext.page.posnext.point_of_sale.get_uoms\", {\n\t\t\t\t\t\"item_code\": item_data.item_code\n\t\t\t\t}).then(d=>{\n\t\t\t\t\tthis[item_data.item_code + \"_uom\"].df.options = d;\n\t\t\t\t\tthis[item_data.item_code + \"_uom\"].refresh();\n\t\t\t\t})\n\t\t\t}\n\t\t}\n\n\t\tset_dynamic_rate_header_width();\n\n\t\tfunction set_dynamic_rate_header_width() {\n\t\t\tconst rate_cols = Array.from(me.$cart_items_wrapper.find(\".item-rate-amount\"));\n\t\t\tme.$cart_header.find(\".rate-amount-header\").css(\"width\", \"\");\n\t\t\tme.$cart_items_wrapper.find(\".item-rate-amount\").css(\"width\", \"\");\n\t\t\tlet max_width = rate_cols.reduce((max_width, elm) => {\n\t\t\t\tif ($(elm).width() > max_width)\n\t\t\t\t\tmax_width = $(elm).width();\n\t\t\t\treturn max_width;\n\t\t\t}, 0);\n\n\t\t\tmax_width += 1;\n\t\t\tif (max_width == 1) max_width = \"\";\n\n\t\t\tme.$cart_header.find(\".rate-amount-header\").css(\"width\", max_width);\n\t\t\tme.$cart_items_wrapper.find(\".item-rate-amount\").css(\"width\", max_width);\n\t\t}\n\n\t\tfunction get_rate_discount_html() {\n\t\t\tif(me.custom_edit_rate){\n\t\t\t\tif (item_data.rate && item_data.amount && item_data.rate !== item_data.amount) {\n\t\t\t\t\tvar html = `\n
\n
`;\n\n\t\t\t\t\tif(me.custom_show_uom_in_cart){\n\t\t\t\t\t\thtml += `
`;\n\t\t\t\t\t}\n\t\t\t\t\tif(me.show_batch_in_cart){\n\t\t\t\t\t\thtml += `
`;\n\t\t\t\t\t}\n\t\t\t\t\thtml += `
`;\n\t\t\t\t\tif(me.custom_use_discount_percentage){\n\t\t\t\t\t\thtml += `
`\n\t\t\t\t\t}\n\t\t\t\t\tif(me.custom_use_discount_amount){\n\t\t\t\t\t\thtml += `
`\n\t\t\t\t\t}\n\t\t\t\t\tif(me.custom_show_incoming_rate){\n\t\t\t\t\t\thtml += `
`\n\t\t\t\t\t}\n\t\t\t\t\tif(me.custom_show_logical_rack_in_cart){\n\t\t\t\t\t\thtml += `
`\n\t\t\t\t\t}\n\t\t\t\t\tif(me.custom_show_last_customer_rate){\n\t\t\t\t\t\thtml += `
`\n\t\t\t\t\t}\n html += `
\n\t\t\t\t\t\t\t
\n
`\n return html\n } else {\n\t\t\t\t\tvar html = `\n
\n
`;\n\t\t\t\t\tif(me.custom_show_uom_in_cart){\n\t\t\t\t\t\thtml += `
`;\n\t\t\t\t\t}\n\t\t\t\t\tif(me.show_batch_in_cart){\n\t\t\t\t\t\thtml += `
`;\n\t\t\t\t\t}\n\t\t\t\t\thtml += `
`;\n\t\t\t\t\tif(me.custom_use_discount_percentage){\n\t\t\t\t\t\thtml += `
`\n\t\t\t\t\t}\n\t\t\t\t\tif(me.custom_use_discount_amount){\n\t\t\t\t\t\thtml += `
`\n\t\t\t\t\t}\n\t\t\t\t\tif(me.custom_show_incoming_rate){\n\t\t\t\t\t\thtml += `
`\n\t\t\t\t\t}\n\t\t\t\t\tif(me.custom_show_logical_rack_in_cart){\n\t\t\t\t\t\thtml += `
`\n\t\t\t\t\t}\n\t\t\t\t\tif(me.custom_show_last_customer_rate){\n\t\t\t\t\t\thtml += `
`\n\t\t\t\t\t}\n html += `
\n
\n
`\n return html\n }\n\t\t\t} else {\n\t\t\t\tif (item_data.rate && item_data.amount && item_data.rate !== item_data.amount) {\n return `\n
\n
${item_data.qty || 0}
\n
${item_data.uom}
\n\t\t\t\t\t\t\t
${item_data.batch}
\n
\n
${parseFloat(item_data.amount).toFixed(2)}
\n
${parseFloat(item_data.rate).toFixed(2)}
\n
\n
`\n } else {\n return `\n
\n
${item_data.qty || 0}
\n
${item_data.uom}
\n\t\t\t\t\t\t\t
${item_data.batch}
\n
\n
${parseFloat(item_data.rate).toFixed(2)}
\n
\n
`\n }\n\t\t\t}\n\n\t\t}\n\n\t\tfunction get_description_html() {\n\t\t\tif (item_data.description) {\n\t\t\t\tif (item_data.description.indexOf('
') != -1) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\titem_data.description = $(item_data.description).text();\n\t\t\t\t\t} catch (error) {\n\t\t\t\t\t\titem_data.description = item_data.description.replace(/
/g, ' ').replace(/<\\/div>/g, ' ').replace(/ +/g, ' ');\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\titem_data.description = frappe.ellipsis(item_data.description, 45);\n\t\t\t\treturn `
${item_data.description}
`;\n\t\t\t}\n\t\t\treturn ``;\n\t\t}\n\n\t\tfunction get_item_image_html() {\n\t\t\tconst { image, item_name } = item_data;\n\t\t\tif (!me.hide_images && image) {\n\t\t\t\treturn `\n\t\t\t\t\t
\n\t\t\t\t\t\t\n\t\t\t\t\t
`;\n\t\t\t} else {\n\t\t\t\treturn `
${frappe.get_abbr(item_name)}
`;\n\t\t\t}\n\t\t}\n\t}\n\n\thandle_broken_image($img) {\n\t\tconst item_abbr = $($img).attr('alt');\n\t\t$($img).parent().replaceWith(`
${item_abbr}
`);\n\t}\n\n\tupdate_selector_value_in_cart_item(selector, value, item) {\n\t\tconst $item_to_update = this.get_cart_item(item);\n\t\t$item_to_update.attr(`data-${selector}`, escape(value));\n\t}\n\n\ttoggle_checkout_btn(show_checkout) {\n\t\tif (show_checkout) {\n\t\t\tif(this.show_checkout_button){\n\t\t\t\tthis.$totals_section.find('.checkout-btn').css('display', 'flex');\n\t\t\t} else {\n\t\t\t\tthis.$totals_section.find('.checkout-btn').css('display', 'none');\n\t\t\t}\n\n\t\t\tif(this.show_held_button){\n\t\t\t\tthis.$totals_section.find('.checkout-btn-held').css('display', 'flex');\n\t\t\t} else {\n\t\t\t\tthis.$totals_section.find('.checkout-btn-held').css('display', 'none');\n\t\t\t}\n\t\t\tif(this.show_order_list_button){\n\t\t\t\tthis.$totals_section.find('.checkout-btn-order').css('display', 'flex');\n\t\t\t} else {\n\t\t\t\tthis.$totals_section.find('.checkout-btn-order').css('display', 'none');\n\t\t\t}\n\t\t\tthis.$totals_section.find('.edit-cart-btn').css('display', 'none');\n\t\t} else {\n\t\t\tthis.$totals_section.find('.checkout-btn').css('display', 'none');\n\t\t\t\tthis.$totals_section.find('.checkout-btn-held').css('display', 'none');\n\t\t\tthis.$totals_section.find('.checkout-btn-held').css('display', 'none');\n\t\t\t\tthis.$totals_section.find('.checkout-btn-order').css('display', 'none');\n\t\t\tthis.$totals_section.find('.edit-cart-btn').css('display', 'flex');\n\t\t}\n\t}\n\n\thighlight_checkout_btn(toggle) {\n\t\tif (toggle) {\n\t\t\tthis.$add_discount_elem.css('display', 'flex');\n\t\t\tthis.$cart_container.find('.checkout-btn').css({\n\t\t\t\t'background-color': 'var(--blue-500)'\n\t\t\t});\n\t\t\tif(this.show_held_button){\n\t\t\t\tthis.$cart_container.find('.checkout-btn-held').css({\n\t\t\t\t\t'background-color': 'var(--blue-500)'\n\t\t\t\t});\n\t\t\t} else {\n\t\t\t\tthis.$cart_container.find('.checkout-btn-held').css({\n\t\t\t\t\t'background-color': 'var(--blue-200)'\n\t\t\t\t});\n\t\t\t}\n\t\t\tif(this.show_order_list_button){\n\t\t\t\tthis.$cart_container.find('.checkout-btn-order').css({\n\t\t\t\t\t'background-color': 'var(--blue-500)'\n\t\t\t\t});\n\t\t\t} else {\n\t\t\t\tthis.$cart_container.find('.checkout-btn-order').css({\n\t\t\t\t\t'background-color': 'var(--blue-500)'\n\t\t\t\t});\n\t\t\t}\n\n\t\t} else {\n\t\t\tthis.$add_discount_elem.css('display', 'none');\n\t\t\tthis.$cart_container.find('.checkout-btn').css({\n\t\t\t\t'background-color': 'var(--blue-200)'\n\t\t\t});\n\t\t\tthis.$cart_container.find('.checkout-btn-held').css({\n\t\t\t\t'background-color': 'var(--blue-200)'\n\t\t\t});\n\n\t\t\tthis.$cart_container.find('.checkout-btn-order').css({\n\t\t\t\t'background-color': 'var(--blue-500)'\n\t\t\t});\n\t\t}\n\t}\n\n\tupdate_empty_cart_section(no_of_cart_items) {\n\t\tconst $no_item_element = this.$cart_items_wrapper.find('.no-item-wrapper');\n\n\t\t// if cart has items and no item is present\n\t\tno_of_cart_items > 0 && $no_item_element && $no_item_element.remove() && this.$cart_header.css('display', 'flex');\n\n\t\tno_of_cart_items === 0 && !$no_item_element.length && this.make_no_items_placeholder();\n\t}\n\n\ton_numpad_event($btn) {\n\t\tconst current_action = $btn.attr('data-button-value');\n\t\tconst action_is_field_edit = ['qty', 'discount_percentage', 'rate'].includes(current_action);\n\t\tconst action_is_allowed = action_is_field_edit ? (\n\t\t\t(current_action == 'rate' && this.allow_rate_change) ||\n\t\t\t(current_action == 'discount_percentage' && this.allow_discount_change) ||\n\t\t\t(current_action == 'qty')) : true;\n\n\t\tconst action_is_pressed_twice = this.prev_action === current_action;\n\t\tconst first_click_event = !this.prev_action;\n\t\tconst field_to_edit_changed = this.prev_action && this.prev_action != current_action;\n\n\t\tif (action_is_field_edit) {\n\t\t\tif (!action_is_allowed) {\n\t\t\t\tconst label = current_action == 'rate' ? 'Rate'.bold() : 'Discount'.bold();\n\t\t\t\tconst message = __('Editing {0} is not allowed as per POS Profile settings', [label]);\n\t\t\t\tfrappe.show_alert({\n\t\t\t\t\tindicator: 'red',\n\t\t\t\t\tmessage: message\n\t\t\t\t});\n\t\t\t\tfrappe.utils.play_sound(\"error\");\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (first_click_event || field_to_edit_changed) {\n\t\t\t\tthis.prev_action = current_action;\n\t\t\t} else if (action_is_pressed_twice) {\n\t\t\t\tthis.prev_action = undefined;\n\t\t\t}\n\t\t\tthis.numpad_value = '';\n\n\t\t} else if (current_action === 'checkout') {\n\t\t\tthis.prev_action = undefined;\n\t\t\tthis.toggle_item_highlight();\n\t\t\tthis.events.numpad_event(undefined, current_action);\n\t\t\treturn;\n\t\t} else if (current_action === 'remove') {\n\t\t\tthis.prev_action = undefined;\n\t\t\tthis.toggle_item_highlight();\n\t\t\tthis.events.numpad_event(undefined, current_action);\n\t\t\treturn;\n\t\t} else {\n\t\t\tthis.numpad_value = current_action === 'delete' ? this.numpad_value.slice(0, -1) : this.numpad_value + current_action;\n\t\t\tthis.numpad_value = this.numpad_value || 0;\n\t\t}\n\n\t\tconst first_click_event_is_not_field_edit = !action_is_field_edit && first_click_event;\n\n\t\tif (first_click_event_is_not_field_edit) {\n\t\t\tfrappe.show_alert({\n\t\t\t\tindicator: 'red',\n\t\t\t\tmessage: __('Please select a field to edit from numpad')\n\t\t\t});\n\t\t\tfrappe.utils.play_sound(\"error\");\n\t\t\treturn;\n\t\t}\n\n\t\tif (flt(this.numpad_value) > 100 && this.prev_action === 'discount_percentage') {\n\t\t\tfrappe.show_alert({\n\t\t\t\tmessage: __('Discount cannot be greater than 100%'),\n\t\t\t\tindicator: 'orange'\n\t\t\t});\n\t\t\tfrappe.utils.play_sound(\"error\");\n\t\t\tthis.numpad_value = current_action;\n\t\t}\n\n\t\tthis.highlight_numpad_btn($btn, current_action);\n\t\tthis.events.numpad_event(this.numpad_value, this.prev_action);\n\t}\n\n\thighlight_numpad_btn($btn, curr_action) {\n\t\tconst curr_action_is_highlighted = $btn.hasClass('highlighted-numpad-btn');\n\t\tconst curr_action_is_action = ['qty', 'discount_percentage', 'rate', 'done'].includes(curr_action);\n\n\t\tif (!curr_action_is_highlighted) {\n\t\t\t$btn.addClass('highlighted-numpad-btn');\n\t\t}\n\t\tif (this.prev_action === curr_action && curr_action_is_highlighted) {\n\t\t\t// if Qty is pressed twice\n\t\t\t$btn.removeClass('highlighted-numpad-btn');\n\t\t}\n\t\tif (this.prev_action && this.prev_action !== curr_action && curr_action_is_action) {\n\t\t\t// Order: Qty -> Rate then remove Qty highlight\n\t\t\tconst prev_btn = $(`[data-button-value='${this.prev_action}']`);\n\t\t\tprev_btn.removeClass('highlighted-numpad-btn');\n\t\t}\n\t\tif (!curr_action_is_action || curr_action === 'done') {\n\t\t\t// if numbers are clicked\n\t\t\tsetTimeout(() => {\n\t\t\t\t$btn.removeClass('highlighted-numpad-btn');\n\t\t\t}, 200);\n\t\t}\n\t}\n\n\ttoggle_numpad(show) {\n\t\tif (show) {\n\t\t\tthis.$totals_section.css('display', 'none');\n\t\t\tthis.$numpad_section.css('display', 'flex');\n\t\t} else {\n\t\t\tthis.$totals_section.css('display', 'flex');\n\t\t\tthis.$numpad_section.css('display', 'none');\n\t\t}\n\t\tthis.reset_numpad();\n\t}\n\n\treset_numpad() {\n\t\tthis.numpad_value = '';\n\t\tthis.prev_action = undefined;\n\t\tthis.$numpad_section.find('.highlighted-numpad-btn').removeClass('highlighted-numpad-btn');\n\t}\n\n\ttoggle_numpad_field_edit(fieldname) {\n\t\tif (['qty', 'discount_percentage', 'rate'].includes(fieldname)) {\n\t\t\tthis.$numpad_section.find(`[data-button-value=\"${fieldname}\"]`).click();\n\t\t}\n\t}\n\n\ttoggle_customer_info(show) {\n\t\tif (show) {\n\t\t\tconst { customer } = this.customer_info || {};\n\n\t\t\tthis.$cart_container.css('display', 'none');\n\t\t\tthis.$customer_section.css({\n\t\t\t\t'height': '100%',\n\t\t\t\t'padding-top': '0px'\n\t\t\t});\n\t\t\tthis.$customer_section.find('.customer-details').html(\n\t\t\t\t`
\n\n\t\t\t\t\t
Contact Details
\n\t\t\t\t\t
\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t
\n\t\t\t\t
\n\t\t\t\t
\n\t\t\t\t\t${this.get_customer_image()}\n\t\t\t\t\t
\n\t\t\t\t\t\t
${customer}
\n\t\t\t\t\t\t
\n\t\t\t\t\t
\n\t\t\t\t
\n\t\t\t\t
\n\t\t\t\t\t
\n\t\t\t\t\t
\n\t\t\t\t\t
\n\t\t\t\t\t
\n\t\t\t\t
\n\t\t\t\t
Recent Transactions
`\n\t\t\t);\n\t\t\t// transactions need to be in diff div from sticky elem for scrolling\n\t\t\tthis.$customer_section.append(`
`);\n\t\t\tif(this.mobile_number_based_customer){\n\t\t\t\tthis.$customer_section.find('.mobile_no-field').css('display', 'none');\n\t\t\t\tthis.$customer_section.find('.close-details-btn').css('display', 'none');\n\t\t\t} else {\n\t\t\t\tthis.$customer_section.find('.mobile_no-field').css('display', 'flex');\n\t\t\t\tthis.$customer_section.find('.close-details-btn').css('display', 'flex');\n\t\t\t}\n\t\t\tthis.render_customer_fields();\n\t\t\tthis.fetch_customer_transactions();\n\n\t\t} else {\n\t\t\tthis.$cart_container.css('display', 'flex');\n\t\t\tthis.$customer_section.css({\n\t\t\t\t'height': '',\n\t\t\t\t'padding-top': ''\n\t\t\t});\n\n\t\t\tthis.update_customer_section();\n\t\t}\n\t}\n\n\trender_customer_fields() {\n\t\tconst $customer_form = this.$customer_section.find('.customer-fields-container');\n\n\t\tconst dfs = [{\n\t\t\tfieldname: 'email_id',\n\t\t\tlabel: __('Email'),\n\t\t\tfieldtype: 'Data',\n\t\t\toptions: 'email',\n\t\t\tplaceholder: __(\"Enter customer's email\")\n\t\t},{\n\t\t\tfieldname: 'mobile_no',\n\t\t\tlabel: __('Phone Number'),\n\t\t\tfieldtype: 'Data',\n\t\t\tplaceholder: __(\"Enter customer's phone number\")\n\t\t},{\n\t\t\tfieldname: 'loyalty_program',\n\t\t\tlabel: __('Loyalty Program'),\n\t\t\tfieldtype: 'Link',\n\t\t\toptions: 'Loyalty Program',\n\t\t\tplaceholder: __(\"Select Loyalty Program\")\n\t\t},{\n\t\t\tfieldname: 'loyalty_points',\n\t\t\tlabel: __('Loyalty Points'),\n\t\t\tfieldtype: 'Data',\n\t\t\tread_only: 1\n\t\t}];\n\n\t\tconst me = this;\n\t\tdfs.forEach(df => {\n\t\t\tthis[`customer_${df.fieldname}_field`] = frappe.ui.form.make_control({\n\t\t\t\tdf: { ...df,\n\t\t\t\t\tonchange: handle_customer_field_change,\n\t\t\t\t},\n\t\t\t\tparent: $customer_form.find(`.${df.fieldname}-field`),\n\t\t\t\trender_input: true,\n\t\t\t});\n\t\t\tthis[`customer_${df.fieldname}_field`].set_value(this.customer_info[df.fieldname]);\n\t\t})\n\n\t\tfunction handle_customer_field_change() {\n\t\t\tconst current_value = me.customer_info[this.df.fieldname];\n\t\t\tconst current_customer = me.customer_info.customer;\n\n\t\t\tif (this.value && current_value != this.value && this.df.fieldname != 'loyalty_points') {\n\t\t\t\tfrappe.call({\n\t\t\t\t\tmethod: 'posnext.posnext.page.posnext.point_of_sale.set_customer_info',\n\t\t\t\t\targs: {\n\t\t\t\t\t\tfieldname: this.df.fieldname,\n\t\t\t\t\t\tcustomer: current_customer,\n\t\t\t\t\t\tvalue: this.value\n\t\t\t\t\t},\n\t\t\t\t\tcallback: (r) => {\n\t\t\t\t\t\tif(!r.exc) {\n\t\t\t\t\t\t\tme.customer_info[this.df.fieldname] = this.value;\n\t\t\t\t\t\t\tfrappe.show_alert({\n\t\t\t\t\t\t\t\tmessage: __(\"Customer contact updated successfully.\"),\n\t\t\t\t\t\t\t\tindicator: 'green'\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\tfrappe.utils.play_sound(\"submit\");\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\t}\n\n\tfetch_customer_transactions() {\n\t\tfrappe.db.get_list('Sales Invoice', {\n\t\t\tfilters: { customer: this.customer_info.customer, docstatus: 1 },\n\t\t\tfields: ['name', 'grand_total', 'status', 'posting_date', 'posting_time', 'currency'],\n\t\t\tlimit: 20\n\t\t}).then((res) => {\n\t\t\tconst transaction_container = this.$customer_section.find('.customer-transactions');\n\n\t\t\tif (!res.length) {\n\t\t\t\ttransaction_container.html(\n\t\t\t\t\t`
No recent transactions found
`\n\t\t\t\t)\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst elapsed_time = moment(res[0].posting_date+\" \"+res[0].posting_time).fromNow();\n\t\t\tthis.$customer_section.find('.customer-desc').html(`Last transacted ${elapsed_time}`);\n\n\t\t\tres.forEach(invoice => {\n\t\t\t\tconst posting_datetime = moment(invoice.posting_date+\" \"+invoice.posting_time).format(\"Do MMMM, h:mma\");\n\t\t\t\tlet indicator_color = {\n\t\t\t\t\t'Paid': 'green',\n\t\t\t\t\t'Draft': 'red',\n\t\t\t\t\t'Return': 'gray',\n\t\t\t\t\t'Consolidated': 'blue'\n\t\t\t\t};\n\n\t\t\t\ttransaction_container.append(\n\t\t\t\t\t`
\n\t\t\t\t\t\t
\n\t\t\t\t\t\t\t
${invoice.name}
\n\t\t\t\t\t\t\t
${posting_datetime}
\n\t\t\t\t\t\t
\n\t\t\t\t\t\t
\n\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t${format_currency(invoice.grand_total, invoice.currency, 0) || 0}\n\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t${invoice.status}\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t
\n\t\t\t\t\t\t
\n\t\t\t\t\t
\n\t\t\t\t\t
`\n\t\t\t\t)\n\t\t\t});\n\t\t});\n\t}\n\n\tattach_refresh_field_event(frm) {\n\t\t$(frm.wrapper).off('refresh-fields');\n\t\t$(frm.wrapper).on('refresh-fields', () => {\n\t\t\tif (frm.doc.items.length) {\n\t\t\t\tthis.$cart_items_wrapper.html('');\n\t\t\t\tfrm.doc.items.forEach(item => {\n\t\t\t\t\tthis.update_item_html(item);\n\t\t\t\t});\n\t\t\t}\n\t\t\tthis.update_totals_section(frm);\n\t\t});\n\t}\n\n\tload_invoice() {\n\t\tconsole.log(\"Load invoice\")\n\t\tconst frm = this.events.get_frm();\n\n\t\tthis.attach_refresh_field_event(frm);\n\n\t\tthis.fetch_customer_details(frm.doc.customer).then(() => {\n\t\t\tthis.events.customer_details_updated(this.customer_info);\n\t\t\tthis.update_customer_section();\n\t\t\n\t\t\tthis.$cart_items_wrapper.html('');\n\t\t\tif (frm.doc.items.length) {\n\t\t\t\tfrm.doc.items.forEach(item => {\n\t\t\t\t\tthis.update_item_html(item);\n\t\t\t\t});\n\t\t\t} else {\n\t\t\t\tthis.make_no_items_placeholder();\n\t\t\t\tthis.highlight_checkout_btn(true);\n\t\t\t}\n\n\t\t\tthis.update_totals_section(frm);\n\n\t\t\tif(frm.doc.docstatus === 1) {\n\t\t\t\tthis.$totals_section.find('.checkout-btn').css('display', 'none');\n\t\t\t\tthis.$totals_section.find('.checkout-btn-held').css('display', 'none');\n\t\t\t\tif(this.show_order_list_button){\n\t\t\t\t\tthis.$totals_section.find('.checkout-btn-order').css('display', 'flex');\n\t\t\t\t} else {\n\t\t\t\t\tthis.$totals_section.find('.checkout-btn-order').css('display', 'none');\n\t\t\t\t}\n\t\t\t\tthis.$totals_section.find('.edit-cart-btn').css('display', 'none');\n\t\t\t} else {\n\t\t\t\tif(this.show_checkout_button) {\n\t\t\t\t\tthis.$totals_section.find('.checkout-btn').css('display', 'flex');\n\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tthis.$totals_section.find('.checkout-btn').css('display', 'none');\n\n\t\t\t\t}\n\t\t\t\tif(this.show_held_button){\n\t\t\t\t\tthis.$totals_section.find('.checkout-btn-held').css('display', 'flex');\n\t\t\t\t} else {\n\t\t\t\tthis.$totals_section.find('.checkout-btn-held').css('display', 'none');\n\t\t\t\t}\n\t\t\t\tif(this.show_order_list_button){\n\t\t\t\t\tthis.$totals_section.find('.checkout-btn-order').css('display', 'flex');\n\t\t\t\t} else {\n\t\t\t\t\tthis.$totals_section.find('.checkout-btn-order').css('display', 'none');\n\t\t\t\t}\n\t\t\t\tthis.$totals_section.find('.edit-cart-btn').css('display', 'none');\n\t\t\t}\n\n\t\t\tthis.toggle_component(true);\n\t\t});\n\t}\n\n\ttoggle_component(show) {\n\t\tshow ? this.$component.css('display', 'flex') : this.$component.css('display', 'none');\n\t}\n\n\tshow_reference_dialog(mobile_number = null) {\n\t\tconst me = this;\n\t\tconst dialog = new frappe.ui.Dialog({\n\t\t\ttitle: __('Enter Reference Details'),\n\t\t\tfields: [\n\t\t\t\t{\n\t\t\t\t\tfieldtype: 'Data',\n\t\t\t\t\tlabel: __('Reference Number'),\n\t\t\t\t\tfieldname: 'reference_no',\n\t\t\t\t\treqd: 1\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tfieldtype: 'Data',\n\t\t\t\t\tlabel: __('Reference Name'),\n\t\t\t\t\tfieldname: 'reference_name',\n\t\t\t\t\treqd: 1\n\t\t\t\t}\n\t\t\t],\n\t\t\tprimary_action_label: __('Hold Invoice'),\n\t\t\tprimary_action: async (values) => {\n\t\t\t\tif (mobile_number) {\n\t\t\t\t\t// Create customer if mobile number provided\n\t\t\t\t\tawait frappe.call({\n\t\t\t\t\t\tmethod: \"posnext.posnext.page.posnext.point_of_sale.create_customer\",\n\t\t\t\t\t\targs: { customer: mobile_number },\n\t\t\t\t\t\tfreeze: true,\n\t\t\t\t\t\tfreeze_message: \"Creating Customer....\"\n\t\t\t\t\t});\n\t\t\t\t\t\n\t\t\t\t\tconst frm = me.events.get_frm();\n\t\t\t\t\tawait frappe.model.set_value(frm.doc.doctype, frm.doc.name, 'customer', mobile_number);\n\t\t\t\t\tawait frm.script_manager.trigger('customer', frm.doc.doctype, frm.doc.name);\n\t\t\t\t}\n\n\t\t\t\t// Update reference details\n\t\t\t\tconst frm = me.events.get_frm();\n\t\t\t\tfrm.doc.custom_reference_no = values.reference_no;\n\t\t\t\tfrm.doc.custom_reference_name = values.reference_name;\n\t\t\t\t\n\t\t\t\tdialog.hide();\n\t\t\t\tawait me.events.save_draft_invoice();\n\t\t\t}\n\t\t});\n\t\tdialog.show();\n\t}\n\n\tasync hold_invoice(mobile_number = null) {\n\t\tif (mobile_number) {\n\t\t\tawait frappe.call({\n\t\t\t\tmethod: \"posnext.posnext.page.posnext.point_of_sale.create_customer\",\n\t\t\t\targs: { customer: mobile_number },\n\t\t\t\tfreeze: true,\n\t\t\t\tfreeze_message: \"Creating Customer....\"\n\t\t\t});\n\t\t\t\n\t\t\tconst frm = this.events.get_frm();\n\t\t\tawait frappe.model.set_value(frm.doc.doctype, frm.doc.name, 'customer', mobile_number);\n\t\t\tawait frm.script_manager.trigger('customer', frm.doc.doctype, frm.doc.name);\n\t\t}\n\t\t\n\t\tawait this.events.save_draft_invoice();\n\t}\n}\n", "frappe.provide('posnext.PointOfSale');\nposnext.PointOfSale.ItemDetails = class {\n\tconstructor({ wrapper, events, settings }) {\n\t\tthis.wrapper = wrapper;\n\t\tthis.events = events;\n\t\tthis.hide_images = settings.hide_images;\n\t\tthis.allow_rate_change = settings.allow_rate_change;\n\t\tthis.allow_discount_change = settings.allow_discount_change;\n\t\tthis.custom_edit_rate_and_uom = settings.custom_edit_rate_and_uom;\n\t\tthis.current_item = {};\n\n\t\tthis.init_component();\n\t}\n\n\tinit_component() {\n\t\tthis.prepare_dom();\n\t\tthis.init_child_components();\n\t\tthis.bind_events();\n\t\tthis.attach_shortcuts();\n\t}\n\n\tprepare_dom() {\n\t\tthis.wrapper.append(\n\t\t\t`
`\n\t\t)\n\n\t\tthis.$component = this.wrapper.find('.item-details-container');\n\t}\n\n\tinit_child_components() {\n\t\tthis.$component.html(\n\t\t\t`
\n\t\t\t\t
${__('Item Detailss')}
\n\t\t\t\t
\n\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t
\n\t\t\t
\n\t\t\t
\n\t\t\t\t
\n\t\t\t\t\t
\n\t\t\t\t\t
\n\t\t\t\t\t
\n\t\t\t\t
\n\t\t\t\t
\n\t\t\t
\n\t\t\t
\n\t\t\t
\n\t\t\t
`\n\t\t)\n\n\t\tthis.$item_name = this.$component.find('.item-name');\n\t\tthis.$item_description = this.$component.find('.item-desc');\n\t\tthis.$item_price = this.$component.find('.item-price');\n\t\tthis.$item_image = this.$component.find('.item-image');\n\t\tthis.$form_container = this.$component.find('.form-container');\n\t\tthis.$dicount_section = this.$component.find('.discount-section');\n\t\tthis.$serial_batch_container = this.$component.find('.serial-batch-container');\n\t}\n\n\tcompare_with_current_item(item) {\n\t\t// returns true if `item` is currently being edited\n\t\treturn item && item.name == this.current_item.name;\n\t}\n\n\tasync toggle_item_details_section(item) {\n\t\tconst current_item_changed = !this.compare_with_current_item(item);\n\n\t\t// if item is null or highlighted cart item is clicked twice\n\t\tconst hide_item_details = !Boolean(item) || !current_item_changed;\n\n\t\tif ((!hide_item_details && current_item_changed) || hide_item_details) {\n\t\t\t// if item details is being closed OR if item details is opened but item is changed\n\t\t\t// in both cases, if the current item is a serialized item, then validate and remove the item\n\t\t\tawait this.validate_serial_batch_item();\n\t\t}\n\t\tif(!this.custom_edit_rate_and_uom){\n\t\t\tthis.events.toggle_item_selector(!hide_item_details);\n\t\t\tthis.toggle_component(!hide_item_details);\n\t\t}\n\n\n\t\tif (item && current_item_changed) {\n\t\t\tthis.doctype = item.doctype;\n\t\t\tthis.item_meta = frappe.get_meta(this.doctype);\n\t\t\tthis.name = item.name;\n\t\t\tthis.item_row = item;\n\t\t\tthis.currency = this.events.get_frm().doc.currency;\n\n\t\t\tthis.current_item = item;\n\n\t\t\tthis.render_dom(item);\n\t\t\tthis.render_discount_dom(item);\n\t\t\tthis.render_form(item);\n\t\t\tthis.events.highlight_cart_item(item);\n\t\t} else {\n\t\t\tthis.current_item = {};\n\t\t}\n\t}\n\n\tvalidate_serial_batch_item() {\n\t\tconst doc = this.events.get_frm().doc;\n\t\tconst item_row = doc.items.find(item => item.name === this.name);\n\n\t\tif (!item_row) return;\n\n\t\tconst serialized = item_row.has_serial_no;\n\t\tconst batched = item_row.has_batch_no;\n\t\tconst no_bundle_selected = !item_row.serial_and_batch_bundle;\n\n\t\tif ((serialized && no_bundle_selected) || (batched && no_bundle_selected)) {\n\t\t\tfrappe.show_alert({\n\t\t\t\tmessage: __(\"Item is removed since no serial / batch no selected.\"),\n\t\t\t\tindicator: 'orange'\n\t\t\t});\n\t\t\tfrappe.utils.play_sound(\"cancel\");\n\t\t\treturn this.events.remove_item_from_cart();\n\t\t}\n\t}\n\n\trender_dom(item) {\n\t\tlet { item_name, description, image, price_list_rate } = item;\n\n\t\tfunction get_description_html() {\n\t\t\tif (description) {\n\t\t\t\tdescription = description.indexOf('...') === -1 && description.length > 140 ? description.substr(0, 139) + '...' : description;\n\t\t\t\treturn description;\n\t\t\t}\n\t\t\treturn ``;\n\t\t}\n\n\t\tthis.$item_name.html(item_name);\n\t\tthis.$item_description.html(get_description_html());\n\t\tthis.$item_price.html(format_currency(price_list_rate, this.currency));\n\t\tif (!this.hide_images && image) {\n\t\t\tthis.$item_image.html(\n\t\t\t\t``\n\t\t\t);\n\t\t} else {\n\t\t\tthis.$item_image.html(`
${frappe.get_abbr(item_name)}
`);\n\t\t}\n\n\t}\n\n\thandle_broken_image($img) {\n\t\tconst item_abbr = $($img).attr('alt');\n\t\t$($img).replaceWith(`
${item_abbr}
`);\n\t}\n\n\trender_discount_dom(item) {\n\t\tif (item.discount_percentage) {\n\t\t\tthis.$dicount_section.html(\n\t\t\t\t`
${format_currency(item.price_list_rate, this.currency)}
\n\t\t\t\t
${item.discount_percentage}% off
`\n\t\t\t)\n\t\t\tthis.$item_price.html(format_currency(item.rate, this.currency));\n\t\t} else {\n\t\t\tthis.$dicount_section.html(``)\n\t\t}\n\t}\n\n\trender_form(item) {\n\t\tconst fields_to_display = this.get_form_fields(item);\n\t\tthis.$form_container.html('');\n\n\t\tfields_to_display.forEach((fieldname, idx) => {\n\t\t\tthis.$form_container.append(\n\t\t\t\t`
`\n\t\t\t)\n\n\t\t\tconst field_meta = this.item_meta.fields.find(df => df.fieldname === fieldname);\n\t\t\tfieldname === 'discount_percentage' ? (field_meta.label = __('Discount (%)')) : '';\n\t\t\tconst me = this;\n\t\t\tvar uoms = []\n\t\t\tfrappe.db.get_doc(\"Item\",me.current_item.item_code).then(doc => {\n\t\t\t\tuoms = doc.uoms.map(item => item.uom);\n\t\t\t})\n\t\t\tthis[`${fieldname}_control`] = frappe.ui.form.make_control({\n\t\t\t\tdf: {\n\t\t\t\t\t...field_meta,\n\t\t\t\t\tonchange: function() {\n\t\t\t\t\t\tme.events.form_updated(me.current_item, fieldname, this.value);\n\t\t\t\t\t},\n\t\t\t\t\tget_query:function () {\n\t\t\t\t\t\tif(fieldname === 'uom'){\n\t\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\t\tfilters: {\n\t\t\t\t\t\t\t\t\tname: ['in',uoms]\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn\n }\n\t\t\t\t},\n\t\t\t\tparent: this.$form_container.find(`.${fieldname}-control`),\n\t\t\t\trender_input: true,\n\t\t\t})\n\t\t\tthis[`${fieldname}_control`].set_value(item[fieldname]);\n\t\t});\n\n\t\tthis.make_auto_serial_selection_btn(item);\n\n\t\tthis.bind_custom_control_change_event();\n\t}\n\n\tget_form_fields(item) {\n\t\tconst fields = ['qty', 'uom', 'rate', 'conversion_factor', 'discount_percentage', 'warehouse', 'actual_qty', 'price_list_rate'];\n\t\tif (item.has_serial_no) fields.push('serial_no');\n\t\tif (item.has_batch_no) fields.push('batch_no');\n\t\treturn fields;\n\t}\n\n\tmake_auto_serial_selection_btn(item) {\n\t\tif (item.has_serial_no || item.has_batch_no) {\n\t\t\tconst label = item.has_serial_no ? __('Select Serial No') : __('Select Batch No');\n\t\t\tthis.$form_container.append(\n\t\t\t\t`
${label}
`\n\t\t\t);\n\t\t\tthis.$form_container.find('.serial_no-control').find('textarea').css('height', '6rem');\n\t\t}\n\t}\n\n\tbind_custom_control_change_event() {\n\t\tconst me = this;\n\t\tif (this.rate_control) {\n\t\t\tthis.rate_control.df.onchange = function() {\n\t\t\t\tif (this.value || flt(this.value) === 0) {\n\t\t\t\t\tme.events.form_updated(me.current_item, 'rate', this.value).then(() => {\n\t\t\t\t\t\tconst item_row = frappe.get_doc(me.doctype, me.name);\n\t\t\t\t\t\tconst doc = me.events.get_frm().doc;\n\t\t\t\t\t\tme.$item_price.html(format_currency(item_row.rate, doc.currency));\n\t\t\t\t\t\tme.render_discount_dom(item_row);\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t};\n\t\t\tthis.rate_control.df.read_only = !this.allow_rate_change;\n\t\t\tthis.rate_control.refresh();\n\t\t}\n\n\t\tif (this.discount_percentage_control && !this.allow_discount_change) {\n\t\t\tthis.discount_percentage_control.df.read_only = 1;\n\t\t\tthis.discount_percentage_control.refresh();\n\t\t}\n\n\t\tif (this.warehouse_control) {\n\t\t\tthis.warehouse_control.df.reqd = 1;\n\t\t\tthis.warehouse_control.df.onchange = function() {\n\t\t\t\tif (this.value) {\n\t\t\t\t\tme.events.form_updated(me.current_item, 'warehouse', this.value).then(() => {\n\t\t\t\t\t\tme.item_stock_map = me.events.get_item_stock_map();\n\t\t\t\t\t\tconst available_qty = me.item_stock_map[me.item_row.item_code][this.value][0];\n\t\t\t\t\t\tconst is_stock_item = Boolean(me.item_stock_map[me.item_row.item_code][this.value][1]);\n\t\t\t\t\t\tif (available_qty === undefined) {\n\t\t\t\t\t\t\tme.events.get_available_stock(me.item_row.item_code, this.value).then(() => {\n\t\t\t\t\t\t\t\t// item stock map is updated now reset warehouse\n\t\t\t\t\t\t\t\tme.warehouse_control.set_value(this.value);\n\t\t\t\t\t\t\t})\n\t\t\t\t\t\t} else if (available_qty === 0 && is_stock_item) {\n\t\t\t\t\t\t\tme.warehouse_control.set_value('');\n\t\t\t\t\t\t\tconst bold_item_code = me.item_row.item_code.bold();\n\t\t\t\t\t\t\tconst bold_warehouse = this.value.bold();\n\t\t\t\t\t\t\tfrappe.throw(\n\t\t\t\t\t\t\t\t__('Item Code: {0} is not available under warehouse {1}.', [bold_item_code, bold_warehouse])\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tme.actual_qty_control.set_value(available_qty);\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}\n\t\t\tthis.warehouse_control.df.get_query = () => {\n\t\t\t\treturn {\n\t\t\t\t\tfilters: { company: this.events.get_frm().doc.company }\n\t\t\t\t}\n\t\t\t};\n\t\t\tthis.warehouse_control.refresh();\n\t\t}\n\n\t\tif (this.serial_no_control) {\n\t\t\tthis.serial_no_control.df.reqd = 1;\n\t\t\tthis.serial_no_control.df.onchange = async function() {\n\t\t\t\t!me.current_item.batch_no && await me.auto_update_batch_no();\n\t\t\t\tme.events.form_updated(me.current_item, 'serial_no', this.value);\n\t\t\t}\n\t\t\tthis.serial_no_control.refresh();\n\t\t}\n\n\t\tif (this.batch_no_control) {\n\t\t\tthis.batch_no_control.df.reqd = 1;\n\t\t\tthis.batch_no_control.df.get_query = () => {\n\t\t\t\treturn {\n\t\t\t\t\tquery: 'erpnext.controllers.queries.get_batch_no',\n\t\t\t\t\tfilters: {\n\t\t\t\t\t\titem_code: me.item_row.item_code,\n\t\t\t\t\t\twarehouse: me.item_row.warehouse,\n\t\t\t\t\t\tposting_date: me.events.get_frm().doc.posting_date\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t};\n\t\t\tthis.batch_no_control.refresh();\n\t\t}\n\n\t\tif (this.uom_control) {\n\t\t\tthis.uom_control.df.onchange = function() {\n\t\t\t\tme.events.form_updated(me.current_item, 'uom', this.value);\n\n\t\t\t\tconst item_row = frappe.get_doc(me.doctype, me.name);\n\t\t\t\tme.conversion_factor_control.df.read_only = (item_row.stock_uom == this.value);\n\t\t\t\tme.conversion_factor_control.refresh();\n\t\t\t}\n\t\t}\n\n\t\tfrappe.model.on(\"POS Invoice Item\", \"*\", (fieldname, value, item_row) => {\n\t\t\tconst field_control = this[`${fieldname}_control`];\n\t\t\tconst item_row_is_being_edited = this.compare_with_current_item(item_row);\n\n\t\t\tif (item_row_is_being_edited && field_control && field_control.get_value() !== value) {\n\t\t\t\tfield_control.set_value(value);\n\t\t\t\tcur_pos.update_cart_html(item_row);\n\t\t\t}\n\t\t});\n\t}\n\n\tasync auto_update_batch_no() {\n\t\tif (this.serial_no_control && this.batch_no_control) {\n\t\t\tconst selected_serial_nos = this.serial_no_control.get_value().split(`\\n`).filter(s => s);\n\t\t\tif (!selected_serial_nos.length) return;\n\n\t\t\t// find batch nos of the selected serial no\n\t\t\tconst serials_with_batch_no = await frappe.db.get_list(\"Serial No\", {\n\t\t\t\tfilters: { 'name': [\"in\", selected_serial_nos]},\n\t\t\t\tfields: [\"batch_no\", \"name\"]\n\t\t\t});\n\t\t\tconst batch_serial_map = serials_with_batch_no.reduce((acc, r) => {\n\t\t\t\tif (!acc[r.batch_no]) {\n\t\t\t\t\tacc[r.batch_no] = [];\n\t\t\t\t}\n\t\t\t\tacc[r.batch_no] = [...acc[r.batch_no], r.name];\n\t\t\t\treturn acc;\n\t\t\t}, {});\n\t\t\t// set current item's batch no and serial no\n\t\t\tconst batch_no = Object.keys(batch_serial_map)[0];\n\t\t\tconst batch_serial_nos = batch_serial_map[batch_no].join(`\\n`);\n\t\t\t// eg. 10 selected serial no. -> 5 belongs to first batch other 5 belongs to second batch\n\t\t\tconst serial_nos_belongs_to_other_batch = selected_serial_nos.length !== batch_serial_map[batch_no].length;\n\n\t\t\tconst current_batch_no = this.batch_no_control.get_value();\n\t\t\tcurrent_batch_no != batch_no && await this.batch_no_control.set_value(batch_no);\n\n\t\t\tif (serial_nos_belongs_to_other_batch) {\n\t\t\t\tthis.serial_no_control.set_value(batch_serial_nos);\n\t\t\t\tthis.qty_control.set_value(batch_serial_map[batch_no].length);\n\n\t\t\t\tdelete batch_serial_map[batch_no];\n\t\t\t\tthis.events.clone_new_batch_item_in_frm(batch_serial_map, this.current_item);\n\t\t\t}\n\t\t}\n\t}\n\n\tbind_events() {\n\t\tthis.bind_auto_serial_fetch_event();\n\t\tthis.bind_fields_to_numpad_fields();\n\n\t\tthis.$component.on('click', '.close-btn', () => {\n\t\t\tthis.events.close_item_details();\n\t\t});\n\t}\n\n\tattach_shortcuts() {\n\t\tthis.wrapper.find('.close-btn').attr(\"title\", \"Esc\");\n\t\tfrappe.ui.keys.on(\"escape\", () => {\n\t\t\tconst item_details_visible = this.$component.is(\":visible\");\n\t\t\tif (item_details_visible) {\n\t\t\t\tthis.events.close_item_details();\n\t\t\t}\n\t\t});\n\t}\n\n\tbind_fields_to_numpad_fields() {\n\t\tconst me = this;\n\t\tthis.$form_container.on('click', '.input-with-feedback', function() {\n\t\t\tconst fieldname = $(this).attr('data-fieldname');\n\t\t\tif (this.last_field_focused != fieldname) {\n\t\t\t\tme.events.item_field_focused(fieldname);\n\t\t\t\tthis.last_field_focused = fieldname;\n\t\t\t}\n\t\t});\n\t}\n\n\tbind_auto_serial_fetch_event() {\n\t\tthis.$form_container.on('click', '.auto-fetch-btn', () => {\n\t\t\tfrappe.require(\"assets/erpnext/js/utils/serial_no_batch_selector.js\", () => {\n\t\t\t\tlet frm = this.events.get_frm();\n\t\t\t\tlet item_row = this.item_row;\n\t\t\t\titem_row.type_of_transaction = \"Outward\";\n\n\t\t\t\tnew erpnext.SerialBatchPackageSelector(frm, item_row, (r) => {\n\t\t\t\t\tif (r) {\n\t\t\t\t\t\tfrappe.model.set_value(item_row.doctype, item_row.name, {\n\t\t\t\t\t\t\t\"serial_and_batch_bundle\": r.name,\n\t\t\t\t\t\t\t\"qty\": Math.abs(r.total_qty)\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t});\n\t\t})\n\t}\n\n\ttoggle_component(show) {\n\t\tshow ? this.$component.css('display', 'flex') : this.$component.css('display', 'none');\n\t}\n}\n", "frappe.provide('posnext.PointOfSale');\nposnext.PointOfSale.NumberPad = class {\n\tconstructor({ wrapper, events, cols, keys, css_classes, fieldnames_map }) {\n\t\tthis.wrapper = wrapper;\n\t\tthis.events = events;\n\t\tthis.cols = cols;\n\t\tthis.keys = keys;\n\t\tthis.css_classes = css_classes || [];\n\t\tthis.fieldnames = fieldnames_map || {};\n\n\t\tthis.init_component();\n\t}\n\n\tinit_component() {\n\t\tthis.prepare_dom();\n\t\tthis.bind_events();\n\t}\n\n\tprepare_dom() {\n\t\tconst { cols, keys, css_classes, fieldnames } = this;\n\n\t\tfunction get_keys() {\n\t\t\treturn keys.reduce((a, row, i) => {\n\t\t\t\treturn a + row.reduce((a2, number, j) => {\n\t\t\t\t\tconst class_to_append = css_classes && css_classes[i] ? css_classes[i][j] : '';\n\t\t\t\t\tconst fieldname = fieldnames && fieldnames[number] ?\n\t\t\t\t\t\tfieldnames[number] : typeof number === 'string' ? frappe.scrub(number) : number;\n\n\t\t\t\t\treturn a2 + `
${__(number)}
`;\n\t\t\t\t}, '');\n\t\t\t}, '');\n\t\t}\n\n\t\tthis.wrapper.html(\n\t\t\t`
\n\t\t\t\t${get_keys()}\n\t\t\t
`\n\t\t)\n\t}\n\n\tbind_events() {\n\t\tconst me = this;\n\t\tthis.wrapper.on('click', '.numpad-btn', function() {\n\t\t\tconst $btn = $(this);\n\t\t\tme.events.numpad_event($btn);\n\t\t});\n\t}\n}\n", "/* eslint-disable no-unused-vars */\nfrappe.provide('posnext.PointOfSale');\nposnext.PointOfSale.Payment = class {\n\tconstructor({ events, wrapper, settings }) {\n\t\tthis.wrapper = wrapper;\n\t\tthis.events = events;\n\t\tthis.custom_show_sales_man = settings.custom_show_sales_man\n\t\tthis.custom_show_additional_note = settings.custom_show_additional_note\n\t\tthis.custom_edit_rate = settings.custom_edit_rate_and_uom\n\t\tthis.custom_show_credit_sales = settings.custom_show_credit_sales\n\t\tthis.default_payment = settings.default_payment\n\t\tthis.current_payments = []\n\t\tthis.enable_coupon_code = settings.enable_coupon_code\n\n\t\tthis.init_component();\n\t\t// this.init_component();\n\t\tif (this.enable_coupon_code){\n\t\t\tthis.render_coupon_code_field();\n\t\t}\n\t}\n\n\tinit_component() {\n\t\tthis.prepare_dom();\n\t\tthis.initialize_numpad();\n\t\tthis.bind_events();\n\t\tthis.attach_shortcuts();\n\n\t}\n\n\tprepare_dom() {\n\t\tthis.wrapper.append(\n\t\t\t`
\n\t\t\t\t
${__('Payment Method')}
\n\t\t\t\t
\n\t\t\t\t
\n\t\t\t\t\t
\n\t\t\t\t\t\t
${__('Additional Information')}
\n\t\t\t\t\t\t
\n\t\t\t\t\t\t
\n\t\t\t\t\t
\n\t\t\t\t\t
\n\t\t\t\t
\n\t\t\t\t
\n\t\t\t\t\t
\n\t\t\t\t
\n\t\t\t\t
${__(\"Complete Order\")}
\n\t\t\t
`\n\t\t);\n\t\n\t\t// \u2705 Assign to the right class\n\t\tthis.$component = this.wrapper.find('.payment-container');\n\t\tthis.$payment_modes = this.$component.find('.payment-modes');\n\t\tthis.$totals_section = this.$component.find('.totals-section');\n\t\tthis.$totals = this.$component.find('.totals');\n\t\tthis.$numpad = this.$component.find('.number-pad');\n\t\tthis.$coupon_code = this.$component.find('.coupon-code');\n\t\tthis.$invoice_fields_section = this.$component.find('.fields-section');\n\t}\n\t\n\trender_coupon_code_field() {\n\t\tfrappe.ui.form.make_control({\n\t\t\tdf: {\n\t\t\t\tlabel: __('Coupon Code'),\n\t\t\t\tfieldtype: 'Link',\n\t\t\t\toptions: 'Coupon Code',\n\t\t\t\tfieldname: 'coupon_code',\n\t\t\t\tplaceholder: __('Select a coupon'),\n\t\t\t},\n\t\t\tparent: this.$component.find('.coupon-code'),\n\t\t\trender_input: true\n\t\t});\n\t}\n\t\n\n\tmake_invoice_fields_control() {\n\t\t// frappe.db.get_doc(\"POS Settings\", undefined).then((doc) => {\n\t\t\tvar me = this\n\t\t\tconst fields = [];\n\t\t\tif(this.custom_show_credit_sales){\n\t\t\t\tfields.push({\n\t\t\t\t\tfieldname: \"custom_credit_sales\",\n\t\t\t\t\tlabel: \"Credit Sales\",\n\t\t\t\t\tfieldtype: \"Check\",\n\t\t\t\t})\n\t\t\t\t// fields.push({\n\t\t\t\t// \tfieldname: \"custom_credit_sales_date\",\n\t\t\t\t// \tlabel: \"Credit Sales Date\",\n\t\t\t\t// \tfieldtype: \"Date\"\n\t\t\t\t// })\n\t\t\t}\n\t\t\tif(this.custom_show_sales_man){\n\t\t\t\tfields.push({\n\t\t\t\t\tfieldname: \"sales_person\",\n\t\t\t\t\tlabel: \"Sales Man\",\n\t\t\t\t\tfieldtype: \"Link\",\n\t\t\t\t\toptions: \"Sales Person\",\n\t\t\t\t})\n\t\t\t}\n\t\t\tif(this.custom_show_additional_note){\n\t\t\t\tfields.push({\n\t\t\t\t\tfieldname: \"remarks\",\n\t\t\t\t\tlabel: \"Additional Note\",\n\t\t\t\t\tfieldtype: \"Small Text\",\n\t\t\t\t})\n\t\t\t}\n\n\t\t\tif (!fields.length) return;\n\t\t\tthis.$invoice_fields = this.$invoice_fields_section.find('.invoice-fields');\n\t\t\tthis.$invoice_fields.html('');\n\t\t\tconst frm = this.events.get_frm();\n\t\t\tme.current_payments = frm.doc.payments\n\t\t\tfields.forEach(df => {\n\t\t\t\tthis.$invoice_fields.append(\n\t\t\t\t\t`
`\n\t\t\t\t);\n\t\t\t\tlet df_events = {\n\t\t\t\t\tonchange: function() {\n\t\t\t\t\t\tif(this.df.fieldname === 'sales_person'){\n\t\t\t\t\t\t\tfrm.clear_table(\"sales_team\")\n\t\t\t\t\t\t\tcur_frm.add_child(\"sales_team\", {\n\t\t\t\t\t\t\t\tsales_person: this.get_value(),\n\t\t\t\t\t\t\t\tallocated_percentage: 100,\n\t\t\t\t\t\t\t})\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tif(this.df.fieldname === 'custom_credit_sales'){\n\t\t\t\t\t\t\t\t// $('input[data-fieldname=\"custom_credit_sales_date\"]').css(\"pointer-events\",this.get_value() ? \"\" : \"none\")\n\t\t\t\t\t\t\t\tif(this.get_value()){\n\t\t\t\t\t\t\t\t\t// $('input[data-fieldname=\"custom_credit_sales_date\"]').removeAttr('readonly')\n\n\t\t\t\t\t\t\t\t\tfrm.doc.payments.forEach(p => {\n\t\t\t\t\t\t\t\t\t\tconst mode = p.mode_of_payment.replace(/ +/g, \"_\").toLowerCase();\n\t\t\t\t\t\t\t\t\t\tme[`${mode}_control`].set_value(0);\n\t\t\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tconsole.log(me.current_payments)\n\t\t\t\t\t\t\t\t\t// $('input[data-fieldname=\"custom_credit_sales_date\"]').attr('readonly', true);\n\t\t\t\t\t\t\t\t\tme.current_payments.forEach(p => {\n\t\t\t\t\t\t\t\t\t\tif(p.mode_of_payment === me.default_payment){\n\t\t\t\t\t\t\t\t\t\t\tconst mode = p.mode_of_payment.replace(/ +/g, \"_\").toLowerCase();\n\t\t\t\t\t\t\t\t\t\t\tme[`${mode}_control`].set_value(frm.doc.grand_total);\n\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tfrm.set_value(this.df.fieldname, this.get_value());\n\t\t\t\t\t\t}\n\t\t// \t\t\t\tif(this.df.fieldname === 'custom_credit_sales' && this.get_value()){\n\t\t// \t\t\t\t\tconsole.log(\"SELECTEEED MODE\")\n\t\t// console.log(me.$payment_modes)\n\t\t// \t\t\t\t\tthis.selected_mode.set_value(0);\n\t\t// \t\t\t\t}\n\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t\tif (df.fieldtype == \"Button\") {\n\t\t\t\t\tdf_events = {\n\t\t\t\t\t\tclick: function() {\n\t\t\t\t\t\t\tif (frm.script_manager.has_handlers(df.fieldname, frm.doc.doctype)) {\n\t\t\t\t\t\t\t\tfrm.script_manager.trigger(df.fieldname, frm.doc.doctype, frm.doc.docname);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t};\n\t\t\t\t}\n\n\t\t\t\tthis[`${df.fieldname}_field`] = frappe.ui.form.make_control({\n\t\t\t\t\tdf: {\n\t\t\t\t\t\t...df,\n\t\t\t\t\t\t...df_events\n\t\t\t\t\t},\n\t\t\t\t\tparent: this.$invoice_fields.find(`.${df.fieldname}-field`),\n\t\t\t\t\trender_input: true,\n\t\t\t\t});\n\t\t\t\tif(df.fieldname !== 'remarks'){\n\t\t\t\t\tthis[`${df.fieldname}_field`].set_value(frm.doc[df.fieldname]);\n\t\t\t\t}\n\t\t\t\t// if(df.fieldname === 'custom_credit_sales_date'){\n\t\t\t\t// \tthis[`${df.fieldname}_field`].set_value(frappe.datetime.get_today());\n\t\t\t\t// }\n\t\t\t});\n\t\t// });\n\t}\n\n\tinitialize_numpad() {\n\t\tconst me = this;\n\t\tthis.number_pad = new posnext.PointOfSale.NumberPad({\n\t\t\twrapper: this.$numpad,\n\t\t\tevents: {\n\t\t\t\tnumpad_event: function($btn) {\n\t\t\t\t\tme.on_numpad_clicked($btn);\n\t\t\t\t}\n\t\t\t},\n\t\t\tcols: 3,\n\t\t\tkeys: [\n\t\t\t\t[ 1, 2, 3 ],\n\t\t\t\t[ 4, 5, 6 ],\n\t\t\t\t[ 7, 8, 9 ],\n\t\t\t\t[ '.', 0, 'Delete' ]\n\t\t\t],\n\t\t});\n\n\t\tthis.numpad_value = '';\n\t}\n\n\ton_numpad_clicked($btn) {\n\t\tconst button_value = $btn.attr('data-button-value');\n\n\t\thighlight_numpad_btn($btn);\n\t\tthis.numpad_value = button_value === 'delete' ? this.numpad_value.slice(0, -1) : this.numpad_value + button_value;\n\t\tthis.selected_mode.$input.get(0).focus();\n\t\tthis.selected_mode.set_value(this.numpad_value);\n\n\t\tfunction highlight_numpad_btn($btn) {\n\t\t\t$btn.addClass('shadow-base-inner bg-selected');\n\t\t\tsetTimeout(() => {\n\t\t\t\t$btn.removeClass('shadow-base-inner bg-selected');\n\t\t\t}, 100);\n\t\t}\n\t}\n\n\tbind_events() {\n\t\tconst me = this;\n\n\t\tthis.$payment_modes.on('click', '.mode-of-payment', function(e) {\n\t\t\tconst mode_clicked = $(this);\n\t\t\t// if clicked element doesn't have .mode-of-payment class then return\n\t\t\tif (!$(e.target).is(mode_clicked)) return;\n\n\t\t\tconst scrollLeft = mode_clicked.offset().left - me.$payment_modes.offset().left + me.$payment_modes.scrollLeft();\n\t\t\tme.$payment_modes.animate({ scrollLeft });\n\n\t\t\tconst mode = mode_clicked.attr('data-mode');\n\n\t\t\t// hide all control fields and shortcuts\n\t\t\t$(`.mode-of-payment-control`).css('display', 'none');\n\t\t\t$(`.cash-shortcuts`).css('display', 'none');\n\t\t\tme.$payment_modes.find(`.pay-amount`).css('display', 'inline');\n\t\t\tme.$payment_modes.find(`.loyalty-amount-name`).css('display', 'none');\n\n\t\t\t// remove highlight from all mode-of-payments\n\t\t\t$('.mode-of-payment').removeClass('border-primary');\n\n\t\t\tif (mode_clicked.hasClass('border-primary')) {\n\t\t\t\t// clicked one is selected then unselect it\n\t\t\t\tmode_clicked.removeClass('border-primary');\n\t\t\t\tme.selected_mode = '';\n\t\t\t} else {\n\t\t\t\t// clicked one is not selected then select it\n\t\t\t\tmode_clicked.addClass('border-primary');\n\t\t\t\tmode_clicked.find('.mode-of-payment-control').css('display', 'flex');\n\t\t\t\tmode_clicked.find('.cash-shortcuts').css('display', 'grid');\n\t\t\t\tme.$payment_modes.find(`.${mode}-amount`).css('display', 'none');\n\t\t\t\tme.$payment_modes.find(`.${mode}-name`).css('display', 'inline');\n\n\t\t\t\tme.selected_mode = me[`${mode}_control`];\n\t\t\t\tme.selected_mode && me.selected_mode.$input.get(0).focus();\n\t\t\t\tme.auto_set_remaining_amount();\n\t\t\t}\n\t\t});\n\n\t\tfrappe.ui.form.on('POS Invoice', 'contact_mobile', (frm) => {\n\t\t\tconst contact = frm.doc.contact_mobile;\n\t\t\tconst request_button = $(this.request_for_payment_field?.$input[0]);\n\t\t\tif (contact) {\n\t\t\t\trequest_button.removeClass('btn-default').addClass('btn-primary');\n\t\t\t} else {\n\t\t\t\trequest_button.removeClass('btn-primary').addClass('btn-default');\n\t\t\t}\n\t\t});\n\n\t\tfrappe.ui.form.on('POS Invoice', 'coupon_code', (frm) => {\n\t\t\tif (frm.doc.coupon_code && !frm.applying_pos_coupon_code) {\n\t\t\t\tif (!frm.doc.ignore_pricing_rule) {\n\t\t\t\t\tfrm.applying_pos_coupon_code = true;\n\t\t\t\t\tfrappe.run_serially([\n\t\t\t\t\t\t() => frm.doc.ignore_pricing_rule=1,\n\t\t\t\t\t\t() => frm.trigger('ignore_pricing_rule'),\n\t\t\t\t\t\t() => frm.doc.ignore_pricing_rule=0,\n\t\t\t\t\t\t() => frm.trigger('apply_pricing_rule'),\n\t\t\t\t\t\t() => frm.save(),\n\t\t\t\t\t\t() => this.update_totals_section(frm.doc),\n\t\t\t\t\t\t() => (frm.applying_pos_coupon_code = false)\n\t\t\t\t\t]);\n\t\t\t\t} else if (frm.doc.ignore_pricing_rule) {\n\t\t\t\t\tfrappe.show_alert({\n\t\t\t\t\t\tmessage: __(\"Ignore Pricing Rule is enabled. Cannot apply coupon code.\"),\n\t\t\t\t\t\tindicator: \"orange\"\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\n\t\tthis.setup_listener_for_payments();\n\n\t\tthis.$payment_modes.on('click', '.shortcut', function() {\n\t\t\tconst value = $(this).attr('data-value');\n\t\t\tme.selected_mode.set_value(value);\n\t\t});\n\n\t\tthis.$component.on('click', '.submit-order-btn', () => {\n\t\t\tconst doc = this.events.get_frm().doc;\n\t\t\tlet paid_amount = doc.paid_amount\n\t\t\tif(cur_frm.doc.custom_credit_sales && this.custom_show_credit_sales){\n\t\t\t\tcur_frm.clear_table(\"payments\")\n\t\t\t\tpaid_amount = 0;\n\t\t\t}\n\n\t\t\tconst items = doc.items;\n\n\t\t\tif ((paid_amount == 0 || !items.length) && !this.custom_show_credit_sales) {\n\t\t\t\tconst message = items.length ? __(\"You cannot submit the order without payment.\") : __(\"You cannot submit empty order.\");\n\t\t\t\tfrappe.show_alert({ message, indicator: \"orange\" });\n\t\t\t\tfrappe.utils.play_sound(\"error\");\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tthis.events.submit_invoice();\n\t\t});\n\n\t\tfrappe.ui.form.on('POS Invoice', 'paid_amount', (frm) => {\n\t\t\tthis.update_totals_section(frm.doc);\n\n\t\t\t// need to re calculate cash shortcuts after discount is applied\n\t\t\tconst is_cash_shortcuts_invisible = !this.$payment_modes.find('.cash-shortcuts').is(':visible');\n\t\t\tthis.attach_cash_shortcuts(frm.doc);\n\t\t\t!is_cash_shortcuts_invisible && this.$payment_modes.find('.cash-shortcuts').css('display', 'grid');\n\t\t\tthis.render_payment_mode_dom();\n\t\t});\n\n\t\tfrappe.ui.form.on('POS Invoice', 'loyalty_amount', (frm) => {\n\t\t\tconst formatted_currency = format_currency(frm.doc.loyalty_amount, frm.doc.currency);\n\t\t\tthis.$payment_modes.find(`.loyalty-amount-amount`).html(formatted_currency);\n\t\t});\n\n\t\tfrappe.ui.form.on(\"Sales Invoice Payment\", \"amount\", (frm, cdt, cdn) => {\n\t\t\t// for setting correct amount after loyalty points are redeemed\n\t\t\tconst default_mop = locals[cdt][cdn];\n\t\t\tconst mode = default_mop.mode_of_payment.replace(/ +/g, \"_\").toLowerCase();\n\t\t\tif (this[`${mode}_control`] && this[`${mode}_control`].get_value() != default_mop.amount) {\n\t\t\t\tthis[`${mode}_control`].set_value(default_mop.amount);\n\t\t\t}\n\t\t});\n\t}\n\n\tsetup_listener_for_payments() {\n\t\tfrappe.realtime.on(\"process_phone_payment\", (data) => {\n\t\t\tconst doc = this.events.get_frm().doc;\n\t\t\tconst { response, amount, success, failure_message } = data;\n\t\t\tlet message, title;\n\n\t\t\tif (success) {\n\t\t\t\ttitle = __(\"Payment Received\");\n\t\t\t\tconst grand_total = cint(frappe.sys_defaults.disable_rounded_total) ? doc.grand_total : doc.rounded_total;\n\t\t\t\tif (amount >= grand_total) {\n\t\t\t\t\tfrappe.dom.unfreeze();\n\t\t\t\t\tmessage = __(\"Payment of {0} received successfully.\", [format_currency(amount, doc.currency, 0)]);\n\t\t\t\t\tthis.events.submit_invoice();\n\t\t\t\t\tcur_frm.reload_doc();\n\n\t\t\t\t} else {\n\t\t\t\t\tmessage = __(\"Payment of {0} received successfully. Waiting for other requests to complete...\", [format_currency(amount, doc.currency, 0)]);\n\t\t\t\t}\n\t\t\t} else if (failure_message) {\n\t\t\t\tmessage = failure_message;\n\t\t\t\ttitle = __(\"Payment Failed\");\n\t\t\t}\n\n\t\t\tfrappe.msgprint({ \"message\": message, \"title\": title });\n\t\t});\n\t}\n\n\tauto_set_remaining_amount() {\n\t\tconst doc = this.events.get_frm().doc;\n\t\tconst grand_total = cint(frappe.sys_defaults.disable_rounded_total) ? doc.grand_total : doc.rounded_total;\n\t\tconst remaining_amount = grand_total - doc.paid_amount;\n\t\tconst current_value = this.selected_mode ? this.selected_mode.get_value() : undefined;\n\t\tif (!current_value && remaining_amount > 0 && this.selected_mode) {\n\t\t\tthis.selected_mode.set_value(remaining_amount);\n\t\t}\n\t}\n\n\tattach_shortcuts() {\n\t\tconst ctrl_label = frappe.utils.is_mac() ? '\u2318' : 'Ctrl';\n\t\tthis.$component.find('.submit-order-btn').attr(\"title\", `${ctrl_label}+Enter`);\n\t\tfrappe.ui.keys.on(\"ctrl+enter\", () => {\n\t\t\tconst payment_is_visible = this.$component.is(\":visible\");\n\t\t\tconst active_mode = this.$payment_modes.find(\".border-primary\");\n\t\t\tif (payment_is_visible && active_mode.length) {\n\t\t\t\tthis.$component.find('.submit-order-btn').click();\n\t\t\t}\n\t\t});\n\n\t\tfrappe.ui.keys.add_shortcut({\n\t\t\tshortcut: \"tab\",\n\t\t\taction: () => {\n\t\t\t\tconst payment_is_visible = this.$component.is(\":visible\");\n\t\t\t\tlet active_mode = this.$payment_modes.find(\".border-primary\");\n\t\t\t\tactive_mode = active_mode.length ? active_mode.attr(\"data-mode\") : undefined;\n\n\t\t\t\tif (!active_mode) return;\n\n\t\t\t\tconst mode_of_payments = Array.from(this.$payment_modes.find(\".mode-of-payment\")).map(m => $(m).attr(\"data-mode\"));\n\t\t\t\tconst mode_index = mode_of_payments.indexOf(active_mode);\n\t\t\t\tconst next_mode_index = (mode_index + 1) % mode_of_payments.length;\n\t\t\t\tconst next_mode_to_be_clicked = this.$payment_modes.find(`.mode-of-payment[data-mode=\"${mode_of_payments[next_mode_index]}\"]`);\n\n\t\t\t\tif (payment_is_visible && mode_index != next_mode_index) {\n\t\t\t\t\tnext_mode_to_be_clicked.click();\n\t\t\t\t}\n\t\t\t},\n\t\t\tcondition: () => this.$component.is(':visible') && this.$payment_modes.find(\".border-primary\").length,\n\t\t\tdescription: __(\"Switch Between Payment Modes\"),\n\t\t\tignore_inputs: true,\n\t\t\tpage: cur_page.page.page\n\t\t});\n\t}\n\n\ttoggle_numpad() {\n\t\t// pass\n\t}\n\n\trender_payment_section() {\n\t\tthis.render_payment_mode_dom();\n\t\tthis.make_invoice_fields_control();\n\t\tthis.update_totals_section();\n\t\tthis.focus_on_default_mop();\n\t}\n\n\tafter_render() {\n\t\tconst frm = this.events.get_frm();\n\t\tfrm.script_manager.trigger(\"after_payment_render\", frm.doc.doctype, frm.doc.docname);\n\t}\n\n\tedit_cart() {\n\t\tif(this.custom_edit_rate){\n\t\t\tconst div = document.getElementById(\"customer-cart-container2\");\n\t\t\tdiv.style.gridColumn = \"span 5 / span 5\";\n\t\t}\n\n\t\tthis.events.toggle_other_sections(false);\n\t\tthis.toggle_component(false);\n\t}\n\n\tcheckout() {\n\t\tthis.events.toggle_other_sections(true);\n\t\tthis.toggle_component(true);\n\n\t\tthis.render_payment_section();\n\t\tthis.after_render();\n\t}\n\n\ttoggle_remarks_control() {\n\t\tif (this.$remarks.find('.frappe-control').length) {\n\t\t\tthis.$remarks.html('+ Add Remark');\n\t\t} else {\n\t\t\tthis.$remarks.html('');\n\t\t\tthis[`remark_control`] = frappe.ui.form.make_control({\n\t\t\t\tdf: {\n\t\t\t\t\tlabel: __('Remark'),\n\t\t\t\t\tfieldtype: 'Data',\n\t\t\t\t\tonchange: function() {}\n\t\t\t\t},\n\t\t\t\tparent: this.$totals_section.find(`.remarks`),\n\t\t\t\trender_input: true,\n\t\t\t});\n\t\t\tthis[`remark_control`].set_value('');\n\t\t}\n\t}\n\n\trender_payment_mode_dom() {\n\t\tconst doc = this.events.get_frm().doc;\n\t\tconst payments = doc.payments;\n\t\tconst currency = doc.currency;\n\n\t\tthis.$payment_modes.html(`${\n\t\t\tpayments.map((p, i) => {\n\t\t\t\tconst mode = p.mode_of_payment.replace(/ +/g, \"_\").toLowerCase();\n\t\t\t\tconst payment_type = p.type;\n\t\t\t\tconst margin = i % 2 === 0 ? 'pr-2' : 'pl-2';\n\t\t\t\tconst amount = p.amount > 0 ? format_currency(p.amount, currency) : '';\n\n\t\t\t\treturn (`\n\t\t\t\t\t
\n\t\t\t\t\t\t
\n\t\t\t\t\t\t\t${p.mode_of_payment}\n\t\t\t\t\t\t\t
${amount}
\n\t\t\t\t\t\t\t
\n\t\t\t\t\t\t
\n\t\t\t\t\t
\n\t\t\t\t`);\n\t\t\t}).join('')\n\t\t}`);\n\t\tthis.current_payments = payments\n\t\tpayments.forEach(p => {\n\t\t\tconst mode = p.mode_of_payment.replace(/ +/g, \"_\").toLowerCase();\n\t\t\tconst me = this;\n\t\t\tthis[`${mode}_control`] = frappe.ui.form.make_control({\n\t\t\t\tdf: {\n\t\t\t\t\tlabel: p.mode_of_payment,\n\t\t\t\t\tfieldtype: 'Currency',\n\t\t\t\t\tplaceholder: __('Enter {0} amount.', [p.mode_of_payment]),\n\t\t\t\t\tonchange: function() {\n\t\t\t\t\t\tconsole.log(p.doctype)\n\t\t\t\t\t\tconsole.log(p.name)\n\t\t\t\t\t\tconst current_value = frappe.model.get_value(p.doctype, p.name, 'amount');\n\t\t\t\t\t\tif (current_value != this.value) {\n\t\t\t\t\t\t\tfrappe.model\n\t\t\t\t\t\t\t\t.set_value(p.doctype, p.name, 'amount', flt(this.value))\n\t\t\t\t\t\t\t\t.then(() => me.update_totals_section())\n\n\t\t\t\t\t\t\tconst formatted_currency = format_currency(this.value, currency);\n\t\t\t\t\t\t\tme.$payment_modes.find(`.${mode}-amount`).html(formatted_currency);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tparent: this.$payment_modes.find(`.${mode}.mode-of-payment-control`),\n\t\t\t\trender_input: true,\n\t\t\t});\n\t\t\tthis[`${mode}_control`].toggle_label(false);\n\t\t\tthis[`${mode}_control`].set_value(p.amount);\n\t\t});\n\n\t\tthis.render_loyalty_points_payment_mode();\n\n\t\tthis.attach_cash_shortcuts(doc);\n\t}\n\n\tfocus_on_default_mop() {\n\t\tconst doc = this.events.get_frm().doc;\n\t\tconst payments = doc.payments;\n\t\tpayments.forEach(p => {\n\t\t\tconst mode = p.mode_of_payment.replace(/ +/g, \"_\").toLowerCase();\n\t\t\tif (p.default) {\n\t\t\t\tsetTimeout(() => {\n\t\t\t\t\tthis.$payment_modes.find(`.${mode}.mode-of-payment-control`).parent().click();\n\t\t\t\t}, 500);\n\t\t\t}\n\t\t});\n\t}\n\n\tattach_cash_shortcuts(doc) {\n\t\tconst grand_total = cint(frappe.sys_defaults.disable_rounded_total) ? doc.grand_total : doc.rounded_total;\n\t\tconst currency = doc.currency;\n\n\t\tconst shortcuts = this.get_cash_shortcuts(flt(grand_total));\n\n\t\tthis.$payment_modes.find('.cash-shortcuts').remove();\n\t\tlet shortcuts_html = shortcuts.map(s => {\n\t\t\treturn `
${format_currency(s, currency, 0)}
`;\n\t\t}).join('');\n\n\t\tthis.$payment_modes.find('[data-payment-type=\"Cash\"]').find('.mode-of-payment-control')\n\t\t\t.after(`
${shortcuts_html}
`);\n\t}\n\n\tget_cash_shortcuts(grand_total) {\n\t\tlet steps = [1, 5, 10];\n\t\tconst digits = String(Math.round(grand_total)).length;\n\n\t\tsteps = steps.map(x => x * (10 ** (digits - 2)));\n\n\t\tconst get_nearest = (amount, x) => {\n\t\t\tlet nearest_x = Math.ceil((amount / x)) * x;\n\t\t\treturn nearest_x === amount ? nearest_x + x : nearest_x;\n\t\t};\n\n\t\treturn steps.reduce((finalArr, x) => {\n\t\t\tlet nearest_x = get_nearest(grand_total, x);\n\t\t\tnearest_x = finalArr.indexOf(nearest_x) != -1 ? nearest_x + x : nearest_x;\n\t\t\treturn [...finalArr, nearest_x];\n\t\t}, []);\n\t}\n\n\trender_loyalty_points_payment_mode() {\n\t\tconst me = this;\n\t\tconst doc = this.events.get_frm().doc;\n\t\tconst { loyalty_program, loyalty_points, conversion_factor } = this.events.get_customer_details();\n\n\t\tthis.$payment_modes.find(`.mode-of-payment[data-mode=\"loyalty-amount\"]`).parent().remove();\n\n\t\tif (!loyalty_program) return;\n\n\t\tlet description, read_only, max_redeemable_amount;\n\t\tif (!loyalty_points) {\n\t\t\tdescription = __(\"You don't have enough points to redeem.\");\n\t\t\tread_only = true;\n\t\t} else {\n\t\t\tmax_redeemable_amount = flt(flt(loyalty_points) * flt(conversion_factor), precision(\"loyalty_amount\", doc));\n\t\t\tdescription = __(\"You can redeem upto {0}.\", [format_currency(max_redeemable_amount)]);\n\t\t\tread_only = false;\n\t\t}\n\n\t\tconst margin = this.$payment_modes.children().length % 2 === 0 ? 'pr-2' : 'pl-2';\n\t\tconst amount = doc.loyalty_amount > 0 ? format_currency(doc.loyalty_amount, doc.currency) : '';\n\t\tthis.$payment_modes.append(\n\t\t\t`
\n\t\t\t\t
\n\t\t\t\t\tRedeem Loyalty Points\n\t\t\t\t\t
${amount}
\n\t\t\t\t\t
${loyalty_program}
\n\t\t\t\t\t
\n\t\t\t\t
\n\t\t\t
`\n\t\t);\n\n\t\tthis['loyalty-amount_control'] = frappe.ui.form.make_control({\n\t\t\tdf: {\n\t\t\t\tlabel: __(\"Redeem Loyalty Points\"),\n\t\t\t\tfieldtype: 'Currency',\n\t\t\t\tplaceholder: __(\"Enter amount to be redeemed.\"),\n\t\t\t\toptions: 'company:currency',\n\t\t\t\tread_only,\n\t\t\t\tonchange: async function() {\n\t\t\t\t\tif (!loyalty_points) return;\n\n\t\t\t\t\tif (this.value > max_redeemable_amount) {\n\t\t\t\t\t\tfrappe.show_alert({\n\t\t\t\t\t\t\tmessage: __(\"You cannot redeem more than {0}.\", [format_currency(max_redeemable_amount)]),\n\t\t\t\t\t\t\tindicator: \"red\"\n\t\t\t\t\t\t});\n\t\t\t\t\t\tfrappe.utils.play_sound(\"submit\");\n\t\t\t\t\t\tme['loyalty-amount_control'].set_value(0);\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\tconst redeem_loyalty_points = this.value > 0 ? 1 : 0;\n\t\t\t\t\tawait frappe.model.set_value(doc.doctype, doc.name, 'redeem_loyalty_points', redeem_loyalty_points);\n\t\t\t\t\tfrappe.model.set_value(doc.doctype, doc.name, 'loyalty_points', parseInt(this.value / conversion_factor));\n\t\t\t\t},\n\t\t\t\tdescription\n\t\t\t},\n\t\t\tparent: this.$payment_modes.find(`.loyalty-amount.mode-of-payment-control`),\n\t\t\trender_input: true,\n\t\t});\n\t\tthis['loyalty-amount_control'].toggle_label(false);\n\n\t\t// this.render_add_payment_method_dom();\n\t}\n\n\trender_add_payment_method_dom() {\n\t\tconst docstatus = this.events.get_frm().doc.docstatus;\n\t\tif (docstatus === 0)\n\t\t\tthis.$payment_modes.append(\n\t\t\t\t`
\n\t\t\t\t\t
+ Add Payment Method
\n\t\t\t\t
`\n\t\t\t);\n\t}\n\n\tupdate_totals_section(doc) {\n\t\tif (!doc) doc = this.events.get_frm().doc;\n\t\tlet branch_value = $('.input-with-feedback[data-fieldname=\"branch\"]').val();\n\t\tfrappe.model.set_value(cur_frm.doctype, cur_frm.docname, 'branch', branch_value);\n\t\tcur_frm.save()\n\t\t// doc.paid_amount = doc.grand_total\n\t\t\tconst paid_amount = doc.paid_amount;\n\n\t\tif(cur_frm.doc.custom_credit_sales){\n\t\t\tconst paid_amount = 0\n\t\t}\n\t\tconst grand_total = cint(frappe.sys_defaults.disable_rounded_total) ? doc.grand_total : doc.rounded_total;\n\t\tconst remaining = grand_total - doc.paid_amount;\n\t\tconst change = doc.change_amount || remaining <= 0 ? -1 * remaining : undefined;\n\t\tconst currency = doc.currency;\n\t\tconst label = change ? __('Change') : __('To Be Paid');\n\n\t\tthis.$totals.html(\n\t\t\t`
\n\t\t\t\t
${__('Grand Total')}
\n\t\t\t\t
${format_currency(grand_total, currency)}
\n\t\t\t
\n\t\t\t
\n\t\t\t
\n\t\t\t\t
${__('Paid Amount')}
\n\t\t\t\t
${format_currency(paid_amount, currency)}
\n\t\t\t
\n\t\t\t
\n\t\t\t
\n\t\t\t\t
${label}
\n\t\t\t\t
${format_currency(change || remaining, currency)}
\n\t\t\t
`\n\t\t);\n\t}\n\n\ttoggle_component(show) {\n\t\tshow ? this.$component.css('display', 'flex') : this.$component.css('display', 'none');\n\t}\n};\n", "frappe.provide('posnext.PointOfSale');\nvar invoicess = []\nposnext.PointOfSale.PastOrderList = class {\n\tconstructor({ wrapper, events, settings }) {\n\t\tthis.wrapper = wrapper;\n\t\tthis.events = events;\n\t\tthis.pos_profile = settings.name\n\t\tthis.custom_filter_order_list_by_profile = settings.custom_filter_order_list_by_profile\n\t\tthis.init_component();\n\t}\n\n\tinit_component() {\n\t\tthis.prepare_dom();\n\t\tthis.make_filter_section();\n\t\tthis.bind_events();\n\t}\n\n\tprepare_dom() {\n\t\tthis.wrapper.append(\n\t\t\t`
\n\t\t\t\t
\n\t\t\t\t\t\n\t\t\t\t\t
\n\t\t\t\t\t
${__('Recent Orders')}
\n\t\t\t\t\t
\n\t\t\t\t\t
\n\t\t\t\t
\n\t\t\t\t
\n\t\t\t
`\n\t\t);\n\n\t\tthis.$component = this.wrapper.find('.past-order-list');\n\t\tthis.$invoices_container = this.$component.find('.invoices-container');\n\n\t}\n\n\tbind_events() {\n\t\tthis.search_field.$input.on('input', (e) => {\n\t\t\tclearTimeout(this.last_search);\n\t\t\tthis.last_search = setTimeout(() => {\n\t\t\t\tconst search_term = e.target.value;\n\t\t\t\tthis.refresh_list(search_term, this.status_field.get_value());\n\t\t\t}, 300);\n\t\t});\n\t\tconst me = this;\n\t\tthis.$invoices_container.on('click', '.invoice-wrapper', function() {\n\t\t\tconst invoice_name = unescape($(this).attr('data-invoice-name'));\n\t\t\tme.events.open_invoice_data(invoice_name);\n\t\t});\n\t\tthis.$component.on('click', '.back', function() {\n\t\t\tme.events.previous_screen()\n\t\t});\n\t}\n\n\tmake_filter_section() {\n\t\tconst me = this;\n\t\tthis.search_field = frappe.ui.form.make_control({\n\t\t\tdf: {\n\t\t\t\tlabel: __('Search'),\n\t\t\t\tfieldtype: 'Data',\n\t\t\t\tplaceholder: __('Search by invoice id or customer name')\n\t\t\t},\n\t\t\tparent: this.$component.find('.search-field'),\n\t\t\trender_input: true,\n\t\t});\n\t\tthis.status_field = frappe.ui.form.make_control({\n\t\t\tdf: {\n\t\t\t\tlabel: __('Invoice Status'),\n\t\t\t\tfieldtype: 'Select',\n\t\t\t\toptions: `Draft\\nPaid\\nUnpaid\\nReturn`,\n\t\t\t\tplaceholder: __('Filter by invoice status'),\n\t\t\t\tonchange: function() {\n\t\t\t\t\tif (me.$component.is(':visible')) me.refresh_list();\n\t\t\t\t}\n\t\t\t},\n\t\t\tparent: this.$component.find('.status-field'),\n\t\t\trender_input: true,\n\t\t});\n\t\tthis.search_field.toggle_label(false);\n\t\tthis.status_field.toggle_label(false);\n\t\tthis.status_field.set_value('Draft');\n\t}\n\n\trefresh_list() {\n\t\tfrappe.dom.freeze();\n\t\tthis.events.reset_summary();\n\t\tconst search_term = this.search_field.get_value();\n\t\tconst status = this.status_field.get_value();\n\t\tconst pos_profile = this.pos_profile;\n\t\tthis.$invoices_container.html('');\n\t\tlet filter = { search_term, status };\n\t\tif(this.custom_filter_order_list_by_profile){\n\t\t\tfilter = { search_term, status, pos_profile }\n\t\t}\n\t\t\n\t\treturn frappe.call({\n\t\t\tmethod: \"posnext.posnext.page.posnext.point_of_sale.get_past_order_list\",\n\t\t\tfreeze: true,\n\t\t\targs: filter,\n\t\t\tcallback: (response) => {\n\t\t\t\tfrappe.dom.unfreeze();\n\t\t\t\tinvoicess = response.message\n\t\t\t\tresponse.message.forEach(invoice => {\n\t\t\t\t\tconst invoice_html = this.get_invoice_html(invoice);\n\t\t\t\t\tthis.$invoices_container.append(invoice_html);\n\t\t\t\t});\n\t\t\t}\n\t\t});\n\n\t}\n\n\tget_invoice_html(invoice) {\n\t\tconst posting_datetime = moment(invoice.posting_date+\" \"+invoice.posting_time).format(\"Do MMMM, h:mma\");\n\t\treturn (\n\t\t\t`
\n\t\t\t\t
\n\t\t\t\t\t
${invoice.name}
\n\t\t\t\t\t
\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t${frappe.ellipsis(invoice.customer, 20)}\n\t\t\t\t\t
\n\t\t\t\t
\n\t\t\t\t
\n\t\t\t\t\t
${format_currency(invoice.grand_total, invoice.currency, 0) || 0}
\n\t\t\t\t\t
${posting_datetime}
\n\t\t\t\t
\n\t\t\t
\n\t\t\t
`\n\t\t);\n\t}\n\n\ttoggle_component(show) {\n\t\tfrappe.run_serially([\n\t\t\t() => show ? this.$component.css('display', 'flex') && this.refresh_list() : this.$component.css('display', 'none'),\n\t\t\t() => this.events.open_invoice_data(invoicess[0].name)\n\t\t])\n\n\n\n\t}\n};\n", "frappe.provide('posnext.PointOfSale');\nposnext.PointOfSale.PastOrderSummary = class {\n\tconstructor({ wrapper, pos_profile,events }) {\n\t\tthis.wrapper = wrapper;\n\t\tthis.pos_profile = pos_profile;\n\t\tthis.events = events;\n\n\t\tthis.init_component();\n\t}\n\n\tinit_component() {\n\t\tthis.prepare_dom();\n\t\tthis.init_email_print_dialog();\n\t\tthis.bind_events();\n\t\tthis.attach_shortcuts();\n\t}\n\n\tprepare_dom() {\n\t\tthis.wrapper.append(\n\t\t\t`
\n\t\t\t\t
\n\t\t\t\t\t${__('Select an invoice to load summary data')}\n\t\t\t\t
\n\t\t\t\t
\n\t\t\t\t\t
\n\t\t\t\t\t\t
\n\t\t\t\t\t\t
${__('Items')}
\n\t\t\t\t\t\t
\n\t\t\t\t\t\t
${__('Totals')}
\n\t\t\t\t\t\t
\n\t\t\t\t\t\t
${__('Payments')}
\n\t\t\t\t\t\t
\n\t\t\t\t\t\t
\n\t\t\t\t\t
\n\t\t\t\t
\n\t\t\t
`\n\t\t);\n\n\t\tthis.$component = this.wrapper.find('.past-order-summary');\n\t\tthis.$summary_wrapper = this.$component.find('.invoice-summary-wrapper');\n\t\tthis.$summary_container = this.$component.find('.abs-container');\n\t\tthis.$upper_section = this.$summary_container.find('.upper-section');\n\t\tthis.$items_container = this.$summary_container.find('.items-container');\n\t\tthis.$totals_container = this.$summary_container.find('.totals-container');\n\t\tthis.$payment_container = this.$summary_container.find('.payments-container');\n\t\tthis.$summary_btns = this.$summary_container.find('.summary-btns');\n\t}\n\n\tinit_email_print_dialog() {\n\t\tconst email_dialog = new frappe.ui.Dialog({\n\t\t\ttitle: 'Email Receipt',\n\t\t\tfields: [\n\t\t\t\t{fieldname: 'email_id', fieldtype: 'Data', options: 'Email', label: 'Email ID', reqd: 1},\n\t\t\t\t{fieldname:'content', fieldtype:'Small Text', label:'Message (if any)'}\n\t\t\t],\n\t\t\tprimary_action: () => {\n\t\t\t\tthis.send_email();\n\t\t\t},\n\t\t\tprimary_action_label: __('Send'),\n\t\t});\n\t\tthis.email_dialog = email_dialog;\n\n\t\tconst print_dialog = new frappe.ui.Dialog({\n\t\t\ttitle: 'Print Receipt',\n\t\t\tfields: [\n\t\t\t\t{fieldname: 'print', fieldtype: 'Data', label: 'Print Preview'}\n\t\t\t],\n\t\t\tprimary_action: () => {\n\t\t\t\tthis.print_receipt();\n\t\t\t},\n\t\t\tprimary_action_label: __('Print'),\n\t\t});\n\t\tthis.print_dialog = print_dialog;\n\t}\n\n\tget_upper_section_html(doc) {\n\t\tconst { status } = doc;\n\t\tlet indicator_color = '';\n\n\t\tin_list(['Paid', 'Consolidated'], status) && (indicator_color = 'green');\n\t\tstatus === 'Draft' && (indicator_color = 'red');\n\t\tstatus === 'Return' && (indicator_color = 'grey');\n\n\t\treturn `
\n\t\t\t\t\t
${doc.customer}
\n\t\t\t\t\t
${this.customer_email}
\n\t\t\t\t\t
${__('Sold by')}: ${doc.owner}
\n\t\t\t\t
\n\t\t\t\t
\n\t\t\t\t\t
${format_currency(doc.paid_amount, doc.currency)}
\n\t\t\t\t\t
${doc.name}
\n\t\t\t\t\t${doc.status}\n\t\t\t\t
`;\n\t}\n\n\tget_item_html(doc, item_data) {\n\t\treturn `
\n\t\t\t\t\t
${item_data.item_name}
\n\t\t\t\t\t
${item_data.qty || 0} ${item_data.uom}
\n\t\t\t\t\t
${get_rate_discount_html()}
\n\t\t\t\t
`;\n\n\t\tfunction get_rate_discount_html() {\n\t\t\tif (item_data.rate && item_data.price_list_rate && item_data.rate !== item_data.price_list_rate) {\n\t\t\t\treturn `(${item_data.discount_percentage}% off)\n\t\t\t\t\t\t
${format_currency(item_data.rate, doc.currency)}
`;\n\t\t\t} else {\n\t\t\t\treturn `
${format_currency(item_data.price_list_rate || item_data.rate, doc.currency)}
`;\n\t\t\t}\n\t\t}\n\t}\n\n\tget_discount_html(doc) {\n\t\tif (doc.discount_amount) {\n\t\t\treturn `
\n\t\t\t\t\t\t
Discount (${doc.additional_discount_percentage} %)
\n\t\t\t\t\t\t
${format_currency(doc.discount_amount, doc.currency)}
\n\t\t\t\t\t
`;\n\t\t} else {\n\t\t\treturn ``;\n\t\t}\n\t}\n\n\tget_net_total_html(doc) {\n\t\treturn `
\n\t\t\t\t\t
${__('Net Total')}
\n\t\t\t\t\t
${format_currency(doc.net_total, doc.currency)}
\n\t\t\t\t
`;\n\t}\n\n\tget_taxes_html(doc) {\n\t\tif (!doc.taxes.length) return '';\n\n\t\tlet taxes_html = doc.taxes.map(t => {\n\t\t\t// if tax rate is 0, don't print it.\n\t\t\tconst description = /[0-9]+/.test(t.description) ? t.description : ((t.rate != 0) ? `${t.description} @ ${t.rate}%`: t.description);\n\t\t\treturn `\n\t\t\t\t
\n\t\t\t\t\t
${description}
\n\t\t\t\t\t
${format_currency(t.tax_amount_after_discount_amount, doc.currency)}
\n\t\t\t\t
\n\t\t\t`;\n\t\t}).join('');\n\n\t\treturn `
${taxes_html}
`;\n\t}\n\n\tget_grand_total_html(doc) {\n\t\treturn `
\n\t\t\t\t\t
${__('Grand Total')}
\n\t\t\t\t\t
${format_currency(doc.grand_total, doc.currency)}
\n\t\t\t\t
`;\n\t}\n\n\tget_payment_html(doc, payment) {\n\t\treturn `
\n\t\t\t\t\t
${__(payment.mode_of_payment)}
\n\t\t\t\t\t
${format_currency(payment.amount, doc.currency)}
\n\t\t\t\t
`;\n\t}\n\n\tbind_events() {\n\t\tthis.$summary_container.on('click', '.return-btn', () => {\n\t\t\tthis.events.process_return(this.doc.name);\n\t\t\tthis.toggle_component(false);\n\t\t\tthis.$component.find('.no-summary-placeholder').css('display', 'flex');\n\t\t\tthis.$summary_wrapper.css('display', 'none');\n\t\t});\n\n\t\tthis.$summary_container.on('click', '.edit-btn', () => {\n\t\t\tthis.events.edit_order(this.doc.name);\n\t\t\tthis.toggle_component(false);\n\t\t\tthis.$component.find('.no-summary-placeholder').css('display', 'flex');\n\t\t\tthis.$summary_wrapper.css('display', 'none');\n\t\t});\n\n\t\tthis.$summary_container.on('click', '.delete-btn', () => {\n\t\t\tthis.events.delete_order(this.doc.name);\n\t\t\tthis.show_summary_placeholder();\n\t\t});\n\n\t\tthis.$summary_container.on('click', '.send-btn', () => {\n\t\t\t// this.events.delete_order(this.doc.name);\n\t\t\t// this.show_summary_placeholder();\n\t\tconsole.log(this.pos_profile)\n\t\tvar field_names = this.pos_profile.custom_whatsapp_field_names.map(x => this.doc[x.field_names.toString()]);\n\t\t\tconsole.log(field_names)\n\t\t\tconsole.log(field_names.join(\",\"))\n\t\t\tvar message = \"https://wa.me/\" + this.doc.customer +\"?text=\"\n\t\t\tmessage += formatString(this.pos_profile.custom_whatsapp_message, field_names);\n\t\t\tconsole.log(message)\n\t\t\t// message += \"Hello, here is the file you requested.\"\n\t\t\tfrappe.call({\n\t\t\t\tmethod: \"posnext.posnext.page.posnext.point_of_sale.generate_pdf_and_save\",\n\t\t\t\targs: {\n\t\t\t\t\tdocname: this.doc.name,\n\t\t\t\t\tdoctype: this.doc.doctype,\n\t\t\t\t\tprint_format: this.pos_profile.print_format\n\t\t\t\t},\n\t\t\t\tfreeze: true,\n\t\t\t\tfreeze_message: \"Creating file then send to whatsapp thru link....\",\n\t\t\t\tcallback: function (r) {\n\t\t\t\t\tmessage += \"Please Find your invoice here \\n \"+window.origin+r.message.file_url\n\t\t\t\t\twindow.open(message)\n }\n\t\t\t})\n\t\t\t// this.toggle_component(false);\n\t\t\t// this.$component.find('.no-summary-placeholder').removeClass('d-none');\n\t\t\t// this.$summary_wrapper.addClass('d-none');\n\t\t});\n\t\tfunction formatString(str, args) {\n\t\t\treturn str.replace(/{(\\d+)}/g, function(match, number) {\n\t\t\t\treturn typeof args[number] !== 'undefined'\n\t\t\t\t\t? args[number]\n\t\t\t\t\t: match;\n\t\t\t});\n\t\t}\n\n\t\tthis.$summary_container.on('click', '.new-btn', () => {\n\t\t\tthis.events.new_order();\n\t\t\tthis.toggle_component(false);\n\t\t\tthis.$component.find('.no-summary-placeholder').css('display', 'flex');\n\t\t\tthis.$summary_wrapper.css('display', 'none');\n\t\t});\n\n\t\tthis.$summary_container.on('click', '.email-btn', () => {\n\t\t\tthis.email_dialog.fields_dict.email_id.set_value(this.customer_email);\n\t\t\tthis.email_dialog.show();\n\t\t});\n\n\t\tthis.$summary_container.on('click', '.print-btn', () => {\n\t\t\tthis.print_receipt();\n\t\t});\n\t}\n\n\tprint_receipt() {\n\t\tconst frm = this.events.get_frm();\n\t\tfrappe.utils.print(\n\t\t\tthis.doc.doctype,\n\t\t\tthis.doc.name,\n\t\t\tfrm.pos_print_format,\n\t\t\tthis.doc.letter_head,\n\t\t\tthis.doc.language || frappe.boot.lang\n\t\t);\n\t}\n\n\tattach_shortcuts() {\n\t\tconst ctrl_label = frappe.utils.is_mac() ? '\u2318' : 'Ctrl';\n\t\tthis.$summary_container.find('.print-btn').attr(\"title\", `${ctrl_label}+P`);\n\t\tfrappe.ui.keys.add_shortcut({\n\t\t\tshortcut: \"ctrl+p\",\n\t\t\taction: () => this.$summary_container.find('.print-btn').click(),\n\t\t\tcondition: () => this.$component.is(':visible') && this.$summary_container.find('.print-btn').is(\":visible\"),\n\t\t\tdescription: __(\"Print Receipt\"),\n\t\t\tpage: cur_page.page.page\n\t\t});\n\t\tthis.$summary_container.find('.new-btn').attr(\"title\", `${ctrl_label}+Enter`);\n\t\tfrappe.ui.keys.on(\"ctrl+enter\", () => {\n\t\t\tconst summary_is_visible = this.$component.is(\":visible\");\n\t\t\tif (summary_is_visible && this.$summary_container.find('.new-btn').is(\":visible\")) {\n\t\t\t\tthis.$summary_container.find('.new-btn').click();\n\t\t\t}\n\t\t});\n\t\tthis.$summary_container.find('.edit-btn').attr(\"title\", `${ctrl_label}+E`);\n\t\tfrappe.ui.keys.add_shortcut({\n\t\t\tshortcut: \"ctrl+e\",\n\t\t\taction: () => this.$summary_container.find('.edit-btn').click(),\n\t\t\tcondition: () => this.$component.is(':visible') && this.$summary_container.find('.edit-btn').is(\":visible\"),\n\t\t\tdescription: __(\"Edit Receipt\"),\n\t\t\tpage: cur_page.page.page\n\t\t});\n\t}\n\n\tsend_email() {\n\t\tconst frm = this.events.get_frm();\n\t\tconst recipients = this.email_dialog.get_values().email_id;\n\t\tconst content = this.email_dialog.get_values().content;\n\t\tconst doc = this.doc || frm.doc;\n\t\tconst print_format = frm.pos_print_format;\n\n\t\tfrappe.call({\n\t\t\tmethod: \"frappe.core.doctype.communication.email.make\",\n\t\t\targs: {\n\t\t\t\trecipients: recipients,\n\t\t\t\tsubject: __(frm.meta.name) + ': ' + doc.name,\n\t\t\t\tcontent: content ? content : __(frm.meta.name) + ': ' + doc.name,\n\t\t\t\tdoctype: doc.doctype,\n\t\t\t\tname: doc.name,\n\t\t\t\tsend_email: 1,\n\t\t\t\tprint_format,\n\t\t\t\tsender_full_name: frappe.user.full_name(),\n\t\t\t\t_lang: doc.language\n\t\t\t},\n\t\t\tcallback: r => {\n\t\t\t\tif (!r.exc) {\n\t\t\t\t\tfrappe.utils.play_sound(\"email\");\n\t\t\t\t\tif (r.message[\"emails_not_sent_to\"]) {\n\t\t\t\t\t\tfrappe.msgprint(__(\n\t\t\t\t\t\t\t\"Email not sent to {0} (unsubscribed / disabled)\",\n\t\t\t\t\t\t\t[ frappe.utils.escape_html(r.message[\"emails_not_sent_to\"]) ]\n\t\t\t\t\t\t));\n\t\t\t\t\t} else {\n\t\t\t\t\t\tfrappe.show_alert({\n\t\t\t\t\t\t\tmessage: __('Email sent successfully.'),\n\t\t\t\t\t\t\tindicator: 'green'\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t\tthis.email_dialog.hide();\n\t\t\t\t} else {\n\t\t\t\t\tfrappe.msgprint(__(\"There were errors while sending email. Please try again.\"));\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t}\n\n\tadd_summary_btns(map) {\n\t\tthis.$summary_btns.html('');\n\t\tmap.forEach(m => {\n\t\t\tif (m.condition) {\n\t\t\t\tm.visible_btns.forEach(b => {\n\t\t\t\t\tconst class_name = b.split(' ')[0].toLowerCase();\n\t\t\t\t\tconst btn = __(b);\n\t\t\t\t\tthis.$summary_btns.append(\n\t\t\t\t\t\t`
${btn}
`\n\t\t\t\t\t);\n\t\t\t\t});\n\t\t\t}\n\t\t});\n\t\tthis.$summary_btns.children().last().removeClass('mr-4');\n\t}\n\n\ttoggle_summary_placeholder(show) {\n\t\tif (show) {\n\t\t\tthis.$summary_wrapper.css('display', 'none');\n\t\t\tthis.$component.find('.no-summary-placeholder').css('display', 'flex');\n\t\t} else {\n\t\t\tthis.$summary_wrapper.css('display', 'flex');\n\t\t\tthis.$component.find('.no-summary-placeholder').css('display', 'none');\n\t\t}\n\t}\n\n\tget_condition_btn_map(after_submission) {\n\t\tif (after_submission)\n\t\t\treturn [{ condition: true, visible_btns: ['Print Receipt', 'Email Receipt','Send Whatsapp', 'New Order'] }];\n\n\t\treturn [\n\t\t\t{ condition: this.doc.docstatus === 0, visible_btns: ['Print Receipt','Edit Order', 'Delete Order','Send Whatsapp'] },\n\t\t\t{ condition: !this.doc.is_return && this.doc.docstatus === 1, visible_btns: ['Print Receipt', 'Email Receipt', 'Return','Send Whatsapp']},\n\t\t\t{ condition: this.doc.is_return && this.doc.docstatus === 1, visible_btns: ['Print Receipt', 'Email Receipt','Send Whatsapp']}\n\t\t];\n\t}\n\n\tload_summary_of(doc, after_submission=false) {\n\t\tafter_submission ?\n\t\t\tthis.$component.css('grid-column', 'span 10 / span 10') :\n\t\t\tthis.$component.css('grid-column', 'span 6 / span 6');\n\n\t\tthis.toggle_summary_placeholder(false);\n\n\t\tthis.doc = doc;\n\n\t\tthis.attach_document_info(doc);\n\n\t\tthis.attach_items_info(doc);\n\n\t\tthis.attach_totals_info(doc);\n\n\t\tthis.attach_payments_info(doc);\n\n\t\tconst condition_btns_map = this.get_condition_btn_map(after_submission);\n\n\t\tthis.add_summary_btns(condition_btns_map);\n\t\tthis.$summary_wrapper.css(\"width\",after_submission ? \"35%\" : \"60%\");\n\n\t\tif (after_submission) {\n\t\t\tthis.print_receipt_on_order_complete();\n\t\t}\n\t}\n\n\tattach_document_info(doc) {\n\t\tfrappe.db.get_value('Customer', this.doc.customer, 'email_id').then(({ message }) => {\n\t\t\tthis.customer_email = message.email_id || '';\n\t\t\tconst upper_section_dom = this.get_upper_section_html(doc);\n\t\t\tthis.$upper_section.html(upper_section_dom);\n\t\t});\n\t}\n\n\tattach_items_info(doc) {\n\t\tthis.$items_container.html('');\n\t\tdoc.items.forEach(item => {\n\t\t\tconst item_dom = this.get_item_html(doc, item);\n\t\t\tthis.$items_container.append(item_dom);\n\t\t\tthis.set_dynamic_rate_header_width();\n\t\t});\n\t}\n\n\tset_dynamic_rate_header_width() {\n\t\tconst rate_cols = Array.from(this.$items_container.find(\".item-rate-disc\"));\n\t\tthis.$items_container.find(\".item-rate-disc\").css(\"width\", \"\");\n\t\tlet max_width = rate_cols.reduce((max_width, elm) => {\n\t\t\tif ($(elm).width() > max_width)\n\t\t\t\tmax_width = $(elm).width();\n\t\t\treturn max_width;\n\t\t}, 0);\n\n\t\tmax_width += 1;\n\t\tif (max_width == 1) max_width = \"\";\n\n\t\tthis.$items_container.find(\".item-rate-disc\").css(\"width\", max_width);\n\t}\n\n\tattach_payments_info(doc) {\n\t\tthis.$payment_container.html('');\n\t\tdoc.payments.forEach(p => {\n\t\t\tif (p.amount) {\n\t\t\t\tconst payment_dom = this.get_payment_html(doc, p);\n\t\t\t\tthis.$payment_container.append(payment_dom);\n\t\t\t}\n\t\t});\n\t\tif (doc.redeem_loyalty_points && doc.loyalty_amount) {\n\t\t\tconst payment_dom = this.get_payment_html(doc, {\n\t\t\t\tmode_of_payment: 'Loyalty Points',\n\t\t\t\tamount: doc.loyalty_amount,\n\t\t\t});\n\t\t\tthis.$payment_container.append(payment_dom);\n\t\t}\n\t}\n\n\tattach_totals_info(doc) {\n\t\tthis.$totals_container.html('');\n\n\t\tconst net_total_dom = this.get_net_total_html(doc);\n\t\tconst taxes_dom = this.get_taxes_html(doc);\n\t\tconst discount_dom = this.get_discount_html(doc);\n\t\tconst grand_total_dom = this.get_grand_total_html(doc);\n\t\tthis.$totals_container.append(net_total_dom);\n\t\tthis.$totals_container.append(taxes_dom);\n\t\tthis.$totals_container.append(discount_dom);\n\t\tthis.$totals_container.append(grand_total_dom);\n\t}\n\n\ttoggle_component(show) {\n\t\tshow ? this.$component.css('display', 'flex') : this.$component.css('display', 'none');\n\n\t}\n\n\tasync print_receipt_on_order_complete() {\n \n const profile_name = this.pos_profile?.name || this.pos_profile;\n\n const { message } = await frappe.db.get_value(\n \"POS Profile\",\n profile_name,\n [\"print_receipt_on_order_complete\", \"print_format\"]\n );\n\n if (message?.print_receipt_on_order_complete) {\n setTimeout(() => this.print_receipt(), 300);\n }\n \n}\n\n\t\n};\n"], - "mappings": "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", - "names": ["i", "get_item_code_header", "max_width", "precision", "doc", "max_width", "frm", "item", "$btn", "paid_amount", "max_width"] -} diff --git a/posnext/www/__init__.py b/posnext/www/__init__.py deleted file mode 100644 index e69de29..0000000 diff --git a/posnext/www/test.html b/posnext/www/test.html deleted file mode 100644 index d65bba5..0000000 --- a/posnext/www/test.html +++ /dev/null @@ -1,15 +0,0 @@ - - - - - - WhatsApp Redirect - - - - Send Message on WhatsApp - - - \ No newline at end of file diff --git a/yarn.lock b/yarn.lock index fa1b1d6..22d8db8 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2,7 +2,3162 @@ # yarn lockfile v1 -onscan.js@^1.5.2: - version "1.5.2" - resolved "https://registry.yarnpkg.com/onscan.js/-/onscan.js-1.5.2.tgz#14ed636e5f4c3f0a78bacbf9a505dad3140ee341" - integrity sha512-9oGYy2gXYRjvXO9GYqqVca0VuCTAmWhbmX3egBSBP13rXiMNb+dKPJzKFEeECGqPBpf0m40Zoo+GUQ7eCackdw== +"@4tw/cypress-drag-drop@^2.2.5": + version "2.3.1" + resolved "https://registry.yarnpkg.com/@4tw/cypress-drag-drop/-/cypress-drag-drop-2.3.1.tgz#44488852bb02ecc7e43423f0ecc0f11c3141552f" + integrity sha512-ht9Mx0eK+j4UO7fZvHNyCGOQEIj4d5+CZDYdxUCHGL4yvEhdDBH6PT4Lt12Ct+O+8qK8K1K31p7iiOghA8ewxQ== + +"@babel/code-frame@^7.10.4", "@babel/code-frame@^7.27.1": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.27.1.tgz#200f715e66d52a23b221a9435534a91cc13ad5be" + integrity sha512-cjQ7ZlQ0Mv3b47hABuTevyTuYN4i+loJKGeV9flcCgIK37cCXRh+L1bd3iBHlynerhQ7BhCkn2BPbQUL+rGqFg== + dependencies: + "@babel/helper-validator-identifier" "^7.27.1" + js-tokens "^4.0.0" + picocolors "^1.1.1" + +"@babel/compat-data@^7.27.2": + version "7.28.5" + resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.28.5.tgz#a8a4962e1567121ac0b3b487f52107443b455c7f" + integrity sha512-6uFXyCayocRbqhZOB+6XcuZbkMNimwfVGFji8CTZnCzOHVGvDqzvitu1re2AU5LROliz7eQPhB8CpAMvnx9EjA== + +"@babel/core@^7.7.5": + version "7.28.5" + resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.28.5.tgz#4c81b35e51e1b734f510c99b07dfbc7bbbb48f7e" + integrity sha512-e7jT4DxYvIDLk1ZHmU/m/mB19rex9sv0c2ftBtjSBv+kVM/902eh0fINUzD7UwLLNR+jU585GxUJ8/EBfAM5fw== + dependencies: + "@babel/code-frame" "^7.27.1" + "@babel/generator" "^7.28.5" + "@babel/helper-compilation-targets" "^7.27.2" + "@babel/helper-module-transforms" "^7.28.3" + "@babel/helpers" "^7.28.4" + "@babel/parser" "^7.28.5" + "@babel/template" "^7.27.2" + "@babel/traverse" "^7.28.5" + "@babel/types" "^7.28.5" + "@jridgewell/remapping" "^2.3.5" + convert-source-map "^2.0.0" + debug "^4.1.0" + gensync "^1.0.0-beta.2" + json5 "^2.2.3" + semver "^6.3.1" + +"@babel/generator@^7.28.5": + version "7.28.5" + resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.28.5.tgz#712722d5e50f44d07bc7ac9fe84438742dd61298" + integrity sha512-3EwLFhZ38J4VyIP6WNtt2kUdW9dokXA9Cr4IVIFHuCpZ3H8/YFOl5JjZHisrn1fATPBmKKqXzDFvh9fUwHz6CQ== + dependencies: + "@babel/parser" "^7.28.5" + "@babel/types" "^7.28.5" + "@jridgewell/gen-mapping" "^0.3.12" + "@jridgewell/trace-mapping" "^0.3.28" + jsesc "^3.0.2" + +"@babel/helper-compilation-targets@^7.27.2": + version "7.27.2" + resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.27.2.tgz#46a0f6efab808d51d29ce96858dd10ce8732733d" + integrity sha512-2+1thGUUWWjLTYTHZWK1n8Yga0ijBz1XAhUXcKy81rd5g6yh7hGqMp45v7cadSbEHc9G3OTv45SyneRN3ps4DQ== + dependencies: + "@babel/compat-data" "^7.27.2" + "@babel/helper-validator-option" "^7.27.1" + browserslist "^4.24.0" + lru-cache "^5.1.1" + semver "^6.3.1" + +"@babel/helper-globals@^7.28.0": + version "7.28.0" + resolved "https://registry.yarnpkg.com/@babel/helper-globals/-/helper-globals-7.28.0.tgz#b9430df2aa4e17bc28665eadeae8aa1d985e6674" + integrity sha512-+W6cISkXFa1jXsDEdYA8HeevQT/FULhxzR99pxphltZcVaugps53THCeiWA8SguxxpSp3gKPiuYfSWopkLQ4hw== + +"@babel/helper-module-imports@^7.27.1": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.27.1.tgz#7ef769a323e2655e126673bb6d2d6913bbead204" + integrity sha512-0gSFWUPNXNopqtIPQvlD5WgXYI5GY2kP2cCvoT8kczjbfcfuIljTbcWrulD1CIPIX2gt1wghbDy08yE1p+/r3w== + dependencies: + "@babel/traverse" "^7.27.1" + "@babel/types" "^7.27.1" + +"@babel/helper-module-transforms@^7.28.3": + version "7.28.3" + resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.28.3.tgz#a2b37d3da3b2344fe085dab234426f2b9a2fa5f6" + integrity sha512-gytXUbs8k2sXS9PnQptz5o0QnpLL51SwASIORY6XaBKF88nsOT0Zw9szLqlSGQDP/4TljBAD5y98p2U1fqkdsw== + dependencies: + "@babel/helper-module-imports" "^7.27.1" + "@babel/helper-validator-identifier" "^7.27.1" + "@babel/traverse" "^7.28.3" + +"@babel/helper-string-parser@^7.27.1": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/helper-string-parser/-/helper-string-parser-7.27.1.tgz#54da796097ab19ce67ed9f88b47bb2ec49367687" + integrity sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA== + +"@babel/helper-validator-identifier@^7.27.1", "@babel/helper-validator-identifier@^7.28.5": + version "7.28.5" + resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.28.5.tgz#010b6938fab7cb7df74aa2bbc06aa503b8fe5fb4" + integrity sha512-qSs4ifwzKJSV39ucNjsvc6WVHs6b7S03sOh2OcHF9UHfVPqWWALUsNUVzhSBiItjRZoLHx7nIarVjqKVusUZ1Q== + +"@babel/helper-validator-option@^7.27.1": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/helper-validator-option/-/helper-validator-option-7.27.1.tgz#fa52f5b1e7db1ab049445b421c4471303897702f" + integrity sha512-YvjJow9FxbhFFKDSuFnVCe2WxXk1zWc22fFePVNEaWJEu8IrZVlda6N0uHwzZrUM1il7NC9Mlp4MaJYbYd9JSg== + +"@babel/helpers@^7.28.4": + version "7.28.4" + resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.28.4.tgz#fe07274742e95bdf7cf1443593eeb8926ab63827" + integrity sha512-HFN59MmQXGHVyYadKLVumYsA9dBFun/ldYxipEjzA4196jpLZd8UjEEBLkbEkvfYreDqJhZxYAWFPtrfhNpj4w== + dependencies: + "@babel/template" "^7.27.2" + "@babel/types" "^7.28.4" + +"@babel/parser@^7.27.2", "@babel/parser@^7.28.5": + version "7.28.5" + resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.28.5.tgz#0b0225ee90362f030efd644e8034c99468893b08" + integrity sha512-KKBU1VGYR7ORr3At5HAtUQ+TV3SzRCXmA/8OdDZiLDBIZxVyzXuztPjfLd3BV1PRAQGCMWWSHYhL0F8d5uHBDQ== + dependencies: + "@babel/types" "^7.28.5" + +"@babel/runtime@^7.12.5", "@babel/runtime@^7.14.6": + version "7.28.4" + resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.28.4.tgz#a70226016fabe25c5783b2f22d3e1c9bc5ca3326" + integrity sha512-Q/N6JNWvIvPnLDvjlE1OUBLPQHH6l3CltCEsHIujp45zQUSSh8K+gHnaEX45yAT1nyngnINhvWtzN+Nb9D8RAQ== + +"@babel/template@^7.27.2": + version "7.27.2" + resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.27.2.tgz#fa78ceed3c4e7b63ebf6cb39e5852fca45f6809d" + integrity sha512-LPDZ85aEJyYSd18/DkjNh4/y1ntkE5KwUHWTiqgRxruuZL2F1yuHligVHLvcHY2vMHXttKFpJn6LwfI7cw7ODw== + dependencies: + "@babel/code-frame" "^7.27.1" + "@babel/parser" "^7.27.2" + "@babel/types" "^7.27.1" + +"@babel/traverse@^7.27.1", "@babel/traverse@^7.28.3", "@babel/traverse@^7.28.5": + version "7.28.5" + resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.28.5.tgz#450cab9135d21a7a2ca9d2d35aa05c20e68c360b" + integrity sha512-TCCj4t55U90khlYkVV/0TfkJkAkUg3jZFA3Neb7unZT8CPok7iiRfaX0F+WnqWqt7OxhOn0uBKXCw4lbL8W0aQ== + dependencies: + "@babel/code-frame" "^7.27.1" + "@babel/generator" "^7.28.5" + "@babel/helper-globals" "^7.28.0" + "@babel/parser" "^7.28.5" + "@babel/template" "^7.27.2" + "@babel/types" "^7.28.5" + debug "^4.3.1" + +"@babel/types@^7.27.1", "@babel/types@^7.28.4", "@babel/types@^7.28.5": + version "7.28.5" + resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.28.5.tgz#10fc405f60897c35f07e85493c932c7b5ca0592b" + integrity sha512-qQ5m48eI/MFLQ5PxQj4PFaprjyCTLI37ElWMmNs0K8Lk3dVeOdNpB3ks8jc7yM5CDmVC73eMVk/trk3fgmrUpA== + dependencies: + "@babel/helper-string-parser" "^7.27.1" + "@babel/helper-validator-identifier" "^7.28.5" + +"@colors/colors@1.5.0": + version "1.5.0" + resolved "https://registry.yarnpkg.com/@colors/colors/-/colors-1.5.0.tgz#bb504579c1cae923e6576a4f5da43d25f97bdbd9" + integrity sha512-ooWCrlZP11i8GImSjTHYHLkvFDP48nS4+204nGb1RiX/WXYHmJA2III9/e2DWVabCESdW7hBAEzHRqUn9OUVvQ== + +"@cypress/code-coverage@^3": + version "3.14.7" + resolved "https://registry.yarnpkg.com/@cypress/code-coverage/-/code-coverage-3.14.7.tgz#d37c207298be9ae02b922495f012082dbe705936" + integrity sha512-0qk2aNKmrB0AwJtYSyK2+MWl/3NqDgZQ1OBSEh6oFnJwl/H2u3NTatV+FTCap22HTm+uxUS6SarU8gP9gFZ6Tw== + dependencies: + "@cypress/webpack-preprocessor" "^6.0.0" + chalk "4.1.2" + dayjs "1.11.13" + debug "4.4.0" + execa "4.1.0" + istanbul-lib-coverage "^3.0.0" + js-yaml "4.1.0" + nyc "15.1.0" + tinyglobby "^0.2.14" + +"@cypress/request@^3.0.6": + version "3.0.9" + resolved "https://registry.yarnpkg.com/@cypress/request/-/request-3.0.9.tgz#8ed6e08fea0c62998b5552301023af7268f11625" + integrity sha512-I3l7FdGRXluAS44/0NguwWlO83J18p0vlr2FYHrJkWdNYhgVoiYo61IXPqaOsL+vNxU1ZqMACzItGK3/KKDsdw== + dependencies: + aws-sign2 "~0.7.0" + aws4 "^1.8.0" + caseless "~0.12.0" + combined-stream "~1.0.6" + extend "~3.0.2" + forever-agent "~0.6.1" + form-data "~4.0.4" + http-signature "~1.4.0" + is-typedarray "~1.0.0" + isstream "~0.1.2" + json-stringify-safe "~5.0.1" + mime-types "~2.1.19" + performance-now "^2.1.0" + qs "6.14.0" + safe-buffer "^5.1.2" + tough-cookie "^5.0.0" + tunnel-agent "^0.6.0" + uuid "^8.3.2" + +"@cypress/webpack-preprocessor@^6.0.0": + version "6.0.4" + resolved "https://registry.yarnpkg.com/@cypress/webpack-preprocessor/-/webpack-preprocessor-6.0.4.tgz#537f6bee2a971979adf35d925609a86f9e4aff30" + integrity sha512-ly+EcabWWbhrSPr2J/njQX7Y3da+QqOmFg8Og/MVmLxhDLKIzr2WhTdgzDYviPTLx/IKsdb41cc2RLYp6mSBRA== + dependencies: + bluebird "3.7.1" + debug "^4.3.4" + lodash "^4.17.20" + semver "^7.3.2" + +"@cypress/xvfb@^1.2.4": + version "1.2.4" + resolved "https://registry.yarnpkg.com/@cypress/xvfb/-/xvfb-1.2.4.tgz#2daf42e8275b39f4aa53c14214e557bd14e7748a" + integrity sha512-skbBzPggOVYCbnGgV+0dmBdW/s77ZkAOXIC1knS8NagwDjBrNC1LuXtQJeiN6l+m7lzmHtaoUw/ctJKdqkG57Q== + dependencies: + debug "^3.1.0" + lodash.once "^4.1.1" + +"@docsearch/css@^4.3.2": + version "4.3.2" + resolved "https://registry.yarnpkg.com/@docsearch/css/-/css-4.3.2.tgz#d47d25336c9516b419245fa74e8dd5ae84a17492" + integrity sha512-K3Yhay9MgkBjJJ0WEL5MxnACModX9xuNt3UlQQkDEDZJZ0+aeWKtOkxHNndMRkMBnHdYvQjxkm6mdlneOtU1IQ== + +"@docsearch/js@^4.3.2": + version "4.3.2" + resolved "https://registry.yarnpkg.com/@docsearch/js/-/js-4.3.2.tgz#3c799069c1a6614fe4b3d95205d90df8a0bebe95" + integrity sha512-xdfpPXMgKRY9EW7U1vtY7gLKbLZFa9ed+t0Dacquq8zXBqAlH9HlUf0h4Mhxm0xatsVeMaIR2wr/u6g0GsZyQw== + dependencies: + htm "3.1.1" + +"@esbuild/aix-ppc64@0.25.12": + version "0.25.12" + resolved "https://registry.yarnpkg.com/@esbuild/aix-ppc64/-/aix-ppc64-0.25.12.tgz#80fcbe36130e58b7670511e888b8e88a259ed76c" + integrity sha512-Hhmwd6CInZ3dwpuGTF8fJG6yoWmsToE+vYgD4nytZVxcu1ulHpUQRAB1UJ8+N1Am3Mz4+xOByoQoSZf4D+CpkA== + +"@esbuild/android-arm64@0.25.12": + version "0.25.12" + resolved "https://registry.yarnpkg.com/@esbuild/android-arm64/-/android-arm64-0.25.12.tgz#8aa4965f8d0a7982dc21734bf6601323a66da752" + integrity sha512-6AAmLG7zwD1Z159jCKPvAxZd4y/VTO0VkprYy+3N2FtJ8+BQWFXU+OxARIwA46c5tdD9SsKGZ/1ocqBS/gAKHg== + +"@esbuild/android-arm@0.25.12": + version "0.25.12" + resolved "https://registry.yarnpkg.com/@esbuild/android-arm/-/android-arm-0.25.12.tgz#300712101f7f50f1d2627a162e6e09b109b6767a" + integrity sha512-VJ+sKvNA/GE7Ccacc9Cha7bpS8nyzVv0jdVgwNDaR4gDMC/2TTRc33Ip8qrNYUcpkOHUT5OZ0bUcNNVZQ9RLlg== + +"@esbuild/android-x64@0.25.12": + version "0.25.12" + resolved "https://registry.yarnpkg.com/@esbuild/android-x64/-/android-x64-0.25.12.tgz#87dfb27161202bdc958ef48bb61b09c758faee16" + integrity sha512-5jbb+2hhDHx5phYR2By8GTWEzn6I9UqR11Kwf22iKbNpYrsmRB18aX/9ivc5cabcUiAT/wM+YIZ6SG9QO6a8kg== + +"@esbuild/darwin-arm64@0.25.12": + version "0.25.12" + resolved "https://registry.yarnpkg.com/@esbuild/darwin-arm64/-/darwin-arm64-0.25.12.tgz#79197898ec1ff745d21c071e1c7cc3c802f0c1fd" + integrity sha512-N3zl+lxHCifgIlcMUP5016ESkeQjLj/959RxxNYIthIg+CQHInujFuXeWbWMgnTo4cp5XVHqFPmpyu9J65C1Yg== + +"@esbuild/darwin-x64@0.25.12": + version "0.25.12" + resolved "https://registry.yarnpkg.com/@esbuild/darwin-x64/-/darwin-x64-0.25.12.tgz#146400a8562133f45c4d2eadcf37ddd09718079e" + integrity sha512-HQ9ka4Kx21qHXwtlTUVbKJOAnmG1ipXhdWTmNXiPzPfWKpXqASVcWdnf2bnL73wgjNrFXAa3yYvBSd9pzfEIpA== + +"@esbuild/freebsd-arm64@0.25.12": + version "0.25.12" + resolved "https://registry.yarnpkg.com/@esbuild/freebsd-arm64/-/freebsd-arm64-0.25.12.tgz#1c5f9ba7206e158fd2b24c59fa2d2c8bb47ca0fe" + integrity sha512-gA0Bx759+7Jve03K1S0vkOu5Lg/85dou3EseOGUes8flVOGxbhDDh/iZaoek11Y8mtyKPGF3vP8XhnkDEAmzeg== + +"@esbuild/freebsd-x64@0.25.12": + version "0.25.12" + resolved "https://registry.yarnpkg.com/@esbuild/freebsd-x64/-/freebsd-x64-0.25.12.tgz#ea631f4a36beaac4b9279fa0fcc6ca29eaeeb2b3" + integrity sha512-TGbO26Yw2xsHzxtbVFGEXBFH0FRAP7gtcPE7P5yP7wGy7cXK2oO7RyOhL5NLiqTlBh47XhmIUXuGciXEqYFfBQ== + +"@esbuild/linux-arm64@0.25.12": + version "0.25.12" + resolved "https://registry.yarnpkg.com/@esbuild/linux-arm64/-/linux-arm64-0.25.12.tgz#e1066bce58394f1b1141deec8557a5f0a22f5977" + integrity sha512-8bwX7a8FghIgrupcxb4aUmYDLp8pX06rGh5HqDT7bB+8Rdells6mHvrFHHW2JAOPZUbnjUpKTLg6ECyzvas2AQ== + +"@esbuild/linux-arm@0.25.12": + version "0.25.12" + resolved "https://registry.yarnpkg.com/@esbuild/linux-arm/-/linux-arm-0.25.12.tgz#452cd66b20932d08bdc53a8b61c0e30baf4348b9" + integrity sha512-lPDGyC1JPDou8kGcywY0YILzWlhhnRjdof3UlcoqYmS9El818LLfJJc3PXXgZHrHCAKs/Z2SeZtDJr5MrkxtOw== + +"@esbuild/linux-ia32@0.25.12": + version "0.25.12" + resolved "https://registry.yarnpkg.com/@esbuild/linux-ia32/-/linux-ia32-0.25.12.tgz#b24f8acc45bcf54192c7f2f3be1b53e6551eafe0" + integrity sha512-0y9KrdVnbMM2/vG8KfU0byhUN+EFCny9+8g202gYqSSVMonbsCfLjUO+rCci7pM0WBEtz+oK/PIwHkzxkyharA== + +"@esbuild/linux-loong64@0.25.12": + version "0.25.12" + resolved "https://registry.yarnpkg.com/@esbuild/linux-loong64/-/linux-loong64-0.25.12.tgz#f9cfffa7fc8322571fbc4c8b3268caf15bd81ad0" + integrity sha512-h///Lr5a9rib/v1GGqXVGzjL4TMvVTv+s1DPoxQdz7l/AYv6LDSxdIwzxkrPW438oUXiDtwM10o9PmwS/6Z0Ng== + +"@esbuild/linux-mips64el@0.25.12": + version "0.25.12" + resolved "https://registry.yarnpkg.com/@esbuild/linux-mips64el/-/linux-mips64el-0.25.12.tgz#575a14bd74644ffab891adc7d7e60d275296f2cd" + integrity sha512-iyRrM1Pzy9GFMDLsXn1iHUm18nhKnNMWscjmp4+hpafcZjrr2WbT//d20xaGljXDBYHqRcl8HnxbX6uaA/eGVw== + +"@esbuild/linux-ppc64@0.25.12": + version "0.25.12" + resolved "https://registry.yarnpkg.com/@esbuild/linux-ppc64/-/linux-ppc64-0.25.12.tgz#75b99c70a95fbd5f7739d7692befe60601591869" + integrity sha512-9meM/lRXxMi5PSUqEXRCtVjEZBGwB7P/D4yT8UG/mwIdze2aV4Vo6U5gD3+RsoHXKkHCfSxZKzmDssVlRj1QQA== + +"@esbuild/linux-riscv64@0.25.12": + version "0.25.12" + resolved "https://registry.yarnpkg.com/@esbuild/linux-riscv64/-/linux-riscv64-0.25.12.tgz#2e3259440321a44e79ddf7535c325057da875cd6" + integrity sha512-Zr7KR4hgKUpWAwb1f3o5ygT04MzqVrGEGXGLnj15YQDJErYu/BGg+wmFlIDOdJp0PmB0lLvxFIOXZgFRrdjR0w== + +"@esbuild/linux-s390x@0.25.12": + version "0.25.12" + resolved "https://registry.yarnpkg.com/@esbuild/linux-s390x/-/linux-s390x-0.25.12.tgz#17676cabbfe5928da5b2a0d6df5d58cd08db2663" + integrity sha512-MsKncOcgTNvdtiISc/jZs/Zf8d0cl/t3gYWX8J9ubBnVOwlk65UIEEvgBORTiljloIWnBzLs4qhzPkJcitIzIg== + +"@esbuild/linux-x64@0.25.12": + version "0.25.12" + resolved "https://registry.yarnpkg.com/@esbuild/linux-x64/-/linux-x64-0.25.12.tgz#0583775685ca82066d04c3507f09524d3cd7a306" + integrity sha512-uqZMTLr/zR/ed4jIGnwSLkaHmPjOjJvnm6TVVitAa08SLS9Z0VM8wIRx7gWbJB5/J54YuIMInDquWyYvQLZkgw== + +"@esbuild/netbsd-arm64@0.25.12": + version "0.25.12" + resolved "https://registry.yarnpkg.com/@esbuild/netbsd-arm64/-/netbsd-arm64-0.25.12.tgz#f04c4049cb2e252fe96b16fed90f70746b13f4a4" + integrity sha512-xXwcTq4GhRM7J9A8Gv5boanHhRa/Q9KLVmcyXHCTaM4wKfIpWkdXiMog/KsnxzJ0A1+nD+zoecuzqPmCRyBGjg== + +"@esbuild/netbsd-x64@0.25.12": + version "0.25.12" + resolved "https://registry.yarnpkg.com/@esbuild/netbsd-x64/-/netbsd-x64-0.25.12.tgz#77da0d0a0d826d7c921eea3d40292548b258a076" + integrity sha512-Ld5pTlzPy3YwGec4OuHh1aCVCRvOXdH8DgRjfDy/oumVovmuSzWfnSJg+VtakB9Cm0gxNO9BzWkj6mtO1FMXkQ== + +"@esbuild/openbsd-arm64@0.25.12": + version "0.25.12" + resolved "https://registry.yarnpkg.com/@esbuild/openbsd-arm64/-/openbsd-arm64-0.25.12.tgz#6296f5867aedef28a81b22ab2009c786a952dccd" + integrity sha512-fF96T6KsBo/pkQI950FARU9apGNTSlZGsv1jZBAlcLL1MLjLNIWPBkj5NlSz8aAzYKg+eNqknrUJ24QBybeR5A== + +"@esbuild/openbsd-x64@0.25.12": + version "0.25.12" + resolved "https://registry.yarnpkg.com/@esbuild/openbsd-x64/-/openbsd-x64-0.25.12.tgz#f8d23303360e27b16cf065b23bbff43c14142679" + integrity sha512-MZyXUkZHjQxUvzK7rN8DJ3SRmrVrke8ZyRusHlP+kuwqTcfWLyqMOE3sScPPyeIXN/mDJIfGXvcMqCgYKekoQw== + +"@esbuild/openharmony-arm64@0.25.12": + version "0.25.12" + resolved "https://registry.yarnpkg.com/@esbuild/openharmony-arm64/-/openharmony-arm64-0.25.12.tgz#49e0b768744a3924be0d7fd97dd6ce9b2923d88d" + integrity sha512-rm0YWsqUSRrjncSXGA7Zv78Nbnw4XL6/dzr20cyrQf7ZmRcsovpcRBdhD43Nuk3y7XIoW2OxMVvwuRvk9XdASg== + +"@esbuild/sunos-x64@0.25.12": + version "0.25.12" + resolved "https://registry.yarnpkg.com/@esbuild/sunos-x64/-/sunos-x64-0.25.12.tgz#a6ed7d6778d67e528c81fb165b23f4911b9b13d6" + integrity sha512-3wGSCDyuTHQUzt0nV7bocDy72r2lI33QL3gkDNGkod22EsYl04sMf0qLb8luNKTOmgF/eDEDP5BFNwoBKH441w== + +"@esbuild/win32-arm64@0.25.12": + version "0.25.12" + resolved "https://registry.yarnpkg.com/@esbuild/win32-arm64/-/win32-arm64-0.25.12.tgz#9ac14c378e1b653af17d08e7d3ce34caef587323" + integrity sha512-rMmLrur64A7+DKlnSuwqUdRKyd3UE7oPJZmnljqEptesKM8wx9J8gx5u0+9Pq0fQQW8vqeKebwNXdfOyP+8Bsg== + +"@esbuild/win32-ia32@0.25.12": + version "0.25.12" + resolved "https://registry.yarnpkg.com/@esbuild/win32-ia32/-/win32-ia32-0.25.12.tgz#918942dcbbb35cc14fca39afb91b5e6a3d127267" + integrity sha512-HkqnmmBoCbCwxUKKNPBixiWDGCpQGVsrQfJoVGYLPT41XWF8lHuE5N6WhVia2n4o5QK5M4tYr21827fNhi4byQ== + +"@esbuild/win32-x64@0.25.12": + version "0.25.12" + resolved "https://registry.yarnpkg.com/@esbuild/win32-x64/-/win32-x64-0.25.12.tgz#9bdad8176be7811ad148d1f8772359041f46c6c5" + integrity sha512-alJC0uCZpTFrSL0CCDjcgleBXPnCrEAhTBILpeAp7M/OFgoqtAetfBzX0xM00MUsVVPpVjlPuMbREqnZCXaTnA== + +"@iconify-json/simple-icons@^1.2.59": + version "1.2.62" + resolved "https://registry.yarnpkg.com/@iconify-json/simple-icons/-/simple-icons-1.2.62.tgz#fd0132e6fb94793d630dc55ad93fbcaba6ab2ff5" + integrity sha512-GpWQ294d4lraB3D2eBSSMROh1x9uKgpmyereLlGzVQjGZ7lbeFzby2ywXxyp4vEODmTDyf1/4WcOYs/yH4rJ5Q== + dependencies: + "@iconify/types" "*" + +"@iconify/types@*": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@iconify/types/-/types-2.0.0.tgz#ab0e9ea681d6c8a1214f30cd741fe3a20cc57f57" + integrity sha512-+wluvCrRhXrhyOmRDJ3q8mux9JkKy5SJ/v8ol2tu4FVjyYvtEzkc/3pK15ET6RKg4b4w4BmTk1+gsCUhf21Ykg== + +"@istanbuljs/load-nyc-config@^1.0.0": + version "1.1.0" + resolved "https://registry.yarnpkg.com/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz#fd3db1d59ecf7cf121e80650bb86712f9b55eced" + integrity sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ== + dependencies: + camelcase "^5.3.1" + find-up "^4.1.0" + get-package-type "^0.1.0" + js-yaml "^3.13.1" + resolve-from "^5.0.0" + +"@istanbuljs/schema@^0.1.2": + version "0.1.3" + resolved "https://registry.yarnpkg.com/@istanbuljs/schema/-/schema-0.1.3.tgz#e45e384e4b8ec16bce2fd903af78450f6bf7ec98" + integrity sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA== + +"@jridgewell/gen-mapping@^0.3.12", "@jridgewell/gen-mapping@^0.3.5": + version "0.3.13" + resolved "https://registry.yarnpkg.com/@jridgewell/gen-mapping/-/gen-mapping-0.3.13.tgz#6342a19f44347518c93e43b1ac69deb3c4656a1f" + integrity sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA== + dependencies: + "@jridgewell/sourcemap-codec" "^1.5.0" + "@jridgewell/trace-mapping" "^0.3.24" + +"@jridgewell/remapping@^2.3.5": + version "2.3.5" + resolved "https://registry.yarnpkg.com/@jridgewell/remapping/-/remapping-2.3.5.tgz#375c476d1972947851ba1e15ae8f123047445aa1" + integrity sha512-LI9u/+laYG4Ds1TDKSJW2YPrIlcVYOwi2fUC6xB43lueCjgxV4lffOCZCtYFiH6TNOX+tQKXx97T4IKHbhyHEQ== + dependencies: + "@jridgewell/gen-mapping" "^0.3.5" + "@jridgewell/trace-mapping" "^0.3.24" + +"@jridgewell/resolve-uri@^3.1.0": + version "3.1.2" + resolved "https://registry.yarnpkg.com/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz#7a0ee601f60f99a20c7c7c5ff0c80388c1189bd6" + integrity sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw== + +"@jridgewell/sourcemap-codec@^1.4.14", "@jridgewell/sourcemap-codec@^1.5.0", "@jridgewell/sourcemap-codec@^1.5.5": + version "1.5.5" + resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.5.tgz#6912b00d2c631c0d15ce1a7ab57cd657f2a8f8ba" + integrity sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og== + +"@jridgewell/trace-mapping@^0.3.24", "@jridgewell/trace-mapping@^0.3.28": + version "0.3.31" + resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.31.tgz#db15d6781c931f3a251a3dac39501c98a6082fd0" + integrity sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw== + dependencies: + "@jridgewell/resolve-uri" "^3.1.0" + "@jridgewell/sourcemap-codec" "^1.4.14" + +"@rolldown/pluginutils@1.0.0-beta.50": + version "1.0.0-beta.50" + resolved "https://registry.yarnpkg.com/@rolldown/pluginutils/-/pluginutils-1.0.0-beta.50.tgz#a12f07e9095b8901debcc17d98b4350f0cc64633" + integrity sha512-5e76wQiQVeL1ICOZVUg4LSOVYg9jyhGCin+icYozhsUzM+fHE7kddi1bdiE0jwVqTfkjba3jUFbEkoC9WkdvyA== + +"@rollup/rollup-android-arm-eabi@4.53.3": + version "4.53.3" + resolved "https://registry.yarnpkg.com/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.53.3.tgz#7e478b66180c5330429dd161bf84dad66b59c8eb" + integrity sha512-mRSi+4cBjrRLoaal2PnqH82Wqyb+d3HsPUN/W+WslCXsZsyHa9ZeQQX/pQsZaVIWDkPcpV6jJ+3KLbTbgnwv8w== + +"@rollup/rollup-android-arm64@4.53.3": + version "4.53.3" + resolved "https://registry.yarnpkg.com/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.53.3.tgz#2b025510c53a5e3962d3edade91fba9368c9d71c" + integrity sha512-CbDGaMpdE9sh7sCmTrTUyllhrg65t6SwhjlMJsLr+J8YjFuPmCEjbBSx4Z/e4SmDyH3aB5hGaJUP2ltV/vcs4w== + +"@rollup/rollup-darwin-arm64@4.53.3": + version "4.53.3" + resolved "https://registry.yarnpkg.com/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.53.3.tgz#3577c38af68ccf34c03e84f476bfd526abca10a0" + integrity sha512-Nr7SlQeqIBpOV6BHHGZgYBuSdanCXuw09hon14MGOLGmXAFYjx1wNvquVPmpZnl0tLjg25dEdr4IQ6GgyToCUA== + +"@rollup/rollup-darwin-x64@4.53.3": + version "4.53.3" + resolved "https://registry.yarnpkg.com/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.53.3.tgz#2bf5f2520a1f3b551723d274b9669ba5b75ed69c" + integrity sha512-DZ8N4CSNfl965CmPktJ8oBnfYr3F8dTTNBQkRlffnUarJ2ohudQD17sZBa097J8xhQ26AwhHJ5mvUyQW8ddTsQ== + +"@rollup/rollup-freebsd-arm64@4.53.3": + version "4.53.3" + resolved "https://registry.yarnpkg.com/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.53.3.tgz#4bb9cc80252564c158efc0710153c71633f1927c" + integrity sha512-yMTrCrK92aGyi7GuDNtGn2sNW+Gdb4vErx4t3Gv/Tr+1zRb8ax4z8GWVRfr3Jw8zJWvpGHNpss3vVlbF58DZ4w== + +"@rollup/rollup-freebsd-x64@4.53.3": + version "4.53.3" + resolved "https://registry.yarnpkg.com/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.53.3.tgz#2301289094d49415a380cf942219ae9d8b127440" + integrity sha512-lMfF8X7QhdQzseM6XaX0vbno2m3hlyZFhwcndRMw8fbAGUGL3WFMBdK0hbUBIUYcEcMhVLr1SIamDeuLBnXS+Q== + +"@rollup/rollup-linux-arm-gnueabihf@4.53.3": + version "4.53.3" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.53.3.tgz#1d03d776f2065e09fc141df7d143476e94acca88" + integrity sha512-k9oD15soC/Ln6d2Wv/JOFPzZXIAIFLp6B+i14KhxAfnq76ajt0EhYc5YPeX6W1xJkAdItcVT+JhKl1QZh44/qw== + +"@rollup/rollup-linux-arm-musleabihf@4.53.3": + version "4.53.3" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.53.3.tgz#8623de0e040b2fd52a541c602688228f51f96701" + integrity sha512-vTNlKq+N6CK/8UktsrFuc+/7NlEYVxgaEgRXVUVK258Z5ymho29skzW1sutgYjqNnquGwVUObAaxae8rZ6YMhg== + +"@rollup/rollup-linux-arm64-gnu@4.53.3": + version "4.53.3" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.53.3.tgz#ce2d1999bc166277935dde0301cde3dd0417fb6e" + integrity sha512-RGrFLWgMhSxRs/EWJMIFM1O5Mzuz3Xy3/mnxJp/5cVhZ2XoCAxJnmNsEyeMJtpK+wu0FJFWz+QF4mjCA7AUQ3w== + +"@rollup/rollup-linux-arm64-musl@4.53.3": + version "4.53.3" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.53.3.tgz#88c2523778444da952651a2219026416564a4899" + integrity sha512-kASyvfBEWYPEwe0Qv4nfu6pNkITLTb32p4yTgzFCocHnJLAHs+9LjUu9ONIhvfT/5lv4YS5muBHyuV84epBo/A== + +"@rollup/rollup-linux-loong64-gnu@4.53.3": + version "4.53.3" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-loong64-gnu/-/rollup-linux-loong64-gnu-4.53.3.tgz#578ca2220a200ac4226c536c10c8cc6e4f276714" + integrity sha512-JiuKcp2teLJwQ7vkJ95EwESWkNRFJD7TQgYmCnrPtlu50b4XvT5MOmurWNrCj3IFdyjBQ5p9vnrX4JM6I8OE7g== + +"@rollup/rollup-linux-ppc64-gnu@4.53.3": + version "4.53.3" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-ppc64-gnu/-/rollup-linux-ppc64-gnu-4.53.3.tgz#aa338d3effd4168a20a5023834a74ba2c3081293" + integrity sha512-EoGSa8nd6d3T7zLuqdojxC20oBfNT8nexBbB/rkxgKj5T5vhpAQKKnD+h3UkoMuTyXkP5jTjK/ccNRmQrPNDuw== + +"@rollup/rollup-linux-riscv64-gnu@4.53.3": + version "4.53.3" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.53.3.tgz#16ba582f9f6cff58119aa242782209b1557a1508" + integrity sha512-4s+Wped2IHXHPnAEbIB0YWBv7SDohqxobiiPA1FIWZpX+w9o2i4LezzH/NkFUl8LRci/8udci6cLq+jJQlh+0g== + +"@rollup/rollup-linux-riscv64-musl@4.53.3": + version "4.53.3" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.53.3.tgz#e404a77ebd6378483888b8064c703adb011340ab" + integrity sha512-68k2g7+0vs2u9CxDt5ktXTngsxOQkSEV/xBbwlqYcUrAVh6P9EgMZvFsnHy4SEiUl46Xf0IObWVbMvPrr2gw8A== + +"@rollup/rollup-linux-s390x-gnu@4.53.3": + version "4.53.3" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.53.3.tgz#92ad52d306227c56bec43d96ad2164495437ffe6" + integrity sha512-VYsFMpULAz87ZW6BVYw3I6sWesGpsP9OPcyKe8ofdg9LHxSbRMd7zrVrr5xi/3kMZtpWL/wC+UIJWJYVX5uTKg== + +"@rollup/rollup-linux-x64-gnu@4.53.3": + version "4.53.3" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.53.3.tgz#fd0dea3bb9aa07e7083579f25e1c2285a46cb9fa" + integrity sha512-3EhFi1FU6YL8HTUJZ51imGJWEX//ajQPfqWLI3BQq4TlvHy4X0MOr5q3D2Zof/ka0d5FNdPwZXm3Yyib/UEd+w== + +"@rollup/rollup-linux-x64-musl@4.53.3": + version "4.53.3" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.53.3.tgz#37a3efb09f18d555f8afc490e1f0444885de8951" + integrity sha512-eoROhjcc6HbZCJr+tvVT8X4fW3/5g/WkGvvmwz/88sDtSJzO7r/blvoBDgISDiCjDRZmHpwud7h+6Q9JxFwq1Q== + +"@rollup/rollup-openharmony-arm64@4.53.3": + version "4.53.3" + resolved "https://registry.yarnpkg.com/@rollup/rollup-openharmony-arm64/-/rollup-openharmony-arm64-4.53.3.tgz#c489bec9f4f8320d42c9b324cca220c90091c1f7" + integrity sha512-OueLAWgrNSPGAdUdIjSWXw+u/02BRTcnfw9PN41D2vq/JSEPnJnVuBgw18VkN8wcd4fjUs+jFHVM4t9+kBSNLw== + +"@rollup/rollup-win32-arm64-msvc@4.53.3": + version "4.53.3" + resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.53.3.tgz#152832b5f79dc22d1606fac3db946283601b7080" + integrity sha512-GOFuKpsxR/whszbF/bzydebLiXIHSgsEUp6M0JI8dWvi+fFa1TD6YQa4aSZHtpmh2/uAlj/Dy+nmby3TJ3pkTw== + +"@rollup/rollup-win32-ia32-msvc@4.53.3": + version "4.53.3" + resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.53.3.tgz#54d91b2bb3bf3e9f30d32b72065a4e52b3a172a5" + integrity sha512-iah+THLcBJdpfZ1TstDFbKNznlzoxa8fmnFYK4V67HvmuNYkVdAywJSoteUszvBQ9/HqN2+9AZghbajMsFT+oA== + +"@rollup/rollup-win32-x64-gnu@4.53.3": + version "4.53.3" + resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-x64-gnu/-/rollup-win32-x64-gnu-4.53.3.tgz#df9df03e61a003873efec8decd2034e7f135c71e" + integrity sha512-J9QDiOIZlZLdcot5NXEepDkstocktoVjkaKUtqzgzpt2yWjGlbYiKyp05rWwk4nypbYUNoFAztEgixoLaSETkg== + +"@rollup/rollup-win32-x64-msvc@4.53.3": + version "4.53.3" + resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.53.3.tgz#38ae84f4c04226c1d56a3b17296ef1e0460ecdfe" + integrity sha512-UhTd8u31dXadv0MopwGgNOBpUVROFKWVQgAg5N1ESyCz8AuBcMqm4AuTjrwgQKGDfoFuz02EuMRHQIw/frmYKQ== + +"@shikijs/core@3.19.0", "@shikijs/core@^3.15.0": + version "3.19.0" + resolved "https://registry.yarnpkg.com/@shikijs/core/-/core-3.19.0.tgz#251e155e01d6da97e13cfba119cbf0d682d02ea9" + integrity sha512-L7SrRibU7ZoYi1/TrZsJOFAnnHyLTE1SwHG1yNWjZIVCqjOEmCSuK2ZO9thnRbJG6TOkPp+Z963JmpCNw5nzvA== + dependencies: + "@shikijs/types" "3.19.0" + "@shikijs/vscode-textmate" "^10.0.2" + "@types/hast" "^3.0.4" + hast-util-to-html "^9.0.5" + +"@shikijs/engine-javascript@3.19.0": + version "3.19.0" + resolved "https://registry.yarnpkg.com/@shikijs/engine-javascript/-/engine-javascript-3.19.0.tgz#2d59c206d7668f326691f775b6ebee6159cad83a" + integrity sha512-ZfWJNm2VMhKkQIKT9qXbs76RRcT0SF/CAvEz0+RkpUDAoDaCx0uFdCGzSRiD9gSlhm6AHkjdieOBJMaO2eC1rQ== + dependencies: + "@shikijs/types" "3.19.0" + "@shikijs/vscode-textmate" "^10.0.2" + oniguruma-to-es "^4.3.4" + +"@shikijs/engine-oniguruma@3.19.0": + version "3.19.0" + resolved "https://registry.yarnpkg.com/@shikijs/engine-oniguruma/-/engine-oniguruma-3.19.0.tgz#76bd31a90785102f1183d2a073381c117527fca4" + integrity sha512-1hRxtYIJfJSZeM5ivbUXv9hcJP3PWRo5prG/V2sWwiubUKTa+7P62d2qxCW8jiVFX4pgRHhnHNp+qeR7Xl+6kg== + dependencies: + "@shikijs/types" "3.19.0" + "@shikijs/vscode-textmate" "^10.0.2" + +"@shikijs/langs@3.19.0": + version "3.19.0" + resolved "https://registry.yarnpkg.com/@shikijs/langs/-/langs-3.19.0.tgz#2fa46ae329ec5e88f36fd0167518e0013ab2e49a" + integrity sha512-dBMFzzg1QiXqCVQ5ONc0z2ebyoi5BKz+MtfByLm0o5/nbUu3Iz8uaTCa5uzGiscQKm7lVShfZHU1+OG3t5hgwg== + dependencies: + "@shikijs/types" "3.19.0" + +"@shikijs/themes@3.19.0": + version "3.19.0" + resolved "https://registry.yarnpkg.com/@shikijs/themes/-/themes-3.19.0.tgz#9db4f2b57fac84e266e4fd1ada02df9c5e0102af" + integrity sha512-H36qw+oh91Y0s6OlFfdSuQ0Ld+5CgB/VE6gNPK+Hk4VRbVG/XQgkjnt4KzfnnoO6tZPtKJKHPjwebOCfjd6F8A== + dependencies: + "@shikijs/types" "3.19.0" + +"@shikijs/transformers@^3.15.0": + version "3.19.0" + resolved "https://registry.yarnpkg.com/@shikijs/transformers/-/transformers-3.19.0.tgz#d7e17956c79a48656c642b54949924bc7b89a13f" + integrity sha512-e6vwrsyw+wx4OkcrDbL+FVCxwx8jgKiCoXzakVur++mIWVcgpzIi8vxf4/b4dVTYrV/nUx5RjinMf4tq8YV8Fw== + dependencies: + "@shikijs/core" "3.19.0" + "@shikijs/types" "3.19.0" + +"@shikijs/types@3.19.0", "@shikijs/types@^3.15.0": + version "3.19.0" + resolved "https://registry.yarnpkg.com/@shikijs/types/-/types-3.19.0.tgz#46fdd08d67a8920473788c3cb6b07cbdf20f6b6f" + integrity sha512-Z2hdeEQlzuntf/BZpFG8a+Fsw9UVXdML7w0o3TgSXV3yNESGon+bs9ITkQb3Ki7zxoXOOu5oJWqZ2uto06V9iQ== + dependencies: + "@shikijs/vscode-textmate" "^10.0.2" + "@types/hast" "^3.0.4" + +"@shikijs/vscode-textmate@^10.0.2": + version "10.0.2" + resolved "https://registry.yarnpkg.com/@shikijs/vscode-textmate/-/vscode-textmate-10.0.2.tgz#a90ab31d0cc1dfb54c66a69e515bf624fa7b2224" + integrity sha512-83yeghZ2xxin3Nj8z1NMd/NCuca+gsYXswywDy5bHvwlWL8tpTQmzGeUuHd9FC3E/SBEMvzJRwWEOz5gGes9Qg== + +"@testing-library/cypress@^10": + version "10.1.0" + resolved "https://registry.yarnpkg.com/@testing-library/cypress/-/cypress-10.1.0.tgz#e1f12e2f8206e7cdf12d3ca23b6d303d08f44180" + integrity sha512-tNkNtYRqPQh71xXKuMizr146zlellawUfDth7A/urYU4J66g0VGZ063YsS0gqS79Z58u1G/uo9UxN05qvKXMag== + dependencies: + "@babel/runtime" "^7.14.6" + "@testing-library/dom" "^10.1.0" + +"@testing-library/dom@8.17.1": + version "8.17.1" + resolved "https://registry.yarnpkg.com/@testing-library/dom/-/dom-8.17.1.tgz#2d7af4ff6dad8d837630fecd08835aee08320ad7" + integrity sha512-KnH2MnJUzmFNPW6RIKfd+zf2Wue8mEKX0M3cpX6aKl5ZXrJM1/c/Pc8c2xDNYQCnJO48Sm5ITbMXgqTr3h4jxQ== + dependencies: + "@babel/code-frame" "^7.10.4" + "@babel/runtime" "^7.12.5" + "@types/aria-query" "^4.2.0" + aria-query "^5.0.0" + chalk "^4.1.0" + dom-accessibility-api "^0.5.9" + lz-string "^1.4.4" + pretty-format "^27.0.2" + +"@testing-library/dom@^10.1.0": + version "10.4.1" + resolved "https://registry.yarnpkg.com/@testing-library/dom/-/dom-10.4.1.tgz#d444f8a889e9a46e9a3b4f3b88e0fcb3efb6cf95" + integrity sha512-o4PXJQidqJl82ckFaXUeoAW+XysPLauYI43Abki5hABd853iMhitooc6znOnczgbTYmEP6U6/y1ZyKAIsvMKGg== + dependencies: + "@babel/code-frame" "^7.10.4" + "@babel/runtime" "^7.12.5" + "@types/aria-query" "^5.0.1" + aria-query "5.3.0" + dom-accessibility-api "^0.5.9" + lz-string "^1.5.0" + picocolors "1.1.1" + pretty-format "^27.0.2" + +"@types/aria-query@^4.2.0": + version "4.2.2" + resolved "https://registry.yarnpkg.com/@types/aria-query/-/aria-query-4.2.2.tgz#ed4e0ad92306a704f9fb132a0cfcf77486dbe2bc" + integrity sha512-HnYpAE1Y6kRyKM/XkEuiRQhTHvkzMBurTHnpFLYLBGPIylZNPs9jJcuOOYWxPLJCSEtmZT0Y8rHDokKN7rRTig== + +"@types/aria-query@^5.0.1": + version "5.0.4" + resolved "https://registry.yarnpkg.com/@types/aria-query/-/aria-query-5.0.4.tgz#1a31c3d378850d2778dabb6374d036dcba4ba708" + integrity sha512-rfT93uj5s0PRL7EzccGMs3brplhcrghnDoV26NqKhCAS1hVo+WdNsPvE/yb6ilfr5hi2MEk6d5EWJTKdxg8jVw== + +"@types/estree@1.0.8": + version "1.0.8" + resolved "https://registry.yarnpkg.com/@types/estree/-/estree-1.0.8.tgz#958b91c991b1867ced318bedea0e215ee050726e" + integrity sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w== + +"@types/hast@^3.0.0", "@types/hast@^3.0.4": + version "3.0.4" + resolved "https://registry.yarnpkg.com/@types/hast/-/hast-3.0.4.tgz#1d6b39993b82cea6ad783945b0508c25903e15aa" + integrity sha512-WPs+bbQw5aCj+x6laNGWLH3wviHtoCv/P3+otBhbOhJgG8qtpdAMlTCxLtsTWA7LH1Oh/bFCHsBn0TPS5m30EQ== + dependencies: + "@types/unist" "*" + +"@types/linkify-it@^5": + version "5.0.0" + resolved "https://registry.yarnpkg.com/@types/linkify-it/-/linkify-it-5.0.0.tgz#21413001973106cda1c3a9b91eedd4ccd5469d76" + integrity sha512-sVDA58zAw4eWAffKOaQH5/5j3XeayukzDk+ewSsnv3p4yJEZHCCzMDiZM8e0OUrRvmpGZ85jf4yDHkHsgBNr9Q== + +"@types/markdown-it@^14.1.2": + version "14.1.2" + resolved "https://registry.yarnpkg.com/@types/markdown-it/-/markdown-it-14.1.2.tgz#57f2532a0800067d9b934f3521429a2e8bfb4c61" + integrity sha512-promo4eFwuiW+TfGxhi+0x3czqTYJkG8qB17ZUJiVF10Xm7NLVRSLUsfRTU/6h1e24VvRnXCx+hG7li58lkzog== + dependencies: + "@types/linkify-it" "^5" + "@types/mdurl" "^2" + +"@types/mdast@^4.0.0": + version "4.0.4" + resolved "https://registry.yarnpkg.com/@types/mdast/-/mdast-4.0.4.tgz#7ccf72edd2f1aa7dd3437e180c64373585804dd6" + integrity sha512-kGaNbPh1k7AFzgpud/gMdvIm5xuECykRR+JnWKQno9TAXVa6WIVCGTPvYGekIDL4uwCZQSYbUxNBSb1aUo79oA== + dependencies: + "@types/unist" "*" + +"@types/mdurl@^2": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@types/mdurl/-/mdurl-2.0.0.tgz#d43878b5b20222682163ae6f897b20447233bdfd" + integrity sha512-RGdgjQUZba5p6QEFAVx2OGb8rQDL/cPRG7GiedRzMcJ1tYnUANBncjbSB1NRGwbvjcPeikRABz2nshyPk1bhWg== + +"@types/node@*": + version "25.0.0" + resolved "https://registry.yarnpkg.com/@types/node/-/node-25.0.0.tgz#c0e0022c3c7b41635c49322e6b3a0279fffa7d62" + integrity sha512-rl78HwuZlaDIUSeUKkmogkhebA+8K1Hy7tddZuJ3D0xV8pZSfsYGTsliGUol1JPzu9EKnTxPC4L1fiWouStRew== + dependencies: + undici-types "~7.16.0" + +"@types/sinonjs__fake-timers@8.1.1": + version "8.1.1" + resolved "https://registry.yarnpkg.com/@types/sinonjs__fake-timers/-/sinonjs__fake-timers-8.1.1.tgz#b49c2c70150141a15e0fa7e79cf1f92a72934ce3" + integrity sha512-0kSuKjAS0TrGLJ0M/+8MaFkGsQhZpB6pxOmvS3K8FYI72K//YmdfoW9X2qPsAKh1mkwxGD5zib9s1FIFed6E8g== + +"@types/sizzle@^2.3.2": + version "2.3.10" + resolved "https://registry.yarnpkg.com/@types/sizzle/-/sizzle-2.3.10.tgz#277a542aff6776d8a9b15f2ac682a663e3e94bbd" + integrity sha512-TC0dmN0K8YcWEAEfiPi5gJP14eJe30TTGjkvek3iM/1NdHHsdCA/Td6GvNndMOo/iSnIsZ4HuuhrYPDAmbxzww== + +"@types/unist@*", "@types/unist@^3.0.0": + version "3.0.3" + resolved "https://registry.yarnpkg.com/@types/unist/-/unist-3.0.3.tgz#acaab0f919ce69cce629c2d4ed2eb4adc1b6c20c" + integrity sha512-ko/gIFJRv177XgZsZcBwnqJN5x/Gien8qNOn0D5bQU/zAzVf9Zt3BlcUiLqhV9y4ARk0GbT3tnUiPNgnTXzc/Q== + +"@types/web-bluetooth@^0.0.21": + version "0.0.21" + resolved "https://registry.yarnpkg.com/@types/web-bluetooth/-/web-bluetooth-0.0.21.tgz#525433c784aed9b457aaa0ee3d92aeb71f346b63" + integrity sha512-oIQLCGWtcFZy2JW77j9k8nHzAOpqMHLQejDA48XXMWH6tjCQHz5RCFz1bzsmROyL6PUm+LLnUiI4BCn221inxA== + +"@types/yauzl@^2.9.1": + version "2.10.3" + resolved "https://registry.yarnpkg.com/@types/yauzl/-/yauzl-2.10.3.tgz#e9b2808b4f109504a03cda958259876f61017999" + integrity sha512-oJoftv0LSuaDZE3Le4DbKX+KS9G36NzOeSap90UIK0yMA/NhKJhqlSGtNDORNRaIbQfzjXDrQa0ytJ6mNRGz/Q== + dependencies: + "@types/node" "*" + +"@ungap/structured-clone@^1.0.0": + version "1.3.0" + resolved "https://registry.yarnpkg.com/@ungap/structured-clone/-/structured-clone-1.3.0.tgz#d06bbb384ebcf6c505fde1c3d0ed4ddffe0aaff8" + integrity sha512-WmoN8qaIAo7WTYWbAZuG8PYEhn5fkz7dZrqTBZ7dtt//lL2Gwms1IcnQ5yHqjDfX8Ft5j4YzDM23f87zBfDe9g== + +"@vitejs/plugin-vue@^6.0.1": + version "6.0.2" + resolved "https://registry.yarnpkg.com/@vitejs/plugin-vue/-/plugin-vue-6.0.2.tgz#318d1828fe73e4a0b73f473040dcb3ad52db38ec" + integrity sha512-iHmwV3QcVGGvSC1BG5bZ4z6iwa1SOpAPWmnjOErd4Ske+lZua5K9TtAVdx0gMBClJ28DViCbSmZitjWZsWO3LA== + dependencies: + "@rolldown/pluginutils" "1.0.0-beta.50" + +"@vue/compiler-core@3.5.25": + version "3.5.25" + resolved "https://registry.yarnpkg.com/@vue/compiler-core/-/compiler-core-3.5.25.tgz#7ffb658d7919348baad8c491eb5b948ee8e44108" + integrity sha512-vay5/oQJdsNHmliWoZfHPoVZZRmnSWhug0BYT34njkYTPqClh3DNWLkZNJBVSjsNMrg0CCrBfoKkjZQPM/QVUw== + dependencies: + "@babel/parser" "^7.28.5" + "@vue/shared" "3.5.25" + entities "^4.5.0" + estree-walker "^2.0.2" + source-map-js "^1.2.1" + +"@vue/compiler-dom@3.5.25": + version "3.5.25" + resolved "https://registry.yarnpkg.com/@vue/compiler-dom/-/compiler-dom-3.5.25.tgz#dd799ac2474cda54303039310b8994f0cfb40957" + integrity sha512-4We0OAcMZsKgYoGlMjzYvaoErltdFI2/25wqanuTu+S4gismOTRTBPi4IASOjxWdzIwrYSjnqONfKvuqkXzE2Q== + dependencies: + "@vue/compiler-core" "3.5.25" + "@vue/shared" "3.5.25" + +"@vue/compiler-sfc@3.5.25": + version "3.5.25" + resolved "https://registry.yarnpkg.com/@vue/compiler-sfc/-/compiler-sfc-3.5.25.tgz#30377920c3869c3bb32111aa4aefad53921831ad" + integrity sha512-PUgKp2rn8fFsI++lF2sO7gwO2d9Yj57Utr5yEsDf3GNaQcowCLKL7sf+LvVFvtJDXUp/03+dC6f2+LCv5aK1ag== + dependencies: + "@babel/parser" "^7.28.5" + "@vue/compiler-core" "3.5.25" + "@vue/compiler-dom" "3.5.25" + "@vue/compiler-ssr" "3.5.25" + "@vue/shared" "3.5.25" + estree-walker "^2.0.2" + magic-string "^0.30.21" + postcss "^8.5.6" + source-map-js "^1.2.1" + +"@vue/compiler-ssr@3.5.25": + version "3.5.25" + resolved "https://registry.yarnpkg.com/@vue/compiler-ssr/-/compiler-ssr-3.5.25.tgz#51dd89b88a1e044d1beab158c91a29963d28eb96" + integrity sha512-ritPSKLBcParnsKYi+GNtbdbrIE1mtuFEJ4U1sWeuOMlIziK5GtOL85t5RhsNy4uWIXPgk+OUdpnXiTdzn8o3A== + dependencies: + "@vue/compiler-dom" "3.5.25" + "@vue/shared" "3.5.25" + +"@vue/devtools-api@^8.0.5": + version "8.0.5" + resolved "https://registry.yarnpkg.com/@vue/devtools-api/-/devtools-api-8.0.5.tgz#313c563954b06b8254100ebc0d0e3773b1a06e18" + integrity sha512-DgVcW8H/Nral7LgZEecYFFYXnAvGuN9C3L3DtWekAncFBedBczpNW8iHKExfaM559Zm8wQWrwtYZ9lXthEHtDw== + dependencies: + "@vue/devtools-kit" "^8.0.5" + +"@vue/devtools-kit@^8.0.5": + version "8.0.5" + resolved "https://registry.yarnpkg.com/@vue/devtools-kit/-/devtools-kit-8.0.5.tgz#d16927554adf527785706caa11e910ff4e00a998" + integrity sha512-q2VV6x1U3KJMTQPUlRMyWEKVbcHuxhqJdSr6Jtjz5uAThAIrfJ6WVZdGZm5cuO63ZnSUz0RCsVwiUUb0mDV0Yg== + dependencies: + "@vue/devtools-shared" "^8.0.5" + birpc "^2.6.1" + hookable "^5.5.3" + mitt "^3.0.1" + perfect-debounce "^2.0.0" + speakingurl "^14.0.1" + superjson "^2.2.2" + +"@vue/devtools-shared@^8.0.5": + version "8.0.5" + resolved "https://registry.yarnpkg.com/@vue/devtools-shared/-/devtools-shared-8.0.5.tgz#d97e887640fb2cad1e9b9e40fb46010d69852103" + integrity sha512-bRLn6/spxpmgLk+iwOrR29KrYnJjG9DGpHGkDFG82UM21ZpJ39ztUT9OXX3g+usW7/b2z+h46I9ZiYyB07XMXg== + dependencies: + rfdc "^1.4.1" + +"@vue/reactivity@3.5.25": + version "3.5.25" + resolved "https://registry.yarnpkg.com/@vue/reactivity/-/reactivity-3.5.25.tgz#2420fa02022dab3373033c955802b9cdab5435ad" + integrity sha512-5xfAypCQepv4Jog1U4zn8cZIcbKKFka3AgWHEFQeK65OW+Ys4XybP6z2kKgws4YB43KGpqp5D/K3go2UPPunLA== + dependencies: + "@vue/shared" "3.5.25" + +"@vue/runtime-core@3.5.25": + version "3.5.25" + resolved "https://registry.yarnpkg.com/@vue/runtime-core/-/runtime-core-3.5.25.tgz#5e524db201b419db6f091db440452fe4e49efdee" + integrity sha512-Z751v203YWwYzy460bzsYQISDfPjHTl+6Zzwo/a3CsAf+0ccEjQ8c+0CdX1WsumRTHeywvyUFtW6KvNukT/smA== + dependencies: + "@vue/reactivity" "3.5.25" + "@vue/shared" "3.5.25" + +"@vue/runtime-dom@3.5.25": + version "3.5.25" + resolved "https://registry.yarnpkg.com/@vue/runtime-dom/-/runtime-dom-3.5.25.tgz#ebd9815f39ee70fe32698c615cc09bda604e4e06" + integrity sha512-a4WrkYFbb19i9pjkz38zJBg8wa/rboNERq3+hRRb0dHiJh13c+6kAbgqCPfMaJ2gg4weWD3APZswASOfmKwamA== + dependencies: + "@vue/reactivity" "3.5.25" + "@vue/runtime-core" "3.5.25" + "@vue/shared" "3.5.25" + csstype "^3.1.3" + +"@vue/server-renderer@3.5.25": + version "3.5.25" + resolved "https://registry.yarnpkg.com/@vue/server-renderer/-/server-renderer-3.5.25.tgz#ca67ac93cb84dd3c3bc2f89c046a18ab04f7cc96" + integrity sha512-UJaXR54vMG61i8XNIzTSf2Q7MOqZHpp8+x3XLGtE3+fL+nQd+k7O5+X3D/uWrnQXOdMw5VPih+Uremcw+u1woQ== + dependencies: + "@vue/compiler-ssr" "3.5.25" + "@vue/shared" "3.5.25" + +"@vue/shared@3.5.25", "@vue/shared@^3.5.24": + version "3.5.25" + resolved "https://registry.yarnpkg.com/@vue/shared/-/shared-3.5.25.tgz#21edcff133a5a04f72c4e4c6142260963fe5afbe" + integrity sha512-AbOPdQQnAnzs58H2FrrDxYj/TJfmeS2jdfEEhgiKINy+bnOANmVizIEgq1r+C5zsbs6l1CCQxtcj71rwNQ4jWg== + +"@vueuse/core@14.1.0", "@vueuse/core@^14.0.0": + version "14.1.0" + resolved "https://registry.yarnpkg.com/@vueuse/core/-/core-14.1.0.tgz#274e98e591a505333b7dfb2bcaf7b4530a10b9c9" + integrity sha512-rgBinKs07hAYyPF834mDTigH7BtPqvZ3Pryuzt1SD/lg5wEcWqvwzXXYGEDb2/cP0Sj5zSvHl3WkmMELr5kfWw== + dependencies: + "@types/web-bluetooth" "^0.0.21" + "@vueuse/metadata" "14.1.0" + "@vueuse/shared" "14.1.0" + +"@vueuse/integrations@^14.0.0": + version "14.1.0" + resolved "https://registry.yarnpkg.com/@vueuse/integrations/-/integrations-14.1.0.tgz#cda3b828125487474632cbcfd2e140f7efa9becd" + integrity sha512-eNQPdisnO9SvdydTIXnTE7c29yOsJBD/xkwEyQLdhDC/LKbqrFpXHb3uS//7NcIrQO3fWVuvMGp8dbK6mNEMCA== + dependencies: + "@vueuse/core" "14.1.0" + "@vueuse/shared" "14.1.0" + +"@vueuse/metadata@14.1.0": + version "14.1.0" + resolved "https://registry.yarnpkg.com/@vueuse/metadata/-/metadata-14.1.0.tgz#70fc2e94775e4a07369f11f86f6f0a465b04a381" + integrity sha512-7hK4g015rWn2PhKcZ99NyT+ZD9sbwm7SGvp7k+k+rKGWnLjS/oQozoIZzWfCewSUeBmnJkIb+CNr7Zc/EyRnnA== + +"@vueuse/shared@14.1.0": + version "14.1.0" + resolved "https://registry.yarnpkg.com/@vueuse/shared/-/shared-14.1.0.tgz#49b2face86a9c0c52e20eaf4c732a0223276c11f" + integrity sha512-EcKxtYvn6gx1F8z9J5/rsg3+lTQnvOruQd8fUecW99DCK04BkWD7z5KQ/wTAx+DazyoEE9dJt/zV8OIEQbM6kw== + +aggregate-error@^3.0.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/aggregate-error/-/aggregate-error-3.1.0.tgz#92670ff50f5359bdb7a3e0d40d0ec30c5737687a" + integrity sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA== + dependencies: + clean-stack "^2.0.0" + indent-string "^4.0.0" + +ansi-colors@^4.1.1: + version "4.1.3" + resolved "https://registry.yarnpkg.com/ansi-colors/-/ansi-colors-4.1.3.tgz#37611340eb2243e70cc604cad35d63270d48781b" + integrity sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw== + +ansi-escapes@^4.3.0: + version "4.3.2" + resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-4.3.2.tgz#6b2291d1db7d98b6521d5f1efa42d0f3a9feb65e" + integrity sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ== + dependencies: + type-fest "^0.21.3" + +ansi-regex@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.1.tgz#082cb2c89c9fe8659a311a53bd6a4dc5301db304" + integrity sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ== + +ansi-styles@^4.0.0, ansi-styles@^4.1.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-4.3.0.tgz#edd803628ae71c04c85ae7a0906edad34b648937" + integrity sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg== + dependencies: + color-convert "^2.0.1" + +ansi-styles@^5.0.0: + version "5.2.0" + resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-5.2.0.tgz#07449690ad45777d1924ac2abb2fc8895dba836b" + integrity sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA== + +append-transform@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/append-transform/-/append-transform-2.0.0.tgz#99d9d29c7b38391e6f428d28ce136551f0b77e12" + integrity sha512-7yeyCEurROLQJFv5Xj4lEGTy0borxepjFv1g22oAdqFu//SrAlDl1O1Nxx15SH1RoliUml6p8dwJW9jvZughhg== + dependencies: + default-require-extensions "^3.0.0" + +arch@^2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/arch/-/arch-2.2.0.tgz#1bc47818f305764f23ab3306b0bfc086c5a29d11" + integrity sha512-Of/R0wqp83cgHozfIYLbBMnej79U/SVGOOyuB3VVFv1NRM/PSFMK12x9KVtiYzJqmnU5WR2qp0Z5rHb7sWGnFQ== + +archy@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/archy/-/archy-1.0.0.tgz#f9c8c13757cc1dd7bc379ac77b2c62a5c2868c40" + integrity sha512-Xg+9RwCg/0p32teKdGMPTPnVXKD0w3DfHnFTficozsAgsvq2XenPJq/MYpzzQ/v8zrOyJn6Ds39VA4JIDwFfqw== + +argparse@^1.0.7: + version "1.0.10" + resolved "https://registry.yarnpkg.com/argparse/-/argparse-1.0.10.tgz#bcd6791ea5ae09725e17e5ad988134cd40b3d911" + integrity sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg== + dependencies: + sprintf-js "~1.0.2" + +argparse@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/argparse/-/argparse-2.0.1.tgz#246f50f3ca78a3240f6c997e8a9bd1eac49e4b38" + integrity sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q== + +aria-query@5.3.0: + version "5.3.0" + resolved "https://registry.yarnpkg.com/aria-query/-/aria-query-5.3.0.tgz#650c569e41ad90b51b3d7df5e5eed1c7549c103e" + integrity sha512-b0P0sZPKtyu8HkeRAfCq0IfURZK+SuwMjY1UXGBU27wpAiTwQAIlq56IbIO+ytk/JjS1fMR14ee5WBBfKi5J6A== + dependencies: + dequal "^2.0.3" + +aria-query@^5.0.0: + version "5.3.2" + resolved "https://registry.yarnpkg.com/aria-query/-/aria-query-5.3.2.tgz#93f81a43480e33a338f19163a3d10a50c01dcd59" + integrity sha512-COROpnaoap1E2F000S62r6A60uHZnmlvomhfyT2DlTcrY1OrBKn2UhH7qn5wTC9zMvD0AY7csdPSNwKP+7WiQw== + +asn1@~0.2.3: + version "0.2.6" + resolved "https://registry.yarnpkg.com/asn1/-/asn1-0.2.6.tgz#0d3a7bb6e64e02a90c0303b31f292868ea09a08d" + integrity sha512-ix/FxPn0MDjeyJ7i/yoHGFt/EX6LyNbxSEhPPXODPL+KB0VPk86UYfL0lMdy+KCnv+fmvIzySwaK5COwqVbWTQ== + dependencies: + safer-buffer "~2.1.0" + +assert-plus@1.0.0, assert-plus@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/assert-plus/-/assert-plus-1.0.0.tgz#f12e0f3c5d77b0b1cdd9146942e4e96c1e4dd525" + integrity sha512-NfJ4UzBCcQGLDlQq7nHxH+tv3kyZ0hHQqF5BO6J7tNJeP5do1llPr8dZ8zHonfhAu0PHAdMkSo+8o0wxg9lZWw== + +astral-regex@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/astral-regex/-/astral-regex-2.0.0.tgz#483143c567aeed4785759c0865786dc77d7d2e31" + integrity sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ== + +async@^3.2.0: + version "3.2.6" + resolved "https://registry.yarnpkg.com/async/-/async-3.2.6.tgz#1b0728e14929d51b85b449b7f06e27c1145e38ce" + integrity sha512-htCUDlxyyCLMgaM3xXg0C0LW2xqfuQ6p05pCEIsXuyQ+a1koYKTuBMzRNwmybfLgvJDMd0r1LTn4+E0Ti6C2AA== + +asynckit@^0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79" + integrity sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q== + +at-least-node@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/at-least-node/-/at-least-node-1.0.0.tgz#602cd4b46e844ad4effc92a8011a3c46e0238dc2" + integrity sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg== + +aws-sign2@~0.7.0: + version "0.7.0" + resolved "https://registry.yarnpkg.com/aws-sign2/-/aws-sign2-0.7.0.tgz#b46e890934a9591f2d2f6f86d7e6a9f1b3fe76a8" + integrity sha512-08kcGqnYf/YmjoRhfxyu+CLxBjUtHLXLXX/vUfx9l2LYzG3c1m61nrpyFUZI6zeS+Li/wWMMidD9KgrqtGq3mA== + +aws4@^1.8.0: + version "1.13.2" + resolved "https://registry.yarnpkg.com/aws4/-/aws4-1.13.2.tgz#0aa167216965ac9474ccfa83892cfb6b3e1e52ef" + integrity sha512-lHe62zvbTB5eEABUVi/AwVh0ZKY9rMMDhmm+eeyuuUQbQ3+J+fONVQOZyj+DdrvD4BY33uYniyRJ4UJIaSKAfw== + +balanced-match@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee" + integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw== + +base64-js@^1.3.1: + version "1.5.1" + resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.5.1.tgz#1b1b440160a5bf7ad40b650f095963481903930a" + integrity sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA== + +baseline-browser-mapping@^2.9.0: + version "2.9.6" + resolved "https://registry.yarnpkg.com/baseline-browser-mapping/-/baseline-browser-mapping-2.9.6.tgz#82de0f7ee5860df86d60daf0d9524ae7227eeee7" + integrity sha512-v9BVVpOTLB59C9E7aSnmIF8h7qRsFpx+A2nugVMTszEOMcfjlZMsXRm4LF23I3Z9AJxc8ANpIvzbzONoX9VJlg== + +bcrypt-pbkdf@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz#a4301d389b6a43f9b67ff3ca11a3f6637e360e9e" + integrity sha512-qeFIXtP4MSoi6NLqO12WfqARWWuCKi2Rn/9hJLEmtB5yTNr9DqFWkJRCf2qShWzPeAMRnOgCrq0sg/KLv5ES9w== + dependencies: + tweetnacl "^0.14.3" + +birpc@^2.6.1: + version "2.9.0" + resolved "https://registry.yarnpkg.com/birpc/-/birpc-2.9.0.tgz#b59550897e4cd96a223e2a6c1475b572236ed145" + integrity sha512-KrayHS5pBi69Xi9JmvoqrIgYGDkD6mcSe/i6YKi3w5kekCLzrX4+nawcXqrj2tIp50Kw/mT/s3p+GVK0A0sKxw== + +blob-util@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/blob-util/-/blob-util-2.0.2.tgz#3b4e3c281111bb7f11128518006cdc60b403a1eb" + integrity sha512-T7JQa+zsXXEa6/8ZhHcQEW1UFfVM49Ts65uBkFL6fz2QmrElqmbajIDJvuA0tEhRe5eIjpV9ZF+0RfZR9voJFQ== + +bluebird@3.7.1: + version "3.7.1" + resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.7.1.tgz#df70e302b471d7473489acf26a93d63b53f874de" + integrity sha512-DdmyoGCleJnkbp3nkbxTLJ18rjDsE4yCggEwKNXkeV123sPNfOCYeDoeuOY+F2FrSjO1YXcTU+dsy96KMy+gcg== + +bluebird@^3.7.2: + version "3.7.2" + resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.7.2.tgz#9f229c15be272454ffa973ace0dbee79a1b0c36f" + integrity sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg== + +brace-expansion@^1.1.7: + version "1.1.12" + resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.12.tgz#ab9b454466e5a8cc3a187beaad580412a9c5b843" + integrity sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg== + dependencies: + balanced-match "^1.0.0" + concat-map "0.0.1" + +browserslist@^4.24.0: + version "4.28.1" + resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.28.1.tgz#7f534594628c53c63101079e27e40de490456a95" + integrity sha512-ZC5Bd0LgJXgwGqUknZY/vkUQ04r8NXnJZ3yYi4vDmSiZmC/pdSN0NbNRPxZpbtO4uAfDUAFffO8IZoM3Gj8IkA== + dependencies: + baseline-browser-mapping "^2.9.0" + caniuse-lite "^1.0.30001759" + electron-to-chromium "^1.5.263" + node-releases "^2.0.27" + update-browserslist-db "^1.2.0" + +buffer-crc32@~0.2.3: + version "0.2.13" + resolved "https://registry.yarnpkg.com/buffer-crc32/-/buffer-crc32-0.2.13.tgz#0d333e3f00eac50aa1454abd30ef8c2a5d9a7242" + integrity sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ== + +buffer@^5.7.1: + version "5.7.1" + resolved "https://registry.yarnpkg.com/buffer/-/buffer-5.7.1.tgz#ba62e7c13133053582197160851a8f648e99eed0" + integrity sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ== + dependencies: + base64-js "^1.3.1" + ieee754 "^1.1.13" + +cachedir@^2.3.0: + version "2.4.0" + resolved "https://registry.yarnpkg.com/cachedir/-/cachedir-2.4.0.tgz#7fef9cf7367233d7c88068fe6e34ed0d355a610d" + integrity sha512-9EtFOZR8g22CL7BWjJ9BUx1+A/djkofnyW3aOXZORNW2kxoUpx2h+uN2cOqwPmFhnpVmxg+KW2OjOSgChTEvsQ== + +caching-transform@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/caching-transform/-/caching-transform-4.0.0.tgz#00d297a4206d71e2163c39eaffa8157ac0651f0f" + integrity sha512-kpqOvwXnjjN44D89K5ccQC+RUrsy7jB/XLlRrx0D7/2HNcTPqzsb6XgYoErwko6QsV184CA2YgS1fxDiiDZMWA== + dependencies: + hasha "^5.0.0" + make-dir "^3.0.0" + package-hash "^4.0.0" + write-file-atomic "^3.0.0" + +call-bind-apply-helpers@^1.0.1, call-bind-apply-helpers@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz#4b5428c222be985d79c3d82657479dbe0b59b2d6" + integrity sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ== + dependencies: + es-errors "^1.3.0" + function-bind "^1.1.2" + +call-bound@^1.0.2: + version "1.0.4" + resolved "https://registry.yarnpkg.com/call-bound/-/call-bound-1.0.4.tgz#238de935d2a2a692928c538c7ccfa91067fd062a" + integrity sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg== + dependencies: + call-bind-apply-helpers "^1.0.2" + get-intrinsic "^1.3.0" + +camelcase@^5.0.0, camelcase@^5.3.1: + version "5.3.1" + resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-5.3.1.tgz#e3c9b31569e106811df242f715725a1f4c494320" + integrity sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg== + +caniuse-lite@^1.0.30001759: + version "1.0.30001760" + resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001760.tgz#bdd1960fafedf8d5f04ff16e81460506ff9b798f" + integrity sha512-7AAMPcueWELt1p3mi13HR/LHH0TJLT11cnwDJEs3xA4+CK/PLKeO9Kl1oru24htkyUKtkGCvAx4ohB0Ttry8Dw== + +caseless@~0.12.0: + version "0.12.0" + resolved "https://registry.yarnpkg.com/caseless/-/caseless-0.12.0.tgz#1b681c21ff84033c826543090689420d187151dc" + integrity sha512-4tYFyifaFfGacoiObjJegolkwSU4xQNGbVgUiNYVUxbQ2x2lUsFvY4hVgVzGiIe6WLOPqycWXA40l+PWsxthUw== + +ccount@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/ccount/-/ccount-2.0.1.tgz#17a3bf82302e0870d6da43a01311a8bc02a3ecf5" + integrity sha512-eyrF0jiFpY+3drT6383f1qhkbGsLSifNAjA61IUjZjmLCWjItY6LB9ft9YhoDgwfmclB2zhu51Lc7+95b8NRAg== + +chalk@4.1.2, chalk@^4.1.0: + version "4.1.2" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.2.tgz#aac4e2b7734a740867aeb16bf02aad556a1e7a01" + integrity sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA== + dependencies: + ansi-styles "^4.1.0" + supports-color "^7.1.0" + +character-entities-html4@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/character-entities-html4/-/character-entities-html4-2.1.0.tgz#1f1adb940c971a4b22ba39ddca6b618dc6e56b2b" + integrity sha512-1v7fgQRj6hnSwFpq1Eu0ynr/CDEw0rXo2B61qXrLNdHZmPKgb7fqS1a2JwF0rISo9q77jDI8VMEHoApn8qDoZA== + +character-entities-legacy@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/character-entities-legacy/-/character-entities-legacy-3.0.0.tgz#76bc83a90738901d7bc223a9e93759fdd560125b" + integrity sha512-RpPp0asT/6ufRm//AJVwpViZbGM/MkjQFxJccQRHmISF/22NBtsHqAWmL+/pmkPWoIUJdWyeVleTl1wydHATVQ== + +check-more-types@^2.24.0: + version "2.24.0" + resolved "https://registry.yarnpkg.com/check-more-types/-/check-more-types-2.24.0.tgz#1420ffb10fd444dcfc79b43891bbfffd32a84600" + integrity sha512-Pj779qHxV2tuapviy1bSZNEL1maXr13bPYpsvSDB68HlYcYuhlDrmGd63i0JHMCLKzc7rUSNIrpdJlhVlNwrxA== + +ci-info@^4.0.0: + version "4.3.1" + resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-4.3.1.tgz#355ad571920810b5623e11d40232f443f16f1daa" + integrity sha512-Wdy2Igu8OcBpI2pZePZ5oWjPC38tmDVx5WKUXKwlLYkA0ozo85sLsLvkBbBn/sZaSCMFOGZJ14fvW9t5/d7kdA== + +clean-stack@^2.0.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/clean-stack/-/clean-stack-2.2.0.tgz#ee8472dbb129e727b31e8a10a427dee9dfe4008b" + integrity sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A== + +cli-cursor@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/cli-cursor/-/cli-cursor-3.1.0.tgz#264305a7ae490d1d03bf0c9ba7c925d1753af307" + integrity sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw== + dependencies: + restore-cursor "^3.1.0" + +cli-table3@~0.6.1: + version "0.6.5" + resolved "https://registry.yarnpkg.com/cli-table3/-/cli-table3-0.6.5.tgz#013b91351762739c16a9567c21a04632e449bf2f" + integrity sha512-+W/5efTR7y5HRD7gACw9yQjqMVvEMLBHmboM/kPWam+H+Hmyrgjh6YncVKK122YZkXrLudzTuAukUw9FnMf7IQ== + dependencies: + string-width "^4.2.0" + optionalDependencies: + "@colors/colors" "1.5.0" + +cli-truncate@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/cli-truncate/-/cli-truncate-2.1.0.tgz#c39e28bf05edcde5be3b98992a22deed5a2b93c7" + integrity sha512-n8fOixwDD6b/ObinzTrp1ZKFzbgvKZvuz/TvejnLn1aQfC6r52XEx85FmuC+3HI+JM7coBRXUvNqEU2PHVrHpg== + dependencies: + slice-ansi "^3.0.0" + string-width "^4.2.0" + +cliui@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/cliui/-/cliui-6.0.0.tgz#511d702c0c4e41ca156d7d0e96021f23e13225b1" + integrity sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ== + dependencies: + string-width "^4.2.0" + strip-ansi "^6.0.0" + wrap-ansi "^6.2.0" + +color-convert@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-2.0.1.tgz#72d3a68d598c9bdb3af2ad1e84f21d896abd4de3" + integrity sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ== + dependencies: + color-name "~1.1.4" + +color-name@~1.1.4: + version "1.1.4" + resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2" + integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== + +colorette@^2.0.16: + version "2.0.20" + resolved "https://registry.yarnpkg.com/colorette/-/colorette-2.0.20.tgz#9eb793e6833067f7235902fcd3b09917a000a95a" + integrity sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w== + +combined-stream@^1.0.8, combined-stream@~1.0.6: + version "1.0.8" + resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.8.tgz#c3d45a8b34fd730631a110a8a2520682b31d5a7f" + integrity sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg== + dependencies: + delayed-stream "~1.0.0" + +comma-separated-tokens@^2.0.0: + version "2.0.3" + resolved "https://registry.yarnpkg.com/comma-separated-tokens/-/comma-separated-tokens-2.0.3.tgz#4e89c9458acb61bc8fef19f4529973b2392839ee" + integrity sha512-Fu4hJdvzeylCfQPp9SGWidpzrMs7tTrlu6Vb8XGaRGck8QSNZJJp538Wrb60Lax4fPwR64ViY468OIUTbRlGZg== + +commander@^6.2.1: + version "6.2.1" + resolved "https://registry.yarnpkg.com/commander/-/commander-6.2.1.tgz#0792eb682dfbc325999bb2b84fddddba110ac73c" + integrity sha512-U7VdrJFnJgo4xjrHpTzu0yrHPGImdsmD95ZlgYSEajAn2JKzDhDTPG9kBTefmObL2w/ngeZnilk+OV9CG3d7UA== + +common-tags@^1.8.0: + version "1.8.2" + resolved "https://registry.yarnpkg.com/common-tags/-/common-tags-1.8.2.tgz#94ebb3c076d26032745fd54face7f688ef5ac9c6" + integrity sha512-gk/Z852D2Wtb//0I+kRFNKKE9dIIVirjoqPoA1wJU+XePVXZfGeBpk45+A1rKO4Q43prqWBNY/MiIeRLbPWUaA== + +commondir@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/commondir/-/commondir-1.0.1.tgz#ddd800da0c66127393cca5950ea968a3aaf1253b" + integrity sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg== + +concat-map@0.0.1: + version "0.0.1" + resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" + integrity sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg== + +convert-source-map@^1.7.0: + version "1.9.0" + resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.9.0.tgz#7faae62353fb4213366d0ca98358d22e8368b05f" + integrity sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A== + +convert-source-map@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-2.0.0.tgz#4b560f649fc4e918dd0ab75cf4961e8bc882d82a" + integrity sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg== + +copy-anything@^4: + version "4.0.5" + resolved "https://registry.yarnpkg.com/copy-anything/-/copy-anything-4.0.5.tgz#16cabafd1ea4bb327a540b750f2b4df522825aea" + integrity sha512-7Vv6asjS4gMOuILabD3l739tsaxFQmC+a7pLZm02zyvs8p977bL3zEgq3yDk5rn9B0PbYgIv++jmHcuUab4RhA== + dependencies: + is-what "^5.2.0" + +core-util-is@1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7" + integrity sha512-3lqz5YjWTYnW6dlDa5TLaTCcShfar1e40rmcJVwCBJC6mWlFuj0eCHIElmG1g5kyuJ/GD+8Wn4FFCcz4gJPfaQ== + +cross-spawn@^7.0.0, cross-spawn@^7.0.3: + version "7.0.6" + resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.6.tgz#8a58fe78f00dcd70c370451759dfbfaf03e8ee9f" + integrity sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA== + dependencies: + path-key "^3.1.0" + shebang-command "^2.0.0" + which "^2.0.1" + +csstype@^3.1.3: + version "3.2.3" + resolved "https://registry.yarnpkg.com/csstype/-/csstype-3.2.3.tgz#ec48c0f3e993e50648c86da559e2610995cf989a" + integrity sha512-z1HGKcYy2xA8AGQfwrn0PAy+PB7X/GSj3UVJW9qKyn43xWa+gl5nXmU4qqLMRzWVLFC8KusUX8T/0kCiOYpAIQ== + +cypress-real-events@^1.7.6: + version "1.15.0" + resolved "https://registry.yarnpkg.com/cypress-real-events/-/cypress-real-events-1.15.0.tgz#b84ed97455238139ac3d0c8f803991b30f22fc8a" + integrity sha512-in98xxTnnM9Z7lZBvvVozm99PBT2eEOjXRG5LKWyYvQnj9mGWXMiPNpfw7e7WiraBFh7XlXIxnE9Cu5o+52kQQ== + +cypress@^13.1.0: + version "13.17.0" + resolved "https://registry.yarnpkg.com/cypress/-/cypress-13.17.0.tgz#34c3d68080c4497eace0f353bd1629587a5f600d" + integrity sha512-5xWkaPurwkIljojFidhw8lFScyxhtiFHl/i/3zov+1Z5CmY4t9tjIdvSXfu82Y3w7wt0uR9KkucbhkVvJZLQSA== + dependencies: + "@cypress/request" "^3.0.6" + "@cypress/xvfb" "^1.2.4" + "@types/sinonjs__fake-timers" "8.1.1" + "@types/sizzle" "^2.3.2" + arch "^2.2.0" + blob-util "^2.0.2" + bluebird "^3.7.2" + buffer "^5.7.1" + cachedir "^2.3.0" + chalk "^4.1.0" + check-more-types "^2.24.0" + ci-info "^4.0.0" + cli-cursor "^3.1.0" + cli-table3 "~0.6.1" + commander "^6.2.1" + common-tags "^1.8.0" + dayjs "^1.10.4" + debug "^4.3.4" + enquirer "^2.3.6" + eventemitter2 "6.4.7" + execa "4.1.0" + executable "^4.1.1" + extract-zip "2.0.1" + figures "^3.2.0" + fs-extra "^9.1.0" + getos "^3.2.1" + is-installed-globally "~0.4.0" + lazy-ass "^1.6.0" + listr2 "^3.8.3" + lodash "^4.17.21" + log-symbols "^4.0.0" + minimist "^1.2.8" + ospath "^1.2.2" + pretty-bytes "^5.6.0" + process "^0.11.10" + proxy-from-env "1.0.0" + request-progress "^3.0.0" + semver "^7.5.3" + supports-color "^8.1.1" + tmp "~0.2.3" + tree-kill "1.2.2" + untildify "^4.0.0" + yauzl "^2.10.0" + +dashdash@^1.12.0: + version "1.14.1" + resolved "https://registry.yarnpkg.com/dashdash/-/dashdash-1.14.1.tgz#853cfa0f7cbe2fed5de20326b8dd581035f6e2f0" + integrity sha512-jRFi8UDGo6j+odZiEpjazZaWqEal3w/basFjQHQEwVtZJGDpxbH1MeYluwCS8Xq5wmLJooDlMgvVarmWfGM44g== + dependencies: + assert-plus "^1.0.0" + +dayjs@1.11.13: + version "1.11.13" + resolved "https://registry.yarnpkg.com/dayjs/-/dayjs-1.11.13.tgz#92430b0139055c3ebb60150aa13e860a4b5a366c" + integrity sha512-oaMBel6gjolK862uaPQOVTA7q3TZhuSvuMQAAglQDOWYO9A91IrAOUJEyKVlqJlHE0vq5p5UXxzdPfMH/x6xNg== + +dayjs@^1.10.4: + version "1.11.19" + resolved "https://registry.yarnpkg.com/dayjs/-/dayjs-1.11.19.tgz#15dc98e854bb43917f12021806af897c58ae2938" + integrity sha512-t5EcLVS6QPBNqM2z8fakk/NKel+Xzshgt8FFKAn+qwlD1pzZWxh0nVCrvFK7ZDb6XucZeF9z8C7CBWTRIVApAw== + +debug@4.4.0: + version "4.4.0" + resolved "https://registry.yarnpkg.com/debug/-/debug-4.4.0.tgz#2b3f2aea2ffeb776477460267377dc8710faba8a" + integrity sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA== + dependencies: + ms "^2.1.3" + +debug@^3.1.0: + version "3.2.7" + resolved "https://registry.yarnpkg.com/debug/-/debug-3.2.7.tgz#72580b7e9145fb39b6676f9c5e5fb100b934179a" + integrity sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ== + dependencies: + ms "^2.1.1" + +debug@^4.1.0, debug@^4.1.1, debug@^4.3.1, debug@^4.3.4: + version "4.4.3" + resolved "https://registry.yarnpkg.com/debug/-/debug-4.4.3.tgz#c6ae432d9bd9662582fce08709b038c58e9e3d6a" + integrity sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA== + dependencies: + ms "^2.1.3" + +decamelize@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290" + integrity sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA== + +default-require-extensions@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/default-require-extensions/-/default-require-extensions-3.0.1.tgz#bfae00feeaeada68c2ae256c62540f60b80625bd" + integrity sha512-eXTJmRbm2TIt9MgWTsOH1wEuhew6XGZcMeGKCtLedIg/NCsg1iBePXkceTdK4Fii7pzmN9tGsZhKzZ4h7O/fxw== + dependencies: + strip-bom "^4.0.0" + +delayed-stream@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619" + integrity sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ== + +dequal@^2.0.0, dequal@^2.0.3: + version "2.0.3" + resolved "https://registry.yarnpkg.com/dequal/-/dequal-2.0.3.tgz#2644214f1997d39ed0ee0ece72335490a7ac67be" + integrity sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA== + +devlop@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/devlop/-/devlop-1.1.0.tgz#4db7c2ca4dc6e0e834c30be70c94bbc976dc7018" + integrity sha512-RWmIqhcFf1lRYBvNmr7qTNuyCt/7/ns2jbpp1+PalgE/rDQcBT0fioSMUpJ93irlUhC5hrg4cYqe6U+0ImW0rA== + dependencies: + dequal "^2.0.0" + +dom-accessibility-api@^0.5.9: + version "0.5.16" + resolved "https://registry.yarnpkg.com/dom-accessibility-api/-/dom-accessibility-api-0.5.16.tgz#5a7429e6066eb3664d911e33fb0e45de8eb08453" + integrity sha512-X7BJ2yElsnOJ30pZF4uIIDfBEVgF4XEBxL9Bxhy6dnrm5hkzqmsWHGTiHqRiITNhMyFLyAiWndIJP7Z1NTteDg== + +dunder-proto@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/dunder-proto/-/dunder-proto-1.0.1.tgz#d7ae667e1dc83482f8b70fd0f6eefc50da30f58a" + integrity sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A== + dependencies: + call-bind-apply-helpers "^1.0.1" + es-errors "^1.3.0" + gopd "^1.2.0" + +ecc-jsbn@~0.1.1: + version "0.1.2" + resolved "https://registry.yarnpkg.com/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz#3a83a904e54353287874c564b7549386849a98c9" + integrity sha512-eh9O+hwRHNbG4BLTjEl3nw044CkGm5X6LoaCf7LPp7UU8Qrt47JYNi6nPX8xjW97TKGKm1ouctg0QSpZe9qrnw== + dependencies: + jsbn "~0.1.0" + safer-buffer "^2.1.0" + +electron-to-chromium@^1.5.263: + version "1.5.267" + resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.5.267.tgz#5d84f2df8cdb6bfe7e873706bb21bd4bfb574dc7" + integrity sha512-0Drusm6MVRXSOJpGbaSVgcQsuB4hEkMpHXaVstcPmhu5LIedxs1xNK/nIxmQIU/RPC0+1/o0AVZfBTkTNJOdUw== + +emoji-regex@^8.0.0: + version "8.0.0" + resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-8.0.0.tgz#e818fd69ce5ccfcb404594f842963bf53164cc37" + integrity sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A== + +end-of-stream@^1.1.0: + version "1.4.5" + resolved "https://registry.yarnpkg.com/end-of-stream/-/end-of-stream-1.4.5.tgz#7344d711dea40e0b74abc2ed49778743ccedb08c" + integrity sha512-ooEGc6HP26xXq/N+GCGOT0JKCLDGrq2bQUZrQ7gyrJiZANJ/8YDTxTpQBXGMn+WbIQXNVpyWymm7KYVICQnyOg== + dependencies: + once "^1.4.0" + +enquirer@^2.3.6: + version "2.4.1" + resolved "https://registry.yarnpkg.com/enquirer/-/enquirer-2.4.1.tgz#93334b3fbd74fc7097b224ab4a8fb7e40bf4ae56" + integrity sha512-rRqJg/6gd538VHvR3PSrdRBb/1Vy2YfzHqzvbhGIQpDRKIa4FgV/54b5Q1xYSxOOwKvjXweS26E0Q+nAMwp2pQ== + dependencies: + ansi-colors "^4.1.1" + strip-ansi "^6.0.1" + +entities@^4.5.0: + version "4.5.0" + resolved "https://registry.yarnpkg.com/entities/-/entities-4.5.0.tgz#5d268ea5e7113ec74c4d033b79ea5a35a488fb48" + integrity sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw== + +es-define-property@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/es-define-property/-/es-define-property-1.0.1.tgz#983eb2f9a6724e9303f61addf011c72e09e0b0fa" + integrity sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g== + +es-errors@^1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/es-errors/-/es-errors-1.3.0.tgz#05f75a25dab98e4fb1dcd5e1472c0546d5057c8f" + integrity sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw== + +es-object-atoms@^1.0.0, es-object-atoms@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/es-object-atoms/-/es-object-atoms-1.1.1.tgz#1c4f2c4837327597ce69d2ca190a7fdd172338c1" + integrity sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA== + dependencies: + es-errors "^1.3.0" + +es-set-tostringtag@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/es-set-tostringtag/-/es-set-tostringtag-2.1.0.tgz#f31dbbe0c183b00a6d26eb6325c810c0fd18bd4d" + integrity sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA== + dependencies: + es-errors "^1.3.0" + get-intrinsic "^1.2.6" + has-tostringtag "^1.0.2" + hasown "^2.0.2" + +es6-error@^4.0.1: + version "4.1.1" + resolved "https://registry.yarnpkg.com/es6-error/-/es6-error-4.1.1.tgz#9e3af407459deed47e9a91f9b885a84eb05c561d" + integrity sha512-Um/+FxMr9CISWh0bi5Zv0iOD+4cFh5qLeks1qhAopKVAJw3drgKbKySikp7wGhDL0HPeaja0P5ULZrxLkniUVg== + +esbuild@^0.25.0: + version "0.25.12" + resolved "https://registry.yarnpkg.com/esbuild/-/esbuild-0.25.12.tgz#97a1d041f4ab00c2fce2f838d2b9969a2d2a97a5" + integrity sha512-bbPBYYrtZbkt6Os6FiTLCTFxvq4tt3JKall1vRwshA3fdVztsLAatFaZobhkBC8/BrPetoa0oksYoKXoG4ryJg== + optionalDependencies: + "@esbuild/aix-ppc64" "0.25.12" + "@esbuild/android-arm" "0.25.12" + "@esbuild/android-arm64" "0.25.12" + "@esbuild/android-x64" "0.25.12" + "@esbuild/darwin-arm64" "0.25.12" + "@esbuild/darwin-x64" "0.25.12" + "@esbuild/freebsd-arm64" "0.25.12" + "@esbuild/freebsd-x64" "0.25.12" + "@esbuild/linux-arm" "0.25.12" + "@esbuild/linux-arm64" "0.25.12" + "@esbuild/linux-ia32" "0.25.12" + "@esbuild/linux-loong64" "0.25.12" + "@esbuild/linux-mips64el" "0.25.12" + "@esbuild/linux-ppc64" "0.25.12" + "@esbuild/linux-riscv64" "0.25.12" + "@esbuild/linux-s390x" "0.25.12" + "@esbuild/linux-x64" "0.25.12" + "@esbuild/netbsd-arm64" "0.25.12" + "@esbuild/netbsd-x64" "0.25.12" + "@esbuild/openbsd-arm64" "0.25.12" + "@esbuild/openbsd-x64" "0.25.12" + "@esbuild/openharmony-arm64" "0.25.12" + "@esbuild/sunos-x64" "0.25.12" + "@esbuild/win32-arm64" "0.25.12" + "@esbuild/win32-ia32" "0.25.12" + "@esbuild/win32-x64" "0.25.12" + +escalade@^3.2.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.2.0.tgz#011a3f69856ba189dffa7dc8fcce99d2a87903e5" + integrity sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA== + +escape-string-regexp@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" + integrity sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg== + +esprima@^4.0.0: + version "4.0.1" + resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71" + integrity sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A== + +estree-walker@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/estree-walker/-/estree-walker-2.0.2.tgz#52f010178c2a4c117a7757cfe942adb7d2da4cac" + integrity sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w== + +eventemitter2@6.4.7: + version "6.4.7" + resolved "https://registry.yarnpkg.com/eventemitter2/-/eventemitter2-6.4.7.tgz#a7f6c4d7abf28a14c1ef3442f21cb306a054271d" + integrity sha512-tYUSVOGeQPKt/eC1ABfhHy5Xd96N3oIijJvN3O9+TsC28T5V9yX9oEfEK5faP0EFSNVOG97qtAS68GBrQB2hDg== + +execa@4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/execa/-/execa-4.1.0.tgz#4e5491ad1572f2f17a77d388c6c857135b22847a" + integrity sha512-j5W0//W7f8UxAn8hXVnwG8tLwdiUy4FJLcSupCg6maBYZDpyBvTApK7KyuI4bKj8KOh1r2YH+6ucuYtJv1bTZA== + dependencies: + cross-spawn "^7.0.0" + get-stream "^5.0.0" + human-signals "^1.1.1" + is-stream "^2.0.0" + merge-stream "^2.0.0" + npm-run-path "^4.0.0" + onetime "^5.1.0" + signal-exit "^3.0.2" + strip-final-newline "^2.0.0" + +executable@^4.1.1: + version "4.1.1" + resolved "https://registry.yarnpkg.com/executable/-/executable-4.1.1.tgz#41532bff361d3e57af4d763b70582db18f5d133c" + integrity sha512-8iA79xD3uAch729dUG8xaaBBFGaEa0wdD2VkYLFHwlqosEj/jT66AzcreRDSgV7ehnNLBW2WR5jIXwGKjVdTLg== + dependencies: + pify "^2.2.0" + +extend@~3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.2.tgz#f8b1136b4071fbd8eb140aff858b1019ec2915fa" + integrity sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g== + +extract-zip@2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/extract-zip/-/extract-zip-2.0.1.tgz#663dca56fe46df890d5f131ef4a06d22bb8ba13a" + integrity sha512-GDhU9ntwuKyGXdZBUgTIe+vXnWj0fppUEtMDL0+idd5Sta8TGpHssn/eusA9mrPr9qNDym6SxAYZjNvCn/9RBg== + dependencies: + debug "^4.1.1" + get-stream "^5.1.0" + yauzl "^2.10.0" + optionalDependencies: + "@types/yauzl" "^2.9.1" + +extsprintf@1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.3.0.tgz#96918440e3041a7a414f8c52e3c574eb3c3e1e05" + integrity sha512-11Ndz7Nv+mvAC1j0ktTa7fAb0vLyGGX+rMHNBYQviQDGU0Hw7lhctJANqbPhu9nV9/izT/IntTgZ7Im/9LJs9g== + +extsprintf@^1.2.0: + version "1.4.1" + resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.4.1.tgz#8d172c064867f235c0c84a596806d279bf4bcc07" + integrity sha512-Wrk35e8ydCKDj/ArClo1VrPVmN8zph5V4AtHwIuHhvMXsKf73UT3BOD+azBIW+3wOJ4FhEH7zyaJCFvChjYvMA== + +fd-slicer@~1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/fd-slicer/-/fd-slicer-1.1.0.tgz#25c7c89cb1f9077f8891bbe61d8f390eae256f1e" + integrity sha512-cE1qsB/VwyQozZ+q1dGxR8LBYNZeofhEdUNGSMbQD3Gw2lAzX9Zb3uIU6Ebc/Fmyjo9AWWfnn0AUCHqtevs/8g== + dependencies: + pend "~1.2.0" + +fdir@^6.5.0: + version "6.5.0" + resolved "https://registry.yarnpkg.com/fdir/-/fdir-6.5.0.tgz#ed2ab967a331ade62f18d077dae192684d50d350" + integrity sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg== + +figures@^3.2.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/figures/-/figures-3.2.0.tgz#625c18bd293c604dc4a8ddb2febf0c88341746af" + integrity sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg== + dependencies: + escape-string-regexp "^1.0.5" + +find-cache-dir@^3.2.0: + version "3.3.2" + resolved "https://registry.yarnpkg.com/find-cache-dir/-/find-cache-dir-3.3.2.tgz#b30c5b6eff0730731aea9bbd9dbecbd80256d64b" + integrity sha512-wXZV5emFEjrridIgED11OoUKLxiYjAcqot/NJdAkOhlJ+vGzwhOAfcG5OX1jP+S0PcjEn8bdMJv+g2jwQ3Onig== + dependencies: + commondir "^1.0.1" + make-dir "^3.0.2" + pkg-dir "^4.1.0" + +find-up@^4.0.0, find-up@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/find-up/-/find-up-4.1.0.tgz#97afe7d6cdc0bc5928584b7c8d7b16e8a9aa5d19" + integrity sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw== + dependencies: + locate-path "^5.0.0" + path-exists "^4.0.0" + +focus-trap@^7.6.6: + version "7.6.6" + resolved "https://registry.yarnpkg.com/focus-trap/-/focus-trap-7.6.6.tgz#a255c1088ddc8cd4363b3023bf28b224fd38aff2" + integrity sha512-v/Z8bvMCajtx4mEXmOo7QEsIzlIOqRXTIwgUfsFOF9gEsespdbD0AkPIka1bSXZ8Y8oZ+2IVDQZePkTfEHZl7Q== + dependencies: + tabbable "^6.3.0" + +foreground-child@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/foreground-child/-/foreground-child-2.0.0.tgz#71b32800c9f15aa8f2f83f4a6bd9bff35d861a53" + integrity sha512-dCIq9FpEcyQyXKCkyzmlPTFNgrCzPudOe+mhvJU5zAtlBnGVy2yKxtfsxK2tQBThwq225jcvBjpw1Gr40uzZCA== + dependencies: + cross-spawn "^7.0.0" + signal-exit "^3.0.2" + +forever-agent@~0.6.1: + version "0.6.1" + resolved "https://registry.yarnpkg.com/forever-agent/-/forever-agent-0.6.1.tgz#fbc71f0c41adeb37f96c577ad1ed42d8fdacca91" + integrity sha512-j0KLYPhm6zeac4lz3oJ3o65qvgQCcPubiyotZrXqEaG4hNagNYO8qdlUrX5vwqv9ohqeT/Z3j6+yW067yWWdUw== + +form-data@~4.0.4: + version "4.0.5" + resolved "https://registry.yarnpkg.com/form-data/-/form-data-4.0.5.tgz#b49e48858045ff4cbf6b03e1805cebcad3679053" + integrity sha512-8RipRLol37bNs2bhoV67fiTEvdTrbMUYcFTiy3+wuuOnUog2QBHCZWXDRijWQfAkhBj2Uf5UnVaiWwA5vdd82w== + dependencies: + asynckit "^0.4.0" + combined-stream "^1.0.8" + es-set-tostringtag "^2.1.0" + hasown "^2.0.2" + mime-types "^2.1.12" + +fromentries@^1.2.0: + version "1.3.2" + resolved "https://registry.yarnpkg.com/fromentries/-/fromentries-1.3.2.tgz#e4bca6808816bf8f93b52750f1127f5a6fd86e3a" + integrity sha512-cHEpEQHUg0f8XdtZCc2ZAhrHzKzT0MrFUTcvx+hfxYu7rGMDc5SKoXFh+n4YigxsHXRzc6OrCshdR1bWH6HHyg== + +fs-extra@^9.1.0: + version "9.1.0" + resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-9.1.0.tgz#5954460c764a8da2094ba3554bf839e6b9a7c86d" + integrity sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ== + dependencies: + at-least-node "^1.0.0" + graceful-fs "^4.2.0" + jsonfile "^6.0.1" + universalify "^2.0.0" + +fs.realpath@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" + integrity sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw== + +fsevents@~2.3.2, fsevents@~2.3.3: + version "2.3.3" + resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.3.tgz#cac6407785d03675a2a5e1a5305c697b347d90d6" + integrity sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw== + +function-bind@^1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.2.tgz#2c02d864d97f3ea6c8830c464cbd11ab6eab7a1c" + integrity sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA== + +gensync@^1.0.0-beta.2: + version "1.0.0-beta.2" + resolved "https://registry.yarnpkg.com/gensync/-/gensync-1.0.0-beta.2.tgz#32a6ee76c3d7f52d46b2b1ae5d93fea8580a25e0" + integrity sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg== + +get-caller-file@^2.0.1: + version "2.0.5" + resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-2.0.5.tgz#4f94412a82db32f36e3b0b9741f8a97feb031f7e" + integrity sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg== + +get-intrinsic@^1.2.5, get-intrinsic@^1.2.6, get-intrinsic@^1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.3.0.tgz#743f0e3b6964a93a5491ed1bffaae054d7f98d01" + integrity sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ== + dependencies: + call-bind-apply-helpers "^1.0.2" + es-define-property "^1.0.1" + es-errors "^1.3.0" + es-object-atoms "^1.1.1" + function-bind "^1.1.2" + get-proto "^1.0.1" + gopd "^1.2.0" + has-symbols "^1.1.0" + hasown "^2.0.2" + math-intrinsics "^1.1.0" + +get-package-type@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/get-package-type/-/get-package-type-0.1.0.tgz#8de2d803cff44df3bc6c456e6668b36c3926e11a" + integrity sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q== + +get-proto@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/get-proto/-/get-proto-1.0.1.tgz#150b3f2743869ef3e851ec0c49d15b1d14d00ee1" + integrity sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g== + dependencies: + dunder-proto "^1.0.1" + es-object-atoms "^1.0.0" + +get-stream@^5.0.0, get-stream@^5.1.0: + version "5.2.0" + resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-5.2.0.tgz#4966a1795ee5ace65e706c4b7beb71257d6e22d3" + integrity sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA== + dependencies: + pump "^3.0.0" + +getos@^3.2.1: + version "3.2.1" + resolved "https://registry.yarnpkg.com/getos/-/getos-3.2.1.tgz#0134d1f4e00eb46144c5a9c0ac4dc087cbb27dc5" + integrity sha512-U56CfOK17OKgTVqozZjUKNdkfEv6jk5WISBJ8SHoagjE6L69zOwl3Z+O8myjY9MEW3i2HPWQBt/LTbCgcC973Q== + dependencies: + async "^3.2.0" + +getpass@^0.1.1: + version "0.1.7" + resolved "https://registry.yarnpkg.com/getpass/-/getpass-0.1.7.tgz#5eff8e3e684d569ae4cb2b1282604e8ba62149fa" + integrity sha512-0fzj9JxOLfJ+XGLhR8ze3unN0KZCgZwiSSDz168VERjK8Wl8kVSdcu2kspd4s4wtAa1y/qrVRiAA0WclVsu0ng== + dependencies: + assert-plus "^1.0.0" + +glob@^7.1.3, glob@^7.1.4, glob@^7.1.6: + version "7.2.3" + resolved "https://registry.yarnpkg.com/glob/-/glob-7.2.3.tgz#b8df0fb802bbfa8e89bd1d938b4e16578ed44f2b" + integrity sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q== + dependencies: + fs.realpath "^1.0.0" + inflight "^1.0.4" + inherits "2" + minimatch "^3.1.1" + once "^1.3.0" + path-is-absolute "^1.0.0" + +global-dirs@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/global-dirs/-/global-dirs-3.0.1.tgz#0c488971f066baceda21447aecb1a8b911d22485" + integrity sha512-NBcGGFbBA9s1VzD41QXDG+3++t9Mn5t1FpLdhESY6oKY4gYTFpX4wO3sqGUa0Srjtbfj3szX0RnemmrVRUdULA== + dependencies: + ini "2.0.0" + +gopd@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/gopd/-/gopd-1.2.0.tgz#89f56b8217bdbc8802bd299df6d7f1081d7e51a1" + integrity sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg== + +graceful-fs@^4.1.15, graceful-fs@^4.1.6, graceful-fs@^4.2.0: + version "4.2.11" + resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.11.tgz#4183e4e8bf08bb6e05bbb2f7d2e0c8f712ca40e3" + integrity sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ== + +has-flag@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b" + integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ== + +has-symbols@^1.0.3, has-symbols@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.1.0.tgz#fc9c6a783a084951d0b971fe1018de813707a338" + integrity sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ== + +has-tostringtag@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/has-tostringtag/-/has-tostringtag-1.0.2.tgz#2cdc42d40bef2e5b4eeab7c01a73c54ce7ab5abc" + integrity sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw== + dependencies: + has-symbols "^1.0.3" + +hasha@^5.0.0: + version "5.2.2" + resolved "https://registry.yarnpkg.com/hasha/-/hasha-5.2.2.tgz#a48477989b3b327aea3c04f53096d816d97522a1" + integrity sha512-Hrp5vIK/xr5SkeN2onO32H0MgNZ0f17HRNH39WfL0SYUNOTZ5Lz1TJ8Pajo/87dYGEFlLMm7mIc/k/s6Bvz9HQ== + dependencies: + is-stream "^2.0.0" + type-fest "^0.8.0" + +hasown@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/hasown/-/hasown-2.0.2.tgz#003eaf91be7adc372e84ec59dc37252cedb80003" + integrity sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ== + dependencies: + function-bind "^1.1.2" + +hast-util-to-html@^9.0.5: + version "9.0.5" + resolved "https://registry.yarnpkg.com/hast-util-to-html/-/hast-util-to-html-9.0.5.tgz#ccc673a55bb8e85775b08ac28380f72d47167005" + integrity sha512-OguPdidb+fbHQSU4Q4ZiLKnzWo8Wwsf5bZfbvu7//a9oTYoqD/fWpe96NuHkoS9h0ccGOTe0C4NGXdtS0iObOw== + dependencies: + "@types/hast" "^3.0.0" + "@types/unist" "^3.0.0" + ccount "^2.0.0" + comma-separated-tokens "^2.0.0" + hast-util-whitespace "^3.0.0" + html-void-elements "^3.0.0" + mdast-util-to-hast "^13.0.0" + property-information "^7.0.0" + space-separated-tokens "^2.0.0" + stringify-entities "^4.0.0" + zwitch "^2.0.4" + +hast-util-whitespace@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/hast-util-whitespace/-/hast-util-whitespace-3.0.0.tgz#7778ed9d3c92dd9e8c5c8f648a49c21fc51cb621" + integrity sha512-88JUN06ipLwsnv+dVn+OIYOvAuvBMy/Qoi6O7mQHxdPXpjy+Cd6xRkWwux7DKO+4sYILtLBRIKgsdpS2gQc7qw== + dependencies: + "@types/hast" "^3.0.0" + +hookable@^5.5.3: + version "5.5.3" + resolved "https://registry.yarnpkg.com/hookable/-/hookable-5.5.3.tgz#6cfc358984a1ef991e2518cb9ed4a778bbd3215d" + integrity sha512-Yc+BQe8SvoXH1643Qez1zqLRmbA5rCL+sSmk6TVos0LWVfNIB7PGncdlId77WzLGSIB5KaWgTaNTs2lNVEI6VQ== + +htm@3.1.1: + version "3.1.1" + resolved "https://registry.yarnpkg.com/htm/-/htm-3.1.1.tgz#49266582be0dc66ed2235d5ea892307cc0c24b78" + integrity sha512-983Vyg8NwUE7JkZ6NmOqpCZ+sh1bKv2iYTlUkzlWmA5JD2acKoxd4KVxbMmxX/85mtfdnDmTFoNKcg5DGAvxNQ== + +html-escaper@^2.0.0: + version "2.0.2" + resolved "https://registry.yarnpkg.com/html-escaper/-/html-escaper-2.0.2.tgz#dfd60027da36a36dfcbe236262c00a5822681453" + integrity sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg== + +html-void-elements@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/html-void-elements/-/html-void-elements-3.0.0.tgz#fc9dbd84af9e747249034d4d62602def6517f1d7" + integrity sha512-bEqo66MRXsUGxWHV5IP0PUiAWwoEjba4VCzg0LjFJBpchPaTfyfCKTG6bc5F8ucKec3q5y6qOdGyYTSBEvhCrg== + +http-signature@~1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/http-signature/-/http-signature-1.4.0.tgz#dee5a9ba2bf49416abc544abd6d967f6a94c8c3f" + integrity sha512-G5akfn7eKbpDN+8nPS/cb57YeA1jLTVxjpCj7tmm3QKPdyDy7T+qSC40e9ptydSWvkwjSXw1VbkpyEm39ukeAg== + dependencies: + assert-plus "^1.0.0" + jsprim "^2.0.2" + sshpk "^1.18.0" + +human-signals@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/human-signals/-/human-signals-1.1.1.tgz#c5b1cd14f50aeae09ab6c59fe63ba3395fe4dfa3" + integrity sha512-SEQu7vl8KjNL2eoGBLF3+wAjpsNfA9XMlXAYj/3EdaNfAlxKthD1xjEQfGOUhllCGGJVNY34bRr6lPINhNjyZw== + +ieee754@^1.1.13: + version "1.2.1" + resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.2.1.tgz#8eb7a10a63fff25d15a57b001586d177d1b0d352" + integrity sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA== + +imurmurhash@^0.1.4: + version "0.1.4" + resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea" + integrity sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA== + +indent-string@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/indent-string/-/indent-string-4.0.0.tgz#624f8f4497d619b2d9768531d58f4122854d7251" + integrity sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg== + +inflight@^1.0.4: + version "1.0.6" + resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" + integrity sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA== + dependencies: + once "^1.3.0" + wrappy "1" + +inherits@2: + version "2.0.4" + resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" + integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== + +ini@2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/ini/-/ini-2.0.0.tgz#e5fd556ecdd5726be978fa1001862eacb0a94bc5" + integrity sha512-7PnF4oN3CvZF23ADhA5wRaYEQpJ8qygSkbtTXWBeXWXmEVRXK+1ITciHWwHhsjv1TmW0MgacIv6hEi5pX5NQdA== + +is-fullwidth-code-point@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz#f116f8064fe90b3f7844a38997c0b75051269f1d" + integrity sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg== + +is-installed-globally@~0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/is-installed-globally/-/is-installed-globally-0.4.0.tgz#9a0fd407949c30f86eb6959ef1b7994ed0b7b520" + integrity sha512-iwGqO3J21aaSkC7jWnHP/difazwS7SFeIqxv6wEtLU8Y5KlzFTjyqcSIT0d8s4+dDhKytsk9PJZ2BkS5eZwQRQ== + dependencies: + global-dirs "^3.0.0" + is-path-inside "^3.0.2" + +is-path-inside@^3.0.2: + version "3.0.3" + resolved "https://registry.yarnpkg.com/is-path-inside/-/is-path-inside-3.0.3.tgz#d231362e53a07ff2b0e0ea7fed049161ffd16283" + integrity sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ== + +is-stream@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-2.0.1.tgz#fac1e3d53b97ad5a9d0ae9cef2389f5810a5c077" + integrity sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg== + +is-typedarray@^1.0.0, is-typedarray@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-typedarray/-/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a" + integrity sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA== + +is-unicode-supported@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz#3f26c76a809593b52bfa2ecb5710ed2779b522a7" + integrity sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw== + +is-what@^5.2.0: + version "5.5.0" + resolved "https://registry.yarnpkg.com/is-what/-/is-what-5.5.0.tgz#a3031815757cfe1f03fed990bf6355a2d3f628c4" + integrity sha512-oG7cgbmg5kLYae2N5IVd3jm2s+vldjxJzK1pcu9LfpGuQ93MQSzo0okvRna+7y5ifrD+20FE8FvjusyGaz14fw== + +is-windows@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/is-windows/-/is-windows-1.0.2.tgz#d1850eb9791ecd18e6182ce12a30f396634bb19d" + integrity sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA== + +isexe@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" + integrity sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw== + +isstream@~0.1.2: + version "0.1.2" + resolved "https://registry.yarnpkg.com/isstream/-/isstream-0.1.2.tgz#47e63f7af55afa6f92e1500e690eb8b8529c099a" + integrity sha512-Yljz7ffyPbrLpLngrMtZ7NduUgVvi6wG9RJ9IUcyCd59YQ911PBJphODUcbOVbqYfxe1wuYf/LJ8PauMRwsM/g== + +istanbul-lib-coverage@^3.0.0, istanbul-lib-coverage@^3.2.0: + version "3.2.2" + resolved "https://registry.yarnpkg.com/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.2.tgz#2d166c4b0644d43a39f04bf6c2edd1e585f31756" + integrity sha512-O8dpsF+r0WV/8MNRKfnmrtCWhuKjxrq2w+jpzBL5UZKTi2LeVWnWOmWRxFlesJONmc+wLAGvKQZEOanko0LFTg== + +istanbul-lib-hook@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/istanbul-lib-hook/-/istanbul-lib-hook-3.0.0.tgz#8f84c9434888cc6b1d0a9d7092a76d239ebf0cc6" + integrity sha512-Pt/uge1Q9s+5VAZ+pCo16TYMWPBIl+oaNIjgLQxcX0itS6ueeaA+pEfThZpH8WxhFgCiEb8sAJY6MdUKgiIWaQ== + dependencies: + append-transform "^2.0.0" + +istanbul-lib-instrument@^4.0.0: + version "4.0.3" + resolved "https://registry.yarnpkg.com/istanbul-lib-instrument/-/istanbul-lib-instrument-4.0.3.tgz#873c6fff897450118222774696a3f28902d77c1d" + integrity sha512-BXgQl9kf4WTCPCCpmFGoJkz/+uhvm7h7PFKUYxh7qarQd3ER33vHG//qaE8eN25l07YqZPpHXU9I09l/RD5aGQ== + dependencies: + "@babel/core" "^7.7.5" + "@istanbuljs/schema" "^0.1.2" + istanbul-lib-coverage "^3.0.0" + semver "^6.3.0" + +istanbul-lib-processinfo@^2.0.2: + version "2.0.3" + resolved "https://registry.yarnpkg.com/istanbul-lib-processinfo/-/istanbul-lib-processinfo-2.0.3.tgz#366d454cd0dcb7eb6e0e419378e60072c8626169" + integrity sha512-NkwHbo3E00oybX6NGJi6ar0B29vxyvNwoC7eJ4G4Yq28UfY758Hgn/heV8VRFhevPED4LXfFz0DQ8z/0kw9zMg== + dependencies: + archy "^1.0.0" + cross-spawn "^7.0.3" + istanbul-lib-coverage "^3.2.0" + p-map "^3.0.0" + rimraf "^3.0.0" + uuid "^8.3.2" + +istanbul-lib-report@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/istanbul-lib-report/-/istanbul-lib-report-3.0.1.tgz#908305bac9a5bd175ac6a74489eafd0fc2445a7d" + integrity sha512-GCfE1mtsHGOELCU8e/Z7YWzpmybrx/+dSTfLrvY8qRmaY6zXTKWn6WQIjaAFw069icm6GVMNkgu0NzI4iPZUNw== + dependencies: + istanbul-lib-coverage "^3.0.0" + make-dir "^4.0.0" + supports-color "^7.1.0" + +istanbul-lib-source-maps@^4.0.0: + version "4.0.1" + resolved "https://registry.yarnpkg.com/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.1.tgz#895f3a709fcfba34c6de5a42939022f3e4358551" + integrity sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw== + dependencies: + debug "^4.1.1" + istanbul-lib-coverage "^3.0.0" + source-map "^0.6.1" + +istanbul-reports@^3.0.2: + version "3.2.0" + resolved "https://registry.yarnpkg.com/istanbul-reports/-/istanbul-reports-3.2.0.tgz#cb4535162b5784aa623cee21a7252cf2c807ac93" + integrity sha512-HGYWWS/ehqTV3xN10i23tkPkpH46MLCIMFNCaaKNavAXTF1RkqxawEPtnjnGZ6XKSInBKkiOA5BKS+aZiY3AvA== + dependencies: + html-escaper "^2.0.0" + istanbul-lib-report "^3.0.0" + +js-tokens@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499" + integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ== + +js-yaml@4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-4.1.0.tgz#c1fb65f8f5017901cdd2c951864ba18458a10602" + integrity sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA== + dependencies: + argparse "^2.0.1" + +js-yaml@^3.13.1: + version "3.14.2" + resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.14.2.tgz#77485ce1dd7f33c061fd1b16ecea23b55fcb04b0" + integrity sha512-PMSmkqxr106Xa156c2M265Z+FTrPl+oxd/rgOQy2tijQeK5TxQ43psO1ZCwhVOSdnn+RzkzlRz/eY4BgJBYVpg== + dependencies: + argparse "^1.0.7" + esprima "^4.0.0" + +jsbn@~0.1.0: + version "0.1.1" + resolved "https://registry.yarnpkg.com/jsbn/-/jsbn-0.1.1.tgz#a5e654c2e5a2deb5f201d96cefbca80c0ef2f513" + integrity sha512-UVU9dibq2JcFWxQPA6KCqj5O42VOmAY3zQUfEKxU0KpTGXwNoCjkX1e13eHNvw/xPynt6pU0rZ1htjWTNTSXsg== + +jsesc@^3.0.2: + version "3.1.0" + resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-3.1.0.tgz#74d335a234f67ed19907fdadfac7ccf9d409825d" + integrity sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA== + +json-schema@0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/json-schema/-/json-schema-0.4.0.tgz#f7de4cf6efab838ebaeb3236474cbba5a1930ab5" + integrity sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA== + +json-stringify-safe@~5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz#1296a2d58fd45f19a0f6ce01d65701e2c735b6eb" + integrity sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA== + +json5@^2.2.3: + version "2.2.3" + resolved "https://registry.yarnpkg.com/json5/-/json5-2.2.3.tgz#78cd6f1a19bdc12b73db5ad0c61efd66c1e29283" + integrity sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg== + +jsonfile@^6.0.1: + version "6.2.0" + resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-6.2.0.tgz#7c265bd1b65de6977478300087c99f1c84383f62" + integrity sha512-FGuPw30AdOIUTRMC2OMRtQV+jkVj2cfPqSeWXv1NEAJ1qZ5zb1X6z1mFhbfOB/iy3ssJCD+3KuZ8r8C3uVFlAg== + dependencies: + universalify "^2.0.0" + optionalDependencies: + graceful-fs "^4.1.6" + +jsprim@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/jsprim/-/jsprim-2.0.2.tgz#77ca23dbcd4135cd364800d22ff82c2185803d4d" + integrity sha512-gqXddjPqQ6G40VdnI6T6yObEC+pDNvyP95wdQhkWkg7crHH3km5qP1FsOXEkzEQwnz6gz5qGTn1c2Y52wP3OyQ== + dependencies: + assert-plus "1.0.0" + extsprintf "1.3.0" + json-schema "0.4.0" + verror "1.10.0" + +lazy-ass@^1.6.0: + version "1.6.0" + resolved "https://registry.yarnpkg.com/lazy-ass/-/lazy-ass-1.6.0.tgz#7999655e8646c17f089fdd187d150d3324d54513" + integrity sha512-cc8oEVoctTvsFZ/Oje/kGnHbpWHYBe8IAJe4C0QNc3t8uM/0Y8+erSz/7Y1ALuXTEZTMvxXwO6YbX1ey3ujiZw== + +listr2@^3.8.3: + version "3.14.0" + resolved "https://registry.yarnpkg.com/listr2/-/listr2-3.14.0.tgz#23101cc62e1375fd5836b248276d1d2b51fdbe9e" + integrity sha512-TyWI8G99GX9GjE54cJ+RrNMcIFBfwMPxc3XTFiAYGN4s10hWROGtOg7+O6u6LE3mNkyld7RSLE6nrKBvTfcs3g== + dependencies: + cli-truncate "^2.1.0" + colorette "^2.0.16" + log-update "^4.0.0" + p-map "^4.0.0" + rfdc "^1.3.0" + rxjs "^7.5.1" + through "^2.3.8" + wrap-ansi "^7.0.0" + +locate-path@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-5.0.0.tgz#1afba396afd676a6d42504d0a67a3a7eb9f62aa0" + integrity sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g== + dependencies: + p-locate "^4.1.0" + +lodash.flattendeep@^4.4.0: + version "4.4.0" + resolved "https://registry.yarnpkg.com/lodash.flattendeep/-/lodash.flattendeep-4.4.0.tgz#fb030917f86a3134e5bc9bec0d69e0013ddfedb2" + integrity sha512-uHaJFihxmJcEX3kT4I23ABqKKalJ/zDrDg0lsFtc1h+3uw49SIJ5beyhx5ExVRti3AvKoOJngIj7xz3oylPdWQ== + +lodash.once@^4.1.1: + version "4.1.1" + resolved "https://registry.yarnpkg.com/lodash.once/-/lodash.once-4.1.1.tgz#0dd3971213c7c56df880977d504c88fb471a97ac" + integrity sha512-Sb487aTOCr9drQVL8pIxOzVhafOjZN9UU54hiN8PU3uAiSV7lx1yYNpbNmex2PK6dSJoNTSJUUswT651yww3Mg== + +lodash@^4.17.20, lodash@^4.17.21: + version "4.17.21" + resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c" + integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== + +log-symbols@^4.0.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/log-symbols/-/log-symbols-4.1.0.tgz#3fbdbb95b4683ac9fc785111e792e558d4abd503" + integrity sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg== + dependencies: + chalk "^4.1.0" + is-unicode-supported "^0.1.0" + +log-update@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/log-update/-/log-update-4.0.0.tgz#589ecd352471f2a1c0c570287543a64dfd20e0a1" + integrity sha512-9fkkDevMefjg0mmzWFBW8YkFP91OrizzkW3diF7CpG+S2EYdy4+TVfGwz1zeF8x7hCx1ovSPTOE9Ngib74qqUg== + dependencies: + ansi-escapes "^4.3.0" + cli-cursor "^3.1.0" + slice-ansi "^4.0.0" + wrap-ansi "^6.2.0" + +lru-cache@^5.1.1: + version "5.1.1" + resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-5.1.1.tgz#1da27e6710271947695daf6848e847f01d84b920" + integrity sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w== + dependencies: + yallist "^3.0.2" + +lz-string@^1.4.4, lz-string@^1.5.0: + version "1.5.0" + resolved "https://registry.yarnpkg.com/lz-string/-/lz-string-1.5.0.tgz#c1ab50f77887b712621201ba9fd4e3a6ed099941" + integrity sha512-h5bgJWpxJNswbU7qCrV0tIKQCaS3blPDrqKWx+QxzuzL1zGUzij9XCWLrSLsJPu5t+eWA/ycetzYAO5IOMcWAQ== + +magic-string@^0.30.21: + version "0.30.21" + resolved "https://registry.yarnpkg.com/magic-string/-/magic-string-0.30.21.tgz#56763ec09a0fa8091df27879fd94d19078c00d91" + integrity sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ== + dependencies: + "@jridgewell/sourcemap-codec" "^1.5.5" + +make-dir@^3.0.0, make-dir@^3.0.2: + version "3.1.0" + resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-3.1.0.tgz#415e967046b3a7f1d185277d84aa58203726a13f" + integrity sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw== + dependencies: + semver "^6.0.0" + +make-dir@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-4.0.0.tgz#c3c2307a771277cd9638305f915c29ae741b614e" + integrity sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw== + dependencies: + semver "^7.5.3" + +mark.js@8.11.1: + version "8.11.1" + resolved "https://registry.yarnpkg.com/mark.js/-/mark.js-8.11.1.tgz#180f1f9ebef8b0e638e4166ad52db879beb2ffc5" + integrity sha512-1I+1qpDt4idfgLQG+BNWmrqku+7/2bi5nLf4YwF8y8zXvmfiTBY3PV3ZibfrjBueCByROpuBjLLFCajqkgYoLQ== + +math-intrinsics@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/math-intrinsics/-/math-intrinsics-1.1.0.tgz#a0dd74be81e2aa5c2f27e65ce283605ee4e2b7f9" + integrity sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g== + +mdast-util-to-hast@^13.0.0: + version "13.2.1" + resolved "https://registry.yarnpkg.com/mdast-util-to-hast/-/mdast-util-to-hast-13.2.1.tgz#d7ff84ca499a57e2c060ae67548ad950e689a053" + integrity sha512-cctsq2wp5vTsLIcaymblUriiTcZd0CwWtCbLvrOzYCDZoWyMNV8sZ7krj09FSnsiJi3WVsHLM4k6Dq/yaPyCXA== + dependencies: + "@types/hast" "^3.0.0" + "@types/mdast" "^4.0.0" + "@ungap/structured-clone" "^1.0.0" + devlop "^1.0.0" + micromark-util-sanitize-uri "^2.0.0" + trim-lines "^3.0.0" + unist-util-position "^5.0.0" + unist-util-visit "^5.0.0" + vfile "^6.0.0" + +merge-stream@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/merge-stream/-/merge-stream-2.0.0.tgz#52823629a14dd00c9770fb6ad47dc6310f2c1f60" + integrity sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w== + +micromark-util-character@^2.0.0: + version "2.1.1" + resolved "https://registry.yarnpkg.com/micromark-util-character/-/micromark-util-character-2.1.1.tgz#2f987831a40d4c510ac261e89852c4e9703ccda6" + integrity sha512-wv8tdUTJ3thSFFFJKtpYKOYiGP2+v96Hvk4Tu8KpCAsTMs6yi+nVmGh1syvSCsaxz45J6Jbw+9DD6g97+NV67Q== + dependencies: + micromark-util-symbol "^2.0.0" + micromark-util-types "^2.0.0" + +micromark-util-encode@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/micromark-util-encode/-/micromark-util-encode-2.0.1.tgz#0d51d1c095551cfaac368326963cf55f15f540b8" + integrity sha512-c3cVx2y4KqUnwopcO9b/SCdo2O67LwJJ/UyqGfbigahfegL9myoEFoDYZgkT7f36T0bLrM9hZTAaAyH+PCAXjw== + +micromark-util-sanitize-uri@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/micromark-util-sanitize-uri/-/micromark-util-sanitize-uri-2.0.1.tgz#ab89789b818a58752b73d6b55238621b7faa8fd7" + integrity sha512-9N9IomZ/YuGGZZmQec1MbgxtlgougxTodVwDzzEouPKo3qFWvymFHWcnDi2vzV1ff6kas9ucW+o3yzJK9YB1AQ== + dependencies: + micromark-util-character "^2.0.0" + micromark-util-encode "^2.0.0" + micromark-util-symbol "^2.0.0" + +micromark-util-symbol@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/micromark-util-symbol/-/micromark-util-symbol-2.0.1.tgz#e5da494e8eb2b071a0d08fb34f6cefec6c0a19b8" + integrity sha512-vs5t8Apaud9N28kgCrRUdEed4UJ+wWNvicHLPxCa9ENlYuAY31M0ETy5y1vA33YoNPDFTghEbnh6efaE8h4x0Q== + +micromark-util-types@^2.0.0: + version "2.0.2" + resolved "https://registry.yarnpkg.com/micromark-util-types/-/micromark-util-types-2.0.2.tgz#f00225f5f5a0ebc3254f96c36b6605c4b393908e" + integrity sha512-Yw0ECSpJoViF1qTU4DC6NwtC4aWGt1EkzaQB8KPPyCRR8z9TWeV0HbEFGTO+ZY1wB22zmxnJqhPyTpOVCpeHTA== + +mime-db@1.52.0: + version "1.52.0" + resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.52.0.tgz#bbabcdc02859f4987301c856e3387ce5ec43bf70" + integrity sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg== + +mime-types@^2.1.12, mime-types@~2.1.19: + version "2.1.35" + resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.35.tgz#381a871b62a734450660ae3deee44813f70d959a" + integrity sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw== + dependencies: + mime-db "1.52.0" + +mimic-fn@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-2.1.0.tgz#7ed2c2ccccaf84d3ffcb7a69b57711fc2083401b" + integrity sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg== + +minimatch@^3.0.4, minimatch@^3.1.1: + version "3.1.2" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.1.2.tgz#19cd194bfd3e428f049a70817c038d89ab4be35b" + integrity sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw== + dependencies: + brace-expansion "^1.1.7" + +minimist@^1.2.8: + version "1.2.8" + resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.8.tgz#c1a464e7693302e082a075cee0c057741ac4772c" + integrity sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA== + +minisearch@^7.2.0: + version "7.2.0" + resolved "https://registry.yarnpkg.com/minisearch/-/minisearch-7.2.0.tgz#3dc30e41e9464b3836553b6d969b656614f8f359" + integrity sha512-dqT2XBYUOZOiC5t2HRnwADjhNS2cecp9u+TJRiJ1Qp/f5qjkeT5APcGPjHw+bz89Ms8Jp+cG4AlE+QZ/QnDglg== + +mitt@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/mitt/-/mitt-3.0.1.tgz#ea36cf0cc30403601ae074c8f77b7092cdab36d1" + integrity sha512-vKivATfr97l2/QBCYAkXYDbrIWPM2IIKEl7YPhjCvKlG3kE2gm+uBo6nEXK3M5/Ffh/FLpKExzOQ3JJoJGFKBw== + +ms@^2.1.1, ms@^2.1.3: + version "2.1.3" + resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2" + integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== + +nanoid@^3.3.11: + version "3.3.11" + resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.3.11.tgz#4f4f112cefbe303202f2199838128936266d185b" + integrity sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w== + +node-preload@^0.2.1: + version "0.2.1" + resolved "https://registry.yarnpkg.com/node-preload/-/node-preload-0.2.1.tgz#c03043bb327f417a18fee7ab7ee57b408a144301" + integrity sha512-RM5oyBy45cLEoHqCeh+MNuFAxO0vTFBLskvQbOKnEE7YTTSN4tbN8QWDIPQ6L+WvKsB/qLEGpYe2ZZ9d4W9OIQ== + dependencies: + process-on-spawn "^1.0.0" + +node-releases@^2.0.27: + version "2.0.27" + resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.27.tgz#eedca519205cf20f650f61d56b070db111231e4e" + integrity sha512-nmh3lCkYZ3grZvqcCH+fjmQ7X+H0OeZgP40OierEaAptX4XofMh5kwNbWh7lBduUzCcV/8kZ+NDLCwm2iorIlA== + +npm-run-path@^4.0.0: + version "4.0.1" + resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-4.0.1.tgz#b7ecd1e5ed53da8e37a55e1c2269e0b97ed748ea" + integrity sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw== + dependencies: + path-key "^3.0.0" + +nyc@15.1.0: + version "15.1.0" + resolved "https://registry.yarnpkg.com/nyc/-/nyc-15.1.0.tgz#1335dae12ddc87b6e249d5a1994ca4bdaea75f02" + integrity sha512-jMW04n9SxKdKi1ZMGhvUTHBN0EICCRkHemEoE5jm6mTYcqcdas0ATzgUgejlQUHMvpnOZqGB5Xxsv9KxJW1j8A== + dependencies: + "@istanbuljs/load-nyc-config" "^1.0.0" + "@istanbuljs/schema" "^0.1.2" + caching-transform "^4.0.0" + convert-source-map "^1.7.0" + decamelize "^1.2.0" + find-cache-dir "^3.2.0" + find-up "^4.1.0" + foreground-child "^2.0.0" + get-package-type "^0.1.0" + glob "^7.1.6" + istanbul-lib-coverage "^3.0.0" + istanbul-lib-hook "^3.0.0" + istanbul-lib-instrument "^4.0.0" + istanbul-lib-processinfo "^2.0.2" + istanbul-lib-report "^3.0.0" + istanbul-lib-source-maps "^4.0.0" + istanbul-reports "^3.0.2" + make-dir "^3.0.0" + node-preload "^0.2.1" + p-map "^3.0.0" + process-on-spawn "^1.0.0" + resolve-from "^5.0.0" + rimraf "^3.0.0" + signal-exit "^3.0.2" + spawn-wrap "^2.0.0" + test-exclude "^6.0.0" + yargs "^15.0.2" + +object-inspect@^1.13.3: + version "1.13.4" + resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.13.4.tgz#8375265e21bc20d0fa582c22e1b13485d6e00213" + integrity sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew== + +once@^1.3.0, once@^1.3.1, once@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" + integrity sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w== + dependencies: + wrappy "1" + +onetime@^5.1.0: + version "5.1.2" + resolved "https://registry.yarnpkg.com/onetime/-/onetime-5.1.2.tgz#d0e96ebb56b07476df1dd9c4806e5237985ca45e" + integrity sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg== + dependencies: + mimic-fn "^2.1.0" + +oniguruma-parser@^0.12.1: + version "0.12.1" + resolved "https://registry.yarnpkg.com/oniguruma-parser/-/oniguruma-parser-0.12.1.tgz#82ba2208d7a2b69ee344b7efe0ae930c627dcc4a" + integrity sha512-8Unqkvk1RYc6yq2WBYRj4hdnsAxVze8i7iPfQr8e4uSP3tRv0rpZcbGUDvxfQQcdwHt/e9PrMvGCsa8OqG9X3w== + +oniguruma-to-es@^4.3.4: + version "4.3.4" + resolved "https://registry.yarnpkg.com/oniguruma-to-es/-/oniguruma-to-es-4.3.4.tgz#0b909d960faeb84511c979b1f2af64e9bc37ce34" + integrity sha512-3VhUGN3w2eYxnTzHn+ikMI+fp/96KoRSVK9/kMTcFqj1NRDh2IhQCKvYxDnWePKRXY/AqH+Fuiyb7VHSzBjHfA== + dependencies: + oniguruma-parser "^0.12.1" + regex "^6.0.1" + regex-recursion "^6.0.2" + +ospath@^1.2.2: + version "1.2.2" + resolved "https://registry.yarnpkg.com/ospath/-/ospath-1.2.2.tgz#1276639774a3f8ef2572f7fe4280e0ea4550c07b" + integrity sha512-o6E5qJV5zkAbIDNhGSIlyOhScKXgQrSRMilfph0clDfM0nEnBOlKlH4sWDmG95BW/CvwNz0vmm7dJVtU2KlMiA== + +p-limit@^2.2.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-2.3.0.tgz#3dd33c647a214fdfffd835933eb086da0dc21db1" + integrity sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w== + dependencies: + p-try "^2.0.0" + +p-locate@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-4.1.0.tgz#a3428bb7088b3a60292f66919278b7c297ad4f07" + integrity sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A== + dependencies: + p-limit "^2.2.0" + +p-map@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/p-map/-/p-map-3.0.0.tgz#d704d9af8a2ba684e2600d9a215983d4141a979d" + integrity sha512-d3qXVTF/s+W+CdJ5A29wywV2n8CQQYahlgz2bFiA+4eVNJbHJodPZ+/gXwPGh0bOqA+j8S+6+ckmvLGPk1QpxQ== + dependencies: + aggregate-error "^3.0.0" + +p-map@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/p-map/-/p-map-4.0.0.tgz#bb2f95a5eda2ec168ec9274e06a747c3e2904d2b" + integrity sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ== + dependencies: + aggregate-error "^3.0.0" + +p-try@^2.0.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/p-try/-/p-try-2.2.0.tgz#cb2868540e313d61de58fafbe35ce9004d5540e6" + integrity sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ== + +package-hash@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/package-hash/-/package-hash-4.0.0.tgz#3537f654665ec3cc38827387fc904c163c54f506" + integrity sha512-whdkPIooSu/bASggZ96BWVvZTRMOFxnyUG5PnTSGKoJE2gd5mbVNmR2Nj20QFzxYYgAXpoqC+AiXzl+UMRh7zQ== + dependencies: + graceful-fs "^4.1.15" + hasha "^5.0.0" + lodash.flattendeep "^4.4.0" + release-zalgo "^1.0.0" + +path-exists@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-4.0.0.tgz#513bdbe2d3b95d7762e8c1137efa195c6c61b5b3" + integrity sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w== + +path-is-absolute@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" + integrity sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg== + +path-key@^3.0.0, path-key@^3.1.0: + version "3.1.1" + resolved "https://registry.yarnpkg.com/path-key/-/path-key-3.1.1.tgz#581f6ade658cbba65a0d3380de7753295054f375" + integrity sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q== + +pend@~1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/pend/-/pend-1.2.0.tgz#7a57eb550a6783f9115331fcf4663d5c8e007a50" + integrity sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg== + +perfect-debounce@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/perfect-debounce/-/perfect-debounce-2.0.0.tgz#0ff94f1ecbe0a6bca4b1703a2ed08bbe43739aa7" + integrity sha512-fkEH/OBiKrqqI/yIgjR92lMfs2K8105zt/VT6+7eTjNwisrsh47CeIED9z58zI7DfKdH3uHAn25ziRZn3kgAow== + +performance-now@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/performance-now/-/performance-now-2.1.0.tgz#6309f4e0e5fa913ec1c69307ae364b4b377c9e7b" + integrity sha512-7EAHlyLHI56VEIdK57uwHdHKIaAGbnXPiw0yWbarQZOKaKpvUIgW0jWRVLiatnM+XXlSwsanIBH/hzGMJulMow== + +picocolors@1.1.1, picocolors@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/picocolors/-/picocolors-1.1.1.tgz#3d321af3eab939b083c8f929a1d12cda81c26b6b" + integrity sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA== + +picomatch@^4.0.3: + version "4.0.3" + resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-4.0.3.tgz#796c76136d1eead715db1e7bad785dedd695a042" + integrity sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q== + +pify@^2.2.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/pify/-/pify-2.3.0.tgz#ed141a6ac043a849ea588498e7dca8b15330e90c" + integrity sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog== + +pkg-dir@^4.1.0: + version "4.2.0" + resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-4.2.0.tgz#f099133df7ede422e81d1d8448270eeb3e4261f3" + integrity sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ== + dependencies: + find-up "^4.0.0" + +postcss@^8.5.6: + version "8.5.6" + resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.5.6.tgz#2825006615a619b4f62a9e7426cc120b349a8f3c" + integrity sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg== + dependencies: + nanoid "^3.3.11" + picocolors "^1.1.1" + source-map-js "^1.2.1" + +pretty-bytes@^5.6.0: + version "5.6.0" + resolved "https://registry.yarnpkg.com/pretty-bytes/-/pretty-bytes-5.6.0.tgz#356256f643804773c82f64723fe78c92c62beaeb" + integrity sha512-FFw039TmrBqFK8ma/7OL3sDz/VytdtJr044/QUJtH0wK9lb9jLq9tJyIxUwtQJHwar2BqtiA4iCWSwo9JLkzFg== + +pretty-format@^27.0.2: + version "27.5.1" + resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-27.5.1.tgz#2181879fdea51a7a5851fb39d920faa63f01d88e" + integrity sha512-Qb1gy5OrP5+zDf2Bvnzdl3jsTf1qXVMazbvCoKhtKqVs4/YK4ozX4gKQJJVyNe+cajNPn0KoC0MC3FUmaHWEmQ== + dependencies: + ansi-regex "^5.0.1" + ansi-styles "^5.0.0" + react-is "^17.0.1" + +process-on-spawn@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/process-on-spawn/-/process-on-spawn-1.1.0.tgz#9d5999ba87b3bf0a8acb05322d69f2f5aa4fb763" + integrity sha512-JOnOPQ/8TZgjs1JIH/m9ni7FfimjNa/PRx7y/Wb5qdItsnhO0jE4AT7fC0HjC28DUQWDr50dwSYZLdRMlqDq3Q== + dependencies: + fromentries "^1.2.0" + +process@^0.11.10: + version "0.11.10" + resolved "https://registry.yarnpkg.com/process/-/process-0.11.10.tgz#7332300e840161bda3e69a1d1d91a7d4bc16f182" + integrity sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A== + +property-information@^7.0.0: + version "7.1.0" + resolved "https://registry.yarnpkg.com/property-information/-/property-information-7.1.0.tgz#b622e8646e02b580205415586b40804d3e8bfd5d" + integrity sha512-TwEZ+X+yCJmYfL7TPUOcvBZ4QfoT5YenQiJuX//0th53DE6w0xxLEtfK3iyryQFddXuvkIk51EEgrJQ0WJkOmQ== + +proxy-from-env@1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/proxy-from-env/-/proxy-from-env-1.0.0.tgz#33c50398f70ea7eb96d21f7b817630a55791c7ee" + integrity sha512-F2JHgJQ1iqwnHDcQjVBsq3n/uoaFL+iPW/eAeL7kVxy/2RrWaN4WroKjjvbsoRtv0ftelNyC01bjRhn/bhcf4A== + +pump@^3.0.0: + version "3.0.3" + resolved "https://registry.yarnpkg.com/pump/-/pump-3.0.3.tgz#151d979f1a29668dc0025ec589a455b53282268d" + integrity sha512-todwxLMY7/heScKmntwQG8CXVkWUOdYxIvY2s0VWAAMh/nd8SoYiRaKjlr7+iCs984f2P8zvrfWcDDYVb73NfA== + dependencies: + end-of-stream "^1.1.0" + once "^1.3.1" + +qs@6.14.0: + version "6.14.0" + resolved "https://registry.yarnpkg.com/qs/-/qs-6.14.0.tgz#c63fa40680d2c5c941412a0e899c89af60c0a930" + integrity sha512-YWWTjgABSKcvs/nWBi9PycY/JiPJqOD4JA6o9Sej2AtvSGarXxKC3OQSk4pAarbdQlKAh5D4FCQkJNkW+GAn3w== + dependencies: + side-channel "^1.1.0" + +react-is@^17.0.1: + version "17.0.2" + resolved "https://registry.yarnpkg.com/react-is/-/react-is-17.0.2.tgz#e691d4a8e9c789365655539ab372762b0efb54f0" + integrity sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w== + +regex-recursion@^6.0.2: + version "6.0.2" + resolved "https://registry.yarnpkg.com/regex-recursion/-/regex-recursion-6.0.2.tgz#a0b1977a74c87f073377b938dbedfab2ea582b33" + integrity sha512-0YCaSCq2VRIebiaUviZNs0cBz1kg5kVS2UKUfNIx8YVs1cN3AV7NTctO5FOKBA+UT2BPJIWZauYHPqJODG50cg== + dependencies: + regex-utilities "^2.3.0" + +regex-utilities@^2.3.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/regex-utilities/-/regex-utilities-2.3.0.tgz#87163512a15dce2908cf079c8960d5158ff43280" + integrity sha512-8VhliFJAWRaUiVvREIiW2NXXTmHs4vMNnSzuJVhscgmGav3g9VDxLrQndI3dZZVVdp0ZO/5v0xmX516/7M9cng== + +regex@^6.0.1: + version "6.1.0" + resolved "https://registry.yarnpkg.com/regex/-/regex-6.1.0.tgz#d7ce98f8ee32da7497c13f6601fca2bc4a6a7803" + integrity sha512-6VwtthbV4o/7+OaAF9I5L5V3llLEsoPyq9P1JVXkedTP33c7MfCG0/5NOPcSJn0TzXcG9YUrR0gQSWioew3LDg== + dependencies: + regex-utilities "^2.3.0" + +release-zalgo@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/release-zalgo/-/release-zalgo-1.0.0.tgz#09700b7e5074329739330e535c5a90fb67851730" + integrity sha512-gUAyHVHPPC5wdqX/LG4LWtRYtgjxyX78oanFNTMMyFEfOqdC54s3eE82imuWKbOeqYht2CrNf64Qb8vgmmtZGA== + dependencies: + es6-error "^4.0.1" + +request-progress@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/request-progress/-/request-progress-3.0.0.tgz#4ca754081c7fec63f505e4faa825aa06cd669dbe" + integrity sha512-MnWzEHHaxHO2iWiQuHrUPBi/1WeBf5PkxQqNyNvLl9VAYSdXkP8tQ3pBSeCPD+yw0v0Aq1zosWLz0BdeXpWwZg== + dependencies: + throttleit "^1.0.0" + +require-directory@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42" + integrity sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q== + +require-main-filename@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/require-main-filename/-/require-main-filename-2.0.0.tgz#d0b329ecc7cc0f61649f62215be69af54aa8989b" + integrity sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg== + +resolve-from@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-5.0.0.tgz#c35225843df8f776df21c57557bc087e9dfdfc69" + integrity sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw== + +restore-cursor@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/restore-cursor/-/restore-cursor-3.1.0.tgz#39f67c54b3a7a58cea5236d95cf0034239631f7e" + integrity sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA== + dependencies: + onetime "^5.1.0" + signal-exit "^3.0.2" + +rfdc@^1.3.0, rfdc@^1.4.1: + version "1.4.1" + resolved "https://registry.yarnpkg.com/rfdc/-/rfdc-1.4.1.tgz#778f76c4fb731d93414e8f925fbecf64cce7f6ca" + integrity sha512-q1b3N5QkRUWUl7iyylaaj3kOpIT0N2i9MqIEQXP73GVsN9cw3fdx8X63cEmWhJGi2PPCF23Ijp7ktmd39rawIA== + +rimraf@^3.0.0: + version "3.0.2" + resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-3.0.2.tgz#f1a5402ba6220ad52cc1282bac1ae3aa49fd061a" + integrity sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA== + dependencies: + glob "^7.1.3" + +rollup@^4.43.0: + version "4.53.3" + resolved "https://registry.yarnpkg.com/rollup/-/rollup-4.53.3.tgz#dbc8cd8743b38710019fb8297e8d7a76e3faa406" + integrity sha512-w8GmOxZfBmKknvdXU1sdM9NHcoQejwF/4mNgj2JuEEdRaHwwF12K7e9eXn1nLZ07ad+du76mkVsyeb2rKGllsA== + dependencies: + "@types/estree" "1.0.8" + optionalDependencies: + "@rollup/rollup-android-arm-eabi" "4.53.3" + "@rollup/rollup-android-arm64" "4.53.3" + "@rollup/rollup-darwin-arm64" "4.53.3" + "@rollup/rollup-darwin-x64" "4.53.3" + "@rollup/rollup-freebsd-arm64" "4.53.3" + "@rollup/rollup-freebsd-x64" "4.53.3" + "@rollup/rollup-linux-arm-gnueabihf" "4.53.3" + "@rollup/rollup-linux-arm-musleabihf" "4.53.3" + "@rollup/rollup-linux-arm64-gnu" "4.53.3" + "@rollup/rollup-linux-arm64-musl" "4.53.3" + "@rollup/rollup-linux-loong64-gnu" "4.53.3" + "@rollup/rollup-linux-ppc64-gnu" "4.53.3" + "@rollup/rollup-linux-riscv64-gnu" "4.53.3" + "@rollup/rollup-linux-riscv64-musl" "4.53.3" + "@rollup/rollup-linux-s390x-gnu" "4.53.3" + "@rollup/rollup-linux-x64-gnu" "4.53.3" + "@rollup/rollup-linux-x64-musl" "4.53.3" + "@rollup/rollup-openharmony-arm64" "4.53.3" + "@rollup/rollup-win32-arm64-msvc" "4.53.3" + "@rollup/rollup-win32-ia32-msvc" "4.53.3" + "@rollup/rollup-win32-x64-gnu" "4.53.3" + "@rollup/rollup-win32-x64-msvc" "4.53.3" + fsevents "~2.3.2" + +rxjs@^7.5.1: + version "7.8.2" + resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-7.8.2.tgz#955bc473ed8af11a002a2be52071bf475638607b" + integrity sha512-dhKf903U/PQZY6boNNtAGdWbG85WAbjT/1xYoZIC7FAY0yWapOBQVsVrDl58W86//e1VpMNBtRV4MaXfdMySFA== + dependencies: + tslib "^2.1.0" + +safe-buffer@^5.0.1, safe-buffer@^5.1.2: + version "5.2.1" + resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6" + integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== + +safer-buffer@^2.0.2, safer-buffer@^2.1.0, safer-buffer@~2.1.0: + version "2.1.2" + resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" + integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== + +semver@^6.0.0, semver@^6.3.0, semver@^6.3.1: + version "6.3.1" + resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.1.tgz#556d2ef8689146e46dcea4bfdd095f3434dffcb4" + integrity sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA== + +semver@^7.3.2, semver@^7.5.3: + version "7.7.3" + resolved "https://registry.yarnpkg.com/semver/-/semver-7.7.3.tgz#4b5f4143d007633a8dc671cd0a6ef9147b8bb946" + integrity sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q== + +set-blocking@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/set-blocking/-/set-blocking-2.0.0.tgz#045f9782d011ae9a6803ddd382b24392b3d890f7" + integrity sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw== + +shebang-command@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-2.0.0.tgz#ccd0af4f8835fbdc265b82461aaf0c36663f34ea" + integrity sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA== + dependencies: + shebang-regex "^3.0.0" + +shebang-regex@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-3.0.0.tgz#ae16f1644d873ecad843b0307b143362d4c42172" + integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A== + +shiki@^3.15.0: + version "3.19.0" + resolved "https://registry.yarnpkg.com/shiki/-/shiki-3.19.0.tgz#f44abb80c69f0adf0870028e86145bc3d7fe546e" + integrity sha512-77VJr3OR/VUZzPiStyRhADmO2jApMM0V2b1qf0RpfWya8Zr1PeZev5AEpPGAAKWdiYUtcZGBE4F5QvJml1PvWA== + dependencies: + "@shikijs/core" "3.19.0" + "@shikijs/engine-javascript" "3.19.0" + "@shikijs/engine-oniguruma" "3.19.0" + "@shikijs/langs" "3.19.0" + "@shikijs/themes" "3.19.0" + "@shikijs/types" "3.19.0" + "@shikijs/vscode-textmate" "^10.0.2" + "@types/hast" "^3.0.4" + +side-channel-list@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/side-channel-list/-/side-channel-list-1.0.0.tgz#10cb5984263115d3b7a0e336591e290a830af8ad" + integrity sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA== + dependencies: + es-errors "^1.3.0" + object-inspect "^1.13.3" + +side-channel-map@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/side-channel-map/-/side-channel-map-1.0.1.tgz#d6bb6b37902c6fef5174e5f533fab4c732a26f42" + integrity sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA== + dependencies: + call-bound "^1.0.2" + es-errors "^1.3.0" + get-intrinsic "^1.2.5" + object-inspect "^1.13.3" + +side-channel-weakmap@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/side-channel-weakmap/-/side-channel-weakmap-1.0.2.tgz#11dda19d5368e40ce9ec2bdc1fb0ecbc0790ecea" + integrity sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A== + dependencies: + call-bound "^1.0.2" + es-errors "^1.3.0" + get-intrinsic "^1.2.5" + object-inspect "^1.13.3" + side-channel-map "^1.0.1" + +side-channel@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/side-channel/-/side-channel-1.1.0.tgz#c3fcff9c4da932784873335ec9765fa94ff66bc9" + integrity sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw== + dependencies: + es-errors "^1.3.0" + object-inspect "^1.13.3" + side-channel-list "^1.0.0" + side-channel-map "^1.0.1" + side-channel-weakmap "^1.0.2" + +signal-exit@^3.0.2: + version "3.0.7" + resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.7.tgz#a9a1767f8af84155114eaabd73f99273c8f59ad9" + integrity sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ== + +slice-ansi@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-3.0.0.tgz#31ddc10930a1b7e0b67b08c96c2f49b77a789787" + integrity sha512-pSyv7bSTC7ig9Dcgbw9AuRNUb5k5V6oDudjZoMBSr13qpLBG7tB+zgCkARjq7xIUgdz5P1Qe8u+rSGdouOOIyQ== + dependencies: + ansi-styles "^4.0.0" + astral-regex "^2.0.0" + is-fullwidth-code-point "^3.0.0" + +slice-ansi@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-4.0.0.tgz#500e8dd0fd55b05815086255b3195adf2a45fe6b" + integrity sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ== + dependencies: + ansi-styles "^4.0.0" + astral-regex "^2.0.0" + is-fullwidth-code-point "^3.0.0" + +source-map-js@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/source-map-js/-/source-map-js-1.2.1.tgz#1ce5650fddd87abc099eda37dcff024c2667ae46" + integrity sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA== + +source-map@^0.6.1: + version "0.6.1" + resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" + integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== + +space-separated-tokens@^2.0.0: + version "2.0.2" + resolved "https://registry.yarnpkg.com/space-separated-tokens/-/space-separated-tokens-2.0.2.tgz#1ecd9d2350a3844572c3f4a312bceb018348859f" + integrity sha512-PEGlAwrG8yXGXRjW32fGbg66JAlOAwbObuqVoJpv/mRgoWDQfgH1wDPvtzWyUSNAXBGSk8h755YDbbcEy3SH2Q== + +spawn-wrap@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/spawn-wrap/-/spawn-wrap-2.0.0.tgz#103685b8b8f9b79771318827aa78650a610d457e" + integrity sha512-EeajNjfN9zMnULLwhZZQU3GWBoFNkbngTUPfaawT4RkMiviTxcX0qfhVbGey39mfctfDHkWtuecgQ8NJcyQWHg== + dependencies: + foreground-child "^2.0.0" + is-windows "^1.0.2" + make-dir "^3.0.0" + rimraf "^3.0.0" + signal-exit "^3.0.2" + which "^2.0.1" + +speakingurl@^14.0.1: + version "14.0.1" + resolved "https://registry.yarnpkg.com/speakingurl/-/speakingurl-14.0.1.tgz#f37ec8ddc4ab98e9600c1c9ec324a8c48d772a53" + integrity sha512-1POYv7uv2gXoyGFpBCmpDVSNV74IfsWlDW216UPjbWufNf+bSU6GdbDsxdcxtfwb4xlI3yxzOTKClUosxARYrQ== + +sprintf-js@~1.0.2: + version "1.0.3" + resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c" + integrity sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g== + +sshpk@^1.18.0: + version "1.18.0" + resolved "https://registry.yarnpkg.com/sshpk/-/sshpk-1.18.0.tgz#1663e55cddf4d688b86a46b77f0d5fe363aba028" + integrity sha512-2p2KJZTSqQ/I3+HX42EpYOa2l3f8Erv8MWKsy2I9uf4wA7yFIkXRffYdsx86y6z4vHtV8u7g+pPlr8/4ouAxsQ== + dependencies: + asn1 "~0.2.3" + assert-plus "^1.0.0" + bcrypt-pbkdf "^1.0.0" + dashdash "^1.12.0" + ecc-jsbn "~0.1.1" + getpass "^0.1.1" + jsbn "~0.1.0" + safer-buffer "^2.0.2" + tweetnacl "~0.14.0" + +string-width@^4.1.0, string-width@^4.2.0: + version "4.2.3" + resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010" + integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g== + dependencies: + emoji-regex "^8.0.0" + is-fullwidth-code-point "^3.0.0" + strip-ansi "^6.0.1" + +stringify-entities@^4.0.0: + version "4.0.4" + resolved "https://registry.yarnpkg.com/stringify-entities/-/stringify-entities-4.0.4.tgz#b3b79ef5f277cc4ac73caeb0236c5ba939b3a4f3" + integrity sha512-IwfBptatlO+QCJUo19AqvrPNqlVMpW9YEL2LIVY+Rpv2qsjCGxaDLNRgeGsQWJhfItebuJhsGSLjaBbNSQ+ieg== + dependencies: + character-entities-html4 "^2.0.0" + character-entities-legacy "^3.0.0" + +strip-ansi@^6.0.0, strip-ansi@^6.0.1: + version "6.0.1" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9" + integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A== + dependencies: + ansi-regex "^5.0.1" + +strip-bom@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-4.0.0.tgz#9c3505c1db45bcedca3d9cf7a16f5c5aa3901878" + integrity sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w== + +strip-final-newline@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/strip-final-newline/-/strip-final-newline-2.0.0.tgz#89b852fb2fcbe936f6f4b3187afb0a12c1ab58ad" + integrity sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA== + +superjson@^2.2.2: + version "2.2.6" + resolved "https://registry.yarnpkg.com/superjson/-/superjson-2.2.6.tgz#a223a3a988172a5f9656e2063fe5f733af40d099" + integrity sha512-H+ue8Zo4vJmV2nRjpx86P35lzwDT3nItnIsocgumgr0hHMQ+ZGq5vrERg9kJBo5AWGmxZDhzDo+WVIJqkB0cGA== + dependencies: + copy-anything "^4" + +supports-color@^7.1.0: + version "7.2.0" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-7.2.0.tgz#1b7dcdcb32b8138801b3e478ba6a51caa89648da" + integrity sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw== + dependencies: + has-flag "^4.0.0" + +supports-color@^8.1.1: + version "8.1.1" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-8.1.1.tgz#cd6fc17e28500cff56c1b86c0a7fd4a54a73005c" + integrity sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q== + dependencies: + has-flag "^4.0.0" + +tabbable@^6.3.0: + version "6.3.0" + resolved "https://registry.yarnpkg.com/tabbable/-/tabbable-6.3.0.tgz#2e0e6163935387cdeacd44e9334616ca0115a8d3" + integrity sha512-EIHvdY5bPLuWForiR/AN2Bxngzpuwn1is4asboytXtpTgsArc+WmSJKVLlhdh71u7jFcryDqB2A8lQvj78MkyQ== + +test-exclude@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/test-exclude/-/test-exclude-6.0.0.tgz#04a8698661d805ea6fa293b6cb9e63ac044ef15e" + integrity sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w== + dependencies: + "@istanbuljs/schema" "^0.1.2" + glob "^7.1.4" + minimatch "^3.0.4" + +throttleit@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/throttleit/-/throttleit-1.0.1.tgz#304ec51631c3b770c65c6c6f76938b384000f4d5" + integrity sha512-vDZpf9Chs9mAdfY046mcPt8fg5QSZr37hEH4TXYBnDF+izxgrbRGUAAaBvIk/fJm9aOFCGFd1EsNg5AZCbnQCQ== + +through@^2.3.8: + version "2.3.8" + resolved "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5" + integrity sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg== + +tinyglobby@^0.2.14, tinyglobby@^0.2.15: + version "0.2.15" + resolved "https://registry.yarnpkg.com/tinyglobby/-/tinyglobby-0.2.15.tgz#e228dd1e638cea993d2fdb4fcd2d4602a79951c2" + integrity sha512-j2Zq4NyQYG5XMST4cbs02Ak8iJUdxRM0XI5QyxXuZOzKOINmWurp3smXu3y5wDcJrptwpSjgXHzIQxR0omXljQ== + dependencies: + fdir "^6.5.0" + picomatch "^4.0.3" + +tldts-core@^6.1.86: + version "6.1.86" + resolved "https://registry.yarnpkg.com/tldts-core/-/tldts-core-6.1.86.tgz#a93e6ed9d505cb54c542ce43feb14c73913265d8" + integrity sha512-Je6p7pkk+KMzMv2XXKmAE3McmolOQFdxkKw0R8EYNr7sELW46JqnNeTX8ybPiQgvg1ymCoF8LXs5fzFaZvJPTA== + +tldts@^6.1.32: + version "6.1.86" + resolved "https://registry.yarnpkg.com/tldts/-/tldts-6.1.86.tgz#087e0555b31b9725ee48ca7e77edc56115cd82f7" + integrity sha512-WMi/OQ2axVTf/ykqCQgXiIct+mSQDFdH2fkwhPwgEwvJ1kSzZRiinb0zF2Xb8u4+OqPChmyI6MEu4EezNJz+FQ== + dependencies: + tldts-core "^6.1.86" + +tmp@~0.2.3: + version "0.2.5" + resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.2.5.tgz#b06bcd23f0f3c8357b426891726d16015abfd8f8" + integrity sha512-voyz6MApa1rQGUxT3E+BK7/ROe8itEx7vD8/HEvt4xwXucvQ5G5oeEiHkmHZJuBO21RpOf+YYm9MOivj709jow== + +tough-cookie@^5.0.0: + version "5.1.2" + resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-5.1.2.tgz#66d774b4a1d9e12dc75089725af3ac75ec31bed7" + integrity sha512-FVDYdxtnj0G6Qm/DhNPSb8Ju59ULcup3tuJxkFb5K8Bv2pUXILbf0xZWU8PX8Ov19OXljbUyveOFwRMwkXzO+A== + dependencies: + tldts "^6.1.32" + +tree-kill@1.2.2: + version "1.2.2" + resolved "https://registry.yarnpkg.com/tree-kill/-/tree-kill-1.2.2.tgz#4ca09a9092c88b73a7cdc5e8a01b507b0790a0cc" + integrity sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A== + +trim-lines@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/trim-lines/-/trim-lines-3.0.1.tgz#d802e332a07df861c48802c04321017b1bd87338" + integrity sha512-kRj8B+YHZCc9kQYdWfJB2/oUl9rA99qbowYYBtr4ui4mZyAQ2JpvVBd/6U2YloATfqBhBTSMhTpgBHtU0Mf3Rg== + +tslib@^2.1.0: + version "2.8.1" + resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.8.1.tgz#612efe4ed235d567e8aba5f2a5fab70280ade83f" + integrity sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w== + +tunnel-agent@^0.6.0: + version "0.6.0" + resolved "https://registry.yarnpkg.com/tunnel-agent/-/tunnel-agent-0.6.0.tgz#27a5dea06b36b04a0a9966774b290868f0fc40fd" + integrity sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w== + dependencies: + safe-buffer "^5.0.1" + +tweetnacl@^0.14.3, tweetnacl@~0.14.0: + version "0.14.5" + resolved "https://registry.yarnpkg.com/tweetnacl/-/tweetnacl-0.14.5.tgz#5ae68177f192d4456269d108afa93ff8743f4f64" + integrity sha512-KXXFFdAbFXY4geFIwoyNK+f5Z1b7swfXABfL7HXCmoIWMKU3dmS26672A4EeQtDzLKy7SXmfBu51JolvEKwtGA== + +type-fest@^0.21.3: + version "0.21.3" + resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.21.3.tgz#d260a24b0198436e133fa26a524a6d65fa3b2e37" + integrity sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w== + +type-fest@^0.8.0: + version "0.8.1" + resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.8.1.tgz#09e249ebde851d3b1e48d27c105444667f17b83d" + integrity sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA== + +typedarray-to-buffer@^3.1.5: + version "3.1.5" + resolved "https://registry.yarnpkg.com/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz#a97ee7a9ff42691b9f783ff1bc5112fe3fca9080" + integrity sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q== + dependencies: + is-typedarray "^1.0.0" + +undici-types@~7.16.0: + version "7.16.0" + resolved "https://registry.yarnpkg.com/undici-types/-/undici-types-7.16.0.tgz#ffccdff36aea4884cbfce9a750a0580224f58a46" + integrity sha512-Zz+aZWSj8LE6zoxD+xrjh4VfkIG8Ya6LvYkZqtUQGJPZjYl53ypCaUwWqo7eI0x66KBGeRo+mlBEkMSeSZ38Nw== + +unist-util-is@^6.0.0: + version "6.0.1" + resolved "https://registry.yarnpkg.com/unist-util-is/-/unist-util-is-6.0.1.tgz#d0a3f86f2dd0db7acd7d8c2478080b5c67f9c6a9" + integrity sha512-LsiILbtBETkDz8I9p1dQ0uyRUWuaQzd/cuEeS1hoRSyW5E5XGmTzlwY1OrNzzakGowI9Dr/I8HVaw4hTtnxy8g== + dependencies: + "@types/unist" "^3.0.0" + +unist-util-position@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/unist-util-position/-/unist-util-position-5.0.0.tgz#678f20ab5ca1207a97d7ea8a388373c9cf896be4" + integrity sha512-fucsC7HjXvkB5R3kTCO7kUjRdrS0BJt3M/FPxmHMBOm8JQi2BsHAHFsy27E0EolP8rp0NzXsJ+jNPyDWvOJZPA== + dependencies: + "@types/unist" "^3.0.0" + +unist-util-stringify-position@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/unist-util-stringify-position/-/unist-util-stringify-position-4.0.0.tgz#449c6e21a880e0855bf5aabadeb3a740314abac2" + integrity sha512-0ASV06AAoKCDkS2+xw5RXJywruurpbC4JZSm7nr7MOt1ojAzvyyaO+UxZf18j8FCF6kmzCZKcAgN/yu2gm2XgQ== + dependencies: + "@types/unist" "^3.0.0" + +unist-util-visit-parents@^6.0.0: + version "6.0.2" + resolved "https://registry.yarnpkg.com/unist-util-visit-parents/-/unist-util-visit-parents-6.0.2.tgz#777df7fb98652ce16b4b7cd999d0a1a40efa3a02" + integrity sha512-goh1s1TBrqSqukSc8wrjwWhL0hiJxgA8m4kFxGlQ+8FYQ3C/m11FcTs4YYem7V664AhHVvgoQLk890Ssdsr2IQ== + dependencies: + "@types/unist" "^3.0.0" + unist-util-is "^6.0.0" + +unist-util-visit@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/unist-util-visit/-/unist-util-visit-5.0.0.tgz#a7de1f31f72ffd3519ea71814cccf5fd6a9217d6" + integrity sha512-MR04uvD+07cwl/yhVuVWAtw+3GOR/knlL55Nd/wAdblk27GCVt3lqpTivy/tkJcZoNPzTwS1Y+KMojlLDhoTzg== + dependencies: + "@types/unist" "^3.0.0" + unist-util-is "^6.0.0" + unist-util-visit-parents "^6.0.0" + +universalify@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/universalify/-/universalify-2.0.1.tgz#168efc2180964e6386d061e094df61afe239b18d" + integrity sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw== + +untildify@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/untildify/-/untildify-4.0.0.tgz#2bc947b953652487e4600949fb091e3ae8cd919b" + integrity sha512-KK8xQ1mkzZeg9inewmFVDNkg3l5LUhoq9kN6iWYB/CC9YMG8HA+c1Q8HwDe6dEX7kErrEVNVBO3fWsVq5iDgtw== + +update-browserslist-db@^1.2.0: + version "1.2.2" + resolved "https://registry.yarnpkg.com/update-browserslist-db/-/update-browserslist-db-1.2.2.tgz#cfb4358afa08b3d5731a2ecd95eebf4ddef8033e" + integrity sha512-E85pfNzMQ9jpKkA7+TJAi4TJN+tBCuWh5rUcS/sv6cFi+1q9LYDwDI5dpUL0u/73EElyQ8d3TEaeW4sPedBqYA== + dependencies: + escalade "^3.2.0" + picocolors "^1.1.1" + +uuid@^8.3.2: + version "8.3.2" + resolved "https://registry.yarnpkg.com/uuid/-/uuid-8.3.2.tgz#80d5b5ced271bb9af6c445f21a1a04c606cefbe2" + integrity sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg== + +verror@1.10.0: + version "1.10.0" + resolved "https://registry.yarnpkg.com/verror/-/verror-1.10.0.tgz#3a105ca17053af55d6e270c1f8288682e18da400" + integrity sha512-ZZKSmDAEFOijERBLkmYfJ+vmk3w+7hOLYDNkRCuRuMJGEmqYNCNLyBBFwWKVMhfwaEF3WOd0Zlw86U/WC/+nYw== + dependencies: + assert-plus "^1.0.0" + core-util-is "1.0.2" + extsprintf "^1.2.0" + +vfile-message@^4.0.0: + version "4.0.3" + resolved "https://registry.yarnpkg.com/vfile-message/-/vfile-message-4.0.3.tgz#87b44dddd7b70f0641c2e3ed0864ba73e2ea8df4" + integrity sha512-QTHzsGd1EhbZs4AsQ20JX1rC3cOlt/IWJruk893DfLRr57lcnOeMaWG4K0JrRta4mIJZKth2Au3mM3u03/JWKw== + dependencies: + "@types/unist" "^3.0.0" + unist-util-stringify-position "^4.0.0" + +vfile@^6.0.0: + version "6.0.3" + resolved "https://registry.yarnpkg.com/vfile/-/vfile-6.0.3.tgz#3652ab1c496531852bf55a6bac57af981ebc38ab" + integrity sha512-KzIbH/9tXat2u30jf+smMwFCsno4wHVdNmzFyL+T/L3UGqqk6JKfVqOFOZEpZSHADH1k40ab6NUIXZq422ov3Q== + dependencies: + "@types/unist" "^3.0.0" + vfile-message "^4.0.0" + +vite@^7.2.2: + version "7.2.7" + resolved "https://registry.yarnpkg.com/vite/-/vite-7.2.7.tgz#0789a4c3206081699f34a9ecca2dda594a07478e" + integrity sha512-ITcnkFeR3+fI8P1wMgItjGrR10170d8auB4EpMLPqmx6uxElH3a/hHGQabSHKdqd4FXWO1nFIp9rRn7JQ34ACQ== + dependencies: + esbuild "^0.25.0" + fdir "^6.5.0" + picomatch "^4.0.3" + postcss "^8.5.6" + rollup "^4.43.0" + tinyglobby "^0.2.15" + optionalDependencies: + fsevents "~2.3.3" + +vitepress@^2.0.0-alpha.12: + version "2.0.0-alpha.15" + resolved "https://registry.yarnpkg.com/vitepress/-/vitepress-2.0.0-alpha.15.tgz#eefe3e414b6f32b72bd03d1bce2738298f9b3f7b" + integrity sha512-jhjSYd10Z6RZiKOa7jy0xMVf5NB5oSc/lS3bD/QoUc6V8PrvQR5JhC9104NEt6+oTGY/ftieVWxY9v7YI+1IjA== + dependencies: + "@docsearch/css" "^4.3.2" + "@docsearch/js" "^4.3.2" + "@iconify-json/simple-icons" "^1.2.59" + "@shikijs/core" "^3.15.0" + "@shikijs/transformers" "^3.15.0" + "@shikijs/types" "^3.15.0" + "@types/markdown-it" "^14.1.2" + "@vitejs/plugin-vue" "^6.0.1" + "@vue/devtools-api" "^8.0.5" + "@vue/shared" "^3.5.24" + "@vueuse/core" "^14.0.0" + "@vueuse/integrations" "^14.0.0" + focus-trap "^7.6.6" + mark.js "8.11.1" + minisearch "^7.2.0" + shiki "^3.15.0" + vite "^7.2.2" + vue "^3.5.24" + +vue@^3.5.24: + version "3.5.25" + resolved "https://registry.yarnpkg.com/vue/-/vue-3.5.25.tgz#b68b5092b617c57a0a36e8e640fd2c09aa2a374d" + integrity sha512-YLVdgv2K13WJ6n+kD5owehKtEXwdwXuj2TTyJMsO7pSeKw2bfRNZGjhB7YzrpbMYj5b5QsUebHpOqR3R3ziy/g== + dependencies: + "@vue/compiler-dom" "3.5.25" + "@vue/compiler-sfc" "3.5.25" + "@vue/runtime-dom" "3.5.25" + "@vue/server-renderer" "3.5.25" + "@vue/shared" "3.5.25" + +which-module@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/which-module/-/which-module-2.0.1.tgz#776b1fe35d90aebe99e8ac15eb24093389a4a409" + integrity sha512-iBdZ57RDvnOR9AGBhML2vFZf7h8vmBjhoaZqODJBFWHVtKkDmKuHai3cx5PgVMrX5YDNp27AofYbAwctSS+vhQ== + +which@^2.0.1: + version "2.0.2" + resolved "https://registry.yarnpkg.com/which/-/which-2.0.2.tgz#7c6a8dd0a636a0327e10b59c9286eee93f3f51b1" + integrity sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA== + dependencies: + isexe "^2.0.0" + +wrap-ansi@^6.2.0: + version "6.2.0" + resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-6.2.0.tgz#e9393ba07102e6c91a3b221478f0257cd2856e53" + integrity sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA== + dependencies: + ansi-styles "^4.0.0" + string-width "^4.1.0" + strip-ansi "^6.0.0" + +wrap-ansi@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43" + integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q== + dependencies: + ansi-styles "^4.0.0" + string-width "^4.1.0" + strip-ansi "^6.0.0" + +wrappy@1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" + integrity sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ== + +write-file-atomic@^3.0.0: + version "3.0.3" + resolved "https://registry.yarnpkg.com/write-file-atomic/-/write-file-atomic-3.0.3.tgz#56bd5c5a5c70481cd19c571bd39ab965a5de56e8" + integrity sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q== + dependencies: + imurmurhash "^0.1.4" + is-typedarray "^1.0.0" + signal-exit "^3.0.2" + typedarray-to-buffer "^3.1.5" + +y18n@^4.0.0: + version "4.0.3" + resolved "https://registry.yarnpkg.com/y18n/-/y18n-4.0.3.tgz#b5f259c82cd6e336921efd7bfd8bf560de9eeedf" + integrity sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ== + +yallist@^3.0.2: + version "3.1.1" + resolved "https://registry.yarnpkg.com/yallist/-/yallist-3.1.1.tgz#dbb7daf9bfd8bac9ab45ebf602b8cbad0d5d08fd" + integrity sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g== + +yargs-parser@^18.1.2: + version "18.1.3" + resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-18.1.3.tgz#be68c4975c6b2abf469236b0c870362fab09a7b0" + integrity sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ== + dependencies: + camelcase "^5.0.0" + decamelize "^1.2.0" + +yargs@^15.0.2: + version "15.4.1" + resolved "https://registry.yarnpkg.com/yargs/-/yargs-15.4.1.tgz#0d87a16de01aee9d8bec2bfbf74f67851730f4f8" + integrity sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A== + dependencies: + cliui "^6.0.0" + decamelize "^1.2.0" + find-up "^4.1.0" + get-caller-file "^2.0.1" + require-directory "^2.1.1" + require-main-filename "^2.0.0" + set-blocking "^2.0.0" + string-width "^4.2.0" + which-module "^2.0.0" + y18n "^4.0.0" + yargs-parser "^18.1.2" + +yauzl@^2.10.0: + version "2.10.0" + resolved "https://registry.yarnpkg.com/yauzl/-/yauzl-2.10.0.tgz#c7eb17c93e112cb1086fa6d8e51fb0667b79a5f9" + integrity sha512-p4a9I6X6nu6IhoGmBqAcbJy1mlC4j27vEPZX9F4L4/vZT3Lyq1VkFHw/V/PUcB9Buo+DG3iHkT0x3Qya58zc3g== + dependencies: + buffer-crc32 "~0.2.3" + fd-slicer "~1.1.0" + +zwitch@^2.0.4: + version "2.0.4" + resolved "https://registry.yarnpkg.com/zwitch/-/zwitch-2.0.4.tgz#c827d4b0acb76fc3e685a4c6ec2902d51070e9d7" + integrity sha512-bXE4cR/kVZhKZX/RjPEflHaKVhUVl85noU3v6b8apfQEc1x4A+zBxjZ4lN8LqGd6WZ3dl98pY4o717VFmoPp+A==