@ecomiq/storefront 1.1.9 → 2.0.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.
Files changed (134) hide show
  1. package/README.md +30 -415
  2. package/bin/ecomiq.mjs +165 -0
  3. package/package.json +72 -94
  4. package/src/api-proxy.ts +194 -0
  5. package/src/auth/create-storefront-auth.ts +35 -0
  6. package/src/auth/ecomiq-oauth-password-client.ts +26 -0
  7. package/src/auth/ecomiq-oauth-password-constants.ts +26 -0
  8. package/src/auth/ecomiq-oauth-password-plugin.ts +299 -0
  9. package/src/auth/ecomiq-oauth-password-types.ts +25 -0
  10. package/src/auth/ecomiq-storefront-sign-in.ts +47 -0
  11. package/src/auth/env.ts +7 -0
  12. package/src/cart-session.ts +241 -0
  13. package/src/client.ts +48 -0
  14. package/src/codegen.mjs +704 -0
  15. package/src/components/checkout/cart-sync.ts +143 -0
  16. package/src/components/checkout/checkout-external-update-banner.tsx +15 -0
  17. package/src/components/checkout/checkout-form-controls.tsx +139 -0
  18. package/src/components/checkout/checkout-line-items.tsx +43 -0
  19. package/src/components/checkout/checkout-order-summary.tsx +156 -0
  20. package/src/components/checkout/checkout-payment-section.tsx +215 -0
  21. package/src/components/checkout/checkout-session-view.tsx +240 -0
  22. package/src/components/checkout/checkout-shipping-address-section.tsx +266 -0
  23. package/src/components/checkout/checkout-shipping-section.tsx +90 -0
  24. package/src/components/checkout/checkout-states.tsx +73 -0
  25. package/src/components/checkout/form-schema.ts +229 -0
  26. package/src/components/checkout/format.ts +27 -0
  27. package/src/components/checkout/index.ts +51 -0
  28. package/src/components/checkout/types.ts +43 -0
  29. package/src/components/checkout/use-checkout-geo.ts +50 -0
  30. package/src/components/checkout/use-checkout-session.ts +583 -0
  31. package/src/components/hero.tsx +291 -0
  32. package/src/config.d.ts +69 -0
  33. package/src/config.mjs +165 -0
  34. package/src/index.ts +274 -0
  35. package/src/link.tsx +2 -0
  36. package/src/pages/checkout.$checkoutId.tsx +60 -0
  37. package/src/pages/checkout.tsx +31 -0
  38. package/src/pages/thank-you.tsx +53 -0
  39. package/src/providers/auth.tsx +69 -0
  40. package/src/providers/cart.tsx +275 -0
  41. package/src/providers/ecomiq.ts +137 -0
  42. package/src/providers/index.ts +26 -0
  43. package/src/public-config.ts +44 -0
  44. package/src/review-submission.ts +89 -0
  45. package/src/runtime/context.ts +1 -0
  46. package/src/runtime/default-layout.tsx +80 -0
  47. package/src/runtime/head.ts +126 -0
  48. package/src/runtime/page.tsx +82 -0
  49. package/src/runtime/postcss-browser-stub.mjs +5 -0
  50. package/src/server-config-store.ts +26 -0
  51. package/src/server.ts +279 -0
  52. package/src/styles.css +76 -0
  53. package/src/ui/badge.tsx +32 -0
  54. package/src/ui/button.tsx +31 -0
  55. package/src/ui/card.tsx +31 -0
  56. package/src/ui/carousel.tsx +218 -0
  57. package/src/ui/cn.ts +6 -0
  58. package/src/ui/index.ts +8 -0
  59. package/src/ui/separator.tsx +6 -0
  60. package/src/ui/skeleton.tsx +6 -0
  61. package/src/ui/storefront-error.tsx +49 -0
  62. package/src/utils.ts +36 -0
  63. package/src/vite-inline.mjs +135 -0
  64. package/templates/__root.tsx +77 -0
  65. package/templates/router.tsx +19 -0
  66. package/dist/chunk-64GLOWMJ.js +0 -216
  67. package/dist/chunk-64GLOWMJ.js.map +0 -1
  68. package/dist/chunk-AKD5IDEB.js +0 -177
  69. package/dist/chunk-AKD5IDEB.js.map +0 -1
  70. package/dist/chunk-EFEVJJWF.js +0 -1345
  71. package/dist/chunk-EFEVJJWF.js.map +0 -1
  72. package/dist/chunk-NAJQB5DN.js +0 -155
  73. package/dist/chunk-NAJQB5DN.js.map +0 -1
  74. package/dist/chunk-OABDGTBI.js +0 -253
  75. package/dist/chunk-OABDGTBI.js.map +0 -1
  76. package/dist/chunk-Q4U5OEUT.js +0 -21
  77. package/dist/chunk-Q4U5OEUT.js.map +0 -1
  78. package/dist/chunk-S7CPZ4UE.js +0 -6
  79. package/dist/chunk-S7CPZ4UE.js.map +0 -1
  80. package/dist/chunks/client.css +0 -984
  81. package/dist/chunks/client.css.map +0 -1
  82. package/dist/chunks/client.d.ts +0 -10759
  83. package/dist/chunks/client.js +0 -5398
  84. package/dist/chunks/client.js.map +0 -1
  85. package/dist/chunks/config.d.ts +0 -31
  86. package/dist/chunks/config.js +0 -5
  87. package/dist/chunks/config.js.map +0 -1
  88. package/dist/chunks/core-public.d.ts +0 -130
  89. package/dist/chunks/core-public.js +0 -92
  90. package/dist/chunks/core-public.js.map +0 -1
  91. package/dist/chunks/server-nextjs.d.ts +0 -33
  92. package/dist/chunks/server-nextjs.js +0 -59
  93. package/dist/chunks/server-nextjs.js.map +0 -1
  94. package/dist/chunks/server-tanstack.d.ts +0 -22
  95. package/dist/chunks/server-tanstack.js +0 -40
  96. package/dist/chunks/server-tanstack.js.map +0 -1
  97. package/dist/collection-DU7gREXS.d.ts +0 -4062
  98. package/dist/ecomiq-oauth-password-plugin-B_gMdGuc.d.ts +0 -3631
  99. package/dist/ecomiq-shell-ui-SWIFLQVM.js +0 -8
  100. package/dist/ecomiq-shell-ui-SWIFLQVM.js.map +0 -1
  101. package/dist/index.d.ts +0 -9
  102. package/dist/index.js +0 -1
  103. package/dist/index.js.map +0 -1
  104. package/dist/index.server.d.ts +0 -9
  105. package/dist/index.server.js +0 -8
  106. package/dist/index.server.js.map +0 -1
  107. package/dist/nextjs/api.d.ts +0 -45
  108. package/dist/nextjs/api.js +0 -32
  109. package/dist/nextjs/api.js.map +0 -1
  110. package/dist/nextjs/globals.css +0 -13
  111. package/dist/nextjs.d.ts +0 -2
  112. package/dist/nextjs.js +0 -2
  113. package/dist/nextjs.js.map +0 -1
  114. package/dist/nextjs.server.d.ts +0 -18
  115. package/dist/nextjs.server.js +0 -1
  116. package/dist/nextjs.server.js.map +0 -1
  117. package/dist/postcss.config.mjs +0 -6
  118. package/dist/react/checkout-page.css +0 -855
  119. package/dist/react/client.css +0 -984
  120. package/dist/react/payment-provider.css +0 -91
  121. package/dist/react/thank-you-page.css +0 -105
  122. package/dist/react.d.ts +0 -1
  123. package/dist/react.js +0 -2
  124. package/dist/react.js.map +0 -1
  125. package/dist/store-proxy-handler-CNzKlTFA.d.ts +0 -10
  126. package/dist/tanstack/api.d.ts +0 -41
  127. package/dist/tanstack/api.js +0 -30
  128. package/dist/tanstack/api.js.map +0 -1
  129. package/dist/tanstack.d.ts +0 -1
  130. package/dist/tanstack.js +0 -2
  131. package/dist/tanstack.js.map +0 -1
  132. package/dist/tanstack.server.d.ts +0 -18
  133. package/dist/tanstack.server.js +0 -1
  134. package/dist/tanstack.server.js.map +0 -1
@@ -1,91 +0,0 @@
1
- /* Estilos headless para proveedores de pago (sin @ecomiq/ui). */
2
-
3
- .ecomiq-payment-provider__panel {
4
- border: 1px solid #d9d9d9;
5
- border-radius: 5px;
6
- padding: 1rem;
7
- display: flex;
8
- flex-direction: column;
9
- gap: 0.75rem;
10
- }
11
-
12
- .ecomiq-payment-provider__title {
13
- margin: 0;
14
- font-size: 0.875rem;
15
- font-weight: 600;
16
- }
17
-
18
- .ecomiq-payment-provider__hint {
19
- margin: 0;
20
- font-size: 0.875rem;
21
- color: #6d6d6d;
22
- }
23
-
24
- .ecomiq-payment-provider__hint--sm {
25
- font-size: 0.75rem;
26
- }
27
-
28
- .ecomiq-payment-provider__redirect {
29
- display: inline-flex;
30
- align-items: center;
31
- justify-content: center;
32
- width: 100%;
33
- max-width: 100%;
34
- padding: 0.65rem 1.25rem;
35
- border: none;
36
- border-radius: 5px;
37
- background: #121212;
38
- color: #fff;
39
- font-size: 0.875rem;
40
- font-weight: 600;
41
- text-decoration: none;
42
- cursor: pointer;
43
- }
44
-
45
- .ecomiq-payment-provider__redirect:hover {
46
- opacity: 0.9;
47
- }
48
-
49
- .ecomiq-payment-provider__qr-wrap {
50
- display: flex;
51
- justify-content: center;
52
- padding-top: 0.5rem;
53
- }
54
-
55
- .ecomiq-payment-provider__qr {
56
- max-width: 220px;
57
- border: 1px solid #d9d9d9;
58
- border-radius: 5px;
59
- background: #fff;
60
- padding: 0.5rem;
61
- }
62
-
63
- .ecomiq-payment-provider__mono {
64
- font-family: ui-monospace, monospace;
65
- font-size: 0.75rem;
66
- word-break: break-all;
67
- }
68
-
69
- .ecomiq-payment-provider__details {
70
- border: 1px dashed #d9d9d9;
71
- border-radius: 5px;
72
- padding: 0.5rem;
73
- font-size: 0.75rem;
74
- }
75
-
76
- .ecomiq-payment-provider__details summary {
77
- cursor: pointer;
78
- font-weight: 500;
79
- color: #6d6d6d;
80
- }
81
-
82
- .ecomiq-payment-provider__details pre {
83
- margin: 0.5rem 0 0;
84
- max-height: 12rem;
85
- overflow: auto;
86
- border-radius: 4px;
87
- background: #f5f5f5;
88
- padding: 0.5rem;
89
- font-size: 0.6875rem;
90
- line-height: 1.35;
91
- }
@@ -1,105 +0,0 @@
1
- .ecomiq-thank-you-page {
2
- --ty-bg: #ffffff;
3
- --ty-border: #d9d9d9;
4
- --ty-text: #121212;
5
- --ty-muted: #6d6d6d;
6
- --ty-success: #177245;
7
- min-height: 100dvh;
8
- background: #f6f6f6;
9
- color: var(--ty-text);
10
- font-family:
11
- -apple-system,
12
- BlinkMacSystemFont,
13
- "Segoe UI",
14
- Roboto,
15
- Helvetica,
16
- Arial,
17
- sans-serif;
18
- font-size: 14px;
19
- line-height: 1.5;
20
- }
21
-
22
- .ecomiq-thank-you-page__top {
23
- border-bottom: 1px solid var(--ty-border);
24
- padding: 1.25rem 1.5rem;
25
- text-align: center;
26
- background: var(--ty-bg);
27
- display: flex;
28
- justify-content: center;
29
- }
30
-
31
- .ecomiq-thank-you-page__logo {
32
- font-size: 1.5rem;
33
- font-weight: 700;
34
- letter-spacing: 0.2em;
35
- text-transform: uppercase;
36
- text-decoration: none;
37
- color: inherit;
38
- }
39
-
40
- .ecomiq-thank-you-page__logo img {
41
- max-height: 2.5rem;
42
- width: auto;
43
- }
44
-
45
- .ecomiq-thank-you-page__main {
46
- display: flex;
47
- justify-content: center;
48
- padding: 3rem 1.5rem 4rem;
49
- }
50
-
51
- .ecomiq-thank-you-page__card {
52
- width: 100%;
53
- max-width: 32rem;
54
- text-align: center;
55
- }
56
-
57
- .ecomiq-thank-you-page__icon {
58
- display: inline-flex;
59
- align-items: center;
60
- justify-content: center;
61
- width: 3.25rem;
62
- height: 3.25rem;
63
- margin: 0 auto 1.5rem;
64
- border-radius: 50%;
65
- background: var(--ty-success);
66
- color: #fff;
67
- }
68
-
69
- .ecomiq-thank-you-page__icon svg {
70
- width: 1.65rem;
71
- height: 1.65rem;
72
- }
73
-
74
- .ecomiq-thank-you-page__title {
75
- margin: 0 0 1.25rem;
76
- font-size: clamp(1.5rem, 4vw, 1.875rem);
77
- font-weight: 600;
78
- letter-spacing: -0.02em;
79
- }
80
-
81
- .ecomiq-thank-you-page__text {
82
- margin: 0 0 0.75rem;
83
- font-size: 0.9375rem;
84
- color: var(--ty-text);
85
- }
86
-
87
- .ecomiq-thank-you-page__text strong {
88
- font-weight: 600;
89
- }
90
-
91
- .ecomiq-thank-you-page__text--muted {
92
- color: var(--ty-muted);
93
- }
94
-
95
- .ecomiq-thank-you-page__actions {
96
- margin-top: 2rem;
97
- }
98
-
99
- .ecomiq-thank-you-page__link {
100
- display: inline-block;
101
- font-size: 0.875rem;
102
- color: var(--ty-text);
103
- text-decoration: underline;
104
- text-underline-offset: 2px;
105
- }
package/dist/react.d.ts DELETED
@@ -1 +0,0 @@
1
- export * from "./chunks/client";
package/dist/react.js DELETED
@@ -1,2 +0,0 @@
1
- "use client";
2
- export * from "./chunks/client.js";
package/dist/react.js.map DELETED
@@ -1 +0,0 @@
1
- {"version":3,"sources":[],"names":[],"mappings":""}
@@ -1,10 +0,0 @@
1
- type StoreProxyHandlerConfig = {
2
- /** Base URL del API de storefront. Default: `https://storefront.ecomiq.pe` */
3
- apiBaseUrl?: string;
4
- };
5
- /**
6
- * Proxy BFF `/api/store/*` → upstream Ecomiq. Usa Web Fetch API (`Request` / `Response`).
7
- */
8
- declare function handleStoreProxyRequest(request: Request, pathSegments: string[], config?: StoreProxyHandlerConfig): Promise<Response>;
9
-
10
- export { type StoreProxyHandlerConfig as S, handleStoreProxyRequest as h };
@@ -1,41 +0,0 @@
1
- import { S as StoreProxyHandlerConfig } from '../store-proxy-handler-CNzKlTFA.js';
2
- export { h as handleStoreProxyRequest } from '../store-proxy-handler-CNzKlTFA.js';
3
-
4
- type TanStackStoreApiHandlerConfig = StoreProxyHandlerConfig;
5
- type TanStackStoreRouteParams = {
6
- /** Splat de ruta `routes/api/store/$.ts` → `/api/store/products` → `"products"` */
7
- _splat?: string;
8
- /** Alternativa si pasas segmentos como string unido */
9
- path?: string;
10
- };
11
- /** Convierte params de TanStack Start a segmentos de path del proxy. */
12
- declare function tanStackStorePathSegments(params: TanStackStoreRouteParams): string[];
13
- type TanStackHandlerContext = {
14
- request: Request;
15
- params: TanStackStoreRouteParams;
16
- };
17
- /**
18
- * Handlers para server routes de TanStack Start (`routes/api/store/$.ts`).
19
- *
20
- * ```ts
21
- * import { createFileRoute } from "@tanstack/react-router";
22
- * import { createTanStackStoreApiHandler } from "@ecomiq/storefront/tanstack/api";
23
- *
24
- * const storeApi = createTanStackStoreApiHandler({
25
- * apiBaseUrl: process.env.STOREFRONT_API_URL,
26
- * });
27
- *
28
- * export const Route = createFileRoute("/api/store/$")({
29
- * server: { handlers: storeApi },
30
- * });
31
- * ```
32
- */
33
- declare function createTanStackStoreApiHandler(config?: TanStackStoreApiHandlerConfig): {
34
- GET: ({ request, params }: TanStackHandlerContext) => Promise<Response>;
35
- POST: ({ request, params }: TanStackHandlerContext) => Promise<Response>;
36
- PUT: ({ request, params }: TanStackHandlerContext) => Promise<Response>;
37
- PATCH: ({ request, params }: TanStackHandlerContext) => Promise<Response>;
38
- DELETE: ({ request, params }: TanStackHandlerContext) => Promise<Response>;
39
- };
40
-
41
- export { type TanStackStoreApiHandlerConfig, type TanStackStoreRouteParams, createTanStackStoreApiHandler, tanStackStorePathSegments };
@@ -1,30 +0,0 @@
1
- import { handleStoreProxyRequest } from '../chunk-AKD5IDEB.js';
2
- export { handleStoreProxyRequest } from '../chunk-AKD5IDEB.js';
3
- import '../chunk-S7CPZ4UE.js';
4
- import '../chunk-Q4U5OEUT.js';
5
-
6
- // src/react/frameworks/tanstack/api/store-handler.ts
7
- function tanStackStorePathSegments(params) {
8
- const raw = params._splat ?? params.path ?? "";
9
- return raw.split("/").filter(Boolean);
10
- }
11
- function createTanStackStoreApiHandler(config = {}) {
12
- const handler = async ({ request, params }) => {
13
- return handleStoreProxyRequest(
14
- request,
15
- tanStackStorePathSegments(params),
16
- config
17
- );
18
- };
19
- return {
20
- GET: handler,
21
- POST: handler,
22
- PUT: handler,
23
- PATCH: handler,
24
- DELETE: handler
25
- };
26
- }
27
-
28
- export { createTanStackStoreApiHandler, tanStackStorePathSegments };
29
- //# sourceMappingURL=api.js.map
30
- //# sourceMappingURL=api.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../src/react/frameworks/tanstack/api/store-handler.ts"],"names":[],"mappings":";;;;;;AAeO,SAAS,0BACd,MAAA,EACU;AACV,EAAA,MAAM,GAAA,GAAM,MAAA,CAAO,MAAA,IAAU,MAAA,CAAO,IAAA,IAAQ,EAAA;AAC5C,EAAA,OAAO,GAAA,CAAI,KAAA,CAAM,GAAG,CAAA,CAAE,OAAO,OAAO,CAAA;AACtC;AAuBO,SAAS,6BAAA,CACd,MAAA,GAAwC,EAAC,EACzC;AACA,EAAA,MAAM,OAAA,GAAU,OAAO,EAAE,OAAA,EAAS,QAAO,KAA8B;AACrE,IAAA,OAAO,uBAAA;AAAA,MACL,OAAA;AAAA,MACA,0BAA0B,MAAM,CAAA;AAAA,MAChC;AAAA,KACF;AAAA,EACF,CAAA;AAEA,EAAA,OAAO;AAAA,IACL,GAAA,EAAK,OAAA;AAAA,IACL,IAAA,EAAM,OAAA;AAAA,IACN,GAAA,EAAK,OAAA;AAAA,IACL,KAAA,EAAO,OAAA;AAAA,IACP,MAAA,EAAQ;AAAA,GACV;AACF","file":"api.js","sourcesContent":["import {\n handleStoreProxyRequest,\n type StoreProxyHandlerConfig,\n} from \"../../../../core/server/store-proxy-handler\";\n\nexport type TanStackStoreApiHandlerConfig = StoreProxyHandlerConfig;\n\nexport type TanStackStoreRouteParams = {\n /** Splat de ruta `routes/api/store/$.ts` → `/api/store/products` → `\"products\"` */\n _splat?: string;\n /** Alternativa si pasas segmentos como string unido */\n path?: string;\n};\n\n/** Convierte params de TanStack Start a segmentos de path del proxy. */\nexport function tanStackStorePathSegments(\n params: TanStackStoreRouteParams,\n): string[] {\n const raw = params._splat ?? params.path ?? \"\";\n return raw.split(\"/\").filter(Boolean);\n}\n\ntype TanStackHandlerContext = {\n request: Request;\n params: TanStackStoreRouteParams;\n};\n\n/**\n * Handlers para server routes de TanStack Start (`routes/api/store/$.ts`).\n *\n * ```ts\n * import { createFileRoute } from \"@tanstack/react-router\";\n * import { createTanStackStoreApiHandler } from \"@ecomiq/storefront/tanstack/api\";\n *\n * const storeApi = createTanStackStoreApiHandler({\n * apiBaseUrl: process.env.STOREFRONT_API_URL,\n * });\n *\n * export const Route = createFileRoute(\"/api/store/$\")({\n * server: { handlers: storeApi },\n * });\n * ```\n */\nexport function createTanStackStoreApiHandler(\n config: TanStackStoreApiHandlerConfig = {},\n) {\n const handler = async ({ request, params }: TanStackHandlerContext) => {\n return handleStoreProxyRequest(\n request,\n tanStackStorePathSegments(params),\n config,\n );\n };\n\n return {\n GET: handler,\n POST: handler,\n PUT: handler,\n PATCH: handler,\n DELETE: handler,\n };\n}\n\nexport { handleStoreProxyRequest } from \"../../../../core/server/store-proxy-handler\";\n"]}
@@ -1 +0,0 @@
1
- export * from "./react";
package/dist/tanstack.js DELETED
@@ -1,2 +0,0 @@
1
- "use client";
2
- export * from "./react.js";
@@ -1 +0,0 @@
1
- {"version":3,"sources":[],"names":[],"mappings":""}
@@ -1,18 +0,0 @@
1
- export * from "./chunks/server-tanstack";
2
- export type {
3
- StorefrontSettings,
4
- StorefrontStore,
5
- StorefrontCmsSettings,
6
- StorefrontCmsPage,
7
- StorefrontProduct,
8
- StorefrontFacet,
9
- StorefrontSearchFilter,
10
- StorefrontProductDetail,
11
- StorefrontProductsResponse,
12
- StorefrontProductsParamsInput,
13
- StorefrontVariant,
14
- StorefrontCollection,
15
- StorefrontCollectionDetail,
16
- StorefrontPageDetail,
17
- StorefrontPageListItem,
18
- } from "./chunks/core-public";
@@ -1 +0,0 @@
1
- export * from "./chunks/server-tanstack.js";
@@ -1 +0,0 @@
1
- {"version":3,"sources":[],"names":[],"mappings":""}