hapi-recaptcha-html 1.0.0 → 1.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.
- package/{readme.md → README.md} +1 -1
- package/demo/enquiry-forms.js +23 -0
- package/demo/index.html +216 -0
- package/demo/loading.svg +31 -0
- package/dist/hapi.min.js +3 -3
- package/index.js +2 -2
- package/package.json +13 -10
- package/src/hapi.js +179 -188
- package/src/recaptcha.js +1 -1
- package/enquiry-form.js +0 -6
- package/index.html +0 -127
package/{readme.md → README.md}
RENAMED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
Wrapper of Alpine JS plugin for HAPI Form, works on Laravel API endpoint.
|
|
3
3
|
## CDN
|
|
4
4
|
```html
|
|
5
|
-
<script src="https://unpkg.com/
|
|
5
|
+
<script src="https://unpkg.com/hapi-recaptcha-html@latest/dist/hapi.min.js"></script>
|
|
6
6
|
```
|
|
7
7
|
|
|
8
8
|
## Usage
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
Hapi.forms([
|
|
2
|
+
// form 01
|
|
3
|
+
{
|
|
4
|
+
name: 'contactForm01',
|
|
5
|
+
endpoint: 'https://hapiform.sg/api/a198d598-b594-4ba1-acbe-0d1795b43576',
|
|
6
|
+
redirectTo: '/contactus-success.html',
|
|
7
|
+
captchaId: 'captcha-01',
|
|
8
|
+
onFailed(err) {
|
|
9
|
+
console.error(err);
|
|
10
|
+
}
|
|
11
|
+
},
|
|
12
|
+
// form 02
|
|
13
|
+
{
|
|
14
|
+
name: 'contactForm02',
|
|
15
|
+
endpoint: 'https://hapiform.sg/api/a198d598-b594-4ba1-acbe-0d1795b43576',
|
|
16
|
+
redirectTo: '/contactus-success.html',
|
|
17
|
+
captchaId: 'captcha-02',
|
|
18
|
+
onFailed(err) {
|
|
19
|
+
console.error(err);
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
]
|
|
23
|
+
);
|
package/demo/index.html
ADDED
|
@@ -0,0 +1,216 @@
|
|
|
1
|
+
<!doctype html>
|
|
2
|
+
<html lang="en">
|
|
3
|
+
<head>
|
|
4
|
+
<meta charset="UTF-8">
|
|
5
|
+
<meta name="viewport"
|
|
6
|
+
content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
|
|
7
|
+
<meta http-equiv="X-UA-Compatible" content="ie=edge">
|
|
8
|
+
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap@5.2.3/dist/css/bootstrap.min.css"
|
|
9
|
+
integrity="sha384-rbsA2VBKQhggwzxH7pPCaAqO46MgnOM80zW1RWuH61DGLwZJEdK2Kadq2F9CUG65" crossorigin="anonymous">
|
|
10
|
+
<title>Demo Forms</title>
|
|
11
|
+
<style>
|
|
12
|
+
h1 {
|
|
13
|
+
font-size: 20px;
|
|
14
|
+
text-align: center;
|
|
15
|
+
margin: 20px auto;
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
form {
|
|
19
|
+
width: 100%;
|
|
20
|
+
max-width: 550px;
|
|
21
|
+
margin: 10px auto;
|
|
22
|
+
border: 1px solid #dedede;
|
|
23
|
+
border-radius: 5px;
|
|
24
|
+
padding: 10px;
|
|
25
|
+
}
|
|
26
|
+
</style>
|
|
27
|
+
</head>
|
|
28
|
+
<body>
|
|
29
|
+
<div class="container">
|
|
30
|
+
<h1>Demo Forms</h1>
|
|
31
|
+
|
|
32
|
+
<div class="d-lg-flex">
|
|
33
|
+
|
|
34
|
+
<form x-on:submit.prevent="submit" x-data="contactForm01">
|
|
35
|
+
<template x-if="errors">
|
|
36
|
+
<div x-html="JSON.stringify(errors)" class="text-danger"></div>
|
|
37
|
+
</template>
|
|
38
|
+
<div>
|
|
39
|
+
<div class="mb-3">
|
|
40
|
+
<div class="form-field">
|
|
41
|
+
<label for="form01-name" class="form-label">Name</label>
|
|
42
|
+
<input type="text" id="form01-name" x-model="fields.name" placeholder="Name" class="form-control">
|
|
43
|
+
</div>
|
|
44
|
+
<template x-if="errors && errors.name">
|
|
45
|
+
<div x-text="errors.name" class="text-danger"></div>
|
|
46
|
+
</template>
|
|
47
|
+
</div>
|
|
48
|
+
<div class="mb-3">
|
|
49
|
+
<div class="form-field">
|
|
50
|
+
<label for="form01-contact_number" class="form-label">Contact Number</label>
|
|
51
|
+
<input type="tel" id="form01-contact_number" x-model="fields.contact_number"
|
|
52
|
+
placeholder="Contact Number" class="form-control">
|
|
53
|
+
|
|
54
|
+
</div>
|
|
55
|
+
<template x-if="errors && errors.contact_number">
|
|
56
|
+
<div x-text="errors.contact_number" class="text-danger"></div>
|
|
57
|
+
</template>
|
|
58
|
+
</div>
|
|
59
|
+
<div class="mb-3">
|
|
60
|
+
<div class="form-field">
|
|
61
|
+
<label for="form01-email" class="form-label">Email</label>
|
|
62
|
+
<input type="email" id="form01-email" x-model="fields.email" placeholder="Email"
|
|
63
|
+
class="form-control">
|
|
64
|
+
</div>
|
|
65
|
+
<template x-if="errors && errors.email">
|
|
66
|
+
<div x-text="errors.email" class="text-danger"></div>
|
|
67
|
+
</template>
|
|
68
|
+
</div>
|
|
69
|
+
<div class="mb-3">
|
|
70
|
+
<div class="form-field">
|
|
71
|
+
<select class="form-select" id="form01-specialist" x-model="fields.specialist">
|
|
72
|
+
<option value="" selected>Preferred Specialist</option>
|
|
73
|
+
<option value="Dr Dennis Koh">Dr Dennis Koh</option>
|
|
74
|
+
<option value="Dr Sharon Koh">Dr Sharon Koh</option>
|
|
75
|
+
<option value="Dr Pauleon Tan">Dr Pauleon Tan</option>
|
|
76
|
+
<option value="No Preference">No Preference</option>
|
|
77
|
+
</select>
|
|
78
|
+
</div>
|
|
79
|
+
<template x-if="errors && errors.specialist">
|
|
80
|
+
<div x-text="errors.specialist" class="text-danger"></div>
|
|
81
|
+
</template>
|
|
82
|
+
</div>
|
|
83
|
+
<div class="mb-3">
|
|
84
|
+
<div class="form-field">
|
|
85
|
+
<label for="form01-message" class="form-label">Message</label>
|
|
86
|
+
<textarea id="form01-message" x-model="fields.message" rows="4" placeholder="Message"
|
|
87
|
+
class="form-control form-textarea"></textarea>
|
|
88
|
+
</div>
|
|
89
|
+
<template x-if="errors && errors.message">
|
|
90
|
+
<div x-text="errors.message" class="text-danger"></div>
|
|
91
|
+
</template>
|
|
92
|
+
</div>
|
|
93
|
+
<div class="mb-3">
|
|
94
|
+
<div id="captcha-01"></div>
|
|
95
|
+
<template x-if="errors && errors.recaptchaError">
|
|
96
|
+
<div x-text="errors.recaptchaError" class="text-danger"></div>
|
|
97
|
+
</template>
|
|
98
|
+
</div>
|
|
99
|
+
<div class="mb-3">
|
|
100
|
+
<button type="submit" class="btn btn-primary">
|
|
101
|
+
Submit Form 1 <img x-show="busy" src="loading.svg">
|
|
102
|
+
</button>
|
|
103
|
+
</div>
|
|
104
|
+
</div>
|
|
105
|
+
</form>
|
|
106
|
+
|
|
107
|
+
<form x-on:submit.prevent="submit" x-data="contactForm02">
|
|
108
|
+
|
|
109
|
+
<template x-if="errors">
|
|
110
|
+
<div x-text="JSON.stringify(errors)" class="text-danger"></div>
|
|
111
|
+
</template>
|
|
112
|
+
|
|
113
|
+
<div>
|
|
114
|
+
<div class="mb-3">
|
|
115
|
+
<div class="form-field">
|
|
116
|
+
<label for="form02-name" class="form-label">Name</label>
|
|
117
|
+
<input type="text" id="form02-name" x-model="fields.name" placeholder="Name" class="form-control">
|
|
118
|
+
</div>
|
|
119
|
+
<template x-if="errors && errors.name">
|
|
120
|
+
<div x-text="errors.name" class="text-danger"></div>
|
|
121
|
+
</template>
|
|
122
|
+
</div>
|
|
123
|
+
<div class="mb-3">
|
|
124
|
+
<div class="form-field">
|
|
125
|
+
<label for="form02-contact_number" class="form-label">Contact Number</label>
|
|
126
|
+
<input type="tel" id="form02-contact_number" x-model="fields.contact_number"
|
|
127
|
+
placeholder="Contact Number" class="form-control">
|
|
128
|
+
|
|
129
|
+
</div>
|
|
130
|
+
<template x-if="errors && errors.contact_number">
|
|
131
|
+
<div x-text="errors.contact_number" class="text-danger"></div>
|
|
132
|
+
</template>
|
|
133
|
+
</div>
|
|
134
|
+
<div class="mb-3">
|
|
135
|
+
<div class="form-field">
|
|
136
|
+
<label for="form02-email" class="form-label">Email</label>
|
|
137
|
+
<input type="email" id="form02-email" x-model="fields.email" placeholder="Email"
|
|
138
|
+
class="form-control">
|
|
139
|
+
</div>
|
|
140
|
+
<template x-if="errors && errors.email">
|
|
141
|
+
<div x-text="errors.email" class="text-danger"></div>
|
|
142
|
+
</template>
|
|
143
|
+
</div>
|
|
144
|
+
<div class="mb-3">
|
|
145
|
+
<div class="form-field">
|
|
146
|
+
<select class="form-select" id="form02-specialist" x-model="fields.specialist">
|
|
147
|
+
<option value="" selected>Preferred Specialist</option>
|
|
148
|
+
<option value="Dr Dennis Koh">Dr Dennis Koh</option>
|
|
149
|
+
<option value="Dr Sharon Koh">Dr Sharon Koh</option>
|
|
150
|
+
<option value="Dr Pauleon Tan">Dr Pauleon Tan</option>
|
|
151
|
+
<option value="No Preference">No Preference</option>
|
|
152
|
+
</select>
|
|
153
|
+
</div>
|
|
154
|
+
<template x-if="errors && errors.specialist">
|
|
155
|
+
<div x-text="errors.specialist" class="text-danger"></div>
|
|
156
|
+
</template>
|
|
157
|
+
</div>
|
|
158
|
+
<div class="mb-3">
|
|
159
|
+
<div class="form-field">
|
|
160
|
+
<label for="form02-message" class="form-label">Message</label>
|
|
161
|
+
<textarea id="form02-message" x-model="fields.message" rows="4" placeholder="Message"
|
|
162
|
+
class="form-control form-textarea"></textarea>
|
|
163
|
+
</div>
|
|
164
|
+
<template x-if="errors && errors.message">
|
|
165
|
+
<div x-text="errors.message" class="text-danger"></div>
|
|
166
|
+
</template>
|
|
167
|
+
</div>
|
|
168
|
+
<div class="mb-3">
|
|
169
|
+
<div id="captcha-02"></div>
|
|
170
|
+
<template x-if="errors && errors.recaptchaError">
|
|
171
|
+
<div x-text="errors.recaptchaError" class="text-danger"></div>
|
|
172
|
+
</template>
|
|
173
|
+
</div>
|
|
174
|
+
<div class="mb-3">
|
|
175
|
+
<button type="submit" class="btn btn-success">
|
|
176
|
+
Submit Form 2 <img x-show="busy" src="loading.svg">
|
|
177
|
+
</button>
|
|
178
|
+
</div>
|
|
179
|
+
</div>
|
|
180
|
+
</form>
|
|
181
|
+
|
|
182
|
+
</div>
|
|
183
|
+
<!-- <script>-->
|
|
184
|
+
<!-- const sharedData = {-->
|
|
185
|
+
<!-- fields: {},-->
|
|
186
|
+
<!-- counter: 0,-->
|
|
187
|
+
<!-- increment() {-->
|
|
188
|
+
<!-- this.counter++;-->
|
|
189
|
+
<!-- },-->
|
|
190
|
+
<!-- decrement() {-->
|
|
191
|
+
<!-- this.counter--;-->
|
|
192
|
+
<!-- }-->
|
|
193
|
+
<!-- };-->
|
|
194
|
+
<!-- </script>-->
|
|
195
|
+
|
|
196
|
+
<!-- <div x-data="(() => ({ ...sharedData }))()">-->
|
|
197
|
+
<!-- <input type="text" x-model="fields.name">-->
|
|
198
|
+
<!-- <p>Value in first instance: <span x-text="fields.name"></span></p>-->
|
|
199
|
+
<!-- <br>-->
|
|
200
|
+
<!-- <input type="text" x-model="fields.email">-->
|
|
201
|
+
<!-- <p>Value in first instance: <span x-text="fields.email"></span></p>-->
|
|
202
|
+
<!-- </div>-->
|
|
203
|
+
|
|
204
|
+
<!-- <div x-data="{ data: { value: 'Second instance' } }">-->
|
|
205
|
+
<!-- <input type="text" x-model="data.value">-->
|
|
206
|
+
<!-- <p>Value in second instance: <span x-text="data.value"></span></p>-->
|
|
207
|
+
<!-- </div>-->
|
|
208
|
+
|
|
209
|
+
|
|
210
|
+
<!-- <script src="https://unpkg.com/hapi-recaptcha-html@latest/dist/hapi.min.js" defer></script>-->
|
|
211
|
+
|
|
212
|
+
<script src="../dist/hapi.min.js" defer></script>
|
|
213
|
+
<script src="enquiry-forms.js" defer></script>
|
|
214
|
+
</div>
|
|
215
|
+
</body>
|
|
216
|
+
</html>
|
package/demo/loading.svg
ADDED
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
<svg viewBox="0 0 38 38" xmlns="http://www.w3.org/2000/svg">
|
|
2
|
+
<defs>
|
|
3
|
+
<linearGradient x1="8.042%" y1="0%" x2="65.682%" y2="23.865%" id="a">
|
|
4
|
+
<stop stop-color="#fff" stop-opacity="0" offset="0%"/>
|
|
5
|
+
<stop stop-color="#fff" stop-opacity=".631" offset="63.146%"/>
|
|
6
|
+
<stop stop-color="#fff" offset="100%"/>
|
|
7
|
+
</linearGradient>
|
|
8
|
+
</defs>
|
|
9
|
+
<g fill="none" fill-rule="evenodd">
|
|
10
|
+
<g transform="translate(1 1)">
|
|
11
|
+
<path d="M36 18c0-9.94-8.06-18-18-18" id="Oval-2" stroke="url(#a)" stroke-width="2">
|
|
12
|
+
<animateTransform
|
|
13
|
+
attributeName="transform"
|
|
14
|
+
type="rotate"
|
|
15
|
+
from="0 18 18"
|
|
16
|
+
to="360 18 18"
|
|
17
|
+
dur="0.9s"
|
|
18
|
+
repeatCount="indefinite"/>
|
|
19
|
+
</path>
|
|
20
|
+
<circle fill="#fff" cx="36" cy="18" r="1">
|
|
21
|
+
<animateTransform
|
|
22
|
+
attributeName="transform"
|
|
23
|
+
type="rotate"
|
|
24
|
+
from="0 18 18"
|
|
25
|
+
to="360 18 18"
|
|
26
|
+
dur="0.9s"
|
|
27
|
+
repeatCount="indefinite"/>
|
|
28
|
+
</circle>
|
|
29
|
+
</g>
|
|
30
|
+
</g>
|
|
31
|
+
</svg>
|
package/dist/hapi.min.js
CHANGED
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
(()=>{function j(e,t){return function(){return e.apply(t,arguments)}}var{toString:ut}=Object.prototype,{getPrototypeOf:fe}=Object,G=(e=>t=>{let r=ut.call(t);return e[r]||(e[r]=r.slice(8,-1).toLowerCase())})(Object.create(null)),R=e=>(e=e.toLowerCase(),t=>G(t)===e),X=e=>t=>typeof t===e,{isArray:U}=Array,k=X("undefined");function ft(e){return e!==null&&!k(e)&&e.constructor!==null&&!k(e.constructor)&&x(e.constructor.isBuffer)&&e.constructor.isBuffer(e)}var Pe=R("ArrayBuffer");function dt(e){let t;return typeof ArrayBuffer<"u"&&ArrayBuffer.isView?t=ArrayBuffer.isView(e):t=e&&e.buffer&&Pe(e.buffer),t}var pt=X("string"),x=X("function"),Fe=X("number"),Y=e=>e!==null&&typeof e=="object",mt=e=>e===!0||e===!1,K=e=>{if(G(e)!=="object")return!1;let t=fe(e);return(t===null||t===Object.prototype||Object.getPrototypeOf(t)===null)&&!(Symbol.toStringTag in e)&&!(Symbol.iterator in e)},ht=R("Date"),yt=R("File"),wt=R("Blob"),Et=R("FileList"),bt=e=>Y(e)&&x(e.pipe),St=e=>{let t;return e&&(typeof FormData=="function"&&e instanceof FormData||x(e.append)&&((t=G(e))==="formdata"||t==="object"&&x(e.toString)&&e.toString()==="[object FormData]"))},xt=R("URLSearchParams"),At=e=>e.trim?e.trim():e.replace(/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,"");function I(e,t,{allOwnKeys:r=!1}={}){if(e===null||typeof e>"u")return;let n,o;if(typeof e!="object"&&(e=[e]),U(e))for(n=0,o=e.length;n<o;n++)t.call(null,e[n],n,e);else{let i=r?Object.getOwnPropertyNames(e):Object.keys(e),s=i.length,c;for(n=0;n<s;n++)c=i[n],t.call(null,e[c],c,e)}}function Ue(e,t){t=t.toLowerCase();let r=Object.keys(e),n=r.length,o;for(;n-- >0;)if(o=r[n],t===o.toLowerCase())return o;return null}var _e=(()=>typeof globalThis<"u"?globalThis:typeof self<"u"?self:typeof window<"u"?window:global)(),De=e=>!k(e)&&e!==_e;function ue(){let{caseless:e}=De(this)&&this||{},t={},r=(n,o)=>{let i=e&&Ue(t,o)||o;K(t[i])&&K(n)?t[i]=ue(t[i],n):K(n)?t[i]=ue({},n):U(n)?t[i]=n.slice():t[i]=n};for(let n=0,o=arguments.length;n<o;n++)arguments[n]&&I(arguments[n],r);return t}var Rt=(e,t,r,{allOwnKeys:n}={})=>(I(t,(o,i)=>{r&&x(o)?e[i]=j(o,r):e[i]=o},{allOwnKeys:n}),e),Ot=e=>(e.charCodeAt(0)===65279&&(e=e.slice(1)),e),gt=(e,t,r,n)=>{e.prototype=Object.create(t.prototype,n),e.prototype.constructor=e,Object.defineProperty(e,"super",{value:t.prototype}),r&&Object.assign(e.prototype,r)},Tt=(e,t,r,n)=>{let o,i,s,c={};if(t=t||{},e==null)return t;do{for(o=Object.getOwnPropertyNames(e),i=o.length;i-- >0;)s=o[i],(!n||n(s,e,t))&&!c[s]&&(t[s]=e[s],c[s]=!0);e=r!==!1&&fe(e)}while(e&&(!r||r(e,t))&&e!==Object.prototype);return t},Ct=(e,t,r)=>{e=String(e),(r===void 0||r>e.length)&&(r=e.length),r-=t.length;let n=e.indexOf(t,r);return n!==-1&&n===r},Nt=e=>{if(!e)return null;if(U(e))return e;let t=e.length;if(!Fe(t))return null;let r=new Array(t);for(;t-- >0;)r[t]=e[t];return r},Pt=(e=>t=>e&&t instanceof e)(typeof Uint8Array<"u"&&fe(Uint8Array)),Ft=(e,t)=>{let n=(e&&e[Symbol.iterator]).call(e),o;for(;(o=n.next())&&!o.done;){let i=o.value;t.call(e,i[0],i[1])}},Ut=(e,t)=>{let r,n=[];for(;(r=e.exec(t))!==null;)n.push(r);return n},_t=R("HTMLFormElement"),Dt=e=>e.toLowerCase().replace(/[-_\s]([a-z\d])(\w*)/g,function(r,n,o){return n.toUpperCase()+o}),Ce=(({hasOwnProperty:e})=>(t,r)=>e.call(t,r))(Object.prototype),Lt=R("RegExp"),Le=(e,t)=>{let r=Object.getOwnPropertyDescriptors(e),n={};I(r,(o,i)=>{t(o,i,e)!==!1&&(n[i]=o)}),Object.defineProperties(e,n)},Bt=e=>{Le(e,(t,r)=>{if(x(e)&&["arguments","caller","callee"].indexOf(r)!==-1)return!1;let n=e[r];if(x(n)){if(t.enumerable=!1,"writable"in t){t.writable=!1;return}t.set||(t.set=()=>{throw Error("Can not rewrite read-only method '"+r+"'")})}})},jt=(e,t)=>{let r={},n=o=>{o.forEach(i=>{r[i]=!0})};return U(e)?n(e):n(String(e).split(t)),r},kt=()=>{},It=(e,t)=>(e=+e,Number.isFinite(e)?e:t),le="abcdefghijklmnopqrstuvwxyz",Ne="0123456789",Be={DIGIT:Ne,ALPHA:le,ALPHA_DIGIT:le+le.toUpperCase()+Ne},Ht=(e=16,t=Be.ALPHA_DIGIT)=>{let r="",{length:n}=t;for(;e--;)r+=t[Math.random()*n|0];return r};function qt(e){return!!(e&&x(e.append)&&e[Symbol.toStringTag]==="FormData"&&e[Symbol.iterator])}var Mt=e=>{let t=new Array(10),r=(n,o)=>{if(Y(n)){if(t.indexOf(n)>=0)return;if(!("toJSON"in n)){t[o]=n;let i=U(n)?[]:{};return I(n,(s,c)=>{let f=r(s,o+1);!k(f)&&(i[c]=f)}),t[o]=void 0,i}}return n};return r(e,0)},Jt=R("AsyncFunction"),zt=e=>e&&(Y(e)||x(e))&&x(e.then)&&x(e.catch),a={isArray:U,isArrayBuffer:Pe,isBuffer:ft,isFormData:St,isArrayBufferView:dt,isString:pt,isNumber:Fe,isBoolean:mt,isObject:Y,isPlainObject:K,isUndefined:k,isDate:ht,isFile:yt,isBlob:wt,isRegExp:Lt,isFunction:x,isStream:bt,isURLSearchParams:xt,isTypedArray:Pt,isFileList:Et,forEach:I,merge:ue,extend:Rt,trim:At,stripBOM:Ot,inherits:gt,toFlatObject:Tt,kindOf:G,kindOfTest:R,endsWith:Ct,toArray:Nt,forEachEntry:Ft,matchAll:Ut,isHTMLForm:_t,hasOwnProperty:Ce,hasOwnProp:Ce,reduceDescriptors:Le,freezeMethods:Bt,toObjectSet:jt,toCamelCase:Dt,noop:kt,toFiniteNumber:It,findKey:Ue,global:_e,isContextDefined:De,ALPHABET:Be,generateString:Ht,isSpecCompliantForm:qt,toJSONObject:Mt,isAsyncFn:Jt,isThenable:zt};function _(e,t,r,n,o){Error.call(this),Error.captureStackTrace?Error.captureStackTrace(this,this.constructor):this.stack=new Error().stack,this.message=e,this.name="AxiosError",t&&(this.code=t),r&&(this.config=r),n&&(this.request=n),o&&(this.response=o)}a.inherits(_,Error,{toJSON:function(){return{message:this.message,name:this.name,description:this.description,number:this.number,fileName:this.fileName,lineNumber:this.lineNumber,columnNumber:this.columnNumber,stack:this.stack,config:a.toJSONObject(this.config),code:this.code,status:this.response&&this.response.status?this.response.status:null}}});var je=_.prototype,ke={};["ERR_BAD_OPTION_VALUE","ERR_BAD_OPTION","ECONNABORTED","ETIMEDOUT","ERR_NETWORK","ERR_FR_TOO_MANY_REDIRECTS","ERR_DEPRECATED","ERR_BAD_RESPONSE","ERR_BAD_REQUEST","ERR_CANCELED","ERR_NOT_SUPPORT","ERR_INVALID_URL"].forEach(e=>{ke[e]={value:e}});Object.defineProperties(_,ke);Object.defineProperty(je,"isAxiosError",{value:!0});_.from=(e,t,r,n,o,i)=>{let s=Object.create(je);return a.toFlatObject(e,s,function(f){return f!==Error.prototype},c=>c!=="isAxiosError"),_.call(s,e.message,t,r,n,o),s.cause=e,s.name=e.name,i&&Object.assign(s,i),s};var m=_;var Q=null;function de(e){return a.isPlainObject(e)||a.isArray(e)}function He(e){return a.endsWith(e,"[]")?e.slice(0,-2):e}function Ie(e,t,r){return e?e.concat(t).map(function(o,i){return o=He(o),!r&&i?"["+o+"]":o}).join(r?".":""):t}function vt(e){return a.isArray(e)&&!e.some(de)}var Vt=a.toFlatObject(a,{},null,function(t){return/^is[A-Z]/.test(t)});function $t(e,t,r){if(!a.isObject(e))throw new TypeError("target must be an object");t=t||new(Q||FormData),r=a.toFlatObject(r,{metaTokens:!0,dots:!1,indexes:!1},!1,function(h,g){return!a.isUndefined(g[h])});let n=r.metaTokens,o=r.visitor||u,i=r.dots,s=r.indexes,f=(r.Blob||typeof Blob<"u"&&Blob)&&a.isSpecCompliantForm(t);if(!a.isFunction(o))throw new TypeError("visitor must be a function");function l(d){if(d===null)return"";if(a.isDate(d))return d.toISOString();if(!f&&a.isBlob(d))throw new m("Blob is not supported. Use a Buffer instead.");return a.isArrayBuffer(d)||a.isTypedArray(d)?f&&typeof Blob=="function"?new Blob([d]):Buffer.from(d):d}function u(d,h,g){let A=d;if(d&&!g&&typeof d=="object"){if(a.endsWith(h,"{}"))h=n?h:h.slice(0,-2),d=JSON.stringify(d);else if(a.isArray(d)&&vt(d)||(a.isFileList(d)||a.endsWith(h,"[]"))&&(A=a.toArray(d)))return h=He(h),A.forEach(function(W,lt){!(a.isUndefined(W)||W===null)&&t.append(s===!0?Ie([h],lt,i):s===null?h:h+"[]",l(W))}),!1}return de(d)?!0:(t.append(Ie(g,h,i),l(d)),!1)}let p=[],E=Object.assign(Vt,{defaultVisitor:u,convertValue:l,isVisitable:de});function y(d,h){if(!a.isUndefined(d)){if(p.indexOf(d)!==-1)throw Error("Circular reference detected in "+h.join("."));p.push(d),a.forEach(d,function(A,F){(!(a.isUndefined(A)||A===null)&&o.call(t,A,a.isString(F)?F.trim():F,h,E))===!0&&y(A,h?h.concat(F):[F])}),p.pop()}}if(!a.isObject(e))throw new TypeError("data must be an object");return y(e),t}var C=$t;function qe(e){let t={"!":"%21","'":"%27","(":"%28",")":"%29","~":"%7E","%20":"+","%00":"\0"};return encodeURIComponent(e).replace(/[!'()~]|%20|%00/g,function(n){return t[n]})}function Me(e,t){this._pairs=[],e&&C(e,this,t)}var Je=Me.prototype;Je.append=function(t,r){this._pairs.push([t,r])};Je.toString=function(t){let r=t?function(n){return t.call(this,n,qe)}:qe;return this._pairs.map(function(o){return r(o[0])+"="+r(o[1])},"").join("&")};var Z=Me;function Wt(e){return encodeURIComponent(e).replace(/%3A/gi,":").replace(/%24/g,"$").replace(/%2C/gi,",").replace(/%20/g,"+").replace(/%5B/gi,"[").replace(/%5D/gi,"]")}function H(e,t,r){if(!t)return e;let n=r&&r.encode||Wt,o=r&&r.serialize,i;if(o?i=o(t,r):i=a.isURLSearchParams(t)?t.toString():new Z(t,r).toString(n),i){let s=e.indexOf("#");s!==-1&&(e=e.slice(0,s)),e+=(e.indexOf("?")===-1?"?":"&")+i}return e}var pe=class{constructor(){this.handlers=[]}use(t,r,n){return this.handlers.push({fulfilled:t,rejected:r,synchronous:n?n.synchronous:!1,runWhen:n?n.runWhen:null}),this.handlers.length-1}eject(t){this.handlers[t]&&(this.handlers[t]=null)}clear(){this.handlers&&(this.handlers=[])}forEach(t){a.forEach(this.handlers,function(n){n!==null&&t(n)})}},me=pe;var ee={silentJSONParsing:!0,forcedJSONParsing:!0,clarifyTimeoutError:!1};var ze=typeof URLSearchParams<"u"?URLSearchParams:Z;var ve=typeof FormData<"u"?FormData:null;var Ve=typeof Blob<"u"?Blob:null;var Kt=(()=>{let e;return typeof navigator<"u"&&((e=navigator.product)==="ReactNative"||e==="NativeScript"||e==="NS")?!1:typeof window<"u"&&typeof document<"u"})(),Gt=(()=>typeof WorkerGlobalScope<"u"&&self instanceof WorkerGlobalScope&&typeof self.importScripts=="function")(),b={isBrowser:!0,classes:{URLSearchParams:ze,FormData:ve,Blob:Ve},isStandardBrowserEnv:Kt,isStandardBrowserWebWorkerEnv:Gt,protocols:["http","https","file","blob","url","data"]};function he(e,t){return C(e,new b.classes.URLSearchParams,Object.assign({visitor:function(r,n,o,i){return b.isNode&&a.isBuffer(r)?(this.append(n,r.toString("base64")),!1):i.defaultVisitor.apply(this,arguments)}},t))}function Xt(e){return a.matchAll(/\w+|\[(\w*)]/g,e).map(t=>t[0]==="[]"?"":t[1]||t[0])}function Yt(e){let t={},r=Object.keys(e),n,o=r.length,i;for(n=0;n<o;n++)i=r[n],t[i]=e[i];return t}function Qt(e){function t(r,n,o,i){let s=r[i++],c=Number.isFinite(+s),f=i>=r.length;return s=!s&&a.isArray(o)?o.length:s,f?(a.hasOwnProp(o,s)?o[s]=[o[s],n]:o[s]=n,!c):((!o[s]||!a.isObject(o[s]))&&(o[s]=[]),t(r,n,o[s],i)&&a.isArray(o[s])&&(o[s]=Yt(o[s])),!c)}if(a.isFormData(e)&&a.isFunction(e.entries)){let r={};return a.forEachEntry(e,(n,o)=>{t(Xt(n),o,r,0)}),r}return null}var te=Qt;var Zt={"Content-Type":void 0};function er(e,t,r){if(a.isString(e))try{return(t||JSON.parse)(e),a.trim(e)}catch(n){if(n.name!=="SyntaxError")throw n}return(r||JSON.stringify)(e)}var re={transitional:ee,adapter:["xhr","http"],transformRequest:[function(t,r){let n=r.getContentType()||"",o=n.indexOf("application/json")>-1,i=a.isObject(t);if(i&&a.isHTMLForm(t)&&(t=new FormData(t)),a.isFormData(t))return o&&o?JSON.stringify(te(t)):t;if(a.isArrayBuffer(t)||a.isBuffer(t)||a.isStream(t)||a.isFile(t)||a.isBlob(t))return t;if(a.isArrayBufferView(t))return t.buffer;if(a.isURLSearchParams(t))return r.setContentType("application/x-www-form-urlencoded;charset=utf-8",!1),t.toString();let c;if(i){if(n.indexOf("application/x-www-form-urlencoded")>-1)return he(t,this.formSerializer).toString();if((c=a.isFileList(t))||n.indexOf("multipart/form-data")>-1){let f=this.env&&this.env.FormData;return C(c?{"files[]":t}:t,f&&new f,this.formSerializer)}}return i||o?(r.setContentType("application/json",!1),er(t)):t}],transformResponse:[function(t){let r=this.transitional||re.transitional,n=r&&r.forcedJSONParsing,o=this.responseType==="json";if(t&&a.isString(t)&&(n&&!this.responseType||o)){let s=!(r&&r.silentJSONParsing)&&o;try{return JSON.parse(t)}catch(c){if(s)throw c.name==="SyntaxError"?m.from(c,m.ERR_BAD_RESPONSE,this,null,this.response):c}}return t}],timeout:0,xsrfCookieName:"XSRF-TOKEN",xsrfHeaderName:"X-XSRF-TOKEN",maxContentLength:-1,maxBodyLength:-1,env:{FormData:b.classes.FormData,Blob:b.classes.Blob},validateStatus:function(t){return t>=200&&t<300},headers:{common:{Accept:"application/json, text/plain, */*"}}};a.forEach(["delete","get","head"],function(t){re.headers[t]={}});a.forEach(["post","put","patch"],function(t){re.headers[t]=a.merge(Zt)});var D=re;var tr=a.toObjectSet(["age","authorization","content-length","content-type","etag","expires","from","host","if-modified-since","if-unmodified-since","last-modified","location","max-forwards","proxy-authorization","referer","retry-after","user-agent"]),$e=e=>{let t={},r,n,o;return e&&e.split(`
|
|
2
|
-
`).forEach(function(s){o=s.indexOf(":"),r=s.substring(0,o).trim().toLowerCase(),n=s.substring(o+1).trim(),!(!r||t[r]&&
|
|
3
|
-
`)}get[Symbol.toStringTag](){return"AxiosHeaders"}static from(t){return t instanceof this?t:new this(t)}static concat(t,...r){let n=new this(t);return r.forEach(o=>n.set(o)),n}static accessor(t){let n=(this[We]=this[We]={accessors:{}}).accessors,o=this.prototype;function i(s){let c=q(s);n[c]||(sr(o,s),n[c]=!0)}return a.isArray(t)?t.forEach(i):i(t),this}};L.accessor(["Content-Type","Content-Length","Accept","Accept-Encoding","User-Agent","Authorization"]);a.freezeMethods(L.prototype);a.freezeMethods(L);var S=L;function M(e,t){let r=this||D,n=t||r,o=S.from(n.headers),i=n.data;return a.forEach(e,function(c){i=c.call(r,i,o.normalize(),t?t.status:void 0)}),o.normalize(),i}function J(e){return!!(e&&e.__CANCEL__)}function Ke(e,t,r){m.call(this,e??"canceled",m.ERR_CANCELED,t,r),this.name="CanceledError"}a.inherits(Ke,m,{__CANCEL__:!0});var N=Ke;function we(e,t,r){let n=r.config.validateStatus;!r.status||!n||n(r.status)?e(r):t(new m("Request failed with status code "+r.status,[m.ERR_BAD_REQUEST,m.ERR_BAD_RESPONSE][Math.floor(r.status/100)-4],r.config,r.request,r))}var Ge=b.isStandardBrowserEnv?function(){return{write:function(r,n,o,i,s,c){let f=[];f.push(r+"="+encodeURIComponent(n)),a.isNumber(o)&&f.push("expires="+new Date(o).toGMTString()),a.isString(i)&&f.push("path="+i),a.isString(s)&&f.push("domain="+s),c===!0&&f.push("secure"),document.cookie=f.join("; ")},read:function(r){let n=document.cookie.match(new RegExp("(^|;\\s*)("+r+")=([^;]*)"));return n?decodeURIComponent(n[3]):null},remove:function(r){this.write(r,"",Date.now()-864e5)}}}():function(){return{write:function(){},read:function(){return null},remove:function(){}}}();function Ee(e){return/^([a-z][a-z\d+\-.]*:)?\/\//i.test(e)}function be(e,t){return t?e.replace(/\/+$/,"")+"/"+t.replace(/^\/+/,""):e}function z(e,t){return e&&!Ee(t)?be(e,t):t}var Xe=b.isStandardBrowserEnv?function(){let t=/(msie|trident)/i.test(navigator.userAgent),r=document.createElement("a"),n;function o(i){let s=i;return t&&(r.setAttribute("href",s),s=r.href),r.setAttribute("href",s),{href:r.href,protocol:r.protocol?r.protocol.replace(/:$/,""):"",host:r.host,search:r.search?r.search.replace(/^\?/,""):"",hash:r.hash?r.hash.replace(/^#/,""):"",hostname:r.hostname,port:r.port,pathname:r.pathname.charAt(0)==="/"?r.pathname:"/"+r.pathname}}return n=o(window.location.href),function(s){let c=a.isString(s)?o(s):s;return c.protocol===n.protocol&&c.host===n.host}}():function(){return function(){return!0}}();function Se(e){let t=/^([-+\w]{1,25})(:?\/\/|:)/.exec(e);return t&&t[1]||""}function ir(e,t){e=e||10;let r=new Array(e),n=new Array(e),o=0,i=0,s;return t=t!==void 0?t:1e3,function(f){let l=Date.now(),u=n[i];s||(s=l),r[o]=f,n[o]=l;let p=i,E=0;for(;p!==o;)E+=r[p++],p=p%e;if(o=(o+1)%e,o===i&&(i=(i+1)%e),l-s<t)return;let y=u&&l-u;return y?Math.round(E*1e3/y):void 0}}var Ye=ir;function Qe(e,t){let r=0,n=Ye(50,250);return o=>{let i=o.loaded,s=o.lengthComputable?o.total:void 0,c=i-r,f=n(c),l=i<=s;r=i;let u={loaded:i,total:s,progress:s?i/s:void 0,bytes:c,rate:f||void 0,estimated:f&&s&&l?(s-i)/f:void 0,event:o};u[t?"download":"upload"]=!0,e(u)}}var ar=typeof XMLHttpRequest<"u",Ze=ar&&function(e){return new Promise(function(r,n){let o=e.data,i=S.from(e.headers).normalize(),s=e.responseType,c;function f(){e.cancelToken&&e.cancelToken.unsubscribe(c),e.signal&&e.signal.removeEventListener("abort",c)}a.isFormData(o)&&(b.isStandardBrowserEnv||b.isStandardBrowserWebWorkerEnv?i.setContentType(!1):i.setContentType("multipart/form-data;",!1));let l=new XMLHttpRequest;if(e.auth){let y=e.auth.username||"",d=e.auth.password?unescape(encodeURIComponent(e.auth.password)):"";i.set("Authorization","Basic "+btoa(y+":"+d))}let u=z(e.baseURL,e.url);l.open(e.method.toUpperCase(),H(u,e.params,e.paramsSerializer),!0),l.timeout=e.timeout;function p(){if(!l)return;let y=S.from("getAllResponseHeaders"in l&&l.getAllResponseHeaders()),h={data:!s||s==="text"||s==="json"?l.responseText:l.response,status:l.status,statusText:l.statusText,headers:y,config:e,request:l};we(function(A){r(A),f()},function(A){n(A),f()},h),l=null}if("onloadend"in l?l.onloadend=p:l.onreadystatechange=function(){!l||l.readyState!==4||l.status===0&&!(l.responseURL&&l.responseURL.indexOf("file:")===0)||setTimeout(p)},l.onabort=function(){l&&(n(new m("Request aborted",m.ECONNABORTED,e,l)),l=null)},l.onerror=function(){n(new m("Network Error",m.ERR_NETWORK,e,l)),l=null},l.ontimeout=function(){let d=e.timeout?"timeout of "+e.timeout+"ms exceeded":"timeout exceeded",h=e.transitional||ee;e.timeoutErrorMessage&&(d=e.timeoutErrorMessage),n(new m(d,h.clarifyTimeoutError?m.ETIMEDOUT:m.ECONNABORTED,e,l)),l=null},b.isStandardBrowserEnv){let y=(e.withCredentials||Xe(u))&&e.xsrfCookieName&&Ge.read(e.xsrfCookieName);y&&i.set(e.xsrfHeaderName,y)}o===void 0&&i.setContentType(null),"setRequestHeader"in l&&a.forEach(i.toJSON(),function(d,h){l.setRequestHeader(h,d)}),a.isUndefined(e.withCredentials)||(l.withCredentials=!!e.withCredentials),s&&s!=="json"&&(l.responseType=e.responseType),typeof e.onDownloadProgress=="function"&&l.addEventListener("progress",Qe(e.onDownloadProgress,!0)),typeof e.onUploadProgress=="function"&&l.upload&&l.upload.addEventListener("progress",Qe(e.onUploadProgress)),(e.cancelToken||e.signal)&&(c=y=>{l&&(n(!y||y.type?new N(null,e,l):y),l.abort(),l=null)},e.cancelToken&&e.cancelToken.subscribe(c),e.signal&&(e.signal.aborted?c():e.signal.addEventListener("abort",c)));let E=Se(u);if(E&&b.protocols.indexOf(E)===-1){n(new m("Unsupported protocol "+E+":",m.ERR_BAD_REQUEST,e));return}l.send(o||null)})};var oe={http:Q,xhr:Ze};a.forEach(oe,(e,t)=>{if(e){try{Object.defineProperty(e,"name",{value:t})}catch{}Object.defineProperty(e,"adapterName",{value:t})}});var et={getAdapter:e=>{e=a.isArray(e)?e:[e];let{length:t}=e,r,n;for(let o=0;o<t&&(r=e[o],!(n=a.isString(r)?oe[r.toLowerCase()]:r));o++);if(!n)throw n===!1?new m(`Adapter ${r} is not supported by the environment`,"ERR_NOT_SUPPORT"):new Error(a.hasOwnProp(oe,r)?`Adapter '${r}' is not available in the build`:`Unknown adapter '${r}'`);if(!a.isFunction(n))throw new TypeError("adapter is not a function");return n},adapters:oe};function xe(e){if(e.cancelToken&&e.cancelToken.throwIfRequested(),e.signal&&e.signal.aborted)throw new N(null,e)}function se(e){return xe(e),e.headers=S.from(e.headers),e.data=M.call(e,e.transformRequest),["post","put","patch"].indexOf(e.method)!==-1&&e.headers.setContentType("application/x-www-form-urlencoded",!1),et.getAdapter(e.adapter||D.adapter)(e).then(function(n){return xe(e),n.data=M.call(e,e.transformResponse,n),n.headers=S.from(n.headers),n},function(n){return J(n)||(xe(e),n&&n.response&&(n.response.data=M.call(e,e.transformResponse,n.response),n.response.headers=S.from(n.response.headers))),Promise.reject(n)})}var tt=e=>e instanceof S?e.toJSON():e;function T(e,t){t=t||{};let r={};function n(l,u,p){return a.isPlainObject(l)&&a.isPlainObject(u)?a.merge.call({caseless:p},l,u):a.isPlainObject(u)?a.merge({},u):a.isArray(u)?u.slice():u}function o(l,u,p){if(a.isUndefined(u)){if(!a.isUndefined(l))return n(void 0,l,p)}else return n(l,u,p)}function i(l,u){if(!a.isUndefined(u))return n(void 0,u)}function s(l,u){if(a.isUndefined(u)){if(!a.isUndefined(l))return n(void 0,l)}else return n(void 0,u)}function c(l,u,p){if(p in t)return n(l,u);if(p in e)return n(void 0,l)}let f={url:i,method:i,data:i,baseURL:s,transformRequest:s,transformResponse:s,paramsSerializer:s,timeout:s,timeoutMessage:s,withCredentials:s,adapter:s,responseType:s,xsrfCookieName:s,xsrfHeaderName:s,onUploadProgress:s,onDownloadProgress:s,decompress:s,maxContentLength:s,maxBodyLength:s,beforeRedirect:s,transport:s,httpAgent:s,httpsAgent:s,cancelToken:s,socketPath:s,responseEncoding:s,validateStatus:c,headers:(l,u)=>o(tt(l),tt(u),!0)};return a.forEach(Object.keys(Object.assign({},e,t)),function(u){let p=f[u]||o,E=p(e[u],t[u],u);a.isUndefined(E)&&p!==c||(r[u]=E)}),r}var ie="1.4.0";var Ae={};["object","boolean","number","function","string","symbol"].forEach((e,t)=>{Ae[e]=function(n){return typeof n===e||"a"+(t<1?"n ":" ")+e}});var rt={};Ae.transitional=function(t,r,n){function o(i,s){return"[Axios v"+ie+"] Transitional option '"+i+"'"+s+(n?". "+n:"")}return(i,s,c)=>{if(t===!1)throw new m(o(s," has been removed"+(r?" in "+r:"")),m.ERR_DEPRECATED);return r&&!rt[s]&&(rt[s]=!0,console.warn(o(s," has been deprecated since v"+r+" and will be removed in the near future"))),t?t(i,s,c):!0}};function cr(e,t,r){if(typeof e!="object")throw new m("options must be an object",m.ERR_BAD_OPTION_VALUE);let n=Object.keys(e),o=n.length;for(;o-- >0;){let i=n[o],s=t[i];if(s){let c=e[i],f=c===void 0||s(c,i,e);if(f!==!0)throw new m("option "+i+" must be "+f,m.ERR_BAD_OPTION_VALUE);continue}if(r!==!0)throw new m("Unknown option "+i,m.ERR_BAD_OPTION)}}var ae={assertOptions:cr,validators:Ae};var P=ae.validators,B=class{constructor(t){this.defaults=t,this.interceptors={request:new me,response:new me}}request(t,r){typeof t=="string"?(r=r||{},r.url=t):r=t||{},r=T(this.defaults,r);let{transitional:n,paramsSerializer:o,headers:i}=r;n!==void 0&&ae.assertOptions(n,{silentJSONParsing:P.transitional(P.boolean),forcedJSONParsing:P.transitional(P.boolean),clarifyTimeoutError:P.transitional(P.boolean)},!1),o!=null&&(a.isFunction(o)?r.paramsSerializer={serialize:o}:ae.assertOptions(o,{encode:P.function,serialize:P.function},!0)),r.method=(r.method||this.defaults.method||"get").toLowerCase();let s;s=i&&a.merge(i.common,i[r.method]),s&&a.forEach(["delete","get","head","post","put","patch","common"],d=>{delete i[d]}),r.headers=S.concat(s,i);let c=[],f=!0;this.interceptors.request.forEach(function(h){typeof h.runWhen=="function"&&h.runWhen(r)===!1||(f=f&&h.synchronous,c.unshift(h.fulfilled,h.rejected))});let l=[];this.interceptors.response.forEach(function(h){l.push(h.fulfilled,h.rejected)});let u,p=0,E;if(!f){let d=[se.bind(this),void 0];for(d.unshift.apply(d,c),d.push.apply(d,l),E=d.length,u=Promise.resolve(r);p<E;)u=u.then(d[p++],d[p++]);return u}E=c.length;let y=r;for(p=0;p<E;){let d=c[p++],h=c[p++];try{y=d(y)}catch(g){h.call(this,g);break}}try{u=se.call(this,y)}catch(d){return Promise.reject(d)}for(p=0,E=l.length;p<E;)u=u.then(l[p++],l[p++]);return u}getUri(t){t=T(this.defaults,t);let r=z(t.baseURL,t.url);return H(r,t.params,t.paramsSerializer)}};a.forEach(["delete","get","head","options"],function(t){B.prototype[t]=function(r,n){return this.request(T(n||{},{method:t,url:r,data:(n||{}).data}))}});a.forEach(["post","put","patch"],function(t){function r(n){return function(i,s,c){return this.request(T(c||{},{method:t,headers:n?{"Content-Type":"multipart/form-data"}:{},url:i,data:s}))}}B.prototype[t]=r(),B.prototype[t+"Form"]=r(!0)});var v=B;var V=class{constructor(t){if(typeof t!="function")throw new TypeError("executor must be a function.");let r;this.promise=new Promise(function(i){r=i});let n=this;this.promise.then(o=>{if(!n._listeners)return;let i=n._listeners.length;for(;i-- >0;)n._listeners[i](o);n._listeners=null}),this.promise.then=o=>{let i,s=new Promise(c=>{n.subscribe(c),i=c}).then(o);return s.cancel=function(){n.unsubscribe(i)},s},t(function(i,s,c){n.reason||(n.reason=new N(i,s,c),r(n.reason))})}throwIfRequested(){if(this.reason)throw this.reason}subscribe(t){if(this.reason){t(this.reason);return}this._listeners?this._listeners.push(t):this._listeners=[t]}unsubscribe(t){if(!this._listeners)return;let r=this._listeners.indexOf(t);r!==-1&&this._listeners.splice(r,1)}static source(){let t;return{token:new V(function(o){t=o}),cancel:t}}},nt=V;function Re(e){return function(r){return e.apply(null,r)}}function Oe(e){return a.isObject(e)&&e.isAxiosError===!0}var ge={Continue:100,SwitchingProtocols:101,Processing:102,EarlyHints:103,Ok:200,Created:201,Accepted:202,NonAuthoritativeInformation:203,NoContent:204,ResetContent:205,PartialContent:206,MultiStatus:207,AlreadyReported:208,ImUsed:226,MultipleChoices:300,MovedPermanently:301,Found:302,SeeOther:303,NotModified:304,UseProxy:305,Unused:306,TemporaryRedirect:307,PermanentRedirect:308,BadRequest:400,Unauthorized:401,PaymentRequired:402,Forbidden:403,NotFound:404,MethodNotAllowed:405,NotAcceptable:406,ProxyAuthenticationRequired:407,RequestTimeout:408,Conflict:409,Gone:410,LengthRequired:411,PreconditionFailed:412,PayloadTooLarge:413,UriTooLong:414,UnsupportedMediaType:415,RangeNotSatisfiable:416,ExpectationFailed:417,ImATeapot:418,MisdirectedRequest:421,UnprocessableEntity:422,Locked:423,FailedDependency:424,TooEarly:425,UpgradeRequired:426,PreconditionRequired:428,TooManyRequests:429,RequestHeaderFieldsTooLarge:431,UnavailableForLegalReasons:451,InternalServerError:500,NotImplemented:501,BadGateway:502,ServiceUnavailable:503,GatewayTimeout:504,HttpVersionNotSupported:505,VariantAlsoNegotiates:506,InsufficientStorage:507,LoopDetected:508,NotExtended:510,NetworkAuthenticationRequired:511};Object.entries(ge).forEach(([e,t])=>{ge[t]=e});var ot=ge;function st(e){let t=new v(e),r=j(v.prototype.request,t);return a.extend(r,v.prototype,t,{allOwnKeys:!0}),a.extend(r,t,null,{allOwnKeys:!0}),r.create=function(o){return st(T(e,o))},r}var w=st(D);w.Axios=v;w.CanceledError=N;w.CancelToken=nt;w.isCancel=J;w.VERSION=ie;w.toFormData=C;w.AxiosError=m;w.Cancel=w.CanceledError;w.all=function(t){return Promise.all(t)};w.spread=Re;w.isAxiosError=Oe;w.mergeConfig=T;w.AxiosHeaders=S;w.formToJSON=e=>te(a.isHTMLForm(e)?new FormData(e):e);w.HttpStatusCode=ot;w.default=w;var ce=w;var{Axios:Wo,AxiosError:Ko,CanceledError:Go,isCancel:Xo,CancelToken:Yo,VERSION:Qo,all:Zo,Cancel:es,isAxiosError:ts,spread:rs,toFormData:ns,AxiosHeaders:os,HttpStatusCode:ss,formToJSON:is,mergeConfig:as}=ce;var $=class{constructor({theme:t="light",render_element_or_id:r="recaptcha-el"}){this.gl_api_url="https://www.google.com/recaptcha/api.js?onload=onloadCallback&render=explicit",this.captcha_sitekey="6LeRUzsjAAAAANUHNEY6VkUXmMo_wlrDK5SUoFUV",this.verify_url="https://internalapi.activamedia.com.sg/v1/recaptcha/verify",this.theme=t,this.render_element_or_id=r,this.defineOnloadCallBack(),this.loadJsFile()}defineOnloadCallBack(){window.onloadCallback=()=>{console.log("api loaded")}}loadJsFile(){if(document.querySelectorAll(`script[src="${this.gl_api_url}"]`).length===0){var t=document.createElement("script");t.setAttribute("src",this.gl_api_url),t.setAttribute("type","text/javascript"),t.setAttribute("async",!0),t.setAttribute("defer",!0),document.body.appendChild(t)}}sleep(t){return new Promise(r=>setTimeout(r,t))}async render(){let t="";for(;;){if(await this.sleep(200),typeof grecaptcha<"u"&&grecaptcha!==void 0&&typeof grecaptcha.render=="function"){t=grecaptcha.render(this.render_element_or_id,{sitekey:this.captcha_sitekey,theme:this.theme});break}console.info("checking grecaptcha undefined")}return t}reset(t){grecaptcha.reset(t)}fetchResponse(t){try{return grecaptcha.getResponse(t)}catch(r){console.error(r)}}async verifyRecaptcha(t){return await fetch(this.verify_url,{method:"post",body:JSON.stringify({token:t}),headers:{Accept:"application/json","Content-Type":"application/json"}}).then(r=>r.json())}};var O={config:{},fields:{},name:null,endpoint:null,redirectTo:null,fileUpload:{filepond:null,el:null},onSuccess(e){},onFailed(e){},amCaptcha:Object,captchaId:null,recaptchaTheme:"light",widgetId:null};async function it(e){let t=Object.assign({},O,e);await lr(t)}async function lr(e){document.addEventListener("alpine:init",()=>{if(Alpine.data(e.name,()=>({...e,errors:{},busy:!1,async init(){if(this.$watch("busy",t=>{let r=document.querySelectorAll('form button, form input[type="submit"], form input[type="button"]');t?r.forEach(n=>{n.disabled=!0}):r.forEach(n=>{n.disabled=!1})}),this.$init&&this.$init(),this.captchaId){let t=document.getElementById(this.captchaId);if(t)this.amCaptcha=new $({theme:this.recaptchaTheme,render_element_or_id:t}),this.widgetId=await this.amCaptcha.render();else throw"Can't find recaptcha rendering element."}},submit(){this.busy=!0,this.errors={};let t=new FormData;if(Object.keys(this.fields).forEach((s,c)=>{typeof this.fields[s]=="object"?this.fields[s].forEach((f,l)=>{t.append(`${s}[${l}]`,f)}):t.append(s,this.fields[s])}),e.fileUpload.filepond)e.fileUpload.filepond.getFiles().forEach((s,c)=>{t.append(`files[${c}]`,s.file,s.name)});else if(e.fileUpload.el){let c=document.querySelector(e.fileUpload.el).files;for(let f=0;f<c.length;f++)t.append(`files[${f}]`,c[f],c[f].name)}let n=new URL(window.top.location.href);t.append("x_origin",n.origin+n.pathname);let o={method:"POST",url:yr(e.endpoint),data:t},i=Object.assign({},o,e.config);this.captchaId&&ur(this.amCaptcha).then(()=>{ce(i).then(s=>{e.redirectTo&&(window.location.href=e.redirectTo),e.fileUpload.filepond&&e.fileUpload.filepond.removeFiles(),fr(),this.resetFields(),e.onSuccess(s),mr()}).catch(s=>{this.errors=s.response.data.errors,this.busy=!1,e.onFailed(s.response),hr(),this.captchaId&&this.amCaptcha.reset(this.widgetId)})}).catch(s=>{this.errors=s,e.onFailed(s),this.busy=!1}).finally(()=>{this.amCaptcha.reset(this.widgetId)})},resetFields(){this.errors={},this.fields=e.fields,this.busy=!1,this.captchaId&&this.amCaptcha.reset(this.widgetId)}})),O.redirectTo&&O.endpoint&&new URL(O.endpoint).host==="hapiform.sg"&&console.log("\u{1F680} "+window.location.origin+O.redirectTo),O.endpoint){let t=new URL(O.endpoint),r=O.endpoint.match(/[0-9a-f]{8}-[0-9a-f]{4}-4[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}/);t.host==="hapiform.sg"&&console.log(`\u{1F680} ${t.origin}/${r}`)}})}async function ur(e){let t=e.fetchResponse(this.widgetId);if(t.length===0)throw{recaptchaError:"You can't leave Captcha Code empty"};return await e.verifyRecaptcha(t).then(r=>{if(r.success===!1)throw{recaptchaError:"captcha invalid: timeout or duplicate."}})}function fr(){dr(),pr()}function dr(){try{O.fileUpload.filepond.removeFiles()}catch{}}function pr(){try{let e=document.querySelector(O.fileUpload.el);e.value=""}catch{}}function mr(){at("hapi:success")}function hr(){at("hapi:error")}function at(e){let t=new Event(e);document.dispatchEvent(t)}function yr(e){let t=new URL(e);return(window.location.hostname==="localhost"||window.location.hostname==="127.0.0.1")&&(t.searchParams.set("test","1"),console.log("testing mode!")),t.href}function Te(){if(document.querySelectorAll('script[src="//unpkg.com/alpinejs"]').length===0){var e=document.createElement("script");e.setAttribute("src","//unpkg.com/alpinejs"),e.setAttribute("type","text/javascript"),e.setAttribute("defer",!0),document.body.appendChild(e)}}var ct={form:it},hs=ct;window.Hapi=ct;Te();})();
|
|
1
|
+
(()=>{function B(e,t){return function(){return e.apply(t,arguments)}}var{toString:ft}=Object.prototype,{getPrototypeOf:ue}=Object,K=(e=>t=>{let r=ft.call(t);return e[r]||(e[r]=r.slice(8,-1).toLowerCase())})(Object.create(null)),R=e=>(e=e.toLowerCase(),t=>K(t)===e),G=e=>t=>typeof t===e,{isArray:P}=Array,j=G("undefined");function dt(e){return e!==null&&!j(e)&&e.constructor!==null&&!j(e.constructor)&&x(e.constructor.isBuffer)&&e.constructor.isBuffer(e)}var Fe=R("ArrayBuffer");function pt(e){let t;return typeof ArrayBuffer<"u"&&ArrayBuffer.isView?t=ArrayBuffer.isView(e):t=e&&e.buffer&&Fe(e.buffer),t}var mt=G("string"),x=G("function"),Pe=G("number"),X=e=>e!==null&&typeof e=="object",ht=e=>e===!0||e===!1,W=e=>{if(K(e)!=="object")return!1;let t=ue(e);return(t===null||t===Object.prototype||Object.getPrototypeOf(t)===null)&&!(Symbol.toStringTag in e)&&!(Symbol.iterator in e)},yt=R("Date"),Et=R("File"),wt=R("Blob"),bt=R("FileList"),St=e=>X(e)&&x(e.pipe),xt=e=>{let t;return e&&(typeof FormData=="function"&&e instanceof FormData||x(e.append)&&((t=K(e))==="formdata"||t==="object"&&x(e.toString)&&e.toString()==="[object FormData]"))},At=R("URLSearchParams"),Rt=e=>e.trim?e.trim():e.replace(/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,"");function k(e,t,{allOwnKeys:r=!1}={}){if(e===null||typeof e>"u")return;let n,o;if(typeof e!="object"&&(e=[e]),P(e))for(n=0,o=e.length;n<o;n++)t.call(null,e[n],n,e);else{let i=r?Object.getOwnPropertyNames(e):Object.keys(e),s=i.length,c;for(n=0;n<s;n++)c=i[n],t.call(null,e[c],c,e)}}function Ue(e,t){t=t.toLowerCase();let r=Object.keys(e),n=r.length,o;for(;n-- >0;)if(o=r[n],t===o.toLowerCase())return o;return null}var _e=(()=>typeof globalThis<"u"?globalThis:typeof self<"u"?self:typeof window<"u"?window:global)(),De=e=>!j(e)&&e!==_e;function le(){let{caseless:e}=De(this)&&this||{},t={},r=(n,o)=>{let i=e&&Ue(t,o)||o;W(t[i])&&W(n)?t[i]=le(t[i],n):W(n)?t[i]=le({},n):P(n)?t[i]=n.slice():t[i]=n};for(let n=0,o=arguments.length;n<o;n++)arguments[n]&&k(arguments[n],r);return t}var Ot=(e,t,r,{allOwnKeys:n}={})=>(k(t,(o,i)=>{r&&x(o)?e[i]=B(o,r):e[i]=o},{allOwnKeys:n}),e),gt=e=>(e.charCodeAt(0)===65279&&(e=e.slice(1)),e),Tt=(e,t,r,n)=>{e.prototype=Object.create(t.prototype,n),e.prototype.constructor=e,Object.defineProperty(e,"super",{value:t.prototype}),r&&Object.assign(e.prototype,r)},Ct=(e,t,r,n)=>{let o,i,s,c={};if(t=t||{},e==null)return t;do{for(o=Object.getOwnPropertyNames(e),i=o.length;i-- >0;)s=o[i],(!n||n(s,e,t))&&!c[s]&&(t[s]=e[s],c[s]=!0);e=r!==!1&&ue(e)}while(e&&(!r||r(e,t))&&e!==Object.prototype);return t},Nt=(e,t,r)=>{e=String(e),(r===void 0||r>e.length)&&(r=e.length),r-=t.length;let n=e.indexOf(t,r);return n!==-1&&n===r},Ft=e=>{if(!e)return null;if(P(e))return e;let t=e.length;if(!Pe(t))return null;let r=new Array(t);for(;t-- >0;)r[t]=e[t];return r},Pt=(e=>t=>e&&t instanceof e)(typeof Uint8Array<"u"&&ue(Uint8Array)),Ut=(e,t)=>{let n=(e&&e[Symbol.iterator]).call(e),o;for(;(o=n.next())&&!o.done;){let i=o.value;t.call(e,i[0],i[1])}},_t=(e,t)=>{let r,n=[];for(;(r=e.exec(t))!==null;)n.push(r);return n},Dt=R("HTMLFormElement"),Lt=e=>e.toLowerCase().replace(/[-_\s]([a-z\d])(\w*)/g,function(r,n,o){return n.toUpperCase()+o}),Ce=(({hasOwnProperty:e})=>(t,r)=>e.call(t,r))(Object.prototype),Bt=R("RegExp"),Le=(e,t)=>{let r=Object.getOwnPropertyDescriptors(e),n={};k(r,(o,i)=>{t(o,i,e)!==!1&&(n[i]=o)}),Object.defineProperties(e,n)},jt=e=>{Le(e,(t,r)=>{if(x(e)&&["arguments","caller","callee"].indexOf(r)!==-1)return!1;let n=e[r];if(x(n)){if(t.enumerable=!1,"writable"in t){t.writable=!1;return}t.set||(t.set=()=>{throw Error("Can not rewrite read-only method '"+r+"'")})}})},kt=(e,t)=>{let r={},n=o=>{o.forEach(i=>{r[i]=!0})};return P(e)?n(e):n(String(e).split(t)),r},It=()=>{},Ht=(e,t)=>(e=+e,Number.isFinite(e)?e:t),ce="abcdefghijklmnopqrstuvwxyz",Ne="0123456789",Be={DIGIT:Ne,ALPHA:ce,ALPHA_DIGIT:ce+ce.toUpperCase()+Ne},qt=(e=16,t=Be.ALPHA_DIGIT)=>{let r="",{length:n}=t;for(;e--;)r+=t[Math.random()*n|0];return r};function Mt(e){return!!(e&&x(e.append)&&e[Symbol.toStringTag]==="FormData"&&e[Symbol.iterator])}var Jt=e=>{let t=new Array(10),r=(n,o)=>{if(X(n)){if(t.indexOf(n)>=0)return;if(!("toJSON"in n)){t[o]=n;let i=P(n)?[]:{};return k(n,(s,c)=>{let f=r(s,o+1);!j(f)&&(i[c]=f)}),t[o]=void 0,i}}return n};return r(e,0)},zt=R("AsyncFunction"),vt=e=>e&&(X(e)||x(e))&&x(e.then)&&x(e.catch),a={isArray:P,isArrayBuffer:Fe,isBuffer:dt,isFormData:xt,isArrayBufferView:pt,isString:mt,isNumber:Pe,isBoolean:ht,isObject:X,isPlainObject:W,isUndefined:j,isDate:yt,isFile:Et,isBlob:wt,isRegExp:Bt,isFunction:x,isStream:St,isURLSearchParams:At,isTypedArray:Pt,isFileList:bt,forEach:k,merge:le,extend:Ot,trim:Rt,stripBOM:gt,inherits:Tt,toFlatObject:Ct,kindOf:K,kindOfTest:R,endsWith:Nt,toArray:Ft,forEachEntry:Ut,matchAll:_t,isHTMLForm:Dt,hasOwnProperty:Ce,hasOwnProp:Ce,reduceDescriptors:Le,freezeMethods:jt,toObjectSet:kt,toCamelCase:Lt,noop:It,toFiniteNumber:Ht,findKey:Ue,global:_e,isContextDefined:De,ALPHABET:Be,generateString:qt,isSpecCompliantForm:Mt,toJSONObject:Jt,isAsyncFn:zt,isThenable:vt};function U(e,t,r,n,o){Error.call(this),Error.captureStackTrace?Error.captureStackTrace(this,this.constructor):this.stack=new Error().stack,this.message=e,this.name="AxiosError",t&&(this.code=t),r&&(this.config=r),n&&(this.request=n),o&&(this.response=o)}a.inherits(U,Error,{toJSON:function(){return{message:this.message,name:this.name,description:this.description,number:this.number,fileName:this.fileName,lineNumber:this.lineNumber,columnNumber:this.columnNumber,stack:this.stack,config:a.toJSONObject(this.config),code:this.code,status:this.response&&this.response.status?this.response.status:null}}});var je=U.prototype,ke={};["ERR_BAD_OPTION_VALUE","ERR_BAD_OPTION","ECONNABORTED","ETIMEDOUT","ERR_NETWORK","ERR_FR_TOO_MANY_REDIRECTS","ERR_DEPRECATED","ERR_BAD_RESPONSE","ERR_BAD_REQUEST","ERR_CANCELED","ERR_NOT_SUPPORT","ERR_INVALID_URL"].forEach(e=>{ke[e]={value:e}});Object.defineProperties(U,ke);Object.defineProperty(je,"isAxiosError",{value:!0});U.from=(e,t,r,n,o,i)=>{let s=Object.create(je);return a.toFlatObject(e,s,function(f){return f!==Error.prototype},c=>c!=="isAxiosError"),U.call(s,e.message,t,r,n,o),s.cause=e,s.name=e.name,i&&Object.assign(s,i),s};var m=U;var Y=null;function fe(e){return a.isPlainObject(e)||a.isArray(e)}function He(e){return a.endsWith(e,"[]")?e.slice(0,-2):e}function Ie(e,t,r){return e?e.concat(t).map(function(o,i){return o=He(o),!r&&i?"["+o+"]":o}).join(r?".":""):t}function Vt(e){return a.isArray(e)&&!e.some(fe)}var $t=a.toFlatObject(a,{},null,function(t){return/^is[A-Z]/.test(t)});function Wt(e,t,r){if(!a.isObject(e))throw new TypeError("target must be an object");t=t||new(Y||FormData),r=a.toFlatObject(r,{metaTokens:!0,dots:!1,indexes:!1},!1,function(h,O){return!a.isUndefined(O[h])});let n=r.metaTokens,o=r.visitor||u,i=r.dots,s=r.indexes,f=(r.Blob||typeof Blob<"u"&&Blob)&&a.isSpecCompliantForm(t);if(!a.isFunction(o))throw new TypeError("visitor must be a function");function l(d){if(d===null)return"";if(a.isDate(d))return d.toISOString();if(!f&&a.isBlob(d))throw new m("Blob is not supported. Use a Buffer instead.");return a.isArrayBuffer(d)||a.isTypedArray(d)?f&&typeof Blob=="function"?new Blob([d]):Buffer.from(d):d}function u(d,h,O){let A=d;if(d&&!O&&typeof d=="object"){if(a.endsWith(h,"{}"))h=n?h:h.slice(0,-2),d=JSON.stringify(d);else if(a.isArray(d)&&Vt(d)||(a.isFileList(d)||a.endsWith(h,"[]"))&&(A=a.toArray(d)))return h=He(h),A.forEach(function($,ut){!(a.isUndefined($)||$===null)&&t.append(s===!0?Ie([h],ut,i):s===null?h:h+"[]",l($))}),!1}return fe(d)?!0:(t.append(Ie(O,h,i),l(d)),!1)}let p=[],w=Object.assign($t,{defaultVisitor:u,convertValue:l,isVisitable:fe});function y(d,h){if(!a.isUndefined(d)){if(p.indexOf(d)!==-1)throw Error("Circular reference detected in "+h.join("."));p.push(d),a.forEach(d,function(A,F){(!(a.isUndefined(A)||A===null)&&o.call(t,A,a.isString(F)?F.trim():F,h,w))===!0&&y(A,h?h.concat(F):[F])}),p.pop()}}if(!a.isObject(e))throw new TypeError("data must be an object");return y(e),t}var T=Wt;function qe(e){let t={"!":"%21","'":"%27","(":"%28",")":"%29","~":"%7E","%20":"+","%00":"\0"};return encodeURIComponent(e).replace(/[!'()~]|%20|%00/g,function(n){return t[n]})}function Me(e,t){this._pairs=[],e&&T(e,this,t)}var Je=Me.prototype;Je.append=function(t,r){this._pairs.push([t,r])};Je.toString=function(t){let r=t?function(n){return t.call(this,n,qe)}:qe;return this._pairs.map(function(o){return r(o[0])+"="+r(o[1])},"").join("&")};var Q=Me;function Kt(e){return encodeURIComponent(e).replace(/%3A/gi,":").replace(/%24/g,"$").replace(/%2C/gi,",").replace(/%20/g,"+").replace(/%5B/gi,"[").replace(/%5D/gi,"]")}function I(e,t,r){if(!t)return e;let n=r&&r.encode||Kt,o=r&&r.serialize,i;if(o?i=o(t,r):i=a.isURLSearchParams(t)?t.toString():new Q(t,r).toString(n),i){let s=e.indexOf("#");s!==-1&&(e=e.slice(0,s)),e+=(e.indexOf("?")===-1?"?":"&")+i}return e}var de=class{constructor(){this.handlers=[]}use(t,r,n){return this.handlers.push({fulfilled:t,rejected:r,synchronous:n?n.synchronous:!1,runWhen:n?n.runWhen:null}),this.handlers.length-1}eject(t){this.handlers[t]&&(this.handlers[t]=null)}clear(){this.handlers&&(this.handlers=[])}forEach(t){a.forEach(this.handlers,function(n){n!==null&&t(n)})}},pe=de;var Z={silentJSONParsing:!0,forcedJSONParsing:!0,clarifyTimeoutError:!1};var ze=typeof URLSearchParams<"u"?URLSearchParams:Q;var ve=typeof FormData<"u"?FormData:null;var Ve=typeof Blob<"u"?Blob:null;var Gt=(()=>{let e;return typeof navigator<"u"&&((e=navigator.product)==="ReactNative"||e==="NativeScript"||e==="NS")?!1:typeof window<"u"&&typeof document<"u"})(),Xt=(()=>typeof WorkerGlobalScope<"u"&&self instanceof WorkerGlobalScope&&typeof self.importScripts=="function")(),b={isBrowser:!0,classes:{URLSearchParams:ze,FormData:ve,Blob:Ve},isStandardBrowserEnv:Gt,isStandardBrowserWebWorkerEnv:Xt,protocols:["http","https","file","blob","url","data"]};function me(e,t){return T(e,new b.classes.URLSearchParams,Object.assign({visitor:function(r,n,o,i){return b.isNode&&a.isBuffer(r)?(this.append(n,r.toString("base64")),!1):i.defaultVisitor.apply(this,arguments)}},t))}function Yt(e){return a.matchAll(/\w+|\[(\w*)]/g,e).map(t=>t[0]==="[]"?"":t[1]||t[0])}function Qt(e){let t={},r=Object.keys(e),n,o=r.length,i;for(n=0;n<o;n++)i=r[n],t[i]=e[i];return t}function Zt(e){function t(r,n,o,i){let s=r[i++],c=Number.isFinite(+s),f=i>=r.length;return s=!s&&a.isArray(o)?o.length:s,f?(a.hasOwnProp(o,s)?o[s]=[o[s],n]:o[s]=n,!c):((!o[s]||!a.isObject(o[s]))&&(o[s]=[]),t(r,n,o[s],i)&&a.isArray(o[s])&&(o[s]=Qt(o[s])),!c)}if(a.isFormData(e)&&a.isFunction(e.entries)){let r={};return a.forEachEntry(e,(n,o)=>{t(Yt(n),o,r,0)}),r}return null}var ee=Zt;var er={"Content-Type":void 0};function tr(e,t,r){if(a.isString(e))try{return(t||JSON.parse)(e),a.trim(e)}catch(n){if(n.name!=="SyntaxError")throw n}return(r||JSON.stringify)(e)}var te={transitional:Z,adapter:["xhr","http"],transformRequest:[function(t,r){let n=r.getContentType()||"",o=n.indexOf("application/json")>-1,i=a.isObject(t);if(i&&a.isHTMLForm(t)&&(t=new FormData(t)),a.isFormData(t))return o&&o?JSON.stringify(ee(t)):t;if(a.isArrayBuffer(t)||a.isBuffer(t)||a.isStream(t)||a.isFile(t)||a.isBlob(t))return t;if(a.isArrayBufferView(t))return t.buffer;if(a.isURLSearchParams(t))return r.setContentType("application/x-www-form-urlencoded;charset=utf-8",!1),t.toString();let c;if(i){if(n.indexOf("application/x-www-form-urlencoded")>-1)return me(t,this.formSerializer).toString();if((c=a.isFileList(t))||n.indexOf("multipart/form-data")>-1){let f=this.env&&this.env.FormData;return T(c?{"files[]":t}:t,f&&new f,this.formSerializer)}}return i||o?(r.setContentType("application/json",!1),tr(t)):t}],transformResponse:[function(t){let r=this.transitional||te.transitional,n=r&&r.forcedJSONParsing,o=this.responseType==="json";if(t&&a.isString(t)&&(n&&!this.responseType||o)){let s=!(r&&r.silentJSONParsing)&&o;try{return JSON.parse(t)}catch(c){if(s)throw c.name==="SyntaxError"?m.from(c,m.ERR_BAD_RESPONSE,this,null,this.response):c}}return t}],timeout:0,xsrfCookieName:"XSRF-TOKEN",xsrfHeaderName:"X-XSRF-TOKEN",maxContentLength:-1,maxBodyLength:-1,env:{FormData:b.classes.FormData,Blob:b.classes.Blob},validateStatus:function(t){return t>=200&&t<300},headers:{common:{Accept:"application/json, text/plain, */*"}}};a.forEach(["delete","get","head"],function(t){te.headers[t]={}});a.forEach(["post","put","patch"],function(t){te.headers[t]=a.merge(er)});var _=te;var rr=a.toObjectSet(["age","authorization","content-length","content-type","etag","expires","from","host","if-modified-since","if-unmodified-since","last-modified","location","max-forwards","proxy-authorization","referer","retry-after","user-agent"]),$e=e=>{let t={},r,n,o;return e&&e.split(`
|
|
2
|
+
`).forEach(function(s){o=s.indexOf(":"),r=s.substring(0,o).trim().toLowerCase(),n=s.substring(o+1).trim(),!(!r||t[r]&&rr[r])&&(r==="set-cookie"?t[r]?t[r].push(n):t[r]=[n]:t[r]=t[r]?t[r]+", "+n:n)}),t};var We=Symbol("internals");function H(e){return e&&String(e).trim().toLowerCase()}function re(e){return e===!1||e==null?e:a.isArray(e)?e.map(re):String(e)}function nr(e){let t=Object.create(null),r=/([^\s,;=]+)\s*(?:=\s*([^,;]+))?/g,n;for(;n=r.exec(e);)t[n[1]]=n[2];return t}var or=e=>/^[-_a-zA-Z0-9^`|~,!#$%&'*+.]+$/.test(e.trim());function he(e,t,r,n,o){if(a.isFunction(n))return n.call(this,t,r);if(o&&(t=r),!!a.isString(t)){if(a.isString(n))return t.indexOf(n)!==-1;if(a.isRegExp(n))return n.test(t)}}function sr(e){return e.trim().toLowerCase().replace(/([a-z\d])(\w*)/g,(t,r,n)=>r.toUpperCase()+n)}function ir(e,t){let r=a.toCamelCase(" "+t);["get","set","has"].forEach(n=>{Object.defineProperty(e,n+r,{value:function(o,i,s){return this[n].call(this,t,o,i,s)},configurable:!0})})}var D=class{constructor(t){t&&this.set(t)}set(t,r,n){let o=this;function i(c,f,l){let u=H(f);if(!u)throw new Error("header name must be a non-empty string");let p=a.findKey(o,u);(!p||o[p]===void 0||l===!0||l===void 0&&o[p]!==!1)&&(o[p||f]=re(c))}let s=(c,f)=>a.forEach(c,(l,u)=>i(l,u,f));return a.isPlainObject(t)||t instanceof this.constructor?s(t,r):a.isString(t)&&(t=t.trim())&&!or(t)?s($e(t),r):t!=null&&i(r,t,n),this}get(t,r){if(t=H(t),t){let n=a.findKey(this,t);if(n){let o=this[n];if(!r)return o;if(r===!0)return nr(o);if(a.isFunction(r))return r.call(this,o,n);if(a.isRegExp(r))return r.exec(o);throw new TypeError("parser must be boolean|regexp|function")}}}has(t,r){if(t=H(t),t){let n=a.findKey(this,t);return!!(n&&this[n]!==void 0&&(!r||he(this,this[n],n,r)))}return!1}delete(t,r){let n=this,o=!1;function i(s){if(s=H(s),s){let c=a.findKey(n,s);c&&(!r||he(n,n[c],c,r))&&(delete n[c],o=!0)}}return a.isArray(t)?t.forEach(i):i(t),o}clear(t){let r=Object.keys(this),n=r.length,o=!1;for(;n--;){let i=r[n];(!t||he(this,this[i],i,t,!0))&&(delete this[i],o=!0)}return o}normalize(t){let r=this,n={};return a.forEach(this,(o,i)=>{let s=a.findKey(n,i);if(s){r[s]=re(o),delete r[i];return}let c=t?sr(i):String(i).trim();c!==i&&delete r[i],r[c]=re(o),n[c]=!0}),this}concat(...t){return this.constructor.concat(this,...t)}toJSON(t){let r=Object.create(null);return a.forEach(this,(n,o)=>{n!=null&&n!==!1&&(r[o]=t&&a.isArray(n)?n.join(", "):n)}),r}[Symbol.iterator](){return Object.entries(this.toJSON())[Symbol.iterator]()}toString(){return Object.entries(this.toJSON()).map(([t,r])=>t+": "+r).join(`
|
|
3
|
+
`)}get[Symbol.toStringTag](){return"AxiosHeaders"}static from(t){return t instanceof this?t:new this(t)}static concat(t,...r){let n=new this(t);return r.forEach(o=>n.set(o)),n}static accessor(t){let n=(this[We]=this[We]={accessors:{}}).accessors,o=this.prototype;function i(s){let c=H(s);n[c]||(ir(o,s),n[c]=!0)}return a.isArray(t)?t.forEach(i):i(t),this}};D.accessor(["Content-Type","Content-Length","Accept","Accept-Encoding","User-Agent","Authorization"]);a.freezeMethods(D.prototype);a.freezeMethods(D);var S=D;function q(e,t){let r=this||_,n=t||r,o=S.from(n.headers),i=n.data;return a.forEach(e,function(c){i=c.call(r,i,o.normalize(),t?t.status:void 0)}),o.normalize(),i}function M(e){return!!(e&&e.__CANCEL__)}function Ke(e,t,r){m.call(this,e??"canceled",m.ERR_CANCELED,t,r),this.name="CanceledError"}a.inherits(Ke,m,{__CANCEL__:!0});var C=Ke;function ye(e,t,r){let n=r.config.validateStatus;!r.status||!n||n(r.status)?e(r):t(new m("Request failed with status code "+r.status,[m.ERR_BAD_REQUEST,m.ERR_BAD_RESPONSE][Math.floor(r.status/100)-4],r.config,r.request,r))}var Ge=b.isStandardBrowserEnv?function(){return{write:function(r,n,o,i,s,c){let f=[];f.push(r+"="+encodeURIComponent(n)),a.isNumber(o)&&f.push("expires="+new Date(o).toGMTString()),a.isString(i)&&f.push("path="+i),a.isString(s)&&f.push("domain="+s),c===!0&&f.push("secure"),document.cookie=f.join("; ")},read:function(r){let n=document.cookie.match(new RegExp("(^|;\\s*)("+r+")=([^;]*)"));return n?decodeURIComponent(n[3]):null},remove:function(r){this.write(r,"",Date.now()-864e5)}}}():function(){return{write:function(){},read:function(){return null},remove:function(){}}}();function Ee(e){return/^([a-z][a-z\d+\-.]*:)?\/\//i.test(e)}function we(e,t){return t?e.replace(/\/+$/,"")+"/"+t.replace(/^\/+/,""):e}function J(e,t){return e&&!Ee(t)?we(e,t):t}var Xe=b.isStandardBrowserEnv?function(){let t=/(msie|trident)/i.test(navigator.userAgent),r=document.createElement("a"),n;function o(i){let s=i;return t&&(r.setAttribute("href",s),s=r.href),r.setAttribute("href",s),{href:r.href,protocol:r.protocol?r.protocol.replace(/:$/,""):"",host:r.host,search:r.search?r.search.replace(/^\?/,""):"",hash:r.hash?r.hash.replace(/^#/,""):"",hostname:r.hostname,port:r.port,pathname:r.pathname.charAt(0)==="/"?r.pathname:"/"+r.pathname}}return n=o(window.location.href),function(s){let c=a.isString(s)?o(s):s;return c.protocol===n.protocol&&c.host===n.host}}():function(){return function(){return!0}}();function be(e){let t=/^([-+\w]{1,25})(:?\/\/|:)/.exec(e);return t&&t[1]||""}function ar(e,t){e=e||10;let r=new Array(e),n=new Array(e),o=0,i=0,s;return t=t!==void 0?t:1e3,function(f){let l=Date.now(),u=n[i];s||(s=l),r[o]=f,n[o]=l;let p=i,w=0;for(;p!==o;)w+=r[p++],p=p%e;if(o=(o+1)%e,o===i&&(i=(i+1)%e),l-s<t)return;let y=u&&l-u;return y?Math.round(w*1e3/y):void 0}}var Ye=ar;function Qe(e,t){let r=0,n=Ye(50,250);return o=>{let i=o.loaded,s=o.lengthComputable?o.total:void 0,c=i-r,f=n(c),l=i<=s;r=i;let u={loaded:i,total:s,progress:s?i/s:void 0,bytes:c,rate:f||void 0,estimated:f&&s&&l?(s-i)/f:void 0,event:o};u[t?"download":"upload"]=!0,e(u)}}var cr=typeof XMLHttpRequest<"u",Ze=cr&&function(e){return new Promise(function(r,n){let o=e.data,i=S.from(e.headers).normalize(),s=e.responseType,c;function f(){e.cancelToken&&e.cancelToken.unsubscribe(c),e.signal&&e.signal.removeEventListener("abort",c)}a.isFormData(o)&&(b.isStandardBrowserEnv||b.isStandardBrowserWebWorkerEnv?i.setContentType(!1):i.setContentType("multipart/form-data;",!1));let l=new XMLHttpRequest;if(e.auth){let y=e.auth.username||"",d=e.auth.password?unescape(encodeURIComponent(e.auth.password)):"";i.set("Authorization","Basic "+btoa(y+":"+d))}let u=J(e.baseURL,e.url);l.open(e.method.toUpperCase(),I(u,e.params,e.paramsSerializer),!0),l.timeout=e.timeout;function p(){if(!l)return;let y=S.from("getAllResponseHeaders"in l&&l.getAllResponseHeaders()),h={data:!s||s==="text"||s==="json"?l.responseText:l.response,status:l.status,statusText:l.statusText,headers:y,config:e,request:l};ye(function(A){r(A),f()},function(A){n(A),f()},h),l=null}if("onloadend"in l?l.onloadend=p:l.onreadystatechange=function(){!l||l.readyState!==4||l.status===0&&!(l.responseURL&&l.responseURL.indexOf("file:")===0)||setTimeout(p)},l.onabort=function(){l&&(n(new m("Request aborted",m.ECONNABORTED,e,l)),l=null)},l.onerror=function(){n(new m("Network Error",m.ERR_NETWORK,e,l)),l=null},l.ontimeout=function(){let d=e.timeout?"timeout of "+e.timeout+"ms exceeded":"timeout exceeded",h=e.transitional||Z;e.timeoutErrorMessage&&(d=e.timeoutErrorMessage),n(new m(d,h.clarifyTimeoutError?m.ETIMEDOUT:m.ECONNABORTED,e,l)),l=null},b.isStandardBrowserEnv){let y=(e.withCredentials||Xe(u))&&e.xsrfCookieName&&Ge.read(e.xsrfCookieName);y&&i.set(e.xsrfHeaderName,y)}o===void 0&&i.setContentType(null),"setRequestHeader"in l&&a.forEach(i.toJSON(),function(d,h){l.setRequestHeader(h,d)}),a.isUndefined(e.withCredentials)||(l.withCredentials=!!e.withCredentials),s&&s!=="json"&&(l.responseType=e.responseType),typeof e.onDownloadProgress=="function"&&l.addEventListener("progress",Qe(e.onDownloadProgress,!0)),typeof e.onUploadProgress=="function"&&l.upload&&l.upload.addEventListener("progress",Qe(e.onUploadProgress)),(e.cancelToken||e.signal)&&(c=y=>{l&&(n(!y||y.type?new C(null,e,l):y),l.abort(),l=null)},e.cancelToken&&e.cancelToken.subscribe(c),e.signal&&(e.signal.aborted?c():e.signal.addEventListener("abort",c)));let w=be(u);if(w&&b.protocols.indexOf(w)===-1){n(new m("Unsupported protocol "+w+":",m.ERR_BAD_REQUEST,e));return}l.send(o||null)})};var ne={http:Y,xhr:Ze};a.forEach(ne,(e,t)=>{if(e){try{Object.defineProperty(e,"name",{value:t})}catch{}Object.defineProperty(e,"adapterName",{value:t})}});var et={getAdapter:e=>{e=a.isArray(e)?e:[e];let{length:t}=e,r,n;for(let o=0;o<t&&(r=e[o],!(n=a.isString(r)?ne[r.toLowerCase()]:r));o++);if(!n)throw n===!1?new m(`Adapter ${r} is not supported by the environment`,"ERR_NOT_SUPPORT"):new Error(a.hasOwnProp(ne,r)?`Adapter '${r}' is not available in the build`:`Unknown adapter '${r}'`);if(!a.isFunction(n))throw new TypeError("adapter is not a function");return n},adapters:ne};function Se(e){if(e.cancelToken&&e.cancelToken.throwIfRequested(),e.signal&&e.signal.aborted)throw new C(null,e)}function oe(e){return Se(e),e.headers=S.from(e.headers),e.data=q.call(e,e.transformRequest),["post","put","patch"].indexOf(e.method)!==-1&&e.headers.setContentType("application/x-www-form-urlencoded",!1),et.getAdapter(e.adapter||_.adapter)(e).then(function(n){return Se(e),n.data=q.call(e,e.transformResponse,n),n.headers=S.from(n.headers),n},function(n){return M(n)||(Se(e),n&&n.response&&(n.response.data=q.call(e,e.transformResponse,n.response),n.response.headers=S.from(n.response.headers))),Promise.reject(n)})}var tt=e=>e instanceof S?e.toJSON():e;function g(e,t){t=t||{};let r={};function n(l,u,p){return a.isPlainObject(l)&&a.isPlainObject(u)?a.merge.call({caseless:p},l,u):a.isPlainObject(u)?a.merge({},u):a.isArray(u)?u.slice():u}function o(l,u,p){if(a.isUndefined(u)){if(!a.isUndefined(l))return n(void 0,l,p)}else return n(l,u,p)}function i(l,u){if(!a.isUndefined(u))return n(void 0,u)}function s(l,u){if(a.isUndefined(u)){if(!a.isUndefined(l))return n(void 0,l)}else return n(void 0,u)}function c(l,u,p){if(p in t)return n(l,u);if(p in e)return n(void 0,l)}let f={url:i,method:i,data:i,baseURL:s,transformRequest:s,transformResponse:s,paramsSerializer:s,timeout:s,timeoutMessage:s,withCredentials:s,adapter:s,responseType:s,xsrfCookieName:s,xsrfHeaderName:s,onUploadProgress:s,onDownloadProgress:s,decompress:s,maxContentLength:s,maxBodyLength:s,beforeRedirect:s,transport:s,httpAgent:s,httpsAgent:s,cancelToken:s,socketPath:s,responseEncoding:s,validateStatus:c,headers:(l,u)=>o(tt(l),tt(u),!0)};return a.forEach(Object.keys(Object.assign({},e,t)),function(u){let p=f[u]||o,w=p(e[u],t[u],u);a.isUndefined(w)&&p!==c||(r[u]=w)}),r}var se="1.4.0";var xe={};["object","boolean","number","function","string","symbol"].forEach((e,t)=>{xe[e]=function(n){return typeof n===e||"a"+(t<1?"n ":" ")+e}});var rt={};xe.transitional=function(t,r,n){function o(i,s){return"[Axios v"+se+"] Transitional option '"+i+"'"+s+(n?". "+n:"")}return(i,s,c)=>{if(t===!1)throw new m(o(s," has been removed"+(r?" in "+r:"")),m.ERR_DEPRECATED);return r&&!rt[s]&&(rt[s]=!0,console.warn(o(s," has been deprecated since v"+r+" and will be removed in the near future"))),t?t(i,s,c):!0}};function lr(e,t,r){if(typeof e!="object")throw new m("options must be an object",m.ERR_BAD_OPTION_VALUE);let n=Object.keys(e),o=n.length;for(;o-- >0;){let i=n[o],s=t[i];if(s){let c=e[i],f=c===void 0||s(c,i,e);if(f!==!0)throw new m("option "+i+" must be "+f,m.ERR_BAD_OPTION_VALUE);continue}if(r!==!0)throw new m("Unknown option "+i,m.ERR_BAD_OPTION)}}var ie={assertOptions:lr,validators:xe};var N=ie.validators,L=class{constructor(t){this.defaults=t,this.interceptors={request:new pe,response:new pe}}request(t,r){typeof t=="string"?(r=r||{},r.url=t):r=t||{},r=g(this.defaults,r);let{transitional:n,paramsSerializer:o,headers:i}=r;n!==void 0&&ie.assertOptions(n,{silentJSONParsing:N.transitional(N.boolean),forcedJSONParsing:N.transitional(N.boolean),clarifyTimeoutError:N.transitional(N.boolean)},!1),o!=null&&(a.isFunction(o)?r.paramsSerializer={serialize:o}:ie.assertOptions(o,{encode:N.function,serialize:N.function},!0)),r.method=(r.method||this.defaults.method||"get").toLowerCase();let s;s=i&&a.merge(i.common,i[r.method]),s&&a.forEach(["delete","get","head","post","put","patch","common"],d=>{delete i[d]}),r.headers=S.concat(s,i);let c=[],f=!0;this.interceptors.request.forEach(function(h){typeof h.runWhen=="function"&&h.runWhen(r)===!1||(f=f&&h.synchronous,c.unshift(h.fulfilled,h.rejected))});let l=[];this.interceptors.response.forEach(function(h){l.push(h.fulfilled,h.rejected)});let u,p=0,w;if(!f){let d=[oe.bind(this),void 0];for(d.unshift.apply(d,c),d.push.apply(d,l),w=d.length,u=Promise.resolve(r);p<w;)u=u.then(d[p++],d[p++]);return u}w=c.length;let y=r;for(p=0;p<w;){let d=c[p++],h=c[p++];try{y=d(y)}catch(O){h.call(this,O);break}}try{u=oe.call(this,y)}catch(d){return Promise.reject(d)}for(p=0,w=l.length;p<w;)u=u.then(l[p++],l[p++]);return u}getUri(t){t=g(this.defaults,t);let r=J(t.baseURL,t.url);return I(r,t.params,t.paramsSerializer)}};a.forEach(["delete","get","head","options"],function(t){L.prototype[t]=function(r,n){return this.request(g(n||{},{method:t,url:r,data:(n||{}).data}))}});a.forEach(["post","put","patch"],function(t){function r(n){return function(i,s,c){return this.request(g(c||{},{method:t,headers:n?{"Content-Type":"multipart/form-data"}:{},url:i,data:s}))}}L.prototype[t]=r(),L.prototype[t+"Form"]=r(!0)});var z=L;var v=class{constructor(t){if(typeof t!="function")throw new TypeError("executor must be a function.");let r;this.promise=new Promise(function(i){r=i});let n=this;this.promise.then(o=>{if(!n._listeners)return;let i=n._listeners.length;for(;i-- >0;)n._listeners[i](o);n._listeners=null}),this.promise.then=o=>{let i,s=new Promise(c=>{n.subscribe(c),i=c}).then(o);return s.cancel=function(){n.unsubscribe(i)},s},t(function(i,s,c){n.reason||(n.reason=new C(i,s,c),r(n.reason))})}throwIfRequested(){if(this.reason)throw this.reason}subscribe(t){if(this.reason){t(this.reason);return}this._listeners?this._listeners.push(t):this._listeners=[t]}unsubscribe(t){if(!this._listeners)return;let r=this._listeners.indexOf(t);r!==-1&&this._listeners.splice(r,1)}static source(){let t;return{token:new v(function(o){t=o}),cancel:t}}},nt=v;function Ae(e){return function(r){return e.apply(null,r)}}function Re(e){return a.isObject(e)&&e.isAxiosError===!0}var Oe={Continue:100,SwitchingProtocols:101,Processing:102,EarlyHints:103,Ok:200,Created:201,Accepted:202,NonAuthoritativeInformation:203,NoContent:204,ResetContent:205,PartialContent:206,MultiStatus:207,AlreadyReported:208,ImUsed:226,MultipleChoices:300,MovedPermanently:301,Found:302,SeeOther:303,NotModified:304,UseProxy:305,Unused:306,TemporaryRedirect:307,PermanentRedirect:308,BadRequest:400,Unauthorized:401,PaymentRequired:402,Forbidden:403,NotFound:404,MethodNotAllowed:405,NotAcceptable:406,ProxyAuthenticationRequired:407,RequestTimeout:408,Conflict:409,Gone:410,LengthRequired:411,PreconditionFailed:412,PayloadTooLarge:413,UriTooLong:414,UnsupportedMediaType:415,RangeNotSatisfiable:416,ExpectationFailed:417,ImATeapot:418,MisdirectedRequest:421,UnprocessableEntity:422,Locked:423,FailedDependency:424,TooEarly:425,UpgradeRequired:426,PreconditionRequired:428,TooManyRequests:429,RequestHeaderFieldsTooLarge:431,UnavailableForLegalReasons:451,InternalServerError:500,NotImplemented:501,BadGateway:502,ServiceUnavailable:503,GatewayTimeout:504,HttpVersionNotSupported:505,VariantAlsoNegotiates:506,InsufficientStorage:507,LoopDetected:508,NotExtended:510,NetworkAuthenticationRequired:511};Object.entries(Oe).forEach(([e,t])=>{Oe[t]=e});var ot=Oe;function st(e){let t=new z(e),r=B(z.prototype.request,t);return a.extend(r,z.prototype,t,{allOwnKeys:!0}),a.extend(r,t,null,{allOwnKeys:!0}),r.create=function(o){return st(g(e,o))},r}var E=st(_);E.Axios=z;E.CanceledError=C;E.CancelToken=nt;E.isCancel=M;E.VERSION=se;E.toFormData=T;E.AxiosError=m;E.Cancel=E.CanceledError;E.all=function(t){return Promise.all(t)};E.spread=Ae;E.isAxiosError=Re;E.mergeConfig=g;E.AxiosHeaders=S;E.formToJSON=e=>ee(a.isHTMLForm(e)?new FormData(e):e);E.HttpStatusCode=ot;E.default=E;var ae=E;var{Axios:Xo,AxiosError:Yo,CanceledError:Qo,isCancel:Zo,CancelToken:es,VERSION:ts,all:rs,Cancel:ns,isAxiosError:os,spread:ss,toFormData:is,AxiosHeaders:as,HttpStatusCode:cs,formToJSON:ls,mergeConfig:us}=ae;var V=class{constructor({theme:t="light",render_element_or_id:r="recaptcha-el"}){this.gl_api_url="https://www.google.com/recaptcha/api.js?onload=onloadCallback&render=explicit",this.captcha_sitekey="6LeRUzsjAAAAANUHNEY6VkUXmMo_wlrDK5SUoFUV",this.verify_url="https://internalapi.activamedia.com.sg/v1/recaptcha/verify",this.theme=t,this.render_element_or_id=r,this.defineOnloadCallBack(),this.loadJsFile()}defineOnloadCallBack(){window.onloadCallback=()=>{}}loadJsFile(){if(document.querySelectorAll(`script[src="${this.gl_api_url}"]`).length===0){var t=document.createElement("script");t.setAttribute("src",this.gl_api_url),t.setAttribute("type","text/javascript"),t.setAttribute("async",!0),t.setAttribute("defer",!0),document.body.appendChild(t)}}sleep(t){return new Promise(r=>setTimeout(r,t))}async render(){let t="";for(;;){if(await this.sleep(200),typeof grecaptcha<"u"&&grecaptcha!==void 0&&typeof grecaptcha.render=="function"){t=grecaptcha.render(this.render_element_or_id,{sitekey:this.captcha_sitekey,theme:this.theme});break}console.info("checking grecaptcha undefined")}return t}reset(t){grecaptcha.reset(t)}fetchResponse(t){try{return grecaptcha.getResponse(t)}catch(r){console.error(r)}}async verifyRecaptcha(t){return await fetch(this.verify_url,{method:"post",body:JSON.stringify({token:t}),headers:{Accept:"application/json","Content-Type":"application/json"}}).then(r=>r.json())}};var ge={config:{},fields:{},name:null,endpoint:null,redirectTo:null,fileUpload:{filepond:null,el:null},onSuccess(e){},onFailed(e){},captchaId:null,recaptchaTheme:"light"};function at(e){document.addEventListener("alpine:init",()=>{for(let t of e){let r=Object.assign({},ge,t);document.addEventListener("alpine:init",pr(r))}})}async function ur(e){if(e.captchaId){let t=document.getElementById(e.captchaId);if(t)e.amCaptcha=new V({theme:this.recaptchaTheme,render_element_or_id:t}),e.widgetId=await e.amCaptcha.render();else throw"Can't find recaptcha rendering element. by id: "+this.captchaId}}function fr(e){if(console.log("\u{1F4E2} Form name: "+e.name),typeof e.redirectTo!="function"&&e.redirectTo.length&&new URL(e.endpoint).host==="hapiform.sg"&&console.log("\u{1F680} "+window.location.origin+e.redirectTo),e.endpoint){let t=new URL(e.endpoint),r=e.endpoint.match(/[0-9a-f]{8}-[0-9a-f]{4}-4[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}/);t.host==="hapiform.sg"&&console.log(`\u{1F680} ${t.origin}/${r}`)}}async function dr(e){let t=e.amCaptcha.fetchResponse(e.widgetId);if(t.length===0)throw{recaptchaError:"You can't leave Captcha Code empty"};return await e.amCaptcha.verifyRecaptcha(t).then(r=>{if(r.success===!1)throw{recaptchaError:"captcha invalid: timeout or duplicate."}})}function it(e,t){ae(e).then(r=>{t.redirectTo&&(window.location.href=t.redirectTo),t.fileUpload.filepond&&t.fileUpload.filepond.removeFiles(),mr(),t.resetFields(),t.onSuccess(r),Er()}).catch(r=>{t.errors=r.response.data.errors,t.busy=!1,t.onFailed(r.response),wr(),t.captchaId&&t.amCaptcha.reset(t.widgetId)})}async function pr(e){Alpine.data(e.name,()=>({...e,errors:{},busy:!1,amCaptcha:null,widgetId:null,async init(){this.$watch("busy",t=>{let r=this.$el.querySelectorAll('form button, form input[type="submit"], form input[type="button"]');t?r.forEach(n=>{n.disabled=!0}):r.forEach(n=>{n.disabled=!1})}),this.$init&&this.$init(),ur(this).catch(t=>console.error(t)),fr(this)},async submit(){this.busy=!0,this.errors={};let t=new FormData;if(Object.keys(this.fields).forEach((s,c)=>{typeof this.fields[s]=="object"?this.fields[s].forEach((f,l)=>{t.append(`${s}[${l}]`,f)}):t.append(s,this.fields[s])}),e.fileUpload.filepond)e.fileUpload.filepond.getFiles().forEach((s,c)=>{t.append(`files[${c}]`,s.file,s.name)});else if(e.fileUpload.el){let c=document.querySelector(e.fileUpload.el).files;for(let f=0;f<c.length;f++)t.append(`files[${f}]`,c[f],c[f].name)}let n=new URL(window.top.location.href);t.append("x_origin",n.origin+n.pathname);let o={method:"POST",url:br(e.endpoint),data:t},i=Object.assign({},o,e.config);this.captchaId?await dr(this).then(()=>{it(i,this)}).catch(s=>{this.errors=s,e.onFailed(s),this.busy=!1}).finally(()=>{}):it(i,this)},resetFields(){this.errors={},this.fields=e.fields,this.busy=!1,this.captchaId&&this.amCaptcha.reset(this.widgetId)}}))}function mr(){hr(),yr()}function hr(){try{ge.fileUpload.filepond.removeFiles()}catch{}}function yr(){try{let e=document.querySelector(ge.fileUpload.el);e.value=""}catch{}}function Er(){ct("hapi:success")}function wr(){ct("hapi:error")}function ct(e){let t=new Event(e);document.dispatchEvent(t)}function br(e){let t=new URL(e);return(window.location.hostname==="localhost"||window.location.hostname==="127.0.0.1")&&(t.searchParams.set("test","1"),console.log("testing mode!")),t.href}function Te(){if(document.querySelectorAll('script[src="//unpkg.com/alpinejs"]').length===0){var e=document.createElement("script");e.setAttribute("src","//unpkg.com/alpinejs"),e.setAttribute("type","text/javascript"),e.setAttribute("defer",!0),document.body.appendChild(e)}}var lt={forms:at},ws=lt;window.Hapi=lt;Te();})();
|
package/index.js
CHANGED
package/package.json
CHANGED
|
@@ -1,20 +1,23 @@
|
|
|
1
1
|
{
|
|
2
|
-
"
|
|
3
|
-
|
|
2
|
+
"author": {
|
|
3
|
+
"name": "chenghuichao"
|
|
4
|
+
},
|
|
5
|
+
"bundleDependencies": false,
|
|
6
|
+
"dependencies": {
|
|
7
|
+
"axios": "^1.4.0",
|
|
8
|
+
"esbuild": "0.17.19"
|
|
9
|
+
},
|
|
10
|
+
"deprecated": false,
|
|
4
11
|
"description": "hapiform html js library with google recaptcha",
|
|
5
|
-
"main": "index.js",
|
|
6
12
|
"keywords": [
|
|
7
13
|
"hapiform"
|
|
8
14
|
],
|
|
9
|
-
"author": "chenghuichao",
|
|
10
15
|
"license": "MIT",
|
|
11
|
-
"
|
|
12
|
-
|
|
13
|
-
"esbuild": "^0.17.19"
|
|
14
|
-
},
|
|
15
|
-
"bundleDependencies": false,
|
|
16
|
+
"main": "index.js",
|
|
17
|
+
"name": "hapi-recaptcha-html",
|
|
16
18
|
"scripts": {
|
|
17
19
|
"build": "esbuild index.js --bundle --minify --outfile=./dist/hapi.min.js",
|
|
18
20
|
"watch": "esbuild index.js --watch --bundle --minify --outfile=./dist/hapi.min.js"
|
|
19
|
-
}
|
|
21
|
+
},
|
|
22
|
+
"version": "1.0.1"
|
|
20
23
|
}
|
package/src/hapi.js
CHANGED
|
@@ -20,217 +20,208 @@ let hapiOptions = {
|
|
|
20
20
|
onFailed(res) {
|
|
21
21
|
res;
|
|
22
22
|
},
|
|
23
|
-
amCaptcha: Object,
|
|
24
23
|
captchaId: null,
|
|
25
24
|
recaptchaTheme: 'light', // light, dark
|
|
26
|
-
widgetId: null,
|
|
27
25
|
};
|
|
28
26
|
|
|
29
|
-
|
|
30
|
-
let mergedOptions = Object.assign({}, hapiOptions, options);
|
|
31
|
-
|
|
32
|
-
await alpine(mergedOptions);
|
|
33
|
-
}
|
|
34
|
-
|
|
35
|
-
async function alpine(options) {
|
|
27
|
+
function forms(formsOption) {
|
|
36
28
|
document.addEventListener("alpine:init", () => {
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
let buttons = document.querySelectorAll('form button, form input[type="submit"], form input[type="button"]');
|
|
44
|
-
|
|
45
|
-
if (value) {
|
|
46
|
-
buttons.forEach((button) => {
|
|
47
|
-
button.disabled = true;
|
|
48
|
-
});
|
|
49
|
-
} else {
|
|
50
|
-
buttons.forEach((button) => {
|
|
51
|
-
button.disabled = false;
|
|
52
|
-
});
|
|
53
|
-
}
|
|
54
|
-
});
|
|
55
|
-
|
|
56
|
-
this.$init ? this.$init() : null;
|
|
57
|
-
|
|
58
|
-
if (this.captchaId) {
|
|
59
|
-
// find the rending element
|
|
60
|
-
let recaptcha_el = document.getElementById(this.captchaId);
|
|
61
|
-
if (recaptcha_el) {
|
|
62
|
-
this.amCaptcha = new AMCaptcha({
|
|
63
|
-
theme: this.recaptchaTheme,
|
|
64
|
-
render_element_or_id: recaptcha_el
|
|
65
|
-
});
|
|
66
|
-
this.widgetId = await this.amCaptcha.render();
|
|
67
|
-
|
|
68
|
-
} else {
|
|
69
|
-
throw "Can't find recaptcha rendering element.";
|
|
70
|
-
}
|
|
71
|
-
}
|
|
72
|
-
},
|
|
73
|
-
submit() {
|
|
74
|
-
// Set busy to true and reset error validations
|
|
75
|
-
this.busy = true;
|
|
76
|
-
this.errors = {};
|
|
77
|
-
|
|
78
|
-
// Get all form fields
|
|
79
|
-
let formData = new FormData();
|
|
80
|
-
|
|
81
|
-
let fieldNames = Object.keys(this.fields);
|
|
82
|
-
|
|
83
|
-
// Append all fields to formData
|
|
84
|
-
fieldNames.forEach((field, i) => {
|
|
85
|
-
if (typeof this.fields[field] === "object") {
|
|
86
|
-
this.fields[field].forEach((item, index) => {
|
|
87
|
-
formData.append(`${field}[${index}]`, item);
|
|
88
|
-
});
|
|
89
|
-
} else {
|
|
90
|
-
formData.append(field, this.fields[field]);
|
|
91
|
-
}
|
|
92
|
-
});
|
|
93
|
-
|
|
94
|
-
// Check if filepond is enabled
|
|
95
|
-
if (options.fileUpload.filepond) {
|
|
96
|
-
options.fileUpload.filepond.getFiles().forEach((file, i) => {
|
|
97
|
-
formData.append(`files[${i}]`, file.file, file.name);
|
|
98
|
-
});
|
|
99
|
-
}
|
|
100
|
-
// Check if normal file upload is enabled
|
|
101
|
-
else if (options.fileUpload.el) {
|
|
102
|
-
let inputElement = document.querySelector(options.fileUpload.el);
|
|
29
|
+
for (const options of formsOption) {
|
|
30
|
+
let mergedOptions = Object.assign({}, hapiOptions, options);
|
|
31
|
+
document.addEventListener("alpine:init", alpineInitData(mergedOptions));
|
|
32
|
+
}
|
|
33
|
+
});
|
|
34
|
+
}
|
|
103
35
|
|
|
104
|
-
|
|
36
|
+
async function renderCaptcha(a) {
|
|
37
|
+
if (a.captchaId) {
|
|
38
|
+
// find the rending element
|
|
39
|
+
let recaptcha_el = document.getElementById(a.captchaId);
|
|
40
|
+
if (recaptcha_el) {
|
|
41
|
+
a.amCaptcha = new AMCaptcha({
|
|
42
|
+
theme: this.recaptchaTheme,
|
|
43
|
+
render_element_or_id: recaptcha_el
|
|
44
|
+
});
|
|
45
|
+
a.widgetId = await a.amCaptcha.render();
|
|
46
|
+
|
|
47
|
+
} else {
|
|
48
|
+
// console.error( "Can't find recaptcha rendering element. by id: " + a.captchaId);
|
|
49
|
+
throw "Can't find recaptcha rendering element. by id: " + this.captchaId;
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
}
|
|
105
53
|
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
54
|
+
function displayHapiformInformation(a) {
|
|
55
|
+
console.log("📢 Form name: " + a.name);
|
|
56
|
+
// Display redirect path
|
|
57
|
+
if (typeof a.redirectTo !== "function" && a.redirectTo.length) {
|
|
58
|
+
let endpoint = new URL(a.endpoint);
|
|
110
59
|
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
formData.append("x_origin", currentUrl.origin + currentUrl.pathname);
|
|
115
|
-
|
|
116
|
-
const defaultConfig = {
|
|
117
|
-
method: "POST",
|
|
118
|
-
url: getEndpoint(options.endpoint),
|
|
119
|
-
data: formData,
|
|
120
|
-
};
|
|
121
|
-
|
|
122
|
-
const config = Object.assign({}, defaultConfig, options.config);
|
|
123
|
-
|
|
124
|
-
if (this.captchaId) {
|
|
125
|
-
|
|
126
|
-
verifyRecaptcha(this.amCaptcha)
|
|
127
|
-
.then(() => {
|
|
128
|
-
// do submission
|
|
129
|
-
axios(config)
|
|
130
|
-
.then((res) => {
|
|
131
|
-
if (options.redirectTo) {
|
|
132
|
-
window.location.href = options.redirectTo;
|
|
133
|
-
}
|
|
134
|
-
|
|
135
|
-
// Remove files from filepond
|
|
136
|
-
if (options.fileUpload.filepond) {
|
|
137
|
-
options.fileUpload.filepond.removeFiles();
|
|
138
|
-
}
|
|
139
|
-
|
|
140
|
-
clearFiles();
|
|
141
|
-
this.resetFields();
|
|
142
|
-
options.onSuccess(res);
|
|
143
|
-
successEvent();
|
|
144
|
-
})
|
|
145
|
-
.catch((err) => {
|
|
146
|
-
this.errors = err.response.data.errors;
|
|
147
|
-
this.busy = false;
|
|
148
|
-
options.onFailed(err.response);
|
|
149
|
-
errorEvent();
|
|
150
|
-
if (this.captchaId) this.amCaptcha.reset(this.widgetId);
|
|
151
|
-
});
|
|
152
|
-
|
|
153
|
-
})
|
|
154
|
-
.catch((error) => {
|
|
155
|
-
this.errors = error;
|
|
156
|
-
// failed method
|
|
157
|
-
options.onFailed(error);
|
|
158
|
-
this.busy = false;
|
|
159
|
-
})
|
|
160
|
-
.finally(() => {
|
|
161
|
-
this.amCaptcha.reset(this.widgetId);
|
|
162
|
-
});
|
|
163
|
-
}
|
|
164
|
-
},
|
|
165
|
-
resetFields() {
|
|
166
|
-
this.errors = {};
|
|
167
|
-
this.fields = options.fields;
|
|
168
|
-
this.busy = false;
|
|
169
|
-
if (this.captchaId) this.amCaptcha.reset(this.widgetId);
|
|
170
|
-
},
|
|
171
|
-
}));
|
|
172
|
-
|
|
173
|
-
// Display redirect path
|
|
174
|
-
if (hapiOptions.redirectTo && hapiOptions.endpoint) {
|
|
175
|
-
let endpoint = new URL(hapiOptions.endpoint);
|
|
176
|
-
|
|
177
|
-
if (endpoint.host === "hapiform.sg") {
|
|
178
|
-
console.log("🚀 " + window.location.origin + hapiOptions.redirectTo);
|
|
179
|
-
}
|
|
60
|
+
if (endpoint.host === "hapiform.sg") {
|
|
61
|
+
console.log("🚀 " + window.location.origin + a.redirectTo);
|
|
180
62
|
}
|
|
63
|
+
}
|
|
181
64
|
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
65
|
+
// Display the endpoint
|
|
66
|
+
if (a.endpoint) {
|
|
67
|
+
let endpoint = new URL(a.endpoint);
|
|
68
|
+
let uuid = a.endpoint.match(/[0-9a-f]{8}-[0-9a-f]{4}-4[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}/);
|
|
186
69
|
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
}
|
|
70
|
+
if (endpoint.host === "hapiform.sg") {
|
|
71
|
+
console.log(`🚀 ${endpoint.origin}/${uuid}`);
|
|
190
72
|
}
|
|
191
|
-
}
|
|
73
|
+
}
|
|
192
74
|
}
|
|
193
75
|
|
|
194
|
-
async function
|
|
76
|
+
async function verifyCaptcha(a) {
|
|
195
77
|
// 1. get response of recaptcha
|
|
196
|
-
const token =
|
|
78
|
+
const token = a.amCaptcha.fetchResponse(a.widgetId);
|
|
197
79
|
if (token.length === 0) {
|
|
198
|
-
throw {recaptchaError:"You can't leave Captcha Code empty"};
|
|
80
|
+
throw {recaptchaError: "You can't leave Captcha Code empty"};
|
|
199
81
|
}
|
|
200
82
|
// 2. verify recaptcha
|
|
201
|
-
return await
|
|
83
|
+
return await a.amCaptcha.verifyRecaptcha(token)
|
|
202
84
|
.then((data) => {
|
|
203
85
|
if (data.success === false) {
|
|
204
|
-
throw {recaptchaError:"captcha invalid: timeout or duplicate."};
|
|
86
|
+
throw {recaptchaError: "captcha invalid: timeout or duplicate."};
|
|
87
|
+
}
|
|
88
|
+
});
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
function onSubmission(config, a) {
|
|
92
|
+
axios(config)
|
|
93
|
+
.then((res) => {
|
|
94
|
+
if (a.redirectTo) {
|
|
95
|
+
window.location.href = a.redirectTo;
|
|
205
96
|
}
|
|
97
|
+
|
|
98
|
+
// Remove files from filepond
|
|
99
|
+
if (a.fileUpload.filepond) {
|
|
100
|
+
a.fileUpload.filepond.removeFiles();
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
clearFiles();
|
|
104
|
+
a.resetFields();
|
|
105
|
+
a.onSuccess(res);
|
|
106
|
+
successEvent();
|
|
107
|
+
})
|
|
108
|
+
.catch((err) => {
|
|
109
|
+
a.errors = err.response.data.errors;
|
|
110
|
+
a.busy = false;
|
|
111
|
+
a.onFailed(err.response);
|
|
112
|
+
errorEvent();
|
|
113
|
+
if (a.captchaId) a.amCaptcha.reset(a.widgetId);
|
|
206
114
|
});
|
|
207
115
|
}
|
|
208
116
|
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
117
|
+
async function alpineInitData(options) {
|
|
118
|
+
Alpine.data(options.name, () => ({
|
|
119
|
+
...options,
|
|
120
|
+
errors: {},
|
|
121
|
+
busy: false,
|
|
122
|
+
amCaptcha: null,
|
|
123
|
+
widgetId: null,
|
|
124
|
+
async init() {
|
|
125
|
+
this.$watch("busy", (value) => {
|
|
126
|
+
let buttons = this.$el.querySelectorAll('form button, form input[type="submit"], form input[type="button"]');
|
|
127
|
+
|
|
128
|
+
if (value) {
|
|
129
|
+
buttons.forEach((button) => {
|
|
130
|
+
button.disabled = true;
|
|
131
|
+
});
|
|
132
|
+
} else {
|
|
133
|
+
buttons.forEach((button) => {
|
|
134
|
+
button.disabled = false;
|
|
135
|
+
});
|
|
136
|
+
}
|
|
137
|
+
});
|
|
138
|
+
|
|
139
|
+
this.$init ? this.$init() : null;
|
|
140
|
+
|
|
141
|
+
renderCaptcha(this).catch((err) => console.error(err));
|
|
142
|
+
|
|
143
|
+
displayHapiformInformation(this);
|
|
144
|
+
|
|
145
|
+
},
|
|
146
|
+
async submit() {
|
|
147
|
+
// Set busy to true and reset error validations
|
|
148
|
+
this.busy = true;
|
|
149
|
+
this.errors = {};
|
|
150
|
+
|
|
151
|
+
// Get all form fields
|
|
152
|
+
let formData = new FormData();
|
|
153
|
+
|
|
154
|
+
let fieldNames = Object.keys(this.fields);
|
|
155
|
+
|
|
156
|
+
// Append all fields to formData
|
|
157
|
+
fieldNames.forEach((field, i) => {
|
|
158
|
+
if (typeof this.fields[field] === "object") {
|
|
159
|
+
this.fields[field].forEach((item, index) => {
|
|
160
|
+
formData.append(`${field}[${index}]`, item);
|
|
161
|
+
});
|
|
162
|
+
} else {
|
|
163
|
+
formData.append(field, this.fields[field]);
|
|
164
|
+
}
|
|
165
|
+
});
|
|
166
|
+
|
|
167
|
+
// Check if filepond is enabled
|
|
168
|
+
if (options.fileUpload.filepond) {
|
|
169
|
+
options.fileUpload.filepond.getFiles().forEach((file, i) => {
|
|
170
|
+
formData.append(`files[${i}]`, file.file, file.name);
|
|
171
|
+
});
|
|
172
|
+
}
|
|
173
|
+
// Check if normal file upload is enabled
|
|
174
|
+
else if (options.fileUpload.el) {
|
|
175
|
+
let inputElement = document.querySelector(options.fileUpload.el);
|
|
176
|
+
|
|
177
|
+
let fileList = inputElement.files;
|
|
178
|
+
|
|
179
|
+
for (let i = 0; i < fileList.length; i++) {
|
|
180
|
+
formData.append(`files[${i}]`, fileList[i], fileList[i].name);
|
|
181
|
+
}
|
|
182
|
+
}
|
|
183
|
+
|
|
184
|
+
// Append x_origin to formData
|
|
185
|
+
let currentUrl = new URL(window.top.location.href);
|
|
186
|
+
|
|
187
|
+
formData.append("x_origin", currentUrl.origin + currentUrl.pathname);
|
|
188
|
+
|
|
189
|
+
const defaultConfig = {
|
|
190
|
+
method: "POST",
|
|
191
|
+
url: getEndpoint(options.endpoint),
|
|
192
|
+
data: formData,
|
|
193
|
+
};
|
|
194
|
+
|
|
195
|
+
const config = Object.assign({}, defaultConfig, options.config);
|
|
196
|
+
|
|
197
|
+
if (this.captchaId) { // with captcha
|
|
198
|
+
await verifyCaptcha(this)
|
|
199
|
+
.then(() => {
|
|
200
|
+
// do submission
|
|
201
|
+
onSubmission(config, this);
|
|
202
|
+
})
|
|
203
|
+
.catch((error) => {
|
|
204
|
+
this.errors = error;
|
|
205
|
+
// failed method
|
|
206
|
+
options.onFailed(error);
|
|
207
|
+
this.busy = false;
|
|
208
|
+
})
|
|
209
|
+
.finally(() => {
|
|
210
|
+
// this.amCaptcha.reset(this.widgetId);
|
|
211
|
+
});
|
|
212
|
+
} else { // without captcha
|
|
213
|
+
onSubmission(config, this);
|
|
214
|
+
}
|
|
215
|
+
},
|
|
216
|
+
resetFields() {
|
|
217
|
+
this.errors = {};
|
|
218
|
+
this.fields = options.fields;
|
|
219
|
+
this.busy = false;
|
|
220
|
+
if (this.captchaId) this.amCaptcha.reset(this.widgetId);
|
|
221
|
+
},
|
|
222
|
+
}));
|
|
223
|
+
}
|
|
224
|
+
|
|
234
225
|
|
|
235
226
|
function clearFiles() {
|
|
236
227
|
clearFilepondFiles();
|
|
@@ -277,4 +268,4 @@ function getEndpoint(endpoint) {
|
|
|
277
268
|
return url.href;
|
|
278
269
|
}
|
|
279
270
|
|
|
280
|
-
export {
|
|
271
|
+
export {forms};
|
package/src/recaptcha.js
CHANGED
package/enquiry-form.js
DELETED
package/index.html
DELETED
|
@@ -1,127 +0,0 @@
|
|
|
1
|
-
<!doctype html>
|
|
2
|
-
<html lang="en">
|
|
3
|
-
<head>
|
|
4
|
-
<meta charset="UTF-8">
|
|
5
|
-
<meta name="viewport"
|
|
6
|
-
content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
|
|
7
|
-
<meta http-equiv="X-UA-Compatible" content="ie=edge">
|
|
8
|
-
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap@5.2.3/dist/css/bootstrap.min.css"
|
|
9
|
-
integrity="sha384-rbsA2VBKQhggwzxH7pPCaAqO46MgnOM80zW1RWuH61DGLwZJEdK2Kadq2F9CUG65" crossorigin="anonymous">
|
|
10
|
-
<title>Document</title>
|
|
11
|
-
<style>
|
|
12
|
-
form {
|
|
13
|
-
width: 500px;
|
|
14
|
-
margin: 10px auto;
|
|
15
|
-
}
|
|
16
|
-
</style>
|
|
17
|
-
</head>
|
|
18
|
-
<body>
|
|
19
|
-
<h1>Test</h1>
|
|
20
|
-
<form x-on:submit.prevent="submit" x-data="contactForm">
|
|
21
|
-
<div>
|
|
22
|
-
<div class="mb-3">
|
|
23
|
-
<div class="form-field">
|
|
24
|
-
<label for="form01-name" class="form-label">Name</label>
|
|
25
|
-
<input type="text" id="form01-name" x-model="fields.name"
|
|
26
|
-
placeholder="Name" class="form-control">
|
|
27
|
-
</div>
|
|
28
|
-
<template x-if="errors && errors.name">
|
|
29
|
-
<div x-text="errors.name" class="text-danger"></div>
|
|
30
|
-
</template>
|
|
31
|
-
</div>
|
|
32
|
-
<div class="mb-3">
|
|
33
|
-
<div class="form-field">
|
|
34
|
-
<label for="form01-contact_number" class="form-label">Contact Number</label>
|
|
35
|
-
<input type="tel" id="form01-contact_number" x-model="fields.contact_number"
|
|
36
|
-
placeholder="Contact Number" class="form-control">
|
|
37
|
-
|
|
38
|
-
</div>
|
|
39
|
-
<template x-if="errors && errors.contact_number">
|
|
40
|
-
<div x-text="errors.contact_number" class="text-danger"></div>
|
|
41
|
-
</template>
|
|
42
|
-
</div>
|
|
43
|
-
<div class="mb-3">
|
|
44
|
-
<div class="form-field">
|
|
45
|
-
<label for="form01-email" class="form-label">Email</label>
|
|
46
|
-
<input type="email" id="form01-email" x-model="fields.email"
|
|
47
|
-
placeholder="Email" class="form-control">
|
|
48
|
-
</div>
|
|
49
|
-
<template x-if="errors && errors.email">
|
|
50
|
-
<div x-text="errors.email" class="text-danger"></div>
|
|
51
|
-
</template>
|
|
52
|
-
</div>
|
|
53
|
-
<div class="mb-3">
|
|
54
|
-
<div class="form-field">
|
|
55
|
-
<select class="form-select" id="form01-specialist" x-model="fields.specialist">
|
|
56
|
-
<option value="" selected>Preferred Specialist</option>
|
|
57
|
-
<option value="Dr Dennis Koh">Dr Dennis Koh</option>
|
|
58
|
-
<option value="Dr Sharon Koh">Dr Sharon Koh</option>
|
|
59
|
-
<option value="Dr Pauleon Tan">Dr Pauleon Tan</option>
|
|
60
|
-
<option value="No Preference">No Preference</option>
|
|
61
|
-
</select>
|
|
62
|
-
</div>
|
|
63
|
-
<template x-if="errors && errors.specialist">
|
|
64
|
-
<div x-text="errors.specialist" class="text-danger"></div>
|
|
65
|
-
</template>
|
|
66
|
-
</div>
|
|
67
|
-
<div class="mb-3">
|
|
68
|
-
<div class="form-field">
|
|
69
|
-
<label for="form01-message" class="form-label">Message</label>
|
|
70
|
-
<textarea id="form01-message" x-model="fields.message" rows="4"
|
|
71
|
-
placeholder="Message" class="form-control form-textarea"></textarea>
|
|
72
|
-
|
|
73
|
-
</div>
|
|
74
|
-
<template x-if="errors && errors.message">
|
|
75
|
-
<div x-text="errors.message" class="text-danger"></div>
|
|
76
|
-
</template>
|
|
77
|
-
</div>
|
|
78
|
-
<div class="mb-3">
|
|
79
|
-
<div id="captcha-01"></div>
|
|
80
|
-
<template x-if="errors && errors.recaptchaError">
|
|
81
|
-
<div x-text="errors.recaptchaError" class="text-danger"></div>
|
|
82
|
-
</template>
|
|
83
|
-
</div>
|
|
84
|
-
<div class="mb-3">
|
|
85
|
-
<button type="submit" class="btn btn-primary">
|
|
86
|
-
Submit
|
|
87
|
-
<svg x-show="busy" class="form-loading" viewBox="0 0 38 38" xmlns="http://www.w3.org/2000/svg">
|
|
88
|
-
<defs>
|
|
89
|
-
<linearGradient x1="8.042%" y1="0%" x2="65.682%" y2="23.865%" id="a">
|
|
90
|
-
<stop stop-color="#fff" stop-opacity="0" offset="0%"/>
|
|
91
|
-
<stop stop-color="#fff" stop-opacity=".631" offset="63.146%"/>
|
|
92
|
-
<stop stop-color="#fff" offset="100%"/>
|
|
93
|
-
</linearGradient>
|
|
94
|
-
</defs>
|
|
95
|
-
<g fill="none" fill-rule="evenodd">
|
|
96
|
-
<g transform="translate(1 1)">
|
|
97
|
-
<path d="M36 18c0-9.94-8.06-18-18-18" id="Oval-2" stroke="url(#a)" stroke-width="2">
|
|
98
|
-
<animateTransform
|
|
99
|
-
attributeName="transform"
|
|
100
|
-
type="rotate"
|
|
101
|
-
from="0 18 18"
|
|
102
|
-
to="360 18 18"
|
|
103
|
-
dur="0.9s"
|
|
104
|
-
repeatCount="indefinite"/>
|
|
105
|
-
</path>
|
|
106
|
-
<circle fill="#fff" cx="36" cy="18" r="1">
|
|
107
|
-
<animateTransform
|
|
108
|
-
attributeName="transform"
|
|
109
|
-
type="rotate"
|
|
110
|
-
from="0 18 18"
|
|
111
|
-
to="360 18 18"
|
|
112
|
-
dur="0.9s"
|
|
113
|
-
repeatCount="indefinite"/>
|
|
114
|
-
</circle>
|
|
115
|
-
</g>
|
|
116
|
-
</g>
|
|
117
|
-
</svg>
|
|
118
|
-
</button>
|
|
119
|
-
</div>
|
|
120
|
-
</div>
|
|
121
|
-
</form>
|
|
122
|
-
|
|
123
|
-
<script src="dist/hapi.min.js" defer></script>
|
|
124
|
-
<script src="enquiry-form.js" defer></script>
|
|
125
|
-
|
|
126
|
-
</body>
|
|
127
|
-
</html>
|