@webx-ui/module-delivery 0.0.0-stage → 0.1.0

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 (47) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +58 -2
  3. package/dist/BindingsPage-pjTbDDWA.js +280 -0
  4. package/dist/BindingsPage-pjTbDDWA.js.map +1 -0
  5. package/dist/BindingsPage.d.ts +2 -0
  6. package/dist/CarrierDialog.d.ts +26 -0
  7. package/dist/CarriersPage-Dpre8dbl.js +650 -0
  8. package/dist/CarriersPage-Dpre8dbl.js.map +1 -0
  9. package/dist/CarriersPage.d.ts +2 -0
  10. package/dist/GeographyPage-IBg0JnNH.js +750 -0
  11. package/dist/GeographyPage-IBg0JnNH.js.map +1 -0
  12. package/dist/GeographyPage.d.ts +2 -0
  13. package/dist/LocalityDialog.d.ts +39 -0
  14. package/dist/LocalitySearch.d.ts +33 -0
  15. package/dist/MethodPane.d.ts +29 -0
  16. package/dist/MethodsPage-Bpzsa_6v.js +414 -0
  17. package/dist/MethodsPage-Bpzsa_6v.js.map +1 -0
  18. package/dist/MethodsPage.d.ts +2 -0
  19. package/dist/OrderChangeDialog.d.ts +7 -0
  20. package/dist/OrderDeliveryNode.d.ts +2 -0
  21. package/dist/PointDialog.d.ts +22 -0
  22. package/dist/PointsPage-CzYIM86R.js +336 -0
  23. package/dist/PointsPage-CzYIM86R.js.map +1 -0
  24. package/dist/PointsPage.d.ts +2 -0
  25. package/dist/PopularPage-CSrvVg4o.js +141 -0
  26. package/dist/PopularPage-CSrvVg4o.js.map +1 -0
  27. package/dist/PopularPage.d.ts +2 -0
  28. package/dist/RegionDialog.d.ts +11 -0
  29. package/dist/WaybillDialog.d.ts +8 -0
  30. package/dist/api.d.ts +151 -0
  31. package/dist/fields/CountryField.d.ts +14 -0
  32. package/dist/fields/LocalitiesField.d.ts +14 -0
  33. package/dist/fields/LocalityField.d.ts +16 -0
  34. package/dist/fields/PointKindField.d.ts +20 -0
  35. package/dist/fields/RegionField.d.ts +19 -0
  36. package/dist/fields/ScheduleField.d.ts +24 -0
  37. package/dist/i18n.d.ts +5 -0
  38. package/dist/index-5nt0M0In.js +2539 -0
  39. package/dist/index-5nt0M0In.js.map +1 -0
  40. package/dist/index.d.ts +6 -0
  41. package/dist/index.js +9 -0
  42. package/dist/index.js.map +1 -0
  43. package/dist/messages.d.ts +7 -0
  44. package/dist/module.d.ts +19 -0
  45. package/dist/style.css +1 -0
  46. package/dist/types.d.ts +467 -0
  47. package/package.json +64 -3
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index-5nt0M0In.js","sources":["../src/api.ts","../src/fields/CountryField.vue","../src/messages.ts","../src/i18n.ts","../src/LocalityDialog.vue","../src/LocalitySearch.vue","../src/fields/LocalitiesField.vue","../src/fields/LocalityField.vue","../src/fields/PointKindField.vue","../src/fields/RegionField.vue","../src/fields/ScheduleField.vue","../src/OrderChangeDialog.vue","../src/WaybillDialog.vue","../src/OrderDeliveryNode.vue","../src/module.ts"],"sourcesContent":["import type { AdminContext } from '@webx-ui/module-admin'\nimport type { ScreenModel } from '@webx-ui/schema'\nimport type {\n ChangeInput,\n ChangeMethod,\n ChangeOption,\n ChangeOutcome,\n ChangeTown,\n BatchResult,\n BindingsPage,\n CarrierDetail,\n CarrierRow,\n SettingOption,\n Countries,\n LocalityBrief,\n LocalityDetail,\n LocalityPage,\n MethodBlank,\n MethodDetail,\n MethodRow,\n MethodType,\n OrderDelivery,\n Option,\n PointDetail,\n PointsPage,\n RegionRow,\n ShipmentLabel,\n WaybillChanges,\n WaybillDraft,\n} from './types'\n\n/** Only what was asked for: an empty filter is no filter. */\nfunction query(params: Record<string, string | number | boolean | null | undefined>): string {\n const search = new URLSearchParams()\n\n for (const [key, value] of Object.entries(params)) {\n if (value === null || value === undefined || value === '' || value === false) continue\n search.set(key, String(value === true ? 1 : value))\n }\n\n return search.size > 0 ? `?${search}` : ''\n}\n\n/** Everything under `/delivery`, below the panel's API path (spec §14). */\nexport function createDeliveryApi(admin: AdminContext) {\n const base = `${admin.apiPath}/delivery`\n const http = admin.http\n const data = <T>(body: { data: T }): T => body.data\n\n return {\n methods: () =>\n http\n .get<{ data: { methods: MethodRow[]; types: MethodType[] } }>(`${base}/methods`)\n .then(data),\n method: (id: number) => http.get<{ data: MethodDetail }>(`${base}/methods/${id}`).then(data),\n blank: (type: string) =>\n http.get<{ data: MethodBlank }>(`${base}/methods/blank${query({ type })}`).then(data),\n createMethod: (type: string, values: ScreenModel) =>\n http.post<{ data: MethodDetail }>(`${base}/methods`, { type, values }).then(data),\n saveMethod: (id: number, values: ScreenModel) =>\n http.put<{ data: MethodDetail }>(`${base}/methods/${id}`, { values }).then(data),\n removeMethod: (id: number) => http.delete<void>(`${base}/methods/${id}`).then(() => undefined),\n orderMethods: (ids: number[]) =>\n http.put<void>(`${base}/methods/order`, { ids }).then(() => undefined),\n defineKind: (kind: string, names: Record<string, string>) =>\n http.post<{ data: Option[] }>(`${base}/methods/point-kinds`, { kind, names }).then(data),\n\n points: (params: {\n page?: number\n per_page?: number\n q?: string\n kind?: string\n state?: string\n /** `title`, `kind`, `locality` or `active`; a minus — the other way round. */\n sort?: string\n }) => http.get<PointsPage>(`${base}/points${query(params)}`),\n point: (id: number) => http.get<{ data: PointDetail }>(`${base}/points/${id}`).then(data),\n createPoint: (values: ScreenModel) =>\n http.post<{ data: PointDetail }>(`${base}/points`, { values }).then(data),\n savePoint: (id: number, values: ScreenModel) =>\n http.put<{ data: PointDetail }>(`${base}/points/${id}`, { values }).then(data),\n removePoint: (id: number) => http.delete<void>(`${base}/points/${id}`).then(() => undefined),\n\n carriers: () => http.get<{ data: CarrierRow[] }>(`${base}/carriers`).then(data),\n carrier: (key: string) =>\n http.get<{ data: CarrierDetail }>(`${base}/carriers/${key}`).then(data),\n saveCarrier: (\n key: string,\n body: {\n enabled?: boolean\n settings?: Record<string, unknown>\n credentials?: Record<string, string>\n clear?: string[]\n },\n ) => http.put<{ data: CarrierDetail }>(`${base}/carriers/${key}`, body).then(data),\n /**\n * The options of a settings field from the carrier's account (§5.2 of a satellite's spec): the\n * values of what it depends on, what was typed, and `fresh` past the cache. No key travels.\n */\n carrierOptions: (\n key: string,\n field: string,\n params: { values?: Record<string, unknown>; q?: string; fresh?: boolean } = {},\n ) => {\n const values: Record<string, string> = {}\n\n for (const [name, value] of Object.entries(params.values ?? {})) {\n if (value !== null && value !== undefined && value !== '')\n values[`values[${name}]`] = String(value)\n }\n\n return http\n .get<{ data: SettingOption[] }>(\n `${base}/carriers/${key}/options/${field}${query({\n ...values,\n q: params.q || undefined,\n fresh: params.fresh ? 1 : undefined,\n })}`,\n )\n .then(data)\n },\n testCarrier: (key: string, credentials: Record<string, string>) =>\n http\n .post<{\n data: { ok: boolean; message: string | null }\n }>(`${base}/carriers/${key}/test`, { credentials })\n .then(data),\n runSync: (key: string, directory: string) =>\n http\n .post<{ data: { queued: string[] } }>(`${base}/carriers/${key}/sync/${directory}`, {})\n .then(data),\n confirmRemoval: (key: string, directory: string) =>\n http.post<{ data: unknown }>(`${base}/carriers/${key}/confirm/${directory}`, {}).then(data),\n\n countries: () => http.get<{ data: Countries }>(`${base}/geography/countries`).then(data),\n enableCountry: (code: string) =>\n http.post<void>(`${base}/geography/countries`, { code }).then(() => undefined),\n disableCountry: (code: string) =>\n http.delete<void>(`${base}/geography/countries/${code}`).then(() => undefined),\n /** Gone when nothing is in it, switched off otherwise — the answer says which. */\n removeCountry: (code: string) =>\n http\n .post<{ data: { removal: 'deleted' | 'deactivated' } }>(\n `${base}/geography/countries/${code}/remove`,\n {},\n )\n .then(data)\n .then((answer) => answer.removal),\n orderCountries: (codes: string[]) =>\n http.put<void>(`${base}/geography/countries/order`, { codes }).then(() => undefined),\n lead: (code: string, carrier: string | null) =>\n http\n .put<void>(`${base}/geography/countries/${code}/leader`, { carrier })\n .then(() => undefined),\n\n regions: (country: string) =>\n http.get<{ data: RegionRow[] }>(`${base}/geography/regions${query({ country })}`).then(data),\n createRegion: (country: string, names: Record<string, string>, code?: string | null) =>\n http\n .post<{ data: { id: number } }>(`${base}/geography/regions`, { country, names, code })\n .then(data),\n saveRegion: (id: number, changes: { names?: Record<string, string>; code?: string | null }) =>\n http.put<void>(`${base}/geography/regions/${id}`, changes).then(() => undefined),\n /** The country's regions in the order dragged to: the selects and the list read them so. */\n orderRegions: (country: string, ids: number[]) =>\n http.put<void>(`${base}/geography/regions/order`, { country, ids }).then(() => undefined),\n removeRegion: (id: number) =>\n http.delete<void>(`${base}/geography/regions/${id}`).then(() => undefined),\n\n localities: (params: {\n page?: number\n per_page?: number\n q?: string\n country?: string\n region?: number | null\n source?: string\n state?: string\n }) => http.get<LocalityPage>(`${base}/geography/localities${query(params)}`),\n suggest: (q: string, country?: string | null) =>\n http\n .get<{\n data: LocalityBrief[]\n }>(`${base}/geography/localities/suggest${query({ q, country })}`)\n .then(data),\n brief: (ids: number[]) => {\n const search = new URLSearchParams()\n\n for (const id of ids) search.append('ids[]', String(id))\n\n return http\n .get<{ data: LocalityBrief[] }>(`${base}/geography/localities/brief?${search}`)\n .then(data)\n },\n locality: (id: number) =>\n http.get<{ data: LocalityDetail }>(`${base}/geography/localities/${id}`).then(data),\n createLocality: (values: ScreenModel, force = false) =>\n http\n .post<{ data: LocalityDetail }>(`${base}/geography/localities`, { values, force })\n .then(data),\n saveLocality: (id: number, values: ScreenModel, force = false) =>\n http\n .put<{ data: LocalityDetail }>(`${base}/geography/localities/${id}`, { values, force })\n .then(data),\n removeLocality: (id: number) =>\n http\n .delete<{\n data: { removal: 'deleted' | 'deactivated' }\n }>(`${base}/geography/localities/${id}`)\n .then(data),\n activateLocality: (id: number) =>\n http.post<void>(`${base}/geography/localities/${id}/activate`, {}).then(() => undefined),\n deactivateLocality: (id: number) =>\n http.post<void>(`${base}/geography/localities/${id}/deactivate`, {}).then(() => undefined),\n\n popular: () => http.get<{ data: LocalityBrief[] }>(`${base}/popular`).then(data),\n setPopular: (ids: number[]) =>\n http.put<{ data: LocalityBrief[] }>(`${base}/popular`, { ids }).then(data),\n addPopular: (id: number) =>\n http.post<{ data: LocalityBrief[] }>(`${base}/popular`, { locality_id: id }).then(data),\n removePopular: (id: number) =>\n http.delete<{ data: LocalityBrief[] }>(`${base}/popular/${id}`).then(data),\n\n bindings: (params: { page?: number; per_page?: number; carrier?: string; reason?: string }) =>\n http.get<BindingsPage>(`${base}/bindings${query(params)}`),\n batch: (body: {\n action: 'bind' | 'create' | 'ignore'\n ids?: number[]\n all?: boolean\n carrier?: string\n reason?: string\n locality_id?: number\n }) => http.post<{ data: BatchResult }>(`${base}/bindings/batch`, body).then(data),\n\n /** The tab «Delivery» of an order's card (§14.2). */\n orderDelivery: (order: number) =>\n http.get<{ data: OrderDelivery }>(`${base}/orders/${order}`).then(data),\n createWaybill: (order: number, changes: WaybillChanges) =>\n http.post<{ data: OrderDelivery }>(`${base}/orders/${order}/waybill`, changes).then(data),\n previewWaybill: (order: number, changes: WaybillChanges) =>\n http\n .post<{ data: { request: WaybillDraft } }>(`${base}/orders/${order}/waybill`, {\n ...changes,\n dry_run: true,\n })\n .then((body) => body.data.request),\n /** «Change delivery» (decision of 02.11.2026): the checkout's search, for the order's lines. */\n changeTowns: (order: number, q: string) =>\n http\n .get<{\n data: { localities: ChangeTown[]; popular: ChangeTown[] }\n }>(`${base}/orders/${order}/change/localities${query({ q })}`)\n .then(data),\n changeMethods: (order: number, locality: number) =>\n http\n .get<{\n data: { locality: { id: number; label: string }; methods: ChangeMethod[] }\n }>(`${base}/orders/${order}/change/methods${query({ locality })}`)\n .then(data),\n changePoints: (order: number, locality: number, method: number, q: string, page = 1) =>\n http\n .get<{\n data: { options: ChangeOption[]; total: number; page: number; more: boolean }\n }>(`${base}/orders/${order}/change/points${query({ locality, method, q, page })}`)\n .then(data),\n changeStreets: (order: number, locality: number, method: number, q: string) =>\n http\n .get<{\n data: { options: ChangeOption[] }\n }>(`${base}/orders/${order}/change/streets${query({ locality, method, q })}`)\n .then(data),\n changeDelivery: (order: number, input: ChangeInput) =>\n http\n .post<{\n data: { change: ChangeOutcome; delivery?: OrderDelivery }\n }>(`${base}/orders/${order}/change`, input)\n .then(data),\n trackOrder: (order: number) =>\n http.post<{ data: OrderDelivery }>(`${base}/orders/${order}/track`, {}).then(data),\n cancelShipment: (shipment: number) =>\n http.post<{ data: OrderDelivery }>(`${base}/shipments/${shipment}/cancel`, {}).then(data),\n shipmentLabel: (shipment: number) =>\n http.get<{ data: ShipmentLabel }>(`${base}/shipments/${shipment}/label`).then(data),\n }\n}\n\nexport type DeliveryApi = ReturnType<typeof createDeliveryApi>\n\n/** The body of a refusal, when the panel's HTTP client kept one. */\nexport function bodyOf<T>(error: unknown): T | null {\n return ((error as { body?: T } | null)?.body ?? null) as T | null\n}\n\nexport function statusOf(error: unknown): number | null {\n const status = (error as { status?: number } | null)?.status\n\n return typeof status === 'number' ? status : null\n}\n","<script setup lang=\"ts\">\nimport { computed, onMounted, ref } from 'vue'\nimport { WxSelect } from '@webx-ui/core'\nimport { useAdmin } from '@webx-ui/module-admin'\nimport { createDeliveryApi } from '../api'\nimport type { CountryRow } from '../types'\n\n/**\n * `wx-delivery-country`: a country of the site by its code. The site's countries, the ones on\n * first; a locality is made in a country the shop already knows (Geography → Countries).\n */\ndefineOptions({ name: 'WxDeliveryCountryField' })\n\nconst props = withDefaults(defineProps<{ disabled?: boolean }>(), { disabled: false })\n\nconst value = defineModel<string | null>({ default: null })\n\nconst api = createDeliveryApi(useAdmin())\nconst countries = ref<CountryRow[]>([])\n\nonMounted(async () => {\n try {\n countries.value = (await api.countries()).countries\n } catch {\n countries.value = []\n }\n\n // One country on: it is the answer, and the field fills itself.\n const on = countries.value.filter((one) => one.active)\n\n if (value.value === null && on.length === 1) value.value = on[0]!.code\n})\n\nconst options = computed(() =>\n countries.value.map((one) => ({ value: one.code, label: `${one.name} (${one.code})` })),\n)\n</script>\n\n<template>\n <wx-select v-model=\"value\" :options=\"options\" filterable :disabled=\"props.disabled\" />\n</template>\n","import type { Messages } from '@webx-ui/module-admin'\n\n/**\n * The English this package speaks on its own, before the server's dictionary arrives, or without\n * one. The server ships the same lines under `webx-delivery::panel.*` and overrides these;\n * `messages.test.ts` keeps the two sets of keys equal.\n */\nexport const deliveryMessages: Record<string, Messages> = {\n panel: {\n sections: {\n group: 'Delivery',\n methods: 'Methods',\n points: 'Own points',\n carriers: 'Carriers',\n geography: 'Geography',\n popular: 'Popular towns',\n bindings: 'Binding queue',\n },\n common: {\n save: 'Save',\n saved: 'Saved.',\n 'save-failed': 'Not saved: check the fields.',\n cancel: 'Cancel',\n delete: 'Delete',\n add: 'Add',\n create: 'Create',\n search: 'Search',\n close: 'Close',\n untitled: 'Untitled',\n active: 'Active',\n inactive: 'Off',\n 'any-state': 'Any state',\n 'order-failed': 'The order was not saved.',\n 'empty-search': 'Nothing matches the search.',\n drag: 'Drag a row by its handle to change the order.',\n edit: 'Edit',\n change: 'Change',\n },\n types: {\n 'store-pickup': \"Pick-up at the shop's points\",\n 'store-courier': \"The shop's courier\",\n kinds: {\n branch: ':carrier branch',\n locker: ':carrier locker',\n courier: ':carrier courier',\n door: ':carrier courier',\n },\n asks: {\n point: 'Pick-up with :carrier',\n address: 'Delivery by :carrier',\n nothing: ':carrier',\n },\n help: {\n 'store-pickup':\n 'The buyer collects the order at one of your own points: a store or a pick-up point.',\n 'store-courier':\n \"Your own courier brings the order to the buyer's address, in the localities you choose.\",\n point: \"The buyer chooses one of the carrier's branches or lockers.\",\n address: \"The carrier brings the order to the buyer's address.\",\n nothing: 'The buyer is asked for nothing but the locality.',\n },\n },\n method: {\n card: 'Method',\n titles: 'Name',\n descriptions: 'Description',\n 'descriptions-help': 'One line under the name in the checkout: terms, how long it takes.',\n price: 'Price',\n 'price-help': 'Empty or 0 — free.',\n 'point-kind': 'Kind of points',\n 'point-kind-help':\n 'Which of your points this method offers: the checkout lists only the points of this kind.',\n localities: 'Localities',\n 'localities-help': 'Where the courier goes. Empty — nowhere: the method is not offered.',\n countries: 'Countries',\n 'countries-help': 'None ticked — every country of the site.',\n 'paid-by-store': 'Understands «the shop pays for delivery»',\n 'paid-by-store-help': 'A discount rule that grants free delivery makes this method free.',\n enabled: 'On',\n 'enabled-help': 'Off — the checkout does not offer it.',\n new: 'Add a method',\n 'choose-type': 'What kind of method?',\n empty: 'No delivery methods yet.',\n 'empty-help': \"Add the shop's pick-up or courier, or a carrier's method.\",\n off: 'Off',\n free: 'Free',\n 'all-countries': 'All countries',\n 'missing-type': 'Its type is not installed',\n 'delete-title': 'Delete «:name»?',\n 'delete-text': 'The checkout stops offering it at once. Orders keep what was chosen.',\n deleted: 'The method is deleted.',\n choose: 'Choose a method',\n 'choose-help': \"Or add one: the shop's own, or a carrier's.\",\n 'new-kind': 'New kind of points',\n 'kind-key': 'Code',\n 'kind-key-help': 'Latin letters, digits and dashes: parcel-shop.',\n 'kind-name': 'Name',\n 'kind-created': 'The kind is added.',\n 'point-kind-carrier-help':\n \"The carrier's points this method offers: its branches or its lockers.\",\n 'new-kind-help':\n 'A kind groups your own points, like «Store» or «Pick-up point». Name a new one — say «Parcel shop» — to offer those points under a method of their own.',\n },\n point: {\n kind: 'Kind',\n 'kind-help': 'A method of this kind offers the point.',\n titles: 'Name',\n locality: 'Locality',\n address: 'Address',\n lat: 'Latitude',\n lng: 'Longitude',\n phone: 'Phone',\n active: 'Active',\n 'active-help': 'Off — the checkout does not show it.',\n schedule: 'Opening hours',\n 'schedule-help': 'Hours as 09:00–18:00; several intervals separated by commas.',\n new: 'Add a point',\n empty: 'No points of the shop yet.',\n 'empty-help': 'A store or a pick-up point: a pick-up method offers it in its locality.',\n 'any-kind': 'Any kind',\n 'delete-title': 'Delete «:name»?',\n 'delete-text': 'A buyer who chose it chooses again. Orders keep what was chosen.',\n deleted: 'The point is deleted.',\n title: 'Point',\n today: 'Today',\n intro:\n \"Places where buyers collect orders themselves: your stores and pick-up points. The checkout offers them under the pick-up methods of the same kind. Carriers' branches come from the carriers and are not kept here.\",\n },\n schedule: {\n days: {\n mon: 'Monday',\n tue: 'Tuesday',\n wed: 'Wednesday',\n thu: 'Thursday',\n fri: 'Friday',\n sat: 'Saturday',\n sun: 'Sunday',\n },\n 'not-said': 'Not said',\n closed: 'Closed',\n hours: 'Open',\n around: 'Around the clock',\n exceptions: 'Exceptions',\n 'add-exception': 'Add a date',\n date: 'Date',\n remove: 'Remove',\n invalid: 'Write the hours as 09:00–18:00.',\n },\n locality: {\n names: 'Name',\n 'names-help': 'In the languages of the site; the main one is required.',\n kind: 'Type',\n country: 'Country',\n region: 'Region',\n 'region-help': 'Not in the list? Add the region in Geography → Regions.',\n 'no-region': 'No region',\n lat: 'Latitude',\n lng: 'Longitude',\n weight: 'Weight',\n 'weight-help': 'Heavier places come first in the suggestions. Empty — by type and points.',\n active: 'Active',\n 'active-help': 'Off — not suggested to buyers.',\n new: 'Add a locality',\n title: 'Locality',\n duplicate: 'A locality like this already exists.',\n 'duplicate-help': 'Pick the existing one, or create a new one anyway.',\n pick: 'Pick it',\n 'create-anyway': 'Create anyway',\n 'delete-title': 'Delete «:name»?',\n 'delete-text': 'Nothing refers to it: it is deleted for good.',\n 'held-text':\n 'Referred to by: :what. It will be switched off instead and leave the suggestions.',\n deleted: 'The locality is deleted.',\n deactivated: 'The locality is in use, so it is switched off.',\n activate: 'Switch on',\n activated: 'The locality is on.',\n deactivate: 'Switch off',\n 'switched-off': 'The locality is off.',\n 'manual-fields': 'Changed by hand, kept by the sync: :fields.',\n source: 'Source',\n sources: {\n manual: 'By hand',\n import: 'Import',\n carrier: 'Carrier',\n },\n 'nothing-found': 'Nothing found.',\n 'add-named': 'Add «:name»',\n inactive: 'Off',\n bindings: 'Carriers',\n empty: 'No localities yet.',\n 'empty-help': 'Add them by hand, import a file or connect a carrier.',\n 'found-in': 'Found in :countries — choose the country in the filters.',\n 'found-off':\n 'Found in switched-off countries: :countries. Switch the country on in Countries to list them here.',\n 'any-country': 'Any country',\n search: 'Search by name',\n 'any-region': 'Any region',\n 'any-source': 'Any source',\n saved: 'The locality is saved.',\n created: 'The locality is added.',\n },\n country: {\n title: 'Countries',\n add: 'Switch on a country',\n choose: 'Choose a country',\n regions: 'Regions',\n localities: 'Localities',\n on: 'On',\n off: 'Off',\n enable: 'Switch on',\n disable: 'Switch off',\n disabled: 'The country is off: its localities stay where they are used.',\n leader: 'Leading carrier',\n 'leader-none': 'The first to sync',\n 'leader-fixed': \"Set in the site's config.\",\n empty: 'No countries yet.',\n 'empty-help': 'Switch on the countries the shop delivers to.',\n 'localities-tab': 'Localities',\n 'leader-help':\n \"The leading carrier creates the country's shared localities; the other carriers bind their records to them. «The first to sync» — whichever carrier syncs the country first becomes its leader.\",\n remove: 'Remove',\n 'remove-title': 'Remove «:name»?',\n 'remove-text': 'The country has no regions or localities: it is deleted.',\n 'remove-held':\n 'The country has regions or localities, and points and orders may refer to them. It will be switched off instead: the checkout stops offering it, the records stay.',\n removed: 'The country is removed.',\n deactivated: 'The country is in use, so it is switched off.',\n },\n region: {\n title: 'Regions',\n add: 'Add a region',\n name: 'Name',\n code: 'Code',\n 'code-help': 'ISO 3166-2 without the country, if there is one.',\n 'delete-title': 'Delete «:name»?',\n 'delete-text': 'Only an empty region can be deleted.',\n deleted: 'The region is deleted.',\n saved: 'The region is saved.',\n empty: 'The country has no regions.',\n 'country-first': 'Choose a country first.',\n edit: 'Edit',\n 'new-title': 'New region',\n 'edit-title': 'Region',\n 'delete-held': 'The region has localities: move them to another region or delete them first.',\n },\n options: {\n 'no-options': 'Carrier :carrier has no options from its account.',\n 'no-field': 'The carrier has no field :field with options from its account.',\n 'no-key': 'Set the API key and check the connection first.',\n 'choose-first': 'Choose first: :field',\n unavailable: \"Could not get the list from the carrier's account: :reason\",\n 'choose-from-list': 'Choose from the list.',\n missing: \":label — not in the carrier's account\",\n 'missing-list': \"Not in the carrier's account any more: :list\",\n refresh: 'Refresh lists',\n retry: 'Try again',\n search: 'Type to search',\n },\n carrier: {\n empty: 'No carriers are installed.',\n 'empty-help':\n \"A carrier is a Composer package of its own; the shop's pick-up and courier need none.\",\n enabled: 'On',\n settings: 'Settings',\n credentials: 'Keys',\n key: 'Access key',\n set: 'Set',\n 'not-set': 'Not set',\n replace: 'Type a new one to replace',\n clear: 'Clear',\n test: 'Check the connection',\n 'test-ok': 'Connected.',\n 'test-failed': 'Not connected: :message',\n run: 'Run',\n running: 'Going on',\n queued: 'Queued: :list.',\n confirm: 'Confirm removal',\n confirmed: 'Removed.',\n held: 'Held: :count to remove',\n stale: 'Stale',\n 'last-success': 'Last success',\n never: 'Never',\n records: 'Records',\n queue: 'Waiting for a binding',\n remarks: {\n no_streets: 'Localities with a courier and no streets: :count',\n 'skipped-unknown_locality': 'Skipped, of unknown localities: :count',\n 'skipped-other': 'Skipped, for another reason: :count',\n },\n directories: {\n localities: 'Localities',\n points: 'Points',\n streets: 'Streets',\n },\n runs: 'Runs',\n statuses: {\n running: 'Going on',\n succeeded: 'Done',\n failed: 'Failed',\n held: 'Held',\n },\n manual: 'By hand only',\n schedule: 'Schedule',\n seen: 'Seen',\n saved: 'The carrier is saved.',\n choose: 'Choose a carrier',\n },\n popular: {\n add: 'Add a town',\n 'add-help': 'Search the localities of the site.',\n empty: 'No popular towns.',\n 'empty-help': 'The checkout dialog then shows only the search.',\n remove: 'Remove',\n hidden: 'Not shown: the locality is off',\n added: 'Added.',\n removed: 'Removed.',\n already: 'Already in the list.',\n 'remove-title': 'Remove «:name» from the popular towns?',\n },\n binding: {\n empty: 'The queue is empty.',\n 'empty-help':\n \"Every record the carriers sent is bound to a locality. New ones appear here after a carrier's sync, when it cannot match them itself.\",\n carrier: 'Carrier',\n reason: 'Reason',\n reasons: {\n region_unknown: 'Unknown region',\n ambiguous: 'Several namesakes',\n kind_mismatch: 'Another type',\n not_found: 'Not found',\n },\n record: 'Record',\n candidates: 'Candidates',\n bind: 'Bind',\n create: 'Make a shared locality',\n ignore: 'Do not bind',\n 'bind-to': 'Bind to…',\n selected: 'Chosen: :count',\n 'whole-filter': 'Apply to the whole filter (:count)',\n done: 'Done: :count.',\n failed: 'Not done: :count.',\n left: 'Left: :count — run again for the next ones.',\n km: ':distance km',\n 'any-carrier': 'Any carrier',\n 'any-reason': 'Any reason',\n intro:\n \"Records a carrier sent that it could not match to the shared geography itself. «Bind» attaches a record to an existing locality, «Make a shared locality» creates a new one from it, «Do not bind» sets it aside — the carrier's points there are not offered. The queue fills only while a carrier is connected and syncs its localities.\",\n },\n order: {\n tab: 'Delivery',\n chosen: 'What the buyer chose',\n method: 'Method',\n locality: 'Town',\n point: 'Pick-up point',\n address: 'Address',\n note: 'Note for the courier',\n cost: 'Delivery cost',\n payer: 'Pays the carrier',\n 'payer-sender': 'The shop (sender)',\n 'payer-recipient': 'The buyer (recipient)',\n 'paid-by-store': 'The shop pays for the delivery',\n none: 'No delivery',\n 'none-help':\n 'The order was placed without delivery, or before the delivery module was installed.',\n own: 'The shop delivers this method itself: there is no waybill.',\n failed: 'The delivery of the order did not load.',\n create: 'Create waybill',\n 'create-title': 'New waybill',\n 'create-help':\n 'The carrier gets this request. Check the recipient, the value and the cash on delivery.',\n 'create-help-no-cod': 'The carrier gets this request. Check the recipient and the value.',\n 'recipient-name': 'Recipient',\n 'recipient-phone': \"Recipient's phone\",\n 'recipient-first-name': 'First name',\n 'recipient-last-name': 'Last name',\n 'carrier-fields': 'For the carrier',\n declared: 'Declared value',\n cod: 'Cash on delivery',\n 'cod-help': 'Empty — nothing to collect on receipt.',\n lines: 'In the parcel',\n created: 'Waybill :number is made.',\n parcels: 'Parcels',\n 'no-parcels': 'No waybill yet.',\n number: 'Waybill',\n status: 'Status',\n 'carrier-cost': \"Carrier's price\",\n track: 'Refresh tracking',\n tracked: 'Tracking is refreshed.',\n label: 'Label',\n cancel: 'Cancel waybill',\n 'cancel-confirm': 'Cancel waybill :number at the carrier?',\n cancelled: 'The waybill is cancelled.',\n history: 'Statuses',\n 'next-check': 'Next check :time',\n final: 'Tracking is over',\n 'made-already': 'Cancel the waybill to make another one.',\n change: 'Change delivery',\n 'change-title': 'Change the delivery',\n 'change-help': 'Checked as at the checkout. The buyer is not told: let them know yourself.',\n 'change-town-search': 'Search a town',\n 'change-no-methods': 'No method delivers to this town.',\n 'change-no-points': 'No point found.',\n 'change-point-search': 'Number or address of the point',\n 'change-street': 'Street',\n 'change-street-help': \"Only a street of the carrier's list.\",\n 'change-house': 'House',\n 'change-apartment': 'Apartment',\n 'change-reason': 'Why',\n 'change-reason-help': 'For the managers; the buyer does not see it.',\n 'change-from-to': ':from → :to',\n 'change-total': 'Order total',\n 'change-same': 'The total stays :amount.',\n 'change-due': 'The buyer will owe :amount more.',\n 'change-over': 'The shop will owe the buyer :amount back.',\n 'change-check': 'Check',\n 'change-save': 'Save delivery',\n changed: 'The delivery is changed.',\n 'change-refused-waybill': 'Cancel the waybill first: the carrier has the old delivery.',\n 'change-refused-state': 'A received, cancelled or refunded order is not changed.',\n 'change-refused-no_delivery': 'The order has nothing to deliver.',\n 'change-refused-nothing': 'This is the delivery the order has already.',\n },\n errors: {\n unknown_carrier: 'There is no such carrier.',\n leader_configured: \"The leading carrier of this country is set in the site's config.\",\n unknown_type: 'There is no such method type.',\n order: 'The order must name every method once.',\n locality_required: 'Choose the locality.',\n address_required: 'Write the address.',\n locality_inactive: 'This locality is off. Switch it on in Geography, or choose another.',\n title_required: 'Write the name.',\n schedule: 'Write the hours as 09:00–18:00, the start before the end.',\n carrier_off: 'The carrier is off: switch it on before running the sync.',\n not_held: 'Nothing is held: there is no removal to confirm.',\n nothing_chosen: 'Tick the rows first.',\n },\n },\n}\n","import { useAdmin, useTranslate, type Translate } from '@webx-ui/module-admin'\nimport { deliveryMessages } from './messages'\n\nconst seeded = new WeakSet<object>()\n\n/** Puts this package's English under the panel's dictionary, once per panel. */\nexport function useDeliveryMessages(): void {\n try {\n const { i18n } = useAdmin()\n\n if (!seeded.has(i18n)) {\n i18n.defaults('webx-delivery', deliveryMessages)\n seeded.add(i18n)\n }\n } catch {\n // Outside a panel there is no dictionary to seed, and `useTranslate` falls back on its own.\n }\n}\n\n/** The section's words: `t('method.new')` reads `webx-delivery::panel.method.new`. */\nexport function useDeliveryWords(): Translate {\n useDeliveryMessages()\n\n const t = useTranslate('webx-delivery')\n\n return (key, params) => t(`panel.${key}`, params)\n}\n","<script setup lang=\"ts\">\nimport { computed, ref, watch } from 'vue'\nimport {\n confirm,\n toast,\n WxAlert,\n WxBadge,\n WxButton,\n WxDialog,\n WxSkeleton,\n WxSpace,\n} from '@webx-ui/core'\nimport { useAdmin, useDefaultLocale, useErrorText, WxScreen } from '@webx-ui/module-admin'\nimport type { Patch, ScreenModel } from '@webx-ui/schema'\nimport { bodyOf, createDeliveryApi, statusOf } from './api'\nimport { useDeliveryWords } from './i18n'\nimport type { DuplicateAnswer, LocalityBrief, LocalityDetail } from './types'\n\n/**\n * One locality of the shared geography, made or changed by hand (decision 42, §4.6): the screen\n * `delivery.locality-form` in a dialog.\n *\n * The same dialog is the «Add a locality» of a point's form and of the courier's list — `short`\n * then leaves only what a town needs to be found (name, type, region; the country is the one\n * given) and the town made is handed back to the field it was asked from.\n *\n * A locality like one that exists is not refused but asked about (409): the dialog lists the\n * similar ones to pick instead, and «Create anyway» makes the new one regardless.\n */\nconst props = withDefaults(\n defineProps<{\n /** `null` — a new locality. */\n id?: number | null\n /** The country a new locality is in; the short form does not ask. */\n country?: string | null\n /** What was typed in the search that found nothing: the name it starts with. */\n name?: string\n short?: boolean\n }>(),\n { id: null, country: null, name: '', short: false },\n)\n\nconst open = defineModel<boolean>('open', { default: false })\n\nconst emit = defineEmits<{\n /** Made, changed, or picked among the similar ones. */\n saved: [locality: LocalityBrief]\n removed: [id: number]\n}>()\n\nconst api = createDeliveryApi(useAdmin())\nconst t = useDeliveryWords()\nconst message = useErrorText()\nconst main = useDefaultLocale()\n\nconst values = ref<ScreenModel>({})\nconst detail = ref<LocalityDetail | null>(null)\nconst errors = ref<Record<string, string[]>>({})\nconst similar = ref<DuplicateAnswer['similar']>([])\nconst loading = ref(false)\nconst saving = ref(false)\n\nconst title = computed(() =>\n props.id === null ? t('locality.new') : (detail.value?.locality.label ?? t('locality.title')),\n)\n\n/* The short form keeps what finds a town; the country is the field's, not a question. */\nconst patch = computed<Patch>(() =>\n props.short\n ? [...(props.country ? ['country'] : []), 'coordinates', 'weight', 'active'].map((target) => ({\n op: 'remove' as const,\n target,\n }))\n : props.id === null\n ? []\n : // A locality stays in the country its carriers bound it in.\n [{ op: 'set', target: 'country', props: { disabled: true } }],\n)\n\nasync function reset(): Promise<void> {\n errors.value = {}\n similar.value = []\n detail.value = null\n\n if (props.id === null) {\n values.value = {\n names: props.name.trim() === '' ? {} : { [main.value]: props.name.trim() },\n kind: 'town',\n country: props.country,\n region_id: null,\n lat: null,\n lng: null,\n weight: null,\n active: true,\n }\n\n return\n }\n\n loading.value = true\n\n try {\n detail.value = await api.locality(props.id)\n values.value = detail.value.values\n } catch (error) {\n toast.danger(message(error))\n open.value = false\n } finally {\n loading.value = false\n }\n}\n\nwatch(open, (now) => {\n if (now) void reset()\n})\n\nasync function save(force = false): Promise<void> {\n if (saving.value) return\n\n saving.value = true\n errors.value = {}\n\n try {\n const answer =\n props.id === null\n ? await api.createLocality(values.value, force)\n : await api.saveLocality(props.id, values.value, force)\n\n similar.value = []\n toast.success(t(props.id === null ? 'locality.created' : 'locality.saved'))\n emit('saved', answer.locality)\n open.value = false\n } catch (error) {\n if (statusOf(error) === 409) {\n similar.value = bodyOf<DuplicateAnswer>(error)?.similar ?? []\n\n return\n }\n\n const fields = (error as { errors?: Record<string, string[]> }).errors\n\n if (fields && Object.keys(fields).length > 0) {\n errors.value = fields\n toast.danger(t('common.save-failed'))\n } else {\n toast.danger(message(error))\n }\n } finally {\n saving.value = false\n }\n}\n\n/** One of the similar ones instead of a new town: the field gets it, nothing is made. */\nfunction pick(locality: LocalityBrief): void {\n emit('saved', locality)\n open.value = false\n}\n\nasync function remove(): Promise<void> {\n const record = detail.value?.locality\n\n if (!record) return\n\n const held = record.held_by.length > 0\n const agreed = await confirm({\n title: t('locality.delete-title', { name: record.name }),\n message: held\n ? t('locality.held-text', { what: record.held_by.join(', ') })\n : t('locality.delete-text'),\n confirmText: t('common.delete'),\n cancelText: t('common.cancel'),\n tone: 'danger',\n })\n\n if (!agreed) return\n\n try {\n const { removal } = await api.removeLocality(record.id)\n\n toast.success(t(removal === 'deleted' ? 'locality.deleted' : 'locality.deactivated'))\n emit('removed', record.id)\n open.value = false\n } catch (error) {\n toast.danger(message(error))\n }\n}\n\nconst manual = computed(() => detail.value?.locality.manual_fields ?? [])\n</script>\n\n<template>\n <wx-dialog v-model:open=\"open\" :title=\"title\" :width=\"560\">\n <div class=\"wx-delivery-locality\">\n <wx-skeleton v-if=\"loading\" :rows=\"4\" />\n\n <template v-else>\n <wx-alert\n v-if=\"manual.length > 0\"\n type=\"info\"\n :description=\"t('locality.manual-fields', { fields: manual.join(', ') })\"\n />\n\n <wx-alert\n v-if=\"similar.length > 0\"\n type=\"warning\"\n :title=\"t('locality.duplicate')\"\n data-test=\"duplicate\"\n >\n <p class=\"wx-delivery-locality__help\">{{ t('locality.duplicate-help') }}</p>\n <ul class=\"wx-delivery-locality__similar\">\n <li v-for=\"item in similar\" :key=\"item.id\">\n <span class=\"wx-delivery-locality__label\">{{ item.label }}</span>\n <wx-badge size=\"sm\">{{ t(`locality.sources.${item.source}`) }}</wx-badge>\n <wx-badge v-if=\"!item.active\" size=\"sm\" type=\"warning\">{{\n t('locality.inactive')\n }}</wx-badge>\n <wx-button size=\"sm\" variant=\"outline\" @click=\"pick(item)\">\n {{ t('locality.pick') }}\n </wx-button>\n </li>\n </ul>\n </wx-alert>\n\n <wx-screen\n v-model=\"values\"\n name=\"delivery.locality-form\"\n :patch=\"patch\"\n :errors=\"errors\"\n :disabled=\"saving\"\n />\n </template>\n </div>\n\n <template #footer>\n <wx-space size=\"sm\" class=\"wx-delivery-locality__footer\">\n <wx-button\n v-if=\"id !== null && detail\"\n variant=\"text\"\n type=\"danger\"\n icon=\"trash\"\n @click=\"remove\"\n >\n {{ t('common.delete') }}\n </wx-button>\n <span class=\"wx-delivery-locality__gap\" />\n <wx-button variant=\"outline\" @click=\"open = false\">{{ t('common.cancel') }}</wx-button>\n <wx-button\n v-if=\"similar.length > 0\"\n variant=\"outline\"\n :loading=\"saving\"\n data-test=\"force\"\n @click=\"save(true)\"\n >\n {{ t('locality.create-anyway') }}\n </wx-button>\n <wx-button v-else type=\"primary\" :loading=\"saving\" :disabled=\"loading\" @click=\"save()\">\n {{ id === null ? t('common.create') : t('common.save') }}\n </wx-button>\n </wx-space>\n </template>\n </wx-dialog>\n</template>\n\n<style scoped>\n.wx-delivery-locality {\n display: flex;\n flex-direction: column;\n gap: var(--wx-space-12);\n}\n\n.wx-delivery-locality__help {\n margin: 0;\n}\n\n.wx-delivery-locality__similar {\n display: flex;\n flex-direction: column;\n gap: var(--wx-space-6);\n margin: var(--wx-space-8) 0 0;\n padding: 0;\n list-style: none;\n}\n\n.wx-delivery-locality__similar li {\n display: flex;\n flex-wrap: wrap;\n align-items: center;\n gap: var(--wx-space-8);\n}\n\n.wx-delivery-locality__label {\n flex: 1 1 160px;\n min-width: 0;\n}\n\n.wx-delivery-locality__footer {\n width: 100%;\n}\n\n.wx-delivery-locality__gap {\n flex: 1 1 auto;\n}\n</style>\n","<script setup lang=\"ts\">\nimport { computed, ref } from 'vue'\nimport { WxAutocomplete, WxIcon, type AutocompleteOption } from '@webx-ui/core'\nimport { useAdmin } from '@webx-ui/module-admin'\nimport { createDeliveryApi } from './api'\nimport { useDeliveryWords } from './i18n'\nimport LocalityDialog from './LocalityDialog.vue'\nimport type { LocalityBrief } from './types'\n\n/**\n * The search of a locality (§4.5) the section's pickers share: the field of a point, the\n * courier's list, the popular towns, «Bind to…» of the queue. Prefix of any name, the heaviest\n * first, active localities only.\n *\n * Nothing found — and `creatable` — the list itself says what to do (decision 42): its one line\n * is «+ Add «<typed>»», which opens the short form with that name, and the town made is picked\n * as if it had been found. In the list and not under the field: an open list covered whatever\n * stood under it, and a button that only showed once the list was closed was never seen.\n */\nconst props = withDefaults(\n defineProps<{\n /** Only this country; none — every country of the site. */\n country?: string | null\n /** Offer «Add a locality» when nothing is found. */\n creatable?: boolean\n /** Ids not to offer — the ones already chosen. */\n exclude?: number[]\n placeholder?: string\n disabled?: boolean\n }>(),\n { country: null, creatable: false, exclude: () => [], placeholder: undefined, disabled: false },\n)\n\nconst emit = defineEmits<{ pick: [locality: LocalityBrief] }>()\n\nconst api = createDeliveryApi(useAdmin())\nconst t = useDeliveryWords()\n\nconst term = ref('')\nconst found = ref<LocalityBrief[]>([])\nconst searched = ref('')\nconst searching = ref(false)\nconst creating = ref(false)\n/* The name the short form starts with: what was typed when «Add» was chosen. */\nconst naming = ref('')\n\nconst offered = computed(() => found.value.filter((one) => !props.exclude.includes(one.id)))\n\n/* Only after an answer for what is typed now: an empty list while asking is not «nothing». */\nconst nothing = computed(\n () =>\n props.creatable &&\n !searching.value &&\n searched.value !== '' &&\n searched.value === term.value.trim() &&\n offered.value.length === 0,\n)\n\nconst options = computed<AutocompleteOption[]>(() =>\n nothing.value\n ? [\n {\n // The typed text as the value: picking the line leaves the field as it was.\n value: term.value,\n label: t('locality.add-named', { name: searched.value }),\n action: true,\n },\n ]\n : offered.value.map((one) => ({ value: one.name, description: one.label, id: one.id })),\n)\n\nlet asked = 0\n\nasync function search(query: string): Promise<void> {\n const mine = ++asked\n const q = query.trim()\n\n searching.value = true\n\n try {\n const rows = await api.suggest(q, props.country)\n\n if (mine !== asked) return\n\n found.value = rows\n searched.value = q\n } catch {\n if (mine === asked) found.value = []\n } finally {\n if (mine === asked) searching.value = false\n }\n}\n\nfunction select(option: AutocompleteOption): void {\n if (option.action === true) {\n naming.value = searched.value\n creating.value = true\n\n return\n }\n\n const one = found.value.find((row) => row.id === (option as { id?: number }).id)\n\n if (one) {\n emit('pick', one)\n term.value = ''\n }\n}\n\nfunction made(locality: LocalityBrief): void {\n emit('pick', locality)\n term.value = ''\n searched.value = ''\n}\n</script>\n\n<template>\n <div class=\"wx-delivery-locality-search\">\n <wx-autocomplete\n v-model=\"term\"\n :options=\"options\"\n remote\n teleport\n open-on-focus\n :loading=\"searching\"\n :empty-text=\"t('locality.nothing-found')\"\n :placeholder=\"placeholder ?? t('locality.search')\"\n :aria-label=\"placeholder ?? t('locality.search')\"\n :disabled=\"disabled\"\n @search=\"search\"\n @select=\"select\"\n >\n <template #option=\"{ option }\">\n <span\n v-if=\"option.action\"\n class=\"wx-delivery-locality-search__add\"\n data-test=\"add-locality\"\n >\n <wx-icon name=\"plus\" />\n <span class=\"wx-delivery-locality-search__add-label\">{{ option.label }}</span>\n </span>\n <template v-else>\n <span class=\"wx-delivery-locality-search__name\">{{ option.value }}</span>\n <span v-if=\"option.description\" class=\"wx-delivery-locality-search__label\">{{\n option.description\n }}</span>\n </template>\n </template>\n </wx-autocomplete>\n\n <locality-dialog\n v-model:open=\"creating\"\n :country=\"country\"\n :name=\"naming\"\n short\n @saved=\"made\"\n />\n </div>\n</template>\n\n<style scoped>\n.wx-delivery-locality-search {\n width: 100%;\n min-width: 0;\n}\n\n/* The action reads as one: the link colour of the panel, a plus before it. */\n.wx-delivery-locality-search__add {\n display: flex;\n align-items: center;\n gap: var(--wx-space-6);\n min-width: 0;\n color: var(--wx-color-primary);\n font-weight: var(--wx-font-weight-medium);\n}\n\n.wx-delivery-locality-search__add-label {\n min-width: 0;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n\n.wx-delivery-locality-search__name {\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n\n.wx-delivery-locality-search__label {\n color: var(--wx-text-muted);\n font-size: var(--wx-font-size-sm);\n}\n</style>\n","<script setup lang=\"ts\">\nimport { computed, ref, watch } from 'vue'\nimport { WxBadge } from '@webx-ui/core'\nimport { useAdmin } from '@webx-ui/module-admin'\nimport { createDeliveryApi } from '../api'\nimport { useDeliveryWords } from '../i18n'\nimport LocalitySearch from '../LocalitySearch.vue'\nimport type { LocalityBrief } from '../types'\n\n/**\n * `wx-delivery-localities`: where the shop's courier goes (§10.2), kept as ids in the order\n * chosen. Each is a tag with its region; the search adds one, and a town the search does not know\n * is added right here (decision 42).\n */\ndefineOptions({ name: 'WxDeliveryLocalitiesField' })\n\nconst props = withDefaults(defineProps<{ disabled?: boolean }>(), { disabled: false })\n\nconst value = defineModel<number[] | null>({ default: null })\n\nconst api = createDeliveryApi(useAdmin())\nconst t = useDeliveryWords()\n\nconst known = ref(new Map<number, LocalityBrief>())\nconst ids = computed(() => (Array.isArray(value.value) ? value.value : []))\n\nwatch(\n ids,\n async (list) => {\n const missing = list.filter((id) => !known.value.has(id))\n\n if (missing.length === 0) return\n\n try {\n const rows = await api.brief(missing)\n const next = new Map(known.value)\n\n for (const row of rows) next.set(row.id, row)\n known.value = next\n } catch {\n // The ids stay; their names come with the next answer.\n }\n },\n { immediate: true },\n)\n\nfunction add(locality: LocalityBrief): void {\n known.value = new Map(known.value).set(locality.id, locality)\n\n if (!ids.value.includes(locality.id)) value.value = [...ids.value, locality.id]\n}\n\nfunction remove(id: number): void {\n value.value = ids.value.filter((one) => one !== id)\n}\n</script>\n\n<template>\n <div class=\"wx-delivery-localities-field\">\n <div v-if=\"ids.length > 0\" class=\"wx-delivery-localities-field__tags\">\n <wx-badge\n v-for=\"id in ids\"\n :key=\"id\"\n :closable=\"!props.disabled\"\n :type=\"known.get(id)?.active === false ? 'warning' : undefined\"\n @close=\"remove(id)\"\n >\n {{ known.get(id)?.label ?? `#${id}` }}\n </wx-badge>\n </div>\n\n <locality-search\n v-if=\"!props.disabled\"\n creatable\n :exclude=\"ids\"\n :placeholder=\"t('popular.add')\"\n @pick=\"add\"\n />\n </div>\n</template>\n\n<style scoped>\n.wx-delivery-localities-field {\n display: flex;\n flex-direction: column;\n gap: var(--wx-space-8);\n width: 100%;\n min-width: 0;\n}\n\n.wx-delivery-localities-field__tags {\n display: flex;\n flex-wrap: wrap;\n gap: var(--wx-space-6);\n}\n</style>\n","<script setup lang=\"ts\">\nimport { nextTick, ref, watch } from 'vue'\nimport { WxBadge, WxButton } from '@webx-ui/core'\nimport { useAdmin } from '@webx-ui/module-admin'\nimport { createDeliveryApi } from '../api'\nimport { useDeliveryWords } from '../i18n'\nimport LocalitySearch from '../LocalitySearch.vue'\nimport type { LocalityBrief } from '../types'\n\n/**\n * `wx-delivery-locality`: the locality of a point (§14.2), kept by id. The chosen one is a line\n * with its region; «Change» opens the search, and a town the search does not know is added right\n * here (decision 42).\n *\n * The search does not lose the town chosen before: Esc or «Cancel» puts it back, untouched.\n */\ndefineOptions({ name: 'WxDeliveryLocalityField' })\n\nconst props = withDefaults(defineProps<{ disabled?: boolean }>(), { disabled: false })\n\nconst value = defineModel<number | null>({ default: null })\n\nconst api = createDeliveryApi(useAdmin())\nconst t = useDeliveryWords()\n\nconst chosen = ref<LocalityBrief | null>(null)\nconst changing = ref(false)\n\nwatch(\n value,\n async (id) => {\n if (id === null || id === undefined) {\n chosen.value = null\n\n return\n }\n\n if (chosen.value?.id === id) return\n\n try {\n chosen.value = (await api.brief([id]))[0] ?? null\n } catch {\n chosen.value = null\n }\n },\n { immediate: true },\n)\n\nconst root = ref<HTMLElement | null>(null)\n\nfunction pick(locality: LocalityBrief): void {\n chosen.value = locality\n value.value = locality.id\n changing.value = false\n}\n\n/* Straight into the search: «Change» was pressed to type a name. */\nasync function change(): Promise<void> {\n changing.value = true\n await nextTick()\n root.value?.querySelector<HTMLInputElement>('input')?.focus()\n}\n\nfunction cancel(): void {\n changing.value = false\n}\n\n/*\n * Esc while changing goes back to the town chosen before. It stops here: the dialog the field is\n * in would close on the same key, form and all.\n */\nfunction onEscape(event: KeyboardEvent): void {\n if (!changing.value || chosen.value === null) return\n\n event.stopPropagation()\n cancel()\n}\n</script>\n\n<template>\n <div ref=\"root\" class=\"wx-delivery-locality-field\" @keydown.esc=\"onEscape\">\n <div v-if=\"chosen && !changing\" class=\"wx-delivery-locality-field__chosen\">\n <span class=\"wx-delivery-locality-field__label\">{{ chosen.label }}</span>\n <wx-badge v-if=\"!chosen.active\" size=\"sm\" type=\"warning\">{{\n t('locality.inactive')\n }}</wx-badge>\n <wx-button\n v-if=\"!props.disabled\"\n size=\"sm\"\n variant=\"text\"\n icon=\"edit\"\n data-test=\"locality-change\"\n @click=\"change\"\n >\n {{ t('common.change') }}\n </wx-button>\n </div>\n\n <div v-else class=\"wx-delivery-locality-field__search\">\n <locality-search creatable :disabled=\"props.disabled\" @pick=\"pick\" />\n <wx-button v-if=\"chosen\" size=\"sm\" variant=\"text\" data-test=\"locality-cancel\" @click=\"cancel\">\n {{ t('common.cancel') }}\n </wx-button>\n </div>\n </div>\n</template>\n\n<style scoped>\n.wx-delivery-locality-field {\n width: 100%;\n min-width: 0;\n}\n\n.wx-delivery-locality-field__chosen {\n display: flex;\n flex-wrap: wrap;\n align-items: center;\n gap: var(--wx-space-8);\n min-height: var(--wx-control-height-md, 32px);\n}\n\n.wx-delivery-locality-field__search {\n display: flex;\n align-items: center;\n gap: var(--wx-space-8);\n min-width: 0;\n}\n\n.wx-delivery-locality-field__search > :first-child {\n flex: 1 1 auto;\n}\n\n.wx-delivery-locality-field__label {\n min-width: 0;\n overflow-wrap: anywhere;\n}\n</style>\n","<script setup lang=\"ts\">\nimport { computed, ref } from 'vue'\nimport {\n toast,\n WxButton,\n WxDialog,\n WxFormItem,\n WxInput,\n WxLink,\n WxSelect,\n WxSpace,\n WxText,\n} from '@webx-ui/core'\nimport { useAdmin, useDefaultLocale, useErrorText } from '@webx-ui/module-admin'\nimport { createDeliveryApi } from '../api'\nimport { useDeliveryWords } from '../i18n'\nimport type { Option } from '../types'\n\n/**\n * `wx-delivery-point-kind`: the kind of points of a method. A select of the kinds its type allows\n * and, for the shop's pick-up (`creatable`), «New kind of points» as a link beside it (decision 9) —\n * next to the field it fills, not at the foot of the form where nobody connects the two. A link\n * and not a button: it is a way to more choices, the way «Set up channels» sits by its field.\n *\n * A kind named here is offered at once and chosen; the server keeps it for every method after.\n */\ndefineOptions({ name: 'WxDeliveryPointKindField' })\n\nconst props = withDefaults(\n defineProps<{\n options?: Option[]\n /** The shop's pick-up: a kind of its own can be named here. */\n creatable?: boolean\n disabled?: boolean\n }>(),\n { options: () => [], creatable: false, disabled: false },\n)\n\nconst value = defineModel<string | null>({ default: null })\n\nconst api = createDeliveryApi(useAdmin())\nconst t = useDeliveryWords()\nconst message = useErrorText()\nconst main = useDefaultLocale()\n\n/* What the server answered after a kind was named: its list, the new one in it. */\nconst defined = ref<Option[] | null>(null)\nconst choices = computed(() => defined.value ?? props.options)\n\nconst naming = ref(false)\nconst key = ref('')\nconst name = ref('')\nconst errors = ref<Record<string, string[]>>({})\nconst saving = ref(false)\n\nfunction startNaming(event?: Event): void {\n // A link to nowhere: the dialog is where it goes.\n event?.preventDefault()\n key.value = ''\n name.value = ''\n errors.value = {}\n naming.value = true\n}\n\nasync function define(): Promise<void> {\n if (saving.value) return\n\n saving.value = true\n errors.value = {}\n\n try {\n defined.value = await api.defineKind(key.value.trim(), { [main.value]: name.value.trim() })\n value.value = key.value.trim()\n toast.success(t('method.kind-created'))\n naming.value = false\n } catch (error) {\n errors.value = (error as { errors?: Record<string, string[]> }).errors ?? {}\n if (Object.keys(errors.value).length === 0) toast.danger(message(error))\n } finally {\n saving.value = false\n }\n}\n</script>\n\n<template>\n <div class=\"wx-delivery-point-kind\">\n <wx-select v-model=\"value\" :options=\"choices\" :disabled=\"props.disabled\" />\n\n <wx-link\n v-if=\"props.creatable && !props.disabled\"\n class=\"wx-delivery-point-kind__new\"\n href=\"#\"\n size=\"sm\"\n data-test=\"new-kind\"\n @click=\"startNaming\"\n >\n {{ t('method.new-kind') }}\n </wx-link>\n\n <wx-dialog v-model:open=\"naming\" :title=\"t('method.new-kind')\" :width=\"440\">\n <div class=\"wx-delivery-point-kind__form\">\n <wx-text tone=\"muted\" size=\"sm\">{{ t('method.new-kind-help') }}</wx-text>\n <wx-form-item :label=\"t('method.kind-name')\" :error=\"errors.names?.[0]\">\n <wx-input v-model=\"name\" :maxlength=\"60\" autofocus />\n </wx-form-item>\n <wx-form-item\n :label=\"t('method.kind-key')\"\n :help=\"t('method.kind-key-help')\"\n :error=\"errors.kind?.[0]\"\n >\n <wx-input v-model=\"key\" :maxlength=\"32\" />\n </wx-form-item>\n </div>\n\n <template #footer>\n <wx-space size=\"sm\">\n <wx-button variant=\"outline\" @click=\"naming = false\">{{ t('common.cancel') }}</wx-button>\n <wx-button\n type=\"primary\"\n :loading=\"saving\"\n :disabled=\"key.trim() === '' || name.trim() === ''\"\n @click=\"define\"\n >\n {{ t('common.add') }}\n </wx-button>\n </wx-space>\n </template>\n </wx-dialog>\n </div>\n</template>\n\n<style scoped>\n/* The select and the link on one line while there is room for both; the link under it after. */\n.wx-delivery-point-kind {\n display: flex;\n flex-wrap: wrap;\n align-items: center;\n gap: var(--wx-space-4) var(--wx-space-12);\n min-width: 0;\n}\n\n.wx-delivery-point-kind > :deep(.wx-select) {\n flex: 1 1 240px;\n min-width: 0;\n}\n\n.wx-delivery-point-kind__new {\n flex: 0 0 auto;\n white-space: nowrap;\n}\n\n.wx-delivery-point-kind__form {\n display: flex;\n flex-direction: column;\n gap: var(--wx-space-12);\n}\n</style>\n","<script setup lang=\"ts\">\nimport { computed, ref, watch } from 'vue'\nimport { WxSelect } from '@webx-ui/core'\nimport { useAdmin } from '@webx-ui/module-admin'\nimport type { RenderContext } from '@webx-ui/schema'\nimport { createDeliveryApi } from '../api'\nimport { useDeliveryWords } from '../i18n'\nimport type { RegionRow } from '../types'\n\n/**\n * `wx-delivery-region`: a region of the locality's country. It reads the country from the field\n * named by `countryField` on the same screen — so it is a `nested` type, the one way a field is\n * handed the rest of the model — and asks again when that changes.\n */\ndefineOptions({ name: 'WxDeliveryRegionField' })\n\nconst props = withDefaults(\n defineProps<{ disabled?: boolean; countryField?: string; context?: RenderContext }>(),\n { disabled: false, countryField: 'country', context: undefined },\n)\n\nconst value = defineModel<number | null>({ default: null })\n\nconst api = createDeliveryApi(useAdmin())\nconst t = useDeliveryWords()\nconst regions = ref<RegionRow[]>([])\n\nconst country = computed(() => {\n const code = props.context?.model[props.countryField]\n\n return typeof code === 'string' ? code : ''\n})\n\nwatch(\n country,\n async (code, before) => {\n if (code === '') {\n regions.value = []\n\n return\n }\n\n try {\n regions.value = await api.regions(code)\n } catch {\n regions.value = []\n }\n\n // Another country: a region of the one before is not one of this.\n if (before !== undefined && before !== code) value.value = null\n },\n { immediate: true },\n)\n\nconst options = computed(() => regions.value.map((one) => ({ value: one.id, label: one.name })))\n</script>\n\n<template>\n <wx-select\n v-model=\"value\"\n :options=\"options\"\n filterable\n clearable\n :placeholder=\"country === '' ? t('region.country-first') : t('locality.no-region')\"\n :disabled=\"props.disabled || country === ''\"\n />\n</template>\n","<script setup lang=\"ts\">\nimport { computed, ref, watch } from 'vue'\nimport { WxAction, WxButton, WxDatePicker, WxInput, WxSelect } from '@webx-ui/core'\nimport { useDeliveryWords } from '../i18n'\n\n/**\n * `wx-delivery-schedule`: the opening hours of a point (§7.4) — the week, a row a day, and the\n * dates that differ. A day is «not said», «closed», «around the clock» or hours written as\n * `09:00–13:00, 14:00–18:00`: what a person reads off a sign on the door, typed the same way.\n * The value is the shape `delivery_points.schedule` keeps; the server checks every interval.\n */\ndefineOptions({ name: 'WxDeliveryScheduleField' })\n\ntype Interval = [string, string]\n\ninterface ScheduleValue {\n timezone?: string\n week?: Record<string, Interval[] | null>\n exceptions?: { date: string; hours: Interval[] }[]\n text?: Record<string, string>\n}\n\ntype Mode = 'unknown' | 'closed' | 'hours' | 'around'\n\nconst props = withDefaults(defineProps<{ disabled?: boolean }>(), { disabled: false })\n\nconst value = defineModel<ScheduleValue | null>({ default: null })\n\nconst t = useDeliveryWords()\n\nconst DAYS = ['mon', 'tue', 'wed', 'thu', 'fri', 'sat', 'sun'] as const\n\nconst modes = computed(() => [\n { value: 'unknown', label: t('schedule.not-said') },\n { value: 'closed', label: t('schedule.closed') },\n { value: 'hours', label: t('schedule.hours') },\n { value: 'around', label: t('schedule.around') },\n])\n\nfunction written(hours: Interval[]): string {\n return hours.map(([from, to]) => `${from}–${to}`).join(', ')\n}\n\n/** «09:00-13:00, 14:00–18:00» into intervals; `null` when a part does not read. */\nfunction read(text: string): Interval[] | null {\n const parts = text\n .split(/[,;]/)\n .map((part) => part.trim())\n .filter((part) => part !== '')\n const intervals: Interval[] = []\n\n for (const part of parts) {\n const match = /^(\\d{1,2})[:.](\\d{2})\\s*[-–—]\\s*(\\d{1,2})[:.](\\d{2})$/.exec(part)\n\n if (!match) return null\n\n const pad = (hour: string) => hour.padStart(2, '0')\n intervals.push([`${pad(match[1]!)}:${match[2]}`, `${pad(match[3]!)}:${match[4]}`])\n }\n\n return intervals\n}\n\nfunction modeOf(hours: Interval[] | null | undefined): Mode {\n if (hours === null || hours === undefined) return 'unknown'\n if (hours.length === 0) return 'closed'\n if (hours.length === 1 && hours[0]![0] === '00:00' && hours[0]![1] === '24:00') return 'around'\n\n return 'hours'\n}\n\n/* What is typed in each row, ahead of the value: a half-written «09:00–1» is kept on screen. */\nconst texts = ref<Record<string, string>>({})\nconst invalid = ref<Record<string, boolean>>({})\n\nwatch(\n value,\n (now) => {\n for (const day of DAYS) {\n const hours = now?.week?.[day]\n\n if (modeOf(hours) === 'hours' && !invalid.value[day]) texts.value[day] = written(hours!)\n }\n },\n { immediate: true },\n)\n\nfunction write(change: (draft: ScheduleValue) => void): void {\n const draft: ScheduleValue = JSON.parse(JSON.stringify(value.value ?? {}))\n\n change(draft)\n\n const empty =\n Object.keys(draft.week ?? {}).length === 0 &&\n (draft.exceptions ?? []).length === 0 &&\n Object.keys(draft.text ?? {}).length === 0\n\n value.value = empty ? null : draft\n}\n\nfunction setMode(day: string, mode: Mode): void {\n write((draft) => {\n draft.week ??= {}\n\n if (mode === 'unknown') delete draft.week[day]\n else if (mode === 'closed') draft.week[day] = []\n else if (mode === 'around') draft.week[day] = [['00:00', '24:00']]\n else {\n const hours = read(texts.value[day] ?? '')\n draft.week[day] = hours && hours.length > 0 ? hours : [['09:00', '18:00']]\n texts.value[day] = written(draft.week[day]!)\n }\n })\n}\n\nfunction setHours(day: string, text: string): void {\n texts.value[day] = text\n\n const hours = read(text)\n\n invalid.value[day] = hours === null || hours.length === 0\n\n if (!invalid.value[day]) write((draft) => ((draft.week ??= {})[day] = hours))\n}\n\nconst exceptions = computed(() => value.value?.exceptions ?? [])\n\nfunction addException(): void {\n write((draft) => {\n draft.exceptions = [\n ...(draft.exceptions ?? []),\n { date: new Date().toISOString().slice(0, 10), hours: [] },\n ]\n })\n}\n\nfunction setException(index: number, change: Partial<{ date: string; text: string }>): void {\n write((draft) => {\n const one = draft.exceptions?.[index]\n\n if (!one) return\n if (change.date !== undefined) one.date = change.date\n if (change.text !== undefined) one.hours = read(change.text) ?? one.hours\n })\n}\n\nfunction removeException(index: number): void {\n write((draft) => {\n draft.exceptions = (draft.exceptions ?? []).filter((_, at) => at !== index)\n })\n}\n</script>\n\n<template>\n <div class=\"wx-delivery-schedule\">\n <div v-for=\"day in DAYS\" :key=\"day\" class=\"wx-delivery-schedule__day\">\n <span class=\"wx-delivery-schedule__name\">{{ t(`schedule.days.${day}`) }}</span>\n <wx-select\n class=\"wx-delivery-schedule__mode\"\n size=\"sm\"\n :model-value=\"modeOf(value?.week?.[day])\"\n :options=\"modes\"\n :aria-label=\"t(`schedule.days.${day}`)\"\n :disabled=\"props.disabled\"\n @update:model-value=\"setMode(day, $event as Mode)\"\n />\n <wx-input\n v-if=\"modeOf(value?.week?.[day]) === 'hours'\"\n class=\"wx-delivery-schedule__hours\"\n size=\"sm\"\n :model-value=\"texts[day] ?? ''\"\n :status=\"invalid[day] ? 'error' : undefined\"\n :aria-label=\"t('schedule.hours')\"\n placeholder=\"09:00–18:00\"\n :disabled=\"props.disabled\"\n @update:model-value=\"setHours(day, String($event ?? ''))\"\n />\n </div>\n\n <div class=\"wx-delivery-schedule__exceptions\">\n <span class=\"wx-delivery-schedule__title\">{{ t('schedule.exceptions') }}</span>\n\n <div v-for=\"(one, index) in exceptions\" :key=\"index\" class=\"wx-delivery-schedule__day\">\n <wx-date-picker\n class=\"wx-delivery-schedule__mode\"\n size=\"sm\"\n :model-value=\"one.date\"\n :aria-label=\"t('schedule.date')\"\n :disabled=\"props.disabled\"\n @update:model-value=\"setException(index, { date: String($event ?? '') })\"\n />\n <wx-input\n class=\"wx-delivery-schedule__hours\"\n size=\"sm\"\n :model-value=\"one.hours.length === 0 ? '' : written(one.hours)\"\n :placeholder=\"t('schedule.closed')\"\n :aria-label=\"t('schedule.hours')\"\n :disabled=\"props.disabled\"\n @change=\"setException(index, { text: String($event ?? '') })\"\n />\n <wx-action\n type=\"remove\"\n size=\"sm\"\n :title=\"t('schedule.remove')\"\n :disabled=\"props.disabled\"\n @click=\"removeException(index)\"\n />\n </div>\n\n <wx-button\n v-if=\"!props.disabled\"\n size=\"sm\"\n variant=\"outline\"\n icon=\"plus\"\n class=\"wx-delivery-schedule__add\"\n @click=\"addException\"\n >\n {{ t('schedule.add-exception') }}\n </wx-button>\n </div>\n </div>\n</template>\n\n<style scoped>\n.wx-delivery-schedule {\n display: flex;\n flex-direction: column;\n gap: var(--wx-space-6);\n width: 100%;\n min-width: 0;\n container-type: inline-size;\n}\n\n.wx-delivery-schedule__day {\n display: flex;\n flex-wrap: wrap;\n align-items: center;\n gap: var(--wx-space-8);\n}\n\n.wx-delivery-schedule__name {\n flex: 0 0 96px;\n font-size: var(--wx-font-size-sm);\n}\n\n.wx-delivery-schedule__day > :deep(.wx-select),\n.wx-delivery-schedule__mode {\n flex: 0 1 180px;\n min-width: 0;\n}\n\n.wx-delivery-schedule__hours {\n flex: 1 1 160px;\n min-width: 0;\n}\n\n.wx-delivery-schedule__exceptions {\n display: flex;\n flex-direction: column;\n gap: var(--wx-space-6);\n margin-top: var(--wx-space-8);\n}\n\n.wx-delivery-schedule__title {\n font-weight: var(--wx-font-weight-medium);\n}\n\n.wx-delivery-schedule__add {\n align-self: flex-start;\n}\n\n@container (max-width: 360px) {\n .wx-delivery-schedule__name {\n flex-basis: 100%;\n }\n}\n</style>\n","<script setup lang=\"ts\">\nimport { computed, ref, watch } from 'vue'\nimport {\n useModal,\n WxAlert,\n WxAutocomplete,\n WxButton,\n WxDialog,\n WxFormItem,\n WxInput,\n WxRadioGroup,\n WxSkeleton,\n WxSpace,\n WxText,\n type AutocompleteOption,\n} from '@webx-ui/core'\nimport { useAdmin, useErrorText } from '@webx-ui/module-admin'\nimport { createDeliveryApi } from './api'\nimport { useDeliveryWords } from './i18n'\nimport type {\n ChangeInput,\n ChangeMethod,\n ChangeOption,\n ChangeOutcome,\n ChangeTown,\n OrderDelivery,\n OrderDeliveryChangeState,\n} from './types'\n\n/**\n * «Change delivery» of the tab «Delivery» (decision of 02.11.2026): the buyer mistyped the\n * street, chose the wrong pick-up point, or one the carrier will not take the parcel to. The\n * town by the checkout's search with the popular towns under it, the methods priced for the\n * order's lines, the point by its number or address, the address by the method's rules — a\n * carrier's courier takes a street of its directory only. Before saving, «was → will be» of the\n * sum, from the server's own count (a dry run); the save answers the tab as it is after.\n */\ndefineOptions({ name: 'WxDeliveryOrderChangeDialog' })\n\nconst props = defineProps<{ orderId: number; start: OrderDeliveryChangeState }>()\n\nconst { open, resolve } = useModal<OrderDelivery>()\n\nconst api = createDeliveryApi(useAdmin())\nconst t = useDeliveryWords()\nconst message = useErrorText()\n\nconst town = ref<{ id: number; label: string } | null>(props.start.locality)\nconst townTerm = ref('')\nconst towns = ref<ChangeTown[]>([])\nconst popular = ref<ChangeTown[]>([])\nconst searchingTowns = ref(false)\n\nconst methods = ref<ChangeMethod[]>([])\nconst loadingMethods = ref(false)\nconst methodId = ref<number | null>(null)\n\nconst pointTerm = ref('')\nconst points = ref<ChangeOption[]>([])\nconst searchingPoints = ref(false)\nconst point = ref<{ id: number; label: string } | null>(null)\n\nconst streetTerm = ref(props.start.address?.street ?? '')\nconst streets = ref<ChangeOption[]>([])\nconst streetId = ref<string | null>(props.start.address?.street_id ?? null)\nconst house = ref(props.start.address?.house ?? '')\nconst apartment = ref(props.start.address?.apartment ?? '')\nconst note = ref(props.start.address?.note ?? '')\nconst reason = ref('')\n\nconst errors = ref<Record<string, string[]>>({})\nconst outcome = ref<ChangeOutcome | null>(null)\nconst checking = ref(false)\nconst saving = ref(false)\n\nconst method = computed(() => methods.value.find((one) => one.id === methodId.value) ?? null)\nconst ownStreets = computed(() => method.value?.carrier === 'store')\n\nconst methodOptions = computed(() =>\n methods.value.map((one) => ({\n value: one.id,\n label: one.price ? `${one.title} · ${one.price.text}` : one.title,\n disabled: one.disabled,\n })),\n)\n\nconst errorOf = (key: string) => errors.value[key]?.[0]\n\nconst townOptions = computed<AutocompleteOption[]>(() =>\n towns.value.map((one) => ({ value: one.name, description: one.label, id: one.id })),\n)\n\nconst pointOptions = computed<AutocompleteOption[]>(() =>\n points.value.map((one) => ({\n value: one.label,\n description: one.hint ?? undefined,\n id: Number(one.value),\n })),\n)\n\nconst streetOptions = computed<AutocompleteOption[]>(() =>\n streets.value.map((one) => ({ value: one.label, id: one.value })),\n)\n\nlet townAsked = 0\n\nasync function searchTowns(q: string): Promise<void> {\n const mine = ++townAsked\n\n searchingTowns.value = true\n\n try {\n const found = await api.changeTowns(props.orderId, q.trim())\n\n if (mine !== townAsked) return\n\n towns.value = found.localities\n popular.value = found.popular\n } catch {\n if (mine === townAsked) towns.value = []\n } finally {\n if (mine === townAsked) searchingTowns.value = false\n }\n}\n\nfunction pickTown(one: ChangeTown): void {\n town.value = { id: one.id, label: one.label }\n townTerm.value = ''\n towns.value = []\n}\n\nfunction selectTown(option: AutocompleteOption): void {\n const one = towns.value.find((row) => row.id === (option as { id?: number }).id)\n\n if (one) pickTown(one)\n}\n\nasync function loadMethods(): Promise<void> {\n if (!town.value) return\n\n loadingMethods.value = true\n outcome.value = null\n\n try {\n const found = await api.changeMethods(props.orderId, town.value.id)\n\n methods.value = found.methods\n\n // The method the order has stays chosen where the new town offers it too.\n const kept =\n found.methods.find((one) => one.id === methodId.value && !one.disabled) ??\n found.methods.find((one) => one.key === props.start.method && !one.disabled)\n\n methodId.value = kept?.id ?? null\n } catch (error) {\n methods.value = []\n errors.value = { method: [message(error)] }\n } finally {\n loadingMethods.value = false\n }\n}\n\nlet pointAsked = 0\n\nasync function searchPoints(q: string): Promise<void> {\n if (!town.value || !method.value) return\n\n const mine = ++pointAsked\n\n searchingPoints.value = true\n\n try {\n const found = await api.changePoints(props.orderId, town.value.id, method.value.id, q.trim())\n\n if (mine === pointAsked) points.value = found.options\n } catch {\n if (mine === pointAsked) points.value = []\n } finally {\n if (mine === pointAsked) searchingPoints.value = false\n }\n}\n\nfunction selectPoint(option: AutocompleteOption): void {\n const id = (option as { id?: number }).id\n\n if (typeof id === 'number') {\n point.value = { id, label: option.value }\n pointTerm.value = option.value\n }\n}\n\nasync function searchStreets(q: string): Promise<void> {\n if (!town.value || !method.value) return\n\n try {\n streets.value = (\n await api.changeStreets(props.orderId, town.value.id, method.value.id, q.trim())\n ).options\n } catch {\n streets.value = []\n }\n}\n\nfunction selectStreet(option: AutocompleteOption): void {\n streetTerm.value = option.value\n // A carrier's street goes by its id; the shop's courier takes the name as text (§8.3).\n streetId.value = ownStreets.value ? null : String((option as { id?: string }).id ?? '')\n}\n\nfunction typedStreet(value: string): void {\n // Typing over a street of a directory drops its id: the name alone is not the carrier's street.\n if (!ownStreets.value) streetId.value = null\n streetTerm.value = value\n}\n\nconst input = computed<ChangeInput | null>(() => {\n if (!town.value || !method.value) return null\n\n const body: ChangeInput = { locality: town.value.id, method: method.value.id }\n\n if (method.value.asks === 'point') body.point = point.value?.id ?? null\n\n if (method.value.asks === 'address') {\n body.address = {\n street: streetTerm.value.trim() || null,\n street_id: ownStreets.value ? null : streetId.value,\n house: house.value.trim() || null,\n apartment: apartment.value.trim() || null,\n note: note.value.trim() || null,\n }\n }\n\n return body\n})\n\nfunction refusal(error: unknown): void {\n errors.value = (error as { errors?: Record<string, string[]> }).errors ?? {}\n if (Object.keys(errors.value).length === 0) errors.value = { delivery: [message(error)] }\n}\n\n/** «Was → will be» from the server's count, before anything is written. */\nasync function check(): Promise<void> {\n const body = input.value\n\n if (!body || checking.value) return\n\n checking.value = true\n errors.value = {}\n outcome.value = null\n\n try {\n outcome.value = (await api.changeDelivery(props.orderId, { ...body, dry_run: true })).change\n } catch (error) {\n refusal(error)\n } finally {\n checking.value = false\n }\n}\n\nasync function save(): Promise<void> {\n const body = input.value\n\n if (!body || saving.value) return\n\n saving.value = true\n errors.value = {}\n\n try {\n const done = await api.changeDelivery(props.orderId, {\n ...body,\n reason: reason.value.trim() || null,\n })\n\n if (done.delivery) resolve(done.delivery)\n } catch (error) {\n refusal(error)\n } finally {\n saving.value = false\n }\n}\n\nwatch(\n town,\n (now, before) => {\n if (now?.id !== before?.id) {\n point.value = null\n pointTerm.value = ''\n points.value = []\n streets.value = []\n }\n\n void loadMethods()\n },\n { immediate: true },\n)\n\nwatch(methodId, (now, before) => {\n outcome.value = null\n\n if (before !== null && now !== before) {\n point.value = null\n pointTerm.value = ''\n points.value = []\n streets.value = []\n if (!ownStreets.value) streetId.value = null\n }\n})\n\n// A method of points shows its first page at once: the list opens with something to pick.\nwatch(\n () => [method.value?.id, method.value?.asks, town.value?.id] as const,\n ([, asks]) => {\n if (asks === 'point') void searchPoints('')\n },\n)\n\n// Any change of the choice makes the last «will be» stale.\nwatch([point, streetTerm, house, apartment], () => (outcome.value = null))\n\nvoid searchTowns('')\n\n// The point the order has, shown by its title when the town and the method are the order's.\nwatch(methods, (list) => {\n if (point.value || props.start.point === null) return\n\n const same = list.find((one) => one.key === props.start.method)\n\n if (!same || same.id !== methodId.value || town.value?.id !== props.start.locality?.id) return\n\n void (async () => {\n const found = await api.changePoints(props.orderId, town.value!.id, same.id, '')\n const mine = found.options.find((one) => Number(one.value) === props.start.point)\n\n if (mine) {\n point.value = { id: Number(mine.value), label: mine.label }\n pointTerm.value = mine.label\n }\n })().catch(() => undefined)\n})\n\n/** The radios speak in any value; the method is its id. */\nconst methodChoice = computed<string | number | boolean | null>({\n get: () => methodId.value,\n set: (value) => (methodId.value = value === null ? null : Number(value)),\n})\n</script>\n\n<template>\n <wx-dialog v-model:open=\"open\" :title=\"t('order.change-title')\" :width=\"600\">\n <div class=\"wx-delivery-change\">\n <wx-text tone=\"muted\" size=\"sm\">{{ t('order.change-help') }}</wx-text>\n\n <wx-alert v-if=\"errorOf('delivery')\" type=\"danger\" :description=\"errorOf('delivery')\" />\n\n <wx-form-item :label=\"t('order.locality')\" :error=\"errorOf('locality')\" required>\n <div class=\"wx-delivery-change__town\">\n <span v-if=\"town\" class=\"wx-delivery-change__chosen\" data-test=\"change-town\">\n {{ town.label }}\n </span>\n <wx-autocomplete\n v-model=\"townTerm\"\n :options=\"townOptions\"\n remote\n teleport\n :loading=\"searchingTowns\"\n :empty-text=\"t('locality.nothing-found')\"\n :placeholder=\"t('order.change-town-search')\"\n :aria-label=\"t('order.change-town-search')\"\n data-test=\"change-town-search\"\n @search=\"searchTowns\"\n @select=\"selectTown\"\n />\n <wx-space v-if=\"popular.length > 0\" :size=\"8\" wrap>\n <wx-button\n v-for=\"one in popular\"\n :key=\"one.id\"\n size=\"sm\"\n variant=\"outline\"\n :type=\"town?.id === one.id ? 'primary' : undefined\"\n data-test=\"change-popular\"\n @click=\"pickTown(one)\"\n >\n {{ one.name }}\n </wx-button>\n </wx-space>\n </div>\n </wx-form-item>\n\n <wx-form-item v-if=\"town\" :label=\"t('order.method')\" :error=\"errorOf('method')\" required>\n <wx-skeleton v-if=\"loadingMethods\" :rows=\"2\" />\n <wx-text v-else-if=\"methods.length === 0\" tone=\"muted\">\n {{ t('order.change-no-methods') }}\n </wx-text>\n <div v-else class=\"wx-delivery-change__methods\">\n <wx-radio-group\n v-model=\"methodChoice\"\n :options=\"methodOptions\"\n data-test=\"change-methods\"\n />\n <wx-text\n v-for=\"one in methods.filter((row) => row.disabled && row.hint)\"\n :key=\"one.id\"\n size=\"sm\"\n tone=\"muted\"\n >\n {{ one.title }}: {{ one.hint }}\n </wx-text>\n </div>\n </wx-form-item>\n\n <wx-form-item\n v-if=\"method?.asks === 'point'\"\n :label=\"t('order.point')\"\n :error=\"errorOf('point')\"\n required\n >\n <wx-autocomplete\n v-model=\"pointTerm\"\n :options=\"pointOptions\"\n remote\n teleport\n open-on-focus\n :loading=\"searchingPoints\"\n :empty-text=\"t('order.change-no-points')\"\n :placeholder=\"t('order.change-point-search')\"\n :aria-label=\"t('order.change-point-search')\"\n data-test=\"change-point\"\n @search=\"searchPoints\"\n @select=\"selectPoint\"\n />\n </wx-form-item>\n\n <template v-if=\"method?.asks === 'address'\">\n <wx-form-item\n :label=\"t('order.change-street')\"\n :help=\"ownStreets ? undefined : t('order.change-street-help')\"\n :error=\"errorOf('address.street') ?? errorOf('address.street_id')\"\n required\n >\n <wx-autocomplete\n :model-value=\"streetTerm\"\n :options=\"streetOptions\"\n remote\n teleport\n :aria-label=\"t('order.change-street')\"\n data-test=\"change-street\"\n @update:model-value=\"typedStreet\"\n @search=\"searchStreets\"\n @select=\"selectStreet\"\n />\n </wx-form-item>\n <div class=\"wx-delivery-change__pair\">\n <wx-form-item :label=\"t('order.change-house')\" :error=\"errorOf('address.house')\" required>\n <wx-input v-model=\"house\" :maxlength=\"32\" data-test=\"change-house\" />\n </wx-form-item>\n <wx-form-item :label=\"t('order.change-apartment')\" :error=\"errorOf('address.apartment')\">\n <wx-input v-model=\"apartment\" :maxlength=\"32\" />\n </wx-form-item>\n </div>\n <wx-form-item :label=\"t('order.note')\" :error=\"errorOf('address.note')\">\n <wx-input v-model=\"note\" :maxlength=\"500\" />\n </wx-form-item>\n </template>\n\n <wx-form-item :label=\"t('order.change-reason')\" :help=\"t('order.change-reason-help')\">\n <wx-input v-model=\"reason\" :maxlength=\"300\" data-test=\"change-reason\" />\n </wx-form-item>\n\n <div v-if=\"outcome\" class=\"wx-delivery-change__outcome\" data-test=\"change-outcome\">\n <div class=\"wx-delivery-change__row\">\n <span class=\"wx-delivery-change__label\">{{ t('order.cost') }}</span>\n <span>{{\n t('order.change-from-to', { from: outcome.amount_from, to: outcome.amount_to })\n }}</span>\n </div>\n <div class=\"wx-delivery-change__row\">\n <span class=\"wx-delivery-change__label\">{{ t('order.change-total') }}</span>\n <span v-if=\"outcome.total_changes\" class=\"wx-delivery-change__strong\">\n {{ t('order.change-from-to', { from: outcome.total_from, to: outcome.total_to }) }}\n </span>\n <span v-else>{{ t('order.change-same', { amount: outcome.total_to }) }}</span>\n </div>\n <wx-alert\n v-if=\"outcome.balance\"\n :type=\"outcome.balance.kind === 'over' ? 'danger' : 'warning'\"\n :description=\"\n t(outcome.balance.kind === 'over' ? 'order.change-over' : 'order.change-due', {\n amount: outcome.balance.amount,\n })\n \"\n />\n </div>\n </div>\n\n <template #footer>\n <wx-button @click=\"open = false\">{{ t('common.cancel') }}</wx-button>\n <wx-button\n v-if=\"!outcome\"\n type=\"primary\"\n :disabled=\"!input\"\n :loading=\"checking\"\n data-test=\"change-check\"\n @click=\"check\"\n >\n {{ t('order.change-check') }}\n </wx-button>\n <wx-button v-else type=\"primary\" :loading=\"saving\" data-test=\"change-save\" @click=\"save\">\n {{ t('order.change-save') }}\n </wx-button>\n </template>\n </wx-dialog>\n</template>\n\n<style scoped>\n.wx-delivery-change {\n display: flex;\n flex-direction: column;\n gap: var(--wx-space-16);\n min-width: 0;\n}\n\n.wx-delivery-change__town,\n.wx-delivery-change__methods {\n display: flex;\n flex-direction: column;\n gap: var(--wx-space-8);\n min-width: 0;\n}\n\n.wx-delivery-change__chosen,\n.wx-delivery-change__strong {\n color: var(--wx-text-strong);\n font-weight: var(--wx-font-weight-semibold);\n}\n\n.wx-delivery-change__pair {\n display: grid;\n grid-template-columns: repeat(auto-fit, minmax(160px, 1fr));\n gap: var(--wx-space-16);\n}\n\n.wx-delivery-change__outcome {\n display: flex;\n flex-direction: column;\n gap: var(--wx-space-8);\n padding: var(--wx-space-12);\n border-radius: var(--wx-radius-md);\n background: var(--wx-bg-subtle);\n}\n\n.wx-delivery-change__row {\n display: flex;\n flex-wrap: wrap;\n justify-content: space-between;\n gap: var(--wx-space-4) var(--wx-space-12);\n min-width: 0;\n}\n\n.wx-delivery-change__label {\n color: var(--wx-text-muted);\n}\n</style>\n","<script setup lang=\"ts\">\nimport { computed, ref } from 'vue'\nimport {\n useModal,\n WxAlert,\n WxButton,\n WxDialog,\n WxFormItem,\n WxInput,\n WxInputNumber,\n WxSelect,\n WxSpace,\n WxSwitch,\n WxText,\n} from '@webx-ui/core'\nimport { useAdmin, useErrorText } from '@webx-ui/module-admin'\nimport { createDeliveryApi } from './api'\nimport { useDeliveryWords } from './i18n'\nimport type { CarrierField, OrderDelivery, WaybillDraft } from './types'\n\n/**\n * «Create waybill» (§11.2, §14.2): the request the carrier gets, looked over first. The manager\n * may change who receives the parcel — first and last name apart, as the order keeps them — what\n * it is declared to be worth, the cash to collect on receipt and the carrier's own fields of its\n * type (weight, what is inside: `DescribesWaybill`); a type that takes no cash on delivery has no\n * such field. Who pays the carrier and what is inside are the order's and are shown as they are.\n *\n * Resolves with the tab's new state once the carrier made the waybill.\n */\ndefineOptions({ name: 'WxDeliveryWaybillDialog' })\n\nconst props = defineProps<{ orderId: number; draft: WaybillDraft; exponent: number }>()\n\nconst { open, resolve } = useModal<OrderDelivery>()\n\nconst context = useAdmin()\nconst api = createDeliveryApi(context)\nconst t = useDeliveryWords()\nconst message = useErrorText()\n\nconst scale = 10 ** props.exponent\nconst major = (minor: number | null) => (minor === null ? null : minor / scale)\nconst minor = (value: number | null | undefined) =>\n value === null || value === undefined ? null : Math.round(value * scale)\n\nconst firstName = ref(props.draft.recipient.first_name)\nconst lastName = ref(props.draft.recipient.last_name)\nconst phone = ref(props.draft.recipient.phone ?? '')\nconst declared = ref<number | null>(major(props.draft.declared_value))\nconst cod = ref<number | null>(major(props.draft.cod))\nconst errors = ref<Record<string, string[]>>({})\n\n/** The type's own fields, and whether it takes cash on delivery at all (no form — the base's dialog). */\nconst extraFields = computed<CarrierField[]>(() => props.draft.form?.fields ?? [])\nconst takesCod = computed(() => props.draft.form?.cod ?? true)\nconst extra = ref<Record<string, unknown>>(\n Object.fromEntries(\n extraFields.value.map((field) => [\n field.name,\n props.draft.extra?.[field.name] ?? field.default ?? null,\n ]),\n ),\n)\n\nfunction fieldLabel(field: CarrierField): string {\n if (typeof field.label === 'string') return field.label\n if (field.label && typeof field.label === 'object') {\n return field.label[context.i18n.state.locale] ?? Object.values(field.label)[0] ?? field.name\n }\n\n return field.name\n}\nconst saving = ref(false)\n\nconst money = (amount: number) =>\n new Intl.NumberFormat(undefined, {\n style: 'currency',\n currency: props.draft.currency,\n minimumFractionDigits: props.exponent,\n maximumFractionDigits: props.exponent,\n }).format(amount / scale)\n\nconst payer = computed(() =>\n props.draft.payer === 'sender' ? t('order.payer-sender') : t('order.payer-recipient'),\n)\n\nconst errorOf = (key: string) => errors.value[key]?.[0]\n\nasync function submit(): Promise<void> {\n if (saving.value || firstName.value.trim() === '') return\n\n saving.value = true\n errors.value = {}\n\n try {\n resolve(\n await api.createWaybill(props.orderId, {\n recipient_first_name: firstName.value.trim(),\n recipient_last_name: lastName.value.trim(),\n recipient_phone: phone.value.trim() || null,\n declared_value: minor(declared.value),\n ...(takesCod.value ? { cod: minor(cod.value) } : {}),\n ...(extraFields.value.length > 0 ? { extra: extra.value } : {}),\n }),\n )\n } catch (error) {\n errors.value = (error as { errors?: Record<string, string[]> }).errors ?? {}\n if (Object.keys(errors.value).length === 0) errors.value = { waybill: [message(error)] }\n } finally {\n saving.value = false\n }\n}\n</script>\n\n<template>\n <wx-dialog v-model:open=\"open\" :title=\"t('order.create-title')\" :width=\"560\">\n <div class=\"wx-delivery-waybill\">\n <wx-text tone=\"muted\" size=\"sm\">{{\n t(takesCod ? 'order.create-help' : 'order.create-help-no-cod')\n }}</wx-text>\n\n <wx-alert v-if=\"errorOf('waybill')\" type=\"danger\" :description=\"errorOf('waybill')\" />\n\n <div class=\"wx-delivery-waybill__pair\">\n <wx-form-item\n :label=\"t('order.recipient-first-name')\"\n :error=\"errorOf('recipient_first_name')\"\n required\n >\n <wx-input\n v-model=\"firstName\"\n :maxlength=\"190\"\n autocomplete=\"off\"\n data-test=\"waybill-first-name\"\n />\n </wx-form-item>\n <wx-form-item\n :label=\"t('order.recipient-last-name')\"\n :error=\"errorOf('recipient_last_name')\"\n >\n <wx-input\n v-model=\"lastName\"\n :maxlength=\"190\"\n autocomplete=\"off\"\n data-test=\"waybill-last-name\"\n />\n </wx-form-item>\n </div>\n\n <div class=\"wx-delivery-waybill__pair\">\n <wx-form-item :label=\"t('order.recipient-phone')\" :error=\"errorOf('recipient_phone')\">\n <wx-input v-model=\"phone\" :maxlength=\"32\" autocomplete=\"off\" />\n </wx-form-item>\n <wx-form-item :label=\"t('order.declared')\" :error=\"errorOf('declared_value')\">\n <wx-input-number v-model=\"declared\" :min=\"0\" :precision=\"exponent\" :step=\"1\" />\n </wx-form-item>\n </div>\n\n <wx-form-item\n v-if=\"takesCod\"\n :label=\"t('order.cod')\"\n :help=\"t('order.cod-help')\"\n :error=\"errorOf('cod')\"\n data-test=\"waybill-cod\"\n >\n <wx-input-number v-model=\"cod\" :min=\"0\" :precision=\"exponent\" :step=\"1\" />\n </wx-form-item>\n\n <div\n v-if=\"extraFields.length > 0\"\n class=\"wx-delivery-waybill__fact\"\n data-test=\"waybill-extra\"\n >\n <span class=\"wx-delivery-waybill__label\">{{ t('order.carrier-fields') }}</span>\n <div class=\"wx-delivery-waybill__pair\">\n <wx-form-item\n v-for=\"field in extraFields\"\n :key=\"field.name\"\n :label=\"fieldLabel(field)\"\n :required=\"field.required === true\"\n :error=\"errorOf(`extra.${field.name}`)\"\n >\n <wx-input-number\n v-if=\"field.type === 'number'\"\n v-model=\"extra[field.name] as number\"\n :min=\"field.min\"\n :max=\"field.max\"\n :step=\"field.step\"\n :precision=\"field.precision\"\n />\n <wx-switch\n v-else-if=\"field.type === 'boolean'\"\n v-model=\"extra[field.name] as boolean\"\n />\n <wx-select\n v-else-if=\"field.type === 'select' && Array.isArray(field.options)\"\n v-model=\"extra[field.name] as string\"\n :options=\"field.options\"\n />\n <wx-input v-else v-model=\"extra[field.name] as string\" autocomplete=\"off\" />\n </wx-form-item>\n </div>\n </div>\n\n <div class=\"wx-delivery-waybill__fact\">\n <span class=\"wx-delivery-waybill__label\">{{ t('order.payer') }}</span>\n <span>{{ payer }}</span>\n </div>\n\n <div v-if=\"draft.lines.length > 0\" class=\"wx-delivery-waybill__fact\">\n <span class=\"wx-delivery-waybill__label\">{{ t('order.lines') }}</span>\n <ul class=\"wx-delivery-waybill__lines\">\n <li v-for=\"(line, index) in draft.lines\" :key=\"index\">\n <span class=\"wx-delivery-waybill__line-name\">{{ line.name }}</span>\n <span class=\"wx-delivery-waybill__line-qty\">× {{ line.qty }}</span>\n <span class=\"wx-delivery-waybill__line-price\">{{ money(line.price) }}</span>\n </li>\n </ul>\n </div>\n </div>\n\n <template #footer>\n <wx-space size=\"sm\">\n <wx-button variant=\"outline\" @click=\"open = false\">{{ t('common.cancel') }}</wx-button>\n <wx-button\n type=\"primary\"\n :loading=\"saving\"\n :disabled=\"firstName.trim() === ''\"\n data-test=\"waybill-create\"\n @click=\"submit\"\n >\n {{ t('order.create') }}\n </wx-button>\n </wx-space>\n </template>\n </wx-dialog>\n</template>\n\n<style scoped>\n.wx-delivery-waybill {\n display: flex;\n flex-direction: column;\n gap: var(--wx-space-12);\n container-type: inline-size;\n}\n\n/* Two fields in a row once the dialog has room for them: the panel's width decides, not the window's. */\n.wx-delivery-waybill__pair {\n display: grid;\n gap: 0 var(--wx-space-16);\n grid-template-columns: minmax(0, 1fr);\n}\n\n@container (min-width: 440px) {\n .wx-delivery-waybill__pair {\n grid-template-columns: repeat(2, minmax(0, 1fr));\n }\n}\n\n.wx-delivery-waybill__fact {\n display: flex;\n flex-direction: column;\n gap: var(--wx-space-4);\n}\n\n.wx-delivery-waybill__label {\n color: var(--wx-text-muted);\n font-size: var(--wx-font-size-sm);\n}\n\n.wx-delivery-waybill__lines {\n display: flex;\n flex-direction: column;\n gap: var(--wx-space-4);\n margin: 0;\n padding: 0;\n list-style: none;\n}\n\n.wx-delivery-waybill__lines li {\n display: flex;\n align-items: baseline;\n gap: var(--wx-space-8);\n min-width: 0;\n}\n\n.wx-delivery-waybill__line-name {\n flex: 1 1 auto;\n min-width: 0;\n overflow-wrap: anywhere;\n}\n\n.wx-delivery-waybill__line-qty,\n.wx-delivery-waybill__line-price {\n flex: none;\n color: var(--wx-text-muted);\n font-variant-numeric: tabular-nums;\n}\n</style>\n","<script setup lang=\"ts\">\nimport { computed, ref, watch } from 'vue'\nimport {\n createModal,\n toast,\n WxAlert,\n WxBadge,\n WxButton,\n WxCard,\n WxEmpty,\n WxPopconfirm,\n WxSkeleton,\n WxSpace,\n WxText,\n WxTooltip,\n type BadgeType,\n} from '@webx-ui/core'\nimport { useAdmin, useErrorText, useHistorySubject, WxDate } from '@webx-ui/module-admin'\nimport { createDeliveryApi } from './api'\nimport { useDeliveryWords } from './i18n'\nimport OrderChangeDialog from './OrderChangeDialog.vue'\nimport type { OrderDelivery, OrderDeliveryChangeState, ShipmentRow, ShipmentStatus } from './types'\nimport WaybillDialog from './WaybillDialog.vue'\n\n/**\n * `wx-delivery-order` — the tab «Delivery» of the order's card (§14.2), patched onto `orders.show`\n * where the orders are installed. What the buyer chose comes from the order's copy (§11.1), never\n * from the live method. Under it — the parcels: «Create waybill» with the request to look over,\n * the statuses the tracking brought, «Refresh tracking», the label and «Cancel waybill».\n * «Change delivery» puts the choice right for whoever edits the order — not while a waybill\n * stands — and the card reads the order again: its total may have moved.\n *\n * The card does not know the module: the order's id is the one it gives its history.\n */\ndefineOptions({ name: 'WxDeliveryOrder' })\n\nconst admin = useAdmin()\nconst api = createDeliveryApi(admin)\nconst t = useDeliveryWords()\nconst message = useErrorText()\nconst subject = useHistorySubject()\n\nconst state = ref<OrderDelivery | null>(null)\nconst loading = ref(false)\nconst failed = ref(false)\nconst busy = ref(false)\n\nconst id = computed(() => {\n const value = Number(subject?.id.value)\n\n return Number.isInteger(value) && value > 0 ? value : null\n})\n\nconst waybillDialog = createModal<\n OrderDelivery,\n { orderId: number; draft: NonNullable<OrderDelivery['draft']>; exponent: number }\n>(WaybillDialog)\n\nconst changeDialog = createModal<\n OrderDelivery,\n { orderId: number; start: OrderDeliveryChangeState }\n>(OrderChangeDialog)\n\nasync function change(): Promise<void> {\n const open = state.value\n\n if (!open?.change || open.change.refusal) return\n\n const next = await changeDialog({ orderId: open.order_id, start: open.change })\n\n if (next) {\n state.value = next\n toast.success(t('order.changed'))\n await subject?.reload?.()\n }\n}\n\nasync function load(): Promise<void> {\n if (id.value === null) return\n\n loading.value = true\n failed.value = false\n\n try {\n state.value = await api.orderDelivery(id.value)\n } catch {\n failed.value = true\n } finally {\n loading.value = false\n }\n}\n\nwatch(id, () => void load(), { immediate: true })\n\nconst delivery = computed(() => state.value?.delivery ?? null)\nconst tracking = computed(() => state.value?.shipments.some((one) => !one.final) ?? false)\nconst canCreate = computed(\n () =>\n !!state.value?.can_ship &&\n !!state.value.waybills &&\n state.value.active === null &&\n !!state.value.draft,\n)\n\nconst tones: Record<ShipmentStatus, BadgeType> = {\n created: 'info',\n in_transit: 'primary',\n at_point: 'warning',\n out_for_delivery: 'warning',\n received: 'success',\n refused: 'danger',\n returning: 'danger',\n returned: 'default',\n cancelled: 'default',\n}\n\nasync function create(): Promise<void> {\n const open = state.value\n\n if (!open?.draft) return\n\n const next = await waybillDialog({\n orderId: open.order_id,\n draft: open.draft,\n exponent: open.exponent,\n })\n\n if (next) {\n state.value = next\n toast.success(t('order.created', { number: next.shipments[0]?.number ?? '' }))\n }\n}\n\nasync function run(action: () => Promise<OrderDelivery>, done: string): Promise<void> {\n if (busy.value) return\n\n busy.value = true\n\n try {\n state.value = await action()\n toast.success(done)\n } catch (error) {\n toast.danger(message(error))\n } finally {\n busy.value = false\n }\n}\n\nconst track = () => run(() => api.trackOrder(state.value!.order_id), t('order.tracked'))\nconst cancel = (row: ShipmentRow) => run(() => api.cancelShipment(row.id), t('order.cancelled'))\n\nasync function label(row: ShipmentRow): Promise<void> {\n try {\n const found = await api.shipmentLabel(row.id)\n\n if ('url' in found) {\n window.open(found.url, '_blank', 'noopener')\n\n return\n }\n\n const bytes = Uint8Array.from(atob(found.pdf), (char) => char.charCodeAt(0))\n window.open(URL.createObjectURL(new Blob([bytes], { type: 'application/pdf' })), '_blank')\n } catch (error) {\n toast.danger(message(error))\n }\n}\n</script>\n\n<template>\n <div class=\"wx-delivery-order\">\n <wx-skeleton v-if=\"loading && !state\" :rows=\"4\" />\n\n <wx-alert v-else-if=\"failed\" type=\"danger\" :description=\"t('order.failed')\" />\n\n <template v-else-if=\"state\">\n <wx-card v-if=\"!delivery\">\n <wx-empty :title=\"t('order.none')\" :description=\"t('order.none-help')\" />\n </wx-card>\n\n <template v-else>\n <wx-card :title=\"t('order.chosen')\">\n <template v-if=\"state.change\" #extra>\n <wx-tooltip\n :content=\"state.change.refusal ?? undefined\"\n :disabled=\"!state.change.refusal\"\n >\n <span>\n <wx-button\n size=\"sm\"\n variant=\"outline\"\n icon=\"edit\"\n :disabled=\"Boolean(state.change.refusal) || busy\"\n data-test=\"order-change\"\n @click=\"change\"\n >\n {{ t('order.change') }}\n </wx-button>\n </span>\n </wx-tooltip>\n </template>\n <dl class=\"wx-delivery-order__facts\" data-test=\"order-delivery-facts\">\n <div class=\"wx-delivery-order__fact\">\n <dt>{{ t('order.method') }}</dt>\n <dd>{{ delivery.method }}</dd>\n </div>\n <div v-if=\"delivery.locality\" class=\"wx-delivery-order__fact\">\n <dt>{{ t('order.locality') }}</dt>\n <dd>{{ delivery.locality }}</dd>\n </div>\n <div v-if=\"delivery.point\" class=\"wx-delivery-order__fact\">\n <dt>{{ t('order.point') }}</dt>\n <dd>\n <span class=\"wx-delivery-order__strong\">{{ delivery.point.title }}</span>\n <span v-if=\"delivery.point.address\">{{ delivery.point.address }}</span>\n <span v-if=\"delivery.point.schedule\" class=\"wx-delivery-order__muted\">\n {{ delivery.point.schedule }}\n </span>\n </dd>\n </div>\n <div v-if=\"delivery.address\" class=\"wx-delivery-order__fact\">\n <dt>{{ t('order.address') }}</dt>\n <dd>\n <span>{{ delivery.address }}</span>\n <span v-if=\"delivery.note\" class=\"wx-delivery-order__muted\">{{\n delivery.note\n }}</span>\n </dd>\n </div>\n <div class=\"wx-delivery-order__fact\">\n <dt>{{ t('order.cost') }}</dt>\n <dd>\n <span>\n <s v-if=\"delivery.was\" class=\"wx-delivery-order__muted\">{{ delivery.was }}</s>\n {{ delivery.price ?? '—' }}\n <span v-if=\"delivery.estimate\" class=\"wx-delivery-order__muted\">\n ≈ {{ delivery.estimate }}\n </span>\n </span>\n <wx-badge v-if=\"delivery.paid_by_store\" size=\"sm\" type=\"success\">\n {{ t('order.paid-by-store') }}\n </wx-badge>\n </dd>\n </div>\n <div v-if=\"delivery.payer\" class=\"wx-delivery-order__fact\">\n <dt>{{ t('order.payer') }}</dt>\n <dd>\n {{\n delivery.payer === 'sender' ? t('order.payer-sender') : t('order.payer-recipient')\n }}\n </dd>\n </div>\n </dl>\n <wx-text\n v-if=\"state.change?.refusal\"\n size=\"sm\"\n tone=\"muted\"\n class=\"wx-delivery-order__why\"\n data-test=\"order-change-why\"\n >\n {{ state.change.refusal }}\n </wx-text>\n </wx-card>\n\n <wx-card :title=\"t('order.parcels')\">\n <template v-if=\"state.can_ship && (canCreate || tracking)\" #extra>\n <wx-space :size=\"8\" wrap>\n <wx-button\n v-if=\"tracking\"\n size=\"sm\"\n variant=\"outline\"\n icon=\"refresh\"\n :loading=\"busy\"\n data-test=\"order-track\"\n @click=\"track\"\n >\n {{ t('order.track') }}\n </wx-button>\n <wx-button\n v-if=\"canCreate\"\n size=\"sm\"\n type=\"primary\"\n icon=\"plus\"\n data-test=\"order-waybill\"\n @click=\"create\"\n >\n {{ t('order.create') }}\n </wx-button>\n </wx-space>\n </template>\n\n <wx-text v-if=\"!state.waybills\" tone=\"muted\">{{ t('order.own') }}</wx-text>\n\n <wx-text v-else-if=\"state.shipments.length === 0\" tone=\"muted\">\n {{ t('order.no-parcels') }}\n </wx-text>\n\n <ul v-else class=\"wx-delivery-order__parcels\" data-test=\"order-parcels\">\n <li v-for=\"row in state.shipments\" :key=\"row.id\" class=\"wx-delivery-order__parcel\">\n <div class=\"wx-delivery-order__parcel-head\">\n <span class=\"wx-delivery-order__strong\">{{ row.number ?? '—' }}</span>\n <wx-badge size=\"sm\" :type=\"tones[row.status]\">{{ row.status_label }}</wx-badge>\n <span v-if=\"row.cost_formatted\" class=\"wx-delivery-order__muted\">\n {{ t('order.carrier-cost') }}: {{ row.cost_formatted }}\n </span>\n <span class=\"wx-delivery-order__gap\" />\n <wx-space :size=\"8\" wrap>\n <wx-button\n v-if=\"row.label\"\n size=\"sm\"\n variant=\"text\"\n icon=\"download\"\n @click=\"label(row)\"\n >\n {{ t('order.label') }}\n </wx-button>\n <wx-popconfirm\n v-if=\"state.can_ship && row.cancellable\"\n :title=\"t('order.cancel-confirm', { number: row.number ?? '' })\"\n :confirm-text=\"t('order.cancel')\"\n :cancel-text=\"t('common.cancel')\"\n confirm-type=\"danger\"\n align=\"end\"\n @confirm=\"cancel(row)\"\n >\n <template #trigger>\n <wx-button size=\"sm\" variant=\"text\" type=\"danger\" :disabled=\"busy\">\n {{ t('order.cancel') }}\n </wx-button>\n </template>\n </wx-popconfirm>\n </wx-space>\n </div>\n\n <ol class=\"wx-delivery-order__events\">\n <li\n v-for=\"(event, index) in row.events\"\n :key=\"index\"\n class=\"wx-delivery-order__event\"\n >\n <wx-date :value=\"event.at\" size=\"sm\" tone=\"muted\" />\n <span>{{ event.label }}</span>\n <span v-if=\"event.text\" class=\"wx-delivery-order__muted\">{{ event.text }}</span>\n </li>\n </ol>\n\n <wx-text v-if=\"row.final\" size=\"sm\" tone=\"muted\">{{ t('order.final') }}</wx-text>\n </li>\n </ul>\n\n <wx-text\n v-if=\"state.can_ship && state.waybills && state.active !== null\"\n size=\"sm\"\n tone=\"muted\"\n >\n {{ t('order.made-already') }}\n </wx-text>\n </wx-card>\n </template>\n </template>\n </div>\n</template>\n\n<style scoped>\n.wx-delivery-order {\n display: flex;\n flex-direction: column;\n gap: var(--wx-gap, var(--wx-space-16));\n min-width: 0;\n}\n\n.wx-delivery-order__facts {\n display: grid;\n gap: var(--wx-space-12);\n margin: 0;\n container-type: inline-size;\n}\n\n.wx-delivery-order__fact {\n display: grid;\n grid-template-columns: minmax(0, 1fr);\n gap: var(--wx-space-2);\n}\n\n/* The label beside its value once the card has room for both: the panel's width decides. */\n@container (min-width: 480px) {\n .wx-delivery-order__fact {\n grid-template-columns: 160px minmax(0, 1fr);\n gap: var(--wx-space-16);\n }\n}\n\n.wx-delivery-order__fact dt {\n color: var(--wx-text-muted);\n font-size: var(--wx-font-size-sm);\n}\n\n.wx-delivery-order__fact dd {\n display: flex;\n flex-direction: column;\n align-items: flex-start;\n gap: var(--wx-space-2);\n min-width: 0;\n margin: 0;\n overflow-wrap: anywhere;\n}\n\n.wx-delivery-order__why {\n display: block;\n margin-block-start: var(--wx-space-12);\n}\n\n.wx-delivery-order__strong {\n color: var(--wx-text-strong);\n font-weight: var(--wx-font-weight-semibold);\n}\n\n.wx-delivery-order__muted {\n color: var(--wx-text-muted);\n font-size: var(--wx-font-size-sm);\n}\n\n.wx-delivery-order__parcels {\n display: flex;\n flex-direction: column;\n gap: var(--wx-space-16);\n margin: 0;\n padding: 0;\n list-style: none;\n}\n\n.wx-delivery-order__parcel {\n display: flex;\n flex-direction: column;\n gap: var(--wx-space-8);\n min-width: 0;\n}\n\n.wx-delivery-order__parcel + .wx-delivery-order__parcel {\n padding-top: var(--wx-space-16);\n border-top: 1px solid var(--wx-border-default);\n}\n\n.wx-delivery-order__parcel-head {\n display: flex;\n flex-wrap: wrap;\n align-items: center;\n gap: var(--wx-space-8);\n min-width: 0;\n}\n\n.wx-delivery-order__gap {\n flex: 1 1 auto;\n}\n\n.wx-delivery-order__events {\n display: flex;\n flex-direction: column;\n gap: var(--wx-space-4);\n margin: 0;\n padding: 0;\n list-style: none;\n}\n\n.wx-delivery-order__event {\n display: flex;\n flex-wrap: wrap;\n align-items: baseline;\n gap: var(--wx-space-4) var(--wx-space-8);\n min-width: 0;\n}\n</style>\n","import type { AdminModule } from '@webx-ui/module-admin'\nimport CountryField from './fields/CountryField.vue'\nimport LocalitiesField from './fields/LocalitiesField.vue'\nimport LocalityField from './fields/LocalityField.vue'\nimport PointKindField from './fields/PointKindField.vue'\nimport RegionField from './fields/RegionField.vue'\nimport ScheduleField from './fields/ScheduleField.vue'\nimport OrderDeliveryNode from './OrderDeliveryNode.vue'\n\nexport interface DeliveryOptions {\n /** Where the section lives inside the panel; its screens sit under it. */\n path?: string\n}\n\n/**\n * «Delivery» as sections of the panel (spec §14.2): the methods, the shop's own points, the\n * carriers, the geography, the popular towns and the binding queue.\n *\n * Six modules rather than one, because the navigation is one entry per module; the server puts\n * them in the `delivery` group, which draws them under one heading. The panel includes them as\n * `...delivery()` — the line `extra.webx.panel.register` of the composer package names. A section\n * whose server half is not installed never appears: the entry is built from the manifest.\n *\n * The fields only this section's screens have — a locality, the courier's localities, a region\n * of the country, a country of the site, the opening hours, the kind of points — come with the\n * first module, and so does the node of the tab «Delivery» the server patches onto the order's card.\n */\nexport function delivery(options: DeliveryOptions = {}): AdminModule[] {\n const path = options.path ?? '/delivery'\n const section = (id: string, slug: string, name: string, page: () => Promise<unknown>) => ({\n id,\n path: slug === '' ? path : `${path}/${slug}`,\n routes: [\n {\n path: slug === '' ? path : `${path}/${slug}`,\n name,\n component: page as never,\n },\n ],\n })\n\n return [\n {\n ...section('delivery', '', 'webx.delivery', () => import('./MethodsPage.vue')),\n types: {\n 'wx-delivery-locality': { component: LocalityField, kind: 'field' },\n 'wx-delivery-localities': { component: LocalitiesField, kind: 'field', wide: true },\n 'wx-delivery-region': { component: RegionField, kind: 'field', nested: true },\n 'wx-delivery-country': { component: CountryField, kind: 'field' },\n 'wx-delivery-schedule': { component: ScheduleField, kind: 'field', wide: true },\n 'wx-delivery-point-kind': { component: PointKindField, kind: 'field' },\n // The tab «Delivery» of the order's card, patched onto `orders.show` by the server.\n 'wx-delivery-order': { component: OrderDeliveryNode, kind: 'display' },\n },\n },\n section('delivery-points', 'points', 'webx.delivery.points', () => import('./PointsPage.vue')),\n section(\n 'delivery-carriers',\n 'carriers',\n 'webx.delivery.carriers',\n () => import('./CarriersPage.vue'),\n ),\n section(\n 'delivery-geography',\n 'geography',\n 'webx.delivery.geography',\n () => import('./GeographyPage.vue'),\n ),\n section(\n 'delivery-popular',\n 'popular',\n 'webx.delivery.popular',\n () => import('./PopularPage.vue'),\n ),\n section(\n 'delivery-bindings',\n 'bindings',\n 'webx.delivery.bindings',\n () => import('./BindingsPage.vue'),\n ),\n ]\n}\n"],"names":["query","params","search","key","value","createDeliveryApi","admin","base","http","data","body","id","type","values","ids","kind","names","field","name","credentials","directory","code","answer","codes","carrier","country","changes","q","force","order","locality","method","page","input","shipment","bodyOf","error","statusOf","status","props","__props","_useModel","api","useAdmin","countries","ref","onMounted","on","one","options","computed","_createBlock","_unref","WxSelect","$event","deliveryMessages","seeded","useDeliveryMessages","i18n","useDeliveryWords","t","useTranslate","open","emit","__emit","message","useErrorText","main","useDefaultLocale","detail","errors","similar","loading","saving","title","patch","target","reset","toast","watch","now","save","fields","pick","remove","record","held","confirm","removal","manual","WxDialog","_createVNode","WxSpace","WxButton","_createElementVNode","_hoisted_1","WxSkeleton","_createElementBlock","_Fragment","WxAlert","_hoisted_2","_toDisplayString","_hoisted_3","_renderList","item","_hoisted_4","WxBadge","WxScreen","term","found","searched","searching","creating","naming","offered","nothing","asked","mine","rows","select","option","row","made","_openBlock","WxAutocomplete","_withCtx","WxIcon","_hoisted_5","LocalityDialog","known","list","missing","next","add","_createTextVNode","LocalitySearch","chosen","changing","root","change","nextTick","cancel","onEscape","event","defined","choices","startNaming","define","WxLink","WxText","WxFormItem","WxInput","regions","before","DAYS","modes","written","hours","from","to","read","text","parts","part","intervals","match","pad","hour","modeOf","texts","invalid","day","write","draft","empty","setMode","mode","setHours","exceptions","addException","setException","index","removeException","_","at","WxDatePicker","WxAction","resolve","useModal","town","townTerm","towns","popular","searchingTowns","methods","loadingMethods","methodId","pointTerm","points","searchingPoints","point","streetTerm","streets","streetId","house","apartment","note","reason","outcome","checking","ownStreets","methodOptions","errorOf","townOptions","pointOptions","streetOptions","townAsked","searchTowns","pickTown","selectTown","loadMethods","kept","pointAsked","searchPoints","selectPoint","searchStreets","selectStreet","typedStreet","refusal","check","done","asks","same","methodChoice","WxRadioGroup","_hoisted_6","_hoisted_7","_hoisted_8","_hoisted_9","_hoisted_10","_hoisted_11","_hoisted_12","context","scale","major","minor","firstName","lastName","phone","declared","cod","extraFields","takesCod","extra","fieldLabel","money","amount","payer","submit","WxInputNumber","WxSwitch","line","_hoisted_13","_hoisted_14","subject","useHistorySubject","state","failed","busy","waybillDialog","createModal","WaybillDialog","changeDialog","OrderChangeDialog","load","delivery","tracking","canCreate","tones","create","run","action","track","label","bytes","char","WxCard","WxTooltip","_hoisted_15","_hoisted_16","_hoisted_17","_hoisted_18","WxPopconfirm","_hoisted_19","WxDate","_hoisted_20","WxEmpty","path","section","slug","LocalityField","LocalitiesField","RegionField","CountryField","ScheduleField","PointKindField","OrderDeliveryNode"],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ export { delivery, type DeliveryOptions } from './module';
2
+ export { createDeliveryApi, type DeliveryApi } from './api';
3
+ export { deliveryMessages } from './messages';
4
+ export { default as WxDeliveryLocalityDialog } from './LocalityDialog';
5
+ export { default as WxDeliveryLocalitySearch } from './LocalitySearch';
6
+ export type * from './types';
package/dist/index.js ADDED
@@ -0,0 +1,9 @@
1
+ import { L as i, a as r, c as l, d as s, b as y } from "./index-5nt0M0In.js";
2
+ export {
3
+ i as WxDeliveryLocalityDialog,
4
+ r as WxDeliveryLocalitySearch,
5
+ l as createDeliveryApi,
6
+ s as delivery,
7
+ y as deliveryMessages
8
+ };
9
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":";"}
@@ -0,0 +1,7 @@
1
+ import { Messages } from '@webx-ui/module-admin';
2
+ /**
3
+ * The English this package speaks on its own, before the server's dictionary arrives, or without
4
+ * one. The server ships the same lines under `webx-delivery::panel.*` and overrides these;
5
+ * `messages.test.ts` keeps the two sets of keys equal.
6
+ */
7
+ export declare const deliveryMessages: Record<string, Messages>;
@@ -0,0 +1,19 @@
1
+ import { AdminModule } from '@webx-ui/module-admin';
2
+ export interface DeliveryOptions {
3
+ /** Where the section lives inside the panel; its screens sit under it. */
4
+ path?: string;
5
+ }
6
+ /**
7
+ * «Delivery» as sections of the panel (spec §14.2): the methods, the shop's own points, the
8
+ * carriers, the geography, the popular towns and the binding queue.
9
+ *
10
+ * Six modules rather than one, because the navigation is one entry per module; the server puts
11
+ * them in the `delivery` group, which draws them under one heading. The panel includes them as
12
+ * `...delivery()` — the line `extra.webx.panel.register` of the composer package names. A section
13
+ * whose server half is not installed never appears: the entry is built from the manifest.
14
+ *
15
+ * The fields only this section's screens have — a locality, the courier's localities, a region
16
+ * of the country, a country of the site, the opening hours, the kind of points — come with the
17
+ * first module, and so does the node of the tab «Delivery» the server patches onto the order's card.
18
+ */
19
+ export declare function delivery(options?: DeliveryOptions): AdminModule[];
package/dist/style.css ADDED
@@ -0,0 +1 @@
1
+ @container wx-row (min-width: 400px){.wx-row.wx-delivery-coordinates>.wx-col{width:50%}}.wx-delivery-locality[data-v-169d3b1d]{display:flex;flex-direction:column;gap:var(--wx-space-12)}.wx-delivery-locality__help[data-v-169d3b1d]{margin:0}.wx-delivery-locality__similar[data-v-169d3b1d]{display:flex;flex-direction:column;gap:var(--wx-space-6);margin:var(--wx-space-8) 0 0;padding:0;list-style:none}.wx-delivery-locality__similar li[data-v-169d3b1d]{display:flex;flex-wrap:wrap;align-items:center;gap:var(--wx-space-8)}.wx-delivery-locality__label[data-v-169d3b1d]{flex:1 1 160px;min-width:0}.wx-delivery-locality__footer[data-v-169d3b1d]{width:100%}.wx-delivery-locality__gap[data-v-169d3b1d]{flex:1 1 auto}.wx-delivery-locality-search[data-v-165fdb46]{width:100%;min-width:0}.wx-delivery-locality-search__add[data-v-165fdb46]{display:flex;align-items:center;gap:var(--wx-space-6);min-width:0;color:var(--wx-color-primary);font-weight:var(--wx-font-weight-medium)}.wx-delivery-locality-search__add-label[data-v-165fdb46]{min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.wx-delivery-locality-search__name[data-v-165fdb46]{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.wx-delivery-locality-search__label[data-v-165fdb46]{color:var(--wx-text-muted);font-size:var(--wx-font-size-sm)}.wx-delivery-localities-field[data-v-14fcba6f]{display:flex;flex-direction:column;gap:var(--wx-space-8);width:100%;min-width:0}.wx-delivery-localities-field__tags[data-v-14fcba6f]{display:flex;flex-wrap:wrap;gap:var(--wx-space-6)}.wx-delivery-locality-field[data-v-66cad5c9]{width:100%;min-width:0}.wx-delivery-locality-field__chosen[data-v-66cad5c9]{display:flex;flex-wrap:wrap;align-items:center;gap:var(--wx-space-8);min-height:var(--wx-control-height-md, 32px)}.wx-delivery-locality-field__search[data-v-66cad5c9]{display:flex;align-items:center;gap:var(--wx-space-8);min-width:0}.wx-delivery-locality-field__search[data-v-66cad5c9]>:first-child{flex:1 1 auto}.wx-delivery-locality-field__label[data-v-66cad5c9]{min-width:0;overflow-wrap:anywhere}.wx-delivery-point-kind[data-v-e4f84750]{display:flex;flex-wrap:wrap;align-items:center;gap:var(--wx-space-4) var(--wx-space-12);min-width:0}.wx-delivery-point-kind[data-v-e4f84750]>.wx-select{flex:1 1 240px;min-width:0}.wx-delivery-point-kind__new[data-v-e4f84750]{flex:0 0 auto;white-space:nowrap}.wx-delivery-point-kind__form[data-v-e4f84750]{display:flex;flex-direction:column;gap:var(--wx-space-12)}.wx-delivery-schedule[data-v-bd98b4bb]{display:flex;flex-direction:column;gap:var(--wx-space-6);width:100%;min-width:0;container-type:inline-size}.wx-delivery-schedule__day[data-v-bd98b4bb]{display:flex;flex-wrap:wrap;align-items:center;gap:var(--wx-space-8)}.wx-delivery-schedule__name[data-v-bd98b4bb]{flex:0 0 96px;font-size:var(--wx-font-size-sm)}.wx-delivery-schedule__day[data-v-bd98b4bb]>.wx-select,.wx-delivery-schedule__mode[data-v-bd98b4bb]{flex:0 1 180px;min-width:0}.wx-delivery-schedule__hours[data-v-bd98b4bb]{flex:1 1 160px;min-width:0}.wx-delivery-schedule__exceptions[data-v-bd98b4bb]{display:flex;flex-direction:column;gap:var(--wx-space-6);margin-top:var(--wx-space-8)}.wx-delivery-schedule__title[data-v-bd98b4bb]{font-weight:var(--wx-font-weight-medium)}.wx-delivery-schedule__add[data-v-bd98b4bb]{align-self:flex-start}@container (max-width: 360px){.wx-delivery-schedule__name[data-v-bd98b4bb]{flex-basis:100%}}.wx-delivery-change[data-v-ececa6e7]{display:flex;flex-direction:column;gap:var(--wx-space-16);min-width:0}.wx-delivery-change__town[data-v-ececa6e7],.wx-delivery-change__methods[data-v-ececa6e7]{display:flex;flex-direction:column;gap:var(--wx-space-8);min-width:0}.wx-delivery-change__chosen[data-v-ececa6e7],.wx-delivery-change__strong[data-v-ececa6e7]{color:var(--wx-text-strong);font-weight:var(--wx-font-weight-semibold)}.wx-delivery-change__pair[data-v-ececa6e7]{display:grid;grid-template-columns:repeat(auto-fit,minmax(160px,1fr));gap:var(--wx-space-16)}.wx-delivery-change__outcome[data-v-ececa6e7]{display:flex;flex-direction:column;gap:var(--wx-space-8);padding:var(--wx-space-12);border-radius:var(--wx-radius-md);background:var(--wx-bg-subtle)}.wx-delivery-change__row[data-v-ececa6e7]{display:flex;flex-wrap:wrap;justify-content:space-between;gap:var(--wx-space-4) var(--wx-space-12);min-width:0}.wx-delivery-change__label[data-v-ececa6e7]{color:var(--wx-text-muted)}.wx-delivery-waybill[data-v-ac182efe]{display:flex;flex-direction:column;gap:var(--wx-space-12);container-type:inline-size}.wx-delivery-waybill__pair[data-v-ac182efe]{display:grid;gap:0 var(--wx-space-16);grid-template-columns:minmax(0,1fr)}@container (min-width: 440px){.wx-delivery-waybill__pair[data-v-ac182efe]{grid-template-columns:repeat(2,minmax(0,1fr))}}.wx-delivery-waybill__fact[data-v-ac182efe]{display:flex;flex-direction:column;gap:var(--wx-space-4)}.wx-delivery-waybill__label[data-v-ac182efe]{color:var(--wx-text-muted);font-size:var(--wx-font-size-sm)}.wx-delivery-waybill__lines[data-v-ac182efe]{display:flex;flex-direction:column;gap:var(--wx-space-4);margin:0;padding:0;list-style:none}.wx-delivery-waybill__lines li[data-v-ac182efe]{display:flex;align-items:baseline;gap:var(--wx-space-8);min-width:0}.wx-delivery-waybill__line-name[data-v-ac182efe]{flex:1 1 auto;min-width:0;overflow-wrap:anywhere}.wx-delivery-waybill__line-qty[data-v-ac182efe],.wx-delivery-waybill__line-price[data-v-ac182efe]{flex:none;color:var(--wx-text-muted);font-variant-numeric:tabular-nums}.wx-delivery-order[data-v-0e98475a]{display:flex;flex-direction:column;gap:var(--wx-gap, var(--wx-space-16));min-width:0}.wx-delivery-order__facts[data-v-0e98475a]{display:grid;gap:var(--wx-space-12);margin:0;container-type:inline-size}.wx-delivery-order__fact[data-v-0e98475a]{display:grid;grid-template-columns:minmax(0,1fr);gap:var(--wx-space-2)}@container (min-width: 480px){.wx-delivery-order__fact[data-v-0e98475a]{grid-template-columns:160px minmax(0,1fr);gap:var(--wx-space-16)}}.wx-delivery-order__fact dt[data-v-0e98475a]{color:var(--wx-text-muted);font-size:var(--wx-font-size-sm)}.wx-delivery-order__fact dd[data-v-0e98475a]{display:flex;flex-direction:column;align-items:flex-start;gap:var(--wx-space-2);min-width:0;margin:0;overflow-wrap:anywhere}.wx-delivery-order__why[data-v-0e98475a]{display:block;margin-block-start:var(--wx-space-12)}.wx-delivery-order__strong[data-v-0e98475a]{color:var(--wx-text-strong);font-weight:var(--wx-font-weight-semibold)}.wx-delivery-order__muted[data-v-0e98475a]{color:var(--wx-text-muted);font-size:var(--wx-font-size-sm)}.wx-delivery-order__parcels[data-v-0e98475a]{display:flex;flex-direction:column;gap:var(--wx-space-16);margin:0;padding:0;list-style:none}.wx-delivery-order__parcel[data-v-0e98475a]{display:flex;flex-direction:column;gap:var(--wx-space-8);min-width:0}.wx-delivery-order__parcel+.wx-delivery-order__parcel[data-v-0e98475a]{padding-top:var(--wx-space-16);border-top:1px solid var(--wx-border-default)}.wx-delivery-order__parcel-head[data-v-0e98475a]{display:flex;flex-wrap:wrap;align-items:center;gap:var(--wx-space-8);min-width:0}.wx-delivery-order__gap[data-v-0e98475a]{flex:1 1 auto}.wx-delivery-order__events[data-v-0e98475a]{display:flex;flex-direction:column;gap:var(--wx-space-4);margin:0;padding:0;list-style:none}.wx-delivery-order__event[data-v-0e98475a]{display:flex;flex-wrap:wrap;align-items:baseline;gap:var(--wx-space-4) var(--wx-space-8);min-width:0}.wx-delivery-pane[data-v-087a46c0]{display:flex;flex-direction:column;gap:var(--wx-gap, var(--wx-space-16));min-width:0;padding:var(--wx-gap, var(--wx-space-16));container-type:inline-size}.wx-delivery-pane__ghost[data-v-087a46c0]{max-width:480px}.wx-delivery-methods>.wx-card__body{display:flex;flex-direction:column;overflow:clip;border-radius:inherit}.wx-delivery-methods__ghost[data-v-fcdaa585]{padding:var(--wx-space-12)}.wx-delivery-methods__list[data-v-fcdaa585]{padding:var(--wx-space-8)}.wx-delivery-methods__list[data-v-fcdaa585] .wx-sortable-list__row{gap:var(--wx-space-4);padding-inline:var(--wx-space-4)}.wx-delivery-methods__note[data-v-fcdaa585]{margin:var(--wx-space-8)}.wx-delivery-method[data-v-fcdaa585]{display:flex;flex:1 1 auto;flex-direction:column;gap:var(--wx-space-2);width:100%;min-width:0;padding-block:var(--wx-space-8);padding-inline:0;border:0;background:none;font:inherit;color:inherit;text-align:start;cursor:pointer}.wx-delivery-method__title[data-v-fcdaa585]{overflow:hidden;font-weight:var(--wx-font-weight-medium);text-overflow:ellipsis;white-space:nowrap}.wx-delivery-method.is-current .wx-delivery-method__title[data-v-fcdaa585]{color:var(--wx-color-primary)}.wx-delivery-method__line[data-v-fcdaa585]{overflow:hidden;color:var(--wx-text-muted);font-size:var(--wx-font-size-sm);text-overflow:ellipsis;white-space:nowrap}.wx-delivery-method__facts[data-v-fcdaa585]{display:flex;flex-wrap:wrap;align-items:center;gap:var(--wx-space-8);font-size:var(--wx-font-size-sm)}.wx-delivery-method__price[data-v-fcdaa585]{font-variant-numeric:tabular-nums}.wx-delivery-method__countries[data-v-fcdaa585]{color:var(--wx-text-muted)}.wx-delivery-types[data-v-fcdaa585]{display:flex;flex-direction:column;gap:var(--wx-space-12)}.wx-delivery-types__list[data-v-fcdaa585]{gap:var(--wx-space-10)}.wx-delivery-types__list[data-v-fcdaa585] .wx-radio{align-items:flex-start}.wx-delivery-types__title[data-v-fcdaa585]{display:block;font-weight:var(--wx-font-weight-medium)}.wx-delivery-types__help[data-v-fcdaa585]{display:block;color:var(--wx-text-muted);font-size:var(--wx-font-size-sm)}.wx-delivery-point__intro[data-v-42847273]{display:block;margin-bottom:var(--wx-space-16)}.wx-delivery-point__footer[data-v-42847273]{width:100%}.wx-delivery-point__gap[data-v-42847273]{flex:1 1 auto}.wx-delivery-intro[data-v-7016fad1]{display:block;max-width:760px}.wx-delivery-carrier-form[data-v-0b307bd5]{display:flex;flex-direction:column;gap:var(--wx-space-16)}.wx-delivery-carrier-form__head[data-v-0b307bd5]{display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between;gap:var(--wx-space-8);margin-bottom:var(--wx-space-8)}.wx-delivery-carrier-form__head .wx-delivery-carrier-form__title[data-v-0b307bd5]{margin:0}.wx-delivery-carrier-form__title[data-v-0b307bd5]{margin:0 0 var(--wx-space-8);font-size:var(--wx-font-size-sm);font-weight:var(--wx-font-weight-medium)}.wx-delivery-carrier-form__choice[data-v-0b307bd5]{display:flex;flex-wrap:wrap;align-items:center;gap:var(--wx-space-8);width:100%}.wx-delivery-carrier-form__select[data-v-0b307bd5]{flex:1 1 200px;min-width:0}.wx-delivery-carrier-form__secret[data-v-0b307bd5]{display:flex;flex-wrap:wrap;align-items:center;gap:var(--wx-space-8);width:100%}.wx-delivery-carrier-form__key[data-v-0b307bd5]{flex:1 1 200px;min-width:0}.wx-delivery-carrier-form__runs[data-v-0b307bd5]{display:flex;flex-direction:column;gap:var(--wx-space-6);margin:0;padding:0;list-style:none}.wx-delivery-carrier-form__runs li[data-v-0b307bd5]{display:flex;flex-wrap:wrap;align-items:center;gap:var(--wx-space-8);font-size:var(--wx-font-size-sm)}.wx-delivery-carrier-form__muted[data-v-0b307bd5]{color:var(--wx-text-muted)}.wx-delivery-carrier-form__error[data-v-0b307bd5]{flex-basis:100%;color:var(--wx-color-danger)}.wx-delivery-carriers[data-v-33674486]{display:flex;flex-direction:column;gap:var(--wx-space-16)}.wx-delivery-carrier__head[data-v-33674486]{display:inline-flex;align-items:center;gap:var(--wx-space-12)}.wx-delivery-carrier__queue[data-v-33674486]{margin:0 0 var(--wx-space-12)}.wx-delivery-carrier__missing[data-v-33674486]{margin:0 0 var(--wx-space-12);color:var(--wx-color-warning)}.wx-delivery-dir[data-v-33674486]{display:flex;flex-wrap:wrap;align-items:center;gap:var(--wx-space-8) var(--wx-space-16);padding:var(--wx-space-12) 0;border-top:1px solid var(--wx-border-default)}.wx-delivery-dir__main[data-v-33674486]{display:flex;flex:1 1 280px;flex-direction:column;gap:var(--wx-space-4);min-width:0}.wx-delivery-dir__name[data-v-33674486]{font-weight:var(--wx-font-weight-medium)}.wx-delivery-dir__facts[data-v-33674486],.wx-delivery-dir__remark[data-v-33674486]{color:var(--wx-text-muted);font-size:var(--wx-font-size-sm)}.wx-delivery-dir__remark[data-v-33674486]{color:var(--wx-color-warning)}.wx-delivery-dir__badges[data-v-33674486]{display:flex;flex-wrap:wrap;gap:var(--wx-space-6)}.wx-delivery-dir__badges[data-v-33674486]:empty{display:none}.wx-delivery-dir__actions[data-v-33674486]{display:inline-flex;flex-wrap:wrap;gap:var(--wx-space-8)}.wx-delivery-geo__bar[data-v-1f489156]{display:flex;flex-wrap:wrap;align-items:flex-end;gap:var(--wx-space-8) var(--wx-space-12);margin-bottom:var(--wx-space-16)}.wx-delivery-geo__bar[data-v-1f489156]>.wx-select,.wx-delivery-geo__choose[data-v-1f489156]{flex:0 1 320px;min-width:0}.wx-delivery-geo__bar[data-v-1f489156] .wx-form-item{margin-bottom:0}.wx-delivery-geo__name[data-v-1f489156]{font-weight:var(--wx-font-weight-medium)}.wx-delivery-geo__muted[data-v-1f489156]{color:var(--wx-text-muted);font-size:var(--wx-font-size-sm)}.wx-delivery-geo__country[data-v-1f489156]{display:flex;flex:1 1 auto;flex-wrap:wrap;align-items:center;gap:var(--wx-space-4) var(--wx-space-12);min-width:0;padding-block:var(--wx-space-8)}.wx-delivery-geo__leader[data-v-1f489156]{display:inline-flex;align-items:center;gap:var(--wx-space-8);margin-inline-start:auto}.wx-delivery-geo__leader[data-v-1f489156]>.wx-select{width:180px}.wx-delivery-geo__note[data-v-1f489156]{display:block;max-width:720px;margin-bottom:var(--wx-space-12)}.wx-delivery-geo__list[data-v-1f489156] .wx-sortable-list__row{gap:var(--wx-space-8);padding-inline:var(--wx-space-4) var(--wx-space-8)}.wx-delivery-geo__country-actions[data-v-1f489156]{display:inline-flex;align-items:center;gap:var(--wx-space-12)}.wx-delivery-geo__region[data-v-1f489156]{display:flex;flex:1 1 auto;flex-wrap:wrap;align-items:baseline;gap:var(--wx-space-4) var(--wx-space-12);width:100%;min-width:0;padding-block:var(--wx-space-10);padding-inline:0;border:0;background:none;font:inherit;color:inherit;text-align:start}button.wx-delivery-geo__region[data-v-1f489156]{cursor:pointer}.wx-delivery-geo__count[data-v-1f489156]{margin-inline-start:auto}.wx-delivery-geo__hint[data-v-1f489156]{margin-top:var(--wx-space-12)}.wx-delivery-popular__add[data-v-bbd29c30]{display:flex;flex-direction:column;gap:var(--wx-space-4);max-width:480px;margin-bottom:var(--wx-space-16)}.wx-delivery-popular__help[data-v-bbd29c30]{color:var(--wx-text-muted);font-size:var(--wx-font-size-sm)}.wx-delivery-popular__list[data-v-bbd29c30] .wx-sortable-list__row{gap:var(--wx-space-8);padding-inline:var(--wx-space-4) var(--wx-space-8)}.wx-delivery-popular__row[data-v-bbd29c30]{display:flex;flex:1 1 auto;flex-wrap:wrap;align-items:baseline;gap:var(--wx-space-4) var(--wx-space-8);min-width:0;padding-block:var(--wx-space-8)}.wx-delivery-popular__name[data-v-bbd29c30]{font-weight:var(--wx-font-weight-medium)}.wx-delivery-popular__label[data-v-bbd29c30]{min-width:0;color:var(--wx-text-muted);font-size:var(--wx-font-size-sm)}.wx-delivery-popular__note[data-v-bbd29c30]{margin-top:var(--wx-space-12)}.wx-delivery-intro[data-v-79abce24]{display:block;max-width:760px}.wx-delivery-bindings__bar[data-v-79abce24]{display:flex;flex-wrap:wrap;align-items:center;gap:var(--wx-space-8) var(--wx-space-16);margin-bottom:var(--wx-space-12)}.wx-delivery-bindings__count[data-v-79abce24]{font-weight:var(--wx-font-weight-medium)}.wx-delivery-bindings__name[data-v-79abce24]{display:block;font-weight:var(--wx-font-weight-medium)}.wx-delivery-bindings__muted[data-v-79abce24]{color:var(--wx-text-muted);font-size:var(--wx-font-size-sm)}.wx-delivery-bindings__candidate[data-v-79abce24]{display:block}.wx-delivery-bindings__search[data-v-79abce24]{margin-top:var(--wx-space-12)}.wx-delivery-bindings__target[data-v-79abce24]{margin:var(--wx-space-8) 0 0;font-weight:var(--wx-font-weight-medium)}