Plugin Directory

Changeset 3404538


Ignore:
Timestamp:
11/28/2025 01:36:40 AM (4 months ago)
Author:
bookitfast
Message:

minor fixes

Location:
book-it-fast
Files:
8 edited

Legend:

Unmodified
Added
Removed
  • book-it-fast/tags/1.0.4/build/editor.asset.php

    r3404456 r3404538  
    1 <?php return array('dependencies' => array('react', 'react-jsx-runtime', 'wp-block-editor', 'wp-blocks', 'wp-components', 'wp-primitives'), 'version' => '764c6ac8790051826665');
     1<?php return array('dependencies' => array('react', 'react-jsx-runtime', 'wp-block-editor', 'wp-blocks', 'wp-components', 'wp-primitives'), 'version' => '69f49e52a87c621b78d6');
  • book-it-fast/tags/1.0.4/build/editor.js

    r3404456 r3404538  
    1 (()=>{var e={609:e=>{"use strict";e.exports=window.React},926:function(e,t,a){!function(e,t){"use strict";function a(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),a.push.apply(a,r)}return a}function r(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{};t%2?a(Object(r),!0).forEach((function(t){o(e,t,r[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(r)):a(Object(r)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(r,t))}))}return e}function n(e){return n="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},n(e)}function o(e,t,a){return t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}function i(e,t){if(null==e)return{};var a,r,n=function(e,t){if(null==e)return{};var a,r,n={},o=Object.keys(e);for(r=0;r<o.length;r++)a=o[r],t.indexOf(a)>=0||(n[a]=e[a]);return n}(e,t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(r=0;r<o.length;r++)a=o[r],t.indexOf(a)>=0||Object.prototype.propertyIsEnumerable.call(e,a)&&(n[a]=e[a])}return n}function l(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var a=e&&("undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"]);if(null!=a){var r,n,o=[],_n=!0,i=!1;try{for(a=a.call(e);!(_n=(r=a.next()).done)&&(o.push(r.value),!t||o.length!==t);_n=!0);}catch(e){i=!0,n=e}finally{try{_n||null==a.return||a.return()}finally{if(i)throw n}}return o}}(e,t)||function(e,t){if(e){if("string"==typeof e)return c(e,t);var a=Object.prototype.toString.call(e).slice(8,-1);return"Object"===a&&e.constructor&&(a=e.constructor.name),"Map"===a||"Set"===a?Array.from(e):"Arguments"===a||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(a)?c(e,t):void 0}}(e,t)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function c(e,t){(null==t||t>e.length)&&(t=e.length);for(var a=0,r=new Array(t);a<t;a++)r[a]=e[a];return r}function s(e){return e&&e.__esModule&&Object.prototype.hasOwnProperty.call(e,"default")?e.default:e}var u,m,p,d,f={exports:{}};f.exports=function(){if(d)return p;d=1;var e=m?u:(m=1,u="SECRET_DO_NOT_PASS_THIS_OR_YOU_WILL_BE_FIRED");function t(){}function a(){}return a.resetWarningCache=t,p=function(){function r(t,a,r,n,o,i){if(i!==e){var l=new Error("Calling PropTypes validators directly is not supported by the `prop-types` package. Use PropTypes.checkPropTypes() to call them. Read more at http://fb.me/use-check-prop-types");throw l.name="Invariant Violation",l}}function n(){return r}r.isRequired=r;var o={array:r,bool:r,func:r,number:r,object:r,string:r,symbol:r,any:r,arrayOf:n,element:r,elementType:r,instanceOf:n,node:r,objectOf:n,oneOf:n,oneOfType:n,shape:n,exact:n,checkPropTypes:a,resetWarningCache:t};return o.PropTypes=o,o}}()();var b=s(f.exports),h=function(e,a,r){var n=!!r,o=t.useRef(r);t.useEffect((function(){o.current=r}),[r]),t.useEffect((function(){if(!n||!e)return function(){};var t=function(){o.current&&o.current.apply(o,arguments)};return e.on(a,t),function(){e.off(a,t)}}),[n,a,e,o])},y=function(e){var a=t.useRef(e);return t.useEffect((function(){a.current=e}),[e]),a.current},g=function(e){return null!==e&&"object"===n(e)},E="[object Object]",v=function e(t,a){if(!g(t)||!g(a))return t===a;var r=Array.isArray(t);if(r!==Array.isArray(a))return!1;var n=Object.prototype.toString.call(t)===E;if(n!==(Object.prototype.toString.call(a)===E))return!1;if(!n&&!r)return t===a;var o=Object.keys(t),i=Object.keys(a);if(o.length!==i.length)return!1;for(var l={},c=0;c<o.length;c+=1)l[o[c]]=!0;for(var s=0;s<i.length;s+=1)l[i[s]]=!0;var u=Object.keys(l);if(u.length!==o.length)return!1;var m=t,p=a;return u.every((function(t){return e(m[t],p[t])}))},R=function(e,t,a){return g(e)?Object.keys(e).reduce((function(n,i){var l=!g(t)||!v(e[i],t[i]);return a.includes(i)?(l&&console.warn("Unsupported prop change: options.".concat(i," is not a mutable property.")),n):l?r(r({},n||{}),{},o({},i,e[i])):n}),null):null},_="Invalid prop `stripe` supplied to `Elements`. We recommend using the `loadStripe` utility from `@stripe/stripe-js`. See https://stripe.com/docs/stripe-js/react#elements-props-stripe for details.",C=function(e){var t,a=arguments.length>1&&void 0!==arguments[1]?arguments[1]:_;if(null===e||g(t=e)&&"function"==typeof t.elements&&"function"==typeof t.createToken&&"function"==typeof t.createPaymentMethod&&"function"==typeof t.confirmCardPayment)return e;throw new Error(a)},w=function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:_;if(function(e){return g(e)&&"function"==typeof e.then}(e))return{tag:"async",stripePromise:Promise.resolve(e).then((function(e){return C(e,t)}))};var a=C(e,t);return null===a?{tag:"empty"}:{tag:"sync",stripe:a}},N=function(e){e&&e._registerWrapper&&e.registerAppInfo&&(e._registerWrapper({name:"react-stripe-js",version:"3.6.0"}),e.registerAppInfo({name:"react-stripe-js",version:"3.6.0",url:"https://stripe.com/docs/stripe-js/react"}))},k=t.createContext(null);k.displayName="ElementsContext";var S=function(e,t){if(!e)throw new Error("Could not find Elements context; You need to wrap the part of your app that ".concat(t," in an <Elements> provider."));return e},x=function(e){var a=e.stripe,r=e.options,n=e.children,o=t.useMemo((function(){return w(a)}),[a]),i=l(t.useState((function(){return{stripe:"sync"===o.tag?o.stripe:null,elements:"sync"===o.tag?o.stripe.elements(r):null}})),2),c=i[0],s=i[1];t.useEffect((function(){var e=!0,t=function(e){s((function(t){return t.stripe?t:{stripe:e,elements:e.elements(r)}}))};return"async"!==o.tag||c.stripe?"sync"!==o.tag||c.stripe||t(o.stripe):o.stripePromise.then((function(a){a&&e&&t(a)})),function(){e=!1}}),[o,c,r]);var u=y(a);t.useEffect((function(){null!==u&&u!==a&&console.warn("Unsupported prop change on Elements: You cannot change the `stripe` prop after setting it.")}),[u,a]);var m=y(r);return t.useEffect((function(){if(c.elements){var e=R(r,m,["clientSecret","fonts"]);e&&c.elements.update(e)}}),[r,m,c.elements]),t.useEffect((function(){N(c.stripe)}),[c.stripe]),t.createElement(k.Provider,{value:c},n)};x.propTypes={stripe:b.any,options:b.object};var P=function(e){var a=t.useContext(k);return S(a,e)},O=function(e){return(0,e.children)(P("mounts <ElementsConsumer>"))};O.propTypes={children:b.func.isRequired};var I=["on","session"],T=t.createContext(null);T.displayName="CheckoutSdkContext";var j=function(e,t){if(!e)throw new Error("Could not find CheckoutProvider context; You need to wrap the part of your app that ".concat(t," in an <CheckoutProvider> provider."));return e},D=t.createContext(null);D.displayName="CheckoutContext";var F=function(e){var a=e.stripe,r=e.options,n=e.children,o=t.useMemo((function(){return w(a,"Invalid prop `stripe` supplied to `CheckoutProvider`. We recommend using the `loadStripe` utility from `@stripe/stripe-js`. See https://stripe.com/docs/stripe-js/react#elements-props-stripe for details.")}),[a]),c=l(t.useState(null),2),s=c[0],u=c[1],m=l(t.useState((function(){return{stripe:"sync"===o.tag?o.stripe:null,checkoutSdk:null}})),2),p=m[0],d=m[1],f=function(e,t){d((function(a){return a.stripe&&a.checkoutSdk?a:{stripe:e,checkoutSdk:t}}))},b=t.useRef(!1);t.useEffect((function(){var e=!0;return"async"!==o.tag||p.stripe?"sync"===o.tag&&o.stripe&&!b.current&&(b.current=!0,o.stripe.initCheckout(r).then((function(e){e&&(f(o.stripe,e),e.on("change",u))}))):o.stripePromise.then((function(t){t&&e&&!b.current&&(b.current=!0,t.initCheckout(r).then((function(e){e&&(f(t,e),e.on("change",u))})))})),function(){e=!1}}),[o,p,r,u]);var h=y(a);t.useEffect((function(){null!==h&&h!==a&&console.warn("Unsupported prop change on CheckoutProvider: You cannot change the `stripe` prop after setting it.")}),[h,a]);var g=y(r);t.useEffect((function(){var e,t;if(p.checkoutSdk){var a=null==g||null===(e=g.elementsOptions)||void 0===e?void 0:e.appearance,n=null==r||null===(t=r.elementsOptions)||void 0===t?void 0:t.appearance;n&&!v(n,a)&&p.checkoutSdk.changeAppearance(n)}}),[r,g,p.checkoutSdk]),t.useEffect((function(){N(p.stripe)}),[p.stripe]);var E=t.useMemo((function(){return function(e,t){if(!e)return null;e.on,e.session;var a=i(e,I);return t?Object.assign(t,a):Object.assign(e.session(),a)}(p.checkoutSdk,s)}),[p.checkoutSdk,s]);return p.checkoutSdk?t.createElement(T.Provider,{value:p},t.createElement(D.Provider,{value:E},n)):null};F.propTypes={stripe:b.any,options:b.shape({fetchClientSecret:b.func.isRequired,elementsOptions:b.object}).isRequired};var A=function(e){var a=t.useContext(T),r=t.useContext(k);if(a&&r)throw new Error("You cannot wrap the part of your app that ".concat(e," in both <CheckoutProvider> and <Elements> providers."));return a?j(a,e):S(r,e)},B=["mode"],$=function(e,a){var r,n="".concat((r=e).charAt(0).toUpperCase()+r.slice(1),"Element"),o=a?function(e){A("mounts <".concat(n,">"));var a=e.id,r=e.className;return t.createElement("div",{id:a,className:r})}:function(a){var r,o=a.id,c=a.className,s=a.options,u=void 0===s?{}:s,m=a.onBlur,p=a.onFocus,d=a.onReady,f=a.onChange,b=a.onEscape,g=a.onClick,E=a.onLoadError,v=a.onLoaderStart,_=a.onNetworksChange,C=a.onConfirm,w=a.onCancel,N=a.onShippingAddressChange,k=a.onShippingRateChange,S=A("mounts <".concat(n,">")),x="elements"in S?S.elements:null,P="checkoutSdk"in S?S.checkoutSdk:null,O=l(t.useState(null),2),I=O[0],T=O[1],j=t.useRef(null),D=t.useRef(null);h(I,"blur",m),h(I,"focus",p),h(I,"escape",b),h(I,"click",g),h(I,"loaderror",E),h(I,"loaderstart",v),h(I,"networkschange",_),h(I,"confirm",C),h(I,"cancel",w),h(I,"shippingaddresschange",N),h(I,"shippingratechange",k),h(I,"change",f),d&&(r="expressCheckout"===e?d:function(){d(I)}),h(I,"ready",r),t.useLayoutEffect((function(){if(null===j.current&&null!==D.current&&(x||P)){var t=null;if(P)switch(e){case"payment":t=P.createPaymentElement(u);break;case"address":if(!("mode"in u))throw new Error("You must supply options.mode. mode must be 'billing' or 'shipping'.");var a=u.mode,r=i(u,B);if("shipping"===a)t=P.createShippingAddressElement(r);else{if("billing"!==a)throw new Error("Invalid options.mode. mode must be 'billing' or 'shipping'.");t=P.createBillingAddressElement(r)}break;case"expressCheckout":t=P.createExpressCheckoutElement(u);break;case"currencySelector":t=P.createCurrencySelectorElement();break;default:throw new Error("Invalid Element type ".concat(n,". You must use either the <PaymentElement />, <AddressElement options={{mode: 'shipping'}} />, <AddressElement options={{mode: 'billing'}} />, or <ExpressCheckoutElement />."))}else x&&(t=x.create(e,u));j.current=t,T(t),t&&t.mount(D.current)}}),[x,P,u]);var F=y(u);return t.useEffect((function(){if(j.current){var e=R(u,F,["paymentRequest"]);e&&"update"in j.current&&j.current.update(e)}}),[u,F]),t.useLayoutEffect((function(){return function(){if(j.current&&"function"==typeof j.current.destroy)try{j.current.destroy(),j.current=null}catch(e){}}}),[]),t.createElement("div",{id:o,className:c,ref:D})};return o.propTypes={id:b.string,className:b.string,onChange:b.func,onBlur:b.func,onFocus:b.func,onReady:b.func,onEscape:b.func,onClick:b.func,onLoadError:b.func,onLoaderStart:b.func,onNetworksChange:b.func,onConfirm:b.func,onCancel:b.func,onShippingAddressChange:b.func,onShippingRateChange:b.func,options:b.object},o.displayName=n,o.__elementType=e,o},G="undefined"==typeof window,L=t.createContext(null);L.displayName="EmbeddedCheckoutProviderContext";var M=function(){var e=t.useContext(L);if(!e)throw new Error("<EmbeddedCheckout> must be used within <EmbeddedCheckoutProvider>");return e},z=G?function(e){var a=e.id,r=e.className;return M(),t.createElement("div",{id:a,className:r})}:function(e){var a=e.id,r=e.className,n=M().embeddedCheckout,o=t.useRef(!1),i=t.useRef(null);return t.useLayoutEffect((function(){return!o.current&&n&&null!==i.current&&(n.mount(i.current),o.current=!0),function(){if(o.current&&n)try{n.unmount(),o.current=!1}catch(e){}}}),[n]),t.createElement("div",{ref:i,id:a,className:r})},U=$("auBankAccount",G),q=$("card",G),H=$("cardNumber",G),Y=$("cardExpiry",G),W=$("cardCvc",G),V=$("fpxBank",G),Z=$("iban",G),J=$("idealBank",G),K=$("p24Bank",G),Q=$("epsBank",G),X=$("payment",G),ee=$("expressCheckout",G),te=$("currencySelector",G),ae=$("paymentRequestButton",G),re=$("linkAuthentication",G),ne=$("address",G),oe=$("shippingAddress",G),ie=$("paymentMethodMessaging",G),le=$("affirmMessage",G),ce=$("afterpayClearpayMessage",G);e.AddressElement=ne,e.AffirmMessageElement=le,e.AfterpayClearpayMessageElement=ce,e.AuBankAccountElement=U,e.CardCvcElement=W,e.CardElement=q,e.CardExpiryElement=Y,e.CardNumberElement=H,e.CheckoutProvider=F,e.CurrencySelectorElement=te,e.Elements=x,e.ElementsConsumer=O,e.EmbeddedCheckout=z,e.EmbeddedCheckoutProvider=function(e){var a=e.stripe,r=e.options,n=e.children,o=t.useMemo((function(){return w(a,"Invalid prop `stripe` supplied to `EmbeddedCheckoutProvider`. We recommend using the `loadStripe` utility from `@stripe/stripe-js`. See https://stripe.com/docs/stripe-js/react#elements-props-stripe for details.")}),[a]),i=t.useRef(null),c=t.useRef(null),s=l(t.useState({embeddedCheckout:null}),2),u=s[0],m=s[1];t.useEffect((function(){if(!c.current&&!i.current){var e=function(e){c.current||i.current||(c.current=e,i.current=c.current.initEmbeddedCheckout(r).then((function(e){m({embeddedCheckout:e})})))};"async"!==o.tag||c.current||!r.clientSecret&&!r.fetchClientSecret?"sync"!==o.tag||c.current||!r.clientSecret&&!r.fetchClientSecret||e(o.stripe):o.stripePromise.then((function(t){t&&e(t)}))}}),[o,r,u,c]),t.useEffect((function(){return function(){u.embeddedCheckout?(i.current=null,u.embeddedCheckout.destroy()):i.current&&i.current.then((function(){i.current=null,u.embeddedCheckout&&u.embeddedCheckout.destroy()}))}}),[u.embeddedCheckout]),t.useEffect((function(){N(c)}),[c]);var p=y(a);t.useEffect((function(){null!==p&&p!==a&&console.warn("Unsupported prop change on EmbeddedCheckoutProvider: You cannot change the `stripe` prop after setting it.")}),[p,a]);var d=y(r);return t.useEffect((function(){null!=d&&(null!=r?(void 0===r.clientSecret&&void 0===r.fetchClientSecret&&console.warn("Invalid props passed to EmbeddedCheckoutProvider: You must provide one of either `options.fetchClientSecret` or `options.clientSecret`."),null!=d.clientSecret&&r.clientSecret!==d.clientSecret&&console.warn("Unsupported prop change on EmbeddedCheckoutProvider: You cannot change the client secret after setting it. Unmount and create a new instance of EmbeddedCheckoutProvider instead."),null!=d.fetchClientSecret&&r.fetchClientSecret!==d.fetchClientSecret&&console.warn("Unsupported prop change on EmbeddedCheckoutProvider: You cannot change fetchClientSecret after setting it. Unmount and create a new instance of EmbeddedCheckoutProvider instead."),null!=d.onComplete&&r.onComplete!==d.onComplete&&console.warn("Unsupported prop change on EmbeddedCheckoutProvider: You cannot change the onComplete option after setting it."),null!=d.onShippingDetailsChange&&r.onShippingDetailsChange!==d.onShippingDetailsChange&&console.warn("Unsupported prop change on EmbeddedCheckoutProvider: You cannot change the onShippingDetailsChange option after setting it."),null!=d.onLineItemsChange&&r.onLineItemsChange!==d.onLineItemsChange&&console.warn("Unsupported prop change on EmbeddedCheckoutProvider: You cannot change the onLineItemsChange option after setting it.")):console.warn("Unsupported prop change on EmbeddedCheckoutProvider: You cannot unset options after setting them."))}),[d,r]),t.createElement(L.Provider,{value:u},n)},e.EpsBankElement=Q,e.ExpressCheckoutElement=ee,e.FpxBankElement=V,e.IbanElement=Z,e.IdealBankElement=J,e.LinkAuthenticationElement=re,e.P24BankElement=K,e.PaymentElement=X,e.PaymentMethodMessagingElement=ie,e.PaymentRequestButtonElement=ae,e.ShippingAddressElement=oe,e.useCheckout=function(){!function(e){var a=t.useContext(T);j(a,e)}("calls useCheckout()");var e=t.useContext(D);if(!e)throw new Error("Could not find Checkout Context; You need to wrap the part of your app that calls useCheckout() in an <CheckoutProvider> provider.");return e},e.useElements=function(){return P("calls useElements()").elements},e.useStripe=function(){return A("calls useStripe()").stripe}}(t,a(609))}},t={};function a(r){var n=t[r];if(void 0!==n)return n.exports;var o=t[r]={exports:{}};return e[r].call(o.exports,o,o.exports,a),o.exports}(()=>{"use strict";var e,t=a(609),r="https://js.stripe.com",n="".concat(r,"/v3"),o=/^https:\/\/js\.stripe\.com\/v3\/?(\?.*)?$/,i=/^https:\/\/js\.stripe\.com\/(v3|[a-z]+)\/stripe\.js(\?.*)?$/,l="loadStripe.setLoadParameters was called but an existing Stripe.js script already exists in the document; existing script parameters will be used",c=function(e){var t=e&&!e.advancedFraudSignals?"?advancedFraudSignals=false":"",a=document.createElement("script");a.src="".concat(n).concat(t);var r=document.head||document.body;if(!r)throw new Error("Expected document.body not to be null. Stripe.js requires a <body> element.");return r.appendChild(a),a},s=null,u=null,m=null,p=!1,d=function(){return e||(e=(t=null,null!==s?s:(s=new Promise((function(e,a){if("undefined"!=typeof window&&"undefined"!=typeof document)if(window.Stripe&&t&&console.warn(l),window.Stripe)e(window.Stripe);else try{var n=function(){for(var e,t=document.querySelectorAll('script[src^="'.concat(r,'"]')),a=0;a<t.length;a++){var n=t[a];if(e=n.src,o.test(e)||i.test(e))return n}return null}();if(n&&t)console.warn(l);else if(n){if(n&&null!==m&&null!==u){var s;n.removeEventListener("load",m),n.removeEventListener("error",u),null===(s=n.parentNode)||void 0===s||s.removeChild(n),n=c(t)}}else n=c(t);m=function(e,t){return function(){window.Stripe?e(window.Stripe):t(new Error("Stripe.js not available"))}}(e,a),u=function(e){return function(t){e(new Error("Failed to load Stripe.js",{cause:t}))}}(a),n.addEventListener("load",m),n.addEventListener("error",u)}catch(e){return void a(e)}else e(null)}))).catch((function(e){return s=null,Promise.reject(e)}))).catch((function(t){return e=null,Promise.reject(t)})));var t};Promise.resolve().then((function(){return d()})).catch((function(e){p||console.warn(e)}));var f=function(){for(var e=arguments.length,t=new Array(e),a=0;a<e;a++)t[a]=arguments[a];p=!0;var r=Date.now();return d().then((function(e){return function(e,t,a){if(null===e)return null;var r=t[0].match(/^pk_test/),n=function(e){return 3===e?"v3":e}(e.version);r&&"v3"!==n&&console.warn("Stripe.js@".concat(n," was loaded on the page, but @stripe/stripe-js@").concat("5.10.0"," expected Stripe.js@").concat("v3",". This may result in unexpected behavior. For more information, see https://docs.stripe.com/sdks/stripejs-versioning"));var o=e.apply(void 0,t);return function(e,t){e&&e._registerWrapper&&e._registerWrapper({name:"stripe-js",version:"5.10.0",startTime:t})}(o,a),o}(e,t,r)}))},b=a(926);const h=e=>({AUD:"AUD$",USD:"USD$",NZD:"NZD$",GBP:"GBP£",EUR:"EUR€",CAD:"CAD$",SGD:"SGD$"}[e]||e+" "),y=(()=>{const e=window.wpApiSettings?.restUrl;return e?e.replace(/\/$/,""):document.querySelector('link[rel="https://api.w.org/"]').href.replace(/\/$/,"")})(),g=(f("your-publishable-key-here"),e=>new URLSearchParams(window.location.search).get(e)),E=({property:e,isSelected:t,onToggle:a,nights:r,checkInDate:n,showPropertyImages:o,includeIcons:i})=>{e.availability?.total_cost||e.availability?.dates?.reduce(((e,t)=>e+(t.rate||0)),0);const l=e.availability?.available;return React.createElement("div",{className:`bif-tile ${t?"bif-selected":""} ${l?"":"is-unavailable"}`},o&&e.property_image&&React.createElement("div",{className:"bif-tile__hero"},React.createElement("img",{loading:"lazy",src:e.property_image,alt:e.property_name}),React.createElement("span",{className:"bif-chip "+(l?"":"unavailable")},((e,t,a)=>{if(e)return"Available";switch(t){case"Booked Out":return"Booked Out";case"No Tariff Set":return"No Rates Set";case"Min Nights":return`Minimum ${a||2} Nights`;default:return"Unavailable"}})(l,e.availability?.availability_reason,e.availability?.min_nights))),React.createElement("div",{className:"bif-tile__content"},React.createElement("h3",{className:"bif-tile__title"},e.property_name),i&&e.property_features&&React.createElement("ul",{className:"bif-amenities bif-amenities--slim"},1===e.property_features.wifi&&React.createElement("li",null,React.createElement("span",null,"📶 WiFi")),e.property_features.queen_beds>0&&React.createElement("li",null,React.createElement("span",null,"🛏️ ",e.property_features.queen_beds," Queen")),e.property_features.king_beds>0&&React.createElement("li",null,React.createElement("span",null,"🛏️ ",e.property_features.king_beds," King")),e.property_features.double_beds>0&&React.createElement("li",null,React.createElement("span",null,"🛏️ ",e.property_features.double_beds," Double")),e.property_features.single_beds>0&&React.createElement("li",null,React.createElement("span",null,"🛏️ ",e.property_features.single_beds," Single")),e.property_features.bunk_beds>0&&React.createElement("li",null,React.createElement("span",null,"🛏️ ",e.property_features.bunk_beds," Bunk")),e.property_features.sofa_beds>0&&React.createElement("li",null,React.createElement("span",null,"🛋️ ",e.property_features.sofa_beds," Sofa bed")),e.property_features.bedrooms&&React.createElement("li",null,React.createElement("span",null,"🏠 ",e.property_features.bedrooms," Bedroom",e.property_features.bedrooms>1?"s":"")),e.property_features.living_areas&&React.createElement("li",null,React.createElement("span",null,"🛋️ ",e.property_features.living_areas," Living Area",e.property_features.living_areas>1?"s":""))),e.availability?.dates&&React.createElement("div",{className:"bif-tile__rates"},e.availability.dates.map(((e,t)=>React.createElement("div",{key:t,className:"bif-pill "+(e.availability?"ok":"na")},React.createElement("span",{className:"bif-pill__date"},e.date_formatted),React.createElement("strong",{className:"bif-pill__amt"},e.availability?`$${e.rate}`:"Booked Out"===e.availability_reason?"Booked":"No Tariff Set"===e.availability_reason?"No Rate":"N/A"))))),React.createElement("div",{className:"bif-tile__footer"},l?React.createElement("button",{onClick:a,className:"bif-btn "+(t?"bif-btn-selected":"bif-btn-select")},t?"✓ Selected":"Select"):React.createElement("button",{disabled:!0,className:"bif-btn bif-btn-disabled"},"Unavailable")),t&&e.optional_extras?.length>0&&React.createElement("div",{className:"bif-optional-extras"},React.createElement("h4",{className:"bif-daily-breakdown-title"},"Optional Extras"),React.createElement("div",{className:"bif-extras-list"},e.optional_extras.map((t=>React.createElement("div",{key:t.id,className:"bif-extra-item"},React.createElement("div",{className:"bif-extra-info"},React.createElement("input",{type:"checkbox",checked:e.selectedExtras?.[t.id]||!1,onChange:()=>e.onToggleExtra?.(e.id,t.id)}),React.createElement("label",null,t.description)),React.createElement("div",{className:"bif-extra-price"},"$",t.amount))))))))},v=({property:e,isSelected:t,onToggle:a,nights:r,checkInDate:n,showPropertyImages:o,includeIcons:i})=>{e.availability?.total_cost||e.availability?.dates?.reduce(((e,t)=>e+(t.rate||0)),0);const l=e.availability?.available;return React.createElement("div",{className:`bif-row ${t?"bif-selected":""} ${l?"":"is-unavailable"} ${o&&e.property_image?"":"no-image"}`},o&&e.property_image&&React.createElement("div",{className:"bif-row__thumb"},React.createElement("img",{loading:"lazy",src:e.property_image,alt:e.property_name})),React.createElement("div",{className:"bif-row__main"},React.createElement("div",{className:"bif-row__top"},React.createElement("h3",{className:"bif-row__title"},e.property_name),React.createElement("span",{className:"bif-dot "+(c=l,c?"ok":"na"),"aria-hidden":"true"})),i&&e.property_features&&React.createElement("ul",{className:"bif-amenities bif-amenities--inline"},1===e.property_features.wifi&&React.createElement("li",null,React.createElement("span",null,"📶 WiFi")),e.property_features.queen_beds>0&&React.createElement("li",null,React.createElement("span",null,"🛏️ ",e.property_features.queen_beds," Queen")),e.property_features.king_beds>0&&React.createElement("li",null,React.createElement("span",null,"🛏️ ",e.property_features.king_beds," King")),e.property_features.double_beds>0&&React.createElement("li",null,React.createElement("span",null,"🛏️ ",e.property_features.double_beds," Double")),e.property_features.single_beds>0&&React.createElement("li",null,React.createElement("span",null,"🛏️ ",e.property_features.single_beds," Single")),e.property_features.bunk_beds>0&&React.createElement("li",null,React.createElement("span",null,"🛏️ ",e.property_features.bunk_beds," Bunk")),e.property_features.sofa_beds>0&&React.createElement("li",null,React.createElement("span",null,"🛋️ ",e.property_features.sofa_beds," Sofa bed")),e.property_features.bedrooms&&React.createElement("li",null,React.createElement("span",null,"🏠 ",e.property_features.bedrooms," Bedroom",e.property_features.bedrooms>1?"s":"")),e.property_features.living_areas&&React.createElement("li",null,React.createElement("span",null,"🛋️ ",e.property_features.living_areas," Living Area",e.property_features.living_areas>1?"s":"")))),e.availability?.dates&&React.createElement("div",{className:"bif-row__rates"},e.availability.dates.map(((e,t)=>React.createElement("div",{key:t,className:"bif-rmini "+(e.availability?"ok":"na")},React.createElement("div",{className:"bif-rmini__date"},e.date_formatted),React.createElement("div",{className:"bif-rmini__amt"},e.availability?`$${e.rate}`:"Booked Out"===e.availability_reason?"Booked":"No Tariff Set"===e.availability_reason?"No Rate":"N/A"))))),React.createElement("div",{className:"bif-row__cta"},l?React.createElement("button",{onClick:a,className:"bif-btn "+(t?"bif-btn-selected":"bif-btn-select")},t?"✓ Selected":"Select"):React.createElement("button",{disabled:!0,className:"bif-btn bif-btn-disabled"},"Unavailable")),t&&e.optional_extras?.length>0&&React.createElement("div",{className:"bif-optional-extras",style:{gridColumn:"1 / -1",marginTop:"1rem"}},React.createElement("h4",{className:"bif-daily-breakdown-title"},"Optional Extras"),React.createElement("div",{className:"bif-extras-list"},e.optional_extras.map((t=>React.createElement("div",{key:t.id,className:"bif-extra-item"},React.createElement("div",{className:"bif-extra-info"},React.createElement("input",{type:"checkbox",checked:e.selectedExtras?.[t.id]||!1,onChange:()=>e.onToggleExtra?.(e.id,t.id)}),React.createElement("label",null,t.description)),React.createElement("div",{className:"bif-extra-price"},"$",t.amount)))))));var c},R=({property:e,isSelected:t,onToggle:a,nights:r,checkInDate:n,showPropertyImages:o,includeIcons:i})=>{const l=e.availability?.total_cost||e.availability?.dates?.reduce(((e,t)=>e+(t.rate||0)),0)||0,c=e.availability?.available,s=(e,t,a)=>{if(e)return"Available";switch(t){case"Booked Out":return"Booked Out";case"No Tariff Set":return"No Rates Set";case"Min Nights":return`Minimum ${a||2} Nights`;default:return"Unavailable"}};return React.createElement("div",{className:`bif-property-card ${t?"bif-selected":""} ${c?"":"bif-unavailable"}`},React.createElement("div",{className:"bif-property-header"},o&&e.property_image&&React.createElement("div",{className:"bif-property-image"},React.createElement("img",{src:e.property_image,alt:e.property_name})),React.createElement("div",{className:"bif-property-info"},React.createElement("h3",{className:"bif-property-name"},e.property_name),e.property_description&&React.createElement("p",{className:"bif-property-description"},e.property_description),i&&e.property_features&&React.createElement("div",{className:"bif-property-icons"},1===e.property_features.wifi&&React.createElement("span",{className:"bif-property-icon",title:"WiFi Available"},"📶 WiFi"),e.property_features.queen_beds>0&&React.createElement("span",{className:"bif-property-icon",title:`${e.property_features.queen_beds} Queen bed${e.property_features.queen_beds>1?"s":""}`},"🛏️ ",e.property_features.queen_beds," Queen"),e.property_features.king_beds>0&&React.createElement("span",{className:"bif-property-icon",title:`${e.property_features.king_beds} King bed${e.property_features.king_beds>1?"s":""}`},"🛏️ ",e.property_features.king_beds," King"),e.property_features.double_beds>0&&React.createElement("span",{className:"bif-property-icon",title:`${e.property_features.double_beds} Double bed${e.property_features.double_beds>1?"s":""}`},"🛏️ ",e.property_features.double_beds," Double"),e.property_features.single_beds>0&&React.createElement("span",{className:"bif-property-icon",title:`${e.property_features.single_beds} Single bed${e.property_features.single_beds>1?"s":""}`},"🛏️ ",e.property_features.single_beds," Single"),e.property_features.bunk_beds>0&&React.createElement("span",{className:"bif-property-icon",title:`${e.property_features.bunk_beds} Bunk bed${e.property_features.bunk_beds>1?"s":""}`},"🛏️ ",e.property_features.bunk_beds," Bunk"),e.property_features.sofa_beds>0&&React.createElement("span",{className:"bif-property-icon",title:`${e.property_features.sofa_beds} Sofa bed${e.property_features.sofa_beds>1?"s":""}`},"🛋️ ",e.property_features.sofa_beds," Sofa bed"),e.property_features.bedrooms&&React.createElement("span",{className:"bif-property-icon",title:`${e.property_features.bedrooms} bedroom${e.property_features.bedrooms>1?"s":""}`},"🏠 ",e.property_features.bedrooms," Bedroom",e.property_features.bedrooms>1?"s":""),e.property_features.living_areas&&React.createElement("span",{className:"bif-property-icon",title:`${e.property_features.living_areas} living area${e.property_features.living_areas>1?"s":""}`},"🛋️ ",e.property_features.living_areas," Living Area",e.property_features.living_areas>1?"s":""))),React.createElement("div",{className:"bif-property-status-container"},React.createElement("span",{className:`bif-property-status ${((e,t)=>{if(e)return"bif-status-available";switch(t){case"Booked Out":return"bif-status-booked";case"No Tariff Set":return"bif-status-no-rate";case"Min Nights":return"bif-status-min-nights";default:return"bif-status-unavailable"}})(c,e.availability?.availability_reason)}`},s(c,e.availability?.availability_reason,e.availability?.min_nights)),c?React.createElement("button",{onClick:a,className:`bif-btn ${t?"bif-btn-selected":"bif-btn-select"} bif-header-btn`,style:{marginLeft:"0.75rem"}},t?"✓ Selected":"Select Property"):React.createElement("button",{disabled:!0,className:"bif-btn bif-btn-disabled bif-header-btn",style:{marginLeft:"0.75rem"}},s(c,e.availability?.availability_reason,e.availability?.min_nights)))),e.availability?.dates&&React.createElement("div",{className:"bif-availability-details"},React.createElement("h4",{className:"bif-daily-breakdown-title"},"Daily Rate Breakdown"),React.createElement("div",{className:"bif-daily-rates"},e.availability.dates.map(((e,t)=>React.createElement("div",{key:t,className:"bif-daily-rate "+(e.availability?"bif-available":"bif-unavailable")},React.createElement("div",{className:"bif-date"},e.date_formatted),React.createElement("div",{className:"bif-rate"},e.availability?`$${e.rate}`:"Booked Out"===e.availability_reason?"Booked":"No Tariff Set"===e.availability_reason?"No Rate":"N/A"))))),React.createElement("div",{className:"bif-rate-summary"},React.createElement("div",{className:"bif-summary-row"},React.createElement("span",{className:"bif-total"},"Total: $",l)))),t&&e.optional_extras?.length>0&&React.createElement("div",{className:"bif-optional-extras"},React.createElement("h4",{className:"bif-daily-breakdown-title"},"Optional Extras"),React.createElement("div",{className:"bif-extras-list"},e.optional_extras.map((t=>React.createElement("div",{key:t.id,className:"bif-extra-item"},React.createElement("div",{className:"bif-extra-info"},React.createElement("input",{type:"checkbox",checked:e.selectedExtras?.[t.id]||!1,onChange:()=>e.onToggleExtra?.(e.id,t.id)}),React.createElement("label",null,t.description)),React.createElement("div",{className:"bif-extra-price"},"$",t.amount)))))))},_=({checkInDate:e,nights:t,onDateChange:a,onNightsChange:r,onCheckAvailability:n,isLoading:o,minNights:i,maxNights:l,buttonIcon:c="search",searchLayout:s="default"})=>{const u=(new Date).toISOString().split("T")[0],m={search:"🔍",calendar:"📅",home:"🏠",mapMarker:"📍",star:"⭐",pin:"📌",pinSmall:"📍",globe:"🌍"}[c]||"🔍";return"horizontal"===s?React.createElement("div",{className:"bif-search-box-horizontal"},React.createElement("div",{className:"bif-search-field",onClick:()=>document.querySelector('.bif-search-box-horizontal input[type="date"]')?.showPicker?.()},React.createElement("span",{className:"bif-search-icon"},React.createElement("svg",{width:"20",height:"20",viewBox:"0 0 20 20",fill:"none",xmlns:"http://www.w3.org/2000/svg"},React.createElement("rect",{x:"3",y:"4",width:"14",height:"13",rx:"1",stroke:"currentColor",strokeWidth:"1.5"}),React.createElement("line",{x1:"3",y1:"8",x2:"17",y2:"8",stroke:"currentColor",strokeWidth:"1.5"}),React.createElement("line",{x1:"7",y1:"2",x2:"7",y2:"5",stroke:"currentColor",strokeWidth:"1.5",strokeLinecap:"round"}),React.createElement("line",{x1:"13",y1:"2",x2:"13",y2:"5",stroke:"currentColor",strokeWidth:"1.5",strokeLinecap:"round"}))),React.createElement("div",{className:"bif-search-field-content"},React.createElement("label",null,"Check-In"),React.createElement("input",{type:"date",value:e,onChange:e=>a(e.target.value),min:u}))),React.createElement("div",{className:"bif-search-divider"}),React.createElement("div",{className:"bif-search-field"},React.createElement("span",{className:"bif-search-icon"},React.createElement("svg",{width:"20",height:"20",viewBox:"0 0 20 20",fill:"currentColor",xmlns:"http://www.w3.org/2000/svg"},React.createElement("path",{d:"M17 10.5c0 3.59-2.69 6.5-6 6.5s-6-2.91-6-6.5S7.69 4 11 4c.35 0 .69.03 1.02.09A5.5 5.5 0 0 0 17 10.5z"}))),React.createElement("div",{className:"bif-search-field-content"},React.createElement("label",null,"Nights"),React.createElement("select",{value:t,onChange:e=>r(parseInt(e.target.value))},[...Array(l-i+1).keys()].map((e=>{const t=i+e;return React.createElement("option",{key:t,value:t},t)}))))),React.createElement("button",{onClick:n,disabled:!e||o,className:"bif-search-button"},o?"Checking...":"Search")):React.createElement("div",{className:"bif-date-selector"},React.createElement("h2",{className:"bif-section-title"},"Select Your Dates"),React.createElement("div",{className:"bif-date-form"},React.createElement("div",{className:"bif-form-field"},React.createElement("label",null,"Check-in Date"),React.createElement("input",{type:"date",value:e,onChange:e=>a(e.target.value),min:u,className:"bif-date-input"})),React.createElement("div",{className:"bif-form-field"},React.createElement("label",null,"Number of Nights"),React.createElement("select",{value:t,onChange:e=>r(parseInt(e.target.value)),className:"bif-nights-select"},[...Array(l-i+1).keys()].map((e=>{const t=i+e;return React.createElement("option",{key:t,value:t},t," ",1===t?"night":"nights")})))),React.createElement("div",{className:"bif-form-field"},React.createElement("button",{onClick:n,disabled:!e||o,className:"bif-btn bif-btn-primary bif-check-availability bif-has-icon-preview"},o?React.createElement(React.Fragment,null,React.createElement("div",{className:"bif-spinner"}),React.createElement("span",null,"Checking...")):React.createElement(React.Fragment,null,React.createElement("span",{className:"bif-icon-preview"},m),React.createElement("span",null,"Check Availability"))))))},C=({selectedProperties:e,selectedExtras:t,nights:a,total:r,discountCode:n,onDiscountCodeChange:o,onApplyDiscount:i,checkInDate:l,summary:c,showDiscount:s=!1,showRedeemGiftCertificate:u=!1,giftCertificate:m,onGiftCertificateChange:p,showGiftCertificateForm:d,onTriggerShowGiftCertificate:f,onApplyGiftCertificate:b,gcResult:h,gcLoading:y=!1})=>{Object.values(t).flat().reduce(((e,t)=>e+(t.amount||0)),0);const g=c&&parseFloat(c.order_discount_code_total||0)>0;return e&&0!==e.length?React.createElement("div",{className:"bif-booking-summary"},React.createElement("h3",{className:"bif-section-title"},"Booking Summary"),React.createElement("div",{className:"bif-summary-content"},e.map((e=>{const a=e.sub_total||e.availability?.total_cost||e.availability?.dates?.reduce(((e,t)=>e+(t.rate||0)),0)||0,r=e.mandatory_extras_total||e.mandatory_extras?.reduce(((e,t)=>e+parseFloat(t.amount||0)),0)||0,n=e.optional_extras_total||0,o=parseFloat(a)+parseFloat(r)+parseFloat(n);return React.createElement("div",{key:e.id,className:"bif-property-summary"},React.createElement("h5",{className:"bif-property-summary-name"},e.property_name),React.createElement("div",{className:"bif-property-total"},React.createElement("div",{className:"bif-total-row"},React.createElement("span",null,"Property Subtotal"),React.createElement("span",null,"$",parseFloat(a).toFixed(2)))),e.mandatory_extras&&e.mandatory_extras.length>0&&React.createElement("div",{className:"bif-mandatory-extras-summary"},React.createElement("h4",{className:"bif-daily-breakdown-title"},"Mandatory Extras"),e.mandatory_extras.map((e=>React.createElement("div",{key:e.id,className:"bif-total-row",style:{fontSize:"0.875rem",color:"#dc2626"}},React.createElement("span",null,e.description),React.createElement("span",null,"$",parseFloat(e.amount).toFixed(2)))))),e.optional_extras&&e.optional_extras.filter((e=>e.selected)).length>0&&React.createElement("div",{className:"bif-optional-extras-summary"},React.createElement("h4",{className:"bif-daily-breakdown-title"},"Optional Extras"),e.optional_extras.filter((e=>e.selected)).map((e=>React.createElement("div",{key:e.id,className:"bif-total-row",style:{fontSize:"0.875rem",color:"#92400e"}},React.createElement("span",null,e.description),React.createElement("span",null,"$",parseFloat(e.amount).toFixed(2)))))),React.createElement("div",{className:"bif-property-total"},React.createElement("div",{className:"bif-total-row bif-subtotal"},React.createElement("span",null,"Property Total"),React.createElement("span",null,"$",parseFloat(o).toFixed(2)))),!e.optional_extras&&t[e.id]&&t[e.id].length>0&&React.createElement("div",{className:"bif-optional-extras-summary"},React.createElement("h4",{className:"bif-daily-breakdown-title"},"Selected Optional Extras"),t[e.id].map((e=>React.createElement("div",{key:e.id,className:"bif-total-row",style:{fontSize:"0.875rem",color:"#92400e"}},React.createElement("span",null,e.description),React.createElement("span",null,"$",parseFloat(e.amount).toFixed(2)))))))})),s&&React.createElement("div",{className:"bif-summary-section"},React.createElement("div",{className:"bif-discount-form"},React.createElement("input",{type:"text",placeholder:"Enter discount code",value:n,onChange:e=>o(e.target.value),className:"bif-discount-input"}),React.createElement("button",{onClick:()=>{n.trim()&&i(n)},className:"bif-btn "+(n.trim()?"bif-btn-primary":"bif-btn-secondary")},"Apply")),g&&React.createElement("div",{className:"bif-discount-applied"},"Discount code applied")),u&&c&&React.createElement("div",{className:"bif-summary-section"},React.createElement("div",{className:"bif-gift-certificate-section"},d?React.createElement("div",{className:"bif-gift-certificate-form"},React.createElement("div",{className:"bif-form-row"},React.createElement("div",{className:"bif-form-field"},React.createElement("label",null,"Certificate Number:"),React.createElement("input",{type:"text",value:m.number,onChange:e=>p({...m,number:e.target.value}),className:"bif-form-control",placeholder:"Enter certificate number",disabled:y})),React.createElement("div",{className:"bif-form-field"},React.createElement("label",null,"Pin:"),React.createElement("input",{type:"number",value:m.pin,onChange:e=>p({...m,pin:e.target.value}),className:"bif-form-control",placeholder:"Enter pin",disabled:y}))),React.createElement("button",{className:"bif-btn bif-btn-secondary",onClick:b,disabled:y},y?"Applying...":"Apply")):React.createElement("button",{className:"bif-btn bif-btn-secondary",onClick:f},"Apply Gift Certificate"),h&&h.valid&&React.createElement("div",{className:"bif-gift-certificate-success"},React.createElement("p",null,"✅ Successfully Applied Gift Certificate"),React.createElement("p",null,h.result),parseFloat(h.total)-parseFloat(h.gc_amount_applied)==0?React.createElement("p",null,React.createElement("strong",null,"🎉 Your gift certificate covers the full amount! No additional payment required.")):React.createElement(React.Fragment,null,React.createElement("p",null,"Remaining balance to pay: ",React.createElement("strong",null,"$",(parseFloat(h.total)-parseFloat(h.gc_amount_applied)).toFixed(2))),React.createElement("p",{style:{fontSize:"0.875rem",color:"#6b7280"}},"*Credit card surcharge will be added at payment")),React.createElement("p",null,"Gift Certificate balance after order: ",React.createElement("strong",null,"$",parseFloat(h.gc_balance_after_order).toFixed(2)))))),React.createElement("div",{className:"bif-grand-total"},h&&h.valid&&React.createElement("div",{className:"bif-total-row"},React.createElement("span",null,"Order Total"),React.createElement("span",null,"$",parseFloat(h.total||c.order_grand_total).toFixed(2))),h&&h.valid&&React.createElement("div",{className:"bif-total-row",style:{color:"#059669"}},React.createElement("span",null,"Gift Certificate Applied"),React.createElement("span",null,"-$",parseFloat(h.gc_amount_applied).toFixed(2))),React.createElement("div",{className:"bif-total-main"},React.createElement("span",null,h&&h.valid&&parseFloat(h.total)-parseFloat(h.gc_amount_applied)==0?"Total Paid by Gift Certificate":h&&h.valid?"Balance Due":"Total Cost"),React.createElement("span",{className:"bif-total-amount"},"$",h&&h.valid?(parseFloat(h.total)-parseFloat(h.gc_amount_applied)).toFixed(2):parseFloat(r).toFixed(2))),h&&h.valid&&parseFloat(h.total)-parseFloat(h.gc_amount_applied)>0&&c&&c.order_has_surcharge&&React.createElement("div",{className:"bif-surcharge-note",style:{fontSize:"0.875rem",color:"#6b7280",marginTop:"0.5rem"}},"*Credit card surcharge will be added at payment"),c&&parseFloat(c.order_discount_code_total||0)>0&&React.createElement("div",{className:"bif-discount-text"},"Includes discount of $",parseFloat(c.order_discount_code_total||0).toFixed(2))))):null},w=({isOpen:e,onClose:a,title:r,content:n})=>((0,t.useEffect)((()=>(document.body.style.overflow=e?"hidden":"",()=>{document.body.style.overflow=""})),[e]),(0,t.useEffect)((()=>{const t=t=>{"Escape"===t.key&&e&&a()};return e&&document.addEventListener("keydown",t),()=>{document.removeEventListener("keydown",t)}}),[e,a]),e?React.createElement("div",{className:"bif-modal-overlay",onClick:a},React.createElement("div",{className:"bif-modal",onClick:e=>e.stopPropagation()},React.createElement("div",{className:"bif-modal-header"},React.createElement("h3",{className:"bif-modal-title"},r),React.createElement("button",{className:"bif-modal-close",onClick:a,"aria-label":"Close modal"},"×")),React.createElement("div",{className:"bif-modal-content",dangerouslySetInnerHTML:{__html:n}}))):null),N=({userDetails:e,onUpdateDetails:t,formErrors:a,showSuburb:r=!0,showPostcode:n=!0,showComments:o=!1})=>React.createElement("div",{className:"bif-customer-details"},React.createElement("h2",{className:"bif-section-title"},"Your Details"),React.createElement("div",{className:"bif-customer-form"},React.createElement("div",{className:"bif-form-row"},React.createElement("div",{className:"bif-form-field"},React.createElement("label",null,"First Name *"),React.createElement("input",{type:"text",value:e.firstName,onChange:e=>t("firstName",e.target.value),placeholder:"Enter your first name",className:a.firstName?"bif-error":""}),a.firstName&&React.createElement("div",{className:"bif-field-error"},a.firstName)),React.createElement("div",{className:"bif-form-field"},React.createElement("label",null,"Last Name *"),React.createElement("input",{type:"text",value:e.lastName,onChange:e=>t("lastName",e.target.value),placeholder:"Enter your last name",className:a.lastName?"bif-error":""}),a.lastName&&React.createElement("div",{className:"bif-field-error"},a.lastName))),React.createElement("div",{className:"bif-form-row"},React.createElement("div",{className:"bif-form-field"},React.createElement("label",null,"Email *"),React.createElement("input",{type:"email",value:e.email,onChange:e=>t("email",e.target.value),placeholder:"Enter your email address",className:a.email?"bif-error":""}),a.email&&React.createElement("div",{className:"bif-field-error"},a.email)),React.createElement("div",{className:"bif-form-field"},React.createElement("label",null,"Phone *"),React.createElement("input",{type:"tel",value:e.phone,onChange:e=>t("phone",e.target.value),placeholder:"Enter your phone number",className:a.phone?"bif-error":""}),a.phone&&React.createElement("div",{className:"bif-field-error"},a.phone))),(n||r)&&React.createElement("div",{className:"bif-form-row"},n&&React.createElement("div",{className:"bif-form-field"},React.createElement("label",null,"Postcode"),React.createElement("input",{type:"text",value:e.postcode,onChange:e=>t("postcode",e.target.value),placeholder:"Enter your postcode"})),r&&React.createElement("div",{className:"bif-form-field"},React.createElement("label",null,"Suburb"),React.createElement("input",{type:"text",value:e.suburb,onChange:e=>t("suburb",e.target.value),placeholder:"Enter your suburb"}))),o&&React.createElement("div",{className:"bif-form-row bif-full-width"},React.createElement("div",{className:"bif-form-field"},React.createElement("label",null,"Comments"),React.createElement("textarea",{value:e.comments,onChange:e=>t("comments",e.target.value),rows:4,placeholder:"Any special requests or comments..."}))))),k=({summary:e,propertyIds:a,userDetails:r,paymentType:n,giftCertificate:o})=>{const i=(0,b.useStripe)(),l=(0,b.useElements)(),[c,s]=(0,t.useState)(!1),[u,m]=(0,t.useState)(""),[p,d]=(0,t.useState)(!1),[f,h]=(0,t.useState)(""),g=async t=>{t.preventDefault(),s(!0),m("");try{let t={amount:"deposit"===n?e.order_deposit_amount:e.order_payable_now,currency:e?.order_currency||"AUD",summary:e,propertyIds:"string"==typeof a?a.split(",").map((e=>parseInt(e.trim()))):a,userDetails:r,paymentType:n};if("gift"===n&&o)t.giftCertificateApplied=!0,t.giftCertificate=o,t.amount=0;else{if(!i||!l)return void console.error("Stripe.js has not loaded yet.");const e=l.getElement(b.CardElement),{paymentMethod:a,error:r}=await i.createPaymentMethod({type:"card",card:e});if(r)return console.error(r),m(r.message),void s(!1);t.stripePaymentMethodId=a.id,o&&o.valid&&(t.giftCertificateApplied=!0,t.giftCertificate=o)}const c=await fetch(`${y}/bookitfast/v1/process-payment`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(t)}),u=await c.json();if(!u.success)throw new Error(u.message||"Payment failed.");console.log("Payment successful:",u),h(u.data.charge),d(!0)}catch(e){console.error("Payment error:",e),m(e.message)}finally{s(!1)}};return React.createElement("div",{className:"bif-payment-container"},React.createElement("h3",null,"gift"===n?"🎁 Gift Certificate Payment":"💳 Payment Details"),u&&React.createElement("div",{className:"bif-error-message"},u),p?React.createElement("div",{className:"bif-success-message"},React.createElement("p",null,React.createElement("strong",null,"✅ Payment Successful!")),f&&React.createElement("p",null,React.createElement("a",{href:f,target:"_blank",rel:"noopener noreferrer"},"📄 Click here to view your receipt"))):"gift"===n?React.createElement("div",{className:"bif-gift-certificate-payment-form"},React.createElement("div",{className:"bif-gift-certificate-summary"},React.createElement("p",null,"🎁 ",React.createElement("strong",null,"Paying with Gift Certificate")),React.createElement("p",null,"Amount: ",React.createElement("strong",null,"$",parseFloat(o.gc_amount_applied||0).toFixed(2))),React.createElement("p",null,"No credit card required - your gift certificate will be charged automatically.")),React.createElement("button",{onClick:g,disabled:c,className:"bif-btn bif-btn-primary bif-btn-large"},c?"Processing...":"Complete Booking")):React.createElement("form",{onSubmit:g,className:"bif-stripe-form"},React.createElement("div",{className:"bif-card-element-container"},React.createElement(b.CardElement,{options:{hidePostalCode:!0,style:{base:{fontSize:"16px",color:"#424770","::placeholder":{color:"#aab7c4"}},invalid:{color:"#9e2146"}}}})),React.createElement("button",{type:"submit",disabled:!i||c,className:"bif-btn bif-btn-primary bif-btn-large"},c?"Processing...":"Pay Now")))},S=({propertyIds:e="",showDiscount:a=!1,showSuburb:r=!0,showPostcode:n=!0,showRedeemGiftCertificate:o=!1,showComments:i=!1,buttonColor:l="#0073aa",buttonTextColor:c="#ffffff",minNights:s=1,maxNights:u=14,showPropertyImages:m=!1,includeIcons:p=!1,layoutStyle:d="cards",buttonIcon:S="search",searchLayout:x="default"})=>{const P=g("nights"),O=P&&!isNaN(P)?Math.max(parseInt(P,10),s):s,I=g("start"),T=g("discount"),j=I?(e=>{const t=e.split("-");if(3===t.length){const[e,a,r]=t.map(Number);if(!isNaN(e)&&!isNaN(a)&&!isNaN(r)){const t=new Date(r,a-1,e);return t.setHours(12,0,0,0),t.toISOString().split("T")[0]}}return null})(I):"",D="string"==typeof e?e:"",[F,A]=(0,t.useState)({date:j,nights:O}),[B,$]=(0,t.useState)(null),[G,L]=(0,t.useState)({}),[M,z]=(0,t.useState)(null),[U,q]=(0,t.useState)(null),[H,Y]=(0,t.useState)(!1),[W,V]=(0,t.useState)(""),[Z,J]=(0,t.useState)({firstName:"",lastName:"",phone:"",email:"",postcode:"",suburb:"",comments:""}),[K,Q]=(0,t.useState)(!1),[X,ee]=(0,t.useState)(!1),[te,ae]=(0,t.useState)(T),[re,ne]=(0,t.useState)(null),[oe,ie]=(0,t.useState)(!1),[le,ce]=(0,t.useState)(null),[se,ue]=(0,t.useState)({}),[me,pe]=(0,t.useState)({number:"",pin:""}),[de,fe]=(0,t.useState)(!1),[be,he]=(0,t.useState)(null),[ye,ge]=(0,t.useState)(!1),[Ee,ve]=(0,t.useState)({}),[Re,_e]=(0,t.useState)(!1),[Ce,we]=(0,t.useState)({isOpen:!1,title:"",content:""});(0,t.useEffect)((()=>{j&&O&&(console.log("Auto-checking availability with:",j,O),Ne(j,O))}),[j,O]);const Ne=async(e=F.date,t=F.nights)=>{if(!e||!D)return void console.warn("fetchAvailability skipped - Missing startDate or propertyIds");const a=F.date,r=D.split(",").filter((e=>""!==e.trim()));Y(!0),V(""),_e(!1);try{const e=await fetch(`${y}/bookitfast/v1/availability`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({ids:r,start:a,nights:t})}),n=await e.json();$(n),_e(!0);const o=Object.keys(n).reduce(((e,t)=>(e[t]=!1,e)),{});L(o)}catch(e){console.error(e),V("Failed to fetch availability. Please try again.")}finally{Y(!1)}},ke=(e,t)=>{ve((a=>{const r=a[e]||{},n={...a,[e]:{...r,[t]:!r[t]}};return Se(G,te,n,0),n}))},Se=async(e,t=null,a=Ee,r=0)=>{const n=F.date,o=F.nights,i=new Date(new Date(n).getTime()+864e5*o).toISOString().split("T")[0];Y(!0),V("");try{const r=await fetch(`${y}/bookitfast/v1/availability/summary`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({selected:e,selected_optional_extras:a,start:n,end:i,discount_code:t||null})});if(!r.ok)throw new Error(`HTTP error! status: ${r.status}`);const o=await r.json();q(o),o.stripe_publishable_key&&z(f(o.stripe_publishable_key))}catch(n){console.error("Error fetching summary:",n),r<3?(console.log(`Retrying... Attempt ${r+1}`),await Se(e,t,a,r+1)):V("Failed to fetch summary. Please try again.")}finally{Y(!1)}},xe=e=>{(()=>{const e={};return Z.firstName.trim()||(e.firstName="First name is required"),Z.lastName.trim()||(e.lastName="Last name is required"),Z.email.trim()||(e.email="Email is required"),Z.phone.trim()||(e.phone="Phone is required"),K||(e.agreeToTerms="You must agree to the terms and conditions"),X||(e.consentToDataSharing="You must consent to data sharing with Book It Fast service"),ue(e),0===Object.keys(e).length})()&&(ce(e),ie(!0))},Pe=B?Object.entries(B).filter((([e])=>G[e])).map((([e,t])=>({id:e,...t,...U?.property_summaries?.[e]||{},selectedExtras:Ee[e],onToggleExtra:ke}))):[];return React.createElement("div",{className:"bif-booking-container",style:{"--bif-button-color":l,"--bif-button-color-hover":`${l}dd`,"--bif-button-color-active":`${l}bb`,"--bif-button-text-color":c}},React.createElement("div",{className:"bif-booking-steps"},React.createElement(_,{checkInDate:F.date,nights:F.nights,onDateChange:e=>A((t=>({...t,date:e}))),onNightsChange:e=>A((t=>({...t,nights:e}))),onCheckAvailability:Ne,isLoading:H,minNights:s,maxNights:u,buttonIcon:S,searchLayout:x}),W&&React.createElement("div",{className:"bif-error-message"},W),Re&&B&&React.createElement("div",{className:"bif-property-list"},React.createElement("h2",{className:"bif-section-title"},"Available Properties"),React.createElement("div",{className:`bif-properties bif-properties--${d}`},Object.entries(B).map((([e,t])=>{const a={key:e,property:{id:e,...t,selectedExtras:Ee[e],onToggleExtra:ke},isSelected:G[e],onToggle:()=>(async e=>{const t={...G,[e]:!G[e]};L(t),Object.values(t).includes(!0)?await Se(t,te):q(null)})(e),nights:F.nights,checkInDate:F.date,showPropertyImages:m,includeIcons:p};switch(d){case"grid":return React.createElement(E,a);case"rows":return React.createElement(v,a);default:return React.createElement(R,a)}})))),U&&Pe.length>0&&React.createElement(C,{selectedProperties:Pe,selectedExtras:Ee,nights:F.nights,total:(U.order_payable_now||0)-(U.order_surcharge||0),discountCode:te,onDiscountCodeChange:ae,onApplyDiscount:e=>{Object.keys(G).some((e=>G[e]))&&Se(G,e)},checkInDate:F.date,summary:U,showDiscount:a,showRedeemGiftCertificate:o,giftCertificate:me,onGiftCertificateChange:pe,showGiftCertificateForm:de,onTriggerShowGiftCertificate:()=>{fe(!0)},onApplyGiftCertificate:async e=>{if(e.preventDefault(),console.log("Gift Certificate: Apply button clicked"),console.log("Gift Certificate Data:",me),console.log("Current Summary:",U),ye)return void console.log("Gift Certificate: Already processing, ignoring click");if(!U)return void console.error("Gift Certificate: No summary available");if(!me.number||!me.pin)return console.error("Gift Certificate: Missing number or pin"),void alert("Please enter both certificate number and pin");ge(!0),console.log("Gift Certificate: Setting loading state to true");let t={...U};if(U.order_weekly_discount>0){console.log("Gift Certificate: Weekly discount detected, adjusting summary for gift certificate calculation"),console.log("Gift Certificate: Original order_grand_total:",U.order_grand_total),console.log("Gift Certificate: Order weekly discount:",U.order_weekly_discount),console.log("Gift Certificate: Order surcharge:",U.order_surcharge);const e=parseFloat(U.order_sub_total)+parseFloat(U.order_mandatory_extras_total);console.log("Gift Certificate: Total before weekly discount (excluding surcharge):",e),t={...U,order_grand_total:e.toString(),order_total_before_surcharge:e,order_payable_now:e.toString(),order_surcharge:0,order_has_surcharge:!1},console.log("Gift Certificate: Adjusted summary for gift certificate:",t)}const a={certificate:me,summary:t};console.log("Gift Certificate: Sending request with data:",a);try{const e=await fetch(`${y}/bookitfast/v1/apply-gift-certificate`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(a)});if(console.log("Gift Certificate: Response status:",e.status),!e.ok)throw new Error(`HTTP error! status: ${e.status}`);const t=await e.json();console.log("Gift Certificate: Response data:",t),t.valid?(he(t),t.summary&&(q(t.summary),console.log("Gift Certificate: Updated summary:",t.summary)),console.log("Gift Certificate: Application successful"),console.log("Gift Certificate: Order payable now:",t.order_payable_now)):(console.error("Gift Certificate: API returned error:",t),alert(t.message||"Failed to apply gift certificate"))}catch(e){console.error("Gift Certificate: Error applying certificate:",e),alert("Error applying gift certificate. Please try again.")}finally{ge(!1),console.log("Gift Certificate: Setting loading state to false")}},gcResult:be,gcLoading:ye}),U&&Pe.length>0&&React.createElement(N,{userDetails:Z,onUpdateDetails:(e,t)=>{J((a=>({...a,[e]:t}))),se[e]&&ue((t=>({...t,[e]:null})))},formErrors:se,showSuburb:r,showPostcode:n,showComments:i}),U&&Pe.length>0&&React.createElement("div",{className:"bif-terms-payment"},React.createElement("div",{className:"bif-terms-checkbox"},React.createElement("input",{type:"checkbox",id:"agreeToTerms",checked:K,onChange:()=>Q(!K)}),React.createElement("label",{htmlFor:"agreeToTerms"},"I have read and agree to the"," ",U.order_booking_conditions?.map(((e,t)=>React.createElement("span",{key:t},"local"===e.type?React.createElement("a",{href:"#",onClick:t=>{t.preventDefault(),we({isOpen:!0,title:e.title,content:e.content})},style:{textDecoration:"underline",cursor:"pointer"}},e.title):React.createElement("a",{href:e.url,target:"_blank",rel:"noopener noreferrer"},e.title),t<U.order_booking_conditions.length-2?", ":"",t===U.order_booking_conditions.length-2?" and ":"")))),se.agreeToTerms&&React.createElement("div",{className:"bif-field-error"},se.agreeToTerms)),React.createElement("div",{className:"bif-privacy-consent"},React.createElement("input",{type:"checkbox",id:"consentToDataSharing",checked:X,onChange:()=>ee(!X)}),React.createElement("label",{htmlFor:"consentToDataSharing"},"I consent to my personal information being transmitted to and processed by Book It Fast (",React.createElement("a",{href:"https://bookitfast.app/privacy-policy",target:"_blank",rel:"noopener noreferrer"},"Privacy Policy"),") for booking and payment processing purposes."),se.consentToDataSharing&&React.createElement("div",{className:"bif-field-error"},se.consentToDataSharing)),!oe&&React.createElement("div",{className:"bif-payment-options"},Object.keys(se).length>0&&React.createElement("div",{className:"bif-validation-error"},"Please complete all required fields before proceeding with payment."),be&&be.valid&&parseFloat(be.total)-parseFloat(be.gc_amount_applied)==0?React.createElement("div",{className:"bif-gift-certificate-payment"},React.createElement("div",{className:"bif-gift-certificate-full-coverage"},React.createElement("p",null,"🎉 ",React.createElement("strong",null,"Your gift certificate covers the full booking amount!")),React.createElement("p",null,"No additional payment required.")),React.createElement("button",{className:"bif-btn bif-btn-primary bif-btn-large",onClick:()=>xe("gift")},"🎁 Complete Booking with Gift Certificate")):React.createElement(React.Fragment,null,U.order_surcharge>0&&parseFloat(U.order_payable_now||0)>0&&React.createElement("div",{className:"bif-surcharge-info"},React.createElement("p",null,"Please note a credit card surcharge applies of ",U.order_deposit_surcharge>0&&` $${U.order_deposit_surcharge} for deposit or `,"$",U.order_surcharge," for the full payment.")),U.order_deposit_amount>0?React.createElement("div",{className:"bif-payment-buttons"},React.createElement("button",{className:"bif-btn bif-btn-primary",onClick:()=>xe("deposit")},"💳 Pay Deposit (",h(U?.order_currency||"AUD"),U.order_deposit_amount,")"),React.createElement("button",{className:"bif-btn bif-btn-primary",onClick:()=>xe("full")},"💳 Pay In Full (",h(U?.order_currency||"AUD"),be&&be.valid?parseFloat(be.order_payable_now).toFixed(2):U.order_payable_now,")")):React.createElement("button",{className:"bif-btn bif-btn-primary bif-btn-large",onClick:()=>xe("full")},"💳 Complete Booking - ",h(U?.order_currency||"AUD"),be&&be.valid?parseFloat(be.order_payable_now).toFixed(2):U.order_payable_now)))),U&&oe&&React.createElement("div",{className:"bif-payment-form-container"},"gift"===le?React.createElement(k,{summary:U,propertyIds:D.split(",").map((e=>parseInt(e.trim()))),userDetails:Z,paymentType:le,giftCertificate:be}):M&&React.createElement(b.Elements,{stripe:M},React.createElement(k,{summary:U,propertyIds:D.split(",").map((e=>parseInt(e.trim()))),userDetails:Z,paymentType:le,giftCertificate:be})))),React.createElement(w,{isOpen:Ce.isOpen,onClose:()=>we({isOpen:!1,title:"",content:""}),title:Ce.title,content:Ce.content}))},x=window.wp.blocks,P=window.wp.blockEditor,O=window.wp.components,I=window.wp.primitives,T=window.ReactJSXRuntime,j=(0,T.jsx)(I.SVG,{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24",children:(0,T.jsx)(I.Path,{d:"M13 5c-3.3 0-6 2.7-6 6 0 1.4.5 2.7 1.3 3.7l-3.8 3.8 1.1 1.1 3.8-3.8c1 .8 2.3 1.3 3.7 1.3 3.3 0 6-2.7 6-6S16.3 5 13 5zm0 10.5c-2.5 0-4.5-2-4.5-4.5s2-4.5 4.5-4.5 4.5 2 4.5 4.5-2 4.5-4.5 4.5z"})}),D=(0,T.jsx)(I.SVG,{viewBox:"0 0 24 24",xmlns:"http://www.w3.org/2000/svg",children:(0,T.jsx)(I.Path,{d:"M19 3H5c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h14c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2-2zm.5 16c0 .3-.2.5-.5.5H5c-.3 0-.5-.2-.5-.5V7h15v12zM9 10H7v2h2v-2zm0 4H7v2h2v-2zm4-4h-2v2h2v-2zm4 0h-2v2h2v-2zm-4 4h-2v2h2v-2zm4 0h-2v2h2v-2z"})}),F=(0,T.jsx)(I.SVG,{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24",children:(0,T.jsx)(I.Path,{d:"M12 4L4 7.9V20h16V7.9L12 4zm6.5 14.5H14V13h-4v5.5H5.5V8.8L12 5.7l6.5 3.1v9.7z"})}),A=(0,T.jsx)(I.SVG,{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24",children:(0,T.jsx)(I.Path,{d:"M12 9c-.8 0-1.5.7-1.5 1.5S11.2 12 12 12s1.5-.7 1.5-1.5S12.8 9 12 9zm0-5c-3.6 0-6.5 2.8-6.5 6.2 0 .8.3 1.8.9 3.1.5 1.1 1.2 2.3 2 3.6.7 1 3 3.8 3.2 3.9l.4.5.4-.5c.2-.2 2.6-2.9 3.2-3.9.8-1.2 1.5-2.5 2-3.6.6-1.3.9-2.3.9-3.1C18.5 6.8 15.6 4 12 4zm4.3 8.7c-.5 1-1.1 2.2-1.9 3.4-.5.7-1.7 2.2-2.4 3-.7-.8-1.9-2.3-2.4-3-.8-1.2-1.4-2.3-1.9-3.3-.6-1.4-.7-2.2-.7-2.5 0-2.6 2.2-4.7 5-4.7s5 2.1 5 4.7c0 .2-.1 1-.7 2.4z"})}),B=(0,T.jsx)(I.SVG,{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24",children:(0,T.jsx)(I.Path,{d:"M11.776 4.454a.25.25 0 01.448 0l2.069 4.192a.25.25 0 00.188.137l4.626.672a.25.25 0 01.139.426l-3.348 3.263a.25.25 0 00-.072.222l.79 4.607a.25.25 0 01-.362.263l-4.138-2.175a.25.25 0 00-.232 0l-4.138 2.175a.25.25 0 01-.363-.263l.79-4.607a.25.25 0 00-.071-.222L4.754 9.881a.25.25 0 01.139-.426l4.626-.672a.25.25 0 00.188-.137l2.069-4.192z"})}),$=(0,T.jsx)(I.SVG,{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24",children:(0,T.jsx)(I.Path,{d:"m21.5 9.1-6.6-6.6-4.2 5.6c-1.2-.1-2.4.1-3.6.7-.1 0-.1.1-.2.1-.5.3-.9.6-1.2.9l3.7 3.7-5.7 5.7v1.1h1.1l5.7-5.7 3.7 3.7c.4-.4.7-.8.9-1.2.1-.1.1-.2.2-.3.6-1.1.8-2.4.6-3.6l5.6-4.1zm-7.3 3.5.1.9c.1.9 0 1.8-.4 2.6l-6-6c.8-.4 1.7-.5 2.6-.4l.9.1L15 4.9 19.1 9l-4.9 3.6z"})}),G=(0,T.jsx)(I.SVG,{viewBox:"0 0 24 24",xmlns:"http://www.w3.org/2000/svg",children:(0,T.jsx)(I.Path,{d:"M10.97 10.159a3.382 3.382 0 0 0-2.857.955l1.724 1.723-2.836 2.913L7 17h1.25l2.913-2.837 1.723 1.723a3.38 3.38 0 0 0 .606-.825c.33-.63.446-1.343.35-2.032L17 10.695 13.305 7l-2.334 3.159Z"})}),L=(0,T.jsx)(I.SVG,{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24",children:(0,T.jsx)(I.Path,{d:"M12 4c-4.4 0-8 3.6-8 8s3.6 8 8 8 8-3.6 8-8-3.6-8-8-8Zm6.5 8c0 .6 0 1.2-.2 1.8h-2.7c0-.6.2-1.1.2-1.8s0-1.2-.2-1.8h2.7c.2.6.2 1.1.2 1.8Zm-.9-3.2h-2.4c-.3-.9-.7-1.8-1.1-2.4-.1-.2-.2-.4-.3-.5 1.6.5 3 1.6 3.8 3ZM12.8 17c-.3.5-.6 1-.8 1.3-.2-.3-.5-.8-.8-1.3-.3-.5-.6-1.1-.8-1.7h3.3c-.2.6-.5 1.2-.8 1.7Zm-2.9-3.2c-.1-.6-.2-1.1-.2-1.8s0-1.2.2-1.8H14c.1.6.2 1.1.2 1.8s0 1.2-.2 1.8H9.9ZM11.2 7c.3-.5.6-1 .8-1.3.2.3.5.8.8 1.3.3.5.6 1.1.8 1.7h-3.3c.2-.6.5-1.2.8-1.7Zm-1-1.2c-.1.2-.2.3-.3.5-.4.7-.8 1.5-1.1 2.4H6.4c.8-1.4 2.2-2.5 3.8-3Zm-1.8 8H5.7c-.2-.6-.2-1.1-.2-1.8s0-1.2.2-1.8h2.7c0 .6-.2 1.1-.2 1.8s0 1.2.2 1.8Zm-2 1.4h2.4c.3.9.7 1.8 1.1 2.4.1.2.2.4.3.5-1.6-.5-3-1.6-3.8-3Zm7.4 3c.1-.2.2-.3.3-.5.4-.7.8-1.5 1.1-2.4h2.4c-.8 1.4-2.2 2.5-3.8 3Z"})}),{useState:M,useEffect:z}=wp.element;(0,x.registerBlockType)("bookitfast/multi-embed",{title:"Book It Fast Availability",description:"A multi-property booking embed for WordPress.",icon:"calendar",category:"widgets",attributes:{propertyIds:{type:"string",default:""},showDiscount:{type:"boolean",default:!1},showSuburb:{type:"boolean",default:!1},showPostcode:{type:"boolean",default:!1},showRedeemGiftCertificate:{type:"boolean",default:!1},showComments:{type:"boolean",default:!1},buttonColor:{type:"string",default:"#0073aa"},buttonTextColor:{type:"string",default:"#ffffff"},minNights:{type:"number",default:1},maxNights:{type:"number",default:14},showPropertyImages:{type:"boolean",default:!1},includeIcons:{type:"boolean",default:!1},layoutStyle:{type:"string",default:"cards"},buttonIcon:{type:"string",default:"search"},searchLayout:{type:"string",default:"default"}},edit:({attributes:e,setAttributes:t})=>{const a=(0,P.useBlockProps)(),[r,n]=M([]),[o,i]=M(!0),[l,c]=M(null);return z((()=>{wp.apiFetch({path:"/bookitfast/v1/properties"}).then((e=>{e.success?n(e.properties):c("Failed to fetch properties.")})).catch((e=>{console.error("API Fetch Error:",e),c("Error fetching properties.")})).finally((()=>i(!1)))}),[]),React.createElement("div",a,React.createElement(P.InspectorControls,null,React.createElement(O.PanelBody,{title:"Search Layout",initialOpen:!0},React.createElement(O.SelectControl,{label:"Search Box Style",value:e.searchLayout,options:[{label:"Default (Stacked)",value:"default"},{label:"Horizontal (Check-In & Nights)",value:"horizontal"}],onChange:e=>t({searchLayout:e}),help:"Choose the layout style for the search box",__next40pxDefaultSize:!0,__nextHasNoMarginBottom:!0})),React.createElement(O.PanelBody,{title:"Search Options",initialOpen:!1},o?React.createElement("p",null,"Loading properties..."):l?React.createElement("p",{style:{color:"red"}},l):React.createElement(O.SelectControl,{multiple:!0,label:"Select Properties",value:e.propertyIds?e.propertyIds.split(","):[],options:r.map((e=>({label:e.title,value:e.id.toString()}))),onChange:e=>{const a=e.join(",");t({propertyIds:a})},__next40pxDefaultSize:!0,__nextHasNoMarginBottom:!0}),React.createElement(O.RangeControl,{label:"Minimum Nights",value:e.minNights,onChange:e=>t({minNights:e}),min:1,max:30,step:1}),React.createElement(O.RangeControl,{label:"Maximum Nights",value:e.maxNights,onChange:e=>t({maxNights:e}),min:e.minNights||1,max:90,step:1}),React.createElement(O.BaseControl,{label:"Button Color",id:"button-color-control"},React.createElement(O.ColorPalette,{value:e.buttonColor,onChange:e=>t({buttonColor:e}),colors:[{name:"Blue",color:"#0073aa"},{name:"Green",color:"#46b450"},{name:"Red",color:"#dc3232"},{name:"Orange",color:"#ff6900"},{name:"Purple",color:"#8224e3"},{name:"Dark",color:"#333333"}]})),React.createElement(O.BaseControl,{label:"Button Text Color",id:"button-text-color-control"},React.createElement(O.ColorPalette,{value:e.buttonTextColor,onChange:e=>t({buttonTextColor:e}),colors:[{name:"White",color:"#ffffff"},{name:"Black",color:"#000000"},{name:"Dark Gray",color:"#333333"},{name:"Light Gray",color:"#666666"}]})),React.createElement("div",{style:{marginBottom:"16px"}},React.createElement("label",{style:{display:"block",marginBottom:"8px",fontSize:"11px",fontWeight:"500",textTransform:"uppercase",color:"#1e1e1e"}},"Button Icon"),React.createElement("div",{style:{display:"grid",gridTemplateColumns:"repeat(4, 1fr)",gap:"8px",padding:"8px",border:"1px solid #ddd",borderRadius:"4px",backgroundColor:"#fff"}},[{icon:j,name:"search",label:"Search"},{icon:D,name:"calendar",label:"Calendar"},{icon:F,name:"home",label:"Home"},{icon:A,name:"mapMarker",label:"Map Marker"},{icon:B,name:"star",label:"Star"},{icon:$,name:"pin",label:"Pin"},{icon:G,name:"pinSmall",label:"Pin Small"},{icon:L,name:"globe",label:"Globe"}].map((({icon:a,name:r,label:n})=>React.createElement(O.Button,{key:r,onClick:()=>t({buttonIcon:r}),variant:e.buttonIcon===r?"primary":"secondary",style:{width:"48px",height:"48px",padding:"8px",display:"flex",alignItems:"center",justifyContent:"center"},title:n},React.createElement(O.Icon,{icon:a,size:20}))))),React.createElement("p",{style:{fontSize:"12px",color:"#757575",margin:"8px 0 0 0",fontStyle:"italic"}},"Select an icon for the search button"))),React.createElement(O.PanelBody,{title:"Results Layout",initialOpen:!1},React.createElement(O.SelectControl,{label:"Layout Style",value:e.layoutStyle,options:[{label:"Card List",value:"cards"},{label:"Grid Tiles",value:"grid"},{label:"Compact Rows",value:"rows"}],onChange:e=>t({layoutStyle:e}),help:"Choose how property results are displayed",__next40pxDefaultSize:!0,__nextHasNoMarginBottom:!0}),React.createElement(O.ToggleControl,{label:"Show Property Images",checked:e.showPropertyImages,onChange:e=>t({showPropertyImages:e}),__nextHasNoMarginBottom:!0}),React.createElement(O.ToggleControl,{label:"Include Icons",checked:e.includeIcons,onChange:e=>t({includeIcons:e}),help:"Show icons for bed size, inclusions, etc.",__nextHasNoMarginBottom:!0})),React.createElement(O.PanelBody,{title:"Form Settings",initialOpen:!1},React.createElement(O.ToggleControl,{label:"Show Discount Field",checked:e.showDiscount,onChange:e=>t({showDiscount:e}),__nextHasNoMarginBottom:!0}),React.createElement(O.ToggleControl,{label:"Show Suburb Field",checked:e.showSuburb,onChange:e=>t({showSuburb:e}),__nextHasNoMarginBottom:!0}),React.createElement(O.ToggleControl,{label:"Show Postcode Field",checked:e.showPostcode,onChange:e=>t({showPostcode:e}),__nextHasNoMarginBottom:!0}),React.createElement(O.ToggleControl,{label:"Show Redeem Gift Certificate Section",checked:e.showRedeemGiftCertificate,onChange:e=>t({showRedeemGiftCertificate:e}),__nextHasNoMarginBottom:!0}),React.createElement(O.ToggleControl,{label:"Show Comments Field",checked:e.showComments,onChange:e=>t({showComments:e}),__nextHasNoMarginBottom:!0}))),React.createElement(S,{propertyIds:e.propertyIds,showDiscount:e.showDiscount,showSuburb:e.showSuburb,showPostcode:e.showPostcode,showRedeemGiftCertificate:e.showRedeemGiftCertificate,showComments:e.showComments,buttonColor:e.buttonColor,buttonTextColor:e.buttonTextColor,buttonIcon:e.buttonIcon,minNights:e.minNights,maxNights:e.maxNights,showPropertyImages:e.showPropertyImages,includeIcons:e.includeIcons,layoutStyle:e.layoutStyle,searchLayout:e.searchLayout}))},save:()=>null})})()})();
     1(()=>{var e={609:e=>{"use strict";e.exports=window.React},926:function(e,t,a){!function(e,t){"use strict";function a(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),a.push.apply(a,r)}return a}function r(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{};t%2?a(Object(r),!0).forEach((function(t){o(e,t,r[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(r)):a(Object(r)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(r,t))}))}return e}function n(e){return n="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},n(e)}function o(e,t,a){return t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}function i(e,t){if(null==e)return{};var a,r,n=function(e,t){if(null==e)return{};var a,r,n={},o=Object.keys(e);for(r=0;r<o.length;r++)a=o[r],t.indexOf(a)>=0||(n[a]=e[a]);return n}(e,t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(r=0;r<o.length;r++)a=o[r],t.indexOf(a)>=0||Object.prototype.propertyIsEnumerable.call(e,a)&&(n[a]=e[a])}return n}function l(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var a=e&&("undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"]);if(null!=a){var r,n,o=[],_n=!0,i=!1;try{for(a=a.call(e);!(_n=(r=a.next()).done)&&(o.push(r.value),!t||o.length!==t);_n=!0);}catch(e){i=!0,n=e}finally{try{_n||null==a.return||a.return()}finally{if(i)throw n}}return o}}(e,t)||function(e,t){if(e){if("string"==typeof e)return c(e,t);var a=Object.prototype.toString.call(e).slice(8,-1);return"Object"===a&&e.constructor&&(a=e.constructor.name),"Map"===a||"Set"===a?Array.from(e):"Arguments"===a||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(a)?c(e,t):void 0}}(e,t)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function c(e,t){(null==t||t>e.length)&&(t=e.length);for(var a=0,r=new Array(t);a<t;a++)r[a]=e[a];return r}function s(e){return e&&e.__esModule&&Object.prototype.hasOwnProperty.call(e,"default")?e.default:e}var u,m,p,d,f={exports:{}};f.exports=function(){if(d)return p;d=1;var e=m?u:(m=1,u="SECRET_DO_NOT_PASS_THIS_OR_YOU_WILL_BE_FIRED");function t(){}function a(){}return a.resetWarningCache=t,p=function(){function r(t,a,r,n,o,i){if(i!==e){var l=new Error("Calling PropTypes validators directly is not supported by the `prop-types` package. Use PropTypes.checkPropTypes() to call them. Read more at http://fb.me/use-check-prop-types");throw l.name="Invariant Violation",l}}function n(){return r}r.isRequired=r;var o={array:r,bool:r,func:r,number:r,object:r,string:r,symbol:r,any:r,arrayOf:n,element:r,elementType:r,instanceOf:n,node:r,objectOf:n,oneOf:n,oneOfType:n,shape:n,exact:n,checkPropTypes:a,resetWarningCache:t};return o.PropTypes=o,o}}()();var b=s(f.exports),h=function(e,a,r){var n=!!r,o=t.useRef(r);t.useEffect((function(){o.current=r}),[r]),t.useEffect((function(){if(!n||!e)return function(){};var t=function(){o.current&&o.current.apply(o,arguments)};return e.on(a,t),function(){e.off(a,t)}}),[n,a,e,o])},y=function(e){var a=t.useRef(e);return t.useEffect((function(){a.current=e}),[e]),a.current},g=function(e){return null!==e&&"object"===n(e)},E="[object Object]",v=function e(t,a){if(!g(t)||!g(a))return t===a;var r=Array.isArray(t);if(r!==Array.isArray(a))return!1;var n=Object.prototype.toString.call(t)===E;if(n!==(Object.prototype.toString.call(a)===E))return!1;if(!n&&!r)return t===a;var o=Object.keys(t),i=Object.keys(a);if(o.length!==i.length)return!1;for(var l={},c=0;c<o.length;c+=1)l[o[c]]=!0;for(var s=0;s<i.length;s+=1)l[i[s]]=!0;var u=Object.keys(l);if(u.length!==o.length)return!1;var m=t,p=a;return u.every((function(t){return e(m[t],p[t])}))},R=function(e,t,a){return g(e)?Object.keys(e).reduce((function(n,i){var l=!g(t)||!v(e[i],t[i]);return a.includes(i)?(l&&console.warn("Unsupported prop change: options.".concat(i," is not a mutable property.")),n):l?r(r({},n||{}),{},o({},i,e[i])):n}),null):null},_="Invalid prop `stripe` supplied to `Elements`. We recommend using the `loadStripe` utility from `@stripe/stripe-js`. See https://stripe.com/docs/stripe-js/react#elements-props-stripe for details.",C=function(e){var t,a=arguments.length>1&&void 0!==arguments[1]?arguments[1]:_;if(null===e||g(t=e)&&"function"==typeof t.elements&&"function"==typeof t.createToken&&"function"==typeof t.createPaymentMethod&&"function"==typeof t.confirmCardPayment)return e;throw new Error(a)},w=function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:_;if(function(e){return g(e)&&"function"==typeof e.then}(e))return{tag:"async",stripePromise:Promise.resolve(e).then((function(e){return C(e,t)}))};var a=C(e,t);return null===a?{tag:"empty"}:{tag:"sync",stripe:a}},N=function(e){e&&e._registerWrapper&&e.registerAppInfo&&(e._registerWrapper({name:"react-stripe-js",version:"3.6.0"}),e.registerAppInfo({name:"react-stripe-js",version:"3.6.0",url:"https://stripe.com/docs/stripe-js/react"}))},k=t.createContext(null);k.displayName="ElementsContext";var S=function(e,t){if(!e)throw new Error("Could not find Elements context; You need to wrap the part of your app that ".concat(t," in an <Elements> provider."));return e},x=function(e){var a=e.stripe,r=e.options,n=e.children,o=t.useMemo((function(){return w(a)}),[a]),i=l(t.useState((function(){return{stripe:"sync"===o.tag?o.stripe:null,elements:"sync"===o.tag?o.stripe.elements(r):null}})),2),c=i[0],s=i[1];t.useEffect((function(){var e=!0,t=function(e){s((function(t){return t.stripe?t:{stripe:e,elements:e.elements(r)}}))};return"async"!==o.tag||c.stripe?"sync"!==o.tag||c.stripe||t(o.stripe):o.stripePromise.then((function(a){a&&e&&t(a)})),function(){e=!1}}),[o,c,r]);var u=y(a);t.useEffect((function(){null!==u&&u!==a&&console.warn("Unsupported prop change on Elements: You cannot change the `stripe` prop after setting it.")}),[u,a]);var m=y(r);return t.useEffect((function(){if(c.elements){var e=R(r,m,["clientSecret","fonts"]);e&&c.elements.update(e)}}),[r,m,c.elements]),t.useEffect((function(){N(c.stripe)}),[c.stripe]),t.createElement(k.Provider,{value:c},n)};x.propTypes={stripe:b.any,options:b.object};var P=function(e){var a=t.useContext(k);return S(a,e)},O=function(e){return(0,e.children)(P("mounts <ElementsConsumer>"))};O.propTypes={children:b.func.isRequired};var I=["on","session"],T=t.createContext(null);T.displayName="CheckoutSdkContext";var j=function(e,t){if(!e)throw new Error("Could not find CheckoutProvider context; You need to wrap the part of your app that ".concat(t," in an <CheckoutProvider> provider."));return e},D=t.createContext(null);D.displayName="CheckoutContext";var F=function(e){var a=e.stripe,r=e.options,n=e.children,o=t.useMemo((function(){return w(a,"Invalid prop `stripe` supplied to `CheckoutProvider`. We recommend using the `loadStripe` utility from `@stripe/stripe-js`. See https://stripe.com/docs/stripe-js/react#elements-props-stripe for details.")}),[a]),c=l(t.useState(null),2),s=c[0],u=c[1],m=l(t.useState((function(){return{stripe:"sync"===o.tag?o.stripe:null,checkoutSdk:null}})),2),p=m[0],d=m[1],f=function(e,t){d((function(a){return a.stripe&&a.checkoutSdk?a:{stripe:e,checkoutSdk:t}}))},b=t.useRef(!1);t.useEffect((function(){var e=!0;return"async"!==o.tag||p.stripe?"sync"===o.tag&&o.stripe&&!b.current&&(b.current=!0,o.stripe.initCheckout(r).then((function(e){e&&(f(o.stripe,e),e.on("change",u))}))):o.stripePromise.then((function(t){t&&e&&!b.current&&(b.current=!0,t.initCheckout(r).then((function(e){e&&(f(t,e),e.on("change",u))})))})),function(){e=!1}}),[o,p,r,u]);var h=y(a);t.useEffect((function(){null!==h&&h!==a&&console.warn("Unsupported prop change on CheckoutProvider: You cannot change the `stripe` prop after setting it.")}),[h,a]);var g=y(r);t.useEffect((function(){var e,t;if(p.checkoutSdk){var a=null==g||null===(e=g.elementsOptions)||void 0===e?void 0:e.appearance,n=null==r||null===(t=r.elementsOptions)||void 0===t?void 0:t.appearance;n&&!v(n,a)&&p.checkoutSdk.changeAppearance(n)}}),[r,g,p.checkoutSdk]),t.useEffect((function(){N(p.stripe)}),[p.stripe]);var E=t.useMemo((function(){return function(e,t){if(!e)return null;e.on,e.session;var a=i(e,I);return t?Object.assign(t,a):Object.assign(e.session(),a)}(p.checkoutSdk,s)}),[p.checkoutSdk,s]);return p.checkoutSdk?t.createElement(T.Provider,{value:p},t.createElement(D.Provider,{value:E},n)):null};F.propTypes={stripe:b.any,options:b.shape({fetchClientSecret:b.func.isRequired,elementsOptions:b.object}).isRequired};var A=function(e){var a=t.useContext(T),r=t.useContext(k);if(a&&r)throw new Error("You cannot wrap the part of your app that ".concat(e," in both <CheckoutProvider> and <Elements> providers."));return a?j(a,e):S(r,e)},B=["mode"],$=function(e,a){var r,n="".concat((r=e).charAt(0).toUpperCase()+r.slice(1),"Element"),o=a?function(e){A("mounts <".concat(n,">"));var a=e.id,r=e.className;return t.createElement("div",{id:a,className:r})}:function(a){var r,o=a.id,c=a.className,s=a.options,u=void 0===s?{}:s,m=a.onBlur,p=a.onFocus,d=a.onReady,f=a.onChange,b=a.onEscape,g=a.onClick,E=a.onLoadError,v=a.onLoaderStart,_=a.onNetworksChange,C=a.onConfirm,w=a.onCancel,N=a.onShippingAddressChange,k=a.onShippingRateChange,S=A("mounts <".concat(n,">")),x="elements"in S?S.elements:null,P="checkoutSdk"in S?S.checkoutSdk:null,O=l(t.useState(null),2),I=O[0],T=O[1],j=t.useRef(null),D=t.useRef(null);h(I,"blur",m),h(I,"focus",p),h(I,"escape",b),h(I,"click",g),h(I,"loaderror",E),h(I,"loaderstart",v),h(I,"networkschange",_),h(I,"confirm",C),h(I,"cancel",w),h(I,"shippingaddresschange",N),h(I,"shippingratechange",k),h(I,"change",f),d&&(r="expressCheckout"===e?d:function(){d(I)}),h(I,"ready",r),t.useLayoutEffect((function(){if(null===j.current&&null!==D.current&&(x||P)){var t=null;if(P)switch(e){case"payment":t=P.createPaymentElement(u);break;case"address":if(!("mode"in u))throw new Error("You must supply options.mode. mode must be 'billing' or 'shipping'.");var a=u.mode,r=i(u,B);if("shipping"===a)t=P.createShippingAddressElement(r);else{if("billing"!==a)throw new Error("Invalid options.mode. mode must be 'billing' or 'shipping'.");t=P.createBillingAddressElement(r)}break;case"expressCheckout":t=P.createExpressCheckoutElement(u);break;case"currencySelector":t=P.createCurrencySelectorElement();break;default:throw new Error("Invalid Element type ".concat(n,". You must use either the <PaymentElement />, <AddressElement options={{mode: 'shipping'}} />, <AddressElement options={{mode: 'billing'}} />, or <ExpressCheckoutElement />."))}else x&&(t=x.create(e,u));j.current=t,T(t),t&&t.mount(D.current)}}),[x,P,u]);var F=y(u);return t.useEffect((function(){if(j.current){var e=R(u,F,["paymentRequest"]);e&&"update"in j.current&&j.current.update(e)}}),[u,F]),t.useLayoutEffect((function(){return function(){if(j.current&&"function"==typeof j.current.destroy)try{j.current.destroy(),j.current=null}catch(e){}}}),[]),t.createElement("div",{id:o,className:c,ref:D})};return o.propTypes={id:b.string,className:b.string,onChange:b.func,onBlur:b.func,onFocus:b.func,onReady:b.func,onEscape:b.func,onClick:b.func,onLoadError:b.func,onLoaderStart:b.func,onNetworksChange:b.func,onConfirm:b.func,onCancel:b.func,onShippingAddressChange:b.func,onShippingRateChange:b.func,options:b.object},o.displayName=n,o.__elementType=e,o},G="undefined"==typeof window,L=t.createContext(null);L.displayName="EmbeddedCheckoutProviderContext";var M=function(){var e=t.useContext(L);if(!e)throw new Error("<EmbeddedCheckout> must be used within <EmbeddedCheckoutProvider>");return e},z=G?function(e){var a=e.id,r=e.className;return M(),t.createElement("div",{id:a,className:r})}:function(e){var a=e.id,r=e.className,n=M().embeddedCheckout,o=t.useRef(!1),i=t.useRef(null);return t.useLayoutEffect((function(){return!o.current&&n&&null!==i.current&&(n.mount(i.current),o.current=!0),function(){if(o.current&&n)try{n.unmount(),o.current=!1}catch(e){}}}),[n]),t.createElement("div",{ref:i,id:a,className:r})},U=$("auBankAccount",G),q=$("card",G),H=$("cardNumber",G),Y=$("cardExpiry",G),W=$("cardCvc",G),V=$("fpxBank",G),Z=$("iban",G),J=$("idealBank",G),K=$("p24Bank",G),Q=$("epsBank",G),X=$("payment",G),ee=$("expressCheckout",G),te=$("currencySelector",G),ae=$("paymentRequestButton",G),re=$("linkAuthentication",G),ne=$("address",G),oe=$("shippingAddress",G),ie=$("paymentMethodMessaging",G),le=$("affirmMessage",G),ce=$("afterpayClearpayMessage",G);e.AddressElement=ne,e.AffirmMessageElement=le,e.AfterpayClearpayMessageElement=ce,e.AuBankAccountElement=U,e.CardCvcElement=W,e.CardElement=q,e.CardExpiryElement=Y,e.CardNumberElement=H,e.CheckoutProvider=F,e.CurrencySelectorElement=te,e.Elements=x,e.ElementsConsumer=O,e.EmbeddedCheckout=z,e.EmbeddedCheckoutProvider=function(e){var a=e.stripe,r=e.options,n=e.children,o=t.useMemo((function(){return w(a,"Invalid prop `stripe` supplied to `EmbeddedCheckoutProvider`. We recommend using the `loadStripe` utility from `@stripe/stripe-js`. See https://stripe.com/docs/stripe-js/react#elements-props-stripe for details.")}),[a]),i=t.useRef(null),c=t.useRef(null),s=l(t.useState({embeddedCheckout:null}),2),u=s[0],m=s[1];t.useEffect((function(){if(!c.current&&!i.current){var e=function(e){c.current||i.current||(c.current=e,i.current=c.current.initEmbeddedCheckout(r).then((function(e){m({embeddedCheckout:e})})))};"async"!==o.tag||c.current||!r.clientSecret&&!r.fetchClientSecret?"sync"!==o.tag||c.current||!r.clientSecret&&!r.fetchClientSecret||e(o.stripe):o.stripePromise.then((function(t){t&&e(t)}))}}),[o,r,u,c]),t.useEffect((function(){return function(){u.embeddedCheckout?(i.current=null,u.embeddedCheckout.destroy()):i.current&&i.current.then((function(){i.current=null,u.embeddedCheckout&&u.embeddedCheckout.destroy()}))}}),[u.embeddedCheckout]),t.useEffect((function(){N(c)}),[c]);var p=y(a);t.useEffect((function(){null!==p&&p!==a&&console.warn("Unsupported prop change on EmbeddedCheckoutProvider: You cannot change the `stripe` prop after setting it.")}),[p,a]);var d=y(r);return t.useEffect((function(){null!=d&&(null!=r?(void 0===r.clientSecret&&void 0===r.fetchClientSecret&&console.warn("Invalid props passed to EmbeddedCheckoutProvider: You must provide one of either `options.fetchClientSecret` or `options.clientSecret`."),null!=d.clientSecret&&r.clientSecret!==d.clientSecret&&console.warn("Unsupported prop change on EmbeddedCheckoutProvider: You cannot change the client secret after setting it. Unmount and create a new instance of EmbeddedCheckoutProvider instead."),null!=d.fetchClientSecret&&r.fetchClientSecret!==d.fetchClientSecret&&console.warn("Unsupported prop change on EmbeddedCheckoutProvider: You cannot change fetchClientSecret after setting it. Unmount and create a new instance of EmbeddedCheckoutProvider instead."),null!=d.onComplete&&r.onComplete!==d.onComplete&&console.warn("Unsupported prop change on EmbeddedCheckoutProvider: You cannot change the onComplete option after setting it."),null!=d.onShippingDetailsChange&&r.onShippingDetailsChange!==d.onShippingDetailsChange&&console.warn("Unsupported prop change on EmbeddedCheckoutProvider: You cannot change the onShippingDetailsChange option after setting it."),null!=d.onLineItemsChange&&r.onLineItemsChange!==d.onLineItemsChange&&console.warn("Unsupported prop change on EmbeddedCheckoutProvider: You cannot change the onLineItemsChange option after setting it.")):console.warn("Unsupported prop change on EmbeddedCheckoutProvider: You cannot unset options after setting them."))}),[d,r]),t.createElement(L.Provider,{value:u},n)},e.EpsBankElement=Q,e.ExpressCheckoutElement=ee,e.FpxBankElement=V,e.IbanElement=Z,e.IdealBankElement=J,e.LinkAuthenticationElement=re,e.P24BankElement=K,e.PaymentElement=X,e.PaymentMethodMessagingElement=ie,e.PaymentRequestButtonElement=ae,e.ShippingAddressElement=oe,e.useCheckout=function(){!function(e){var a=t.useContext(T);j(a,e)}("calls useCheckout()");var e=t.useContext(D);if(!e)throw new Error("Could not find Checkout Context; You need to wrap the part of your app that calls useCheckout() in an <CheckoutProvider> provider.");return e},e.useElements=function(){return P("calls useElements()").elements},e.useStripe=function(){return A("calls useStripe()").stripe}}(t,a(609))}},t={};function a(r){var n=t[r];if(void 0!==n)return n.exports;var o=t[r]={exports:{}};return e[r].call(o.exports,o,o.exports,a),o.exports}(()=>{"use strict";var e,t=a(609),r="https://js.stripe.com",n="".concat(r,"/v3"),o=/^https:\/\/js\.stripe\.com\/v3\/?(\?.*)?$/,i=/^https:\/\/js\.stripe\.com\/(v3|[a-z]+)\/stripe\.js(\?.*)?$/,l="loadStripe.setLoadParameters was called but an existing Stripe.js script already exists in the document; existing script parameters will be used",c=function(e){var t=e&&!e.advancedFraudSignals?"?advancedFraudSignals=false":"",a=document.createElement("script");a.src="".concat(n).concat(t);var r=document.head||document.body;if(!r)throw new Error("Expected document.body not to be null. Stripe.js requires a <body> element.");return r.appendChild(a),a},s=null,u=null,m=null,p=!1,d=function(){return e||(e=(t=null,null!==s?s:(s=new Promise((function(e,a){if("undefined"!=typeof window&&"undefined"!=typeof document)if(window.Stripe&&t&&console.warn(l),window.Stripe)e(window.Stripe);else try{var n=function(){for(var e,t=document.querySelectorAll('script[src^="'.concat(r,'"]')),a=0;a<t.length;a++){var n=t[a];if(e=n.src,o.test(e)||i.test(e))return n}return null}();if(n&&t)console.warn(l);else if(n){if(n&&null!==m&&null!==u){var s;n.removeEventListener("load",m),n.removeEventListener("error",u),null===(s=n.parentNode)||void 0===s||s.removeChild(n),n=c(t)}}else n=c(t);m=function(e,t){return function(){window.Stripe?e(window.Stripe):t(new Error("Stripe.js not available"))}}(e,a),u=function(e){return function(t){e(new Error("Failed to load Stripe.js",{cause:t}))}}(a),n.addEventListener("load",m),n.addEventListener("error",u)}catch(e){return void a(e)}else e(null)}))).catch((function(e){return s=null,Promise.reject(e)}))).catch((function(t){return e=null,Promise.reject(t)})));var t};Promise.resolve().then((function(){return d()})).catch((function(e){p||console.warn(e)}));var f=function(){for(var e=arguments.length,t=new Array(e),a=0;a<e;a++)t[a]=arguments[a];p=!0;var r=Date.now();return d().then((function(e){return function(e,t,a){if(null===e)return null;var r=t[0].match(/^pk_test/),n=function(e){return 3===e?"v3":e}(e.version);r&&"v3"!==n&&console.warn("Stripe.js@".concat(n," was loaded on the page, but @stripe/stripe-js@").concat("5.10.0"," expected Stripe.js@").concat("v3",". This may result in unexpected behavior. For more information, see https://docs.stripe.com/sdks/stripejs-versioning"));var o=e.apply(void 0,t);return function(e,t){e&&e._registerWrapper&&e._registerWrapper({name:"stripe-js",version:"5.10.0",startTime:t})}(o,a),o}(e,t,r)}))},b=a(926);const h=e=>({AUD:"AUD$",USD:"USD$",NZD:"NZD$",GBP:"GBP£",EUR:"EUR€",CAD:"CAD$",SGD:"SGD$"}[e]||e+" "),y=(()=>{const e=window.wpApiSettings?.restUrl;return e?e.replace(/\/$/,""):document.querySelector('link[rel="https://api.w.org/"]').href.replace(/\/$/,"")})(),g=(f("your-publishable-key-here"),e=>new URLSearchParams(window.location.search).get(e)),E=({property:e,isSelected:t,onToggle:a,nights:r,checkInDate:n,showPropertyImages:o,includeIcons:i})=>{e.availability?.total_cost||e.availability?.dates?.reduce(((e,t)=>e+(t.rate||0)),0);const l=e.availability?.available;return React.createElement("div",{className:`bif-tile ${t?"bif-selected":""} ${l?"":"is-unavailable"}`},o&&e.property_image&&React.createElement("div",{className:"bif-tile__hero"},React.createElement("img",{loading:"lazy",src:e.property_image,alt:e.property_name}),React.createElement("span",{className:"bif-chip "+(l?"":"unavailable")},((e,t,a)=>{if(e)return"Available";switch(t){case"Booked Out":return"Booked Out";case"No Tariff Set":return"No Rates Set";case"Min Nights":return`Minimum ${a||2} Nights`;default:return"Unavailable"}})(l,e.availability?.availability_reason,e.availability?.min_nights))),React.createElement("div",{className:"bif-tile__content"},React.createElement("h3",{className:"bif-tile__title"},e.property_name),i&&e.property_features&&React.createElement("ul",{className:"bif-amenities bif-amenities--slim"},1===e.property_features.wifi&&React.createElement("li",null,React.createElement("span",null,"📶 WiFi")),e.property_features.queen_beds>0&&React.createElement("li",null,React.createElement("span",null,"🛏️ ",e.property_features.queen_beds," Queen")),e.property_features.king_beds>0&&React.createElement("li",null,React.createElement("span",null,"🛏️ ",e.property_features.king_beds," King")),e.property_features.double_beds>0&&React.createElement("li",null,React.createElement("span",null,"🛏️ ",e.property_features.double_beds," Double")),e.property_features.single_beds>0&&React.createElement("li",null,React.createElement("span",null,"🛏️ ",e.property_features.single_beds," Single")),e.property_features.bunk_beds>0&&React.createElement("li",null,React.createElement("span",null,"🛏️ ",e.property_features.bunk_beds," Bunk")),e.property_features.sofa_beds>0&&React.createElement("li",null,React.createElement("span",null,"🛋️ ",e.property_features.sofa_beds," Sofa bed")),e.property_features.bedrooms&&React.createElement("li",null,React.createElement("span",null,"🏠 ",e.property_features.bedrooms," Bedroom",e.property_features.bedrooms>1?"s":"")),e.property_features.living_areas&&React.createElement("li",null,React.createElement("span",null,"🛋️ ",e.property_features.living_areas," Living Area",e.property_features.living_areas>1?"s":""))),e.availability?.dates&&React.createElement("div",{className:"bif-tile__rates"},e.availability.dates.map(((e,t)=>React.createElement("div",{key:t,className:"bif-pill "+(e.availability?"ok":"na")},React.createElement("span",{className:"bif-pill__date"},e.date_formatted),React.createElement("strong",{className:"bif-pill__amt"},e.availability?`$${e.rate}`:"Booked Out"===e.availability_reason?"Booked":"No Tariff Set"===e.availability_reason?"No Rate":"N/A"))))),React.createElement("div",{className:"bif-tile__footer"},l?React.createElement("button",{onClick:a,className:"bif-btn "+(t?"bif-btn-selected":"bif-btn-select")},t?"✓ Selected":"Select"):React.createElement("button",{disabled:!0,className:"bif-btn bif-btn-disabled"},"Unavailable")),t&&e.optional_extras?.length>0&&React.createElement("div",{className:"bif-optional-extras"},React.createElement("h4",{className:"bif-daily-breakdown-title"},"Optional Extras"),React.createElement("div",{className:"bif-extras-list"},e.optional_extras.map((t=>React.createElement("div",{key:t.id,className:"bif-extra-item"},React.createElement("div",{className:"bif-extra-info"},React.createElement("input",{type:"checkbox",checked:e.selectedExtras?.[t.id]||!1,onChange:()=>e.onToggleExtra?.(e.id,t.id)}),React.createElement("label",null,t.description)),React.createElement("div",{className:"bif-extra-price"},"$",t.amount))))))))},v=({property:e,isSelected:t,onToggle:a,nights:r,checkInDate:n,showPropertyImages:o,includeIcons:i})=>{e.availability?.total_cost||e.availability?.dates?.reduce(((e,t)=>e+(t.rate||0)),0);const l=e.availability?.available;return React.createElement("div",{className:`bif-row ${t?"bif-selected":""} ${l?"":"is-unavailable"} ${o&&e.property_image?"":"no-image"}`},o&&e.property_image&&React.createElement("div",{className:"bif-row__thumb"},React.createElement("img",{loading:"lazy",src:e.property_image,alt:e.property_name})),React.createElement("div",{className:"bif-row__main"},React.createElement("div",{className:"bif-row__top"},React.createElement("h3",{className:"bif-row__title"},e.property_name),React.createElement("span",{className:"bif-dot "+(c=l,c?"ok":"na"),"aria-hidden":"true"})),i&&e.property_features&&React.createElement("ul",{className:"bif-amenities bif-amenities--inline"},1===e.property_features.wifi&&React.createElement("li",null,React.createElement("span",null,"📶 WiFi")),e.property_features.queen_beds>0&&React.createElement("li",null,React.createElement("span",null,"🛏️ ",e.property_features.queen_beds," Queen")),e.property_features.king_beds>0&&React.createElement("li",null,React.createElement("span",null,"🛏️ ",e.property_features.king_beds," King")),e.property_features.double_beds>0&&React.createElement("li",null,React.createElement("span",null,"🛏️ ",e.property_features.double_beds," Double")),e.property_features.single_beds>0&&React.createElement("li",null,React.createElement("span",null,"🛏️ ",e.property_features.single_beds," Single")),e.property_features.bunk_beds>0&&React.createElement("li",null,React.createElement("span",null,"🛏️ ",e.property_features.bunk_beds," Bunk")),e.property_features.sofa_beds>0&&React.createElement("li",null,React.createElement("span",null,"🛋️ ",e.property_features.sofa_beds," Sofa bed")),e.property_features.bedrooms&&React.createElement("li",null,React.createElement("span",null,"🏠 ",e.property_features.bedrooms," Bedroom",e.property_features.bedrooms>1?"s":"")),e.property_features.living_areas&&React.createElement("li",null,React.createElement("span",null,"🛋️ ",e.property_features.living_areas," Living Area",e.property_features.living_areas>1?"s":"")))),e.availability?.dates&&React.createElement("div",{className:"bif-row__rates"},e.availability.dates.map(((e,t)=>React.createElement("div",{key:t,className:"bif-rmini "+(e.availability?"ok":"na")},React.createElement("div",{className:"bif-rmini__date"},e.date_formatted),React.createElement("div",{className:"bif-rmini__amt"},e.availability?`$${e.rate}`:"Booked Out"===e.availability_reason?"Booked":"No Tariff Set"===e.availability_reason?"No Rate":"N/A"))))),React.createElement("div",{className:"bif-row__cta"},l?React.createElement("button",{onClick:a,className:"bif-btn "+(t?"bif-btn-selected":"bif-btn-select")},t?"✓ Selected":"Select"):React.createElement("button",{disabled:!0,className:"bif-btn bif-btn-disabled"},"Unavailable")),t&&e.optional_extras?.length>0&&React.createElement("div",{className:"bif-optional-extras",style:{gridColumn:"1 / -1",marginTop:"1rem"}},React.createElement("h4",{className:"bif-daily-breakdown-title"},"Optional Extras"),React.createElement("div",{className:"bif-extras-list"},e.optional_extras.map((t=>React.createElement("div",{key:t.id,className:"bif-extra-item"},React.createElement("div",{className:"bif-extra-info"},React.createElement("input",{type:"checkbox",checked:e.selectedExtras?.[t.id]||!1,onChange:()=>e.onToggleExtra?.(e.id,t.id)}),React.createElement("label",null,t.description)),React.createElement("div",{className:"bif-extra-price"},"$",t.amount)))))));var c},R=({property:e,isSelected:t,onToggle:a,nights:r,checkInDate:n,showPropertyImages:o,includeIcons:i})=>{const l=e.availability?.total_cost||e.availability?.dates?.reduce(((e,t)=>e+(t.rate||0)),0)||0,c=e.availability?.available,s=(e,t,a)=>{if(e)return"Available";switch(t){case"Booked Out":return"Booked Out";case"No Tariff Set":return"No Rates Set";case"Min Nights":return`Minimum ${a||2} Nights`;default:return"Unavailable"}};return React.createElement("div",{className:`bif-property-card ${t?"bif-selected":""} ${c?"":"bif-unavailable"}`},React.createElement("div",{className:"bif-property-header"},o&&e.property_image&&React.createElement("div",{className:"bif-property-image"},React.createElement("img",{src:e.property_image,alt:e.property_name})),React.createElement("div",{className:"bif-property-info"},React.createElement("h3",{className:"bif-property-name"},e.property_name),e.property_description&&React.createElement("p",{className:"bif-property-description"},e.property_description),i&&e.property_features&&React.createElement("div",{className:"bif-property-icons"},1===e.property_features.wifi&&React.createElement("span",{className:"bif-property-icon",title:"WiFi Available"},"📶 WiFi"),e.property_features.queen_beds>0&&React.createElement("span",{className:"bif-property-icon",title:`${e.property_features.queen_beds} Queen bed${e.property_features.queen_beds>1?"s":""}`},"🛏️ ",e.property_features.queen_beds," Queen"),e.property_features.king_beds>0&&React.createElement("span",{className:"bif-property-icon",title:`${e.property_features.king_beds} King bed${e.property_features.king_beds>1?"s":""}`},"🛏️ ",e.property_features.king_beds," King"),e.property_features.double_beds>0&&React.createElement("span",{className:"bif-property-icon",title:`${e.property_features.double_beds} Double bed${e.property_features.double_beds>1?"s":""}`},"🛏️ ",e.property_features.double_beds," Double"),e.property_features.single_beds>0&&React.createElement("span",{className:"bif-property-icon",title:`${e.property_features.single_beds} Single bed${e.property_features.single_beds>1?"s":""}`},"🛏️ ",e.property_features.single_beds," Single"),e.property_features.bunk_beds>0&&React.createElement("span",{className:"bif-property-icon",title:`${e.property_features.bunk_beds} Bunk bed${e.property_features.bunk_beds>1?"s":""}`},"🛏️ ",e.property_features.bunk_beds," Bunk"),e.property_features.sofa_beds>0&&React.createElement("span",{className:"bif-property-icon",title:`${e.property_features.sofa_beds} Sofa bed${e.property_features.sofa_beds>1?"s":""}`},"🛋️ ",e.property_features.sofa_beds," Sofa bed"),e.property_features.bedrooms&&React.createElement("span",{className:"bif-property-icon",title:`${e.property_features.bedrooms} bedroom${e.property_features.bedrooms>1?"s":""}`},"🏠 ",e.property_features.bedrooms," Bedroom",e.property_features.bedrooms>1?"s":""),e.property_features.living_areas&&React.createElement("span",{className:"bif-property-icon",title:`${e.property_features.living_areas} living area${e.property_features.living_areas>1?"s":""}`},"🛋️ ",e.property_features.living_areas," Living Area",e.property_features.living_areas>1?"s":""))),React.createElement("div",{className:"bif-property-status-container"},React.createElement("span",{className:`bif-property-status ${((e,t)=>{if(e)return"bif-status-available";switch(t){case"Booked Out":return"bif-status-booked";case"No Tariff Set":return"bif-status-no-rate";case"Min Nights":return"bif-status-min-nights";default:return"bif-status-unavailable"}})(c,e.availability?.availability_reason)}`},s(c,e.availability?.availability_reason,e.availability?.min_nights)),c?React.createElement("button",{onClick:a,className:`bif-btn ${t?"bif-btn-selected":"bif-btn-select"} bif-header-btn`,style:{marginLeft:"0.75rem"}},t?"✓ Selected":"Select Property"):React.createElement("button",{disabled:!0,className:"bif-btn bif-btn-disabled bif-header-btn",style:{marginLeft:"0.75rem"}},s(c,e.availability?.availability_reason,e.availability?.min_nights)))),e.availability?.dates&&React.createElement("div",{className:"bif-availability-details"},React.createElement("h4",{className:"bif-daily-breakdown-title"},"Daily Rate Breakdown"),React.createElement("div",{className:"bif-daily-rates"},e.availability.dates.map(((e,t)=>React.createElement("div",{key:t,className:"bif-daily-rate "+(e.availability?"bif-available":"bif-unavailable")},React.createElement("div",{className:"bif-date"},e.date_formatted),React.createElement("div",{className:"bif-rate"},e.availability?`$${e.rate}`:"Booked Out"===e.availability_reason?"Booked":"No Tariff Set"===e.availability_reason?"No Rate":"N/A"))))),React.createElement("div",{className:"bif-rate-summary"},React.createElement("div",{className:"bif-summary-row"},React.createElement("span",{className:"bif-total"},"Total: $",l)))),t&&e.optional_extras?.length>0&&React.createElement("div",{className:"bif-optional-extras"},React.createElement("h4",{className:"bif-daily-breakdown-title"},"Optional Extras"),React.createElement("div",{className:"bif-extras-list"},e.optional_extras.map((t=>React.createElement("div",{key:t.id,className:"bif-extra-item"},React.createElement("div",{className:"bif-extra-info"},React.createElement("input",{type:"checkbox",checked:e.selectedExtras?.[t.id]||!1,onChange:()=>e.onToggleExtra?.(e.id,t.id)}),React.createElement("label",null,t.description)),React.createElement("div",{className:"bif-extra-price"},"$",t.amount)))))))},_=({checkInDate:e,nights:t,onDateChange:a,onNightsChange:r,onCheckAvailability:n,isLoading:o,minNights:i,maxNights:l,buttonIcon:c="search",searchLayout:s="default"})=>{const u=(new Date).toISOString().split("T")[0],m={search:"🔍",calendar:"📅",home:"🏠",mapMarker:"📍",star:"⭐",pin:"📌",pinSmall:"📍",globe:"🌍"}[c]||"🔍";return"horizontal"===s?React.createElement("div",{className:"bif-search-box-horizontal"},React.createElement("div",{className:"bif-search-field",onClick:()=>document.querySelector('.bif-search-box-horizontal input[type="date"]')?.showPicker?.()},React.createElement("span",{className:"bif-search-icon"},React.createElement("svg",{width:"20",height:"20",viewBox:"0 0 20 20",fill:"none",xmlns:"http://www.w3.org/2000/svg"},React.createElement("rect",{x:"3",y:"4",width:"14",height:"13",rx:"1",stroke:"currentColor",strokeWidth:"1.5"}),React.createElement("line",{x1:"3",y1:"8",x2:"17",y2:"8",stroke:"currentColor",strokeWidth:"1.5"}),React.createElement("line",{x1:"7",y1:"2",x2:"7",y2:"5",stroke:"currentColor",strokeWidth:"1.5",strokeLinecap:"round"}),React.createElement("line",{x1:"13",y1:"2",x2:"13",y2:"5",stroke:"currentColor",strokeWidth:"1.5",strokeLinecap:"round"}))),React.createElement("div",{className:"bif-search-field-content"},React.createElement("label",null,"Check-In"),React.createElement("input",{type:"date",value:e,onChange:e=>a(e.target.value),min:u}))),React.createElement("div",{className:"bif-search-divider"}),React.createElement("div",{className:"bif-search-field"},React.createElement("span",{className:"bif-search-icon"},React.createElement("svg",{width:"20",height:"20",viewBox:"0 0 20 20",fill:"currentColor",xmlns:"http://www.w3.org/2000/svg"},React.createElement("path",{d:"M17 10.5c0 3.59-2.69 6.5-6 6.5s-6-2.91-6-6.5S7.69 4 11 4c.35 0 .69.03 1.02.09A5.5 5.5 0 0 0 17 10.5z"}))),React.createElement("div",{className:"bif-search-field-content"},React.createElement("label",null,"Nights"),React.createElement("select",{value:t,onChange:e=>r(parseInt(e.target.value))},[...Array(l-i+1).keys()].map((e=>{const t=i+e;return React.createElement("option",{key:t,value:t},t)}))))),React.createElement("button",{onClick:n,disabled:!e||o,className:"bif-search-button"},o?"Checking...":"Search")):React.createElement("div",{className:"bif-date-selector"},React.createElement("h2",{className:"bif-section-title"},"Select Your Dates"),React.createElement("div",{className:"bif-date-form"},React.createElement("div",{className:"bif-form-field"},React.createElement("label",null,"Check-in Date"),React.createElement("input",{type:"date",value:e,onChange:e=>a(e.target.value),min:u,className:"bif-date-input"})),React.createElement("div",{className:"bif-form-field"},React.createElement("label",null,"Number of Nights"),React.createElement("select",{value:t,onChange:e=>r(parseInt(e.target.value)),className:"bif-nights-select"},[...Array(l-i+1).keys()].map((e=>{const t=i+e;return React.createElement("option",{key:t,value:t},t," ",1===t?"night":"nights")})))),React.createElement("div",{className:"bif-form-field"},React.createElement("button",{onClick:n,disabled:!e||o,className:"bif-btn bif-btn-primary bif-check-availability bif-has-icon-preview"},o?React.createElement(React.Fragment,null,React.createElement("div",{className:"bif-spinner"}),React.createElement("span",null,"Checking...")):React.createElement(React.Fragment,null,React.createElement("span",{className:"bif-icon-preview"},m),React.createElement("span",null,"Check Availability"))))))},C=({selectedProperties:e,selectedExtras:t,nights:a,total:r,discountCode:n,onDiscountCodeChange:o,onApplyDiscount:i,checkInDate:l,summary:c,showDiscount:s=!1,showRedeemGiftCertificate:u=!1,giftCertificate:m,onGiftCertificateChange:p,showGiftCertificateForm:d,onTriggerShowGiftCertificate:f,onApplyGiftCertificate:b,gcResult:h,gcLoading:y=!1})=>{Object.values(t).flat().reduce(((e,t)=>e+(t.amount||0)),0);const g=c&&parseFloat(c.order_discount_code_total||0)>0;return e&&0!==e.length?React.createElement("div",{className:"bif-booking-summary"},React.createElement("h3",{className:"bif-section-title"},"Booking Summary"),React.createElement("div",{className:"bif-summary-content"},e.map((e=>{const a=e.sub_total||e.availability?.total_cost||e.availability?.dates?.reduce(((e,t)=>e+(t.rate||0)),0)||0,r=e.mandatory_extras_total||e.mandatory_extras?.reduce(((e,t)=>e+parseFloat(t.amount||0)),0)||0,n=e.optional_extras_total||0,o=parseFloat(a)+parseFloat(r)+parseFloat(n);return React.createElement("div",{key:e.id,className:"bif-property-summary"},React.createElement("h5",{className:"bif-property-summary-name"},e.property_name),React.createElement("div",{className:"bif-property-total"},React.createElement("div",{className:"bif-total-row"},React.createElement("span",null,"Property Subtotal"),React.createElement("span",null,"$",parseFloat(a).toFixed(2)))),e.mandatory_extras&&e.mandatory_extras.length>0&&React.createElement("div",{className:"bif-mandatory-extras-summary"},React.createElement("h4",{className:"bif-daily-breakdown-title"},"Mandatory Extras"),e.mandatory_extras.map((e=>React.createElement("div",{key:e.id,className:"bif-total-row",style:{fontSize:"0.875rem",color:"#dc2626"}},React.createElement("span",null,e.description),React.createElement("span",null,"$",parseFloat(e.amount).toFixed(2)))))),e.optional_extras&&e.optional_extras.filter((e=>e.selected)).length>0&&React.createElement("div",{className:"bif-optional-extras-summary"},React.createElement("h4",{className:"bif-daily-breakdown-title"},"Optional Extras"),e.optional_extras.filter((e=>e.selected)).map((e=>React.createElement("div",{key:e.id,className:"bif-total-row",style:{fontSize:"0.875rem",color:"#92400e"}},React.createElement("span",null,e.description),React.createElement("span",null,"$",parseFloat(e.amount).toFixed(2)))))),React.createElement("div",{className:"bif-property-total"},React.createElement("div",{className:"bif-total-row bif-subtotal"},React.createElement("span",null,"Property Total"),React.createElement("span",null,"$",parseFloat(o).toFixed(2)))),!e.optional_extras&&t[e.id]&&t[e.id].length>0&&React.createElement("div",{className:"bif-optional-extras-summary"},React.createElement("h4",{className:"bif-daily-breakdown-title"},"Selected Optional Extras"),t[e.id].map((e=>React.createElement("div",{key:e.id,className:"bif-total-row",style:{fontSize:"0.875rem",color:"#92400e"}},React.createElement("span",null,e.description),React.createElement("span",null,"$",parseFloat(e.amount).toFixed(2)))))))})),s&&React.createElement("div",{className:"bif-summary-section"},React.createElement("div",{className:"bif-discount-form"},React.createElement("input",{type:"text",placeholder:"Enter discount code",value:n,onChange:e=>o(e.target.value),className:"bif-discount-input"}),React.createElement("button",{onClick:()=>{n.trim()&&i(n)},className:"bif-btn "+(n?.trim()?"bif-btn-primary":"bif-btn-secondary")},"Apply")),g&&React.createElement("div",{className:"bif-discount-applied"},"Discount code applied")),u&&c&&React.createElement("div",{className:"bif-summary-section"},React.createElement("div",{className:"bif-gift-certificate-section"},d?React.createElement("div",{className:"bif-gift-certificate-form"},React.createElement("div",{className:"bif-form-row"},React.createElement("div",{className:"bif-form-field"},React.createElement("label",null,"Certificate Number:"),React.createElement("input",{type:"text",value:m.number,onChange:e=>p({...m,number:e.target.value}),className:"bif-form-control",placeholder:"Enter certificate number",disabled:y})),React.createElement("div",{className:"bif-form-field"},React.createElement("label",null,"Pin:"),React.createElement("input",{type:"number",value:m.pin,onChange:e=>p({...m,pin:e.target.value}),className:"bif-form-control",placeholder:"Enter pin",disabled:y}))),React.createElement("button",{className:"bif-btn bif-btn-secondary",onClick:b,disabled:y},y?"Applying...":"Apply")):React.createElement("button",{className:"bif-btn bif-btn-secondary",onClick:f},"Apply Gift Certificate"),h&&h.valid&&React.createElement("div",{className:"bif-gift-certificate-success"},React.createElement("p",null,"✅ Successfully Applied Gift Certificate"),React.createElement("p",null,h.result),parseFloat(h.total)-parseFloat(h.gc_amount_applied)==0?React.createElement("p",null,React.createElement("strong",null,"🎉 Your gift certificate covers the full amount! No additional payment required.")):React.createElement(React.Fragment,null,React.createElement("p",null,"Remaining balance to pay: ",React.createElement("strong",null,"$",(parseFloat(h.total)-parseFloat(h.gc_amount_applied)).toFixed(2))),React.createElement("p",{style:{fontSize:"0.875rem",color:"#6b7280"}},"*Credit card surcharge will be added at payment")),React.createElement("p",null,"Gift Certificate balance after order: ",React.createElement("strong",null,"$",parseFloat(h.gc_balance_after_order).toFixed(2)))))),React.createElement("div",{className:"bif-grand-total"},h&&h.valid&&React.createElement("div",{className:"bif-total-row"},React.createElement("span",null,"Order Total"),React.createElement("span",null,"$",parseFloat(h.total||c.order_grand_total).toFixed(2))),h&&h.valid&&React.createElement("div",{className:"bif-total-row",style:{color:"#059669"}},React.createElement("span",null,"Gift Certificate Applied"),React.createElement("span",null,"-$",parseFloat(h.gc_amount_applied).toFixed(2))),React.createElement("div",{className:"bif-total-main"},React.createElement("span",null,h&&h.valid&&parseFloat(h.total)-parseFloat(h.gc_amount_applied)==0?"Total Paid by Gift Certificate":h&&h.valid?"Balance Due":"Total Cost"),React.createElement("span",{className:"bif-total-amount"},"$",h&&h.valid?(parseFloat(h.total)-parseFloat(h.gc_amount_applied)).toFixed(2):parseFloat(r).toFixed(2))),h&&h.valid&&parseFloat(h.total)-parseFloat(h.gc_amount_applied)>0&&c&&c.order_has_surcharge&&React.createElement("div",{className:"bif-surcharge-note",style:{fontSize:"0.875rem",color:"#6b7280",marginTop:"0.5rem"}},"*Credit card surcharge will be added at payment"),c&&parseFloat(c.order_discount_code_total||0)>0&&React.createElement("div",{className:"bif-discount-text"},"Includes discount of $",parseFloat(c.order_discount_code_total||0).toFixed(2))))):null},w=({isOpen:e,onClose:a,title:r,content:n})=>((0,t.useEffect)((()=>(document.body.style.overflow=e?"hidden":"",()=>{document.body.style.overflow=""})),[e]),(0,t.useEffect)((()=>{const t=t=>{"Escape"===t.key&&e&&a()};return e&&document.addEventListener("keydown",t),()=>{document.removeEventListener("keydown",t)}}),[e,a]),e?React.createElement("div",{className:"bif-modal-overlay",onClick:a},React.createElement("div",{className:"bif-modal",onClick:e=>e.stopPropagation()},React.createElement("div",{className:"bif-modal-header"},React.createElement("h3",{className:"bif-modal-title"},r),React.createElement("button",{className:"bif-modal-close",onClick:a,"aria-label":"Close modal"},"×")),React.createElement("div",{className:"bif-modal-content",dangerouslySetInnerHTML:{__html:n}}))):null),N=({userDetails:e,onUpdateDetails:t,formErrors:a,showSuburb:r=!0,showPostcode:n=!0,showComments:o=!1})=>React.createElement("div",{className:"bif-customer-details"},React.createElement("h2",{className:"bif-section-title"},"Your Details"),React.createElement("div",{className:"bif-customer-form"},React.createElement("div",{className:"bif-form-row"},React.createElement("div",{className:"bif-form-field"},React.createElement("label",null,"First Name *"),React.createElement("input",{type:"text",value:e.firstName,onChange:e=>t("firstName",e.target.value),placeholder:"Enter your first name",className:a.firstName?"bif-error":""}),a.firstName&&React.createElement("div",{className:"bif-field-error"},a.firstName)),React.createElement("div",{className:"bif-form-field"},React.createElement("label",null,"Last Name *"),React.createElement("input",{type:"text",value:e.lastName,onChange:e=>t("lastName",e.target.value),placeholder:"Enter your last name",className:a.lastName?"bif-error":""}),a.lastName&&React.createElement("div",{className:"bif-field-error"},a.lastName))),React.createElement("div",{className:"bif-form-row"},React.createElement("div",{className:"bif-form-field"},React.createElement("label",null,"Email *"),React.createElement("input",{type:"email",value:e.email,onChange:e=>t("email",e.target.value),placeholder:"Enter your email address",className:a.email?"bif-error":""}),a.email&&React.createElement("div",{className:"bif-field-error"},a.email)),React.createElement("div",{className:"bif-form-field"},React.createElement("label",null,"Phone *"),React.createElement("input",{type:"tel",value:e.phone,onChange:e=>t("phone",e.target.value),placeholder:"Enter your phone number",className:a.phone?"bif-error":""}),a.phone&&React.createElement("div",{className:"bif-field-error"},a.phone))),(n||r)&&React.createElement("div",{className:"bif-form-row"},n&&React.createElement("div",{className:"bif-form-field"},React.createElement("label",null,"Postcode"),React.createElement("input",{type:"text",value:e.postcode,onChange:e=>t("postcode",e.target.value),placeholder:"Enter your postcode"})),r&&React.createElement("div",{className:"bif-form-field"},React.createElement("label",null,"Suburb"),React.createElement("input",{type:"text",value:e.suburb,onChange:e=>t("suburb",e.target.value),placeholder:"Enter your suburb"}))),o&&React.createElement("div",{className:"bif-form-row bif-full-width"},React.createElement("div",{className:"bif-form-field"},React.createElement("label",null,"Comments"),React.createElement("textarea",{value:e.comments,onChange:e=>t("comments",e.target.value),rows:4,placeholder:"Any special requests or comments..."}))))),k=({summary:e,propertyIds:a,userDetails:r,paymentType:n,giftCertificate:o})=>{const i=(0,b.useStripe)(),l=(0,b.useElements)(),[c,s]=(0,t.useState)(!1),[u,m]=(0,t.useState)(""),[p,d]=(0,t.useState)(!1),[f,h]=(0,t.useState)(""),g=async t=>{t.preventDefault(),s(!0),m("");try{let t={amount:"deposit"===n?e.order_deposit_amount:e.order_payable_now,currency:e?.order_currency||"AUD",summary:e,propertyIds:"string"==typeof a?a.split(",").map((e=>parseInt(e.trim()))):a,userDetails:r,paymentType:n};if("gift"===n&&o)t.giftCertificateApplied=!0,t.giftCertificate=o,t.amount=0;else{if(!i||!l)return void console.error("Stripe.js has not loaded yet.");const e=l.getElement(b.CardElement),{paymentMethod:a,error:r}=await i.createPaymentMethod({type:"card",card:e});if(r)return console.error(r),m(r.message),void s(!1);t.stripePaymentMethodId=a.id,o&&o.valid&&(t.giftCertificateApplied=!0,t.giftCertificate=o)}const c=await fetch(`${y}/bookitfast/v1/process-payment`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(t)}),u=await c.json();if(!u.success)throw new Error(u.message||"Payment failed.");console.log("Payment successful:",u),h(u.data.charge),d(!0)}catch(e){console.error("Payment error:",e),m(e.message)}finally{s(!1)}};return React.createElement("div",{className:"bif-payment-container"},React.createElement("h3",null,"gift"===n?"🎁 Gift Certificate Payment":"💳 Payment Details"),u&&React.createElement("div",{className:"bif-error-message"},u),p?React.createElement("div",{className:"bif-success-message"},React.createElement("p",null,React.createElement("strong",null,"✅ Payment Successful!")),f&&React.createElement("p",null,React.createElement("a",{href:f,target:"_blank",rel:"noopener noreferrer"},"📄 Click here to view your receipt"))):"gift"===n?React.createElement("div",{className:"bif-gift-certificate-payment-form"},React.createElement("div",{className:"bif-gift-certificate-summary"},React.createElement("p",null,"🎁 ",React.createElement("strong",null,"Paying with Gift Certificate")),React.createElement("p",null,"Amount: ",React.createElement("strong",null,"$",parseFloat(o.gc_amount_applied||0).toFixed(2))),React.createElement("p",null,"No credit card required - your gift certificate will be charged automatically.")),React.createElement("button",{onClick:g,disabled:c,className:"bif-btn bif-btn-primary bif-btn-large"},c?"Processing...":"Complete Booking")):React.createElement("form",{onSubmit:g,className:"bif-stripe-form"},React.createElement("div",{className:"bif-card-element-container"},React.createElement(b.CardElement,{options:{hidePostalCode:!0,style:{base:{fontSize:"16px",color:"#424770","::placeholder":{color:"#aab7c4"}},invalid:{color:"#9e2146"}}}})),React.createElement("button",{type:"submit",disabled:!i||c,className:"bif-btn bif-btn-primary bif-btn-large"},c?"Processing...":"Pay Now")))},S=({propertyIds:e="",showDiscount:a=!1,showSuburb:r=!0,showPostcode:n=!0,showRedeemGiftCertificate:o=!1,showComments:i=!1,buttonColor:l="#0073aa",buttonTextColor:c="#ffffff",minNights:s=1,maxNights:u=14,showPropertyImages:m=!1,includeIcons:p=!1,layoutStyle:d="cards",buttonIcon:S="search",searchLayout:x="default"})=>{const P=g("nights"),O=P&&!isNaN(P)?Math.max(parseInt(P,10),s):s,I=g("start"),T=g("discount"),j=I?(e=>{const t=e.split("-");if(3===t.length){const[e,a,r]=t.map(Number);if(!isNaN(e)&&!isNaN(a)&&!isNaN(r)){const t=new Date(r,a-1,e);return t.setHours(12,0,0,0),t.toISOString().split("T")[0]}}return null})(I):"",D="string"==typeof e?e:"",[F,A]=(0,t.useState)({date:j,nights:O}),[B,$]=(0,t.useState)(null),[G,L]=(0,t.useState)({}),[M,z]=(0,t.useState)(null),[U,q]=(0,t.useState)(null),[H,Y]=(0,t.useState)(!1),[W,V]=(0,t.useState)(""),[Z,J]=(0,t.useState)({firstName:"",lastName:"",phone:"",email:"",postcode:"",suburb:"",comments:""}),[K,Q]=(0,t.useState)(!1),[X,ee]=(0,t.useState)(!1),[te,ae]=(0,t.useState)(T),[re,ne]=(0,t.useState)(null),[oe,ie]=(0,t.useState)(!1),[le,ce]=(0,t.useState)(null),[se,ue]=(0,t.useState)({}),[me,pe]=(0,t.useState)({number:"",pin:""}),[de,fe]=(0,t.useState)(!1),[be,he]=(0,t.useState)(null),[ye,ge]=(0,t.useState)(!1),[Ee,ve]=(0,t.useState)({}),[Re,_e]=(0,t.useState)(!1),[Ce,we]=(0,t.useState)({isOpen:!1,title:"",content:""});(0,t.useEffect)((()=>{j&&O&&(console.log("Auto-checking availability with:",j,O),Ne(j,O))}),[j,O]);const Ne=async(e=F.date,t=F.nights)=>{if(!e||!D)return void console.warn("fetchAvailability skipped - Missing startDate or propertyIds");const a=F.date,r=D.split(",").filter((e=>""!==e.trim()));Y(!0),V(""),_e(!1);try{const e=await fetch(`${y}/bookitfast/v1/availability`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({ids:r,start:a,nights:t})}),n=await e.json();$(n),_e(!0);const o=Object.keys(n).reduce(((e,t)=>(e[t]=!1,e)),{});L(o)}catch(e){console.error(e),V("Failed to fetch availability. Please try again.")}finally{Y(!1)}},ke=(e,t)=>{ve((a=>{const r=a[e]||{},n={...a,[e]:{...r,[t]:!r[t]}};return Se(G,te,n,0),n}))},Se=async(e,t=null,a=Ee,r=0)=>{const n=F.date,o=F.nights,i=new Date(new Date(n).getTime()+864e5*o).toISOString().split("T")[0];Y(!0),V("");try{const r=await fetch(`${y}/bookitfast/v1/availability/summary`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({selected:e,selected_optional_extras:a,start:n,end:i,discount_code:t||null})});if(!r.ok)throw new Error(`HTTP error! status: ${r.status}`);const o=await r.json();q(o),o.stripe_publishable_key&&z(f(o.stripe_publishable_key))}catch(n){console.error("Error fetching summary:",n),r<3?(console.log(`Retrying... Attempt ${r+1}`),await Se(e,t,a,r+1)):V("Failed to fetch summary. Please try again.")}finally{Y(!1)}},xe=e=>{(()=>{const e={};return Z.firstName.trim()||(e.firstName="First name is required"),Z.lastName.trim()||(e.lastName="Last name is required"),Z.email.trim()||(e.email="Email is required"),Z.phone.trim()||(e.phone="Phone is required"),K||(e.agreeToTerms="You must agree to the terms and conditions"),X||(e.consentToDataSharing="You must consent to data sharing with Book It Fast service"),ue(e),0===Object.keys(e).length})()&&(ce(e),ie(!0))},Pe=B?Object.entries(B).filter((([e])=>G[e])).map((([e,t])=>({id:e,...t,...U?.property_summaries?.[e]||{},selectedExtras:Ee[e],onToggleExtra:ke}))):[];return React.createElement("div",{className:"bif-booking-container",style:{"--bif-button-color":l,"--bif-button-color-hover":`${l}dd`,"--bif-button-color-active":`${l}bb`,"--bif-button-text-color":c}},React.createElement("div",{className:"bif-booking-steps"},React.createElement(_,{checkInDate:F.date,nights:F.nights,onDateChange:e=>A((t=>({...t,date:e}))),onNightsChange:e=>A((t=>({...t,nights:e}))),onCheckAvailability:Ne,isLoading:H,minNights:s,maxNights:u,buttonIcon:S,searchLayout:x}),W&&React.createElement("div",{className:"bif-error-message"},W),Re&&B&&React.createElement("div",{className:"bif-property-list"},React.createElement("h2",{className:"bif-section-title"},"Available Properties"),React.createElement("div",{className:`bif-properties bif-properties--${d}`},Object.entries(B).map((([e,t])=>{const a={key:e,property:{id:e,...t,selectedExtras:Ee[e],onToggleExtra:ke},isSelected:G[e],onToggle:()=>(async e=>{const t={...G,[e]:!G[e]};L(t),Object.values(t).includes(!0)?await Se(t,te):q(null)})(e),nights:F.nights,checkInDate:F.date,showPropertyImages:m,includeIcons:p};switch(d){case"grid":return React.createElement(E,a);case"rows":return React.createElement(v,a);default:return React.createElement(R,a)}})))),U&&Pe.length>0&&React.createElement(C,{selectedProperties:Pe,selectedExtras:Ee,nights:F.nights,total:(U.order_payable_now||0)-(U.order_surcharge||0),discountCode:te,onDiscountCodeChange:ae,onApplyDiscount:e=>{Object.keys(G).some((e=>G[e]))&&Se(G,e)},checkInDate:F.date,summary:U,showDiscount:a,showRedeemGiftCertificate:o,giftCertificate:me,onGiftCertificateChange:pe,showGiftCertificateForm:de,onTriggerShowGiftCertificate:()=>{fe(!0)},onApplyGiftCertificate:async e=>{if(e.preventDefault(),console.log("Gift Certificate: Apply button clicked"),console.log("Gift Certificate Data:",me),console.log("Current Summary:",U),ye)return void console.log("Gift Certificate: Already processing, ignoring click");if(!U)return void console.error("Gift Certificate: No summary available");if(!me.number||!me.pin)return console.error("Gift Certificate: Missing number or pin"),void alert("Please enter both certificate number and pin");ge(!0),console.log("Gift Certificate: Setting loading state to true");let t={...U};if(U.order_weekly_discount>0){console.log("Gift Certificate: Weekly discount detected, adjusting summary for gift certificate calculation"),console.log("Gift Certificate: Original order_grand_total:",U.order_grand_total),console.log("Gift Certificate: Order weekly discount:",U.order_weekly_discount),console.log("Gift Certificate: Order surcharge:",U.order_surcharge);const e=parseFloat(U.order_sub_total)+parseFloat(U.order_mandatory_extras_total);console.log("Gift Certificate: Total before weekly discount (excluding surcharge):",e),t={...U,order_grand_total:e.toString(),order_total_before_surcharge:e,order_payable_now:e.toString(),order_surcharge:0,order_has_surcharge:!1},console.log("Gift Certificate: Adjusted summary for gift certificate:",t)}const a={certificate:me,summary:t};console.log("Gift Certificate: Sending request with data:",a);try{const e=await fetch(`${y}/bookitfast/v1/apply-gift-certificate`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(a)});if(console.log("Gift Certificate: Response status:",e.status),!e.ok)throw new Error(`HTTP error! status: ${e.status}`);const t=await e.json();console.log("Gift Certificate: Response data:",t),t.valid?(he(t),t.summary&&(q(t.summary),console.log("Gift Certificate: Updated summary:",t.summary)),console.log("Gift Certificate: Application successful"),console.log("Gift Certificate: Order payable now:",t.order_payable_now)):(console.error("Gift Certificate: API returned error:",t),alert(t.message||"Failed to apply gift certificate"))}catch(e){console.error("Gift Certificate: Error applying certificate:",e),alert("Error applying gift certificate. Please try again.")}finally{ge(!1),console.log("Gift Certificate: Setting loading state to false")}},gcResult:be,gcLoading:ye}),U&&Pe.length>0&&React.createElement(N,{userDetails:Z,onUpdateDetails:(e,t)=>{J((a=>({...a,[e]:t}))),se[e]&&ue((t=>({...t,[e]:null})))},formErrors:se,showSuburb:r,showPostcode:n,showComments:i}),U&&Pe.length>0&&React.createElement("div",{className:"bif-terms-payment"},React.createElement("div",{className:"bif-terms-checkbox"},React.createElement("input",{type:"checkbox",id:"agreeToTerms",checked:K,onChange:()=>Q(!K)}),React.createElement("label",{htmlFor:"agreeToTerms"},"I have read and agree to the"," ",U.order_booking_conditions?.map(((e,t)=>React.createElement("span",{key:t},"local"===e.type?React.createElement("a",{href:"#",onClick:t=>{t.preventDefault(),we({isOpen:!0,title:e.title,content:e.content})},style:{textDecoration:"underline",cursor:"pointer"}},e.title):React.createElement("a",{href:e.url,target:"_blank",rel:"noopener noreferrer"},e.title),t<U.order_booking_conditions.length-2?", ":"",t===U.order_booking_conditions.length-2?" and ":"")))),se.agreeToTerms&&React.createElement("div",{className:"bif-field-error"},se.agreeToTerms)),React.createElement("div",{className:"bif-privacy-consent"},React.createElement("input",{type:"checkbox",id:"consentToDataSharing",checked:X,onChange:()=>ee(!X)}),React.createElement("label",{htmlFor:"consentToDataSharing"},"I consent to my personal information being transmitted to and processed by Book It Fast (",React.createElement("a",{href:"https://bookitfast.app/privacy-policy",target:"_blank",rel:"noopener noreferrer"},"Privacy Policy"),") for booking and payment processing purposes."),se.consentToDataSharing&&React.createElement("div",{className:"bif-field-error"},se.consentToDataSharing)),!oe&&React.createElement("div",{className:"bif-payment-options"},Object.keys(se).length>0&&React.createElement("div",{className:"bif-validation-error"},"Please complete all required fields before proceeding with payment."),be&&be.valid&&parseFloat(be.total)-parseFloat(be.gc_amount_applied)==0?React.createElement("div",{className:"bif-gift-certificate-payment"},React.createElement("div",{className:"bif-gift-certificate-full-coverage"},React.createElement("p",null,"🎉 ",React.createElement("strong",null,"Your gift certificate covers the full booking amount!")),React.createElement("p",null,"No additional payment required.")),React.createElement("button",{className:"bif-btn bif-btn-primary bif-btn-large",onClick:()=>xe("gift")},"🎁 Complete Booking with Gift Certificate")):React.createElement(React.Fragment,null,U.order_surcharge>0&&parseFloat(U.order_payable_now||0)>0&&React.createElement("div",{className:"bif-surcharge-info"},React.createElement("p",null,"Please note a credit card surcharge applies of ",U.order_deposit_surcharge>0&&` $${U.order_deposit_surcharge} for deposit or `,"$",U.order_surcharge," for the full payment.")),U.order_deposit_amount>0?React.createElement("div",{className:"bif-payment-buttons"},React.createElement("button",{className:"bif-btn bif-btn-primary",onClick:()=>xe("deposit")},"💳 Pay Deposit (",h(U?.order_currency||"AUD"),U.order_deposit_amount,")"),React.createElement("button",{className:"bif-btn bif-btn-primary",onClick:()=>xe("full")},"💳 Pay In Full (",h(U?.order_currency||"AUD"),be&&be.valid?parseFloat(be.order_payable_now).toFixed(2):U.order_payable_now,")")):React.createElement("button",{className:"bif-btn bif-btn-primary bif-btn-large",onClick:()=>xe("full")},"💳 Complete Booking - ",h(U?.order_currency||"AUD"),be&&be.valid?parseFloat(be.order_payable_now).toFixed(2):U.order_payable_now)))),U&&oe&&React.createElement("div",{className:"bif-payment-form-container"},"gift"===le?React.createElement(k,{summary:U,propertyIds:D.split(",").map((e=>parseInt(e.trim()))),userDetails:Z,paymentType:le,giftCertificate:be}):M&&React.createElement(b.Elements,{stripe:M},React.createElement(k,{summary:U,propertyIds:D.split(",").map((e=>parseInt(e.trim()))),userDetails:Z,paymentType:le,giftCertificate:be})))),React.createElement(w,{isOpen:Ce.isOpen,onClose:()=>we({isOpen:!1,title:"",content:""}),title:Ce.title,content:Ce.content}))},x=window.wp.blocks,P=window.wp.blockEditor,O=window.wp.components,I=window.wp.primitives,T=window.ReactJSXRuntime,j=(0,T.jsx)(I.SVG,{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24",children:(0,T.jsx)(I.Path,{d:"M13 5c-3.3 0-6 2.7-6 6 0 1.4.5 2.7 1.3 3.7l-3.8 3.8 1.1 1.1 3.8-3.8c1 .8 2.3 1.3 3.7 1.3 3.3 0 6-2.7 6-6S16.3 5 13 5zm0 10.5c-2.5 0-4.5-2-4.5-4.5s2-4.5 4.5-4.5 4.5 2 4.5 4.5-2 4.5-4.5 4.5z"})}),D=(0,T.jsx)(I.SVG,{viewBox:"0 0 24 24",xmlns:"http://www.w3.org/2000/svg",children:(0,T.jsx)(I.Path,{d:"M19 3H5c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h14c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2-2zm.5 16c0 .3-.2.5-.5.5H5c-.3 0-.5-.2-.5-.5V7h15v12zM9 10H7v2h2v-2zm0 4H7v2h2v-2zm4-4h-2v2h2v-2zm4 0h-2v2h2v-2zm-4 4h-2v2h2v-2zm4 0h-2v2h2v-2z"})}),F=(0,T.jsx)(I.SVG,{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24",children:(0,T.jsx)(I.Path,{d:"M12 4L4 7.9V20h16V7.9L12 4zm6.5 14.5H14V13h-4v5.5H5.5V8.8L12 5.7l6.5 3.1v9.7z"})}),A=(0,T.jsx)(I.SVG,{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24",children:(0,T.jsx)(I.Path,{d:"M12 9c-.8 0-1.5.7-1.5 1.5S11.2 12 12 12s1.5-.7 1.5-1.5S12.8 9 12 9zm0-5c-3.6 0-6.5 2.8-6.5 6.2 0 .8.3 1.8.9 3.1.5 1.1 1.2 2.3 2 3.6.7 1 3 3.8 3.2 3.9l.4.5.4-.5c.2-.2 2.6-2.9 3.2-3.9.8-1.2 1.5-2.5 2-3.6.6-1.3.9-2.3.9-3.1C18.5 6.8 15.6 4 12 4zm4.3 8.7c-.5 1-1.1 2.2-1.9 3.4-.5.7-1.7 2.2-2.4 3-.7-.8-1.9-2.3-2.4-3-.8-1.2-1.4-2.3-1.9-3.3-.6-1.4-.7-2.2-.7-2.5 0-2.6 2.2-4.7 5-4.7s5 2.1 5 4.7c0 .2-.1 1-.7 2.4z"})}),B=(0,T.jsx)(I.SVG,{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24",children:(0,T.jsx)(I.Path,{d:"M11.776 4.454a.25.25 0 01.448 0l2.069 4.192a.25.25 0 00.188.137l4.626.672a.25.25 0 01.139.426l-3.348 3.263a.25.25 0 00-.072.222l.79 4.607a.25.25 0 01-.362.263l-4.138-2.175a.25.25 0 00-.232 0l-4.138 2.175a.25.25 0 01-.363-.263l.79-4.607a.25.25 0 00-.071-.222L4.754 9.881a.25.25 0 01.139-.426l4.626-.672a.25.25 0 00.188-.137l2.069-4.192z"})}),$=(0,T.jsx)(I.SVG,{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24",children:(0,T.jsx)(I.Path,{d:"m21.5 9.1-6.6-6.6-4.2 5.6c-1.2-.1-2.4.1-3.6.7-.1 0-.1.1-.2.1-.5.3-.9.6-1.2.9l3.7 3.7-5.7 5.7v1.1h1.1l5.7-5.7 3.7 3.7c.4-.4.7-.8.9-1.2.1-.1.1-.2.2-.3.6-1.1.8-2.4.6-3.6l5.6-4.1zm-7.3 3.5.1.9c.1.9 0 1.8-.4 2.6l-6-6c.8-.4 1.7-.5 2.6-.4l.9.1L15 4.9 19.1 9l-4.9 3.6z"})}),G=(0,T.jsx)(I.SVG,{viewBox:"0 0 24 24",xmlns:"http://www.w3.org/2000/svg",children:(0,T.jsx)(I.Path,{d:"M10.97 10.159a3.382 3.382 0 0 0-2.857.955l1.724 1.723-2.836 2.913L7 17h1.25l2.913-2.837 1.723 1.723a3.38 3.38 0 0 0 .606-.825c.33-.63.446-1.343.35-2.032L17 10.695 13.305 7l-2.334 3.159Z"})}),L=(0,T.jsx)(I.SVG,{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24",children:(0,T.jsx)(I.Path,{d:"M12 4c-4.4 0-8 3.6-8 8s3.6 8 8 8 8-3.6 8-8-3.6-8-8-8Zm6.5 8c0 .6 0 1.2-.2 1.8h-2.7c0-.6.2-1.1.2-1.8s0-1.2-.2-1.8h2.7c.2.6.2 1.1.2 1.8Zm-.9-3.2h-2.4c-.3-.9-.7-1.8-1.1-2.4-.1-.2-.2-.4-.3-.5 1.6.5 3 1.6 3.8 3ZM12.8 17c-.3.5-.6 1-.8 1.3-.2-.3-.5-.8-.8-1.3-.3-.5-.6-1.1-.8-1.7h3.3c-.2.6-.5 1.2-.8 1.7Zm-2.9-3.2c-.1-.6-.2-1.1-.2-1.8s0-1.2.2-1.8H14c.1.6.2 1.1.2 1.8s0 1.2-.2 1.8H9.9ZM11.2 7c.3-.5.6-1 .8-1.3.2.3.5.8.8 1.3.3.5.6 1.1.8 1.7h-3.3c.2-.6.5-1.2.8-1.7Zm-1-1.2c-.1.2-.2.3-.3.5-.4.7-.8 1.5-1.1 2.4H6.4c.8-1.4 2.2-2.5 3.8-3Zm-1.8 8H5.7c-.2-.6-.2-1.1-.2-1.8s0-1.2.2-1.8h2.7c0 .6-.2 1.1-.2 1.8s0 1.2.2 1.8Zm-2 1.4h2.4c.3.9.7 1.8 1.1 2.4.1.2.2.4.3.5-1.6-.5-3-1.6-3.8-3Zm7.4 3c.1-.2.2-.3.3-.5.4-.7.8-1.5 1.1-2.4h2.4c-.8 1.4-2.2 2.5-3.8 3Z"})}),{useState:M,useEffect:z}=wp.element;(0,x.registerBlockType)("bookitfast/multi-embed",{title:"Book It Fast Availability",description:"A multi-property booking embed for WordPress.",icon:"calendar",category:"widgets",attributes:{propertyIds:{type:"string",default:""},showDiscount:{type:"boolean",default:!1},showSuburb:{type:"boolean",default:!1},showPostcode:{type:"boolean",default:!1},showRedeemGiftCertificate:{type:"boolean",default:!1},showComments:{type:"boolean",default:!1},buttonColor:{type:"string",default:"#0073aa"},buttonTextColor:{type:"string",default:"#ffffff"},minNights:{type:"number",default:1},maxNights:{type:"number",default:14},showPropertyImages:{type:"boolean",default:!1},includeIcons:{type:"boolean",default:!1},layoutStyle:{type:"string",default:"cards"},buttonIcon:{type:"string",default:"search"},searchLayout:{type:"string",default:"default"}},edit:({attributes:e,setAttributes:t})=>{const a=(0,P.useBlockProps)(),[r,n]=M([]),[o,i]=M(!0),[l,c]=M(null);return z((()=>{wp.apiFetch({path:"/bookitfast/v1/properties"}).then((e=>{e.success?n(e.properties):c("Failed to fetch properties.")})).catch((e=>{console.error("API Fetch Error:",e),c("Error fetching properties.")})).finally((()=>i(!1)))}),[]),React.createElement("div",a,React.createElement(P.InspectorControls,null,React.createElement(O.PanelBody,{title:"Search Layout",initialOpen:!0},React.createElement(O.SelectControl,{label:"Search Box Style",value:e.searchLayout,options:[{label:"Default (Stacked)",value:"default"},{label:"Horizontal (Check-In & Nights)",value:"horizontal"}],onChange:e=>t({searchLayout:e}),help:"Choose the layout style for the search box",__next40pxDefaultSize:!0,__nextHasNoMarginBottom:!0})),React.createElement(O.PanelBody,{title:"Search Options",initialOpen:!1},o?React.createElement("p",null,"Loading properties..."):l?React.createElement("p",{style:{color:"red"}},l):React.createElement(O.SelectControl,{multiple:!0,label:"Select Properties",value:e.propertyIds?e.propertyIds.split(","):[],options:r.map((e=>({label:e.title,value:e.id.toString()}))),onChange:e=>{const a=e.join(",");t({propertyIds:a})},__next40pxDefaultSize:!0,__nextHasNoMarginBottom:!0}),React.createElement(O.RangeControl,{label:"Minimum Nights",value:e.minNights,onChange:e=>t({minNights:e}),min:1,max:30,step:1}),React.createElement(O.RangeControl,{label:"Maximum Nights",value:e.maxNights,onChange:e=>t({maxNights:e}),min:e.minNights||1,max:90,step:1}),React.createElement(O.BaseControl,{label:"Button Color",id:"button-color-control"},React.createElement(O.ColorPalette,{value:e.buttonColor,onChange:e=>t({buttonColor:e}),colors:[{name:"Blue",color:"#0073aa"},{name:"Green",color:"#46b450"},{name:"Red",color:"#dc3232"},{name:"Orange",color:"#ff6900"},{name:"Purple",color:"#8224e3"},{name:"Dark",color:"#333333"}]})),React.createElement(O.BaseControl,{label:"Button Text Color",id:"button-text-color-control"},React.createElement(O.ColorPalette,{value:e.buttonTextColor,onChange:e=>t({buttonTextColor:e}),colors:[{name:"White",color:"#ffffff"},{name:"Black",color:"#000000"},{name:"Dark Gray",color:"#333333"},{name:"Light Gray",color:"#666666"}]})),React.createElement("div",{style:{marginBottom:"16px"}},React.createElement("label",{style:{display:"block",marginBottom:"8px",fontSize:"11px",fontWeight:"500",textTransform:"uppercase",color:"#1e1e1e"}},"Button Icon"),React.createElement("div",{style:{display:"grid",gridTemplateColumns:"repeat(4, 1fr)",gap:"8px",padding:"8px",border:"1px solid #ddd",borderRadius:"4px",backgroundColor:"#fff"}},[{icon:j,name:"search",label:"Search"},{icon:D,name:"calendar",label:"Calendar"},{icon:F,name:"home",label:"Home"},{icon:A,name:"mapMarker",label:"Map Marker"},{icon:B,name:"star",label:"Star"},{icon:$,name:"pin",label:"Pin"},{icon:G,name:"pinSmall",label:"Pin Small"},{icon:L,name:"globe",label:"Globe"}].map((({icon:a,name:r,label:n})=>React.createElement(O.Button,{key:r,onClick:()=>t({buttonIcon:r}),variant:e.buttonIcon===r?"primary":"secondary",style:{width:"48px",height:"48px",padding:"8px",display:"flex",alignItems:"center",justifyContent:"center"},title:n},React.createElement(O.Icon,{icon:a,size:20}))))),React.createElement("p",{style:{fontSize:"12px",color:"#757575",margin:"8px 0 0 0",fontStyle:"italic"}},"Select an icon for the search button"))),React.createElement(O.PanelBody,{title:"Results Layout",initialOpen:!1},React.createElement(O.SelectControl,{label:"Layout Style",value:e.layoutStyle,options:[{label:"Card List",value:"cards"},{label:"Grid Tiles",value:"grid"},{label:"Compact Rows",value:"rows"}],onChange:e=>t({layoutStyle:e}),help:"Choose how property results are displayed",__next40pxDefaultSize:!0,__nextHasNoMarginBottom:!0}),React.createElement(O.ToggleControl,{label:"Show Property Images",checked:e.showPropertyImages,onChange:e=>t({showPropertyImages:e}),__nextHasNoMarginBottom:!0}),React.createElement(O.ToggleControl,{label:"Include Icons",checked:e.includeIcons,onChange:e=>t({includeIcons:e}),help:"Show icons for bed size, inclusions, etc.",__nextHasNoMarginBottom:!0})),React.createElement(O.PanelBody,{title:"Form Settings",initialOpen:!1},React.createElement(O.ToggleControl,{label:"Show Discount Field",checked:e.showDiscount,onChange:e=>t({showDiscount:e}),__nextHasNoMarginBottom:!0}),React.createElement(O.ToggleControl,{label:"Show Suburb Field",checked:e.showSuburb,onChange:e=>t({showSuburb:e}),__nextHasNoMarginBottom:!0}),React.createElement(O.ToggleControl,{label:"Show Postcode Field",checked:e.showPostcode,onChange:e=>t({showPostcode:e}),__nextHasNoMarginBottom:!0}),React.createElement(O.ToggleControl,{label:"Show Redeem Gift Certificate Section",checked:e.showRedeemGiftCertificate,onChange:e=>t({showRedeemGiftCertificate:e}),__nextHasNoMarginBottom:!0}),React.createElement(O.ToggleControl,{label:"Show Comments Field",checked:e.showComments,onChange:e=>t({showComments:e}),__nextHasNoMarginBottom:!0}))),React.createElement(S,{propertyIds:e.propertyIds,showDiscount:e.showDiscount,showSuburb:e.showSuburb,showPostcode:e.showPostcode,showRedeemGiftCertificate:e.showRedeemGiftCertificate,showComments:e.showComments,buttonColor:e.buttonColor,buttonTextColor:e.buttonTextColor,buttonIcon:e.buttonIcon,minNights:e.minNights,maxNights:e.maxNights,showPropertyImages:e.showPropertyImages,includeIcons:e.includeIcons,layoutStyle:e.layoutStyle,searchLayout:e.searchLayout}))},save:()=>null})})()})();
  • book-it-fast/tags/1.0.4/build/frontend.asset.php

    r3404456 r3404538  
    1 <?php return array('dependencies' => array('react', 'react-dom'), 'version' => '49d721204fb494e52c93');
     1<?php return array('dependencies' => array('react', 'react-dom'), 'version' => 'da68712e9dc5d69dadea');
  • book-it-fast/tags/1.0.4/build/frontend.js

    r3404456 r3404538  
    1 (()=>{var e={609:e=>{"use strict";e.exports=window.React},926:function(e,t,a){!function(e,t){"use strict";function a(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),a.push.apply(a,r)}return a}function r(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{};t%2?a(Object(r),!0).forEach((function(t){i(e,t,r[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(r)):a(Object(r)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(r,t))}))}return e}function n(e){return n="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},n(e)}function i(e,t,a){return t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}function o(e,t){if(null==e)return{};var a,r,n=function(e,t){if(null==e)return{};var a,r,n={},i=Object.keys(e);for(r=0;r<i.length;r++)a=i[r],t.indexOf(a)>=0||(n[a]=e[a]);return n}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(r=0;r<i.length;r++)a=i[r],t.indexOf(a)>=0||Object.prototype.propertyIsEnumerable.call(e,a)&&(n[a]=e[a])}return n}function c(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var a=e&&("undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"]);if(null!=a){var r,n,i=[],_n=!0,o=!1;try{for(a=a.call(e);!(_n=(r=a.next()).done)&&(i.push(r.value),!t||i.length!==t);_n=!0);}catch(e){o=!0,n=e}finally{try{_n||null==a.return||a.return()}finally{if(o)throw n}}return i}}(e,t)||function(e,t){if(e){if("string"==typeof e)return l(e,t);var a=Object.prototype.toString.call(e).slice(8,-1);return"Object"===a&&e.constructor&&(a=e.constructor.name),"Map"===a||"Set"===a?Array.from(e):"Arguments"===a||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(a)?l(e,t):void 0}}(e,t)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function l(e,t){(null==t||t>e.length)&&(t=e.length);for(var a=0,r=new Array(t);a<t;a++)r[a]=e[a];return r}function s(e){return e&&e.__esModule&&Object.prototype.hasOwnProperty.call(e,"default")?e.default:e}var u,m,p,d,f={exports:{}};f.exports=function(){if(d)return p;d=1;var e=m?u:(m=1,u="SECRET_DO_NOT_PASS_THIS_OR_YOU_WILL_BE_FIRED");function t(){}function a(){}return a.resetWarningCache=t,p=function(){function r(t,a,r,n,i,o){if(o!==e){var c=new Error("Calling PropTypes validators directly is not supported by the `prop-types` package. Use PropTypes.checkPropTypes() to call them. Read more at http://fb.me/use-check-prop-types");throw c.name="Invariant Violation",c}}function n(){return r}r.isRequired=r;var i={array:r,bool:r,func:r,number:r,object:r,string:r,symbol:r,any:r,arrayOf:n,element:r,elementType:r,instanceOf:n,node:r,objectOf:n,oneOf:n,oneOfType:n,shape:n,exact:n,checkPropTypes:a,resetWarningCache:t};return i.PropTypes=i,i}}()();var b=s(f.exports),y=function(e,a,r){var n=!!r,i=t.useRef(r);t.useEffect((function(){i.current=r}),[r]),t.useEffect((function(){if(!n||!e)return function(){};var t=function(){i.current&&i.current.apply(i,arguments)};return e.on(a,t),function(){e.off(a,t)}}),[n,a,e,i])},h=function(e){var a=t.useRef(e);return t.useEffect((function(){a.current=e}),[e]),a.current},g=function(e){return null!==e&&"object"===n(e)},E="[object Object]",v=function e(t,a){if(!g(t)||!g(a))return t===a;var r=Array.isArray(t);if(r!==Array.isArray(a))return!1;var n=Object.prototype.toString.call(t)===E;if(n!==(Object.prototype.toString.call(a)===E))return!1;if(!n&&!r)return t===a;var i=Object.keys(t),o=Object.keys(a);if(i.length!==o.length)return!1;for(var c={},l=0;l<i.length;l+=1)c[i[l]]=!0;for(var s=0;s<o.length;s+=1)c[o[s]]=!0;var u=Object.keys(c);if(u.length!==i.length)return!1;var m=t,p=a;return u.every((function(t){return e(m[t],p[t])}))},R=function(e,t,a){return g(e)?Object.keys(e).reduce((function(n,o){var c=!g(t)||!v(e[o],t[o]);return a.includes(o)?(c&&console.warn("Unsupported prop change: options.".concat(o," is not a mutable property.")),n):c?r(r({},n||{}),{},i({},o,e[o])):n}),null):null},_="Invalid prop `stripe` supplied to `Elements`. We recommend using the `loadStripe` utility from `@stripe/stripe-js`. See https://stripe.com/docs/stripe-js/react#elements-props-stripe for details.",N=function(e){var t,a=arguments.length>1&&void 0!==arguments[1]?arguments[1]:_;if(null===e||g(t=e)&&"function"==typeof t.elements&&"function"==typeof t.createToken&&"function"==typeof t.createPaymentMethod&&"function"==typeof t.confirmCardPayment)return e;throw new Error(a)},C=function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:_;if(function(e){return g(e)&&"function"==typeof e.then}(e))return{tag:"async",stripePromise:Promise.resolve(e).then((function(e){return N(e,t)}))};var a=N(e,t);return null===a?{tag:"empty"}:{tag:"sync",stripe:a}},k=function(e){e&&e._registerWrapper&&e.registerAppInfo&&(e._registerWrapper({name:"react-stripe-js",version:"3.6.0"}),e.registerAppInfo({name:"react-stripe-js",version:"3.6.0",url:"https://stripe.com/docs/stripe-js/react"}))},w=t.createContext(null);w.displayName="ElementsContext";var S=function(e,t){if(!e)throw new Error("Could not find Elements context; You need to wrap the part of your app that ".concat(t," in an <Elements> provider."));return e},x=function(e){var a=e.stripe,r=e.options,n=e.children,i=t.useMemo((function(){return C(a)}),[a]),o=c(t.useState((function(){return{stripe:"sync"===i.tag?i.stripe:null,elements:"sync"===i.tag?i.stripe.elements(r):null}})),2),l=o[0],s=o[1];t.useEffect((function(){var e=!0,t=function(e){s((function(t){return t.stripe?t:{stripe:e,elements:e.elements(r)}}))};return"async"!==i.tag||l.stripe?"sync"!==i.tag||l.stripe||t(i.stripe):i.stripePromise.then((function(a){a&&e&&t(a)})),function(){e=!1}}),[i,l,r]);var u=h(a);t.useEffect((function(){null!==u&&u!==a&&console.warn("Unsupported prop change on Elements: You cannot change the `stripe` prop after setting it.")}),[u,a]);var m=h(r);return t.useEffect((function(){if(l.elements){var e=R(r,m,["clientSecret","fonts"]);e&&l.elements.update(e)}}),[r,m,l.elements]),t.useEffect((function(){k(l.stripe)}),[l.stripe]),t.createElement(w.Provider,{value:l},n)};x.propTypes={stripe:b.any,options:b.object};var P=function(e){var a=t.useContext(w);return S(a,e)},O=function(e){return(0,e.children)(P("mounts <ElementsConsumer>"))};O.propTypes={children:b.func.isRequired};var T=["on","session"],j=t.createContext(null);j.displayName="CheckoutSdkContext";var D=function(e,t){if(!e)throw new Error("Could not find CheckoutProvider context; You need to wrap the part of your app that ".concat(t," in an <CheckoutProvider> provider."));return e},A=t.createContext(null);A.displayName="CheckoutContext";var I=function(e){var a=e.stripe,r=e.options,n=e.children,i=t.useMemo((function(){return C(a,"Invalid prop `stripe` supplied to `CheckoutProvider`. We recommend using the `loadStripe` utility from `@stripe/stripe-js`. See https://stripe.com/docs/stripe-js/react#elements-props-stripe for details.")}),[a]),l=c(t.useState(null),2),s=l[0],u=l[1],m=c(t.useState((function(){return{stripe:"sync"===i.tag?i.stripe:null,checkoutSdk:null}})),2),p=m[0],d=m[1],f=function(e,t){d((function(a){return a.stripe&&a.checkoutSdk?a:{stripe:e,checkoutSdk:t}}))},b=t.useRef(!1);t.useEffect((function(){var e=!0;return"async"!==i.tag||p.stripe?"sync"===i.tag&&i.stripe&&!b.current&&(b.current=!0,i.stripe.initCheckout(r).then((function(e){e&&(f(i.stripe,e),e.on("change",u))}))):i.stripePromise.then((function(t){t&&e&&!b.current&&(b.current=!0,t.initCheckout(r).then((function(e){e&&(f(t,e),e.on("change",u))})))})),function(){e=!1}}),[i,p,r,u]);var y=h(a);t.useEffect((function(){null!==y&&y!==a&&console.warn("Unsupported prop change on CheckoutProvider: You cannot change the `stripe` prop after setting it.")}),[y,a]);var g=h(r);t.useEffect((function(){var e,t;if(p.checkoutSdk){var a=null==g||null===(e=g.elementsOptions)||void 0===e?void 0:e.appearance,n=null==r||null===(t=r.elementsOptions)||void 0===t?void 0:t.appearance;n&&!v(n,a)&&p.checkoutSdk.changeAppearance(n)}}),[r,g,p.checkoutSdk]),t.useEffect((function(){k(p.stripe)}),[p.stripe]);var E=t.useMemo((function(){return function(e,t){if(!e)return null;e.on,e.session;var a=o(e,T);return t?Object.assign(t,a):Object.assign(e.session(),a)}(p.checkoutSdk,s)}),[p.checkoutSdk,s]);return p.checkoutSdk?t.createElement(j.Provider,{value:p},t.createElement(A.Provider,{value:E},n)):null};I.propTypes={stripe:b.any,options:b.shape({fetchClientSecret:b.func.isRequired,elementsOptions:b.object}).isRequired};var F=function(e){var a=t.useContext(j),r=t.useContext(w);if(a&&r)throw new Error("You cannot wrap the part of your app that ".concat(e," in both <CheckoutProvider> and <Elements> providers."));return a?D(a,e):S(r,e)},$=["mode"],B=function(e,a){var r,n="".concat((r=e).charAt(0).toUpperCase()+r.slice(1),"Element"),i=a?function(e){F("mounts <".concat(n,">"));var a=e.id,r=e.className;return t.createElement("div",{id:a,className:r})}:function(a){var r,i=a.id,l=a.className,s=a.options,u=void 0===s?{}:s,m=a.onBlur,p=a.onFocus,d=a.onReady,f=a.onChange,b=a.onEscape,g=a.onClick,E=a.onLoadError,v=a.onLoaderStart,_=a.onNetworksChange,N=a.onConfirm,C=a.onCancel,k=a.onShippingAddressChange,w=a.onShippingRateChange,S=F("mounts <".concat(n,">")),x="elements"in S?S.elements:null,P="checkoutSdk"in S?S.checkoutSdk:null,O=c(t.useState(null),2),T=O[0],j=O[1],D=t.useRef(null),A=t.useRef(null);y(T,"blur",m),y(T,"focus",p),y(T,"escape",b),y(T,"click",g),y(T,"loaderror",E),y(T,"loaderstart",v),y(T,"networkschange",_),y(T,"confirm",N),y(T,"cancel",C),y(T,"shippingaddresschange",k),y(T,"shippingratechange",w),y(T,"change",f),d&&(r="expressCheckout"===e?d:function(){d(T)}),y(T,"ready",r),t.useLayoutEffect((function(){if(null===D.current&&null!==A.current&&(x||P)){var t=null;if(P)switch(e){case"payment":t=P.createPaymentElement(u);break;case"address":if(!("mode"in u))throw new Error("You must supply options.mode. mode must be 'billing' or 'shipping'.");var a=u.mode,r=o(u,$);if("shipping"===a)t=P.createShippingAddressElement(r);else{if("billing"!==a)throw new Error("Invalid options.mode. mode must be 'billing' or 'shipping'.");t=P.createBillingAddressElement(r)}break;case"expressCheckout":t=P.createExpressCheckoutElement(u);break;case"currencySelector":t=P.createCurrencySelectorElement();break;default:throw new Error("Invalid Element type ".concat(n,". You must use either the <PaymentElement />, <AddressElement options={{mode: 'shipping'}} />, <AddressElement options={{mode: 'billing'}} />, or <ExpressCheckoutElement />."))}else x&&(t=x.create(e,u));D.current=t,j(t),t&&t.mount(A.current)}}),[x,P,u]);var I=h(u);return t.useEffect((function(){if(D.current){var e=R(u,I,["paymentRequest"]);e&&"update"in D.current&&D.current.update(e)}}),[u,I]),t.useLayoutEffect((function(){return function(){if(D.current&&"function"==typeof D.current.destroy)try{D.current.destroy(),D.current=null}catch(e){}}}),[]),t.createElement("div",{id:i,className:l,ref:A})};return i.propTypes={id:b.string,className:b.string,onChange:b.func,onBlur:b.func,onFocus:b.func,onReady:b.func,onEscape:b.func,onClick:b.func,onLoadError:b.func,onLoaderStart:b.func,onNetworksChange:b.func,onConfirm:b.func,onCancel:b.func,onShippingAddressChange:b.func,onShippingRateChange:b.func,options:b.object},i.displayName=n,i.__elementType=e,i},G="undefined"==typeof window,L=t.createContext(null);L.displayName="EmbeddedCheckoutProviderContext";var U=function(){var e=t.useContext(L);if(!e)throw new Error("<EmbeddedCheckout> must be used within <EmbeddedCheckoutProvider>");return e},M=G?function(e){var a=e.id,r=e.className;return U(),t.createElement("div",{id:a,className:r})}:function(e){var a=e.id,r=e.className,n=U().embeddedCheckout,i=t.useRef(!1),o=t.useRef(null);return t.useLayoutEffect((function(){return!i.current&&n&&null!==o.current&&(n.mount(o.current),i.current=!0),function(){if(i.current&&n)try{n.unmount(),i.current=!1}catch(e){}}}),[n]),t.createElement("div",{ref:o,id:a,className:r})},q=B("auBankAccount",G),Y=B("card",G),W=B("cardNumber",G),z=B("cardExpiry",G),H=B("cardCvc",G),J=B("fpxBank",G),K=B("iban",G),Q=B("idealBank",G),Z=B("p24Bank",G),V=B("epsBank",G),X=B("payment",G),ee=B("expressCheckout",G),te=B("currencySelector",G),ae=B("paymentRequestButton",G),re=B("linkAuthentication",G),ne=B("address",G),ie=B("shippingAddress",G),oe=B("paymentMethodMessaging",G),ce=B("affirmMessage",G),le=B("afterpayClearpayMessage",G);e.AddressElement=ne,e.AffirmMessageElement=ce,e.AfterpayClearpayMessageElement=le,e.AuBankAccountElement=q,e.CardCvcElement=H,e.CardElement=Y,e.CardExpiryElement=z,e.CardNumberElement=W,e.CheckoutProvider=I,e.CurrencySelectorElement=te,e.Elements=x,e.ElementsConsumer=O,e.EmbeddedCheckout=M,e.EmbeddedCheckoutProvider=function(e){var a=e.stripe,r=e.options,n=e.children,i=t.useMemo((function(){return C(a,"Invalid prop `stripe` supplied to `EmbeddedCheckoutProvider`. We recommend using the `loadStripe` utility from `@stripe/stripe-js`. See https://stripe.com/docs/stripe-js/react#elements-props-stripe for details.")}),[a]),o=t.useRef(null),l=t.useRef(null),s=c(t.useState({embeddedCheckout:null}),2),u=s[0],m=s[1];t.useEffect((function(){if(!l.current&&!o.current){var e=function(e){l.current||o.current||(l.current=e,o.current=l.current.initEmbeddedCheckout(r).then((function(e){m({embeddedCheckout:e})})))};"async"!==i.tag||l.current||!r.clientSecret&&!r.fetchClientSecret?"sync"!==i.tag||l.current||!r.clientSecret&&!r.fetchClientSecret||e(i.stripe):i.stripePromise.then((function(t){t&&e(t)}))}}),[i,r,u,l]),t.useEffect((function(){return function(){u.embeddedCheckout?(o.current=null,u.embeddedCheckout.destroy()):o.current&&o.current.then((function(){o.current=null,u.embeddedCheckout&&u.embeddedCheckout.destroy()}))}}),[u.embeddedCheckout]),t.useEffect((function(){k(l)}),[l]);var p=h(a);t.useEffect((function(){null!==p&&p!==a&&console.warn("Unsupported prop change on EmbeddedCheckoutProvider: You cannot change the `stripe` prop after setting it.")}),[p,a]);var d=h(r);return t.useEffect((function(){null!=d&&(null!=r?(void 0===r.clientSecret&&void 0===r.fetchClientSecret&&console.warn("Invalid props passed to EmbeddedCheckoutProvider: You must provide one of either `options.fetchClientSecret` or `options.clientSecret`."),null!=d.clientSecret&&r.clientSecret!==d.clientSecret&&console.warn("Unsupported prop change on EmbeddedCheckoutProvider: You cannot change the client secret after setting it. Unmount and create a new instance of EmbeddedCheckoutProvider instead."),null!=d.fetchClientSecret&&r.fetchClientSecret!==d.fetchClientSecret&&console.warn("Unsupported prop change on EmbeddedCheckoutProvider: You cannot change fetchClientSecret after setting it. Unmount and create a new instance of EmbeddedCheckoutProvider instead."),null!=d.onComplete&&r.onComplete!==d.onComplete&&console.warn("Unsupported prop change on EmbeddedCheckoutProvider: You cannot change the onComplete option after setting it."),null!=d.onShippingDetailsChange&&r.onShippingDetailsChange!==d.onShippingDetailsChange&&console.warn("Unsupported prop change on EmbeddedCheckoutProvider: You cannot change the onShippingDetailsChange option after setting it."),null!=d.onLineItemsChange&&r.onLineItemsChange!==d.onLineItemsChange&&console.warn("Unsupported prop change on EmbeddedCheckoutProvider: You cannot change the onLineItemsChange option after setting it.")):console.warn("Unsupported prop change on EmbeddedCheckoutProvider: You cannot unset options after setting them."))}),[d,r]),t.createElement(L.Provider,{value:u},n)},e.EpsBankElement=V,e.ExpressCheckoutElement=ee,e.FpxBankElement=J,e.IbanElement=K,e.IdealBankElement=Q,e.LinkAuthenticationElement=re,e.P24BankElement=Z,e.PaymentElement=X,e.PaymentMethodMessagingElement=oe,e.PaymentRequestButtonElement=ae,e.ShippingAddressElement=ie,e.useCheckout=function(){!function(e){var a=t.useContext(j);D(a,e)}("calls useCheckout()");var e=t.useContext(A);if(!e)throw new Error("Could not find Checkout Context; You need to wrap the part of your app that calls useCheckout() in an <CheckoutProvider> provider.");return e},e.useElements=function(){return P("calls useElements()").elements},e.useStripe=function(){return F("calls useStripe()").stripe}}(t,a(609))}},t={};function a(r){var n=t[r];if(void 0!==n)return n.exports;var i=t[r]={exports:{}};return e[r].call(i.exports,i,i.exports,a),i.exports}a.n=e=>{var t=e&&e.__esModule?()=>e.default:()=>e;return a.d(t,{a:t}),t},a.d=(e,t)=>{for(var r in t)a.o(t,r)&&!a.o(e,r)&&Object.defineProperty(e,r,{enumerable:!0,get:t[r]})},a.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),(()=>{"use strict";var e=a(609),t=a.n(e);const r=window.ReactDOM;var n,i=a.n(r),o="https://js.stripe.com",c="".concat(o,"/v3"),l=/^https:\/\/js\.stripe\.com\/v3\/?(\?.*)?$/,s=/^https:\/\/js\.stripe\.com\/(v3|[a-z]+)\/stripe\.js(\?.*)?$/,u="loadStripe.setLoadParameters was called but an existing Stripe.js script already exists in the document; existing script parameters will be used",m=function(e){var t=e&&!e.advancedFraudSignals?"?advancedFraudSignals=false":"",a=document.createElement("script");a.src="".concat(c).concat(t);var r=document.head||document.body;if(!r)throw new Error("Expected document.body not to be null. Stripe.js requires a <body> element.");return r.appendChild(a),a},p=null,d=null,f=null,b=!1,y=function(){return n||(n=(e=null,null!==p?p:(p=new Promise((function(t,a){if("undefined"!=typeof window&&"undefined"!=typeof document)if(window.Stripe&&e&&console.warn(u),window.Stripe)t(window.Stripe);else try{var r=function(){for(var e,t=document.querySelectorAll('script[src^="'.concat(o,'"]')),a=0;a<t.length;a++){var r=t[a];if(e=r.src,l.test(e)||s.test(e))return r}return null}();if(r&&e)console.warn(u);else if(r){if(r&&null!==f&&null!==d){var n;r.removeEventListener("load",f),r.removeEventListener("error",d),null===(n=r.parentNode)||void 0===n||n.removeChild(r),r=m(e)}}else r=m(e);f=function(e,t){return function(){window.Stripe?e(window.Stripe):t(new Error("Stripe.js not available"))}}(t,a),d=function(e){return function(t){e(new Error("Failed to load Stripe.js",{cause:t}))}}(a),r.addEventListener("load",f),r.addEventListener("error",d)}catch(e){return void a(e)}else t(null)}))).catch((function(e){return p=null,Promise.reject(e)}))).catch((function(e){return n=null,Promise.reject(e)})));var e};Promise.resolve().then((function(){return y()})).catch((function(e){b||console.warn(e)}));var h=function(){for(var e=arguments.length,t=new Array(e),a=0;a<e;a++)t[a]=arguments[a];b=!0;var r=Date.now();return y().then((function(e){return function(e,t,a){if(null===e)return null;var r=t[0].match(/^pk_test/),n=function(e){return 3===e?"v3":e}(e.version);r&&"v3"!==n&&console.warn("Stripe.js@".concat(n," was loaded on the page, but @stripe/stripe-js@").concat("5.10.0"," expected Stripe.js@").concat("v3",". This may result in unexpected behavior. For more information, see https://docs.stripe.com/sdks/stripejs-versioning"));var i=e.apply(void 0,t);return function(e,t){e&&e._registerWrapper&&e._registerWrapper({name:"stripe-js",version:"5.10.0",startTime:t})}(i,a),i}(e,t,r)}))},g=a(926);const E=e=>({AUD:"AUD$",USD:"USD$",NZD:"NZD$",GBP:"GBP£",EUR:"EUR€",CAD:"CAD$",SGD:"SGD$"}[e]||e+" "),v=(()=>{const e=window.wpApiSettings?.restUrl;return e?e.replace(/\/$/,""):document.querySelector('link[rel="https://api.w.org/"]').href.replace(/\/$/,"")})(),R=(h("your-publishable-key-here"),e=>new URLSearchParams(window.location.search).get(e)),_=({property:e,isSelected:t,onToggle:a,nights:r,checkInDate:n,showPropertyImages:i,includeIcons:o})=>{e.availability?.total_cost||e.availability?.dates?.reduce(((e,t)=>e+(t.rate||0)),0);const c=e.availability?.available;return React.createElement("div",{className:`bif-tile ${t?"bif-selected":""} ${c?"":"is-unavailable"}`},i&&e.property_image&&React.createElement("div",{className:"bif-tile__hero"},React.createElement("img",{loading:"lazy",src:e.property_image,alt:e.property_name}),React.createElement("span",{className:"bif-chip "+(c?"":"unavailable")},((e,t,a)=>{if(e)return"Available";switch(t){case"Booked Out":return"Booked Out";case"No Tariff Set":return"No Rates Set";case"Min Nights":return`Minimum ${a||2} Nights`;default:return"Unavailable"}})(c,e.availability?.availability_reason,e.availability?.min_nights))),React.createElement("div",{className:"bif-tile__content"},React.createElement("h3",{className:"bif-tile__title"},e.property_name),o&&e.property_features&&React.createElement("ul",{className:"bif-amenities bif-amenities--slim"},1===e.property_features.wifi&&React.createElement("li",null,React.createElement("span",null,"📶 WiFi")),e.property_features.queen_beds>0&&React.createElement("li",null,React.createElement("span",null,"🛏️ ",e.property_features.queen_beds," Queen")),e.property_features.king_beds>0&&React.createElement("li",null,React.createElement("span",null,"🛏️ ",e.property_features.king_beds," King")),e.property_features.double_beds>0&&React.createElement("li",null,React.createElement("span",null,"🛏️ ",e.property_features.double_beds," Double")),e.property_features.single_beds>0&&React.createElement("li",null,React.createElement("span",null,"🛏️ ",e.property_features.single_beds," Single")),e.property_features.bunk_beds>0&&React.createElement("li",null,React.createElement("span",null,"🛏️ ",e.property_features.bunk_beds," Bunk")),e.property_features.sofa_beds>0&&React.createElement("li",null,React.createElement("span",null,"🛋️ ",e.property_features.sofa_beds," Sofa bed")),e.property_features.bedrooms&&React.createElement("li",null,React.createElement("span",null,"🏠 ",e.property_features.bedrooms," Bedroom",e.property_features.bedrooms>1?"s":"")),e.property_features.living_areas&&React.createElement("li",null,React.createElement("span",null,"🛋️ ",e.property_features.living_areas," Living Area",e.property_features.living_areas>1?"s":""))),e.availability?.dates&&React.createElement("div",{className:"bif-tile__rates"},e.availability.dates.map(((e,t)=>React.createElement("div",{key:t,className:"bif-pill "+(e.availability?"ok":"na")},React.createElement("span",{className:"bif-pill__date"},e.date_formatted),React.createElement("strong",{className:"bif-pill__amt"},e.availability?`$${e.rate}`:"Booked Out"===e.availability_reason?"Booked":"No Tariff Set"===e.availability_reason?"No Rate":"N/A"))))),React.createElement("div",{className:"bif-tile__footer"},c?React.createElement("button",{onClick:a,className:"bif-btn "+(t?"bif-btn-selected":"bif-btn-select")},t?"✓ Selected":"Select"):React.createElement("button",{disabled:!0,className:"bif-btn bif-btn-disabled"},"Unavailable")),t&&e.optional_extras?.length>0&&React.createElement("div",{className:"bif-optional-extras"},React.createElement("h4",{className:"bif-daily-breakdown-title"},"Optional Extras"),React.createElement("div",{className:"bif-extras-list"},e.optional_extras.map((t=>React.createElement("div",{key:t.id,className:"bif-extra-item"},React.createElement("div",{className:"bif-extra-info"},React.createElement("input",{type:"checkbox",checked:e.selectedExtras?.[t.id]||!1,onChange:()=>e.onToggleExtra?.(e.id,t.id)}),React.createElement("label",null,t.description)),React.createElement("div",{className:"bif-extra-price"},"$",t.amount))))))))},N=({property:e,isSelected:t,onToggle:a,nights:r,checkInDate:n,showPropertyImages:i,includeIcons:o})=>{e.availability?.total_cost||e.availability?.dates?.reduce(((e,t)=>e+(t.rate||0)),0);const c=e.availability?.available;return React.createElement("div",{className:`bif-row ${t?"bif-selected":""} ${c?"":"is-unavailable"} ${i&&e.property_image?"":"no-image"}`},i&&e.property_image&&React.createElement("div",{className:"bif-row__thumb"},React.createElement("img",{loading:"lazy",src:e.property_image,alt:e.property_name})),React.createElement("div",{className:"bif-row__main"},React.createElement("div",{className:"bif-row__top"},React.createElement("h3",{className:"bif-row__title"},e.property_name),React.createElement("span",{className:"bif-dot "+(l=c,l?"ok":"na"),"aria-hidden":"true"})),o&&e.property_features&&React.createElement("ul",{className:"bif-amenities bif-amenities--inline"},1===e.property_features.wifi&&React.createElement("li",null,React.createElement("span",null,"📶 WiFi")),e.property_features.queen_beds>0&&React.createElement("li",null,React.createElement("span",null,"🛏️ ",e.property_features.queen_beds," Queen")),e.property_features.king_beds>0&&React.createElement("li",null,React.createElement("span",null,"🛏️ ",e.property_features.king_beds," King")),e.property_features.double_beds>0&&React.createElement("li",null,React.createElement("span",null,"🛏️ ",e.property_features.double_beds," Double")),e.property_features.single_beds>0&&React.createElement("li",null,React.createElement("span",null,"🛏️ ",e.property_features.single_beds," Single")),e.property_features.bunk_beds>0&&React.createElement("li",null,React.createElement("span",null,"🛏️ ",e.property_features.bunk_beds," Bunk")),e.property_features.sofa_beds>0&&React.createElement("li",null,React.createElement("span",null,"🛋️ ",e.property_features.sofa_beds," Sofa bed")),e.property_features.bedrooms&&React.createElement("li",null,React.createElement("span",null,"🏠 ",e.property_features.bedrooms," Bedroom",e.property_features.bedrooms>1?"s":"")),e.property_features.living_areas&&React.createElement("li",null,React.createElement("span",null,"🛋️ ",e.property_features.living_areas," Living Area",e.property_features.living_areas>1?"s":"")))),e.availability?.dates&&React.createElement("div",{className:"bif-row__rates"},e.availability.dates.map(((e,t)=>React.createElement("div",{key:t,className:"bif-rmini "+(e.availability?"ok":"na")},React.createElement("div",{className:"bif-rmini__date"},e.date_formatted),React.createElement("div",{className:"bif-rmini__amt"},e.availability?`$${e.rate}`:"Booked Out"===e.availability_reason?"Booked":"No Tariff Set"===e.availability_reason?"No Rate":"N/A"))))),React.createElement("div",{className:"bif-row__cta"},c?React.createElement("button",{onClick:a,className:"bif-btn "+(t?"bif-btn-selected":"bif-btn-select")},t?"✓ Selected":"Select"):React.createElement("button",{disabled:!0,className:"bif-btn bif-btn-disabled"},"Unavailable")),t&&e.optional_extras?.length>0&&React.createElement("div",{className:"bif-optional-extras",style:{gridColumn:"1 / -1",marginTop:"1rem"}},React.createElement("h4",{className:"bif-daily-breakdown-title"},"Optional Extras"),React.createElement("div",{className:"bif-extras-list"},e.optional_extras.map((t=>React.createElement("div",{key:t.id,className:"bif-extra-item"},React.createElement("div",{className:"bif-extra-info"},React.createElement("input",{type:"checkbox",checked:e.selectedExtras?.[t.id]||!1,onChange:()=>e.onToggleExtra?.(e.id,t.id)}),React.createElement("label",null,t.description)),React.createElement("div",{className:"bif-extra-price"},"$",t.amount)))))));var l},C=({property:e,isSelected:t,onToggle:a,nights:r,checkInDate:n,showPropertyImages:i,includeIcons:o})=>{const c=e.availability?.total_cost||e.availability?.dates?.reduce(((e,t)=>e+(t.rate||0)),0)||0,l=e.availability?.available,s=(e,t,a)=>{if(e)return"Available";switch(t){case"Booked Out":return"Booked Out";case"No Tariff Set":return"No Rates Set";case"Min Nights":return`Minimum ${a||2} Nights`;default:return"Unavailable"}};return React.createElement("div",{className:`bif-property-card ${t?"bif-selected":""} ${l?"":"bif-unavailable"}`},React.createElement("div",{className:"bif-property-header"},i&&e.property_image&&React.createElement("div",{className:"bif-property-image"},React.createElement("img",{src:e.property_image,alt:e.property_name})),React.createElement("div",{className:"bif-property-info"},React.createElement("h3",{className:"bif-property-name"},e.property_name),e.property_description&&React.createElement("p",{className:"bif-property-description"},e.property_description),o&&e.property_features&&React.createElement("div",{className:"bif-property-icons"},1===e.property_features.wifi&&React.createElement("span",{className:"bif-property-icon",title:"WiFi Available"},"📶 WiFi"),e.property_features.queen_beds>0&&React.createElement("span",{className:"bif-property-icon",title:`${e.property_features.queen_beds} Queen bed${e.property_features.queen_beds>1?"s":""}`},"🛏️ ",e.property_features.queen_beds," Queen"),e.property_features.king_beds>0&&React.createElement("span",{className:"bif-property-icon",title:`${e.property_features.king_beds} King bed${e.property_features.king_beds>1?"s":""}`},"🛏️ ",e.property_features.king_beds," King"),e.property_features.double_beds>0&&React.createElement("span",{className:"bif-property-icon",title:`${e.property_features.double_beds} Double bed${e.property_features.double_beds>1?"s":""}`},"🛏️ ",e.property_features.double_beds," Double"),e.property_features.single_beds>0&&React.createElement("span",{className:"bif-property-icon",title:`${e.property_features.single_beds} Single bed${e.property_features.single_beds>1?"s":""}`},"🛏️ ",e.property_features.single_beds," Single"),e.property_features.bunk_beds>0&&React.createElement("span",{className:"bif-property-icon",title:`${e.property_features.bunk_beds} Bunk bed${e.property_features.bunk_beds>1?"s":""}`},"🛏️ ",e.property_features.bunk_beds," Bunk"),e.property_features.sofa_beds>0&&React.createElement("span",{className:"bif-property-icon",title:`${e.property_features.sofa_beds} Sofa bed${e.property_features.sofa_beds>1?"s":""}`},"🛋️ ",e.property_features.sofa_beds," Sofa bed"),e.property_features.bedrooms&&React.createElement("span",{className:"bif-property-icon",title:`${e.property_features.bedrooms} bedroom${e.property_features.bedrooms>1?"s":""}`},"🏠 ",e.property_features.bedrooms," Bedroom",e.property_features.bedrooms>1?"s":""),e.property_features.living_areas&&React.createElement("span",{className:"bif-property-icon",title:`${e.property_features.living_areas} living area${e.property_features.living_areas>1?"s":""}`},"🛋️ ",e.property_features.living_areas," Living Area",e.property_features.living_areas>1?"s":""))),React.createElement("div",{className:"bif-property-status-container"},React.createElement("span",{className:`bif-property-status ${((e,t)=>{if(e)return"bif-status-available";switch(t){case"Booked Out":return"bif-status-booked";case"No Tariff Set":return"bif-status-no-rate";case"Min Nights":return"bif-status-min-nights";default:return"bif-status-unavailable"}})(l,e.availability?.availability_reason)}`},s(l,e.availability?.availability_reason,e.availability?.min_nights)),l?React.createElement("button",{onClick:a,className:`bif-btn ${t?"bif-btn-selected":"bif-btn-select"} bif-header-btn`,style:{marginLeft:"0.75rem"}},t?"✓ Selected":"Select Property"):React.createElement("button",{disabled:!0,className:"bif-btn bif-btn-disabled bif-header-btn",style:{marginLeft:"0.75rem"}},s(l,e.availability?.availability_reason,e.availability?.min_nights)))),e.availability?.dates&&React.createElement("div",{className:"bif-availability-details"},React.createElement("h4",{className:"bif-daily-breakdown-title"},"Daily Rate Breakdown"),React.createElement("div",{className:"bif-daily-rates"},e.availability.dates.map(((e,t)=>React.createElement("div",{key:t,className:"bif-daily-rate "+(e.availability?"bif-available":"bif-unavailable")},React.createElement("div",{className:"bif-date"},e.date_formatted),React.createElement("div",{className:"bif-rate"},e.availability?`$${e.rate}`:"Booked Out"===e.availability_reason?"Booked":"No Tariff Set"===e.availability_reason?"No Rate":"N/A"))))),React.createElement("div",{className:"bif-rate-summary"},React.createElement("div",{className:"bif-summary-row"},React.createElement("span",{className:"bif-total"},"Total: $",c)))),t&&e.optional_extras?.length>0&&React.createElement("div",{className:"bif-optional-extras"},React.createElement("h4",{className:"bif-daily-breakdown-title"},"Optional Extras"),React.createElement("div",{className:"bif-extras-list"},e.optional_extras.map((t=>React.createElement("div",{key:t.id,className:"bif-extra-item"},React.createElement("div",{className:"bif-extra-info"},React.createElement("input",{type:"checkbox",checked:e.selectedExtras?.[t.id]||!1,onChange:()=>e.onToggleExtra?.(e.id,t.id)}),React.createElement("label",null,t.description)),React.createElement("div",{className:"bif-extra-price"},"$",t.amount)))))))},k=({checkInDate:e,nights:t,onDateChange:a,onNightsChange:r,onCheckAvailability:n,isLoading:i,minNights:o,maxNights:c,buttonIcon:l="search",searchLayout:s="default"})=>{const u=(new Date).toISOString().split("T")[0],m={search:"🔍",calendar:"📅",home:"🏠",mapMarker:"📍",star:"⭐",pin:"📌",pinSmall:"📍",globe:"🌍"}[l]||"🔍";return"horizontal"===s?React.createElement("div",{className:"bif-search-box-horizontal"},React.createElement("div",{className:"bif-search-field",onClick:()=>document.querySelector('.bif-search-box-horizontal input[type="date"]')?.showPicker?.()},React.createElement("span",{className:"bif-search-icon"},React.createElement("svg",{width:"20",height:"20",viewBox:"0 0 20 20",fill:"none",xmlns:"http://www.w3.org/2000/svg"},React.createElement("rect",{x:"3",y:"4",width:"14",height:"13",rx:"1",stroke:"currentColor",strokeWidth:"1.5"}),React.createElement("line",{x1:"3",y1:"8",x2:"17",y2:"8",stroke:"currentColor",strokeWidth:"1.5"}),React.createElement("line",{x1:"7",y1:"2",x2:"7",y2:"5",stroke:"currentColor",strokeWidth:"1.5",strokeLinecap:"round"}),React.createElement("line",{x1:"13",y1:"2",x2:"13",y2:"5",stroke:"currentColor",strokeWidth:"1.5",strokeLinecap:"round"}))),React.createElement("div",{className:"bif-search-field-content"},React.createElement("label",null,"Check-In"),React.createElement("input",{type:"date",value:e,onChange:e=>a(e.target.value),min:u}))),React.createElement("div",{className:"bif-search-divider"}),React.createElement("div",{className:"bif-search-field"},React.createElement("span",{className:"bif-search-icon"},React.createElement("svg",{width:"20",height:"20",viewBox:"0 0 20 20",fill:"currentColor",xmlns:"http://www.w3.org/2000/svg"},React.createElement("path",{d:"M17 10.5c0 3.59-2.69 6.5-6 6.5s-6-2.91-6-6.5S7.69 4 11 4c.35 0 .69.03 1.02.09A5.5 5.5 0 0 0 17 10.5z"}))),React.createElement("div",{className:"bif-search-field-content"},React.createElement("label",null,"Nights"),React.createElement("select",{value:t,onChange:e=>r(parseInt(e.target.value))},[...Array(c-o+1).keys()].map((e=>{const t=o+e;return React.createElement("option",{key:t,value:t},t)}))))),React.createElement("button",{onClick:n,disabled:!e||i,className:"bif-search-button"},i?"Checking...":"Search")):React.createElement("div",{className:"bif-date-selector"},React.createElement("h2",{className:"bif-section-title"},"Select Your Dates"),React.createElement("div",{className:"bif-date-form"},React.createElement("div",{className:"bif-form-field"},React.createElement("label",null,"Check-in Date"),React.createElement("input",{type:"date",value:e,onChange:e=>a(e.target.value),min:u,className:"bif-date-input"})),React.createElement("div",{className:"bif-form-field"},React.createElement("label",null,"Number of Nights"),React.createElement("select",{value:t,onChange:e=>r(parseInt(e.target.value)),className:"bif-nights-select"},[...Array(c-o+1).keys()].map((e=>{const t=o+e;return React.createElement("option",{key:t,value:t},t," ",1===t?"night":"nights")})))),React.createElement("div",{className:"bif-form-field"},React.createElement("button",{onClick:n,disabled:!e||i,className:"bif-btn bif-btn-primary bif-check-availability bif-has-icon-preview"},i?React.createElement(React.Fragment,null,React.createElement("div",{className:"bif-spinner"}),React.createElement("span",null,"Checking...")):React.createElement(React.Fragment,null,React.createElement("span",{className:"bif-icon-preview"},m),React.createElement("span",null,"Check Availability"))))))},w=({selectedProperties:e,selectedExtras:t,nights:a,total:r,discountCode:n,onDiscountCodeChange:i,onApplyDiscount:o,checkInDate:c,summary:l,showDiscount:s=!1,showRedeemGiftCertificate:u=!1,giftCertificate:m,onGiftCertificateChange:p,showGiftCertificateForm:d,onTriggerShowGiftCertificate:f,onApplyGiftCertificate:b,gcResult:y,gcLoading:h=!1})=>{Object.values(t).flat().reduce(((e,t)=>e+(t.amount||0)),0);const g=l&&parseFloat(l.order_discount_code_total||0)>0;return e&&0!==e.length?React.createElement("div",{className:"bif-booking-summary"},React.createElement("h3",{className:"bif-section-title"},"Booking Summary"),React.createElement("div",{className:"bif-summary-content"},e.map((e=>{const a=e.sub_total||e.availability?.total_cost||e.availability?.dates?.reduce(((e,t)=>e+(t.rate||0)),0)||0,r=e.mandatory_extras_total||e.mandatory_extras?.reduce(((e,t)=>e+parseFloat(t.amount||0)),0)||0,n=e.optional_extras_total||0,i=parseFloat(a)+parseFloat(r)+parseFloat(n);return React.createElement("div",{key:e.id,className:"bif-property-summary"},React.createElement("h5",{className:"bif-property-summary-name"},e.property_name),React.createElement("div",{className:"bif-property-total"},React.createElement("div",{className:"bif-total-row"},React.createElement("span",null,"Property Subtotal"),React.createElement("span",null,"$",parseFloat(a).toFixed(2)))),e.mandatory_extras&&e.mandatory_extras.length>0&&React.createElement("div",{className:"bif-mandatory-extras-summary"},React.createElement("h4",{className:"bif-daily-breakdown-title"},"Mandatory Extras"),e.mandatory_extras.map((e=>React.createElement("div",{key:e.id,className:"bif-total-row",style:{fontSize:"0.875rem",color:"#dc2626"}},React.createElement("span",null,e.description),React.createElement("span",null,"$",parseFloat(e.amount).toFixed(2)))))),e.optional_extras&&e.optional_extras.filter((e=>e.selected)).length>0&&React.createElement("div",{className:"bif-optional-extras-summary"},React.createElement("h4",{className:"bif-daily-breakdown-title"},"Optional Extras"),e.optional_extras.filter((e=>e.selected)).map((e=>React.createElement("div",{key:e.id,className:"bif-total-row",style:{fontSize:"0.875rem",color:"#92400e"}},React.createElement("span",null,e.description),React.createElement("span",null,"$",parseFloat(e.amount).toFixed(2)))))),React.createElement("div",{className:"bif-property-total"},React.createElement("div",{className:"bif-total-row bif-subtotal"},React.createElement("span",null,"Property Total"),React.createElement("span",null,"$",parseFloat(i).toFixed(2)))),!e.optional_extras&&t[e.id]&&t[e.id].length>0&&React.createElement("div",{className:"bif-optional-extras-summary"},React.createElement("h4",{className:"bif-daily-breakdown-title"},"Selected Optional Extras"),t[e.id].map((e=>React.createElement("div",{key:e.id,className:"bif-total-row",style:{fontSize:"0.875rem",color:"#92400e"}},React.createElement("span",null,e.description),React.createElement("span",null,"$",parseFloat(e.amount).toFixed(2)))))))})),s&&React.createElement("div",{className:"bif-summary-section"},React.createElement("div",{className:"bif-discount-form"},React.createElement("input",{type:"text",placeholder:"Enter discount code",value:n,onChange:e=>i(e.target.value),className:"bif-discount-input"}),React.createElement("button",{onClick:()=>{n.trim()&&o(n)},className:"bif-btn "+(n.trim()?"bif-btn-primary":"bif-btn-secondary")},"Apply")),g&&React.createElement("div",{className:"bif-discount-applied"},"Discount code applied")),u&&l&&React.createElement("div",{className:"bif-summary-section"},React.createElement("div",{className:"bif-gift-certificate-section"},d?React.createElement("div",{className:"bif-gift-certificate-form"},React.createElement("div",{className:"bif-form-row"},React.createElement("div",{className:"bif-form-field"},React.createElement("label",null,"Certificate Number:"),React.createElement("input",{type:"text",value:m.number,onChange:e=>p({...m,number:e.target.value}),className:"bif-form-control",placeholder:"Enter certificate number",disabled:h})),React.createElement("div",{className:"bif-form-field"},React.createElement("label",null,"Pin:"),React.createElement("input",{type:"number",value:m.pin,onChange:e=>p({...m,pin:e.target.value}),className:"bif-form-control",placeholder:"Enter pin",disabled:h}))),React.createElement("button",{className:"bif-btn bif-btn-secondary",onClick:b,disabled:h},h?"Applying...":"Apply")):React.createElement("button",{className:"bif-btn bif-btn-secondary",onClick:f},"Apply Gift Certificate"),y&&y.valid&&React.createElement("div",{className:"bif-gift-certificate-success"},React.createElement("p",null,"✅ Successfully Applied Gift Certificate"),React.createElement("p",null,y.result),parseFloat(y.total)-parseFloat(y.gc_amount_applied)==0?React.createElement("p",null,React.createElement("strong",null,"🎉 Your gift certificate covers the full amount! No additional payment required.")):React.createElement(React.Fragment,null,React.createElement("p",null,"Remaining balance to pay: ",React.createElement("strong",null,"$",(parseFloat(y.total)-parseFloat(y.gc_amount_applied)).toFixed(2))),React.createElement("p",{style:{fontSize:"0.875rem",color:"#6b7280"}},"*Credit card surcharge will be added at payment")),React.createElement("p",null,"Gift Certificate balance after order: ",React.createElement("strong",null,"$",parseFloat(y.gc_balance_after_order).toFixed(2)))))),React.createElement("div",{className:"bif-grand-total"},y&&y.valid&&React.createElement("div",{className:"bif-total-row"},React.createElement("span",null,"Order Total"),React.createElement("span",null,"$",parseFloat(y.total||l.order_grand_total).toFixed(2))),y&&y.valid&&React.createElement("div",{className:"bif-total-row",style:{color:"#059669"}},React.createElement("span",null,"Gift Certificate Applied"),React.createElement("span",null,"-$",parseFloat(y.gc_amount_applied).toFixed(2))),React.createElement("div",{className:"bif-total-main"},React.createElement("span",null,y&&y.valid&&parseFloat(y.total)-parseFloat(y.gc_amount_applied)==0?"Total Paid by Gift Certificate":y&&y.valid?"Balance Due":"Total Cost"),React.createElement("span",{className:"bif-total-amount"},"$",y&&y.valid?(parseFloat(y.total)-parseFloat(y.gc_amount_applied)).toFixed(2):parseFloat(r).toFixed(2))),y&&y.valid&&parseFloat(y.total)-parseFloat(y.gc_amount_applied)>0&&l&&l.order_has_surcharge&&React.createElement("div",{className:"bif-surcharge-note",style:{fontSize:"0.875rem",color:"#6b7280",marginTop:"0.5rem"}},"*Credit card surcharge will be added at payment"),l&&parseFloat(l.order_discount_code_total||0)>0&&React.createElement("div",{className:"bif-discount-text"},"Includes discount of $",parseFloat(l.order_discount_code_total||0).toFixed(2))))):null},S=({isOpen:t,onClose:a,title:r,content:n})=>((0,e.useEffect)((()=>(document.body.style.overflow=t?"hidden":"",()=>{document.body.style.overflow=""})),[t]),(0,e.useEffect)((()=>{const e=e=>{"Escape"===e.key&&t&&a()};return t&&document.addEventListener("keydown",e),()=>{document.removeEventListener("keydown",e)}}),[t,a]),t?React.createElement("div",{className:"bif-modal-overlay",onClick:a},React.createElement("div",{className:"bif-modal",onClick:e=>e.stopPropagation()},React.createElement("div",{className:"bif-modal-header"},React.createElement("h3",{className:"bif-modal-title"},r),React.createElement("button",{className:"bif-modal-close",onClick:a,"aria-label":"Close modal"},"×")),React.createElement("div",{className:"bif-modal-content",dangerouslySetInnerHTML:{__html:n}}))):null),x=({userDetails:e,onUpdateDetails:t,formErrors:a,showSuburb:r=!0,showPostcode:n=!0,showComments:i=!1})=>React.createElement("div",{className:"bif-customer-details"},React.createElement("h2",{className:"bif-section-title"},"Your Details"),React.createElement("div",{className:"bif-customer-form"},React.createElement("div",{className:"bif-form-row"},React.createElement("div",{className:"bif-form-field"},React.createElement("label",null,"First Name *"),React.createElement("input",{type:"text",value:e.firstName,onChange:e=>t("firstName",e.target.value),placeholder:"Enter your first name",className:a.firstName?"bif-error":""}),a.firstName&&React.createElement("div",{className:"bif-field-error"},a.firstName)),React.createElement("div",{className:"bif-form-field"},React.createElement("label",null,"Last Name *"),React.createElement("input",{type:"text",value:e.lastName,onChange:e=>t("lastName",e.target.value),placeholder:"Enter your last name",className:a.lastName?"bif-error":""}),a.lastName&&React.createElement("div",{className:"bif-field-error"},a.lastName))),React.createElement("div",{className:"bif-form-row"},React.createElement("div",{className:"bif-form-field"},React.createElement("label",null,"Email *"),React.createElement("input",{type:"email",value:e.email,onChange:e=>t("email",e.target.value),placeholder:"Enter your email address",className:a.email?"bif-error":""}),a.email&&React.createElement("div",{className:"bif-field-error"},a.email)),React.createElement("div",{className:"bif-form-field"},React.createElement("label",null,"Phone *"),React.createElement("input",{type:"tel",value:e.phone,onChange:e=>t("phone",e.target.value),placeholder:"Enter your phone number",className:a.phone?"bif-error":""}),a.phone&&React.createElement("div",{className:"bif-field-error"},a.phone))),(n||r)&&React.createElement("div",{className:"bif-form-row"},n&&React.createElement("div",{className:"bif-form-field"},React.createElement("label",null,"Postcode"),React.createElement("input",{type:"text",value:e.postcode,onChange:e=>t("postcode",e.target.value),placeholder:"Enter your postcode"})),r&&React.createElement("div",{className:"bif-form-field"},React.createElement("label",null,"Suburb"),React.createElement("input",{type:"text",value:e.suburb,onChange:e=>t("suburb",e.target.value),placeholder:"Enter your suburb"}))),i&&React.createElement("div",{className:"bif-form-row bif-full-width"},React.createElement("div",{className:"bif-form-field"},React.createElement("label",null,"Comments"),React.createElement("textarea",{value:e.comments,onChange:e=>t("comments",e.target.value),rows:4,placeholder:"Any special requests or comments..."}))))),P=({summary:t,propertyIds:a,userDetails:r,paymentType:n,giftCertificate:i})=>{const o=(0,g.useStripe)(),c=(0,g.useElements)(),[l,s]=(0,e.useState)(!1),[u,m]=(0,e.useState)(""),[p,d]=(0,e.useState)(!1),[f,b]=(0,e.useState)(""),y=async e=>{e.preventDefault(),s(!0),m("");try{let e={amount:"deposit"===n?t.order_deposit_amount:t.order_payable_now,currency:t?.order_currency||"AUD",summary:t,propertyIds:"string"==typeof a?a.split(",").map((e=>parseInt(e.trim()))):a,userDetails:r,paymentType:n};if("gift"===n&&i)e.giftCertificateApplied=!0,e.giftCertificate=i,e.amount=0;else{if(!o||!c)return void console.error("Stripe.js has not loaded yet.");const t=c.getElement(g.CardElement),{paymentMethod:a,error:r}=await o.createPaymentMethod({type:"card",card:t});if(r)return console.error(r),m(r.message),void s(!1);e.stripePaymentMethodId=a.id,i&&i.valid&&(e.giftCertificateApplied=!0,e.giftCertificate=i)}const l=await fetch(`${v}/bookitfast/v1/process-payment`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(e)}),u=await l.json();if(!u.success)throw new Error(u.message||"Payment failed.");console.log("Payment successful:",u),b(u.data.charge),d(!0)}catch(e){console.error("Payment error:",e),m(e.message)}finally{s(!1)}};return React.createElement("div",{className:"bif-payment-container"},React.createElement("h3",null,"gift"===n?"🎁 Gift Certificate Payment":"💳 Payment Details"),u&&React.createElement("div",{className:"bif-error-message"},u),p?React.createElement("div",{className:"bif-success-message"},React.createElement("p",null,React.createElement("strong",null,"✅ Payment Successful!")),f&&React.createElement("p",null,React.createElement("a",{href:f,target:"_blank",rel:"noopener noreferrer"},"📄 Click here to view your receipt"))):"gift"===n?React.createElement("div",{className:"bif-gift-certificate-payment-form"},React.createElement("div",{className:"bif-gift-certificate-summary"},React.createElement("p",null,"🎁 ",React.createElement("strong",null,"Paying with Gift Certificate")),React.createElement("p",null,"Amount: ",React.createElement("strong",null,"$",parseFloat(i.gc_amount_applied||0).toFixed(2))),React.createElement("p",null,"No credit card required - your gift certificate will be charged automatically.")),React.createElement("button",{onClick:y,disabled:l,className:"bif-btn bif-btn-primary bif-btn-large"},l?"Processing...":"Complete Booking")):React.createElement("form",{onSubmit:y,className:"bif-stripe-form"},React.createElement("div",{className:"bif-card-element-container"},React.createElement(g.CardElement,{options:{hidePostalCode:!0,style:{base:{fontSize:"16px",color:"#424770","::placeholder":{color:"#aab7c4"}},invalid:{color:"#9e2146"}}}})),React.createElement("button",{type:"submit",disabled:!o||l,className:"bif-btn bif-btn-primary bif-btn-large"},l?"Processing...":"Pay Now")))},O=({propertyIds:t="",showDiscount:a=!1,showSuburb:r=!0,showPostcode:n=!0,showRedeemGiftCertificate:i=!1,showComments:o=!1,buttonColor:c="#0073aa",buttonTextColor:l="#ffffff",minNights:s=1,maxNights:u=14,showPropertyImages:m=!1,includeIcons:p=!1,layoutStyle:d="cards",buttonIcon:f="search",searchLayout:b="default"})=>{const y=R("nights"),O=y&&!isNaN(y)?Math.max(parseInt(y,10),s):s,T=R("start"),j=R("discount"),D=T?(e=>{const t=e.split("-");if(3===t.length){const[e,a,r]=t.map(Number);if(!isNaN(e)&&!isNaN(a)&&!isNaN(r)){const t=new Date(r,a-1,e);return t.setHours(12,0,0,0),t.toISOString().split("T")[0]}}return null})(T):"",A="string"==typeof t?t:"",[I,F]=(0,e.useState)({date:D,nights:O}),[$,B]=(0,e.useState)(null),[G,L]=(0,e.useState)({}),[U,M]=(0,e.useState)(null),[q,Y]=(0,e.useState)(null),[W,z]=(0,e.useState)(!1),[H,J]=(0,e.useState)(""),[K,Q]=(0,e.useState)({firstName:"",lastName:"",phone:"",email:"",postcode:"",suburb:"",comments:""}),[Z,V]=(0,e.useState)(!1),[X,ee]=(0,e.useState)(!1),[te,ae]=(0,e.useState)(j),[re,ne]=(0,e.useState)(null),[ie,oe]=(0,e.useState)(!1),[ce,le]=(0,e.useState)(null),[se,ue]=(0,e.useState)({}),[me,pe]=(0,e.useState)({number:"",pin:""}),[de,fe]=(0,e.useState)(!1),[be,ye]=(0,e.useState)(null),[he,ge]=(0,e.useState)(!1),[Ee,ve]=(0,e.useState)({}),[Re,_e]=(0,e.useState)(!1),[Ne,Ce]=(0,e.useState)({isOpen:!1,title:"",content:""});(0,e.useEffect)((()=>{D&&O&&(console.log("Auto-checking availability with:",D,O),ke(D,O))}),[D,O]);const ke=async(e=I.date,t=I.nights)=>{if(!e||!A)return void console.warn("fetchAvailability skipped - Missing startDate or propertyIds");const a=I.date,r=A.split(",").filter((e=>""!==e.trim()));z(!0),J(""),_e(!1);try{const e=await fetch(`${v}/bookitfast/v1/availability`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({ids:r,start:a,nights:t})}),n=await e.json();B(n),_e(!0);const i=Object.keys(n).reduce(((e,t)=>(e[t]=!1,e)),{});L(i)}catch(e){console.error(e),J("Failed to fetch availability. Please try again.")}finally{z(!1)}},we=(e,t)=>{ve((a=>{const r=a[e]||{},n={...a,[e]:{...r,[t]:!r[t]}};return Se(G,te,n,0),n}))},Se=async(e,t=null,a=Ee,r=0)=>{const n=I.date,i=I.nights,o=new Date(new Date(n).getTime()+864e5*i).toISOString().split("T")[0];z(!0),J("");try{const r=await fetch(`${v}/bookitfast/v1/availability/summary`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({selected:e,selected_optional_extras:a,start:n,end:o,discount_code:t||null})});if(!r.ok)throw new Error(`HTTP error! status: ${r.status}`);const i=await r.json();Y(i),i.stripe_publishable_key&&M(h(i.stripe_publishable_key))}catch(n){console.error("Error fetching summary:",n),r<3?(console.log(`Retrying... Attempt ${r+1}`),await Se(e,t,a,r+1)):J("Failed to fetch summary. Please try again.")}finally{z(!1)}},xe=e=>{(()=>{const e={};return K.firstName.trim()||(e.firstName="First name is required"),K.lastName.trim()||(e.lastName="Last name is required"),K.email.trim()||(e.email="Email is required"),K.phone.trim()||(e.phone="Phone is required"),Z||(e.agreeToTerms="You must agree to the terms and conditions"),X||(e.consentToDataSharing="You must consent to data sharing with Book It Fast service"),ue(e),0===Object.keys(e).length})()&&(le(e),oe(!0))},Pe=$?Object.entries($).filter((([e])=>G[e])).map((([e,t])=>({id:e,...t,...q?.property_summaries?.[e]||{},selectedExtras:Ee[e],onToggleExtra:we}))):[];return React.createElement("div",{className:"bif-booking-container",style:{"--bif-button-color":c,"--bif-button-color-hover":`${c}dd`,"--bif-button-color-active":`${c}bb`,"--bif-button-text-color":l}},React.createElement("div",{className:"bif-booking-steps"},React.createElement(k,{checkInDate:I.date,nights:I.nights,onDateChange:e=>F((t=>({...t,date:e}))),onNightsChange:e=>F((t=>({...t,nights:e}))),onCheckAvailability:ke,isLoading:W,minNights:s,maxNights:u,buttonIcon:f,searchLayout:b}),H&&React.createElement("div",{className:"bif-error-message"},H),Re&&$&&React.createElement("div",{className:"bif-property-list"},React.createElement("h2",{className:"bif-section-title"},"Available Properties"),React.createElement("div",{className:`bif-properties bif-properties--${d}`},Object.entries($).map((([e,t])=>{const a={key:e,property:{id:e,...t,selectedExtras:Ee[e],onToggleExtra:we},isSelected:G[e],onToggle:()=>(async e=>{const t={...G,[e]:!G[e]};L(t),Object.values(t).includes(!0)?await Se(t,te):Y(null)})(e),nights:I.nights,checkInDate:I.date,showPropertyImages:m,includeIcons:p};switch(d){case"grid":return React.createElement(_,a);case"rows":return React.createElement(N,a);default:return React.createElement(C,a)}})))),q&&Pe.length>0&&React.createElement(w,{selectedProperties:Pe,selectedExtras:Ee,nights:I.nights,total:(q.order_payable_now||0)-(q.order_surcharge||0),discountCode:te,onDiscountCodeChange:ae,onApplyDiscount:e=>{Object.keys(G).some((e=>G[e]))&&Se(G,e)},checkInDate:I.date,summary:q,showDiscount:a,showRedeemGiftCertificate:i,giftCertificate:me,onGiftCertificateChange:pe,showGiftCertificateForm:de,onTriggerShowGiftCertificate:()=>{fe(!0)},onApplyGiftCertificate:async e=>{if(e.preventDefault(),console.log("Gift Certificate: Apply button clicked"),console.log("Gift Certificate Data:",me),console.log("Current Summary:",q),he)return void console.log("Gift Certificate: Already processing, ignoring click");if(!q)return void console.error("Gift Certificate: No summary available");if(!me.number||!me.pin)return console.error("Gift Certificate: Missing number or pin"),void alert("Please enter both certificate number and pin");ge(!0),console.log("Gift Certificate: Setting loading state to true");let t={...q};if(q.order_weekly_discount>0){console.log("Gift Certificate: Weekly discount detected, adjusting summary for gift certificate calculation"),console.log("Gift Certificate: Original order_grand_total:",q.order_grand_total),console.log("Gift Certificate: Order weekly discount:",q.order_weekly_discount),console.log("Gift Certificate: Order surcharge:",q.order_surcharge);const e=parseFloat(q.order_sub_total)+parseFloat(q.order_mandatory_extras_total);console.log("Gift Certificate: Total before weekly discount (excluding surcharge):",e),t={...q,order_grand_total:e.toString(),order_total_before_surcharge:e,order_payable_now:e.toString(),order_surcharge:0,order_has_surcharge:!1},console.log("Gift Certificate: Adjusted summary for gift certificate:",t)}const a={certificate:me,summary:t};console.log("Gift Certificate: Sending request with data:",a);try{const e=await fetch(`${v}/bookitfast/v1/apply-gift-certificate`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(a)});if(console.log("Gift Certificate: Response status:",e.status),!e.ok)throw new Error(`HTTP error! status: ${e.status}`);const t=await e.json();console.log("Gift Certificate: Response data:",t),t.valid?(ye(t),t.summary&&(Y(t.summary),console.log("Gift Certificate: Updated summary:",t.summary)),console.log("Gift Certificate: Application successful"),console.log("Gift Certificate: Order payable now:",t.order_payable_now)):(console.error("Gift Certificate: API returned error:",t),alert(t.message||"Failed to apply gift certificate"))}catch(e){console.error("Gift Certificate: Error applying certificate:",e),alert("Error applying gift certificate. Please try again.")}finally{ge(!1),console.log("Gift Certificate: Setting loading state to false")}},gcResult:be,gcLoading:he}),q&&Pe.length>0&&React.createElement(x,{userDetails:K,onUpdateDetails:(e,t)=>{Q((a=>({...a,[e]:t}))),se[e]&&ue((t=>({...t,[e]:null})))},formErrors:se,showSuburb:r,showPostcode:n,showComments:o}),q&&Pe.length>0&&React.createElement("div",{className:"bif-terms-payment"},React.createElement("div",{className:"bif-terms-checkbox"},React.createElement("input",{type:"checkbox",id:"agreeToTerms",checked:Z,onChange:()=>V(!Z)}),React.createElement("label",{htmlFor:"agreeToTerms"},"I have read and agree to the"," ",q.order_booking_conditions?.map(((e,t)=>React.createElement("span",{key:t},"local"===e.type?React.createElement("a",{href:"#",onClick:t=>{t.preventDefault(),Ce({isOpen:!0,title:e.title,content:e.content})},style:{textDecoration:"underline",cursor:"pointer"}},e.title):React.createElement("a",{href:e.url,target:"_blank",rel:"noopener noreferrer"},e.title),t<q.order_booking_conditions.length-2?", ":"",t===q.order_booking_conditions.length-2?" and ":"")))),se.agreeToTerms&&React.createElement("div",{className:"bif-field-error"},se.agreeToTerms)),React.createElement("div",{className:"bif-privacy-consent"},React.createElement("input",{type:"checkbox",id:"consentToDataSharing",checked:X,onChange:()=>ee(!X)}),React.createElement("label",{htmlFor:"consentToDataSharing"},"I consent to my personal information being transmitted to and processed by Book It Fast (",React.createElement("a",{href:"https://bookitfast.app/privacy-policy",target:"_blank",rel:"noopener noreferrer"},"Privacy Policy"),") for booking and payment processing purposes."),se.consentToDataSharing&&React.createElement("div",{className:"bif-field-error"},se.consentToDataSharing)),!ie&&React.createElement("div",{className:"bif-payment-options"},Object.keys(se).length>0&&React.createElement("div",{className:"bif-validation-error"},"Please complete all required fields before proceeding with payment."),be&&be.valid&&parseFloat(be.total)-parseFloat(be.gc_amount_applied)==0?React.createElement("div",{className:"bif-gift-certificate-payment"},React.createElement("div",{className:"bif-gift-certificate-full-coverage"},React.createElement("p",null,"🎉 ",React.createElement("strong",null,"Your gift certificate covers the full booking amount!")),React.createElement("p",null,"No additional payment required.")),React.createElement("button",{className:"bif-btn bif-btn-primary bif-btn-large",onClick:()=>xe("gift")},"🎁 Complete Booking with Gift Certificate")):React.createElement(React.Fragment,null,q.order_surcharge>0&&parseFloat(q.order_payable_now||0)>0&&React.createElement("div",{className:"bif-surcharge-info"},React.createElement("p",null,"Please note a credit card surcharge applies of ",q.order_deposit_surcharge>0&&` $${q.order_deposit_surcharge} for deposit or `,"$",q.order_surcharge," for the full payment.")),q.order_deposit_amount>0?React.createElement("div",{className:"bif-payment-buttons"},React.createElement("button",{className:"bif-btn bif-btn-primary",onClick:()=>xe("deposit")},"💳 Pay Deposit (",E(q?.order_currency||"AUD"),q.order_deposit_amount,")"),React.createElement("button",{className:"bif-btn bif-btn-primary",onClick:()=>xe("full")},"💳 Pay In Full (",E(q?.order_currency||"AUD"),be&&be.valid?parseFloat(be.order_payable_now).toFixed(2):q.order_payable_now,")")):React.createElement("button",{className:"bif-btn bif-btn-primary bif-btn-large",onClick:()=>xe("full")},"💳 Complete Booking - ",E(q?.order_currency||"AUD"),be&&be.valid?parseFloat(be.order_payable_now).toFixed(2):q.order_payable_now)))),q&&ie&&React.createElement("div",{className:"bif-payment-form-container"},"gift"===ce?React.createElement(P,{summary:q,propertyIds:A.split(",").map((e=>parseInt(e.trim()))),userDetails:K,paymentType:ce,giftCertificate:be}):U&&React.createElement(g.Elements,{stripe:U},React.createElement(P,{summary:q,propertyIds:A.split(",").map((e=>parseInt(e.trim()))),userDetails:K,paymentType:ce,giftCertificate:be})))),React.createElement(S,{isOpen:Ne.isOpen,onClose:()=>Ce({isOpen:!1,title:"",content:""}),title:Ne.title,content:Ne.content}))};document.addEventListener("DOMContentLoaded",(()=>{const e=document.getElementById("bif-book-it-fast-multi-embed");if(e){const a=e.dataset.propertyIds||"",r="true"===e.dataset.showDiscount,n="true"===e.dataset.showSuburb,o="true"===e.dataset.showPostcode,c="true"===e.dataset.showRedeemGiftCertificate,l="true"===e.dataset.showComments,s=e.dataset.buttonColor||"#0073aa",u=e.dataset.buttonTextColor||"#ffffff",m=parseInt(e.dataset.minNights)||1,p=parseInt(e.dataset.maxNights)||14,d="true"===e.dataset.showPropertyImages,f="true"===e.dataset.includeIcons,b=e.dataset.layoutStyle||"cards",y=e.dataset.buttonIcon||"search",h=e.dataset.searchLayout||"default";i().render(t().createElement(O,{propertyIds:a,showDiscount:r,showSuburb:n,showPostcode:o,showRedeemGiftCertificate:c,showComments:l,buttonColor:s,buttonTextColor:u,minNights:m,maxNights:p,showPropertyImages:d,includeIcons:f,layoutStyle:b,buttonIcon:y,searchLayout:h}),e)}}))})()})();
     1(()=>{var e={609:e=>{"use strict";e.exports=window.React},926:function(e,t,a){!function(e,t){"use strict";function a(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),a.push.apply(a,r)}return a}function r(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{};t%2?a(Object(r),!0).forEach((function(t){i(e,t,r[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(r)):a(Object(r)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(r,t))}))}return e}function n(e){return n="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},n(e)}function i(e,t,a){return t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}function o(e,t){if(null==e)return{};var a,r,n=function(e,t){if(null==e)return{};var a,r,n={},i=Object.keys(e);for(r=0;r<i.length;r++)a=i[r],t.indexOf(a)>=0||(n[a]=e[a]);return n}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(r=0;r<i.length;r++)a=i[r],t.indexOf(a)>=0||Object.prototype.propertyIsEnumerable.call(e,a)&&(n[a]=e[a])}return n}function c(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var a=e&&("undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"]);if(null!=a){var r,n,i=[],_n=!0,o=!1;try{for(a=a.call(e);!(_n=(r=a.next()).done)&&(i.push(r.value),!t||i.length!==t);_n=!0);}catch(e){o=!0,n=e}finally{try{_n||null==a.return||a.return()}finally{if(o)throw n}}return i}}(e,t)||function(e,t){if(e){if("string"==typeof e)return l(e,t);var a=Object.prototype.toString.call(e).slice(8,-1);return"Object"===a&&e.constructor&&(a=e.constructor.name),"Map"===a||"Set"===a?Array.from(e):"Arguments"===a||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(a)?l(e,t):void 0}}(e,t)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function l(e,t){(null==t||t>e.length)&&(t=e.length);for(var a=0,r=new Array(t);a<t;a++)r[a]=e[a];return r}function s(e){return e&&e.__esModule&&Object.prototype.hasOwnProperty.call(e,"default")?e.default:e}var u,m,p,d,f={exports:{}};f.exports=function(){if(d)return p;d=1;var e=m?u:(m=1,u="SECRET_DO_NOT_PASS_THIS_OR_YOU_WILL_BE_FIRED");function t(){}function a(){}return a.resetWarningCache=t,p=function(){function r(t,a,r,n,i,o){if(o!==e){var c=new Error("Calling PropTypes validators directly is not supported by the `prop-types` package. Use PropTypes.checkPropTypes() to call them. Read more at http://fb.me/use-check-prop-types");throw c.name="Invariant Violation",c}}function n(){return r}r.isRequired=r;var i={array:r,bool:r,func:r,number:r,object:r,string:r,symbol:r,any:r,arrayOf:n,element:r,elementType:r,instanceOf:n,node:r,objectOf:n,oneOf:n,oneOfType:n,shape:n,exact:n,checkPropTypes:a,resetWarningCache:t};return i.PropTypes=i,i}}()();var b=s(f.exports),y=function(e,a,r){var n=!!r,i=t.useRef(r);t.useEffect((function(){i.current=r}),[r]),t.useEffect((function(){if(!n||!e)return function(){};var t=function(){i.current&&i.current.apply(i,arguments)};return e.on(a,t),function(){e.off(a,t)}}),[n,a,e,i])},h=function(e){var a=t.useRef(e);return t.useEffect((function(){a.current=e}),[e]),a.current},g=function(e){return null!==e&&"object"===n(e)},E="[object Object]",v=function e(t,a){if(!g(t)||!g(a))return t===a;var r=Array.isArray(t);if(r!==Array.isArray(a))return!1;var n=Object.prototype.toString.call(t)===E;if(n!==(Object.prototype.toString.call(a)===E))return!1;if(!n&&!r)return t===a;var i=Object.keys(t),o=Object.keys(a);if(i.length!==o.length)return!1;for(var c={},l=0;l<i.length;l+=1)c[i[l]]=!0;for(var s=0;s<o.length;s+=1)c[o[s]]=!0;var u=Object.keys(c);if(u.length!==i.length)return!1;var m=t,p=a;return u.every((function(t){return e(m[t],p[t])}))},R=function(e,t,a){return g(e)?Object.keys(e).reduce((function(n,o){var c=!g(t)||!v(e[o],t[o]);return a.includes(o)?(c&&console.warn("Unsupported prop change: options.".concat(o," is not a mutable property.")),n):c?r(r({},n||{}),{},i({},o,e[o])):n}),null):null},_="Invalid prop `stripe` supplied to `Elements`. We recommend using the `loadStripe` utility from `@stripe/stripe-js`. See https://stripe.com/docs/stripe-js/react#elements-props-stripe for details.",N=function(e){var t,a=arguments.length>1&&void 0!==arguments[1]?arguments[1]:_;if(null===e||g(t=e)&&"function"==typeof t.elements&&"function"==typeof t.createToken&&"function"==typeof t.createPaymentMethod&&"function"==typeof t.confirmCardPayment)return e;throw new Error(a)},C=function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:_;if(function(e){return g(e)&&"function"==typeof e.then}(e))return{tag:"async",stripePromise:Promise.resolve(e).then((function(e){return N(e,t)}))};var a=N(e,t);return null===a?{tag:"empty"}:{tag:"sync",stripe:a}},k=function(e){e&&e._registerWrapper&&e.registerAppInfo&&(e._registerWrapper({name:"react-stripe-js",version:"3.6.0"}),e.registerAppInfo({name:"react-stripe-js",version:"3.6.0",url:"https://stripe.com/docs/stripe-js/react"}))},w=t.createContext(null);w.displayName="ElementsContext";var S=function(e,t){if(!e)throw new Error("Could not find Elements context; You need to wrap the part of your app that ".concat(t," in an <Elements> provider."));return e},x=function(e){var a=e.stripe,r=e.options,n=e.children,i=t.useMemo((function(){return C(a)}),[a]),o=c(t.useState((function(){return{stripe:"sync"===i.tag?i.stripe:null,elements:"sync"===i.tag?i.stripe.elements(r):null}})),2),l=o[0],s=o[1];t.useEffect((function(){var e=!0,t=function(e){s((function(t){return t.stripe?t:{stripe:e,elements:e.elements(r)}}))};return"async"!==i.tag||l.stripe?"sync"!==i.tag||l.stripe||t(i.stripe):i.stripePromise.then((function(a){a&&e&&t(a)})),function(){e=!1}}),[i,l,r]);var u=h(a);t.useEffect((function(){null!==u&&u!==a&&console.warn("Unsupported prop change on Elements: You cannot change the `stripe` prop after setting it.")}),[u,a]);var m=h(r);return t.useEffect((function(){if(l.elements){var e=R(r,m,["clientSecret","fonts"]);e&&l.elements.update(e)}}),[r,m,l.elements]),t.useEffect((function(){k(l.stripe)}),[l.stripe]),t.createElement(w.Provider,{value:l},n)};x.propTypes={stripe:b.any,options:b.object};var P=function(e){var a=t.useContext(w);return S(a,e)},O=function(e){return(0,e.children)(P("mounts <ElementsConsumer>"))};O.propTypes={children:b.func.isRequired};var T=["on","session"],j=t.createContext(null);j.displayName="CheckoutSdkContext";var D=function(e,t){if(!e)throw new Error("Could not find CheckoutProvider context; You need to wrap the part of your app that ".concat(t," in an <CheckoutProvider> provider."));return e},A=t.createContext(null);A.displayName="CheckoutContext";var I=function(e){var a=e.stripe,r=e.options,n=e.children,i=t.useMemo((function(){return C(a,"Invalid prop `stripe` supplied to `CheckoutProvider`. We recommend using the `loadStripe` utility from `@stripe/stripe-js`. See https://stripe.com/docs/stripe-js/react#elements-props-stripe for details.")}),[a]),l=c(t.useState(null),2),s=l[0],u=l[1],m=c(t.useState((function(){return{stripe:"sync"===i.tag?i.stripe:null,checkoutSdk:null}})),2),p=m[0],d=m[1],f=function(e,t){d((function(a){return a.stripe&&a.checkoutSdk?a:{stripe:e,checkoutSdk:t}}))},b=t.useRef(!1);t.useEffect((function(){var e=!0;return"async"!==i.tag||p.stripe?"sync"===i.tag&&i.stripe&&!b.current&&(b.current=!0,i.stripe.initCheckout(r).then((function(e){e&&(f(i.stripe,e),e.on("change",u))}))):i.stripePromise.then((function(t){t&&e&&!b.current&&(b.current=!0,t.initCheckout(r).then((function(e){e&&(f(t,e),e.on("change",u))})))})),function(){e=!1}}),[i,p,r,u]);var y=h(a);t.useEffect((function(){null!==y&&y!==a&&console.warn("Unsupported prop change on CheckoutProvider: You cannot change the `stripe` prop after setting it.")}),[y,a]);var g=h(r);t.useEffect((function(){var e,t;if(p.checkoutSdk){var a=null==g||null===(e=g.elementsOptions)||void 0===e?void 0:e.appearance,n=null==r||null===(t=r.elementsOptions)||void 0===t?void 0:t.appearance;n&&!v(n,a)&&p.checkoutSdk.changeAppearance(n)}}),[r,g,p.checkoutSdk]),t.useEffect((function(){k(p.stripe)}),[p.stripe]);var E=t.useMemo((function(){return function(e,t){if(!e)return null;e.on,e.session;var a=o(e,T);return t?Object.assign(t,a):Object.assign(e.session(),a)}(p.checkoutSdk,s)}),[p.checkoutSdk,s]);return p.checkoutSdk?t.createElement(j.Provider,{value:p},t.createElement(A.Provider,{value:E},n)):null};I.propTypes={stripe:b.any,options:b.shape({fetchClientSecret:b.func.isRequired,elementsOptions:b.object}).isRequired};var F=function(e){var a=t.useContext(j),r=t.useContext(w);if(a&&r)throw new Error("You cannot wrap the part of your app that ".concat(e," in both <CheckoutProvider> and <Elements> providers."));return a?D(a,e):S(r,e)},$=["mode"],B=function(e,a){var r,n="".concat((r=e).charAt(0).toUpperCase()+r.slice(1),"Element"),i=a?function(e){F("mounts <".concat(n,">"));var a=e.id,r=e.className;return t.createElement("div",{id:a,className:r})}:function(a){var r,i=a.id,l=a.className,s=a.options,u=void 0===s?{}:s,m=a.onBlur,p=a.onFocus,d=a.onReady,f=a.onChange,b=a.onEscape,g=a.onClick,E=a.onLoadError,v=a.onLoaderStart,_=a.onNetworksChange,N=a.onConfirm,C=a.onCancel,k=a.onShippingAddressChange,w=a.onShippingRateChange,S=F("mounts <".concat(n,">")),x="elements"in S?S.elements:null,P="checkoutSdk"in S?S.checkoutSdk:null,O=c(t.useState(null),2),T=O[0],j=O[1],D=t.useRef(null),A=t.useRef(null);y(T,"blur",m),y(T,"focus",p),y(T,"escape",b),y(T,"click",g),y(T,"loaderror",E),y(T,"loaderstart",v),y(T,"networkschange",_),y(T,"confirm",N),y(T,"cancel",C),y(T,"shippingaddresschange",k),y(T,"shippingratechange",w),y(T,"change",f),d&&(r="expressCheckout"===e?d:function(){d(T)}),y(T,"ready",r),t.useLayoutEffect((function(){if(null===D.current&&null!==A.current&&(x||P)){var t=null;if(P)switch(e){case"payment":t=P.createPaymentElement(u);break;case"address":if(!("mode"in u))throw new Error("You must supply options.mode. mode must be 'billing' or 'shipping'.");var a=u.mode,r=o(u,$);if("shipping"===a)t=P.createShippingAddressElement(r);else{if("billing"!==a)throw new Error("Invalid options.mode. mode must be 'billing' or 'shipping'.");t=P.createBillingAddressElement(r)}break;case"expressCheckout":t=P.createExpressCheckoutElement(u);break;case"currencySelector":t=P.createCurrencySelectorElement();break;default:throw new Error("Invalid Element type ".concat(n,". You must use either the <PaymentElement />, <AddressElement options={{mode: 'shipping'}} />, <AddressElement options={{mode: 'billing'}} />, or <ExpressCheckoutElement />."))}else x&&(t=x.create(e,u));D.current=t,j(t),t&&t.mount(A.current)}}),[x,P,u]);var I=h(u);return t.useEffect((function(){if(D.current){var e=R(u,I,["paymentRequest"]);e&&"update"in D.current&&D.current.update(e)}}),[u,I]),t.useLayoutEffect((function(){return function(){if(D.current&&"function"==typeof D.current.destroy)try{D.current.destroy(),D.current=null}catch(e){}}}),[]),t.createElement("div",{id:i,className:l,ref:A})};return i.propTypes={id:b.string,className:b.string,onChange:b.func,onBlur:b.func,onFocus:b.func,onReady:b.func,onEscape:b.func,onClick:b.func,onLoadError:b.func,onLoaderStart:b.func,onNetworksChange:b.func,onConfirm:b.func,onCancel:b.func,onShippingAddressChange:b.func,onShippingRateChange:b.func,options:b.object},i.displayName=n,i.__elementType=e,i},G="undefined"==typeof window,L=t.createContext(null);L.displayName="EmbeddedCheckoutProviderContext";var U=function(){var e=t.useContext(L);if(!e)throw new Error("<EmbeddedCheckout> must be used within <EmbeddedCheckoutProvider>");return e},M=G?function(e){var a=e.id,r=e.className;return U(),t.createElement("div",{id:a,className:r})}:function(e){var a=e.id,r=e.className,n=U().embeddedCheckout,i=t.useRef(!1),o=t.useRef(null);return t.useLayoutEffect((function(){return!i.current&&n&&null!==o.current&&(n.mount(o.current),i.current=!0),function(){if(i.current&&n)try{n.unmount(),i.current=!1}catch(e){}}}),[n]),t.createElement("div",{ref:o,id:a,className:r})},q=B("auBankAccount",G),Y=B("card",G),W=B("cardNumber",G),z=B("cardExpiry",G),H=B("cardCvc",G),J=B("fpxBank",G),K=B("iban",G),Q=B("idealBank",G),Z=B("p24Bank",G),V=B("epsBank",G),X=B("payment",G),ee=B("expressCheckout",G),te=B("currencySelector",G),ae=B("paymentRequestButton",G),re=B("linkAuthentication",G),ne=B("address",G),ie=B("shippingAddress",G),oe=B("paymentMethodMessaging",G),ce=B("affirmMessage",G),le=B("afterpayClearpayMessage",G);e.AddressElement=ne,e.AffirmMessageElement=ce,e.AfterpayClearpayMessageElement=le,e.AuBankAccountElement=q,e.CardCvcElement=H,e.CardElement=Y,e.CardExpiryElement=z,e.CardNumberElement=W,e.CheckoutProvider=I,e.CurrencySelectorElement=te,e.Elements=x,e.ElementsConsumer=O,e.EmbeddedCheckout=M,e.EmbeddedCheckoutProvider=function(e){var a=e.stripe,r=e.options,n=e.children,i=t.useMemo((function(){return C(a,"Invalid prop `stripe` supplied to `EmbeddedCheckoutProvider`. We recommend using the `loadStripe` utility from `@stripe/stripe-js`. See https://stripe.com/docs/stripe-js/react#elements-props-stripe for details.")}),[a]),o=t.useRef(null),l=t.useRef(null),s=c(t.useState({embeddedCheckout:null}),2),u=s[0],m=s[1];t.useEffect((function(){if(!l.current&&!o.current){var e=function(e){l.current||o.current||(l.current=e,o.current=l.current.initEmbeddedCheckout(r).then((function(e){m({embeddedCheckout:e})})))};"async"!==i.tag||l.current||!r.clientSecret&&!r.fetchClientSecret?"sync"!==i.tag||l.current||!r.clientSecret&&!r.fetchClientSecret||e(i.stripe):i.stripePromise.then((function(t){t&&e(t)}))}}),[i,r,u,l]),t.useEffect((function(){return function(){u.embeddedCheckout?(o.current=null,u.embeddedCheckout.destroy()):o.current&&o.current.then((function(){o.current=null,u.embeddedCheckout&&u.embeddedCheckout.destroy()}))}}),[u.embeddedCheckout]),t.useEffect((function(){k(l)}),[l]);var p=h(a);t.useEffect((function(){null!==p&&p!==a&&console.warn("Unsupported prop change on EmbeddedCheckoutProvider: You cannot change the `stripe` prop after setting it.")}),[p,a]);var d=h(r);return t.useEffect((function(){null!=d&&(null!=r?(void 0===r.clientSecret&&void 0===r.fetchClientSecret&&console.warn("Invalid props passed to EmbeddedCheckoutProvider: You must provide one of either `options.fetchClientSecret` or `options.clientSecret`."),null!=d.clientSecret&&r.clientSecret!==d.clientSecret&&console.warn("Unsupported prop change on EmbeddedCheckoutProvider: You cannot change the client secret after setting it. Unmount and create a new instance of EmbeddedCheckoutProvider instead."),null!=d.fetchClientSecret&&r.fetchClientSecret!==d.fetchClientSecret&&console.warn("Unsupported prop change on EmbeddedCheckoutProvider: You cannot change fetchClientSecret after setting it. Unmount and create a new instance of EmbeddedCheckoutProvider instead."),null!=d.onComplete&&r.onComplete!==d.onComplete&&console.warn("Unsupported prop change on EmbeddedCheckoutProvider: You cannot change the onComplete option after setting it."),null!=d.onShippingDetailsChange&&r.onShippingDetailsChange!==d.onShippingDetailsChange&&console.warn("Unsupported prop change on EmbeddedCheckoutProvider: You cannot change the onShippingDetailsChange option after setting it."),null!=d.onLineItemsChange&&r.onLineItemsChange!==d.onLineItemsChange&&console.warn("Unsupported prop change on EmbeddedCheckoutProvider: You cannot change the onLineItemsChange option after setting it.")):console.warn("Unsupported prop change on EmbeddedCheckoutProvider: You cannot unset options after setting them."))}),[d,r]),t.createElement(L.Provider,{value:u},n)},e.EpsBankElement=V,e.ExpressCheckoutElement=ee,e.FpxBankElement=J,e.IbanElement=K,e.IdealBankElement=Q,e.LinkAuthenticationElement=re,e.P24BankElement=Z,e.PaymentElement=X,e.PaymentMethodMessagingElement=oe,e.PaymentRequestButtonElement=ae,e.ShippingAddressElement=ie,e.useCheckout=function(){!function(e){var a=t.useContext(j);D(a,e)}("calls useCheckout()");var e=t.useContext(A);if(!e)throw new Error("Could not find Checkout Context; You need to wrap the part of your app that calls useCheckout() in an <CheckoutProvider> provider.");return e},e.useElements=function(){return P("calls useElements()").elements},e.useStripe=function(){return F("calls useStripe()").stripe}}(t,a(609))}},t={};function a(r){var n=t[r];if(void 0!==n)return n.exports;var i=t[r]={exports:{}};return e[r].call(i.exports,i,i.exports,a),i.exports}a.n=e=>{var t=e&&e.__esModule?()=>e.default:()=>e;return a.d(t,{a:t}),t},a.d=(e,t)=>{for(var r in t)a.o(t,r)&&!a.o(e,r)&&Object.defineProperty(e,r,{enumerable:!0,get:t[r]})},a.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),(()=>{"use strict";var e=a(609),t=a.n(e);const r=window.ReactDOM;var n,i=a.n(r),o="https://js.stripe.com",c="".concat(o,"/v3"),l=/^https:\/\/js\.stripe\.com\/v3\/?(\?.*)?$/,s=/^https:\/\/js\.stripe\.com\/(v3|[a-z]+)\/stripe\.js(\?.*)?$/,u="loadStripe.setLoadParameters was called but an existing Stripe.js script already exists in the document; existing script parameters will be used",m=function(e){var t=e&&!e.advancedFraudSignals?"?advancedFraudSignals=false":"",a=document.createElement("script");a.src="".concat(c).concat(t);var r=document.head||document.body;if(!r)throw new Error("Expected document.body not to be null. Stripe.js requires a <body> element.");return r.appendChild(a),a},p=null,d=null,f=null,b=!1,y=function(){return n||(n=(e=null,null!==p?p:(p=new Promise((function(t,a){if("undefined"!=typeof window&&"undefined"!=typeof document)if(window.Stripe&&e&&console.warn(u),window.Stripe)t(window.Stripe);else try{var r=function(){for(var e,t=document.querySelectorAll('script[src^="'.concat(o,'"]')),a=0;a<t.length;a++){var r=t[a];if(e=r.src,l.test(e)||s.test(e))return r}return null}();if(r&&e)console.warn(u);else if(r){if(r&&null!==f&&null!==d){var n;r.removeEventListener("load",f),r.removeEventListener("error",d),null===(n=r.parentNode)||void 0===n||n.removeChild(r),r=m(e)}}else r=m(e);f=function(e,t){return function(){window.Stripe?e(window.Stripe):t(new Error("Stripe.js not available"))}}(t,a),d=function(e){return function(t){e(new Error("Failed to load Stripe.js",{cause:t}))}}(a),r.addEventListener("load",f),r.addEventListener("error",d)}catch(e){return void a(e)}else t(null)}))).catch((function(e){return p=null,Promise.reject(e)}))).catch((function(e){return n=null,Promise.reject(e)})));var e};Promise.resolve().then((function(){return y()})).catch((function(e){b||console.warn(e)}));var h=function(){for(var e=arguments.length,t=new Array(e),a=0;a<e;a++)t[a]=arguments[a];b=!0;var r=Date.now();return y().then((function(e){return function(e,t,a){if(null===e)return null;var r=t[0].match(/^pk_test/),n=function(e){return 3===e?"v3":e}(e.version);r&&"v3"!==n&&console.warn("Stripe.js@".concat(n," was loaded on the page, but @stripe/stripe-js@").concat("5.10.0"," expected Stripe.js@").concat("v3",". This may result in unexpected behavior. For more information, see https://docs.stripe.com/sdks/stripejs-versioning"));var i=e.apply(void 0,t);return function(e,t){e&&e._registerWrapper&&e._registerWrapper({name:"stripe-js",version:"5.10.0",startTime:t})}(i,a),i}(e,t,r)}))},g=a(926);const E=e=>({AUD:"AUD$",USD:"USD$",NZD:"NZD$",GBP:"GBP£",EUR:"EUR€",CAD:"CAD$",SGD:"SGD$"}[e]||e+" "),v=(()=>{const e=window.wpApiSettings?.restUrl;return e?e.replace(/\/$/,""):document.querySelector('link[rel="https://api.w.org/"]').href.replace(/\/$/,"")})(),R=(h("your-publishable-key-here"),e=>new URLSearchParams(window.location.search).get(e)),_=({property:e,isSelected:t,onToggle:a,nights:r,checkInDate:n,showPropertyImages:i,includeIcons:o})=>{e.availability?.total_cost||e.availability?.dates?.reduce(((e,t)=>e+(t.rate||0)),0);const c=e.availability?.available;return React.createElement("div",{className:`bif-tile ${t?"bif-selected":""} ${c?"":"is-unavailable"}`},i&&e.property_image&&React.createElement("div",{className:"bif-tile__hero"},React.createElement("img",{loading:"lazy",src:e.property_image,alt:e.property_name}),React.createElement("span",{className:"bif-chip "+(c?"":"unavailable")},((e,t,a)=>{if(e)return"Available";switch(t){case"Booked Out":return"Booked Out";case"No Tariff Set":return"No Rates Set";case"Min Nights":return`Minimum ${a||2} Nights`;default:return"Unavailable"}})(c,e.availability?.availability_reason,e.availability?.min_nights))),React.createElement("div",{className:"bif-tile__content"},React.createElement("h3",{className:"bif-tile__title"},e.property_name),o&&e.property_features&&React.createElement("ul",{className:"bif-amenities bif-amenities--slim"},1===e.property_features.wifi&&React.createElement("li",null,React.createElement("span",null,"📶 WiFi")),e.property_features.queen_beds>0&&React.createElement("li",null,React.createElement("span",null,"🛏️ ",e.property_features.queen_beds," Queen")),e.property_features.king_beds>0&&React.createElement("li",null,React.createElement("span",null,"🛏️ ",e.property_features.king_beds," King")),e.property_features.double_beds>0&&React.createElement("li",null,React.createElement("span",null,"🛏️ ",e.property_features.double_beds," Double")),e.property_features.single_beds>0&&React.createElement("li",null,React.createElement("span",null,"🛏️ ",e.property_features.single_beds," Single")),e.property_features.bunk_beds>0&&React.createElement("li",null,React.createElement("span",null,"🛏️ ",e.property_features.bunk_beds," Bunk")),e.property_features.sofa_beds>0&&React.createElement("li",null,React.createElement("span",null,"🛋️ ",e.property_features.sofa_beds," Sofa bed")),e.property_features.bedrooms&&React.createElement("li",null,React.createElement("span",null,"🏠 ",e.property_features.bedrooms," Bedroom",e.property_features.bedrooms>1?"s":"")),e.property_features.living_areas&&React.createElement("li",null,React.createElement("span",null,"🛋️ ",e.property_features.living_areas," Living Area",e.property_features.living_areas>1?"s":""))),e.availability?.dates&&React.createElement("div",{className:"bif-tile__rates"},e.availability.dates.map(((e,t)=>React.createElement("div",{key:t,className:"bif-pill "+(e.availability?"ok":"na")},React.createElement("span",{className:"bif-pill__date"},e.date_formatted),React.createElement("strong",{className:"bif-pill__amt"},e.availability?`$${e.rate}`:"Booked Out"===e.availability_reason?"Booked":"No Tariff Set"===e.availability_reason?"No Rate":"N/A"))))),React.createElement("div",{className:"bif-tile__footer"},c?React.createElement("button",{onClick:a,className:"bif-btn "+(t?"bif-btn-selected":"bif-btn-select")},t?"✓ Selected":"Select"):React.createElement("button",{disabled:!0,className:"bif-btn bif-btn-disabled"},"Unavailable")),t&&e.optional_extras?.length>0&&React.createElement("div",{className:"bif-optional-extras"},React.createElement("h4",{className:"bif-daily-breakdown-title"},"Optional Extras"),React.createElement("div",{className:"bif-extras-list"},e.optional_extras.map((t=>React.createElement("div",{key:t.id,className:"bif-extra-item"},React.createElement("div",{className:"bif-extra-info"},React.createElement("input",{type:"checkbox",checked:e.selectedExtras?.[t.id]||!1,onChange:()=>e.onToggleExtra?.(e.id,t.id)}),React.createElement("label",null,t.description)),React.createElement("div",{className:"bif-extra-price"},"$",t.amount))))))))},N=({property:e,isSelected:t,onToggle:a,nights:r,checkInDate:n,showPropertyImages:i,includeIcons:o})=>{e.availability?.total_cost||e.availability?.dates?.reduce(((e,t)=>e+(t.rate||0)),0);const c=e.availability?.available;return React.createElement("div",{className:`bif-row ${t?"bif-selected":""} ${c?"":"is-unavailable"} ${i&&e.property_image?"":"no-image"}`},i&&e.property_image&&React.createElement("div",{className:"bif-row__thumb"},React.createElement("img",{loading:"lazy",src:e.property_image,alt:e.property_name})),React.createElement("div",{className:"bif-row__main"},React.createElement("div",{className:"bif-row__top"},React.createElement("h3",{className:"bif-row__title"},e.property_name),React.createElement("span",{className:"bif-dot "+(l=c,l?"ok":"na"),"aria-hidden":"true"})),o&&e.property_features&&React.createElement("ul",{className:"bif-amenities bif-amenities--inline"},1===e.property_features.wifi&&React.createElement("li",null,React.createElement("span",null,"📶 WiFi")),e.property_features.queen_beds>0&&React.createElement("li",null,React.createElement("span",null,"🛏️ ",e.property_features.queen_beds," Queen")),e.property_features.king_beds>0&&React.createElement("li",null,React.createElement("span",null,"🛏️ ",e.property_features.king_beds," King")),e.property_features.double_beds>0&&React.createElement("li",null,React.createElement("span",null,"🛏️ ",e.property_features.double_beds," Double")),e.property_features.single_beds>0&&React.createElement("li",null,React.createElement("span",null,"🛏️ ",e.property_features.single_beds," Single")),e.property_features.bunk_beds>0&&React.createElement("li",null,React.createElement("span",null,"🛏️ ",e.property_features.bunk_beds," Bunk")),e.property_features.sofa_beds>0&&React.createElement("li",null,React.createElement("span",null,"🛋️ ",e.property_features.sofa_beds," Sofa bed")),e.property_features.bedrooms&&React.createElement("li",null,React.createElement("span",null,"🏠 ",e.property_features.bedrooms," Bedroom",e.property_features.bedrooms>1?"s":"")),e.property_features.living_areas&&React.createElement("li",null,React.createElement("span",null,"🛋️ ",e.property_features.living_areas," Living Area",e.property_features.living_areas>1?"s":"")))),e.availability?.dates&&React.createElement("div",{className:"bif-row__rates"},e.availability.dates.map(((e,t)=>React.createElement("div",{key:t,className:"bif-rmini "+(e.availability?"ok":"na")},React.createElement("div",{className:"bif-rmini__date"},e.date_formatted),React.createElement("div",{className:"bif-rmini__amt"},e.availability?`$${e.rate}`:"Booked Out"===e.availability_reason?"Booked":"No Tariff Set"===e.availability_reason?"No Rate":"N/A"))))),React.createElement("div",{className:"bif-row__cta"},c?React.createElement("button",{onClick:a,className:"bif-btn "+(t?"bif-btn-selected":"bif-btn-select")},t?"✓ Selected":"Select"):React.createElement("button",{disabled:!0,className:"bif-btn bif-btn-disabled"},"Unavailable")),t&&e.optional_extras?.length>0&&React.createElement("div",{className:"bif-optional-extras",style:{gridColumn:"1 / -1",marginTop:"1rem"}},React.createElement("h4",{className:"bif-daily-breakdown-title"},"Optional Extras"),React.createElement("div",{className:"bif-extras-list"},e.optional_extras.map((t=>React.createElement("div",{key:t.id,className:"bif-extra-item"},React.createElement("div",{className:"bif-extra-info"},React.createElement("input",{type:"checkbox",checked:e.selectedExtras?.[t.id]||!1,onChange:()=>e.onToggleExtra?.(e.id,t.id)}),React.createElement("label",null,t.description)),React.createElement("div",{className:"bif-extra-price"},"$",t.amount)))))));var l},C=({property:e,isSelected:t,onToggle:a,nights:r,checkInDate:n,showPropertyImages:i,includeIcons:o})=>{const c=e.availability?.total_cost||e.availability?.dates?.reduce(((e,t)=>e+(t.rate||0)),0)||0,l=e.availability?.available,s=(e,t,a)=>{if(e)return"Available";switch(t){case"Booked Out":return"Booked Out";case"No Tariff Set":return"No Rates Set";case"Min Nights":return`Minimum ${a||2} Nights`;default:return"Unavailable"}};return React.createElement("div",{className:`bif-property-card ${t?"bif-selected":""} ${l?"":"bif-unavailable"}`},React.createElement("div",{className:"bif-property-header"},i&&e.property_image&&React.createElement("div",{className:"bif-property-image"},React.createElement("img",{src:e.property_image,alt:e.property_name})),React.createElement("div",{className:"bif-property-info"},React.createElement("h3",{className:"bif-property-name"},e.property_name),e.property_description&&React.createElement("p",{className:"bif-property-description"},e.property_description),o&&e.property_features&&React.createElement("div",{className:"bif-property-icons"},1===e.property_features.wifi&&React.createElement("span",{className:"bif-property-icon",title:"WiFi Available"},"📶 WiFi"),e.property_features.queen_beds>0&&React.createElement("span",{className:"bif-property-icon",title:`${e.property_features.queen_beds} Queen bed${e.property_features.queen_beds>1?"s":""}`},"🛏️ ",e.property_features.queen_beds," Queen"),e.property_features.king_beds>0&&React.createElement("span",{className:"bif-property-icon",title:`${e.property_features.king_beds} King bed${e.property_features.king_beds>1?"s":""}`},"🛏️ ",e.property_features.king_beds," King"),e.property_features.double_beds>0&&React.createElement("span",{className:"bif-property-icon",title:`${e.property_features.double_beds} Double bed${e.property_features.double_beds>1?"s":""}`},"🛏️ ",e.property_features.double_beds," Double"),e.property_features.single_beds>0&&React.createElement("span",{className:"bif-property-icon",title:`${e.property_features.single_beds} Single bed${e.property_features.single_beds>1?"s":""}`},"🛏️ ",e.property_features.single_beds," Single"),e.property_features.bunk_beds>0&&React.createElement("span",{className:"bif-property-icon",title:`${e.property_features.bunk_beds} Bunk bed${e.property_features.bunk_beds>1?"s":""}`},"🛏️ ",e.property_features.bunk_beds," Bunk"),e.property_features.sofa_beds>0&&React.createElement("span",{className:"bif-property-icon",title:`${e.property_features.sofa_beds} Sofa bed${e.property_features.sofa_beds>1?"s":""}`},"🛋️ ",e.property_features.sofa_beds," Sofa bed"),e.property_features.bedrooms&&React.createElement("span",{className:"bif-property-icon",title:`${e.property_features.bedrooms} bedroom${e.property_features.bedrooms>1?"s":""}`},"🏠 ",e.property_features.bedrooms," Bedroom",e.property_features.bedrooms>1?"s":""),e.property_features.living_areas&&React.createElement("span",{className:"bif-property-icon",title:`${e.property_features.living_areas} living area${e.property_features.living_areas>1?"s":""}`},"🛋️ ",e.property_features.living_areas," Living Area",e.property_features.living_areas>1?"s":""))),React.createElement("div",{className:"bif-property-status-container"},React.createElement("span",{className:`bif-property-status ${((e,t)=>{if(e)return"bif-status-available";switch(t){case"Booked Out":return"bif-status-booked";case"No Tariff Set":return"bif-status-no-rate";case"Min Nights":return"bif-status-min-nights";default:return"bif-status-unavailable"}})(l,e.availability?.availability_reason)}`},s(l,e.availability?.availability_reason,e.availability?.min_nights)),l?React.createElement("button",{onClick:a,className:`bif-btn ${t?"bif-btn-selected":"bif-btn-select"} bif-header-btn`,style:{marginLeft:"0.75rem"}},t?"✓ Selected":"Select Property"):React.createElement("button",{disabled:!0,className:"bif-btn bif-btn-disabled bif-header-btn",style:{marginLeft:"0.75rem"}},s(l,e.availability?.availability_reason,e.availability?.min_nights)))),e.availability?.dates&&React.createElement("div",{className:"bif-availability-details"},React.createElement("h4",{className:"bif-daily-breakdown-title"},"Daily Rate Breakdown"),React.createElement("div",{className:"bif-daily-rates"},e.availability.dates.map(((e,t)=>React.createElement("div",{key:t,className:"bif-daily-rate "+(e.availability?"bif-available":"bif-unavailable")},React.createElement("div",{className:"bif-date"},e.date_formatted),React.createElement("div",{className:"bif-rate"},e.availability?`$${e.rate}`:"Booked Out"===e.availability_reason?"Booked":"No Tariff Set"===e.availability_reason?"No Rate":"N/A"))))),React.createElement("div",{className:"bif-rate-summary"},React.createElement("div",{className:"bif-summary-row"},React.createElement("span",{className:"bif-total"},"Total: $",c)))),t&&e.optional_extras?.length>0&&React.createElement("div",{className:"bif-optional-extras"},React.createElement("h4",{className:"bif-daily-breakdown-title"},"Optional Extras"),React.createElement("div",{className:"bif-extras-list"},e.optional_extras.map((t=>React.createElement("div",{key:t.id,className:"bif-extra-item"},React.createElement("div",{className:"bif-extra-info"},React.createElement("input",{type:"checkbox",checked:e.selectedExtras?.[t.id]||!1,onChange:()=>e.onToggleExtra?.(e.id,t.id)}),React.createElement("label",null,t.description)),React.createElement("div",{className:"bif-extra-price"},"$",t.amount)))))))},k=({checkInDate:e,nights:t,onDateChange:a,onNightsChange:r,onCheckAvailability:n,isLoading:i,minNights:o,maxNights:c,buttonIcon:l="search",searchLayout:s="default"})=>{const u=(new Date).toISOString().split("T")[0],m={search:"🔍",calendar:"📅",home:"🏠",mapMarker:"📍",star:"⭐",pin:"📌",pinSmall:"📍",globe:"🌍"}[l]||"🔍";return"horizontal"===s?React.createElement("div",{className:"bif-search-box-horizontal"},React.createElement("div",{className:"bif-search-field",onClick:()=>document.querySelector('.bif-search-box-horizontal input[type="date"]')?.showPicker?.()},React.createElement("span",{className:"bif-search-icon"},React.createElement("svg",{width:"20",height:"20",viewBox:"0 0 20 20",fill:"none",xmlns:"http://www.w3.org/2000/svg"},React.createElement("rect",{x:"3",y:"4",width:"14",height:"13",rx:"1",stroke:"currentColor",strokeWidth:"1.5"}),React.createElement("line",{x1:"3",y1:"8",x2:"17",y2:"8",stroke:"currentColor",strokeWidth:"1.5"}),React.createElement("line",{x1:"7",y1:"2",x2:"7",y2:"5",stroke:"currentColor",strokeWidth:"1.5",strokeLinecap:"round"}),React.createElement("line",{x1:"13",y1:"2",x2:"13",y2:"5",stroke:"currentColor",strokeWidth:"1.5",strokeLinecap:"round"}))),React.createElement("div",{className:"bif-search-field-content"},React.createElement("label",null,"Check-In"),React.createElement("input",{type:"date",value:e,onChange:e=>a(e.target.value),min:u}))),React.createElement("div",{className:"bif-search-divider"}),React.createElement("div",{className:"bif-search-field"},React.createElement("span",{className:"bif-search-icon"},React.createElement("svg",{width:"20",height:"20",viewBox:"0 0 20 20",fill:"currentColor",xmlns:"http://www.w3.org/2000/svg"},React.createElement("path",{d:"M17 10.5c0 3.59-2.69 6.5-6 6.5s-6-2.91-6-6.5S7.69 4 11 4c.35 0 .69.03 1.02.09A5.5 5.5 0 0 0 17 10.5z"}))),React.createElement("div",{className:"bif-search-field-content"},React.createElement("label",null,"Nights"),React.createElement("select",{value:t,onChange:e=>r(parseInt(e.target.value))},[...Array(c-o+1).keys()].map((e=>{const t=o+e;return React.createElement("option",{key:t,value:t},t)}))))),React.createElement("button",{onClick:n,disabled:!e||i,className:"bif-search-button"},i?"Checking...":"Search")):React.createElement("div",{className:"bif-date-selector"},React.createElement("h2",{className:"bif-section-title"},"Select Your Dates"),React.createElement("div",{className:"bif-date-form"},React.createElement("div",{className:"bif-form-field"},React.createElement("label",null,"Check-in Date"),React.createElement("input",{type:"date",value:e,onChange:e=>a(e.target.value),min:u,className:"bif-date-input"})),React.createElement("div",{className:"bif-form-field"},React.createElement("label",null,"Number of Nights"),React.createElement("select",{value:t,onChange:e=>r(parseInt(e.target.value)),className:"bif-nights-select"},[...Array(c-o+1).keys()].map((e=>{const t=o+e;return React.createElement("option",{key:t,value:t},t," ",1===t?"night":"nights")})))),React.createElement("div",{className:"bif-form-field"},React.createElement("button",{onClick:n,disabled:!e||i,className:"bif-btn bif-btn-primary bif-check-availability bif-has-icon-preview"},i?React.createElement(React.Fragment,null,React.createElement("div",{className:"bif-spinner"}),React.createElement("span",null,"Checking...")):React.createElement(React.Fragment,null,React.createElement("span",{className:"bif-icon-preview"},m),React.createElement("span",null,"Check Availability"))))))},w=({selectedProperties:e,selectedExtras:t,nights:a,total:r,discountCode:n,onDiscountCodeChange:i,onApplyDiscount:o,checkInDate:c,summary:l,showDiscount:s=!1,showRedeemGiftCertificate:u=!1,giftCertificate:m,onGiftCertificateChange:p,showGiftCertificateForm:d,onTriggerShowGiftCertificate:f,onApplyGiftCertificate:b,gcResult:y,gcLoading:h=!1})=>{Object.values(t).flat().reduce(((e,t)=>e+(t.amount||0)),0);const g=l&&parseFloat(l.order_discount_code_total||0)>0;return e&&0!==e.length?React.createElement("div",{className:"bif-booking-summary"},React.createElement("h3",{className:"bif-section-title"},"Booking Summary"),React.createElement("div",{className:"bif-summary-content"},e.map((e=>{const a=e.sub_total||e.availability?.total_cost||e.availability?.dates?.reduce(((e,t)=>e+(t.rate||0)),0)||0,r=e.mandatory_extras_total||e.mandatory_extras?.reduce(((e,t)=>e+parseFloat(t.amount||0)),0)||0,n=e.optional_extras_total||0,i=parseFloat(a)+parseFloat(r)+parseFloat(n);return React.createElement("div",{key:e.id,className:"bif-property-summary"},React.createElement("h5",{className:"bif-property-summary-name"},e.property_name),React.createElement("div",{className:"bif-property-total"},React.createElement("div",{className:"bif-total-row"},React.createElement("span",null,"Property Subtotal"),React.createElement("span",null,"$",parseFloat(a).toFixed(2)))),e.mandatory_extras&&e.mandatory_extras.length>0&&React.createElement("div",{className:"bif-mandatory-extras-summary"},React.createElement("h4",{className:"bif-daily-breakdown-title"},"Mandatory Extras"),e.mandatory_extras.map((e=>React.createElement("div",{key:e.id,className:"bif-total-row",style:{fontSize:"0.875rem",color:"#dc2626"}},React.createElement("span",null,e.description),React.createElement("span",null,"$",parseFloat(e.amount).toFixed(2)))))),e.optional_extras&&e.optional_extras.filter((e=>e.selected)).length>0&&React.createElement("div",{className:"bif-optional-extras-summary"},React.createElement("h4",{className:"bif-daily-breakdown-title"},"Optional Extras"),e.optional_extras.filter((e=>e.selected)).map((e=>React.createElement("div",{key:e.id,className:"bif-total-row",style:{fontSize:"0.875rem",color:"#92400e"}},React.createElement("span",null,e.description),React.createElement("span",null,"$",parseFloat(e.amount).toFixed(2)))))),React.createElement("div",{className:"bif-property-total"},React.createElement("div",{className:"bif-total-row bif-subtotal"},React.createElement("span",null,"Property Total"),React.createElement("span",null,"$",parseFloat(i).toFixed(2)))),!e.optional_extras&&t[e.id]&&t[e.id].length>0&&React.createElement("div",{className:"bif-optional-extras-summary"},React.createElement("h4",{className:"bif-daily-breakdown-title"},"Selected Optional Extras"),t[e.id].map((e=>React.createElement("div",{key:e.id,className:"bif-total-row",style:{fontSize:"0.875rem",color:"#92400e"}},React.createElement("span",null,e.description),React.createElement("span",null,"$",parseFloat(e.amount).toFixed(2)))))))})),s&&React.createElement("div",{className:"bif-summary-section"},React.createElement("div",{className:"bif-discount-form"},React.createElement("input",{type:"text",placeholder:"Enter discount code",value:n,onChange:e=>i(e.target.value),className:"bif-discount-input"}),React.createElement("button",{onClick:()=>{n.trim()&&o(n)},className:"bif-btn "+(n?.trim()?"bif-btn-primary":"bif-btn-secondary")},"Apply")),g&&React.createElement("div",{className:"bif-discount-applied"},"Discount code applied")),u&&l&&React.createElement("div",{className:"bif-summary-section"},React.createElement("div",{className:"bif-gift-certificate-section"},d?React.createElement("div",{className:"bif-gift-certificate-form"},React.createElement("div",{className:"bif-form-row"},React.createElement("div",{className:"bif-form-field"},React.createElement("label",null,"Certificate Number:"),React.createElement("input",{type:"text",value:m.number,onChange:e=>p({...m,number:e.target.value}),className:"bif-form-control",placeholder:"Enter certificate number",disabled:h})),React.createElement("div",{className:"bif-form-field"},React.createElement("label",null,"Pin:"),React.createElement("input",{type:"number",value:m.pin,onChange:e=>p({...m,pin:e.target.value}),className:"bif-form-control",placeholder:"Enter pin",disabled:h}))),React.createElement("button",{className:"bif-btn bif-btn-secondary",onClick:b,disabled:h},h?"Applying...":"Apply")):React.createElement("button",{className:"bif-btn bif-btn-secondary",onClick:f},"Apply Gift Certificate"),y&&y.valid&&React.createElement("div",{className:"bif-gift-certificate-success"},React.createElement("p",null,"✅ Successfully Applied Gift Certificate"),React.createElement("p",null,y.result),parseFloat(y.total)-parseFloat(y.gc_amount_applied)==0?React.createElement("p",null,React.createElement("strong",null,"🎉 Your gift certificate covers the full amount! No additional payment required.")):React.createElement(React.Fragment,null,React.createElement("p",null,"Remaining balance to pay: ",React.createElement("strong",null,"$",(parseFloat(y.total)-parseFloat(y.gc_amount_applied)).toFixed(2))),React.createElement("p",{style:{fontSize:"0.875rem",color:"#6b7280"}},"*Credit card surcharge will be added at payment")),React.createElement("p",null,"Gift Certificate balance after order: ",React.createElement("strong",null,"$",parseFloat(y.gc_balance_after_order).toFixed(2)))))),React.createElement("div",{className:"bif-grand-total"},y&&y.valid&&React.createElement("div",{className:"bif-total-row"},React.createElement("span",null,"Order Total"),React.createElement("span",null,"$",parseFloat(y.total||l.order_grand_total).toFixed(2))),y&&y.valid&&React.createElement("div",{className:"bif-total-row",style:{color:"#059669"}},React.createElement("span",null,"Gift Certificate Applied"),React.createElement("span",null,"-$",parseFloat(y.gc_amount_applied).toFixed(2))),React.createElement("div",{className:"bif-total-main"},React.createElement("span",null,y&&y.valid&&parseFloat(y.total)-parseFloat(y.gc_amount_applied)==0?"Total Paid by Gift Certificate":y&&y.valid?"Balance Due":"Total Cost"),React.createElement("span",{className:"bif-total-amount"},"$",y&&y.valid?(parseFloat(y.total)-parseFloat(y.gc_amount_applied)).toFixed(2):parseFloat(r).toFixed(2))),y&&y.valid&&parseFloat(y.total)-parseFloat(y.gc_amount_applied)>0&&l&&l.order_has_surcharge&&React.createElement("div",{className:"bif-surcharge-note",style:{fontSize:"0.875rem",color:"#6b7280",marginTop:"0.5rem"}},"*Credit card surcharge will be added at payment"),l&&parseFloat(l.order_discount_code_total||0)>0&&React.createElement("div",{className:"bif-discount-text"},"Includes discount of $",parseFloat(l.order_discount_code_total||0).toFixed(2))))):null},S=({isOpen:t,onClose:a,title:r,content:n})=>((0,e.useEffect)((()=>(document.body.style.overflow=t?"hidden":"",()=>{document.body.style.overflow=""})),[t]),(0,e.useEffect)((()=>{const e=e=>{"Escape"===e.key&&t&&a()};return t&&document.addEventListener("keydown",e),()=>{document.removeEventListener("keydown",e)}}),[t,a]),t?React.createElement("div",{className:"bif-modal-overlay",onClick:a},React.createElement("div",{className:"bif-modal",onClick:e=>e.stopPropagation()},React.createElement("div",{className:"bif-modal-header"},React.createElement("h3",{className:"bif-modal-title"},r),React.createElement("button",{className:"bif-modal-close",onClick:a,"aria-label":"Close modal"},"×")),React.createElement("div",{className:"bif-modal-content",dangerouslySetInnerHTML:{__html:n}}))):null),x=({userDetails:e,onUpdateDetails:t,formErrors:a,showSuburb:r=!0,showPostcode:n=!0,showComments:i=!1})=>React.createElement("div",{className:"bif-customer-details"},React.createElement("h2",{className:"bif-section-title"},"Your Details"),React.createElement("div",{className:"bif-customer-form"},React.createElement("div",{className:"bif-form-row"},React.createElement("div",{className:"bif-form-field"},React.createElement("label",null,"First Name *"),React.createElement("input",{type:"text",value:e.firstName,onChange:e=>t("firstName",e.target.value),placeholder:"Enter your first name",className:a.firstName?"bif-error":""}),a.firstName&&React.createElement("div",{className:"bif-field-error"},a.firstName)),React.createElement("div",{className:"bif-form-field"},React.createElement("label",null,"Last Name *"),React.createElement("input",{type:"text",value:e.lastName,onChange:e=>t("lastName",e.target.value),placeholder:"Enter your last name",className:a.lastName?"bif-error":""}),a.lastName&&React.createElement("div",{className:"bif-field-error"},a.lastName))),React.createElement("div",{className:"bif-form-row"},React.createElement("div",{className:"bif-form-field"},React.createElement("label",null,"Email *"),React.createElement("input",{type:"email",value:e.email,onChange:e=>t("email",e.target.value),placeholder:"Enter your email address",className:a.email?"bif-error":""}),a.email&&React.createElement("div",{className:"bif-field-error"},a.email)),React.createElement("div",{className:"bif-form-field"},React.createElement("label",null,"Phone *"),React.createElement("input",{type:"tel",value:e.phone,onChange:e=>t("phone",e.target.value),placeholder:"Enter your phone number",className:a.phone?"bif-error":""}),a.phone&&React.createElement("div",{className:"bif-field-error"},a.phone))),(n||r)&&React.createElement("div",{className:"bif-form-row"},n&&React.createElement("div",{className:"bif-form-field"},React.createElement("label",null,"Postcode"),React.createElement("input",{type:"text",value:e.postcode,onChange:e=>t("postcode",e.target.value),placeholder:"Enter your postcode"})),r&&React.createElement("div",{className:"bif-form-field"},React.createElement("label",null,"Suburb"),React.createElement("input",{type:"text",value:e.suburb,onChange:e=>t("suburb",e.target.value),placeholder:"Enter your suburb"}))),i&&React.createElement("div",{className:"bif-form-row bif-full-width"},React.createElement("div",{className:"bif-form-field"},React.createElement("label",null,"Comments"),React.createElement("textarea",{value:e.comments,onChange:e=>t("comments",e.target.value),rows:4,placeholder:"Any special requests or comments..."}))))),P=({summary:t,propertyIds:a,userDetails:r,paymentType:n,giftCertificate:i})=>{const o=(0,g.useStripe)(),c=(0,g.useElements)(),[l,s]=(0,e.useState)(!1),[u,m]=(0,e.useState)(""),[p,d]=(0,e.useState)(!1),[f,b]=(0,e.useState)(""),y=async e=>{e.preventDefault(),s(!0),m("");try{let e={amount:"deposit"===n?t.order_deposit_amount:t.order_payable_now,currency:t?.order_currency||"AUD",summary:t,propertyIds:"string"==typeof a?a.split(",").map((e=>parseInt(e.trim()))):a,userDetails:r,paymentType:n};if("gift"===n&&i)e.giftCertificateApplied=!0,e.giftCertificate=i,e.amount=0;else{if(!o||!c)return void console.error("Stripe.js has not loaded yet.");const t=c.getElement(g.CardElement),{paymentMethod:a,error:r}=await o.createPaymentMethod({type:"card",card:t});if(r)return console.error(r),m(r.message),void s(!1);e.stripePaymentMethodId=a.id,i&&i.valid&&(e.giftCertificateApplied=!0,e.giftCertificate=i)}const l=await fetch(`${v}/bookitfast/v1/process-payment`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(e)}),u=await l.json();if(!u.success)throw new Error(u.message||"Payment failed.");console.log("Payment successful:",u),b(u.data.charge),d(!0)}catch(e){console.error("Payment error:",e),m(e.message)}finally{s(!1)}};return React.createElement("div",{className:"bif-payment-container"},React.createElement("h3",null,"gift"===n?"🎁 Gift Certificate Payment":"💳 Payment Details"),u&&React.createElement("div",{className:"bif-error-message"},u),p?React.createElement("div",{className:"bif-success-message"},React.createElement("p",null,React.createElement("strong",null,"✅ Payment Successful!")),f&&React.createElement("p",null,React.createElement("a",{href:f,target:"_blank",rel:"noopener noreferrer"},"📄 Click here to view your receipt"))):"gift"===n?React.createElement("div",{className:"bif-gift-certificate-payment-form"},React.createElement("div",{className:"bif-gift-certificate-summary"},React.createElement("p",null,"🎁 ",React.createElement("strong",null,"Paying with Gift Certificate")),React.createElement("p",null,"Amount: ",React.createElement("strong",null,"$",parseFloat(i.gc_amount_applied||0).toFixed(2))),React.createElement("p",null,"No credit card required - your gift certificate will be charged automatically.")),React.createElement("button",{onClick:y,disabled:l,className:"bif-btn bif-btn-primary bif-btn-large"},l?"Processing...":"Complete Booking")):React.createElement("form",{onSubmit:y,className:"bif-stripe-form"},React.createElement("div",{className:"bif-card-element-container"},React.createElement(g.CardElement,{options:{hidePostalCode:!0,style:{base:{fontSize:"16px",color:"#424770","::placeholder":{color:"#aab7c4"}},invalid:{color:"#9e2146"}}}})),React.createElement("button",{type:"submit",disabled:!o||l,className:"bif-btn bif-btn-primary bif-btn-large"},l?"Processing...":"Pay Now")))},O=({propertyIds:t="",showDiscount:a=!1,showSuburb:r=!0,showPostcode:n=!0,showRedeemGiftCertificate:i=!1,showComments:o=!1,buttonColor:c="#0073aa",buttonTextColor:l="#ffffff",minNights:s=1,maxNights:u=14,showPropertyImages:m=!1,includeIcons:p=!1,layoutStyle:d="cards",buttonIcon:f="search",searchLayout:b="default"})=>{const y=R("nights"),O=y&&!isNaN(y)?Math.max(parseInt(y,10),s):s,T=R("start"),j=R("discount"),D=T?(e=>{const t=e.split("-");if(3===t.length){const[e,a,r]=t.map(Number);if(!isNaN(e)&&!isNaN(a)&&!isNaN(r)){const t=new Date(r,a-1,e);return t.setHours(12,0,0,0),t.toISOString().split("T")[0]}}return null})(T):"",A="string"==typeof t?t:"",[I,F]=(0,e.useState)({date:D,nights:O}),[$,B]=(0,e.useState)(null),[G,L]=(0,e.useState)({}),[U,M]=(0,e.useState)(null),[q,Y]=(0,e.useState)(null),[W,z]=(0,e.useState)(!1),[H,J]=(0,e.useState)(""),[K,Q]=(0,e.useState)({firstName:"",lastName:"",phone:"",email:"",postcode:"",suburb:"",comments:""}),[Z,V]=(0,e.useState)(!1),[X,ee]=(0,e.useState)(!1),[te,ae]=(0,e.useState)(j),[re,ne]=(0,e.useState)(null),[ie,oe]=(0,e.useState)(!1),[ce,le]=(0,e.useState)(null),[se,ue]=(0,e.useState)({}),[me,pe]=(0,e.useState)({number:"",pin:""}),[de,fe]=(0,e.useState)(!1),[be,ye]=(0,e.useState)(null),[he,ge]=(0,e.useState)(!1),[Ee,ve]=(0,e.useState)({}),[Re,_e]=(0,e.useState)(!1),[Ne,Ce]=(0,e.useState)({isOpen:!1,title:"",content:""});(0,e.useEffect)((()=>{D&&O&&(console.log("Auto-checking availability with:",D,O),ke(D,O))}),[D,O]);const ke=async(e=I.date,t=I.nights)=>{if(!e||!A)return void console.warn("fetchAvailability skipped - Missing startDate or propertyIds");const a=I.date,r=A.split(",").filter((e=>""!==e.trim()));z(!0),J(""),_e(!1);try{const e=await fetch(`${v}/bookitfast/v1/availability`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({ids:r,start:a,nights:t})}),n=await e.json();B(n),_e(!0);const i=Object.keys(n).reduce(((e,t)=>(e[t]=!1,e)),{});L(i)}catch(e){console.error(e),J("Failed to fetch availability. Please try again.")}finally{z(!1)}},we=(e,t)=>{ve((a=>{const r=a[e]||{},n={...a,[e]:{...r,[t]:!r[t]}};return Se(G,te,n,0),n}))},Se=async(e,t=null,a=Ee,r=0)=>{const n=I.date,i=I.nights,o=new Date(new Date(n).getTime()+864e5*i).toISOString().split("T")[0];z(!0),J("");try{const r=await fetch(`${v}/bookitfast/v1/availability/summary`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({selected:e,selected_optional_extras:a,start:n,end:o,discount_code:t||null})});if(!r.ok)throw new Error(`HTTP error! status: ${r.status}`);const i=await r.json();Y(i),i.stripe_publishable_key&&M(h(i.stripe_publishable_key))}catch(n){console.error("Error fetching summary:",n),r<3?(console.log(`Retrying... Attempt ${r+1}`),await Se(e,t,a,r+1)):J("Failed to fetch summary. Please try again.")}finally{z(!1)}},xe=e=>{(()=>{const e={};return K.firstName.trim()||(e.firstName="First name is required"),K.lastName.trim()||(e.lastName="Last name is required"),K.email.trim()||(e.email="Email is required"),K.phone.trim()||(e.phone="Phone is required"),Z||(e.agreeToTerms="You must agree to the terms and conditions"),X||(e.consentToDataSharing="You must consent to data sharing with Book It Fast service"),ue(e),0===Object.keys(e).length})()&&(le(e),oe(!0))},Pe=$?Object.entries($).filter((([e])=>G[e])).map((([e,t])=>({id:e,...t,...q?.property_summaries?.[e]||{},selectedExtras:Ee[e],onToggleExtra:we}))):[];return React.createElement("div",{className:"bif-booking-container",style:{"--bif-button-color":c,"--bif-button-color-hover":`${c}dd`,"--bif-button-color-active":`${c}bb`,"--bif-button-text-color":l}},React.createElement("div",{className:"bif-booking-steps"},React.createElement(k,{checkInDate:I.date,nights:I.nights,onDateChange:e=>F((t=>({...t,date:e}))),onNightsChange:e=>F((t=>({...t,nights:e}))),onCheckAvailability:ke,isLoading:W,minNights:s,maxNights:u,buttonIcon:f,searchLayout:b}),H&&React.createElement("div",{className:"bif-error-message"},H),Re&&$&&React.createElement("div",{className:"bif-property-list"},React.createElement("h2",{className:"bif-section-title"},"Available Properties"),React.createElement("div",{className:`bif-properties bif-properties--${d}`},Object.entries($).map((([e,t])=>{const a={key:e,property:{id:e,...t,selectedExtras:Ee[e],onToggleExtra:we},isSelected:G[e],onToggle:()=>(async e=>{const t={...G,[e]:!G[e]};L(t),Object.values(t).includes(!0)?await Se(t,te):Y(null)})(e),nights:I.nights,checkInDate:I.date,showPropertyImages:m,includeIcons:p};switch(d){case"grid":return React.createElement(_,a);case"rows":return React.createElement(N,a);default:return React.createElement(C,a)}})))),q&&Pe.length>0&&React.createElement(w,{selectedProperties:Pe,selectedExtras:Ee,nights:I.nights,total:(q.order_payable_now||0)-(q.order_surcharge||0),discountCode:te,onDiscountCodeChange:ae,onApplyDiscount:e=>{Object.keys(G).some((e=>G[e]))&&Se(G,e)},checkInDate:I.date,summary:q,showDiscount:a,showRedeemGiftCertificate:i,giftCertificate:me,onGiftCertificateChange:pe,showGiftCertificateForm:de,onTriggerShowGiftCertificate:()=>{fe(!0)},onApplyGiftCertificate:async e=>{if(e.preventDefault(),console.log("Gift Certificate: Apply button clicked"),console.log("Gift Certificate Data:",me),console.log("Current Summary:",q),he)return void console.log("Gift Certificate: Already processing, ignoring click");if(!q)return void console.error("Gift Certificate: No summary available");if(!me.number||!me.pin)return console.error("Gift Certificate: Missing number or pin"),void alert("Please enter both certificate number and pin");ge(!0),console.log("Gift Certificate: Setting loading state to true");let t={...q};if(q.order_weekly_discount>0){console.log("Gift Certificate: Weekly discount detected, adjusting summary for gift certificate calculation"),console.log("Gift Certificate: Original order_grand_total:",q.order_grand_total),console.log("Gift Certificate: Order weekly discount:",q.order_weekly_discount),console.log("Gift Certificate: Order surcharge:",q.order_surcharge);const e=parseFloat(q.order_sub_total)+parseFloat(q.order_mandatory_extras_total);console.log("Gift Certificate: Total before weekly discount (excluding surcharge):",e),t={...q,order_grand_total:e.toString(),order_total_before_surcharge:e,order_payable_now:e.toString(),order_surcharge:0,order_has_surcharge:!1},console.log("Gift Certificate: Adjusted summary for gift certificate:",t)}const a={certificate:me,summary:t};console.log("Gift Certificate: Sending request with data:",a);try{const e=await fetch(`${v}/bookitfast/v1/apply-gift-certificate`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(a)});if(console.log("Gift Certificate: Response status:",e.status),!e.ok)throw new Error(`HTTP error! status: ${e.status}`);const t=await e.json();console.log("Gift Certificate: Response data:",t),t.valid?(ye(t),t.summary&&(Y(t.summary),console.log("Gift Certificate: Updated summary:",t.summary)),console.log("Gift Certificate: Application successful"),console.log("Gift Certificate: Order payable now:",t.order_payable_now)):(console.error("Gift Certificate: API returned error:",t),alert(t.message||"Failed to apply gift certificate"))}catch(e){console.error("Gift Certificate: Error applying certificate:",e),alert("Error applying gift certificate. Please try again.")}finally{ge(!1),console.log("Gift Certificate: Setting loading state to false")}},gcResult:be,gcLoading:he}),q&&Pe.length>0&&React.createElement(x,{userDetails:K,onUpdateDetails:(e,t)=>{Q((a=>({...a,[e]:t}))),se[e]&&ue((t=>({...t,[e]:null})))},formErrors:se,showSuburb:r,showPostcode:n,showComments:o}),q&&Pe.length>0&&React.createElement("div",{className:"bif-terms-payment"},React.createElement("div",{className:"bif-terms-checkbox"},React.createElement("input",{type:"checkbox",id:"agreeToTerms",checked:Z,onChange:()=>V(!Z)}),React.createElement("label",{htmlFor:"agreeToTerms"},"I have read and agree to the"," ",q.order_booking_conditions?.map(((e,t)=>React.createElement("span",{key:t},"local"===e.type?React.createElement("a",{href:"#",onClick:t=>{t.preventDefault(),Ce({isOpen:!0,title:e.title,content:e.content})},style:{textDecoration:"underline",cursor:"pointer"}},e.title):React.createElement("a",{href:e.url,target:"_blank",rel:"noopener noreferrer"},e.title),t<q.order_booking_conditions.length-2?", ":"",t===q.order_booking_conditions.length-2?" and ":"")))),se.agreeToTerms&&React.createElement("div",{className:"bif-field-error"},se.agreeToTerms)),React.createElement("div",{className:"bif-privacy-consent"},React.createElement("input",{type:"checkbox",id:"consentToDataSharing",checked:X,onChange:()=>ee(!X)}),React.createElement("label",{htmlFor:"consentToDataSharing"},"I consent to my personal information being transmitted to and processed by Book It Fast (",React.createElement("a",{href:"https://bookitfast.app/privacy-policy",target:"_blank",rel:"noopener noreferrer"},"Privacy Policy"),") for booking and payment processing purposes."),se.consentToDataSharing&&React.createElement("div",{className:"bif-field-error"},se.consentToDataSharing)),!ie&&React.createElement("div",{className:"bif-payment-options"},Object.keys(se).length>0&&React.createElement("div",{className:"bif-validation-error"},"Please complete all required fields before proceeding with payment."),be&&be.valid&&parseFloat(be.total)-parseFloat(be.gc_amount_applied)==0?React.createElement("div",{className:"bif-gift-certificate-payment"},React.createElement("div",{className:"bif-gift-certificate-full-coverage"},React.createElement("p",null,"🎉 ",React.createElement("strong",null,"Your gift certificate covers the full booking amount!")),React.createElement("p",null,"No additional payment required.")),React.createElement("button",{className:"bif-btn bif-btn-primary bif-btn-large",onClick:()=>xe("gift")},"🎁 Complete Booking with Gift Certificate")):React.createElement(React.Fragment,null,q.order_surcharge>0&&parseFloat(q.order_payable_now||0)>0&&React.createElement("div",{className:"bif-surcharge-info"},React.createElement("p",null,"Please note a credit card surcharge applies of ",q.order_deposit_surcharge>0&&` $${q.order_deposit_surcharge} for deposit or `,"$",q.order_surcharge," for the full payment.")),q.order_deposit_amount>0?React.createElement("div",{className:"bif-payment-buttons"},React.createElement("button",{className:"bif-btn bif-btn-primary",onClick:()=>xe("deposit")},"💳 Pay Deposit (",E(q?.order_currency||"AUD"),q.order_deposit_amount,")"),React.createElement("button",{className:"bif-btn bif-btn-primary",onClick:()=>xe("full")},"💳 Pay In Full (",E(q?.order_currency||"AUD"),be&&be.valid?parseFloat(be.order_payable_now).toFixed(2):q.order_payable_now,")")):React.createElement("button",{className:"bif-btn bif-btn-primary bif-btn-large",onClick:()=>xe("full")},"💳 Complete Booking - ",E(q?.order_currency||"AUD"),be&&be.valid?parseFloat(be.order_payable_now).toFixed(2):q.order_payable_now)))),q&&ie&&React.createElement("div",{className:"bif-payment-form-container"},"gift"===ce?React.createElement(P,{summary:q,propertyIds:A.split(",").map((e=>parseInt(e.trim()))),userDetails:K,paymentType:ce,giftCertificate:be}):U&&React.createElement(g.Elements,{stripe:U},React.createElement(P,{summary:q,propertyIds:A.split(",").map((e=>parseInt(e.trim()))),userDetails:K,paymentType:ce,giftCertificate:be})))),React.createElement(S,{isOpen:Ne.isOpen,onClose:()=>Ce({isOpen:!1,title:"",content:""}),title:Ne.title,content:Ne.content}))};document.addEventListener("DOMContentLoaded",(()=>{const e=document.getElementById("bif-book-it-fast-multi-embed");if(e){const a=e.dataset.propertyIds||"",r="true"===e.dataset.showDiscount,n="true"===e.dataset.showSuburb,o="true"===e.dataset.showPostcode,c="true"===e.dataset.showRedeemGiftCertificate,l="true"===e.dataset.showComments,s=e.dataset.buttonColor||"#0073aa",u=e.dataset.buttonTextColor||"#ffffff",m=parseInt(e.dataset.minNights)||1,p=parseInt(e.dataset.maxNights)||14,d="true"===e.dataset.showPropertyImages,f="true"===e.dataset.includeIcons,b=e.dataset.layoutStyle||"cards",y=e.dataset.buttonIcon||"search",h=e.dataset.searchLayout||"default";i().render(t().createElement(O,{propertyIds:a,showDiscount:r,showSuburb:n,showPostcode:o,showRedeemGiftCertificate:c,showComments:l,buttonColor:s,buttonTextColor:u,minNights:m,maxNights:p,showPropertyImages:d,includeIcons:f,layoutStyle:b,buttonIcon:y,searchLayout:h}),e)}}))})()})();
  • book-it-fast/trunk/build/editor.asset.php

    r3404456 r3404538  
    1 <?php return array('dependencies' => array('react', 'react-jsx-runtime', 'wp-block-editor', 'wp-blocks', 'wp-components', 'wp-primitives'), 'version' => '764c6ac8790051826665');
     1<?php return array('dependencies' => array('react', 'react-jsx-runtime', 'wp-block-editor', 'wp-blocks', 'wp-components', 'wp-primitives'), 'version' => '69f49e52a87c621b78d6');
  • book-it-fast/trunk/build/editor.js

    r3404456 r3404538  
    1 (()=>{var e={609:e=>{"use strict";e.exports=window.React},926:function(e,t,a){!function(e,t){"use strict";function a(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),a.push.apply(a,r)}return a}function r(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{};t%2?a(Object(r),!0).forEach((function(t){o(e,t,r[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(r)):a(Object(r)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(r,t))}))}return e}function n(e){return n="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},n(e)}function o(e,t,a){return t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}function i(e,t){if(null==e)return{};var a,r,n=function(e,t){if(null==e)return{};var a,r,n={},o=Object.keys(e);for(r=0;r<o.length;r++)a=o[r],t.indexOf(a)>=0||(n[a]=e[a]);return n}(e,t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(r=0;r<o.length;r++)a=o[r],t.indexOf(a)>=0||Object.prototype.propertyIsEnumerable.call(e,a)&&(n[a]=e[a])}return n}function l(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var a=e&&("undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"]);if(null!=a){var r,n,o=[],_n=!0,i=!1;try{for(a=a.call(e);!(_n=(r=a.next()).done)&&(o.push(r.value),!t||o.length!==t);_n=!0);}catch(e){i=!0,n=e}finally{try{_n||null==a.return||a.return()}finally{if(i)throw n}}return o}}(e,t)||function(e,t){if(e){if("string"==typeof e)return c(e,t);var a=Object.prototype.toString.call(e).slice(8,-1);return"Object"===a&&e.constructor&&(a=e.constructor.name),"Map"===a||"Set"===a?Array.from(e):"Arguments"===a||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(a)?c(e,t):void 0}}(e,t)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function c(e,t){(null==t||t>e.length)&&(t=e.length);for(var a=0,r=new Array(t);a<t;a++)r[a]=e[a];return r}function s(e){return e&&e.__esModule&&Object.prototype.hasOwnProperty.call(e,"default")?e.default:e}var u,m,p,d,f={exports:{}};f.exports=function(){if(d)return p;d=1;var e=m?u:(m=1,u="SECRET_DO_NOT_PASS_THIS_OR_YOU_WILL_BE_FIRED");function t(){}function a(){}return a.resetWarningCache=t,p=function(){function r(t,a,r,n,o,i){if(i!==e){var l=new Error("Calling PropTypes validators directly is not supported by the `prop-types` package. Use PropTypes.checkPropTypes() to call them. Read more at http://fb.me/use-check-prop-types");throw l.name="Invariant Violation",l}}function n(){return r}r.isRequired=r;var o={array:r,bool:r,func:r,number:r,object:r,string:r,symbol:r,any:r,arrayOf:n,element:r,elementType:r,instanceOf:n,node:r,objectOf:n,oneOf:n,oneOfType:n,shape:n,exact:n,checkPropTypes:a,resetWarningCache:t};return o.PropTypes=o,o}}()();var b=s(f.exports),h=function(e,a,r){var n=!!r,o=t.useRef(r);t.useEffect((function(){o.current=r}),[r]),t.useEffect((function(){if(!n||!e)return function(){};var t=function(){o.current&&o.current.apply(o,arguments)};return e.on(a,t),function(){e.off(a,t)}}),[n,a,e,o])},y=function(e){var a=t.useRef(e);return t.useEffect((function(){a.current=e}),[e]),a.current},g=function(e){return null!==e&&"object"===n(e)},E="[object Object]",v=function e(t,a){if(!g(t)||!g(a))return t===a;var r=Array.isArray(t);if(r!==Array.isArray(a))return!1;var n=Object.prototype.toString.call(t)===E;if(n!==(Object.prototype.toString.call(a)===E))return!1;if(!n&&!r)return t===a;var o=Object.keys(t),i=Object.keys(a);if(o.length!==i.length)return!1;for(var l={},c=0;c<o.length;c+=1)l[o[c]]=!0;for(var s=0;s<i.length;s+=1)l[i[s]]=!0;var u=Object.keys(l);if(u.length!==o.length)return!1;var m=t,p=a;return u.every((function(t){return e(m[t],p[t])}))},R=function(e,t,a){return g(e)?Object.keys(e).reduce((function(n,i){var l=!g(t)||!v(e[i],t[i]);return a.includes(i)?(l&&console.warn("Unsupported prop change: options.".concat(i," is not a mutable property.")),n):l?r(r({},n||{}),{},o({},i,e[i])):n}),null):null},_="Invalid prop `stripe` supplied to `Elements`. We recommend using the `loadStripe` utility from `@stripe/stripe-js`. See https://stripe.com/docs/stripe-js/react#elements-props-stripe for details.",C=function(e){var t,a=arguments.length>1&&void 0!==arguments[1]?arguments[1]:_;if(null===e||g(t=e)&&"function"==typeof t.elements&&"function"==typeof t.createToken&&"function"==typeof t.createPaymentMethod&&"function"==typeof t.confirmCardPayment)return e;throw new Error(a)},w=function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:_;if(function(e){return g(e)&&"function"==typeof e.then}(e))return{tag:"async",stripePromise:Promise.resolve(e).then((function(e){return C(e,t)}))};var a=C(e,t);return null===a?{tag:"empty"}:{tag:"sync",stripe:a}},N=function(e){e&&e._registerWrapper&&e.registerAppInfo&&(e._registerWrapper({name:"react-stripe-js",version:"3.6.0"}),e.registerAppInfo({name:"react-stripe-js",version:"3.6.0",url:"https://stripe.com/docs/stripe-js/react"}))},k=t.createContext(null);k.displayName="ElementsContext";var S=function(e,t){if(!e)throw new Error("Could not find Elements context; You need to wrap the part of your app that ".concat(t," in an <Elements> provider."));return e},x=function(e){var a=e.stripe,r=e.options,n=e.children,o=t.useMemo((function(){return w(a)}),[a]),i=l(t.useState((function(){return{stripe:"sync"===o.tag?o.stripe:null,elements:"sync"===o.tag?o.stripe.elements(r):null}})),2),c=i[0],s=i[1];t.useEffect((function(){var e=!0,t=function(e){s((function(t){return t.stripe?t:{stripe:e,elements:e.elements(r)}}))};return"async"!==o.tag||c.stripe?"sync"!==o.tag||c.stripe||t(o.stripe):o.stripePromise.then((function(a){a&&e&&t(a)})),function(){e=!1}}),[o,c,r]);var u=y(a);t.useEffect((function(){null!==u&&u!==a&&console.warn("Unsupported prop change on Elements: You cannot change the `stripe` prop after setting it.")}),[u,a]);var m=y(r);return t.useEffect((function(){if(c.elements){var e=R(r,m,["clientSecret","fonts"]);e&&c.elements.update(e)}}),[r,m,c.elements]),t.useEffect((function(){N(c.stripe)}),[c.stripe]),t.createElement(k.Provider,{value:c},n)};x.propTypes={stripe:b.any,options:b.object};var P=function(e){var a=t.useContext(k);return S(a,e)},O=function(e){return(0,e.children)(P("mounts <ElementsConsumer>"))};O.propTypes={children:b.func.isRequired};var I=["on","session"],T=t.createContext(null);T.displayName="CheckoutSdkContext";var j=function(e,t){if(!e)throw new Error("Could not find CheckoutProvider context; You need to wrap the part of your app that ".concat(t," in an <CheckoutProvider> provider."));return e},D=t.createContext(null);D.displayName="CheckoutContext";var F=function(e){var a=e.stripe,r=e.options,n=e.children,o=t.useMemo((function(){return w(a,"Invalid prop `stripe` supplied to `CheckoutProvider`. We recommend using the `loadStripe` utility from `@stripe/stripe-js`. See https://stripe.com/docs/stripe-js/react#elements-props-stripe for details.")}),[a]),c=l(t.useState(null),2),s=c[0],u=c[1],m=l(t.useState((function(){return{stripe:"sync"===o.tag?o.stripe:null,checkoutSdk:null}})),2),p=m[0],d=m[1],f=function(e,t){d((function(a){return a.stripe&&a.checkoutSdk?a:{stripe:e,checkoutSdk:t}}))},b=t.useRef(!1);t.useEffect((function(){var e=!0;return"async"!==o.tag||p.stripe?"sync"===o.tag&&o.stripe&&!b.current&&(b.current=!0,o.stripe.initCheckout(r).then((function(e){e&&(f(o.stripe,e),e.on("change",u))}))):o.stripePromise.then((function(t){t&&e&&!b.current&&(b.current=!0,t.initCheckout(r).then((function(e){e&&(f(t,e),e.on("change",u))})))})),function(){e=!1}}),[o,p,r,u]);var h=y(a);t.useEffect((function(){null!==h&&h!==a&&console.warn("Unsupported prop change on CheckoutProvider: You cannot change the `stripe` prop after setting it.")}),[h,a]);var g=y(r);t.useEffect((function(){var e,t;if(p.checkoutSdk){var a=null==g||null===(e=g.elementsOptions)||void 0===e?void 0:e.appearance,n=null==r||null===(t=r.elementsOptions)||void 0===t?void 0:t.appearance;n&&!v(n,a)&&p.checkoutSdk.changeAppearance(n)}}),[r,g,p.checkoutSdk]),t.useEffect((function(){N(p.stripe)}),[p.stripe]);var E=t.useMemo((function(){return function(e,t){if(!e)return null;e.on,e.session;var a=i(e,I);return t?Object.assign(t,a):Object.assign(e.session(),a)}(p.checkoutSdk,s)}),[p.checkoutSdk,s]);return p.checkoutSdk?t.createElement(T.Provider,{value:p},t.createElement(D.Provider,{value:E},n)):null};F.propTypes={stripe:b.any,options:b.shape({fetchClientSecret:b.func.isRequired,elementsOptions:b.object}).isRequired};var A=function(e){var a=t.useContext(T),r=t.useContext(k);if(a&&r)throw new Error("You cannot wrap the part of your app that ".concat(e," in both <CheckoutProvider> and <Elements> providers."));return a?j(a,e):S(r,e)},B=["mode"],$=function(e,a){var r,n="".concat((r=e).charAt(0).toUpperCase()+r.slice(1),"Element"),o=a?function(e){A("mounts <".concat(n,">"));var a=e.id,r=e.className;return t.createElement("div",{id:a,className:r})}:function(a){var r,o=a.id,c=a.className,s=a.options,u=void 0===s?{}:s,m=a.onBlur,p=a.onFocus,d=a.onReady,f=a.onChange,b=a.onEscape,g=a.onClick,E=a.onLoadError,v=a.onLoaderStart,_=a.onNetworksChange,C=a.onConfirm,w=a.onCancel,N=a.onShippingAddressChange,k=a.onShippingRateChange,S=A("mounts <".concat(n,">")),x="elements"in S?S.elements:null,P="checkoutSdk"in S?S.checkoutSdk:null,O=l(t.useState(null),2),I=O[0],T=O[1],j=t.useRef(null),D=t.useRef(null);h(I,"blur",m),h(I,"focus",p),h(I,"escape",b),h(I,"click",g),h(I,"loaderror",E),h(I,"loaderstart",v),h(I,"networkschange",_),h(I,"confirm",C),h(I,"cancel",w),h(I,"shippingaddresschange",N),h(I,"shippingratechange",k),h(I,"change",f),d&&(r="expressCheckout"===e?d:function(){d(I)}),h(I,"ready",r),t.useLayoutEffect((function(){if(null===j.current&&null!==D.current&&(x||P)){var t=null;if(P)switch(e){case"payment":t=P.createPaymentElement(u);break;case"address":if(!("mode"in u))throw new Error("You must supply options.mode. mode must be 'billing' or 'shipping'.");var a=u.mode,r=i(u,B);if("shipping"===a)t=P.createShippingAddressElement(r);else{if("billing"!==a)throw new Error("Invalid options.mode. mode must be 'billing' or 'shipping'.");t=P.createBillingAddressElement(r)}break;case"expressCheckout":t=P.createExpressCheckoutElement(u);break;case"currencySelector":t=P.createCurrencySelectorElement();break;default:throw new Error("Invalid Element type ".concat(n,". You must use either the <PaymentElement />, <AddressElement options={{mode: 'shipping'}} />, <AddressElement options={{mode: 'billing'}} />, or <ExpressCheckoutElement />."))}else x&&(t=x.create(e,u));j.current=t,T(t),t&&t.mount(D.current)}}),[x,P,u]);var F=y(u);return t.useEffect((function(){if(j.current){var e=R(u,F,["paymentRequest"]);e&&"update"in j.current&&j.current.update(e)}}),[u,F]),t.useLayoutEffect((function(){return function(){if(j.current&&"function"==typeof j.current.destroy)try{j.current.destroy(),j.current=null}catch(e){}}}),[]),t.createElement("div",{id:o,className:c,ref:D})};return o.propTypes={id:b.string,className:b.string,onChange:b.func,onBlur:b.func,onFocus:b.func,onReady:b.func,onEscape:b.func,onClick:b.func,onLoadError:b.func,onLoaderStart:b.func,onNetworksChange:b.func,onConfirm:b.func,onCancel:b.func,onShippingAddressChange:b.func,onShippingRateChange:b.func,options:b.object},o.displayName=n,o.__elementType=e,o},G="undefined"==typeof window,L=t.createContext(null);L.displayName="EmbeddedCheckoutProviderContext";var M=function(){var e=t.useContext(L);if(!e)throw new Error("<EmbeddedCheckout> must be used within <EmbeddedCheckoutProvider>");return e},z=G?function(e){var a=e.id,r=e.className;return M(),t.createElement("div",{id:a,className:r})}:function(e){var a=e.id,r=e.className,n=M().embeddedCheckout,o=t.useRef(!1),i=t.useRef(null);return t.useLayoutEffect((function(){return!o.current&&n&&null!==i.current&&(n.mount(i.current),o.current=!0),function(){if(o.current&&n)try{n.unmount(),o.current=!1}catch(e){}}}),[n]),t.createElement("div",{ref:i,id:a,className:r})},U=$("auBankAccount",G),q=$("card",G),H=$("cardNumber",G),Y=$("cardExpiry",G),W=$("cardCvc",G),V=$("fpxBank",G),Z=$("iban",G),J=$("idealBank",G),K=$("p24Bank",G),Q=$("epsBank",G),X=$("payment",G),ee=$("expressCheckout",G),te=$("currencySelector",G),ae=$("paymentRequestButton",G),re=$("linkAuthentication",G),ne=$("address",G),oe=$("shippingAddress",G),ie=$("paymentMethodMessaging",G),le=$("affirmMessage",G),ce=$("afterpayClearpayMessage",G);e.AddressElement=ne,e.AffirmMessageElement=le,e.AfterpayClearpayMessageElement=ce,e.AuBankAccountElement=U,e.CardCvcElement=W,e.CardElement=q,e.CardExpiryElement=Y,e.CardNumberElement=H,e.CheckoutProvider=F,e.CurrencySelectorElement=te,e.Elements=x,e.ElementsConsumer=O,e.EmbeddedCheckout=z,e.EmbeddedCheckoutProvider=function(e){var a=e.stripe,r=e.options,n=e.children,o=t.useMemo((function(){return w(a,"Invalid prop `stripe` supplied to `EmbeddedCheckoutProvider`. We recommend using the `loadStripe` utility from `@stripe/stripe-js`. See https://stripe.com/docs/stripe-js/react#elements-props-stripe for details.")}),[a]),i=t.useRef(null),c=t.useRef(null),s=l(t.useState({embeddedCheckout:null}),2),u=s[0],m=s[1];t.useEffect((function(){if(!c.current&&!i.current){var e=function(e){c.current||i.current||(c.current=e,i.current=c.current.initEmbeddedCheckout(r).then((function(e){m({embeddedCheckout:e})})))};"async"!==o.tag||c.current||!r.clientSecret&&!r.fetchClientSecret?"sync"!==o.tag||c.current||!r.clientSecret&&!r.fetchClientSecret||e(o.stripe):o.stripePromise.then((function(t){t&&e(t)}))}}),[o,r,u,c]),t.useEffect((function(){return function(){u.embeddedCheckout?(i.current=null,u.embeddedCheckout.destroy()):i.current&&i.current.then((function(){i.current=null,u.embeddedCheckout&&u.embeddedCheckout.destroy()}))}}),[u.embeddedCheckout]),t.useEffect((function(){N(c)}),[c]);var p=y(a);t.useEffect((function(){null!==p&&p!==a&&console.warn("Unsupported prop change on EmbeddedCheckoutProvider: You cannot change the `stripe` prop after setting it.")}),[p,a]);var d=y(r);return t.useEffect((function(){null!=d&&(null!=r?(void 0===r.clientSecret&&void 0===r.fetchClientSecret&&console.warn("Invalid props passed to EmbeddedCheckoutProvider: You must provide one of either `options.fetchClientSecret` or `options.clientSecret`."),null!=d.clientSecret&&r.clientSecret!==d.clientSecret&&console.warn("Unsupported prop change on EmbeddedCheckoutProvider: You cannot change the client secret after setting it. Unmount and create a new instance of EmbeddedCheckoutProvider instead."),null!=d.fetchClientSecret&&r.fetchClientSecret!==d.fetchClientSecret&&console.warn("Unsupported prop change on EmbeddedCheckoutProvider: You cannot change fetchClientSecret after setting it. Unmount and create a new instance of EmbeddedCheckoutProvider instead."),null!=d.onComplete&&r.onComplete!==d.onComplete&&console.warn("Unsupported prop change on EmbeddedCheckoutProvider: You cannot change the onComplete option after setting it."),null!=d.onShippingDetailsChange&&r.onShippingDetailsChange!==d.onShippingDetailsChange&&console.warn("Unsupported prop change on EmbeddedCheckoutProvider: You cannot change the onShippingDetailsChange option after setting it."),null!=d.onLineItemsChange&&r.onLineItemsChange!==d.onLineItemsChange&&console.warn("Unsupported prop change on EmbeddedCheckoutProvider: You cannot change the onLineItemsChange option after setting it.")):console.warn("Unsupported prop change on EmbeddedCheckoutProvider: You cannot unset options after setting them."))}),[d,r]),t.createElement(L.Provider,{value:u},n)},e.EpsBankElement=Q,e.ExpressCheckoutElement=ee,e.FpxBankElement=V,e.IbanElement=Z,e.IdealBankElement=J,e.LinkAuthenticationElement=re,e.P24BankElement=K,e.PaymentElement=X,e.PaymentMethodMessagingElement=ie,e.PaymentRequestButtonElement=ae,e.ShippingAddressElement=oe,e.useCheckout=function(){!function(e){var a=t.useContext(T);j(a,e)}("calls useCheckout()");var e=t.useContext(D);if(!e)throw new Error("Could not find Checkout Context; You need to wrap the part of your app that calls useCheckout() in an <CheckoutProvider> provider.");return e},e.useElements=function(){return P("calls useElements()").elements},e.useStripe=function(){return A("calls useStripe()").stripe}}(t,a(609))}},t={};function a(r){var n=t[r];if(void 0!==n)return n.exports;var o=t[r]={exports:{}};return e[r].call(o.exports,o,o.exports,a),o.exports}(()=>{"use strict";var e,t=a(609),r="https://js.stripe.com",n="".concat(r,"/v3"),o=/^https:\/\/js\.stripe\.com\/v3\/?(\?.*)?$/,i=/^https:\/\/js\.stripe\.com\/(v3|[a-z]+)\/stripe\.js(\?.*)?$/,l="loadStripe.setLoadParameters was called but an existing Stripe.js script already exists in the document; existing script parameters will be used",c=function(e){var t=e&&!e.advancedFraudSignals?"?advancedFraudSignals=false":"",a=document.createElement("script");a.src="".concat(n).concat(t);var r=document.head||document.body;if(!r)throw new Error("Expected document.body not to be null. Stripe.js requires a <body> element.");return r.appendChild(a),a},s=null,u=null,m=null,p=!1,d=function(){return e||(e=(t=null,null!==s?s:(s=new Promise((function(e,a){if("undefined"!=typeof window&&"undefined"!=typeof document)if(window.Stripe&&t&&console.warn(l),window.Stripe)e(window.Stripe);else try{var n=function(){for(var e,t=document.querySelectorAll('script[src^="'.concat(r,'"]')),a=0;a<t.length;a++){var n=t[a];if(e=n.src,o.test(e)||i.test(e))return n}return null}();if(n&&t)console.warn(l);else if(n){if(n&&null!==m&&null!==u){var s;n.removeEventListener("load",m),n.removeEventListener("error",u),null===(s=n.parentNode)||void 0===s||s.removeChild(n),n=c(t)}}else n=c(t);m=function(e,t){return function(){window.Stripe?e(window.Stripe):t(new Error("Stripe.js not available"))}}(e,a),u=function(e){return function(t){e(new Error("Failed to load Stripe.js",{cause:t}))}}(a),n.addEventListener("load",m),n.addEventListener("error",u)}catch(e){return void a(e)}else e(null)}))).catch((function(e){return s=null,Promise.reject(e)}))).catch((function(t){return e=null,Promise.reject(t)})));var t};Promise.resolve().then((function(){return d()})).catch((function(e){p||console.warn(e)}));var f=function(){for(var e=arguments.length,t=new Array(e),a=0;a<e;a++)t[a]=arguments[a];p=!0;var r=Date.now();return d().then((function(e){return function(e,t,a){if(null===e)return null;var r=t[0].match(/^pk_test/),n=function(e){return 3===e?"v3":e}(e.version);r&&"v3"!==n&&console.warn("Stripe.js@".concat(n," was loaded on the page, but @stripe/stripe-js@").concat("5.10.0"," expected Stripe.js@").concat("v3",". This may result in unexpected behavior. For more information, see https://docs.stripe.com/sdks/stripejs-versioning"));var o=e.apply(void 0,t);return function(e,t){e&&e._registerWrapper&&e._registerWrapper({name:"stripe-js",version:"5.10.0",startTime:t})}(o,a),o}(e,t,r)}))},b=a(926);const h=e=>({AUD:"AUD$",USD:"USD$",NZD:"NZD$",GBP:"GBP£",EUR:"EUR€",CAD:"CAD$",SGD:"SGD$"}[e]||e+" "),y=(()=>{const e=window.wpApiSettings?.restUrl;return e?e.replace(/\/$/,""):document.querySelector('link[rel="https://api.w.org/"]').href.replace(/\/$/,"")})(),g=(f("your-publishable-key-here"),e=>new URLSearchParams(window.location.search).get(e)),E=({property:e,isSelected:t,onToggle:a,nights:r,checkInDate:n,showPropertyImages:o,includeIcons:i})=>{e.availability?.total_cost||e.availability?.dates?.reduce(((e,t)=>e+(t.rate||0)),0);const l=e.availability?.available;return React.createElement("div",{className:`bif-tile ${t?"bif-selected":""} ${l?"":"is-unavailable"}`},o&&e.property_image&&React.createElement("div",{className:"bif-tile__hero"},React.createElement("img",{loading:"lazy",src:e.property_image,alt:e.property_name}),React.createElement("span",{className:"bif-chip "+(l?"":"unavailable")},((e,t,a)=>{if(e)return"Available";switch(t){case"Booked Out":return"Booked Out";case"No Tariff Set":return"No Rates Set";case"Min Nights":return`Minimum ${a||2} Nights`;default:return"Unavailable"}})(l,e.availability?.availability_reason,e.availability?.min_nights))),React.createElement("div",{className:"bif-tile__content"},React.createElement("h3",{className:"bif-tile__title"},e.property_name),i&&e.property_features&&React.createElement("ul",{className:"bif-amenities bif-amenities--slim"},1===e.property_features.wifi&&React.createElement("li",null,React.createElement("span",null,"📶 WiFi")),e.property_features.queen_beds>0&&React.createElement("li",null,React.createElement("span",null,"🛏️ ",e.property_features.queen_beds," Queen")),e.property_features.king_beds>0&&React.createElement("li",null,React.createElement("span",null,"🛏️ ",e.property_features.king_beds," King")),e.property_features.double_beds>0&&React.createElement("li",null,React.createElement("span",null,"🛏️ ",e.property_features.double_beds," Double")),e.property_features.single_beds>0&&React.createElement("li",null,React.createElement("span",null,"🛏️ ",e.property_features.single_beds," Single")),e.property_features.bunk_beds>0&&React.createElement("li",null,React.createElement("span",null,"🛏️ ",e.property_features.bunk_beds," Bunk")),e.property_features.sofa_beds>0&&React.createElement("li",null,React.createElement("span",null,"🛋️ ",e.property_features.sofa_beds," Sofa bed")),e.property_features.bedrooms&&React.createElement("li",null,React.createElement("span",null,"🏠 ",e.property_features.bedrooms," Bedroom",e.property_features.bedrooms>1?"s":"")),e.property_features.living_areas&&React.createElement("li",null,React.createElement("span",null,"🛋️ ",e.property_features.living_areas," Living Area",e.property_features.living_areas>1?"s":""))),e.availability?.dates&&React.createElement("div",{className:"bif-tile__rates"},e.availability.dates.map(((e,t)=>React.createElement("div",{key:t,className:"bif-pill "+(e.availability?"ok":"na")},React.createElement("span",{className:"bif-pill__date"},e.date_formatted),React.createElement("strong",{className:"bif-pill__amt"},e.availability?`$${e.rate}`:"Booked Out"===e.availability_reason?"Booked":"No Tariff Set"===e.availability_reason?"No Rate":"N/A"))))),React.createElement("div",{className:"bif-tile__footer"},l?React.createElement("button",{onClick:a,className:"bif-btn "+(t?"bif-btn-selected":"bif-btn-select")},t?"✓ Selected":"Select"):React.createElement("button",{disabled:!0,className:"bif-btn bif-btn-disabled"},"Unavailable")),t&&e.optional_extras?.length>0&&React.createElement("div",{className:"bif-optional-extras"},React.createElement("h4",{className:"bif-daily-breakdown-title"},"Optional Extras"),React.createElement("div",{className:"bif-extras-list"},e.optional_extras.map((t=>React.createElement("div",{key:t.id,className:"bif-extra-item"},React.createElement("div",{className:"bif-extra-info"},React.createElement("input",{type:"checkbox",checked:e.selectedExtras?.[t.id]||!1,onChange:()=>e.onToggleExtra?.(e.id,t.id)}),React.createElement("label",null,t.description)),React.createElement("div",{className:"bif-extra-price"},"$",t.amount))))))))},v=({property:e,isSelected:t,onToggle:a,nights:r,checkInDate:n,showPropertyImages:o,includeIcons:i})=>{e.availability?.total_cost||e.availability?.dates?.reduce(((e,t)=>e+(t.rate||0)),0);const l=e.availability?.available;return React.createElement("div",{className:`bif-row ${t?"bif-selected":""} ${l?"":"is-unavailable"} ${o&&e.property_image?"":"no-image"}`},o&&e.property_image&&React.createElement("div",{className:"bif-row__thumb"},React.createElement("img",{loading:"lazy",src:e.property_image,alt:e.property_name})),React.createElement("div",{className:"bif-row__main"},React.createElement("div",{className:"bif-row__top"},React.createElement("h3",{className:"bif-row__title"},e.property_name),React.createElement("span",{className:"bif-dot "+(c=l,c?"ok":"na"),"aria-hidden":"true"})),i&&e.property_features&&React.createElement("ul",{className:"bif-amenities bif-amenities--inline"},1===e.property_features.wifi&&React.createElement("li",null,React.createElement("span",null,"📶 WiFi")),e.property_features.queen_beds>0&&React.createElement("li",null,React.createElement("span",null,"🛏️ ",e.property_features.queen_beds," Queen")),e.property_features.king_beds>0&&React.createElement("li",null,React.createElement("span",null,"🛏️ ",e.property_features.king_beds," King")),e.property_features.double_beds>0&&React.createElement("li",null,React.createElement("span",null,"🛏️ ",e.property_features.double_beds," Double")),e.property_features.single_beds>0&&React.createElement("li",null,React.createElement("span",null,"🛏️ ",e.property_features.single_beds," Single")),e.property_features.bunk_beds>0&&React.createElement("li",null,React.createElement("span",null,"🛏️ ",e.property_features.bunk_beds," Bunk")),e.property_features.sofa_beds>0&&React.createElement("li",null,React.createElement("span",null,"🛋️ ",e.property_features.sofa_beds," Sofa bed")),e.property_features.bedrooms&&React.createElement("li",null,React.createElement("span",null,"🏠 ",e.property_features.bedrooms," Bedroom",e.property_features.bedrooms>1?"s":"")),e.property_features.living_areas&&React.createElement("li",null,React.createElement("span",null,"🛋️ ",e.property_features.living_areas," Living Area",e.property_features.living_areas>1?"s":"")))),e.availability?.dates&&React.createElement("div",{className:"bif-row__rates"},e.availability.dates.map(((e,t)=>React.createElement("div",{key:t,className:"bif-rmini "+(e.availability?"ok":"na")},React.createElement("div",{className:"bif-rmini__date"},e.date_formatted),React.createElement("div",{className:"bif-rmini__amt"},e.availability?`$${e.rate}`:"Booked Out"===e.availability_reason?"Booked":"No Tariff Set"===e.availability_reason?"No Rate":"N/A"))))),React.createElement("div",{className:"bif-row__cta"},l?React.createElement("button",{onClick:a,className:"bif-btn "+(t?"bif-btn-selected":"bif-btn-select")},t?"✓ Selected":"Select"):React.createElement("button",{disabled:!0,className:"bif-btn bif-btn-disabled"},"Unavailable")),t&&e.optional_extras?.length>0&&React.createElement("div",{className:"bif-optional-extras",style:{gridColumn:"1 / -1",marginTop:"1rem"}},React.createElement("h4",{className:"bif-daily-breakdown-title"},"Optional Extras"),React.createElement("div",{className:"bif-extras-list"},e.optional_extras.map((t=>React.createElement("div",{key:t.id,className:"bif-extra-item"},React.createElement("div",{className:"bif-extra-info"},React.createElement("input",{type:"checkbox",checked:e.selectedExtras?.[t.id]||!1,onChange:()=>e.onToggleExtra?.(e.id,t.id)}),React.createElement("label",null,t.description)),React.createElement("div",{className:"bif-extra-price"},"$",t.amount)))))));var c},R=({property:e,isSelected:t,onToggle:a,nights:r,checkInDate:n,showPropertyImages:o,includeIcons:i})=>{const l=e.availability?.total_cost||e.availability?.dates?.reduce(((e,t)=>e+(t.rate||0)),0)||0,c=e.availability?.available,s=(e,t,a)=>{if(e)return"Available";switch(t){case"Booked Out":return"Booked Out";case"No Tariff Set":return"No Rates Set";case"Min Nights":return`Minimum ${a||2} Nights`;default:return"Unavailable"}};return React.createElement("div",{className:`bif-property-card ${t?"bif-selected":""} ${c?"":"bif-unavailable"}`},React.createElement("div",{className:"bif-property-header"},o&&e.property_image&&React.createElement("div",{className:"bif-property-image"},React.createElement("img",{src:e.property_image,alt:e.property_name})),React.createElement("div",{className:"bif-property-info"},React.createElement("h3",{className:"bif-property-name"},e.property_name),e.property_description&&React.createElement("p",{className:"bif-property-description"},e.property_description),i&&e.property_features&&React.createElement("div",{className:"bif-property-icons"},1===e.property_features.wifi&&React.createElement("span",{className:"bif-property-icon",title:"WiFi Available"},"📶 WiFi"),e.property_features.queen_beds>0&&React.createElement("span",{className:"bif-property-icon",title:`${e.property_features.queen_beds} Queen bed${e.property_features.queen_beds>1?"s":""}`},"🛏️ ",e.property_features.queen_beds," Queen"),e.property_features.king_beds>0&&React.createElement("span",{className:"bif-property-icon",title:`${e.property_features.king_beds} King bed${e.property_features.king_beds>1?"s":""}`},"🛏️ ",e.property_features.king_beds," King"),e.property_features.double_beds>0&&React.createElement("span",{className:"bif-property-icon",title:`${e.property_features.double_beds} Double bed${e.property_features.double_beds>1?"s":""}`},"🛏️ ",e.property_features.double_beds," Double"),e.property_features.single_beds>0&&React.createElement("span",{className:"bif-property-icon",title:`${e.property_features.single_beds} Single bed${e.property_features.single_beds>1?"s":""}`},"🛏️ ",e.property_features.single_beds," Single"),e.property_features.bunk_beds>0&&React.createElement("span",{className:"bif-property-icon",title:`${e.property_features.bunk_beds} Bunk bed${e.property_features.bunk_beds>1?"s":""}`},"🛏️ ",e.property_features.bunk_beds," Bunk"),e.property_features.sofa_beds>0&&React.createElement("span",{className:"bif-property-icon",title:`${e.property_features.sofa_beds} Sofa bed${e.property_features.sofa_beds>1?"s":""}`},"🛋️ ",e.property_features.sofa_beds," Sofa bed"),e.property_features.bedrooms&&React.createElement("span",{className:"bif-property-icon",title:`${e.property_features.bedrooms} bedroom${e.property_features.bedrooms>1?"s":""}`},"🏠 ",e.property_features.bedrooms," Bedroom",e.property_features.bedrooms>1?"s":""),e.property_features.living_areas&&React.createElement("span",{className:"bif-property-icon",title:`${e.property_features.living_areas} living area${e.property_features.living_areas>1?"s":""}`},"🛋️ ",e.property_features.living_areas," Living Area",e.property_features.living_areas>1?"s":""))),React.createElement("div",{className:"bif-property-status-container"},React.createElement("span",{className:`bif-property-status ${((e,t)=>{if(e)return"bif-status-available";switch(t){case"Booked Out":return"bif-status-booked";case"No Tariff Set":return"bif-status-no-rate";case"Min Nights":return"bif-status-min-nights";default:return"bif-status-unavailable"}})(c,e.availability?.availability_reason)}`},s(c,e.availability?.availability_reason,e.availability?.min_nights)),c?React.createElement("button",{onClick:a,className:`bif-btn ${t?"bif-btn-selected":"bif-btn-select"} bif-header-btn`,style:{marginLeft:"0.75rem"}},t?"✓ Selected":"Select Property"):React.createElement("button",{disabled:!0,className:"bif-btn bif-btn-disabled bif-header-btn",style:{marginLeft:"0.75rem"}},s(c,e.availability?.availability_reason,e.availability?.min_nights)))),e.availability?.dates&&React.createElement("div",{className:"bif-availability-details"},React.createElement("h4",{className:"bif-daily-breakdown-title"},"Daily Rate Breakdown"),React.createElement("div",{className:"bif-daily-rates"},e.availability.dates.map(((e,t)=>React.createElement("div",{key:t,className:"bif-daily-rate "+(e.availability?"bif-available":"bif-unavailable")},React.createElement("div",{className:"bif-date"},e.date_formatted),React.createElement("div",{className:"bif-rate"},e.availability?`$${e.rate}`:"Booked Out"===e.availability_reason?"Booked":"No Tariff Set"===e.availability_reason?"No Rate":"N/A"))))),React.createElement("div",{className:"bif-rate-summary"},React.createElement("div",{className:"bif-summary-row"},React.createElement("span",{className:"bif-total"},"Total: $",l)))),t&&e.optional_extras?.length>0&&React.createElement("div",{className:"bif-optional-extras"},React.createElement("h4",{className:"bif-daily-breakdown-title"},"Optional Extras"),React.createElement("div",{className:"bif-extras-list"},e.optional_extras.map((t=>React.createElement("div",{key:t.id,className:"bif-extra-item"},React.createElement("div",{className:"bif-extra-info"},React.createElement("input",{type:"checkbox",checked:e.selectedExtras?.[t.id]||!1,onChange:()=>e.onToggleExtra?.(e.id,t.id)}),React.createElement("label",null,t.description)),React.createElement("div",{className:"bif-extra-price"},"$",t.amount)))))))},_=({checkInDate:e,nights:t,onDateChange:a,onNightsChange:r,onCheckAvailability:n,isLoading:o,minNights:i,maxNights:l,buttonIcon:c="search",searchLayout:s="default"})=>{const u=(new Date).toISOString().split("T")[0],m={search:"🔍",calendar:"📅",home:"🏠",mapMarker:"📍",star:"⭐",pin:"📌",pinSmall:"📍",globe:"🌍"}[c]||"🔍";return"horizontal"===s?React.createElement("div",{className:"bif-search-box-horizontal"},React.createElement("div",{className:"bif-search-field",onClick:()=>document.querySelector('.bif-search-box-horizontal input[type="date"]')?.showPicker?.()},React.createElement("span",{className:"bif-search-icon"},React.createElement("svg",{width:"20",height:"20",viewBox:"0 0 20 20",fill:"none",xmlns:"http://www.w3.org/2000/svg"},React.createElement("rect",{x:"3",y:"4",width:"14",height:"13",rx:"1",stroke:"currentColor",strokeWidth:"1.5"}),React.createElement("line",{x1:"3",y1:"8",x2:"17",y2:"8",stroke:"currentColor",strokeWidth:"1.5"}),React.createElement("line",{x1:"7",y1:"2",x2:"7",y2:"5",stroke:"currentColor",strokeWidth:"1.5",strokeLinecap:"round"}),React.createElement("line",{x1:"13",y1:"2",x2:"13",y2:"5",stroke:"currentColor",strokeWidth:"1.5",strokeLinecap:"round"}))),React.createElement("div",{className:"bif-search-field-content"},React.createElement("label",null,"Check-In"),React.createElement("input",{type:"date",value:e,onChange:e=>a(e.target.value),min:u}))),React.createElement("div",{className:"bif-search-divider"}),React.createElement("div",{className:"bif-search-field"},React.createElement("span",{className:"bif-search-icon"},React.createElement("svg",{width:"20",height:"20",viewBox:"0 0 20 20",fill:"currentColor",xmlns:"http://www.w3.org/2000/svg"},React.createElement("path",{d:"M17 10.5c0 3.59-2.69 6.5-6 6.5s-6-2.91-6-6.5S7.69 4 11 4c.35 0 .69.03 1.02.09A5.5 5.5 0 0 0 17 10.5z"}))),React.createElement("div",{className:"bif-search-field-content"},React.createElement("label",null,"Nights"),React.createElement("select",{value:t,onChange:e=>r(parseInt(e.target.value))},[...Array(l-i+1).keys()].map((e=>{const t=i+e;return React.createElement("option",{key:t,value:t},t)}))))),React.createElement("button",{onClick:n,disabled:!e||o,className:"bif-search-button"},o?"Checking...":"Search")):React.createElement("div",{className:"bif-date-selector"},React.createElement("h2",{className:"bif-section-title"},"Select Your Dates"),React.createElement("div",{className:"bif-date-form"},React.createElement("div",{className:"bif-form-field"},React.createElement("label",null,"Check-in Date"),React.createElement("input",{type:"date",value:e,onChange:e=>a(e.target.value),min:u,className:"bif-date-input"})),React.createElement("div",{className:"bif-form-field"},React.createElement("label",null,"Number of Nights"),React.createElement("select",{value:t,onChange:e=>r(parseInt(e.target.value)),className:"bif-nights-select"},[...Array(l-i+1).keys()].map((e=>{const t=i+e;return React.createElement("option",{key:t,value:t},t," ",1===t?"night":"nights")})))),React.createElement("div",{className:"bif-form-field"},React.createElement("button",{onClick:n,disabled:!e||o,className:"bif-btn bif-btn-primary bif-check-availability bif-has-icon-preview"},o?React.createElement(React.Fragment,null,React.createElement("div",{className:"bif-spinner"}),React.createElement("span",null,"Checking...")):React.createElement(React.Fragment,null,React.createElement("span",{className:"bif-icon-preview"},m),React.createElement("span",null,"Check Availability"))))))},C=({selectedProperties:e,selectedExtras:t,nights:a,total:r,discountCode:n,onDiscountCodeChange:o,onApplyDiscount:i,checkInDate:l,summary:c,showDiscount:s=!1,showRedeemGiftCertificate:u=!1,giftCertificate:m,onGiftCertificateChange:p,showGiftCertificateForm:d,onTriggerShowGiftCertificate:f,onApplyGiftCertificate:b,gcResult:h,gcLoading:y=!1})=>{Object.values(t).flat().reduce(((e,t)=>e+(t.amount||0)),0);const g=c&&parseFloat(c.order_discount_code_total||0)>0;return e&&0!==e.length?React.createElement("div",{className:"bif-booking-summary"},React.createElement("h3",{className:"bif-section-title"},"Booking Summary"),React.createElement("div",{className:"bif-summary-content"},e.map((e=>{const a=e.sub_total||e.availability?.total_cost||e.availability?.dates?.reduce(((e,t)=>e+(t.rate||0)),0)||0,r=e.mandatory_extras_total||e.mandatory_extras?.reduce(((e,t)=>e+parseFloat(t.amount||0)),0)||0,n=e.optional_extras_total||0,o=parseFloat(a)+parseFloat(r)+parseFloat(n);return React.createElement("div",{key:e.id,className:"bif-property-summary"},React.createElement("h5",{className:"bif-property-summary-name"},e.property_name),React.createElement("div",{className:"bif-property-total"},React.createElement("div",{className:"bif-total-row"},React.createElement("span",null,"Property Subtotal"),React.createElement("span",null,"$",parseFloat(a).toFixed(2)))),e.mandatory_extras&&e.mandatory_extras.length>0&&React.createElement("div",{className:"bif-mandatory-extras-summary"},React.createElement("h4",{className:"bif-daily-breakdown-title"},"Mandatory Extras"),e.mandatory_extras.map((e=>React.createElement("div",{key:e.id,className:"bif-total-row",style:{fontSize:"0.875rem",color:"#dc2626"}},React.createElement("span",null,e.description),React.createElement("span",null,"$",parseFloat(e.amount).toFixed(2)))))),e.optional_extras&&e.optional_extras.filter((e=>e.selected)).length>0&&React.createElement("div",{className:"bif-optional-extras-summary"},React.createElement("h4",{className:"bif-daily-breakdown-title"},"Optional Extras"),e.optional_extras.filter((e=>e.selected)).map((e=>React.createElement("div",{key:e.id,className:"bif-total-row",style:{fontSize:"0.875rem",color:"#92400e"}},React.createElement("span",null,e.description),React.createElement("span",null,"$",parseFloat(e.amount).toFixed(2)))))),React.createElement("div",{className:"bif-property-total"},React.createElement("div",{className:"bif-total-row bif-subtotal"},React.createElement("span",null,"Property Total"),React.createElement("span",null,"$",parseFloat(o).toFixed(2)))),!e.optional_extras&&t[e.id]&&t[e.id].length>0&&React.createElement("div",{className:"bif-optional-extras-summary"},React.createElement("h4",{className:"bif-daily-breakdown-title"},"Selected Optional Extras"),t[e.id].map((e=>React.createElement("div",{key:e.id,className:"bif-total-row",style:{fontSize:"0.875rem",color:"#92400e"}},React.createElement("span",null,e.description),React.createElement("span",null,"$",parseFloat(e.amount).toFixed(2)))))))})),s&&React.createElement("div",{className:"bif-summary-section"},React.createElement("div",{className:"bif-discount-form"},React.createElement("input",{type:"text",placeholder:"Enter discount code",value:n,onChange:e=>o(e.target.value),className:"bif-discount-input"}),React.createElement("button",{onClick:()=>{n.trim()&&i(n)},className:"bif-btn "+(n.trim()?"bif-btn-primary":"bif-btn-secondary")},"Apply")),g&&React.createElement("div",{className:"bif-discount-applied"},"Discount code applied")),u&&c&&React.createElement("div",{className:"bif-summary-section"},React.createElement("div",{className:"bif-gift-certificate-section"},d?React.createElement("div",{className:"bif-gift-certificate-form"},React.createElement("div",{className:"bif-form-row"},React.createElement("div",{className:"bif-form-field"},React.createElement("label",null,"Certificate Number:"),React.createElement("input",{type:"text",value:m.number,onChange:e=>p({...m,number:e.target.value}),className:"bif-form-control",placeholder:"Enter certificate number",disabled:y})),React.createElement("div",{className:"bif-form-field"},React.createElement("label",null,"Pin:"),React.createElement("input",{type:"number",value:m.pin,onChange:e=>p({...m,pin:e.target.value}),className:"bif-form-control",placeholder:"Enter pin",disabled:y}))),React.createElement("button",{className:"bif-btn bif-btn-secondary",onClick:b,disabled:y},y?"Applying...":"Apply")):React.createElement("button",{className:"bif-btn bif-btn-secondary",onClick:f},"Apply Gift Certificate"),h&&h.valid&&React.createElement("div",{className:"bif-gift-certificate-success"},React.createElement("p",null,"✅ Successfully Applied Gift Certificate"),React.createElement("p",null,h.result),parseFloat(h.total)-parseFloat(h.gc_amount_applied)==0?React.createElement("p",null,React.createElement("strong",null,"🎉 Your gift certificate covers the full amount! No additional payment required.")):React.createElement(React.Fragment,null,React.createElement("p",null,"Remaining balance to pay: ",React.createElement("strong",null,"$",(parseFloat(h.total)-parseFloat(h.gc_amount_applied)).toFixed(2))),React.createElement("p",{style:{fontSize:"0.875rem",color:"#6b7280"}},"*Credit card surcharge will be added at payment")),React.createElement("p",null,"Gift Certificate balance after order: ",React.createElement("strong",null,"$",parseFloat(h.gc_balance_after_order).toFixed(2)))))),React.createElement("div",{className:"bif-grand-total"},h&&h.valid&&React.createElement("div",{className:"bif-total-row"},React.createElement("span",null,"Order Total"),React.createElement("span",null,"$",parseFloat(h.total||c.order_grand_total).toFixed(2))),h&&h.valid&&React.createElement("div",{className:"bif-total-row",style:{color:"#059669"}},React.createElement("span",null,"Gift Certificate Applied"),React.createElement("span",null,"-$",parseFloat(h.gc_amount_applied).toFixed(2))),React.createElement("div",{className:"bif-total-main"},React.createElement("span",null,h&&h.valid&&parseFloat(h.total)-parseFloat(h.gc_amount_applied)==0?"Total Paid by Gift Certificate":h&&h.valid?"Balance Due":"Total Cost"),React.createElement("span",{className:"bif-total-amount"},"$",h&&h.valid?(parseFloat(h.total)-parseFloat(h.gc_amount_applied)).toFixed(2):parseFloat(r).toFixed(2))),h&&h.valid&&parseFloat(h.total)-parseFloat(h.gc_amount_applied)>0&&c&&c.order_has_surcharge&&React.createElement("div",{className:"bif-surcharge-note",style:{fontSize:"0.875rem",color:"#6b7280",marginTop:"0.5rem"}},"*Credit card surcharge will be added at payment"),c&&parseFloat(c.order_discount_code_total||0)>0&&React.createElement("div",{className:"bif-discount-text"},"Includes discount of $",parseFloat(c.order_discount_code_total||0).toFixed(2))))):null},w=({isOpen:e,onClose:a,title:r,content:n})=>((0,t.useEffect)((()=>(document.body.style.overflow=e?"hidden":"",()=>{document.body.style.overflow=""})),[e]),(0,t.useEffect)((()=>{const t=t=>{"Escape"===t.key&&e&&a()};return e&&document.addEventListener("keydown",t),()=>{document.removeEventListener("keydown",t)}}),[e,a]),e?React.createElement("div",{className:"bif-modal-overlay",onClick:a},React.createElement("div",{className:"bif-modal",onClick:e=>e.stopPropagation()},React.createElement("div",{className:"bif-modal-header"},React.createElement("h3",{className:"bif-modal-title"},r),React.createElement("button",{className:"bif-modal-close",onClick:a,"aria-label":"Close modal"},"×")),React.createElement("div",{className:"bif-modal-content",dangerouslySetInnerHTML:{__html:n}}))):null),N=({userDetails:e,onUpdateDetails:t,formErrors:a,showSuburb:r=!0,showPostcode:n=!0,showComments:o=!1})=>React.createElement("div",{className:"bif-customer-details"},React.createElement("h2",{className:"bif-section-title"},"Your Details"),React.createElement("div",{className:"bif-customer-form"},React.createElement("div",{className:"bif-form-row"},React.createElement("div",{className:"bif-form-field"},React.createElement("label",null,"First Name *"),React.createElement("input",{type:"text",value:e.firstName,onChange:e=>t("firstName",e.target.value),placeholder:"Enter your first name",className:a.firstName?"bif-error":""}),a.firstName&&React.createElement("div",{className:"bif-field-error"},a.firstName)),React.createElement("div",{className:"bif-form-field"},React.createElement("label",null,"Last Name *"),React.createElement("input",{type:"text",value:e.lastName,onChange:e=>t("lastName",e.target.value),placeholder:"Enter your last name",className:a.lastName?"bif-error":""}),a.lastName&&React.createElement("div",{className:"bif-field-error"},a.lastName))),React.createElement("div",{className:"bif-form-row"},React.createElement("div",{className:"bif-form-field"},React.createElement("label",null,"Email *"),React.createElement("input",{type:"email",value:e.email,onChange:e=>t("email",e.target.value),placeholder:"Enter your email address",className:a.email?"bif-error":""}),a.email&&React.createElement("div",{className:"bif-field-error"},a.email)),React.createElement("div",{className:"bif-form-field"},React.createElement("label",null,"Phone *"),React.createElement("input",{type:"tel",value:e.phone,onChange:e=>t("phone",e.target.value),placeholder:"Enter your phone number",className:a.phone?"bif-error":""}),a.phone&&React.createElement("div",{className:"bif-field-error"},a.phone))),(n||r)&&React.createElement("div",{className:"bif-form-row"},n&&React.createElement("div",{className:"bif-form-field"},React.createElement("label",null,"Postcode"),React.createElement("input",{type:"text",value:e.postcode,onChange:e=>t("postcode",e.target.value),placeholder:"Enter your postcode"})),r&&React.createElement("div",{className:"bif-form-field"},React.createElement("label",null,"Suburb"),React.createElement("input",{type:"text",value:e.suburb,onChange:e=>t("suburb",e.target.value),placeholder:"Enter your suburb"}))),o&&React.createElement("div",{className:"bif-form-row bif-full-width"},React.createElement("div",{className:"bif-form-field"},React.createElement("label",null,"Comments"),React.createElement("textarea",{value:e.comments,onChange:e=>t("comments",e.target.value),rows:4,placeholder:"Any special requests or comments..."}))))),k=({summary:e,propertyIds:a,userDetails:r,paymentType:n,giftCertificate:o})=>{const i=(0,b.useStripe)(),l=(0,b.useElements)(),[c,s]=(0,t.useState)(!1),[u,m]=(0,t.useState)(""),[p,d]=(0,t.useState)(!1),[f,h]=(0,t.useState)(""),g=async t=>{t.preventDefault(),s(!0),m("");try{let t={amount:"deposit"===n?e.order_deposit_amount:e.order_payable_now,currency:e?.order_currency||"AUD",summary:e,propertyIds:"string"==typeof a?a.split(",").map((e=>parseInt(e.trim()))):a,userDetails:r,paymentType:n};if("gift"===n&&o)t.giftCertificateApplied=!0,t.giftCertificate=o,t.amount=0;else{if(!i||!l)return void console.error("Stripe.js has not loaded yet.");const e=l.getElement(b.CardElement),{paymentMethod:a,error:r}=await i.createPaymentMethod({type:"card",card:e});if(r)return console.error(r),m(r.message),void s(!1);t.stripePaymentMethodId=a.id,o&&o.valid&&(t.giftCertificateApplied=!0,t.giftCertificate=o)}const c=await fetch(`${y}/bookitfast/v1/process-payment`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(t)}),u=await c.json();if(!u.success)throw new Error(u.message||"Payment failed.");console.log("Payment successful:",u),h(u.data.charge),d(!0)}catch(e){console.error("Payment error:",e),m(e.message)}finally{s(!1)}};return React.createElement("div",{className:"bif-payment-container"},React.createElement("h3",null,"gift"===n?"🎁 Gift Certificate Payment":"💳 Payment Details"),u&&React.createElement("div",{className:"bif-error-message"},u),p?React.createElement("div",{className:"bif-success-message"},React.createElement("p",null,React.createElement("strong",null,"✅ Payment Successful!")),f&&React.createElement("p",null,React.createElement("a",{href:f,target:"_blank",rel:"noopener noreferrer"},"📄 Click here to view your receipt"))):"gift"===n?React.createElement("div",{className:"bif-gift-certificate-payment-form"},React.createElement("div",{className:"bif-gift-certificate-summary"},React.createElement("p",null,"🎁 ",React.createElement("strong",null,"Paying with Gift Certificate")),React.createElement("p",null,"Amount: ",React.createElement("strong",null,"$",parseFloat(o.gc_amount_applied||0).toFixed(2))),React.createElement("p",null,"No credit card required - your gift certificate will be charged automatically.")),React.createElement("button",{onClick:g,disabled:c,className:"bif-btn bif-btn-primary bif-btn-large"},c?"Processing...":"Complete Booking")):React.createElement("form",{onSubmit:g,className:"bif-stripe-form"},React.createElement("div",{className:"bif-card-element-container"},React.createElement(b.CardElement,{options:{hidePostalCode:!0,style:{base:{fontSize:"16px",color:"#424770","::placeholder":{color:"#aab7c4"}},invalid:{color:"#9e2146"}}}})),React.createElement("button",{type:"submit",disabled:!i||c,className:"bif-btn bif-btn-primary bif-btn-large"},c?"Processing...":"Pay Now")))},S=({propertyIds:e="",showDiscount:a=!1,showSuburb:r=!0,showPostcode:n=!0,showRedeemGiftCertificate:o=!1,showComments:i=!1,buttonColor:l="#0073aa",buttonTextColor:c="#ffffff",minNights:s=1,maxNights:u=14,showPropertyImages:m=!1,includeIcons:p=!1,layoutStyle:d="cards",buttonIcon:S="search",searchLayout:x="default"})=>{const P=g("nights"),O=P&&!isNaN(P)?Math.max(parseInt(P,10),s):s,I=g("start"),T=g("discount"),j=I?(e=>{const t=e.split("-");if(3===t.length){const[e,a,r]=t.map(Number);if(!isNaN(e)&&!isNaN(a)&&!isNaN(r)){const t=new Date(r,a-1,e);return t.setHours(12,0,0,0),t.toISOString().split("T")[0]}}return null})(I):"",D="string"==typeof e?e:"",[F,A]=(0,t.useState)({date:j,nights:O}),[B,$]=(0,t.useState)(null),[G,L]=(0,t.useState)({}),[M,z]=(0,t.useState)(null),[U,q]=(0,t.useState)(null),[H,Y]=(0,t.useState)(!1),[W,V]=(0,t.useState)(""),[Z,J]=(0,t.useState)({firstName:"",lastName:"",phone:"",email:"",postcode:"",suburb:"",comments:""}),[K,Q]=(0,t.useState)(!1),[X,ee]=(0,t.useState)(!1),[te,ae]=(0,t.useState)(T),[re,ne]=(0,t.useState)(null),[oe,ie]=(0,t.useState)(!1),[le,ce]=(0,t.useState)(null),[se,ue]=(0,t.useState)({}),[me,pe]=(0,t.useState)({number:"",pin:""}),[de,fe]=(0,t.useState)(!1),[be,he]=(0,t.useState)(null),[ye,ge]=(0,t.useState)(!1),[Ee,ve]=(0,t.useState)({}),[Re,_e]=(0,t.useState)(!1),[Ce,we]=(0,t.useState)({isOpen:!1,title:"",content:""});(0,t.useEffect)((()=>{j&&O&&(console.log("Auto-checking availability with:",j,O),Ne(j,O))}),[j,O]);const Ne=async(e=F.date,t=F.nights)=>{if(!e||!D)return void console.warn("fetchAvailability skipped - Missing startDate or propertyIds");const a=F.date,r=D.split(",").filter((e=>""!==e.trim()));Y(!0),V(""),_e(!1);try{const e=await fetch(`${y}/bookitfast/v1/availability`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({ids:r,start:a,nights:t})}),n=await e.json();$(n),_e(!0);const o=Object.keys(n).reduce(((e,t)=>(e[t]=!1,e)),{});L(o)}catch(e){console.error(e),V("Failed to fetch availability. Please try again.")}finally{Y(!1)}},ke=(e,t)=>{ve((a=>{const r=a[e]||{},n={...a,[e]:{...r,[t]:!r[t]}};return Se(G,te,n,0),n}))},Se=async(e,t=null,a=Ee,r=0)=>{const n=F.date,o=F.nights,i=new Date(new Date(n).getTime()+864e5*o).toISOString().split("T")[0];Y(!0),V("");try{const r=await fetch(`${y}/bookitfast/v1/availability/summary`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({selected:e,selected_optional_extras:a,start:n,end:i,discount_code:t||null})});if(!r.ok)throw new Error(`HTTP error! status: ${r.status}`);const o=await r.json();q(o),o.stripe_publishable_key&&z(f(o.stripe_publishable_key))}catch(n){console.error("Error fetching summary:",n),r<3?(console.log(`Retrying... Attempt ${r+1}`),await Se(e,t,a,r+1)):V("Failed to fetch summary. Please try again.")}finally{Y(!1)}},xe=e=>{(()=>{const e={};return Z.firstName.trim()||(e.firstName="First name is required"),Z.lastName.trim()||(e.lastName="Last name is required"),Z.email.trim()||(e.email="Email is required"),Z.phone.trim()||(e.phone="Phone is required"),K||(e.agreeToTerms="You must agree to the terms and conditions"),X||(e.consentToDataSharing="You must consent to data sharing with Book It Fast service"),ue(e),0===Object.keys(e).length})()&&(ce(e),ie(!0))},Pe=B?Object.entries(B).filter((([e])=>G[e])).map((([e,t])=>({id:e,...t,...U?.property_summaries?.[e]||{},selectedExtras:Ee[e],onToggleExtra:ke}))):[];return React.createElement("div",{className:"bif-booking-container",style:{"--bif-button-color":l,"--bif-button-color-hover":`${l}dd`,"--bif-button-color-active":`${l}bb`,"--bif-button-text-color":c}},React.createElement("div",{className:"bif-booking-steps"},React.createElement(_,{checkInDate:F.date,nights:F.nights,onDateChange:e=>A((t=>({...t,date:e}))),onNightsChange:e=>A((t=>({...t,nights:e}))),onCheckAvailability:Ne,isLoading:H,minNights:s,maxNights:u,buttonIcon:S,searchLayout:x}),W&&React.createElement("div",{className:"bif-error-message"},W),Re&&B&&React.createElement("div",{className:"bif-property-list"},React.createElement("h2",{className:"bif-section-title"},"Available Properties"),React.createElement("div",{className:`bif-properties bif-properties--${d}`},Object.entries(B).map((([e,t])=>{const a={key:e,property:{id:e,...t,selectedExtras:Ee[e],onToggleExtra:ke},isSelected:G[e],onToggle:()=>(async e=>{const t={...G,[e]:!G[e]};L(t),Object.values(t).includes(!0)?await Se(t,te):q(null)})(e),nights:F.nights,checkInDate:F.date,showPropertyImages:m,includeIcons:p};switch(d){case"grid":return React.createElement(E,a);case"rows":return React.createElement(v,a);default:return React.createElement(R,a)}})))),U&&Pe.length>0&&React.createElement(C,{selectedProperties:Pe,selectedExtras:Ee,nights:F.nights,total:(U.order_payable_now||0)-(U.order_surcharge||0),discountCode:te,onDiscountCodeChange:ae,onApplyDiscount:e=>{Object.keys(G).some((e=>G[e]))&&Se(G,e)},checkInDate:F.date,summary:U,showDiscount:a,showRedeemGiftCertificate:o,giftCertificate:me,onGiftCertificateChange:pe,showGiftCertificateForm:de,onTriggerShowGiftCertificate:()=>{fe(!0)},onApplyGiftCertificate:async e=>{if(e.preventDefault(),console.log("Gift Certificate: Apply button clicked"),console.log("Gift Certificate Data:",me),console.log("Current Summary:",U),ye)return void console.log("Gift Certificate: Already processing, ignoring click");if(!U)return void console.error("Gift Certificate: No summary available");if(!me.number||!me.pin)return console.error("Gift Certificate: Missing number or pin"),void alert("Please enter both certificate number and pin");ge(!0),console.log("Gift Certificate: Setting loading state to true");let t={...U};if(U.order_weekly_discount>0){console.log("Gift Certificate: Weekly discount detected, adjusting summary for gift certificate calculation"),console.log("Gift Certificate: Original order_grand_total:",U.order_grand_total),console.log("Gift Certificate: Order weekly discount:",U.order_weekly_discount),console.log("Gift Certificate: Order surcharge:",U.order_surcharge);const e=parseFloat(U.order_sub_total)+parseFloat(U.order_mandatory_extras_total);console.log("Gift Certificate: Total before weekly discount (excluding surcharge):",e),t={...U,order_grand_total:e.toString(),order_total_before_surcharge:e,order_payable_now:e.toString(),order_surcharge:0,order_has_surcharge:!1},console.log("Gift Certificate: Adjusted summary for gift certificate:",t)}const a={certificate:me,summary:t};console.log("Gift Certificate: Sending request with data:",a);try{const e=await fetch(`${y}/bookitfast/v1/apply-gift-certificate`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(a)});if(console.log("Gift Certificate: Response status:",e.status),!e.ok)throw new Error(`HTTP error! status: ${e.status}`);const t=await e.json();console.log("Gift Certificate: Response data:",t),t.valid?(he(t),t.summary&&(q(t.summary),console.log("Gift Certificate: Updated summary:",t.summary)),console.log("Gift Certificate: Application successful"),console.log("Gift Certificate: Order payable now:",t.order_payable_now)):(console.error("Gift Certificate: API returned error:",t),alert(t.message||"Failed to apply gift certificate"))}catch(e){console.error("Gift Certificate: Error applying certificate:",e),alert("Error applying gift certificate. Please try again.")}finally{ge(!1),console.log("Gift Certificate: Setting loading state to false")}},gcResult:be,gcLoading:ye}),U&&Pe.length>0&&React.createElement(N,{userDetails:Z,onUpdateDetails:(e,t)=>{J((a=>({...a,[e]:t}))),se[e]&&ue((t=>({...t,[e]:null})))},formErrors:se,showSuburb:r,showPostcode:n,showComments:i}),U&&Pe.length>0&&React.createElement("div",{className:"bif-terms-payment"},React.createElement("div",{className:"bif-terms-checkbox"},React.createElement("input",{type:"checkbox",id:"agreeToTerms",checked:K,onChange:()=>Q(!K)}),React.createElement("label",{htmlFor:"agreeToTerms"},"I have read and agree to the"," ",U.order_booking_conditions?.map(((e,t)=>React.createElement("span",{key:t},"local"===e.type?React.createElement("a",{href:"#",onClick:t=>{t.preventDefault(),we({isOpen:!0,title:e.title,content:e.content})},style:{textDecoration:"underline",cursor:"pointer"}},e.title):React.createElement("a",{href:e.url,target:"_blank",rel:"noopener noreferrer"},e.title),t<U.order_booking_conditions.length-2?", ":"",t===U.order_booking_conditions.length-2?" and ":"")))),se.agreeToTerms&&React.createElement("div",{className:"bif-field-error"},se.agreeToTerms)),React.createElement("div",{className:"bif-privacy-consent"},React.createElement("input",{type:"checkbox",id:"consentToDataSharing",checked:X,onChange:()=>ee(!X)}),React.createElement("label",{htmlFor:"consentToDataSharing"},"I consent to my personal information being transmitted to and processed by Book It Fast (",React.createElement("a",{href:"https://bookitfast.app/privacy-policy",target:"_blank",rel:"noopener noreferrer"},"Privacy Policy"),") for booking and payment processing purposes."),se.consentToDataSharing&&React.createElement("div",{className:"bif-field-error"},se.consentToDataSharing)),!oe&&React.createElement("div",{className:"bif-payment-options"},Object.keys(se).length>0&&React.createElement("div",{className:"bif-validation-error"},"Please complete all required fields before proceeding with payment."),be&&be.valid&&parseFloat(be.total)-parseFloat(be.gc_amount_applied)==0?React.createElement("div",{className:"bif-gift-certificate-payment"},React.createElement("div",{className:"bif-gift-certificate-full-coverage"},React.createElement("p",null,"🎉 ",React.createElement("strong",null,"Your gift certificate covers the full booking amount!")),React.createElement("p",null,"No additional payment required.")),React.createElement("button",{className:"bif-btn bif-btn-primary bif-btn-large",onClick:()=>xe("gift")},"🎁 Complete Booking with Gift Certificate")):React.createElement(React.Fragment,null,U.order_surcharge>0&&parseFloat(U.order_payable_now||0)>0&&React.createElement("div",{className:"bif-surcharge-info"},React.createElement("p",null,"Please note a credit card surcharge applies of ",U.order_deposit_surcharge>0&&` $${U.order_deposit_surcharge} for deposit or `,"$",U.order_surcharge," for the full payment.")),U.order_deposit_amount>0?React.createElement("div",{className:"bif-payment-buttons"},React.createElement("button",{className:"bif-btn bif-btn-primary",onClick:()=>xe("deposit")},"💳 Pay Deposit (",h(U?.order_currency||"AUD"),U.order_deposit_amount,")"),React.createElement("button",{className:"bif-btn bif-btn-primary",onClick:()=>xe("full")},"💳 Pay In Full (",h(U?.order_currency||"AUD"),be&&be.valid?parseFloat(be.order_payable_now).toFixed(2):U.order_payable_now,")")):React.createElement("button",{className:"bif-btn bif-btn-primary bif-btn-large",onClick:()=>xe("full")},"💳 Complete Booking - ",h(U?.order_currency||"AUD"),be&&be.valid?parseFloat(be.order_payable_now).toFixed(2):U.order_payable_now)))),U&&oe&&React.createElement("div",{className:"bif-payment-form-container"},"gift"===le?React.createElement(k,{summary:U,propertyIds:D.split(",").map((e=>parseInt(e.trim()))),userDetails:Z,paymentType:le,giftCertificate:be}):M&&React.createElement(b.Elements,{stripe:M},React.createElement(k,{summary:U,propertyIds:D.split(",").map((e=>parseInt(e.trim()))),userDetails:Z,paymentType:le,giftCertificate:be})))),React.createElement(w,{isOpen:Ce.isOpen,onClose:()=>we({isOpen:!1,title:"",content:""}),title:Ce.title,content:Ce.content}))},x=window.wp.blocks,P=window.wp.blockEditor,O=window.wp.components,I=window.wp.primitives,T=window.ReactJSXRuntime,j=(0,T.jsx)(I.SVG,{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24",children:(0,T.jsx)(I.Path,{d:"M13 5c-3.3 0-6 2.7-6 6 0 1.4.5 2.7 1.3 3.7l-3.8 3.8 1.1 1.1 3.8-3.8c1 .8 2.3 1.3 3.7 1.3 3.3 0 6-2.7 6-6S16.3 5 13 5zm0 10.5c-2.5 0-4.5-2-4.5-4.5s2-4.5 4.5-4.5 4.5 2 4.5 4.5-2 4.5-4.5 4.5z"})}),D=(0,T.jsx)(I.SVG,{viewBox:"0 0 24 24",xmlns:"http://www.w3.org/2000/svg",children:(0,T.jsx)(I.Path,{d:"M19 3H5c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h14c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2-2zm.5 16c0 .3-.2.5-.5.5H5c-.3 0-.5-.2-.5-.5V7h15v12zM9 10H7v2h2v-2zm0 4H7v2h2v-2zm4-4h-2v2h2v-2zm4 0h-2v2h2v-2zm-4 4h-2v2h2v-2zm4 0h-2v2h2v-2z"})}),F=(0,T.jsx)(I.SVG,{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24",children:(0,T.jsx)(I.Path,{d:"M12 4L4 7.9V20h16V7.9L12 4zm6.5 14.5H14V13h-4v5.5H5.5V8.8L12 5.7l6.5 3.1v9.7z"})}),A=(0,T.jsx)(I.SVG,{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24",children:(0,T.jsx)(I.Path,{d:"M12 9c-.8 0-1.5.7-1.5 1.5S11.2 12 12 12s1.5-.7 1.5-1.5S12.8 9 12 9zm0-5c-3.6 0-6.5 2.8-6.5 6.2 0 .8.3 1.8.9 3.1.5 1.1 1.2 2.3 2 3.6.7 1 3 3.8 3.2 3.9l.4.5.4-.5c.2-.2 2.6-2.9 3.2-3.9.8-1.2 1.5-2.5 2-3.6.6-1.3.9-2.3.9-3.1C18.5 6.8 15.6 4 12 4zm4.3 8.7c-.5 1-1.1 2.2-1.9 3.4-.5.7-1.7 2.2-2.4 3-.7-.8-1.9-2.3-2.4-3-.8-1.2-1.4-2.3-1.9-3.3-.6-1.4-.7-2.2-.7-2.5 0-2.6 2.2-4.7 5-4.7s5 2.1 5 4.7c0 .2-.1 1-.7 2.4z"})}),B=(0,T.jsx)(I.SVG,{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24",children:(0,T.jsx)(I.Path,{d:"M11.776 4.454a.25.25 0 01.448 0l2.069 4.192a.25.25 0 00.188.137l4.626.672a.25.25 0 01.139.426l-3.348 3.263a.25.25 0 00-.072.222l.79 4.607a.25.25 0 01-.362.263l-4.138-2.175a.25.25 0 00-.232 0l-4.138 2.175a.25.25 0 01-.363-.263l.79-4.607a.25.25 0 00-.071-.222L4.754 9.881a.25.25 0 01.139-.426l4.626-.672a.25.25 0 00.188-.137l2.069-4.192z"})}),$=(0,T.jsx)(I.SVG,{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24",children:(0,T.jsx)(I.Path,{d:"m21.5 9.1-6.6-6.6-4.2 5.6c-1.2-.1-2.4.1-3.6.7-.1 0-.1.1-.2.1-.5.3-.9.6-1.2.9l3.7 3.7-5.7 5.7v1.1h1.1l5.7-5.7 3.7 3.7c.4-.4.7-.8.9-1.2.1-.1.1-.2.2-.3.6-1.1.8-2.4.6-3.6l5.6-4.1zm-7.3 3.5.1.9c.1.9 0 1.8-.4 2.6l-6-6c.8-.4 1.7-.5 2.6-.4l.9.1L15 4.9 19.1 9l-4.9 3.6z"})}),G=(0,T.jsx)(I.SVG,{viewBox:"0 0 24 24",xmlns:"http://www.w3.org/2000/svg",children:(0,T.jsx)(I.Path,{d:"M10.97 10.159a3.382 3.382 0 0 0-2.857.955l1.724 1.723-2.836 2.913L7 17h1.25l2.913-2.837 1.723 1.723a3.38 3.38 0 0 0 .606-.825c.33-.63.446-1.343.35-2.032L17 10.695 13.305 7l-2.334 3.159Z"})}),L=(0,T.jsx)(I.SVG,{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24",children:(0,T.jsx)(I.Path,{d:"M12 4c-4.4 0-8 3.6-8 8s3.6 8 8 8 8-3.6 8-8-3.6-8-8-8Zm6.5 8c0 .6 0 1.2-.2 1.8h-2.7c0-.6.2-1.1.2-1.8s0-1.2-.2-1.8h2.7c.2.6.2 1.1.2 1.8Zm-.9-3.2h-2.4c-.3-.9-.7-1.8-1.1-2.4-.1-.2-.2-.4-.3-.5 1.6.5 3 1.6 3.8 3ZM12.8 17c-.3.5-.6 1-.8 1.3-.2-.3-.5-.8-.8-1.3-.3-.5-.6-1.1-.8-1.7h3.3c-.2.6-.5 1.2-.8 1.7Zm-2.9-3.2c-.1-.6-.2-1.1-.2-1.8s0-1.2.2-1.8H14c.1.6.2 1.1.2 1.8s0 1.2-.2 1.8H9.9ZM11.2 7c.3-.5.6-1 .8-1.3.2.3.5.8.8 1.3.3.5.6 1.1.8 1.7h-3.3c.2-.6.5-1.2.8-1.7Zm-1-1.2c-.1.2-.2.3-.3.5-.4.7-.8 1.5-1.1 2.4H6.4c.8-1.4 2.2-2.5 3.8-3Zm-1.8 8H5.7c-.2-.6-.2-1.1-.2-1.8s0-1.2.2-1.8h2.7c0 .6-.2 1.1-.2 1.8s0 1.2.2 1.8Zm-2 1.4h2.4c.3.9.7 1.8 1.1 2.4.1.2.2.4.3.5-1.6-.5-3-1.6-3.8-3Zm7.4 3c.1-.2.2-.3.3-.5.4-.7.8-1.5 1.1-2.4h2.4c-.8 1.4-2.2 2.5-3.8 3Z"})}),{useState:M,useEffect:z}=wp.element;(0,x.registerBlockType)("bookitfast/multi-embed",{title:"Book It Fast Availability",description:"A multi-property booking embed for WordPress.",icon:"calendar",category:"widgets",attributes:{propertyIds:{type:"string",default:""},showDiscount:{type:"boolean",default:!1},showSuburb:{type:"boolean",default:!1},showPostcode:{type:"boolean",default:!1},showRedeemGiftCertificate:{type:"boolean",default:!1},showComments:{type:"boolean",default:!1},buttonColor:{type:"string",default:"#0073aa"},buttonTextColor:{type:"string",default:"#ffffff"},minNights:{type:"number",default:1},maxNights:{type:"number",default:14},showPropertyImages:{type:"boolean",default:!1},includeIcons:{type:"boolean",default:!1},layoutStyle:{type:"string",default:"cards"},buttonIcon:{type:"string",default:"search"},searchLayout:{type:"string",default:"default"}},edit:({attributes:e,setAttributes:t})=>{const a=(0,P.useBlockProps)(),[r,n]=M([]),[o,i]=M(!0),[l,c]=M(null);return z((()=>{wp.apiFetch({path:"/bookitfast/v1/properties"}).then((e=>{e.success?n(e.properties):c("Failed to fetch properties.")})).catch((e=>{console.error("API Fetch Error:",e),c("Error fetching properties.")})).finally((()=>i(!1)))}),[]),React.createElement("div",a,React.createElement(P.InspectorControls,null,React.createElement(O.PanelBody,{title:"Search Layout",initialOpen:!0},React.createElement(O.SelectControl,{label:"Search Box Style",value:e.searchLayout,options:[{label:"Default (Stacked)",value:"default"},{label:"Horizontal (Check-In & Nights)",value:"horizontal"}],onChange:e=>t({searchLayout:e}),help:"Choose the layout style for the search box",__next40pxDefaultSize:!0,__nextHasNoMarginBottom:!0})),React.createElement(O.PanelBody,{title:"Search Options",initialOpen:!1},o?React.createElement("p",null,"Loading properties..."):l?React.createElement("p",{style:{color:"red"}},l):React.createElement(O.SelectControl,{multiple:!0,label:"Select Properties",value:e.propertyIds?e.propertyIds.split(","):[],options:r.map((e=>({label:e.title,value:e.id.toString()}))),onChange:e=>{const a=e.join(",");t({propertyIds:a})},__next40pxDefaultSize:!0,__nextHasNoMarginBottom:!0}),React.createElement(O.RangeControl,{label:"Minimum Nights",value:e.minNights,onChange:e=>t({minNights:e}),min:1,max:30,step:1}),React.createElement(O.RangeControl,{label:"Maximum Nights",value:e.maxNights,onChange:e=>t({maxNights:e}),min:e.minNights||1,max:90,step:1}),React.createElement(O.BaseControl,{label:"Button Color",id:"button-color-control"},React.createElement(O.ColorPalette,{value:e.buttonColor,onChange:e=>t({buttonColor:e}),colors:[{name:"Blue",color:"#0073aa"},{name:"Green",color:"#46b450"},{name:"Red",color:"#dc3232"},{name:"Orange",color:"#ff6900"},{name:"Purple",color:"#8224e3"},{name:"Dark",color:"#333333"}]})),React.createElement(O.BaseControl,{label:"Button Text Color",id:"button-text-color-control"},React.createElement(O.ColorPalette,{value:e.buttonTextColor,onChange:e=>t({buttonTextColor:e}),colors:[{name:"White",color:"#ffffff"},{name:"Black",color:"#000000"},{name:"Dark Gray",color:"#333333"},{name:"Light Gray",color:"#666666"}]})),React.createElement("div",{style:{marginBottom:"16px"}},React.createElement("label",{style:{display:"block",marginBottom:"8px",fontSize:"11px",fontWeight:"500",textTransform:"uppercase",color:"#1e1e1e"}},"Button Icon"),React.createElement("div",{style:{display:"grid",gridTemplateColumns:"repeat(4, 1fr)",gap:"8px",padding:"8px",border:"1px solid #ddd",borderRadius:"4px",backgroundColor:"#fff"}},[{icon:j,name:"search",label:"Search"},{icon:D,name:"calendar",label:"Calendar"},{icon:F,name:"home",label:"Home"},{icon:A,name:"mapMarker",label:"Map Marker"},{icon:B,name:"star",label:"Star"},{icon:$,name:"pin",label:"Pin"},{icon:G,name:"pinSmall",label:"Pin Small"},{icon:L,name:"globe",label:"Globe"}].map((({icon:a,name:r,label:n})=>React.createElement(O.Button,{key:r,onClick:()=>t({buttonIcon:r}),variant:e.buttonIcon===r?"primary":"secondary",style:{width:"48px",height:"48px",padding:"8px",display:"flex",alignItems:"center",justifyContent:"center"},title:n},React.createElement(O.Icon,{icon:a,size:20}))))),React.createElement("p",{style:{fontSize:"12px",color:"#757575",margin:"8px 0 0 0",fontStyle:"italic"}},"Select an icon for the search button"))),React.createElement(O.PanelBody,{title:"Results Layout",initialOpen:!1},React.createElement(O.SelectControl,{label:"Layout Style",value:e.layoutStyle,options:[{label:"Card List",value:"cards"},{label:"Grid Tiles",value:"grid"},{label:"Compact Rows",value:"rows"}],onChange:e=>t({layoutStyle:e}),help:"Choose how property results are displayed",__next40pxDefaultSize:!0,__nextHasNoMarginBottom:!0}),React.createElement(O.ToggleControl,{label:"Show Property Images",checked:e.showPropertyImages,onChange:e=>t({showPropertyImages:e}),__nextHasNoMarginBottom:!0}),React.createElement(O.ToggleControl,{label:"Include Icons",checked:e.includeIcons,onChange:e=>t({includeIcons:e}),help:"Show icons for bed size, inclusions, etc.",__nextHasNoMarginBottom:!0})),React.createElement(O.PanelBody,{title:"Form Settings",initialOpen:!1},React.createElement(O.ToggleControl,{label:"Show Discount Field",checked:e.showDiscount,onChange:e=>t({showDiscount:e}),__nextHasNoMarginBottom:!0}),React.createElement(O.ToggleControl,{label:"Show Suburb Field",checked:e.showSuburb,onChange:e=>t({showSuburb:e}),__nextHasNoMarginBottom:!0}),React.createElement(O.ToggleControl,{label:"Show Postcode Field",checked:e.showPostcode,onChange:e=>t({showPostcode:e}),__nextHasNoMarginBottom:!0}),React.createElement(O.ToggleControl,{label:"Show Redeem Gift Certificate Section",checked:e.showRedeemGiftCertificate,onChange:e=>t({showRedeemGiftCertificate:e}),__nextHasNoMarginBottom:!0}),React.createElement(O.ToggleControl,{label:"Show Comments Field",checked:e.showComments,onChange:e=>t({showComments:e}),__nextHasNoMarginBottom:!0}))),React.createElement(S,{propertyIds:e.propertyIds,showDiscount:e.showDiscount,showSuburb:e.showSuburb,showPostcode:e.showPostcode,showRedeemGiftCertificate:e.showRedeemGiftCertificate,showComments:e.showComments,buttonColor:e.buttonColor,buttonTextColor:e.buttonTextColor,buttonIcon:e.buttonIcon,minNights:e.minNights,maxNights:e.maxNights,showPropertyImages:e.showPropertyImages,includeIcons:e.includeIcons,layoutStyle:e.layoutStyle,searchLayout:e.searchLayout}))},save:()=>null})})()})();
     1(()=>{var e={609:e=>{"use strict";e.exports=window.React},926:function(e,t,a){!function(e,t){"use strict";function a(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),a.push.apply(a,r)}return a}function r(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{};t%2?a(Object(r),!0).forEach((function(t){o(e,t,r[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(r)):a(Object(r)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(r,t))}))}return e}function n(e){return n="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},n(e)}function o(e,t,a){return t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}function i(e,t){if(null==e)return{};var a,r,n=function(e,t){if(null==e)return{};var a,r,n={},o=Object.keys(e);for(r=0;r<o.length;r++)a=o[r],t.indexOf(a)>=0||(n[a]=e[a]);return n}(e,t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(r=0;r<o.length;r++)a=o[r],t.indexOf(a)>=0||Object.prototype.propertyIsEnumerable.call(e,a)&&(n[a]=e[a])}return n}function l(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var a=e&&("undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"]);if(null!=a){var r,n,o=[],_n=!0,i=!1;try{for(a=a.call(e);!(_n=(r=a.next()).done)&&(o.push(r.value),!t||o.length!==t);_n=!0);}catch(e){i=!0,n=e}finally{try{_n||null==a.return||a.return()}finally{if(i)throw n}}return o}}(e,t)||function(e,t){if(e){if("string"==typeof e)return c(e,t);var a=Object.prototype.toString.call(e).slice(8,-1);return"Object"===a&&e.constructor&&(a=e.constructor.name),"Map"===a||"Set"===a?Array.from(e):"Arguments"===a||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(a)?c(e,t):void 0}}(e,t)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function c(e,t){(null==t||t>e.length)&&(t=e.length);for(var a=0,r=new Array(t);a<t;a++)r[a]=e[a];return r}function s(e){return e&&e.__esModule&&Object.prototype.hasOwnProperty.call(e,"default")?e.default:e}var u,m,p,d,f={exports:{}};f.exports=function(){if(d)return p;d=1;var e=m?u:(m=1,u="SECRET_DO_NOT_PASS_THIS_OR_YOU_WILL_BE_FIRED");function t(){}function a(){}return a.resetWarningCache=t,p=function(){function r(t,a,r,n,o,i){if(i!==e){var l=new Error("Calling PropTypes validators directly is not supported by the `prop-types` package. Use PropTypes.checkPropTypes() to call them. Read more at http://fb.me/use-check-prop-types");throw l.name="Invariant Violation",l}}function n(){return r}r.isRequired=r;var o={array:r,bool:r,func:r,number:r,object:r,string:r,symbol:r,any:r,arrayOf:n,element:r,elementType:r,instanceOf:n,node:r,objectOf:n,oneOf:n,oneOfType:n,shape:n,exact:n,checkPropTypes:a,resetWarningCache:t};return o.PropTypes=o,o}}()();var b=s(f.exports),h=function(e,a,r){var n=!!r,o=t.useRef(r);t.useEffect((function(){o.current=r}),[r]),t.useEffect((function(){if(!n||!e)return function(){};var t=function(){o.current&&o.current.apply(o,arguments)};return e.on(a,t),function(){e.off(a,t)}}),[n,a,e,o])},y=function(e){var a=t.useRef(e);return t.useEffect((function(){a.current=e}),[e]),a.current},g=function(e){return null!==e&&"object"===n(e)},E="[object Object]",v=function e(t,a){if(!g(t)||!g(a))return t===a;var r=Array.isArray(t);if(r!==Array.isArray(a))return!1;var n=Object.prototype.toString.call(t)===E;if(n!==(Object.prototype.toString.call(a)===E))return!1;if(!n&&!r)return t===a;var o=Object.keys(t),i=Object.keys(a);if(o.length!==i.length)return!1;for(var l={},c=0;c<o.length;c+=1)l[o[c]]=!0;for(var s=0;s<i.length;s+=1)l[i[s]]=!0;var u=Object.keys(l);if(u.length!==o.length)return!1;var m=t,p=a;return u.every((function(t){return e(m[t],p[t])}))},R=function(e,t,a){return g(e)?Object.keys(e).reduce((function(n,i){var l=!g(t)||!v(e[i],t[i]);return a.includes(i)?(l&&console.warn("Unsupported prop change: options.".concat(i," is not a mutable property.")),n):l?r(r({},n||{}),{},o({},i,e[i])):n}),null):null},_="Invalid prop `stripe` supplied to `Elements`. We recommend using the `loadStripe` utility from `@stripe/stripe-js`. See https://stripe.com/docs/stripe-js/react#elements-props-stripe for details.",C=function(e){var t,a=arguments.length>1&&void 0!==arguments[1]?arguments[1]:_;if(null===e||g(t=e)&&"function"==typeof t.elements&&"function"==typeof t.createToken&&"function"==typeof t.createPaymentMethod&&"function"==typeof t.confirmCardPayment)return e;throw new Error(a)},w=function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:_;if(function(e){return g(e)&&"function"==typeof e.then}(e))return{tag:"async",stripePromise:Promise.resolve(e).then((function(e){return C(e,t)}))};var a=C(e,t);return null===a?{tag:"empty"}:{tag:"sync",stripe:a}},N=function(e){e&&e._registerWrapper&&e.registerAppInfo&&(e._registerWrapper({name:"react-stripe-js",version:"3.6.0"}),e.registerAppInfo({name:"react-stripe-js",version:"3.6.0",url:"https://stripe.com/docs/stripe-js/react"}))},k=t.createContext(null);k.displayName="ElementsContext";var S=function(e,t){if(!e)throw new Error("Could not find Elements context; You need to wrap the part of your app that ".concat(t," in an <Elements> provider."));return e},x=function(e){var a=e.stripe,r=e.options,n=e.children,o=t.useMemo((function(){return w(a)}),[a]),i=l(t.useState((function(){return{stripe:"sync"===o.tag?o.stripe:null,elements:"sync"===o.tag?o.stripe.elements(r):null}})),2),c=i[0],s=i[1];t.useEffect((function(){var e=!0,t=function(e){s((function(t){return t.stripe?t:{stripe:e,elements:e.elements(r)}}))};return"async"!==o.tag||c.stripe?"sync"!==o.tag||c.stripe||t(o.stripe):o.stripePromise.then((function(a){a&&e&&t(a)})),function(){e=!1}}),[o,c,r]);var u=y(a);t.useEffect((function(){null!==u&&u!==a&&console.warn("Unsupported prop change on Elements: You cannot change the `stripe` prop after setting it.")}),[u,a]);var m=y(r);return t.useEffect((function(){if(c.elements){var e=R(r,m,["clientSecret","fonts"]);e&&c.elements.update(e)}}),[r,m,c.elements]),t.useEffect((function(){N(c.stripe)}),[c.stripe]),t.createElement(k.Provider,{value:c},n)};x.propTypes={stripe:b.any,options:b.object};var P=function(e){var a=t.useContext(k);return S(a,e)},O=function(e){return(0,e.children)(P("mounts <ElementsConsumer>"))};O.propTypes={children:b.func.isRequired};var I=["on","session"],T=t.createContext(null);T.displayName="CheckoutSdkContext";var j=function(e,t){if(!e)throw new Error("Could not find CheckoutProvider context; You need to wrap the part of your app that ".concat(t," in an <CheckoutProvider> provider."));return e},D=t.createContext(null);D.displayName="CheckoutContext";var F=function(e){var a=e.stripe,r=e.options,n=e.children,o=t.useMemo((function(){return w(a,"Invalid prop `stripe` supplied to `CheckoutProvider`. We recommend using the `loadStripe` utility from `@stripe/stripe-js`. See https://stripe.com/docs/stripe-js/react#elements-props-stripe for details.")}),[a]),c=l(t.useState(null),2),s=c[0],u=c[1],m=l(t.useState((function(){return{stripe:"sync"===o.tag?o.stripe:null,checkoutSdk:null}})),2),p=m[0],d=m[1],f=function(e,t){d((function(a){return a.stripe&&a.checkoutSdk?a:{stripe:e,checkoutSdk:t}}))},b=t.useRef(!1);t.useEffect((function(){var e=!0;return"async"!==o.tag||p.stripe?"sync"===o.tag&&o.stripe&&!b.current&&(b.current=!0,o.stripe.initCheckout(r).then((function(e){e&&(f(o.stripe,e),e.on("change",u))}))):o.stripePromise.then((function(t){t&&e&&!b.current&&(b.current=!0,t.initCheckout(r).then((function(e){e&&(f(t,e),e.on("change",u))})))})),function(){e=!1}}),[o,p,r,u]);var h=y(a);t.useEffect((function(){null!==h&&h!==a&&console.warn("Unsupported prop change on CheckoutProvider: You cannot change the `stripe` prop after setting it.")}),[h,a]);var g=y(r);t.useEffect((function(){var e,t;if(p.checkoutSdk){var a=null==g||null===(e=g.elementsOptions)||void 0===e?void 0:e.appearance,n=null==r||null===(t=r.elementsOptions)||void 0===t?void 0:t.appearance;n&&!v(n,a)&&p.checkoutSdk.changeAppearance(n)}}),[r,g,p.checkoutSdk]),t.useEffect((function(){N(p.stripe)}),[p.stripe]);var E=t.useMemo((function(){return function(e,t){if(!e)return null;e.on,e.session;var a=i(e,I);return t?Object.assign(t,a):Object.assign(e.session(),a)}(p.checkoutSdk,s)}),[p.checkoutSdk,s]);return p.checkoutSdk?t.createElement(T.Provider,{value:p},t.createElement(D.Provider,{value:E},n)):null};F.propTypes={stripe:b.any,options:b.shape({fetchClientSecret:b.func.isRequired,elementsOptions:b.object}).isRequired};var A=function(e){var a=t.useContext(T),r=t.useContext(k);if(a&&r)throw new Error("You cannot wrap the part of your app that ".concat(e," in both <CheckoutProvider> and <Elements> providers."));return a?j(a,e):S(r,e)},B=["mode"],$=function(e,a){var r,n="".concat((r=e).charAt(0).toUpperCase()+r.slice(1),"Element"),o=a?function(e){A("mounts <".concat(n,">"));var a=e.id,r=e.className;return t.createElement("div",{id:a,className:r})}:function(a){var r,o=a.id,c=a.className,s=a.options,u=void 0===s?{}:s,m=a.onBlur,p=a.onFocus,d=a.onReady,f=a.onChange,b=a.onEscape,g=a.onClick,E=a.onLoadError,v=a.onLoaderStart,_=a.onNetworksChange,C=a.onConfirm,w=a.onCancel,N=a.onShippingAddressChange,k=a.onShippingRateChange,S=A("mounts <".concat(n,">")),x="elements"in S?S.elements:null,P="checkoutSdk"in S?S.checkoutSdk:null,O=l(t.useState(null),2),I=O[0],T=O[1],j=t.useRef(null),D=t.useRef(null);h(I,"blur",m),h(I,"focus",p),h(I,"escape",b),h(I,"click",g),h(I,"loaderror",E),h(I,"loaderstart",v),h(I,"networkschange",_),h(I,"confirm",C),h(I,"cancel",w),h(I,"shippingaddresschange",N),h(I,"shippingratechange",k),h(I,"change",f),d&&(r="expressCheckout"===e?d:function(){d(I)}),h(I,"ready",r),t.useLayoutEffect((function(){if(null===j.current&&null!==D.current&&(x||P)){var t=null;if(P)switch(e){case"payment":t=P.createPaymentElement(u);break;case"address":if(!("mode"in u))throw new Error("You must supply options.mode. mode must be 'billing' or 'shipping'.");var a=u.mode,r=i(u,B);if("shipping"===a)t=P.createShippingAddressElement(r);else{if("billing"!==a)throw new Error("Invalid options.mode. mode must be 'billing' or 'shipping'.");t=P.createBillingAddressElement(r)}break;case"expressCheckout":t=P.createExpressCheckoutElement(u);break;case"currencySelector":t=P.createCurrencySelectorElement();break;default:throw new Error("Invalid Element type ".concat(n,". You must use either the <PaymentElement />, <AddressElement options={{mode: 'shipping'}} />, <AddressElement options={{mode: 'billing'}} />, or <ExpressCheckoutElement />."))}else x&&(t=x.create(e,u));j.current=t,T(t),t&&t.mount(D.current)}}),[x,P,u]);var F=y(u);return t.useEffect((function(){if(j.current){var e=R(u,F,["paymentRequest"]);e&&"update"in j.current&&j.current.update(e)}}),[u,F]),t.useLayoutEffect((function(){return function(){if(j.current&&"function"==typeof j.current.destroy)try{j.current.destroy(),j.current=null}catch(e){}}}),[]),t.createElement("div",{id:o,className:c,ref:D})};return o.propTypes={id:b.string,className:b.string,onChange:b.func,onBlur:b.func,onFocus:b.func,onReady:b.func,onEscape:b.func,onClick:b.func,onLoadError:b.func,onLoaderStart:b.func,onNetworksChange:b.func,onConfirm:b.func,onCancel:b.func,onShippingAddressChange:b.func,onShippingRateChange:b.func,options:b.object},o.displayName=n,o.__elementType=e,o},G="undefined"==typeof window,L=t.createContext(null);L.displayName="EmbeddedCheckoutProviderContext";var M=function(){var e=t.useContext(L);if(!e)throw new Error("<EmbeddedCheckout> must be used within <EmbeddedCheckoutProvider>");return e},z=G?function(e){var a=e.id,r=e.className;return M(),t.createElement("div",{id:a,className:r})}:function(e){var a=e.id,r=e.className,n=M().embeddedCheckout,o=t.useRef(!1),i=t.useRef(null);return t.useLayoutEffect((function(){return!o.current&&n&&null!==i.current&&(n.mount(i.current),o.current=!0),function(){if(o.current&&n)try{n.unmount(),o.current=!1}catch(e){}}}),[n]),t.createElement("div",{ref:i,id:a,className:r})},U=$("auBankAccount",G),q=$("card",G),H=$("cardNumber",G),Y=$("cardExpiry",G),W=$("cardCvc",G),V=$("fpxBank",G),Z=$("iban",G),J=$("idealBank",G),K=$("p24Bank",G),Q=$("epsBank",G),X=$("payment",G),ee=$("expressCheckout",G),te=$("currencySelector",G),ae=$("paymentRequestButton",G),re=$("linkAuthentication",G),ne=$("address",G),oe=$("shippingAddress",G),ie=$("paymentMethodMessaging",G),le=$("affirmMessage",G),ce=$("afterpayClearpayMessage",G);e.AddressElement=ne,e.AffirmMessageElement=le,e.AfterpayClearpayMessageElement=ce,e.AuBankAccountElement=U,e.CardCvcElement=W,e.CardElement=q,e.CardExpiryElement=Y,e.CardNumberElement=H,e.CheckoutProvider=F,e.CurrencySelectorElement=te,e.Elements=x,e.ElementsConsumer=O,e.EmbeddedCheckout=z,e.EmbeddedCheckoutProvider=function(e){var a=e.stripe,r=e.options,n=e.children,o=t.useMemo((function(){return w(a,"Invalid prop `stripe` supplied to `EmbeddedCheckoutProvider`. We recommend using the `loadStripe` utility from `@stripe/stripe-js`. See https://stripe.com/docs/stripe-js/react#elements-props-stripe for details.")}),[a]),i=t.useRef(null),c=t.useRef(null),s=l(t.useState({embeddedCheckout:null}),2),u=s[0],m=s[1];t.useEffect((function(){if(!c.current&&!i.current){var e=function(e){c.current||i.current||(c.current=e,i.current=c.current.initEmbeddedCheckout(r).then((function(e){m({embeddedCheckout:e})})))};"async"!==o.tag||c.current||!r.clientSecret&&!r.fetchClientSecret?"sync"!==o.tag||c.current||!r.clientSecret&&!r.fetchClientSecret||e(o.stripe):o.stripePromise.then((function(t){t&&e(t)}))}}),[o,r,u,c]),t.useEffect((function(){return function(){u.embeddedCheckout?(i.current=null,u.embeddedCheckout.destroy()):i.current&&i.current.then((function(){i.current=null,u.embeddedCheckout&&u.embeddedCheckout.destroy()}))}}),[u.embeddedCheckout]),t.useEffect((function(){N(c)}),[c]);var p=y(a);t.useEffect((function(){null!==p&&p!==a&&console.warn("Unsupported prop change on EmbeddedCheckoutProvider: You cannot change the `stripe` prop after setting it.")}),[p,a]);var d=y(r);return t.useEffect((function(){null!=d&&(null!=r?(void 0===r.clientSecret&&void 0===r.fetchClientSecret&&console.warn("Invalid props passed to EmbeddedCheckoutProvider: You must provide one of either `options.fetchClientSecret` or `options.clientSecret`."),null!=d.clientSecret&&r.clientSecret!==d.clientSecret&&console.warn("Unsupported prop change on EmbeddedCheckoutProvider: You cannot change the client secret after setting it. Unmount and create a new instance of EmbeddedCheckoutProvider instead."),null!=d.fetchClientSecret&&r.fetchClientSecret!==d.fetchClientSecret&&console.warn("Unsupported prop change on EmbeddedCheckoutProvider: You cannot change fetchClientSecret after setting it. Unmount and create a new instance of EmbeddedCheckoutProvider instead."),null!=d.onComplete&&r.onComplete!==d.onComplete&&console.warn("Unsupported prop change on EmbeddedCheckoutProvider: You cannot change the onComplete option after setting it."),null!=d.onShippingDetailsChange&&r.onShippingDetailsChange!==d.onShippingDetailsChange&&console.warn("Unsupported prop change on EmbeddedCheckoutProvider: You cannot change the onShippingDetailsChange option after setting it."),null!=d.onLineItemsChange&&r.onLineItemsChange!==d.onLineItemsChange&&console.warn("Unsupported prop change on EmbeddedCheckoutProvider: You cannot change the onLineItemsChange option after setting it.")):console.warn("Unsupported prop change on EmbeddedCheckoutProvider: You cannot unset options after setting them."))}),[d,r]),t.createElement(L.Provider,{value:u},n)},e.EpsBankElement=Q,e.ExpressCheckoutElement=ee,e.FpxBankElement=V,e.IbanElement=Z,e.IdealBankElement=J,e.LinkAuthenticationElement=re,e.P24BankElement=K,e.PaymentElement=X,e.PaymentMethodMessagingElement=ie,e.PaymentRequestButtonElement=ae,e.ShippingAddressElement=oe,e.useCheckout=function(){!function(e){var a=t.useContext(T);j(a,e)}("calls useCheckout()");var e=t.useContext(D);if(!e)throw new Error("Could not find Checkout Context; You need to wrap the part of your app that calls useCheckout() in an <CheckoutProvider> provider.");return e},e.useElements=function(){return P("calls useElements()").elements},e.useStripe=function(){return A("calls useStripe()").stripe}}(t,a(609))}},t={};function a(r){var n=t[r];if(void 0!==n)return n.exports;var o=t[r]={exports:{}};return e[r].call(o.exports,o,o.exports,a),o.exports}(()=>{"use strict";var e,t=a(609),r="https://js.stripe.com",n="".concat(r,"/v3"),o=/^https:\/\/js\.stripe\.com\/v3\/?(\?.*)?$/,i=/^https:\/\/js\.stripe\.com\/(v3|[a-z]+)\/stripe\.js(\?.*)?$/,l="loadStripe.setLoadParameters was called but an existing Stripe.js script already exists in the document; existing script parameters will be used",c=function(e){var t=e&&!e.advancedFraudSignals?"?advancedFraudSignals=false":"",a=document.createElement("script");a.src="".concat(n).concat(t);var r=document.head||document.body;if(!r)throw new Error("Expected document.body not to be null. Stripe.js requires a <body> element.");return r.appendChild(a),a},s=null,u=null,m=null,p=!1,d=function(){return e||(e=(t=null,null!==s?s:(s=new Promise((function(e,a){if("undefined"!=typeof window&&"undefined"!=typeof document)if(window.Stripe&&t&&console.warn(l),window.Stripe)e(window.Stripe);else try{var n=function(){for(var e,t=document.querySelectorAll('script[src^="'.concat(r,'"]')),a=0;a<t.length;a++){var n=t[a];if(e=n.src,o.test(e)||i.test(e))return n}return null}();if(n&&t)console.warn(l);else if(n){if(n&&null!==m&&null!==u){var s;n.removeEventListener("load",m),n.removeEventListener("error",u),null===(s=n.parentNode)||void 0===s||s.removeChild(n),n=c(t)}}else n=c(t);m=function(e,t){return function(){window.Stripe?e(window.Stripe):t(new Error("Stripe.js not available"))}}(e,a),u=function(e){return function(t){e(new Error("Failed to load Stripe.js",{cause:t}))}}(a),n.addEventListener("load",m),n.addEventListener("error",u)}catch(e){return void a(e)}else e(null)}))).catch((function(e){return s=null,Promise.reject(e)}))).catch((function(t){return e=null,Promise.reject(t)})));var t};Promise.resolve().then((function(){return d()})).catch((function(e){p||console.warn(e)}));var f=function(){for(var e=arguments.length,t=new Array(e),a=0;a<e;a++)t[a]=arguments[a];p=!0;var r=Date.now();return d().then((function(e){return function(e,t,a){if(null===e)return null;var r=t[0].match(/^pk_test/),n=function(e){return 3===e?"v3":e}(e.version);r&&"v3"!==n&&console.warn("Stripe.js@".concat(n," was loaded on the page, but @stripe/stripe-js@").concat("5.10.0"," expected Stripe.js@").concat("v3",". This may result in unexpected behavior. For more information, see https://docs.stripe.com/sdks/stripejs-versioning"));var o=e.apply(void 0,t);return function(e,t){e&&e._registerWrapper&&e._registerWrapper({name:"stripe-js",version:"5.10.0",startTime:t})}(o,a),o}(e,t,r)}))},b=a(926);const h=e=>({AUD:"AUD$",USD:"USD$",NZD:"NZD$",GBP:"GBP£",EUR:"EUR€",CAD:"CAD$",SGD:"SGD$"}[e]||e+" "),y=(()=>{const e=window.wpApiSettings?.restUrl;return e?e.replace(/\/$/,""):document.querySelector('link[rel="https://api.w.org/"]').href.replace(/\/$/,"")})(),g=(f("your-publishable-key-here"),e=>new URLSearchParams(window.location.search).get(e)),E=({property:e,isSelected:t,onToggle:a,nights:r,checkInDate:n,showPropertyImages:o,includeIcons:i})=>{e.availability?.total_cost||e.availability?.dates?.reduce(((e,t)=>e+(t.rate||0)),0);const l=e.availability?.available;return React.createElement("div",{className:`bif-tile ${t?"bif-selected":""} ${l?"":"is-unavailable"}`},o&&e.property_image&&React.createElement("div",{className:"bif-tile__hero"},React.createElement("img",{loading:"lazy",src:e.property_image,alt:e.property_name}),React.createElement("span",{className:"bif-chip "+(l?"":"unavailable")},((e,t,a)=>{if(e)return"Available";switch(t){case"Booked Out":return"Booked Out";case"No Tariff Set":return"No Rates Set";case"Min Nights":return`Minimum ${a||2} Nights`;default:return"Unavailable"}})(l,e.availability?.availability_reason,e.availability?.min_nights))),React.createElement("div",{className:"bif-tile__content"},React.createElement("h3",{className:"bif-tile__title"},e.property_name),i&&e.property_features&&React.createElement("ul",{className:"bif-amenities bif-amenities--slim"},1===e.property_features.wifi&&React.createElement("li",null,React.createElement("span",null,"📶 WiFi")),e.property_features.queen_beds>0&&React.createElement("li",null,React.createElement("span",null,"🛏️ ",e.property_features.queen_beds," Queen")),e.property_features.king_beds>0&&React.createElement("li",null,React.createElement("span",null,"🛏️ ",e.property_features.king_beds," King")),e.property_features.double_beds>0&&React.createElement("li",null,React.createElement("span",null,"🛏️ ",e.property_features.double_beds," Double")),e.property_features.single_beds>0&&React.createElement("li",null,React.createElement("span",null,"🛏️ ",e.property_features.single_beds," Single")),e.property_features.bunk_beds>0&&React.createElement("li",null,React.createElement("span",null,"🛏️ ",e.property_features.bunk_beds," Bunk")),e.property_features.sofa_beds>0&&React.createElement("li",null,React.createElement("span",null,"🛋️ ",e.property_features.sofa_beds," Sofa bed")),e.property_features.bedrooms&&React.createElement("li",null,React.createElement("span",null,"🏠 ",e.property_features.bedrooms," Bedroom",e.property_features.bedrooms>1?"s":"")),e.property_features.living_areas&&React.createElement("li",null,React.createElement("span",null,"🛋️ ",e.property_features.living_areas," Living Area",e.property_features.living_areas>1?"s":""))),e.availability?.dates&&React.createElement("div",{className:"bif-tile__rates"},e.availability.dates.map(((e,t)=>React.createElement("div",{key:t,className:"bif-pill "+(e.availability?"ok":"na")},React.createElement("span",{className:"bif-pill__date"},e.date_formatted),React.createElement("strong",{className:"bif-pill__amt"},e.availability?`$${e.rate}`:"Booked Out"===e.availability_reason?"Booked":"No Tariff Set"===e.availability_reason?"No Rate":"N/A"))))),React.createElement("div",{className:"bif-tile__footer"},l?React.createElement("button",{onClick:a,className:"bif-btn "+(t?"bif-btn-selected":"bif-btn-select")},t?"✓ Selected":"Select"):React.createElement("button",{disabled:!0,className:"bif-btn bif-btn-disabled"},"Unavailable")),t&&e.optional_extras?.length>0&&React.createElement("div",{className:"bif-optional-extras"},React.createElement("h4",{className:"bif-daily-breakdown-title"},"Optional Extras"),React.createElement("div",{className:"bif-extras-list"},e.optional_extras.map((t=>React.createElement("div",{key:t.id,className:"bif-extra-item"},React.createElement("div",{className:"bif-extra-info"},React.createElement("input",{type:"checkbox",checked:e.selectedExtras?.[t.id]||!1,onChange:()=>e.onToggleExtra?.(e.id,t.id)}),React.createElement("label",null,t.description)),React.createElement("div",{className:"bif-extra-price"},"$",t.amount))))))))},v=({property:e,isSelected:t,onToggle:a,nights:r,checkInDate:n,showPropertyImages:o,includeIcons:i})=>{e.availability?.total_cost||e.availability?.dates?.reduce(((e,t)=>e+(t.rate||0)),0);const l=e.availability?.available;return React.createElement("div",{className:`bif-row ${t?"bif-selected":""} ${l?"":"is-unavailable"} ${o&&e.property_image?"":"no-image"}`},o&&e.property_image&&React.createElement("div",{className:"bif-row__thumb"},React.createElement("img",{loading:"lazy",src:e.property_image,alt:e.property_name})),React.createElement("div",{className:"bif-row__main"},React.createElement("div",{className:"bif-row__top"},React.createElement("h3",{className:"bif-row__title"},e.property_name),React.createElement("span",{className:"bif-dot "+(c=l,c?"ok":"na"),"aria-hidden":"true"})),i&&e.property_features&&React.createElement("ul",{className:"bif-amenities bif-amenities--inline"},1===e.property_features.wifi&&React.createElement("li",null,React.createElement("span",null,"📶 WiFi")),e.property_features.queen_beds>0&&React.createElement("li",null,React.createElement("span",null,"🛏️ ",e.property_features.queen_beds," Queen")),e.property_features.king_beds>0&&React.createElement("li",null,React.createElement("span",null,"🛏️ ",e.property_features.king_beds," King")),e.property_features.double_beds>0&&React.createElement("li",null,React.createElement("span",null,"🛏️ ",e.property_features.double_beds," Double")),e.property_features.single_beds>0&&React.createElement("li",null,React.createElement("span",null,"🛏️ ",e.property_features.single_beds," Single")),e.property_features.bunk_beds>0&&React.createElement("li",null,React.createElement("span",null,"🛏️ ",e.property_features.bunk_beds," Bunk")),e.property_features.sofa_beds>0&&React.createElement("li",null,React.createElement("span",null,"🛋️ ",e.property_features.sofa_beds," Sofa bed")),e.property_features.bedrooms&&React.createElement("li",null,React.createElement("span",null,"🏠 ",e.property_features.bedrooms," Bedroom",e.property_features.bedrooms>1?"s":"")),e.property_features.living_areas&&React.createElement("li",null,React.createElement("span",null,"🛋️ ",e.property_features.living_areas," Living Area",e.property_features.living_areas>1?"s":"")))),e.availability?.dates&&React.createElement("div",{className:"bif-row__rates"},e.availability.dates.map(((e,t)=>React.createElement("div",{key:t,className:"bif-rmini "+(e.availability?"ok":"na")},React.createElement("div",{className:"bif-rmini__date"},e.date_formatted),React.createElement("div",{className:"bif-rmini__amt"},e.availability?`$${e.rate}`:"Booked Out"===e.availability_reason?"Booked":"No Tariff Set"===e.availability_reason?"No Rate":"N/A"))))),React.createElement("div",{className:"bif-row__cta"},l?React.createElement("button",{onClick:a,className:"bif-btn "+(t?"bif-btn-selected":"bif-btn-select")},t?"✓ Selected":"Select"):React.createElement("button",{disabled:!0,className:"bif-btn bif-btn-disabled"},"Unavailable")),t&&e.optional_extras?.length>0&&React.createElement("div",{className:"bif-optional-extras",style:{gridColumn:"1 / -1",marginTop:"1rem"}},React.createElement("h4",{className:"bif-daily-breakdown-title"},"Optional Extras"),React.createElement("div",{className:"bif-extras-list"},e.optional_extras.map((t=>React.createElement("div",{key:t.id,className:"bif-extra-item"},React.createElement("div",{className:"bif-extra-info"},React.createElement("input",{type:"checkbox",checked:e.selectedExtras?.[t.id]||!1,onChange:()=>e.onToggleExtra?.(e.id,t.id)}),React.createElement("label",null,t.description)),React.createElement("div",{className:"bif-extra-price"},"$",t.amount)))))));var c},R=({property:e,isSelected:t,onToggle:a,nights:r,checkInDate:n,showPropertyImages:o,includeIcons:i})=>{const l=e.availability?.total_cost||e.availability?.dates?.reduce(((e,t)=>e+(t.rate||0)),0)||0,c=e.availability?.available,s=(e,t,a)=>{if(e)return"Available";switch(t){case"Booked Out":return"Booked Out";case"No Tariff Set":return"No Rates Set";case"Min Nights":return`Minimum ${a||2} Nights`;default:return"Unavailable"}};return React.createElement("div",{className:`bif-property-card ${t?"bif-selected":""} ${c?"":"bif-unavailable"}`},React.createElement("div",{className:"bif-property-header"},o&&e.property_image&&React.createElement("div",{className:"bif-property-image"},React.createElement("img",{src:e.property_image,alt:e.property_name})),React.createElement("div",{className:"bif-property-info"},React.createElement("h3",{className:"bif-property-name"},e.property_name),e.property_description&&React.createElement("p",{className:"bif-property-description"},e.property_description),i&&e.property_features&&React.createElement("div",{className:"bif-property-icons"},1===e.property_features.wifi&&React.createElement("span",{className:"bif-property-icon",title:"WiFi Available"},"📶 WiFi"),e.property_features.queen_beds>0&&React.createElement("span",{className:"bif-property-icon",title:`${e.property_features.queen_beds} Queen bed${e.property_features.queen_beds>1?"s":""}`},"🛏️ ",e.property_features.queen_beds," Queen"),e.property_features.king_beds>0&&React.createElement("span",{className:"bif-property-icon",title:`${e.property_features.king_beds} King bed${e.property_features.king_beds>1?"s":""}`},"🛏️ ",e.property_features.king_beds," King"),e.property_features.double_beds>0&&React.createElement("span",{className:"bif-property-icon",title:`${e.property_features.double_beds} Double bed${e.property_features.double_beds>1?"s":""}`},"🛏️ ",e.property_features.double_beds," Double"),e.property_features.single_beds>0&&React.createElement("span",{className:"bif-property-icon",title:`${e.property_features.single_beds} Single bed${e.property_features.single_beds>1?"s":""}`},"🛏️ ",e.property_features.single_beds," Single"),e.property_features.bunk_beds>0&&React.createElement("span",{className:"bif-property-icon",title:`${e.property_features.bunk_beds} Bunk bed${e.property_features.bunk_beds>1?"s":""}`},"🛏️ ",e.property_features.bunk_beds," Bunk"),e.property_features.sofa_beds>0&&React.createElement("span",{className:"bif-property-icon",title:`${e.property_features.sofa_beds} Sofa bed${e.property_features.sofa_beds>1?"s":""}`},"🛋️ ",e.property_features.sofa_beds," Sofa bed"),e.property_features.bedrooms&&React.createElement("span",{className:"bif-property-icon",title:`${e.property_features.bedrooms} bedroom${e.property_features.bedrooms>1?"s":""}`},"🏠 ",e.property_features.bedrooms," Bedroom",e.property_features.bedrooms>1?"s":""),e.property_features.living_areas&&React.createElement("span",{className:"bif-property-icon",title:`${e.property_features.living_areas} living area${e.property_features.living_areas>1?"s":""}`},"🛋️ ",e.property_features.living_areas," Living Area",e.property_features.living_areas>1?"s":""))),React.createElement("div",{className:"bif-property-status-container"},React.createElement("span",{className:`bif-property-status ${((e,t)=>{if(e)return"bif-status-available";switch(t){case"Booked Out":return"bif-status-booked";case"No Tariff Set":return"bif-status-no-rate";case"Min Nights":return"bif-status-min-nights";default:return"bif-status-unavailable"}})(c,e.availability?.availability_reason)}`},s(c,e.availability?.availability_reason,e.availability?.min_nights)),c?React.createElement("button",{onClick:a,className:`bif-btn ${t?"bif-btn-selected":"bif-btn-select"} bif-header-btn`,style:{marginLeft:"0.75rem"}},t?"✓ Selected":"Select Property"):React.createElement("button",{disabled:!0,className:"bif-btn bif-btn-disabled bif-header-btn",style:{marginLeft:"0.75rem"}},s(c,e.availability?.availability_reason,e.availability?.min_nights)))),e.availability?.dates&&React.createElement("div",{className:"bif-availability-details"},React.createElement("h4",{className:"bif-daily-breakdown-title"},"Daily Rate Breakdown"),React.createElement("div",{className:"bif-daily-rates"},e.availability.dates.map(((e,t)=>React.createElement("div",{key:t,className:"bif-daily-rate "+(e.availability?"bif-available":"bif-unavailable")},React.createElement("div",{className:"bif-date"},e.date_formatted),React.createElement("div",{className:"bif-rate"},e.availability?`$${e.rate}`:"Booked Out"===e.availability_reason?"Booked":"No Tariff Set"===e.availability_reason?"No Rate":"N/A"))))),React.createElement("div",{className:"bif-rate-summary"},React.createElement("div",{className:"bif-summary-row"},React.createElement("span",{className:"bif-total"},"Total: $",l)))),t&&e.optional_extras?.length>0&&React.createElement("div",{className:"bif-optional-extras"},React.createElement("h4",{className:"bif-daily-breakdown-title"},"Optional Extras"),React.createElement("div",{className:"bif-extras-list"},e.optional_extras.map((t=>React.createElement("div",{key:t.id,className:"bif-extra-item"},React.createElement("div",{className:"bif-extra-info"},React.createElement("input",{type:"checkbox",checked:e.selectedExtras?.[t.id]||!1,onChange:()=>e.onToggleExtra?.(e.id,t.id)}),React.createElement("label",null,t.description)),React.createElement("div",{className:"bif-extra-price"},"$",t.amount)))))))},_=({checkInDate:e,nights:t,onDateChange:a,onNightsChange:r,onCheckAvailability:n,isLoading:o,minNights:i,maxNights:l,buttonIcon:c="search",searchLayout:s="default"})=>{const u=(new Date).toISOString().split("T")[0],m={search:"🔍",calendar:"📅",home:"🏠",mapMarker:"📍",star:"⭐",pin:"📌",pinSmall:"📍",globe:"🌍"}[c]||"🔍";return"horizontal"===s?React.createElement("div",{className:"bif-search-box-horizontal"},React.createElement("div",{className:"bif-search-field",onClick:()=>document.querySelector('.bif-search-box-horizontal input[type="date"]')?.showPicker?.()},React.createElement("span",{className:"bif-search-icon"},React.createElement("svg",{width:"20",height:"20",viewBox:"0 0 20 20",fill:"none",xmlns:"http://www.w3.org/2000/svg"},React.createElement("rect",{x:"3",y:"4",width:"14",height:"13",rx:"1",stroke:"currentColor",strokeWidth:"1.5"}),React.createElement("line",{x1:"3",y1:"8",x2:"17",y2:"8",stroke:"currentColor",strokeWidth:"1.5"}),React.createElement("line",{x1:"7",y1:"2",x2:"7",y2:"5",stroke:"currentColor",strokeWidth:"1.5",strokeLinecap:"round"}),React.createElement("line",{x1:"13",y1:"2",x2:"13",y2:"5",stroke:"currentColor",strokeWidth:"1.5",strokeLinecap:"round"}))),React.createElement("div",{className:"bif-search-field-content"},React.createElement("label",null,"Check-In"),React.createElement("input",{type:"date",value:e,onChange:e=>a(e.target.value),min:u}))),React.createElement("div",{className:"bif-search-divider"}),React.createElement("div",{className:"bif-search-field"},React.createElement("span",{className:"bif-search-icon"},React.createElement("svg",{width:"20",height:"20",viewBox:"0 0 20 20",fill:"currentColor",xmlns:"http://www.w3.org/2000/svg"},React.createElement("path",{d:"M17 10.5c0 3.59-2.69 6.5-6 6.5s-6-2.91-6-6.5S7.69 4 11 4c.35 0 .69.03 1.02.09A5.5 5.5 0 0 0 17 10.5z"}))),React.createElement("div",{className:"bif-search-field-content"},React.createElement("label",null,"Nights"),React.createElement("select",{value:t,onChange:e=>r(parseInt(e.target.value))},[...Array(l-i+1).keys()].map((e=>{const t=i+e;return React.createElement("option",{key:t,value:t},t)}))))),React.createElement("button",{onClick:n,disabled:!e||o,className:"bif-search-button"},o?"Checking...":"Search")):React.createElement("div",{className:"bif-date-selector"},React.createElement("h2",{className:"bif-section-title"},"Select Your Dates"),React.createElement("div",{className:"bif-date-form"},React.createElement("div",{className:"bif-form-field"},React.createElement("label",null,"Check-in Date"),React.createElement("input",{type:"date",value:e,onChange:e=>a(e.target.value),min:u,className:"bif-date-input"})),React.createElement("div",{className:"bif-form-field"},React.createElement("label",null,"Number of Nights"),React.createElement("select",{value:t,onChange:e=>r(parseInt(e.target.value)),className:"bif-nights-select"},[...Array(l-i+1).keys()].map((e=>{const t=i+e;return React.createElement("option",{key:t,value:t},t," ",1===t?"night":"nights")})))),React.createElement("div",{className:"bif-form-field"},React.createElement("button",{onClick:n,disabled:!e||o,className:"bif-btn bif-btn-primary bif-check-availability bif-has-icon-preview"},o?React.createElement(React.Fragment,null,React.createElement("div",{className:"bif-spinner"}),React.createElement("span",null,"Checking...")):React.createElement(React.Fragment,null,React.createElement("span",{className:"bif-icon-preview"},m),React.createElement("span",null,"Check Availability"))))))},C=({selectedProperties:e,selectedExtras:t,nights:a,total:r,discountCode:n,onDiscountCodeChange:o,onApplyDiscount:i,checkInDate:l,summary:c,showDiscount:s=!1,showRedeemGiftCertificate:u=!1,giftCertificate:m,onGiftCertificateChange:p,showGiftCertificateForm:d,onTriggerShowGiftCertificate:f,onApplyGiftCertificate:b,gcResult:h,gcLoading:y=!1})=>{Object.values(t).flat().reduce(((e,t)=>e+(t.amount||0)),0);const g=c&&parseFloat(c.order_discount_code_total||0)>0;return e&&0!==e.length?React.createElement("div",{className:"bif-booking-summary"},React.createElement("h3",{className:"bif-section-title"},"Booking Summary"),React.createElement("div",{className:"bif-summary-content"},e.map((e=>{const a=e.sub_total||e.availability?.total_cost||e.availability?.dates?.reduce(((e,t)=>e+(t.rate||0)),0)||0,r=e.mandatory_extras_total||e.mandatory_extras?.reduce(((e,t)=>e+parseFloat(t.amount||0)),0)||0,n=e.optional_extras_total||0,o=parseFloat(a)+parseFloat(r)+parseFloat(n);return React.createElement("div",{key:e.id,className:"bif-property-summary"},React.createElement("h5",{className:"bif-property-summary-name"},e.property_name),React.createElement("div",{className:"bif-property-total"},React.createElement("div",{className:"bif-total-row"},React.createElement("span",null,"Property Subtotal"),React.createElement("span",null,"$",parseFloat(a).toFixed(2)))),e.mandatory_extras&&e.mandatory_extras.length>0&&React.createElement("div",{className:"bif-mandatory-extras-summary"},React.createElement("h4",{className:"bif-daily-breakdown-title"},"Mandatory Extras"),e.mandatory_extras.map((e=>React.createElement("div",{key:e.id,className:"bif-total-row",style:{fontSize:"0.875rem",color:"#dc2626"}},React.createElement("span",null,e.description),React.createElement("span",null,"$",parseFloat(e.amount).toFixed(2)))))),e.optional_extras&&e.optional_extras.filter((e=>e.selected)).length>0&&React.createElement("div",{className:"bif-optional-extras-summary"},React.createElement("h4",{className:"bif-daily-breakdown-title"},"Optional Extras"),e.optional_extras.filter((e=>e.selected)).map((e=>React.createElement("div",{key:e.id,className:"bif-total-row",style:{fontSize:"0.875rem",color:"#92400e"}},React.createElement("span",null,e.description),React.createElement("span",null,"$",parseFloat(e.amount).toFixed(2)))))),React.createElement("div",{className:"bif-property-total"},React.createElement("div",{className:"bif-total-row bif-subtotal"},React.createElement("span",null,"Property Total"),React.createElement("span",null,"$",parseFloat(o).toFixed(2)))),!e.optional_extras&&t[e.id]&&t[e.id].length>0&&React.createElement("div",{className:"bif-optional-extras-summary"},React.createElement("h4",{className:"bif-daily-breakdown-title"},"Selected Optional Extras"),t[e.id].map((e=>React.createElement("div",{key:e.id,className:"bif-total-row",style:{fontSize:"0.875rem",color:"#92400e"}},React.createElement("span",null,e.description),React.createElement("span",null,"$",parseFloat(e.amount).toFixed(2)))))))})),s&&React.createElement("div",{className:"bif-summary-section"},React.createElement("div",{className:"bif-discount-form"},React.createElement("input",{type:"text",placeholder:"Enter discount code",value:n,onChange:e=>o(e.target.value),className:"bif-discount-input"}),React.createElement("button",{onClick:()=>{n.trim()&&i(n)},className:"bif-btn "+(n?.trim()?"bif-btn-primary":"bif-btn-secondary")},"Apply")),g&&React.createElement("div",{className:"bif-discount-applied"},"Discount code applied")),u&&c&&React.createElement("div",{className:"bif-summary-section"},React.createElement("div",{className:"bif-gift-certificate-section"},d?React.createElement("div",{className:"bif-gift-certificate-form"},React.createElement("div",{className:"bif-form-row"},React.createElement("div",{className:"bif-form-field"},React.createElement("label",null,"Certificate Number:"),React.createElement("input",{type:"text",value:m.number,onChange:e=>p({...m,number:e.target.value}),className:"bif-form-control",placeholder:"Enter certificate number",disabled:y})),React.createElement("div",{className:"bif-form-field"},React.createElement("label",null,"Pin:"),React.createElement("input",{type:"number",value:m.pin,onChange:e=>p({...m,pin:e.target.value}),className:"bif-form-control",placeholder:"Enter pin",disabled:y}))),React.createElement("button",{className:"bif-btn bif-btn-secondary",onClick:b,disabled:y},y?"Applying...":"Apply")):React.createElement("button",{className:"bif-btn bif-btn-secondary",onClick:f},"Apply Gift Certificate"),h&&h.valid&&React.createElement("div",{className:"bif-gift-certificate-success"},React.createElement("p",null,"✅ Successfully Applied Gift Certificate"),React.createElement("p",null,h.result),parseFloat(h.total)-parseFloat(h.gc_amount_applied)==0?React.createElement("p",null,React.createElement("strong",null,"🎉 Your gift certificate covers the full amount! No additional payment required.")):React.createElement(React.Fragment,null,React.createElement("p",null,"Remaining balance to pay: ",React.createElement("strong",null,"$",(parseFloat(h.total)-parseFloat(h.gc_amount_applied)).toFixed(2))),React.createElement("p",{style:{fontSize:"0.875rem",color:"#6b7280"}},"*Credit card surcharge will be added at payment")),React.createElement("p",null,"Gift Certificate balance after order: ",React.createElement("strong",null,"$",parseFloat(h.gc_balance_after_order).toFixed(2)))))),React.createElement("div",{className:"bif-grand-total"},h&&h.valid&&React.createElement("div",{className:"bif-total-row"},React.createElement("span",null,"Order Total"),React.createElement("span",null,"$",parseFloat(h.total||c.order_grand_total).toFixed(2))),h&&h.valid&&React.createElement("div",{className:"bif-total-row",style:{color:"#059669"}},React.createElement("span",null,"Gift Certificate Applied"),React.createElement("span",null,"-$",parseFloat(h.gc_amount_applied).toFixed(2))),React.createElement("div",{className:"bif-total-main"},React.createElement("span",null,h&&h.valid&&parseFloat(h.total)-parseFloat(h.gc_amount_applied)==0?"Total Paid by Gift Certificate":h&&h.valid?"Balance Due":"Total Cost"),React.createElement("span",{className:"bif-total-amount"},"$",h&&h.valid?(parseFloat(h.total)-parseFloat(h.gc_amount_applied)).toFixed(2):parseFloat(r).toFixed(2))),h&&h.valid&&parseFloat(h.total)-parseFloat(h.gc_amount_applied)>0&&c&&c.order_has_surcharge&&React.createElement("div",{className:"bif-surcharge-note",style:{fontSize:"0.875rem",color:"#6b7280",marginTop:"0.5rem"}},"*Credit card surcharge will be added at payment"),c&&parseFloat(c.order_discount_code_total||0)>0&&React.createElement("div",{className:"bif-discount-text"},"Includes discount of $",parseFloat(c.order_discount_code_total||0).toFixed(2))))):null},w=({isOpen:e,onClose:a,title:r,content:n})=>((0,t.useEffect)((()=>(document.body.style.overflow=e?"hidden":"",()=>{document.body.style.overflow=""})),[e]),(0,t.useEffect)((()=>{const t=t=>{"Escape"===t.key&&e&&a()};return e&&document.addEventListener("keydown",t),()=>{document.removeEventListener("keydown",t)}}),[e,a]),e?React.createElement("div",{className:"bif-modal-overlay",onClick:a},React.createElement("div",{className:"bif-modal",onClick:e=>e.stopPropagation()},React.createElement("div",{className:"bif-modal-header"},React.createElement("h3",{className:"bif-modal-title"},r),React.createElement("button",{className:"bif-modal-close",onClick:a,"aria-label":"Close modal"},"×")),React.createElement("div",{className:"bif-modal-content",dangerouslySetInnerHTML:{__html:n}}))):null),N=({userDetails:e,onUpdateDetails:t,formErrors:a,showSuburb:r=!0,showPostcode:n=!0,showComments:o=!1})=>React.createElement("div",{className:"bif-customer-details"},React.createElement("h2",{className:"bif-section-title"},"Your Details"),React.createElement("div",{className:"bif-customer-form"},React.createElement("div",{className:"bif-form-row"},React.createElement("div",{className:"bif-form-field"},React.createElement("label",null,"First Name *"),React.createElement("input",{type:"text",value:e.firstName,onChange:e=>t("firstName",e.target.value),placeholder:"Enter your first name",className:a.firstName?"bif-error":""}),a.firstName&&React.createElement("div",{className:"bif-field-error"},a.firstName)),React.createElement("div",{className:"bif-form-field"},React.createElement("label",null,"Last Name *"),React.createElement("input",{type:"text",value:e.lastName,onChange:e=>t("lastName",e.target.value),placeholder:"Enter your last name",className:a.lastName?"bif-error":""}),a.lastName&&React.createElement("div",{className:"bif-field-error"},a.lastName))),React.createElement("div",{className:"bif-form-row"},React.createElement("div",{className:"bif-form-field"},React.createElement("label",null,"Email *"),React.createElement("input",{type:"email",value:e.email,onChange:e=>t("email",e.target.value),placeholder:"Enter your email address",className:a.email?"bif-error":""}),a.email&&React.createElement("div",{className:"bif-field-error"},a.email)),React.createElement("div",{className:"bif-form-field"},React.createElement("label",null,"Phone *"),React.createElement("input",{type:"tel",value:e.phone,onChange:e=>t("phone",e.target.value),placeholder:"Enter your phone number",className:a.phone?"bif-error":""}),a.phone&&React.createElement("div",{className:"bif-field-error"},a.phone))),(n||r)&&React.createElement("div",{className:"bif-form-row"},n&&React.createElement("div",{className:"bif-form-field"},React.createElement("label",null,"Postcode"),React.createElement("input",{type:"text",value:e.postcode,onChange:e=>t("postcode",e.target.value),placeholder:"Enter your postcode"})),r&&React.createElement("div",{className:"bif-form-field"},React.createElement("label",null,"Suburb"),React.createElement("input",{type:"text",value:e.suburb,onChange:e=>t("suburb",e.target.value),placeholder:"Enter your suburb"}))),o&&React.createElement("div",{className:"bif-form-row bif-full-width"},React.createElement("div",{className:"bif-form-field"},React.createElement("label",null,"Comments"),React.createElement("textarea",{value:e.comments,onChange:e=>t("comments",e.target.value),rows:4,placeholder:"Any special requests or comments..."}))))),k=({summary:e,propertyIds:a,userDetails:r,paymentType:n,giftCertificate:o})=>{const i=(0,b.useStripe)(),l=(0,b.useElements)(),[c,s]=(0,t.useState)(!1),[u,m]=(0,t.useState)(""),[p,d]=(0,t.useState)(!1),[f,h]=(0,t.useState)(""),g=async t=>{t.preventDefault(),s(!0),m("");try{let t={amount:"deposit"===n?e.order_deposit_amount:e.order_payable_now,currency:e?.order_currency||"AUD",summary:e,propertyIds:"string"==typeof a?a.split(",").map((e=>parseInt(e.trim()))):a,userDetails:r,paymentType:n};if("gift"===n&&o)t.giftCertificateApplied=!0,t.giftCertificate=o,t.amount=0;else{if(!i||!l)return void console.error("Stripe.js has not loaded yet.");const e=l.getElement(b.CardElement),{paymentMethod:a,error:r}=await i.createPaymentMethod({type:"card",card:e});if(r)return console.error(r),m(r.message),void s(!1);t.stripePaymentMethodId=a.id,o&&o.valid&&(t.giftCertificateApplied=!0,t.giftCertificate=o)}const c=await fetch(`${y}/bookitfast/v1/process-payment`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(t)}),u=await c.json();if(!u.success)throw new Error(u.message||"Payment failed.");console.log("Payment successful:",u),h(u.data.charge),d(!0)}catch(e){console.error("Payment error:",e),m(e.message)}finally{s(!1)}};return React.createElement("div",{className:"bif-payment-container"},React.createElement("h3",null,"gift"===n?"🎁 Gift Certificate Payment":"💳 Payment Details"),u&&React.createElement("div",{className:"bif-error-message"},u),p?React.createElement("div",{className:"bif-success-message"},React.createElement("p",null,React.createElement("strong",null,"✅ Payment Successful!")),f&&React.createElement("p",null,React.createElement("a",{href:f,target:"_blank",rel:"noopener noreferrer"},"📄 Click here to view your receipt"))):"gift"===n?React.createElement("div",{className:"bif-gift-certificate-payment-form"},React.createElement("div",{className:"bif-gift-certificate-summary"},React.createElement("p",null,"🎁 ",React.createElement("strong",null,"Paying with Gift Certificate")),React.createElement("p",null,"Amount: ",React.createElement("strong",null,"$",parseFloat(o.gc_amount_applied||0).toFixed(2))),React.createElement("p",null,"No credit card required - your gift certificate will be charged automatically.")),React.createElement("button",{onClick:g,disabled:c,className:"bif-btn bif-btn-primary bif-btn-large"},c?"Processing...":"Complete Booking")):React.createElement("form",{onSubmit:g,className:"bif-stripe-form"},React.createElement("div",{className:"bif-card-element-container"},React.createElement(b.CardElement,{options:{hidePostalCode:!0,style:{base:{fontSize:"16px",color:"#424770","::placeholder":{color:"#aab7c4"}},invalid:{color:"#9e2146"}}}})),React.createElement("button",{type:"submit",disabled:!i||c,className:"bif-btn bif-btn-primary bif-btn-large"},c?"Processing...":"Pay Now")))},S=({propertyIds:e="",showDiscount:a=!1,showSuburb:r=!0,showPostcode:n=!0,showRedeemGiftCertificate:o=!1,showComments:i=!1,buttonColor:l="#0073aa",buttonTextColor:c="#ffffff",minNights:s=1,maxNights:u=14,showPropertyImages:m=!1,includeIcons:p=!1,layoutStyle:d="cards",buttonIcon:S="search",searchLayout:x="default"})=>{const P=g("nights"),O=P&&!isNaN(P)?Math.max(parseInt(P,10),s):s,I=g("start"),T=g("discount"),j=I?(e=>{const t=e.split("-");if(3===t.length){const[e,a,r]=t.map(Number);if(!isNaN(e)&&!isNaN(a)&&!isNaN(r)){const t=new Date(r,a-1,e);return t.setHours(12,0,0,0),t.toISOString().split("T")[0]}}return null})(I):"",D="string"==typeof e?e:"",[F,A]=(0,t.useState)({date:j,nights:O}),[B,$]=(0,t.useState)(null),[G,L]=(0,t.useState)({}),[M,z]=(0,t.useState)(null),[U,q]=(0,t.useState)(null),[H,Y]=(0,t.useState)(!1),[W,V]=(0,t.useState)(""),[Z,J]=(0,t.useState)({firstName:"",lastName:"",phone:"",email:"",postcode:"",suburb:"",comments:""}),[K,Q]=(0,t.useState)(!1),[X,ee]=(0,t.useState)(!1),[te,ae]=(0,t.useState)(T),[re,ne]=(0,t.useState)(null),[oe,ie]=(0,t.useState)(!1),[le,ce]=(0,t.useState)(null),[se,ue]=(0,t.useState)({}),[me,pe]=(0,t.useState)({number:"",pin:""}),[de,fe]=(0,t.useState)(!1),[be,he]=(0,t.useState)(null),[ye,ge]=(0,t.useState)(!1),[Ee,ve]=(0,t.useState)({}),[Re,_e]=(0,t.useState)(!1),[Ce,we]=(0,t.useState)({isOpen:!1,title:"",content:""});(0,t.useEffect)((()=>{j&&O&&(console.log("Auto-checking availability with:",j,O),Ne(j,O))}),[j,O]);const Ne=async(e=F.date,t=F.nights)=>{if(!e||!D)return void console.warn("fetchAvailability skipped - Missing startDate or propertyIds");const a=F.date,r=D.split(",").filter((e=>""!==e.trim()));Y(!0),V(""),_e(!1);try{const e=await fetch(`${y}/bookitfast/v1/availability`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({ids:r,start:a,nights:t})}),n=await e.json();$(n),_e(!0);const o=Object.keys(n).reduce(((e,t)=>(e[t]=!1,e)),{});L(o)}catch(e){console.error(e),V("Failed to fetch availability. Please try again.")}finally{Y(!1)}},ke=(e,t)=>{ve((a=>{const r=a[e]||{},n={...a,[e]:{...r,[t]:!r[t]}};return Se(G,te,n,0),n}))},Se=async(e,t=null,a=Ee,r=0)=>{const n=F.date,o=F.nights,i=new Date(new Date(n).getTime()+864e5*o).toISOString().split("T")[0];Y(!0),V("");try{const r=await fetch(`${y}/bookitfast/v1/availability/summary`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({selected:e,selected_optional_extras:a,start:n,end:i,discount_code:t||null})});if(!r.ok)throw new Error(`HTTP error! status: ${r.status}`);const o=await r.json();q(o),o.stripe_publishable_key&&z(f(o.stripe_publishable_key))}catch(n){console.error("Error fetching summary:",n),r<3?(console.log(`Retrying... Attempt ${r+1}`),await Se(e,t,a,r+1)):V("Failed to fetch summary. Please try again.")}finally{Y(!1)}},xe=e=>{(()=>{const e={};return Z.firstName.trim()||(e.firstName="First name is required"),Z.lastName.trim()||(e.lastName="Last name is required"),Z.email.trim()||(e.email="Email is required"),Z.phone.trim()||(e.phone="Phone is required"),K||(e.agreeToTerms="You must agree to the terms and conditions"),X||(e.consentToDataSharing="You must consent to data sharing with Book It Fast service"),ue(e),0===Object.keys(e).length})()&&(ce(e),ie(!0))},Pe=B?Object.entries(B).filter((([e])=>G[e])).map((([e,t])=>({id:e,...t,...U?.property_summaries?.[e]||{},selectedExtras:Ee[e],onToggleExtra:ke}))):[];return React.createElement("div",{className:"bif-booking-container",style:{"--bif-button-color":l,"--bif-button-color-hover":`${l}dd`,"--bif-button-color-active":`${l}bb`,"--bif-button-text-color":c}},React.createElement("div",{className:"bif-booking-steps"},React.createElement(_,{checkInDate:F.date,nights:F.nights,onDateChange:e=>A((t=>({...t,date:e}))),onNightsChange:e=>A((t=>({...t,nights:e}))),onCheckAvailability:Ne,isLoading:H,minNights:s,maxNights:u,buttonIcon:S,searchLayout:x}),W&&React.createElement("div",{className:"bif-error-message"},W),Re&&B&&React.createElement("div",{className:"bif-property-list"},React.createElement("h2",{className:"bif-section-title"},"Available Properties"),React.createElement("div",{className:`bif-properties bif-properties--${d}`},Object.entries(B).map((([e,t])=>{const a={key:e,property:{id:e,...t,selectedExtras:Ee[e],onToggleExtra:ke},isSelected:G[e],onToggle:()=>(async e=>{const t={...G,[e]:!G[e]};L(t),Object.values(t).includes(!0)?await Se(t,te):q(null)})(e),nights:F.nights,checkInDate:F.date,showPropertyImages:m,includeIcons:p};switch(d){case"grid":return React.createElement(E,a);case"rows":return React.createElement(v,a);default:return React.createElement(R,a)}})))),U&&Pe.length>0&&React.createElement(C,{selectedProperties:Pe,selectedExtras:Ee,nights:F.nights,total:(U.order_payable_now||0)-(U.order_surcharge||0),discountCode:te,onDiscountCodeChange:ae,onApplyDiscount:e=>{Object.keys(G).some((e=>G[e]))&&Se(G,e)},checkInDate:F.date,summary:U,showDiscount:a,showRedeemGiftCertificate:o,giftCertificate:me,onGiftCertificateChange:pe,showGiftCertificateForm:de,onTriggerShowGiftCertificate:()=>{fe(!0)},onApplyGiftCertificate:async e=>{if(e.preventDefault(),console.log("Gift Certificate: Apply button clicked"),console.log("Gift Certificate Data:",me),console.log("Current Summary:",U),ye)return void console.log("Gift Certificate: Already processing, ignoring click");if(!U)return void console.error("Gift Certificate: No summary available");if(!me.number||!me.pin)return console.error("Gift Certificate: Missing number or pin"),void alert("Please enter both certificate number and pin");ge(!0),console.log("Gift Certificate: Setting loading state to true");let t={...U};if(U.order_weekly_discount>0){console.log("Gift Certificate: Weekly discount detected, adjusting summary for gift certificate calculation"),console.log("Gift Certificate: Original order_grand_total:",U.order_grand_total),console.log("Gift Certificate: Order weekly discount:",U.order_weekly_discount),console.log("Gift Certificate: Order surcharge:",U.order_surcharge);const e=parseFloat(U.order_sub_total)+parseFloat(U.order_mandatory_extras_total);console.log("Gift Certificate: Total before weekly discount (excluding surcharge):",e),t={...U,order_grand_total:e.toString(),order_total_before_surcharge:e,order_payable_now:e.toString(),order_surcharge:0,order_has_surcharge:!1},console.log("Gift Certificate: Adjusted summary for gift certificate:",t)}const a={certificate:me,summary:t};console.log("Gift Certificate: Sending request with data:",a);try{const e=await fetch(`${y}/bookitfast/v1/apply-gift-certificate`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(a)});if(console.log("Gift Certificate: Response status:",e.status),!e.ok)throw new Error(`HTTP error! status: ${e.status}`);const t=await e.json();console.log("Gift Certificate: Response data:",t),t.valid?(he(t),t.summary&&(q(t.summary),console.log("Gift Certificate: Updated summary:",t.summary)),console.log("Gift Certificate: Application successful"),console.log("Gift Certificate: Order payable now:",t.order_payable_now)):(console.error("Gift Certificate: API returned error:",t),alert(t.message||"Failed to apply gift certificate"))}catch(e){console.error("Gift Certificate: Error applying certificate:",e),alert("Error applying gift certificate. Please try again.")}finally{ge(!1),console.log("Gift Certificate: Setting loading state to false")}},gcResult:be,gcLoading:ye}),U&&Pe.length>0&&React.createElement(N,{userDetails:Z,onUpdateDetails:(e,t)=>{J((a=>({...a,[e]:t}))),se[e]&&ue((t=>({...t,[e]:null})))},formErrors:se,showSuburb:r,showPostcode:n,showComments:i}),U&&Pe.length>0&&React.createElement("div",{className:"bif-terms-payment"},React.createElement("div",{className:"bif-terms-checkbox"},React.createElement("input",{type:"checkbox",id:"agreeToTerms",checked:K,onChange:()=>Q(!K)}),React.createElement("label",{htmlFor:"agreeToTerms"},"I have read and agree to the"," ",U.order_booking_conditions?.map(((e,t)=>React.createElement("span",{key:t},"local"===e.type?React.createElement("a",{href:"#",onClick:t=>{t.preventDefault(),we({isOpen:!0,title:e.title,content:e.content})},style:{textDecoration:"underline",cursor:"pointer"}},e.title):React.createElement("a",{href:e.url,target:"_blank",rel:"noopener noreferrer"},e.title),t<U.order_booking_conditions.length-2?", ":"",t===U.order_booking_conditions.length-2?" and ":"")))),se.agreeToTerms&&React.createElement("div",{className:"bif-field-error"},se.agreeToTerms)),React.createElement("div",{className:"bif-privacy-consent"},React.createElement("input",{type:"checkbox",id:"consentToDataSharing",checked:X,onChange:()=>ee(!X)}),React.createElement("label",{htmlFor:"consentToDataSharing"},"I consent to my personal information being transmitted to and processed by Book It Fast (",React.createElement("a",{href:"https://bookitfast.app/privacy-policy",target:"_blank",rel:"noopener noreferrer"},"Privacy Policy"),") for booking and payment processing purposes."),se.consentToDataSharing&&React.createElement("div",{className:"bif-field-error"},se.consentToDataSharing)),!oe&&React.createElement("div",{className:"bif-payment-options"},Object.keys(se).length>0&&React.createElement("div",{className:"bif-validation-error"},"Please complete all required fields before proceeding with payment."),be&&be.valid&&parseFloat(be.total)-parseFloat(be.gc_amount_applied)==0?React.createElement("div",{className:"bif-gift-certificate-payment"},React.createElement("div",{className:"bif-gift-certificate-full-coverage"},React.createElement("p",null,"🎉 ",React.createElement("strong",null,"Your gift certificate covers the full booking amount!")),React.createElement("p",null,"No additional payment required.")),React.createElement("button",{className:"bif-btn bif-btn-primary bif-btn-large",onClick:()=>xe("gift")},"🎁 Complete Booking with Gift Certificate")):React.createElement(React.Fragment,null,U.order_surcharge>0&&parseFloat(U.order_payable_now||0)>0&&React.createElement("div",{className:"bif-surcharge-info"},React.createElement("p",null,"Please note a credit card surcharge applies of ",U.order_deposit_surcharge>0&&` $${U.order_deposit_surcharge} for deposit or `,"$",U.order_surcharge," for the full payment.")),U.order_deposit_amount>0?React.createElement("div",{className:"bif-payment-buttons"},React.createElement("button",{className:"bif-btn bif-btn-primary",onClick:()=>xe("deposit")},"💳 Pay Deposit (",h(U?.order_currency||"AUD"),U.order_deposit_amount,")"),React.createElement("button",{className:"bif-btn bif-btn-primary",onClick:()=>xe("full")},"💳 Pay In Full (",h(U?.order_currency||"AUD"),be&&be.valid?parseFloat(be.order_payable_now).toFixed(2):U.order_payable_now,")")):React.createElement("button",{className:"bif-btn bif-btn-primary bif-btn-large",onClick:()=>xe("full")},"💳 Complete Booking - ",h(U?.order_currency||"AUD"),be&&be.valid?parseFloat(be.order_payable_now).toFixed(2):U.order_payable_now)))),U&&oe&&React.createElement("div",{className:"bif-payment-form-container"},"gift"===le?React.createElement(k,{summary:U,propertyIds:D.split(",").map((e=>parseInt(e.trim()))),userDetails:Z,paymentType:le,giftCertificate:be}):M&&React.createElement(b.Elements,{stripe:M},React.createElement(k,{summary:U,propertyIds:D.split(",").map((e=>parseInt(e.trim()))),userDetails:Z,paymentType:le,giftCertificate:be})))),React.createElement(w,{isOpen:Ce.isOpen,onClose:()=>we({isOpen:!1,title:"",content:""}),title:Ce.title,content:Ce.content}))},x=window.wp.blocks,P=window.wp.blockEditor,O=window.wp.components,I=window.wp.primitives,T=window.ReactJSXRuntime,j=(0,T.jsx)(I.SVG,{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24",children:(0,T.jsx)(I.Path,{d:"M13 5c-3.3 0-6 2.7-6 6 0 1.4.5 2.7 1.3 3.7l-3.8 3.8 1.1 1.1 3.8-3.8c1 .8 2.3 1.3 3.7 1.3 3.3 0 6-2.7 6-6S16.3 5 13 5zm0 10.5c-2.5 0-4.5-2-4.5-4.5s2-4.5 4.5-4.5 4.5 2 4.5 4.5-2 4.5-4.5 4.5z"})}),D=(0,T.jsx)(I.SVG,{viewBox:"0 0 24 24",xmlns:"http://www.w3.org/2000/svg",children:(0,T.jsx)(I.Path,{d:"M19 3H5c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h14c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2-2zm.5 16c0 .3-.2.5-.5.5H5c-.3 0-.5-.2-.5-.5V7h15v12zM9 10H7v2h2v-2zm0 4H7v2h2v-2zm4-4h-2v2h2v-2zm4 0h-2v2h2v-2zm-4 4h-2v2h2v-2zm4 0h-2v2h2v-2z"})}),F=(0,T.jsx)(I.SVG,{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24",children:(0,T.jsx)(I.Path,{d:"M12 4L4 7.9V20h16V7.9L12 4zm6.5 14.5H14V13h-4v5.5H5.5V8.8L12 5.7l6.5 3.1v9.7z"})}),A=(0,T.jsx)(I.SVG,{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24",children:(0,T.jsx)(I.Path,{d:"M12 9c-.8 0-1.5.7-1.5 1.5S11.2 12 12 12s1.5-.7 1.5-1.5S12.8 9 12 9zm0-5c-3.6 0-6.5 2.8-6.5 6.2 0 .8.3 1.8.9 3.1.5 1.1 1.2 2.3 2 3.6.7 1 3 3.8 3.2 3.9l.4.5.4-.5c.2-.2 2.6-2.9 3.2-3.9.8-1.2 1.5-2.5 2-3.6.6-1.3.9-2.3.9-3.1C18.5 6.8 15.6 4 12 4zm4.3 8.7c-.5 1-1.1 2.2-1.9 3.4-.5.7-1.7 2.2-2.4 3-.7-.8-1.9-2.3-2.4-3-.8-1.2-1.4-2.3-1.9-3.3-.6-1.4-.7-2.2-.7-2.5 0-2.6 2.2-4.7 5-4.7s5 2.1 5 4.7c0 .2-.1 1-.7 2.4z"})}),B=(0,T.jsx)(I.SVG,{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24",children:(0,T.jsx)(I.Path,{d:"M11.776 4.454a.25.25 0 01.448 0l2.069 4.192a.25.25 0 00.188.137l4.626.672a.25.25 0 01.139.426l-3.348 3.263a.25.25 0 00-.072.222l.79 4.607a.25.25 0 01-.362.263l-4.138-2.175a.25.25 0 00-.232 0l-4.138 2.175a.25.25 0 01-.363-.263l.79-4.607a.25.25 0 00-.071-.222L4.754 9.881a.25.25 0 01.139-.426l4.626-.672a.25.25 0 00.188-.137l2.069-4.192z"})}),$=(0,T.jsx)(I.SVG,{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24",children:(0,T.jsx)(I.Path,{d:"m21.5 9.1-6.6-6.6-4.2 5.6c-1.2-.1-2.4.1-3.6.7-.1 0-.1.1-.2.1-.5.3-.9.6-1.2.9l3.7 3.7-5.7 5.7v1.1h1.1l5.7-5.7 3.7 3.7c.4-.4.7-.8.9-1.2.1-.1.1-.2.2-.3.6-1.1.8-2.4.6-3.6l5.6-4.1zm-7.3 3.5.1.9c.1.9 0 1.8-.4 2.6l-6-6c.8-.4 1.7-.5 2.6-.4l.9.1L15 4.9 19.1 9l-4.9 3.6z"})}),G=(0,T.jsx)(I.SVG,{viewBox:"0 0 24 24",xmlns:"http://www.w3.org/2000/svg",children:(0,T.jsx)(I.Path,{d:"M10.97 10.159a3.382 3.382 0 0 0-2.857.955l1.724 1.723-2.836 2.913L7 17h1.25l2.913-2.837 1.723 1.723a3.38 3.38 0 0 0 .606-.825c.33-.63.446-1.343.35-2.032L17 10.695 13.305 7l-2.334 3.159Z"})}),L=(0,T.jsx)(I.SVG,{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24",children:(0,T.jsx)(I.Path,{d:"M12 4c-4.4 0-8 3.6-8 8s3.6 8 8 8 8-3.6 8-8-3.6-8-8-8Zm6.5 8c0 .6 0 1.2-.2 1.8h-2.7c0-.6.2-1.1.2-1.8s0-1.2-.2-1.8h2.7c.2.6.2 1.1.2 1.8Zm-.9-3.2h-2.4c-.3-.9-.7-1.8-1.1-2.4-.1-.2-.2-.4-.3-.5 1.6.5 3 1.6 3.8 3ZM12.8 17c-.3.5-.6 1-.8 1.3-.2-.3-.5-.8-.8-1.3-.3-.5-.6-1.1-.8-1.7h3.3c-.2.6-.5 1.2-.8 1.7Zm-2.9-3.2c-.1-.6-.2-1.1-.2-1.8s0-1.2.2-1.8H14c.1.6.2 1.1.2 1.8s0 1.2-.2 1.8H9.9ZM11.2 7c.3-.5.6-1 .8-1.3.2.3.5.8.8 1.3.3.5.6 1.1.8 1.7h-3.3c.2-.6.5-1.2.8-1.7Zm-1-1.2c-.1.2-.2.3-.3.5-.4.7-.8 1.5-1.1 2.4H6.4c.8-1.4 2.2-2.5 3.8-3Zm-1.8 8H5.7c-.2-.6-.2-1.1-.2-1.8s0-1.2.2-1.8h2.7c0 .6-.2 1.1-.2 1.8s0 1.2.2 1.8Zm-2 1.4h2.4c.3.9.7 1.8 1.1 2.4.1.2.2.4.3.5-1.6-.5-3-1.6-3.8-3Zm7.4 3c.1-.2.2-.3.3-.5.4-.7.8-1.5 1.1-2.4h2.4c-.8 1.4-2.2 2.5-3.8 3Z"})}),{useState:M,useEffect:z}=wp.element;(0,x.registerBlockType)("bookitfast/multi-embed",{title:"Book It Fast Availability",description:"A multi-property booking embed for WordPress.",icon:"calendar",category:"widgets",attributes:{propertyIds:{type:"string",default:""},showDiscount:{type:"boolean",default:!1},showSuburb:{type:"boolean",default:!1},showPostcode:{type:"boolean",default:!1},showRedeemGiftCertificate:{type:"boolean",default:!1},showComments:{type:"boolean",default:!1},buttonColor:{type:"string",default:"#0073aa"},buttonTextColor:{type:"string",default:"#ffffff"},minNights:{type:"number",default:1},maxNights:{type:"number",default:14},showPropertyImages:{type:"boolean",default:!1},includeIcons:{type:"boolean",default:!1},layoutStyle:{type:"string",default:"cards"},buttonIcon:{type:"string",default:"search"},searchLayout:{type:"string",default:"default"}},edit:({attributes:e,setAttributes:t})=>{const a=(0,P.useBlockProps)(),[r,n]=M([]),[o,i]=M(!0),[l,c]=M(null);return z((()=>{wp.apiFetch({path:"/bookitfast/v1/properties"}).then((e=>{e.success?n(e.properties):c("Failed to fetch properties.")})).catch((e=>{console.error("API Fetch Error:",e),c("Error fetching properties.")})).finally((()=>i(!1)))}),[]),React.createElement("div",a,React.createElement(P.InspectorControls,null,React.createElement(O.PanelBody,{title:"Search Layout",initialOpen:!0},React.createElement(O.SelectControl,{label:"Search Box Style",value:e.searchLayout,options:[{label:"Default (Stacked)",value:"default"},{label:"Horizontal (Check-In & Nights)",value:"horizontal"}],onChange:e=>t({searchLayout:e}),help:"Choose the layout style for the search box",__next40pxDefaultSize:!0,__nextHasNoMarginBottom:!0})),React.createElement(O.PanelBody,{title:"Search Options",initialOpen:!1},o?React.createElement("p",null,"Loading properties..."):l?React.createElement("p",{style:{color:"red"}},l):React.createElement(O.SelectControl,{multiple:!0,label:"Select Properties",value:e.propertyIds?e.propertyIds.split(","):[],options:r.map((e=>({label:e.title,value:e.id.toString()}))),onChange:e=>{const a=e.join(",");t({propertyIds:a})},__next40pxDefaultSize:!0,__nextHasNoMarginBottom:!0}),React.createElement(O.RangeControl,{label:"Minimum Nights",value:e.minNights,onChange:e=>t({minNights:e}),min:1,max:30,step:1}),React.createElement(O.RangeControl,{label:"Maximum Nights",value:e.maxNights,onChange:e=>t({maxNights:e}),min:e.minNights||1,max:90,step:1}),React.createElement(O.BaseControl,{label:"Button Color",id:"button-color-control"},React.createElement(O.ColorPalette,{value:e.buttonColor,onChange:e=>t({buttonColor:e}),colors:[{name:"Blue",color:"#0073aa"},{name:"Green",color:"#46b450"},{name:"Red",color:"#dc3232"},{name:"Orange",color:"#ff6900"},{name:"Purple",color:"#8224e3"},{name:"Dark",color:"#333333"}]})),React.createElement(O.BaseControl,{label:"Button Text Color",id:"button-text-color-control"},React.createElement(O.ColorPalette,{value:e.buttonTextColor,onChange:e=>t({buttonTextColor:e}),colors:[{name:"White",color:"#ffffff"},{name:"Black",color:"#000000"},{name:"Dark Gray",color:"#333333"},{name:"Light Gray",color:"#666666"}]})),React.createElement("div",{style:{marginBottom:"16px"}},React.createElement("label",{style:{display:"block",marginBottom:"8px",fontSize:"11px",fontWeight:"500",textTransform:"uppercase",color:"#1e1e1e"}},"Button Icon"),React.createElement("div",{style:{display:"grid",gridTemplateColumns:"repeat(4, 1fr)",gap:"8px",padding:"8px",border:"1px solid #ddd",borderRadius:"4px",backgroundColor:"#fff"}},[{icon:j,name:"search",label:"Search"},{icon:D,name:"calendar",label:"Calendar"},{icon:F,name:"home",label:"Home"},{icon:A,name:"mapMarker",label:"Map Marker"},{icon:B,name:"star",label:"Star"},{icon:$,name:"pin",label:"Pin"},{icon:G,name:"pinSmall",label:"Pin Small"},{icon:L,name:"globe",label:"Globe"}].map((({icon:a,name:r,label:n})=>React.createElement(O.Button,{key:r,onClick:()=>t({buttonIcon:r}),variant:e.buttonIcon===r?"primary":"secondary",style:{width:"48px",height:"48px",padding:"8px",display:"flex",alignItems:"center",justifyContent:"center"},title:n},React.createElement(O.Icon,{icon:a,size:20}))))),React.createElement("p",{style:{fontSize:"12px",color:"#757575",margin:"8px 0 0 0",fontStyle:"italic"}},"Select an icon for the search button"))),React.createElement(O.PanelBody,{title:"Results Layout",initialOpen:!1},React.createElement(O.SelectControl,{label:"Layout Style",value:e.layoutStyle,options:[{label:"Card List",value:"cards"},{label:"Grid Tiles",value:"grid"},{label:"Compact Rows",value:"rows"}],onChange:e=>t({layoutStyle:e}),help:"Choose how property results are displayed",__next40pxDefaultSize:!0,__nextHasNoMarginBottom:!0}),React.createElement(O.ToggleControl,{label:"Show Property Images",checked:e.showPropertyImages,onChange:e=>t({showPropertyImages:e}),__nextHasNoMarginBottom:!0}),React.createElement(O.ToggleControl,{label:"Include Icons",checked:e.includeIcons,onChange:e=>t({includeIcons:e}),help:"Show icons for bed size, inclusions, etc.",__nextHasNoMarginBottom:!0})),React.createElement(O.PanelBody,{title:"Form Settings",initialOpen:!1},React.createElement(O.ToggleControl,{label:"Show Discount Field",checked:e.showDiscount,onChange:e=>t({showDiscount:e}),__nextHasNoMarginBottom:!0}),React.createElement(O.ToggleControl,{label:"Show Suburb Field",checked:e.showSuburb,onChange:e=>t({showSuburb:e}),__nextHasNoMarginBottom:!0}),React.createElement(O.ToggleControl,{label:"Show Postcode Field",checked:e.showPostcode,onChange:e=>t({showPostcode:e}),__nextHasNoMarginBottom:!0}),React.createElement(O.ToggleControl,{label:"Show Redeem Gift Certificate Section",checked:e.showRedeemGiftCertificate,onChange:e=>t({showRedeemGiftCertificate:e}),__nextHasNoMarginBottom:!0}),React.createElement(O.ToggleControl,{label:"Show Comments Field",checked:e.showComments,onChange:e=>t({showComments:e}),__nextHasNoMarginBottom:!0}))),React.createElement(S,{propertyIds:e.propertyIds,showDiscount:e.showDiscount,showSuburb:e.showSuburb,showPostcode:e.showPostcode,showRedeemGiftCertificate:e.showRedeemGiftCertificate,showComments:e.showComments,buttonColor:e.buttonColor,buttonTextColor:e.buttonTextColor,buttonIcon:e.buttonIcon,minNights:e.minNights,maxNights:e.maxNights,showPropertyImages:e.showPropertyImages,includeIcons:e.includeIcons,layoutStyle:e.layoutStyle,searchLayout:e.searchLayout}))},save:()=>null})})()})();
  • book-it-fast/trunk/build/frontend.asset.php

    r3404456 r3404538  
    1 <?php return array('dependencies' => array('react', 'react-dom'), 'version' => '49d721204fb494e52c93');
     1<?php return array('dependencies' => array('react', 'react-dom'), 'version' => 'da68712e9dc5d69dadea');
  • book-it-fast/trunk/build/frontend.js

    r3404456 r3404538  
    1 (()=>{var e={609:e=>{"use strict";e.exports=window.React},926:function(e,t,a){!function(e,t){"use strict";function a(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),a.push.apply(a,r)}return a}function r(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{};t%2?a(Object(r),!0).forEach((function(t){i(e,t,r[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(r)):a(Object(r)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(r,t))}))}return e}function n(e){return n="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},n(e)}function i(e,t,a){return t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}function o(e,t){if(null==e)return{};var a,r,n=function(e,t){if(null==e)return{};var a,r,n={},i=Object.keys(e);for(r=0;r<i.length;r++)a=i[r],t.indexOf(a)>=0||(n[a]=e[a]);return n}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(r=0;r<i.length;r++)a=i[r],t.indexOf(a)>=0||Object.prototype.propertyIsEnumerable.call(e,a)&&(n[a]=e[a])}return n}function c(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var a=e&&("undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"]);if(null!=a){var r,n,i=[],_n=!0,o=!1;try{for(a=a.call(e);!(_n=(r=a.next()).done)&&(i.push(r.value),!t||i.length!==t);_n=!0);}catch(e){o=!0,n=e}finally{try{_n||null==a.return||a.return()}finally{if(o)throw n}}return i}}(e,t)||function(e,t){if(e){if("string"==typeof e)return l(e,t);var a=Object.prototype.toString.call(e).slice(8,-1);return"Object"===a&&e.constructor&&(a=e.constructor.name),"Map"===a||"Set"===a?Array.from(e):"Arguments"===a||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(a)?l(e,t):void 0}}(e,t)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function l(e,t){(null==t||t>e.length)&&(t=e.length);for(var a=0,r=new Array(t);a<t;a++)r[a]=e[a];return r}function s(e){return e&&e.__esModule&&Object.prototype.hasOwnProperty.call(e,"default")?e.default:e}var u,m,p,d,f={exports:{}};f.exports=function(){if(d)return p;d=1;var e=m?u:(m=1,u="SECRET_DO_NOT_PASS_THIS_OR_YOU_WILL_BE_FIRED");function t(){}function a(){}return a.resetWarningCache=t,p=function(){function r(t,a,r,n,i,o){if(o!==e){var c=new Error("Calling PropTypes validators directly is not supported by the `prop-types` package. Use PropTypes.checkPropTypes() to call them. Read more at http://fb.me/use-check-prop-types");throw c.name="Invariant Violation",c}}function n(){return r}r.isRequired=r;var i={array:r,bool:r,func:r,number:r,object:r,string:r,symbol:r,any:r,arrayOf:n,element:r,elementType:r,instanceOf:n,node:r,objectOf:n,oneOf:n,oneOfType:n,shape:n,exact:n,checkPropTypes:a,resetWarningCache:t};return i.PropTypes=i,i}}()();var b=s(f.exports),y=function(e,a,r){var n=!!r,i=t.useRef(r);t.useEffect((function(){i.current=r}),[r]),t.useEffect((function(){if(!n||!e)return function(){};var t=function(){i.current&&i.current.apply(i,arguments)};return e.on(a,t),function(){e.off(a,t)}}),[n,a,e,i])},h=function(e){var a=t.useRef(e);return t.useEffect((function(){a.current=e}),[e]),a.current},g=function(e){return null!==e&&"object"===n(e)},E="[object Object]",v=function e(t,a){if(!g(t)||!g(a))return t===a;var r=Array.isArray(t);if(r!==Array.isArray(a))return!1;var n=Object.prototype.toString.call(t)===E;if(n!==(Object.prototype.toString.call(a)===E))return!1;if(!n&&!r)return t===a;var i=Object.keys(t),o=Object.keys(a);if(i.length!==o.length)return!1;for(var c={},l=0;l<i.length;l+=1)c[i[l]]=!0;for(var s=0;s<o.length;s+=1)c[o[s]]=!0;var u=Object.keys(c);if(u.length!==i.length)return!1;var m=t,p=a;return u.every((function(t){return e(m[t],p[t])}))},R=function(e,t,a){return g(e)?Object.keys(e).reduce((function(n,o){var c=!g(t)||!v(e[o],t[o]);return a.includes(o)?(c&&console.warn("Unsupported prop change: options.".concat(o," is not a mutable property.")),n):c?r(r({},n||{}),{},i({},o,e[o])):n}),null):null},_="Invalid prop `stripe` supplied to `Elements`. We recommend using the `loadStripe` utility from `@stripe/stripe-js`. See https://stripe.com/docs/stripe-js/react#elements-props-stripe for details.",N=function(e){var t,a=arguments.length>1&&void 0!==arguments[1]?arguments[1]:_;if(null===e||g(t=e)&&"function"==typeof t.elements&&"function"==typeof t.createToken&&"function"==typeof t.createPaymentMethod&&"function"==typeof t.confirmCardPayment)return e;throw new Error(a)},C=function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:_;if(function(e){return g(e)&&"function"==typeof e.then}(e))return{tag:"async",stripePromise:Promise.resolve(e).then((function(e){return N(e,t)}))};var a=N(e,t);return null===a?{tag:"empty"}:{tag:"sync",stripe:a}},k=function(e){e&&e._registerWrapper&&e.registerAppInfo&&(e._registerWrapper({name:"react-stripe-js",version:"3.6.0"}),e.registerAppInfo({name:"react-stripe-js",version:"3.6.0",url:"https://stripe.com/docs/stripe-js/react"}))},w=t.createContext(null);w.displayName="ElementsContext";var S=function(e,t){if(!e)throw new Error("Could not find Elements context; You need to wrap the part of your app that ".concat(t," in an <Elements> provider."));return e},x=function(e){var a=e.stripe,r=e.options,n=e.children,i=t.useMemo((function(){return C(a)}),[a]),o=c(t.useState((function(){return{stripe:"sync"===i.tag?i.stripe:null,elements:"sync"===i.tag?i.stripe.elements(r):null}})),2),l=o[0],s=o[1];t.useEffect((function(){var e=!0,t=function(e){s((function(t){return t.stripe?t:{stripe:e,elements:e.elements(r)}}))};return"async"!==i.tag||l.stripe?"sync"!==i.tag||l.stripe||t(i.stripe):i.stripePromise.then((function(a){a&&e&&t(a)})),function(){e=!1}}),[i,l,r]);var u=h(a);t.useEffect((function(){null!==u&&u!==a&&console.warn("Unsupported prop change on Elements: You cannot change the `stripe` prop after setting it.")}),[u,a]);var m=h(r);return t.useEffect((function(){if(l.elements){var e=R(r,m,["clientSecret","fonts"]);e&&l.elements.update(e)}}),[r,m,l.elements]),t.useEffect((function(){k(l.stripe)}),[l.stripe]),t.createElement(w.Provider,{value:l},n)};x.propTypes={stripe:b.any,options:b.object};var P=function(e){var a=t.useContext(w);return S(a,e)},O=function(e){return(0,e.children)(P("mounts <ElementsConsumer>"))};O.propTypes={children:b.func.isRequired};var T=["on","session"],j=t.createContext(null);j.displayName="CheckoutSdkContext";var D=function(e,t){if(!e)throw new Error("Could not find CheckoutProvider context; You need to wrap the part of your app that ".concat(t," in an <CheckoutProvider> provider."));return e},A=t.createContext(null);A.displayName="CheckoutContext";var I=function(e){var a=e.stripe,r=e.options,n=e.children,i=t.useMemo((function(){return C(a,"Invalid prop `stripe` supplied to `CheckoutProvider`. We recommend using the `loadStripe` utility from `@stripe/stripe-js`. See https://stripe.com/docs/stripe-js/react#elements-props-stripe for details.")}),[a]),l=c(t.useState(null),2),s=l[0],u=l[1],m=c(t.useState((function(){return{stripe:"sync"===i.tag?i.stripe:null,checkoutSdk:null}})),2),p=m[0],d=m[1],f=function(e,t){d((function(a){return a.stripe&&a.checkoutSdk?a:{stripe:e,checkoutSdk:t}}))},b=t.useRef(!1);t.useEffect((function(){var e=!0;return"async"!==i.tag||p.stripe?"sync"===i.tag&&i.stripe&&!b.current&&(b.current=!0,i.stripe.initCheckout(r).then((function(e){e&&(f(i.stripe,e),e.on("change",u))}))):i.stripePromise.then((function(t){t&&e&&!b.current&&(b.current=!0,t.initCheckout(r).then((function(e){e&&(f(t,e),e.on("change",u))})))})),function(){e=!1}}),[i,p,r,u]);var y=h(a);t.useEffect((function(){null!==y&&y!==a&&console.warn("Unsupported prop change on CheckoutProvider: You cannot change the `stripe` prop after setting it.")}),[y,a]);var g=h(r);t.useEffect((function(){var e,t;if(p.checkoutSdk){var a=null==g||null===(e=g.elementsOptions)||void 0===e?void 0:e.appearance,n=null==r||null===(t=r.elementsOptions)||void 0===t?void 0:t.appearance;n&&!v(n,a)&&p.checkoutSdk.changeAppearance(n)}}),[r,g,p.checkoutSdk]),t.useEffect((function(){k(p.stripe)}),[p.stripe]);var E=t.useMemo((function(){return function(e,t){if(!e)return null;e.on,e.session;var a=o(e,T);return t?Object.assign(t,a):Object.assign(e.session(),a)}(p.checkoutSdk,s)}),[p.checkoutSdk,s]);return p.checkoutSdk?t.createElement(j.Provider,{value:p},t.createElement(A.Provider,{value:E},n)):null};I.propTypes={stripe:b.any,options:b.shape({fetchClientSecret:b.func.isRequired,elementsOptions:b.object}).isRequired};var F=function(e){var a=t.useContext(j),r=t.useContext(w);if(a&&r)throw new Error("You cannot wrap the part of your app that ".concat(e," in both <CheckoutProvider> and <Elements> providers."));return a?D(a,e):S(r,e)},$=["mode"],B=function(e,a){var r,n="".concat((r=e).charAt(0).toUpperCase()+r.slice(1),"Element"),i=a?function(e){F("mounts <".concat(n,">"));var a=e.id,r=e.className;return t.createElement("div",{id:a,className:r})}:function(a){var r,i=a.id,l=a.className,s=a.options,u=void 0===s?{}:s,m=a.onBlur,p=a.onFocus,d=a.onReady,f=a.onChange,b=a.onEscape,g=a.onClick,E=a.onLoadError,v=a.onLoaderStart,_=a.onNetworksChange,N=a.onConfirm,C=a.onCancel,k=a.onShippingAddressChange,w=a.onShippingRateChange,S=F("mounts <".concat(n,">")),x="elements"in S?S.elements:null,P="checkoutSdk"in S?S.checkoutSdk:null,O=c(t.useState(null),2),T=O[0],j=O[1],D=t.useRef(null),A=t.useRef(null);y(T,"blur",m),y(T,"focus",p),y(T,"escape",b),y(T,"click",g),y(T,"loaderror",E),y(T,"loaderstart",v),y(T,"networkschange",_),y(T,"confirm",N),y(T,"cancel",C),y(T,"shippingaddresschange",k),y(T,"shippingratechange",w),y(T,"change",f),d&&(r="expressCheckout"===e?d:function(){d(T)}),y(T,"ready",r),t.useLayoutEffect((function(){if(null===D.current&&null!==A.current&&(x||P)){var t=null;if(P)switch(e){case"payment":t=P.createPaymentElement(u);break;case"address":if(!("mode"in u))throw new Error("You must supply options.mode. mode must be 'billing' or 'shipping'.");var a=u.mode,r=o(u,$);if("shipping"===a)t=P.createShippingAddressElement(r);else{if("billing"!==a)throw new Error("Invalid options.mode. mode must be 'billing' or 'shipping'.");t=P.createBillingAddressElement(r)}break;case"expressCheckout":t=P.createExpressCheckoutElement(u);break;case"currencySelector":t=P.createCurrencySelectorElement();break;default:throw new Error("Invalid Element type ".concat(n,". You must use either the <PaymentElement />, <AddressElement options={{mode: 'shipping'}} />, <AddressElement options={{mode: 'billing'}} />, or <ExpressCheckoutElement />."))}else x&&(t=x.create(e,u));D.current=t,j(t),t&&t.mount(A.current)}}),[x,P,u]);var I=h(u);return t.useEffect((function(){if(D.current){var e=R(u,I,["paymentRequest"]);e&&"update"in D.current&&D.current.update(e)}}),[u,I]),t.useLayoutEffect((function(){return function(){if(D.current&&"function"==typeof D.current.destroy)try{D.current.destroy(),D.current=null}catch(e){}}}),[]),t.createElement("div",{id:i,className:l,ref:A})};return i.propTypes={id:b.string,className:b.string,onChange:b.func,onBlur:b.func,onFocus:b.func,onReady:b.func,onEscape:b.func,onClick:b.func,onLoadError:b.func,onLoaderStart:b.func,onNetworksChange:b.func,onConfirm:b.func,onCancel:b.func,onShippingAddressChange:b.func,onShippingRateChange:b.func,options:b.object},i.displayName=n,i.__elementType=e,i},G="undefined"==typeof window,L=t.createContext(null);L.displayName="EmbeddedCheckoutProviderContext";var U=function(){var e=t.useContext(L);if(!e)throw new Error("<EmbeddedCheckout> must be used within <EmbeddedCheckoutProvider>");return e},M=G?function(e){var a=e.id,r=e.className;return U(),t.createElement("div",{id:a,className:r})}:function(e){var a=e.id,r=e.className,n=U().embeddedCheckout,i=t.useRef(!1),o=t.useRef(null);return t.useLayoutEffect((function(){return!i.current&&n&&null!==o.current&&(n.mount(o.current),i.current=!0),function(){if(i.current&&n)try{n.unmount(),i.current=!1}catch(e){}}}),[n]),t.createElement("div",{ref:o,id:a,className:r})},q=B("auBankAccount",G),Y=B("card",G),W=B("cardNumber",G),z=B("cardExpiry",G),H=B("cardCvc",G),J=B("fpxBank",G),K=B("iban",G),Q=B("idealBank",G),Z=B("p24Bank",G),V=B("epsBank",G),X=B("payment",G),ee=B("expressCheckout",G),te=B("currencySelector",G),ae=B("paymentRequestButton",G),re=B("linkAuthentication",G),ne=B("address",G),ie=B("shippingAddress",G),oe=B("paymentMethodMessaging",G),ce=B("affirmMessage",G),le=B("afterpayClearpayMessage",G);e.AddressElement=ne,e.AffirmMessageElement=ce,e.AfterpayClearpayMessageElement=le,e.AuBankAccountElement=q,e.CardCvcElement=H,e.CardElement=Y,e.CardExpiryElement=z,e.CardNumberElement=W,e.CheckoutProvider=I,e.CurrencySelectorElement=te,e.Elements=x,e.ElementsConsumer=O,e.EmbeddedCheckout=M,e.EmbeddedCheckoutProvider=function(e){var a=e.stripe,r=e.options,n=e.children,i=t.useMemo((function(){return C(a,"Invalid prop `stripe` supplied to `EmbeddedCheckoutProvider`. We recommend using the `loadStripe` utility from `@stripe/stripe-js`. See https://stripe.com/docs/stripe-js/react#elements-props-stripe for details.")}),[a]),o=t.useRef(null),l=t.useRef(null),s=c(t.useState({embeddedCheckout:null}),2),u=s[0],m=s[1];t.useEffect((function(){if(!l.current&&!o.current){var e=function(e){l.current||o.current||(l.current=e,o.current=l.current.initEmbeddedCheckout(r).then((function(e){m({embeddedCheckout:e})})))};"async"!==i.tag||l.current||!r.clientSecret&&!r.fetchClientSecret?"sync"!==i.tag||l.current||!r.clientSecret&&!r.fetchClientSecret||e(i.stripe):i.stripePromise.then((function(t){t&&e(t)}))}}),[i,r,u,l]),t.useEffect((function(){return function(){u.embeddedCheckout?(o.current=null,u.embeddedCheckout.destroy()):o.current&&o.current.then((function(){o.current=null,u.embeddedCheckout&&u.embeddedCheckout.destroy()}))}}),[u.embeddedCheckout]),t.useEffect((function(){k(l)}),[l]);var p=h(a);t.useEffect((function(){null!==p&&p!==a&&console.warn("Unsupported prop change on EmbeddedCheckoutProvider: You cannot change the `stripe` prop after setting it.")}),[p,a]);var d=h(r);return t.useEffect((function(){null!=d&&(null!=r?(void 0===r.clientSecret&&void 0===r.fetchClientSecret&&console.warn("Invalid props passed to EmbeddedCheckoutProvider: You must provide one of either `options.fetchClientSecret` or `options.clientSecret`."),null!=d.clientSecret&&r.clientSecret!==d.clientSecret&&console.warn("Unsupported prop change on EmbeddedCheckoutProvider: You cannot change the client secret after setting it. Unmount and create a new instance of EmbeddedCheckoutProvider instead."),null!=d.fetchClientSecret&&r.fetchClientSecret!==d.fetchClientSecret&&console.warn("Unsupported prop change on EmbeddedCheckoutProvider: You cannot change fetchClientSecret after setting it. Unmount and create a new instance of EmbeddedCheckoutProvider instead."),null!=d.onComplete&&r.onComplete!==d.onComplete&&console.warn("Unsupported prop change on EmbeddedCheckoutProvider: You cannot change the onComplete option after setting it."),null!=d.onShippingDetailsChange&&r.onShippingDetailsChange!==d.onShippingDetailsChange&&console.warn("Unsupported prop change on EmbeddedCheckoutProvider: You cannot change the onShippingDetailsChange option after setting it."),null!=d.onLineItemsChange&&r.onLineItemsChange!==d.onLineItemsChange&&console.warn("Unsupported prop change on EmbeddedCheckoutProvider: You cannot change the onLineItemsChange option after setting it.")):console.warn("Unsupported prop change on EmbeddedCheckoutProvider: You cannot unset options after setting them."))}),[d,r]),t.createElement(L.Provider,{value:u},n)},e.EpsBankElement=V,e.ExpressCheckoutElement=ee,e.FpxBankElement=J,e.IbanElement=K,e.IdealBankElement=Q,e.LinkAuthenticationElement=re,e.P24BankElement=Z,e.PaymentElement=X,e.PaymentMethodMessagingElement=oe,e.PaymentRequestButtonElement=ae,e.ShippingAddressElement=ie,e.useCheckout=function(){!function(e){var a=t.useContext(j);D(a,e)}("calls useCheckout()");var e=t.useContext(A);if(!e)throw new Error("Could not find Checkout Context; You need to wrap the part of your app that calls useCheckout() in an <CheckoutProvider> provider.");return e},e.useElements=function(){return P("calls useElements()").elements},e.useStripe=function(){return F("calls useStripe()").stripe}}(t,a(609))}},t={};function a(r){var n=t[r];if(void 0!==n)return n.exports;var i=t[r]={exports:{}};return e[r].call(i.exports,i,i.exports,a),i.exports}a.n=e=>{var t=e&&e.__esModule?()=>e.default:()=>e;return a.d(t,{a:t}),t},a.d=(e,t)=>{for(var r in t)a.o(t,r)&&!a.o(e,r)&&Object.defineProperty(e,r,{enumerable:!0,get:t[r]})},a.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),(()=>{"use strict";var e=a(609),t=a.n(e);const r=window.ReactDOM;var n,i=a.n(r),o="https://js.stripe.com",c="".concat(o,"/v3"),l=/^https:\/\/js\.stripe\.com\/v3\/?(\?.*)?$/,s=/^https:\/\/js\.stripe\.com\/(v3|[a-z]+)\/stripe\.js(\?.*)?$/,u="loadStripe.setLoadParameters was called but an existing Stripe.js script already exists in the document; existing script parameters will be used",m=function(e){var t=e&&!e.advancedFraudSignals?"?advancedFraudSignals=false":"",a=document.createElement("script");a.src="".concat(c).concat(t);var r=document.head||document.body;if(!r)throw new Error("Expected document.body not to be null. Stripe.js requires a <body> element.");return r.appendChild(a),a},p=null,d=null,f=null,b=!1,y=function(){return n||(n=(e=null,null!==p?p:(p=new Promise((function(t,a){if("undefined"!=typeof window&&"undefined"!=typeof document)if(window.Stripe&&e&&console.warn(u),window.Stripe)t(window.Stripe);else try{var r=function(){for(var e,t=document.querySelectorAll('script[src^="'.concat(o,'"]')),a=0;a<t.length;a++){var r=t[a];if(e=r.src,l.test(e)||s.test(e))return r}return null}();if(r&&e)console.warn(u);else if(r){if(r&&null!==f&&null!==d){var n;r.removeEventListener("load",f),r.removeEventListener("error",d),null===(n=r.parentNode)||void 0===n||n.removeChild(r),r=m(e)}}else r=m(e);f=function(e,t){return function(){window.Stripe?e(window.Stripe):t(new Error("Stripe.js not available"))}}(t,a),d=function(e){return function(t){e(new Error("Failed to load Stripe.js",{cause:t}))}}(a),r.addEventListener("load",f),r.addEventListener("error",d)}catch(e){return void a(e)}else t(null)}))).catch((function(e){return p=null,Promise.reject(e)}))).catch((function(e){return n=null,Promise.reject(e)})));var e};Promise.resolve().then((function(){return y()})).catch((function(e){b||console.warn(e)}));var h=function(){for(var e=arguments.length,t=new Array(e),a=0;a<e;a++)t[a]=arguments[a];b=!0;var r=Date.now();return y().then((function(e){return function(e,t,a){if(null===e)return null;var r=t[0].match(/^pk_test/),n=function(e){return 3===e?"v3":e}(e.version);r&&"v3"!==n&&console.warn("Stripe.js@".concat(n," was loaded on the page, but @stripe/stripe-js@").concat("5.10.0"," expected Stripe.js@").concat("v3",". This may result in unexpected behavior. For more information, see https://docs.stripe.com/sdks/stripejs-versioning"));var i=e.apply(void 0,t);return function(e,t){e&&e._registerWrapper&&e._registerWrapper({name:"stripe-js",version:"5.10.0",startTime:t})}(i,a),i}(e,t,r)}))},g=a(926);const E=e=>({AUD:"AUD$",USD:"USD$",NZD:"NZD$",GBP:"GBP£",EUR:"EUR€",CAD:"CAD$",SGD:"SGD$"}[e]||e+" "),v=(()=>{const e=window.wpApiSettings?.restUrl;return e?e.replace(/\/$/,""):document.querySelector('link[rel="https://api.w.org/"]').href.replace(/\/$/,"")})(),R=(h("your-publishable-key-here"),e=>new URLSearchParams(window.location.search).get(e)),_=({property:e,isSelected:t,onToggle:a,nights:r,checkInDate:n,showPropertyImages:i,includeIcons:o})=>{e.availability?.total_cost||e.availability?.dates?.reduce(((e,t)=>e+(t.rate||0)),0);const c=e.availability?.available;return React.createElement("div",{className:`bif-tile ${t?"bif-selected":""} ${c?"":"is-unavailable"}`},i&&e.property_image&&React.createElement("div",{className:"bif-tile__hero"},React.createElement("img",{loading:"lazy",src:e.property_image,alt:e.property_name}),React.createElement("span",{className:"bif-chip "+(c?"":"unavailable")},((e,t,a)=>{if(e)return"Available";switch(t){case"Booked Out":return"Booked Out";case"No Tariff Set":return"No Rates Set";case"Min Nights":return`Minimum ${a||2} Nights`;default:return"Unavailable"}})(c,e.availability?.availability_reason,e.availability?.min_nights))),React.createElement("div",{className:"bif-tile__content"},React.createElement("h3",{className:"bif-tile__title"},e.property_name),o&&e.property_features&&React.createElement("ul",{className:"bif-amenities bif-amenities--slim"},1===e.property_features.wifi&&React.createElement("li",null,React.createElement("span",null,"📶 WiFi")),e.property_features.queen_beds>0&&React.createElement("li",null,React.createElement("span",null,"🛏️ ",e.property_features.queen_beds," Queen")),e.property_features.king_beds>0&&React.createElement("li",null,React.createElement("span",null,"🛏️ ",e.property_features.king_beds," King")),e.property_features.double_beds>0&&React.createElement("li",null,React.createElement("span",null,"🛏️ ",e.property_features.double_beds," Double")),e.property_features.single_beds>0&&React.createElement("li",null,React.createElement("span",null,"🛏️ ",e.property_features.single_beds," Single")),e.property_features.bunk_beds>0&&React.createElement("li",null,React.createElement("span",null,"🛏️ ",e.property_features.bunk_beds," Bunk")),e.property_features.sofa_beds>0&&React.createElement("li",null,React.createElement("span",null,"🛋️ ",e.property_features.sofa_beds," Sofa bed")),e.property_features.bedrooms&&React.createElement("li",null,React.createElement("span",null,"🏠 ",e.property_features.bedrooms," Bedroom",e.property_features.bedrooms>1?"s":"")),e.property_features.living_areas&&React.createElement("li",null,React.createElement("span",null,"🛋️ ",e.property_features.living_areas," Living Area",e.property_features.living_areas>1?"s":""))),e.availability?.dates&&React.createElement("div",{className:"bif-tile__rates"},e.availability.dates.map(((e,t)=>React.createElement("div",{key:t,className:"bif-pill "+(e.availability?"ok":"na")},React.createElement("span",{className:"bif-pill__date"},e.date_formatted),React.createElement("strong",{className:"bif-pill__amt"},e.availability?`$${e.rate}`:"Booked Out"===e.availability_reason?"Booked":"No Tariff Set"===e.availability_reason?"No Rate":"N/A"))))),React.createElement("div",{className:"bif-tile__footer"},c?React.createElement("button",{onClick:a,className:"bif-btn "+(t?"bif-btn-selected":"bif-btn-select")},t?"✓ Selected":"Select"):React.createElement("button",{disabled:!0,className:"bif-btn bif-btn-disabled"},"Unavailable")),t&&e.optional_extras?.length>0&&React.createElement("div",{className:"bif-optional-extras"},React.createElement("h4",{className:"bif-daily-breakdown-title"},"Optional Extras"),React.createElement("div",{className:"bif-extras-list"},e.optional_extras.map((t=>React.createElement("div",{key:t.id,className:"bif-extra-item"},React.createElement("div",{className:"bif-extra-info"},React.createElement("input",{type:"checkbox",checked:e.selectedExtras?.[t.id]||!1,onChange:()=>e.onToggleExtra?.(e.id,t.id)}),React.createElement("label",null,t.description)),React.createElement("div",{className:"bif-extra-price"},"$",t.amount))))))))},N=({property:e,isSelected:t,onToggle:a,nights:r,checkInDate:n,showPropertyImages:i,includeIcons:o})=>{e.availability?.total_cost||e.availability?.dates?.reduce(((e,t)=>e+(t.rate||0)),0);const c=e.availability?.available;return React.createElement("div",{className:`bif-row ${t?"bif-selected":""} ${c?"":"is-unavailable"} ${i&&e.property_image?"":"no-image"}`},i&&e.property_image&&React.createElement("div",{className:"bif-row__thumb"},React.createElement("img",{loading:"lazy",src:e.property_image,alt:e.property_name})),React.createElement("div",{className:"bif-row__main"},React.createElement("div",{className:"bif-row__top"},React.createElement("h3",{className:"bif-row__title"},e.property_name),React.createElement("span",{className:"bif-dot "+(l=c,l?"ok":"na"),"aria-hidden":"true"})),o&&e.property_features&&React.createElement("ul",{className:"bif-amenities bif-amenities--inline"},1===e.property_features.wifi&&React.createElement("li",null,React.createElement("span",null,"📶 WiFi")),e.property_features.queen_beds>0&&React.createElement("li",null,React.createElement("span",null,"🛏️ ",e.property_features.queen_beds," Queen")),e.property_features.king_beds>0&&React.createElement("li",null,React.createElement("span",null,"🛏️ ",e.property_features.king_beds," King")),e.property_features.double_beds>0&&React.createElement("li",null,React.createElement("span",null,"🛏️ ",e.property_features.double_beds," Double")),e.property_features.single_beds>0&&React.createElement("li",null,React.createElement("span",null,"🛏️ ",e.property_features.single_beds," Single")),e.property_features.bunk_beds>0&&React.createElement("li",null,React.createElement("span",null,"🛏️ ",e.property_features.bunk_beds," Bunk")),e.property_features.sofa_beds>0&&React.createElement("li",null,React.createElement("span",null,"🛋️ ",e.property_features.sofa_beds," Sofa bed")),e.property_features.bedrooms&&React.createElement("li",null,React.createElement("span",null,"🏠 ",e.property_features.bedrooms," Bedroom",e.property_features.bedrooms>1?"s":"")),e.property_features.living_areas&&React.createElement("li",null,React.createElement("span",null,"🛋️ ",e.property_features.living_areas," Living Area",e.property_features.living_areas>1?"s":"")))),e.availability?.dates&&React.createElement("div",{className:"bif-row__rates"},e.availability.dates.map(((e,t)=>React.createElement("div",{key:t,className:"bif-rmini "+(e.availability?"ok":"na")},React.createElement("div",{className:"bif-rmini__date"},e.date_formatted),React.createElement("div",{className:"bif-rmini__amt"},e.availability?`$${e.rate}`:"Booked Out"===e.availability_reason?"Booked":"No Tariff Set"===e.availability_reason?"No Rate":"N/A"))))),React.createElement("div",{className:"bif-row__cta"},c?React.createElement("button",{onClick:a,className:"bif-btn "+(t?"bif-btn-selected":"bif-btn-select")},t?"✓ Selected":"Select"):React.createElement("button",{disabled:!0,className:"bif-btn bif-btn-disabled"},"Unavailable")),t&&e.optional_extras?.length>0&&React.createElement("div",{className:"bif-optional-extras",style:{gridColumn:"1 / -1",marginTop:"1rem"}},React.createElement("h4",{className:"bif-daily-breakdown-title"},"Optional Extras"),React.createElement("div",{className:"bif-extras-list"},e.optional_extras.map((t=>React.createElement("div",{key:t.id,className:"bif-extra-item"},React.createElement("div",{className:"bif-extra-info"},React.createElement("input",{type:"checkbox",checked:e.selectedExtras?.[t.id]||!1,onChange:()=>e.onToggleExtra?.(e.id,t.id)}),React.createElement("label",null,t.description)),React.createElement("div",{className:"bif-extra-price"},"$",t.amount)))))));var l},C=({property:e,isSelected:t,onToggle:a,nights:r,checkInDate:n,showPropertyImages:i,includeIcons:o})=>{const c=e.availability?.total_cost||e.availability?.dates?.reduce(((e,t)=>e+(t.rate||0)),0)||0,l=e.availability?.available,s=(e,t,a)=>{if(e)return"Available";switch(t){case"Booked Out":return"Booked Out";case"No Tariff Set":return"No Rates Set";case"Min Nights":return`Minimum ${a||2} Nights`;default:return"Unavailable"}};return React.createElement("div",{className:`bif-property-card ${t?"bif-selected":""} ${l?"":"bif-unavailable"}`},React.createElement("div",{className:"bif-property-header"},i&&e.property_image&&React.createElement("div",{className:"bif-property-image"},React.createElement("img",{src:e.property_image,alt:e.property_name})),React.createElement("div",{className:"bif-property-info"},React.createElement("h3",{className:"bif-property-name"},e.property_name),e.property_description&&React.createElement("p",{className:"bif-property-description"},e.property_description),o&&e.property_features&&React.createElement("div",{className:"bif-property-icons"},1===e.property_features.wifi&&React.createElement("span",{className:"bif-property-icon",title:"WiFi Available"},"📶 WiFi"),e.property_features.queen_beds>0&&React.createElement("span",{className:"bif-property-icon",title:`${e.property_features.queen_beds} Queen bed${e.property_features.queen_beds>1?"s":""}`},"🛏️ ",e.property_features.queen_beds," Queen"),e.property_features.king_beds>0&&React.createElement("span",{className:"bif-property-icon",title:`${e.property_features.king_beds} King bed${e.property_features.king_beds>1?"s":""}`},"🛏️ ",e.property_features.king_beds," King"),e.property_features.double_beds>0&&React.createElement("span",{className:"bif-property-icon",title:`${e.property_features.double_beds} Double bed${e.property_features.double_beds>1?"s":""}`},"🛏️ ",e.property_features.double_beds," Double"),e.property_features.single_beds>0&&React.createElement("span",{className:"bif-property-icon",title:`${e.property_features.single_beds} Single bed${e.property_features.single_beds>1?"s":""}`},"🛏️ ",e.property_features.single_beds," Single"),e.property_features.bunk_beds>0&&React.createElement("span",{className:"bif-property-icon",title:`${e.property_features.bunk_beds} Bunk bed${e.property_features.bunk_beds>1?"s":""}`},"🛏️ ",e.property_features.bunk_beds," Bunk"),e.property_features.sofa_beds>0&&React.createElement("span",{className:"bif-property-icon",title:`${e.property_features.sofa_beds} Sofa bed${e.property_features.sofa_beds>1?"s":""}`},"🛋️ ",e.property_features.sofa_beds," Sofa bed"),e.property_features.bedrooms&&React.createElement("span",{className:"bif-property-icon",title:`${e.property_features.bedrooms} bedroom${e.property_features.bedrooms>1?"s":""}`},"🏠 ",e.property_features.bedrooms," Bedroom",e.property_features.bedrooms>1?"s":""),e.property_features.living_areas&&React.createElement("span",{className:"bif-property-icon",title:`${e.property_features.living_areas} living area${e.property_features.living_areas>1?"s":""}`},"🛋️ ",e.property_features.living_areas," Living Area",e.property_features.living_areas>1?"s":""))),React.createElement("div",{className:"bif-property-status-container"},React.createElement("span",{className:`bif-property-status ${((e,t)=>{if(e)return"bif-status-available";switch(t){case"Booked Out":return"bif-status-booked";case"No Tariff Set":return"bif-status-no-rate";case"Min Nights":return"bif-status-min-nights";default:return"bif-status-unavailable"}})(l,e.availability?.availability_reason)}`},s(l,e.availability?.availability_reason,e.availability?.min_nights)),l?React.createElement("button",{onClick:a,className:`bif-btn ${t?"bif-btn-selected":"bif-btn-select"} bif-header-btn`,style:{marginLeft:"0.75rem"}},t?"✓ Selected":"Select Property"):React.createElement("button",{disabled:!0,className:"bif-btn bif-btn-disabled bif-header-btn",style:{marginLeft:"0.75rem"}},s(l,e.availability?.availability_reason,e.availability?.min_nights)))),e.availability?.dates&&React.createElement("div",{className:"bif-availability-details"},React.createElement("h4",{className:"bif-daily-breakdown-title"},"Daily Rate Breakdown"),React.createElement("div",{className:"bif-daily-rates"},e.availability.dates.map(((e,t)=>React.createElement("div",{key:t,className:"bif-daily-rate "+(e.availability?"bif-available":"bif-unavailable")},React.createElement("div",{className:"bif-date"},e.date_formatted),React.createElement("div",{className:"bif-rate"},e.availability?`$${e.rate}`:"Booked Out"===e.availability_reason?"Booked":"No Tariff Set"===e.availability_reason?"No Rate":"N/A"))))),React.createElement("div",{className:"bif-rate-summary"},React.createElement("div",{className:"bif-summary-row"},React.createElement("span",{className:"bif-total"},"Total: $",c)))),t&&e.optional_extras?.length>0&&React.createElement("div",{className:"bif-optional-extras"},React.createElement("h4",{className:"bif-daily-breakdown-title"},"Optional Extras"),React.createElement("div",{className:"bif-extras-list"},e.optional_extras.map((t=>React.createElement("div",{key:t.id,className:"bif-extra-item"},React.createElement("div",{className:"bif-extra-info"},React.createElement("input",{type:"checkbox",checked:e.selectedExtras?.[t.id]||!1,onChange:()=>e.onToggleExtra?.(e.id,t.id)}),React.createElement("label",null,t.description)),React.createElement("div",{className:"bif-extra-price"},"$",t.amount)))))))},k=({checkInDate:e,nights:t,onDateChange:a,onNightsChange:r,onCheckAvailability:n,isLoading:i,minNights:o,maxNights:c,buttonIcon:l="search",searchLayout:s="default"})=>{const u=(new Date).toISOString().split("T")[0],m={search:"🔍",calendar:"📅",home:"🏠",mapMarker:"📍",star:"⭐",pin:"📌",pinSmall:"📍",globe:"🌍"}[l]||"🔍";return"horizontal"===s?React.createElement("div",{className:"bif-search-box-horizontal"},React.createElement("div",{className:"bif-search-field",onClick:()=>document.querySelector('.bif-search-box-horizontal input[type="date"]')?.showPicker?.()},React.createElement("span",{className:"bif-search-icon"},React.createElement("svg",{width:"20",height:"20",viewBox:"0 0 20 20",fill:"none",xmlns:"http://www.w3.org/2000/svg"},React.createElement("rect",{x:"3",y:"4",width:"14",height:"13",rx:"1",stroke:"currentColor",strokeWidth:"1.5"}),React.createElement("line",{x1:"3",y1:"8",x2:"17",y2:"8",stroke:"currentColor",strokeWidth:"1.5"}),React.createElement("line",{x1:"7",y1:"2",x2:"7",y2:"5",stroke:"currentColor",strokeWidth:"1.5",strokeLinecap:"round"}),React.createElement("line",{x1:"13",y1:"2",x2:"13",y2:"5",stroke:"currentColor",strokeWidth:"1.5",strokeLinecap:"round"}))),React.createElement("div",{className:"bif-search-field-content"},React.createElement("label",null,"Check-In"),React.createElement("input",{type:"date",value:e,onChange:e=>a(e.target.value),min:u}))),React.createElement("div",{className:"bif-search-divider"}),React.createElement("div",{className:"bif-search-field"},React.createElement("span",{className:"bif-search-icon"},React.createElement("svg",{width:"20",height:"20",viewBox:"0 0 20 20",fill:"currentColor",xmlns:"http://www.w3.org/2000/svg"},React.createElement("path",{d:"M17 10.5c0 3.59-2.69 6.5-6 6.5s-6-2.91-6-6.5S7.69 4 11 4c.35 0 .69.03 1.02.09A5.5 5.5 0 0 0 17 10.5z"}))),React.createElement("div",{className:"bif-search-field-content"},React.createElement("label",null,"Nights"),React.createElement("select",{value:t,onChange:e=>r(parseInt(e.target.value))},[...Array(c-o+1).keys()].map((e=>{const t=o+e;return React.createElement("option",{key:t,value:t},t)}))))),React.createElement("button",{onClick:n,disabled:!e||i,className:"bif-search-button"},i?"Checking...":"Search")):React.createElement("div",{className:"bif-date-selector"},React.createElement("h2",{className:"bif-section-title"},"Select Your Dates"),React.createElement("div",{className:"bif-date-form"},React.createElement("div",{className:"bif-form-field"},React.createElement("label",null,"Check-in Date"),React.createElement("input",{type:"date",value:e,onChange:e=>a(e.target.value),min:u,className:"bif-date-input"})),React.createElement("div",{className:"bif-form-field"},React.createElement("label",null,"Number of Nights"),React.createElement("select",{value:t,onChange:e=>r(parseInt(e.target.value)),className:"bif-nights-select"},[...Array(c-o+1).keys()].map((e=>{const t=o+e;return React.createElement("option",{key:t,value:t},t," ",1===t?"night":"nights")})))),React.createElement("div",{className:"bif-form-field"},React.createElement("button",{onClick:n,disabled:!e||i,className:"bif-btn bif-btn-primary bif-check-availability bif-has-icon-preview"},i?React.createElement(React.Fragment,null,React.createElement("div",{className:"bif-spinner"}),React.createElement("span",null,"Checking...")):React.createElement(React.Fragment,null,React.createElement("span",{className:"bif-icon-preview"},m),React.createElement("span",null,"Check Availability"))))))},w=({selectedProperties:e,selectedExtras:t,nights:a,total:r,discountCode:n,onDiscountCodeChange:i,onApplyDiscount:o,checkInDate:c,summary:l,showDiscount:s=!1,showRedeemGiftCertificate:u=!1,giftCertificate:m,onGiftCertificateChange:p,showGiftCertificateForm:d,onTriggerShowGiftCertificate:f,onApplyGiftCertificate:b,gcResult:y,gcLoading:h=!1})=>{Object.values(t).flat().reduce(((e,t)=>e+(t.amount||0)),0);const g=l&&parseFloat(l.order_discount_code_total||0)>0;return e&&0!==e.length?React.createElement("div",{className:"bif-booking-summary"},React.createElement("h3",{className:"bif-section-title"},"Booking Summary"),React.createElement("div",{className:"bif-summary-content"},e.map((e=>{const a=e.sub_total||e.availability?.total_cost||e.availability?.dates?.reduce(((e,t)=>e+(t.rate||0)),0)||0,r=e.mandatory_extras_total||e.mandatory_extras?.reduce(((e,t)=>e+parseFloat(t.amount||0)),0)||0,n=e.optional_extras_total||0,i=parseFloat(a)+parseFloat(r)+parseFloat(n);return React.createElement("div",{key:e.id,className:"bif-property-summary"},React.createElement("h5",{className:"bif-property-summary-name"},e.property_name),React.createElement("div",{className:"bif-property-total"},React.createElement("div",{className:"bif-total-row"},React.createElement("span",null,"Property Subtotal"),React.createElement("span",null,"$",parseFloat(a).toFixed(2)))),e.mandatory_extras&&e.mandatory_extras.length>0&&React.createElement("div",{className:"bif-mandatory-extras-summary"},React.createElement("h4",{className:"bif-daily-breakdown-title"},"Mandatory Extras"),e.mandatory_extras.map((e=>React.createElement("div",{key:e.id,className:"bif-total-row",style:{fontSize:"0.875rem",color:"#dc2626"}},React.createElement("span",null,e.description),React.createElement("span",null,"$",parseFloat(e.amount).toFixed(2)))))),e.optional_extras&&e.optional_extras.filter((e=>e.selected)).length>0&&React.createElement("div",{className:"bif-optional-extras-summary"},React.createElement("h4",{className:"bif-daily-breakdown-title"},"Optional Extras"),e.optional_extras.filter((e=>e.selected)).map((e=>React.createElement("div",{key:e.id,className:"bif-total-row",style:{fontSize:"0.875rem",color:"#92400e"}},React.createElement("span",null,e.description),React.createElement("span",null,"$",parseFloat(e.amount).toFixed(2)))))),React.createElement("div",{className:"bif-property-total"},React.createElement("div",{className:"bif-total-row bif-subtotal"},React.createElement("span",null,"Property Total"),React.createElement("span",null,"$",parseFloat(i).toFixed(2)))),!e.optional_extras&&t[e.id]&&t[e.id].length>0&&React.createElement("div",{className:"bif-optional-extras-summary"},React.createElement("h4",{className:"bif-daily-breakdown-title"},"Selected Optional Extras"),t[e.id].map((e=>React.createElement("div",{key:e.id,className:"bif-total-row",style:{fontSize:"0.875rem",color:"#92400e"}},React.createElement("span",null,e.description),React.createElement("span",null,"$",parseFloat(e.amount).toFixed(2)))))))})),s&&React.createElement("div",{className:"bif-summary-section"},React.createElement("div",{className:"bif-discount-form"},React.createElement("input",{type:"text",placeholder:"Enter discount code",value:n,onChange:e=>i(e.target.value),className:"bif-discount-input"}),React.createElement("button",{onClick:()=>{n.trim()&&o(n)},className:"bif-btn "+(n.trim()?"bif-btn-primary":"bif-btn-secondary")},"Apply")),g&&React.createElement("div",{className:"bif-discount-applied"},"Discount code applied")),u&&l&&React.createElement("div",{className:"bif-summary-section"},React.createElement("div",{className:"bif-gift-certificate-section"},d?React.createElement("div",{className:"bif-gift-certificate-form"},React.createElement("div",{className:"bif-form-row"},React.createElement("div",{className:"bif-form-field"},React.createElement("label",null,"Certificate Number:"),React.createElement("input",{type:"text",value:m.number,onChange:e=>p({...m,number:e.target.value}),className:"bif-form-control",placeholder:"Enter certificate number",disabled:h})),React.createElement("div",{className:"bif-form-field"},React.createElement("label",null,"Pin:"),React.createElement("input",{type:"number",value:m.pin,onChange:e=>p({...m,pin:e.target.value}),className:"bif-form-control",placeholder:"Enter pin",disabled:h}))),React.createElement("button",{className:"bif-btn bif-btn-secondary",onClick:b,disabled:h},h?"Applying...":"Apply")):React.createElement("button",{className:"bif-btn bif-btn-secondary",onClick:f},"Apply Gift Certificate"),y&&y.valid&&React.createElement("div",{className:"bif-gift-certificate-success"},React.createElement("p",null,"✅ Successfully Applied Gift Certificate"),React.createElement("p",null,y.result),parseFloat(y.total)-parseFloat(y.gc_amount_applied)==0?React.createElement("p",null,React.createElement("strong",null,"🎉 Your gift certificate covers the full amount! No additional payment required.")):React.createElement(React.Fragment,null,React.createElement("p",null,"Remaining balance to pay: ",React.createElement("strong",null,"$",(parseFloat(y.total)-parseFloat(y.gc_amount_applied)).toFixed(2))),React.createElement("p",{style:{fontSize:"0.875rem",color:"#6b7280"}},"*Credit card surcharge will be added at payment")),React.createElement("p",null,"Gift Certificate balance after order: ",React.createElement("strong",null,"$",parseFloat(y.gc_balance_after_order).toFixed(2)))))),React.createElement("div",{className:"bif-grand-total"},y&&y.valid&&React.createElement("div",{className:"bif-total-row"},React.createElement("span",null,"Order Total"),React.createElement("span",null,"$",parseFloat(y.total||l.order_grand_total).toFixed(2))),y&&y.valid&&React.createElement("div",{className:"bif-total-row",style:{color:"#059669"}},React.createElement("span",null,"Gift Certificate Applied"),React.createElement("span",null,"-$",parseFloat(y.gc_amount_applied).toFixed(2))),React.createElement("div",{className:"bif-total-main"},React.createElement("span",null,y&&y.valid&&parseFloat(y.total)-parseFloat(y.gc_amount_applied)==0?"Total Paid by Gift Certificate":y&&y.valid?"Balance Due":"Total Cost"),React.createElement("span",{className:"bif-total-amount"},"$",y&&y.valid?(parseFloat(y.total)-parseFloat(y.gc_amount_applied)).toFixed(2):parseFloat(r).toFixed(2))),y&&y.valid&&parseFloat(y.total)-parseFloat(y.gc_amount_applied)>0&&l&&l.order_has_surcharge&&React.createElement("div",{className:"bif-surcharge-note",style:{fontSize:"0.875rem",color:"#6b7280",marginTop:"0.5rem"}},"*Credit card surcharge will be added at payment"),l&&parseFloat(l.order_discount_code_total||0)>0&&React.createElement("div",{className:"bif-discount-text"},"Includes discount of $",parseFloat(l.order_discount_code_total||0).toFixed(2))))):null},S=({isOpen:t,onClose:a,title:r,content:n})=>((0,e.useEffect)((()=>(document.body.style.overflow=t?"hidden":"",()=>{document.body.style.overflow=""})),[t]),(0,e.useEffect)((()=>{const e=e=>{"Escape"===e.key&&t&&a()};return t&&document.addEventListener("keydown",e),()=>{document.removeEventListener("keydown",e)}}),[t,a]),t?React.createElement("div",{className:"bif-modal-overlay",onClick:a},React.createElement("div",{className:"bif-modal",onClick:e=>e.stopPropagation()},React.createElement("div",{className:"bif-modal-header"},React.createElement("h3",{className:"bif-modal-title"},r),React.createElement("button",{className:"bif-modal-close",onClick:a,"aria-label":"Close modal"},"×")),React.createElement("div",{className:"bif-modal-content",dangerouslySetInnerHTML:{__html:n}}))):null),x=({userDetails:e,onUpdateDetails:t,formErrors:a,showSuburb:r=!0,showPostcode:n=!0,showComments:i=!1})=>React.createElement("div",{className:"bif-customer-details"},React.createElement("h2",{className:"bif-section-title"},"Your Details"),React.createElement("div",{className:"bif-customer-form"},React.createElement("div",{className:"bif-form-row"},React.createElement("div",{className:"bif-form-field"},React.createElement("label",null,"First Name *"),React.createElement("input",{type:"text",value:e.firstName,onChange:e=>t("firstName",e.target.value),placeholder:"Enter your first name",className:a.firstName?"bif-error":""}),a.firstName&&React.createElement("div",{className:"bif-field-error"},a.firstName)),React.createElement("div",{className:"bif-form-field"},React.createElement("label",null,"Last Name *"),React.createElement("input",{type:"text",value:e.lastName,onChange:e=>t("lastName",e.target.value),placeholder:"Enter your last name",className:a.lastName?"bif-error":""}),a.lastName&&React.createElement("div",{className:"bif-field-error"},a.lastName))),React.createElement("div",{className:"bif-form-row"},React.createElement("div",{className:"bif-form-field"},React.createElement("label",null,"Email *"),React.createElement("input",{type:"email",value:e.email,onChange:e=>t("email",e.target.value),placeholder:"Enter your email address",className:a.email?"bif-error":""}),a.email&&React.createElement("div",{className:"bif-field-error"},a.email)),React.createElement("div",{className:"bif-form-field"},React.createElement("label",null,"Phone *"),React.createElement("input",{type:"tel",value:e.phone,onChange:e=>t("phone",e.target.value),placeholder:"Enter your phone number",className:a.phone?"bif-error":""}),a.phone&&React.createElement("div",{className:"bif-field-error"},a.phone))),(n||r)&&React.createElement("div",{className:"bif-form-row"},n&&React.createElement("div",{className:"bif-form-field"},React.createElement("label",null,"Postcode"),React.createElement("input",{type:"text",value:e.postcode,onChange:e=>t("postcode",e.target.value),placeholder:"Enter your postcode"})),r&&React.createElement("div",{className:"bif-form-field"},React.createElement("label",null,"Suburb"),React.createElement("input",{type:"text",value:e.suburb,onChange:e=>t("suburb",e.target.value),placeholder:"Enter your suburb"}))),i&&React.createElement("div",{className:"bif-form-row bif-full-width"},React.createElement("div",{className:"bif-form-field"},React.createElement("label",null,"Comments"),React.createElement("textarea",{value:e.comments,onChange:e=>t("comments",e.target.value),rows:4,placeholder:"Any special requests or comments..."}))))),P=({summary:t,propertyIds:a,userDetails:r,paymentType:n,giftCertificate:i})=>{const o=(0,g.useStripe)(),c=(0,g.useElements)(),[l,s]=(0,e.useState)(!1),[u,m]=(0,e.useState)(""),[p,d]=(0,e.useState)(!1),[f,b]=(0,e.useState)(""),y=async e=>{e.preventDefault(),s(!0),m("");try{let e={amount:"deposit"===n?t.order_deposit_amount:t.order_payable_now,currency:t?.order_currency||"AUD",summary:t,propertyIds:"string"==typeof a?a.split(",").map((e=>parseInt(e.trim()))):a,userDetails:r,paymentType:n};if("gift"===n&&i)e.giftCertificateApplied=!0,e.giftCertificate=i,e.amount=0;else{if(!o||!c)return void console.error("Stripe.js has not loaded yet.");const t=c.getElement(g.CardElement),{paymentMethod:a,error:r}=await o.createPaymentMethod({type:"card",card:t});if(r)return console.error(r),m(r.message),void s(!1);e.stripePaymentMethodId=a.id,i&&i.valid&&(e.giftCertificateApplied=!0,e.giftCertificate=i)}const l=await fetch(`${v}/bookitfast/v1/process-payment`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(e)}),u=await l.json();if(!u.success)throw new Error(u.message||"Payment failed.");console.log("Payment successful:",u),b(u.data.charge),d(!0)}catch(e){console.error("Payment error:",e),m(e.message)}finally{s(!1)}};return React.createElement("div",{className:"bif-payment-container"},React.createElement("h3",null,"gift"===n?"🎁 Gift Certificate Payment":"💳 Payment Details"),u&&React.createElement("div",{className:"bif-error-message"},u),p?React.createElement("div",{className:"bif-success-message"},React.createElement("p",null,React.createElement("strong",null,"✅ Payment Successful!")),f&&React.createElement("p",null,React.createElement("a",{href:f,target:"_blank",rel:"noopener noreferrer"},"📄 Click here to view your receipt"))):"gift"===n?React.createElement("div",{className:"bif-gift-certificate-payment-form"},React.createElement("div",{className:"bif-gift-certificate-summary"},React.createElement("p",null,"🎁 ",React.createElement("strong",null,"Paying with Gift Certificate")),React.createElement("p",null,"Amount: ",React.createElement("strong",null,"$",parseFloat(i.gc_amount_applied||0).toFixed(2))),React.createElement("p",null,"No credit card required - your gift certificate will be charged automatically.")),React.createElement("button",{onClick:y,disabled:l,className:"bif-btn bif-btn-primary bif-btn-large"},l?"Processing...":"Complete Booking")):React.createElement("form",{onSubmit:y,className:"bif-stripe-form"},React.createElement("div",{className:"bif-card-element-container"},React.createElement(g.CardElement,{options:{hidePostalCode:!0,style:{base:{fontSize:"16px",color:"#424770","::placeholder":{color:"#aab7c4"}},invalid:{color:"#9e2146"}}}})),React.createElement("button",{type:"submit",disabled:!o||l,className:"bif-btn bif-btn-primary bif-btn-large"},l?"Processing...":"Pay Now")))},O=({propertyIds:t="",showDiscount:a=!1,showSuburb:r=!0,showPostcode:n=!0,showRedeemGiftCertificate:i=!1,showComments:o=!1,buttonColor:c="#0073aa",buttonTextColor:l="#ffffff",minNights:s=1,maxNights:u=14,showPropertyImages:m=!1,includeIcons:p=!1,layoutStyle:d="cards",buttonIcon:f="search",searchLayout:b="default"})=>{const y=R("nights"),O=y&&!isNaN(y)?Math.max(parseInt(y,10),s):s,T=R("start"),j=R("discount"),D=T?(e=>{const t=e.split("-");if(3===t.length){const[e,a,r]=t.map(Number);if(!isNaN(e)&&!isNaN(a)&&!isNaN(r)){const t=new Date(r,a-1,e);return t.setHours(12,0,0,0),t.toISOString().split("T")[0]}}return null})(T):"",A="string"==typeof t?t:"",[I,F]=(0,e.useState)({date:D,nights:O}),[$,B]=(0,e.useState)(null),[G,L]=(0,e.useState)({}),[U,M]=(0,e.useState)(null),[q,Y]=(0,e.useState)(null),[W,z]=(0,e.useState)(!1),[H,J]=(0,e.useState)(""),[K,Q]=(0,e.useState)({firstName:"",lastName:"",phone:"",email:"",postcode:"",suburb:"",comments:""}),[Z,V]=(0,e.useState)(!1),[X,ee]=(0,e.useState)(!1),[te,ae]=(0,e.useState)(j),[re,ne]=(0,e.useState)(null),[ie,oe]=(0,e.useState)(!1),[ce,le]=(0,e.useState)(null),[se,ue]=(0,e.useState)({}),[me,pe]=(0,e.useState)({number:"",pin:""}),[de,fe]=(0,e.useState)(!1),[be,ye]=(0,e.useState)(null),[he,ge]=(0,e.useState)(!1),[Ee,ve]=(0,e.useState)({}),[Re,_e]=(0,e.useState)(!1),[Ne,Ce]=(0,e.useState)({isOpen:!1,title:"",content:""});(0,e.useEffect)((()=>{D&&O&&(console.log("Auto-checking availability with:",D,O),ke(D,O))}),[D,O]);const ke=async(e=I.date,t=I.nights)=>{if(!e||!A)return void console.warn("fetchAvailability skipped - Missing startDate or propertyIds");const a=I.date,r=A.split(",").filter((e=>""!==e.trim()));z(!0),J(""),_e(!1);try{const e=await fetch(`${v}/bookitfast/v1/availability`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({ids:r,start:a,nights:t})}),n=await e.json();B(n),_e(!0);const i=Object.keys(n).reduce(((e,t)=>(e[t]=!1,e)),{});L(i)}catch(e){console.error(e),J("Failed to fetch availability. Please try again.")}finally{z(!1)}},we=(e,t)=>{ve((a=>{const r=a[e]||{},n={...a,[e]:{...r,[t]:!r[t]}};return Se(G,te,n,0),n}))},Se=async(e,t=null,a=Ee,r=0)=>{const n=I.date,i=I.nights,o=new Date(new Date(n).getTime()+864e5*i).toISOString().split("T")[0];z(!0),J("");try{const r=await fetch(`${v}/bookitfast/v1/availability/summary`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({selected:e,selected_optional_extras:a,start:n,end:o,discount_code:t||null})});if(!r.ok)throw new Error(`HTTP error! status: ${r.status}`);const i=await r.json();Y(i),i.stripe_publishable_key&&M(h(i.stripe_publishable_key))}catch(n){console.error("Error fetching summary:",n),r<3?(console.log(`Retrying... Attempt ${r+1}`),await Se(e,t,a,r+1)):J("Failed to fetch summary. Please try again.")}finally{z(!1)}},xe=e=>{(()=>{const e={};return K.firstName.trim()||(e.firstName="First name is required"),K.lastName.trim()||(e.lastName="Last name is required"),K.email.trim()||(e.email="Email is required"),K.phone.trim()||(e.phone="Phone is required"),Z||(e.agreeToTerms="You must agree to the terms and conditions"),X||(e.consentToDataSharing="You must consent to data sharing with Book It Fast service"),ue(e),0===Object.keys(e).length})()&&(le(e),oe(!0))},Pe=$?Object.entries($).filter((([e])=>G[e])).map((([e,t])=>({id:e,...t,...q?.property_summaries?.[e]||{},selectedExtras:Ee[e],onToggleExtra:we}))):[];return React.createElement("div",{className:"bif-booking-container",style:{"--bif-button-color":c,"--bif-button-color-hover":`${c}dd`,"--bif-button-color-active":`${c}bb`,"--bif-button-text-color":l}},React.createElement("div",{className:"bif-booking-steps"},React.createElement(k,{checkInDate:I.date,nights:I.nights,onDateChange:e=>F((t=>({...t,date:e}))),onNightsChange:e=>F((t=>({...t,nights:e}))),onCheckAvailability:ke,isLoading:W,minNights:s,maxNights:u,buttonIcon:f,searchLayout:b}),H&&React.createElement("div",{className:"bif-error-message"},H),Re&&$&&React.createElement("div",{className:"bif-property-list"},React.createElement("h2",{className:"bif-section-title"},"Available Properties"),React.createElement("div",{className:`bif-properties bif-properties--${d}`},Object.entries($).map((([e,t])=>{const a={key:e,property:{id:e,...t,selectedExtras:Ee[e],onToggleExtra:we},isSelected:G[e],onToggle:()=>(async e=>{const t={...G,[e]:!G[e]};L(t),Object.values(t).includes(!0)?await Se(t,te):Y(null)})(e),nights:I.nights,checkInDate:I.date,showPropertyImages:m,includeIcons:p};switch(d){case"grid":return React.createElement(_,a);case"rows":return React.createElement(N,a);default:return React.createElement(C,a)}})))),q&&Pe.length>0&&React.createElement(w,{selectedProperties:Pe,selectedExtras:Ee,nights:I.nights,total:(q.order_payable_now||0)-(q.order_surcharge||0),discountCode:te,onDiscountCodeChange:ae,onApplyDiscount:e=>{Object.keys(G).some((e=>G[e]))&&Se(G,e)},checkInDate:I.date,summary:q,showDiscount:a,showRedeemGiftCertificate:i,giftCertificate:me,onGiftCertificateChange:pe,showGiftCertificateForm:de,onTriggerShowGiftCertificate:()=>{fe(!0)},onApplyGiftCertificate:async e=>{if(e.preventDefault(),console.log("Gift Certificate: Apply button clicked"),console.log("Gift Certificate Data:",me),console.log("Current Summary:",q),he)return void console.log("Gift Certificate: Already processing, ignoring click");if(!q)return void console.error("Gift Certificate: No summary available");if(!me.number||!me.pin)return console.error("Gift Certificate: Missing number or pin"),void alert("Please enter both certificate number and pin");ge(!0),console.log("Gift Certificate: Setting loading state to true");let t={...q};if(q.order_weekly_discount>0){console.log("Gift Certificate: Weekly discount detected, adjusting summary for gift certificate calculation"),console.log("Gift Certificate: Original order_grand_total:",q.order_grand_total),console.log("Gift Certificate: Order weekly discount:",q.order_weekly_discount),console.log("Gift Certificate: Order surcharge:",q.order_surcharge);const e=parseFloat(q.order_sub_total)+parseFloat(q.order_mandatory_extras_total);console.log("Gift Certificate: Total before weekly discount (excluding surcharge):",e),t={...q,order_grand_total:e.toString(),order_total_before_surcharge:e,order_payable_now:e.toString(),order_surcharge:0,order_has_surcharge:!1},console.log("Gift Certificate: Adjusted summary for gift certificate:",t)}const a={certificate:me,summary:t};console.log("Gift Certificate: Sending request with data:",a);try{const e=await fetch(`${v}/bookitfast/v1/apply-gift-certificate`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(a)});if(console.log("Gift Certificate: Response status:",e.status),!e.ok)throw new Error(`HTTP error! status: ${e.status}`);const t=await e.json();console.log("Gift Certificate: Response data:",t),t.valid?(ye(t),t.summary&&(Y(t.summary),console.log("Gift Certificate: Updated summary:",t.summary)),console.log("Gift Certificate: Application successful"),console.log("Gift Certificate: Order payable now:",t.order_payable_now)):(console.error("Gift Certificate: API returned error:",t),alert(t.message||"Failed to apply gift certificate"))}catch(e){console.error("Gift Certificate: Error applying certificate:",e),alert("Error applying gift certificate. Please try again.")}finally{ge(!1),console.log("Gift Certificate: Setting loading state to false")}},gcResult:be,gcLoading:he}),q&&Pe.length>0&&React.createElement(x,{userDetails:K,onUpdateDetails:(e,t)=>{Q((a=>({...a,[e]:t}))),se[e]&&ue((t=>({...t,[e]:null})))},formErrors:se,showSuburb:r,showPostcode:n,showComments:o}),q&&Pe.length>0&&React.createElement("div",{className:"bif-terms-payment"},React.createElement("div",{className:"bif-terms-checkbox"},React.createElement("input",{type:"checkbox",id:"agreeToTerms",checked:Z,onChange:()=>V(!Z)}),React.createElement("label",{htmlFor:"agreeToTerms"},"I have read and agree to the"," ",q.order_booking_conditions?.map(((e,t)=>React.createElement("span",{key:t},"local"===e.type?React.createElement("a",{href:"#",onClick:t=>{t.preventDefault(),Ce({isOpen:!0,title:e.title,content:e.content})},style:{textDecoration:"underline",cursor:"pointer"}},e.title):React.createElement("a",{href:e.url,target:"_blank",rel:"noopener noreferrer"},e.title),t<q.order_booking_conditions.length-2?", ":"",t===q.order_booking_conditions.length-2?" and ":"")))),se.agreeToTerms&&React.createElement("div",{className:"bif-field-error"},se.agreeToTerms)),React.createElement("div",{className:"bif-privacy-consent"},React.createElement("input",{type:"checkbox",id:"consentToDataSharing",checked:X,onChange:()=>ee(!X)}),React.createElement("label",{htmlFor:"consentToDataSharing"},"I consent to my personal information being transmitted to and processed by Book It Fast (",React.createElement("a",{href:"https://bookitfast.app/privacy-policy",target:"_blank",rel:"noopener noreferrer"},"Privacy Policy"),") for booking and payment processing purposes."),se.consentToDataSharing&&React.createElement("div",{className:"bif-field-error"},se.consentToDataSharing)),!ie&&React.createElement("div",{className:"bif-payment-options"},Object.keys(se).length>0&&React.createElement("div",{className:"bif-validation-error"},"Please complete all required fields before proceeding with payment."),be&&be.valid&&parseFloat(be.total)-parseFloat(be.gc_amount_applied)==0?React.createElement("div",{className:"bif-gift-certificate-payment"},React.createElement("div",{className:"bif-gift-certificate-full-coverage"},React.createElement("p",null,"🎉 ",React.createElement("strong",null,"Your gift certificate covers the full booking amount!")),React.createElement("p",null,"No additional payment required.")),React.createElement("button",{className:"bif-btn bif-btn-primary bif-btn-large",onClick:()=>xe("gift")},"🎁 Complete Booking with Gift Certificate")):React.createElement(React.Fragment,null,q.order_surcharge>0&&parseFloat(q.order_payable_now||0)>0&&React.createElement("div",{className:"bif-surcharge-info"},React.createElement("p",null,"Please note a credit card surcharge applies of ",q.order_deposit_surcharge>0&&` $${q.order_deposit_surcharge} for deposit or `,"$",q.order_surcharge," for the full payment.")),q.order_deposit_amount>0?React.createElement("div",{className:"bif-payment-buttons"},React.createElement("button",{className:"bif-btn bif-btn-primary",onClick:()=>xe("deposit")},"💳 Pay Deposit (",E(q?.order_currency||"AUD"),q.order_deposit_amount,")"),React.createElement("button",{className:"bif-btn bif-btn-primary",onClick:()=>xe("full")},"💳 Pay In Full (",E(q?.order_currency||"AUD"),be&&be.valid?parseFloat(be.order_payable_now).toFixed(2):q.order_payable_now,")")):React.createElement("button",{className:"bif-btn bif-btn-primary bif-btn-large",onClick:()=>xe("full")},"💳 Complete Booking - ",E(q?.order_currency||"AUD"),be&&be.valid?parseFloat(be.order_payable_now).toFixed(2):q.order_payable_now)))),q&&ie&&React.createElement("div",{className:"bif-payment-form-container"},"gift"===ce?React.createElement(P,{summary:q,propertyIds:A.split(",").map((e=>parseInt(e.trim()))),userDetails:K,paymentType:ce,giftCertificate:be}):U&&React.createElement(g.Elements,{stripe:U},React.createElement(P,{summary:q,propertyIds:A.split(",").map((e=>parseInt(e.trim()))),userDetails:K,paymentType:ce,giftCertificate:be})))),React.createElement(S,{isOpen:Ne.isOpen,onClose:()=>Ce({isOpen:!1,title:"",content:""}),title:Ne.title,content:Ne.content}))};document.addEventListener("DOMContentLoaded",(()=>{const e=document.getElementById("bif-book-it-fast-multi-embed");if(e){const a=e.dataset.propertyIds||"",r="true"===e.dataset.showDiscount,n="true"===e.dataset.showSuburb,o="true"===e.dataset.showPostcode,c="true"===e.dataset.showRedeemGiftCertificate,l="true"===e.dataset.showComments,s=e.dataset.buttonColor||"#0073aa",u=e.dataset.buttonTextColor||"#ffffff",m=parseInt(e.dataset.minNights)||1,p=parseInt(e.dataset.maxNights)||14,d="true"===e.dataset.showPropertyImages,f="true"===e.dataset.includeIcons,b=e.dataset.layoutStyle||"cards",y=e.dataset.buttonIcon||"search",h=e.dataset.searchLayout||"default";i().render(t().createElement(O,{propertyIds:a,showDiscount:r,showSuburb:n,showPostcode:o,showRedeemGiftCertificate:c,showComments:l,buttonColor:s,buttonTextColor:u,minNights:m,maxNights:p,showPropertyImages:d,includeIcons:f,layoutStyle:b,buttonIcon:y,searchLayout:h}),e)}}))})()})();
     1(()=>{var e={609:e=>{"use strict";e.exports=window.React},926:function(e,t,a){!function(e,t){"use strict";function a(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),a.push.apply(a,r)}return a}function r(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{};t%2?a(Object(r),!0).forEach((function(t){i(e,t,r[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(r)):a(Object(r)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(r,t))}))}return e}function n(e){return n="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},n(e)}function i(e,t,a){return t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}function o(e,t){if(null==e)return{};var a,r,n=function(e,t){if(null==e)return{};var a,r,n={},i=Object.keys(e);for(r=0;r<i.length;r++)a=i[r],t.indexOf(a)>=0||(n[a]=e[a]);return n}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(r=0;r<i.length;r++)a=i[r],t.indexOf(a)>=0||Object.prototype.propertyIsEnumerable.call(e,a)&&(n[a]=e[a])}return n}function c(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var a=e&&("undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"]);if(null!=a){var r,n,i=[],_n=!0,o=!1;try{for(a=a.call(e);!(_n=(r=a.next()).done)&&(i.push(r.value),!t||i.length!==t);_n=!0);}catch(e){o=!0,n=e}finally{try{_n||null==a.return||a.return()}finally{if(o)throw n}}return i}}(e,t)||function(e,t){if(e){if("string"==typeof e)return l(e,t);var a=Object.prototype.toString.call(e).slice(8,-1);return"Object"===a&&e.constructor&&(a=e.constructor.name),"Map"===a||"Set"===a?Array.from(e):"Arguments"===a||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(a)?l(e,t):void 0}}(e,t)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function l(e,t){(null==t||t>e.length)&&(t=e.length);for(var a=0,r=new Array(t);a<t;a++)r[a]=e[a];return r}function s(e){return e&&e.__esModule&&Object.prototype.hasOwnProperty.call(e,"default")?e.default:e}var u,m,p,d,f={exports:{}};f.exports=function(){if(d)return p;d=1;var e=m?u:(m=1,u="SECRET_DO_NOT_PASS_THIS_OR_YOU_WILL_BE_FIRED");function t(){}function a(){}return a.resetWarningCache=t,p=function(){function r(t,a,r,n,i,o){if(o!==e){var c=new Error("Calling PropTypes validators directly is not supported by the `prop-types` package. Use PropTypes.checkPropTypes() to call them. Read more at http://fb.me/use-check-prop-types");throw c.name="Invariant Violation",c}}function n(){return r}r.isRequired=r;var i={array:r,bool:r,func:r,number:r,object:r,string:r,symbol:r,any:r,arrayOf:n,element:r,elementType:r,instanceOf:n,node:r,objectOf:n,oneOf:n,oneOfType:n,shape:n,exact:n,checkPropTypes:a,resetWarningCache:t};return i.PropTypes=i,i}}()();var b=s(f.exports),y=function(e,a,r){var n=!!r,i=t.useRef(r);t.useEffect((function(){i.current=r}),[r]),t.useEffect((function(){if(!n||!e)return function(){};var t=function(){i.current&&i.current.apply(i,arguments)};return e.on(a,t),function(){e.off(a,t)}}),[n,a,e,i])},h=function(e){var a=t.useRef(e);return t.useEffect((function(){a.current=e}),[e]),a.current},g=function(e){return null!==e&&"object"===n(e)},E="[object Object]",v=function e(t,a){if(!g(t)||!g(a))return t===a;var r=Array.isArray(t);if(r!==Array.isArray(a))return!1;var n=Object.prototype.toString.call(t)===E;if(n!==(Object.prototype.toString.call(a)===E))return!1;if(!n&&!r)return t===a;var i=Object.keys(t),o=Object.keys(a);if(i.length!==o.length)return!1;for(var c={},l=0;l<i.length;l+=1)c[i[l]]=!0;for(var s=0;s<o.length;s+=1)c[o[s]]=!0;var u=Object.keys(c);if(u.length!==i.length)return!1;var m=t,p=a;return u.every((function(t){return e(m[t],p[t])}))},R=function(e,t,a){return g(e)?Object.keys(e).reduce((function(n,o){var c=!g(t)||!v(e[o],t[o]);return a.includes(o)?(c&&console.warn("Unsupported prop change: options.".concat(o," is not a mutable property.")),n):c?r(r({},n||{}),{},i({},o,e[o])):n}),null):null},_="Invalid prop `stripe` supplied to `Elements`. We recommend using the `loadStripe` utility from `@stripe/stripe-js`. See https://stripe.com/docs/stripe-js/react#elements-props-stripe for details.",N=function(e){var t,a=arguments.length>1&&void 0!==arguments[1]?arguments[1]:_;if(null===e||g(t=e)&&"function"==typeof t.elements&&"function"==typeof t.createToken&&"function"==typeof t.createPaymentMethod&&"function"==typeof t.confirmCardPayment)return e;throw new Error(a)},C=function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:_;if(function(e){return g(e)&&"function"==typeof e.then}(e))return{tag:"async",stripePromise:Promise.resolve(e).then((function(e){return N(e,t)}))};var a=N(e,t);return null===a?{tag:"empty"}:{tag:"sync",stripe:a}},k=function(e){e&&e._registerWrapper&&e.registerAppInfo&&(e._registerWrapper({name:"react-stripe-js",version:"3.6.0"}),e.registerAppInfo({name:"react-stripe-js",version:"3.6.0",url:"https://stripe.com/docs/stripe-js/react"}))},w=t.createContext(null);w.displayName="ElementsContext";var S=function(e,t){if(!e)throw new Error("Could not find Elements context; You need to wrap the part of your app that ".concat(t," in an <Elements> provider."));return e},x=function(e){var a=e.stripe,r=e.options,n=e.children,i=t.useMemo((function(){return C(a)}),[a]),o=c(t.useState((function(){return{stripe:"sync"===i.tag?i.stripe:null,elements:"sync"===i.tag?i.stripe.elements(r):null}})),2),l=o[0],s=o[1];t.useEffect((function(){var e=!0,t=function(e){s((function(t){return t.stripe?t:{stripe:e,elements:e.elements(r)}}))};return"async"!==i.tag||l.stripe?"sync"!==i.tag||l.stripe||t(i.stripe):i.stripePromise.then((function(a){a&&e&&t(a)})),function(){e=!1}}),[i,l,r]);var u=h(a);t.useEffect((function(){null!==u&&u!==a&&console.warn("Unsupported prop change on Elements: You cannot change the `stripe` prop after setting it.")}),[u,a]);var m=h(r);return t.useEffect((function(){if(l.elements){var e=R(r,m,["clientSecret","fonts"]);e&&l.elements.update(e)}}),[r,m,l.elements]),t.useEffect((function(){k(l.stripe)}),[l.stripe]),t.createElement(w.Provider,{value:l},n)};x.propTypes={stripe:b.any,options:b.object};var P=function(e){var a=t.useContext(w);return S(a,e)},O=function(e){return(0,e.children)(P("mounts <ElementsConsumer>"))};O.propTypes={children:b.func.isRequired};var T=["on","session"],j=t.createContext(null);j.displayName="CheckoutSdkContext";var D=function(e,t){if(!e)throw new Error("Could not find CheckoutProvider context; You need to wrap the part of your app that ".concat(t," in an <CheckoutProvider> provider."));return e},A=t.createContext(null);A.displayName="CheckoutContext";var I=function(e){var a=e.stripe,r=e.options,n=e.children,i=t.useMemo((function(){return C(a,"Invalid prop `stripe` supplied to `CheckoutProvider`. We recommend using the `loadStripe` utility from `@stripe/stripe-js`. See https://stripe.com/docs/stripe-js/react#elements-props-stripe for details.")}),[a]),l=c(t.useState(null),2),s=l[0],u=l[1],m=c(t.useState((function(){return{stripe:"sync"===i.tag?i.stripe:null,checkoutSdk:null}})),2),p=m[0],d=m[1],f=function(e,t){d((function(a){return a.stripe&&a.checkoutSdk?a:{stripe:e,checkoutSdk:t}}))},b=t.useRef(!1);t.useEffect((function(){var e=!0;return"async"!==i.tag||p.stripe?"sync"===i.tag&&i.stripe&&!b.current&&(b.current=!0,i.stripe.initCheckout(r).then((function(e){e&&(f(i.stripe,e),e.on("change",u))}))):i.stripePromise.then((function(t){t&&e&&!b.current&&(b.current=!0,t.initCheckout(r).then((function(e){e&&(f(t,e),e.on("change",u))})))})),function(){e=!1}}),[i,p,r,u]);var y=h(a);t.useEffect((function(){null!==y&&y!==a&&console.warn("Unsupported prop change on CheckoutProvider: You cannot change the `stripe` prop after setting it.")}),[y,a]);var g=h(r);t.useEffect((function(){var e,t;if(p.checkoutSdk){var a=null==g||null===(e=g.elementsOptions)||void 0===e?void 0:e.appearance,n=null==r||null===(t=r.elementsOptions)||void 0===t?void 0:t.appearance;n&&!v(n,a)&&p.checkoutSdk.changeAppearance(n)}}),[r,g,p.checkoutSdk]),t.useEffect((function(){k(p.stripe)}),[p.stripe]);var E=t.useMemo((function(){return function(e,t){if(!e)return null;e.on,e.session;var a=o(e,T);return t?Object.assign(t,a):Object.assign(e.session(),a)}(p.checkoutSdk,s)}),[p.checkoutSdk,s]);return p.checkoutSdk?t.createElement(j.Provider,{value:p},t.createElement(A.Provider,{value:E},n)):null};I.propTypes={stripe:b.any,options:b.shape({fetchClientSecret:b.func.isRequired,elementsOptions:b.object}).isRequired};var F=function(e){var a=t.useContext(j),r=t.useContext(w);if(a&&r)throw new Error("You cannot wrap the part of your app that ".concat(e," in both <CheckoutProvider> and <Elements> providers."));return a?D(a,e):S(r,e)},$=["mode"],B=function(e,a){var r,n="".concat((r=e).charAt(0).toUpperCase()+r.slice(1),"Element"),i=a?function(e){F("mounts <".concat(n,">"));var a=e.id,r=e.className;return t.createElement("div",{id:a,className:r})}:function(a){var r,i=a.id,l=a.className,s=a.options,u=void 0===s?{}:s,m=a.onBlur,p=a.onFocus,d=a.onReady,f=a.onChange,b=a.onEscape,g=a.onClick,E=a.onLoadError,v=a.onLoaderStart,_=a.onNetworksChange,N=a.onConfirm,C=a.onCancel,k=a.onShippingAddressChange,w=a.onShippingRateChange,S=F("mounts <".concat(n,">")),x="elements"in S?S.elements:null,P="checkoutSdk"in S?S.checkoutSdk:null,O=c(t.useState(null),2),T=O[0],j=O[1],D=t.useRef(null),A=t.useRef(null);y(T,"blur",m),y(T,"focus",p),y(T,"escape",b),y(T,"click",g),y(T,"loaderror",E),y(T,"loaderstart",v),y(T,"networkschange",_),y(T,"confirm",N),y(T,"cancel",C),y(T,"shippingaddresschange",k),y(T,"shippingratechange",w),y(T,"change",f),d&&(r="expressCheckout"===e?d:function(){d(T)}),y(T,"ready",r),t.useLayoutEffect((function(){if(null===D.current&&null!==A.current&&(x||P)){var t=null;if(P)switch(e){case"payment":t=P.createPaymentElement(u);break;case"address":if(!("mode"in u))throw new Error("You must supply options.mode. mode must be 'billing' or 'shipping'.");var a=u.mode,r=o(u,$);if("shipping"===a)t=P.createShippingAddressElement(r);else{if("billing"!==a)throw new Error("Invalid options.mode. mode must be 'billing' or 'shipping'.");t=P.createBillingAddressElement(r)}break;case"expressCheckout":t=P.createExpressCheckoutElement(u);break;case"currencySelector":t=P.createCurrencySelectorElement();break;default:throw new Error("Invalid Element type ".concat(n,". You must use either the <PaymentElement />, <AddressElement options={{mode: 'shipping'}} />, <AddressElement options={{mode: 'billing'}} />, or <ExpressCheckoutElement />."))}else x&&(t=x.create(e,u));D.current=t,j(t),t&&t.mount(A.current)}}),[x,P,u]);var I=h(u);return t.useEffect((function(){if(D.current){var e=R(u,I,["paymentRequest"]);e&&"update"in D.current&&D.current.update(e)}}),[u,I]),t.useLayoutEffect((function(){return function(){if(D.current&&"function"==typeof D.current.destroy)try{D.current.destroy(),D.current=null}catch(e){}}}),[]),t.createElement("div",{id:i,className:l,ref:A})};return i.propTypes={id:b.string,className:b.string,onChange:b.func,onBlur:b.func,onFocus:b.func,onReady:b.func,onEscape:b.func,onClick:b.func,onLoadError:b.func,onLoaderStart:b.func,onNetworksChange:b.func,onConfirm:b.func,onCancel:b.func,onShippingAddressChange:b.func,onShippingRateChange:b.func,options:b.object},i.displayName=n,i.__elementType=e,i},G="undefined"==typeof window,L=t.createContext(null);L.displayName="EmbeddedCheckoutProviderContext";var U=function(){var e=t.useContext(L);if(!e)throw new Error("<EmbeddedCheckout> must be used within <EmbeddedCheckoutProvider>");return e},M=G?function(e){var a=e.id,r=e.className;return U(),t.createElement("div",{id:a,className:r})}:function(e){var a=e.id,r=e.className,n=U().embeddedCheckout,i=t.useRef(!1),o=t.useRef(null);return t.useLayoutEffect((function(){return!i.current&&n&&null!==o.current&&(n.mount(o.current),i.current=!0),function(){if(i.current&&n)try{n.unmount(),i.current=!1}catch(e){}}}),[n]),t.createElement("div",{ref:o,id:a,className:r})},q=B("auBankAccount",G),Y=B("card",G),W=B("cardNumber",G),z=B("cardExpiry",G),H=B("cardCvc",G),J=B("fpxBank",G),K=B("iban",G),Q=B("idealBank",G),Z=B("p24Bank",G),V=B("epsBank",G),X=B("payment",G),ee=B("expressCheckout",G),te=B("currencySelector",G),ae=B("paymentRequestButton",G),re=B("linkAuthentication",G),ne=B("address",G),ie=B("shippingAddress",G),oe=B("paymentMethodMessaging",G),ce=B("affirmMessage",G),le=B("afterpayClearpayMessage",G);e.AddressElement=ne,e.AffirmMessageElement=ce,e.AfterpayClearpayMessageElement=le,e.AuBankAccountElement=q,e.CardCvcElement=H,e.CardElement=Y,e.CardExpiryElement=z,e.CardNumberElement=W,e.CheckoutProvider=I,e.CurrencySelectorElement=te,e.Elements=x,e.ElementsConsumer=O,e.EmbeddedCheckout=M,e.EmbeddedCheckoutProvider=function(e){var a=e.stripe,r=e.options,n=e.children,i=t.useMemo((function(){return C(a,"Invalid prop `stripe` supplied to `EmbeddedCheckoutProvider`. We recommend using the `loadStripe` utility from `@stripe/stripe-js`. See https://stripe.com/docs/stripe-js/react#elements-props-stripe for details.")}),[a]),o=t.useRef(null),l=t.useRef(null),s=c(t.useState({embeddedCheckout:null}),2),u=s[0],m=s[1];t.useEffect((function(){if(!l.current&&!o.current){var e=function(e){l.current||o.current||(l.current=e,o.current=l.current.initEmbeddedCheckout(r).then((function(e){m({embeddedCheckout:e})})))};"async"!==i.tag||l.current||!r.clientSecret&&!r.fetchClientSecret?"sync"!==i.tag||l.current||!r.clientSecret&&!r.fetchClientSecret||e(i.stripe):i.stripePromise.then((function(t){t&&e(t)}))}}),[i,r,u,l]),t.useEffect((function(){return function(){u.embeddedCheckout?(o.current=null,u.embeddedCheckout.destroy()):o.current&&o.current.then((function(){o.current=null,u.embeddedCheckout&&u.embeddedCheckout.destroy()}))}}),[u.embeddedCheckout]),t.useEffect((function(){k(l)}),[l]);var p=h(a);t.useEffect((function(){null!==p&&p!==a&&console.warn("Unsupported prop change on EmbeddedCheckoutProvider: You cannot change the `stripe` prop after setting it.")}),[p,a]);var d=h(r);return t.useEffect((function(){null!=d&&(null!=r?(void 0===r.clientSecret&&void 0===r.fetchClientSecret&&console.warn("Invalid props passed to EmbeddedCheckoutProvider: You must provide one of either `options.fetchClientSecret` or `options.clientSecret`."),null!=d.clientSecret&&r.clientSecret!==d.clientSecret&&console.warn("Unsupported prop change on EmbeddedCheckoutProvider: You cannot change the client secret after setting it. Unmount and create a new instance of EmbeddedCheckoutProvider instead."),null!=d.fetchClientSecret&&r.fetchClientSecret!==d.fetchClientSecret&&console.warn("Unsupported prop change on EmbeddedCheckoutProvider: You cannot change fetchClientSecret after setting it. Unmount and create a new instance of EmbeddedCheckoutProvider instead."),null!=d.onComplete&&r.onComplete!==d.onComplete&&console.warn("Unsupported prop change on EmbeddedCheckoutProvider: You cannot change the onComplete option after setting it."),null!=d.onShippingDetailsChange&&r.onShippingDetailsChange!==d.onShippingDetailsChange&&console.warn("Unsupported prop change on EmbeddedCheckoutProvider: You cannot change the onShippingDetailsChange option after setting it."),null!=d.onLineItemsChange&&r.onLineItemsChange!==d.onLineItemsChange&&console.warn("Unsupported prop change on EmbeddedCheckoutProvider: You cannot change the onLineItemsChange option after setting it.")):console.warn("Unsupported prop change on EmbeddedCheckoutProvider: You cannot unset options after setting them."))}),[d,r]),t.createElement(L.Provider,{value:u},n)},e.EpsBankElement=V,e.ExpressCheckoutElement=ee,e.FpxBankElement=J,e.IbanElement=K,e.IdealBankElement=Q,e.LinkAuthenticationElement=re,e.P24BankElement=Z,e.PaymentElement=X,e.PaymentMethodMessagingElement=oe,e.PaymentRequestButtonElement=ae,e.ShippingAddressElement=ie,e.useCheckout=function(){!function(e){var a=t.useContext(j);D(a,e)}("calls useCheckout()");var e=t.useContext(A);if(!e)throw new Error("Could not find Checkout Context; You need to wrap the part of your app that calls useCheckout() in an <CheckoutProvider> provider.");return e},e.useElements=function(){return P("calls useElements()").elements},e.useStripe=function(){return F("calls useStripe()").stripe}}(t,a(609))}},t={};function a(r){var n=t[r];if(void 0!==n)return n.exports;var i=t[r]={exports:{}};return e[r].call(i.exports,i,i.exports,a),i.exports}a.n=e=>{var t=e&&e.__esModule?()=>e.default:()=>e;return a.d(t,{a:t}),t},a.d=(e,t)=>{for(var r in t)a.o(t,r)&&!a.o(e,r)&&Object.defineProperty(e,r,{enumerable:!0,get:t[r]})},a.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),(()=>{"use strict";var e=a(609),t=a.n(e);const r=window.ReactDOM;var n,i=a.n(r),o="https://js.stripe.com",c="".concat(o,"/v3"),l=/^https:\/\/js\.stripe\.com\/v3\/?(\?.*)?$/,s=/^https:\/\/js\.stripe\.com\/(v3|[a-z]+)\/stripe\.js(\?.*)?$/,u="loadStripe.setLoadParameters was called but an existing Stripe.js script already exists in the document; existing script parameters will be used",m=function(e){var t=e&&!e.advancedFraudSignals?"?advancedFraudSignals=false":"",a=document.createElement("script");a.src="".concat(c).concat(t);var r=document.head||document.body;if(!r)throw new Error("Expected document.body not to be null. Stripe.js requires a <body> element.");return r.appendChild(a),a},p=null,d=null,f=null,b=!1,y=function(){return n||(n=(e=null,null!==p?p:(p=new Promise((function(t,a){if("undefined"!=typeof window&&"undefined"!=typeof document)if(window.Stripe&&e&&console.warn(u),window.Stripe)t(window.Stripe);else try{var r=function(){for(var e,t=document.querySelectorAll('script[src^="'.concat(o,'"]')),a=0;a<t.length;a++){var r=t[a];if(e=r.src,l.test(e)||s.test(e))return r}return null}();if(r&&e)console.warn(u);else if(r){if(r&&null!==f&&null!==d){var n;r.removeEventListener("load",f),r.removeEventListener("error",d),null===(n=r.parentNode)||void 0===n||n.removeChild(r),r=m(e)}}else r=m(e);f=function(e,t){return function(){window.Stripe?e(window.Stripe):t(new Error("Stripe.js not available"))}}(t,a),d=function(e){return function(t){e(new Error("Failed to load Stripe.js",{cause:t}))}}(a),r.addEventListener("load",f),r.addEventListener("error",d)}catch(e){return void a(e)}else t(null)}))).catch((function(e){return p=null,Promise.reject(e)}))).catch((function(e){return n=null,Promise.reject(e)})));var e};Promise.resolve().then((function(){return y()})).catch((function(e){b||console.warn(e)}));var h=function(){for(var e=arguments.length,t=new Array(e),a=0;a<e;a++)t[a]=arguments[a];b=!0;var r=Date.now();return y().then((function(e){return function(e,t,a){if(null===e)return null;var r=t[0].match(/^pk_test/),n=function(e){return 3===e?"v3":e}(e.version);r&&"v3"!==n&&console.warn("Stripe.js@".concat(n," was loaded on the page, but @stripe/stripe-js@").concat("5.10.0"," expected Stripe.js@").concat("v3",". This may result in unexpected behavior. For more information, see https://docs.stripe.com/sdks/stripejs-versioning"));var i=e.apply(void 0,t);return function(e,t){e&&e._registerWrapper&&e._registerWrapper({name:"stripe-js",version:"5.10.0",startTime:t})}(i,a),i}(e,t,r)}))},g=a(926);const E=e=>({AUD:"AUD$",USD:"USD$",NZD:"NZD$",GBP:"GBP£",EUR:"EUR€",CAD:"CAD$",SGD:"SGD$"}[e]||e+" "),v=(()=>{const e=window.wpApiSettings?.restUrl;return e?e.replace(/\/$/,""):document.querySelector('link[rel="https://api.w.org/"]').href.replace(/\/$/,"")})(),R=(h("your-publishable-key-here"),e=>new URLSearchParams(window.location.search).get(e)),_=({property:e,isSelected:t,onToggle:a,nights:r,checkInDate:n,showPropertyImages:i,includeIcons:o})=>{e.availability?.total_cost||e.availability?.dates?.reduce(((e,t)=>e+(t.rate||0)),0);const c=e.availability?.available;return React.createElement("div",{className:`bif-tile ${t?"bif-selected":""} ${c?"":"is-unavailable"}`},i&&e.property_image&&React.createElement("div",{className:"bif-tile__hero"},React.createElement("img",{loading:"lazy",src:e.property_image,alt:e.property_name}),React.createElement("span",{className:"bif-chip "+(c?"":"unavailable")},((e,t,a)=>{if(e)return"Available";switch(t){case"Booked Out":return"Booked Out";case"No Tariff Set":return"No Rates Set";case"Min Nights":return`Minimum ${a||2} Nights`;default:return"Unavailable"}})(c,e.availability?.availability_reason,e.availability?.min_nights))),React.createElement("div",{className:"bif-tile__content"},React.createElement("h3",{className:"bif-tile__title"},e.property_name),o&&e.property_features&&React.createElement("ul",{className:"bif-amenities bif-amenities--slim"},1===e.property_features.wifi&&React.createElement("li",null,React.createElement("span",null,"📶 WiFi")),e.property_features.queen_beds>0&&React.createElement("li",null,React.createElement("span",null,"🛏️ ",e.property_features.queen_beds," Queen")),e.property_features.king_beds>0&&React.createElement("li",null,React.createElement("span",null,"🛏️ ",e.property_features.king_beds," King")),e.property_features.double_beds>0&&React.createElement("li",null,React.createElement("span",null,"🛏️ ",e.property_features.double_beds," Double")),e.property_features.single_beds>0&&React.createElement("li",null,React.createElement("span",null,"🛏️ ",e.property_features.single_beds," Single")),e.property_features.bunk_beds>0&&React.createElement("li",null,React.createElement("span",null,"🛏️ ",e.property_features.bunk_beds," Bunk")),e.property_features.sofa_beds>0&&React.createElement("li",null,React.createElement("span",null,"🛋️ ",e.property_features.sofa_beds," Sofa bed")),e.property_features.bedrooms&&React.createElement("li",null,React.createElement("span",null,"🏠 ",e.property_features.bedrooms," Bedroom",e.property_features.bedrooms>1?"s":"")),e.property_features.living_areas&&React.createElement("li",null,React.createElement("span",null,"🛋️ ",e.property_features.living_areas," Living Area",e.property_features.living_areas>1?"s":""))),e.availability?.dates&&React.createElement("div",{className:"bif-tile__rates"},e.availability.dates.map(((e,t)=>React.createElement("div",{key:t,className:"bif-pill "+(e.availability?"ok":"na")},React.createElement("span",{className:"bif-pill__date"},e.date_formatted),React.createElement("strong",{className:"bif-pill__amt"},e.availability?`$${e.rate}`:"Booked Out"===e.availability_reason?"Booked":"No Tariff Set"===e.availability_reason?"No Rate":"N/A"))))),React.createElement("div",{className:"bif-tile__footer"},c?React.createElement("button",{onClick:a,className:"bif-btn "+(t?"bif-btn-selected":"bif-btn-select")},t?"✓ Selected":"Select"):React.createElement("button",{disabled:!0,className:"bif-btn bif-btn-disabled"},"Unavailable")),t&&e.optional_extras?.length>0&&React.createElement("div",{className:"bif-optional-extras"},React.createElement("h4",{className:"bif-daily-breakdown-title"},"Optional Extras"),React.createElement("div",{className:"bif-extras-list"},e.optional_extras.map((t=>React.createElement("div",{key:t.id,className:"bif-extra-item"},React.createElement("div",{className:"bif-extra-info"},React.createElement("input",{type:"checkbox",checked:e.selectedExtras?.[t.id]||!1,onChange:()=>e.onToggleExtra?.(e.id,t.id)}),React.createElement("label",null,t.description)),React.createElement("div",{className:"bif-extra-price"},"$",t.amount))))))))},N=({property:e,isSelected:t,onToggle:a,nights:r,checkInDate:n,showPropertyImages:i,includeIcons:o})=>{e.availability?.total_cost||e.availability?.dates?.reduce(((e,t)=>e+(t.rate||0)),0);const c=e.availability?.available;return React.createElement("div",{className:`bif-row ${t?"bif-selected":""} ${c?"":"is-unavailable"} ${i&&e.property_image?"":"no-image"}`},i&&e.property_image&&React.createElement("div",{className:"bif-row__thumb"},React.createElement("img",{loading:"lazy",src:e.property_image,alt:e.property_name})),React.createElement("div",{className:"bif-row__main"},React.createElement("div",{className:"bif-row__top"},React.createElement("h3",{className:"bif-row__title"},e.property_name),React.createElement("span",{className:"bif-dot "+(l=c,l?"ok":"na"),"aria-hidden":"true"})),o&&e.property_features&&React.createElement("ul",{className:"bif-amenities bif-amenities--inline"},1===e.property_features.wifi&&React.createElement("li",null,React.createElement("span",null,"📶 WiFi")),e.property_features.queen_beds>0&&React.createElement("li",null,React.createElement("span",null,"🛏️ ",e.property_features.queen_beds," Queen")),e.property_features.king_beds>0&&React.createElement("li",null,React.createElement("span",null,"🛏️ ",e.property_features.king_beds," King")),e.property_features.double_beds>0&&React.createElement("li",null,React.createElement("span",null,"🛏️ ",e.property_features.double_beds," Double")),e.property_features.single_beds>0&&React.createElement("li",null,React.createElement("span",null,"🛏️ ",e.property_features.single_beds," Single")),e.property_features.bunk_beds>0&&React.createElement("li",null,React.createElement("span",null,"🛏️ ",e.property_features.bunk_beds," Bunk")),e.property_features.sofa_beds>0&&React.createElement("li",null,React.createElement("span",null,"🛋️ ",e.property_features.sofa_beds," Sofa bed")),e.property_features.bedrooms&&React.createElement("li",null,React.createElement("span",null,"🏠 ",e.property_features.bedrooms," Bedroom",e.property_features.bedrooms>1?"s":"")),e.property_features.living_areas&&React.createElement("li",null,React.createElement("span",null,"🛋️ ",e.property_features.living_areas," Living Area",e.property_features.living_areas>1?"s":"")))),e.availability?.dates&&React.createElement("div",{className:"bif-row__rates"},e.availability.dates.map(((e,t)=>React.createElement("div",{key:t,className:"bif-rmini "+(e.availability?"ok":"na")},React.createElement("div",{className:"bif-rmini__date"},e.date_formatted),React.createElement("div",{className:"bif-rmini__amt"},e.availability?`$${e.rate}`:"Booked Out"===e.availability_reason?"Booked":"No Tariff Set"===e.availability_reason?"No Rate":"N/A"))))),React.createElement("div",{className:"bif-row__cta"},c?React.createElement("button",{onClick:a,className:"bif-btn "+(t?"bif-btn-selected":"bif-btn-select")},t?"✓ Selected":"Select"):React.createElement("button",{disabled:!0,className:"bif-btn bif-btn-disabled"},"Unavailable")),t&&e.optional_extras?.length>0&&React.createElement("div",{className:"bif-optional-extras",style:{gridColumn:"1 / -1",marginTop:"1rem"}},React.createElement("h4",{className:"bif-daily-breakdown-title"},"Optional Extras"),React.createElement("div",{className:"bif-extras-list"},e.optional_extras.map((t=>React.createElement("div",{key:t.id,className:"bif-extra-item"},React.createElement("div",{className:"bif-extra-info"},React.createElement("input",{type:"checkbox",checked:e.selectedExtras?.[t.id]||!1,onChange:()=>e.onToggleExtra?.(e.id,t.id)}),React.createElement("label",null,t.description)),React.createElement("div",{className:"bif-extra-price"},"$",t.amount)))))));var l},C=({property:e,isSelected:t,onToggle:a,nights:r,checkInDate:n,showPropertyImages:i,includeIcons:o})=>{const c=e.availability?.total_cost||e.availability?.dates?.reduce(((e,t)=>e+(t.rate||0)),0)||0,l=e.availability?.available,s=(e,t,a)=>{if(e)return"Available";switch(t){case"Booked Out":return"Booked Out";case"No Tariff Set":return"No Rates Set";case"Min Nights":return`Minimum ${a||2} Nights`;default:return"Unavailable"}};return React.createElement("div",{className:`bif-property-card ${t?"bif-selected":""} ${l?"":"bif-unavailable"}`},React.createElement("div",{className:"bif-property-header"},i&&e.property_image&&React.createElement("div",{className:"bif-property-image"},React.createElement("img",{src:e.property_image,alt:e.property_name})),React.createElement("div",{className:"bif-property-info"},React.createElement("h3",{className:"bif-property-name"},e.property_name),e.property_description&&React.createElement("p",{className:"bif-property-description"},e.property_description),o&&e.property_features&&React.createElement("div",{className:"bif-property-icons"},1===e.property_features.wifi&&React.createElement("span",{className:"bif-property-icon",title:"WiFi Available"},"📶 WiFi"),e.property_features.queen_beds>0&&React.createElement("span",{className:"bif-property-icon",title:`${e.property_features.queen_beds} Queen bed${e.property_features.queen_beds>1?"s":""}`},"🛏️ ",e.property_features.queen_beds," Queen"),e.property_features.king_beds>0&&React.createElement("span",{className:"bif-property-icon",title:`${e.property_features.king_beds} King bed${e.property_features.king_beds>1?"s":""}`},"🛏️ ",e.property_features.king_beds," King"),e.property_features.double_beds>0&&React.createElement("span",{className:"bif-property-icon",title:`${e.property_features.double_beds} Double bed${e.property_features.double_beds>1?"s":""}`},"🛏️ ",e.property_features.double_beds," Double"),e.property_features.single_beds>0&&React.createElement("span",{className:"bif-property-icon",title:`${e.property_features.single_beds} Single bed${e.property_features.single_beds>1?"s":""}`},"🛏️ ",e.property_features.single_beds," Single"),e.property_features.bunk_beds>0&&React.createElement("span",{className:"bif-property-icon",title:`${e.property_features.bunk_beds} Bunk bed${e.property_features.bunk_beds>1?"s":""}`},"🛏️ ",e.property_features.bunk_beds," Bunk"),e.property_features.sofa_beds>0&&React.createElement("span",{className:"bif-property-icon",title:`${e.property_features.sofa_beds} Sofa bed${e.property_features.sofa_beds>1?"s":""}`},"🛋️ ",e.property_features.sofa_beds," Sofa bed"),e.property_features.bedrooms&&React.createElement("span",{className:"bif-property-icon",title:`${e.property_features.bedrooms} bedroom${e.property_features.bedrooms>1?"s":""}`},"🏠 ",e.property_features.bedrooms," Bedroom",e.property_features.bedrooms>1?"s":""),e.property_features.living_areas&&React.createElement("span",{className:"bif-property-icon",title:`${e.property_features.living_areas} living area${e.property_features.living_areas>1?"s":""}`},"🛋️ ",e.property_features.living_areas," Living Area",e.property_features.living_areas>1?"s":""))),React.createElement("div",{className:"bif-property-status-container"},React.createElement("span",{className:`bif-property-status ${((e,t)=>{if(e)return"bif-status-available";switch(t){case"Booked Out":return"bif-status-booked";case"No Tariff Set":return"bif-status-no-rate";case"Min Nights":return"bif-status-min-nights";default:return"bif-status-unavailable"}})(l,e.availability?.availability_reason)}`},s(l,e.availability?.availability_reason,e.availability?.min_nights)),l?React.createElement("button",{onClick:a,className:`bif-btn ${t?"bif-btn-selected":"bif-btn-select"} bif-header-btn`,style:{marginLeft:"0.75rem"}},t?"✓ Selected":"Select Property"):React.createElement("button",{disabled:!0,className:"bif-btn bif-btn-disabled bif-header-btn",style:{marginLeft:"0.75rem"}},s(l,e.availability?.availability_reason,e.availability?.min_nights)))),e.availability?.dates&&React.createElement("div",{className:"bif-availability-details"},React.createElement("h4",{className:"bif-daily-breakdown-title"},"Daily Rate Breakdown"),React.createElement("div",{className:"bif-daily-rates"},e.availability.dates.map(((e,t)=>React.createElement("div",{key:t,className:"bif-daily-rate "+(e.availability?"bif-available":"bif-unavailable")},React.createElement("div",{className:"bif-date"},e.date_formatted),React.createElement("div",{className:"bif-rate"},e.availability?`$${e.rate}`:"Booked Out"===e.availability_reason?"Booked":"No Tariff Set"===e.availability_reason?"No Rate":"N/A"))))),React.createElement("div",{className:"bif-rate-summary"},React.createElement("div",{className:"bif-summary-row"},React.createElement("span",{className:"bif-total"},"Total: $",c)))),t&&e.optional_extras?.length>0&&React.createElement("div",{className:"bif-optional-extras"},React.createElement("h4",{className:"bif-daily-breakdown-title"},"Optional Extras"),React.createElement("div",{className:"bif-extras-list"},e.optional_extras.map((t=>React.createElement("div",{key:t.id,className:"bif-extra-item"},React.createElement("div",{className:"bif-extra-info"},React.createElement("input",{type:"checkbox",checked:e.selectedExtras?.[t.id]||!1,onChange:()=>e.onToggleExtra?.(e.id,t.id)}),React.createElement("label",null,t.description)),React.createElement("div",{className:"bif-extra-price"},"$",t.amount)))))))},k=({checkInDate:e,nights:t,onDateChange:a,onNightsChange:r,onCheckAvailability:n,isLoading:i,minNights:o,maxNights:c,buttonIcon:l="search",searchLayout:s="default"})=>{const u=(new Date).toISOString().split("T")[0],m={search:"🔍",calendar:"📅",home:"🏠",mapMarker:"📍",star:"⭐",pin:"📌",pinSmall:"📍",globe:"🌍"}[l]||"🔍";return"horizontal"===s?React.createElement("div",{className:"bif-search-box-horizontal"},React.createElement("div",{className:"bif-search-field",onClick:()=>document.querySelector('.bif-search-box-horizontal input[type="date"]')?.showPicker?.()},React.createElement("span",{className:"bif-search-icon"},React.createElement("svg",{width:"20",height:"20",viewBox:"0 0 20 20",fill:"none",xmlns:"http://www.w3.org/2000/svg"},React.createElement("rect",{x:"3",y:"4",width:"14",height:"13",rx:"1",stroke:"currentColor",strokeWidth:"1.5"}),React.createElement("line",{x1:"3",y1:"8",x2:"17",y2:"8",stroke:"currentColor",strokeWidth:"1.5"}),React.createElement("line",{x1:"7",y1:"2",x2:"7",y2:"5",stroke:"currentColor",strokeWidth:"1.5",strokeLinecap:"round"}),React.createElement("line",{x1:"13",y1:"2",x2:"13",y2:"5",stroke:"currentColor",strokeWidth:"1.5",strokeLinecap:"round"}))),React.createElement("div",{className:"bif-search-field-content"},React.createElement("label",null,"Check-In"),React.createElement("input",{type:"date",value:e,onChange:e=>a(e.target.value),min:u}))),React.createElement("div",{className:"bif-search-divider"}),React.createElement("div",{className:"bif-search-field"},React.createElement("span",{className:"bif-search-icon"},React.createElement("svg",{width:"20",height:"20",viewBox:"0 0 20 20",fill:"currentColor",xmlns:"http://www.w3.org/2000/svg"},React.createElement("path",{d:"M17 10.5c0 3.59-2.69 6.5-6 6.5s-6-2.91-6-6.5S7.69 4 11 4c.35 0 .69.03 1.02.09A5.5 5.5 0 0 0 17 10.5z"}))),React.createElement("div",{className:"bif-search-field-content"},React.createElement("label",null,"Nights"),React.createElement("select",{value:t,onChange:e=>r(parseInt(e.target.value))},[...Array(c-o+1).keys()].map((e=>{const t=o+e;return React.createElement("option",{key:t,value:t},t)}))))),React.createElement("button",{onClick:n,disabled:!e||i,className:"bif-search-button"},i?"Checking...":"Search")):React.createElement("div",{className:"bif-date-selector"},React.createElement("h2",{className:"bif-section-title"},"Select Your Dates"),React.createElement("div",{className:"bif-date-form"},React.createElement("div",{className:"bif-form-field"},React.createElement("label",null,"Check-in Date"),React.createElement("input",{type:"date",value:e,onChange:e=>a(e.target.value),min:u,className:"bif-date-input"})),React.createElement("div",{className:"bif-form-field"},React.createElement("label",null,"Number of Nights"),React.createElement("select",{value:t,onChange:e=>r(parseInt(e.target.value)),className:"bif-nights-select"},[...Array(c-o+1).keys()].map((e=>{const t=o+e;return React.createElement("option",{key:t,value:t},t," ",1===t?"night":"nights")})))),React.createElement("div",{className:"bif-form-field"},React.createElement("button",{onClick:n,disabled:!e||i,className:"bif-btn bif-btn-primary bif-check-availability bif-has-icon-preview"},i?React.createElement(React.Fragment,null,React.createElement("div",{className:"bif-spinner"}),React.createElement("span",null,"Checking...")):React.createElement(React.Fragment,null,React.createElement("span",{className:"bif-icon-preview"},m),React.createElement("span",null,"Check Availability"))))))},w=({selectedProperties:e,selectedExtras:t,nights:a,total:r,discountCode:n,onDiscountCodeChange:i,onApplyDiscount:o,checkInDate:c,summary:l,showDiscount:s=!1,showRedeemGiftCertificate:u=!1,giftCertificate:m,onGiftCertificateChange:p,showGiftCertificateForm:d,onTriggerShowGiftCertificate:f,onApplyGiftCertificate:b,gcResult:y,gcLoading:h=!1})=>{Object.values(t).flat().reduce(((e,t)=>e+(t.amount||0)),0);const g=l&&parseFloat(l.order_discount_code_total||0)>0;return e&&0!==e.length?React.createElement("div",{className:"bif-booking-summary"},React.createElement("h3",{className:"bif-section-title"},"Booking Summary"),React.createElement("div",{className:"bif-summary-content"},e.map((e=>{const a=e.sub_total||e.availability?.total_cost||e.availability?.dates?.reduce(((e,t)=>e+(t.rate||0)),0)||0,r=e.mandatory_extras_total||e.mandatory_extras?.reduce(((e,t)=>e+parseFloat(t.amount||0)),0)||0,n=e.optional_extras_total||0,i=parseFloat(a)+parseFloat(r)+parseFloat(n);return React.createElement("div",{key:e.id,className:"bif-property-summary"},React.createElement("h5",{className:"bif-property-summary-name"},e.property_name),React.createElement("div",{className:"bif-property-total"},React.createElement("div",{className:"bif-total-row"},React.createElement("span",null,"Property Subtotal"),React.createElement("span",null,"$",parseFloat(a).toFixed(2)))),e.mandatory_extras&&e.mandatory_extras.length>0&&React.createElement("div",{className:"bif-mandatory-extras-summary"},React.createElement("h4",{className:"bif-daily-breakdown-title"},"Mandatory Extras"),e.mandatory_extras.map((e=>React.createElement("div",{key:e.id,className:"bif-total-row",style:{fontSize:"0.875rem",color:"#dc2626"}},React.createElement("span",null,e.description),React.createElement("span",null,"$",parseFloat(e.amount).toFixed(2)))))),e.optional_extras&&e.optional_extras.filter((e=>e.selected)).length>0&&React.createElement("div",{className:"bif-optional-extras-summary"},React.createElement("h4",{className:"bif-daily-breakdown-title"},"Optional Extras"),e.optional_extras.filter((e=>e.selected)).map((e=>React.createElement("div",{key:e.id,className:"bif-total-row",style:{fontSize:"0.875rem",color:"#92400e"}},React.createElement("span",null,e.description),React.createElement("span",null,"$",parseFloat(e.amount).toFixed(2)))))),React.createElement("div",{className:"bif-property-total"},React.createElement("div",{className:"bif-total-row bif-subtotal"},React.createElement("span",null,"Property Total"),React.createElement("span",null,"$",parseFloat(i).toFixed(2)))),!e.optional_extras&&t[e.id]&&t[e.id].length>0&&React.createElement("div",{className:"bif-optional-extras-summary"},React.createElement("h4",{className:"bif-daily-breakdown-title"},"Selected Optional Extras"),t[e.id].map((e=>React.createElement("div",{key:e.id,className:"bif-total-row",style:{fontSize:"0.875rem",color:"#92400e"}},React.createElement("span",null,e.description),React.createElement("span",null,"$",parseFloat(e.amount).toFixed(2)))))))})),s&&React.createElement("div",{className:"bif-summary-section"},React.createElement("div",{className:"bif-discount-form"},React.createElement("input",{type:"text",placeholder:"Enter discount code",value:n,onChange:e=>i(e.target.value),className:"bif-discount-input"}),React.createElement("button",{onClick:()=>{n.trim()&&o(n)},className:"bif-btn "+(n?.trim()?"bif-btn-primary":"bif-btn-secondary")},"Apply")),g&&React.createElement("div",{className:"bif-discount-applied"},"Discount code applied")),u&&l&&React.createElement("div",{className:"bif-summary-section"},React.createElement("div",{className:"bif-gift-certificate-section"},d?React.createElement("div",{className:"bif-gift-certificate-form"},React.createElement("div",{className:"bif-form-row"},React.createElement("div",{className:"bif-form-field"},React.createElement("label",null,"Certificate Number:"),React.createElement("input",{type:"text",value:m.number,onChange:e=>p({...m,number:e.target.value}),className:"bif-form-control",placeholder:"Enter certificate number",disabled:h})),React.createElement("div",{className:"bif-form-field"},React.createElement("label",null,"Pin:"),React.createElement("input",{type:"number",value:m.pin,onChange:e=>p({...m,pin:e.target.value}),className:"bif-form-control",placeholder:"Enter pin",disabled:h}))),React.createElement("button",{className:"bif-btn bif-btn-secondary",onClick:b,disabled:h},h?"Applying...":"Apply")):React.createElement("button",{className:"bif-btn bif-btn-secondary",onClick:f},"Apply Gift Certificate"),y&&y.valid&&React.createElement("div",{className:"bif-gift-certificate-success"},React.createElement("p",null,"✅ Successfully Applied Gift Certificate"),React.createElement("p",null,y.result),parseFloat(y.total)-parseFloat(y.gc_amount_applied)==0?React.createElement("p",null,React.createElement("strong",null,"🎉 Your gift certificate covers the full amount! No additional payment required.")):React.createElement(React.Fragment,null,React.createElement("p",null,"Remaining balance to pay: ",React.createElement("strong",null,"$",(parseFloat(y.total)-parseFloat(y.gc_amount_applied)).toFixed(2))),React.createElement("p",{style:{fontSize:"0.875rem",color:"#6b7280"}},"*Credit card surcharge will be added at payment")),React.createElement("p",null,"Gift Certificate balance after order: ",React.createElement("strong",null,"$",parseFloat(y.gc_balance_after_order).toFixed(2)))))),React.createElement("div",{className:"bif-grand-total"},y&&y.valid&&React.createElement("div",{className:"bif-total-row"},React.createElement("span",null,"Order Total"),React.createElement("span",null,"$",parseFloat(y.total||l.order_grand_total).toFixed(2))),y&&y.valid&&React.createElement("div",{className:"bif-total-row",style:{color:"#059669"}},React.createElement("span",null,"Gift Certificate Applied"),React.createElement("span",null,"-$",parseFloat(y.gc_amount_applied).toFixed(2))),React.createElement("div",{className:"bif-total-main"},React.createElement("span",null,y&&y.valid&&parseFloat(y.total)-parseFloat(y.gc_amount_applied)==0?"Total Paid by Gift Certificate":y&&y.valid?"Balance Due":"Total Cost"),React.createElement("span",{className:"bif-total-amount"},"$",y&&y.valid?(parseFloat(y.total)-parseFloat(y.gc_amount_applied)).toFixed(2):parseFloat(r).toFixed(2))),y&&y.valid&&parseFloat(y.total)-parseFloat(y.gc_amount_applied)>0&&l&&l.order_has_surcharge&&React.createElement("div",{className:"bif-surcharge-note",style:{fontSize:"0.875rem",color:"#6b7280",marginTop:"0.5rem"}},"*Credit card surcharge will be added at payment"),l&&parseFloat(l.order_discount_code_total||0)>0&&React.createElement("div",{className:"bif-discount-text"},"Includes discount of $",parseFloat(l.order_discount_code_total||0).toFixed(2))))):null},S=({isOpen:t,onClose:a,title:r,content:n})=>((0,e.useEffect)((()=>(document.body.style.overflow=t?"hidden":"",()=>{document.body.style.overflow=""})),[t]),(0,e.useEffect)((()=>{const e=e=>{"Escape"===e.key&&t&&a()};return t&&document.addEventListener("keydown",e),()=>{document.removeEventListener("keydown",e)}}),[t,a]),t?React.createElement("div",{className:"bif-modal-overlay",onClick:a},React.createElement("div",{className:"bif-modal",onClick:e=>e.stopPropagation()},React.createElement("div",{className:"bif-modal-header"},React.createElement("h3",{className:"bif-modal-title"},r),React.createElement("button",{className:"bif-modal-close",onClick:a,"aria-label":"Close modal"},"×")),React.createElement("div",{className:"bif-modal-content",dangerouslySetInnerHTML:{__html:n}}))):null),x=({userDetails:e,onUpdateDetails:t,formErrors:a,showSuburb:r=!0,showPostcode:n=!0,showComments:i=!1})=>React.createElement("div",{className:"bif-customer-details"},React.createElement("h2",{className:"bif-section-title"},"Your Details"),React.createElement("div",{className:"bif-customer-form"},React.createElement("div",{className:"bif-form-row"},React.createElement("div",{className:"bif-form-field"},React.createElement("label",null,"First Name *"),React.createElement("input",{type:"text",value:e.firstName,onChange:e=>t("firstName",e.target.value),placeholder:"Enter your first name",className:a.firstName?"bif-error":""}),a.firstName&&React.createElement("div",{className:"bif-field-error"},a.firstName)),React.createElement("div",{className:"bif-form-field"},React.createElement("label",null,"Last Name *"),React.createElement("input",{type:"text",value:e.lastName,onChange:e=>t("lastName",e.target.value),placeholder:"Enter your last name",className:a.lastName?"bif-error":""}),a.lastName&&React.createElement("div",{className:"bif-field-error"},a.lastName))),React.createElement("div",{className:"bif-form-row"},React.createElement("div",{className:"bif-form-field"},React.createElement("label",null,"Email *"),React.createElement("input",{type:"email",value:e.email,onChange:e=>t("email",e.target.value),placeholder:"Enter your email address",className:a.email?"bif-error":""}),a.email&&React.createElement("div",{className:"bif-field-error"},a.email)),React.createElement("div",{className:"bif-form-field"},React.createElement("label",null,"Phone *"),React.createElement("input",{type:"tel",value:e.phone,onChange:e=>t("phone",e.target.value),placeholder:"Enter your phone number",className:a.phone?"bif-error":""}),a.phone&&React.createElement("div",{className:"bif-field-error"},a.phone))),(n||r)&&React.createElement("div",{className:"bif-form-row"},n&&React.createElement("div",{className:"bif-form-field"},React.createElement("label",null,"Postcode"),React.createElement("input",{type:"text",value:e.postcode,onChange:e=>t("postcode",e.target.value),placeholder:"Enter your postcode"})),r&&React.createElement("div",{className:"bif-form-field"},React.createElement("label",null,"Suburb"),React.createElement("input",{type:"text",value:e.suburb,onChange:e=>t("suburb",e.target.value),placeholder:"Enter your suburb"}))),i&&React.createElement("div",{className:"bif-form-row bif-full-width"},React.createElement("div",{className:"bif-form-field"},React.createElement("label",null,"Comments"),React.createElement("textarea",{value:e.comments,onChange:e=>t("comments",e.target.value),rows:4,placeholder:"Any special requests or comments..."}))))),P=({summary:t,propertyIds:a,userDetails:r,paymentType:n,giftCertificate:i})=>{const o=(0,g.useStripe)(),c=(0,g.useElements)(),[l,s]=(0,e.useState)(!1),[u,m]=(0,e.useState)(""),[p,d]=(0,e.useState)(!1),[f,b]=(0,e.useState)(""),y=async e=>{e.preventDefault(),s(!0),m("");try{let e={amount:"deposit"===n?t.order_deposit_amount:t.order_payable_now,currency:t?.order_currency||"AUD",summary:t,propertyIds:"string"==typeof a?a.split(",").map((e=>parseInt(e.trim()))):a,userDetails:r,paymentType:n};if("gift"===n&&i)e.giftCertificateApplied=!0,e.giftCertificate=i,e.amount=0;else{if(!o||!c)return void console.error("Stripe.js has not loaded yet.");const t=c.getElement(g.CardElement),{paymentMethod:a,error:r}=await o.createPaymentMethod({type:"card",card:t});if(r)return console.error(r),m(r.message),void s(!1);e.stripePaymentMethodId=a.id,i&&i.valid&&(e.giftCertificateApplied=!0,e.giftCertificate=i)}const l=await fetch(`${v}/bookitfast/v1/process-payment`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(e)}),u=await l.json();if(!u.success)throw new Error(u.message||"Payment failed.");console.log("Payment successful:",u),b(u.data.charge),d(!0)}catch(e){console.error("Payment error:",e),m(e.message)}finally{s(!1)}};return React.createElement("div",{className:"bif-payment-container"},React.createElement("h3",null,"gift"===n?"🎁 Gift Certificate Payment":"💳 Payment Details"),u&&React.createElement("div",{className:"bif-error-message"},u),p?React.createElement("div",{className:"bif-success-message"},React.createElement("p",null,React.createElement("strong",null,"✅ Payment Successful!")),f&&React.createElement("p",null,React.createElement("a",{href:f,target:"_blank",rel:"noopener noreferrer"},"📄 Click here to view your receipt"))):"gift"===n?React.createElement("div",{className:"bif-gift-certificate-payment-form"},React.createElement("div",{className:"bif-gift-certificate-summary"},React.createElement("p",null,"🎁 ",React.createElement("strong",null,"Paying with Gift Certificate")),React.createElement("p",null,"Amount: ",React.createElement("strong",null,"$",parseFloat(i.gc_amount_applied||0).toFixed(2))),React.createElement("p",null,"No credit card required - your gift certificate will be charged automatically.")),React.createElement("button",{onClick:y,disabled:l,className:"bif-btn bif-btn-primary bif-btn-large"},l?"Processing...":"Complete Booking")):React.createElement("form",{onSubmit:y,className:"bif-stripe-form"},React.createElement("div",{className:"bif-card-element-container"},React.createElement(g.CardElement,{options:{hidePostalCode:!0,style:{base:{fontSize:"16px",color:"#424770","::placeholder":{color:"#aab7c4"}},invalid:{color:"#9e2146"}}}})),React.createElement("button",{type:"submit",disabled:!o||l,className:"bif-btn bif-btn-primary bif-btn-large"},l?"Processing...":"Pay Now")))},O=({propertyIds:t="",showDiscount:a=!1,showSuburb:r=!0,showPostcode:n=!0,showRedeemGiftCertificate:i=!1,showComments:o=!1,buttonColor:c="#0073aa",buttonTextColor:l="#ffffff",minNights:s=1,maxNights:u=14,showPropertyImages:m=!1,includeIcons:p=!1,layoutStyle:d="cards",buttonIcon:f="search",searchLayout:b="default"})=>{const y=R("nights"),O=y&&!isNaN(y)?Math.max(parseInt(y,10),s):s,T=R("start"),j=R("discount"),D=T?(e=>{const t=e.split("-");if(3===t.length){const[e,a,r]=t.map(Number);if(!isNaN(e)&&!isNaN(a)&&!isNaN(r)){const t=new Date(r,a-1,e);return t.setHours(12,0,0,0),t.toISOString().split("T")[0]}}return null})(T):"",A="string"==typeof t?t:"",[I,F]=(0,e.useState)({date:D,nights:O}),[$,B]=(0,e.useState)(null),[G,L]=(0,e.useState)({}),[U,M]=(0,e.useState)(null),[q,Y]=(0,e.useState)(null),[W,z]=(0,e.useState)(!1),[H,J]=(0,e.useState)(""),[K,Q]=(0,e.useState)({firstName:"",lastName:"",phone:"",email:"",postcode:"",suburb:"",comments:""}),[Z,V]=(0,e.useState)(!1),[X,ee]=(0,e.useState)(!1),[te,ae]=(0,e.useState)(j),[re,ne]=(0,e.useState)(null),[ie,oe]=(0,e.useState)(!1),[ce,le]=(0,e.useState)(null),[se,ue]=(0,e.useState)({}),[me,pe]=(0,e.useState)({number:"",pin:""}),[de,fe]=(0,e.useState)(!1),[be,ye]=(0,e.useState)(null),[he,ge]=(0,e.useState)(!1),[Ee,ve]=(0,e.useState)({}),[Re,_e]=(0,e.useState)(!1),[Ne,Ce]=(0,e.useState)({isOpen:!1,title:"",content:""});(0,e.useEffect)((()=>{D&&O&&(console.log("Auto-checking availability with:",D,O),ke(D,O))}),[D,O]);const ke=async(e=I.date,t=I.nights)=>{if(!e||!A)return void console.warn("fetchAvailability skipped - Missing startDate or propertyIds");const a=I.date,r=A.split(",").filter((e=>""!==e.trim()));z(!0),J(""),_e(!1);try{const e=await fetch(`${v}/bookitfast/v1/availability`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({ids:r,start:a,nights:t})}),n=await e.json();B(n),_e(!0);const i=Object.keys(n).reduce(((e,t)=>(e[t]=!1,e)),{});L(i)}catch(e){console.error(e),J("Failed to fetch availability. Please try again.")}finally{z(!1)}},we=(e,t)=>{ve((a=>{const r=a[e]||{},n={...a,[e]:{...r,[t]:!r[t]}};return Se(G,te,n,0),n}))},Se=async(e,t=null,a=Ee,r=0)=>{const n=I.date,i=I.nights,o=new Date(new Date(n).getTime()+864e5*i).toISOString().split("T")[0];z(!0),J("");try{const r=await fetch(`${v}/bookitfast/v1/availability/summary`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({selected:e,selected_optional_extras:a,start:n,end:o,discount_code:t||null})});if(!r.ok)throw new Error(`HTTP error! status: ${r.status}`);const i=await r.json();Y(i),i.stripe_publishable_key&&M(h(i.stripe_publishable_key))}catch(n){console.error("Error fetching summary:",n),r<3?(console.log(`Retrying... Attempt ${r+1}`),await Se(e,t,a,r+1)):J("Failed to fetch summary. Please try again.")}finally{z(!1)}},xe=e=>{(()=>{const e={};return K.firstName.trim()||(e.firstName="First name is required"),K.lastName.trim()||(e.lastName="Last name is required"),K.email.trim()||(e.email="Email is required"),K.phone.trim()||(e.phone="Phone is required"),Z||(e.agreeToTerms="You must agree to the terms and conditions"),X||(e.consentToDataSharing="You must consent to data sharing with Book It Fast service"),ue(e),0===Object.keys(e).length})()&&(le(e),oe(!0))},Pe=$?Object.entries($).filter((([e])=>G[e])).map((([e,t])=>({id:e,...t,...q?.property_summaries?.[e]||{},selectedExtras:Ee[e],onToggleExtra:we}))):[];return React.createElement("div",{className:"bif-booking-container",style:{"--bif-button-color":c,"--bif-button-color-hover":`${c}dd`,"--bif-button-color-active":`${c}bb`,"--bif-button-text-color":l}},React.createElement("div",{className:"bif-booking-steps"},React.createElement(k,{checkInDate:I.date,nights:I.nights,onDateChange:e=>F((t=>({...t,date:e}))),onNightsChange:e=>F((t=>({...t,nights:e}))),onCheckAvailability:ke,isLoading:W,minNights:s,maxNights:u,buttonIcon:f,searchLayout:b}),H&&React.createElement("div",{className:"bif-error-message"},H),Re&&$&&React.createElement("div",{className:"bif-property-list"},React.createElement("h2",{className:"bif-section-title"},"Available Properties"),React.createElement("div",{className:`bif-properties bif-properties--${d}`},Object.entries($).map((([e,t])=>{const a={key:e,property:{id:e,...t,selectedExtras:Ee[e],onToggleExtra:we},isSelected:G[e],onToggle:()=>(async e=>{const t={...G,[e]:!G[e]};L(t),Object.values(t).includes(!0)?await Se(t,te):Y(null)})(e),nights:I.nights,checkInDate:I.date,showPropertyImages:m,includeIcons:p};switch(d){case"grid":return React.createElement(_,a);case"rows":return React.createElement(N,a);default:return React.createElement(C,a)}})))),q&&Pe.length>0&&React.createElement(w,{selectedProperties:Pe,selectedExtras:Ee,nights:I.nights,total:(q.order_payable_now||0)-(q.order_surcharge||0),discountCode:te,onDiscountCodeChange:ae,onApplyDiscount:e=>{Object.keys(G).some((e=>G[e]))&&Se(G,e)},checkInDate:I.date,summary:q,showDiscount:a,showRedeemGiftCertificate:i,giftCertificate:me,onGiftCertificateChange:pe,showGiftCertificateForm:de,onTriggerShowGiftCertificate:()=>{fe(!0)},onApplyGiftCertificate:async e=>{if(e.preventDefault(),console.log("Gift Certificate: Apply button clicked"),console.log("Gift Certificate Data:",me),console.log("Current Summary:",q),he)return void console.log("Gift Certificate: Already processing, ignoring click");if(!q)return void console.error("Gift Certificate: No summary available");if(!me.number||!me.pin)return console.error("Gift Certificate: Missing number or pin"),void alert("Please enter both certificate number and pin");ge(!0),console.log("Gift Certificate: Setting loading state to true");let t={...q};if(q.order_weekly_discount>0){console.log("Gift Certificate: Weekly discount detected, adjusting summary for gift certificate calculation"),console.log("Gift Certificate: Original order_grand_total:",q.order_grand_total),console.log("Gift Certificate: Order weekly discount:",q.order_weekly_discount),console.log("Gift Certificate: Order surcharge:",q.order_surcharge);const e=parseFloat(q.order_sub_total)+parseFloat(q.order_mandatory_extras_total);console.log("Gift Certificate: Total before weekly discount (excluding surcharge):",e),t={...q,order_grand_total:e.toString(),order_total_before_surcharge:e,order_payable_now:e.toString(),order_surcharge:0,order_has_surcharge:!1},console.log("Gift Certificate: Adjusted summary for gift certificate:",t)}const a={certificate:me,summary:t};console.log("Gift Certificate: Sending request with data:",a);try{const e=await fetch(`${v}/bookitfast/v1/apply-gift-certificate`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(a)});if(console.log("Gift Certificate: Response status:",e.status),!e.ok)throw new Error(`HTTP error! status: ${e.status}`);const t=await e.json();console.log("Gift Certificate: Response data:",t),t.valid?(ye(t),t.summary&&(Y(t.summary),console.log("Gift Certificate: Updated summary:",t.summary)),console.log("Gift Certificate: Application successful"),console.log("Gift Certificate: Order payable now:",t.order_payable_now)):(console.error("Gift Certificate: API returned error:",t),alert(t.message||"Failed to apply gift certificate"))}catch(e){console.error("Gift Certificate: Error applying certificate:",e),alert("Error applying gift certificate. Please try again.")}finally{ge(!1),console.log("Gift Certificate: Setting loading state to false")}},gcResult:be,gcLoading:he}),q&&Pe.length>0&&React.createElement(x,{userDetails:K,onUpdateDetails:(e,t)=>{Q((a=>({...a,[e]:t}))),se[e]&&ue((t=>({...t,[e]:null})))},formErrors:se,showSuburb:r,showPostcode:n,showComments:o}),q&&Pe.length>0&&React.createElement("div",{className:"bif-terms-payment"},React.createElement("div",{className:"bif-terms-checkbox"},React.createElement("input",{type:"checkbox",id:"agreeToTerms",checked:Z,onChange:()=>V(!Z)}),React.createElement("label",{htmlFor:"agreeToTerms"},"I have read and agree to the"," ",q.order_booking_conditions?.map(((e,t)=>React.createElement("span",{key:t},"local"===e.type?React.createElement("a",{href:"#",onClick:t=>{t.preventDefault(),Ce({isOpen:!0,title:e.title,content:e.content})},style:{textDecoration:"underline",cursor:"pointer"}},e.title):React.createElement("a",{href:e.url,target:"_blank",rel:"noopener noreferrer"},e.title),t<q.order_booking_conditions.length-2?", ":"",t===q.order_booking_conditions.length-2?" and ":"")))),se.agreeToTerms&&React.createElement("div",{className:"bif-field-error"},se.agreeToTerms)),React.createElement("div",{className:"bif-privacy-consent"},React.createElement("input",{type:"checkbox",id:"consentToDataSharing",checked:X,onChange:()=>ee(!X)}),React.createElement("label",{htmlFor:"consentToDataSharing"},"I consent to my personal information being transmitted to and processed by Book It Fast (",React.createElement("a",{href:"https://bookitfast.app/privacy-policy",target:"_blank",rel:"noopener noreferrer"},"Privacy Policy"),") for booking and payment processing purposes."),se.consentToDataSharing&&React.createElement("div",{className:"bif-field-error"},se.consentToDataSharing)),!ie&&React.createElement("div",{className:"bif-payment-options"},Object.keys(se).length>0&&React.createElement("div",{className:"bif-validation-error"},"Please complete all required fields before proceeding with payment."),be&&be.valid&&parseFloat(be.total)-parseFloat(be.gc_amount_applied)==0?React.createElement("div",{className:"bif-gift-certificate-payment"},React.createElement("div",{className:"bif-gift-certificate-full-coverage"},React.createElement("p",null,"🎉 ",React.createElement("strong",null,"Your gift certificate covers the full booking amount!")),React.createElement("p",null,"No additional payment required.")),React.createElement("button",{className:"bif-btn bif-btn-primary bif-btn-large",onClick:()=>xe("gift")},"🎁 Complete Booking with Gift Certificate")):React.createElement(React.Fragment,null,q.order_surcharge>0&&parseFloat(q.order_payable_now||0)>0&&React.createElement("div",{className:"bif-surcharge-info"},React.createElement("p",null,"Please note a credit card surcharge applies of ",q.order_deposit_surcharge>0&&` $${q.order_deposit_surcharge} for deposit or `,"$",q.order_surcharge," for the full payment.")),q.order_deposit_amount>0?React.createElement("div",{className:"bif-payment-buttons"},React.createElement("button",{className:"bif-btn bif-btn-primary",onClick:()=>xe("deposit")},"💳 Pay Deposit (",E(q?.order_currency||"AUD"),q.order_deposit_amount,")"),React.createElement("button",{className:"bif-btn bif-btn-primary",onClick:()=>xe("full")},"💳 Pay In Full (",E(q?.order_currency||"AUD"),be&&be.valid?parseFloat(be.order_payable_now).toFixed(2):q.order_payable_now,")")):React.createElement("button",{className:"bif-btn bif-btn-primary bif-btn-large",onClick:()=>xe("full")},"💳 Complete Booking - ",E(q?.order_currency||"AUD"),be&&be.valid?parseFloat(be.order_payable_now).toFixed(2):q.order_payable_now)))),q&&ie&&React.createElement("div",{className:"bif-payment-form-container"},"gift"===ce?React.createElement(P,{summary:q,propertyIds:A.split(",").map((e=>parseInt(e.trim()))),userDetails:K,paymentType:ce,giftCertificate:be}):U&&React.createElement(g.Elements,{stripe:U},React.createElement(P,{summary:q,propertyIds:A.split(",").map((e=>parseInt(e.trim()))),userDetails:K,paymentType:ce,giftCertificate:be})))),React.createElement(S,{isOpen:Ne.isOpen,onClose:()=>Ce({isOpen:!1,title:"",content:""}),title:Ne.title,content:Ne.content}))};document.addEventListener("DOMContentLoaded",(()=>{const e=document.getElementById("bif-book-it-fast-multi-embed");if(e){const a=e.dataset.propertyIds||"",r="true"===e.dataset.showDiscount,n="true"===e.dataset.showSuburb,o="true"===e.dataset.showPostcode,c="true"===e.dataset.showRedeemGiftCertificate,l="true"===e.dataset.showComments,s=e.dataset.buttonColor||"#0073aa",u=e.dataset.buttonTextColor||"#ffffff",m=parseInt(e.dataset.minNights)||1,p=parseInt(e.dataset.maxNights)||14,d="true"===e.dataset.showPropertyImages,f="true"===e.dataset.includeIcons,b=e.dataset.layoutStyle||"cards",y=e.dataset.buttonIcon||"search",h=e.dataset.searchLayout||"default";i().render(t().createElement(O,{propertyIds:a,showDiscount:r,showSuburb:n,showPostcode:o,showRedeemGiftCertificate:c,showComments:l,buttonColor:s,buttonTextColor:u,minNights:m,maxNights:p,showPropertyImages:d,includeIcons:f,layoutStyle:b,buttonIcon:y,searchLayout:h}),e)}}))})()})();
Note: See TracChangeset for help on using the changeset viewer.