PageSourceSearch

https://www.rheem.com/vike/assets/chunks/chunk-AiNX_yKA.js

js rheem.com collected 2026-09-24 10:19:51 UTC 49,158 bytes, 1,094 lines download raw bytes

1import { j as defineComponent, _ as _export_sfc, o as openBlock, e as createElementBlock, F as Fragment, x as renderList, q as createVNode, c as computed, v as normalizeClass, f as createBaseVNode, n as normalizeStyle, z as createBlock, h as toDisplayString, u as usePageContext, l as toValue, r as ref, A as withCtx, I as createTextVNode, J as withModifiers, y as createCommentVNode, aj as watchEffect, k as onMounted } from "./chunk-Cy-M6TJt.js";
2import { r as round, j as consumeFindAProProfileNavigation, k as isFindAProResultsReferrer, l as FIND_A_PRO_RETURN_KEY, a as getContractorPhoneNumber, h as hasBookNow, i as isProProfileVisible, s as shouldShowContractorRatings } from "./chunk-zmiQUxkT.js";
3import { C as ContractorProfileSchedule } from "./chunk-Ch7vcZ-e.js";
4import { u as useQuery } from "./chunk-Vr0xDQgr.js";
5import { a as getContractorRatingSiteReviews, b as getContractorLocatorSummary, c as getContractorProProfile, d as getContractorRatingSiteSummary } from "./chunk-BB04vi68.js";
6import { p as parseNumbers, C as ContractorProfileCertifications } from "./chunk-C8arQODs.js";
7import { c as classNames, R as RmcButton } from "./chunk-B7DFmrmH.js";
8import { R as RmcCheckmarkText } from "./chunk-Cj57D2wK.js";
9import { f as formatDate } from "./chunk-DGioMSJG.js";
10import { R as RmcPagination } from "./chunk-Bv1NtE3C.js";
11import { u as useI18n } from "./chunk-DUNv5myb.js";
12import { C as ClientOnly } from "./chunk-QukBD2Rw.js";
13import { R as RmcIcon } from "./chunk-Bov-RE3A.js";
14import { R as RmcBreadcrumbs } from "./chunk-Bx8u2xDv.js";
15import { u as useData } from "./chunk-Ch88nc1G.js";
16import { u as useRegion } from "./chunk-Clb5_Slq.js";
17import { g as getContractorEditUrl } from "./chunk-B6g45iIm.js";
18const _sfc_main$b = /* @__PURE__ */ defineComponent({
19  __name: "ContractorProfileServicesOffered",
20  props: {
21    data: {}
22  },
23  setup(__props, { expose: __expose }) {
24    var _a;
25    __expose();
26    const props = __props;
27    const cleanedServiceNames = (_a = props == null ? void 0 : props.data) == null ? void 0 : _a.map(
28      (str) => str.replace(/[^a-zA-Z0-9 &-]/g, "")
29    );
30    const __returned__ = { props, cleanedServiceNames, RmcCheckmarkText };
31    Object.defineProperty(__returned__, "__isScriptSetup", { enumerable: false, value: true });
32    return __returned__;
33  }
34});
35const _hoisted_1$b = { class: "row row-cols-1 row-cols-md-2 row-cols-xl-5 rmc-gy-xl" };
36const _hoisted_2$a = { class: "col" };
37function _sfc_render$b(_ctx, _cache, $props, $setup, $data, $options) {
38  return openBlock(), createElementBlock("div", _hoisted_1$b, [
39    (openBlock(true), createElementBlock(Fragment, null, renderList($setup.cleanedServiceNames, (item) => {
40      return openBlock(), createElementBlock("div", _hoisted_2$a, [
41        createVNode($setup["RmcCheckmarkText"], { text: item }, null, 8, ["text"])
42      ]);
43    }), 256))
44  ]);
45}
46const ContractorProfileServicesOffered = /* @__PURE__ */ _export_sfc(_sfc_main$b, [["render", _sfc_render$b], ["__file", "ContractorProfileServicesOffered.vue"]]);
47const _sfc_main$a = /* @__PURE__ */ defineComponent({
48  __name: "ContractorProfileMoreBusinessInfo",
49  props: {
50    data: {},
51    contractorCountry: {}
52  },
53  setup(__props, { expose: __expose }) {
54    __expose();
55    const props = __props;
56    const businessInfoItems = computed((v) => {
57      if (!props.data) {
58        return [];
59      }
60      const result = [];
61      if (hasCreditCard(props.data)) {
62        result.push("Accepts credit cards");
63      }
64      if (props.data.IsAcceptChecks) {
65        result.push("Accept personal checks");
66      }
67      if (props.data.IsAcceptApplePay) {
68        result.push("Accept Apple Pay");
69      }
70      if (props.data.IsAcceptGooglePay) {
71        result.push("Accept Google Pay");
72      }
73      if (props.data.IsAcceptPayPal) {
74        result.push("Accept PayPal");
75      }
76      if (props.data.IsAcceptCrypto) {
77        result.push("Accept Crypto Currency");
78      }
79      if (props.data.IsOfferMilitaryDiscount) {
80        result.push("Offer a Military Discount");
81      }
82      if (props.data.IsVeteranOwned) {
83        result.push("We are Veteran Owned");
84      }
85      if (props.data.IsByAppointmentOnly) {
86        result.push("Appointment Only");
87      }
88      if (props.data.IsLicensed) {
89        result.push("Licensed");
90      }
91      if (props.data.IsInsured) {
92        result.push("Insured");
93      }
94      if (props.data.IsBonded) {
95        if (props.contractorCountry === "CA") {
96          result.push("Financing available");
97        } else {
98          result.push("Bonded");
99        }
100      }
101      return result;
102    });
103    function hasCreditCard(value) {
104      return value.IsAcceptCreditCards || value.IsAcceptChecks || value.IsAcceptApplePay || value.IsAcceptGooglePay || value.IsAcceptPayPal || value.IsAcceptCrypto || value.IsOfferMilitaryDiscount || value.IsVeteranOwned || value.IsByAppointmentOnly || value.IsLicensed || value.IsInsured || value.IsBonded;
105    }
106    const __returned__ = { props, businessInfoItems, hasCreditCard, RmcCheckmarkText };
107    Object.defineProperty(__returned__, "__isScriptSetup", { enumerable: false, value: true });
108    return __returned__;
109  }
110});
111const _hoisted_1$a = { class: "row row-cols-1 row-cols-md-2 row-cols-xl-5 rmc-gy-xl" };
112const _hoisted_2$9 = { class: "col" };
113function _sfc_render$a(_ctx, _cache, $props, $setup, $data, $options) {
114  return openBlock(), createElementBlock("div", _hoisted_1$a, [
115    (openBlock(true), createElementBlock(Fragment, null, renderList($setup.businessInfoItems, (item) => {
116      return openBlock(), createElementBlock("div", _hoisted_2$9, [
117        createVNode($setup["RmcCheckmarkText"], { text: item }, null, 8, ["text"])
118      ]);
119    }), 256))
120  ]);
121}
122const ContractorProfileMoreBusinessInfo = /* @__PURE__ */ _export_sfc(_sfc_main$a, [["render", _sfc_render$a], ["__file", "ContractorProfileMoreBusinessInfo.vue"]]);
123const _sfc_main$9 = /* @__PURE__ */ defineComponent({
124  __name: "RmcStarBar",
125  props: {
126    value: {},
127    size: { default: "md" }
128  },
129  setup(__props, { expose: __expose }) {
130    __expose();
131    const starClassNames = classNames(
132      "rmc-rating-star",
133      `rmc-rating-star_${__props.size || "md"}`
134    );
135    const filledStarsCount = Math.floor(__props.value);
136    const lastStarPercent = computed(() => (__props.value - filledStarsCount) * 100);
137    const starsPercent = new Array(5).fill(null).map((v, i) => {
138      if (i <= filledStarsCount - 1) {
139        return 100;
140      }
141      if (i === 4) {
142        return lastStarPercent.value;
143      }
144      return 0;
145    });
146    const __returned__ = { starClassNames, filledStarsCount, lastStarPercent, starsPercent };
147    Object.defineProperty(__returned__, "__isScriptSetup", { enumerable: false, value: true });
148    return __returned__;
149  }
150});
151const _hoisted_1$9 = { class: "rmc-rating-overall__rating" };
152function _sfc_render$9(_ctx, _cache, $props, $setup, $data, $options) {
153  return openBlock(), createElementBlock("div", _hoisted_1$9, [
154    (openBlock(true), createElementBlock(Fragment, null, renderList($setup.starsPercent, (item) => {
155      return openBlock(), createElementBlock("div", {
156        class: normalizeClass($setup.starClassNames)
157      }, [
158        createBaseVNode("div", {
159          class: "rmc-rating-star__full",
160          style: normalizeStyle(`width: ${item}%`)
161        }, null, 4),
162        _cache[0] || (_cache[0] = createBaseVNode("div", { class: "rmc-rating-star__outline" }, null, -1))
163      ], 2);
164    }), 256))
165  ]);
166}
167const RmcStarBar = /* @__PURE__ */ _export_sfc(_sfc_main$9, [["render", _sfc_render$9], ["__file", "RmcStarBar.vue"]]);
168const _sfc_main$8 = /* @__PURE__ */ defineComponent({
169  __name: "ContractorProfileRatingOverall",
170  props: {
171    ratingValue: {}
172  },
173  setup(__props, { expose: __expose }) {
174    __expose();
175    const __returned__ = { get round() {
176      return round;
177    }, RmcStarBar };
178    Object.defineProperty(__returned__, "__isScriptSetup", { enumerable: false, value: true });
179    return __returned__;
180  }
181});
182const _hoisted_1$8 = { class: "rmc-rating-overall" };
183const _hoisted_2$8 = { class: "rmc-rating-overall__overall-rating" };
184function _sfc_render$8(_ctx, _cache, $props, $setup, $data, $options) {
185  return openBlock(), createElementBlock("div", _hoisted_1$8, [
186    (openBlock(), createBlock($setup["RmcStarBar"], {
187      key: $props.ratingValue,
188      value: $props.ratingValue
189    }, null, 8, ["value"])),
190    createBaseVNode("div", _hoisted_2$8, toDisplayString($setup.round($props.ratingValue)) + " Overall ", 1),
191    _cache[0] || (_cache[0] = createBaseVNode("div", { class: "rmc-rating-overall__count" }, null, -1))
192  ]);
193}
194const ContractorProfileRatingOverall = /* @__PURE__ */ _export_sfc(_sfc_main$8, [["render", _sfc_render$8], ["__file", "ContractorProfileRatingOverall.vue"]]);
195const _sfc_main$7 = /* @__PURE__ */ defineComponent({
196  __name: "RmcRatingBar",
197  props: {
198    label: {},
199    value: {},
200    max: {}
201  },
202  setup(__props, { expose: __expose }) {
203    __expose();
204    const percent = computed(() => round(__props.value / __props.max * 100));
205    const __returned__ = { percent };
206    Object.defineProperty(__returned__, "__isScriptSetup", { enumerable: false, value: true });
207    return __returned__;
208  }
209});
210const _hoisted_1$7 = { class: "rmc-rating-bar w-100" };
211const _hoisted_2$7 = { class: "rmc-rating-bar__stars" };
212const _hoisted_3$5 = { class: "rmc-rating-bar__progress-bar w-auto" };
213const _hoisted_4$4 = { class: "rmc-rating-bar__count" };
214function _sfc_render$7(_ctx, _cache, $props, $setup, $data, $options) {
215  return openBlock(), createElementBlock("div", _hoisted_1$7, [
216    createBaseVNode("div", _hoisted_2$7, toDisplayString($props.label), 1),
217    createBaseVNode("div", _hoisted_3$5, [
218      createBaseVNode("div", {
219        class: "rmc-rating-bar__progress",
220        style: normalizeStyle(`width: ${$setup.percent}%`)
221      }, null, 4)
222    ]),
223    createBaseVNode("div", _hoisted_4$4, toDisplayString($props.value), 1)
224  ]);
225}
226const RmcRatingBar = /* @__PURE__ */ _export_sfc(_sfc_main$7, [["render", _sfc_render$7], ["__file", "RmcRatingBar.vue"]]);
227const _sfc_main$6 = /* @__PURE__ */ defineComponent({
228  __name: "ContractorProfileRatingBlock",
229  props: {
230    title: {},
231    items: {}
232  },
233  setup(__props, { expose: __expose }) {
234    __expose();
235    const max = computed(() => Math.max(...__props.items.map((v) => v.value)));
236    const __returned__ = { max, RmcRatingBar };
237    Object.defineProperty(__returned__, "__isScriptSetup", { enumerable: false, value: true });
238    return __returned__;
239  }
240});
241const _hoisted_1$6 = { class: "rmc-rating-block" };
242const _hoisted_2$6 = { class: "rmc-rating-block__title" };
243const _hoisted_3$4 = { class: "rmc-rating-block__bars w-100" };
244function _sfc_render$6(_ctx, _cache, $props, $setup, $data, $options) {
245  return openBlock(), createElementBlock("div", _hoisted_1$6, [
246    createBaseVNode("div", _hoisted_2$6, toDisplayString($props.title), 1),
247    createBaseVNode("div", _hoisted_3$4, [
248      (openBlock(true), createElementBlock(Fragment, null, renderList($props.items, ({ label, value }) => {
249        return openBlock(), createBlock($setup["RmcRatingBar"], {
250          label,
251          value,
252          max: $setup.max
253        }, null, 8, ["label", "value", "max"]);
254      }), 256))
255    ])
256  ]);
257}
258const ContractorProfileRatingBlock = /* @__PURE__ */ _export_sfc(_sfc_main$6, [["render", _sfc_render$6], ["__file", "ContractorProfileRatingBlock.vue"]]);
259const useSiteReviews = (id2, page, sort = "asc") => {
260  const pageContext = usePageContext();
261  const language = pageContext.gtLang;
262  return useQuery({
263    queryKey: ["contractor-reviews", id2, page, sort, language],
264    queryFn: async () => {
265      const currentPage = toValue(page) || 1;
266      return (await getContractorRatingSiteReviews(toValue(id2), {
267        top: 10,
268        skip: (currentPage - 1) * 10,
269        sortColumn: "SubmissionDate",
270        sortOrder: toValue(sort)
271      })).data;
272    }
273  });
274};
275const _sfc_main$5 = /* @__PURE__ */ defineComponent({
276  __name: "ContractorProfileReviewItem",
277  props: {
278    data: {}
279  },
280  setup(__props, { expose: __expose }) {
281    __expose();
282    const __returned__ = { RmcStarBar, get formatDate() {
283      return formatDate;
284    } };
285    Object.defineProperty(__returned__, "__isScriptSetup", { enumerable: false, value: true });
286    return __returned__;
287  }
288});
289const _hoisted_1$5 = { class: "d-flex rmc-py-3xl rmc-gap-xl" };
290const _hoisted_2$5 = { class: "d-flex flex-column rmc-gap-3xl flex-grow-1" };
291const _hoisted_3$3 = { class: "d-flex flex-column" };
292const _hoisted_4$3 = { class: "d-flex justify-content-between rmc-gap-xl" };
293const _hoisted_5$3 = { class: "rmc-ty-text-md fw-bold" };
294const _hoisted_6$3 = { class: "rmc-ty-text-xs fw-light" };
295const _hoisted_7$3 = { class: "d-flex col-auto flex-column flex-xl-row rmc-gap-xxs rmc-gap-xl-2xl" };
296const _hoisted_8$3 = { class: "d-flex rmc-gap-3xl" };
297const _hoisted_9$3 = { class: "rmc-rating-overall" };
298const _hoisted_10$2 = { class: "rmc-rating-overall__reviewer fw-normal fw-xl-bold" };
299const _hoisted_11$2 = { class: "rmc-rating-overall__count" };
300const _hoisted_12$2 = { class: "rmc-ty-text-sm fw-light" };
301function _sfc_render$5(_ctx, _cache, $props, $setup, $data, $options) {
302  return openBlock(), createElementBlock("div", _hoisted_1$5, [
303    _cache[0] || (_cache[0] = createBaseVNode("div", null, [
304      createBaseVNode("div", {
305        class: "rounded-circle rmc-height-7xl rmc-width-7xl",
306        style: { "background": "salmon" }
307      })
308    ], -1)),
309    createBaseVNode("div", _hoisted_2$5, [
310      createBaseVNode("div", _hoisted_3$3, [
311        createBaseVNode("div", _hoisted_4$3, [
312          createBaseVNode("div", null, [
313            createBaseVNode("div", _hoisted_5$3, toDisplayString($props.data.HomeOwnerName), 1),
314            createBaseVNode("div", _hoisted_6$3, toDisplayString($setup.formatDate($props.data.SubmissionDate)), 1)
315          ]),
316          createBaseVNode("div", _hoisted_7$3, [
317            (openBlock(true), createElementBlock(Fragment, null, renderList($props.data.ContractorRatingQualities, (quality) => {
318              return openBlock(), createElementBlock("div", _hoisted_8$3, [
319                createBaseVNode("div", _hoisted_9$3, [
320                  createBaseVNode("div", _hoisted_10$2, toDisplayString(quality.Quality), 1),
321                  createVNode($setup["RmcStarBar"], {
322                    class: "d-none d-xl-flex",
323                    value: quality.QualityRating,
324                    size: "sm"
325                  }, null, 8, ["value"]),
326                  createBaseVNode("div", _hoisted_11$2, toDisplayString(quality.QualityRating), 1)
327                ])
328              ]);
329            }), 256))
330          ])
331        ])
332      ]),
333      createBaseVNode("div", _hoisted_12$2, toDisplayString($props.data.Response), 1)
334    ])
335  ]);
336}
337const ContractorProfileReviewItem = /* @__PURE__ */ _export_sfc(_sfc_main$5, [["render", _sfc_render$5], ["__file", "ContractorProfileReviewItem.vue"]]);
338function usePaginationState(pagesTotal) {
339  const page = ref(1);
340  const handlePrevPage = () => {
341    if (page.value > 1) {
342      page.value--;
343    }
344  };
345  const handleNextPage = () => {
346    if (page.value < toValue(pagesTotal)) {
347      page.value++;
348    }
349  };
350  return { handleNextPage, handlePrevPage, page };
351}
352const _sfc_main$4 = /* @__PURE__ */ defineComponent({
353  __name: "ContractorProfileReviews",
354  props: {
355    data: {}
356  },
357  setup(__props, { expose: __expose }) {
358    __expose();
359    const props = __props;
360    const pagesTotal = computed((oldValue) => {
361      var _a, _b;
362      if (toValue(isFetching)) {
363        return oldValue;
364      }
365      if ((_a = reviews.value) == null ? void 0 : _a.recordsTotal) {
366        return Math.ceil(((_b = reviews.value) == null ? void 0 : _b.recordsTotal) / 10);
367      }
368      return 0;
369    });
370    const { page, handlePrevPage, handleNextPage } = usePaginationState(pagesTotal);
371    const { t } = useI18n();
372    const sort = ref("desc");
373    const sortLabels = computed(() => ({
374      desc: t("findAPro.reviews.sortBy.mostRecent"),
375      asc: t("findAPro.reviews.sortBy.oldest")
376    }));
377    const sortLabel = computed(() => sortLabels.value[sort.value]);
378    const {
379      data: reviews,
380      isFetching,
381      isLoadingError
382    } = useSiteReviews(props.data.OrganizationID, page, sort);
383    const pageContext = usePageContext();
384    const language = pageContext.gtLang;
385    const { data: locatorSummary } = useQuery({
386      queryKey: ["contractor-locator-summary", props.data.OrganizationID, language],
387      queryFn: async () => props.data.OrganizationID ? (await getContractorLocatorSummary(props.data.OrganizationID)).data : null,
388      enabled: !!props.data.OrganizationID
389    });
390    const reviewsSummary = computed(() => {
391      var _a;
392      return ((_a = locatorSummary.value) == null ? void 0 : _a.Reviews) || [];
393    });
394    const reviewsOverall = computed(() => {
395      var _a;
396      const reviews2 = (_a = locatorSummary.value) == null ? void 0 : _a.Reviews;
397      if (Array.isArray(reviews2) && reviews2.length) {
398        return (reviews2 == null ? void 0 : reviews2.reduce((sum, item) => sum + item.RatingsAverage, 0)) / reviews2.length;
399      }
400      return 0;
401    });
402    const items = computed((oldValue) => {
403      var _a;
404      if (toValue(isFetching)) {
405        return oldValue;
406      }
407      return ((_a = toValue(reviews)) == null ? void 0 : _a.data) || [];
408    });
409    const handleChangeSort = () => {
410      if (sort.value === "asc") {
411        sort.value = "desc";
412      } else {
413        sort.value = "asc";
414      }
415    };
416    const __returned__ = { props, pagesTotal, page, handlePrevPage, handleNextPage, t, sort, sortLabels, sortLabel, reviews, isFetching, isLoadingError, pageContext, language, locatorSummary, reviewsSummary, reviewsOverall, items, handleChangeSort, ContractorProfileRatingOverall, ContractorProfileRatingBlock, ContractorProfileReviewItem, RmcPagination, RmcButton };
417    Object.defineProperty(__returned__, "__isScriptSetup", { enumerable: false, value: true });
418    return __returned__;
419  }
420});
421const _hoisted_1$4 = { class: "rmc-padding-4xl" };
422const _hoisted_2$4 = { class: "d-flex flex-column rmc-gap-lg rmc-mb-4xl" };
423const _hoisted_3$2 = {
424  id: "pills-tab",
425  role: "tablist",
426  class: "rmc-nav rmc-mb-xl rmc-nav-solid d-xl-none"
427};
428const _hoisted_4$2 = {
429  class: "rmc-nav-item",
430  role: "presentation"
431};
432const _hoisted_5$2 = {
433  href: "#",
434  "data-bs-toggle": "pill",
435  type: "button",
436  role: "tab",
437  "aria-selected": "true",
438  class: "rmc-nav-link active",
439  id: "pills-Professionalism-tab",
440  "data-bs-target": "#pills-Professionalism",
441  "aria-controls": "pills-Professionalism"
442};
443const _hoisted_6$2 = {
444  class: "rmc-nav-item",
445  role: "presentation"
446};
447const _hoisted_7$2 = {
448  href: "#",
449  "data-bs-toggle": "pill",
450  type: "button",
451  role: "tab",
452  "aria-selected": "true",
453  class: "rmc-nav-link",
454  id: "pills-Knowledge-tab",
455  "data-bs-target": "#pills-Knowledge",
456  "aria-controls": "pills-Knowledge"
457};
458const _hoisted_8$2 = {
459  class: "rmc-nav-item",
460  role: "presentation"
461};
462const _hoisted_9$2 = {
463  href: "#",
464  "data-bs-toggle": "pill",
465  type: "button",
466  role: "tab",
467  "aria-selected": "true",
468  class: "rmc-nav-link",
469  id: "pills-Installation-tab",
470  "data-bs-target": "#pills-Installation",
471  "aria-controls": "pills-Installation"
472};
473const _hoisted_10$1 = {
474  class: "tab-content",
475  id: "pills-tabContent"
476};
477const _hoisted_11$1 = { class: "row row-cols-1 row-cols-xl-3 rmc-mb-xl rmc-mb-xl-10xl rmc-gy-4xl" };
478const _hoisted_12$1 = {
479  class: "col tab-pane show active rmc-opacity-xl-100 d-xl-block",
480  role: "tabpanel",
481  tabindex: "0",
482  id: "pills-Professionalism"
483};
484const _hoisted_13$1 = { class: "rmc-mb-xl rmc-mb-xl-3xl d-flex justify-content-between align-items-center" };
485const _hoisted_14$1 = { class: "rmc-ty-text-sm fw-bold" };
486const _hoisted_15$1 = { key: 0 };
487const _hoisted_16$1 = { key: 0 };
488const _hoisted_17$1 = { key: 1 };
489function _sfc_render$4(_ctx, _cache, $props, $setup, $data, $options) {
490  var _a, _b, _c;
491  return openBlock(), createElementBlock("div", _hoisted_1$4, [
492    createBaseVNode("div", _hoisted_2$4, [
493      createVNode($setup["ContractorProfileRatingOverall"], { ratingV
493alue: $setup.reviewsOverall }, null, 8, ["ratingValue"])
494    ]),
495    createBaseVNode("div", null, [
496      createBaseVNode("ul", _hoisted_3$2, [
497        createBaseVNode("li", _hoisted_4$2, [
498          createBaseVNode("a", _hoisted_5$2, toDisplayString($setup.t("findAPro.reviews.professionalism")), 1)
499        ]),
500        createBaseVNode("li", _hoisted_6$2, [
501          createBaseVNode("a", _hoisted_7$2, toDisplayString($setup.t("findAPro.reviews.knowledge")), 1)
502        ]),
503        createBaseVNode("li", _hoisted_8$2, [
504          createBaseVNode("a", _hoisted_9$2, toDisplayString($setup.t("findAPro.reviews.installation")), 1)
505        ])
506      ]),
507      createBaseVNode("div", _hoisted_10$1, [
508        createBaseVNode("div", _hoisted_11$1, [
509          (openBlock(true), createElementBlock(Fragment, null, renderList($setup.reviewsSummary, (item) => {
510            return openBlock(), createElementBlock("div", _hoisted_12$1, [
511              createVNode($setup["ContractorProfileRatingBlock"], {
512                title: item.ReviewSourceName,
513                items: [
514                  { label: $setup.t("findAPro.reviews.stars.five"), value: item.FiveStar },
515                  { label: $setup.t("findAPro.reviews.stars.four"), value: item.FourStar },
516                  { label: $setup.t("findAPro.reviews.stars.three"), value: item.ThreeStar },
517                  { label: $setup.t("findAPro.reviews.stars.two"), value: item.TwoStar },
518                  { label: $setup.t("findAPro.reviews.stars.one"), value: item.OneStar }
519                ]
520              }, null, 8, ["title", "items"])
521            ]);
522          }), 256))
523        ])
524      ])
525    ]),
526    createBaseVNode("div", null, [
527      createBaseVNode("div", _hoisted_13$1, [
528        createBaseVNode("div", _hoisted_14$1, toDisplayString($setup.t("findAPro.reviews.showing", { from: $setup.page * 10 - 9, to: $setup.page * 10, total: ((_a = $setup.reviews) == null ? void 0 : _a.recordsTotal) || 0 })), 1),
529        createVNode($setup["RmcButton"], {
530          onClick: _cache[0] || (_cache[0] = withModifiers(() => $setup.handleChangeSort(), ["prevent"])),
531          variant: "secondary"
532        }, {
533          default: withCtx(() => [
534            createTextVNode(toDisplayString($setup.sortLabel), 1)
535          ]),
536          _: 1
537        })
538      ]),
539      !((_b = $setup.items) == null ? void 0 : _b.length) && !$setup.isFetching ? (openBlock(), createElementBlock("div", _hoisted_15$1, [
540        !$setup.isLoadingError ? (openBlock(), createElementBlock("div", _hoisted_16$1, [
541          createBaseVNode("p", null, toDisplayString($setup.t("findAPro.reviews.noReviewsFound")), 1)
542        ])) : createCommentVNode("", true),
543        $setup.isLoadingError ? (openBlock(), createElementBlock("div", _hoisted_17$1, toDisplayString($setup.t("findAPro.noResults.error")), 1)) : createCommentVNode("", true)
544      ])) : createCommentVNode("", true),
545      ((_c = $setup.items) == null ? void 0 : _c.length) ? (openBlock(true), createElementBlock(Fragment, { key: 1 }, renderList($setup.items, (item) => {
546        return openBlock(), createBlock($setup["ContractorProfileReviewItem"], {
547          key: item.OrganizationID,
548          class: "rmc-my-3xl rmc-my-xl-5xl",
549          data: item
550        }, null, 8, ["data"]);
551      }), 128)) : createCommentVNode("", true),
552      createVNode($setup["RmcPagination"], {
553        onPrev: $setup.handlePrevPage,
554        onNext: $setup.handleNextPage,
555        onChange: _cache[1] || (_cache[1] = (v) => $setup.page = v),
556        current: $setup.page,
557        total: $setup.pagesTotal
558      }, null, 8, ["onPrev", "onNext", "current", "total"])
559    ])
560  ]);
561}
562const ContractorProfileReviews = /* @__PURE__ */ _export_sfc(_sfc_main$4, [["render", _sfc_render$4], ["__scopeId", "data-v-62ab8a71"], ["__file", "ContractorProfileReviews.vue"]]);
563function getYTVideoId(url) {
564  const regex = /(?:https?:\/\/)?(?:www\.)?(?:youtube\.com\/(?:[^\/\n\s]+\/\S+\/|(?:v|e(?:mbed)?)\/|.*[?&]v=)|youtu\.be\/)([a-zA-Z0-9_-]{11})/;
565  const match = url.match(regex);
566  return match ? match[1] : null;
567}
568const id = "test-id";
569const _sfc_main$3 = /* @__PURE__ */ defineComponent({
570  __name: "ContractorProfileGallery",
571  props: {
572    items: {}
573  },
574  setup(__props, { expose: __expose }) {
575    __expose();
576    const props = __props;
577    function getVideoThumb(url) {
578      const id2 = getYTVideoId(url);
579      if (id2) {
580        return `https://img.youtube.com/vi/${id2}/0.jpg`;
581      }
582      return "https://cdn.shopify.com/s/files/1/2018/8867/files/play-button.png";
583    }
584    const __returned__ = { props, id, getVideoThumb, get classNames() {
585      return classNames;
586    } };
587    Object.defineProperty(__returned__, "__isScriptSetup", { enumerable: false, value: true });
588    return __returned__;
589  }
590});
591const _hoisted_1$3 = { class: "carousel-indicators" };
592const _hoisted_2$3 = ["data-bs-target", "data-bs-slide-to"];
593const _hoisted_3$1 = { class: "carousel-inner" };
594const _hoisted_4$1 = ["data-src"];
595const _hoisted_5$1 = ["src", "alt"];
596const _hoisted_6$1 = ["data-src"];
597const _hoisted_7$1 = ["src", "alt"];
598const _hoisted_8$1 = ["data-bs-target"];
599const _hoisted_9$1 = ["data-bs-target"];
600function _sfc_render$3(_ctx, _cache, $props, $setup, $data, $options) {
601  return openBlock(), createElementBlock("div", {
602    id: $setup.id,
603    class: "carousel slide"
604  }, [
605    createBaseVNode("div", _hoisted_1$3, [
606      (openBlock(true), createElementBlock(Fragment, null, renderList($props.items, (item, index) => {
607        return openBlock(), createElementBlock("button", {
608          type: "button",
609          "data-bs-target": `#${$setup.id}`,
610          "data-bs-slide-to": index,
611          class: normalizeClass($setup.classNames({ active: index === 0 }))
612        }, null, 10, _hoisted_2$3);
613      }), 256))
614    ]),
615    createBaseVNode("div", _hoisted_3$1, [
616      (openBlock(true), createElementBlock(Fragment, null, renderList($props.items, (item, index) => {
617        return openBlock(), createElementBlock("div", {
618          class: normalizeClass($setup.classNames("carousel-item", { active: index === 0 }))
619        }, [
620          item.Type === "image" ? (openBlock(), createElementBlock("div", {
621            key: index,
622            class: "carousel-item__align",
623            "data-fancybox": "gallery",
624            "data-src": item.MediaUrl
625          }, [
626            createBaseVNode("img", {
627              src: item.MediaUrl,
628              class: "d-block w-100",
629              alt: item.Caption
630            }, null, 8, _hoisted_5$1)
631          ], 8, _hoisted_4$1)) : createCommentVNode("", true),
632          item.Type === "video" ? (openBlock(), createElementBlock("div", {
633            key: index,
634            class: "carousel-item__align",
635            "data-fancybox": "gallery",
636            "data-src": item.MediaUrl
637          }, [
638            createBaseVNode("img", {
639              src: $setup.getVideoThumb(item.MediaUrl),
640              class: "d-block w-100",
641              alt: item.Caption
642            }, null, 8, _hoisted_7$1)
643          ], 8, _hoisted_6$1)) : createCommentVNode("", true)
644        ], 2);
645      }), 256))
646    ]),
647    createBaseVNode("button", {
648      class: "carousel-control-prev",
649      type: "button",
650      "data-bs-target": `#${$setup.id}`,
651      "data-bs-slide": "prev"
652    }, _cache[0] || (_cache[0] = [
653      createBaseVNode("span", {
654        class: "carousel-control-prev-icon",
655        "aria-hidden": "true"
656      }, null, -1),
657      createBaseVNode("span", { class: "visually-hidden" }, "Previous", -1)
658    ]), 8, _hoisted_8$1),
659    createBaseVNode("button", {
660      class: "carousel-control-next",
661      type: "button",
662      "data-bs-target": `#${$setup.id}`,
663      "data-bs-slide": "next"
664    }, _cache[1] || (_cache[1] = [
665      createBaseVNode("span", {
666        class: "carousel-control-next-icon",
667        "aria-hidden": "true"
668      }, null, -1),
669      createBaseVNode("span", { class: "visually-hidden" }, "Next", -1)
670    ]), 8, _hoisted_9$1)
671  ]);
672}
673const ContractorProfileGallery = /* @__PURE__ */ _export_sfc(_sfc_main$3, [["render", _sfc_render$3], ["__scopeId", "data-v-529a80e1"], ["__file", "ContractorProfileGallery.vue"]]);
674const _sfc_main$2 = /* @__PURE__ */ defineComponent({
675  __name: "ContractorProfileAudience",
676  setup(__props, { expose: __expose }) {
677    __expose();
678    const data = ["Residential", "Commercial"];
679    const __returned__ = { data, RmcCheckmarkText };
680    Object.defineProperty(__returned__, "__isScriptSetup", { enumerable: false, value: true });
681    return __returned__;
682  }
683});
684const _hoisted_1$2 = { class: "row row-cols-1 row-cols-md-2 row-cols-xl-5 rmc-gy-xl" };
685const _hoisted_2$2 = { class: "col" };
686function _sfc_render$2(_ctx, _cache, $props, $setup, $data, $options) {
687  return openBlock(), createElementBlock("div", _hoisted_1$2, [
688    (openBlock(), createElementBlock(Fragment, null, renderList($setup.data, (item) => {
689      return createBaseVNode("div", _hoisted_2$2, [
690        createVNode($setup["RmcCheckmarkText"], { text: item }, null, 8, ["text"])
691      ]);
692    }), 64))
693  ]);
694}
695const ContractorProfileAudience = /* @__PURE__ */ _export_sfc(_sfc_main$2, [["render", _sfc_render$2], ["__file", "ContractorProfileAudience.vue"]]);
696const _sfc_main$1 = /* @__PURE__ */ defineComponent({
697  __name: "ContractorProfilePicture",
698  props: {
699    organizationId: {},
700    organizationName: {},
701    profilePictureUrl: {}
702  },
703  setup(__props, { expose: __expose }) {
704    __expose();
705    const props = __props;
706    const profilePictureUrl = ref("");
707    const resolveProfilePicture = async () => {
708      var _a;
709      if (props.profilePictureUrl && !props.profilePictureUrl.includes("NoImage.png")) {
710        return props.profilePictureUrl;
711      }
712      const orgId = (_a = props.organizationId) == null ? void 0 : _a.toUpperCase();
713      if (!orgId) {
714        return "";
715      }
716      const fallback = `https://files.myrheem.com/webpartnerspublic/OrganizationAvatars/${orgId}.png`;
717      try {
718        const resp = await fetch(fallback);
719        return resp.ok ? fallback : "";
720      } catch {
721        return "";
722      }
723    };
724    watchEffect(async () => {
725      if (props.organizationId) {
726        profilePictureUrl.value = await resolveProfilePicture();
727      }
728    });
729    const __returned__ = { props, profilePictureUrl, resolveProfilePicture, ClientOnly };
730    Object.defineProperty(__returned__, "__isScriptSetup", { enumerable: false, value: true });
731    return __returned__;
732  }
733});
734const _hoisted_1$1 = {
735  key: 0,
736  class: "profile-image-container"
737};
738const _hoisted_2$1 = ["src", "alt"];
739function _sfc_render$1(_ctx, _cache, $props, $setup, $data, $options) {
740  return openBlock(), createBlock($setup["ClientOnly"], null, {
741    default: withCtx(() => [
742      $setup.profilePictureUrl !== "" ? (openBlock(), createElementBlock("div", _hoisted_1$1, [
743        createBaseVNode("img", {
744          src: $setup.profilePictureUrl || $setup.profilePictureUrl,
745          alt: $props.organizationName
746        }, null, 8, _hoisted_2$1)
747      ])) : createCommentVNode("", true)
748    ]),
749    _: 1
750  });
751}
752const ContractorProfilePicture = /* @__PURE__ */ _export_sfc(_sfc_main$1, [["render", _sfc_render$1], ["__scopeId", "data-v-feaa477d"], ["__file", "ContractorProfilePicture.vue"]]);
753const _sfc_main = /* @__PURE__ */ defineComponent({
754  __name: "+Page",
755  setup(__props, { expose: __expose }) {
756    var _a;
757    __expose();
758    const { t } = useI18n();
759    const region = useRegion();
760    const {
761      routeParams: { id: contractorId }
762    } = usePageContext();
763    const pageContext = usePageContext();
764    const language = pageContext.gtLang;
765    const findAProFallbackUrl = computed(
766      () => language && language !== "en" ? `/${language}/find-a-pro/` : "/find-a-pro/"
767    );
768    const handleBackToResults = (event) => {
769      var _a2;
770      if (((_a2 = window.history.state) == null ? void 0 : _a2[FIND_A_PRO_RETURN_KEY]) !== true || window.history.length <= 1) {
771        return;
772      }
773      event.preventDefault();
774      window.history.back();
775    };
776    onMounted(() => {
777      const cameFromResults = consumeFindAProProfileNavigation() || isFindAProResultsReferrer(document.referrer, window.location.origin);
778      if (!cameFromResults) {
779        return;
780      }
781      window.history.replaceState(
782        {
783          ...window.history.state,
784          [FIND_A_PRO_RETURN_KEY]: true
785        },
786        ""
787      );
788    });
789    const { showRatings, showBooking } = toValue(useData());
790    const { data: contractor } = useQuery({
791      queryKey: ["contractor-details", contractorId, language],
792      queryFn: async () => {
793        const r = await getContractorProProfile(contractorId);
794        return r == null ? void 0 : r.data;
795      },
796      refetchInterval: false
797    });
798    const contractorLoaded = computed(() => {
799      var _a2;
800      return !!((_a2 = contractor.value) == null ? void 0 : _a2.OrganizationID);
801    });
802    const mediaExists = computed(
803      () => {
804        var _a2, _b, _c;
805        return ((_c = (_b = (_a2 = contractor.value) == null ? void 0 : _a2.Media) == null ? void 0 : _b.MediaItems) == null ? void 0 : _c.length) ?? 0 > 0;
806      }
807    );
808    const businessInfo = computed(() => {
809      var _a2, _b, _c;
810      return ((_b = (_a2 = contractor.value) == null ? void 0 : _a2.OtherBusinessInfo) == null ? void 0 : _b.length) ? (_c = contractor.value) == null ? void 0 : _c.OtherBusinessInfo[0] : void 0;
811    });
812    const { data: summary } = useQuery({
813      queryKey: ["contractor-summary", contractorId, language],
814      queryFn: async () => {
815        var _a2;
816        return ((_a2 = contractor.value) == null ? void 0 : _a2.OrganizationID) ? (await getContractorRatingSiteSummary(contractor.value.OrganizationID)).data : null;
817      },
818      enabled: contractorLoaded
819    });
820    const { data: locatorSummary } = useQuery({
821      queryKey: [
822        "contractor-locator-summary",
823        (_a = contractor.value) == null ? void 0 : _a.OrganizationID,
824        language
825      ],
826      queryFn: async () => {
827        var _a2;
828        return ((_a2 = contractor.value) == null ? void 0 : _a2.OrganizationID) ? (await getContractorLocatorSummary(contractor.value.OrganizationID)).data : null;
829      },
830      enabled: contractorLoaded
831    });
832    const reviewsCount = computed(() => {
833      var _a2, _b;
834      return ((_b = (_a2 = locatorSummary.value) == null ? void 0 : _a2.Reviews) == null ? void 0 : _b.reduce((acc, v) => {
835        return acc + v.Count;
836      }, 0)) || 0;
837    });
838    const phoneNumber = computed(() => getContractorPhoneNumber(contractor.value));
839    const __returned__ = { t, region, contractorId, pageContext, language, findAProFallbackUrl, handleBackToResults, showRatings, showBooking, contractor, contractorLoaded, mediaExists, businessInfo, summary, locatorSummary, reviewsCount, phoneNumber, get hasBookNow() {
840      return hasBookNow;
841    }, get isProProfileVisible() {
842      return isProProfileVisible;
843    }, get shouldShowContractorRatings() {
844      return shouldShowContractorRatings;
845    }, ContractorProfileSchedule, get parseNumbers() {
846      return parseNumbers;
847    }, RmcButton, ContractorProfileCertifications, ContractorProfileServicesOffered, ContractorProfileMoreBusinessInfo, ContractorProfileReviews, ContractorProfileGallery, ContractorProfileAudience, ContractorProfilePicture, RmcIcon, RmcBreadcrumbs, get getContractorEditUrl() {
848      return getContractorEditUrl;
849    } };
850    Object.defineProperty(__returned__, "__isScriptSetup", { enumerable: false, value: true });
851    return __returned__;
852  }
853});
854const _hoisted_1 = { key: 0 };
855const _hoisted_2 = { class: "rmc-header rmc-header-tertiary rmc-header-dot rmc-header-grid" };
856const _hoisted_3 = { class: "rmc-container" };
857const _hoisted_4 = { class: "row" };
858const _hoisted_5 = { class: "col" };
859const _hoisted_6 = { class: "rmc-header__content" };
860const _hoisted_7 = { class: "d-flex rmc-gap-xl align-items-baseline" };
861const _hoisted_8 = { class: "d-flex flex-column rmc-gap-xl" };
862const _hoisted_9 = { class: "rmc-header__title rmc-ty-display-md rmc-ty-xl-display-2xl fw-bold m-0" };
863const _hoisted_10 = { class: "d-flex rmc-column-gap-xl rmc-row-gap-md flex-wrap" };
864const _hoisted_11 = { key: 0 };
865const _hoisted_12 = { class: "rmc-container" };
866const _hoisted_13 = { class: "row d-flex rmc-gap-4xl" };
867const _hoisted_14 = { class: "col-sm-6 col-md-5 col-lg-5 col-xl-4 col-xxl-3 d-flex flex-column gap-3" };
868const _hoisted_15 = { class: "col flex-grow-1" };
869const _hoisted_16 = {
870  key: 0,
871  class: "d-flex flex-column rmc-gap-xl rmc-pb-5xl"
872};
873const _hoisted_17 = { class: "rmc-ty-display-xs fw-bold" };
874const _hoisted_18 = { class: "rmc-ty-text-lg rmc-ty-xl-text-xl fw-light" };
875const _hoisted_19 = { class: "d-flex flex-column rmc-gap-xl rmc-pb-5xl" };
876const _hoisted_20 = { class: "rmc-ty-display-xs fw-bold" };
877const _hoisted_21 = { class: "d-flex flex-column rmc-gap-xl" };
878const _hoisted_22 = { class: "d-flex flex-column rmc-gap-xl rmc-pb-5xl" };
879const _hoisted_23 = { class: "rmc-ty-display-xs fw-bold" };
880const _hoisted_24 = { key: 0 };
881const _hoisted_25 = { key: 1 };
882const _hoisted_26 = ["href"];
883const _hoisted_27 = { class: "d-flex flex-column rmc-gap-xl rmc-pb-5xl" };
884const _hoisted_28 = { class: "rmc-ty-display-xs fw-bold" };
885const _hoisted_29 = { class: "d-flex flex-column rmc-gap-xl rmc-pb-5xl" };
886const _hoisted_30 = { class: "rmc-ty-display-xs fw-bold" };
887const _hoisted_31 = {
888  key: 1,
889  class: "d-flex flex-column rmc-gap-xl rmc-pb-5xl"
890};
891const _hoisted_32 = {
892  key: 0,
893  class: "rmc-ty-display-xs fw-bold",
894  id: "reviews"
895};
896const _hoisted_33 = { key: 0 };
897const _hoisted_34 = {
898  key: 2,
899  class: "d-flex flex-column rmc-gap-xl rmc-pb-5xl"
900};
901const _hoisted_35 = { class: "rmc-ty-display-xs fw-bold" };
902function _sfc_render(_ctx, _cache, $props, $setup, $data, $options) {
903  var _a, _b, _c, _d, _e, _f, _g, _h, _i, _j, _k, _l, _m, _n;
904  return $setup.contractor ? (openBlock(), createElementBlock("div", _hoisted_1, [
905    createBaseVNode("div", null, [
906      createBaseVNode("div", _hoisted_2, [
907        createBaseVNode("div", _hoisted_3, [
908          createBaseVNode("div", _hoisted_4, [
909            createBaseVNode("div", _hoisted_5, [
910              createBaseVNode("div", _hoisted_6, [
911                createVNode($setup["RmcBreadcrumbs"], {
912                  data: {
913                    [$setup.t("findAPro.breadcrumbs.home")]: $setup.language && $setup.language !== "en" ? `/${$setup.language}/` : "/",
914                    [$setup.t("findAPro.breadcrumbs.findAPro")]: $setup.language && $setup.language !== "en" ? `/${$setup.language}/find-a-pro/` : "/find-a-pro/",
915                    [$setup.contractor.OrganizationName]: ""
916                  }
917                }, null, 8, ["data"]),
918                createBaseVNode("div", _hoisted_7, [
919                  createVNode($setup["ContractorProfilePicture"], {
920                    "organization-id": $setup.contractor.OrganizationID,
921                    "organization-name": $setup.contractor.OrganizationName,
922                    "profile-picture-url": $setup.contractor.Media.ProfilePictureURL
923                  }, null, 8, ["organization-id", "organization-name", "profile-picture-url"]),
924                  createBaseVNode("div", _hoisted_8, [
925                    createBaseVNode("div", null, [
926                      createBaseVNode("h1", _hoisted_9, toDisplayString($setup.contractor.OrganizationName), 1),
927                      createBaseVNode("div", _hoisted_10, [
928                        $setup.contractor.AddressLine1 ? (openBlock(), createBlock($setup["RmcButton"], {
929                          key: 0,
930                          variant: "link"
931                        }, {
932                          startIcon: withCtx(() => [
933                            createVNode($setup["RmcIcon"], { "icon-name": "location-on" })
934                          ]),
935                          default: withCtx(() => [
936                            createTextVNode(" " + toDisplayString($setup.contractor.AddressLine1), 1)
937                          ]),
938                          _: 1
939                        })) : createCommentVNode("", true),
940                        $setup.phoneNumber ? (openBlock(), createBlock($setup["RmcButton"], {
941                          key: 1,
942                          variant: "link",
943                          href: `tel:${$setup.parseNumbers($setup.phoneNumber)}`
944                        }, {
945                          startIcon: withCtx(() => [
946                            createVNode($setup["RmcIcon"], { "icon-name": "phone" })
947                          ]),
948                          default: withCtx(() => [
949                            createTextVNode(" " + toDisplayString($setup.phoneNumber), 1)
950                          ]),
951                          _: 1
952                        }, 8, ["href"])) : createCommentVNode("", true),
953                        ((_a = $setup.contractor) == null ? void 0 : _a.WebSite) ? (openBlock(), createBlock($setup["RmcButton"], {
954                          key: 2,
955                          variant: "link",
956                          href: (_b = $setup.contractor) == null ? void 0 : _b.WebSite
957                        }, {
958                          startIcon: withCtx(() => [
959                            createVNode($setup["RmcIcon"], { "icon-name": "open-in-new" })
960                          ]),
961                          default: withCtx(() => [
962                            createTextVNode(" " + toDisplayString($setup.t("findAPro.profile.visitSite")), 1
962)
963                          ]),
964                          _: 1
965                        }, 8, ["href"])) : createCommentVNode("", true)
966                      ])
967                    ]),
968                    $setup.showBooking && $setup.hasBookNow($setup.contractor) && $setup.isProProfileVisible($setup.contractor) ? (openBlock(), createElementBlock("div", _hoisted_11, [
969                      createVNode($setup["RmcButton"], {
970                        href: ($setup.language && $setup.language !== "en" ? `/${$setup.language}` : "") + `/find-a-pro/booking${$setup.contractor.ProProfileURL}`,
971                        variant: "primary",
972                        size: "lg"
973                      }, {
974                        default: withCtx(() => [
975                          createTextVNode(toDisplayString($setup.t("findAPro.profile.requestAppointment")), 1)
976                        ]),
977                        _: 1
978                      }, 8, ["href"])
979                    ])) : createCommentVNode("", true)
980                  ])
981                ])
982              ])
983            ])
984          ])
985        ])
986      ])
987    ]),
988    createBaseVNode("div", _hoisted_12, [
989      createVNode($setup["RmcButton"], {
990        href: $setup.findAProFallbackUrl,
991        variant: "link",
992        class: "rmc-py-3xl d-none d-xl-inline-flex",
993        "data-testid": "fp-back-to-results",
994        onClick: $setup.handleBackToResults
995      }, {
996        startIcon: withCtx(() => [
997          createVNode($setup["RmcIcon"], {
998            "icon-name": "arrow-right",
999            style: { "transform": "rotate(180deg)" }
1000          })
1001        ]),
1002        default: withCtx(() => [
1003          createTextVNode(" " + toDisplayString($setup.t("findAPro.profile.backToResults")), 1)
1004        ]),
1005        _: 1
1006      }, 8, ["href"]),
1007      createBaseVNode("div", _hoisted_13, [
1008        createBaseVNode("div", _hoisted_14, [
1009          createVNode($setup["ContractorProfileSchedule"], {
1010            data: $setup.contractor.HoursOperation,
1011            "organization-id": $setup.contractor.OrganizationID
1012          }, null, 8, ["data", "organization-id"])
1013        ]),
1014        createBaseVNode("div", _hoisted_15, [
1015          $setup.contractor.AboutUs ? (openBlock(), createElementBlock("div", _hoisted_16, [
1016            createBaseVNode("h1", _hoisted_17, toDisplayString($setup.t("findAPro.profile.aboutUs")), 1),
1017            createBaseVNode("div", _hoisted_18, toDisplayString($setup.contractor.AboutUs), 1)
1018          ])) : createCommentVNode("", true),
1019          createBaseVNode("div", _hoisted_19, [
1020            createBaseVNode("h1", _hoisted_20, toDisplayString($setup.t("findAPro.profile.certifications")), 1),
1021            createBaseVNode("div", _hoisted_21, [
1022              createVNode($setup["ContractorProfileCertifications"], {
1023                certificates: ((_c = $setup.contractor) == null ? void 0 : _c.Certifications) || [],
1024                "is-commercial-financing-approved": ((_d = $setup.contractor) == null ? void 0 : _d.IsCommercialFinancingApproved) || false,
1025                "is-residential-financing-approved": ((_e = $setup.contractor) == null ? void 0 : _e.IsResidentialFinancingApproved) || false,
1026                "residential-financing-url": $setup.contractor.KwikComfortCustomURL || "",
1027                "contractor-country": ((_f = $setup.contractor) == null ? void 0 : _f.Country) || ""
1028              }, null, 8, ["certificates", "is-commercial-financing-approved", "is-residential-financing-approved", "residential-financing-url", "contractor-country"])
1029            ])
1030          ]),
1031          createBaseVNode("div", _hoisted_22, [
1032            createBaseVNode("h1", _hoisted_23, toDisplayString($setup.t("findAPro.profile.servicesOffered")), 1),
1033            ((_g = $setup.contractor.ServicesOffered) == null ? void 0 : _g.length) > 0 ? (openBlock(), createElementBlock("div", _hoisted_24, [
1034              createVNode($setup["ContractorProfileServicesOffered"], {
1035                data: $setup.contractor.ServicesOffered
1036              }, null, 8, ["data"])
1037            ])) : (openBlock(), createElementBlock("div", _hoisted_25, [
1038              createTextVNode(toDisplayString($setup.t("findAPro.profile.addServicesMessage")) + " ", 1),
1039              createBaseVNode("a", {
1040                class: "text-body",
1041                href: $setup.getContractorEditUrl($setup.region, $setup.contractor.OrganizationID),
1042                target: "_blank"
1043              }, toDisplayString($setup.t("findAPro.profile.addServicesHere")), 9, _hoisted_26),
1044              createTextVNode(" " + toDisplayString($setup.t("findAPro.profile.addServicesEnd")), 1)
1045            ]))
1046          ]),
1047          createBaseVNode("div", _hoisted_27, [
1048            createBaseVNode("h1", _hoisted_28, toDisplayString($setup.t("findAPro.profile.moreBusinessInfo")), 1),
1049            createBaseVNode("div", null, [
1050              createVNode($setup["ContractorProfileMoreBusinessInfo"], {
1051                data: $setup.businessInfo,
1052                "contractor-country": ((_h = $setup.contractor) == null ? void 0 : _h.Country) || ""
1053              }, null, 8, ["data", "contractor-country"])
1054            ])
1055          ]),
1056          createBaseVNode("div", _hoisted_29, [
1057            createBaseVNode("h1", _hoisted_30, toDisplayString($setup.t("findAPro.profile.audie
1057nce")), 1),
1058            createBaseVNode("div", null, [
1059              createVNode($setup["ContractorProfileAudience"])
1060            ])
1061          ]),
1062          $setup.showRatings && $setup.shouldShowContractorRatings($setup.contractor) ? (openBlock(), createElementBlock("div", _hoisted_31, [
1063            ((_j = (_i = $setup.summary) == null ? void 0 : _i.RatingTotal) == null ? void 0 : _j.TotalReviews) ? (openBlock(), createElementBlock("h1", _hoisted_32, [
1064              createTextVNode(toDisplayString($setup.t("findAPro.profile.reviews")) + " ", 1),
1065              $setup.summary ? (openBlock(), createElementBlock("span", _hoisted_33, " (" + toDisplayString($setup.reviewsCount) + ") ", 1)) : createCommentVNode("", true)
1066            ])) : createCommentVNode("", true),
1067            createBaseVNode("div", null, [
1068              ((_l = (_k = $setup.summary) == null ? void 0 : _k.RatingTotal) == null ? void 0 : _l.TotalReviews) ? (openBlock(), createBlock($setup["ContractorProfileReviews"], {
1069                key: 0,
1070                data: $setup.summary
1071              }, null, 8, ["data"])) : createCommentVNode("", true)
1072            ])
1073          ])) : createCommentVNode("", true),
1074          $setup.mediaExists ? (openBlock(), createElementBlock("div", _hoisted_34, [
1075            createBaseVNode("h1", _hoisted_35, toDisplayString($setup.t("findAPro.profile.imageGallery")), 1),
1076            createBaseVNode("div", null, [
1077              createVNode($setup["ContractorProfileGallery"], {
1078                items: (_n = (_m = $setup.contractor) == null ? void 0 : _m.Media) == null ? void 0 : _n.MediaItems
1079              }, null, 8, ["items"])
1080            ])
1081          ])) : createCommentVNode("", true)
1082        ])
1083      ])
1084    ])
1085  ])) : createCommentVNode("", true);
1086}
1087const _Page = /* @__PURE__ */ _export_sfc(_sfc_main, [["render", _sfc_render], ["__file", "+Page.vue"]]);
1088const import4 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
1089  __proto__: null,
1090  default: _Page
1091}, Symbol.toStringTag, { value: "Module" }));
1092export {
1093  import4 as i
1094};

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.