westernbid-shipping-calculator-widget
v0.0.8
Published
WesternBid shipping calculator widget
Maintainers
Readme
WesternBid Shipping Calculator Widget
Shipping calculator widget 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 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"
},
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(...)
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"
}}
language="uk"
onCalculationChange={(result) => {
console.log(result.chargeableWeightKg, result.shippingRates);
}}
/>
);
}Widget options
target: string | HTMLElementonly for standalone mount API.proxyBaseUrl: stringproxy base URL.routes?: { originCountries; destinationCountries; calculateRates?; calculateWeight? }proxy routes.language?: stringaddslangquery param to requests.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.
Required proxy routes
originCountriesendpoint returning countries list.destinationCountriesendpoint returning countries list.calculateRatesendpoint proxyingPOST /api/v1/rate/CalculateShipping.calculateWeightis still supported as fallback (deprecated).
