@rtstic.dev/pulse 0.0.42 → 0.0.43

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/dist/.tsbuildinfo CHANGED
@@ -1 +1 @@
1
- {"fileNames":["../../../../../opt/homebrew/lib/node_modules/typescript/lib/lib.es5.d.ts","../../../../../opt/homebrew/lib/node_modules/typescript/lib/lib.es2015.d.ts","../../../../../opt/homebrew/lib/node_modules/typescript/lib/lib.es2016.d.ts","../../../../../opt/homebrew/lib/node_modules/typescript/lib/lib.es2017.d.ts","../../../../../opt/homebrew/lib/node_modules/typescript/lib/lib.es2018.d.ts","../../../../../opt/homebrew/lib/node_modules/typescript/lib/lib.es2019.d.ts","../../../../../opt/homebrew/lib/node_modules/typescript/lib/lib.es2020.d.ts","../../../../../opt/homebrew/lib/node_modules/typescript/lib/lib.dom.d.ts","../../../../../opt/homebrew/lib/node_modules/typescript/lib/lib.dom.iterable.d.ts","../../../../../opt/homebrew/lib/node_modules/typescript/lib/lib.es2015.core.d.ts","../../../../../opt/homebrew/lib/node_modules/typescript/lib/lib.es2015.collection.d.ts","../../../../../opt/homebrew/lib/node_modules/typescript/lib/lib.es2015.generator.d.ts","../../../../../opt/homebrew/lib/node_modules/typescript/lib/lib.es2015.iterable.d.ts","../../../../../opt/homebrew/lib/node_modules/typescript/lib/lib.es2015.promise.d.ts","../../../../../opt/homebrew/lib/node_modules/typescript/lib/lib.es2015.proxy.d.ts","../../../../../opt/homebrew/lib/node_modules/typescript/lib/lib.es2015.reflect.d.ts","../../../../../opt/homebrew/lib/node_modules/typescript/lib/lib.es2015.symbol.d.ts","../../../../../opt/homebrew/lib/node_modules/typescript/lib/lib.es2015.symbol.wellknown.d.ts","../../../../../opt/homebrew/lib/node_modules/typescript/lib/lib.es2016.array.include.d.ts","../../../../../opt/homebrew/lib/node_modules/typescript/lib/lib.es2016.intl.d.ts","../../../../../opt/homebrew/lib/node_modules/typescript/lib/lib.es2017.arraybuffer.d.ts","../../../../../opt/homebrew/lib/node_modules/typescript/lib/lib.es2017.date.d.ts","../../../../../opt/homebrew/lib/node_modules/typescript/lib/lib.es2017.object.d.ts","../../../../../opt/homebrew/lib/node_modules/typescript/lib/lib.es2017.sharedmemory.d.ts","../../../../../opt/homebrew/lib/node_modules/typescript/lib/lib.es2017.string.d.ts","../../../../../opt/homebrew/lib/node_modules/typescript/lib/lib.es2017.intl.d.ts","../../../../../opt/homebrew/lib/node_modules/typescript/lib/lib.es2017.typedarrays.d.ts","../../../../../opt/homebrew/lib/node_modules/typescript/lib/lib.es2018.asyncgenerator.d.ts","../../../../../opt/homebrew/lib/node_modules/typescript/lib/lib.es2018.asynciterable.d.ts","../../../../../opt/homebrew/lib/node_modules/typescript/lib/lib.es2018.intl.d.ts","../../../../../opt/homebrew/lib/node_modules/typescript/lib/lib.es2018.promise.d.ts","../../../../../opt/homebrew/lib/node_modules/typescript/lib/lib.es2018.regexp.d.ts","../../../../../opt/homebrew/lib/node_modules/typescript/lib/lib.es2019.array.d.ts","../../../../../opt/homebrew/lib/node_modules/typescript/lib/lib.es2019.object.d.ts","../../../../../opt/homebrew/lib/node_modules/typescript/lib/lib.es2019.string.d.ts","../../../../../opt/homebrew/lib/node_modules/typescript/lib/lib.es2019.symbol.d.ts","../../../../../opt/homebrew/lib/node_modules/typescript/lib/lib.es2019.intl.d.ts","../../../../../opt/homebrew/lib/node_modules/typescript/lib/lib.es2020.bigint.d.ts","../../../../../opt/homebrew/lib/node_modules/typescript/lib/lib.es2020.date.d.ts","../../../../../opt/homebrew/lib/node_modules/typescript/lib/lib.es2020.promise.d.ts","../../../../../opt/homebrew/lib/node_modules/typescript/lib/lib.es2020.sharedmemory.d.ts","../../../../../opt/homebrew/lib/node_modules/typescript/lib/lib.es2020.string.d.ts","../../../../../opt/homebrew/lib/node_modules/typescript/lib/lib.es2020.symbol.wellknown.d.ts","../../../../../opt/homebrew/lib/node_modules/typescript/lib/lib.es2020.intl.d.ts","../../../../../opt/homebrew/lib/node_modules/typescript/lib/lib.es2020.number.d.ts","../../../../../opt/homebrew/lib/node_modules/typescript/lib/lib.decorators.d.ts","../../../../../opt/homebrew/lib/node_modules/typescript/lib/lib.decorators.legacy.d.ts","../node_modules/.pnpm/@splinetool+runtime@1.10.91/node_modules/@splinetool/runtime/runtime.d.ts","../node_modules/.pnpm/gsap@3.13.0/node_modules/gsap/types/animation.d.ts","../node_modules/.pnpm/gsap@3.13.0/node_modules/gsap/types/custom-bounce.d.ts","../node_modules/.pnpm/gsap@3.13.0/node_modules/gsap/types/custom-ease.d.ts","../node_modules/.pnpm/gsap@3.13.0/node_modules/gsap/types/custom-wiggle.d.ts","../node_modules/.pnpm/gsap@3.13.0/node_modules/gsap/types/css-plugin.d.ts","../node_modules/.pnpm/gsap@3.13.0/node_modules/gsap/types/css-rule-plugin.d.ts","../node_modules/.pnpm/gsap@3.13.0/node_modules/gsap/types/draggable.d.ts","../node_modules/.pnpm/gsap@3.13.0/node_modules/gsap/types/draw-svg-plugin.d.ts","../node_modules/.pnpm/gsap@3.13.0/node_modules/gsap/types/ease.d.ts","../node_modules/.pnpm/gsap@3.13.0/node_modules/gsap/types/easel-plugin.d.ts","../node_modules/.pnpm/gsap@3.13.0/node_modules/gsap/types/flip.d.ts","../node_modules/.pnpm/gsap@3.13.0/node_modules/gsap/types/gs-dev-tools.d.ts","../node_modules/.pnpm/gsap@3.13.0/node_modules/gsap/types/gsap-plugins.d.ts","../node_modules/.pnpm/gsap@3.13.0/node_modules/gsap/types/gsap-utils.d.ts","../node_modules/.pnpm/gsap@3.13.0/node_modules/gsap/types/inertia-plugin.d.ts","../node_modules/.pnpm/gsap@3.13.0/node_modules/gsap/types/morph-svg-plugin.d.ts","../node_modules/.pnpm/gsap@3.13.0/node_modules/gsap/types/motion-path-plugin.d.ts","../node_modules/.pnpm/gsap@3.13.0/node_modules/gsap/types/motion-path-helper.d.ts","../node_modules/.pnpm/gsap@3.13.0/node_modules/gsap/types/observer.d.ts","../node_modules/.pnpm/gsap@3.13.0/node_modules/gsap/types/physics-2d-plugin.d.ts","../node_modules/.pnpm/gsap@3.13.0/node_modules/gsap/types/physics-props-plugin.d.ts","../node_modules/.pnpm/gsap@3.13.0/node_modules/gsap/types/pixi-plugin.d.ts","../node_modules/.pnpm/gsap@3.13.0/node_modules/gsap/types/scramble-text-plugin.d.ts","../node_modules/.pnpm/gsap@3.13.0/node_modules/gsap/types/scroll-to-plugin.d.ts","../node_modules/.pnpm/gsap@3.13.0/node_modules/gsap/types/scroll-trigger.d.ts","../node_modules/.pnpm/gsap@3.13.0/node_modules/gsap/types/scroll-smoother.d.ts","../node_modules/.pnpm/gsap@3.13.0/node_modules/gsap/types/split-text.d.ts","../node_modules/.pnpm/gsap@3.13.0/node_modules/gsap/types/text-plugin.d.ts","../node_modules/.pnpm/gsap@3.13.0/node_modules/gsap/types/timeline.d.ts","../node_modules/.pnpm/gsap@3.13.0/node_modules/gsap/types/tween.d.ts","../node_modules/.pnpm/gsap@3.13.0/node_modules/gsap/types/utils/velocity-tracker.d.ts","../node_modules/.pnpm/gsap@3.13.0/node_modules/gsap/types/gsap-core.d.ts","../node_modules/.pnpm/gsap@3.13.0/node_modules/gsap/types/index.d.ts","../src/archive/index.ts","../node_modules/.pnpm/@studio-freight+lenis@1.0.42/node_modules/@studio-freight/lenis/dist/types/index.d.ts","../src/archive/lenis.ts","../src/archive/spline.ts","../src/global/accordions-v2.ts","../src/global/accordions.ts","../src/global/faqs.ts","../src/global/index.ts","../src/global/loader.ts","../src/glossary/alphabets.js","../src/glossary/index.ts","../src/glossary/old.js","../src/home/depth.ts","../src/home/horizontal-scroll.ts","../src/home/tabs.ts","../src/home/hero-animation/loader.ts","../src/home/hero-animation/scroll.ts","../src/home/hero-animation/torch.ts","../src/slider/freescroll-cards.ts","../src/slider/freescroll-slider.ts","../src/slider/testimonial.ts","../node_modules/.pnpm/esbuild@0.25.5/node_modules/esbuild/lib/main.d.ts","../bin/build.js","../bin/cdn.js"],"fileIdsList":[[50,51,52,53,54,55,56,57,58,59,60,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,80,81],[50,51,52,53,54,55,56,57,58,59,60,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,80,81,103],[50,51,52,53,54,55,56,57,58,59,60,63,64,65,66,67,68,69,70,71,72,73,74,75,76,80,81],[49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81],[50,51,52,53,54,55,56,57,58,59,60,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,79,80,81],[48,50,51,52,53,54,55,56,57,58,59,60,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,80,81],[50,51,52,53,54,55,56,57,58,59,60,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,80,81,83]],"fileInfos":[{"version":"69684132aeb9b5642cbcd9e22dff7818ff0ee1aa831728af0ecf97d3364d5546","affectsGlobalScope":true,"impliedFormat":1},{"version":"45b7ab580deca34ae9729e97c13cfd999df04416a79116c3bfb483804f85ded4","impliedFormat":1},{"version":"3facaf05f0c5fc569c5649dd359892c98a85557e3e0c847964caeb67076f4d75","impliedFormat":1},{"version":"e44bb8bbac7f10ecc786703fe0a6a4b952189f908707980ba8f3c8975a760962","impliedFormat":1},{"version":"5e1c4c362065a6b95ff952c0eab010f04dcd2c3494e813b493ecfd4fcb9fc0d8","impliedFormat":1},{"version":"68d73b4a11549f9c0b7d352d10e91e5dca8faa3322bfb77b661839c42b1ddec7","impliedFormat":1},{"version":"5efce4fc3c29ea84e8928f97adec086e3dc876365e0982cc8479a07954a3efd4","impliedFormat":1},{"version":"092c2bfe125ce69dbb1223c85d68d4d2397d7d8411867b5cc03cec902c233763","affectsGlobalScope":true,"impliedFormat":1},{"version":"07f073f19d67f74d732b1adea08e1dc66b1b58d77cb5b43931dee3d798a2fd53","affectsGlobalScope":true,"impliedFormat":1},{"version":"c57796738e7f83dbc4b8e65132f11a377649c00dd3eee333f672b8f0a6bea671","affectsGlobalScope":true,"impliedFormat":1},{"version":"dc2df20b1bcdc8c2d34af4926e2c3ab15ffe1160a63e58b7e09833f616efff44","affectsGlobalScope":true,"impliedFormat":1},{"version":"515d0b7b9bea2e31ea4ec968e9edd2c39d3eebf4a2d5cbd04e88639819ae3b71","affectsGlobalScope":true,"impliedFormat":1},{"version":"0559b1f683ac7505ae451f9a96ce4c3c92bdc71411651ca6ddb0e88baaaad6a3","affectsGlobalScope":true,"impliedFormat":1},{"version":"0dc1e7ceda9b8b9b455c3a2d67b0412feab00bd2f66656cd8850e8831b08b537","affectsGlobalScope":true,"impliedFormat":1},{"version":"ce691fb9e5c64efb9547083e4a34091bcbe5bdb41027e310ebba8f7d96a98671","affectsGlobalScope":true,"impliedFormat":1},{"version":"8d697a2a929a5fcb38b7a65594020fcef05ec1630804a33748829c5ff53640d0","affectsGlobalScope":true,"impliedFormat":1},{"version":"4ff2a353abf8a80ee399af572debb8faab2d33ad38c4b4474cff7f26e7653b8d","affectsGlobalScope":true,"impliedFormat":1},{"version":"936e80ad36a2ee83fc3caf008e7c4c5afe45b3cf3d5c24408f039c1d47bdc1df","affectsGlobalScope":true,"impliedFormat":1},{"version":"d15bea3d62cbbdb9797079416b8ac375ae99162a7fba5de2c6c505446486ac0a","affectsGlobalScope":true,"impliedFormat":1},{"version":"68d18b664c9d32a7336a70235958b8997ebc1c3b8505f4f1ae2b7e7753b87618","affectsGlobalScope":true,"impliedFormat":1},{"version":"eb3d66c8327153d8fa7dd03f9c58d351107fe824c79e9b56b462935176cdf12a","affectsGlobalScope":true,"impliedFormat":1},{"version":"38f0219c9e23c915ef9790ab1d680440d95419ad264816fa15009a8851e79119","affectsGlobalScope":true,"impliedFormat":1},{"version":"69ab18c3b76cd9b1be3d188eaf8bba06112ebbe2f47f6c322b5105a6fbc45a2e","affectsGlobalScope":true,"impliedFormat":1},{"version":"fef8cfad2e2dc5f5b3d97a6f4f2e92848eb1b88e897bb7318cef0e2820bceaab","affectsGlobalScope":true,"impliedFormat":1},{"version":"2f11ff796926e0832f9ae148008138ad583bd181899ab7dd768a2666700b1893","affectsGlobalScope":true,"impliedFormat":1},{"version":"4de680d5bb41c17f7f68e0419412ca23c98d5749dcaaea1896172f06435891fc","affectsGlobalScope":true,"impliedFormat":1},{"version":"954296b30da6d508a104a3a0b5d96b76495c709785c1d11610908e63481ee667","affectsGlobalScope":true,"impliedFormat":1},{"version":"ac9538681b19688c8eae65811b329d3744af679e0bdfa5d842d0e32524c73e1c","affectsGlobalScope":true,"impliedFormat":1},{"version":"0a969edff4bd52585473d24995c5ef223f6652d6ef46193309b3921d65dd4376","affectsGlobalScope":true,"impliedFormat":1},{"version":"9e9fbd7030c440b33d021da145d3232984c8bb7916f277e8ffd3dc2e3eae2bdb","affectsGlobalScope":true,"impliedFormat":1},{"version":"811ec78f7fefcabbda4bfa93b3eb67d9ae166ef95f9bff989d964061cbf81a0c","affectsGlobalScope":true,"impliedFormat":1},{"version":"717937616a17072082152a2ef351cb51f98802fb4b2fdabd32399843875974ca","affectsGlobalScope":true,"impliedFormat":1},{"version":"d7e7d9b7b50e5f22c915b525acc5a49a7a6584cf8f62d0569e557c5cfc4b2ac2","affectsGlobalScope":true,"impliedFormat":1},{"version":"71c37f4c9543f31dfced6c7840e068c5a5aacb7b89111a4364b1d5276b852557","affectsGlobalScope":true,"impliedFormat":1},{"version":"576711e016cf4f1804676043e6a0a5414252560eb57de9faceee34d79798c850","affectsGlobalScope":true,"impliedFormat":1},{"version":"89c1b1281ba7b8a96efc676b11b264de7a8374c5ea1e6617f11880a13fc56dc6","affectsGlobalScope":true,"impliedFormat":1},{"version":"74f7fa2d027d5b33eb0471c8e82a6c87216223181ec31247c357a3e8e2fddc5b","affectsGlobalScope":true,"impliedFormat":1},{"version":"d6d7ae4d1f1f3772e2a3cde568ed08991a8ae34a080ff1151af28b7f798e22ca","affectsGlobalScope":true,"impliedFormat":1},{"version":"063600664504610fe3e99b717a1223f8b1900087fab0b4cad1496a114744f8df","affectsGlobalScope":true,"impliedFormat":1},{"version":"934019d7e3c81950f9a8426d093458b65d5aff2c7c1511233c0fd5b941e608ab","affectsGlobalScope":true,"impliedFormat":1},{"version":"52ada8e0b6e0482b728070b7639ee42e83a9b1c22d205992756fe020fd9f4a47","affectsGlobalScope":true,"impliedFormat":1},{"version":"3bdefe1bfd4d6dee0e26f928f93ccc128f1b64d5d501ff4a8cf3c6371200e5e6","affectsGlobalScope":true,"impliedFormat":1},{"version":"59fb2c069260b4ba00b5643b907ef5d5341b167e7d1dbf58dfd895658bda2867","affectsGlobalScope":true,"impliedFormat":1},{"version":"639e512c0dfc3fad96a84caad71b8834d66329a1f28dc95e3946c9b58176c73a","affectsGlobalScope":true,"impliedFormat":1},{"version":"368af93f74c9c932edd84c58883e736c9e3d53cec1fe24c0b0ff451f529ceab1","affectsGlobalScope":true,"impliedFormat":1},{"version":"8e7f8264d0fb4c5339605a15daadb037bf238c10b654bb3eee14208f860a32ea","affectsGlobalScope":true,"impliedFormat":1},{"version":"782dec38049b92d4e85c1585fbea5474a219c6984a35b004963b00beb1aab538","affectsGlobalScope":true,"impliedFormat":1},{"version":"9297ab1e9e3e40a9e95bd4a9d2d397e226e963317970731de71490efa4a34eb2","impliedFormat":99},{"version":"a0815a09aed3b0279eb15c335aaa2fdbaaa1794a76ccb3bd9c6032915c03bb76","affectsGlobalScope":true,"impliedFormat":1},{"version":"af4f7a54357c1868ff9caf7991f1833cdb338c4afcec37a03cf104f3782ddf9b","affectsGlobalScope":true,"impliedFormat":1},{"version":"0e335736c960d3b971ad3ad79159df8252caa29d0a8114a0029e09cfe4a7cbc0","affectsGlobalScope":true,"impliedFormat":1},{"version":"770a83a0cd5cf52044ea1ec7c17ff32608f5b0e75d1cfe72f2fac13add3b8df6","affectsGlobalScope":true,"impliedFormat":1},{"version":"033cc8d0cf4529bc62746a9a026e43454f06f86d560b533e2726e677caf43c5f","affectsGlobalScope":true,"impliedFormat":1},{"version":"56ed2fc77c5587ed572b52c0c679ab284a84254875628d39d63a1ad84aa47993","affectsGlobalScope":true,"impliedFormat":1},{"version":"da04a353ae1f194880392596c1c65bd16039d7cb7d8c95394c8cc833bbeb5600","affectsGlobalScope":true,"impliedFormat":1},{"version":"7f0b457714a6a7dc40d51506cf9e5ab38aec893d78d10dc853d51e4ece6c8a86","affectsGlobalScope":true,"impliedFormat":1},{"version":"42dc1c1fb9a082bfc981edb18b50e12f7fda5009a15468ef6e6f939e86300fbd","affectsGlobalScope":true,"impliedFormat":1},{"version":"4b36ac8539e453915ead7ddf25653d6a7691e6dac52003372c12244965480df2","affectsGlobalScope":true,"impliedFormat":1},{"version":"b98109e756e7e1adf0f305b3f1e9d65a40da0c71ec6d23ffddd9c0ea75cb312a","affectsGlobalScope":true,"impliedFormat":1},{"version":"b3bee285d6a28772aba2633b6bcd9cd53a517f7a4862cf7893197222e73cfddc","affectsGlobalScope":true,"impliedFormat":1},{"version":"122c612162cb2e09d70ebdd670941441e902a26ee79b37f006c5b9d38868ed32","affectsGlobalScope":true,"impliedFormat":1},{"version":"c5af587b79f02783d656cbacf0c2ef79e95b93fb237b313f62e7bb5fbf4e3fe5","affectsGlobalScope":true,"impliedFormat":1},{"version":"f98e2b5fcf96686f2432d1823f195a2ad443762006d7fbda7b4d8d25efd0e384","affectsGlobalScope":true,"impliedFormat":1},{"version":"d3f5b5ecd76cd87ee280a5e72e69f941481e62f12430db4f27aa885c3addfdc7","affectsGlobalScope":true,"impliedFormat":1},{"version":"598710556d7994badb8c5c72d65a602121488d233b70e1c1318faf476a3a76d6","affectsGlobalScope":true,"impliedFormat":1},{"version":"5dabdd06cdb220b33a81312a965f8cab510044ccc522dfac4704baf7ae8aaa79","affectsGlobalScope":true,"impliedFormat":1},{"version":"29c8673e8a6fe0116035c345438591056032a76cad5744c81b5feb039d26789a","affectsGlobalScope":true,"impliedFormat":1},{"version":"9569b7fdc41e43e971cdd193685b085d682a3f2c7243c9a41360521cb21265fa","affectsGlobalScope":true,"impliedFormat":1},{"version":"a66a81b1b7e9582442c41807d62a7baee789e65a8ce6951e6a0b2553a94859a1","affectsGlobalScope":true,"impliedFormat":1},{"version":"f4a2170e218a95ea4352470799614733e6ac9576e9f2d10b57a986dc26763936","affectsGlobalScope":true,"impliedFormat":1},{"version":"1eb62bccdb763ded6f74a2ccd5eb939e3d63fc2a25677409d9c45bd982dec75e","affectsGlobalScope":true,"impliedFormat":1},{"version":"4bcb4739ebaa38c7c8bb85a5b40971ab83809c6f1f217e4d26c4418d9b9b07ad","affectsGlobalScope":true,"impliedFormat":1},{"version":"b83d4344e841547f1f5f791abc348c465b39fc81b1aa3090191e8d38a53a5e70","affectsGlobalScope":true,"impliedFormat":1},{"version":"8f54dfac75c73a9e55bb938d2dab1b48fb6fa8fc677dc7a21c3f90e92dae38b0","affectsGlobalScope":true,"impliedFormat":1},{"version":"ed91ce329a07818d9ad47f86644ec23991b202aca41849e076f2bce1006f1869","affectsGlobalScope":true,"impliedFormat":1},{"version":"3bac8c62839badb7cf43d2a507d8df73e61a5313bb6bf0eb0e373b51b1d94e1b","affectsGlobalScope":true,"impliedFormat":1},{"version":"5d94554e80c2392a2b51be4baad4619268158eccb18d23e5d7107849bc409485","affectsGlobalScope":true,"impliedFormat":1},{"version":"ceb1a78b91d40a8cef51b498546780d8842cd42811597af2c5584fa68defe048","affectsGlobalScope":true,"impliedFormat":1},{"version":"07cc2729a92e8293f16fa19e56aaeb9f350b4442a24724d358073131222e0bae","affectsGlobalScope":true,"impliedFormat":1},{"version":"9f352c8cba96c98d43bc7bcc5c807626c466df52c2d8168da48e969d1a9d994f","affectsGlobalScope":true,"impliedFormat":1},{"version":"fbaebab968e6f4a972ce9ef52028f07ab258bafe8944e18a490397361fcb8133","affectsGlobalScope":true,"impliedFormat":1},"11c1903fa9bdb7d530e60ad15aecb663c227c2962dcacdf752198c7085150a50",{"version":"a1a6b891bcafdeab5e9f1ba28d18e76f7ce3cc1dfebe68ae1884373863125e76","impliedFormat":1},"48d47f69298df4a2600b0fd8b3d2731d688d6a904995b8bdc09f0814ee5c46f1","4d2d609a8a550012fb8970969ec2959c426a5625d47130543945410117aa99bb",{"version":"c72c1cac28941e61369f6a375dc2991ce838741072f322e94853e323056ef1f5","affectsGlobalScope":true},{"version":"643bf7da4d950cfbebda9875eb6c31480018c8d7b66b580eb89bd6a06e13ba22","affectsGlobalScope":true},{"version":"983964ad2f53906dcac06b217e139d37f1b6324167577a5f244d65a70d93d150","affectsGlobalScope":true},"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855","b8a3f9d0db3a6fa9b64a08d518085813f676ea589152e474377d8c28d9e59533",{"version":"4aa925d66ce2ce3c9673ca50a6218165079efe123bb3ac95dd1368882b2907c3","affectsGlobalScope":true},"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",{"version":"7549e5863a3c96e2c0945fa0860e16dd5263e59ec225a2eb273396b4e68c7808","affectsGlobalScope":true},{"version":"4ac4b59e494ecb87f39b89111d70414e7cb9159b7db968dd27bed6646ba73d46","affectsGlobalScope":true},{"version":"a3be4143a358b4d7a4715a05822d00eeb78d9c2935c264ce48d82ec02d37ffa0","affectsGlobalScope":true},{"version":"211d84242d434b292183db7ebfd542a3a9c064ebfdc0217aff8140cd73d214bf","affectsGlobalScope":true},{"version":"adadc0e566eb5ab4b104212a277bd8584aacf3734455a3b5cf657bbf90594d84","affectsGlobalScope":true},{"version":"220fa276d8acc4fb2f7f4ffe1697713b97b4e6dedea305edb7061baecf8ff5cd","affectsGlobalScope":true},{"version":"9f599e276a5f12e79205d7cca121710d2084604cae9098904db01c1ad59d5d8d","affectsGlobalScope":true},{"version":"4f97a393a51c1f38d00a92f6a85d6fec1f4e44b138991395e53ce284ff654279","affectsGlobalScope":true},{"version":"cc7fbe2c04f1a8997bd24f04dd7c9596d242b9a18cedef08214ba153533ab3f7","affectsGlobalScope":true},{"version":"d700ccd6f475f56727de561dd9a90cb0935b9bd47b9d07cdaeb9f4fc82e75e9f","affectsGlobalScope":true},{"version":"dd7ca4f0ef3661dac7043fb2cdf1b99e008d2b6bc5cd998dd1fa5a2968034984","affectsGlobalScope":true,"impliedFormat":1},"94a8462c3d4072b62cfe9028e367a543f970a0c5154e812f5d0ecaaccfb1a363","3140dca2a082687a84d6bfde0f613d8ebe3e6d1936abfad086b65c7fd988a6d3"],"root":[82,[84,102],104,105],"options":{"allowJs":true,"allowSyntheticDefaultImports":true,"declaration":true,"declarationMap":true,"esModuleInterop":true,"module":99,"outDir":"./","rootDir":"..","skipLibCheck":true,"sourceMap":true,"strict":true,"target":7,"tsBuildInfoFile":"./.tsbuildinfo"},"referencedMap":[[46,1],[47,1],[8,1],[9,1],[11,1],[10,1],[2,1],[12,1],[13,1],[14,1],[15,1],[16,1],[17,1],[18,1],[19,1],[3,1],[20,1],[21,1],[4,1],[22,1],[26,1],[23,1],[24,1],[25,1],[27,1],[28,1],[29,1],[5,1],[30,1],[31,1],[32,1],[33,1],[6,1],[37,1],[34,1],[35,1],[36,1],[38,1],[7,1],[39,1],[44,1],[45,1],[40,1],[41,1],[42,1],[43,1],[1,1],[104,2],[105,1],[48,1],[83,1],[103,1],[49,1],[53,1],[54,1],[50,1],[51,1],[52,1],[55,1],[56,1],[57,1],[58,1],[59,1],[60,1],[80,1],[61,1],[62,3],[81,4],[63,5],[64,1],[66,1],[65,1],[67,1],[68,1],[69,1],[70,1],[71,1],[74,1],[72,1],[73,1],[75,1],[76,1],[77,1],[78,1],[79,5],[82,6],[84,7],[85,6],[86,1],[87,1],[88,1],[89,1],[90,1],[91,1],[92,1],[93,1],[94,1],[97,6],[98,1],[99,1],[95,1],[96,1],[100,1],[101,1],[102,1]],"semanticDiagnosticsPerFile":[[86,[{"start":2781,"length":18,"messageText":"Duplicate function implementation.","category":1,"code":2393},{"start":3664,"length":13,"messageText":"Duplicate function implementation.","category":1,"code":2393},{"start":5226,"length":14,"messageText":"Duplicate function implementation.","category":1,"code":2393},{"start":6320,"length":20,"messageText":"Duplicate function implementation.","category":1,"code":2393},{"start":6759,"length":18,"messageText":"Duplicate function implementation.","category":1,"code":2393},{"start":7198,"length":20,"messageText":"Duplicate function implementation.","category":1,"code":2393}]],[87,[{"start":2806,"length":18,"messageText":"Duplicate function implementation.","category":1,"code":2393},{"start":3689,"length":13,"messageText":"Duplicate function implementation.","category":1,"code":2393},{"start":5327,"length":14,"messageText":"Duplicate function implementation.","category":1,"code":2393},{"start":6482,"length":20,"messageText":"Duplicate function implementation.","category":1,"code":2393},{"start":7534,"length":18,"messageText":"Duplicate function implementation.","category":1,"code":2393},{"start":7972,"length":20,"messageText":"Duplicate function implementation.","category":1,"code":2393}]]],"affectedFilesPendingEmit":[104,105,82,84,85,86,87,88,89,90,91,92,93,94,97,98,99,95,96,100,101,102],"version":"5.8.3"}
1
+ {"fileNames":["../../../../../opt/homebrew/lib/node_modules/typescript/lib/lib.es5.d.ts","../../../../../opt/homebrew/lib/node_modules/typescript/lib/lib.es2015.d.ts","../../../../../opt/homebrew/lib/node_modules/typescript/lib/lib.es2016.d.ts","../../../../../opt/homebrew/lib/node_modules/typescript/lib/lib.es2017.d.ts","../../../../../opt/homebrew/lib/node_modules/typescript/lib/lib.es2018.d.ts","../../../../../opt/homebrew/lib/node_modules/typescript/lib/lib.es2019.d.ts","../../../../../opt/homebrew/lib/node_modules/typescript/lib/lib.es2020.d.ts","../../../../../opt/homebrew/lib/node_modules/typescript/lib/lib.dom.d.ts","../../../../../opt/homebrew/lib/node_modules/typescript/lib/lib.dom.iterable.d.ts","../../../../../opt/homebrew/lib/node_modules/typescript/lib/lib.es2015.core.d.ts","../../../../../opt/homebrew/lib/node_modules/typescript/lib/lib.es2015.collection.d.ts","../../../../../opt/homebrew/lib/node_modules/typescript/lib/lib.es2015.generator.d.ts","../../../../../opt/homebrew/lib/node_modules/typescript/lib/lib.es2015.iterable.d.ts","../../../../../opt/homebrew/lib/node_modules/typescript/lib/lib.es2015.promise.d.ts","../../../../../opt/homebrew/lib/node_modules/typescript/lib/lib.es2015.proxy.d.ts","../../../../../opt/homebrew/lib/node_modules/typescript/lib/lib.es2015.reflect.d.ts","../../../../../opt/homebrew/lib/node_modules/typescript/lib/lib.es2015.symbol.d.ts","../../../../../opt/homebrew/lib/node_modules/typescript/lib/lib.es2015.symbol.wellknown.d.ts","../../../../../opt/homebrew/lib/node_modules/typescript/lib/lib.es2016.array.include.d.ts","../../../../../opt/homebrew/lib/node_modules/typescript/lib/lib.es2016.intl.d.ts","../../../../../opt/homebrew/lib/node_modules/typescript/lib/lib.es2017.arraybuffer.d.ts","../../../../../opt/homebrew/lib/node_modules/typescript/lib/lib.es2017.date.d.ts","../../../../../opt/homebrew/lib/node_modules/typescript/lib/lib.es2017.object.d.ts","../../../../../opt/homebrew/lib/node_modules/typescript/lib/lib.es2017.sharedmemory.d.ts","../../../../../opt/homebrew/lib/node_modules/typescript/lib/lib.es2017.string.d.ts","../../../../../opt/homebrew/lib/node_modules/typescript/lib/lib.es2017.intl.d.ts","../../../../../opt/homebrew/lib/node_modules/typescript/lib/lib.es2017.typedarrays.d.ts","../../../../../opt/homebrew/lib/node_modules/typescript/lib/lib.es2018.asyncgenerator.d.ts","../../../../../opt/homebrew/lib/node_modules/typescript/lib/lib.es2018.asynciterable.d.ts","../../../../../opt/homebrew/lib/node_modules/typescript/lib/lib.es2018.intl.d.ts","../../../../../opt/homebrew/lib/node_modules/typescript/lib/lib.es2018.promise.d.ts","../../../../../opt/homebrew/lib/node_modules/typescript/lib/lib.es2018.regexp.d.ts","../../../../../opt/homebrew/lib/node_modules/typescript/lib/lib.es2019.array.d.ts","../../../../../opt/homebrew/lib/node_modules/typescript/lib/lib.es2019.object.d.ts","../../../../../opt/homebrew/lib/node_modules/typescript/lib/lib.es2019.string.d.ts","../../../../../opt/homebrew/lib/node_modules/typescript/lib/lib.es2019.symbol.d.ts","../../../../../opt/homebrew/lib/node_modules/typescript/lib/lib.es2019.intl.d.ts","../../../../../opt/homebrew/lib/node_modules/typescript/lib/lib.es2020.bigint.d.ts","../../../../../opt/homebrew/lib/node_modules/typescript/lib/lib.es2020.date.d.ts","../../../../../opt/homebrew/lib/node_modules/typescript/lib/lib.es2020.promise.d.ts","../../../../../opt/homebrew/lib/node_modules/typescript/lib/lib.es2020.sharedmemory.d.ts","../../../../../opt/homebrew/lib/node_modules/typescript/lib/lib.es2020.string.d.ts","../../../../../opt/homebrew/lib/node_modules/typescript/lib/lib.es2020.symbol.wellknown.d.ts","../../../../../opt/homebrew/lib/node_modules/typescript/lib/lib.es2020.intl.d.ts","../../../../../opt/homebrew/lib/node_modules/typescript/lib/lib.es2020.number.d.ts","../../../../../opt/homebrew/lib/node_modules/typescript/lib/lib.decorators.d.ts","../../../../../opt/homebrew/lib/node_modules/typescript/lib/lib.decorators.legacy.d.ts","../node_modules/.pnpm/@splinetool+runtime@1.10.91/node_modules/@splinetool/runtime/runtime.d.ts","../node_modules/.pnpm/gsap@3.13.0/node_modules/gsap/types/animation.d.ts","../node_modules/.pnpm/gsap@3.13.0/node_modules/gsap/types/custom-bounce.d.ts","../node_modules/.pnpm/gsap@3.13.0/node_modules/gsap/types/custom-ease.d.ts","../node_modules/.pnpm/gsap@3.13.0/node_modules/gsap/types/custom-wiggle.d.ts","../node_modules/.pnpm/gsap@3.13.0/node_modules/gsap/types/css-plugin.d.ts","../node_modules/.pnpm/gsap@3.13.0/node_modules/gsap/types/css-rule-plugin.d.ts","../node_modules/.pnpm/gsap@3.13.0/node_modules/gsap/types/draggable.d.ts","../node_modules/.pnpm/gsap@3.13.0/node_modules/gsap/types/draw-svg-plugin.d.ts","../node_modules/.pnpm/gsap@3.13.0/node_modules/gsap/types/ease.d.ts","../node_modules/.pnpm/gsap@3.13.0/node_modules/gsap/types/easel-plugin.d.ts","../node_modules/.pnpm/gsap@3.13.0/node_modules/gsap/types/flip.d.ts","../node_modules/.pnpm/gsap@3.13.0/node_modules/gsap/types/gs-dev-tools.d.ts","../node_modules/.pnpm/gsap@3.13.0/node_modules/gsap/types/gsap-plugins.d.ts","../node_modules/.pnpm/gsap@3.13.0/node_modules/gsap/types/gsap-utils.d.ts","../node_modules/.pnpm/gsap@3.13.0/node_modules/gsap/types/inertia-plugin.d.ts","../node_modules/.pnpm/gsap@3.13.0/node_modules/gsap/types/morph-svg-plugin.d.ts","../node_modules/.pnpm/gsap@3.13.0/node_modules/gsap/types/motion-path-plugin.d.ts","../node_modules/.pnpm/gsap@3.13.0/node_modules/gsap/types/motion-path-helper.d.ts","../node_modules/.pnpm/gsap@3.13.0/node_modules/gsap/types/observer.d.ts","../node_modules/.pnpm/gsap@3.13.0/node_modules/gsap/types/physics-2d-plugin.d.ts","../node_modules/.pnpm/gsap@3.13.0/node_modules/gsap/types/physics-props-plugin.d.ts","../node_modules/.pnpm/gsap@3.13.0/node_modules/gsap/types/pixi-plugin.d.ts","../node_modules/.pnpm/gsap@3.13.0/node_modules/gsap/types/scramble-text-plugin.d.ts","../node_modules/.pnpm/gsap@3.13.0/node_modules/gsap/types/scroll-to-plugin.d.ts","../node_modules/.pnpm/gsap@3.13.0/node_modules/gsap/types/scroll-trigger.d.ts","../node_modules/.pnpm/gsap@3.13.0/node_modules/gsap/types/scroll-smoother.d.ts","../node_modules/.pnpm/gsap@3.13.0/node_modules/gsap/types/split-text.d.ts","../node_modules/.pnpm/gsap@3.13.0/node_modules/gsap/types/text-plugin.d.ts","../node_modules/.pnpm/gsap@3.13.0/node_modules/gsap/types/timeline.d.ts","../node_modules/.pnpm/gsap@3.13.0/node_modules/gsap/types/tween.d.ts","../node_modules/.pnpm/gsap@3.13.0/node_modules/gsap/types/utils/velocity-tracker.d.ts","../node_modules/.pnpm/gsap@3.13.0/node_modules/gsap/types/gsap-core.d.ts","../node_modules/.pnpm/gsap@3.13.0/node_modules/gsap/types/index.d.ts","../src/archive/index.ts","../node_modules/.pnpm/@studio-freight+lenis@1.0.42/node_modules/@studio-freight/lenis/dist/types/index.d.ts","../src/archive/lenis.ts","../src/archive/spline.ts","../src/form/book-a-demo.ts","../src/form/utils/initintltelinput.ts","../src/form/index.ts","../src/form/utils/collectformfields.ts","../src/form/utils/initformcontrols.ts","../src/form/utils/updaterequiredfields.ts","../src/form/utils/updateflowtype.ts","../src/form/utils/fillmirrorvalues.ts","../src/form/utils/validateform.ts","../src/form/pricing.ts","../src/global/accordions-v2.ts","../src/global/accordions.ts","../src/global/faqs.ts","../src/global/index.ts","../src/global/loader.ts","../src/glossary/alphabets.js","../src/glossary/index.ts","../src/glossary/old.js","../src/home/depth.ts","../src/home/horizontal-scroll.ts","../src/home/tabs-v2.ts","../src/home/tabs.ts","../src/home/hero-animation/loader.ts","../src/home/hero-animation/scroll.ts","../src/home/hero-animation/torch.ts","../src/marquee/index.ts","../src/slider/freescroll-cards.ts","../src/slider/freescroll-slider.ts","../src/slider/testimonial.ts","../node_modules/.pnpm/esbuild@0.25.5/node_modules/esbuild/lib/main.d.ts","../bin/build.js","../bin/cdn.js"],"fileIdsList":[[50,51,52,53,54,55,56,57,58,59,60,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,80,81],[50,51,52,53,54,55,56,57,58,59,60,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,80,81,115],[50,51,52,53,54,55,56,57,58,59,60,63,64,65,66,67,68,69,70,71,72,73,74,75,76,80,81],[49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81],[50,51,52,53,54,55,56,57,58,59,60,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,79,80,81],[48,50,51,52,53,54,55,56,57,58,59,60,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,80,81],[50,51,52,53,54,55,56,57,58,59,60,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,80,81,83],[50,51,52,53,54,55,56,57,58,59,60,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,80,81,87],[50,51,52,53,54,55,56,57,58,59,60,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,80,81,87,90,91,92,93,94],[50,51,52,53,54,55,56,57,58,59,60,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,80,81,89],[50,51,52,53,54,55,56,57,58,59,60,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,80,81,89,91]],"fileInfos":[{"version":"69684132aeb9b5642cbcd9e22dff7818ff0ee1aa831728af0ecf97d3364d5546","affectsGlobalScope":true,"impliedFormat":1},{"version":"45b7ab580deca34ae9729e97c13cfd999df04416a79116c3bfb483804f85ded4","impliedFormat":1},{"version":"3facaf05f0c5fc569c5649dd359892c98a85557e3e0c847964caeb67076f4d75","impliedFormat":1},{"version":"e44bb8bbac7f10ecc786703fe0a6a4b952189f908707980ba8f3c8975a760962","impliedFormat":1},{"version":"5e1c4c362065a6b95ff952c0eab010f04dcd2c3494e813b493ecfd4fcb9fc0d8","impliedFormat":1},{"version":"68d73b4a11549f9c0b7d352d10e91e5dca8faa3322bfb77b661839c42b1ddec7","impliedFormat":1},{"version":"5efce4fc3c29ea84e8928f97adec086e3dc876365e0982cc8479a07954a3efd4","impliedFormat":1},{"version":"092c2bfe125ce69dbb1223c85d68d4d2397d7d8411867b5cc03cec902c233763","affectsGlobalScope":true,"impliedFormat":1},{"version":"07f073f19d67f74d732b1adea08e1dc66b1b58d77cb5b43931dee3d798a2fd53","affectsGlobalScope":true,"impliedFormat":1},{"version":"c57796738e7f83dbc4b8e65132f11a377649c00dd3eee333f672b8f0a6bea671","affectsGlobalScope":true,"impliedFormat":1},{"version":"dc2df20b1bcdc8c2d34af4926e2c3ab15ffe1160a63e58b7e09833f616efff44","affectsGlobalScope":true,"impliedFormat":1},{"version":"515d0b7b9bea2e31ea4ec968e9edd2c39d3eebf4a2d5cbd04e88639819ae3b71","affectsGlobalScope":true,"impliedFormat":1},{"version":"0559b1f683ac7505ae451f9a96ce4c3c92bdc71411651ca6ddb0e88baaaad6a3","affectsGlobalScope":true,"impliedFormat":1},{"version":"0dc1e7ceda9b8b9b455c3a2d67b0412feab00bd2f66656cd8850e8831b08b537","affectsGlobalScope":true,"impliedFormat":1},{"version":"ce691fb9e5c64efb9547083e4a34091bcbe5bdb41027e310ebba8f7d96a98671","affectsGlobalScope":true,"impliedFormat":1},{"version":"8d697a2a929a5fcb38b7a65594020fcef05ec1630804a33748829c5ff53640d0","affectsGlobalScope":true,"impliedFormat":1},{"version":"4ff2a353abf8a80ee399af572debb8faab2d33ad38c4b4474cff7f26e7653b8d","affectsGlobalScope":true,"impliedFormat":1},{"version":"936e80ad36a2ee83fc3caf008e7c4c5afe45b3cf3d5c24408f039c1d47bdc1df","affectsGlobalScope":true,"impliedFormat":1},{"version":"d15bea3d62cbbdb9797079416b8ac375ae99162a7fba5de2c6c505446486ac0a","affectsGlobalScope":true,"impliedFormat":1},{"version":"68d18b664c9d32a7336a70235958b8997ebc1c3b8505f4f1ae2b7e7753b87618","affectsGlobalScope":true,"impliedFormat":1},{"version":"eb3d66c8327153d8fa7dd03f9c58d351107fe824c79e9b56b462935176cdf12a","affectsGlobalScope":true,"impliedFormat":1},{"version":"38f0219c9e23c915ef9790ab1d680440d95419ad264816fa15009a8851e79119","affectsGlobalScope":true,"impliedFormat":1},{"version":"69ab18c3b76cd9b1be3d188eaf8bba06112ebbe2f47f6c322b5105a6fbc45a2e","affectsGlobalScope":true,"impliedFormat":1},{"version":"fef8cfad2e2dc5f5b3d97a6f4f2e92848eb1b88e897bb7318cef0e2820bceaab","affectsGlobalScope":true,"impliedFormat":1},{"version":"2f11ff796926e0832f9ae148008138ad583bd181899ab7dd768a2666700b1893","affectsGlobalScope":true,"impliedFormat":1},{"version":"4de680d5bb41c17f7f68e0419412ca23c98d5749dcaaea1896172f06435891fc","affectsGlobalScope":true,"impliedFormat":1},{"version":"954296b30da6d508a104a3a0b5d96b76495c709785c1d11610908e63481ee667","affectsGlobalScope":true,"impliedFormat":1},{"version":"ac9538681b19688c8eae65811b329d3744af679e0bdfa5d842d0e32524c73e1c","affectsGlobalScope":true,"impliedFormat":1},{"version":"0a969edff4bd52585473d24995c5ef223f6652d6ef46193309b3921d65dd4376","affectsGlobalScope":true,"impliedFormat":1},{"version":"9e9fbd7030c440b33d021da145d3232984c8bb7916f277e8ffd3dc2e3eae2bdb","affectsGlobalScope":true,"impliedFormat":1},{"version":"811ec78f7fefcabbda4bfa93b3eb67d9ae166ef95f9bff989d964061cbf81a0c","affectsGlobalScope":true,"impliedFormat":1},{"version":"717937616a17072082152a2ef351cb51f98802fb4b2fdabd32399843875974ca","affectsGlobalScope":true,"impliedFormat":1},{"version":"d7e7d9b7b50e5f22c915b525acc5a49a7a6584cf8f62d0569e557c5cfc4b2ac2","affectsGlobalScope":true,"impliedFormat":1},{"version":"71c37f4c9543f31dfced6c7840e068c5a5aacb7b89111a4364b1d5276b852557","affectsGlobalScope":true,"impliedFormat":1},{"version":"576711e016cf4f1804676043e6a0a5414252560eb57de9faceee34d79798c850","affectsGlobalScope":true,"impliedFormat":1},{"version":"89c1b1281ba7b8a96efc676b11b264de7a8374c5ea1e6617f11880a13fc56dc6","affectsGlobalScope":true,"impliedFormat":1},{"version":"74f7fa2d027d5b33eb0471c8e82a6c87216223181ec31247c357a3e8e2fddc5b","affectsGlobalScope":true,"impliedFormat":1},{"version":"d6d7ae4d1f1f3772e2a3cde568ed08991a8ae34a080ff1151af28b7f798e22ca","affectsGlobalScope":true,"impliedFormat":1},{"version":"063600664504610fe3e99b717a1223f8b1900087fab0b4cad1496a114744f8df","affectsGlobalScope":true,"impliedFormat":1},{"version":"934019d7e3c81950f9a8426d093458b65d5aff2c7c1511233c0fd5b941e608ab","affectsGlobalScope":true,"impliedFormat":1},{"version":"52ada8e0b6e0482b728070b7639ee42e83a9b1c22d205992756fe020fd9f4a47","affectsGlobalScope":true,"impliedFormat":1},{"version":"3bdefe1bfd4d6dee0e26f928f93ccc128f1b64d5d501ff4a8cf3c6371200e5e6","affectsGlobalScope":true,"impliedFormat":1},{"version":"59fb2c069260b4ba00b5643b907ef5d5341b167e7d1dbf58dfd895658bda2867","affectsGlobalScope":true,"impliedFormat":1},{"version":"639e512c0dfc3fad96a84caad71b8834d66329a1f28dc95e3946c9b58176c73a","affectsGlobalScope":true,"impliedFormat":1},{"version":"368af93f74c9c932edd84c58883e736c9e3d53cec1fe24c0b0ff451f529ceab1","affectsGlobalScope":true,"impliedFormat":1},{"version":"8e7f8264d0fb4c5339605a15daadb037bf238c10b654bb3eee14208f860a32ea","affectsGlobalScope":true,"impliedFormat":1},{"version":"782dec38049b92d4e85c1585fbea5474a219c6984a35b004963b00beb1aab538","affectsGlobalScope":true,"impliedFormat":1},{"version":"9297ab1e9e3e40a9e95bd4a9d2d397e226e963317970731de71490efa4a34eb2","impliedFormat":99},{"version":"a0815a09aed3b0279eb15c335aaa2fdbaaa1794a76ccb3bd9c6032915c03bb76","affectsGlobalScope":true,"impliedFormat":1},{"version":"af4f7a54357c1868ff9caf7991f1833cdb338c4afcec37a03cf104f3782ddf9b","affectsGlobalScope":true,"impliedFormat":1},{"version":"0e335736c960d3b971ad3ad79159df8252caa29d0a8114a0029e09cfe4a7cbc0","affectsGlobalScope":true,"impliedFormat":1},{"version":"770a83a0cd5cf52044ea1ec7c17ff32608f5b0e75d1cfe72f2fac13add3b8df6","affectsGlobalScope":true,"impliedFormat":1},{"version":"033cc8d0cf4529bc62746a9a026e43454f06f86d560b533e2726e677caf43c5f","affectsGlobalScope":true,"impliedFormat":1},{"version":"56ed2fc77c5587ed572b52c0c679ab284a84254875628d39d63a1ad84aa47993","affectsGlobalScope":true,"impliedFormat":1},{"version":"da04a353ae1f194880392596c1c65bd16039d7cb7d8c95394c8cc833bbeb5600","affectsGlobalScope":true,"impliedFormat":1},{"version":"7f0b457714a6a7dc40d51506cf9e5ab38aec893d78d10dc853d51e4ece6c8a86","affectsGlobalScope":true,"impliedFormat":1},{"version":"42dc1c1fb9a082bfc981edb18b50e12f7fda5009a15468ef6e6f939e86300fbd","affectsGlobalScope":true,"impliedFormat":1},{"version":"4b36ac8539e453915ead7ddf25653d6a7691e6dac52003372c12244965480df2","affectsGlobalScope":true,"impliedFormat":1},{"version":"b98109e756e7e1adf0f305b3f1e9d65a40da0c71ec6d23ffddd9c0ea75cb312a","affectsGlobalScope":true,"impliedFormat":1},{"version":"b3bee285d6a28772aba2633b6bcd9cd53a517f7a4862cf7893197222e73cfddc","affectsGlobalScope":true,"impliedFormat":1},{"version":"122c612162cb2e09d70ebdd670941441e902a26ee79b37f006c5b9d38868ed32","affectsGlobalScope":true,"impliedFormat":1},{"version":"c5af587b79f02783d656cbacf0c2ef79e95b93fb237b313f62e7bb5fbf4e3fe5","affectsGlobalScope":true,"impliedFormat":1},{"version":"f98e2b5fcf96686f2432d1823f195a2ad443762006d7fbda7b4d8d25efd0e384","affectsGlobalScope":true,"impliedFormat":1},{"version":"d3f5b5ecd76cd87ee280a5e72e69f941481e62f12430db4f27aa885c3addfdc7","affectsGlobalScope":true,"impliedFormat":1},{"version":"598710556d7994badb8c5c72d65a602121488d233b70e1c1318faf476a3a76d6","affectsGlobalScope":true,"impliedFormat":1},{"version":"5dabdd06cdb220b33a81312a965f8cab510044ccc522dfac4704baf7ae8aaa79","affectsGlobalScope":true,"impliedFormat":1},{"version":"29c8673e8a6fe0116035c345438591056032a76cad5744c81b5feb039d26789a","affectsGlobalScope":true,"impliedFormat":1},{"version":"9569b7fdc41e43e971cdd193685b085d682a3f2c7243c9a41360521cb21265fa","affectsGlobalScope":true,"impliedFormat":1},{"version":"a66a81b1b7e9582442c41807d62a7baee789e65a8ce6951e6a0b2553a94859a1","affectsGlobalScope":true,"impliedFormat":1},{"version":"f4a2170e218a95ea4352470799614733e6ac9576e9f2d10b57a986dc26763936","affectsGlobalScope":true,"impliedFormat":1},{"version":"1eb62bccdb763ded6f74a2ccd5eb939e3d63fc2a25677409d9c45bd982dec75e","affectsGlobalScope":true,"impliedFormat":1},{"version":"4bcb4739ebaa38c7c8bb85a5b40971ab83809c6f1f217e4d26c4418d9b9b07ad","affectsGlobalScope":true,"impliedFormat":1},{"version":"b83d4344e841547f1f5f791abc348c465b39fc81b1aa3090191e8d38a53a5e70","affectsGlobalScope":true,"impliedFormat":1},{"version":"8f54dfac75c73a9e55bb938d2dab1b48fb6fa8fc677dc7a21c3f90e92dae38b0","affectsGlobalScope":true,"impliedFormat":1},{"version":"ed91ce329a07818d9ad47f86644ec23991b202aca41849e076f2bce1006f1869","affectsGlobalScope":true,"impliedFormat":1},{"version":"3bac8c62839badb7cf43d2a507d8df73e61a5313bb6bf0eb0e373b51b1d94e1b","affectsGlobalScope":true,"impliedFormat":1},{"version":"5d94554e80c2392a2b51be4baad4619268158eccb18d23e5d7107849bc409485","affectsGlobalScope":true,"impliedFormat":1},{"version":"ceb1a78b91d40a8cef51b498546780d8842cd42811597af2c5584fa68defe048","affectsGlobalScope":true,"impliedFormat":1},{"version":"07cc2729a92e8293f16fa19e56aaeb9f350b4442a24724d358073131222e0bae","affectsGlobalScope":true,"impliedFormat":1},{"version":"9f352c8cba96c98d43bc7bcc5c807626c466df52c2d8168da48e969d1a9d994f","affectsGlobalScope":true,"impliedFormat":1},{"version":"fbaebab968e6f4a972ce9ef52028f07ab258bafe8944e18a490397361fcb8133","affectsGlobalScope":true,"impliedFormat":1},{"version":"11c1903fa9bdb7d530e60ad15aecb663c227c2962dcacdf752198c7085150a50","signature":"8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881"},{"version":"a1a6b891bcafdeab5e9f1ba28d18e76f7ce3cc1dfebe68ae1884373863125e76","impliedFormat":1},{"version":"48d47f69298df4a2600b0fd8b3d2731d688d6a904995b8bdc09f0814ee5c46f1","signature":"8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881"},{"version":"4d2d609a8a550012fb8970969ec2959c426a5625d47130543945410117aa99bb","signature":"8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881"},{"version":"902708a44156aa44c0cee4028afc993c4907f67e1038d98100fa8d14e93749d0","signature":"8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881"},{"version":"8a3b49fccabd0b528361b36abeda18fcbfb832dbd192e38ed9eca3d21750e581","signature":"4d33056ae5413f014922d931f81b3e90d060dcbd4d7ae298837eea28f6de4743"},{"version":"5fc59293f9fd24e436ea13a40980fc308a0979b86ca362b0d71f3e000224041a","signature":"8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881"},{"version":"bb3912f4028ddf747da8edf06b80e66d88ddc187f7804327c95ce5130a6ae619","signature":"16bc3467f6c2e4f3dae0bbc78f6bedc379d3c6232a2970c8339bcf21f92a8402"},{"version":"848b0c3261f77c94a8c08ff5b6e6eb5b18c4cbb1803c8ddaeb32791241698e4f","signature":"9100b2b6cdcef7deb7ed4be8e72cedd50d6eb895d1833333f7ca097c1fd53817"},{"version":"c51c4441fb6de0c05f70a08843327a315b3ffe525198996bd04076699da83d39","signature":"75096dfbeb28809d0c52c0f517533114ad4a02110f30f9decf9dc1ed66af7bd8"},{"version":"1aa3e4d926f5510ea2fe92662e9ce095e9b7ec1e08dc98ba4ef66293366d77e6","signature":"7798b5561356ceb2451347f969064a9583adc7a593d5c353c69cc33155573728"},{"version":"cccdb1efd35e9709e29433ccd951ec00764430c834a90c876a3ba7e132e36493","signature":"730e888c1d16a4f30e15ad72b4249ed8131582161ac30eed633276b2e9c52494"},{"version":"f91744d80493c5987c6471c175df5e4478daa5629dadfa34a3a07b6c8186bbc6","signature":"6eb932d5253be849b48cf59ac6b5b0a27ab89479e55b326527132344f42e1dce"},{"version":"7397c577c489a07224eb6a50b34f2b8d65b9c55262ef8d89a275bf9ad2dc63a7","signature":"8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881"},{"version":"46788c74dafa1dcafe79ec48a8d862dfbe86603cd4adab1fde184fd55213b28d","signature":"14e6edfcfc2db204bc9bf5faad8d7cded218d6923998817a97d2abbbae84b758","affectsGlobalScope":true},{"version":"643bf7da4d950cfbebda9875eb6c31480018c8d7b66b580eb89bd6a06e13ba22","signature":"d2cec74985d8f670812a16a604f259828d8353ad816e8b47f902bc0755ac74f5","affectsGlobalScope":true},{"version":"983964ad2f53906dcac06b217e139d37f1b6324167577a5f244d65a70d93d150","signature":"270e76a412d3b700090d2a3c9151b51748d773067fc716545cb2021d32c96c85","affectsGlobalScope":true},"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",{"version":"b8a3f9d0db3a6fa9b64a08d518085813f676ea589152e474377d8c28d9e59533","signature":"f33001c29e9dbde58620a4a18ba6014f45d0198438f0541fe21eb87ee9dfc0e5"},{"version":"4aa925d66ce2ce3c9673ca50a6218165079efe123bb3ac95dd1368882b2907c3","signature":"b3557fa4f494e76ddb8a55918ad11e5c73d97443b0e078e530172e822b536097","affectsGlobalScope":true},"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",{"version":"7549e5863a3c96e2c0945fa0860e16dd5263e59ec225a2eb273396b4e68c7808","signature":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855","affectsGlobalScope":true},{"version":"4ac4b59e494ecb87f39b89111d70414e7cb9159b7db968dd27bed6646ba73d46","signature":"bcbcedfc9db0891b46d6d2a08825a42475fa8771a7418ecc65313333ee6b6325","affectsGlobalScope":true},{"version":"a3be4143a358b4d7a4715a05822d00eeb78d9c2935c264ce48d82ec02d37ffa0","signature":"7021f84110533716167feb4f480b9f99e7117299985a3928019e1c814d4e940a","affectsGlobalScope":true},{"version":"213bca3cac0ba3abec990cfbf45f1a403d7256cef53b76b57468409c2e50d93a","signature":"aa55186cdbe8870e03691b021b9126ea50862ad2b31f8f55d314b8ee1d3ec720","affectsGlobalScope":true},{"version":"211d84242d434b292183db7ebfd542a3a9c064ebfdc0217aff8140cd73d214bf","signature":"b6ec4209e47844db15b31760e1126d3dbf841b1aa7d503a3f8c640c3f19ac905","affectsGlobalScope":true},{"version":"adadc0e566eb5ab4b104212a277bd8584aacf3734455a3b5cf657bbf90594d84","signature":"015cc837bf00efc736af8638fd92f6ac6a9454c9dbecb42b4f1fd15e6383e454","affectsGlobalScope":true},{"version":"220fa276d8acc4fb2f7f4ffe1697713b97b4e6dedea305edb7061baecf8ff5cd","signature":"7665968bcce507c500833be7022b8a86545628c3688b7719fe8fb36b0b004480","affectsGlobalScope":true},{"version":"9f599e276a5f12e79205d7cca121710d2084604cae9098904db01c1ad59d5d8d","signature":"57feaab70419d6b1f50c067154b1d374d3f2bc84d8aa5d9c3c454c8cbe55ec0a","affectsGlobalScope":true},{"version":"d51236b70b5d510a704eedd237f4a1efb4b748039782333f1acd2b96427e1468","signature":"8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881"},{"version":"f640ad8fc22bf70a77e7db101a396916012b1a46d8bbbdd77b1e7ea38bf9fb3f","signature":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855","affectsGlobalScope":true},{"version":"cc7fbe2c04f1a8997bd24f04dd7c9596d242b9a18cedef08214ba153533ab3f7","signature":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855","affectsGlobalScope":true},{"version":"d700ccd6f475f56727de561dd9a90cb0935b9bd47b9d07cdaeb9f4fc82e75e9f","signature":"981b78187314af3a928d965d3cc1873492f32b46620445f609f11669e0b8fca4","affectsGlobalScope":true},{"version":"dd7ca4f0ef3661dac7043fb2cdf1b99e008d2b6bc5cd998dd1fa5a2968034984","affectsGlobalScope":true,"impliedFormat":1},{"version":"f1ae30ad0ae60f04f5ab8488eb1631b066d0a41a624e94eadc58ecb2eb82f598","signature":"8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881"},{"version":"3140dca2a082687a84d6bfde0f613d8ebe3e6d1936abfad086b65c7fd988a6d3","signature":"8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881"}],"root":[82,[84,114],116,117],"options":{"allowJs":true,"allowSyntheticDefaultImports":true,"declaration":true,"declarationMap":true,"esModuleInterop":true,"module":99,"outDir":"./","rootDir":"..","skipLibCheck":true,"sourceMap":true,"strict":true,"target":7,"tsBuildInfoFile":"./.tsbuildinfo"},"referencedMap":[[46,1],[47,1],[8,1],[9,1],[11,1],[10,1],[2,1],[12,1],[13,1],[14,1],[15,1],[16,1],[17,1],[18,1],[19,1],[3,1],[20,1],[21,1],[4,1],[22,1],[26,1],[23,1],[24,1],[25,1],[27,1],[28,1],[29,1],[5,1],[30,1],[31,1],[32,1],[33,1],[6,1],[37,1],[34,1],[35,1],[36,1],[38,1],[7,1],[39,1],[44,1],[45,1],[40,1],[41,1],[42,1],[43,1],[1,1],[116,2],[117,1],[48,1],[83,1],[115,1],[49,1],[53,1],[54,1],[50,1],[51,1],[52,1],[55,1],[56,1],[57,1],[58,1],[59,1],[60,1],[80,1],[61,1],[62,3],[81,4],[63,5],[64,1],[66,1],[65,1],[67,1],[68,1],[69,1],[70,1],[71,1],[74,1],[72,1],[73,1],[75,1],[76,1],[77,1],[78,1],[79,5],[82,6],[84,7],[85,6],[86,1],[88,8],[95,9],[89,1],[93,10],[90,10],[87,1],[92,11],[91,10],[94,10],[96,1],[97,1],[98,1],[99,1],[100,1],[101,1],[102,1],[103,1],[104,1],[108,6],[109,1],[110,1],[105,1],[106,1],[107,1],[111,1],[112,1],[113,1],[114,1]],"semanticDiagnosticsPerFile":[[96,[{"start":3479,"length":18,"messageText":"Duplicate function implementation.","category":1,"code":2393},{"start":4362,"length":13,"messageText":"Duplicate function implementation.","category":1,"code":2393},{"start":6441,"length":14,"messageText":"Duplicate function implementation.","category":1,"code":2393},{"start":8049,"length":20,"messageText":"Duplicate function implementation.","category":1,"code":2393},{"start":8488,"length":18,"messageText":"Duplicate function implementation.","category":1,"code":2393},{"start":8927,"length":20,"messageText":"Duplicate function implementation.","category":1,"code":2393}]],[97,[{"start":2806,"length":18,"messageText":"Duplicate function implementation.","category":1,"code":2393},{"start":3689,"length":13,"messageText":"Duplicate function implementation.","category":1,"code":2393},{"start":5327,"length":14,"messageText":"Duplicate function implementation.","category":1,"code":2393},{"start":6482,"length":20,"messageText":"Duplicate function implementation.","category":1,"code":2393},{"start":7534,"length":18,"messageText":"Duplicate function implementation.","category":1,"code":2393},{"start":7972,"length":20,"messageText":"Duplicate function implementation.","category":1,"code":2393}]]],"affectedFilesPendingEmit":[116,117,82,84,85,86,88,95,89,93,90,87,92,91,94,96,97,98,99,100,101,102,103,104,108,109,110,105,106,107,111,112,113,114],"version":"5.8.3"}
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../src/form/book-a-demo.ts"],
4
- "sourcesContent": ["export { };\n// \u2500\u2500\u2500 Types \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\nconsole.log(\"Book a demo form script loaded\");\n\ntype FormBlockType = \"text\" | \"email\" | \"phone\" | \"checkbox\" | \"radio\" | \"select\" | \"legal\";\ntype RequiredSelection = \"true\" | \"atleast-one\" | \"only-one\";\n\ninterface PulseFormField {\n \"form-block\": FormBlockType;\n \"field-name\": string;\n value: string | string[] | boolean | null;\n required: RequiredSelection | null;\n \"mirror-value\": boolean;\n error: { code: string; message: string } | null;\n}\n\ninterface CalendarEntry {\n type: \"pulse\" | \"industry\";\n name: string;\n \"calender-name\": string;\n \"embed-url\": string;\n}\n\n// \u2500\u2500\u2500 Constants \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\nconst VALID_BLOCK_TYPES: FormBlockType[] = [\n \"text\",\n \"email\",\n \"phone\",\n \"checkbox\",\n \"radio\",\n \"select\",\n \"legal\",\n];\n\nconst CALENDAR_ENTRIES: CalendarEntry[] = [\n {\n type: \"pulse\",\n name: \"pulse\",\n \"calender-name\": \"david\",\n \"embed-url\": \"https://meetings.hubspot.com/valeria-angelini/pulse-valeria-and-alessandra?embed=true\",\n },\n {\n type: \"industry\",\n name: \"Financial Services\",\n \"calender-name\": \"david\",\n \"embed-url\": \"https://meetings.hubspot.com/david-zarate2?embed=true\",\n },\n {\n type: \"industry\",\n name: \"Sports\",\n \"calender-name\": \"steven\",\n \"embed-url\": \"https://meetings.hubspot.com/steven-campos?embed=true\",\n },\n {\n type: \"industry\",\n name: \"Beauty\",\n \"calender-name\": \"albany\",\n \"embed-url\": \"https://meetings.hubspot.com/david-zarate2?embed=true\",\n },\n {\n type: \"industry\",\n name: \"Music\",\n \"calender-name\": \"steven\",\n \"embed-url\": \"https://meetings.hubspot.com/steven-campos?embed=true\",\n },\n {\n type: \"industry\",\n name: \"Customer Packaged Goods\",\n \"calender-name\": \"david\",\n \"embed-url\": \"https://meetings.hubspot.com/david-zarate2?embed=true\",\n },\n {\n type: \"industry\",\n name: \"Other\",\n \"calender-name\": \"david\",\n \"embed-url\": \"https://meetings.hubspot.com/david-zarate2?embed=true\",\n },\n];\n\nconst VALID_REQUIRED_VALUES: RequiredSelection[] = [\n \"true\",\n \"atleast-one\",\n \"only-one\",\n];\n\n// \u2500\u2500\u2500 Error Codes & Messages \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\nconst ERROR_CODES = {\n REQUIRED_INPUT: \"ERR_REQUIRED\",\n REQUIRED_LEGAL: \"ERR_LEGAL_REQUIRED\",\n REQUIRED_SELECT: \"ERR_SELECT_REQUIRED\",\n ATLEAST_ONE: \"ERR_ATLEAST_ONE\",\n ONLY_ONE_NONE: \"ERR_ONLY_ONE_NONE\",\n ONLY_ONE_EXCEEDED: \"ERR_ONLY_ONE_EXCEEDED\",\n INVALID_EMAIL: \"ERR_INVALID_EMAIL\",\n INVALID_PHONE: \"ERR_INVALID_PHONE\",\n PHONE_TOO_SHORT: \"ERR_PHONE_TOO_SHORT\",\n PHONE_TOO_LONG: \"ERR_PHONE_TOO_LONG\",\n PHONE_INVALID_COUNTRY: \"ERR_PHONE_INVALID_COUNTRY\",\n} as const;\n\nconst ERROR_MESSAGES: Record<string, string> = {\n [ERROR_CODES.REQUIRED_INPUT]: \"This field is required.\",\n [ERROR_CODES.REQUIRED_LEGAL]: \"You must accept this to continue.\",\n [ERROR_CODES.REQUIRED_SELECT]: \"Please select an option.\",\n [ERROR_CODES.ATLEAST_ONE]: \"Please select at least one option.\",\n [ERROR_CODES.ONLY_ONE_NONE]: \"Please select one option.\",\n [ERROR_CODES.ONLY_ONE_EXCEEDED]: \"Only one option can be selected.\",\n [ERROR_CODES.INVALID_EMAIL]: \"Please enter a valid email address.\",\n [ERROR_CODES.INVALID_PHONE]: \"Please enter a valid phone number.\",\n [ERROR_CODES.PHONE_TOO_SHORT]: \"Phone number is too short.\",\n [ERROR_CODES.PHONE_TOO_LONG]: \"Phone number is too long.\",\n [ERROR_CODES.PHONE_INVALID_COUNTRY]: \"Invalid country code.\",\n};\n\nconst ERROR_SPAN_CLASS = \"pulse-form-error\";\n\n// \u2500\u2500\u2500 intl-tel-input \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\nconst itiInstances = new Map<HTMLInputElement, any>();\n\nfunction fillCountryCodeInput(iti: any): void {\n try {\n const countryData = iti.getSelectedCountryData?.();\n if (!countryData?.dialCode) return;\n\n const inputs = document.querySelectorAll<HTMLInputElement>(\n 'input[pulse-form-field=\"country-code\"]'\n );\n inputs.forEach((input) => {\n input.value = `+${countryData.dialCode}`;\n });\n } catch (err) {\n console.warn(\"[PulseForm] Error filling country code:\", err);\n }\n}\n\nfunction initIntlTelInput(): void {\n const intlTelInput = (window as any).intlTelInput;\n if (!intlTelInput) {\n console.warn(\n \"[PulseForm] intlTelInput not found on window. \" +\n \"Make sure you include the intl-tel-input script before this script.\\n\" +\n 'e.g. <script src=\"https://cdn.jsdelivr.net/npm/intl-tel-input@25/build/js/intlTelInput.min.js\"></script>'\n );\n return;\n }\n\n const phoneInputs = document.querySelectorAll<HTMLInputElement>(\n '[pulse-form-block=\"phone\"] input[type=\"tel\"]'\n );\n\n phoneInputs.forEach((input) => {\n try {\n const iti = intlTelInput(input, {\n initialCountry: \"us\",\n separateDialCode: true,\n strictMode: false,\n // @ts-ignore \u2014 runtime CDN import, not a TS module\n loadUtils: () => import(\"https://cdn.jsdelivr.net/npm/intl-tel-input@25/build/js/utils.js\"),\n });\n\n itiInstances.set(input, iti);\n\n fillCountryCodeInput(iti);\n\n input.addEventListener(\"countrychange\", () => {\n fillCountryCodeInput(iti);\n });\n\n console.log(\n `[PulseForm] intl-tel-input initialized for \"${input.closest(\"[pulse-form-block]\")?.getAttribute(\"pulse-field-name\") || \"unknown\"}\"`\n );\n } catch (err) {\n console.warn(\"[PulseForm] Failed to init intl-tel-input:\", err);\n }\n });\n}\n\n// \u2500\u2500\u2500 Format Validators \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\nconst PHONE_ITI_ERROR_MAP: Record<number, string> = {\n 0: ERROR_CODES.INVALID_PHONE,\n 1: ERROR_CODES.PHONE_INVALID_COUNTRY,\n 2: ERROR_CODES.PHONE_TOO_SHORT,\n 3: ERROR_CODES.PHONE_TOO_LONG,\n 4: ERROR_CODES.INVALID_PHONE,\n};\n\nfunction validateEmail(value: string): PulseFormField[\"error\"] {\n if (!value) return null;\n const emailRegex = /^[^\\s@]+@[^\\s@]+\\.[^\\s@]+$/;\n if (!emailRegex.test(value)) {\n return { code: ERROR_CODES.INVALID_EMAIL, message: ERROR_MESSAGES[ERROR_CODES.INVALID_EMAIL] };\n }\n return null;\n}\n\nfunction validatePhone(input: HTMLInputElement): PulseFormField[\"error\"] {\n const value = input.value.trim();\n if (!value) return null;\n\n const iti = itiInstances.get(input);\n\n if (iti) {\n try {\n if (iti.isValidNumber()) return null;\n const errorCode: number = iti.getValidationError?.() ?? 0;\n const code = PHONE_ITI_ERROR_MAP[errorCode] || ERROR_CODES.INVALID_PHONE;\n return { code, message: ERROR_MESSAGES[code] };\n } catch {\n return { code: ERROR_CODES.INVALID_PHONE, message: ERROR_MESSAGES[ERROR_CODES.INVALID_PHONE] };\n }\n }\n\n // Fallback: basic digit length\n const digits = value.replace(/\\D/g, \"\");\n if (digits.length < 7)\n return { code: ERROR_CODES.PHONE_TOO_SHORT, message: ERROR_MESSAGES[ERROR_CODES.PHONE_TOO_SHORT] };\n if (digits.length > 15)\n return { code: ERROR_CODES.PHONE_TOO_LONG, message: ERROR_MESSAGES[ERROR_CODES.PHONE_TOO_LONG] };\n return null;\n}\n\n// \u2500\u2500\u2500 Value Extractors \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\nfunction extractTextValue(wrapper: HTMLElement): string | null {\n const input = wrapper.querySelector<HTMLInputElement | HTMLTextAreaElement>(\n \"input, textarea\"\n );\n if (!input) return null;\n return input.value.trim();\n}\n\nfunction extractEmailValue(wrapper: HTMLElement): string | null {\n const input = wrapper.querySelector<HTMLInputElement>('input[type=\"email\"]');\n if (!input) return null;\n return input.value.trim();\n}\n\nfunction extractPhoneValue(wrapper: HTMLElement): string | null {\n const input = wrapper.querySelector<HTMLInputElement>('input[type=\"tel\"]');\n if (!input) return null;\n return input.value.trim();\n}\n\nfunction extractCheckboxValues(wrapper: HTMLElement): string[] {\n const checkboxes = wrapper.querySelectorAll<HTMLInputElement>(\n 'input[type=\"checkbox\"]'\n );\n const values: string[] = [];\n checkboxes.forEach((cb) => {\n if (cb.checked) {\n const name = cb.getAttribute(\"data-name\")?.trim();\n values.push(name || cb.value || \"on\");\n }\n });\n return values;\n}\n\nfunction extractRadioValue(wrapper: HTMLElement): string | null {\n const radios = wrapper.querySelectorAll<HTMLInputElement>(\n 'input[type=\"radio\"]'\n );\n for (const radio of radios) {\n if (radio.checked) {\n const label = radio.closest(\"label\")?.textContent?.trim();\n return label || radio.value || \"on\";\n }\n }\n return null;\n}\n\nfunction extractSelectValue(wrapper: HTMLElement): string | null {\n const select = wrapper.querySelector<HTMLSelectElement>(\"select\");\n if (!select) return null;\n const val = select.value.trim();\n if (!val || select.selectedIndex === 0) return null;\n return val;\n}\n\nfunction extractLegalValue(wrapper: HTMLElement): boolean {\n const checkbox = wrapper.querySelector<HTMLInputElement>(\n 'input[type=\"checkbox\"]'\n );\n if (!checkbox) return false;\n return checkbox.checked;\n}\n\n// \u2500\u2500\u2500 Core Parser \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\nfunction extractValue(\n type: FormBlockType,\n wrapper: HTMLElement\n): PulseFormField[\"value\"] {\n switch (type) {\n case \"text\":\n return extractTextValue(wrapper);\n case \"email\":\n return extractEmailValue(wrapper);\n case \"phone\":\n return extractPhoneValue(wrapper);\n case \"checkbox\":\n return extractCheckboxValues(wrapper);\n case \"radio\":\n return extractRadioValue(wrapper);\n case \"select\":\n return extractSelectValue(wrapper);\n case \"legal\":\n return extractLegalValue(wrapper);\n default:\n return null;\n }\n}\n\nfunction parseRequired(wrapper: HTMLElement): RequiredSelection | null {\n const raw = wrapper.getAttribute(\"required-selection\")?.trim().toLowerCase();\n if (!raw || !VALID_REQUIRED_VALUES.includes(raw as RequiredSelection))\n return null;\n return raw as RequiredSelection;\n}\n\nfunction parseMirrorValue(wrapper: HTMLElement): boolean {\n return wrapper.getAttribute(\"mirror-value\")?.trim().toLowerCase() === \"true\";\n}\n\n// \u2500\u2500\u2500 Validation Logic (per field) \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\nfunction getFieldError(\n type: FormBlockType,\n required: RequiredSelection | null,\n value: PulseFormField[\"value\"],\n wrapper: HTMLElement\n): PulseFormField[\"error\"] {\n // 1. Required checks\n if (required) {\n switch (required) {\n case \"true\": {\n if (type === \"legal\" && value !== true)\n return { code: ERROR_CODES.REQUIRED_LEGAL, message: ERROR_MESSAGES[ERROR_CODES.REQUIRED_LEGAL] };\n if (type === \"select\" && !value)\n return { code: ERROR_CODES.REQUIRED_SELECT, message: ERROR_MESSAGES[ERROR_CODES.REQUIRED_SELECT] };\n if (\n (type === \"text\" || type === \"email\" || type === \"phone\") &&\n (!value || (typeof value === \"string\" && value === \"\"))\n )\n return { code: ERROR_CODES.REQUIRED_INPUT, message: ERROR_MESSAGES[ERROR_CODES.REQUIRED_INPUT] };\n break;\n }\n\n case \"atleast-one\": {\n const empty = Array.isArray(value) ? value.length === 0 : !value;\n if (empty)\n return { code: ERROR_CODES.ATLEAST_ONE, message: ERROR_MESSAGES[ERROR_CODES.ATLEAST_ONE] };\n break;\n }\n\n case \"only-one\": {\n if (Array.isArray(value)) {\n if (value.length === 0)\n return { code: ERROR_CODES.ONLY_ONE_NONE, message: ERROR_MESSAGES[ERROR_CODES.ONLY_ONE_NONE] };\n if (value.length > 1)\n return { code: ERROR_CODES.ONLY_ONE_EXCEEDED, message: ERROR_MESSAGES[ERROR_CODES.ONLY_ONE_EXCEEDED] };\n } else if (!value) {\n return { code: ERROR_CODES.ONLY_ONE_NONE, message: ERROR_MESSAGES[ERROR_CODES.ONLY_ONE_NONE] };\n }\n break;\n }\n }\n }\n\n // 2. Format checks (only when there's a value)\n if (type === \"email\" && typeof value === \"string\" && value) {\n const emailError = validateEmail(value);\n if (emailError) return emailError;\n }\n\n if (type === \"phone\" && typeof value === \"string\" && value) {\n const phoneInput = wrapper.querySelector<HTMLInputElement>('input[type=\"tel\"]');\n if (phoneInput) {\n const phoneError = validatePhone(phoneInput);\n if (phoneError) return phoneError;\n }\n }\n\n return null;\n}\n\n// \u2500\u2500\u2500 Collect Fields \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\nfunction collectFormFields(withValidation: boolean): PulseFormField[] {\n const wrappers = document.querySelectorAll<HTMLElement>(\"[pulse-form-block]\");\n const fields: PulseFormField[] = [];\n\n wrappers.forEach((wrapper) => {\n const rawType = wrapper\n .getAttribute(\"pulse-form-block\")\n ?.trim()\n .toLowerCase();\n\n if (!rawType || !VALID_BLOCK_TYPES.includes(rawType as FormBlockType))\n return;\n\n const blockType = rawType as FormBlockType;\n const fieldName = wrapper.getAttribute(\"pulse-field-name\")?.trim();\n if (!fieldName) return;\n\n const required = parseRequired(wrapper);\n const mirrorValue = parseMirrorValue(wrapper);\n const value = extractValue(blockType, wrapper);\n const error = withValidation\n ? getFieldError(blockType, required, value, wrapper)\n : null;\n\n fields.push({\n \"form-block\": blockType,\n \"field-name\": fieldName,\n value,\n required,\n \"mirror-value\": mirrorValue,\n error,\n });\n });\n\n return fields;\n}\n\n// \u2500\u2500\u2500 Error UI \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\nfunction clearAllErrors(): void {\n document\n .querySelectorAll<HTMLElement>(`.${ERROR_SPAN_CLASS}`)\n .forEach((el) => el.remove());\n\n document\n .querySelectorAll<HTMLElement>(\"[pulse-form-block]\")\n .forEach((el) => el.classList.remove(\"has-error\"));\n}\n\nfunction clearErrorOnWrapper(wrapper: HTMLElement): void {\n const span = wrapper.querySelector(`.${ERROR_SPAN_CLASS}`);\n if (span) span.remove();\n wrapper.classList.remove(\"has-error\");\n}\n\nfunction showErrorOnWrapper(\n wrapper: HTMLElement,\n error: { code: string; message: string }\n): void {\n const existing = wrapper.querySelector(`.${ERROR_SPAN_CLASS}`);\n if (existing) existing.remove();\n\n const span = document.createElement(\"span\");\n span.className = ERROR_SPAN_CLASS;\n span.textContent = error.message;\n span.setAttribute(\"data-error-code\", error.code);\n span.setAttribute(\n \"data-field-name\",\n wrapper.getAttribute(\"pulse-field-name\")?.trim() || \"\"\n );\n\n wrapper.classList.add(\"has-error\");\n wrapper.appendChild(span);\n}\n\nfunction renderErrors(fields: PulseFormField[]): void {\n clearAllErrors();\n\n const wrappers = document.querySelectorAll<HTMLElement>(\"[pulse-form-block]\");\n\n wrappers.forEach((wrapper) => {\n const fieldName = wrapper.getAttribute(\"pulse-field-name\")?.trim();\n if (!fieldName) return;\n\n const field = fields.find((f) => f[\"field-name\"] === fieldName);\n if (!field || !field.error) return;\n\n showErrorOnWrapper(wrapper, field.error);\n });\n}\n\nfunction focusFirstError(): void {\n const first = document.querySelector<HTMLElement>(\n `[pulse-form-block].has-error`\n );\n if (!first) return;\n\n first.scrollIntoView({ behavior: \"smooth\", block: \"center\" });\n\n const focusable = first.querySelector<HTMLElement>(\n \"input, textarea, select\"\n );\n if (focusable) setTimeout(() => focusable.focus(), 400);\n}\n\n// \u2500\u2500\u2500 Mirror Value Fill \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\nfunction fillMirrorValues(): void {\n // 1. Get all fields with mirror-value true\n const mirrorFields = _currentFields.filter((f) => f[\"mirror-value\"] === true);\n if (mirrorFields.length === 0) return;\n\n // 2. Select all mirror target elements\n const mirrorTargets = document.querySelectorAll<HTMLElement>(\"[pulse-form-block-mirror]\");\n\n // 3. For each mirror field, find matching target and fill\n mirrorFields.forEach((field) => {\n const fieldName = field[\"field-name\"];\n let found = false;\n\n mirrorTargets.forEach((target) => {\n const mirrorAttr = target.getAttribute(\"pulse-form-block-mirror\")?.trim();\n if (mirrorAttr !== fieldName) return;\n\n found = true;\n\n // Find the input inside the mirror target and fill it\n const input = target.querySelector<HTMLInputElement | HTMLTextAreaElement | HTMLSelectElement>(\n \"input, textarea, select\"\n );\n\n if (!input) {\n console.warn(\n `[PulseForm] Mirror target for \"${fieldName}\" found, but no input element inside it.`\n );\n return;\n }\n\n // Set value based on type\n const value = field.value;\n if (typeof value === \"string\") {\n input.value = value;\n } else if (typeof value === \"boolean\") {\n if (input instanceof HTMLInputElement && input.type === \"checkbox\") {\n input.checked = value;\n } else {\n input.value = String(value);\n }\n } else if (Array.isArray(value)) {\n input.value = value.join(\", \");\n } else {\n input.value = \"\";\n }\n });\n\n if (!found) {\n console.warn(\n `[PulseForm] No mirror target found for field \"${fieldName}\". ` +\n `Add an element with attribute pulse-form-block-mirror=\"${fieldName}\" to mirror this value.`\n );\n }\n });\n}\n\n\nfunction loadCalendarEmbed(): void {\n const container = document.querySelector<HTMLElement>(\"[hs-calender-block]\");\n if (!container) {\n console.warn(\"[PulseForm] No element with attribute 'hs-calender-block' found.\");\n return;\n }\n\n // Determine which entry to use based on flow-type\n const flowField = _currentFields.find((f) => f[\"field-name\"] === \"flow-type\");\n const flowValue = flowField?.value;\n\n let entry: CalendarEntry | undefined;\n\n if (flowValue === \"Pulse demo\") {\n // Use the pulse entry\n entry = CALENDAR_ENTRIES.find((e) => e.type === \"pulse\");\n } else if (flowValue === \"White Glove services\") {\n // Use the industry entry based on selected industry\n const industryField = _currentFields.find((f) => f[\"field-name\"] === \"industry\");\n const industryValue = industryField?.value;\n\n if (typeof industryValue === \"string\" && industryValue) {\n entry = CALENDAR_ENTRIES.find(\n (e) => e.type === \"industry\" && e.name.toLowerCase() === industryValue.toLowerCase()\n );\n }\n }\n\n if (!entry) {\n // Fallback to \"Other\"\n entry = CALENDAR_ENTRIES.find((e) => e.type === \"industry\" && e.name === \"Other\");\n }\n\n if (!entry) {\n console.warn(\"[PulseForm] No matching calendar entry found.\");\n return;\n }\n\n // Clear existing content\n container.innerHTML = \"\";\n\n // Add the HubSpot meetings embed\n const meetingsDiv = document.createElement(\"div\");\n meetingsDiv.className = \"meetings-iframe-container\";\n meetingsDiv.setAttribute(\"data-src\", entry[\"embed-url\"]);\n container.appendChild(meetingsDiv);\n\n // Load the HubSpot embed script\n const script = document.createElement(\"script\");\n script.type = \"text/javascript\";\n script.src = \"https://static.hsappstatic.net/MeetingsEmbed/ex/MeetingsEmbedCode.js\";\n container.appendChild(script);\n\n console.log(`[PulseForm] Loaded calendar: ${entry[\"calender-name\"]} (${entry.name})`);\n}\n\nfunction updateFlowType(): void {\n // 1. Get the value of field-name=\"flow-type\" from the JSON\n const flowField = _currentFields.find((f) => f[\"field-name\"] === \"flow-type\");\n if (!flowField) return;\n\n const flowValue = flowField.value;\n\n // 2. Select all elements with attribute \"form-flow\"\n const flowElements = document.querySelectorAll<HTMLElement>(\"[form-flow]\");\n\n // 3. Set form-flow-active based on matching value\n flowElements.forEach((el) => {\n const elFlowValue = el.getAttribute(\"form-flow\")?.trim();\n if (elFlowValue === flowValue) {\n el.setAttribute(\"form-flow-active\", \"true\");\n } else {\n el.setAttribute(\"form-flow-active\", \"false\");\n }\n });\n\n}\n\n// \u2500\u2500\u2500 Conditional Required \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\nfunction updateConditionalRequired(): void {\n const flowField = _currentFields.find((f) => f[\"field-name\"] === \"flow-type\");\n if (!flowField) return;\n\n const flowValue = flowField.value;\n\n // Reset both fields to not required first\n const industryIdx = _currentFields.findIndex((f) => f[\"field-name\"] === \"industry\");\n const lookingForIdx = _currentFields.findIndex((f) => f[\"field-name\"] === \"what-are-you-looking-for\");\n\n if (industryIdx !== -1) {\n _currentFields[industryIdx] = { ..._currentFields[industryIdx], required: null };\n }\n if (lookingForIdx !== -1) {\n _currentFields[lookingForIdx] = { ..._currentFields[lookingForIdx], required: null };\n }\n\n // Set required based on flow-type value\n if (flowValue === \"White Glove services\" && industryIdx !== -1) {\n _currentFields[industryIdx] = { ..._currentFields[industryIdx], required: \"true\" };\n } else if (flowValue === \"Pulse demo\" && lookingForIdx !== -1) {\n _currentFields[lookingForIdx] = { ..._currentFields[lookingForIdx], required: \"atleast-one\" };\n }\n\n (window as any).PulseFormData = _currentFields;\n}\n\n// \u2500\u2500\u2500 Reactive State \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\nlet _currentFields: PulseFormField[] = [];\n\nfunction updateFieldInState(\n fieldName: string,\n value: PulseFormField[\"value\"],\n error: PulseFormField[\"error\"]\n): void {\n const idx = _currentFields.findIndex((f) => f[\"field-name\"] === fieldName);\n if (idx === -1) return;\n _currentFields[idx] = { ..._currentFields[idx], value, error };\n (window as any).PulseFormData = _currentFields;\n updateConditionalRequired();\n fillMirrorValues();\n updateFlowType();\n}\n\nfunction handleFieldChange(wrapper: HTMLElement): void {\n const rawType = wrapper\n .getAttribute(\"pulse-form-block\")\n ?.trim()\n .toLowerCase() as FormBlockType;\n const fieldName = wrapper.getAttribute(\"pulse-field-name\")?.trim();\n if (!fieldName) return;\n\n const required = parseRequired(wrapper);\n const value = extractValue(rawType, wrapper);\n const hasError = wrapper.classList.contains(\"has-error\");\n\n if (hasError) {\n const error = getFieldError(rawType, required, value, wrapper);\n if (!error) {\n clearErrorOnWrapper(wrapper);\n updateFieldInState(fieldName, value, null);\n } else {\n showErrorOnWrapper(wrapper, error);\n updateFieldInState(fieldName, value, error);\n }\n } else {\n updateFieldInState(fieldName, value, null);\n }\n}\n\nfunction bindChangeListeners(): void {\n const wrappers = document.querySelectorAll<HTMLElement>(\"[pulse-form-block]\");\n\n wrappers.forEach((wrapper) => {\n const type = wrapper\n .getAttribute(\"pulse-form-block\")\n ?.trim()\n .toLowerCase() as FormBlockType | undefined;\n\n if (!type || !VALID_BLOCK_TYPES.includes(type)) return;\n\n const onChange = () => handleFieldChange(wrapper);\n\n switch (type) {\n case \"text\":\n case \"email\": {\n const input = wrapper.querySelector<HTMLInputElement | HTMLTextAreaElement>(\n \"input, textarea\"\n );\n if (input) {\n input.addEventListener(\"input\", onChange);\n input.addEventListener(\"change\", onChange);\n }\n break;\n }\n\n case \"phone\": {\n const phoneInput = wrapper.querySelector<HTMLInputElement>('input[type=\"tel\"]');\n if (phoneInput) {\n phoneInput.addEventListener(\"input\", onChange);\n phoneInput.addEventListener(\"change\", onChange);\n phoneInput.addEventListener(\"keyup\", onChange);\n phoneInput.addEventListener(\"countrychange\", onChange);\n }\n break;\n }\n\n case \"checkbox\":\n case \"legal\": {\n wrapper\n .querySelectorAll<HTMLInputElement>('input[type=\"checkbox\"]')\n .forEach((cb) => cb.addEventListener(\"change\", onChange));\n break;\n }\n\n case \"radio\": {\n wrapper\n .querySelectorAll<HTMLInputElement>('input[type=\"radio\"]')\n .forEach((r) => r.addEventListener(\"change\", onChange));\n break;\n }\n\n case \"select\": {\n const select = wrapper.querySelector<HTMLSelectElement>(\"select\");\n if (select) select.addEventListener(\"change\", onChange);\n break;\n }\n }\n });\n}\n\n// \u2500\u2500\u2500 Public API \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\nconst PulseForm = {\n get fields(): PulseFormField[] {\n return _currentFields;\n },\n\n refresh(): PulseFormField[] {\n _currentFields = collectFormFields(false);\n (window as any).PulseFormData = _currentFields;\n updateConditionalRequired();\n fillMirrorValues();\n updateFlowType();\n return _currentFields;\n },\n\n validate(): { fields: PulseFormField[]; isValid: boolean } {\n const fields = collectFormFields(true);\n\n _currentFields = fields;\n (window as any).PulseFormData = _currentFields;\n updateConditionalRequired();\n\n // Re-validate fields whose required was changed by updateConditionalRequired\n const wrappers = document.querySelectorAll<HTMLElement>(\"[pulse-form-block]\");\n _currentFields.forEach((field, idx) => {\n const wrapper = Array.from(wrappers).find(\n (w) => w.getAttribute(\"pulse-field-name\")?.trim() === field[\"field-name\"]\n );\n if (!wrapper) return;\n const error = getFieldError(\n field[\"form-block\"],\n field.required,\n field.value,\n wrapper\n );\n _currentFields[idx] = { ..._currentFields[idx], error };\n });\n\n (window as any).PulseFormData = _currentFields;\n const isValid = _currentFields.every((f) => f.error === null);\n\n fillMirrorValues();\n updateFlowType();\n\n renderErrors(_currentFields);\n if (!isValid) focusFirstError();\n\n return { fields: _currentFields, isValid };\n },\n\n clearErrors(): void {\n clearAllErrors();\n _currentFields = _currentFields.map((f) => ({ ...f, error: null }));\n (window as any).PulseFormData = _currentFields;\n updateConditionalRequired();\n fillMirrorValues();\n updateFlowType();\n },\n\n ERROR_CODES,\n ERROR_MESSAGES,\n};\n\n// \u2500\u2500\u2500 Initialize on DOM Ready \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\ndocument.addEventListener(\"DOMContentLoaded\", () => {\n const count = document.querySelectorAll(\"[pulse-form-block]\").length;\n console.log(`[PulseForm] Initialized \u2014 found ${count} form blocks.`);\n\n initIntlTelInput();\n\n _currentFields = collectFormFields(false);\n (window as any).PulseFormData = _currentFields;\n updateConditionalRequired();\n fillMirrorValues();\n updateFlowType();\n\n bindChangeListeners();\n\n // \u2500\u2500\u2500 Submit Button \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n const triggerBtn = document.getElementById(\"trigger-webflow-form-submit\");\n if (triggerBtn) {\n triggerBtn.addEventListener(\"click\", (e) => {\n e.preventDefault();\n const { isValid } = PulseForm.validate();\n if (!isValid) return;\n\n\n\n // Change button text\n const originalText = triggerBtn.textContent;\n triggerBtn.textContent = \"Submitting...\";\n\n // Load the calendar embed BEFORE submitting\n loadCalendarEmbed();\n\n const submitBtn = document.getElementById(\"webflow-form-submit\") as HTMLButtonElement | null;\n if (submitBtn) {\n submitBtn.click();\n } else {\n console.warn('[PulseForm] Button with id \"webflow-form-submit\" not found.');\n }\n\n const hubspotBtn = document.getElementById(\"hubspot-form-submit\") as HTMLButtonElement | null;\n if (hubspotBtn) {\n hubspotBtn.click();\n } else {\n console.warn('[PulseForm] Button with id \"hubspot-form-submit\" not found.');\n }\n\n setTimeout(() => {\n document.getElementById(\"form-anchor\")?.scrollIntoView({ behavior: \"smooth\", block: \"start\" });\n }, 700);\n });\n }\n\n (window as any).PulseForm = PulseForm;\n});\n\n// \u2500\u2500\u2500 \u26A0\uFE0F DEV ONLY \u2014 Remove or disable in production \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\nfunction devAutoFill(): void {\n const firstNames = [\"Jordan\", \"Morgan\", \"Riley\", \"Avery\", \"Quinn\", \"Casey\", \"Blake\", \"Harper\", \"Sage\", \"Rowan\"];\n const lastNames = [\"Nakamura\", \"Lindqvist\", \"Okafor\", \"Brennan\", \"Castellano\", \"Pham\", \"Eriksen\", \"Moreira\", \"Ashworth\", \"Dubois\"];\n const domains = [\"inbox.co\", \"mailbox.org\", \"zipmail.net\", \"postly.io\", \"demobox.dev\"];\n\n const pick = (arr: string[]) => arr[Math.floor(Math.random() * arr.length)];\n const rand = () => Math.random().toString(36).substring(2, 8);\n\n const firstName = pick(firstNames);\n const lastName = pick(lastNames);\n const email = `${firstName.toLowerCase()}.${rand()}@${pick(domains)}`;\n const phone = `${2000000000 + Math.floor(Math.random() * 8000000000)}`;\n\n const fieldMap: Record<string, string> = {\n \"first-name\": firstName,\n \"last-name\": lastName,\n \"email\": email,\n \"phone\": phone,\n \"anything-else\": \"Ignore this is a test form submission\",\n };\n\n Object.entries(fieldMap).forEach(([fieldName, value]) => {\n const wrapper = document.querySelector<HTMLElement>(\n `[pulse-field-name=\"${fieldName}\"]`\n );\n if (!wrapper) return;\n\n if (fieldName === \"phone\") {\n const phoneInput = wrapper.querySelector<HTMLInputElement>('input[type=\"tel\"]');\n if (!phoneInput) return;\n const iti = itiInstances.get(phoneInput);\n if (iti) {\n iti.setNumber(`+1${value}`);\n } else {\n phoneInput.value = value;\n }\n phoneInput.dispatchEvent(new Event(\"input\", { bubbles: true }));\n phoneInput.dispatchEvent(new Event(\"change\", { bubbles: true }));\n phoneInput.dispatchEvent(new Event(\"keyup\", { bubbles: true }));\n return;\n }\n\n const el = fieldName === \"anything-else\"\n ? wrapper.querySelector<HTMLTextAreaElement>(\"textarea\")\n : wrapper.querySelector<HTMLInputElement>(\"input\");\n if (!el) return;\n\n el.value = value;\n el.dispatchEvent(new Event(\"input\", { bubbles: true }));\n el.dispatchEvent(new Event(\"change\", { bubbles: true }));\n });\n\n console.log(\"[PulseForm][DEV] Auto-filled:\", fieldMap);\n}\n\nsetTimeout(devAutoFill, 500);\n// \u2500\u2500\u2500 \u26A0\uFE0F END DEV ONLY \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500"],
5
- "mappings": "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",
4
+ "sourcesContent": ["export { };\n// \u2500\u2500\u2500 Types \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\nconsole.log(\"Book a demo form script loaded\");\n\ntype FormBlockType = \"text\" | \"email\" | \"phone\" | \"checkbox\" | \"radio\" | \"select\" | \"legal\";\ntype RequiredSelection = \"true\" | \"atleast-one\" | \"only-one\";\n\ninterface PulseFormField {\n \"form-block\": FormBlockType;\n \"field-name\": string;\n value: string | string[] | boolean | null;\n required: RequiredSelection | null;\n \"mirror-value\": boolean;\n error: { code: string; message: string } | null;\n}\n\ninterface CalendarEntry {\n type: \"pulse\" | \"industry\";\n name: string;\n \"calender-name\": string;\n \"embed-url\": string;\n}\n\n// \u2500\u2500\u2500 Constants \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\nconst VALID_BLOCK_TYPES: FormBlockType[] = [\n \"text\",\n \"email\",\n \"phone\",\n \"checkbox\",\n \"radio\",\n \"select\",\n \"legal\",\n];\n\nconst CALENDAR_ENTRIES: CalendarEntry[] = [\n {\n type: \"pulse\",\n name: \"pulse\",\n \"calender-name\": \"david\",\n \"embed-url\": \"https://meetings.hubspot.com/valeria-angelini/pulse-valeria-and-alessandra?embed=true\",\n },\n {\n type: \"industry\",\n name: \"Financial Services\",\n \"calender-name\": \"david\",\n \"embed-url\": \"https://meetings.hubspot.com/david-zarate2?embed=true\",\n },\n {\n type: \"industry\",\n name: \"Sports\",\n \"calender-name\": \"steven\",\n \"embed-url\": \"https://meetings.hubspot.com/steven-campos?embed=true\",\n },\n {\n type: \"industry\",\n name: \"Beauty\",\n \"calender-name\": \"albany\",\n \"embed-url\": \"https://meetings.hubspot.com/david-zarate2?embed=true\",\n },\n {\n type: \"industry\",\n name: \"Music\",\n \"calender-name\": \"steven\",\n \"embed-url\": \"https://meetings.hubspot.com/steven-campos?embed=true\",\n },\n {\n type: \"industry\",\n name: \"Customer Packaged Goods\",\n \"calender-name\": \"david\",\n \"embed-url\": \"https://meetings.hubspot.com/david-zarate2?embed=true\",\n },\n {\n type: \"industry\",\n name: \"Other\",\n \"calender-name\": \"david\",\n \"embed-url\": \"https://meetings.hubspot.com/david-zarate2?embed=true\",\n },\n];\n\nconst VALID_REQUIRED_VALUES: RequiredSelection[] = [\n \"true\",\n \"atleast-one\",\n \"only-one\",\n];\n\n// \u2500\u2500\u2500 Error Codes & Messages \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\nconst ERROR_CODES = {\n REQUIRED_INPUT: \"ERR_REQUIRED\",\n REQUIRED_LEGAL: \"ERR_LEGAL_REQUIRED\",\n REQUIRED_SELECT: \"ERR_SELECT_REQUIRED\",\n ATLEAST_ONE: \"ERR_ATLEAST_ONE\",\n ONLY_ONE_NONE: \"ERR_ONLY_ONE_NONE\",\n ONLY_ONE_EXCEEDED: \"ERR_ONLY_ONE_EXCEEDED\",\n INVALID_EMAIL: \"ERR_INVALID_EMAIL\",\n INVALID_PHONE: \"ERR_INVALID_PHONE\",\n PHONE_TOO_SHORT: \"ERR_PHONE_TOO_SHORT\",\n PHONE_TOO_LONG: \"ERR_PHONE_TOO_LONG\",\n PHONE_INVALID_COUNTRY: \"ERR_PHONE_INVALID_COUNTRY\",\n} as const;\n\nconst ERROR_MESSAGES: Record<string, string> = {\n [ERROR_CODES.REQUIRED_INPUT]: \"This field is required.\",\n [ERROR_CODES.REQUIRED_LEGAL]: \"You must accept this to continue.\",\n [ERROR_CODES.REQUIRED_SELECT]: \"Please select an option.\",\n [ERROR_CODES.ATLEAST_ONE]: \"Please select at least one option.\",\n [ERROR_CODES.ONLY_ONE_NONE]: \"Please select one option.\",\n [ERROR_CODES.ONLY_ONE_EXCEEDED]: \"Only one option can be selected.\",\n [ERROR_CODES.INVALID_EMAIL]: \"Please enter a valid email address.\",\n [ERROR_CODES.INVALID_PHONE]: \"Please enter a valid phone number.\",\n [ERROR_CODES.PHONE_TOO_SHORT]: \"Phone number is too short.\",\n [ERROR_CODES.PHONE_TOO_LONG]: \"Phone number is too long.\",\n [ERROR_CODES.PHONE_INVALID_COUNTRY]: \"Invalid country code.\",\n};\n\nconst ERROR_SPAN_CLASS = \"pulse-form-error\";\n\n// \u2500\u2500\u2500 intl-tel-input \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\nconst itiInstances = new Map<HTMLInputElement, any>();\n\nfunction fillCountryCodeInput(iti: any): void {\n try {\n const countryData = iti.getSelectedCountryData?.();\n if (!countryData?.dialCode) return;\n\n const inputs = document.querySelectorAll<HTMLInputElement>(\n 'input[pulse-form-field=\"country-code\"]'\n );\n inputs.forEach((input) => {\n input.value = `+${countryData.dialCode}`;\n });\n } catch (err) {\n console.warn(\"[PulseForm] Error filling country code:\", err);\n }\n}\n\nfunction initIntlTelInput(): void {\n const intlTelInput = (window as any).intlTelInput;\n if (!intlTelInput) {\n console.warn(\n \"[PulseForm] intlTelInput not found on window. \" +\n \"Make sure you include the intl-tel-input script before this script.\\n\" +\n 'e.g. <script src=\"https://cdn.jsdelivr.net/npm/intl-tel-input@25/build/js/intlTelInput.min.js\"></script>'\n );\n return;\n }\n\n const phoneInputs = document.querySelectorAll<HTMLInputElement>(\n '[pulse-form-block=\"phone\"] input[type=\"tel\"]'\n );\n\n phoneInputs.forEach((input) => {\n try {\n const iti = intlTelInput(input, {\n initialCountry: \"us\",\n separateDialCode: true,\n strictMode: false,\n // @ts-ignore \u2014 runtime CDN import, not a TS module\n loadUtils: () => import(\"https://cdn.jsdelivr.net/npm/intl-tel-input@25/build/js/utils.js\"),\n });\n\n itiInstances.set(input, iti);\n\n fillCountryCodeInput(iti);\n\n input.addEventListener(\"countrychange\", () => {\n fillCountryCodeInput(iti);\n });\n\n console.log(\n `[PulseForm] intl-tel-input initialized for \"${input.closest(\"[pulse-form-block]\")?.getAttribute(\"pulse-field-name\") || \"unknown\"}\"`\n );\n } catch (err) {\n console.warn(\"[PulseForm] Failed to init intl-tel-input:\", err);\n }\n });\n}\n\n// \u2500\u2500\u2500 Format Validators \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\nconst PHONE_ITI_ERROR_MAP: Record<number, string> = {\n 0: ERROR_CODES.INVALID_PHONE,\n 1: ERROR_CODES.PHONE_INVALID_COUNTRY,\n 2: ERROR_CODES.PHONE_TOO_SHORT,\n 3: ERROR_CODES.PHONE_TOO_LONG,\n 4: ERROR_CODES.INVALID_PHONE,\n};\n\nfunction validateEmail(value: string): PulseFormField[\"error\"] {\n if (!value) return null;\n const emailRegex = /^[^\\s@]+@[^\\s@]+\\.[^\\s@]+$/;\n if (!emailRegex.test(value)) {\n return { code: ERROR_CODES.INVALID_EMAIL, message: ERROR_MESSAGES[ERROR_CODES.INVALID_EMAIL] };\n }\n return null;\n}\n\nfunction validatePhone(input: HTMLInputElement): PulseFormField[\"error\"] {\n const value = input.value.trim();\n if (!value) return null;\n\n const iti = itiInstances.get(input);\n\n if (iti) {\n try {\n if (iti.isValidNumber()) return null;\n const errorCode: number = iti.getValidationError?.() ?? 0;\n const code = PHONE_ITI_ERROR_MAP[errorCode] || ERROR_CODES.INVALID_PHONE;\n return { code, message: ERROR_MESSAGES[code] };\n } catch {\n return { code: ERROR_CODES.INVALID_PHONE, message: ERROR_MESSAGES[ERROR_CODES.INVALID_PHONE] };\n }\n }\n\n // Fallback: basic digit length\n const digits = value.replace(/\\D/g, \"\");\n if (digits.length < 7)\n return { code: ERROR_CODES.PHONE_TOO_SHORT, message: ERROR_MESSAGES[ERROR_CODES.PHONE_TOO_SHORT] };\n if (digits.length > 15)\n return { code: ERROR_CODES.PHONE_TOO_LONG, message: ERROR_MESSAGES[ERROR_CODES.PHONE_TOO_LONG] };\n return null;\n}\n\n// \u2500\u2500\u2500 Value Extractors \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\nfunction extractTextValue(wrapper: HTMLElement): string | null {\n const input = wrapper.querySelector<HTMLInputElement | HTMLTextAreaElement>(\n \"input, textarea\"\n );\n if (!input) return null;\n return input.value.trim();\n}\n\nfunction extractEmailValue(wrapper: HTMLElement): string | null {\n const input = wrapper.querySelector<HTMLInputElement>('input[type=\"email\"]');\n if (!input) return null;\n return input.value.trim();\n}\n\nfunction extractPhoneValue(wrapper: HTMLElement): string | null {\n const input = wrapper.querySelector<HTMLInputElement>('input[type=\"tel\"]');\n if (!input) return null;\n return input.value.trim();\n}\n\nfunction extractCheckboxValues(wrapper: HTMLElement): string[] {\n const checkboxes = wrapper.querySelectorAll<HTMLInputElement>(\n 'input[type=\"checkbox\"]'\n );\n const values: string[] = [];\n checkboxes.forEach((cb) => {\n if (cb.checked) {\n const name = cb.getAttribute(\"data-name\")?.trim();\n values.push(name || cb.value || \"on\");\n }\n });\n return values;\n}\n\nfunction extractRadioValue(wrapper: HTMLElement): string | null {\n const radios = wrapper.querySelectorAll<HTMLInputElement>(\n 'input[type=\"radio\"]'\n );\n for (const radio of radios) {\n if (radio.checked) {\n const label = radio.closest(\"label\")?.textContent?.trim();\n return label || radio.value || \"on\";\n }\n }\n return null;\n}\n\nfunction extractSelectValue(wrapper: HTMLElement): string | null {\n const select = wrapper.querySelector<HTMLSelectElement>(\"select\");\n if (!select) return null;\n const val = select.value.trim();\n if (!val || select.selectedIndex === 0) return null;\n return val;\n}\n\nfunction extractLegalValue(wrapper: HTMLElement): boolean {\n const checkbox = wrapper.querySelector<HTMLInputElement>(\n 'input[type=\"checkbox\"]'\n );\n if (!checkbox) return false;\n return checkbox.checked;\n}\n\n// \u2500\u2500\u2500 Core Parser \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\nfunction extractValue(\n type: FormBlockType,\n wrapper: HTMLElement\n): PulseFormField[\"value\"] {\n switch (type) {\n case \"text\":\n return extractTextValue(wrapper);\n case \"email\":\n return extractEmailValue(wrapper);\n case \"phone\":\n return extractPhoneValue(wrapper);\n case \"checkbox\":\n return extractCheckboxValues(wrapper);\n case \"radio\":\n return extractRadioValue(wrapper);\n case \"select\":\n return extractSelectValue(wrapper);\n case \"legal\":\n return extractLegalValue(wrapper);\n default:\n return null;\n }\n}\n\nfunction parseRequired(wrapper: HTMLElement): RequiredSelection | null {\n const raw = wrapper.getAttribute(\"required-selection\")?.trim().toLowerCase();\n if (!raw || !VALID_REQUIRED_VALUES.includes(raw as RequiredSelection))\n return null;\n return raw as RequiredSelection;\n}\n\nfunction parseMirrorValue(wrapper: HTMLElement): boolean {\n return wrapper.getAttribute(\"mirror-value\")?.trim().toLowerCase() === \"true\";\n}\n\n// \u2500\u2500\u2500 Validation Logic (per field) \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\nfunction getFieldError(\n type: FormBlockType,\n required: RequiredSelection | null,\n value: PulseFormField[\"value\"],\n wrapper: HTMLElement\n): PulseFormField[\"error\"] {\n // 1. Required checks\n if (required) {\n switch (required) {\n case \"true\": {\n if (type === \"legal\" && value !== true)\n return { code: ERROR_CODES.REQUIRED_LEGAL, message: ERROR_MESSAGES[ERROR_CODES.REQUIRED_LEGAL] };\n if (type === \"select\" && !value)\n return { code: ERROR_CODES.REQUIRED_SELECT, message: ERROR_MESSAGES[ERROR_CODES.REQUIRED_SELECT] };\n if (\n (type === \"text\" || type === \"email\" || type === \"phone\") &&\n (!value || (typeof value === \"string\" && value === \"\"))\n )\n return { code: ERROR_CODES.REQUIRED_INPUT, message: ERROR_MESSAGES[ERROR_CODES.REQUIRED_INPUT] };\n break;\n }\n\n case \"atleast-one\": {\n const empty = Array.isArray(value) ? value.length === 0 : !value;\n if (empty)\n return { code: ERROR_CODES.ATLEAST_ONE, message: ERROR_MESSAGES[ERROR_CODES.ATLEAST_ONE] };\n break;\n }\n\n case \"only-one\": {\n if (Array.isArray(value)) {\n if (value.length === 0)\n return { code: ERROR_CODES.ONLY_ONE_NONE, message: ERROR_MESSAGES[ERROR_CODES.ONLY_ONE_NONE] };\n if (value.length > 1)\n return { code: ERROR_CODES.ONLY_ONE_EXCEEDED, message: ERROR_MESSAGES[ERROR_CODES.ONLY_ONE_EXCEEDED] };\n } else if (!value) {\n return { code: ERROR_CODES.ONLY_ONE_NONE, message: ERROR_MESSAGES[ERROR_CODES.ONLY_ONE_NONE] };\n }\n break;\n }\n }\n }\n\n // 2. Format checks (only when there's a value)\n if (type === \"email\" && typeof value === \"string\" && value) {\n const emailError = validateEmail(value);\n if (emailError) return emailError;\n }\n\n if (type === \"phone\" && typeof value === \"string\" && value) {\n const phoneInput = wrapper.querySelector<HTMLInputElement>('input[type=\"tel\"]');\n if (phoneInput) {\n const phoneError = validatePhone(phoneInput);\n if (phoneError) return phoneError;\n }\n }\n\n return null;\n}\n\n// \u2500\u2500\u2500 Collect Fields \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\nfunction collectFormFields(withValidation: boolean): PulseFormField[] {\n const wrappers = document.querySelectorAll<HTMLElement>(\"[pulse-form-block]\");\n const fields: PulseFormField[] = [];\n\n wrappers.forEach((wrapper) => {\n const rawType = wrapper\n .getAttribute(\"pulse-form-block\")\n ?.trim()\n .toLowerCase();\n\n if (!rawType || !VALID_BLOCK_TYPES.includes(rawType as FormBlockType))\n return;\n\n const blockType = rawType as FormBlockType;\n const fieldName = wrapper.getAttribute(\"pulse-field-name\")?.trim();\n if (!fieldName) return;\n\n const required = parseRequired(wrapper);\n const mirrorValue = parseMirrorValue(wrapper);\n const value = extractValue(blockType, wrapper);\n const error = withValidation\n ? getFieldError(blockType, required, value, wrapper)\n : null;\n\n fields.push({\n \"form-block\": blockType,\n \"field-name\": fieldName,\n value,\n required,\n \"mirror-value\": mirrorValue,\n error,\n });\n });\n\n return fields;\n}\n\n// \u2500\u2500\u2500 Error UI \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\nfunction clearAllErrors(): void {\n document\n .querySelectorAll<HTMLElement>(`.${ERROR_SPAN_CLASS}`)\n .forEach((el) => el.remove());\n\n document\n .querySelectorAll<HTMLElement>(\"[pulse-form-block]\")\n .forEach((el) => el.classList.remove(\"has-error\"));\n}\n\nfunction clearErrorOnWrapper(wrapper: HTMLElement): void {\n const span = wrapper.querySelector(`.${ERROR_SPAN_CLASS}`);\n if (span) span.remove();\n wrapper.classList.remove(\"has-error\");\n}\n\nfunction showErrorOnWrapper(\n wrapper: HTMLElement,\n error: { code: string; message: string }\n): void {\n const existing = wrapper.querySelector(`.${ERROR_SPAN_CLASS}`);\n if (existing) existing.remove();\n\n const span = document.createElement(\"span\");\n span.className = ERROR_SPAN_CLASS;\n span.textContent = error.message;\n span.setAttribute(\"data-error-code\", error.code);\n span.setAttribute(\n \"data-field-name\",\n wrapper.getAttribute(\"pulse-field-name\")?.trim() || \"\"\n );\n\n wrapper.classList.add(\"has-error\");\n wrapper.appendChild(span);\n}\n\nfunction renderErrors(fields: PulseFormField[]): void {\n clearAllErrors();\n\n const wrappers = document.querySelectorAll<HTMLElement>(\"[pulse-form-block]\");\n\n wrappers.forEach((wrapper) => {\n const fieldName = wrapper.getAttribute(\"pulse-field-name\")?.trim();\n if (!fieldName) return;\n\n const field = fields.find((f) => f[\"field-name\"] === fieldName);\n if (!field || !field.error) return;\n\n showErrorOnWrapper(wrapper, field.error);\n });\n}\n\nfunction focusFirstError(): void {\n const first = document.querySelector<HTMLElement>(\n `[pulse-form-block].has-error`\n );\n if (!first) return;\n\n first.scrollIntoView({ behavior: \"smooth\", block: \"center\" });\n\n const focusable = first.querySelector<HTMLElement>(\n \"input, textarea, select\"\n );\n if (focusable) setTimeout(() => focusable.focus(), 400);\n}\n\n// \u2500\u2500\u2500 Mirror Value Fill \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\nfunction fillMirrorValues(): void {\n // 1. Get all fields with mirror-value true\n const mirrorFields = _currentFields.filter((f) => f[\"mirror-value\"] === true);\n if (mirrorFields.length === 0) return;\n\n // 2. Select all mirror target elements\n const mirrorTargets = document.querySelectorAll<HTMLElement>(\"[pulse-form-block-mirror]\");\n\n // 3. For each mirror field, find matching target and fill\n mirrorFields.forEach((field) => {\n const fieldName = field[\"field-name\"];\n let found = false;\n\n mirrorTargets.forEach((target) => {\n const mirrorAttr = target.getAttribute(\"pulse-form-block-mirror\")?.trim();\n if (mirrorAttr !== fieldName) return;\n\n found = true;\n\n // Find the input inside the mirror target and fill it\n const input = target.querySelector<HTMLInputElement | HTMLTextAreaElement | HTMLSelectElement>(\n \"input, textarea, select\"\n );\n\n if (!input) {\n console.warn(\n `[PulseForm] Mirror target for \"${fieldName}\" found, but no input element inside it.`\n );\n return;\n }\n\n // Set value based on type\n const value = field.value;\n if (typeof value === \"string\") {\n input.value = value;\n } else if (typeof value === \"boolean\") {\n if (input instanceof HTMLInputElement && input.type === \"checkbox\") {\n input.checked = value;\n } else {\n input.value = String(value);\n }\n } else if (Array.isArray(value)) {\n input.value = value.join(\", \");\n } else {\n input.value = \"\";\n }\n });\n\n if (!found) {\n console.warn(\n `[PulseForm] No mirror target found for field \"${fieldName}\". ` +\n `Add an element with attribute pulse-form-block-mirror=\"${fieldName}\" to mirror this value.`\n );\n }\n });\n}\n\n\nfunction loadCalendarEmbed(): void {\n const container = document.querySelector<HTMLElement>(\"[hs-calender-block]\");\n if (!container) {\n console.warn(\"[PulseForm] No element with attribute 'hs-calender-block' found.\");\n return;\n }\n\n // Determine which entry to use based on flow-type\n const flowField = _currentFields.find((f) => f[\"field-name\"] === \"flow-type\");\n const flowValue = flowField?.value;\n\n let entry: CalendarEntry | undefined;\n\n if (flowValue === \"Pulse demo\") {\n // Use the pulse entry\n entry = CALENDAR_ENTRIES.find((e) => e.type === \"pulse\");\n } else if (flowValue === \"White Glove services\") {\n // Use the industry entry based on selected industry\n const industryField = _currentFields.find((f) => f[\"field-name\"] === \"industry\");\n const industryValue = industryField?.value;\n\n if (typeof industryValue === \"string\" && industryValue) {\n entry = CALENDAR_ENTRIES.find(\n (e) => e.type === \"industry\" && e.name.toLowerCase() === industryValue.toLowerCase()\n );\n }\n }\n\n if (!entry) {\n // Fallback to \"Other\"\n entry = CALENDAR_ENTRIES.find((e) => e.type === \"industry\" && e.name === \"Other\");\n }\n\n if (!entry) {\n console.warn(\"[PulseForm] No matching calendar entry found.\");\n return;\n }\n\n // Clear existing content\n container.innerHTML = \"\";\n\n // Add the HubSpot meetings embed\n const meetingsDiv = document.createElement(\"div\");\n meetingsDiv.className = \"meetings-iframe-container\";\n meetingsDiv.setAttribute(\"data-src\", entry[\"embed-url\"]);\n container.appendChild(meetingsDiv);\n\n // Load the HubSpot embed script\n const script = document.createElement(\"script\");\n script.type = \"text/javascript\";\n script.src = \"https://static.hsappstatic.net/MeetingsEmbed/ex/MeetingsEmbedCode.js\";\n container.appendChild(script);\n\n console.log(`[PulseForm] Loaded calendar: ${entry[\"calender-name\"]} (${entry.name})`);\n}\n\nfunction updateFlowType(): void {\n // 1. Get the value of field-name=\"flow-type\" from the JSON\n const flowField = _currentFields.find((f) => f[\"field-name\"] === \"flow-type\");\n if (!flowField) return;\n\n const flowValue = flowField.value;\n\n // 2. Select all elements with attribute \"form-flow\"\n const flowElements = document.querySelectorAll<HTMLElement>(\"[form-flow]\");\n\n // 3. Set form-flow-active based on matching value\n flowElements.forEach((el) => {\n const elFlowValue = el.getAttribute(\"form-flow\")?.trim();\n if (elFlowValue === flowValue) {\n el.setAttribute(\"form-flow-active\", \"true\");\n } else {\n el.setAttribute(\"form-flow-active\", \"false\");\n }\n });\n\n}\n\n// \u2500\u2500\u2500 Conditional Required \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\nfunction updateConditionalRequired(): void {\n const flowField = _currentFields.find((f) => f[\"field-name\"] === \"flow-type\");\n if (!flowField) return;\n\n const flowValue = flowField.value;\n\n // Reset both fields to not required first\n const industryIdx = _currentFields.findIndex((f) => f[\"field-name\"] === \"industry\");\n const lookingForIdx = _currentFields.findIndex((f) => f[\"field-name\"] === \"what-are-you-looking-for\");\n\n if (industryIdx !== -1) {\n _currentFields[industryIdx] = { ..._currentFields[industryIdx], required: null };\n }\n if (lookingForIdx !== -1) {\n _currentFields[lookingForIdx] = { ..._currentFields[lookingForIdx], required: null };\n }\n\n // Set required based on flow-type value\n if (flowValue === \"White Glove services\" && industryIdx !== -1) {\n _currentFields[industryIdx] = { ..._currentFields[industryIdx], required: \"true\" };\n } else if (flowValue === \"Pulse demo\" && lookingForIdx !== -1) {\n _currentFields[lookingForIdx] = { ..._currentFields[lookingForIdx], required: \"atleast-one\" };\n }\n\n (window as any).PulseFormData = _currentFields;\n}\n\n// \u2500\u2500\u2500 Reactive State \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\nlet _currentFields: PulseFormField[] = [];\n\nfunction updateFieldInState(\n fieldName: string,\n value: PulseFormField[\"value\"],\n error: PulseFormField[\"error\"]\n): void {\n const idx = _currentFields.findIndex((f) => f[\"field-name\"] === fieldName);\n if (idx === -1) return;\n _currentFields[idx] = { ..._currentFields[idx], value, error };\n (window as any).PulseFormData = _currentFields;\n updateConditionalRequired();\n fillMirrorValues();\n updateFlowType();\n}\n\nfunction handleFieldChange(wrapper: HTMLElement): void {\n const rawType = wrapper\n .getAttribute(\"pulse-form-block\")\n ?.trim()\n .toLowerCase() as FormBlockType;\n const fieldName = wrapper.getAttribute(\"pulse-field-name\")?.trim();\n if (!fieldName) return;\n\n const required = parseRequired(wrapper);\n const value = extractValue(rawType, wrapper);\n const hasError = wrapper.classList.contains(\"has-error\");\n\n if (hasError) {\n const error = getFieldError(rawType, required, value, wrapper);\n if (!error) {\n clearErrorOnWrapper(wrapper);\n updateFieldInState(fieldName, value, null);\n } else {\n showErrorOnWrapper(wrapper, error);\n updateFieldInState(fieldName, value, error);\n }\n } else {\n updateFieldInState(fieldName, value, null);\n }\n}\n\nfunction bindChangeListeners(): void {\n const wrappers = document.querySelectorAll<HTMLElement>(\"[pulse-form-block]\");\n\n wrappers.forEach((wrapper) => {\n const type = wrapper\n .getAttribute(\"pulse-form-block\")\n ?.trim()\n .toLowerCase() as FormBlockType | undefined;\n\n if (!type || !VALID_BLOCK_TYPES.includes(type)) return;\n\n const onChange = () => handleFieldChange(wrapper);\n\n switch (type) {\n case \"text\":\n case \"email\": {\n const input = wrapper.querySelector<HTMLInputElement | HTMLTextAreaElement>(\n \"input, textarea\"\n );\n if (input) {\n input.addEventListener(\"input\", onChange);\n input.addEventListener(\"change\", onChange);\n }\n break;\n }\n\n case \"phone\": {\n const phoneInput = wrapper.querySelector<HTMLInputElement>('input[type=\"tel\"]');\n if (phoneInput) {\n phoneInput.addEventListener(\"input\", onChange);\n phoneInput.addEventListener(\"change\", onChange);\n phoneInput.addEventListener(\"keyup\", onChange);\n phoneInput.addEventListener(\"countrychange\", onChange);\n }\n break;\n }\n\n case \"checkbox\":\n case \"legal\": {\n wrapper\n .querySelectorAll<HTMLInputElement>('input[type=\"checkbox\"]')\n .forEach((cb) => cb.addEventListener(\"change\", onChange));\n break;\n }\n\n case \"radio\": {\n wrapper\n .querySelectorAll<HTMLInputElement>('input[type=\"radio\"]')\n .forEach((r) => r.addEventListener(\"change\", onChange));\n break;\n }\n\n case \"select\": {\n const select = wrapper.querySelector<HTMLSelectElement>(\"select\");\n if (select) select.addEventListener(\"change\", onChange);\n break;\n }\n }\n });\n}\n\n// \u2500\u2500\u2500 Public API \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\nconst PulseForm = {\n get fields(): PulseFormField[] {\n return _currentFields;\n },\n\n refresh(): PulseFormField[] {\n _currentFields = collectFormFields(false);\n (window as any).PulseFormData = _currentFields;\n updateConditionalRequired();\n fillMirrorValues();\n updateFlowType();\n return _currentFields;\n },\n\n validate(): { fields: PulseFormField[]; isValid: boolean } {\n const fields = collectFormFields(true);\n\n _currentFields = fields;\n (window as any).PulseFormData = _currentFields;\n updateConditionalRequired();\n\n // Re-validate fields whose required was changed by updateConditionalRequired\n const wrappers = document.querySelectorAll<HTMLElement>(\"[pulse-form-block]\");\n _currentFields.forEach((field, idx) => {\n const wrapper = Array.from(wrappers).find(\n (w) => w.getAttribute(\"pulse-field-name\")?.trim() === field[\"field-name\"]\n );\n if (!wrapper) return;\n const error = getFieldError(\n field[\"form-block\"],\n field.required,\n field.value,\n wrapper\n );\n _currentFields[idx] = { ..._currentFields[idx], error };\n });\n\n (window as any).PulseFormData = _currentFields;\n const isValid = _currentFields.every((f) => f.error === null);\n\n fillMirrorValues();\n updateFlowType();\n\n renderErrors(_currentFields);\n if (!isValid) focusFirstError();\n\n return { fields: _currentFields, isValid };\n },\n\n clearErrors(): void {\n clearAllErrors();\n _currentFields = _currentFields.map((f) => ({ ...f, error: null }));\n (window as any).PulseFormData = _currentFields;\n updateConditionalRequired();\n fillMirrorValues();\n updateFlowType();\n },\n\n ERROR_CODES,\n ERROR_MESSAGES,\n};\n\n// \u2500\u2500\u2500 Initialize on DOM Ready \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\ndocument.addEventListener(\"DOMContentLoaded\", () => {\n const count = document.querySelectorAll(\"[pulse-form-block]\").length;\n console.log(`[PulseForm] Initialized \u2014 found ${count} form blocks.`);\n\n initIntlTelInput();\n\n _currentFields = collectFormFields(false);\n (window as any).PulseFormData = _currentFields;\n updateConditionalRequired();\n fillMirrorValues();\n updateFlowType();\n\n bindChangeListeners();\n\n // \u2500\u2500\u2500 Submit Button \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n const triggerBtn = document.getElementById(\"trigger-webflow-form-submit\");\n if (triggerBtn) {\n triggerBtn.addEventListener(\"click\", (e) => {\n e.preventDefault();\n const { isValid } = PulseForm.validate();\n if (!isValid) return;\n\n\n\n // Change button text\n const originalText = triggerBtn.textContent;\n triggerBtn.textContent = \"Submitting...\";\n\n // Load the calendar embed BEFORE submitting\n loadCalendarEmbed();\n\n const submitBtn = document.getElementById(\"webflow-form-submit\") as HTMLButtonElement | null;\n if (submitBtn) {\n submitBtn.click();\n } else {\n console.warn('[PulseForm] Button with id \"webflow-form-submit\" not found.');\n }\n\n const hubspotBtn = document.getElementById(\"hubspot-form-submit\") as HTMLButtonElement | null;\n if (hubspotBtn) {\n hubspotBtn.click();\n } else {\n console.warn('[PulseForm] Button with id \"hubspot-form-submit\" not found.');\n }\n\n setTimeout(() => {\n window.scrollTo({ top: 0, behavior: \"smooth\" });\n }, 1200);\n });\n }\n\n (window as any).PulseForm = PulseForm;\n});\n\n// \u2500\u2500\u2500 \u26A0\uFE0F DEV ONLY \u2014 Remove or disable in production \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\nfunction devAutoFill(): void {\n const firstNames = [\"Jordan\", \"Morgan\", \"Riley\", \"Avery\", \"Quinn\", \"Casey\", \"Blake\", \"Harper\", \"Sage\", \"Rowan\"];\n const lastNames = [\"Nakamura\", \"Lindqvist\", \"Okafor\", \"Brennan\", \"Castellano\", \"Pham\", \"Eriksen\", \"Moreira\", \"Ashworth\", \"Dubois\"];\n const domains = [\"inbox.co\", \"mailbox.org\", \"zipmail.net\", \"postly.io\", \"demobox.dev\"];\n\n const pick = (arr: string[]) => arr[Math.floor(Math.random() * arr.length)];\n const rand = () => Math.random().toString(36).substring(2, 8);\n\n const firstName = pick(firstNames);\n const lastName = pick(lastNames);\n const email = `${firstName.toLowerCase()}.${rand()}@${pick(domains)}`;\n const phone = `${2000000000 + Math.floor(Math.random() * 8000000000)}`;\n\n const fieldMap: Record<string, string> = {\n \"first-name\": firstName,\n \"last-name\": lastName,\n \"email\": email,\n \"phone\": phone,\n \"anything-else\": \"Ignore this is a test form submission\",\n };\n\n Object.entries(fieldMap).forEach(([fieldName, value]) => {\n const wrapper = document.querySelector<HTMLElement>(\n `[pulse-field-name=\"${fieldName}\"]`\n );\n if (!wrapper) return;\n\n if (fieldName === \"phone\") {\n const phoneInput = wrapper.querySelector<HTMLInputElement>('input[type=\"tel\"]');\n if (!phoneInput) return;\n const iti = itiInstances.get(phoneInput);\n if (iti) {\n iti.setNumber(`+1${value}`);\n } else {\n phoneInput.value = value;\n }\n phoneInput.dispatchEvent(new Event(\"input\", { bubbles: true }));\n phoneInput.dispatchEvent(new Event(\"change\", { bubbles: true }));\n phoneInput.dispatchEvent(new Event(\"keyup\", { bubbles: true }));\n return;\n }\n\n const el = fieldName === \"anything-else\"\n ? wrapper.querySelector<HTMLTextAreaElement>(\"textarea\")\n : wrapper.querySelector<HTMLInputElement>(\"input\");\n if (!el) return;\n\n el.value = value;\n el.dispatchEvent(new Event(\"input\", { bubbles: true }));\n el.dispatchEvent(new Event(\"change\", { bubbles: true }));\n });\n\n console.log(\"[PulseForm][DEV] Auto-filled:\", fieldMap);\n}\n\n// setTimeout(devAutoFill, 500);\n// \u2500\u2500\u2500 \u26A0\uFE0F END DEV ONLY \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500"],
5
+ "mappings": "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",
6
6
  "names": []
7
7
  }
@@ -0,0 +1,2 @@
1
+ "use strict";(()=>{var S=Object.create;var f=Object.defineProperty;var T=Object.getOwnPropertyDescriptor;var v=Object.getOwnPropertyNames;var g=Object.getPrototypeOf,L=Object.prototype.hasOwnProperty;var M=(l=>typeof require<"u"?require:typeof Proxy<"u"?new Proxy(l,{get:(t,e)=>(typeof require<"u"?require:t)[e]}):l)(function(l){if(typeof require<"u")return require.apply(this,arguments);throw Error('Dynamic require of "'+l+'" is not supported')});var b=(l,t,e,r)=>{if(t&&typeof t=="object"||typeof t=="function")for(let n of v(t))!L.call(l,n)&&n!==e&&f(l,n,{get:()=>t[n],enumerable:!(r=T(t,n))||r.enumerable});return l};var H=(l,t,e)=>(e=l!=null?S(g(l)):{},b(t||!l||!l.__esModule?f(e,"default",{value:l,enumerable:!0}):e,l));function E(l={}){let{root:t=document,initialCountry:e="us",separateDialCode:r=!0,countryCodeSelector:n='input[pulse-form-field="country-code"]',onInit:i,onError:a=c=>console.warn(`[initIntlTelInput] ${c}`)}=l,s=new Map,o=window.intlTelInput;return o?(t.querySelectorAll('input[type="tel"]').forEach(c=>{try{let d=o(c,{initialCountry:e,separateDialCode:r,strictMode:!1,loadUtils:()=>import("https://cdn.jsdelivr.net/npm/intl-tel-input@25/build/js/utils.js")});s.set(c,d),h(d,n),c.addEventListener("countrychange",()=>{h(d,n)}),i?.(c,d)}catch(d){a(`Failed to init on input inside "${q(c)}"`,d)}}),s):(a(`intlTelInput not found on window. Include the script before calling this function.
2
+ e.g. <script src="https://cdn.jsdelivr.net/npm/intl-tel-input@25/build/js/intlTelInput.min.js"><\/script>`),s)}function h(l,t){try{let e=l.getSelectedCountryData?.();if(!e?.dialCode)return;document.querySelectorAll(t).forEach(r=>{r.value=`+${e.dialCode}`})}catch{}}function q(l){return l.closest("[pulse-form-block]")?.getAttribute("pulse-field-name")??"unknown"}var y={required:"This field is required",email_invalid:"Please enter a valid email address",email_company:"Please use your company email address",phone_invalid:"Please enter a valid phone number",selection_required:"Please select at least one option",legal_required:"You must accept this to continue"},I={"pulse-demo":["pulse-demo-only","common-fields"],"white-glove-services":["white-glove-only","common-fields"]},x={1:{heading:"Your info",subheading:"Pulse is launching March 2025. Spots for onboarding cohort 1 are limited.",counter:"Step 1/2"},2:{heading:"Personalize",subheading:"Help us personalize your demo.",counter:"Step 2/2"}},m=class{constructor(t,e){this.currentStepIndex=0;this.stepHasBeenValidated=!1;this.originalRequired=new WeakMap;this.fieldState=new Map;this.form=t,this.itiInstances=e,this.steps=Array.from(t.querySelectorAll('[data-msf="step"]')),this.bindEvents(),this.cacheOriginalRequiredState(),this.initializeFieldState(),this.showStep(0),this.applyFlowConditions(),this.syncAllFieldState()}bindEvents(){this.form.addEventListener("click",t=>{let e=t.target;if(!e)return;let r=e.closest("[data-action]");if(!r)return;let n=r.dataset.action;n==="next"&&(t.preventDefault(),this.next()),n==="back"&&(t.preventDefault(),this.back())}),this.form.addEventListener("submit",t=>{t.preventDefault()}),this.form.addEventListener("input",t=>{let e=t.target;e&&(!(e instanceof HTMLInputElement)&&!(e instanceof HTMLTextAreaElement)&&!(e instanceof HTMLSelectElement)||this.handleLiveValidation())}),this.itiInstances.forEach((t,e)=>{e.addEventListener("countrychange",()=>{this.stepHasBeenValidated&&this.handleLiveValidation()})}),this.form.addEventListener("change",t=>{let e=t.target;e&&e instanceof HTMLInputElement&&e.type==="radio"&&e.name==="flow-type"&&this.applyFlowConditions()}),this.form.addEventListener("input",t=>{let e=t.target;if(!e)return;let r=e.closest("[data-field-key]");if(!r)return;let n=r.dataset.fieldKey;n&&this.updateFieldState(n)}),this.form.addEventListener("change",t=>{let e=t.target;if(!e)return;let r=e.closest("[data-field-key]");if(!r)return;let n=r.dataset.fieldKey;n&&this.updateFieldState(n)})}handleLiveValidation(){if(!this.stepHasBeenValidated)return;let t=this.validateStep(this.currentStepIndex);this.clearErrors(),Object.keys(t).length>0&&this.showErrors(t)}showStep(t){this.steps.forEach((r,n)=>{r.style.display=n===t?"flex":"none"}),this.currentStepIndex=t,this.stepHasBeenValidated=!1,this.clearErrors();let e=t+1;this.updateStepText(e)}next(){this.stepHasBeenValidated=!0;let t=this.validateStep(this.currentStepIndex);if(Object.keys(t).length>0){this.clearErrors(),this.showErrors(t),this.focusFirstError(t);return}this.clearErrors(),this.stepHasBeenValidated=!1;let e=this.currentStepIndex+1;if(e>=this.steps.length){console.log("Validation passed");let n=this.steps[this.currentStepIndex].querySelector('[data-action="next"]');if(n){let s=n.querySelector("[data-action-text]");s&&(s.textContent="Submitting...")}this.mirrorFieldStateToDOM();let i=document.getElementById("webflow-form-submit"),a=document.getElementById("hubspot-form-submit");i&&a?(i.click(),a.click()):console.warn("Submit button not found");return}this.showStep(e)}showErrors(t){Object.entries(t).forEach(([e,r])=>{let n=this.form.querySelector(`[data-required-group="${e}"]`)||this.form.querySelector(`[data-required-legal="${e}"]`);if(n){n.classList.add("has-error");let s=n.querySelector(".field-error");s||(s=document.createElement("div"),s.className="field-error",n.appendChild(s)),s.textContent=y[r],s.setAttribute("data-error-code",r);return}let i=this.form.querySelector(`[name="${e}"]`);if(!i)return;i.classList.add("has-error");let a=i.parentElement?.querySelector(".field-error");a||(a=document.createElement("div"),a.className="field-error",i.parentElement?.appendChild(a)),a.textContent=y[r],a.setAttribute("data-error-code",r)})}clearErrors(){this.form.querySelectorAll(".field-error").forEach(t=>t.remove()),this.form.querySelectorAll(".has-error").forEach(t=>t.classList.remove("has-error"))}back(){let t=this.currentStepIndex-1;t<0||this.showStep(t)}getFieldsForStep(t){let e=this.steps[t];return Array.from(e.querySelectorAll("input, select, textarea"))}validateStep(t){let e={};this.getFieldsForStep(t).forEach(a=>{let s=a.name;if(!s||a.type==="checkbox"||a.type==="radio")return;let o=a.value.trim();if(a.hasAttribute("required")&&!o){e[s]="required";return}if(a.type==="email"&&o){if(!this.isValidEmailFormat(o)){e[s]="email_invalid";return}if(!this.isCompanyEmail(o)){e[s]="email_company";return}}if(a.type==="tel"&&o&&this.validatePhoneField(a)){e[s]="phone_invalid";return}});let n=this.validateRequiredSelectionGroups(t),i=this.validateLegalGroups(t);return{...e,...n,...i}}validateRequiredSelectionGroups(t){let e=this.steps[t],r={};return e.querySelectorAll("[data-required-group]").forEach(i=>{let a=i.dataset.requiredGroup;if(!a)return;let o=Array.from(i.querySelectorAll('input[type="checkbox"], input[type="radio"]')).filter(c=>!c.disabled);if(o.length===0)return;o.some(c=>c.checked)||(r[a]="selection_required")}),r}validateLegalGroups(t){let e=this.steps[t],r={};return e.querySelectorAll("[data-required-legal]").forEach(i=>{let a=i.dataset.requiredLegal;if(!a)return;let s=i.querySelector('input[type="checkbox"]');!s||s.disabled||s.checked||(r[a]="legal_required")}),r}isValidEmailFormat(t){return/^[^\s@]+@[^\s@]+\.[^\s@]+$/.test(t)}isCompanyEmail(t){let e=["gmail.com","yahoo.com","hotmail.com","outlook.com","icloud.com","aol.com"],r=t.split("@")[1]?.toLowerCase();return r?!e.includes(r):!1}validatePhoneField(t){let e=this.itiInstances.get(t);return!e||!t.value.trim()||e.isValidNumber()?null:"phone_invalid"}focusFirstError(t){let e=Object.keys(t)[0];if(!e)return;let r=this.form.querySelector(`[data-required-group="${e}"]`)||this.form.querySelector(`[data-required-legal="${e}"]`);if(r){r.querySelector("input, select, textarea")?.focus();return}this.form.querySelector(`[name="${e}"]`)?.focus()}getFlowType(){let t=this.form.querySelector('[data-required-group="flow-type"]');return t?t.querySelector('input[type="radio"]:checked')?.value??null:null}applyFlowConditions(){let t=this.getFlowType();if(!t)return;let e=I[t]||[];this.form.querySelectorAll("[data-conditional]").forEach(n=>{let i=n.dataset.conditional;if(!i)return;let a=e.includes(i),s=n.querySelectorAll("input, select, textarea");if(a)n.style.display="",s.forEach(o=>{o.disabled=!1,this.originalRequired.get(o)&&o.setAttribute("required","true")});else{n.style.display="none",s.forEach(u=>{u.disabled=!0,u.removeAttribute("required");let c=u.closest("[data-field-key]");if(!c)return;let d=c.dataset.fieldKey;if(!d)return;let p=this.fieldState.get(d);p&&(p.required=!1,p.valid=!0,p.value="",this.fieldState.set(d,p))});let o=n.dataset.fieldKey;if(o){let u=this.fieldState.get(o);u&&(u.required=!1,u.valid=!0,u.value="",this.fieldState.set(o,u))}this.clearErrorsInBlock(n)}}),this.updateValidityForStep(this.currentStepIndex+1)}cacheOriginalRequiredState(){this.form.querySelectorAll("input, select, textarea").forEach(e=>{this.originalRequired.set(e,e.hasAttribute("required"))})}clearErrorsInBlock(t){t.querySelectorAll(".field-error").forEach(e=>e.remove()),t.querySelectorAll(".has-error").forEach(e=>e.classList.remove("has-error"))}initializeFieldState(){this.form.querySelectorAll("[data-field-key]").forEach(e=>{let r=e.dataset.fieldKey;if(!r)return;let n=e.closest("[data-msf='step']"),i=n?Number(n.dataset.step):this.currentStepIndex+1;this.fieldState.set(r,{"field-name":r,value:"",required:!1,valid:!0,"step-number":i})})}updateFieldState(t){let e=this.form.querySelector(`[data-field-key="${t}"]`);if(!e)return;let r="",n=!1;if(e.hasAttribute("data-group")){let o=Array.from(e.querySelectorAll("input[type='radio'], input[type='checkbox']")).filter(u=>!u.disabled);if(n=e.hasAttribute("data-required-group"),o.some(u=>u.type==="radio")){let u=o.find(c=>c.checked);u?r=u.closest("label")?.querySelector("span")?.textContent?.trim()??u.value??"":r=""}else r=o.filter(c=>c.checked).map(c=>c.closest("label")?.querySelector("span")?.textContent?.trim()??c.value??"").join(",")}else if(e.hasAttribute("data-required-legal")){let o=e.querySelector("input[type='checkbox']");o&&!o.disabled&&(n=!0,r=o.checked?"true":"false")}else(e instanceof HTMLInputElement||e instanceof HTMLSelectElement||e instanceof HTMLTextAreaElement)&&(n=e.hasAttribute("required")&&!e.disabled,e instanceof HTMLInputElement&&e.type==="checkbox"?r=e.checked?"true":"false":r=e.value.trim());let i=e.closest("[data-msf='step']"),a=i?Number(i.dataset.step):this.currentStepIndex+1,s=this.fieldState.get(t);s&&(s.value=r,s.required=n,s["step-number"]=a,this.fieldState.set(t,s),this.updateValidityForStep(a))}updateValidityForStep(t){let e=this.steps.findIndex(i=>Number(i.dataset.step)===t);if(e===-1)return;let r=this.validateStep(e);Array.from(this.fieldState.values()).filter(i=>i["step-number"]===t).forEach(i=>{i.valid=!r[i["field-name"]]})}getFormStateJSON(){return Array.from(this.fieldState.values())}updateStepText(t){let e=x[t];if(e){if(e.heading){let r=this.form.querySelector('[data-dynamic-text="heading"]');r&&(r.textContent=e.heading)}if(e.subheading){let r=this.form.querySelector('[data-dynamic-text="subheading"]');r&&(r.textContent=e.subheading)}if(e.counter){let r=this.form.querySelector('[data-dynamic-text="counter"]');r&&(r.textContent=e.counter)}}}syncAllFieldState(){this.fieldState.forEach((t,e)=>{this.updateFieldState(e)})}mirrorFieldStateToDOM(){let t=this.getFormStateJSON(),e=document.getElementById("form-hubspot-book-a-demo");t.forEach(r=>{let n=e?.querySelector(`[data-mirror="${r["field-name"]}"]`);if(!n){console.warn(`[Mirror] No element found with data-mirror="${r["field-name"]}"`);return}n instanceof HTMLInputElement&&n.disabled||(n instanceof HTMLInputElement?n.type==="checkbox"?n.checked=r.value==="true":n.type==="radio"?n.checked=n.value===r.value:n.value=r.value:n.value=r.value)})}};document.addEventListener("DOMContentLoaded",()=>{let l=document.querySelector('[data-msf="form"]');if(!l)return;let t=E({root:l}),e=new m(l,t);window.msf=e});})();
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../src/form/utils/initIntlTelInput.ts", "../../src/form/index.ts"],
4
+ "sourcesContent": ["// \u2500\u2500\u2500 initIntlTelInput.ts \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n// Reusable utility that initialises intl-tel-input on every phone field\n// inside a given root. Returns the instance map so callers can pass it\n// to collectFormFields / validatePhone when needed.\n//\n// Usage:\n// import { initIntlTelInput } from \"./initIntlTelInput\";\n// const itiInstances = initIntlTelInput();\n// const itiInstances = initIntlTelInput({ root: myDiv, initialCountry: \"gb\" });\n// \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\nexport interface IntlTelInputOptions {\n /** Root element to scan for phone inputs. Default: document */\n root?: ParentNode;\n /** ISO-2 country code for default selection. Default: \"us\" */\n initialCountry?: string;\n /** Show dial code separately from the input. Default: true */\n separateDialCode?: boolean;\n /** Selector for hidden input(s) that should receive the dial code. Default: 'input[pulse-form-field=\"country-code\"]' */\n countryCodeSelector?: string;\n /** Called after each input is successfully initialised */\n onInit?: (input: HTMLInputElement, iti: any) => void;\n /** Called when intlTelInput is missing from window or an input fails */\n onError?: (message: string, error?: unknown) => void;\n}\n\n/**\n * Finds every `input[type=\"tel\"]` inside `[pulse-form-block=\"phone\"]`\n * wrappers, attaches intl-tel-input, and returns a Map of\n * `HTMLInputElement \u2192 iti instance` for downstream use (validation, etc.).\n */\nexport function initIntlTelInput(\n options: IntlTelInputOptions = {}\n): Map<HTMLInputElement, any> {\n const {\n root = document,\n initialCountry = \"us\",\n separateDialCode = true,\n countryCodeSelector = 'input[pulse-form-field=\"country-code\"]',\n onInit,\n onError = (msg) => console.warn(`[initIntlTelInput] ${msg}`),\n } = options;\n\n const instances = new Map<HTMLInputElement, any>();\n\n // \u2500\u2500 Guard: library must be loaded first \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n const intlTelInput = (window as any).intlTelInput;\n if (!intlTelInput) {\n onError(\n \"intlTelInput not found on window. \" +\n \"Include the script before calling this function.\\n\" +\n 'e.g. <script src=\"https://cdn.jsdelivr.net/npm/intl-tel-input@25/build/js/intlTelInput.min.js\"></script>'\n );\n return instances;\n }\n\n // \u2500\u2500 Find phone inputs \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n const phoneInputs = root.querySelectorAll<HTMLInputElement>(\n 'input[type=\"tel\"]'\n );\n\n phoneInputs.forEach((input) => {\n try {\n const iti = intlTelInput(input, {\n initialCountry,\n separateDialCode,\n strictMode: false,\n // @ts-ignore \u2014 runtime CDN import\n loadUtils: () =>\n import(\n // @ts-ignore \u2014 runtime CDN import, not a TS module\n \"https://cdn.jsdelivr.net/npm/intl-tel-input@25/build/js/utils.js\"\n ),\n });\n\n instances.set(input, iti);\n\n // Fill hidden country-code input(s) on load + on change\n fillCountryCode(iti, countryCodeSelector);\n input.addEventListener(\"countrychange\", () => {\n fillCountryCode(iti, countryCodeSelector);\n });\n\n onInit?.(input, iti);\n } catch (err) {\n onError(`Failed to init on input inside \"${fieldNameOf(input)}\"`, err);\n }\n });\n\n return instances;\n}\n\n// \u2500\u2500\u2500 Helpers \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\nfunction fillCountryCode(iti: any, selector: string): void {\n try {\n const countryData = iti.getSelectedCountryData?.();\n if (!countryData?.dialCode) return;\n\n document.querySelectorAll<HTMLInputElement>(selector).forEach((input) => {\n input.value = `+${countryData.dialCode}`;\n });\n } catch {\n // silently ignore \u2014 non-critical\n }\n}\n\nfunction fieldNameOf(input: HTMLInputElement): string {\n return (\n input.closest(\"[pulse-form-block]\")?.getAttribute(\"pulse-field-name\") ??\n \"unknown\"\n );\n}", "import { initIntlTelInput } from \"./utils/initIntlTelInput\";\n\ntype StepEl = HTMLElement;\n\ntype ErrorCode =\n | \"required\"\n | \"email_invalid\"\n | \"email_company\"\n | \"phone_invalid\"\n | \"selection_required\"\n | \"legal_required\";\n\nconst ERROR_MESSAGES: Record<ErrorCode, string> = {\n required: \"This field is required\",\n email_invalid: \"Please enter a valid email address\",\n email_company: \"Please use your company email address\",\n phone_invalid: \"Please enter a valid phone number\",\n selection_required: \"Please select at least one option\",\n legal_required: \"You must accept this to continue\"\n};\n\ntype FieldState = {\n \"field-name\": string;\n value: string;\n required: boolean;\n valid: boolean;\n \"step-number\": number;\n};\n\nconst FLOW_CONDITIONS: Record<string, string[]> = {\n \"pulse-demo\": [\n \"pulse-demo-only\",\n \"common-fields\"\n ],\n \"white-glove-services\": [\n \"white-glove-only\",\n \"common-fields\"\n ]\n};\n\nconst STEP_TEXT: Record<number, { heading?: string; subheading?: string; counter?: string }> = {\n 1: {\n heading: \"Your info\",\n subheading: \"Pulse is launching March 2025. Spots for onboarding cohort 1 are limited.\",\n counter: \"Step 1/2\"\n },\n 2: {\n heading: \"Personalize\",\n subheading: \"Help us personalize your demo.\",\n counter: \"Step 2/2\"\n }\n};\n\nclass MultiStepForm {\n private form: HTMLFormElement;\n private steps: StepEl[];\n private currentStepIndex = 0;\n private itiInstances: Map<HTMLInputElement, any>;\n private stepHasBeenValidated = false;\n private originalRequired = new WeakMap<HTMLElement, boolean>();\n private fieldState = new Map<string, FieldState>();\n\n\n constructor(form: HTMLFormElement, itiInstances: Map<HTMLInputElement, any>) {\n this.form = form;\n this.itiInstances = itiInstances;\n\n this.steps = Array.from(\n form.querySelectorAll<HTMLElement>('[data-msf=\"step\"]')\n );\n\n this.bindEvents();\n this.cacheOriginalRequiredState();\n this.initializeFieldState();\n this.showStep(0);\n this.applyFlowConditions();\n this.syncAllFieldState();\n }\n\n private bindEvents() {\n this.form.addEventListener(\"click\", (e) => {\n const target = e.target as HTMLElement | null;\n if (!target) return;\n\n const btn = target.closest<HTMLElement>(\"[data-action]\");\n if (!btn) return;\n\n const action = btn.dataset.action;\n\n if (action === \"next\") {\n e.preventDefault();\n this.next();\n }\n\n if (action === \"back\") {\n e.preventDefault();\n this.back();\n }\n });\n\n // Prevent Webflow native submit until you decide\n this.form.addEventListener(\"submit\", (e) => {\n e.preventDefault();\n });\n\n this.form.addEventListener(\"input\", (e) => {\n const target = e.target as HTMLElement | null;\n if (!target) return;\n\n // Only care about fields\n if (\n !(target instanceof HTMLInputElement) &&\n !(target instanceof HTMLTextAreaElement) &&\n !(target instanceof HTMLSelectElement)\n ) return;\n\n this.handleLiveValidation();\n });\n\n this.itiInstances.forEach((_iti, input) => {\n input.addEventListener(\"countrychange\", () => {\n if (!this.stepHasBeenValidated) return;\n this.handleLiveValidation();\n });\n });\n\n this.form.addEventListener(\"change\", (e) => {\n const target = e.target as HTMLElement | null;\n if (!target) return;\n\n if (\n target instanceof HTMLInputElement &&\n target.type === \"radio\" &&\n target.name === \"flow-type\"\n ) {\n this.applyFlowConditions();\n }\n });\n\n this.form.addEventListener(\"input\", (e) => {\n const target = e.target as HTMLElement | null;\n if (!target) return;\n\n const trackable = target.closest<HTMLElement>(\"[data-field-key]\");\n if (!trackable) return;\n\n const key = trackable.dataset.fieldKey;\n if (!key) return;\n\n this.updateFieldState(key);\n });\n\n this.form.addEventListener(\"change\", (e) => {\n const target = e.target as HTMLElement | null;\n if (!target) return;\n\n const trackable = target.closest<HTMLElement>(\"[data-field-key]\");\n if (!trackable) return;\n\n const key = trackable.dataset.fieldKey;\n if (!key) return;\n\n this.updateFieldState(key);\n });\n }\n\n private handleLiveValidation() {\n if (!this.stepHasBeenValidated) return;\n\n const errors = this.validateStep(this.currentStepIndex);\n\n this.clearErrors();\n\n if (Object.keys(errors).length > 0) {\n this.showErrors(errors);\n }\n }\n private showStep(index: number) {\n this.steps.forEach((step, i) => {\n step.style.display = i === index ? \"flex\" : \"none\";\n });\n\n this.currentStepIndex = index;\n\n this.stepHasBeenValidated = false;\n this.clearErrors();\n\n const stepNumber = index + 1;\n this.updateStepText(stepNumber);\n }\n\n private next() {\n this.stepHasBeenValidated = true;\n\n const errors = this.validateStep(this.currentStepIndex);\n\n if (Object.keys(errors).length > 0) {\n this.clearErrors();\n this.showErrors(errors);\n this.focusFirstError(errors);\n return;\n }\n\n this.clearErrors();\n this.stepHasBeenValidated = false;\n\n const nextIndex = this.currentStepIndex + 1;\n\n // If this is the last step \u2192 treat as submit\n if (nextIndex >= this.steps.length) {\n console.log(\"Validation passed\");\n\n // Find the current step\n const currentStep = this.steps[this.currentStepIndex];\n\n // Find the next button inside this step\n const nextButton = currentStep.querySelector<HTMLElement>('[data-action=\"next\"]');\n\n if (nextButton) {\n const actionTextEl = nextButton.querySelector<HTMLElement>('[data-action-text]');\n if (actionTextEl) {\n actionTextEl.textContent = \"Submitting...\";\n }\n }\n\n this.mirrorFieldStateToDOM();\n\n const webflowSubmitBtn = document.getElementById(\"webflow-form-submit\") as HTMLButtonElement | null;\n const hubspotSubmitBtn = document.getElementById(\"hubspot-form-submit\") as HTMLButtonElement | null;\n\n if (webflowSubmitBtn && hubspotSubmitBtn) {\n webflowSubmitBtn.click();\n hubspotSubmitBtn.click();\n } else {\n console.warn(\"Submit button not found\");\n }\n\n return;\n }\n\n // Otherwise go to next step normally\n this.showStep(nextIndex);\n }\n\n private showErrors(errors: Record<string, ErrorCode>) {\n Object.entries(errors).forEach(([name, message]) => {\n\n // First check for group wrapper\n const groupEl =\n this.form.querySelector<HTMLElement>(`[data-required-group=\"${name}\"]`) ||\n this.form.querySelector<HTMLElement>(`[data-required-legal=\"${name}\"]`);\n\n if (groupEl) {\n groupEl.classList.add(\"has-error\");\n\n let errorEl = groupEl.querySelector<HTMLElement>(\".field-error\");\n if (!errorEl) {\n errorEl = document.createElement(\"div\");\n errorEl.className = \"field-error\";\n groupEl.appendChild(errorEl);\n }\n\n errorEl.textContent = ERROR_MESSAGES[message];\n errorEl.setAttribute(\"data-error-code\", message);\n return;\n }\n\n // Otherwise treat as normal field\n const field = this.form.querySelector<HTMLInputElement>(`[name=\"${name}\"]`);\n if (!field) return;\n\n field.classList.add(\"has-error\");\n\n let errorEl = field.parentElement?.querySelector<HTMLElement>(\".field-error\");\n if (!errorEl) {\n errorEl = document.createElement(\"div\");\n errorEl.className = \"field-error\";\n field.parentElement?.appendChild(errorEl);\n }\n\n errorEl.textContent = ERROR_MESSAGES[message];\n errorEl.setAttribute(\"data-error-code\", message);\n });\n }\n\n private clearErrors() {\n this.form.querySelectorAll(\".field-error\").forEach((el) => el.remove());\n this.form.querySelectorAll(\".has-error\").forEach((el) =>\n el.classList.remove(\"has-error\")\n );\n }\n\n private back() {\n const prevIndex = this.currentStepIndex - 1;\n if (prevIndex < 0) return;\n this.showStep(prevIndex);\n }\n\n private getFieldsForStep(index: number): HTMLInputElement[] {\n const step = this.steps[index];\n return Array.from(\n step.querySelectorAll<HTMLInputElement | HTMLSelectElement | HTMLTextAreaElement>(\n \"input, select, textarea\"\n )\n ) as HTMLInputElement[];\n }\n\n private validateStep(index: number): Record<string, ErrorCode> {\n const errors: Record<string, ErrorCode> = {};\n\n const fields = this.getFieldsForStep(index);\n\n fields.forEach((field) => {\n const name = field.name;\n if (!name) return;\n\n if (field.type === \"checkbox\" || field.type === \"radio\") return;\n\n const value = field.value.trim();\n const isRequired = field.hasAttribute(\"required\");\n\n if (isRequired && !value) {\n errors[name] = \"required\";\n return;\n }\n\n // Custom email validation\n if (field.type === \"email\" && value) {\n if (!this.isValidEmailFormat(value)) {\n errors[name] = \"email_invalid\";\n return;\n }\n\n if (!this.isCompanyEmail(value)) {\n errors[name] = \"email_company\";\n return;\n }\n }\n\n // Custom phone validation\n if (field.type === \"tel\" && value) {\n const phoneError = this.validatePhoneField(field as HTMLInputElement);\n if (phoneError) {\n errors[name] = \"phone_invalid\";\n return;\n }\n }\n });\n\n const selectionGroupErrors = this.validateRequiredSelectionGroups(index);\n const legalErrors = this.validateLegalGroups(index);\n\n return {\n ...errors,\n ...selectionGroupErrors,\n ...legalErrors\n };\n }\n\n private validateRequiredSelectionGroups(index: number): Record<string, ErrorCode> {\n const step = this.steps[index];\n const errors: Record<string, ErrorCode> = {};\n\n const groups = step.querySelectorAll<HTMLElement>(\"[data-required-group]\");\n\n groups.forEach((groupEl) => {\n const groupName = groupEl.dataset.requiredGroup;\n if (!groupName) return;\n\n const inputs = Array.from(\n groupEl.querySelectorAll<HTMLInputElement>(\n 'input[type=\"checkbox\"], input[type=\"radio\"]'\n )\n );\n\n // Only consider enabled inputs\n const enabledInputs = inputs.filter((input) => !input.disabled);\n\n // If no enabled inputs \u2192 group is structurally inactive \u2192 skip validation\n if (enabledInputs.length === 0) return;\n\n const isChecked = enabledInputs.some((input) => input.checked);\n\n if (!isChecked) {\n errors[groupName] = \"selection_required\";\n }\n });\n\n return errors;\n }\n\n private validateLegalGroups(index: number): Record<string, ErrorCode> {\n const step = this.steps[index];\n const errors: Record<string, ErrorCode> = {};\n\n const legalGroups = step.querySelectorAll<HTMLElement>(\"[data-required-legal]\");\n\n legalGroups.forEach((groupEl) => {\n const groupName = groupEl.dataset.requiredLegal;\n if (!groupName) return;\n\n const checkbox = groupEl.querySelector<HTMLInputElement>(\n 'input[type=\"checkbox\"]'\n );\n\n // If checkbox doesn't exist or is disabled \u2192 skip validation\n if (!checkbox || checkbox.disabled) return;\n\n if (!checkbox.checked) {\n errors[groupName] = \"legal_required\";\n }\n });\n\n return errors;\n }\n\n private isValidEmailFormat(email: string): boolean {\n const emailRegex =\n /^[^\\s@]+@[^\\s@]+\\.[^\\s@]+$/;\n return emailRegex.test(email);\n }\n\n private isCompanyEmail(email: string): boolean {\n const publicDomains = [\n \"gmail.com\",\n \"yahoo.com\",\n \"hotmail.com\",\n \"outlook.com\",\n \"icloud.com\",\n \"aol.com\"\n ];\n\n const domain = email.split(\"@\")[1]?.toLowerCase();\n if (!domain) return false;\n\n return !publicDomains.includes(domain);\n }\n private validatePhoneField(field: HTMLInputElement): ErrorCode | null {\n const iti = this.itiInstances.get(field);\n if (!iti) return null;\n\n const value = field.value.trim();\n if (!value) return null;\n\n if (!iti.isValidNumber()) {\n return \"phone_invalid\";\n }\n\n return null;\n }\n\n private focusFirstError(errors: Record<string, ErrorCode>) {\n const firstErrorName = Object.keys(errors)[0];\n if (!firstErrorName) return;\n\n const groupEl =\n this.form.querySelector<HTMLElement>(\n `[data-required-group=\"${firstErrorName}\"]`\n ) ||\n this.form.querySelector<HTMLElement>(\n `[data-required-legal=\"${firstErrorName}\"]`\n );\n\n if (groupEl) {\n const firstInput = groupEl.querySelector<\n HTMLInputElement | HTMLSelectElement | HTMLTextAreaElement\n >(\"input, select, textarea\");\n\n firstInput?.focus();\n return;\n }\n\n const field = this.form.querySelector<\n HTMLInputElement | HTMLSelectElement | HTMLTextAreaElement\n >(`[name=\"${firstErrorName}\"]`);\n\n field?.focus();\n }\n\n private getFlowType(): string | null {\n const flowWrapper = this.form.querySelector<HTMLElement>(\n '[data-required-group=\"flow-type\"]'\n );\n if (!flowWrapper) return null;\n\n const checked = flowWrapper.querySelector<HTMLInputElement>(\n 'input[type=\"radio\"]:checked'\n );\n\n return checked?.value ?? null;\n }\n\n private applyFlowConditions() {\n const flowType = this.getFlowType();\n if (!flowType) return;\n\n const visibleKeys = FLOW_CONDITIONS[flowType] || [];\n\n const conditionalBlocks = this.form.querySelectorAll<HTMLElement>(\n \"[data-conditional]\"\n );\n\n conditionalBlocks.forEach((block) => {\n const key = block.dataset.conditional;\n if (!key) return;\n\n const shouldShow = visibleKeys.includes(key);\n\n const inputs = block.querySelectorAll<\n HTMLInputElement | HTMLSelectElement | HTMLTextAreaElement\n >(\"input, select, textarea\");\n\n if (shouldShow) {\n block.style.display = \"\";\n\n inputs.forEach((input) => {\n input.disabled = false;\n\n const wasRequired = this.originalRequired.get(input);\n if (wasRequired) {\n input.setAttribute(\"required\", \"true\");\n }\n });\n } else {\n block.style.display = \"none\";\n\n inputs.forEach((input) => {\n input.disabled = true;\n input.removeAttribute(\"required\");\n\n // Sync fieldState for hidden inputs\n const trackable = input.closest<HTMLElement>(\"[data-field-key]\");\n if (!trackable) return;\n\n const fieldKey = trackable.dataset.fieldKey;\n if (!fieldKey) return;\n\n const state = this.fieldState.get(fieldKey);\n if (!state) return;\n\n state.required = false;\n state.valid = true;\n state.value = \"\";\n\n this.fieldState.set(fieldKey, state);\n });\n\n // Sync wrapper-level fieldState if wrapper itself is tracked\n const wrapperKey = block.dataset.fieldKey;\n if (wrapperKey) {\n const state = this.fieldState.get(wrapperKey);\n if (state) {\n state.required = false;\n state.valid = true;\n state.value = \"\";\n this.fieldState.set(wrapperKey, state);\n }\n }\n\n this.clearErrorsInBlock(block);\n }\n });\n\n // \uD83D\uDD25 Recalculate validity after structural changes\n this.updateValidityForStep(this.currentStepIndex + 1);\n }\n\n private cacheOriginalRequiredState() {\n const inputs = this.form.querySelectorAll<\n HTMLInputElement | HTMLSelectElement | HTMLTextAreaElement\n >(\"input, select, textarea\");\n\n inputs.forEach((input) => {\n this.originalRequired.set(input, input.hasAttribute(\"required\"));\n });\n }\n\n private clearErrorsInBlock(block: HTMLElement) {\n block.querySelectorAll(\".field-error\").forEach((el) => el.remove());\n block.querySelectorAll(\".has-error\").forEach((el) =>\n el.classList.remove(\"has-error\")\n );\n }\n\n private initializeFieldState() {\n const trackables = this.form.querySelectorAll<HTMLElement>(\n \"[data-field-key]\"\n );\n\n trackables.forEach((el) => {\n const key = el.dataset.fieldKey;\n if (!key) return;\n\n const stepWrapper = el.closest<HTMLElement>(\"[data-msf='step']\");\n const stepNumber = stepWrapper\n ? Number(stepWrapper.dataset.step)\n : this.currentStepIndex + 1;\n\n this.fieldState.set(key, {\n \"field-name\": key,\n value: \"\",\n required: false,\n valid: true,\n \"step-number\": stepNumber\n });\n });\n }\n\n private updateFieldState(key: string) {\n const element = this.form.querySelector<HTMLElement>(\n `[data-field-key=\"${key}\"]`\n );\n if (!element) return;\n\n let value = \"\";\n let required = false;\n\n // If wrapper group\n if (element.hasAttribute(\"data-group\")) {\n const inputs = Array.from(\n element.querySelectorAll<HTMLInputElement>(\n \"input[type='radio'], input[type='checkbox']\"\n )\n ).filter((i) => !i.disabled);\n\n required = element.hasAttribute(\"data-required-group\");\n\n if (inputs.some((i) => i.type === \"radio\")) {\n const checked = inputs.find((i) => i.checked);\n\n if (checked) {\n const span = checked.closest(\"label\")?.querySelector(\"span\");\n value = span?.textContent?.trim() ?? checked.value ?? \"\";\n } else {\n value = \"\";\n }\n } else {\n const checkedValues = inputs\n .filter((i) => i.checked)\n .map((i) => {\n const span = i.closest(\"label\")?.querySelector(\"span\");\n return span?.textContent?.trim() ?? i.value ?? \"\";\n });\n\n value = checkedValues.join(\",\");\n }\n }\n // Legal wrapper\n else if (element.hasAttribute(\"data-required-legal\")) {\n const checkbox = element.querySelector<HTMLInputElement>(\n \"input[type='checkbox']\"\n );\n\n if (checkbox && !checkbox.disabled) {\n required = true;\n value = checkbox.checked ? \"true\" : \"false\";\n }\n }\n // Normal input\n else if (\n element instanceof HTMLInputElement ||\n element instanceof HTMLSelectElement ||\n element instanceof HTMLTextAreaElement\n ) {\n required = element.hasAttribute(\"required\") && !element.disabled;\n\n if (element instanceof HTMLInputElement && element.type === \"checkbox\") {\n value = element.checked ? \"true\" : \"false\";\n } else {\n value = (element as HTMLInputElement | HTMLTextAreaElement | HTMLSelectElement).value.trim();\n }\n }\n\n const stepWrapper = element.closest<HTMLElement>(\"[data-msf='step']\");\n const stepNumber = stepWrapper\n ? Number(stepWrapper.dataset.step)\n : this.currentStepIndex + 1;\n\n const state = this.fieldState.get(key);\n if (!state) return;\n\n state.value = value;\n state.required = required;\n state[\"step-number\"] = stepNumber;\n\n this.fieldState.set(key, state);\n\n this.updateValidityForStep(stepNumber);\n }\n\n private updateValidityForStep(stepNumber: number) {\n const stepIndex = this.steps.findIndex(\n (step) => Number(step.dataset.step) === stepNumber\n );\n\n if (stepIndex === -1) return;\n\n const errors = this.validateStep(stepIndex);\n\n const keysInStep = Array.from(this.fieldState.values()).filter(\n (f) => f[\"step-number\"] === stepNumber\n );\n\n keysInStep.forEach((field) => {\n field.valid = !errors[field[\"field-name\"]];\n });\n }\n\n public getFormStateJSON(): FieldState[] {\n return Array.from(this.fieldState.values());\n }\n\n private updateStepText(stepNumber: number) {\n const config = STEP_TEXT[stepNumber];\n if (!config) return;\n\n if (config.heading) {\n const headingEl = this.form.querySelector<HTMLElement>(\n '[data-dynamic-text=\"heading\"]'\n );\n if (headingEl) headingEl.textContent = config.heading;\n }\n\n if (config.subheading) {\n const subheadingEl = this.form.querySelector<HTMLElement>(\n '[data-dynamic-text=\"subheading\"]'\n );\n if (subheadingEl) subheadingEl.textContent = config.subheading;\n }\n\n if (config.counter) {\n const counterEl = this.form.querySelector<HTMLElement>(\n '[data-dynamic-text=\"counter\"]'\n );\n if (counterEl) counterEl.textContent = config.counter;\n }\n }\n\n private syncAllFieldState() {\n this.fieldState.forEach((_state, key) => {\n this.updateFieldState(key);\n });\n }\n\n private mirrorFieldStateToDOM() {\n const allFields = this.getFormStateJSON();\n const hubspotForm = document.getElementById(\"form-hubspot-book-a-demo\");\n\n allFields.forEach((field) => {\n const mirrorEl = hubspotForm?.querySelector<\n HTMLInputElement | HTMLTextAreaElement | HTMLSelectElement\n >(`[data-mirror=\"${field[\"field-name\"]}\"]`);\n\n if (!mirrorEl) {\n console.warn(\n `[Mirror] No element found with data-mirror=\"${field[\"field-name\"]}\"`\n );\n return;\n }\n\n // Skip disabled mirrors just in case\n if (\n mirrorEl instanceof HTMLInputElement &&\n mirrorEl.disabled\n ) {\n return;\n }\n\n if (mirrorEl instanceof HTMLInputElement) {\n if (mirrorEl.type === \"checkbox\") {\n mirrorEl.checked = field.value === \"true\";\n } else if (mirrorEl.type === \"radio\") {\n mirrorEl.checked = mirrorEl.value === field.value;\n } else {\n mirrorEl.value = field.value;\n }\n } else {\n mirrorEl.value = field.value;\n }\n });\n }\n\n}\n\n// Boot\ndocument.addEventListener(\"DOMContentLoaded\", () => {\n const form = document.querySelector<HTMLFormElement>('[data-msf=\"form\"]');\n if (!form) return;\n\n const itiInstances = initIntlTelInput({ root: form });\n\n const msf = new MultiStepForm(form, itiInstances);\n\n // expose globally for debugging\n (window as any).msf = msf;\n});"],
5
+ "mappings": "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",
6
+ "names": ["errorEl"]
7
+ }
File without changes
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": [],
4
+ "sourcesContent": [],
5
+ "mappings": "",
6
+ "names": []
7
+ }
@@ -0,0 +1,2 @@
1
+ "use strict";(()=>{var Q=Object.create;var R=Object.defineProperty;var G=Object.getOwnPropertyDescriptor;var $=Object.getOwnPropertyNames;var X=Object.getPrototypeOf,j=Object.prototype.hasOwnProperty;var J=(e=>typeof require<"u"?require:typeof Proxy<"u"?new Proxy(e,{get:(t,r)=>(typeof require<"u"?require:t)[r]}):e)(function(e){if(typeof require<"u")return require.apply(this,arguments);throw Error('Dynamic require of "'+e+'" is not supported')});var K=(e,t,r,o)=>{if(t&&typeof t=="object"||typeof t=="function")for(let l of $(t))!j.call(e,l)&&l!==r&&R(e,l,{get:()=>t[l],enumerable:!(o=G(t,l))||o.enumerable});return e};var W=(e,t,r)=>(r=e!=null?Q(X(e)):{},K(t||!e||!e.__esModule?R(r,"default",{value:e,enumerable:!0}):r,e));function S(e={}){let{root:t=document,initialCountry:r="us",separateDialCode:o=!0,countryCodeSelector:l='input[pulse-form-field="country-code"]',onInit:n,onError:i=m=>console.warn(`[initIntlTelInput] ${m}`)}=e,u=new Map,d=window.intlTelInput;return d?(t.querySelectorAll('input[type="tel"]').forEach(m=>{try{let a=d(m,{initialCountry:r,separateDialCode:o,strictMode:!1,loadUtils:()=>import("https://cdn.jsdelivr.net/npm/intl-tel-input@25/build/js/utils.js")});u.set(m,a),M(a,l),m.addEventListener("countrychange",()=>{M(a,l)}),n?.(m,a)}catch(a){i(`Failed to init on input inside "${z(m)}"`,a)}}),u):(i(`intlTelInput not found on window. Include the script before calling this function.
2
+ e.g. <script src="https://cdn.jsdelivr.net/npm/intl-tel-input@25/build/js/intlTelInput.min.js"><\/script>`),u)}function M(e,t){try{let r=e.getSelectedCountryData?.();if(!r?.dialCode)return;document.querySelectorAll(t).forEach(o=>{o.value=`+${r.dialCode}`})}catch{}}function z(e){return e.closest("[pulse-form-block]")?.getAttribute("pulse-field-name")??"unknown"}var Z=["text","email","phone","checkbox","radio","select","legal"],ee=["true","atleast-one","only-one"],s={REQUIRED_INPUT:"ERR_REQUIRED",REQUIRED_LEGAL:"ERR_LEGAL_REQUIRED",REQUIRED_SELECT:"ERR_SELECT_REQUIRED",ATLEAST_ONE:"ERR_ATLEAST_ONE",ONLY_ONE_NONE:"ERR_ONLY_ONE_NONE",ONLY_ONE_EXCEEDED:"ERR_ONLY_ONE_EXCEEDED",INVALID_EMAIL:"ERR_INVALID_EMAIL",INVALID_PHONE:"ERR_INVALID_PHONE",PHONE_TOO_SHORT:"ERR_PHONE_TOO_SHORT",PHONE_TOO_LONG:"ERR_PHONE_TOO_LONG",PHONE_INVALID_COUNTRY:"ERR_PHONE_INVALID_COUNTRY"},T={[s.REQUIRED_INPUT]:"This field is required.",[s.REQUIRED_LEGAL]:"You must accept this to continue.",[s.REQUIRED_SELECT]:"Please select an option.",[s.ATLEAST_ONE]:"Please select at least one option.",[s.ONLY_ONE_NONE]:"Please select one option.",[s.ONLY_ONE_EXCEEDED]:"Only one option can be selected.",[s.INVALID_EMAIL]:"Please enter a valid email address.",[s.INVALID_PHONE]:"Please enter a valid phone number.",[s.PHONE_TOO_SHORT]:"Phone number is too short.",[s.PHONE_TOO_LONG]:"Phone number is too long.",[s.PHONE_INVALID_COUNTRY]:"Invalid country code."};function te(e){let t=e.querySelector("input, textarea");return t?t.value.trim():null}function re(e){let t=e.querySelector('input[type="email"]');return t?t.value.trim():null}function ne(e){let t=e.querySelector('input[type="tel"]');return t?t.value.trim():null}function oe(e){let t=e.querySelectorAll('input[type="checkbox"]'),r=[];return t.forEach(o=>{if(o.checked){let l=o.getAttribute("data-name")?.trim();r.push(l||o.value||"on")}}),r}function le(e){let t=e.querySelectorAll('input[type="radio"]');for(let r of t)if(r.checked)return r.closest("label")?.textContent?.trim()||r.value||"on";return null}function ie(e){let t=e.querySelector("select");if(!t)return null;let r=t.value.trim();return!r||t.selectedIndex===0?null:r}function se(e){let t=e.querySelector('input[type="checkbox"]');return t?t.checked:!1}function I(e,t){switch(e){case"text":return te(t);case"email":return re(t);case"phone":return ne(t);case"checkbox":return oe(t);case"radio":return le(t);case"select":return ie(t);case"legal":return se(t);default:return null}}function ce(e){let t=e.getAttribute("required-selection")?.trim().toLowerCase();return!t||!ee.includes(t)?null:t}function ae(e){return e.getAttribute("mirror-value")?.trim().toLowerCase()==="true"}var ue={0:s.INVALID_PHONE,1:s.PHONE_INVALID_COUNTRY,2:s.PHONE_TOO_SHORT,3:s.PHONE_TOO_LONG,4:s.INVALID_PHONE};function de(e){return e?/^[^\s@]+@[^\s@]+\.[^\s@]+$/.test(e)?null:{code:s.INVALID_EMAIL,message:T[s.INVALID_EMAIL]}:null}function me(e,t){let r=e.value.trim();if(!r)return null;let o=t?.get(e);if(o)try{if(o.isValidNumber())return null;let n=o.getValidationError?.()??0,i=ue[n]||s.INVALID_PHONE;return{code:i,message:T[i]}}catch{return{code:s.INVALID_PHONE,message:T[s.INVALID_PHONE]}}let l=r.replace(/\D/g,"");return l.length<7?{code:s.PHONE_TOO_SHORT,message:T[s.PHONE_TOO_SHORT]}:l.length>15?{code:s.PHONE_TOO_LONG,message:T[s.PHONE_TOO_LONG]}:null}function O(e,t,r,o,l){if(t)switch(t){case"true":{if(e==="legal"&&r!==!0)return{code:s.REQUIRED_LEGAL,message:T[s.REQUIRED_LEGAL]};if(e==="select"&&!r)return{code:s.REQUIRED_SELECT,message:T[s.REQUIRED_SELECT]};if((e==="text"||e==="email"||e==="phone")&&(!r||typeof r=="string"&&r===""))return{code:s.REQUIRED_INPUT,message:T[s.REQUIRED_INPUT]};break}case"atleast-one":{if(Array.isArray(r)?r.length===0:!r)return{code:s.ATLEAST_ONE,message:T[s.ATLEAST_ONE]};break}case"only-one":{if(Array.isArray(r)){if(r.length===0)return{code:s.ONLY_ONE_NONE,message:T[s.ONLY_ONE_NONE]};if(r.length>1)return{code:s.ONLY_ONE_EXCEEDED,message:T[s.ONLY_ONE_EXCEEDED]}}else if(!r)return{code:s.ONLY_ONE_NONE,message:T[s.ONLY_ONE_NONE]};break}}if(e==="email"&&typeof r=="string"&&r){let n=de(r);if(n)return n}if(e==="phone"&&typeof r=="string"&&r){let n=o.querySelector('input[type="tel"]');if(n){let i=me(n,l);if(i)return i}}return null}function x(e={}){let{validate:t=!1,root:r=document,itiInstances:o}=e,l=r.querySelectorAll("[pulse-form-block]"),n=[];return l.forEach(i=>{let u=i.getAttribute("pulse-form-block")?.trim().toLowerCase();if(!u||!Z.includes(u))return;let d=u,f=i.getAttribute("pulse-field-name")?.trim();if(!f)return;let m=ce(i),a=ae(i),p=I(d,i),E=t?O(d,m,p,i,o):null;n.push({"form-block":d,"field-name":f,value:p,required:m,"mirror-value":a,error:E})}),n}var F=[],Ee=["text","email","phone","checkbox","radio","select","legal"],A=[];function _(e){return A.push(e),()=>{let t=A.indexOf(e);t!==-1&&A.splice(t,1)}}function P(){for(let e of A)try{e(F)}catch(t){console.error("[SampleForm] Error in onFieldsUpdate callback:",t)}}function v(e=document){return F=x({root:e}),window.PulseFormData=F,P(),console.log(`[SampleForm] Initialised ${F.length} fields.`),F}function k(e=document){let t=e.querySelectorAll("[pulse-form-block]");t.forEach(r=>{let o=r.getAttribute("pulse-form-block")?.trim().toLowerCase();if(!o||!Ee.includes(o))return;let l=()=>fe(r,e);switch(o){case"text":case"email":{let n=r.querySelector("input, textarea");n&&(n.addEventListener("input",l),n.addEventListener("change",l));break}case"phone":{let n=r.querySelector('input[type="tel"]');n&&(n.addEventListener("input",l),n.addEventListener("change",l),n.addEventListener("keyup",l),n.addEventListener("countrychange",l));break}case"checkbox":case"legal":{r.querySelectorAll('input[type="checkbox"]').forEach(n=>n.addEventListener("change",l));break}case"radio":{r.querySelectorAll('input[type="radio"]').forEach(n=>n.addEventListener("change",l));break}case"select":{let n=r.querySelector("select");n&&n.addEventListener("change",l);break}}}),console.log(`[SampleForm] Listeners bound to ${t.length} blocks.`)}function fe(e,t){let r=e.getAttribute("pulse-form-block")?.trim().toLowerCase(),o=e.getAttribute("pulse-field-name")?.trim();if(!o)return;let l=I(r,e),n=F.findIndex(i=>i["field-name"]===o);n!==-1&&(F[n]={...F[n],value:l,error:null},window.PulseFormData=F,P())}function y(){return F}var pe=["true","atleast-one","only-one"];function q(e,t={}){let{root:r=document,requiredAttribute:o="required-selection"}=t,l=[...e];return r.querySelectorAll("[pulse-form-block]").forEach(n=>{let i=n.getAttribute("pulse-field-name")?.trim();if(!i)return;let u=l.findIndex(m=>m["field-name"]===i);if(u===-1)return;let d=n.getAttribute(o)?.trim().toLowerCase()||"",f=pe.includes(d)?d:null;l[u]={...l[u],required:f}}),l}function C(e,t=document){t.querySelectorAll("[pulse-form-block]").forEach(r=>{let o=r.getAttribute("pulse-field-name")?.trim();if(!o)return;let l=e.find(n=>n["field-name"]===o);l&&(l.required?r.setAttribute("required-selection",l.required):r.removeAttribute("required-selection"))})}var Le="data-original-required-selection";function D(e,t={}){let{root:r=document,fieldName:o="flow-type",flowAttribute:l="form-flow",activeAttribute:n="form-flow-active",requiredAttribute:i="required-selection",originalRequiredAttribute:u=Le}=t,d=e.find(a=>a["field-name"]===o);if(!d)return e;let f=d.value;return r.querySelectorAll(`[${l}]`).forEach(a=>{let E=a.getAttribute(l)?.trim()===f;a.setAttribute(n,E?"true":"false");let c=[];a.hasAttribute("pulse-form-block")&&c.push(a),a.querySelectorAll("[pulse-form-block]").forEach(L=>{c.push(L)}),c.forEach(L=>{if(!L.hasAttribute(u)){let g=L.getAttribute(i)?.trim()||"";L.setAttribute(u,g)}if(E){let g=L.getAttribute(u)||"";L.setAttribute(i,g||"false")}else L.setAttribute(i,"false")})}),q(e,{root:r,requiredAttribute:i})}function V(e,t={}){let{root:r=document,onMissingInput:o,onMissingTarget:l}=t,n=e.filter(u=>u["mirror-value"]===!0);if(n.length===0)return;let i=r.querySelectorAll("[pulse-form-block-mirror]");n.forEach(u=>{let d=u["field-name"],f=!1;i.forEach(m=>{if(m.getAttribute("pulse-form-block-mirror")?.trim()!==d)return;f=!0;let p=m.querySelector("input, textarea, select");if(!p){o?.(d,m);return}Te(p,u.value)}),f||l?.(d)})}function Te(e,t){typeof t=="string"?e.value=t:typeof t=="boolean"?e instanceof HTMLInputElement&&e.type==="checkbox"?e.checked=t:e.value=String(t):Array.isArray(t)?e.value=t.join(", "):e.value=""}var N={errorClass:"pulse-form-error",wrapperErrorClass:"has-error",focusFirst:!0};function U(e,t){return t??e}function ge(e){let t=new Set;return e.querySelectorAll("[pulse-form-block]").forEach(r=>{let o=r.getAttribute("pulse-field-name")?.trim();o&&t.add(o)}),t}function h(e,t={}){let{root:r=document,scope:o,itiInstances:l,errorClass:n=N.errorClass,wrapperErrorClass:i=N.wrapperErrorClass,focusFirst:u=N.focusFirst}=t,d=U(r,o),f=d.querySelectorAll("[pulse-form-block]"),m=ge(d);ye(d,n,i);let a=e.map(c=>{if(!m.has(c["field-name"]))return c;let L=Ne(f,c["field-name"]);if(!L)return{...c,error:null};let g=O(c["form-block"],c.required,c.value,L,l);return g&&w(L,g,n,i),{...c,error:g}}),E=a.filter(c=>m.has(c["field-name"])).every(c=>c.error===null);return!E&&u&&Ie(d,i),{fields:a,isValid:E}}function H(e){let{root:t=document,scope:r,itiInstances:o,errorClass:l=N.errorClass,wrapperErrorClass:n=N.wrapperErrorClass,getFields:i,onFieldValidated:u}=e,d=["text","email","phone","checkbox","radio","select","legal"];U(t,r).querySelectorAll("[pulse-form-block]").forEach(a=>{let p=a.getAttribute("pulse-form-block")?.trim().toLowerCase();if(!p||!d.includes(p))return;let E=()=>{if(!a.classList.contains(n))return;let c=a.getAttribute("pulse-field-name")?.trim();if(!c)return;let g=i().find(Y=>Y["field-name"]===c);if(!g)return;let B=I(p,a),b=O(p,g.required,B,a,o);b?w(a,b,l,n):Fe(a,l,n),u?.(c,b)};switch(p){case"text":case"email":{let c=a.querySelector("input, textarea");c&&(c.addEventListener("input",E),c.addEventListener("change",E));break}case"phone":{let c=a.querySelector('input[type="tel"]');c&&(c.addEventListener("input",E),c.addEventListener("change",E),c.addEventListener("keyup",E),c.addEventListener("countrychange",E));break}case"checkbox":case"legal":{a.querySelectorAll('input[type="checkbox"]').forEach(c=>c.addEventListener("change",E));break}case"radio":{a.querySelectorAll('input[type="radio"]').forEach(c=>c.addEventListener("change",E));break}case"select":{let c=a.querySelector("select");c&&c.addEventListener("change",E);break}}})}function w(e,t,r,o){let l=e.querySelector(`.${r}`);l&&l.remove();let n=document.createElement("span");n.className=r,n.textContent=t.message,n.setAttribute("data-error-code",t.code),n.setAttribute("data-field-name",e.getAttribute("pulse-field-name")?.trim()||""),e.classList.add(o),e.appendChild(n)}function Fe(e,t,r){let o=e.querySelector(`.${t}`);o&&o.remove(),e.classList.remove(r)}function ye(e,t,r){e.querySelectorAll(`.${t}`).forEach(o=>o.remove()),e.querySelectorAll("[pulse-form-block]").forEach(o=>o.classList.remove(r))}function Ie(e,t){let r=e.querySelector(`[pulse-form-block].${t}`);if(!r)return;r.scrollIntoView({behavior:"smooth",block:"center"});let o=r.querySelector("input, textarea, select");o&&setTimeout(()=>o.focus(),400)}function Ne(e,t){return Array.from(e).find(r=>r.getAttribute("pulse-field-name")?.trim()===t)}document.addEventListener("DOMContentLoaded",()=>{let e=S();_(n=>{let i=D(n);window.PulseFormData=i}),_(n=>V(n)),v(),C(y()),k();let t=document.getElementById("step-2-container"),r=document.getElementById("step-2-button");H({scope:t,getFields:y,itiInstances:e}),r.addEventListener("click",n=>{n.preventDefault();let{fields:i,isValid:u}=h(y(),{scope:t,itiInstances:e});window.PulseFormData=i,u&&console.log("Step 2 valid, moving on...")});let o=document.getElementById("step-3-container"),l=document.getElementById("step-3-button");H({scope:o,getFields:y,itiInstances:e}),l.addEventListener("click",n=>{n.preventDefault(),console.log("step 3 clicked");let{fields:i,isValid:u}=h(y(),{scope:o,itiInstances:e});window.PulseFormData=i,console.log("Step 3 valid",u),u&&console.log("Step 3 valid, proceeding to submit...")})});})();
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../src/form/utils/initIntlTelInput.ts", "../../src/form/utils/collectFormFields.ts", "../../src/form/utils/initFormControls.ts", "../../src/form/utils/updateRequiredFields.ts", "../../src/form/utils/updateFlowType.ts", "../../src/form/utils/fillMirrorValues.ts", "../../src/form/utils/validateForm.ts", "../../src/form/pricing.ts"],
4
+ "sourcesContent": ["// \u2500\u2500\u2500 initIntlTelInput.ts \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n// Reusable utility that initialises intl-tel-input on every phone field\n// inside a given root. Returns the instance map so callers can pass it\n// to collectFormFields / validatePhone when needed.\n//\n// Usage:\n// import { initIntlTelInput } from \"./initIntlTelInput\";\n// const itiInstances = initIntlTelInput();\n// const itiInstances = initIntlTelInput({ root: myDiv, initialCountry: \"gb\" });\n// \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\nexport interface IntlTelInputOptions {\n /** Root element to scan for phone inputs. Default: document */\n root?: ParentNode;\n /** ISO-2 country code for default selection. Default: \"us\" */\n initialCountry?: string;\n /** Show dial code separately from the input. Default: true */\n separateDialCode?: boolean;\n /** Selector for hidden input(s) that should receive the dial code. Default: 'input[pulse-form-field=\"country-code\"]' */\n countryCodeSelector?: string;\n /** Called after each input is successfully initialised */\n onInit?: (input: HTMLInputElement, iti: any) => void;\n /** Called when intlTelInput is missing from window or an input fails */\n onError?: (message: string, error?: unknown) => void;\n}\n\n/**\n * Finds every `input[type=\"tel\"]` inside `[pulse-form-block=\"phone\"]`\n * wrappers, attaches intl-tel-input, and returns a Map of\n * `HTMLInputElement \u2192 iti instance` for downstream use (validation, etc.).\n */\nexport function initIntlTelInput(\n options: IntlTelInputOptions = {}\n): Map<HTMLInputElement, any> {\n const {\n root = document,\n initialCountry = \"us\",\n separateDialCode = true,\n countryCodeSelector = 'input[pulse-form-field=\"country-code\"]',\n onInit,\n onError = (msg) => console.warn(`[initIntlTelInput] ${msg}`),\n } = options;\n\n const instances = new Map<HTMLInputElement, any>();\n\n // \u2500\u2500 Guard: library must be loaded first \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n const intlTelInput = (window as any).intlTelInput;\n if (!intlTelInput) {\n onError(\n \"intlTelInput not found on window. \" +\n \"Include the script before calling this function.\\n\" +\n 'e.g. <script src=\"https://cdn.jsdelivr.net/npm/intl-tel-input@25/build/js/intlTelInput.min.js\"></script>'\n );\n return instances;\n }\n\n // \u2500\u2500 Find phone inputs \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n const phoneInputs = root.querySelectorAll<HTMLInputElement>(\n 'input[type=\"tel\"]'\n );\n\n phoneInputs.forEach((input) => {\n try {\n const iti = intlTelInput(input, {\n initialCountry,\n separateDialCode,\n strictMode: false,\n // @ts-ignore \u2014 runtime CDN import\n loadUtils: () =>\n import(\n // @ts-ignore \u2014 runtime CDN import, not a TS module\n \"https://cdn.jsdelivr.net/npm/intl-tel-input@25/build/js/utils.js\"\n ),\n });\n\n instances.set(input, iti);\n\n // Fill hidden country-code input(s) on load + on change\n fillCountryCode(iti, countryCodeSelector);\n input.addEventListener(\"countrychange\", () => {\n fillCountryCode(iti, countryCodeSelector);\n });\n\n onInit?.(input, iti);\n } catch (err) {\n onError(`Failed to init on input inside \"${fieldNameOf(input)}\"`, err);\n }\n });\n\n return instances;\n}\n\n// \u2500\u2500\u2500 Helpers \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\nfunction fillCountryCode(iti: any, selector: string): void {\n try {\n const countryData = iti.getSelectedCountryData?.();\n if (!countryData?.dialCode) return;\n\n document.querySelectorAll<HTMLInputElement>(selector).forEach((input) => {\n input.value = `+${countryData.dialCode}`;\n });\n } catch {\n // silently ignore \u2014 non-critical\n }\n}\n\nfunction fieldNameOf(input: HTMLInputElement): string {\n return (\n input.closest(\"[pulse-form-block]\")?.getAttribute(\"pulse-field-name\") ??\n \"unknown\"\n );\n}", "// \u2500\u2500\u2500 collectFormFields.ts \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n// Standalone, reusable module for scanning DOM form blocks and producing a\n// typed JSON array. Zero side-effects \u2014 it only *reads* the DOM.\n//\n// Usage:\n// import { collectFormFields, PulseFormField } from \"./collectFormFields\";\n// const fields = collectFormFields(); // no validation\n// const fields = collectFormFields({ validate: true, itiInstances }); // with validation\n// \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\nexport type FormBlockType =\n | \"text\"\n | \"email\"\n | \"phone\"\n | \"checkbox\"\n | \"radio\"\n | \"select\"\n | \"legal\";\n\nexport type RequiredSelection = \"true\" | \"atleast-one\" | \"only-one\";\n\nexport interface FieldError {\n code: string;\n message: string;\n}\n\nexport interface PulseFormField {\n \"form-block\": FormBlockType;\n \"field-name\": string;\n value: string | string[] | boolean | null;\n required: RequiredSelection | null;\n \"mirror-value\": boolean;\n error: FieldError | null;\n}\n\nexport interface CollectOptions {\n /** Run validation while collecting. Default: false */\n validate?: boolean;\n /** Root element to scan inside. Default: document */\n root?: ParentNode;\n /** intl-tel-input instance map \u2014 needed only when validate is true and phone fields exist */\n itiInstances?: Map<HTMLInputElement, any>;\n}\n\n// \u2500\u2500\u2500 Constants \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\nconst VALID_BLOCK_TYPES: FormBlockType[] = [\n \"text\",\n \"email\",\n \"phone\",\n \"checkbox\",\n \"radio\",\n \"select\",\n \"legal\",\n];\n\nconst VALID_REQUIRED_VALUES: RequiredSelection[] = [\n \"true\",\n \"atleast-one\",\n \"only-one\",\n];\n\n// \u2500\u2500\u2500 Error Codes & Messages \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\nexport const ERROR_CODES = {\n REQUIRED_INPUT: \"ERR_REQUIRED\",\n REQUIRED_LEGAL: \"ERR_LEGAL_REQUIRED\",\n REQUIRED_SELECT: \"ERR_SELECT_REQUIRED\",\n ATLEAST_ONE: \"ERR_ATLEAST_ONE\",\n ONLY_ONE_NONE: \"ERR_ONLY_ONE_NONE\",\n ONLY_ONE_EXCEEDED: \"ERR_ONLY_ONE_EXCEEDED\",\n INVALID_EMAIL: \"ERR_INVALID_EMAIL\",\n INVALID_PHONE: \"ERR_INVALID_PHONE\",\n PHONE_TOO_SHORT: \"ERR_PHONE_TOO_SHORT\",\n PHONE_TOO_LONG: \"ERR_PHONE_TOO_LONG\",\n PHONE_INVALID_COUNTRY: \"ERR_PHONE_INVALID_COUNTRY\",\n} as const;\n\nexport const ERROR_MESSAGES: Record<string, string> = {\n [ERROR_CODES.REQUIRED_INPUT]: \"This field is required.\",\n [ERROR_CODES.REQUIRED_LEGAL]: \"You must accept this to continue.\",\n [ERROR_CODES.REQUIRED_SELECT]: \"Please select an option.\",\n [ERROR_CODES.ATLEAST_ONE]: \"Please select at least one option.\",\n [ERROR_CODES.ONLY_ONE_NONE]: \"Please select one option.\",\n [ERROR_CODES.ONLY_ONE_EXCEEDED]: \"Only one option can be selected.\",\n [ERROR_CODES.INVALID_EMAIL]: \"Please enter a valid email address.\",\n [ERROR_CODES.INVALID_PHONE]: \"Please enter a valid phone number.\",\n [ERROR_CODES.PHONE_TOO_SHORT]: \"Phone number is too short.\",\n [ERROR_CODES.PHONE_TOO_LONG]: \"Phone number is too long.\",\n [ERROR_CODES.PHONE_INVALID_COUNTRY]: \"Invalid country code.\",\n};\n\n// \u2500\u2500\u2500 Value Extractors \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\nfunction extractTextValue(wrapper: HTMLElement): string | null {\n const input = wrapper.querySelector<HTMLInputElement | HTMLTextAreaElement>(\n \"input, textarea\"\n );\n return input ? input.value.trim() : null;\n}\n\nfunction extractEmailValue(wrapper: HTMLElement): string | null {\n const input = wrapper.querySelector<HTMLInputElement>('input[type=\"email\"]');\n return input ? input.value.trim() : null;\n}\n\nfunction extractPhoneValue(wrapper: HTMLElement): string | null {\n const input = wrapper.querySelector<HTMLInputElement>('input[type=\"tel\"]');\n return input ? input.value.trim() : null;\n}\n\nfunction extractCheckboxValues(wrapper: HTMLElement): string[] {\n const checkboxes = wrapper.querySelectorAll<HTMLInputElement>(\n 'input[type=\"checkbox\"]'\n );\n const values: string[] = [];\n checkboxes.forEach((cb) => {\n if (cb.checked) {\n const name = cb.getAttribute(\"data-name\")?.trim();\n values.push(name || cb.value || \"on\");\n }\n });\n return values;\n}\n\nfunction extractRadioValue(wrapper: HTMLElement): string | null {\n const radios = wrapper.querySelectorAll<HTMLInputElement>(\n 'input[type=\"radio\"]'\n );\n for (const radio of radios) {\n if (radio.checked) {\n const label = radio.closest(\"label\")?.textContent?.trim();\n return label || radio.value || \"on\";\n }\n }\n return null;\n}\n\nfunction extractSelectValue(wrapper: HTMLElement): string | null {\n const select = wrapper.querySelector<HTMLSelectElement>(\"select\");\n if (!select) return null;\n const val = select.value.trim();\n if (!val || select.selectedIndex === 0) return null;\n return val;\n}\n\nfunction extractLegalValue(wrapper: HTMLElement): boolean {\n const checkbox = wrapper.querySelector<HTMLInputElement>(\n 'input[type=\"checkbox\"]'\n );\n return checkbox ? checkbox.checked : false;\n}\n\nexport function extractValue(\n type: FormBlockType,\n wrapper: HTMLElement\n): PulseFormField[\"value\"] {\n switch (type) {\n case \"text\":\n return extractTextValue(wrapper);\n case \"email\":\n return extractEmailValue(wrapper);\n case \"phone\":\n return extractPhoneValue(wrapper);\n case \"checkbox\":\n return extractCheckboxValues(wrapper);\n case \"radio\":\n return extractRadioValue(wrapper);\n case \"select\":\n return extractSelectValue(wrapper);\n case \"legal\":\n return extractLegalValue(wrapper);\n default:\n return null;\n }\n}\n\n// \u2500\u2500\u2500 Attribute Parsers \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\nexport function parseRequired(wrapper: HTMLElement): RequiredSelection | null {\n const raw = wrapper.getAttribute(\"required-selection\")?.trim().toLowerCase();\n if (!raw || !VALID_REQUIRED_VALUES.includes(raw as RequiredSelection))\n return null;\n return raw as RequiredSelection;\n}\n\nexport function parseMirrorValue(wrapper: HTMLElement): boolean {\n return wrapper.getAttribute(\"mirror-value\")?.trim().toLowerCase() === \"true\";\n}\n\n// \u2500\u2500\u2500 Format Validators \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\nconst PHONE_ITI_ERROR_MAP: Record<number, string> = {\n 0: ERROR_CODES.INVALID_PHONE,\n 1: ERROR_CODES.PHONE_INVALID_COUNTRY,\n 2: ERROR_CODES.PHONE_TOO_SHORT,\n 3: ERROR_CODES.PHONE_TOO_LONG,\n 4: ERROR_CODES.INVALID_PHONE,\n};\n\nexport function validateEmail(value: string): FieldError | null {\n if (!value) return null;\n const emailRegex = /^[^\\s@]+@[^\\s@]+\\.[^\\s@]+$/;\n if (!emailRegex.test(value)) {\n return {\n code: ERROR_CODES.INVALID_EMAIL,\n message: ERROR_MESSAGES[ERROR_CODES.INVALID_EMAIL],\n };\n }\n return null;\n}\n\nexport function validatePhone(\n input: HTMLInputElement,\n itiInstances?: Map<HTMLInputElement, any>\n): FieldError | null {\n const value = input.value.trim();\n if (!value) return null;\n\n const iti = itiInstances?.get(input);\n\n if (iti) {\n try {\n if (iti.isValidNumber()) return null;\n const errorCode: number = iti.getValidationError?.() ?? 0;\n const code =\n PHONE_ITI_ERROR_MAP[errorCode] || ERROR_CODES.INVALID_PHONE;\n return { code, message: ERROR_MESSAGES[code] };\n } catch {\n return {\n code: ERROR_CODES.INVALID_PHONE,\n message: ERROR_MESSAGES[ERROR_CODES.INVALID_PHONE],\n };\n }\n }\n\n // Fallback: basic digit length\n const digits = value.replace(/\\D/g, \"\");\n if (digits.length < 7)\n return {\n code: ERROR_CODES.PHONE_TOO_SHORT,\n message: ERROR_MESSAGES[ERROR_CODES.PHONE_TOO_SHORT],\n };\n if (digits.length > 15)\n return {\n code: ERROR_CODES.PHONE_TOO_LONG,\n message: ERROR_MESSAGES[ERROR_CODES.PHONE_TOO_LONG],\n };\n return null;\n}\n\n// \u2500\u2500\u2500 Field-Level Validation \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\nexport function getFieldError(\n type: FormBlockType,\n required: RequiredSelection | null,\n value: PulseFormField[\"value\"],\n wrapper: HTMLElement,\n itiInstances?: Map<HTMLInputElement, any>\n): FieldError | null {\n // 1. Required checks\n if (required) {\n switch (required) {\n case \"true\": {\n if (type === \"legal\" && value !== true)\n return {\n code: ERROR_CODES.REQUIRED_LEGAL,\n message: ERROR_MESSAGES[ERROR_CODES.REQUIRED_LEGAL],\n };\n if (type === \"select\" && !value)\n return {\n code: ERROR_CODES.REQUIRED_SELECT,\n message: ERROR_MESSAGES[ERROR_CODES.REQUIRED_SELECT],\n };\n if (\n (type === \"text\" || type === \"email\" || type === \"phone\") &&\n (!value || (typeof value === \"string\" && value === \"\"))\n )\n return {\n code: ERROR_CODES.REQUIRED_INPUT,\n message: ERROR_MESSAGES[ERROR_CODES.REQUIRED_INPUT],\n };\n break;\n }\n case \"atleast-one\": {\n const empty = Array.isArray(value) ? value.length === 0 : !value;\n if (empty)\n return {\n code: ERROR_CODES.ATLEAST_ONE,\n message: ERROR_MESSAGES[ERROR_CODES.ATLEAST_ONE],\n };\n break;\n }\n case \"only-one\": {\n if (Array.isArray(value)) {\n if (value.length === 0)\n return {\n code: ERROR_CODES.ONLY_ONE_NONE,\n message: ERROR_MESSAGES[ERROR_CODES.ONLY_ONE_NONE],\n };\n if (value.length > 1)\n return {\n code: ERROR_CODES.ONLY_ONE_EXCEEDED,\n message: ERROR_MESSAGES[ERROR_CODES.ONLY_ONE_EXCEEDED],\n };\n } else if (!value) {\n return {\n code: ERROR_CODES.ONLY_ONE_NONE,\n message: ERROR_MESSAGES[ERROR_CODES.ONLY_ONE_NONE],\n };\n }\n break;\n }\n }\n }\n\n // 2. Format checks (only when there's a value)\n if (type === \"email\" && typeof value === \"string\" && value) {\n const emailError = validateEmail(value);\n if (emailError) return emailError;\n }\n\n if (type === \"phone\" && typeof value === \"string\" && value) {\n const phoneInput = wrapper.querySelector<HTMLInputElement>(\n 'input[type=\"tel\"]'\n );\n if (phoneInput) {\n const phoneError = validatePhone(phoneInput, itiInstances);\n if (phoneError) return phoneError;\n }\n }\n\n return null;\n}\n\n// \u2500\u2500\u2500 Main Export \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\n/**\n * Scans the DOM for `[pulse-form-block]` elements and returns a typed JSON\n * array describing every field's current state.\n *\n * Pure read \u2014 no DOM mutations, no global side-effects.\n */\nexport function collectFormFields(\n options: CollectOptions = {}\n): PulseFormField[] {\n const { validate = false, root = document, itiInstances } = options;\n\n const wrappers = root.querySelectorAll<HTMLElement>(\"[pulse-form-block]\");\n const fields: PulseFormField[] = [];\n\n wrappers.forEach((wrapper) => {\n const rawType = wrapper\n .getAttribute(\"pulse-form-block\")\n ?.trim()\n .toLowerCase();\n\n if (!rawType || !VALID_BLOCK_TYPES.includes(rawType as FormBlockType))\n return;\n\n const blockType = rawType as FormBlockType;\n const fieldName = wrapper.getAttribute(\"pulse-field-name\")?.trim();\n if (!fieldName) return;\n\n const required = parseRequired(wrapper);\n const mirrorValue = parseMirrorValue(wrapper);\n const value = extractValue(blockType, wrapper);\n const error = validate\n ? getFieldError(blockType, required, value, wrapper, itiInstances)\n : null;\n\n fields.push({\n \"form-block\": blockType,\n \"field-name\": fieldName,\n value,\n required,\n \"mirror-value\": mirrorValue,\n error,\n });\n });\n\n return fields;\n}", "// \u2500\u2500\u2500 sample.ts \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n// Drop-in usage of the reusable form modules on any page with\n// [pulse-form-block] elements. Two things happen:\n// 1. initFormJSON() \u2014 scans the DOM, builds the fields array\n// 2. bindFormListeners() \u2014 keeps the JSON in sync as the user interacts\n//\n// Register post-update hooks via onFieldsUpdate():\n// onFieldsUpdate((fields) => updateFlowType(fields));\n// onFieldsUpdate((fields) => fillMirrorValues(fields));\n// \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\nimport {\n collectFormFields,\n extractValue,\n type PulseFormField,\n type FormBlockType,\n} from \"./collectFormFields\";\n\n// \u2500\u2500\u2500 State \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\nlet _fields: PulseFormField[] = [];\n\nconst VALID_BLOCK_TYPES: FormBlockType[] = [\n \"text\", \"email\", \"phone\", \"checkbox\", \"radio\", \"select\", \"legal\",\n];\n\n// \u2500\u2500\u2500 Post-Update Hook System \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\ntype FieldsUpdateCallback = (fields: PulseFormField[]) => void;\n\nconst _updateCallbacks: FieldsUpdateCallback[] = [];\n\n/**\n * Register a function that runs every time the fields JSON is updated.\n * Callbacks fire in the order they were registered.\n *\n * Returns an unsubscribe function.\n *\n * @example\n * const unsub = onFieldsUpdate((fields) => updateFlowType(fields));\n * // later: unsub();\n */\nexport function onFieldsUpdate(cb: FieldsUpdateCallback): () => void {\n _updateCallbacks.push(cb);\n return () => {\n const idx = _updateCallbacks.indexOf(cb);\n if (idx !== -1) _updateCallbacks.splice(idx, 1);\n };\n}\n\n/** Runs all registered callbacks with the current fields. */\nfunction notifyUpdate(): void {\n for (const cb of _updateCallbacks) {\n try {\n cb(_fields);\n } catch (err) {\n console.error(\"[SampleForm] Error in onFieldsUpdate callback:\", err);\n }\n }\n}\n\n// \u2500\u2500\u2500 1. Initialise JSON \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\n/**\n * Scans the DOM (or a subtree) for form blocks, builds the typed JSON array,\n * and fires all registered update callbacks.\n *\n * Call once on page load / after dynamic content is injected.\n */\nexport function initFormJSON(root: ParentNode = document): PulseFormField[] {\n _fields = collectFormFields({ root });\n (window as any).PulseFormData = _fields;\n\n notifyUpdate();\n\n console.log(`[SampleForm] Initialised ${_fields.length} fields.`);\n return _fields;\n}\n\n// \u2500\u2500\u2500 2. Bind Reactive Listeners \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\n/**\n * Attaches input / change listeners to every form block so the JSON\n * array stays up-to-date as the user types, selects, or checks.\n *\n * Call once after `initFormJSON()`.\n */\nexport function bindFormListeners(root: ParentNode = document): void {\n const wrappers = root.querySelectorAll<HTMLElement>(\"[pulse-form-block]\");\n\n wrappers.forEach((wrapper) => {\n const type = wrapper\n .getAttribute(\"pulse-form-block\")\n ?.trim()\n .toLowerCase() as FormBlockType | undefined;\n\n if (!type || !VALID_BLOCK_TYPES.includes(type)) return;\n\n const onChange = () => handleChange(wrapper, root);\n\n switch (type) {\n case \"text\":\n case \"email\": {\n const input = wrapper.querySelector<HTMLInputElement | HTMLTextAreaElement>(\n \"input, textarea\"\n );\n if (input) {\n input.addEventListener(\"input\", onChange);\n input.addEventListener(\"change\", onChange);\n }\n break;\n }\n\n case \"phone\": {\n const phoneInput = wrapper.querySelector<HTMLInputElement>('input[type=\"tel\"]');\n if (phoneInput) {\n phoneInput.addEventListener(\"input\", onChange);\n phoneInput.addEventListener(\"change\", onChange);\n phoneInput.addEventListener(\"keyup\", onChange);\n phoneInput.addEventListener(\"countrychange\", onChange);\n }\n break;\n }\n\n case \"checkbox\":\n case \"legal\": {\n wrapper\n .querySelectorAll<HTMLInputElement>('input[type=\"checkbox\"]')\n .forEach((cb) => cb.addEventListener(\"change\", onChange));\n break;\n }\n\n case \"radio\": {\n wrapper\n .querySelectorAll<HTMLInputElement>('input[type=\"radio\"]')\n .forEach((r) => r.addEventListener(\"change\", onChange));\n break;\n }\n\n case \"select\": {\n const select = wrapper.querySelector<HTMLSelectElement>(\"select\");\n if (select) select.addEventListener(\"change\", onChange);\n break;\n }\n }\n });\n\n console.log(`[SampleForm] Listeners bound to ${wrappers.length} blocks.`);\n}\n\n// \u2500\u2500\u2500 Internal: handle a single field change \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\nfunction handleChange(wrapper: HTMLElement, root: ParentNode): void {\n const rawType = wrapper\n .getAttribute(\"pulse-form-block\")\n ?.trim()\n .toLowerCase() as FormBlockType;\n const fieldName = wrapper.getAttribute(\"pulse-field-name\")?.trim();\n if (!fieldName) return;\n\n const value = extractValue(rawType, wrapper);\n\n const idx = _fields.findIndex((f) => f[\"field-name\"] === fieldName);\n if (idx === -1) return;\n\n _fields[idx] = { ..._fields[idx], value, error: null };\n (window as any).PulseFormData = _fields;\n\n notifyUpdate();\n}\n\n// \u2500\u2500\u2500 Convenience: read current state from anywhere \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\nexport function getFormFields(): PulseFormField[] {\n return _fields;\n}", "// \u2500\u2500\u2500 updateRequiredFields.ts \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n// Reads `required-selection` from every `[pulse-form-block]` in the DOM\n// and syncs it into the fields JSON array.\n//\n// Usage:\n// import { updateRequiredFields } from \"./updateRequiredFields\";\n// const updated = updateRequiredFields(fields);\n// \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\nimport type { PulseFormField, RequiredSelection } from \"./collectFormFields\";\n\nexport interface UpdateRequiredOptions {\n /** Root element to scan. Default: document */\n root?: ParentNode;\n /** The attribute to read from. Default: \"required-selection\" */\n requiredAttribute?: string;\n}\n\nconst VALID_REQUIRED: RequiredSelection[] = [\"true\", \"atleast-one\", \"only-one\"];\n\n/**\n * Scans all `[pulse-form-block]` elements, reads their current\n * `required-selection` attribute, and returns a new fields array\n * with `required` updated to match the DOM.\n */\nexport function updateRequiredFields(\n fields: PulseFormField[],\n options: UpdateRequiredOptions = {}\n): PulseFormField[] {\n const {\n root = document,\n requiredAttribute = \"required-selection\",\n } = options;\n\n const updated = [...fields];\n\n root.querySelectorAll<HTMLElement>(\"[pulse-form-block]\").forEach((block) => {\n const fieldName = block.getAttribute(\"pulse-field-name\")?.trim();\n if (!fieldName) return;\n\n const idx = updated.findIndex((f) => f[\"field-name\"] === fieldName);\n if (idx === -1) return;\n\n const raw = block.getAttribute(requiredAttribute)?.trim().toLowerCase() || \"\";\n const parsed = VALID_REQUIRED.includes(raw as RequiredSelection)\n ? (raw as RequiredSelection)\n : null;\n\n updated[idx] = { ...updated[idx], required: parsed };\n });\n\n return updated;\n}\n\n\n/**\n * Syncs `required` from the fields JSON back into the DOM attributes,\n * so that `collectFormFields` reads the correct values.\n */\nexport function syncRequiredToDOM(\n fields: PulseFormField[],\n root: ParentNode = document\n): void {\n root.querySelectorAll<HTMLElement>(\"[pulse-form-block]\").forEach((block) => {\n const name = block.getAttribute(\"pulse-field-name\")?.trim();\n if (!name) return;\n\n const field = fields.find((f) => f[\"field-name\"] === name);\n if (!field) return;\n\n if (field.required) {\n block.setAttribute(\"required-selection\", field.required);\n } else {\n block.removeAttribute(\"required-selection\");\n }\n });\n}", "// \u2500\u2500\u2500 updateFlowType.ts \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n// Reusable utility that toggles `form-flow-active` and `required-selection`\n// attributes on DOM elements based on the current flow field value,\n// then syncs the updated required values back into the fields JSON.\n//\n// Usage:\n// import { updateFlowType } from \"./updateFlowType\";\n// const updatedFields = updateFlowType(fields);\n// \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\nimport type { PulseFormField } from \"./collectFormFields\";\nimport { updateRequiredFields } from \"./updateRequiredFields\";\n\nexport interface FlowTypeOptions {\n /** Root element to scan for [form-flow] elements. Default: document */\n root?: ParentNode;\n /** The field-name to read the flow value from. Default: \"flow-type\" */\n fieldName?: string;\n /** The attribute on target elements that holds the flow identifier. Default: \"form-flow\" */\n flowAttribute?: string;\n /** The attribute toggled to \"true\"/\"false\". Default: \"form-flow-active\" */\n activeAttribute?: string;\n /** The attribute set on pulse-form-blocks. Default: \"required-selection\" */\n requiredAttribute?: string;\n /** Data attribute used to persist the original required value. Default: \"data-original-required-selection\" */\n originalRequiredAttribute?: string;\n}\n\nconst ORIGINAL_ATTR_DEFAULT = \"data-original-required-selection\";\n\n/**\n * 1. Updates DOM attributes (`form-flow-active`, `required-selection`)\n * 2. Calls `updateRequiredFields()` to sync DOM \u2192 JSON\n * 3. Returns the updated fields array\n */\nexport function updateFlowType(\n fields: PulseFormField[],\n options: FlowTypeOptions = {}\n): PulseFormField[] {\n const {\n root = document,\n fieldName = \"flow-type\",\n flowAttribute = \"form-flow\",\n activeAttribute = \"form-flow-active\",\n requiredAttribute = \"required-selection\",\n originalRequiredAttribute = ORIGINAL_ATTR_DEFAULT,\n } = options;\n\n const flowField = fields.find((f) => f[\"field-name\"] === fieldName);\n if (!flowField) return fields;\n\n const flowValue = flowField.value;\n\n root.querySelectorAll<HTMLElement>(`[${flowAttribute}]`).forEach((el) => {\n const elValue = el.getAttribute(flowAttribute)?.trim();\n const isActive = elValue === flowValue;\n\n el.setAttribute(activeAttribute, isActive ? \"true\" : \"false\");\n\n const blocks: HTMLElement[] = [];\n\n if (el.hasAttribute(\"pulse-form-block\")) {\n blocks.push(el);\n }\n\n el.querySelectorAll<HTMLElement>(\"[pulse-form-block]\").forEach((child) => {\n blocks.push(child);\n });\n\n blocks.forEach((block) => {\n if (!block.hasAttribute(originalRequiredAttribute)) {\n const current = block.getAttribute(requiredAttribute)?.trim() || \"\";\n block.setAttribute(originalRequiredAttribute, current);\n }\n\n if (isActive) {\n const original = block.getAttribute(originalRequiredAttribute) || \"\";\n block.setAttribute(requiredAttribute, original || \"false\");\n } else {\n block.setAttribute(requiredAttribute, \"false\");\n }\n });\n });\n\n // Sync DOM \u2192 JSON immediately (no setTimeout)\n const updated = updateRequiredFields(fields, { root, requiredAttribute });\n return updated;\n}", "// \u2500\u2500\u2500 fillMirrorValues.ts \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n// Standalone, reusable module for copying form-field values into \"mirror\"\n// target elements elsewhere in the DOM.\n//\n// A mirror target is any element with attribute:\n// pulse-form-block-mirror=\"<field-name>\"\n//\n// The module finds the matching field in the provided array, then writes\n// its value into the first <input | textarea | select> inside the target.\n//\n// Usage:\n// import { fillMirrorValues } from \"./fillMirrorValues\";\n// fillMirrorValues(fields); // scans whole document\n// fillMirrorValues(fields, { root: myDiv }); // scans within a subtree\n// \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\nimport type { PulseFormField } from \"./collectFormFields\";\n\nexport interface MirrorOptions {\n /**\n * Root element to search for mirror targets.\n * Defaults to `document`.\n */\n root?: ParentNode;\n\n /**\n * Called when a mirror target element is found but contains no\n * input / textarea / select. Useful for logging in dev.\n */\n onMissingInput?: (fieldName: string, targetEl: HTMLElement) => void;\n\n /**\n * Called when a field has `mirror-value: true` but no matching\n * target element exists in the DOM.\n */\n onMissingTarget?: (fieldName: string) => void;\n}\n\n/**\n * Writes every field whose `mirror-value` is `true` into the corresponding\n * mirror-target element(s) in the DOM.\n *\n * @param fields The current form-field state array (e.g. from `collectFormFields`).\n * @param options Optional configuration \u2014 root scope, callbacks.\n */\nexport function fillMirrorValues(\n fields: PulseFormField[],\n options: MirrorOptions = {}\n): void {\n const { root = document, onMissingInput, onMissingTarget } = options;\n\n // 1. Filter to only fields that opt-in to mirroring\n const mirrorFields = fields.filter((f) => f[\"mirror-value\"] === true);\n if (mirrorFields.length === 0) return;\n\n // 2. Grab all mirror-target elements once\n const mirrorTargets = root.querySelectorAll<HTMLElement>(\n \"[pulse-form-block-mirror]\"\n );\n\n // 3. For each mirror field, find matching target(s) and write value\n mirrorFields.forEach((field) => {\n const fieldName = field[\"field-name\"];\n let found = false;\n\n mirrorTargets.forEach((target) => {\n const mirrorAttr = target\n .getAttribute(\"pulse-form-block-mirror\")\n ?.trim();\n if (mirrorAttr !== fieldName) return;\n\n found = true;\n\n const input = target.querySelector<\n HTMLInputElement | HTMLTextAreaElement | HTMLSelectElement\n >(\"input, textarea, select\");\n\n if (!input) {\n onMissingInput?.(fieldName, target);\n return;\n }\n\n writeValueToInput(input, field.value);\n });\n\n if (!found) {\n onMissingTarget?.(fieldName);\n }\n });\n}\n\n// \u2500\u2500\u2500 Helpers \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\n/**\n * Sets the value of a form control element, handling checkboxes,\n * arrays, booleans, and strings uniformly.\n */\nfunction writeValueToInput(\n input: HTMLInputElement | HTMLTextAreaElement | HTMLSelectElement,\n value: PulseFormField[\"value\"]\n): void {\n if (typeof value === \"string\") {\n input.value = value;\n } else if (typeof value === \"boolean\") {\n if (input instanceof HTMLInputElement && input.type === \"checkbox\") {\n input.checked = value;\n } else {\n input.value = String(value);\n }\n } else if (Array.isArray(value)) {\n input.value = value.join(\", \");\n } else {\n input.value = \"\";\n }\n}", "// \u2500\u2500\u2500 validateForm.ts \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n// Reusable validation utility. Call `validateForm(fields)` to validate all\n// fields, render errors, and focus the first invalid one. Call\n// `bindValidationListeners()` so errors clear themselves as the user fixes them.\n//\n// Usage:\n// import { validateForm, bindValidationListeners } from \"./validateForm\";\n//\n// // Validate ALL fields (default)\n// const { fields, isValid } = validateForm(fields);\n//\n// // Validate only fields inside a specific container\n// const step1 = document.getElementById(\"step-1\")!;\n// const { fields, isValid } = validateForm(fields, { scope: step1 });\n// \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\nimport {\n collectFormFields,\n extractValue,\n getFieldError,\n parseRequired,\n type PulseFormField,\n type FormBlockType,\n type FieldError,\n} from \"./collectFormFields\";\n\n// \u2500\u2500\u2500 Options \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\nexport interface ValidateFormOptions {\n /** Root element to query from. Default: document */\n root?: ParentNode;\n /**\n * Scope validation to only fields inside this container element.\n * When omitted, all fields inside `root` are validated.\n * When provided, only `[pulse-form-block]` elements that are\n * descendants of `scope` are validated \u2014 the rest are left untouched.\n */\n scope?: HTMLElement;\n /** intl-tel-input instance map \u2014 needed for phone validation */\n itiInstances?: Map<HTMLInputElement, any>;\n /** CSS class added to the error <span>. Default: \"pulse-form-error\" */\n errorClass?: string;\n /** CSS class added to the wrapper when it has an error. Default: \"has-error\" */\n wrapperErrorClass?: string;\n /** Scroll + focus the first invalid field. Default: true */\n focusFirst?: boolean;\n}\n\nexport interface ValidateFormResult {\n fields: PulseFormField[];\n isValid: boolean;\n}\n\nconst DEFAULTS = {\n errorClass: \"pulse-form-error\",\n wrapperErrorClass: \"has-error\",\n focusFirst: true,\n} as const;\n\n// \u2500\u2500\u2500 Internal: resolve the query target \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\n/**\n * Returns the element to querySelectorAll from.\n * `scope` takes priority over `root` \u2014 if scope is set, we only look inside it.\n */\nfunction resolveTarget(root: ParentNode, scope?: HTMLElement): ParentNode {\n return scope ?? root;\n}\n\n/**\n * Returns the set of field names present inside the target element.\n * Used to decide which entries in the fields array should be validated.\n */\nfunction getScopedFieldNames(target: ParentNode): Set<string> {\n const names = new Set<string>();\n target.querySelectorAll<HTMLElement>(\"[pulse-form-block]\").forEach((w) => {\n const name = w.getAttribute(\"pulse-field-name\")?.trim();\n if (name) names.add(name);\n });\n return names;\n}\n\n// \u2500\u2500\u2500 1. Validate Fields \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\n/**\n * Validates `[pulse-form-block]` elements, renders error messages on invalid\n * fields, and optionally focuses the first one.\n *\n * - **No `scope`** \u2192 validates every field inside `root` (default: document).\n * - **With `scope`** \u2192 validates only fields inside that container.\n * Fields outside the scope are returned unchanged (errors untouched).\n *\n * `isValid` reflects only the scoped fields.\n */\nexport function validateForm(\n fields: PulseFormField[],\n options: ValidateFormOptions = {}\n): ValidateFormResult {\n const {\n root = document,\n scope,\n itiInstances,\n errorClass = DEFAULTS.errorClass,\n wrapperErrorClass = DEFAULTS.wrapperErrorClass,\n focusFirst = DEFAULTS.focusFirst,\n } = options;\n\n const target = resolveTarget(root, scope);\n const wrappers = target.querySelectorAll<HTMLElement>(\"[pulse-form-block]\");\n const scopedNames = getScopedFieldNames(target);\n\n // Clear existing errors only inside the target\n clearAllErrors(target, errorClass, wrapperErrorClass);\n\n // Validate scoped fields, pass through the rest untouched\n const validated = fields.map((field) => {\n // Not in scope \u2192 leave as-is\n if (!scopedNames.has(field[\"field-name\"])) return field;\n\n const wrapper = findWrapper(wrappers, field[\"field-name\"]);\n if (!wrapper) return { ...field, error: null };\n\n const error = getFieldError(\n field[\"form-block\"],\n field.required,\n field.value,\n wrapper,\n itiInstances\n );\n\n if (error) {\n showError(wrapper, error, errorClass, wrapperErrorClass);\n }\n\n return { ...field, error };\n });\n\n // isValid only considers fields that were in scope\n const scopedFields = validated.filter((f) => scopedNames.has(f[\"field-name\"]));\n const isValid = scopedFields.every((f) => f.error === null);\n\n if (!isValid && focusFirst) {\n focusFirstError(target, wrapperErrorClass);\n }\n\n return { fields: validated, isValid };\n}\n\n// \u2500\u2500\u2500 2. Bind Reactive Error Clearing \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\n/**\n * Attaches listeners to form blocks so that when a field with an error\n * is edited and its value becomes valid, the error clears immediately.\n *\n * - **No `scope`** \u2192 binds to all fields inside `root`.\n * - **With `scope`** \u2192 binds only to fields inside that container.\n *\n * Call once after DOM is ready.\n */\nexport function bindValidationListeners(\n options: ValidateFormOptions & {\n /** Live fields getter \u2014 return the current fields array */\n getFields: () => PulseFormField[];\n /** Called with the updated field after reactive validation */\n onFieldValidated?: (fieldName: string, error: FieldError | null) => void;\n }\n): void {\n const {\n root = document,\n scope,\n itiInstances,\n errorClass = DEFAULTS.errorClass,\n wrapperErrorClass = DEFAULTS.wrapperErrorClass,\n getFields,\n onFieldValidated,\n } = options;\n\n const VALID_TYPES: FormBlockType[] = [\n \"text\", \"email\", \"phone\", \"checkbox\", \"radio\", \"select\", \"legal\",\n ];\n\n const target = resolveTarget(root, scope);\n const wrappers = target.querySelectorAll<HTMLElement>(\"[pulse-form-block]\");\n\n wrappers.forEach((wrapper) => {\n const type = wrapper\n .getAttribute(\"pulse-form-block\")\n ?.trim()\n .toLowerCase() as FormBlockType | undefined;\n\n if (!type || !VALID_TYPES.includes(type)) return;\n\n const onChange = () => {\n // Only react if this field currently has an error shown\n if (!wrapper.classList.contains(wrapperErrorClass)) return;\n\n const fieldName = wrapper.getAttribute(\"pulse-field-name\")?.trim();\n if (!fieldName) return;\n\n const fields = getFields();\n const field = fields.find((f) => f[\"field-name\"] === fieldName);\n if (!field) return;\n\n // Re-extract live value and validate\n const value = extractValue(type, wrapper);\n const error = getFieldError(type, field.required, value, wrapper, itiInstances);\n\n if (!error) {\n clearError(wrapper, errorClass, wrapperErrorClass);\n } else {\n // Update the error message (e.g. \"too short\" \u2192 \"invalid format\")\n showError(wrapper, error, errorClass, wrapperErrorClass);\n }\n\n onFieldValidated?.(fieldName, error);\n };\n\n switch (type) {\n case \"text\":\n case \"email\": {\n const input = wrapper.querySelector<HTMLInputElement | HTMLTextAreaElement>(\n \"input, textarea\"\n );\n if (input) {\n input.addEventListener(\"input\", onChange);\n input.addEventListener(\"change\", onChange);\n }\n break;\n }\n\n case \"phone\": {\n const phoneInput = wrapper.querySelector<HTMLInputElement>('input[type=\"tel\"]');\n if (phoneInput) {\n phoneInput.addEventListener(\"input\", onChange);\n phoneInput.addEventListener(\"change\", onChange);\n phoneInput.addEventListener(\"keyup\", onChange);\n phoneInput.addEventListener(\"countrychange\", onChange);\n }\n break;\n }\n\n case \"checkbox\":\n case \"legal\": {\n wrapper\n .querySelectorAll<HTMLInputElement>('input[type=\"checkbox\"]')\n .forEach((cb) => cb.addEventListener(\"change\", onChange));\n break;\n }\n\n case \"radio\": {\n wrapper\n .querySelectorAll<HTMLInputElement>('input[type=\"radio\"]')\n .forEach((r) => r.addEventListener(\"change\", onChange));\n break;\n }\n\n case \"select\": {\n const select = wrapper.querySelector<HTMLSelectElement>(\"select\");\n if (select) select.addEventListener(\"change\", onChange);\n break;\n }\n }\n });\n}\n\n// \u2500\u2500\u2500 3. Manual single-field validation \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\n/**\n * Validate a single field by name. Shows or clears the error on its wrapper.\n * Respects `scope` \u2014 if set, the field must be inside it to be found.\n */\nexport function validateField(\n fieldName: string,\n fields: PulseFormField[],\n options: ValidateFormOptions = {}\n): FieldError | null {\n const {\n root = document,\n scope,\n itiInstances,\n errorClass = DEFAULTS.errorClass,\n wrapperErrorClass = DEFAULTS.wrapperErrorClass,\n } = options;\n\n const field = fields.find((f) => f[\"field-name\"] === fieldName);\n if (!field) return null;\n\n const target = resolveTarget(root, scope);\n const wrapper = target.querySelector<HTMLElement>(\n `[pulse-field-name=\"${fieldName}\"]`\n );\n if (!wrapper) return null;\n\n const value = extractValue(field[\"form-block\"], wrapper);\n const error = getFieldError(\n field[\"form-block\"],\n field.required,\n value,\n wrapper,\n itiInstances\n );\n\n if (error) {\n showError(wrapper, error, errorClass, wrapperErrorClass);\n } else {\n clearError(wrapper, errorClass, wrapperErrorClass);\n }\n\n return error;\n}\n\n// \u2500\u2500\u2500 Error DOM Helpers \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\nfunction showError(\n wrapper: HTMLElement,\n error: FieldError,\n errorClass: string,\n wrapperErrorClass: string\n): void {\n const existing = wrapper.querySelector(`.${errorClass}`);\n if (existing) existing.remove();\n\n const span = document.createElement(\"span\");\n span.className = errorClass;\n span.textContent = error.message;\n span.setAttribute(\"data-error-code\", error.code);\n span.setAttribute(\n \"data-field-name\",\n wrapper.getAttribute(\"pulse-field-name\")?.trim() || \"\"\n );\n\n wrapper.classList.add(wrapperErrorClass);\n wrapper.appendChild(span);\n}\n\nfunction clearError(\n wrapper: HTMLElement,\n errorClass: string,\n wrapperErrorClass: string\n): void {\n const span = wrapper.querySelector(`.${errorClass}`);\n if (span) span.remove();\n wrapper.classList.remove(wrapperErrorClass);\n}\n\nfunction clearAllErrors(\n target: ParentNode,\n errorClass: string,\n wrapperErrorClass: string\n): void {\n target\n .querySelectorAll<HTMLElement>(`.${errorClass}`)\n .forEach((el) => el.remove());\n target\n .querySelectorAll<HTMLElement>(\"[pulse-form-block]\")\n .forEach((el) => el.classList.remove(wrapperErrorClass));\n}\n\nfunction focusFirstError(target: ParentNode, wrapperErrorClass: string): void {\n const first = target.querySelector<HTMLElement>(\n `[pulse-form-block].${wrapperErrorClass}`\n );\n if (!first) return;\n\n first.scrollIntoView({ behavior: \"smooth\", block: \"center\" });\n\n const focusable = first.querySelector<HTMLElement>(\n \"input, textarea, select\"\n );\n if (focusable) setTimeout(() => focusable.focus(), 400);\n}\n\nfunction findWrapper(\n wrappers: NodeListOf<HTMLElement>,\n fieldName: string\n): HTMLElement | undefined {\n return Array.from(wrappers).find(\n (w) => w.getAttribute(\"pulse-field-name\")?.trim() === fieldName\n );\n}", "import { initIntlTelInput } from \"./utils/initIntlTelInput\";\nimport { initFormJSON, bindFormListeners, onFieldsUpdate, getFormFields } from \"./utils/initFormControls\";\nimport { updateFlowType } from \"./utils/updateFlowType\";\nimport { fillMirrorValues } from \"./utils/fillMirrorValues\";\nimport { bindValidationListeners, validateForm } from \"./utils/validateForm\";\nimport { syncRequiredToDOM } from \"./utils/updateRequiredFields\";\n\ndocument.addEventListener(\"DOMContentLoaded\", () => {\n const itiInstances = initIntlTelInput();\n\n onFieldsUpdate((fields) => {\n const updated = updateFlowType(fields);\n (window as any).PulseFormData = updated;\n });\n onFieldsUpdate((fields) => fillMirrorValues(fields));\n\n initFormJSON();\n syncRequiredToDOM(getFormFields());\n bindFormListeners();\n\n // \u2500\u2500\u2500 Step 2 \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n const step2Container = document.getElementById(\"step-2-container\")!;\n const step2Button = document.getElementById(\"step-2-button\")!;\n\n // Reactive clearing \u2014 errors disappear as user fixes them inside step-2\n bindValidationListeners({\n scope: step2Container,\n getFields: getFormFields,\n itiInstances,\n });\n\n // On click \u2014 validate only fields inside step-2\n step2Button.addEventListener(\"click\", (e) => {\n e.preventDefault();\n\n const { fields, isValid } = validateForm(getFormFields(), {\n scope: step2Container,\n itiInstances,\n });\n\n (window as any).PulseFormData = fields;\n\n if (!isValid) return;\n\n // Step 2 passed \u2014 proceed to next step, submit, etc.\n console.log(\"Step 2 valid, moving on...\");\n });\n\n // \u2500\u2500\u2500 Step 3 \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n const step3Container = document.getElementById(\"step-3-container\")!;\n const step3Button = document.getElementById(\"step-3-button\")!;\n\n bindValidationListeners({\n scope: step3Container,\n getFields: getFormFields,\n itiInstances,\n });\n\n step3Button.addEventListener(\"click\", (e) => {\n e.preventDefault();\n\n console.log(\"step 3 clicked\");\n const { fields, isValid } = validateForm(getFormFields(), {\n scope: step3Container,\n itiInstances,\n });\n\n (window as any).PulseFormData = fields;\n\n console.log(\"Step 3 valid\", isValid);\n\n if (!isValid) return;\n\n console.log(\"Step 3 valid, proceeding to submit...\");\n });\n});"],
5
+ "mappings": "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",
6
+ "names": ["VALID_BLOCK_TYPES"]
7
+ }
@@ -1 +1 @@
1
- .w-form-formradioinput--inputType-custom.w--redirected-focus{box-shadow:none}.radio-checked{display:none}.w-form-formradioinput.w--redirected-checked~.radio-checked{display:flex}.w-checkbox-input--inputType-custom.w--redirected-focus{box-shadow:none}.w-input:focus,.w-select:focus{border-color:transparent;outline:0}.radio-inner-label{color:var(--text-colors--subtext)}input[type=radio]:checked+.radio-inner-label{color:var(--text-colors--title)}.checkbox-label{color:var(--text-colors--subtext)}.w-checkbox-input--inputType-custom.w--redirected-checked{background-color:#f66025;border-color:#f66025}input[type=checkbox]:checked+.checkbox-label{color:var(--text-colors--title)}.checkbox-field:has(input[type=checkbox]:checked){border-color:#f66025}.radio-inner-label,.checkbox-label{transition:color .3s ease}.checkbox-field{transition:border-color .3s ease}.w-checkbox-input--inputType-custom{transition:background-color .3s ease,border-color .3s ease}span.pulse-form-error{color:#e55757;font-size:var(--_text-size---body--s);line-height:var(--_line-height---line-height-body--s);font-weight:var(--_font-weight---font-weight-body--s);letter-spacing:var(--_letter-spacing---letter-spacing-body--s)}[data-error-code=ERR_LEGAL_REQUIRED]{padding-left:18px}[form-flow-active=false]{display:none}[form-flow-active=true]{display:flex}[fullwidth]{width:100%}[hs-calender-active=true]{display:block;width:100%}[hs-calender-active=false]{display:none}div#iti-0__dropdown-content{background-color:#121212;border-color:#242424}#iti-0__search-input{background:#242424}.iti__search-input-wrapper{border-color:#242424}iframe{border:1px solid transparent!important}.w-form-done{border:1px solid transparent}
1
+ .w-form-formradioinput--inputType-custom.w--redirected-focus{box-shadow:none}.radio-checked{display:none}.w-form-formradioinput.w--redirected-checked~.radio-checked{display:flex}.w-checkbox-input--inputType-custom.w--redirected-focus{box-shadow:none}.w-input:focus,.w-select:focus{border-color:transparent;outline:0}.radio-inner-label{color:var(--text-colors--subtext)}input[type=radio]:checked+.radio-inner-label{color:var(--text-colors--title)}.checkbox-label{color:var(--text-colors--subtext)}.w-checkbox-input--inputType-custom.w--redirected-checked{background-color:#f66025;border-color:#f66025}input[type=checkbox]:checked+.checkbox-label{color:var(--text-colors--title)}.checkbox-field:has(input[type=checkbox]:checked){border-color:#f66025}.radio-inner-label,.checkbox-label{transition:color .3s ease}.checkbox-field{transition:border-color .3s ease}.w-checkbox-input--inputType-custom{transition:background-color .3s ease,border-color .3s ease}span.pulse-form-error,.field-error{color:#e55757;font-size:var(--_text-size---body--s);line-height:var(--_line-height---line-height-body--s);font-weight:var(--_font-weight---font-weight-body--s);letter-spacing:var(--_letter-spacing---letter-spacing-body--s)}[data-error-code=ERR_LEGAL_REQUIRED]{padding-left:18px}[form-flow-active=false]{display:none}[form-flow-active=true]{display:flex}[fullwidth]{width:100%}[hs-calender-active=true]{display:block;width:100%}[hs-calender-active=false]{display:none}div#iti-0__dropdown-content{background-color:#121212;border-color:#242424}#iti-0__search-input{background:#242424}.iti__search-input-wrapper{border-color:#242424}iframe{border:1px solid transparent!important}.w-form-done{border:1px solid transparent}.hubspot-submitted-form{display:none!important}
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../src/form/styles.css"],
4
- "sourcesContent": [".w-form-formradioinput--inputType-custom.w--redirected-focus {\n box-shadow: none;\n}\n\n/* Hide by default */\n.radio-checked {\n display: none;\n}\n\n/* Show when the custom radio is checked */\n.w-form-formradioinput.w--redirected-checked~.radio-checked {\n display: flex;\n}\n\n.w-checkbox-input--inputType-custom.w--redirected-focus {\n box-shadow: none;\n}\n\n.w-input:focus,\n.w-select:focus {\n border-color: transparent;\n outline: 0;\n}\n\n/* Default state */\n.radio-inner-label {\n color: var(--text-colors--subtext);\n}\n\n/* When radio is checked */\ninput[type=\"radio\"]:checked+.radio-inner-label {\n color: var(--text-colors--title);\n}\n\n/* Default (unchecked) */\n.checkbox-label {\n color: var(--text-colors--subtext);\n}\n\n/* When checked */\ninput[type=\"checkbox\"]:checked+.checkbox-label {\n color: var(--text-colors--title);\n}\n\n.w-checkbox-input--inputType-custom.w--redirected-checked {\n background-color: #F66025;\n border-color: #F66025;\n}\n\n/* Change label color when checked */\ninput[type=\"checkbox\"]:checked+.checkbox-label {\n color: var(--text-colors--title);\n}\n\n/* Change parent border when checked */\n.checkbox-field:has(input[type=\"checkbox\"]:checked) {\n border-color: #F66025;\n}\n\n/* Smooth color transition for labels */\n.radio-inner-label,\n.checkbox-label {\n transition: color 300ms ease;\n}\n\n/* Smooth border transition for parent checkbox field */\n.checkbox-field {\n transition: border-color 300ms ease;\n}\n\n/* Smooth background + border transition for custom checkbox input */\n.w-checkbox-input--inputType-custom {\n transition: background-color 300ms ease, border-color 300ms ease;\n}\n\nspan.pulse-form-error {\n color: #e55757;\n font-size: var(--_text-size---body--s);\n line-height: var(--_line-height---line-height-body--s);\n font-weight: var(--_font-weight---font-weight-body--s);\n letter-spacing: var(--_letter-spacing---letter-spacing-body--s);\n}\n\n[data-error-code=\"ERR_LEGAL_REQUIRED\"] {\n padding-left: 18px;\n}\n\n[form-flow-active=\"false\"] {\n display: none;\n}\n\n[form-flow-active=\"true\"] {\n display: flex;\n}\n\n[fullwidth] {\n width: 100%;\n}\n\n[hs-calender-active=\"true\"] {\n display: block;\n width: 100%;\n}\n\n[hs-calender-active=\"false\"] {\n display: none;\n}\n\ndiv#iti-0__dropdown-content {\n background-color: #121212;\n border-color: #242424;\n}\n\n#iti-0__search-input {\n background: #242424;\n}\n\n.iti__search-input-wrapper {\n border-color: #242424;\n}"],
5
- "mappings": ";AAAA,CAAC,uCAAuC,CAAC;AACrC,cAAY;AAChB;AAGA,CAAC;AACG,WAAS;AACb;AAGA,CAAC,qBAAqB,CAAC,sBAAqB,EAAC,CAL5C;AAMG,WAAS;AACb;AAEA,CAAC,kCAAkC,CAdM;AAerC,cAAY;AAChB;AAEA,CAAC,OAAO;AACR,CAAC,QAAQ;AACL,gBAAc;AACd,WAAS;AACb;AAGA,CAAC;AACG,SAAO,IAAI;AACf;AAGA,KAAK,CAAC,WAAa,SAAQ,EAAC,CAL3B;AAMG,SAAO,IAAI;AACf;AAGA,CAAC;AACG,SAAO,IAAI;AACf;AAGA,KAAK,CAAC,cAAgB,SAAQ,EAAC,CAL9B;AAMG,SAAO,IAAI;AACf;AAEA,CA9BC,kCA8BkC,CAlCZ;AAmCnB,oBAAkB;AAClB,gBAAc;AAClB;AAGA,KAAK,CAAC,cAAgB,SAAQ,EAAC,CAf9B;AAgBG,SAAO,IAAI;AACf;AAGA,CAAC,cAAc,KAAK,KAAK,CAAC,cAAgB;AACtC,gBAAc;AAClB;AAGA,CAnCC;AAoCD,CA1BC;AA2BG,cAAY,MAAM,MAAM;AAC5B;AAGA,CAXC;AAYG,cAAY,aAAa,MAAM;AACnC;AAGA,CAzDC;AA0DG,cAAY,iBAAiB,MAAM,IAAI,EAAE,aAAa,MAAM;AAChE;AAEA,IAAI,CAAC;AACD,SAAO;AACP,aAAW,IAAI;AACf,eAAa,IAAI;AACjB,eAAa,IAAI;AACjB,kBAAgB,IAAI;AACxB;AAEA,CAAC;AACG,gBAAc;AAClB;AAEA,CAAC;AACG,WAAS;AACb;AAEA,CAAC;AACG,WAAS;AACb;AAEA,CAAC;AACG,SAAO;AACX;AAEA,CAAC;AACG,WAAS;AACT,SAAO;AACX;AAEA,CAAC;AACG,WAAS;AACb;AAEA,GAAG,CAAC;AACA,oBAAkB;AAClB,gBAAc;AAClB;AAEA,CAAC;AACG,cAAY;AAChB;AAEA,CAAC;AACG,gBAAc;AAClB;",
4
+ "sourcesContent": [".w-form-formradioinput--inputType-custom.w--redirected-focus {\n box-shadow: none;\n}\n\n/* Hide by default */\n.radio-checked {\n display: none;\n}\n\n/* Show when the custom radio is checked */\n.w-form-formradioinput.w--redirected-checked~.radio-checked {\n display: flex;\n}\n\n.w-checkbox-input--inputType-custom.w--redirected-focus {\n box-shadow: none;\n}\n\n.w-input:focus,\n.w-select:focus {\n border-color: transparent;\n outline: 0;\n}\n\n/* Default state */\n.radio-inner-label {\n color: var(--text-colors--subtext);\n}\n\n/* When radio is checked */\ninput[type=\"radio\"]:checked+.radio-inner-label {\n color: var(--text-colors--title);\n}\n\n/* Default (unchecked) */\n.checkbox-label {\n color: var(--text-colors--subtext);\n}\n\n/* When checked */\ninput[type=\"checkbox\"]:checked+.checkbox-label {\n color: var(--text-colors--title);\n}\n\n.w-checkbox-input--inputType-custom.w--redirected-checked {\n background-color: #F66025;\n border-color: #F66025;\n}\n\n/* Change label color when checked */\ninput[type=\"checkbox\"]:checked+.checkbox-label {\n color: var(--text-colors--title);\n}\n\n/* Change parent border when checked */\n.checkbox-field:has(input[type=\"checkbox\"]:checked) {\n border-color: #F66025;\n}\n\n/* Smooth color transition for labels */\n.radio-inner-label,\n.checkbox-label {\n transition: color 300ms ease;\n}\n\n/* Smooth border transition for parent checkbox field */\n.checkbox-field {\n transition: border-color 300ms ease;\n}\n\n/* Smooth background + border transition for custom checkbox input */\n.w-checkbox-input--inputType-custom {\n transition: background-color 300ms ease, border-color 300ms ease;\n}\n\nspan.pulse-form-error {\n color: #e55757;\n font-size: var(--_text-size---body--s);\n line-height: var(--_line-height---line-height-body--s);\n font-weight: var(--_font-weight---font-weight-body--s);\n letter-spacing: var(--_letter-spacing---letter-spacing-body--s);\n}\n.field-error{\n color: #e55757;\n font-size: var(--_text-size---body--s);\n line-height: var(--_line-height---line-height-body--s);\n font-weight: var(--_font-weight---font-weight-body--s);\n letter-spacing: var(--_letter-spacing---letter-spacing-body--s);\n}\n\n[data-error-code=\"ERR_LEGAL_REQUIRED\"] {\n padding-left: 18px;\n}\n\n[form-flow-active=\"false\"] {\n display: none;\n}\n\n[form-flow-active=\"true\"] {\n display: flex;\n}\n\n[fullwidth] {\n width: 100%;\n}\n\n[hs-calender-active=\"true\"] {\n display: block;\n width: 100%;\n}\n\n[hs-calender-active=\"false\"] {\n display: none;\n}\n\ndiv#iti-0__dropdown-content {\n background-color: #121212;\n border-color: #242424;\n}\n\n#iti-0__search-input {\n background: #242424;\n}\n\n.iti__search-input-wrapper {\n border-color: #242424;\n}\n\niframe {\n border: 1px solid transparent !important;\n}\n\n.w-form-done {\n border: 1px solid transparent;\n}\n\n.hubspot-submitted-form {\n display: none !important;\n}"],
5
+ "mappings": ";AAAA,CAAC,uCAAuC,CAAC;AACrC,cAAY;AAChB;AAGA,CAAC;AACG,WAAS;AACb;AAGA,CAAC,qBAAqB,CAAC,sBAAqB,EAAC,CAL5C;AAMG,WAAS;AACb;AAEA,CAAC,kCAAkC,CAdM;AAerC,cAAY;AAChB;AAEA,CAAC,OAAO;AACR,CAAC,QAAQ;AACL,gBAAc;AACd,WAAS;AACb;AAGA,CAAC;AACG,SAAO,IAAI;AACf;AAGA,KAAK,CAAC,WAAa,SAAQ,EAAC,CAL3B;AAMG,SAAO,IAAI;AACf;AAGA,CAAC;AACG,SAAO,IAAI;AACf;AAGA,KAAK,CAAC,cAAgB,SAAQ,EAAC,CAL9B;AAMG,SAAO,IAAI;AACf;AAEA,CA9BC,kCA8BkC,CAlCZ;AAmCnB,oBAAkB;AAClB,gBAAc;AAClB;AAGA,KAAK,CAAC,cAAgB,SAAQ,EAAC,CAf9B;AAgBG,SAAO,IAAI;AACf;AAGA,CAAC,cAAc,KAAK,KAAK,CAAC,cAAgB;AACtC,gBAAc;AAClB;AAGA,CAnCC;AAoCD,CA1BC;AA2BG,cAAY,MAAM,MAAM;AAC5B;AAGA,CAXC;AAYG,cAAY,aAAa,MAAM;AACnC;AAGA,CAzDC;AA0DG,cAAY,iBAAiB,MAAM,IAAI,EAAE,aAAa,MAAM;AAChE;AAEA,IAAI,CAAC;AACD,SAAO;AACP,aAAW,IAAI;AACf,eAAa,IAAI;AACjB,eAAa,IAAI;AACjB,kBAAgB,IAAI;AACxB;AACA,CAAC;AACG,SAAO;AACP,aAAW,IAAI;AACf,eAAa,IAAI;AACjB,eAAa,IAAI;AACjB,kBAAgB,IAAI;AACxB;AAEA,CAAC;AACG,gBAAc;AAClB;AAEA,CAAC;AACG,WAAS;AACb;AAEA,CAAC;AACG,WAAS;AACb;AAEA,CAAC;AACG,SAAO;AACX;AAEA,CAAC;AACG,WAAS;AACT,SAAO;AACX;AAEA,CAAC;AACG,WAAS;AACb;AAEA,GAAG,CAAC;AACA,oBAAkB;AAClB,gBAAc;AAClB;AAEA,CAAC;AACG,cAAY;AAChB;AAEA,CAAC;AACG,gBAAc;AAClB;AAEA;AACI,UAAQ,IAAI,MAAM;AACtB;AAEA,CAAC;AACG,UAAQ,IAAI,MAAM;AACtB;AAEA,CAAC;AACG,WAAS;AACb;",
6
6
  "names": []
7
7
  }
@@ -1 +1 @@
1
- [ai-gradient="1"]{background:linear-gradient(90deg,#ff84d2 2%,#ffa49d 46%,#ff5c2a 88%)}[ai-gradient="2"]{background:linear-gradient(90deg,#fd4fad 17%,#ff5200)}[style-bg-color=foreground]{background-color:var(--background-colors--foreground)}[style-bg-color=background]{background-color:var(--background-colors--background)}[style-type^=h]{font-family:var(--_font-family---heading);margin:0}[style-type=h1]{font-size:var(--_text-size---heading--h1);line-height:var(--_line-height---line-height-heading-tags--h1);font-weight:var(--_font-weight---font-weight-heading-tags--h1);letter-spacing:var(--_letter-spacing---letter-spacing-heading-tags--h1)}[style-type=h2]{font-size:var(--_text-size---heading--h2);line-height:var(--_line-height---line-height-heading-tags--h2);font-weight:var(--_font-weight---font-weight-heading-tags--h2);letter-spacing:var(--_letter-spacing---letter-spacing-heading-tags--h2)}[style-type=h3]{font-size:var(--_text-size---heading--h3);line-height:var(--_line-height---line-height-heading-tags--h3);font-weight:var(--_font-weight---font-weight-heading-tags--h3);letter-spacing:var(--_letter-spacing---letter-spacing-heading-tags--h3)}[style-type=h4]{font-size:var(--_text-size---heading--h4);line-height:var(--_line-height---line-height-heading-tags--h4);font-weight:var(--_font-weight---font-weight-heading-tags--h4);letter-spacing:var(--_letter-spacing---letter-spacing-heading-tags--h4)}[style-type=h5]{font-size:var(--_text-size---heading--h5);line-height:var(--_line-height---line-height-heading-tags--h5);font-weight:var(--_font-weight---font-weight-heading-tags--h5);letter-spacing:var(--_letter-spacing---letter-spacing-heading-tags--h5)}[style-type=h6]{font-size:var(--_text-size---heading--h6);line-height:var(--_line-height---line-height-heading-tags--h6);font-weight:var(--_font-weight---font-weight-heading-tags--h6);letter-spacing:var(--_letter-spacing---letter-spacing-heading-tags--h6)}[style-type^=title-]{font-family:var(--_font-family---title)}[style-type=title-l]{font-size:var(--_text-size---title--l);line-height:var(--_line-height---line-height-title--l);font-weight:var(--_font-weight---font-weight-title--l);letter-spacing:var(--_letter-spacing---letter-spacing-body--l)}[style-type=title-m]{font-size:var(--_text-size---title--m);line-height:var(--_line-height---line-height-title--m);font-weight:var(--_font-weight---font-weight-title--m);letter-spacing:var(--_letter-spacing---letter-spacing-title--m)}[style-type=title-s]{font-size:var(--_text-size---title--s);line-height:var(--_line-height---line-height-title--s);font-weight:var(--_font-weight---font-weight-title--s);letter-spacing:var(--_letter-spacing---letter-spacing-title--s)}[style-type^=display-]{font-family:var(--_font-family---display)}[style-type=display-l]{font-size:var(--_text-size---display--l);line-height:var(--_line-height---line-height-display--l);font-weight:var(--_font-weight---font-weight-display--l);letter-spacing:var(--_letter-spacing---letter-spacing-display--l)}[style-type=display-m]{font-size:var(--_text-size---display--m);line-height:var(--_line-height---line-height-display--m);font-weight:var(--_font-weight---font-weight-display--m);letter-spacing:var(--_letter-spacing---letter-spacing-display--m)}[style-type=display-s]{font-size:var(--_text-size---display--s);line-height:var(--_line-height---line-height-display--s);font-weight:var(--_font-weight---font-weight-display--s);letter-spacing:var(--_letter-spacing---letter-spacing-display--s)}[style-type^=body-]{font-family:var(--_font-family---body)}[style-type=body-l]{font-size:var(--_text-size---body--l);line-height:var(--_line-height---line-height-body--l);font-weight:var(--_font-weight---font-weight-body--l);letter-spacing:var(--_letter-spacing---letter-spacing-body--l)}[style-type=body-m]{font-size:var(--_text-size---body--m);line-height:var(--_line-height---line-height-body--m);font-weight:var(--_font-weight---font-weight-body--m);letter-spacing:var(--_letter-spacing---letter-spacing-body--m)}[style-type=body-s]{font-size:var(--_text-size---body--s);line-height:var(--_line-height---line-height-body--s);font-weight:var(--_font-weight---font-weight-body--s);letter-spacing:var(--_letter-spacing---letter-spacing-body--s)}[style-text-align=left]{text-align:left}[style-text-align=center]{text-align:center}[style-text-align=right]{text-align:right}[style-text-color=title]{color:var(--text-colors--title)}[style-text-color=subtext]{color:var(--text-colors--subtext)}[style-text-color=orange]{color:var(--text-colors--orange)}[style-button-color=orange]{background-color:var(--orange--orange40);border-color:var(--orange--orange40);color:var(--text-colors--title-inverse)}[style-button-color=white]{background-color:var(--white);border:1px solid var(--white);color:var(--text-colors--title-inverse)}[style-button-color=transparent]{background-color:var(--transparent);border:1px solid var(--white);color:var(--white)}[style-padding-y=small]{padding-top:var(--_spaces---padding--small);padding-bottom:var(--_spaces---padding--small)}[style-padding-y=large]{padding-top:var(--_spaces---padding--large);padding-bottom:var(--_spaces---padding--large)}[style-flex]{display:flex}[style-flex=center]{justify-content:center;align-items:center}[style-flex=left]{flex-direction:column;align-items:flex-start}[style-flex=right]{flex-direction:column;align-items:flex-end}[style-text-gradient=radial]{background:radial-gradient(circle,#ff84d2 18%,#ffa49d 63%,#ff5c2a 98%);-webkit-background-clip:text;-webkit-text-fill-color:transparent}.gradient-text{background:linear-gradient(70.54deg,#ff84d2 22.76%,#ffa49d 29.68%,#ff5c2a 38.24%);background-clip:text;-webkit-background-clip:text;color:transparent;-webkit-text-fill-color:transparent}[background-clip]{background-clip:text;-webkit-background-clip:text;color:transparent;-webkit-text-fill-color:transparent}[style-scrollbar=none]{scrollbar-width:none;-ms-overflow-style:none}[style-scrollbar=none]::-webkit-scrollbar{display:none}[custom-col-span="2"]{grid-area:span 1 / span 2 / span 1 / span 2}[custom-col-span="3"]{grid-area:span 1 / span 3 / span 1 / span 3}[custom-col-span="4"]{grid-area:span 1 / span 4 / span 1 / span 4}[custom-col-span="5"]{grid-area:span 1 / span 5 / span 1 / span 5}[style-height=full]{height:100%}[style-overflow=hidden]{overflow:hidden}[code-embed]{position:absolute;z-index:-100;opacity:0;pointer-events:none}
1
+ [ai-gradient="1"]{background:linear-gradient(90deg,#ff84d2 2%,#ffa49d 46%,#ff5c2a 88%)}[ai-gradient="2"]{background:linear-gradient(90deg,#fd4fad 17%,#ff5200)}[style-bg-color=foreground]{background-color:var(--background-colors--foreground)}[style-bg-color=background]{background-color:var(--background-colors--background)}[style-bg-gradient="1"]{background:linear-gradient(90deg,#ff84d2 2%,#ffa49d 46%,#ff5c2a 88%)}[style-type^=h]{font-family:var(--_font-family---heading);margin:0}[style-type=h1]{font-size:var(--_text-size---heading--h1);line-height:var(--_line-height---line-height-heading-tags--h1);font-weight:var(--_font-weight---font-weight-heading-tags--h1);letter-spacing:var(--_letter-spacing---letter-spacing-heading-tags--h1)}[style-type=h2]{font-size:var(--_text-size---heading--h2);line-height:var(--_line-height---line-height-heading-tags--h2);font-weight:var(--_font-weight---font-weight-heading-tags--h2);letter-spacing:var(--_letter-spacing---letter-spacing-heading-tags--h2)}[style-type=h3]{font-size:var(--_text-size---heading--h3);line-height:var(--_line-height---line-height-heading-tags--h3);font-weight:var(--_font-weight---font-weight-heading-tags--h3);letter-spacing:var(--_letter-spacing---letter-spacing-heading-tags--h3)}[style-type=h4]{font-size:var(--_text-size---heading--h4);line-height:var(--_line-height---line-height-heading-tags--h4);font-weight:var(--_font-weight---font-weight-heading-tags--h4);letter-spacing:var(--_letter-spacing---letter-spacing-heading-tags--h4)}[style-type=h5]{font-size:var(--_text-size---heading--h5);line-height:var(--_line-height---line-height-heading-tags--h5);font-weight:var(--_font-weight---font-weight-heading-tags--h5);letter-spacing:var(--_letter-spacing---letter-spacing-heading-tags--h5)}[style-type=h6]{font-size:var(--_text-size---heading--h6);line-height:var(--_line-height---line-height-heading-tags--h6);font-weight:var(--_font-weight---font-weight-heading-tags--h6);letter-spacing:var(--_letter-spacing---letter-spacing-heading-tags--h6)}[style-type^=title-]{font-family:var(--_font-family---title)}[style-type=title-l]{font-size:var(--_text-size---title--l);line-height:var(--_line-height---line-height-title--l);font-weight:var(--_font-weight---font-weight-title--l);letter-spacing:var(--_letter-spacing---letter-spacing-body--l)}[style-type=title-m]{font-size:var(--_text-size---title--m);line-height:var(--_line-height---line-height-title--m);font-weight:var(--_font-weight---font-weight-title--m);letter-spacing:var(--_letter-spacing---letter-spacing-title--m)}[style-type=title-s]{font-size:var(--_text-size---title--s);line-height:var(--_line-height---line-height-title--s);font-weight:var(--_font-weight---font-weight-title--s);letter-spacing:var(--_letter-spacing---letter-spacing-title--s)}[style-type^=display-]{font-family:var(--_font-family---display)}[style-type=display-l]{font-size:var(--_text-size---display--l);line-height:var(--_line-height---line-height-display--l);font-weight:var(--_font-weight---font-weight-display--l);letter-spacing:var(--_letter-spacing---letter-spacing-display--l)}[style-type=display-m]{font-size:var(--_text-size---display--m);line-height:var(--_line-height---line-height-display--m);font-weight:var(--_font-weight---font-weight-display--m);letter-spacing:var(--_letter-spacing---letter-spacing-display--m)}[style-type=display-s]{font-size:var(--_text-size---display--s);line-height:var(--_line-height---line-height-display--s);font-weight:var(--_font-weight---font-weight-display--s);letter-spacing:var(--_letter-spacing---letter-spacing-display--s)}[style-type^=body-]{font-family:var(--_font-family---body)}[style-type=body-l]{font-size:var(--_text-size---body--l);line-height:var(--_line-height---line-height-body--l);font-weight:var(--_font-weight---font-weight-body--l);letter-spacing:var(--_letter-spacing---letter-spacing-body--l)}[style-type=body-m]{font-size:var(--_text-size---body--m);line-height:var(--_line-height---line-height-body--m);font-weight:var(--_font-weight---font-weight-body--m);letter-spacing:var(--_letter-spacing---letter-spacing-body--m)}[style-type=body-s]{font-size:var(--_text-size---body--s);line-height:var(--_line-height---line-height-body--s);font-weight:var(--_font-weight---font-weight-body--s);letter-spacing:var(--_letter-spacing---letter-spacing-body--s)}[style-text-align=left]{text-align:left}[style-text-align=center]{text-align:center}[style-text-align=right]{text-align:right}[style-text-color=title]{color:var(--text-colors--title)}[style-text-color=subtext]{color:var(--text-colors--subtext)}[style-text-color=subtext-light]{color:var(--text-colors--subtext-light)}[style-text-color=orange]{color:var(--text-colors--orange)}[style-button-color=orange]{background-color:var(--orange--orange40);border-color:var(--orange--orange40);color:var(--text-colors--title-inverse)}[style-button-color=white]{background-color:var(--white);border:1px solid var(--white);color:var(--text-colors--title-inverse)}[style-button-color=transparent]{background-color:var(--transparent);border:1px solid var(--white);color:var(--white)}[style-padding-y=small]{padding-top:var(--_spaces---padding--small);padding-bottom:var(--_spaces---padding--small)}[style-padding-y=large]{padding-top:var(--_spaces---padding--large);padding-bottom:var(--_spaces---padding--large)}[style-flex]{display:flex}[style-flex=center]{justify-content:center;align-items:center}[style-flex=left]{flex-direction:column;align-items:flex-start}[style-flex=right]{flex-direction:column;align-items:flex-end}[style-text-gradient=radial]{background:radial-gradient(circle,#ff84d2 18%,#ffa49d 63%,#ff5c2a 98%);-webkit-background-clip:text;-webkit-text-fill-color:transparent}.gradient-text{background:linear-gradient(70.54deg,#ff84d2 22.76%,#ffa49d 29.68%,#ff5c2a 38.24%);background-clip:text;-webkit-background-clip:text;color:transparent;-webkit-text-fill-color:transparent}[background-clip]{background-clip:text;-webkit-background-clip:text;color:transparent;-webkit-text-fill-color:transparent}[style-scrollbar=none]{scrollbar-width:none;-ms-overflow-style:none}[style-scrollbar=none]::-webkit-scrollbar{display:none}[custom-col-span="2"]{grid-area:span 1 / span 2 / span 1 / span 2}[custom-col-span="3"]{grid-area:span 1 / span 3 / span 1 / span 3}[custom-col-span="4"]{grid-area:span 1 / span 4 / span 1 / span 4}[custom-col-span="5"]{grid-area:span 1 / span 5 / span 1 / span 5}[style-height=full]{height:100%}[style-overflow=hidden]{overflow:hidden}[code-embed]{position:absolute;z-index:-100;opacity:0;pointer-events:none}
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../src/global/styles.css"],
4
- "sourcesContent": ["/* ==================================================\n Gradient Backgrounds\n================================================== */\n\n[ai-gradient=\"1\"] {\n background: linear-gradient(\n 90deg,\n #ff84d2 2%,\n #ffa49d 46%,\n #ff5c2a 88%\n );\n}\n\n[ai-gradient=\"2\"] {\n background: linear-gradient(\n 90deg,\n #fd4fad 17%,\n #ff5200 100%\n );\n}\n\n\n/* ==================================================\n Solid Backgrounds\n================================================== */\n\n[style-bg-color=\"foreground\"] {\n background-color: var(--background-colors--foreground);\n}\n\n[style-bg-color=\"background\"] {\n background-color: var(--background-colors--background);\n}\n\n\n/* ==================================================\n Typography \u2013 Headings\n================================================== */\n\n[style-type^=\"h\"] {\n font-family: var(--_font-family---heading);\n margin: 0;\n}\n\n[style-type=\"h1\"] {\n font-size: var(--_text-size---heading--h1);\n line-height: var(--_line-height---line-height-heading-tags--h1);\n font-weight: var(--_font-weight---font-weight-heading-tags--h1);\n letter-spacing: var(--_letter-spacing---letter-spacing-heading-tags--h1);\n}\n\n[style-type=\"h2\"] {\n font-size: var(--_text-size---heading--h2);\n line-height: var(--_line-height---line-height-heading-tags--h2);\n font-weight: var(--_font-weight---font-weight-heading-tags--h2);\n letter-spacing: var(--_letter-spacing---letter-spacing-heading-tags--h2);\n}\n\n[style-type=\"h3\"] {\n font-size: var(--_text-size---heading--h3);\n line-height: var(--_line-height---line-height-heading-tags--h3);\n font-weight: var(--_font-weight---font-weight-heading-tags--h3);\n letter-spacing: var(--_letter-spacing---letter-spacing-heading-tags--h3);\n}\n\n[style-type=\"h4\"] {\n font-size: var(--_text-size---heading--h4);\n line-height: var(--_line-height---line-height-heading-tags--h4);\n font-weight: var(--_font-weight---font-weight-heading-tags--h4);\n letter-spacing: var(--_letter-spacing---letter-spacing-heading-tags--h4);\n}\n\n[style-type=\"h5\"] {\n font-size: var(--_text-size---heading--h5);\n line-height: var(--_line-height---line-height-heading-tags--h5);\n font-weight: var(--_font-weight---font-weight-heading-tags--h5);\n letter-spacing: var(--_letter-spacing---letter-spacing-heading-tags--h5);\n}\n\n[style-type=\"h6\"] {\n font-size: var(--_text-size---heading--h6);\n line-height: var(--_line-height---line-height-heading-tags--h6);\n font-weight: var(--_font-weight---font-weight-heading-tags--h6);\n letter-spacing: var(--_letter-spacing---letter-spacing-heading-tags--h6);\n}\n\n\n/* ==================================================\n Typography \u2013 Titles\n================================================== */\n\n[style-type^=\"title-\"] {\n font-family: var(--_font-family---title);\n}\n\n[style-type=\"title-l\"] {\n font-size: var(--_text-size---title--l);\n line-height: var(--_line-height---line-height-title--l);\n font-weight: var(--_font-weight---font-weight-title--l);\n letter-spacing: var(--_letter-spacing---letter-spacing-body--l);\n}\n\n[style-type=\"title-m\"] {\n font-size: var(--_text-size---title--m);\n line-height: var(--_line-height---line-height-title--m);\n font-weight: var(--_font-weight---font-weight-title--m);\n letter-spacing: var(--_letter-spacing---letter-spacing-title--m);\n}\n\n[style-type=\"title-s\"] {\n font-size: var(--_text-size---title--s);\n line-height: var(--_line-height---line-height-title--s);\n font-weight: var(--_font-weight---font-weight-title--s);\n letter-spacing: var(--_letter-spacing---letter-spacing-title--s);\n}\n\n\n/* ==================================================\n Typography \u2013 Display\n================================================== */\n\n[style-type^=\"display-\"] {\n font-family: var(--_font-family---display);\n}\n\n[style-type=\"display-l\"] {\n font-size: var(--_text-size---display--l);\n line-height: var(--_line-height---line-height-display--l);\n font-weight: var(--_font-weight---font-weight-display--l);\n letter-spacing: var(--_letter-spacing---letter-spacing-display--l);\n}\n\n[style-type=\"display-m\"] {\n font-size: var(--_text-size---display--m);\n line-height: var(--_line-height---line-height-display--m);\n font-weight: var(--_font-weight---font-weight-display--m);\n letter-spacing: var(--_letter-spacing---letter-spacing-display--m);\n}\n\n[style-type=\"display-s\"] {\n font-size: var(--_text-size---display--s);\n line-height: var(--_line-height---line-height-display--s);\n font-weight: var(--_font-weight---font-weight-display--s);\n letter-spacing: var(--_letter-spacing---letter-spacing-display--s);\n}\n\n\n/* ==================================================\n Typography \u2013 Body\n================================================== */\n\n[style-type^=\"body-\"] {\n font-family: var(--_font-family---body);\n}\n\n[style-type=\"body-l\"] {\n font-size: var(--_text-size---body--l);\n line-height: var(--_line-height---line-height-body--l);\n font-weight: var(--_font-weight---font-weight-body--l);\n letter-spacing: var(--_letter-spacing---letter-spacing-body--l);\n}\n\n[style-type=\"body-m\"] {\n font-size: var(--_text-size---body--m);\n line-height: var(--_line-height---line-height-body--m);\n font-weight: var(--_font-weight---font-weight-body--m);\n letter-spacing: var(--_letter-spacing---letter-spacing-body--m);\n}\n\n[style-type=\"body-s\"] {\n font-size: var(--_text-size---body--s);\n line-height: var(--_line-height---line-height-body--s);\n font-weight: var(--_font-weight---font-weight-body--s);\n letter-spacing: var(--_letter-spacing---letter-spacing-body--s);\n}\n\n\n/* ==================================================\n Text Alignment & Color\n================================================== */\n\n[style-text-align=\"left\"] { text-align: left; }\n[style-text-align=\"center\"] { text-align: center; }\n[style-text-align=\"right\"] { text-align: right; }\n\n[style-text-color=\"title\"] { color: var(--text-colors--title); }\n[style-text-color=\"subtext\"] { color: var(--text-colors--subtext); }\n[style-text-color=\"orange\"] { color: var(--text-colors--orange); }\n\n\n/* ==================================================\n Buttons\n================================================== */\n\n[style-button-color=\"orange\"] {\n background-color: var(--orange--orange40);\n border-color: var(--orange--orange40);\n color: var(--text-colors--title-inverse);\n}\n\n[style-button-color=\"white\"] {\n background-color: var(--white);\n border: 1px solid var(--white);\n color: var(--text-colors--title-inverse);\n}\n\n[style-button-color=\"transparent\"] {\n background-color: var(--transparent);\n border: 1px solid var(--white);\n color: var(--white);\n}\n\n\n/* ==================================================\n Spacing Utilities\n================================================== */\n\n[style-padding-y=\"small\"] {\n padding-top: var(--_spaces---padding--small);\n padding-bottom: var(--_spaces---padding--small);\n}\n\n[style-padding-y=\"large\"] {\n padding-top: var(--_spaces---padding--large);\n padding-bottom: var(--_spaces---padding--large);\n}\n\n\n/* ==================================================\n Flex Utilities\n================================================== */\n\n[style-flex] {\n display: flex;\n}\n\n[style-flex=\"center\"] {\n justify-content: center;\n align-items: center;\n}\n\n[style-flex=\"left\"] {\n flex-direction: column;\n align-items: flex-start;\n}\n\n[style-flex=\"right\"] {\n flex-direction: column;\n align-items: flex-end;\n}\n\n\n/* ==================================================\n Text Gradients\n================================================== */\n\n[style-text-gradient=\"radial\"] {\n background: radial-gradient(\n circle,\n #ff84d2 18%,\n #ffa49d 63%,\n #ff5c2a 98%\n );\n -webkit-background-clip: text;\n -webkit-text-fill-color: transparent;\n}\n\n.gradient-text {\n background: linear-gradient(\n 70.54deg,\n #ff84d2 22.76%,\n #ffa49d 29.68%,\n #ff5c2a 38.24%\n );\n background-clip: text;\n -webkit-background-clip: text;\n color: transparent;\n -webkit-text-fill-color: transparent;\n}\n\n[background-clip] {\n background-clip: text;\n -webkit-background-clip: text;\n color: transparent;\n -webkit-text-fill-color: transparent;\n}\n\n\n/* ==================================================\n Scrollbar Utilities\n================================================== */\n\n[style-scrollbar=\"none\"] {\n scrollbar-width: none;\n -ms-overflow-style: none;\n}\n\n[style-scrollbar=\"none\"]::-webkit-scrollbar {\n display: none;\n}\n\n\n/* ==================================================\n Grid Utilities\n================================================== */\n\n[custom-col-span=\"2\"] { grid-area: span 1 / span 2 / span 1 / span 2; }\n[custom-col-span=\"3\"] { grid-area: span 1 / span 3 / span 1 / span 3; }\n[custom-col-span=\"4\"] { grid-area: span 1 / span 4 / span 1 / span 4; }\n[custom-col-span=\"5\"] { grid-area: span 1 / span 5 / span 1 / span 5; }\n\n\n/* ==================================================\n Layout & Misc\n================================================== */\n\n[style-height=\"full\"] {\n height: 100%;\n}\n\n[style-overflow=\"hidden\"] {\n overflow: hidden;\n}\n\n[code-embed] {\n position: absolute;\n z-index: -100;\n opacity: 0;\n pointer-events: none;\n}"],
5
- "mappings": "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",
4
+ "sourcesContent": ["/* ==================================================\n Gradient Backgrounds\n================================================== */\n\n[ai-gradient=\"1\"] {\n background: linear-gradient(90deg,\n #ff84d2 2%,\n #ffa49d 46%,\n #ff5c2a 88%);\n}\n\n[ai-gradient=\"2\"] {\n background: linear-gradient(90deg,\n #fd4fad 17%,\n #ff5200 100%);\n}\n\n\n/* ==================================================\n Solid Backgrounds\n================================================== */\n\n[style-bg-color=\"foreground\"] {\n background-color: var(--background-colors--foreground);\n}\n\n[style-bg-color=\"background\"] {\n background-color: var(--background-colors--background);\n}\n\n/* ==================================================\n Gradient Backgrounds\n================================================== */\n[style-bg-gradient=\"1\"] {\n background: linear-gradient(90deg,\n #FF84D2 2%,\n #FFA49D 46%,\n #FF5C2A 88%);\n}\n\n/* ==================================================\n Typography \u2013 Headings\n================================================== */\n\n[style-type^=\"h\"] {\n font-family: var(--_font-family---heading);\n margin: 0;\n}\n\n[style-type=\"h1\"] {\n font-size: var(--_text-size---heading--h1);\n line-height: var(--_line-height---line-height-heading-tags--h1);\n font-weight: var(--_font-weight---font-weight-heading-tags--h1);\n letter-spacing: var(--_letter-spacing---letter-spacing-heading-tags--h1);\n}\n\n[style-type=\"h2\"] {\n font-size: var(--_text-size---heading--h2);\n line-height: var(--_line-height---line-height-heading-tags--h2);\n font-weight: var(--_font-weight---font-weight-heading-tags--h2);\n letter-spacing: var(--_letter-spacing---letter-spacing-heading-tags--h2);\n}\n\n[style-type=\"h3\"] {\n font-size: var(--_text-size---heading--h3);\n line-height: var(--_line-height---line-height-heading-tags--h3);\n font-weight: var(--_font-weight---font-weight-heading-tags--h3);\n letter-spacing: var(--_letter-spacing---letter-spacing-heading-tags--h3);\n}\n\n[style-type=\"h4\"] {\n font-size: var(--_text-size---heading--h4);\n line-height: var(--_line-height---line-height-heading-tags--h4);\n font-weight: var(--_font-weight---font-weight-heading-tags--h4);\n letter-spacing: var(--_letter-spacing---letter-spacing-heading-tags--h4);\n}\n\n[style-type=\"h5\"] {\n font-size: var(--_text-size---heading--h5);\n line-height: var(--_line-height---line-height-heading-tags--h5);\n font-weight: var(--_font-weight---font-weight-heading-tags--h5);\n letter-spacing: var(--_letter-spacing---letter-spacing-heading-tags--h5);\n}\n\n[style-type=\"h6\"] {\n font-size: var(--_text-size---heading--h6);\n line-height: var(--_line-height---line-height-heading-tags--h6);\n font-weight: var(--_font-weight---font-weight-heading-tags--h6);\n letter-spacing: var(--_letter-spacing---letter-spacing-heading-tags--h6);\n}\n\n\n/* ==================================================\n Typography \u2013 Titles\n================================================== */\n\n[style-type^=\"title-\"] {\n font-family: var(--_font-family---title);\n}\n\n[style-type=\"title-l\"] {\n font-size: var(--_text-size---title--l);\n line-height: var(--_line-height---line-height-title--l);\n font-weight: var(--_font-weight---font-weight-title--l);\n letter-spacing: var(--_letter-spacing---letter-spacing-body--l);\n}\n\n[style-type=\"title-m\"] {\n font-size: var(--_text-size---title--m);\n line-height: var(--_line-height---line-height-title--m);\n font-weight: var(--_font-weight---font-weight-title--m);\n letter-spacing: var(--_letter-spacing---letter-spacing-title--m);\n}\n\n[style-type=\"title-s\"] {\n font-size: var(--_text-size---title--s);\n line-height: var(--_line-height---line-height-title--s);\n font-weight: var(--_font-weight---font-weight-title--s);\n letter-spacing: var(--_letter-spacing---letter-spacing-title--s);\n}\n\n\n/* ==================================================\n Typography \u2013 Display\n================================================== */\n\n[style-type^=\"display-\"] {\n font-family: var(--_font-family---display);\n}\n\n[style-type=\"display-l\"] {\n font-size: var(--_text-size---display--l);\n line-height: var(--_line-height---line-height-display--l);\n font-weight: var(--_font-weight---font-weight-display--l);\n letter-spacing: var(--_letter-spacing---letter-spacing-display--l);\n}\n\n[style-type=\"display-m\"] {\n font-size: var(--_text-size---display--m);\n line-height: var(--_line-height---line-height-display--m);\n font-weight: var(--_font-weight---font-weight-display--m);\n letter-spacing: var(--_letter-spacing---letter-spacing-display--m);\n}\n\n[style-type=\"display-s\"] {\n font-size: var(--_text-size---display--s);\n line-height: var(--_line-height---line-height-display--s);\n font-weight: var(--_font-weight---font-weight-display--s);\n letter-spacing: var(--_letter-spacing---letter-spacing-display--s);\n}\n\n\n/* ==================================================\n Typography \u2013 Body\n================================================== */\n\n[style-type^=\"body-\"] {\n font-family: var(--_font-family---body);\n}\n\n[style-type=\"body-l\"] {\n font-size: var(--_text-size---body--l);\n line-height: var(--_line-height---line-height-body--l);\n font-weight: var(--_font-weight---font-weight-body--l);\n letter-spacing: var(--_letter-spacing---letter-spacing-body--l);\n}\n\n[style-type=\"body-m\"] {\n font-size: var(--_text-size---body--m);\n line-height: var(--_line-height---line-height-body--m);\n font-weight: var(--_font-weight---font-weight-body--m);\n letter-spacing: var(--_letter-spacing---letter-spacing-body--m);\n}\n\n[style-type=\"body-s\"] {\n font-size: var(--_text-size---body--s);\n line-height: var(--_line-height---line-height-body--s);\n font-weight: var(--_font-weight---font-weight-body--s);\n letter-spacing: var(--_letter-spacing---letter-spacing-body--s);\n}\n\n\n/* ==================================================\n Text Alignment & Color\n================================================== */\n\n[style-text-align=\"left\"] {\n text-align: left;\n}\n\n[style-text-align=\"center\"] {\n text-align: center;\n}\n\n[style-text-align=\"right\"] {\n text-align: right;\n}\n\n[style-text-color=\"title\"] {\n color: var(--text-colors--title);\n}\n\n[style-text-color=\"subtext\"] {\n color: var(--text-colors--subtext);\n}\n\n[style-text-color=\"subtext-light\"] {\n color: var(--text-colors--subtext-light)\n}\n\n[style-text-color=\"orange\"] {\n color: var(--text-colors--orange);\n}\n\n\n/* ==================================================\n Buttons\n================================================== */\n\n[style-button-color=\"orange\"] {\n background-color: var(--orange--orange40);\n border-color: var(--orange--orange40);\n color: var(--text-colors--title-inverse);\n}\n\n[style-button-color=\"white\"] {\n background-color: var(--white);\n border: 1px solid var(--white);\n color: var(--text-colors--title-inverse);\n}\n\n[style-button-color=\"transparent\"] {\n background-color: var(--transparent);\n border: 1px solid var(--white);\n color: var(--white);\n}\n\n\n/* ==================================================\n Spacing Utilities\n================================================== */\n\n[style-padding-y=\"small\"] {\n padding-top: var(--_spaces---padding--small);\n padding-bottom: var(--_spaces---padding--small);\n}\n\n[style-padding-y=\"large\"] {\n padding-top: var(--_spaces---padding--large);\n padding-bottom: var(--_spaces---padding--large);\n}\n\n\n/* ==================================================\n Flex Utilities\n================================================== */\n\n[style-flex] {\n display: flex;\n}\n\n[style-flex=\"center\"] {\n justify-content: center;\n align-items: center;\n}\n\n[style-flex=\"left\"] {\n flex-direction: column;\n align-items: flex-start;\n}\n\n[style-flex=\"right\"] {\n flex-direction: column;\n align-items: flex-end;\n}\n\n\n/* ==================================================\n Text Gradients\n================================================== */\n\n[style-text-gradient=\"radial\"] {\n background: radial-gradient(circle,\n #ff84d2 18%,\n #ffa49d 63%,\n #ff5c2a 98%);\n -webkit-background-clip: text;\n -webkit-text-fill-color: transparent;\n}\n\n.gradient-text {\n background: linear-gradient(70.54deg,\n #ff84d2 22.76%,\n #ffa49d 29.68%,\n #ff5c2a 38.24%);\n background-clip: text;\n -webkit-background-clip: text;\n color: transparent;\n -webkit-text-fill-color: transparent;\n}\n\n[background-clip] {\n background-clip: text;\n -webkit-background-clip: text;\n color: transparent;\n -webkit-text-fill-color: transparent;\n}\n\n\n/* ==================================================\n Scrollbar Utilities\n================================================== */\n\n[style-scrollbar=\"none\"] {\n scrollbar-width: none;\n -ms-overflow-style: none;\n}\n\n[style-scrollbar=\"none\"]::-webkit-scrollbar {\n display: none;\n}\n\n\n/* ==================================================\n Grid Utilities\n================================================== */\n\n[custom-col-span=\"2\"] {\n grid-area: span 1 / span 2 / span 1 / span 2;\n}\n\n[custom-col-span=\"3\"] {\n grid-area: span 1 / span 3 / span 1 / span 3;\n}\n\n[custom-col-span=\"4\"] {\n grid-area: span 1 / span 4 / span 1 / span 4;\n}\n\n[custom-col-span=\"5\"] {\n grid-area: span 1 / span 5 / span 1 / span 5;\n}\n\n\n/* ==================================================\n Layout & Misc\n================================================== */\n\n[style-height=\"full\"] {\n height: 100%;\n}\n\n[style-overflow=\"hidden\"] {\n overflow: hidden;\n}\n\n[code-embed] {\n position: absolute;\n z-index: -100;\n opacity: 0;\n pointer-events: none;\n}"],
5
+ "mappings": "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",
6
6
  "names": []
7
7
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@rtstic.dev/pulse",
3
- "version": "0.0.42",
3
+ "version": "0.0.43",
4
4
  "description": "pulse website",
5
5
  "license": "license-of-your-project",
6
6
  "keywords": [],