@nerdjs/sales-kit 2.0.76 → 2.0.78

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (33) hide show
  1. package/dist/hooks/load/loadDetailsStatus.js +2 -4
  2. package/dist/hooks/load/loadDetailsStatus.js.map +1 -1
  3. package/dist/hooks/load/loadLastLocation.js +2 -3
  4. package/dist/hooks/load/loadLastLocation.js.map +1 -1
  5. package/dist/hooks/load/loadsSearchInput.js +1 -1
  6. package/dist/hooks/load/loadsSearchInput.js.map +1 -1
  7. package/dist/hooks/locationsForm/locationsForm.js +30 -19
  8. package/dist/hooks/locationsForm/locationsForm.js.map +1 -1
  9. package/dist/hooks/locationsForm/locationsFormSales.js +23 -14
  10. package/dist/hooks/locationsForm/locationsFormSales.js.map +1 -1
  11. package/dist/hooks/quote/constants.d.ts +4 -4
  12. package/dist/hooks/quote/constants.js +12 -5
  13. package/dist/hooks/quote/constants.js.map +1 -1
  14. package/dist/hooks/quote/form.js +197 -164
  15. package/dist/hooks/quote/form.js.map +1 -1
  16. package/dist/hooks/quote/helpers.d.ts +1 -2
  17. package/dist/hooks/quote/helpers.js +82 -69
  18. package/dist/hooks/quote/helpers.js.map +1 -1
  19. package/dist/hooks/quote/result.js +136 -134
  20. package/dist/hooks/quote/result.js.map +1 -1
  21. package/dist/hooks/quote/template.js +21 -22
  22. package/dist/hooks/quote/template.js.map +1 -1
  23. package/dist/hooks/statusStepper/statusStepper.js +9 -9
  24. package/dist/hooks/statusStepper/statusStepper.js.map +1 -1
  25. package/dist/hooks/tender/form.js +67 -33
  26. package/dist/hooks/tender/form.js.map +1 -1
  27. package/dist/hooks/tender/helpers.js +42 -40
  28. package/dist/hooks/tender/helpers.js.map +1 -1
  29. package/dist/hooks/tender/template.js +21 -1
  30. package/dist/hooks/tender/template.js.map +1 -1
  31. package/dist/redux/quote/quoteReducer.js +4 -2
  32. package/dist/redux/quote/quoteReducer.js.map +1 -1
  33. package/package.json +5 -5
@@ -1,6 +1,5 @@
1
1
  import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-runtime";
2
- import { Checkbox, FormControl, FormLabel, Input, Alert, Button, IconButton, Typography as JoyTypography, Option, Select, Sheet, Tab, TabList, Tabs, useColorScheme, CircularProgress, } from "@mui/joy";
3
- import { Backdrop, Box, Dialog, DialogActions, DialogContent, DialogTitle, Divider, FormHelperText, Grid, Paper, Tooltip, Typography, useMediaQuery, useTheme, } from "@mui/material";
2
+ import { Checkbox, FormControl, FormLabel, Input, Alert, Button, IconButton, Typography, Option, Select, Sheet, Tab, TabList, Tabs, useColorScheme, CircularProgress, Tooltip, Grid, Divider, Box, Modal, ModalDialog, DialogActions, DialogContent, DialogTitle, FormHelperText, } from "@mui/joy";
4
3
  import { DataGridPremium, useGridApiRef, } from "@mui/x-data-grid-premium";
5
4
  import { NerdDatePicker } from "@nerdjs/nerd-ui";
6
5
  import { DateTime } from "luxon";
@@ -35,29 +34,40 @@ export function QuoteForm(props) {
35
34
  const { customerPortal, quoteRoute, perPalletClass } = props;
36
35
  const { t } = useTranslation("salesKit");
37
36
  const errors = useSelector(quoteErrorsSelector);
38
- const theme = useTheme();
39
37
  const result = useSelector(quoteResultSelector);
40
- const sm = useMediaQuery(theme.breakpoints.down(600));
41
38
  const dispatch = useDispatch();
42
39
  const running = useSelector(quoteRunningSelector);
43
- return (_jsx(_Fragment, { children: _jsxs(Box, { sx: { flex: 1, height: "100%", overflowY: "auto" }, children: [_jsx(Toolbar, { quoteRoute: quoteRoute }), _jsx(Typography, { pl: 2, display: "inline", color: "red", children: "*" }), " ", _jsx(Typography, { display: "inline", variant: "body2", children: t("requiredField") }), _jsxs(Box, { sx: {
40
+ return (_jsx(_Fragment, { children: _jsxs(Box, { sx: {
41
+ flex: 1,
42
+ height: "100%",
43
+ overflowY: !running ? "auto" : "hidden",
44
+ }, children: [_jsx(Toolbar, { quoteRoute: quoteRoute }), _jsx(Typography, { pl: 2, display: "inline", color: "danger", children: "*" }), " ", _jsx(Typography, { display: "inline", level: "body-sm", children: t("requiredField") }), _jsxs(Box, { sx: {
44
45
  display: "flex",
45
46
  flexDirection: "column",
46
47
  gap: 2,
47
48
  p: 2,
48
- }, children: [errors ? (_jsx(Alert, { color: "danger", children: _jsx("ul", { style: { margin: 0 }, children: errors.map((e) => (_jsx("li", { children: e }, e))) }) })) : ([]), running ? (_jsx(_Fragment, { children: _jsx(Backdrop, { open: true, sx: {
49
- zIndex: (theme) => theme.zIndex.modal,
50
- position: "absolute",
51
- top: 49,
52
- }, children: _jsx(CircularProgress, {}) }) })) : null, _jsx(AboutTheLoad, { customerPortal: customerPortal, perPalletClass: perPalletClass }), _jsx(ShipCons, { customerPortal: customerPortal }), sm ? _jsx(FormStop, { customerPortal: customerPortal }) : [], _jsxs(Box, { sx: { textAlign: "center", lineHeight: 0.6 }, children: [_jsx(Typography, { variant: "caption", display: "inline", children: _jsx(Box, { className: "fa-duotone fa-circle-info pright", component: "i", sx: {
53
- color: (theme) => theme.palette.warning.main,
54
- } }) }), _jsxs(Typography, { display: "inline", variant: "caption", sx: { opacity: 0.5 }, children: [t("inaccurateWarning"), _jsx("br", {}), t("selectLocationWarning")] })] })] }), sm && result ? (_jsx(Box, { onClick: () => dispatch(setFormOpen({ formID: "result", isOpen: true })), sx: {
49
+ }, children: [errors ? (_jsx(Alert, { color: "danger", children: _jsx("ul", { style: { margin: 0 }, children: errors.map((e) => (_jsx("li", { children: e }, e))) }) })) : ([]), running ? (_jsx(_Fragment, { children: _jsx(Modal, { disablePortal: true, open: true, sx: {
50
+ zIndex: 200,
51
+ "& .MuiModal-backdrop": {
52
+ mt: "50px",
53
+ },
54
+ display: "flex",
55
+ justifyContent: "center",
56
+ alignItems: "center",
57
+ }, children: _jsx(CircularProgress, { sx: {
58
+ outline: "none",
59
+ } }) }) })) : null, _jsx(AboutTheLoad, { customerPortal: customerPortal, perPalletClass: perPalletClass }), _jsx(ShipCons, { customerPortal: customerPortal }), _jsx(Box, { sx: {
60
+ display: { sm: "initial", md: "none" },
61
+ }, children: _jsx(FormStop, { customerPortal: customerPortal }) }), _jsxs(Box, { sx: { textAlign: "center", lineHeight: 0.6 }, children: [_jsx(Typography, { level: "body-sm", display: "inline", children: _jsx(Box, { className: "fa-duotone fa-circle-info pright", component: "i", sx: {
62
+ color: (theme) => theme.palette.warning[500],
63
+ } }) }), _jsxs(Typography, { display: "inline", level: "body-sm", sx: { opacity: 0.5 }, children: [t("inaccurateWarning"), _jsx("br", {}), t("selectLocationWarning")] })] })] }), result ? (_jsx(Box, { onClick: () => dispatch(setFormOpen({ formID: "result", isOpen: true })), sx: {
55
64
  position: "sticky",
56
65
  bottom: 0,
57
66
  p: 1,
58
67
  backdropFilter: "blur(10px)",
59
68
  borderTop: "solid 1px rgba(155,155,155, 0.3)",
60
69
  background: "rgba(255,255,255,0.4)",
70
+ display: { sm: "block", md: "none" },
61
71
  }, children: _jsx(Button, { color: "danger", fullWidth: true, children: t("viewQuoteResult") }) })) : ([])] }) }));
62
72
  }
63
73
  /**
@@ -75,9 +85,8 @@ function Toolbar(props) {
75
85
  const bodyRef = useRef(body);
76
86
  const [newQuote, { isSuccess, data }] = useCreateQuoteMutation();
77
87
  const ref = useRef();
78
- const { mode } = useColorScheme();
88
+ const { mode, systemMode } = useColorScheme();
79
89
  const navigate = useNavigate();
80
- const isDark = mode === "dark";
81
90
  const shrink = true;
82
91
  const resetQuote = () => {
83
92
  dispatch(restartQuote());
@@ -141,17 +150,19 @@ function Toolbar(props) {
141
150
  position: "sticky",
142
151
  backdropFilter: shrink ? "blur(10px)" : "none",
143
152
  borderBottom: shrink ? "solid 1px rgba(155,155,155,0.3)" : "none",
144
- background: !isDark ? "#F6F6F699" : "#12121299",
153
+ background: mode === "light" || (mode === "system" && systemMode === "light")
154
+ ? "#F6F6F699"
155
+ : "#12121299",
145
156
  zIndex: 1000,
146
157
  top: 0,
147
158
  p: 2,
148
159
  pt: shrink ? 1 : 2,
149
160
  pb: shrink ? 1 : 2,
150
- }, children: [_jsx(Typography, { variant: "h4", sx: {
161
+ }, children: [_jsx(Typography, { level: "h4", sx: {
151
162
  fontWeight: 600,
152
163
  fontSize: shrink ? "22px !important" : "36px !important",
153
164
  transition: "font-size .3s ease-in-out",
154
- }, children: t("Form") }), _jsxs(Box, { sx: { display: "flex", gap: 1 }, children: [_jsx(Tooltip, { title: "ctrl+r", children: _jsxs(Button, { size: shrink ? "sm" : "md", onClick: resetQuote, variant: "soft", color: "neutral", children: [_jsx("i", { className: "fa-sharp fa-solid fa-arrows-rotate pright" }), t("restart")] }) }), _jsx(Tooltip, { title: "ctrl+x", children: _jsxs(Button, { variant: "solid", size: shrink ? "sm" : "md", onClick: () => {
165
+ }, children: t("Form") }), _jsxs(Box, { sx: { display: "flex", gap: 1 }, children: [_jsx(Tooltip, { title: "ctrl+r", children: _jsxs(Button, { disabled: running, size: shrink ? "sm" : "md", onClick: resetQuote, variant: "soft", color: "neutral", children: [_jsx("i", { className: "fa-sharp fa-solid fa-arrows-rotate pright" }), t("restart")] }) }), _jsx(Tooltip, { title: "ctrl+x", children: _jsxs(Button, { variant: "solid", size: shrink ? "sm" : "md", onClick: () => {
155
166
  setTimeout(() => runQuote(), 200);
156
167
  }, loading: running, children: [_jsx("i", { className: "fa-duotone fa-play" }), _jsx("span", { style: { paddingLeft: 4 }, children: t("runQuote") })] }) })] })] }) }));
157
168
  }
@@ -173,8 +184,6 @@ function AboutTheLoad({ customerPortal, perPalletClass, }) {
173
184
  const [getCustomer, { data: _customer, isFetching }] = useLazyGetCustomerQuery();
174
185
  const { data: commodities } = useGetQuoteCommodityDescriptionQuery(customerPortal);
175
186
  const [value, setValue] = useState(_customer || null);
176
- const theme = useTheme();
177
- const sm = useMediaQuery(theme.breakpoints.down(600));
178
187
  const _error = error;
179
188
  useEffect(() => {
180
189
  if (palletDimensions?.length) {
@@ -233,49 +242,50 @@ function AboutTheLoad({ customerPortal, perPalletClass, }) {
233
242
  : !TL_TEMPERATURE.test(reeferTemp);
234
243
  // const perPalletWeightDisabled = useSelector(perPalletWeightDisabledSelector);
235
244
  // const totalWeightDisabled = useSelector(totalWeightDisabledSelector);
236
- return (_jsxs(Paper, { sx: { p: 2 }, children: [_jsxs(Typography, { variant: "h6", children: [_jsx("i", { className: "fa-duotone fa-truck-ramp-box pright" }), " ", t("aboutTheLoad")] }), _jsxs(Grid, { container: true, spacing: 2, sx: { pt: 1 }, children: [!customerPortal ? (_jsx(Grid, { item: true, xs: 12, children: _jsx(CustomerAutocomplete, { isLoading: isFetching, value: value, onChange: (v) => {
245
+ return (_jsxs(Sheet, { sx: { p: 2, borderRadius: "sm", boxShadow: "md" }, children: [_jsxs(Typography, { level: "title-lg", children: [_jsx("i", { className: "fa-duotone fa-truck-ramp-box pright" }), " ", t("aboutTheLoad")] }), _jsxs(Grid, { container: true, spacing: 2, sx: { pt: 1 }, children: [!customerPortal ? (_jsx(Grid, { xs: 12, children: _jsx(CustomerAutocomplete, { isLoading: isFetching, value: value, onChange: (v) => {
237
246
  dispatch(setCustomerID(v?.id));
238
247
  setValue(v);
239
- } }) })) : ([]), _jsx(Grid, { item: true, children: _jsx(Tabs, { "aria-label": "Vertical tabs", orientation: "vertical", value: body.service, onChange: (_e, v) => {
248
+ } }) })) : ([]), _jsx(Grid, { children: _jsx(Tabs, { "aria-label": "Vertical tabs", orientation: "vertical", value: body.service, onChange: (_e, v) => {
240
249
  const _v = v;
241
250
  if (_v)
242
251
  s({ service: _v });
243
- }, sx: { borderRadius: "lg" }, children: _jsx(TabList, { children: loadTypeOptions(customerPortal).map((i) => (_jsx(Tab, { value: i, children: _jsx(JoyTypography, { level: "body-sm", startDecorator: icons[i], children: i }) }, i))) }) }) }), _jsx(Grid, { item: true, children: _jsx(Tabs, { "aria-label": "Vertical tabs", orientation: "vertical", value: body.mode, onChange: (_e, v) => {
252
+ }, sx: { borderRadius: "lg" }, children: _jsx(TabList, { children: loadTypeOptions(customerPortal).map((i) => (_jsx(Tab, { value: i, children: _jsx(Typography, { level: "body-sm", startDecorator: icons[i], children: i }) }, i))) }) }) }), _jsx(Grid, { children: _jsx(Tabs, { "aria-label": "Vertical tabs", orientation: "vertical", value: body.mode, onChange: (_e, v) => {
244
253
  const _v = v;
245
254
  if (_v)
246
255
  s({ mode: _v });
247
256
  if (_v === DRY)
248
257
  r({ reeferTemp: undefined });
249
- }, sx: { borderRadius: "lg" }, children: _jsx(TabList, { children: [DRY, REEFER].map((i) => (_jsx(Tab, { value: i, children: _jsx(JoyTypography, { level: "body-sm", startDecorator: icons[i], children: i }) }, i))) }) }) }), body.mode === REEFER ? (_jsxs(_Fragment, { children: [_jsx(Grid, { item: true, xs: 12, md: 3, children: _jsxs(FormControl, { children: [_jsx(FormLabel, { required: true, children: t("temperature") }), _jsx(Input, { autoFocus: true, value: body.reefer?.reeferTemp ?? "", onChange: (e) => r({ reeferTemp: e.target.value }), error: temperatureError }), _jsx(FormHelperText, { children: body.service === LTL
258
+ }, sx: { borderRadius: "lg" }, children: _jsx(TabList, { children: [DRY, REEFER].map((i) => (_jsx(Tab, { value: i, children: _jsx(Typography, { level: "body-sm", startDecorator: icons[i], children: i }) }, i))) }) }) }), body.mode === REEFER ? (_jsxs(_Fragment, { children: [_jsx(Grid, { xs: 12, md: 3, children: _jsxs(FormControl, { children: [_jsx(FormLabel, { required: true, children: t("temperature") }), _jsx(Input, { autoFocus: true, value: body.reefer?.reeferTemp ?? "", onChange: (e) => r({ reeferTemp: e.target.value }), error: temperatureError }), _jsx(FormHelperText, { children: body.service === LTL
250
259
  ? "Between 40℉ and 80℉"
251
- : "Between -20℉ and 80℉" })] }) }), _jsx(Grid, { item: true, xs: 12, md: 4, children: _jsxs(Button, { color: "neutral", sx: { textTransform: "none" }, variant: body.reefer?.reeferCont ? "solid" : "outlined", onClick: () => r({ reeferCont: !(body.reefer?.reeferCont ?? false) }), children: [icons[CONTINUOUS_RUNNING], CONTINUOUS_RUNNING] }) })] })) : (_jsxs(_Fragment, { children: [!customerPortal ? (_jsx(Grid, { item: true, children: _jsx(Button, { startDecorator: _jsx("i", { className: "fa-duotone fa-truck-container-empty" }), color: "neutral", variant: body.emptyLoad ? "solid" : "outlined", onClick: handleEmptyLoadClick, children: t("emptyLoad") }) })) : null, _jsx(Grid, { item: true, children: _jsxs(Button, { sx: { textTransform: "none" }, color: "neutral", variant: body.dryVanOnly ? "solid" : "outlined", onClick: () => s({ dryVanOnly: !(body.dryVanOnly ?? false) }), children: [icons[DRY_VAN_ONLY], DRY_VAN_ONLY] }) })] })), _jsx(Grid, { item: true, xs: 12 }), body.emptyLoad && !customerPortal ? null : (_jsxs(_Fragment, { children: [_jsx(Grid, { item: true, xs: 12, md: 3, children: _jsxs(FormControl, { children: [_jsx(FormLabel, { id: "commodity-select-helper-label", children: t("commodityDescription") }), _jsx(Select, { startDecorator: body.commodityDescriptionId &&
252
- icons[body.commodityDescriptionId], value: commodities ? body.commodityDescriptionId : null, onChange: (_e, value) => s({
260
+ : "Between -20℉ and 80℉" })] }) }), _jsx(Grid, { xs: 12, md: 4, children: _jsxs(Button, { color: "neutral", sx: { textTransform: "none" }, variant: body.reefer?.reeferCont ? "solid" : "outlined", onClick: () => r({ reeferCont: !(body.reefer?.reeferCont ?? false) }), children: [icons[CONTINUOUS_RUNNING], CONTINUOUS_RUNNING] }) })] })) : (_jsxs(_Fragment, { children: [!customerPortal ? (_jsx(Grid, { children: _jsx(Button, { startDecorator: _jsx("i", { className: "fa-duotone fa-truck-container-empty" }), color: "neutral", variant: body.emptyLoad ? "solid" : "outlined", onClick: handleEmptyLoadClick, children: t("emptyLoad") }) })) : null, _jsx(Grid, { children: _jsxs(Button, { sx: { textTransform: "none" }, color: "neutral", variant: body.dryVanOnly ? "solid" : "outlined", onClick: () => s({ dryVanOnly: !(body.dryVanOnly ?? false) }), children: [icons[DRY_VAN_ONLY], DRY_VAN_ONLY] }) })] })), _jsx(Grid, { xs: 12 }), body.emptyLoad && !customerPortal ? null : (_jsxs(_Fragment, { children: [_jsx(Grid, { xs: 12, md: 3, children: _jsxs(FormControl, { children: [_jsx(FormLabel, { id: "commodity-select-helper-label", children: t("commodityDescription") }), _jsx(Select, { startDecorator: body.commodityDescriptionId &&
261
+ icons[body.commodityDescriptionId], value: commodities ? body.commodityDescriptionId || null : null, onChange: (_e, value) => s({
253
262
  commodityDescriptionId: value || undefined,
254
- }), children: commodities?.map((c) => (_jsxs(Option, { value: c.id, children: [c.id && icons[c.id], c.name] }, c.id))) }), _jsx(FormHelperText, { children: t("Note: No Haz Mat, Ice Cream.") })] }) }), _jsx(Grid, { item: true, xs: 12, md: 3, children: _jsxs(FormControl, { required: true, children: [_jsx(FormLabel, { slotProps: {
263
+ }), children: commodities?.map((c) => (_jsxs(Option, { value: c.id, children: [c.id && icons[c.id], c.name] }, c.id))) }), _jsx(FormHelperText, { children: t("Note: No Haz Mat, Ice Cream.") })] }) }), _jsx(Grid, { xs: 12, md: 3, children: _jsxs(FormControl, { required: true, children: [_jsx(FormLabel, { slotProps: {
255
264
  asterisk: {
256
265
  sx: {
257
266
  color: (theme) => theme.palette.danger[400],
258
267
  },
259
268
  },
260
- }, children: t("totalWeight") }), _jsx(Input, { error: errors && !body.units?.totalDimensions?.totalWeight, type: "number", placeholder: "in lbs", value: body.units?.totalDimensions?.totalWeight ?? "", onChange: (e) => d({ totalWeight: e.target.value }) })] }) }), !customerPortal && (_jsxs(_Fragment, { children: [!perPalletClass ? (_jsx(Grid, { item: true, xs: 12, md: 3, children: _jsxs(FormControl, { children: [_jsx(FormLabel, { children: t("freightClass") }), _jsx(Select, { value: body.freightClass ?? null, onChange: (_e, v) => s({ freightClass: v || undefined }), children: FREIGHT_CLASS.map((f) => (_jsx(Option, { value: f, children: f }, f))) })] }) })) : null, _jsx(Grid, { item: true, xs: 12, md: 3, children: _jsxs(FormControl, { children: [_jsx(FormLabel, { children: t("Miles") }), _jsx(Input, { value: body.manualMiles ?? "", onChange: (e) => s({ manualMiles: Number(e.target.value) || undefined }), type: "number" })] }) })] })), _jsxs(Grid, { item: true, xs: 12, children: [_jsx(PalletsDataGrid, { customerPortal: customerPortal, perPalletClass: perPalletClass }), _jsx(Tooltip, { title: "ctrl+p", children: _jsxs(Button, { size: "sm", sx: { mt: 2 }, variant: "soft", color: errors && body.units?.palletDimensions?.length === 0
269
+ }, children: t("totalWeight") }), _jsx(Input, { error: errors && !body.units?.totalDimensions?.totalWeight, type: "number", placeholder: "in lbs", value: body.units?.totalDimensions?.totalWeight ?? "", onChange: (e) => d({ totalWeight: e.target.value }) })] }) }), !customerPortal && (_jsxs(_Fragment, { children: [!perPalletClass ? (_jsx(Grid, { xs: 12, md: 3, children: _jsxs(FormControl, { children: [_jsx(FormLabel, { children: t("freightClass") }), _jsx(Select, { value: body.freightClass ?? null, onChange: (_e, v) => s({ freightClass: v || undefined }), children: FREIGHT_CLASS.map((f) => (_jsx(Option, { value: f, children: f }, f))) })] }) })) : null, _jsx(Grid, { xs: 12, md: 3, children: _jsxs(FormControl, { children: [_jsx(FormLabel, { children: t("Miles") }), _jsx(Input, { value: body.manualMiles ?? "", onChange: (e) => s({ manualMiles: Number(e.target.value) || undefined }), type: "number" })] }) })] })), _jsxs(Grid, { xs: 12, children: [_jsx(PalletsDataGrid, { customerPortal: customerPortal, perPalletClass: perPalletClass }), _jsx(Tooltip, { title: "ctrl+p", children: _jsxs(Button, { size: "sm", sx: { mt: 2, display: { xs: "none", sm: "initial" } }, variant: "soft", color: errors && body.units?.palletDimensions?.length === 0
261
270
  ? "danger"
262
271
  : "neutral", onClick: () => {
263
272
  dispatch(addPallet());
264
- if (sm)
265
- dispatch(setFormOpen({ isOpen: true, formID: "pallet" }));
266
- }, children: [_jsx("i", { className: "fa-duotone fa-pallet-boxes pright" }), " ", t("addPallet")] }) })] }), palletsCheck &&
273
+ }, children: [_jsx("i", { className: "fa-duotone fa-pallet-boxes pright" }), " ", t("addPallet")] }) }), _jsxs(Button, { size: "sm", sx: { mt: 2, display: { xs: "initial", sm: "none" } }, variant: "soft", color: errors && body.units?.palletDimensions?.length === 0
274
+ ? "danger"
275
+ : "neutral", onClick: () => {
276
+ dispatch(addPallet());
277
+ dispatch(setFormOpen({ isOpen: true, formID: "pallet" }));
278
+ }, children: [_jsx("i", { className: "fa-duotone fa-pallet-boxes pright" }), " ", t("addPallet")] })] }), palletsCheck &&
267
279
  palletDimensions &&
268
280
  palletDimensions.length > 0 &&
269
- !error ? (_jsx(Grid, { item: true, xs: 12, children: _jsxs(Alert, { startDecorator: _jsx("i", { className: "fa-solid fa-thumbs-up" }), color: "neutral", children: [t("validSpecs"), " ", _jsx("b", { children: t("totalSpecs", {
281
+ !error ? (_jsx(Grid, { xs: 12, children: _jsxs(Alert, { startDecorator: _jsx("i", { className: "fa-solid fa-thumbs-up" }), color: "neutral", children: [t("validSpecs"), " ", _jsx("b", { children: t("totalSpecs", {
270
282
  feet: palletsCheck.feet,
271
283
  weight: Math.floor(palletsCheck.weight),
272
284
  pallets: palletsCheck.pallets,
273
- }) })] }) })) : ([]), error ? (_jsx(Grid, { item: true, xs: 12, children: _jsxs(Alert, { color: "danger", variant: "solid", startDecorator: _jsx("i", { className: "fa-solid fa-triangle-exclamation" }), children: [t("equipmentIssue"), " ", _jsx("b", { children: _error?.data?.message })] }) })) : ([])] }))] }), sm && !body.emptyLoad ? _jsx(FormPallet, {}) : []] }));
285
+ }) })] }) })) : ([]), error ? (_jsx(Grid, { xs: 12, children: _jsxs(Alert, { color: "danger", variant: "solid", startDecorator: _jsx("i", { className: "fa-solid fa-triangle-exclamation" }), children: [t("equipmentIssue"), " ", _jsx("b", { children: _error?.data?.message })] }) })) : ([])] }))] }), !body.emptyLoad ? _jsx(FormPallet, {}) : []] }));
274
286
  }
275
287
  const PalletsDataGrid = ({ customerPortal, perPalletClass, }) => {
276
288
  const body = useSelector(quoteBodySelector);
277
- const theme = useTheme();
278
- const sm = useMediaQuery(theme.breakpoints.down(600));
279
289
  const dispatch = useDispatch();
280
290
  const apiRef = useGridApiRef();
281
291
  const palletUpdate = async (_pallet) => {
@@ -292,7 +302,7 @@ const PalletsDataGrid = ({ customerPortal, perPalletClass, }) => {
292
302
  });
293
303
  }, []);
294
304
  return (_jsx(DataGridPremium, { density: "compact", apiRef: apiRef, onCellClick: (e) => {
295
- if (sm) {
305
+ if (window.matchMedia("(max-width:600px)").matches) {
296
306
  dispatch(setStagedPallet(e.row));
297
307
  dispatch(setFormOpen({ formID: "pallet", isOpen: true }));
298
308
  }
@@ -316,7 +326,14 @@ const PalletsDataGrid = ({ customerPortal, perPalletClass, }) => {
316
326
  */
317
327
  function ShipCons({ customerPortal }) {
318
328
  const { t } = useTranslation("salesKit");
319
- return (_jsxs(Paper, { sx: { p: 2, display: "flex", flexDirection: "column", gap: 1 }, children: [_jsxs(Typography, { variant: "h6", children: [_jsx("i", { className: "fa-duotone fa-location-dot pright" }), t("stops")] }), _jsx(Stops, { stopKind: SHIPPERS, customerPortal: customerPortal }), _jsx(TrailerAvailability, { customerPortal: customerPortal }), _jsx(Divider, {}), _jsx(Stops, { stopKind: CONSIGNEES, customerPortal: customerPortal })] }));
329
+ return (_jsxs(Sheet, { sx: {
330
+ p: 2,
331
+ display: "flex",
332
+ flexDirection: "column",
333
+ gap: 1,
334
+ borderRadius: "sm",
335
+ boxShadow: "md",
336
+ }, children: [_jsxs(Typography, { level: "title-lg", children: [_jsx("i", { className: "fa-duotone fa-location-dot pright" }), t("stops")] }), _jsx(Stops, { stopKind: SHIPPERS, customerPortal: customerPortal }), _jsx(TrailerAvailability, { customerPortal: customerPortal }), _jsx(Divider, {}), _jsx(Stops, { stopKind: CONSIGNEES, customerPortal: customerPortal })] }));
320
337
  }
321
338
  /**
322
339
  * ShipCons. Form that contains input to gather stops.
@@ -417,8 +434,6 @@ function Stops({ stopKind, customerPortal, }) {
417
434
  const { t } = useTranslation("salesKit");
418
435
  const apiRef = useGridApiRef();
419
436
  const stops = stopKind === SHIPPERS ? shippers : consignees;
420
- const theme = useTheme();
421
- const sm = useMediaQuery(theme.breakpoints.down(600));
422
437
  useHotkeys(keyboardShortcuts[stopKind], () => {
423
438
  dispatch(addStop(stopKind));
424
439
  }, {
@@ -435,10 +450,10 @@ function Stops({ stopKind, customerPortal, }) {
435
450
  const stopPosition = (params) => {
436
451
  dispatch(reorderStop(stopKind, params.oldIndex, params.targetIndex));
437
452
  };
438
- return (_jsxs(Sheet, { sx: { p: 1 }, children: [_jsxs(Typography, { variant: "h6", sx: { textTransform: "capitalize" }, children: [icons[stopKind], stopKind] }), _jsx(DataGridPremium, { density: "compact", autoHeight: true, rowReordering: true, hideFooter: true, slotProps: {
453
+ return (_jsxs(Sheet, { sx: { p: 1 }, children: [_jsxs(Typography, { level: "body-lg", sx: { textTransform: "capitalize" }, children: [icons[stopKind], stopKind] }), _jsx(DataGridPremium, { density: "compact", autoHeight: true, rowReordering: true, hideFooter: true, slotProps: {
439
454
  cell: { tabIndex: 0 },
440
455
  }, apiRef: apiRef, onCellClick: (e) => {
441
- if (sm) {
456
+ if (window.matchMedia("(max-width:600px)").matches) {
442
457
  dispatch(setStagedStop(e.row));
443
458
  dispatch(setFormOpen({ formID: "stop", isOpen: true }));
444
459
  }
@@ -446,11 +461,24 @@ function Stops({ stopKind, customerPortal, }) {
446
461
  apiRef.current.getCellMode(e.id, e.field) === "view") {
447
462
  apiRef.current?.startCellEditMode({ id: e.id, field: e.field });
448
463
  }
449
- }, processRowUpdate: stopUpdate, onRowOrderChange: stopPosition, getRowId: (p) => p.key, rows: stops ?? [], columns: getStopsColumnDef(dispatch, stopKind, stops ?? [], customerPortal, errors) }), _jsx(Tooltip, { title: keyboardShortcuts[stopKind], children: _jsxs(Button, { size: "sm", sx: { mt: 2 }, variant: "soft", color: "neutral", onClick: () => {
464
+ }, processRowUpdate: stopUpdate, onRowOrderChange: stopPosition, getRowId: (p) => p.key, rows: stops ?? [], columns: getStopsColumnDef(dispatch, stopKind, stops ?? [], customerPortal, errors) }), _jsx(Tooltip, { title: keyboardShortcuts[stopKind], children: _jsxs(Button, { size: "sm", sx: {
465
+ mt: 2,
466
+ display: {
467
+ xs: "none",
468
+ sm: "initial",
469
+ },
470
+ }, variant: "soft", color: "neutral", onClick: () => {
450
471
  dispatch(addStop(stopKind));
451
- if (sm)
452
- dispatch(setFormOpen({ isOpen: true, formID: "stop" }));
453
- }, children: [_jsx("i", { className: "fa-solid fa-location-dot pright" }), t("addStop")] }) })] }));
472
+ }, children: [_jsx("i", { className: "fa-solid fa-location-dot pright" }), t("addStop")] }) }), _jsxs(Button, { size: "sm", sx: {
473
+ mt: 2,
474
+ display: {
475
+ xs: "initial",
476
+ sm: "none",
477
+ },
478
+ }, variant: "soft", color: "neutral", onClick: () => {
479
+ dispatch(addStop(stopKind));
480
+ dispatch(setFormOpen({ isOpen: true, formID: "stop" }));
481
+ }, children: [_jsx("i", { className: "fa-solid fa-location-dot pright" }), t("addStop")] })] }));
454
482
  }
455
483
  /**
456
484
  *
@@ -480,83 +508,88 @@ function FormPallet() {
480
508
  if (stagedPallet)
481
509
  setPallet(stagedPallet);
482
510
  }, [stagedPallet]);
483
- return (_jsxs(Dialog, { open: open ?? false, onClose: close, fullScreen: true, fullWidth: true, children: [_jsx(DialogTitle, { children: _jsxs(Box, { sx: { display: "flex", justifyContent: "space-between" }, children: [_jsx(JoyTypography, { startDecorator: _jsx("i", { className: "fa-solid fa-pallet-boxes" }), level: "title-md", children: t("palletDetails") }), _jsxs(Box, { sx: { display: "flex", gap: 1 }, children: [_jsx(IconButton, { onClick: deletePallet, variant: "soft", color: "neutral", children: _jsx("i", { className: "fa-solid fa-trash" }) }), _jsx(IconButton, { onClick: close, variant: "soft", color: "neutral", children: _jsx("i", { className: "fa-solid fa-xmark" }) })] })] }) }), _jsx(Divider, {}), _jsx(DialogContent, { children: pallet ? (_jsxs(Box, { sx: { display: "flex", flexDirection: "column", gap: 2 }, children: [_jsx(Input, { onFocus: (event) => {
484
- event.target.select();
485
- }, type: "number", sx: {
486
- ".MuiInput-input": {
487
- textAlign: "right",
488
- },
489
- }, onChange: (e) => {
490
- setPallet((p) => {
491
- if (p)
492
- return { ...p, count: parseInt(e.target.value) };
493
- return p;
494
- });
495
- }, value: pallet?.count ?? "", startDecorator: "Count" }), _jsx(Checkbox, { checked: pallet?.stackable, onChange: (e) => {
496
- setPallet((p) => {
497
- if (p)
498
- return { ...p, stackable: e.target.checked };
499
- return p;
500
- });
501
- }, label: "Stackable" }), _jsx(Input, { type: "number", onFocus: (event) => {
502
- event.target.select();
503
- }, sx: {
504
- ".MuiInput-input": {
505
- textAlign: "right",
506
- },
507
- }, value: pallet?.length ?? "", onChange: (e) => {
508
- setPallet((p) => {
509
- if (p)
510
- return { ...p, length: parseInt(e.target.value) };
511
- return p;
512
- });
513
- }, startDecorator: "Length", placeholder: `In ${stagedPallet?.units}` }), _jsx(Input, { type: "number", onFocus: (event) => {
514
- event.target.select();
515
- }, sx: {
516
- ".MuiInput-input": {
517
- textAlign: "right",
518
- },
519
- }, value: pallet?.width ?? "", onChange: (e) => {
520
- setPallet((p) => {
521
- if (p)
522
- return { ...p, width: parseInt(e.target.value) };
523
- return p;
524
- });
525
- }, startDecorator: "Width", placeholder: `In ${stagedPallet?.units}` }), _jsx(Input, { type: "number", onFocus: (event) => {
526
- event.target.select();
527
- }, sx: {
528
- ".MuiInput-input": {
529
- textAlign: "right",
530
- },
531
- }, value: pallet?.height ?? "", onChange: (e) => {
532
- setPallet((p) => {
533
- if (p)
534
- return { ...p, height: parseInt(e.target.value) };
535
- return p;
536
- });
537
- }, startDecorator: "Height", placeholder: `In ${stagedPallet?.units}` }), _jsxs(Select, { startDecorator: "Units", sx: {
538
- ".MuiSelect-button": {
539
- justifyContent: "end",
540
- },
541
- }, value: stagedPallet?.units, onChange: (_e, value) => {
542
- setPallet((p) => {
543
- if (p)
544
- return { ...p, units: value };
545
- return p;
546
- });
547
- }, children: [_jsx(Option, { value: "inches", children: "Inches" }), _jsx(Option, { value: "feet", children: "Feet" })] }), _jsx(Input, { type: "number", onFocus: (event) => {
548
- event.target.select();
549
- }, sx: {
550
- ".MuiInput-input": {
551
- textAlign: "right",
552
- },
553
- }, value: pallet?.weight ?? "", onChange: (e) => {
554
- setPallet((p) => {
555
- if (p)
556
- return { ...p, weight: parseInt(e.target.value) };
557
- return p;
558
- });
559
- }, startDecorator: "Weight", placeholder: `In lbs` })] })) : ([]) }), _jsxs(DialogActions, { children: [_jsx(Button, { fullWidth: true, color: "neutral", variant: "soft", onClick: close, children: t("Cancel") }), _jsx(Button, { onClick: save, fullWidth: true, children: t("Save") })] })] }));
511
+ return (_jsx(Modal, { open: open ?? false, onClose: close, sx: {
512
+ display: {
513
+ sm: "initial",
514
+ md: "none",
515
+ },
516
+ }, children: _jsxs(ModalDialog, { layout: "fullscreen", children: [_jsx(DialogTitle, { children: _jsxs(Box, { sx: { display: "flex", width: "100%" }, children: [_jsx(Typography, { startDecorator: _jsx("i", { className: "fa-solid fa-pallet-boxes" }), level: "title-md", children: t("palletDetails") }), _jsxs(Box, { sx: { display: "flex", gap: 1, ml: "auto" }, children: [_jsx(IconButton, { onClick: deletePallet, variant: "soft", color: "neutral", children: _jsx("i", { className: "fa-solid fa-trash" }) }), _jsx(IconButton, { onClick: close, variant: "soft", color: "neutral", children: _jsx("i", { className: "fa-solid fa-xmark" }) })] })] }) }), _jsx(Divider, {}), _jsx(DialogContent, { children: pallet ? (_jsxs(Box, { sx: { display: "flex", flexDirection: "column", gap: 1 }, children: [_jsx(Input, { onFocus: (event) => {
517
+ event.target.select();
518
+ }, type: "number", sx: {
519
+ ".MuiInput-input": {
520
+ textAlign: "right",
521
+ },
522
+ }, onChange: (e) => {
523
+ setPallet((p) => {
524
+ if (p)
525
+ return { ...p, count: parseInt(e.target.value) };
526
+ return p;
527
+ });
528
+ }, value: pallet?.count ?? "", startDecorator: "Count" }), _jsx(Checkbox, { checked: pallet?.stackable, onChange: (e) => {
529
+ setPallet((p) => {
530
+ if (p)
531
+ return { ...p, stackable: e.target.checked };
532
+ return p;
533
+ });
534
+ }, label: "Stackable" }), _jsx(Input, { type: "number", onFocus: (event) => {
535
+ event.target.select();
536
+ }, sx: {
537
+ ".MuiInput-input": {
538
+ textAlign: "right",
539
+ },
540
+ }, value: pallet?.length ?? "", onChange: (e) => {
541
+ setPallet((p) => {
542
+ if (p)
543
+ return { ...p, length: parseInt(e.target.value) };
544
+ return p;
545
+ });
546
+ }, startDecorator: "Length", placeholder: `In ${stagedPallet?.units}` }), _jsx(Input, { type: "number", onFocus: (event) => {
547
+ event.target.select();
548
+ }, sx: {
549
+ ".MuiInput-input": {
550
+ textAlign: "right",
551
+ },
552
+ }, value: pallet?.width ?? "", onChange: (e) => {
553
+ setPallet((p) => {
554
+ if (p)
555
+ return { ...p, width: parseInt(e.target.value) };
556
+ return p;
557
+ });
558
+ }, startDecorator: "Width", placeholder: `In ${stagedPallet?.units}` }), _jsx(Input, { type: "number", onFocus: (event) => {
559
+ event.target.select();
560
+ }, sx: {
561
+ ".MuiInput-input": {
562
+ textAlign: "right",
563
+ },
564
+ }, value: pallet?.height ?? "", onChange: (e) => {
565
+ setPallet((p) => {
566
+ if (p)
567
+ return { ...p, height: parseInt(e.target.value) };
568
+ return p;
569
+ });
570
+ }, startDecorator: "Height", placeholder: `In ${stagedPallet?.units}` }), _jsxs(Select, { startDecorator: "Units", sx: {
571
+ ".MuiSelect-button": {
572
+ justifyContent: "end",
573
+ },
574
+ }, value: stagedPallet?.units, onChange: (_e, value) => {
575
+ setPallet((p) => {
576
+ if (p)
577
+ return { ...p, units: value };
578
+ return p;
579
+ });
580
+ }, children: [_jsx(Option, { value: "inches", children: "Inches" }), _jsx(Option, { value: "feet", children: "Feet" })] }), _jsx(Input, { type: "number", onFocus: (event) => {
581
+ event.target.select();
582
+ }, sx: {
583
+ ".MuiInput-input": {
584
+ textAlign: "right",
585
+ },
586
+ }, value: pallet?.weight ?? "", onChange: (e) => {
587
+ setPallet((p) => {
588
+ if (p)
589
+ return { ...p, weight: parseInt(e.target.value) };
590
+ return p;
591
+ });
592
+ }, startDecorator: "Weight", placeholder: `In lbs` })] })) : ([]) }), _jsxs(DialogActions, { children: [_jsx(Button, { onClick: save, fullWidth: true, children: t("Save") }), _jsx(Button, { fullWidth: true, color: "neutral", variant: "soft", onClick: close, children: t("Cancel") })] })] }) }));
560
593
  }
561
594
  /**
562
595
  *
@@ -592,48 +625,48 @@ function FormStop({ customerPortal }) {
592
625
  setStop(stagedStop);
593
626
  }
594
627
  }, [stagedStop]);
595
- return (_jsxs(Dialog, { open: open ?? false, onClose: close, fullScreen: true, fullWidth: true, children: [_jsx(DialogTitle, { children: _jsxs(Box, { sx: { display: "flex", justifyContent: "space-between" }, children: [_jsx(JoyTypography, { startDecorator: _jsx("i", { className: "fa-solid fa-location-dot" }), level: "title-md", children: t("stopDetails") }), _jsxs(Box, { sx: { display: "flex", gap: 1 }, children: [_jsx(IconButton, { onClick: deleteStop, variant: "soft", color: "neutral", children: _jsx("i", { className: "fa-solid fa-trash" }) }), _jsx(IconButton, { onClick: close, variant: "soft", color: "neutral", children: _jsx("i", { className: "fa-solid fa-xmark" }) })] })] }) }), _jsx(Divider, {}), _jsx(DialogContent, { children: stop ? (_jsxs(Box, { sx: { display: "flex", gap: 2, flexDirection: "column" }, children: [_jsxs(FormControl, { children: [_jsx(FormLabel, { children: _jsx(JoyTypography, { endDecorator: _jsx(JoyTypography, { color: "danger", children: "*" }), children: "Enter zip or city, state..." }) }), _jsx(Input, { onFocus: (event) => {
596
- event.target.select();
597
- }, type: "number", placeholder: "Enter zip or city, state...", autoComplete: "off", onChange: (e) => {
598
- setStop((p) => {
599
- if (p)
600
- return { ...p, zip: e.target.value };
601
- return p;
602
- });
603
- }, value: stop?.zip ?? "" })] }), _jsx(LocationInput, { customerPortal: customerPortal, zip: stop.zip, locationID: stop.locationId, onChange: (e) => {
604
- setStop((p) => {
605
- if (p)
606
- return { ...p, locationId: e?.id };
607
- return p;
608
- });
609
- } }), isShipper ? (_jsx(NerdDatePicker, { value: stop.date ? DateTime.fromISO(stop.date) : null, label: _jsx(JoyTypography, { endDecorator: _jsx(JoyTypography, { color: "danger", children: "*" }), children: "Pickup Date" }), inputProps: {
610
- placeholder: "Pickup Date",
611
- variant: "outlined",
612
- }, onChange: (e) => {
613
- setStop((p) => {
614
- if (p)
615
- return { ...p, date: e?.toISO() ?? "" };
616
- return p;
617
- });
618
- }, openCalendar: false, datePickerProps: {
619
- shouldDisableDate(d) {
620
- return typeof d != "string" && d < DateTime.now();
621
- },
622
- autoFocus: true,
623
- closeOnSelect: true,
624
- renderDay: (date, _selectedDay, props) => (_jsx(RenderDay, { handleChange: (e) => {
625
- setStop((p) => {
626
- if (p)
627
- return { ...p, date: e?.toISO() ?? "" };
628
- return p;
629
- });
630
- }, date: date, pickersDayProps: props }, date.toString())),
631
- } })) : ([]), _jsx(AccessorialInput, { accessorialIDs: stop.accessorialIds, onChange: (e) => {
632
- setStop((p) => {
633
- if (p)
634
- return { ...p, accessorialIds: e };
635
- return p;
636
- });
637
- } })] })) : ([]) }), _jsxs(DialogActions, { children: [_jsx(Button, { fullWidth: true, color: "neutral", variant: "soft", onClick: close, children: t("Cancel") }), _jsx(Button, { onClick: save, fullWidth: true, children: t("Save") })] })] }));
628
+ return (_jsx(Modal, { open: Boolean(open), onClose: close, children: _jsxs(ModalDialog, { layout: "fullscreen", children: [_jsx(DialogTitle, { children: _jsxs(Box, { sx: { display: "flex", width: "100%" }, children: [_jsx(Typography, { startDecorator: _jsx("i", { className: "fa-solid fa-location-dot" }), level: "title-md", children: t("stopDetails") }), _jsxs(Box, { sx: { display: "flex", gap: 1, ml: "auto" }, children: [_jsx(IconButton, { onClick: deleteStop, variant: "soft", color: "neutral", children: _jsx("i", { className: "fa-solid fa-trash" }) }), _jsx(IconButton, { onClick: close, variant: "soft", color: "neutral", children: _jsx("i", { className: "fa-solid fa-xmark" }) })] })] }) }), _jsx(Divider, {}), _jsx(DialogContent, { children: stop ? (_jsxs(Box, { sx: { display: "flex", gap: 2, flexDirection: "column" }, children: [_jsxs(FormControl, { children: [_jsx(FormLabel, { children: _jsx(Typography, { endDecorator: _jsx(Typography, { color: "danger", children: "*" }), children: "Enter zip or city, state..." }) }), _jsx(Input, { onFocus: (event) => {
629
+ event.target.select();
630
+ }, type: "number", placeholder: "Enter zip or city, state...", autoComplete: "off", onChange: (e) => {
631
+ setStop((p) => {
632
+ if (p)
633
+ return { ...p, zip: e.target.value };
634
+ return p;
635
+ });
636
+ }, value: stop?.zip ?? "" })] }), _jsx(LocationInput, { customerPortal: customerPortal, zip: stop.zip, locationID: stop.locationId, onChange: (e) => {
637
+ setStop((p) => {
638
+ if (p)
639
+ return { ...p, locationId: e?.id };
640
+ return p;
641
+ });
642
+ } }), isShipper ? (_jsx(NerdDatePicker, { value: stop.date ? DateTime.fromISO(stop.date) : null, label: _jsx(Typography, { endDecorator: _jsx(Typography, { color: "danger", children: "*" }), children: "Pickup Date" }), inputProps: {
643
+ placeholder: "Pickup Date",
644
+ variant: "outlined",
645
+ }, onChange: (e) => {
646
+ setStop((p) => {
647
+ if (p)
648
+ return { ...p, date: e?.toISO() ?? "" };
649
+ return p;
650
+ });
651
+ }, openCalendar: false, datePickerProps: {
652
+ shouldDisableDate(d) {
653
+ return typeof d != "string" && d < DateTime.now();
654
+ },
655
+ autoFocus: true,
656
+ closeOnSelect: true,
657
+ renderDay: (date, _selectedDay, props) => (_jsx(RenderDay, { handleChange: (e) => {
658
+ setStop((p) => {
659
+ if (p)
660
+ return { ...p, date: e?.toISO() ?? "" };
661
+ return p;
662
+ });
663
+ }, date: date, pickersDayProps: props }, date.toString())),
664
+ } })) : ([]), _jsx(AccessorialInput, { accessorialIDs: stop.accessorialIds, onChange: (e) => {
665
+ setStop((p) => {
666
+ if (p)
667
+ return { ...p, accessorialIds: e };
668
+ return p;
669
+ });
670
+ } })] })) : ([]) }), _jsxs(DialogActions, { children: [_jsx(Button, { onClick: save, fullWidth: true, children: t("Save") }), _jsx(Button, { fullWidth: true, color: "neutral", variant: "soft", onClick: close, children: t("Cancel") })] })] }) }));
638
671
  }
639
672
  //# sourceMappingURL=form.js.map