cloudcommerce 0.0.82 → 0.0.84
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.
- package/.vscode/extensions.json +1 -1
- package/.vscode/settings.json +2 -3
- package/CHANGELOG.md +33 -0
- package/package.json +9 -9
- package/packages/api/lib/api.d.ts +8 -0
- package/packages/api/lib/api.js +24 -3
- package/packages/api/lib/api.js.map +1 -1
- package/packages/api/lib/types.d.ts +2 -0
- package/packages/api/package.json +5 -1
- package/packages/api/src/api.ts +31 -3
- package/packages/api/src/types.ts +2 -0
- package/packages/api/types.ts +2 -0
- package/packages/apps/correios/package.json +1 -1
- package/packages/apps/custom-shipping/package.json +1 -1
- package/packages/apps/discounts/package.json +1 -1
- package/packages/apps/frenet/package.json +1 -1
- package/packages/apps/tiny-erp/package.json +1 -1
- package/packages/cli/package.json +1 -1
- package/packages/config/package.json +1 -1
- package/packages/events/package.json +1 -1
- package/packages/firebase/package.json +2 -2
- package/packages/modules/package.json +1 -1
- package/packages/passport/package.json +1 -1
- package/packages/ssr/package.json +1 -1
- package/packages/storefront/astro.config.mjs +122 -5
- package/packages/storefront/client.d.ts +27 -0
- package/packages/storefront/content/header.json +3 -1
- package/packages/storefront/dist/client/admin/config.json +1 -0
- package/packages/storefront/dist/client/assets/_...2fc8f657.css +1 -0
- package/packages/storefront/dist/client/assets/{_...11681504.css → _...7af61807.css} +1 -1
- package/packages/storefront/dist/client/assets/cms-preview.css +274 -0
- package/packages/storefront/dist/client/assets/cms.css +114 -0
- package/packages/storefront/dist/client/assets/cvv.png +0 -0
- package/packages/storefront/dist/client/assets/icons/bootstrap-icons/font/storefront-icons.woff2 +0 -0
- package/packages/storefront/dist/client/assets/icons/feather-icons/font/storefront-icons.woff2 +0 -0
- package/packages/storefront/dist/client/assets/icons/font-awesome/font/storefront-icons.woff2 +0 -0
- package/packages/storefront/dist/client/assets/icons/line-awesome/font/storefront-icons.woff2 +0 -0
- package/packages/storefront/dist/client/assets/icons/tabler-icons/font/storefront-icons.woff2 +0 -0
- package/packages/storefront/dist/client/assets/img-placeholder.png +0 -0
- package/packages/storefront/dist/client/assets/payments.png +0 -0
- package/packages/storefront/dist/client/assets/ssl-safe.png +0 -0
- package/packages/storefront/dist/client/chunks/workbox-window.prod.es5.4b654ae6.js +2 -0
- package/packages/storefront/dist/client/hoisted.46e058d2.js +271 -0
- package/packages/storefront/dist/client/img/icon.png +0 -0
- package/packages/storefront/dist/client/img/large-icon.png +0 -0
- package/packages/storefront/dist/client/img/uploads/banner1.png +0 -0
- package/packages/storefront/dist/client/img/uploads/banner2.png +0 -0
- package/packages/storefront/dist/client/img/uploads/banner2.webp +0 -0
- package/packages/storefront/dist/client/img/uploads/favicon.png +0 -0
- package/packages/storefront/dist/client/img/uploads/headless.png +0 -0
- package/packages/storefront/dist/client/img/uploads/headphone.png +0 -0
- package/packages/storefront/dist/client/img/uploads/headphone.webp +0 -0
- package/packages/storefront/dist/client/img/uploads/icon.png +0 -0
- package/packages/storefront/dist/client/img/uploads/large-icon.png +0 -0
- package/packages/storefront/dist/client/img/uploads/logo.png +0 -0
- package/packages/storefront/dist/client/img/uploads/logo.webp +0 -0
- package/packages/storefront/dist/client/img/uploads/og-image.png +0 -0
- package/packages/storefront/dist/client/img/uploads/passion.png +0 -0
- package/packages/storefront/dist/client/img/uploads/passion.webp +0 -0
- package/packages/storefront/dist/client/img/uploads/pwa-reliable.png +0 -0
- package/packages/storefront/dist/client/img/uploads/rect8589.png +0 -0
- package/packages/storefront/dist/client/img/uploads/rect859.png +0 -0
- package/packages/storefront/dist/client/img/uploads/rect89.png +0 -0
- package/packages/storefront/dist/client/img/uploads/rect89.webp +0 -0
- package/packages/storefront/dist/client/img/uploads/ssl-safe.png +0 -0
- package/packages/storefront/dist/client/manifest.webmanifest +1 -1
- package/packages/storefront/dist/client/robots.txt +8 -0
- package/packages/storefront/dist/client/sw.js +1 -1
- package/packages/storefront/dist/client/workbox-361aba39.js +1 -0
- package/packages/storefront/dist/server/entry.mjs +608 -103
- package/packages/storefront/dist/server/manifest.webmanifest +1 -1
- package/packages/storefront/package.json +13 -12
- package/packages/storefront/public/admin/config.json +1 -0
- package/packages/storefront/public/assets/cms-preview.css +274 -0
- package/packages/storefront/public/assets/cms.css +114 -0
- package/packages/storefront/public/assets/cvv.png +0 -0
- package/packages/storefront/public/assets/icons/bootstrap-icons/font/storefront-icons.woff2 +0 -0
- package/packages/storefront/public/assets/icons/feather-icons/font/storefront-icons.woff2 +0 -0
- package/packages/storefront/public/assets/icons/font-awesome/font/storefront-icons.woff2 +0 -0
- package/packages/storefront/public/assets/icons/line-awesome/font/storefront-icons.woff2 +0 -0
- package/packages/storefront/public/assets/icons/tabler-icons/font/storefront-icons.woff2 +0 -0
- package/packages/storefront/public/assets/img-placeholder.png +0 -0
- package/packages/storefront/public/assets/payments.png +0 -0
- package/packages/storefront/public/assets/ssl-safe.png +0 -0
- package/packages/storefront/public/img/icon.png +0 -0
- package/packages/storefront/public/img/large-icon.png +0 -0
- package/packages/storefront/public/img/uploads/banner1.png +0 -0
- package/packages/storefront/public/img/uploads/banner2.png +0 -0
- package/packages/storefront/public/img/uploads/banner2.webp +0 -0
- package/packages/storefront/public/img/uploads/favicon.png +0 -0
- package/packages/storefront/public/img/uploads/headless.png +0 -0
- package/packages/storefront/public/img/uploads/headphone.png +0 -0
- package/packages/storefront/public/img/uploads/headphone.webp +0 -0
- package/packages/storefront/public/img/uploads/icon.png +0 -0
- package/packages/storefront/public/img/uploads/large-icon.png +0 -0
- package/packages/storefront/public/img/uploads/logo.png +0 -0
- package/packages/storefront/public/img/uploads/logo.webp +0 -0
- package/packages/storefront/public/img/uploads/og-image.png +0 -0
- package/packages/storefront/public/img/uploads/passion.png +0 -0
- package/packages/storefront/public/img/uploads/passion.webp +0 -0
- package/packages/storefront/public/img/uploads/pwa-reliable.png +0 -0
- package/packages/storefront/public/img/uploads/rect8589.png +0 -0
- package/packages/storefront/public/img/uploads/rect859.png +0 -0
- package/packages/storefront/public/img/uploads/rect89.png +0 -0
- package/packages/storefront/public/img/uploads/rect89.webp +0 -0
- package/packages/storefront/public/img/uploads/ssl-safe.png +0 -0
- package/packages/storefront/public/robots.txt +8 -0
- package/packages/storefront/scripts/prepare-monorepo.sh +4 -0
- package/packages/storefront/scripts/prerelease.sh +4 -0
- package/packages/storefront/src/env.d.ts +3 -1
- package/packages/storefront/src/lib/components/TheHeader.vue +15 -0
- package/packages/storefront/src/lib/components/TopBar.vue +141 -0
- package/packages/storefront/src/lib/helpers/image.ts +36 -0
- package/packages/storefront/src/lib/layouts/Base.astro +26 -25
- package/packages/storefront/src/lib/layouts/{meta/Head.astro → BaseHead.astro} +5 -3
- package/packages/storefront/src/lib/layouts/{meta/Json.astro → BaseStateJson.astro} +1 -1
- package/packages/storefront/src/lib/layouts/Pages.astro +2 -7
- package/packages/storefront/src/lib/layouts/PagesHeader.astro +92 -0
- package/packages/storefront/src/lib/ssr-context.ts +6 -4
- package/packages/storefront/src/pages/[...slug].astro +4 -0
- package/packages/storefront/src/types/cms-code.d.ts +5 -0
- package/packages/storefront/src/types/cms-contacts.d.ts +5 -0
- package/packages/storefront/src/types/cms-header.d.ts +5 -0
- package/packages/storefront/src/types/cms-settings.d.ts +5 -0
- package/packages/storefront/src/types/cms-social.d.ts +5 -0
- package/packages/storefront/tailwind.config.cjs +78 -0
- package/packages/storefront/uno.config.ts +55 -30
- package/packages/types/index.ts +1 -1
- package/packages/types/package.json +1 -1
- package/tsconfig.json +2 -1
- package/packages/storefront/dist/client/assets/_...65ca64e2.css +0 -1
- package/packages/storefront/dist/client/favicon.ico +0 -0
- package/packages/storefront/dist/client/hoisted.f0efb207.js +0 -272
- package/packages/storefront/dist/client/workbox-70b8fbb9.js +0 -1
- package/packages/storefront/public/favicon.ico +0 -0
- package/packages/storefront/src/html.d.ts +0 -23
- package/packages/storefront/src/vite-env.d.ts +0 -13
- package/packages/storefront/tailwind.config.ts +0 -30
package/.vscode/extensions.json
CHANGED
package/.vscode/settings.json
CHANGED
package/CHANGELOG.md
CHANGED
|
@@ -2,6 +2,39 @@
|
|
|
2
2
|
|
|
3
3
|
All notable changes to this project will be documented in this file. See [standard-version](https://github.com/conventional-changelog/standard-version) for commit guidelines.
|
|
4
4
|
|
|
5
|
+
### [0.0.84](https://github.com/ecomplus/cloud-commerce/compare/v0.0.83...v0.0.84) (2022-09-23)
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
### Features
|
|
9
|
+
|
|
10
|
+
* **api:** Add `types` named export with resource type defs ([a2b8e0a](https://github.com/ecomplus/cloud-commerce/commit/a2b8e0a3b770b37feb9be34fa13d1d3243109b63))
|
|
11
|
+
* **api:** Optionally cache API responses (enabled by default with 10min TTL on SSR) ([7d765b1](https://github.com/ecomplus/cloud-commerce/commit/7d765b12aa1e0951b07f1982562e21992416be12))
|
|
12
|
+
* **storefront:** Add bg+color utilities for brand ad contrast on Tailwind/UnoCSS ([e5eec68](https://github.com/ecomplus/cloud-commerce/commit/e5eec684acb03f4b031225cdd5925e7d03170751))
|
|
13
|
+
* **storefront:** Add new surface colors CSS vars ([89dfaf6](https://github.com/ecomplus/cloud-commerce/commit/89dfaf6756a5b92812edd189ac3218d2f8dd36ae))
|
|
14
|
+
* **storefront:** First `TopVar.vue` component :tada: ([2a9bf20](https://github.com/ecomplus/cloud-commerce/commit/2a9bf20c76173c35b45be28fae222d64d6d9e369))
|
|
15
|
+
* **storefront:** Start rendering header with transformed image logo ([df65efd](https://github.com/ecomplus/cloud-commerce/commit/df65efdc44298b3f50897150121bd0fb8475c252))
|
|
16
|
+
|
|
17
|
+
|
|
18
|
+
### Bug Fixes
|
|
19
|
+
|
|
20
|
+
* **storefront:** Fix surface color on Tailwind theme, Tailwind config must be CJS ([18de9f0](https://github.com/ecomplus/cloud-commerce/commit/18de9f0d456d2cd8dce84f0bcae770ddc7b83f52))
|
|
21
|
+
* **storefront:** Properly setting yiq and rgb brand colors variants ([8bccbae](https://github.com/ecomplus/cloud-commerce/commit/8bccbae4aa709b00d0e63b26332f81964cb613f1))
|
|
22
|
+
* **storefront:** Set `apiState[endpoint]` with `data.result` on list requests ([d1353c2](https://github.com/ecomplus/cloud-commerce/commit/d1353c26cb7740cc4212eab5f3f93943ecec56d7))
|
|
23
|
+
* **storefront:** Update Astro and other non-major dependencies ([a63aed9](https://github.com/ecomplus/cloud-commerce/commit/a63aed93caa453956cb4f219ec3b5584f54fde9d))
|
|
24
|
+
|
|
25
|
+
### [0.0.83](https://github.com/ecomplus/cloud-commerce/compare/v0.0.82...v0.0.83) (2022-09-19)
|
|
26
|
+
|
|
27
|
+
|
|
28
|
+
### Features
|
|
29
|
+
|
|
30
|
+
* **storefront:** Advanced SW cache strategies based on current `@ecomplus/storefront-framework` ([3b6b6ae](https://github.com/ecomplus/cloud-commerce/commit/3b6b6ae35e449ccf29ad07b67b74dbfaf409f16a))
|
|
31
|
+
* **storefront:** Properly setup web manifest for PWA ([b2c3f1e](https://github.com/ecomplus/cloud-commerce/commit/b2c3f1e56fe3acfebd5990e0fce73007786da6d4)), closes [#L262-L282](https://github.com/ecomplus/cloud-commerce/issues/L262-L282)
|
|
32
|
+
|
|
33
|
+
|
|
34
|
+
### Bug Fixes
|
|
35
|
+
|
|
36
|
+
* **deps:** Update all non-major dependencies ([#50](https://github.com/ecomplus/cloud-commerce/issues/50)) ([f14b07c](https://github.com/ecomplus/cloud-commerce/commit/f14b07c3c35dc62d52a1c102b001611f85e51080))
|
|
37
|
+
|
|
5
38
|
### [0.0.82](https://github.com/ecomplus/cloud-commerce/compare/v0.0.81...v0.0.82) (2022-09-17)
|
|
6
39
|
|
|
7
40
|
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "cloudcommerce",
|
|
3
3
|
"type": "module",
|
|
4
|
-
"version": "0.0.
|
|
4
|
+
"version": "0.0.84",
|
|
5
5
|
"description": "Open fair-code headless commerce platform: API-first, microservices based, event driven and cloud native",
|
|
6
6
|
"main": "packages/api/lib/index.js",
|
|
7
7
|
"author": "E-Com Club Softwares para E-commerce <ti@e-com.club>",
|
|
@@ -19,22 +19,22 @@
|
|
|
19
19
|
"@commitlint/cli": "^17.1.2",
|
|
20
20
|
"@commitlint/config-conventional": "^17.1.0",
|
|
21
21
|
"@commitlint/rules": "^17.0.0",
|
|
22
|
-
"@types/node": "^18.7.
|
|
23
|
-
"@typescript-eslint/eslint-plugin": "^5.
|
|
24
|
-
"@typescript-eslint/parser": "^5.
|
|
25
|
-
"esbuild": "^0.15.
|
|
22
|
+
"@types/node": "^18.7.18",
|
|
23
|
+
"@typescript-eslint/eslint-plugin": "^5.38.0",
|
|
24
|
+
"@typescript-eslint/parser": "^5.38.0",
|
|
25
|
+
"esbuild": "^0.15.9",
|
|
26
26
|
"eslint": "^8.23.1",
|
|
27
27
|
"eslint-config-airbnb-base": "^15.0.0",
|
|
28
28
|
"eslint-plugin-import": "^2.26.0",
|
|
29
|
-
"eslint-plugin-vue": "^9.
|
|
29
|
+
"eslint-plugin-vue": "^9.5.1",
|
|
30
30
|
"husky": "^8.0.1",
|
|
31
31
|
"node-fetch": "^3.2.10",
|
|
32
32
|
"standard-version": "^9.5.0",
|
|
33
33
|
"ts-node": "^10.9.1",
|
|
34
|
-
"turbo": "^1.
|
|
34
|
+
"turbo": "^1.5.1",
|
|
35
35
|
"typescript": "^4.8.3",
|
|
36
|
-
"vite": "^3.1.
|
|
37
|
-
"vitest": "^0.23.
|
|
36
|
+
"vite": "^3.1.3",
|
|
37
|
+
"vitest": "^0.23.4",
|
|
38
38
|
"zx": "^7.0.8"
|
|
39
39
|
},
|
|
40
40
|
"scripts": {
|
|
@@ -1,4 +1,12 @@
|
|
|
1
1
|
import type { ResourceOpQuery, Endpoint, Config, ResponseBody, RequestBody, ErrorBody } from './types';
|
|
2
|
+
declare global {
|
|
3
|
+
var __apiCache: Record<string, {
|
|
4
|
+
timestamp: number;
|
|
5
|
+
res: Response & {
|
|
6
|
+
data: any;
|
|
7
|
+
};
|
|
8
|
+
}>;
|
|
9
|
+
}
|
|
2
10
|
declare class ApiError extends Error {
|
|
3
11
|
config: Config;
|
|
4
12
|
response?: Response & {
|
package/packages/api/lib/api.js
CHANGED
|
@@ -1,3 +1,6 @@
|
|
|
1
|
+
if (!globalThis.__apiCache) {
|
|
2
|
+
globalThis.__apiCache = {};
|
|
3
|
+
}
|
|
1
4
|
// @ts-ignore
|
|
2
5
|
const _env = import.meta.env
|
|
3
6
|
|| (typeof process === 'object' && process?.env)
|
|
@@ -79,7 +82,19 @@ const setMiddleware = (middleware) => {
|
|
|
79
82
|
};
|
|
80
83
|
const api = async (config, retries = 0) => {
|
|
81
84
|
const { url, headers } = def.middleware(config);
|
|
82
|
-
const {
|
|
85
|
+
const {
|
|
86
|
+
method = 'get', timeout = 20000, maxRetries = 3, cacheMaxAge = 600000, // 10 minutes
|
|
87
|
+
} = config;
|
|
88
|
+
const canCache = method === 'get'
|
|
89
|
+
&& (config.canCache || (config.canCache === undefined && _env.SSR));
|
|
90
|
+
let cacheKey;
|
|
91
|
+
if (canCache) {
|
|
92
|
+
cacheKey = `${url}${JSON.stringify(headers)}`;
|
|
93
|
+
const cached = globalThis.__apiCache[cacheKey];
|
|
94
|
+
if (cached && Date.now() - cached.timestamp <= cacheMaxAge) {
|
|
95
|
+
return { ...cached.res, config };
|
|
96
|
+
}
|
|
97
|
+
}
|
|
83
98
|
const bodyObject = config.body || config.data;
|
|
84
99
|
let body;
|
|
85
100
|
if (bodyObject) {
|
|
@@ -107,11 +122,17 @@ const api = async (config, retries = 0) => {
|
|
|
107
122
|
clearTimeout(timer);
|
|
108
123
|
if (response) {
|
|
109
124
|
if (response.ok) {
|
|
110
|
-
|
|
125
|
+
const res = {
|
|
111
126
|
...response,
|
|
112
|
-
config,
|
|
113
127
|
data: await response.json(),
|
|
114
128
|
};
|
|
129
|
+
if (canCache && cacheKey) {
|
|
130
|
+
globalThis.__apiCache[cacheKey] = {
|
|
131
|
+
timestamp: Date.now(),
|
|
132
|
+
res,
|
|
133
|
+
};
|
|
134
|
+
}
|
|
135
|
+
return { ...res, config };
|
|
115
136
|
}
|
|
116
137
|
const { status } = response;
|
|
117
138
|
if (maxRetries < retries && (status === 429 || status >= 500)) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"api.js","sourceRoot":"","sources":["../src/api.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"api.js","sourceRoot":"","sources":["../src/api.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,10 +1,14 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@cloudcommerce/api",
|
|
3
3
|
"type": "module",
|
|
4
|
-
"version": "0.0.
|
|
4
|
+
"version": "0.0.84",
|
|
5
5
|
"description": "E-Com Plus Cloud Commerce APIs client/adapter",
|
|
6
6
|
"main": "lib/api.js",
|
|
7
7
|
"types": "lib/api.d.ts",
|
|
8
|
+
"exports": {
|
|
9
|
+
".": "./lib/api.js",
|
|
10
|
+
"./types": "./lib/types.d.ts"
|
|
11
|
+
},
|
|
8
12
|
"repository": {
|
|
9
13
|
"type": "git",
|
|
10
14
|
"url": "git+https://github.com/ecomplus/cloud-commerce.git",
|
package/packages/api/src/api.ts
CHANGED
|
@@ -7,6 +7,17 @@ import type {
|
|
|
7
7
|
ErrorBody,
|
|
8
8
|
} from './types';
|
|
9
9
|
|
|
10
|
+
declare global {
|
|
11
|
+
// eslint-disable-next-line
|
|
12
|
+
var __apiCache: Record<string, {
|
|
13
|
+
timestamp: number,
|
|
14
|
+
res: Response & { data: any },
|
|
15
|
+
}>;
|
|
16
|
+
}
|
|
17
|
+
if (!globalThis.__apiCache) {
|
|
18
|
+
globalThis.__apiCache = {};
|
|
19
|
+
}
|
|
20
|
+
|
|
10
21
|
// @ts-ignore
|
|
11
22
|
const _env: Record<string, string> = import.meta.env
|
|
12
23
|
|| (typeof process === 'object' && process?.env)
|
|
@@ -109,10 +120,21 @@ Promise<Response & {
|
|
|
109
120
|
}> => {
|
|
110
121
|
const { url, headers } = def.middleware(config);
|
|
111
122
|
const {
|
|
112
|
-
method,
|
|
123
|
+
method = 'get',
|
|
113
124
|
timeout = 20000,
|
|
114
125
|
maxRetries = 3,
|
|
126
|
+
cacheMaxAge = 600000, // 10 minutes
|
|
115
127
|
} = config;
|
|
128
|
+
const canCache = method === 'get'
|
|
129
|
+
&& (config.canCache || (config.canCache === undefined && _env.SSR));
|
|
130
|
+
let cacheKey: string | undefined;
|
|
131
|
+
if (canCache) {
|
|
132
|
+
cacheKey = `${url}${JSON.stringify(headers)}`;
|
|
133
|
+
const cached = globalThis.__apiCache[cacheKey];
|
|
134
|
+
if (cached && Date.now() - cached.timestamp <= cacheMaxAge) {
|
|
135
|
+
return { ...cached.res, config };
|
|
136
|
+
}
|
|
137
|
+
}
|
|
116
138
|
const bodyObject = config.body || config.data;
|
|
117
139
|
let body: string | undefined;
|
|
118
140
|
if (bodyObject) {
|
|
@@ -142,11 +164,17 @@ Promise<Response & {
|
|
|
142
164
|
|
|
143
165
|
if (response) {
|
|
144
166
|
if (response.ok) {
|
|
145
|
-
|
|
167
|
+
const res = {
|
|
146
168
|
...response,
|
|
147
|
-
config,
|
|
148
169
|
data: await response.json(),
|
|
149
170
|
};
|
|
171
|
+
if (canCache && cacheKey) {
|
|
172
|
+
globalThis.__apiCache[cacheKey] = {
|
|
173
|
+
timestamp: Date.now(),
|
|
174
|
+
res,
|
|
175
|
+
};
|
|
176
|
+
}
|
|
177
|
+
return { ...res, config };
|
|
150
178
|
}
|
|
151
179
|
const { status } = response;
|
|
152
180
|
if (maxRetries < retries && (status === 429 || status >= 500)) {
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@cloudcommerce/firebase",
|
|
3
3
|
"type": "module",
|
|
4
|
-
"version": "0.0.
|
|
4
|
+
"version": "0.0.84",
|
|
5
5
|
"description": "E-Com Plus Cloud Commerce on Firebase",
|
|
6
6
|
"main": "lib/index.js",
|
|
7
7
|
"types": "lib/index.d.ts",
|
|
@@ -31,7 +31,7 @@
|
|
|
31
31
|
"dependencies": {
|
|
32
32
|
"@cloudcommerce/api": "workspace:*",
|
|
33
33
|
"@cloudcommerce/config": "workspace:*",
|
|
34
|
-
"@google-cloud/pubsub": "^3.1.
|
|
34
|
+
"@google-cloud/pubsub": "^3.1.1",
|
|
35
35
|
"firebase-admin": "^11.0.1",
|
|
36
36
|
"firebase-functions": "^3.23.0",
|
|
37
37
|
"node-fetch": "^3.2.10",
|
|
@@ -14,7 +14,118 @@ import getConfig from './storefront.config.mjs';
|
|
|
14
14
|
|
|
15
15
|
dotenv.config();
|
|
16
16
|
|
|
17
|
-
const
|
|
17
|
+
const { domain, primaryColor, settings } = getConfig();
|
|
18
|
+
|
|
19
|
+
const _vitePWAOptions = {
|
|
20
|
+
manifest: {
|
|
21
|
+
name: settings.name || 'My Shop',
|
|
22
|
+
short_name: settings.short_name || settings.name || 'MyShop',
|
|
23
|
+
description: settings.description || 'My PWA Shop',
|
|
24
|
+
background_color: settings.bg_color || '#ffffff',
|
|
25
|
+
theme_color: primaryColor,
|
|
26
|
+
crossorigin: 'use-credentials',
|
|
27
|
+
icons: [{
|
|
28
|
+
src: settings.icon || '/img/icon.png',
|
|
29
|
+
sizes: '192x192',
|
|
30
|
+
type: 'image/png',
|
|
31
|
+
}, {
|
|
32
|
+
src: settings.large_icon || '/img/large-icon.png',
|
|
33
|
+
sizes: '512x512',
|
|
34
|
+
type: 'image/png',
|
|
35
|
+
}, {
|
|
36
|
+
src: settings.large_icon || '/img/large-icon.png',
|
|
37
|
+
sizes: '512x512',
|
|
38
|
+
type: 'image/png',
|
|
39
|
+
purpose: 'any maskable',
|
|
40
|
+
}],
|
|
41
|
+
},
|
|
42
|
+
registerType: 'autoUpdate',
|
|
43
|
+
workbox: {
|
|
44
|
+
navigateFallback: null,
|
|
45
|
+
globDirectory: 'dist/client',
|
|
46
|
+
globPatterns: [
|
|
47
|
+
'**/!(cms*|admin*).{js,css}',
|
|
48
|
+
'**/logo.?????*.{webp,avif,svg}', // `@astrojs/image` optimized logo if any
|
|
49
|
+
],
|
|
50
|
+
ignoreURLParametersMatching: [/.*/],
|
|
51
|
+
runtimeCaching: [{
|
|
52
|
+
urlPattern: /^\/$/,
|
|
53
|
+
handler: 'NetworkFirst',
|
|
54
|
+
}, {
|
|
55
|
+
urlPattern: settings.logo
|
|
56
|
+
? new RegExp(`^${(settings.mini_logo ? `(?:${settings.mini_logo}|${settings.logo})` : settings.logo)}$`)
|
|
57
|
+
: /^\/(?:img\/uploads\/|img\/)?logo\.(?:png|jpg|jpeg|webp|avif|svg)$/,
|
|
58
|
+
handler: 'StaleWhileRevalidate',
|
|
59
|
+
options: {
|
|
60
|
+
cacheName: 'logo',
|
|
61
|
+
},
|
|
62
|
+
}, {
|
|
63
|
+
urlPattern: /\/((?!(?:admin|assets|img)(\/|$))[^.]+)(\.(?!js|css|xml|txt|png|jpg|jpeg|webp|avif|svg|gif)[^.]+)*$/,
|
|
64
|
+
handler: 'NetworkFirst',
|
|
65
|
+
options: {
|
|
66
|
+
cacheName: 'pages',
|
|
67
|
+
expiration: {
|
|
68
|
+
maxEntries: 50,
|
|
69
|
+
purgeOnQuotaError: true,
|
|
70
|
+
},
|
|
71
|
+
},
|
|
72
|
+
}, {
|
|
73
|
+
urlPattern: /^\/assets\//,
|
|
74
|
+
handler: 'StaleWhileRevalidate',
|
|
75
|
+
options: {
|
|
76
|
+
cacheName: 'assets',
|
|
77
|
+
},
|
|
78
|
+
}, {
|
|
79
|
+
urlPattern: /^\/img\/uploads\/.*\.(?:png|jpg|jpeg|webp|avif|svg|gif)$/,
|
|
80
|
+
handler: 'StaleWhileRevalidate',
|
|
81
|
+
options: {
|
|
82
|
+
cacheName: 'cms-images',
|
|
83
|
+
expiration: {
|
|
84
|
+
maxEntries: 20,
|
|
85
|
+
maxAgeSeconds: 60 * 60 * 24 * 30, // 30 days
|
|
86
|
+
purgeOnQuotaError: true,
|
|
87
|
+
},
|
|
88
|
+
},
|
|
89
|
+
}, {
|
|
90
|
+
urlPattern: /^https:\/\/ecomplus\.io/,
|
|
91
|
+
handler: 'NetworkFirst',
|
|
92
|
+
options: {
|
|
93
|
+
cacheName: 'store-api',
|
|
94
|
+
expiration: {
|
|
95
|
+
maxEntries: 50,
|
|
96
|
+
purgeOnQuotaError: true,
|
|
97
|
+
},
|
|
98
|
+
},
|
|
99
|
+
}, {
|
|
100
|
+
urlPattern: /^https:\/\/(((\w+\.)?ecoms\d)|(ecom[\w-]+(\.\w+)*\.digitaloceanspaces))\.com.*\/imgs\/normal\//,
|
|
101
|
+
handler: 'CacheFirst',
|
|
102
|
+
options: {
|
|
103
|
+
cacheName: 'product-thumbnails',
|
|
104
|
+
expiration: {
|
|
105
|
+
maxEntries: 100,
|
|
106
|
+
maxAgeSeconds: 60 * 60 * 24 * 30, // 30 days
|
|
107
|
+
purgeOnQuotaError: true,
|
|
108
|
+
},
|
|
109
|
+
},
|
|
110
|
+
}, {
|
|
111
|
+
urlPattern: /^https:\/\/(((\w+\.)?ecoms\d)|(ecom[\w-]+(\.\w+)*\.digitaloceanspaces))\.com.*\/imgs\/big\//,
|
|
112
|
+
handler: 'CacheFirst',
|
|
113
|
+
options: {
|
|
114
|
+
cacheName: 'product-pictures',
|
|
115
|
+
expiration: {
|
|
116
|
+
maxEntries: 10,
|
|
117
|
+
maxAgeSeconds: 60 * 60 * 24 * 7, // 7 days
|
|
118
|
+
purgeOnQuotaError: true,
|
|
119
|
+
},
|
|
120
|
+
},
|
|
121
|
+
}],
|
|
122
|
+
},
|
|
123
|
+
};
|
|
124
|
+
|
|
125
|
+
const genAstroConfig = ({
|
|
126
|
+
site = `https://${domain}`,
|
|
127
|
+
vitePWAOptions = _vitePWAOptions,
|
|
128
|
+
} = {}) => ({
|
|
18
129
|
output: 'server',
|
|
19
130
|
adapter: node(),
|
|
20
131
|
integrations: [
|
|
@@ -25,13 +136,19 @@ const astroConfig = {
|
|
|
25
136
|
sitemap(),
|
|
26
137
|
UnoCSS(),
|
|
27
138
|
],
|
|
139
|
+
site,
|
|
28
140
|
vite: {
|
|
29
|
-
plugins: [
|
|
141
|
+
plugins: [
|
|
142
|
+
VitePWA(vitePWAOptions),
|
|
143
|
+
],
|
|
30
144
|
},
|
|
31
|
-
|
|
32
|
-
|
|
145
|
+
});
|
|
146
|
+
|
|
147
|
+
const astroConfig = genAstroConfig();
|
|
33
148
|
|
|
34
149
|
// https://astro.build/config
|
|
35
150
|
export default defineConfig(astroConfig);
|
|
36
151
|
|
|
37
|
-
export { astroConfig };
|
|
152
|
+
export { genAstroConfig, astroConfig };
|
|
153
|
+
|
|
154
|
+
export const vitePWAOptions = _vitePWAOptions;
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
/* eslint-disable */
|
|
2
|
+
|
|
3
|
+
interface Window {
|
|
4
|
+
firebaseConfig?: {
|
|
5
|
+
apiKey: string,
|
|
6
|
+
authDomain: string,
|
|
7
|
+
projectId: string,
|
|
8
|
+
storageBucket: string,
|
|
9
|
+
messagingSenderId: string,
|
|
10
|
+
appId: string,
|
|
11
|
+
measurementId: string,
|
|
12
|
+
};
|
|
13
|
+
storefront?: {
|
|
14
|
+
settings: typeof import('./content/settings.json') & {
|
|
15
|
+
store_id: number,
|
|
16
|
+
lang: string,
|
|
17
|
+
country_code: string,
|
|
18
|
+
currency: string,
|
|
19
|
+
currency_symbol: string,
|
|
20
|
+
},
|
|
21
|
+
context?: {
|
|
22
|
+
resource: string,
|
|
23
|
+
doc: Record<string, any>,
|
|
24
|
+
timestamp: number,
|
|
25
|
+
},
|
|
26
|
+
};
|
|
27
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
*,:before,:after{box-sizing:border-box;border-width:0;border-style:solid;border-color:#e5e7eb}html{line-height:1.5;-webkit-text-size-adjust:100%;-moz-tab-size:4;tab-size:4;font-family:ui-sans-serif,system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica Neue,Arial,Noto Sans,sans-serif,"Apple Color Emoji","Segoe UI Emoji",Segoe UI Symbol,"Noto Color Emoji"}body{margin:0;line-height:inherit}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,samp,pre{font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace;font-size:1em}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}button,input,optgroup,select,textarea{font-family:inherit;font-size:100%;font-weight:inherit;line-height:inherit;color:inherit;margin:0;padding:0}button,select{text-transform:none}button,[type=button],[type=reset],[type=submit]{-webkit-appearance:button;background-color:transparent;background-image:none}:-moz-focusring{outline:auto}:-moz-ui-invalid{box-shadow:none}progress{vertical-align:baseline}::-webkit-inner-spin-button,::-webkit-outer-spin-button{height:auto}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}summary{display:list-item}blockquote,dl,dd,h1,h2,h3,h4,h5,h6,hr,figure,p,pre{margin:0}fieldset{margin:0;padding:0}legend{padding:0}ol,ul,menu{list-style:none;margin:0;padding:0}textarea{resize:vertical}input::placeholder,textarea::placeholder{opacity:1;color:#9ca3af}button,[role=button]{cursor:pointer}:disabled{cursor:default}img,svg,video,canvas,audio,iframe,embed,object{display:block;vertical-align:middle}img,video{max-width:100%;height:auto}*,::before,::after{--un-rotate:0;--un-rotate-x:0;--un-rotate-y:0;--un-rotate-z:0;--un-scale-x:1;--un-scale-y:1;--un-scale-z:1;--un-skew-x:0;--un-skew-y:0;--un-translate-x:0;--un-translate-y:0;--un-translate-z:0;--un-pan-x: ;--un-pan-y: ;--un-pinch-zoom: ;--un-scroll-snap-strictness:proximity;--un-ordinal: ;--un-slashed-zero: ;--un-numeric-figure: ;--un-numeric-spacing: ;--un-numeric-fraction: ;--un-border-spacing-x:0;--un-border-spacing-y:0;--un-ring-offset-shadow:0 0 rgba(0,0,0,0);--un-ring-shadow:0 0 rgba(0,0,0,0);--un-shadow-inset: ;--un-shadow:0 0 rgba(0,0,0,0);--un-ring-inset: ;--un-ring-offset-width:0px;--un-ring-offset-color:#fff;--un-ring-width:0px;--un-ring-color:rgba(147,197,253,0.5);--un-blur: ;--un-brightness: ;--un-contrast: ;--un-drop-shadow: ;--un-grayscale: ;--un-hue-rotate: ;--un-invert: ;--un-saturate: ;--un-sepia: ;--un-backdrop-blur: ;--un-backdrop-brightness: ;--un-backdrop-contrast: ;--un-backdrop-grayscale: ;--un-backdrop-hue-rotate: ;--un-backdrop-invert: ;--un-backdrop-opacity: ;--un-backdrop-saturate: ;--un-backdrop-sepia: ;}::backdrop{--un-rotate:0;--un-rotate-x:0;--un-rotate-y:0;--un-rotate-z:0;--un-scale-x:1;--un-scale-y:1;--un-scale-z:1;--un-skew-x:0;--un-skew-y:0;--un-translate-x:0;--un-translate-y:0;--un-translate-z:0;--un-pan-x: ;--un-pan-y: ;--un-pinch-zoom: ;--un-scroll-snap-strictness:proximity;--un-ordinal: ;--un-slashed-zero: ;--un-numeric-figure: ;--un-numeric-spacing: ;--un-numeric-fraction: ;--un-border-spacing-x:0;--un-border-spacing-y:0;--un-ring-offset-shadow:0 0 rgba(0,0,0,0);--un-ring-shadow:0 0 rgba(0,0,0,0);--un-shadow-inset: ;--un-shadow:0 0 rgba(0,0,0,0);--un-ring-inset: ;--un-ring-offset-width:0px;--un-ring-offset-color:#fff;--un-ring-width:0px;--un-ring-color:rgba(147,197,253,0.5);--un-blur: ;--un-brightness: ;--un-contrast: ;--un-drop-shadow: ;--un-grayscale: ;--un-hue-rotate: ;--un-invert: ;--un-saturate: ;--un-sepia: ;--un-backdrop-blur: ;--un-backdrop-brightness: ;--un-backdrop-contrast: ;--un-backdrop-grayscale: ;--un-backdrop-hue-rotate: ;--un-backdrop-invert: ;--un-backdrop-opacity: ;--un-backdrop-saturate: ;--un-backdrop-sepia: ;}.i-bars-3-bottom-left{--un-icon:url("data:image/svg+xml;utf8,%3Csvg viewBox='0 0 24 24' display='inline-block' vertical-align='middle' width='1em' height='1em' xmlns='http://www.w3.org/2000/svg' %3E%3Cpath fill='none' stroke='currentColor' stroke-linecap='round' stroke-linejoin='round' stroke-width='1.5' d='M3.75 6.75h16.5M3.75 12h16.5m-16.5 5.25H12'/%3E%3C/svg%3E");mask:var(--un-icon) no-repeat;mask-size:100% 100%;-webkit-mask:var(--un-icon) no-repeat;-webkit-mask-size:100% 100%;background-color:currentColor;display:inline-block;vertical-align:middle;width:1em;height:1em;}.i-facebook{--un-icon:url("data:image/svg+xml;utf8,%3Csvg viewBox='0 0 24 24' display='inline-block' vertical-align='middle' width='1em' height='1em' xmlns='http://www.w3.org/2000/svg' %3E%3Cpath fill='currentColor' d='M13.397 20.997v-8.196h2.765l.411-3.209h-3.176V7.548c0-.926.258-1.56 1.587-1.56h1.684V3.127A22.336 22.336 0 0 0 14.201 3c-2.444 0-4.122 1.492-4.122 4.231v2.355H7.332v3.209h2.753v8.202h3.312z'/%3E%3C/svg%3E");mask:var(--un-icon) no-repeat;mask-size:100% 100%;-webkit-mask:var(--un-icon) no-repeat;-webkit-mask-size:100% 100%;background-color:currentColor;display:inline-block;vertical-align:middle;width:1em;height:1em;}.i-instagram{--un-icon:url("data:image/svg+xml;utf8,%3Csvg viewBox='0 0 24 24' display='inline-block' vertical-align='middle' width='1em' height='1em' xmlns='http://www.w3.org/2000/svg' %3E%3Cpath fill='currentColor' d='M11.999 7.377a4.623 4.623 0 1 0 0 9.248a4.623 4.623 0 0 0 0-9.248zm0 7.627a3.004 3.004 0 1 1 0-6.008a3.004 3.004 0 0 1 0 6.008z'/%3E%3Ccircle cx='16.806' cy='7.207' r='1.078' fill='currentColor'/%3E%3Cpath fill='currentColor' d='M20.533 6.111A4.605 4.605 0 0 0 17.9 3.479a6.606 6.606 0 0 0-2.186-.42c-.963-.042-1.268-.054-3.71-.054s-2.755 0-3.71.054a6.554 6.554 0 0 0-2.184.42a4.6 4.6 0 0 0-2.633 2.632a6.585 6.585 0 0 0-.419 2.186c-.043.962-.056 1.267-.056 3.71c0 2.442 0 2.753.056 3.71c.015.748.156 1.486.419 2.187a4.61 4.61 0 0 0 2.634 2.632a6.584 6.584 0 0 0 2.185.45c.963.042 1.268.055 3.71.055s2.755 0 3.71-.055a6.615 6.615 0 0 0 2.186-.419a4.613 4.613 0 0 0 2.633-2.633c.263-.7.404-1.438.419-2.186c.043-.962.056-1.267.056-3.71s0-2.753-.056-3.71a6.581 6.581 0 0 0-.421-2.217zm-1.218 9.532a5.043 5.043 0 0 1-.311 1.688a2.987 2.987 0 0 1-1.712 1.711a4.985 4.985 0 0 1-1.67.311c-.95.044-1.218.055-3.654.055c-2.438 0-2.687 0-3.655-.055a4.96 4.96 0 0 1-1.669-.311a2.985 2.985 0 0 1-1.719-1.711a5.08 5.08 0 0 1-.311-1.669c-.043-.95-.053-1.218-.053-3.654c0-2.437 0-2.686.053-3.655a5.038 5.038 0 0 1 .311-1.687c.305-.789.93-1.41 1.719-1.712a5.01 5.01 0 0 1 1.669-.311c.951-.043 1.218-.055 3.655-.055s2.687 0 3.654.055a4.96 4.96 0 0 1 1.67.311a2.991 2.991 0 0 1 1.712 1.712a5.08 5.08 0 0 1 .311 1.669c.043.951.054 1.218.054 3.655c0 2.436 0 2.698-.043 3.654h-.011z'/%3E%3C/svg%3E");mask:var(--un-icon) no-repeat;mask-size:100% 100%;-webkit-mask:var(--un-icon) no-repeat;-webkit-mask-size:100% 100%;background-color:currentColor;display:inline-block;vertical-align:middle;width:1em;height:1em;}.i-phone{--un-icon:url("data:image/svg+xml;utf8,%3Csvg viewBox='0 0 24 24' display='inline-block' vertical-align='middle' width='1em' height='1em' xmlns='http://www.w3.org/2000/svg' %3E%3Cpath fill='none' stroke='currentColor' stroke-linecap='round' stroke-linejoin='round' stroke-width='1.5' d='M2.25 6.75c0 8.284 6.716 15 15 15h2.25a2.25 2.25 0 0 0 2.25-2.25v-1.372c0-.516-.351-.966-.852-1.091l-4.423-1.106c-.44-.11-.902.055-1.173.417l-.97 1.293c-.282.376-.769.542-1.21.38a12.035 12.035 0 0 1-7.143-7.143c-.162-.441.004-.928.38-1.21l1.293-.97c.363-.271.527-.734.417-1.173L6.963 3.102a1.125 1.125 0 0 0-1.091-.852H4.5A2.25 2.25 0 0 0 2.25 4.5v2.25Z'/%3E%3C/svg%3E");mask:var(--un-icon) no-repeat;mask-size:100% 100%;-webkit-mask:var(--un-icon) no-repeat;-webkit-mask-size:100% 100%;background-color:currentColor;display:inline-block;vertical-align:middle;width:1em;height:1em;}.i-pinterest{--un-icon:url("data:image/svg+xml;utf8,%3Csvg viewBox='0 0 24 24' display='inline-block' vertical-align='middle' width='1em' height='1em' xmlns='http://www.w3.org/2000/svg' %3E%3Cpath fill='currentColor' d='M11.99 2C6.472 2 2 6.473 2 11.99c0 4.232 2.633 7.85 6.35 9.306c-.088-.79-.166-2.006.034-2.868c.182-.78 1.172-4.966 1.172-4.966s-.299-.599-.299-1.484c0-1.388.805-2.425 1.808-2.425c.853 0 1.264.64 1.264 1.407c0 .858-.546 2.139-.827 3.327c-.235.994.499 1.805 1.479 1.805c1.775 0 3.141-1.872 3.141-4.575c0-2.392-1.719-4.064-4.173-4.064c-2.843 0-4.512 2.132-4.512 4.335c0 .858.331 1.779.744 2.28a.3.3 0 0 1 .069.286c-.076.315-.245.994-.277 1.133c-.044.183-.145.222-.335.134c-1.247-.581-2.027-2.405-2.027-3.871c0-3.151 2.289-6.045 6.601-6.045c3.466 0 6.159 2.469 6.159 5.77c0 3.444-2.171 6.213-5.184 6.213c-1.013 0-1.964-.525-2.29-1.146l-.623 2.374c-.225.868-.834 1.956-1.241 2.62a10 10 0 0 0 2.958.445c5.517 0 9.99-4.473 9.99-9.99S17.507 2 11.99 2'/%3E%3C/svg%3E");mask:var(--un-icon) no-repeat;mask-size:100% 100%;-webkit-mask:var(--un-icon) no-repeat;-webkit-mask-size:100% 100%;background-color:currentColor;display:inline-block;vertical-align:middle;width:1em;height:1em;}.i-tiktok{--un-icon:url("data:image/svg+xml;utf8,%3Csvg viewBox='0 0 24 24' display='inline-block' vertical-align='middle' width='1em' height='1em' xmlns='http://www.w3.org/2000/svg' %3E%3Cpath fill='currentColor' d='M19.59 6.69a4.83 4.83 0 0 1-3.77-4.25V2h-3.45v13.67a2.89 2.89 0 0 1-5.2 1.74a2.89 2.89 0 0 1 2.31-4.64a2.93 2.93 0 0 1 .88.13V9.4a6.84 6.84 0 0 0-1-.05A6.33 6.33 0 0 0 5 20.1a6.34 6.34 0 0 0 10.86-4.43v-7a8.16 8.16 0 0 0 4.77 1.52v-3.4a4.85 4.85 0 0 1-1-.1z'/%3E%3C/svg%3E");mask:var(--un-icon) no-repeat;mask-size:100% 100%;-webkit-mask:var(--un-icon) no-repeat;-webkit-mask-size:100% 100%;background-color:currentColor;display:inline-block;vertical-align:middle;width:1em;height:1em;}.i-twitter{--un-icon:url("data:image/svg+xml;utf8,%3Csvg viewBox='0 0 24 24' display='inline-block' vertical-align='middle' width='1em' height='1em' xmlns='http://www.w3.org/2000/svg' %3E%3Cpath fill='currentColor' d='M19.633 7.997c.013.175.013.349.013.523c0 5.325-4.053 11.461-11.46 11.461c-2.282 0-4.402-.661-6.186-1.809c.324.037.636.05.973.05a8.07 8.07 0 0 0 5.001-1.721a4.036 4.036 0 0 1-3.767-2.793c.249.037.499.062.761.062c.361 0 .724-.05 1.061-.137a4.027 4.027 0 0 1-3.23-3.953v-.05c.537.299 1.16.486 1.82.511a4.022 4.022 0 0 1-1.796-3.354c0-.748.199-1.434.548-2.032a11.457 11.457 0 0 0 8.306 4.215c-.062-.3-.1-.611-.1-.923a4.026 4.026 0 0 1 4.028-4.028c1.16 0 2.207.486 2.943 1.272a7.957 7.957 0 0 0 2.556-.973a4.02 4.02 0 0 1-1.771 2.22a8.073 8.073 0 0 0 2.319-.624a8.645 8.645 0 0 1-2.019 2.083z'/%3E%3C/svg%3E");mask:var(--un-icon) no-repeat;mask-size:100% 100%;-webkit-mask:var(--un-icon) no-repeat;-webkit-mask-size:100% 100%;background-color:currentColor;display:inline-block;vertical-align:middle;width:1em;height:1em;}.i-whatsapp{--un-icon:url("data:image/svg+xml;utf8,%3Csvg viewBox='0 0 24 24' display='inline-block' vertical-align='middle' width='1em' height='1em' xmlns='http://www.w3.org/2000/svg' %3E%3Cpath fill='currentColor' fill-rule='evenodd' d='M18.403 5.633A8.919 8.919 0 0 0 12.053 3c-4.948 0-8.976 4.027-8.978 8.977c0 1.582.413 3.126 1.198 4.488L3 21.116l4.759-1.249a8.981 8.981 0 0 0 4.29 1.093h.004c4.947 0 8.975-4.027 8.977-8.977a8.926 8.926 0 0 0-2.627-6.35m-6.35 13.812h-.003a7.446 7.446 0 0 1-3.798-1.041l-.272-.162l-2.824.741l.753-2.753l-.177-.282a7.448 7.448 0 0 1-1.141-3.971c.002-4.114 3.349-7.461 7.465-7.461a7.413 7.413 0 0 1 5.275 2.188a7.42 7.42 0 0 1 2.183 5.279c-.002 4.114-3.349 7.462-7.461 7.462m4.093-5.589c-.225-.113-1.327-.655-1.533-.73c-.205-.075-.354-.112-.504.112s-.58.729-.711.879s-.262.168-.486.056s-.947-.349-1.804-1.113c-.667-.595-1.117-1.329-1.248-1.554s-.014-.346.099-.458c.101-.1.224-.262.336-.393c.112-.131.149-.224.224-.374s.038-.281-.019-.393c-.056-.113-.505-1.217-.692-1.666c-.181-.435-.366-.377-.504-.383a9.65 9.65 0 0 0-.429-.008a.826.826 0 0 0-.599.28c-.206.225-.785.767-.785 1.871s.804 2.171.916 2.321c.112.15 1.582 2.415 3.832 3.387c.536.231.954.369 1.279.473c.537.171 1.026.146 1.413.089c.431-.064 1.327-.542 1.514-1.066c.187-.524.187-.973.131-1.067c-.056-.094-.207-.151-.43-.263' clip-rule='evenodd'/%3E%3C/svg%3E");mask:var(--un-icon) no-repeat;mask-size:100% 100%;-webkit-mask:var(--un-icon) no-repeat;-webkit-mask-size:100% 100%;background-color:currentColor;display:inline-block;vertical-align:middle;width:1em;height:1em;}.i-youtube{--un-icon:url("data:image/svg+xml;utf8,%3Csvg viewBox='0 0 24 24' display='inline-block' vertical-align='middle' width='1em' height='1em' xmlns='http://www.w3.org/2000/svg' %3E%3Cpath fill='currentColor' d='M21.593 7.203a2.506 2.506 0 0 0-1.762-1.766C18.265 5.007 12 5 12 5s-6.264-.007-7.831.404a2.56 2.56 0 0 0-1.766 1.778c-.413 1.566-.417 4.814-.417 4.814s-.004 3.264.406 4.814c.23.857.905 1.534 1.763 1.765c1.582.43 7.83.437 7.83.437s6.265.007 7.831-.403a2.515 2.515 0 0 0 1.767-1.763c.414-1.565.417-4.812.417-4.812s.02-3.265-.407-4.831zM9.996 15.005l.005-6l5.207 3.005l-5.212 2.995z'/%3E%3C/svg%3E");mask:var(--un-icon) no-repeat;mask-size:100% 100%;-webkit-mask:var(--un-icon) no-repeat;-webkit-mask-size:100% 100%;background-color:currentColor;display:inline-block;vertical-align:middle;width:1em;height:1em;}.container{max-width:100%;}@media (min-width: 640px){.container{max-width:640px;}}@media (min-width: 768px){.container{max-width:768px;}}@media (min-width: 1024px){.container{max-width:1024px;}}@media (min-width: 1280px){.container{max-width:1280px;}}@media (min-width: 1536px){.container{max-width:1536px;}}.sticky{position:sticky;}.grid{display:grid;}.ml-1{margin-left:0.25rem;}.mr-2{margin-right:0.5rem;}.mr-4{margin-right:1rem;}.mt-3{margin-top:0.75rem;}.inline{display:inline;}.block{display:block;}.inline-block{display:inline-block;}.hidden{display:none;}.w-full{width:100%;}.flex{display:flex;}.grow{flex-grow:1;}.items-center{align-items:center;}.overflow-x-auto{overflow-x:auto;}.whitespace-nowrap{white-space:nowrap;}.bg-surface{background-color:var(--surface-color);}.bg-opacity-70{--un-bg-opacity:0.7;}.p-1{padding:0.25rem;}.py-1{padding-top:0.25rem;padding-bottom:0.25rem;}.py-2{padding-top:0.5rem;padding-bottom:0.5rem;}.text-center{text-align:center;}.text-sm{font-size:0.875rem;line-height:1.25rem;}.text-xs{font-size:0.75rem;line-height:1rem;}.font-semibold{font-weight:600;}.leading-none{line-height:1;}.primary{--background-color:var(--primary);background-color:var(--background-color);color:var(--primary-inverse);}.secondary{--background-color:var(--secondary);background-color:var(--background-color);color:var(--secondary-inverse);}@media (min-width: 640px){.sm\:py-2{padding-top:0.5rem;padding-bottom:0.5rem;}}@media (min-width: 768px){.md\:block{display:block;}.md\:hidden{display:none;}}@media (min-width: 1024px){.lg\:mr-3{margin-right:0.75rem;}.lg\:px-2{padding-left:0.5rem;padding-right:0.5rem;}}@media (min-width: 1280px){.xl\:px-4{padding-left:1rem;padding-right:1rem;}}
|