react-listing-engine 0.5.0 → 0.6.1
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/chunk-6Q4SWHOS.js +2 -0
- package/dist/chunk-SH6TREDD.cjs +2 -0
- package/dist/index.cjs +1 -1
- package/dist/index.d.cts +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.js +1 -1
- package/dist/{listing-app-DQ1FqQwY.d.cts → listing-app-D2UB9ru3.d.cts} +41 -27
- package/dist/{listing-app-Cu-9sydx.d.ts → listing-app-DDKZ6Inn.d.ts} +41 -27
- package/dist/styled/index.cjs +2 -2
- package/dist/styled/index.d.cts +1 -1
- package/dist/styled/index.d.ts +1 -1
- package/dist/styled/index.js +1 -1
- package/dist/styles.css +79 -83
- package/package.json +1 -1
- package/dist/chunk-2HQ3HB7P.js +0 -2
- package/dist/chunk-5NZBR3MI.cjs +0 -2
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,17 @@
|
|
|
1
1
|
# react-listing-engine
|
|
2
2
|
|
|
3
|
+
## 0.6.1
|
|
4
|
+
|
|
5
|
+
### Patch Changes
|
|
6
|
+
|
|
7
|
+
- `/styled`: fix "Clear all" in the mobile filters sheet -- it cleared each filter by its registry `key`, which no-ops when a filter maps its control to different state fields via `to/fromParams` (e.g. `rent` -> `minRent`/`maxRent`). It now resets via each filter's own `toParams(fromParams({}))`. Also: the mobile Filters button now shows a count badge of how many filters are applied.
|
|
8
|
+
|
|
9
|
+
## 0.6.0
|
|
10
|
+
|
|
11
|
+
### Minor Changes
|
|
12
|
+
|
|
13
|
+
- `/styled`: revert the 0.5.0 unified filter bar. Restore the desktop filter bar + the mobile header (search + Filters button) + Filters bottom sheet, so a consumer can render distinct desktop vs. mobile filter controls (e.g. inline popover buttons on desktop, wheel-pickers in the mobile sheet). `MobileHeader` and the `BottomSheet`-backed Filters panel are back.
|
|
14
|
+
|
|
3
15
|
## 0.5.0
|
|
4
16
|
|
|
5
17
|
### Minor Changes
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import{A as le,B as ae,h as J,i as Q,j as X,k as Y,l as j,n as ee,p as te,q as x,s as k,u as re,v as T,w as ie,x as oe,y as ne,z as se}from"./chunk-R3FX2V3N.js";import{useEffect as Ce,useRef as xe}from"react";function de(e,r){let t=k(),i=xe(r);i.current=r,Ce(()=>t.on(e,n=>i.current(n)),[t,e])}function N(e){return typeof e!="number"?e:new Intl.NumberFormat("en-US",{style:"currency",currency:"USD",maximumFractionDigits:0}).format(e)}import{Fragment as Ie,jsx as u,jsxs as pe}from"react/jsx-runtime";function ke(e){return e?"rle-card rle-card--selected":"rle-card"}function A({item:e,selected:r,onSelect:t}){let i=e??{},n=ke(r),a=pe(Ie,{children:[i.imageUrl?u("img",{src:i.imageUrl,alt:i.title??"",className:"rle-card-media"}):u("div",{className:"rle-card-media rle-card-media--placeholder","aria-hidden":"true"}),pe("div",{className:"rle-card-body",children:[i.title&&u("span",{className:"rle-card-title",children:i.title}),i.subtitle&&u("span",{className:"rle-card-address",children:i.subtitle}),i.badge&&u("div",{className:"rle-card-info",children:u("span",{className:"rle-card-info-item",children:i.badge})}),i.price!=null&&u("span",{className:"rle-card-price",children:N(i.price)})]})]});return t?u("button",{type:"button",onClick:t,"aria-pressed":r??!1,className:n,children:a}):u("article",{className:n,children:a})}import{jsx as I,jsxs as ce}from"react/jsx-runtime";function B(e){return ce("div",{role:"status",className:"rle-empty",children:[ce("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:1.5,strokeLinecap:"round",strokeLinejoin:"round",className:"rle-empty-icon","aria-hidden":"true",children:[I("circle",{cx:"11",cy:"11",r:"7"}),I("path",{d:"m21 21-4.3-4.3"})]}),I("p",{className:"rle-empty-title",children:"No results"}),I("p",{className:"rle-empty-hint",children:"Try adjusting your filters or search terms."})]})}import{jsx as Fe}from"react/jsx-runtime";function V({children:e}){return Fe("div",{className:"rle-filter-panel",children:e})}import{jsx as F,jsxs as Me}from"react/jsx-runtime";function K(e){return F("div",{className:"rle-loading",role:"status","aria-busy":"true","aria-label":"Loading results",children:Array.from({length:3}).map((r,t)=>Me("div",{className:"rle-loading-item",children:[F("div",{className:"rle-skeleton",style:{aspectRatio:"4 / 3",width:"100%"}}),F("div",{className:"rle-skeleton",style:{height:16,width:"65%"}}),F("div",{className:"rle-skeleton",style:{height:12,width:"35%"}})]},t))})}import{jsx as _e}from"react/jsx-runtime";function H({point:e}){let r=e.entity??{};return _e("span",{className:"rle-pin",children:r.price!=null?N(r.price):""})}import{jsx as w,jsxs as D}from"react/jsx-runtime";function O({entity:e,onClose:r}){let t=e??{};return D("div",{className:"rle-popup",role:"group","aria-label":"Location details",children:[w("button",{type:"button",onClick:r,"aria-label":"Close",className:"rle-popup-close",children:D("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:2,strokeLinecap:"round",strokeLinejoin:"round",width:"16",height:"16","aria-hidden":"true",children:[w("path",{d:"M18 6 6 18"}),w("path",{d:"m6 6 12 12"})]})}),D("div",{children:[t.title&&w("div",{className:"rle-card-title",children:t.title}),t.subtitle&&w("div",{className:"rle-card-address",children:t.subtitle}),t.price!=null&&w("div",{className:"rle-card-price",children:N(t.price)})]})]})}import{jsx as Ee}from"react/jsx-runtime";function W({count:e,total:r}){let t=r!=null&&r!==e?`${e} of ${r} results`:`${e} results`;return Ee("div",{className:"rle-result-header",children:t})}import{jsx as Re}from"react/jsx-runtime";function $({value:e,onChange:r,placeholder:t}){return Re("input",{type:"search",value:e,placeholder:t,onChange:i=>r(i.target.value),"aria-label":t??"Search",className:"rle-input"})}import{jsx as Te}from"react/jsx-runtime";function z({children:e}){return Te("aside",{className:"rle-sidebar",children:e})}import{jsx as Ae}from"react/jsx-runtime";function U({children:e}){return Ae("div",{className:"rle-toolbar",children:e})}var me={Card:A,Marker:H,Popup:O,Sidebar:z,FilterPanel:V,Search:$,Empty:B,Loading:K,ResultHeader:W,Toolbar:U};import{jsx as o,jsxs as y}from"react/jsx-runtime";function ue({view:e,onViewChange:r}){return o("nav",{className:"rle-bottom-nav","aria-label":"Listing navigation",children:y("div",{className:"rle-viewtoggle",role:"group","aria-label":"View",children:[y("button",{type:"button",className:`rle-viewtoggle__btn${e==="list"?" rle-viewtoggle__btn--active":""}`,"aria-pressed":e==="list",onClick:()=>r("list"),children:[o(Be,{}),"List"]}),y("button",{type:"button",className:`rle-viewtoggle__btn${e==="map"?" rle-viewtoggle__btn--active":""}`,"aria-pressed":e==="map",onClick:()=>r("map"),children:[o(Ve,{}),"Map"]})]})})}function ge(){return y("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:2,strokeLinecap:"round",strokeLinejoin:"round","aria-hidden":"true",children:[o("line",{x1:"4",y1:"6",x2:"20",y2:"6"}),o("circle",{cx:"9",cy:"6",r:"2",fill:"currentColor",stroke:"none"}),o("line",{x1:"4",y1:"12",x2:"20",y2:"12"}),o("circle",{cx:"15",cy:"12",r:"2",fill:"currentColor",stroke:"none"}),o("line",{x1:"4",y1:"18",x2:"20",y2:"18"}),o("circle",{cx:"11",cy:"18",r:"2",fill:"currentColor",stroke:"none"})]})}function Be(){return y("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:2,strokeLinecap:"round",strokeLinejoin:"round",width:"16",height:"16","aria-hidden":"true",children:[o("line",{x1:"8",y1:"6",x2:"20",y2:"6"}),o("line",{x1:"8",y1:"12",x2:"20",y2:"12"}),o("line",{x1:"8",y1:"18",x2:"20",y2:"18"}),o("line",{x1:"4",y1:"6",x2:"4.01",y2:"6"}),o("line",{x1:"4",y1:"12",x2:"4.01",y2:"12"}),o("line",{x1:"4",y1:"18",x2:"4.01",y2:"18"})]})}function Ve(){return y("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:2,strokeLinecap:"round",strokeLinejoin:"round",width:"16",height:"16","aria-hidden":"true",children:[o("polygon",{points:"1 6 8 3 16 6 23 3 23 18 16 21 8 18 1 21 1 6"}),o("line",{x1:"8",y1:"3",x2:"8",y2:"18"}),o("line",{x1:"16",y1:"6",x2:"16",y2:"21"})]})}function fe(){return y("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:2,strokeLinecap:"round",strokeLinejoin:"round","aria-hidden":"true",children:[o("line",{x1:"12",y1:"5",x2:"12",y2:"19"}),o("line",{x1:"5",y1:"12",x2:"19",y2:"12"})]})}import{useEffect as Z,useRef as Ke,useState as ye}from"react";import{createPortal as He}from"react-dom";import{Fragment as Oe,jsx as g,jsxs as M}from"react/jsx-runtime";function ve({open:e,onOpenChange:r,title:t,children:i,footer:n}){let a=Ke(null),[l,m]=ye(!1),[p,b]=ye(!1);return Z(()=>{if(!e){b(!1),m(!1);return}m(!0);let d=requestAnimationFrame(()=>b(!0));return()=>cancelAnimationFrame(d)},[e]),Z(()=>{if(!l)return;let d=document.body.style.overflow;return document.body.style.overflow="hidden",()=>{document.body.style.overflow=d}},[l]),Z(()=>{if(!l)return;a.current?.focus();function d(L){L.key==="Escape"&&r(!1)}return document.addEventListener("keydown",d),()=>document.removeEventListener("keydown",d)},[l,r]),!l||typeof document>"u"?null:He(M(Oe,{children:[g("div",{className:`rle-sheet-backdrop${p?" rle-sheet-backdrop--open":""}`,onClick:()=>r(!1),"aria-hidden":"true"}),M("div",{ref:a,className:`rle-sheet${p?" rle-sheet--open":""}`,role:"dialog","aria-modal":"true","aria-label":t,tabIndex:-1,children:[g("div",{className:"rle-sheet__handle","aria-hidden":"true"}),M("div",{className:"rle-sheet__header",children:[t&&g("div",{className:"rle-sheet__title",children:t}),g("button",{type:"button",className:"rle-sheet__close",onClick:()=>r(!1),"aria-label":"Close",children:g(De,{})})]}),g("div",{className:"rle-sheet__body",children:i}),n&&g("div",{className:"rle-sheet__footer",children:n})]})]}),document.body)}function De(){return M("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:2,strokeLinecap:"round",strokeLinejoin:"round",width:"16",height:"16","aria-hidden":"true",children:[g("path",{d:"M18 6 6 18"}),g("path",{d:"m6 6 12 12"})]})}import{useEffect as We,useState as Le}from"react";import{jsx as v,jsxs as he}from"react/jsx-runtime";function be({search:e,onFiltersClick:r,filterCount:t=0,action:i}){let{Search:n}=x();return he("header",{className:"rle-mobile-header",children:[e&&v("div",{className:"rle-mobile-header__search",children:v(n,{value:e.value,onChange:e.onChange,placeholder:e.placeholder})}),he("button",{type:"button",className:"rle-mobile-header__btn",onClick:r,children:[v(ge,{}),v("span",{children:"Filters"}),t>0&&v("span",{className:"rle-mobile-header__count",children:t})]}),i&&v("button",{type:"button",className:"rle-mobile-header__btn rle-mobile-header__btn--icon",onClick:i.onClick,"aria-label":i.label,children:i.icon??v(fe,{})})]})}import{Fragment as ze,jsx as s,jsxs as h}from"react/jsx-runtime";var $e=s("div",{className:"rle-empty",children:"Map unavailable"});function Ne({search:e,toolbarEnd:r,mobileAction:t,autoFetch:i=!0,hasMap:n=!0,mapCenter:a,mapZoom:l,className:m}){let p=k(),{Search:b}=x(),d=ie(),{filters:L}=re(),[P,_]=Le("list"),[C,c]=Le(!1),f=e?{value:String(L[e.filterKey]??""),onChange:S=>{p.applyFilters({[e.filterKey]:S||void 0})},placeholder:e.placeholder}:void 0;We(()=>{i!==!1&&p.applyFilters({})},[p,i]);let E=()=>{let S=p.filters.list().reduce((Pe,G)=>Object.assign(Pe,G.toParams(G.fromParams({}))),{});p.applyFilters(S)},R=p.filters.list().filter(S=>S.isActive?.(L)).length,Se=d.total??d.items.length;return h("div",{className:m?`rle-app ${m}`:"rle-app",children:[h("div",{className:"rle-filter-bar",children:[f&&s("div",{className:"rle-filter-bar__search",children:s(b,{value:f.value,onChange:f.onChange,placeholder:f.placeholder})}),s(T,{className:"rle-filters-row",groupClassName:"rle-filter-group",hideLabels:!0}),h("div",{className:"rle-filter-bar__end",children:[s(le,{}),r]})]}),s(be,{search:f,onFiltersClick:()=>c(!0),filterCount:R,action:t}),h("div",{className:`rle-body ${n?"rle-split":"rle-body--list-only"}`,"data-mobile-view":P,children:[h("div",{className:"rle-list",children:[s(oe,{className:"rle-list-grid"}),s(se,{})]}),n&&s("div",{className:"rle-map",children:s(ne,{center:a,zoom:l,fallback:$e})})]}),n&&s(ue,{view:P,onViewChange:_}),s(ve,{title:"Filters",open:C,onOpenChange:c,footer:h(ze,{children:[s("button",{type:"button",className:"rle-btn rle-btn--ghost",onClick:E,children:"Clear all"}),h("button",{type:"button",className:"rle-btn rle-btn--primary",onClick:()=>c(!1),children:["Show ",Se," results"]})]}),children:s(T,{className:"rle-filter-stack",groupClassName:"rle-filter-group"})})]})}import{useEffect as Ue,useRef as Ze,useState as qe}from"react";import{jsx as q,jsxs as Qe}from"react/jsx-runtime";function we(e){return"provider"in e}function Ge(e){let r=e!=null&&!we(e),t=r?e.apiKey:void 0,i=r?e.mapId:void 0,[n,a]=qe(()=>!e||we(e)?{ready:!0,provider:e?.provider}:{ready:!1});return Ue(()=>{if(!t)return;let l=!1;return import("./maps/google/index.js").then(({googleProvider:m})=>{l||a({ready:!0,provider:m({apiKey:t,mapId:i})})}),()=>{l=!0}},[t,i]),n}function Je({onFiltersChange:e}){let r=Ze(e);return r.current=e,de("FiltersChanged",t=>{t.type==="FiltersChanged"&&r.current(t.filters)}),null}function nr(e){let{datasets:r,filters:t,map:i,components:n,initialFilters:a,onFiltersChange:l,mobileAction:m,search:p,toolbarEnd:b,config:d,autoFetch:L,className:P}=e,{ready:_,provider:C}=Ge(i);if(!_)return null;let c=[];for(let R of r)c.push(Y(R));t&&c.push(j(t)),C&&c.push(X(C)),a&&c.push(ee(a)),d&&c.push(Q(d));let f=J(...c),E={...me,...n};return Qe(ae,{...f,children:[l&&q(Je,{onFiltersChange:l}),q(te,{...E,children:q(Ne,{className:P,search:p,toolbarEnd:b,mobileAction:m,autoFetch:L,hasMap:i!=null,mapCenter:i?.center,mapZoom:i?.zoom})})]})}export{de as a,A as b,B as c,V as d,K as e,H as f,O as g,W as h,$ as i,z as j,U as k,me as l,ue as m,ve as n,Ne as o,nr as p};
|
|
@@ -0,0 +1,2 @@
|
|
|
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 _chunkEYXV5OMYcjs = require('./chunk-EYXV5OMY.cjs');var _react = require('react');function de(e,r){let t=_chunkEYXV5OMYcjs.s.call(void 0, ),i=_react.useRef.call(void 0, r);i.current=r,_react.useEffect.call(void 0, ()=>t.on(e,n=>i.current(n)),[t,e])}function N(e){return typeof e!="number"?e:new Intl.NumberFormat("en-US",{style:"currency",currency:"USD",maximumFractionDigits:0}).format(e)}var _jsxruntime = require('react/jsx-runtime');function ke(e){return e?"rle-card rle-card--selected":"rle-card"}function A({item:e,selected:r,onSelect:t}){let i=_nullishCoalesce(e, () => ({})),n=ke(r),a=_jsxruntime.jsxs.call(void 0, _jsxruntime.Fragment,{children:[i.imageUrl?_jsxruntime.jsx.call(void 0, "img",{src:i.imageUrl,alt:_nullishCoalesce(i.title, () => ("")),className:"rle-card-media"}):_jsxruntime.jsx.call(void 0, "div",{className:"rle-card-media rle-card-media--placeholder","aria-hidden":"true"}),_jsxruntime.jsxs.call(void 0, "div",{className:"rle-card-body",children:[i.title&&_jsxruntime.jsx.call(void 0, "span",{className:"rle-card-title",children:i.title}),i.subtitle&&_jsxruntime.jsx.call(void 0, "span",{className:"rle-card-address",children:i.subtitle}),i.badge&&_jsxruntime.jsx.call(void 0, "div",{className:"rle-card-info",children:_jsxruntime.jsx.call(void 0, "span",{className:"rle-card-info-item",children:i.badge})}),i.price!=null&&_jsxruntime.jsx.call(void 0, "span",{className:"rle-card-price",children:N(i.price)})]})]});return t?_jsxruntime.jsx.call(void 0, "button",{type:"button",onClick:t,"aria-pressed":_nullishCoalesce(r, () => (!1)),className:n,children:a}):_jsxruntime.jsx.call(void 0, "article",{className:n,children:a})}function B(e){return _jsxruntime.jsxs.call(void 0, "div",{role:"status",className:"rle-empty",children:[_jsxruntime.jsxs.call(void 0, "svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:1.5,strokeLinecap:"round",strokeLinejoin:"round",className:"rle-empty-icon","aria-hidden":"true",children:[_jsxruntime.jsx.call(void 0, "circle",{cx:"11",cy:"11",r:"7"}),_jsxruntime.jsx.call(void 0, "path",{d:"m21 21-4.3-4.3"})]}),_jsxruntime.jsx.call(void 0, "p",{className:"rle-empty-title",children:"No results"}),_jsxruntime.jsx.call(void 0, "p",{className:"rle-empty-hint",children:"Try adjusting your filters or search terms."})]})}function V({children:e}){return _jsxruntime.jsx.call(void 0, "div",{className:"rle-filter-panel",children:e})}function K(e){return _jsxruntime.jsx.call(void 0, "div",{className:"rle-loading",role:"status","aria-busy":"true","aria-label":"Loading results",children:Array.from({length:3}).map((r,t)=>_jsxruntime.jsxs.call(void 0, "div",{className:"rle-loading-item",children:[_jsxruntime.jsx.call(void 0, "div",{className:"rle-skeleton",style:{aspectRatio:"4 / 3",width:"100%"}}),_jsxruntime.jsx.call(void 0, "div",{className:"rle-skeleton",style:{height:16,width:"65%"}}),_jsxruntime.jsx.call(void 0, "div",{className:"rle-skeleton",style:{height:12,width:"35%"}})]},t))})}function H({point:e}){let r=_nullishCoalesce(e.entity, () => ({}));return _jsxruntime.jsx.call(void 0, "span",{className:"rle-pin",children:r.price!=null?N(r.price):""})}function O({entity:e,onClose:r}){let t=_nullishCoalesce(e, () => ({}));return _jsxruntime.jsxs.call(void 0, "div",{className:"rle-popup",role:"group","aria-label":"Location details",children:[_jsxruntime.jsx.call(void 0, "button",{type:"button",onClick:r,"aria-label":"Close",className:"rle-popup-close",children:_jsxruntime.jsxs.call(void 0, "svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:2,strokeLinecap:"round",strokeLinejoin:"round",width:"16",height:"16","aria-hidden":"true",children:[_jsxruntime.jsx.call(void 0, "path",{d:"M18 6 6 18"}),_jsxruntime.jsx.call(void 0, "path",{d:"m6 6 12 12"})]})}),_jsxruntime.jsxs.call(void 0, "div",{children:[t.title&&_jsxruntime.jsx.call(void 0, "div",{className:"rle-card-title",children:t.title}),t.subtitle&&_jsxruntime.jsx.call(void 0, "div",{className:"rle-card-address",children:t.subtitle}),t.price!=null&&_jsxruntime.jsx.call(void 0, "div",{className:"rle-card-price",children:N(t.price)})]})]})}function W({count:e,total:r}){let t=r!=null&&r!==e?`${e} of ${r} results`:`${e} results`;return _jsxruntime.jsx.call(void 0, "div",{className:"rle-result-header",children:t})}function $({value:e,onChange:r,placeholder:t}){return _jsxruntime.jsx.call(void 0, "input",{type:"search",value:e,placeholder:t,onChange:i=>r(i.target.value),"aria-label":_nullishCoalesce(t, () => ("Search")),className:"rle-input"})}function z({children:e}){return _jsxruntime.jsx.call(void 0, "aside",{className:"rle-sidebar",children:e})}function U({children:e}){return _jsxruntime.jsx.call(void 0, "div",{className:"rle-toolbar",children:e})}var me={Card:A,Marker:H,Popup:O,Sidebar:z,FilterPanel:V,Search:$,Empty:B,Loading:K,ResultHeader:W,Toolbar:U};function ue({view:e,onViewChange:r}){return _jsxruntime.jsx.call(void 0, "nav",{className:"rle-bottom-nav","aria-label":"Listing navigation",children:_jsxruntime.jsxs.call(void 0, "div",{className:"rle-viewtoggle",role:"group","aria-label":"View",children:[_jsxruntime.jsxs.call(void 0, "button",{type:"button",className:`rle-viewtoggle__btn${e==="list"?" rle-viewtoggle__btn--active":""}`,"aria-pressed":e==="list",onClick:()=>r("list"),children:[_jsxruntime.jsx.call(void 0, Be,{}),"List"]}),_jsxruntime.jsxs.call(void 0, "button",{type:"button",className:`rle-viewtoggle__btn${e==="map"?" rle-viewtoggle__btn--active":""}`,"aria-pressed":e==="map",onClick:()=>r("map"),children:[_jsxruntime.jsx.call(void 0, Ve,{}),"Map"]})]})})}function ge(){return _jsxruntime.jsxs.call(void 0, "svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:2,strokeLinecap:"round",strokeLinejoin:"round","aria-hidden":"true",children:[_jsxruntime.jsx.call(void 0, "line",{x1:"4",y1:"6",x2:"20",y2:"6"}),_jsxruntime.jsx.call(void 0, "circle",{cx:"9",cy:"6",r:"2",fill:"currentColor",stroke:"none"}),_jsxruntime.jsx.call(void 0, "line",{x1:"4",y1:"12",x2:"20",y2:"12"}),_jsxruntime.jsx.call(void 0, "circle",{cx:"15",cy:"12",r:"2",fill:"currentColor",stroke:"none"}),_jsxruntime.jsx.call(void 0, "line",{x1:"4",y1:"18",x2:"20",y2:"18"}),_jsxruntime.jsx.call(void 0, "circle",{cx:"11",cy:"18",r:"2",fill:"currentColor",stroke:"none"})]})}function Be(){return _jsxruntime.jsxs.call(void 0, "svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:2,strokeLinecap:"round",strokeLinejoin:"round",width:"16",height:"16","aria-hidden":"true",children:[_jsxruntime.jsx.call(void 0, "line",{x1:"8",y1:"6",x2:"20",y2:"6"}),_jsxruntime.jsx.call(void 0, "line",{x1:"8",y1:"12",x2:"20",y2:"12"}),_jsxruntime.jsx.call(void 0, "line",{x1:"8",y1:"18",x2:"20",y2:"18"}),_jsxruntime.jsx.call(void 0, "line",{x1:"4",y1:"6",x2:"4.01",y2:"6"}),_jsxruntime.jsx.call(void 0, "line",{x1:"4",y1:"12",x2:"4.01",y2:"12"}),_jsxruntime.jsx.call(void 0, "line",{x1:"4",y1:"18",x2:"4.01",y2:"18"})]})}function Ve(){return _jsxruntime.jsxs.call(void 0, "svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:2,strokeLinecap:"round",strokeLinejoin:"round",width:"16",height:"16","aria-hidden":"true",children:[_jsxruntime.jsx.call(void 0, "polygon",{points:"1 6 8 3 16 6 23 3 23 18 16 21 8 18 1 21 1 6"}),_jsxruntime.jsx.call(void 0, "line",{x1:"8",y1:"3",x2:"8",y2:"18"}),_jsxruntime.jsx.call(void 0, "line",{x1:"16",y1:"6",x2:"16",y2:"21"})]})}function fe(){return _jsxruntime.jsxs.call(void 0, "svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:2,strokeLinecap:"round",strokeLinejoin:"round","aria-hidden":"true",children:[_jsxruntime.jsx.call(void 0, "line",{x1:"12",y1:"5",x2:"12",y2:"19"}),_jsxruntime.jsx.call(void 0, "line",{x1:"5",y1:"12",x2:"19",y2:"12"})]})}var _reactdom = require('react-dom');function ve({open:e,onOpenChange:r,title:t,children:i,footer:n}){let a=_react.useRef.call(void 0, null),[l,m]=_react.useState.call(void 0, !1),[p,b]=_react.useState.call(void 0, !1);return _react.useEffect.call(void 0, ()=>{if(!e){b(!1),m(!1);return}m(!0);let d=requestAnimationFrame(()=>b(!0));return()=>cancelAnimationFrame(d)},[e]),_react.useEffect.call(void 0, ()=>{if(!l)return;let d=document.body.style.overflow;return document.body.style.overflow="hidden",()=>{document.body.style.overflow=d}},[l]),_react.useEffect.call(void 0, ()=>{if(!l)return;_optionalChain([a, 'access', _2 => _2.current, 'optionalAccess', _3 => _3.focus, 'call', _4 => _4()]);function d(L){L.key==="Escape"&&r(!1)}return document.addEventListener("keydown",d),()=>document.removeEventListener("keydown",d)},[l,r]),!l||typeof document>"u"?null:_reactdom.createPortal.call(void 0, _jsxruntime.jsxs.call(void 0, _jsxruntime.Fragment,{children:[_jsxruntime.jsx.call(void 0, "div",{className:`rle-sheet-backdrop${p?" rle-sheet-backdrop--open":""}`,onClick:()=>r(!1),"aria-hidden":"true"}),_jsxruntime.jsxs.call(void 0, "div",{ref:a,className:`rle-sheet${p?" rle-sheet--open":""}`,role:"dialog","aria-modal":"true","aria-label":t,tabIndex:-1,children:[_jsxruntime.jsx.call(void 0, "div",{className:"rle-sheet__handle","aria-hidden":"true"}),_jsxruntime.jsxs.call(void 0, "div",{className:"rle-sheet__header",children:[t&&_jsxruntime.jsx.call(void 0, "div",{className:"rle-sheet__title",children:t}),_jsxruntime.jsx.call(void 0, "button",{type:"button",className:"rle-sheet__close",onClick:()=>r(!1),"aria-label":"Close",children:_jsxruntime.jsx.call(void 0, De,{})})]}),_jsxruntime.jsx.call(void 0, "div",{className:"rle-sheet__body",children:i}),n&&_jsxruntime.jsx.call(void 0, "div",{className:"rle-sheet__footer",children:n})]})]}),document.body)}function De(){return _jsxruntime.jsxs.call(void 0, "svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:2,strokeLinecap:"round",strokeLinejoin:"round",width:"16",height:"16","aria-hidden":"true",children:[_jsxruntime.jsx.call(void 0, "path",{d:"M18 6 6 18"}),_jsxruntime.jsx.call(void 0, "path",{d:"m6 6 12 12"})]})}function be({search:e,onFiltersClick:r,filterCount:t=0,action:i}){let{Search:n}=_chunkEYXV5OMYcjs.q.call(void 0, );return _jsxruntime.jsxs.call(void 0, "header",{className:"rle-mobile-header",children:[e&&_jsxruntime.jsx.call(void 0, "div",{className:"rle-mobile-header__search",children:_jsxruntime.jsx.call(void 0, n,{value:e.value,onChange:e.onChange,placeholder:e.placeholder})}),_jsxruntime.jsxs.call(void 0, "button",{type:"button",className:"rle-mobile-header__btn",onClick:r,children:[_jsxruntime.jsx.call(void 0, ge,{}),_jsxruntime.jsx.call(void 0, "span",{children:"Filters"}),t>0&&_jsxruntime.jsx.call(void 0, "span",{className:"rle-mobile-header__count",children:t})]}),i&&_jsxruntime.jsx.call(void 0, "button",{type:"button",className:"rle-mobile-header__btn rle-mobile-header__btn--icon",onClick:i.onClick,"aria-label":i.label,children:_nullishCoalesce(i.icon, () => (_jsxruntime.jsx.call(void 0, fe,{})))})]})}var $e=_jsxruntime.jsx.call(void 0, "div",{className:"rle-empty",children:"Map unavailable"});function Ne({search:e,toolbarEnd:r,mobileAction:t,autoFetch:i=!0,hasMap:n=!0,mapCenter:a,mapZoom:l,className:m}){let p=_chunkEYXV5OMYcjs.s.call(void 0, ),{Search:b}=_chunkEYXV5OMYcjs.q.call(void 0, ),d=_chunkEYXV5OMYcjs.w.call(void 0, ),{filters:L}=_chunkEYXV5OMYcjs.u.call(void 0, ),[P,_]=_react.useState.call(void 0, "list"),[C,c]=_react.useState.call(void 0, !1),f=e?{value:String(_nullishCoalesce(L[e.filterKey], () => (""))),onChange:S=>{p.applyFilters({[e.filterKey]:S||void 0})},placeholder:e.placeholder}:void 0;_react.useEffect.call(void 0, ()=>{i!==!1&&p.applyFilters({})},[p,i]);let E=()=>{let S=p.filters.list().reduce((Pe,G)=>Object.assign(Pe,G.toParams(G.fromParams({}))),{});p.applyFilters(S)},R=p.filters.list().filter(S=>_optionalChain([S, 'access', _5 => _5.isActive, 'optionalCall', _6 => _6(L)])).length,Se=_nullishCoalesce(d.total, () => (d.items.length));return _jsxruntime.jsxs.call(void 0, "div",{className:m?`rle-app ${m}`:"rle-app",children:[_jsxruntime.jsxs.call(void 0, "div",{className:"rle-filter-bar",children:[f&&_jsxruntime.jsx.call(void 0, "div",{className:"rle-filter-bar__search",children:_jsxruntime.jsx.call(void 0, b,{value:f.value,onChange:f.onChange,placeholder:f.placeholder})}),_jsxruntime.jsx.call(void 0, _chunkEYXV5OMYcjs.v,{className:"rle-filters-row",groupClassName:"rle-filter-group",hideLabels:!0}),_jsxruntime.jsxs.call(void 0, "div",{className:"rle-filter-bar__end",children:[_jsxruntime.jsx.call(void 0, _chunkEYXV5OMYcjs.A,{}),r]})]}),_jsxruntime.jsx.call(void 0, be,{search:f,onFiltersClick:()=>c(!0),filterCount:R,action:t}),_jsxruntime.jsxs.call(void 0, "div",{className:`rle-body ${n?"rle-split":"rle-body--list-only"}`,"data-mobile-view":P,children:[_jsxruntime.jsxs.call(void 0, "div",{className:"rle-list",children:[_jsxruntime.jsx.call(void 0, _chunkEYXV5OMYcjs.x,{className:"rle-list-grid"}),_jsxruntime.jsx.call(void 0, _chunkEYXV5OMYcjs.z,{})]}),n&&_jsxruntime.jsx.call(void 0, "div",{className:"rle-map",children:_jsxruntime.jsx.call(void 0, _chunkEYXV5OMYcjs.y,{center:a,zoom:l,fallback:$e})})]}),n&&_jsxruntime.jsx.call(void 0, ue,{view:P,onViewChange:_}),_jsxruntime.jsx.call(void 0, ve,{title:"Filters",open:C,onOpenChange:c,footer:_jsxruntime.jsxs.call(void 0, _jsxruntime.Fragment,{children:[_jsxruntime.jsx.call(void 0, "button",{type:"button",className:"rle-btn rle-btn--ghost",onClick:E,children:"Clear all"}),_jsxruntime.jsxs.call(void 0, "button",{type:"button",className:"rle-btn rle-btn--primary",onClick:()=>c(!1),children:["Show ",Se," results"]})]}),children:_jsxruntime.jsx.call(void 0, _chunkEYXV5OMYcjs.v,{className:"rle-filter-stack",groupClassName:"rle-filter-group"})})]})}function we(e){return"provider"in e}function Ge(e){let r=e!=null&&!we(e),t=r?e.apiKey:void 0,i=r?e.mapId:void 0,[n,a]=_react.useState.call(void 0, ()=>!e||we(e)?{ready:!0,provider:_optionalChain([e, 'optionalAccess', _7 => _7.provider])}:{ready:!1});return _react.useEffect.call(void 0, ()=>{if(!t)return;let l=!1;return Promise.resolve().then(() => _interopRequireWildcard(require("./maps/google/index.cjs"))).then(({googleProvider:m})=>{l||a({ready:!0,provider:m({apiKey:t,mapId:i})})}),()=>{l=!0}},[t,i]),n}function Je({onFiltersChange:e}){let r=_react.useRef.call(void 0, e);return r.current=e,de("FiltersChanged",t=>{t.type==="FiltersChanged"&&r.current(t.filters)}),null}function nr(e){let{datasets:r,filters:t,map:i,components:n,initialFilters:a,onFiltersChange:l,mobileAction:m,search:p,toolbarEnd:b,config:d,autoFetch:L,className:P}=e,{ready:_,provider:C}=Ge(i);if(!_)return null;let c=[];for(let R of r)c.push(_chunkEYXV5OMYcjs.k.call(void 0, R));t&&c.push(_chunkEYXV5OMYcjs.l.call(void 0, t)),C&&c.push(_chunkEYXV5OMYcjs.j.call(void 0, C)),a&&c.push(_chunkEYXV5OMYcjs.n.call(void 0, a)),d&&c.push(_chunkEYXV5OMYcjs.i.call(void 0, d));let f=_chunkEYXV5OMYcjs.h.call(void 0, ...c),E={...me,...n};return _jsxruntime.jsxs.call(void 0, _chunkEYXV5OMYcjs.B,{...f,children:[l&&_jsxruntime.jsx.call(void 0, Je,{onFiltersChange:l}),_jsxruntime.jsx.call(void 0, _chunkEYXV5OMYcjs.p,{...E,children:_jsxruntime.jsx.call(void 0, Ne,{className:P,search:p,toolbarEnd:b,mobileAction:m,autoFetch:L,hasMap:i!=null,mapCenter:_optionalChain([i, 'optionalAccess', _8 => _8.center]),mapZoom:_optionalChain([i, 'optionalAccess', _9 => _9.zoom])})})]})}exports.a = de; exports.b = A; exports.c = B; exports.d = V; exports.e = K; exports.f = H; exports.g = O; exports.h = W; exports.i = $; exports.j = z; exports.k = U; exports.l = me; exports.m = ue; exports.n = ve; exports.o = Ne; exports.p = nr;
|
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(); } } var _class;"use client";
|
|
2
|
-
var
|
|
2
|
+
var _chunkSH6TREDDcjs = require('./chunk-SH6TREDD.cjs');var _chunkEYXV5OMYcjs = require('./chunk-EYXV5OMY.cjs');var _chunkCHNUE46Kcjs = require('./chunk-CHNUE46K.cjs');var _chunk2VUHLHHXcjs = require('./chunk-2VUHLHHX.cjs');var d=(o=>(o.Paged="paged",o.Infinite="infinite",o))(d||{});var f=(r=>(r.FiltersChanged="FiltersChanged",r.ResultsLoaded="ResultsLoaded",r.PointClicked="PointClicked",r.BoundsChanged="BoundsChanged",r.LayerToggled="LayerToggled",r))(f||{});var u= (_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);var _jsxruntime = require('react/jsx-runtime');function Z({children:e}){let{Toolbar:t}=_chunkEYXV5OMYcjs.q.call(void 0, );return _jsxruntime.jsx.call(void 0, t,{children:e})}var _react = require('react');function tt(){let e=_chunkEYXV5OMYcjs.s.call(void 0, ),t=_chunkEYXV5OMYcjs.t.call(void 0, ),o=_react.useCallback.call(void 0, a=>e.loadPoints(a),[e]),n=_react.useCallback.call(void 0, (a,r)=>e.selectPoint(a,r),[e]);return{bounds:t.bounds,points:t.points,loadPoints:o,selectPoint:n}}function it(e){let t=_chunkEYXV5OMYcjs.s.call(void 0, ),o=_chunkEYXV5OMYcjs.t.call(void 0, ),n=_react.useCallback.call(void 0, ()=>t.toggleLayer(e),[t,e]);return{visible:_nullishCoalesce(o.layers[e], () => (!0)),points:_nullishCoalesce(o.points[e], () => ([])),toggle:n}}exports.BrowserHistoryPort = _chunkCHNUE46Kcjs.a; exports.DatasetRegistry = _chunkEYXV5OMYcjs.c; exports.FilterRegistry = _chunkEYXV5OMYcjs.b; exports.ListingApp = _chunkSH6TREDDcjs.p; exports.ListingComponentsProvider = _chunkEYXV5OMYcjs.p; exports.ListingConfig = _chunkEYXV5OMYcjs.f; exports.ListingEngine = _chunkEYXV5OMYcjs.g; exports.ListingEngineContext = _chunkEYXV5OMYcjs.r; exports.ListingEventType = f; exports.ListingFilters = _chunkEYXV5OMYcjs.v; exports.ListingList = _chunkEYXV5OMYcjs.x; exports.ListingMap = _chunkEYXV5OMYcjs.y; exports.ListingPagination = _chunkEYXV5OMYcjs.z; exports.ListingProvider = _chunkEYXV5OMYcjs.B; exports.ListingResultHeader = _chunkEYXV5OMYcjs.A; exports.ListingStore = _chunkEYXV5OMYcjs.a; exports.ListingToolbar = Z; exports.MemoryHistoryPort = u; exports.PaginationMode = d; exports.TypedEmitter = _chunkEYXV5OMYcjs.d; exports.UrlSyncController = _chunk2VUHLHHXcjs.a; exports.composeListingProviders = _chunkEYXV5OMYcjs.h; exports.listingDefaultConfig = _chunkEYXV5OMYcjs.e; exports.useListing = _chunkEYXV5OMYcjs.s; exports.useListingComponents = _chunkEYXV5OMYcjs.q; exports.useListingEvent = _chunkSH6TREDDcjs.a; exports.useListingFilters = _chunkEYXV5OMYcjs.u; exports.useListingLayer = it; exports.useListingMap = tt; exports.useListingResults = _chunkEYXV5OMYcjs.w; exports.useListingState = _chunkEYXV5OMYcjs.t; exports.withConfig = _chunkEYXV5OMYcjs.i; exports.withDataset = _chunkEYXV5OMYcjs.k; exports.withFilters = _chunkEYXV5OMYcjs.l; exports.withInitialFilters = _chunkEYXV5OMYcjs.n; exports.withMap = _chunkEYXV5OMYcjs.j; exports.withPrimaryDataset = _chunkEYXV5OMYcjs.o; exports.withUrlSync = _chunkEYXV5OMYcjs.m;
|
package/dist/index.d.cts
CHANGED
|
@@ -9,7 +9,7 @@ import { H as HistoryPort, U as UrlSyncController } from './url-sync.controller-
|
|
|
9
9
|
export { a as UrlSyncEngine, b as UrlSyncOptions } from './url-sync.controller-CsU_QxoS.cjs';
|
|
10
10
|
import * as react from 'react';
|
|
11
11
|
import { ReactNode } from 'react';
|
|
12
|
-
export { L as ListingApp, a as ListingAppProps } from './listing-app-
|
|
12
|
+
export { L as ListingApp, a as ListingAppProps } from './listing-app-D2UB9ru3.cjs';
|
|
13
13
|
|
|
14
14
|
declare enum ListingEventType {
|
|
15
15
|
FiltersChanged = "FiltersChanged",
|
package/dist/index.d.ts
CHANGED
|
@@ -9,7 +9,7 @@ import { H as HistoryPort, U as UrlSyncController } from './url-sync.controller-
|
|
|
9
9
|
export { a as UrlSyncEngine, b as UrlSyncOptions } from './url-sync.controller-DX67JivW.js';
|
|
10
10
|
import * as react from 'react';
|
|
11
11
|
import { ReactNode } from 'react';
|
|
12
|
-
export { L as ListingApp, a as ListingAppProps } from './listing-app-
|
|
12
|
+
export { L as ListingApp, a as ListingAppProps } from './listing-app-DDKZ6Inn.js';
|
|
13
13
|
|
|
14
14
|
declare enum ListingEventType {
|
|
15
15
|
FiltersChanged = "FiltersChanged",
|
package/dist/index.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
"use client";
|
|
2
|
-
import{a as O,
|
|
2
|
+
import{a as O,p as m}from"./chunk-6Q4SWHOS.js";import{A as N,B as U,a as y,b as P,c as L,d as h,e as b,f as x,g as C,h as I,i as k,j as q,k as v,l as B,m as S,n as A,o as F,p as T,q as p,r as w,s,t as i,u as H,v as z,w as D,x as G,y as J,z as K}from"./chunk-R3FX2V3N.js";import{a as R}from"./chunk-5FBI2WIM.js";import{a as Q}from"./chunk-35KYEBAC.js";var d=(o=>(o.Paged="paged",o.Infinite="infinite",o))(d||{});var f=(r=>(r.FiltersChanged="FiltersChanged",r.ResultsLoaded="ResultsLoaded",r.PointClicked="PointClicked",r.BoundsChanged="BoundsChanged",r.LayerToggled="LayerToggled",r))(f||{});var u=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()}};import{jsx as c}from"react/jsx-runtime";function Z({children:e}){let{Toolbar:t}=p();return c(t,{children:e})}import{useCallback as l}from"react";function tt(){let e=s(),t=i(),o=l(a=>e.loadPoints(a),[e]),n=l((a,r)=>e.selectPoint(a,r),[e]);return{bounds:t.bounds,points:t.points,loadPoints:o,selectPoint:n}}import{useCallback as g}from"react";function it(e){let t=s(),o=i(),n=g(()=>t.toggleLayer(e),[t,e]);return{visible:o.layers[e]??!0,points:o.points[e]??[],toggle:n}}export{R as BrowserHistoryPort,L as DatasetRegistry,P as FilterRegistry,m as ListingApp,T as ListingComponentsProvider,x as ListingConfig,C as ListingEngine,w as ListingEngineContext,f as ListingEventType,z as ListingFilters,G as ListingList,J as ListingMap,K as ListingPagination,U as ListingProvider,N as ListingResultHeader,y as ListingStore,Z as ListingToolbar,u as MemoryHistoryPort,d as PaginationMode,h as TypedEmitter,Q as UrlSyncController,I as composeListingProviders,b as listingDefaultConfig,s as useListing,p as useListingComponents,O as useListingEvent,H as useListingFilters,it as useListingLayer,tt as useListingMap,D as useListingResults,i as useListingState,k as withConfig,v as withDataset,B as withFilters,A as withInitialFilters,q as withMap,F as withPrimaryDataset,S as withUrlSync};
|
|
@@ -20,7 +20,7 @@ interface IBottomNavProps {
|
|
|
20
20
|
* see `styles.css`): a floating **List | Map** segmented toggle
|
|
21
21
|
* (`.rle-viewtoggle`) that drives which of `StyledListingLayout`'s two
|
|
22
22
|
* full-area panels is visible. The **Filters** button and the optional caller
|
|
23
|
-
* action (e.g. "Save") live in the
|
|
23
|
+
* action (e.g. "Save") live in the mobile header (`MobileHeader`) instead, so
|
|
24
24
|
* the footer pill carries the view toggle alone. No lucide/icon library
|
|
25
25
|
* dependency -- every icon here is a small inline SVG, matching the rest of
|
|
26
26
|
* `/styled`'s zero-extra-dependency policy.
|
|
@@ -29,21 +29,21 @@ declare function BottomNav({ view, onViewChange }: IBottomNavProps): react.JSX.E
|
|
|
29
29
|
|
|
30
30
|
interface IStyledListingLayoutProps {
|
|
31
31
|
/**
|
|
32
|
-
* Optional search box, LIBRARY-wired (unlike `/shadcn`'s
|
|
33
|
-
* `search`): name the `TFilters` field it drives via
|
|
34
|
-
* layout reads the current value from the engine's
|
|
35
|
-
* back with `applyFilters({ [filterKey]: value ||
|
|
36
|
-
*
|
|
37
|
-
*
|
|
38
|
-
* when not passed.
|
|
32
|
+
* Optional header search box, LIBRARY-wired (unlike `/shadcn`'s
|
|
33
|
+
* consumer-managed `search`): name the `TFilters` field it drives via
|
|
34
|
+
* `filterKey`, and the layout reads the current value from the engine's
|
|
35
|
+
* filters and writes edits back with `applyFilters({ [filterKey]: value ||
|
|
36
|
+
* undefined })`. Rendered in BOTH the desktop filter bar and the mobile
|
|
37
|
+
* header. Do NOT also register `filterKey` as a `ListingFilters` control --
|
|
38
|
+
* it would then render twice. Omitted entirely when not passed.
|
|
39
39
|
*/
|
|
40
40
|
search?: {
|
|
41
41
|
filterKey: string;
|
|
42
42
|
placeholder?: string;
|
|
43
43
|
};
|
|
44
|
-
/** Extra content rendered at the end of the filter bar, alongside `ListingResultHeader` (e.g. a sort control). */
|
|
44
|
+
/** Extra content rendered at the end of the desktop filter bar, alongside `ListingResultHeader` (e.g. a sort control). */
|
|
45
45
|
toolbarEnd?: ReactNode;
|
|
46
|
-
/** Optional action button (e.g. "
|
|
46
|
+
/** Optional bottom-nav action button (e.g. "Add"), forwarded verbatim to `<BottomNav action={...} />`. Omit to render just Filters + the List|Map toggle. */
|
|
47
47
|
mobileAction?: IBottomNavAction;
|
|
48
48
|
/**
|
|
49
49
|
* Whether a map is configured. When `false`, the map region is dropped and
|
|
@@ -63,26 +63,40 @@ interface IStyledListingLayoutProps {
|
|
|
63
63
|
/**
|
|
64
64
|
* Full, responsive, Tailwind-free listing experience -- the `/styled`
|
|
65
65
|
* counterpart to `/shadcn`'s `ListingLayout`, built from the same
|
|
66
|
-
* structure-only compound components (`~/react`) plus the injected
|
|
67
|
-
* slot components
|
|
68
|
-
*
|
|
66
|
+
* structure-only compound components (`~/react`) plus the injected
|
|
67
|
+
* `Styled*` slot components, but with a richer mobile experience: a bottom
|
|
68
|
+
* nav (`BottomNav`) and a bottom sheet (`BottomSheet`) for filters, instead
|
|
69
|
+
* of `/shadcn`'s inline mobile toggle bar. Every class used here is one of
|
|
70
|
+
* the `.rle-*` layout classes added to `styles.css` alongside this file --
|
|
71
|
+
* no Tailwind, no inline styles, no other stylesheet required.
|
|
69
72
|
*
|
|
70
73
|
* STRUCTURE (`.rle-app`):
|
|
71
|
-
* - `.rle-filter-bar` (
|
|
72
|
-
*
|
|
73
|
-
*
|
|
74
|
-
*
|
|
75
|
-
*
|
|
76
|
-
*
|
|
77
|
-
*
|
|
78
|
-
*
|
|
79
|
-
*
|
|
80
|
-
*
|
|
81
|
-
*
|
|
82
|
-
* -
|
|
83
|
-
*
|
|
74
|
+
* - `.rle-filter-bar` (desktop only, hidden below 768px by CSS): the
|
|
75
|
+
* optional `Search` slot, `<ListingFilters>` laid out as a wrapping row
|
|
76
|
+
* (`className="rle-filters-row"`, `groupClassName="rle-filter-group"`),
|
|
77
|
+
* and a trailing `.rle-filter-bar__end` cluster with `<ListingResultHeader>`
|
|
78
|
+
* + `toolbarEnd`.
|
|
79
|
+
* - `.rle-body.rle-split`: a CSS grid from 768px up (list column floors at
|
|
80
|
+
* 340px, caps at 42%; map takes the rest); below that, a single full-area
|
|
81
|
+
* panel with exactly one of `.rle-list`/`.rle-map` visible at a time via
|
|
82
|
+
* `data-mobile-view` (see `styles.css`'s mobile media query). Both regions
|
|
83
|
+
* stay mounted at ALL times regardless of viewport/toggle state -- only
|
|
84
|
+
* their visibility flips -- so neither `ListingList` nor `ListingMap`
|
|
85
|
+
* remounts (and re-triggers its own mount effects) on toggle or resize.
|
|
86
|
+
* - `<BottomNav>`: mobile-only (CSS-hidden at 768px+). Wired to the same
|
|
87
|
+
* `mobileView` state as the CSS toggle, `mobileAction`, and opens the
|
|
88
|
+
* filters `<BottomSheet>`.
|
|
89
|
+
* - `<BottomSheet title="Filters">`: the SAME `<ListingFilters>` component,
|
|
90
|
+
* stacked vertically (`className="rle-filter-stack"`) for the sheet's
|
|
91
|
+
* narrower body, plus a footer with "Clear all" (resets every registered
|
|
92
|
+
* filter to `undefined` via `engine.filters.list()`'s keys, routed through
|
|
93
|
+
* `engine.applyFilters` -- the one bulk mutator, same as `ListingFilters`
|
|
94
|
+
* itself uses) and "Show N results" (just closes the sheet -- every filter
|
|
95
|
+
* control already applies live via its own `onChange`, so there is nothing
|
|
96
|
+
* left to commit).
|
|
84
97
|
* - Fetches the first page itself on mount (`engine.applyFilters({})`) by
|
|
85
|
-
* default -- pass `autoFetch={false}`
|
|
98
|
+
* default, exactly like `/shadcn`'s `ListingLayout` -- pass `autoFetch={false}`
|
|
99
|
+
* to opt out and drive the first fetch yourself.
|
|
86
100
|
*/
|
|
87
101
|
declare function StyledListingLayout({ search, toolbarEnd, mobileAction, autoFetch, hasMap, mapCenter, mapZoom, className, }: IStyledListingLayoutProps): react.JSX.Element;
|
|
88
102
|
|
|
@@ -20,7 +20,7 @@ interface IBottomNavProps {
|
|
|
20
20
|
* see `styles.css`): a floating **List | Map** segmented toggle
|
|
21
21
|
* (`.rle-viewtoggle`) that drives which of `StyledListingLayout`'s two
|
|
22
22
|
* full-area panels is visible. The **Filters** button and the optional caller
|
|
23
|
-
* action (e.g. "Save") live in the
|
|
23
|
+
* action (e.g. "Save") live in the mobile header (`MobileHeader`) instead, so
|
|
24
24
|
* the footer pill carries the view toggle alone. No lucide/icon library
|
|
25
25
|
* dependency -- every icon here is a small inline SVG, matching the rest of
|
|
26
26
|
* `/styled`'s zero-extra-dependency policy.
|
|
@@ -29,21 +29,21 @@ declare function BottomNav({ view, onViewChange }: IBottomNavProps): react.JSX.E
|
|
|
29
29
|
|
|
30
30
|
interface IStyledListingLayoutProps {
|
|
31
31
|
/**
|
|
32
|
-
* Optional search box, LIBRARY-wired (unlike `/shadcn`'s
|
|
33
|
-
* `search`): name the `TFilters` field it drives via
|
|
34
|
-
* layout reads the current value from the engine's
|
|
35
|
-
* back with `applyFilters({ [filterKey]: value ||
|
|
36
|
-
*
|
|
37
|
-
*
|
|
38
|
-
* when not passed.
|
|
32
|
+
* Optional header search box, LIBRARY-wired (unlike `/shadcn`'s
|
|
33
|
+
* consumer-managed `search`): name the `TFilters` field it drives via
|
|
34
|
+
* `filterKey`, and the layout reads the current value from the engine's
|
|
35
|
+
* filters and writes edits back with `applyFilters({ [filterKey]: value ||
|
|
36
|
+
* undefined })`. Rendered in BOTH the desktop filter bar and the mobile
|
|
37
|
+
* header. Do NOT also register `filterKey` as a `ListingFilters` control --
|
|
38
|
+
* it would then render twice. Omitted entirely when not passed.
|
|
39
39
|
*/
|
|
40
40
|
search?: {
|
|
41
41
|
filterKey: string;
|
|
42
42
|
placeholder?: string;
|
|
43
43
|
};
|
|
44
|
-
/** Extra content rendered at the end of the filter bar, alongside `ListingResultHeader` (e.g. a sort control). */
|
|
44
|
+
/** Extra content rendered at the end of the desktop filter bar, alongside `ListingResultHeader` (e.g. a sort control). */
|
|
45
45
|
toolbarEnd?: ReactNode;
|
|
46
|
-
/** Optional action button (e.g. "
|
|
46
|
+
/** Optional bottom-nav action button (e.g. "Add"), forwarded verbatim to `<BottomNav action={...} />`. Omit to render just Filters + the List|Map toggle. */
|
|
47
47
|
mobileAction?: IBottomNavAction;
|
|
48
48
|
/**
|
|
49
49
|
* Whether a map is configured. When `false`, the map region is dropped and
|
|
@@ -63,26 +63,40 @@ interface IStyledListingLayoutProps {
|
|
|
63
63
|
/**
|
|
64
64
|
* Full, responsive, Tailwind-free listing experience -- the `/styled`
|
|
65
65
|
* counterpart to `/shadcn`'s `ListingLayout`, built from the same
|
|
66
|
-
* structure-only compound components (`~/react`) plus the injected
|
|
67
|
-
* slot components
|
|
68
|
-
*
|
|
66
|
+
* structure-only compound components (`~/react`) plus the injected
|
|
67
|
+
* `Styled*` slot components, but with a richer mobile experience: a bottom
|
|
68
|
+
* nav (`BottomNav`) and a bottom sheet (`BottomSheet`) for filters, instead
|
|
69
|
+
* of `/shadcn`'s inline mobile toggle bar. Every class used here is one of
|
|
70
|
+
* the `.rle-*` layout classes added to `styles.css` alongside this file --
|
|
71
|
+
* no Tailwind, no inline styles, no other stylesheet required.
|
|
69
72
|
*
|
|
70
73
|
* STRUCTURE (`.rle-app`):
|
|
71
|
-
* - `.rle-filter-bar` (
|
|
72
|
-
*
|
|
73
|
-
*
|
|
74
|
-
*
|
|
75
|
-
*
|
|
76
|
-
*
|
|
77
|
-
*
|
|
78
|
-
*
|
|
79
|
-
*
|
|
80
|
-
*
|
|
81
|
-
*
|
|
82
|
-
* -
|
|
83
|
-
*
|
|
74
|
+
* - `.rle-filter-bar` (desktop only, hidden below 768px by CSS): the
|
|
75
|
+
* optional `Search` slot, `<ListingFilters>` laid out as a wrapping row
|
|
76
|
+
* (`className="rle-filters-row"`, `groupClassName="rle-filter-group"`),
|
|
77
|
+
* and a trailing `.rle-filter-bar__end` cluster with `<ListingResultHeader>`
|
|
78
|
+
* + `toolbarEnd`.
|
|
79
|
+
* - `.rle-body.rle-split`: a CSS grid from 768px up (list column floors at
|
|
80
|
+
* 340px, caps at 42%; map takes the rest); below that, a single full-area
|
|
81
|
+
* panel with exactly one of `.rle-list`/`.rle-map` visible at a time via
|
|
82
|
+
* `data-mobile-view` (see `styles.css`'s mobile media query). Both regions
|
|
83
|
+
* stay mounted at ALL times regardless of viewport/toggle state -- only
|
|
84
|
+
* their visibility flips -- so neither `ListingList` nor `ListingMap`
|
|
85
|
+
* remounts (and re-triggers its own mount effects) on toggle or resize.
|
|
86
|
+
* - `<BottomNav>`: mobile-only (CSS-hidden at 768px+). Wired to the same
|
|
87
|
+
* `mobileView` state as the CSS toggle, `mobileAction`, and opens the
|
|
88
|
+
* filters `<BottomSheet>`.
|
|
89
|
+
* - `<BottomSheet title="Filters">`: the SAME `<ListingFilters>` component,
|
|
90
|
+
* stacked vertically (`className="rle-filter-stack"`) for the sheet's
|
|
91
|
+
* narrower body, plus a footer with "Clear all" (resets every registered
|
|
92
|
+
* filter to `undefined` via `engine.filters.list()`'s keys, routed through
|
|
93
|
+
* `engine.applyFilters` -- the one bulk mutator, same as `ListingFilters`
|
|
94
|
+
* itself uses) and "Show N results" (just closes the sheet -- every filter
|
|
95
|
+
* control already applies live via its own `onChange`, so there is nothing
|
|
96
|
+
* left to commit).
|
|
84
97
|
* - Fetches the first page itself on mount (`engine.applyFilters({})`) by
|
|
85
|
-
* default -- pass `autoFetch={false}`
|
|
98
|
+
* default, exactly like `/shadcn`'s `ListingLayout` -- pass `autoFetch={false}`
|
|
99
|
+
* to opt out and drive the first fetch yourself.
|
|
86
100
|
*/
|
|
87
101
|
declare function StyledListingLayout({ search, toolbarEnd, mobileAction, autoFetch, hasMap, mapCenter, mapZoom, className, }: IStyledListingLayoutProps): react.JSX.Element;
|
|
88
102
|
|
package/dist/styled/index.cjs
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports, "__esModule", {value: true});
|
|
2
|
-
var
|
|
1
|
+
"use strict";Object.defineProperty(exports, "__esModule", {value: true});"use client";
|
|
2
|
+
var _chunkSH6TREDDcjs = require('../chunk-SH6TREDD.cjs');var _chunkEYXV5OMYcjs = require('../chunk-EYXV5OMY.cjs');var _jsxruntime = require('react/jsx-runtime');function L({children:o}){return _jsxruntime.jsx.call(void 0, _chunkEYXV5OMYcjs.p,{..._chunkSH6TREDDcjs.l,children:o})}exports.BottomNav = _chunkSH6TREDDcjs.m; exports.BottomSheet = _chunkSH6TREDDcjs.n; exports.ListingApp = _chunkSH6TREDDcjs.p; exports.StyledCard = _chunkSH6TREDDcjs.b; exports.StyledComponentsProviderWithDefaults = L; exports.StyledEmpty = _chunkSH6TREDDcjs.c; exports.StyledFilterPanel = _chunkSH6TREDDcjs.d; exports.StyledListingLayout = _chunkSH6TREDDcjs.o; exports.StyledLoading = _chunkSH6TREDDcjs.e; exports.StyledMarker = _chunkSH6TREDDcjs.f; exports.StyledPopup = _chunkSH6TREDDcjs.g; exports.StyledResultHeader = _chunkSH6TREDDcjs.h; exports.StyledSearch = _chunkSH6TREDDcjs.i; exports.StyledSidebar = _chunkSH6TREDDcjs.j; exports.StyledToolbar = _chunkSH6TREDDcjs.k; exports.styledDefaultComponents = _chunkSH6TREDDcjs.l;
|
package/dist/styled/index.d.cts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import * as react from 'react';
|
|
2
2
|
import { ReactNode } from 'react';
|
|
3
3
|
import { c as IListingCardProps, e as IListingEmptyProps, f as IListingFilterPanelProps, g as IListingLoadingProps, h as IListingMarkerProps, i as IListingPopupProps, j as IListingResultHeaderProps, k as IListingSearchProps, l as IListingSidebarProps, I as IListingToolbarProps, d as IListingComponents } from '../components-provider-CF0Mo0B8.cjs';
|
|
4
|
-
export { B as BottomNav, b as BottomNavView, I as IBottomNavAction, c as IBottomNavProps, d as IStyledListingLayoutProps, L as ListingApp, e as ListingAppMapProp, a as ListingAppProps, S as StyledListingLayout } from '../listing-app-
|
|
4
|
+
export { B as BottomNav, b as BottomNavView, I as IBottomNavAction, c as IBottomNavProps, d as IStyledListingLayoutProps, L as ListingApp, e as ListingAppMapProp, a as ListingAppProps, S as StyledListingLayout } from '../listing-app-D2UB9ru3.cjs';
|
|
5
5
|
import '../entity-adapter.interface-BDgbSxhq.cjs';
|
|
6
6
|
import '../map-provider.interface-BMnwW3ob.cjs';
|
|
7
7
|
import '../listing-config-options.interface-ZJYY_ZvR.cjs';
|
package/dist/styled/index.d.ts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import * as react from 'react';
|
|
2
2
|
import { ReactNode } from 'react';
|
|
3
3
|
import { c as IListingCardProps, e as IListingEmptyProps, f as IListingFilterPanelProps, g as IListingLoadingProps, h as IListingMarkerProps, i as IListingPopupProps, j as IListingResultHeaderProps, k as IListingSearchProps, l as IListingSidebarProps, I as IListingToolbarProps, d as IListingComponents } from '../components-provider-CjMxkxrP.js';
|
|
4
|
-
export { B as BottomNav, b as BottomNavView, I as IBottomNavAction, c as IBottomNavProps, d as IStyledListingLayoutProps, L as ListingApp, e as ListingAppMapProp, a as ListingAppProps, S as StyledListingLayout } from '../listing-app-
|
|
4
|
+
export { B as BottomNav, b as BottomNavView, I as IBottomNavAction, c as IBottomNavProps, d as IStyledListingLayoutProps, L as ListingApp, e as ListingAppMapProp, a as ListingAppProps, S as StyledListingLayout } from '../listing-app-DDKZ6Inn.js';
|
|
5
5
|
import '../entity-adapter.interface-BDgbSxhq.js';
|
|
6
6
|
import '../map-provider.interface-BxexMT3X.js';
|
|
7
7
|
import '../listing-config-options.interface-ZJYY_ZvR.js';
|
package/dist/styled/index.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
"use client";
|
|
2
|
-
import{b as
|
|
2
|
+
import{b as r,c as p,d as i,e as d,f as y,g as l,h as n,i as m,j as s,k as a,l as t,m as S,n as f,o as P,p as u}from"../chunk-6Q4SWHOS.js";import{p as e}from"../chunk-R3FX2V3N.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/dist/styles.css
CHANGED
|
@@ -650,6 +650,7 @@
|
|
|
650
650
|
top: 0;
|
|
651
651
|
z-index: 10;
|
|
652
652
|
display: flex;
|
|
653
|
+
flex-wrap: wrap;
|
|
653
654
|
align-items: center;
|
|
654
655
|
gap: var(--rle-space);
|
|
655
656
|
padding: var(--rle-space);
|
|
@@ -657,81 +658,86 @@
|
|
|
657
658
|
border-bottom: 1px solid var(--rle-border);
|
|
658
659
|
}
|
|
659
660
|
|
|
660
|
-
/*
|
|
661
|
-
a
|
|
662
|
-
|
|
663
|
-
|
|
661
|
+
/* Bounded so the search sits inline with the filters on one row instead of
|
|
662
|
+
taking a full row of its own (the `.rle-input` inside is width:100%). */
|
|
663
|
+
.rle-filter-bar__search {
|
|
664
|
+
flex: 1 1 200px;
|
|
665
|
+
min-width: 180px;
|
|
666
|
+
max-width: 340px;
|
|
667
|
+
}
|
|
668
|
+
|
|
669
|
+
.rle-filter-bar__end {
|
|
664
670
|
display: flex;
|
|
665
|
-
flex: 1 1 auto;
|
|
666
671
|
align-items: center;
|
|
667
672
|
gap: var(--rle-space);
|
|
668
|
-
|
|
669
|
-
}
|
|
670
|
-
|
|
671
|
-
@media (min-width: 768px) {
|
|
672
|
-
.rle-filter-bar__controls {
|
|
673
|
-
flex-wrap: wrap;
|
|
674
|
-
}
|
|
673
|
+
margin-left: auto;
|
|
675
674
|
}
|
|
676
675
|
|
|
677
676
|
@media (max-width: 767px) {
|
|
678
|
-
/* The whole bar is one horizontally-scrolling row (dashboard-style): search
|
|
679
|
-
+ filter pills + action all scroll inline; the result count is dropped to
|
|
680
|
-
keep room for the filters. A soft mask fades the scroll edges. */
|
|
681
677
|
.rle-filter-bar {
|
|
682
|
-
flex-wrap: nowrap;
|
|
683
|
-
overflow-x: auto;
|
|
684
|
-
scrollbar-width: none;
|
|
685
|
-
-webkit-overflow-scrolling: touch;
|
|
686
|
-
-webkit-mask-image: linear-gradient(to right, transparent 0, #000 14px, #000 calc(100% - 14px), transparent 100%);
|
|
687
|
-
mask-image: linear-gradient(to right, transparent 0, #000 14px, #000 calc(100% - 14px), transparent 100%);
|
|
688
|
-
}
|
|
689
|
-
|
|
690
|
-
.rle-filter-bar::-webkit-scrollbar {
|
|
691
678
|
display: none;
|
|
692
679
|
}
|
|
680
|
+
}
|
|
693
681
|
|
|
694
|
-
|
|
695
|
-
|
|
696
|
-
|
|
682
|
+
/* `<ListingFilters>`'s own `className`/`groupClassName` hooks (see that
|
|
683
|
+
component's doc comment in `~/react`) -- a horizontal, wrapping row for the
|
|
684
|
+
desktop filter bar, a vertical stack for the mobile sheet body, and a
|
|
685
|
+
shrinkable wrapper for each individual filter group in either layout. */
|
|
686
|
+
.rle-filters-row {
|
|
687
|
+
display: flex;
|
|
688
|
+
flex-wrap: wrap;
|
|
689
|
+
align-items: center;
|
|
690
|
+
gap: var(--rle-space);
|
|
691
|
+
}
|
|
697
692
|
|
|
698
|
-
|
|
699
|
-
|
|
700
|
-
|
|
693
|
+
.rle-filter-stack {
|
|
694
|
+
display: flex;
|
|
695
|
+
flex-direction: column;
|
|
696
|
+
gap: var(--rle-space);
|
|
701
697
|
}
|
|
702
698
|
|
|
703
|
-
|
|
704
|
-
|
|
705
|
-
|
|
706
|
-
|
|
707
|
-
|
|
708
|
-
|
|
699
|
+
.rle-filter-group {
|
|
700
|
+
min-width: 0;
|
|
701
|
+
}
|
|
702
|
+
|
|
703
|
+
/* -----------------------------------------------------------------------
|
|
704
|
+
* Mobile header -- shown below 768px (hidden at 768px+), the compact
|
|
705
|
+
* counterpart to the desktop `.rle-filter-bar`: the search input (grows to
|
|
706
|
+
* fill), a Filters button that opens the bottom sheet, and an optional
|
|
707
|
+
* trailing action (e.g. Save). The List|Map toggle lives in the floating
|
|
708
|
+
* footer (`.rle-bottom-nav`) instead.
|
|
709
|
+
* --------------------------------------------------------------------- */
|
|
710
|
+
|
|
711
|
+
.rle-mobile-header {
|
|
712
|
+
display: none;
|
|
709
713
|
}
|
|
710
714
|
|
|
711
715
|
@media (max-width: 767px) {
|
|
712
|
-
.rle-
|
|
713
|
-
|
|
714
|
-
|
|
715
|
-
|
|
716
|
+
.rle-mobile-header {
|
|
717
|
+
position: sticky;
|
|
718
|
+
top: 0;
|
|
719
|
+
z-index: 10;
|
|
720
|
+
display: flex;
|
|
721
|
+
align-items: center;
|
|
722
|
+
gap: 8px;
|
|
723
|
+
padding: var(--rle-space);
|
|
724
|
+
background: var(--rle-surface);
|
|
725
|
+
border-bottom: 1px solid var(--rle-border);
|
|
716
726
|
}
|
|
717
727
|
}
|
|
718
728
|
|
|
719
|
-
|
|
720
|
-
|
|
721
|
-
|
|
722
|
-
display: flex;
|
|
723
|
-
flex-shrink: 0;
|
|
724
|
-
align-items: center;
|
|
725
|
-
gap: var(--rle-space);
|
|
729
|
+
.rle-mobile-header__search {
|
|
730
|
+
flex: 1;
|
|
731
|
+
min-width: 0;
|
|
726
732
|
}
|
|
727
733
|
|
|
728
|
-
.rle-
|
|
734
|
+
.rle-mobile-header__btn {
|
|
729
735
|
display: inline-flex;
|
|
730
736
|
flex-shrink: 0;
|
|
731
737
|
align-items: center;
|
|
732
738
|
justify-content: center;
|
|
733
739
|
gap: 6px;
|
|
734
|
-
height:
|
|
740
|
+
height: 40px;
|
|
735
741
|
padding: 0 12px;
|
|
736
742
|
background: var(--rle-surface);
|
|
737
743
|
border: 1px solid var(--rle-border);
|
|
@@ -746,51 +752,41 @@
|
|
|
746
752
|
border-color 150ms ease;
|
|
747
753
|
}
|
|
748
754
|
|
|
749
|
-
.rle-
|
|
750
|
-
width:
|
|
751
|
-
height:
|
|
755
|
+
.rle-mobile-header__btn svg {
|
|
756
|
+
width: 18px;
|
|
757
|
+
height: 18px;
|
|
752
758
|
}
|
|
753
759
|
|
|
754
|
-
.rle-
|
|
760
|
+
.rle-mobile-header__btn:hover {
|
|
755
761
|
background: var(--rle-muted-bg);
|
|
756
762
|
}
|
|
757
763
|
|
|
758
|
-
.rle-
|
|
764
|
+
.rle-mobile-header__btn:focus-visible {
|
|
759
765
|
outline: none;
|
|
760
766
|
box-shadow: 0 0 0 3px var(--rle-ring);
|
|
761
767
|
}
|
|
762
768
|
|
|
763
|
-
|
|
764
|
-
|
|
765
|
-
|
|
766
|
-
|
|
767
|
-
.rle-filters-row {
|
|
768
|
-
display: flex;
|
|
769
|
-
flex-wrap: wrap;
|
|
770
|
-
align-items: center;
|
|
771
|
-
gap: var(--rle-space);
|
|
772
|
-
}
|
|
773
|
-
|
|
774
|
-
.rle-filter-stack {
|
|
775
|
-
display: flex;
|
|
776
|
-
flex-direction: column;
|
|
777
|
-
gap: var(--rle-space);
|
|
778
|
-
}
|
|
779
|
-
|
|
780
|
-
.rle-filter-group {
|
|
781
|
-
min-width: 0;
|
|
769
|
+
.rle-mobile-header__btn--icon {
|
|
770
|
+
width: 40px;
|
|
771
|
+
padding: 0;
|
|
772
|
+
color: var(--rle-muted);
|
|
782
773
|
}
|
|
783
774
|
|
|
784
|
-
/*
|
|
785
|
-
|
|
786
|
-
|
|
787
|
-
|
|
788
|
-
|
|
789
|
-
|
|
790
|
-
|
|
791
|
-
|
|
792
|
-
|
|
793
|
-
|
|
775
|
+
/* Applied-filter count badge on the Filters button. */
|
|
776
|
+
.rle-mobile-header__count {
|
|
777
|
+
display: inline-flex;
|
|
778
|
+
align-items: center;
|
|
779
|
+
justify-content: center;
|
|
780
|
+
min-width: 18px;
|
|
781
|
+
height: 18px;
|
|
782
|
+
padding: 0 5px;
|
|
783
|
+
background: var(--rle-primary);
|
|
784
|
+
color: var(--rle-primary-contrast);
|
|
785
|
+
border-radius: var(--rle-radius-pill);
|
|
786
|
+
font-size: 11px;
|
|
787
|
+
font-weight: 600;
|
|
788
|
+
font-variant-numeric: tabular-nums;
|
|
789
|
+
line-height: 1;
|
|
794
790
|
}
|
|
795
791
|
|
|
796
792
|
/* -----------------------------------------------------------------------
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "react-listing-engine",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.6.1",
|
|
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 shadcn-compatible styled adapter.",
|
|
6
6
|
"funding": [
|
package/dist/chunk-2HQ3HB7P.js
DELETED
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
"use client";
|
|
2
|
-
import{A as X,B as Y,h as K,i as D,j as W,k as H,l as $,n as O,p as z,q as U,s as N,u as Z,v as q,x as G,y as J,z as Q}from"./chunk-R3FX2V3N.js";import{useEffect as pe,useRef as de}from"react";function j(e,r){let t=N(),i=de(r);i.current=r,pe(()=>t.on(e,o=>i.current(o)),[t,e])}function g(e){return typeof e!="number"?e:new Intl.NumberFormat("en-US",{style:"currency",currency:"USD",maximumFractionDigits:0}).format(e)}import{Fragment as me,jsx as l,jsxs as ee}from"react/jsx-runtime";function ce(e){return e?"rle-card rle-card--selected":"rle-card"}function C({item:e,selected:r,onSelect:t}){let i=e??{},o=ce(r),a=ee(me,{children:[i.imageUrl?l("img",{src:i.imageUrl,alt:i.title??"",className:"rle-card-media"}):l("div",{className:"rle-card-media rle-card-media--placeholder","aria-hidden":"true"}),ee("div",{className:"rle-card-body",children:[i.title&&l("span",{className:"rle-card-title",children:i.title}),i.subtitle&&l("span",{className:"rle-card-address",children:i.subtitle}),i.badge&&l("div",{className:"rle-card-info",children:l("span",{className:"rle-card-info-item",children:i.badge})}),i.price!=null&&l("span",{className:"rle-card-price",children:g(i.price)})]})]});return t?l("button",{type:"button",onClick:t,"aria-pressed":r??!1,className:o,children:a}):l("article",{className:o,children:a})}import{jsx as P,jsxs as te}from"react/jsx-runtime";function I(e){return te("div",{role:"status",className:"rle-empty",children:[te("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:1.5,strokeLinecap:"round",strokeLinejoin:"round",className:"rle-empty-icon","aria-hidden":"true",children:[P("circle",{cx:"11",cy:"11",r:"7"}),P("path",{d:"m21 21-4.3-4.3"})]}),P("p",{className:"rle-empty-title",children:"No results"}),P("p",{className:"rle-empty-hint",children:"Try adjusting your filters or search terms."})]})}import{jsx as ue}from"react/jsx-runtime";function k({children:e}){return ue("div",{className:"rle-filter-panel",children:e})}import{jsx as S,jsxs as ge}from"react/jsx-runtime";function F(e){return S("div",{className:"rle-loading",role:"status","aria-busy":"true","aria-label":"Loading results",children:Array.from({length:3}).map((r,t)=>ge("div",{className:"rle-loading-item",children:[S("div",{className:"rle-skeleton",style:{aspectRatio:"4 / 3",width:"100%"}}),S("div",{className:"rle-skeleton",style:{height:16,width:"65%"}}),S("div",{className:"rle-skeleton",style:{height:12,width:"35%"}})]},t))})}import{jsx as ye}from"react/jsx-runtime";function M({point:e}){let r=e.entity??{};return ye("span",{className:"rle-pin",children:r.price!=null?g(r.price):""})}import{jsx as y,jsxs as T}from"react/jsx-runtime";function E({entity:e,onClose:r}){let t=e??{};return T("div",{className:"rle-popup",role:"group","aria-label":"Location details",children:[y("button",{type:"button",onClick:r,"aria-label":"Close",className:"rle-popup-close",children:T("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:2,strokeLinecap:"round",strokeLinejoin:"round",width:"16",height:"16","aria-hidden":"true",children:[y("path",{d:"M18 6 6 18"}),y("path",{d:"m6 6 12 12"})]})}),T("div",{children:[t.title&&y("div",{className:"rle-card-title",children:t.title}),t.subtitle&&y("div",{className:"rle-card-address",children:t.subtitle}),t.price!=null&&y("div",{className:"rle-card-price",children:g(t.price)})]})]})}import{jsx as fe}from"react/jsx-runtime";function R({count:e,total:r}){let t=r!=null&&r!==e?`${e} of ${r} results`:`${e} results`;return fe("div",{className:"rle-result-header",children:t})}import{jsx as ve}from"react/jsx-runtime";function _({value:e,onChange:r,placeholder:t}){return ve("input",{type:"search",value:e,placeholder:t,onChange:i=>r(i.target.value),"aria-label":t??"Search",className:"rle-input"})}import{jsx as Le}from"react/jsx-runtime";function B({children:e}){return Le("aside",{className:"rle-sidebar",children:e})}import{jsx as he}from"react/jsx-runtime";function A({children:e}){return he("div",{className:"rle-toolbar",children:e})}var re={Card:C,Marker:M,Popup:E,Sidebar:B,FilterPanel:k,Search:_,Empty:I,Loading:F,ResultHeader:R,Toolbar:A};import{jsx as n,jsxs as v}from"react/jsx-runtime";function ie({view:e,onViewChange:r}){return n("nav",{className:"rle-bottom-nav","aria-label":"Listing navigation",children:v("div",{className:"rle-viewtoggle",role:"group","aria-label":"View",children:[v("button",{type:"button",className:`rle-viewtoggle__btn${e==="list"?" rle-viewtoggle__btn--active":""}`,"aria-pressed":e==="list",onClick:()=>r("list"),children:[n(be,{}),"List"]}),v("button",{type:"button",className:`rle-viewtoggle__btn${e==="map"?" rle-viewtoggle__btn--active":""}`,"aria-pressed":e==="map",onClick:()=>r("map"),children:[n(Ne,{}),"Map"]})]})})}function be(){return v("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:2,strokeLinecap:"round",strokeLinejoin:"round",width:"16",height:"16","aria-hidden":"true",children:[n("line",{x1:"8",y1:"6",x2:"20",y2:"6"}),n("line",{x1:"8",y1:"12",x2:"20",y2:"12"}),n("line",{x1:"8",y1:"18",x2:"20",y2:"18"}),n("line",{x1:"4",y1:"6",x2:"4.01",y2:"6"}),n("line",{x1:"4",y1:"12",x2:"4.01",y2:"12"}),n("line",{x1:"4",y1:"18",x2:"4.01",y2:"18"})]})}function Ne(){return v("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:2,strokeLinecap:"round",strokeLinejoin:"round",width:"16",height:"16","aria-hidden":"true",children:[n("polygon",{points:"1 6 8 3 16 6 23 3 23 18 16 21 8 18 1 21 1 6"}),n("line",{x1:"8",y1:"3",x2:"8",y2:"18"}),n("line",{x1:"16",y1:"6",x2:"16",y2:"21"})]})}import{useEffect as Pe,useState as Se}from"react";import{jsx as s,jsxs as d}from"react/jsx-runtime";var we=s("div",{className:"rle-empty",children:"Map unavailable"});function oe({search:e,toolbarEnd:r,mobileAction:t,autoFetch:i=!0,hasMap:o=!0,mapCenter:a,mapZoom:p,className:c}){let f=N(),{Search:w}=U(),{filters:L}=Z(),[h,x]=Se("list"),m=e?{value:String(L[e.filterKey]??""),onChange:b=>{f.applyFilters({[e.filterKey]:b||void 0})},placeholder:e.placeholder}:void 0;return Pe(()=>{i!==!1&&f.applyFilters({})},[f,i]),d("div",{className:c?`rle-app ${c}`:"rle-app",children:[d("div",{className:"rle-filter-bar",children:[d("div",{className:"rle-filter-bar__controls",children:[m&&s("div",{className:"rle-filter-bar__search",children:s(w,{value:m.value,onChange:m.onChange,placeholder:m.placeholder})}),s(q,{className:"rle-filters-row",groupClassName:"rle-filter-group",hideLabels:!0})]}),d("div",{className:"rle-filter-bar__end",children:[s("span",{className:"rle-filter-bar__count",children:s(X,{})}),t&&d("button",{type:"button",className:"rle-filter-bar__action",onClick:t.onClick,children:[t.icon,s("span",{children:t.label})]}),r]})]}),d("div",{className:`rle-body ${o?"rle-split":"rle-body--list-only"}`,"data-mobile-view":h,children:[d("div",{className:"rle-list",children:[s(G,{className:"rle-list-grid"}),s(Q,{})]}),o&&s("div",{className:"rle-map",children:s(J,{center:a,zoom:p,fallback:we})})]}),o&&s(ie,{view:h,onViewChange:x})]})}import{useEffect as xe,useRef as Ce,useState as Ie}from"react";import{jsx as V,jsxs as Me}from"react/jsx-runtime";function ne(e){return"provider"in e}function ke(e){let r=e!=null&&!ne(e),t=r?e.apiKey:void 0,i=r?e.mapId:void 0,[o,a]=Ie(()=>!e||ne(e)?{ready:!0,provider:e?.provider}:{ready:!1});return xe(()=>{if(!t)return;let p=!1;return import("./maps/google/index.js").then(({googleProvider:c})=>{p||a({ready:!0,provider:c({apiKey:t,mapId:i})})}),()=>{p=!0}},[t,i]),o}function Fe({onFiltersChange:e}){let r=Ce(e);return r.current=e,j("FiltersChanged",t=>{t.type==="FiltersChanged"&&r.current(t.filters)}),null}function Ft(e){let{datasets:r,filters:t,map:i,components:o,initialFilters:a,onFiltersChange:p,mobileAction:c,search:f,toolbarEnd:w,config:L,autoFetch:h,className:x}=e,{ready:m,provider:b}=ke(i);if(!m)return null;let u=[];for(let le of r)u.push(H(le));t&&u.push($(t)),b&&u.push(W(b)),a&&u.push(O(a)),L&&u.push(D(L));let se=K(...u),ae={...re,...o};return Me(Y,{...se,children:[p&&V(Fe,{onFiltersChange:p}),V(z,{...ae,children:V(oe,{className:x,search:f,toolbarEnd:w,mobileAction:c,autoFetch:h,hasMap:i!=null,mapCenter:i?.center,mapZoom:i?.zoom})})]})}export{j as a,C as b,I as c,k as d,F as e,M as f,E as g,R as h,_ as i,B as j,A as k,re as l,ie as m,oe as n,Ft as o};
|
package/dist/chunk-5NZBR3MI.cjs
DELETED
|
@@ -1,2 +0,0 @@
|
|
|
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 _chunkEYXV5OMYcjs = require('./chunk-EYXV5OMY.cjs');var _react = require('react');function j(e,r){let t=_chunkEYXV5OMYcjs.s.call(void 0, ),i=_react.useRef.call(void 0, r);i.current=r,_react.useEffect.call(void 0, ()=>t.on(e,o=>i.current(o)),[t,e])}function g(e){return typeof e!="number"?e:new Intl.NumberFormat("en-US",{style:"currency",currency:"USD",maximumFractionDigits:0}).format(e)}var _jsxruntime = require('react/jsx-runtime');function ce(e){return e?"rle-card rle-card--selected":"rle-card"}function C({item:e,selected:r,onSelect:t}){let i=_nullishCoalesce(e, () => ({})),o=ce(r),a=_jsxruntime.jsxs.call(void 0, _jsxruntime.Fragment,{children:[i.imageUrl?_jsxruntime.jsx.call(void 0, "img",{src:i.imageUrl,alt:_nullishCoalesce(i.title, () => ("")),className:"rle-card-media"}):_jsxruntime.jsx.call(void 0, "div",{className:"rle-card-media rle-card-media--placeholder","aria-hidden":"true"}),_jsxruntime.jsxs.call(void 0, "div",{className:"rle-card-body",children:[i.title&&_jsxruntime.jsx.call(void 0, "span",{className:"rle-card-title",children:i.title}),i.subtitle&&_jsxruntime.jsx.call(void 0, "span",{className:"rle-card-address",children:i.subtitle}),i.badge&&_jsxruntime.jsx.call(void 0, "div",{className:"rle-card-info",children:_jsxruntime.jsx.call(void 0, "span",{className:"rle-card-info-item",children:i.badge})}),i.price!=null&&_jsxruntime.jsx.call(void 0, "span",{className:"rle-card-price",children:g(i.price)})]})]});return t?_jsxruntime.jsx.call(void 0, "button",{type:"button",onClick:t,"aria-pressed":_nullishCoalesce(r, () => (!1)),className:o,children:a}):_jsxruntime.jsx.call(void 0, "article",{className:o,children:a})}function I(e){return _jsxruntime.jsxs.call(void 0, "div",{role:"status",className:"rle-empty",children:[_jsxruntime.jsxs.call(void 0, "svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:1.5,strokeLinecap:"round",strokeLinejoin:"round",className:"rle-empty-icon","aria-hidden":"true",children:[_jsxruntime.jsx.call(void 0, "circle",{cx:"11",cy:"11",r:"7"}),_jsxruntime.jsx.call(void 0, "path",{d:"m21 21-4.3-4.3"})]}),_jsxruntime.jsx.call(void 0, "p",{className:"rle-empty-title",children:"No results"}),_jsxruntime.jsx.call(void 0, "p",{className:"rle-empty-hint",children:"Try adjusting your filters or search terms."})]})}function k({children:e}){return _jsxruntime.jsx.call(void 0, "div",{className:"rle-filter-panel",children:e})}function F(e){return _jsxruntime.jsx.call(void 0, "div",{className:"rle-loading",role:"status","aria-busy":"true","aria-label":"Loading results",children:Array.from({length:3}).map((r,t)=>_jsxruntime.jsxs.call(void 0, "div",{className:"rle-loading-item",children:[_jsxruntime.jsx.call(void 0, "div",{className:"rle-skeleton",style:{aspectRatio:"4 / 3",width:"100%"}}),_jsxruntime.jsx.call(void 0, "div",{className:"rle-skeleton",style:{height:16,width:"65%"}}),_jsxruntime.jsx.call(void 0, "div",{className:"rle-skeleton",style:{height:12,width:"35%"}})]},t))})}function M({point:e}){let r=_nullishCoalesce(e.entity, () => ({}));return _jsxruntime.jsx.call(void 0, "span",{className:"rle-pin",children:r.price!=null?g(r.price):""})}function E({entity:e,onClose:r}){let t=_nullishCoalesce(e, () => ({}));return _jsxruntime.jsxs.call(void 0, "div",{className:"rle-popup",role:"group","aria-label":"Location details",children:[_jsxruntime.jsx.call(void 0, "button",{type:"button",onClick:r,"aria-label":"Close",className:"rle-popup-close",children:_jsxruntime.jsxs.call(void 0, "svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:2,strokeLinecap:"round",strokeLinejoin:"round",width:"16",height:"16","aria-hidden":"true",children:[_jsxruntime.jsx.call(void 0, "path",{d:"M18 6 6 18"}),_jsxruntime.jsx.call(void 0, "path",{d:"m6 6 12 12"})]})}),_jsxruntime.jsxs.call(void 0, "div",{children:[t.title&&_jsxruntime.jsx.call(void 0, "div",{className:"rle-card-title",children:t.title}),t.subtitle&&_jsxruntime.jsx.call(void 0, "div",{className:"rle-card-address",children:t.subtitle}),t.price!=null&&_jsxruntime.jsx.call(void 0, "div",{className:"rle-card-price",children:g(t.price)})]})]})}function R({count:e,total:r}){let t=r!=null&&r!==e?`${e} of ${r} results`:`${e} results`;return _jsxruntime.jsx.call(void 0, "div",{className:"rle-result-header",children:t})}function _({value:e,onChange:r,placeholder:t}){return _jsxruntime.jsx.call(void 0, "input",{type:"search",value:e,placeholder:t,onChange:i=>r(i.target.value),"aria-label":_nullishCoalesce(t, () => ("Search")),className:"rle-input"})}function B({children:e}){return _jsxruntime.jsx.call(void 0, "aside",{className:"rle-sidebar",children:e})}function A({children:e}){return _jsxruntime.jsx.call(void 0, "div",{className:"rle-toolbar",children:e})}var re={Card:C,Marker:M,Popup:E,Sidebar:B,FilterPanel:k,Search:_,Empty:I,Loading:F,ResultHeader:R,Toolbar:A};function ie({view:e,onViewChange:r}){return _jsxruntime.jsx.call(void 0, "nav",{className:"rle-bottom-nav","aria-label":"Listing navigation",children:_jsxruntime.jsxs.call(void 0, "div",{className:"rle-viewtoggle",role:"group","aria-label":"View",children:[_jsxruntime.jsxs.call(void 0, "button",{type:"button",className:`rle-viewtoggle__btn${e==="list"?" rle-viewtoggle__btn--active":""}`,"aria-pressed":e==="list",onClick:()=>r("list"),children:[_jsxruntime.jsx.call(void 0, be,{}),"List"]}),_jsxruntime.jsxs.call(void 0, "button",{type:"button",className:`rle-viewtoggle__btn${e==="map"?" rle-viewtoggle__btn--active":""}`,"aria-pressed":e==="map",onClick:()=>r("map"),children:[_jsxruntime.jsx.call(void 0, Ne,{}),"Map"]})]})})}function be(){return _jsxruntime.jsxs.call(void 0, "svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:2,strokeLinecap:"round",strokeLinejoin:"round",width:"16",height:"16","aria-hidden":"true",children:[_jsxruntime.jsx.call(void 0, "line",{x1:"8",y1:"6",x2:"20",y2:"6"}),_jsxruntime.jsx.call(void 0, "line",{x1:"8",y1:"12",x2:"20",y2:"12"}),_jsxruntime.jsx.call(void 0, "line",{x1:"8",y1:"18",x2:"20",y2:"18"}),_jsxruntime.jsx.call(void 0, "line",{x1:"4",y1:"6",x2:"4.01",y2:"6"}),_jsxruntime.jsx.call(void 0, "line",{x1:"4",y1:"12",x2:"4.01",y2:"12"}),_jsxruntime.jsx.call(void 0, "line",{x1:"4",y1:"18",x2:"4.01",y2:"18"})]})}function Ne(){return _jsxruntime.jsxs.call(void 0, "svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:2,strokeLinecap:"round",strokeLinejoin:"round",width:"16",height:"16","aria-hidden":"true",children:[_jsxruntime.jsx.call(void 0, "polygon",{points:"1 6 8 3 16 6 23 3 23 18 16 21 8 18 1 21 1 6"}),_jsxruntime.jsx.call(void 0, "line",{x1:"8",y1:"3",x2:"8",y2:"18"}),_jsxruntime.jsx.call(void 0, "line",{x1:"16",y1:"6",x2:"16",y2:"21"})]})}var we=_jsxruntime.jsx.call(void 0, "div",{className:"rle-empty",children:"Map unavailable"});function oe({search:e,toolbarEnd:r,mobileAction:t,autoFetch:i=!0,hasMap:o=!0,mapCenter:a,mapZoom:p,className:c}){let f=_chunkEYXV5OMYcjs.s.call(void 0, ),{Search:w}=_chunkEYXV5OMYcjs.q.call(void 0, ),{filters:L}=_chunkEYXV5OMYcjs.u.call(void 0, ),[h,x]=_react.useState.call(void 0, "list"),m=e?{value:String(_nullishCoalesce(L[e.filterKey], () => (""))),onChange:b=>{f.applyFilters({[e.filterKey]:b||void 0})},placeholder:e.placeholder}:void 0;return _react.useEffect.call(void 0, ()=>{i!==!1&&f.applyFilters({})},[f,i]),_jsxruntime.jsxs.call(void 0, "div",{className:c?`rle-app ${c}`:"rle-app",children:[_jsxruntime.jsxs.call(void 0, "div",{className:"rle-filter-bar",children:[_jsxruntime.jsxs.call(void 0, "div",{className:"rle-filter-bar__controls",children:[m&&_jsxruntime.jsx.call(void 0, "div",{className:"rle-filter-bar__search",children:_jsxruntime.jsx.call(void 0, w,{value:m.value,onChange:m.onChange,placeholder:m.placeholder})}),_jsxruntime.jsx.call(void 0, _chunkEYXV5OMYcjs.v,{className:"rle-filters-row",groupClassName:"rle-filter-group",hideLabels:!0})]}),_jsxruntime.jsxs.call(void 0, "div",{className:"rle-filter-bar__end",children:[_jsxruntime.jsx.call(void 0, "span",{className:"rle-filter-bar__count",children:_jsxruntime.jsx.call(void 0, _chunkEYXV5OMYcjs.A,{})}),t&&_jsxruntime.jsxs.call(void 0, "button",{type:"button",className:"rle-filter-bar__action",onClick:t.onClick,children:[t.icon,_jsxruntime.jsx.call(void 0, "span",{children:t.label})]}),r]})]}),_jsxruntime.jsxs.call(void 0, "div",{className:`rle-body ${o?"rle-split":"rle-body--list-only"}`,"data-mobile-view":h,children:[_jsxruntime.jsxs.call(void 0, "div",{className:"rle-list",children:[_jsxruntime.jsx.call(void 0, _chunkEYXV5OMYcjs.x,{className:"rle-list-grid"}),_jsxruntime.jsx.call(void 0, _chunkEYXV5OMYcjs.z,{})]}),o&&_jsxruntime.jsx.call(void 0, "div",{className:"rle-map",children:_jsxruntime.jsx.call(void 0, _chunkEYXV5OMYcjs.y,{center:a,zoom:p,fallback:we})})]}),o&&_jsxruntime.jsx.call(void 0, ie,{view:h,onViewChange:x})]})}function ne(e){return"provider"in e}function ke(e){let r=e!=null&&!ne(e),t=r?e.apiKey:void 0,i=r?e.mapId:void 0,[o,a]=_react.useState.call(void 0, ()=>!e||ne(e)?{ready:!0,provider:_optionalChain([e, 'optionalAccess', _2 => _2.provider])}:{ready:!1});return _react.useEffect.call(void 0, ()=>{if(!t)return;let p=!1;return Promise.resolve().then(() => _interopRequireWildcard(require("./maps/google/index.cjs"))).then(({googleProvider:c})=>{p||a({ready:!0,provider:c({apiKey:t,mapId:i})})}),()=>{p=!0}},[t,i]),o}function Fe({onFiltersChange:e}){let r=_react.useRef.call(void 0, e);return r.current=e,j("FiltersChanged",t=>{t.type==="FiltersChanged"&&r.current(t.filters)}),null}function Ft(e){let{datasets:r,filters:t,map:i,components:o,initialFilters:a,onFiltersChange:p,mobileAction:c,search:f,toolbarEnd:w,config:L,autoFetch:h,className:x}=e,{ready:m,provider:b}=ke(i);if(!m)return null;let u=[];for(let le of r)u.push(_chunkEYXV5OMYcjs.k.call(void 0, le));t&&u.push(_chunkEYXV5OMYcjs.l.call(void 0, t)),b&&u.push(_chunkEYXV5OMYcjs.j.call(void 0, b)),a&&u.push(_chunkEYXV5OMYcjs.n.call(void 0, a)),L&&u.push(_chunkEYXV5OMYcjs.i.call(void 0, L));let se=_chunkEYXV5OMYcjs.h.call(void 0, ...u),ae={...re,...o};return _jsxruntime.jsxs.call(void 0, _chunkEYXV5OMYcjs.B,{...se,children:[p&&_jsxruntime.jsx.call(void 0, Fe,{onFiltersChange:p}),_jsxruntime.jsx.call(void 0, _chunkEYXV5OMYcjs.p,{...ae,children:_jsxruntime.jsx.call(void 0, oe,{className:x,search:f,toolbarEnd:w,mobileAction:c,autoFetch:h,hasMap:i!=null,mapCenter:_optionalChain([i, 'optionalAccess', _3 => _3.center]),mapZoom:_optionalChain([i, 'optionalAccess', _4 => _4.zoom])})})]})}exports.a = j; exports.b = C; exports.c = I; exports.d = k; exports.e = F; exports.f = M; exports.g = E; exports.h = R; exports.i = _; exports.j = B; exports.k = A; exports.l = re; exports.m = ie; exports.n = oe; exports.o = Ft;
|