@minmaps-dev/mm-web-sdk 1.0.0-rc.45 → 1.0.0-rc.47

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.
package/dist/index.d.ts CHANGED
@@ -233,6 +233,11 @@ interface Zone {
233
233
  /** Authored hex color (e.g. "#d32f2f"); may be empty when the author
234
234
  * hasn't picked one — such zones are skipped for color-coding. */
235
235
  color: string;
236
+ /** The color this zone's rooms are drawn in under the active theme — `color`
237
+ * in the default theme, its high-contrast palette entry under high contrast.
238
+ * Use this, not `color`, for a legend swatch, and re-read it on
239
+ * `themeChanged`. Set on `getZones()` results only. */
240
+ displayColor?: string;
236
241
  description?: string;
237
242
  }
238
243
 
@@ -348,7 +353,7 @@ interface MapEvent {
348
353
  venue?: any;
349
354
  camera?: CameraState;
350
355
  /** Emitted by `themeChanged`; `'custom'` when consumer passed a raw style. */
351
- theme?: 'default' | 'high-contrast' | 'custom';
356
+ theme?: 'default' | 'high-contrast' | 'color-blind' | 'custom';
352
357
  /** Emitted by `localeChanged` after `setLocale()` finishes patching the
353
358
  * venue model. BCP-47 code (`'en'`, `'es'`, `'es-MX'`). */
354
359
  locale?: string;
@@ -383,7 +388,7 @@ type BoundsPadding = number | {
383
388
  * `options.theme` init option. Pass a `StyleSpecification` directly for
384
389
  * custom themes.
385
390
  */
386
- type ThemeName = 'default' | 'high-contrast';
391
+ type ThemeName = 'default' | 'high-contrast' | 'color-blind';
387
392
  /**
388
393
  * Style of the disc + ring rendered behind each amenity icon. The SDK
389
394
  * composites this into the icon bitmap at registration time, so badge +
@@ -414,7 +419,10 @@ interface SDKOptions {
414
419
  debugGlobal?: string | false;
415
420
  /**
416
421
  * Initial theme. `'default'` uses the bundled hybrid 3D theme.
417
- * `'high-contrast'` uses the WCAG-AA tuned theme. Pass a
422
+ * `'high-contrast'` uses the WCAG-AA tuned theme. `'color-blind'` keeps the
423
+ * default look but swaps the colors that red-green and blue-yellow color
424
+ * blindness merge (the route, room categories and department zones,
425
+ * restrooms, parks). Pass a
418
426
  * `StyleSpecification` for fully custom styling.
419
427
  */
420
428
  theme?: ThemeName | any;
@@ -1073,6 +1081,24 @@ interface OpenStatusOptions {
1073
1081
  * wrong answer at a kiosk is worse than a missing one.
1074
1082
  */
1075
1083
  declare function parseOpenHours(raw: unknown): OpenHours | null;
1084
+ /**
1085
+ * The weekday `now` falls on in `timeZone` (host clock when omitted or
1086
+ * unrecognised) — the same day `getOpenStatus` evaluates against. Exported so
1087
+ * a week table can highlight "today" without disagreeing with the status line
1088
+ * around the venue's midnight.
1089
+ */
1090
+ declare function dayKeyAt(now: Date, timeZone?: string): DayKey;
1091
+ /**
1092
+ * A short label for `timeZone` (host zone when omitted or unrecognised) — the
1093
+ * zone `getOpenStatus` reads hours against — so a UI can say "Opens 9:00 AM ET".
1094
+ *
1095
+ * US zones get the generic form (`ET`, `CT`, `MT`, `PT`, `AKT`), which doesn't
1096
+ * flip with daylight saving. Elsewhere the engine has no generic abbreviation
1097
+ * (it would spell out "Germany Time"), so this falls back to the specific short
1098
+ * name, which may be an offset (`GMT+2`). `now` only matters for that fallback
1099
+ * and for zones like Phoenix that print `MST` year-round.
1100
+ */
1101
+ declare function timeZoneAbbreviation(now?: Date, timeZone?: string): string;
1076
1102
  /**
1077
1103
  * The live open/closed state for a parsed week.
1078
1104
  *
@@ -1083,10 +1109,32 @@ declare function parseOpenHours(raw: unknown): OpenHours | null;
1083
1109
  *
1084
1110
  * Hours carry no timezone of their own, so they are read against the host clock
1085
1111
  * unless `options.timeZone` names the venue's zone. The kiosk case needs no
1086
- * option: the machine stands in the building it is describing.
1112
+ * option: the machine stands in the building it is describing. A web consumer
1113
+ * whose visitors may be elsewhere should resolve the venue's zone (e.g. from
1114
+ * `MinuteMaps.getVenueCenter()`) and pass it.
1087
1115
  */
1088
1116
  declare function getOpenStatus(hours: OpenHours, now?: Date, options?: OpenStatusOptions): OpenStatus;
1089
1117
 
1118
+ /** One floor of the active route, drawn on its own for a printout. */
1119
+ type RouteFloorImage = {
1120
+ floor: Floor;
1121
+ /** The bare map canvas (no DOM chrome), as a `data:` URL. */
1122
+ dataUrl: string;
1123
+ };
1124
+ type RouteImageOptions = {
1125
+ /** CSS-pixel size the map is laid out at while capturing. Default 1200×800. */
1126
+ width?: number;
1127
+ height?: number;
1128
+ /** Canvas pixels per CSS pixel. Default 2, crisp enough for paper. */
1129
+ pixelRatio?: number;
1130
+ /** Padding around each floor's route segment, in CSS px. Default 40. */
1131
+ padding?: number;
1132
+ /** Image MIME type passed to `toDataURL`. Default `'image/png'`. */
1133
+ type?: string;
1134
+ /** Encoder quality for lossy types (`'image/jpeg'`, `'image/webp'`). */
1135
+ quality?: number;
1136
+ };
1137
+
1090
1138
  type JacsProviderConfig = {
1091
1139
  mode: 'proxy';
1092
1140
  proxyBaseUrl?: string;
@@ -1271,6 +1319,8 @@ type SnapshotProviderConfig = {
1271
1319
  baseUrl: string;
1272
1320
  fetchImpl?: typeof fetch;
1273
1321
  };
1322
+ /** Highest manifest `schemaVersion` this SDK can read. */
1323
+ declare const SNAPSHOT_SCHEMA_VERSION = 1;
1274
1324
  /**
1275
1325
  * The venue (or its customer) can't be shown from snapshots: it was never
1276
1326
  * published, or it was withdrawn (unpublished, disabled or deleted). Thrown
@@ -1402,6 +1452,8 @@ declare class SnapshotProvider implements JacsReader {
1402
1452
  private fetchJson;
1403
1453
  }
1404
1454
 
1455
+ /** A built-in theme name, or `'custom'` when a raw style was passed. */
1456
+ type ActiveThemeName = ThemeName | 'custom';
1405
1457
  declare class MinuteMaps {
1406
1458
  private config;
1407
1459
  private map;
@@ -1459,8 +1511,9 @@ declare class MinuteMaps {
1459
1511
  /** Multiplier applied to every theme label's `text-size`, mutable via
1460
1512
  * `setTextScale`. Re-applied after every `setTheme()` swap. */
1461
1513
  private textScale;
1462
- /** Each label layer's unscaled `text-size`, captured by `setTextScale`.
1463
- * Cleared on `setTheme()` — the recreated layers carry new base values. */
1514
+ /** Each label layer's unscaled `text-size` and em offsets, captured by
1515
+ * `setTextScale` and keyed `"<layer id>|<property>"`. Cleared on
1516
+ * `setTheme()` — the recreated layers carry new base values. */
1464
1517
  private baseTextSizes;
1465
1518
  /** Tracks the active theme name so `setTheme()` is a no-op when re-requested. */
1466
1519
  private activeThemeName;
@@ -1476,6 +1529,9 @@ declare class MinuteMaps {
1476
1529
  * step rides — empty unless `setActiveStep` is on a transition. Drives
1477
1530
  * `applyRouteConnectorHighlight`. */
1478
1531
  private activeTransitionWaypointIds;
1532
+ /** Set while `captureRouteFloorImages` runs; holds the bounds padding to
1533
+ * put back afterwards (updated by any `setBoundsPadding` in between). */
1534
+ private routeCapture;
1479
1535
  private amenityManager;
1480
1536
  private wayfinding;
1481
1537
  private highlightManager;
@@ -1509,6 +1565,12 @@ declare class MinuteMaps {
1509
1565
  * fresh insets, the same way it already re-fits an active route. Cleared by
1510
1566
  * `clearHighlight`. */
1511
1567
  private selectedCoordinates;
1568
+ /** Zoom floor for the current selection's camera move, or `null` to keep
1569
+ * the current zoom. Set by `selectPOI` (a list pick can arrive from the
1570
+ * Campus view, where the roof still covers the room); kept beside
1571
+ * `selectedCoordinates` so a `setBoundsPadding` re-nudge carries the same
1572
+ * zoom instead of cancelling the zoom-in halfway. Cleared with it. */
1573
+ private selectedMinZoom;
1512
1574
  private youAreHerePulse;
1513
1575
  /** Theme layers whose features represent a tappable destination/amenity.
1514
1576
  * A click hit-tests these (see `SelectionManager`) → `poiSelected`. The
@@ -1649,16 +1711,62 @@ declare class MinuteMaps {
1649
1711
  */
1650
1712
  private registerRuntimeIcons;
1651
1713
  /**
1652
- * Set the active map theme by name (`'default'` / `'high-contrast'`) or by
1714
+ * Set the active map theme by name (`'default'` / `'high-contrast'` /
1715
+ * `'color-blind'`) or by
1653
1716
  * passing a custom `StyleSpecification`. The current floor, route, POIs
1654
1717
  * and camera are preserved across the swap — only layer styling changes.
1655
1718
  *
1656
1719
  * Used by kiosk consumers to wire the OS-level / popover high-contrast
1657
1720
  * toggle to the map. See `KIOSK.md` for the pattern.
1721
+ *
1722
+ * Switching between the two built-in themes happens in place (paint
1723
+ * properties plus the sprite — see `swapBuiltinThemeInPlace`); a custom style,
1724
+ * or leaving one, rebuilds the style with `setStyle`. Calls run one at a time
1725
+ * in the order made, so a quick double toggle can't interleave two swaps.
1658
1726
  */
1659
1727
  setTheme(theme: ThemeName | StyleSpecification): Promise<void>;
1728
+ /** Tail of the `setTheme` queue. */
1729
+ private themeQueue;
1730
+ private applyTheme;
1731
+ /**
1732
+ * Switch between built-in themes without `setStyle`. They share every layer
1733
+ * and differ only in paint and sprite (high contrast and color-blind are
1734
+ * derived from hybrid — see `themes/`), so this rewrites the paint
1735
+ * properties that differ and points the map at the other sprite sheet.
1736
+ * Sources, filters, zoom ranges, layout overrides (text scale, dyslexic font)
1737
+ * and the selection's destination focus are untouched, so unlike the
1738
+ * `setStyle` path there is nothing to capture and restore.
1739
+ *
1740
+ * Returns `false`, having changed nothing, when the two themes differ in
1741
+ * anything paint can't express; the caller then falls back to `setStyle`.
1742
+ */
1743
+ private swapBuiltinThemeInPlace;
1744
+ /** Room layers whose color a zone palette replaces. The
1745
+ * highlight pair is here so a selected room's raised block keeps its
1746
+ * palette color instead of reverting to the authored one. */
1747
+ private static readonly ZONE_PAINT_TARGETS;
1748
+ /** Zone id → palette fill for `themeName`, over the zones in use (see
1749
+ * `assignZonePaletteColors` for why only those), or `null` for a theme that
1750
+ * draws the authored colors. */
1751
+ private paletteZoneColors;
1752
+ /**
1753
+ * Under a theme with a zone palette (high contrast, color-blind), color each
1754
+ * zoned room from it, keeping the theme's own value for everything else.
1755
+ * Under the default theme, write the theme's own value back: its expression
1756
+ * already tints by the authored `zoneColor`, and an in-place swap away from
1757
+ * color-blind wouldn't reset these layers otherwise, since the two static
1758
+ * themes' unit fills are identical and `diffThemePaint` skips them.
1759
+ *
1760
+ * Writes the room layers' paint, so it must run before `setUnitFocusDim(true)`
1761
+ * captures them — otherwise clearing the selection would hand back the
1762
+ * palette-less value.
1763
+ */
1764
+ private applyZonePaint;
1765
+ /** The color a zone's rooms are drawn in under the active theme: its palette
1766
+ * entry under high contrast or color-blind, its authored color otherwise. */
1767
+ private zoneDisplayColor;
1660
1768
  /** Currently active theme name (or `'custom'` when a raw style was passed). */
1661
- getActiveTheme(): 'default' | 'high-contrast' | 'custom';
1769
+ getActiveTheme(): ActiveThemeName;
1662
1770
  /**
1663
1771
  * Update the SDK's reduced-motion preference at runtime. When true, every
1664
1772
  * imperative camera move (`setView`, `resetView`, `refit`, recenter, route
@@ -1702,6 +1810,10 @@ declare class MinuteMaps {
1702
1810
  * wrapped), so zoom interpolation and data-driven sizing keep working. Re-applied after
1703
1811
  * `setTheme()`, since `setStyle({ diff: false })` recreates every layer from
1704
1812
  * the pristine theme JSON. Non-finite or non-positive values reset to 1.
1813
+ *
1814
+ * The em-based `text-offset` / `text-variable-anchor-offset` are divided by
1815
+ * the same factor, so each label keeps its pixel distance from an icon that
1816
+ * doesn't scale (see `scaleTextEmOffset`).
1705
1817
  */
1706
1818
  setTextScale(scale: number): void;
1707
1819
  getTextScale(): number;
@@ -1759,6 +1871,28 @@ declare class MinuteMaps {
1759
1871
  setFlatMode(enabled: boolean): void;
1760
1872
  toggleFlatMode(): void;
1761
1873
  getIsFlatMode(): boolean;
1874
+ /**
1875
+ * Street address of the venue, from its first JACS building's `address`.
1876
+ * The CMS's Edit Venue form saves its Address field there, since it binds a
1877
+ * venue to a single building. `null` before the venue loads or when the
1878
+ * address is blank. In the venue's default language: `/all` ignores
1879
+ * `?locale=` and the locale refetch doesn't cover buildings.
1880
+ */
1881
+ getVenueAddress(): string | null;
1882
+ /**
1883
+ * Description of the venue, from its first JACS building's `description` —
1884
+ * stored there by the CMS's Edit Venue form, like `getVenueAddress()`.
1885
+ * `null` before the venue loads or when the description is blank. Same
1886
+ * locale caveat: always the venue's default language.
1887
+ */
1888
+ getVenueDescription(): string | null;
1889
+ /**
1890
+ * Center of the venue's bounds as `[lng, lat]`. `null` before the venue
1891
+ * loads or when it has no coordinates. JACS records no time zone, so a
1892
+ * consumer whose visitors may be outside the venue's zone resolves one from
1893
+ * this point and passes it to `getOpenStatus` / `dayKeyAt`.
1894
+ */
1895
+ getVenueCenter(): [number, number] | null;
1762
1896
  getFloors(): Floor[];
1763
1897
  getCurrentFloor(): Floor | null;
1764
1898
  getDefaultFloor(): Floor | null;
@@ -1782,12 +1916,14 @@ declare class MinuteMaps {
1782
1916
  floorShortName?: string;
1783
1917
  zoneName?: string;
1784
1918
  zoneDescription?: string;
1785
- /** The department's authored hex colour (`Zone.color`) — the same value
1786
- * that tints this room's polygon on the map, so a consumer can print a
1787
- * swatch beside the department name and connect the two. Absent when the
1788
- * author never picked one, which is also when the map leaves the room
1789
- * untinted; treat "no colour" as "this department isn't colour-coded",
1790
- * not as "fall back to a default swatch". */
1919
+ /** The colour that tints this room's polygon on the map under the active
1920
+ * theme — the department's authored `Zone.color`, or its high-contrast
1921
+ * palette entry under high contrast (`Zone.displayColor`) — so a consumer
1922
+ * can print a swatch beside the department name and connect the two.
1923
+ * Re-read it on `themeChanged`. Absent when the author never picked one,
1924
+ * which is also when the map leaves the room untinted; treat "no colour"
1925
+ * as "this department isn't colour-coded", not as "fall back to a default
1926
+ * swatch". */
1791
1927
  zoneColor?: string;
1792
1928
  keywords?: string[];
1793
1929
  description?: string;
@@ -2072,10 +2208,26 @@ declare class MinuteMaps {
2072
2208
  * instead swap the connector(s) the step rides to their highlighted
2073
2209
  * sprite badge (`CONNECTOR_HIGHLIGHTED_ICON_SUFFIX`).
2074
2210
  *
2211
+ * `opts.fit` moves the camera too:
2212
+ * - `'step'` frames just this step (zoomed no closer than
2213
+ * `ROUTE_STEP_FIT_MAX_ZOOM`) instead of the floor's whole segment, and
2214
+ * keeps framing it through later re-fits — `setBoundsPadding` as the
2215
+ * consumer's directions card resizes, a floor switch back to the step's
2216
+ * floor — until another fit or a new route.
2217
+ * - `'route'` goes back to the route's own framing (its floor segment),
2218
+ * as when it was first drawn — e.g. a "Restart" on the first step.
2219
+ *
2220
+ * Omitted, the camera is left alone, so a route's first framing stays
2221
+ * the whole route.
2222
+ *
2075
2223
  * Pass `null` to clear the highlight without changing the floor or
2076
2224
  * tearing down the route.
2077
2225
  */
2078
- setActiveStep(step: WayfindStep | null): Promise<void>;
2226
+ setActiveStep(step: WayfindStep | null, opts?: {
2227
+ fit?: 'step' | 'route';
2228
+ }): Promise<void>;
2229
+ /** The coordinates of `step`'s point range, for the camera to frame. */
2230
+ private stepFocusFor;
2079
2231
  private writeActiveStepHighlight;
2080
2232
  private clearActiveStepHighlight;
2081
2233
  /**
@@ -2089,6 +2241,24 @@ declare class MinuteMaps {
2089
2241
  * that predates the variant) rather than drawing nothing.
2090
2242
  */
2091
2243
  private applyRouteConnectorHighlight;
2244
+ /**
2245
+ * Draw each floor the active route crosses, in route order, and return
2246
+ * one image per floor — for printing directions.
2247
+ *
2248
+ * Images are the map canvas alone, so the consumer's DOM chrome (panels,
2249
+ * buttons, the floor picker) never appears in them. For the duration the
2250
+ * map container is laid out at a fixed `width` × `height`, the camera
2251
+ * fits each floor's segment of the route with uniform `padding`, and the
2252
+ * line is drawn solid (no draw-on sweep, no step highlight). Afterwards
2253
+ * the container size, floor, camera and padding are put back. Hide the
2254
+ * map behind a loading screen while this runs; the visitor would
2255
+ * otherwise see it jump between floors.
2256
+ *
2257
+ * The step highlight is cleared, not restored: call `setActiveStep`
2258
+ * again with the step your UI is showing. Resolves to `[]` when no route
2259
+ * is displayed.
2260
+ */
2261
+ captureRouteFloorImages(opts?: RouteImageOptions): Promise<RouteFloorImage[]>;
2092
2262
  clearRoute(): void;
2093
2263
  /**
2094
2264
  * Put the end-of-route marker on `poi`, or take it down (`null`). With
@@ -2122,8 +2292,10 @@ declare class MinuteMaps {
2122
2292
  *
2123
2293
  * This is deliberately *not* `highlightPOI`, which is the search-locate
2124
2294
  * gesture — it zooms and recenters and draws a pulsing ring, and emits
2125
- * nothing. Selection is the quieter one: current zoom kept, no ring, the
2126
- * raised room is the indicator.
2295
+ * nothing. Selection is the quieter one: no ring, the raised room is the
2296
+ * indicator, and the current zoom is kept — unless it is further out than
2297
+ * the Kiosk view (`KIOSK_VIEW_MIN_ZOOM`), where the building's roof still
2298
+ * hides the room, in which case the camera zooms in to that view.
2127
2299
  *
2128
2300
  * Accepts a `POI` (preferred — its `type` and `waypointId` pin down the exact
2129
2301
  * instance, which matters for an amenity that shares one id across every
@@ -2204,7 +2376,8 @@ declare class MinuteMaps {
2204
2376
  /** Gentle pan so the selection sits in the centre of the map area MapLibre
2205
2377
  * frames within `boundsPadding` (which the consumer sets to reserve for its
2206
2378
  * bottom-docked chrome / info card). A straight `easeTo`, current zoom kept,
2207
- * so it reads as a nudge, not a recenter. */
2379
+ * so it reads as a nudge, not a recenter — unless `selectedMinZoom` is set
2380
+ * and the camera is further out, in which case it zooms in to that floor. */
2208
2381
  private easeToSelection;
2209
2382
  /** Dim every unit's paint (or restore it) so a selected room reads as the
2210
2383
  * focus. Idempotent: capturing only happens on the first activate, and the
@@ -2504,6 +2677,14 @@ type VenueSummary = {
2504
2677
  clustering: boolean;
2505
2678
  /** Whether JACS publishes the venue's edits automatically. */
2506
2679
  autoPublish: boolean;
2680
+ /** The venue's street address (its first building's `address`); `null` when
2681
+ * blank or unknown. Only snapshot directories carry it — `/customer/all`
2682
+ * has no buildings — so it is always `null` in `proxy`/`direct` mode. Same
2683
+ * value `MinuteMaps.getVenueAddress()` returns once the venue loads. */
2684
+ address: string | null;
2685
+ /** The venue's description, as with `address`. Matches
2686
+ * `MinuteMaps.getVenueDescription()`. */
2687
+ description: string | null;
2507
2688
  };
2508
2689
  /** One entry of `/customer/all`: a customer and the venues it owns. Hand a
2509
2690
  * venue's `customerId` and `id` to the SDK's `jacs`/`venue` config to load it. */
@@ -2642,5 +2823,5 @@ type ResolvedIconSource = {
2642
2823
  */
2643
2824
  declare function resolveAmenityIconSource(amenity: AmenityLike, preferredLocale?: string): ResolvedIconSource | null;
2644
2825
 
2645
- export { BUILDING_NAME_EXTENSOR_KEY, DAY_KEYS, IMAGE_ALT_EXTENSOR_KEY, MinuteMaps, OPEN_HOURS_EXTENSOR_KEY, OPEN_HOURS_VERSION, PHONE_EXTENSOR_KEY, POINT_OF_INTEREST_EXTENSOR_KEY, RESERVED_EXTENSOR_PREFIX, SnapshotProvider, SnapshotUnavailableError, VenueDirectory, activeSectionIndex, createMinuteMapsSDK, customerDisplayName, getOpenStatus, groupStepsIntoFloorSections, isConnectorAmenity, parseBuildingName, parseImageAlt, parseOpenHours, parsePhone, parsePointOfInterest, resolveAmenityIconSource, resolveSnapshotLocale };
2646
- export type { Amenity, AmenityBadgeStyle, AmenityWithFloor, Bounds, BoundsPadding, CameraState, Customer, CustomerVenues, DayKey, Destination, DestinationPhone, EventCallback, Floor, FloorMetadata, HoursRange, JMapAuth, JMapConfig, JacsAuth, JacsConfig, JacsProviderConfig, JacsReader, ListCustomerVenuesOptions, MapEvent, OpenHours, OpenHoursTransition, OpenStatus, OpenStatusOptions, POI, POISearchResult, ResolvedIconSource, RouteFloorSection, RoutePoint, RoutingOptions, SDKConfig, SDKOptions, SnapshotProviderConfig, SnapshotUpdateCheck, SnapshotVersions, ThemeName, TransitionStep, VenueDirectoryConfig, VenueSummary, ViewOptions, WayfindCenterMode, WayfindStep, Waypoint, Zone };
2826
+ export { BUILDING_NAME_EXTENSOR_KEY, DAY_KEYS, IMAGE_ALT_EXTENSOR_KEY, MinuteMaps, OPEN_HOURS_EXTENSOR_KEY, OPEN_HOURS_VERSION, PHONE_EXTENSOR_KEY, POINT_OF_INTEREST_EXTENSOR_KEY, RESERVED_EXTENSOR_PREFIX, SNAPSHOT_SCHEMA_VERSION, SnapshotProvider, SnapshotUnavailableError, VenueDirectory, activeSectionIndex, createMinuteMapsSDK, customerDisplayName, dayKeyAt, getOpenStatus, groupStepsIntoFloorSections, isConnectorAmenity, parseBuildingName, parseImageAlt, parseOpenHours, parsePhone, parsePointOfInterest, resolveAmenityIconSource, resolveSnapshotLocale, timeZoneAbbreviation };
2827
+ export type { Amenity, AmenityBadgeStyle, AmenityWithFloor, Bounds, BoundsPadding, CameraState, Customer, CustomerVenues, DayKey, Destination, DestinationPhone, EventCallback, Floor, FloorMetadata, HoursRange, JMapAuth, JMapConfig, JacsAuth, JacsConfig, JacsProviderConfig, JacsReader, ListCustomerVenuesOptions, MapEvent, OpenHours, OpenHoursTransition, OpenStatus, OpenStatusOptions, POI, POISearchResult, ResolvedIconSource, RouteFloorImage, RouteFloorSection, RouteImageOptions, RoutePoint, RoutingOptions, SDKConfig, SDKOptions, SnapshotProviderConfig, SnapshotUpdateCheck, SnapshotVersions, ThemeName, TransitionStep, VenueDirectoryConfig, VenueSummary, ViewOptions, WayfindCenterMode, WayfindStep, Waypoint, Zone };