efficient-shell 8.24.0 → 8.30.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (143) hide show
  1. package/README.md +31 -1
  2. package/dist/{Browser-NYGNSRS3.js → Browser-5DL5WHEM.js} +13 -13
  3. package/dist/Calculator-WW7WTG43.js +29 -0
  4. package/dist/{CurrencyConverter-ET6QOMC6.js → CurrencyConverter-XBC732QI.js} +5 -5
  5. package/dist/{Documents-76QU7XPF.js → Documents-7MFHD73Z.js} +11 -11
  6. package/dist/{Files-WBRBACPC.js → Files-4DKRC3S2.js} +34 -34
  7. package/dist/{Notepad-G4EQGYQB.js → Notepad-BCK4LMG2.js} +9 -9
  8. package/dist/{PomodoroTimer-R3SOUADN.js → PomodoroTimer-KH4PYCYQ.js} +6 -6
  9. package/dist/{Preview-UMQ6DJIP.js → Preview-FP6XMPQR.js} +18 -18
  10. package/dist/{Sidebar-YB4OVUG5.js → Sidebar-3HM646LN.js} +34 -34
  11. package/dist/{Spreadsheet-EFCVA5SM.js → Spreadsheet-FSDGQCKT.js} +13 -13
  12. package/dist/{Stock-T2VMQMOG.js → Stock-M4EEWA57.js} +3 -3
  13. package/dist/{Weather-UKIN7EGC.js → Weather-WLAS7FBY.js} +19 -19
  14. package/dist/{WorldClock-GWQIZZML.js → WorldClock-WRD7DV2S.js} +4 -4
  15. package/dist/ai/index.d.ts +61 -3
  16. package/dist/ai/index.js +37 -37
  17. package/dist/ai.css +1 -1
  18. package/dist/apps/index.d.ts +6 -2
  19. package/dist/apps/index.js +1 -1
  20. package/dist/bin/media-host-check.js +1 -1
  21. package/dist/bin/ui-check.js +1 -1
  22. package/dist/chunk-24AL3CDS.js +1 -0
  23. package/dist/{chunk-DISSJYKV.js → chunk-2OLSY4GE.js} +12 -12
  24. package/dist/{chunk-PPFMXLEX.js → chunk-2RBWQVDC.js} +8 -8
  25. package/dist/{chunk-TXS6JKFV.js → chunk-35YON46D.js} +1 -1
  26. package/dist/{chunk-VX6V3B3N.js → chunk-3H74IBFS.js} +3 -3
  27. package/dist/{chunk-YGZMD6TZ.js → chunk-3IYMTPGR.js} +12 -12
  28. package/dist/{chunk-L4EH3ZYS.js → chunk-3ZRZWOFZ.js} +3 -3
  29. package/dist/{chunk-MTXTJLFK.js → chunk-4SQNLU2Q.js} +1 -1
  30. package/dist/{chunk-B55IXYDR.js → chunk-53ROHXAV.js} +2 -2
  31. package/dist/{chunk-TS2Q55PK.js → chunk-6CNFVUT6.js} +1 -1
  32. package/dist/{chunk-QFA5COE6.js → chunk-6YH7JKRE.js} +2 -2
  33. package/dist/{chunk-KZEQJVBO.js → chunk-7FI6NVC7.js} +3 -3
  34. package/dist/{chunk-XHBQPVNG.js → chunk-BDCMFW5N.js} +1 -1
  35. package/dist/{chunk-NHCRQ7SW.js → chunk-BGLKEWVR.js} +1 -1
  36. package/dist/chunk-CUZQVBPC.js +1 -0
  37. package/dist/chunk-DJCC3WBR.js +14 -0
  38. package/dist/chunk-DPDA3AJL.js +1 -0
  39. package/dist/{chunk-ZF3QKPTL.js → chunk-E6ZXYTTQ.js} +1 -1
  40. package/dist/chunk-EMXR74QM.js +7 -0
  41. package/dist/{chunk-GWIPZKZJ.js → chunk-ETNNJUAX.js} +3 -3
  42. package/dist/{chunk-WJRBDHXD.js → chunk-F4GLNQIX.js} +1 -1
  43. package/dist/{chunk-LLLAIPFX.js → chunk-GECH6THP.js} +1 -1
  44. package/dist/chunk-HJH4WIBC.js +19 -0
  45. package/dist/{chunk-ATX4N3L4.js → chunk-I62MCTYI.js} +4 -4
  46. package/dist/{chunk-ZEKM6HAA.js → chunk-M2AIC7IK.js} +2 -2
  47. package/dist/{chunk-RUHFXBDS.js → chunk-MXVJHVVI.js} +5 -5
  48. package/dist/{chunk-PJCVNFWM.js → chunk-O6JX6RDX.js} +7 -7
  49. package/dist/{chunk-X7XJBK2E.js → chunk-OVVXSAGE.js} +4 -4
  50. package/dist/{chunk-QZXJHRFI.js → chunk-Q4TGK2K6.js} +6 -6
  51. package/dist/{chunk-JXZIBQ4V.js → chunk-REOSJZED.js} +24 -24
  52. package/dist/chunk-S6OB6HJB.js +1 -0
  53. package/dist/chunk-U6BEF6GQ.js +5 -0
  54. package/dist/chunk-V3UIAX5G.js +21 -0
  55. package/dist/{chunk-OS4CR7EE.js → chunk-V4KQUOUP.js} +4 -4
  56. package/dist/{chunk-KPTC2JPT.js → chunk-VEO34YZK.js} +1 -1
  57. package/dist/{chunk-UX6HNRFV.js → chunk-VP3CMJTT.js} +7 -7
  58. package/dist/{chunk-S4DCWKIY.js → chunk-WPTG7ZC5.js} +51 -51
  59. package/dist/{chunk-AX7KPMDV.js → chunk-WSODT2L5.js} +2 -2
  60. package/dist/chunk-WZNGOA4Z.js +1 -0
  61. package/dist/chunk-Z37R2OCE.js +10 -0
  62. package/dist/{chunk-NFR4QZL2.js → chunk-ZZNOQQWE.js} +4 -4
  63. package/dist/data/ListLoadError.js +1 -1
  64. package/dist/format/index.d.ts +3 -0
  65. package/dist/format/index.js +1 -1
  66. package/dist/forms/BorderInput.js +1 -1
  67. package/dist/forms/BrandAssetEditor.js +1 -1
  68. package/dist/forms/ColorPicker.js +1 -1
  69. package/dist/forms/ComposerAttachments.js +1 -1
  70. package/dist/forms/CornersInput.js +1 -1
  71. package/dist/forms/DisplayChips.js +1 -1
  72. package/dist/forms/IconPicker.js +1 -1
  73. package/dist/forms/InputNumber.js +1 -1
  74. package/dist/forms/LinkPicker.js +1 -1
  75. package/dist/forms/MediaLibrary.js +1 -1
  76. package/dist/forms/MediaUploadField.js +1 -1
  77. package/dist/forms/MediaUploadGrid.js +1 -1
  78. package/dist/forms/MediaUsedInList.js +1 -1
  79. package/dist/forms/PositionInput.js +1 -1
  80. package/dist/forms/Select.d.ts +16 -1
  81. package/dist/forms/Select.js +1 -1
  82. package/dist/forms/SidesInput.js +1 -1
  83. package/dist/forms/Slider.js +1 -1
  84. package/dist/forms/Snippet.js +1 -1
  85. package/dist/forms/SplitButton.js +1 -1
  86. package/dist/forms/TextToolbar.js +1 -1
  87. package/dist/forms/WidthsBar.js +1 -1
  88. package/dist/forms/color.d.ts +35 -1
  89. package/dist/forms/color.js +1 -1
  90. package/dist/hooks/useTheme.js +1 -1
  91. package/dist/icons/efficient-glyphs.js +1 -1
  92. package/dist/icons/efficient-looks.js +1 -1
  93. package/dist/icons/efficient.js +1 -1
  94. package/dist/icons/index.js +1 -1
  95. package/dist/icons/looks/map.js +1 -1
  96. package/dist/icons/sets.js +1 -1
  97. package/dist/index.d.ts +4 -2
  98. package/dist/index.js +241 -241
  99. package/dist/map/index.js +1 -1
  100. package/dist/map-site.css +43 -0
  101. package/dist/page-tabs/index.js +5 -5
  102. package/dist/shell/AppUpdateBanner.js +1 -1
  103. package/dist/shell/ContextMenu.js +1 -1
  104. package/dist/shell/DropdownMenu.js +1 -1
  105. package/dist/shell/EditableGrid.js +1 -1
  106. package/dist/shell/HelpCenter.js +1 -1
  107. package/dist/shell/ImageLightbox.js +1 -1
  108. package/dist/shell/LanguageSelect.js +1 -1
  109. package/dist/shell/Markdown.d.ts +26 -2
  110. package/dist/shell/Markdown.js +1 -1
  111. package/dist/shell/PopupMenu.js +1 -1
  112. package/dist/shell/SearchableSelect.js +1 -1
  113. package/dist/shell/SettingReset.js +1 -1
  114. package/dist/shell/SettingRow.js +1 -1
  115. package/dist/shell/TopNav.d.ts +3 -1
  116. package/dist/shell/TopNav.js +1 -1
  117. package/dist/telemetry/index.js +1 -1
  118. package/dist/templates/ChatTemplate.js +1 -1
  119. package/dist/templates/CheckoutTemplate.js +1 -1
  120. package/dist/templates/DataTablePage.js +1 -1
  121. package/dist/templates/EmailTemplate.js +1 -1
  122. package/dist/templates/FormLayoutPage.js +1 -1
  123. package/dist/ui/index.d.ts +4 -2
  124. package/dist/ui/index.js +1 -1
  125. package/dist/utils/escapeHtml.d.ts +14 -0
  126. package/dist/utils/escapeHtml.js +1 -0
  127. package/dist/utils/slugify.d.ts +16 -0
  128. package/dist/utils/slugify.js +1 -0
  129. package/dist/version.js +1 -1
  130. package/package.json +1 -1
  131. package/dist/Calculator-EN6VDDRG.js +0 -29
  132. package/dist/chunk-4DAN4Q6P.js +0 -21
  133. package/dist/chunk-4LXH6DCN.js +0 -1
  134. package/dist/chunk-6WSTN5A3.js +0 -14
  135. package/dist/chunk-CUT7PAXL.js +0 -7
  136. package/dist/chunk-H245LLX4.js +0 -1
  137. package/dist/chunk-KBGC53FI.js +0 -1
  138. package/dist/chunk-NT26CWMZ.js +0 -5
  139. package/dist/chunk-RNJ3MNO5.js +0 -1
  140. package/dist/chunk-VTVOQS5L.js +0 -20
  141. package/dist/chunk-WDXJWC3Y.js +0 -7
  142. /package/dist/{chunk-A5ALFLWZ.js → chunk-2HDDCXTW.js} +0 -0
  143. /package/dist/{chunk-BR22X7E5.js → chunk-G6DKCCWH.js} +0 -0
package/dist/map/index.js CHANGED
@@ -1,5 +1,5 @@
1
1
  "use client";
2
- import{Button_default as e}from"../chunk-4IU5BSVE.js";import"../chunk-K7U4RWXJ.js";import"../chunk-VH6GB73Q.js";import{Icon as t}from"../chunk-KIBL6M3T.js";import"../chunk-J75ZT2JQ.js";import{SpinnerRing as n}from"../chunk-Q5MD3VY6.js";import"../chunk-MRJKZWWV.js";import"../chunk-22S6LG6D.js";import"../chunk-PGN5ME7B.js";import"../chunk-62LW225J.js";import"../chunk-GLUJS42B.js";import"../chunk-D65T4H6J.js";import{rootIsDark as r,ROOT_THEME_ATTRIBUTES as o}from"../chunk-DTJRIWFR.js";import"../chunk-TWVUQUUD.js";import{useShellStrings as a}from"../chunk-E6UCGCOC.js";import"../chunk-C3QOHMR6.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,k=12,w=480,v={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-k-x-10-16));function M(e,t,n,r=12){const o=e.y-x-r,a=n.height-e.y-x-k,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<k?(i="-left",c=Math.max(0,k-e.x)):e.x+t.width/2>n.width-k&&(i="-right",c=-Math.max(0,e.x-(n.width-k))),{anchor:`${l?"bottom":"top"}${i}`,move:{x:c,y:s}}}var C="maplibre-gl-worker.mjs",L=e=>`/maplibre-gl/${e}/${C}`,j=null;function E(){return j??=Promise.all([import("maplibre-gl"),import("maplibre-gl/dist/maplibre-gl.css")]).then(([e])=>(e.setWorkerUrl(L(e.getVersion())),e)).catch(e=>{throw j=null,e}),j}var S=null;var $=24,B=28,z=29;function A(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 R(e){const t=Math.max(B,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 W(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 F(e){for(let t=0;t<e.length;t++)for(let n=t+1;n<e.length;n++)if(W(O(e[t]),O(e[n])))return[e[t],e[n]];return null}function K(e,t=[]){const n=[],r=e=>t.some(t=>W(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:B,height:B,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=R(A(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,$,$),l=o.find(t=>W(O(t),e));if(l||r(e)){n.push(t.key),l&&l.under++;continue}const s=a.find(t=>W(O(t),e));s?s.keys.push(t.key):a.push({keys:[t.key],stops:[],x:t.x,y:t.y,width:$,height:$,under:0})}return{groups:[...o,...a],hidden:n}}function q(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 _(e){const t=new MutationObserver(e);return t.observe(document.documentElement,{attributes:!0,attributeFilter:o}),()=>t.disconnect()}var D=r;var H=(...e)=>e.filter(Boolean).join(" "),I=/^(?:\d+|[xytrblse](?:-\d+)?|solid|dashed|dotted|double|hidden|none)$/;function P(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 U="ring-2 ring-gray-900 ring-offset-2",G={portal:{frame:e=>H("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)=>H("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 H("grid place-items-center rounded-full border-2 font-semibold leading-none shadow-sm transition-transform motion-reduce:transition-none",!P(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":U),e.approximate&&"border-dashed opacity-80",e.faded&&!t&&"opacity-40",n&&"scale-125 opacity-100")},mark:e=>H("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",!P(e.tone??"")&&"border-white",e.tone??"bg-gray-900 text-white"),groupButton:"grid place-items-center rounded-full cursor-pointer",groupDisc:(e,t,n)=>H("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&&U),badge:e=>H("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=>H("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)=>H("rosh-map-target",t&&(null!=e.stop?"rosh-map-target--stop":"rosh-map-target--sized")),pinMark:(e,t,n,r)=>H("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=>H("rosh-map-mark",e.stop&&"rosh-map-mark--stop"),groupButton:"rosh-map-target",groupDisc:(e,t,n)=>H("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",sheet:function(){return S??=import("efficient-shell/map-site.css").catch(e=>{throw S=null,e}),S}}},J="routes",V=["routes-road","routes-estimate"];function Z(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(),Q(n)}function Q(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 X={light:"https://tiles.openfreemap.org/styles/positron",dark:"https://tiles.openfreemap.org/styles/dark"},Y={center:[30,20],zoom:1};var ee="http://www.w3.org/2000/svg",te=()=>window.matchMedia("(prefers-reduced-motion: reduce)").matches,ne=(...e)=>e.filter(Boolean).join(" ");function re(e){const t=document.createElementNS(ee,"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(ee,"path");e.setAttribute("stroke-linecap","round"),e.setAttribute("stroke-linejoin","round"),e.setAttribute("d",n),t.appendChild(e)}return t}function oe(e,t){for(const[n,r]of Object.entries(t??{}))e.dataset[n]=r}function ae({pins:t,selectedKey:n,focus:r,onSelect:o,ariaLabel:u,className:g="",children:f,routes:y,fitTo:x,attribution:k,marks:w,groupCrowded:C=!1,noun:L,highlightKey:j=null,picking:S=!1,onPick:z,card:R,cardMinMapWidth:T=480,fullScreen:W,initialView:O=Y,cooperativeGestures:F=!1,look:H="portal",theme:I}){const P=a().map,U=l(null),ee=l(null),ae=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),ke=d(_,D,()=>!1),we=I??(ke?"dark":"light"),ve=G[H],Ne=l({onSelect:o,onPick:z,picking:S,pins:t,selectedKey:n,highlightKey:j,groupCrowded:C,strings:P,noun:L,looks:ve});i(()=>{Ne.current={onSelect:o,onPick:z,picking:S,pins:t,selectedKey:n,highlightKey:j,groupCrowded:C,strings:P,noun:L,looks:ve}}),i(()=>{ve.sheet?.().catch(e=>console.warn("[map] could not load the look's stylesheet",e))},[ve]);const Me=c(()=>{const e=ae.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:te()?0:400})},[]),Ce=l(!1),Le=c((e,t)=>{const n=ae.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)=>q(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:te()?0:600})},[]),je=c(()=>{const e=ae.current,t=ie.current;if(!e||!t||!U.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=[...U.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?A(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?B:$),height:t.button.offsetHeight||(null!=t.pin.stop?B:$)}:n?{at:n.mark,width:n.element.offsetWidth||B,height:n.element.offsetHeight||B}: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(je(),!U.current)return;const e=new ResizeObserver(()=>je());e.observe(U.current);for(const t of U.current.children)t.contains(ee.current)||e.observe(t);return()=>e.disconnect()}),i(()=>{let e=!1,t=null,n=null,r=()=>{};return(async()=>{try{const o=await E();if(e||!ee.current)return;ie.current=o,t=new o.Map({container:ee.current,style:X[we],center:O.center,zoom:O.zoom,attributionControl:k?{compact:!0,customAttribution:k}:{compact:!0},dragRotate:!1,pitchWithRotate:!1,touchPitch:!1,maxPitch:0,cooperativeGestures:"coarse"===F?window.matchMedia("(pointer: coarse)").matches:F}),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(O.center).addTo(t),t.on("click",e=>{Ne.current.picking&&Ne.current.onPick?.({lat:e.lngLat.lat,lng:e.lngLat.lng})}),t.on("move",je),t.on("moveend",je),t.on("resize",je),t.on("error",e=>console.warn("[map]",e.error?.message)),r=b(ee.current.querySelector(".maplibregl-ctrl-attrib"));const l=t;n=new ResizeObserver(()=>{l.resize(),Me()}),n.observe(ee.current),ae.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(),ae.current=null}},[]);const Ee=l(we);i(()=>{fe&&ae.current&&Ee.current!==we&&(Ee.current=we,ae.current.setStyle(X[we]))},[fe,we]),i(()=>{const e=ae.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=ve.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(oe(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(re(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=ve.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,oe(r,t.data),r.className=ve.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})}je()},[fe,t,w,C,je,H]),i(()=>{fe&&je()},[fe,n,j,je]),i(()=>{if(!fe||!n)return;const e=requestAnimationFrame(Me);return()=>cancelAnimationFrame(e)},[fe,n,Me]),i(()=>{const e=ae.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=ae.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(),Q(t)}(),o={type:"FeatureCollection",features:t.map(e=>({type:"Feature",properties:{key:e.key,estimate:e.estimate,faded:!!e.faded,color:e.color?Z(e.color):r},geometry:{type:"LineString",coordinates:e.coordinates}}))},a=["case",["get","faded"],.25,.85],l=["get","color"],s=e.getSource(J);if(s&&(s.attribution||"")!==n){for(const t of V)e.getLayer(t)&&e.removeLayer(t);e.removeSource(J)}const i=e.getSource(J);i?i.setData(o):e.addSource(J,{type:"geojson",data:o,...n?{attribution:n}:{}}),e.getLayer("routes-road")||e.addLayer({id:"routes-road",type:"line",source:J,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:J,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=ae.current;if(!fe||!e||!r)return;const n=t.find(e=>e.key===r.key);if(!n)return;const o=e.getZoom(),a=C?q(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))};te()?e.jumpTo(l):e.flyTo({...l,duration:600})},[fe,r?.n]);const[Se,$e]=s(!1);i(()=>{const e=U.current;if(!e)return;const t=()=>$e(e.clientWidth<T);t();const n=new ResizeObserver(t);return n.observe(e),()=>n.disconnect()},[T]);const Be=n?t.find(e=>e.key===n)??null:null,ze=Be?.key??null,Ae=Be?.lng??0,Re=Be?.lat??0,Te=fe&&!Se&&null!=R&&!!Be,[We,Oe]=s(null);i(()=>{const e=ae.current,t=ie.current;if(!(Te&&e&&t&&ze))return;const n=document.createElement("div");n.dataset.mapCard="",n.className=Ne.current.looks.cardFloating;const r=new t.Popup({anchor:"bottom",offset:v,className:"rosh-map-card",maxWidth:"none",closeButton:!1,closeOnClick:!1,closeOnMove:!1,focusAfterOpen:!1}).setLngLat([Ae,Re]).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===G.site?"var(--rosh-map-pin, #111)":"var(--color-gray-600, #4b5563)";l&&Object.assign(l.style,{borderTopColor:s,borderBottomColor:s}),Oe(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(),U.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:te()?0:250}),je()},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(),Oe(null),h&&(!document.activeElement||document.activeElement===document.body)){const e=g.get(ze)?.button;e&&"none"!==e.style.display&&e.focus({preventScroll:!0})}}},[Te,ze,Ae,Re,je]);const Fe=W?.active??!1,Ke=l(W?.onChange);i(()=>{Ke.current=W?.onChange}),i(()=>{if(!W)return;const e=document.documentElement;Fe&&!document.fullscreenElement&&e.requestFullscreen&&e.requestFullscreen().catch(()=>{}),!Fe&&document.fullscreenElement&&document.exitFullscreen().catch(()=>{})},[Fe]);const qe=!!W;return i(()=>{if(!qe)return;const e=()=>{document.fullscreenElement||Ke.current?.(!1)};return document.addEventListener("fullscreenchange",e),()=>document.removeEventListener("fullscreenchange",e)},[qe]),/* @__PURE__ */m("div",{ref:U,className:ne(ve.frame(S),g),children:[
2
+ import{Button_default as e}from"../chunk-4IU5BSVE.js";import"../chunk-K7U4RWXJ.js";import{Icon as t}from"../chunk-KIBL6M3T.js";import"../chunk-J75ZT2JQ.js";import"../chunk-VH6GB73Q.js";import{SpinnerRing as n}from"../chunk-Q5MD3VY6.js";import"../chunk-MRJKZWWV.js";import"../chunk-22S6LG6D.js";import"../chunk-PGN5ME7B.js";import"../chunk-62LW225J.js";import"../chunk-GLUJS42B.js";import"../chunk-D65T4H6J.js";import{rootIsDark as r,ROOT_THEME_ATTRIBUTES as o}from"../chunk-DTJRIWFR.js";import"../chunk-TWVUQUUD.js";import{useShellStrings as a}from"../chunk-E6UCGCOC.js";import"../chunk-C3QOHMR6.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,k=12,w=480,v={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-k-x-10-16));function M(e,t,n,r=12){const o=e.y-x-r,a=n.height-e.y-x-k,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<k?(i="-left",c=Math.max(0,k-e.x)):e.x+t.width/2>n.width-k&&(i="-right",c=-Math.max(0,e.x-(n.width-k))),{anchor:`${l?"bottom":"top"}${i}`,move:{x:c,y:s}}}var C="maplibre-gl-worker.mjs",L=e=>`/maplibre-gl/${e}/${C}`,j=null;function E(){return j??=Promise.all([import("maplibre-gl"),import("maplibre-gl/dist/maplibre-gl.css")]).then(([e])=>(e.setWorkerUrl(L(e.getVersion())),e)).catch(e=>{throw j=null,e}),j}var S=null;var $=24,B=28,z=29;function A(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 R(e){const t=Math.max(B,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 W(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 F(e){for(let t=0;t<e.length;t++)for(let n=t+1;n<e.length;n++)if(W(O(e[t]),O(e[n])))return[e[t],e[n]];return null}function K(e,t=[]){const n=[],r=e=>t.some(t=>W(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:B,height:B,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=R(A(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,$,$),l=o.find(t=>W(O(t),e));if(l||r(e)){n.push(t.key),l&&l.under++;continue}const s=a.find(t=>W(O(t),e));s?s.keys.push(t.key):a.push({keys:[t.key],stops:[],x:t.x,y:t.y,width:$,height:$,under:0})}return{groups:[...o,...a],hidden:n}}function q(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 _(e){const t=new MutationObserver(e);return t.observe(document.documentElement,{attributes:!0,attributeFilter:o}),()=>t.disconnect()}var D=r;var H=(...e)=>e.filter(Boolean).join(" "),I=/^(?:\d+|[xytrblse](?:-\d+)?|solid|dashed|dotted|double|hidden|none)$/;function P(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 U="ring-2 ring-gray-900 ring-offset-2",G={portal:{frame:e=>H("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)=>H("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 H("grid place-items-center rounded-full border-2 font-semibold leading-none shadow-sm transition-transform motion-reduce:transition-none",!P(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":U),e.approximate&&"border-dashed opacity-80",e.faded&&!t&&"opacity-40",n&&"scale-125 opacity-100")},mark:e=>H("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",!P(e.tone??"")&&"border-white",e.tone??"bg-gray-900 text-white"),groupButton:"grid place-items-center rounded-full cursor-pointer",groupDisc:(e,t,n)=>H("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&&U),badge:e=>H("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=>H("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)=>H("rosh-map-target",t&&(null!=e.stop?"rosh-map-target--stop":"rosh-map-target--sized")),pinMark:(e,t,n,r)=>H("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=>H("rosh-map-mark",e.stop&&"rosh-map-mark--stop"),groupButton:"rosh-map-target",groupDisc:(e,t,n)=>H("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",sheet:function(){return S??=import("efficient-shell/map-site.css").catch(e=>{throw S=null,e}),S}}},J="routes",V=["routes-road","routes-estimate"];function Z(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(),Q(n)}function Q(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 X={light:"https://tiles.openfreemap.org/styles/positron",dark:"https://tiles.openfreemap.org/styles/dark"},Y={center:[30,20],zoom:1};var ee="http://www.w3.org/2000/svg",te=()=>window.matchMedia("(prefers-reduced-motion: reduce)").matches,ne=(...e)=>e.filter(Boolean).join(" ");function re(e){const t=document.createElementNS(ee,"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(ee,"path");e.setAttribute("stroke-linecap","round"),e.setAttribute("stroke-linejoin","round"),e.setAttribute("d",n),t.appendChild(e)}return t}function oe(e,t){for(const[n,r]of Object.entries(t??{}))e.dataset[n]=r}function ae({pins:t,selectedKey:n,focus:r,onSelect:o,ariaLabel:u,className:g="",children:f,routes:y,fitTo:x,attribution:k,marks:w,groupCrowded:C=!1,noun:L,highlightKey:j=null,picking:S=!1,onPick:z,card:R,cardMinMapWidth:T=480,fullScreen:W,initialView:O=Y,cooperativeGestures:F=!1,look:H="portal",theme:I}){const P=a().map,U=l(null),ee=l(null),ae=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),ke=d(_,D,()=>!1),we=I??(ke?"dark":"light"),ve=G[H],Ne=l({onSelect:o,onPick:z,picking:S,pins:t,selectedKey:n,highlightKey:j,groupCrowded:C,strings:P,noun:L,looks:ve});i(()=>{Ne.current={onSelect:o,onPick:z,picking:S,pins:t,selectedKey:n,highlightKey:j,groupCrowded:C,strings:P,noun:L,looks:ve}}),i(()=>{ve.sheet?.().catch(e=>console.warn("[map] could not load the look's stylesheet",e))},[ve]);const Me=c(()=>{const e=ae.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:te()?0:400})},[]),Ce=l(!1),Le=c((e,t)=>{const n=ae.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)=>q(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:te()?0:600})},[]),je=c(()=>{const e=ae.current,t=ie.current;if(!e||!t||!U.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=[...U.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?A(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?B:$),height:t.button.offsetHeight||(null!=t.pin.stop?B:$)}:n?{at:n.mark,width:n.element.offsetWidth||B,height:n.element.offsetHeight||B}: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(je(),!U.current)return;const e=new ResizeObserver(()=>je());e.observe(U.current);for(const t of U.current.children)t.contains(ee.current)||e.observe(t);return()=>e.disconnect()}),i(()=>{let e=!1,t=null,n=null,r=()=>{};return(async()=>{try{const o=await E();if(e||!ee.current)return;ie.current=o,t=new o.Map({container:ee.current,style:X[we],center:O.center,zoom:O.zoom,attributionControl:k?{compact:!0,customAttribution:k}:{compact:!0},dragRotate:!1,pitchWithRotate:!1,touchPitch:!1,maxPitch:0,cooperativeGestures:"coarse"===F?window.matchMedia("(pointer: coarse)").matches:F}),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(O.center).addTo(t),t.on("click",e=>{Ne.current.picking&&Ne.current.onPick?.({lat:e.lngLat.lat,lng:e.lngLat.lng})}),t.on("move",je),t.on("moveend",je),t.on("resize",je),t.on("error",e=>console.warn("[map]",e.error?.message)),r=b(ee.current.querySelector(".maplibregl-ctrl-attrib"));const l=t;n=new ResizeObserver(()=>{l.resize(),Me()}),n.observe(ee.current),ae.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(),ae.current=null}},[]);const Ee=l(we);i(()=>{fe&&ae.current&&Ee.current!==we&&(Ee.current=we,ae.current.setStyle(X[we]))},[fe,we]),i(()=>{const e=ae.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=ve.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(oe(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(re(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=ve.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,oe(r,t.data),r.className=ve.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})}je()},[fe,t,w,C,je,H]),i(()=>{fe&&je()},[fe,n,j,je]),i(()=>{if(!fe||!n)return;const e=requestAnimationFrame(Me);return()=>cancelAnimationFrame(e)},[fe,n,Me]),i(()=>{const e=ae.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=ae.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(),Q(t)}(),o={type:"FeatureCollection",features:t.map(e=>({type:"Feature",properties:{key:e.key,estimate:e.estimate,faded:!!e.faded,color:e.color?Z(e.color):r},geometry:{type:"LineString",coordinates:e.coordinates}}))},a=["case",["get","faded"],.25,.85],l=["get","color"],s=e.getSource(J);if(s&&(s.attribution||"")!==n){for(const t of V)e.getLayer(t)&&e.removeLayer(t);e.removeSource(J)}const i=e.getSource(J);i?i.setData(o):e.addSource(J,{type:"geojson",data:o,...n?{attribution:n}:{}}),e.getLayer("routes-road")||e.addLayer({id:"routes-road",type:"line",source:J,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:J,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=ae.current;if(!fe||!e||!r)return;const n=t.find(e=>e.key===r.key);if(!n)return;const o=e.getZoom(),a=C?q(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))};te()?e.jumpTo(l):e.flyTo({...l,duration:600})},[fe,r?.n]);const[Se,$e]=s(!1);i(()=>{const e=U.current;if(!e)return;const t=()=>$e(e.clientWidth<T);t();const n=new ResizeObserver(t);return n.observe(e),()=>n.disconnect()},[T]);const Be=n?t.find(e=>e.key===n)??null:null,ze=Be?.key??null,Ae=Be?.lng??0,Re=Be?.lat??0,Te=fe&&!Se&&null!=R&&!!Be,[We,Oe]=s(null);i(()=>{const e=ae.current,t=ie.current;if(!(Te&&e&&t&&ze))return;const n=document.createElement("div");n.dataset.mapCard="",n.className=Ne.current.looks.cardFloating;const r=new t.Popup({anchor:"bottom",offset:v,className:"rosh-map-card",maxWidth:"none",closeButton:!1,closeOnClick:!1,closeOnMove:!1,focusAfterOpen:!1}).setLngLat([Ae,Re]).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===G.site?"var(--rosh-map-pin, #111)":"var(--color-gray-600, #4b5563)";l&&Object.assign(l.style,{borderTopColor:s,borderBottomColor:s}),Oe(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(),U.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:te()?0:250}),je()},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(),Oe(null),h&&(!document.activeElement||document.activeElement===document.body)){const e=g.get(ze)?.button;e&&"none"!==e.style.display&&e.focus({preventScroll:!0})}}},[Te,ze,Ae,Re,je]);const Fe=W?.active??!1,Ke=l(W?.onChange);i(()=>{Ke.current=W?.onChange}),i(()=>{if(!W)return;const e=document.documentElement;Fe&&!document.fullscreenElement&&e.requestFullscreen&&e.requestFullscreen().catch(()=>{}),!Fe&&document.fullscreenElement&&document.exitFullscreen().catch(()=>{})},[Fe]);const qe=!!W;return i(()=>{if(!qe)return;const e=()=>{document.fullscreenElement||Ke.current?.(!1)};return document.addEventListener("fullscreenchange",e),()=>document.removeEventListener("fullscreenchange",e)},[qe]),/* @__PURE__ */m("div",{ref:U,className:ne(ve.frame(S),g),children:[
3
3
  /* @__PURE__ */h("div",{className:ve.fill,children:/* @__PURE__ */h("div",{ref:ee,className:ve.box,role:"region","aria-label":u})}),be&&/* @__PURE__ */h("p",{className:ve.failed,children:P.failed}),W&&/* @__PURE__ */h(e,{"data-map-control":"",variant:"secondary",size:"sm",className:"absolute left-3 top-3 z-10",onClick:()=>W.onChange(!W.active),leftIcon:/* @__PURE__ */h(se,{leave:W.active}),children:W.active?P.leaveFullScreen:P.fullScreen}),f,null!=R&&!Te&&/* @__PURE__ */h("div",{"data-map-card":"",className:ve.cardInline,children:R}),Te&&We?p(R,We):null,fe&&/* @__PURE__ */h(le,{pins:t,hosts:he.current,hostClass:ve.iconHost})]})}function le({pins:e,hosts:t,hostClass:n}){/* @__PURE__ */
4
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 se({leave:e}){/* @__PURE__ */
5
5
  return h(t,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 ie(){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 ce=3e3,ue=e=>!!e?.pending&&3e3,de=e=>`${e.kind}:${e.id}`,pe=e=>("located"===e.placement||"approximate"===e.placement)&&null!=e.lat&&null!=e.lng;function me(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 he={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"}},ge=["importer","dealer","retail","supplier","delivery_location","warehouse"];function fe(e){return"supplier"===e.kind?"supplier":"customer"===e.kind?e.category||"importer":e.kind}var ye=(e,t=he)=>t[e]?.tone??"bg-gray-700 text-white",be=(e,t=he)=>t[e]?.label??e,xe=(e,t)=>ye(fe(e),t);function ke(e,t,n=he){return null!=t?String(t):(n[fe(e)]?.label??"").charAt(0).toUpperCase()}var we=["delivery_location","warehouse"];function ve(e,t=we){const n=/* @__PURE__ */new Map;let r=0;for(const o of e)t.includes(o.kind)&&n.set(de(o),++r);return n}function Ne(e){const t={onMap:0,approximate:0,pending:0,off:0};for(const n of e)pe(n)?(t.onMap+=1,"approximate"===n.placement&&(t.approximate+=1)):"pending"===n.placement?t.pending+=1:t.off+=1;return t}function Me(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 Ce(e){const t=[...new Set(e.filter(pe).map(fe))];return[...ge.filter(e=>t.includes(e)),...t.filter(e=>!ge.includes(e))]}function Le(e,t){return e.filter(e=>!pe(e)&&"pending"!==e.placement).map(e=>{const n=t?.get(de(e)),r=me(e.placement)?.replace(/^Not on the map: /,"")??"";return{key:de(e),text:`${null!=n?`${n}. `:""}${e.label}: ${r}`}})}function je({categories:e,palette:t=he,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:[
package/dist/map-site.css CHANGED
@@ -10,6 +10,8 @@
10
10
  * --rosh-map-group a group's fill --rosh-map-group-text its count
11
11
  * --rosh-map-radius the frame's corners --rosh-map-frame the frame's ground
12
12
  * --rosh-map-font the face of counts and glyphs
13
+ * --rosh-map-control the zoom and credit buttons' ground (the pin's edge
14
+ * when unset) --rosh-map-control-text their icons (the ring's colour)
13
15
  *
14
16
  * A host does not load it: EntityMap fetches it with MapLibre's own sheet when
15
17
  * a site-look map mounts (`loadSiteLookSheet`), so only pages that draw a map
@@ -149,6 +151,47 @@
149
151
  overscroll-behavior: contain;
150
152
  }
151
153
 
154
+ /* MapLibre's own controls — the zoom buttons and the credit button — in the
155
+ site's colours (Lewis 2026-10-22: not white on a dark site). MapLibre draws
156
+ them as white boxes with a fixed dark icon image; here the box takes the
157
+ control ground and the icon is drawn in the control's text colour: + and −
158
+ as two lines, the credit as the shell's own `info` glyph used as a mask.
159
+ Inside the site frame only, so a portal map keeps MapLibre's own. */
160
+ .rosh-map-frame .maplibregl-ctrl-group,
161
+ .rosh-map-frame .maplibregl-ctrl-attrib.maplibregl-compact {
162
+ background: var(--rosh-map-control, var(--rosh-map-pin-edge, #fff));
163
+ color: var(--rosh-map-control-text, var(--rosh-map-ring, #111));
164
+ }
165
+ .rosh-map-frame .maplibregl-ctrl-group {
166
+ border-radius: var(--rosh-map-radius, 0);
167
+ box-shadow: 0 0 0 1px color-mix(in srgb, currentColor 25%, transparent);
168
+ }
169
+ .rosh-map-frame .maplibregl-ctrl-group button + button {
170
+ border-top-color: color-mix(in srgb, currentColor 25%, transparent);
171
+ }
172
+ .rosh-map-frame .maplibregl-ctrl-group button:not(:disabled):hover {
173
+ background-color: color-mix(in srgb, currentColor 12%, transparent);
174
+ }
175
+ .rosh-map-frame .maplibregl-ctrl-group button:focus-visible,
176
+ .rosh-map-frame .maplibregl-ctrl-attrib .maplibregl-ctrl-attrib-button:focus-visible {
177
+ box-shadow: 0 0 0 2px var(--rosh-map-ring, currentColor);
178
+ }
179
+ .rosh-map-frame .maplibregl-ctrl button.maplibregl-ctrl-zoom-in .maplibregl-ctrl-icon {
180
+ background: linear-gradient(currentColor, currentColor) center / 12px 2px no-repeat,
181
+ linear-gradient(currentColor, currentColor) center / 2px 12px no-repeat;
182
+ }
183
+ .rosh-map-frame .maplibregl-ctrl button.maplibregl-ctrl-zoom-out .maplibregl-ctrl-icon {
184
+ background: linear-gradient(currentColor, currentColor) center / 12px 2px no-repeat;
185
+ }
186
+ .rosh-map-frame .maplibregl-ctrl-attrib .maplibregl-ctrl-attrib-button {
187
+ background: currentColor;
188
+ -webkit-mask: url("data:image/svg+xml,%3Csvg%20xmlns='http://www.w3.org/2000/svg'%20fill='none'%20viewBox='0%200%2024%2024'%20stroke-width='1.5'%20stroke='black'%3E%3Cpath%20stroke-linecap='round'%20stroke-linejoin='round'%20d='m11.25%2011.25.041-.02a.75.75%200%200%201%201.063.852l-.708%202.836a.75.75%200%200%200%201.063.853l.041-.021M21%2012a9%209%200%201%201-18%200%209%209%200%200%201%2018%200Zm-9-3.75h.008v.008H12V8.25Z'/%3E%3C/svg%3E") center / 18px no-repeat;
189
+ mask: url("data:image/svg+xml,%3Csvg%20xmlns='http://www.w3.org/2000/svg'%20fill='none'%20viewBox='0%200%2024%2024'%20stroke-width='1.5'%20stroke='black'%3E%3Cpath%20stroke-linecap='round'%20stroke-linejoin='round'%20d='m11.25%2011.25.041-.02a.75.75%200%200%201%201.063.852l-.708%202.836a.75.75%200%200%200%201.063.853l.041-.021M21%2012a9%209%200%201%201-18%200%209%209%200%200%201%2018%200Zm-9-3.75h.008v.008H12V8.25Z'/%3E%3C/svg%3E") center / 18px no-repeat;
190
+ }
191
+ .rosh-map-frame .maplibregl-ctrl-attrib a {
192
+ color: inherit;
193
+ }
194
+
152
195
  @media (prefers-reduced-motion: reduce) {
153
196
  .rosh-map-pin { transition: none; }
154
197
  }
@@ -1,6 +1,6 @@
1
1
  "use client";
2
- import{TabStrip as e}from"../chunk-YGZMD6TZ.js";import{useShellLanguage as t}from"../chunk-QQCHLRKG.js";import"../chunk-FL2PUQX7.js";import{confirm as n}from"../chunk-ZN3O2KJ7.js";import"../chunk-YCQVEJOT.js";import"../chunk-VWGWZY7A.js";import"../chunk-PKXQDCNR.js";import"../chunk-PJCVNFWM.js";import"../chunk-QR4RM7PO.js";import"../chunk-5QFPTDQF.js";import"../chunk-CDAJKLGL.js";import"../chunk-K7U4RWXJ.js";import"../chunk-KIBL6M3T.js";import"../chunk-J75ZT2JQ.js";import"../chunk-PGN5ME7B.js";import"../chunk-62LW225J.js";import{useBrowserLayoutEffect as r}from"../chunk-D65T4H6J.js";import"../chunk-DTJRIWFR.js";import"../chunk-TWVUQUUD.js";import{useShellStrings as i}from"../chunk-E6UCGCOC.js";import"../chunk-C3QOHMR6.js";import*as c from"react";import{createContext as l,memo as s,useRef as a,useEffect as o,useMemo as u,useId as y,useCallback as d,useReducer as p,useState as f,useContext as k}from"react";import{useLocation as m,useNavigate as h}from"react-router-dom";import{jsx as b,Fragment as v,jsxs as g}from"react/jsx-runtime";var K=l(null),j=l(null),T=12;var F=(e,t)=>e.filter(e=>e!==t);function C(e,t){return[...t.map(t=>e.find(e=>e.key===t)).filter(e=>Boolean(e)),...e.filter(e=>!t.includes(e.key))]}function N(e,t,n=12){const r=e.clock+1;let i;i=e.tabs.find(e=>e.key===t.key)?e.tabs.map(e=>e.key===t.key?{...e,path:t.path,title:"page"===e.titleFrom?e.title:t.title||e.title,lastActive:r}:e):[...e.tabs,{key:t.key,path:t.path,title:t.title,titleFrom:"route",pinned:!1,lastActive:r}];let c={...e,tabs:i,activeKey:t.key,mounted:(l=e.mounted,s=t.key,l.includes(s)?l:[...l,s]),clock:r};var l,s;return c.closing&&c.closing!==t.key?c=A(c,c.closing):c.closing===t.key&&(c={...c,closing:null}),function(e,t){let n=e;for(;n.tabs.length>t;){const e=n.tabs.filter(e=>!e.pinned&&e.key!==n.activeKey&&!n.dirty.includes(e.key)&&e.key!==n.closing).sort((e,t)=>e.lastActive-t.lastActive);if(0===e.length)break;n=A(n,e[0].key)}return n}(c,n)}function M(e){let t={...e,activeKey:null};return t.closing&&(t=A(t,t.closing)),t}function A(e,t){return{...e,tabs:e.tabs.filter(e=>e.key!==t),mounted:F(e.mounted,t),dirty:F(e.dirty,t),activeKey:e.activeKey===t?null:e.activeKey,closing:e.closing===t?null:e.closing}}function I(e,t){switch(t.type){case"visit":return N(e,t.entry,t.maxTabs);case"transient":return M(e);case"close":{let n=e;for(const e of t.keys)n=A(n,e);return t.closing?function(e,t){return{...e,closing:t}}(n,t.closing):n}case"title":return function(e,t,n){const r=e.tabs.find(e=>e.key===t);return!r||!n||r.title===n&&"page"===r.titleFrom?e:{...e,tabs:e.tabs.map(e=>e.key===t?{...e,title:n,titleFrom:"page"}:e)}}(e,t.key,t.title);case"dirty":return function(e,t,n){return n===e.dirty.includes(t)?e:{...e,dirty:n?[...e.dirty,t]:F(e.dirty,t)}}(e,t.key,t.dirty)}}var L=e=>`${e.pathname}${e.search}`;function w(e){const t=e.indexOf("#"),n=t>=0?e.slice(t):"",r=t>=0?e.slice(0,t):e,i=r.indexOf("?");return{pathname:i>=0?r.slice(0,i):r,search:i>=0?r.slice(i):"",hash:n}}function O({children:e,resolve:c,pinned:l=[],storageKey:s,maxTabs:k=12,enabled:v=!0,confirmDiscard:g}){const j=m(),T=h(),F=i().pageTabs,A=y(),O=a(c);O.current=c;const J=d(e=>{const t=O.current(e);return t?{key:t.key??e.pathname,path:L(e),title:t.title}:null},[]),{language:R}=t(),[D,Q]=p(I,void 0,()=>{const e=function(e,t,n){if(!e)return[];let r;try{r=JSON.parse(e)}catch{return[]}const i=r;if(!i||1!==i.v||!Array.isArray(i.tabs))return[];const c=Boolean(n&&"string"==typeof i.lang&&i.lang!==n),l=[];for(const e of i.tabs){if(!e||"string"!=typeof e.path||!e.path.startsWith("/")||e.path.startsWith("//"))continue;const n=e.path.indexOf("#"),r=n>=0?e.path.slice(0,n):e.path,i=t(r);if(!i||l.some(e=>e.key===i.key))continue;const s=!c&&"page"===e.titleFrom&&"string"==typeof e.title&&e.title;l.push({key:i.key,path:r,title:s||i.title,titleFrom:s?"page":"route",pinned:!1,lastActive:0})}return l}(function(e){if(!e)return null;try{return localStorage.getItem(e)}catch{return null}}(s),e=>J(w(e)),R);let t=function(e,t){const n=t.map(e=>e.key);let r=e.tabs.map(e=>({...e,pinned:n.includes(e.key)}));for(const e of t)r.some(t=>t.key===e.key)||(r=[...r,{key:e.key,path:e.path,title:e.title,titleFrom:"route",pinned:!0,lastActive:0}]);return{...e,tabs:C(r,n)}}({tabs:[],activeKey:null,mounted:[],dirty:[],closing:null,clock:0,tabs:e},l.map(e=>J(w(e))).filter(e=>Boolean(e)));const n=v?J(j):null;return t=n?N(t,n,k):M(t),t}),x=a(D);x.current=D;const W=a(/* @__PURE__ */new Map),E=v?J(j):null,P=E?.key??null;r(()=>{if(!v)return;const e=J(j);e?(W.current.set(e.key,j),Q({type:"visit",entry:e,maxTabs:k})):Q({type:"transient"})},[j,v,k,J]),o(()=>{const e=new Set(D.tabs.map(e=>e.key));for(const t of W.current.keys())e.has(t)||W.current.delete(t)},[D.tabs]);const $=u(()=>function(e,t){const n={v:1,...t?{lang:t}:{},tabs:e.tabs.filter(t=>t.key!==e.closing).map(({key:e,path:t,title:n,titleFrom:r})=>({key:e,path:t,title:n,titleFrom:r}))};return JSON.stringify(n)}(D,R),[D,R]);o(()=>{if(s)try{localStorage.setItem(s,$)}catch{}},[$,s]);const B=D.dirty.length>0;o(()=>{if(!B)return;const e=e=>{e.preventDefault(),e.returnValue=""};return window.addEventListener("beforeunload",e),()=>window.removeEventListener("beforeunload",e)},[B]);const G=a(/* @__PURE__ */new Map),S=d((e,t)=>{let n=G.current.get(e);return void 0===n&&(n=G.current.size,G.current.set(e,n)),`${A}-page-${t}-${n}`},[A]),U=d(e=>g?g(e):n({title:F.discardTitle,message:1===e.length?F.discardOne:F.discardCount?.(e.length)??`${e.length} ${F.discardMany}`,confirmLabel:F.discardConfirm,cancelLabel:F.keepEditing,variant:"warning"}),[g,F]),V=d(()=>{const e=x.current;return e.tabs.find(e=>e.pinned)?.path??"/"},[]),Z=d((e,t,n)=>{const r=x.current,i=r.activeKey;if(!i||!e.includes(i))return void Q({type:"close",keys:e,closing:null});let c=t;if(!c){const t={...r,tabs:r.tabs.filter(t=>t.key===i||!e.includes(t.key))},l=n?r.tabs.find(t=>t.key===n&&!e.includes(t.key)):void 0;c=(l??function(e,t){const n=e.tabs.filter(n=>n.key!==e.closing||n.key===t),r=n.findIndex(e=>e.key===t);return r<0?null:n[r+1]??n[r-1]??null}(t,i))?.path??V()}Q({type:"close",keys:e.filter(e=>e!==i),closing:i}),T(c)},[T,V]),H=d(async(e,t={})=>{const n=x.current.tabs.find(t=>t.key===e);return!n||n.pinned?(t.to&&T(t.to),!1):!(!t.force&&x.current.dirty.includes(e)&&!await U([n]))&&(!!x.current.tabs.some(t=>t.key===e)&&(Z([e],t.to),!0))},[U,Z,T]),X=d(async(e,t)=>{let n=function(e,t,n){const r=e.tabs.filter(e=>!e.pinned);if("all"===t)return r.map(e=>e.key);if("others"===t)return r.filter(e=>e.key!==n).map(e=>e.key);const i=e.tabs.findIndex(e=>e.key===n);return i<0?[]:e.tabs.slice(i+1).filter(e=>!e.pinned).map(e=>e.key)}(x.current,e,t);const r=x.current.tabs.filter(e=>n.includes(e.key)&&x.current.dirty.includes(e.key));r.length&&!await U(r)&&(n=n.filter(e=>!r.some(t=>t.key===e)));const i=new Set(x.current.tabs.map(e=>e.key));n=n.filter(e=>i.has(e)),n.length&&Z(n,void 0,"all"===e?null:t)},[U,Z]),Y=d(e=>{const t=x.current.tabs.find(t=>t.key===e);t&&e!==x.current.activeKey&&T(t.path)},[T]),z=d((e,t)=>Q({type:"title",key:e,title:t}),[]),q=d((e,t)=>Q({type:"dirty",key:e,dirty:t}),[]),[_,ee]=f({}),te=d((e,t)=>{ee(n=>{if((n[e]??null)===t)return n;const r={...n};return t?r[e]=t:delete r[e],r})},[]),ne=d(e=>J(e)?.key??null,[J]),re=d(e=>W.current.get(e),[]),ie=u(()=>v?D.tabs.filter(e=>e.key!==D.closing):[],[v,D.tabs,D.closing]),ce=u(()=>({enabled:v,state:D,currentKey:P,resolve:c,keyFor:ne,locationFor:re,idFor:S,activate:Y,close:H,closeMany:X,setTitle:z,setDirty:q,copies:_,setCopy:te,visibleTabs:ie}),[v,D,P,c,ne,re,S,Y,H,X,z,q,_,te,ie]);/* @__PURE__ */
3
- return b(K.Provider,{value:ce,children:e})}var J=c.Activity,R=Boolean(J);function D({active:e,children:t}){return J?/* @__PURE__ */b(J,{mode:e?"visible":"hidden",children:t}):/* @__PURE__ */b(v,{children:t})}var Q=s(function({tabKey:e,active:t,location:n,render:i,className:c,panelId:l,tabId:s}){const y=a(null),d=a(t),p=a(/* @__PURE__ */new Map);r(()=>{const e=d.current;if(d.current=t,t&&!e)for(const[e,[t,n]]of p.current)e.isConnected?(e.scrollTop=t,e.scrollLeft=n):p.current.delete(e)},[t]),o(()=>{const e=y.current;if(!e)return;const t=e=>{if(!d.current)return;const t=e.target;t&&"number"==typeof t.scrollTop&&p.current.set(t,[t.scrollTop,t.scrollLeft])};return e.addEventListener("scroll",t,!0),()=>e.removeEventListener("scroll",t,!0)},[]);const f=u(()=>({key:e,activeRef:d}),[e]);/* @__PURE__ */
4
- return b("div",{ref:y,role:l?"tabpanel":void 0,id:l,"aria-labelledby":s,hidden:!t,style:t?void 0:{display:"none"},className:c,"data-page-tab":e,children:/* @__PURE__ */b(j.Provider,{value:f,children:/* @__PURE__ */b(D,{active:t,children:i(n)})})})},(e,t)=>e.active===t.active&&e.location===t.location&&e.className===t.className&&e.panelId===t.panelId&&e.tabId===t.tabId&&(!t.active||e.render===t.render)),x="\0transient";function W({children:e,frameClassName:t}){const n=k(K),r=m();if(!n||!n.enabled)/* @__PURE__ */
5
- return b("div",{className:t,children:e(r)},x);const{state:i,currentKey:c,locationFor:l,idFor:s}=n,a=i.tabs.filter(e=>i.mounted.includes(e.key)).map(e=>e.key);return c&&!a.includes(c)&&a.push(c),/* @__PURE__ */g(v,{children:[a.map(n=>{const i=n===c,a=i?r:l(n);return a?/* @__PURE__ */b(Q,{tabKey:n,active:i,location:a,render:e,className:t,panelId:s(n,"panel"),tabId:s(n,"tab")},n):null}),!c&&/* @__PURE__ */b(Q,{tabKey:x,active:!0,location:r,render:e,className:t},x)]})}function E({className:t,activeClassName:n,end:r}){const c=k(K),l=i().pageTabs;if(!c||!c.enabled)return null;const{visibleTabs:s,state:a,idFor:o,activate:u,close:y,closeMany:d,resolve:p}=c;/* @__PURE__ */
6
- return b(e,{tabs:s.map(e=>({key:e.key,title:e.title,pinned:e.pinned,dirty:a.dirty.includes(e.key),copy:c.copies[e.key],icon:p(w(e.path))?.icon})),activeKey:c.currentKey??null,idFor:o,panelMounted:e=>a.mounted.includes(e),onActivate:u,onClose:e=>{y(e)},onCloseMany:(e,t)=>{d(e,t)},label:l.label,className:t,activeClassName:n,end:r})}var P={enabled:!1,tabs:[],activeKey:null,activate:()=>{},close:async()=>!1,closeOthers:async()=>{},closeRight:async()=>{},closeAll:async()=>{}};function $(){const e=k(K);return e&&e.enabled?{enabled:!0,tabs:e.visibleTabs,activeKey:e.currentKey,activate:e.activate,close:e.close,closeOthers:t=>e.closeMany("others",t),closeRight:t=>e.closeMany("right",t),closeAll:()=>e.closeMany("all",null)}:P}function B(){const e=k(K),t=k(j),n=h();return{key:e?.enabled&&t?t.key:null,close:d(async(r={})=>e?.enabled&&t&&e.state.tabs.some(e=>e.key===t.key)?e.close(t.key,r):(r.to&&n(r.to),!1),[e,t,n])}}function G(e){const t=k(K),n=k(j),r=t?.enabled?t.setTitle:void 0,i=n?.key;o(()=>{r&&i&&e&&r(i,e)},[r,i,e])}function S(e){const t=k(K),n=k(j),r=t?.enabled?t.setCopy:void 0,i=n?.key;o(()=>{if(r&&i)return r(i,e||null),()=>r(i,null)},[r,i,e])}function U(e){const t=k(K),n=k(j),r=t?.enabled?t.setDirty:void 0;o(()=>{if(r&&n)return r(n.key,e),()=>{n.activeRef.current&&r(n.key,!1)}},[r,n,e])}export{T as DEFAULT_MAX_TABS,R as PAGE_TABS_PAUSE_HIDDEN,E as PageTabBar,W as PageTabsOutlet,O as PageTabsProvider,w as parseTabPath,B as usePageTab,S as usePageTabCopy,U as usePageTabDirty,G as usePageTabTitle,$ as usePageTabs};
2
+ import{TabStrip as e}from"../chunk-3IYMTPGR.js";import{useShellLanguage as t}from"../chunk-QQCHLRKG.js";import"../chunk-FL2PUQX7.js";import{confirm as n}from"../chunk-ZN3O2KJ7.js";import"../chunk-YCQVEJOT.js";import"../chunk-VWGWZY7A.js";import"../chunk-PKXQDCNR.js";import"../chunk-CDAJKLGL.js";import"../chunk-O6JX6RDX.js";import"../chunk-5QFPTDQF.js";import"../chunk-QR4RM7PO.js";import"../chunk-K7U4RWXJ.js";import"../chunk-KIBL6M3T.js";import"../chunk-J75ZT2JQ.js";import"../chunk-PGN5ME7B.js";import"../chunk-62LW225J.js";import{useBrowserLayoutEffect as r}from"../chunk-D65T4H6J.js";import"../chunk-DTJRIWFR.js";import"../chunk-TWVUQUUD.js";import{useShellStrings as i}from"../chunk-E6UCGCOC.js";import"../chunk-C3QOHMR6.js";import*as c from"react";import{createContext as l,memo as s,useRef as a,useEffect as o,useMemo as u,useId as y,useCallback as d,useReducer as p,useState as f,useContext as k}from"react";import{useLocation as m,useNavigate as h}from"react-router-dom";import{jsx as b,Fragment as v,jsxs as g}from"react/jsx-runtime";var K=l(null),j=l(null),T=12;var F=(e,t)=>e.filter(e=>e!==t);function C(e,t){return[...t.map(t=>e.find(e=>e.key===t)).filter(e=>Boolean(e)),...e.filter(e=>!t.includes(e.key))]}function N(e,t,n=12){const r=e.clock+1;let i;i=e.tabs.find(e=>e.key===t.key)?e.tabs.map(e=>e.key===t.key?{...e,path:t.path,title:"page"===e.titleFrom?e.title:t.title||e.title,lastActive:r}:e):[...e.tabs,{key:t.key,path:t.path,title:t.title,titleFrom:"route",pinned:!1,lastActive:r}];let c={...e,tabs:i,activeKey:t.key,mounted:(l=e.mounted,s=t.key,l.includes(s)?l:[...l,s]),clock:r};var l,s;return c.closing&&c.closing!==t.key?c=I(c,c.closing):c.closing===t.key&&(c={...c,closing:null}),function(e,t){let n=e;for(;n.tabs.length>t;){const e=n.tabs.filter(e=>!e.pinned&&e.key!==n.activeKey&&!n.dirty.includes(e.key)&&e.key!==n.closing).sort((e,t)=>e.lastActive-t.lastActive);if(0===e.length)break;n=I(n,e[0].key)}return n}(c,n)}function M(e){let t={...e,activeKey:null};return t.closing&&(t=I(t,t.closing)),t}function I(e,t){return{...e,tabs:e.tabs.filter(e=>e.key!==t),mounted:F(e.mounted,t),dirty:F(e.dirty,t),activeKey:e.activeKey===t?null:e.activeKey,closing:e.closing===t?null:e.closing}}function A(e,t){switch(t.type){case"visit":return N(e,t.entry,t.maxTabs);case"transient":return M(e);case"close":{let n=e;for(const e of t.keys)n=I(n,e);return t.closing?function(e,t){return{...e,closing:t}}(n,t.closing):n}case"title":return function(e,t,n){const r=e.tabs.find(e=>e.key===t);return!r||!n||r.title===n&&"page"===r.titleFrom?e:{...e,tabs:e.tabs.map(e=>e.key===t?{...e,title:n,titleFrom:"page"}:e)}}(e,t.key,t.title);case"dirty":return function(e,t,n){return n===e.dirty.includes(t)?e:{...e,dirty:n?[...e.dirty,t]:F(e.dirty,t)}}(e,t.key,t.dirty)}}var L=e=>`${e.pathname}${e.search}`;function O(e){const t=e.indexOf("#"),n=t>=0?e.slice(t):"",r=t>=0?e.slice(0,t):e,i=r.indexOf("?");return{pathname:i>=0?r.slice(0,i):r,search:i>=0?r.slice(i):"",hash:n}}function R({children:e,resolve:c,pinned:l=[],storageKey:s,maxTabs:k=12,enabled:v=!0,confirmDiscard:g}){const j=m(),T=h(),F=i().pageTabs,I=y(),R=a(c);R.current=c;const w=d(e=>{const t=R.current(e);return t?{key:t.key??e.pathname,path:L(e),title:t.title}:null},[]),{language:J}=t(),[D,Q]=p(A,void 0,()=>{const e=function(e,t,n){if(!e)return[];let r;try{r=JSON.parse(e)}catch{return[]}const i=r;if(!i||1!==i.v||!Array.isArray(i.tabs))return[];const c=Boolean(n&&"string"==typeof i.lang&&i.lang!==n),l=[];for(const e of i.tabs){if(!e||"string"!=typeof e.path||!e.path.startsWith("/")||e.path.startsWith("//"))continue;const n=e.path.indexOf("#"),r=n>=0?e.path.slice(0,n):e.path,i=t(r);if(!i||l.some(e=>e.key===i.key))continue;const s=!c&&"page"===e.titleFrom&&"string"==typeof e.title&&e.title;l.push({key:i.key,path:r,title:s||i.title,titleFrom:s?"page":"route",pinned:!1,lastActive:0})}return l}(function(e){if(!e)return null;try{return localStorage.getItem(e)}catch{return null}}(s),e=>w(O(e)),J);let t=function(e,t){const n=t.map(e=>e.key);let r=e.tabs.map(e=>({...e,pinned:n.includes(e.key)}));for(const e of t)r.some(t=>t.key===e.key)||(r=[...r,{key:e.key,path:e.path,title:e.title,titleFrom:"route",pinned:!0,lastActive:0}]);return{...e,tabs:C(r,n)}}({tabs:[],activeKey:null,mounted:[],dirty:[],closing:null,clock:0,tabs:e},l.map(e=>w(O(e))).filter(e=>Boolean(e)));const n=v?w(j):null;return t=n?N(t,n,k):M(t),t}),x=a(D);x.current=D;const E=a(/* @__PURE__ */new Map),P=v?w(j):null,W=P?.key??null;r(()=>{if(!v)return;const e=w(j);e?(E.current.set(e.key,j),Q({type:"visit",entry:e,maxTabs:k})):Q({type:"transient"})},[j,v,k,w]),o(()=>{const e=new Set(D.tabs.map(e=>e.key));for(const t of E.current.keys())e.has(t)||E.current.delete(t)},[D.tabs]);const $=u(()=>function(e,t){const n={v:1,...t?{lang:t}:{},tabs:e.tabs.filter(t=>t.key!==e.closing).map(({key:e,path:t,title:n,titleFrom:r})=>({key:e,path:t,title:n,titleFrom:r}))};return JSON.stringify(n)}(D,J),[D,J]);o(()=>{if(s)try{localStorage.setItem(s,$)}catch{}},[$,s]);const B=D.dirty.length>0;o(()=>{if(!B)return;const e=e=>{e.preventDefault(),e.returnValue=""};return window.addEventListener("beforeunload",e),()=>window.removeEventListener("beforeunload",e)},[B]);const G=a(/* @__PURE__ */new Map),S=d((e,t)=>{let n=G.current.get(e);return void 0===n&&(n=G.current.size,G.current.set(e,n)),`${I}-page-${t}-${n}`},[I]),U=d(e=>g?g(e):n({title:F.discardTitle,message:1===e.length?F.discardOne:F.discardCount?.(e.length)??`${e.length} ${F.discardMany}`,confirmLabel:F.discardConfirm,cancelLabel:F.keepEditing,variant:"warning"}),[g,F]),X=d(()=>{const e=x.current;return e.tabs.find(e=>e.pinned)?.path??"/"},[]),V=d((e,t,n)=>{const r=x.current,i=r.activeKey;if(!i||!e.includes(i))return void Q({type:"close",keys:e,closing:null});let c=t;if(!c){const t={...r,tabs:r.tabs.filter(t=>t.key===i||!e.includes(t.key))},l=n?r.tabs.find(t=>t.key===n&&!e.includes(t.key)):void 0;c=(l??function(e,t){const n=e.tabs.filter(n=>n.key!==e.closing||n.key===t),r=n.findIndex(e=>e.key===t);return r<0?null:n[r+1]??n[r-1]??null}(t,i))?.path??X()}Q({type:"close",keys:e.filter(e=>e!==i),closing:i}),T(c)},[T,X]),H=d(async(e,t={})=>{const n=x.current.tabs.find(t=>t.key===e);return!n||n.pinned?(t.to&&T(t.to),!1):!(!t.force&&x.current.dirty.includes(e)&&!await U([n]))&&(!!x.current.tabs.some(t=>t.key===e)&&(V([e],t.to),!0))},[U,V,T]),Y=d(async(e,t)=>{let n=function(e,t,n){const r=e.tabs.filter(e=>!e.pinned);if("all"===t)return r.map(e=>e.key);if("others"===t)return r.filter(e=>e.key!==n).map(e=>e.key);const i=e.tabs.findIndex(e=>e.key===n);return i<0?[]:e.tabs.slice(i+1).filter(e=>!e.pinned).map(e=>e.key)}(x.current,e,t);const r=x.current.tabs.filter(e=>n.includes(e.key)&&x.current.dirty.includes(e.key));r.length&&!await U(r)&&(n=n.filter(e=>!r.some(t=>t.key===e)));const i=new Set(x.current.tabs.map(e=>e.key));n=n.filter(e=>i.has(e)),n.length&&V(n,void 0,"all"===e?null:t)},[U,V]),Z=d(e=>{const t=x.current.tabs.find(t=>t.key===e);t&&e!==x.current.activeKey&&T(t.path)},[T]),z=d((e,t)=>Q({type:"title",key:e,title:t}),[]),q=d((e,t)=>Q({type:"dirty",key:e,dirty:t}),[]),[_,ee]=f({}),te=d((e,t)=>{ee(n=>{if((n[e]??null)===t)return n;const r={...n};return t?r[e]=t:delete r[e],r})},[]),ne=d(e=>w(e)?.key??null,[w]),re=d(e=>E.current.get(e),[]),ie=u(()=>v?D.tabs.filter(e=>e.key!==D.closing):[],[v,D.tabs,D.closing]),ce=u(()=>({enabled:v,state:D,currentKey:W,resolve:c,keyFor:ne,locationFor:re,idFor:S,activate:Z,close:H,closeMany:Y,setTitle:z,setDirty:q,copies:_,setCopy:te,visibleTabs:ie}),[v,D,W,c,ne,re,S,Z,H,Y,z,q,_,te,ie]);/* @__PURE__ */
3
+ return b(K.Provider,{value:ce,children:e})}var w=c.Activity,J=Boolean(w);function D({active:e,children:t}){return w?/* @__PURE__ */b(w,{mode:e?"visible":"hidden",children:t}):/* @__PURE__ */b(v,{children:t})}var Q=s(function({tabKey:e,active:t,location:n,render:i,className:c,panelId:l,tabId:s}){const y=a(null),d=a(t),p=a(/* @__PURE__ */new Map);r(()=>{const e=d.current;if(d.current=t,t&&!e)for(const[e,[t,n]]of p.current)e.isConnected?(e.scrollTop=t,e.scrollLeft=n):p.current.delete(e)},[t]),o(()=>{const e=y.current;if(!e)return;const t=e=>{if(!d.current)return;const t=e.target;t&&"number"==typeof t.scrollTop&&p.current.set(t,[t.scrollTop,t.scrollLeft])};return e.addEventListener("scroll",t,!0),()=>e.removeEventListener("scroll",t,!0)},[]);const f=u(()=>({key:e,activeRef:d}),[e]);/* @__PURE__ */
4
+ return b("div",{ref:y,role:l?"tabpanel":void 0,id:l,"aria-labelledby":s,hidden:!t,style:t?void 0:{display:"none"},className:c,"data-page-tab":e,children:/* @__PURE__ */b(j.Provider,{value:f,children:/* @__PURE__ */b(D,{active:t,children:i(n)})})})},(e,t)=>e.active===t.active&&e.location===t.location&&e.className===t.className&&e.panelId===t.panelId&&e.tabId===t.tabId&&(!t.active||e.render===t.render)),x="\0transient";function E({children:e,frameClassName:t}){const n=k(K),r=m();if(!n||!n.enabled)/* @__PURE__ */
5
+ return b("div",{className:t,children:e(r)},x);const{state:i,currentKey:c,locationFor:l,idFor:s}=n,a=i.tabs.filter(e=>i.mounted.includes(e.key)).map(e=>e.key);return c&&!a.includes(c)&&a.push(c),/* @__PURE__ */g(v,{children:[a.map(n=>{const i=n===c,a=i?r:l(n);return a?/* @__PURE__ */b(Q,{tabKey:n,active:i,location:a,render:e,className:t,panelId:s(n,"panel"),tabId:s(n,"tab")},n):null}),!c&&/* @__PURE__ */b(Q,{tabKey:x,active:!0,location:r,render:e,className:t},x)]})}function P({className:t,activeClassName:n,end:r}){const c=k(K),l=i().pageTabs;if(!c||!c.enabled)return null;const{visibleTabs:s,state:a,idFor:o,activate:u,close:y,closeMany:d,resolve:p}=c;/* @__PURE__ */
6
+ return b(e,{tabs:s.map(e=>({key:e.key,title:e.title,pinned:e.pinned,dirty:a.dirty.includes(e.key),copy:c.copies[e.key],icon:p(O(e.path))?.icon})),activeKey:c.currentKey??null,idFor:o,panelMounted:e=>a.mounted.includes(e),onActivate:u,onClose:e=>{y(e)},onCloseMany:(e,t)=>{d(e,t)},label:l.label,className:t,activeClassName:n,end:r})}var W={enabled:!1,tabs:[],activeKey:null,activate:()=>{},close:async()=>!1,closeOthers:async()=>{},closeRight:async()=>{},closeAll:async()=>{}};function $(){const e=k(K);return e&&e.enabled?{enabled:!0,tabs:e.visibleTabs,activeKey:e.currentKey,activate:e.activate,close:e.close,closeOthers:t=>e.closeMany("others",t),closeRight:t=>e.closeMany("right",t),closeAll:()=>e.closeMany("all",null)}:W}function B(){const e=k(K),t=k(j),n=h();return{key:e?.enabled&&t?t.key:null,close:d(async(r={})=>e?.enabled&&t&&e.state.tabs.some(e=>e.key===t.key)?e.close(t.key,r):(r.to&&n(r.to),!1),[e,t,n])}}function G(e){const t=k(K),n=k(j),r=t?.enabled?t.setTitle:void 0,i=n?.key;o(()=>{r&&i&&e&&r(i,e)},[r,i,e])}function S(e){const t=k(K),n=k(j),r=t?.enabled?t.setCopy:void 0,i=n?.key;o(()=>{if(r&&i)return r(i,e||null),()=>r(i,null)},[r,i,e])}function U(e){const t=k(K),n=k(j),r=t?.enabled?t.setDirty:void 0;o(()=>{if(r&&n)return r(n.key,e),()=>{n.activeRef.current&&r(n.key,!1)}},[r,n,e])}export{T as DEFAULT_MAX_TABS,J as PAGE_TABS_PAUSE_HIDDEN,P as PageTabBar,E as PageTabsOutlet,R as PageTabsProvider,O as parseTabPath,B as usePageTab,S as usePageTabCopy,U as usePageTabDirty,G as usePageTabTitle,$ as usePageTabs};
@@ -1,2 +1,2 @@
1
1
  "use client";
2
- export{APP_UPDATE_POLL_MS,AppUpdateBanner as default,useAppUpdate}from"../chunk-IZCODCSC.js";import"../chunk-WTY3SXO7.js";import"../chunk-4IU5BSVE.js";import"../chunk-K7U4RWXJ.js";import"../chunk-VH6GB73Q.js";import"../chunk-KIBL6M3T.js";import"../chunk-J75ZT2JQ.js";import"../chunk-Q5MD3VY6.js";import"../chunk-MRJKZWWV.js";import"../chunk-22S6LG6D.js";import"../chunk-PGN5ME7B.js";import"../chunk-62LW225J.js";import"../chunk-GLUJS42B.js";import"../chunk-D65T4H6J.js";import"../chunk-DTJRIWFR.js";import"../chunk-TWVUQUUD.js";import"../chunk-E6UCGCOC.js";import"../chunk-C3QOHMR6.js";
2
+ export{APP_UPDATE_POLL_MS,AppUpdateBanner as default,useAppUpdate}from"../chunk-IZCODCSC.js";import"../chunk-WTY3SXO7.js";import"../chunk-4IU5BSVE.js";import"../chunk-K7U4RWXJ.js";import"../chunk-KIBL6M3T.js";import"../chunk-J75ZT2JQ.js";import"../chunk-VH6GB73Q.js";import"../chunk-Q5MD3VY6.js";import"../chunk-MRJKZWWV.js";import"../chunk-22S6LG6D.js";import"../chunk-PGN5ME7B.js";import"../chunk-62LW225J.js";import"../chunk-GLUJS42B.js";import"../chunk-D65T4H6J.js";import"../chunk-DTJRIWFR.js";import"../chunk-TWVUQUUD.js";import"../chunk-E6UCGCOC.js";import"../chunk-C3QOHMR6.js";
@@ -1,2 +1,2 @@
1
1
  "use client";
2
- export{ContextMenu,useContextMenu}from"../chunk-AX7KPMDV.js";import"../chunk-B55IXYDR.js";import"../chunk-PJCVNFWM.js";import"../chunk-QR4RM7PO.js";import"../chunk-5QFPTDQF.js";import"../chunk-KIBL6M3T.js";import"../chunk-J75ZT2JQ.js";import"../chunk-PGN5ME7B.js";import"../chunk-62LW225J.js";import"../chunk-GLUJS42B.js";import"../chunk-D65T4H6J.js";import"../chunk-DTJRIWFR.js";import"../chunk-TWVUQUUD.js";
2
+ export{ContextMenu,useContextMenu}from"../chunk-WSODT2L5.js";import"../chunk-53ROHXAV.js";import"../chunk-O6JX6RDX.js";import"../chunk-5QFPTDQF.js";import"../chunk-QR4RM7PO.js";import"../chunk-KIBL6M3T.js";import"../chunk-J75ZT2JQ.js";import"../chunk-PGN5ME7B.js";import"../chunk-62LW225J.js";import"../chunk-GLUJS42B.js";import"../chunk-D65T4H6J.js";import"../chunk-DTJRIWFR.js";import"../chunk-TWVUQUUD.js";
@@ -1,2 +1,2 @@
1
1
  "use client";
2
- export{DropdownMenu as default}from"../chunk-WDXJWC3Y.js";import"../chunk-B55IXYDR.js";import"../chunk-PJCVNFWM.js";import"../chunk-QR4RM7PO.js";import"../chunk-5QFPTDQF.js";import"../chunk-CDAJKLGL.js";import"../chunk-KIBL6M3T.js";import"../chunk-J75ZT2JQ.js";import"../chunk-PGN5ME7B.js";import"../chunk-62LW225J.js";import"../chunk-GLUJS42B.js";import"../chunk-D65T4H6J.js";import"../chunk-DTJRIWFR.js";import"../chunk-TWVUQUUD.js";
2
+ export{DropdownMenu as default}from"../chunk-EMXR74QM.js";import"../chunk-53ROHXAV.js";import"../chunk-CDAJKLGL.js";import"../chunk-O6JX6RDX.js";import"../chunk-5QFPTDQF.js";import"../chunk-QR4RM7PO.js";import"../chunk-KIBL6M3T.js";import"../chunk-J75ZT2JQ.js";import"../chunk-PGN5ME7B.js";import"../chunk-62LW225J.js";import"../chunk-GLUJS42B.js";import"../chunk-D65T4H6J.js";import"../chunk-DTJRIWFR.js";import"../chunk-TWVUQUUD.js";
@@ -1,2 +1,2 @@
1
1
  "use client";
2
- export{EditableGrid as default,withSpareRow}from"../chunk-PPFMXLEX.js";import"../chunk-BR22X7E5.js";import"../chunk-6KO5VTL7.js";import"../chunk-22S6LG6D.js";import"../chunk-PGN5ME7B.js";import"../chunk-62LW225J.js";import"../chunk-GLUJS42B.js";import"../chunk-D65T4H6J.js";import"../chunk-DTJRIWFR.js";import"../chunk-TWVUQUUD.js";import"../chunk-E6UCGCOC.js";import"../chunk-C3QOHMR6.js";
2
+ export{EditableGrid as default,withSpareRow}from"../chunk-2RBWQVDC.js";import"../chunk-G6DKCCWH.js";import"../chunk-6KO5VTL7.js";import"../chunk-22S6LG6D.js";import"../chunk-PGN5ME7B.js";import"../chunk-62LW225J.js";import"../chunk-GLUJS42B.js";import"../chunk-D65T4H6J.js";import"../chunk-DTJRIWFR.js";import"../chunk-TWVUQUUD.js";import"../chunk-E6UCGCOC.js";import"../chunk-C3QOHMR6.js";
@@ -1,2 +1,2 @@
1
1
  "use client";
2
- export{HelpCenter as default}from"../chunk-ATX4N3L4.js";import"../chunk-4DAN4Q6P.js";import"../chunk-UJUTS6LJ.js";import"../chunk-PJPK2ADX.js";import"../chunk-JFSYWEHD.js";import"../chunk-KIBL6M3T.js";import"../chunk-J75ZT2JQ.js";import"../chunk-Q5MD3VY6.js";import"../chunk-MRJKZWWV.js";import"../chunk-E6UCGCOC.js";import"../chunk-C3QOHMR6.js";
2
+ export{HelpCenter as default}from"../chunk-I62MCTYI.js";import"../chunk-V3UIAX5G.js";import"../chunk-UJUTS6LJ.js";import"../chunk-PJPK2ADX.js";import"../chunk-JFSYWEHD.js";import"../chunk-4IU5BSVE.js";import"../chunk-K7U4RWXJ.js";import"../chunk-KIBL6M3T.js";import"../chunk-J75ZT2JQ.js";import"../chunk-VH6GB73Q.js";import"../chunk-Q5MD3VY6.js";import"../chunk-MRJKZWWV.js";import"../chunk-22S6LG6D.js";import"../chunk-PGN5ME7B.js";import"../chunk-62LW225J.js";import"../chunk-GLUJS42B.js";import"../chunk-D65T4H6J.js";import"../chunk-DTJRIWFR.js";import"../chunk-TWVUQUUD.js";import"../chunk-E6UCGCOC.js";import"../chunk-C3QOHMR6.js";
@@ -1,2 +1,2 @@
1
1
  "use client";
2
- export{ImageLightbox as default,lightboxKind}from"../chunk-RGBX3EVC.js";import"../chunk-CGUMJZUB.js";import"../chunk-DTSCO7VM.js";import"../chunk-S7VSXUKS.js";import"../chunk-VWGWZY7A.js";import"../chunk-PKXQDCNR.js";import"../chunk-CDAJKLGL.js";import"../chunk-D323R2FT.js";import"../chunk-4IU5BSVE.js";import"../chunk-K7U4RWXJ.js";import"../chunk-VH6GB73Q.js";import"../chunk-KIBL6M3T.js";import"../chunk-J75ZT2JQ.js";import"../chunk-Q5MD3VY6.js";import"../chunk-MRJKZWWV.js";import"../chunk-6KO5VTL7.js";import"../chunk-22S6LG6D.js";import"../chunk-PGN5ME7B.js";import"../chunk-62LW225J.js";import"../chunk-GLUJS42B.js";import"../chunk-D65T4H6J.js";import"../chunk-DTJRIWFR.js";import"../chunk-TWVUQUUD.js";import"../chunk-E6UCGCOC.js";import"../chunk-C3QOHMR6.js";
2
+ export{ImageLightbox as default,lightboxKind}from"../chunk-RGBX3EVC.js";import"../chunk-CGUMJZUB.js";import"../chunk-DTSCO7VM.js";import"../chunk-S7VSXUKS.js";import"../chunk-VWGWZY7A.js";import"../chunk-PKXQDCNR.js";import"../chunk-CDAJKLGL.js";import"../chunk-D323R2FT.js";import"../chunk-4IU5BSVE.js";import"../chunk-K7U4RWXJ.js";import"../chunk-KIBL6M3T.js";import"../chunk-J75ZT2JQ.js";import"../chunk-VH6GB73Q.js";import"../chunk-Q5MD3VY6.js";import"../chunk-MRJKZWWV.js";import"../chunk-6KO5VTL7.js";import"../chunk-22S6LG6D.js";import"../chunk-PGN5ME7B.js";import"../chunk-62LW225J.js";import"../chunk-GLUJS42B.js";import"../chunk-D65T4H6J.js";import"../chunk-DTJRIWFR.js";import"../chunk-TWVUQUUD.js";import"../chunk-E6UCGCOC.js";import"../chunk-C3QOHMR6.js";
@@ -1,2 +1,2 @@
1
1
  "use client";
2
- export{LanguagePanel,LanguageSelect,languageSelectWidth}from"../chunk-TXS6JKFV.js";import"../chunk-QQCHLRKG.js";import"../chunk-GSS4E7X3.js";import"../chunk-VQCKMT5F.js";import"../chunk-64ACCUNN.js";import"../chunk-TZSPJIP4.js";import"../chunk-NI5FXWK5.js";import"../chunk-VTVOQS5L.js";import"../chunk-EO5RLFRX.js";import"../chunk-UQBPKZUR.js";import"../chunk-E4Z5OXBI.js";import"../chunk-MVQBVPWP.js";import"../chunk-CGZBDI6C.js";import"../chunk-JFSYWEHD.js";import"../chunk-UGTRSRIW.js";import"../chunk-QR4RM7PO.js";import"../chunk-KIBL6M3T.js";import"../chunk-J75ZT2JQ.js";import"../chunk-PGN5ME7B.js";import"../chunk-62LW225J.js";import"../chunk-GLUJS42B.js";import"../chunk-D65T4H6J.js";import"../chunk-DTJRIWFR.js";import"../chunk-TWVUQUUD.js";import"../chunk-E6UCGCOC.js";import"../chunk-C3QOHMR6.js";
2
+ export{LanguagePanel,LanguageSelect,languageSelectWidth}from"../chunk-35YON46D.js";import"../chunk-QQCHLRKG.js";import"../chunk-GSS4E7X3.js";import"../chunk-64ACCUNN.js";import"../chunk-TZSPJIP4.js";import"../chunk-NI5FXWK5.js";import"../chunk-HJH4WIBC.js";import"../chunk-EO5RLFRX.js";import"../chunk-UQBPKZUR.js";import"../chunk-MVQBVPWP.js";import"../chunk-E4Z5OXBI.js";import"../chunk-VQCKMT5F.js";import"../chunk-CGZBDI6C.js";import"../chunk-JFSYWEHD.js";import"../chunk-UGTRSRIW.js";import"../chunk-QR4RM7PO.js";import"../chunk-KIBL6M3T.js";import"../chunk-J75ZT2JQ.js";import"../chunk-PGN5ME7B.js";import"../chunk-62LW225J.js";import"../chunk-GLUJS42B.js";import"../chunk-D65T4H6J.js";import"../chunk-DTJRIWFR.js";import"../chunk-TWVUQUUD.js";import"../chunk-E6UCGCOC.js";import"../chunk-C3QOHMR6.js";
@@ -1,6 +1,27 @@
1
1
  import * as react_jsx_runtime from 'react/jsx-runtime';
2
2
  import { ReactNode } from 'react';
3
+ import { b as IconName } from '../names-DYWfNBkN.js';
3
4
 
5
+ /** A pipe table as plain text: its header and its body rows, each cell with
6
+ * its inline Markdown taken off — what a host hands to a spreadsheet or the
7
+ * clipboard, where `**33**` would arrive as five characters. */
8
+ interface MarkdownTable {
9
+ header: string[];
10
+ rows: string[][];
11
+ }
12
+ /** A control a host draws under every table (`tableActions`): "Open in
13
+ * Spreadsheet", "Copy as CSV". The renderer knows nothing of what they do. */
14
+ interface MarkdownTableAction {
15
+ label: string;
16
+ icon?: IconName;
17
+ onSelect: (table: MarkdownTable) => void;
18
+ }
19
+ /** A cell's text with its inline markup removed: link and image text kept,
20
+ * bold, italic and code marks dropped. */
21
+ declare function plainCell(text: string): string;
22
+ /** RFC 4180 CSV, CRLF between records: a field with a comma, a quote or a line
23
+ * break is quoted and its quotes doubled. */
24
+ declare function tableToCsv({ header, rows }: MarkdownTable): string;
4
25
  /** A fenced code block: its info string and its lines, delimiters removed. */
5
26
  interface MarkdownFence {
6
27
  /** The info string's first word, `''` for none. */
@@ -19,7 +40,10 @@ interface MarkdownProps {
19
40
  * host cannot read must never take the rest of the body down with it.
20
41
  */
21
42
  renderFence?: (fence: MarkdownFence) => ReactNode;
43
+ /** Controls drawn under every pipe table, each handed that table as plain
44
+ * text. None by default: help articles draw bare tables. */
45
+ tableActions?: MarkdownTableAction[];
22
46
  }
23
- declare function Markdown({ children, className, renderFence: render }: MarkdownProps): react_jsx_runtime.JSX.Element;
47
+ declare function Markdown({ children, className, renderFence: render, tableActions }: MarkdownProps): react_jsx_runtime.JSX.Element;
24
48
 
25
- export { type MarkdownFence, type MarkdownProps, Markdown as default };
49
+ export { type MarkdownFence, type MarkdownProps, type MarkdownTable, type MarkdownTableAction, Markdown as default, plainCell, tableToCsv };
@@ -1,2 +1,2 @@
1
1
  "use client";
2
- export{Markdown as default}from"../chunk-4DAN4Q6P.js";import"../chunk-UJUTS6LJ.js";import"../chunk-PJPK2ADX.js";import"../chunk-KIBL6M3T.js";import"../chunk-J75ZT2JQ.js";import"../chunk-E6UCGCOC.js";import"../chunk-C3QOHMR6.js";
2
+ export{Markdown as default,plainCell,tableToCsv}from"../chunk-V3UIAX5G.js";import"../chunk-UJUTS6LJ.js";import"../chunk-PJPK2ADX.js";import"../chunk-4IU5BSVE.js";import"../chunk-K7U4RWXJ.js";import"../chunk-KIBL6M3T.js";import"../chunk-J75ZT2JQ.js";import"../chunk-VH6GB73Q.js";import"../chunk-Q5MD3VY6.js";import"../chunk-MRJKZWWV.js";import"../chunk-22S6LG6D.js";import"../chunk-PGN5ME7B.js";import"../chunk-62LW225J.js";import"../chunk-GLUJS42B.js";import"../chunk-D65T4H6J.js";import"../chunk-DTJRIWFR.js";import"../chunk-TWVUQUUD.js";import"../chunk-E6UCGCOC.js";import"../chunk-C3QOHMR6.js";
@@ -1,2 +1,2 @@
1
1
  "use client";
2
- export{MenuCheckMark,MenuIcon,MenuSemanticsContext,PopupMenu,PopupMenuDivider,PopupMenuItem,PopupMenuLabel,PopupSubmenu,itemLook,menuTextRowStyle}from"../chunk-PJCVNFWM.js";import"../chunk-QR4RM7PO.js";import"../chunk-5QFPTDQF.js";import"../chunk-KIBL6M3T.js";import"../chunk-J75ZT2JQ.js";import"../chunk-PGN5ME7B.js";import"../chunk-62LW225J.js";import"../chunk-D65T4H6J.js";import"../chunk-DTJRIWFR.js";import"../chunk-TWVUQUUD.js";
2
+ export{MenuCheckMark,MenuIcon,MenuSemanticsContext,PopupMenu,PopupMenuDivider,PopupMenuItem,PopupMenuLabel,PopupSubmenu,itemLook,menuTextRowStyle}from"../chunk-O6JX6RDX.js";import"../chunk-5QFPTDQF.js";import"../chunk-QR4RM7PO.js";import"../chunk-KIBL6M3T.js";import"../chunk-J75ZT2JQ.js";import"../chunk-PGN5ME7B.js";import"../chunk-62LW225J.js";import"../chunk-D65T4H6J.js";import"../chunk-DTJRIWFR.js";import"../chunk-TWVUQUUD.js";
@@ -1,2 +1,2 @@
1
1
  "use client";
2
- export{SearchableSelect as default,fitChoice}from"../chunk-NMK4UQXZ.js";import"../chunk-EO5RLFRX.js";import"../chunk-UQBPKZUR.js";import"../chunk-JFSYWEHD.js";import"../chunk-4IU5BSVE.js";import"../chunk-K7U4RWXJ.js";import"../chunk-VH6GB73Q.js";import"../chunk-KIBL6M3T.js";import"../chunk-J75ZT2JQ.js";import"../chunk-Q5MD3VY6.js";import"../chunk-MRJKZWWV.js";import"../chunk-22S6LG6D.js";import"../chunk-PGN5ME7B.js";import"../chunk-62LW225J.js";import"../chunk-GLUJS42B.js";import"../chunk-D65T4H6J.js";import"../chunk-DTJRIWFR.js";import"../chunk-TWVUQUUD.js";import"../chunk-E6UCGCOC.js";import"../chunk-C3QOHMR6.js";
2
+ export{SearchableSelect as default,fitChoice}from"../chunk-NMK4UQXZ.js";import"../chunk-EO5RLFRX.js";import"../chunk-UQBPKZUR.js";import"../chunk-JFSYWEHD.js";import"../chunk-4IU5BSVE.js";import"../chunk-K7U4RWXJ.js";import"../chunk-KIBL6M3T.js";import"../chunk-J75ZT2JQ.js";import"../chunk-VH6GB73Q.js";import"../chunk-Q5MD3VY6.js";import"../chunk-MRJKZWWV.js";import"../chunk-22S6LG6D.js";import"../chunk-PGN5ME7B.js";import"../chunk-62LW225J.js";import"../chunk-GLUJS42B.js";import"../chunk-D65T4H6J.js";import"../chunk-DTJRIWFR.js";import"../chunk-TWVUQUUD.js";import"../chunk-E6UCGCOC.js";import"../chunk-C3QOHMR6.js";
@@ -1,2 +1,2 @@
1
1
  "use client";
2
- export{SettingReset as default}from"../chunk-PDXD6DT7.js";import"../chunk-4CANQ3B3.js";import"../chunk-K7U4RWXJ.js";import"../chunk-VH6GB73Q.js";import"../chunk-KIBL6M3T.js";import"../chunk-J75ZT2JQ.js";import"../chunk-22S6LG6D.js";import"../chunk-PGN5ME7B.js";import"../chunk-62LW225J.js";import"../chunk-GLUJS42B.js";import"../chunk-D65T4H6J.js";import"../chunk-DTJRIWFR.js";import"../chunk-TWVUQUUD.js";import"../chunk-E6UCGCOC.js";import"../chunk-C3QOHMR6.js";
2
+ export{SettingReset as default}from"../chunk-PDXD6DT7.js";import"../chunk-4CANQ3B3.js";import"../chunk-K7U4RWXJ.js";import"../chunk-KIBL6M3T.js";import"../chunk-J75ZT2JQ.js";import"../chunk-VH6GB73Q.js";import"../chunk-22S6LG6D.js";import"../chunk-PGN5ME7B.js";import"../chunk-62LW225J.js";import"../chunk-GLUJS42B.js";import"../chunk-D65T4H6J.js";import"../chunk-DTJRIWFR.js";import"../chunk-TWVUQUUD.js";import"../chunk-E6UCGCOC.js";import"../chunk-C3QOHMR6.js";
@@ -1,2 +1,2 @@
1
1
  "use client";
2
- export{SettingRow as default}from"../chunk-X7XJBK2E.js";import"../chunk-MAOJENIB.js";import"../chunk-HCP7WOAL.js";import"../chunk-E4Z5OXBI.js";import"../chunk-E6UCGCOC.js";import"../chunk-C3QOHMR6.js";
2
+ export{SettingRow as default}from"../chunk-OVVXSAGE.js";import"../chunk-MAOJENIB.js";import"../chunk-E4Z5OXBI.js";import"../chunk-HCP7WOAL.js";import"../chunk-E6UCGCOC.js";import"../chunk-C3QOHMR6.js";
@@ -8,7 +8,9 @@ import { DropdownMenuEntry } from './DropdownMenu.js';
8
8
  * and styled with the shell's Tailwind utilities, so it themes for free.
9
9
  *
10
10
  * Controlled: pass `activeKey` and handle `onSelect`. The active item gets an
11
- * accent underline. Items can carry an `icon`, a `badge` (e.g. a count) and be
11
+ * accent fill and underline, and a thin line stands between each two items, so
12
+ * every tab reads as one place of its own: "Cash" and "Safe" side by side used
13
+ * to read as one "Cash Safe" (Foyerboard Venue, 2026-10-22). Items can carry an `icon`, a `badge` (e.g. a count) and be
12
14
  * `disabled`.
13
15
  *
14
16
  * An item with a `menu` is a dropdown in the row ("Manage ▾", "Reports ▾"):
@@ -1,2 +1,2 @@
1
1
  "use client";
2
- export{TopNav as default}from"../chunk-CUT7PAXL.js";import"../chunk-WDXJWC3Y.js";import"../chunk-B55IXYDR.js";import"../chunk-PJCVNFWM.js";import"../chunk-QR4RM7PO.js";import"../chunk-5QFPTDQF.js";import"../chunk-CDAJKLGL.js";import"../chunk-KIBL6M3T.js";import"../chunk-J75ZT2JQ.js";import"../chunk-PGN5ME7B.js";import"../chunk-62LW225J.js";import"../chunk-GLUJS42B.js";import"../chunk-D65T4H6J.js";import"../chunk-DTJRIWFR.js";import"../chunk-TWVUQUUD.js";
2
+ export{TopNav as default}from"../chunk-Z37R2OCE.js";import"../chunk-EMXR74QM.js";import"../chunk-53ROHXAV.js";import"../chunk-CDAJKLGL.js";import"../chunk-O6JX6RDX.js";import"../chunk-5QFPTDQF.js";import"../chunk-QR4RM7PO.js";import"../chunk-KIBL6M3T.js";import"../chunk-J75ZT2JQ.js";import"../chunk-PGN5ME7B.js";import"../chunk-62LW225J.js";import"../chunk-GLUJS42B.js";import"../chunk-D65T4H6J.js";import"../chunk-DTJRIWFR.js";import"../chunk-TWVUQUUD.js";
@@ -1 +1 @@
1
- export{startClientTelemetry}from"../chunk-KPTC2JPT.js";import"../chunk-KNUR2UEG.js";import"../chunk-RNJ3MNO5.js";
1
+ export{startClientTelemetry}from"../chunk-VEO34YZK.js";import"../chunk-KNUR2UEG.js";import"../chunk-DPDA3AJL.js";
@@ -1,2 +1,2 @@
1
1
  "use client";
2
- export{ChatTemplate as default}from"../chunk-KAWMOFSI.js";import"../chunk-TFMOGKW2.js";import"../chunk-KZHPX4FM.js";import"../chunk-QWK6DRSN.js";import"../chunk-MMFJBWJC.js";import"../chunk-UNEJ2ABD.js";import"../chunk-JFSYWEHD.js";import"../chunk-UGTRSRIW.js";import"../chunk-4IU5BSVE.js";import"../chunk-K7U4RWXJ.js";import"../chunk-VH6GB73Q.js";import"../chunk-KIBL6M3T.js";import"../chunk-J75ZT2JQ.js";import"../chunk-Q5MD3VY6.js";import"../chunk-MRJKZWWV.js";import"../chunk-22S6LG6D.js";import"../chunk-PGN5ME7B.js";import"../chunk-62LW225J.js";import"../chunk-GLUJS42B.js";import"../chunk-D65T4H6J.js";import"../chunk-DTJRIWFR.js";import"../chunk-TWVUQUUD.js";import"../chunk-E6UCGCOC.js";import"../chunk-C3QOHMR6.js";
2
+ export{ChatTemplate as default}from"../chunk-KAWMOFSI.js";import"../chunk-TFMOGKW2.js";import"../chunk-KZHPX4FM.js";import"../chunk-QWK6DRSN.js";import"../chunk-MMFJBWJC.js";import"../chunk-UNEJ2ABD.js";import"../chunk-JFSYWEHD.js";import"../chunk-UGTRSRIW.js";import"../chunk-4IU5BSVE.js";import"../chunk-K7U4RWXJ.js";import"../chunk-KIBL6M3T.js";import"../chunk-J75ZT2JQ.js";import"../chunk-VH6GB73Q.js";import"../chunk-Q5MD3VY6.js";import"../chunk-MRJKZWWV.js";import"../chunk-22S6LG6D.js";import"../chunk-PGN5ME7B.js";import"../chunk-62LW225J.js";import"../chunk-GLUJS42B.js";import"../chunk-D65T4H6J.js";import"../chunk-DTJRIWFR.js";import"../chunk-TWVUQUUD.js";import"../chunk-E6UCGCOC.js";import"../chunk-C3QOHMR6.js";
@@ -1,2 +1,2 @@
1
1
  "use client";
2
- export{CheckoutTemplate as default}from"../chunk-XHBQPVNG.js";import"../chunk-VU6VPKM3.js";import"../chunk-VTVOQS5L.js";import"../chunk-EO5RLFRX.js";import"../chunk-UQBPKZUR.js";import"../chunk-UNEJ2ABD.js";import"../chunk-E4Z5OXBI.js";import"../chunk-MVQBVPWP.js";import"../chunk-CGZBDI6C.js";import"../chunk-WTY3SXO7.js";import"../chunk-JFSYWEHD.js";import"../chunk-UGTRSRIW.js";import"../chunk-QR4RM7PO.js";import"../chunk-4IU5BSVE.js";import"../chunk-K7U4RWXJ.js";import"../chunk-VH6GB73Q.js";import"../chunk-KIBL6M3T.js";import"../chunk-J75ZT2JQ.js";import"../chunk-Q5MD3VY6.js";import"../chunk-MRJKZWWV.js";import"../chunk-22S6LG6D.js";import"../chunk-PGN5ME7B.js";import"../chunk-62LW225J.js";import"../chunk-GLUJS42B.js";import"../chunk-D65T4H6J.js";import"../chunk-DTJRIWFR.js";import"../chunk-TWVUQUUD.js";import"../chunk-E6UCGCOC.js";import"../chunk-C3QOHMR6.js";
2
+ export{CheckoutTemplate as default}from"../chunk-BDCMFW5N.js";import"../chunk-VU6VPKM3.js";import"../chunk-HJH4WIBC.js";import"../chunk-EO5RLFRX.js";import"../chunk-UQBPKZUR.js";import"../chunk-UNEJ2ABD.js";import"../chunk-MVQBVPWP.js";import"../chunk-E4Z5OXBI.js";import"../chunk-CGZBDI6C.js";import"../chunk-WTY3SXO7.js";import"../chunk-JFSYWEHD.js";import"../chunk-UGTRSRIW.js";import"../chunk-QR4RM7PO.js";import"../chunk-4IU5BSVE.js";import"../chunk-K7U4RWXJ.js";import"../chunk-KIBL6M3T.js";import"../chunk-J75ZT2JQ.js";import"../chunk-VH6GB73Q.js";import"../chunk-Q5MD3VY6.js";import"../chunk-MRJKZWWV.js";import"../chunk-22S6LG6D.js";import"../chunk-PGN5ME7B.js";import"../chunk-62LW225J.js";import"../chunk-GLUJS42B.js";import"../chunk-D65T4H6J.js";import"../chunk-DTJRIWFR.js";import"../chunk-TWVUQUUD.js";import"../chunk-E6UCGCOC.js";import"../chunk-C3QOHMR6.js";
@@ -1,2 +1,2 @@
1
1
  "use client";
2
- export{DataTablePage as default}from"../chunk-WJRBDHXD.js";import"../chunk-VU6VPKM3.js";import"../chunk-VTVOQS5L.js";import"../chunk-EO5RLFRX.js";import"../chunk-UQBPKZUR.js";import"../chunk-UNEJ2ABD.js";import"../chunk-E4Z5OXBI.js";import"../chunk-M5P6A7KS.js";import"../chunk-JFSYWEHD.js";import"../chunk-UGTRSRIW.js";import"../chunk-QR4RM7PO.js";import"../chunk-D323R2FT.js";import"../chunk-4IU5BSVE.js";import"../chunk-K7U4RWXJ.js";import"../chunk-VH6GB73Q.js";import"../chunk-KIBL6M3T.js";import"../chunk-J75ZT2JQ.js";import"../chunk-Q5MD3VY6.js";import"../chunk-MRJKZWWV.js";import"../chunk-6KO5VTL7.js";import"../chunk-22S6LG6D.js";import"../chunk-PGN5ME7B.js";import"../chunk-62LW225J.js";import"../chunk-GLUJS42B.js";import"../chunk-D65T4H6J.js";import"../chunk-DTJRIWFR.js";import"../chunk-TWVUQUUD.js";import"../chunk-E6UCGCOC.js";import"../chunk-C3QOHMR6.js";
2
+ export{DataTablePage as default}from"../chunk-F4GLNQIX.js";import"../chunk-VU6VPKM3.js";import"../chunk-HJH4WIBC.js";import"../chunk-EO5RLFRX.js";import"../chunk-UQBPKZUR.js";import"../chunk-UNEJ2ABD.js";import"../chunk-E4Z5OXBI.js";import"../chunk-M5P6A7KS.js";import"../chunk-JFSYWEHD.js";import"../chunk-UGTRSRIW.js";import"../chunk-D323R2FT.js";import"../chunk-QR4RM7PO.js";import"../chunk-4IU5BSVE.js";import"../chunk-K7U4RWXJ.js";import"../chunk-KIBL6M3T.js";import"../chunk-J75ZT2JQ.js";import"../chunk-VH6GB73Q.js";import"../chunk-Q5MD3VY6.js";import"../chunk-MRJKZWWV.js";import"../chunk-6KO5VTL7.js";import"../chunk-22S6LG6D.js";import"../chunk-PGN5ME7B.js";import"../chunk-62LW225J.js";import"../chunk-GLUJS42B.js";import"../chunk-D65T4H6J.js";import"../chunk-DTJRIWFR.js";import"../chunk-TWVUQUUD.js";import"../chunk-E6UCGCOC.js";import"../chunk-C3QOHMR6.js";
@@ -1,2 +1,2 @@
1
1
  "use client";
2
- export{EmailTemplate as default}from"../chunk-YRWRA7MW.js";import"../chunk-TFMOGKW2.js";import"../chunk-KZHPX4FM.js";import"../chunk-QWK6DRSN.js";import"../chunk-MMFJBWJC.js";import"../chunk-UGTRSRIW.js";import"../chunk-4IU5BSVE.js";import"../chunk-K7U4RWXJ.js";import"../chunk-VH6GB73Q.js";import"../chunk-KIBL6M3T.js";import"../chunk-J75ZT2JQ.js";import"../chunk-Q5MD3VY6.js";import"../chunk-MRJKZWWV.js";import"../chunk-22S6LG6D.js";import"../chunk-PGN5ME7B.js";import"../chunk-62LW225J.js";import"../chunk-GLUJS42B.js";import"../chunk-D65T4H6J.js";import"../chunk-DTJRIWFR.js";import"../chunk-TWVUQUUD.js";import"../chunk-E6UCGCOC.js";import"../chunk-C3QOHMR6.js";
2
+ export{EmailTemplate as default}from"../chunk-YRWRA7MW.js";import"../chunk-TFMOGKW2.js";import"../chunk-KZHPX4FM.js";import"../chunk-QWK6DRSN.js";import"../chunk-MMFJBWJC.js";import"../chunk-UGTRSRIW.js";import"../chunk-4IU5BSVE.js";import"../chunk-K7U4RWXJ.js";import"../chunk-KIBL6M3T.js";import"../chunk-J75ZT2JQ.js";import"../chunk-VH6GB73Q.js";import"../chunk-Q5MD3VY6.js";import"../chunk-MRJKZWWV.js";import"../chunk-22S6LG6D.js";import"../chunk-PGN5ME7B.js";import"../chunk-62LW225J.js";import"../chunk-GLUJS42B.js";import"../chunk-D65T4H6J.js";import"../chunk-DTJRIWFR.js";import"../chunk-TWVUQUUD.js";import"../chunk-E6UCGCOC.js";import"../chunk-C3QOHMR6.js";
@@ -1,2 +1,2 @@
1
1
  "use client";
2
- export{FormLayoutPage as default}from"../chunk-NHCRQ7SW.js";import"../chunk-VU6VPKM3.js";import"../chunk-NI5FXWK5.js";import"../chunk-VTVOQS5L.js";import"../chunk-EO5RLFRX.js";import"../chunk-UQBPKZUR.js";import"../chunk-UNEJ2ABD.js";import"../chunk-E4Z5OXBI.js";import"../chunk-MVQBVPWP.js";import"../chunk-CGZBDI6C.js";import"../chunk-AWY3F6PV.js";import"../chunk-JFSYWEHD.js";import"../chunk-UGTRSRIW.js";import"../chunk-QR4RM7PO.js";import"../chunk-4IU5BSVE.js";import"../chunk-K7U4RWXJ.js";import"../chunk-VH6GB73Q.js";import"../chunk-KIBL6M3T.js";import"../chunk-J75ZT2JQ.js";import"../chunk-Q5MD3VY6.js";import"../chunk-MRJKZWWV.js";import"../chunk-22S6LG6D.js";import"../chunk-PGN5ME7B.js";import"../chunk-62LW225J.js";import"../chunk-GLUJS42B.js";import"../chunk-D65T4H6J.js";import"../chunk-DTJRIWFR.js";import"../chunk-TWVUQUUD.js";import"../chunk-E6UCGCOC.js";import"../chunk-C3QOHMR6.js";
2
+ export{FormLayoutPage as default}from"../chunk-BGLKEWVR.js";import"../chunk-VU6VPKM3.js";import"../chunk-NI5FXWK5.js";import"../chunk-HJH4WIBC.js";import"../chunk-EO5RLFRX.js";import"../chunk-UQBPKZUR.js";import"../chunk-UNEJ2ABD.js";import"../chunk-MVQBVPWP.js";import"../chunk-E4Z5OXBI.js";import"../chunk-CGZBDI6C.js";import"../chunk-AWY3F6PV.js";import"../chunk-JFSYWEHD.js";import"../chunk-UGTRSRIW.js";import"../chunk-QR4RM7PO.js";import"../chunk-4IU5BSVE.js";import"../chunk-K7U4RWXJ.js";import"../chunk-KIBL6M3T.js";import"../chunk-J75ZT2JQ.js";import"../chunk-VH6GB73Q.js";import"../chunk-Q5MD3VY6.js";import"../chunk-MRJKZWWV.js";import"../chunk-22S6LG6D.js";import"../chunk-PGN5ME7B.js";import"../chunk-62LW225J.js";import"../chunk-GLUJS42B.js";import"../chunk-D65T4H6J.js";import"../chunk-DTJRIWFR.js";import"../chunk-TWVUQUUD.js";import"../chunk-E6UCGCOC.js";import"../chunk-C3QOHMR6.js";
@@ -50,7 +50,7 @@ export { PictureTileOption, default as PictureTiles, PictureTilesProps } from '.
50
50
  export { default as WidthsBar, WidthsBarProps } from '../forms/WidthsBar.js';
51
51
  export { COLUMN_COUNT_MAX, COLUMN_COUNT_WIDTHS, COLUMN_SHARES_EQUAL, COLUMN_SHARE_MIN, ColumnShares, columnSharesWidths, resolveColumnShares, resolveColumnWidths } from '../forms/columnShares.js';
52
52
  export { default as ColorPicker, ColorPickerPanel, ColorPickerPanelProps, ColorPickerProps, ColorPreset, ColorSwatch, ColorSwatchProps, ColorSwatchSize, HexInput, colorFill, colorSwatchClasses } from '../forms/ColorPicker.js';
53
- export { Hsv, hexToHsv, hsvToHex, parseHexColor } from '../forms/color.js';
53
+ export { Hsv, Rgb, contrastRatio, hexToHsv, hexToRgb, hsvToHex, parseHexColor, readableInk, relativeLuminance } from '../forms/color.js';
54
54
  export { default as ImageFocusPoint, ImageFocusPointProps } from '../forms/ImageFocusPoint.js';
55
55
  export { FOCAL_DEFAULT, FOCAL_NUDGE_COARSE, FOCAL_NUDGE_STEP, FocalPoint, focalFromRect, formatFocal, nudgeFocal, parseFocal } from '../forms/imageFocus.js';
56
56
  export { LinkFilter, LinkFilterField, LinkKindChoice, LinkOption, LinkOptionGroup, default as LinkPicker, LinkPickerFieldProps, LinkPickerProps, LinkPickerWindowProps, LinkRules, LinkTarget, TextLinkField, TextLinkFieldProps } from '../forms/LinkPicker.js';
@@ -102,7 +102,7 @@ export { Milestone, MilestoneKind, default as MilestoneTimeline, MilestoneTimeli
102
102
  export { POST_PRODUCTION_STATUSES, default as ProductionTimeline, ProductionTimelineProps, ProductionTimelineSnapshot, ProgressItem, STAGES, TimelineReport, UseProductionTimelineOpts, calcOverall, calcReportOverall, useProductionTimeline } from '../shell/ProductionTimeline.js';
103
103
  export { DAY_MS, fmtSliderDate, toDayMs } from '../shell/timelineDates.js';
104
104
  export { default as ContainerFillChart, ContainerFillChartProps, ContainerFillItem } from '../shell/ContainerFillChart.js';
105
- export { default as Markdown, default as MarkdownLite, MarkdownFence as MarkdownLiteFence, MarkdownProps as MarkdownLiteProps, MarkdownProps } from '../shell/Markdown.js';
105
+ export { default as Markdown, default as MarkdownLite, MarkdownFence as MarkdownLiteFence, MarkdownProps as MarkdownLiteProps, MarkdownProps, MarkdownTable, MarkdownTableAction, plainCell, tableToCsv } from '../shell/Markdown.js';
106
106
  export { default as HelpCenter, HelpCenterDoc, HelpCenterProps } from '../shell/HelpCenter.js';
107
107
  export { SeverityTone, isSeverityTone, severityOf } from '../shell/severity.js';
108
108
  export { default as SidebarLayout, SidebarLayoutProps } from '../shell/SidebarLayout.js';
@@ -162,6 +162,8 @@ export { GLASS_DIVIDER, GlassOptions, glassStyle, solidSurfaceStyle } from '../u
162
162
  export { NEXT_CHUNK_PATH_PREFIX, STALE_CHUNK_RELOAD_COOLDOWN_MS, STALE_CHUNK_RELOAD_KEY, StaleChunkReloadOptions, VITE_PRELOAD_ERROR_EVENT, installStaleChunkReload, isStaleChunkError } from '../shell/staleChunk.js';
163
163
  export { DATE_FORMAT_OPTIONS, DateFormatKey, FormatDateOptions, TZ_AUTO, firstDayOfWeek, formatDate, formatDateTime, formatTime, getUserDateFormat, getUserTimezone, setUserDateFormat, setUserTimezone, syncTimezoneFromProfile } from '../utils/date.js';
164
164
  export { CurrencyFormat, EMPTY_VALUE, FormatMoneyOptions, TimeAgoOptions, currencyDecimals, currencySymbol, formatBytes, formatMoney, setCurrencyFormats, timeAgo } from '../utils/format.js';
165
+ export { slugify } from '../utils/slugify.js';
166
+ export { escapeHtml } from '../utils/escapeHtml.js';
165
167
  export { default as EmptyValue, EmptyValueProps } from '../shell/EmptyValue.js';
166
168
  export { default as TimeAgo, TimeAgoProps } from '../shell/TimeAgo.js';
167
169
  export { default as useDebouncedValue } from '../hooks/useDebouncedValue.js';