webs-sdk 0.18.48 → 0.18.50

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 (49) hide show
  1. package/README.md +451 -451
  2. package/dist/components/ARFilters/ARFilters.js +54 -54
  3. package/dist/components/AvatarAI.js +4 -4
  4. package/dist/components/ContactForm/ContactForm.d.ts +3 -0
  5. package/dist/components/ContactForm/ContactForm.d.ts.map +1 -0
  6. package/dist/components/ContactForm/ContactForm.js +66 -0
  7. package/dist/components/ContactForm/ContactForm.js.map +1 -0
  8. package/dist/components/ContactForm/ContactFormContent.d.ts +14 -0
  9. package/dist/components/ContactForm/ContactFormContent.d.ts.map +1 -0
  10. package/dist/components/ContactForm/ContactFormContent.js +92 -0
  11. package/dist/components/ContactForm/ContactFormContent.js.map +1 -0
  12. package/dist/components/ContactForm/api.d.ts +8 -0
  13. package/dist/components/ContactForm/api.d.ts.map +1 -0
  14. package/dist/components/ContactForm/api.js +31 -0
  15. package/dist/components/ContactForm/api.js.map +1 -0
  16. package/dist/components/ContactForm/index.d.ts +8 -0
  17. package/dist/components/ContactForm/index.d.ts.map +1 -0
  18. package/dist/components/ContactForm/index.js +15 -0
  19. package/dist/components/ContactForm/index.js.map +1 -0
  20. package/dist/components/ContactForm/registry.d.ts +3 -0
  21. package/dist/components/ContactForm/registry.d.ts.map +1 -0
  22. package/dist/components/ContactForm/registry.js +23 -0
  23. package/dist/components/ContactForm/registry.js.map +1 -0
  24. package/dist/components/ContactForm/translations.d.ts +3 -0
  25. package/dist/components/ContactForm/translations.d.ts.map +1 -0
  26. package/dist/components/ContactForm/translations.js +234 -0
  27. package/dist/components/ContactForm/translations.js.map +1 -0
  28. package/dist/components/ContactForm/types.d.ts +76 -0
  29. package/dist/components/ContactForm/types.d.ts.map +1 -0
  30. package/dist/components/ContactForm/types.js +3 -0
  31. package/dist/components/ContactForm/types.js.map +1 -0
  32. package/dist/components/CookieConsent/constants.js +31 -31
  33. package/dist/components/CreativeFaceSwap.js +12 -12
  34. package/dist/components/MemeGenerator.js +12 -12
  35. package/dist/components/PasswordReset/constants.js +33 -33
  36. package/dist/components/SpinningWheel/SpinningWheel.js +7 -7
  37. package/dist/index.d.ts +2 -0
  38. package/dist/index.d.ts.map +1 -1
  39. package/dist/index.js +9 -2
  40. package/dist/index.js.map +1 -1
  41. package/package.json +78 -78
  42. package/public/spin2win/assets/border-afristream.svg +26 -26
  43. package/public/spin2win/assets/border-efc.svg +23 -23
  44. package/public/spin2win/assets/border-totalgym.svg +27 -27
  45. package/public/spin2win/assets/border-womantoday.svg +26 -26
  46. package/public/spin2win/assets/indicator-afristream.svg +28 -28
  47. package/public/spin2win/assets/indicator-efc.svg +29 -29
  48. package/public/spin2win/assets/indicator-totalgym.svg +29 -29
  49. package/public/spin2win/fonts/switzer/README.md +22 -22
@@ -7,60 +7,60 @@ const useDeepAR_1 = require("./useDeepAR");
7
7
  const FilterCarousel_1 = require("./FilterCarousel");
8
8
  const Popups_1 = require("./Popups");
9
9
  const constants_1 = require("./constants");
10
- const DEEPAR_CSS = `
11
- .deepar-container{position:relative;width:100%;max-width:800px;margin:0 auto;aspect-ratio:4/3;background-color:#000;border-radius:16px;overflow:hidden;box-shadow:0 20px 60px rgba(0,0,0,.5),0 8px 16px rgba(0,0,0,.3)}
12
- @media(max-width:768px){.deepar-container{max-width:100%;aspect-ratio:auto;height:70vh;max-height:600px;border-radius:8px}}
13
- .deepar-canvas{width:100%;height:100%;object-fit:contain}
14
- .deepar-loading-veil{position:absolute;top:0;left:0;width:100%;height:100%;background:rgba(0,0,0,.8);display:flex;align-items:center;justify-content:center;z-index:10}
15
- .deepar-loading-items{display:flex;flex-direction:column;align-items:center;gap:16px}
16
- .deepar-loading-spinner{width:48px;height:48px;border:4px solid rgba(255,255,255,.1);border-top-color:#fff;border-radius:50%;animation:deepar-spin 1s linear infinite}
17
- @keyframes deepar-spin{to{transform:rotate(360deg)}}
18
- .deepar-loading-text{color:#fff;font-size:16px;font-weight:500}
19
- .deepar-top-buttons{position:absolute;top:0;right:0;display:flex;gap:12px;padding:16px;z-index:20}
20
- .deepar-fullscreen-button{display:flex;align-items:center;justify-content:center;width:48px;height:48px;background:rgba(0,0,0,.6);border:2px solid rgba(255,255,255,.3);border-radius:8px;cursor:pointer;transition:all .2s;-webkit-tap-highlight-color:transparent;touch-action:manipulation}
21
- .deepar-fullscreen-button:hover{background:rgba(0,0,0,.8);border-color:rgba(255,255,255,.5)}
22
- .deepar-fullscreen-button:active{transform:scale(.95);background:rgba(0,0,0,.9)}
23
- @media(max-width:768px){.deepar-fullscreen-button{width:56px;height:56px;background:rgba(0,0,0,.7)}}
24
- .deepar-recording-progress-bar{position:absolute;top:24px;left:50%;transform:translateX(-50%);width:calc(100% - 48px);max-width:400px;height:8px;background:rgba(255,255,255,.2);border-radius:17px;overflow:hidden;z-index:5}
25
- .deepar-time-progress{height:100%;background:#dc2626;border-radius:17px;transition:width 100ms linear}
26
- .deepar-pause-recording-container{position:absolute;bottom:48px;left:50%;transform:translateX(-50%);display:flex;align-items:center;justify-content:center;z-index:5}
27
- .deepar-pause-recording-button{display:flex;align-items:center;justify-content:center;width:80px;height:80px;background:rgba(0,0,0,.5);border:3px solid #fff;border-radius:50%;cursor:pointer;transition:all .2s}
28
- .deepar-pause-recording-inner{width:24px;height:24px;background:#dc2626;border-radius:4px}
29
- .deepar-carousel-container{position:absolute;bottom:0;left:0;width:100%;visibility:hidden;opacity:0;transition:opacity .3s;z-index:4}
30
- .deepar-carousel-container.visible{visibility:visible;opacity:1}
31
- .deepar-carousel-wrapper{position:relative;display:flex;align-items:center;justify-content:center;padding:24px 0;background:linear-gradient(to top,rgba(0,0,0,1) 0%,rgba(0,0,0,.95) 50%,rgba(0,0,0,0) 100%)}
32
- .deepar-carousel-content{position:relative;display:flex;align-items:center;justify-content:center;flex:1}
33
- .deepar-carousel{max-width:368px;overflow:hidden;padding:0 20px}
34
- @media(max-width:768px){.deepar-carousel{max-width:280px;padding:0 10px}}
35
- .deepar-carousel-slides{display:flex;gap:16px}
36
- .deepar-carousel-slide{flex:0 0 auto;cursor:pointer;transition:all .3s ease;opacity:.6}
37
- .deepar-carousel-slide:hover{opacity:.8}
38
- .deepar-carousel-slide.active{opacity:1}
39
- .deepar-filter-thumb{width:64px;height:64px;border-radius:50%;overflow:hidden;transition:all .3s ease;border:3px solid rgba(255,255,255,.2)}
40
- .deepar-carousel-slide.active .deepar-filter-thumb{width:76px;height:76px;border:3px solid rgba(255,255,255,1);box-shadow:0 0 0 8px rgba(0,0,0,.4)}
41
- .deepar-carousel-arrow{position:absolute;top:50%;transform:translateY(-50%);display:flex;align-items:center;justify-content:center;width:40px;height:40px;background:rgba(0,0,0,.4);border:1px solid rgba(255,255,255,.3);border-radius:50%;cursor:pointer;transition:all .3s;z-index:5;color:#fff}
42
- .deepar-carousel-arrow.prev{left:16px}
43
- .deepar-carousel-arrow.next{right:16px}
44
- .deepar-carousel-arrow:hover:not(:disabled){transform:translateY(-50%) scale(1.1);background:rgba(0,0,0,.6)}
45
- .deepar-carousel-arrow:disabled{opacity:.3;cursor:not-allowed}
46
- .deepar-selection-ring{position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);width:110px;height:110px;background:rgba(0,0,0,.4);border:4px solid rgba(255,255,255,.9);border-radius:50%;cursor:pointer;z-index:6;transition:all .3s;display:flex;align-items:center;justify-content:center;box-shadow:0 0 0 8px rgba(0,0,0,.3)}
47
- .deepar-selection-ring:hover{transform:translate(-50%,-50%) scale(1.05);border-color:#fff}
48
- .deepar-selection-ring-camera{color:#fff}
49
- .deepar-creation-container{position:absolute;top:0;left:0;width:100%;height:100%;background:#000;z-index:8}
50
- .deepar-created-video,.deepar-created-image{width:100%;height:100%;object-fit:cover}
51
- .deepar-creation-buttons{position:absolute;top:0;left:0;width:100%;height:100%;pointer-events:none}
52
- .deepar-creation-buttons>*{pointer-events:all}
53
- .deepar-discard-button{position:absolute;top:24px;left:24px;display:flex;align-items:center;gap:8px;padding:12px 20px;background:rgba(0,0,0,.5);color:#fff;border:none;border-radius:8px;font-size:14px;font-weight:600;cursor:pointer;transition:all .2s}
54
- .deepar-bottom-buttons-creation{position:absolute;bottom:42px;left:50%;transform:translateX(-50%);display:flex;gap:16px}
55
- .deepar-creation-button{display:flex;align-items:center;justify-content:center;width:80px;height:80px;background:rgba(0,0,0,.5);border:3px solid #fff;border-radius:50%;cursor:pointer;transition:all .2s}
56
- .deepar-creation-button:hover{background:rgba(0,0,0,.7);transform:scale(1.1)}
57
- .deepar-popup{position:absolute;top:0;left:0;width:100%;height:100%;background:rgba(0,0,0,.8);display:flex;align-items:center;justify-content:center;z-index:50}
58
- .deepar-popup-box{background:#fff;border-radius:12px;padding:48px 32px;max-width:400px;width:90%;text-align:center}
59
- .deepar-popup-image{margin:0 auto 20px;display:flex;align-items:center;justify-content:center}
60
- .deepar-popup-title{font-size:18px;font-weight:600;color:#111;margin-bottom:24px}
61
- .deepar-popup-button{display:inline-block;padding:14px 32px;border-radius:8px;font-size:16px;font-weight:600;border:none;cursor:pointer;transition:all .2s}
62
- .deepar-popup-button:hover{transform:scale(1.05)}
63
- .deepar-download-success{position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);padding:16px 32px;background:rgba(34,197,94,.95);color:#fff;border-radius:8px;font-size:16px;font-weight:600;z-index:100}
10
+ const DEEPAR_CSS = `
11
+ .deepar-container{position:relative;width:100%;max-width:800px;margin:0 auto;aspect-ratio:4/3;background-color:#000;border-radius:16px;overflow:hidden;box-shadow:0 20px 60px rgba(0,0,0,.5),0 8px 16px rgba(0,0,0,.3)}
12
+ @media(max-width:768px){.deepar-container{max-width:100%;aspect-ratio:auto;height:70vh;max-height:600px;border-radius:8px}}
13
+ .deepar-canvas{width:100%;height:100%;object-fit:contain}
14
+ .deepar-loading-veil{position:absolute;top:0;left:0;width:100%;height:100%;background:rgba(0,0,0,.8);display:flex;align-items:center;justify-content:center;z-index:10}
15
+ .deepar-loading-items{display:flex;flex-direction:column;align-items:center;gap:16px}
16
+ .deepar-loading-spinner{width:48px;height:48px;border:4px solid rgba(255,255,255,.1);border-top-color:#fff;border-radius:50%;animation:deepar-spin 1s linear infinite}
17
+ @keyframes deepar-spin{to{transform:rotate(360deg)}}
18
+ .deepar-loading-text{color:#fff;font-size:16px;font-weight:500}
19
+ .deepar-top-buttons{position:absolute;top:0;right:0;display:flex;gap:12px;padding:16px;z-index:20}
20
+ .deepar-fullscreen-button{display:flex;align-items:center;justify-content:center;width:48px;height:48px;background:rgba(0,0,0,.6);border:2px solid rgba(255,255,255,.3);border-radius:8px;cursor:pointer;transition:all .2s;-webkit-tap-highlight-color:transparent;touch-action:manipulation}
21
+ .deepar-fullscreen-button:hover{background:rgba(0,0,0,.8);border-color:rgba(255,255,255,.5)}
22
+ .deepar-fullscreen-button:active{transform:scale(.95);background:rgba(0,0,0,.9)}
23
+ @media(max-width:768px){.deepar-fullscreen-button{width:56px;height:56px;background:rgba(0,0,0,.7)}}
24
+ .deepar-recording-progress-bar{position:absolute;top:24px;left:50%;transform:translateX(-50%);width:calc(100% - 48px);max-width:400px;height:8px;background:rgba(255,255,255,.2);border-radius:17px;overflow:hidden;z-index:5}
25
+ .deepar-time-progress{height:100%;background:#dc2626;border-radius:17px;transition:width 100ms linear}
26
+ .deepar-pause-recording-container{position:absolute;bottom:48px;left:50%;transform:translateX(-50%);display:flex;align-items:center;justify-content:center;z-index:5}
27
+ .deepar-pause-recording-button{display:flex;align-items:center;justify-content:center;width:80px;height:80px;background:rgba(0,0,0,.5);border:3px solid #fff;border-radius:50%;cursor:pointer;transition:all .2s}
28
+ .deepar-pause-recording-inner{width:24px;height:24px;background:#dc2626;border-radius:4px}
29
+ .deepar-carousel-container{position:absolute;bottom:0;left:0;width:100%;visibility:hidden;opacity:0;transition:opacity .3s;z-index:4}
30
+ .deepar-carousel-container.visible{visibility:visible;opacity:1}
31
+ .deepar-carousel-wrapper{position:relative;display:flex;align-items:center;justify-content:center;padding:24px 0;background:linear-gradient(to top,rgba(0,0,0,1) 0%,rgba(0,0,0,.95) 50%,rgba(0,0,0,0) 100%)}
32
+ .deepar-carousel-content{position:relative;display:flex;align-items:center;justify-content:center;flex:1}
33
+ .deepar-carousel{max-width:368px;overflow:hidden;padding:0 20px}
34
+ @media(max-width:768px){.deepar-carousel{max-width:280px;padding:0 10px}}
35
+ .deepar-carousel-slides{display:flex;gap:16px}
36
+ .deepar-carousel-slide{flex:0 0 auto;cursor:pointer;transition:all .3s ease;opacity:.6}
37
+ .deepar-carousel-slide:hover{opacity:.8}
38
+ .deepar-carousel-slide.active{opacity:1}
39
+ .deepar-filter-thumb{width:64px;height:64px;border-radius:50%;overflow:hidden;transition:all .3s ease;border:3px solid rgba(255,255,255,.2)}
40
+ .deepar-carousel-slide.active .deepar-filter-thumb{width:76px;height:76px;border:3px solid rgba(255,255,255,1);box-shadow:0 0 0 8px rgba(0,0,0,.4)}
41
+ .deepar-carousel-arrow{position:absolute;top:50%;transform:translateY(-50%);display:flex;align-items:center;justify-content:center;width:40px;height:40px;background:rgba(0,0,0,.4);border:1px solid rgba(255,255,255,.3);border-radius:50%;cursor:pointer;transition:all .3s;z-index:5;color:#fff}
42
+ .deepar-carousel-arrow.prev{left:16px}
43
+ .deepar-carousel-arrow.next{right:16px}
44
+ .deepar-carousel-arrow:hover:not(:disabled){transform:translateY(-50%) scale(1.1);background:rgba(0,0,0,.6)}
45
+ .deepar-carousel-arrow:disabled{opacity:.3;cursor:not-allowed}
46
+ .deepar-selection-ring{position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);width:110px;height:110px;background:rgba(0,0,0,.4);border:4px solid rgba(255,255,255,.9);border-radius:50%;cursor:pointer;z-index:6;transition:all .3s;display:flex;align-items:center;justify-content:center;box-shadow:0 0 0 8px rgba(0,0,0,.3)}
47
+ .deepar-selection-ring:hover{transform:translate(-50%,-50%) scale(1.05);border-color:#fff}
48
+ .deepar-selection-ring-camera{color:#fff}
49
+ .deepar-creation-container{position:absolute;top:0;left:0;width:100%;height:100%;background:#000;z-index:8}
50
+ .deepar-created-video,.deepar-created-image{width:100%;height:100%;object-fit:cover}
51
+ .deepar-creation-buttons{position:absolute;top:0;left:0;width:100%;height:100%;pointer-events:none}
52
+ .deepar-creation-buttons>*{pointer-events:all}
53
+ .deepar-discard-button{position:absolute;top:24px;left:24px;display:flex;align-items:center;gap:8px;padding:12px 20px;background:rgba(0,0,0,.5);color:#fff;border:none;border-radius:8px;font-size:14px;font-weight:600;cursor:pointer;transition:all .2s}
54
+ .deepar-bottom-buttons-creation{position:absolute;bottom:42px;left:50%;transform:translateX(-50%);display:flex;gap:16px}
55
+ .deepar-creation-button{display:flex;align-items:center;justify-content:center;width:80px;height:80px;background:rgba(0,0,0,.5);border:3px solid #fff;border-radius:50%;cursor:pointer;transition:all .2s}
56
+ .deepar-creation-button:hover{background:rgba(0,0,0,.7);transform:scale(1.1)}
57
+ .deepar-popup{position:absolute;top:0;left:0;width:100%;height:100%;background:rgba(0,0,0,.8);display:flex;align-items:center;justify-content:center;z-index:50}
58
+ .deepar-popup-box{background:#fff;border-radius:12px;padding:48px 32px;max-width:400px;width:90%;text-align:center}
59
+ .deepar-popup-image{margin:0 auto 20px;display:flex;align-items:center;justify-content:center}
60
+ .deepar-popup-title{font-size:18px;font-weight:600;color:#111;margin-bottom:24px}
61
+ .deepar-popup-button{display:inline-block;padding:14px 32px;border-radius:8px;font-size:16px;font-weight:600;border:none;cursor:pointer;transition:all .2s}
62
+ .deepar-popup-button:hover{transform:scale(1.05)}
63
+ .deepar-download-success{position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);padding:16px 32px;background:rgba(34,197,94,.95);color:#fff;border-radius:8px;font-size:16px;font-weight:600;z-index:100}
64
64
  `;
65
65
  function ARFilters(props) {
66
66
  (0, react_1.useEffect)(() => {
@@ -5,10 +5,10 @@ exports.AvatarAIForYouCard = AvatarAIForYouCard;
5
5
  exports.AvatarAIPage = AvatarAIPage;
6
6
  const jsx_runtime_1 = require("react/jsx-runtime");
7
7
  const react_1 = require("react");
8
- const AVATAR_AI_CSS = `
9
- .avatarai-styles-grid::-webkit-scrollbar { width: 6px; }
10
- .avatarai-styles-grid::-webkit-scrollbar-track { background: #f1f1f1; border-radius: 3px; }
11
- .avatarai-styles-grid::-webkit-scrollbar-thumb { background: #ccc; border-radius: 3px; }
8
+ const AVATAR_AI_CSS = `
9
+ .avatarai-styles-grid::-webkit-scrollbar { width: 6px; }
10
+ .avatarai-styles-grid::-webkit-scrollbar-track { background: #f1f1f1; border-radius: 3px; }
11
+ .avatarai-styles-grid::-webkit-scrollbar-thumb { background: #ccc; border-radius: 3px; }
12
12
  `;
13
13
  const defaultStyles = [
14
14
  { id: 1, name: 'Pirate', image: 'https://cdn.smarthubtech.net/upload/20240426_135427_99796_1_cuadrada.png' },
@@ -0,0 +1,3 @@
1
+ import type { ContactFormProps } from './types';
2
+ export declare function ContactForm({ config, texts, locale, emailTo, phone, webId, apiConfig, }: ContactFormProps): import("react/jsx-runtime").JSX.Element;
3
+ //# sourceMappingURL=ContactForm.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ContactForm.d.ts","sourceRoot":"","sources":["../../../src/components/ContactForm/ContactForm.tsx"],"names":[],"mappings":"AAKA,OAAO,KAAK,EACV,gBAAgB,EAKjB,MAAM,SAAS,CAAC;AA6CjB,wBAAgB,WAAW,CAAC,EAC1B,MAAM,EACN,KAAK,EACL,MAAa,EACb,OAAO,EACP,KAAK,EACL,KAAK,EACL,SAAS,GACV,EAAE,gBAAgB,2CA+DlB"}
@@ -0,0 +1,66 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.ContactForm = ContactForm;
4
+ const jsx_runtime_1 = require("react/jsx-runtime");
5
+ const ContactFormContent_1 = require("./ContactFormContent");
6
+ const api_1 = require("./api");
7
+ const registry_1 = require("./registry");
8
+ const translations_1 = require("./translations");
9
+ function mergeTexts(base, override) {
10
+ var _a, _b;
11
+ if (!override)
12
+ return base;
13
+ const baseFields = (_a = base.fields) !== null && _a !== void 0 ? _a : {};
14
+ const overrideFields = (_b = override.fields) !== null && _b !== void 0 ? _b : {};
15
+ const allFieldKeys = new Set([...Object.keys(baseFields), ...Object.keys(overrideFields)]);
16
+ const mergedFields = {};
17
+ allFieldKeys.forEach((key) => {
18
+ var _a, _b, _c, _d, _e, _f;
19
+ mergedFields[key] = Object.assign(Object.assign(Object.assign({}, ((_a = baseFields[key]) !== null && _a !== void 0 ? _a : {})), ((_b = overrideFields[key]) !== null && _b !== void 0 ? _b : {})), { options: Object.assign(Object.assign({}, ((_d = (_c = baseFields[key]) === null || _c === void 0 ? void 0 : _c.options) !== null && _d !== void 0 ? _d : {})), ((_f = (_e = overrideFields[key]) === null || _e === void 0 ? void 0 : _e.options) !== null && _f !== void 0 ? _f : {})) });
20
+ });
21
+ return Object.assign(Object.assign(Object.assign({}, base), override), { fields: mergedFields });
22
+ }
23
+ function ContactForm({ config, texts, locale = 'en', emailTo, phone, webId, apiConfig, }) {
24
+ var _a, _b, _c;
25
+ const sdkDefaults = (0, translations_1.getContactFormTexts)(locale);
26
+ const resolved = mergeTexts(sdkDefaults, texts);
27
+ const infoBlockConfig = config.info_block;
28
+ let chatbotHtml;
29
+ if ((infoBlockConfig === null || infoBlockConfig === void 0 ? void 0 : infoBlockConfig.chatbot_url) && resolved.chatbot_text) {
30
+ chatbotHtml = resolved.chatbot_text.replace('{url}', infoBlockConfig.chatbot_url) || undefined;
31
+ }
32
+ const infoConfig = {
33
+ chatbotHtml,
34
+ phone: (infoBlockConfig === null || infoBlockConfig === void 0 ? void 0 : infoBlockConfig.show_phone) ? (phone || undefined) : undefined,
35
+ email: (infoBlockConfig === null || infoBlockConfig === void 0 ? void 0 : infoBlockConfig.show_email) ? (emailTo || undefined) : undefined,
36
+ };
37
+ const configFieldNames = (_a = config.fields) !== null && _a !== void 0 ? _a : [];
38
+ const fields = configFieldNames.reduce((acc, name) => {
39
+ var _a, _b, _c, _d, _e;
40
+ const def = registry_1.CONTACT_FORM_FIELD_REGISTRY[name];
41
+ if (!def)
42
+ return acc;
43
+ const i18nField = (_b = (_a = resolved.fields) === null || _a === void 0 ? void 0 : _a[name]) !== null && _b !== void 0 ? _b : {};
44
+ const label = (_c = i18nField.label) !== null && _c !== void 0 ? _c : name;
45
+ const placeholder = (_d = i18nField.placeholder) !== null && _d !== void 0 ? _d : '';
46
+ let options;
47
+ if (def.type === 'select' && def.options) {
48
+ const optionLabels = (_e = i18nField.options) !== null && _e !== void 0 ? _e : {};
49
+ options = def.options.map((value) => {
50
+ var _a;
51
+ return ({
52
+ value,
53
+ label: (_a = optionLabels[value]) !== null && _a !== void 0 ? _a : value,
54
+ });
55
+ });
56
+ }
57
+ acc.push({ name, type: def.type, required: def.required, label, placeholder, options });
58
+ return acc;
59
+ }, []);
60
+ const api = new api_1.ContactFormAPI(apiConfig);
61
+ const handleSubmit = async (formData) => {
62
+ await api.submit({ formData, emailTo, webId });
63
+ };
64
+ return ((0, jsx_runtime_1.jsx)(ContactFormContent_1.ContactFormContent, { title: (_b = resolved.title) !== null && _b !== void 0 ? _b : '', description: resolved.description, infoConfig: infoConfig, fields: fields, onSubmit: handleSubmit, submitLabel: (_c = resolved.submitLabel) !== null && _c !== void 0 ? _c : 'Send', successMessage: resolved.successMessage, errorMessage: resolved.errorMessage, fieldRequiredMessage: resolved.fieldRequired }));
65
+ }
66
+ //# sourceMappingURL=ContactForm.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ContactForm.js","sourceRoot":"","sources":["../../../src/components/ContactForm/ContactForm.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,14 @@
1
+ import type { ContactFormField, ContactInfoConfig } from './types';
2
+ export interface ContactFormContentProps {
3
+ title: string;
4
+ description?: string;
5
+ infoConfig?: ContactInfoConfig;
6
+ fields: ContactFormField[];
7
+ onSubmit: (data: Record<string, string>) => Promise<void>;
8
+ submitLabel: string;
9
+ successMessage?: string;
10
+ errorMessage?: string;
11
+ fieldRequiredMessage?: string;
12
+ }
13
+ export declare function ContactFormContent({ title, description, infoConfig, fields, onSubmit, submitLabel, successMessage, errorMessage, fieldRequiredMessage, }: ContactFormContentProps): import("react/jsx-runtime").JSX.Element;
14
+ //# sourceMappingURL=ContactFormContent.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ContactFormContent.d.ts","sourceRoot":"","sources":["../../../src/components/ContactForm/ContactFormContent.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,MAAM,SAAS,CAAC;AAEnE,MAAM,WAAW,uBAAuB;IACtC,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,UAAU,CAAC,EAAE,iBAAiB,CAAC;IAC/B,MAAM,EAAE,gBAAgB,EAAE,CAAC;IAC3B,QAAQ,EAAE,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAC1D,WAAW,EAAE,MAAM,CAAC;IACpB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,oBAAoB,CAAC,EAAE,MAAM,CAAC;CAC/B;AAED,wBAAgB,kBAAkB,CAAC,EACjC,KAAK,EACL,WAAW,EACX,UAAU,EACV,MAAM,EACN,QAAQ,EACR,WAAW,EACX,cAAoB,EACpB,YAAsB,EACtB,oBAA0B,GAC3B,EAAE,uBAAuB,2CAwPzB"}
@@ -0,0 +1,92 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.ContactFormContent = ContactFormContent;
4
+ const jsx_runtime_1 = require("react/jsx-runtime");
5
+ const react_1 = require("react");
6
+ function ContactFormContent({ title, description, infoConfig, fields, onSubmit, submitLabel, successMessage = '✓', errorMessage = 'Error', fieldRequiredMessage = '*', }) {
7
+ const [values, setValues] = (0, react_1.useState)({});
8
+ const [errors, setErrors] = (0, react_1.useState)({});
9
+ const [status, setStatus] = (0, react_1.useState)('idle');
10
+ const [isNarrow, setIsNarrow] = (0, react_1.useState)(false);
11
+ (0, react_1.useEffect)(() => {
12
+ if (typeof window === 'undefined')
13
+ return;
14
+ const mq = window.matchMedia('(max-width: 640px)');
15
+ setIsNarrow(mq.matches);
16
+ const handler = (e) => setIsNarrow(e.matches);
17
+ mq.addEventListener('change', handler);
18
+ return () => mq.removeEventListener('change', handler);
19
+ }, []);
20
+ const hasInfoBlock = infoConfig && (infoConfig.chatbotHtml || infoConfig.phone || infoConfig.email);
21
+ const validate = () => {
22
+ const newErrors = {};
23
+ fields.forEach((field) => {
24
+ var _a;
25
+ if (field.required && !((_a = values[field.name]) === null || _a === void 0 ? void 0 : _a.trim())) {
26
+ newErrors[field.name] = fieldRequiredMessage;
27
+ }
28
+ });
29
+ setErrors(newErrors);
30
+ return Object.keys(newErrors).length === 0;
31
+ };
32
+ const handleChange = (name, value) => {
33
+ setValues((prev) => (Object.assign(Object.assign({}, prev), { [name]: value })));
34
+ if (errors[name]) {
35
+ setErrors((prev) => (Object.assign(Object.assign({}, prev), { [name]: '' })));
36
+ }
37
+ };
38
+ const handleSubmit = async (e) => {
39
+ e.preventDefault();
40
+ if (!validate())
41
+ return;
42
+ setStatus('loading');
43
+ try {
44
+ await onSubmit(values);
45
+ setStatus('success');
46
+ }
47
+ catch (_a) {
48
+ setStatus('error');
49
+ }
50
+ };
51
+ const renderField = (field) => {
52
+ var _a, _b, _c, _d;
53
+ const isTextarea = field.type === 'textarea';
54
+ const isSelect = field.type === 'select';
55
+ const hasError = !!errors[field.name];
56
+ const inputBase = {
57
+ width: '100%',
58
+ padding: '12px 14px',
59
+ borderRadius: '6px',
60
+ border: `1px solid ${hasError ? 'var(--color-error, #e53e3e)' : 'var(--color-border-divider, #e2e8f0)'}`,
61
+ background: 'var(--neutral-100, #f5f5f5)',
62
+ color: 'var(--color-text-primary)',
63
+ fontSize: '14px',
64
+ outline: 'none',
65
+ fontFamily: 'inherit',
66
+ transition: 'border-color 0.15s',
67
+ };
68
+ return ((0, jsx_runtime_1.jsxs)("div", { style: {
69
+ display: 'flex',
70
+ flexDirection: 'column',
71
+ gap: '6px',
72
+ gridColumn: isTextarea ? '1 / -1' : undefined,
73
+ }, children: [(0, jsx_runtime_1.jsxs)("label", { htmlFor: field.name, style: { fontSize: '14px', fontWeight: '600', color: 'var(--color-text-primary)' }, children: [field.label, field.required && ((0, jsx_runtime_1.jsx)("span", { style: { color: 'var(--color-error, #e53e3e)', marginLeft: '2px' }, children: "*" }))] }), isSelect ? ((0, jsx_runtime_1.jsxs)("select", { id: field.name, value: (_a = values[field.name]) !== null && _a !== void 0 ? _a : '', onChange: (e) => handleChange(field.name, e.target.value), style: Object.assign(Object.assign({}, inputBase), { cursor: 'pointer' }), children: [field.placeholder && ((0, jsx_runtime_1.jsx)("option", { value: "", disabled: true, children: field.placeholder })), (_b = field.options) === null || _b === void 0 ? void 0 : _b.map((opt) => ((0, jsx_runtime_1.jsx)("option", { value: opt.value, children: opt.label }, opt.value)))] })) : isTextarea ? ((0, jsx_runtime_1.jsx)("textarea", { id: field.name, placeholder: field.placeholder, value: (_c = values[field.name]) !== null && _c !== void 0 ? _c : '', onChange: (e) => handleChange(field.name, e.target.value), rows: 4, style: Object.assign(Object.assign({}, inputBase), { resize: 'vertical' }) })) : ((0, jsx_runtime_1.jsx)("input", { id: field.name, type: field.type, placeholder: field.placeholder, value: (_d = values[field.name]) !== null && _d !== void 0 ? _d : '', onChange: (e) => handleChange(field.name, e.target.value), style: inputBase })), hasError && ((0, jsx_runtime_1.jsx)("span", { style: { fontSize: '12px', color: 'var(--color-error, #e53e3e)', fontWeight: '500' }, children: errors[field.name] }))] }, field.name));
74
+ };
75
+ return ((0, jsx_runtime_1.jsxs)("div", { className: "w-full flex flex-col items-center gap-0", children: [(0, jsx_runtime_1.jsxs)("div", { className: "w-full text-center pb-6", style: { borderBottom: '1px solid var(--color-border-divider)' }, children: [(0, jsx_runtime_1.jsx)("h1", { className: "font-bold text-(--color-text-primary)", style: { fontSize: '36px', lineHeight: '1.2em', marginBottom: '16px' }, children: title }), description && ((0, jsx_runtime_1.jsx)("p", { className: "text-(--color-text-secondary)", style: { fontSize: '16px', lineHeight: '1.6em' }, dangerouslySetInnerHTML: { __html: description } }))] }), hasInfoBlock && ((0, jsx_runtime_1.jsxs)("div", { className: "w-full flex flex-col items-center gap-4 py-8", style: { borderBottom: '1px solid var(--color-border-divider)' }, children: [infoConfig.chatbotHtml && ((0, jsx_runtime_1.jsx)("p", { className: "text-(--color-text-secondary) text-center", style: { fontSize: '14px' }, dangerouslySetInnerHTML: { __html: infoConfig.chatbotHtml } })), infoConfig.phone && ((0, jsx_runtime_1.jsx)("a", { href: `tel:${infoConfig.phone}`, className: "w-full max-w-lg block text-center text-white font-bold py-4 px-6 rounded transition-opacity hover:opacity-90", style: {
76
+ background: 'var(--color-brand-accent-500)',
77
+ fontSize: '18px',
78
+ letterSpacing: '0.5px',
79
+ }, children: infoConfig.phone })), infoConfig.email && ((0, jsx_runtime_1.jsxs)("p", { className: "text-(--color-text-secondary) text-center", style: { fontSize: '14px' }, children: ["E-mail:", ' ', (0, jsx_runtime_1.jsx)("a", { href: `mailto:${infoConfig.email}`, style: { color: 'var(--color-brand-accent-500)', fontWeight: '600' }, children: infoConfig.email })] }))] })), fields.length > 0 && ((0, jsx_runtime_1.jsx)("div", { className: "w-full pt-8", children: status === 'success' ? ((0, jsx_runtime_1.jsx)("div", { className: "w-full text-center py-12 rounded-lg", style: { background: 'var(--neutral-100)', color: 'var(--color-text-primary)' }, children: (0, jsx_runtime_1.jsx)("p", { className: "font-semibold text-xl", children: successMessage }) })) : ((0, jsx_runtime_1.jsxs)("form", { onSubmit: handleSubmit, noValidate: true, children: [(0, jsx_runtime_1.jsx)("div", { style: {
80
+ display: 'grid',
81
+ gridTemplateColumns: isNarrow ? '1fr' : 'repeat(2, 1fr)',
82
+ gap: '20px',
83
+ }, children: fields.map(renderField) }), status === 'error' && ((0, jsx_runtime_1.jsx)("p", { className: "mt-4 text-center font-medium", style: { color: 'var(--color-error, #e53e3e)', fontSize: '14px' }, children: errorMessage })), (0, jsx_runtime_1.jsx)("button", { type: "submit", disabled: status === 'loading', className: "mt-6 w-full font-bold py-4 text-white rounded transition-opacity", style: {
84
+ background: status === 'loading'
85
+ ? 'var(--neutral-300)'
86
+ : 'var(--color-brand-accent-500)',
87
+ fontSize: '16px',
88
+ letterSpacing: '0.5px',
89
+ cursor: status === 'loading' ? 'not-allowed' : 'pointer',
90
+ }, children: status === 'loading' ? '...' : submitLabel })] })) }))] }));
91
+ }
92
+ //# sourceMappingURL=ContactFormContent.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ContactFormContent.js","sourceRoot":"","sources":["../../../src/components/ContactForm/ContactFormContent.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ import type { ContactFormAPIConfig, ContactFormPayload } from './types';
2
+ export declare class ContactFormAPI {
3
+ private baseUrl;
4
+ constructor(config?: ContactFormAPIConfig);
5
+ submit(payload: ContactFormPayload): Promise<void>;
6
+ }
7
+ export declare function createContactFormAPI(config?: ContactFormAPIConfig): ContactFormAPI;
8
+ //# sourceMappingURL=api.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"api.d.ts","sourceRoot":"","sources":["../../../src/components/ContactForm/api.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,oBAAoB,EAAE,kBAAkB,EAAE,MAAM,SAAS,CAAC;AAOxE,qBAAa,cAAc;IACzB,OAAO,CAAC,OAAO,CAAS;gBAEZ,MAAM,GAAE,oBAAyB;IAIvC,MAAM,CAAC,OAAO,EAAE,kBAAkB,GAAG,OAAO,CAAC,IAAI,CAAC;CAiBzD;AAED,wBAAgB,oBAAoB,CAAC,MAAM,CAAC,EAAE,oBAAoB,GAAG,cAAc,CAElF"}
@@ -0,0 +1,31 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.ContactFormAPI = void 0;
4
+ exports.createContactFormAPI = createContactFormAPI;
5
+ class ContactFormAPI {
6
+ constructor(config = {}) {
7
+ var _a;
8
+ this.baseUrl = (_a = config.baseUrl) !== null && _a !== void 0 ? _a : '/api/contact-form';
9
+ }
10
+ async submit(payload) {
11
+ var _a, _b;
12
+ const response = await fetch(this.baseUrl, {
13
+ method: 'POST',
14
+ headers: { 'Content-Type': 'application/json' },
15
+ body: JSON.stringify(payload),
16
+ });
17
+ if (!response.ok) {
18
+ const data = await response.json().catch(() => ({}));
19
+ throw new Error((_a = data.error) !== null && _a !== void 0 ? _a : `HTTP ${response.status}`);
20
+ }
21
+ const result = await response.json();
22
+ if (result.status !== 'success') {
23
+ throw new Error((_b = result.error) !== null && _b !== void 0 ? _b : 'submit_failed');
24
+ }
25
+ }
26
+ }
27
+ exports.ContactFormAPI = ContactFormAPI;
28
+ function createContactFormAPI(config) {
29
+ return new ContactFormAPI(config);
30
+ }
31
+ //# sourceMappingURL=api.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"api.js","sourceRoot":"","sources":["../../../src/components/ContactForm/api.ts"],"names":[],"mappings":";;;AAiCA,oDAEC;AA5BD,MAAa,cAAc;IAGzB,YAAY,SAA+B,EAAE;;QAC3C,IAAI,CAAC,OAAO,GAAG,MAAA,MAAM,CAAC,OAAO,mCAAI,mBAAmB,CAAC;IACvD,CAAC;IAED,KAAK,CAAC,MAAM,CAAC,OAA2B;;QACtC,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,IAAI,CAAC,OAAO,EAAE;YACzC,MAAM,EAAE,MAAM;YACd,OAAO,EAAE,EAAE,cAAc,EAAE,kBAAkB,EAAE;YAC/C,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC;SAC9B,CAAC,CAAC;QAEH,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;YACjB,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;YACrD,MAAM,IAAI,KAAK,CAAC,MAAC,IAA2B,CAAC,KAAK,mCAAI,QAAQ,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC;QACnF,CAAC;QAED,MAAM,MAAM,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAwC,CAAC;QAC3E,IAAI,MAAM,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;YAChC,MAAM,IAAI,KAAK,CAAC,MAAA,MAAM,CAAC,KAAK,mCAAI,eAAe,CAAC,CAAC;QACnD,CAAC;IACH,CAAC;CACF;AAxBD,wCAwBC;AAED,SAAgB,oBAAoB,CAAC,MAA6B;IAChE,OAAO,IAAI,cAAc,CAAC,MAAM,CAAC,CAAC;AACpC,CAAC"}
@@ -0,0 +1,8 @@
1
+ export { ContactForm } from './ContactForm';
2
+ export { ContactFormContent } from './ContactFormContent';
3
+ export { ContactFormAPI, createContactFormAPI } from './api';
4
+ export { CONTACT_FORM_FIELD_REGISTRY } from './registry';
5
+ export { getContactFormTexts } from './translations';
6
+ export type { ContactFormProps, ContactFormConfig, ContactFormTexts, ContactFormFieldTexts, ContactFormTheme, ContactFormAPIConfig, ContactFormPayload, ContactFormField, ContactFormFieldDef, ContactFormFieldType, ContactFormSelectOption, ContactInfoConfig, } from './types';
7
+ export type { ContactFormContentProps } from './ContactFormContent';
8
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/ContactForm/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAC5C,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAC1D,OAAO,EAAE,cAAc,EAAE,oBAAoB,EAAE,MAAM,OAAO,CAAC;AAC7D,OAAO,EAAE,2BAA2B,EAAE,MAAM,YAAY,CAAC;AACzD,OAAO,EAAE,mBAAmB,EAAE,MAAM,gBAAgB,CAAC;AACrD,YAAY,EACV,gBAAgB,EAChB,iBAAiB,EACjB,gBAAgB,EAChB,qBAAqB,EACrB,gBAAgB,EAChB,oBAAoB,EACpB,kBAAkB,EAClB,gBAAgB,EAChB,mBAAmB,EACnB,oBAAoB,EACpB,uBAAuB,EACvB,iBAAiB,GAClB,MAAM,SAAS,CAAC;AACjB,YAAY,EAAE,uBAAuB,EAAE,MAAM,sBAAsB,CAAC"}
@@ -0,0 +1,15 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.getContactFormTexts = exports.CONTACT_FORM_FIELD_REGISTRY = exports.createContactFormAPI = exports.ContactFormAPI = exports.ContactFormContent = exports.ContactForm = void 0;
4
+ var ContactForm_1 = require("./ContactForm");
5
+ Object.defineProperty(exports, "ContactForm", { enumerable: true, get: function () { return ContactForm_1.ContactForm; } });
6
+ var ContactFormContent_1 = require("./ContactFormContent");
7
+ Object.defineProperty(exports, "ContactFormContent", { enumerable: true, get: function () { return ContactFormContent_1.ContactFormContent; } });
8
+ var api_1 = require("./api");
9
+ Object.defineProperty(exports, "ContactFormAPI", { enumerable: true, get: function () { return api_1.ContactFormAPI; } });
10
+ Object.defineProperty(exports, "createContactFormAPI", { enumerable: true, get: function () { return api_1.createContactFormAPI; } });
11
+ var registry_1 = require("./registry");
12
+ Object.defineProperty(exports, "CONTACT_FORM_FIELD_REGISTRY", { enumerable: true, get: function () { return registry_1.CONTACT_FORM_FIELD_REGISTRY; } });
13
+ var translations_1 = require("./translations");
14
+ Object.defineProperty(exports, "getContactFormTexts", { enumerable: true, get: function () { return translations_1.getContactFormTexts; } });
15
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/components/ContactForm/index.ts"],"names":[],"mappings":";;;AAAA,6CAA4C;AAAnC,0GAAA,WAAW,OAAA;AACpB,2DAA0D;AAAjD,wHAAA,kBAAkB,OAAA;AAC3B,6BAA6D;AAApD,qGAAA,cAAc,OAAA;AAAE,2GAAA,oBAAoB,OAAA;AAC7C,uCAAyD;AAAhD,uHAAA,2BAA2B,OAAA;AACpC,+CAAqD;AAA5C,mHAAA,mBAAmB,OAAA"}
@@ -0,0 +1,3 @@
1
+ import type { ContactFormFieldDef } from './types';
2
+ export declare const CONTACT_FORM_FIELD_REGISTRY: Record<string, ContactFormFieldDef>;
3
+ //# sourceMappingURL=registry.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../../../src/components/ContactForm/registry.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,SAAS,CAAC;AAOnD,eAAO,MAAM,2BAA2B,EAAE,MAAM,CAAC,MAAM,EAAE,mBAAmB,CAkB3E,CAAC"}
@@ -0,0 +1,23 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.CONTACT_FORM_FIELD_REGISTRY = void 0;
4
+ exports.CONTACT_FORM_FIELD_REGISTRY = {
5
+ firstName: { type: 'text', required: true },
6
+ lastName: { type: 'text', required: true },
7
+ phone: { type: 'tel', required: true },
8
+ email: { type: 'email', required: true },
9
+ msisdn: { type: 'tel', required: true },
10
+ subject: { type: 'text', required: false },
11
+ reason: {
12
+ type: 'select',
13
+ required: true,
14
+ options: ['subscription', 'billing', 'technical', 'other'],
15
+ },
16
+ operator: {
17
+ type: 'select',
18
+ required: true,
19
+ options: ['orange', 'sfr', 'bouygues', 'free', 'other'],
20
+ },
21
+ message: { type: 'textarea', required: true },
22
+ };
23
+ //# sourceMappingURL=registry.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"registry.js","sourceRoot":"","sources":["../../../src/components/ContactForm/registry.ts"],"names":[],"mappings":";;;AAOa,QAAA,2BAA2B,GAAwC;IAC9E,SAAS,EAAE,EAAE,IAAI,EAAE,MAAM,EAAM,QAAQ,EAAE,IAAI,EAAE;IAC/C,QAAQ,EAAG,EAAE,IAAI,EAAE,MAAM,EAAM,QAAQ,EAAE,IAAI,EAAE;IAC/C,KAAK,EAAM,EAAE,IAAI,EAAE,KAAK,EAAO,QAAQ,EAAE,IAAI,EAAE;IAC/C,KAAK,EAAM,EAAE,IAAI,EAAE,OAAO,EAAK,QAAQ,EAAE,IAAI,EAAE;IAC/C,MAAM,EAAK,EAAE,IAAI,EAAE,KAAK,EAAO,QAAQ,EAAE,IAAI,EAAE;IAC/C,OAAO,EAAI,EAAE,IAAI,EAAE,MAAM,EAAM,QAAQ,EAAE,KAAK,EAAE;IAChD,MAAM,EAAE;QACN,IAAI,EAAE,QAAQ;QACd,QAAQ,EAAE,IAAI;QACd,OAAO,EAAE,CAAC,cAAc,EAAE,SAAS,EAAE,WAAW,EAAE,OAAO,CAAC;KAC3D;IACD,QAAQ,EAAE;QACR,IAAI,EAAE,QAAQ;QACd,QAAQ,EAAE,IAAI;QACd,OAAO,EAAE,CAAC,QAAQ,EAAE,KAAK,EAAE,UAAU,EAAE,MAAM,EAAE,OAAO,CAAC;KACxD;IACD,OAAO,EAAE,EAAE,IAAI,EAAE,UAAU,EAAE,QAAQ,EAAE,IAAI,EAAE;CAC9C,CAAC"}
@@ -0,0 +1,3 @@
1
+ import type { ContactFormTexts } from './types';
2
+ export declare function getContactFormTexts(locale: string): ContactFormTexts;
3
+ //# sourceMappingURL=translations.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"translations.d.ts","sourceRoot":"","sources":["../../../src/components/ContactForm/translations.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,SAAS,CAAC;AAqPhD,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,MAAM,GAAG,gBAAgB,CAEpE"}