westernbid-shipping-calculator-widget
v0.0.27
Published
WesternBid shipping calculator widget
Downloads
1,095
Maintainers
Readme
WesternBid Shipping Calculator Widget
Shipping widgets with two integration modes:
dist/calculator.es.js+dist/index.cssfor React apps.dist/calculator.iife.jsfor plain HTML sites via<script>(styles included in JS).
Local development
npm install
npm run devBuild
npm run buildnpm run build creates:
dist/calculator.es.jsdist/index.cssdist/calculator.iife.js
Embed shipping calculator on any website (no React)
Use the standalone bundle and mount widget from window.WbShippingCalculatorWidget.
<div id="wb-shipping-calculator"></div>
<script src="https://cdn.jsdelivr.net/npm/westernbid-shipping-calculator-widget@latest/dist/calculator.iife.js"></script>
<script>
const widget = window.WbShippingCalculatorWidget.mount({
target: "#wb-shipping-calculator",
proxyBaseUrl: "https://your-domain.com/api/wb",
routes: {
originCountries: "/origin-countries",
destinationCountries: "/destination-countries",
calculateRates: "/calculate-shipping",
hsCodes: "/hs-codes"
},
language: "uk",
onCalculationChange(result) {
console.log(result.chargeableWeightKg, result.shippingRates);
},
onError(error) {
console.error("Shipping widget error:", error);
}
});
// Optional:
// widget.update({ language: "en" });
// widget.destroy();
</script>Notes:
- Add scripts after the container element (or run mount on
DOMContentLoaded). - Global API aliases are available:
window.WbShippingCalculatorWidget.mount(...)window.WbShippingCalculatorWidget.mountShippingCalculatorWidget(...)window.WbShippingCalculatorWidget.mountFulfillmentCalculatorWidget(...)window.WbShippingCalculatorWidget.mountFulfillmentCenterCalculatorWidget(...)window.WbShippingCalculatorWidget.mountShippingRatesTableWidget(...)
Embed shipping rates table page
Use this widget on the separate shipping prices page, then link to that page from the main shipping page. The proxy endpoint recalculates the table from the WesternBid calculator roughly every 30 days and returns matching ShippingService JSON-LD schema markup.
<div id="wb-shipping-rates-table"></div>
<script src="https://cdn.jsdelivr.net/npm/westernbid-shipping-calculator-widget@latest/dist/calculator.iife.js"></script>
<script>
window.WbShippingCalculatorWidget.mountShippingRatesTableWidget({
target: "#wb-shipping-rates-table",
proxyBaseUrl: "https://your-domain.com/api/wb",
routes: {
rateTable: "/shipping-rate-table"
},
language: "uk",
styleMode: "light",
maxServices: 12,
injectSchema: true
});
</script>The default table covers 0.3, 0.5, 1, 2, 3, 5, and 10 kg for the United States, Canada, Germany, France, and Great Britain. Each cell shows up to twelve available delivery options in WesternBid service order, with price used as a secondary sort. The table renders immediately and fills cells progressively as each calculation finishes. US calculations use a benchmark customs item because the WesternBid US calculator requires item data.
Embed fulfillment calculator on any website (no React)
<div id="wb-fulfillment-calculator"></div>
<script src="https://cdn.jsdelivr.net/npm/westernbid-shipping-calculator-widget@latest/dist/calculator.iife.js"></script>
<script>
const widget = window.WbShippingCalculatorWidget.mountFulfillmentCalculatorWidget({
target: "#wb-fulfillment-calculator",
proxyBaseUrl: "https://your-domain.com/api/wb",
routes: {
warehouses: "/warehouses",
destinationCountries: "/destination-countries",
destinationStates: "/destination-countries/states",
packages: "/packages",
calculateRates: "/calculate-shipping/FulfillmentCenter"
},
language: "uk",
onCalculationChange(result) {
console.log(result.chargeableWeightKg, result.warnings, result.shippingRates);
}
});
// Optional:
// widget.update({ language: "en" });
// widget.destroy();
</script>React usage
import { ShippingCalculatorWidget } from "westernbid-shipping-calculator-widget";
import "westernbid-shipping-calculator-widget/dist/index.css";
export function ShippingBlock() {
return (
<ShippingCalculatorWidget
proxyBaseUrl="https://your-domain.com/api/wb"
routes={{
originCountries: "/origin-countries",
destinationCountries: "/destination-countries",
calculateRates: "/calculate-shipping",
hsCodes: "/hs-codes"
}}
language="uk"
onCalculationChange={(result) => {
console.log(result.chargeableWeightKg, result.shippingRates);
}}
/>
);
}React fulfillment usage
import { FulfillmentCalculatorWidget } from "westernbid-shipping-calculator-widget";
import "westernbid-shipping-calculator-widget/dist/index.css";
export function FulfillmentBlock() {
return (
<FulfillmentCalculatorWidget
proxyBaseUrl="https://your-domain.com/api/wb"
routes={{
warehouses: "/warehouses",
destinationCountries: "/destination-countries",
destinationStates: "/destination-countries/states",
packages: "/packages",
calculateRates: "/calculate-shipping/FulfillmentCenter"
}}
language="uk"
onCalculationChange={(result) => {
console.log(result.chargeableWeightKg, result.warnings, result.shippingRates);
}}
/>
);
}React shipping rates table usage
import { ShippingRatesTableWidget } from "westernbid-shipping-calculator-widget";
import "westernbid-shipping-calculator-widget/dist/index.css";
export function ShippingRatesPage() {
return (
<ShippingRatesTableWidget
proxyBaseUrl="https://your-domain.com/api/wb"
routes={{ rateTable: "/shipping-rate-table" }}
language="uk"
styleMode="light"
maxServices={12}
injectSchema
/>
);
}Widget options
target: string | HTMLElementonly for standalone mount API.proxyBaseUrl: stringproxy base URL.routes?: { originCountries; destinationCountries; calculateRates?; calculateWeight?; hsCodes? }proxy routes.routes?: { warehouses; destinationCountries; destinationStates; packages; calculateRates }for the fulfillment widget.routes?: { rateTable; rateTableMetadata?; rateTableCell? }for the shipping rates table widget.language?: stringaddslangquery param to requests.styleMode?: "shadow" | "light"renders calculator widgets in Shadow DOM by default; the shipping rates table defaults to light DOM so the page contains a crawlable HTML table.styleInjections?: Array<{ cssText?: string; href?: string }>injects additional stylesheets directly into the widget shadow root.defaultUseImperialSystem?: booleandefault input mode.requestHeaders?: Record<string, string>extra request headers.rateItems?: Record<string, unknown>[]forwarded toItemsin rates request body.onError?: (error: Error) => voidcallback for API errors.onSubmit?: (payload) => voidcallback before API call.onCalculationChange?: (result) => voidcallback with calculated result and normalized rates/warnings.maxServices?: numberlimits the shipping rates table to 1-12 delivery options per destination/weight cell.injectSchema?: booleaninjects the returned shipping JSON-LD intodocument.headfor the rates table page.schemaElementId?: stringcustom element id for the injected JSON-LD script.onDataChange?: (result) => voidcallback with the generated rates table response.
Styling
- Default mode is
styleMode: "shadow", so host-page CSS does not bleed into the widget. - You can theme the widget from outside via CSS custom properties on the mount target, for example
--wb-widget-accent,--wb-widget-text,--wb-widget-border,--wb-widget-shadow. - For deeper customization in shadow mode, pass
styleInjectionswith inline CSS text or external stylesheet URLs. - If you need legacy light DOM styling, set
styleMode: "light"and keep usingdist/index.css.
Required proxy routes
originCountriesendpoint returning countries list.destinationCountriesendpoint returning countries list.calculateRatesendpoint proxyingPOST /api/v1/rate/CalculateShipping.calculateWeightis still supported as fallback (deprecated).hsCodesendpoint returning HS/HTS suggestions for US shipments from the public USITC HTS API.rateTableendpoint returning the cached shipping rates table and schema markup.rateTableMetadataandrateTableCellendpoints for progressive shipping rates table rendering.warehousesendpoint returning Fulfillment Center warehouses.destinationStatesendpoint returning states by destination country.packagesendpoint returning package types for selected warehouse.calculateRates: "/calculate-shipping/FulfillmentCenter"proxyingPOST /api/v1/rate/CalculateFulfillmentShipping.
