{ "elements": { "wpvrelement": { "settings": { "name": "WP VR", "metaThumbnailUrl": "[publicPath]/thumbnail.png", "metaPreviewUrl": "[publicPath]/preview.jpg", "metaDescription": "Apply WP VR" } } }, "categories": { "Misc": { "elements": [ "wpvrelement" ] } } } /*! pro-elements - v4.1.0 - 26-05-2026 */ .e-woo-select2-wrapper .select2-results__option{color:#69727d;font-family:Roboto,sans-serif;font-size:14px}.e-woo-select2-wrapper .select2-results__option:focus{color:#69727d}.elementor-widget-woocommerce-cart.e-cart-layout-one-column .e-cart__container{grid-template-columns:auto}.elementor-widget-woocommerce-cart table tbody tr:hover>td,.elementor-widget-woocommerce-cart table tbody tr:hover>th{background-color:inherit}.elementor-widget-woocommerce-cart .e-clear{height:0;overflow:hidden;width:0}.elementor-widget-woocommerce-cart .e-cart-section{background-color:var(--sections-background-color,#fff);border-color:var(--sections-border-color,#d5d8dc);border-radius:var(--sections-border-radius,3px);border-style:var(--sections-border-type,solid);border-width:1px;margin:var(--sections-margin,0 0 30px 0);padding:var(--sections-padding,16px 30px)}.elementor-widget-woocommerce-cart .e-cart-section--no-coupon{margin:var(--sections-margin,0 0 0 0)}@media (min-width:1024px){.elementor-widget-woocommerce-cart .e-cart-section:last-child{margin:var(--sections-margin,0)}}.elementor-widget-woocommerce-cart .e-cart-content{color:var(--sections-descriptions-color,#69727d);font-size:15px;font-weight:400;letter-spacing:0;line-height:23px}.elementor-widget-woocommerce-cart .e-cart__container{align-items:stretch;display:grid;flex-wrap:wrap;grid-template-columns:59% auto;grid-column-gap:var(--sections-margin,30px);grid-row-gap:var(--sections-margin,30px)}@media (max-width:1024px){.elementor-widget-woocommerce-cart .e-cart__container{grid-template-columns:repeat(1,1fr)}}.elementor-widget-woocommerce-cart .e-cart-layout-one-column .e-cart__container{grid-template-columns:auto}.elementor-widget-woocommerce-cart .select2-container{margin-bottom:4px}.elementor-widget-woocommerce-cart .select2-container--default .select2-selection--single{background-color:#f9fafa;border:none;border-radius:var(--forms-fields-border-radius,0);color:var(--forms-fields-normal-color,#69727d);height:45px}.elementor-widget-woocommerce-cart .select2-container--default .select2-selection--single:focus{background-color:#f9fafa;border-color:var(--forms-fields-focus-border-color,initial);color:var(--forms-fields-focus-color,#69727d);transition-duration:var(--forms-fields-focus-transition-duration,.3s)}.elementor-widget-woocommerce-cart .select2-container--default .select2-selection--single .select2-selection__placeholder{color:var(--forms-fields-normal-color,#69727d)}.elementor-widget-woocommerce-cart .select2-container--default .select2-selection--single .select2-selection__rendered{color:var(--forms-fields-normal-color,#69727d);line-height:45px;padding-inline:1rem}.elementor-widget-woocommerce-cart .select2-container--default .select2-selection--single .select2-selection__arrow{height:45px}.elementor-widget-woocommerce-cart .select2-container--open .select2-dropdown--below{background-color:#f9fafa}.elementor-widget-woocommerce-cart .woocommerce{font-family:Roboto,sans-serif}.elementor-widget-woocommerce-cart .woocommerce button.button{background-color:var(--e-a-bg-default);border-color:var(--forms-buttons-border-color,#5bc0de);border-radius:var(--forms-buttons-border-radius,3px);border-style:var(--forms-buttons-border-type,solid);border-width:2px;color:var(--forms-buttons-normal-text-color,#69727d);padding:var(--forms-buttons-padding,.88rem 2rem);width:var(--forms-buttons-width,auto)}.elementor-widget-woocommerce-cart .woocommerce button.button:hover{border-color:var(--forms-buttons-hover-border-color,#5bc0de);color:var(--forms-buttons-hover-text-color,#69727d);transition-duration:var(--forms-buttons-hover-transition-duration,.3s)}.elementor-widget-woocommerce-cart .woocommerce button.button.disabled,.elementor-widget-woocommerce-cart .woocommerce button.button:disabled,.elementor-widget-woocommerce-cart .woocommerce button.button:disabled[disabled]{color:var(--forms-buttons-normal-text-color,#69727d);padding:var(--forms-buttons-padding,.88rem 2rem)}.elementor-widget-woocommerce-cart .woocommerce button.button.disabled:hover,.elementor-widget-woocommerce-cart .woocommerce button.button:disabled:hover,.elementor-widget-woocommerce-cart .woocommerce button.button:disabled[disabled]:hover{background-color:var(--forms-buttons-hover-background-color,#fff);border-color:var(--forms-buttons-hover-border-color,#5bc0de);color:var(--forms-buttons-hover-text-color,#69727d);transition-duration:var(--forms-buttons-hover-transition-duration,.3s)}.elementor-widget-woocommerce-cart .woocommerce #shipping_method li label{color:var(--sections-radio-buttons-color,#69727d)}.elementor-widget-woocommerce-cart .woocommerce #shipping_method li input{vertical-align:middle}.elementor-widget-woocommerce-cart .woocommerce .shipping-calculator-form{margin-top:var(--sections-descriptions-spacing,15px)}.elementor-widget-woocommerce-cart .woocommerce .woocommerce-shipping-destination{color:var(--sections-descriptions-color,#69727d);margin-bottom:0}.elementor-widget-woocommerce-cart .woocommerce .cart_totals table.shop_table_responsive tbody th,.elementor-widget-woocommerce-cart .woocommerce-page .cart_totals table.shop_table_responsive tbody th{display:none}.elementor-widget-woocommerce-cart .woocommerce .cart_totals table.shop_table_responsive tr.woocommerce-shipping-totals td,.elementor-widget-woocommerce-cart .woocommerce-page .cart_totals table.shop_table_responsive tr.woocommerce-shipping-totals td{text-align:start!important}.elementor-widget-woocommerce-cart .woocommerce .cart_totals table.shop_table_responsive tr.woocommerce-shipping-totals td:before,.elementor-widget-woocommerce-cart .woocommerce-page .cart_totals table.shop_table_responsive tr.woocommerce-shipping-totals td:before{margin-bottom:10px;width:100%}.elementor-widget-woocommerce-cart .woocommerce .cart_totals table.shop_table_responsive tr td,.elementor-widget-woocommerce-cart .woocommerce-page .cart_totals table.shop_table_responsive tr td{text-align:end!important}.elementor-widget-woocommerce-cart .woocommerce .cart_totals table.shop_table_responsive tr td:before,.elementor-widget-woocommerce-cart .woocommerce-page .cart_totals table.shop_table_responsive tr td:before{content:attr(data-title);float:inline-start;font-weight:700}.elementor-widget-woocommerce-cart .woocommerce .cart_totals h2{text-align:var(--totals-title-alignment,start)}.elementor-widget-woocommerce-cart .woocommerce .cart_totals table.shop_table td{padding-bottom:var(--totals-rows-gap-bottom,9px);padding-top:var(--totals-rows-gap-top,12px)}.elementor-widget-woocommerce-cart .woocommerce .cart_totals table.shop_table td .woocommerce-Price-amount,.elementor-widget-woocommerce-cart .woocommerce .cart_totals table.shop_table td:before{color:var(--totals-color,#69727d);font-weight:700}.elementor-widget-woocommerce-cart .woocommerce .cart_totals table.shop_table tr.order-total td{border-top-color:var(--totals-divider-color,#69727d);border-top-width:var(--totals-divider-weight,0)}.elementor-widget-woocommerce-cart .woocommerce .cart_totals .form-row{margin-bottom:var(--forms-rows-gap,6px)}.elementor-widget-woocommerce-cart .woocommerce .product-name a{color:var(--product-link-normal-color,#000)}.elementor-widget-woocommerce-cart .woocommerce .product-name a:hover{color:var(--product-link-hover-color,#000)}.elementor-widget-woocommerce-cart .woocommerce .form-row{margin:0;padding:3px 0}.elementor-widget-woocommerce-cart .woocommerce .input-text,.elementor-widget-woocommerce-cart .woocommerce select{background-color:#f9fafa;border:none;border-radius:var(--forms-fields-border-radius,3px);color:var(--forms-fields-normal-color,#69727d);font-size:14px;padding:var(--forms-fields-padding,16px)}.elementor-widget-woocommerce-cart .woocommerce .input-text::-moz-placeholder,.elementor-widget-woocommerce-cart .woocommerce select::-moz-placeholder{color:var(--forms-fields-normal-color,inherit);font-family:inherit;opacity:.6}.elementor-widget-woocommerce-cart .woocommerce .input-text::placeholder,.elementor-widget-woocommerce-cart .woocommerce select::placeholder{color:var(--forms-fields-normal-color,inherit);font-family:inherit;opacity:.6}.elementor-widget-woocommerce-cart .woocommerce .input-text:focus,.elementor-widget-woocommerce-cart .woocommerce select:focus{background-color:#f9fafa;border-color:var(--forms-fields-focus-border-color,transparent);color:var(--forms-fields-focus-color,#69727d);transition-duration:var(--forms-fields-focus-transition-duration,.3s)}.elementor-widget-woocommerce-cart .woocommerce .input-text:focus::-moz-placeholder,.elementor-widget-woocommerce-cart .woocommerce select:focus::-moz-placeholder{color:var(--forms-fields-focus-color,#69727d)}.elementor-widget-woocommerce-cart .woocommerce .input-text:focus::placeholder,.elementor-widget-woocommerce-cart .woocommerce select:focus::placeholder{color:var(--forms-fields-focus-color,#69727d)}.elementor-widget-woocommerce-cart .woocommerce .input-text.qty{background-color:transparent;border-color:var(--order-summary-quantity-border-color,#d5d8dc);border-radius:3px;border-style:solid;border-width:var(--order-summary-quantity-border-weight,1px);color:var(--order-summary-color,#000);font-size:14px;max-height:28px;min-height:28px;padding:1px 2px;text-align:start}.elementor-widget-woocommerce-cart .woocommerce .wc-proceed-to-checkout{align-items:var(--place-order-title-alignment,stretch);display:flex;flex-direction:column;flex-wrap:wrap;padding-bottom:0}.elementor-widget-woocommerce-cart .woocommerce .wc-proceed-to-checkout .checkout-button{background-color:#5bc0de;border-radius:var(--checkout-button-border-radius,3px);color:var(--checkout-button-normal-text-color,#fff);font-size:15px;margin-bottom:0;min-height:auto;padding:var(--checkout-button-padding,15px 1em);text-align:center;width:var(--checkout-button-width,auto)}.elementor-widget-woocommerce-cart .woocommerce .wc-proceed-to-checkout .checkout-button:hover{background-color:#5bc0de;border-color:var(--checkout-button-hover-border-color,#5bc0de);color:var(--checkout-button-hover-text-color,#fff);transition-duration:var(--checkout-button-hover-transition-duration,.3s)}.elementor-widget-woocommerce-cart .woocommerce .remove{background:transparent;color:var(--order-summary-remove-icon-normal-color,#000)!important;width:auto}.elementor-widget-woocommerce-cart .woocommerce .remove:hover{background:transparent;color:var(--order-summary-remove-icon-hover-color,#5bc0de)!important}.elementor-widget-woocommerce-cart .woocommerce .cart-collaterals .cart_totals{float:none;width:100%}.elementor-widget-woocommerce-cart .woocommerce .cart-collaterals .cart_totals td{padding-inline-start:0}.elementor-widget-woocommerce-cart .woocommerce .cart-collaterals .cart_totals .woocommerce-shipping-totals td{padding-inline-end:0}.elementor-widget-woocommerce-cart .woocommerce .coupon .button{float:inline-end;width:100%}.elementor-widget-woocommerce-cart .woocommerce .coupon .form-row{padding:0}.elementor-widget-woocommerce-cart .woocommerce .coupon-col{display:flex}.elementor-widget-woocommerce-cart .woocommerce .coupon-col-start{flex:2;padding-inline-end:30px}@media (max-width:1024px){.elementor-widget-woocommerce-cart .woocommerce .coupon-col-start{padding-inline-end:0}}.elementor-widget-woocommerce-cart .woocommerce .coupon-col-end{flex:1}@media (max-width:1024px){.elementor-widget-woocommerce-cart .woocommerce .coupon-col-end{text-align:var(--apply-coupon-button-alignment,center)}.elementor-widget-woocommerce-cart .woocommerce .coupon-col{display:block}.elementor-widget-woocommerce-cart .woocommerce .coupon{margin:var(--sections-margin,0)}.elementor-widget-woocommerce-cart .woocommerce .coupon #coupon_code{margin-inline-end:0;margin-bottom:15px;width:100%}.elementor-widget-woocommerce-cart .woocommerce .coupon .button{float:none;width:var(--apply-coupon-button-width,100%)}}.elementor-widget-woocommerce-cart .woocommerce table.shop_table{border:0 solid}.elementor-widget-woocommerce-cart .woocommerce table.shop_table .button{float:inline-start;font-size:14px;font-weight:700}.elementor-widget-woocommerce-cart .woocommerce table.shop_table.cart .actions{display:table-cell;text-align:var(--update-cart-button-alignment,start)!important}.elementor-widget-woocommerce-cart .woocommerce table.shop_table.cart .actions .button{display:inline-block!important;float:none;width:var(--update-cart-button-width,auto)}@media (max-width:1024px){.elementor-widget-woocommerce-cart .woocommerce table.shop_table.cart .actions .button{width:var(--update-cart-button-width,100%)!important}}.elementor-widget-woocommerce-cart .woocommerce table.shop_table .shipping-calculator-form p:last-of-type{text-align:var(--update-shipping-button-alignment,start)}.elementor-widget-woocommerce-cart .woocommerce table.shop_table .shipping-calculator-form .button{float:none;width:var(--update-shipping-button-width,auto)}@media (max-width:1024px){.elementor-widget-woocommerce-cart .woocommerce table.shop_table .shipping-calculator-form .button{width:var(--update-shipping-button-width,100%)}}.elementor-widget-woocommerce-cart .woocommerce table.shop_table td,.elementor-widget-woocommerce-cart .woocommerce table.shop_table th,.elementor-widget-woocommerce-cart .woocommerce table.shop_table tr{border:0 solid}.elementor-widget-woocommerce-cart .woocommerce table.shop_table tr:nth-child(odd)>td,.elementor-widget-woocommerce-cart .woocommerce table.shop_table tr:nth-child(odd)>th{background-color:transparent}.elementor-widget-woocommerce-cart .woocommerce table.shop_table .actions{padding:16px 0 0}.elementor-widget-woocommerce-cart .woocommerce table.shop_table .product-remove a{display:inline-block}.elementor-widget-woocommerce-cart .woocommerce table.shop_table.cart tbody tr:last-child{display:var(--update-cart-automatically-display,table-row)}.elementor-widget-woocommerce-cart .woocommerce table.cart{margin-bottom:0}.elementor-widget-woocommerce-cart .woocommerce table.cart img{display:block;height:auto;width:55px}.elementor-widget-woocommerce-cart .woocommerce table.cart td{padding-bottom:var(--order-summary-rows-gap-bottom,20px);padding-top:var(--order-summary-rows-gap-top,20px);padding-inline:0 20px}.elementor-widget-woocommerce-cart .woocommerce table.cart td span{color:var(--order-summary-color,#000);font-size:14px;font-weight:400}.elementor-widget-woocommerce-cart .woocommerce table.cart td.actions,.elementor-widget-woocommerce-cart .woocommerce table.cart td.product-name,.elementor-widget-woocommerce-cart .woocommerce table.cart td.product-price,.elementor-widget-woocommerce-cart .woocommerce table.cart td.product-quantity,.elementor-widget-woocommerce-cart .woocommerce table.cart td.product-remove,.elementor-widget-woocommerce-cart .woocommerce table.cart td.product-subtotal,.elementor-widget-woocommerce-cart .woocommerce table.cart td.product-thumbnail{border-top:var(--order-summary-items-divider-weight,1px) solid var(--order-summary-items-divider-color,#d5d8dc)}@media (max-width:768px){.elementor-widget-woocommerce-cart .woocommerce table.cart td.actions,.elementor-widget-woocommerce-cart .woocommerce table.cart td.product-name,.elementor-widget-woocommerce-cart .woocommerce table.cart td.product-price,.elementor-widget-woocommerce-cart .woocommerce table.cart td.product-quantity,.elementor-widget-woocommerce-cart .woocommerce table.cart td.product-remove,.elementor-widget-woocommerce-cart .woocommerce table.cart td.product-subtotal,.elementor-widget-woocommerce-cart .woocommerce table.cart td.product-thumbnail{border-top-width:0}}.elementor-widget-woocommerce-cart .woocommerce table.cart td.product-remove{padding-inline:0}@media (min-width:767px){.elementor-widget-woocommerce-cart .woocommerce table.cart tbody tr:first-child td{border-top:none}}@media (max-width:1024px){.elementor-widget-woocommerce-cart .woocommerce table.cart.product-remove{position:relative}.elementor-widget-woocommerce-cart .woocommerce table.cart.product-name{padding-inline-end:0}.elementor-widget-woocommerce-cart .woocommerce table.cart tr{border-top-color:var(--order-summary-items-divider-color,#d5d8dc);border-top-width:var(--order-summary-items-divider-weight,1px)}.elementor-widget-woocommerce-cart .woocommerce table.cart tr:first-child{border-top:none}}@media (max-width:768px){.elementor-widget-woocommerce-cart .woocommerce table.cart td{padding-inline:0}}@media (max-width:767px){.elementor-widget-woocommerce-cart .woocommerce table.cart{padding:0}.elementor-widget-woocommerce-cart .woocommerce table.cart tr{padding:16px 28px}.elementor-widget-woocommerce-cart .woocommerce table.cart tr:first-child{border-top:none}.elementor-widget-woocommerce-cart .woocommerce table.cart td{padding-inline:0}.elementor-widget-woocommerce-cart .woocommerce table.cart td.product-name,.elementor-widget-woocommerce-cart .woocommerce table.cart td:first-child{border-top:none}.elementor-widget-woocommerce-cart .woocommerce table.cart td.actions{padding:0}}.elementor-widget-woocommerce-cart .woocommerce a:not(.add_to_cart_button):not(.restore-item):not(.wc-backward):not(.wc-forward){color:var(--links-normal-color,#5bc0de)}.elementor-widget-woocommerce-cart .woocommerce a:not(.add_to_cart_button):not(.restore-item):not(.wc-backward):not(.wc-forward):hover{color:var(--links-hover-color,#5bc0de)}.elementor-widget-woocommerce-cart .woocommerce .cart th,.elementor-widget-woocommerce-cart .woocommerce .cart_totals h2{font-size:14px;font-weight:700;margin-top:0;padding-bottom:8px;padding-top:0;padding-inline:0 20px}.elementor-widget-woocommerce-cart .woocommerce .cart_totals h2{color:var(--sections-title-color,#000);margin-bottom:var(--sections-title-spacing,1rem)}.elementor-widget-woocommerce-cart .woocommerce .cart th{color:var(--order-summary-title-color,#000);padding-bottom:var(--order-summary-title-spacing,8px)}.elementor-widget-woocommerce-cart .woocommerce .cart td:before{color:var(--order-summary-title-color,#000)}.elementor-widget-woocommerce-cart .woocommerce .shipping-calculator-button:after{display:none}.elementor-widget-woocommerce-cart .woocommerce .product-name .variation{color:var(--order-summary-variations-color,#000)}@media (max-width:1024px){.elementor-widget-woocommerce-cart .woocommerce table.shop_table_responsive tr:nth-child(2n) td,.elementor-widget-woocommerce-cart .woocommerce-page table.shop_table_responsive tr:nth-child(2n) td{background-color:transparent}.elementor-widget-woocommerce-cart .woocommerce .cart_totals .shop_table_responsive td{padding-inline-start:0}}.e-preview--show-hidden-elements .elementor-widget-woocommerce-cart .woocommerce #shipping_method input,.e-preview--show-hidden-elements .elementor-widget-woocommerce-cart .woocommerce .shipping-calculator-form button[name=calc_shipping]{pointer-events:none}.woocommerce div.product.elementor form.cart div.product-addon{flex-basis:100%;flex-shrink:0}.e-sticky-right-column--active{position:sticky;top:0}/* Plugin visibility module ------------------------ */ .plugins thead .ame-check-column, .plugins tfoot .ame-check-column { padding: 4px 0 0 6px; vertical-align: middle; width: 2.2em; } .plugins .ame-check-column { vertical-align: top; } /* Plugin status indicator on the check column */ .plugins .active th.ame-check-column, .plugin-update-tr.active td { border-left: 4px solid #2ea2cc; } .plugins thead th.ame-check-column, .plugins tfoot th.ame-check-column, .plugins .inactive th.ame-check-column { padding-left: 6px; } .plugins tbody th.ame-check-column, .plugins tbody { padding: 8px 0 0 2px; } .plugins tbody th.ame-check-column input[type=checkbox] { margin-top: 4px; } /* The "Save Changes" form */ .ame-pv-save-form { float: right; margin-top: 5px; margin-bottom: 6px; } //Make room for th save button. #ws_actor_selector_container { margin-right: 130px; } /* Inline editor */ #ame-plugin-visibility-editor .inline-edit-row { .ame-pv-inline-edit-left { width: 35%; } .ame-pv-inline-edit-right { width: 65%; } span.title { width: auto; } input[type="text"] { width: 100%; } .ame-pv-custom-description { height: 9em; } .ame-pv-inline-reset { line-height: 28px; margin-left: 1em; } td { box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.1); } p.submit { margin-bottom: 0.2em; } .inline-edit-legend { margin: 0; padding: 0.2em 0.5em 0; line-height: 2.5; font-weight: 600; } } /* The "New Plugins" option is displayed in the table footer. It needs to override some default footer styles. */ .plugins tfoot .ame-pv-new-plugin-visibility-row { th.ame-check-column { padding-top: 8px; vertical-align: top; input[type=checkbox] { margin-top: 4px; } } ul { list-style: inside disc; margin-left: 1em; margin-top: 0.8em; } th, td { border-top: none; } }import { getSiteImages } from '@launch/api/DataApi'; jest.mock( './getSiteImages.deps', () => ({ IMAGES_HOST: 'https://img.example.com', extraBody: { foo: 'bar', baz: 'qux' }, useUserSelectionStore: { getState: jest.fn(() => ({ siteInformation: { title: 'My Site' } })), }, }), { virtual: true }, ); const makeResponse = (ok, body) => ({ ok, json: async () => body, }); describe('getSiteImages', () => { const originalFetch = global.fetch; const originalAbortSignal = global.AbortSignal; beforeEach(() => { jest.resetAllMocks(); global.fetch = jest.fn(); global.AbortSignal = { ...originalAbortSignal, timeout: jest.fn((ms) => ({ __fakeTimeoutSignal: true, ms })), }; }); afterEach(() => { global.fetch = originalFetch; global.AbortSignal = originalAbortSignal; }); test('returns fallback when response.ok = false', async () => { global.fetch.mockResolvedValueOnce(makeResponse(false, {})); const data = await getSiteImages({ aiSiteType: 'x', aiSiteCategory: 'y', aiDescription: 'z', aiKeywords: 'k', }); expect(data).toEqual({ siteImages: [] }); }); test('returns fallback when json() throws an error (invalid body)', async () => { global.fetch.mockResolvedValueOnce({ ok: true, json: async () => { throw new Error('invalid json'); }, }); const data = await getSiteImages({ aiSiteType: 'x', aiSiteCategory: 'y', aiDescription: 'z', aiKeywords: 'k', }); expect(data).toEqual({ siteImages: [] }); }); test('handles first timeout → retries → succeeds', async () => { global.fetch .mockRejectedValueOnce(new Error('AbortError: The operation was aborted')) .mockResolvedValueOnce(makeResponse(true, { siteImages: ['ok.jpg'] })); const data = await getSiteImages({ aiSiteType: 'x', aiSiteCategory: 'y', aiDescription: 'z', aiKeywords: 'k', }); expect(global.fetch).toHaveBeenCalledTimes(2); expect(data).toEqual({ siteImages: ['ok.jpg'] }); expect(global.AbortSignal.timeout).toHaveBeenCalledTimes(2); expect(global.AbortSignal.timeout).toHaveBeenNthCalledWith(1, 10000); expect(global.AbortSignal.timeout).toHaveBeenNthCalledWith(2, 10000); }); test('handles first timeout → second timeout → returns fallback', async () => { global.fetch .mockRejectedValueOnce(new Error('AbortError: timeout 1')) .mockRejectedValueOnce(new Error('AbortError: timeout 2')); const data = await getSiteImages({ aiSiteType: 'x', aiSiteCategory: 'y', aiDescription: 'z', aiKeywords: 'k', }); expect(global.fetch).toHaveBeenCalledTimes(2); expect(data).toEqual({ siteImages: [] }); }); test('returns fallback when response body lacks siteImages', async () => { global.fetch.mockResolvedValueOnce(makeResponse(true, { whatever: 123 })); const data = await getSiteImages({ aiSiteType: 'x', aiSiteCategory: 'y', aiDescription: 'z', aiKeywords: 'k', }); expect(data).toEqual({ siteImages: [] }); }); }); {"translation-revision-date":"2023-10-17 14:48:06+0000","generator":"WP-CLI\/2.12.0","source":"src\/Assist\/tasks\/upload-logo.js","domain":"messages","locale_data":{"messages":{"":{"domain":"messages","lang":"pt_BR","plural-forms":"nplurals=2; plural=n > 1;"},"Upload a logo":["Enviar um logo"],"Ensure your website is on-brand by adding your logo.":["Garanta que seu site esteja alinhado \u00e0 sua marca adicionando seu logotipo."],"Replace":["Substituir"],"Upload":["Enviar"]}}}{"translation-revision-date":"2026-06-30 07:01+0000","generator":"Loco https:\/\/localise.biz\/","source":"frontend\/blocks\/subscription-block\/src\/edit.js","domain":"hostinger-reach","locale_data":{"hostinger-reach":{"":{"domain":"","lang":"pt_BR","plural-forms":"nplurals=2; plural=n > 1;"},"Add New Tag":["Adicionar nova tag"],"Add Tag":["Adicionar etiqueta"],"Default":["Padr\u00e3o"],"Enter tag name and press Enter or click Add Tag":["Digite o nome da tag e pressione Enter ou clique em Add Tag"],"Form ID":["ID do formul\u00e1rio"],"Inline":["Em linha"],"Layout":["Layout"],"Layout Settings":["Configura\u00e7\u00f5es de layout"],"New Tag Name":["Novo nome da etiqueta"],"Settings":["Configura\u00e7\u00f5es"],"Show Name Field?":["Mostrar campo de nome?"],"Show Surname Field?":["Mostrar campo de sobrenome?"],"Tags":["Tags"],"Unique identifier for this form":["Identificador exclusivo para este formul\u00e1rio"]}}} Logo Sign Shop - Full Service Sign Company | Dallas Fort Worth

Logo Sign Shop - Dallas TX - Custom Business Signs Foam Display Expo Logo Business Large Letter FOAM SIGN DISPLAYS EXPO LOGOS & LETTERS Bright Reverse Channel Building Sign Halo Light Letters BRANDING PACKAGES FOR OFFICES PROFESSIONAL MONUMENT SIGNS Logo Sign Shop Routed out cabinet WE ARE A CREATIVE CUSTOM SIGN COMPANY PROFESSIONAL EXTERIOR BUILDING SIGNS Wall Mural Vinyl Print Business Office DRAMATIC WALL MURALS Building Lighted Channel Letter Signs LARGE CABINETS DIMENSIONAL CHANNEL

[vc_row bg_style=”dark-grey-wrapper” center_row=”yes” typo_style=”light” el_class=”vc-row-default” css=”.vc_custom_1561048282205{padding-top: 15px !important;padding-bottom: 0px !important;}”][vc_column width=”1/4″ offset=”vc_col-xs-1 vc_hidden-xs”][/vc_column][vc_column width=”1/4″ offset=”vc_col-xs-1 vc_hidden-xs”][/vc_column][vc_column width=”1/4″ offset=”vc_col-xs-1 vc_hidden-xs”][/vc_column][vc_column width=”1/4″ offset=”vc_col-xs-1 vc_hidden-xs”][/vc_column][/vc_row][vc_row parallax=”content-moving” parallax_image=”260″ center_row=”yes” bg_overlay=”yes” typo_style=”light” css=”.vc_custom_1560748658956{margin-top: 0px !important;border-top-width: 3px !important;border-top-style: solid !important;}”][vc_column][vc_row_inner][vc_column_inner width=”1/5″][/vc_column_inner][vc_column_inner width=”1/5″][/vc_column_inner][vc_column_inner width=”1/5″][/vc_column_inner][vc_column_inner width=”1/5″][/vc_column_inner][vc_column_inner width=”1/5″][/vc_column_inner][/vc_row_inner][vc_row_inner][vc_column_inner width=”1/5″][/vc_column_inner][vc_column_inner width=”1/5″][/vc_column_inner][vc_column_inner width=”1/5″][/vc_column_inner][vc_column_inner width=”1/5″][/vc_column_inner][vc_column_inner width=”1/5″][/vc_column_inner][/vc_row_inner][/vc_column][/vc_row][vc_row bg_style=”bg-normal” typo_style=”light” css=”.vc_custom_1560745439837{padding-top: 0px !important;padding-bottom: 0px !important;}”][vc_column][vc_cta h2=”TELL US ABOUT YOUR PROJECT!” txt_align=”center” style=”custom” add_button=”right” btn_title=”REQUEST A QUOTE” btn_style=”transparent” css_animation=”top-to-bottom” btn_link=”url:https%3A%2F%2Flogosignshop.com%2Fsignage-quote%2F|||” css=”.vc_custom_1562361178303{margin-bottom: 0px !important;}”][/vc_cta][/vc_column][/vc_row][vc_row gap=”30″ center_row=”yes” typo_style=”default” css=”.vc_custom_1554945271311{margin-left: 20px !important;}”][vc_column width=”1/2″ css=”.vc_custom_1554945257435{margin-right: 20px !important;}”][/vc_column][vc_column width=”1/2″][vc_row_inner][vc_column_inner width=”1/2″][vc_separator el_width=”60″][vc_separator el_width=”60″][vc_separator el_width=”60″][vc_separator el_width=”60″][/vc_column_inner][vc_column_inner width=”1/2″][vc_separator el_width=”60″][vc_separator el_width=”60″][vc_separator el_width=”60″][vc_separator el_width=”60″][/vc_column_inner][/vc_row_inner][/vc_column][/vc_row][vc_row parallax=”content-moving” parallax_image=”79″ center_row=”yes” bg_overlay=”yes” typo_style=”light”][vc_column][/vc_column][/vc_row][vc_row bg_style=”bg-normal” typo_style=”light” css=”.vc_custom_1560745520567{padding-top: 0px !important;padding-bottom: 0px !important;}”][vc_column][vc_cta h2=”TELL US ABOUT YOUR PROJECT!” txt_align=”center” style=”custom” add_button=”right” btn_title=”CONTACT US” btn_style=”transparent” css_animation=”top-to-bottom” btn_link=”url:https%3A%2F%2Flogosignshop.com%2Fcontact-logo-sign-shop%2F|||” css=”.vc_custom_1562361059867{margin-bottom: 0px !important;}”][/vc_cta][/vc_column][/vc_row][vc_row center_row=”yes” typo_style=”default”][vc_column][vc_column_text]

We have had the privilege of working with all types of customers, for example, local business owners to national corporations and renowned general contractors. Therefore, our custom work is as unique as each and every individual we work with. During our 18 years in business, we have designed, fabricated, and installed thousands of signage solutions. As a result, our products and services are of the highest quality. Our list of satisfied and recurring customers is endless!

Because Logo Sign Shop is a full service sign company, we design, fabricate, and install! So call us at any stage of your signage needs. Here is a list of products and services we provide for our customers:

[/vc_column_text][vc_row_inner][vc_column_inner width=”1/2″][vc_column_text]

  • graphic design and logo design
  • RTA cut out vinyl and digitally printed vinyl graphics for company vehicles and trucks
  • car wraps
  • storefront vinyl for windows and doors and frosted vinyl for offices and conference rooms
  • office signs for lobbies, receptions, conference rooms, and break rooms
  • digitally printed wall murals
  • hand painted signs
  • regulatory ADA room identification signs and non-regulatory room signs
  • wayfinding and directional signs
  • illuminated and non-illuminated channel letters and panface signs
  • electrical services and LED retrofitting
  • sign installations and take downs
  • sign repairs and maintenance
  • CNC routing and laser cutting for plastics, aluminum, and wood materials
  • aluminum channel letter bending
  • aluminum and steel welding
  • monument and marquee signs
  • high-impact foam sign displays for special occasions and events
  • temporary signage and expo displays
  • real estate and construction site signs

and so much more! Certainly check out our projects to see what we can do for you!

Above all, we value our customers, and we thank you for your business!

[/vc_column_text][/vc_column_inner][vc_column_inner width=”1/2″][vc_column_text]

Sign Pictures and Locations

Check our manufactured signs installed at our customers locations. Click on this link or the map to open Google Maps – Our Installed Signs

Select a category or browse all the categories or map layers. We are working on uploading all of our customers signs.

You will be directed to google, please come back to our website for additional information on logo sign shop[/vc_column_text][vc_single_image image=”5389″ img_size=”large” alignment=”center” style=”vc_box_shadow_border_circle_2″ onclick=”custom_link” link=”https://www.google.com/maps/d/u/0/edit?mid=1nyK89NrqCFoi60tcXY0HOJm9l2Qf22k&usp=sharing”][/vc_column_inner][/vc_row_inner][/vc_column][vc_column][/vc_column][/vc_row][vc_row bg_style=”image-right” bg_side_image=”2606″ bg_side_size=”cover” container_fluid=”yes” center_row=”yes” typo_style=”default”][vc_column][/vc_column][/vc_row][vc_row bg_style=”bg-normal” css=”.vc_custom_1454154282594{padding-top: 0px !important;padding-bottom: 0px !important;}”][vc_column][vc_cta h2=”Tell Us About Your Project!” txt_align=”center” style=”custom” add_button=”right” btn_title=”REQUEST A QUOTE” btn_style=”transparent” btn_size=”lg” css_animation=”top-to-bottom” btn_link=”url:https%3A%2F%2Flogosignshop.com%2Fsignage-quote%2F|||” css=”.vc_custom_1562361093668{margin-bottom: 0px !important;}” custom_text=”#ffffff”][/vc_cta][/vc_column][/vc_row]