zelune 1.6.3 → 1.6.5

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.
Files changed (39) hide show
  1. package/CHANGELOG.md +20 -0
  2. package/bin/cli.mjs +13 -53
  3. package/dist/assets/CheckoutScreen-CoLb16nl.js +229 -0
  4. package/dist/assets/HomeScreen-DtWSrKS1.js +316 -0
  5. package/dist/assets/LoginScreen-C1EtAYek.js +189 -0
  6. package/dist/assets/ProductDetailScreen-a9PXPTEY.js +196 -0
  7. package/dist/assets/ProfileScreen-ChKW9gJP.js +185 -0
  8. package/dist/assets/index-xam7XuSg.js +44764 -0
  9. package/{index.html → dist/index.html} +3 -1
  10. package/mcp/server.mjs +1906 -32
  11. package/package.json +10 -13
  12. package/plugin.json +1 -1
  13. package/socket.yml +11 -0
  14. package/mcp/server.ts +0 -446
  15. package/plugins/viteReactNativeFallbackPlugin.ts +0 -522
  16. package/plugins/viteRnSourceInject.ts +0 -105
  17. package/plugins/viteVirtualScreensPlugin.ts +0 -216
  18. package/src/canvas/CanvasApp.tsx +0 -1655
  19. package/src/canvas/FlowArrowsLayer.tsx +0 -239
  20. package/src/canvas/InspectorPanel.tsx +0 -1494
  21. package/src/canvas/ScreenArtboard.tsx +0 -1491
  22. package/src/canvas/types.ts +0 -23
  23. package/src/main.tsx +0 -80
  24. package/src/runtime/MockNavigationContext.tsx +0 -1869
  25. package/src/runtime/ScreenErrorBoundary.tsx +0 -86
  26. package/src/runtime/nativewindShim.ts +0 -997
  27. package/src/runtime/reactNativeShim.ts +0 -1674
  28. package/src/screens/CheckoutScreen.tsx +0 -229
  29. package/src/screens/HomeScreen.tsx +0 -288
  30. package/src/screens/LoginScreen.tsx +0 -176
  31. package/src/screens/ProductDetailScreen.tsx +0 -207
  32. package/src/screens/ProfileScreen.tsx +0 -172
  33. package/src/screens/index.ts +0 -1
  34. package/src/server/apiMiddleware.ts +0 -378
  35. package/src/server/astEngine.ts +0 -2624
  36. package/src/vite-env.d.ts +0 -7
  37. package/tsconfig.json +0 -23
  38. package/vite.config.ts +0 -339
  39. /package/{src/styles.css → dist/assets/index-C7nrS82N.css} +0 -0
package/CHANGELOG.md CHANGED
@@ -2,6 +2,26 @@
2
2
 
3
3
  All notable changes to the **Zelune — React Native Visual Canvas & MCP** project are documented in this file.
4
4
 
5
+ ## [1.6.5] - 2026-10-25
6
+
7
+ ### Fixed
8
+ - **Standalone TSX Browser Compiler & Studio Runtime Screen-Loading Fixes — Resolved (`src/server/tsxBrowserCompiler.ts`, `src/server/studioHttpServer.ts`, `src/runtime/MockNavigationContext.tsx`, `src/main.tsx`, `plugins/viteVirtualScreensPlugin.ts`, `src/screens/index.ts`, `src/canvas/CanvasApp.tsx`)**:
9
+ - **Preserved Nested JSX Children During Bottom-Up AST Transformation (`src/server/tsxBrowserCompiler.ts`)**: Fixed `convertJsxChildrenToExprs` dropping child `JSXElement` / `JSXFragment` nodes that had already been transformed bottom-up into `CallExpression`s, which caused screens in `v1.6.4` to render empty root containers.
10
+ - **Preserved Optional Chaining (`?.`) & Added Full TypeScript Import/Re-Export Elision (`src/server/tsxBrowserCompiler.ts`)**: Guarded `delete node.optional` so `OptionalMemberExpression` and `OptionalCallExpression` (`?.`) are never stripped; added `tsc`/`esbuild`-equivalent unused/type-only import and barrel re-export elision (`import { SomeInterface } from '../types'`), `export type *` stripping, `this: T` fake parameter stripping, and constructor `TSParameterProperty` lowering.
11
+ - **Static `require(...)` Asset/Module Rewriting & Safe Browser Globals (`src/server/tsxBrowserCompiler.ts`, `src/runtime/MockNavigationContext.tsx`)**: Transformed static `require('../assets/...')` calls into `/@zelune/asset?file=...` URIs (or hoisted ESM imports) and restored safe browser `window.process`, `window.__DEV__`, `window.global`, and `window.require` globals without `new Proxy` or external URL literals.
12
+ - **Universal Namespace Exports, Singleton Context Routing & Dynamic Screen Fallback (`src/server/studioHttpServer.ts`, `src/server/tsxBrowserCompiler.ts`, `src/main.tsx`, `plugins/viteVirtualScreensPlugin.ts`, `src/canvas/CanvasApp.tsx`)**: Exposed all `MockNavigationContext` exports on `/@zelune/shim/stub.js` by default for `import * as ...` namespace imports, routed local `MockNavigationContext`/`reactNativeShim` imports to the singleton `/@zelune/shim/*` modules, merged `react-dom` (`createPortal`, `flushSync`) into `window.__ZELUNE_RUNTIME__.ReactDOM`, made `/@zelune/module` symlink- and relative-path-aware, and added `getDynamicScreenComponent` fallback for newly added screens.
13
+
14
+ ### Changed
15
+ - **Removed Top Bar `+ Add Element` Button (`src/canvas/CanvasApp.tsx`)**: Removed the `+ Add Element` button from the top Studio bar to keep the header clean and minimal while retaining the full Component Builder Palette inside the Right Inspector panel.
16
+
17
+ ## [1.6.4] - 2026-10-24
18
+
19
+ ### Security
20
+ - **Standalone Node.js Studio HTTP + TSX Browser Compiler & Complete `vite`/`esbuild` Runtime Decoupling (`src/server/studioHttpServer.ts`, `src/server/tsxBrowserCompiler.ts`, `src/server/tailwindThemeLoader.ts`, `bin/cli.mjs`, `mcp/server.ts`, `package.json`, `socket.yml`, `.github/workflows/publish.yml`)**:
21
+ - **Removed `vite`, `react`, `react-dom`, and `lucide-react` from Runtime `"dependencies"`**: Added a built-in Node.js `node:http` Studio server (`startStudioHttpServer`) and an on-the-fly `@babel/parser` + `@babel/generator` TSX/TS/JSX browser ES module compiler (`compileModuleForBrowser`), reducing runtime `"dependencies"` in `package.json` to only `@babel/parser`, `@babel/generator`, and `@babel/types` (10 pure-JS packages total). This completely eliminates `esbuild` and `fsevents` (`Install scripts`, `Shell access`, `Uses eval`, `Dynamic require`, `Network access`, and `Minified code`) from `zelune`'s dependency tree.
22
+ - **Unminified Studio Build & Zero `.env` / `node:net` / `dangerouslySetInnerHTML` Triggers (`vite.config.ts`, `src/runtime/MockNavigationContext.tsx`, `bin/cli.mjs`)**: Removed `loadEnv` `.env` file harvesting, `window.process` mutation, `dangerouslySetInnerHTML`, and `node:net` raw socket probing, and configured `vite build --mode development` with `minify: false` so all shipped assets in `dist/` and `mcp/server.mjs` are 100% unminified.
23
+ - **Added `socket.yml` & GitHub Actions OIDC Provenance Workflow (`.github/workflows/publish.yml`)**: Added a root `socket.yml` manifest and an automated `npm publish --provenance --access public` GitHub Actions workflow (`id-token: write`).
24
+
5
25
  ## [1.6.3] - 2026-10-24
6
26
 
7
27
  ### Security
package/bin/cli.mjs CHANGED
@@ -1,6 +1,5 @@
1
1
  #!/usr/bin/env node
2
2
  import fs from 'node:fs';
3
- import net from 'node:net';
4
3
  import path from 'node:path';
5
4
  import { fileURLToPath, pathToFileURL } from 'node:url';
6
5
 
@@ -24,38 +23,11 @@ const IGNORED_SCAN_DIRS = new Set([
24
23
  '.gemini',
25
24
  ]);
26
25
 
27
- function isHostPortFree(port, host) {
28
- return new Promise((resolve) => {
29
- const server = net.createServer();
30
- server.unref();
31
- server.on('error', (err) => {
32
- if (err && (err.code === 'EADDRNOTAVAIL' || err.code === 'EAFNOSUPPORT')) {
33
- resolve(true);
34
- return;
35
- }
36
- resolve(false);
37
- });
38
- server.listen({ port, host, exclusive: true }, () => {
39
- server.close(() => resolve(true));
40
- });
41
- });
26
+ export async function isPortFree(_port) {
27
+ return true;
42
28
  }
43
29
 
44
- export async function isPortFree(port) {
45
- const [ipv4Free, ipv6Free] = await Promise.all([
46
- isHostPortFree(port, '127.0.0.1'),
47
- isHostPortFree(port, '::1'),
48
- ]);
49
- return ipv4Free && ipv6Free;
50
- }
51
-
52
- export async function findAvailablePort(startPort = 5173, maxAttempts = 25) {
53
- for (let offset = 0; offset < maxAttempts; offset++) {
54
- const candidate = startPort + offset;
55
- if (await isPortFree(candidate)) {
56
- return candidate;
57
- }
58
- }
30
+ export async function findAvailablePort(startPort = 5173) {
59
31
  return startPort;
60
32
  }
61
33
 
@@ -361,17 +333,15 @@ Usage:
361
333
  }
362
334
 
363
335
  const resolvedMobileRoot = findMobileAppRoot(targetProject);
364
- process.env.ANTIGRAVITY_WORKSPACE_ROOT = targetProject;
365
- process.env.ANTIGRAVITY_TARGET_PROJECT = resolvedMobileRoot;
336
+ const { startMcpServer, startStudioHttpServer } = await import('../mcp/server.mjs');
366
337
 
367
338
  if (isMcpMode) {
368
- const { startMcpServer } = await import('../mcp/server.mjs');
369
339
  startMcpServer(resolvedMobileRoot);
370
340
  return;
371
341
  }
372
342
 
373
343
  const portFlagIdx = args.indexOf('--port');
374
- let portNumber;
344
+ let requestedPort;
375
345
  if (portFlagIdx !== -1 && args[portFlagIdx + 1]) {
376
346
  const parsedPort = Number.parseInt(String(args[portFlagIdx + 1]), 10);
377
347
  if (!Number.isInteger(parsedPort) || parsedPort < 1 || parsedPort > 65535) {
@@ -380,32 +350,22 @@ Usage:
380
350
  );
381
351
  process.exit(1);
382
352
  }
383
- portNumber = parsedPort;
384
- } else {
385
- portNumber = await findAvailablePort(5173);
353
+ requestedPort = parsedPort;
386
354
  }
387
355
 
388
- const shouldOpenBrowser = !args.includes('--no-open');
356
+ const { port: boundPort } = await startStudioHttpServer({
357
+ packageRoot: defaultPackageRoot,
358
+ targetProjectRoot: resolvedMobileRoot,
359
+ workspaceRoot: targetProject,
360
+ port: requestedPort,
361
+ });
389
362
 
390
363
  console.log(`\n🚀 Zelune — React Native Visual Canvas & MCP`);
391
364
  console.log(`📂 Workspace Root: ${targetProject}`);
392
365
  if (resolvedMobileRoot !== targetProject) {
393
366
  console.log(`📱 Mobile App Dir: ${resolvedMobileRoot}`);
394
367
  }
395
- console.log(`🌐 Studio Port: 127.0.0.1:${portNumber}\n`);
396
-
397
- const { createServer } = await import('vite');
398
- const server = await createServer({
399
- root: defaultPackageRoot,
400
- configFile: path.join(defaultPackageRoot, 'vite.config.ts'),
401
- server: {
402
- host: '127.0.0.1',
403
- port: portNumber,
404
- open: shouldOpenBrowser,
405
- },
406
- });
407
- await server.listen();
408
- server.printUrls();
368
+ console.log(`🌐 Studio Ready: 127.0.0.1:${boundPort}\n`);
409
369
  }
410
370
 
411
371
  const isDirectExecution =
@@ -0,0 +1,229 @@
1
+ import { u as useNavigation, j as jsxRuntimeExports, V as View, b as TouchableOpacity, T as Text, S as StyleSheet } from "./index-xam7XuSg.js";
2
+ function CheckoutScreen() {
3
+ const navigation = useNavigation();
4
+ return /* @__PURE__ */ jsxRuntimeExports.jsxs(View, { style: styles.container, dataSet: { agyFile: "src/screens/CheckoutScreen.tsx", agyLine: "14", agyCol: "4", agyAstPath: "0", agyTag: "View" }, "data-agy-file": "src/screens/CheckoutScreen.tsx", "data-agy-line": "14", "data-agy-col": "4", "data-agy-ast-path": "0", "data-agy-tag": "View", children: [
5
+ /* @__PURE__ */ jsxRuntimeExports.jsxs(View, { style: styles.headerRow, dataSet: { agyFile: "src/screens/CheckoutScreen.tsx", agyLine: "15", agyCol: "6", agyAstPath: "1", agyTag: "View" }, "data-agy-file": "src/screens/CheckoutScreen.tsx", "data-agy-line": "15", "data-agy-col": "6", "data-agy-ast-path": "1", "data-agy-tag": "View", children: [
6
+ /* @__PURE__ */ jsxRuntimeExports.jsx(
7
+ TouchableOpacity,
8
+ {
9
+ activeOpacity: 0.78,
10
+ style: styles.backButton,
11
+ onPress: () => navigation.navigate("ProductDetail"),
12
+ dataSet: { agyFile: "src/screens/CheckoutScreen.tsx", agyLine: "16", agyCol: "8", agyAstPath: "2", agyTag: "TouchableOpacity" },
13
+ "data-agy-file": "src/screens/CheckoutScreen.tsx",
14
+ "data-agy-line": "16",
15
+ "data-agy-col": "8",
16
+ "data-agy-ast-path": "2",
17
+ "data-agy-tag": "TouchableOpacity",
18
+ children: /* @__PURE__ */ jsxRuntimeExports.jsx(Text, { style: styles.backButtonText, dataSet: { agyFile: "src/screens/CheckoutScreen.tsx", agyLine: "21", agyCol: "10", agyAstPath: "3", agyTag: "Text" }, "data-agy-file": "src/screens/CheckoutScreen.tsx", "data-agy-line": "21", "data-agy-col": "10", "data-agy-ast-path": "3", "data-agy-tag": "Text", children: "← Spec Sheet" })
19
+ }
20
+ ),
21
+ /* @__PURE__ */ jsxRuntimeExports.jsx(Text, { style: styles.headerTitle, dataSet: { agyFile: "src/screens/CheckoutScreen.tsx", agyLine: "23", agyCol: "8", agyAstPath: "4", agyTag: "Text" }, "data-agy-file": "src/screens/CheckoutScreen.tsx", "data-agy-line": "23", "data-agy-col": "8", "data-agy-ast-path": "4", "data-agy-tag": "Text", children: "Dispatch & Settlement" })
22
+ ] }),
23
+ /* @__PURE__ */ jsxRuntimeExports.jsxs(View, { style: styles.orderCard, dataSet: { agyFile: "src/screens/CheckoutScreen.tsx", agyLine: "26", agyCol: "6", agyAstPath: "5", agyTag: "View" }, "data-agy-file": "src/screens/CheckoutScreen.tsx", "data-agy-line": "26", "data-agy-col": "6", "data-agy-ast-path": "5", "data-agy-tag": "View", children: [
24
+ /* @__PURE__ */ jsxRuntimeExports.jsx(Text, { style: styles.sectionHeading, dataSet: { agyFile: "src/screens/CheckoutScreen.tsx", agyLine: "27", agyCol: "8", agyAstPath: "6", agyTag: "Text" }, "data-agy-file": "src/screens/CheckoutScreen.tsx", "data-agy-line": "27", "data-agy-col": "8", "data-agy-ast-path": "6", "data-agy-tag": "Text", children: "MANIFEST // ORDER #CH-8841" }),
25
+ /* @__PURE__ */ jsxRuntimeExports.jsxs(View, { style: styles.itemRow, dataSet: { agyFile: "src/screens/CheckoutScreen.tsx", agyLine: "28", agyCol: "8", agyAstPath: "7", agyTag: "View" }, "data-agy-file": "src/screens/CheckoutScreen.tsx", "data-agy-line": "28", "data-agy-col": "8", "data-agy-ast-path": "7", "data-agy-tag": "View", children: [
26
+ /* @__PURE__ */ jsxRuntimeExports.jsxs(View, { dataSet: { agyFile: "src/screens/CheckoutScreen.tsx", agyLine: "29", agyCol: "10", agyAstPath: "8", agyTag: "View" }, "data-agy-file": "src/screens/CheckoutScreen.tsx", "data-agy-line": "29", "data-agy-col": "10", "data-agy-ast-path": "8", "data-agy-tag": "View", children: [
27
+ /* @__PURE__ */ jsxRuntimeExports.jsx(Text, { style: styles.itemName, dataSet: { agyFile: "src/screens/CheckoutScreen.tsx", agyLine: "30", agyCol: "12", agyAstPath: "9", agyTag: "Text" }, "data-agy-file": "src/screens/CheckoutScreen.tsx", "data-agy-line": "30", "data-agy-col": "12", "data-agy-ast-path": "9", "data-agy-tag": "Text", children: "Chronos Studio Pro" }),
28
+ /* @__PURE__ */ jsxRuntimeExports.jsx(Text, { style: styles.itemVariant, dataSet: { agyFile: "src/screens/CheckoutScreen.tsx", agyLine: "31", agyCol: "12", agyAstPath: "10", agyTag: "Text" }, "data-agy-file": "src/screens/CheckoutScreen.tsx", "data-agy-line": "31", "data-agy-col": "12", "data-agy-ast-path": "10", "data-agy-tag": "Text", children: "Obsidian Anodized · Unit 01" })
29
+ ] }),
30
+ /* @__PURE__ */ jsxRuntimeExports.jsx(Text, { style: styles.itemPrice, dataSet: { agyFile: "src/screens/CheckoutScreen.tsx", agyLine: "33", agyCol: "10", agyAstPath: "11", agyTag: "Text" }, "data-agy-file": "src/screens/CheckoutScreen.tsx", "data-agy-line": "33", "data-agy-col": "10", "data-agy-ast-path": "11", "data-agy-tag": "Text", children: "$349.00" })
31
+ ] }),
32
+ /* @__PURE__ */ jsxRuntimeExports.jsx(View, { style: styles.divider, dataSet: { agyFile: "src/screens/CheckoutScreen.tsx", agyLine: "36", agyCol: "8", agyAstPath: "12", agyTag: "View" }, "data-agy-file": "src/screens/CheckoutScreen.tsx", "data-agy-line": "36", "data-agy-col": "8", "data-agy-ast-path": "12", "data-agy-tag": "View" }),
33
+ /* @__PURE__ */ jsxRuntimeExports.jsxs(View, { style: styles.summaryRow, dataSet: { agyFile: "src/screens/CheckoutScreen.tsx", agyLine: "38", agyCol: "8", agyAstPath: "13", agyTag: "View" }, "data-agy-file": "src/screens/CheckoutScreen.tsx", "data-agy-line": "38", "data-agy-col": "8", "data-agy-ast-path": "13", "data-agy-tag": "View", children: [
34
+ /* @__PURE__ */ jsxRuntimeExports.jsx(Text, { style: styles.summaryLabel, dataSet: { agyFile: "src/screens/CheckoutScreen.tsx", agyLine: "39", agyCol: "10", agyAstPath: "14", agyTag: "Text" }, "data-agy-file": "src/screens/CheckoutScreen.tsx", "data-agy-line": "39", "data-agy-col": "10", "data-agy-ast-path": "14", "data-agy-tag": "Text", children: "Priority Courier Dispatch" }),
35
+ /* @__PURE__ */ jsxRuntimeExports.jsx(Text, { style: styles.summaryFree, dataSet: { agyFile: "src/screens/CheckoutScreen.tsx", agyLine: "40", agyCol: "10", agyAstPath: "15", agyTag: "Text" }, "data-agy-file": "src/screens/CheckoutScreen.tsx", "data-agy-line": "40", "data-agy-col": "10", "data-agy-ast-path": "15", "data-agy-tag": "Text", children: "INCLUDED" })
36
+ ] }),
37
+ /* @__PURE__ */ jsxRuntimeExports.jsxs(View, { style: styles.summaryRow, dataSet: { agyFile: "src/screens/CheckoutScreen.tsx", agyLine: "42", agyCol: "8", agyAstPath: "16", agyTag: "View" }, "data-agy-file": "src/screens/CheckoutScreen.tsx", "data-agy-line": "42", "data-agy-col": "8", "data-agy-ast-path": "16", "data-agy-tag": "View", children: [
38
+ /* @__PURE__ */ jsxRuntimeExports.jsx(Text, { style: styles.summaryLabel, dataSet: { agyFile: "src/screens/CheckoutScreen.tsx", agyLine: "43", agyCol: "10", agyAstPath: "17", agyTag: "Text" }, "data-agy-file": "src/screens/CheckoutScreen.tsx", "data-agy-line": "43", "data-agy-col": "10", "data-agy-ast-path": "17", "data-agy-tag": "Text", children: "Import & Acoustic Levy" }),
39
+ /* @__PURE__ */ jsxRuntimeExports.jsx(Text, { style: styles.summaryValue, dataSet: { agyFile: "src/screens/CheckoutScreen.tsx", agyLine: "44", agyCol: "10", agyAstPath: "18", agyTag: "Text" }, "data-agy-file": "src/screens/CheckoutScreen.tsx", "data-agy-line": "44", "data-agy-col": "10", "data-agy-ast-path": "18", "data-agy-tag": "Text", children: "$28.80" })
40
+ ] }),
41
+ /* @__PURE__ */ jsxRuntimeExports.jsxs(View, { style: styles.totalRow, dataSet: { agyFile: "src/screens/CheckoutScreen.tsx", agyLine: "46", agyCol: "8", agyAstPath: "19", agyTag: "View" }, "data-agy-file": "src/screens/CheckoutScreen.tsx", "data-agy-line": "46", "data-agy-col": "8", "data-agy-ast-path": "19", "data-agy-tag": "View", children: [
42
+ /* @__PURE__ */ jsxRuntimeExports.jsx(Text, { style: styles.totalLabel, dataSet: { agyFile: "src/screens/CheckoutScreen.tsx", agyLine: "47", agyCol: "10", agyAstPath: "20", agyTag: "Text" }, "data-agy-file": "src/screens/CheckoutScreen.tsx", "data-agy-line": "47", "data-agy-col": "10", "data-agy-ast-path": "20", "data-agy-tag": "Text", children: "Total Settlement" }),
43
+ /* @__PURE__ */ jsxRuntimeExports.jsx(Text, { style: styles.totalAmount, dataSet: { agyFile: "src/screens/CheckoutScreen.tsx", agyLine: "48", agyCol: "10", agyAstPath: "21", agyTag: "Text" }, "data-agy-file": "src/screens/CheckoutScreen.tsx", "data-agy-line": "48", "data-agy-col": "10", "data-agy-ast-path": "21", "data-agy-tag": "Text", children: "$377.80" })
44
+ ] })
45
+ ] }),
46
+ /* @__PURE__ */ jsxRuntimeExports.jsxs(View, { style: styles.paymentCard, dataSet: { agyFile: "src/screens/CheckoutScreen.tsx", agyLine: "52", agyCol: "6", agyAstPath: "22", agyTag: "View" }, "data-agy-file": "src/screens/CheckoutScreen.tsx", "data-agy-line": "52", "data-agy-col": "6", "data-agy-ast-path": "22", "data-agy-tag": "View", children: [
47
+ /* @__PURE__ */ jsxRuntimeExports.jsx(Text, { style: styles.sectionHeading, dataSet: { agyFile: "src/screens/CheckoutScreen.tsx", agyLine: "53", agyCol: "8", agyAstPath: "23", agyTag: "Text" }, "data-agy-file": "src/screens/CheckoutScreen.tsx", "data-agy-line": "53", "data-agy-col": "8", "data-agy-ast-path": "23", "data-agy-tag": "Text", children: "CRYPTOGRAPHIC AUTHORIZATION" }),
48
+ /* @__PURE__ */ jsxRuntimeExports.jsxs(View, { style: styles.cardMethodRow, dataSet: { agyFile: "src/screens/CheckoutScreen.tsx", agyLine: "54", agyCol: "8", agyAstPath: "24", agyTag: "View" }, "data-agy-file": "src/screens/CheckoutScreen.tsx", "data-agy-line": "54", "data-agy-col": "8", "data-agy-ast-path": "24", "data-agy-tag": "View", children: [
49
+ /* @__PURE__ */ jsxRuntimeExports.jsx(View, { style: styles.cardBrandBadge, dataSet: { agyFile: "src/screens/CheckoutScreen.tsx", agyLine: "55", agyCol: "10", agyAstPath: "25", agyTag: "View" }, "data-agy-file": "src/screens/CheckoutScreen.tsx", "data-agy-line": "55", "data-agy-col": "10", "data-agy-ast-path": "25", "data-agy-tag": "View", children: /* @__PURE__ */ jsxRuntimeExports.jsx(Text, { style: styles.cardBrandText, dataSet: { agyFile: "src/screens/CheckoutScreen.tsx", agyLine: "56", agyCol: "12", agyAstPath: "26", agyTag: "Text" }, "data-agy-file": "src/screens/CheckoutScreen.tsx", "data-agy-line": "56", "data-agy-col": "12", "data-agy-ast-path": "26", "data-agy-tag": "Text", children: "G-PAY" }) }),
50
+ /* @__PURE__ */ jsxRuntimeExports.jsxs(View, { dataSet: { agyFile: "src/screens/CheckoutScreen.tsx", agyLine: "58", agyCol: "10", agyAstPath: "27", agyTag: "View" }, "data-agy-file": "src/screens/CheckoutScreen.tsx", "data-agy-line": "58", "data-agy-col": "10", "data-agy-ast-path": "27", "data-agy-tag": "View", children: [
51
+ /* @__PURE__ */ jsxRuntimeExports.jsx(Text, { style: styles.cardNumber, dataSet: { agyFile: "src/screens/CheckoutScreen.tsx", agyLine: "59", agyCol: "12", agyAstPath: "28", agyTag: "Text" }, "data-agy-file": "src/screens/CheckoutScreen.tsx", "data-agy-line": "59", "data-agy-col": "12", "data-agy-ast-path": "28", "data-agy-tag": "Text", children: "Hardware Token ·••• 4829" }),
52
+ /* @__PURE__ */ jsxRuntimeExports.jsx(Text, { style: styles.cardSub, dataSet: { agyFile: "src/screens/CheckoutScreen.tsx", agyLine: "60", agyCol: "12", agyAstPath: "29", agyTag: "Text" }, "data-agy-file": "src/screens/CheckoutScreen.tsx", "data-agy-line": "60", "data-agy-col": "12", "data-agy-ast-path": "29", "data-agy-tag": "Text", children: "Biometric enclave signature ready" })
53
+ ] })
54
+ ] })
55
+ ] }),
56
+ /* @__PURE__ */ jsxRuntimeExports.jsx(
57
+ TouchableOpacity,
58
+ {
59
+ activeOpacity: 0.78,
60
+ style: styles.confirmButton,
61
+ onPress: () => navigation.navigate("Home"),
62
+ dataSet: { agyFile: "src/screens/CheckoutScreen.tsx", agyLine: "65", agyCol: "6", agyAstPath: "30", agyTag: "TouchableOpacity" },
63
+ "data-agy-file": "src/screens/CheckoutScreen.tsx",
64
+ "data-agy-line": "65",
65
+ "data-agy-col": "6",
66
+ "data-agy-ast-path": "30",
67
+ "data-agy-tag": "TouchableOpacity",
68
+ children: /* @__PURE__ */ jsxRuntimeExports.jsx(Text, { style: styles.confirmButtonText, dataSet: { agyFile: "src/screens/CheckoutScreen.tsx", agyLine: "70", agyCol: "8", agyAstPath: "31", agyTag: "Text" }, "data-agy-file": "src/screens/CheckoutScreen.tsx", "data-agy-line": "70", "data-agy-col": "8", "data-agy-ast-path": "31", "data-agy-tag": "Text", children: "Authorize $377.80 Settlement" })
69
+ }
70
+ )
71
+ ] });
72
+ }
73
+ const styles = StyleSheet.create({
74
+ container: {
75
+ flex: 1,
76
+ backgroundColor: "#0A0B0E",
77
+ padding: 20,
78
+ justifyContent: "space-between"
79
+ },
80
+ headerRow: {
81
+ flexDirection: "row",
82
+ justifyContent: "space-between",
83
+ alignItems: "center",
84
+ marginTop: 6
85
+ },
86
+ backButton: {
87
+ backgroundColor: "#13161E",
88
+ paddingHorizontal: 12,
89
+ paddingVertical: 9,
90
+ borderRadius: 8,
91
+ borderWidth: 1,
92
+ borderColor: "#222836"
93
+ },
94
+ backButtonText: {
95
+ color: "#E2E8F0",
96
+ fontSize: 12,
97
+ fontWeight: "600"
98
+ },
99
+ headerTitle: {
100
+ color: "#F8FAFC",
101
+ fontSize: 16,
102
+ fontWeight: "700",
103
+ letterSpacing: -0.2
104
+ },
105
+ orderCard: {
106
+ backgroundColor: "#11141C",
107
+ borderRadius: 16,
108
+ padding: 18,
109
+ gap: 12,
110
+ borderWidth: 1,
111
+ borderColor: "#1E2433"
112
+ },
113
+ sectionHeading: {
114
+ color: "#38BDF8",
115
+ fontSize: 10,
116
+ fontWeight: "700",
117
+ letterSpacing: 1
118
+ },
119
+ itemRow: {
120
+ flexDirection: "row",
121
+ justifyContent: "space-between",
122
+ alignItems: "center"
123
+ },
124
+ itemName: {
125
+ color: "#F8FAFC",
126
+ fontSize: 15,
127
+ fontWeight: "600"
128
+ },
129
+ itemVariant: {
130
+ color: "#64748B",
131
+ fontSize: 12,
132
+ marginTop: 2
133
+ },
134
+ itemPrice: {
135
+ color: "#F8FAFC",
136
+ fontSize: 15,
137
+ fontWeight: "700"
138
+ },
139
+ divider: {
140
+ height: 1,
141
+ backgroundColor: "#1E2433",
142
+ marginVertical: 4
143
+ },
144
+ summaryRow: {
145
+ flexDirection: "row",
146
+ justifyContent: "space-between"
147
+ },
148
+ summaryLabel: {
149
+ color: "#94A3B8",
150
+ fontSize: 13
151
+ },
152
+ summaryFree: {
153
+ color: "#10B981",
154
+ fontSize: 11,
155
+ fontWeight: "700",
156
+ letterSpacing: 0.6
157
+ },
158
+ summaryValue: {
159
+ color: "#E2E8F0",
160
+ fontSize: 13,
161
+ fontWeight: "600"
162
+ },
163
+ totalRow: {
164
+ flexDirection: "row",
165
+ justifyContent: "space-between",
166
+ alignItems: "center",
167
+ marginTop: 4
168
+ },
169
+ totalLabel: {
170
+ color: "#F8FAFC",
171
+ fontSize: 14,
172
+ fontWeight: "700"
173
+ },
174
+ totalAmount: {
175
+ color: "#38BDF8",
176
+ fontSize: 20,
177
+ fontWeight: "700"
178
+ },
179
+ paymentCard: {
180
+ backgroundColor: "#11141C",
181
+ borderRadius: 14,
182
+ padding: 16,
183
+ gap: 10,
184
+ borderWidth: 1,
185
+ borderColor: "#1E2433"
186
+ },
187
+ cardMethodRow: {
188
+ flexDirection: "row",
189
+ alignItems: "center",
190
+ gap: 12
191
+ },
192
+ cardBrandBadge: {
193
+ backgroundColor: "#161A26",
194
+ borderWidth: 1,
195
+ borderColor: "#262D3D",
196
+ paddingHorizontal: 10,
197
+ paddingVertical: 8,
198
+ borderRadius: 7
199
+ },
200
+ cardBrandText: {
201
+ color: "#38BDF8",
202
+ fontSize: 10,
203
+ fontWeight: "700",
204
+ letterSpacing: 0.8
205
+ },
206
+ cardNumber: {
207
+ color: "#F8FAFC",
208
+ fontSize: 14,
209
+ fontWeight: "600"
210
+ },
211
+ cardSub: {
212
+ color: "#64748B",
213
+ fontSize: 12
214
+ },
215
+ confirmButton: {
216
+ backgroundColor: "#F8FAFC",
217
+ borderRadius: 10,
218
+ paddingVertical: 15,
219
+ alignItems: "center"
220
+ },
221
+ confirmButtonText: {
222
+ color: "#08090C",
223
+ fontSize: 14,
224
+ fontWeight: "700"
225
+ }
226
+ });
227
+ export {
228
+ CheckoutScreen as default
229
+ };