efficient-shell 7.50.0 → 7.52.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/{Browser-VHXKQFXP.js → Browser-PXIQAMO7.js} +14 -14
- package/dist/{Documents-QOJNAZQO.js → Documents-HURHTA7N.js} +12 -12
- package/dist/{Files-FYKZZ5GN.js → Files-MSJY4KD3.js} +38 -38
- package/dist/{Notepad-4AABM6QK.js → Notepad-VH2L7R6A.js} +10 -10
- package/dist/{Preview-DS45CXVF.js → Preview-7MEVCS7E.js} +8 -8
- package/dist/{Spreadsheet-JUV363ZX.js → Spreadsheet-OHEXBXBY.js} +14 -14
- package/dist/apps/index.js +1 -1
- package/dist/bin/ui-check.js +1 -1
- package/dist/{chunk-4YGE5HLZ.js → chunk-AFPPAV6Y.js} +1 -1
- package/dist/{chunk-4QW4I2XQ.js → chunk-AKCBXPRY.js} +1 -1
- package/dist/chunk-OHKCQHI7.js +1 -0
- package/dist/{chunk-C7DGCIVO.js → chunk-PO3MKL3Z.js} +1 -1
- package/dist/{chunk-QQEDB6JI.js → chunk-V63KEB2P.js} +135 -135
- package/dist/icons/efficient-looks.js +39 -29
- package/dist/icons/efficient.d.ts +11 -1
- package/dist/icons/efficient.js +172 -163
- package/dist/icons/index.d.ts +1 -1
- package/dist/icons/index.js +1 -1
- package/dist/index.js +119 -119
- package/dist/map/index.d.ts +59 -2
- package/dist/map/index.js +11 -11
- package/dist/map-site.css +153 -0
- package/dist/telemetry/index.js +1 -1
- package/dist/ui/index.js +1 -1
- package/package.json +2 -1
- package/dist/chunk-5P2GSSZR.js +0 -1
package/dist/map/index.d.ts
CHANGED
|
@@ -5,6 +5,55 @@ import { QueryKey } from '@tanstack/react-query';
|
|
|
5
5
|
import * as _tanstack_query_core from '@tanstack/query-core';
|
|
6
6
|
import * as maplibre_gl from 'maplibre-gl';
|
|
7
7
|
|
|
8
|
+
/**
|
|
9
|
+
* How `EntityMap` dresses what it draws — its two LOOKS.
|
|
10
|
+
*
|
|
11
|
+
* `portal` is the map every EFFICIENT portal draws: Tailwind utilities, a
|
|
12
|
+
* rounded grey frame, the theme's own greys. Its strings were moved here from
|
|
13
|
+
* EntityMap unchanged, so a portal's map is what it always was.
|
|
14
|
+
*
|
|
15
|
+
* `site` is the map a public WEBSITE draws (owner 2026-10-17: one map system,
|
|
16
|
+
* the websites' Locations Map moves onto this one). A website does not load
|
|
17
|
+
* the shell's stylesheets or scan its classes with Tailwind — its pages carry
|
|
18
|
+
* the site's own theme — so the site look writes plain `rosh-map-*` classes
|
|
19
|
+
* only, styled by `efficient-shell/map-site.css` from CSS variables the host
|
|
20
|
+
* sets: `--rosh-map-pin`, `--rosh-map-pin-text`, `--rosh-map-pin-edge`,
|
|
21
|
+
* `--rosh-map-ring`, `--rosh-map-radius`, `--rosh-map-frame`, `--rosh-map-font`.
|
|
22
|
+
* There is no frame of its own: the section around it is the frame.
|
|
23
|
+
*/
|
|
24
|
+
type MapLook = 'portal' | 'site';
|
|
25
|
+
interface MapLookClasses {
|
|
26
|
+
/** The map's frame; `picking` adds the crosshair. */
|
|
27
|
+
frame: (picking: boolean) => string;
|
|
28
|
+
/** The box the map is laid out in (MapLibre makes its container relative). */
|
|
29
|
+
fill: string;
|
|
30
|
+
/** The map's own container. */
|
|
31
|
+
box: string;
|
|
32
|
+
/** "The map could not start." */
|
|
33
|
+
failed: string;
|
|
34
|
+
/** The card along the bottom edge of a narrow map. */
|
|
35
|
+
cardInline: string;
|
|
36
|
+
/** The card standing beside its pin. */
|
|
37
|
+
cardFloating: string;
|
|
38
|
+
/** The highlight ring. */
|
|
39
|
+
ring: string;
|
|
40
|
+
/** A pin's button: the target. */
|
|
41
|
+
pinButton: (pin: MapPin, grouped: boolean) => string;
|
|
42
|
+
/** A pin's disc, for the selection and the highlight. */
|
|
43
|
+
pinMark: (pin: MapPin, chosen: boolean, pointed: boolean, grouped: boolean) => string;
|
|
44
|
+
/** A point that is not a record. */
|
|
45
|
+
mark: (mark: MapMark) => string;
|
|
46
|
+
/** A group's button. */
|
|
47
|
+
groupButton: string;
|
|
48
|
+
/** A group's disc. */
|
|
49
|
+
groupDisc: (stops: boolean, dots: boolean, chosen: boolean) => string;
|
|
50
|
+
/** The small tag on a pin's corner. */
|
|
51
|
+
badge: (tone: string | undefined) => string;
|
|
52
|
+
/** Where a pin's `iconNode` is rendered. */
|
|
53
|
+
iconHost: string;
|
|
54
|
+
}
|
|
55
|
+
declare const MAP_LOOKS: Record<MapLook, MapLookClasses>;
|
|
56
|
+
|
|
8
57
|
/**
|
|
9
58
|
* Records on a map. One pin per placed record: a button carrying a glyph (or
|
|
10
59
|
* an icon) and, for a screen reader, the record's name in words, never the
|
|
@@ -117,7 +166,7 @@ interface MapRoute {
|
|
|
117
166
|
* the road router's, whose terms ask for it beside the map. */
|
|
118
167
|
attribution?: string;
|
|
119
168
|
}
|
|
120
|
-
declare function EntityMap({ pins, selectedKey, focus, onSelect, ariaLabel, className, children, routes, fitTo, attribution, marks, groupCrowded, noun, highlightKey, picking, onPick, card, cardMinMapWidth, fullScreen, initialView, cooperativeGestures, }: {
|
|
169
|
+
declare function EntityMap({ pins, selectedKey, focus, onSelect, ariaLabel, className, children, routes, fitTo, attribution, marks, groupCrowded, noun, highlightKey, picking, onPick, card, cardMinMapWidth, fullScreen, initialView, cooperativeGestures, look, theme: themeOverride, }: {
|
|
121
170
|
pins: MapPin[];
|
|
122
171
|
selectedKey: string | null;
|
|
123
172
|
/** Bump `n` to fly to a pin (the list's "show on map"). */
|
|
@@ -173,6 +222,14 @@ declare function EntityMap({ pins, selectedKey, focus, onSelect, ariaLabel, clas
|
|
|
173
222
|
};
|
|
174
223
|
/** Two fingers to move the map (one scrolls the page) — `'coarse'` on touch screens only. */
|
|
175
224
|
cooperativeGestures?: boolean | 'coarse';
|
|
225
|
+
/** How it is dressed (`looks.ts`): `'portal'`, the portals' map, or `'site'`,
|
|
226
|
+
* a public website's — plain classes from `efficient-shell/map-site.css`,
|
|
227
|
+
* coloured by the host's `--rosh-map-*` variables, with no frame of its own.
|
|
228
|
+
* Read when the map mounts and whenever it draws. */
|
|
229
|
+
look?: MapLook;
|
|
230
|
+
/** The tiles' light or dark style; the shell's own theme when unset. A
|
|
231
|
+
* website passes its section's own choice. */
|
|
232
|
+
theme?: 'light' | 'dark';
|
|
176
233
|
}): react_jsx_runtime.JSX.Element;
|
|
177
234
|
|
|
178
235
|
/**
|
|
@@ -579,4 +636,4 @@ declare const mapLibreWorkerUrl: (version: string) => string;
|
|
|
579
636
|
/** MapLibre, loaded once per page; a failed load is retried by the next map. */
|
|
580
637
|
declare function loadMapLibre(): Promise<MapLibre>;
|
|
581
638
|
|
|
582
|
-
export { CARD_MIN_MAP_WIDTH, COMPACT_SHOW, type CardAnchor, type CardPlace, EntityMap, LocationsMap, MAPLIBRE_WORKER_FILE, MAP_APART_PX, MAP_CATEGORIES, MAP_STOP_PX, MAP_TARGET_PX, type MapCategory, MapLegend, type MapMark, type MapPin, type MapPlacement, type MapPoint, type MapPoints, type MapRoute, type MapSummary, PENDING_POLL_MS, type PinAt, type PinBox, type PinGroup, type PinLayout, SECONDARY_KINDS, SelectedCard, cardMaxHeight, categoryLabel, categoryTone, foldAttributionOnce, isOnMap, layoutPins, legendCategories, loadMapLibre, locationNumbers, mapLibreWorkerUrl, mapPointsRefetchInterval, offMapNotes, pinCategory, pinGlyph, pinTone, placeCard, placementNote, pointKey, stopsLabel, summarize, summaryText, useMapHighlight, useMapPoints, zoomApart };
|
|
639
|
+
export { CARD_MIN_MAP_WIDTH, COMPACT_SHOW, type CardAnchor, type CardPlace, EntityMap, LocationsMap, MAPLIBRE_WORKER_FILE, MAP_APART_PX, MAP_CATEGORIES, MAP_LOOKS, MAP_STOP_PX, MAP_TARGET_PX, type MapCategory, MapLegend, type MapLook, type MapLookClasses, type MapMark, type MapPin, type MapPlacement, type MapPoint, type MapPoints, type MapRoute, type MapSummary, PENDING_POLL_MS, type PinAt, type PinBox, type PinGroup, type PinLayout, SECONDARY_KINDS, SelectedCard, cardMaxHeight, categoryLabel, categoryTone, foldAttributionOnce, isOnMap, layoutPins, legendCategories, loadMapLibre, locationNumbers, mapLibreWorkerUrl, mapPointsRefetchInterval, offMapNotes, pinCategory, pinGlyph, pinTone, placeCard, placementNote, pointKey, stopsLabel, summarize, summaryText, useMapHighlight, useMapPoints, zoomApart };
|
package/dist/map/index.js
CHANGED
|
@@ -1,21 +1,21 @@
|
|
|
1
1
|
"use client";
|
|
2
|
-
import{Button_default as e}from"../chunk-DELNCIUK.js";import"../chunk-RDLWLATO.js";import{rootIsDark as t,ROOT_THEME_ATTRIBUTES as n}from"../chunk-7IQ3B77H.js";import"../chunk-D65T4H6J.js";import"../chunk-FIEA5CGB.js";import"../chunk-K7PQXJO7.js";import{Icon as r}from"../chunk-YT4B3NSV.js";import{useShellStrings as o}from"../chunk-HQLDTFAF.js";import"../chunk-C3QOHMR6.js";import{SpinnerRing as a}from"../chunk-2J6F4EE7.js";import{useRef as l,useState as i,useEffect as s,useCallback as c,useMemo as u,useSyncExternalStore as d}from"react";import{createPortal as p}from"react-dom";import{jsxs as m,jsx as h,Fragment as g}from"react/jsx-runtime";import{useQuery as f}from"@tanstack/react-query";var y="maplibregl-compact-show";function b(e){if(!e)return()=>{};const t=()=>!!e.classList.contains(y)&&(e.classList.remove(y),!0);if(t())return()=>{};const n=new MutationObserver(()=>{t()&&n.disconnect()});return n.observe(e,{attributes:!0,attributeFilter:["class"]}),()=>n.disconnect()}var x=20,v=12,w=480,k={center:[0,0],left:[x,0],right:[-20,0],top:[0,x],"top-left":[0,x],"top-right":[0,x],bottom:[0,-20],"bottom-left":[0,-20],"bottom-right":[0,-20]},N=(e,t=12)=>Math.max(0,Math.floor(e-t-v-x-10-16));function C(e,t,n,r=12){const o=e.y-x-r,a=n.height-e.y-x-v,l=t.height<=o||t.height>a&&o>=a,i=l?Math.max(0,t.height-o):-Math.max(0,t.height-a);let s="",c=0;return e.x-t.width/2<v?(s="-left",c=Math.max(0,v-e.x)):e.x+t.width/2>n.width-v&&(s="-right",c=-Math.max(0,e.x-(n.width-v))),{anchor:`${l?"bottom":"top"}${s}`,move:{x:c,y:i}}}var M="maplibre-gl-worker.mjs",L=e=>`/maplibre-gl/${e}/${M}`,E=null;function $(){return E??=Promise.all([import("maplibre-gl"),import("maplibre-gl/dist/maplibre-gl.css")]).then(([e])=>(e.setWorkerUrl(L(e.getVersion())),e)).catch(e=>{throw E=null,e}),E}var S=24,j=28,A=29;function z(e){const t=[...e].sort((e,t)=>e-t),n=[];for(let e=0;e<t.length;){let r=e;for(;r+1<t.length&&t[r+1]===t[r]+1;)r++;n.push(r===e?String(t[e]):`${t[e]}–${t[r]}`),e=r+1}return n.join(", ")}function T(e){const t=Math.max(j,12+8*e.length);return t+t%2}var O=(e,t,n,r)=>({left:e-n/2,top:t-r/2,right:e+n/2,bottom:t+r/2});function R(e,t){return e.left<t.right+1&&t.left<e.right+1&&e.top<t.bottom+1&&t.top<e.bottom+1}var B=e=>O(e.x,e.y,e.width,e.height);function F(e){for(let t=0;t<e.length;t++)for(let n=t+1;n<e.length;n++)if(R(B(e[t]),B(e[n])))return[e[t],e[n]];return null}function K(e,t=[]){const n=[],r=e=>t.some(t=>R(t,e));let o=e.filter(e=>null!==e.stop).sort((e,t)=>e.stop-t.stop).map(e=>({keys:[e.key],stops:[e.stop],x:e.x,y:e.y,width:j,height:j,under:0}));for(let e=F(o);e;e=F(o)){const[t,n]=e;t.keys.push(...n.keys),t.stops.push(...n.stops),t.stops.sort((e,t)=>e-t),t.width=T(z(t.stops)),o=o.filter(e=>e!==n)}o=o.filter(e=>!r(B(e))||(n.push(...e.keys),!1));const a=[];for(const t of e){if(null!==t.stop)continue;const e=O(t.x,t.y,S,S),l=o.find(t=>R(B(t),e));if(l||r(e)){n.push(t.key),l&&l.under++;continue}const i=a.find(t=>R(B(t),e));i?i.keys.push(t.key):a.push({keys:[t.key],stops:[],x:t.x,y:t.y,width:S,height:S,under:0})}return{groups:[...o,...a],hidden:n}}function W(e,t,n){let r=-1/0;for(const o of t){const t=Math.max(Math.abs(o.x-e.x),Math.abs(o.y-e.y));r=Math.max(r,0===t?1/0:n+Math.log2(29/t))}return r}function q(e){const t=new MutationObserver(e);return t.observe(document.documentElement,{attributes:!0,attributeFilter:n}),()=>t.disconnect()}var _=t;var P="routes",H=["routes-road","routes-estimate"];function I(e){const t=document.createElement("span");t.style.display="none",t.style.color=e,document.body.appendChild(t);const n=getComputedStyle(t).color||"#2563eb";return t.remove(),D(n)}function D(e){const t=document.createElement("canvas").getContext("2d");if(!t)return"#2563eb";t.fillStyle="#2563eb",t.fillStyle=e,t.fillRect(0,0,1,1);const[n,r,o]=t.getImageData(0,0,1,1).data;return`rgb(${n}, ${r}, ${o})`}var Z={light:"https://tiles.openfreemap.org/styles/positron",dark:"https://tiles.openfreemap.org/styles/dark"},G={center:[30,20],zoom:1},Q="ring-2 ring-gray-900 ring-offset-2";var J="var(--color-gray-600, #4b5563)",U="http://www.w3.org/2000/svg",V=()=>window.matchMedia("(prefers-reduced-motion: reduce)").matches,X=/^(?:\d+|[xytrblse](?:-\d+)?|solid|dashed|dotted|double|hidden|none)$/;function Y(e){return e.split(/\s+/).some(e=>{const t=e.search(/[[(]/),n=t<0?e:e.slice(0,t),r=e.slice(n.lastIndexOf(":")+1);return r.startsWith("border-")&&!X.test(r.slice(7))})}var ee=(...e)=>e.filter(Boolean).join(" ");function te(e){const t=document.createElementNS(U,"svg");t.setAttribute("viewBox","0 0 24 24"),t.setAttribute("fill","none"),t.setAttribute("stroke","currentColor"),t.setAttribute("stroke-width","2"),t.setAttribute("aria-hidden","true");for(const n of e){const e=document.createElementNS(U,"path");e.setAttribute("stroke-linecap","round"),e.setAttribute("stroke-linejoin","round"),e.setAttribute("d",n),t.appendChild(e)}return t}function ne(e,t){for(const[n,r]of Object.entries(t??{}))e.dataset[n]=r}var re=(e,t)=>ee("relative grid place-items-center rounded-full cursor-pointer",t&&(null!=e.stop?"h-7 w-7":"h-6 w-6"));function oe(e,t,n,r){const o=t&&!r&&null==e.stop&&!e.dot;return ee("grid place-items-center rounded-full border-2 font-semibold leading-none shadow-sm transition-transform motion-reduce:transition-none",!Y(e.tone)&&"border-white",e.tone,e.dot?"h-4 w-4 opacity-80":null!=e.stop?"h-7 w-7 text-xs ring-2 ring-gray-900":o?"h-8 w-8 text-xs [&_svg]:h-4 [&_svg]:w-4":"h-6 w-6 text-2xs [&_svg]:h-3.5 [&_svg]:w-3.5",t&&(o?"ring-2 ring-gray-900 ring-offset-1":Q),e.approximate&&"border-dashed opacity-80",e.faded&&!t&&"opacity-40",n&&"scale-125 opacity-100")}var ae=e=>ee("grid place-items-center border-2 px-0.5 text-xs font-semibold leading-none shadow-sm",e.stop?"h-7 min-w-7":"h-6 min-w-6",!Y(e.tone??"")&&"border-white",e.tone??"bg-gray-900 text-white");function le({pins:t,selectedKey:n,focus:r,onSelect:a,ariaLabel:u,className:g="",children:f,routes:y,fitTo:x,attribution:v,marks:w,groupCrowded:M=!1,noun:L,highlightKey:E=null,picking:A=!1,onPick:T,card:O,cardMinMapWidth:R=480,fullScreen:B,initialView:F=G,cooperativeGestures:U=!1}){const X=o().map,Y=l(null),le=l(null),ce=l(null),ue=l(null),de=l([]),pe=l(/* @__PURE__ */new Map),me=l(/* @__PURE__ */new Map),he=l(/* @__PURE__ */new Map),ge=l(null),fe=l(/* @__PURE__ */new Map),ye=l(""),[be,xe]=i(!1),[ve,we]=i(!1),ke=d(q,_,()=>!1)?"dark":"light",Ne=l({onSelect:a,onPick:T,picking:A,pins:t,selectedKey:n,highlightKey:E,groupCrowded:M,strings:X,noun:L});s(()=>{Ne.current={onSelect:a,onPick:T,picking:A,pins:t,selectedKey:n,highlightKey:E,groupCrowded:M,strings:X,noun:L}});const Ce=c(()=>{const e=ce.current,{pins:t,selectedKey:n}=Ne.current,r=n?t.find(e=>e.key===n):void 0;e&&r&&!e.getBounds().contains([r.lng,r.lat])&&e.easeTo({center:[r.lng,r.lat],duration:V()?0:400})},[]),Me=l(!1),Le=c((e,t)=>{const n=ce.current,r=ue.current;if(!n||!r)return;const o=n.getZoom();if(o>=17.5){const t=e.indexOf(Ne.current.selectedKey??"");return void Ne.current.onSelect(e[(t+1)%e.length])}const a=e.map(e=>pe.current.get(e).pin),l=new r.LngLatBounds([a[0].lng,a[0].lat],[a[0].lng,a[0].lat]);for(const e of a)l.extend([e.lng,e.lat]);const i=a.map(e=>n.project([e.lng,e.lat])),s=Math.max(...i.map((e,t)=>W(e,i.filter((e,n)=>n!==t),o))),{clientWidth:c,clientHeight:u}=n.getContainer(),d=n.cameraForBounds(l,{padding:Math.min(64,c/4,u/4)})?.zoom??18,p=document.activeElement===t;Me.current=!0,n.once("moveend",()=>{if(Me.current=!1,!p)return;const e=a[0].key,t=pe.current.get(e)?.button,n=t&&"none"!==t.style.display?t:[...me.current.values()].find(t=>t.keys.includes(e))?.button;n?.focus({preventScroll:!0})}),n.easeTo({center:l.getCenter(),zoom:Math.min(18,Math.max(o+1,Math.min(d,s))),duration:V()?0:600})},[]),Ee=c(()=>{const e=ce.current,t=ue.current;if(!e||!t||!Y.current||Me.current&&e.isMoving())return;const{selectedKey:n,highlightKey:r,groupCrowded:o,strings:a,noun:l}=Ne.current;for(const[e,t]of pe.current){const a=oe(t.pin,e===n,e===r,o);t.mark.className!==a&&(t.mark.className=a);const l=e===n?"1":"";t.button.style.zIndex!==l&&(t.button.style.zIndex=l)}let i=null;if(o){const r=e.getContainer().getBoundingClientRect(),o=[...Y.current.querySelectorAll("a[href], button, input, select, textarea, summary, [role='button'], [tabindex]:not([tabindex='-1'])")].filter(e=>!e.closest("[data-pin], [data-pin-group], .maplibregl-canvas")).map(e=>{const t=e.getBoundingClientRect(),n=e.closest("[data-map-card]")?.getBoundingClientRect()??t;return{left:Math.max(t.left,n.left)-r.left,top:Math.max(t.top,n.top)-r.top,right:Math.min(t.right,n.right)-r.left,bottom:Math.min(t.bottom,n.bottom)-r.top}}).filter(e=>e.right>e.left&&e.bottom>e.top);i=K([...pe.current.values()].map(({pin:t})=>{const n=e.project([t.lng,t.lat]);return{key:t.key,x:n.x,y:n.y,stop:t.stop??null}}),o);const s=e=>(l??a.places)(e),c=e.getZoom()<17.5?a.spread:a.cycle,u=(e,t)=>{const n=t?"":"none";e.style.display!==n&&(e.style.display=n)},d=/* @__PURE__ */new Map;for(const r of i.groups){const o=r.under>0?a.closeBy(r.under,s(r.under)):null,l=1===r.keys.length?pe.current.get(r.keys[0]):null;if(l){u(l.button,!0),l.button.setAttribute("aria-label",o?`${l.name}; ${o}`:l.name),l.button.title=o?`${l.title}\n${o}`:l.title;continue}for(const e of r.keys)u(pe.current.get(e).button,!1);const i=r.keys.join(" ");let p=me.current.get(i);if(!p){const n=document.createElement("button");n.type="button",n.dataset.pinGroup="",n.className="grid place-items-center rounded-full cursor-pointer",n.append(document.createElement("span"));const o=pe.current.get(r.keys[0]).pin,a={button:n,keys:r.keys,marker:new t.Marker({element:n,anchor:"center"}).setLngLat([o.lng,o.lat]).addTo(e)};n.addEventListener("click",e=>{e.stopPropagation(),Le(a.keys,n)}),p=a}p.keys=r.keys;const m=r.keys.map(e=>pe.current.get(e)),h=r.stops.length>0?z(r.stops):String(m.length),g=r.stops.length>0?a.stops(h):a.group(m.length,s(m.length));p.button.style.width=`${r.width}px`,p.button.style.height=`${r.height}px`,p.button.setAttribute("aria-label",`${g}: ${m.map(e=>e.pin.label).join("; ")}. ${c}${o?`; ${o}`:""}.`),p.button.title=[`${g}:`,...m.map(e=>e.title),...o?[o]:[],c].join("\n");const f=p.button.firstElementChild;f.textContent=h;const y=ee("grid place-items-center rounded-full border-2 border-gray-700 bg-white font-semibold leading-none text-gray-900 shadow-sm",r.stops.length>0?"h-7 w-full px-1 text-xs ring-2 ring-gray-900":m.every(e=>e.pin.dot)?"h-5 w-5 text-3xs":"h-6 w-6 text-2xs",null!=n&&r.keys.includes(n)&&Q);f.className!==y&&(f.className=y),d.set(i,p)}for(const e of i.hidden)u(pe.current.get(e).button,!1);for(const[e,t]of me.current)d.has(e)||t.marker.remove();me.current=d}if(ge.current){const e=r&&i?i.groups.find(e=>e.keys.includes(r)&&e.keys.length>1):void 0,t=r?pe.current.get(r):void 0,n=r?he.current.get(r):void 0,o=e?{at:pe.current.get(e.keys[0]).pin,width:e.width,height:e.height}:t?{at:t.pin,width:t.button.offsetWidth||(null!=t.pin.stop?j:S),height:t.button.offsetHeight||(null!=t.pin.stop?j:S)}:n?{at:n.mark,width:n.element.offsetWidth||j,height:n.element.offsetHeight||j}:null,a=ge.current.getElement();a.style.display=o?"":"none",o&&(ge.current.setLngLat([o.at.lng,o.at.lat]),a.style.width=`${o.width+22}px`,a.style.height=`${o.height+22}px`)}},[Le]);s(()=>{if(Ee(),!Y.current)return;const e=new ResizeObserver(()=>Ee());e.observe(Y.current);for(const t of Y.current.children)t.contains(le.current)||e.observe(t);return()=>e.disconnect()}),s(()=>{let e=!1,t=null,n=null,r=()=>{};return(async()=>{try{const o=await $();if(e||!le.current)return;ue.current=o,t=new o.Map({container:le.current,style:Z[ke],center:F.center,zoom:F.zoom,attributionControl:v?{compact:!0,customAttribution:v}:{compact:!0},dragRotate:!1,pitchWithRotate:!1,touchPitch:!1,maxPitch:0,cooperativeGestures:"coarse"===U?window.matchMedia("(pointer: coarse)").matches:U}),t.touchZoomRotate.disableRotation(),t.keyboard.disableRotation(),t.addControl(new o.NavigationControl({showCompass:!1}),"top-right");const a=document.createElement("div");a.dataset.pinRing="",a.setAttribute("aria-hidden","true"),a.className="pointer-events-none rounded-full border-2 border-gray-900 bg-gray-900/15 shadow-[0_0_0_2px_var(--color-white,#fff)]",a.style.display="none",ge.current=new o.Marker({element:a,anchor:"center"}).setLngLat(F.center).addTo(t),t.on("click",e=>{Ne.current.picking&&Ne.current.onPick?.({lat:e.lngLat.lat,lng:e.lngLat.lng})}),t.on("move",Ee),t.on("moveend",Ee),t.on("resize",Ee),t.on("error",e=>console.warn("[map]",e.error?.message)),r=b(le.current.querySelector(".maplibregl-ctrl-attrib"));const l=t;n=new ResizeObserver(()=>{l.resize(),Ce()}),n.observe(le.current),ce.current=t,xe(!0)}catch(t){console.error("[map] could not start",t),e||we(!0)}})(),()=>{e=!0,n?.disconnect(),r(),de.current.forEach(e=>e.remove()),de.current=[],me.current.forEach(e=>e.marker.remove()),me.current.clear(),ge.current?.remove(),ge.current=null,t?.remove(),ce.current=null}},[]);const $e=l(ke);s(()=>{be&&ce.current&&$e.current!==ke&&($e.current=ke,ce.current.setStyle(Z[ke]))},[be,ke]),s(()=>{const e=ce.current,n=ue.current;if(!be||!e||!n)return;de.current.forEach(e=>e.remove()),de.current=[],me.current.forEach(e=>e.marker.remove()),me.current.clear(),pe.current.clear(),he.current.clear();for(const e of fe.current.keys())t.some(t=>t.key===e)||fe.current.delete(e);const r=Ne.current.strings;for(const o of t){const t=document.createElement("button");t.type="button",t.dataset.pin=o.key,t.className=re(o,M);const a=o.approximate?r.approximate(o.label):o.label,l=o.title??(o.approximate?r.approximateTitle(o.label):o.label);t.setAttribute("aria-label",a),t.title=l;const i=document.createElement("span");if(ne(i,o.data),o.dot);else if(null!=o.iconNode){const e=fe.current.get(o.key);e&&i.append(e)}else o.icon?.length?i.append(te(o.icon)):i.textContent=null!=o.stop?String(o.stop):o.glyph;if(t.append(i),o.badge){const e=document.createElement("span");e.setAttribute("aria-hidden","true"),e.className=ee("absolute -right-2 -top-2 grid h-4 min-w-4 place-items-center rounded-full px-0.5 text-3xs font-semibold leading-none shadow",o.badgeTone??"bg-white text-gray-900"),e.textContent=o.badge,t.appendChild(e)}t.addEventListener("click",e=>{e.stopPropagation(),Ne.current.onSelect(o.key)}),de.current.push(new n.Marker({element:t,anchor:"center"}).setLngLat([o.lng,o.lat]).addTo(e)),pe.current.set(o.key,{pin:o,button:t,mark:i,name:a,title:l})}for(const t of w??[]){const r=document.createElement("div");r.dataset.mapMark=t.key,ne(r,t.data),r.className=ae(t),r.textContent=t.text,r.title=t.title??t.label,r.setAttribute("role","img"),r.setAttribute("aria-label",t.label),de.current.push(new n.Marker({element:r,anchor:"center"}).setLngLat([t.lng,t.lat]).addTo(e)),he.current.set(t.key,{mark:t,element:r})}Ee()},[be,t,w,M,Ee]),s(()=>{be&&Ee()},[be,n,E,Ee]),s(()=>{if(!be||!n)return;const e=requestAnimationFrame(Ce);return()=>cancelAnimationFrame(e)},[be,n,Ce]),s(()=>{const e=ce.current,n=ue.current,r=x?[...t,...w??[]].filter(e=>x.includes(e.key)):t;if(!be||!e||!n||0===r.length)return;const o=r.map(e=>`${e.key}@${e.lat},${e.lng}`).sort().join("|");if(ye.current===o)return;const a=""===ye.current;if(ye.current=o,1===r.length)return void e.jumpTo({center:[r[0].lng,r[0].lat],zoom:13});const l=new n.LngLatBounds([r[0].lng,r[0].lat],[r[0].lng,r[0].lat]);for(const e of r)l.extend([e.lng,e.lat]);e.fitBounds(l,{padding:48,maxZoom:14,animate:!a})},[be,t,w,x]),s(()=>{const e=ce.current;if(!be||!e)return;const t=(y??[]).filter(e=>e.coordinates.length>=2),n=[...new Set(t.flatMap(e=>e.attribution?[e.attribution]:[]))].join(" · "),r=()=>{const r=function(){const e=document.createElement("span");e.className="text-blue-600",e.style.display="none",document.body.appendChild(e);const t=getComputedStyle(e).color||"#2563eb";return e.remove(),D(t)}(),o={type:"FeatureCollection",features:t.map(e=>({type:"Feature",properties:{key:e.key,estimate:e.estimate,faded:!!e.faded,color:e.color?I(e.color):r},geometry:{type:"LineString",coordinates:e.coordinates}}))},a=["case",["get","faded"],.25,.85],l=["get","color"],i=e.getSource(P);if(i&&(i.attribution||"")!==n){for(const t of H)e.getLayer(t)&&e.removeLayer(t);e.removeSource(P)}const s=e.getSource(P);s?s.setData(o):e.addSource(P,{type:"geojson",data:o,...n?{attribution:n}:{}}),e.getLayer("routes-road")||e.addLayer({id:"routes-road",type:"line",source:P,filter:["!",["get","estimate"]],layout:{"line-join":"round","line-cap":"round"},paint:{"line-color":l,"line-width":4,"line-opacity":a}}),e.getLayer("routes-estimate")||e.addLayer({id:"routes-estimate",type:"line",source:P,filter:["get","estimate"],layout:{"line-join":"round","line-cap":"round"},paint:{"line-color":l,"line-width":3,"line-dasharray":[1.5,1.5],"line-opacity":a}})},o=()=>{try{r()}catch(e){console.debug("[map] routes wait for the style",e)}};return o(),e.on("style.load",o),e.once("idle",o),()=>{e.off("style.load",o),e.off("idle",o)}},[be,y,ke]),s(()=>{const e=ce.current;if(!be||!e||!r)return;const n=t.find(e=>e.key===r.key);if(!n)return;const o=e.getZoom(),a=M?W(e.project([n.lng,n.lat]),t.filter(e=>e.key!==n.key).map(t=>e.project([t.lng,t.lat])),o):-1/0,l={center:[n.lng,n.lat],zoom:Math.min(18,Math.max(o,13,a))};V()?e.jumpTo(l):e.flyTo({...l,duration:600})},[be,r?.n]);const[Se,je]=i(!1);s(()=>{const e=Y.current;if(!e)return;const t=()=>je(e.clientWidth<R);t();const n=new ResizeObserver(t);return n.observe(e),()=>n.disconnect()},[R]);const Ae=n?t.find(e=>e.key===n)??null:null,ze=Ae?.key??null,Te=Ae?.lng??0,Oe=Ae?.lat??0,Re=be&&!Se&&null!=O&&!!Ae,[Be,Fe]=i(null);s(()=>{const e=ce.current,t=ue.current;if(!(Re&&e&&t&&ze))return;const n=document.createElement("div");n.dataset.mapCard="",n.className="w-[26rem] overflow-y-auto overscroll-contain";const r=new t.Popup({anchor:"bottom",offset:k,className:"rosh-map-card",maxWidth:"none",closeButton:!1,closeOnClick:!1,closeOnMove:!1,focusAfterOpen:!1}).setLngLat([Te,Oe]).setDOMContent(n).addTo(e),o=r.getElement(),a=o.querySelector(".maplibregl-popup-content");a&&Object.assign(a.style,{padding:"0",background:"transparent",borderRadius:"0",boxShadow:"none"});const l=o.querySelector(".maplibregl-popup-tip");l&&Object.assign(l.style,{borderTopColor:J,borderBottomColor:J}),Fe(n);let i=!1,s=!1;const c=(t=!0)=>{if(s)return;if(e.isMoving())return void(i||(i=!0,e.once("moveend",()=>{i=!1,c()})));const{clientWidth:o,clientHeight:a}=e.getContainer(),l=function(e,t){const n=e.getBoundingClientRect().top,r=[...e.querySelectorAll(".maplibregl-ctrl-top-left > *, .maplibregl-ctrl-top-right > *"),...t?.querySelectorAll(":scope > [data-map-control]")??[]];let o=0;for(const e of r){const t=e.getBoundingClientRect();t.height>0&&(o=Math.max(o,t.bottom-n))}return o}(e.getContainer(),Y.current)+8,u=`${N(a,l)}px`;n.style.maxHeight!==u&&(n.style.maxHeight=u);const d=r.getElement(),p=r.getLngLat(),{anchor:m,move:h}=C(e.project(p),{width:d.offsetWidth,height:d.offsetHeight},{width:o,height:a},l);r.options.anchor!==m&&(r.options.anchor=m,r.setLngLat(p)),!t||0===h.x&&0===h.y||e.panBy([-h.x,-h.y],{duration:V()?0:250}),Ee()},u=new ResizeObserver(()=>c());u.observe(n);const d=()=>c(),p=()=>{i||c(!1)};e.on("resize",d),e.on("moveend",p);let m=!1;const h=pe.current,g=e=>{m=n.contains(e.target)};return document.addEventListener("focusin",g),()=>{if(s=!0,u.disconnect(),e.off("resize",d),e.off("moveend",p),document.removeEventListener("focusin",g),r.remove(),Fe(null),m&&(!document.activeElement||document.activeElement===document.body)){const e=h.get(ze)?.button;e&&"none"!==e.style.display&&e.focus({preventScroll:!0})}}},[Re,ze,Te,Oe,Ee]);const Ke=B?.active??!1,We=l(B?.onChange);s(()=>{We.current=B?.onChange}),s(()=>{if(!B)return;const e=document.documentElement;Ke&&!document.fullscreenElement&&e.requestFullscreen&&e.requestFullscreen().catch(()=>{}),!Ke&&document.fullscreenElement&&document.exitFullscreen().catch(()=>{})},[Ke]);const qe=!!B;return s(()=>{if(!qe)return;const e=()=>{document.fullscreenElement||We.current?.(!1)};return document.addEventListener("fullscreenchange",e),()=>document.removeEventListener("fullscreenchange",e)},[qe]),/* @__PURE__ */m("div",{ref:Y,className:ee("relative min-h-72 overflow-hidden rounded-lg border border-gray-200 bg-gray-100",A&&"[&_canvas]:cursor-crosshair",g),children:[
|
|
3
|
-
/* @__PURE__ */h("div",{className:
|
|
4
|
-
return h(g,{children:e.map(e=>{if(null==e.iconNode||e.dot)return null;let
|
|
5
|
-
return h(r,e?{name:"collapse","aria-hidden":"true",className:"h-4 w-4",strokeWidth:2}:{name:"expand","aria-hidden":"true",className:"h-4 w-4",strokeWidth:2})}function
|
|
6
|
-
/* @__PURE__ */h("span",{"aria-hidden":!0,className:`h-2.5 w-2.5 rounded-full ${
|
|
2
|
+
import{Button_default as e}from"../chunk-DELNCIUK.js";import"../chunk-RDLWLATO.js";import{rootIsDark as t,ROOT_THEME_ATTRIBUTES as n}from"../chunk-7IQ3B77H.js";import"../chunk-D65T4H6J.js";import"../chunk-FIEA5CGB.js";import"../chunk-K7PQXJO7.js";import{Icon as r}from"../chunk-YT4B3NSV.js";import{useShellStrings as o}from"../chunk-HQLDTFAF.js";import"../chunk-C3QOHMR6.js";import{SpinnerRing as a}from"../chunk-2J6F4EE7.js";import{useRef as l,useState as s,useEffect as i,useCallback as c,useMemo as u,useSyncExternalStore as d}from"react";import{createPortal as p}from"react-dom";import{jsxs as m,jsx as h,Fragment as g}from"react/jsx-runtime";import{useQuery as f}from"@tanstack/react-query";var y="maplibregl-compact-show";function b(e){if(!e)return()=>{};const t=()=>!!e.classList.contains(y)&&(e.classList.remove(y),!0);if(t())return()=>{};const n=new MutationObserver(()=>{t()&&n.disconnect()});return n.observe(e,{attributes:!0,attributeFilter:["class"]}),()=>n.disconnect()}var x=20,v=12,w=480,k={center:[0,0],left:[x,0],right:[-20,0],top:[0,x],"top-left":[0,x],"top-right":[0,x],bottom:[0,-20],"bottom-left":[0,-20],"bottom-right":[0,-20]},N=(e,t=12)=>Math.max(0,Math.floor(e-t-v-x-10-16));function M(e,t,n,r=12){const o=e.y-x-r,a=n.height-e.y-x-v,l=t.height<=o||t.height>a&&o>=a,s=l?Math.max(0,t.height-o):-Math.max(0,t.height-a);let i="",c=0;return e.x-t.width/2<v?(i="-left",c=Math.max(0,v-e.x)):e.x+t.width/2>n.width-v&&(i="-right",c=-Math.max(0,e.x-(n.width-v))),{anchor:`${l?"bottom":"top"}${i}`,move:{x:c,y:s}}}var C="maplibre-gl-worker.mjs",L=e=>`/maplibre-gl/${e}/${C}`,E=null;function $(){return E??=Promise.all([import("maplibre-gl"),import("maplibre-gl/dist/maplibre-gl.css")]).then(([e])=>(e.setWorkerUrl(L(e.getVersion())),e)).catch(e=>{throw E=null,e}),E}var S=24,j=28,A=29;function B(e){const t=[...e].sort((e,t)=>e-t),n=[];for(let e=0;e<t.length;){let r=e;for(;r+1<t.length&&t[r+1]===t[r]+1;)r++;n.push(r===e?String(t[e]):`${t[e]}–${t[r]}`),e=r+1}return n.join(", ")}function z(e){const t=Math.max(j,12+8*e.length);return t+t%2}var T=(e,t,n,r)=>({left:e-n/2,top:t-r/2,right:e+n/2,bottom:t+r/2});function F(e,t){return e.left<t.right+1&&t.left<e.right+1&&e.top<t.bottom+1&&t.top<e.bottom+1}var O=e=>T(e.x,e.y,e.width,e.height);function R(e){for(let t=0;t<e.length;t++)for(let n=t+1;n<e.length;n++)if(F(O(e[t]),O(e[n])))return[e[t],e[n]];return null}function K(e,t=[]){const n=[],r=e=>t.some(t=>F(t,e));let o=e.filter(e=>null!==e.stop).sort((e,t)=>e.stop-t.stop).map(e=>({keys:[e.key],stops:[e.stop],x:e.x,y:e.y,width:j,height:j,under:0}));for(let e=R(o);e;e=R(o)){const[t,n]=e;t.keys.push(...n.keys),t.stops.push(...n.stops),t.stops.sort((e,t)=>e-t),t.width=z(B(t.stops)),o=o.filter(e=>e!==n)}o=o.filter(e=>!r(O(e))||(n.push(...e.keys),!1));const a=[];for(const t of e){if(null!==t.stop)continue;const e=T(t.x,t.y,S,S),l=o.find(t=>F(O(t),e));if(l||r(e)){n.push(t.key),l&&l.under++;continue}const s=a.find(t=>F(O(t),e));s?s.keys.push(t.key):a.push({keys:[t.key],stops:[],x:t.x,y:t.y,width:S,height:S,under:0})}return{groups:[...o,...a],hidden:n}}function W(e,t,n){let r=-1/0;for(const o of t){const t=Math.max(Math.abs(o.x-e.x),Math.abs(o.y-e.y));r=Math.max(r,0===t?1/0:n+Math.log2(29/t))}return r}function q(e){const t=new MutationObserver(e);return t.observe(document.documentElement,{attributes:!0,attributeFilter:n}),()=>t.disconnect()}var H=t;var _=(...e)=>e.filter(Boolean).join(" "),I=/^(?:\d+|[xytrblse](?:-\d+)?|solid|dashed|dotted|double|hidden|none)$/;function D(e){return e.split(/\s+/).some(e=>{const t=e.search(/[[(]/),n=t<0?e:e.slice(0,t),r=e.slice(n.lastIndexOf(":")+1);return r.startsWith("border-")&&!I.test(r.slice(7))})}var P="ring-2 ring-gray-900 ring-offset-2",Z={portal:{frame:e=>_("relative min-h-72 overflow-hidden rounded-lg border border-gray-200 bg-gray-100",e&&"[&_canvas]:cursor-crosshair"),fill:"absolute inset-0",box:"h-full w-full",failed:"absolute inset-0 grid place-items-center p-6 text-center text-sm text-gray-500",cardInline:"absolute bottom-3 left-3 right-3 z-10 max-h-[calc(100%-1.5rem)] max-w-md overflow-y-auto overscroll-contain",cardFloating:"w-[26rem] overflow-y-auto overscroll-contain",ring:"pointer-events-none rounded-full border-2 border-gray-900 bg-gray-900/15 shadow-[0_0_0_2px_var(--color-white,#fff)]",pinButton:(e,t)=>_("relative grid place-items-center rounded-full cursor-pointer",t&&(null!=e.stop?"h-7 w-7":"h-6 w-6")),pinMark:(e,t,n,r)=>{const o=t&&!r&&null==e.stop&&!e.dot;return _("grid place-items-center rounded-full border-2 font-semibold leading-none shadow-sm transition-transform motion-reduce:transition-none",!D(e.tone)&&"border-white",e.tone,e.dot?"h-4 w-4 opacity-80":null!=e.stop?"h-7 w-7 text-xs ring-2 ring-gray-900":o?"h-8 w-8 text-xs [&_svg]:h-4 [&_svg]:w-4":"h-6 w-6 text-2xs [&_svg]:h-3.5 [&_svg]:w-3.5",t&&(o?"ring-2 ring-gray-900 ring-offset-1":P),e.approximate&&"border-dashed opacity-80",e.faded&&!t&&"opacity-40",n&&"scale-125 opacity-100")},mark:e=>_("grid place-items-center border-2 px-0.5 text-xs font-semibold leading-none shadow-sm",e.stop?"h-7 min-w-7":"h-6 min-w-6",!D(e.tone??"")&&"border-white",e.tone??"bg-gray-900 text-white"),groupButton:"grid place-items-center rounded-full cursor-pointer",groupDisc:(e,t,n)=>_("grid place-items-center rounded-full border-2 border-gray-700 bg-white font-semibold leading-none text-gray-900 shadow-sm",e?"h-7 w-full px-1 text-xs ring-2 ring-gray-900":t?"h-5 w-5 text-3xs":"h-6 w-6 text-2xs",n&&P),badge:e=>_("absolute -right-2 -top-2 grid h-4 min-w-4 place-items-center rounded-full px-0.5 text-3xs font-semibold leading-none shadow",e??"bg-white text-gray-900"),iconHost:"contents"},site:{frame:e=>_("rosh-map-frame",e&&"rosh-map-frame--picking"),fill:"rosh-map-fill",box:"rosh-map-box",failed:"rosh-map-failed",cardInline:"rosh-map-card-inline",cardFloating:"rosh-map-card-floating",ring:"rosh-map-ring",pinButton:(e,t)=>_("rosh-map-target",t&&(null!=e.stop?"rosh-map-target--stop":"rosh-map-target--sized")),pinMark:(e,t,n,r)=>_("rosh-map-pin",e.dot?"rosh-map-pin--dot":null!=e.stop?"rosh-map-pin--stop":null,t&&!r&&null==e.stop&&!e.dot&&"rosh-map-pin--grown",t&&"rosh-map-pin--chosen",e.approximate&&"rosh-map-pin--approximate",e.faded&&!t&&"rosh-map-pin--faded",n&&"rosh-map-pin--pointed"),mark:e=>_("rosh-map-mark",e.stop&&"rosh-map-mark--stop"),groupButton:"rosh-map-target",groupDisc:(e,t,n)=>_("rosh-map-group",e?"rosh-map-group--stops":t?"rosh-map-group--dots":null,n&&"rosh-map-group--chosen"),badge:()=>"rosh-map-badge",iconHost:"rosh-map-icon"}},G="routes",Q=["routes-road","routes-estimate"];function J(e){const t=document.createElement("span");t.style.display="none",t.style.color=e,document.body.appendChild(t);const n=getComputedStyle(t).color||"#2563eb";return t.remove(),U(n)}function U(e){const t=document.createElement("canvas").getContext("2d");if(!t)return"#2563eb";t.fillStyle="#2563eb",t.fillStyle=e,t.fillRect(0,0,1,1);const[n,r,o]=t.getImageData(0,0,1,1).data;return`rgb(${n}, ${r}, ${o})`}var V={light:"https://tiles.openfreemap.org/styles/positron",dark:"https://tiles.openfreemap.org/styles/dark"},X={center:[30,20],zoom:1};var Y="http://www.w3.org/2000/svg",ee=()=>window.matchMedia("(prefers-reduced-motion: reduce)").matches,te=(...e)=>e.filter(Boolean).join(" ");function ne(e){const t=document.createElementNS(Y,"svg");t.setAttribute("viewBox","0 0 24 24"),t.setAttribute("fill","none"),t.setAttribute("stroke","currentColor"),t.setAttribute("stroke-width","2"),t.setAttribute("aria-hidden","true");for(const n of e){const e=document.createElementNS(Y,"path");e.setAttribute("stroke-linecap","round"),e.setAttribute("stroke-linejoin","round"),e.setAttribute("d",n),t.appendChild(e)}return t}function re(e,t){for(const[n,r]of Object.entries(t??{}))e.dataset[n]=r}function oe({pins:t,selectedKey:n,focus:r,onSelect:a,ariaLabel:u,className:g="",children:f,routes:y,fitTo:x,attribution:v,marks:w,groupCrowded:C=!1,noun:L,highlightKey:E=null,picking:A=!1,onPick:z,card:T,cardMinMapWidth:F=480,fullScreen:O,initialView:R=X,cooperativeGestures:_=!1,look:I="portal",theme:D}){const P=o().map,Y=l(null),oe=l(null),se=l(null),ie=l(null),ce=l([]),ue=l(/* @__PURE__ */new Map),de=l(/* @__PURE__ */new Map),pe=l(/* @__PURE__ */new Map),me=l(null),he=l(/* @__PURE__ */new Map),ge=l(""),[fe,ye]=s(!1),[be,xe]=s(!1),ve=d(q,H,()=>!1),we=D??(ve?"dark":"light"),ke=Z[I],Ne=l({onSelect:a,onPick:z,picking:A,pins:t,selectedKey:n,highlightKey:E,groupCrowded:C,strings:P,noun:L,looks:ke});i(()=>{Ne.current={onSelect:a,onPick:z,picking:A,pins:t,selectedKey:n,highlightKey:E,groupCrowded:C,strings:P,noun:L,looks:ke}});const Me=c(()=>{const e=se.current,{pins:t,selectedKey:n}=Ne.current,r=n?t.find(e=>e.key===n):void 0;e&&r&&!e.getBounds().contains([r.lng,r.lat])&&e.easeTo({center:[r.lng,r.lat],duration:ee()?0:400})},[]),Ce=l(!1),Le=c((e,t)=>{const n=se.current,r=ie.current;if(!n||!r)return;const o=n.getZoom();if(o>=17.5){const t=e.indexOf(Ne.current.selectedKey??"");return void Ne.current.onSelect(e[(t+1)%e.length])}const a=e.map(e=>ue.current.get(e).pin),l=new r.LngLatBounds([a[0].lng,a[0].lat],[a[0].lng,a[0].lat]);for(const e of a)l.extend([e.lng,e.lat]);const s=a.map(e=>n.project([e.lng,e.lat])),i=Math.max(...s.map((e,t)=>W(e,s.filter((e,n)=>n!==t),o))),{clientWidth:c,clientHeight:u}=n.getContainer(),d=n.cameraForBounds(l,{padding:Math.min(64,c/4,u/4)})?.zoom??18,p=document.activeElement===t;Ce.current=!0,n.once("moveend",()=>{if(Ce.current=!1,!p)return;const e=a[0].key,t=ue.current.get(e)?.button,n=t&&"none"!==t.style.display?t:[...de.current.values()].find(t=>t.keys.includes(e))?.button;n?.focus({preventScroll:!0})}),n.easeTo({center:l.getCenter(),zoom:Math.min(18,Math.max(o+1,Math.min(d,i))),duration:ee()?0:600})},[]),Ee=c(()=>{const e=se.current,t=ie.current;if(!e||!t||!Y.current||Ce.current&&e.isMoving())return;const{selectedKey:n,highlightKey:r,groupCrowded:o,strings:a,noun:l,looks:s}=Ne.current;for(const[e,t]of ue.current){const a=s.pinMark(t.pin,e===n,e===r,o);t.mark.className!==a&&(t.mark.className=a);const l=e===n?"1":"";t.button.style.zIndex!==l&&(t.button.style.zIndex=l)}let i=null;if(o){const r=e.getContainer().getBoundingClientRect(),o=[...Y.current.querySelectorAll("a[href], button, input, select, textarea, summary, [role='button'], [tabindex]:not([tabindex='-1'])")].filter(e=>!e.closest("[data-pin], [data-pin-group], .maplibregl-canvas")).map(e=>{const t=e.getBoundingClientRect(),n=e.closest("[data-map-card]")?.getBoundingClientRect()??t;return{left:Math.max(t.left,n.left)-r.left,top:Math.max(t.top,n.top)-r.top,right:Math.min(t.right,n.right)-r.left,bottom:Math.min(t.bottom,n.bottom)-r.top}}).filter(e=>e.right>e.left&&e.bottom>e.top);i=K([...ue.current.values()].map(({pin:t})=>{const n=e.project([t.lng,t.lat]);return{key:t.key,x:n.x,y:n.y,stop:t.stop??null}}),o);const c=e=>(l??a.places)(e),u=e.getZoom()<17.5?a.spread:a.cycle,d=(e,t)=>{const n=t?"":"none";e.style.display!==n&&(e.style.display=n)},p=/* @__PURE__ */new Map;for(const r of i.groups){const o=r.under>0?a.closeBy(r.under,c(r.under)):null,l=1===r.keys.length?ue.current.get(r.keys[0]):null;if(l){d(l.button,!0),l.button.setAttribute("aria-label",o?`${l.name}; ${o}`:l.name),l.button.title=o?`${l.title}\n${o}`:l.title;continue}for(const e of r.keys)d(ue.current.get(e).button,!1);const i=r.keys.join(" ");let m=de.current.get(i);if(!m){const n=document.createElement("button");n.type="button",n.dataset.pinGroup="",n.className=s.groupButton,n.append(document.createElement("span"));const o=ue.current.get(r.keys[0]).pin,a={button:n,keys:r.keys,marker:new t.Marker({element:n,anchor:"center"}).setLngLat([o.lng,o.lat]).addTo(e)};n.addEventListener("click",e=>{e.stopPropagation(),Le(a.keys,n)}),m=a}m.keys=r.keys;const h=r.keys.map(e=>ue.current.get(e)),g=r.stops.length>0?B(r.stops):String(h.length),f=r.stops.length>0?a.stops(g):a.group(h.length,c(h.length));m.button.style.width=`${r.width}px`,m.button.style.height=`${r.height}px`,m.button.setAttribute("aria-label",`${f}: ${h.map(e=>e.pin.label).join("; ")}. ${u}${o?`; ${o}`:""}.`),m.button.title=[`${f}:`,...h.map(e=>e.title),...o?[o]:[],u].join("\n");const y=m.button.firstElementChild;y.textContent=g;const b=s.groupDisc(r.stops.length>0,h.every(e=>e.pin.dot),null!=n&&r.keys.includes(n));y.className!==b&&(y.className=b),p.set(i,m)}for(const e of i.hidden)d(ue.current.get(e).button,!1);for(const[e,t]of de.current)p.has(e)||t.marker.remove();de.current=p}if(me.current){const e=r&&i?i.groups.find(e=>e.keys.includes(r)&&e.keys.length>1):void 0,t=r?ue.current.get(r):void 0,n=r?pe.current.get(r):void 0,o=e?{at:ue.current.get(e.keys[0]).pin,width:e.width,height:e.height}:t?{at:t.pin,width:t.button.offsetWidth||(null!=t.pin.stop?j:S),height:t.button.offsetHeight||(null!=t.pin.stop?j:S)}:n?{at:n.mark,width:n.element.offsetWidth||j,height:n.element.offsetHeight||j}:null,a=me.current.getElement();a.style.display=o?"":"none",o&&(me.current.setLngLat([o.at.lng,o.at.lat]),a.style.width=`${o.width+22}px`,a.style.height=`${o.height+22}px`)}},[Le]);i(()=>{if(Ee(),!Y.current)return;const e=new ResizeObserver(()=>Ee());e.observe(Y.current);for(const t of Y.current.children)t.contains(oe.current)||e.observe(t);return()=>e.disconnect()}),i(()=>{let e=!1,t=null,n=null,r=()=>{};return(async()=>{try{const o=await $();if(e||!oe.current)return;ie.current=o,t=new o.Map({container:oe.current,style:V[we],center:R.center,zoom:R.zoom,attributionControl:v?{compact:!0,customAttribution:v}:{compact:!0},dragRotate:!1,pitchWithRotate:!1,touchPitch:!1,maxPitch:0,cooperativeGestures:"coarse"===_?window.matchMedia("(pointer: coarse)").matches:_}),t.touchZoomRotate.disableRotation(),t.keyboard.disableRotation(),t.addControl(new o.NavigationControl({showCompass:!1}),"top-right");const a=document.createElement("div");a.dataset.pinRing="",a.setAttribute("aria-hidden","true"),a.className=Ne.current.looks.ring,a.style.display="none",me.current=new o.Marker({element:a,anchor:"center"}).setLngLat(R.center).addTo(t),t.on("click",e=>{Ne.current.picking&&Ne.current.onPick?.({lat:e.lngLat.lat,lng:e.lngLat.lng})}),t.on("move",Ee),t.on("moveend",Ee),t.on("resize",Ee),t.on("error",e=>console.warn("[map]",e.error?.message)),r=b(oe.current.querySelector(".maplibregl-ctrl-attrib"));const l=t;n=new ResizeObserver(()=>{l.resize(),Me()}),n.observe(oe.current),se.current=t,ye(!0)}catch(t){console.error("[map] could not start",t),e||xe(!0)}})(),()=>{e=!0,n?.disconnect(),r(),ce.current.forEach(e=>e.remove()),ce.current=[],de.current.forEach(e=>e.marker.remove()),de.current.clear(),me.current?.remove(),me.current=null,t?.remove(),se.current=null}},[]);const $e=l(we);i(()=>{fe&&se.current&&$e.current!==we&&($e.current=we,se.current.setStyle(V[we]))},[fe,we]),i(()=>{const e=se.current,n=ie.current;if(!fe||!e||!n)return;ce.current.forEach(e=>e.remove()),ce.current=[],de.current.forEach(e=>e.marker.remove()),de.current.clear(),ue.current.clear(),pe.current.clear();for(const e of he.current.keys())t.some(t=>t.key===e)||he.current.delete(e);const r=Ne.current.strings;for(const o of t){const t=document.createElement("button");t.type="button",t.dataset.pin=o.key,t.className=ke.pinButton(o,C);const a=o.approximate?r.approximate(o.label):o.label,l=o.title??(o.approximate?r.approximateTitle(o.label):o.label);t.setAttribute("aria-label",a),t.title=l;const s=document.createElement("span");if(re(s,o.data),o.dot);else if(null!=o.iconNode){const e=he.current.get(o.key);e&&s.append(e)}else o.icon?.length?s.append(ne(o.icon)):s.textContent=null!=o.stop?String(o.stop):o.glyph;if(t.append(s),o.badge){const e=document.createElement("span");e.setAttribute("aria-hidden","true"),e.className=ke.badge(o.badgeTone),e.textContent=o.badge,t.appendChild(e)}t.addEventListener("click",e=>{e.stopPropagation(),Ne.current.onSelect(o.key)}),ce.current.push(new n.Marker({element:t,anchor:"center"}).setLngLat([o.lng,o.lat]).addTo(e)),ue.current.set(o.key,{pin:o,button:t,mark:s,name:a,title:l})}for(const t of w??[]){const r=document.createElement("div");r.dataset.mapMark=t.key,re(r,t.data),r.className=ke.mark(t),r.textContent=t.text,r.title=t.title??t.label,r.setAttribute("role","img"),r.setAttribute("aria-label",t.label),ce.current.push(new n.Marker({element:r,anchor:"center"}).setLngLat([t.lng,t.lat]).addTo(e)),pe.current.set(t.key,{mark:t,element:r})}Ee()},[fe,t,w,C,Ee,I]),i(()=>{fe&&Ee()},[fe,n,E,Ee]),i(()=>{if(!fe||!n)return;const e=requestAnimationFrame(Me);return()=>cancelAnimationFrame(e)},[fe,n,Me]),i(()=>{const e=se.current,n=ie.current,r=x?[...t,...w??[]].filter(e=>x.includes(e.key)):t;if(!fe||!e||!n||0===r.length)return;const o=r.map(e=>`${e.key}@${e.lat},${e.lng}`).sort().join("|");if(ge.current===o)return;const a=""===ge.current;if(ge.current=o,1===r.length)return void e.jumpTo({center:[r[0].lng,r[0].lat],zoom:13});const l=new n.LngLatBounds([r[0].lng,r[0].lat],[r[0].lng,r[0].lat]);for(const e of r)l.extend([e.lng,e.lat]);e.fitBounds(l,{padding:48,maxZoom:14,animate:!a})},[fe,t,w,x]),i(()=>{const e=se.current;if(!fe||!e)return;const t=(y??[]).filter(e=>e.coordinates.length>=2),n=[...new Set(t.flatMap(e=>e.attribution?[e.attribution]:[]))].join(" · "),r=()=>{const r=function(){const e=document.createElement("span");e.className="text-blue-600",e.style.display="none",document.body.appendChild(e);const t=getComputedStyle(e).color||"#2563eb";return e.remove(),U(t)}(),o={type:"FeatureCollection",features:t.map(e=>({type:"Feature",properties:{key:e.key,estimate:e.estimate,faded:!!e.faded,color:e.color?J(e.color):r},geometry:{type:"LineString",coordinates:e.coordinates}}))},a=["case",["get","faded"],.25,.85],l=["get","color"],s=e.getSource(G);if(s&&(s.attribution||"")!==n){for(const t of Q)e.getLayer(t)&&e.removeLayer(t);e.removeSource(G)}const i=e.getSource(G);i?i.setData(o):e.addSource(G,{type:"geojson",data:o,...n?{attribution:n}:{}}),e.getLayer("routes-road")||e.addLayer({id:"routes-road",type:"line",source:G,filter:["!",["get","estimate"]],layout:{"line-join":"round","line-cap":"round"},paint:{"line-color":l,"line-width":4,"line-opacity":a}}),e.getLayer("routes-estimate")||e.addLayer({id:"routes-estimate",type:"line",source:G,filter:["get","estimate"],layout:{"line-join":"round","line-cap":"round"},paint:{"line-color":l,"line-width":3,"line-dasharray":[1.5,1.5],"line-opacity":a}})},o=()=>{try{r()}catch(e){console.debug("[map] routes wait for the style",e)}};return o(),e.on("style.load",o),e.once("idle",o),()=>{e.off("style.load",o),e.off("idle",o)}},[fe,y,we]),i(()=>{const e=se.current;if(!fe||!e||!r)return;const n=t.find(e=>e.key===r.key);if(!n)return;const o=e.getZoom(),a=C?W(e.project([n.lng,n.lat]),t.filter(e=>e.key!==n.key).map(t=>e.project([t.lng,t.lat])),o):-1/0,l={center:[n.lng,n.lat],zoom:Math.min(18,Math.max(o,13,a))};ee()?e.jumpTo(l):e.flyTo({...l,duration:600})},[fe,r?.n]);const[Se,je]=s(!1);i(()=>{const e=Y.current;if(!e)return;const t=()=>je(e.clientWidth<F);t();const n=new ResizeObserver(t);return n.observe(e),()=>n.disconnect()},[F]);const Ae=n?t.find(e=>e.key===n)??null:null,Be=Ae?.key??null,ze=Ae?.lng??0,Te=Ae?.lat??0,Fe=fe&&!Se&&null!=T&&!!Ae,[Oe,Re]=s(null);i(()=>{const e=se.current,t=ie.current;if(!(Fe&&e&&t&&Be))return;const n=document.createElement("div");n.dataset.mapCard="",n.className=Ne.current.looks.cardFloating;const r=new t.Popup({anchor:"bottom",offset:k,className:"rosh-map-card",maxWidth:"none",closeButton:!1,closeOnClick:!1,closeOnMove:!1,focusAfterOpen:!1}).setLngLat([ze,Te]).setDOMContent(n).addTo(e),o=r.getElement(),a=o.querySelector(".maplibregl-popup-content");a&&Object.assign(a.style,{padding:"0",background:"transparent",borderRadius:"0",boxShadow:"none"});const l=o.querySelector(".maplibregl-popup-tip"),s=Ne.current.looks===Z.site?"var(--rosh-map-pin, #111)":"var(--color-gray-600, #4b5563)";l&&Object.assign(l.style,{borderTopColor:s,borderBottomColor:s}),Re(n);let i=!1,c=!1;const u=(t=!0)=>{if(c)return;if(e.isMoving())return void(i||(i=!0,e.once("moveend",()=>{i=!1,u()})));const{clientWidth:o,clientHeight:a}=e.getContainer(),l=function(e,t){const n=e.getBoundingClientRect().top,r=[...e.querySelectorAll(".maplibregl-ctrl-top-left > *, .maplibregl-ctrl-top-right > *"),...t?.querySelectorAll(":scope > [data-map-control]")??[]];let o=0;for(const e of r){const t=e.getBoundingClientRect();t.height>0&&(o=Math.max(o,t.bottom-n))}return o}(e.getContainer(),Y.current)+8,s=`${N(a,l)}px`;n.style.maxHeight!==s&&(n.style.maxHeight=s);const d=r.getElement(),p=r.getLngLat(),{anchor:m,move:h}=M(e.project(p),{width:d.offsetWidth,height:d.offsetHeight},{width:o,height:a},l);r.options.anchor!==m&&(r.options.anchor=m,r.setLngLat(p)),!t||0===h.x&&0===h.y||e.panBy([-h.x,-h.y],{duration:ee()?0:250}),Ee()},d=new ResizeObserver(()=>u());d.observe(n);const p=()=>u(),m=()=>{i||u(!1)};e.on("resize",p),e.on("moveend",m);let h=!1;const g=ue.current,f=e=>{h=n.contains(e.target)};return document.addEventListener("focusin",f),()=>{if(c=!0,d.disconnect(),e.off("resize",p),e.off("moveend",m),document.removeEventListener("focusin",f),r.remove(),Re(null),h&&(!document.activeElement||document.activeElement===document.body)){const e=g.get(Be)?.button;e&&"none"!==e.style.display&&e.focus({preventScroll:!0})}}},[Fe,Be,ze,Te,Ee]);const Ke=O?.active??!1,We=l(O?.onChange);i(()=>{We.current=O?.onChange}),i(()=>{if(!O)return;const e=document.documentElement;Ke&&!document.fullscreenElement&&e.requestFullscreen&&e.requestFullscreen().catch(()=>{}),!Ke&&document.fullscreenElement&&document.exitFullscreen().catch(()=>{})},[Ke]);const qe=!!O;return i(()=>{if(!qe)return;const e=()=>{document.fullscreenElement||We.current?.(!1)};return document.addEventListener("fullscreenchange",e),()=>document.removeEventListener("fullscreenchange",e)},[qe]),/* @__PURE__ */m("div",{ref:Y,className:te(ke.frame(A),g),children:[
|
|
3
|
+
/* @__PURE__ */h("div",{className:ke.fill,children:/* @__PURE__ */h("div",{ref:oe,className:ke.box,role:"region","aria-label":u})}),be&&/* @__PURE__ */h("p",{className:ke.failed,children:P.failed}),O&&/* @__PURE__ */h(e,{"data-map-control":"",variant:"secondary",size:"sm",className:"absolute left-3 top-3 z-10",onClick:()=>O.onChange(!O.active),leftIcon:/* @__PURE__ */h(le,{leave:O.active}),children:O.active?P.leaveFullScreen:P.fullScreen}),f,null!=T&&!Fe&&/* @__PURE__ */h("div",{"data-map-card":"",className:ke.cardInline,children:T}),Fe&&Oe?p(T,Oe):null,fe&&/* @__PURE__ */h(ae,{pins:t,hosts:he.current,hostClass:ke.iconHost})]})}function ae({pins:e,hosts:t,hostClass:n}){/* @__PURE__ */
|
|
4
|
+
return h(g,{children:e.map(e=>{if(null==e.iconNode||e.dot)return null;let r=t.get(e.key);return r||(r=document.createElement("span"),r.className=n,t.set(e.key,r)),p(e.iconNode,r,e.key)})})}function le({leave:e}){/* @__PURE__ */
|
|
5
|
+
return h(r,e?{name:"collapse","aria-hidden":"true",className:"h-4 w-4",strokeWidth:2}:{name:"expand","aria-hidden":"true",className:"h-4 w-4",strokeWidth:2})}function se(){const[e,t]=s(null);return{highlightKey:e,pointAt:c(e=>{const n=()=>t(e),r=()=>t(t=>t===e?null:t);return{onMouseEnter:n,onMouseLeave:r,onFocus:n,onBlur:r}},[])}}var ie=3e3,ce=e=>!!e?.pending&&3e3,ue=e=>`${e.kind}:${e.id}`,de=e=>("located"===e.placement||"approximate"===e.placement)&&null!=e.lat&&null!=e.lng;function pe(e){switch(e){case"located":return null;case"approximate":return"Approximate: only the suburb or postcode matched";case"pending":return"Locating";case"not_found":return"Not on the map: address not found";case"failed":return"Not on the map: the map service could not be reached";case"no_address":return"Not on the map: no city or postcode"}}var me={importer:{label:"Importer",tone:"bg-sky-600 text-white"},dealer:{label:"Dealer",tone:"bg-purple-600 text-white"},retail:{label:"Retail",tone:"bg-green-600 text-white"},supplier:{label:"Supplier",tone:"bg-sky-600 text-white"},delivery_location:{label:"Delivery location",tone:"bg-amber-600 text-white"},warehouse:{label:"Warehouse",tone:"bg-amber-600 text-white"}},he=["importer","dealer","retail","supplier","delivery_location","warehouse"];function ge(e){return"supplier"===e.kind?"supplier":"customer"===e.kind?e.category||"importer":e.kind}var fe=(e,t=me)=>t[e]?.tone??"bg-gray-700 text-white",ye=(e,t=me)=>t[e]?.label??e,be=(e,t)=>fe(ge(e),t);function xe(e,t,n=me){return null!=t?String(t):(n[ge(e)]?.label??"").charAt(0).toUpperCase()}var ve=["delivery_location","warehouse"];function we(e,t=ve){const n=/* @__PURE__ */new Map;let r=0;for(const o of e)t.includes(o.kind)&&n.set(ue(o),++r);return n}function ke(e){const t={onMap:0,approximate:0,pending:0,off:0};for(const n of e)de(n)?(t.onMap+=1,"approximate"===n.placement&&(t.approximate+=1)):"pending"===n.placement?t.pending+=1:t.off+=1;return t}function Ne(e){const t=[`${e.onMap} on the map`];return e.approximate&&t.push(`${e.approximate} approximate`),e.pending&&t.push(`${e.pending} locating`),e.off&&t.push(`${e.off} not on the map`),t.join(" · ")}function Me(e){const t=[...new Set(e.filter(de).map(ge))];return[...he.filter(e=>t.includes(e)),...t.filter(e=>!he.includes(e))]}function Ce(e,t){return e.filter(e=>!de(e)&&"pending"!==e.placement).map(e=>{const n=t?.get(ue(e)),r=pe(e.placement)?.replace(/^Not on the map: /,"")??"";return{key:ue(e),text:`${null!=n?`${n}. `:""}${e.label}: ${r}`}})}function Le({categories:e,palette:t=me,floating:n=!0}){return e.length<2?null:/* @__PURE__ */h("div",{className:(n?"absolute left-3 top-3 z-10 ":"")+"flex flex-wrap gap-x-3 gap-y-1 rounded-lg border border-gray-200 bg-white px-3 py-2 text-xs text-gray-600 shadow-sm",children:e.map(e=>/* @__PURE__ */m("span",{className:"inline-flex items-center gap-2",children:[
|
|
6
|
+
/* @__PURE__ */h("span",{"aria-hidden":!0,className:`h-2.5 w-2.5 rounded-full ${fe(e,t)}`}),ye(e,t)]},e))})}function Ee({point:t,number:n,onOpen:a,onClose:l,palette:s=me}){const i=pe(t.placement),c=ge(t),u=o().map;/* @__PURE__ */
|
|
7
7
|
return m("section",{"aria-label":u.chosen(t.label),className:"absolute bottom-3 left-3 right-3 z-10 max-w-md space-y-2 rounded-lg border border-gray-200 bg-white p-3 shadow-(--elevation-panel)",children:[
|
|
8
8
|
/* @__PURE__ */m("div",{className:"flex items-start justify-between gap-2",children:[
|
|
9
9
|
/* @__PURE__ */m("div",{className:"min-w-0",children:[
|
|
10
10
|
/* @__PURE__ */m("h3",{className:"text-sm font-semibold text-gray-900 [overflow-wrap:anywhere]",children:[null!=n&&/* @__PURE__ */m("span",{className:"mr-1 text-gray-400",children:[n,"."]}),t.label,t.code&&/* @__PURE__ */h("span",{className:"ml-2 text-xs font-normal text-gray-400",children:t.code})]}),
|
|
11
|
-
/* @__PURE__ */h("p",{className:"text-xs text-gray-500",children:
|
|
11
|
+
/* @__PURE__ */h("p",{className:"text-xs text-gray-500",children:s[c]?ye(c,s):t.category})]}),
|
|
12
12
|
/* @__PURE__ */h("button",{type:"button",onClick:l,"aria-label":u.closeCard,className:"rounded p-0.5 text-gray-400 hover:text-gray-600",children:/* @__PURE__ */h(r,{name:"close","aria-hidden":!0,className:"h-4 w-4",strokeWidth:2})})]}),
|
|
13
|
-
/* @__PURE__ */h("p",{className:"text-sm text-gray-700 [overflow-wrap:anywhere]",children:t.address||"—"}),
|
|
13
|
+
/* @__PURE__ */h("p",{className:"text-sm text-gray-700 [overflow-wrap:anywhere]",children:t.address||"—"}),i&&/* @__PURE__ */h("p",{className:"text-xs text-gray-500",children:i}),t.matched&&"approximate"===t.placement&&/* @__PURE__ */m("p",{className:"text-xs text-gray-400 [overflow-wrap:anywhere]",children:["Placed at: ",t.matched]}),a&&/* @__PURE__ */h("div",{className:"flex justify-end",children:/* @__PURE__ */h(e,{variant:"secondary",size:"sm",onClick:a,children:u.openRecord})})]})}function $e(e,t,{staleTime:n}={}){return f({queryKey:e,queryFn:t,staleTime:n,refetchInterval:e=>ce(e.state.data)})}function Se({queryKey:e,queryFn:t,refreshSignal:n,onOpen:r,ariaLabel:o,title:c="Locations",palette:d=me,numbers:p,className:g="",mapClassName:f="min-h-[240px] flex-1"}){const{data:y,isError:b,refetch:x}=$e(e,t,{staleTime:0}),v=l(!1);i(()=>{v.current?x():v.current=!0},[n]);const[w,k]=s(null),N=u(()=>y?.points??[],[y]),M=u(()=>p??we(N),[p,N]),C=u(()=>N.filter(de).map(e=>({key:ue(e),label:e.label,lat:e.lat,lng:e.lng,glyph:xe(e,M.get(ue(e))??null,d),tone:be(e,d),approximate:"approximate"===e.placement})),[N,M,d]),L=u(()=>Ce(N,M),[N,M]),E=u(()=>Me(N),[N]),$=y?.pending??0,S=N.find(e=>ue(e)===w)??null,j=S&&r?r(S):null;/* @__PURE__ */
|
|
14
14
|
return m("section",{"aria-label":c,className:`flex min-w-0 flex-col ${g}`,children:[
|
|
15
15
|
/* @__PURE__ */m("div",{className:"flex min-h-[30px] items-center justify-between mb-2",children:[
|
|
16
|
-
/* @__PURE__ */h("h3",{className:"text-sm font-semibold text-gray-900",children:c}),y&&/* @__PURE__ */h("span",{className:"text-xs text-gray-500",children:
|
|
17
|
-
/* @__PURE__ */m(
|
|
16
|
+
/* @__PURE__ */h("h3",{className:"text-sm font-semibold text-gray-900",children:c}),y&&/* @__PURE__ */h("span",{className:"text-xs text-gray-500",children:Ne(ke(N))})]}),
|
|
17
|
+
/* @__PURE__ */m(oe,{pins:C,selectedKey:w,focus:null,onSelect:k,ariaLabel:o,className:f,children:[
|
|
18
18
|
/* @__PURE__ */m("div",{className:"absolute left-3 top-3 z-10 flex max-w-[70%] flex-col items-start gap-2",children:[
|
|
19
|
-
/* @__PURE__ */h(
|
|
19
|
+
/* @__PURE__ */h(Le,{categories:E,palette:d,floating:!1}),b&&/* @__PURE__ */m("div",{className:"flex items-center gap-2 rounded-lg border border-gray-200 bg-white px-3 min-h-8 py-1 text-xs text-gray-600 shadow-sm",children:["Couldn’t load the locations.",
|
|
20
20
|
/* @__PURE__ */h("button",{type:"button",onClick:()=>{x()},className:"font-medium text-blue-600 hover:text-blue-800 hover:underline",children:"Try again"})]}),!b&&($>0||L.length>0)&&/* @__PURE__ */m("div",{className:"max-w-full space-y-0.5 rounded-lg border border-gray-200 bg-white px-3 py-2 text-xs shadow-sm","aria-live":"polite",children:[$>0&&/* @__PURE__ */m("p",{className:"flex items-center gap-2 text-gray-500",children:[
|
|
21
|
-
/* @__PURE__ */h(a,{}),"Locating ",$," address",1===$?"":"es"]}),L.slice(0,3).map(e=>/* @__PURE__ */h("p",{className:"truncate text-amber-700",title:e.text,children:e.text},e.key)),L.length>3&&/* @__PURE__ */m("p",{className:"text-gray-500",children:["+",L.length-3," more not on the map"]})]})]}),S&&/* @__PURE__ */h(
|
|
21
|
+
/* @__PURE__ */h(a,{}),"Locating ",$," address",1===$?"":"es"]}),L.slice(0,3).map(e=>/* @__PURE__ */h("p",{className:"truncate text-amber-700",title:e.text,children:e.text},e.key)),L.length>3&&/* @__PURE__ */m("p",{className:"text-gray-500",children:["+",L.length-3," more not on the map"]})]})]}),S&&/* @__PURE__ */h(Ee,{point:S,number:M.get(ue(S))??null,onOpen:j,onClose:()=>k(null),palette:d})]})]})}export{w as CARD_MIN_MAP_WIDTH,y as COMPACT_SHOW,oe as EntityMap,Se as LocationsMap,C as MAPLIBRE_WORKER_FILE,A as MAP_APART_PX,me as MAP_CATEGORIES,Z as MAP_LOOKS,j as MAP_STOP_PX,S as MAP_TARGET_PX,Le as MapLegend,ie as PENDING_POLL_MS,ve as SECONDARY_KINDS,Ee as SelectedCard,N as cardMaxHeight,ye as categoryLabel,fe as categoryTone,b as foldAttributionOnce,de as isOnMap,K as layoutPins,Me as legendCategories,$ as loadMapLibre,we as locationNumbers,L as mapLibreWorkerUrl,ce as mapPointsRefetchInterval,Ce as offMapNotes,ge as pinCategory,xe as pinGlyph,be as pinTone,M as placeCard,pe as placementNote,ue as pointKey,B as stopsLabel,ke as summarize,Ne as summaryText,se as useMapHighlight,$e as useMapPoints,W as zoomApart};
|
|
@@ -0,0 +1,153 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* efficient-shell/map-site.css — EntityMap's SITE look (`look="site"`).
|
|
3
|
+
*
|
|
4
|
+
* The map a public website draws: no frame of its own and no Tailwind over the
|
|
5
|
+
* shell. Every colour, corner and face comes from the host's variables; the
|
|
6
|
+
* values after each comma are only what a host that sets nothing gets.
|
|
7
|
+
*
|
|
8
|
+
* --rosh-map-pin a pin's fill --rosh-map-pin-text its glyph
|
|
9
|
+
* --rosh-map-pin-edge its edge --rosh-map-ring chosen / pointed ring
|
|
10
|
+
* --rosh-map-group a group's fill --rosh-map-group-text its count
|
|
11
|
+
* --rosh-map-radius the frame's corners --rosh-map-frame the frame's ground
|
|
12
|
+
* --rosh-map-font the face of counts and glyphs
|
|
13
|
+
*
|
|
14
|
+
* Load it with MapLibre's own sheet (which EntityMap brings when the map
|
|
15
|
+
* mounts) on the pages that draw a map. Plain CSS on purpose: it is read as
|
|
16
|
+
* written, by any host, with no build step.
|
|
17
|
+
*/
|
|
18
|
+
|
|
19
|
+
.rosh-map-frame {
|
|
20
|
+
position: relative;
|
|
21
|
+
height: 100%;
|
|
22
|
+
min-height: 18rem;
|
|
23
|
+
overflow: hidden;
|
|
24
|
+
border-radius: var(--rosh-map-radius, 0);
|
|
25
|
+
background: var(--rosh-map-frame, transparent);
|
|
26
|
+
}
|
|
27
|
+
.rosh-map-frame--picking canvas { cursor: crosshair; }
|
|
28
|
+
.rosh-map-fill { position: absolute; inset: 0; }
|
|
29
|
+
.rosh-map-box { width: 100%; height: 100%; }
|
|
30
|
+
.rosh-map-failed {
|
|
31
|
+
position: absolute;
|
|
32
|
+
inset: 0;
|
|
33
|
+
display: grid;
|
|
34
|
+
place-items: center;
|
|
35
|
+
padding: 24px;
|
|
36
|
+
text-align: center;
|
|
37
|
+
font: 14px/1.4 var(--rosh-map-font, inherit);
|
|
38
|
+
color: var(--rosh-map-pin, currentColor);
|
|
39
|
+
opacity: 0.7;
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
/* The target: what is pressed. 24 px (a stop 28) when targets are kept apart. */
|
|
43
|
+
/* No `position` here: MapLibre places a marker by its own `position: absolute`,
|
|
44
|
+
and a rule of ours loaded after its sheet would win and drop every pin into
|
|
45
|
+
the page's flow. The badge's absolute corner is held by that same box. */
|
|
46
|
+
.rosh-map-target {
|
|
47
|
+
display: grid;
|
|
48
|
+
place-items: center;
|
|
49
|
+
padding: 0;
|
|
50
|
+
border: 0;
|
|
51
|
+
background: none;
|
|
52
|
+
border-radius: 50%;
|
|
53
|
+
cursor: pointer;
|
|
54
|
+
}
|
|
55
|
+
.rosh-map-target--sized { width: 24px; height: 24px; }
|
|
56
|
+
.rosh-map-target--stop { width: 28px; height: 28px; }
|
|
57
|
+
.rosh-map-target:focus-visible { outline: 2px solid var(--rosh-map-ring, currentColor); outline-offset: 2px; }
|
|
58
|
+
|
|
59
|
+
/* A pin's disc. */
|
|
60
|
+
.rosh-map-pin {
|
|
61
|
+
display: grid;
|
|
62
|
+
place-items: center;
|
|
63
|
+
width: 16px;
|
|
64
|
+
height: 16px;
|
|
65
|
+
border-radius: 50%;
|
|
66
|
+
border: 2px solid var(--rosh-map-pin-edge, #fff);
|
|
67
|
+
background: var(--rosh-map-pin, #111);
|
|
68
|
+
color: var(--rosh-map-pin-text, #fff);
|
|
69
|
+
font: 600 var(--text-2xs, 11px)/1 var(--rosh-map-font, inherit);
|
|
70
|
+
box-shadow: 0 1px 3px rgb(0 0 0 / 0.35);
|
|
71
|
+
transition: transform 120ms ease, box-shadow 120ms ease;
|
|
72
|
+
}
|
|
73
|
+
.rosh-map-pin svg { width: 10px; height: 10px; }
|
|
74
|
+
.rosh-map-pin--dot { width: 12px; height: 12px; opacity: 0.8; }
|
|
75
|
+
.rosh-map-pin--stop { width: 28px; height: 28px; font-size: 12px; }
|
|
76
|
+
.rosh-map-pin--grown { width: 24px; height: 24px; font-size: 12px; }
|
|
77
|
+
.rosh-map-pin--chosen { box-shadow: 0 0 0 2px var(--rosh-map-pin-edge, #fff), 0 0 0 4px var(--rosh-map-ring, #111); }
|
|
78
|
+
.rosh-map-pin--approximate { border-style: dashed; opacity: 0.8; }
|
|
79
|
+
.rosh-map-pin--faded { opacity: 0.4; }
|
|
80
|
+
.rosh-map-pin--pointed { transform: scale(1.25); opacity: 1; }
|
|
81
|
+
|
|
82
|
+
/* A group of pins too close to press apart: its count. */
|
|
83
|
+
.rosh-map-group {
|
|
84
|
+
display: grid;
|
|
85
|
+
place-items: center;
|
|
86
|
+
width: 28px;
|
|
87
|
+
height: 28px;
|
|
88
|
+
border-radius: 50%;
|
|
89
|
+
border: 2px solid var(--rosh-map-pin-edge, #fff);
|
|
90
|
+
background: var(--rosh-map-group, var(--rosh-map-pin, #111));
|
|
91
|
+
color: var(--rosh-map-group-text, var(--rosh-map-pin-text, #fff));
|
|
92
|
+
font: 600 12px/1 var(--rosh-map-font, inherit);
|
|
93
|
+
box-shadow: 0 1px 3px rgb(0 0 0 / 0.35);
|
|
94
|
+
}
|
|
95
|
+
.rosh-map-group--stops { width: 100%; height: 28px; padding: 0 4px; border-radius: 14px; }
|
|
96
|
+
.rosh-map-group--dots { width: 20px; height: 20px; font-size: var(--text-2xs, 11px); }
|
|
97
|
+
.rosh-map-group--chosen { box-shadow: 0 0 0 2px var(--rosh-map-pin-edge, #fff), 0 0 0 4px var(--rosh-map-ring, #111); }
|
|
98
|
+
|
|
99
|
+
/* A point that is not a record (a route's start or end). */
|
|
100
|
+
.rosh-map-mark {
|
|
101
|
+
display: grid;
|
|
102
|
+
place-items: center;
|
|
103
|
+
min-width: 24px;
|
|
104
|
+
height: 24px;
|
|
105
|
+
padding: 0 2px;
|
|
106
|
+
border: 2px solid var(--rosh-map-pin-edge, #fff);
|
|
107
|
+
background: var(--rosh-map-pin, #111);
|
|
108
|
+
color: var(--rosh-map-pin-text, #fff);
|
|
109
|
+
font: 600 12px/1 var(--rosh-map-font, inherit);
|
|
110
|
+
}
|
|
111
|
+
.rosh-map-mark--stop { min-width: 28px; height: 28px; }
|
|
112
|
+
|
|
113
|
+
.rosh-map-badge {
|
|
114
|
+
position: absolute;
|
|
115
|
+
top: -8px;
|
|
116
|
+
right: -8px;
|
|
117
|
+
display: grid;
|
|
118
|
+
place-items: center;
|
|
119
|
+
min-width: 16px;
|
|
120
|
+
height: 16px;
|
|
121
|
+
padding: 0 2px;
|
|
122
|
+
border-radius: 8px;
|
|
123
|
+
background: var(--rosh-map-pin-edge, #fff);
|
|
124
|
+
color: var(--rosh-map-pin, #111);
|
|
125
|
+
font: 600 var(--text-3xs, 9px)/1 var(--rosh-map-font, inherit);
|
|
126
|
+
}
|
|
127
|
+
.rosh-map-icon { display: contents; }
|
|
128
|
+
|
|
129
|
+
/* What the list beside the map points at. */
|
|
130
|
+
.rosh-map-ring {
|
|
131
|
+
pointer-events: none;
|
|
132
|
+
border-radius: 50%;
|
|
133
|
+
border: 2px solid var(--rosh-map-ring, #111);
|
|
134
|
+
background: color-mix(in srgb, var(--rosh-map-ring, #111) 15%, transparent);
|
|
135
|
+
}
|
|
136
|
+
|
|
137
|
+
/* The chosen pin's card: the host's own content, inside these. */
|
|
138
|
+
.rosh-map-card-floating { width: 20rem; max-width: calc(100vw - 48px); overflow-y: auto; overscroll-behavior: contain; }
|
|
139
|
+
.rosh-map-card-inline {
|
|
140
|
+
position: absolute;
|
|
141
|
+
left: 12px;
|
|
142
|
+
right: 12px;
|
|
143
|
+
bottom: 12px;
|
|
144
|
+
z-index: 10;
|
|
145
|
+
max-width: 28rem;
|
|
146
|
+
max-height: calc(100% - 24px);
|
|
147
|
+
overflow-y: auto;
|
|
148
|
+
overscroll-behavior: contain;
|
|
149
|
+
}
|
|
150
|
+
|
|
151
|
+
@media (prefers-reduced-motion: reduce) {
|
|
152
|
+
.rosh-map-pin { transition: none; }
|
|
153
|
+
}
|
package/dist/telemetry/index.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
export{startClientTelemetry}from"../chunk-
|
|
1
|
+
export{startClientTelemetry}from"../chunk-PO3MKL3Z.js";import"../chunk-OHKCQHI7.js";import"../chunk-KNUR2UEG.js";
|
package/dist/ui/index.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
"use client";
|
|
2
|
-
export{APP_UPDATE_POLL_MS,Accordion,AlignmentGrid,AppUpdateBanner,AttachButton,AttachmentDropZone,AttachmentList,AuthScreen,Avatar,AvatarGroup,BORDER_LINE_STYLES,BORDER_WIDTHS,BorderInput,BoxPlotChart,BrandAssetEditor,BudgetBar,CHART_INK,COLUMN_COUNT_MAX,COLUMN_COUNT_WIDTHS,COLUMN_SHARES_EQUAL,COLUMN_SHARE_MIN,CONTROL_HEIGHTS,CORNERS,CORNERS_FOR_THEME,Calendar,CandlestickChart,Card,CartesianPlot,ChartBrush,ChartDefs,ChartDot,ChartFrame,ChartHighlightProvider,ChartSkeleton,ChartTooltip,ChatTemplate,Checkbox_default as Checkbox,CheckoutTemplate,ChordChart,ColorPicker,ColorPickerPanel,ColorSwatch,ColoredBadge,ColumnChart,ComposerAttachments,ContainerFillChart,ContextMenu,CornersInput,CountBadge,DAY_MS,DashboardTemplate,DataTable,DataTablePage,DatePicker_default as DatePicker,DateRangePicker,DateTimePicker_default as DateTimePicker,DescriptionList,DisplayChips,Divider,Drawer,DropdownMenu,ELEVATION_LEVELS,EmailTemplate,EmptyState,EmptyValue,ErrorBoundary,ErrorPage,FONT_WEIGHTS,FilePicker_default as FilePicker,FloatingBar,FormErrorSummary,FormField,FormLayoutPage,FunnelChart,GROUP_COLORS,GROUP_COLORS_SOLID,GalleryTemplate,Grid,HeatmapChart,HelpCenter,HexInput,HistogramChart,IconPicker,IconRail,IconRailButton,ImageFocusPoint,Inline,Input_default as Input,InputNumber_default as InputNumber,Kanban,Label,LanguagePanel,LanguageSelect,LinkPicker,ListFooter,ListLoadError,ListRow,MAX_FRACTION_DIGITS,MOTION,MOTION_DURATIONS,MediaUploadField,MediaUploadGrid,Meter,MetricBar,MilestoneTimeline,NativeSelect,NumericKeypad,POST_PRODUCTION_STATUSES,PageHeader,Pagination,PaperclipGlyph,Paragraph,PieChart,Popover,PortalBrandingProvider,ProductionTimeline,RADAR_SERIES_CAP,RADIUS_ROLES,ROW_HEIGHTS,RadarChart,RadialBarChart,Radio_default as Radio,RadioGroup,RangeChart,RankedBars,SCATTER_SERIES_CAP,SERIES_SLOT_COUNT,SERIES_VARS,SPACING_ROLES,SPACING_SCALE,STAGES,STATUS_VARS,SankeyChart,ScatterChart,SearchableSelect,Segmented,Select_default as Select,SettingRow,ShowWhen,SidebarActionButton,SidebarGroupLabel,SidebarNavGroup,SidebarNavItem,SidesEachToggle,SidesInput,Skeleton,Slider,SliderGroup,Snippet,SortableList,Sparkline,SplitButton_default as SplitButton,Stack,StatCard,StatTile,Statistic,StatusBadge,StatusBadgeProvider,Stepper,SunburstChart,Switch_default as Switch,TYPE_SCALE,Tabs,TagInput,Text,TextLinkField,TextToolbar,TileButton_default as TileButton,TimeAgo,TimePicker_default as TimePicker,TimeSeriesChart,TimelineTrack,Title,TopNav,TransferProgress,Tree,TreeEmptySlot,TreeGroup,TreeGroupLabel,TreeRow,TreeSeam,TreemapChart,WaterfallChart,WidthsBar,angleScale,appendKey,applyCorners,applyIconSet,applyThemePrefs,arcPath,areaBetween,areaFrom,assignSeriesSlots,autoHighlightIndex,backspace,bandScale,binValues,borderSides,borderStartEach,budgetState,bumpPath,calcOverall,calcReportOverall,colorFill,colorSwatchClasses,columnSharesWidths,cornersFor,curvePath,dashFor,fillFor,fillId,fmtSliderDate,fromKey as fromDateKey,glowId,groundId,groupColors,hexToHsv,highlightOpacity,hsvToHex,isSeverityTone,isShown,isSpacingStep,labelClasses,ladderScale,languageSelectWidth,linearPath,linearScale,logScale,maskId,mediaFileName,monotonePath,niceAxis,niceMax,parseHexColor,polygonPoints,radiusScale,resolveColumnShares,resolveColumnWidths,resolveCorners,resolvePortalBrandAsset,resolveSeriesColor,resolveSeriesColorWithin,resolveTheme,seriesColor,severityOf,sidesStartEach,splinePath,squarify,stagger,stepPath,tabButtonId,tabPanelId,textToolbarRows,textToolbarWindowColumns,toKey as toDateKey,toDayMs,toISODate,toggleSeriesSlot,useAppUpdate,useClickOutside,useContextMenu,useDebouncedValue,useHighlight,usePlotWidth,usePortalBranding,useProductionTimeline,useStatusLabel,useTheme,useTransferProgress}from"../chunk-
|
|
2
|
+
export{APP_UPDATE_POLL_MS,Accordion,AlignmentGrid,AppUpdateBanner,AttachButton,AttachmentDropZone,AttachmentList,AuthScreen,Avatar,AvatarGroup,BORDER_LINE_STYLES,BORDER_WIDTHS,BorderInput,BoxPlotChart,BrandAssetEditor,BudgetBar,CHART_INK,COLUMN_COUNT_MAX,COLUMN_COUNT_WIDTHS,COLUMN_SHARES_EQUAL,COLUMN_SHARE_MIN,CONTROL_HEIGHTS,CORNERS,CORNERS_FOR_THEME,Calendar,CandlestickChart,Card,CartesianPlot,ChartBrush,ChartDefs,ChartDot,ChartFrame,ChartHighlightProvider,ChartSkeleton,ChartTooltip,ChatTemplate,Checkbox_default as Checkbox,CheckoutTemplate,ChordChart,ColorPicker,ColorPickerPanel,ColorSwatch,ColoredBadge,ColumnChart,ComposerAttachments,ContainerFillChart,ContextMenu,CornersInput,CountBadge,DAY_MS,DashboardTemplate,DataTable,DataTablePage,DatePicker_default as DatePicker,DateRangePicker,DateTimePicker_default as DateTimePicker,DescriptionList,DisplayChips,Divider,Drawer,DropdownMenu,ELEVATION_LEVELS,EmailTemplate,EmptyState,EmptyValue,ErrorBoundary,ErrorPage,FONT_WEIGHTS,FilePicker_default as FilePicker,FloatingBar,FormErrorSummary,FormField,FormLayoutPage,FunnelChart,GROUP_COLORS,GROUP_COLORS_SOLID,GalleryTemplate,Grid,HeatmapChart,HelpCenter,HexInput,HistogramChart,IconPicker,IconRail,IconRailButton,ImageFocusPoint,Inline,Input_default as Input,InputNumber_default as InputNumber,Kanban,Label,LanguagePanel,LanguageSelect,LinkPicker,ListFooter,ListLoadError,ListRow,MAX_FRACTION_DIGITS,MOTION,MOTION_DURATIONS,MediaUploadField,MediaUploadGrid,Meter,MetricBar,MilestoneTimeline,NativeSelect,NumericKeypad,POST_PRODUCTION_STATUSES,PageHeader,Pagination,PaperclipGlyph,Paragraph,PieChart,Popover,PortalBrandingProvider,ProductionTimeline,RADAR_SERIES_CAP,RADIUS_ROLES,ROW_HEIGHTS,RadarChart,RadialBarChart,Radio_default as Radio,RadioGroup,RangeChart,RankedBars,SCATTER_SERIES_CAP,SERIES_SLOT_COUNT,SERIES_VARS,SPACING_ROLES,SPACING_SCALE,STAGES,STATUS_VARS,SankeyChart,ScatterChart,SearchableSelect,Segmented,Select_default as Select,SettingRow,ShowWhen,SidebarActionButton,SidebarGroupLabel,SidebarNavGroup,SidebarNavItem,SidesEachToggle,SidesInput,Skeleton,Slider,SliderGroup,Snippet,SortableList,Sparkline,SplitButton_default as SplitButton,Stack,StatCard,StatTile,Statistic,StatusBadge,StatusBadgeProvider,Stepper,SunburstChart,Switch_default as Switch,TYPE_SCALE,Tabs,TagInput,Text,TextLinkField,TextToolbar,TileButton_default as TileButton,TimeAgo,TimePicker_default as TimePicker,TimeSeriesChart,TimelineTrack,Title,TopNav,TransferProgress,Tree,TreeEmptySlot,TreeGroup,TreeGroupLabel,TreeRow,TreeSeam,TreemapChart,WaterfallChart,WidthsBar,angleScale,appendKey,applyCorners,applyIconSet,applyThemePrefs,arcPath,areaBetween,areaFrom,assignSeriesSlots,autoHighlightIndex,backspace,bandScale,binValues,borderSides,borderStartEach,budgetState,bumpPath,calcOverall,calcReportOverall,colorFill,colorSwatchClasses,columnSharesWidths,cornersFor,curvePath,dashFor,fillFor,fillId,fmtSliderDate,fromKey as fromDateKey,glowId,groundId,groupColors,hexToHsv,highlightOpacity,hsvToHex,isSeverityTone,isShown,isSpacingStep,labelClasses,ladderScale,languageSelectWidth,linearPath,linearScale,logScale,maskId,mediaFileName,monotonePath,niceAxis,niceMax,parseHexColor,polygonPoints,radiusScale,resolveColumnShares,resolveColumnWidths,resolveCorners,resolvePortalBrandAsset,resolveSeriesColor,resolveSeriesColorWithin,resolveTheme,seriesColor,severityOf,sidesStartEach,splinePath,squarify,stagger,stepPath,tabButtonId,tabPanelId,textToolbarRows,textToolbarWindowColumns,toKey as toDateKey,toDayMs,toISODate,toggleSeriesSlot,useAppUpdate,useClickOutside,useContextMenu,useDebouncedValue,useHighlight,usePlotWidth,usePortalBranding,useProductionTimeline,useStatusLabel,useTheme,useTransferProgress}from"../chunk-V63KEB2P.js";export{Breadcrumbs}from"../chunk-7SNZKUCI.js";export{BrandMark,GlobalSearch,openGlobalSearch,pushRecent as pushRecentSearch,resolveBrandMarkTreatment,sanitizeRecent as sanitizeRecentSearches}from"../chunk-UB2IV2II.js";export{EditableGrid}from"../chunk-S5XQ5DBA.js";import"../chunk-BR22X7E5.js";import"../chunk-NZBX24NL.js";export{ResizeHandle,SidebarLayout}from"../chunk-TXLJEUYC.js";export{ENGLISH,SHELL_LANGUAGE_STORAGE_KEY,ShellLanguageProvider,matchShellLanguage,readSavedShellLanguage,resolveShellLanguage,saveShellLanguage,useShellLanguage}from"../chunk-R42GJPQL.js";export{ICON_NAMES,ICON_SET_FOR_THEME,THEME_ICON_SETS,iconSetFor,isIconName,loadIconSet}from"../chunk-AKCBXPRY.js";export{Banner,Markdown,Markdown as MarkdownLite,StepChain,StepChainItem,Textarea_default as Textarea}from"../chunk-EQZ7DF3J.js";export{IconButton_default as IconButton}from"../chunk-EU4BCXGA.js";export{INPUT_BASE,INPUT_SIZES,PLACEHOLDER_INK,inputClasses}from"../chunk-HJQAE6SP.js";export{isSafeLinkHref}from"../chunk-PJPK2ADX.js";export{UNDOABLE_MS,toast_default as toast}from"../chunk-OUURHOIS.js";export{ALT,ALT_SHIFT_D,ALT_SHIFT_E,ALT_SHIFT_N,CMD_A,CMD_DOT,CMD_ENTER,CMD_K,CMD_S,ENTER,Kbd,MOD,NEXT_CHUNK_PATH_PREFIX,Result,SHIFT,STALE_CHUNK_RELOAD_COOLDOWN_MS,STALE_CHUNK_RELOAD_KEY,ShellPrefsProvider,VITE_PRELOAD_ERROR_EVENT,installStaleChunkReload,isMac,isStaleChunkError,useIsMobile,useLocalStoragePrefs,useShellPrefs}from"../chunk-FNR5SPQM.js";import"../chunk-5A7MWTXX.js";export{PopupMenu,PopupMenuDivider,PopupMenuItem,PopupMenuLabel,PopupSubmenu,leavesContextMenuAlone}from"../chunk-K73JEGD5.js";export{VERSION}from"../chunk-OHKCQHI7.js";import"../chunk-KNUR2UEG.js";export{ConfirmProvider,Dialog,confirm,confirmDestructive,prompt,useConfirm,useFocusTrap,useScrollLock}from"../chunk-VOUSFISE.js";import"../chunk-UVBK6YSR.js";export{Button_default as Button}from"../chunk-DELNCIUK.js";export{MENU_MAX_HEIGHT,POPUP_MAX_WIDTH,Tooltip,popupBounds,useDropdownPosition}from"../chunk-RDLWLATO.js";export{GLASS_DIVIDER,glassStyle,solidSurfaceStyle}from"../chunk-7IQ3B77H.js";import"../chunk-D65T4H6J.js";export{OVERLAY_OPEN_EVENT,Z_LAYERS,dismissPopups,registerModalEscapeInterceptor}from"../chunk-FIEA5CGB.js";export{buttonClasses,iconButtonClasses}from"../chunk-K7PQXJO7.js";export{Icon,activeIconSet,iconSets,iconsVersion,registerIconSet,registerIcons,resolveIcon,setDefaultIconSet,setIconSet,subscribeIcons}from"../chunk-YT4B3NSV.js";export{FileIntakeAlert,acceptsFile,useFileIntake}from"../chunk-SGIM64RL.js";export{DEFAULT_SHELL_STRINGS,ShellStringsProvider,useShellLocale,useShellStrings}from"../chunk-HQLDTFAF.js";import"../chunk-C3QOHMR6.js";export{FOCAL_DEFAULT,FOCAL_NUDGE_COARSE,FOCAL_NUDGE_STEP,focalFromRect,formatFocal,nudgeFocal,parseFocal}from"../chunk-AP2QEJXQ.js";export{DATE_FORMAT_OPTIONS,EMPTY_VALUE,TZ_AUTO,currencyDecimals,currencySymbol,firstDayOfWeek,formatBytes,formatDate,formatDateTime,formatMoney,formatTime,getUserDateFormat,getUserTimezone,setCurrencyFormats,setUserDateFormat,setUserTimezone,syncTimezoneFromProfile,timeAgo}from"../chunk-W32SKK3D.js";export{LoadingSpinner,SpinnerRing}from"../chunk-2J6F4EE7.js";
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "efficient-shell",
|
|
3
|
-
"version": "7.
|
|
3
|
+
"version": "7.52.0",
|
|
4
4
|
"description": "Desktop-style React UI shell — windows, taskbar, start menu, sticky notes, frosted glass theming, and bundled apps.",
|
|
5
5
|
"license": "UNLICENSED",
|
|
6
6
|
"author": "Efficient Pty Ltd",
|
|
@@ -132,6 +132,7 @@
|
|
|
132
132
|
"./ui.css": "./dist/ui.css",
|
|
133
133
|
"./themes.css": "./dist/themes.css",
|
|
134
134
|
"./brand.css": "./dist/brand.css",
|
|
135
|
+
"./map-site.css": "./dist/map-site.css",
|
|
135
136
|
"./ai.css": "./dist/ai.css"
|
|
136
137
|
},
|
|
137
138
|
"bin": {
|
package/dist/chunk-5P2GSSZR.js
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
var r="7.50.0",a=r;export{a as APP_VERSION,r as VERSION};
|