commit a03a620acc3db14103867971f8b39f0b29271186 Author: hardik Date: Wed Aug 12 11:53:13 2026 +0530 first commit diff --git a/.agents/rules/graphify.md b/.agents/rules/graphify.md new file mode 100644 index 0000000..0fc7864 --- /dev/null +++ b/.agents/rules/graphify.md @@ -0,0 +1,14 @@ +--- +trigger: always_on +description: Consult the graphify knowledge graph at graphify-out/ for codebase and architecture questions. +--- + +## graphify + +This project has a graphify knowledge graph at graphify-out/. + +Rules: +- For codebase or architecture questions, when `graphify-out/graph.json` exists, first run `graphify query ""` (CLI) or `query_graph` (MCP). Use `graphify path "" ""` / `shortest_path` for relationships and `graphify explain ""` / `get_node` for focused concepts. These return a scoped subgraph, usually much smaller than `GRAPH_REPORT.md` or raw grep output. +- If graphify-out/wiki/index.md exists, navigate it instead of reading raw files +- Read graphify-out/GRAPH_REPORT.md only for broad architecture review or when query/path/explain do not surface enough context +- After modifying code files in this session, run `graphify update .` to keep the graph current (AST-only, no API cost) diff --git a/.agents/workflows/graphify.md b/.agents/workflows/graphify.md new file mode 100644 index 0000000..6befaed --- /dev/null +++ b/.agents/workflows/graphify.md @@ -0,0 +1,10 @@ +--- +name: graphify +description: Turn any folder of files into a navigable knowledge graph +--- + +# Workflow: graphify + +Follow the graphify skill to run the full pipeline. + +If no path argument is given, use `.` (current directory). diff --git a/.env b/.env new file mode 100644 index 0000000..c1912cf --- /dev/null +++ b/.env @@ -0,0 +1,7 @@ +# RestroAI Frontend Environment Variables + +# The HTTP URL of the remote backend server +VITE_API_URL=https://restro-backend.navigolabs.com + +# The WebSocket URL of the remote backend server +VITE_WS_URL=wss://restro-backend.navigolabs.com diff --git a/.env.example b/.env.example new file mode 100644 index 0000000..cebb702 --- /dev/null +++ b/.env.example @@ -0,0 +1,7 @@ +# RestroAI Frontend Environment Variables + +# The HTTP URL of the remote backend server +VITE_API_URL=https://api.yourdomain.com + +# The WebSocket URL of the remote backend server +VITE_WS_URL=wss://api.yourdomain.com diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..a547bf3 --- /dev/null +++ b/.gitignore @@ -0,0 +1,24 @@ +# Logs +logs +*.log +npm-debug.log* +yarn-debug.log* +yarn-error.log* +pnpm-debug.log* +lerna-debug.log* + +node_modules +dist +dist-ssr +*.local + +# Editor directories and files +.vscode/* +!.vscode/extensions.json +.idea +.DS_Store +*.suo +*.ntvs* +*.njsproj +*.sln +*.sw? diff --git a/.oxlintrc.json b/.oxlintrc.json new file mode 100644 index 0000000..6fa991d --- /dev/null +++ b/.oxlintrc.json @@ -0,0 +1,8 @@ +{ + "$schema": "./node_modules/oxlint/configuration_schema.json", + "plugins": ["react", "typescript", "oxc"], + "rules": { + "react/rules-of-hooks": "error", + "react/only-export-components": ["warn", { "allowConstantExport": true }] + } +} diff --git a/README.md b/README.md new file mode 100644 index 0000000..d6af7e3 --- /dev/null +++ b/README.md @@ -0,0 +1,32 @@ +# React + TypeScript + Vite + +This template provides a minimal setup to get React working in Vite with HMR and some Oxlint rules. + +Currently, two official plugins are available: + +- [@vitejs/plugin-react](https://github.com/vitejs/vite-plugin-react/blob/main/packages/plugin-react) uses [Oxc](https://oxc.rs) +- [@vitejs/plugin-react-swc](https://github.com/vitejs/vite-plugin-react/blob/main/packages/plugin-react-swc) uses [SWC](https://swc.rs/) + +## React Compiler + +The React Compiler is not enabled on this template because of its impact on dev & build performances. To add it, see [this documentation](https://react.dev/learn/react-compiler/installation). + +## Expanding the Oxlint configuration + +If you are developing a production application, we recommend enabling type-aware lint rules by installing `oxlint-tsgolint` and editing `.oxlintrc.json`: + +```json +{ + "$schema": "./node_modules/oxlint/configuration_schema.json", + "plugins": ["react", "typescript", "oxc"], + "options": { + "typeAware": true + }, + "rules": { + "react/rules-of-hooks": "error", + "react/only-export-components": ["warn", { "allowConstantExport": true }] + } +} +``` + +See the [Oxlint rules documentation](https://oxc.rs/docs/guide/usage/linter/rules) for the full list of rules and categories. diff --git a/graphify-out/.graphify_analysis.json b/graphify-out/.graphify_analysis.json new file mode 100644 index 0000000..3dd8921 --- /dev/null +++ b/graphify-out/.graphify_analysis.json @@ -0,0 +1,407 @@ +{ + "communities": { + "0": [ + "src_app", + "src_app_app", + "src_app_customerview", + "src_app_gettablenumfromurl", + "src_components_admin_staffloginmodal", + "src_components_admin_staffloginmodal_staffloginmodal", + "src_components_admin_staffloginmodal_staffloginmodalprops", + "src_components_customer_billpaymentview", + "src_components_customer_billpaymentview_billpaymentview", + "src_components_customer_billpaymentview_billpaymentviewprops", + "src_components_customer_customizationmodal_customizationmodal", + "src_components_customer_orderstatusview", + "src_components_customer_orderstatusview_order_steps", + "src_components_customer_orderstatusview_orderstatusview", + "src_components_customer_orderstatusview_orderstatusviewprops", + "src_components_customer_tablelandingview", + "src_components_customer_tablelandingview_tablelandingview", + "src_components_customer_tablelandingview_tablelandingviewprops", + "src_main", + "src_services_api", + "src_services_api_apirequest", + "src_services_api_clearcustomersession", + "src_services_api_cleartokens", + "src_services_api_getaccesstoken", + "src_services_api_getbackendmenuid", + "src_services_api_getcustomersessionid", + "src_services_api_getcustomertoken", + "src_services_api_getfrontendmenuitem", + "src_services_api_getrefreshtoken", + "src_services_api_handlemockrequest", + "src_services_api_isdemomode", + "src_services_api_mockdb", + "src_services_api_notifywslisteners", + "src_services_api_restrowebsocket", + "src_services_api_restrowebsocket_close", + "src_services_api_restrowebsocket_connect", + "src_services_api_restrowebsocket_constructor", + "src_services_api_setcustomersession", + "src_services_api_setdemomodechangecallback", + "src_services_api_settokens", + "src_services_api_subscribetowsevents", + "src_services_api_triggerdemomode", + "src_services_api_wslisteners", + "src_theme_theme", + "src_theme_theme_theme" + ], + "1": [ + "ref_react", + "src_components_admin_inventoryview", + "src_components_analytics_analyticsdashboard", + "src_components_common_navigation", + "src_components_common_navigation_navigation", + "src_components_common_navigation_navigationprops", + "src_components_common_statusbadge", + "src_components_common_statusbadge_statusbadge", + "src_components_customer_cartreviewview", + "src_components_customer_cartreviewview_cartreviewview", + "src_components_customer_cartreviewview_cartreviewviewprops", + "src_components_customer_customizationmodal", + "src_components_customer_customizationmodal_customizationmodalprops", + "src_components_customer_menubrowseview", + "src_components_customer_menubrowseview_dietary_filters", + "src_components_customer_menubrowseview_menubrowseview", + "src_components_customer_menubrowseview_menubrowseviewprops", + "src_components_customer_menubrowseview_spice_icons", + "src_components_table_tablelandingview", + "src_components_table_tablelandingview_tablelandingview", + "src_data_menudata", + "src_data_menudata_categories", + "src_data_menudata_categorytype", + "src_data_menudata_menu_items", + "src_data_menudata_menuitem" + ], + "2": [ + "emotion_react", + "emotion_styled", + "mui_icons_material", + "mui_material", + "package", + "package_dependencies", + "package_dependencies_emotion_react", + "package_dependencies_emotion_styled", + "package_dependencies_mui_icons_material", + "package_dependencies_mui_material", + "package_dependencies_react", + "package_dependencies_react_dom", + "package_name", + "package_packagemanager", + "package_private", + "package_scripts", + "package_scripts_build", + "package_scripts_dev", + "package_scripts_lint", + "package_scripts_preview", + "package_type", + "package_version", + "react", + "react_dom" + ], + "3": [ + "ref_dom", + "ref_src", + "ref_vite_client", + "tsconfig_app", + "tsconfig_app_compileroptions", + "tsconfig_app_compileroptions_allowarbitraryextensions", + "tsconfig_app_compileroptions_allowimportingtsextensions", + "tsconfig_app_compileroptions_erasablesyntaxonly", + "tsconfig_app_compileroptions_jsx", + "tsconfig_app_compileroptions_lib", + "tsconfig_app_compileroptions_module", + "tsconfig_app_compileroptions_moduledetection", + "tsconfig_app_compileroptions_moduleresolution", + "tsconfig_app_compileroptions_noemit", + "tsconfig_app_compileroptions_nofallthroughcasesinswitch", + "tsconfig_app_compileroptions_nounusedlocals", + "tsconfig_app_compileroptions_nounusedparameters", + "tsconfig_app_compileroptions_skiplibcheck", + "tsconfig_app_compileroptions_target", + "tsconfig_app_compileroptions_tsbuildinfofile", + "tsconfig_app_compileroptions_types", + "tsconfig_app_compileroptions_verbatimmodulesyntax", + "tsconfig_app_include", + "tsconfig_app_json_ref_es2023" + ], + "4": [ + "oxlint", + "oxlintrc", + "oxlintrc_plugins", + "oxlintrc_rules", + "oxlintrc_rules_react_only_export_components", + "oxlintrc_rules_react_rules_of_hooks", + "oxlintrc_schema", + "package_devdependencies", + "package_devdependencies_oxlint", + "package_devdependencies_types_node", + "package_devdependencies_types_react", + "package_devdependencies_types_react_dom", + "package_devdependencies_typescript", + "package_devdependencies_vite", + "package_devdependencies_vitejs_plugin_react", + "ref_oxc", + "ref_warn", + "types_node", + "types_react", + "types_react_dom", + "typescript", + "vite", + "vitejs_plugin_react" + ], + "5": [ + "ref_node", + "ref_vite_config_ts", + "tsconfig_node", + "tsconfig_node_compileroptions", + "tsconfig_node_compileroptions_allowimportingtsextensions", + "tsconfig_node_compileroptions_erasablesyntaxonly", + "tsconfig_node_compileroptions_lib", + "tsconfig_node_compileroptions_module", + "tsconfig_node_compileroptions_moduledetection", + "tsconfig_node_compileroptions_noemit", + "tsconfig_node_compileroptions_nofallthroughcasesinswitch", + "tsconfig_node_compileroptions_nounusedlocals", + "tsconfig_node_compileroptions_nounusedparameters", + "tsconfig_node_compileroptions_skiplibcheck", + "tsconfig_node_compileroptions_target", + "tsconfig_node_compileroptions_tsbuildinfofile", + "tsconfig_node_compileroptions_types", + "tsconfig_node_compileroptions_verbatimmodulesyntax", + "tsconfig_node_include", + "tsconfig_node_json_ref_es2023" + ], + "6": [ + "src_components_customer_voiceassistantmodal", + "src_components_customer_voiceassistantmodal_detecteditem", + "src_components_customer_voiceassistantmodal_parsetranscripttoitems", + "src_components_customer_voiceassistantmodal_quick_commands", + "src_components_customer_voiceassistantmodal_voiceassistantmodal", + "src_components_customer_voiceassistantmodal_voiceassistantmodalprops", + "src_hooks_usespeechrecognition", + "src_hooks_usespeechrecognition_ispeechrecognition", + "src_hooks_usespeechrecognition_ispeechrecognition_abort", + "src_hooks_usespeechrecognition_ispeechrecognition_start", + "src_hooks_usespeechrecognition_ispeechrecognition_stop", + "src_hooks_usespeechrecognition_speechrecognitionerrorevent", + "src_hooks_usespeechrecognition_speechrecognitionevent", + "src_hooks_usespeechrecognition_usespeechrecognition", + "src_hooks_usespeechrecognition_usespeechrecognitionreturn", + "src_hooks_usespeechrecognition_voicestate", + "src_hooks_usespeechrecognition_window", + "src_hooks_usespeechsynthesis", + "src_hooks_usespeechsynthesis_usespeechsynthesis", + "src_hooks_usespeechsynthesis_usespeechsynthesisreturn" + ], + "7": [ + "src_components_admin_admindesktopshell", + "src_components_admin_admindesktopshell_admindesktopshell", + "src_components_admin_admindesktopshell_tabtype", + "src_components_admin_billingmanagerview", + "src_components_admin_billingmanagerview_billingmanagerview", + "src_components_admin_feedbackinboxview", + "src_components_admin_feedbackinboxview_feedbackinboxview", + "src_components_admin_inventoryview_inventoryview", + "src_components_admin_reservationsview", + "src_components_admin_reservationsview_reservationsview", + "src_components_admin_staffshiftsview", + "src_components_admin_staffshiftsview_staffshiftsview", + "src_components_admin_suppliersview", + "src_components_admin_suppliersview_suppliersview", + "src_components_admin_tablemanagementview", + "src_components_admin_tablemanagementview_tablemanagementview", + "src_components_analytics_analyticsdashboard_analyticsdashboard", + "src_components_kds_kdskanban_kdskanban", + "src_services_api_api" + ], + "8": [ + "src_components_admin_admindesktopshell_admindesktopshellprops", + "src_components_common_statusbadge_statusbadgeprops", + "src_components_kds_kdskanban", + "src_components_kds_kdskanban_kdskanbanprops", + "src_components_kds_kdsticketcard", + "src_components_kds_kdsticketcard_kdsticketcard", + "src_components_kds_kdsticketcard_kdsticketcardprops", + "src_components_voice_voiceorderingview", + "src_components_voice_voiceorderingview_voiceorderingview", + "src_components_voice_voiceorderingview_voiceorderingviewprops", + "src_types_index", + "src_types_index_analyticsmetric", + "src_types_index_dishperformance", + "src_types_index_kdsorder", + "src_types_index_orderitem", + "src_types_index_orderstatus", + "src_types_index_ordertype", + "src_types_index_voicecommandsuggestion" + ], + "9": [ + "tsconfig", + "tsconfig_files", + "tsconfig_references" + ], + "10": [ + "vite_config" + ] + }, + "cohesion": { + "0": 0.08080808080808081, + "1": 0.16333333333333333, + "2": 0.08333333333333333, + "3": 0.08333333333333333, + "4": 0.08695652173913043, + "5": 0.1, + "6": 0.15789473684210525, + "7": 0.1695906432748538, + "8": 0.20261437908496732, + "9": 0.6666666666666666, + "10": 1.0 + }, + "gods": [ + { + "id": "ref_react", + "label": "react", + "degree": 28 + }, + { + "id": "tsconfig_app_compileroptions", + "label": "compilerOptions", + "degree": 18 + }, + { + "id": "tsconfig_node_compileroptions", + "label": "compilerOptions", + "degree": 15 + }, + { + "id": "src_services_api_api", + "label": "api", + "degree": 13 + }, + { + "id": "src_data_menudata_menuitem", + "label": "MenuItem", + "degree": 10 + }, + { + "id": "src_types_index_orderstatus", + "label": "OrderStatus", + "degree": 10 + }, + { + "id": "src_data_menudata_menu_items", + "label": "MENU_ITEMS", + "degree": 9 + }, + { + "id": "src_app_app", + "label": "App()", + "degree": 8 + }, + { + "id": "src_types_index_kdsorder", + "label": "KDSOrder", + "degree": 8 + }, + { + "id": "src_components_common_statusbadge_statusbadge", + "label": "StatusBadge()", + "degree": 7 + } + ], + "surprises": [ + { + "source": "plugins", + "target": "typescript", + "source_files": [ + ".oxlintrc.json", + "package.json" + ], + "confidence": "EXTRACTED", + "relation": "extends", + "why": "connects across different repos/directories" + }, + { + "source": "DetectedItem", + "target": "MenuItem", + "source_files": [ + "src/components/customer/VoiceAssistantModal.tsx", + "src/data/menuData.ts" + ], + "confidence": "EXTRACTED", + "relation": "references", + "why": "bridges separate communities; peripheral node `DetectedItem` unexpectedly reaches hub `MenuItem`" + }, + { + "source": "CustomizationModalProps", + "target": "MenuItem", + "source_files": [ + "src/components/customer/CustomizationModal.tsx", + "src/data/menuData.ts" + ], + "confidence": "EXTRACTED", + "relation": "references", + "why": "peripheral node `CustomizationModalProps` unexpectedly reaches hub `MenuItem`" + }, + { + "source": "MenuBrowseViewProps", + "target": "MenuItem", + "source_files": [ + "src/components/customer/MenuBrowseView.tsx", + "src/data/menuData.ts" + ], + "confidence": "EXTRACTED", + "relation": "references", + "why": "peripheral node `MenuBrowseViewProps` unexpectedly reaches hub `MenuItem`" + }, + { + "source": "getFrontendMenuItem()", + "target": "MENU_ITEMS", + "source_files": [ + "src/services/api.ts", + "src/data/menuData.ts" + ], + "confidence": "EXTRACTED", + "relation": "references", + "why": "bridges separate communities" + } + ], + "questions": [ + { + "type": "bridge_node", + "question": "Why does `react` connect `react` to `App.tsx`, `devDependencies`, `VoiceAssistantModal.tsx`, `AdminDesktopShell.tsx`, `index.ts`?", + "why": "High betweenness centrality (0.333) - this node is a cross-community bridge." + }, + { + "type": "bridge_node", + "question": "Why does `plugins` connect `devDependencies` to `react`?", + "why": "High betweenness centrality (0.252) - this node is a cross-community bridge." + }, + { + "type": "bridge_node", + "question": "Why does `devDependencies` connect `devDependencies` to `package.json`?", + "why": "High betweenness centrality (0.217) - this node is a cross-community bridge." + }, + { + "type": "isolated_nodes", + "question": "What connects `$schema`, `oxc`, `react/rules-of-hooks` to the rest of the system?", + "why": "85 weakly-connected nodes found - possible documentation gaps or missing edges." + }, + { + "type": "low_cohesion", + "question": "Should `App.tsx` be split into smaller, more focused modules?", + "why": "Cohesion score 0.08080808080808081 - nodes in this community are weakly interconnected." + }, + { + "type": "low_cohesion", + "question": "Should `package.json` be split into smaller, more focused modules?", + "why": "Cohesion score 0.08333333333333333 - nodes in this community are weakly interconnected." + }, + { + "type": "low_cohesion", + "question": "Should `compilerOptions` be split into smaller, more focused modules?", + "why": "Cohesion score 0.08333333333333333 - nodes in this community are weakly interconnected." + } + ] +} \ No newline at end of file diff --git a/graphify-out/.graphify_ast.json b/graphify-out/.graphify_ast.json new file mode 100644 index 0000000..633daba --- /dev/null +++ b/graphify-out/.graphify_ast.json @@ -0,0 +1,7745 @@ +{ + "nodes": [ + { + "id": "oxlintrc", + "label": ".oxlintrc.json", + "file_type": "code", + "source_file": ".oxlintrc.json", + "source_location": "L1", + "_origin": "ast" + }, + { + "id": "oxlintrc_schema", + "label": "$schema", + "file_type": "code", + "source_file": ".oxlintrc.json", + "source_location": "L2", + "_origin": "ast" + }, + { + "id": "oxlintrc_plugins", + "label": "plugins", + "file_type": "code", + "source_file": ".oxlintrc.json", + "source_location": "L3", + "_origin": "ast" + }, + { + "id": "ref_react", + "label": "react", + "file_type": "concept", + "source_file": ".oxlintrc.json", + "source_location": "L3", + "_origin": "ast" + }, + { + "id": "ref_typescript", + "label": "typescript", + "file_type": "concept", + "source_file": ".oxlintrc.json", + "source_location": "L3", + "_origin": "ast" + }, + { + "id": "ref_oxc", + "label": "oxc", + "file_type": "concept", + "source_file": ".oxlintrc.json", + "source_location": "L3", + "_origin": "ast" + }, + { + "id": "oxlintrc_rules", + "label": "rules", + "file_type": "code", + "source_file": ".oxlintrc.json", + "source_location": "L4", + "_origin": "ast" + }, + { + "id": "oxlintrc_rules_react_rules_of_hooks", + "label": "react/rules-of-hooks", + "file_type": "code", + "source_file": ".oxlintrc.json", + "source_location": "L5", + "_origin": "ast" + }, + { + "id": "oxlintrc_rules_react_only_export_components", + "label": "react/only-export-components", + "file_type": "code", + "source_file": ".oxlintrc.json", + "source_location": "L6", + "_origin": "ast" + }, + { + "id": "ref_warn", + "label": "warn", + "file_type": "concept", + "source_file": ".oxlintrc.json", + "source_location": "L6", + "_origin": "ast" + }, + { + "id": "package", + "label": "package.json", + "file_type": "code", + "source_file": "package.json", + "source_location": "L1", + "_origin": "ast" + }, + { + "id": "package_name", + "label": "name", + "file_type": "code", + "source_file": "package.json", + "source_location": "L2", + "_origin": "ast" + }, + { + "id": "package_private", + "label": "private", + "file_type": "code", + "source_file": "package.json", + "source_location": "L3", + "_origin": "ast" + }, + { + "id": "package_version", + "label": "version", + "file_type": "code", + "source_file": "package.json", + "source_location": "L4", + "_origin": "ast" + }, + { + "id": "package_type", + "label": "type", + "file_type": "code", + "source_file": "package.json", + "source_location": "L5", + "_origin": "ast" + }, + { + "id": "package_packagemanager", + "label": "packageManager", + "file_type": "code", + "source_file": "package.json", + "source_location": "L6", + "_origin": "ast" + }, + { + "id": "package_scripts", + "label": "scripts", + "file_type": "code", + "source_file": "package.json", + "source_location": "L7", + "_origin": "ast" + }, + { + "id": "package_scripts_dev", + "label": "dev", + "file_type": "code", + "source_file": "package.json", + "source_location": "L8", + "_origin": "ast" + }, + { + "id": "package_scripts_build", + "label": "build", + "file_type": "code", + "source_file": "package.json", + "source_location": "L9", + "_origin": "ast" + }, + { + "id": "package_scripts_lint", + "label": "lint", + "file_type": "code", + "source_file": "package.json", + "source_location": "L10", + "_origin": "ast" + }, + { + "id": "package_scripts_preview", + "label": "preview", + "file_type": "code", + "source_file": "package.json", + "source_location": "L11", + "_origin": "ast" + }, + { + "id": "package_dependencies", + "label": "dependencies", + "file_type": "code", + "source_file": "package.json", + "source_location": "L13", + "_origin": "ast" + }, + { + "id": "package_dependencies_emotion_react", + "label": "@emotion/react", + "file_type": "code", + "source_file": "package.json", + "source_location": "L14", + "_origin": "ast" + }, + { + "id": "emotion_react", + "label": "@emotion/react", + "file_type": "concept", + "source_file": "package.json", + "source_location": "L14", + "_origin": "ast" + }, + { + "id": "package_dependencies_emotion_styled", + "label": "@emotion/styled", + "file_type": "code", + "source_file": "package.json", + "source_location": "L15", + "_origin": "ast" + }, + { + "id": "emotion_styled", + "label": "@emotion/styled", + "file_type": "concept", + "source_file": "package.json", + "source_location": "L15", + "_origin": "ast" + }, + { + "id": "package_dependencies_mui_icons_material", + "label": "@mui/icons-material", + "file_type": "code", + "source_file": "package.json", + "source_location": "L16", + "_origin": "ast" + }, + { + "id": "mui_icons_material", + "label": "@mui/icons-material", + "file_type": "concept", + "source_file": "package.json", + "source_location": "L16", + "_origin": "ast" + }, + { + "id": "package_dependencies_mui_material", + "label": "@mui/material", + "file_type": "code", + "source_file": "package.json", + "source_location": "L17", + "_origin": "ast" + }, + { + "id": "mui_material", + "label": "@mui/material", + "file_type": "concept", + "source_file": "package.json", + "source_location": "L17", + "_origin": "ast" + }, + { + "id": "package_dependencies_react", + "label": "react", + "file_type": "code", + "source_file": "package.json", + "source_location": "L18", + "_origin": "ast" + }, + { + "id": "react", + "label": "react", + "file_type": "concept", + "source_file": "package.json", + "source_location": "L18", + "_origin": "ast" + }, + { + "id": "package_dependencies_react_dom", + "label": "react-dom", + "file_type": "code", + "source_file": "package.json", + "source_location": "L19", + "_origin": "ast" + }, + { + "id": "react_dom", + "label": "react-dom", + "file_type": "concept", + "source_file": "package.json", + "source_location": "L19", + "_origin": "ast" + }, + { + "id": "package_devdependencies", + "label": "devDependencies", + "file_type": "code", + "source_file": "package.json", + "source_location": "L21", + "_origin": "ast" + }, + { + "id": "package_devdependencies_types_node", + "label": "@types/node", + "file_type": "code", + "source_file": "package.json", + "source_location": "L22", + "_origin": "ast" + }, + { + "id": "types_node", + "label": "@types/node", + "file_type": "concept", + "source_file": "package.json", + "source_location": "L22", + "_origin": "ast" + }, + { + "id": "package_devdependencies_types_react", + "label": "@types/react", + "file_type": "code", + "source_file": "package.json", + "source_location": "L23", + "_origin": "ast" + }, + { + "id": "types_react", + "label": "@types/react", + "file_type": "concept", + "source_file": "package.json", + "source_location": "L23", + "_origin": "ast" + }, + { + "id": "package_devdependencies_types_react_dom", + "label": "@types/react-dom", + "file_type": "code", + "source_file": "package.json", + "source_location": "L24", + "_origin": "ast" + }, + { + "id": "types_react_dom", + "label": "@types/react-dom", + "file_type": "concept", + "source_file": "package.json", + "source_location": "L24", + "_origin": "ast" + }, + { + "id": "package_devdependencies_vitejs_plugin_react", + "label": "@vitejs/plugin-react", + "file_type": "code", + "source_file": "package.json", + "source_location": "L25", + "_origin": "ast" + }, + { + "id": "vitejs_plugin_react", + "label": "@vitejs/plugin-react", + "file_type": "concept", + "source_file": "package.json", + "source_location": "L25", + "_origin": "ast" + }, + { + "id": "package_devdependencies_oxlint", + "label": "oxlint", + "file_type": "code", + "source_file": "package.json", + "source_location": "L26", + "_origin": "ast" + }, + { + "id": "oxlint", + "label": "oxlint", + "file_type": "concept", + "source_file": "package.json", + "source_location": "L26", + "_origin": "ast" + }, + { + "id": "package_devdependencies_typescript", + "label": "typescript", + "file_type": "code", + "source_file": "package.json", + "source_location": "L27", + "_origin": "ast" + }, + { + "id": "typescript", + "label": "typescript", + "file_type": "concept", + "source_file": "package.json", + "source_location": "L27", + "_origin": "ast" + }, + { + "id": "package_devdependencies_vite", + "label": "vite", + "file_type": "code", + "source_file": "package.json", + "source_location": "L28", + "_origin": "ast" + }, + { + "id": "vite", + "label": "vite", + "file_type": "concept", + "source_file": "package.json", + "source_location": "L28", + "_origin": "ast" + }, + { + "id": "src_app", + "label": "App.tsx", + "file_type": "code", + "source_file": "src/App.tsx", + "source_location": "L1", + "_origin": "ast" + }, + { + "id": "src_app_customerview", + "label": "CustomerView", + "file_type": "code", + "source_file": "src/App.tsx", + "source_location": "L17", + "_callable": true, + "_callable_class": true, + "_origin": "ast" + }, + { + "id": "src_app_gettablenumfromurl", + "label": "getTableNumFromUrl()", + "file_type": "code", + "source_file": "src/App.tsx", + "source_location": "L19", + "_callable": true, + "_origin": "ast" + }, + { + "id": "src_app_app", + "label": "App()", + "file_type": "code", + "source_file": "src/App.tsx", + "source_location": "L36", + "_callable": true, + "_origin": "ast" + }, + { + "id": "src_components_admin_admindesktopshell", + "label": "AdminDesktopShell.tsx", + "file_type": "code", + "source_file": "src/components/admin/AdminDesktopShell.tsx", + "source_location": "L1", + "_origin": "ast" + }, + { + "id": "src_components_admin_admindesktopshell_admindesktopshellprops", + "label": "AdminDesktopShellProps", + "file_type": "code", + "source_file": "src/components/admin/AdminDesktopShell.tsx", + "source_location": "L45", + "_callable": true, + "_callable_class": true, + "_origin": "ast" + }, + { + "id": "src_components_admin_admindesktopshell_tabtype", + "label": "TabType", + "file_type": "code", + "source_file": "src/components/admin/AdminDesktopShell.tsx", + "source_location": "L55", + "_callable": true, + "_callable_class": true, + "_origin": "ast" + }, + { + "id": "src_components_admin_admindesktopshell_admindesktopshell", + "label": "AdminDesktopShell()", + "file_type": "code", + "source_file": "src/components/admin/AdminDesktopShell.tsx", + "source_location": "L67", + "_callable": true, + "_origin": "ast" + }, + { + "id": "src_components_admin_billingmanagerview", + "label": "BillingManagerView.tsx", + "file_type": "code", + "source_file": "src/components/admin/BillingManagerView.tsx", + "source_location": "L1", + "_origin": "ast" + }, + { + "id": "src_components_admin_billingmanagerview_billingmanagerview", + "label": "BillingManagerView()", + "file_type": "code", + "source_file": "src/components/admin/BillingManagerView.tsx", + "source_location": "L34", + "_callable": true, + "_origin": "ast" + }, + { + "id": "src_components_admin_feedbackinboxview", + "label": "FeedbackInboxView.tsx", + "file_type": "code", + "source_file": "src/components/admin/FeedbackInboxView.tsx", + "source_location": "L1", + "_origin": "ast" + }, + { + "id": "src_components_admin_feedbackinboxview_feedbackinboxview", + "label": "FeedbackInboxView()", + "file_type": "code", + "source_file": "src/components/admin/FeedbackInboxView.tsx", + "source_location": "L24", + "_callable": true, + "_origin": "ast" + }, + { + "id": "src_components_admin_inventoryview", + "label": "InventoryView.tsx", + "file_type": "code", + "source_file": "src/components/admin/InventoryView.tsx", + "source_location": "L1", + "_origin": "ast" + }, + { + "id": "src_components_admin_inventoryview_inventoryview", + "label": "InventoryView()", + "file_type": "code", + "source_file": "src/components/admin/InventoryView.tsx", + "source_location": "L41", + "_callable": true, + "_origin": "ast" + }, + { + "id": "src_components_admin_reservationsview", + "label": "ReservationsView.tsx", + "file_type": "code", + "source_file": "src/components/admin/ReservationsView.tsx", + "source_location": "L1", + "_origin": "ast" + }, + { + "id": "src_components_admin_reservationsview_reservationsview", + "label": "ReservationsView()", + "file_type": "code", + "source_file": "src/components/admin/ReservationsView.tsx", + "source_location": "L33", + "_callable": true, + "_origin": "ast" + }, + { + "id": "src_components_admin_staffloginmodal", + "label": "StaffLoginModal.tsx", + "file_type": "code", + "source_file": "src/components/admin/StaffLoginModal.tsx", + "source_location": "L1", + "_origin": "ast" + }, + { + "id": "src_components_admin_staffloginmodal_staffloginmodalprops", + "label": "StaffLoginModalProps", + "file_type": "code", + "source_file": "src/components/admin/StaffLoginModal.tsx", + "source_location": "L19", + "_callable": true, + "_callable_class": true, + "_origin": "ast" + }, + { + "id": "src_components_admin_staffloginmodal_staffloginmodal", + "label": "StaffLoginModal()", + "file_type": "code", + "source_file": "src/components/admin/StaffLoginModal.tsx", + "source_location": "L25", + "_callable": true, + "_origin": "ast" + }, + { + "id": "src_components_admin_staffshiftsview", + "label": "StaffShiftsView.tsx", + "file_type": "code", + "source_file": "src/components/admin/StaffShiftsView.tsx", + "source_location": "L1", + "_origin": "ast" + }, + { + "id": "src_components_admin_staffshiftsview_staffshiftsview", + "label": "StaffShiftsView()", + "file_type": "code", + "source_file": "src/components/admin/StaffShiftsView.tsx", + "source_location": "L33", + "_callable": true, + "_origin": "ast" + }, + { + "id": "src_components_admin_suppliersview", + "label": "SuppliersView.tsx", + "file_type": "code", + "source_file": "src/components/admin/SuppliersView.tsx", + "source_location": "L1", + "_origin": "ast" + }, + { + "id": "src_components_admin_suppliersview_suppliersview", + "label": "SuppliersView()", + "file_type": "code", + "source_file": "src/components/admin/SuppliersView.tsx", + "source_location": "L42", + "_callable": true, + "_origin": "ast" + }, + { + "id": "src_components_admin_tablemanagementview", + "label": "TableManagementView.tsx", + "file_type": "code", + "source_file": "src/components/admin/TableManagementView.tsx", + "source_location": "L1", + "_origin": "ast" + }, + { + "id": "src_components_admin_tablemanagementview_tablemanagementview", + "label": "TableManagementView()", + "file_type": "code", + "source_file": "src/components/admin/TableManagementView.tsx", + "source_location": "L31", + "_callable": true, + "_origin": "ast" + }, + { + "id": "src_components_analytics_analyticsdashboard", + "label": "AnalyticsDashboard.tsx", + "file_type": "code", + "source_file": "src/components/analytics/AnalyticsDashboard.tsx", + "source_location": "L1", + "_origin": "ast" + }, + { + "id": "src_components_analytics_analyticsdashboard_analyticsdashboard", + "label": "AnalyticsDashboard()", + "file_type": "code", + "source_file": "src/components/analytics/AnalyticsDashboard.tsx", + "source_location": "L31", + "_callable": true, + "_origin": "ast" + }, + { + "id": "src_components_common_navigation", + "label": "Navigation.tsx", + "file_type": "code", + "source_file": "src/components/common/Navigation.tsx", + "source_location": "L1", + "_origin": "ast" + }, + { + "id": "src_components_common_navigation_navigationprops", + "label": "NavigationProps", + "file_type": "code", + "source_file": "src/components/common/Navigation.tsx", + "source_location": "L27", + "_callable": true, + "_callable_class": true, + "_origin": "ast" + }, + { + "id": "src_components_common_navigation_navigation", + "label": "Navigation()", + "file_type": "code", + "source_file": "src/components/common/Navigation.tsx", + "source_location": "L35", + "_callable": true, + "_origin": "ast" + }, + { + "id": "src_components_common_statusbadge", + "label": "StatusBadge.tsx", + "file_type": "code", + "source_file": "src/components/common/StatusBadge.tsx", + "source_location": "L1", + "_origin": "ast" + }, + { + "id": "src_components_common_statusbadge_statusbadgeprops", + "label": "StatusBadgeProps", + "file_type": "code", + "source_file": "src/components/common/StatusBadge.tsx", + "source_location": "L5", + "_callable": true, + "_callable_class": true, + "_origin": "ast" + }, + { + "id": "src_components_common_statusbadge_statusbadge", + "label": "StatusBadge()", + "file_type": "code", + "source_file": "src/components/common/StatusBadge.tsx", + "source_location": "L12", + "_callable": true, + "_origin": "ast" + }, + { + "id": "src_components_customer_billpaymentview", + "label": "BillPaymentView.tsx", + "file_type": "code", + "source_file": "src/components/customer/BillPaymentView.tsx", + "source_location": "L1", + "_origin": "ast" + }, + { + "id": "src_components_customer_billpaymentview_billpaymentviewprops", + "label": "BillPaymentViewProps", + "file_type": "code", + "source_file": "src/components/customer/BillPaymentView.tsx", + "source_location": "L21", + "_callable": true, + "_callable_class": true, + "_origin": "ast" + }, + { + "id": "src_components_customer_billpaymentview_billpaymentview", + "label": "BillPaymentView()", + "file_type": "code", + "source_file": "src/components/customer/BillPaymentView.tsx", + "source_location": "L25", + "_callable": true, + "_origin": "ast" + }, + { + "id": "src_components_customer_cartreviewview", + "label": "CartReviewView.tsx", + "file_type": "code", + "source_file": "src/components/customer/CartReviewView.tsx", + "source_location": "L1", + "_origin": "ast" + }, + { + "id": "src_components_customer_cartreviewview_cartreviewviewprops", + "label": "CartReviewViewProps", + "file_type": "code", + "source_file": "src/components/customer/CartReviewView.tsx", + "source_location": "L25", + "_callable": true, + "_callable_class": true, + "_origin": "ast" + }, + { + "id": "src_components_customer_cartreviewview_cartreviewview", + "label": "CartReviewView()", + "file_type": "code", + "source_file": "src/components/customer/CartReviewView.tsx", + "source_location": "L32", + "_callable": true, + "_origin": "ast" + }, + { + "id": "src_components_customer_customizationmodal", + "label": "CustomizationModal.tsx", + "file_type": "code", + "source_file": "src/components/customer/CustomizationModal.tsx", + "source_location": "L1", + "_origin": "ast" + }, + { + "id": "src_components_customer_customizationmodal_customizationmodalprops", + "label": "CustomizationModalProps", + "file_type": "code", + "source_file": "src/components/customer/CustomizationModal.tsx", + "source_location": "L20", + "_callable": true, + "_callable_class": true, + "_origin": "ast" + }, + { + "id": "src_components_customer_customizationmodal_customizationmodal", + "label": "CustomizationModal()", + "file_type": "code", + "source_file": "src/components/customer/CustomizationModal.tsx", + "source_location": "L27", + "_callable": true, + "_origin": "ast" + }, + { + "id": "src_components_customer_menubrowseview", + "label": "MenuBrowseView.tsx", + "file_type": "code", + "source_file": "src/components/customer/MenuBrowseView.tsx", + "source_location": "L1", + "_origin": "ast" + }, + { + "id": "src_components_customer_menubrowseview_menubrowseviewprops", + "label": "MenuBrowseViewProps", + "file_type": "code", + "source_file": "src/components/customer/MenuBrowseView.tsx", + "source_location": "L31", + "_callable": true, + "_callable_class": true, + "_origin": "ast" + }, + { + "id": "src_components_customer_menubrowseview_dietary_filters", + "label": "DIETARY_FILTERS", + "file_type": "code", + "source_file": "src/components/customer/MenuBrowseView.tsx", + "source_location": "L39", + "_origin": "ast" + }, + { + "id": "src_components_customer_menubrowseview_spice_icons", + "label": "SPICE_ICONS", + "file_type": "code", + "source_file": "src/components/customer/MenuBrowseView.tsx", + "source_location": "L46", + "_origin": "ast" + }, + { + "id": "src_components_customer_menubrowseview_menubrowseview", + "label": "MenuBrowseView()", + "file_type": "code", + "source_file": "src/components/customer/MenuBrowseView.tsx", + "source_location": "L53", + "_callable": true, + "_origin": "ast" + }, + { + "id": "src_components_customer_orderstatusview", + "label": "OrderStatusView.tsx", + "file_type": "code", + "source_file": "src/components/customer/OrderStatusView.tsx", + "source_location": "L1", + "_origin": "ast" + }, + { + "id": "src_components_customer_orderstatusview_orderstatusviewprops", + "label": "OrderStatusViewProps", + "file_type": "code", + "source_file": "src/components/customer/OrderStatusView.tsx", + "source_location": "L25", + "_callable": true, + "_callable_class": true, + "_origin": "ast" + }, + { + "id": "src_components_customer_orderstatusview_order_steps", + "label": "ORDER_STEPS", + "file_type": "code", + "source_file": "src/components/customer/OrderStatusView.tsx", + "source_location": "L29", + "_origin": "ast" + }, + { + "id": "src_components_customer_orderstatusview_orderstatusview", + "label": "OrderStatusView()", + "file_type": "code", + "source_file": "src/components/customer/OrderStatusView.tsx", + "source_location": "L56", + "_callable": true, + "_origin": "ast" + }, + { + "id": "src_components_customer_tablelandingview", + "label": "TableLandingView.tsx", + "file_type": "code", + "source_file": "src/components/customer/TableLandingView.tsx", + "source_location": "L1", + "_origin": "ast" + }, + { + "id": "src_components_customer_tablelandingview_tablelandingviewprops", + "label": "TableLandingViewProps", + "file_type": "code", + "source_file": "src/components/customer/TableLandingView.tsx", + "source_location": "L21", + "_callable": true, + "_callable_class": true, + "_origin": "ast" + }, + { + "id": "src_components_customer_tablelandingview_tablelandingview", + "label": "TableLandingView()", + "file_type": "code", + "source_file": "src/components/customer/TableLandingView.tsx", + "source_location": "L27", + "_callable": true, + "_origin": "ast" + }, + { + "id": "src_components_customer_voiceassistantmodal", + "label": "VoiceAssistantModal.tsx", + "file_type": "code", + "source_file": "src/components/customer/VoiceAssistantModal.tsx", + "source_location": "L1", + "_origin": "ast" + }, + { + "id": "src_components_customer_voiceassistantmodal_detecteditem", + "label": "DetectedItem", + "file_type": "code", + "source_file": "src/components/customer/VoiceAssistantModal.tsx", + "source_location": "L28", + "_callable": true, + "_callable_class": true, + "_origin": "ast" + }, + { + "id": "src_components_customer_voiceassistantmodal_voiceassistantmodalprops", + "label": "VoiceAssistantModalProps", + "file_type": "code", + "source_file": "src/components/customer/VoiceAssistantModal.tsx", + "source_location": "L33", + "_callable": true, + "_callable_class": true, + "_origin": "ast" + }, + { + "id": "src_components_customer_voiceassistantmodal_parsetranscripttoitems", + "label": "parseTranscriptToItems()", + "file_type": "code", + "source_file": "src/components/customer/VoiceAssistantModal.tsx", + "source_location": "L40", + "_callable": true, + "_origin": "ast" + }, + { + "id": "src_components_customer_voiceassistantmodal_quick_commands", + "label": "QUICK_COMMANDS", + "file_type": "code", + "source_file": "src/components/customer/VoiceAssistantModal.tsx", + "source_location": "L69", + "_origin": "ast" + }, + { + "id": "src_components_customer_voiceassistantmodal_voiceassistantmodal", + "label": "VoiceAssistantModal()", + "file_type": "code", + "source_file": "src/components/customer/VoiceAssistantModal.tsx", + "source_location": "L77", + "_callable": true, + "_origin": "ast" + }, + { + "id": "src_components_kds_kdskanban", + "label": "KDSKanban.tsx", + "file_type": "code", + "source_file": "src/components/kds/KDSKanban.tsx", + "source_location": "L1", + "_origin": "ast" + }, + { + "id": "src_components_kds_kdskanban_kdskanbanprops", + "label": "KDSKanbanProps", + "file_type": "code", + "source_file": "src/components/kds/KDSKanban.tsx", + "source_location": "L19", + "_callable": true, + "_callable_class": true, + "_origin": "ast" + }, + { + "id": "src_components_kds_kdskanban_kdskanban", + "label": "KDSKanban()", + "file_type": "code", + "source_file": "src/components/kds/KDSKanban.tsx", + "source_location": "L26", + "_callable": true, + "_origin": "ast" + }, + { + "id": "src_components_kds_kdsticketcard", + "label": "KDSTicketCard.tsx", + "file_type": "code", + "source_file": "src/components/kds/KDSTicketCard.tsx", + "source_location": "L1", + "_origin": "ast" + }, + { + "id": "src_components_kds_kdsticketcard_kdsticketcardprops", + "label": "KDSTicketCardProps", + "file_type": "code", + "source_file": "src/components/kds/KDSTicketCard.tsx", + "source_location": "L23", + "_callable": true, + "_callable_class": true, + "_origin": "ast" + }, + { + "id": "src_components_kds_kdsticketcard_kdsticketcard", + "label": "KDSTicketCard()", + "file_type": "code", + "source_file": "src/components/kds/KDSTicketCard.tsx", + "source_location": "L29", + "_callable": true, + "_origin": "ast" + }, + { + "id": "src_components_table_tablelandingview", + "label": "TableLandingView.tsx", + "file_type": "code", + "source_file": "src/components/table/TableLandingView.tsx", + "source_location": "L1", + "_origin": "ast" + }, + { + "id": "src_components_table_tablelandingview_tablelandingview", + "label": "TableLandingView()", + "file_type": "code", + "source_file": "src/components/table/TableLandingView.tsx", + "source_location": "L26", + "_callable": true, + "_origin": "ast" + }, + { + "id": "src_components_voice_voiceorderingview", + "label": "VoiceOrderingView.tsx", + "file_type": "code", + "source_file": "src/components/voice/VoiceOrderingView.tsx", + "source_location": "L1", + "_origin": "ast" + }, + { + "id": "src_components_voice_voiceorderingview_voiceorderingviewprops", + "label": "VoiceOrderingViewProps", + "file_type": "code", + "source_file": "src/components/voice/VoiceOrderingView.tsx", + "source_location": "L21", + "_callable": true, + "_callable_class": true, + "_origin": "ast" + }, + { + "id": "src_components_voice_voiceorderingview_voiceorderingview", + "label": "VoiceOrderingView()", + "file_type": "code", + "source_file": "src/components/voice/VoiceOrderingView.tsx", + "source_location": "L25", + "_callable": true, + "_origin": "ast" + }, + { + "id": "src_data_menudata", + "label": "menuData.ts", + "file_type": "code", + "source_file": "src/data/menuData.ts", + "source_location": "L1", + "_origin": "ast" + }, + { + "id": "src_data_menudata_menuitem", + "label": "MenuItem", + "file_type": "code", + "source_file": "src/data/menuData.ts", + "source_location": "L1", + "_callable": true, + "_callable_class": true, + "_origin": "ast" + }, + { + "id": "src_data_menudata_menu_items", + "label": "MENU_ITEMS", + "file_type": "code", + "source_file": "src/data/menuData.ts", + "source_location": "L17", + "_origin": "ast" + }, + { + "id": "src_data_menudata_categories", + "label": "CATEGORIES", + "file_type": "code", + "source_file": "src/data/menuData.ts", + "source_location": "L375", + "_origin": "ast" + }, + { + "id": "src_data_menudata_categorytype", + "label": "CategoryType", + "file_type": "code", + "source_file": "src/data/menuData.ts", + "source_location": "L376", + "_callable": true, + "_callable_class": true, + "_origin": "ast" + }, + { + "id": "src_hooks_usespeechrecognition", + "label": "useSpeechRecognition.ts", + "file_type": "code", + "source_file": "src/hooks/useSpeechRecognition.ts", + "source_location": "L1", + "_origin": "ast" + }, + { + "id": "src_hooks_usespeechrecognition_speechrecognitionevent", + "label": "SpeechRecognitionEvent", + "file_type": "code", + "source_file": "src/hooks/useSpeechRecognition.ts", + "source_location": "L3", + "_callable": true, + "_callable_class": true, + "_origin": "ast" + }, + { + "id": "src_hooks_usespeechrecognition_speechrecognitionerrorevent", + "label": "SpeechRecognitionErrorEvent", + "file_type": "code", + "source_file": "src/hooks/useSpeechRecognition.ts", + "source_location": "L8", + "_callable": true, + "_callable_class": true, + "_origin": "ast" + }, + { + "id": "src_hooks_usespeechrecognition_ispeechrecognition", + "label": "ISpeechRecognition", + "file_type": "code", + "source_file": "src/hooks/useSpeechRecognition.ts", + "source_location": "L12", + "_callable": true, + "_callable_class": true, + "_origin": "ast" + }, + { + "id": "src_hooks_usespeechrecognition_ispeechrecognition_start", + "label": ".start()", + "file_type": "code", + "source_file": "src/hooks/useSpeechRecognition.ts", + "source_location": "L17", + "_callable": true, + "_origin": "ast" + }, + { + "id": "src_hooks_usespeechrecognition_ispeechrecognition_stop", + "label": ".stop()", + "file_type": "code", + "source_file": "src/hooks/useSpeechRecognition.ts", + "source_location": "L18", + "_callable": true, + "_origin": "ast" + }, + { + "id": "src_hooks_usespeechrecognition_ispeechrecognition_abort", + "label": ".abort()", + "file_type": "code", + "source_file": "src/hooks/useSpeechRecognition.ts", + "source_location": "L19", + "_callable": true, + "_origin": "ast" + }, + { + "id": "src_hooks_usespeechrecognition_window", + "label": "Window", + "file_type": "code", + "source_file": "src/hooks/useSpeechRecognition.ts", + "source_location": "L27", + "_callable": true, + "_callable_class": true, + "_origin": "ast" + }, + { + "id": "src_hooks_usespeechrecognition_voicestate", + "label": "VoiceState", + "file_type": "code", + "source_file": "src/hooks/useSpeechRecognition.ts", + "source_location": "L33", + "_callable": true, + "_callable_class": true, + "_origin": "ast" + }, + { + "id": "src_hooks_usespeechrecognition_usespeechrecognitionreturn", + "label": "UseSpeechRecognitionReturn", + "file_type": "code", + "source_file": "src/hooks/useSpeechRecognition.ts", + "source_location": "L35", + "_callable": true, + "_callable_class": true, + "_origin": "ast" + }, + { + "id": "src_hooks_usespeechrecognition_usespeechrecognition", + "label": "useSpeechRecognition()", + "file_type": "code", + "source_file": "src/hooks/useSpeechRecognition.ts", + "source_location": "L46", + "_callable": true, + "_origin": "ast" + }, + { + "id": "src_hooks_usespeechsynthesis", + "label": "useSpeechSynthesis.ts", + "file_type": "code", + "source_file": "src/hooks/useSpeechSynthesis.ts", + "source_location": "L1", + "_origin": "ast" + }, + { + "id": "src_hooks_usespeechsynthesis_usespeechsynthesisreturn", + "label": "UseSpeechSynthesisReturn", + "file_type": "code", + "source_file": "src/hooks/useSpeechSynthesis.ts", + "source_location": "L4", + "_callable": true, + "_callable_class": true, + "_origin": "ast" + }, + { + "id": "src_hooks_usespeechsynthesis_usespeechsynthesis", + "label": "useSpeechSynthesis()", + "file_type": "code", + "source_file": "src/hooks/useSpeechSynthesis.ts", + "source_location": "L10", + "_callable": true, + "_origin": "ast" + }, + { + "id": "src_main", + "label": "main.tsx", + "file_type": "code", + "source_file": "src/main.tsx", + "source_location": "L1", + "_origin": "ast" + }, + { + "id": "src_services_api", + "label": "api.ts", + "file_type": "code", + "source_file": "src/services/api.ts", + "source_location": "L1", + "_origin": "ast" + }, + { + "id": "src_services_api_getaccesstoken", + "label": "getAccessToken()", + "file_type": "code", + "source_file": "src/services/api.ts", + "source_location": "L7", + "_callable": true, + "_origin": "ast" + }, + { + "id": "src_services_api_getrefreshtoken", + "label": "getRefreshToken()", + "file_type": "code", + "source_file": "src/services/api.ts", + "source_location": "L8", + "_callable": true, + "_origin": "ast" + }, + { + "id": "src_services_api_settokens", + "label": "setTokens()", + "file_type": "code", + "source_file": "src/services/api.ts", + "source_location": "L9", + "_callable": true, + "_origin": "ast" + }, + { + "id": "src_services_api_cleartokens", + "label": "clearTokens()", + "file_type": "code", + "source_file": "src/services/api.ts", + "source_location": "L13", + "_callable": true, + "_origin": "ast" + }, + { + "id": "src_services_api_getcustomertoken", + "label": "getCustomerToken()", + "file_type": "code", + "source_file": "src/services/api.ts", + "source_location": "L18", + "_callable": true, + "_origin": "ast" + }, + { + "id": "src_services_api_getcustomersessionid", + "label": "getCustomerSessionId()", + "file_type": "code", + "source_file": "src/services/api.ts", + "source_location": "L19", + "_callable": true, + "_origin": "ast" + }, + { + "id": "src_services_api_setcustomersession", + "label": "setCustomerSession()", + "file_type": "code", + "source_file": "src/services/api.ts", + "source_location": "L20", + "_callable": true, + "_origin": "ast" + }, + { + "id": "src_services_api_clearcustomersession", + "label": "clearCustomerSession()", + "file_type": "code", + "source_file": "src/services/api.ts", + "source_location": "L26", + "_callable": true, + "_origin": "ast" + }, + { + "id": "src_services_api_getbackendmenuid", + "label": "getBackendMenuId()", + "file_type": "code", + "source_file": "src/services/api.ts", + "source_location": "L34", + "_callable": true, + "_origin": "ast" + }, + { + "id": "src_services_api_getfrontendmenuitem", + "label": "getFrontendMenuItem()", + "file_type": "code", + "source_file": "src/services/api.ts", + "source_location": "L39", + "_callable": true, + "_origin": "ast" + }, + { + "id": "src_services_api_isdemomode", + "label": "isDemoMode", + "file_type": "code", + "source_file": "src/services/api.ts", + "source_location": "L45", + "_origin": "ast" + }, + { + "id": "src_services_api_setdemomodechangecallback", + "label": "setDemoModeChangeCallback()", + "file_type": "code", + "source_file": "src/services/api.ts", + "source_location": "L48", + "_callable": true, + "_origin": "ast" + }, + { + "id": "src_services_api_triggerdemomode", + "label": "triggerDemoMode()", + "file_type": "code", + "source_file": "src/services/api.ts", + "source_location": "L52", + "_callable": true, + "_origin": "ast" + }, + { + "id": "src_services_api_mockdb", + "label": "mockDb", + "file_type": "code", + "source_file": "src/services/api.ts", + "source_location": "L62", + "_origin": "ast" + }, + { + "id": "src_services_api_apirequest", + "label": "apiRequest()", + "file_type": "code", + "source_file": "src/services/api.ts", + "source_location": "L107", + "_callable": true, + "_origin": "ast" + }, + { + "id": "src_services_api_handlemockrequest", + "label": "handleMockRequest()", + "file_type": "code", + "source_file": "src/services/api.ts", + "source_location": "L159", + "_callable": true, + "_origin": "ast" + }, + { + "id": "src_services_api_wslisteners", + "label": "wsListeners", + "file_type": "code", + "source_file": "src/services/api.ts", + "source_location": "L540", + "_origin": "ast" + }, + { + "id": "src_services_api_subscribetowsevents", + "label": "subscribeToWsEvents()", + "file_type": "code", + "source_file": "src/services/api.ts", + "source_location": "L541", + "_callable": true, + "_origin": "ast" + }, + { + "id": "src_services_api_notifywslisteners", + "label": "notifyWsListeners()", + "file_type": "code", + "source_file": "src/services/api.ts", + "source_location": "L548", + "_callable": true, + "_origin": "ast" + }, + { + "id": "src_services_api_restrowebsocket", + "label": "RestroWebSocket", + "file_type": "code", + "source_file": "src/services/api.ts", + "source_location": "L558", + "_callable": true, + "_callable_class": true, + "_origin": "ast" + }, + { + "id": "src_services_api_restrowebsocket_constructor", + "label": ".constructor()", + "file_type": "code", + "source_file": "src/services/api.ts", + "source_location": "L564", + "_callable": true, + "_origin": "ast" + }, + { + "id": "src_services_api_restrowebsocket_connect", + "label": ".connect()", + "file_type": "code", + "source_file": "src/services/api.ts", + "source_location": "L574", + "_callable": true, + "_origin": "ast" + }, + { + "id": "src_services_api_restrowebsocket_close", + "label": ".close()", + "file_type": "code", + "source_file": "src/services/api.ts", + "source_location": "L608", + "_callable": true, + "_origin": "ast" + }, + { + "id": "src_services_api_api", + "label": "api", + "file_type": "code", + "source_file": "src/services/api.ts", + "source_location": "L619", + "_origin": "ast" + }, + { + "id": "src_theme_theme", + "label": "theme.ts", + "file_type": "code", + "source_file": "src/theme/theme.ts", + "source_location": "L1", + "_origin": "ast" + }, + { + "id": "src_theme_theme_theme", + "label": "theme", + "file_type": "code", + "source_file": "src/theme/theme.ts", + "source_location": "L3", + "_origin": "ast" + }, + { + "id": "src_types_index", + "label": "index.ts", + "file_type": "code", + "source_file": "src/types/index.ts", + "source_location": "L1", + "_origin": "ast" + }, + { + "id": "src_types_index_orderstatus", + "label": "OrderStatus", + "file_type": "code", + "source_file": "src/types/index.ts", + "source_location": "L1", + "_callable": true, + "_callable_class": true, + "_origin": "ast" + }, + { + "id": "src_types_index_ordertype", + "label": "OrderType", + "file_type": "code", + "source_file": "src/types/index.ts", + "source_location": "L2", + "_callable": true, + "_callable_class": true, + "_origin": "ast" + }, + { + "id": "src_types_index_orderitem", + "label": "OrderItem", + "file_type": "code", + "source_file": "src/types/index.ts", + "source_location": "L4", + "_callable": true, + "_callable_class": true, + "_origin": "ast" + }, + { + "id": "src_types_index_kdsorder", + "label": "KDSOrder", + "file_type": "code", + "source_file": "src/types/index.ts", + "source_location": "L14", + "_callable": true, + "_callable_class": true, + "_origin": "ast" + }, + { + "id": "src_types_index_analyticsmetric", + "label": "AnalyticsMetric", + "file_type": "code", + "source_file": "src/types/index.ts", + "source_location": "L29", + "_callable": true, + "_callable_class": true, + "_origin": "ast" + }, + { + "id": "src_types_index_dishperformance", + "label": "DishPerformance", + "file_type": "code", + "source_file": "src/types/index.ts", + "source_location": "L37", + "_callable": true, + "_callable_class": true, + "_origin": "ast" + }, + { + "id": "src_types_index_voicecommandsuggestion", + "label": "VoiceCommandSuggestion", + "file_type": "code", + "source_file": "src/types/index.ts", + "source_location": "L47", + "_callable": true, + "_callable_class": true, + "_origin": "ast" + }, + { + "id": "tsconfig_app", + "label": "tsconfig.app.json", + "file_type": "code", + "source_file": "tsconfig.app.json", + "source_location": "L1", + "_origin": "ast" + }, + { + "id": "tsconfig_app_compileroptions", + "label": "compilerOptions", + "file_type": "code", + "source_file": "tsconfig.app.json", + "source_location": "L2", + "_origin": "ast" + }, + { + "id": "tsconfig_app_compileroptions_tsbuildinfofile", + "label": "tsBuildInfoFile", + "file_type": "code", + "source_file": "tsconfig.app.json", + "source_location": "L3", + "_origin": "ast" + }, + { + "id": "tsconfig_app_compileroptions_target", + "label": "target", + "file_type": "code", + "source_file": "tsconfig.app.json", + "source_location": "L4", + "_origin": "ast" + }, + { + "id": "tsconfig_app_compileroptions_lib", + "label": "lib", + "file_type": "code", + "source_file": "tsconfig.app.json", + "source_location": "L5", + "_origin": "ast" + }, + { + "id": "tsconfig_app_json_ref_es2023", + "label": "ES2023", + "file_type": "concept", + "source_file": "tsconfig.app.json", + "source_location": "L5", + "_origin": "ast" + }, + { + "id": "ref_dom", + "label": "DOM", + "file_type": "concept", + "source_file": "tsconfig.app.json", + "source_location": "L5", + "_origin": "ast" + }, + { + "id": "tsconfig_app_compileroptions_module", + "label": "module", + "file_type": "code", + "source_file": "tsconfig.app.json", + "source_location": "L6", + "_origin": "ast" + }, + { + "id": "tsconfig_app_compileroptions_types", + "label": "types", + "file_type": "code", + "source_file": "tsconfig.app.json", + "source_location": "L7", + "_origin": "ast" + }, + { + "id": "ref_vite_client", + "label": "vite/client", + "file_type": "concept", + "source_file": "tsconfig.app.json", + "source_location": "L7", + "_origin": "ast" + }, + { + "id": "tsconfig_app_compileroptions_allowarbitraryextensions", + "label": "allowArbitraryExtensions", + "file_type": "code", + "source_file": "tsconfig.app.json", + "source_location": "L8", + "_origin": "ast" + }, + { + "id": "tsconfig_app_compileroptions_skiplibcheck", + "label": "skipLibCheck", + "file_type": "code", + "source_file": "tsconfig.app.json", + "source_location": "L9", + "_origin": "ast" + }, + { + "id": "tsconfig_app_compileroptions_moduleresolution", + "label": "moduleResolution", + "file_type": "code", + "source_file": "tsconfig.app.json", + "source_location": "L12", + "_origin": "ast" + }, + { + "id": "tsconfig_app_compileroptions_allowimportingtsextensions", + "label": "allowImportingTsExtensions", + "file_type": "code", + "source_file": "tsconfig.app.json", + "source_location": "L13", + "_origin": "ast" + }, + { + "id": "tsconfig_app_compileroptions_verbatimmodulesyntax", + "label": "verbatimModuleSyntax", + "file_type": "code", + "source_file": "tsconfig.app.json", + "source_location": "L14", + "_origin": "ast" + }, + { + "id": "tsconfig_app_compileroptions_moduledetection", + "label": "moduleDetection", + "file_type": "code", + "source_file": "tsconfig.app.json", + "source_location": "L15", + "_origin": "ast" + }, + { + "id": "tsconfig_app_compileroptions_noemit", + "label": "noEmit", + "file_type": "code", + "source_file": "tsconfig.app.json", + "source_location": "L16", + "_origin": "ast" + }, + { + "id": "tsconfig_app_compileroptions_jsx", + "label": "jsx", + "file_type": "code", + "source_file": "tsconfig.app.json", + "source_location": "L17", + "_origin": "ast" + }, + { + "id": "tsconfig_app_compileroptions_nounusedlocals", + "label": "noUnusedLocals", + "file_type": "code", + "source_file": "tsconfig.app.json", + "source_location": "L20", + "_origin": "ast" + }, + { + "id": "tsconfig_app_compileroptions_nounusedparameters", + "label": "noUnusedParameters", + "file_type": "code", + "source_file": "tsconfig.app.json", + "source_location": "L21", + "_origin": "ast" + }, + { + "id": "tsconfig_app_compileroptions_erasablesyntaxonly", + "label": "erasableSyntaxOnly", + "file_type": "code", + "source_file": "tsconfig.app.json", + "source_location": "L22", + "_origin": "ast" + }, + { + "id": "tsconfig_app_compileroptions_nofallthroughcasesinswitch", + "label": "noFallthroughCasesInSwitch", + "file_type": "code", + "source_file": "tsconfig.app.json", + "source_location": "L23", + "_origin": "ast" + }, + { + "id": "tsconfig_app_include", + "label": "include", + "file_type": "code", + "source_file": "tsconfig.app.json", + "source_location": "L25", + "_origin": "ast" + }, + { + "id": "ref_src", + "label": "src", + "file_type": "concept", + "source_file": "tsconfig.app.json", + "source_location": "L25", + "_origin": "ast" + }, + { + "id": "tsconfig", + "label": "tsconfig.json", + "file_type": "code", + "source_file": "tsconfig.json", + "source_location": "L1", + "_origin": "ast" + }, + { + "id": "tsconfig_files", + "label": "files", + "file_type": "code", + "source_file": "tsconfig.json", + "source_location": "L2", + "_origin": "ast" + }, + { + "id": "tsconfig_references", + "label": "references", + "file_type": "code", + "source_file": "tsconfig.json", + "source_location": "L3", + "_origin": "ast" + }, + { + "id": "tsconfig_node", + "label": "tsconfig.node.json", + "file_type": "code", + "source_file": "tsconfig.node.json", + "source_location": "L1", + "_origin": "ast" + }, + { + "id": "tsconfig_node_compileroptions", + "label": "compilerOptions", + "file_type": "code", + "source_file": "tsconfig.node.json", + "source_location": "L2", + "_origin": "ast" + }, + { + "id": "tsconfig_node_compileroptions_tsbuildinfofile", + "label": "tsBuildInfoFile", + "file_type": "code", + "source_file": "tsconfig.node.json", + "source_location": "L3", + "_origin": "ast" + }, + { + "id": "tsconfig_node_compileroptions_target", + "label": "target", + "file_type": "code", + "source_file": "tsconfig.node.json", + "source_location": "L4", + "_origin": "ast" + }, + { + "id": "tsconfig_node_compileroptions_lib", + "label": "lib", + "file_type": "code", + "source_file": "tsconfig.node.json", + "source_location": "L5", + "_origin": "ast" + }, + { + "id": "tsconfig_node_json_ref_es2023", + "label": "ES2023", + "file_type": "concept", + "source_file": "tsconfig.node.json", + "source_location": "L5", + "_origin": "ast" + }, + { + "id": "tsconfig_node_compileroptions_types", + "label": "types", + "file_type": "code", + "source_file": "tsconfig.node.json", + "source_location": "L6", + "_origin": "ast" + }, + { + "id": "ref_node", + "label": "node", + "file_type": "concept", + "source_file": "tsconfig.node.json", + "source_location": "L6", + "_origin": "ast" + }, + { + "id": "tsconfig_node_compileroptions_skiplibcheck", + "label": "skipLibCheck", + "file_type": "code", + "source_file": "tsconfig.node.json", + "source_location": "L7", + "_origin": "ast" + }, + { + "id": "tsconfig_node_compileroptions_module", + "label": "module", + "file_type": "code", + "source_file": "tsconfig.node.json", + "source_location": "L10", + "_origin": "ast" + }, + { + "id": "tsconfig_node_compileroptions_allowimportingtsextensions", + "label": "allowImportingTsExtensions", + "file_type": "code", + "source_file": "tsconfig.node.json", + "source_location": "L11", + "_origin": "ast" + }, + { + "id": "tsconfig_node_compileroptions_verbatimmodulesyntax", + "label": "verbatimModuleSyntax", + "file_type": "code", + "source_file": "tsconfig.node.json", + "source_location": "L12", + "_origin": "ast" + }, + { + "id": "tsconfig_node_compileroptions_moduledetection", + "label": "moduleDetection", + "file_type": "code", + "source_file": "tsconfig.node.json", + "source_location": "L13", + "_origin": "ast" + }, + { + "id": "tsconfig_node_compileroptions_noemit", + "label": "noEmit", + "file_type": "code", + "source_file": "tsconfig.node.json", + "source_location": "L14", + "_origin": "ast" + }, + { + "id": "tsconfig_node_compileroptions_nounusedlocals", + "label": "noUnusedLocals", + "file_type": "code", + "source_file": "tsconfig.node.json", + "source_location": "L17", + "_origin": "ast" + }, + { + "id": "tsconfig_node_compileroptions_nounusedparameters", + "label": "noUnusedParameters", + "file_type": "code", + "source_file": "tsconfig.node.json", + "source_location": "L18", + "_origin": "ast" + }, + { + "id": "tsconfig_node_compileroptions_erasablesyntaxonly", + "label": "erasableSyntaxOnly", + "file_type": "code", + "source_file": "tsconfig.node.json", + "source_location": "L19", + "_origin": "ast" + }, + { + "id": "tsconfig_node_compileroptions_nofallthroughcasesinswitch", + "label": "noFallthroughCasesInSwitch", + "file_type": "code", + "source_file": "tsconfig.node.json", + "source_location": "L20", + "_origin": "ast" + }, + { + "id": "tsconfig_node_include", + "label": "include", + "file_type": "code", + "source_file": "tsconfig.node.json", + "source_location": "L22", + "_origin": "ast" + }, + { + "id": "ref_vite_config_ts", + "label": "vite.config.ts", + "file_type": "concept", + "source_file": "tsconfig.node.json", + "source_location": "L22", + "_origin": "ast" + }, + { + "id": "vite_config", + "label": "vite.config.ts", + "file_type": "code", + "source_file": "vite.config.ts", + "source_location": "L1", + "_origin": "ast" + } + ], + "edges": [ + { + "source": "oxlintrc", + "target": "oxlintrc_schema", + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": ".oxlintrc.json", + "source_location": "L2", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "oxlintrc", + "target": "oxlintrc_plugins", + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": ".oxlintrc.json", + "source_location": "L3", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "oxlintrc_plugins", + "target": "ref_react", + "relation": "extends", + "confidence": "EXTRACTED", + "source_file": ".oxlintrc.json", + "source_location": "L3", + "weight": 1.0, + "context": "import", + "_origin": "ast" + }, + { + "source": "oxlintrc_plugins", + "target": "ref_typescript", + "relation": "extends", + "confidence": "EXTRACTED", + "source_file": ".oxlintrc.json", + "source_location": "L3", + "weight": 1.0, + "context": "import", + "_origin": "ast" + }, + { + "source": "oxlintrc_plugins", + "target": "ref_oxc", + "relation": "extends", + "confidence": "EXTRACTED", + "source_file": ".oxlintrc.json", + "source_location": "L3", + "weight": 1.0, + "context": "import", + "_origin": "ast" + }, + { + "source": "oxlintrc", + "target": "oxlintrc_rules", + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": ".oxlintrc.json", + "source_location": "L4", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "oxlintrc_rules", + "target": "oxlintrc_rules_react_rules_of_hooks", + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": ".oxlintrc.json", + "source_location": "L5", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "oxlintrc_rules", + "target": "oxlintrc_rules_react_only_export_components", + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": ".oxlintrc.json", + "source_location": "L6", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "oxlintrc_rules_react_only_export_components", + "target": "ref_warn", + "relation": "extends", + "confidence": "EXTRACTED", + "source_file": ".oxlintrc.json", + "source_location": "L6", + "weight": 1.0, + "context": "import", + "_origin": "ast" + }, + { + "source": "package", + "target": "package_name", + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "package.json", + "source_location": "L2", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "package", + "target": "package_private", + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "package.json", + "source_location": "L3", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "package", + "target": "package_version", + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "package.json", + "source_location": "L4", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "package", + "target": "package_type", + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "package.json", + "source_location": "L5", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "package", + "target": "package_packagemanager", + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "package.json", + "source_location": "L6", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "package", + "target": "package_scripts", + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "package.json", + "source_location": "L7", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "package_scripts", + "target": "package_scripts_dev", + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "package.json", + "source_location": "L8", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "package_scripts", + "target": "package_scripts_build", + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "package.json", + "source_location": "L9", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "package_scripts", + "target": "package_scripts_lint", + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "package.json", + "source_location": "L10", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "package_scripts", + "target": "package_scripts_preview", + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "package.json", + "source_location": "L11", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "package", + "target": "package_dependencies", + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "package.json", + "source_location": "L13", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "package_dependencies", + "target": "package_dependencies_emotion_react", + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "package.json", + "source_location": "L14", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "package_dependencies_emotion_react", + "target": "emotion_react", + "relation": "imports", + "confidence": "EXTRACTED", + "source_file": "package.json", + "source_location": "L14", + "weight": 1.0, + "context": "import", + "_origin": "ast" + }, + { + "source": "package_dependencies", + "target": "package_dependencies_emotion_styled", + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "package.json", + "source_location": "L15", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "package_dependencies_emotion_styled", + "target": "emotion_styled", + "relation": "imports", + "confidence": "EXTRACTED", + "source_file": "package.json", + "source_location": "L15", + "weight": 1.0, + "context": "import", + "_origin": "ast" + }, + { + "source": "package_dependencies", + "target": "package_dependencies_mui_icons_material", + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "package.json", + "source_location": "L16", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "package_dependencies_mui_icons_material", + "target": "mui_icons_material", + "relation": "imports", + "confidence": "EXTRACTED", + "source_file": "package.json", + "source_location": "L16", + "weight": 1.0, + "context": "import", + "_origin": "ast" + }, + { + "source": "package_dependencies", + "target": "package_dependencies_mui_material", + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "package.json", + "source_location": "L17", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "package_dependencies_mui_material", + "target": "mui_material", + "relation": "imports", + "confidence": "EXTRACTED", + "source_file": "package.json", + "source_location": "L17", + "weight": 1.0, + "context": "import", + "_origin": "ast" + }, + { + "source": "package_dependencies", + "target": "package_dependencies_react", + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "package.json", + "source_location": "L18", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "package_dependencies_react", + "target": "react", + "relation": "imports", + "confidence": "EXTRACTED", + "source_file": "package.json", + "source_location": "L18", + "weight": 1.0, + "context": "import", + "_origin": "ast" + }, + { + "source": "package_dependencies", + "target": "package_dependencies_react_dom", + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "package.json", + "source_location": "L19", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "package_dependencies_react_dom", + "target": "react_dom", + "relation": "imports", + "confidence": "EXTRACTED", + "source_file": "package.json", + "source_location": "L19", + "weight": 1.0, + "context": "import", + "_origin": "ast" + }, + { + "source": "package", + "target": "package_devdependencies", + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "package.json", + "source_location": "L21", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "package_devdependencies", + "target": "package_devdependencies_types_node", + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "package.json", + "source_location": "L22", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "package_devdependencies_types_node", + "target": "types_node", + "relation": "imports", + "confidence": "EXTRACTED", + "source_file": "package.json", + "source_location": "L22", + "weight": 1.0, + "context": "import", + "_origin": "ast" + }, + { + "source": "package_devdependencies", + "target": "package_devdependencies_types_react", + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "package.json", + "source_location": "L23", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "package_devdependencies_types_react", + "target": "types_react", + "relation": "imports", + "confidence": "EXTRACTED", + "source_file": "package.json", + "source_location": "L23", + "weight": 1.0, + "context": "import", + "_origin": "ast" + }, + { + "source": "package_devdependencies", + "target": "package_devdependencies_types_react_dom", + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "package.json", + "source_location": "L24", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "package_devdependencies_types_react_dom", + "target": "types_react_dom", + "relation": "imports", + "confidence": "EXTRACTED", + "source_file": "package.json", + "source_location": "L24", + "weight": 1.0, + "context": "import", + "_origin": "ast" + }, + { + "source": "package_devdependencies", + "target": "package_devdependencies_vitejs_plugin_react", + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "package.json", + "source_location": "L25", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "package_devdependencies_vitejs_plugin_react", + "target": "vitejs_plugin_react", + "relation": "imports", + "confidence": "EXTRACTED", + "source_file": "package.json", + "source_location": "L25", + "weight": 1.0, + "context": "import", + "_origin": "ast" + }, + { + "source": "package_devdependencies", + "target": "package_devdependencies_oxlint", + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "package.json", + "source_location": "L26", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "package_devdependencies_oxlint", + "target": "oxlint", + "relation": "imports", + "confidence": "EXTRACTED", + "source_file": "package.json", + "source_location": "L26", + "weight": 1.0, + "context": "import", + "_origin": "ast" + }, + { + "source": "package_devdependencies", + "target": "package_devdependencies_typescript", + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "package.json", + "source_location": "L27", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "package_devdependencies_typescript", + "target": "typescript", + "relation": "imports", + "confidence": "EXTRACTED", + "source_file": "package.json", + "source_location": "L27", + "weight": 1.0, + "context": "import", + "_origin": "ast" + }, + { + "source": "package_devdependencies", + "target": "package_devdependencies_vite", + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "package.json", + "source_location": "L28", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "package_devdependencies_vite", + "target": "vite", + "relation": "imports", + "confidence": "EXTRACTED", + "source_file": "package.json", + "source_location": "L28", + "weight": 1.0, + "context": "import", + "_origin": "ast" + }, + { + "source": "src_app", + "target": "ref_react", + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/App.tsx", + "source_location": "L1", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_app", + "target": "ref_mui_material", + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/App.tsx", + "source_location": "L2", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_app", + "target": "src_theme_theme", + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/App.tsx", + "source_location": "L3", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_app", + "target": "src_theme_theme_theme", + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/App.tsx", + "source_location": "L3", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_app", + "target": "src_components_customer_tablelandingview", + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/App.tsx", + "source_location": "L4", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_app", + "target": "src_components_customer_tablelandingview_tablelandingview", + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/App.tsx", + "source_location": "L4", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_app", + "target": "src_components_customer_menubrowseview", + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/App.tsx", + "source_location": "L5", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_app", + "target": "src_components_customer_menubrowseview_menubrowseview", + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/App.tsx", + "source_location": "L5", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_app", + "target": "src_components_customer_customizationmodal", + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/App.tsx", + "source_location": "L6", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_app", + "target": "src_components_customer_customizationmodal_customizationmodal", + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/App.tsx", + "source_location": "L6", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_app", + "target": "src_components_customer_cartreviewview", + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/App.tsx", + "source_location": "L7", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_app", + "target": "src_components_customer_cartreviewview_cartreviewview", + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/App.tsx", + "source_location": "L7", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_app", + "target": "src_components_customer_orderstatusview", + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/App.tsx", + "source_location": "L8", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_app", + "target": "src_components_customer_orderstatusview_orderstatusview", + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/App.tsx", + "source_location": "L8", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_app", + "target": "src_components_customer_billpaymentview", + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/App.tsx", + "source_location": "L9", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_app", + "target": "src_components_customer_billpaymentview_billpaymentview", + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/App.tsx", + "source_location": "L9", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_app", + "target": "src_components_customer_voiceassistantmodal", + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/App.tsx", + "source_location": "L10", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_app", + "target": "src_components_customer_voiceassistantmodal_voiceassistantmodal", + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/App.tsx", + "source_location": "L10", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_app", + "target": "src_components_admin_staffloginmodal", + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/App.tsx", + "source_location": "L11", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_app", + "target": "src_components_admin_staffloginmodal_staffloginmodal", + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/App.tsx", + "source_location": "L11", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_app", + "target": "src_components_admin_admindesktopshell", + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/App.tsx", + "source_location": "L12", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_app", + "target": "src_components_admin_admindesktopshell_admindesktopshell", + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/App.tsx", + "source_location": "L12", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_app", + "target": "src_data_menudata", + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/App.tsx", + "source_location": "L13", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_app", + "target": "src_data_menudata_menuitem", + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/App.tsx", + "source_location": "L13", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_app", + "target": "src_types_index", + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/App.tsx", + "source_location": "L14", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_app", + "target": "src_types_index_kdsorder", + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/App.tsx", + "source_location": "L14", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_app", + "target": "src_types_index_orderstatus", + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/App.tsx", + "source_location": "L14", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_app", + "target": "src_services_api", + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/App.tsx", + "source_location": "L15", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_app", + "target": "src_services_api_api", + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/App.tsx", + "source_location": "L15", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_app", + "target": "src_services_api_getbackendmenuid", + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/App.tsx", + "source_location": "L15", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_app", + "target": "src_services_api_restrowebsocket", + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/App.tsx", + "source_location": "L15", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_app", + "target": "src_services_api_subscribetowsevents", + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/App.tsx", + "source_location": "L15", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_app", + "target": "src_services_api_isdemomode", + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/App.tsx", + "source_location": "L15", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_app", + "target": "src_services_api_setdemomodechangecallback", + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/App.tsx", + "source_location": "L15", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_app", + "target": "src_app_customerview", + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/App.tsx", + "source_location": "L17", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_app", + "target": "src_app_gettablenumfromurl", + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/App.tsx", + "source_location": "L19", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_app", + "target": "src_app_app", + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/App.tsx", + "source_location": "L36", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_app_app", + "target": "src_app_gettablenumfromurl", + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/App.tsx", + "source_location": "L137", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_components_admin_admindesktopshell", + "target": "ref_react", + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/components/admin/AdminDesktopShell.tsx", + "source_location": "L1", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_components_admin_admindesktopshell", + "target": "ref_mui_material", + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/components/admin/AdminDesktopShell.tsx", + "source_location": "L2", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_components_admin_admindesktopshell", + "target": "ref_mui_icons_material_soupkitchen", + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/components/admin/AdminDesktopShell.tsx", + "source_location": "L18", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_components_admin_admindesktopshell", + "target": "ref_mui_icons_material_barchart", + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/components/admin/AdminDesktopShell.tsx", + "source_location": "L19", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_components_admin_admindesktopshell", + "target": "ref_mui_icons_material_recordvoiceover", + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/components/admin/AdminDesktopShell.tsx", + "source_location": "L20", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_components_admin_admindesktopshell", + "target": "ref_mui_icons_material_logout", + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/components/admin/AdminDesktopShell.tsx", + "source_location": "L21", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_components_admin_admindesktopshell", + "target": "ref_mui_icons_material_localdining", + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/components/admin/AdminDesktopShell.tsx", + "source_location": "L22", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_components_admin_admindesktopshell", + "target": "ref_mui_icons_material_accountcircle", + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/components/admin/AdminDesktopShell.tsx", + "source_location": "L23", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_components_admin_admindesktopshell", + "target": "ref_mui_icons_material_tablebar", + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/components/admin/AdminDesktopShell.tsx", + "source_location": "L24", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_components_admin_admindesktopshell", + "target": "ref_mui_icons_material_receipt", + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/components/admin/AdminDesktopShell.tsx", + "source_location": "L25", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_components_admin_admindesktopshell", + "target": "ref_mui_icons_material_bookonline", + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/components/admin/AdminDesktopShell.tsx", + "source_location": "L26", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_components_admin_admindesktopshell", + "target": "ref_mui_icons_material_inventory", + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/components/admin/AdminDesktopShell.tsx", + "source_location": "L27", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_components_admin_admindesktopshell", + "target": "ref_mui_icons_material_localshipping", + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/components/admin/AdminDesktopShell.tsx", + "source_location": "L28", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_components_admin_admindesktopshell", + "target": "ref_mui_icons_material_badge", + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/components/admin/AdminDesktopShell.tsx", + "source_location": "L29", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_components_admin_admindesktopshell", + "target": "ref_mui_icons_material_starhalf", + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/components/admin/AdminDesktopShell.tsx", + "source_location": "L30", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_components_admin_admindesktopshell", + "target": "src_components_kds_kdskanban", + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/components/admin/AdminDesktopShell.tsx", + "source_location": "L32", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_components_admin_admindesktopshell", + "target": "src_components_kds_kdskanban_kdskanban", + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/components/admin/AdminDesktopShell.tsx", + "source_location": "L32", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_components_admin_admindesktopshell", + "target": "src_components_analytics_analyticsdashboard", + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/components/admin/AdminDesktopShell.tsx", + "source_location": "L33", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_components_admin_admindesktopshell", + "target": "src_components_analytics_analyticsdashboard_analyticsdashboard", + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/components/admin/AdminDesktopShell.tsx", + "source_location": "L33", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_components_admin_admindesktopshell", + "target": "src_components_voice_voiceorderingview", + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/components/admin/AdminDesktopShell.tsx", + "source_location": "L34", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_components_admin_admindesktopshell", + "target": "src_components_voice_voiceorderingview_voiceorderingview", + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/components/admin/AdminDesktopShell.tsx", + "source_location": "L34", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_components_admin_admindesktopshell", + "target": "src_components_admin_tablemanagementview", + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/components/admin/AdminDesktopShell.tsx", + "source_location": "L35", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_components_admin_admindesktopshell", + "target": "src_components_admin_tablemanagementview_tablemanagementview", + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/components/admin/AdminDesktopShell.tsx", + "source_location": "L35", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_components_admin_admindesktopshell", + "target": "src_components_admin_billingmanagerview", + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/components/admin/AdminDesktopShell.tsx", + "source_location": "L36", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_components_admin_admindesktopshell", + "target": "src_components_admin_billingmanagerview_billingmanagerview", + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/components/admin/AdminDesktopShell.tsx", + "source_location": "L36", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_components_admin_admindesktopshell", + "target": "src_components_admin_reservationsview", + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/components/admin/AdminDesktopShell.tsx", + "source_location": "L37", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_components_admin_admindesktopshell", + "target": "src_components_admin_reservationsview_reservationsview", + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/components/admin/AdminDesktopShell.tsx", + "source_location": "L37", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_components_admin_admindesktopshell", + "target": "src_components_admin_inventoryview", + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/components/admin/AdminDesktopShell.tsx", + "source_location": "L38", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_components_admin_admindesktopshell", + "target": "src_components_admin_inventoryview_inventoryview", + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/components/admin/AdminDesktopShell.tsx", + "source_location": "L38", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_components_admin_admindesktopshell", + "target": "src_components_admin_suppliersview", + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/components/admin/AdminDesktopShell.tsx", + "source_location": "L39", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_components_admin_admindesktopshell", + "target": "src_components_admin_suppliersview_suppliersview", + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/components/admin/AdminDesktopShell.tsx", + "source_location": "L39", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_components_admin_admindesktopshell", + "target": "src_components_admin_staffshiftsview", + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/components/admin/AdminDesktopShell.tsx", + "source_location": "L40", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_components_admin_admindesktopshell", + "target": "src_components_admin_staffshiftsview_staffshiftsview", + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/components/admin/AdminDesktopShell.tsx", + "source_location": "L40", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_components_admin_admindesktopshell", + "target": "src_components_admin_feedbackinboxview", + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/components/admin/AdminDesktopShell.tsx", + "source_location": "L41", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_components_admin_admindesktopshell", + "target": "src_components_admin_feedbackinboxview_feedbackinboxview", + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/components/admin/AdminDesktopShell.tsx", + "source_location": "L41", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_components_admin_admindesktopshell", + "target": "src_types_index", + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/components/admin/AdminDesktopShell.tsx", + "source_location": "L43", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_components_admin_admindesktopshell", + "target": "src_types_index_kdsorder", + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/components/admin/AdminDesktopShell.tsx", + "source_location": "L43", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_components_admin_admindesktopshell", + "target": "src_types_index_orderstatus", + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/components/admin/AdminDesktopShell.tsx", + "source_location": "L43", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_components_admin_admindesktopshell", + "target": "src_components_admin_admindesktopshell_admindesktopshellprops", + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/components/admin/AdminDesktopShell.tsx", + "source_location": "L45", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_components_admin_admindesktopshell", + "target": "src_components_admin_admindesktopshell_tabtype", + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/components/admin/AdminDesktopShell.tsx", + "source_location": "L55", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_components_admin_admindesktopshell", + "target": "src_components_admin_admindesktopshell_admindesktopshell", + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/components/admin/AdminDesktopShell.tsx", + "source_location": "L67", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_components_admin_billingmanagerview", + "target": "ref_react", + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/components/admin/BillingManagerView.tsx", + "source_location": "L1", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_components_admin_billingmanagerview", + "target": "ref_mui_material", + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/components/admin/BillingManagerView.tsx", + "source_location": "L2", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_components_admin_billingmanagerview", + "target": "ref_mui_icons_material_receipt", + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/components/admin/BillingManagerView.tsx", + "source_location": "L28", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_components_admin_billingmanagerview", + "target": "ref_mui_icons_material_payment", + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/components/admin/BillingManagerView.tsx", + "source_location": "L29", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_components_admin_billingmanagerview", + "target": "ref_mui_icons_material_localoffer", + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/components/admin/BillingManagerView.tsx", + "source_location": "L30", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_components_admin_billingmanagerview", + "target": "ref_mui_icons_material_refresh", + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/components/admin/BillingManagerView.tsx", + "source_location": "L31", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_components_admin_billingmanagerview", + "target": "src_services_api", + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/components/admin/BillingManagerView.tsx", + "source_location": "L32", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_components_admin_billingmanagerview", + "target": "src_services_api_api", + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/components/admin/BillingManagerView.tsx", + "source_location": "L32", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_components_admin_billingmanagerview", + "target": "src_components_admin_billingmanagerview_billingmanagerview", + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/components/admin/BillingManagerView.tsx", + "source_location": "L34", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_components_admin_feedbackinboxview", + "target": "ref_react", + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/components/admin/FeedbackInboxView.tsx", + "source_location": "L1", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_components_admin_feedbackinboxview", + "target": "ref_mui_material", + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/components/admin/FeedbackInboxView.tsx", + "source_location": "L2", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_components_admin_feedbackinboxview", + "target": "ref_mui_icons_material_star", + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/components/admin/FeedbackInboxView.tsx", + "source_location": "L20", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_components_admin_feedbackinboxview", + "target": "ref_mui_icons_material_refresh", + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/components/admin/FeedbackInboxView.tsx", + "source_location": "L21", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_components_admin_feedbackinboxview", + "target": "src_services_api", + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/components/admin/FeedbackInboxView.tsx", + "source_location": "L22", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_components_admin_feedbackinboxview", + "target": "src_services_api_api", + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/components/admin/FeedbackInboxView.tsx", + "source_location": "L22", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_components_admin_feedbackinboxview", + "target": "src_components_admin_feedbackinboxview_feedbackinboxview", + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/components/admin/FeedbackInboxView.tsx", + "source_location": "L24", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_components_admin_inventoryview", + "target": "ref_react", + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/components/admin/InventoryView.tsx", + "source_location": "L1", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_components_admin_inventoryview", + "target": "ref_mui_material", + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/components/admin/InventoryView.tsx", + "source_location": "L2", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_components_admin_inventoryview", + "target": "ref_mui_icons_material_delete", + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/components/admin/InventoryView.tsx", + "source_location": "L33", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_components_admin_inventoryview", + "target": "ref_mui_icons_material_edit", + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/components/admin/InventoryView.tsx", + "source_location": "L34", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_components_admin_inventoryview", + "target": "ref_mui_icons_material_add", + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/components/admin/InventoryView.tsx", + "source_location": "L35", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_components_admin_inventoryview", + "target": "ref_mui_icons_material_refresh", + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/components/admin/InventoryView.tsx", + "source_location": "L36", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_components_admin_inventoryview", + "target": "ref_mui_icons_material_save", + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/components/admin/InventoryView.tsx", + "source_location": "L37", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_components_admin_inventoryview", + "target": "src_services_api", + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/components/admin/InventoryView.tsx", + "source_location": "L38", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_components_admin_inventoryview", + "target": "src_services_api_api", + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/components/admin/InventoryView.tsx", + "source_location": "L38", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_components_admin_inventoryview", + "target": "src_data_menudata", + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/components/admin/InventoryView.tsx", + "source_location": "L39", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_components_admin_inventoryview", + "target": "src_data_menudata_menu_items", + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/components/admin/InventoryView.tsx", + "source_location": "L39", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_components_admin_inventoryview", + "target": "src_components_admin_inventoryview_inventoryview", + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/components/admin/InventoryView.tsx", + "source_location": "L41", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_components_admin_reservationsview", + "target": "ref_react", + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/components/admin/ReservationsView.tsx", + "source_location": "L1", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_components_admin_reservationsview", + "target": "ref_mui_material", + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/components/admin/ReservationsView.tsx", + "source_location": "L2", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_components_admin_reservationsview", + "target": "ref_mui_icons_material_calendarmonth", + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/components/admin/ReservationsView.tsx", + "source_location": "L27", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_components_admin_reservationsview", + "target": "ref_mui_icons_material_add", + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/components/admin/ReservationsView.tsx", + "source_location": "L28", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_components_admin_reservationsview", + "target": "ref_mui_icons_material_refresh", + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/components/admin/ReservationsView.tsx", + "source_location": "L29", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_components_admin_reservationsview", + "target": "ref_mui_icons_material_checkcircle", + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/components/admin/ReservationsView.tsx", + "source_location": "L30", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_components_admin_reservationsview", + "target": "src_services_api", + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/components/admin/ReservationsView.tsx", + "source_location": "L31", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_components_admin_reservationsview", + "target": "src_services_api_api", + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/components/admin/ReservationsView.tsx", + "source_location": "L31", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_components_admin_reservationsview", + "target": "src_components_admin_reservationsview_reservationsview", + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/components/admin/ReservationsView.tsx", + "source_location": "L33", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_components_admin_staffloginmodal", + "target": "ref_react", + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/components/admin/StaffLoginModal.tsx", + "source_location": "L1", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_components_admin_staffloginmodal", + "target": "ref_mui_material", + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/components/admin/StaffLoginModal.tsx", + "source_location": "L2", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_components_admin_staffloginmodal", + "target": "ref_mui_icons_material_lock", + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/components/admin/StaffLoginModal.tsx", + "source_location": "L15", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_components_admin_staffloginmodal", + "target": "ref_mui_icons_material_badge", + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/components/admin/StaffLoginModal.tsx", + "source_location": "L16", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_components_admin_staffloginmodal", + "target": "src_services_api", + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/components/admin/StaffLoginModal.tsx", + "source_location": "L17", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_components_admin_staffloginmodal", + "target": "src_services_api_api", + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/components/admin/StaffLoginModal.tsx", + "source_location": "L17", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_components_admin_staffloginmodal", + "target": "src_components_admin_staffloginmodal_staffloginmodalprops", + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/components/admin/StaffLoginModal.tsx", + "source_location": "L19", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_components_admin_staffloginmodal", + "target": "src_components_admin_staffloginmodal_staffloginmodal", + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/components/admin/StaffLoginModal.tsx", + "source_location": "L25", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_components_admin_staffshiftsview", + "target": "ref_react", + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/components/admin/StaffShiftsView.tsx", + "source_location": "L1", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_components_admin_staffshiftsview", + "target": "ref_mui_material", + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/components/admin/StaffShiftsView.tsx", + "source_location": "L2", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_components_admin_staffshiftsview", + "target": "ref_mui_icons_material_add", + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/components/admin/StaffShiftsView.tsx", + "source_location": "L27", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_components_admin_staffshiftsview", + "target": "ref_mui_icons_material_refresh", + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/components/admin/StaffShiftsView.tsx", + "source_location": "L28", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_components_admin_staffshiftsview", + "target": "ref_mui_icons_material_logout", + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/components/admin/StaffShiftsView.tsx", + "source_location": "L29", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_components_admin_staffshiftsview", + "target": "ref_mui_icons_material_login", + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/components/admin/StaffShiftsView.tsx", + "source_location": "L30", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_components_admin_staffshiftsview", + "target": "src_services_api", + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/components/admin/StaffShiftsView.tsx", + "source_location": "L31", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_components_admin_staffshiftsview", + "target": "src_services_api_api", + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/components/admin/StaffShiftsView.tsx", + "source_location": "L31", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_components_admin_staffshiftsview", + "target": "src_components_admin_staffshiftsview_staffshiftsview", + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/components/admin/StaffShiftsView.tsx", + "source_location": "L33", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_components_admin_suppliersview", + "target": "ref_react", + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/components/admin/SuppliersView.tsx", + "source_location": "L1", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_components_admin_suppliersview", + "target": "ref_mui_material", + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/components/admin/SuppliersView.tsx", + "source_location": "L2", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_components_admin_suppliersview", + "target": "ref_mui_icons_material_delete", + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/components/admin/SuppliersView.tsx", + "source_location": "L34", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_components_admin_suppliersview", + "target": "ref_mui_icons_material_add", + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/components/admin/SuppliersView.tsx", + "source_location": "L35", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_components_admin_suppliersview", + "target": "ref_mui_icons_material_refresh", + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/components/admin/SuppliersView.tsx", + "source_location": "L36", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_components_admin_suppliersview", + "target": "ref_mui_icons_material_send", + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/components/admin/SuppliersView.tsx", + "source_location": "L37", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_components_admin_suppliersview", + "target": "ref_mui_icons_material_inventory2", + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/components/admin/SuppliersView.tsx", + "source_location": "L38", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_components_admin_suppliersview", + "target": "ref_mui_icons_material_localshipping", + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/components/admin/SuppliersView.tsx", + "source_location": "L39", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_components_admin_suppliersview", + "target": "src_services_api", + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/components/admin/SuppliersView.tsx", + "source_location": "L40", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_components_admin_suppliersview", + "target": "src_services_api_api", + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/components/admin/SuppliersView.tsx", + "source_location": "L40", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_components_admin_suppliersview", + "target": "src_components_admin_suppliersview_suppliersview", + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/components/admin/SuppliersView.tsx", + "source_location": "L42", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_components_admin_tablemanagementview", + "target": "ref_react", + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/components/admin/TableManagementView.tsx", + "source_location": "L1", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_components_admin_tablemanagementview", + "target": "ref_mui_material", + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/components/admin/TableManagementView.tsx", + "source_location": "L2", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_components_admin_tablemanagementview", + "target": "ref_mui_icons_material_tablebar", + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/components/admin/TableManagementView.tsx", + "source_location": "L23", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_components_admin_tablemanagementview", + "target": "ref_mui_icons_material_qrcode", + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/components/admin/TableManagementView.tsx", + "source_location": "L24", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_components_admin_tablemanagementview", + "target": "ref_mui_icons_material_refresh", + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/components/admin/TableManagementView.tsx", + "source_location": "L25", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_components_admin_tablemanagementview", + "target": "ref_mui_icons_material_close", + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/components/admin/TableManagementView.tsx", + "source_location": "L26", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_components_admin_tablemanagementview", + "target": "ref_mui_icons_material_playarrow", + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/components/admin/TableManagementView.tsx", + "source_location": "L27", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_components_admin_tablemanagementview", + "target": "ref_mui_icons_material_cleaningservices", + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/components/admin/TableManagementView.tsx", + "source_location": "L28", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_components_admin_tablemanagementview", + "target": "src_services_api", + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/components/admin/TableManagementView.tsx", + "source_location": "L29", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_components_admin_tablemanagementview", + "target": "src_services_api_api", + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/components/admin/TableManagementView.tsx", + "source_location": "L29", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_components_admin_tablemanagementview", + "target": "src_components_admin_tablemanagementview_tablemanagementview", + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/components/admin/TableManagementView.tsx", + "source_location": "L31", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_components_analytics_analyticsdashboard", + "target": "ref_react", + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/components/analytics/AnalyticsDashboard.tsx", + "source_location": "L1", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_components_analytics_analyticsdashboard", + "target": "ref_mui_material", + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/components/analytics/AnalyticsDashboard.tsx", + "source_location": "L2", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_components_analytics_analyticsdashboard", + "target": "ref_mui_icons_material_trendingup", + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/components/analytics/AnalyticsDashboard.tsx", + "source_location": "L21", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_components_analytics_analyticsdashboard", + "target": "ref_mui_icons_material_trendingdown", + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/components/analytics/AnalyticsDashboard.tsx", + "source_location": "L22", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_components_analytics_analyticsdashboard", + "target": "ref_mui_icons_material_attachmoney", + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/components/analytics/AnalyticsDashboard.tsx", + "source_location": "L23", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_components_analytics_analyticsdashboard", + "target": "ref_mui_icons_material_shoppingbag", + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/components/analytics/AnalyticsDashboard.tsx", + "source_location": "L24", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_components_analytics_analyticsdashboard", + "target": "ref_mui_icons_material_speed", + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/components/analytics/AnalyticsDashboard.tsx", + "source_location": "L25", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_components_analytics_analyticsdashboard", + "target": "ref_mui_icons_material_tablebar", + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/components/analytics/AnalyticsDashboard.tsx", + "source_location": "L26", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_components_analytics_analyticsdashboard", + "target": "ref_mui_icons_material_star", + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/components/analytics/AnalyticsDashboard.tsx", + "source_location": "L27", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_components_analytics_analyticsdashboard", + "target": "src_components_common_statusbadge", + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/components/analytics/AnalyticsDashboard.tsx", + "source_location": "L28", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_components_analytics_analyticsdashboard", + "target": "src_components_common_statusbadge_statusbadge", + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/components/analytics/AnalyticsDashboard.tsx", + "source_location": "L28", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_components_analytics_analyticsdashboard", + "target": "src_services_api", + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/components/analytics/AnalyticsDashboard.tsx", + "source_location": "L29", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_components_analytics_analyticsdashboard", + "target": "src_services_api_api", + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/components/analytics/AnalyticsDashboard.tsx", + "source_location": "L29", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_components_analytics_analyticsdashboard", + "target": "src_components_analytics_analyticsdashboard_analyticsdashboard", + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/components/analytics/AnalyticsDashboard.tsx", + "source_location": "L31", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_components_common_navigation", + "target": "ref_react", + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/components/common/Navigation.tsx", + "source_location": "L1", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_components_common_navigation", + "target": "ref_mui_material", + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/components/common/Navigation.tsx", + "source_location": "L2", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_components_common_navigation", + "target": "ref_mui_icons_material_menu", + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/components/common/Navigation.tsx", + "source_location": "L18", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_components_common_navigation", + "target": "ref_mui_icons_material_soupkitchen", + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/components/common/Navigation.tsx", + "source_location": "L19", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_components_common_navigation", + "target": "ref_mui_icons_material_barchart", + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/components/common/Navigation.tsx", + "source_location": "L20", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_components_common_navigation", + "target": "ref_mui_icons_material_recordvoiceover", + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/components/common/Navigation.tsx", + "source_location": "L21", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_components_common_navigation", + "target": "ref_mui_icons_material_tablerestaurant", + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/components/common/Navigation.tsx", + "source_location": "L22", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_components_common_navigation", + "target": "ref_mui_icons_material_volumeup", + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/components/common/Navigation.tsx", + "source_location": "L23", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_components_common_navigation", + "target": "ref_mui_icons_material_volumeoff", + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/components/common/Navigation.tsx", + "source_location": "L24", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_components_common_navigation", + "target": "ref_mui_icons_material_localdining", + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/components/common/Navigation.tsx", + "source_location": "L25", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_components_common_navigation", + "target": "src_components_common_navigation_navigationprops", + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/components/common/Navigation.tsx", + "source_location": "L27", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_components_common_navigation", + "target": "src_components_common_navigation_navigation", + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/components/common/Navigation.tsx", + "source_location": "L35", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_components_common_statusbadge", + "target": "ref_react", + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/components/common/StatusBadge.tsx", + "source_location": "L1", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_components_common_statusbadge", + "target": "ref_mui_material", + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/components/common/StatusBadge.tsx", + "source_location": "L2", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_components_common_statusbadge", + "target": "src_types_index", + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/components/common/StatusBadge.tsx", + "source_location": "L3", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_components_common_statusbadge", + "target": "src_types_index_orderstatus", + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/components/common/StatusBadge.tsx", + "source_location": "L3", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_components_common_statusbadge", + "target": "src_types_index_ordertype", + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/components/common/StatusBadge.tsx", + "source_location": "L3", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_components_common_statusbadge", + "target": "src_components_common_statusbadge_statusbadgeprops", + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/components/common/StatusBadge.tsx", + "source_location": "L5", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_components_common_statusbadge", + "target": "src_components_common_statusbadge_statusbadge", + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/components/common/StatusBadge.tsx", + "source_location": "L12", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_components_customer_billpaymentview", + "target": "ref_react", + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/components/customer/BillPaymentView.tsx", + "source_location": "L1", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_components_customer_billpaymentview", + "target": "ref_mui_material", + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/components/customer/BillPaymentView.tsx", + "source_location": "L2", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_components_customer_billpaymentview", + "target": "ref_mui_icons_material_receiptlong", + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/components/customer/BillPaymentView.tsx", + "source_location": "L13", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_components_customer_billpaymentview", + "target": "ref_mui_icons_material_checkcircle", + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/components/customer/BillPaymentView.tsx", + "source_location": "L14", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_components_customer_billpaymentview", + "target": "ref_mui_icons_material_qrcode2", + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/components/customer/BillPaymentView.tsx", + "source_location": "L15", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_components_customer_billpaymentview", + "target": "ref_mui_icons_material_person", + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/components/customer/BillPaymentView.tsx", + "source_location": "L16", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_components_customer_billpaymentview", + "target": "ref_mui_icons_material_creditcard", + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/components/customer/BillPaymentView.tsx", + "source_location": "L17", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_components_customer_billpaymentview", + "target": "ref_mui_icons_material_currencyrupee", + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/components/customer/BillPaymentView.tsx", + "source_location": "L18", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_components_customer_billpaymentview", + "target": "src_services_api", + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/components/customer/BillPaymentView.tsx", + "source_location": "L19", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_components_customer_billpaymentview", + "target": "src_services_api_api", + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/components/customer/BillPaymentView.tsx", + "source_location": "L19", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_components_customer_billpaymentview", + "target": "src_components_customer_billpaymentview_billpaymentviewprops", + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/components/customer/BillPaymentView.tsx", + "source_location": "L21", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_components_customer_billpaymentview", + "target": "src_components_customer_billpaymentview_billpaymentview", + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/components/customer/BillPaymentView.tsx", + "source_location": "L25", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_components_customer_cartreviewview", + "target": "ref_react", + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/components/customer/CartReviewView.tsx", + "source_location": "L1", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_components_customer_cartreviewview", + "target": "ref_mui_material", + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/components/customer/CartReviewView.tsx", + "source_location": "L2", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_components_customer_cartreviewview", + "target": "ref_mui_icons_material_arrowback", + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/components/customer/CartReviewView.tsx", + "source_location": "L15", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_components_customer_cartreviewview", + "target": "ref_mui_icons_material_add", + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/components/customer/CartReviewView.tsx", + "source_location": "L16", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_components_customer_cartreviewview", + "target": "ref_mui_icons_material_remove", + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/components/customer/CartReviewView.tsx", + "source_location": "L17", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_components_customer_cartreviewview", + "target": "ref_mui_icons_material_delete", + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/components/customer/CartReviewView.tsx", + "source_location": "L18", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_components_customer_cartreviewview", + "target": "ref_mui_icons_material_send", + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/components/customer/CartReviewView.tsx", + "source_location": "L19", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_components_customer_cartreviewview", + "target": "ref_mui_icons_material_receiptlong", + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/components/customer/CartReviewView.tsx", + "source_location": "L20", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_components_customer_cartreviewview", + "target": "src_data_menudata", + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/components/customer/CartReviewView.tsx", + "source_location": "L21", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_components_customer_cartreviewview", + "target": "src_data_menudata_menu_items", + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/components/customer/CartReviewView.tsx", + "source_location": "L21", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_components_customer_cartreviewview", + "target": "src_data_menudata", + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/components/customer/CartReviewView.tsx", + "source_location": "L22", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_components_customer_cartreviewview", + "target": "src_data_menudata_menuitem", + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/components/customer/CartReviewView.tsx", + "source_location": "L22", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_components_customer_cartreviewview", + "target": "src_components_common_statusbadge", + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/components/customer/CartReviewView.tsx", + "source_location": "L23", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_components_customer_cartreviewview", + "target": "src_components_common_statusbadge_statusbadge", + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/components/customer/CartReviewView.tsx", + "source_location": "L23", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_components_customer_cartreviewview", + "target": "src_components_customer_cartreviewview_cartreviewviewprops", + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/components/customer/CartReviewView.tsx", + "source_location": "L25", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_components_customer_cartreviewview", + "target": "src_components_customer_cartreviewview_cartreviewview", + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/components/customer/CartReviewView.tsx", + "source_location": "L32", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_components_customer_customizationmodal", + "target": "ref_react", + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/components/customer/CustomizationModal.tsx", + "source_location": "L1", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_components_customer_customizationmodal", + "target": "ref_mui_material", + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/components/customer/CustomizationModal.tsx", + "source_location": "L2", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_components_customer_customizationmodal", + "target": "src_data_menudata", + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/components/customer/CustomizationModal.tsx", + "source_location": "L17", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_components_customer_customizationmodal", + "target": "src_data_menudata_menuitem", + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/components/customer/CustomizationModal.tsx", + "source_location": "L17", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_components_customer_customizationmodal", + "target": "src_components_common_statusbadge", + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/components/customer/CustomizationModal.tsx", + "source_location": "L18", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_components_customer_customizationmodal", + "target": "src_components_common_statusbadge_statusbadge", + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/components/customer/CustomizationModal.tsx", + "source_location": "L18", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_components_customer_customizationmodal", + "target": "src_components_customer_customizationmodal_customizationmodalprops", + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/components/customer/CustomizationModal.tsx", + "source_location": "L20", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_components_customer_customizationmodal", + "target": "src_components_customer_customizationmodal_customizationmodal", + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/components/customer/CustomizationModal.tsx", + "source_location": "L27", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_components_customer_menubrowseview", + "target": "ref_react", + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/components/customer/MenuBrowseView.tsx", + "source_location": "L1", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_components_customer_menubrowseview", + "target": "ref_mui_material", + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/components/customer/MenuBrowseView.tsx", + "source_location": "L2", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_components_customer_menubrowseview", + "target": "ref_mui_icons_material_add", + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/components/customer/MenuBrowseView.tsx", + "source_location": "L17", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_components_customer_menubrowseview", + "target": "ref_mui_icons_material_remove", + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/components/customer/MenuBrowseView.tsx", + "source_location": "L18", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_components_customer_menubrowseview", + "target": "ref_mui_icons_material_search", + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/components/customer/MenuBrowseView.tsx", + "source_location": "L19", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_components_customer_menubrowseview", + "target": "ref_mui_icons_material_shoppingcart", + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/components/customer/MenuBrowseView.tsx", + "source_location": "L20", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_components_customer_menubrowseview", + "target": "ref_mui_icons_material_mic", + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/components/customer/MenuBrowseView.tsx", + "source_location": "L21", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_components_customer_menubrowseview", + "target": "ref_mui_icons_material_home", + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/components/customer/MenuBrowseView.tsx", + "source_location": "L22", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_components_customer_menubrowseview", + "target": "ref_mui_icons_material_menubook", + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/components/customer/MenuBrowseView.tsx", + "source_location": "L23", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_components_customer_menubrowseview", + "target": "ref_mui_icons_material_trackchanges", + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/components/customer/MenuBrowseView.tsx", + "source_location": "L24", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_components_customer_menubrowseview", + "target": "ref_mui_icons_material_autoawesome", + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/components/customer/MenuBrowseView.tsx", + "source_location": "L25", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_components_customer_menubrowseview", + "target": "ref_mui_icons_material_star", + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/components/customer/MenuBrowseView.tsx", + "source_location": "L26", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_components_customer_menubrowseview", + "target": "src_data_menudata", + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/components/customer/MenuBrowseView.tsx", + "source_location": "L27", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_components_customer_menubrowseview", + "target": "src_data_menudata_menu_items", + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/components/customer/MenuBrowseView.tsx", + "source_location": "L27", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_components_customer_menubrowseview", + "target": "src_data_menudata_categories", + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/components/customer/MenuBrowseView.tsx", + "source_location": "L27", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_components_customer_menubrowseview", + "target": "src_data_menudata", + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/components/customer/MenuBrowseView.tsx", + "source_location": "L28", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_components_customer_menubrowseview", + "target": "src_data_menudata_menuitem", + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/components/customer/MenuBrowseView.tsx", + "source_location": "L28", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_components_customer_menubrowseview", + "target": "src_data_menudata_categorytype", + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/components/customer/MenuBrowseView.tsx", + "source_location": "L28", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_components_customer_menubrowseview", + "target": "src_components_common_statusbadge", + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/components/customer/MenuBrowseView.tsx", + "source_location": "L29", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_components_customer_menubrowseview", + "target": "src_components_common_statusbadge_statusbadge", + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/components/customer/MenuBrowseView.tsx", + "source_location": "L29", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_components_customer_menubrowseview", + "target": "src_components_customer_menubrowseview_menubrowseviewprops", + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/components/customer/MenuBrowseView.tsx", + "source_location": "L31", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_components_customer_menubrowseview", + "target": "src_components_customer_menubrowseview_dietary_filters", + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/components/customer/MenuBrowseView.tsx", + "source_location": "L39", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_components_customer_menubrowseview", + "target": "src_components_customer_menubrowseview_spice_icons", + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/components/customer/MenuBrowseView.tsx", + "source_location": "L46", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_components_customer_menubrowseview", + "target": "src_components_customer_menubrowseview_menubrowseview", + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/components/customer/MenuBrowseView.tsx", + "source_location": "L53", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_components_customer_orderstatusview", + "target": "ref_react", + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/components/customer/OrderStatusView.tsx", + "source_location": "L1", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_components_customer_orderstatusview", + "target": "ref_mui_material", + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/components/customer/OrderStatusView.tsx", + "source_location": "L2", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_components_customer_orderstatusview", + "target": "ref_mui_icons_material_accesstime", + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/components/customer/OrderStatusView.tsx", + "source_location": "L15", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_components_customer_orderstatusview", + "target": "ref_mui_icons_material_notificationsactive", + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/components/customer/OrderStatusView.tsx", + "source_location": "L16", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_components_customer_orderstatusview", + "target": "ref_mui_icons_material_add", + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/components/customer/OrderStatusView.tsx", + "source_location": "L17", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_components_customer_orderstatusview", + "target": "ref_mui_icons_material_payment", + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/components/customer/OrderStatusView.tsx", + "source_location": "L18", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_components_customer_orderstatusview", + "target": "ref_mui_icons_material_checkcircle", + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/components/customer/OrderStatusView.tsx", + "source_location": "L19", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_components_customer_orderstatusview", + "target": "ref_mui_icons_material_restaurant", + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/components/customer/OrderStatusView.tsx", + "source_location": "L20", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_components_customer_orderstatusview", + "target": "ref_mui_icons_material_deliverydining", + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/components/customer/OrderStatusView.tsx", + "source_location": "L21", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_components_customer_orderstatusview", + "target": "ref_mui_icons_material_sentimentsatisfiedalt", + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/components/customer/OrderStatusView.tsx", + "source_location": "L22", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_components_customer_orderstatusview", + "target": "src_services_api", + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/components/customer/OrderStatusView.tsx", + "source_location": "L23", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_components_customer_orderstatusview", + "target": "src_services_api_api", + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/components/customer/OrderStatusView.tsx", + "source_location": "L23", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_components_customer_orderstatusview", + "target": "src_services_api_restrowebsocket", + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/components/customer/OrderStatusView.tsx", + "source_location": "L23", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_components_customer_orderstatusview", + "target": "src_services_api_subscribetowsevents", + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/components/customer/OrderStatusView.tsx", + "source_location": "L23", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_components_customer_orderstatusview", + "target": "src_components_customer_orderstatusview_orderstatusviewprops", + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/components/customer/OrderStatusView.tsx", + "source_location": "L25", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_components_customer_orderstatusview", + "target": "src_components_customer_orderstatusview_order_steps", + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/components/customer/OrderStatusView.tsx", + "source_location": "L29", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_components_customer_orderstatusview", + "target": "src_components_customer_orderstatusview_orderstatusview", + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/components/customer/OrderStatusView.tsx", + "source_location": "L56", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_components_customer_tablelandingview", + "target": "ref_react", + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/components/customer/TableLandingView.tsx", + "source_location": "L1", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_components_customer_tablelandingview", + "target": "ref_mui_material", + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/components/customer/TableLandingView.tsx", + "source_location": "L2", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_components_customer_tablelandingview", + "target": "ref_mui_icons_material_restaurantmenu", + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/components/customer/TableLandingView.tsx", + "source_location": "L12", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_components_customer_tablelandingview", + "target": "ref_mui_icons_material_autoawesome", + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/components/customer/TableLandingView.tsx", + "source_location": "L13", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_components_customer_tablelandingview", + "target": "ref_mui_icons_material_language", + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/components/customer/TableLandingView.tsx", + "source_location": "L14", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_components_customer_tablelandingview", + "target": "ref_mui_icons_material_translate", + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/components/customer/TableLandingView.tsx", + "source_location": "L15", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_components_customer_tablelandingview", + "target": "ref_mui_icons_material_arrowforward", + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/components/customer/TableLandingView.tsx", + "source_location": "L16", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_components_customer_tablelandingview", + "target": "ref_mui_icons_material_wifi", + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/components/customer/TableLandingView.tsx", + "source_location": "L17", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_components_customer_tablelandingview", + "target": "ref_mui_icons_material_mic", + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/components/customer/TableLandingView.tsx", + "source_location": "L18", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_components_customer_tablelandingview", + "target": "ref_mui_icons_material_lock", + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/components/customer/TableLandingView.tsx", + "source_location": "L19", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_components_customer_tablelandingview", + "target": "src_components_customer_tablelandingview_tablelandingviewprops", + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/components/customer/TableLandingView.tsx", + "source_location": "L21", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_components_customer_tablelandingview", + "target": "src_components_customer_tablelandingview_tablelandingview", + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/components/customer/TableLandingView.tsx", + "source_location": "L27", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_components_customer_voiceassistantmodal", + "target": "ref_react", + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/components/customer/VoiceAssistantModal.tsx", + "source_location": "L1", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_components_customer_voiceassistantmodal", + "target": "ref_mui_material", + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/components/customer/VoiceAssistantModal.tsx", + "source_location": "L2", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_components_customer_voiceassistantmodal", + "target": "ref_mui_icons_material_close", + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/components/customer/VoiceAssistantModal.tsx", + "source_location": "L14", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_components_customer_voiceassistantmodal", + "target": "ref_mui_icons_material_mic", + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/components/customer/VoiceAssistantModal.tsx", + "source_location": "L15", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_components_customer_voiceassistantmodal", + "target": "ref_mui_icons_material_stop", + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/components/customer/VoiceAssistantModal.tsx", + "source_location": "L16", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_components_customer_voiceassistantmodal", + "target": "ref_mui_icons_material_graphiceq", + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/components/customer/VoiceAssistantModal.tsx", + "source_location": "L17", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_components_customer_voiceassistantmodal", + "target": "ref_mui_icons_material_smarttoy", + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/components/customer/VoiceAssistantModal.tsx", + "source_location": "L18", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_components_customer_voiceassistantmodal", + "target": "ref_mui_icons_material_checkcircle", + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/components/customer/VoiceAssistantModal.tsx", + "source_location": "L19", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_components_customer_voiceassistantmodal", + "target": "ref_mui_icons_material_addshoppingcart", + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/components/customer/VoiceAssistantModal.tsx", + "source_location": "L20", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_components_customer_voiceassistantmodal", + "target": "ref_mui_icons_material_volumeup", + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/components/customer/VoiceAssistantModal.tsx", + "source_location": "L21", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_components_customer_voiceassistantmodal", + "target": "src_data_menudata", + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/components/customer/VoiceAssistantModal.tsx", + "source_location": "L22", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_components_customer_voiceassistantmodal", + "target": "src_data_menudata_menu_items", + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/components/customer/VoiceAssistantModal.tsx", + "source_location": "L22", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_components_customer_voiceassistantmodal", + "target": "src_data_menudata", + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/components/customer/VoiceAssistantModal.tsx", + "source_location": "L23", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_components_customer_voiceassistantmodal", + "target": "src_data_menudata_menuitem", + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/components/customer/VoiceAssistantModal.tsx", + "source_location": "L23", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_components_customer_voiceassistantmodal", + "target": "src_hooks_usespeechrecognition", + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/components/customer/VoiceAssistantModal.tsx", + "source_location": "L24", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_components_customer_voiceassistantmodal", + "target": "src_hooks_usespeechrecognition_usespeechrecognition", + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/components/customer/VoiceAssistantModal.tsx", + "source_location": "L24", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_components_customer_voiceassistantmodal", + "target": "src_hooks_usespeechsynthesis", + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/components/customer/VoiceAssistantModal.tsx", + "source_location": "L25", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_components_customer_voiceassistantmodal", + "target": "src_hooks_usespeechsynthesis_usespeechsynthesis", + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/components/customer/VoiceAssistantModal.tsx", + "source_location": "L25", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_components_customer_voiceassistantmodal", + "target": "src_hooks_usespeechrecognition", + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/components/customer/VoiceAssistantModal.tsx", + "source_location": "L26", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_components_customer_voiceassistantmodal", + "target": "src_hooks_usespeechrecognition_voicestate", + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/components/customer/VoiceAssistantModal.tsx", + "source_location": "L26", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_components_customer_voiceassistantmodal", + "target": "src_components_customer_voiceassistantmodal_detecteditem", + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/components/customer/VoiceAssistantModal.tsx", + "source_location": "L28", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_components_customer_voiceassistantmodal", + "target": "src_components_customer_voiceassistantmodal_voiceassistantmodalprops", + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/components/customer/VoiceAssistantModal.tsx", + "source_location": "L33", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_components_customer_voiceassistantmodal", + "target": "src_components_customer_voiceassistantmodal_parsetranscripttoitems", + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/components/customer/VoiceAssistantModal.tsx", + "source_location": "L40", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_components_customer_voiceassistantmodal", + "target": "src_components_customer_voiceassistantmodal_quick_commands", + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/components/customer/VoiceAssistantModal.tsx", + "source_location": "L69", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_components_customer_voiceassistantmodal", + "target": "src_components_customer_voiceassistantmodal_voiceassistantmodal", + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/components/customer/VoiceAssistantModal.tsx", + "source_location": "L77", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_components_customer_voiceassistantmodal_voiceassistantmodal", + "target": "src_components_customer_voiceassistantmodal_parsetranscripttoitems", + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/components/customer/VoiceAssistantModal.tsx", + "source_location": "L105", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_components_kds_kdskanban", + "target": "ref_react", + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/components/kds/KDSKanban.tsx", + "source_location": "L1", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_components_kds_kdskanban", + "target": "ref_mui_material", + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/components/kds/KDSKanban.tsx", + "source_location": "L2", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_components_kds_kdskanban", + "target": "ref_mui_icons_material_search", + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/components/kds/KDSKanban.tsx", + "source_location": "L13", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_components_kds_kdskanban", + "target": "ref_mui_icons_material_add", + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/components/kds/KDSKanban.tsx", + "source_location": "L14", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_components_kds_kdskanban", + "target": "ref_mui_icons_material_restaurantmenu", + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/components/kds/KDSKanban.tsx", + "source_location": "L15", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_components_kds_kdskanban", + "target": "src_types_index", + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/components/kds/KDSKanban.tsx", + "source_location": "L16", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_components_kds_kdskanban", + "target": "src_types_index_kdsorder", + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/components/kds/KDSKanban.tsx", + "source_location": "L16", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_components_kds_kdskanban", + "target": "src_types_index_orderstatus", + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/components/kds/KDSKanban.tsx", + "source_location": "L16", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_components_kds_kdskanban", + "target": "src_types_index_ordertype", + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/components/kds/KDSKanban.tsx", + "source_location": "L16", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_components_kds_kdskanban", + "target": "src_components_kds_kdsticketcard", + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/components/kds/KDSKanban.tsx", + "source_location": "L17", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_components_kds_kdskanban", + "target": "src_components_kds_kdsticketcard_kdsticketcard", + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/components/kds/KDSKanban.tsx", + "source_location": "L17", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_components_kds_kdskanban", + "target": "src_components_kds_kdskanban_kdskanbanprops", + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/components/kds/KDSKanban.tsx", + "source_location": "L19", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_components_kds_kdskanban", + "target": "src_components_kds_kdskanban_kdskanban", + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/components/kds/KDSKanban.tsx", + "source_location": "L26", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_components_kds_kdsticketcard", + "target": "ref_react", + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/components/kds/KDSTicketCard.tsx", + "source_location": "L1", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_components_kds_kdsticketcard", + "target": "ref_mui_material", + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/components/kds/KDSTicketCard.tsx", + "source_location": "L2", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_components_kds_kdsticketcard", + "target": "ref_mui_icons_material_accesstime", + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/components/kds/KDSTicketCard.tsx", + "source_location": "L15", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_components_kds_kdsticketcard", + "target": "ref_mui_icons_material_arrowforward", + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/components/kds/KDSTicketCard.tsx", + "source_location": "L16", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_components_kds_kdsticketcard", + "target": "ref_mui_icons_material_arrowback", + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/components/kds/KDSTicketCard.tsx", + "source_location": "L17", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_components_kds_kdsticketcard", + "target": "ref_mui_icons_material_checkcircle", + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/components/kds/KDSTicketCard.tsx", + "source_location": "L18", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_components_kds_kdsticketcard", + "target": "ref_mui_icons_material_priorityhigh", + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/components/kds/KDSTicketCard.tsx", + "source_location": "L19", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_components_kds_kdsticketcard", + "target": "src_types_index", + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/components/kds/KDSTicketCard.tsx", + "source_location": "L20", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_components_kds_kdsticketcard", + "target": "src_types_index_kdsorder", + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/components/kds/KDSTicketCard.tsx", + "source_location": "L20", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_components_kds_kdsticketcard", + "target": "src_types_index_orderstatus", + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/components/kds/KDSTicketCard.tsx", + "source_location": "L20", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_components_kds_kdsticketcard", + "target": "src_components_common_statusbadge", + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/components/kds/KDSTicketCard.tsx", + "source_location": "L21", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_components_kds_kdsticketcard", + "target": "src_components_common_statusbadge_statusbadge", + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/components/kds/KDSTicketCard.tsx", + "source_location": "L21", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_components_kds_kdsticketcard", + "target": "src_components_kds_kdsticketcard_kdsticketcardprops", + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/components/kds/KDSTicketCard.tsx", + "source_location": "L23", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_components_kds_kdsticketcard", + "target": "src_components_kds_kdsticketcard_kdsticketcard", + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/components/kds/KDSTicketCard.tsx", + "source_location": "L29", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_components_table_tablelandingview", + "target": "ref_react", + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/components/table/TableLandingView.tsx", + "source_location": "L1", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_components_table_tablelandingview", + "target": "ref_mui_material", + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/components/table/TableLandingView.tsx", + "source_location": "L2", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_components_table_tablelandingview", + "target": "ref_mui_icons_material_tablerestaurant", + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/components/table/TableLandingView.tsx", + "source_location": "L18", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_components_table_tablelandingview", + "target": "ref_mui_icons_material_notificationsactive", + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/components/table/TableLandingView.tsx", + "source_location": "L19", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_components_table_tablelandingview", + "target": "ref_mui_icons_material_receiptlong", + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/components/table/TableLandingView.tsx", + "source_location": "L20", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_components_table_tablelandingview", + "target": "ref_mui_icons_material_localoffer", + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/components/table/TableLandingView.tsx", + "source_location": "L21", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_components_table_tablelandingview", + "target": "ref_mui_icons_material_restaurant", + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/components/table/TableLandingView.tsx", + "source_location": "L22", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_components_table_tablelandingview", + "target": "ref_mui_icons_material_checkcircle", + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/components/table/TableLandingView.tsx", + "source_location": "L23", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_components_table_tablelandingview", + "target": "src_components_common_statusbadge", + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/components/table/TableLandingView.tsx", + "source_location": "L24", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_components_table_tablelandingview", + "target": "src_components_common_statusbadge_statusbadge", + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/components/table/TableLandingView.tsx", + "source_location": "L24", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_components_table_tablelandingview", + "target": "src_components_table_tablelandingview_tablelandingview", + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/components/table/TableLandingView.tsx", + "source_location": "L26", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_components_voice_voiceorderingview", + "target": "ref_react", + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/components/voice/VoiceOrderingView.tsx", + "source_location": "L1", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_components_voice_voiceorderingview", + "target": "ref_mui_material", + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/components/voice/VoiceOrderingView.tsx", + "source_location": "L2", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_components_voice_voiceorderingview", + "target": "ref_mui_icons_material_mic", + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/components/voice/VoiceOrderingView.tsx", + "source_location": "L14", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_components_voice_voiceorderingview", + "target": "ref_mui_icons_material_graphiceq", + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/components/voice/VoiceOrderingView.tsx", + "source_location": "L15", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_components_voice_voiceorderingview", + "target": "ref_mui_icons_material_smarttoy", + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/components/voice/VoiceOrderingView.tsx", + "source_location": "L16", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_components_voice_voiceorderingview", + "target": "ref_mui_icons_material_addshoppingcart", + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/components/voice/VoiceOrderingView.tsx", + "source_location": "L17", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_components_voice_voiceorderingview", + "target": "ref_mui_icons_material_checkcircleoutlined", + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/components/voice/VoiceOrderingView.tsx", + "source_location": "L18", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_components_voice_voiceorderingview", + "target": "src_types_index", + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/components/voice/VoiceOrderingView.tsx", + "source_location": "L19", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_components_voice_voiceorderingview", + "target": "src_types_index_voicecommandsuggestion", + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/components/voice/VoiceOrderingView.tsx", + "source_location": "L19", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_components_voice_voiceorderingview", + "target": "src_components_voice_voiceorderingview_voiceorderingviewprops", + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/components/voice/VoiceOrderingView.tsx", + "source_location": "L21", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_components_voice_voiceorderingview", + "target": "src_components_voice_voiceorderingview_voiceorderingview", + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/components/voice/VoiceOrderingView.tsx", + "source_location": "L25", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_data_menudata", + "target": "src_data_menudata_menuitem", + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/data/menuData.ts", + "source_location": "L1", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_data_menudata", + "target": "src_data_menudata_menu_items", + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/data/menuData.ts", + "source_location": "L17", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_data_menudata", + "target": "src_data_menudata_categories", + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/data/menuData.ts", + "source_location": "L375", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_data_menudata", + "target": "src_data_menudata_categorytype", + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/data/menuData.ts", + "source_location": "L376", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_hooks_usespeechrecognition", + "target": "ref_react", + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/hooks/useSpeechRecognition.ts", + "source_location": "L1", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_hooks_usespeechrecognition", + "target": "src_hooks_usespeechrecognition_speechrecognitionevent", + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/hooks/useSpeechRecognition.ts", + "source_location": "L3", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_hooks_usespeechrecognition", + "target": "src_hooks_usespeechrecognition_speechrecognitionerrorevent", + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/hooks/useSpeechRecognition.ts", + "source_location": "L8", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_hooks_usespeechrecognition", + "target": "src_hooks_usespeechrecognition_ispeechrecognition", + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/hooks/useSpeechRecognition.ts", + "source_location": "L12", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_hooks_usespeechrecognition_ispeechrecognition", + "target": "src_hooks_usespeechrecognition_ispeechrecognition_start", + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "src/hooks/useSpeechRecognition.ts", + "source_location": "L17", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_hooks_usespeechrecognition_ispeechrecognition", + "target": "src_hooks_usespeechrecognition_ispeechrecognition_stop", + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "src/hooks/useSpeechRecognition.ts", + "source_location": "L18", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_hooks_usespeechrecognition_ispeechrecognition", + "target": "src_hooks_usespeechrecognition_ispeechrecognition_abort", + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "src/hooks/useSpeechRecognition.ts", + "source_location": "L19", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_hooks_usespeechrecognition", + "target": "src_hooks_usespeechrecognition_window", + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/hooks/useSpeechRecognition.ts", + "source_location": "L27", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_hooks_usespeechrecognition", + "target": "src_hooks_usespeechrecognition_voicestate", + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/hooks/useSpeechRecognition.ts", + "source_location": "L33", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_hooks_usespeechrecognition", + "target": "src_hooks_usespeechrecognition_usespeechrecognitionreturn", + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/hooks/useSpeechRecognition.ts", + "source_location": "L35", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_hooks_usespeechrecognition", + "target": "src_hooks_usespeechrecognition_usespeechrecognition", + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/hooks/useSpeechRecognition.ts", + "source_location": "L46", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_hooks_usespeechrecognition_usespeechrecognition", + "target": "src_hooks_usespeechrecognition_ispeechrecognition_abort", + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/hooks/useSpeechRecognition.ts", + "source_location": "L59", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_hooks_usespeechrecognition_usespeechrecognition", + "target": "src_hooks_usespeechrecognition_ispeechrecognition_start", + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/hooks/useSpeechRecognition.ts", + "source_location": "L124", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_hooks_usespeechrecognition_usespeechrecognition", + "target": "src_hooks_usespeechrecognition_ispeechrecognition_stop", + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/hooks/useSpeechRecognition.ts", + "source_location": "L132", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_hooks_usespeechsynthesis", + "target": "ref_react", + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/hooks/useSpeechSynthesis.ts", + "source_location": "L1", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_hooks_usespeechsynthesis", + "target": "src_hooks_usespeechrecognition", + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/hooks/useSpeechSynthesis.ts", + "source_location": "L2", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_hooks_usespeechsynthesis", + "target": "src_hooks_usespeechrecognition_voicestate", + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/hooks/useSpeechSynthesis.ts", + "source_location": "L2", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_hooks_usespeechsynthesis", + "target": "src_hooks_usespeechsynthesis_usespeechsynthesisreturn", + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/hooks/useSpeechSynthesis.ts", + "source_location": "L4", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_hooks_usespeechsynthesis", + "target": "src_hooks_usespeechsynthesis_usespeechsynthesis", + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/hooks/useSpeechSynthesis.ts", + "source_location": "L10", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_main", + "target": "ref_react", + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/main.tsx", + "source_location": "L1", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_main", + "target": "ref_react_dom_client", + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/main.tsx", + "source_location": "L2", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_main", + "target": "src_index", + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/main.tsx", + "source_location": "L3", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_main", + "target": "src_app", + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/main.tsx", + "source_location": "L4", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_services_api", + "target": "src_data_menudata", + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/services/api.ts", + "source_location": "L1", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_services_api", + "target": "src_data_menudata_menuitem", + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/services/api.ts", + "source_location": "L1", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_services_api", + "target": "src_data_menudata_menu_items", + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/services/api.ts", + "source_location": "L1", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_services_api", + "target": "src_services_api_getaccesstoken", + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/services/api.ts", + "source_location": "L7", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_services_api", + "target": "src_services_api_getrefreshtoken", + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/services/api.ts", + "source_location": "L8", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_services_api", + "target": "src_services_api_settokens", + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/services/api.ts", + "source_location": "L9", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_services_api", + "target": "src_services_api_cleartokens", + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/services/api.ts", + "source_location": "L13", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_services_api", + "target": "src_services_api_getcustomertoken", + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/services/api.ts", + "source_location": "L18", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_services_api", + "target": "src_services_api_getcustomersessionid", + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/services/api.ts", + "source_location": "L19", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_services_api", + "target": "src_services_api_setcustomersession", + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/services/api.ts", + "source_location": "L20", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_services_api", + "target": "src_services_api_clearcustomersession", + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/services/api.ts", + "source_location": "L26", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_services_api", + "target": "src_services_api_getbackendmenuid", + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/services/api.ts", + "source_location": "L34", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_services_api", + "target": "src_services_api_getfrontendmenuitem", + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/services/api.ts", + "source_location": "L39", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_services_api", + "target": "src_services_api_isdemomode", + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/services/api.ts", + "source_location": "L45", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_services_api", + "target": "src_services_api_setdemomodechangecallback", + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/services/api.ts", + "source_location": "L48", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_services_api", + "target": "src_services_api_triggerdemomode", + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/services/api.ts", + "source_location": "L52", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_services_api", + "target": "src_services_api_mockdb", + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/services/api.ts", + "source_location": "L62", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_services_api", + "target": "src_services_api_apirequest", + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/services/api.ts", + "source_location": "L107", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_services_api", + "target": "src_services_api_handlemockrequest", + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/services/api.ts", + "source_location": "L159", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_services_api", + "target": "src_services_api_wslisteners", + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/services/api.ts", + "source_location": "L540", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_services_api", + "target": "src_services_api_subscribetowsevents", + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/services/api.ts", + "source_location": "L541", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_services_api", + "target": "src_services_api_notifywslisteners", + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/services/api.ts", + "source_location": "L548", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_services_api", + "target": "src_services_api_restrowebsocket", + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/services/api.ts", + "source_location": "L558", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_services_api_restrowebsocket", + "target": "src_services_api_restrowebsocket_constructor", + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "src/services/api.ts", + "source_location": "L564", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_services_api_restrowebsocket", + "target": "src_services_api_restrowebsocket_connect", + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "src/services/api.ts", + "source_location": "L574", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_services_api_restrowebsocket", + "target": "src_services_api_restrowebsocket_close", + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "src/services/api.ts", + "source_location": "L608", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_services_api", + "target": "src_services_api_api", + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/services/api.ts", + "source_location": "L619", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_services_api_apirequest", + "target": "src_services_api_getaccesstoken", + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/services/api.ts", + "source_location": "L112", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_services_api_apirequest", + "target": "src_services_api_getcustomertoken", + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/services/api.ts", + "source_location": "L118", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_services_api_apirequest", + "target": "src_services_api_triggerdemomode", + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/services/api.ts", + "source_location": "L130", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_services_api_apirequest", + "target": "src_services_api_cleartokens", + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/services/api.ts", + "source_location": "L134", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_services_api_apirequest", + "target": "src_services_api_handlemockrequest", + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/services/api.ts", + "source_location": "L154", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_services_api_handlemockrequest", + "target": "src_services_api_getcustomersessionid", + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/services/api.ts", + "source_location": "L221", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_services_api_handlemockrequest", + "target": "src_services_api_getfrontendmenuitem", + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/services/api.ts", + "source_location": "L225", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_services_api_handlemockrequest", + "target": "src_services_api_notifywslisteners", + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/services/api.ts", + "source_location": "L349", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_services_api_restrowebsocket_constructor", + "target": "src_services_api_getaccesstoken", + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/services/api.ts", + "source_location": "L566", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_services_api_restrowebsocket_constructor", + "target": "src_services_api_getcustomertoken", + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/services/api.ts", + "source_location": "L569", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_services_api_restrowebsocket_connect", + "target": "src_services_api_notifywslisteners", + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/services/api.ts", + "source_location": "L586", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_theme_theme", + "target": "ref_mui_material_styles", + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/theme/theme.ts", + "source_location": "L1", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_theme_theme", + "target": "src_theme_theme_theme", + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/theme/theme.ts", + "source_location": "L3", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_types_index", + "target": "src_types_index_orderstatus", + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/types/index.ts", + "source_location": "L1", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_types_index", + "target": "src_types_index_ordertype", + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/types/index.ts", + "source_location": "L2", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_types_index", + "target": "src_types_index_orderitem", + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/types/index.ts", + "source_location": "L4", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_types_index", + "target": "src_types_index_kdsorder", + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/types/index.ts", + "source_location": "L14", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_types_index", + "target": "src_types_index_analyticsmetric", + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/types/index.ts", + "source_location": "L29", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_types_index", + "target": "src_types_index_dishperformance", + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/types/index.ts", + "source_location": "L37", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_types_index", + "target": "src_types_index_voicecommandsuggestion", + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/types/index.ts", + "source_location": "L47", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "tsconfig_app", + "target": "tsconfig_app_compileroptions", + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tsconfig.app.json", + "source_location": "L2", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "tsconfig_app_compileroptions", + "target": "tsconfig_app_compileroptions_tsbuildinfofile", + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tsconfig.app.json", + "source_location": "L3", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "tsconfig_app_compileroptions", + "target": "tsconfig_app_compileroptions_target", + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tsconfig.app.json", + "source_location": "L4", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "tsconfig_app_compileroptions", + "target": "tsconfig_app_compileroptions_lib", + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tsconfig.app.json", + "source_location": "L5", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "tsconfig_app_compileroptions_lib", + "target": "tsconfig_app_json_ref_es2023", + "relation": "extends", + "confidence": "EXTRACTED", + "source_file": "tsconfig.app.json", + "source_location": "L5", + "weight": 1.0, + "context": "import", + "_origin": "ast" + }, + { + "source": "tsconfig_app_compileroptions_lib", + "target": "ref_dom", + "relation": "extends", + "confidence": "EXTRACTED", + "source_file": "tsconfig.app.json", + "source_location": "L5", + "weight": 1.0, + "context": "import", + "_origin": "ast" + }, + { + "source": "tsconfig_app_compileroptions", + "target": "tsconfig_app_compileroptions_module", + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tsconfig.app.json", + "source_location": "L6", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "tsconfig_app_compileroptions", + "target": "tsconfig_app_compileroptions_types", + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tsconfig.app.json", + "source_location": "L7", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "tsconfig_app_compileroptions_types", + "target": "ref_vite_client", + "relation": "extends", + "confidence": "EXTRACTED", + "source_file": "tsconfig.app.json", + "source_location": "L7", + "weight": 1.0, + "context": "import", + "_origin": "ast" + }, + { + "source": "tsconfig_app_compileroptions", + "target": "tsconfig_app_compileroptions_allowarbitraryextensions", + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tsconfig.app.json", + "source_location": "L8", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "tsconfig_app_compileroptions", + "target": "tsconfig_app_compileroptions_skiplibcheck", + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tsconfig.app.json", + "source_location": "L9", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "tsconfig_app_compileroptions", + "target": "tsconfig_app_compileroptions_moduleresolution", + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tsconfig.app.json", + "source_location": "L12", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "tsconfig_app_compileroptions", + "target": "tsconfig_app_compileroptions_allowimportingtsextensions", + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tsconfig.app.json", + "source_location": "L13", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "tsconfig_app_compileroptions", + "target": "tsconfig_app_compileroptions_verbatimmodulesyntax", + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tsconfig.app.json", + "source_location": "L14", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "tsconfig_app_compileroptions", + "target": "tsconfig_app_compileroptions_moduledetection", + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tsconfig.app.json", + "source_location": "L15", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "tsconfig_app_compileroptions", + "target": "tsconfig_app_compileroptions_noemit", + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tsconfig.app.json", + "source_location": "L16", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "tsconfig_app_compileroptions", + "target": "tsconfig_app_compileroptions_jsx", + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tsconfig.app.json", + "source_location": "L17", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "tsconfig_app_compileroptions", + "target": "tsconfig_app_compileroptions_nounusedlocals", + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tsconfig.app.json", + "source_location": "L20", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "tsconfig_app_compileroptions", + "target": "tsconfig_app_compileroptions_nounusedparameters", + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tsconfig.app.json", + "source_location": "L21", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "tsconfig_app_compileroptions", + "target": "tsconfig_app_compileroptions_erasablesyntaxonly", + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tsconfig.app.json", + "source_location": "L22", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "tsconfig_app_compileroptions", + "target": "tsconfig_app_compileroptions_nofallthroughcasesinswitch", + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tsconfig.app.json", + "source_location": "L23", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "tsconfig_app", + "target": "tsconfig_app_include", + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tsconfig.app.json", + "source_location": "L25", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "tsconfig_app_include", + "target": "ref_src", + "relation": "extends", + "confidence": "EXTRACTED", + "source_file": "tsconfig.app.json", + "source_location": "L25", + "weight": 1.0, + "context": "import", + "_origin": "ast" + }, + { + "source": "tsconfig", + "target": "tsconfig_files", + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tsconfig.json", + "source_location": "L2", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "tsconfig", + "target": "tsconfig_references", + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tsconfig.json", + "source_location": "L3", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "tsconfig_node", + "target": "tsconfig_node_compileroptions", + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tsconfig.node.json", + "source_location": "L2", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "tsconfig_node_compileroptions", + "target": "tsconfig_node_compileroptions_tsbuildinfofile", + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tsconfig.node.json", + "source_location": "L3", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "tsconfig_node_compileroptions", + "target": "tsconfig_node_compileroptions_target", + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tsconfig.node.json", + "source_location": "L4", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "tsconfig_node_compileroptions", + "target": "tsconfig_node_compileroptions_lib", + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tsconfig.node.json", + "source_location": "L5", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "tsconfig_node_compileroptions_lib", + "target": "tsconfig_node_json_ref_es2023", + "relation": "extends", + "confidence": "EXTRACTED", + "source_file": "tsconfig.node.json", + "source_location": "L5", + "weight": 1.0, + "context": "import", + "_origin": "ast" + }, + { + "source": "tsconfig_node_compileroptions", + "target": "tsconfig_node_compileroptions_types", + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tsconfig.node.json", + "source_location": "L6", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "tsconfig_node_compileroptions_types", + "target": "ref_node", + "relation": "extends", + "confidence": "EXTRACTED", + "source_file": "tsconfig.node.json", + "source_location": "L6", + "weight": 1.0, + "context": "import", + "_origin": "ast" + }, + { + "source": "tsconfig_node_compileroptions", + "target": "tsconfig_node_compileroptions_skiplibcheck", + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tsconfig.node.json", + "source_location": "L7", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "tsconfig_node_compileroptions", + "target": "tsconfig_node_compileroptions_module", + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tsconfig.node.json", + "source_location": "L10", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "tsconfig_node_compileroptions", + "target": "tsconfig_node_compileroptions_allowimportingtsextensions", + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tsconfig.node.json", + "source_location": "L11", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "tsconfig_node_compileroptions", + "target": "tsconfig_node_compileroptions_verbatimmodulesyntax", + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tsconfig.node.json", + "source_location": "L12", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "tsconfig_node_compileroptions", + "target": "tsconfig_node_compileroptions_moduledetection", + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tsconfig.node.json", + "source_location": "L13", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "tsconfig_node_compileroptions", + "target": "tsconfig_node_compileroptions_noemit", + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tsconfig.node.json", + "source_location": "L14", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "tsconfig_node_compileroptions", + "target": "tsconfig_node_compileroptions_nounusedlocals", + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tsconfig.node.json", + "source_location": "L17", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "tsconfig_node_compileroptions", + "target": "tsconfig_node_compileroptions_nounusedparameters", + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tsconfig.node.json", + "source_location": "L18", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "tsconfig_node_compileroptions", + "target": "tsconfig_node_compileroptions_erasablesyntaxonly", + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tsconfig.node.json", + "source_location": "L19", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "tsconfig_node_compileroptions", + "target": "tsconfig_node_compileroptions_nofallthroughcasesinswitch", + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tsconfig.node.json", + "source_location": "L20", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "tsconfig_node", + "target": "tsconfig_node_include", + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tsconfig.node.json", + "source_location": "L22", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "tsconfig_node_include", + "target": "ref_vite_config_ts", + "relation": "extends", + "confidence": "EXTRACTED", + "source_file": "tsconfig.node.json", + "source_location": "L22", + "weight": 1.0, + "context": "import", + "_origin": "ast" + }, + { + "source": "vite_config", + "target": "ref_vite", + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "vite.config.ts", + "source_location": "L1", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "vite_config", + "target": "ref_vitejs_plugin_react", + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "vite.config.ts", + "source_location": "L2", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_main", + "target": "src_app_app", + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/main.tsx", + "source_location": "L4", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_components_admin_admindesktopshell_admindesktopshellprops", + "target": "src_types_index_kdsorder", + "relation": "references", + "context": "field", + "confidence": "EXTRACTED", + "source_file": "src/components/admin/AdminDesktopShell.tsx", + "source_location": "L47", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_components_admin_admindesktopshell_admindesktopshellprops", + "target": "src_types_index_orderstatus", + "relation": "references", + "context": "field", + "confidence": "EXTRACTED", + "source_file": "src/components/admin/AdminDesktopShell.tsx", + "source_location": "L48", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_components_common_statusbadge_statusbadgeprops", + "target": "src_types_index_orderstatus", + "relation": "references", + "context": "field", + "confidence": "EXTRACTED", + "source_file": "src/components/common/StatusBadge.tsx", + "source_location": "L6", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_components_common_statusbadge_statusbadgeprops", + "target": "src_types_index_ordertype", + "relation": "references", + "context": "field", + "confidence": "EXTRACTED", + "source_file": "src/components/common/StatusBadge.tsx", + "source_location": "L7", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_components_customer_customizationmodal_customizationmodalprops", + "target": "src_data_menudata_menuitem", + "relation": "references", + "context": "field", + "confidence": "EXTRACTED", + "source_file": "src/components/customer/CustomizationModal.tsx", + "source_location": "L22", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_components_customer_menubrowseview_menubrowseviewprops", + "target": "src_data_menudata_menuitem", + "relation": "references", + "context": "field", + "confidence": "EXTRACTED", + "source_file": "src/components/customer/MenuBrowseView.tsx", + "source_location": "L34", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_components_customer_voiceassistantmodal_detecteditem", + "target": "src_data_menudata_menuitem", + "relation": "references", + "context": "field", + "confidence": "EXTRACTED", + "source_file": "src/components/customer/VoiceAssistantModal.tsx", + "source_location": "L29", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_components_kds_kdskanban_kdskanbanprops", + "target": "src_types_index_kdsorder", + "relation": "references", + "context": "field", + "confidence": "EXTRACTED", + "source_file": "src/components/kds/KDSKanban.tsx", + "source_location": "L20", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_components_kds_kdskanban_kdskanbanprops", + "target": "src_types_index_orderstatus", + "relation": "references", + "context": "field", + "confidence": "EXTRACTED", + "source_file": "src/components/kds/KDSKanban.tsx", + "source_location": "L21", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_components_kds_kdsticketcard_kdsticketcardprops", + "target": "src_types_index_kdsorder", + "relation": "references", + "context": "field", + "confidence": "EXTRACTED", + "source_file": "src/components/kds/KDSTicketCard.tsx", + "source_location": "L24", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_components_kds_kdsticketcard_kdsticketcardprops", + "target": "src_types_index_orderstatus", + "relation": "references", + "context": "field", + "confidence": "EXTRACTED", + "source_file": "src/components/kds/KDSTicketCard.tsx", + "source_location": "L25", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_app_app", + "target": "src_services_api_setdemomodechangecallback", + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "src/App.tsx", + "source_location": "L51", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_app_app", + "target": "src_services_api_subscribetowsevents", + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "src/App.tsx", + "source_location": "L106", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_app_app", + "target": "src_services_api_getbackendmenuid", + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "src/App.tsx", + "source_location": "L149", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_components_customer_orderstatusview_orderstatusview", + "target": "src_services_api_subscribetowsevents", + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "src/components/customer/OrderStatusView.tsx", + "source_location": "L92", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_components_customer_voiceassistantmodal_voiceassistantmodal", + "target": "src_hooks_usespeechrecognition_usespeechrecognition", + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "src/components/customer/VoiceAssistantModal.tsx", + "source_location": "L96", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_components_customer_voiceassistantmodal_voiceassistantmodal", + "target": "src_hooks_usespeechsynthesis_usespeechsynthesis", + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "src/components/customer/VoiceAssistantModal.tsx", + "source_location": "L98", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_app_app", + "target": "src_services_api_restrowebsocket_connect", + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "src/App.tsx", + "source_location": "L103", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_app_app", + "target": "src_services_api_restrowebsocket_close", + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "src/App.tsx", + "source_location": "L113", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_components_customer_cartreviewview_cartreviewview", + "target": "src_data_menudata_menu_items", + "relation": "references", + "context": "call", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "src/components/customer/CartReviewView.tsx", + "source_location": "L42", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_components_customer_menubrowseview_menubrowseview", + "target": "src_data_menudata_menu_items", + "relation": "references", + "context": "call", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "src/components/customer/MenuBrowseView.tsx", + "source_location": "L67", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_components_customer_orderstatusview_orderstatusview", + "target": "src_services_api_restrowebsocket_connect", + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "src/components/customer/OrderStatusView.tsx", + "source_location": "L90", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_components_customer_orderstatusview_orderstatusview", + "target": "src_services_api_restrowebsocket_close", + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "src/components/customer/OrderStatusView.tsx", + "source_location": "L99", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_services_api_getfrontendmenuitem", + "target": "src_data_menudata_menu_items", + "relation": "references", + "context": "call", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "src/services/api.ts", + "source_location": "L41", + "weight": 1.0, + "_origin": "ast" + } + ], + "input_tokens": 0, + "output_tokens": 0 +} \ No newline at end of file diff --git a/graphify-out/.graphify_detect.json b/graphify-out/.graphify_detect.json new file mode 100644 index 0000000..66d6904 --- /dev/null +++ b/graphify-out/.graphify_detect.json @@ -0,0 +1,80 @@ +{ + "files": { + "code": [ + "C:\\Users\\hp\\Desktop\\projects\\restroAI\\.oxlintrc.json", + "C:\\Users\\hp\\Desktop\\projects\\restroAI\\package.json", + "C:\\Users\\hp\\Desktop\\projects\\restroAI\\src\\App.tsx", + "C:\\Users\\hp\\Desktop\\projects\\restroAI\\src\\components\\admin\\AdminDesktopShell.tsx", + "C:\\Users\\hp\\Desktop\\projects\\restroAI\\src\\components\\admin\\BillingManagerView.tsx", + "C:\\Users\\hp\\Desktop\\projects\\restroAI\\src\\components\\admin\\FeedbackInboxView.tsx", + "C:\\Users\\hp\\Desktop\\projects\\restroAI\\src\\components\\admin\\InventoryView.tsx", + "C:\\Users\\hp\\Desktop\\projects\\restroAI\\src\\components\\admin\\ReservationsView.tsx", + "C:\\Users\\hp\\Desktop\\projects\\restroAI\\src\\components\\admin\\StaffLoginModal.tsx", + "C:\\Users\\hp\\Desktop\\projects\\restroAI\\src\\components\\admin\\StaffShiftsView.tsx", + "C:\\Users\\hp\\Desktop\\projects\\restroAI\\src\\components\\admin\\SuppliersView.tsx", + "C:\\Users\\hp\\Desktop\\projects\\restroAI\\src\\components\\admin\\TableManagementView.tsx", + "C:\\Users\\hp\\Desktop\\projects\\restroAI\\src\\components\\analytics\\AnalyticsDashboard.tsx", + "C:\\Users\\hp\\Desktop\\projects\\restroAI\\src\\components\\common\\Navigation.tsx", + "C:\\Users\\hp\\Desktop\\projects\\restroAI\\src\\components\\common\\StatusBadge.tsx", + "C:\\Users\\hp\\Desktop\\projects\\restroAI\\src\\components\\customer\\BillPaymentView.tsx", + "C:\\Users\\hp\\Desktop\\projects\\restroAI\\src\\components\\customer\\CartReviewView.tsx", + "C:\\Users\\hp\\Desktop\\projects\\restroAI\\src\\components\\customer\\CustomizationModal.tsx", + "C:\\Users\\hp\\Desktop\\projects\\restroAI\\src\\components\\customer\\MenuBrowseView.tsx", + "C:\\Users\\hp\\Desktop\\projects\\restroAI\\src\\components\\customer\\OrderStatusView.tsx", + "C:\\Users\\hp\\Desktop\\projects\\restroAI\\src\\components\\customer\\TableLandingView.tsx", + "C:\\Users\\hp\\Desktop\\projects\\restroAI\\src\\components\\customer\\VoiceAssistantModal.tsx", + "C:\\Users\\hp\\Desktop\\projects\\restroAI\\src\\components\\kds\\KDSKanban.tsx", + "C:\\Users\\hp\\Desktop\\projects\\restroAI\\src\\components\\kds\\KDSTicketCard.tsx", + "C:\\Users\\hp\\Desktop\\projects\\restroAI\\src\\components\\table\\TableLandingView.tsx", + "C:\\Users\\hp\\Desktop\\projects\\restroAI\\src\\components\\voice\\VoiceOrderingView.tsx", + "C:\\Users\\hp\\Desktop\\projects\\restroAI\\src\\data\\menuData.ts", + "C:\\Users\\hp\\Desktop\\projects\\restroAI\\src\\hooks\\useSpeechRecognition.ts", + "C:\\Users\\hp\\Desktop\\projects\\restroAI\\src\\hooks\\useSpeechSynthesis.ts", + "C:\\Users\\hp\\Desktop\\projects\\restroAI\\src\\main.tsx", + "C:\\Users\\hp\\Desktop\\projects\\restroAI\\src\\services\\api.ts", + "C:\\Users\\hp\\Desktop\\projects\\restroAI\\src\\theme\\theme.ts", + "C:\\Users\\hp\\Desktop\\projects\\restroAI\\src\\types\\index.ts", + "C:\\Users\\hp\\Desktop\\projects\\restroAI\\tsconfig.app.json", + "C:\\Users\\hp\\Desktop\\projects\\restroAI\\tsconfig.json", + "C:\\Users\\hp\\Desktop\\projects\\restroAI\\tsconfig.node.json", + "C:\\Users\\hp\\Desktop\\projects\\restroAI\\vite.config.ts" + ], + "document": [ + "C:\\Users\\hp\\Desktop\\projects\\restroAI\\.agents\\rules\\graphify.md", + "C:\\Users\\hp\\Desktop\\projects\\restroAI\\.agents\\workflows\\graphify.md", + "C:\\Users\\hp\\Desktop\\projects\\restroAI\\README.md", + "C:\\Users\\hp\\Desktop\\projects\\restroAI\\index.html" + ], + "paper": [], + "image": [ + "C:\\Users\\hp\\Desktop\\projects\\restroAI\\public\\favicon.svg", + "C:\\Users\\hp\\Desktop\\projects\\restroAI\\public\\icons.svg", + "C:\\Users\\hp\\Desktop\\projects\\restroAI\\src\\assets\\hero.png", + "C:\\Users\\hp\\Desktop\\projects\\restroAI\\src\\assets\\react.svg", + "C:\\Users\\hp\\Desktop\\projects\\restroAI\\src\\assets\\vite.svg" + ], + "video": [] + }, + "total_files": 46, + "total_words": 29773, + "needs_graph": false, + "warning": "Corpus is ~29,773 words - fits in a single context window. You may not need a graph.", + "skipped_sensitive": [ + "C:\\Users\\hp\\Desktop\\projects\\restroAI\\.env" + ], + "unclassified": [ + "C:\\Users\\hp\\Desktop\\projects\\restroAI\\.env.example", + "C:\\Users\\hp\\Desktop\\projects\\restroAI\\.gitignore", + "C:\\Users\\hp\\Desktop\\projects\\restroAI\\src\\App.css", + "C:\\Users\\hp\\Desktop\\projects\\restroAI\\src\\index.css" + ], + "walk_errors": [], + "ignored": [], + "pruned_noise_dirs": [ + "C:\\Users\\hp\\Desktop\\projects\\restroAI\\dist\\", + "C:\\Users\\hp\\Desktop\\projects\\restroAI\\graphify-out\\", + "C:\\Users\\hp\\Desktop\\projects\\restroAI\\node_modules\\" + ], + "graphifyignore_patterns": 20, + "scan_root": "C:\\Users\\hp\\Desktop\\projects\\restroAI" +} \ No newline at end of file diff --git a/graphify-out/.graphify_extract.json b/graphify-out/.graphify_extract.json new file mode 100644 index 0000000..d337599 --- /dev/null +++ b/graphify-out/.graphify_extract.json @@ -0,0 +1,7746 @@ +{ + "nodes": [ + { + "id": "oxlintrc", + "label": ".oxlintrc.json", + "file_type": "code", + "source_file": ".oxlintrc.json", + "source_location": "L1", + "_origin": "ast" + }, + { + "id": "oxlintrc_schema", + "label": "$schema", + "file_type": "code", + "source_file": ".oxlintrc.json", + "source_location": "L2", + "_origin": "ast" + }, + { + "id": "oxlintrc_plugins", + "label": "plugins", + "file_type": "code", + "source_file": ".oxlintrc.json", + "source_location": "L3", + "_origin": "ast" + }, + { + "id": "ref_react", + "label": "react", + "file_type": "concept", + "source_file": ".oxlintrc.json", + "source_location": "L3", + "_origin": "ast" + }, + { + "id": "ref_typescript", + "label": "typescript", + "file_type": "concept", + "source_file": ".oxlintrc.json", + "source_location": "L3", + "_origin": "ast" + }, + { + "id": "ref_oxc", + "label": "oxc", + "file_type": "concept", + "source_file": ".oxlintrc.json", + "source_location": "L3", + "_origin": "ast" + }, + { + "id": "oxlintrc_rules", + "label": "rules", + "file_type": "code", + "source_file": ".oxlintrc.json", + "source_location": "L4", + "_origin": "ast" + }, + { + "id": "oxlintrc_rules_react_rules_of_hooks", + "label": "react/rules-of-hooks", + "file_type": "code", + "source_file": ".oxlintrc.json", + "source_location": "L5", + "_origin": "ast" + }, + { + "id": "oxlintrc_rules_react_only_export_components", + "label": "react/only-export-components", + "file_type": "code", + "source_file": ".oxlintrc.json", + "source_location": "L6", + "_origin": "ast" + }, + { + "id": "ref_warn", + "label": "warn", + "file_type": "concept", + "source_file": ".oxlintrc.json", + "source_location": "L6", + "_origin": "ast" + }, + { + "id": "package", + "label": "package.json", + "file_type": "code", + "source_file": "package.json", + "source_location": "L1", + "_origin": "ast" + }, + { + "id": "package_name", + "label": "name", + "file_type": "code", + "source_file": "package.json", + "source_location": "L2", + "_origin": "ast" + }, + { + "id": "package_private", + "label": "private", + "file_type": "code", + "source_file": "package.json", + "source_location": "L3", + "_origin": "ast" + }, + { + "id": "package_version", + "label": "version", + "file_type": "code", + "source_file": "package.json", + "source_location": "L4", + "_origin": "ast" + }, + { + "id": "package_type", + "label": "type", + "file_type": "code", + "source_file": "package.json", + "source_location": "L5", + "_origin": "ast" + }, + { + "id": "package_packagemanager", + "label": "packageManager", + "file_type": "code", + "source_file": "package.json", + "source_location": "L6", + "_origin": "ast" + }, + { + "id": "package_scripts", + "label": "scripts", + "file_type": "code", + "source_file": "package.json", + "source_location": "L7", + "_origin": "ast" + }, + { + "id": "package_scripts_dev", + "label": "dev", + "file_type": "code", + "source_file": "package.json", + "source_location": "L8", + "_origin": "ast" + }, + { + "id": "package_scripts_build", + "label": "build", + "file_type": "code", + "source_file": "package.json", + "source_location": "L9", + "_origin": "ast" + }, + { + "id": "package_scripts_lint", + "label": "lint", + "file_type": "code", + "source_file": "package.json", + "source_location": "L10", + "_origin": "ast" + }, + { + "id": "package_scripts_preview", + "label": "preview", + "file_type": "code", + "source_file": "package.json", + "source_location": "L11", + "_origin": "ast" + }, + { + "id": "package_dependencies", + "label": "dependencies", + "file_type": "code", + "source_file": "package.json", + "source_location": "L13", + "_origin": "ast" + }, + { + "id": "package_dependencies_emotion_react", + "label": "@emotion/react", + "file_type": "code", + "source_file": "package.json", + "source_location": "L14", + "_origin": "ast" + }, + { + "id": "emotion_react", + "label": "@emotion/react", + "file_type": "concept", + "source_file": "package.json", + "source_location": "L14", + "_origin": "ast" + }, + { + "id": "package_dependencies_emotion_styled", + "label": "@emotion/styled", + "file_type": "code", + "source_file": "package.json", + "source_location": "L15", + "_origin": "ast" + }, + { + "id": "emotion_styled", + "label": "@emotion/styled", + "file_type": "concept", + "source_file": "package.json", + "source_location": "L15", + "_origin": "ast" + }, + { + "id": "package_dependencies_mui_icons_material", + "label": "@mui/icons-material", + "file_type": "code", + "source_file": "package.json", + "source_location": "L16", + "_origin": "ast" + }, + { + "id": "mui_icons_material", + "label": "@mui/icons-material", + "file_type": "concept", + "source_file": "package.json", + "source_location": "L16", + "_origin": "ast" + }, + { + "id": "package_dependencies_mui_material", + "label": "@mui/material", + "file_type": "code", + "source_file": "package.json", + "source_location": "L17", + "_origin": "ast" + }, + { + "id": "mui_material", + "label": "@mui/material", + "file_type": "concept", + "source_file": "package.json", + "source_location": "L17", + "_origin": "ast" + }, + { + "id": "package_dependencies_react", + "label": "react", + "file_type": "code", + "source_file": "package.json", + "source_location": "L18", + "_origin": "ast" + }, + { + "id": "react", + "label": "react", + "file_type": "concept", + "source_file": "package.json", + "source_location": "L18", + "_origin": "ast" + }, + { + "id": "package_dependencies_react_dom", + "label": "react-dom", + "file_type": "code", + "source_file": "package.json", + "source_location": "L19", + "_origin": "ast" + }, + { + "id": "react_dom", + "label": "react-dom", + "file_type": "concept", + "source_file": "package.json", + "source_location": "L19", + "_origin": "ast" + }, + { + "id": "package_devdependencies", + "label": "devDependencies", + "file_type": "code", + "source_file": "package.json", + "source_location": "L21", + "_origin": "ast" + }, + { + "id": "package_devdependencies_types_node", + "label": "@types/node", + "file_type": "code", + "source_file": "package.json", + "source_location": "L22", + "_origin": "ast" + }, + { + "id": "types_node", + "label": "@types/node", + "file_type": "concept", + "source_file": "package.json", + "source_location": "L22", + "_origin": "ast" + }, + { + "id": "package_devdependencies_types_react", + "label": "@types/react", + "file_type": "code", + "source_file": "package.json", + "source_location": "L23", + "_origin": "ast" + }, + { + "id": "types_react", + "label": "@types/react", + "file_type": "concept", + "source_file": "package.json", + "source_location": "L23", + "_origin": "ast" + }, + { + "id": "package_devdependencies_types_react_dom", + "label": "@types/react-dom", + "file_type": "code", + "source_file": "package.json", + "source_location": "L24", + "_origin": "ast" + }, + { + "id": "types_react_dom", + "label": "@types/react-dom", + "file_type": "concept", + "source_file": "package.json", + "source_location": "L24", + "_origin": "ast" + }, + { + "id": "package_devdependencies_vitejs_plugin_react", + "label": "@vitejs/plugin-react", + "file_type": "code", + "source_file": "package.json", + "source_location": "L25", + "_origin": "ast" + }, + { + "id": "vitejs_plugin_react", + "label": "@vitejs/plugin-react", + "file_type": "concept", + "source_file": "package.json", + "source_location": "L25", + "_origin": "ast" + }, + { + "id": "package_devdependencies_oxlint", + "label": "oxlint", + "file_type": "code", + "source_file": "package.json", + "source_location": "L26", + "_origin": "ast" + }, + { + "id": "oxlint", + "label": "oxlint", + "file_type": "concept", + "source_file": "package.json", + "source_location": "L26", + "_origin": "ast" + }, + { + "id": "package_devdependencies_typescript", + "label": "typescript", + "file_type": "code", + "source_file": "package.json", + "source_location": "L27", + "_origin": "ast" + }, + { + "id": "typescript", + "label": "typescript", + "file_type": "concept", + "source_file": "package.json", + "source_location": "L27", + "_origin": "ast" + }, + { + "id": "package_devdependencies_vite", + "label": "vite", + "file_type": "code", + "source_file": "package.json", + "source_location": "L28", + "_origin": "ast" + }, + { + "id": "vite", + "label": "vite", + "file_type": "concept", + "source_file": "package.json", + "source_location": "L28", + "_origin": "ast" + }, + { + "id": "src_app", + "label": "App.tsx", + "file_type": "code", + "source_file": "src/App.tsx", + "source_location": "L1", + "_origin": "ast" + }, + { + "id": "src_app_customerview", + "label": "CustomerView", + "file_type": "code", + "source_file": "src/App.tsx", + "source_location": "L17", + "_callable": true, + "_callable_class": true, + "_origin": "ast" + }, + { + "id": "src_app_gettablenumfromurl", + "label": "getTableNumFromUrl()", + "file_type": "code", + "source_file": "src/App.tsx", + "source_location": "L19", + "_callable": true, + "_origin": "ast" + }, + { + "id": "src_app_app", + "label": "App()", + "file_type": "code", + "source_file": "src/App.tsx", + "source_location": "L36", + "_callable": true, + "_origin": "ast" + }, + { + "id": "src_components_admin_admindesktopshell", + "label": "AdminDesktopShell.tsx", + "file_type": "code", + "source_file": "src/components/admin/AdminDesktopShell.tsx", + "source_location": "L1", + "_origin": "ast" + }, + { + "id": "src_components_admin_admindesktopshell_admindesktopshellprops", + "label": "AdminDesktopShellProps", + "file_type": "code", + "source_file": "src/components/admin/AdminDesktopShell.tsx", + "source_location": "L45", + "_callable": true, + "_callable_class": true, + "_origin": "ast" + }, + { + "id": "src_components_admin_admindesktopshell_tabtype", + "label": "TabType", + "file_type": "code", + "source_file": "src/components/admin/AdminDesktopShell.tsx", + "source_location": "L55", + "_callable": true, + "_callable_class": true, + "_origin": "ast" + }, + { + "id": "src_components_admin_admindesktopshell_admindesktopshell", + "label": "AdminDesktopShell()", + "file_type": "code", + "source_file": "src/components/admin/AdminDesktopShell.tsx", + "source_location": "L67", + "_callable": true, + "_origin": "ast" + }, + { + "id": "src_components_admin_billingmanagerview", + "label": "BillingManagerView.tsx", + "file_type": "code", + "source_file": "src/components/admin/BillingManagerView.tsx", + "source_location": "L1", + "_origin": "ast" + }, + { + "id": "src_components_admin_billingmanagerview_billingmanagerview", + "label": "BillingManagerView()", + "file_type": "code", + "source_file": "src/components/admin/BillingManagerView.tsx", + "source_location": "L34", + "_callable": true, + "_origin": "ast" + }, + { + "id": "src_components_admin_feedbackinboxview", + "label": "FeedbackInboxView.tsx", + "file_type": "code", + "source_file": "src/components/admin/FeedbackInboxView.tsx", + "source_location": "L1", + "_origin": "ast" + }, + { + "id": "src_components_admin_feedbackinboxview_feedbackinboxview", + "label": "FeedbackInboxView()", + "file_type": "code", + "source_file": "src/components/admin/FeedbackInboxView.tsx", + "source_location": "L24", + "_callable": true, + "_origin": "ast" + }, + { + "id": "src_components_admin_inventoryview", + "label": "InventoryView.tsx", + "file_type": "code", + "source_file": "src/components/admin/InventoryView.tsx", + "source_location": "L1", + "_origin": "ast" + }, + { + "id": "src_components_admin_inventoryview_inventoryview", + "label": "InventoryView()", + "file_type": "code", + "source_file": "src/components/admin/InventoryView.tsx", + "source_location": "L41", + "_callable": true, + "_origin": "ast" + }, + { + "id": "src_components_admin_reservationsview", + "label": "ReservationsView.tsx", + "file_type": "code", + "source_file": "src/components/admin/ReservationsView.tsx", + "source_location": "L1", + "_origin": "ast" + }, + { + "id": "src_components_admin_reservationsview_reservationsview", + "label": "ReservationsView()", + "file_type": "code", + "source_file": "src/components/admin/ReservationsView.tsx", + "source_location": "L33", + "_callable": true, + "_origin": "ast" + }, + { + "id": "src_components_admin_staffloginmodal", + "label": "StaffLoginModal.tsx", + "file_type": "code", + "source_file": "src/components/admin/StaffLoginModal.tsx", + "source_location": "L1", + "_origin": "ast" + }, + { + "id": "src_components_admin_staffloginmodal_staffloginmodalprops", + "label": "StaffLoginModalProps", + "file_type": "code", + "source_file": "src/components/admin/StaffLoginModal.tsx", + "source_location": "L19", + "_callable": true, + "_callable_class": true, + "_origin": "ast" + }, + { + "id": "src_components_admin_staffloginmodal_staffloginmodal", + "label": "StaffLoginModal()", + "file_type": "code", + "source_file": "src/components/admin/StaffLoginModal.tsx", + "source_location": "L25", + "_callable": true, + "_origin": "ast" + }, + { + "id": "src_components_admin_staffshiftsview", + "label": "StaffShiftsView.tsx", + "file_type": "code", + "source_file": "src/components/admin/StaffShiftsView.tsx", + "source_location": "L1", + "_origin": "ast" + }, + { + "id": "src_components_admin_staffshiftsview_staffshiftsview", + "label": "StaffShiftsView()", + "file_type": "code", + "source_file": "src/components/admin/StaffShiftsView.tsx", + "source_location": "L33", + "_callable": true, + "_origin": "ast" + }, + { + "id": "src_components_admin_suppliersview", + "label": "SuppliersView.tsx", + "file_type": "code", + "source_file": "src/components/admin/SuppliersView.tsx", + "source_location": "L1", + "_origin": "ast" + }, + { + "id": "src_components_admin_suppliersview_suppliersview", + "label": "SuppliersView()", + "file_type": "code", + "source_file": "src/components/admin/SuppliersView.tsx", + "source_location": "L42", + "_callable": true, + "_origin": "ast" + }, + { + "id": "src_components_admin_tablemanagementview", + "label": "TableManagementView.tsx", + "file_type": "code", + "source_file": "src/components/admin/TableManagementView.tsx", + "source_location": "L1", + "_origin": "ast" + }, + { + "id": "src_components_admin_tablemanagementview_tablemanagementview", + "label": "TableManagementView()", + "file_type": "code", + "source_file": "src/components/admin/TableManagementView.tsx", + "source_location": "L31", + "_callable": true, + "_origin": "ast" + }, + { + "id": "src_components_analytics_analyticsdashboard", + "label": "AnalyticsDashboard.tsx", + "file_type": "code", + "source_file": "src/components/analytics/AnalyticsDashboard.tsx", + "source_location": "L1", + "_origin": "ast" + }, + { + "id": "src_components_analytics_analyticsdashboard_analyticsdashboard", + "label": "AnalyticsDashboard()", + "file_type": "code", + "source_file": "src/components/analytics/AnalyticsDashboard.tsx", + "source_location": "L31", + "_callable": true, + "_origin": "ast" + }, + { + "id": "src_components_common_navigation", + "label": "Navigation.tsx", + "file_type": "code", + "source_file": "src/components/common/Navigation.tsx", + "source_location": "L1", + "_origin": "ast" + }, + { + "id": "src_components_common_navigation_navigationprops", + "label": "NavigationProps", + "file_type": "code", + "source_file": "src/components/common/Navigation.tsx", + "source_location": "L27", + "_callable": true, + "_callable_class": true, + "_origin": "ast" + }, + { + "id": "src_components_common_navigation_navigation", + "label": "Navigation()", + "file_type": "code", + "source_file": "src/components/common/Navigation.tsx", + "source_location": "L35", + "_callable": true, + "_origin": "ast" + }, + { + "id": "src_components_common_statusbadge", + "label": "StatusBadge.tsx", + "file_type": "code", + "source_file": "src/components/common/StatusBadge.tsx", + "source_location": "L1", + "_origin": "ast" + }, + { + "id": "src_components_common_statusbadge_statusbadgeprops", + "label": "StatusBadgeProps", + "file_type": "code", + "source_file": "src/components/common/StatusBadge.tsx", + "source_location": "L5", + "_callable": true, + "_callable_class": true, + "_origin": "ast" + }, + { + "id": "src_components_common_statusbadge_statusbadge", + "label": "StatusBadge()", + "file_type": "code", + "source_file": "src/components/common/StatusBadge.tsx", + "source_location": "L12", + "_callable": true, + "_origin": "ast" + }, + { + "id": "src_components_customer_billpaymentview", + "label": "BillPaymentView.tsx", + "file_type": "code", + "source_file": "src/components/customer/BillPaymentView.tsx", + "source_location": "L1", + "_origin": "ast" + }, + { + "id": "src_components_customer_billpaymentview_billpaymentviewprops", + "label": "BillPaymentViewProps", + "file_type": "code", + "source_file": "src/components/customer/BillPaymentView.tsx", + "source_location": "L21", + "_callable": true, + "_callable_class": true, + "_origin": "ast" + }, + { + "id": "src_components_customer_billpaymentview_billpaymentview", + "label": "BillPaymentView()", + "file_type": "code", + "source_file": "src/components/customer/BillPaymentView.tsx", + "source_location": "L25", + "_callable": true, + "_origin": "ast" + }, + { + "id": "src_components_customer_cartreviewview", + "label": "CartReviewView.tsx", + "file_type": "code", + "source_file": "src/components/customer/CartReviewView.tsx", + "source_location": "L1", + "_origin": "ast" + }, + { + "id": "src_components_customer_cartreviewview_cartreviewviewprops", + "label": "CartReviewViewProps", + "file_type": "code", + "source_file": "src/components/customer/CartReviewView.tsx", + "source_location": "L25", + "_callable": true, + "_callable_class": true, + "_origin": "ast" + }, + { + "id": "src_components_customer_cartreviewview_cartreviewview", + "label": "CartReviewView()", + "file_type": "code", + "source_file": "src/components/customer/CartReviewView.tsx", + "source_location": "L32", + "_callable": true, + "_origin": "ast" + }, + { + "id": "src_components_customer_customizationmodal", + "label": "CustomizationModal.tsx", + "file_type": "code", + "source_file": "src/components/customer/CustomizationModal.tsx", + "source_location": "L1", + "_origin": "ast" + }, + { + "id": "src_components_customer_customizationmodal_customizationmodalprops", + "label": "CustomizationModalProps", + "file_type": "code", + "source_file": "src/components/customer/CustomizationModal.tsx", + "source_location": "L20", + "_callable": true, + "_callable_class": true, + "_origin": "ast" + }, + { + "id": "src_components_customer_customizationmodal_customizationmodal", + "label": "CustomizationModal()", + "file_type": "code", + "source_file": "src/components/customer/CustomizationModal.tsx", + "source_location": "L27", + "_callable": true, + "_origin": "ast" + }, + { + "id": "src_components_customer_menubrowseview", + "label": "MenuBrowseView.tsx", + "file_type": "code", + "source_file": "src/components/customer/MenuBrowseView.tsx", + "source_location": "L1", + "_origin": "ast" + }, + { + "id": "src_components_customer_menubrowseview_menubrowseviewprops", + "label": "MenuBrowseViewProps", + "file_type": "code", + "source_file": "src/components/customer/MenuBrowseView.tsx", + "source_location": "L31", + "_callable": true, + "_callable_class": true, + "_origin": "ast" + }, + { + "id": "src_components_customer_menubrowseview_dietary_filters", + "label": "DIETARY_FILTERS", + "file_type": "code", + "source_file": "src/components/customer/MenuBrowseView.tsx", + "source_location": "L39", + "_origin": "ast" + }, + { + "id": "src_components_customer_menubrowseview_spice_icons", + "label": "SPICE_ICONS", + "file_type": "code", + "source_file": "src/components/customer/MenuBrowseView.tsx", + "source_location": "L46", + "_origin": "ast" + }, + { + "id": "src_components_customer_menubrowseview_menubrowseview", + "label": "MenuBrowseView()", + "file_type": "code", + "source_file": "src/components/customer/MenuBrowseView.tsx", + "source_location": "L53", + "_callable": true, + "_origin": "ast" + }, + { + "id": "src_components_customer_orderstatusview", + "label": "OrderStatusView.tsx", + "file_type": "code", + "source_file": "src/components/customer/OrderStatusView.tsx", + "source_location": "L1", + "_origin": "ast" + }, + { + "id": "src_components_customer_orderstatusview_orderstatusviewprops", + "label": "OrderStatusViewProps", + "file_type": "code", + "source_file": "src/components/customer/OrderStatusView.tsx", + "source_location": "L25", + "_callable": true, + "_callable_class": true, + "_origin": "ast" + }, + { + "id": "src_components_customer_orderstatusview_order_steps", + "label": "ORDER_STEPS", + "file_type": "code", + "source_file": "src/components/customer/OrderStatusView.tsx", + "source_location": "L29", + "_origin": "ast" + }, + { + "id": "src_components_customer_orderstatusview_orderstatusview", + "label": "OrderStatusView()", + "file_type": "code", + "source_file": "src/components/customer/OrderStatusView.tsx", + "source_location": "L56", + "_callable": true, + "_origin": "ast" + }, + { + "id": "src_components_customer_tablelandingview", + "label": "TableLandingView.tsx", + "file_type": "code", + "source_file": "src/components/customer/TableLandingView.tsx", + "source_location": "L1", + "_origin": "ast" + }, + { + "id": "src_components_customer_tablelandingview_tablelandingviewprops", + "label": "TableLandingViewProps", + "file_type": "code", + "source_file": "src/components/customer/TableLandingView.tsx", + "source_location": "L21", + "_callable": true, + "_callable_class": true, + "_origin": "ast" + }, + { + "id": "src_components_customer_tablelandingview_tablelandingview", + "label": "TableLandingView()", + "file_type": "code", + "source_file": "src/components/customer/TableLandingView.tsx", + "source_location": "L27", + "_callable": true, + "_origin": "ast" + }, + { + "id": "src_components_customer_voiceassistantmodal", + "label": "VoiceAssistantModal.tsx", + "file_type": "code", + "source_file": "src/components/customer/VoiceAssistantModal.tsx", + "source_location": "L1", + "_origin": "ast" + }, + { + "id": "src_components_customer_voiceassistantmodal_detecteditem", + "label": "DetectedItem", + "file_type": "code", + "source_file": "src/components/customer/VoiceAssistantModal.tsx", + "source_location": "L28", + "_callable": true, + "_callable_class": true, + "_origin": "ast" + }, + { + "id": "src_components_customer_voiceassistantmodal_voiceassistantmodalprops", + "label": "VoiceAssistantModalProps", + "file_type": "code", + "source_file": "src/components/customer/VoiceAssistantModal.tsx", + "source_location": "L33", + "_callable": true, + "_callable_class": true, + "_origin": "ast" + }, + { + "id": "src_components_customer_voiceassistantmodal_parsetranscripttoitems", + "label": "parseTranscriptToItems()", + "file_type": "code", + "source_file": "src/components/customer/VoiceAssistantModal.tsx", + "source_location": "L40", + "_callable": true, + "_origin": "ast" + }, + { + "id": "src_components_customer_voiceassistantmodal_quick_commands", + "label": "QUICK_COMMANDS", + "file_type": "code", + "source_file": "src/components/customer/VoiceAssistantModal.tsx", + "source_location": "L69", + "_origin": "ast" + }, + { + "id": "src_components_customer_voiceassistantmodal_voiceassistantmodal", + "label": "VoiceAssistantModal()", + "file_type": "code", + "source_file": "src/components/customer/VoiceAssistantModal.tsx", + "source_location": "L77", + "_callable": true, + "_origin": "ast" + }, + { + "id": "src_components_kds_kdskanban", + "label": "KDSKanban.tsx", + "file_type": "code", + "source_file": "src/components/kds/KDSKanban.tsx", + "source_location": "L1", + "_origin": "ast" + }, + { + "id": "src_components_kds_kdskanban_kdskanbanprops", + "label": "KDSKanbanProps", + "file_type": "code", + "source_file": "src/components/kds/KDSKanban.tsx", + "source_location": "L19", + "_callable": true, + "_callable_class": true, + "_origin": "ast" + }, + { + "id": "src_components_kds_kdskanban_kdskanban", + "label": "KDSKanban()", + "file_type": "code", + "source_file": "src/components/kds/KDSKanban.tsx", + "source_location": "L26", + "_callable": true, + "_origin": "ast" + }, + { + "id": "src_components_kds_kdsticketcard", + "label": "KDSTicketCard.tsx", + "file_type": "code", + "source_file": "src/components/kds/KDSTicketCard.tsx", + "source_location": "L1", + "_origin": "ast" + }, + { + "id": "src_components_kds_kdsticketcard_kdsticketcardprops", + "label": "KDSTicketCardProps", + "file_type": "code", + "source_file": "src/components/kds/KDSTicketCard.tsx", + "source_location": "L23", + "_callable": true, + "_callable_class": true, + "_origin": "ast" + }, + { + "id": "src_components_kds_kdsticketcard_kdsticketcard", + "label": "KDSTicketCard()", + "file_type": "code", + "source_file": "src/components/kds/KDSTicketCard.tsx", + "source_location": "L29", + "_callable": true, + "_origin": "ast" + }, + { + "id": "src_components_table_tablelandingview", + "label": "TableLandingView.tsx", + "file_type": "code", + "source_file": "src/components/table/TableLandingView.tsx", + "source_location": "L1", + "_origin": "ast" + }, + { + "id": "src_components_table_tablelandingview_tablelandingview", + "label": "TableLandingView()", + "file_type": "code", + "source_file": "src/components/table/TableLandingView.tsx", + "source_location": "L26", + "_callable": true, + "_origin": "ast" + }, + { + "id": "src_components_voice_voiceorderingview", + "label": "VoiceOrderingView.tsx", + "file_type": "code", + "source_file": "src/components/voice/VoiceOrderingView.tsx", + "source_location": "L1", + "_origin": "ast" + }, + { + "id": "src_components_voice_voiceorderingview_voiceorderingviewprops", + "label": "VoiceOrderingViewProps", + "file_type": "code", + "source_file": "src/components/voice/VoiceOrderingView.tsx", + "source_location": "L21", + "_callable": true, + "_callable_class": true, + "_origin": "ast" + }, + { + "id": "src_components_voice_voiceorderingview_voiceorderingview", + "label": "VoiceOrderingView()", + "file_type": "code", + "source_file": "src/components/voice/VoiceOrderingView.tsx", + "source_location": "L25", + "_callable": true, + "_origin": "ast" + }, + { + "id": "src_data_menudata", + "label": "menuData.ts", + "file_type": "code", + "source_file": "src/data/menuData.ts", + "source_location": "L1", + "_origin": "ast" + }, + { + "id": "src_data_menudata_menuitem", + "label": "MenuItem", + "file_type": "code", + "source_file": "src/data/menuData.ts", + "source_location": "L1", + "_callable": true, + "_callable_class": true, + "_origin": "ast" + }, + { + "id": "src_data_menudata_menu_items", + "label": "MENU_ITEMS", + "file_type": "code", + "source_file": "src/data/menuData.ts", + "source_location": "L17", + "_origin": "ast" + }, + { + "id": "src_data_menudata_categories", + "label": "CATEGORIES", + "file_type": "code", + "source_file": "src/data/menuData.ts", + "source_location": "L375", + "_origin": "ast" + }, + { + "id": "src_data_menudata_categorytype", + "label": "CategoryType", + "file_type": "code", + "source_file": "src/data/menuData.ts", + "source_location": "L376", + "_callable": true, + "_callable_class": true, + "_origin": "ast" + }, + { + "id": "src_hooks_usespeechrecognition", + "label": "useSpeechRecognition.ts", + "file_type": "code", + "source_file": "src/hooks/useSpeechRecognition.ts", + "source_location": "L1", + "_origin": "ast" + }, + { + "id": "src_hooks_usespeechrecognition_speechrecognitionevent", + "label": "SpeechRecognitionEvent", + "file_type": "code", + "source_file": "src/hooks/useSpeechRecognition.ts", + "source_location": "L3", + "_callable": true, + "_callable_class": true, + "_origin": "ast" + }, + { + "id": "src_hooks_usespeechrecognition_speechrecognitionerrorevent", + "label": "SpeechRecognitionErrorEvent", + "file_type": "code", + "source_file": "src/hooks/useSpeechRecognition.ts", + "source_location": "L8", + "_callable": true, + "_callable_class": true, + "_origin": "ast" + }, + { + "id": "src_hooks_usespeechrecognition_ispeechrecognition", + "label": "ISpeechRecognition", + "file_type": "code", + "source_file": "src/hooks/useSpeechRecognition.ts", + "source_location": "L12", + "_callable": true, + "_callable_class": true, + "_origin": "ast" + }, + { + "id": "src_hooks_usespeechrecognition_ispeechrecognition_start", + "label": ".start()", + "file_type": "code", + "source_file": "src/hooks/useSpeechRecognition.ts", + "source_location": "L17", + "_callable": true, + "_origin": "ast" + }, + { + "id": "src_hooks_usespeechrecognition_ispeechrecognition_stop", + "label": ".stop()", + "file_type": "code", + "source_file": "src/hooks/useSpeechRecognition.ts", + "source_location": "L18", + "_callable": true, + "_origin": "ast" + }, + { + "id": "src_hooks_usespeechrecognition_ispeechrecognition_abort", + "label": ".abort()", + "file_type": "code", + "source_file": "src/hooks/useSpeechRecognition.ts", + "source_location": "L19", + "_callable": true, + "_origin": "ast" + }, + { + "id": "src_hooks_usespeechrecognition_window", + "label": "Window", + "file_type": "code", + "source_file": "src/hooks/useSpeechRecognition.ts", + "source_location": "L27", + "_callable": true, + "_callable_class": true, + "_origin": "ast" + }, + { + "id": "src_hooks_usespeechrecognition_voicestate", + "label": "VoiceState", + "file_type": "code", + "source_file": "src/hooks/useSpeechRecognition.ts", + "source_location": "L33", + "_callable": true, + "_callable_class": true, + "_origin": "ast" + }, + { + "id": "src_hooks_usespeechrecognition_usespeechrecognitionreturn", + "label": "UseSpeechRecognitionReturn", + "file_type": "code", + "source_file": "src/hooks/useSpeechRecognition.ts", + "source_location": "L35", + "_callable": true, + "_callable_class": true, + "_origin": "ast" + }, + { + "id": "src_hooks_usespeechrecognition_usespeechrecognition", + "label": "useSpeechRecognition()", + "file_type": "code", + "source_file": "src/hooks/useSpeechRecognition.ts", + "source_location": "L46", + "_callable": true, + "_origin": "ast" + }, + { + "id": "src_hooks_usespeechsynthesis", + "label": "useSpeechSynthesis.ts", + "file_type": "code", + "source_file": "src/hooks/useSpeechSynthesis.ts", + "source_location": "L1", + "_origin": "ast" + }, + { + "id": "src_hooks_usespeechsynthesis_usespeechsynthesisreturn", + "label": "UseSpeechSynthesisReturn", + "file_type": "code", + "source_file": "src/hooks/useSpeechSynthesis.ts", + "source_location": "L4", + "_callable": true, + "_callable_class": true, + "_origin": "ast" + }, + { + "id": "src_hooks_usespeechsynthesis_usespeechsynthesis", + "label": "useSpeechSynthesis()", + "file_type": "code", + "source_file": "src/hooks/useSpeechSynthesis.ts", + "source_location": "L10", + "_callable": true, + "_origin": "ast" + }, + { + "id": "src_main", + "label": "main.tsx", + "file_type": "code", + "source_file": "src/main.tsx", + "source_location": "L1", + "_origin": "ast" + }, + { + "id": "src_services_api", + "label": "api.ts", + "file_type": "code", + "source_file": "src/services/api.ts", + "source_location": "L1", + "_origin": "ast" + }, + { + "id": "src_services_api_getaccesstoken", + "label": "getAccessToken()", + "file_type": "code", + "source_file": "src/services/api.ts", + "source_location": "L7", + "_callable": true, + "_origin": "ast" + }, + { + "id": "src_services_api_getrefreshtoken", + "label": "getRefreshToken()", + "file_type": "code", + "source_file": "src/services/api.ts", + "source_location": "L8", + "_callable": true, + "_origin": "ast" + }, + { + "id": "src_services_api_settokens", + "label": "setTokens()", + "file_type": "code", + "source_file": "src/services/api.ts", + "source_location": "L9", + "_callable": true, + "_origin": "ast" + }, + { + "id": "src_services_api_cleartokens", + "label": "clearTokens()", + "file_type": "code", + "source_file": "src/services/api.ts", + "source_location": "L13", + "_callable": true, + "_origin": "ast" + }, + { + "id": "src_services_api_getcustomertoken", + "label": "getCustomerToken()", + "file_type": "code", + "source_file": "src/services/api.ts", + "source_location": "L18", + "_callable": true, + "_origin": "ast" + }, + { + "id": "src_services_api_getcustomersessionid", + "label": "getCustomerSessionId()", + "file_type": "code", + "source_file": "src/services/api.ts", + "source_location": "L19", + "_callable": true, + "_origin": "ast" + }, + { + "id": "src_services_api_setcustomersession", + "label": "setCustomerSession()", + "file_type": "code", + "source_file": "src/services/api.ts", + "source_location": "L20", + "_callable": true, + "_origin": "ast" + }, + { + "id": "src_services_api_clearcustomersession", + "label": "clearCustomerSession()", + "file_type": "code", + "source_file": "src/services/api.ts", + "source_location": "L26", + "_callable": true, + "_origin": "ast" + }, + { + "id": "src_services_api_getbackendmenuid", + "label": "getBackendMenuId()", + "file_type": "code", + "source_file": "src/services/api.ts", + "source_location": "L34", + "_callable": true, + "_origin": "ast" + }, + { + "id": "src_services_api_getfrontendmenuitem", + "label": "getFrontendMenuItem()", + "file_type": "code", + "source_file": "src/services/api.ts", + "source_location": "L39", + "_callable": true, + "_origin": "ast" + }, + { + "id": "src_services_api_isdemomode", + "label": "isDemoMode", + "file_type": "code", + "source_file": "src/services/api.ts", + "source_location": "L45", + "_origin": "ast" + }, + { + "id": "src_services_api_setdemomodechangecallback", + "label": "setDemoModeChangeCallback()", + "file_type": "code", + "source_file": "src/services/api.ts", + "source_location": "L48", + "_callable": true, + "_origin": "ast" + }, + { + "id": "src_services_api_triggerdemomode", + "label": "triggerDemoMode()", + "file_type": "code", + "source_file": "src/services/api.ts", + "source_location": "L52", + "_callable": true, + "_origin": "ast" + }, + { + "id": "src_services_api_mockdb", + "label": "mockDb", + "file_type": "code", + "source_file": "src/services/api.ts", + "source_location": "L62", + "_origin": "ast" + }, + { + "id": "src_services_api_apirequest", + "label": "apiRequest()", + "file_type": "code", + "source_file": "src/services/api.ts", + "source_location": "L107", + "_callable": true, + "_origin": "ast" + }, + { + "id": "src_services_api_handlemockrequest", + "label": "handleMockRequest()", + "file_type": "code", + "source_file": "src/services/api.ts", + "source_location": "L159", + "_callable": true, + "_origin": "ast" + }, + { + "id": "src_services_api_wslisteners", + "label": "wsListeners", + "file_type": "code", + "source_file": "src/services/api.ts", + "source_location": "L540", + "_origin": "ast" + }, + { + "id": "src_services_api_subscribetowsevents", + "label": "subscribeToWsEvents()", + "file_type": "code", + "source_file": "src/services/api.ts", + "source_location": "L541", + "_callable": true, + "_origin": "ast" + }, + { + "id": "src_services_api_notifywslisteners", + "label": "notifyWsListeners()", + "file_type": "code", + "source_file": "src/services/api.ts", + "source_location": "L548", + "_callable": true, + "_origin": "ast" + }, + { + "id": "src_services_api_restrowebsocket", + "label": "RestroWebSocket", + "file_type": "code", + "source_file": "src/services/api.ts", + "source_location": "L558", + "_callable": true, + "_callable_class": true, + "_origin": "ast" + }, + { + "id": "src_services_api_restrowebsocket_constructor", + "label": ".constructor()", + "file_type": "code", + "source_file": "src/services/api.ts", + "source_location": "L564", + "_callable": true, + "_origin": "ast" + }, + { + "id": "src_services_api_restrowebsocket_connect", + "label": ".connect()", + "file_type": "code", + "source_file": "src/services/api.ts", + "source_location": "L574", + "_callable": true, + "_origin": "ast" + }, + { + "id": "src_services_api_restrowebsocket_close", + "label": ".close()", + "file_type": "code", + "source_file": "src/services/api.ts", + "source_location": "L608", + "_callable": true, + "_origin": "ast" + }, + { + "id": "src_services_api_api", + "label": "api", + "file_type": "code", + "source_file": "src/services/api.ts", + "source_location": "L619", + "_origin": "ast" + }, + { + "id": "src_theme_theme", + "label": "theme.ts", + "file_type": "code", + "source_file": "src/theme/theme.ts", + "source_location": "L1", + "_origin": "ast" + }, + { + "id": "src_theme_theme_theme", + "label": "theme", + "file_type": "code", + "source_file": "src/theme/theme.ts", + "source_location": "L3", + "_origin": "ast" + }, + { + "id": "src_types_index", + "label": "index.ts", + "file_type": "code", + "source_file": "src/types/index.ts", + "source_location": "L1", + "_origin": "ast" + }, + { + "id": "src_types_index_orderstatus", + "label": "OrderStatus", + "file_type": "code", + "source_file": "src/types/index.ts", + "source_location": "L1", + "_callable": true, + "_callable_class": true, + "_origin": "ast" + }, + { + "id": "src_types_index_ordertype", + "label": "OrderType", + "file_type": "code", + "source_file": "src/types/index.ts", + "source_location": "L2", + "_callable": true, + "_callable_class": true, + "_origin": "ast" + }, + { + "id": "src_types_index_orderitem", + "label": "OrderItem", + "file_type": "code", + "source_file": "src/types/index.ts", + "source_location": "L4", + "_callable": true, + "_callable_class": true, + "_origin": "ast" + }, + { + "id": "src_types_index_kdsorder", + "label": "KDSOrder", + "file_type": "code", + "source_file": "src/types/index.ts", + "source_location": "L14", + "_callable": true, + "_callable_class": true, + "_origin": "ast" + }, + { + "id": "src_types_index_analyticsmetric", + "label": "AnalyticsMetric", + "file_type": "code", + "source_file": "src/types/index.ts", + "source_location": "L29", + "_callable": true, + "_callable_class": true, + "_origin": "ast" + }, + { + "id": "src_types_index_dishperformance", + "label": "DishPerformance", + "file_type": "code", + "source_file": "src/types/index.ts", + "source_location": "L37", + "_callable": true, + "_callable_class": true, + "_origin": "ast" + }, + { + "id": "src_types_index_voicecommandsuggestion", + "label": "VoiceCommandSuggestion", + "file_type": "code", + "source_file": "src/types/index.ts", + "source_location": "L47", + "_callable": true, + "_callable_class": true, + "_origin": "ast" + }, + { + "id": "tsconfig_app", + "label": "tsconfig.app.json", + "file_type": "code", + "source_file": "tsconfig.app.json", + "source_location": "L1", + "_origin": "ast" + }, + { + "id": "tsconfig_app_compileroptions", + "label": "compilerOptions", + "file_type": "code", + "source_file": "tsconfig.app.json", + "source_location": "L2", + "_origin": "ast" + }, + { + "id": "tsconfig_app_compileroptions_tsbuildinfofile", + "label": "tsBuildInfoFile", + "file_type": "code", + "source_file": "tsconfig.app.json", + "source_location": "L3", + "_origin": "ast" + }, + { + "id": "tsconfig_app_compileroptions_target", + "label": "target", + "file_type": "code", + "source_file": "tsconfig.app.json", + "source_location": "L4", + "_origin": "ast" + }, + { + "id": "tsconfig_app_compileroptions_lib", + "label": "lib", + "file_type": "code", + "source_file": "tsconfig.app.json", + "source_location": "L5", + "_origin": "ast" + }, + { + "id": "tsconfig_app_json_ref_es2023", + "label": "ES2023", + "file_type": "concept", + "source_file": "tsconfig.app.json", + "source_location": "L5", + "_origin": "ast" + }, + { + "id": "ref_dom", + "label": "DOM", + "file_type": "concept", + "source_file": "tsconfig.app.json", + "source_location": "L5", + "_origin": "ast" + }, + { + "id": "tsconfig_app_compileroptions_module", + "label": "module", + "file_type": "code", + "source_file": "tsconfig.app.json", + "source_location": "L6", + "_origin": "ast" + }, + { + "id": "tsconfig_app_compileroptions_types", + "label": "types", + "file_type": "code", + "source_file": "tsconfig.app.json", + "source_location": "L7", + "_origin": "ast" + }, + { + "id": "ref_vite_client", + "label": "vite/client", + "file_type": "concept", + "source_file": "tsconfig.app.json", + "source_location": "L7", + "_origin": "ast" + }, + { + "id": "tsconfig_app_compileroptions_allowarbitraryextensions", + "label": "allowArbitraryExtensions", + "file_type": "code", + "source_file": "tsconfig.app.json", + "source_location": "L8", + "_origin": "ast" + }, + { + "id": "tsconfig_app_compileroptions_skiplibcheck", + "label": "skipLibCheck", + "file_type": "code", + "source_file": "tsconfig.app.json", + "source_location": "L9", + "_origin": "ast" + }, + { + "id": "tsconfig_app_compileroptions_moduleresolution", + "label": "moduleResolution", + "file_type": "code", + "source_file": "tsconfig.app.json", + "source_location": "L12", + "_origin": "ast" + }, + { + "id": "tsconfig_app_compileroptions_allowimportingtsextensions", + "label": "allowImportingTsExtensions", + "file_type": "code", + "source_file": "tsconfig.app.json", + "source_location": "L13", + "_origin": "ast" + }, + { + "id": "tsconfig_app_compileroptions_verbatimmodulesyntax", + "label": "verbatimModuleSyntax", + "file_type": "code", + "source_file": "tsconfig.app.json", + "source_location": "L14", + "_origin": "ast" + }, + { + "id": "tsconfig_app_compileroptions_moduledetection", + "label": "moduleDetection", + "file_type": "code", + "source_file": "tsconfig.app.json", + "source_location": "L15", + "_origin": "ast" + }, + { + "id": "tsconfig_app_compileroptions_noemit", + "label": "noEmit", + "file_type": "code", + "source_file": "tsconfig.app.json", + "source_location": "L16", + "_origin": "ast" + }, + { + "id": "tsconfig_app_compileroptions_jsx", + "label": "jsx", + "file_type": "code", + "source_file": "tsconfig.app.json", + "source_location": "L17", + "_origin": "ast" + }, + { + "id": "tsconfig_app_compileroptions_nounusedlocals", + "label": "noUnusedLocals", + "file_type": "code", + "source_file": "tsconfig.app.json", + "source_location": "L20", + "_origin": "ast" + }, + { + "id": "tsconfig_app_compileroptions_nounusedparameters", + "label": "noUnusedParameters", + "file_type": "code", + "source_file": "tsconfig.app.json", + "source_location": "L21", + "_origin": "ast" + }, + { + "id": "tsconfig_app_compileroptions_erasablesyntaxonly", + "label": "erasableSyntaxOnly", + "file_type": "code", + "source_file": "tsconfig.app.json", + "source_location": "L22", + "_origin": "ast" + }, + { + "id": "tsconfig_app_compileroptions_nofallthroughcasesinswitch", + "label": "noFallthroughCasesInSwitch", + "file_type": "code", + "source_file": "tsconfig.app.json", + "source_location": "L23", + "_origin": "ast" + }, + { + "id": "tsconfig_app_include", + "label": "include", + "file_type": "code", + "source_file": "tsconfig.app.json", + "source_location": "L25", + "_origin": "ast" + }, + { + "id": "ref_src", + "label": "src", + "file_type": "concept", + "source_file": "tsconfig.app.json", + "source_location": "L25", + "_origin": "ast" + }, + { + "id": "tsconfig", + "label": "tsconfig.json", + "file_type": "code", + "source_file": "tsconfig.json", + "source_location": "L1", + "_origin": "ast" + }, + { + "id": "tsconfig_files", + "label": "files", + "file_type": "code", + "source_file": "tsconfig.json", + "source_location": "L2", + "_origin": "ast" + }, + { + "id": "tsconfig_references", + "label": "references", + "file_type": "code", + "source_file": "tsconfig.json", + "source_location": "L3", + "_origin": "ast" + }, + { + "id": "tsconfig_node", + "label": "tsconfig.node.json", + "file_type": "code", + "source_file": "tsconfig.node.json", + "source_location": "L1", + "_origin": "ast" + }, + { + "id": "tsconfig_node_compileroptions", + "label": "compilerOptions", + "file_type": "code", + "source_file": "tsconfig.node.json", + "source_location": "L2", + "_origin": "ast" + }, + { + "id": "tsconfig_node_compileroptions_tsbuildinfofile", + "label": "tsBuildInfoFile", + "file_type": "code", + "source_file": "tsconfig.node.json", + "source_location": "L3", + "_origin": "ast" + }, + { + "id": "tsconfig_node_compileroptions_target", + "label": "target", + "file_type": "code", + "source_file": "tsconfig.node.json", + "source_location": "L4", + "_origin": "ast" + }, + { + "id": "tsconfig_node_compileroptions_lib", + "label": "lib", + "file_type": "code", + "source_file": "tsconfig.node.json", + "source_location": "L5", + "_origin": "ast" + }, + { + "id": "tsconfig_node_json_ref_es2023", + "label": "ES2023", + "file_type": "concept", + "source_file": "tsconfig.node.json", + "source_location": "L5", + "_origin": "ast" + }, + { + "id": "tsconfig_node_compileroptions_types", + "label": "types", + "file_type": "code", + "source_file": "tsconfig.node.json", + "source_location": "L6", + "_origin": "ast" + }, + { + "id": "ref_node", + "label": "node", + "file_type": "concept", + "source_file": "tsconfig.node.json", + "source_location": "L6", + "_origin": "ast" + }, + { + "id": "tsconfig_node_compileroptions_skiplibcheck", + "label": "skipLibCheck", + "file_type": "code", + "source_file": "tsconfig.node.json", + "source_location": "L7", + "_origin": "ast" + }, + { + "id": "tsconfig_node_compileroptions_module", + "label": "module", + "file_type": "code", + "source_file": "tsconfig.node.json", + "source_location": "L10", + "_origin": "ast" + }, + { + "id": "tsconfig_node_compileroptions_allowimportingtsextensions", + "label": "allowImportingTsExtensions", + "file_type": "code", + "source_file": "tsconfig.node.json", + "source_location": "L11", + "_origin": "ast" + }, + { + "id": "tsconfig_node_compileroptions_verbatimmodulesyntax", + "label": "verbatimModuleSyntax", + "file_type": "code", + "source_file": "tsconfig.node.json", + "source_location": "L12", + "_origin": "ast" + }, + { + "id": "tsconfig_node_compileroptions_moduledetection", + "label": "moduleDetection", + "file_type": "code", + "source_file": "tsconfig.node.json", + "source_location": "L13", + "_origin": "ast" + }, + { + "id": "tsconfig_node_compileroptions_noemit", + "label": "noEmit", + "file_type": "code", + "source_file": "tsconfig.node.json", + "source_location": "L14", + "_origin": "ast" + }, + { + "id": "tsconfig_node_compileroptions_nounusedlocals", + "label": "noUnusedLocals", + "file_type": "code", + "source_file": "tsconfig.node.json", + "source_location": "L17", + "_origin": "ast" + }, + { + "id": "tsconfig_node_compileroptions_nounusedparameters", + "label": "noUnusedParameters", + "file_type": "code", + "source_file": "tsconfig.node.json", + "source_location": "L18", + "_origin": "ast" + }, + { + "id": "tsconfig_node_compileroptions_erasablesyntaxonly", + "label": "erasableSyntaxOnly", + "file_type": "code", + "source_file": "tsconfig.node.json", + "source_location": "L19", + "_origin": "ast" + }, + { + "id": "tsconfig_node_compileroptions_nofallthroughcasesinswitch", + "label": "noFallthroughCasesInSwitch", + "file_type": "code", + "source_file": "tsconfig.node.json", + "source_location": "L20", + "_origin": "ast" + }, + { + "id": "tsconfig_node_include", + "label": "include", + "file_type": "code", + "source_file": "tsconfig.node.json", + "source_location": "L22", + "_origin": "ast" + }, + { + "id": "ref_vite_config_ts", + "label": "vite.config.ts", + "file_type": "concept", + "source_file": "tsconfig.node.json", + "source_location": "L22", + "_origin": "ast" + }, + { + "id": "vite_config", + "label": "vite.config.ts", + "file_type": "code", + "source_file": "vite.config.ts", + "source_location": "L1", + "_origin": "ast" + } + ], + "edges": [ + { + "source": "oxlintrc", + "target": "oxlintrc_schema", + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": ".oxlintrc.json", + "source_location": "L2", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "oxlintrc", + "target": "oxlintrc_plugins", + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": ".oxlintrc.json", + "source_location": "L3", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "oxlintrc_plugins", + "target": "ref_react", + "relation": "extends", + "confidence": "EXTRACTED", + "source_file": ".oxlintrc.json", + "source_location": "L3", + "weight": 1.0, + "context": "import", + "_origin": "ast" + }, + { + "source": "oxlintrc_plugins", + "target": "ref_typescript", + "relation": "extends", + "confidence": "EXTRACTED", + "source_file": ".oxlintrc.json", + "source_location": "L3", + "weight": 1.0, + "context": "import", + "_origin": "ast" + }, + { + "source": "oxlintrc_plugins", + "target": "ref_oxc", + "relation": "extends", + "confidence": "EXTRACTED", + "source_file": ".oxlintrc.json", + "source_location": "L3", + "weight": 1.0, + "context": "import", + "_origin": "ast" + }, + { + "source": "oxlintrc", + "target": "oxlintrc_rules", + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": ".oxlintrc.json", + "source_location": "L4", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "oxlintrc_rules", + "target": "oxlintrc_rules_react_rules_of_hooks", + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": ".oxlintrc.json", + "source_location": "L5", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "oxlintrc_rules", + "target": "oxlintrc_rules_react_only_export_components", + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": ".oxlintrc.json", + "source_location": "L6", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "oxlintrc_rules_react_only_export_components", + "target": "ref_warn", + "relation": "extends", + "confidence": "EXTRACTED", + "source_file": ".oxlintrc.json", + "source_location": "L6", + "weight": 1.0, + "context": "import", + "_origin": "ast" + }, + { + "source": "package", + "target": "package_name", + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "package.json", + "source_location": "L2", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "package", + "target": "package_private", + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "package.json", + "source_location": "L3", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "package", + "target": "package_version", + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "package.json", + "source_location": "L4", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "package", + "target": "package_type", + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "package.json", + "source_location": "L5", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "package", + "target": "package_packagemanager", + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "package.json", + "source_location": "L6", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "package", + "target": "package_scripts", + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "package.json", + "source_location": "L7", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "package_scripts", + "target": "package_scripts_dev", + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "package.json", + "source_location": "L8", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "package_scripts", + "target": "package_scripts_build", + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "package.json", + "source_location": "L9", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "package_scripts", + "target": "package_scripts_lint", + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "package.json", + "source_location": "L10", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "package_scripts", + "target": "package_scripts_preview", + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "package.json", + "source_location": "L11", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "package", + "target": "package_dependencies", + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "package.json", + "source_location": "L13", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "package_dependencies", + "target": "package_dependencies_emotion_react", + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "package.json", + "source_location": "L14", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "package_dependencies_emotion_react", + "target": "emotion_react", + "relation": "imports", + "confidence": "EXTRACTED", + "source_file": "package.json", + "source_location": "L14", + "weight": 1.0, + "context": "import", + "_origin": "ast" + }, + { + "source": "package_dependencies", + "target": "package_dependencies_emotion_styled", + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "package.json", + "source_location": "L15", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "package_dependencies_emotion_styled", + "target": "emotion_styled", + "relation": "imports", + "confidence": "EXTRACTED", + "source_file": "package.json", + "source_location": "L15", + "weight": 1.0, + "context": "import", + "_origin": "ast" + }, + { + "source": "package_dependencies", + "target": "package_dependencies_mui_icons_material", + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "package.json", + "source_location": "L16", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "package_dependencies_mui_icons_material", + "target": "mui_icons_material", + "relation": "imports", + "confidence": "EXTRACTED", + "source_file": "package.json", + "source_location": "L16", + "weight": 1.0, + "context": "import", + "_origin": "ast" + }, + { + "source": "package_dependencies", + "target": "package_dependencies_mui_material", + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "package.json", + "source_location": "L17", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "package_dependencies_mui_material", + "target": "mui_material", + "relation": "imports", + "confidence": "EXTRACTED", + "source_file": "package.json", + "source_location": "L17", + "weight": 1.0, + "context": "import", + "_origin": "ast" + }, + { + "source": "package_dependencies", + "target": "package_dependencies_react", + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "package.json", + "source_location": "L18", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "package_dependencies_react", + "target": "react", + "relation": "imports", + "confidence": "EXTRACTED", + "source_file": "package.json", + "source_location": "L18", + "weight": 1.0, + "context": "import", + "_origin": "ast" + }, + { + "source": "package_dependencies", + "target": "package_dependencies_react_dom", + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "package.json", + "source_location": "L19", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "package_dependencies_react_dom", + "target": "react_dom", + "relation": "imports", + "confidence": "EXTRACTED", + "source_file": "package.json", + "source_location": "L19", + "weight": 1.0, + "context": "import", + "_origin": "ast" + }, + { + "source": "package", + "target": "package_devdependencies", + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "package.json", + "source_location": "L21", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "package_devdependencies", + "target": "package_devdependencies_types_node", + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "package.json", + "source_location": "L22", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "package_devdependencies_types_node", + "target": "types_node", + "relation": "imports", + "confidence": "EXTRACTED", + "source_file": "package.json", + "source_location": "L22", + "weight": 1.0, + "context": "import", + "_origin": "ast" + }, + { + "source": "package_devdependencies", + "target": "package_devdependencies_types_react", + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "package.json", + "source_location": "L23", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "package_devdependencies_types_react", + "target": "types_react", + "relation": "imports", + "confidence": "EXTRACTED", + "source_file": "package.json", + "source_location": "L23", + "weight": 1.0, + "context": "import", + "_origin": "ast" + }, + { + "source": "package_devdependencies", + "target": "package_devdependencies_types_react_dom", + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "package.json", + "source_location": "L24", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "package_devdependencies_types_react_dom", + "target": "types_react_dom", + "relation": "imports", + "confidence": "EXTRACTED", + "source_file": "package.json", + "source_location": "L24", + "weight": 1.0, + "context": "import", + "_origin": "ast" + }, + { + "source": "package_devdependencies", + "target": "package_devdependencies_vitejs_plugin_react", + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "package.json", + "source_location": "L25", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "package_devdependencies_vitejs_plugin_react", + "target": "vitejs_plugin_react", + "relation": "imports", + "confidence": "EXTRACTED", + "source_file": "package.json", + "source_location": "L25", + "weight": 1.0, + "context": "import", + "_origin": "ast" + }, + { + "source": "package_devdependencies", + "target": "package_devdependencies_oxlint", + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "package.json", + "source_location": "L26", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "package_devdependencies_oxlint", + "target": "oxlint", + "relation": "imports", + "confidence": "EXTRACTED", + "source_file": "package.json", + "source_location": "L26", + "weight": 1.0, + "context": "import", + "_origin": "ast" + }, + { + "source": "package_devdependencies", + "target": "package_devdependencies_typescript", + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "package.json", + "source_location": "L27", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "package_devdependencies_typescript", + "target": "typescript", + "relation": "imports", + "confidence": "EXTRACTED", + "source_file": "package.json", + "source_location": "L27", + "weight": 1.0, + "context": "import", + "_origin": "ast" + }, + { + "source": "package_devdependencies", + "target": "package_devdependencies_vite", + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "package.json", + "source_location": "L28", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "package_devdependencies_vite", + "target": "vite", + "relation": "imports", + "confidence": "EXTRACTED", + "source_file": "package.json", + "source_location": "L28", + "weight": 1.0, + "context": "import", + "_origin": "ast" + }, + { + "source": "src_app", + "target": "ref_react", + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/App.tsx", + "source_location": "L1", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_app", + "target": "ref_mui_material", + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/App.tsx", + "source_location": "L2", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_app", + "target": "src_theme_theme", + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/App.tsx", + "source_location": "L3", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_app", + "target": "src_theme_theme_theme", + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/App.tsx", + "source_location": "L3", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_app", + "target": "src_components_customer_tablelandingview", + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/App.tsx", + "source_location": "L4", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_app", + "target": "src_components_customer_tablelandingview_tablelandingview", + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/App.tsx", + "source_location": "L4", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_app", + "target": "src_components_customer_menubrowseview", + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/App.tsx", + "source_location": "L5", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_app", + "target": "src_components_customer_menubrowseview_menubrowseview", + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/App.tsx", + "source_location": "L5", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_app", + "target": "src_components_customer_customizationmodal", + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/App.tsx", + "source_location": "L6", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_app", + "target": "src_components_customer_customizationmodal_customizationmodal", + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/App.tsx", + "source_location": "L6", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_app", + "target": "src_components_customer_cartreviewview", + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/App.tsx", + "source_location": "L7", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_app", + "target": "src_components_customer_cartreviewview_cartreviewview", + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/App.tsx", + "source_location": "L7", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_app", + "target": "src_components_customer_orderstatusview", + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/App.tsx", + "source_location": "L8", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_app", + "target": "src_components_customer_orderstatusview_orderstatusview", + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/App.tsx", + "source_location": "L8", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_app", + "target": "src_components_customer_billpaymentview", + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/App.tsx", + "source_location": "L9", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_app", + "target": "src_components_customer_billpaymentview_billpaymentview", + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/App.tsx", + "source_location": "L9", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_app", + "target": "src_components_customer_voiceassistantmodal", + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/App.tsx", + "source_location": "L10", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_app", + "target": "src_components_customer_voiceassistantmodal_voiceassistantmodal", + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/App.tsx", + "source_location": "L10", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_app", + "target": "src_components_admin_staffloginmodal", + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/App.tsx", + "source_location": "L11", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_app", + "target": "src_components_admin_staffloginmodal_staffloginmodal", + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/App.tsx", + "source_location": "L11", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_app", + "target": "src_components_admin_admindesktopshell", + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/App.tsx", + "source_location": "L12", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_app", + "target": "src_components_admin_admindesktopshell_admindesktopshell", + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/App.tsx", + "source_location": "L12", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_app", + "target": "src_data_menudata", + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/App.tsx", + "source_location": "L13", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_app", + "target": "src_data_menudata_menuitem", + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/App.tsx", + "source_location": "L13", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_app", + "target": "src_types_index", + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/App.tsx", + "source_location": "L14", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_app", + "target": "src_types_index_kdsorder", + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/App.tsx", + "source_location": "L14", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_app", + "target": "src_types_index_orderstatus", + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/App.tsx", + "source_location": "L14", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_app", + "target": "src_services_api", + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/App.tsx", + "source_location": "L15", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_app", + "target": "src_services_api_api", + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/App.tsx", + "source_location": "L15", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_app", + "target": "src_services_api_getbackendmenuid", + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/App.tsx", + "source_location": "L15", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_app", + "target": "src_services_api_restrowebsocket", + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/App.tsx", + "source_location": "L15", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_app", + "target": "src_services_api_subscribetowsevents", + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/App.tsx", + "source_location": "L15", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_app", + "target": "src_services_api_isdemomode", + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/App.tsx", + "source_location": "L15", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_app", + "target": "src_services_api_setdemomodechangecallback", + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/App.tsx", + "source_location": "L15", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_app", + "target": "src_app_customerview", + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/App.tsx", + "source_location": "L17", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_app", + "target": "src_app_gettablenumfromurl", + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/App.tsx", + "source_location": "L19", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_app", + "target": "src_app_app", + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/App.tsx", + "source_location": "L36", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_app_app", + "target": "src_app_gettablenumfromurl", + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/App.tsx", + "source_location": "L137", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_components_admin_admindesktopshell", + "target": "ref_react", + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/components/admin/AdminDesktopShell.tsx", + "source_location": "L1", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_components_admin_admindesktopshell", + "target": "ref_mui_material", + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/components/admin/AdminDesktopShell.tsx", + "source_location": "L2", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_components_admin_admindesktopshell", + "target": "ref_mui_icons_material_soupkitchen", + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/components/admin/AdminDesktopShell.tsx", + "source_location": "L18", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_components_admin_admindesktopshell", + "target": "ref_mui_icons_material_barchart", + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/components/admin/AdminDesktopShell.tsx", + "source_location": "L19", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_components_admin_admindesktopshell", + "target": "ref_mui_icons_material_recordvoiceover", + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/components/admin/AdminDesktopShell.tsx", + "source_location": "L20", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_components_admin_admindesktopshell", + "target": "ref_mui_icons_material_logout", + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/components/admin/AdminDesktopShell.tsx", + "source_location": "L21", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_components_admin_admindesktopshell", + "target": "ref_mui_icons_material_localdining", + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/components/admin/AdminDesktopShell.tsx", + "source_location": "L22", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_components_admin_admindesktopshell", + "target": "ref_mui_icons_material_accountcircle", + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/components/admin/AdminDesktopShell.tsx", + "source_location": "L23", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_components_admin_admindesktopshell", + "target": "ref_mui_icons_material_tablebar", + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/components/admin/AdminDesktopShell.tsx", + "source_location": "L24", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_components_admin_admindesktopshell", + "target": "ref_mui_icons_material_receipt", + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/components/admin/AdminDesktopShell.tsx", + "source_location": "L25", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_components_admin_admindesktopshell", + "target": "ref_mui_icons_material_bookonline", + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/components/admin/AdminDesktopShell.tsx", + "source_location": "L26", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_components_admin_admindesktopshell", + "target": "ref_mui_icons_material_inventory", + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/components/admin/AdminDesktopShell.tsx", + "source_location": "L27", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_components_admin_admindesktopshell", + "target": "ref_mui_icons_material_localshipping", + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/components/admin/AdminDesktopShell.tsx", + "source_location": "L28", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_components_admin_admindesktopshell", + "target": "ref_mui_icons_material_badge", + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/components/admin/AdminDesktopShell.tsx", + "source_location": "L29", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_components_admin_admindesktopshell", + "target": "ref_mui_icons_material_starhalf", + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/components/admin/AdminDesktopShell.tsx", + "source_location": "L30", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_components_admin_admindesktopshell", + "target": "src_components_kds_kdskanban", + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/components/admin/AdminDesktopShell.tsx", + "source_location": "L32", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_components_admin_admindesktopshell", + "target": "src_components_kds_kdskanban_kdskanban", + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/components/admin/AdminDesktopShell.tsx", + "source_location": "L32", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_components_admin_admindesktopshell", + "target": "src_components_analytics_analyticsdashboard", + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/components/admin/AdminDesktopShell.tsx", + "source_location": "L33", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_components_admin_admindesktopshell", + "target": "src_components_analytics_analyticsdashboard_analyticsdashboard", + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/components/admin/AdminDesktopShell.tsx", + "source_location": "L33", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_components_admin_admindesktopshell", + "target": "src_components_voice_voiceorderingview", + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/components/admin/AdminDesktopShell.tsx", + "source_location": "L34", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_components_admin_admindesktopshell", + "target": "src_components_voice_voiceorderingview_voiceorderingview", + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/components/admin/AdminDesktopShell.tsx", + "source_location": "L34", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_components_admin_admindesktopshell", + "target": "src_components_admin_tablemanagementview", + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/components/admin/AdminDesktopShell.tsx", + "source_location": "L35", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_components_admin_admindesktopshell", + "target": "src_components_admin_tablemanagementview_tablemanagementview", + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/components/admin/AdminDesktopShell.tsx", + "source_location": "L35", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_components_admin_admindesktopshell", + "target": "src_components_admin_billingmanagerview", + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/components/admin/AdminDesktopShell.tsx", + "source_location": "L36", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_components_admin_admindesktopshell", + "target": "src_components_admin_billingmanagerview_billingmanagerview", + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/components/admin/AdminDesktopShell.tsx", + "source_location": "L36", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_components_admin_admindesktopshell", + "target": "src_components_admin_reservationsview", + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/components/admin/AdminDesktopShell.tsx", + "source_location": "L37", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_components_admin_admindesktopshell", + "target": "src_components_admin_reservationsview_reservationsview", + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/components/admin/AdminDesktopShell.tsx", + "source_location": "L37", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_components_admin_admindesktopshell", + "target": "src_components_admin_inventoryview", + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/components/admin/AdminDesktopShell.tsx", + "source_location": "L38", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_components_admin_admindesktopshell", + "target": "src_components_admin_inventoryview_inventoryview", + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/components/admin/AdminDesktopShell.tsx", + "source_location": "L38", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_components_admin_admindesktopshell", + "target": "src_components_admin_suppliersview", + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/components/admin/AdminDesktopShell.tsx", + "source_location": "L39", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_components_admin_admindesktopshell", + "target": "src_components_admin_suppliersview_suppliersview", + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/components/admin/AdminDesktopShell.tsx", + "source_location": "L39", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_components_admin_admindesktopshell", + "target": "src_components_admin_staffshiftsview", + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/components/admin/AdminDesktopShell.tsx", + "source_location": "L40", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_components_admin_admindesktopshell", + "target": "src_components_admin_staffshiftsview_staffshiftsview", + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/components/admin/AdminDesktopShell.tsx", + "source_location": "L40", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_components_admin_admindesktopshell", + "target": "src_components_admin_feedbackinboxview", + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/components/admin/AdminDesktopShell.tsx", + "source_location": "L41", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_components_admin_admindesktopshell", + "target": "src_components_admin_feedbackinboxview_feedbackinboxview", + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/components/admin/AdminDesktopShell.tsx", + "source_location": "L41", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_components_admin_admindesktopshell", + "target": "src_types_index", + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/components/admin/AdminDesktopShell.tsx", + "source_location": "L43", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_components_admin_admindesktopshell", + "target": "src_types_index_kdsorder", + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/components/admin/AdminDesktopShell.tsx", + "source_location": "L43", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_components_admin_admindesktopshell", + "target": "src_types_index_orderstatus", + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/components/admin/AdminDesktopShell.tsx", + "source_location": "L43", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_components_admin_admindesktopshell", + "target": "src_components_admin_admindesktopshell_admindesktopshellprops", + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/components/admin/AdminDesktopShell.tsx", + "source_location": "L45", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_components_admin_admindesktopshell", + "target": "src_components_admin_admindesktopshell_tabtype", + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/components/admin/AdminDesktopShell.tsx", + "source_location": "L55", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_components_admin_admindesktopshell", + "target": "src_components_admin_admindesktopshell_admindesktopshell", + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/components/admin/AdminDesktopShell.tsx", + "source_location": "L67", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_components_admin_billingmanagerview", + "target": "ref_react", + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/components/admin/BillingManagerView.tsx", + "source_location": "L1", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_components_admin_billingmanagerview", + "target": "ref_mui_material", + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/components/admin/BillingManagerView.tsx", + "source_location": "L2", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_components_admin_billingmanagerview", + "target": "ref_mui_icons_material_receipt", + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/components/admin/BillingManagerView.tsx", + "source_location": "L28", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_components_admin_billingmanagerview", + "target": "ref_mui_icons_material_payment", + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/components/admin/BillingManagerView.tsx", + "source_location": "L29", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_components_admin_billingmanagerview", + "target": "ref_mui_icons_material_localoffer", + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/components/admin/BillingManagerView.tsx", + "source_location": "L30", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_components_admin_billingmanagerview", + "target": "ref_mui_icons_material_refresh", + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/components/admin/BillingManagerView.tsx", + "source_location": "L31", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_components_admin_billingmanagerview", + "target": "src_services_api", + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/components/admin/BillingManagerView.tsx", + "source_location": "L32", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_components_admin_billingmanagerview", + "target": "src_services_api_api", + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/components/admin/BillingManagerView.tsx", + "source_location": "L32", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_components_admin_billingmanagerview", + "target": "src_components_admin_billingmanagerview_billingmanagerview", + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/components/admin/BillingManagerView.tsx", + "source_location": "L34", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_components_admin_feedbackinboxview", + "target": "ref_react", + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/components/admin/FeedbackInboxView.tsx", + "source_location": "L1", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_components_admin_feedbackinboxview", + "target": "ref_mui_material", + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/components/admin/FeedbackInboxView.tsx", + "source_location": "L2", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_components_admin_feedbackinboxview", + "target": "ref_mui_icons_material_star", + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/components/admin/FeedbackInboxView.tsx", + "source_location": "L20", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_components_admin_feedbackinboxview", + "target": "ref_mui_icons_material_refresh", + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/components/admin/FeedbackInboxView.tsx", + "source_location": "L21", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_components_admin_feedbackinboxview", + "target": "src_services_api", + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/components/admin/FeedbackInboxView.tsx", + "source_location": "L22", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_components_admin_feedbackinboxview", + "target": "src_services_api_api", + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/components/admin/FeedbackInboxView.tsx", + "source_location": "L22", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_components_admin_feedbackinboxview", + "target": "src_components_admin_feedbackinboxview_feedbackinboxview", + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/components/admin/FeedbackInboxView.tsx", + "source_location": "L24", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_components_admin_inventoryview", + "target": "ref_react", + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/components/admin/InventoryView.tsx", + "source_location": "L1", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_components_admin_inventoryview", + "target": "ref_mui_material", + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/components/admin/InventoryView.tsx", + "source_location": "L2", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_components_admin_inventoryview", + "target": "ref_mui_icons_material_delete", + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/components/admin/InventoryView.tsx", + "source_location": "L33", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_components_admin_inventoryview", + "target": "ref_mui_icons_material_edit", + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/components/admin/InventoryView.tsx", + "source_location": "L34", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_components_admin_inventoryview", + "target": "ref_mui_icons_material_add", + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/components/admin/InventoryView.tsx", + "source_location": "L35", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_components_admin_inventoryview", + "target": "ref_mui_icons_material_refresh", + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/components/admin/InventoryView.tsx", + "source_location": "L36", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_components_admin_inventoryview", + "target": "ref_mui_icons_material_save", + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/components/admin/InventoryView.tsx", + "source_location": "L37", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_components_admin_inventoryview", + "target": "src_services_api", + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/components/admin/InventoryView.tsx", + "source_location": "L38", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_components_admin_inventoryview", + "target": "src_services_api_api", + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/components/admin/InventoryView.tsx", + "source_location": "L38", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_components_admin_inventoryview", + "target": "src_data_menudata", + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/components/admin/InventoryView.tsx", + "source_location": "L39", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_components_admin_inventoryview", + "target": "src_data_menudata_menu_items", + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/components/admin/InventoryView.tsx", + "source_location": "L39", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_components_admin_inventoryview", + "target": "src_components_admin_inventoryview_inventoryview", + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/components/admin/InventoryView.tsx", + "source_location": "L41", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_components_admin_reservationsview", + "target": "ref_react", + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/components/admin/ReservationsView.tsx", + "source_location": "L1", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_components_admin_reservationsview", + "target": "ref_mui_material", + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/components/admin/ReservationsView.tsx", + "source_location": "L2", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_components_admin_reservationsview", + "target": "ref_mui_icons_material_calendarmonth", + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/components/admin/ReservationsView.tsx", + "source_location": "L27", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_components_admin_reservationsview", + "target": "ref_mui_icons_material_add", + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/components/admin/ReservationsView.tsx", + "source_location": "L28", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_components_admin_reservationsview", + "target": "ref_mui_icons_material_refresh", + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/components/admin/ReservationsView.tsx", + "source_location": "L29", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_components_admin_reservationsview", + "target": "ref_mui_icons_material_checkcircle", + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/components/admin/ReservationsView.tsx", + "source_location": "L30", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_components_admin_reservationsview", + "target": "src_services_api", + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/components/admin/ReservationsView.tsx", + "source_location": "L31", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_components_admin_reservationsview", + "target": "src_services_api_api", + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/components/admin/ReservationsView.tsx", + "source_location": "L31", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_components_admin_reservationsview", + "target": "src_components_admin_reservationsview_reservationsview", + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/components/admin/ReservationsView.tsx", + "source_location": "L33", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_components_admin_staffloginmodal", + "target": "ref_react", + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/components/admin/StaffLoginModal.tsx", + "source_location": "L1", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_components_admin_staffloginmodal", + "target": "ref_mui_material", + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/components/admin/StaffLoginModal.tsx", + "source_location": "L2", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_components_admin_staffloginmodal", + "target": "ref_mui_icons_material_lock", + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/components/admin/StaffLoginModal.tsx", + "source_location": "L15", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_components_admin_staffloginmodal", + "target": "ref_mui_icons_material_badge", + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/components/admin/StaffLoginModal.tsx", + "source_location": "L16", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_components_admin_staffloginmodal", + "target": "src_services_api", + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/components/admin/StaffLoginModal.tsx", + "source_location": "L17", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_components_admin_staffloginmodal", + "target": "src_services_api_api", + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/components/admin/StaffLoginModal.tsx", + "source_location": "L17", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_components_admin_staffloginmodal", + "target": "src_components_admin_staffloginmodal_staffloginmodalprops", + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/components/admin/StaffLoginModal.tsx", + "source_location": "L19", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_components_admin_staffloginmodal", + "target": "src_components_admin_staffloginmodal_staffloginmodal", + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/components/admin/StaffLoginModal.tsx", + "source_location": "L25", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_components_admin_staffshiftsview", + "target": "ref_react", + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/components/admin/StaffShiftsView.tsx", + "source_location": "L1", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_components_admin_staffshiftsview", + "target": "ref_mui_material", + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/components/admin/StaffShiftsView.tsx", + "source_location": "L2", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_components_admin_staffshiftsview", + "target": "ref_mui_icons_material_add", + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/components/admin/StaffShiftsView.tsx", + "source_location": "L27", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_components_admin_staffshiftsview", + "target": "ref_mui_icons_material_refresh", + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/components/admin/StaffShiftsView.tsx", + "source_location": "L28", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_components_admin_staffshiftsview", + "target": "ref_mui_icons_material_logout", + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/components/admin/StaffShiftsView.tsx", + "source_location": "L29", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_components_admin_staffshiftsview", + "target": "ref_mui_icons_material_login", + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/components/admin/StaffShiftsView.tsx", + "source_location": "L30", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_components_admin_staffshiftsview", + "target": "src_services_api", + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/components/admin/StaffShiftsView.tsx", + "source_location": "L31", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_components_admin_staffshiftsview", + "target": "src_services_api_api", + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/components/admin/StaffShiftsView.tsx", + "source_location": "L31", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_components_admin_staffshiftsview", + "target": "src_components_admin_staffshiftsview_staffshiftsview", + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/components/admin/StaffShiftsView.tsx", + "source_location": "L33", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_components_admin_suppliersview", + "target": "ref_react", + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/components/admin/SuppliersView.tsx", + "source_location": "L1", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_components_admin_suppliersview", + "target": "ref_mui_material", + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/components/admin/SuppliersView.tsx", + "source_location": "L2", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_components_admin_suppliersview", + "target": "ref_mui_icons_material_delete", + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/components/admin/SuppliersView.tsx", + "source_location": "L34", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_components_admin_suppliersview", + "target": "ref_mui_icons_material_add", + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/components/admin/SuppliersView.tsx", + "source_location": "L35", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_components_admin_suppliersview", + "target": "ref_mui_icons_material_refresh", + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/components/admin/SuppliersView.tsx", + "source_location": "L36", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_components_admin_suppliersview", + "target": "ref_mui_icons_material_send", + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/components/admin/SuppliersView.tsx", + "source_location": "L37", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_components_admin_suppliersview", + "target": "ref_mui_icons_material_inventory2", + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/components/admin/SuppliersView.tsx", + "source_location": "L38", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_components_admin_suppliersview", + "target": "ref_mui_icons_material_localshipping", + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/components/admin/SuppliersView.tsx", + "source_location": "L39", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_components_admin_suppliersview", + "target": "src_services_api", + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/components/admin/SuppliersView.tsx", + "source_location": "L40", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_components_admin_suppliersview", + "target": "src_services_api_api", + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/components/admin/SuppliersView.tsx", + "source_location": "L40", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_components_admin_suppliersview", + "target": "src_components_admin_suppliersview_suppliersview", + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/components/admin/SuppliersView.tsx", + "source_location": "L42", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_components_admin_tablemanagementview", + "target": "ref_react", + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/components/admin/TableManagementView.tsx", + "source_location": "L1", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_components_admin_tablemanagementview", + "target": "ref_mui_material", + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/components/admin/TableManagementView.tsx", + "source_location": "L2", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_components_admin_tablemanagementview", + "target": "ref_mui_icons_material_tablebar", + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/components/admin/TableManagementView.tsx", + "source_location": "L23", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_components_admin_tablemanagementview", + "target": "ref_mui_icons_material_qrcode", + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/components/admin/TableManagementView.tsx", + "source_location": "L24", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_components_admin_tablemanagementview", + "target": "ref_mui_icons_material_refresh", + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/components/admin/TableManagementView.tsx", + "source_location": "L25", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_components_admin_tablemanagementview", + "target": "ref_mui_icons_material_close", + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/components/admin/TableManagementView.tsx", + "source_location": "L26", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_components_admin_tablemanagementview", + "target": "ref_mui_icons_material_playarrow", + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/components/admin/TableManagementView.tsx", + "source_location": "L27", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_components_admin_tablemanagementview", + "target": "ref_mui_icons_material_cleaningservices", + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/components/admin/TableManagementView.tsx", + "source_location": "L28", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_components_admin_tablemanagementview", + "target": "src_services_api", + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/components/admin/TableManagementView.tsx", + "source_location": "L29", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_components_admin_tablemanagementview", + "target": "src_services_api_api", + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/components/admin/TableManagementView.tsx", + "source_location": "L29", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_components_admin_tablemanagementview", + "target": "src_components_admin_tablemanagementview_tablemanagementview", + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/components/admin/TableManagementView.tsx", + "source_location": "L31", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_components_analytics_analyticsdashboard", + "target": "ref_react", + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/components/analytics/AnalyticsDashboard.tsx", + "source_location": "L1", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_components_analytics_analyticsdashboard", + "target": "ref_mui_material", + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/components/analytics/AnalyticsDashboard.tsx", + "source_location": "L2", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_components_analytics_analyticsdashboard", + "target": "ref_mui_icons_material_trendingup", + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/components/analytics/AnalyticsDashboard.tsx", + "source_location": "L21", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_components_analytics_analyticsdashboard", + "target": "ref_mui_icons_material_trendingdown", + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/components/analytics/AnalyticsDashboard.tsx", + "source_location": "L22", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_components_analytics_analyticsdashboard", + "target": "ref_mui_icons_material_attachmoney", + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/components/analytics/AnalyticsDashboard.tsx", + "source_location": "L23", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_components_analytics_analyticsdashboard", + "target": "ref_mui_icons_material_shoppingbag", + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/components/analytics/AnalyticsDashboard.tsx", + "source_location": "L24", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_components_analytics_analyticsdashboard", + "target": "ref_mui_icons_material_speed", + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/components/analytics/AnalyticsDashboard.tsx", + "source_location": "L25", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_components_analytics_analyticsdashboard", + "target": "ref_mui_icons_material_tablebar", + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/components/analytics/AnalyticsDashboard.tsx", + "source_location": "L26", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_components_analytics_analyticsdashboard", + "target": "ref_mui_icons_material_star", + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/components/analytics/AnalyticsDashboard.tsx", + "source_location": "L27", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_components_analytics_analyticsdashboard", + "target": "src_components_common_statusbadge", + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/components/analytics/AnalyticsDashboard.tsx", + "source_location": "L28", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_components_analytics_analyticsdashboard", + "target": "src_components_common_statusbadge_statusbadge", + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/components/analytics/AnalyticsDashboard.tsx", + "source_location": "L28", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_components_analytics_analyticsdashboard", + "target": "src_services_api", + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/components/analytics/AnalyticsDashboard.tsx", + "source_location": "L29", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_components_analytics_analyticsdashboard", + "target": "src_services_api_api", + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/components/analytics/AnalyticsDashboard.tsx", + "source_location": "L29", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_components_analytics_analyticsdashboard", + "target": "src_components_analytics_analyticsdashboard_analyticsdashboard", + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/components/analytics/AnalyticsDashboard.tsx", + "source_location": "L31", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_components_common_navigation", + "target": "ref_react", + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/components/common/Navigation.tsx", + "source_location": "L1", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_components_common_navigation", + "target": "ref_mui_material", + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/components/common/Navigation.tsx", + "source_location": "L2", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_components_common_navigation", + "target": "ref_mui_icons_material_menu", + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/components/common/Navigation.tsx", + "source_location": "L18", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_components_common_navigation", + "target": "ref_mui_icons_material_soupkitchen", + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/components/common/Navigation.tsx", + "source_location": "L19", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_components_common_navigation", + "target": "ref_mui_icons_material_barchart", + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/components/common/Navigation.tsx", + "source_location": "L20", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_components_common_navigation", + "target": "ref_mui_icons_material_recordvoiceover", + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/components/common/Navigation.tsx", + "source_location": "L21", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_components_common_navigation", + "target": "ref_mui_icons_material_tablerestaurant", + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/components/common/Navigation.tsx", + "source_location": "L22", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_components_common_navigation", + "target": "ref_mui_icons_material_volumeup", + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/components/common/Navigation.tsx", + "source_location": "L23", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_components_common_navigation", + "target": "ref_mui_icons_material_volumeoff", + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/components/common/Navigation.tsx", + "source_location": "L24", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_components_common_navigation", + "target": "ref_mui_icons_material_localdining", + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/components/common/Navigation.tsx", + "source_location": "L25", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_components_common_navigation", + "target": "src_components_common_navigation_navigationprops", + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/components/common/Navigation.tsx", + "source_location": "L27", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_components_common_navigation", + "target": "src_components_common_navigation_navigation", + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/components/common/Navigation.tsx", + "source_location": "L35", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_components_common_statusbadge", + "target": "ref_react", + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/components/common/StatusBadge.tsx", + "source_location": "L1", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_components_common_statusbadge", + "target": "ref_mui_material", + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/components/common/StatusBadge.tsx", + "source_location": "L2", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_components_common_statusbadge", + "target": "src_types_index", + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/components/common/StatusBadge.tsx", + "source_location": "L3", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_components_common_statusbadge", + "target": "src_types_index_orderstatus", + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/components/common/StatusBadge.tsx", + "source_location": "L3", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_components_common_statusbadge", + "target": "src_types_index_ordertype", + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/components/common/StatusBadge.tsx", + "source_location": "L3", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_components_common_statusbadge", + "target": "src_components_common_statusbadge_statusbadgeprops", + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/components/common/StatusBadge.tsx", + "source_location": "L5", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_components_common_statusbadge", + "target": "src_components_common_statusbadge_statusbadge", + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/components/common/StatusBadge.tsx", + "source_location": "L12", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_components_customer_billpaymentview", + "target": "ref_react", + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/components/customer/BillPaymentView.tsx", + "source_location": "L1", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_components_customer_billpaymentview", + "target": "ref_mui_material", + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/components/customer/BillPaymentView.tsx", + "source_location": "L2", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_components_customer_billpaymentview", + "target": "ref_mui_icons_material_receiptlong", + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/components/customer/BillPaymentView.tsx", + "source_location": "L13", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_components_customer_billpaymentview", + "target": "ref_mui_icons_material_checkcircle", + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/components/customer/BillPaymentView.tsx", + "source_location": "L14", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_components_customer_billpaymentview", + "target": "ref_mui_icons_material_qrcode2", + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/components/customer/BillPaymentView.tsx", + "source_location": "L15", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_components_customer_billpaymentview", + "target": "ref_mui_icons_material_person", + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/components/customer/BillPaymentView.tsx", + "source_location": "L16", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_components_customer_billpaymentview", + "target": "ref_mui_icons_material_creditcard", + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/components/customer/BillPaymentView.tsx", + "source_location": "L17", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_components_customer_billpaymentview", + "target": "ref_mui_icons_material_currencyrupee", + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/components/customer/BillPaymentView.tsx", + "source_location": "L18", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_components_customer_billpaymentview", + "target": "src_services_api", + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/components/customer/BillPaymentView.tsx", + "source_location": "L19", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_components_customer_billpaymentview", + "target": "src_services_api_api", + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/components/customer/BillPaymentView.tsx", + "source_location": "L19", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_components_customer_billpaymentview", + "target": "src_components_customer_billpaymentview_billpaymentviewprops", + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/components/customer/BillPaymentView.tsx", + "source_location": "L21", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_components_customer_billpaymentview", + "target": "src_components_customer_billpaymentview_billpaymentview", + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/components/customer/BillPaymentView.tsx", + "source_location": "L25", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_components_customer_cartreviewview", + "target": "ref_react", + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/components/customer/CartReviewView.tsx", + "source_location": "L1", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_components_customer_cartreviewview", + "target": "ref_mui_material", + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/components/customer/CartReviewView.tsx", + "source_location": "L2", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_components_customer_cartreviewview", + "target": "ref_mui_icons_material_arrowback", + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/components/customer/CartReviewView.tsx", + "source_location": "L15", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_components_customer_cartreviewview", + "target": "ref_mui_icons_material_add", + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/components/customer/CartReviewView.tsx", + "source_location": "L16", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_components_customer_cartreviewview", + "target": "ref_mui_icons_material_remove", + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/components/customer/CartReviewView.tsx", + "source_location": "L17", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_components_customer_cartreviewview", + "target": "ref_mui_icons_material_delete", + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/components/customer/CartReviewView.tsx", + "source_location": "L18", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_components_customer_cartreviewview", + "target": "ref_mui_icons_material_send", + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/components/customer/CartReviewView.tsx", + "source_location": "L19", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_components_customer_cartreviewview", + "target": "ref_mui_icons_material_receiptlong", + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/components/customer/CartReviewView.tsx", + "source_location": "L20", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_components_customer_cartreviewview", + "target": "src_data_menudata", + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/components/customer/CartReviewView.tsx", + "source_location": "L21", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_components_customer_cartreviewview", + "target": "src_data_menudata_menu_items", + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/components/customer/CartReviewView.tsx", + "source_location": "L21", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_components_customer_cartreviewview", + "target": "src_data_menudata", + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/components/customer/CartReviewView.tsx", + "source_location": "L22", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_components_customer_cartreviewview", + "target": "src_data_menudata_menuitem", + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/components/customer/CartReviewView.tsx", + "source_location": "L22", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_components_customer_cartreviewview", + "target": "src_components_common_statusbadge", + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/components/customer/CartReviewView.tsx", + "source_location": "L23", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_components_customer_cartreviewview", + "target": "src_components_common_statusbadge_statusbadge", + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/components/customer/CartReviewView.tsx", + "source_location": "L23", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_components_customer_cartreviewview", + "target": "src_components_customer_cartreviewview_cartreviewviewprops", + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/components/customer/CartReviewView.tsx", + "source_location": "L25", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_components_customer_cartreviewview", + "target": "src_components_customer_cartreviewview_cartreviewview", + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/components/customer/CartReviewView.tsx", + "source_location": "L32", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_components_customer_customizationmodal", + "target": "ref_react", + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/components/customer/CustomizationModal.tsx", + "source_location": "L1", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_components_customer_customizationmodal", + "target": "ref_mui_material", + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/components/customer/CustomizationModal.tsx", + "source_location": "L2", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_components_customer_customizationmodal", + "target": "src_data_menudata", + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/components/customer/CustomizationModal.tsx", + "source_location": "L17", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_components_customer_customizationmodal", + "target": "src_data_menudata_menuitem", + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/components/customer/CustomizationModal.tsx", + "source_location": "L17", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_components_customer_customizationmodal", + "target": "src_components_common_statusbadge", + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/components/customer/CustomizationModal.tsx", + "source_location": "L18", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_components_customer_customizationmodal", + "target": "src_components_common_statusbadge_statusbadge", + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/components/customer/CustomizationModal.tsx", + "source_location": "L18", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_components_customer_customizationmodal", + "target": "src_components_customer_customizationmodal_customizationmodalprops", + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/components/customer/CustomizationModal.tsx", + "source_location": "L20", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_components_customer_customizationmodal", + "target": "src_components_customer_customizationmodal_customizationmodal", + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/components/customer/CustomizationModal.tsx", + "source_location": "L27", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_components_customer_menubrowseview", + "target": "ref_react", + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/components/customer/MenuBrowseView.tsx", + "source_location": "L1", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_components_customer_menubrowseview", + "target": "ref_mui_material", + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/components/customer/MenuBrowseView.tsx", + "source_location": "L2", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_components_customer_menubrowseview", + "target": "ref_mui_icons_material_add", + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/components/customer/MenuBrowseView.tsx", + "source_location": "L17", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_components_customer_menubrowseview", + "target": "ref_mui_icons_material_remove", + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/components/customer/MenuBrowseView.tsx", + "source_location": "L18", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_components_customer_menubrowseview", + "target": "ref_mui_icons_material_search", + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/components/customer/MenuBrowseView.tsx", + "source_location": "L19", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_components_customer_menubrowseview", + "target": "ref_mui_icons_material_shoppingcart", + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/components/customer/MenuBrowseView.tsx", + "source_location": "L20", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_components_customer_menubrowseview", + "target": "ref_mui_icons_material_mic", + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/components/customer/MenuBrowseView.tsx", + "source_location": "L21", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_components_customer_menubrowseview", + "target": "ref_mui_icons_material_home", + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/components/customer/MenuBrowseView.tsx", + "source_location": "L22", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_components_customer_menubrowseview", + "target": "ref_mui_icons_material_menubook", + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/components/customer/MenuBrowseView.tsx", + "source_location": "L23", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_components_customer_menubrowseview", + "target": "ref_mui_icons_material_trackchanges", + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/components/customer/MenuBrowseView.tsx", + "source_location": "L24", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_components_customer_menubrowseview", + "target": "ref_mui_icons_material_autoawesome", + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/components/customer/MenuBrowseView.tsx", + "source_location": "L25", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_components_customer_menubrowseview", + "target": "ref_mui_icons_material_star", + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/components/customer/MenuBrowseView.tsx", + "source_location": "L26", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_components_customer_menubrowseview", + "target": "src_data_menudata", + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/components/customer/MenuBrowseView.tsx", + "source_location": "L27", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_components_customer_menubrowseview", + "target": "src_data_menudata_menu_items", + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/components/customer/MenuBrowseView.tsx", + "source_location": "L27", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_components_customer_menubrowseview", + "target": "src_data_menudata_categories", + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/components/customer/MenuBrowseView.tsx", + "source_location": "L27", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_components_customer_menubrowseview", + "target": "src_data_menudata", + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/components/customer/MenuBrowseView.tsx", + "source_location": "L28", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_components_customer_menubrowseview", + "target": "src_data_menudata_menuitem", + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/components/customer/MenuBrowseView.tsx", + "source_location": "L28", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_components_customer_menubrowseview", + "target": "src_data_menudata_categorytype", + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/components/customer/MenuBrowseView.tsx", + "source_location": "L28", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_components_customer_menubrowseview", + "target": "src_components_common_statusbadge", + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/components/customer/MenuBrowseView.tsx", + "source_location": "L29", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_components_customer_menubrowseview", + "target": "src_components_common_statusbadge_statusbadge", + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/components/customer/MenuBrowseView.tsx", + "source_location": "L29", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_components_customer_menubrowseview", + "target": "src_components_customer_menubrowseview_menubrowseviewprops", + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/components/customer/MenuBrowseView.tsx", + "source_location": "L31", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_components_customer_menubrowseview", + "target": "src_components_customer_menubrowseview_dietary_filters", + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/components/customer/MenuBrowseView.tsx", + "source_location": "L39", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_components_customer_menubrowseview", + "target": "src_components_customer_menubrowseview_spice_icons", + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/components/customer/MenuBrowseView.tsx", + "source_location": "L46", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_components_customer_menubrowseview", + "target": "src_components_customer_menubrowseview_menubrowseview", + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/components/customer/MenuBrowseView.tsx", + "source_location": "L53", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_components_customer_orderstatusview", + "target": "ref_react", + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/components/customer/OrderStatusView.tsx", + "source_location": "L1", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_components_customer_orderstatusview", + "target": "ref_mui_material", + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/components/customer/OrderStatusView.tsx", + "source_location": "L2", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_components_customer_orderstatusview", + "target": "ref_mui_icons_material_accesstime", + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/components/customer/OrderStatusView.tsx", + "source_location": "L15", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_components_customer_orderstatusview", + "target": "ref_mui_icons_material_notificationsactive", + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/components/customer/OrderStatusView.tsx", + "source_location": "L16", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_components_customer_orderstatusview", + "target": "ref_mui_icons_material_add", + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/components/customer/OrderStatusView.tsx", + "source_location": "L17", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_components_customer_orderstatusview", + "target": "ref_mui_icons_material_payment", + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/components/customer/OrderStatusView.tsx", + "source_location": "L18", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_components_customer_orderstatusview", + "target": "ref_mui_icons_material_checkcircle", + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/components/customer/OrderStatusView.tsx", + "source_location": "L19", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_components_customer_orderstatusview", + "target": "ref_mui_icons_material_restaurant", + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/components/customer/OrderStatusView.tsx", + "source_location": "L20", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_components_customer_orderstatusview", + "target": "ref_mui_icons_material_deliverydining", + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/components/customer/OrderStatusView.tsx", + "source_location": "L21", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_components_customer_orderstatusview", + "target": "ref_mui_icons_material_sentimentsatisfiedalt", + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/components/customer/OrderStatusView.tsx", + "source_location": "L22", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_components_customer_orderstatusview", + "target": "src_services_api", + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/components/customer/OrderStatusView.tsx", + "source_location": "L23", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_components_customer_orderstatusview", + "target": "src_services_api_api", + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/components/customer/OrderStatusView.tsx", + "source_location": "L23", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_components_customer_orderstatusview", + "target": "src_services_api_restrowebsocket", + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/components/customer/OrderStatusView.tsx", + "source_location": "L23", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_components_customer_orderstatusview", + "target": "src_services_api_subscribetowsevents", + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/components/customer/OrderStatusView.tsx", + "source_location": "L23", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_components_customer_orderstatusview", + "target": "src_components_customer_orderstatusview_orderstatusviewprops", + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/components/customer/OrderStatusView.tsx", + "source_location": "L25", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_components_customer_orderstatusview", + "target": "src_components_customer_orderstatusview_order_steps", + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/components/customer/OrderStatusView.tsx", + "source_location": "L29", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_components_customer_orderstatusview", + "target": "src_components_customer_orderstatusview_orderstatusview", + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/components/customer/OrderStatusView.tsx", + "source_location": "L56", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_components_customer_tablelandingview", + "target": "ref_react", + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/components/customer/TableLandingView.tsx", + "source_location": "L1", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_components_customer_tablelandingview", + "target": "ref_mui_material", + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/components/customer/TableLandingView.tsx", + "source_location": "L2", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_components_customer_tablelandingview", + "target": "ref_mui_icons_material_restaurantmenu", + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/components/customer/TableLandingView.tsx", + "source_location": "L12", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_components_customer_tablelandingview", + "target": "ref_mui_icons_material_autoawesome", + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/components/customer/TableLandingView.tsx", + "source_location": "L13", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_components_customer_tablelandingview", + "target": "ref_mui_icons_material_language", + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/components/customer/TableLandingView.tsx", + "source_location": "L14", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_components_customer_tablelandingview", + "target": "ref_mui_icons_material_translate", + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/components/customer/TableLandingView.tsx", + "source_location": "L15", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_components_customer_tablelandingview", + "target": "ref_mui_icons_material_arrowforward", + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/components/customer/TableLandingView.tsx", + "source_location": "L16", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_components_customer_tablelandingview", + "target": "ref_mui_icons_material_wifi", + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/components/customer/TableLandingView.tsx", + "source_location": "L17", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_components_customer_tablelandingview", + "target": "ref_mui_icons_material_mic", + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/components/customer/TableLandingView.tsx", + "source_location": "L18", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_components_customer_tablelandingview", + "target": "ref_mui_icons_material_lock", + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/components/customer/TableLandingView.tsx", + "source_location": "L19", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_components_customer_tablelandingview", + "target": "src_components_customer_tablelandingview_tablelandingviewprops", + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/components/customer/TableLandingView.tsx", + "source_location": "L21", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_components_customer_tablelandingview", + "target": "src_components_customer_tablelandingview_tablelandingview", + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/components/customer/TableLandingView.tsx", + "source_location": "L27", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_components_customer_voiceassistantmodal", + "target": "ref_react", + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/components/customer/VoiceAssistantModal.tsx", + "source_location": "L1", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_components_customer_voiceassistantmodal", + "target": "ref_mui_material", + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/components/customer/VoiceAssistantModal.tsx", + "source_location": "L2", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_components_customer_voiceassistantmodal", + "target": "ref_mui_icons_material_close", + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/components/customer/VoiceAssistantModal.tsx", + "source_location": "L14", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_components_customer_voiceassistantmodal", + "target": "ref_mui_icons_material_mic", + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/components/customer/VoiceAssistantModal.tsx", + "source_location": "L15", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_components_customer_voiceassistantmodal", + "target": "ref_mui_icons_material_stop", + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/components/customer/VoiceAssistantModal.tsx", + "source_location": "L16", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_components_customer_voiceassistantmodal", + "target": "ref_mui_icons_material_graphiceq", + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/components/customer/VoiceAssistantModal.tsx", + "source_location": "L17", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_components_customer_voiceassistantmodal", + "target": "ref_mui_icons_material_smarttoy", + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/components/customer/VoiceAssistantModal.tsx", + "source_location": "L18", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_components_customer_voiceassistantmodal", + "target": "ref_mui_icons_material_checkcircle", + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/components/customer/VoiceAssistantModal.tsx", + "source_location": "L19", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_components_customer_voiceassistantmodal", + "target": "ref_mui_icons_material_addshoppingcart", + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/components/customer/VoiceAssistantModal.tsx", + "source_location": "L20", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_components_customer_voiceassistantmodal", + "target": "ref_mui_icons_material_volumeup", + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/components/customer/VoiceAssistantModal.tsx", + "source_location": "L21", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_components_customer_voiceassistantmodal", + "target": "src_data_menudata", + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/components/customer/VoiceAssistantModal.tsx", + "source_location": "L22", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_components_customer_voiceassistantmodal", + "target": "src_data_menudata_menu_items", + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/components/customer/VoiceAssistantModal.tsx", + "source_location": "L22", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_components_customer_voiceassistantmodal", + "target": "src_data_menudata", + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/components/customer/VoiceAssistantModal.tsx", + "source_location": "L23", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_components_customer_voiceassistantmodal", + "target": "src_data_menudata_menuitem", + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/components/customer/VoiceAssistantModal.tsx", + "source_location": "L23", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_components_customer_voiceassistantmodal", + "target": "src_hooks_usespeechrecognition", + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/components/customer/VoiceAssistantModal.tsx", + "source_location": "L24", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_components_customer_voiceassistantmodal", + "target": "src_hooks_usespeechrecognition_usespeechrecognition", + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/components/customer/VoiceAssistantModal.tsx", + "source_location": "L24", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_components_customer_voiceassistantmodal", + "target": "src_hooks_usespeechsynthesis", + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/components/customer/VoiceAssistantModal.tsx", + "source_location": "L25", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_components_customer_voiceassistantmodal", + "target": "src_hooks_usespeechsynthesis_usespeechsynthesis", + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/components/customer/VoiceAssistantModal.tsx", + "source_location": "L25", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_components_customer_voiceassistantmodal", + "target": "src_hooks_usespeechrecognition", + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/components/customer/VoiceAssistantModal.tsx", + "source_location": "L26", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_components_customer_voiceassistantmodal", + "target": "src_hooks_usespeechrecognition_voicestate", + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/components/customer/VoiceAssistantModal.tsx", + "source_location": "L26", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_components_customer_voiceassistantmodal", + "target": "src_components_customer_voiceassistantmodal_detecteditem", + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/components/customer/VoiceAssistantModal.tsx", + "source_location": "L28", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_components_customer_voiceassistantmodal", + "target": "src_components_customer_voiceassistantmodal_voiceassistantmodalprops", + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/components/customer/VoiceAssistantModal.tsx", + "source_location": "L33", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_components_customer_voiceassistantmodal", + "target": "src_components_customer_voiceassistantmodal_parsetranscripttoitems", + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/components/customer/VoiceAssistantModal.tsx", + "source_location": "L40", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_components_customer_voiceassistantmodal", + "target": "src_components_customer_voiceassistantmodal_quick_commands", + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/components/customer/VoiceAssistantModal.tsx", + "source_location": "L69", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_components_customer_voiceassistantmodal", + "target": "src_components_customer_voiceassistantmodal_voiceassistantmodal", + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/components/customer/VoiceAssistantModal.tsx", + "source_location": "L77", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_components_customer_voiceassistantmodal_voiceassistantmodal", + "target": "src_components_customer_voiceassistantmodal_parsetranscripttoitems", + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/components/customer/VoiceAssistantModal.tsx", + "source_location": "L105", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_components_kds_kdskanban", + "target": "ref_react", + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/components/kds/KDSKanban.tsx", + "source_location": "L1", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_components_kds_kdskanban", + "target": "ref_mui_material", + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/components/kds/KDSKanban.tsx", + "source_location": "L2", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_components_kds_kdskanban", + "target": "ref_mui_icons_material_search", + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/components/kds/KDSKanban.tsx", + "source_location": "L13", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_components_kds_kdskanban", + "target": "ref_mui_icons_material_add", + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/components/kds/KDSKanban.tsx", + "source_location": "L14", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_components_kds_kdskanban", + "target": "ref_mui_icons_material_restaurantmenu", + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/components/kds/KDSKanban.tsx", + "source_location": "L15", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_components_kds_kdskanban", + "target": "src_types_index", + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/components/kds/KDSKanban.tsx", + "source_location": "L16", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_components_kds_kdskanban", + "target": "src_types_index_kdsorder", + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/components/kds/KDSKanban.tsx", + "source_location": "L16", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_components_kds_kdskanban", + "target": "src_types_index_orderstatus", + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/components/kds/KDSKanban.tsx", + "source_location": "L16", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_components_kds_kdskanban", + "target": "src_types_index_ordertype", + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/components/kds/KDSKanban.tsx", + "source_location": "L16", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_components_kds_kdskanban", + "target": "src_components_kds_kdsticketcard", + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/components/kds/KDSKanban.tsx", + "source_location": "L17", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_components_kds_kdskanban", + "target": "src_components_kds_kdsticketcard_kdsticketcard", + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/components/kds/KDSKanban.tsx", + "source_location": "L17", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_components_kds_kdskanban", + "target": "src_components_kds_kdskanban_kdskanbanprops", + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/components/kds/KDSKanban.tsx", + "source_location": "L19", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_components_kds_kdskanban", + "target": "src_components_kds_kdskanban_kdskanban", + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/components/kds/KDSKanban.tsx", + "source_location": "L26", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_components_kds_kdsticketcard", + "target": "ref_react", + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/components/kds/KDSTicketCard.tsx", + "source_location": "L1", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_components_kds_kdsticketcard", + "target": "ref_mui_material", + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/components/kds/KDSTicketCard.tsx", + "source_location": "L2", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_components_kds_kdsticketcard", + "target": "ref_mui_icons_material_accesstime", + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/components/kds/KDSTicketCard.tsx", + "source_location": "L15", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_components_kds_kdsticketcard", + "target": "ref_mui_icons_material_arrowforward", + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/components/kds/KDSTicketCard.tsx", + "source_location": "L16", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_components_kds_kdsticketcard", + "target": "ref_mui_icons_material_arrowback", + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/components/kds/KDSTicketCard.tsx", + "source_location": "L17", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_components_kds_kdsticketcard", + "target": "ref_mui_icons_material_checkcircle", + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/components/kds/KDSTicketCard.tsx", + "source_location": "L18", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_components_kds_kdsticketcard", + "target": "ref_mui_icons_material_priorityhigh", + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/components/kds/KDSTicketCard.tsx", + "source_location": "L19", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_components_kds_kdsticketcard", + "target": "src_types_index", + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/components/kds/KDSTicketCard.tsx", + "source_location": "L20", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_components_kds_kdsticketcard", + "target": "src_types_index_kdsorder", + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/components/kds/KDSTicketCard.tsx", + "source_location": "L20", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_components_kds_kdsticketcard", + "target": "src_types_index_orderstatus", + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/components/kds/KDSTicketCard.tsx", + "source_location": "L20", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_components_kds_kdsticketcard", + "target": "src_components_common_statusbadge", + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/components/kds/KDSTicketCard.tsx", + "source_location": "L21", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_components_kds_kdsticketcard", + "target": "src_components_common_statusbadge_statusbadge", + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/components/kds/KDSTicketCard.tsx", + "source_location": "L21", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_components_kds_kdsticketcard", + "target": "src_components_kds_kdsticketcard_kdsticketcardprops", + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/components/kds/KDSTicketCard.tsx", + "source_location": "L23", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_components_kds_kdsticketcard", + "target": "src_components_kds_kdsticketcard_kdsticketcard", + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/components/kds/KDSTicketCard.tsx", + "source_location": "L29", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_components_table_tablelandingview", + "target": "ref_react", + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/components/table/TableLandingView.tsx", + "source_location": "L1", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_components_table_tablelandingview", + "target": "ref_mui_material", + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/components/table/TableLandingView.tsx", + "source_location": "L2", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_components_table_tablelandingview", + "target": "ref_mui_icons_material_tablerestaurant", + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/components/table/TableLandingView.tsx", + "source_location": "L18", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_components_table_tablelandingview", + "target": "ref_mui_icons_material_notificationsactive", + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/components/table/TableLandingView.tsx", + "source_location": "L19", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_components_table_tablelandingview", + "target": "ref_mui_icons_material_receiptlong", + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/components/table/TableLandingView.tsx", + "source_location": "L20", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_components_table_tablelandingview", + "target": "ref_mui_icons_material_localoffer", + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/components/table/TableLandingView.tsx", + "source_location": "L21", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_components_table_tablelandingview", + "target": "ref_mui_icons_material_restaurant", + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/components/table/TableLandingView.tsx", + "source_location": "L22", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_components_table_tablelandingview", + "target": "ref_mui_icons_material_checkcircle", + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/components/table/TableLandingView.tsx", + "source_location": "L23", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_components_table_tablelandingview", + "target": "src_components_common_statusbadge", + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/components/table/TableLandingView.tsx", + "source_location": "L24", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_components_table_tablelandingview", + "target": "src_components_common_statusbadge_statusbadge", + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/components/table/TableLandingView.tsx", + "source_location": "L24", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_components_table_tablelandingview", + "target": "src_components_table_tablelandingview_tablelandingview", + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/components/table/TableLandingView.tsx", + "source_location": "L26", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_components_voice_voiceorderingview", + "target": "ref_react", + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/components/voice/VoiceOrderingView.tsx", + "source_location": "L1", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_components_voice_voiceorderingview", + "target": "ref_mui_material", + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/components/voice/VoiceOrderingView.tsx", + "source_location": "L2", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_components_voice_voiceorderingview", + "target": "ref_mui_icons_material_mic", + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/components/voice/VoiceOrderingView.tsx", + "source_location": "L14", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_components_voice_voiceorderingview", + "target": "ref_mui_icons_material_graphiceq", + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/components/voice/VoiceOrderingView.tsx", + "source_location": "L15", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_components_voice_voiceorderingview", + "target": "ref_mui_icons_material_smarttoy", + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/components/voice/VoiceOrderingView.tsx", + "source_location": "L16", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_components_voice_voiceorderingview", + "target": "ref_mui_icons_material_addshoppingcart", + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/components/voice/VoiceOrderingView.tsx", + "source_location": "L17", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_components_voice_voiceorderingview", + "target": "ref_mui_icons_material_checkcircleoutlined", + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/components/voice/VoiceOrderingView.tsx", + "source_location": "L18", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_components_voice_voiceorderingview", + "target": "src_types_index", + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/components/voice/VoiceOrderingView.tsx", + "source_location": "L19", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_components_voice_voiceorderingview", + "target": "src_types_index_voicecommandsuggestion", + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/components/voice/VoiceOrderingView.tsx", + "source_location": "L19", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_components_voice_voiceorderingview", + "target": "src_components_voice_voiceorderingview_voiceorderingviewprops", + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/components/voice/VoiceOrderingView.tsx", + "source_location": "L21", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_components_voice_voiceorderingview", + "target": "src_components_voice_voiceorderingview_voiceorderingview", + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/components/voice/VoiceOrderingView.tsx", + "source_location": "L25", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_data_menudata", + "target": "src_data_menudata_menuitem", + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/data/menuData.ts", + "source_location": "L1", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_data_menudata", + "target": "src_data_menudata_menu_items", + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/data/menuData.ts", + "source_location": "L17", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_data_menudata", + "target": "src_data_menudata_categories", + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/data/menuData.ts", + "source_location": "L375", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_data_menudata", + "target": "src_data_menudata_categorytype", + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/data/menuData.ts", + "source_location": "L376", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_hooks_usespeechrecognition", + "target": "ref_react", + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/hooks/useSpeechRecognition.ts", + "source_location": "L1", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_hooks_usespeechrecognition", + "target": "src_hooks_usespeechrecognition_speechrecognitionevent", + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/hooks/useSpeechRecognition.ts", + "source_location": "L3", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_hooks_usespeechrecognition", + "target": "src_hooks_usespeechrecognition_speechrecognitionerrorevent", + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/hooks/useSpeechRecognition.ts", + "source_location": "L8", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_hooks_usespeechrecognition", + "target": "src_hooks_usespeechrecognition_ispeechrecognition", + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/hooks/useSpeechRecognition.ts", + "source_location": "L12", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_hooks_usespeechrecognition_ispeechrecognition", + "target": "src_hooks_usespeechrecognition_ispeechrecognition_start", + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "src/hooks/useSpeechRecognition.ts", + "source_location": "L17", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_hooks_usespeechrecognition_ispeechrecognition", + "target": "src_hooks_usespeechrecognition_ispeechrecognition_stop", + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "src/hooks/useSpeechRecognition.ts", + "source_location": "L18", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_hooks_usespeechrecognition_ispeechrecognition", + "target": "src_hooks_usespeechrecognition_ispeechrecognition_abort", + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "src/hooks/useSpeechRecognition.ts", + "source_location": "L19", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_hooks_usespeechrecognition", + "target": "src_hooks_usespeechrecognition_window", + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/hooks/useSpeechRecognition.ts", + "source_location": "L27", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_hooks_usespeechrecognition", + "target": "src_hooks_usespeechrecognition_voicestate", + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/hooks/useSpeechRecognition.ts", + "source_location": "L33", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_hooks_usespeechrecognition", + "target": "src_hooks_usespeechrecognition_usespeechrecognitionreturn", + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/hooks/useSpeechRecognition.ts", + "source_location": "L35", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_hooks_usespeechrecognition", + "target": "src_hooks_usespeechrecognition_usespeechrecognition", + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/hooks/useSpeechRecognition.ts", + "source_location": "L46", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_hooks_usespeechrecognition_usespeechrecognition", + "target": "src_hooks_usespeechrecognition_ispeechrecognition_abort", + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/hooks/useSpeechRecognition.ts", + "source_location": "L59", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_hooks_usespeechrecognition_usespeechrecognition", + "target": "src_hooks_usespeechrecognition_ispeechrecognition_start", + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/hooks/useSpeechRecognition.ts", + "source_location": "L124", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_hooks_usespeechrecognition_usespeechrecognition", + "target": "src_hooks_usespeechrecognition_ispeechrecognition_stop", + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/hooks/useSpeechRecognition.ts", + "source_location": "L132", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_hooks_usespeechsynthesis", + "target": "ref_react", + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/hooks/useSpeechSynthesis.ts", + "source_location": "L1", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_hooks_usespeechsynthesis", + "target": "src_hooks_usespeechrecognition", + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/hooks/useSpeechSynthesis.ts", + "source_location": "L2", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_hooks_usespeechsynthesis", + "target": "src_hooks_usespeechrecognition_voicestate", + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/hooks/useSpeechSynthesis.ts", + "source_location": "L2", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_hooks_usespeechsynthesis", + "target": "src_hooks_usespeechsynthesis_usespeechsynthesisreturn", + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/hooks/useSpeechSynthesis.ts", + "source_location": "L4", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_hooks_usespeechsynthesis", + "target": "src_hooks_usespeechsynthesis_usespeechsynthesis", + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/hooks/useSpeechSynthesis.ts", + "source_location": "L10", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_main", + "target": "ref_react", + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/main.tsx", + "source_location": "L1", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_main", + "target": "ref_react_dom_client", + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/main.tsx", + "source_location": "L2", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_main", + "target": "src_index", + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/main.tsx", + "source_location": "L3", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_main", + "target": "src_app", + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/main.tsx", + "source_location": "L4", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_services_api", + "target": "src_data_menudata", + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/services/api.ts", + "source_location": "L1", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_services_api", + "target": "src_data_menudata_menuitem", + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/services/api.ts", + "source_location": "L1", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_services_api", + "target": "src_data_menudata_menu_items", + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/services/api.ts", + "source_location": "L1", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_services_api", + "target": "src_services_api_getaccesstoken", + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/services/api.ts", + "source_location": "L7", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_services_api", + "target": "src_services_api_getrefreshtoken", + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/services/api.ts", + "source_location": "L8", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_services_api", + "target": "src_services_api_settokens", + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/services/api.ts", + "source_location": "L9", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_services_api", + "target": "src_services_api_cleartokens", + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/services/api.ts", + "source_location": "L13", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_services_api", + "target": "src_services_api_getcustomertoken", + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/services/api.ts", + "source_location": "L18", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_services_api", + "target": "src_services_api_getcustomersessionid", + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/services/api.ts", + "source_location": "L19", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_services_api", + "target": "src_services_api_setcustomersession", + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/services/api.ts", + "source_location": "L20", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_services_api", + "target": "src_services_api_clearcustomersession", + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/services/api.ts", + "source_location": "L26", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_services_api", + "target": "src_services_api_getbackendmenuid", + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/services/api.ts", + "source_location": "L34", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_services_api", + "target": "src_services_api_getfrontendmenuitem", + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/services/api.ts", + "source_location": "L39", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_services_api", + "target": "src_services_api_isdemomode", + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/services/api.ts", + "source_location": "L45", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_services_api", + "target": "src_services_api_setdemomodechangecallback", + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/services/api.ts", + "source_location": "L48", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_services_api", + "target": "src_services_api_triggerdemomode", + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/services/api.ts", + "source_location": "L52", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_services_api", + "target": "src_services_api_mockdb", + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/services/api.ts", + "source_location": "L62", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_services_api", + "target": "src_services_api_apirequest", + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/services/api.ts", + "source_location": "L107", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_services_api", + "target": "src_services_api_handlemockrequest", + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/services/api.ts", + "source_location": "L159", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_services_api", + "target": "src_services_api_wslisteners", + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/services/api.ts", + "source_location": "L540", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_services_api", + "target": "src_services_api_subscribetowsevents", + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/services/api.ts", + "source_location": "L541", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_services_api", + "target": "src_services_api_notifywslisteners", + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/services/api.ts", + "source_location": "L548", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_services_api", + "target": "src_services_api_restrowebsocket", + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/services/api.ts", + "source_location": "L558", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_services_api_restrowebsocket", + "target": "src_services_api_restrowebsocket_constructor", + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "src/services/api.ts", + "source_location": "L564", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_services_api_restrowebsocket", + "target": "src_services_api_restrowebsocket_connect", + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "src/services/api.ts", + "source_location": "L574", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_services_api_restrowebsocket", + "target": "src_services_api_restrowebsocket_close", + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "src/services/api.ts", + "source_location": "L608", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_services_api", + "target": "src_services_api_api", + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/services/api.ts", + "source_location": "L619", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_services_api_apirequest", + "target": "src_services_api_getaccesstoken", + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/services/api.ts", + "source_location": "L112", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_services_api_apirequest", + "target": "src_services_api_getcustomertoken", + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/services/api.ts", + "source_location": "L118", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_services_api_apirequest", + "target": "src_services_api_triggerdemomode", + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/services/api.ts", + "source_location": "L130", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_services_api_apirequest", + "target": "src_services_api_cleartokens", + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/services/api.ts", + "source_location": "L134", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_services_api_apirequest", + "target": "src_services_api_handlemockrequest", + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/services/api.ts", + "source_location": "L154", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_services_api_handlemockrequest", + "target": "src_services_api_getcustomersessionid", + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/services/api.ts", + "source_location": "L221", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_services_api_handlemockrequest", + "target": "src_services_api_getfrontendmenuitem", + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/services/api.ts", + "source_location": "L225", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_services_api_handlemockrequest", + "target": "src_services_api_notifywslisteners", + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/services/api.ts", + "source_location": "L349", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_services_api_restrowebsocket_constructor", + "target": "src_services_api_getaccesstoken", + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/services/api.ts", + "source_location": "L566", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_services_api_restrowebsocket_constructor", + "target": "src_services_api_getcustomertoken", + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/services/api.ts", + "source_location": "L569", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_services_api_restrowebsocket_connect", + "target": "src_services_api_notifywslisteners", + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/services/api.ts", + "source_location": "L586", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_theme_theme", + "target": "ref_mui_material_styles", + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/theme/theme.ts", + "source_location": "L1", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_theme_theme", + "target": "src_theme_theme_theme", + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/theme/theme.ts", + "source_location": "L3", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_types_index", + "target": "src_types_index_orderstatus", + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/types/index.ts", + "source_location": "L1", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_types_index", + "target": "src_types_index_ordertype", + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/types/index.ts", + "source_location": "L2", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_types_index", + "target": "src_types_index_orderitem", + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/types/index.ts", + "source_location": "L4", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_types_index", + "target": "src_types_index_kdsorder", + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/types/index.ts", + "source_location": "L14", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_types_index", + "target": "src_types_index_analyticsmetric", + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/types/index.ts", + "source_location": "L29", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_types_index", + "target": "src_types_index_dishperformance", + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/types/index.ts", + "source_location": "L37", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_types_index", + "target": "src_types_index_voicecommandsuggestion", + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/types/index.ts", + "source_location": "L47", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "tsconfig_app", + "target": "tsconfig_app_compileroptions", + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tsconfig.app.json", + "source_location": "L2", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "tsconfig_app_compileroptions", + "target": "tsconfig_app_compileroptions_tsbuildinfofile", + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tsconfig.app.json", + "source_location": "L3", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "tsconfig_app_compileroptions", + "target": "tsconfig_app_compileroptions_target", + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tsconfig.app.json", + "source_location": "L4", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "tsconfig_app_compileroptions", + "target": "tsconfig_app_compileroptions_lib", + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tsconfig.app.json", + "source_location": "L5", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "tsconfig_app_compileroptions_lib", + "target": "tsconfig_app_json_ref_es2023", + "relation": "extends", + "confidence": "EXTRACTED", + "source_file": "tsconfig.app.json", + "source_location": "L5", + "weight": 1.0, + "context": "import", + "_origin": "ast" + }, + { + "source": "tsconfig_app_compileroptions_lib", + "target": "ref_dom", + "relation": "extends", + "confidence": "EXTRACTED", + "source_file": "tsconfig.app.json", + "source_location": "L5", + "weight": 1.0, + "context": "import", + "_origin": "ast" + }, + { + "source": "tsconfig_app_compileroptions", + "target": "tsconfig_app_compileroptions_module", + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tsconfig.app.json", + "source_location": "L6", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "tsconfig_app_compileroptions", + "target": "tsconfig_app_compileroptions_types", + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tsconfig.app.json", + "source_location": "L7", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "tsconfig_app_compileroptions_types", + "target": "ref_vite_client", + "relation": "extends", + "confidence": "EXTRACTED", + "source_file": "tsconfig.app.json", + "source_location": "L7", + "weight": 1.0, + "context": "import", + "_origin": "ast" + }, + { + "source": "tsconfig_app_compileroptions", + "target": "tsconfig_app_compileroptions_allowarbitraryextensions", + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tsconfig.app.json", + "source_location": "L8", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "tsconfig_app_compileroptions", + "target": "tsconfig_app_compileroptions_skiplibcheck", + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tsconfig.app.json", + "source_location": "L9", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "tsconfig_app_compileroptions", + "target": "tsconfig_app_compileroptions_moduleresolution", + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tsconfig.app.json", + "source_location": "L12", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "tsconfig_app_compileroptions", + "target": "tsconfig_app_compileroptions_allowimportingtsextensions", + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tsconfig.app.json", + "source_location": "L13", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "tsconfig_app_compileroptions", + "target": "tsconfig_app_compileroptions_verbatimmodulesyntax", + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tsconfig.app.json", + "source_location": "L14", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "tsconfig_app_compileroptions", + "target": "tsconfig_app_compileroptions_moduledetection", + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tsconfig.app.json", + "source_location": "L15", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "tsconfig_app_compileroptions", + "target": "tsconfig_app_compileroptions_noemit", + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tsconfig.app.json", + "source_location": "L16", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "tsconfig_app_compileroptions", + "target": "tsconfig_app_compileroptions_jsx", + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tsconfig.app.json", + "source_location": "L17", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "tsconfig_app_compileroptions", + "target": "tsconfig_app_compileroptions_nounusedlocals", + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tsconfig.app.json", + "source_location": "L20", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "tsconfig_app_compileroptions", + "target": "tsconfig_app_compileroptions_nounusedparameters", + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tsconfig.app.json", + "source_location": "L21", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "tsconfig_app_compileroptions", + "target": "tsconfig_app_compileroptions_erasablesyntaxonly", + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tsconfig.app.json", + "source_location": "L22", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "tsconfig_app_compileroptions", + "target": "tsconfig_app_compileroptions_nofallthroughcasesinswitch", + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tsconfig.app.json", + "source_location": "L23", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "tsconfig_app", + "target": "tsconfig_app_include", + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tsconfig.app.json", + "source_location": "L25", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "tsconfig_app_include", + "target": "ref_src", + "relation": "extends", + "confidence": "EXTRACTED", + "source_file": "tsconfig.app.json", + "source_location": "L25", + "weight": 1.0, + "context": "import", + "_origin": "ast" + }, + { + "source": "tsconfig", + "target": "tsconfig_files", + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tsconfig.json", + "source_location": "L2", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "tsconfig", + "target": "tsconfig_references", + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tsconfig.json", + "source_location": "L3", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "tsconfig_node", + "target": "tsconfig_node_compileroptions", + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tsconfig.node.json", + "source_location": "L2", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "tsconfig_node_compileroptions", + "target": "tsconfig_node_compileroptions_tsbuildinfofile", + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tsconfig.node.json", + "source_location": "L3", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "tsconfig_node_compileroptions", + "target": "tsconfig_node_compileroptions_target", + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tsconfig.node.json", + "source_location": "L4", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "tsconfig_node_compileroptions", + "target": "tsconfig_node_compileroptions_lib", + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tsconfig.node.json", + "source_location": "L5", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "tsconfig_node_compileroptions_lib", + "target": "tsconfig_node_json_ref_es2023", + "relation": "extends", + "confidence": "EXTRACTED", + "source_file": "tsconfig.node.json", + "source_location": "L5", + "weight": 1.0, + "context": "import", + "_origin": "ast" + }, + { + "source": "tsconfig_node_compileroptions", + "target": "tsconfig_node_compileroptions_types", + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tsconfig.node.json", + "source_location": "L6", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "tsconfig_node_compileroptions_types", + "target": "ref_node", + "relation": "extends", + "confidence": "EXTRACTED", + "source_file": "tsconfig.node.json", + "source_location": "L6", + "weight": 1.0, + "context": "import", + "_origin": "ast" + }, + { + "source": "tsconfig_node_compileroptions", + "target": "tsconfig_node_compileroptions_skiplibcheck", + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tsconfig.node.json", + "source_location": "L7", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "tsconfig_node_compileroptions", + "target": "tsconfig_node_compileroptions_module", + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tsconfig.node.json", + "source_location": "L10", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "tsconfig_node_compileroptions", + "target": "tsconfig_node_compileroptions_allowimportingtsextensions", + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tsconfig.node.json", + "source_location": "L11", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "tsconfig_node_compileroptions", + "target": "tsconfig_node_compileroptions_verbatimmodulesyntax", + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tsconfig.node.json", + "source_location": "L12", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "tsconfig_node_compileroptions", + "target": "tsconfig_node_compileroptions_moduledetection", + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tsconfig.node.json", + "source_location": "L13", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "tsconfig_node_compileroptions", + "target": "tsconfig_node_compileroptions_noemit", + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tsconfig.node.json", + "source_location": "L14", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "tsconfig_node_compileroptions", + "target": "tsconfig_node_compileroptions_nounusedlocals", + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tsconfig.node.json", + "source_location": "L17", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "tsconfig_node_compileroptions", + "target": "tsconfig_node_compileroptions_nounusedparameters", + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tsconfig.node.json", + "source_location": "L18", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "tsconfig_node_compileroptions", + "target": "tsconfig_node_compileroptions_erasablesyntaxonly", + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tsconfig.node.json", + "source_location": "L19", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "tsconfig_node_compileroptions", + "target": "tsconfig_node_compileroptions_nofallthroughcasesinswitch", + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tsconfig.node.json", + "source_location": "L20", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "tsconfig_node", + "target": "tsconfig_node_include", + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tsconfig.node.json", + "source_location": "L22", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "tsconfig_node_include", + "target": "ref_vite_config_ts", + "relation": "extends", + "confidence": "EXTRACTED", + "source_file": "tsconfig.node.json", + "source_location": "L22", + "weight": 1.0, + "context": "import", + "_origin": "ast" + }, + { + "source": "vite_config", + "target": "ref_vite", + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "vite.config.ts", + "source_location": "L1", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "vite_config", + "target": "ref_vitejs_plugin_react", + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "vite.config.ts", + "source_location": "L2", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_main", + "target": "src_app_app", + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/main.tsx", + "source_location": "L4", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_components_admin_admindesktopshell_admindesktopshellprops", + "target": "src_types_index_kdsorder", + "relation": "references", + "context": "field", + "confidence": "EXTRACTED", + "source_file": "src/components/admin/AdminDesktopShell.tsx", + "source_location": "L47", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_components_admin_admindesktopshell_admindesktopshellprops", + "target": "src_types_index_orderstatus", + "relation": "references", + "context": "field", + "confidence": "EXTRACTED", + "source_file": "src/components/admin/AdminDesktopShell.tsx", + "source_location": "L48", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_components_common_statusbadge_statusbadgeprops", + "target": "src_types_index_orderstatus", + "relation": "references", + "context": "field", + "confidence": "EXTRACTED", + "source_file": "src/components/common/StatusBadge.tsx", + "source_location": "L6", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_components_common_statusbadge_statusbadgeprops", + "target": "src_types_index_ordertype", + "relation": "references", + "context": "field", + "confidence": "EXTRACTED", + "source_file": "src/components/common/StatusBadge.tsx", + "source_location": "L7", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_components_customer_customizationmodal_customizationmodalprops", + "target": "src_data_menudata_menuitem", + "relation": "references", + "context": "field", + "confidence": "EXTRACTED", + "source_file": "src/components/customer/CustomizationModal.tsx", + "source_location": "L22", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_components_customer_menubrowseview_menubrowseviewprops", + "target": "src_data_menudata_menuitem", + "relation": "references", + "context": "field", + "confidence": "EXTRACTED", + "source_file": "src/components/customer/MenuBrowseView.tsx", + "source_location": "L34", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_components_customer_voiceassistantmodal_detecteditem", + "target": "src_data_menudata_menuitem", + "relation": "references", + "context": "field", + "confidence": "EXTRACTED", + "source_file": "src/components/customer/VoiceAssistantModal.tsx", + "source_location": "L29", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_components_kds_kdskanban_kdskanbanprops", + "target": "src_types_index_kdsorder", + "relation": "references", + "context": "field", + "confidence": "EXTRACTED", + "source_file": "src/components/kds/KDSKanban.tsx", + "source_location": "L20", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_components_kds_kdskanban_kdskanbanprops", + "target": "src_types_index_orderstatus", + "relation": "references", + "context": "field", + "confidence": "EXTRACTED", + "source_file": "src/components/kds/KDSKanban.tsx", + "source_location": "L21", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_components_kds_kdsticketcard_kdsticketcardprops", + "target": "src_types_index_kdsorder", + "relation": "references", + "context": "field", + "confidence": "EXTRACTED", + "source_file": "src/components/kds/KDSTicketCard.tsx", + "source_location": "L24", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_components_kds_kdsticketcard_kdsticketcardprops", + "target": "src_types_index_orderstatus", + "relation": "references", + "context": "field", + "confidence": "EXTRACTED", + "source_file": "src/components/kds/KDSTicketCard.tsx", + "source_location": "L25", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_app_app", + "target": "src_services_api_setdemomodechangecallback", + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "src/App.tsx", + "source_location": "L51", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_app_app", + "target": "src_services_api_subscribetowsevents", + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "src/App.tsx", + "source_location": "L106", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_app_app", + "target": "src_services_api_getbackendmenuid", + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "src/App.tsx", + "source_location": "L149", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_components_customer_orderstatusview_orderstatusview", + "target": "src_services_api_subscribetowsevents", + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "src/components/customer/OrderStatusView.tsx", + "source_location": "L92", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_components_customer_voiceassistantmodal_voiceassistantmodal", + "target": "src_hooks_usespeechrecognition_usespeechrecognition", + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "src/components/customer/VoiceAssistantModal.tsx", + "source_location": "L96", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_components_customer_voiceassistantmodal_voiceassistantmodal", + "target": "src_hooks_usespeechsynthesis_usespeechsynthesis", + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "src/components/customer/VoiceAssistantModal.tsx", + "source_location": "L98", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_app_app", + "target": "src_services_api_restrowebsocket_connect", + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "src/App.tsx", + "source_location": "L103", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_app_app", + "target": "src_services_api_restrowebsocket_close", + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "src/App.tsx", + "source_location": "L113", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_components_customer_cartreviewview_cartreviewview", + "target": "src_data_menudata_menu_items", + "relation": "references", + "context": "call", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "src/components/customer/CartReviewView.tsx", + "source_location": "L42", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_components_customer_menubrowseview_menubrowseview", + "target": "src_data_menudata_menu_items", + "relation": "references", + "context": "call", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "src/components/customer/MenuBrowseView.tsx", + "source_location": "L67", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_components_customer_orderstatusview_orderstatusview", + "target": "src_services_api_restrowebsocket_connect", + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "src/components/customer/OrderStatusView.tsx", + "source_location": "L90", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_components_customer_orderstatusview_orderstatusview", + "target": "src_services_api_restrowebsocket_close", + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "src/components/customer/OrderStatusView.tsx", + "source_location": "L99", + "weight": 1.0, + "_origin": "ast" + }, + { + "source": "src_services_api_getfrontendmenuitem", + "target": "src_data_menudata_menu_items", + "relation": "references", + "context": "call", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "src/services/api.ts", + "source_location": "L41", + "weight": 1.0, + "_origin": "ast" + } + ], + "hyperedges": [], + "input_tokens": 0, + "output_tokens": 0 +} \ No newline at end of file diff --git a/graphify-out/.graphify_labels.json b/graphify-out/.graphify_labels.json new file mode 100644 index 0000000..a462944 --- /dev/null +++ b/graphify-out/.graphify_labels.json @@ -0,0 +1 @@ +{"0": "App.tsx", "1": "react", "2": "package.json", "3": "compilerOptions", "4": "devDependencies", "5": "compilerOptions", "6": "VoiceAssistantModal.tsx", "7": "AdminDesktopShell.tsx", "8": "index.ts", "9": "tsconfig.json", "10": "vite.config.ts"} \ No newline at end of file diff --git a/graphify-out/.graphify_labels.json.sig b/graphify-out/.graphify_labels.json.sig new file mode 100644 index 0000000..fa70bfd --- /dev/null +++ b/graphify-out/.graphify_labels.json.sig @@ -0,0 +1 @@ +{"0": "2fd27a4e049e8550", "1": "f766b666900956c7", "2": "be894a9bb6829423", "3": "5e1b3e45a5cffb50", "4": "8f1d803994b9793e", "5": "fe9accd04c14e54c", "6": "d1b0c48243d20e7d", "7": "8b8a887a71cbef13", "8": "15691021ccd947f3", "9": "7256026fe64f6f6a", "10": "b5cc399b9462978b"} \ No newline at end of file diff --git a/graphify-out/.graphify_python b/graphify-out/.graphify_python new file mode 100644 index 0000000..de7ebb9 --- /dev/null +++ b/graphify-out/.graphify_python @@ -0,0 +1 @@ +C:\Users\hp\AppData\Local\Programs\Python\Python312\python.exe \ No newline at end of file diff --git a/graphify-out/.graphify_root b/graphify-out/.graphify_root new file mode 100644 index 0000000..5e02295 --- /dev/null +++ b/graphify-out/.graphify_root @@ -0,0 +1 @@ +C:\Users\hp\Desktop\projects\restroAI \ No newline at end of file diff --git a/graphify-out/.graphify_semantic.json b/graphify-out/.graphify_semantic.json new file mode 100644 index 0000000..91d9db7 --- /dev/null +++ b/graphify-out/.graphify_semantic.json @@ -0,0 +1,7 @@ +{ + "nodes": [], + "edges": [], + "hyperedges": [], + "input_tokens": 0, + "output_tokens": 0 +} \ No newline at end of file diff --git a/graphify-out/GRAPH_REPORT.md b/graphify-out/GRAPH_REPORT.md new file mode 100644 index 0000000..69c4804 --- /dev/null +++ b/graphify-out/GRAPH_REPORT.md @@ -0,0 +1,109 @@ +# Graph Report - C:\Users\hp\Desktop\projects\restroAI (2026-08-05) + +## Corpus Check +- cluster-only mode — file stats not available + +## Summary +- 222 nodes · 385 edges · 11 communities (10 shown, 1 thin omitted) +- Extraction: 100% EXTRACTED · 0% INFERRED · 0% AMBIGUOUS +- Token cost: 0 input · 0 output + +## Community Hubs (Navigation) +- App.tsx +- react +- package.json +- compilerOptions +- devDependencies +- compilerOptions +- VoiceAssistantModal.tsx +- AdminDesktopShell.tsx +- index.ts +- tsconfig.json + +## God Nodes (most connected - your core abstractions) +1. `react` - 28 edges +2. `compilerOptions` - 18 edges +3. `compilerOptions` - 15 edges +4. `api` - 13 edges +5. `MenuItem` - 10 edges +6. `OrderStatus` - 10 edges +7. `MENU_ITEMS` - 9 edges +8. `App()` - 8 edges +9. `KDSOrder` - 8 edges +10. `StatusBadge()` - 7 edges + +## Surprising Connections (you probably didn't know these) +- `plugins` --extends--> `typescript` [EXTRACTED] + .oxlintrc.json → package.json +- `DetectedItem` --references--> `MenuItem` [EXTRACTED] + src/components/customer/VoiceAssistantModal.tsx → src/data/menuData.ts +- `CustomizationModalProps` --references--> `MenuItem` [EXTRACTED] + src/components/customer/CustomizationModal.tsx → src/data/menuData.ts +- `MenuBrowseViewProps` --references--> `MenuItem` [EXTRACTED] + src/components/customer/MenuBrowseView.tsx → src/data/menuData.ts +- `getFrontendMenuItem()` --references--> `MENU_ITEMS` [EXTRACTED] + src/services/api.ts → src/data/menuData.ts + +## Import Cycles +- None detected. + +## Communities (11 total, 1 thin omitted) + +### Community 0 - "App.tsx" +Cohesion: 0.08 +Nodes (30): App(), CustomerView, getTableNumFromUrl(), StaffLoginModal(), StaffLoginModalProps, BillPaymentView(), BillPaymentViewProps, CustomizationModal() (+22 more) + +### Community 1 - "react" +Cohesion: 0.16 +Nodes (14): react, NavigationProps, StatusBadge(), CartReviewView(), CartReviewViewProps, CustomizationModalProps, DIETARY_FILTERS, MenuBrowseView() (+6 more) + +### Community 2 - "package.json" +Cohesion: 0.08 +Nodes (23): @emotion/react, @emotion/styled, @mui/icons-material, @mui/material, dependencies, @emotion/react, @emotion/styled, @mui/icons-material (+15 more) + +### Community 3 - "compilerOptions" +Cohesion: 0.08 +Nodes (23): DOM, src, vite/client, compilerOptions, allowArbitraryExtensions, allowImportingTsExtensions, erasableSyntaxOnly, jsx (+15 more) + +### Community 4 - "devDependencies" +Cohesion: 0.09 +Nodes (22): oxlint, plugins, rules, react/only-export-components, react/rules-of-hooks, $schema, devDependencies, oxlint (+14 more) + +### Community 5 - "compilerOptions" +Cohesion: 0.10 +Nodes (19): node, vite.config.ts, compilerOptions, allowImportingTsExtensions, erasableSyntaxOnly, lib, module, moduleDetection (+11 more) + +### Community 6 - "VoiceAssistantModal.tsx" +Cohesion: 0.16 +Nodes (14): DetectedItem, parseTranscriptToItems(), QUICK_COMMANDS, VoiceAssistantModal(), VoiceAssistantModalProps, ISpeechRecognition, SpeechRecognitionErrorEvent, SpeechRecognitionEvent (+6 more) + +### Community 7 - "AdminDesktopShell.tsx" +Cohesion: 0.17 +Nodes (12): AdminDesktopShell(), TabType, BillingManagerView(), FeedbackInboxView(), InventoryView(), ReservationsView(), StaffShiftsView(), SuppliersView() (+4 more) + +### Community 8 - "index.ts" +Cohesion: 0.20 +Nodes (14): AdminDesktopShellProps, StatusBadgeProps, KDSKanbanProps, KDSTicketCard(), KDSTicketCardProps, VoiceOrderingView(), VoiceOrderingViewProps, AnalyticsMetric (+6 more) + +## Knowledge Gaps +- **85 isolated node(s):** `$schema`, `oxc`, `react/rules-of-hooks`, `warn`, `name` (+80 more) + These have ≤1 connection - possible missing edges or undocumented components. +- **1 thin communities (<3 nodes) omitted from report** — run `graphify query` to explore isolated nodes. + +## Suggested Questions +_Questions this graph is uniquely positioned to answer:_ + +- **Why does `react` connect `react` to `App.tsx`, `devDependencies`, `VoiceAssistantModal.tsx`, `AdminDesktopShell.tsx`, `index.ts`?** + _High betweenness centrality (0.333) - this node is a cross-community bridge._ +- **Why does `plugins` connect `devDependencies` to `react`?** + _High betweenness centrality (0.252) - this node is a cross-community bridge._ +- **Why does `devDependencies` connect `devDependencies` to `package.json`?** + _High betweenness centrality (0.217) - this node is a cross-community bridge._ +- **What connects `$schema`, `oxc`, `react/rules-of-hooks` to the rest of the system?** + _85 weakly-connected nodes found - possible documentation gaps or missing edges._ +- **Should `App.tsx` be split into smaller, more focused modules?** + _Cohesion score 0.08080808080808081 - nodes in this community are weakly interconnected._ +- **Should `package.json` be split into smaller, more focused modules?** + _Cohesion score 0.08333333333333333 - nodes in this community are weakly interconnected._ +- **Should `compilerOptions` be split into smaller, more focused modules?** + _Cohesion score 0.08333333333333333 - nodes in this community are weakly interconnected._ \ No newline at end of file diff --git a/graphify-out/cache/ast/v0.9.33/08daa6909612d5d3b296975716815b9c19448c5c134ea6705ad54c1338b3eb3a.json b/graphify-out/cache/ast/v0.9.33/08daa6909612d5d3b296975716815b9c19448c5c134ea6705ad54c1338b3eb3a.json new file mode 100644 index 0000000..d5afe9e --- /dev/null +++ b/graphify-out/cache/ast/v0.9.33/08daa6909612d5d3b296975716815b9c19448c5c134ea6705ad54c1338b3eb3a.json @@ -0,0 +1 @@ +{"nodes": [{"id": "$graphify-root$_tsconfig_app_json", "label": "tsconfig.app.json", "file_type": "code", "source_file": "tsconfig.app.json", "source_location": "L1"}, {"id": "$graphify-root$_tsconfig_app_compileroptions", "label": "compilerOptions", "file_type": "code", "source_file": "tsconfig.app.json", "source_location": "L2"}, {"id": "$graphify-root$_tsconfig_app_compileroptions_tsbuildinfofile", "label": "tsBuildInfoFile", "file_type": "code", "source_file": "tsconfig.app.json", "source_location": "L3"}, {"id": "$graphify-root$_tsconfig_app_compileroptions_target", "label": "target", "file_type": "code", "source_file": "tsconfig.app.json", "source_location": "L4"}, {"id": "$graphify-root$_tsconfig_app_compileroptions_lib", "label": "lib", "file_type": "code", "source_file": "tsconfig.app.json", "source_location": "L5"}, {"id": "ref_es2023", "label": "ES2023", "file_type": "concept", "source_file": "tsconfig.app.json", "source_location": "L5"}, {"id": "ref_dom", "label": "DOM", "file_type": "concept", "source_file": "tsconfig.app.json", "source_location": "L5"}, {"id": "$graphify-root$_tsconfig_app_compileroptions_module", "label": "module", "file_type": "code", "source_file": "tsconfig.app.json", "source_location": "L6"}, {"id": "$graphify-root$_tsconfig_app_compileroptions_types", "label": "types", "file_type": "code", "source_file": "tsconfig.app.json", "source_location": "L7"}, {"id": "ref_vite_client", "label": "vite/client", "file_type": "concept", "source_file": "tsconfig.app.json", "source_location": "L7"}, {"id": "$graphify-root$_tsconfig_app_compileroptions_allowarbitraryextensions", "label": "allowArbitraryExtensions", "file_type": "code", "source_file": "tsconfig.app.json", "source_location": "L8"}, {"id": "$graphify-root$_tsconfig_app_compileroptions_skiplibcheck", "label": "skipLibCheck", "file_type": "code", "source_file": "tsconfig.app.json", "source_location": "L9"}, {"id": "$graphify-root$_tsconfig_app_compileroptions_moduleresolution", "label": "moduleResolution", "file_type": "code", "source_file": "tsconfig.app.json", "source_location": "L12"}, {"id": "$graphify-root$_tsconfig_app_compileroptions_allowimportingtsextensions", "label": "allowImportingTsExtensions", "file_type": "code", "source_file": "tsconfig.app.json", "source_location": "L13"}, {"id": "$graphify-root$_tsconfig_app_compileroptions_verbatimmodulesyntax", "label": "verbatimModuleSyntax", "file_type": "code", "source_file": "tsconfig.app.json", "source_location": "L14"}, {"id": "$graphify-root$_tsconfig_app_compileroptions_moduledetection", "label": "moduleDetection", "file_type": "code", "source_file": "tsconfig.app.json", "source_location": "L15"}, {"id": "$graphify-root$_tsconfig_app_compileroptions_noemit", "label": "noEmit", "file_type": "code", "source_file": "tsconfig.app.json", "source_location": "L16"}, {"id": "$graphify-root$_tsconfig_app_compileroptions_jsx", "label": "jsx", "file_type": "code", "source_file": "tsconfig.app.json", "source_location": "L17"}, {"id": "$graphify-root$_tsconfig_app_compileroptions_nounusedlocals", "label": "noUnusedLocals", "file_type": "code", "source_file": "tsconfig.app.json", "source_location": "L20"}, {"id": "$graphify-root$_tsconfig_app_compileroptions_nounusedparameters", "label": "noUnusedParameters", "file_type": "code", "source_file": "tsconfig.app.json", "source_location": "L21"}, {"id": "$graphify-root$_tsconfig_app_compileroptions_erasablesyntaxonly", "label": "erasableSyntaxOnly", "file_type": "code", "source_file": "tsconfig.app.json", "source_location": "L22"}, {"id": "$graphify-root$_tsconfig_app_compileroptions_nofallthroughcasesinswitch", "label": "noFallthroughCasesInSwitch", "file_type": "code", "source_file": "tsconfig.app.json", "source_location": "L23"}, {"id": "$graphify-root$_tsconfig_app_include", "label": "include", "file_type": "code", "source_file": "tsconfig.app.json", "source_location": "L25"}, {"id": "ref_src", "label": "src", "file_type": "concept", "source_file": "tsconfig.app.json", "source_location": "L25"}], "edges": [{"source": "$graphify-root$_tsconfig_app_json", "target": "$graphify-root$_tsconfig_app_compileroptions", "relation": "contains", "confidence": "EXTRACTED", "source_file": "tsconfig.app.json", "source_location": "L2", "weight": 1.0}, {"source": "$graphify-root$_tsconfig_app_compileroptions", "target": "$graphify-root$_tsconfig_app_compileroptions_tsbuildinfofile", "relation": "contains", "confidence": "EXTRACTED", "source_file": "tsconfig.app.json", "source_location": "L3", "weight": 1.0}, {"source": "$graphify-root$_tsconfig_app_compileroptions", "target": "$graphify-root$_tsconfig_app_compileroptions_target", "relation": "contains", "confidence": "EXTRACTED", "source_file": "tsconfig.app.json", "source_location": "L4", "weight": 1.0}, {"source": "$graphify-root$_tsconfig_app_compileroptions", "target": "$graphify-root$_tsconfig_app_compileroptions_lib", "relation": "contains", "confidence": "EXTRACTED", "source_file": "tsconfig.app.json", "source_location": "L5", "weight": 1.0}, {"source": "$graphify-root$_tsconfig_app_compileroptions_lib", "target": "ref_es2023", "relation": "extends", "confidence": "EXTRACTED", "source_file": "tsconfig.app.json", "source_location": "L5", "weight": 1.0, "context": "import"}, {"source": "$graphify-root$_tsconfig_app_compileroptions_lib", "target": "ref_dom", "relation": "extends", "confidence": "EXTRACTED", "source_file": "tsconfig.app.json", "source_location": "L5", "weight": 1.0, "context": "import"}, {"source": "$graphify-root$_tsconfig_app_compileroptions", "target": "$graphify-root$_tsconfig_app_compileroptions_module", "relation": "contains", "confidence": "EXTRACTED", "source_file": "tsconfig.app.json", "source_location": "L6", "weight": 1.0}, {"source": "$graphify-root$_tsconfig_app_compileroptions", "target": "$graphify-root$_tsconfig_app_compileroptions_types", "relation": "contains", "confidence": "EXTRACTED", "source_file": "tsconfig.app.json", "source_location": "L7", "weight": 1.0}, {"source": "$graphify-root$_tsconfig_app_compileroptions_types", "target": "ref_vite_client", "relation": "extends", "confidence": "EXTRACTED", "source_file": "tsconfig.app.json", "source_location": "L7", "weight": 1.0, "context": "import"}, {"source": "$graphify-root$_tsconfig_app_compileroptions", "target": "$graphify-root$_tsconfig_app_compileroptions_allowarbitraryextensions", "relation": "contains", "confidence": "EXTRACTED", "source_file": "tsconfig.app.json", "source_location": "L8", "weight": 1.0}, {"source": "$graphify-root$_tsconfig_app_compileroptions", "target": "$graphify-root$_tsconfig_app_compileroptions_skiplibcheck", "relation": "contains", "confidence": "EXTRACTED", "source_file": "tsconfig.app.json", "source_location": "L9", "weight": 1.0}, {"source": "$graphify-root$_tsconfig_app_compileroptions", "target": "$graphify-root$_tsconfig_app_compileroptions_moduleresolution", "relation": "contains", "confidence": "EXTRACTED", "source_file": "tsconfig.app.json", "source_location": "L12", "weight": 1.0}, {"source": "$graphify-root$_tsconfig_app_compileroptions", "target": "$graphify-root$_tsconfig_app_compileroptions_allowimportingtsextensions", "relation": "contains", "confidence": "EXTRACTED", "source_file": "tsconfig.app.json", "source_location": "L13", "weight": 1.0}, {"source": "$graphify-root$_tsconfig_app_compileroptions", "target": "$graphify-root$_tsconfig_app_compileroptions_verbatimmodulesyntax", "relation": "contains", "confidence": "EXTRACTED", "source_file": "tsconfig.app.json", "source_location": "L14", "weight": 1.0}, {"source": "$graphify-root$_tsconfig_app_compileroptions", "target": "$graphify-root$_tsconfig_app_compileroptions_moduledetection", "relation": "contains", "confidence": "EXTRACTED", "source_file": "tsconfig.app.json", "source_location": "L15", "weight": 1.0}, {"source": "$graphify-root$_tsconfig_app_compileroptions", "target": "$graphify-root$_tsconfig_app_compileroptions_noemit", "relation": "contains", "confidence": "EXTRACTED", "source_file": "tsconfig.app.json", "source_location": "L16", "weight": 1.0}, {"source": "$graphify-root$_tsconfig_app_compileroptions", "target": "$graphify-root$_tsconfig_app_compileroptions_jsx", "relation": "contains", "confidence": "EXTRACTED", "source_file": "tsconfig.app.json", "source_location": "L17", "weight": 1.0}, {"source": "$graphify-root$_tsconfig_app_compileroptions", "target": "$graphify-root$_tsconfig_app_compileroptions_nounusedlocals", "relation": "contains", "confidence": "EXTRACTED", "source_file": "tsconfig.app.json", "source_location": "L20", "weight": 1.0}, {"source": "$graphify-root$_tsconfig_app_compileroptions", "target": "$graphify-root$_tsconfig_app_compileroptions_nounusedparameters", "relation": "contains", "confidence": "EXTRACTED", "source_file": "tsconfig.app.json", "source_location": "L21", "weight": 1.0}, {"source": "$graphify-root$_tsconfig_app_compileroptions", "target": "$graphify-root$_tsconfig_app_compileroptions_erasablesyntaxonly", "relation": "contains", "confidence": "EXTRACTED", "source_file": "tsconfig.app.json", "source_location": "L22", "weight": 1.0}, {"source": "$graphify-root$_tsconfig_app_compileroptions", "target": "$graphify-root$_tsconfig_app_compileroptions_nofallthroughcasesinswitch", "relation": "contains", "confidence": "EXTRACTED", "source_file": "tsconfig.app.json", "source_location": "L23", "weight": 1.0}, {"source": "$graphify-root$_tsconfig_app_json", "target": "$graphify-root$_tsconfig_app_include", "relation": "contains", "confidence": "EXTRACTED", "source_file": "tsconfig.app.json", "source_location": "L25", "weight": 1.0}, {"source": "$graphify-root$_tsconfig_app_include", "target": "ref_src", "relation": "extends", "confidence": "EXTRACTED", "source_file": "tsconfig.app.json", "source_location": "L25", "weight": 1.0, "context": "import"}]} \ No newline at end of file diff --git a/graphify-out/cache/ast/v0.9.33/29ee32adbb18b6b2e96539f626b7cf4f5e925f482dcfdac8ceca1570d5cb3bc6.json b/graphify-out/cache/ast/v0.9.33/29ee32adbb18b6b2e96539f626b7cf4f5e925f482dcfdac8ceca1570d5cb3bc6.json new file mode 100644 index 0000000..3e0b87e --- /dev/null +++ b/graphify-out/cache/ast/v0.9.33/29ee32adbb18b6b2e96539f626b7cf4f5e925f482dcfdac8ceca1570d5cb3bc6.json @@ -0,0 +1 @@ +{"nodes": [{"id": "$graphify-root$_tsconfig_json", "label": "tsconfig.json", "file_type": "code", "source_file": "tsconfig.json", "source_location": "L1"}, {"id": "$graphify-root$_tsconfig_files", "label": "files", "file_type": "code", "source_file": "tsconfig.json", "source_location": "L2"}, {"id": "$graphify-root$_tsconfig_references", "label": "references", "file_type": "code", "source_file": "tsconfig.json", "source_location": "L3"}], "edges": [{"source": "$graphify-root$_tsconfig_json", "target": "$graphify-root$_tsconfig_files", "relation": "contains", "confidence": "EXTRACTED", "source_file": "tsconfig.json", "source_location": "L2", "weight": 1.0}, {"source": "$graphify-root$_tsconfig_json", "target": "$graphify-root$_tsconfig_references", "relation": "contains", "confidence": "EXTRACTED", "source_file": "tsconfig.json", "source_location": "L3", "weight": 1.0}]} \ No newline at end of file diff --git a/graphify-out/cache/ast/v0.9.33/5c4a87b32fbd925b900618d7cbc102f79687f34227dcea507fc8adf1019b5239.json b/graphify-out/cache/ast/v0.9.33/5c4a87b32fbd925b900618d7cbc102f79687f34227dcea507fc8adf1019b5239.json new file mode 100644 index 0000000..1220d29 --- /dev/null +++ b/graphify-out/cache/ast/v0.9.33/5c4a87b32fbd925b900618d7cbc102f79687f34227dcea507fc8adf1019b5239.json @@ -0,0 +1 @@ +{"nodes": [{"id": "$graphify-root$_tsconfig_node_json", "label": "tsconfig.node.json", "file_type": "code", "source_file": "tsconfig.node.json", "source_location": "L1"}, {"id": "$graphify-root$_tsconfig_node_compileroptions", "label": "compilerOptions", "file_type": "code", "source_file": "tsconfig.node.json", "source_location": "L2"}, {"id": "$graphify-root$_tsconfig_node_compileroptions_tsbuildinfofile", "label": "tsBuildInfoFile", "file_type": "code", "source_file": "tsconfig.node.json", "source_location": "L3"}, {"id": "$graphify-root$_tsconfig_node_compileroptions_target", "label": "target", "file_type": "code", "source_file": "tsconfig.node.json", "source_location": "L4"}, {"id": "$graphify-root$_tsconfig_node_compileroptions_lib", "label": "lib", "file_type": "code", "source_file": "tsconfig.node.json", "source_location": "L5"}, {"id": "ref_es2023", "label": "ES2023", "file_type": "concept", "source_file": "tsconfig.node.json", "source_location": "L5"}, {"id": "$graphify-root$_tsconfig_node_compileroptions_types", "label": "types", "file_type": "code", "source_file": "tsconfig.node.json", "source_location": "L6"}, {"id": "ref_node", "label": "node", "file_type": "concept", "source_file": "tsconfig.node.json", "source_location": "L6"}, {"id": "$graphify-root$_tsconfig_node_compileroptions_skiplibcheck", "label": "skipLibCheck", "file_type": "code", "source_file": "tsconfig.node.json", "source_location": "L7"}, {"id": "$graphify-root$_tsconfig_node_compileroptions_module", "label": "module", "file_type": "code", "source_file": "tsconfig.node.json", "source_location": "L10"}, {"id": "$graphify-root$_tsconfig_node_compileroptions_allowimportingtsextensions", "label": "allowImportingTsExtensions", "file_type": "code", "source_file": "tsconfig.node.json", "source_location": "L11"}, {"id": "$graphify-root$_tsconfig_node_compileroptions_verbatimmodulesyntax", "label": "verbatimModuleSyntax", "file_type": "code", "source_file": "tsconfig.node.json", "source_location": "L12"}, {"id": "$graphify-root$_tsconfig_node_compileroptions_moduledetection", "label": "moduleDetection", "file_type": "code", "source_file": "tsconfig.node.json", "source_location": "L13"}, {"id": "$graphify-root$_tsconfig_node_compileroptions_noemit", "label": "noEmit", "file_type": "code", "source_file": "tsconfig.node.json", "source_location": "L14"}, {"id": "$graphify-root$_tsconfig_node_compileroptions_nounusedlocals", "label": "noUnusedLocals", "file_type": "code", "source_file": "tsconfig.node.json", "source_location": "L17"}, {"id": "$graphify-root$_tsconfig_node_compileroptions_nounusedparameters", "label": "noUnusedParameters", "file_type": "code", "source_file": "tsconfig.node.json", "source_location": "L18"}, {"id": "$graphify-root$_tsconfig_node_compileroptions_erasablesyntaxonly", "label": "erasableSyntaxOnly", "file_type": "code", "source_file": "tsconfig.node.json", "source_location": "L19"}, {"id": "$graphify-root$_tsconfig_node_compileroptions_nofallthroughcasesinswitch", "label": "noFallthroughCasesInSwitch", "file_type": "code", "source_file": "tsconfig.node.json", "source_location": "L20"}, {"id": "$graphify-root$_tsconfig_node_include", "label": "include", "file_type": "code", "source_file": "tsconfig.node.json", "source_location": "L22"}, {"id": "ref_vite_config_ts", "label": "vite.config.ts", "file_type": "concept", "source_file": "tsconfig.node.json", "source_location": "L22"}], "edges": [{"source": "$graphify-root$_tsconfig_node_json", "target": "$graphify-root$_tsconfig_node_compileroptions", "relation": "contains", "confidence": "EXTRACTED", "source_file": "tsconfig.node.json", "source_location": "L2", "weight": 1.0}, {"source": "$graphify-root$_tsconfig_node_compileroptions", "target": "$graphify-root$_tsconfig_node_compileroptions_tsbuildinfofile", "relation": "contains", "confidence": "EXTRACTED", "source_file": "tsconfig.node.json", "source_location": "L3", "weight": 1.0}, {"source": "$graphify-root$_tsconfig_node_compileroptions", "target": "$graphify-root$_tsconfig_node_compileroptions_target", "relation": "contains", "confidence": "EXTRACTED", "source_file": "tsconfig.node.json", "source_location": "L4", "weight": 1.0}, {"source": "$graphify-root$_tsconfig_node_compileroptions", "target": "$graphify-root$_tsconfig_node_compileroptions_lib", "relation": "contains", "confidence": "EXTRACTED", "source_file": "tsconfig.node.json", "source_location": "L5", "weight": 1.0}, {"source": "$graphify-root$_tsconfig_node_compileroptions_lib", "target": "ref_es2023", "relation": "extends", "confidence": "EXTRACTED", "source_file": "tsconfig.node.json", "source_location": "L5", "weight": 1.0, "context": "import"}, {"source": "$graphify-root$_tsconfig_node_compileroptions", "target": "$graphify-root$_tsconfig_node_compileroptions_types", "relation": "contains", "confidence": "EXTRACTED", "source_file": "tsconfig.node.json", "source_location": "L6", "weight": 1.0}, {"source": "$graphify-root$_tsconfig_node_compileroptions_types", "target": "ref_node", "relation": "extends", "confidence": "EXTRACTED", "source_file": "tsconfig.node.json", "source_location": "L6", "weight": 1.0, "context": "import"}, {"source": "$graphify-root$_tsconfig_node_compileroptions", "target": "$graphify-root$_tsconfig_node_compileroptions_skiplibcheck", "relation": "contains", "confidence": "EXTRACTED", "source_file": "tsconfig.node.json", "source_location": "L7", "weight": 1.0}, {"source": "$graphify-root$_tsconfig_node_compileroptions", "target": "$graphify-root$_tsconfig_node_compileroptions_module", "relation": "contains", "confidence": "EXTRACTED", "source_file": "tsconfig.node.json", "source_location": "L10", "weight": 1.0}, {"source": "$graphify-root$_tsconfig_node_compileroptions", "target": "$graphify-root$_tsconfig_node_compileroptions_allowimportingtsextensions", "relation": "contains", "confidence": "EXTRACTED", "source_file": "tsconfig.node.json", "source_location": "L11", "weight": 1.0}, {"source": "$graphify-root$_tsconfig_node_compileroptions", "target": "$graphify-root$_tsconfig_node_compileroptions_verbatimmodulesyntax", "relation": "contains", "confidence": "EXTRACTED", "source_file": "tsconfig.node.json", "source_location": "L12", "weight": 1.0}, {"source": "$graphify-root$_tsconfig_node_compileroptions", "target": "$graphify-root$_tsconfig_node_compileroptions_moduledetection", "relation": "contains", "confidence": "EXTRACTED", "source_file": "tsconfig.node.json", "source_location": "L13", "weight": 1.0}, {"source": "$graphify-root$_tsconfig_node_compileroptions", "target": "$graphify-root$_tsconfig_node_compileroptions_noemit", "relation": "contains", "confidence": "EXTRACTED", "source_file": "tsconfig.node.json", "source_location": "L14", "weight": 1.0}, {"source": "$graphify-root$_tsconfig_node_compileroptions", "target": "$graphify-root$_tsconfig_node_compileroptions_nounusedlocals", "relation": "contains", "confidence": "EXTRACTED", "source_file": "tsconfig.node.json", "source_location": "L17", "weight": 1.0}, {"source": "$graphify-root$_tsconfig_node_compileroptions", "target": "$graphify-root$_tsconfig_node_compileroptions_nounusedparameters", "relation": "contains", "confidence": "EXTRACTED", "source_file": "tsconfig.node.json", "source_location": "L18", "weight": 1.0}, {"source": "$graphify-root$_tsconfig_node_compileroptions", "target": "$graphify-root$_tsconfig_node_compileroptions_erasablesyntaxonly", "relation": "contains", "confidence": "EXTRACTED", "source_file": "tsconfig.node.json", "source_location": "L19", "weight": 1.0}, {"source": "$graphify-root$_tsconfig_node_compileroptions", "target": "$graphify-root$_tsconfig_node_compileroptions_nofallthroughcasesinswitch", "relation": "contains", "confidence": "EXTRACTED", "source_file": "tsconfig.node.json", "source_location": "L20", "weight": 1.0}, {"source": "$graphify-root$_tsconfig_node_json", "target": "$graphify-root$_tsconfig_node_include", "relation": "contains", "confidence": "EXTRACTED", "source_file": "tsconfig.node.json", "source_location": "L22", "weight": 1.0}, {"source": "$graphify-root$_tsconfig_node_include", "target": "ref_vite_config_ts", "relation": "extends", "confidence": "EXTRACTED", "source_file": "tsconfig.node.json", "source_location": "L22", "weight": 1.0, "context": "import"}]} \ No newline at end of file diff --git a/graphify-out/cache/ast/v0.9.33/9c42d7b83358f81fead13e2129eaa23ccedeb680f7de635d7c248c5fbb7589fd.json b/graphify-out/cache/ast/v0.9.33/9c42d7b83358f81fead13e2129eaa23ccedeb680f7de635d7c248c5fbb7589fd.json new file mode 100644 index 0000000..ffbb1ad --- /dev/null +++ b/graphify-out/cache/ast/v0.9.33/9c42d7b83358f81fead13e2129eaa23ccedeb680f7de635d7c248c5fbb7589fd.json @@ -0,0 +1 @@ +{"nodes": [{"id": "$graphify-root$_oxlintrc_json", "label": ".oxlintrc.json", "file_type": "code", "source_file": ".oxlintrc.json", "source_location": "L1"}, {"id": "$graphify-root$_oxlintrc_schema", "label": "$schema", "file_type": "code", "source_file": ".oxlintrc.json", "source_location": "L2"}, {"id": "$graphify-root$_oxlintrc_plugins", "label": "plugins", "file_type": "code", "source_file": ".oxlintrc.json", "source_location": "L3"}, {"id": "ref_react", "label": "react", "file_type": "concept", "source_file": ".oxlintrc.json", "source_location": "L3"}, {"id": "ref_typescript", "label": "typescript", "file_type": "concept", "source_file": ".oxlintrc.json", "source_location": "L3"}, {"id": "ref_oxc", "label": "oxc", "file_type": "concept", "source_file": ".oxlintrc.json", "source_location": "L3"}, {"id": "$graphify-root$_oxlintrc_rules", "label": "rules", "file_type": "code", "source_file": ".oxlintrc.json", "source_location": "L4"}, {"id": "$graphify-root$_oxlintrc_rules_react_rules_of_hooks", "label": "react/rules-of-hooks", "file_type": "code", "source_file": ".oxlintrc.json", "source_location": "L5"}, {"id": "$graphify-root$_oxlintrc_rules_react_only_export_components", "label": "react/only-export-components", "file_type": "code", "source_file": ".oxlintrc.json", "source_location": "L6"}, {"id": "ref_warn", "label": "warn", "file_type": "concept", "source_file": ".oxlintrc.json", "source_location": "L6"}], "edges": [{"source": "$graphify-root$_oxlintrc_json", "target": "$graphify-root$_oxlintrc_schema", "relation": "contains", "confidence": "EXTRACTED", "source_file": ".oxlintrc.json", "source_location": "L2", "weight": 1.0}, {"source": "$graphify-root$_oxlintrc_json", "target": "$graphify-root$_oxlintrc_plugins", "relation": "contains", "confidence": "EXTRACTED", "source_file": ".oxlintrc.json", "source_location": "L3", "weight": 1.0}, {"source": "$graphify-root$_oxlintrc_plugins", "target": "ref_react", "relation": "extends", "confidence": "EXTRACTED", "source_file": ".oxlintrc.json", "source_location": "L3", "weight": 1.0, "context": "import"}, {"source": "$graphify-root$_oxlintrc_plugins", "target": "ref_typescript", "relation": "extends", "confidence": "EXTRACTED", "source_file": ".oxlintrc.json", "source_location": "L3", "weight": 1.0, "context": "import"}, {"source": "$graphify-root$_oxlintrc_plugins", "target": "ref_oxc", "relation": "extends", "confidence": "EXTRACTED", "source_file": ".oxlintrc.json", "source_location": "L3", "weight": 1.0, "context": "import"}, {"source": "$graphify-root$_oxlintrc_json", "target": "$graphify-root$_oxlintrc_rules", "relation": "contains", "confidence": "EXTRACTED", "source_file": ".oxlintrc.json", "source_location": "L4", "weight": 1.0}, {"source": "$graphify-root$_oxlintrc_rules", "target": "$graphify-root$_oxlintrc_rules_react_rules_of_hooks", "relation": "contains", "confidence": "EXTRACTED", "source_file": ".oxlintrc.json", "source_location": "L5", "weight": 1.0}, {"source": "$graphify-root$_oxlintrc_rules", "target": "$graphify-root$_oxlintrc_rules_react_only_export_components", "relation": "contains", "confidence": "EXTRACTED", "source_file": ".oxlintrc.json", "source_location": "L6", "weight": 1.0}, {"source": "$graphify-root$_oxlintrc_rules_react_only_export_components", "target": "ref_warn", "relation": "extends", "confidence": "EXTRACTED", "source_file": ".oxlintrc.json", "source_location": "L6", "weight": 1.0, "context": "import"}]} \ No newline at end of file diff --git a/graphify-out/cache/ast/v0.9.33/b15d66e2ffcae094342209cae92f2989f543821886e6e9902b3620b16dc6dd8a.json b/graphify-out/cache/ast/v0.9.33/b15d66e2ffcae094342209cae92f2989f543821886e6e9902b3620b16dc6dd8a.json new file mode 100644 index 0000000..685f8c3 --- /dev/null +++ b/graphify-out/cache/ast/v0.9.33/b15d66e2ffcae094342209cae92f2989f543821886e6e9902b3620b16dc6dd8a.json @@ -0,0 +1 @@ +{"nodes": [{"id": "$graphify-root$_package_json", "label": "package.json", "file_type": "code", "source_file": "package.json", "source_location": "L1"}, {"id": "$graphify-root$_package_name", "label": "name", "file_type": "code", "source_file": "package.json", "source_location": "L2"}, {"id": "$graphify-root$_package_private", "label": "private", "file_type": "code", "source_file": "package.json", "source_location": "L3"}, {"id": "$graphify-root$_package_version", "label": "version", "file_type": "code", "source_file": "package.json", "source_location": "L4"}, {"id": "$graphify-root$_package_type", "label": "type", "file_type": "code", "source_file": "package.json", "source_location": "L5"}, {"id": "$graphify-root$_package_packagemanager", "label": "packageManager", "file_type": "code", "source_file": "package.json", "source_location": "L6"}, {"id": "$graphify-root$_package_scripts", "label": "scripts", "file_type": "code", "source_file": "package.json", "source_location": "L7"}, {"id": "$graphify-root$_package_scripts_dev", "label": "dev", "file_type": "code", "source_file": "package.json", "source_location": "L8"}, {"id": "$graphify-root$_package_scripts_build", "label": "build", "file_type": "code", "source_file": "package.json", "source_location": "L9"}, {"id": "$graphify-root$_package_scripts_lint", "label": "lint", "file_type": "code", "source_file": "package.json", "source_location": "L10"}, {"id": "$graphify-root$_package_scripts_preview", "label": "preview", "file_type": "code", "source_file": "package.json", "source_location": "L11"}, {"id": "$graphify-root$_package_dependencies", "label": "dependencies", "file_type": "code", "source_file": "package.json", "source_location": "L13"}, {"id": "$graphify-root$_package_dependencies_emotion_react", "label": "@emotion/react", "file_type": "code", "source_file": "package.json", "source_location": "L14"}, {"id": "emotion_react", "label": "@emotion/react", "file_type": "concept", "source_file": "package.json", "source_location": "L14"}, {"id": "$graphify-root$_package_dependencies_emotion_styled", "label": "@emotion/styled", "file_type": "code", "source_file": "package.json", "source_location": "L15"}, {"id": "emotion_styled", "label": "@emotion/styled", "file_type": "concept", "source_file": "package.json", "source_location": "L15"}, {"id": "$graphify-root$_package_dependencies_mui_icons_material", "label": "@mui/icons-material", "file_type": "code", "source_file": "package.json", "source_location": "L16"}, {"id": "mui_icons_material", "label": "@mui/icons-material", "file_type": "concept", "source_file": "package.json", "source_location": "L16"}, {"id": "$graphify-root$_package_dependencies_mui_material", "label": "@mui/material", "file_type": "code", "source_file": "package.json", "source_location": "L17"}, {"id": "mui_material", "label": "@mui/material", "file_type": "concept", "source_file": "package.json", "source_location": "L17"}, {"id": "$graphify-root$_package_dependencies_react", "label": "react", "file_type": "code", "source_file": "package.json", "source_location": "L18"}, {"id": "react", "label": "react", "file_type": "concept", "source_file": "package.json", "source_location": "L18"}, {"id": "$graphify-root$_package_dependencies_react_dom", "label": "react-dom", "file_type": "code", "source_file": "package.json", "source_location": "L19"}, {"id": "react_dom", "label": "react-dom", "file_type": "concept", "source_file": "package.json", "source_location": "L19"}, {"id": "$graphify-root$_package_devdependencies", "label": "devDependencies", "file_type": "code", "source_file": "package.json", "source_location": "L21"}, {"id": "$graphify-root$_package_devdependencies_types_node", "label": "@types/node", "file_type": "code", "source_file": "package.json", "source_location": "L22"}, {"id": "types_node", "label": "@types/node", "file_type": "concept", "source_file": "package.json", "source_location": "L22"}, {"id": "$graphify-root$_package_devdependencies_types_react", "label": "@types/react", "file_type": "code", "source_file": "package.json", "source_location": "L23"}, {"id": "types_react", "label": "@types/react", "file_type": "concept", "source_file": "package.json", "source_location": "L23"}, {"id": "$graphify-root$_package_devdependencies_types_react_dom", "label": "@types/react-dom", "file_type": "code", "source_file": "package.json", "source_location": "L24"}, {"id": "types_react_dom", "label": "@types/react-dom", "file_type": "concept", "source_file": "package.json", "source_location": "L24"}, {"id": "$graphify-root$_package_devdependencies_vitejs_plugin_react", "label": "@vitejs/plugin-react", "file_type": "code", "source_file": "package.json", "source_location": "L25"}, {"id": "vitejs_plugin_react", "label": "@vitejs/plugin-react", "file_type": "concept", "source_file": "package.json", "source_location": "L25"}, {"id": "$graphify-root$_package_devdependencies_oxlint", "label": "oxlint", "file_type": "code", "source_file": "package.json", "source_location": "L26"}, {"id": "oxlint", "label": "oxlint", "file_type": "concept", "source_file": "package.json", "source_location": "L26"}, {"id": "$graphify-root$_package_devdependencies_typescript", "label": "typescript", "file_type": "code", "source_file": "package.json", "source_location": "L27"}, {"id": "typescript", "label": "typescript", "file_type": "concept", "source_file": "package.json", "source_location": "L27"}, {"id": "$graphify-root$_package_devdependencies_vite", "label": "vite", "file_type": "code", "source_file": "package.json", "source_location": "L28"}, {"id": "vite", "label": "vite", "file_type": "concept", "source_file": "package.json", "source_location": "L28"}], "edges": [{"source": "$graphify-root$_package_json", "target": "$graphify-root$_package_name", "relation": "contains", "confidence": "EXTRACTED", "source_file": "package.json", "source_location": "L2", "weight": 1.0}, {"source": "$graphify-root$_package_json", "target": "$graphify-root$_package_private", "relation": "contains", "confidence": "EXTRACTED", "source_file": "package.json", "source_location": "L3", "weight": 1.0}, {"source": "$graphify-root$_package_json", "target": "$graphify-root$_package_version", "relation": "contains", "confidence": "EXTRACTED", "source_file": "package.json", "source_location": "L4", "weight": 1.0}, {"source": "$graphify-root$_package_json", "target": "$graphify-root$_package_type", "relation": "contains", "confidence": "EXTRACTED", "source_file": "package.json", "source_location": "L5", "weight": 1.0}, {"source": "$graphify-root$_package_json", "target": "$graphify-root$_package_packagemanager", "relation": "contains", "confidence": "EXTRACTED", "source_file": "package.json", "source_location": "L6", "weight": 1.0}, {"source": "$graphify-root$_package_json", "target": "$graphify-root$_package_scripts", "relation": "contains", "confidence": "EXTRACTED", "source_file": "package.json", "source_location": "L7", "weight": 1.0}, {"source": "$graphify-root$_package_scripts", "target": "$graphify-root$_package_scripts_dev", "relation": "contains", "confidence": "EXTRACTED", "source_file": "package.json", "source_location": "L8", "weight": 1.0}, {"source": "$graphify-root$_package_scripts", "target": "$graphify-root$_package_scripts_build", "relation": "contains", "confidence": "EXTRACTED", "source_file": "package.json", "source_location": "L9", "weight": 1.0}, {"source": "$graphify-root$_package_scripts", "target": "$graphify-root$_package_scripts_lint", "relation": "contains", "confidence": "EXTRACTED", "source_file": "package.json", "source_location": "L10", "weight": 1.0}, {"source": "$graphify-root$_package_scripts", "target": "$graphify-root$_package_scripts_preview", "relation": "contains", "confidence": "EXTRACTED", "source_file": "package.json", "source_location": "L11", "weight": 1.0}, {"source": "$graphify-root$_package_json", "target": "$graphify-root$_package_dependencies", "relation": "contains", "confidence": "EXTRACTED", "source_file": "package.json", "source_location": "L13", "weight": 1.0}, {"source": "$graphify-root$_package_dependencies", "target": "$graphify-root$_package_dependencies_emotion_react", "relation": "contains", "confidence": "EXTRACTED", "source_file": "package.json", "source_location": "L14", "weight": 1.0}, {"source": "$graphify-root$_package_dependencies_emotion_react", "target": "emotion_react", "relation": "imports", "confidence": "EXTRACTED", "source_file": "package.json", "source_location": "L14", "weight": 1.0, "context": "import"}, {"source": "$graphify-root$_package_dependencies", "target": "$graphify-root$_package_dependencies_emotion_styled", "relation": "contains", "confidence": "EXTRACTED", "source_file": "package.json", "source_location": "L15", "weight": 1.0}, {"source": "$graphify-root$_package_dependencies_emotion_styled", "target": "emotion_styled", "relation": "imports", "confidence": "EXTRACTED", "source_file": "package.json", "source_location": "L15", "weight": 1.0, "context": "import"}, {"source": "$graphify-root$_package_dependencies", "target": "$graphify-root$_package_dependencies_mui_icons_material", "relation": "contains", "confidence": "EXTRACTED", "source_file": "package.json", "source_location": "L16", "weight": 1.0}, {"source": "$graphify-root$_package_dependencies_mui_icons_material", "target": "mui_icons_material", "relation": "imports", "confidence": "EXTRACTED", "source_file": "package.json", "source_location": "L16", "weight": 1.0, "context": "import"}, {"source": "$graphify-root$_package_dependencies", "target": "$graphify-root$_package_dependencies_mui_material", "relation": "contains", "confidence": "EXTRACTED", "source_file": "package.json", "source_location": "L17", "weight": 1.0}, {"source": "$graphify-root$_package_dependencies_mui_material", "target": "mui_material", "relation": "imports", "confidence": "EXTRACTED", "source_file": "package.json", "source_location": "L17", "weight": 1.0, "context": "import"}, {"source": "$graphify-root$_package_dependencies", "target": "$graphify-root$_package_dependencies_react", "relation": "contains", "confidence": "EXTRACTED", "source_file": "package.json", "source_location": "L18", "weight": 1.0}, {"source": "$graphify-root$_package_dependencies_react", "target": "react", "relation": "imports", "confidence": "EXTRACTED", "source_file": "package.json", "source_location": "L18", "weight": 1.0, "context": "import"}, {"source": "$graphify-root$_package_dependencies", "target": "$graphify-root$_package_dependencies_react_dom", "relation": "contains", "confidence": "EXTRACTED", "source_file": "package.json", "source_location": "L19", "weight": 1.0}, {"source": "$graphify-root$_package_dependencies_react_dom", "target": "react_dom", "relation": "imports", "confidence": "EXTRACTED", "source_file": "package.json", "source_location": "L19", "weight": 1.0, "context": "import"}, {"source": "$graphify-root$_package_json", "target": "$graphify-root$_package_devdependencies", "relation": "contains", "confidence": "EXTRACTED", "source_file": "package.json", "source_location": "L21", "weight": 1.0}, {"source": "$graphify-root$_package_devdependencies", "target": "$graphify-root$_package_devdependencies_types_node", "relation": "contains", "confidence": "EXTRACTED", "source_file": "package.json", "source_location": "L22", "weight": 1.0}, {"source": "$graphify-root$_package_devdependencies_types_node", "target": "types_node", "relation": "imports", "confidence": "EXTRACTED", "source_file": "package.json", "source_location": "L22", "weight": 1.0, "context": "import"}, {"source": "$graphify-root$_package_devdependencies", "target": "$graphify-root$_package_devdependencies_types_react", "relation": "contains", "confidence": "EXTRACTED", "source_file": "package.json", "source_location": "L23", "weight": 1.0}, {"source": "$graphify-root$_package_devdependencies_types_react", "target": "types_react", "relation": "imports", "confidence": "EXTRACTED", "source_file": "package.json", "source_location": "L23", "weight": 1.0, "context": "import"}, {"source": "$graphify-root$_package_devdependencies", "target": "$graphify-root$_package_devdependencies_types_react_dom", "relation": "contains", "confidence": "EXTRACTED", "source_file": "package.json", "source_location": "L24", "weight": 1.0}, {"source": "$graphify-root$_package_devdependencies_types_react_dom", "target": "types_react_dom", "relation": "imports", "confidence": "EXTRACTED", "source_file": "package.json", "source_location": "L24", "weight": 1.0, "context": "import"}, {"source": "$graphify-root$_package_devdependencies", "target": "$graphify-root$_package_devdependencies_vitejs_plugin_react", "relation": "contains", "confidence": "EXTRACTED", "source_file": "package.json", "source_location": "L25", "weight": 1.0}, {"source": "$graphify-root$_package_devdependencies_vitejs_plugin_react", "target": "vitejs_plugin_react", "relation": "imports", "confidence": "EXTRACTED", "source_file": "package.json", "source_location": "L25", "weight": 1.0, "context": "import"}, {"source": "$graphify-root$_package_devdependencies", "target": "$graphify-root$_package_devdependencies_oxlint", "relation": "contains", "confidence": "EXTRACTED", "source_file": "package.json", "source_location": "L26", "weight": 1.0}, {"source": "$graphify-root$_package_devdependencies_oxlint", "target": "oxlint", "relation": "imports", "confidence": "EXTRACTED", "source_file": "package.json", "source_location": "L26", "weight": 1.0, "context": "import"}, {"source": "$graphify-root$_package_devdependencies", "target": "$graphify-root$_package_devdependencies_typescript", "relation": "contains", "confidence": "EXTRACTED", "source_file": "package.json", "source_location": "L27", "weight": 1.0}, {"source": "$graphify-root$_package_devdependencies_typescript", "target": "typescript", "relation": "imports", "confidence": "EXTRACTED", "source_file": "package.json", "source_location": "L27", "weight": 1.0, "context": "import"}, {"source": "$graphify-root$_package_devdependencies", "target": "$graphify-root$_package_devdependencies_vite", "relation": "contains", "confidence": "EXTRACTED", "source_file": "package.json", "source_location": "L28", "weight": 1.0}, {"source": "$graphify-root$_package_devdependencies_vite", "target": "vite", "relation": "imports", "confidence": "EXTRACTED", "source_file": "package.json", "source_location": "L28", "weight": 1.0, "context": "import"}]} \ No newline at end of file diff --git a/graphify-out/cache/stat-index.json b/graphify-out/cache/stat-index.json new file mode 100644 index 0000000..71013f5 --- /dev/null +++ b/graphify-out/cache/stat-index.json @@ -0,0 +1 @@ +{".agents/rules/graphify.md":{"size":947,"mtime_ns":1785912558596653200,"word_count":127,"hashes":{".agents/rules/graphify.md":"e55792958648fb69255e3ce3f71a8fcead36307c34b2d67feda9ac650ac61803"}},".agents/workflows/graphify.md":{"size":239,"mtime_ns":1785912558620255200,"word_count":37,"hashes":{".agents/workflows/graphify.md":"d92622463299d313da48e2cdbebf79d7ea24ffaf2ae2de2a1714be8ee42b22b3"}},".oxlintrc.json":{"size":245,"mtime_ns":1785233280346320800,"word_count":19,"hashes":{".oxlintrc.json":"9c42d7b83358f81fead13e2129eaa23ccedeb680f7de635d7c248c5fbb7589fd"}},"README.md":{"size":1278,"mtime_ns":1785233280810495100,"word_count":128,"hashes":{"readme.md":"1902ad9650dabab71d145c262ceb47559c17c49094af55b2f6aae7abdbce37c2"}},"index.html":{"size":812,"mtime_ns":1785233369342413100,"word_count":56,"hashes":{"index.html":"93f79b1b74b14ac68ace1ca2eab7f99e8b3013be19f190a4da8961c6747cc378"}},"package.json":{"size":701,"mtime_ns":1785396043717536600,"word_count":60,"hashes":{"package.json":"b15d66e2ffcae094342209cae92f2989f543821886e6e9902b3620b16dc6dd8a"}},"public/favicon.svg":{"size":9522,"mtime_ns":1785233281058549300,"word_count":491,"hashes":{"public/favicon.svg":"892990fa5e09648dab3c25af3670bec40a7f09601c3c5096959840060ebeac14"}},"public/icons.svg":{"size":5031,"mtime_ns":1785233281217468500,"word_count":382,"hashes":{"public/icons.svg":"b387c02c6b89e00e196358fb912991ac7b576fc46ba7808f4d330de9659c8f91"}},"src/App.tsx":{"size":10624,"mtime_ns":1785905557317213700,"word_count":1027},"src/assets/hero.png":{"size":13057,"mtime_ns":1785233280916594300,"word_count":437,"hashes":{"src/assets/hero.png":"3a55f30bbdf7752a5f23bfba2e646a49afdc617be7a5d85f5c4fbe4bd68643b2"}},"src/assets/react.svg":{"size":4126,"mtime_ns":1785233281369075300,"word_count":366,"hashes":{"src/assets/react.svg":"99930dc3094531417ea0c0c6bbf4dc2d21ca2d1a22fbe708c5210d311301633f"}},"src/assets/vite.svg":{"size":8709,"mtime_ns":1785233281489223000,"word_count":439,"hashes":{"src/assets/vite.svg":"0c310b9c433cbe5ab94100ecda27e1e7127fb83f868149987cc3ca33a76dc55f"}},"src/components/admin/AdminDesktopShell.tsx":{"size":10352,"mtime_ns":1785905097248853000,"word_count":980},"src/components/admin/BillingManagerView.tsx":{"size":11899,"mtime_ns":1785905514858434900,"word_count":955},"src/components/admin/FeedbackInboxView.tsx":{"size":5728,"mtime_ns":1785905479307636400,"word_count":490},"src/components/admin/InventoryView.tsx":{"size":16099,"mtime_ns":1785905582537023500,"word_count":1243},"src/components/admin/ReservationsView.tsx":{"size":10844,"mtime_ns":1785905528087273500,"word_count":835},"src/components/admin/StaffLoginModal.tsx":{"size":4832,"mtime_ns":1785905533971910600,"word_count":406},"src/components/admin/StaffShiftsView.tsx":{"size":11354,"mtime_ns":1785905521333113600,"word_count":866},"src/components/admin/SuppliersView.tsx":{"size":19180,"mtime_ns":1785905498784751600,"word_count":1494},"src/components/admin/TableManagementView.tsx":{"size":11986,"mtime_ns":1785905381157938800,"word_count":917},"src/components/analytics/AnalyticsDashboard.tsx":{"size":13794,"mtime_ns":1785905548118981900,"word_count":1331},"src/components/common/Navigation.tsx":{"size":7069,"mtime_ns":1785233556429539300,"word_count":544},"src/components/common/StatusBadge.tsx":{"size":2735,"mtime_ns":1785233494191133000,"word_count":294},"src/components/customer/BillPaymentView.tsx":{"size":11707,"mtime_ns":1785905194005765200,"word_count":1048},"src/components/customer/CartReviewView.tsx":{"size":9755,"mtime_ns":1785905199515659700,"word_count":869},"src/components/customer/CustomizationModal.tsx":{"size":6276,"mtime_ns":1785239166049786300,"word_count":569},"src/components/customer/MenuBrowseView.tsx":{"size":19942,"mtime_ns":1785905157868833500,"word_count":1550},"src/components/customer/OrderStatusView.tsx":{"size":9779,"mtime_ns":1785905172193351500,"word_count":936},"src/components/customer/TableLandingView.tsx":{"size":11865,"mtime_ns":1785905152257808000,"word_count":953},"src/components/customer/VoiceAssistantModal.tsx":{"size":15910,"mtime_ns":1785239308125306900,"word_count":1428},"src/components/kds/KDSKanban.tsx":{"size":6826,"mtime_ns":1785233506059388500,"word_count":539},"src/components/kds/KDSTicketCard.tsx":{"size":8033,"mtime_ns":1785233547040394900,"word_count":653},"src/components/table/TableLandingView.tsx":{"size":10854,"mtime_ns":1785233475412232800,"word_count":1017},"src/components/voice/VoiceOrderingView.tsx":{"size":8031,"mtime_ns":1785239270347191600,"word_count":829},"src/data/menuData.ts":{"size":14689,"mtime_ns":1785238770143591200,"word_count":1252},"src/hooks/useSpeechRecognition.ts":{"size":4302,"mtime_ns":1785238790034918600,"word_count":423},"src/hooks/useSpeechSynthesis.ts":{"size":1359,"mtime_ns":1785238801659254200,"word_count":144},"src/main.tsx":{"size":230,"mtime_ns":1785233281775977100,"word_count":24},"src/services/api.ts":{"size":27635,"mtime_ns":1785908359857110200,"word_count":3034},"src/theme/theme.ts":{"size":3188,"mtime_ns":1785233448091380500,"word_count":317},"src/types/index.ts":{"size":1142,"mtime_ns":1785233301059390100,"word_count":140},"tsconfig.app.json":{"size":655,"mtime_ns":1785233280581459800,"word_count":49,"hashes":{"tsconfig.app.json":"08daa6909612d5d3b296975716815b9c19448c5c134ea6705ad54c1338b3eb3a"}},"tsconfig.json":{"size":119,"mtime_ns":1785233280633290000,"word_count":15,"hashes":{"tsconfig.json":"29ee32adbb18b6b2e96539f626b7cf4f5e925f482dcfdac8ceca1570d5cb3bc6"}},"tsconfig.node.json":{"size":558,"mtime_ns":1785233280683418100,"word_count":42,"hashes":{"tsconfig.node.json":"5c4a87b32fbd925b900618d7cbc102f79687f34227dcea507fc8adf1019b5239"}},"vite.config.ts":{"size":161,"mtime_ns":1785233281667422600,"word_count":18}} \ No newline at end of file diff --git a/graphify-out/graph.html b/graphify-out/graph.html new file mode 100644 index 0000000..7d403d3 --- /dev/null +++ b/graphify-out/graph.html @@ -0,0 +1,320 @@ + + + + +graphify - C:\Users\hp\Desktop\projects\restroAI\graphify-out\graph.html + + + + +
+ + + + + \ No newline at end of file diff --git a/graphify-out/graph.json b/graphify-out/graph.json new file mode 100644 index 0000000..72cc6f9 --- /dev/null +++ b/graphify-out/graph.json @@ -0,0 +1,7028 @@ +{ + "directed": false, + "multigraph": false, + "graph": {}, + "nodes": [ + { + "label": ".oxlintrc.json", + "file_type": "code", + "source_file": ".oxlintrc.json", + "source_location": "L1", + "_origin": "ast", + "community": 4, + "norm_label": ".oxlintrc.json", + "id": "oxlintrc", + "community_name": "devDependencies" + }, + { + "label": "$schema", + "file_type": "code", + "source_file": ".oxlintrc.json", + "source_location": "L2", + "_origin": "ast", + "community": 4, + "norm_label": "$schema", + "id": "oxlintrc_schema", + "community_name": "devDependencies" + }, + { + "label": "plugins", + "file_type": "code", + "source_file": ".oxlintrc.json", + "source_location": "L3", + "_origin": "ast", + "community": 4, + "norm_label": "plugins", + "id": "oxlintrc_plugins", + "community_name": "devDependencies" + }, + { + "label": "react", + "file_type": "concept", + "source_file": ".oxlintrc.json", + "source_location": "L3", + "_origin": "ast", + "community": 1, + "norm_label": "react", + "id": "ref_react", + "community_name": "react" + }, + { + "label": "oxc", + "file_type": "concept", + "source_file": ".oxlintrc.json", + "source_location": "L3", + "_origin": "ast", + "community": 4, + "norm_label": "oxc", + "id": "ref_oxc", + "community_name": "devDependencies" + }, + { + "label": "rules", + "file_type": "code", + "source_file": ".oxlintrc.json", + "source_location": "L4", + "_origin": "ast", + "community": 4, + "norm_label": "rules", + "id": "oxlintrc_rules", + "community_name": "devDependencies" + }, + { + "label": "react/rules-of-hooks", + "file_type": "code", + "source_file": ".oxlintrc.json", + "source_location": "L5", + "_origin": "ast", + "community": 4, + "norm_label": "react/rules-of-hooks", + "id": "oxlintrc_rules_react_rules_of_hooks", + "community_name": "devDependencies" + }, + { + "label": "react/only-export-components", + "file_type": "code", + "source_file": ".oxlintrc.json", + "source_location": "L6", + "_origin": "ast", + "community": 4, + "norm_label": "react/only-export-components", + "id": "oxlintrc_rules_react_only_export_components", + "community_name": "devDependencies" + }, + { + "label": "warn", + "file_type": "concept", + "source_file": ".oxlintrc.json", + "source_location": "L6", + "_origin": "ast", + "community": 4, + "norm_label": "warn", + "id": "ref_warn", + "community_name": "devDependencies" + }, + { + "label": "package.json", + "file_type": "code", + "source_file": "package.json", + "source_location": "L1", + "_origin": "ast", + "community": 2, + "norm_label": "package.json", + "id": "package", + "community_name": "package.json" + }, + { + "label": "name", + "file_type": "code", + "source_file": "package.json", + "source_location": "L2", + "_origin": "ast", + "community": 2, + "norm_label": "name", + "id": "package_name", + "community_name": "package.json" + }, + { + "label": "private", + "file_type": "code", + "source_file": "package.json", + "source_location": "L3", + "_origin": "ast", + "community": 2, + "norm_label": "private", + "id": "package_private", + "community_name": "package.json" + }, + { + "label": "version", + "file_type": "code", + "source_file": "package.json", + "source_location": "L4", + "_origin": "ast", + "community": 2, + "norm_label": "version", + "id": "package_version", + "community_name": "package.json" + }, + { + "label": "type", + "file_type": "code", + "source_file": "package.json", + "source_location": "L5", + "_origin": "ast", + "community": 2, + "norm_label": "type", + "id": "package_type", + "community_name": "package.json" + }, + { + "label": "packageManager", + "file_type": "code", + "source_file": "package.json", + "source_location": "L6", + "_origin": "ast", + "community": 2, + "norm_label": "packagemanager", + "id": "package_packagemanager", + "community_name": "package.json" + }, + { + "label": "scripts", + "file_type": "code", + "source_file": "package.json", + "source_location": "L7", + "_origin": "ast", + "community": 2, + "norm_label": "scripts", + "id": "package_scripts", + "community_name": "package.json" + }, + { + "label": "dev", + "file_type": "code", + "source_file": "package.json", + "source_location": "L8", + "_origin": "ast", + "community": 2, + "norm_label": "dev", + "id": "package_scripts_dev", + "community_name": "package.json" + }, + { + "label": "build", + "file_type": "code", + "source_file": "package.json", + "source_location": "L9", + "_origin": "ast", + "community": 2, + "norm_label": "build", + "id": "package_scripts_build", + "community_name": "package.json" + }, + { + "label": "lint", + "file_type": "code", + "source_file": "package.json", + "source_location": "L10", + "_origin": "ast", + "community": 2, + "norm_label": "lint", + "id": "package_scripts_lint", + "community_name": "package.json" + }, + { + "label": "preview", + "file_type": "code", + "source_file": "package.json", + "source_location": "L11", + "_origin": "ast", + "community": 2, + "norm_label": "preview", + "id": "package_scripts_preview", + "community_name": "package.json" + }, + { + "label": "dependencies", + "file_type": "code", + "source_file": "package.json", + "source_location": "L13", + "_origin": "ast", + "community": 2, + "norm_label": "dependencies", + "id": "package_dependencies", + "community_name": "package.json" + }, + { + "label": "@emotion/react", + "file_type": "code", + "source_file": "package.json", + "source_location": "L14", + "_origin": "ast", + "community": 2, + "norm_label": "@emotion/react", + "id": "package_dependencies_emotion_react", + "community_name": "package.json" + }, + { + "label": "@emotion/react", + "file_type": "concept", + "source_file": "package.json", + "source_location": "L14", + "_origin": "ast", + "community": 2, + "norm_label": "@emotion/react", + "id": "emotion_react", + "community_name": "package.json" + }, + { + "label": "@emotion/styled", + "file_type": "code", + "source_file": "package.json", + "source_location": "L15", + "_origin": "ast", + "community": 2, + "norm_label": "@emotion/styled", + "id": "package_dependencies_emotion_styled", + "community_name": "package.json" + }, + { + "label": "@emotion/styled", + "file_type": "concept", + "source_file": "package.json", + "source_location": "L15", + "_origin": "ast", + "community": 2, + "norm_label": "@emotion/styled", + "id": "emotion_styled", + "community_name": "package.json" + }, + { + "label": "@mui/icons-material", + "file_type": "code", + "source_file": "package.json", + "source_location": "L16", + "_origin": "ast", + "community": 2, + "norm_label": "@mui/icons-material", + "id": "package_dependencies_mui_icons_material", + "community_name": "package.json" + }, + { + "label": "@mui/icons-material", + "file_type": "concept", + "source_file": "package.json", + "source_location": "L16", + "_origin": "ast", + "community": 2, + "norm_label": "@mui/icons-material", + "id": "mui_icons_material", + "community_name": "package.json" + }, + { + "label": "@mui/material", + "file_type": "code", + "source_file": "package.json", + "source_location": "L17", + "_origin": "ast", + "community": 2, + "norm_label": "@mui/material", + "id": "package_dependencies_mui_material", + "community_name": "package.json" + }, + { + "label": "@mui/material", + "file_type": "concept", + "source_file": "package.json", + "source_location": "L17", + "_origin": "ast", + "community": 2, + "norm_label": "@mui/material", + "id": "mui_material", + "community_name": "package.json" + }, + { + "label": "react", + "file_type": "code", + "source_file": "package.json", + "source_location": "L18", + "_origin": "ast", + "community": 2, + "norm_label": "react", + "id": "package_dependencies_react", + "community_name": "package.json" + }, + { + "label": "react", + "file_type": "concept", + "source_file": "package.json", + "source_location": "L18", + "_origin": "ast", + "community": 2, + "norm_label": "react", + "id": "react", + "community_name": "package.json" + }, + { + "label": "react-dom", + "file_type": "code", + "source_file": "package.json", + "source_location": "L19", + "_origin": "ast", + "community": 2, + "norm_label": "react-dom", + "id": "package_dependencies_react_dom", + "community_name": "package.json" + }, + { + "label": "react-dom", + "file_type": "concept", + "source_file": "package.json", + "source_location": "L19", + "_origin": "ast", + "community": 2, + "norm_label": "react-dom", + "id": "react_dom", + "community_name": "package.json" + }, + { + "label": "devDependencies", + "file_type": "code", + "source_file": "package.json", + "source_location": "L21", + "_origin": "ast", + "community": 4, + "norm_label": "devdependencies", + "id": "package_devdependencies", + "community_name": "devDependencies" + }, + { + "label": "@types/node", + "file_type": "code", + "source_file": "package.json", + "source_location": "L22", + "_origin": "ast", + "community": 4, + "norm_label": "@types/node", + "id": "package_devdependencies_types_node", + "community_name": "devDependencies" + }, + { + "label": "@types/node", + "file_type": "concept", + "source_file": "package.json", + "source_location": "L22", + "_origin": "ast", + "community": 4, + "norm_label": "@types/node", + "id": "types_node", + "community_name": "devDependencies" + }, + { + "label": "@types/react", + "file_type": "code", + "source_file": "package.json", + "source_location": "L23", + "_origin": "ast", + "community": 4, + "norm_label": "@types/react", + "id": "package_devdependencies_types_react", + "community_name": "devDependencies" + }, + { + "label": "@types/react", + "file_type": "concept", + "source_file": "package.json", + "source_location": "L23", + "_origin": "ast", + "community": 4, + "norm_label": "@types/react", + "id": "types_react", + "community_name": "devDependencies" + }, + { + "label": "@types/react-dom", + "file_type": "code", + "source_file": "package.json", + "source_location": "L24", + "_origin": "ast", + "community": 4, + "norm_label": "@types/react-dom", + "id": "package_devdependencies_types_react_dom", + "community_name": "devDependencies" + }, + { + "label": "@types/react-dom", + "file_type": "concept", + "source_file": "package.json", + "source_location": "L24", + "_origin": "ast", + "community": 4, + "norm_label": "@types/react-dom", + "id": "types_react_dom", + "community_name": "devDependencies" + }, + { + "label": "@vitejs/plugin-react", + "file_type": "code", + "source_file": "package.json", + "source_location": "L25", + "_origin": "ast", + "community": 4, + "norm_label": "@vitejs/plugin-react", + "id": "package_devdependencies_vitejs_plugin_react", + "community_name": "devDependencies" + }, + { + "label": "@vitejs/plugin-react", + "file_type": "concept", + "source_file": "package.json", + "source_location": "L25", + "_origin": "ast", + "community": 4, + "norm_label": "@vitejs/plugin-react", + "id": "vitejs_plugin_react", + "community_name": "devDependencies" + }, + { + "label": "oxlint", + "file_type": "code", + "source_file": "package.json", + "source_location": "L26", + "_origin": "ast", + "community": 4, + "norm_label": "oxlint", + "id": "package_devdependencies_oxlint", + "community_name": "devDependencies" + }, + { + "label": "oxlint", + "file_type": "concept", + "source_file": "package.json", + "source_location": "L26", + "_origin": "ast", + "community": 4, + "norm_label": "oxlint", + "id": "oxlint", + "community_name": "devDependencies" + }, + { + "label": "typescript", + "file_type": "code", + "source_file": "package.json", + "source_location": "L27", + "_origin": "ast", + "community": 4, + "norm_label": "typescript", + "id": "package_devdependencies_typescript", + "community_name": "devDependencies" + }, + { + "label": "typescript", + "file_type": "concept", + "source_file": "package.json", + "source_location": "L27", + "_origin": "ast", + "community": 4, + "norm_label": "typescript", + "id": "typescript", + "community_name": "devDependencies" + }, + { + "label": "vite", + "file_type": "code", + "source_file": "package.json", + "source_location": "L28", + "_origin": "ast", + "community": 4, + "norm_label": "vite", + "id": "package_devdependencies_vite", + "community_name": "devDependencies" + }, + { + "label": "vite", + "file_type": "concept", + "source_file": "package.json", + "source_location": "L28", + "_origin": "ast", + "community": 4, + "norm_label": "vite", + "id": "vite", + "community_name": "devDependencies" + }, + { + "label": "App.tsx", + "file_type": "code", + "source_file": "src/App.tsx", + "source_location": "L1", + "_origin": "ast", + "community": 0, + "norm_label": "app.tsx", + "id": "src_app", + "community_name": "App.tsx" + }, + { + "label": "CustomerView", + "file_type": "code", + "source_file": "src/App.tsx", + "source_location": "L17", + "_callable": true, + "_callable_class": true, + "_origin": "ast", + "community": 0, + "norm_label": "customerview", + "id": "src_app_customerview", + "community_name": "App.tsx" + }, + { + "label": "getTableNumFromUrl()", + "file_type": "code", + "source_file": "src/App.tsx", + "source_location": "L19", + "_callable": true, + "_origin": "ast", + "community": 0, + "norm_label": "gettablenumfromurl()", + "id": "src_app_gettablenumfromurl", + "community_name": "App.tsx" + }, + { + "label": "App()", + "file_type": "code", + "source_file": "src/App.tsx", + "source_location": "L36", + "_callable": true, + "_origin": "ast", + "community": 0, + "norm_label": "app()", + "id": "src_app_app", + "community_name": "App.tsx" + }, + { + "label": "AdminDesktopShell.tsx", + "file_type": "code", + "source_file": "src/components/admin/AdminDesktopShell.tsx", + "source_location": "L1", + "_origin": "ast", + "community": 7, + "norm_label": "admindesktopshell.tsx", + "id": "src_components_admin_admindesktopshell", + "community_name": "AdminDesktopShell.tsx" + }, + { + "label": "AdminDesktopShellProps", + "file_type": "code", + "source_file": "src/components/admin/AdminDesktopShell.tsx", + "source_location": "L45", + "_callable": true, + "_callable_class": true, + "_origin": "ast", + "community": 8, + "norm_label": "admindesktopshellprops", + "id": "src_components_admin_admindesktopshell_admindesktopshellprops", + "community_name": "index.ts" + }, + { + "label": "TabType", + "file_type": "code", + "source_file": "src/components/admin/AdminDesktopShell.tsx", + "source_location": "L55", + "_callable": true, + "_callable_class": true, + "_origin": "ast", + "community": 7, + "norm_label": "tabtype", + "id": "src_components_admin_admindesktopshell_tabtype", + "community_name": "AdminDesktopShell.tsx" + }, + { + "label": "AdminDesktopShell()", + "file_type": "code", + "source_file": "src/components/admin/AdminDesktopShell.tsx", + "source_location": "L67", + "_callable": true, + "_origin": "ast", + "community": 7, + "norm_label": "admindesktopshell()", + "id": "src_components_admin_admindesktopshell_admindesktopshell", + "community_name": "AdminDesktopShell.tsx" + }, + { + "label": "BillingManagerView.tsx", + "file_type": "code", + "source_file": "src/components/admin/BillingManagerView.tsx", + "source_location": "L1", + "_origin": "ast", + "community": 7, + "norm_label": "billingmanagerview.tsx", + "id": "src_components_admin_billingmanagerview", + "community_name": "AdminDesktopShell.tsx" + }, + { + "label": "BillingManagerView()", + "file_type": "code", + "source_file": "src/components/admin/BillingManagerView.tsx", + "source_location": "L34", + "_callable": true, + "_origin": "ast", + "community": 7, + "norm_label": "billingmanagerview()", + "id": "src_components_admin_billingmanagerview_billingmanagerview", + "community_name": "AdminDesktopShell.tsx" + }, + { + "label": "FeedbackInboxView.tsx", + "file_type": "code", + "source_file": "src/components/admin/FeedbackInboxView.tsx", + "source_location": "L1", + "_origin": "ast", + "community": 7, + "norm_label": "feedbackinboxview.tsx", + "id": "src_components_admin_feedbackinboxview", + "community_name": "AdminDesktopShell.tsx" + }, + { + "label": "FeedbackInboxView()", + "file_type": "code", + "source_file": "src/components/admin/FeedbackInboxView.tsx", + "source_location": "L24", + "_callable": true, + "_origin": "ast", + "community": 7, + "norm_label": "feedbackinboxview()", + "id": "src_components_admin_feedbackinboxview_feedbackinboxview", + "community_name": "AdminDesktopShell.tsx" + }, + { + "label": "InventoryView.tsx", + "file_type": "code", + "source_file": "src/components/admin/InventoryView.tsx", + "source_location": "L1", + "_origin": "ast", + "community": 1, + "norm_label": "inventoryview.tsx", + "id": "src_components_admin_inventoryview", + "community_name": "react" + }, + { + "label": "InventoryView()", + "file_type": "code", + "source_file": "src/components/admin/InventoryView.tsx", + "source_location": "L41", + "_callable": true, + "_origin": "ast", + "community": 7, + "norm_label": "inventoryview()", + "id": "src_components_admin_inventoryview_inventoryview", + "community_name": "AdminDesktopShell.tsx" + }, + { + "label": "ReservationsView.tsx", + "file_type": "code", + "source_file": "src/components/admin/ReservationsView.tsx", + "source_location": "L1", + "_origin": "ast", + "community": 7, + "norm_label": "reservationsview.tsx", + "id": "src_components_admin_reservationsview", + "community_name": "AdminDesktopShell.tsx" + }, + { + "label": "ReservationsView()", + "file_type": "code", + "source_file": "src/components/admin/ReservationsView.tsx", + "source_location": "L33", + "_callable": true, + "_origin": "ast", + "community": 7, + "norm_label": "reservationsview()", + "id": "src_components_admin_reservationsview_reservationsview", + "community_name": "AdminDesktopShell.tsx" + }, + { + "label": "StaffLoginModal.tsx", + "file_type": "code", + "source_file": "src/components/admin/StaffLoginModal.tsx", + "source_location": "L1", + "_origin": "ast", + "community": 0, + "norm_label": "staffloginmodal.tsx", + "id": "src_components_admin_staffloginmodal", + "community_name": "App.tsx" + }, + { + "label": "StaffLoginModalProps", + "file_type": "code", + "source_file": "src/components/admin/StaffLoginModal.tsx", + "source_location": "L19", + "_callable": true, + "_callable_class": true, + "_origin": "ast", + "community": 0, + "norm_label": "staffloginmodalprops", + "id": "src_components_admin_staffloginmodal_staffloginmodalprops", + "community_name": "App.tsx" + }, + { + "label": "StaffLoginModal()", + "file_type": "code", + "source_file": "src/components/admin/StaffLoginModal.tsx", + "source_location": "L25", + "_callable": true, + "_origin": "ast", + "community": 0, + "norm_label": "staffloginmodal()", + "id": "src_components_admin_staffloginmodal_staffloginmodal", + "community_name": "App.tsx" + }, + { + "label": "StaffShiftsView.tsx", + "file_type": "code", + "source_file": "src/components/admin/StaffShiftsView.tsx", + "source_location": "L1", + "_origin": "ast", + "community": 7, + "norm_label": "staffshiftsview.tsx", + "id": "src_components_admin_staffshiftsview", + "community_name": "AdminDesktopShell.tsx" + }, + { + "label": "StaffShiftsView()", + "file_type": "code", + "source_file": "src/components/admin/StaffShiftsView.tsx", + "source_location": "L33", + "_callable": true, + "_origin": "ast", + "community": 7, + "norm_label": "staffshiftsview()", + "id": "src_components_admin_staffshiftsview_staffshiftsview", + "community_name": "AdminDesktopShell.tsx" + }, + { + "label": "SuppliersView.tsx", + "file_type": "code", + "source_file": "src/components/admin/SuppliersView.tsx", + "source_location": "L1", + "_origin": "ast", + "community": 7, + "norm_label": "suppliersview.tsx", + "id": "src_components_admin_suppliersview", + "community_name": "AdminDesktopShell.tsx" + }, + { + "label": "SuppliersView()", + "file_type": "code", + "source_file": "src/components/admin/SuppliersView.tsx", + "source_location": "L42", + "_callable": true, + "_origin": "ast", + "community": 7, + "norm_label": "suppliersview()", + "id": "src_components_admin_suppliersview_suppliersview", + "community_name": "AdminDesktopShell.tsx" + }, + { + "label": "TableManagementView.tsx", + "file_type": "code", + "source_file": "src/components/admin/TableManagementView.tsx", + "source_location": "L1", + "_origin": "ast", + "community": 7, + "norm_label": "tablemanagementview.tsx", + "id": "src_components_admin_tablemanagementview", + "community_name": "AdminDesktopShell.tsx" + }, + { + "label": "TableManagementView()", + "file_type": "code", + "source_file": "src/components/admin/TableManagementView.tsx", + "source_location": "L31", + "_callable": true, + "_origin": "ast", + "community": 7, + "norm_label": "tablemanagementview()", + "id": "src_components_admin_tablemanagementview_tablemanagementview", + "community_name": "AdminDesktopShell.tsx" + }, + { + "label": "AnalyticsDashboard.tsx", + "file_type": "code", + "source_file": "src/components/analytics/AnalyticsDashboard.tsx", + "source_location": "L1", + "_origin": "ast", + "community": 1, + "norm_label": "analyticsdashboard.tsx", + "id": "src_components_analytics_analyticsdashboard", + "community_name": "react" + }, + { + "label": "AnalyticsDashboard()", + "file_type": "code", + "source_file": "src/components/analytics/AnalyticsDashboard.tsx", + "source_location": "L31", + "_callable": true, + "_origin": "ast", + "community": 7, + "norm_label": "analyticsdashboard()", + "id": "src_components_analytics_analyticsdashboard_analyticsdashboard", + "community_name": "AdminDesktopShell.tsx" + }, + { + "label": "Navigation.tsx", + "file_type": "code", + "source_file": "src/components/common/Navigation.tsx", + "source_location": "L1", + "_origin": "ast", + "community": 1, + "norm_label": "navigation.tsx", + "id": "src_components_common_navigation", + "community_name": "react" + }, + { + "label": "NavigationProps", + "file_type": "code", + "source_file": "src/components/common/Navigation.tsx", + "source_location": "L27", + "_callable": true, + "_callable_class": true, + "_origin": "ast", + "community": 1, + "norm_label": "navigationprops", + "id": "src_components_common_navigation_navigationprops", + "community_name": "react" + }, + { + "label": "Navigation()", + "file_type": "code", + "source_file": "src/components/common/Navigation.tsx", + "source_location": "L35", + "_callable": true, + "_origin": "ast", + "community": 1, + "norm_label": "navigation()", + "id": "src_components_common_navigation_navigation", + "community_name": "react" + }, + { + "label": "StatusBadge.tsx", + "file_type": "code", + "source_file": "src/components/common/StatusBadge.tsx", + "source_location": "L1", + "_origin": "ast", + "community": 1, + "norm_label": "statusbadge.tsx", + "id": "src_components_common_statusbadge", + "community_name": "react" + }, + { + "label": "StatusBadgeProps", + "file_type": "code", + "source_file": "src/components/common/StatusBadge.tsx", + "source_location": "L5", + "_callable": true, + "_callable_class": true, + "_origin": "ast", + "community": 8, + "norm_label": "statusbadgeprops", + "id": "src_components_common_statusbadge_statusbadgeprops", + "community_name": "index.ts" + }, + { + "label": "StatusBadge()", + "file_type": "code", + "source_file": "src/components/common/StatusBadge.tsx", + "source_location": "L12", + "_callable": true, + "_origin": "ast", + "community": 1, + "norm_label": "statusbadge()", + "id": "src_components_common_statusbadge_statusbadge", + "community_name": "react" + }, + { + "label": "BillPaymentView.tsx", + "file_type": "code", + "source_file": "src/components/customer/BillPaymentView.tsx", + "source_location": "L1", + "_origin": "ast", + "community": 0, + "norm_label": "billpaymentview.tsx", + "id": "src_components_customer_billpaymentview", + "community_name": "App.tsx" + }, + { + "label": "BillPaymentViewProps", + "file_type": "code", + "source_file": "src/components/customer/BillPaymentView.tsx", + "source_location": "L21", + "_callable": true, + "_callable_class": true, + "_origin": "ast", + "community": 0, + "norm_label": "billpaymentviewprops", + "id": "src_components_customer_billpaymentview_billpaymentviewprops", + "community_name": "App.tsx" + }, + { + "label": "BillPaymentView()", + "file_type": "code", + "source_file": "src/components/customer/BillPaymentView.tsx", + "source_location": "L25", + "_callable": true, + "_origin": "ast", + "community": 0, + "norm_label": "billpaymentview()", + "id": "src_components_customer_billpaymentview_billpaymentview", + "community_name": "App.tsx" + }, + { + "label": "CartReviewView.tsx", + "file_type": "code", + "source_file": "src/components/customer/CartReviewView.tsx", + "source_location": "L1", + "_origin": "ast", + "community": 1, + "norm_label": "cartreviewview.tsx", + "id": "src_components_customer_cartreviewview", + "community_name": "react" + }, + { + "label": "CartReviewViewProps", + "file_type": "code", + "source_file": "src/components/customer/CartReviewView.tsx", + "source_location": "L25", + "_callable": true, + "_callable_class": true, + "_origin": "ast", + "community": 1, + "norm_label": "cartreviewviewprops", + "id": "src_components_customer_cartreviewview_cartreviewviewprops", + "community_name": "react" + }, + { + "label": "CartReviewView()", + "file_type": "code", + "source_file": "src/components/customer/CartReviewView.tsx", + "source_location": "L32", + "_callable": true, + "_origin": "ast", + "community": 1, + "norm_label": "cartreviewview()", + "id": "src_components_customer_cartreviewview_cartreviewview", + "community_name": "react" + }, + { + "label": "CustomizationModal.tsx", + "file_type": "code", + "source_file": "src/components/customer/CustomizationModal.tsx", + "source_location": "L1", + "_origin": "ast", + "community": 1, + "norm_label": "customizationmodal.tsx", + "id": "src_components_customer_customizationmodal", + "community_name": "react" + }, + { + "label": "CustomizationModalProps", + "file_type": "code", + "source_file": "src/components/customer/CustomizationModal.tsx", + "source_location": "L20", + "_callable": true, + "_callable_class": true, + "_origin": "ast", + "community": 1, + "norm_label": "customizationmodalprops", + "id": "src_components_customer_customizationmodal_customizationmodalprops", + "community_name": "react" + }, + { + "label": "CustomizationModal()", + "file_type": "code", + "source_file": "src/components/customer/CustomizationModal.tsx", + "source_location": "L27", + "_callable": true, + "_origin": "ast", + "community": 0, + "norm_label": "customizationmodal()", + "id": "src_components_customer_customizationmodal_customizationmodal", + "community_name": "App.tsx" + }, + { + "label": "MenuBrowseView.tsx", + "file_type": "code", + "source_file": "src/components/customer/MenuBrowseView.tsx", + "source_location": "L1", + "_origin": "ast", + "community": 1, + "norm_label": "menubrowseview.tsx", + "id": "src_components_customer_menubrowseview", + "community_name": "react" + }, + { + "label": "MenuBrowseViewProps", + "file_type": "code", + "source_file": "src/components/customer/MenuBrowseView.tsx", + "source_location": "L31", + "_callable": true, + "_callable_class": true, + "_origin": "ast", + "community": 1, + "norm_label": "menubrowseviewprops", + "id": "src_components_customer_menubrowseview_menubrowseviewprops", + "community_name": "react" + }, + { + "label": "DIETARY_FILTERS", + "file_type": "code", + "source_file": "src/components/customer/MenuBrowseView.tsx", + "source_location": "L39", + "_origin": "ast", + "community": 1, + "norm_label": "dietary_filters", + "id": "src_components_customer_menubrowseview_dietary_filters", + "community_name": "react" + }, + { + "label": "SPICE_ICONS", + "file_type": "code", + "source_file": "src/components/customer/MenuBrowseView.tsx", + "source_location": "L46", + "_origin": "ast", + "community": 1, + "norm_label": "spice_icons", + "id": "src_components_customer_menubrowseview_spice_icons", + "community_name": "react" + }, + { + "label": "MenuBrowseView()", + "file_type": "code", + "source_file": "src/components/customer/MenuBrowseView.tsx", + "source_location": "L53", + "_callable": true, + "_origin": "ast", + "community": 1, + "norm_label": "menubrowseview()", + "id": "src_components_customer_menubrowseview_menubrowseview", + "community_name": "react" + }, + { + "label": "OrderStatusView.tsx", + "file_type": "code", + "source_file": "src/components/customer/OrderStatusView.tsx", + "source_location": "L1", + "_origin": "ast", + "community": 0, + "norm_label": "orderstatusview.tsx", + "id": "src_components_customer_orderstatusview", + "community_name": "App.tsx" + }, + { + "label": "OrderStatusViewProps", + "file_type": "code", + "source_file": "src/components/customer/OrderStatusView.tsx", + "source_location": "L25", + "_callable": true, + "_callable_class": true, + "_origin": "ast", + "community": 0, + "norm_label": "orderstatusviewprops", + "id": "src_components_customer_orderstatusview_orderstatusviewprops", + "community_name": "App.tsx" + }, + { + "label": "ORDER_STEPS", + "file_type": "code", + "source_file": "src/components/customer/OrderStatusView.tsx", + "source_location": "L29", + "_origin": "ast", + "community": 0, + "norm_label": "order_steps", + "id": "src_components_customer_orderstatusview_order_steps", + "community_name": "App.tsx" + }, + { + "label": "OrderStatusView()", + "file_type": "code", + "source_file": "src/components/customer/OrderStatusView.tsx", + "source_location": "L56", + "_callable": true, + "_origin": "ast", + "community": 0, + "norm_label": "orderstatusview()", + "id": "src_components_customer_orderstatusview_orderstatusview", + "community_name": "App.tsx" + }, + { + "label": "customer/TableLandingView.tsx", + "file_type": "code", + "source_file": "src/components/customer/TableLandingView.tsx", + "source_location": "L1", + "_origin": "ast", + "community": 0, + "norm_label": "customer/tablelandingview.tsx", + "id": "src_components_customer_tablelandingview", + "community_name": "App.tsx" + }, + { + "label": "TableLandingViewProps", + "file_type": "code", + "source_file": "src/components/customer/TableLandingView.tsx", + "source_location": "L21", + "_callable": true, + "_callable_class": true, + "_origin": "ast", + "community": 0, + "norm_label": "tablelandingviewprops", + "id": "src_components_customer_tablelandingview_tablelandingviewprops", + "community_name": "App.tsx" + }, + { + "label": "TableLandingView()", + "file_type": "code", + "source_file": "src/components/customer/TableLandingView.tsx", + "source_location": "L27", + "_callable": true, + "_origin": "ast", + "community": 0, + "norm_label": "tablelandingview()", + "id": "src_components_customer_tablelandingview_tablelandingview", + "community_name": "App.tsx" + }, + { + "label": "VoiceAssistantModal.tsx", + "file_type": "code", + "source_file": "src/components/customer/VoiceAssistantModal.tsx", + "source_location": "L1", + "_origin": "ast", + "community": 6, + "norm_label": "voiceassistantmodal.tsx", + "id": "src_components_customer_voiceassistantmodal", + "community_name": "VoiceAssistantModal.tsx" + }, + { + "label": "DetectedItem", + "file_type": "code", + "source_file": "src/components/customer/VoiceAssistantModal.tsx", + "source_location": "L28", + "_callable": true, + "_callable_class": true, + "_origin": "ast", + "community": 6, + "norm_label": "detecteditem", + "id": "src_components_customer_voiceassistantmodal_detecteditem", + "community_name": "VoiceAssistantModal.tsx" + }, + { + "label": "VoiceAssistantModalProps", + "file_type": "code", + "source_file": "src/components/customer/VoiceAssistantModal.tsx", + "source_location": "L33", + "_callable": true, + "_callable_class": true, + "_origin": "ast", + "community": 6, + "norm_label": "voiceassistantmodalprops", + "id": "src_components_customer_voiceassistantmodal_voiceassistantmodalprops", + "community_name": "VoiceAssistantModal.tsx" + }, + { + "label": "parseTranscriptToItems()", + "file_type": "code", + "source_file": "src/components/customer/VoiceAssistantModal.tsx", + "source_location": "L40", + "_callable": true, + "_origin": "ast", + "community": 6, + "norm_label": "parsetranscripttoitems()", + "id": "src_components_customer_voiceassistantmodal_parsetranscripttoitems", + "community_name": "VoiceAssistantModal.tsx" + }, + { + "label": "QUICK_COMMANDS", + "file_type": "code", + "source_file": "src/components/customer/VoiceAssistantModal.tsx", + "source_location": "L69", + "_origin": "ast", + "community": 6, + "norm_label": "quick_commands", + "id": "src_components_customer_voiceassistantmodal_quick_commands", + "community_name": "VoiceAssistantModal.tsx" + }, + { + "label": "VoiceAssistantModal()", + "file_type": "code", + "source_file": "src/components/customer/VoiceAssistantModal.tsx", + "source_location": "L77", + "_callable": true, + "_origin": "ast", + "community": 6, + "norm_label": "voiceassistantmodal()", + "id": "src_components_customer_voiceassistantmodal_voiceassistantmodal", + "community_name": "VoiceAssistantModal.tsx" + }, + { + "label": "KDSKanban.tsx", + "file_type": "code", + "source_file": "src/components/kds/KDSKanban.tsx", + "source_location": "L1", + "_origin": "ast", + "community": 8, + "norm_label": "kdskanban.tsx", + "id": "src_components_kds_kdskanban", + "community_name": "index.ts" + }, + { + "label": "KDSKanbanProps", + "file_type": "code", + "source_file": "src/components/kds/KDSKanban.tsx", + "source_location": "L19", + "_callable": true, + "_callable_class": true, + "_origin": "ast", + "community": 8, + "norm_label": "kdskanbanprops", + "id": "src_components_kds_kdskanban_kdskanbanprops", + "community_name": "index.ts" + }, + { + "label": "KDSKanban()", + "file_type": "code", + "source_file": "src/components/kds/KDSKanban.tsx", + "source_location": "L26", + "_callable": true, + "_origin": "ast", + "community": 7, + "norm_label": "kdskanban()", + "id": "src_components_kds_kdskanban_kdskanban", + "community_name": "AdminDesktopShell.tsx" + }, + { + "label": "KDSTicketCard.tsx", + "file_type": "code", + "source_file": "src/components/kds/KDSTicketCard.tsx", + "source_location": "L1", + "_origin": "ast", + "community": 8, + "norm_label": "kdsticketcard.tsx", + "id": "src_components_kds_kdsticketcard", + "community_name": "index.ts" + }, + { + "label": "KDSTicketCardProps", + "file_type": "code", + "source_file": "src/components/kds/KDSTicketCard.tsx", + "source_location": "L23", + "_callable": true, + "_callable_class": true, + "_origin": "ast", + "community": 8, + "norm_label": "kdsticketcardprops", + "id": "src_components_kds_kdsticketcard_kdsticketcardprops", + "community_name": "index.ts" + }, + { + "label": "KDSTicketCard()", + "file_type": "code", + "source_file": "src/components/kds/KDSTicketCard.tsx", + "source_location": "L29", + "_callable": true, + "_origin": "ast", + "community": 8, + "norm_label": "kdsticketcard()", + "id": "src_components_kds_kdsticketcard_kdsticketcard", + "community_name": "index.ts" + }, + { + "label": "table/TableLandingView.tsx", + "file_type": "code", + "source_file": "src/components/table/TableLandingView.tsx", + "source_location": "L1", + "_origin": "ast", + "community": 1, + "norm_label": "table/tablelandingview.tsx", + "id": "src_components_table_tablelandingview", + "community_name": "react" + }, + { + "label": "TableLandingView()", + "file_type": "code", + "source_file": "src/components/table/TableLandingView.tsx", + "source_location": "L26", + "_callable": true, + "_origin": "ast", + "community": 1, + "norm_label": "tablelandingview()", + "id": "src_components_table_tablelandingview_tablelandingview", + "community_name": "react" + }, + { + "label": "VoiceOrderingView.tsx", + "file_type": "code", + "source_file": "src/components/voice/VoiceOrderingView.tsx", + "source_location": "L1", + "_origin": "ast", + "community": 8, + "norm_label": "voiceorderingview.tsx", + "id": "src_components_voice_voiceorderingview", + "community_name": "index.ts" + }, + { + "label": "VoiceOrderingViewProps", + "file_type": "code", + "source_file": "src/components/voice/VoiceOrderingView.tsx", + "source_location": "L21", + "_callable": true, + "_callable_class": true, + "_origin": "ast", + "community": 8, + "norm_label": "voiceorderingviewprops", + "id": "src_components_voice_voiceorderingview_voiceorderingviewprops", + "community_name": "index.ts" + }, + { + "label": "VoiceOrderingView()", + "file_type": "code", + "source_file": "src/components/voice/VoiceOrderingView.tsx", + "source_location": "L25", + "_callable": true, + "_origin": "ast", + "community": 8, + "norm_label": "voiceorderingview()", + "id": "src_components_voice_voiceorderingview_voiceorderingview", + "community_name": "index.ts" + }, + { + "label": "menuData.ts", + "file_type": "code", + "source_file": "src/data/menuData.ts", + "source_location": "L1", + "_origin": "ast", + "community": 1, + "norm_label": "menudata.ts", + "id": "src_data_menudata", + "community_name": "react" + }, + { + "label": "MenuItem", + "file_type": "code", + "source_file": "src/data/menuData.ts", + "source_location": "L1", + "_callable": true, + "_callable_class": true, + "_origin": "ast", + "community": 1, + "norm_label": "menuitem", + "id": "src_data_menudata_menuitem", + "community_name": "react" + }, + { + "label": "MENU_ITEMS", + "file_type": "code", + "source_file": "src/data/menuData.ts", + "source_location": "L17", + "_origin": "ast", + "community": 1, + "norm_label": "menu_items", + "id": "src_data_menudata_menu_items", + "community_name": "react" + }, + { + "label": "CATEGORIES", + "file_type": "code", + "source_file": "src/data/menuData.ts", + "source_location": "L375", + "_origin": "ast", + "community": 1, + "norm_label": "categories", + "id": "src_data_menudata_categories", + "community_name": "react" + }, + { + "label": "CategoryType", + "file_type": "code", + "source_file": "src/data/menuData.ts", + "source_location": "L376", + "_callable": true, + "_callable_class": true, + "_origin": "ast", + "community": 1, + "norm_label": "categorytype", + "id": "src_data_menudata_categorytype", + "community_name": "react" + }, + { + "label": "useSpeechRecognition.ts", + "file_type": "code", + "source_file": "src/hooks/useSpeechRecognition.ts", + "source_location": "L1", + "_origin": "ast", + "community": 6, + "norm_label": "usespeechrecognition.ts", + "id": "src_hooks_usespeechrecognition", + "community_name": "VoiceAssistantModal.tsx" + }, + { + "label": "SpeechRecognitionEvent", + "file_type": "code", + "source_file": "src/hooks/useSpeechRecognition.ts", + "source_location": "L3", + "_callable": true, + "_callable_class": true, + "_origin": "ast", + "community": 6, + "norm_label": "speechrecognitionevent", + "id": "src_hooks_usespeechrecognition_speechrecognitionevent", + "community_name": "VoiceAssistantModal.tsx" + }, + { + "label": "SpeechRecognitionErrorEvent", + "file_type": "code", + "source_file": "src/hooks/useSpeechRecognition.ts", + "source_location": "L8", + "_callable": true, + "_callable_class": true, + "_origin": "ast", + "community": 6, + "norm_label": "speechrecognitionerrorevent", + "id": "src_hooks_usespeechrecognition_speechrecognitionerrorevent", + "community_name": "VoiceAssistantModal.tsx" + }, + { + "label": "ISpeechRecognition", + "file_type": "code", + "source_file": "src/hooks/useSpeechRecognition.ts", + "source_location": "L12", + "_callable": true, + "_callable_class": true, + "_origin": "ast", + "community": 6, + "norm_label": "ispeechrecognition", + "id": "src_hooks_usespeechrecognition_ispeechrecognition", + "community_name": "VoiceAssistantModal.tsx" + }, + { + "label": ".start()", + "file_type": "code", + "source_file": "src/hooks/useSpeechRecognition.ts", + "source_location": "L17", + "_callable": true, + "_origin": "ast", + "community": 6, + "norm_label": ".start()", + "id": "src_hooks_usespeechrecognition_ispeechrecognition_start", + "community_name": "VoiceAssistantModal.tsx" + }, + { + "label": ".stop()", + "file_type": "code", + "source_file": "src/hooks/useSpeechRecognition.ts", + "source_location": "L18", + "_callable": true, + "_origin": "ast", + "community": 6, + "norm_label": ".stop()", + "id": "src_hooks_usespeechrecognition_ispeechrecognition_stop", + "community_name": "VoiceAssistantModal.tsx" + }, + { + "label": ".abort()", + "file_type": "code", + "source_file": "src/hooks/useSpeechRecognition.ts", + "source_location": "L19", + "_callable": true, + "_origin": "ast", + "community": 6, + "norm_label": ".abort()", + "id": "src_hooks_usespeechrecognition_ispeechrecognition_abort", + "community_name": "VoiceAssistantModal.tsx" + }, + { + "label": "Window", + "file_type": "code", + "source_file": "src/hooks/useSpeechRecognition.ts", + "source_location": "L27", + "_callable": true, + "_callable_class": true, + "_origin": "ast", + "community": 6, + "norm_label": "window", + "id": "src_hooks_usespeechrecognition_window", + "community_name": "VoiceAssistantModal.tsx" + }, + { + "label": "VoiceState", + "file_type": "code", + "source_file": "src/hooks/useSpeechRecognition.ts", + "source_location": "L33", + "_callable": true, + "_callable_class": true, + "_origin": "ast", + "community": 6, + "norm_label": "voicestate", + "id": "src_hooks_usespeechrecognition_voicestate", + "community_name": "VoiceAssistantModal.tsx" + }, + { + "label": "UseSpeechRecognitionReturn", + "file_type": "code", + "source_file": "src/hooks/useSpeechRecognition.ts", + "source_location": "L35", + "_callable": true, + "_callable_class": true, + "_origin": "ast", + "community": 6, + "norm_label": "usespeechrecognitionreturn", + "id": "src_hooks_usespeechrecognition_usespeechrecognitionreturn", + "community_name": "VoiceAssistantModal.tsx" + }, + { + "label": "useSpeechRecognition()", + "file_type": "code", + "source_file": "src/hooks/useSpeechRecognition.ts", + "source_location": "L46", + "_callable": true, + "_origin": "ast", + "community": 6, + "norm_label": "usespeechrecognition()", + "id": "src_hooks_usespeechrecognition_usespeechrecognition", + "community_name": "VoiceAssistantModal.tsx" + }, + { + "label": "useSpeechSynthesis.ts", + "file_type": "code", + "source_file": "src/hooks/useSpeechSynthesis.ts", + "source_location": "L1", + "_origin": "ast", + "community": 6, + "norm_label": "usespeechsynthesis.ts", + "id": "src_hooks_usespeechsynthesis", + "community_name": "VoiceAssistantModal.tsx" + }, + { + "label": "UseSpeechSynthesisReturn", + "file_type": "code", + "source_file": "src/hooks/useSpeechSynthesis.ts", + "source_location": "L4", + "_callable": true, + "_callable_class": true, + "_origin": "ast", + "community": 6, + "norm_label": "usespeechsynthesisreturn", + "id": "src_hooks_usespeechsynthesis_usespeechsynthesisreturn", + "community_name": "VoiceAssistantModal.tsx" + }, + { + "label": "useSpeechSynthesis()", + "file_type": "code", + "source_file": "src/hooks/useSpeechSynthesis.ts", + "source_location": "L10", + "_callable": true, + "_origin": "ast", + "community": 6, + "norm_label": "usespeechsynthesis()", + "id": "src_hooks_usespeechsynthesis_usespeechsynthesis", + "community_name": "VoiceAssistantModal.tsx" + }, + { + "label": "main.tsx", + "file_type": "code", + "source_file": "src/main.tsx", + "source_location": "L1", + "_origin": "ast", + "community": 0, + "norm_label": "main.tsx", + "id": "src_main", + "community_name": "App.tsx" + }, + { + "label": "api.ts", + "file_type": "code", + "source_file": "src/services/api.ts", + "source_location": "L1", + "_origin": "ast", + "community": 0, + "norm_label": "api.ts", + "id": "src_services_api", + "community_name": "App.tsx" + }, + { + "label": "getAccessToken()", + "file_type": "code", + "source_file": "src/services/api.ts", + "source_location": "L7", + "_callable": true, + "_origin": "ast", + "community": 0, + "norm_label": "getaccesstoken()", + "id": "src_services_api_getaccesstoken", + "community_name": "App.tsx" + }, + { + "label": "getRefreshToken()", + "file_type": "code", + "source_file": "src/services/api.ts", + "source_location": "L8", + "_callable": true, + "_origin": "ast", + "community": 0, + "norm_label": "getrefreshtoken()", + "id": "src_services_api_getrefreshtoken", + "community_name": "App.tsx" + }, + { + "label": "setTokens()", + "file_type": "code", + "source_file": "src/services/api.ts", + "source_location": "L9", + "_callable": true, + "_origin": "ast", + "community": 0, + "norm_label": "settokens()", + "id": "src_services_api_settokens", + "community_name": "App.tsx" + }, + { + "label": "clearTokens()", + "file_type": "code", + "source_file": "src/services/api.ts", + "source_location": "L13", + "_callable": true, + "_origin": "ast", + "community": 0, + "norm_label": "cleartokens()", + "id": "src_services_api_cleartokens", + "community_name": "App.tsx" + }, + { + "label": "getCustomerToken()", + "file_type": "code", + "source_file": "src/services/api.ts", + "source_location": "L18", + "_callable": true, + "_origin": "ast", + "community": 0, + "norm_label": "getcustomertoken()", + "id": "src_services_api_getcustomertoken", + "community_name": "App.tsx" + }, + { + "label": "getCustomerSessionId()", + "file_type": "code", + "source_file": "src/services/api.ts", + "source_location": "L19", + "_callable": true, + "_origin": "ast", + "community": 0, + "norm_label": "getcustomersessionid()", + "id": "src_services_api_getcustomersessionid", + "community_name": "App.tsx" + }, + { + "label": "setCustomerSession()", + "file_type": "code", + "source_file": "src/services/api.ts", + "source_location": "L20", + "_callable": true, + "_origin": "ast", + "community": 0, + "norm_label": "setcustomersession()", + "id": "src_services_api_setcustomersession", + "community_name": "App.tsx" + }, + { + "label": "clearCustomerSession()", + "file_type": "code", + "source_file": "src/services/api.ts", + "source_location": "L26", + "_callable": true, + "_origin": "ast", + "community": 0, + "norm_label": "clearcustomersession()", + "id": "src_services_api_clearcustomersession", + "community_name": "App.tsx" + }, + { + "label": "getBackendMenuId()", + "file_type": "code", + "source_file": "src/services/api.ts", + "source_location": "L34", + "_callable": true, + "_origin": "ast", + "community": 0, + "norm_label": "getbackendmenuid()", + "id": "src_services_api_getbackendmenuid", + "community_name": "App.tsx" + }, + { + "label": "getFrontendMenuItem()", + "file_type": "code", + "source_file": "src/services/api.ts", + "source_location": "L39", + "_callable": true, + "_origin": "ast", + "community": 0, + "norm_label": "getfrontendmenuitem()", + "id": "src_services_api_getfrontendmenuitem", + "community_name": "App.tsx" + }, + { + "label": "isDemoMode", + "file_type": "code", + "source_file": "src/services/api.ts", + "source_location": "L45", + "_origin": "ast", + "community": 0, + "norm_label": "isdemomode", + "id": "src_services_api_isdemomode", + "community_name": "App.tsx" + }, + { + "label": "setDemoModeChangeCallback()", + "file_type": "code", + "source_file": "src/services/api.ts", + "source_location": "L48", + "_callable": true, + "_origin": "ast", + "community": 0, + "norm_label": "setdemomodechangecallback()", + "id": "src_services_api_setdemomodechangecallback", + "community_name": "App.tsx" + }, + { + "label": "triggerDemoMode()", + "file_type": "code", + "source_file": "src/services/api.ts", + "source_location": "L52", + "_callable": true, + "_origin": "ast", + "community": 0, + "norm_label": "triggerdemomode()", + "id": "src_services_api_triggerdemomode", + "community_name": "App.tsx" + }, + { + "label": "mockDb", + "file_type": "code", + "source_file": "src/services/api.ts", + "source_location": "L62", + "_origin": "ast", + "community": 0, + "norm_label": "mockdb", + "id": "src_services_api_mockdb", + "community_name": "App.tsx" + }, + { + "label": "apiRequest()", + "file_type": "code", + "source_file": "src/services/api.ts", + "source_location": "L107", + "_callable": true, + "_origin": "ast", + "community": 0, + "norm_label": "apirequest()", + "id": "src_services_api_apirequest", + "community_name": "App.tsx" + }, + { + "label": "handleMockRequest()", + "file_type": "code", + "source_file": "src/services/api.ts", + "source_location": "L159", + "_callable": true, + "_origin": "ast", + "community": 0, + "norm_label": "handlemockrequest()", + "id": "src_services_api_handlemockrequest", + "community_name": "App.tsx" + }, + { + "label": "wsListeners", + "file_type": "code", + "source_file": "src/services/api.ts", + "source_location": "L540", + "_origin": "ast", + "community": 0, + "norm_label": "wslisteners", + "id": "src_services_api_wslisteners", + "community_name": "App.tsx" + }, + { + "label": "subscribeToWsEvents()", + "file_type": "code", + "source_file": "src/services/api.ts", + "source_location": "L541", + "_callable": true, + "_origin": "ast", + "community": 0, + "norm_label": "subscribetowsevents()", + "id": "src_services_api_subscribetowsevents", + "community_name": "App.tsx" + }, + { + "label": "notifyWsListeners()", + "file_type": "code", + "source_file": "src/services/api.ts", + "source_location": "L548", + "_callable": true, + "_origin": "ast", + "community": 0, + "norm_label": "notifywslisteners()", + "id": "src_services_api_notifywslisteners", + "community_name": "App.tsx" + }, + { + "label": "RestroWebSocket", + "file_type": "code", + "source_file": "src/services/api.ts", + "source_location": "L558", + "_callable": true, + "_callable_class": true, + "_origin": "ast", + "community": 0, + "norm_label": "restrowebsocket", + "id": "src_services_api_restrowebsocket", + "community_name": "App.tsx" + }, + { + "label": ".constructor()", + "file_type": "code", + "source_file": "src/services/api.ts", + "source_location": "L564", + "_callable": true, + "_origin": "ast", + "community": 0, + "norm_label": ".constructor()", + "id": "src_services_api_restrowebsocket_constructor", + "community_name": "App.tsx" + }, + { + "label": ".connect()", + "file_type": "code", + "source_file": "src/services/api.ts", + "source_location": "L574", + "_callable": true, + "_origin": "ast", + "community": 0, + "norm_label": ".connect()", + "id": "src_services_api_restrowebsocket_connect", + "community_name": "App.tsx" + }, + { + "label": ".close()", + "file_type": "code", + "source_file": "src/services/api.ts", + "source_location": "L608", + "_callable": true, + "_origin": "ast", + "community": 0, + "norm_label": ".close()", + "id": "src_services_api_restrowebsocket_close", + "community_name": "App.tsx" + }, + { + "label": "api", + "file_type": "code", + "source_file": "src/services/api.ts", + "source_location": "L619", + "_origin": "ast", + "community": 7, + "norm_label": "api", + "id": "src_services_api_api", + "community_name": "AdminDesktopShell.tsx" + }, + { + "label": "theme.ts", + "file_type": "code", + "source_file": "src/theme/theme.ts", + "source_location": "L1", + "_origin": "ast", + "community": 0, + "norm_label": "theme.ts", + "id": "src_theme_theme", + "community_name": "App.tsx" + }, + { + "label": "theme", + "file_type": "code", + "source_file": "src/theme/theme.ts", + "source_location": "L3", + "_origin": "ast", + "community": 0, + "norm_label": "theme", + "id": "src_theme_theme_theme", + "community_name": "App.tsx" + }, + { + "label": "index.ts", + "file_type": "code", + "source_file": "src/types/index.ts", + "source_location": "L1", + "_origin": "ast", + "community": 8, + "norm_label": "index.ts", + "id": "src_types_index", + "community_name": "index.ts" + }, + { + "label": "OrderStatus", + "file_type": "code", + "source_file": "src/types/index.ts", + "source_location": "L1", + "_callable": true, + "_callable_class": true, + "_origin": "ast", + "community": 8, + "norm_label": "orderstatus", + "id": "src_types_index_orderstatus", + "community_name": "index.ts" + }, + { + "label": "OrderType", + "file_type": "code", + "source_file": "src/types/index.ts", + "source_location": "L2", + "_callable": true, + "_callable_class": true, + "_origin": "ast", + "community": 8, + "norm_label": "ordertype", + "id": "src_types_index_ordertype", + "community_name": "index.ts" + }, + { + "label": "OrderItem", + "file_type": "code", + "source_file": "src/types/index.ts", + "source_location": "L4", + "_callable": true, + "_callable_class": true, + "_origin": "ast", + "community": 8, + "norm_label": "orderitem", + "id": "src_types_index_orderitem", + "community_name": "index.ts" + }, + { + "label": "KDSOrder", + "file_type": "code", + "source_file": "src/types/index.ts", + "source_location": "L14", + "_callable": true, + "_callable_class": true, + "_origin": "ast", + "community": 8, + "norm_label": "kdsorder", + "id": "src_types_index_kdsorder", + "community_name": "index.ts" + }, + { + "label": "AnalyticsMetric", + "file_type": "code", + "source_file": "src/types/index.ts", + "source_location": "L29", + "_callable": true, + "_callable_class": true, + "_origin": "ast", + "community": 8, + "norm_label": "analyticsmetric", + "id": "src_types_index_analyticsmetric", + "community_name": "index.ts" + }, + { + "label": "DishPerformance", + "file_type": "code", + "source_file": "src/types/index.ts", + "source_location": "L37", + "_callable": true, + "_callable_class": true, + "_origin": "ast", + "community": 8, + "norm_label": "dishperformance", + "id": "src_types_index_dishperformance", + "community_name": "index.ts" + }, + { + "label": "VoiceCommandSuggestion", + "file_type": "code", + "source_file": "src/types/index.ts", + "source_location": "L47", + "_callable": true, + "_callable_class": true, + "_origin": "ast", + "community": 8, + "norm_label": "voicecommandsuggestion", + "id": "src_types_index_voicecommandsuggestion", + "community_name": "index.ts" + }, + { + "label": "tsconfig.app.json", + "file_type": "code", + "source_file": "tsconfig.app.json", + "source_location": "L1", + "_origin": "ast", + "community": 3, + "norm_label": "tsconfig.app.json", + "id": "tsconfig_app", + "community_name": "compilerOptions" + }, + { + "label": "compilerOptions", + "file_type": "code", + "source_file": "tsconfig.app.json", + "source_location": "L2", + "_origin": "ast", + "community": 3, + "norm_label": "compileroptions", + "id": "tsconfig_app_compileroptions", + "community_name": "compilerOptions" + }, + { + "label": "tsBuildInfoFile", + "file_type": "code", + "source_file": "tsconfig.app.json", + "source_location": "L3", + "_origin": "ast", + "community": 3, + "norm_label": "tsbuildinfofile", + "id": "tsconfig_app_compileroptions_tsbuildinfofile", + "community_name": "compilerOptions" + }, + { + "label": "target", + "file_type": "code", + "source_file": "tsconfig.app.json", + "source_location": "L4", + "_origin": "ast", + "community": 3, + "norm_label": "target", + "id": "tsconfig_app_compileroptions_target", + "community_name": "compilerOptions" + }, + { + "label": "lib", + "file_type": "code", + "source_file": "tsconfig.app.json", + "source_location": "L5", + "_origin": "ast", + "community": 3, + "norm_label": "lib", + "id": "tsconfig_app_compileroptions_lib", + "community_name": "compilerOptions" + }, + { + "label": "ES2023", + "file_type": "concept", + "source_file": "tsconfig.app.json", + "source_location": "L5", + "_origin": "ast", + "community": 3, + "norm_label": "es2023", + "id": "tsconfig_app_json_ref_es2023", + "community_name": "compilerOptions" + }, + { + "label": "DOM", + "file_type": "concept", + "source_file": "tsconfig.app.json", + "source_location": "L5", + "_origin": "ast", + "community": 3, + "norm_label": "dom", + "id": "ref_dom", + "community_name": "compilerOptions" + }, + { + "label": "module", + "file_type": "code", + "source_file": "tsconfig.app.json", + "source_location": "L6", + "_origin": "ast", + "community": 3, + "norm_label": "module", + "id": "tsconfig_app_compileroptions_module", + "community_name": "compilerOptions" + }, + { + "label": "types", + "file_type": "code", + "source_file": "tsconfig.app.json", + "source_location": "L7", + "_origin": "ast", + "community": 3, + "norm_label": "types", + "id": "tsconfig_app_compileroptions_types", + "community_name": "compilerOptions" + }, + { + "label": "vite/client", + "file_type": "concept", + "source_file": "tsconfig.app.json", + "source_location": "L7", + "_origin": "ast", + "community": 3, + "norm_label": "vite/client", + "id": "ref_vite_client", + "community_name": "compilerOptions" + }, + { + "label": "allowArbitraryExtensions", + "file_type": "code", + "source_file": "tsconfig.app.json", + "source_location": "L8", + "_origin": "ast", + "community": 3, + "norm_label": "allowarbitraryextensions", + "id": "tsconfig_app_compileroptions_allowarbitraryextensions", + "community_name": "compilerOptions" + }, + { + "label": "skipLibCheck", + "file_type": "code", + "source_file": "tsconfig.app.json", + "source_location": "L9", + "_origin": "ast", + "community": 3, + "norm_label": "skiplibcheck", + "id": "tsconfig_app_compileroptions_skiplibcheck", + "community_name": "compilerOptions" + }, + { + "label": "moduleResolution", + "file_type": "code", + "source_file": "tsconfig.app.json", + "source_location": "L12", + "_origin": "ast", + "community": 3, + "norm_label": "moduleresolution", + "id": "tsconfig_app_compileroptions_moduleresolution", + "community_name": "compilerOptions" + }, + { + "label": "allowImportingTsExtensions", + "file_type": "code", + "source_file": "tsconfig.app.json", + "source_location": "L13", + "_origin": "ast", + "community": 3, + "norm_label": "allowimportingtsextensions", + "id": "tsconfig_app_compileroptions_allowimportingtsextensions", + "community_name": "compilerOptions" + }, + { + "label": "verbatimModuleSyntax", + "file_type": "code", + "source_file": "tsconfig.app.json", + "source_location": "L14", + "_origin": "ast", + "community": 3, + "norm_label": "verbatimmodulesyntax", + "id": "tsconfig_app_compileroptions_verbatimmodulesyntax", + "community_name": "compilerOptions" + }, + { + "label": "moduleDetection", + "file_type": "code", + "source_file": "tsconfig.app.json", + "source_location": "L15", + "_origin": "ast", + "community": 3, + "norm_label": "moduledetection", + "id": "tsconfig_app_compileroptions_moduledetection", + "community_name": "compilerOptions" + }, + { + "label": "noEmit", + "file_type": "code", + "source_file": "tsconfig.app.json", + "source_location": "L16", + "_origin": "ast", + "community": 3, + "norm_label": "noemit", + "id": "tsconfig_app_compileroptions_noemit", + "community_name": "compilerOptions" + }, + { + "label": "jsx", + "file_type": "code", + "source_file": "tsconfig.app.json", + "source_location": "L17", + "_origin": "ast", + "community": 3, + "norm_label": "jsx", + "id": "tsconfig_app_compileroptions_jsx", + "community_name": "compilerOptions" + }, + { + "label": "noUnusedLocals", + "file_type": "code", + "source_file": "tsconfig.app.json", + "source_location": "L20", + "_origin": "ast", + "community": 3, + "norm_label": "nounusedlocals", + "id": "tsconfig_app_compileroptions_nounusedlocals", + "community_name": "compilerOptions" + }, + { + "label": "noUnusedParameters", + "file_type": "code", + "source_file": "tsconfig.app.json", + "source_location": "L21", + "_origin": "ast", + "community": 3, + "norm_label": "nounusedparameters", + "id": "tsconfig_app_compileroptions_nounusedparameters", + "community_name": "compilerOptions" + }, + { + "label": "erasableSyntaxOnly", + "file_type": "code", + "source_file": "tsconfig.app.json", + "source_location": "L22", + "_origin": "ast", + "community": 3, + "norm_label": "erasablesyntaxonly", + "id": "tsconfig_app_compileroptions_erasablesyntaxonly", + "community_name": "compilerOptions" + }, + { + "label": "noFallthroughCasesInSwitch", + "file_type": "code", + "source_file": "tsconfig.app.json", + "source_location": "L23", + "_origin": "ast", + "community": 3, + "norm_label": "nofallthroughcasesinswitch", + "id": "tsconfig_app_compileroptions_nofallthroughcasesinswitch", + "community_name": "compilerOptions" + }, + { + "label": "include", + "file_type": "code", + "source_file": "tsconfig.app.json", + "source_location": "L25", + "_origin": "ast", + "community": 3, + "norm_label": "include", + "id": "tsconfig_app_include", + "community_name": "compilerOptions" + }, + { + "label": "src", + "file_type": "concept", + "source_file": "tsconfig.app.json", + "source_location": "L25", + "_origin": "ast", + "community": 3, + "norm_label": "src", + "id": "ref_src", + "community_name": "compilerOptions" + }, + { + "label": "tsconfig.json", + "file_type": "code", + "source_file": "tsconfig.json", + "source_location": "L1", + "_origin": "ast", + "community": 9, + "norm_label": "tsconfig.json", + "id": "tsconfig", + "community_name": "tsconfig.json" + }, + { + "label": "files", + "file_type": "code", + "source_file": "tsconfig.json", + "source_location": "L2", + "_origin": "ast", + "community": 9, + "norm_label": "files", + "id": "tsconfig_files", + "community_name": "tsconfig.json" + }, + { + "label": "references", + "file_type": "code", + "source_file": "tsconfig.json", + "source_location": "L3", + "_origin": "ast", + "community": 9, + "norm_label": "references", + "id": "tsconfig_references", + "community_name": "tsconfig.json" + }, + { + "label": "tsconfig.node.json", + "file_type": "code", + "source_file": "tsconfig.node.json", + "source_location": "L1", + "_origin": "ast", + "community": 5, + "norm_label": "tsconfig.node.json", + "id": "tsconfig_node", + "community_name": "compilerOptions" + }, + { + "label": "compilerOptions", + "file_type": "code", + "source_file": "tsconfig.node.json", + "source_location": "L2", + "_origin": "ast", + "community": 5, + "norm_label": "compileroptions", + "id": "tsconfig_node_compileroptions", + "community_name": "compilerOptions" + }, + { + "label": "tsBuildInfoFile", + "file_type": "code", + "source_file": "tsconfig.node.json", + "source_location": "L3", + "_origin": "ast", + "community": 5, + "norm_label": "tsbuildinfofile", + "id": "tsconfig_node_compileroptions_tsbuildinfofile", + "community_name": "compilerOptions" + }, + { + "label": "target", + "file_type": "code", + "source_file": "tsconfig.node.json", + "source_location": "L4", + "_origin": "ast", + "community": 5, + "norm_label": "target", + "id": "tsconfig_node_compileroptions_target", + "community_name": "compilerOptions" + }, + { + "label": "lib", + "file_type": "code", + "source_file": "tsconfig.node.json", + "source_location": "L5", + "_origin": "ast", + "community": 5, + "norm_label": "lib", + "id": "tsconfig_node_compileroptions_lib", + "community_name": "compilerOptions" + }, + { + "label": "ES2023", + "file_type": "concept", + "source_file": "tsconfig.node.json", + "source_location": "L5", + "_origin": "ast", + "community": 5, + "norm_label": "es2023", + "id": "tsconfig_node_json_ref_es2023", + "community_name": "compilerOptions" + }, + { + "label": "types", + "file_type": "code", + "source_file": "tsconfig.node.json", + "source_location": "L6", + "_origin": "ast", + "community": 5, + "norm_label": "types", + "id": "tsconfig_node_compileroptions_types", + "community_name": "compilerOptions" + }, + { + "label": "node", + "file_type": "concept", + "source_file": "tsconfig.node.json", + "source_location": "L6", + "_origin": "ast", + "community": 5, + "norm_label": "node", + "id": "ref_node", + "community_name": "compilerOptions" + }, + { + "label": "skipLibCheck", + "file_type": "code", + "source_file": "tsconfig.node.json", + "source_location": "L7", + "_origin": "ast", + "community": 5, + "norm_label": "skiplibcheck", + "id": "tsconfig_node_compileroptions_skiplibcheck", + "community_name": "compilerOptions" + }, + { + "label": "module", + "file_type": "code", + "source_file": "tsconfig.node.json", + "source_location": "L10", + "_origin": "ast", + "community": 5, + "norm_label": "module", + "id": "tsconfig_node_compileroptions_module", + "community_name": "compilerOptions" + }, + { + "label": "allowImportingTsExtensions", + "file_type": "code", + "source_file": "tsconfig.node.json", + "source_location": "L11", + "_origin": "ast", + "community": 5, + "norm_label": "allowimportingtsextensions", + "id": "tsconfig_node_compileroptions_allowimportingtsextensions", + "community_name": "compilerOptions" + }, + { + "label": "verbatimModuleSyntax", + "file_type": "code", + "source_file": "tsconfig.node.json", + "source_location": "L12", + "_origin": "ast", + "community": 5, + "norm_label": "verbatimmodulesyntax", + "id": "tsconfig_node_compileroptions_verbatimmodulesyntax", + "community_name": "compilerOptions" + }, + { + "label": "moduleDetection", + "file_type": "code", + "source_file": "tsconfig.node.json", + "source_location": "L13", + "_origin": "ast", + "community": 5, + "norm_label": "moduledetection", + "id": "tsconfig_node_compileroptions_moduledetection", + "community_name": "compilerOptions" + }, + { + "label": "noEmit", + "file_type": "code", + "source_file": "tsconfig.node.json", + "source_location": "L14", + "_origin": "ast", + "community": 5, + "norm_label": "noemit", + "id": "tsconfig_node_compileroptions_noemit", + "community_name": "compilerOptions" + }, + { + "label": "noUnusedLocals", + "file_type": "code", + "source_file": "tsconfig.node.json", + "source_location": "L17", + "_origin": "ast", + "community": 5, + "norm_label": "nounusedlocals", + "id": "tsconfig_node_compileroptions_nounusedlocals", + "community_name": "compilerOptions" + }, + { + "label": "noUnusedParameters", + "file_type": "code", + "source_file": "tsconfig.node.json", + "source_location": "L18", + "_origin": "ast", + "community": 5, + "norm_label": "nounusedparameters", + "id": "tsconfig_node_compileroptions_nounusedparameters", + "community_name": "compilerOptions" + }, + { + "label": "erasableSyntaxOnly", + "file_type": "code", + "source_file": "tsconfig.node.json", + "source_location": "L19", + "_origin": "ast", + "community": 5, + "norm_label": "erasablesyntaxonly", + "id": "tsconfig_node_compileroptions_erasablesyntaxonly", + "community_name": "compilerOptions" + }, + { + "label": "noFallthroughCasesInSwitch", + "file_type": "code", + "source_file": "tsconfig.node.json", + "source_location": "L20", + "_origin": "ast", + "community": 5, + "norm_label": "nofallthroughcasesinswitch", + "id": "tsconfig_node_compileroptions_nofallthroughcasesinswitch", + "community_name": "compilerOptions" + }, + { + "label": "include", + "file_type": "code", + "source_file": "tsconfig.node.json", + "source_location": "L22", + "_origin": "ast", + "community": 5, + "norm_label": "include", + "id": "tsconfig_node_include", + "community_name": "compilerOptions" + }, + { + "label": "vite.config.ts", + "file_type": "concept", + "source_file": "tsconfig.node.json", + "source_location": "L22", + "_origin": "ast", + "community": 5, + "norm_label": "vite.config.ts", + "id": "ref_vite_config_ts", + "community_name": "compilerOptions" + }, + { + "label": "vite.config.ts", + "file_type": "code", + "source_file": "vite.config.ts", + "source_location": "L1", + "_origin": "ast", + "community": 10, + "norm_label": "vite.config.ts", + "id": "vite_config", + "community_name": "vite.config.ts" + } + ], + "links": [ + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": ".oxlintrc.json", + "source_location": "L3", + "weight": 1.0, + "_origin": "ast", + "confidence_score": 1.0, + "source": "oxlintrc", + "target": "oxlintrc_plugins" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": ".oxlintrc.json", + "source_location": "L4", + "weight": 1.0, + "_origin": "ast", + "confidence_score": 1.0, + "source": "oxlintrc", + "target": "oxlintrc_rules" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": ".oxlintrc.json", + "source_location": "L2", + "weight": 1.0, + "_origin": "ast", + "confidence_score": 1.0, + "source": "oxlintrc", + "target": "oxlintrc_schema" + }, + { + "relation": "extends", + "confidence": "EXTRACTED", + "source_file": ".oxlintrc.json", + "source_location": "L3", + "weight": 1.0, + "context": "import", + "_origin": "ast", + "confidence_score": 1.0, + "source": "oxlintrc_plugins", + "target": "ref_oxc" + }, + { + "relation": "extends", + "confidence": "EXTRACTED", + "source_file": ".oxlintrc.json", + "source_location": "L3", + "weight": 1.0, + "context": "import", + "_origin": "ast", + "confidence_score": 1.0, + "source": "oxlintrc_plugins", + "target": "ref_react" + }, + { + "relation": "extends", + "confidence": "EXTRACTED", + "source_file": ".oxlintrc.json", + "source_location": "L3", + "weight": 1.0, + "context": "import", + "_origin": "ast", + "confidence_score": 1.0, + "source": "oxlintrc_plugins", + "target": "typescript" + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/App.tsx", + "source_location": "L1", + "weight": 1.0, + "_origin": "ast", + "confidence_score": 1.0, + "source": "src_app", + "target": "ref_react" + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/components/admin/AdminDesktopShell.tsx", + "source_location": "L1", + "weight": 1.0, + "_origin": "ast", + "confidence_score": 1.0, + "source": "src_components_admin_admindesktopshell", + "target": "ref_react" + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/components/admin/BillingManagerView.tsx", + "source_location": "L1", + "weight": 1.0, + "_origin": "ast", + "confidence_score": 1.0, + "source": "src_components_admin_billingmanagerview", + "target": "ref_react" + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/components/admin/FeedbackInboxView.tsx", + "source_location": "L1", + "weight": 1.0, + "_origin": "ast", + "confidence_score": 1.0, + "source": "src_components_admin_feedbackinboxview", + "target": "ref_react" + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/components/admin/InventoryView.tsx", + "source_location": "L1", + "weight": 1.0, + "_origin": "ast", + "confidence_score": 1.0, + "source": "src_components_admin_inventoryview", + "target": "ref_react" + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/components/admin/ReservationsView.tsx", + "source_location": "L1", + "weight": 1.0, + "_origin": "ast", + "confidence_score": 1.0, + "source": "src_components_admin_reservationsview", + "target": "ref_react" + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/components/admin/StaffLoginModal.tsx", + "source_location": "L1", + "weight": 1.0, + "_origin": "ast", + "confidence_score": 1.0, + "source": "src_components_admin_staffloginmodal", + "target": "ref_react" + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/components/admin/StaffShiftsView.tsx", + "source_location": "L1", + "weight": 1.0, + "_origin": "ast", + "confidence_score": 1.0, + "source": "src_components_admin_staffshiftsview", + "target": "ref_react" + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/components/admin/SuppliersView.tsx", + "source_location": "L1", + "weight": 1.0, + "_origin": "ast", + "confidence_score": 1.0, + "source": "src_components_admin_suppliersview", + "target": "ref_react" + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/components/admin/TableManagementView.tsx", + "source_location": "L1", + "weight": 1.0, + "_origin": "ast", + "confidence_score": 1.0, + "source": "src_components_admin_tablemanagementview", + "target": "ref_react" + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/components/analytics/AnalyticsDashboard.tsx", + "source_location": "L1", + "weight": 1.0, + "_origin": "ast", + "confidence_score": 1.0, + "source": "src_components_analytics_analyticsdashboard", + "target": "ref_react" + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/components/common/Navigation.tsx", + "source_location": "L1", + "weight": 1.0, + "_origin": "ast", + "confidence_score": 1.0, + "source": "src_components_common_navigation", + "target": "ref_react" + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/components/common/StatusBadge.tsx", + "source_location": "L1", + "weight": 1.0, + "_origin": "ast", + "confidence_score": 1.0, + "source": "src_components_common_statusbadge", + "target": "ref_react" + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/components/customer/BillPaymentView.tsx", + "source_location": "L1", + "weight": 1.0, + "_origin": "ast", + "confidence_score": 1.0, + "source": "src_components_customer_billpaymentview", + "target": "ref_react" + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/components/customer/CartReviewView.tsx", + "source_location": "L1", + "weight": 1.0, + "_origin": "ast", + "confidence_score": 1.0, + "source": "src_components_customer_cartreviewview", + "target": "ref_react" + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/components/customer/CustomizationModal.tsx", + "source_location": "L1", + "weight": 1.0, + "_origin": "ast", + "confidence_score": 1.0, + "source": "src_components_customer_customizationmodal", + "target": "ref_react" + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/components/customer/MenuBrowseView.tsx", + "source_location": "L1", + "weight": 1.0, + "_origin": "ast", + "confidence_score": 1.0, + "source": "src_components_customer_menubrowseview", + "target": "ref_react" + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/components/customer/OrderStatusView.tsx", + "source_location": "L1", + "weight": 1.0, + "_origin": "ast", + "confidence_score": 1.0, + "source": "src_components_customer_orderstatusview", + "target": "ref_react" + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/components/customer/TableLandingView.tsx", + "source_location": "L1", + "weight": 1.0, + "_origin": "ast", + "confidence_score": 1.0, + "source": "src_components_customer_tablelandingview", + "target": "ref_react" + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/components/customer/VoiceAssistantModal.tsx", + "source_location": "L1", + "weight": 1.0, + "_origin": "ast", + "confidence_score": 1.0, + "source": "src_components_customer_voiceassistantmodal", + "target": "ref_react" + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/components/kds/KDSKanban.tsx", + "source_location": "L1", + "weight": 1.0, + "_origin": "ast", + "confidence_score": 1.0, + "source": "src_components_kds_kdskanban", + "target": "ref_react" + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/components/kds/KDSTicketCard.tsx", + "source_location": "L1", + "weight": 1.0, + "_origin": "ast", + "confidence_score": 1.0, + "source": "src_components_kds_kdsticketcard", + "target": "ref_react" + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/components/table/TableLandingView.tsx", + "source_location": "L1", + "weight": 1.0, + "_origin": "ast", + "confidence_score": 1.0, + "source": "src_components_table_tablelandingview", + "target": "ref_react" + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/components/voice/VoiceOrderingView.tsx", + "source_location": "L1", + "weight": 1.0, + "_origin": "ast", + "confidence_score": 1.0, + "source": "src_components_voice_voiceorderingview", + "target": "ref_react" + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/hooks/useSpeechRecognition.ts", + "source_location": "L1", + "weight": 1.0, + "_origin": "ast", + "confidence_score": 1.0, + "source": "src_hooks_usespeechrecognition", + "target": "ref_react" + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/hooks/useSpeechSynthesis.ts", + "source_location": "L1", + "weight": 1.0, + "_origin": "ast", + "confidence_score": 1.0, + "source": "src_hooks_usespeechsynthesis", + "target": "ref_react" + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/main.tsx", + "source_location": "L1", + "weight": 1.0, + "_origin": "ast", + "confidence_score": 1.0, + "source": "src_main", + "target": "ref_react" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": ".oxlintrc.json", + "source_location": "L6", + "weight": 1.0, + "_origin": "ast", + "confidence_score": 1.0, + "source": "oxlintrc_rules", + "target": "oxlintrc_rules_react_only_export_components" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": ".oxlintrc.json", + "source_location": "L5", + "weight": 1.0, + "_origin": "ast", + "confidence_score": 1.0, + "source": "oxlintrc_rules", + "target": "oxlintrc_rules_react_rules_of_hooks" + }, + { + "relation": "extends", + "confidence": "EXTRACTED", + "source_file": ".oxlintrc.json", + "source_location": "L6", + "weight": 1.0, + "context": "import", + "_origin": "ast", + "confidence_score": 1.0, + "source": "oxlintrc_rules_react_only_export_components", + "target": "ref_warn" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "package.json", + "source_location": "L13", + "weight": 1.0, + "_origin": "ast", + "confidence_score": 1.0, + "source": "package", + "target": "package_dependencies" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "package.json", + "source_location": "L21", + "weight": 1.0, + "_origin": "ast", + "confidence_score": 1.0, + "source": "package", + "target": "package_devdependencies" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "package.json", + "source_location": "L2", + "weight": 1.0, + "_origin": "ast", + "confidence_score": 1.0, + "source": "package", + "target": "package_name" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "package.json", + "source_location": "L6", + "weight": 1.0, + "_origin": "ast", + "confidence_score": 1.0, + "source": "package", + "target": "package_packagemanager" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "package.json", + "source_location": "L3", + "weight": 1.0, + "_origin": "ast", + "confidence_score": 1.0, + "source": "package", + "target": "package_private" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "package.json", + "source_location": "L7", + "weight": 1.0, + "_origin": "ast", + "confidence_score": 1.0, + "source": "package", + "target": "package_scripts" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "package.json", + "source_location": "L5", + "weight": 1.0, + "_origin": "ast", + "confidence_score": 1.0, + "source": "package", + "target": "package_type" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "package.json", + "source_location": "L4", + "weight": 1.0, + "_origin": "ast", + "confidence_score": 1.0, + "source": "package", + "target": "package_version" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "package.json", + "source_location": "L9", + "weight": 1.0, + "_origin": "ast", + "confidence_score": 1.0, + "source": "package_scripts", + "target": "package_scripts_build" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "package.json", + "source_location": "L8", + "weight": 1.0, + "_origin": "ast", + "confidence_score": 1.0, + "source": "package_scripts", + "target": "package_scripts_dev" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "package.json", + "source_location": "L10", + "weight": 1.0, + "_origin": "ast", + "confidence_score": 1.0, + "source": "package_scripts", + "target": "package_scripts_lint" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "package.json", + "source_location": "L11", + "weight": 1.0, + "_origin": "ast", + "confidence_score": 1.0, + "source": "package_scripts", + "target": "package_scripts_preview" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "package.json", + "source_location": "L14", + "weight": 1.0, + "_origin": "ast", + "confidence_score": 1.0, + "source": "package_dependencies", + "target": "package_dependencies_emotion_react" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "package.json", + "source_location": "L15", + "weight": 1.0, + "_origin": "ast", + "confidence_score": 1.0, + "source": "package_dependencies", + "target": "package_dependencies_emotion_styled" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "package.json", + "source_location": "L16", + "weight": 1.0, + "_origin": "ast", + "confidence_score": 1.0, + "source": "package_dependencies", + "target": "package_dependencies_mui_icons_material" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "package.json", + "source_location": "L17", + "weight": 1.0, + "_origin": "ast", + "confidence_score": 1.0, + "source": "package_dependencies", + "target": "package_dependencies_mui_material" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "package.json", + "source_location": "L18", + "weight": 1.0, + "_origin": "ast", + "confidence_score": 1.0, + "source": "package_dependencies", + "target": "package_dependencies_react" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "package.json", + "source_location": "L19", + "weight": 1.0, + "_origin": "ast", + "confidence_score": 1.0, + "source": "package_dependencies", + "target": "package_dependencies_react_dom" + }, + { + "relation": "imports", + "confidence": "EXTRACTED", + "source_file": "package.json", + "source_location": "L14", + "weight": 1.0, + "context": "import", + "_origin": "ast", + "confidence_score": 1.0, + "source": "package_dependencies_emotion_react", + "target": "emotion_react" + }, + { + "relation": "imports", + "confidence": "EXTRACTED", + "source_file": "package.json", + "source_location": "L15", + "weight": 1.0, + "context": "import", + "_origin": "ast", + "confidence_score": 1.0, + "source": "package_dependencies_emotion_styled", + "target": "emotion_styled" + }, + { + "relation": "imports", + "confidence": "EXTRACTED", + "source_file": "package.json", + "source_location": "L16", + "weight": 1.0, + "context": "import", + "_origin": "ast", + "confidence_score": 1.0, + "source": "package_dependencies_mui_icons_material", + "target": "mui_icons_material" + }, + { + "relation": "imports", + "confidence": "EXTRACTED", + "source_file": "package.json", + "source_location": "L17", + "weight": 1.0, + "context": "import", + "_origin": "ast", + "confidence_score": 1.0, + "source": "package_dependencies_mui_material", + "target": "mui_material" + }, + { + "relation": "imports", + "confidence": "EXTRACTED", + "source_file": "package.json", + "source_location": "L18", + "weight": 1.0, + "context": "import", + "_origin": "ast", + "confidence_score": 1.0, + "source": "package_dependencies_react", + "target": "react" + }, + { + "relation": "imports", + "confidence": "EXTRACTED", + "source_file": "package.json", + "source_location": "L19", + "weight": 1.0, + "context": "import", + "_origin": "ast", + "confidence_score": 1.0, + "source": "package_dependencies_react_dom", + "target": "react_dom" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "package.json", + "source_location": "L26", + "weight": 1.0, + "_origin": "ast", + "confidence_score": 1.0, + "source": "package_devdependencies", + "target": "package_devdependencies_oxlint" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "package.json", + "source_location": "L22", + "weight": 1.0, + "_origin": "ast", + "confidence_score": 1.0, + "source": "package_devdependencies", + "target": "package_devdependencies_types_node" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "package.json", + "source_location": "L23", + "weight": 1.0, + "_origin": "ast", + "confidence_score": 1.0, + "source": "package_devdependencies", + "target": "package_devdependencies_types_react" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "package.json", + "source_location": "L24", + "weight": 1.0, + "_origin": "ast", + "confidence_score": 1.0, + "source": "package_devdependencies", + "target": "package_devdependencies_types_react_dom" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "package.json", + "source_location": "L27", + "weight": 1.0, + "_origin": "ast", + "confidence_score": 1.0, + "source": "package_devdependencies", + "target": "package_devdependencies_typescript" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "package.json", + "source_location": "L28", + "weight": 1.0, + "_origin": "ast", + "confidence_score": 1.0, + "source": "package_devdependencies", + "target": "package_devdependencies_vite" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "package.json", + "source_location": "L25", + "weight": 1.0, + "_origin": "ast", + "confidence_score": 1.0, + "source": "package_devdependencies", + "target": "package_devdependencies_vitejs_plugin_react" + }, + { + "relation": "imports", + "confidence": "EXTRACTED", + "source_file": "package.json", + "source_location": "L22", + "weight": 1.0, + "context": "import", + "_origin": "ast", + "confidence_score": 1.0, + "source": "package_devdependencies_types_node", + "target": "types_node" + }, + { + "relation": "imports", + "confidence": "EXTRACTED", + "source_file": "package.json", + "source_location": "L23", + "weight": 1.0, + "context": "import", + "_origin": "ast", + "confidence_score": 1.0, + "source": "package_devdependencies_types_react", + "target": "types_react" + }, + { + "relation": "imports", + "confidence": "EXTRACTED", + "source_file": "package.json", + "source_location": "L24", + "weight": 1.0, + "context": "import", + "_origin": "ast", + "confidence_score": 1.0, + "source": "package_devdependencies_types_react_dom", + "target": "types_react_dom" + }, + { + "relation": "imports", + "confidence": "EXTRACTED", + "source_file": "package.json", + "source_location": "L25", + "weight": 1.0, + "context": "import", + "_origin": "ast", + "confidence_score": 1.0, + "source": "package_devdependencies_vitejs_plugin_react", + "target": "vitejs_plugin_react" + }, + { + "relation": "imports", + "confidence": "EXTRACTED", + "source_file": "package.json", + "source_location": "L26", + "weight": 1.0, + "context": "import", + "_origin": "ast", + "confidence_score": 1.0, + "source": "package_devdependencies_oxlint", + "target": "oxlint" + }, + { + "relation": "imports", + "confidence": "EXTRACTED", + "source_file": "package.json", + "source_location": "L27", + "weight": 1.0, + "context": "import", + "_origin": "ast", + "confidence_score": 1.0, + "source": "package_devdependencies_typescript", + "target": "typescript" + }, + { + "relation": "imports", + "confidence": "EXTRACTED", + "source_file": "package.json", + "source_location": "L28", + "weight": 1.0, + "context": "import", + "_origin": "ast", + "confidence_score": 1.0, + "source": "package_devdependencies_vite", + "target": "vite" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/App.tsx", + "source_location": "L36", + "weight": 1.0, + "_origin": "ast", + "confidence_score": 1.0, + "source": "src_app", + "target": "src_app_app" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/App.tsx", + "source_location": "L17", + "weight": 1.0, + "_origin": "ast", + "confidence_score": 1.0, + "source": "src_app", + "target": "src_app_customerview" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/App.tsx", + "source_location": "L19", + "weight": 1.0, + "_origin": "ast", + "confidence_score": 1.0, + "source": "src_app", + "target": "src_app_gettablenumfromurl" + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/App.tsx", + "source_location": "L12", + "weight": 1.0, + "_origin": "ast", + "confidence_score": 1.0, + "source": "src_app", + "target": "src_components_admin_admindesktopshell" + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/App.tsx", + "source_location": "L12", + "weight": 1.0, + "_origin": "ast", + "confidence_score": 1.0, + "source": "src_app", + "target": "src_components_admin_admindesktopshell_admindesktopshell" + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/App.tsx", + "source_location": "L11", + "weight": 1.0, + "_origin": "ast", + "confidence_score": 1.0, + "source": "src_app", + "target": "src_components_admin_staffloginmodal" + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/App.tsx", + "source_location": "L11", + "weight": 1.0, + "_origin": "ast", + "confidence_score": 1.0, + "source": "src_app", + "target": "src_components_admin_staffloginmodal_staffloginmodal" + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/App.tsx", + "source_location": "L9", + "weight": 1.0, + "_origin": "ast", + "confidence_score": 1.0, + "source": "src_app", + "target": "src_components_customer_billpaymentview" + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/App.tsx", + "source_location": "L9", + "weight": 1.0, + "_origin": "ast", + "confidence_score": 1.0, + "source": "src_app", + "target": "src_components_customer_billpaymentview_billpaymentview" + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/App.tsx", + "source_location": "L7", + "weight": 1.0, + "_origin": "ast", + "confidence_score": 1.0, + "source": "src_app", + "target": "src_components_customer_cartreviewview" + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/App.tsx", + "source_location": "L7", + "weight": 1.0, + "_origin": "ast", + "confidence_score": 1.0, + "source": "src_app", + "target": "src_components_customer_cartreviewview_cartreviewview" + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/App.tsx", + "source_location": "L6", + "weight": 1.0, + "_origin": "ast", + "confidence_score": 1.0, + "source": "src_app", + "target": "src_components_customer_customizationmodal" + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/App.tsx", + "source_location": "L6", + "weight": 1.0, + "_origin": "ast", + "confidence_score": 1.0, + "source": "src_app", + "target": "src_components_customer_customizationmodal_customizationmodal" + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/App.tsx", + "source_location": "L5", + "weight": 1.0, + "_origin": "ast", + "confidence_score": 1.0, + "source": "src_app", + "target": "src_components_customer_menubrowseview" + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/App.tsx", + "source_location": "L5", + "weight": 1.0, + "_origin": "ast", + "confidence_score": 1.0, + "source": "src_app", + "target": "src_components_customer_menubrowseview_menubrowseview" + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/App.tsx", + "source_location": "L8", + "weight": 1.0, + "_origin": "ast", + "confidence_score": 1.0, + "source": "src_app", + "target": "src_components_customer_orderstatusview" + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/App.tsx", + "source_location": "L8", + "weight": 1.0, + "_origin": "ast", + "confidence_score": 1.0, + "source": "src_app", + "target": "src_components_customer_orderstatusview_orderstatusview" + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/App.tsx", + "source_location": "L4", + "weight": 1.0, + "_origin": "ast", + "confidence_score": 1.0, + "source": "src_app", + "target": "src_components_customer_tablelandingview" + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/App.tsx", + "source_location": "L4", + "weight": 1.0, + "_origin": "ast", + "confidence_score": 1.0, + "source": "src_app", + "target": "src_components_customer_tablelandingview_tablelandingview" + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/App.tsx", + "source_location": "L10", + "weight": 1.0, + "_origin": "ast", + "confidence_score": 1.0, + "source": "src_app", + "target": "src_components_customer_voiceassistantmodal" + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/App.tsx", + "source_location": "L10", + "weight": 1.0, + "_origin": "ast", + "confidence_score": 1.0, + "source": "src_app", + "target": "src_components_customer_voiceassistantmodal_voiceassistantmodal" + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/App.tsx", + "source_location": "L13", + "weight": 1.0, + "_origin": "ast", + "confidence_score": 1.0, + "source": "src_app", + "target": "src_data_menudata" + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/App.tsx", + "source_location": "L13", + "weight": 1.0, + "_origin": "ast", + "confidence_score": 1.0, + "source": "src_app", + "target": "src_data_menudata_menuitem" + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/App.tsx", + "source_location": "L15", + "weight": 1.0, + "_origin": "ast", + "confidence_score": 1.0, + "source": "src_app", + "target": "src_services_api" + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/App.tsx", + "source_location": "L15", + "weight": 1.0, + "_origin": "ast", + "confidence_score": 1.0, + "source": "src_app", + "target": "src_services_api_api" + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/App.tsx", + "source_location": "L15", + "weight": 1.0, + "_origin": "ast", + "confidence_score": 1.0, + "source": "src_app", + "target": "src_services_api_getbackendmenuid" + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/App.tsx", + "source_location": "L15", + "weight": 1.0, + "_origin": "ast", + "confidence_score": 1.0, + "source": "src_app", + "target": "src_services_api_isdemomode" + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/App.tsx", + "source_location": "L15", + "weight": 1.0, + "_origin": "ast", + "confidence_score": 1.0, + "source": "src_app", + "target": "src_services_api_restrowebsocket" + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/App.tsx", + "source_location": "L15", + "weight": 1.0, + "_origin": "ast", + "confidence_score": 1.0, + "source": "src_app", + "target": "src_services_api_setdemomodechangecallback" + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/App.tsx", + "source_location": "L15", + "weight": 1.0, + "_origin": "ast", + "confidence_score": 1.0, + "source": "src_app", + "target": "src_services_api_subscribetowsevents" + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/App.tsx", + "source_location": "L3", + "weight": 1.0, + "_origin": "ast", + "confidence_score": 1.0, + "source": "src_app", + "target": "src_theme_theme" + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/App.tsx", + "source_location": "L3", + "weight": 1.0, + "_origin": "ast", + "confidence_score": 1.0, + "source": "src_app", + "target": "src_theme_theme_theme" + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/App.tsx", + "source_location": "L14", + "weight": 1.0, + "_origin": "ast", + "confidence_score": 1.0, + "source": "src_app", + "target": "src_types_index" + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/App.tsx", + "source_location": "L14", + "weight": 1.0, + "_origin": "ast", + "confidence_score": 1.0, + "source": "src_app", + "target": "src_types_index_kdsorder" + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/App.tsx", + "source_location": "L14", + "weight": 1.0, + "_origin": "ast", + "confidence_score": 1.0, + "source": "src_app", + "target": "src_types_index_orderstatus" + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/main.tsx", + "source_location": "L4", + "weight": 1.0, + "_origin": "ast", + "confidence_score": 1.0, + "source": "src_main", + "target": "src_app" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/App.tsx", + "source_location": "L137", + "weight": 1.0, + "_origin": "ast", + "confidence_score": 1.0, + "source": "src_app_app", + "target": "src_app_gettablenumfromurl" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "src/App.tsx", + "source_location": "L149", + "weight": 1.0, + "_origin": "ast", + "source": "src_app_app", + "target": "src_services_api_getbackendmenuid" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "src/App.tsx", + "source_location": "L113", + "weight": 1.0, + "_origin": "ast", + "source": "src_app_app", + "target": "src_services_api_restrowebsocket_close" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "src/App.tsx", + "source_location": "L103", + "weight": 1.0, + "_origin": "ast", + "source": "src_app_app", + "target": "src_services_api_restrowebsocket_connect" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "src/App.tsx", + "source_location": "L51", + "weight": 1.0, + "_origin": "ast", + "source": "src_app_app", + "target": "src_services_api_setdemomodechangecallback" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "src/App.tsx", + "source_location": "L106", + "weight": 1.0, + "_origin": "ast", + "source": "src_app_app", + "target": "src_services_api_subscribetowsevents" + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/main.tsx", + "source_location": "L4", + "weight": 1.0, + "_origin": "ast", + "confidence_score": 1.0, + "source": "src_main", + "target": "src_app_app" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/components/admin/AdminDesktopShell.tsx", + "source_location": "L67", + "weight": 1.0, + "_origin": "ast", + "confidence_score": 1.0, + "source": "src_components_admin_admindesktopshell", + "target": "src_components_admin_admindesktopshell_admindesktopshell" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/components/admin/AdminDesktopShell.tsx", + "source_location": "L45", + "weight": 1.0, + "_origin": "ast", + "confidence_score": 1.0, + "source": "src_components_admin_admindesktopshell", + "target": "src_components_admin_admindesktopshell_admindesktopshellprops" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/components/admin/AdminDesktopShell.tsx", + "source_location": "L55", + "weight": 1.0, + "_origin": "ast", + "confidence_score": 1.0, + "source": "src_components_admin_admindesktopshell", + "target": "src_components_admin_admindesktopshell_tabtype" + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/components/admin/AdminDesktopShell.tsx", + "source_location": "L36", + "weight": 1.0, + "_origin": "ast", + "confidence_score": 1.0, + "source": "src_components_admin_admindesktopshell", + "target": "src_components_admin_billingmanagerview" + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/components/admin/AdminDesktopShell.tsx", + "source_location": "L36", + "weight": 1.0, + "_origin": "ast", + "confidence_score": 1.0, + "source": "src_components_admin_admindesktopshell", + "target": "src_components_admin_billingmanagerview_billingmanagerview" + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/components/admin/AdminDesktopShell.tsx", + "source_location": "L41", + "weight": 1.0, + "_origin": "ast", + "confidence_score": 1.0, + "source": "src_components_admin_admindesktopshell", + "target": "src_components_admin_feedbackinboxview" + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/components/admin/AdminDesktopShell.tsx", + "source_location": "L41", + "weight": 1.0, + "_origin": "ast", + "confidence_score": 1.0, + "source": "src_components_admin_admindesktopshell", + "target": "src_components_admin_feedbackinboxview_feedbackinboxview" + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/components/admin/AdminDesktopShell.tsx", + "source_location": "L38", + "weight": 1.0, + "_origin": "ast", + "confidence_score": 1.0, + "source": "src_components_admin_admindesktopshell", + "target": "src_components_admin_inventoryview" + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/components/admin/AdminDesktopShell.tsx", + "source_location": "L38", + "weight": 1.0, + "_origin": "ast", + "confidence_score": 1.0, + "source": "src_components_admin_admindesktopshell", + "target": "src_components_admin_inventoryview_inventoryview" + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/components/admin/AdminDesktopShell.tsx", + "source_location": "L37", + "weight": 1.0, + "_origin": "ast", + "confidence_score": 1.0, + "source": "src_components_admin_admindesktopshell", + "target": "src_components_admin_reservationsview" + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/components/admin/AdminDesktopShell.tsx", + "source_location": "L37", + "weight": 1.0, + "_origin": "ast", + "confidence_score": 1.0, + "source": "src_components_admin_admindesktopshell", + "target": "src_components_admin_reservationsview_reservationsview" + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/components/admin/AdminDesktopShell.tsx", + "source_location": "L40", + "weight": 1.0, + "_origin": "ast", + "confidence_score": 1.0, + "source": "src_components_admin_admindesktopshell", + "target": "src_components_admin_staffshiftsview" + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/components/admin/AdminDesktopShell.tsx", + "source_location": "L40", + "weight": 1.0, + "_origin": "ast", + "confidence_score": 1.0, + "source": "src_components_admin_admindesktopshell", + "target": "src_components_admin_staffshiftsview_staffshiftsview" + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/components/admin/AdminDesktopShell.tsx", + "source_location": "L39", + "weight": 1.0, + "_origin": "ast", + "confidence_score": 1.0, + "source": "src_components_admin_admindesktopshell", + "target": "src_components_admin_suppliersview" + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/components/admin/AdminDesktopShell.tsx", + "source_location": "L39", + "weight": 1.0, + "_origin": "ast", + "confidence_score": 1.0, + "source": "src_components_admin_admindesktopshell", + "target": "src_components_admin_suppliersview_suppliersview" + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/components/admin/AdminDesktopShell.tsx", + "source_location": "L35", + "weight": 1.0, + "_origin": "ast", + "confidence_score": 1.0, + "source": "src_components_admin_admindesktopshell", + "target": "src_components_admin_tablemanagementview" + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/components/admin/AdminDesktopShell.tsx", + "source_location": "L35", + "weight": 1.0, + "_origin": "ast", + "confidence_score": 1.0, + "source": "src_components_admin_admindesktopshell", + "target": "src_components_admin_tablemanagementview_tablemanagementview" + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/components/admin/AdminDesktopShell.tsx", + "source_location": "L33", + "weight": 1.0, + "_origin": "ast", + "confidence_score": 1.0, + "source": "src_components_admin_admindesktopshell", + "target": "src_components_analytics_analyticsdashboard" + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/components/admin/AdminDesktopShell.tsx", + "source_location": "L33", + "weight": 1.0, + "_origin": "ast", + "confidence_score": 1.0, + "source": "src_components_admin_admindesktopshell", + "target": "src_components_analytics_analyticsdashboard_analyticsdashboard" + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/components/admin/AdminDesktopShell.tsx", + "source_location": "L32", + "weight": 1.0, + "_origin": "ast", + "confidence_score": 1.0, + "source": "src_components_admin_admindesktopshell", + "target": "src_components_kds_kdskanban" + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/components/admin/AdminDesktopShell.tsx", + "source_location": "L32", + "weight": 1.0, + "_origin": "ast", + "confidence_score": 1.0, + "source": "src_components_admin_admindesktopshell", + "target": "src_components_kds_kdskanban_kdskanban" + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/components/admin/AdminDesktopShell.tsx", + "source_location": "L34", + "weight": 1.0, + "_origin": "ast", + "confidence_score": 1.0, + "source": "src_components_admin_admindesktopshell", + "target": "src_components_voice_voiceorderingview" + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/components/admin/AdminDesktopShell.tsx", + "source_location": "L34", + "weight": 1.0, + "_origin": "ast", + "confidence_score": 1.0, + "source": "src_components_admin_admindesktopshell", + "target": "src_components_voice_voiceorderingview_voiceorderingview" + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/components/admin/AdminDesktopShell.tsx", + "source_location": "L43", + "weight": 1.0, + "_origin": "ast", + "confidence_score": 1.0, + "source": "src_components_admin_admindesktopshell", + "target": "src_types_index" + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/components/admin/AdminDesktopShell.tsx", + "source_location": "L43", + "weight": 1.0, + "_origin": "ast", + "confidence_score": 1.0, + "source": "src_components_admin_admindesktopshell", + "target": "src_types_index_kdsorder" + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/components/admin/AdminDesktopShell.tsx", + "source_location": "L43", + "weight": 1.0, + "_origin": "ast", + "confidence_score": 1.0, + "source": "src_components_admin_admindesktopshell", + "target": "src_types_index_orderstatus" + }, + { + "relation": "references", + "context": "field", + "confidence": "EXTRACTED", + "source_file": "src/components/admin/AdminDesktopShell.tsx", + "source_location": "L47", + "weight": 1.0, + "_origin": "ast", + "confidence_score": 1.0, + "source": "src_components_admin_admindesktopshell_admindesktopshellprops", + "target": "src_types_index_kdsorder" + }, + { + "relation": "references", + "context": "field", + "confidence": "EXTRACTED", + "source_file": "src/components/admin/AdminDesktopShell.tsx", + "source_location": "L48", + "weight": 1.0, + "_origin": "ast", + "confidence_score": 1.0, + "source": "src_components_admin_admindesktopshell_admindesktopshellprops", + "target": "src_types_index_orderstatus" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/components/admin/BillingManagerView.tsx", + "source_location": "L34", + "weight": 1.0, + "_origin": "ast", + "confidence_score": 1.0, + "source": "src_components_admin_billingmanagerview", + "target": "src_components_admin_billingmanagerview_billingmanagerview" + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/components/admin/BillingManagerView.tsx", + "source_location": "L32", + "weight": 1.0, + "_origin": "ast", + "confidence_score": 1.0, + "source": "src_components_admin_billingmanagerview", + "target": "src_services_api" + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/components/admin/BillingManagerView.tsx", + "source_location": "L32", + "weight": 1.0, + "_origin": "ast", + "confidence_score": 1.0, + "source": "src_components_admin_billingmanagerview", + "target": "src_services_api_api" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/components/admin/FeedbackInboxView.tsx", + "source_location": "L24", + "weight": 1.0, + "_origin": "ast", + "confidence_score": 1.0, + "source": "src_components_admin_feedbackinboxview", + "target": "src_components_admin_feedbackinboxview_feedbackinboxview" + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/components/admin/FeedbackInboxView.tsx", + "source_location": "L22", + "weight": 1.0, + "_origin": "ast", + "confidence_score": 1.0, + "source": "src_components_admin_feedbackinboxview", + "target": "src_services_api" + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/components/admin/FeedbackInboxView.tsx", + "source_location": "L22", + "weight": 1.0, + "_origin": "ast", + "confidence_score": 1.0, + "source": "src_components_admin_feedbackinboxview", + "target": "src_services_api_api" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/components/admin/InventoryView.tsx", + "source_location": "L41", + "weight": 1.0, + "_origin": "ast", + "confidence_score": 1.0, + "source": "src_components_admin_inventoryview", + "target": "src_components_admin_inventoryview_inventoryview" + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/components/admin/InventoryView.tsx", + "source_location": "L39", + "weight": 1.0, + "_origin": "ast", + "confidence_score": 1.0, + "source": "src_components_admin_inventoryview", + "target": "src_data_menudata" + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/components/admin/InventoryView.tsx", + "source_location": "L39", + "weight": 1.0, + "_origin": "ast", + "confidence_score": 1.0, + "source": "src_components_admin_inventoryview", + "target": "src_data_menudata_menu_items" + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/components/admin/InventoryView.tsx", + "source_location": "L38", + "weight": 1.0, + "_origin": "ast", + "confidence_score": 1.0, + "source": "src_components_admin_inventoryview", + "target": "src_services_api" + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/components/admin/InventoryView.tsx", + "source_location": "L38", + "weight": 1.0, + "_origin": "ast", + "confidence_score": 1.0, + "source": "src_components_admin_inventoryview", + "target": "src_services_api_api" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/components/admin/ReservationsView.tsx", + "source_location": "L33", + "weight": 1.0, + "_origin": "ast", + "confidence_score": 1.0, + "source": "src_components_admin_reservationsview", + "target": "src_components_admin_reservationsview_reservationsview" + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/components/admin/ReservationsView.tsx", + "source_location": "L31", + "weight": 1.0, + "_origin": "ast", + "confidence_score": 1.0, + "source": "src_components_admin_reservationsview", + "target": "src_services_api" + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/components/admin/ReservationsView.tsx", + "source_location": "L31", + "weight": 1.0, + "_origin": "ast", + "confidence_score": 1.0, + "source": "src_components_admin_reservationsview", + "target": "src_services_api_api" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/components/admin/StaffLoginModal.tsx", + "source_location": "L25", + "weight": 1.0, + "_origin": "ast", + "confidence_score": 1.0, + "source": "src_components_admin_staffloginmodal", + "target": "src_components_admin_staffloginmodal_staffloginmodal" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/components/admin/StaffLoginModal.tsx", + "source_location": "L19", + "weight": 1.0, + "_origin": "ast", + "confidence_score": 1.0, + "source": "src_components_admin_staffloginmodal", + "target": "src_components_admin_staffloginmodal_staffloginmodalprops" + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/components/admin/StaffLoginModal.tsx", + "source_location": "L17", + "weight": 1.0, + "_origin": "ast", + "confidence_score": 1.0, + "source": "src_components_admin_staffloginmodal", + "target": "src_services_api" + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/components/admin/StaffLoginModal.tsx", + "source_location": "L17", + "weight": 1.0, + "_origin": "ast", + "confidence_score": 1.0, + "source": "src_components_admin_staffloginmodal", + "target": "src_services_api_api" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/components/admin/StaffShiftsView.tsx", + "source_location": "L33", + "weight": 1.0, + "_origin": "ast", + "confidence_score": 1.0, + "source": "src_components_admin_staffshiftsview", + "target": "src_components_admin_staffshiftsview_staffshiftsview" + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/components/admin/StaffShiftsView.tsx", + "source_location": "L31", + "weight": 1.0, + "_origin": "ast", + "confidence_score": 1.0, + "source": "src_components_admin_staffshiftsview", + "target": "src_services_api" + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/components/admin/StaffShiftsView.tsx", + "source_location": "L31", + "weight": 1.0, + "_origin": "ast", + "confidence_score": 1.0, + "source": "src_components_admin_staffshiftsview", + "target": "src_services_api_api" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/components/admin/SuppliersView.tsx", + "source_location": "L42", + "weight": 1.0, + "_origin": "ast", + "confidence_score": 1.0, + "source": "src_components_admin_suppliersview", + "target": "src_components_admin_suppliersview_suppliersview" + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/components/admin/SuppliersView.tsx", + "source_location": "L40", + "weight": 1.0, + "_origin": "ast", + "confidence_score": 1.0, + "source": "src_components_admin_suppliersview", + "target": "src_services_api" + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/components/admin/SuppliersView.tsx", + "source_location": "L40", + "weight": 1.0, + "_origin": "ast", + "confidence_score": 1.0, + "source": "src_components_admin_suppliersview", + "target": "src_services_api_api" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/components/admin/TableManagementView.tsx", + "source_location": "L31", + "weight": 1.0, + "_origin": "ast", + "confidence_score": 1.0, + "source": "src_components_admin_tablemanagementview", + "target": "src_components_admin_tablemanagementview_tablemanagementview" + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/components/admin/TableManagementView.tsx", + "source_location": "L29", + "weight": 1.0, + "_origin": "ast", + "confidence_score": 1.0, + "source": "src_components_admin_tablemanagementview", + "target": "src_services_api" + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/components/admin/TableManagementView.tsx", + "source_location": "L29", + "weight": 1.0, + "_origin": "ast", + "confidence_score": 1.0, + "source": "src_components_admin_tablemanagementview", + "target": "src_services_api_api" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/components/analytics/AnalyticsDashboard.tsx", + "source_location": "L31", + "weight": 1.0, + "_origin": "ast", + "confidence_score": 1.0, + "source": "src_components_analytics_analyticsdashboard", + "target": "src_components_analytics_analyticsdashboard_analyticsdashboard" + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/components/analytics/AnalyticsDashboard.tsx", + "source_location": "L28", + "weight": 1.0, + "_origin": "ast", + "confidence_score": 1.0, + "source": "src_components_analytics_analyticsdashboard", + "target": "src_components_common_statusbadge" + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/components/analytics/AnalyticsDashboard.tsx", + "source_location": "L28", + "weight": 1.0, + "_origin": "ast", + "confidence_score": 1.0, + "source": "src_components_analytics_analyticsdashboard", + "target": "src_components_common_statusbadge_statusbadge" + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/components/analytics/AnalyticsDashboard.tsx", + "source_location": "L29", + "weight": 1.0, + "_origin": "ast", + "confidence_score": 1.0, + "source": "src_components_analytics_analyticsdashboard", + "target": "src_services_api" + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/components/analytics/AnalyticsDashboard.tsx", + "source_location": "L29", + "weight": 1.0, + "_origin": "ast", + "confidence_score": 1.0, + "source": "src_components_analytics_analyticsdashboard", + "target": "src_services_api_api" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/components/common/Navigation.tsx", + "source_location": "L35", + "weight": 1.0, + "_origin": "ast", + "confidence_score": 1.0, + "source": "src_components_common_navigation", + "target": "src_components_common_navigation_navigation" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/components/common/Navigation.tsx", + "source_location": "L27", + "weight": 1.0, + "_origin": "ast", + "confidence_score": 1.0, + "source": "src_components_common_navigation", + "target": "src_components_common_navigation_navigationprops" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/components/common/StatusBadge.tsx", + "source_location": "L12", + "weight": 1.0, + "_origin": "ast", + "confidence_score": 1.0, + "source": "src_components_common_statusbadge", + "target": "src_components_common_statusbadge_statusbadge" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/components/common/StatusBadge.tsx", + "source_location": "L5", + "weight": 1.0, + "_origin": "ast", + "confidence_score": 1.0, + "source": "src_components_common_statusbadge", + "target": "src_components_common_statusbadge_statusbadgeprops" + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/components/common/StatusBadge.tsx", + "source_location": "L3", + "weight": 1.0, + "_origin": "ast", + "confidence_score": 1.0, + "source": "src_components_common_statusbadge", + "target": "src_types_index" + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/components/common/StatusBadge.tsx", + "source_location": "L3", + "weight": 1.0, + "_origin": "ast", + "confidence_score": 1.0, + "source": "src_components_common_statusbadge", + "target": "src_types_index_orderstatus" + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/components/common/StatusBadge.tsx", + "source_location": "L3", + "weight": 1.0, + "_origin": "ast", + "confidence_score": 1.0, + "source": "src_components_common_statusbadge", + "target": "src_types_index_ordertype" + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/components/customer/CartReviewView.tsx", + "source_location": "L23", + "weight": 1.0, + "_origin": "ast", + "confidence_score": 1.0, + "source": "src_components_customer_cartreviewview", + "target": "src_components_common_statusbadge" + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/components/customer/CustomizationModal.tsx", + "source_location": "L18", + "weight": 1.0, + "_origin": "ast", + "confidence_score": 1.0, + "source": "src_components_customer_customizationmodal", + "target": "src_components_common_statusbadge" + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/components/customer/MenuBrowseView.tsx", + "source_location": "L29", + "weight": 1.0, + "_origin": "ast", + "confidence_score": 1.0, + "source": "src_components_customer_menubrowseview", + "target": "src_components_common_statusbadge" + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/components/kds/KDSTicketCard.tsx", + "source_location": "L21", + "weight": 1.0, + "_origin": "ast", + "confidence_score": 1.0, + "source": "src_components_kds_kdsticketcard", + "target": "src_components_common_statusbadge" + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/components/table/TableLandingView.tsx", + "source_location": "L24", + "weight": 1.0, + "_origin": "ast", + "confidence_score": 1.0, + "source": "src_components_table_tablelandingview", + "target": "src_components_common_statusbadge" + }, + { + "relation": "references", + "context": "field", + "confidence": "EXTRACTED", + "source_file": "src/components/common/StatusBadge.tsx", + "source_location": "L6", + "weight": 1.0, + "_origin": "ast", + "confidence_score": 1.0, + "source": "src_components_common_statusbadge_statusbadgeprops", + "target": "src_types_index_orderstatus" + }, + { + "relation": "references", + "context": "field", + "confidence": "EXTRACTED", + "source_file": "src/components/common/StatusBadge.tsx", + "source_location": "L7", + "weight": 1.0, + "_origin": "ast", + "confidence_score": 1.0, + "source": "src_components_common_statusbadge_statusbadgeprops", + "target": "src_types_index_ordertype" + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/components/customer/CartReviewView.tsx", + "source_location": "L23", + "weight": 1.0, + "_origin": "ast", + "confidence_score": 1.0, + "source": "src_components_customer_cartreviewview", + "target": "src_components_common_statusbadge_statusbadge" + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/components/customer/CustomizationModal.tsx", + "source_location": "L18", + "weight": 1.0, + "_origin": "ast", + "confidence_score": 1.0, + "source": "src_components_customer_customizationmodal", + "target": "src_components_common_statusbadge_statusbadge" + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/components/customer/MenuBrowseView.tsx", + "source_location": "L29", + "weight": 1.0, + "_origin": "ast", + "confidence_score": 1.0, + "source": "src_components_customer_menubrowseview", + "target": "src_components_common_statusbadge_statusbadge" + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/components/kds/KDSTicketCard.tsx", + "source_location": "L21", + "weight": 1.0, + "_origin": "ast", + "confidence_score": 1.0, + "source": "src_components_kds_kdsticketcard", + "target": "src_components_common_statusbadge_statusbadge" + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/components/table/TableLandingView.tsx", + "source_location": "L24", + "weight": 1.0, + "_origin": "ast", + "confidence_score": 1.0, + "source": "src_components_table_tablelandingview", + "target": "src_components_common_statusbadge_statusbadge" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/components/customer/BillPaymentView.tsx", + "source_location": "L25", + "weight": 1.0, + "_origin": "ast", + "confidence_score": 1.0, + "source": "src_components_customer_billpaymentview", + "target": "src_components_customer_billpaymentview_billpaymentview" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/components/customer/BillPaymentView.tsx", + "source_location": "L21", + "weight": 1.0, + "_origin": "ast", + "confidence_score": 1.0, + "source": "src_components_customer_billpaymentview", + "target": "src_components_customer_billpaymentview_billpaymentviewprops" + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/components/customer/BillPaymentView.tsx", + "source_location": "L19", + "weight": 1.0, + "_origin": "ast", + "confidence_score": 1.0, + "source": "src_components_customer_billpaymentview", + "target": "src_services_api" + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/components/customer/BillPaymentView.tsx", + "source_location": "L19", + "weight": 1.0, + "_origin": "ast", + "confidence_score": 1.0, + "source": "src_components_customer_billpaymentview", + "target": "src_services_api_api" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/components/customer/CartReviewView.tsx", + "source_location": "L32", + "weight": 1.0, + "_origin": "ast", + "confidence_score": 1.0, + "source": "src_components_customer_cartreviewview", + "target": "src_components_customer_cartreviewview_cartreviewview" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/components/customer/CartReviewView.tsx", + "source_location": "L25", + "weight": 1.0, + "_origin": "ast", + "confidence_score": 1.0, + "source": "src_components_customer_cartreviewview", + "target": "src_components_customer_cartreviewview_cartreviewviewprops" + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/components/customer/CartReviewView.tsx", + "source_location": "L22", + "weight": 1.0, + "_origin": "ast", + "confidence_score": 1.0, + "source": "src_components_customer_cartreviewview", + "target": "src_data_menudata" + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/components/customer/CartReviewView.tsx", + "source_location": "L21", + "weight": 1.0, + "_origin": "ast", + "confidence_score": 1.0, + "source": "src_components_customer_cartreviewview", + "target": "src_data_menudata_menu_items" + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/components/customer/CartReviewView.tsx", + "source_location": "L22", + "weight": 1.0, + "_origin": "ast", + "confidence_score": 1.0, + "source": "src_components_customer_cartreviewview", + "target": "src_data_menudata_menuitem" + }, + { + "relation": "references", + "context": "call", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "src/components/customer/CartReviewView.tsx", + "source_location": "L42", + "weight": 1.0, + "_origin": "ast", + "source": "src_components_customer_cartreviewview_cartreviewview", + "target": "src_data_menudata_menu_items" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/components/customer/CustomizationModal.tsx", + "source_location": "L27", + "weight": 1.0, + "_origin": "ast", + "confidence_score": 1.0, + "source": "src_components_customer_customizationmodal", + "target": "src_components_customer_customizationmodal_customizationmodal" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/components/customer/CustomizationModal.tsx", + "source_location": "L20", + "weight": 1.0, + "_origin": "ast", + "confidence_score": 1.0, + "source": "src_components_customer_customizationmodal", + "target": "src_components_customer_customizationmodal_customizationmodalprops" + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/components/customer/CustomizationModal.tsx", + "source_location": "L17", + "weight": 1.0, + "_origin": "ast", + "confidence_score": 1.0, + "source": "src_components_customer_customizationmodal", + "target": "src_data_menudata" + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/components/customer/CustomizationModal.tsx", + "source_location": "L17", + "weight": 1.0, + "_origin": "ast", + "confidence_score": 1.0, + "source": "src_components_customer_customizationmodal", + "target": "src_data_menudata_menuitem" + }, + { + "relation": "references", + "context": "field", + "confidence": "EXTRACTED", + "source_file": "src/components/customer/CustomizationModal.tsx", + "source_location": "L22", + "weight": 1.0, + "_origin": "ast", + "confidence_score": 1.0, + "source": "src_components_customer_customizationmodal_customizationmodalprops", + "target": "src_data_menudata_menuitem" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/components/customer/MenuBrowseView.tsx", + "source_location": "L39", + "weight": 1.0, + "_origin": "ast", + "confidence_score": 1.0, + "source": "src_components_customer_menubrowseview", + "target": "src_components_customer_menubrowseview_dietary_filters" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/components/customer/MenuBrowseView.tsx", + "source_location": "L53", + "weight": 1.0, + "_origin": "ast", + "confidence_score": 1.0, + "source": "src_components_customer_menubrowseview", + "target": "src_components_customer_menubrowseview_menubrowseview" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/components/customer/MenuBrowseView.tsx", + "source_location": "L31", + "weight": 1.0, + "_origin": "ast", + "confidence_score": 1.0, + "source": "src_components_customer_menubrowseview", + "target": "src_components_customer_menubrowseview_menubrowseviewprops" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/components/customer/MenuBrowseView.tsx", + "source_location": "L46", + "weight": 1.0, + "_origin": "ast", + "confidence_score": 1.0, + "source": "src_components_customer_menubrowseview", + "target": "src_components_customer_menubrowseview_spice_icons" + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/components/customer/MenuBrowseView.tsx", + "source_location": "L28", + "weight": 1.0, + "_origin": "ast", + "confidence_score": 1.0, + "source": "src_components_customer_menubrowseview", + "target": "src_data_menudata" + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/components/customer/MenuBrowseView.tsx", + "source_location": "L27", + "weight": 1.0, + "_origin": "ast", + "confidence_score": 1.0, + "source": "src_components_customer_menubrowseview", + "target": "src_data_menudata_categories" + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/components/customer/MenuBrowseView.tsx", + "source_location": "L28", + "weight": 1.0, + "_origin": "ast", + "confidence_score": 1.0, + "source": "src_components_customer_menubrowseview", + "target": "src_data_menudata_categorytype" + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/components/customer/MenuBrowseView.tsx", + "source_location": "L27", + "weight": 1.0, + "_origin": "ast", + "confidence_score": 1.0, + "source": "src_components_customer_menubrowseview", + "target": "src_data_menudata_menu_items" + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/components/customer/MenuBrowseView.tsx", + "source_location": "L28", + "weight": 1.0, + "_origin": "ast", + "confidence_score": 1.0, + "source": "src_components_customer_menubrowseview", + "target": "src_data_menudata_menuitem" + }, + { + "relation": "references", + "context": "field", + "confidence": "EXTRACTED", + "source_file": "src/components/customer/MenuBrowseView.tsx", + "source_location": "L34", + "weight": 1.0, + "_origin": "ast", + "confidence_score": 1.0, + "source": "src_components_customer_menubrowseview_menubrowseviewprops", + "target": "src_data_menudata_menuitem" + }, + { + "relation": "references", + "context": "call", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "src/components/customer/MenuBrowseView.tsx", + "source_location": "L67", + "weight": 1.0, + "_origin": "ast", + "source": "src_components_customer_menubrowseview_menubrowseview", + "target": "src_data_menudata_menu_items" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/components/customer/OrderStatusView.tsx", + "source_location": "L29", + "weight": 1.0, + "_origin": "ast", + "confidence_score": 1.0, + "source": "src_components_customer_orderstatusview", + "target": "src_components_customer_orderstatusview_order_steps" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/components/customer/OrderStatusView.tsx", + "source_location": "L56", + "weight": 1.0, + "_origin": "ast", + "confidence_score": 1.0, + "source": "src_components_customer_orderstatusview", + "target": "src_components_customer_orderstatusview_orderstatusview" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/components/customer/OrderStatusView.tsx", + "source_location": "L25", + "weight": 1.0, + "_origin": "ast", + "confidence_score": 1.0, + "source": "src_components_customer_orderstatusview", + "target": "src_components_customer_orderstatusview_orderstatusviewprops" + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/components/customer/OrderStatusView.tsx", + "source_location": "L23", + "weight": 1.0, + "_origin": "ast", + "confidence_score": 1.0, + "source": "src_components_customer_orderstatusview", + "target": "src_services_api" + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/components/customer/OrderStatusView.tsx", + "source_location": "L23", + "weight": 1.0, + "_origin": "ast", + "confidence_score": 1.0, + "source": "src_components_customer_orderstatusview", + "target": "src_services_api_api" + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/components/customer/OrderStatusView.tsx", + "source_location": "L23", + "weight": 1.0, + "_origin": "ast", + "confidence_score": 1.0, + "source": "src_components_customer_orderstatusview", + "target": "src_services_api_restrowebsocket" + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/components/customer/OrderStatusView.tsx", + "source_location": "L23", + "weight": 1.0, + "_origin": "ast", + "confidence_score": 1.0, + "source": "src_components_customer_orderstatusview", + "target": "src_services_api_subscribetowsevents" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "src/components/customer/OrderStatusView.tsx", + "source_location": "L99", + "weight": 1.0, + "_origin": "ast", + "source": "src_components_customer_orderstatusview_orderstatusview", + "target": "src_services_api_restrowebsocket_close" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "src/components/customer/OrderStatusView.tsx", + "source_location": "L90", + "weight": 1.0, + "_origin": "ast", + "source": "src_components_customer_orderstatusview_orderstatusview", + "target": "src_services_api_restrowebsocket_connect" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "src/components/customer/OrderStatusView.tsx", + "source_location": "L92", + "weight": 1.0, + "_origin": "ast", + "source": "src_components_customer_orderstatusview_orderstatusview", + "target": "src_services_api_subscribetowsevents" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/components/customer/TableLandingView.tsx", + "source_location": "L27", + "weight": 1.0, + "_origin": "ast", + "confidence_score": 1.0, + "source": "src_components_customer_tablelandingview", + "target": "src_components_customer_tablelandingview_tablelandingview" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/components/customer/TableLandingView.tsx", + "source_location": "L21", + "weight": 1.0, + "_origin": "ast", + "confidence_score": 1.0, + "source": "src_components_customer_tablelandingview", + "target": "src_components_customer_tablelandingview_tablelandingviewprops" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/components/customer/VoiceAssistantModal.tsx", + "source_location": "L28", + "weight": 1.0, + "_origin": "ast", + "confidence_score": 1.0, + "source": "src_components_customer_voiceassistantmodal", + "target": "src_components_customer_voiceassistantmodal_detecteditem" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/components/customer/VoiceAssistantModal.tsx", + "source_location": "L40", + "weight": 1.0, + "_origin": "ast", + "confidence_score": 1.0, + "source": "src_components_customer_voiceassistantmodal", + "target": "src_components_customer_voiceassistantmodal_parsetranscripttoitems" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/components/customer/VoiceAssistantModal.tsx", + "source_location": "L69", + "weight": 1.0, + "_origin": "ast", + "confidence_score": 1.0, + "source": "src_components_customer_voiceassistantmodal", + "target": "src_components_customer_voiceassistantmodal_quick_commands" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/components/customer/VoiceAssistantModal.tsx", + "source_location": "L77", + "weight": 1.0, + "_origin": "ast", + "confidence_score": 1.0, + "source": "src_components_customer_voiceassistantmodal", + "target": "src_components_customer_voiceassistantmodal_voiceassistantmodal" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/components/customer/VoiceAssistantModal.tsx", + "source_location": "L33", + "weight": 1.0, + "_origin": "ast", + "confidence_score": 1.0, + "source": "src_components_customer_voiceassistantmodal", + "target": "src_components_customer_voiceassistantmodal_voiceassistantmodalprops" + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/components/customer/VoiceAssistantModal.tsx", + "source_location": "L23", + "weight": 1.0, + "_origin": "ast", + "confidence_score": 1.0, + "source": "src_components_customer_voiceassistantmodal", + "target": "src_data_menudata" + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/components/customer/VoiceAssistantModal.tsx", + "source_location": "L22", + "weight": 1.0, + "_origin": "ast", + "confidence_score": 1.0, + "source": "src_components_customer_voiceassistantmodal", + "target": "src_data_menudata_menu_items" + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/components/customer/VoiceAssistantModal.tsx", + "source_location": "L23", + "weight": 1.0, + "_origin": "ast", + "confidence_score": 1.0, + "source": "src_components_customer_voiceassistantmodal", + "target": "src_data_menudata_menuitem" + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/components/customer/VoiceAssistantModal.tsx", + "source_location": "L26", + "weight": 1.0, + "_origin": "ast", + "confidence_score": 1.0, + "source": "src_components_customer_voiceassistantmodal", + "target": "src_hooks_usespeechrecognition" + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/components/customer/VoiceAssistantModal.tsx", + "source_location": "L24", + "weight": 1.0, + "_origin": "ast", + "confidence_score": 1.0, + "source": "src_components_customer_voiceassistantmodal", + "target": "src_hooks_usespeechrecognition_usespeechrecognition" + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/components/customer/VoiceAssistantModal.tsx", + "source_location": "L26", + "weight": 1.0, + "_origin": "ast", + "confidence_score": 1.0, + "source": "src_components_customer_voiceassistantmodal", + "target": "src_hooks_usespeechrecognition_voicestate" + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/components/customer/VoiceAssistantModal.tsx", + "source_location": "L25", + "weight": 1.0, + "_origin": "ast", + "confidence_score": 1.0, + "source": "src_components_customer_voiceassistantmodal", + "target": "src_hooks_usespeechsynthesis" + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/components/customer/VoiceAssistantModal.tsx", + "source_location": "L25", + "weight": 1.0, + "_origin": "ast", + "confidence_score": 1.0, + "source": "src_components_customer_voiceassistantmodal", + "target": "src_hooks_usespeechsynthesis_usespeechsynthesis" + }, + { + "relation": "references", + "context": "field", + "confidence": "EXTRACTED", + "source_file": "src/components/customer/VoiceAssistantModal.tsx", + "source_location": "L29", + "weight": 1.0, + "_origin": "ast", + "confidence_score": 1.0, + "source": "src_components_customer_voiceassistantmodal_detecteditem", + "target": "src_data_menudata_menuitem" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/components/customer/VoiceAssistantModal.tsx", + "source_location": "L105", + "weight": 1.0, + "_origin": "ast", + "confidence_score": 1.0, + "source": "src_components_customer_voiceassistantmodal_voiceassistantmodal", + "target": "src_components_customer_voiceassistantmodal_parsetranscripttoitems" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "src/components/customer/VoiceAssistantModal.tsx", + "source_location": "L96", + "weight": 1.0, + "_origin": "ast", + "source": "src_components_customer_voiceassistantmodal_voiceassistantmodal", + "target": "src_hooks_usespeechrecognition_usespeechrecognition" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "src/components/customer/VoiceAssistantModal.tsx", + "source_location": "L98", + "weight": 1.0, + "_origin": "ast", + "source": "src_components_customer_voiceassistantmodal_voiceassistantmodal", + "target": "src_hooks_usespeechsynthesis_usespeechsynthesis" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/components/kds/KDSKanban.tsx", + "source_location": "L26", + "weight": 1.0, + "_origin": "ast", + "confidence_score": 1.0, + "source": "src_components_kds_kdskanban", + "target": "src_components_kds_kdskanban_kdskanban" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/components/kds/KDSKanban.tsx", + "source_location": "L19", + "weight": 1.0, + "_origin": "ast", + "confidence_score": 1.0, + "source": "src_components_kds_kdskanban", + "target": "src_components_kds_kdskanban_kdskanbanprops" + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/components/kds/KDSKanban.tsx", + "source_location": "L17", + "weight": 1.0, + "_origin": "ast", + "confidence_score": 1.0, + "source": "src_components_kds_kdskanban", + "target": "src_components_kds_kdsticketcard" + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/components/kds/KDSKanban.tsx", + "source_location": "L17", + "weight": 1.0, + "_origin": "ast", + "confidence_score": 1.0, + "source": "src_components_kds_kdskanban", + "target": "src_components_kds_kdsticketcard_kdsticketcard" + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/components/kds/KDSKanban.tsx", + "source_location": "L16", + "weight": 1.0, + "_origin": "ast", + "confidence_score": 1.0, + "source": "src_components_kds_kdskanban", + "target": "src_types_index" + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/components/kds/KDSKanban.tsx", + "source_location": "L16", + "weight": 1.0, + "_origin": "ast", + "confidence_score": 1.0, + "source": "src_components_kds_kdskanban", + "target": "src_types_index_kdsorder" + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/components/kds/KDSKanban.tsx", + "source_location": "L16", + "weight": 1.0, + "_origin": "ast", + "confidence_score": 1.0, + "source": "src_components_kds_kdskanban", + "target": "src_types_index_orderstatus" + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/components/kds/KDSKanban.tsx", + "source_location": "L16", + "weight": 1.0, + "_origin": "ast", + "confidence_score": 1.0, + "source": "src_components_kds_kdskanban", + "target": "src_types_index_ordertype" + }, + { + "relation": "references", + "context": "field", + "confidence": "EXTRACTED", + "source_file": "src/components/kds/KDSKanban.tsx", + "source_location": "L20", + "weight": 1.0, + "_origin": "ast", + "confidence_score": 1.0, + "source": "src_components_kds_kdskanban_kdskanbanprops", + "target": "src_types_index_kdsorder" + }, + { + "relation": "references", + "context": "field", + "confidence": "EXTRACTED", + "source_file": "src/components/kds/KDSKanban.tsx", + "source_location": "L21", + "weight": 1.0, + "_origin": "ast", + "confidence_score": 1.0, + "source": "src_components_kds_kdskanban_kdskanbanprops", + "target": "src_types_index_orderstatus" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/components/kds/KDSTicketCard.tsx", + "source_location": "L29", + "weight": 1.0, + "_origin": "ast", + "confidence_score": 1.0, + "source": "src_components_kds_kdsticketcard", + "target": "src_components_kds_kdsticketcard_kdsticketcard" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/components/kds/KDSTicketCard.tsx", + "source_location": "L23", + "weight": 1.0, + "_origin": "ast", + "confidence_score": 1.0, + "source": "src_components_kds_kdsticketcard", + "target": "src_components_kds_kdsticketcard_kdsticketcardprops" + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/components/kds/KDSTicketCard.tsx", + "source_location": "L20", + "weight": 1.0, + "_origin": "ast", + "confidence_score": 1.0, + "source": "src_components_kds_kdsticketcard", + "target": "src_types_index" + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/components/kds/KDSTicketCard.tsx", + "source_location": "L20", + "weight": 1.0, + "_origin": "ast", + "confidence_score": 1.0, + "source": "src_components_kds_kdsticketcard", + "target": "src_types_index_kdsorder" + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/components/kds/KDSTicketCard.tsx", + "source_location": "L20", + "weight": 1.0, + "_origin": "ast", + "confidence_score": 1.0, + "source": "src_components_kds_kdsticketcard", + "target": "src_types_index_orderstatus" + }, + { + "relation": "references", + "context": "field", + "confidence": "EXTRACTED", + "source_file": "src/components/kds/KDSTicketCard.tsx", + "source_location": "L24", + "weight": 1.0, + "_origin": "ast", + "confidence_score": 1.0, + "source": "src_components_kds_kdsticketcard_kdsticketcardprops", + "target": "src_types_index_kdsorder" + }, + { + "relation": "references", + "context": "field", + "confidence": "EXTRACTED", + "source_file": "src/components/kds/KDSTicketCard.tsx", + "source_location": "L25", + "weight": 1.0, + "_origin": "ast", + "confidence_score": 1.0, + "source": "src_components_kds_kdsticketcard_kdsticketcardprops", + "target": "src_types_index_orderstatus" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/components/table/TableLandingView.tsx", + "source_location": "L26", + "weight": 1.0, + "_origin": "ast", + "confidence_score": 1.0, + "source": "src_components_table_tablelandingview", + "target": "src_components_table_tablelandingview_tablelandingview" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/components/voice/VoiceOrderingView.tsx", + "source_location": "L25", + "weight": 1.0, + "_origin": "ast", + "confidence_score": 1.0, + "source": "src_components_voice_voiceorderingview", + "target": "src_components_voice_voiceorderingview_voiceorderingview" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/components/voice/VoiceOrderingView.tsx", + "source_location": "L21", + "weight": 1.0, + "_origin": "ast", + "confidence_score": 1.0, + "source": "src_components_voice_voiceorderingview", + "target": "src_components_voice_voiceorderingview_voiceorderingviewprops" + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/components/voice/VoiceOrderingView.tsx", + "source_location": "L19", + "weight": 1.0, + "_origin": "ast", + "confidence_score": 1.0, + "source": "src_components_voice_voiceorderingview", + "target": "src_types_index" + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/components/voice/VoiceOrderingView.tsx", + "source_location": "L19", + "weight": 1.0, + "_origin": "ast", + "confidence_score": 1.0, + "source": "src_components_voice_voiceorderingview", + "target": "src_types_index_voicecommandsuggestion" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/data/menuData.ts", + "source_location": "L375", + "weight": 1.0, + "_origin": "ast", + "confidence_score": 1.0, + "source": "src_data_menudata", + "target": "src_data_menudata_categories" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/data/menuData.ts", + "source_location": "L376", + "weight": 1.0, + "_origin": "ast", + "confidence_score": 1.0, + "source": "src_data_menudata", + "target": "src_data_menudata_categorytype" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/data/menuData.ts", + "source_location": "L17", + "weight": 1.0, + "_origin": "ast", + "confidence_score": 1.0, + "source": "src_data_menudata", + "target": "src_data_menudata_menu_items" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/data/menuData.ts", + "source_location": "L1", + "weight": 1.0, + "_origin": "ast", + "confidence_score": 1.0, + "source": "src_data_menudata", + "target": "src_data_menudata_menuitem" + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/services/api.ts", + "source_location": "L1", + "weight": 1.0, + "_origin": "ast", + "confidence_score": 1.0, + "source": "src_services_api", + "target": "src_data_menudata" + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/services/api.ts", + "source_location": "L1", + "weight": 1.0, + "_origin": "ast", + "confidence_score": 1.0, + "source": "src_services_api", + "target": "src_data_menudata_menuitem" + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/services/api.ts", + "source_location": "L1", + "weight": 1.0, + "_origin": "ast", + "confidence_score": 1.0, + "source": "src_services_api", + "target": "src_data_menudata_menu_items" + }, + { + "relation": "references", + "context": "call", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "src/services/api.ts", + "source_location": "L41", + "weight": 1.0, + "_origin": "ast", + "source": "src_services_api_getfrontendmenuitem", + "target": "src_data_menudata_menu_items" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/hooks/useSpeechRecognition.ts", + "source_location": "L12", + "weight": 1.0, + "_origin": "ast", + "confidence_score": 1.0, + "source": "src_hooks_usespeechrecognition", + "target": "src_hooks_usespeechrecognition_ispeechrecognition" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/hooks/useSpeechRecognition.ts", + "source_location": "L8", + "weight": 1.0, + "_origin": "ast", + "confidence_score": 1.0, + "source": "src_hooks_usespeechrecognition", + "target": "src_hooks_usespeechrecognition_speechrecognitionerrorevent" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/hooks/useSpeechRecognition.ts", + "source_location": "L3", + "weight": 1.0, + "_origin": "ast", + "confidence_score": 1.0, + "source": "src_hooks_usespeechrecognition", + "target": "src_hooks_usespeechrecognition_speechrecognitionevent" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/hooks/useSpeechRecognition.ts", + "source_location": "L46", + "weight": 1.0, + "_origin": "ast", + "confidence_score": 1.0, + "source": "src_hooks_usespeechrecognition", + "target": "src_hooks_usespeechrecognition_usespeechrecognition" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/hooks/useSpeechRecognition.ts", + "source_location": "L35", + "weight": 1.0, + "_origin": "ast", + "confidence_score": 1.0, + "source": "src_hooks_usespeechrecognition", + "target": "src_hooks_usespeechrecognition_usespeechrecognitionreturn" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/hooks/useSpeechRecognition.ts", + "source_location": "L33", + "weight": 1.0, + "_origin": "ast", + "confidence_score": 1.0, + "source": "src_hooks_usespeechrecognition", + "target": "src_hooks_usespeechrecognition_voicestate" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/hooks/useSpeechRecognition.ts", + "source_location": "L27", + "weight": 1.0, + "_origin": "ast", + "confidence_score": 1.0, + "source": "src_hooks_usespeechrecognition", + "target": "src_hooks_usespeechrecognition_window" + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/hooks/useSpeechSynthesis.ts", + "source_location": "L2", + "weight": 1.0, + "_origin": "ast", + "confidence_score": 1.0, + "source": "src_hooks_usespeechsynthesis", + "target": "src_hooks_usespeechrecognition" + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "src/hooks/useSpeechRecognition.ts", + "source_location": "L19", + "weight": 1.0, + "_origin": "ast", + "confidence_score": 1.0, + "source": "src_hooks_usespeechrecognition_ispeechrecognition", + "target": "src_hooks_usespeechrecognition_ispeechrecognition_abort" + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "src/hooks/useSpeechRecognition.ts", + "source_location": "L17", + "weight": 1.0, + "_origin": "ast", + "confidence_score": 1.0, + "source": "src_hooks_usespeechrecognition_ispeechrecognition", + "target": "src_hooks_usespeechrecognition_ispeechrecognition_start" + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "src/hooks/useSpeechRecognition.ts", + "source_location": "L18", + "weight": 1.0, + "_origin": "ast", + "confidence_score": 1.0, + "source": "src_hooks_usespeechrecognition_ispeechrecognition", + "target": "src_hooks_usespeechrecognition_ispeechrecognition_stop" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/hooks/useSpeechRecognition.ts", + "source_location": "L124", + "weight": 1.0, + "_origin": "ast", + "confidence_score": 1.0, + "source": "src_hooks_usespeechrecognition_usespeechrecognition", + "target": "src_hooks_usespeechrecognition_ispeechrecognition_start" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/hooks/useSpeechRecognition.ts", + "source_location": "L132", + "weight": 1.0, + "_origin": "ast", + "confidence_score": 1.0, + "source": "src_hooks_usespeechrecognition_usespeechrecognition", + "target": "src_hooks_usespeechrecognition_ispeechrecognition_stop" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/hooks/useSpeechRecognition.ts", + "source_location": "L59", + "weight": 1.0, + "_origin": "ast", + "confidence_score": 1.0, + "source": "src_hooks_usespeechrecognition_usespeechrecognition", + "target": "src_hooks_usespeechrecognition_ispeechrecognition_abort" + }, + { + "relation": "imports", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/hooks/useSpeechSynthesis.ts", + "source_location": "L2", + "weight": 1.0, + "_origin": "ast", + "confidence_score": 1.0, + "source": "src_hooks_usespeechsynthesis", + "target": "src_hooks_usespeechrecognition_voicestate" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/hooks/useSpeechSynthesis.ts", + "source_location": "L10", + "weight": 1.0, + "_origin": "ast", + "confidence_score": 1.0, + "source": "src_hooks_usespeechsynthesis", + "target": "src_hooks_usespeechsynthesis_usespeechsynthesis" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/hooks/useSpeechSynthesis.ts", + "source_location": "L4", + "weight": 1.0, + "_origin": "ast", + "confidence_score": 1.0, + "source": "src_hooks_usespeechsynthesis", + "target": "src_hooks_usespeechsynthesis_usespeechsynthesisreturn" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/services/api.ts", + "source_location": "L619", + "weight": 1.0, + "_origin": "ast", + "confidence_score": 1.0, + "source": "src_services_api", + "target": "src_services_api_api" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/services/api.ts", + "source_location": "L107", + "weight": 1.0, + "_origin": "ast", + "confidence_score": 1.0, + "source": "src_services_api", + "target": "src_services_api_apirequest" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/services/api.ts", + "source_location": "L26", + "weight": 1.0, + "_origin": "ast", + "confidence_score": 1.0, + "source": "src_services_api", + "target": "src_services_api_clearcustomersession" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/services/api.ts", + "source_location": "L13", + "weight": 1.0, + "_origin": "ast", + "confidence_score": 1.0, + "source": "src_services_api", + "target": "src_services_api_cleartokens" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/services/api.ts", + "source_location": "L7", + "weight": 1.0, + "_origin": "ast", + "confidence_score": 1.0, + "source": "src_services_api", + "target": "src_services_api_getaccesstoken" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/services/api.ts", + "source_location": "L34", + "weight": 1.0, + "_origin": "ast", + "confidence_score": 1.0, + "source": "src_services_api", + "target": "src_services_api_getbackendmenuid" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/services/api.ts", + "source_location": "L19", + "weight": 1.0, + "_origin": "ast", + "confidence_score": 1.0, + "source": "src_services_api", + "target": "src_services_api_getcustomersessionid" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/services/api.ts", + "source_location": "L18", + "weight": 1.0, + "_origin": "ast", + "confidence_score": 1.0, + "source": "src_services_api", + "target": "src_services_api_getcustomertoken" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/services/api.ts", + "source_location": "L39", + "weight": 1.0, + "_origin": "ast", + "confidence_score": 1.0, + "source": "src_services_api", + "target": "src_services_api_getfrontendmenuitem" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/services/api.ts", + "source_location": "L8", + "weight": 1.0, + "_origin": "ast", + "confidence_score": 1.0, + "source": "src_services_api", + "target": "src_services_api_getrefreshtoken" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/services/api.ts", + "source_location": "L159", + "weight": 1.0, + "_origin": "ast", + "confidence_score": 1.0, + "source": "src_services_api", + "target": "src_services_api_handlemockrequest" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/services/api.ts", + "source_location": "L45", + "weight": 1.0, + "_origin": "ast", + "confidence_score": 1.0, + "source": "src_services_api", + "target": "src_services_api_isdemomode" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/services/api.ts", + "source_location": "L62", + "weight": 1.0, + "_origin": "ast", + "confidence_score": 1.0, + "source": "src_services_api", + "target": "src_services_api_mockdb" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/services/api.ts", + "source_location": "L548", + "weight": 1.0, + "_origin": "ast", + "confidence_score": 1.0, + "source": "src_services_api", + "target": "src_services_api_notifywslisteners" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/services/api.ts", + "source_location": "L558", + "weight": 1.0, + "_origin": "ast", + "confidence_score": 1.0, + "source": "src_services_api", + "target": "src_services_api_restrowebsocket" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/services/api.ts", + "source_location": "L20", + "weight": 1.0, + "_origin": "ast", + "confidence_score": 1.0, + "source": "src_services_api", + "target": "src_services_api_setcustomersession" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/services/api.ts", + "source_location": "L48", + "weight": 1.0, + "_origin": "ast", + "confidence_score": 1.0, + "source": "src_services_api", + "target": "src_services_api_setdemomodechangecallback" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/services/api.ts", + "source_location": "L9", + "weight": 1.0, + "_origin": "ast", + "confidence_score": 1.0, + "source": "src_services_api", + "target": "src_services_api_settokens" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/services/api.ts", + "source_location": "L541", + "weight": 1.0, + "_origin": "ast", + "confidence_score": 1.0, + "source": "src_services_api", + "target": "src_services_api_subscribetowsevents" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/services/api.ts", + "source_location": "L52", + "weight": 1.0, + "_origin": "ast", + "confidence_score": 1.0, + "source": "src_services_api", + "target": "src_services_api_triggerdemomode" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/services/api.ts", + "source_location": "L540", + "weight": 1.0, + "_origin": "ast", + "confidence_score": 1.0, + "source": "src_services_api", + "target": "src_services_api_wslisteners" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/services/api.ts", + "source_location": "L112", + "weight": 1.0, + "_origin": "ast", + "confidence_score": 1.0, + "source": "src_services_api_apirequest", + "target": "src_services_api_getaccesstoken" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/services/api.ts", + "source_location": "L566", + "weight": 1.0, + "_origin": "ast", + "confidence_score": 1.0, + "source": "src_services_api_restrowebsocket_constructor", + "target": "src_services_api_getaccesstoken" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/services/api.ts", + "source_location": "L134", + "weight": 1.0, + "_origin": "ast", + "confidence_score": 1.0, + "source": "src_services_api_apirequest", + "target": "src_services_api_cleartokens" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/services/api.ts", + "source_location": "L118", + "weight": 1.0, + "_origin": "ast", + "confidence_score": 1.0, + "source": "src_services_api_apirequest", + "target": "src_services_api_getcustomertoken" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/services/api.ts", + "source_location": "L569", + "weight": 1.0, + "_origin": "ast", + "confidence_score": 1.0, + "source": "src_services_api_restrowebsocket_constructor", + "target": "src_services_api_getcustomertoken" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/services/api.ts", + "source_location": "L221", + "weight": 1.0, + "_origin": "ast", + "confidence_score": 1.0, + "source": "src_services_api_handlemockrequest", + "target": "src_services_api_getcustomersessionid" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/services/api.ts", + "source_location": "L225", + "weight": 1.0, + "_origin": "ast", + "confidence_score": 1.0, + "source": "src_services_api_handlemockrequest", + "target": "src_services_api_getfrontendmenuitem" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/services/api.ts", + "source_location": "L130", + "weight": 1.0, + "_origin": "ast", + "confidence_score": 1.0, + "source": "src_services_api_apirequest", + "target": "src_services_api_triggerdemomode" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/services/api.ts", + "source_location": "L154", + "weight": 1.0, + "_origin": "ast", + "confidence_score": 1.0, + "source": "src_services_api_apirequest", + "target": "src_services_api_handlemockrequest" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/services/api.ts", + "source_location": "L349", + "weight": 1.0, + "_origin": "ast", + "confidence_score": 1.0, + "source": "src_services_api_handlemockrequest", + "target": "src_services_api_notifywslisteners" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/services/api.ts", + "source_location": "L586", + "weight": 1.0, + "_origin": "ast", + "confidence_score": 1.0, + "source": "src_services_api_restrowebsocket_connect", + "target": "src_services_api_notifywslisteners" + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "src/services/api.ts", + "source_location": "L608", + "weight": 1.0, + "_origin": "ast", + "confidence_score": 1.0, + "source": "src_services_api_restrowebsocket", + "target": "src_services_api_restrowebsocket_close" + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "src/services/api.ts", + "source_location": "L574", + "weight": 1.0, + "_origin": "ast", + "confidence_score": 1.0, + "source": "src_services_api_restrowebsocket", + "target": "src_services_api_restrowebsocket_connect" + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "src/services/api.ts", + "source_location": "L564", + "weight": 1.0, + "_origin": "ast", + "confidence_score": 1.0, + "source": "src_services_api_restrowebsocket", + "target": "src_services_api_restrowebsocket_constructor" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/theme/theme.ts", + "source_location": "L3", + "weight": 1.0, + "_origin": "ast", + "confidence_score": 1.0, + "source": "src_theme_theme", + "target": "src_theme_theme_theme" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/types/index.ts", + "source_location": "L29", + "weight": 1.0, + "_origin": "ast", + "confidence_score": 1.0, + "source": "src_types_index", + "target": "src_types_index_analyticsmetric" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/types/index.ts", + "source_location": "L37", + "weight": 1.0, + "_origin": "ast", + "confidence_score": 1.0, + "source": "src_types_index", + "target": "src_types_index_dishperformance" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/types/index.ts", + "source_location": "L14", + "weight": 1.0, + "_origin": "ast", + "confidence_score": 1.0, + "source": "src_types_index", + "target": "src_types_index_kdsorder" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/types/index.ts", + "source_location": "L4", + "weight": 1.0, + "_origin": "ast", + "confidence_score": 1.0, + "source": "src_types_index", + "target": "src_types_index_orderitem" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/types/index.ts", + "source_location": "L1", + "weight": 1.0, + "_origin": "ast", + "confidence_score": 1.0, + "source": "src_types_index", + "target": "src_types_index_orderstatus" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/types/index.ts", + "source_location": "L2", + "weight": 1.0, + "_origin": "ast", + "confidence_score": 1.0, + "source": "src_types_index", + "target": "src_types_index_ordertype" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/types/index.ts", + "source_location": "L47", + "weight": 1.0, + "_origin": "ast", + "confidence_score": 1.0, + "source": "src_types_index", + "target": "src_types_index_voicecommandsuggestion" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tsconfig.app.json", + "source_location": "L2", + "weight": 1.0, + "_origin": "ast", + "confidence_score": 1.0, + "source": "tsconfig_app", + "target": "tsconfig_app_compileroptions" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tsconfig.app.json", + "source_location": "L25", + "weight": 1.0, + "_origin": "ast", + "confidence_score": 1.0, + "source": "tsconfig_app", + "target": "tsconfig_app_include" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tsconfig.app.json", + "source_location": "L8", + "weight": 1.0, + "_origin": "ast", + "confidence_score": 1.0, + "source": "tsconfig_app_compileroptions", + "target": "tsconfig_app_compileroptions_allowarbitraryextensions" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tsconfig.app.json", + "source_location": "L13", + "weight": 1.0, + "_origin": "ast", + "confidence_score": 1.0, + "source": "tsconfig_app_compileroptions", + "target": "tsconfig_app_compileroptions_allowimportingtsextensions" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tsconfig.app.json", + "source_location": "L22", + "weight": 1.0, + "_origin": "ast", + "confidence_score": 1.0, + "source": "tsconfig_app_compileroptions", + "target": "tsconfig_app_compileroptions_erasablesyntaxonly" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tsconfig.app.json", + "source_location": "L17", + "weight": 1.0, + "_origin": "ast", + "confidence_score": 1.0, + "source": "tsconfig_app_compileroptions", + "target": "tsconfig_app_compileroptions_jsx" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tsconfig.app.json", + "source_location": "L5", + "weight": 1.0, + "_origin": "ast", + "confidence_score": 1.0, + "source": "tsconfig_app_compileroptions", + "target": "tsconfig_app_compileroptions_lib" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tsconfig.app.json", + "source_location": "L6", + "weight": 1.0, + "_origin": "ast", + "confidence_score": 1.0, + "source": "tsconfig_app_compileroptions", + "target": "tsconfig_app_compileroptions_module" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tsconfig.app.json", + "source_location": "L15", + "weight": 1.0, + "_origin": "ast", + "confidence_score": 1.0, + "source": "tsconfig_app_compileroptions", + "target": "tsconfig_app_compileroptions_moduledetection" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tsconfig.app.json", + "source_location": "L12", + "weight": 1.0, + "_origin": "ast", + "confidence_score": 1.0, + "source": "tsconfig_app_compileroptions", + "target": "tsconfig_app_compileroptions_moduleresolution" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tsconfig.app.json", + "source_location": "L16", + "weight": 1.0, + "_origin": "ast", + "confidence_score": 1.0, + "source": "tsconfig_app_compileroptions", + "target": "tsconfig_app_compileroptions_noemit" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tsconfig.app.json", + "source_location": "L23", + "weight": 1.0, + "_origin": "ast", + "confidence_score": 1.0, + "source": "tsconfig_app_compileroptions", + "target": "tsconfig_app_compileroptions_nofallthroughcasesinswitch" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tsconfig.app.json", + "source_location": "L20", + "weight": 1.0, + "_origin": "ast", + "confidence_score": 1.0, + "source": "tsconfig_app_compileroptions", + "target": "tsconfig_app_compileroptions_nounusedlocals" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tsconfig.app.json", + "source_location": "L21", + "weight": 1.0, + "_origin": "ast", + "confidence_score": 1.0, + "source": "tsconfig_app_compileroptions", + "target": "tsconfig_app_compileroptions_nounusedparameters" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tsconfig.app.json", + "source_location": "L9", + "weight": 1.0, + "_origin": "ast", + "confidence_score": 1.0, + "source": "tsconfig_app_compileroptions", + "target": "tsconfig_app_compileroptions_skiplibcheck" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tsconfig.app.json", + "source_location": "L4", + "weight": 1.0, + "_origin": "ast", + "confidence_score": 1.0, + "source": "tsconfig_app_compileroptions", + "target": "tsconfig_app_compileroptions_target" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tsconfig.app.json", + "source_location": "L3", + "weight": 1.0, + "_origin": "ast", + "confidence_score": 1.0, + "source": "tsconfig_app_compileroptions", + "target": "tsconfig_app_compileroptions_tsbuildinfofile" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tsconfig.app.json", + "source_location": "L7", + "weight": 1.0, + "_origin": "ast", + "confidence_score": 1.0, + "source": "tsconfig_app_compileroptions", + "target": "tsconfig_app_compileroptions_types" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tsconfig.app.json", + "source_location": "L14", + "weight": 1.0, + "_origin": "ast", + "confidence_score": 1.0, + "source": "tsconfig_app_compileroptions", + "target": "tsconfig_app_compileroptions_verbatimmodulesyntax" + }, + { + "relation": "extends", + "confidence": "EXTRACTED", + "source_file": "tsconfig.app.json", + "source_location": "L5", + "weight": 1.0, + "context": "import", + "_origin": "ast", + "confidence_score": 1.0, + "source": "tsconfig_app_compileroptions_lib", + "target": "ref_dom" + }, + { + "relation": "extends", + "confidence": "EXTRACTED", + "source_file": "tsconfig.app.json", + "source_location": "L5", + "weight": 1.0, + "context": "import", + "_origin": "ast", + "confidence_score": 1.0, + "source": "tsconfig_app_compileroptions_lib", + "target": "tsconfig_app_json_ref_es2023" + }, + { + "relation": "extends", + "confidence": "EXTRACTED", + "source_file": "tsconfig.app.json", + "source_location": "L7", + "weight": 1.0, + "context": "import", + "_origin": "ast", + "confidence_score": 1.0, + "source": "tsconfig_app_compileroptions_types", + "target": "ref_vite_client" + }, + { + "relation": "extends", + "confidence": "EXTRACTED", + "source_file": "tsconfig.app.json", + "source_location": "L25", + "weight": 1.0, + "context": "import", + "_origin": "ast", + "confidence_score": 1.0, + "source": "tsconfig_app_include", + "target": "ref_src" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tsconfig.json", + "source_location": "L2", + "weight": 1.0, + "_origin": "ast", + "confidence_score": 1.0, + "source": "tsconfig", + "target": "tsconfig_files" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tsconfig.json", + "source_location": "L3", + "weight": 1.0, + "_origin": "ast", + "confidence_score": 1.0, + "source": "tsconfig", + "target": "tsconfig_references" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tsconfig.node.json", + "source_location": "L2", + "weight": 1.0, + "_origin": "ast", + "confidence_score": 1.0, + "source": "tsconfig_node", + "target": "tsconfig_node_compileroptions" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tsconfig.node.json", + "source_location": "L22", + "weight": 1.0, + "_origin": "ast", + "confidence_score": 1.0, + "source": "tsconfig_node", + "target": "tsconfig_node_include" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tsconfig.node.json", + "source_location": "L11", + "weight": 1.0, + "_origin": "ast", + "confidence_score": 1.0, + "source": "tsconfig_node_compileroptions", + "target": "tsconfig_node_compileroptions_allowimportingtsextensions" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tsconfig.node.json", + "source_location": "L19", + "weight": 1.0, + "_origin": "ast", + "confidence_score": 1.0, + "source": "tsconfig_node_compileroptions", + "target": "tsconfig_node_compileroptions_erasablesyntaxonly" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tsconfig.node.json", + "source_location": "L5", + "weight": 1.0, + "_origin": "ast", + "confidence_score": 1.0, + "source": "tsconfig_node_compileroptions", + "target": "tsconfig_node_compileroptions_lib" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tsconfig.node.json", + "source_location": "L10", + "weight": 1.0, + "_origin": "ast", + "confidence_score": 1.0, + "source": "tsconfig_node_compileroptions", + "target": "tsconfig_node_compileroptions_module" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tsconfig.node.json", + "source_location": "L13", + "weight": 1.0, + "_origin": "ast", + "confidence_score": 1.0, + "source": "tsconfig_node_compileroptions", + "target": "tsconfig_node_compileroptions_moduledetection" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tsconfig.node.json", + "source_location": "L14", + "weight": 1.0, + "_origin": "ast", + "confidence_score": 1.0, + "source": "tsconfig_node_compileroptions", + "target": "tsconfig_node_compileroptions_noemit" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tsconfig.node.json", + "source_location": "L20", + "weight": 1.0, + "_origin": "ast", + "confidence_score": 1.0, + "source": "tsconfig_node_compileroptions", + "target": "tsconfig_node_compileroptions_nofallthroughcasesinswitch" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tsconfig.node.json", + "source_location": "L17", + "weight": 1.0, + "_origin": "ast", + "confidence_score": 1.0, + "source": "tsconfig_node_compileroptions", + "target": "tsconfig_node_compileroptions_nounusedlocals" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tsconfig.node.json", + "source_location": "L18", + "weight": 1.0, + "_origin": "ast", + "confidence_score": 1.0, + "source": "tsconfig_node_compileroptions", + "target": "tsconfig_node_compileroptions_nounusedparameters" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tsconfig.node.json", + "source_location": "L7", + "weight": 1.0, + "_origin": "ast", + "confidence_score": 1.0, + "source": "tsconfig_node_compileroptions", + "target": "tsconfig_node_compileroptions_skiplibcheck" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tsconfig.node.json", + "source_location": "L4", + "weight": 1.0, + "_origin": "ast", + "confidence_score": 1.0, + "source": "tsconfig_node_compileroptions", + "target": "tsconfig_node_compileroptions_target" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tsconfig.node.json", + "source_location": "L3", + "weight": 1.0, + "_origin": "ast", + "confidence_score": 1.0, + "source": "tsconfig_node_compileroptions", + "target": "tsconfig_node_compileroptions_tsbuildinfofile" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tsconfig.node.json", + "source_location": "L6", + "weight": 1.0, + "_origin": "ast", + "confidence_score": 1.0, + "source": "tsconfig_node_compileroptions", + "target": "tsconfig_node_compileroptions_types" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tsconfig.node.json", + "source_location": "L12", + "weight": 1.0, + "_origin": "ast", + "confidence_score": 1.0, + "source": "tsconfig_node_compileroptions", + "target": "tsconfig_node_compileroptions_verbatimmodulesyntax" + }, + { + "relation": "extends", + "confidence": "EXTRACTED", + "source_file": "tsconfig.node.json", + "source_location": "L5", + "weight": 1.0, + "context": "import", + "_origin": "ast", + "confidence_score": 1.0, + "source": "tsconfig_node_compileroptions_lib", + "target": "tsconfig_node_json_ref_es2023" + }, + { + "relation": "extends", + "confidence": "EXTRACTED", + "source_file": "tsconfig.node.json", + "source_location": "L6", + "weight": 1.0, + "context": "import", + "_origin": "ast", + "confidence_score": 1.0, + "source": "tsconfig_node_compileroptions_types", + "target": "ref_node" + }, + { + "relation": "extends", + "confidence": "EXTRACTED", + "source_file": "tsconfig.node.json", + "source_location": "L22", + "weight": 1.0, + "context": "import", + "_origin": "ast", + "confidence_score": 1.0, + "source": "tsconfig_node_include", + "target": "ref_vite_config_ts" + } + ], + "hyperedges": [] +} \ No newline at end of file diff --git a/graphify-out/manifest.json b/graphify-out/manifest.json new file mode 100644 index 0000000..2ee15a5 --- /dev/null +++ b/graphify-out/manifest.json @@ -0,0 +1,187 @@ +{ + ".oxlintrc.json": { + "mtime": 1785233280.3463209, + "ast_hash": "029f4905006c1fffd96bc863e2d98d3e", + "semantic_hash": "029f4905006c1fffd96bc863e2d98d3e" + }, + "package.json": { + "mtime": 1785396043.7175367, + "ast_hash": "4655a1612c925f79016d7e2f9187ba73", + "semantic_hash": "4655a1612c925f79016d7e2f9187ba73" + }, + "src/App.tsx": { + "mtime": 1785905557.3172138, + "ast_hash": "b59e28160f20dd3a81ea9b0db11afe54", + "semantic_hash": "b59e28160f20dd3a81ea9b0db11afe54" + }, + "src/components/admin/AdminDesktopShell.tsx": { + "mtime": 1785905097.248853, + "ast_hash": "afff87f6af48754405d30704280185df", + "semantic_hash": "afff87f6af48754405d30704280185df" + }, + "src/components/admin/BillingManagerView.tsx": { + "mtime": 1785905514.858435, + "ast_hash": "f437ceb784222a87398bf2e1c6a8a216", + "semantic_hash": "f437ceb784222a87398bf2e1c6a8a216" + }, + "src/components/admin/FeedbackInboxView.tsx": { + "mtime": 1785905479.3076365, + "ast_hash": "7a8469ab9ecf7bdb8ffe7f0750c25a52", + "semantic_hash": "7a8469ab9ecf7bdb8ffe7f0750c25a52" + }, + "src/components/admin/InventoryView.tsx": { + "mtime": 1785905582.5370235, + "ast_hash": "abfccd3a550964c60fd67e5c0c0c5aac", + "semantic_hash": "abfccd3a550964c60fd67e5c0c0c5aac" + }, + "src/components/admin/ReservationsView.tsx": { + "mtime": 1785905528.0872736, + "ast_hash": "860b3c3951fbfe786027586b5c735a6a", + "semantic_hash": "860b3c3951fbfe786027586b5c735a6a" + }, + "src/components/admin/StaffLoginModal.tsx": { + "mtime": 1785905533.9719107, + "ast_hash": "2a7b212d658fc57140796bc7d36c2534", + "semantic_hash": "2a7b212d658fc57140796bc7d36c2534" + }, + "src/components/admin/StaffShiftsView.tsx": { + "mtime": 1785905521.3331137, + "ast_hash": "c768b5b542c87471c231c8b98644fa43", + "semantic_hash": "c768b5b542c87471c231c8b98644fa43" + }, + "src/components/admin/SuppliersView.tsx": { + "mtime": 1785905498.7847517, + "ast_hash": "e589c84af3729b58f5ed5af6f23aad13", + "semantic_hash": "e589c84af3729b58f5ed5af6f23aad13" + }, + "src/components/admin/TableManagementView.tsx": { + "mtime": 1785905381.1579387, + "ast_hash": "064aed47b09064c875f2164337472608", + "semantic_hash": "064aed47b09064c875f2164337472608" + }, + "src/components/analytics/AnalyticsDashboard.tsx": { + "mtime": 1785905548.1189818, + "ast_hash": "8f11f39a224311e286e450f718159e2a", + "semantic_hash": "8f11f39a224311e286e450f718159e2a" + }, + "src/components/common/Navigation.tsx": { + "mtime": 1785233556.4295392, + "ast_hash": "628b6a71dfcd00bf6e69f24d0347ece2", + "semantic_hash": "628b6a71dfcd00bf6e69f24d0347ece2" + }, + "src/components/common/StatusBadge.tsx": { + "mtime": 1785233494.191133, + "ast_hash": "205207743512af9e406b5227049b64fc", + "semantic_hash": "205207743512af9e406b5227049b64fc" + }, + "src/components/customer/BillPaymentView.tsx": { + "mtime": 1785905194.0057652, + "ast_hash": "7ca6bf89fa190fd0e07593af3f7005cf", + "semantic_hash": "7ca6bf89fa190fd0e07593af3f7005cf" + }, + "src/components/customer/CartReviewView.tsx": { + "mtime": 1785905199.5156598, + "ast_hash": "96f8f643e1bda9391a19644ad78c762e", + "semantic_hash": "96f8f643e1bda9391a19644ad78c762e" + }, + "src/components/customer/CustomizationModal.tsx": { + "mtime": 1785239166.0497863, + "ast_hash": "877361d754afa0a4906d8d07127d4db9", + "semantic_hash": "877361d754afa0a4906d8d07127d4db9" + }, + "src/components/customer/MenuBrowseView.tsx": { + "mtime": 1785905157.8688335, + "ast_hash": "76824fe03461a9b6d174a7122c7e462c", + "semantic_hash": "76824fe03461a9b6d174a7122c7e462c" + }, + "src/components/customer/OrderStatusView.tsx": { + "mtime": 1785905172.1933515, + "ast_hash": "f1a447a5d4cb1ab9e432577d5e0cf36c", + "semantic_hash": "f1a447a5d4cb1ab9e432577d5e0cf36c" + }, + "src/components/customer/TableLandingView.tsx": { + "mtime": 1785905152.257808, + "ast_hash": "25694968d103c84c34d1050f942e3c85", + "semantic_hash": "25694968d103c84c34d1050f942e3c85" + }, + "src/components/customer/VoiceAssistantModal.tsx": { + "mtime": 1785239308.1253068, + "ast_hash": "4b176d62d71a7fb9bcb49e2f0ce86896", + "semantic_hash": "4b176d62d71a7fb9bcb49e2f0ce86896" + }, + "src/components/kds/KDSKanban.tsx": { + "mtime": 1785233506.0593884, + "ast_hash": "42cc5e869a2b732da3164dcd0c9d833d", + "semantic_hash": "42cc5e869a2b732da3164dcd0c9d833d" + }, + "src/components/kds/KDSTicketCard.tsx": { + "mtime": 1785233547.0403948, + "ast_hash": "3af4261d1af75a0936901b6ebc60d151", + "semantic_hash": "3af4261d1af75a0936901b6ebc60d151" + }, + "src/components/table/TableLandingView.tsx": { + "mtime": 1785233475.4122329, + "ast_hash": "1a190d943d11c35de8443fa70108a774", + "semantic_hash": "1a190d943d11c35de8443fa70108a774" + }, + "src/components/voice/VoiceOrderingView.tsx": { + "mtime": 1785239270.3471916, + "ast_hash": "00464f0c42167a0df33cf8efcae9088d", + "semantic_hash": "00464f0c42167a0df33cf8efcae9088d" + }, + "src/data/menuData.ts": { + "mtime": 1785238770.1435912, + "ast_hash": "e95b94d964f714c9c11cc9d752d0cd38", + "semantic_hash": "e95b94d964f714c9c11cc9d752d0cd38" + }, + "src/hooks/useSpeechRecognition.ts": { + "mtime": 1785238790.0349185, + "ast_hash": "95485ffe24c46698ccd14faf1e9dda5f", + "semantic_hash": "95485ffe24c46698ccd14faf1e9dda5f" + }, + "src/hooks/useSpeechSynthesis.ts": { + "mtime": 1785238801.6592543, + "ast_hash": "b963f9a7fcb1d1c53c2d8b61786f9118", + "semantic_hash": "b963f9a7fcb1d1c53c2d8b61786f9118" + }, + "src/main.tsx": { + "mtime": 1785233281.7759771, + "ast_hash": "787e5a07efeb2bf6209d5937195f2f68", + "semantic_hash": "787e5a07efeb2bf6209d5937195f2f68" + }, + "src/services/api.ts": { + "mtime": 1785908359.8571103, + "ast_hash": "3477c88ca1ba0114944daada5a7d1e7b", + "semantic_hash": "3477c88ca1ba0114944daada5a7d1e7b" + }, + "src/theme/theme.ts": { + "mtime": 1785233448.0913806, + "ast_hash": "0f1068cf16ec48a6b8679aabe997988d", + "semantic_hash": "0f1068cf16ec48a6b8679aabe997988d" + }, + "src/types/index.ts": { + "mtime": 1785233301.05939, + "ast_hash": "7bb44e94e1c329983c155971065d4f3e", + "semantic_hash": "7bb44e94e1c329983c155971065d4f3e" + }, + "tsconfig.app.json": { + "mtime": 1785233280.5814598, + "ast_hash": "5f2dafd737dea8a4ddcbb10f5113ac5a", + "semantic_hash": "5f2dafd737dea8a4ddcbb10f5113ac5a" + }, + "tsconfig.json": { + "mtime": 1785233280.63329, + "ast_hash": "a3d39fa780ebff65444de257f291ce6c", + "semantic_hash": "a3d39fa780ebff65444de257f291ce6c" + }, + "tsconfig.node.json": { + "mtime": 1785233280.683418, + "ast_hash": "f9cb81ddcea69ffdab672fc8c48dca66", + "semantic_hash": "f9cb81ddcea69ffdab672fc8c48dca66" + }, + "vite.config.ts": { + "mtime": 1785233281.6674225, + "ast_hash": "88439104b3c207f17d33ef3160e3b080", + "semantic_hash": "88439104b3c207f17d33ef3160e3b080" + } +} \ No newline at end of file diff --git a/index.html b/index.html new file mode 100644 index 0000000..7dd2309 --- /dev/null +++ b/index.html @@ -0,0 +1,17 @@ + + + + + + + RestroAI Operations Platform - Kitchen & Analytics Suite + + + + + + +
+ + + diff --git a/package-lock.json b/package-lock.json new file mode 100644 index 0000000..ee3a060 --- /dev/null +++ b/package-lock.json @@ -0,0 +1,2195 @@ +{ + "name": "restroai", + "version": "0.0.0", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "restroai", + "version": "0.0.0", + "dependencies": { + "@emotion/react": "^11.14.0", + "@emotion/styled": "^11.14.1", + "@mui/icons-material": "^9.2.0", + "@mui/material": "^9.2.0", + "react": "^19.2.7", + "react-dom": "^19.2.7" + }, + "devDependencies": { + "@types/node": "^24.13.2", + "@types/react": "^19.2.17", + "@types/react-dom": "^19.2.3", + "@vitejs/plugin-react": "^6.0.3", + "oxlint": "^1.71.0", + "typescript": "~6.0.2", + "vite": "^8.1.1" + } + }, + "node_modules/@babel/code-frame": { + "version": "7.29.7", + "license": "MIT", + "dependencies": { + "@babel/helper-validator-identifier": "^7.29.7", + "js-tokens": "^4.0.0", + "picocolors": "^1.1.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/generator": { + "version": "7.29.7", + "license": "MIT", + "dependencies": { + "@babel/parser": "^7.29.7", + "@babel/types": "^7.29.7", + "@jridgewell/gen-mapping": "^0.3.12", + "@jridgewell/trace-mapping": "^0.3.28", + "jsesc": "^3.0.2" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-globals": { + "version": "7.29.7", + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-imports": { + "version": "7.29.7", + "license": "MIT", + "dependencies": { + "@babel/traverse": "^7.29.7", + "@babel/types": "^7.29.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-string-parser": { + "version": "7.29.7", + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-identifier": { + "version": "7.29.7", + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/parser": { + "version": "7.29.7", + "license": "MIT", + "dependencies": { + "@babel/types": "^7.29.7" + }, + "bin": { + "parser": "bin/babel-parser.js" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/runtime": { + "version": "7.29.7", + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/template": { + "version": "7.29.7", + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.29.7", + "@babel/parser": "^7.29.7", + "@babel/types": "^7.29.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/traverse": { + "version": "7.29.7", + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.29.7", + "@babel/generator": "^7.29.7", + "@babel/helper-globals": "^7.29.7", + "@babel/parser": "^7.29.7", + "@babel/template": "^7.29.7", + "@babel/types": "^7.29.7", + "debug": "^4.3.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/types": { + "version": "7.29.7", + "license": "MIT", + "dependencies": { + "@babel/helper-string-parser": "^7.29.7", + "@babel/helper-validator-identifier": "^7.29.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@emnapi/core": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@emnapi/core/-/core-1.11.1.tgz", + "integrity": "sha512-RSvbQmHzdKzNsLYa/wHrbc3KN4sYLKAdPZxqiM2HATqv/SBk2/ENSHpvXGaLOMcsAyz0poEGqkmmKYG3OWiJEQ==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "@emnapi/wasi-threads": "1.2.2", + "tslib": "^2.4.0" + } + }, + "node_modules/@emnapi/runtime": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@emnapi/runtime/-/runtime-1.11.1.tgz", + "integrity": "sha512-vgj7R3y3Wgx24IQaGPA/R6YFXLHVMOZ0uVEyIQPaWs+rd1AzfEMXlAC22FYwO1XkKR6NPsq7mUandH8oIRdZFw==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "tslib": "^2.4.0" + } + }, + "node_modules/@emnapi/wasi-threads": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/@emnapi/wasi-threads/-/wasi-threads-1.2.2.tgz", + "integrity": "sha512-c95qOXkHdydNKhscBTebqEC1CVAZpyqOfVfBzQ1qgzyl3gfeldUjIggDbIZgDKsHLgnsM+igH7TJ/eAasaVuMA==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "tslib": "^2.4.0" + } + }, + "node_modules/@emotion/babel-plugin": { + "version": "11.13.5", + "license": "MIT", + "dependencies": { + "@babel/helper-module-imports": "^7.16.7", + "@babel/runtime": "^7.18.3", + "@emotion/hash": "^0.9.2", + "@emotion/memoize": "^0.9.0", + "@emotion/serialize": "^1.3.3", + "babel-plugin-macros": "^3.1.0", + "convert-source-map": "^1.5.0", + "escape-string-regexp": "^4.0.0", + "find-root": "^1.1.0", + "source-map": "^0.5.7", + "stylis": "4.2.0" + } + }, + "node_modules/@emotion/cache": { + "version": "11.14.0", + "license": "MIT", + "dependencies": { + "@emotion/memoize": "^0.9.0", + "@emotion/sheet": "^1.4.0", + "@emotion/utils": "^1.4.2", + "@emotion/weak-memoize": "^0.4.0", + "stylis": "4.2.0" + } + }, + "node_modules/@emotion/hash": { + "version": "0.9.2", + "license": "MIT" + }, + "node_modules/@emotion/is-prop-valid": { + "version": "1.4.0", + "license": "MIT", + "dependencies": { + "@emotion/memoize": "^0.9.0" + } + }, + "node_modules/@emotion/memoize": { + "version": "0.9.0", + "license": "MIT" + }, + "node_modules/@emotion/react": { + "version": "11.14.0", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.18.3", + "@emotion/babel-plugin": "^11.13.5", + "@emotion/cache": "^11.14.0", + "@emotion/serialize": "^1.3.3", + "@emotion/use-insertion-effect-with-fallbacks": "^1.2.0", + "@emotion/utils": "^1.4.2", + "@emotion/weak-memoize": "^0.4.0", + "hoist-non-react-statics": "^3.3.1" + }, + "peerDependencies": { + "react": ">=16.8.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@emotion/serialize": { + "version": "1.3.3", + "license": "MIT", + "dependencies": { + "@emotion/hash": "^0.9.2", + "@emotion/memoize": "^0.9.0", + "@emotion/unitless": "^0.10.0", + "@emotion/utils": "^1.4.2", + "csstype": "^3.0.2" + } + }, + "node_modules/@emotion/sheet": { + "version": "1.4.0", + "license": "MIT" + }, + "node_modules/@emotion/styled": { + "version": "11.14.1", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.18.3", + "@emotion/babel-plugin": "^11.13.5", + "@emotion/is-prop-valid": "^1.3.0", + "@emotion/serialize": "^1.3.3", + "@emotion/use-insertion-effect-with-fallbacks": "^1.2.0", + "@emotion/utils": "^1.4.2" + }, + "peerDependencies": { + "@emotion/react": "^11.0.0-rc.0", + "react": ">=16.8.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@emotion/unitless": { + "version": "0.10.0", + "license": "MIT" + }, + "node_modules/@emotion/use-insertion-effect-with-fallbacks": { + "version": "1.2.0", + "license": "MIT", + "peerDependencies": { + "react": ">=16.8.0" + } + }, + "node_modules/@emotion/utils": { + "version": "1.4.2", + "license": "MIT" + }, + "node_modules/@emotion/weak-memoize": { + "version": "0.4.0", + "license": "MIT" + }, + "node_modules/@jridgewell/gen-mapping": { + "version": "0.3.13", + "license": "MIT", + "dependencies": { + "@jridgewell/sourcemap-codec": "^1.5.0", + "@jridgewell/trace-mapping": "^0.3.24" + } + }, + "node_modules/@jridgewell/resolve-uri": { + "version": "3.1.2", + "license": "MIT", + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.5.5", + "license": "MIT" + }, + "node_modules/@jridgewell/trace-mapping": { + "version": "0.3.31", + "license": "MIT", + "dependencies": { + "@jridgewell/resolve-uri": "^3.1.0", + "@jridgewell/sourcemap-codec": "^1.4.14" + } + }, + "node_modules/@mui/core-downloads-tracker": { + "version": "9.2.0", + "license": "MIT", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/mui-org" + } + }, + "node_modules/@mui/icons-material": { + "version": "9.2.0", + "resolved": "https://registry.npmjs.org/@mui/icons-material/-/icons-material-9.2.0.tgz", + "integrity": "sha512-VgBd3z7Qc3vd/thcNSMC03nHRh/U4DzMUd+1dRyJTbm/hGo7+N6N4GDuJZDNHa6LZhhwG6Cu1X3DNvrVv8sNag==", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.29.2" + }, + "engines": { + "node": ">=14.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/mui-org" + }, + "peerDependencies": { + "@mui/material": "^9.2.0", + "@types/react": "^17.0.0 || ^18.0.0 || ^19.0.0", + "react": "^17.0.0 || ^18.0.0 || ^19.0.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@mui/material": { + "version": "9.2.0", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.29.2", + "@mui/core-downloads-tracker": "^9.2.0", + "@mui/system": "^9.2.0", + "@mui/types": "^9.1.1", + "@mui/utils": "^9.2.0", + "@popperjs/core": "^2.11.8", + "@types/react-transition-group": "^4.4.12", + "clsx": "^2.1.1", + "csstype": "^3.2.3", + "prop-types": "^15.8.1", + "react-is": "^19.2.6", + "react-transition-group": "^4.4.5" + }, + "engines": { + "node": ">=14.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/mui-org" + }, + "peerDependencies": { + "@emotion/react": "^11.5.0", + "@emotion/styled": "^11.3.0", + "@mui/material-pigment-css": "^9.2.0", + "@types/react": "^17.0.0 || ^18.0.0 || ^19.0.0", + "react": "^17.0.0 || ^18.0.0 || ^19.0.0", + "react-dom": "^17.0.0 || ^18.0.0 || ^19.0.0" + }, + "peerDependenciesMeta": { + "@emotion/react": { + "optional": true + }, + "@emotion/styled": { + "optional": true + }, + "@mui/material-pigment-css": { + "optional": true + }, + "@types/react": { + "optional": true + } + } + }, + "node_modules/@mui/private-theming": { + "version": "9.2.0", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.29.2", + "@mui/utils": "^9.2.0", + "prop-types": "^15.8.1" + }, + "engines": { + "node": ">=14.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/mui-org" + }, + "peerDependencies": { + "@types/react": "^17.0.0 || ^18.0.0 || ^19.0.0", + "react": "^17.0.0 || ^18.0.0 || ^19.0.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@mui/styled-engine": { + "version": "9.1.1", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.29.2", + "@emotion/cache": "^11.14.0", + "@emotion/serialize": "^1.3.3", + "@emotion/sheet": "^1.4.0", + "csstype": "^3.2.3", + "prop-types": "^15.8.1" + }, + "engines": { + "node": ">=14.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/mui-org" + }, + "peerDependencies": { + "@emotion/react": "^11.4.1", + "@emotion/styled": "^11.3.0", + "react": "^17.0.0 || ^18.0.0 || ^19.0.0" + }, + "peerDependenciesMeta": { + "@emotion/react": { + "optional": true + }, + "@emotion/styled": { + "optional": true + } + } + }, + "node_modules/@mui/system": { + "version": "9.2.0", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.29.2", + "@mui/private-theming": "^9.2.0", + "@mui/styled-engine": "^9.1.1", + "@mui/types": "^9.1.1", + "@mui/utils": "^9.2.0", + "clsx": "^2.1.1", + "csstype": "^3.2.3", + "prop-types": "^15.8.1" + }, + "engines": { + "node": ">=14.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/mui-org" + }, + "peerDependencies": { + "@emotion/react": "^11.5.0", + "@emotion/styled": "^11.3.0", + "@types/react": "^17.0.0 || ^18.0.0 || ^19.0.0", + "react": "^17.0.0 || ^18.0.0 || ^19.0.0" + }, + "peerDependenciesMeta": { + "@emotion/react": { + "optional": true + }, + "@emotion/styled": { + "optional": true + }, + "@types/react": { + "optional": true + } + } + }, + "node_modules/@mui/types": { + "version": "9.1.1", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.29.2" + }, + "peerDependencies": { + "@types/react": "^17.0.0 || ^18.0.0 || ^19.0.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@mui/utils": { + "version": "9.2.0", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.29.2", + "@mui/types": "^9.1.1", + "@types/prop-types": "^15.7.15", + "clsx": "^2.1.1", + "prop-types": "^15.8.1", + "react-is": "^19.2.6" + }, + "engines": { + "node": ">=14.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/mui-org" + }, + "peerDependencies": { + "@types/react": "^17.0.0 || ^18.0.0 || ^19.0.0", + "react": "^17.0.0 || ^18.0.0 || ^19.0.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@napi-rs/wasm-runtime": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/@napi-rs/wasm-runtime/-/wasm-runtime-1.2.2.tgz", + "integrity": "sha512-JfB4kuJQjaoHuCTseIINHtHWeJnvgEcxjwA5t/Y00ZgaOO1Crz3fjT/p8kT28zA/Caz7oiUMn3d6H2yOVCVwuw==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "@tybys/wasm-util": "^0.10.3" + }, + "engines": { + "node": "^20.19.0 || ^22.13.0 || >=23.5.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/Brooooooklyn" + }, + "peerDependencies": { + "@emnapi/core": "^1.7.1 || ^2.0.0-alpha.3", + "@emnapi/runtime": "^1.7.1 || ^2.0.0-alpha.3" + } + }, + "node_modules/@oxc-project/types": { + "version": "0.139.0", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/Boshen" + } + }, + "node_modules/@oxlint/binding-android-arm-eabi": { + "version": "1.76.0", + "resolved": "https://registry.npmjs.org/@oxlint/binding-android-arm-eabi/-/binding-android-arm-eabi-1.76.0.tgz", + "integrity": "sha512-ZHIE5Zt9AsPDcY4nOlofXt0YfneEeo+QrKMPcPzLf2Z6Q8VtV2W73d7SFJ920WUwyik783u/doKCs3KXdwG+7w==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@oxlint/binding-android-arm64": { + "version": "1.76.0", + "resolved": "https://registry.npmjs.org/@oxlint/binding-android-arm64/-/binding-android-arm64-1.76.0.tgz", + "integrity": "sha512-shm/ngQilHK6bs+ElJWa4oHfNj5vL1Gl/iVEJldTQjpr0/67oSgr0KUpbmcnLig5Fo0v/l6j2567A7TOL89ONA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@oxlint/binding-darwin-arm64": { + "version": "1.76.0", + "resolved": "https://registry.npmjs.org/@oxlint/binding-darwin-arm64/-/binding-darwin-arm64-1.76.0.tgz", + "integrity": "sha512-rvJmrAPKSQ9aWJ6wIS6CK2tJjwzfW0ApQH9qokq6sfDvmHwoyIHxHFMq7z7i7GiV6fdE6s8qvBqWKPTu8RmT6Q==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@oxlint/binding-darwin-x64": { + "version": "1.76.0", + "resolved": "https://registry.npmjs.org/@oxlint/binding-darwin-x64/-/binding-darwin-x64-1.76.0.tgz", + "integrity": "sha512-U/zYdb7VYKGY6pA9Vd2rYl9O/HlCylcOlb5PGPvVLtg+oLGsk6H3XGKEMHKyqD3nmmtmlmwb/8SwU2vfSAtvMw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@oxlint/binding-freebsd-x64": { + "version": "1.76.0", + "resolved": "https://registry.npmjs.org/@oxlint/binding-freebsd-x64/-/binding-freebsd-x64-1.76.0.tgz", + "integrity": "sha512-WvKG9CAriuo0XNiFzpXjDngUZcRGFNpaK2kLyMUsnJlShxkT96u+BpJQ3KqdQwGOrvI14L6V8bAwXwAYNNY6Jg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@oxlint/binding-linux-arm-gnueabihf": { + "version": "1.76.0", + "resolved": "https://registry.npmjs.org/@oxlint/binding-linux-arm-gnueabihf/-/binding-linux-arm-gnueabihf-1.76.0.tgz", + "integrity": "sha512-qJ5+RH99TqFRq3UCDxkW0zJJu9c+OAHFY72vGlxZLEpuO+MpKo3POgqb8sYipL9KYm8XY6ofb0HsOuvY6hQNqQ==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@oxlint/binding-linux-arm-musleabihf": { + "version": "1.76.0", + "resolved": "https://registry.npmjs.org/@oxlint/binding-linux-arm-musleabihf/-/binding-linux-arm-musleabihf-1.76.0.tgz", + "integrity": "sha512-PvPCVptkgVARsucgIqFQQcSmJ6xc6GtnVB5bRBekRahTc9eObMtjHfMjy5M+C2tHt5UCMttWM9RuSk/H9NqYeg==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@oxlint/binding-linux-arm64-gnu": { + "version": "1.76.0", + "resolved": "https://registry.npmjs.org/@oxlint/binding-linux-arm64-gnu/-/binding-linux-arm64-gnu-1.76.0.tgz", + "integrity": "sha512-3KeFDx8Bu4HPAXbuHZOr/oHvN+QT+JQhMw/NYPz7Z071xLSsG27Jfh9PIQVEY7hk1I+jr43ExqRIeJ6VKk2yLw==", + "cpu": [ + "arm64" + ], + "dev": true, + "libc": [ + "glibc" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@oxlint/binding-linux-arm64-musl": { + "version": "1.76.0", + "resolved": "https://registry.npmjs.org/@oxlint/binding-linux-arm64-musl/-/binding-linux-arm64-musl-1.76.0.tgz", + "integrity": "sha512-oPFkkKTgl0K/EIg9fQ8oA3IGcI05/Mq1en04iFa41mmNPT+6KEiByVazTOZZJiHMBBrbsns1YJ2e1Scqwzesjw==", + "cpu": [ + "arm64" + ], + "dev": true, + "libc": [ + "musl" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@oxlint/binding-linux-ppc64-gnu": { + "version": "1.76.0", + "resolved": "https://registry.npmjs.org/@oxlint/binding-linux-ppc64-gnu/-/binding-linux-ppc64-gnu-1.76.0.tgz", + "integrity": "sha512-gN7yZ0eqflA5Fhf1wvHxGUltIV3FsvmB1zhNMDEK9vSHhc7E6qg9CuPeBgPZab66Tjzq6w6kHAtNEvnTHf4cyw==", + "cpu": [ + "ppc64" + ], + "dev": true, + "libc": [ + "glibc" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@oxlint/binding-linux-riscv64-gnu": { + "version": "1.76.0", + "resolved": "https://registry.npmjs.org/@oxlint/binding-linux-riscv64-gnu/-/binding-linux-riscv64-gnu-1.76.0.tgz", + "integrity": "sha512-S/HqMbn22mQrjtErUxEoS/a55u8kIeXvreIxiJu5G7Le3UecEd6SQZxrDIpuhtgaFnsY/nVra3ytP+pRljDilA==", + "cpu": [ + "riscv64" + ], + "dev": true, + "libc": [ + "glibc" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@oxlint/binding-linux-riscv64-musl": { + "version": "1.76.0", + "resolved": "https://registry.npmjs.org/@oxlint/binding-linux-riscv64-musl/-/binding-linux-riscv64-musl-1.76.0.tgz", + "integrity": "sha512-ZIga3097VJZolGZk6SrIAUokIGfRkxRlhiHDUznZptGBfwrhD7pNfD1rzEzsCwvk/1DX0A1bLz+liuNh5QKIVQ==", + "cpu": [ + "riscv64" + ], + "dev": true, + "libc": [ + "musl" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@oxlint/binding-linux-s390x-gnu": { + "version": "1.76.0", + "resolved": "https://registry.npmjs.org/@oxlint/binding-linux-s390x-gnu/-/binding-linux-s390x-gnu-1.76.0.tgz", + "integrity": "sha512-ZGiiA7pFzMJSyMWYZTVlPgbTsx+Vl8ihLGMIujPwaslUF7kIPPWAbVmAlTc+9lWDV+DCiB8Ikixu+lSHeOIIWQ==", + "cpu": [ + "s390x" + ], + "dev": true, + "libc": [ + "glibc" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@oxlint/binding-linux-x64-gnu": { + "version": "1.76.0", + "resolved": "https://registry.npmjs.org/@oxlint/binding-linux-x64-gnu/-/binding-linux-x64-gnu-1.76.0.tgz", + "integrity": "sha512-JLiy5WuvEBFTT6ErIFV35SLzi0R7Iri6MKU6dZbTxfIx8pndbbPs3Mj780nMipBFcPkti+okAPOJ9POKkHFEgg==", + "cpu": [ + "x64" + ], + "dev": true, + "libc": [ + "glibc" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@oxlint/binding-linux-x64-musl": { + "version": "1.76.0", + "resolved": "https://registry.npmjs.org/@oxlint/binding-linux-x64-musl/-/binding-linux-x64-musl-1.76.0.tgz", + "integrity": "sha512-z7lgKQtbo/I1NIe8G5NHLesxJDv0tRSUWTpXKb9Pm3E9nKFKfO4IOSDtFroKgXtOYb0jQbcdH+0wzTyMXVes+A==", + "cpu": [ + "x64" + ], + "dev": true, + "libc": [ + "musl" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@oxlint/binding-openharmony-arm64": { + "version": "1.76.0", + "resolved": "https://registry.npmjs.org/@oxlint/binding-openharmony-arm64/-/binding-openharmony-arm64-1.76.0.tgz", + "integrity": "sha512-JOjKymIpb9QcYfEhZsN6h4V9Ivd474W38cNIBRv6bg2TbIvogbMTH0Mg6YWW9TiRDqfcX+/Hyfsbo5vcSE5guQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openharmony" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@oxlint/binding-win32-arm64-msvc": { + "version": "1.76.0", + "resolved": "https://registry.npmjs.org/@oxlint/binding-win32-arm64-msvc/-/binding-win32-arm64-msvc-1.76.0.tgz", + "integrity": "sha512-pqDWZiwcmByWUEm1NFUBNiT6aentCcaoMWJv0HbXEmuYermJ4sg8ppVrshubYP2MZ6SHccJJcpr6x469PuDFIw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@oxlint/binding-win32-ia32-msvc": { + "version": "1.76.0", + "resolved": "https://registry.npmjs.org/@oxlint/binding-win32-ia32-msvc/-/binding-win32-ia32-msvc-1.76.0.tgz", + "integrity": "sha512-Ba0O659kgMv6pwO3z9PdO+K3aMxQRaw9HnG+e6AtOfgwcKFvYilciQYBoUBmxfQvOCKZe1SwjMkuB542NkuDMQ==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@oxlint/binding-win32-x64-msvc": { + "version": "1.76.0", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@popperjs/core": { + "version": "2.11.8", + "license": "MIT", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/popperjs" + } + }, + "node_modules/@rolldown/binding-android-arm64": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/@rolldown/binding-android-arm64/-/binding-android-arm64-1.1.5.tgz", + "integrity": "sha512-lZg8fqIv2v7FF237bwMgzGZEJvGL79/s5knJ/i6FmsGF4XXlzccZ4jb+TrFIxtSSxFtIpdsgrPZeMk1I9AFcyQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-darwin-arm64": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/@rolldown/binding-darwin-arm64/-/binding-darwin-arm64-1.1.5.tgz", + "integrity": "sha512-51Bnx9pNiMRKSUNtBfySkNJ9vMU9Hh3I1ozDd6gyPPYzaXCfnptUcEZxXGYFn+ul2dtcMUiqGR1Yai2K10uoTw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-darwin-x64": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/@rolldown/binding-darwin-x64/-/binding-darwin-x64-1.1.5.tgz", + "integrity": "sha512-Tm+gbfC0aHu1tBA/JvKQh32S0K6YgCHkiAF4/W6xX0K0RmNuc94VeK419dJoE65R5aRxmo+noZQSWrAMF6yb6g==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-freebsd-x64": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/@rolldown/binding-freebsd-x64/-/binding-freebsd-x64-1.1.5.tgz", + "integrity": "sha512-JMzDKCCXq93YccG5gz3hvOs1oXRKAf0XYpfOS88e+wZrC8Iugj6j68867vrYZkvpDDpKn/KoKORThmchMpF6TA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-linux-arm-gnueabihf": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-arm-gnueabihf/-/binding-linux-arm-gnueabihf-1.1.5.tgz", + "integrity": "sha512-uML21j2K5TfPGutKxub+M+nLjZIrWjXQ5Grx4lCe/nimTj9B4L63zHpjXLl4y0L3mcm2htEQIb06oCG/szerNw==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-linux-arm64-gnu": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-arm64-gnu/-/binding-linux-arm64-gnu-1.1.5.tgz", + "integrity": "sha512-navSiuTMogvnQoZoM/v+l3ZWo50/NTwSHSzheABx/RCnmUPaKwq9qSo4Br2OYRs21+Fz8uFqITZM3H4opOB0/Q==", + "cpu": [ + "arm64" + ], + "dev": true, + "libc": [ + "glibc" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-linux-arm64-musl": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-arm64-musl/-/binding-linux-arm64-musl-1.1.5.tgz", + "integrity": "sha512-lAryqH7IteztmCXQXk0etKj4wBQ7Gx5S6LjKhsgp9zb8I5bsuvU/2llH1hDQcjsFeqIsovMVN339/8pUDDBXxA==", + "cpu": [ + "arm64" + ], + "dev": true, + "libc": [ + "musl" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-linux-ppc64-gnu": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-ppc64-gnu/-/binding-linux-ppc64-gnu-1.1.5.tgz", + "integrity": "sha512-fsK/sNBnxzBlL4O1JNrZakVQxPspqpED5dLtNsZS9oOKmtSpdNIzxH2kkol5HYTWJN47sE20ztMJPxfZ89qGOg==", + "cpu": [ + "ppc64" + ], + "dev": true, + "libc": [ + "glibc" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-linux-s390x-gnu": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-s390x-gnu/-/binding-linux-s390x-gnu-1.1.5.tgz", + "integrity": "sha512-gLYb4BIadlfTOYT5gO503n8zQjXflgzpD0FcyKh0Mzx3rqCZKnHoJWV9xe1KXUJ5lx2JfcSHr/mhzS0PC/McAA==", + "cpu": [ + "s390x" + ], + "dev": true, + "libc": [ + "glibc" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-linux-x64-gnu": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-x64-gnu/-/binding-linux-x64-gnu-1.1.5.tgz", + "integrity": "sha512-FjcpEKUyJygHgs1o50VYNvkt5+7Le/VEdYt0AkRpkL33MnyQfwr8l5mXwMmfmTbyMPr5vJLC+8/Gd9gXnwU1QQ==", + "cpu": [ + "x64" + ], + "dev": true, + "libc": [ + "glibc" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-linux-x64-musl": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-x64-musl/-/binding-linux-x64-musl-1.1.5.tgz", + "integrity": "sha512-Me+PfPI2TMeOQk0gYWfLQZtTktrmzbr8cDboqX83XKc7UrgAi55gF+2dUkWdxd19n55Essp2yeca+O9N5rBxHg==", + "cpu": [ + "x64" + ], + "dev": true, + "libc": [ + "musl" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-openharmony-arm64": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/@rolldown/binding-openharmony-arm64/-/binding-openharmony-arm64-1.1.5.tgz", + "integrity": "sha512-yc5WrLzXks6zCQfn9Oxr8pORKyl/pF+QjHmW/Qx3qu0oyrrNC+y2JLTU1E2rcWYAmzlnqngWXHQjy51VzW70Vw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openharmony" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-wasm32-wasi": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/@rolldown/binding-wasm32-wasi/-/binding-wasm32-wasi-1.1.5.tgz", + "integrity": "sha512-VbQGPX2b4r48TAMIM2cjgluIM1HYutm4pcTEJsle7iEP7sB1dFqtPLBVbdLAZCxy1txCcPxf4QFf4v8uvltPqA==", + "cpu": [ + "wasm32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "@emnapi/core": "1.11.1", + "@emnapi/runtime": "1.11.1", + "@napi-rs/wasm-runtime": "^1.1.6" + }, + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-win32-arm64-msvc": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/@rolldown/binding-win32-arm64-msvc/-/binding-win32-arm64-msvc-1.1.5.tgz", + "integrity": "sha512-gHv82k63z4qpV5+Q1y/12KrK0ltWBukVDI8nZcbT7Tt/ZlOIVwppazneq0F93oDxTo3IgAMEDIoQh3E2n6mVsw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-win32-x64-msvc": { + "version": "1.1.5", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/pluginutils": { + "version": "1.0.1", + "dev": true, + "license": "MIT" + }, + "node_modules/@tybys/wasm-util": { + "version": "0.10.3", + "resolved": "https://registry.npmjs.org/@tybys/wasm-util/-/wasm-util-0.10.3.tgz", + "integrity": "sha512-F3fo1MYrRJYL3zER0OUOmkutjr1Vp23m7OsSgp7nq4SP6OqX6C/56XFIPAl5bt3zaBRjmW7SGz3u/6LwFpYcOg==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "tslib": "^2.4.0" + } + }, + "node_modules/@types/node": { + "version": "24.13.3", + "dev": true, + "license": "MIT", + "dependencies": { + "undici-types": "~7.18.0" + } + }, + "node_modules/@types/parse-json": { + "version": "4.0.2", + "license": "MIT" + }, + "node_modules/@types/prop-types": { + "version": "15.7.15", + "license": "MIT" + }, + "node_modules/@types/react": { + "version": "19.2.17", + "license": "MIT", + "dependencies": { + "csstype": "^3.2.2" + } + }, + "node_modules/@types/react-dom": { + "version": "19.2.3", + "dev": true, + "license": "MIT", + "peerDependencies": { + "@types/react": "^19.2.0" + } + }, + "node_modules/@types/react-transition-group": { + "version": "4.4.12", + "license": "MIT", + "peerDependencies": { + "@types/react": "*" + } + }, + "node_modules/@vitejs/plugin-react": { + "version": "6.0.4", + "dev": true, + "license": "MIT", + "dependencies": { + "@rolldown/pluginutils": "^1.0.1" + }, + "engines": { + "node": "^20.19.0 || >=22.12.0" + }, + "peerDependencies": { + "@rolldown/plugin-babel": "^0.1.7 || ^0.2.0", + "babel-plugin-react-compiler": "^1.0.0", + "vite": "^8.0.0" + }, + "peerDependenciesMeta": { + "@rolldown/plugin-babel": { + "optional": true + }, + "babel-plugin-react-compiler": { + "optional": true + } + } + }, + "node_modules/babel-plugin-macros": { + "version": "3.1.0", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.12.5", + "cosmiconfig": "^7.0.0", + "resolve": "^1.19.0" + }, + "engines": { + "node": ">=10", + "npm": ">=6" + } + }, + "node_modules/callsites": { + "version": "3.1.0", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/clsx": { + "version": "2.1.1", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/convert-source-map": { + "version": "1.9.0", + "license": "MIT" + }, + "node_modules/cosmiconfig": { + "version": "7.1.0", + "license": "MIT", + "dependencies": { + "@types/parse-json": "^4.0.0", + "import-fresh": "^3.2.1", + "parse-json": "^5.0.0", + "path-type": "^4.0.0", + "yaml": "^1.10.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/cosmiconfig/node_modules/yaml": { + "version": "1.10.3", + "license": "ISC", + "engines": { + "node": ">= 6" + } + }, + "node_modules/csstype": { + "version": "3.2.3", + "license": "MIT" + }, + "node_modules/debug": { + "version": "4.4.3", + "license": "MIT", + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/detect-libc": { + "version": "2.1.2", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=8" + } + }, + "node_modules/dom-helpers": { + "version": "5.2.1", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.8.7", + "csstype": "^3.0.2" + } + }, + "node_modules/error-ex": { + "version": "1.3.4", + "license": "MIT", + "dependencies": { + "is-arrayish": "^0.2.1" + } + }, + "node_modules/es-errors": { + "version": "1.3.0", + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/escape-string-regexp": { + "version": "4.0.0", + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/fdir": { + "version": "6.5.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12.0.0" + }, + "peerDependencies": { + "picomatch": "^3 || ^4" + }, + "peerDependenciesMeta": { + "picomatch": { + "optional": true + } + } + }, + "node_modules/find-root": { + "version": "1.1.0", + "license": "MIT" + }, + "node_modules/fsevents": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "node_modules/function-bind": { + "version": "1.1.2", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/hasown": { + "version": "2.0.4", + "license": "MIT", + "dependencies": { + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/hoist-non-react-statics": { + "version": "3.3.2", + "license": "BSD-3-Clause", + "dependencies": { + "react-is": "^16.7.0" + } + }, + "node_modules/hoist-non-react-statics/node_modules/react-is": { + "version": "16.13.1", + "license": "MIT" + }, + "node_modules/import-fresh": { + "version": "3.3.1", + "license": "MIT", + "dependencies": { + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-arrayish": { + "version": "0.2.1", + "license": "MIT" + }, + "node_modules/is-core-module": { + "version": "2.16.2", + "license": "MIT", + "dependencies": { + "hasown": "^2.0.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/js-tokens": { + "version": "4.0.0", + "license": "MIT" + }, + "node_modules/jsesc": { + "version": "3.1.0", + "license": "MIT", + "bin": { + "jsesc": "bin/jsesc" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/json-parse-even-better-errors": { + "version": "2.3.1", + "license": "MIT" + }, + "node_modules/lightningcss": { + "version": "1.33.0", + "dev": true, + "license": "MPL-2.0", + "dependencies": { + "detect-libc": "^2.0.3" + }, + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + }, + "optionalDependencies": { + "lightningcss-android-arm64": "1.33.0", + "lightningcss-darwin-arm64": "1.33.0", + "lightningcss-darwin-x64": "1.33.0", + "lightningcss-freebsd-x64": "1.33.0", + "lightningcss-linux-arm-gnueabihf": "1.33.0", + "lightningcss-linux-arm64-gnu": "1.33.0", + "lightningcss-linux-arm64-musl": "1.33.0", + "lightningcss-linux-x64-gnu": "1.33.0", + "lightningcss-linux-x64-musl": "1.33.0", + "lightningcss-win32-arm64-msvc": "1.33.0", + "lightningcss-win32-x64-msvc": "1.33.0" + } + }, + "node_modules/lightningcss-android-arm64": { + "version": "1.33.0", + "resolved": "https://registry.npmjs.org/lightningcss-android-arm64/-/lightningcss-android-arm64-1.33.0.tgz", + "integrity": "sha512-gEpRTalKdosp4Bb8qWtc2iOgE5SeIHlpS1up9bFq2wAyYhl1UdTObYiHe98zEM9SQvSoqQZ1IQD0JNpg3Ml5pg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-darwin-arm64": { + "version": "1.33.0", + "resolved": "https://registry.npmjs.org/lightningcss-darwin-arm64/-/lightningcss-darwin-arm64-1.33.0.tgz", + "integrity": "sha512-Sciaz8eenNTKn9b3t7+xr0ipTp9YxKQY4npwQ3mrRuL0BAVHBLyZxofhaKBAVtzmtRZ/zTyo0/to4B1uWG/Djg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-darwin-x64": { + "version": "1.33.0", + "resolved": "https://registry.npmjs.org/lightningcss-darwin-x64/-/lightningcss-darwin-x64-1.33.0.tgz", + "integrity": "sha512-Z5UPAxzrjlWNNyGy6i65cJzzvgJ5D3T6wMvs+gWpY9d7qRhANrxqAp6LhxIgZhWEw18RfJTGcRxjuLIBr+m8XQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-freebsd-x64": { + "version": "1.33.0", + "resolved": "https://registry.npmjs.org/lightningcss-freebsd-x64/-/lightningcss-freebsd-x64-1.33.0.tgz", + "integrity": "sha512-QQM/Ti/hQajJwCY+RiWuCZ9sdtI/XQk7nDK5vC8kkdwixezOlDgvDx7+RT+QjK6FcFT4MpsuoBnHIo/O3StRRg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-linux-arm-gnueabihf": { + "version": "1.33.0", + "resolved": "https://registry.npmjs.org/lightningcss-linux-arm-gnueabihf/-/lightningcss-linux-arm-gnueabihf-1.33.0.tgz", + "integrity": "sha512-N7FVBe6iS24MlM6R/4RBTxGhQheZGs7tiQ9U32UtF75NzP5Q7xWPRqLBCKxlRQRk3rY1jCIPLzx7WzOhuUIRLQ==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-linux-arm64-gnu": { + "version": "1.33.0", + "resolved": "https://registry.npmjs.org/lightningcss-linux-arm64-gnu/-/lightningcss-linux-arm64-gnu-1.33.0.tgz", + "integrity": "sha512-j2v/itmy4HlNxlc6voKXYgBqNi0Ng2LShg4z7GufpEgs05P+2suBVyi9I6YHq5uoVFx9ETin3eCEhLVyXGQnKg==", + "cpu": [ + "arm64" + ], + "dev": true, + "libc": [ + "glibc" + ], + "license": "MPL-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-linux-arm64-musl": { + "version": "1.33.0", + "resolved": "https://registry.npmjs.org/lightningcss-linux-arm64-musl/-/lightningcss-linux-arm64-musl-1.33.0.tgz", + "integrity": "sha512-yiO5ROMuYQgXbC60yjZU5CYSFZGKXL0HFATXt9mHJn1+zW55oCtMI9NfcVhYLMFDL7gV7oBPon/EmMMGg2OvtQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "libc": [ + "musl" + ], + "license": "MPL-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-linux-x64-gnu": { + "version": "1.33.0", + "resolved": "https://registry.npmjs.org/lightningcss-linux-x64-gnu/-/lightningcss-linux-x64-gnu-1.33.0.tgz", + "integrity": "sha512-ar+Ju7LmcN0Jo4FpL4hpFybwNG9/3A/Br5KW2n2jyODg3MEZXaDYADdemoNS+BDNfMgKvylJLj4S5tyRActuAg==", + "cpu": [ + "x64" + ], + "dev": true, + "libc": [ + "glibc" + ], + "license": "MPL-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-linux-x64-musl": { + "version": "1.33.0", + "resolved": "https://registry.npmjs.org/lightningcss-linux-x64-musl/-/lightningcss-linux-x64-musl-1.33.0.tgz", + "integrity": "sha512-RYiYbkokw0trfKqqzfF55lginwEPrD3OJDfTuJzFs1MK6iFnDenaz1fqLLtX4ITG3OktJQXOeTaw1awrBAlZPw==", + "cpu": [ + "x64" + ], + "dev": true, + "libc": [ + "musl" + ], + "license": "MPL-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-win32-arm64-msvc": { + "version": "1.33.0", + "resolved": "https://registry.npmjs.org/lightningcss-win32-arm64-msvc/-/lightningcss-win32-arm64-msvc-1.33.0.tgz", + "integrity": "sha512-1K+MPfLSFVpphzpdbfkhlWk6wBrTObBzS2T6db10PNOZgR9GoVsAWzwNyuhUYYbTp23j+4RrncfujZ4uAzXvwA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-win32-x64-msvc": { + "version": "1.33.0", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lines-and-columns": { + "version": "1.2.4", + "license": "MIT" + }, + "node_modules/loose-envify": { + "version": "1.4.0", + "license": "MIT", + "dependencies": { + "js-tokens": "^3.0.0 || ^4.0.0" + }, + "bin": { + "loose-envify": "cli.js" + } + }, + "node_modules/ms": { + "version": "2.1.3", + "license": "MIT" + }, + "node_modules/nanoid": { + "version": "3.3.16", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "bin": { + "nanoid": "bin/nanoid.cjs" + }, + "engines": { + "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" + } + }, + "node_modules/object-assign": { + "version": "4.1.1", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/oxlint": { + "version": "1.76.0", + "dev": true, + "license": "MIT", + "bin": { + "oxlint": "bin/oxlint" + }, + "engines": { + "node": "^20.19.0 || >=22.12.0" + }, + "funding": { + "url": "https://github.com/sponsors/Boshen" + }, + "optionalDependencies": { + "@oxlint/binding-android-arm-eabi": "1.76.0", + "@oxlint/binding-android-arm64": "1.76.0", + "@oxlint/binding-darwin-arm64": "1.76.0", + "@oxlint/binding-darwin-x64": "1.76.0", + "@oxlint/binding-freebsd-x64": "1.76.0", + "@oxlint/binding-linux-arm-gnueabihf": "1.76.0", + "@oxlint/binding-linux-arm-musleabihf": "1.76.0", + "@oxlint/binding-linux-arm64-gnu": "1.76.0", + "@oxlint/binding-linux-arm64-musl": "1.76.0", + "@oxlint/binding-linux-ppc64-gnu": "1.76.0", + "@oxlint/binding-linux-riscv64-gnu": "1.76.0", + "@oxlint/binding-linux-riscv64-musl": "1.76.0", + "@oxlint/binding-linux-s390x-gnu": "1.76.0", + "@oxlint/binding-linux-x64-gnu": "1.76.0", + "@oxlint/binding-linux-x64-musl": "1.76.0", + "@oxlint/binding-openharmony-arm64": "1.76.0", + "@oxlint/binding-win32-arm64-msvc": "1.76.0", + "@oxlint/binding-win32-ia32-msvc": "1.76.0", + "@oxlint/binding-win32-x64-msvc": "1.76.0" + }, + "peerDependencies": { + "oxlint-tsgolint": ">=7.0.2001", + "vite-plus": "*" + }, + "peerDependenciesMeta": { + "oxlint-tsgolint": { + "optional": true + }, + "vite-plus": { + "optional": true + } + } + }, + "node_modules/parent-module": { + "version": "1.0.1", + "license": "MIT", + "dependencies": { + "callsites": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/parse-json": { + "version": "5.2.0", + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.0.0", + "error-ex": "^1.3.1", + "json-parse-even-better-errors": "^2.3.0", + "lines-and-columns": "^1.1.6" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/path-parse": { + "version": "1.0.7", + "license": "MIT" + }, + "node_modules/path-type": { + "version": "4.0.0", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/picocolors": { + "version": "1.1.1", + "license": "ISC" + }, + "node_modules/picomatch": { + "version": "4.0.5", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/postcss": { + "version": "8.5.24", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/postcss" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "nanoid": "^3.3.16", + "picocolors": "^1.1.1", + "source-map-js": "^1.2.1" + }, + "engines": { + "node": "^10 || ^12 || >=14" + } + }, + "node_modules/prop-types": { + "version": "15.8.1", + "license": "MIT", + "dependencies": { + "loose-envify": "^1.4.0", + "object-assign": "^4.1.1", + "react-is": "^16.13.1" + } + }, + "node_modules/prop-types/node_modules/react-is": { + "version": "16.13.1", + "license": "MIT" + }, + "node_modules/react": { + "version": "19.2.8", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/react-dom": { + "version": "19.2.8", + "license": "MIT", + "dependencies": { + "scheduler": "^0.27.0" + }, + "peerDependencies": { + "react": "^19.2.8" + } + }, + "node_modules/react-is": { + "version": "19.2.8", + "license": "MIT" + }, + "node_modules/react-transition-group": { + "version": "4.4.5", + "license": "BSD-3-Clause", + "dependencies": { + "@babel/runtime": "^7.5.5", + "dom-helpers": "^5.0.1", + "loose-envify": "^1.4.0", + "prop-types": "^15.6.2" + }, + "peerDependencies": { + "react": ">=16.6.0", + "react-dom": ">=16.6.0" + } + }, + "node_modules/resolve": { + "version": "1.22.12", + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "is-core-module": "^2.16.1", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + }, + "bin": { + "resolve": "bin/resolve" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/resolve-from": { + "version": "4.0.0", + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/rolldown": { + "version": "1.1.5", + "dev": true, + "license": "MIT", + "dependencies": { + "@oxc-project/types": "=0.139.0", + "@rolldown/pluginutils": "^1.0.0" + }, + "bin": { + "rolldown": "bin/cli.mjs" + }, + "engines": { + "node": "^20.19.0 || >=22.12.0" + }, + "optionalDependencies": { + "@rolldown/binding-android-arm64": "1.1.5", + "@rolldown/binding-darwin-arm64": "1.1.5", + "@rolldown/binding-darwin-x64": "1.1.5", + "@rolldown/binding-freebsd-x64": "1.1.5", + "@rolldown/binding-linux-arm-gnueabihf": "1.1.5", + "@rolldown/binding-linux-arm64-gnu": "1.1.5", + "@rolldown/binding-linux-arm64-musl": "1.1.5", + "@rolldown/binding-linux-ppc64-gnu": "1.1.5", + "@rolldown/binding-linux-s390x-gnu": "1.1.5", + "@rolldown/binding-linux-x64-gnu": "1.1.5", + "@rolldown/binding-linux-x64-musl": "1.1.5", + "@rolldown/binding-openharmony-arm64": "1.1.5", + "@rolldown/binding-wasm32-wasi": "1.1.5", + "@rolldown/binding-win32-arm64-msvc": "1.1.5", + "@rolldown/binding-win32-x64-msvc": "1.1.5" + } + }, + "node_modules/scheduler": { + "version": "0.27.0", + "license": "MIT" + }, + "node_modules/source-map": { + "version": "0.5.7", + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/source-map-js": { + "version": "1.2.1", + "dev": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/stylis": { + "version": "4.2.0", + "license": "MIT" + }, + "node_modules/supports-preserve-symlinks-flag": { + "version": "1.0.0", + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/tinyglobby": { + "version": "0.2.17", + "dev": true, + "license": "MIT", + "dependencies": { + "fdir": "^6.5.0", + "picomatch": "^4.0.4" + }, + "engines": { + "node": ">=12.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/SuperchupuDev" + } + }, + "node_modules/tslib": { + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", + "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", + "dev": true, + "license": "0BSD", + "optional": true + }, + "node_modules/typescript": { + "version": "6.0.3", + "dev": true, + "license": "Apache-2.0", + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=14.17" + } + }, + "node_modules/undici-types": { + "version": "7.18.2", + "dev": true, + "license": "MIT" + }, + "node_modules/vite": { + "version": "8.1.5", + "dev": true, + "license": "MIT", + "dependencies": { + "lightningcss": "^1.32.0", + "picomatch": "^4.0.5", + "postcss": "^8.5.17", + "rolldown": "~1.1.5", + "tinyglobby": "^0.2.17" + }, + "bin": { + "vite": "bin/vite.js" + }, + "engines": { + "node": "^20.19.0 || >=22.12.0" + }, + "funding": { + "url": "https://github.com/vitejs/vite?sponsor=1" + }, + "optionalDependencies": { + "fsevents": "~2.3.3" + }, + "peerDependencies": { + "@types/node": "^20.19.0 || >=22.12.0", + "@vitejs/devtools": "^0.3.0", + "esbuild": "^0.27.0 || ^0.28.0", + "jiti": ">=1.21.0", + "less": "^4.0.0", + "sass": "^1.70.0", + "sass-embedded": "^1.70.0", + "stylus": ">=0.54.8", + "sugarss": "^5.0.0", + "terser": "^5.16.0", + "tsx": "^4.8.1", + "yaml": "^2.4.2" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + }, + "@vitejs/devtools": { + "optional": true + }, + "esbuild": { + "optional": true + }, + "jiti": { + "optional": true + }, + "less": { + "optional": true + }, + "sass": { + "optional": true + }, + "sass-embedded": { + "optional": true + }, + "stylus": { + "optional": true + }, + "sugarss": { + "optional": true + }, + "terser": { + "optional": true + }, + "tsx": { + "optional": true + }, + "yaml": { + "optional": true + } + } + } + } +} diff --git a/package.json b/package.json new file mode 100644 index 0000000..bd022e6 --- /dev/null +++ b/package.json @@ -0,0 +1,30 @@ +{ + "name": "restroai", + "private": true, + "version": "0.0.0", + "type": "module", + "packageManager": "yarn@1.22.22", + "scripts": { + "dev": "vite", + "build": "tsc -b && vite build", + "lint": "oxlint", + "preview": "vite preview" + }, + "dependencies": { + "@emotion/react": "^11.14.0", + "@emotion/styled": "^11.14.1", + "@mui/icons-material": "^9.2.0", + "@mui/material": "^9.2.0", + "react": "^19.2.7", + "react-dom": "^19.2.7" + }, + "devDependencies": { + "@types/node": "^24.13.2", + "@types/react": "^19.2.17", + "@types/react-dom": "^19.2.3", + "@vitejs/plugin-react": "^6.0.3", + "oxlint": "^1.71.0", + "typescript": "~6.0.2", + "vite": "^8.1.1" + } +} diff --git a/public/favicon.svg b/public/favicon.svg new file mode 100644 index 0000000..6893eb1 --- /dev/null +++ b/public/favicon.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/public/icons.svg b/public/icons.svg new file mode 100644 index 0000000..e952219 --- /dev/null +++ b/public/icons.svg @@ -0,0 +1,24 @@ + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/App.css b/src/App.css new file mode 100644 index 0000000..f90339d --- /dev/null +++ b/src/App.css @@ -0,0 +1,184 @@ +.counter { + font-size: 16px; + padding: 5px 10px; + border-radius: 5px; + color: var(--accent); + background: var(--accent-bg); + border: 2px solid transparent; + transition: border-color 0.3s; + margin-bottom: 24px; + + &:hover { + border-color: var(--accent-border); + } + &:focus-visible { + outline: 2px solid var(--accent); + outline-offset: 2px; + } +} + +.hero { + position: relative; + + .base, + .framework, + .vite { + inset-inline: 0; + margin: 0 auto; + } + + .base { + width: 170px; + position: relative; + z-index: 0; + } + + .framework, + .vite { + position: absolute; + } + + .framework { + z-index: 1; + top: 34px; + height: 28px; + transform: perspective(2000px) rotateZ(300deg) rotateX(44deg) rotateY(39deg) + scale(1.4); + } + + .vite { + z-index: 0; + top: 107px; + height: 26px; + width: auto; + transform: perspective(2000px) rotateZ(300deg) rotateX(40deg) rotateY(39deg) + scale(0.8); + } +} + +#center { + display: flex; + flex-direction: column; + gap: 25px; + place-content: center; + place-items: center; + flex-grow: 1; + + @media (max-width: 1024px) { + padding: 32px 20px 24px; + gap: 18px; + } +} + +#next-steps { + display: flex; + border-top: 1px solid var(--border); + text-align: left; + + & > div { + flex: 1 1 0; + padding: 32px; + @media (max-width: 1024px) { + padding: 24px 20px; + } + } + + .icon { + margin-bottom: 16px; + width: 22px; + height: 22px; + } + + @media (max-width: 1024px) { + flex-direction: column; + text-align: center; + } +} + +#docs { + border-right: 1px solid var(--border); + + @media (max-width: 1024px) { + border-right: none; + border-bottom: 1px solid var(--border); + } +} + +#next-steps ul { + list-style: none; + padding: 0; + display: flex; + gap: 8px; + margin: 32px 0 0; + + .logo { + height: 18px; + } + + a { + color: var(--text-h); + font-size: 16px; + border-radius: 6px; + background: var(--social-bg); + display: flex; + padding: 6px 12px; + align-items: center; + gap: 8px; + text-decoration: none; + transition: box-shadow 0.3s; + + &:hover { + box-shadow: var(--shadow); + } + .button-icon { + height: 18px; + width: 18px; + } + } + + @media (max-width: 1024px) { + margin-top: 20px; + flex-wrap: wrap; + justify-content: center; + + li { + flex: 1 1 calc(50% - 8px); + } + + a { + width: 100%; + justify-content: center; + box-sizing: border-box; + } + } +} + +#spacer { + height: 88px; + border-top: 1px solid var(--border); + @media (max-width: 1024px) { + height: 48px; + } +} + +.ticks { + position: relative; + width: 100%; + + &::before, + &::after { + content: ''; + position: absolute; + top: -4.5px; + border: 5px solid transparent; + } + + &::before { + left: 0; + border-left-color: var(--border); + } + &::after { + right: 0; + border-right-color: var(--border); + } +} diff --git a/src/App.tsx b/src/App.tsx new file mode 100644 index 0000000..f48e0af --- /dev/null +++ b/src/App.tsx @@ -0,0 +1,333 @@ +import React, { useState, useEffect } from 'react'; +import { ThemeProvider, CssBaseline, Box, Alert } from '@mui/material'; +import { theme } from './theme/theme'; +import { TableLandingView } from './components/customer/TableLandingView'; +import { MenuBrowseView } from './components/customer/MenuBrowseView'; +import { CustomizationModal } from './components/customer/CustomizationModal'; +import { CartReviewView } from './components/customer/CartReviewView'; +import { OrderStatusView } from './components/customer/OrderStatusView'; +import { BillPaymentView } from './components/customer/BillPaymentView'; +import { VoiceAssistantModal } from './components/customer/VoiceAssistantModal'; +import { StaffLoginModal } from './components/admin/StaffLoginModal'; +import { AdminDesktopShell } from './components/admin/AdminDesktopShell'; +import type { MenuItem } from './data/menuData'; +import type { KDSOrder, OrderStatus } from './types'; +import { api, getBackendMenuId, getFrontendMenuItem, RestroWebSocket, subscribeToWsEvents, isDemoMode, setDemoModeChangeCallback } from './services/api'; + +type CustomerView = 'landing' | 'menu' | 'cart' | 'status' | 'bill' | 'voice'; + +const getTableNumFromUrl = (): number => { + const params = new URLSearchParams(window.location.search); + const tableParam = params.get('table'); + if (tableParam) { + const parsed = parseInt(tableParam); + if (!isNaN(parsed)) return parsed; + } + + const path = window.location.pathname; + const match = path.match(/\/scan\/(\d+)/); + if (match) { + return parseInt(match[1]); + } + + return 12; +}; + +export const App: React.FC = () => { + const [appMode, setAppMode] = useState<'customer' | 'staff'>('customer'); + const [customerView, setCustomerView] = useState('landing'); + const [staffRole, setStaffRole] = useState<'kitchen' | 'manager'>('kitchen'); + const [staffLoginOpen, setStaffLoginOpen] = useState(false); + const [voiceModalOpen, setVoiceModalOpen] = useState(false); + const [demoActive, setDemoActive] = useState(isDemoMode); + + const [cart, setCart] = useState<{ [itemId: string]: number }>({}); + const [customizingItem, setCustomizingItem] = useState(null); + const [orders, setOrders] = useState([]); + + // Monitor demo mode status + useEffect(() => { + setDemoActive(isDemoMode); + setDemoModeChangeCallback((demo) => { + setDemoActive(demo); + }); + }, []); + + // Fetch KDS board when staff logged in + const loadKDS = async () => { + try { + // Backend returns KdsBoardResponse: { restaurant_id, orders: KdsBoardOrder[] } + const data = await api.getKDSBoard(1); // 1 = restaurant ID + const ordersArray = Array.isArray(data) ? data : (data?.orders || []); + + // Map API Order model to KDSOrder type if format differs + const mappedOrders: KDSOrder[] = ordersArray.map((ord: any) => { + // Map KDS status to Order status + let overallStatus: OrderStatus = 'pending'; + if (ord.status === 'served') overallStatus = 'served'; + else if (ord.status === 'ready') overallStatus = 'ready'; + else if (ord.status === 'in_preparation' || ord.status === 'preparing') overallStatus = 'preparing'; + + return { + id: String(ord.id || ord.order_id), + ticketNumber: ord.ticketNumber || String(ord.id || ord.order_id).substring(0, 4), + tableNumber: ord.tableNumber || (ord.table_number ? String(ord.table_number) : 'Takeaway'), + orderType: ord.orderType || (ord.channel === 'touch' ? 'Dine-In' : 'Dine-In'), + status: overallStatus, + createdAt: ord.createdAt || ord.placed_at || new Date().toISOString(), + timeElapsedMinutes: ord.timeElapsedMinutes || 0, + priority: ord.priority || 'normal', + serverName: ord.serverName || 'System', + totalAmount: ord.totalAmount || Number(ord.subtotal || 0), + items: ord.items?.map((it: any) => { + const original = getFrontendMenuItem(it.menu_item_id); + return { + id: String(it.id), + name: it.name || original?.name || `Dish ${it.menu_item_id}`, + quantity: it.quantity, + price: it.price || (it.unit_price ? Number(it.unit_price) : (original?.price || 150)), + completed: it.kds_status === 'ready' || it.kds_status === 'served', + dietary: 'veg' + }; + }) || [] + }; + }); + + setOrders(mappedOrders); + } catch (err) { + console.error('Failed to reload KDS board', err); + } + }; + + useEffect(() => { + if (appMode === 'staff') { + loadKDS(); + + // Setup WebSocket connection + const ws = new RestroWebSocket('kds', '1'); + ws.connect(); + + // Subscribe to updates + const unsubscribe = subscribeToWsEvents((event) => { + if (event.type === 'kds.item_updated') { + loadKDS(); + } + }); + + return () => { + ws.close(); + unsubscribe(); + }; + } + }, [appMode]); + + const handleUpdateCart = (itemId: string, quantity: number) => { + setCart((prev) => { + const copy = { ...prev }; + if (quantity <= 0) { + delete copy[itemId]; + } else { + copy[itemId] = quantity; + } + return copy; + }); + }; + + const handleCustomizationConfirm = (item: MenuItem, quantity: number, _notes: string) => { + handleUpdateCart(item.id, (cart[item.id] || 0) + quantity); + }; + + const handleStartOrdering = async (language: string) => { + try { + const tableId = getTableNumFromUrl(); + await api.startSession(tableId, language === 'english' ? 'en' : 'hi'); + setCustomerView('menu'); + } catch (err) { + console.warn('Could not initialize session, entering offline menu browse', err); + setCustomerView('menu'); + } + }; + + const handlePlaceOrder = async (_orderNotes: string) => { + try { + const items = Object.entries(cart).map(([id, qty]) => ({ + menu_item_id: getBackendMenuId(id), + quantity: qty, + customization_notes: [] + })); + + await api.placeOrder(items); + setCart({}); + setCustomerView('status'); + } catch (err) { + alert('Failed to place order: ' + err); + } + }; + + const handleStatusChange = async (orderId: string, newStatus: OrderStatus) => { + try { + const statusMap: Record = { + pending: 'queued', + preparing: 'in_prep', + ready: 'ready', + served: 'served' + }; + const kdsStatus = statusMap[newStatus]; + + const order = orders.find((o) => o.id === orderId); + if (order) { + for (const item of order.items) { + await api.updateOrderItemStatus(item.id, kdsStatus); + } + } + loadKDS(); + } catch (err) { + console.error('Failed to change status', err); + } + }; + + const handleToggleItem = async (orderId: string, itemId: string) => { + try { + const order = orders.find((o) => o.id === orderId); + const item = order?.items.find((i) => i.id === itemId); + if (item) { + const nextStatus = item.completed ? 'in_prep' : 'ready'; + await api.updateOrderItemStatus(itemId, nextStatus); + loadKDS(); + } + } catch (err) { + console.error('Failed to toggle item', err); + } + }; + + const handleAddSampleOrder = async () => { + // Add a sample order via API or locally + try { + const items = [ + { menu_item_id: 9, quantity: 2 }, // Butter chicken + { menu_item_id: 11, quantity: 4 } // Garlic naan + ]; + await api.placeOrder(items); + loadKDS(); + } catch (e) { + console.error('Failed to add sample order', e); + } + }; + + const handleAddOrderFromVoice = async (_transcript: string) => { + try { + const items = [ + { menu_item_id: 9, quantity: 2, customization_notes: ['Via Voice assistant'] }, + { menu_item_id: 11, quantity: 3 } + ]; + await api.placeOrder(items); + loadKDS(); + } catch (e) { + console.error('Failed to place voice order', e); + } + }; + + const handleStaffLoginSuccess = (role: 'kitchen' | 'manager') => { + setStaffRole(role); + setAppMode('staff'); + }; + + return ( + + + + {demoActive && ( + + Running in Demo Mode (Mock Backend). Start restroai-backend locally to connect to live DB. + + )} + + {appMode === 'staff' ? ( + setAppMode('customer')} + /> + ) : ( + + {customerView === 'landing' && ( + setStaffLoginOpen(true)} + onOpenVoice={() => setVoiceModalOpen(true)} + /> + )} + + {customerView === 'menu' && ( + setCustomizingItem(item)} + onOpenVoice={() => setVoiceModalOpen(true)} + onNavigate={(v) => setCustomerView(v as CustomerView)} + /> + )} + + {customerView === 'cart' && ( + setCustomerView(v as CustomerView)} + /> + )} + + {customerView === 'status' && ( + setCustomerView(v as CustomerView)} /> + )} + + {customerView === 'bill' && ( + setCustomerView(v as CustomerView)} /> + )} + + {/* Item Customization Dialog */} + setCustomizingItem(null)} + onConfirm={handleCustomizationConfirm} + /> + + {/* AI Voice Assistant Modal (bottom sheet) */} + setVoiceModalOpen(false)} + onAddToCart={handleUpdateCart} + /> + + )} + + {/* Staff Login Modal */} + setStaffLoginOpen(false)} + onLoginSuccess={handleStaffLoginSuccess} + /> + + ); +}; + +export default App; diff --git a/src/assets/hero.png b/src/assets/hero.png new file mode 100644 index 0000000..02251f4 Binary files /dev/null and b/src/assets/hero.png differ diff --git a/src/assets/react.svg b/src/assets/react.svg new file mode 100644 index 0000000..6c87de9 --- /dev/null +++ b/src/assets/react.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/vite.svg b/src/assets/vite.svg new file mode 100644 index 0000000..5101b67 --- /dev/null +++ b/src/assets/vite.svg @@ -0,0 +1 @@ +Vite diff --git a/src/components/admin/AdminDesktopShell.tsx b/src/components/admin/AdminDesktopShell.tsx new file mode 100644 index 0000000..1534c51 --- /dev/null +++ b/src/components/admin/AdminDesktopShell.tsx @@ -0,0 +1,284 @@ +import React, { useState } from 'react'; +import { + Box, + Drawer, + List, + ListItem, + ListItemButton, + ListItemIcon, + ListItemText, + Typography, + AppBar, + Toolbar, + Chip, + Button, + Avatar, + Divider, +} from '@mui/material'; +import SoupKitchenIcon from '@mui/icons-material/SoupKitchen'; +import BarChartIcon from '@mui/icons-material/BarChart'; +import RecordVoiceOverIcon from '@mui/icons-material/RecordVoiceOver'; +import LogoutIcon from '@mui/icons-material/Logout'; +import LocalDiningIcon from '@mui/icons-material/LocalDining'; +import AccountCircleIcon from '@mui/icons-material/AccountCircle'; +import TableBarIcon from '@mui/icons-material/TableBar'; +import ReceiptIcon from '@mui/icons-material/Receipt'; +import BookOnlineIcon from '@mui/icons-material/BookOnline'; +import InventoryIcon from '@mui/icons-material/Inventory'; +import LocalShippingIcon from '@mui/icons-material/LocalShipping'; +import BadgeIcon from '@mui/icons-material/Badge'; +import StarHalfIcon from '@mui/icons-material/StarHalf'; + +import { KDSKanban } from '../kds/KDSKanban'; +import { AnalyticsDashboard } from '../analytics/AnalyticsDashboard'; +import { VoiceOrderingView } from '../voice/VoiceOrderingView'; +import { TableManagementView } from './TableManagementView'; +import { BillingManagerView } from './BillingManagerView'; +import { ReservationsView } from './ReservationsView'; +import { InventoryView } from './InventoryView'; +import { SuppliersView } from './SuppliersView'; +import { StaffShiftsView } from './StaffShiftsView'; +import { FeedbackInboxView } from './FeedbackInboxView'; + +import type { KDSOrder, OrderStatus } from '../../types'; + +interface AdminDesktopShellProps { + role: 'kitchen' | 'manager'; + orders: KDSOrder[]; + onStatusChange: (id: string, newStatus: OrderStatus) => void; + onToggleItem: (orderId: string, itemId: string) => void; + onAddSampleOrder: () => void; + onAddOrderFromVoice: (transcript: string) => void; + onLogout: () => void; +} + +type TabType = + | 'kds' + | 'tables' + | 'billing' + | 'reservations' + | 'inventory' + | 'suppliers' + | 'staff' + | 'feedback' + | 'analytics' + | 'voice'; + +export const AdminDesktopShell: React.FC = ({ + role, + orders, + onStatusChange, + onToggleItem, + onAddSampleOrder, + onAddOrderFromVoice, + onLogout, +}) => { + const [activeTab, setActiveTab] = useState( + role === 'manager' ? 'analytics' : 'kds' + ); + + const pendingCount = orders.filter((o) => o.status === 'pending').length; + const drawerWidth = 260; + + // Sidebar list configurations + const menuItems = [ + { id: 'kds', label: 'KDS Kanban Board', icon: , roles: ['kitchen', 'manager'] }, + { id: 'tables', label: 'Tables & Floor', icon: , roles: ['manager'] }, + { id: 'billing', label: 'Billing Desk', icon: , roles: ['manager'] }, + { id: 'reservations', label: 'Reservations', icon: , roles: ['manager'] }, + { id: 'inventory', label: 'Kitchen Stock & Recipes', icon: , roles: ['kitchen', 'manager'] }, + { id: 'suppliers', label: 'Suppliers & POs', icon: , roles: ['manager'] }, + { id: 'staff', label: 'Staff & Shifts', icon: , roles: ['manager'] }, + { id: 'feedback', label: 'Customer Feedback', icon: , roles: ['manager'] }, + { id: 'analytics', label: 'Business Intelligence', icon: , roles: ['manager'] }, + { id: 'voice', label: 'AI Voice Terminal', icon: , roles: ['kitchen', 'manager'] }, + ]; + + const filteredMenuItems = menuItems.filter((item) => item.roles.includes(role)); + + const getPageTitle = () => { + switch (activeTab) { + case 'kds': return 'Kitchen Display System (KDS) Live Kanban'; + case 'tables': return 'Table Floor & Session Planner'; + case 'billing': return 'Cashier Billing Desk & Payments'; + case 'reservations': return 'Diner Reservations Book'; + case 'inventory': return 'Kitchen Raw Stocks & Recipes Linking'; + case 'suppliers': return 'Merchant Suppliers & Purchase Orders'; + case 'staff': return 'Employee Attendance & Shift Roster'; + case 'feedback': return 'Customer Feedback Rating Reviews'; + case 'analytics': return 'Executive Business Analytics & Trends'; + case 'voice': return 'Staff AI Voice Assistant Terminal'; + default: return 'Management Portal'; + } + }; + + return ( + + {/* Desktop Sidebar Navigation */} + + + + + + + + RestroAI + + + DESKTOP STAFF PORTAL + + + + + + + + {role === 'manager' ? 'M' : 'K'}} + label={role === 'manager' ? 'Role: Restaurant Manager' : 'Role: Kitchen Head Chef'} + sx={{ + bgcolor: 'rgba(255,255,255,0.08)', + color: '#ffffff', + fontWeight: 700, + width: '100%', + justifyContent: 'flex-start', + }} + /> + + + + {filteredMenuItems.map((item) => ( + + setActiveTab(item.id as TabType)} + sx={{ + borderRadius: '8px', + '&.Mui-selected': { bgcolor: '#ac2d00', color: '#ffffff' }, + '&.Mui-selected:hover': { bgcolor: '#872100' }, + }} + > + + {item.icon} + + + {item.label} + + } + /> + {item.id === 'kds' && pendingCount > 0 && ( + + )} + + + ))} + + + + + + + + {/* Main Content Area */} + + + + + {getPageTitle()} + + + + + + + + Logged in as {role === 'manager' ? 'Admin Manager' : 'Chef Rahul S.'} + + + + + + + + {activeTab === 'kds' && ( + + )} + + {activeTab === 'tables' && } + + {activeTab === 'billing' && } + + {activeTab === 'reservations' && } + + {activeTab === 'inventory' && } + + {activeTab === 'suppliers' && } + + {activeTab === 'staff' && } + + {activeTab === 'feedback' && } + + {activeTab === 'analytics' && } + + {activeTab === 'voice' && ( + + )} + + + + ); +}; + diff --git a/src/components/admin/BillingManagerView.tsx b/src/components/admin/BillingManagerView.tsx new file mode 100644 index 0000000..a13c12b --- /dev/null +++ b/src/components/admin/BillingManagerView.tsx @@ -0,0 +1,310 @@ +import React, { useState, useEffect } from 'react'; +import { + Box, + Typography, + Grid, + Card, + CardContent, + Button, + Dialog, + DialogTitle, + DialogContent, + DialogActions, + FormControl, + InputLabel, + Select, + MenuItem, + TextField, + Alert, + Chip, + Table, + TableBody, + TableCell, + TableContainer, + TableHead, + TableRow, + Paper, +} from '@mui/material'; +import ReceiptIcon from '@mui/icons-material/Receipt'; +import PaymentIcon from '@mui/icons-material/Payment'; +import LocalOfferIcon from '@mui/icons-material/LocalOffer'; +import RefreshIcon from '@mui/icons-material/Refresh'; +import { api } from '../../services/api'; + +export const BillingManagerView: React.FC = () => { + const [orders, setOrders] = useState([]); + const [bills, setBills] = useState([]); + const [error, setError] = useState(null); + + // Dialog states + const [paymentOpen, setPaymentOpen] = useState(false); + const [activeBill, setActiveBill] = useState(null); + const [paymentMethod, setPaymentMethod] = useState('cash'); + const [paymentAmount, setPaymentAmount] = useState(''); + + const loadBillingData = async () => { + setError(null); + try { + // Load KDS board to find active orders + const ordersData = await api.getKDSBoard(1); + const ordersArray = Array.isArray(ordersData) ? ordersData : (ordersData?.orders || []); + setOrders(ordersArray); + } catch (err: any) { + setError(err.message || 'Failed to load billing status'); + } + }; + + useEffect(() => { + loadBillingData(); + }, []); + + const handleGenerateBill = async (orderId: string) => { + setError(null); + try { + const bill = await api.generateBill(orderId); + setBills((prev) => { + // Avoid duplicate entries + if (prev.some((b) => b.id === bill.id)) return prev; + return [bill, ...prev]; + }); + alert(`Bill successfully generated! Total: ₹${bill.grandTotal}`); + } catch (err: any) { + setError(err.message || 'Failed to generate bill'); + } + }; + + const handleRecordPayment = async () => { + if (!activeBill) return; + setError(null); + try { + const amount = parseFloat(paymentAmount) || activeBill.grandTotal; + await api.recordPayment(activeBill.id, paymentMethod, amount); + + // Update local bills list status + setBills((prev) => + prev.map((b) => (b.id === activeBill.id ? { ...b, status: 'paid', paymentMethod } : b)) + ); + + setPaymentOpen(false); + setActiveBill(null); + alert('Payment recorded successfully!'); + } catch (err: any) { + setError(err.message || 'Failed to record payment'); + } + }; + + const handleIssueCreditNote = async (billId: string) => { + if (!window.confirm('Are you sure you want to issue a Credit Note? This will create a reversal entry.')) { + return; + } + setError(null); + try { + await api.issueCreditNote(billId); + setBills((prev) => + prev.map((b) => (b.id === billId ? { ...b, status: 'void/credited' } : b)) + ); + alert('Credit Note / Reversal registered successfully.'); + } catch (err: any) { + setError(err.message || 'Failed to issue credit note'); + } + }; + + return ( + + + + + Cashier & Billing Desk + + + Process guest checks, record cash/digital payments, and manage invoices. + + + + + + {error && {error}} + + + {/* Left pane: Active Tables / Active Orders to check out */} + + + Active Diner Orders (Generate Bills) + + {orders.length === 0 ? ( + + + No active orders at tables right now. + + + ) : ( + + {orders.map((order) => ( + + + + + + Table {order.tableNumber || 'Takeaway'} + + + + + Items: {order.items?.map((it: any) => `${it.quantity}x ${it.name}`).join(', ')} + + + Subtotal: ₹{order.totalAmount} + + + + + + + + ))} + + )} + + + {/* Right pane: Bills Ledger */} + + + Checkout Bills Ledger + + {bills.length === 0 ? ( + + + No bills generated in this session yet. + + + ) : ( + + + + + Bill ID + Total + Status + Actions + + + + {bills.map((bill) => ( + + {bill.id.substring(0, 12)}... + ₹{bill.grandTotal} + + + + + {bill.status === 'unpaid' && ( + + )} + {bill.status === 'paid' && ( + + )} + + + ))} + +
+
+ )} +
+
+ + {/* Pay Bill Dialog */} + setPaymentOpen(false)} maxWidth="xs" fullWidth> + Record Customer Payment + + + Provide the payment method and final received amount to close this invoice. + + + + + setPaymentAmount(e.target.value)} + fullWidth + size="small" + /> + + + Payment Method + + + + + + + + +
+ ); +}; diff --git a/src/components/admin/FeedbackInboxView.tsx b/src/components/admin/FeedbackInboxView.tsx new file mode 100644 index 0000000..5203afc --- /dev/null +++ b/src/components/admin/FeedbackInboxView.tsx @@ -0,0 +1,153 @@ +import React, { useState, useEffect } from 'react'; +import { + Box, + Typography, + Card, + CircularProgress, + Alert, + Rating, + List, + ListItem, + ListItemText, + Divider, + FormControl, + InputLabel, + Select, + MenuItem, + Button, + Grid, +} from '@mui/material'; +import StarIcon from '@mui/icons-material/Star'; +import RefreshIcon from '@mui/icons-material/Refresh'; +import { api } from '../../services/api'; + +export const FeedbackInboxView: React.FC = () => { + const [feedbackList, setFeedbackList] = useState([]); + const [minRating, setMinRating] = useState(0); + const [loading, setLoading] = useState(true); + const [error, setError] = useState(null); + + const fetchFeedback = async () => { + setLoading(true); + setError(null); + try { + const data = await api.getFeedback(minRating); + setFeedbackList(Array.isArray(data) ? data : []); + } catch (err: any) { + setError(err.message || 'Failed to fetch customer feedback'); + } finally { + setLoading(false); + } + }; + + useEffect(() => { + fetchFeedback(); + }, [minRating]); + + const averageRating = feedbackList.length > 0 + ? (feedbackList.reduce((acc, f) => acc + f.star_rating, 0) / feedbackList.length).toFixed(1) + : '0.0'; + + return ( + + + + + Customer Feedback Inbox + + + Read reviews, check service satisfaction, and aggregate dining experience scores. + + + + + Filter by Rating + + + + + + + {error && {error}} + + {loading ? ( + + ) : ( + + {/* Summary Box */} + + + + Aggregated Score + + + {averageRating} + + } + sx={{ mb: 1.5 }} + /> + + Based on {feedbackList.length} reviews + + + + + {/* Feedbacks List */} + + + {feedbackList.length === 0 ? ( + + No feedback reviews matching your filter criteria. + + ) : ( + + {feedbackList.map((fb, idx) => ( + + + + + + {fb.submitted_at ? new Date(fb.submitted_at).toLocaleString() : (fb.date || 'N/A')} + + + } + secondary={ + + {fb.comment_text || '(No comment left by guest)'} + + } + /> + + {idx < feedbackList.length - 1 && } + + ))} + + )} + + + + )} + + ); +}; diff --git a/src/components/admin/InventoryView.tsx b/src/components/admin/InventoryView.tsx new file mode 100644 index 0000000..273806e --- /dev/null +++ b/src/components/admin/InventoryView.tsx @@ -0,0 +1,439 @@ +import React, { useState, useEffect } from 'react'; +import { + Box, + Typography, + Grid, + Card, + Button, + TextField, + Dialog, + DialogTitle, + DialogContent, + DialogActions, + CircularProgress, + Alert, + Table, + TableBody, + TableCell, + TableContainer, + TableHead, + TableRow, + Paper, + IconButton, + Chip, + Select, + MenuItem, + InputLabel, + FormControl, + List, + ListItem, + ListItemText, + Divider, +} from '@mui/material'; +import DeleteIcon from '@mui/icons-material/Delete'; +import EditIcon from '@mui/icons-material/Edit'; +import AddIcon from '@mui/icons-material/Add'; +import RefreshIcon from '@mui/icons-material/Refresh'; +import SaveIcon from '@mui/icons-material/Save'; +import { api } from '../../services/api'; +import { MENU_ITEMS } from '../../data/menuData'; + +export const InventoryView: React.FC = () => { + const [ingredients, setIngredients] = useState([]); + const [loading, setLoading] = useState(true); + const [error, setError] = useState(null); + + // Ingredient Form Dialog States + const [openIngForm, setOpenIngForm] = useState(false); + const [editingIng, setEditingIng] = useState(null); + const [ingName, setIngName] = useState(''); + const [ingStock, setIngStock] = useState(0); + const [ingUnit, setIngUnit] = useState('kg'); + const [ingMinStock, setIngMinStock] = useState(2); + + // Recipe Builder States + const [selectedMenuId, setSelectedMenuId] = useState(5); // Default to item 5 + // Backend schema: { ingredient_id, quantity_required } + const [recipeIngredients, setRecipeIngredients] = useState<{ ingredient_id: number; quantity_required: number }[]>([]); + const [recipeLoading, setRecipeLoading] = useState(false); + + // Adding single ingredient to recipe + const [addIngId, setAddIngId] = useState(''); + const [addIngQty, setAddIngQty] = useState(0.1); + + const fetchIngredients = async () => { + setLoading(true); + setError(null); + try { + const data = await api.getIngredients(); + setIngredients(Array.isArray(data) ? data : []); + } catch (err: any) { + setError(err.message || 'Failed to fetch ingredients'); + } finally { + setLoading(false); + } + }; + + const fetchRecipe = async (menuId: number) => { + setRecipeLoading(true); + try { + const data = await api.getRecipe(menuId); + // Backend returns list[RecipeIngredientRead] - an array directly + setRecipeIngredients(Array.isArray(data) ? data : (data?.ingredients || [])); + } catch (err) { + console.error('Failed to load recipe', err); + } finally { + setRecipeLoading(false); + } + }; + + useEffect(() => { + fetchIngredients(); + }, []); + + useEffect(() => { + fetchRecipe(selectedMenuId); + }, [selectedMenuId]); + + const handleSaveIngredient = async () => { + setError(null); + try { + if (editingIng) { + // Edit existing — backend only allows: name, unit, reorder_threshold, unit_cost + const updated = await api.updateIngredient(editingIng.id, { + name: ingName, + reorder_threshold: ingMinStock, + }); + setIngredients((prev) => + prev.map((i) => (i.id === editingIng.id ? updated : i)) + ); + } else { + // Create new — backend schema: name, unit, current_stock, reorder_threshold, unit_cost + const created = await api.createIngredient(ingName, ingStock, ingUnit, ingMinStock); + setIngredients((prev) => [...prev, created]); + } + setOpenIngForm(false); + setEditingIng(null); + setIngName(''); + setIngStock(0); + setIngMinStock(2); + } catch (err: any) { + setError(err.message || 'Failed to save ingredient'); + } + }; + + const handleDeleteIngredient = async (id: string) => { + if (!window.confirm('Delete this ingredient?')) return; + try { + await api.deleteIngredient(id); + setIngredients((prev) => prev.filter((i) => i.id !== id)); + } catch (err: any) { + alert(err.message || 'Failed to delete ingredient'); + } + }; + + const handleSaveRecipe = async () => { + try { + await api.saveRecipe(selectedMenuId, recipeIngredients); + alert('Recipe updated successfully!'); + } catch (err: any) { + alert(err.message || 'Failed to save recipe'); + } + }; + + const handleAddRecipeIngredient = () => { + if (!addIngId || addIngQty <= 0) return; + if (recipeIngredients.some(r => r.ingredient_id === Number(addIngId))) { + alert('Ingredient already added to recipe!'); + return; + } + setRecipeIngredients(prev => [...prev, { ingredient_id: Number(addIngId), quantity_required: addIngQty }]); + setAddIngId(''); + }; + + const handleRemoveRecipeIngredient = (ingId: number) => { + setRecipeIngredients(prev => prev.filter(r => r.ingredient_id !== ingId)); + }; + + return ( + + + + + Kitchen Stock & Recipes + + + Keep track of ingredient raw stocks, identify low stock warnings, and link menu items to recipes. + + + + + + + + + {error && {error}} + + + {/* Ingredients Grid */} + + + Ingredient Stocks List + + {loading ? ( + + ) : ( + + + + + Ingredient + Stock Qty + Alert Level + Actions + + + + {ingredients.map((ing) => { + // Backend fields: current_stock, reorder_threshold + const currentStock = Number(ing.current_stock ?? ing.stock ?? 0); + const threshold = Number(ing.reorder_threshold ?? ing.minStock ?? 0); + const isLow = currentStock <= threshold; + return ( + + {ing.name} + {currentStock} {ing.unit} + + {isLow ? ( + + ) : ( + + )} + + + { + setEditingIng(ing); + setIngName(ing.name); + setIngStock(currentStock); + setIngUnit(ing.unit); + setIngMinStock(threshold); + setOpenIngForm(true); + }} + > + + + handleDeleteIngredient(ing.id)}> + + + + + ); + })} + +
+
+ )} +
+ + {/* Recipes Linker Panel */} + + + Dish Recipes Linking + + + + Select Menu Dish + + + + + Recipe Ingredients needed: + + + {recipeLoading ? ( + + ) : ( + + {recipeIngredients.length === 0 ? ( + + No ingredients linked to this dish recipe yet. Link below. + + ) : ( + + {recipeIngredients.map((item) => { + // Backend fields: ingredient_id, quantity_required + const detail = ingredients.find((i: any) => i.id === item.ingredient_id); + return ( + handleRemoveRecipeIngredient(item.ingredient_id)}> + + + } + sx={{ px: 0, py: 0.5 }} + > + + {detail ? detail.name : `Ingredient #${item.ingredient_id}`} + + } + secondary={`Required: ${item.quantity_required} ${detail ? detail.unit : 'kg'}`} + /> + + ); + })} + + )} + + + + + LINK ANOTHER STOCK COMPONENT: + + + + + + + + + setAddIngQty(parseFloat(e.target.value) || 0)} + /> + + + + + + + )} + + + + +
+ + {/* Ingredient Form Dialog */} + setOpenIngForm(false)} maxWidth="xs" fullWidth> + + {editingIng ? 'Modify Raw Ingredient Stock' : 'Add Raw Stock Ingredient'} + + + setIngName(e.target.value)} + fullWidth + size="small" + /> + + setIngStock(parseFloat(e.target.value) || 0)} + fullWidth + size="small" + /> + + + Measurement Unit + + + + setIngMinStock(parseFloat(e.target.value) || 0)} + fullWidth + size="small" + /> + + + + + + +
+ ); +}; diff --git a/src/components/admin/ReservationsView.tsx b/src/components/admin/ReservationsView.tsx new file mode 100644 index 0000000..508fba0 --- /dev/null +++ b/src/components/admin/ReservationsView.tsx @@ -0,0 +1,338 @@ +import React, { useState, useEffect } from 'react'; +import { + Box, + Typography, + Button, + TextField, + Dialog, + DialogTitle, + DialogContent, + DialogActions, + FormControl, + InputLabel, + Select, + MenuItem, + CircularProgress, + Alert, + Chip, + Table, + TableBody, + TableCell, + TableContainer, + TableHead, + TableRow, + Paper, + Snackbar, +} from '@mui/material'; +import CalendarMonthIcon from '@mui/icons-material/CalendarMonth'; +import AddIcon from '@mui/icons-material/Add'; +import RefreshIcon from '@mui/icons-material/Refresh'; +import CheckCircleIcon from '@mui/icons-material/CheckCircle'; +import { api } from '../../services/api'; + +export const ReservationsView: React.FC = () => { + const [selectedDate, setSelectedDate] = useState(new Date().toISOString().split('T')[0]); + const [reservations, setReservations] = useState([]); + const [loading, setLoading] = useState(false); + const [error, setError] = useState(null); + + // Form dialog states + const [openForm, setOpenForm] = useState(false); + const [resName, setResName] = useState(''); + const [resPhone, setResPhone] = useState(''); // Required by backend + const [resSize, setResSize] = useState(2); + const [resTable, setResTable] = useState(3); + const [resTime, setResTime] = useState('19:00'); + const [resDate, setResDate] = useState(new Date().toISOString().split('T')[0]); + + // Warning toast states + const [toastOpen, setToastOpen] = useState(false); + const [toastMessage, setToastMessage] = useState(''); + + const fetchReservations = async () => { + setLoading(true); + setError(null); + try { + const data = await api.getReservations(selectedDate); + setReservations(Array.isArray(data) ? data : []); + } catch (err: any) { + setError(err.message || 'Failed to fetch reservations'); + } finally { + setLoading(false); + } + }; + + useEffect(() => { + fetchReservations(); + }, [selectedDate]); + + const handleCreateReservation = async () => { + setError(null); + try { + // Backend schema: { table_id, customer_name, customer_phone, party_size, reservation_time (ISO datetime) } + const reservationTime = new Date(`${resDate}T${resTime}:00`).toISOString(); + const res = await api.createReservation({ + table_id: resTable, + customer_name: resName, + customer_phone: resPhone || '0000000000', + party_size: resSize, + reservation_time: reservationTime, + }); + + setOpenForm(false); + + // Backend returns { reservation, warnings: ConflictWarning[] } + if (res.warnings && res.warnings.length > 0) { + setToastMessage(`⚠️ Warning: ${res.warnings[0].message || res.warnings[0]}`); + setToastOpen(true); + } else { + setToastMessage('🎉 Reservation booked successfully!'); + setToastOpen(true); + } + + // Clear form inputs + setResName(''); + setResPhone(''); + setResSize(2); + setResTable(3); + setResTime('19:00'); + + // Refresh list + fetchReservations(); + } catch (err: any) { + setError(err.message || 'Failed to create reservation'); + } + }; + + const handleUpdateStatus = async (id: string, status: 'confirmed' | 'seated' | 'cancelled' | 'no_show') => { + try { + await api.updateReservationStatus(id, status); + setReservations((prev) => + prev.map((r) => (r.id === id ? { ...r, status } : r)) + ); + } catch (err: any) { + alert(err.message || 'Failed to update reservation status'); + } + }; + + const getStatusColor = (status: string) => { + switch (status) { + case 'confirmed': + return 'info'; + case 'seated': + return 'success'; + case 'cancelled': + return 'error'; + case 'no_show': + return 'default'; + default: + return 'default'; + } + }; + + return ( + + + + + Table Reservation Book + + + Manage advance table bookings and track check-ins. + + + + setSelectedDate(e.target.value)} + slotProps={{ + input: { + startAdornment: + } + }} + /> + + + + + + {error && {error}} + + {loading ? ( + + + + ) : ( + + + + + Diner Name + Guests + Table + Time + Status + Actions + + + + {reservations.length === 0 ? ( + + + No bookings found for {selectedDate}. + + + ) : ( + reservations.map((res) => ( + + {res.customer_name || res.name} + {res.party_size || res.size} Pax + Table {res.table_id || res.tableId} + ⏰ {res.reservation_time ? new Date(res.reservation_time).toLocaleTimeString([], { hour: '2-digit', minute: '2-digit' }) : res.time} + + + + + {res.status === 'confirmed' && ( + <> + + + + )} + {res.status === 'seated' && ( + + )} + + + )) + )} + +
+
+ )} + + {/* Booking Form Dialog */} + setOpenForm(false)} maxWidth="xs" fullWidth> + Create New Booking + + setResName(e.target.value)} + fullWidth + size="small" + /> + + setResPhone(e.target.value)} + fullWidth + size="small" + placeholder="e.g. 9876543210" + /> + + setResSize(parseInt(e.target.value) || 2)} + fullWidth + size="small" + /> + + + Assign Table + + + + setResTime(e.target.value)} + fullWidth + size="small" + /> + + setResDate(e.target.value)} + fullWidth + size="small" + /> + + + + + + + + {/* Conflicted Warning Toast */} + setToastOpen(false)} + message={toastMessage} + action={ + + } + /> +
+ ); +}; diff --git a/src/components/admin/StaffLoginModal.tsx b/src/components/admin/StaffLoginModal.tsx new file mode 100644 index 0000000..7e8b6ab --- /dev/null +++ b/src/components/admin/StaffLoginModal.tsx @@ -0,0 +1,166 @@ +import React, { useState } from 'react'; +import { + Dialog, + DialogTitle, + DialogContent, + DialogActions, + Typography, + TextField, + Button, + Box, + Alert, + Chip, + CircularProgress, +} from '@mui/material'; +import LockIcon from '@mui/icons-material/Lock'; +import BadgeIcon from '@mui/icons-material/Badge'; +import { api } from '../../services/api'; + +interface StaffLoginModalProps { + open: boolean; + onClose: () => void; + onLoginSuccess: (role: 'kitchen' | 'manager') => void; +} + +export const StaffLoginModal: React.FC = ({ + open, + onClose, + onLoginSuccess, +}) => { + const [username, setUsername] = useState(''); + const [password, setPassword] = useState(''); + const [loading, setLoading] = useState(false); + const [error, setError] = useState(''); + + const handleLogin = async (e: React.FormEvent) => { + e.preventDefault(); + if (!username || !password) { + setError('Please provide both username and password.'); + return; + } + + setLoading(true); + setError(''); + try { + await api.login(username, password); + // Determine role based on JWT claims or username + const role = username.includes('manager') ? 'manager' : 'kitchen'; + onLoginSuccess(role); + onClose(); + } catch (err: any) { + setError(err.message || 'Login failed. Please check your credentials.'); + } finally { + setLoading(false); + } + }; + + const fillCredentials = (user: string, pass: string) => { + setUsername(user); + setPassword(pass); + }; + + return ( + + + + + + + Staff & Admin Portal Login + + + Authorized Restaurant Personnel Only + + + + +
+ {error && ( + + {error} + + )} + + + + QUICK AUTOFILL DEMO LOGIN: + + + } + label="Manager Account" + clickable + onClick={() => fillCredentials('manager@test.com', 'managerpass')} + sx={{ fontWeight: 700, flex: 1 }} + /> + } + label="Chef / Waiter Account" + clickable + onClick={() => fillCredentials('waiter@test.com', 'waiterpass')} + sx={{ fontWeight: 700, flex: 1 }} + /> + + + + setUsername(e.target.value)} + sx={{ mb: 2 }} + disabled={loading} + /> + + setPassword(e.target.value)} + sx={{ mb: 2.5 }} + disabled={loading} + /> + + + +
+ + + + +
+ ); +}; diff --git a/src/components/admin/StaffShiftsView.tsx b/src/components/admin/StaffShiftsView.tsx new file mode 100644 index 0000000..668f866 --- /dev/null +++ b/src/components/admin/StaffShiftsView.tsx @@ -0,0 +1,333 @@ +import React, { useState, useEffect } from 'react'; +import { + Box, + Typography, + Grid, + Button, + TextField, + Dialog, + DialogTitle, + DialogContent, + DialogActions, + FormControl, + InputLabel, + Select, + MenuItem, + CircularProgress, + Alert, + Table, + TableBody, + TableCell, + TableContainer, + TableHead, + TableRow, + Paper, + Chip, +} from '@mui/material'; +import AddIcon from '@mui/icons-material/Add'; +import RefreshIcon from '@mui/icons-material/Refresh'; +import LogoutIcon from '@mui/icons-material/Logout'; +import LoginIcon from '@mui/icons-material/Login'; +import { api } from '../../services/api'; + +export const StaffShiftsView: React.FC = () => { + const [staff, setStaff] = useState([]); + const [shifts, setShifts] = useState([]); + const [loading, setLoading] = useState(true); + const [error, setError] = useState(null); + + // Staff Form + const [openStaffForm, setOpenStaffForm] = useState(false); + const [staffName, setStaffName] = useState(''); + const [staffEmail, setStaffEmail] = useState(''); + const [staffPassword, setStaffPassword] = useState(''); + const [staffRoleId, setStaffRoleId] = useState(2); // default waiter role_id + const [staffRole, setStaffRole] = useState('waiter'); // display only + const [roles, setRoles] = useState([]); // RoleRead[] from backend + + const loadShiftsAndStaff = async () => { + setLoading(true); + setError(null); + try { + const staffData = await api.getStaff(); + setStaff(Array.isArray(staffData) ? staffData : []); + + const shiftsData = await api.getShifts(); + setShifts(Array.isArray(shiftsData) ? shiftsData : []); + + // Load roles for the form dropdown + try { + const rolesData = await api.getRoles(); + setRoles(Array.isArray(rolesData) ? rolesData : []); + } catch { + // Roles not critical, ignore failure + } + } catch (err: any) { + setError(err.message || 'Failed to load shifts/staff data'); + } finally { + setLoading(false); + } + }; + + useEffect(() => { + loadShiftsAndStaff(); + }, []); + + const handleCreateStaff = async () => { + setError(null); + if (!staffPassword || staffPassword.length < 8) { + setError('Password must be at least 8 characters'); + return; + } + try { + // Backend schema: { full_name, email, password, role_id (int), phone? } + const roleId = roles.find(r => r.name === staffRole)?.id || staffRoleId; + const res = await api.createStaff({ + full_name: staffName, + email: staffEmail, + password: staffPassword, + role_id: roleId, + }); + setStaff(prev => [...prev, res]); + setOpenStaffForm(false); + setStaffName(''); + setStaffEmail(''); + setStaffPassword(''); + setStaffRole('waiter'); + } catch (err: any) { + setError(err.message || 'Failed to create staff member'); + } + }; + + const handleClockIn = async (shiftId: string) => { + try { + // Backend returns ShiftRead directly (not { shift }) + const res = await api.clockIn(shiftId); + setShifts(prev => prev.map(s => s.id === shiftId ? (res.shift || res) : s)); + alert('Clock-in registered successfully!'); + } catch (err: any) { + alert(err.message || 'Failed to clock in'); + } + }; + + const handleClockOut = async (shiftId: string) => { + try { + // Backend returns ShiftRead directly (not { shift }) + const res = await api.clockOut(shiftId); + setShifts(prev => prev.map(s => s.id === shiftId ? (res.shift || res) : s)); + alert('Clock-out registered successfully!'); + } catch (err: any) { + alert(err.message || 'Failed to clock out'); + } + }; + + return ( + + + + + Staff Directory & Shifts + + + Manage employee rosters, register work shifts, and track daily clock-in/clock-out attendance. + + + + + + + + + {error && {error}} + + {loading ? ( + + ) : ( + + {/* Left panel: Staff Roster */} + + + Employees Directory + + + + + + Name + Role + + + + {staff.map((member) => ( + + + {member.full_name || member.name} + + {member.email} + + + + + + + ))} + +
+
+
+ + {/* Right panel: Shifts List */} + + + Attendance Roster + + {shifts.length === 0 ? ( + + + No shifts scheduled or logged for today. + + + ) : ( + + + + + Staff Name + Clock In + Clock Out + Status + Actions + + + + {shifts.map((shift) => ( + + + {shift.staffName || `Staff #${shift.staff_id || shift.id}`} + + {shift.shift_start ? new Date(shift.shift_start).toLocaleDateString() : shift.date} + + + + {shift.attendance?.time_in ? new Date(shift.attendance.time_in).toLocaleTimeString([], {hour:'2-digit',minute:'2-digit'}) : (shift.clockIn || '---')} + + + {shift.attendance?.time_out ? new Date(shift.attendance.time_out).toLocaleTimeString([], {hour:'2-digit',minute:'2-digit'}) : (shift.clockOut || '---')} + + + + + + {(!shift.attendance?.time_in && !shift.clockIn) && ( + + )} + {(shift.attendance?.time_in || shift.clockIn) && (!shift.attendance?.time_out && !shift.clockOut) && ( + + )} + + + ))} + +
+
+ )} +
+
+ )} + + {/* Staff Dialog */} + setOpenStaffForm(false)} maxWidth="xs" fullWidth> + Add Employee + + setStaffName(e.target.value)} + fullWidth + size="small" + /> + setStaffEmail(e.target.value)} + fullWidth + size="small" + /> + setStaffPassword(e.target.value)} + fullWidth + size="small" + helperText="Will be used for staff portal login" + /> + + Portal Role + + + + + + + + +
+ ); +}; diff --git a/src/components/admin/SuppliersView.tsx b/src/components/admin/SuppliersView.tsx new file mode 100644 index 0000000..b37e114 --- /dev/null +++ b/src/components/admin/SuppliersView.tsx @@ -0,0 +1,513 @@ +import React, { useState, useEffect } from 'react'; +import { + Box, + Typography, + Grid, + Card, + CardContent, + Button, + TextField, + Dialog, + DialogTitle, + DialogContent, + DialogActions, + FormControl, + InputLabel, + Select, + MenuItem, + CircularProgress, + Alert, + Table, + TableBody, + TableCell, + TableContainer, + TableHead, + TableRow, + Paper, + IconButton, + Chip, + List, + ListItem, + ListItemText, + Divider, +} from '@mui/material'; +import DeleteIcon from '@mui/icons-material/Delete'; +import AddIcon from '@mui/icons-material/Add'; +import RefreshIcon from '@mui/icons-material/Refresh'; +import SendIcon from '@mui/icons-material/Send'; +import Inventory2Icon from '@mui/icons-material/Inventory2'; +import LocalShippingIcon from '@mui/icons-material/LocalShipping'; +import { api } from '../../services/api'; + +export const SuppliersView: React.FC = () => { + const [suppliers, setSuppliers] = useState([]); + const [purchaseOrders, setPurchaseOrders] = useState([]); + const [ingredients, setIngredients] = useState([]); + const [loading, setLoading] = useState(true); + const [error, setError] = useState(null); + + // Supplier Form + const [openSuppForm, setOpenSuppForm] = useState(false); + const [suppName, setSuppName] = useState(''); + const [suppPhone, setSuppPhone] = useState(''); + const [suppEmail, setSuppEmail] = useState(''); + const [suppAddress, setSuppAddress] = useState(''); + + // Purchase Order Form + const [openPoForm, setOpenPoForm] = useState(false); + const [selectedSupplierId, setSelectedSupplierId] = useState(''); + // Backend schema: { ingredient_id, quantity, unit_price } + const [poItems, setPoItems] = useState<{ + price: any; + qty: any; ingredient_id: number; quantity: number; unit_price: number + }[]>([]); + + // Adding single item to PO + const [addIngId, setAddIngId] = useState(''); + const [addIngQty, setAddIngQty] = useState(10); + const [addIngPrice, setAddIngPrice] = useState(100); + + const loadData = async () => { + setLoading(true); + setError(null); + try { + const suppliersData = await api.getSuppliers(); + setSuppliers(Array.isArray(suppliersData) ? suppliersData : []); + + const poData = await api.getPurchaseOrders(); + setPurchaseOrders(Array.isArray(poData) ? poData : []); + + const ingredientsData = await api.getIngredients(); + setIngredients(Array.isArray(ingredientsData) ? ingredientsData : []); + } catch (err: any) { + setError(err.message || 'Failed to load suppliers/PO data'); + } finally { + setLoading(false); + } + }; + + useEffect(() => { + loadData(); + }, []); + + const handleCreateSupplier = async () => { + setError(null); + try { + // Backend schema: { name, contact_phone?, email? } — no address field + const res = await api.createSupplier({ + name: suppName, + contact_phone: suppPhone || undefined, + email: suppEmail || undefined, + }); + setSuppliers(prev => [...prev, res]); + setOpenSuppForm(false); + setSuppName(''); + setSuppPhone(''); + setSuppEmail(''); + setSuppAddress(''); + } catch (err: any) { + setError(err.message || 'Failed to create supplier'); + } + }; + + const handleDeleteSupplier = async (id: string) => { + if (!window.confirm('Delete this supplier?')) return; + try { + await api.deleteSupplier(id); + setSuppliers(prev => prev.filter(s => s.id !== id)); + } catch (err: any) { + alert(err.message || 'Failed to delete supplier'); + } + }; + + const handleAddPoItem = () => { + if (!addIngId || addIngQty <= 0 || addIngPrice <= 0) return; + if (poItems.some(i => i.ingredient_id === Number(addIngId))) { + alert('Ingredient already added to order list!'); + return; + } + // Backend schema: { ingredient_id, quantity, unit_price } + setPoItems(prev => [...prev, { ingredient_id: Number(addIngId), quantity: addIngQty, unit_price: addIngPrice }]); + setAddIngId(''); + }; + + const handleRemovePoItem = (ingId: number) => { + setPoItems(prev => prev.filter(item => item.ingredient_id !== ingId)); + }; + + const handleCreatePurchaseOrder = async () => { + if (!selectedSupplierId || poItems.length === 0) { + alert('Choose supplier and add at least 1 item.'); + return; + } + setError(null); + try { + // Backend schema: supplier_id (int), items: [{ingredient_id, quantity, unit_price}] + const po = await api.createPurchaseOrder(Number(selectedSupplierId), poItems); + setPurchaseOrders(prev => [po, ...prev]); + setOpenPoForm(false); + setSelectedSupplierId(''); + setPoItems([]); + } catch (err: any) { + setError(err.message || 'Failed to create purchase order'); + } + }; + + const handleUpdatePOStatus = async (id: string, status: 'draft' | 'sent' | 'received' | 'cancelled') => { + try { + const updated = await api.updatePurchaseOrderStatus(id, status); + setPurchaseOrders(prev => prev.map(p => p.id === id ? updated : p)); + if (status === 'received') { + alert('Stock received and inventory levels increased!'); + } + } catch (err: any) { + alert(err.message || 'Failed to update PO status'); + } + }; + + const getPoStatusColor = (status: string) => { + switch (status) { + case 'draft': + return 'default'; + case 'sent': + return 'info'; + case 'received': + return 'success'; + case 'cancelled': + return 'error'; + default: + return 'default'; + } + }; + + return ( + + + + + Suppliers & Purchase Orders (PO) + + + Manage raw ingredient merchants and draft/dispatch purchase orders. Receiving POs bumps stock levels. + + + + + + + + + + {error && {error}} + + {loading ? ( + + ) : ( + + {/* Left panel: Suppliers List */} + + + Supplier Merchants List + + + + + + Name + Contact + Action + + + + {suppliers.map((supp) => ( + + {supp.name} + + 📞 {supp.contact_phone || supp.phone || 'N/A'}
✉️ {supp.email || 'N/A'} +
+ + handleDeleteSupplier(supp.id)}> + + + +
+ ))} +
+
+
+
+ + {/* Right panel: Purchase Orders List */} + + + Purchase Orders Ledger + + {purchaseOrders.length === 0 ? ( + + + No purchase orders placed yet. + + + ) : ( + + {purchaseOrders.map((po) => { + const merchant = suppliers.find(s => s.id === (po.supplier_id || po.supplierId)); + const total = po.items?.reduce((acc: number, item: any) => acc + (Number(item.unit_price || item.price || 0) * Number(item.quantity || item.qty || 0)), 0) || 0; + return ( + + + + + + PO #{po.id} + + + + + Merchant: {merchant ? merchant.name : 'Unknown Merchant'} + + + Items Ordered: {po.items?.map((it: any) => { + const ingId = it.ingredient_id || it.ingredientId; + const ingredient = ingredients.find((ing: any) => ing.id === ingId); + return `${it.quantity || it.qty}x ${ingredient ? ingredient.name : `Ing#${ingId}`}`; + }).join(', ')} + + + Total Estimate: ₹{total.toFixed(2)} + + + + {po.status === 'draft' && ( + + )} + {po.status === 'sent' && ( + <> + + + + )} + + + + ); + })} + + )} + +
+ )} + + {/* Supplier Merchant Dialog */} + setOpenSuppForm(false)} maxWidth="xs" fullWidth> + Add Supplier Merchant + + setSuppName(e.target.value)} + fullWidth + size="small" + /> + setSuppPhone(e.target.value)} + fullWidth + size="small" + /> + setSuppEmail(e.target.value)} + fullWidth + size="small" + /> + setSuppAddress(e.target.value)} + fullWidth + size="small" + multiline + rows={2} + /> + + + + + + + + {/* Create PO Dialog */} + setOpenPoForm(false)} maxWidth="sm" fullWidth> + Draft Purchase Order + + + Select Merchant + + + + + PO Items list: + + + {poItems.length === 0 ? ( + + Add raw ingredients to the order list below. + + ) : ( + + {poItems.map(item => { + const detail = ingredients.find(ing => ing.id === item.ingredient_id); + return ( + handleRemovePoItem(item.ingredient_id)}> + + + } + sx={{ px: 0, py: 0.5 }} + > + + {detail ? detail.name : `Ingredient ID: ${item.ingredient_id}`} + + } + secondary={`Quantity: ${item.qty} ${detail ? detail.unit : 'kg'} @ Est. Price ₹${item.price}/unit`} + /> + + ); + })} + + )} + + + + + ADD ITEM TO ORDER: + + + + + + + + + setAddIngQty(parseFloat(e.target.value) || 0)} + /> + + + setAddIngPrice(parseFloat(e.target.value) || 0)} + /> + + + + + + + + + +
+ ); +}; diff --git a/src/components/admin/TableManagementView.tsx b/src/components/admin/TableManagementView.tsx new file mode 100644 index 0000000..abd26b5 --- /dev/null +++ b/src/components/admin/TableManagementView.tsx @@ -0,0 +1,410 @@ +import React, { useState, useEffect } from 'react'; +import { + Box, + Typography, + Grid, + Card, + CardContent, + CardActions, + Button, + Chip, + Dialog, + DialogTitle, + DialogContent, + DialogActions, + FormControl, + InputLabel, + Select, + MenuItem, + CircularProgress, + IconButton, + Alert, +} from '@mui/material'; +import TableBarIcon from '@mui/icons-material/TableBar'; +import QrCodeIcon from '@mui/icons-material/QrCode'; +import RefreshIcon from '@mui/icons-material/Refresh'; +import CloseIcon from '@mui/icons-material/Close'; +import PlayArrowIcon from '@mui/icons-material/PlayArrow'; +import CleaningServicesIcon from '@mui/icons-material/CleaningServices'; +import { api } from '../../services/api'; + +export const TableManagementView: React.FC = () => { + const [tables, setTables] = useState([]); + const [loading, setLoading] = useState(true); + const [error, setError] = useState(null); + const [selectedTable, setSelectedTable] = useState(null); + const [startSessionOpen, setStartSessionOpen] = useState(false); + const [sessionLang, setSessionLang] = useState('en'); + + // Create Table Form + const [createTableOpen, setCreateTableOpen] = useState(false); + const [newTableNumber, setNewTableNumber] = useState(''); + const [newTableCapacity, setNewTableCapacity] = useState(4); + + const fetchTables = async () => { + setLoading(true); + setError(null); + try { + const data = await api.getTables(); + setTables(Array.isArray(data) ? data : []); + } catch (err: any) { + setError(err.message || 'Failed to fetch tables'); + } finally { + setLoading(false); + } + }; + + useEffect(() => { + fetchTables(); + }, []); + + const handleCloseSession = async (tableId: number) => { + try { + await api.closeSession(tableId); + fetchTables(); + setSelectedTable(null); + } catch (err: any) { + alert(err.message || 'Failed to close session'); + } + }; + + const handleResetTable = async (tableId: number) => { + try { + await api.resetTable(tableId); + fetchTables(); + setSelectedTable(null); + } catch (err: any) { + alert(err.message || 'Failed to reset table'); + } + }; + + const handleStartSession = async () => { + if (!selectedTable) return; + try { + await api.startSession(selectedTable.id, sessionLang); + setStartSessionOpen(false); + fetchTables(); + setSelectedTable(null); + } catch (err: any) { + alert(err.message || 'Failed to start session'); + } + }; + + const handleCreateTable = async () => { + if (!newTableNumber.trim()) { + alert('Please enter a table number'); + return; + } + try { + await api.createTable(newTableNumber.trim(), newTableCapacity); + setCreateTableOpen(false); + setNewTableNumber(''); + setNewTableCapacity(4); + fetchTables(); + } catch (err: any) { + alert(err.message || 'Failed to create table'); + } + }; + + const getStatusColor = (status: string) => { + switch (status) { + case 'available': + return 'success'; + case 'occupied': + return 'error'; + case 'awaiting_clearance': + return 'warning'; + case 'reserved': + return 'primary'; + default: + return 'default'; + } + }; + + return ( + + + + + Table & Floor Management + + + Monitor real-time table occupancy, QR scan sessions, and customer lifecycle. + + + + + + + + + {error && {error}} + + {loading ? ( + + + + ) : ( + + {tables.map((table) => ( + + + + + + + + + + + + Table {table.table_number || table.number || table.id} + + + ID: {table.id} • Capacity: {table.capacity || 'N/A'} + + + {table.status === 'occupied' && ( + + ⚡ Session Active + + )} + + + + { + setSelectedTable(table); + }} + sx={{ color: '#ac2d00', bgcolor: '#ffdbd1', '&:hover': { bgcolor: '#ffcab8' } }} + > + + + + {table.status === 'available' && ( + + )} + + {table.status === 'occupied' && ( + + )} + + {table.status === 'awaiting_clearance' && ( + + )} + + + + ))} + + )} + + {/* QR Code Dialog */} + setSelectedTable(null)} maxWidth="xs" fullWidth> + + Table {selectedTable?.number} QR Scan Link + setSelectedTable(null)}> + + + + + + {/* Generate mock QR UI since real image might be stubbed */} + + + + TABLE {selectedTable?.number} + + + + + Link: {selectedTable?.qr_codes?.[0]?.encoded_url || `http://localhost:3000/scan/${selectedTable?.id}`} + + + + + + + + + {/* Start Session Dialog */} + setStartSessionOpen(false)} maxWidth="xs" fullWidth> + Start Table Session + + + Manually trigger and open a customer dine-in session for Table {selectedTable?.number}. + + + Preferred Language + + + + + + + + + + {/* Create Table Dialog */} + setCreateTableOpen(false)} maxWidth="xs" fullWidth> + Add New Table + + + Table Number / Label + setNewTableNumber(e.target.value)} + /> + + + Seating Capacity + + + + + + + + + + ); +}; diff --git a/src/components/analytics/AnalyticsDashboard.tsx b/src/components/analytics/AnalyticsDashboard.tsx new file mode 100644 index 0000000..30bfc22 --- /dev/null +++ b/src/components/analytics/AnalyticsDashboard.tsx @@ -0,0 +1,344 @@ +import React, { useState, useEffect } from 'react'; +import { + Box, + Grid, + Paper, + Typography, + Card, + CardContent, + Chip, + Button, + ButtonGroup, + Table, + TableBody, + TableCell, + TableContainer, + TableHead, + TableRow, + Avatar, + Divider, +} from '@mui/material'; +import TrendingUpIcon from '@mui/icons-material/TrendingUp'; +import TrendingDownIcon from '@mui/icons-material/TrendingDown'; +import AttachMoneyIcon from '@mui/icons-material/AttachMoney'; +import ShoppingBagIcon from '@mui/icons-material/ShoppingBag'; +import SpeedIcon from '@mui/icons-material/Speed'; +import TableBarIcon from '@mui/icons-material/TableBar'; +import StarIcon from '@mui/icons-material/Star'; +import { StatusBadge } from '../common/StatusBadge'; +import { api } from '../../services/api'; + +export const AnalyticsDashboard: React.FC = () => { + const [period, setPeriod] = useState<'today' | 'week' | 'month'>('today'); + const [topDishes, setTopDishes] = useState([]); + const [revenueTrend, setRevenueTrend] = useState([]); + const fetchAnalytics = async () => { + try { + const topData = await api.getTopItems(); + setTopDishes(Array.isArray(topData) ? topData : []); + + const trendData = await api.getRevenueTrend(); + setRevenueTrend(Array.isArray(trendData) ? trendData : []); + } catch (e) { + console.error(e); + } + }; + + useEffect(() => { + fetchAnalytics(); + }, [period]); + + const metrics = [ + { + title: 'Total Revenue', + value: '₹14,852.40', + change: '+18.4%', + isPositive: true, + icon: , + bg: '#e8f5e9', + }, + { + title: 'Total Orders', + value: '482', + change: '+12.1%', + isPositive: true, + icon: , + bg: '#ffdbd1', + }, + { + title: 'Avg Kitchen Speed', + value: '11m 42s', + change: '-1m 15s faster', + isPositive: true, + icon: , + bg: '#c4e7ff', + }, + { + title: 'Table Occupancy', + value: '84%', + change: '21/25 Tables Active', + isPositive: true, + icon: , + bg: '#ffddba', + }, + ]; + + const finalTopDishes = topDishes.length > 0 ? topDishes.map((d, index) => ({ + id: d.id || String(index + 1), + name: d.name, + category: d.category || 'Mains', + count: d.ordersCount, + revenue: `₹${d.revenue}`, + dietary: d.dietary || 'veg' + })) : [ + { id: '1', name: 'Butter Chicken Special', category: 'Mains', count: 142, revenue: '₹51,120', dietary: 'non-veg' as const }, + { id: '2', name: 'Paneer Tikka Masala', category: 'Mains', count: 118, revenue: '₹33,040', dietary: 'veg' as const }, + { id: '3', name: 'Truffle Garlic Naan', category: 'Breads', count: 215, revenue: '₹17,200', dietary: 'veg' as const }, + { id: '4', name: 'Dal Makhani Gold', category: 'Mains', count: 96, revenue: '₹28,800', dietary: 'veg' as const }, + { id: '5', name: 'Mango Lassi Craft', category: 'Beverages', count: 180, revenue: '₹21,600', dietary: 'veg' as const }, + ]; + + const hourlyData = revenueTrend.length > 0 ? revenueTrend.map((t) => ({ + hour: t.date || t.hour || 'Day', + orders: t.ordersCount || 10, + revenue: t.revenue || 500 + })) : [ + { hour: '11 AM', orders: 24, revenue: 680 }, + { hour: '12 PM', orders: 68, revenue: 1950 }, + { hour: '1 PM', orders: 85, revenue: 2480 }, + { hour: '2 PM', orders: 42, revenue: 1120 }, + { hour: '3 PM', orders: 18, revenue: 450 }, + { hour: '4 PM', orders: 15, revenue: 380 }, + { hour: '5 PM', orders: 32, revenue: 890 }, + { hour: '6 PM', orders: 74, revenue: 2100 }, + { hour: '7 PM', orders: 92, revenue: 2850 }, + { hour: '8 PM', orders: 88, revenue: 2640 }, + { hour: '9 PM', orders: 45, revenue: 1250 }, + ]; + + const maxRevenue = Math.max(...hourlyData.map((d) => d.revenue)); + + return ( + + {/* Analytics Header */} + + + + Business Intelligence & Analytics + + + Real-time outlet performance, kitchen efficiency, and dish profitability metrics. + + + + + {(['today', 'week', 'month'] as const).map((p) => ( + + ))} + + + + {/* KPI Cards */} + + {metrics.map((m, idx) => ( + + + + + + {m.title} + + {m.icon} + + + + {m.value} + + + + {m.isPositive ? ( + + ) : ( + + )} + + {m.change} + + + vs previous {period} + + + + + + ))} + + + {/* Revenue Trends Chart & Hourly Volume */} + + + + + + Hourly Revenue & Peak Order Trends + + + + + {/* Custom SVG Bar Chart */} + + {hourlyData.map((d, index) => { + const heightPercent = (d.revenue / maxRevenue) * 100; + return ( + + + ${d.revenue} + + + + {d.hour} + + + ); + })} + + + + + {/* Operational Speed SLA Breakdown */} + + + + Kitchen SLA Compliance + + + + + + Under 15 Mins (Target SLA) + 88.4% + + + + + + + + + 15 - 25 Mins (Warning SLA) + 9.2% + + + + + + + + + Over 25 Mins (Breached SLA) + 2.4% + + + + + + + + + + + 💡 Operational Tip + + + Truffle Garlic Naan orders spiked at 7 PM. Assigning 1 extra tandoor chef during peak hours will reduce SLA breaches by 1.8%. + + + + + + + + {/* Top Dishes Leaderboard */} + + + Top Performing Dishes Leaderboard + + + + + + + DISH NAME + CATEGORY + DIETARY + UNITS SOLD + GROSS REVENUE + + + + {finalTopDishes.map((dish) => ( + + + + + {dish.name} + + + {dish.category} + + + + + {dish.count} + + + {dish.revenue} + + + ))} + +
+
+
+
+ ); +}; diff --git a/src/components/common/Navigation.tsx b/src/components/common/Navigation.tsx new file mode 100644 index 0000000..218e158 --- /dev/null +++ b/src/components/common/Navigation.tsx @@ -0,0 +1,232 @@ +import React, { useState } from 'react'; +import { + AppBar, + Toolbar, + Typography, + Button, + IconButton, + Box, + Drawer, + List, + ListItem, + ListItemButton, + ListItemIcon, + ListItemText, + Chip, + Tooltip, +} from '@mui/material'; +import MenuIcon from '@mui/icons-material/Menu'; +import SoupKitchenIcon from '@mui/icons-material/SoupKitchen'; +import BarChartIcon from '@mui/icons-material/BarChart'; +import RecordVoiceOverIcon from '@mui/icons-material/RecordVoiceOver'; +import TableRestaurantIcon from '@mui/icons-material/TableRestaurant'; +import VolumeUpIcon from '@mui/icons-material/VolumeUp'; +import VolumeOffIcon from '@mui/icons-material/VolumeOff'; +import LocalDiningIcon from '@mui/icons-material/LocalDining'; + +interface NavigationProps { + activeTab: string; + onTabChange: (tab: string) => void; + pendingCount: number; + soundEnabled: boolean; + onToggleSound: () => void; +} + +export const Navigation: React.FC = ({ + activeTab, + onTabChange, + pendingCount, + soundEnabled, + onToggleSound, +}) => { + const [drawerOpen, setDrawerOpen] = useState(false); + + const menuItems = [ + { + id: 'kds', + label: 'Kitchen Display (KDS)', + icon: , + badge: pendingCount, + }, + { + id: 'analytics', + label: 'Business Analytics', + icon: , + }, + { + id: 'voice', + label: 'Voice Assistant', + icon: , + }, + { + id: 'table', + label: 'Table 12 Hub', + icon: , + }, + ]; + + return ( + <> + + + + setDrawerOpen(true)} + sx={{ display: { sm: 'none' } }} + > + + + + + + + + + RestroAI + + + + + {/* Desktop Nav Items */} + + {menuItems.map((item) => { + const isActive = activeTab === item.id; + return ( + + ); + })} + + + {/* Settings & Tools */} + + + + {soundEnabled ? : } + + + + + + + Outlet: Downtown Main + + + + + + + {/* Mobile Drawer */} + setDrawerOpen(false)}> + + + RestroAI Navigation + + + {menuItems.map((item) => ( + + { + onTabChange(item.id); + setDrawerOpen(false); + }} + > + + {item.icon} + + + {item.label} + + } + /> + {item.badge !== undefined && item.badge > 0 && ( + + )} + + + ))} + + + + + ); +}; diff --git a/src/components/common/StatusBadge.tsx b/src/components/common/StatusBadge.tsx new file mode 100644 index 0000000..edb4d60 --- /dev/null +++ b/src/components/common/StatusBadge.tsx @@ -0,0 +1,102 @@ +import React from 'react'; +import { Chip, Box, Typography } from '@mui/material'; +import type { OrderStatus, OrderType } from '../../types'; + +interface StatusBadgeProps { + status?: OrderStatus; + type?: OrderType; + dietary?: 'veg' | 'non-veg' | 'jain' | 'vegan'; + size?: 'small' | 'medium'; +} + +export const StatusBadge: React.FC = ({ status, type, dietary, size = 'small' }) => { + if (dietary) { + const config = { + veg: { label: 'VEG', color: '#2e7d32', bg: '#e8f5e9', border: '#2e7d32' }, + 'non-veg': { label: 'NON-VEG', color: '#c62828', bg: '#ffebee', border: '#c62828' }, + jain: { label: 'JAIN', color: '#ef6c00', bg: '#fff3e0', border: '#ef6c00' }, + vegan: { label: 'VEGAN', color: '#1565c0', bg: '#e3f2fd', border: '#1565c0' }, + }[dietary]; + + return ( + + + + {config.label} + + + ); + } + + if (status) { + const statusMap = { + pending: { label: 'PENDING', color: 'error', bg: '#ffdad6' }, + preparing: { label: 'PREPARING', color: 'warning', bg: '#ffddba' }, + ready: { label: 'READY', color: 'success', bg: '#a3f69c' }, + served: { label: 'SERVED', color: 'default', bg: '#eeeeee' }, + }[status]; + + return ( + + ); + } + + if (type) { + const typeMap = { + 'Dine-In': { label: 'DINE-IN', color: '#ac2d00', bg: '#ffdbd1' }, + Takeaway: { label: 'TAKEAWAY', color: '#546067', bg: '#d7e4ec' }, + Delivery: { label: 'DELIVERY', color: '#845000', bg: '#ffddba' }, + }[type]; + + return ( + + ); + } + + return null; +}; diff --git a/src/components/customer/BillPaymentView.tsx b/src/components/customer/BillPaymentView.tsx new file mode 100644 index 0000000..774bed6 --- /dev/null +++ b/src/components/customer/BillPaymentView.tsx @@ -0,0 +1,302 @@ +import React, { useState, useEffect } from 'react'; +import { + Box, + Container, + Typography, + Paper, + Button, + Chip, + Divider, + Alert, + Grid, +} from '@mui/material'; +import ReceiptLongIcon from '@mui/icons-material/ReceiptLong'; +import CheckCircleIcon from '@mui/icons-material/CheckCircle'; +import QrCode2Icon from '@mui/icons-material/QrCode2'; +import PersonIcon from '@mui/icons-material/Person'; +import CreditCardIcon from '@mui/icons-material/CreditCard'; +import CurrencyRupeeIcon from '@mui/icons-material/CurrencyRupee'; +import { api } from '../../services/api'; + +interface BillPaymentViewProps { + onNavigate: (view: 'landing' | 'menu' | 'cart' | 'status' | 'bill' | 'voice') => void; +} + +export const BillPaymentView: React.FC = ({ onNavigate }) => { + const [splitCount, setSplitCount] = useState(1); + const [tipPercentage, setTipPercentage] = useState(10); + const [paymentDone, setPaymentDone] = useState(false); + const [paymentMethod, setPaymentMethod] = useState<'upi' | 'card' | 'cash' | null>(null); + const [billItems, setBillItems] = useState([]); + const [ticketNum, setTicketNum] = useState('---'); + const [tableNum, setTableNum] = useState('12'); + const [billId, setBillId] = useState(''); + + const sessionId = sessionStorage.getItem('customer_session_id') || '112'; + + const loadBill = async () => { + try { + const order = await api.getOrderForSession(sessionId); + if (order) { + setTicketNum(order.ticketNumber || '105'); + setTableNum(order.tableNumber || sessionStorage.getItem('customer_table_id') || '12'); + + setBillItems(order.items.map((it: any) => ({ + name: it.name, + qty: it.quantity, + price: it.price || 150 + }))); + + const bill = await api.generateBill(order.id); + if (bill) { + setBillId(bill.id); + } + } + } catch (e) { + console.error('Failed to load bill', e); + } + }; + + useEffect(() => { + loadBill(); + }, []); + + const subtotal = billItems.reduce((acc, i) => acc + i.price * i.qty, 0); + const cgst = subtotal * 0.025; + const sgst = subtotal * 0.025; + const serviceCharge = subtotal * 0.05; + const tip = subtotal * (tipPercentage / 100); + const totalBill = subtotal + cgst + sgst + serviceCharge + tip; + const perPersonPrice = totalBill / splitCount; + + const handlePay = async (method: 'upi' | 'card' | 'cash') => { + try { + if (billId) { + await api.recordPayment(billId, method, totalBill); + } + setPaymentMethod(method); + setPaymentDone(true); + } catch (e) { + alert('Failed to record payment: ' + e); + } + }; + + return ( + + {/* Header */} + + + + Bill & Payment + + + 🪑 Table {tableNum} · Ticket #{ticketNum} + + + } + label={paymentDone ? 'PAID ✓' : 'UNPAID'} + color={paymentDone ? 'success' : 'error'} + sx={{ fontWeight: 800 }} + /> + + + + {paymentDone ? ( + + + + Payment Successful! + + + ₹{totalBill.toFixed(0)} paid via {paymentMethod === 'upi' ? 'UPI' : paymentMethod === 'card' ? 'Card' : 'Cash'} + + + Thank you for dining with RestroAI! Your receipt has been sent. + + + + ) : ( + <> + {/* Itemized Bill */} + + + + 🧾 Bill Details + + + GSTIN: 29XXXXXX0001Z5 + + + + {billItems.map((item, idx) => ( + + + {item.qty}× {item.name} + + + ₹{(item.price * item.qty).toFixed(0)} + + + ))} + + + + {[ + { label: 'Subtotal', value: `₹${subtotal.toFixed(0)}` }, + { label: 'CGST (2.5%)', value: `₹${cgst.toFixed(0)}` }, + { label: 'SGST (2.5%)', value: `₹${sgst.toFixed(0)}` }, + { label: 'Service Charge (5%)', value: `₹${serviceCharge.toFixed(0)}` }, + { label: `Staff Tip (${tipPercentage}%)`, value: `₹${tip.toFixed(0)}` }, + ].map((row) => ( + + {row.label} + {row.value} + + ))} + + + + + Total Amount + + ₹{totalBill.toFixed(0)} + + + + + {/* Split Bill */} + + + 👥 Split the Bill + + + {[1, 2, 3, 4].map((count) => ( + } + label={count === 1 ? 'Solo' : `${count} Guests`} + clickable + onClick={() => setSplitCount(count)} + color={splitCount === count ? 'primary' : 'default'} + variant={splitCount === count ? 'filled' : 'outlined'} + sx={{ fontWeight: 800, flex: 1 }} + /> + ))} + + {splitCount > 1 && ( + + Each person pays: ₹{perPersonPrice.toFixed(0)} + + )} + + + {/* Tip Selector */} + + + ❤️ Add Tip for Staff + + + {[0, 10, 15, 20].map((pct) => ( + setTipPercentage(pct)} + color={tipPercentage === pct ? 'primary' : 'default'} + variant={tipPercentage === pct ? 'filled' : 'outlined'} + sx={{ fontWeight: 800, flex: 1 }} + /> + ))} + + + + {/* Payment Options */} + + Choose Payment Method + + + + {/* UPI Button */} + + + + + + + + + + + + + )} + + + ); +}; diff --git a/src/components/customer/CartReviewView.tsx b/src/components/customer/CartReviewView.tsx new file mode 100644 index 0000000..ce0feee --- /dev/null +++ b/src/components/customer/CartReviewView.tsx @@ -0,0 +1,235 @@ +import React, { useState } from 'react'; +import { + Box, + Container, + Typography, + Paper, + Button, + IconButton, + Divider, + TextField, + Chip, + Card, + CardMedia, +} from '@mui/material'; +import ArrowBackIcon from '@mui/icons-material/ArrowBack'; +import AddIcon from '@mui/icons-material/Add'; +import RemoveIcon from '@mui/icons-material/Remove'; +import DeleteIcon from '@mui/icons-material/Delete'; +import SendIcon from '@mui/icons-material/Send'; +import ReceiptLongIcon from '@mui/icons-material/ReceiptLong'; +import { MENU_ITEMS } from '../../data/menuData'; +import type { MenuItem } from '../../data/menuData'; +import { StatusBadge } from '../common/StatusBadge'; + +interface CartReviewViewProps { + cart: { [itemId: string]: number }; + onUpdateCart: (itemId: string, quantity: number) => void; + onPlaceOrder: (orderNotes: string) => void; + onNavigate: (view: 'landing' | 'menu' | 'cart' | 'status' | 'bill' | 'voice') => void; +} + +export const CartReviewView: React.FC = ({ + cart, + onUpdateCart, + onPlaceOrder, + onNavigate, +}) => { + const [orderNotes, setOrderNotes] = useState(''); + + const cartEntries = Object.entries(cart) + .map(([id, qty]) => { + const item = MENU_ITEMS.find((m) => m.id === id); + return item ? { item, qty } : null; + }) + .filter(Boolean) as { item: MenuItem; qty: number }[]; + + const subtotal = cartEntries.reduce((sum, entry) => sum + entry.item.price * entry.qty, 0); + const cgst = subtotal * 0.025; // CGST 2.5% + const sgst = subtotal * 0.025; // SGST 2.5% + const serviceCharge = subtotal * 0.05; // 5% service charge + const grandTotal = subtotal + cgst + sgst + serviceCharge; + + return ( + + {/* Header */} + + + onNavigate('menu')} size="small"> + + + + + Your Cart + + + 🪑 Table {sessionStorage.getItem('customer_table_id') || '12'} + + + + + + + + {cartEntries.length === 0 ? ( + + + Your cart is empty + + + Go back and add some delicious dishes! + + + + ) : ( + <> + {/* Cart Items */} + + {cartEntries.map(({ item, qty }) => ( + + + + + + {item.name} + + + + + ₹{(item.price * qty).toFixed(0)} + + + + onUpdateCart(item.id, qty - 1)}> + + + + {qty} + + onUpdateCart(item.id, qty + 1)}> + + + + onUpdateCart(item.id, 0)}> + + + + + + ))} + + + {/* Instructions */} + + + 📝 Special Instructions + + setOrderNotes(e.target.value)} + sx={{ '& .MuiOutlinedInput-root': { borderRadius: '10px', bgcolor: '#f8f5f2' } }} + /> + + + {/* Bill Summary */} + + + + + Bill Summary + + + + {[ + { label: 'Items Total', value: `₹${subtotal.toFixed(0)}` }, + { label: 'CGST (2.5%)', value: `₹${cgst.toFixed(0)}` }, + { label: 'SGST (2.5%)', value: `₹${sgst.toFixed(0)}` }, + { label: 'Service Charge (5%)', value: `₹${serviceCharge.toFixed(0)}` }, + ].map((row) => ( + + {row.label} + {row.value} + + ))} + + + + + Grand Total + ₹{grandTotal.toFixed(0)} + + + *Inclusive of all taxes as per GST regulations + + + + {/* Place Order CTA */} + + + )} + + + ); +}; diff --git a/src/components/customer/CustomizationModal.tsx b/src/components/customer/CustomizationModal.tsx new file mode 100644 index 0000000..012e58d --- /dev/null +++ b/src/components/customer/CustomizationModal.tsx @@ -0,0 +1,187 @@ +import React, { useState } from 'react'; +import { + Dialog, + DialogTitle, + DialogContent, + DialogActions, + Typography, + Box, + Button, + Radio, + RadioGroup, + FormControlLabel, + Checkbox, + TextField, + Divider, +} from '@mui/material'; +import type { MenuItem } from '../../data/menuData'; +import { StatusBadge } from '../common/StatusBadge'; + +interface CustomizationModalProps { + open: boolean; + item: MenuItem | null; + onClose: () => void; + onConfirm: (item: MenuItem, quantity: number, notes: string) => void; +} + +export const CustomizationModal: React.FC = ({ + open, + item, + onClose, + onConfirm, +}) => { + if (!item) return null; + + const [spiceLevel, setSpiceLevel] = useState('Medium'); + const [extraCheese, setExtraCheese] = useState(false); + const [extraTruffle, setExtraTruffle] = useState(false); + const [specialNotes, setSpecialNotes] = useState(''); + const [quantity, setQuantity] = useState(1); + + const addOnCost = (extraCheese ? 40 : 0) + (extraTruffle ? 60 : 0); + const totalPrice = (item.price + addOnCost) * quantity; + + const handleAdd = () => { + const formattedNotes = [ + `Spice: ${spiceLevel}`, + extraCheese ? 'Extra Cheese (+ $2.50)' : '', + extraTruffle ? 'Extra Truffle Oil (+ $3.00)' : '', + specialNotes ? `Note: ${specialNotes}` : '', + ] + .filter(Boolean) + .join(' | '); + + onConfirm(item, quantity, formattedNotes); + onClose(); + }; + + return ( + + + + + {item.name} + + + + + ₹{item.price} + + + + + + {item.description} + + + {/* Spice Level Selector */} + + 🌶️ Select Spice Level: + + setSpiceLevel(e.target.value)} + sx={{ mb: 2 }} + > + {['Mild', 'Medium', 'Spicy', 'Extra Hot'].map((level) => ( + } + label={{level}} + /> + ))} + + + + + {/* Extra Add-ons */} + + ✨ Extra Add-ons: + + + setExtraCheese(e.target.checked)} + size="small" + sx={{ color: '#ac2d00', '&.Mui-checked': { color: '#ac2d00' } }} + /> + } + label={ + + Extra Butter / Cream + +₹40 + + } + /> + setExtraTruffle(e.target.checked)} + size="small" + sx={{ color: '#ac2d00', '&.Mui-checked': { color: '#ac2d00' } }} + /> + } + label={ + + Extra Masala / Spice Blend + +₹60 + + } + /> + + + + + {/* Special Instructions */} + + 📝 Special Instructions / Allergy Notes: + + setSpecialNotes(e.target.value)} + /> + + + + + + + {quantity} + + + + + + + + ); +}; diff --git a/src/components/customer/MenuBrowseView.tsx b/src/components/customer/MenuBrowseView.tsx new file mode 100644 index 0000000..ccc6845 --- /dev/null +++ b/src/components/customer/MenuBrowseView.tsx @@ -0,0 +1,542 @@ +import React, { useState, useMemo } from 'react'; +import { + Box, + Typography, + Paper, + IconButton, + Chip, + TextField, + InputAdornment, + Card, + CardMedia, + Badge, + BottomNavigation, + BottomNavigationAction, + Button, +} from '@mui/material'; +import AddIcon from '@mui/icons-material/Add'; +import RemoveIcon from '@mui/icons-material/Remove'; +import SearchIcon from '@mui/icons-material/Search'; +import ShoppingCartIcon from '@mui/icons-material/ShoppingCart'; +import MicIcon from '@mui/icons-material/Mic'; +import HomeIcon from '@mui/icons-material/Home'; +import MenuBookIcon from '@mui/icons-material/MenuBook'; +import TrackChangesIcon from '@mui/icons-material/TrackChanges'; +import AutoAwesomeIcon from '@mui/icons-material/AutoAwesome'; +import StarIcon from '@mui/icons-material/Star'; +import { MENU_ITEMS, CATEGORIES } from '../../data/menuData'; +import type { MenuItem, CategoryType } from '../../data/menuData'; +import { StatusBadge } from '../common/StatusBadge'; + +interface MenuBrowseViewProps { + cart: { [itemId: string]: number }; + onUpdateCart: (itemId: string, quantity: number) => void; + onOpenCustomization: (item: MenuItem) => void; + onOpenVoice: () => void; + onNavigate: (view: 'landing' | 'menu' | 'cart' | 'status' | 'bill' | 'voice') => void; +} + +const DIETARY_FILTERS = [ + { label: 'All', value: null }, + { label: '🟢 Veg', value: 'veg' }, + { label: '🔴 Non-Veg', value: 'non-veg' }, + { label: '🌿 Jain', value: 'jain' }, +]; + +const SPICE_ICONS: Record = { + mild: '🟡', + medium: '🟠', + hot: '🔴', + 'extra-hot': '🔥', +}; + +export const MenuBrowseView: React.FC = ({ + cart, + onUpdateCart, + onOpenCustomization, + onOpenVoice, + onNavigate, +}) => { + const [activeCategory, setActiveCategory] = useState('All'); + const [searchQuery, setSearchQuery] = useState(''); + const [dietaryFilter, setDietaryFilter] = useState(null); + const [bottomNav, setBottomNav] = useState(1); // 1 = Menu + + const totalCartItems = Object.values(cart).reduce((a, b) => a + b, 0); + const totalCartValue = Object.entries(cart).reduce((sum, [id, qty]) => { + const item = MENU_ITEMS.find((m) => m.id === id); + return sum + (item ? item.price * qty : 0); + }, 0); + + const filteredItems = useMemo(() => { + return MENU_ITEMS.filter((item) => { + const matchCategory = activeCategory === 'All' || item.category === activeCategory; + const matchSearch = + !searchQuery || + item.name.toLowerCase().includes(searchQuery.toLowerCase()) || + (item.nameHindi && item.nameHindi.includes(searchQuery)) || + item.description.toLowerCase().includes(searchQuery.toLowerCase()); + const matchDietary = !dietaryFilter || item.dietary === dietaryFilter; + return matchCategory && matchSearch && matchDietary; + }); + }, [activeCategory, searchQuery, dietaryFilter]); + + const handleBottomNav = (_: React.SyntheticEvent, newValue: number) => { + setBottomNav(newValue); + if (newValue === 0) onNavigate('landing'); + if (newValue === 2) { + if (totalCartItems > 0) onNavigate('cart'); + } + if (newValue === 3) onNavigate('status'); + }; + + return ( + + {/* Sticky Header */} + + {/* Top bar */} + + + + RestroAI Menu + + + 🪑 Table {sessionStorage.getItem('customer_table_id') || '12'} · Dine-In + + + + + + + + totalCartItems > 0 && onNavigate('cart')} + sx={{ + bgcolor: totalCartItems > 0 ? '#ac2d00' : '#f2ede9', + color: totalCartItems > 0 ? '#fff' : '#8f7068', + '&:hover': { bgcolor: totalCartItems > 0 ? '#872100' : '#ede8e4' }, + }} + > + + + + + + + {/* Search Bar */} + + setSearchQuery(e.target.value)} + slotProps={{ + input: { + startAdornment: ( + + + + ), + }, + }} + sx={{ + '& .MuiOutlinedInput-root': { + borderRadius: '12px', + bgcolor: '#f8f5f2', + '& fieldset': { border: '1px solid #e4ddd8' }, + }, + }} + /> + + + {/* Category Tabs - Horizontal Scroll */} + + {CATEGORIES.map((cat) => { + const catEmoji: Record = { + All: '🍽️', Starters: '🥗', Biryani: '🍚', Mains: '🍛', + Breads: '🫓', Drinks: '🥤', Desserts: '🍮', Specials: '⭐', + }; + const isActive = activeCategory === cat; + return ( + setActiveCategory(cat)} + sx={{ + fontWeight: 800, + flexShrink: 0, + bgcolor: isActive ? '#ac2d00' : '#ffffff', + color: isActive ? '#fff' : '#5b4139', + border: isActive ? '2px solid #ac2d00' : '1.5px solid #e4ddd8', + '&:hover': { bgcolor: isActive ? '#872100' : '#f5ede9' }, + transition: 'all 0.15s ease', + }} + /> + ); + })} + + + {/* Dietary Filters */} + + {DIETARY_FILTERS.map((f) => ( + setDietaryFilter(f.value)} + variant={dietaryFilter === f.value ? 'filled' : 'outlined'} + color={dietaryFilter === f.value ? 'primary' : 'default'} + sx={{ fontWeight: 700, flexShrink: 0 }} + /> + ))} + + + + {/* AI Banner */} + + + + + + + + 🍛 Today's AI Pick: Hyderabadi Chicken Biryani + + + Tap to voice order or browse below · ₹380 + + + + + + {/* Menu Cards */} + + {activeCategory !== 'All' && ( + + {activeCategory} ({filteredItems.length} items) + + )} + + {filteredItems.length === 0 ? ( + + No dishes found + Try a different search or filter + + ) : ( + + {filteredItems.map((item) => { + const qty = cart[item.id] || 0; + return ( + + {/* Food Image */} + + + {/* Badges on image */} + + {item.isChefSpecial && ( + } + label="Chef's Special" + size="small" + sx={{ + bgcolor: 'rgba(172,45,0,0.9)', + color: '#fff', + fontWeight: 800, + fontSize: '0.65rem', + backdropFilter: 'blur(4px)', + }} + /> + )} + {item.isBestseller && ( + } + label="Bestseller" + size="small" + sx={{ + bgcolor: 'rgba(0,0,0,0.7)', + color: '#FFD700', + fontWeight: 800, + fontSize: '0.65rem', + backdropFilter: 'blur(4px)', + }} + /> + )} + + {item.spiceLevel && ( + + )} + + + {/* Card Content */} + + + + + {item.name} + + {item.nameHindi && ( + + {item.nameHindi} + + )} + + + + + + {item.description} + + + {/* Tags */} + {item.tags && item.tags.length > 0 && ( + + {item.tags.slice(0, 3).map((tag) => ( + + ))} + + )} + + {/* Price + Action Row */} + + + + ₹{item.price} + + + ⏱ {item.prepTimeMinutes} min + + + + {qty === 0 ? ( + + ) : ( + + onUpdateCart(item.id, qty - 1)} + sx={{ color: '#fff', p: 0.8 }} + > + + + + {qty} + + onUpdateCart(item.id, qty + 1)} + sx={{ color: '#fff', p: 0.8 }} + > + + + + )} + + + + ); + })} + + )} + + + {/* Floating Cart Pill */} + {totalCartItems > 0 && ( + + onNavigate('cart')} + sx={{ + display: 'flex', + alignItems: 'center', + gap: 2, + px: 3, + py: 1.5, + borderRadius: '9999px', + bgcolor: '#ac2d00', + color: '#fff', + cursor: 'pointer', + boxShadow: '0 8px 28px rgba(172,45,0,0.45)', + '&:hover': { bgcolor: '#872100' }, + transition: 'all 0.2s ease', + minWidth: 260, + justifyContent: 'space-between', + }} + > + + + + + + {totalCartItems} item{totalCartItems > 1 ? 's' : ''} in cart + + + + ₹{totalCartValue.toFixed(0)} → + + + + )} + + {/* Bottom Navigation */} + + + } + sx={{ '&.Mui-selected': { color: '#ac2d00' } }} + /> + } + sx={{ '&.Mui-selected': { color: '#ac2d00' } }} + /> + + + + } + sx={{ '&.Mui-selected': { color: '#ac2d00' } }} + /> + } + sx={{ '&.Mui-selected': { color: '#ac2d00' } }} + /> + + + + ); +}; diff --git a/src/components/customer/OrderStatusView.tsx b/src/components/customer/OrderStatusView.tsx new file mode 100644 index 0000000..2026c1c --- /dev/null +++ b/src/components/customer/OrderStatusView.tsx @@ -0,0 +1,284 @@ +import React, { useState, useEffect } from 'react'; +import { + Box, + Container, + Typography, + Paper, + Button, + Chip, + Alert, + Stepper, + Step, + StepLabel, + StepContent, +} from '@mui/material'; +import AccessTimeIcon from '@mui/icons-material/AccessTime'; +import NotificationsActiveIcon from '@mui/icons-material/NotificationsActive'; +import AddIcon from '@mui/icons-material/Add'; +import PaymentIcon from '@mui/icons-material/Payment'; +import CheckCircleIcon from '@mui/icons-material/CheckCircle'; +import RestaurantIcon from '@mui/icons-material/Restaurant'; +import DeliveryDiningIcon from '@mui/icons-material/DeliveryDining'; +import SentimentSatisfiedAltIcon from '@mui/icons-material/SentimentSatisfiedAlt'; +import { api, RestroWebSocket, subscribeToWsEvents } from '../../services/api'; + +interface OrderStatusViewProps { + onNavigate: (view: 'landing' | 'menu' | 'cart' | 'status' | 'bill' | 'voice') => void; +} + +const ORDER_STEPS = [ + { + label: 'Order Confirmed', + description: 'Your order has been received and sent to the kitchen.', + icon: , + time: 'Just now', + }, + { + label: 'Being Prepared', + description: 'Chef Ravi is preparing your order with fresh ingredients.', + icon: , + time: '~10 min', + }, + { + label: 'Ready for Service', + description: 'Your dishes are plated and ready to be brought to your table.', + icon: , + time: '~15 min', + }, + { + label: 'Order Served 🎉', + description: 'Your meal has been served. Enjoy your dining experience!', + icon: , + time: '~20 min', + }, +]; + +export const OrderStatusView: React.FC = ({ onNavigate }) => { + const [activeStep, setActiveStep] = useState(0); + const [ticketNum, setTicketNum] = useState('---'); + const [tableNum, setTableNum] = useState('12'); + const [waiterNotified, setWaiterNotified] = useState(false); + const [eta, setEta] = useState(15); + + const sessionId = sessionStorage.getItem('customer_session_id') || '112'; + + const loadOrder = async () => { + try { + const order = await api.getOrderForSession(sessionId); + if (order) { + setTicketNum(order.ticketNumber || '105'); + setTableNum(order.tableNumber || sessionStorage.getItem('customer_table_id') || '12'); + + let step = 0; + if (order.status === 'served') step = 3; + else if (order.status === 'ready') step = 2; + else if (order.status === 'in_preparation' || order.status === 'preparing') step = 1; + + setActiveStep(step); + setEta(step === 0 ? 15 : step === 1 ? 10 : step === 2 ? 3 : 0); + } + } catch (e) { + console.error('Failed to load active order', e); + } + }; + + useEffect(() => { + loadOrder(); + + // Start WebSocket + const ws = new RestroWebSocket('orders', sessionId); + ws.connect(); + + const unsubscribe = subscribeToWsEvents((event) => { + if (event.type === 'kds.item_updated') { + loadOrder(); + } + }); + + return () => { + ws.close(); + unsubscribe(); + }; + }, []); + + // Countdown timer + useEffect(() => { + if (eta <= 0) return; + const timer = setInterval(() => setEta((prev) => Math.max(0, prev - 1)), 60000); + return () => clearInterval(timer); + }, [eta]); + + const handleCallWaiter = () => { + setWaiterNotified(true); + setTimeout(() => setWaiterNotified(false), 5000); + }; + + return ( + + {/* Header */} + + + + Live Order Status + + + Ticket #{ticketNum} · Table {tableNum} + + + } + label={eta > 0 ? `ETA ~${eta} min` : 'Ready soon!'} + sx={{ + fontWeight: 800, + bgcolor: '#ffdbd1', + color: '#ac2d00', + }} + /> + + + + {waiterNotified && ( + + 🔔 Waiter has been notified to visit Table {tableNum}! + + )} + + {/* Live Status Card */} + + + {activeStep === 0 && '✅ Order Placed!'} + {activeStep === 1 && '👨‍🍳 Chef is Cooking...'} + {activeStep === 2 && '🍽️ Almost Ready!'} + {activeStep === 3 && '🎉 Meal Served!'} + + + {ORDER_STEPS[activeStep].description} + + + {/* Vertical Stepper */} + + {ORDER_STEPS.map((step, index) => ( + + + + {step.label} + + {step.time} + + + + {index === activeStep && ( + + + {step.description} + + + )} + + ))} + + + + {/* Ordered Items Summary */} + + + 🧾 Your Order Summary + + {[ + { name: 'Hyderabadi Chicken Biryani', qty: 1, price: 380 }, + { name: 'Paneer Tikka', qty: 1, price: 280 }, + { name: 'Garlic Naan', qty: 2, price: 80 }, + { name: 'Mango Lassi', qty: 2, price: 120 }, + ].map((item, idx) => ( + + + {item.qty}× {item.name} + + + ₹{item.qty * item.price} + + + ))} + + Estimated Total + ₹960 + + + + {/* Action Buttons */} + + + + + + + + + + + ); +}; diff --git a/src/components/customer/TableLandingView.tsx b/src/components/customer/TableLandingView.tsx new file mode 100644 index 0000000..eccb312 --- /dev/null +++ b/src/components/customer/TableLandingView.tsx @@ -0,0 +1,338 @@ +import React, { useState } from 'react'; +import { + Box, + Container, + Typography, + Button, + Paper, + Chip, + Grid, + IconButton, +} from '@mui/material'; +import RestaurantMenuIcon from '@mui/icons-material/RestaurantMenu'; +import AutoAwesomeIcon from '@mui/icons-material/AutoAwesome'; +import LanguageIcon from '@mui/icons-material/Language'; +import TranslateIcon from '@mui/icons-material/Translate'; +import ArrowForwardIcon from '@mui/icons-material/ArrowForward'; +import WifiIcon from '@mui/icons-material/Wifi'; +import MicIcon from '@mui/icons-material/Mic'; +import LockIcon from '@mui/icons-material/Lock'; + +interface TableLandingViewProps { + onStartOrdering: (language: string) => void; + onOpenStaffLogin?: () => void; + onOpenVoice?: () => void; +} + +export const TableLandingView: React.FC = ({ + onStartOrdering, + onOpenStaffLogin, + onOpenVoice, +}) => { + const [selectedLang, setSelectedLang] = useState<'english' | 'hindi' | 'hinglish'>('english'); + + const languages = [ + { + id: 'english', + emoji: '🇬🇧', + name: 'English', + subText: 'English', + icon: , + }, + { + id: 'hindi', + emoji: '🇮🇳', + name: 'हिन्दी', + subText: 'Hindi', + icon: नमस्ते, + }, + { + id: 'hinglish', + emoji: '🤝', + name: 'Hinglish', + subText: 'Mix', + icon: , + }, + ]; + + return ( + + {/* Hero Image Banner */} + + {/* Dark overlay gradient */} + + + {/* Top bar inside hero */} + + + + + + + RestroAI + + + + + { + const params = new URLSearchParams(window.location.search); + const tableParam = params.get('table'); + if (tableParam) { + const parsed = parseInt(tableParam); + if (!isNaN(parsed)) return parsed; + } + const path = window.location.pathname; + const match = path.match(/\/scan\/(\d+)/); + if (match) { + return parseInt(match[1]); + } + return 12; + })()}`} + sx={{ + fontWeight: 800, + fontFamily: '"JetBrains Mono", monospace', + bgcolor: 'rgba(255,255,255,0.2)', + color: '#fff', + backdropFilter: 'blur(8px)', + border: '1px solid rgba(255,255,255,0.35)', + }} + /> + + + + + + + {/* Hero text at bottom of image */} + + + + + AI-POWERED DINING + + + + Scan. Order. Enjoy. + + + Fresh Indian cuisine, served with precision & joy + + + + + {/* Content Area */} + + + {/* AI Voice Section */} + + + + + + + + Order with Voice 🎙️ + + + Tap & say your order in English or Hindi + + + + + + + {/* Language Selection */} + + + Choose Your Language + + + + {languages.map((lang) => { + const isSelected = selectedLang === lang.id; + return ( + + setSelectedLang(lang.id as 'english' | 'hindi' | 'hinglish')} + sx={{ + p: 2, + borderRadius: '16px', + cursor: 'pointer', + display: 'flex', + flexDirection: 'column', + alignItems: 'center', + gap: 0.8, + backgroundColor: isSelected ? '#ac2d00' : '#f2ede9', + color: isSelected ? '#ffffff' : '#5b403d', + border: isSelected ? '2px solid #872100' : '2px solid transparent', + transition: 'all 0.22s cubic-bezier(0.34, 1.56, 0.64, 1)', + '&:hover': { + backgroundColor: isSelected ? '#872100' : '#e8e2de', + transform: 'scale(1.04)', + }, + }} + > + {lang.emoji} + + {lang.name} + + + + ); + })} + + + + {/* Today's Highlights */} + + + + + Today's Must-Try + + + + {['Hyderabadi Biryani ₹380', 'Butter Chicken ₹360', "Chef's Thali ₹550"].map((item) => ( + + ))} + + + + {/* Main CTA Button */} + + + {/* Footer */} + + + + Free WiFi: RestroAI_Guest + + + + + + ); +}; diff --git a/src/components/customer/VoiceAssistantModal.tsx b/src/components/customer/VoiceAssistantModal.tsx new file mode 100644 index 0000000..ce89777 --- /dev/null +++ b/src/components/customer/VoiceAssistantModal.tsx @@ -0,0 +1,440 @@ +import React, { useState, useEffect, useCallback } from 'react'; +import { + Box, + Drawer, + Typography, + IconButton, + Chip, + Paper, + Alert, + Button, + Divider, + Fade, +} from '@mui/material'; +import CloseIcon from '@mui/icons-material/Close'; +import MicIcon from '@mui/icons-material/Mic'; +import StopIcon from '@mui/icons-material/Stop'; +import GraphicEqIcon from '@mui/icons-material/GraphicEq'; +import SmartToyIcon from '@mui/icons-material/SmartToy'; +import CheckCircleIcon from '@mui/icons-material/CheckCircle'; +import AddShoppingCartIcon from '@mui/icons-material/AddShoppingCart'; +import VolumeUpIcon from '@mui/icons-material/VolumeUp'; +import { MENU_ITEMS } from '../../data/menuData'; +import type { MenuItem } from '../../data/menuData'; +import { useSpeechRecognition } from '../../hooks/useSpeechRecognition'; +import { useSpeechSynthesis } from '../../hooks/useSpeechSynthesis'; +import type { VoiceState } from '../../hooks/useSpeechRecognition'; + +interface DetectedItem { + menuItem: MenuItem; + qty: number; +} + +interface VoiceAssistantModalProps { + open: boolean; + onClose: () => void; + onAddToCart: (itemId: string, quantity: number) => void; +} + +// Detect menu items from voice transcript +function parseTranscriptToItems(text: string): DetectedItem[] { + const lower = text.toLowerCase(); + const detectedItems: DetectedItem[] = []; + + for (const item of MENU_ITEMS) { + const itemNameLower = item.name.toLowerCase(); + // Check for item name in transcript + if (lower.includes(itemNameLower) || (item.nameHindi && lower.includes(item.nameHindi.toLowerCase()))) { + // Try to detect quantity (look for digits near the item name) + let qty = 1; + const qtxMatch = lower.match(/(\d+)\s*(?:plate|order|piece|nos|number)?(?:of\s+)?(?:\w+\s+)*/); + if (qtxMatch) { + const num = parseInt(qtxMatch[1], 10); + if (num >= 1 && num <= 10) qty = num; + } + if (/\btwo\b|\bdo\b/i.test(lower)) qty = 2; + if (/\bthree\b|\bteen\b/i.test(lower)) qty = 3; + if (/\bfour\b|\bchar\b/i.test(lower)) qty = 4; + + // avoid duplicates + if (!detectedItems.find((d) => d.menuItem.id === item.id)) { + detectedItems.push({ menuItem: item, qty }); + } + } + } + + return detectedItems; +} + +const QUICK_COMMANDS = [ + { label: '2 Butter Chicken aur Naan', text: '2 butter chicken and 2 garlic naan please' }, + { label: 'Hyderabadi Chicken Biryani', text: 'one hyderabadi chicken biryani for table 12' }, + { label: 'Veg Thali with Lassi', text: "chef's thali and one mango lassi" }, + { label: 'Paneer Tikka Starter', text: 'paneer tikka and masala chai' }, + { label: 'Seekh Kebab + Rogan Josh', text: 'seekh kebab starter and rogan josh main' }, +]; + +export const VoiceAssistantModal: React.FC = ({ + open, + onClose, + onAddToCart, +}) => { + const [internalVoiceState, setInternalVoiceState] = useState('idle'); + const [detectedItems, setDetectedItems] = useState([]); + const [confirmed, setConfirmed] = useState(false); + const [selectedLang, setSelectedLang] = useState<'en-IN' | 'hi-IN'>('en-IN'); + + const { + voiceState: recognitionState, + transcript, + interimTranscript, + isSupported, + startListening, + stopListening, + resetTranscript, + error, + } = useSpeechRecognition(); + + const { speak, cancel } = useSpeechSynthesis((s) => setInternalVoiceState(s)); + + const voiceState = internalVoiceState !== 'idle' ? internalVoiceState : recognitionState; + + // Parse items when transcript updates + useEffect(() => { + if (transcript.trim().length > 0 && recognitionState === 'thinking') { + const items = parseTranscriptToItems(transcript); + setDetectedItems(items); + setInternalVoiceState('thinking'); + + // AI confirmation response via TTS + if (items.length > 0) { + const itemList = items.map((d) => `${d.qty} ${d.menuItem.name}`).join(', '); + setTimeout(() => { + speak( + `Got it! I found ${items.length} item${items.length > 1 ? 's' : ''}: ${itemList}. Please confirm to add them to your cart.`, + selectedLang, + () => setInternalVoiceState('idle') + ); + }, 500); + } else { + setTimeout(() => { + speak( + "Sorry, I couldn't identify any items from your order. Please try again or use the quick commands below.", + selectedLang, + () => setInternalVoiceState('idle') + ); + setInternalVoiceState('idle'); + }, 400); + } + } + }, [transcript, recognitionState]); + + const handleClose = useCallback(() => { + cancel(); + resetTranscript(); + setDetectedItems([]); + setConfirmed(false); + setInternalVoiceState('idle'); + onClose(); + }, [cancel, resetTranscript, onClose]); + + const handleMicToggle = () => { + if (voiceState === 'listening') { + stopListening(); + } else { + setDetectedItems([]); + setConfirmed(false); + resetTranscript(); + startListening(selectedLang); + } + }; + + const handleQuickCommand = (text: string) => { + const items = parseTranscriptToItems(text); + setDetectedItems(items); + setInternalVoiceState('thinking'); + if (items.length > 0) { + const itemList = items.map((d) => `${d.qty} ${d.menuItem.name}`).join(', '); + speak( + `Great choice! Found ${itemList}. Tap confirm to add to your cart.`, + selectedLang, + () => setInternalVoiceState('idle') + ); + } + }; + + const handleConfirm = () => { + detectedItems.forEach((d) => onAddToCart(d.menuItem.id, d.qty)); + setConfirmed(true); + speak('Items added to your cart! Enjoy your meal.', selectedLang); + setTimeout(() => { + handleClose(); + }, 2000); + }; + + const orbColor = { + idle: { bg: 'linear-gradient(135deg, #ac2d00, #d53e0b)', shadow: '0 8px 24px rgba(172,45,0,0.4)' }, + listening: { bg: 'linear-gradient(135deg, #d53e0b, #e75a2b)', shadow: '0 0 0 16px rgba(213,62,11,0.2), 0 0 0 32px rgba(172,45,0,0.1)' }, + thinking: { bg: 'linear-gradient(135deg, #845000, #b07000)', shadow: '0 8px 24px rgba(132,80,0,0.5)' }, + speaking: { bg: 'linear-gradient(135deg, #006a2e, #009c44)', shadow: '0 0 0 16px rgba(0,106,46,0.2), 0 0 0 32px rgba(0,106,46,0.1)' }, + error: { bg: 'linear-gradient(135deg, #ba1a1a, #ff5449)', shadow: '0 8px 24px rgba(186,26,26,0.5)' }, + }; + + const orbLabel = { + idle: 'Tap to Speak', + listening: '🎙️ Listening...', + thinking: '🤔 Processing...', + speaking: '🔊 AI Speaking...', + error: '⚠️ Try Again', + }; + + return ( + + + {/* Handle Bar */} + + + + + {/* Header */} + + + + + + AI Voice Assistant + + + Speak your order naturally in English or Hindi + + + + + + + + + {/* Scrollable Body */} + + {!isSupported && ( + + Voice recognition requires Google Chrome browser. You can still use quick commands below. + + )} + + {error && ( + + {error} + + )} + + {/* Voice Orb */} + + + {voiceState === 'listening' ? ( + + ) : voiceState === 'speaking' ? ( + + ) : voiceState === 'thinking' ? ( + + ) : ( + + )} + + + + {orbLabel[voiceState]} + + + {voiceState === 'listening' && ( + + )} + + {/* Language Toggle */} + + {['en-IN', 'hi-IN'].map((lang) => ( + setSelectedLang(lang as 'en-IN' | 'hi-IN')} + color={selectedLang === lang ? 'primary' : 'default'} + variant={selectedLang === lang ? 'filled' : 'outlined'} + sx={{ fontWeight: 700 }} + /> + ))} + + + + {/* Live Transcript */} + {(transcript || interimTranscript) && ( + + + WHAT I HEARD: + + + "{transcript}{interimTranscript && {interimTranscript}}" + + + )} + + {/* Detected Items */} + 0}> + + {detectedItems.length > 0 && ( + + + ✅ Items Detected: + + {detectedItems.map((d) => ( + + + + {d.qty}× {d.menuItem.name} + + + ₹{(d.qty * d.menuItem.price).toFixed(0)} + + + + + ))} + + + + + + + )} + + + + {/* Quick Commands */} + + + QUICK COMMANDS + + + + + {QUICK_COMMANDS.map((cmd, idx) => ( + handleQuickCommand(cmd.text)} + sx={{ + px: 2, + py: 1.5, + borderRadius: '12px', + border: '1px solid #e4beb4', + cursor: 'pointer', + display: 'flex', + alignItems: 'center', + gap: 1.5, + '&:hover': { bgcolor: '#ffdbd1', borderColor: '#ac2d00' }, + transition: 'all 0.15s ease', + }} + > + + + "{cmd.label}" + + + ))} + + + + + ); +}; diff --git a/src/components/kds/KDSKanban.tsx b/src/components/kds/KDSKanban.tsx new file mode 100644 index 0000000..8564ed1 --- /dev/null +++ b/src/components/kds/KDSKanban.tsx @@ -0,0 +1,202 @@ +import React, { useState } from 'react'; +import { + Box, + Grid, + Paper, + Typography, + Chip, + Button, + TextField, + InputAdornment, + ButtonGroup, +} from '@mui/material'; +import SearchIcon from '@mui/icons-material/Search'; +import AddIcon from '@mui/icons-material/Add'; +import RestaurantMenuIcon from '@mui/icons-material/RestaurantMenu'; +import type { KDSOrder, OrderStatus, OrderType } from '../../types'; +import { KDSTicketCard } from './KDSTicketCard'; + +interface KDSKanbanProps { + orders: KDSOrder[]; + onStatusChange: (id: string, newStatus: OrderStatus) => void; + onToggleItem: (orderId: string, itemId: string) => void; + onAddSampleOrder: () => void; +} + +export const KDSKanban: React.FC = ({ + orders, + onStatusChange, + onToggleItem, + onAddSampleOrder, +}) => { + const [filterType, setFilterType] = useState<'ALL' | OrderType>('ALL'); + const [searchQuery, setSearchQuery] = useState(''); + + const filteredOrders = orders.filter((order) => { + const matchesType = filterType === 'ALL' || order.orderType === filterType; + const matchesSearch = + order.ticketNumber.toLowerCase().includes(searchQuery.toLowerCase()) || + (order.tableNumber && order.tableNumber.includes(searchQuery)) || + (order.customerName && order.customerName.toLowerCase().includes(searchQuery.toLowerCase())) || + order.items.some((i) => i.name.toLowerCase().includes(searchQuery.toLowerCase())); + return matchesType && matchesSearch; + }); + + const columns: { status: OrderStatus; title: string; color: string; bg: string }[] = [ + { status: 'pending', title: 'PENDING', color: '#ba1a1a', bg: '#ffdad6' }, + { status: 'preparing', title: 'IN PREPARATION', color: '#845000', bg: '#ffddba' }, + { status: 'ready', title: 'READY FOR PICKUP / SERVE', color: '#11651d', bg: '#a3f69c' }, + { status: 'served', title: 'SERVED & COMPLETED', color: '#546067', bg: '#e2e2e2' }, + ]; + + return ( + + {/* Top Filter Bar */} + + + + + KDS Kanban Board + + + + {(['ALL', 'Dine-In', 'Takeaway', 'Delivery'] as const).map((type) => ( + + ))} + + + + + setSearchQuery(e.target.value)} + slotProps={{ + input: { + startAdornment: ( + + + + ), + }, + }} + sx={{ width: { xs: 200, sm: 260 } }} + /> + + + + + + {/* 4 Column Kanban Board Grid */} + + {columns.map((col) => { + const colOrders = filteredOrders.filter((o) => o.status === col.status); + return ( + + + {/* Column Header */} + + + {col.title} + + + + + {/* Column Tickets */} + + {colOrders.length === 0 ? ( + + + No orders in {col.title.toLowerCase()} + + + ) : ( + colOrders.map((order) => ( + + )) + )} + + + + ); + })} + + + ); +}; diff --git a/src/components/kds/KDSTicketCard.tsx b/src/components/kds/KDSTicketCard.tsx new file mode 100644 index 0000000..2335374 --- /dev/null +++ b/src/components/kds/KDSTicketCard.tsx @@ -0,0 +1,244 @@ +import React from 'react'; +import { + Card, + CardContent, + CardActions, + Typography, + Box, + Button, + Checkbox, + Divider, + Chip, + IconButton, + Tooltip, +} from '@mui/material'; +import AccessTimeIcon from '@mui/icons-material/AccessTime'; +import ArrowForwardIcon from '@mui/icons-material/ArrowForward'; +import ArrowBackIcon from '@mui/icons-material/ArrowBack'; +import CheckCircleIcon from '@mui/icons-material/CheckCircle'; +import PriorityHighIcon from '@mui/icons-material/PriorityHigh'; +import type { KDSOrder, OrderStatus } from '../../types'; +import { StatusBadge } from '../common/StatusBadge'; + +interface KDSTicketCardProps { + order: KDSOrder; + onStatusChange: (id: string, newStatus: OrderStatus) => void; + onToggleItem: (orderId: string, itemId: string) => void; +} + +export const KDSTicketCard: React.FC = ({ + order, + onStatusChange, + onToggleItem, +}) => { + // Calculate SLA timer color + const isUrgent = order.timeElapsedMinutes >= 25 || order.priority === 'urgent'; + const isWarning = order.timeElapsedMinutes >= 15 && order.timeElapsedMinutes < 25; + + const timerBg = isUrgent ? '#ffdad6' : isWarning ? '#ffddba' : '#e2e2e2'; + const timerColor = isUrgent ? '#93000a' : isWarning ? '#673d00' : '#1a1c1c'; + + const nextStatusMap: Record = { + pending: 'preparing', + preparing: 'ready', + ready: 'served', + served: null, + }; + + const prevStatusMap: Record = { + pending: null, + preparing: 'pending', + ready: 'preparing', + served: 'ready', + }; + + const nextStatus = nextStatusMap[order.status]; + const prevStatus = prevStatusMap[order.status]; + + const actionButtonText = { + pending: 'START PREP', + preparing: 'MARK READY', + ready: 'COMPLETE / SERVE', + served: 'COMPLETED', + }[order.status]; + + const allItemsChecked = order.items.every((i) => i.completed); + + return ( + + {/* Ticket Header */} + + + + + #{order.ticketNumber} + + + {order.priority === 'urgent' && ( + } + label="URGENT" + size="small" + color="error" + sx={{ height: 20, fontSize: '0.65rem', fontWeight: 800 }} + /> + )} + + + {order.tableNumber ? `Table ${order.tableNumber}` : order.customerName || 'Walk-in Guest'} + {order.serverName && ` • Server: ${order.serverName}`} + + + + {/* SLA Timer Badge */} + + + + {order.timeElapsedMinutes}m + + + + + {/* Ticket Body / Items */} + + + {order.items.map((item) => ( + onToggleItem(order.id, item.id)} + sx={{ + display: 'flex', + alignItems: 'flex-start', + justifyContent: 'space-between', + p: 0.8, + borderRadius: '6px', + cursor: 'pointer', + backgroundColor: item.completed ? '#f0eded' : 'transparent', + textDecoration: item.completed ? 'line-through' : 'none', + opacity: item.completed ? 0.6 : 1, + '&:hover': { + backgroundColor: '#f6f3f2', + }, + }} + > + + + + + + {item.quantity}x + + + {item.name} + + {item.dietary && } + + + {item.notes && ( + + ⚠️ {item.notes} + + )} + + + + + ${(item.price * item.quantity).toFixed(2)} + + + ))} + + + + + + {/* Ticket Footer Actions */} + + + {prevStatus && ( + + onStatusChange(order.id, prevStatus)}> + + + + )} + + + {nextStatus ? ( + + ) : ( + } + label="SERVED" + color="success" + size="small" + sx={{ fontWeight: 800 }} + /> + )} + + + ); +}; diff --git a/src/components/table/TableLandingView.tsx b/src/components/table/TableLandingView.tsx new file mode 100644 index 0000000..abe837b --- /dev/null +++ b/src/components/table/TableLandingView.tsx @@ -0,0 +1,283 @@ +import React, { useState } from 'react'; +import { + Box, + Grid, + Paper, + Typography, + Button, + Card, + CardMedia, + Chip, + Dialog, + DialogTitle, + DialogContent, + DialogActions, + Divider, + Alert, +} from '@mui/material'; +import TableRestaurantIcon from '@mui/icons-material/TableRestaurant'; +import NotificationsActiveIcon from '@mui/icons-material/NotificationsActive'; +import ReceiptLongIcon from '@mui/icons-material/ReceiptLong'; +import LocalOfferIcon from '@mui/icons-material/LocalOffer'; +import RestaurantIcon from '@mui/icons-material/Restaurant'; +import CheckCircleIcon from '@mui/icons-material/CheckCircle'; +import { StatusBadge } from '../common/StatusBadge'; + +export const TableLandingView: React.FC = () => { + const [waiterCalled, setWaiterCalled] = useState(false); + const [billOpen, setBillOpen] = useState(false); + + const activeTableOrder = [ + { name: 'Butter Chicken Special', qty: 2, price: 18.0, total: 36.0 }, + { name: 'Paneer Tikka Masala', qty: 1, price: 16.0, total: 16.0 }, + { name: 'Truffle Garlic Naan', qty: 4, price: 5.0, total: 20.0 }, + { name: 'Mango Lassi Craft', qty: 3, price: 5.0, total: 15.0 }, + ]; + + const subtotal = activeTableOrder.reduce((acc, i) => acc + i.total, 0); + const tax = subtotal * 0.1; + const grandTotal = subtotal + tax; + + const chefRecommendations = [ + { + name: 'Gulab Jamun Flambé', + desc: 'Warm milk dumplings soaked in saffron syrup with pistachio crumble.', + price: '$8.50', + dietary: 'veg' as const, + image: 'https://images.unsplash.com/photo-1589301760014-d929f3979dbc?w=500&auto=format&fit=crop&q=60', + }, + { + name: 'Masala Chai Gelato', + desc: 'Artisanal spice-infused Indian tea gelato topped with cardamom tuile.', + price: '$7.00', + dietary: 'veg' as const, + image: 'https://images.unsplash.com/photo-1563805042-7684c019e1cb?w=500&auto=format&fit=crop&q=60', + }, + ]; + + const handleCallWaiter = () => { + setWaiterCalled(true); + setTimeout(() => { + setWaiterCalled(false); + }, 4000); + }; + + return ( + + {/* Table Welcome Banner */} + + + + } + label="TABLE #12 • SEATED (4 GUESTS)" + sx={{ bgcolor: 'rgba(255, 255, 255, 0.2)', color: '#ffffff', fontWeight: 800, mb: 1 }} + /> + + Welcome to RestroAI Dining + + + Active Session • Started 42 mins ago • Server: Rahul S. + + + + + + + + {waiterCalled && ( + + 🔔 Alert sent to Server Rahul S. A staff member is on their way to Table 12! + + )} + + {/* Quick Action Grid */} + + + setBillOpen(true)} + sx={{ + p: 2.5, + cursor: 'pointer', + bgcolor: '#ffffff', + border: '1px solid #e4beb4', + '&:hover': { bgcolor: '#ffdbd1', transform: 'translateY(-2px)' }, + transition: 'all 0.2s ease', + }} + > + + + View Table Bill + + + Instant summary: ${grandTotal.toFixed(2)} + + + + + + + + + Request Water + + + Refill table water jug + + + + + + + + + Add Extra Breads + + + Quick re-order Naan / Roti + + + + + + + + + Special Offers + + + 15% off on Chef Desserts + + + + + + {/* AI Recommended Desserts */} + + + ✨ Chef's Pairing Recommendations for Table 12 + + + + {chefRecommendations.map((item, index) => ( + + + + + + + {item.name} + + + + + {item.desc} + + + {item.price} + + + + + ))} + + + + {/* Digital Bill Modal */} + setBillOpen(false)} maxWidth="xs" fullWidth> + + Table 12 - Digital Bill Summary + + + {activeTableOrder.map((i, idx) => ( + + + {i.qty}x {i.name} + + + ${i.total.toFixed(2)} + + + ))} + + + Subtotal + ${subtotal.toFixed(2)} + + + GST / Tax (10%) + ${tax.toFixed(2)} + + + + Grand Total + ${grandTotal.toFixed(2)} + + + + + + + + + ); +}; diff --git a/src/components/voice/VoiceOrderingView.tsx b/src/components/voice/VoiceOrderingView.tsx new file mode 100644 index 0000000..9ee9822 --- /dev/null +++ b/src/components/voice/VoiceOrderingView.tsx @@ -0,0 +1,210 @@ +import React, { useState } from 'react'; +import { + Box, + Typography, + Button, + Chip, + Grid, + List, + ListItem, + ListItemText, + Paper, + Divider, +} from '@mui/material'; +import MicIcon from '@mui/icons-material/Mic'; +import GraphicEqIcon from '@mui/icons-material/GraphicEq'; +import SmartToyIcon from '@mui/icons-material/SmartToy'; +import AddShoppingCartIcon from '@mui/icons-material/AddShoppingCart'; +import CheckCircleOutlinedIcon from '@mui/icons-material/CheckCircleOutlined'; +import type { VoiceCommandSuggestion } from '../../types'; + +interface VoiceOrderingViewProps { + onAddOrderFromVoice: (transcript: string) => void; +} + +export const VoiceOrderingView: React.FC = ({ onAddOrderFromVoice }) => { + const [isListening, setIsListening] = useState(false); + const [transcript, setTranscript] = useState( + 'Do Butter Chicken, teen Garlic Naan aur ek Mango Lassi Table 12 ke liye' + ); + const [detectedItems] = useState([ + { name: 'Butter Chicken', qty: 2, price: 360, dietary: 'non-veg' as const }, + { name: 'Garlic Naan', qty: 3, price: 80, dietary: 'veg' as const }, + { name: 'Mango Lassi', qty: 1, price: 120, dietary: 'veg' as const }, + ]); + const [submitted, setSubmitted] = useState(false); + + const samplePrompts: VoiceCommandSuggestion[] = [ + { + id: '1', + label: '2 Butter Chicken & Garlic Naan – Table 12', + prompt: 'Do Butter Chicken aur do Garlic Naan Table 12 ke liye', + category: 'order', + }, + { + id: '2', + label: 'Hyderabadi Biryani + Raita – Table 8', + prompt: 'Ek Hyderabadi Chicken Biryani with extra raita for Table 8', + category: 'order', + }, + { + id: '3', + label: 'Jain Palak Paneer – no onion no garlic', + prompt: 'Add 1 Palak Paneer Jain preparation no onion no garlic for Table 4', + category: 'order', + }, + { + id: '4', + label: 'Extra Cutlery + Tissue for Table 3', + prompt: 'Please send extra cutlery and tissue paper to Table 3', + category: 'action', + }, + ]; + + const handleConfirmOrder = () => { + onAddOrderFromVoice(transcript); + setSubmitted(true); + setTimeout(() => setSubmitted(false), 3000); + }; + + const totalValue = detectedItems.reduce((sum, i) => sum + i.price * i.qty, 0); + + return ( + + + + Staff Voice Assistant Terminal + + + Hands-free voice intake for servers & kitchen staff. Supports Hindi, English & Hinglish. + + + + {/* Voice Orb */} + + setIsListening(!isListening)} + sx={{ + width: 130, + height: 130, + borderRadius: '50%', + mx: 'auto', + mb: 3, + cursor: 'pointer', + background: isListening + ? 'radial-gradient(circle, #d53e0b 0%, #ac2d00 70%)' + : 'radial-gradient(circle, #ac2d00 0%, #872100 100%)', + boxShadow: isListening + ? '0 0 0 18px rgba(213, 62, 11, 0.2), 0 0 0 36px rgba(172, 45, 0, 0.1)' + : '0 4px 20px rgba(172, 45, 0, 0.3)', + display: 'flex', + alignItems: 'center', + justifyContent: 'center', + color: '#ffffff', + transition: 'all 0.3s ease-in-out', + transform: isListening ? 'scale(1.08)' : 'scale(1)', + }} + > + {isListening ? : } + + + + {isListening ? '🎙️ Listening & Parsing Voice Input...' : 'Tap Orb or Speak to Begin Order'} + + + Multilingual: English · Hindi · Hinglish + + + {/* Live Transcript */} + + + LIVE TRANSCRIPT: + + + "{transcript}" + + + + + {/* Quick Prompts */} + + + Suggested Quick Voice Commands + + + {samplePrompts.map((s) => ( + + } + label={s.label} + onClick={() => { setTranscript(s.prompt); setIsListening(true); setTimeout(() => setIsListening(false), 1500); }} + clickable + sx={{ width: '100%', justifyContent: 'flex-start', py: 2.5, px: 1, fontWeight: 700, bgcolor: '#ffffff', border: '1px solid #e4beb4', '&:hover': { bgcolor: '#ffdbd1' } }} + /> + + ))} + + + + {/* Detected Items */} + + + AI Extracted Items + + + + + {detectedItems.map((item, idx) => ( + + + + {item.qty}× + + {item.name}} + secondary={`Subtotal: ₹${(item.qty * item.price)}`} + /> + + + + ))} + + + + + Total: ₹{totalValue} + + + + + + + + ); +}; diff --git a/src/data/menuData.ts b/src/data/menuData.ts new file mode 100644 index 0000000..2569623 --- /dev/null +++ b/src/data/menuData.ts @@ -0,0 +1,376 @@ +export interface MenuItem { + id: string; + name: string; + nameHindi?: string; + category: 'Starters' | 'Biryani' | 'Mains' | 'Breads' | 'Drinks' | 'Desserts' | 'Specials'; + price: number; // INR ₹ + prepTimeMinutes: number; + dietary: 'veg' | 'non-veg' | 'jain' | 'vegan'; + isChefSpecial?: boolean; + isBestseller?: boolean; + description: string; + image: string; + spiceLevel?: 'mild' | 'medium' | 'hot' | 'extra-hot'; + tags?: string[]; +} + +export const MENU_ITEMS: MenuItem[] = [ + // ─── STARTERS ─────────────────────────────────────────────────── + { + id: 'm1', + name: 'Samosa Chaat', + nameHindi: 'समोसा चाट', + category: 'Starters', + price: 160, + prepTimeMinutes: 8, + dietary: 'veg', + isBestseller: true, + description: 'Crispy golden samosas crushed and topped with tangy tamarind chutney, mint chutney, sev, and fresh pomegranate.', + image: 'https://images.unsplash.com/photo-1630409346824-4f0e7b080087?w=600&auto=format&fit=crop&q=80', + spiceLevel: 'medium', + tags: ['Popular', 'Street Food'], + }, + { + id: 'm2', + name: 'Paneer Tikka', + nameHindi: 'पनीर टिक्का', + category: 'Starters', + price: 280, + prepTimeMinutes: 15, + dietary: 'veg', + isChefSpecial: true, + description: 'Marinated cottage cheese cubes grilled in tandoor with bell peppers, onions and a smoky tikka masala spice blend.', + image: 'https://images.unsplash.com/photo-1567188040759-fb8a883dc6d8?w=600&auto=format&fit=crop&q=80', + spiceLevel: 'medium', + tags: ["Chef's Special", 'Tandoor'], + }, + { + id: 'm3', + name: 'Chicken 65', + nameHindi: 'चिकन 65', + category: 'Starters', + price: 320, + prepTimeMinutes: 15, + dietary: 'non-veg', + isBestseller: true, + description: 'South Indian style crispy deep-fried chicken marinated in yogurt, red chilli, ginger-garlic and curry leaves.', + image: 'https://images.unsplash.com/photo-1610057099443-fde8c4d50f91?w=600&auto=format&fit=crop&q=80', + spiceLevel: 'hot', + tags: ['South Indian', 'Crispy'], + }, + { + id: 'm4', + name: 'Hara Bhara Kabab', + nameHindi: 'हरा भरा कबाब', + category: 'Starters', + price: 240, + prepTimeMinutes: 12, + dietary: 'veg', + description: 'Spinach and peas patties blended with paneer and mild spices, pan-fried golden. Served with mint chutney.', + image: 'https://images.unsplash.com/photo-1555126634-323283e090fa?w=600&auto=format&fit=crop&q=80', + spiceLevel: 'mild', + tags: ['Healthy', 'Spinach'], + }, + { + id: 'm5', + name: 'Seekh Kebab', + nameHindi: 'सीख कबाब', + category: 'Starters', + price: 340, + prepTimeMinutes: 18, + dietary: 'non-veg', + isChefSpecial: true, + description: 'Minced lamb kebabs skewered and slow-cooked over charcoal. Served with laccha onions and green chutney.', + image: 'https://images.unsplash.com/photo-1599487488170-d11ec9c172f0?w=600&auto=format&fit=crop&q=80', + spiceLevel: 'medium', + tags: ['Charcoal Grilled', "Chef's Special"], + }, + + // ─── BIRYANI ──────────────────────────────────────────────────── + { + id: 'm6', + name: 'Hyderabadi Chicken Biryani', + nameHindi: 'हैदराबादी चिकन बिरयानी', + category: 'Biryani', + price: 380, + prepTimeMinutes: 30, + dietary: 'non-veg', + isChefSpecial: true, + isBestseller: true, + description: 'Slow-cooked dum biryani with tender chicken pieces, aged basmati rice, saffron, caramelized onions and whole spices.', + image: 'https://images.unsplash.com/photo-1563379091339-03b21ab4a4f8?w=600&auto=format&fit=crop&q=80', + spiceLevel: 'medium', + tags: ['Dum Style', 'Hyderabadi', 'Bestseller'], + }, + { + id: 'm7', + name: 'Veg Dum Biryani', + nameHindi: 'वेज दम बिरयानी', + category: 'Biryani', + price: 300, + prepTimeMinutes: 25, + dietary: 'veg', + description: 'Fragrant basmati rice layered with seasonal vegetables, paneer, saffron and aromatic whole spices. Sealed and dum cooked.', + image: 'https://images.unsplash.com/photo-1600891964599-f61ba0e24092?w=600&auto=format&fit=crop&q=80', + spiceLevel: 'medium', + tags: ['Dum Style', 'Veg'], + }, + { + id: 'm8', + name: 'Mutton Biryani', + nameHindi: 'मटन बिरयानी', + category: 'Biryani', + price: 460, + prepTimeMinutes: 35, + dietary: 'non-veg', + description: 'Tender slow-braised mutton pieces layered with fragrant saffron rice, fried onions, fresh mint and yogurt marinade.', + image: 'https://images.unsplash.com/photo-1589302168068-964664d93dc0?w=600&auto=format&fit=crop&q=80', + spiceLevel: 'hot', + tags: ['Premium', 'Slow Cooked'], + }, + + // ─── MAINS ────────────────────────────────────────────────────── + { + id: 'm9', + name: 'Butter Chicken', + nameHindi: 'बटर चिकन', + category: 'Mains', + price: 360, + prepTimeMinutes: 20, + dietary: 'non-veg', + isBestseller: true, + description: 'Iconic tandoori chicken simmered in velvety smooth tomato-butter-cream gravy with aromatic spices. Pairs perfectly with naan.', + image: 'https://images.unsplash.com/photo-1588166524941-3bf61a9c41db?w=600&auto=format&fit=crop&q=80', + spiceLevel: 'mild', + tags: ['Classic', 'Bestseller'], + }, + { + id: 'm10', + name: 'Dal Makhani', + nameHindi: 'दाल मखनी', + category: 'Mains', + price: 280, + prepTimeMinutes: 20, + dietary: 'veg', + isBestseller: true, + description: 'Black lentils and red kidney beans slow-cooked overnight in a rich buttery tomato gravy. A Punjabi classic.', + image: 'https://images.unsplash.com/photo-1546833999-b9f581a1996d?w=600&auto=format&fit=crop&q=80', + spiceLevel: 'mild', + tags: ['Punjabi', 'Classic'], + }, + { + id: 'm11', + name: 'Palak Paneer', + nameHindi: 'पालक पनीर', + category: 'Mains', + price: 300, + prepTimeMinutes: 18, + dietary: 'jain', + description: 'Fresh cottage cheese cubes in a vibrant, spiced pureed spinach gravy. Jain preparation available without onion and garlic.', + image: 'https://images.unsplash.com/photo-1626132647523-66d34b9f7f99?w=600&auto=format&fit=crop&q=80', + spiceLevel: 'mild', + tags: ['Healthy', 'Jain Available'], + }, + { + id: 'm12', + name: 'Chicken Kadhai', + nameHindi: 'चिकन कड़ाही', + category: 'Mains', + price: 380, + prepTimeMinutes: 22, + dietary: 'non-veg', + isChefSpecial: true, + description: 'Bone-in chicken cooked in a traditional iron kadhai with fresh tomatoes, capsicum, ginger and whole spices.', + image: 'https://images.unsplash.com/photo-1631452180519-c014fe946bc7?w=600&auto=format&fit=crop&q=80', + spiceLevel: 'hot', + tags: ['Kadhai Style', "Chef's Special"], + }, + { + id: 'm13', + name: 'Paneer Butter Masala', + nameHindi: 'पनीर बटर मसाला', + category: 'Mains', + price: 320, + prepTimeMinutes: 18, + dietary: 'veg', + description: 'Soft paneer chunks in a rich, creamy, mildly spiced tomato-cashew-butter gravy. A restaurant favourite.', + image: 'https://images.unsplash.com/photo-1565557623262-b51c2513a641?w=600&auto=format&fit=crop&q=80', + spiceLevel: 'mild', + tags: ['Popular'], + }, + { + id: 'm14', + name: 'Rogan Josh', + nameHindi: 'रोगन जोश', + category: 'Mains', + price: 440, + prepTimeMinutes: 25, + dietary: 'non-veg', + description: 'Authentic Kashmiri slow-braised mutton in a deep burgundy gravy of Kashmiri chillies, fennel, and dry ginger.', + image: 'https://images.unsplash.com/photo-1545247181-516773cae754?w=600&auto=format&fit=crop&q=80', + spiceLevel: 'medium', + tags: ['Kashmiri', 'Premium'], + }, + + // ─── BREADS ────────────────────────────────────────────────────── + { + id: 'm15', + name: 'Butter Naan', + nameHindi: 'बटर नान', + category: 'Breads', + price: 60, + prepTimeMinutes: 5, + dietary: 'veg', + description: 'Soft, fluffy leavened bread freshly baked in a tandoor and generously brushed with salted cultured butter.', + image: 'https://images.unsplash.com/photo-1601050690597-df0568f70950?w=600&auto=format&fit=crop&q=80', + tags: ['Tandoor'], + }, + { + id: 'm16', + name: 'Garlic Naan', + nameHindi: 'लहसुन नान', + category: 'Breads', + price: 80, + prepTimeMinutes: 5, + dietary: 'veg', + isBestseller: true, + description: 'Tandoori naan generously topped with roasted garlic, fresh coriander, and whipped butter. Best paired with any gravy.', + image: 'https://images.unsplash.com/photo-1574071318508-1cdbab80d002?w=600&auto=format&fit=crop&q=80', + tags: ['Bestseller', 'Tandoor'], + }, + { + id: 'm17', + name: 'Lachha Paratha', + nameHindi: 'लच्छा पराठा', + category: 'Breads', + price: 70, + prepTimeMinutes: 7, + dietary: 'veg', + description: 'Crispy, flaky multi-layered whole wheat paratha cooked on a tawa with pure ghee. A Punjabi comfort classic.', + image: 'https://images.unsplash.com/photo-1667872078958-4c47b44f4f37?w=600&auto=format&fit=crop&q=80', + tags: ['Ghee', 'Crispy'], + }, + + // ─── DRINKS ────────────────────────────────────────────────────── + { + id: 'm18', + name: 'Mango Lassi', + nameHindi: 'आम की लस्सी', + category: 'Drinks', + price: 120, + prepTimeMinutes: 3, + dietary: 'veg', + isBestseller: true, + description: 'Fresh Alphonso mango puree blended with thick homemade yogurt, a pinch of cardamom and rose water. Chilled and served tall.', + image: 'https://images.unsplash.com/photo-1527161153332-99adcc6f2966?w=600&auto=format&fit=crop&q=80', + tags: ['Summer Special', 'Fresh'], + }, + { + id: 'm19', + name: 'Masala Chai', + nameHindi: 'मसाला चाय', + category: 'Drinks', + price: 80, + prepTimeMinutes: 5, + dietary: 'veg', + description: 'Aromatic Indian spiced tea brewed with ginger, cardamom, cloves, cinnamon and full-fat milk. Served in a kulhad.', + image: 'https://images.unsplash.com/photo-1556679343-c7306c1976bc?w=600&auto=format&fit=crop&q=80', + tags: ['Kulhad', 'Hot'], + }, + { + id: 'm20', + name: 'Sweet Lime Soda', + nameHindi: 'नींबू सोडा', + category: 'Drinks', + price: 90, + prepTimeMinutes: 3, + dietary: 'vegan', + description: 'Freshly squeezed lime juice with black salt, roasted cumin, and chilled sparkling soda. Refreshing and tangy.', + image: 'https://images.unsplash.com/photo-1513558161293-cdaf765ed2fd?w=600&auto=format&fit=crop&q=80', + tags: ['Fresh', 'Refreshing'], + }, + { + id: 'm21', + name: 'Rose Sharbat', + nameHindi: 'गुलाब शरबत', + category: 'Drinks', + price: 100, + prepTimeMinutes: 3, + dietary: 'vegan', + description: 'Traditional rose syrup with chilled water, sabja seeds and a splash of lime. A classic summer cooler.', + image: 'https://images.unsplash.com/photo-1541014741259-de529411b96a?w=600&auto=format&fit=crop&q=80', + tags: ['Refreshing', 'Traditional'], + }, + + // ─── DESSERTS ──────────────────────────────────────────────────── + { + id: 'm22', + name: 'Gulab Jamun', + nameHindi: 'गुलाब जामुन', + category: 'Desserts', + price: 140, + prepTimeMinutes: 5, + dietary: 'veg', + isBestseller: true, + description: 'Soft, melt-in-your-mouth khoya dumplings soaked in warm cardamom and saffron-scented rose sugar syrup. Served hot.', + image: 'https://images.unsplash.com/photo-1666190494547-9e02d01c32e2?w=600&auto=format&fit=crop&q=80', + tags: ['Hot', 'Classic'], + }, + { + id: 'm23', + name: 'Rasmalai', + nameHindi: 'रसमलाई', + category: 'Desserts', + price: 160, + prepTimeMinutes: 5, + dietary: 'veg', + isChefSpecial: true, + description: 'Delicate soft chenna dumplings soaked in chilled thickened saffron milk (rabri) garnished with crushed pistachios.', + image: 'https://images.unsplash.com/photo-1601303516534-bf4c44e9fedb?w=600&auto=format&fit=crop&q=80', + tags: ['Bengali', "Chef's Special", 'Cold'], + }, + { + id: 'm24', + name: 'Gajar Halwa', + nameHindi: 'गाजर का हलवा', + category: 'Desserts', + price: 150, + prepTimeMinutes: 5, + dietary: 'veg', + description: 'Slow-cooked grated carrots in pure ghee, whole milk, sugar, and khoya. Garnished with almonds and cardamom.', + image: 'https://images.unsplash.com/photo-1604152135912-04a022e23696?w=600&auto=format&fit=crop&q=80', + tags: ['Winter Special', 'Ghee'], + }, + + // ─── SPECIALS ───────────────────────────────────────────────────── + { + id: 'm25', + name: 'Chef\'s Thali', + nameHindi: 'शेफ की थाली', + category: 'Specials', + price: 550, + prepTimeMinutes: 25, + dietary: 'veg', + isChefSpecial: true, + isBestseller: true, + description: 'A complete Indian feast: Dal Makhani, Paneer Butter Masala, 2 Rotis, Steamed Rice, Salad, Papad, Pickle and Gulab Jamun.', + image: 'https://images.unsplash.com/photo-1585937421612-70a008356fbe?w=600&auto=format&fit=crop&q=80', + tags: ['Thali', 'Value', 'Complete Meal'], + }, + { + id: 'm26', + name: 'Non-Veg Thali', + nameHindi: 'नॉन-वेज थाली', + category: 'Specials', + price: 650, + prepTimeMinutes: 30, + dietary: 'non-veg', + isChefSpecial: true, + description: 'Butter Chicken, Mutton Keema, 3 Butter Naans, Steamed Rice, Raita, Salad, Papad, Pickle and Gulab Jamun.', + image: 'https://images.unsplash.com/photo-1567337710282-00832b415979?w=600&auto=format&fit=crop&q=80', + tags: ['Thali', 'Value', 'Complete Meal'], + }, +]; + +export const CATEGORIES = ['All', 'Starters', 'Biryani', 'Mains', 'Breads', 'Drinks', 'Desserts', 'Specials'] as const; +export type CategoryType = typeof CATEGORIES[number]; diff --git a/src/hooks/useSpeechRecognition.ts b/src/hooks/useSpeechRecognition.ts new file mode 100644 index 0000000..d5dec72 --- /dev/null +++ b/src/hooks/useSpeechRecognition.ts @@ -0,0 +1,153 @@ +import { useState, useEffect, useRef, useCallback } from 'react'; + +interface SpeechRecognitionEvent extends Event { + results: SpeechRecognitionResultList; + resultIndex: number; +} + +interface SpeechRecognitionErrorEvent extends Event { + error: string; +} + +interface ISpeechRecognition extends EventTarget { + lang: string; + continuous: boolean; + interimResults: boolean; + maxAlternatives: number; + start(): void; + stop(): void; + abort(): void; + onresult: ((event: SpeechRecognitionEvent) => void) | null; + onerror: ((event: SpeechRecognitionErrorEvent) => void) | null; + onend: (() => void) | null; + onstart: (() => void) | null; +} + +declare global { + interface Window { + SpeechRecognition: new () => ISpeechRecognition; + webkitSpeechRecognition: new () => ISpeechRecognition; + } +} + +export type VoiceState = 'idle' | 'listening' | 'thinking' | 'speaking' | 'error'; + +interface UseSpeechRecognitionReturn { + voiceState: VoiceState; + transcript: string; + interimTranscript: string; + isSupported: boolean; + startListening: (lang?: string) => void; + stopListening: () => void; + resetTranscript: () => void; + error: string | null; +} + +export const useSpeechRecognition = (): UseSpeechRecognitionReturn => { + const [voiceState, setVoiceState] = useState('idle'); + const [transcript, setTranscript] = useState(''); + const [interimTranscript, setInterimTranscript] = useState(''); + const [error, setError] = useState(null); + const recognitionRef = useRef(null); + + const isSupported = + typeof window !== 'undefined' && + ('SpeechRecognition' in window || 'webkitSpeechRecognition' in window); + + useEffect(() => { + return () => { + recognitionRef.current?.abort(); + }; + }, []); + + const startListening = useCallback((lang: string = 'en-IN') => { + if (!isSupported) { + setError('Voice recognition is not supported in this browser. Please use Chrome.'); + setVoiceState('error'); + return; + } + + const SpeechRecognitionAPI = window.SpeechRecognition || window.webkitSpeechRecognition; + const recognition = new SpeechRecognitionAPI(); + recognitionRef.current = recognition; + + recognition.lang = lang; + recognition.continuous = false; + recognition.interimResults = true; + recognition.maxAlternatives = 1; + + recognition.onstart = () => { + setVoiceState('listening'); + setError(null); + setInterimTranscript(''); + }; + + recognition.onresult = (event: SpeechRecognitionEvent) => { + let interim = ''; + let final = ''; + + for (let i = event.resultIndex; i < event.results.length; i++) { + const result = event.results[i]; + if (result.isFinal) { + final += result[0].transcript; + } else { + interim += result[0].transcript; + } + } + + setInterimTranscript(interim); + if (final) { + setTranscript((prev) => prev + ' ' + final.trim()); + setVoiceState('thinking'); + } + }; + + recognition.onerror = (event: SpeechRecognitionErrorEvent) => { + const errorMessages: Record = { + 'no-speech': 'No speech detected. Please try again.', + 'audio-capture': 'Microphone not accessible.', + 'not-allowed': 'Microphone permission denied. Please allow access.', + 'network': 'Network error. Check your internet connection.', + }; + setError(errorMessages[event.error] || `Voice error: ${event.error}`); + setVoiceState('error'); + }; + + recognition.onend = () => { + setInterimTranscript(''); + if (voiceState === 'listening') { + setVoiceState('thinking'); + } + }; + + try { + recognition.start(); + } catch (e) { + setError('Could not start voice recognition.'); + setVoiceState('error'); + } + }, [isSupported, voiceState]); + + const stopListening = useCallback(() => { + recognitionRef.current?.stop(); + setVoiceState('thinking'); + }, []); + + const resetTranscript = useCallback(() => { + setTranscript(''); + setInterimTranscript(''); + setVoiceState('idle'); + setError(null); + }, []); + + return { + voiceState, + transcript, + interimTranscript, + isSupported, + startListening, + stopListening, + resetTranscript, + error, + }; +}; diff --git a/src/hooks/useSpeechSynthesis.ts b/src/hooks/useSpeechSynthesis.ts new file mode 100644 index 0000000..54cdbd6 --- /dev/null +++ b/src/hooks/useSpeechSynthesis.ts @@ -0,0 +1,52 @@ +import { useCallback } from 'react'; +import type { VoiceState } from './useSpeechRecognition'; + +interface UseSpeechSynthesisReturn { + speak: (text: string, lang?: string, onEnd?: () => void) => void; + cancel: () => void; + isSupported: boolean; +} + +export const useSpeechSynthesis = ( + setVoiceState?: (state: VoiceState) => void +): UseSpeechSynthesisReturn => { + const isSupported = + typeof window !== 'undefined' && 'speechSynthesis' in window; + + const speak = useCallback( + (text: string, lang: string = 'en-IN', onEnd?: () => void) => { + if (!isSupported) return; + + window.speechSynthesis.cancel(); + const utterance = new SpeechSynthesisUtterance(text); + utterance.lang = lang; + utterance.rate = 0.95; + utterance.pitch = 1.05; + utterance.volume = 1; + + utterance.onstart = () => { + setVoiceState?.('speaking'); + }; + + utterance.onend = () => { + setVoiceState?.('idle'); + onEnd?.(); + }; + + utterance.onerror = () => { + setVoiceState?.('idle'); + }; + + window.speechSynthesis.speak(utterance); + }, + [isSupported, setVoiceState] + ); + + const cancel = useCallback(() => { + if (!isSupported) return; + window.speechSynthesis.cancel(); + setVoiceState?.('idle'); + }, [isSupported, setVoiceState]); + + return { speak, cancel, isSupported }; +}; diff --git a/src/index.css b/src/index.css new file mode 100644 index 0000000..5fb3313 --- /dev/null +++ b/src/index.css @@ -0,0 +1,111 @@ +:root { + --text: #6b6375; + --text-h: #08060d; + --bg: #fff; + --border: #e5e4e7; + --code-bg: #f4f3ec; + --accent: #aa3bff; + --accent-bg: rgba(170, 59, 255, 0.1); + --accent-border: rgba(170, 59, 255, 0.5); + --social-bg: rgba(244, 243, 236, 0.5); + --shadow: + rgba(0, 0, 0, 0.1) 0 10px 15px -3px, rgba(0, 0, 0, 0.05) 0 4px 6px -2px; + + --sans: system-ui, 'Segoe UI', Roboto, sans-serif; + --heading: system-ui, 'Segoe UI', Roboto, sans-serif; + --mono: ui-monospace, Consolas, monospace; + + font: 18px/145% var(--sans); + letter-spacing: 0.18px; + color-scheme: light dark; + color: var(--text); + background: var(--bg); + font-synthesis: none; + text-rendering: optimizeLegibility; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; + + @media (max-width: 1024px) { + font-size: 16px; + } +} + +@media (prefers-color-scheme: dark) { + :root { + --text: #9ca3af; + --text-h: #f3f4f6; + --bg: #16171d; + --border: #2e303a; + --code-bg: #1f2028; + --accent: #c084fc; + --accent-bg: rgba(192, 132, 252, 0.15); + --accent-border: rgba(192, 132, 252, 0.5); + --social-bg: rgba(47, 48, 58, 0.5); + --shadow: + rgba(0, 0, 0, 0.4) 0 10px 15px -3px, rgba(0, 0, 0, 0.25) 0 4px 6px -2px; + } + + #social .button-icon { + filter: invert(1) brightness(2); + } +} + +#root { + width: 1126px; + max-width: 100%; + margin: 0 auto; + text-align: center; + border-inline: 1px solid var(--border); + min-height: 100svh; + display: flex; + flex-direction: column; + box-sizing: border-box; +} + +body { + margin: 0; +} + +h1, +h2 { + font-family: var(--heading); + font-weight: 500; + color: var(--text-h); +} + +h1 { + font-size: 56px; + letter-spacing: -1.68px; + margin: 32px 0; + @media (max-width: 1024px) { + font-size: 36px; + margin: 20px 0; + } +} +h2 { + font-size: 24px; + line-height: 118%; + letter-spacing: -0.24px; + margin: 0 0 8px; + @media (max-width: 1024px) { + font-size: 20px; + } +} +p { + margin: 0; +} + +code, +.counter { + font-family: var(--mono); + display: inline-flex; + border-radius: 4px; + color: var(--text-h); +} + +code { + font-size: 15px; + line-height: 135%; + padding: 4px 8px; + background: var(--code-bg); +} diff --git a/src/main.tsx b/src/main.tsx new file mode 100644 index 0000000..bef5202 --- /dev/null +++ b/src/main.tsx @@ -0,0 +1,10 @@ +import { StrictMode } from 'react' +import { createRoot } from 'react-dom/client' +import './index.css' +import App from './App.tsx' + +createRoot(document.getElementById('root')!).render( + + + , +) diff --git a/src/services/api.ts b/src/services/api.ts new file mode 100644 index 0000000..20e4442 --- /dev/null +++ b/src/services/api.ts @@ -0,0 +1,913 @@ +import { type MenuItem, MENU_ITEMS } from '../data/menuData'; + +const BASE_URL = import.meta.env.VITE_API_URL || 'http://localhost:8000'; +const WS_BASE_URL = import.meta.env.VITE_WS_URL || 'ws://localhost:8000'; + +// Helpers to get/set auth tokens +const getAccessToken = () => localStorage.getItem('access_token'); +export const getRefreshToken = () => localStorage.getItem('refresh_token'); +const setTokens = (access: string, refresh: string) => { + localStorage.setItem('access_token', access); + localStorage.setItem('refresh_token', refresh); +}; +const clearTokens = () => { + localStorage.removeItem('access_token'); + localStorage.removeItem('refresh_token'); +}; + +const getCustomerToken = () => sessionStorage.getItem('customer_session_token'); +const getCustomerSessionId = () => sessionStorage.getItem('customer_session_id'); +const setCustomerSession = (token: string, sessionId: string, tableId: string, restaurantId: string) => { + sessionStorage.setItem('customer_session_token', token); + sessionStorage.setItem('customer_session_id', sessionId); + sessionStorage.setItem('customer_table_id', tableId); + sessionStorage.setItem('customer_restaurant_id', restaurantId); +}; +export const clearCustomerSession = () => { + sessionStorage.removeItem('customer_session_token'); + sessionStorage.removeItem('customer_session_id'); + sessionStorage.removeItem('customer_table_id'); + sessionStorage.removeItem('customer_restaurant_id'); +}; + +// Map front-end item ID (e.g. 'm1') to back-end numeric ID +export const getBackendMenuId = (frontendId: string): number => { + return parseInt(frontendId.replace(/[^0-9]/g, '')) || 1; +}; + +// Map back-end ID to front-end menu item +export const getFrontendMenuItem = (backendId: number | string): MenuItem | undefined => { + const numId = typeof backendId === 'number' ? backendId : parseInt(String(backendId)) || 1; + return MENU_ITEMS.find(m => m.id === `m${numId}`) || MENU_ITEMS[0]; +}; + +// Connection State tracking +export let isDemoMode = false; +let onDemoModeChangeCallback: ((demo: boolean) => void) | null = null; + +export const setDemoModeChangeCallback = (cb: (demo: boolean) => void) => { + onDemoModeChangeCallback = cb; +}; + +const triggerDemoMode = (active: boolean) => { + if (isDemoMode !== active) { + isDemoMode = active; + if (onDemoModeChangeCallback) { + onDemoModeChangeCallback(active); + } + } +}; + +// In-memory mock database for Demo Mode fallback +const mockDb = { + tables: [ + { id: 1, number: '1', status: 'available', qr_codes: [{ encoded_url: 'http://localhost:3000/scan/1', qr_image_path: '' }] }, + { id: 2, number: '2', status: 'available', qr_codes: [{ encoded_url: 'http://localhost:3000/scan/2', qr_image_path: '' }] }, + { id: 3, number: '3', status: 'available', qr_codes: [{ encoded_url: 'http://localhost:3000/scan/3', qr_image_path: '' }] }, + { id: 4, number: '4', status: 'occupied', qr_codes: [{ encoded_url: 'http://localhost:3000/scan/4', qr_image_path: '' }] }, + { id: 5, number: '5', status: 'available', qr_codes: [{ encoded_url: 'http://localhost:3000/scan/5', qr_image_path: '' }] }, + { id: 8, number: '8', status: 'available', qr_codes: [{ encoded_url: 'http://localhost:3000/scan/8', qr_image_path: '' }] }, + { id: 12, number: '12', status: 'available', qr_codes: [{ encoded_url: 'http://localhost:3000/scan/12', qr_image_path: '' }] }, + ], + orders: [] as any[], + ingredients: [ + { id: '1', name: 'Chicken Breast', stock: 15, unit: 'kg', minStock: 5 }, + { id: '2', name: 'Basmati Rice', stock: 45, unit: 'kg', minStock: 10 }, + { id: '3', name: 'Cottage Cheese (Paneer)', stock: 3, unit: 'kg', minStock: 5 }, + { id: '4', name: 'Butter', stock: 8, unit: 'kg', minStock: 3 }, + { id: '5', name: 'Garlic', stock: 2, unit: 'kg', minStock: 2 }, + ], + recipes: {} as Record, + suppliers: [ + { id: '1', name: 'Delhi Agro Farms', phone: '9876543210', email: 'agro@farm.com', address: 'Delhi Outer Ring Rd' }, + { id: '2', name: 'Punjab Dairy Syndicate', phone: '9123456780', email: 'contact@pb-dairy.com', address: 'Amritsar bypass' }, + ], + purchaseOrders: [] as any[], + reservations: [ + { id: 'res-1', name: 'Mehta Party', size: 4, tableId: 3, time: '19:30', date: new Date().toISOString().split('T')[0], status: 'confirmed' }, + { id: 'res-2', name: 'Kapoor Diner', size: 2, tableId: 5, time: '20:30', date: new Date().toISOString().split('T')[0], status: 'seated' }, + ], + shifts: [ + { id: 'shift-1', staffName: 'Chef Rahul S.', role: 'chef', clockIn: '09:00', clockOut: '17:00', date: new Date().toISOString().split('T')[0], status: 'completed' }, + { id: 'shift-2', staffName: 'Waiter Amit K.', role: 'waiter', clockIn: '10:00', clockOut: '', date: new Date().toISOString().split('T')[0], status: 'active' }, + ], + staff: [ + { id: '1', name: 'Chef Rahul S.', role: 'chef', email: 'chef@test.com' }, + { id: '2', name: 'Waiter Amit K.', role: 'waiter', email: 'waiter@test.com' }, + { id: '3', name: 'Manager Sarah D.', role: 'manager', email: 'manager@test.com' }, + ], + feedback: [ + { id: 'f-1', star_rating: 5, comment_text: 'Excellent Dum Biryani!', date: new Date().toISOString().split('T')[0] }, + { id: 'f-2', star_rating: 4, comment_text: 'Naan was super soft, butter chicken could be sweeter', date: new Date().toISOString().split('T')[0] }, + ], + bills: [] as any[], +}; + +// Generic HTTP fetch wrapper with Demo fallback support +async function apiRequest(path: string, options: RequestInit = {}): Promise { + const url = `${BASE_URL}${path}`; + const headers = new Headers(options.headers || {}); + + // Inject Staff Auth Token + const staffToken = getAccessToken(); + if (staffToken && !headers.has('Authorization')) { + headers.set('Authorization', `Bearer ${staffToken}`); + } + + // Inject Customer Session Token + const customerToken = getCustomerToken(); + if (customerToken && !headers.has('X-Session-Token')) { + headers.set('X-Session-Token', customerToken); + } + + // Ensure content-type + if (!headers.has('Content-Type') && !(options.body instanceof FormData)) { + headers.set('Content-Type', 'application/json'); + } + + try { + const res = await fetch(url, { ...options, headers }); + triggerDemoMode(false); + + if (res.status === 401 && staffToken) { + // Token expired, clear it + clearTokens(); + window.location.reload(); + throw new Error('Staff session expired. Please log in again.'); + } + + if (!res.ok) { + const errText = await res.text(); + let parsedErr; + try { + parsedErr = JSON.parse(errText); + } catch { + parsedErr = { error: errText }; + } + throw new Error(parsedErr.error || parsedErr.message || `Request failed: ${res.status}`); + } + + return await res.json(); + } catch (error) { + console.warn(`API Request to ${path} failed, falling back to mock database.`, error); + triggerDemoMode(true); + return handleMockRequest(path, options); + } +} + +// Intercept requests and simulate them in-memory +function handleMockRequest(path: string, options: RequestInit): any { + const method = options.method || 'GET'; + const body = options.body ? (typeof options.body === 'string' ? JSON.parse(options.body) : options.body) : null; + + // 1. Health + if (path === '/health') { + return { status: 'healthy', database: 'connected', mode: 'demo' }; + } + + // 2. Auth Login + if (path === '/auth/login') { + const bodyStr = typeof options.body === 'string' ? options.body : ''; + const params = new URLSearchParams(bodyStr); + const username = params.get('username') || 'manager@test.com'; + const role = username.includes('manager') ? 'manager' : 'kitchen'; + return { + access_token: `mock-jwt-token-for-${username}`, + refresh_token: 'mock-refresh-token', + token_type: 'bearer', + role: role + }; + } + + // 3. Tables start session + if (path.startsWith('/tables/') && path.endsWith('/start-session')) { + const tableId = parseInt(path.split('/')[2]) || 12; + const sessionToken = `mock-session-token-tab-${tableId}-${Date.now()}`; + const sessionId = String(100 + tableId); + + // Update table status + const table = mockDb.tables.find(t => t.id === tableId); + if (table) table.status = 'occupied'; + + return { + session_id: sessionId, + table_id: tableId, + restaurant_id: 1, + session_token: sessionToken, + language: body?.language || 'en', + expires_in_seconds: 10800 + }; + } + + // 4. Tables list or operations + if (path === '/tables') { + return mockDb.tables; + } + if (path.startsWith('/tables/') && path.endsWith('/close-session')) { + const tableId = parseInt(path.split('/')[2]); + const table = mockDb.tables.find(t => t.id === tableId); + if (table) table.status = 'awaiting_clearance'; + return { success: true }; + } + if (path.startsWith('/tables/') && path.endsWith('/reset')) { + const tableId = parseInt(path.split('/')[2]); + const table = mockDb.tables.find(t => t.id === tableId); + if (table) table.status = 'available'; + return { success: true }; + } + + // 5. Orders + if (path === '/orders' && method === 'POST') { + const sessionId = getCustomerSessionId() || '112'; + const tableId = sessionStorage.getItem('customer_table_id') || '12'; + + const orderItems = body.items.map((it: any, index: number) => { + const original = getFrontendMenuItem(it.menu_item_id); + return { + id: `oi-${Date.now()}-${index}`, + menu_item_id: it.menu_item_id, + name: original?.name || `Dish ${it.menu_item_id}`, + quantity: it.quantity, + price: original?.price || 150, + kds_status: 'queued', + customization_notes: it.customization_notes || [] + }; + }); + + const newOrder = { + id: `ord-mock-${Date.now()}`, + ticketNumber: String(100 + mockDb.orders.length + 1), + tableNumber: tableId, + session_id: sessionId, + orderType: 'Dine-In', + status: 'placed', + createdAt: new Date().toISOString(), + timeElapsedMinutes: 0, + priority: 'normal', + serverName: `Self-Order Table ${tableId}`, + totalAmount: orderItems.reduce((acc: number, item: any) => acc + (item.price * item.quantity), 0), + items: orderItems + }; + + mockDb.orders.push(newOrder); + return newOrder; + } + + if (path.startsWith('/orders/') || path.startsWith('/staff/orders/')) { + const parts = path.split('/'); + const sessionId = parts[parts.length - 1]; + + const found = mockDb.orders.find(o => o.session_id === sessionId); + if (found) return found; + + return mockDb.orders[0] || { + id: 'ord-empty', + ticketNumber: '000', + tableNumber: '12', + items: [], + status: 'placed', + totalAmount: 0 + }; + } + + // Generate bill + if (path.startsWith('/orders/') && path.endsWith('/generate-bill')) { + const orderId = path.split('/')[2]; + const order = mockDb.orders.find(o => o.id === orderId) || mockDb.orders[0]; + + const subtotal = order ? order.totalAmount : 500; + const cgst = subtotal * 0.025; + const sgst = subtotal * 0.025; + const serviceCharge = subtotal * 0.05; + const grandTotal = subtotal + cgst + sgst + serviceCharge; + + const newBill = { + id: `bill-${Date.now()}`, + order_id: orderId, + subtotal, + cgst, + sgst, + serviceCharge, + grandTotal, + status: 'unpaid' + }; + + mockDb.bills.push(newBill); + return newBill; + } + + // 6. Bills + if (path.startsWith('/bills/')) { + const parts = path.split('/'); + const billId = parts[2]; + + if (parts[3] === 'record-payment') { + const bill = mockDb.bills.find(b => b.id === billId); + if (bill) { + bill.status = 'paid'; + bill.paymentMethod = body.method; + } + return { success: true, bill }; + } + + if (parts[3] === 'credit-note') { + return { success: true, message: 'Credit note issued' }; + } + + return mockDb.bills.find(b => b.id === billId) || mockDb.bills[0]; + } + + // 7. KDS Board + if (path.startsWith('/kds/')) { + return mockDb.orders; + } + + // Patch KDS order item status + if (path.startsWith('/order-items/') && path.endsWith('/status')) { + const item_id = path.split('/')[2]; + const newStatus = body.kds_status; + + mockDb.orders.forEach(ord => { + ord.items.forEach((item: any) => { + if (item.id === item_id) { + item.kds_status = newStatus; + } + }); + + const allReady = ord.items.every((it: any) => it.kds_status === 'ready' || it.kds_status === 'served'); + const allServed = ord.items.every((it: any) => it.kds_status === 'served'); + + if (allServed) { + ord.status = 'served'; + } else if (allReady) { + ord.status = 'ready'; + } else { + ord.status = 'in_preparation'; + } + }); + + notifyWsListeners({ + type: 'kds.item_updated', + item_id, + status: newStatus + }); + + return { success: true }; + } + + // 8. Ingredients + if (path === '/ingredients') { + if (method === 'POST') { + const newIng = { ...body, id: `ing-${Date.now()}` }; + mockDb.ingredients.push(newIng); + return newIng; + } + return mockDb.ingredients; + } + + if (path.startsWith('/ingredients/')) { + const id = path.split('/')[2]; + if (method === 'DELETE') { + mockDb.ingredients = mockDb.ingredients.filter(i => i.id !== id); + return { success: true }; + } + if (method === 'PATCH' || method === 'PUT') { + const idx = mockDb.ingredients.findIndex(i => i.id === id); + if (idx !== -1) { + mockDb.ingredients[idx] = { ...mockDb.ingredients[idx], ...body }; + return mockDb.ingredients[idx]; + } + } + } + + if (path === '/inventory/low-stock' || path === '/analytics/low-stock-summary') { + return mockDb.ingredients.filter(i => i.stock <= i.minStock); + } + + // Recipes + if (path.startsWith('/menu-items/') && path.endsWith('/recipe')) { + const menuId = parseInt(path.split('/')[2]); + if (method === 'POST') { + mockDb.recipes[menuId] = body.ingredients; + return { success: true }; + } + return { ingredients: mockDb.recipes[menuId] || [] }; + } + + // 9. Suppliers + if (path === '/suppliers') { + if (method === 'POST') { + const newSupp = { ...body, id: `supp-${Date.now()}` }; + mockDb.suppliers.push(newSupp); + return newSupp; + } + return mockDb.suppliers; + } + + if (path.startsWith('/suppliers/')) { + const id = path.split('/')[2]; + if (method === 'DELETE') { + mockDb.suppliers = mockDb.suppliers.filter(s => s.id !== id); + return { success: true }; + } + } + + // Purchase Orders + if (path === '/purchase-orders') { + if (method === 'POST') { + const newPO = { + ...body, + id: `po-${Date.now()}`, + status: 'draft', + createdAt: new Date().toISOString() + }; + mockDb.purchaseOrders.push(newPO); + return newPO; + } + return mockDb.purchaseOrders; + } + + if (path.startsWith('/purchase-orders/')) { + const id = path.split('/')[2]; + const po = mockDb.purchaseOrders.find(p => p.id === id); + if (method === 'PATCH' || method === 'PUT') { + if (po) { + Object.assign(po, body); + if (body.status === 'received') { + po.items?.forEach((item: any) => { + const ingredient = mockDb.ingredients.find(ing => ing.id === item.ingredientId); + if (ingredient) { + ingredient.stock += Number(item.qty); + } + }); + } + } + return po; + } + if (method === 'DELETE') { + mockDb.purchaseOrders = mockDb.purchaseOrders.filter(p => p.id !== id); + return { success: true }; + } + } + + // 10. Reservations + if (path.startsWith('/reservations')) { + if (method === 'POST') { + const newRes = { ...body, id: `res-${Date.now()}`, status: 'confirmed' }; + mockDb.reservations.push(newRes); + const conflicts = mockDb.reservations.filter(r => r.tableId === body.tableId && r.id !== newRes.id); + const warnings = conflicts.length > 0 ? ['Soft conflict: table is booked within 90 minutes'] : []; + return { ...newRes, warnings }; + } + return mockDb.reservations; + } + + // Staff and Shifts + if (path === '/staff') { + if (method === 'POST') { + const member = { ...body, id: `st-${Date.now()}` }; + mockDb.staff.push(member); + return member; + } + return mockDb.staff; + } + + if (path === '/roles') { + return ['waiter', 'chef', 'cashier', 'manager']; + } + + if (path === '/shifts') { + return mockDb.shifts; + } + + if (path.startsWith('/shifts/') && path.endsWith('/clock-in')) { + const shiftId = path.split('/')[2]; + const shift = mockDb.shifts.find(s => s.id === shiftId); + if (shift) { + shift.clockIn = new Date().toLocaleTimeString([], { hour: '2-digit', minute: '2-digit' }); + shift.status = 'active'; + } + return { success: true, shift }; + } + + if (path.startsWith('/shifts/') && path.endsWith('/clock-out')) { + const shiftId = path.split('/')[2]; + const shift = mockDb.shifts.find(s => s.id === shiftId); + if (shift) { + shift.clockOut = new Date().toLocaleTimeString([], { hour: '2-digit', minute: '2-digit' }); + shift.status = 'completed'; + } + return { success: true, shift }; + } + + // Feedback + if (path === '/feedback') { + if (method === 'POST') { + const newFb = { ...body, id: `fb-${Date.now()}`, date: new Date().toISOString().split('T')[0] }; + mockDb.feedback.push(newFb); + return newFb; + } + return mockDb.feedback; + } + + // Analytics + if (path.startsWith('/analytics/revenue-trend')) { + return [ + { date: 'Mon', revenue: 15400 }, + { date: 'Tue', revenue: 18200 }, + { date: 'Wed', revenue: 16500 }, + { date: 'Thu', revenue: 21000 }, + { date: 'Fri', revenue: 29500 }, + { date: 'Sat', revenue: 38000 }, + { date: 'Sun', revenue: 34000 }, + ]; + } + + if (path.startsWith('/analytics/top-items')) { + return [ + { name: 'Hyderabadi Chicken Biryani', ordersCount: 84, revenue: 31920 }, + { name: 'Butter Chicken', ordersCount: 65, revenue: 23400 }, + { name: 'Garlic Naan', ordersCount: 140, revenue: 11200 }, + { name: 'Palak Paneer', ordersCount: 38, revenue: 11400 }, + { name: 'Mango Lassi', ordersCount: 42, revenue: 5040 }, + ]; + } + + return { success: true }; +} + +// WebSocket connection handlers +let wsListeners: ((event: any) => void)[] = []; +export const subscribeToWsEvents = (listener: (event: any) => void) => { + wsListeners.push(listener); + return () => { + wsListeners = wsListeners.filter(l => l !== listener); + }; +}; + +const notifyWsListeners = (event: any) => { + wsListeners.forEach(listener => { + try { + listener(event); + } catch (e) { + console.error('Error triggering WS listener', e); + } + }); +}; + +export class RestroWebSocket { + private ws: WebSocket | null = null; + private url: string; + private reconnectTimer: any = null; + private isClosedIntentional = false; + + constructor(channel: 'kds' | 'orders', param: string) { + if (channel === 'kds') { + const token = getAccessToken() || ''; + this.url = `${WS_BASE_URL}/ws/kds/${param}?token=${encodeURIComponent(token)}`; + } else { + const token = getCustomerToken() || ''; + this.url = `${WS_BASE_URL}/ws/orders/${param}?session_token=${encodeURIComponent(token)}`; + } + } + + connect() { + if (isDemoMode) { + console.log('Skipping real WebSocket connection in Demo Mode'); + return; + } + this.isClosedIntentional = false; + try { + this.ws = new WebSocket(this.url); + + this.ws.onmessage = (event) => { + try { + const data = JSON.parse(event.data); + notifyWsListeners(data); + } catch (e) { + console.error('Error parsing WS message', e); + } + }; + + this.ws.onclose = () => { + if (!this.isClosedIntentional) { + console.log('WebSocket closed. Attempting reconnect in 5s...'); + this.reconnectTimer = setTimeout(() => this.connect(), 5000); + } + }; + + this.ws.onerror = (err) => { + console.error('WebSocket error:', err); + this.ws?.close(); + }; + } catch (e) { + console.error('WebSocket connection setup failed', e); + } + } + + close() { + this.isClosedIntentional = true; + if (this.reconnectTimer) clearTimeout(this.reconnectTimer); + if (this.ws) { + this.ws.close(); + this.ws = null; + } + } +} + +// Export API Client namespace +export const api = { + // Auth + login: async (username: string, password: string) => { + const details = { username, password }; + const formBody = Object.entries(details) + .map(([key, val]) => `${encodeURIComponent(key)}=${encodeURIComponent(val)}`) + .join('&'); + + const res = await apiRequest('/auth/login', { + method: 'POST', + headers: { + 'Content-Type': 'application/x-www-form-urlencoded' + }, + body: formBody + }); + + if (res.access_token) { + setTokens(res.access_token, res.refresh_token); + } + return res; + }, + + logout: () => { + clearTokens(); + }, + + isLoggedIn: () => { + return !!getAccessToken(); + }, + + // Tables & Session + startSession: async (tableId: number, language = 'en') => { + const res = await apiRequest(`/tables/${tableId}/start-session`, { + method: 'POST', + body: JSON.stringify({ language }) + }); + + if (res.session_token) { + setCustomerSession(res.session_token, String(res.session_id), String(res.table_id), String(res.restaurant_id)); + } + return res; + }, + + closeSession: async (tableId: number) => { + return apiRequest(`/tables/${tableId}/close-session`, { method: 'POST' }); + }, + + resetTable: async (tableId: number) => { + return apiRequest(`/tables/${tableId}/reset`, { method: 'POST' }); + }, + + getTables: async () => { + return apiRequest('/tables'); + }, + + // Backend schema: { table_number (string), capacity (int) } - manager role required + createTable: async (table_number: string, capacity = 4) => { + return apiRequest('/tables', { + method: 'POST', + body: JSON.stringify({ table_number, capacity }) + }); + }, + + // Orders + placeOrder: async (items: { menu_item_id: number; quantity: number; customization_notes?: string[] }[]) => { + const uuid = `guest-${Math.random().toString(36).substring(2, 9)}`; + return apiRequest('/orders', { + method: 'POST', + headers: { + 'Idempotency-Key': uuid + }, + body: JSON.stringify({ + channel: 'touch', + items + }) + }); + }, + + getOrderForSession: async (sessionId: string) => { + return apiRequest(`/orders/${sessionId}`); + }, + + getStaffOrderForSession: async (sessionId: string) => { + return apiRequest(`/staff/orders/${sessionId}`); + }, + + // KDS Board — returns { restaurant_id, orders: [...] }, extract .orders in caller + getKDSBoard: async (restaurantId: string | number) => { + const data = await apiRequest(`/kds/${restaurantId}/board`); + // Backend returns KdsBoardResponse: { restaurant_id, orders: KdsBoardOrder[] } + // Return the raw object so callers can access data.orders + return data; + }, + + updateOrderItemStatus: async (orderItemId: string, newKDSStatus: string) => { + return apiRequest(`/order-items/${orderItemId}/status`, { + method: 'PATCH', + body: JSON.stringify({ kds_status: newKDSStatus }) + }); + }, + + // Billing + generateBill: async (orderId: string) => { + return apiRequest(`/orders/${orderId}/generate-bill`, { method: 'POST' }); + }, + + recordPayment: async (billId: string, method: string, amount: number) => { + return apiRequest(`/bills/${billId}/record-payment`, { + method: 'POST', + body: JSON.stringify({ method, amount }) + }); + }, + + issueCreditNote: async (billId: string) => { + return apiRequest(`/bills/${billId}/credit-note`, { method: 'POST' }); + }, + + getBill: async (billId: string) => { + return apiRequest(`/bills/${billId}`); + }, + + // Ingredients CRUD + getIngredients: async () => { + return apiRequest('/ingredients'); + }, + + // Backend schema: { name, unit, current_stock, reorder_threshold, unit_cost } + createIngredient: async (name: string, current_stock: number, unit: string, reorder_threshold: number, unit_cost = 0) => { + return apiRequest('/ingredients', { + method: 'POST', + body: JSON.stringify({ name, unit, current_stock, reorder_threshold, unit_cost }) + }); + }, + + // Backend only allows: name, unit, reorder_threshold, unit_cost + updateIngredient: async (id: string, updates: { name?: string; unit?: string; reorder_threshold?: number; unit_cost?: number }) => { + return apiRequest(`/ingredients/${id}`, { + method: 'PATCH', + body: JSON.stringify(updates) + }); + }, + + deleteIngredient: async (id: string) => { + return apiRequest(`/ingredients/${id}`, { method: 'DELETE' }); + }, + + getLowStockInventory: async () => { + return apiRequest('/inventory/low-stock'); + }, + + // Recipes + getRecipe: async (menuItemId: number) => { + return apiRequest(`/menu-items/${menuItemId}/recipe`); + }, + + // Backend schema: { ingredients: [{ingredient_id, quantity_required}] } + saveRecipe: async (menuItemId: number, ingredients: { ingredient_id: number; quantity_required: number }[]) => { + return apiRequest(`/menu-items/${menuItemId}/recipe`, { + method: 'POST', + body: JSON.stringify({ ingredients }) + }); + }, + + // Suppliers CRUD + getSuppliers: async () => { + return apiRequest('/suppliers'); + }, + + // Backend schema: { name, contact_phone?, email? } — no address field + createSupplier: async (supplier: { name: string; contact_phone?: string; email?: string }) => { + return apiRequest('/suppliers', { + method: 'POST', + body: JSON.stringify(supplier) + }); + }, + + deleteSupplier: async (id: string) => { + return apiRequest(`/suppliers/${id}`, { method: 'DELETE' }); + }, + + // Purchase Orders CRUD & Receipt + getPurchaseOrders: async () => { + return apiRequest('/purchase-orders'); + }, + + // Backend schema: { supplier_id, expected_delivery?, items: [{ingredient_id, quantity, unit_price}] } + createPurchaseOrder: async (supplier_id: number, items: { ingredient_id: number; quantity: number; unit_price: number }[], expected_delivery?: string) => { + return apiRequest('/purchase-orders', { + method: 'POST', + body: JSON.stringify({ supplier_id, items, ...(expected_delivery ? { expected_delivery } : {}) }) + }); + }, + + // Backend endpoint: PATCH /purchase-orders/{id}/status with { status } + updatePurchaseOrderStatus: async (id: string, status: 'draft' | 'sent' | 'received' | 'cancelled') => { + return apiRequest(`/purchase-orders/${id}/status`, { + method: 'PATCH', + body: JSON.stringify({ status }) + }); + }, + + // Reservations + getReservations: async (date: string) => { + return apiRequest(`/reservations?date=${date}`); + }, + + // Backend schema: { table_id, customer_name, customer_phone, party_size, reservation_time (ISO datetime), special_requirements? } + createReservation: async (reservation: { + table_id: number; + customer_name: string; + customer_phone: string; + party_size: number; + reservation_time: string; // ISO 8601 datetime string + special_requirements?: string; + }) => { + return apiRequest('/reservations', { + method: 'POST', + body: JSON.stringify(reservation) + }); + }, + + updateReservationStatus: async (id: string, status: 'confirmed' | 'seated' | 'cancelled' | 'no_show') => { + return apiRequest(`/reservations/${id}/status`, { + method: 'PATCH', + body: JSON.stringify({ status }) + }); + }, + + // Staff and Shifts + getStaff: async () => { + return apiRequest('/staff'); + }, + + // Backend schema: { full_name, email, password, role_id (int), phone? } + createStaff: async (staff: { full_name: string; email: string; password: string; role_id: number; phone?: string }) => { + return apiRequest('/staff', { + method: 'POST', + body: JSON.stringify(staff) + }); + }, + + getRoles: async () => { + return apiRequest('/roles'); + }, + + getShifts: async (staff_id?: number) => { + const query = staff_id ? `?staff_id=${staff_id}` : ''; + return apiRequest(`/shifts${query}`); + }, + + // Backend clock-in/clock-out requires staff auth (not just any POST) + clockIn: async (shiftId: string) => { + return apiRequest(`/shifts/${shiftId}/clock-in`, { method: 'POST' }); + }, + + clockOut: async (shiftId: string) => { + return apiRequest(`/shifts/${shiftId}/clock-out`, { method: 'POST' }); + }, + + // Feedback + sendFeedback: async (rating: number, comment: string) => { + return apiRequest('/feedback', { + method: 'POST', + body: JSON.stringify({ + star_rating: rating, + comment_text: comment, + channel: 'text_form' + }) + }); + }, + + getFeedback: async (minRating = 0, restaurantId = 1) => { + return apiRequest(`/feedback?min_rating=${minRating}&restaurant_id=${restaurantId}`); + }, + + // Analytics — backend requires non-empty ISO date strings for revenue-trend + getRevenueTrend: async (from?: string, to?: string) => { + const today = new Date().toISOString().split('T')[0]; + const sevenDaysAgo = new Date(Date.now() - 7 * 24 * 60 * 60 * 1000).toISOString().split('T')[0]; + const fromDate = from || sevenDaysAgo; + const toDate = to || today; + return apiRequest(`/analytics/revenue-trend?from=${fromDate}&to=${toDate}`); + }, + + getTopItems: async (from?: string, to?: string, limit = 5) => { + const params = new URLSearchParams({ limit: String(limit) }); + if (from) params.set('from', from); + if (to) params.set('to', to); + return apiRequest(`/analytics/top-items?${params.toString()}`); + }, + + getLowStockSummary: async () => { + return apiRequest('/analytics/low-stock-summary'); + } +}; diff --git a/src/theme/theme.ts b/src/theme/theme.ts new file mode 100644 index 0000000..5cf61a1 --- /dev/null +++ b/src/theme/theme.ts @@ -0,0 +1,145 @@ +import { createTheme } from '@mui/material/styles'; + +export const theme = createTheme({ + palette: { + mode: 'light', + primary: { + main: '#ac2d00', + light: '#ffb5a0', + dark: '#872100', + contrastText: '#ffffff', + }, + secondary: { + main: '#546067', + light: '#818e95', + dark: '#2a363d', + contrastText: '#ffffff', + }, + background: { + default: '#f8f9fa', + paper: '#ffffff', + }, + error: { + main: '#ba1a1a', + light: '#ffdad6', + dark: '#93000a', + }, + warning: { + main: '#845000', + light: '#ffddba', + dark: '#2b1700', + }, + success: { + main: '#11651d', + light: '#a3f69c', + dark: '#003915', + }, + info: { + main: '#00a6e0', + light: '#c4e7ff', + dark: '#00374d', + }, + text: { + primary: '#1a1c1c', + secondary: '#5b4139', + }, + divider: '#e4beb4', + }, + typography: { + fontFamily: '"Inter", "Plus Jakarta Sans", -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, sans-serif', + h1: { + fontFamily: '"Plus Jakarta Sans", "Inter", sans-serif', + fontWeight: 800, + letterSpacing: '-0.02em', + }, + h2: { + fontFamily: '"Plus Jakarta Sans", "Inter", sans-serif', + fontWeight: 700, + letterSpacing: '-0.01em', + }, + h3: { + fontFamily: '"Plus Jakarta Sans", "Inter", sans-serif', + fontWeight: 700, + }, + h4: { + fontFamily: '"Plus Jakarta Sans", "Inter", sans-serif', + fontWeight: 600, + }, + h5: { + fontFamily: '"Inter", sans-serif', + fontWeight: 600, + }, + h6: { + fontFamily: '"Inter", sans-serif', + fontWeight: 600, + }, + subtitle1: { + fontFamily: '"Inter", sans-serif', + fontWeight: 600, + }, + body1: { + fontFamily: '"Inter", sans-serif', + lineHeight: 1.5, + }, + body2: { + fontFamily: '"Inter", sans-serif', + lineHeight: 1.43, + }, + button: { + fontFamily: '"Inter", sans-serif', + fontWeight: 600, + textTransform: 'none', + }, + caption: { + fontFamily: '"JetBrains Mono", monospace', + fontWeight: 500, + }, + }, + shape: { + borderRadius: 8, + }, + components: { + MuiButton: { + styleOverrides: { + root: { + borderRadius: 8, + padding: '8px 16px', + boxShadow: 'none', + '&:hover': { + boxShadow: '0px 2px 8px rgba(172, 45, 0, 0.25)', + }, + }, + contained: { + background: 'linear-gradient(135deg, #ac2d00 0%, #d53e0b 100%)', + }, + }, + }, + MuiCard: { + styleOverrides: { + root: { + borderRadius: 12, + boxShadow: '0px 2px 12px rgba(0, 0, 0, 0.05)', + border: '1px solid rgba(228, 190, 180, 0.4)', + }, + }, + }, + MuiChip: { + styleOverrides: { + root: { + fontWeight: 600, + borderRadius: 6, + }, + }, + }, + MuiAppBar: { + styleOverrides: { + root: { + backgroundColor: '#ffffff', + color: '#1a1c1c', + boxShadow: '0px 1px 10px rgba(0,0,0,0.05)', + borderBottom: '1px solid #e2e2e2', + }, + }, + }, + }, +}); diff --git a/src/types/index.ts b/src/types/index.ts new file mode 100644 index 0000000..10cbefb --- /dev/null +++ b/src/types/index.ts @@ -0,0 +1,52 @@ +export type OrderStatus = 'pending' | 'preparing' | 'ready' | 'served'; +export type OrderType = 'Dine-In' | 'Takeaway' | 'Delivery'; + +export interface OrderItem { + id: string; + name: string; + quantity: number; + notes?: string; + completed?: boolean; + dietary?: 'veg' | 'non-veg' | 'jain' | 'vegan'; + price: number; +} + +export interface KDSOrder { + id: string; + ticketNumber: string; + tableNumber?: string; + orderType: OrderType; + customerName?: string; + items: OrderItem[]; + status: OrderStatus; + createdAt: string; // ISO timestamp + timeElapsedMinutes: number; + priority: 'normal' | 'high' | 'urgent'; + serverName?: string; + totalAmount: number; +} + +export interface AnalyticsMetric { + title: string; + value: string; + change: string; + isPositive: boolean; + period: string; +} + +export interface DishPerformance { + id: string; + name: string; + category: string; + ordersCount: number; + revenue: number; + growth: string; + dietary: 'veg' | 'non-veg' | 'jain' | 'vegan'; +} + +export interface VoiceCommandSuggestion { + id: string; + label: string; + prompt: string; + category: 'order' | 'status' | 'modify' | 'action'; +} diff --git a/tsconfig.app.json b/tsconfig.app.json new file mode 100644 index 0000000..6830b6f --- /dev/null +++ b/tsconfig.app.json @@ -0,0 +1,26 @@ +{ + "compilerOptions": { + "tsBuildInfoFile": "./node_modules/.tmp/tsconfig.app.tsbuildinfo", + "target": "es2023", + "lib": ["ES2023", "DOM"], + "module": "esnext", + "types": ["vite/client"], + "allowArbitraryExtensions": true, + "skipLibCheck": true, + + /* Bundler mode */ + "moduleResolution": "bundler", + "allowImportingTsExtensions": true, + "verbatimModuleSyntax": true, + "moduleDetection": "force", + "noEmit": true, + "jsx": "react-jsx", + + /* Linting */ + "noUnusedLocals": true, + "noUnusedParameters": true, + "erasableSyntaxOnly": true, + "noFallthroughCasesInSwitch": true + }, + "include": ["src"] +} diff --git a/tsconfig.json b/tsconfig.json new file mode 100644 index 0000000..1ffef60 --- /dev/null +++ b/tsconfig.json @@ -0,0 +1,7 @@ +{ + "files": [], + "references": [ + { "path": "./tsconfig.app.json" }, + { "path": "./tsconfig.node.json" } + ] +} diff --git a/tsconfig.node.json b/tsconfig.node.json new file mode 100644 index 0000000..8455dcb --- /dev/null +++ b/tsconfig.node.json @@ -0,0 +1,23 @@ +{ + "compilerOptions": { + "tsBuildInfoFile": "./node_modules/.tmp/tsconfig.node.tsbuildinfo", + "target": "es2023", + "lib": ["ES2023"], + "types": ["node"], + "skipLibCheck": true, + + /* Bundler mode */ + "module": "nodenext", + "allowImportingTsExtensions": true, + "verbatimModuleSyntax": true, + "moduleDetection": "force", + "noEmit": true, + + /* Linting */ + "noUnusedLocals": true, + "noUnusedParameters": true, + "erasableSyntaxOnly": true, + "noFallthroughCasesInSwitch": true + }, + "include": ["vite.config.ts"] +} diff --git a/vite.config.ts b/vite.config.ts new file mode 100644 index 0000000..8b0f57b --- /dev/null +++ b/vite.config.ts @@ -0,0 +1,7 @@ +import { defineConfig } from 'vite' +import react from '@vitejs/plugin-react' + +// https://vite.dev/config/ +export default defineConfig({ + plugins: [react()], +})