react-listing-engine 0.7.0 → 0.7.2
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/CHANGELOG.md +12 -0
- package/dist/index.cjs +1 -1
- package/dist/index.js +1 -1
- package/dist/maps/google/index.cjs +1 -1
- package/dist/maps/google/index.js +1 -1
- package/dist/styled/index.cjs +1 -1
- package/dist/styled/index.js +1 -1
- package/package.json +1 -1
- /package/dist/{chunk-SIMKBYC6.js → chunk-4DIL4D2U.js} +0 -0
- /package/dist/{chunk-3O6X563H.cjs → chunk-BLTUDXYM.cjs} +0 -0
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,17 @@
|
|
|
1
1
|
# react-listing-engine
|
|
2
2
|
|
|
3
|
+
## 0.7.2
|
|
4
|
+
|
|
5
|
+
### Patch Changes
|
|
6
|
+
|
|
7
|
+
- Keep the on-map popup within the map viewport: shift it horizontally so it no longer overflows off-screen when its marker is near the left/right edge, and flip it below the marker when it would overflow the top edge. Previously a popup for an edge marker was clipped off-canvas.
|
|
8
|
+
|
|
9
|
+
## 0.7.1
|
|
10
|
+
|
|
11
|
+
### Patch Changes
|
|
12
|
+
|
|
13
|
+
- Fix on-map marker/popup click handling: call `google.maps.OverlayView.preventMapHitsAndGesturesFrom()` on the marker and popup overlay containers. Previously a real pointer click on an HTML overlay marker also registered as a Google Maps _map click_, which fired the background-click dismissal and immediately deselected the just-clicked marker — so the on-map popup opened and instantly closed. This also stops dragging over a marker or popup from panning the map underneath.
|
|
14
|
+
|
|
3
15
|
## 0.7.0
|
|
4
16
|
|
|
5
17
|
### Minor Changes
|
package/dist/index.cjs
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
"use strict";Object.defineProperty(exports, "__esModule", {value: true}); function _nullishCoalesce(lhs, rhsFn) { if (lhs != null) { return lhs; } else { return rhsFn(); } } function _optionalChain(ops) { let lastAccessLHS = undefined; let value = ops[0]; let i = 1; while (i < ops.length) { const op = ops[i]; const fn = ops[i + 1]; i += 2; if ((op === 'optionalAccess' || op === 'optionalCall') && value == null) { return undefined; } if (op === 'access' || op === 'optionalAccess') { lastAccessLHS = value; value = fn(value); } else if (op === 'call' || op === 'optionalCall') { value = fn((...args) => value.call(lastAccessLHS, ...args)); lastAccessLHS = undefined; } } return value; } var _class; var _class2;"use client";
|
|
2
|
-
var
|
|
2
|
+
var _chunkBLTUDXYMcjs = require('./chunk-BLTUDXYM.cjs');var P=(r=>(r.Paged="paged",r.Infinite="infinite",r))(P||{});var v=(i=>(i.FiltersChanged="FiltersChanged",i.ResultsLoaded="ResultsLoaded",i.PointClicked="PointClicked",i.BoundsChanged="BoundsChanged",i.LayerToggled="LayerToggled",i))(v||{});var d= (_class =class{__init() {this.listeners=new Set}constructor(t={}){;_class.prototype.__init.call(this);this.query={...t}}getQuery(){return{...this.query}}setQuery(t){this.query={...t},this.notify()}subscribe(t){return this.listeners.add(t),()=>{this.listeners.delete(t)}}notify(){for(let t of[...this.listeners])t()}}, _class);function b(e,t){let r=new Set([...Object.keys(e),...Object.keys(t)]);for(let s of r)if(e[s]!==t[s])return!1;return!0}var h= (_class2 =class{__init2() {this.isSyncing=!1}__init3() {this.unsubscribeEngine=null}__init4() {this.unsubscribeHistory=null}constructor(t){;_class2.prototype.__init2.call(this);_class2.prototype.__init3.call(this);_class2.prototype.__init4.call(this);this.history=t.history,this.toQueryFn=t.toQuery,this.toFiltersFn=t.toFilters,this.hydrateOnStart=_nullishCoalesce(t.hydrateOnStart, () => (!0))}start(t){this.stop(),this.unsubscribeEngine=t.subscribe(()=>{this.isSyncing||this.syncEngineToHistory(t)}),this.unsubscribeHistory=this.history.subscribe(()=>{this.isSyncing||this.withSyncGuard(()=>{this.applyFiltersSafely(t,this.toFiltersFn(this.history.getQuery()))})}),this.hydrateOnStart&&this.withSyncGuard(()=>{this.applyFiltersSafely(t,this.toFiltersFn(this.history.getQuery()))})}stop(){_optionalChain([this, 'access', _ => _.unsubscribeEngine, 'optionalCall', _2 => _2()]),this.unsubscribeEngine=null,_optionalChain([this, 'access', _3 => _3.unsubscribeHistory, 'optionalCall', _4 => _4()]),this.unsubscribeHistory=null}syncEngineToHistory(t){let r=this.toQueryFn(t.state.filters);b(r,this.history.getQuery())||this.withSyncGuard(()=>this.history.setQuery(r))}applyFiltersSafely(t,r){Promise.resolve(t.applyFilters(r)).catch(()=>{})}withSyncGuard(t){this.isSyncing=!0;try{t()}finally{this.isSyncing=!1}}}, _class2);var m=class{constructor(t={}){this.mode=_nullishCoalesce(t.mode, () => ("replace"))}getQuery(){if(typeof window>"u")return{};let t=new URLSearchParams(window.location.search),r={};for(let[s,o]of t)o!==""&&(r[s]=o);return r}setQuery(t){if(typeof window>"u")return;let r=new URLSearchParams;for(let[c,a]of Object.entries(t))a===void 0||a===""||r.set(c,a);let s=r.toString(),o=s?`?${s}`:"";if(o===window.location.search)return;let i=`${window.location.pathname}${o}${window.location.hash}`;this.mode==="push"?window.history.pushState(window.history.state,"",i):window.history.replaceState(window.history.state,"",i)}subscribe(t){return typeof window>"u"?()=>{}:(window.addEventListener("popstate",t),()=>{window.removeEventListener("popstate",t)})}};var _jsxruntime = require('react/jsx-runtime');function rt({children:e}){let{Toolbar:t}=_chunkBLTUDXYMcjs.r.call(void 0, );return _jsxruntime.jsx.call(void 0, t,{children:e})}var _react = require('react');function lt(){let e=_chunkBLTUDXYMcjs.t.call(void 0, ),t=_chunkBLTUDXYMcjs.u.call(void 0, ),r=_react.useCallback.call(void 0, l=>e.loadPoints(l),[e]),s=_react.useCallback.call(void 0, (l,f)=>e.selectPoint(l,f),[e]),o=_react.useCallback.call(void 0, l=>e.setHovered(e.primaryDatasetId,l),[e]),i=_react.useCallback.call(void 0, ()=>_optionalChain([e, 'access', _5 => _5.map, 'optionalAccess', _6 => _6.zoomIn, 'call', _7 => _7()]),[e]),c=_react.useCallback.call(void 0, ()=>_optionalChain([e, 'access', _8 => _8.map, 'optionalAccess', _9 => _9.zoomOut, 'call', _10 => _10()]),[e]),a=_react.useCallback.call(void 0, ()=>_optionalChain([e, 'access', _11 => _11.map, 'optionalAccess', _12 => _12.toggleFullscreen, 'call', _13 => _13()]),[e]);return{bounds:t.bounds,points:t.points,hovered:t.hovered,loadPoints:r,selectPoint:s,setHovered:o,zoomIn:i,zoomOut:c,toggleFullscreen:a}}function dt(e){let t=_chunkBLTUDXYMcjs.t.call(void 0, ),r=_chunkBLTUDXYMcjs.u.call(void 0, ),s=_react.useCallback.call(void 0, ()=>t.toggleLayer(e),[t,e]);return{visible:_nullishCoalesce(r.layers[e], () => (!0)),points:_nullishCoalesce(r.points[e], () => ([])),toggle:s}}exports.BrowserHistoryPort = m; exports.DatasetRegistry = _chunkBLTUDXYMcjs.c; exports.FallbackPopup = _chunkBLTUDXYMcjs.p; exports.FilterRegistry = _chunkBLTUDXYMcjs.b; exports.ListingApp = _chunkBLTUDXYMcjs.S; exports.ListingComponentsProvider = _chunkBLTUDXYMcjs.q; exports.ListingConfig = _chunkBLTUDXYMcjs.f; exports.ListingEngine = _chunkBLTUDXYMcjs.g; exports.ListingEngineContext = _chunkBLTUDXYMcjs.s; exports.ListingEventType = v; exports.ListingFilters = _chunkBLTUDXYMcjs.w; exports.ListingList = _chunkBLTUDXYMcjs.y; exports.ListingMap = _chunkBLTUDXYMcjs.z; exports.ListingPagination = _chunkBLTUDXYMcjs.A; exports.ListingProvider = _chunkBLTUDXYMcjs.D; exports.ListingResultHeader = _chunkBLTUDXYMcjs.B; exports.ListingStore = _chunkBLTUDXYMcjs.a; exports.ListingToolbar = rt; exports.MemoryHistoryPort = d; exports.PaginationMode = P; exports.TypedEmitter = _chunkBLTUDXYMcjs.d; exports.UrlSyncController = h; exports.composeListingProviders = _chunkBLTUDXYMcjs.h; exports.listingDefaultConfig = _chunkBLTUDXYMcjs.e; exports.useListing = _chunkBLTUDXYMcjs.t; exports.useListingComponents = _chunkBLTUDXYMcjs.r; exports.useListingEvent = _chunkBLTUDXYMcjs.C; exports.useListingFilters = _chunkBLTUDXYMcjs.v; exports.useListingLayer = dt; exports.useListingMap = lt; exports.useListingResults = _chunkBLTUDXYMcjs.x; exports.useListingState = _chunkBLTUDXYMcjs.u; exports.withConfig = _chunkBLTUDXYMcjs.i; exports.withDataset = _chunkBLTUDXYMcjs.k; exports.withFilters = _chunkBLTUDXYMcjs.l; exports.withInitialFilters = _chunkBLTUDXYMcjs.n; exports.withMap = _chunkBLTUDXYMcjs.j; exports.withPrimaryDataset = _chunkBLTUDXYMcjs.o; exports.withUrlSync = _chunkBLTUDXYMcjs.m;
|
package/dist/index.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
"use client";
|
|
2
|
-
import{A as N,B as V,C as W,D as X,S as g,a as S,b as Q,c as x,d as T,e as L,f as H,g as O,h as E,i as k,j as q,k as I,l as C,m as U,n as B,o as z,p as G,q as R,r as p,s as $,t as u,u as y,v as j,w as A,x as D,y as J,z as K}from"./chunk-
|
|
2
|
+
import{A as N,B as V,C as W,D as X,S as g,a as S,b as Q,c as x,d as T,e as L,f as H,g as O,h as E,i as k,j as q,k as I,l as C,m as U,n as B,o as z,p as G,q as R,r as p,s as $,t as u,u as y,v as j,w as A,x as D,y as J,z as K}from"./chunk-4DIL4D2U.js";var P=(r=>(r.Paged="paged",r.Infinite="infinite",r))(P||{});var v=(i=>(i.FiltersChanged="FiltersChanged",i.ResultsLoaded="ResultsLoaded",i.PointClicked="PointClicked",i.BoundsChanged="BoundsChanged",i.LayerToggled="LayerToggled",i))(v||{});var d=class{query;listeners=new Set;constructor(t={}){this.query={...t}}getQuery(){return{...this.query}}setQuery(t){this.query={...t},this.notify()}subscribe(t){return this.listeners.add(t),()=>{this.listeners.delete(t)}}notify(){for(let t of[...this.listeners])t()}};function b(e,t){let r=new Set([...Object.keys(e),...Object.keys(t)]);for(let s of r)if(e[s]!==t[s])return!1;return!0}var h=class{history;toQueryFn;toFiltersFn;hydrateOnStart;isSyncing=!1;unsubscribeEngine=null;unsubscribeHistory=null;constructor(t){this.history=t.history,this.toQueryFn=t.toQuery,this.toFiltersFn=t.toFilters,this.hydrateOnStart=t.hydrateOnStart??!0}start(t){this.stop(),this.unsubscribeEngine=t.subscribe(()=>{this.isSyncing||this.syncEngineToHistory(t)}),this.unsubscribeHistory=this.history.subscribe(()=>{this.isSyncing||this.withSyncGuard(()=>{this.applyFiltersSafely(t,this.toFiltersFn(this.history.getQuery()))})}),this.hydrateOnStart&&this.withSyncGuard(()=>{this.applyFiltersSafely(t,this.toFiltersFn(this.history.getQuery()))})}stop(){this.unsubscribeEngine?.(),this.unsubscribeEngine=null,this.unsubscribeHistory?.(),this.unsubscribeHistory=null}syncEngineToHistory(t){let r=this.toQueryFn(t.state.filters);b(r,this.history.getQuery())||this.withSyncGuard(()=>this.history.setQuery(r))}applyFiltersSafely(t,r){Promise.resolve(t.applyFilters(r)).catch(()=>{})}withSyncGuard(t){this.isSyncing=!0;try{t()}finally{this.isSyncing=!1}}};var m=class{mode;constructor(t={}){this.mode=t.mode??"replace"}getQuery(){if(typeof window>"u")return{};let t=new URLSearchParams(window.location.search),r={};for(let[s,o]of t)o!==""&&(r[s]=o);return r}setQuery(t){if(typeof window>"u")return;let r=new URLSearchParams;for(let[c,a]of Object.entries(t))a===void 0||a===""||r.set(c,a);let s=r.toString(),o=s?`?${s}`:"";if(o===window.location.search)return;let i=`${window.location.pathname}${o}${window.location.hash}`;this.mode==="push"?window.history.pushState(window.history.state,"",i):window.history.replaceState(window.history.state,"",i)}subscribe(t){return typeof window>"u"?()=>{}:(window.addEventListener("popstate",t),()=>{window.removeEventListener("popstate",t)})}};import{jsx as F}from"react/jsx-runtime";function rt({children:e}){let{Toolbar:t}=p();return F(t,{children:e})}import{useCallback as n}from"react";function lt(){let e=u(),t=y(),r=n(l=>e.loadPoints(l),[e]),s=n((l,f)=>e.selectPoint(l,f),[e]),o=n(l=>e.setHovered(e.primaryDatasetId,l),[e]),i=n(()=>e.map?.zoomIn(),[e]),c=n(()=>e.map?.zoomOut(),[e]),a=n(()=>e.map?.toggleFullscreen(),[e]);return{bounds:t.bounds,points:t.points,hovered:t.hovered,loadPoints:r,selectPoint:s,setHovered:o,zoomIn:i,zoomOut:c,toggleFullscreen:a}}import{useCallback as w}from"react";function dt(e){let t=u(),r=y(),s=w(()=>t.toggleLayer(e),[t,e]);return{visible:r.layers[e]??!0,points:r.points[e]??[],toggle:s}}export{m as BrowserHistoryPort,x as DatasetRegistry,G as FallbackPopup,Q as FilterRegistry,g as ListingApp,R as ListingComponentsProvider,H as ListingConfig,O as ListingEngine,$ as ListingEngineContext,v as ListingEventType,A as ListingFilters,J as ListingList,K as ListingMap,N as ListingPagination,X as ListingProvider,V as ListingResultHeader,S as ListingStore,rt as ListingToolbar,d as MemoryHistoryPort,P as PaginationMode,T as TypedEmitter,h as UrlSyncController,E as composeListingProviders,L as listingDefaultConfig,u as useListing,p as useListingComponents,W as useListingEvent,j as useListingFilters,dt as useListingLayer,lt as useListingMap,D as useListingResults,y as useListingState,k as withConfig,I as withDataset,C as withFilters,B as withInitialFilters,q as withMap,z as withPrimaryDataset,U as withUrlSync};
|
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
"use strict";Object.defineProperty(exports, "__esModule", {value: true}); function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) { newObj[key] = obj[key]; } } } newObj.default = obj; return newObj; } } function _nullishCoalesce(lhs, rhsFn) { if (lhs != null) { return lhs; } else { return rhsFn(); } } function _optionalChain(ops) { let lastAccessLHS = undefined; let value = ops[0]; let i = 1; while (i < ops.length) { const op = ops[i]; const fn = ops[i + 1]; i += 2; if ((op === 'optionalAccess' || op === 'optionalCall') && value == null) { return undefined; } if (op === 'access' || op === 'optionalAccess') { lastAccessLHS = value; value = fn(value); } else if (op === 'call' || op === 'optionalCall') { value = fn((...args) => value.call(lastAccessLHS, ...args)); lastAccessLHS = undefined; } } return value; }"use client";
|
|
2
|
-
var _jsapiloader = require('@googlemaps/js-api-loader');var
|
|
2
|
+
var _jsapiloader = require('@googlemaps/js-api-loader');var H="DEMO_MAP_ID";function f(r){return r.raw}function x(r,o){if(r.element)return r.element;if(r.iconUrl)return new o.PinElement({glyphSrc:r.iconUrl}).element}var E=12,I="#b3261e";function R(r){if(r.element)return r.element;if(r.iconUrl){let a=document.createElement("img");return a.src=r.iconUrl,a}let o=document.createElement("div");return o.style.width=`${E}px`,o.style.height=`${E}px`,o.style.borderRadius="50%",o.style.backgroundColor=I,o.style.border="2px solid #ffffff",o.style.boxShadow="0 1px 4px rgba(0, 0, 0, 0.4)",o}var g;function A(){if(g)return g;class r extends google.maps.OverlayView{constructor(t,s,i,e){super();r.prototype.__init.call(this);;this.position=t;this.content=s;this.onClick=i;this.lifecycle=e}__init() {this.div=null}onAdd(){let t=document.createElement("div");t.style.position="absolute",t.style.transform="translate(-50%, -50%)",this.onClick&&(t.style.cursor="pointer",t.addEventListener("click",this.onClick)),t.appendChild(this.content),this.div=t,_optionalChain([this, 'access', _2 => _2.getPanes, 'call', _3 => _3(), 'optionalAccess', _4 => _4.overlayMouseTarget, 'access', _5 => _5.appendChild, 'call', _6 => _6(t)]),typeof google.maps.OverlayView.preventMapHitsAndGesturesFrom=="function"&&google.maps.OverlayView.preventMapHitsAndGesturesFrom(t),this.lifecycle.onContainerAdd(t)}draw(){if(!this.div)return;let t=this.getProjection();if(!t)return;let s=t.fromLatLngToDivPixel(new google.maps.LatLng(this.position.lat,this.position.lng));s&&(this.div.style.left=`${s.x}px`,this.div.style.top=`${s.y}px`)}onRemove(){let t=this.div;_optionalChain([this, 'access', _7 => _7.div, 'optionalAccess', _8 => _8.remove, 'call', _9 => _9()]),this.div=null,t&&this.lifecycle.onContainerRemove(t)}}return g=r,g}var v=14,T=8;function G(r){let{anchorX:o,anchorY:a,popupW:t,popupH:s,mapW:i,mapH:e,offsetY:n,pad:l}=r,d=o-t/2,c=o+t/2,p=0;t>i-l*2?p=l-d:c>i-l?p=i-l-c:d<l&&(p=l-d);let u=a-n-s,y=a+n+s,m=u<l&&y<=e-l;return{dx:p,flipBelow:m}}var M;function S(){if(M)return M;class r extends google.maps.OverlayView{constructor(t,s,i){super();r.prototype.__init2.call(this);;this.container=t;this.position=s;this.mapContainerEl=i}__init2() {this.attached=!1}onAdd(){this.attached=!0,_optionalChain([this, 'access', _10 => _10.getPanes, 'call', _11 => _11(), 'optionalAccess', _12 => _12.floatPane, 'access', _13 => _13.appendChild, 'call', _14 => _14(this.container)]),typeof google.maps.OverlayView.preventMapHitsAndGesturesFrom=="function"&&google.maps.OverlayView.preventMapHitsAndGesturesFrom(this.container),typeof requestAnimationFrame<"u"&&requestAnimationFrame(()=>this.draw())}draw(){let t=this.getProjection();if(!t)return;let s=new google.maps.LatLng(this.position.lat,this.position.lng),i=t.fromLatLngToDivPixel(s);if(!i)return;let e=this.container.offsetWidth,n=this.container.offsetHeight,l=e&&n?t.fromLatLngToContainerPixel(s):null;if(!l){this.container.style.transform="translate(-50%, -100%)",this.container.style.left=`${i.x}px`,this.container.style.top=`${i.y-v}px`;return}let{dx:d,flipBelow:c}=G({anchorX:l.x,anchorY:l.y,popupW:e,popupH:n,mapW:this.mapContainerEl.clientWidth,mapH:this.mapContainerEl.clientHeight,offsetY:v,pad:T});this.container.style.left=`${i.x+d}px`,c?(this.container.style.top=`${i.y+v}px`,this.container.style.transform="translate(-50%, 0)"):(this.container.style.top=`${i.y-v}px`,this.container.style.transform="translate(-50%, -100%)")}onRemove(){this.attached=!1,this.container.remove()}updatePosition(t){this.position=t,this.attached&&this.draw()}}return M=r,M}function k(r){for(let o of r)typeof o.setMap=="function"?o.setMap(null):o.map=null}var _="#b3261e",F=40,B=64,U=14;function z(r,o){let a=o.count,t=Math.min(B,F+Math.round(Math.log10(a+1)*U)),s=document.createElement("div");return s.textContent=String(a),s.style.display="flex",s.style.alignItems="center",s.style.justifyContent="center",s.style.width=`${t}px`,s.style.height=`${t}px`,s.style.borderRadius="50%",s.style.backgroundColor=_,s.style.border="2px solid #ffffff",s.style.boxShadow="0 1px 4px rgba(0, 0, 0, 0.4)",s.style.color="#ffffff",s.style.fontFamily="inherit",s.style.fontWeight="700",s.style.fontSize=t>=52?"15px":"13px",new r.AdvancedMarkerElement({position:o.position,content:s})}var C=!1;async function V(r,o,a,t){let s;try{s=await Promise.resolve().then(() => _interopRequireWildcard(require("@googlemaps/markerclusterer")))}catch(e){C||(C=!0,console.warn('[react-listing-engine] "@googlemaps/markerclusterer" is not installed -- rendering plain (unclustered) markers instead. Install "@googlemaps/markerclusterer" to enable clustering.',e));return}if(r.layers.get(o)!==a)return;let i=new s.MarkerClusterer({map:r.map,markers:a,algorithmOptions:{maxZoom:t.maxZoom},renderer:{render:e=>z(r.markerLib,e)}});r.clusterers.set(o,i)}function L(r,o){let a=r.clusterers.get(o);a&&(a.setMap(null),r.clusterers.delete(o))}var b=!1;function W(){b||(b=!0,console.warn('[react-listing-engine] Marker clustering is not supported in `styles` (OverlayView) mode -- "@googlemaps/markerclusterer" only manages Marker/AdvancedMarkerElement instances. Rendering plain, unclustered overlay markers instead. Use a `mapId` (advanced-marker mode) to enable clustering.'))}function $(r,o){return o.markers.map(a=>{let t=new r.markerLib.AdvancedMarkerElement({map:r.map,position:a.position,content:x(a,r.markerLib),gmpClickable:!!o.onMarkerClick});if(o.onMarkerClick){let s=o.onMarkerClick;t.addListener("click",()=>s(a.id))}return t})}function w(r,o,a,t){r.classList.toggle("rle-marker--selected",o===a),r.classList.toggle("rle-marker--hovered",o===t&&o!==a)}function D(r,o){let a=A();return o.markers.map(t=>{let s=o.onMarkerClick,i=s?()=>s(t.id):void 0,e=new a(t.position,R(t),i,{onContainerAdd:n=>{r.markerElements.set(t.id,n),w(n,t.id,r.selectedMarkerId,r.hoveredMarkerId)},onContainerRemove:n=>{r.markerElements.get(t.id)===n&&r.markerElements.delete(t.id)}});return e.setMap(r.map),e})}function O(r,o){let a=r.layerMarkerIds.get(o);if(a){for(let t of a)r.markerElements.delete(t);r.layerMarkerIds.delete(o)}}function X(r){let o=r.getSouthWest(),a=r.getNorthEast();return{west:o.lng(),south:o.lat(),east:a.lng(),north:a.lat()}}function Z(r,o,a){if(typeof ResizeObserver>"u")return;let t=!1,s=()=>{let{width:e,height:n}=r.getBoundingClientRect();e===0||n===0||(google.maps.event.trigger(o,"resize"),t||(t=!0,o.setCenter(a)))},i=new ResizeObserver(s);return i.observe(r),typeof requestAnimationFrame<"u"?requestAnimationFrame(s):queueMicrotask(s),i}function q(r){if(!r.apiKey)throw new Error("googleProvider: config.apiKey is required (no hardcoded fallback key is ever used).");let o=!1,a=()=>{o||(_jsapiloader.setOptions.call(void 0, {...r.loaderOptions,key:r.apiKey}),o=!0)},t,s=0;return{async mount(i,e){let n=++s;a();let l=await _jsapiloader.importLibrary.call(void 0, "maps"),d=await _jsapiloader.importLibrary.call(void 0, "marker"),c=_nullishCoalesce(e.center, () => ({lat:0,lng:0})),p=r.styles!=null,u=new l.Map(i,{...r.mapOptions,center:c,zoom:_nullishCoalesce(e.zoom, () => (10)),...p?{styles:r.styles}:{mapId:_nullishCoalesce(r.mapId, () => (H))}}),y=Z(i,u,c),m={map:u,containerEl:i,fullscreenEl:_nullishCoalesce(e.fullscreenTarget, () => (i)),markerLib:d,markerMode:p?"overlay":"advanced",layers:new Map,clusterers:new Map,boundsListeners:new Set,clickListeners:new Set,resizeObserver:y,markerElements:new Map,layerMarkerIds:new Map,selectedMarkerId:null,hoveredMarkerId:null};return n===s&&(t=m),{raw:m}},renderLayer(i,e){let n=f(i),l=n.layers.get(e.id);l&&(k(l),n.layers.delete(e.id),O(n,e.id)),L(n,e.id);let d=n.markerMode==="overlay"?D(n,e):$(n,e);n.layers.set(e.id,d),n.markerMode==="overlay"&&n.layerMarkerIds.set(e.id,e.markers.map(p=>p.id)),e.clustering&&(n.markerMode==="overlay"?W():V(n,e.id,d,e.clustering));let c=!1;return()=>{c||(c=!0,n.layers.get(e.id)===d&&(k(d),n.layers.delete(e.id),L(n,e.id),O(n,e.id)))}},onBoundsChange(i,e){let n=f(i),l=n.map.addListener("idle",()=>{let c=n.map.getBounds();c&&e(X(c))});n.boundsListeners.add(l);let d=!1;return()=>{d||(d=!0,l.remove(),n.boundsListeners.delete(l))}},onMapClick(i){let e=t;if(!e)return()=>{};let n=e.map.addListener("click",()=>i());e.clickListeners.add(n);let l=!1;return()=>{l||(l=!0,n.remove(),e.clickListeners.delete(n))}},fitBounds(i,e){f(i).map.fitBounds(e)},destroy(i){let e=f(i);_optionalChain([e, 'access', _15 => _15.resizeObserver, 'optionalAccess', _16 => _16.disconnect, 'call', _17 => _17()]);for(let n of e.boundsListeners)n.remove();e.boundsListeners.clear();for(let n of e.clickListeners)n.remove();e.clickListeners.clear();for(let n of[...e.clusterers.keys()])L(e,n);for(let n of e.layers.values())k(n);e.layers.clear(),e.markerElements.clear(),e.layerMarkerIds.clear(),t===e&&(t=void 0)},updateMarkerStates(i,e){if(t){t.selectedMarkerId=i,t.hoveredMarkerId=e;for(let[n,l]of t.markerElements)w(l,n,i,e)}},mountOverlay(i){let e=document.createElement("div");if(e.style.position="absolute",e.style.transform="translate(-50%, -100%)",e.style.pointerEvents="auto",!t)return{container:e,setPosition:()=>{},unmount:()=>e.remove()};let n=S(),l=new n(e,i,t.containerEl);return l.setMap(t.map),{container:e,setPosition:d=>l.updatePosition(d),unmount:()=>{l.setMap(null),e.remove()}}},zoomIn(){t&&t.map.setZoom((_nullishCoalesce(t.map.getZoom(), () => (0)))+1)},zoomOut(){t&&t.map.setZoom((_nullishCoalesce(t.map.getZoom(), () => (0)))-1)},toggleFullscreen(){if(!t)return;let i=t.fullscreenEl,e=document.fullscreenElement;e!=null&&i.contains(e)?typeof document.exitFullscreen=="function"&&_optionalChain([document, 'access', _18 => _18.exitFullscreen, 'call', _19 => _19(), 'optionalAccess', _20 => _20.catch, 'call', _21 => _21(()=>{})]):typeof i.requestFullscreen=="function"&&_optionalChain([i, 'access', _22 => _22.requestFullscreen, 'call', _23 => _23(), 'optionalAccess', _24 => _24.catch, 'call', _25 => _25(()=>{})])}}}exports.googleProvider = q;
|
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
"use client";
|
|
2
|
-
import{importLibrary as
|
|
2
|
+
import{importLibrary as h,setOptions as P}from"@googlemaps/js-api-loader";var H="DEMO_MAP_ID";function f(r){return r.raw}function x(r,o){if(r.element)return r.element;if(r.iconUrl)return new o.PinElement({glyphSrc:r.iconUrl}).element}var E=12,I="#b3261e";function R(r){if(r.element)return r.element;if(r.iconUrl){let a=document.createElement("img");return a.src=r.iconUrl,a}let o=document.createElement("div");return o.style.width=`${E}px`,o.style.height=`${E}px`,o.style.borderRadius="50%",o.style.backgroundColor=I,o.style.border="2px solid #ffffff",o.style.boxShadow="0 1px 4px rgba(0, 0, 0, 0.4)",o}var g;function A(){if(g)return g;class r extends google.maps.OverlayView{constructor(t,s,i,e){super();this.position=t;this.content=s;this.onClick=i;this.lifecycle=e}position;content;onClick;lifecycle;div=null;onAdd(){let t=document.createElement("div");t.style.position="absolute",t.style.transform="translate(-50%, -50%)",this.onClick&&(t.style.cursor="pointer",t.addEventListener("click",this.onClick)),t.appendChild(this.content),this.div=t,this.getPanes()?.overlayMouseTarget.appendChild(t),typeof google.maps.OverlayView.preventMapHitsAndGesturesFrom=="function"&&google.maps.OverlayView.preventMapHitsAndGesturesFrom(t),this.lifecycle.onContainerAdd(t)}draw(){if(!this.div)return;let t=this.getProjection();if(!t)return;let s=t.fromLatLngToDivPixel(new google.maps.LatLng(this.position.lat,this.position.lng));s&&(this.div.style.left=`${s.x}px`,this.div.style.top=`${s.y}px`)}onRemove(){let t=this.div;this.div?.remove(),this.div=null,t&&this.lifecycle.onContainerRemove(t)}}return g=r,g}var v=14,T=8;function G(r){let{anchorX:o,anchorY:a,popupW:t,popupH:s,mapW:i,mapH:e,offsetY:n,pad:l}=r,d=o-t/2,c=o+t/2,p=0;t>i-l*2?p=l-d:c>i-l?p=i-l-c:d<l&&(p=l-d);let u=a-n-s,y=a+n+s,m=u<l&&y<=e-l;return{dx:p,flipBelow:m}}var M;function S(){if(M)return M;class r extends google.maps.OverlayView{constructor(t,s,i){super();this.container=t;this.position=s;this.mapContainerEl=i}container;position;mapContainerEl;attached=!1;onAdd(){this.attached=!0,this.getPanes()?.floatPane.appendChild(this.container),typeof google.maps.OverlayView.preventMapHitsAndGesturesFrom=="function"&&google.maps.OverlayView.preventMapHitsAndGesturesFrom(this.container),typeof requestAnimationFrame<"u"&&requestAnimationFrame(()=>this.draw())}draw(){let t=this.getProjection();if(!t)return;let s=new google.maps.LatLng(this.position.lat,this.position.lng),i=t.fromLatLngToDivPixel(s);if(!i)return;let e=this.container.offsetWidth,n=this.container.offsetHeight,l=e&&n?t.fromLatLngToContainerPixel(s):null;if(!l){this.container.style.transform="translate(-50%, -100%)",this.container.style.left=`${i.x}px`,this.container.style.top=`${i.y-v}px`;return}let{dx:d,flipBelow:c}=G({anchorX:l.x,anchorY:l.y,popupW:e,popupH:n,mapW:this.mapContainerEl.clientWidth,mapH:this.mapContainerEl.clientHeight,offsetY:v,pad:T});this.container.style.left=`${i.x+d}px`,c?(this.container.style.top=`${i.y+v}px`,this.container.style.transform="translate(-50%, 0)"):(this.container.style.top=`${i.y-v}px`,this.container.style.transform="translate(-50%, -100%)")}onRemove(){this.attached=!1,this.container.remove()}updatePosition(t){this.position=t,this.attached&&this.draw()}}return M=r,M}function k(r){for(let o of r)typeof o.setMap=="function"?o.setMap(null):o.map=null}var _="#b3261e",F=40,B=64,U=14;function z(r,o){let a=o.count,t=Math.min(B,F+Math.round(Math.log10(a+1)*U)),s=document.createElement("div");return s.textContent=String(a),s.style.display="flex",s.style.alignItems="center",s.style.justifyContent="center",s.style.width=`${t}px`,s.style.height=`${t}px`,s.style.borderRadius="50%",s.style.backgroundColor=_,s.style.border="2px solid #ffffff",s.style.boxShadow="0 1px 4px rgba(0, 0, 0, 0.4)",s.style.color="#ffffff",s.style.fontFamily="inherit",s.style.fontWeight="700",s.style.fontSize=t>=52?"15px":"13px",new r.AdvancedMarkerElement({position:o.position,content:s})}var C=!1;async function V(r,o,a,t){let s;try{s=await import("@googlemaps/markerclusterer")}catch(e){C||(C=!0,console.warn('[react-listing-engine] "@googlemaps/markerclusterer" is not installed -- rendering plain (unclustered) markers instead. Install "@googlemaps/markerclusterer" to enable clustering.',e));return}if(r.layers.get(o)!==a)return;let i=new s.MarkerClusterer({map:r.map,markers:a,algorithmOptions:{maxZoom:t.maxZoom},renderer:{render:e=>z(r.markerLib,e)}});r.clusterers.set(o,i)}function L(r,o){let a=r.clusterers.get(o);a&&(a.setMap(null),r.clusterers.delete(o))}var b=!1;function W(){b||(b=!0,console.warn('[react-listing-engine] Marker clustering is not supported in `styles` (OverlayView) mode -- "@googlemaps/markerclusterer" only manages Marker/AdvancedMarkerElement instances. Rendering plain, unclustered overlay markers instead. Use a `mapId` (advanced-marker mode) to enable clustering.'))}function $(r,o){return o.markers.map(a=>{let t=new r.markerLib.AdvancedMarkerElement({map:r.map,position:a.position,content:x(a,r.markerLib),gmpClickable:!!o.onMarkerClick});if(o.onMarkerClick){let s=o.onMarkerClick;t.addListener("click",()=>s(a.id))}return t})}function w(r,o,a,t){r.classList.toggle("rle-marker--selected",o===a),r.classList.toggle("rle-marker--hovered",o===t&&o!==a)}function D(r,o){let a=A();return o.markers.map(t=>{let s=o.onMarkerClick,i=s?()=>s(t.id):void 0,e=new a(t.position,R(t),i,{onContainerAdd:n=>{r.markerElements.set(t.id,n),w(n,t.id,r.selectedMarkerId,r.hoveredMarkerId)},onContainerRemove:n=>{r.markerElements.get(t.id)===n&&r.markerElements.delete(t.id)}});return e.setMap(r.map),e})}function O(r,o){let a=r.layerMarkerIds.get(o);if(a){for(let t of a)r.markerElements.delete(t);r.layerMarkerIds.delete(o)}}function X(r){let o=r.getSouthWest(),a=r.getNorthEast();return{west:o.lng(),south:o.lat(),east:a.lng(),north:a.lat()}}function Z(r,o,a){if(typeof ResizeObserver>"u")return;let t=!1,s=()=>{let{width:e,height:n}=r.getBoundingClientRect();e===0||n===0||(google.maps.event.trigger(o,"resize"),t||(t=!0,o.setCenter(a)))},i=new ResizeObserver(s);return i.observe(r),typeof requestAnimationFrame<"u"?requestAnimationFrame(s):queueMicrotask(s),i}function q(r){if(!r.apiKey)throw new Error("googleProvider: config.apiKey is required (no hardcoded fallback key is ever used).");let o=!1,a=()=>{o||(P({...r.loaderOptions,key:r.apiKey}),o=!0)},t,s=0;return{async mount(i,e){let n=++s;a();let l=await h("maps"),d=await h("marker"),c=e.center??{lat:0,lng:0},p=r.styles!=null,u=new l.Map(i,{...r.mapOptions,center:c,zoom:e.zoom??10,...p?{styles:r.styles}:{mapId:r.mapId??H}}),y=Z(i,u,c),m={map:u,containerEl:i,fullscreenEl:e.fullscreenTarget??i,markerLib:d,markerMode:p?"overlay":"advanced",layers:new Map,clusterers:new Map,boundsListeners:new Set,clickListeners:new Set,resizeObserver:y,markerElements:new Map,layerMarkerIds:new Map,selectedMarkerId:null,hoveredMarkerId:null};return n===s&&(t=m),{raw:m}},renderLayer(i,e){let n=f(i),l=n.layers.get(e.id);l&&(k(l),n.layers.delete(e.id),O(n,e.id)),L(n,e.id);let d=n.markerMode==="overlay"?D(n,e):$(n,e);n.layers.set(e.id,d),n.markerMode==="overlay"&&n.layerMarkerIds.set(e.id,e.markers.map(p=>p.id)),e.clustering&&(n.markerMode==="overlay"?W():V(n,e.id,d,e.clustering));let c=!1;return()=>{c||(c=!0,n.layers.get(e.id)===d&&(k(d),n.layers.delete(e.id),L(n,e.id),O(n,e.id)))}},onBoundsChange(i,e){let n=f(i),l=n.map.addListener("idle",()=>{let c=n.map.getBounds();c&&e(X(c))});n.boundsListeners.add(l);let d=!1;return()=>{d||(d=!0,l.remove(),n.boundsListeners.delete(l))}},onMapClick(i){let e=t;if(!e)return()=>{};let n=e.map.addListener("click",()=>i());e.clickListeners.add(n);let l=!1;return()=>{l||(l=!0,n.remove(),e.clickListeners.delete(n))}},fitBounds(i,e){f(i).map.fitBounds(e)},destroy(i){let e=f(i);e.resizeObserver?.disconnect();for(let n of e.boundsListeners)n.remove();e.boundsListeners.clear();for(let n of e.clickListeners)n.remove();e.clickListeners.clear();for(let n of[...e.clusterers.keys()])L(e,n);for(let n of e.layers.values())k(n);e.layers.clear(),e.markerElements.clear(),e.layerMarkerIds.clear(),t===e&&(t=void 0)},updateMarkerStates(i,e){if(t){t.selectedMarkerId=i,t.hoveredMarkerId=e;for(let[n,l]of t.markerElements)w(l,n,i,e)}},mountOverlay(i){let e=document.createElement("div");if(e.style.position="absolute",e.style.transform="translate(-50%, -100%)",e.style.pointerEvents="auto",!t)return{container:e,setPosition:()=>{},unmount:()=>e.remove()};let n=S(),l=new n(e,i,t.containerEl);return l.setMap(t.map),{container:e,setPosition:d=>l.updatePosition(d),unmount:()=>{l.setMap(null),e.remove()}}},zoomIn(){t&&t.map.setZoom((t.map.getZoom()??0)+1)},zoomOut(){t&&t.map.setZoom((t.map.getZoom()??0)-1)},toggleFullscreen(){if(!t)return;let i=t.fullscreenEl,e=document.fullscreenElement;e!=null&&i.contains(e)?typeof document.exitFullscreen=="function"&&document.exitFullscreen()?.catch(()=>{}):typeof i.requestFullscreen=="function"&&i.requestFullscreen()?.catch(()=>{})}}}export{q as googleProvider};
|
package/dist/styled/index.cjs
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
"use strict";Object.defineProperty(exports, "__esModule", {value: true});"use client";
|
|
2
|
-
var
|
|
2
|
+
var _chunkBLTUDXYMcjs = require('../chunk-BLTUDXYM.cjs');var _jsxruntime = require('react/jsx-runtime');function L({children:o}){return _jsxruntime.jsx.call(void 0, _chunkBLTUDXYMcjs.q,{..._chunkBLTUDXYMcjs.O,children:o})}exports.BottomNav = _chunkBLTUDXYMcjs.P; exports.BottomSheet = _chunkBLTUDXYMcjs.Q; exports.ListingApp = _chunkBLTUDXYMcjs.S; exports.StyledCard = _chunkBLTUDXYMcjs.E; exports.StyledComponentsProviderWithDefaults = L; exports.StyledEmpty = _chunkBLTUDXYMcjs.F; exports.StyledFilterPanel = _chunkBLTUDXYMcjs.G; exports.StyledListingLayout = _chunkBLTUDXYMcjs.R; exports.StyledLoading = _chunkBLTUDXYMcjs.H; exports.StyledMarker = _chunkBLTUDXYMcjs.I; exports.StyledPopup = _chunkBLTUDXYMcjs.J; exports.StyledResultHeader = _chunkBLTUDXYMcjs.K; exports.StyledSearch = _chunkBLTUDXYMcjs.L; exports.StyledSidebar = _chunkBLTUDXYMcjs.M; exports.StyledToolbar = _chunkBLTUDXYMcjs.N; exports.styledDefaultComponents = _chunkBLTUDXYMcjs.O;
|
package/dist/styled/index.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
"use client";
|
|
2
|
-
import{E as r,F as p,G as i,H as d,I as y,J as l,K as n,L as m,M as s,N as a,O as t,P as S,Q as f,R as P,S as u,q as e}from"../chunk-
|
|
2
|
+
import{E as r,F as p,G as i,H as d,I as y,J as l,K as n,L as m,M as s,N as a,O as t,P as S,Q as f,R as P,S as u,q as e}from"../chunk-4DIL4D2U.js";import{jsx as g}from"react/jsx-runtime";function L({children:o}){return g(e,{...t,children:o})}export{S as BottomNav,f as BottomSheet,u as ListingApp,r as StyledCard,L as StyledComponentsProviderWithDefaults,p as StyledEmpty,i as StyledFilterPanel,P as StyledListingLayout,d as StyledLoading,y as StyledMarker,l as StyledPopup,n as StyledResultHeader,m as StyledSearch,s as StyledSidebar,a as StyledToolbar,t as styledDefaultComponents};
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "react-listing-engine",
|
|
3
|
-
"version": "0.7.
|
|
3
|
+
"version": "0.7.2",
|
|
4
4
|
"license": "MIT",
|
|
5
5
|
"description": "Headless, composable listing engine for React: filterable list + Google-Maps multi-layer map, with pluggable data adapters, a filter/dataset registry, injectable components, and a Tailwind-free styled adapter.",
|
|
6
6
|
"funding": [
|
|
File without changes
|
|
File without changes
|