@final-commerce/command-frame 0.3.2-beta.1 → 0.4.0-preprod.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -2,11 +2,11 @@
2
2
  * Mock Database for Standalone/Demo Mode
3
3
  * Stores mock data that mimics the Render environment
4
4
  */
5
- import { CFProductType, CFUserTypes, CurrencyCode } from "../CommonTypes";
6
- export * from "./mocks";
5
+ import { CFProductType, CFUserTypes, CurrencyCode, } from '../CommonTypes';
6
+ export * from './mocks';
7
7
  // Asset Imports - Using Remote URLs to avoid build complexity with asset copying
8
- const ASSETS_BASE_URL = "https://raw.githubusercontent.com/Final-Commerce/command-frame/refs/heads/main/src/demo/assets";
9
- const logo = "data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA5OCAxMDQiIGZpbGw9Im5vbmUiPjxwYXRoIGQ9Ik01NS4yOTk4IDUwLjE2NjJMMzcuNzQyMiA0MC4wMjkzTDMxLjcyNzQgNTAuNDQ3MkwzOC45MjQyIDU0LjYwMjJMNTUuMjk5OCA1MC4xNjYyWiIgZmlsbD0iI0E1NjhCQyIvPjxwYXRoIGQ9Ik0zMS45OTYzIDcwLjQ1MDZMNDkuNTU2OCA4MC41ODkxTDU1LjU3MTUgNzAuMTcxM0w0OC4zNzE4IDY2LjAxNDVMMzEuOTk2MyA3MC40NTA2WiIgZmlsbD0iI0E1NjhCQyIvPjxwYXRoIGQ9Ik0zNi4zNTQyIDM0LjI1NzJDMzYuMzU0MiAzNC4yNTcyIDM2LjM1ODMgMzQuMjYzNSAzNi4zNTY3IDM0LjI2NjRDMzcuMTg2OSAzNC4wNjk3IDM4LjA5MTkgMzQuMTU5NiAzOC44ODUxIDM0LjYxNzVMNjIuNjQ4NiA0OC4zMzc0TDU0LjE3MjkgMjkuOTA0OUwzNi4zNDk2IDM0LjI1ODRMMzYuMzU0MiAzNC4yNTcyWiIgZmlsbD0iI0ZDODc1MyIvPjxwYXRoIGQ9Ik0zMy4wOTg4IDE4Ljk1MDdMMzYuMzc3MiAzNC4yNDczTDE4Ljc1MjUgMzkuMzM3M0wyOC45MzcxIDIxLjY5N0MyOS44NDUzIDIwLjEyMzkgMzEuNDE1MiAxOS4xNzYxIDMzLjA5ODggMTguOTUwN1oiIGZpbGw9IiM0MkQzQTkiLz48cGF0aCBkPSJNMTguNzUzMiAzOS4zNDA2TDIwLjY4MjQgNTkuNTE3MUw0LjU3NjA3IDYzLjg5NjJMMTguNzUzMiAzOS4zNDA2WiIgZmlsbD0iIzI3OTdFOCIvPjxwYXRoIGQ9Ik0zNi4zNzc5IDM0LjI0MDNDMzYuMzc3OSAzNC4yNDAzIDM2LjM3NzQgMzQuMjQ3OCAzNi4zODAzIDM0LjI0OTVDMzUuNTYyNCAzNC40OTE5IDM0LjgyMzkgMzUuMDE5NiAzNC4zNjczIDM1LjgxMDVMMjAuNjg2OSA1OS41MDU2TDE4Ljc1NzcgMzkuMzI5MUwzNi4zODI0IDM0LjIzOTFMMzYuMzc3OSAzNC4yNDAzWiIgZmlsbD0iIzFEQkFDQiIvPjxwYXRoIGQ9Ik01NS45MzUyIDEwMS41NDNMNTEuMDgxOSA4Ni42NjU5TDMzLjI1ODcgOTEuMDE5NEw1MC45NDk5IDEwMS4yMzNDNTIuNTI3NiAxMDIuMTQ0IDU0LjM2MzggMTAyLjE4NSA1NS45MzUyIDEwMS41NDNaIiBmaWxsPSIjRkQ1MjYzIi8+PHBhdGggZD0iTTMzLjI1NDkgOTEuMDE0TDI0Ljc4MjEgNzIuNTgzMkw4LjYzMTM1IDc2Ljc5NzVMMzMuMjU0OSA5MS4wMTRaIiBmaWxsPSIjRkZDRjIzIi8+PHBhdGggZD0iTTUxLjA3OSA4Ni42NjM5QzUxLjA3OSA4Ni42NjM5IDUxLjA3NDkgODYuNjU3NiA1MS4wNzY2IDg2LjY1NDdDNTAuMjQ2NCA4Ni44NTE0IDQ5LjM0MTQgODYuNzYxNSA0OC41NDgyIDg2LjMwMzZMMjQuNzg0NiA3Mi41ODM3TDMzLjI2MDQgOTEuMDE2MUw1MS4wODM2IDg2LjY2MjdMNTEuMDc5IDg2LjY2MzlaIiBmaWxsPSIjRkM4NzUzIi8+PHBhdGggZD0iTTU0LjMzNDIgMTAxLjk2OUw1MS4wNTU4IDg2LjY3MjRMNjguNjgwNSA4MS41ODI0TDU4LjQ5NTkgOTkuMjIyN0M1Ny41ODc3IDEwMC43OTYgNTYuMDE3OCAxMDEuNzQ0IDU0LjMzNDIgMTAxLjk2OVoiIGZpbGw9IiM0MkQzQTkiLz48cGF0aCBkPSJNNjguNjgwMSA4MS41ODk5TDY2Ljc0OTMgNjEuNDE2Mkw4Mi44NTU2IDU3LjAzNzJMNjguNjgwMSA4MS41ODk5WiIgZmlsbD0iIzI3OTdFOCIvPjxwYXRoIGQ9Ik01MS4wNTU3IDg2LjY3ODZDNTEuMDU1NyA4Ni42Nzg2IDUxLjA1NjIgODYuNjcxMSA1MS4wNTMyIDg2LjY2OTVDNTEuODcxMSA4Ni40MjcxIDUyLjYwOTcgODUuODk5NCA1My4wNjYzIDg1LjEwODVMNjYuNzQ2NyA2MS40MTMzTDY4LjY3NTkgODEuNTg5OEw1MS4wNTExIDg2LjY3OThMNTEuMDU1NyA4Ni42Nzg2WiIgZmlsbD0iIzFEQkFDQiIvPjxwYXRoIGQ9Ik00Ny44OTQ5IDI2LjI3NjhDNDcuODc4IDI2LjM1OTcgNDcuODUyIDI2LjQ0NTEgNDcuODA2OCAyNi41MjM0TDQ3LjYyNzggMjYuODMzM0M0Ni43ODY1IDI4LjI5MDYgNDQuOTIzMiAyOC43ODY5IDQzLjQ2MTggMjcuOTQzMkM0Mi4wMDA0IDI3LjA5OTQgNDEuNDk4NiAyNS4yMzc2IDQyLjMzOTkgMjMuNzgwNEw0Mi41MTg5IDIzLjQ3MDRDNDIuNTY0MSAyMy4zOTIyIDQyLjYyNSAyMy4zMjY5IDQyLjY4ODQgMjMuMjcwOEwzNi40ODUzIDE5LjY4OTRDMzQuOTA3NiAxOC43Nzg2IDMzLjA3MTQgMTguNzM4MiAzMS41IDE5LjM3OTlMMzYuMzUzMyAzNC4yNTY5TDU0LjE3NjUgMjkuOTAzNUw0Ny44OTQ5IDI2LjI3NjhaIiBmaWxsPSIjRkQ1MjYzIi8+PHBhdGggZD0iTTc1LjYzODYgNDIuMzAyN0M3NS42MjE3IDQyLjM4NTcgNzUuNTk1NiA0Mi40NzExIDc1LjU1MDUgNDIuNTQ5M0w3NS4zNzE1IDQyLjg1OTNDNzQuNTMwMiA0NC4zMTY1IDcyLjY2NjkgNDQuODEyOSA3MS4yMDU0IDQzLjk2OTFDNjkuNzQ0IDQzLjEyNTQgNjkuMjQyMyA0MS4yNjM2IDcwLjA4MzYgMzkuODA2M0w3MC4yNjI2IDM5LjQ5NjNDNzAuMzA3NyAzOS40MTgxIDcwLjM2ODYgMzkuMzUyOSA3MC40MzIgMzkuMjk2N0w1NC4xNzYxIDI5LjkxMTRMNjIuNjUxOSA0OC4zNDM5TDc4LjgwMjYgNDQuMTI5NUw3NS42NDE1IDQyLjMwNDRMNzUuNjM4NiA0Mi4zMDI3WiIgZmlsbD0iI0ZGQ0YyMyIvPjxwYXRoIGQ9Ik03NS42MDU4IDQwLjgyMTlMNzUuNjQ0MiA0MC43NTUyQzc4LjE0ODEgMzYuNDE4MyA3OC42NDY1IDMxLjQ0ODggNzcuNDMwOSAyNi45MzgzQzc2LjIxNTMgMjIuNDI3OCA3My4yODQ3IDE4LjM3MTggNjguOTM1MiAxNS44NjA3QzY0LjU4NTggMTMuMzQ5NSA1OS42MDc5IDEyLjgzOTUgNTUuMDkzOSAxNC4wNDJDNTAuNTc5OSAxNS4yNDQ2IDQ2LjUyNTMgMTguMTYwOSA0NC4wMjE0IDIyLjQ5NzhMNDIuOTkxMSAyNC4yODI0QzQyLjM3MzkgMjUuMzUxNCA0Mi43NDQyIDI2LjcxNjMgNDMuODEzNCAyNy4zMzM2QzQ0Ljg4MjYgMjcuOTUwOSA0Ni4yNTE0IDI3LjU4NjIgNDYuODY2OSAyNi41MjAxTDQ3Ljg5NzMgMjQuNzM1NUM0OS43ODU3IDIxLjQ2NDcgNTIuODQ0MSAxOS4yNjczIDU2LjI1NDggMTguMzU4N0M1OS42NjU0IDE3LjQ1MDEgNjMuNDE5MSAxNy44MzI3IDY2LjY5OTQgMTkuNzI2NkM2OS45Nzk2IDIxLjYyMDQgNzIuMTg3OSAyNC42Nzk5IDczLjEwNjMgMjguMDg3OUM3NC4wMjQ4IDMxLjQ5NiA3My42NTEgMzUuMjQzNCA3MS43NjI2IDM4LjUxNDFMNzEuNzI0MSAzOC41ODA4TDcwLjczMzkgNDAuMjk1OEM3MC4xMTY3IDQxLjM2NDkgNzAuNDg3IDQyLjcyOTcgNzEuNTU2MiA0My4zNDdDNzIuNjI1NCA0My45NjQ0IDczLjk5NDIgNDMuNTk5NyA3NC42MDk4IDQyLjUzMzZMNzUuNTk5OSA0MC44MTg1TDc1LjYwNTggNDAuODIxOVoiIGZpbGw9IiMzRDRDNjYiLz48L3N2Zz4="; // crisp vector mark (was logo.png — pixelated when scaled)
8
+ const ASSETS_BASE_URL = 'https://raw.githubusercontent.com/Final-Commerce/command-frame/refs/heads/main/src/demo/assets';
9
+ const logo = 'data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA5OCAxMDQiIGZpbGw9Im5vbmUiPjxwYXRoIGQ9Ik01NS4yOTk4IDUwLjE2NjJMMzcuNzQyMiA0MC4wMjkzTDMxLjcyNzQgNTAuNDQ3MkwzOC45MjQyIDU0LjYwMjJMNTUuMjk5OCA1MC4xNjYyWiIgZmlsbD0iI0E1NjhCQyIvPjxwYXRoIGQ9Ik0zMS45OTYzIDcwLjQ1MDZMNDkuNTU2OCA4MC41ODkxTDU1LjU3MTUgNzAuMTcxM0w0OC4zNzE4IDY2LjAxNDVMMzEuOTk2MyA3MC40NTA2WiIgZmlsbD0iI0E1NjhCQyIvPjxwYXRoIGQ9Ik0zNi4zNTQyIDM0LjI1NzJDMzYuMzU0MiAzNC4yNTcyIDM2LjM1ODMgMzQuMjYzNSAzNi4zNTY3IDM0LjI2NjRDMzcuMTg2OSAzNC4wNjk3IDM4LjA5MTkgMzQuMTU5NiAzOC44ODUxIDM0LjYxNzVMNjIuNjQ4NiA0OC4zMzc0TDU0LjE3MjkgMjkuOTA0OUwzNi4zNDk2IDM0LjI1ODRMMzYuMzU0MiAzNC4yNTcyWiIgZmlsbD0iI0ZDODc1MyIvPjxwYXRoIGQ9Ik0zMy4wOTg4IDE4Ljk1MDdMMzYuMzc3MiAzNC4yNDczTDE4Ljc1MjUgMzkuMzM3M0wyOC45MzcxIDIxLjY5N0MyOS44NDUzIDIwLjEyMzkgMzEuNDE1MiAxOS4xNzYxIDMzLjA5ODggMTguOTUwN1oiIGZpbGw9IiM0MkQzQTkiLz48cGF0aCBkPSJNMTguNzUzMiAzOS4zNDA2TDIwLjY4MjQgNTkuNTE3MUw0LjU3NjA3IDYzLjg5NjJMMTguNzUzMiAzOS4zNDA2WiIgZmlsbD0iIzI3OTdFOCIvPjxwYXRoIGQ9Ik0zNi4zNzc5IDM0LjI0MDNDMzYuMzc3OSAzNC4yNDAzIDM2LjM3NzQgMzQuMjQ3OCAzNi4zODAzIDM0LjI0OTVDMzUuNTYyNCAzNC40OTE5IDM0LjgyMzkgMzUuMDE5NiAzNC4zNjczIDM1LjgxMDVMMjAuNjg2OSA1OS41MDU2TDE4Ljc1NzcgMzkuMzI5MUwzNi4zODI0IDM0LjIzOTFMMzYuMzc3OSAzNC4yNDAzWiIgZmlsbD0iIzFEQkFDQiIvPjxwYXRoIGQ9Ik01NS45MzUyIDEwMS41NDNMNTEuMDgxOSA4Ni42NjU5TDMzLjI1ODcgOTEuMDE5NEw1MC45NDk5IDEwMS4yMzNDNTIuNTI3NiAxMDIuMTQ0IDU0LjM2MzggMTAyLjE4NSA1NS45MzUyIDEwMS41NDNaIiBmaWxsPSIjRkQ1MjYzIi8+PHBhdGggZD0iTTMzLjI1NDkgOTEuMDE0TDI0Ljc4MjEgNzIuNTgzMkw4LjYzMTM1IDc2Ljc5NzVMMzMuMjU0OSA5MS4wMTRaIiBmaWxsPSIjRkZDRjIzIi8+PHBhdGggZD0iTTUxLjA3OSA4Ni42NjM5QzUxLjA3OSA4Ni42NjM5IDUxLjA3NDkgODYuNjU3NiA1MS4wNzY2IDg2LjY1NDdDNTAuMjQ2NCA4Ni44NTE0IDQ5LjM0MTQgODYuNzYxNSA0OC41NDgyIDg2LjMwMzZMMjQuNzg0NiA3Mi41ODM3TDMzLjI2MDQgOTEuMDE2MUw1MS4wODM2IDg2LjY2MjdMNTEuMDc5IDg2LjY2MzlaIiBmaWxsPSIjRkM4NzUzIi8+PHBhdGggZD0iTTU0LjMzNDIgMTAxLjk2OUw1MS4wNTU4IDg2LjY3MjRMNjguNjgwNSA4MS41ODI0TDU4LjQ5NTkgOTkuMjIyN0M1Ny41ODc3IDEwMC43OTYgNTYuMDE3OCAxMDEuNzQ0IDU0LjMzNDIgMTAxLjk2OVoiIGZpbGw9IiM0MkQzQTkiLz48cGF0aCBkPSJNNjguNjgwMSA4MS41ODk5TDY2Ljc0OTMgNjEuNDE2Mkw4Mi44NTU2IDU3LjAzNzJMNjguNjgwMSA4MS41ODk5WiIgZmlsbD0iIzI3OTdFOCIvPjxwYXRoIGQ9Ik01MS4wNTU3IDg2LjY3ODZDNTEuMDU1NyA4Ni42Nzg2IDUxLjA1NjIgODYuNjcxMSA1MS4wNTMyIDg2LjY2OTVDNTEuODcxMSA4Ni40MjcxIDUyLjYwOTcgODUuODk5NCA1My4wNjYzIDg1LjEwODVMNjYuNzQ2NyA2MS40MTMzTDY4LjY3NTkgODEuNTg5OEw1MS4wNTExIDg2LjY3OThMNTEuMDU1NyA4Ni42Nzg2WiIgZmlsbD0iIzFEQkFDQiIvPjxwYXRoIGQ9Ik00Ny44OTQ5IDI2LjI3NjhDNDcuODc4IDI2LjM1OTcgNDcuODUyIDI2LjQ0NTEgNDcuODA2OCAyNi41MjM0TDQ3LjYyNzggMjYuODMzM0M0Ni43ODY1IDI4LjI5MDYgNDQuOTIzMiAyOC43ODY5IDQzLjQ2MTggMjcuOTQzMkM0Mi4wMDA0IDI3LjA5OTQgNDEuNDk4NiAyNS4yMzc2IDQyLjMzOTkgMjMuNzgwNEw0Mi41MTg5IDIzLjQ3MDRDNDIuNTY0MSAyMy4zOTIyIDQyLjYyNSAyMy4zMjY5IDQyLjY4ODQgMjMuMjcwOEwzNi40ODUzIDE5LjY4OTRDMzQuOTA3NiAxOC43Nzg2IDMzLjA3MTQgMTguNzM4MiAzMS41IDE5LjM3OTlMMzYuMzUzMyAzNC4yNTY5TDU0LjE3NjUgMjkuOTAzNUw0Ny44OTQ5IDI2LjI3NjhaIiBmaWxsPSIjRkQ1MjYzIi8+PHBhdGggZD0iTTc1LjYzODYgNDIuMzAyN0M3NS42MjE3IDQyLjM4NTcgNzUuNTk1NiA0Mi40NzExIDc1LjU1MDUgNDIuNTQ5M0w3NS4zNzE1IDQyLjg1OTNDNzQuNTMwMiA0NC4zMTY1IDcyLjY2NjkgNDQuODEyOSA3MS4yMDU0IDQzLjk2OTFDNjkuNzQ0IDQzLjEyNTQgNjkuMjQyMyA0MS4yNjM2IDcwLjA4MzYgMzkuODA2M0w3MC4yNjI2IDM5LjQ5NjNDNzAuMzA3NyAzOS40MTgxIDcwLjM2ODYgMzkuMzUyOSA3MC40MzIgMzkuMjk2N0w1NC4xNzYxIDI5LjkxMTRMNjIuNjUxOSA0OC4zNDM5TDc4LjgwMjYgNDQuMTI5NUw3NS42NDE1IDQyLjMwNDRMNzUuNjM4NiA0Mi4zMDI3WiIgZmlsbD0iI0ZGQ0YyMyIvPjxwYXRoIGQ9Ik03NS42MDU4IDQwLjgyMTlMNzUuNjQ0MiA0MC43NTUyQzc4LjE0ODEgMzYuNDE4MyA3OC42NDY1IDMxLjQ0ODggNzcuNDMwOSAyNi45MzgzQzc2LjIxNTMgMjIuNDI3OCA3My4yODQ3IDE4LjM3MTggNjguOTM1MiAxNS44NjA3QzY0LjU4NTggMTMuMzQ5NSA1OS42MDc5IDEyLjgzOTUgNTUuMDkzOSAxNC4wNDJDNTAuNTc5OSAxNS4yNDQ2IDQ2LjUyNTMgMTguMTYwOSA0NC4wMjE0IDIyLjQ5NzhMNDIuOTkxMSAyNC4yODI0QzQyLjM3MzkgMjUuMzUxNCA0Mi43NDQyIDI2LjcxNjMgNDMuODEzNCAyNy4zMzM2QzQ0Ljg4MjYgMjcuOTUwOSA0Ni4yNTE0IDI3LjU4NjIgNDYuODY2OSAyNi41MjAxTDQ3Ljg5NzMgMjQuNzM1NUM0OS43ODU3IDIxLjQ2NDcgNTIuODQ0MSAxOS4yNjczIDU2LjI1NDggMTguMzU4N0M1OS42NjU0IDE3LjQ1MDEgNjMuNDE5MSAxNy44MzI3IDY2LjY5OTQgMTkuNzI2NkM2OS45Nzk2IDIxLjYyMDQgNzIuMTg3OSAyNC42Nzk5IDczLjEwNjMgMjguMDg3OUM3NC4wMjQ4IDMxLjQ5NiA3My42NTEgMzUuMjQzNCA3MS43NjI2IDM4LjUxNDFMNzEuNzI0MSAzOC41ODA4TDcwLjczMzkgNDAuMjk1OEM3MC4xMTY3IDQxLjM2NDkgNzAuNDg3IDQyLjcyOTcgNzEuNTU2MiA0My4zNDdDNzIuNjI1NCA0My45NjQ0IDczLjk5NDIgNDMuNTk5NyA3NC42MDk4IDQyLjUzMzZMNzUuNTk5OSA0MC44MTg1TDc1LjYwNTggNDAuODIxOVoiIGZpbGw9IiMzRDRDNjYiLz48L3N2Zz4='; // crisp vector mark (was logo.png — pixelated when scaled)
10
10
  const basilAlmondImg = `${ASSETS_BASE_URL}/basil-almond-paste.png`;
11
11
  const beerImg = `${ASSETS_BASE_URL}/beer-paste.png`;
12
12
  const beetImg = `${ASSETS_BASE_URL}/beet-paste.png`;
@@ -19,57 +19,57 @@ const redPepperImg = `${ASSETS_BASE_URL}/red-pepper-paste.png`;
19
19
  const roastedTomatoImg = `${ASSETS_BASE_URL}/roasted-tomato-paste.png`;
20
20
  // --- COMPANY ---
21
21
  export const MOCK_COMPANY = {
22
- id: "comp_paste_demo",
23
- name: "Paste Demo Company",
22
+ id: 'comp_paste_demo',
23
+ name: 'Paste Demo Company',
24
24
  logo: logo,
25
25
  settings: {
26
- currencyPrefix: "$",
27
- currencySuffix: "",
26
+ currencyPrefix: '$',
27
+ currencySuffix: '',
28
28
  minorUnits: 2,
29
- currencySymbol: "$",
30
- decimalSeparator: ".",
31
- thousandSeparator: ",",
32
- decimals: { $numberInt: "2" }
33
- }
29
+ currencySymbol: '$',
30
+ decimalSeparator: '.',
31
+ thousandSeparator: ',',
32
+ decimals: { $numberInt: '2' },
33
+ },
34
34
  };
35
35
  // --- OUTLETS ---
36
36
  export const MOCK_OUTLET_MAIN = {
37
- id: "outlet_main",
38
- _id: "outlet_main",
39
- name: "Main Kitchen",
40
- address: "123 Pasta Lane",
41
- address2: "Suite 1",
42
- city: "Rome",
43
- state: "RM",
44
- country: "IT",
45
- taxId: "TAX-IT-001",
46
- postCode: "00100",
37
+ id: 'outlet_main',
38
+ _id: 'outlet_main',
39
+ name: 'Main Kitchen',
40
+ address: '123 Pasta Lane',
41
+ address2: 'Suite 1',
42
+ city: 'Rome',
43
+ state: 'RM',
44
+ country: 'IT',
45
+ taxId: 'TAX-IT-001',
46
+ postCode: '00100',
47
47
  sequenceNumber: 1,
48
- stripeAccountId: "acct_paste_main"
48
+ stripeAccountId: 'acct_paste_main',
49
49
  };
50
50
  // --- STATIONS ---
51
51
  export const MOCK_STATION_1 = {
52
- _id: "station_counter_1",
53
- name: "Counter 1",
54
- status: "open",
52
+ _id: 'station_counter_1',
53
+ name: 'Counter 1',
54
+ status: 'open',
55
55
  sequenceNumber: 1,
56
- stripeTerminalId: "tm_1"
56
+ stripeTerminalId: 'tm_1',
57
57
  };
58
58
  export const MOCK_STATION_2 = {
59
- _id: "station_counter_2",
60
- name: "Counter 2",
61
- status: "open",
59
+ _id: 'station_counter_2',
60
+ name: 'Counter 2',
61
+ status: 'open',
62
62
  sequenceNumber: 2,
63
- stripeTerminalId: "tm_2"
63
+ stripeTerminalId: 'tm_2',
64
64
  };
65
65
  // --- SESSION (cash register) ---
66
66
  export const MOCK_SESSION = {
67
- id: "sess_mock_1",
67
+ id: 'sess_mock_1',
68
68
  stationId: MOCK_STATION_1._id,
69
69
  openingAmount: 100,
70
- openedBy: "user_mario",
70
+ openedBy: 'user_mario',
71
71
  currency: CurrencyCode.USD,
72
- minorUnits: 2
72
+ minorUnits: 2,
73
73
  };
74
74
  // --- ACTIVE REFUND DETAILS (refund UI state) ---
75
75
  export const MOCK_ACTIVE_REFUND_DETAILS = {
@@ -78,139 +78,139 @@ export const MOCK_ACTIVE_REFUND_DETAILS = {
78
78
  refundAmounts: {},
79
79
  currentRefundTotal: 0,
80
80
  amountRemaining: null,
81
- isRefund: true
81
+ isRefund: true,
82
82
  };
83
83
  // --- USERS ---
84
84
  export const MOCK_USER_MARIO = {
85
- id: "user_mario",
86
- firstName: "Mario",
87
- lastName: "Demoji",
85
+ id: 'user_mario',
86
+ firstName: 'Mario',
87
+ lastName: 'Demoji',
88
88
  type: CFUserTypes.MANAGER,
89
89
  role: {
90
- id: "role_manager",
91
- name: "Manager",
92
- permissions: []
90
+ id: 'role_manager',
91
+ name: 'Manager',
92
+ permissions: [],
93
93
  },
94
94
  outlets: [MOCK_OUTLET_MAIN.id],
95
- companies: [MOCK_COMPANY.id]
95
+ companies: [MOCK_COMPANY.id],
96
96
  };
97
97
  export const MOCK_USER_LUIGI = {
98
- id: "user_luigi",
99
- firstName: "Luigi",
100
- lastName: "Demoji",
98
+ id: 'user_luigi',
99
+ firstName: 'Luigi',
100
+ lastName: 'Demoji',
101
101
  type: CFUserTypes.CASHIER,
102
102
  role: {
103
- id: "role_cashier",
104
- name: "Cashier",
105
- permissions: []
103
+ id: 'role_cashier',
104
+ name: 'Cashier',
105
+ permissions: [],
106
106
  },
107
107
  outlets: [MOCK_OUTLET_MAIN.id],
108
- companies: [MOCK_COMPANY.id]
108
+ companies: [MOCK_COMPANY.id],
109
109
  };
110
110
  // --- CUSTOMERS ---
111
111
  export const MOCK_CUSTOMER_1 = {
112
- _id: "cust_giuseppe",
112
+ _id: 'cust_giuseppe',
113
113
  companyId: MOCK_COMPANY.id,
114
- email: "giuseppe@example.com",
115
- firstName: "Giuseppe",
116
- lastName: "Verdi",
117
- phone: "555-0101",
114
+ email: 'giuseppe@example.com',
115
+ firstName: 'Giuseppe',
116
+ lastName: 'Verdi',
117
+ phone: '555-0101',
118
118
  billing: {
119
- firstName: "Giuseppe",
120
- lastName: "Verdi",
121
- address1: "Via Roma 1",
122
- address2: "",
123
- city: "Milano",
124
- postCode: "20100",
125
- country: "IT"
119
+ firstName: 'Giuseppe',
120
+ lastName: 'Verdi',
121
+ address1: 'Via Roma 1',
122
+ address2: '',
123
+ city: 'Milano',
124
+ postCode: '20100',
125
+ country: 'IT',
126
126
  },
127
- shipping: null
127
+ shipping: null,
128
128
  };
129
129
  export const MOCK_CUSTOMER_2 = {
130
- _id: "cust_sofia",
130
+ _id: 'cust_sofia',
131
131
  companyId: MOCK_COMPANY.id,
132
- email: "sofia@example.com",
133
- firstName: "Sofia",
134
- lastName: "Loren",
135
- phone: "555-0102",
132
+ email: 'sofia@example.com',
133
+ firstName: 'Sofia',
134
+ lastName: 'Loren',
135
+ phone: '555-0102',
136
136
  billing: null,
137
- shipping: null
137
+ shipping: null,
138
138
  };
139
139
  export const MOCK_CUSTOMER_3 = {
140
- _id: "cust_alessandro",
140
+ _id: 'cust_alessandro',
141
141
  companyId: MOCK_COMPANY.id,
142
- email: "alessandro@example.com",
143
- firstName: "Alessandro",
144
- lastName: "Volta",
145
- phone: "555-0103",
142
+ email: 'alessandro@example.com',
143
+ firstName: 'Alessandro',
144
+ lastName: 'Volta',
145
+ phone: '555-0103',
146
146
  billing: null,
147
- shipping: null
147
+ shipping: null,
148
148
  };
149
149
  export const MOCK_CUSTOMER_4 = {
150
- _id: "cust_isabella",
150
+ _id: 'cust_isabella',
151
151
  companyId: MOCK_COMPANY.id,
152
- email: "isabella@example.com",
153
- firstName: "Isabella",
154
- lastName: "Rossellini",
155
- phone: "555-0104",
152
+ email: 'isabella@example.com',
153
+ firstName: 'Isabella',
154
+ lastName: 'Rossellini',
155
+ phone: '555-0104',
156
156
  billing: null,
157
- shipping: null
157
+ shipping: null,
158
158
  };
159
159
  export const MOCK_CUSTOMER_5 = {
160
- _id: "cust_leonardo",
160
+ _id: 'cust_leonardo',
161
161
  companyId: MOCK_COMPANY.id,
162
- email: "leonardo@example.com",
163
- firstName: "Leonardo",
164
- lastName: "Da Vinci",
165
- phone: "555-0105",
162
+ email: 'leonardo@example.com',
163
+ firstName: 'Leonardo',
164
+ lastName: 'Da Vinci',
165
+ phone: '555-0105',
166
166
  billing: null,
167
- shipping: null
167
+ shipping: null,
168
168
  };
169
169
  // --- CATEGORIES ---
170
170
  export const MOCK_CATEGORY_PASTES = {
171
- id: "cat_pastes",
172
- createdAt: "2024-01-01T00:00:00.000Z",
173
- updatedAt: "2024-01-01T00:00:00.000Z",
174
- name: "Pastes",
175
- externalId: "ext_cat_pastes",
171
+ id: 'cat_pastes',
172
+ createdAt: '2024-01-01T00:00:00.000Z',
173
+ updatedAt: '2024-01-01T00:00:00.000Z',
174
+ name: 'Pastes',
175
+ externalId: 'ext_cat_pastes',
176
176
  companyId: MOCK_COMPANY.id,
177
177
  };
178
178
  export const MOCK_CATEGORY_SPECIALTY = {
179
- id: "cat_specialty",
180
- createdAt: "2024-01-01T00:00:00.000Z",
181
- updatedAt: "2024-01-01T00:00:00.000Z",
182
- name: "Specialty",
183
- externalId: "ext_cat_specialty",
179
+ id: 'cat_specialty',
180
+ createdAt: '2024-01-01T00:00:00.000Z',
181
+ updatedAt: '2024-01-01T00:00:00.000Z',
182
+ name: 'Specialty',
183
+ externalId: 'ext_cat_specialty',
184
184
  companyId: MOCK_COMPANY.id,
185
- parentId: "cat_pastes"
185
+ parentId: 'cat_pastes',
186
186
  };
187
187
  export const MOCK_CATEGORY_BASIC = {
188
- id: "cat_basic",
189
- createdAt: "2024-01-01T00:00:00.000Z",
190
- updatedAt: "2024-01-01T00:00:00.000Z",
191
- name: "Basic",
192
- externalId: "ext_cat_basic",
188
+ id: 'cat_basic',
189
+ createdAt: '2024-01-01T00:00:00.000Z',
190
+ updatedAt: '2024-01-01T00:00:00.000Z',
191
+ name: 'Basic',
192
+ externalId: 'ext_cat_basic',
193
193
  companyId: MOCK_COMPANY.id,
194
- parentId: "cat_pastes"
194
+ parentId: 'cat_pastes',
195
195
  };
196
196
  export const MOCK_CATEGORY_VEGAN = {
197
- id: "cat_vegan",
198
- createdAt: "2024-01-01T00:00:00.000Z",
199
- updatedAt: "2024-01-01T00:00:00.000Z",
200
- name: "Vegan",
201
- externalId: "ext_cat_vegan",
197
+ id: 'cat_vegan',
198
+ createdAt: '2024-01-01T00:00:00.000Z',
199
+ updatedAt: '2024-01-01T00:00:00.000Z',
200
+ name: 'Vegan',
201
+ externalId: 'ext_cat_vegan',
202
202
  companyId: MOCK_COMPANY.id,
203
203
  };
204
204
  export const MOCK_CATEGORY_SPICY = {
205
- id: "cat_spicy",
206
- createdAt: "2024-01-01T00:00:00.000Z",
207
- updatedAt: "2024-01-01T00:00:00.000Z",
208
- name: "Spicy",
209
- externalId: "ext_cat_spicy",
205
+ id: 'cat_spicy',
206
+ createdAt: '2024-01-01T00:00:00.000Z',
207
+ updatedAt: '2024-01-01T00:00:00.000Z',
208
+ name: 'Spicy',
209
+ externalId: 'ext_cat_spicy',
210
210
  companyId: MOCK_COMPANY.id,
211
211
  };
212
212
  // --- PRODUCTS ---
213
- const createInventory = (stock) => [{ warehouse: "main", outletId: MOCK_OUTLET_MAIN.id, stock }];
213
+ const createInventory = (stock) => [{ warehouse: 'main', outletId: MOCK_OUTLET_MAIN.id, stock }];
214
214
  // Helper for Simple Product
215
215
  const createSimpleProduct = (id, name, price, image, categories, description) => {
216
216
  const sku = `SKU-${id.toUpperCase()}`;
@@ -224,12 +224,12 @@ const createSimpleProduct = (id, name, price, image, categories, description) =>
224
224
  minorUnits: 2,
225
225
  minPrice: price,
226
226
  maxPrice: price,
227
- status: "active",
227
+ status: 'active',
228
228
  productType: CFProductType.SIMPLE,
229
- taxTable: "tax_standard",
229
+ taxTable: 'tax_standard',
230
230
  description,
231
231
  images: [image],
232
- categories: categories.map(c => ({ name: c.name, externalId: c.externalId ?? c.id })),
232
+ categories: categories.map((c) => ({ name: c.name, externalId: c.externalId ?? c.id })),
233
233
  attributes: [],
234
234
  variants: [
235
235
  {
@@ -241,9 +241,9 @@ const createSimpleProduct = (id, name, price, image, categories, description) =>
241
241
  manageStock: true,
242
242
  externalId: `ext_${id}_var`,
243
243
  attributes: [],
244
- inventory: createInventory(100)
245
- }
246
- ]
244
+ inventory: createInventory(100),
245
+ },
246
+ ],
247
247
  };
248
248
  };
249
249
  // Helper for Variable Product (Size: Small, Large)
@@ -259,13 +259,13 @@ const createVariableProduct = (id, name, basePrice, largePrice, image, categorie
259
259
  minorUnits: 2,
260
260
  minPrice: basePrice,
261
261
  maxPrice: largePrice,
262
- status: "active",
262
+ status: 'active',
263
263
  productType: CFProductType.VARIABLE,
264
- taxTable: "tax_standard",
264
+ taxTable: 'tax_standard',
265
265
  description,
266
266
  images: [image],
267
- categories: categories.map(c => ({ name: c.name, externalId: c.externalId ?? c.id })),
268
- attributes: [{ name: "Size", values: ["Small", "Large"] }],
267
+ categories: categories.map((c) => ({ name: c.name, externalId: c.externalId ?? c.id })),
268
+ attributes: [{ name: 'Size', values: ['Small', 'Large'] }],
269
269
  variants: [
270
270
  {
271
271
  _id: `${id}_var_small`,
@@ -275,8 +275,8 @@ const createVariableProduct = (id, name, basePrice, largePrice, image, categorie
275
275
  isOnSale: false,
276
276
  manageStock: true,
277
277
  externalId: `ext_${id}_var_s`,
278
- attributes: [{ name: "Size", value: "Small" }],
279
- inventory: createInventory(50)
278
+ attributes: [{ name: 'Size', value: 'Small' }],
279
+ inventory: createInventory(50),
280
280
  },
281
281
  {
282
282
  _id: `${id}_var_large`,
@@ -286,30 +286,30 @@ const createVariableProduct = (id, name, basePrice, largePrice, image, categorie
286
286
  isOnSale: false,
287
287
  manageStock: true,
288
288
  externalId: `ext_${id}_var_l`,
289
- attributes: [{ name: "Size", value: "Large" }],
290
- inventory: createInventory(30)
291
- }
292
- ]
289
+ attributes: [{ name: 'Size', value: 'Large' }],
290
+ inventory: createInventory(30),
291
+ },
292
+ ],
293
293
  };
294
294
  };
295
- export const MOCK_PRODUCT_BASIL_ALMOND = createSimpleProduct("prod_basil_almond", "Basil Almond Paste", 1200, basilAlmondImg, [MOCK_CATEGORY_PASTES, MOCK_CATEGORY_SPECIALTY, MOCK_CATEGORY_VEGAN], "A rich blend of fresh basil and roasted almonds.");
296
- export const MOCK_PRODUCT_BEER = createVariableProduct("prod_beer", "Beer Paste", 1500, 2500, beerImg, [MOCK_CATEGORY_PASTES, MOCK_CATEGORY_SPECIALTY], "Unique paste infused with dark lager.");
297
- export const MOCK_PRODUCT_BEET = createSimpleProduct("prod_beet", "Beet Paste", 1000, beetImg, [MOCK_CATEGORY_PASTES, MOCK_CATEGORY_BASIC, MOCK_CATEGORY_VEGAN], "Earthy and sweet beet paste, perfect for salads.");
298
- export const MOCK_PRODUCT_CARAMELIZED = createVariableProduct("prod_caramelized", "Caramelized Paste", 1400, 2200, caramelizedImg, [MOCK_CATEGORY_PASTES, MOCK_CATEGORY_SPECIALTY, MOCK_CATEGORY_VEGAN], "Slow-cooked caramelized onion paste.");
299
- export const MOCK_PRODUCT_GARLIC_ONION = createVariableProduct("prod_garlic_onion", "Garlic Onion Paste", 1100, 1800, garlicOnionImg, [MOCK_CATEGORY_PASTES, MOCK_CATEGORY_BASIC, MOCK_CATEGORY_VEGAN], "Classic savory base for any dish.");
300
- export const MOCK_PRODUCT_GARLIC = createSimpleProduct("prod_garlic", "Garlic Paste", 900, garlicImg, [MOCK_CATEGORY_PASTES, MOCK_CATEGORY_BASIC, MOCK_CATEGORY_VEGAN], "Pure, intense garlic paste.");
301
- export const MOCK_PRODUCT_GINGER_LIME = createVariableProduct("prod_ginger_lime", "Ginger Lime Paste", 1300, 2000, gingerLimeImg, [MOCK_CATEGORY_PASTES, MOCK_CATEGORY_SPECIALTY, MOCK_CATEGORY_SPICY, MOCK_CATEGORY_VEGAN], "Zesty and spicy, great for asian cuisine.");
302
- export const MOCK_PRODUCT_LEMON = createSimpleProduct("prod_lemon", "Lemon Paste", 1050, lemonImg, [MOCK_CATEGORY_PASTES, MOCK_CATEGORY_BASIC, MOCK_CATEGORY_VEGAN], "Bright citrus flavor concentrate.");
303
- export const MOCK_PRODUCT_RED_PEPPER = createVariableProduct("prod_red_pepper", "Red Pepper Paste", 1250, 1900, redPepperImg, [MOCK_CATEGORY_PASTES, MOCK_CATEGORY_BASIC, MOCK_CATEGORY_SPICY, MOCK_CATEGORY_VEGAN], "Roasted red peppers with a hint of spice.");
304
- export const MOCK_PRODUCT_ROASTED_TOMATO = createVariableProduct("prod_roasted_tomato", "Roasted Tomato Paste", 1150, 1850, roastedTomatoImg, [MOCK_CATEGORY_PASTES, MOCK_CATEGORY_BASIC, MOCK_CATEGORY_VEGAN], "Deep, umami-rich tomato flavor.");
305
- export const MOCK_PRODUCT_MINT_LEMON = createSimpleProduct("prod_mint_lemon", "Mint Lemon Paste", 1200, lemonImg, // Reusing lemon image for now
306
- [MOCK_CATEGORY_PASTES, MOCK_CATEGORY_SPECIALTY, MOCK_CATEGORY_VEGAN], "Refreshing mint and lemon blend.");
307
- export const MOCK_PRODUCT_CHILI_GARLIC = createVariableProduct("prod_chili_garlic", "Chili Garlic Paste", 1050, 1650, redPepperImg, // Reusing red pepper image
308
- [MOCK_CATEGORY_PASTES, MOCK_CATEGORY_BASIC, MOCK_CATEGORY_SPICY, MOCK_CATEGORY_VEGAN], "Spicy garlic paste with chili flakes.");
309
- export const MOCK_PRODUCT_HABANERO = createSimpleProduct("prod_habanero", "Habanero Paste", 1400, redPepperImg, // Reusing red pepper image
310
- [MOCK_CATEGORY_PASTES, MOCK_CATEGORY_SPICY, MOCK_CATEGORY_VEGAN], "Extremely spicy habanero concentrate.");
311
- export const MOCK_PRODUCT_BLACK_GARLIC = createSimpleProduct("prod_black_garlic", "Black Garlic Paste", 1800, garlicImg, // Reusing garlic image
312
- [MOCK_CATEGORY_PASTES, MOCK_CATEGORY_SPECIALTY, MOCK_CATEGORY_VEGAN], "Fermented black garlic paste, sweet and savory.");
295
+ export const MOCK_PRODUCT_BASIL_ALMOND = createSimpleProduct('prod_basil_almond', 'Basil Almond Paste', 1200, basilAlmondImg, [MOCK_CATEGORY_PASTES, MOCK_CATEGORY_SPECIALTY, MOCK_CATEGORY_VEGAN], 'A rich blend of fresh basil and roasted almonds.');
296
+ export const MOCK_PRODUCT_BEER = createVariableProduct('prod_beer', 'Beer Paste', 1500, 2500, beerImg, [MOCK_CATEGORY_PASTES, MOCK_CATEGORY_SPECIALTY], 'Unique paste infused with dark lager.');
297
+ export const MOCK_PRODUCT_BEET = createSimpleProduct('prod_beet', 'Beet Paste', 1000, beetImg, [MOCK_CATEGORY_PASTES, MOCK_CATEGORY_BASIC, MOCK_CATEGORY_VEGAN], 'Earthy and sweet beet paste, perfect for salads.');
298
+ export const MOCK_PRODUCT_CARAMELIZED = createVariableProduct('prod_caramelized', 'Caramelized Paste', 1400, 2200, caramelizedImg, [MOCK_CATEGORY_PASTES, MOCK_CATEGORY_SPECIALTY, MOCK_CATEGORY_VEGAN], 'Slow-cooked caramelized onion paste.');
299
+ export const MOCK_PRODUCT_GARLIC_ONION = createVariableProduct('prod_garlic_onion', 'Garlic Onion Paste', 1100, 1800, garlicOnionImg, [MOCK_CATEGORY_PASTES, MOCK_CATEGORY_BASIC, MOCK_CATEGORY_VEGAN], 'Classic savory base for any dish.');
300
+ export const MOCK_PRODUCT_GARLIC = createSimpleProduct('prod_garlic', 'Garlic Paste', 900, garlicImg, [MOCK_CATEGORY_PASTES, MOCK_CATEGORY_BASIC, MOCK_CATEGORY_VEGAN], 'Pure, intense garlic paste.');
301
+ export const MOCK_PRODUCT_GINGER_LIME = createVariableProduct('prod_ginger_lime', 'Ginger Lime Paste', 1300, 2000, gingerLimeImg, [MOCK_CATEGORY_PASTES, MOCK_CATEGORY_SPECIALTY, MOCK_CATEGORY_SPICY, MOCK_CATEGORY_VEGAN], 'Zesty and spicy, great for asian cuisine.');
302
+ export const MOCK_PRODUCT_LEMON = createSimpleProduct('prod_lemon', 'Lemon Paste', 1050, lemonImg, [MOCK_CATEGORY_PASTES, MOCK_CATEGORY_BASIC, MOCK_CATEGORY_VEGAN], 'Bright citrus flavor concentrate.');
303
+ export const MOCK_PRODUCT_RED_PEPPER = createVariableProduct('prod_red_pepper', 'Red Pepper Paste', 1250, 1900, redPepperImg, [MOCK_CATEGORY_PASTES, MOCK_CATEGORY_BASIC, MOCK_CATEGORY_SPICY, MOCK_CATEGORY_VEGAN], 'Roasted red peppers with a hint of spice.');
304
+ export const MOCK_PRODUCT_ROASTED_TOMATO = createVariableProduct('prod_roasted_tomato', 'Roasted Tomato Paste', 1150, 1850, roastedTomatoImg, [MOCK_CATEGORY_PASTES, MOCK_CATEGORY_BASIC, MOCK_CATEGORY_VEGAN], 'Deep, umami-rich tomato flavor.');
305
+ export const MOCK_PRODUCT_MINT_LEMON = createSimpleProduct('prod_mint_lemon', 'Mint Lemon Paste', 1200, lemonImg, // Reusing lemon image for now
306
+ [MOCK_CATEGORY_PASTES, MOCK_CATEGORY_SPECIALTY, MOCK_CATEGORY_VEGAN], 'Refreshing mint and lemon blend.');
307
+ export const MOCK_PRODUCT_CHILI_GARLIC = createVariableProduct('prod_chili_garlic', 'Chili Garlic Paste', 1050, 1650, redPepperImg, // Reusing red pepper image
308
+ [MOCK_CATEGORY_PASTES, MOCK_CATEGORY_BASIC, MOCK_CATEGORY_SPICY, MOCK_CATEGORY_VEGAN], 'Spicy garlic paste with chili flakes.');
309
+ export const MOCK_PRODUCT_HABANERO = createSimpleProduct('prod_habanero', 'Habanero Paste', 1400, redPepperImg, // Reusing red pepper image
310
+ [MOCK_CATEGORY_PASTES, MOCK_CATEGORY_SPICY, MOCK_CATEGORY_VEGAN], 'Extremely spicy habanero concentrate.');
311
+ export const MOCK_PRODUCT_BLACK_GARLIC = createSimpleProduct('prod_black_garlic', 'Black Garlic Paste', 1800, garlicImg, // Reusing garlic image
312
+ [MOCK_CATEGORY_PASTES, MOCK_CATEGORY_SPECIALTY, MOCK_CATEGORY_VEGAN], 'Fermented black garlic paste, sweet and savory.');
313
313
  // --- ORDERS ---
314
314
  // Helper to create line item
315
315
  const createLineItem = (product, variantIndex = 0, quantity = 1) => {
@@ -323,30 +323,30 @@ const createLineItem = (product, variantIndex = 0, quantity = 1) => {
323
323
  taxes: [],
324
324
  discount: {
325
325
  itemDiscounts: [],
326
- cartDiscount: { percentage: 0, amount: 0 }
326
+ cartDiscount: { percentage: 0, amount: 0 },
327
327
  },
328
328
  fee: { itemFees: [] },
329
329
  totalTax: 0,
330
330
  total: variant.price * quantity,
331
331
  lineNetWithFees: variant.price * quantity,
332
332
  metadata: [],
333
- image: product.images?.[0] || "",
333
+ image: product.images?.[0] || '',
334
334
  sku: variant.sku,
335
335
  stock: variant.inventory?.[0]?.stock || 0,
336
- attributes: variant.attributes.map(a => `${a.name}: ${a.value}`).join(", ")
336
+ attributes: variant.attributes.map((a) => `${a.name}: ${a.value}`).join(', '),
337
337
  };
338
338
  };
339
339
  export const MOCK_ORDER_1 = {
340
- _id: "order_1001",
340
+ _id: 'order_1001',
341
341
  currency: CurrencyCode.USD,
342
342
  minorUnits: 2,
343
- receiptId: "1001-0001",
343
+ receiptId: '1001-0001',
344
344
  companyId: MOCK_COMPANY.id,
345
345
  externalId: null,
346
- status: "completed",
347
- paymentState: "paid",
348
- fulfillmentState: "fulfilled",
349
- displayState: "Completed",
346
+ status: 'completed',
347
+ paymentState: 'paid',
348
+ fulfillmentState: 'fulfilled',
349
+ displayState: 'Completed',
350
350
  customer: MOCK_CUSTOMER_1,
351
351
  summary: {
352
352
  total: 2100,
@@ -355,26 +355,26 @@ export const MOCK_ORDER_1 = {
355
355
  shippingTotal: 0,
356
356
  totalTaxes: 0,
357
357
  taxes: [],
358
- isTaxInclusive: false
358
+ isTaxInclusive: false,
359
359
  },
360
360
  cartDiscount: null,
361
361
  cartFees: [],
362
362
  paymentMethods: [
363
363
  {
364
- transactionId: "trans_cash_1",
365
- paymentType: "cash",
364
+ transactionId: 'trans_cash_1',
365
+ paymentType: 'cash',
366
366
  amount: 2100,
367
367
  timestamp: new Date().toISOString(),
368
- processor: "cash"
369
- }
368
+ processor: 'cash',
369
+ },
370
370
  ],
371
- source: "pos",
371
+ source: 'pos',
372
372
  posData: {
373
373
  outlet: MOCK_OUTLET_MAIN.id,
374
374
  station: MOCK_STATION_1._id,
375
- employee: MOCK_USER_LUIGI.id
375
+ employee: MOCK_USER_LUIGI.id,
376
376
  },
377
- sessionId: "sess_1",
377
+ sessionId: 'sess_1',
378
378
  metadata: [],
379
379
  billing: MOCK_CUSTOMER_1.billing || null,
380
380
  shipping: null,
@@ -384,19 +384,19 @@ export const MOCK_ORDER_1 = {
384
384
  user: MOCK_USER_LUIGI,
385
385
  outlet: MOCK_OUTLET_MAIN,
386
386
  station: MOCK_STATION_1,
387
- createdAt: new Date().toISOString()
387
+ createdAt: new Date().toISOString(),
388
388
  };
389
389
  export const MOCK_ORDER_2 = {
390
- _id: "order_1002",
390
+ _id: 'order_1002',
391
391
  currency: CurrencyCode.USD,
392
392
  minorUnits: 2,
393
- receiptId: "1001-0002",
393
+ receiptId: '1001-0002',
394
394
  companyId: MOCK_COMPANY.id,
395
395
  externalId: null,
396
- status: "completed",
397
- paymentState: "paid",
398
- fulfillmentState: "fulfilled",
399
- displayState: "Completed",
396
+ status: 'completed',
397
+ paymentState: 'paid',
398
+ fulfillmentState: 'fulfilled',
399
+ displayState: 'Completed',
400
400
  customer: MOCK_CUSTOMER_2,
401
401
  summary: {
402
402
  total: 3000,
@@ -405,26 +405,26 @@ export const MOCK_ORDER_2 = {
405
405
  shippingTotal: 0,
406
406
  totalTaxes: 0,
407
407
  taxes: [],
408
- isTaxInclusive: false
408
+ isTaxInclusive: false,
409
409
  },
410
410
  cartDiscount: null,
411
411
  cartFees: [],
412
412
  paymentMethods: [
413
413
  {
414
- transactionId: "trans_card_1",
415
- paymentType: "credit_card",
414
+ transactionId: 'trans_card_1',
415
+ paymentType: 'credit_card',
416
416
  amount: 3000,
417
417
  timestamp: new Date(Date.now() - 3600000).toISOString(),
418
- processor: "stripe"
419
- }
418
+ processor: 'stripe',
419
+ },
420
420
  ],
421
- source: "pos",
421
+ source: 'pos',
422
422
  posData: {
423
423
  outlet: MOCK_OUTLET_MAIN.id,
424
424
  station: MOCK_STATION_2._id,
425
- employee: MOCK_USER_MARIO.id
425
+ employee: MOCK_USER_MARIO.id,
426
426
  },
427
- sessionId: "sess_2",
427
+ sessionId: 'sess_2',
428
428
  metadata: [],
429
429
  billing: null,
430
430
  shipping: null,
@@ -434,19 +434,19 @@ export const MOCK_ORDER_2 = {
434
434
  user: MOCK_USER_MARIO,
435
435
  outlet: MOCK_OUTLET_MAIN,
436
436
  station: MOCK_STATION_2,
437
- createdAt: new Date(Date.now() - 3600000).toISOString()
437
+ createdAt: new Date(Date.now() - 3600000).toISOString(),
438
438
  };
439
439
  export const MOCK_ORDER_3 = {
440
- _id: "order_1003",
440
+ _id: 'order_1003',
441
441
  currency: CurrencyCode.USD,
442
442
  minorUnits: 2,
443
- receiptId: "1001-0003",
443
+ receiptId: '1001-0003',
444
444
  companyId: MOCK_COMPANY.id,
445
445
  externalId: null,
446
- status: "refunded",
447
- paymentState: "refunded",
448
- fulfillmentState: "fulfilled",
449
- displayState: "Refunded",
446
+ status: 'refunded',
447
+ paymentState: 'refunded',
448
+ fulfillmentState: 'fulfilled',
449
+ displayState: 'Refunded',
450
450
  customer: MOCK_CUSTOMER_3,
451
451
  summary: {
452
452
  total: 1500,
@@ -455,26 +455,26 @@ export const MOCK_ORDER_3 = {
455
455
  shippingTotal: 0,
456
456
  totalTaxes: 0,
457
457
  taxes: [],
458
- isTaxInclusive: false
458
+ isTaxInclusive: false,
459
459
  },
460
460
  cartDiscount: null,
461
461
  cartFees: [],
462
462
  paymentMethods: [
463
463
  {
464
- transactionId: "trans_card_2",
465
- paymentType: "credit_card",
464
+ transactionId: 'trans_card_2',
465
+ paymentType: 'credit_card',
466
466
  amount: 1500,
467
467
  timestamp: new Date(Date.now() - 7200000).toISOString(),
468
- processor: "stripe"
469
- }
468
+ processor: 'stripe',
469
+ },
470
470
  ],
471
- source: "pos",
471
+ source: 'pos',
472
472
  posData: {
473
473
  outlet: MOCK_OUTLET_MAIN.id,
474
474
  station: MOCK_STATION_1._id,
475
- employee: MOCK_USER_MARIO.id
475
+ employee: MOCK_USER_MARIO.id,
476
476
  },
477
- sessionId: "sess_3",
477
+ sessionId: 'sess_3',
478
478
  metadata: [],
479
479
  billing: null,
480
480
  shipping: null,
@@ -484,19 +484,72 @@ export const MOCK_ORDER_3 = {
484
484
  user: MOCK_USER_MARIO,
485
485
  outlet: MOCK_OUTLET_MAIN,
486
486
  station: MOCK_STATION_1,
487
- createdAt: new Date(Date.now() - 7200000).toISOString()
487
+ createdAt: new Date(Date.now() - 7200000).toISOString(),
488
+ };
489
+ // Open order with one captured deposit leg — voidable via the refund branch
490
+ // (demoes voidOrder's `refunded` outcome). Copied from MOCK_ORDER_1, id/state/
491
+ // paymentMethods changed.
492
+ export const MOCK_ORDER_4 = {
493
+ _id: 'order_1004',
494
+ currency: CurrencyCode.USD,
495
+ minorUnits: 2,
496
+ receiptId: '1001-0004',
497
+ companyId: MOCK_COMPANY.id,
498
+ externalId: null,
499
+ status: 'in_progress',
500
+ paymentState: 'partially_paid',
501
+ fulfillmentState: 'pending',
502
+ displayState: 'Partially Paid',
503
+ customer: MOCK_CUSTOMER_5,
504
+ summary: {
505
+ total: 2500,
506
+ subtotalAfterFees: 2500,
507
+ discountTotal: 0,
508
+ shippingTotal: 0,
509
+ totalTaxes: 0,
510
+ taxes: [],
511
+ isTaxInclusive: false,
512
+ },
513
+ cartDiscount: null,
514
+ cartFees: [],
515
+ paymentMethods: [
516
+ {
517
+ transactionId: 'trans_cash_2',
518
+ paymentType: 'cash',
519
+ amount: 1000,
520
+ timestamp: new Date(Date.now() - 600000).toISOString(),
521
+ processor: 'cash',
522
+ },
523
+ ],
524
+ source: 'pos',
525
+ posData: {
526
+ outlet: MOCK_OUTLET_MAIN.id,
527
+ station: MOCK_STATION_2._id,
528
+ employee: MOCK_USER_MARIO.id,
529
+ },
530
+ sessionId: 'sess_4',
531
+ metadata: [],
532
+ billing: null,
533
+ shipping: null,
534
+ lineItems: [createLineItem(MOCK_PRODUCT_RED_PEPPER, 0, 1)],
535
+ customSales: [],
536
+ balance: 1500,
537
+ user: MOCK_USER_MARIO,
538
+ outlet: MOCK_OUTLET_MAIN,
539
+ station: MOCK_STATION_2,
540
+ createdAt: new Date(Date.now() - 600000).toISOString(),
488
541
  };
489
542
  export const MOCK_PARKED_ORDER_1 = {
490
- _id: "parked_2001",
543
+ _id: 'parked_2001',
491
544
  currency: CurrencyCode.USD,
492
545
  minorUnits: 2,
493
- receiptId: "PARK-0001",
546
+ receiptId: 'PARK-0001',
494
547
  companyId: MOCK_COMPANY.id,
495
548
  externalId: null,
496
- status: "parked",
497
- paymentState: "unpaid",
498
- fulfillmentState: "pending",
499
- displayState: "Parked",
549
+ status: 'parked',
550
+ paymentState: 'unpaid',
551
+ fulfillmentState: 'pending',
552
+ displayState: 'Parked',
500
553
  customer: MOCK_CUSTOMER_4,
501
554
  summary: {
502
555
  total: 2100,
@@ -505,18 +558,18 @@ export const MOCK_PARKED_ORDER_1 = {
505
558
  shippingTotal: 0,
506
559
  totalTaxes: 0,
507
560
  taxes: [],
508
- isTaxInclusive: false
561
+ isTaxInclusive: false,
509
562
  },
510
563
  cartDiscount: null,
511
564
  cartFees: [],
512
565
  paymentMethods: [],
513
- source: "pos",
566
+ source: 'pos',
514
567
  posData: {
515
568
  outlet: MOCK_OUTLET_MAIN.id,
516
569
  station: MOCK_STATION_1._id,
517
- employee: MOCK_USER_LUIGI.id
570
+ employee: MOCK_USER_LUIGI.id,
518
571
  },
519
- sessionId: "sess_park_1",
572
+ sessionId: 'sess_park_1',
520
573
  metadata: [],
521
574
  billing: null,
522
575
  shipping: null,
@@ -526,19 +579,19 @@ export const MOCK_PARKED_ORDER_1 = {
526
579
  user: MOCK_USER_LUIGI,
527
580
  outlet: MOCK_OUTLET_MAIN,
528
581
  station: MOCK_STATION_1,
529
- createdAt: new Date(Date.now() - 1800000).toISOString()
582
+ createdAt: new Date(Date.now() - 1800000).toISOString(),
530
583
  };
531
584
  export const MOCK_PARKED_ORDER_2 = {
532
- _id: "parked_2002",
585
+ _id: 'parked_2002',
533
586
  currency: CurrencyCode.USD,
534
587
  minorUnits: 2,
535
- receiptId: "PARK-0002",
588
+ receiptId: 'PARK-0002',
536
589
  companyId: MOCK_COMPANY.id,
537
590
  externalId: null,
538
- status: "parked",
539
- paymentState: "unpaid",
540
- fulfillmentState: "pending",
541
- displayState: "Parked",
591
+ status: 'parked',
592
+ paymentState: 'unpaid',
593
+ fulfillmentState: 'pending',
594
+ displayState: 'Parked',
542
595
  customer: null,
543
596
  summary: {
544
597
  total: 2500,
@@ -547,18 +600,18 @@ export const MOCK_PARKED_ORDER_2 = {
547
600
  shippingTotal: 0,
548
601
  totalTaxes: 0,
549
602
  taxes: [],
550
- isTaxInclusive: false
603
+ isTaxInclusive: false,
551
604
  },
552
605
  cartDiscount: null,
553
606
  cartFees: [],
554
607
  paymentMethods: [],
555
- source: "pos",
608
+ source: 'pos',
556
609
  posData: {
557
610
  outlet: MOCK_OUTLET_MAIN.id,
558
611
  station: MOCK_STATION_2._id,
559
- employee: MOCK_USER_MARIO.id
612
+ employee: MOCK_USER_MARIO.id,
560
613
  },
561
- sessionId: "sess_park_2",
614
+ sessionId: 'sess_park_2',
562
615
  metadata: [],
563
616
  billing: null,
564
617
  shipping: null,
@@ -568,14 +621,20 @@ export const MOCK_PARKED_ORDER_2 = {
568
621
  user: MOCK_USER_MARIO,
569
622
  outlet: MOCK_OUTLET_MAIN,
570
623
  station: MOCK_STATION_2,
571
- createdAt: new Date(Date.now() - 900000).toISOString()
624
+ createdAt: new Date(Date.now() - 900000).toISOString(),
572
625
  };
573
626
  // --- EXPORT COLLECTIONS ---
574
627
  export const MOCK_USERS = [MOCK_USER_MARIO, MOCK_USER_LUIGI];
575
628
  export const MOCK_STATIONS = [MOCK_STATION_1, MOCK_STATION_2];
576
629
  export const MOCK_OUTLETS = [MOCK_OUTLET_MAIN];
577
630
  export const MOCK_CUSTOMERS = [MOCK_CUSTOMER_1, MOCK_CUSTOMER_2, MOCK_CUSTOMER_3, MOCK_CUSTOMER_4, MOCK_CUSTOMER_5];
578
- export const MOCK_CATEGORIES = [MOCK_CATEGORY_PASTES, MOCK_CATEGORY_SPECIALTY, MOCK_CATEGORY_BASIC, MOCK_CATEGORY_VEGAN, MOCK_CATEGORY_SPICY];
631
+ export const MOCK_CATEGORIES = [
632
+ MOCK_CATEGORY_PASTES,
633
+ MOCK_CATEGORY_SPECIALTY,
634
+ MOCK_CATEGORY_BASIC,
635
+ MOCK_CATEGORY_VEGAN,
636
+ MOCK_CATEGORY_SPICY,
637
+ ];
579
638
  export const MOCK_PRODUCTS = [
580
639
  MOCK_PRODUCT_BASIL_ALMOND,
581
640
  MOCK_PRODUCT_BEER,
@@ -590,9 +649,9 @@ export const MOCK_PRODUCTS = [
590
649
  MOCK_PRODUCT_MINT_LEMON,
591
650
  MOCK_PRODUCT_CHILI_GARLIC,
592
651
  MOCK_PRODUCT_HABANERO,
593
- MOCK_PRODUCT_BLACK_GARLIC
652
+ MOCK_PRODUCT_BLACK_GARLIC,
594
653
  ];
595
- export const MOCK_ORDERS = [MOCK_ORDER_1, MOCK_ORDER_2, MOCK_ORDER_3];
654
+ export const MOCK_ORDERS = [MOCK_ORDER_1, MOCK_ORDER_2, MOCK_ORDER_3, MOCK_ORDER_4];
596
655
  export const MOCK_PARKED_ORDERS = [MOCK_PARKED_ORDER_1, MOCK_PARKED_ORDER_2];
597
656
  // Compatibility Exports (reassigned by setMockDatabase)
598
657
  export let MOCK_USER = MOCK_USERS[0];
@@ -606,7 +665,7 @@ export let MOCK_CART = {
606
665
  products: [],
607
666
  customSales: [],
608
667
  nonRevenueItems: [],
609
- customer: null
668
+ customer: null,
610
669
  };
611
670
  export let MOCK_ACTIVE_PRODUCT;
612
671
  export const setMockActiveProduct = (activeProduct) => {
@@ -626,13 +685,13 @@ export const resetMockCart = () => {
626
685
  products: [],
627
686
  customSales: [],
628
687
  nonRevenueItems: [],
629
- customer: null
688
+ customer: null,
630
689
  };
631
690
  };
632
691
  function resolveMockOrderCurrency() {
633
692
  const settings = MOCK_COMPANY.settings;
634
693
  const raw = settings?.currency;
635
- if (typeof raw === "string" && Object.values(CurrencyCode).includes(raw)) {
694
+ if (typeof raw === 'string' && Object.values(CurrencyCode).includes(raw)) {
636
695
  return raw;
637
696
  }
638
697
  return CurrencyCode.USD;
@@ -691,16 +750,15 @@ export const safeSerialize = (data) => {
691
750
  return JSON.parse(JSON.stringify(data));
692
751
  };
693
752
  const mockTopicSubscribers = {};
694
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
695
753
  export const mockPublishEvent = (topic, eventType, data) => {
696
754
  const subscribers = mockTopicSubscribers[topic] || [];
697
755
  const event = {
698
756
  topic,
699
757
  type: eventType,
700
758
  data,
701
- timestamp: new Date().toISOString()
759
+ timestamp: new Date().toISOString(),
702
760
  };
703
- subscribers.forEach(callback => {
761
+ subscribers.forEach((callback) => {
704
762
  try {
705
763
  callback(event);
706
764
  }
@@ -716,16 +774,16 @@ export const mockSubscribeToTopic = (topic, callback) => {
716
774
  mockTopicSubscribers[topic].push(callback);
717
775
  };
718
776
  // Helper to create order from cart
719
- export const createOrderFromCart = (paymentType, amount, processor = "cash") => {
777
+ export const createOrderFromCart = (paymentType, amount, processor = 'cash') => {
720
778
  const primaryOutlet = MOCK_OUTLETS[0] ?? MOCK_OUTLET_MAIN;
721
779
  const primaryStation = MOCK_STATIONS[0] ?? MOCK_STATION;
722
- const employeeUser = MOCK_USERS.find(u => u.type === CFUserTypes.CASHIER) ?? MOCK_USERS[0] ?? MOCK_USER;
780
+ const employeeUser = MOCK_USERS.find((u) => u.type === CFUserTypes.CASHIER) ?? MOCK_USERS[0] ?? MOCK_USER;
723
781
  const orderCurrency = resolveMockOrderCurrency();
724
782
  // Generate new Order ID
725
783
  const orderId = `order_${Date.now()}`;
726
784
  const receiptId = `receipt_${Date.now()}`;
727
785
  // Map cart products to line items
728
- const lineItems = MOCK_CART.products.map(p => {
786
+ const lineItems = MOCK_CART.products.map((p) => {
729
787
  return {
730
788
  productId: p.id,
731
789
  variantId: p.variantId,
@@ -735,17 +793,17 @@ export const createOrderFromCart = (paymentType, amount, processor = "cash") =>
735
793
  taxes: [],
736
794
  discount: {
737
795
  itemDiscounts: [],
738
- cartDiscount: { percentage: 0, amount: 0 }
796
+ cartDiscount: { percentage: 0, amount: 0 },
739
797
  },
740
798
  fee: { itemFees: [] },
741
799
  totalTax: 0,
742
800
  total: p.price * p.quantity,
743
801
  lineNetWithFees: p.price * p.quantity,
744
802
  metadata: [],
745
- image: p.images?.[0] || "",
746
- sku: p.sku || "",
803
+ image: p.images?.[0] || '',
804
+ sku: p.sku || '',
747
805
  stock: 100,
748
- attributes: p.attributes || ""
806
+ attributes: p.attributes || '',
749
807
  };
750
808
  });
751
809
  const totalNum = MOCK_CART.total;
@@ -756,10 +814,10 @@ export const createOrderFromCart = (paymentType, amount, processor = "cash") =>
756
814
  receiptId,
757
815
  companyId: MOCK_COMPANY.id,
758
816
  externalId: null,
759
- status: "completed",
760
- paymentState: "paid",
761
- fulfillmentState: "fulfilled",
762
- displayState: "Completed",
817
+ status: 'completed',
818
+ paymentState: 'paid',
819
+ fulfillmentState: 'fulfilled',
820
+ displayState: 'Completed',
763
821
  customer: MOCK_CART.customer ? MOCK_CART.customer : null,
764
822
  summary: {
765
823
  total: totalNum,
@@ -768,9 +826,11 @@ export const createOrderFromCart = (paymentType, amount, processor = "cash") =>
768
826
  shippingTotal: 0,
769
827
  totalTaxes: 0,
770
828
  taxes: [],
771
- isTaxInclusive: false
829
+ isTaxInclusive: false,
772
830
  },
773
- cartDiscount: MOCK_CART.discount ? { label: MOCK_CART.discount.label || "Discount", amount: 0, percentage: MOCK_CART.discount.value } : null,
831
+ cartDiscount: MOCK_CART.discount
832
+ ? { label: MOCK_CART.discount.label || 'Discount', amount: 0, percentage: MOCK_CART.discount.value }
833
+ : null,
774
834
  cartFees: [],
775
835
  paymentMethods: [
776
836
  {
@@ -778,14 +838,14 @@ export const createOrderFromCart = (paymentType, amount, processor = "cash") =>
778
838
  paymentType,
779
839
  amount,
780
840
  timestamp: new Date().toISOString(),
781
- processor
782
- }
841
+ processor,
842
+ },
783
843
  ],
784
- source: "pos",
844
+ source: 'pos',
785
845
  posData: {
786
846
  outlet: primaryOutlet.id,
787
847
  station: primaryStation._id,
788
- employee: employeeUser.id
848
+ employee: employeeUser.id,
789
849
  },
790
850
  sessionId: `session_${Date.now()}`,
791
851
  metadata: [],
@@ -797,12 +857,12 @@ export const createOrderFromCart = (paymentType, amount, processor = "cash") =>
797
857
  user: employeeUser,
798
858
  outlet: primaryOutlet,
799
859
  station: primaryStation,
800
- createdAt: new Date().toISOString()
860
+ createdAt: new Date().toISOString(),
801
861
  };
802
862
  MOCK_ORDERS.push(newOrder);
803
863
  resetMockCart();
804
864
  // Publish cart-created event after cart is reset (simulates new empty cart)
805
- mockPublishEvent("cart", "cart-created", {});
865
+ mockPublishEvent('cart', 'cart-created', {});
806
866
  return newOrder;
807
867
  };
808
868
  /**
@@ -811,7 +871,7 @@ export const createOrderFromCart = (paymentType, amount, processor = "cash") =>
811
871
  * (creates the order, resets the cart, returns it). Otherwise the cart stays
812
872
  * open with `amountToBeCharged` reset to what's left, and returns null.
813
873
  */
814
- export const applyMockPayment = (amount, paymentType, processor = "cash") => {
874
+ export const applyMockPayment = (amount, paymentType, processor = 'cash') => {
815
875
  const remainingBefore = MOCK_CART.remainingBalance ?? MOCK_CART.total;
816
876
  const charge = Math.min(Math.max(0, amount || remainingBefore), remainingBefore);
817
877
  const remainingAfter = Math.max(0, remainingBefore - charge);
@@ -819,12 +879,12 @@ export const applyMockPayment = (amount, paymentType, processor = "cash") => {
819
879
  // Partial payment — keep the cart open, queue the rest for the next tender.
820
880
  MOCK_CART.remainingBalance = remainingAfter;
821
881
  MOCK_CART.amountToBeCharged = remainingAfter;
822
- mockPublishEvent("cart", "partial-payment-applied", { charged: charge, remaining: remainingAfter });
882
+ mockPublishEvent('cart', 'partial-payment-applied', { charged: charge, remaining: remainingAfter });
823
883
  return null;
824
884
  }
825
885
  // Fully paid — create the completed order (this also resets the cart).
826
886
  const orderTotal = MOCK_CART.total;
827
887
  const order = createOrderFromCart(paymentType, orderTotal, processor);
828
- mockPublishEvent("payments", "payment-done", { order });
888
+ mockPublishEvent('payments', 'payment-done', { order });
829
889
  return order;
830
890
  };