efficient-shell 4.167.0 → 4.171.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +242 -0
- package/dist/{Browser-6JAAEWKO.js → Browser-BW3EZ7B2.js} +14 -14
- package/dist/Calculator-VBK5NSMU.js +29 -0
- package/dist/ConfirmDialog-YRCG3W2T.js +1 -0
- package/dist/{CurrencyConverter-3BTIZ2LT.js → CurrencyConverter-IW6F7HW4.js} +6 -6
- package/dist/{Documents-DJI7WGXG.js → Documents-VH3JXSSJ.js} +10 -10
- package/dist/{Files-T5EUM5IQ.js → Files-R4ZA5MXU.js} +31 -31
- package/dist/{Notepad-KNRYFOM4.js → Notepad-FOITSJJA.js} +10 -10
- package/dist/{PomodoroTimer-SCPEOG6W.js → PomodoroTimer-C4SVIFC6.js} +31 -31
- package/dist/{Preview-XLDGT7V4.js → Preview-5K6LK6WZ.js} +21 -21
- package/dist/{Sidebar-C5RXL72L.js → Sidebar-FDFNRXJU.js} +20 -20
- package/dist/{Spreadsheet-3GOYRHZ3.js → Spreadsheet-CZC3QU2G.js} +13 -13
- package/dist/{Stock-UGDIALNB.js → Stock-B4WWEBZH.js} +6 -6
- package/dist/{Weather-CR2MN5XF.js → Weather-TDB5AY23.js} +15 -15
- package/dist/{WorldClock-JBNJ7C7J.js → WorldClock-HYHDVPBV.js} +7 -7
- package/dist/apps/index.js +1 -1
- package/dist/bin/ui-check.js +2 -0
- package/dist/brand.css +1 -1
- package/dist/{chunk-JLPJBO7K.js → chunk-2UIKLYAI.js} +1 -1
- package/dist/{chunk-B5OVATHU.js → chunk-36QX6LOQ.js} +3 -3
- package/dist/{chunk-SOI4LR67.js → chunk-5G4QMZGJ.js} +3 -3
- package/dist/chunk-67ZUPDWG.js +1 -0
- package/dist/{chunk-PLX2N4N6.js → chunk-7YFAFXQG.js} +2 -2
- package/dist/{chunk-FVXBJGY5.js → chunk-AUKURHBZ.js} +3 -3
- package/dist/{chunk-A7Q4BCPI.js → chunk-CRI4UFBU.js} +5 -5
- package/dist/{chunk-M4DB7UBZ.js → chunk-ECFMRDUP.js} +1 -1
- package/dist/chunk-EXXHI5DO.js +12 -0
- package/dist/chunk-FWOPZB6I.js +1 -0
- package/dist/chunk-FWZUTHP5.js +112 -0
- package/dist/chunk-GKLJ2SYS.js +995 -0
- package/dist/{chunk-YWXYBJ5Y.js → chunk-HA2WG27U.js} +2 -2
- package/dist/{chunk-CUX4XGLS.js → chunk-HNXPIYRS.js} +1 -1
- package/dist/{chunk-QZG72OVX.js → chunk-NTCAZ6Y3.js} +1 -1
- package/dist/{chunk-N3ZXQE4M.js → chunk-PGVUO7GB.js} +5 -5
- package/dist/{chunk-XKHAP6N2.js → chunk-Y3UKUB7V.js} +8 -8
- package/dist/chunk-YKZHOXI4.js +2 -0
- package/dist/icons/efficient.d.ts +355 -0
- package/dist/icons/efficient.js +470 -0
- package/dist/icons/heroicons.d.ts +6 -0
- package/dist/icons/heroicons.js +1 -0
- package/dist/icons/index.d.ts +64 -0
- package/dist/icons/index.js +2 -0
- package/dist/icons/lucide.d.ts +6 -0
- package/dist/icons/lucide.js +1 -0
- package/dist/{index-CbLbd__n.d.ts → index-Dq20bi8D.d.ts} +125 -1
- package/dist/index.d.ts +4 -2
- package/dist/index.js +650 -645
- package/dist/map/index.js +3 -3
- package/dist/page-tabs/index.js +5 -5
- package/dist/registry-FHdUeVww.d.ts +71 -0
- package/dist/ui/index.d.ts +3 -1
- package/dist/ui/index.js +1 -1
- package/dist/ui.css +81 -0
- package/package.json +35 -2
- package/dist/Calculator-NXMUEH5D.js +0 -29
- package/dist/ConfirmDialog-ZDVMT74Y.js +0 -1
- package/dist/chunk-CZMMBYNN.js +0 -1
- package/dist/chunk-GVZLCY3B.js +0 -994
- package/dist/chunk-JYLI2WXW.js +0 -12
- package/dist/chunk-LW27IM3S.js +0 -112
package/dist/map/index.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use client";
|
|
2
|
-
import{Button_default as e}from"../chunk-JYLI2WXW.js";import{rootIsDark as t,ROOT_THEME_ATTRIBUTES as n}from"../chunk-HZZNJHRH.js";import"../chunk-X4FJ54PP.js";import{useShellStrings as r}from"../chunk-NCQLGQYR.js";import"../chunk-D65T4H6J.js";import{useRef as o,useState as a,useEffect as l,useCallback as i,useMemo as s,useSyncExternalStore as c}from"react";import{createPortal as u}from"react-dom";import{jsxs as d,jsx as p,Fragment as m}from"react/jsx-runtime";import{useQuery as h}from"@tanstack/react-query";var g="maplibregl-compact-show";function f(e){if(!e)return()=>{};const t=()=>!!e.classList.contains(g)&&(e.classList.remove(g),!0);if(t())return()=>{};const n=new MutationObserver(()=>{t()&&n.disconnect()});return n.observe(e,{attributes:!0,attributeFilter:["class"]}),()=>n.disconnect()}var y=20,b=12,x=480,v={center:[0,0],left:[y,0],right:[-20,0],top:[0,y],"top-left":[0,y],"top-right":[0,y],bottom:[0,-20],"bottom-left":[0,-20],"bottom-right":[0,-20]},w=(e,t=12)=>Math.max(0,Math.floor(e-t-b-y-10-16));function k(e,t,n,r=12){const o=e.y-y-r,a=n.height-e.y-y-b,l=t.height<=o||t.height>a&&o>=a,i=l?Math.max(0,t.height-o):-Math.max(0,t.height-a);let s="",c=0;return e.x-t.width/2<b?(s="-left",c=Math.max(0,b-e.x)):e.x+t.width/2>n.width-b&&(s="-right",c=-Math.max(0,e.x-(n.width-b))),{anchor:`${l?"bottom":"top"}${s}`,move:{x:c,y:i}}}var M="maplibre-gl-worker.mjs",N=e=>`/maplibre-gl/${e}/${M}`,C=null;function L(){return C??=Promise.all([import("maplibre-gl"),import("maplibre-gl/dist/maplibre-gl.css")]).then(([e])=>(e.setWorkerUrl(N(e.getVersion())),e)).catch(e=>{throw C=null,e}),C}var $=24,E=28,S=29;function j(e){const t=[...e].sort((e,t)=>e-t),n=[];for(let e=0;e<t.length;){let r=e;for(;r+1<t.length&&t[r+1]===t[r]+1;)r++;n.push(r===e?String(t[e]):`${t[e]}–${t[r]}`),e=r+1}return n.join(", ")}function z(e){const t=Math.max(E,12+8*e.length);return t+t%2}var A=(e,t,n,r)=>({left:e-n/2,top:t-r/2,right:e+n/2,bottom:t+r/2});function R(e,t){return e.left<t.right+1&&t.left<e.right+1&&e.top<t.bottom+1&&t.top<e.bottom+1}var B=e=>A(e.x,e.y,e.width,e.height);function T(e){for(let t=0;t<e.length;t++)for(let n=t+1;n<e.length;n++)if(R(B(e[t]),B(e[n])))return[e[t],e[n]];return null}function O(e,t=[]){const n=[],r=e=>t.some(t=>R(t,e));let o=e.filter(e=>null!==e.stop).sort((e,t)=>e.stop-t.stop).map(e=>({keys:[e.key],stops:[e.stop],x:e.x,y:e.y,width:E,height:E,under:0}));for(let e=T(o);e;e=T(o)){const[t,n]=e;t.keys.push(...n.keys),t.stops.push(...n.stops),t.stops.sort((e,t)=>e-t),t.width=z(j(t.stops)),o=o.filter(e=>e!==n)}o=o.filter(e=>!r(B(e))||(n.push(...e.keys),!1));const a=[];for(const t of e){if(null!==t.stop)continue;const e=A(t.x,t.y,$,$),l=o.find(t=>R(B(t),e));if(l||r(e)){n.push(t.key),l&&l.under++;continue}const i=a.find(t=>R(B(t),e));i?i.keys.push(t.key):a.push({keys:[t.key],stops:[],x:t.x,y:t.y,width:$,height:$,under:0})}return{groups:[...o,...a],hidden:n}}function W(e,t,n){let r=-1/0;for(const o of t){const t=Math.max(Math.abs(o.x-e.x),Math.abs(o.y-e.y));r=Math.max(r,0===t?1/0:n+Math.log2(29/t))}return r}function F(e){const t=new MutationObserver(e);return t.observe(document.documentElement,{attributes:!0,attributeFilter:n}),()=>t.disconnect()}var q=t;var H="routes",K=["routes-road","routes-estimate"];function _(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(),P(n)}function P(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 I={light:"https://tiles.openfreemap.org/styles/positron",dark:"https://tiles.openfreemap.org/styles/dark"},Z={center:[30,20],zoom:1},D="ring-2 ring-gray-900 ring-offset-2";var G="var(--color-gray-600, #4b5563)",J="http://www.w3.org/2000/svg",V=()=>window.matchMedia("(prefers-reduced-motion: reduce)").matches,Q=/^(?:\d+|[xytrblse](?:-\d+)?|solid|dashed|dotted|double|hidden|none)$/;function U(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-")&&!Q.test(r.slice(7))})}var X=(...e)=>e.filter(Boolean).join(" ");function Y(e){const t=document.createElementNS(J,"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(J,"path");e.setAttribute("stroke-linecap","round"),e.setAttribute("stroke-linejoin","round"),e.setAttribute("d",n),t.appendChild(e)}return t}function ee(e,t){for(const[n,r]of Object.entries(t??{}))e.dataset[n]=r}var te=(e,t)=>X("relative grid place-items-center rounded-full cursor-pointer",t&&(null!=e.stop?"h-7 w-7":"h-6 w-6"));function ne(e,t,n,r){const o=t&&!r&&null==e.stop&&!e.dot;return X("grid place-items-center rounded-full border-2 font-semibold leading-none shadow-md transition-transform motion-reduce:transition-none",!U(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-[10px] [&_svg]:h-3.5 [&_svg]:w-3.5",t&&(o?"ring-2 ring-gray-900 ring-offset-1":D),e.approximate&&"border-dashed opacity-80",e.faded&&!t&&"opacity-40",n&&"scale-125 opacity-100")}var re=e=>X("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",!U(e.tone??"")&&"border-white",e.tone??"bg-gray-900 text-white");function oe({pins:t,selectedKey:n,focus:s,onSelect:m,ariaLabel:h,className:g="",children:y,routes:b,fitTo:x,attribution:M,marks:N,groupCrowded:C=!1,noun:S,highlightKey:z=null,picking:A=!1,onPick:R,card:B,cardMinMapWidth:T=480,fullScreen:J,initialView:Q=Z,cooperativeGestures:U=!1}){const oe=r().map,ie=o(null),se=o(null),ce=o(null),ue=o(null),de=o([]),pe=o(/* @__PURE__ */new Map),me=o(/* @__PURE__ */new Map),he=o(/* @__PURE__ */new Map),ge=o(null),fe=o(/* @__PURE__ */new Map),ye=o(""),[be,xe]=a(!1),[ve,we]=a(!1),ke=c(F,q,()=>!1)?"dark":"light",Me=o({onSelect:m,onPick:R,picking:A,pins:t,selectedKey:n,highlightKey:z,groupCrowded:C,strings:oe,noun:S});l(()=>{Me.current={onSelect:m,onPick:R,picking:A,pins:t,selectedKey:n,highlightKey:z,groupCrowded:C,strings:oe,noun:S}});const Ne=i(()=>{const e=ce.current,{pins:t,selectedKey:n}=Me.current,r=n?t.find(e=>e.key===n):void 0;e&&r&&!e.getBounds().contains([r.lng,r.lat])&&e.easeTo({center:[r.lng,r.lat],duration:V()?0:400})},[]),Ce=o(!1),Le=i((e,t)=>{const n=ce.current,r=ue.current;if(!n||!r)return;const o=n.getZoom();if(o>=17.5){const t=e.indexOf(Me.current.selectedKey??"");return void Me.current.onSelect(e[(t+1)%e.length])}const a=e.map(e=>pe.current.get(e).pin),l=new r.LngLatBounds([a[0].lng,a[0].lat],[a[0].lng,a[0].lat]);for(const e of a)l.extend([e.lng,e.lat]);const i=a.map(e=>n.project([e.lng,e.lat])),s=Math.max(...i.map((e,t)=>W(e,i.filter((e,n)=>n!==t),o))),{clientWidth:c,clientHeight:u}=n.getContainer(),d=n.cameraForBounds(l,{padding:Math.min(64,c/4,u/4)})?.zoom??18,p=document.activeElement===t;Ce.current=!0,n.once("moveend",()=>{if(Ce.current=!1,!p)return;const e=a[0].key,t=pe.current.get(e)?.button,n=t&&"none"!==t.style.display?t:[...me.current.values()].find(t=>t.keys.includes(e))?.button;n?.focus({preventScroll:!0})}),n.easeTo({center:l.getCenter(),zoom:Math.min(18,Math.max(o+1,Math.min(d,s))),duration:V()?0:600})},[]),$e=i(()=>{const e=ce.current,t=ue.current;if(!e||!t||!ie.current||Ce.current&&e.isMoving())return;const{selectedKey:n,highlightKey:r,groupCrowded:o,strings:a,noun:l}=Me.current;for(const[e,t]of pe.current){const a=ne(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=[...ie.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=O([...pe.current.values()].map(({pin:t})=>{const n=e.project([t.lng,t.lat]);return{key:t.key,x:n.x,y:n.y,stop:t.stop??null}}),o);const s=e=>(l??a.places)(e),c=e.getZoom()<17.5?a.spread:a.cycle,u=(e,t)=>{const n=t?"":"none";e.style.display!==n&&(e.style.display=n)},d=/* @__PURE__ */new Map;for(const r of i.groups){const o=r.under>0?a.closeBy(r.under,s(r.under)):null,l=1===r.keys.length?pe.current.get(r.keys[0]):null;if(l){u(l.button,!0),l.button.setAttribute("aria-label",o?`${l.name}; ${o}`:l.name),l.button.title=o?`${l.title}\n${o}`:l.title;continue}for(const e of r.keys)u(pe.current.get(e).button,!1);const i=r.keys.join(" ");let p=me.current.get(i);if(!p){const n=document.createElement("button");n.type="button",n.dataset.pinGroup="",n.className="grid place-items-center rounded-full cursor-pointer",n.append(document.createElement("span"));const o=pe.current.get(r.keys[0]).pin,a={button:n,keys:r.keys,marker:new t.Marker({element:n,anchor:"center"}).setLngLat([o.lng,o.lat]).addTo(e)};n.addEventListener("click",e=>{e.stopPropagation(),Le(a.keys,n)}),p=a}p.keys=r.keys;const m=r.keys.map(e=>pe.current.get(e)),h=r.stops.length>0?j(r.stops):String(m.length),g=r.stops.length>0?a.stops(h):a.group(m.length,s(m.length));p.button.style.width=`${r.width}px`,p.button.style.height=`${r.height}px`,p.button.setAttribute("aria-label",`${g}: ${m.map(e=>e.pin.label).join("; ")}. ${c}${o?`; ${o}`:""}.`),p.button.title=[`${g}:`,...m.map(e=>e.title),...o?[o]:[],c].join("\n");const f=p.button.firstElementChild;f.textContent=h;const y=X("grid place-items-center rounded-full border-2 border-gray-700 bg-white font-semibold leading-none text-gray-900 shadow-sm",r.stops.length>0?"h-7 w-full px-1 text-xs ring-2 ring-gray-900":m.every(e=>e.pin.dot)?"h-5 w-5 text-[0.6rem]":"h-6 w-6 text-[0.7rem]",null!=n&&r.keys.includes(n)&&D);f.className!==y&&(f.className=y),d.set(i,p)}for(const e of i.hidden)u(pe.current.get(e).button,!1);for(const[e,t]of me.current)d.has(e)||t.marker.remove();me.current=d}if(ge.current){const e=r&&i?i.groups.find(e=>e.keys.includes(r)&&e.keys.length>1):void 0,t=r?pe.current.get(r):void 0,n=r?he.current.get(r):void 0,o=e?{at:pe.current.get(e.keys[0]).pin,width:e.width,height:e.height}:t?{at:t.pin,width:t.button.offsetWidth||(null!=t.pin.stop?E:$),height:t.button.offsetHeight||(null!=t.pin.stop?E:$)}:n?{at:n.mark,width:n.element.offsetWidth||E,height:n.element.offsetHeight||E}:null,a=ge.current.getElement();a.style.display=o?"":"none",o&&(ge.current.setLngLat([o.at.lng,o.at.lat]),a.style.width=`${o.width+22}px`,a.style.height=`${o.height+22}px`)}},[Le]);l(()=>{if($e(),!ie.current)return;const e=new ResizeObserver(()=>$e());e.observe(ie.current);for(const t of ie.current.children)t.contains(se.current)||e.observe(t);return()=>e.disconnect()}),l(()=>{let e=!1,t=null,n=null,r=()=>{};return(async()=>{try{const o=await L();if(e||!se.current)return;ue.current=o,t=new o.Map({container:se.current,style:I[ke],center:Q.center,zoom:Q.zoom,attributionControl:M?{compact:!0,customAttribution:M}:{compact:!0},dragRotate:!1,pitchWithRotate:!1,touchPitch:!1,maxPitch:0,cooperativeGestures:"coarse"===U?window.matchMedia("(pointer: coarse)").matches:U}),t.touchZoomRotate.disableRotation(),t.keyboard.disableRotation(),t.addControl(new o.NavigationControl({showCompass:!1}),"top-right");const a=document.createElement("div");a.dataset.pinRing="",a.setAttribute("aria-hidden","true"),a.className="pointer-events-none rounded-full border-2 border-gray-900 bg-gray-900/15 shadow-[0_0_0_2px_var(--color-white,#fff)]",a.style.display="none",ge.current=new o.Marker({element:a,anchor:"center"}).setLngLat(Q.center).addTo(t),t.on("click",e=>{Me.current.picking&&Me.current.onPick?.({lat:e.lngLat.lat,lng:e.lngLat.lng})}),t.on("move",$e),t.on("moveend",$e),t.on("resize",$e),t.on("error",e=>console.warn("[map]",e.error?.message)),r=f(se.current.querySelector(".maplibregl-ctrl-attrib"));const l=t;n=new ResizeObserver(()=>{l.resize(),Ne()}),n.observe(se.current),ce.current=t,xe(!0)}catch(t){console.error("[map] could not start",t),e||we(!0)}})(),()=>{e=!0,n?.disconnect(),r(),de.current.forEach(e=>e.remove()),de.current=[],me.current.forEach(e=>e.marker.remove()),me.current.clear(),ge.current?.remove(),ge.current=null,t?.remove(),ce.current=null}},[]);const Ee=o(ke);l(()=>{be&&ce.current&&Ee.current!==ke&&(Ee.current=ke,ce.current.setStyle(I[ke]))},[be,ke]),l(()=>{const e=ce.current,n=ue.current;if(!be||!e||!n)return;de.current.forEach(e=>e.remove()),de.current=[],me.current.forEach(e=>e.marker.remove()),me.current.clear(),pe.current.clear(),he.current.clear();for(const e of fe.current.keys())t.some(t=>t.key===e)||fe.current.delete(e);const r=Me.current.strings;for(const o of t){const t=document.createElement("button");t.type="button",t.dataset.pin=o.key,t.className=te(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 i=document.createElement("span");if(ee(i,o.data),o.dot);else if(null!=o.iconNode){const e=fe.current.get(o.key);e&&i.append(e)}else o.icon?.length?i.append(Y(o.icon)):i.textContent=null!=o.stop?String(o.stop):o.glyph;if(t.append(i),o.badge){const e=document.createElement("span");e.setAttribute("aria-hidden","true"),e.className=X("absolute -right-2 -top-2 grid h-4 min-w-4 place-items-center rounded-full px-0.5 text-[9px] font-semibold leading-none shadow",o.badgeTone??"bg-white text-gray-900"),e.textContent=o.badge,t.appendChild(e)}t.addEventListener("click",e=>{e.stopPropagation(),Me.current.onSelect(o.key)}),de.current.push(new n.Marker({element:t,anchor:"center"}).setLngLat([o.lng,o.lat]).addTo(e)),pe.current.set(o.key,{pin:o,button:t,mark:i,name:a,title:l})}for(const t of N??[]){const r=document.createElement("div");r.dataset.mapMark=t.key,ee(r,t.data),r.className=re(t),r.textContent=t.text,r.title=t.title??t.label,r.setAttribute("role","img"),r.setAttribute("aria-label",t.label),de.current.push(new n.Marker({element:r,anchor:"center"}).setLngLat([t.lng,t.lat]).addTo(e)),he.current.set(t.key,{mark:t,element:r})}$e()},[be,t,N,C,$e]),l(()=>{be&&$e()},[be,n,z,$e]),l(()=>{if(!be||!n)return;const e=requestAnimationFrame(Ne);return()=>cancelAnimationFrame(e)},[be,n,Ne]),l(()=>{const e=ce.current,n=ue.current,r=x?[...t,...N??[]].filter(e=>x.includes(e.key)):t;if(!be||!e||!n||0===r.length)return;const o=r.map(e=>`${e.key}@${e.lat},${e.lng}`).sort().join("|");if(ye.current===o)return;const a=""===ye.current;if(ye.current=o,1===r.length)return void e.jumpTo({center:[r[0].lng,r[0].lat],zoom:13});const l=new n.LngLatBounds([r[0].lng,r[0].lat],[r[0].lng,r[0].lat]);for(const e of r)l.extend([e.lng,e.lat]);e.fitBounds(l,{padding:48,maxZoom:14,animate:!a})},[be,t,N,x]),l(()=>{const e=ce.current;if(!be||!e)return;const t=(b??[]).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(),P(t)}(),o={type:"FeatureCollection",features:t.map(e=>({type:"Feature",properties:{key:e.key,estimate:e.estimate,faded:!!e.faded,color:e.color?_(e.color):r},geometry:{type:"LineString",coordinates:e.coordinates}}))},a=["case",["get","faded"],.25,.85],l=["get","color"],i=e.getSource(H);if(i&&(i.attribution||"")!==n){for(const t of K)e.getLayer(t)&&e.removeLayer(t);e.removeSource(H)}const s=e.getSource(H);s?s.setData(o):e.addSource(H,{type:"geojson",data:o,...n?{attribution:n}:{}}),e.getLayer("routes-road")||e.addLayer({id:"routes-road",type:"line",source:H,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:H,filter:["get","estimate"],layout:{"line-join":"round","line-cap":"round"},paint:{"line-color":l,"line-width":3,"line-dasharray":[1.5,1.5],"line-opacity":a}})},o=()=>{try{r()}catch(e){console.debug("[map] routes wait for the style",e)}};return o(),e.on("style.load",o),e.once("idle",o),()=>{e.off("style.load",o),e.off("idle",o)}},[be,b,ke]),l(()=>{const e=ce.current;if(!be||!e||!s)return;const n=t.find(e=>e.key===s.key);if(!n)return;const r=e.getZoom(),o=C?W(e.project([n.lng,n.lat]),t.filter(e=>e.key!==n.key).map(t=>e.project([t.lng,t.lat])),r):-1/0,a={center:[n.lng,n.lat],zoom:Math.min(18,Math.max(r,13,o))};V()?e.jumpTo(a):e.flyTo({...a,duration:600})},[be,s?.n]);const[Se,je]=a(!1);l(()=>{const e=ie.current;if(!e)return;const t=()=>je(e.clientWidth<T);t();const n=new ResizeObserver(t);return n.observe(e),()=>n.disconnect()},[T]);const ze=n?t.find(e=>e.key===n)??null:null,Ae=ze?.key??null,Re=ze?.lng??0,Be=ze?.lat??0,Te=be&&!Se&&null!=B&&!!ze,[Oe,We]=a(null);l(()=>{const e=ce.current,t=ue.current;if(!(Te&&e&&t&&Ae))return;const n=document.createElement("div");n.dataset.mapCard="",n.className="w-[26rem] overflow-y-auto overscroll-contain";const r=new t.Popup({anchor:"bottom",offset:v,className:"rosh-map-card",maxWidth:"none",closeButton:!1,closeOnClick:!1,closeOnMove:!1,focusAfterOpen:!1}).setLngLat([Re,Be]).setDOMContent(n).addTo(e),o=r.getElement(),a=o.querySelector(".maplibregl-popup-content");a&&Object.assign(a.style,{padding:"0",background:"transparent",borderRadius:"0",boxShadow:"none"});const l=o.querySelector(".maplibregl-popup-tip");l&&Object.assign(l.style,{borderTopColor:G,borderBottomColor:G}),We(n);let i=!1,s=!1;const c=(t=!0)=>{if(s)return;if(e.isMoving())return void(i||(i=!0,e.once("moveend",()=>{i=!1,c()})));const{clientWidth:o,clientHeight:a}=e.getContainer(),l=function(e,t){const n=e.getBoundingClientRect().top,r=[...e.querySelectorAll(".maplibregl-ctrl-top-left > *, .maplibregl-ctrl-top-right > *"),...t?.querySelectorAll(":scope > [data-map-control]")??[]];let o=0;for(const e of r){const t=e.getBoundingClientRect();t.height>0&&(o=Math.max(o,t.bottom-n))}return o}(e.getContainer(),ie.current)+8,u=`${w(a,l)}px`;n.style.maxHeight!==u&&(n.style.maxHeight=u);const d=r.getElement(),p=r.getLngLat(),{anchor:m,move:h}=k(e.project(p),{width:d.offsetWidth,height:d.offsetHeight},{width:o,height:a},l);r.options.anchor!==m&&(r.options.anchor=m,r.setLngLat(p)),!t||0===h.x&&0===h.y||e.panBy([-h.x,-h.y],{duration:V()?0:250}),$e()},u=new ResizeObserver(()=>c());u.observe(n);const d=()=>c(),p=()=>{i||c(!1)};e.on("resize",d),e.on("moveend",p);let m=!1;const h=pe.current,g=e=>{m=n.contains(e.target)};return document.addEventListener("focusin",g),()=>{if(s=!0,u.disconnect(),e.off("resize",d),e.off("moveend",p),document.removeEventListener("focusin",g),r.remove(),We(null),m&&(!document.activeElement||document.activeElement===document.body)){const e=h.get(Ae)?.button;e&&"none"!==e.style.display&&e.focus({preventScroll:!0})}}},[Te,Ae,Re,Be,$e]);const Fe=J?.active??!1,qe=o(J?.onChange);l(()=>{qe.current=J?.onChange}),l(()=>{if(!J)return;const e=document.documentElement;Fe&&!document.fullscreenElement&&e.requestFullscreen&&e.requestFullscreen().catch(()=>{}),!Fe&&document.fullscreenElement&&document.exitFullscreen().catch(()=>{})},[Fe]);const He=!!J;return l(()=>{if(!He)return;const e=()=>{document.fullscreenElement||qe.current?.(!1)};return document.addEventListener("fullscreenchange",e),()=>document.removeEventListener("fullscreenchange",e)},[He]),/* @__PURE__ */d("div",{ref:ie,className:X("relative min-h-72 overflow-hidden rounded-lg border border-gray-200 bg-gray-100",A&&"[&_canvas]:cursor-crosshair",g),children:[
|
|
3
|
-
/* @__PURE__ */p("div",{className:"absolute inset-0",children:/* @__PURE__ */p("div",{ref:se,className:"h-full w-full",role:"region","aria-label":h})}),ve&&/* @__PURE__ */p("p",{className:"absolute inset-0 grid place-items-center p-6 text-center text-sm text-gray-500",children:oe.failed}),
|
|
2
|
+
import{Button_default as e}from"../chunk-EXXHI5DO.js";import{rootIsDark as t,ROOT_THEME_ATTRIBUTES as n}from"../chunk-HZZNJHRH.js";import"../chunk-D65T4H6J.js";import"../chunk-X4FJ54PP.js";import{useShellStrings as r}from"../chunk-NCQLGQYR.js";import{useRef as o,useState as a,useEffect as l,useCallback as i,useMemo as s,useSyncExternalStore as c}from"react";import{createPortal as u}from"react-dom";import{jsxs as d,jsx as p,Fragment as m}from"react/jsx-runtime";import{useQuery as h}from"@tanstack/react-query";var g="maplibregl-compact-show";function f(e){if(!e)return()=>{};const t=()=>!!e.classList.contains(g)&&(e.classList.remove(g),!0);if(t())return()=>{};const n=new MutationObserver(()=>{t()&&n.disconnect()});return n.observe(e,{attributes:!0,attributeFilter:["class"]}),()=>n.disconnect()}var y=20,b=12,x=480,v={center:[0,0],left:[y,0],right:[-20,0],top:[0,y],"top-left":[0,y],"top-right":[0,y],bottom:[0,-20],"bottom-left":[0,-20],"bottom-right":[0,-20]},w=(e,t=12)=>Math.max(0,Math.floor(e-t-b-y-10-16));function k(e,t,n,r=12){const o=e.y-y-r,a=n.height-e.y-y-b,l=t.height<=o||t.height>a&&o>=a,i=l?Math.max(0,t.height-o):-Math.max(0,t.height-a);let s="",c=0;return e.x-t.width/2<b?(s="-left",c=Math.max(0,b-e.x)):e.x+t.width/2>n.width-b&&(s="-right",c=-Math.max(0,e.x-(n.width-b))),{anchor:`${l?"bottom":"top"}${s}`,move:{x:c,y:i}}}var M="maplibre-gl-worker.mjs",N=e=>`/maplibre-gl/${e}/${M}`,C=null;function L(){return C??=Promise.all([import("maplibre-gl"),import("maplibre-gl/dist/maplibre-gl.css")]).then(([e])=>(e.setWorkerUrl(N(e.getVersion())),e)).catch(e=>{throw C=null,e}),C}var $=24,E=28,S=29;function j(e){const t=[...e].sort((e,t)=>e-t),n=[];for(let e=0;e<t.length;){let r=e;for(;r+1<t.length&&t[r+1]===t[r]+1;)r++;n.push(r===e?String(t[e]):`${t[e]}–${t[r]}`),e=r+1}return n.join(", ")}function z(e){const t=Math.max(E,12+8*e.length);return t+t%2}var A=(e,t,n,r)=>({left:e-n/2,top:t-r/2,right:e+n/2,bottom:t+r/2});function R(e,t){return e.left<t.right+1&&t.left<e.right+1&&e.top<t.bottom+1&&t.top<e.bottom+1}var B=e=>A(e.x,e.y,e.width,e.height);function O(e){for(let t=0;t<e.length;t++)for(let n=t+1;n<e.length;n++)if(R(B(e[t]),B(e[n])))return[e[t],e[n]];return null}function T(e,t=[]){const n=[],r=e=>t.some(t=>R(t,e));let o=e.filter(e=>null!==e.stop).sort((e,t)=>e.stop-t.stop).map(e=>({keys:[e.key],stops:[e.stop],x:e.x,y:e.y,width:E,height:E,under:0}));for(let e=O(o);e;e=O(o)){const[t,n]=e;t.keys.push(...n.keys),t.stops.push(...n.stops),t.stops.sort((e,t)=>e-t),t.width=z(j(t.stops)),o=o.filter(e=>e!==n)}o=o.filter(e=>!r(B(e))||(n.push(...e.keys),!1));const a=[];for(const t of e){if(null!==t.stop)continue;const e=A(t.x,t.y,$,$),l=o.find(t=>R(B(t),e));if(l||r(e)){n.push(t.key),l&&l.under++;continue}const i=a.find(t=>R(B(t),e));i?i.keys.push(t.key):a.push({keys:[t.key],stops:[],x:t.x,y:t.y,width:$,height:$,under:0})}return{groups:[...o,...a],hidden:n}}function F(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 H(e){const t=new MutationObserver(e);return t.observe(document.documentElement,{attributes:!0,attributeFilter:n}),()=>t.disconnect()}var W=t;var q="routes",K=["routes-road","routes-estimate"];function _(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(),P(n)}function P(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 I={light:"https://tiles.openfreemap.org/styles/positron",dark:"https://tiles.openfreemap.org/styles/dark"},D={center:[30,20],zoom:1},Z="ring-2 ring-gray-900 ring-offset-2";var G="var(--color-gray-600, #4b5563)",V="http://www.w3.org/2000/svg",J=()=>window.matchMedia("(prefers-reduced-motion: reduce)").matches,X=/^(?:\d+|[xytrblse](?:-\d+)?|solid|dashed|dotted|double|hidden|none)$/;function Q(e){return e.split(/\s+/).some(e=>{const t=e.search(/[[(]/),n=t<0?e:e.slice(0,t),r=e.slice(n.lastIndexOf(":")+1);return r.startsWith("border-")&&!X.test(r.slice(7))})}var U=(...e)=>e.filter(Boolean).join(" ");function Y(e){const t=document.createElementNS(V,"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(V,"path");e.setAttribute("stroke-linecap","round"),e.setAttribute("stroke-linejoin","round"),e.setAttribute("d",n),t.appendChild(e)}return t}function ee(e,t){for(const[n,r]of Object.entries(t??{}))e.dataset[n]=r}var te=(e,t)=>U("relative grid place-items-center rounded-full cursor-pointer",t&&(null!=e.stop?"h-7 w-7":"h-6 w-6"));function ne(e,t,n,r){const o=t&&!r&&null==e.stop&&!e.dot;return U("grid place-items-center rounded-full border-2 font-semibold leading-none shadow-md transition-transform motion-reduce:transition-none",!Q(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-[10px] [&_svg]:h-3.5 [&_svg]:w-3.5",t&&(o?"ring-2 ring-gray-900 ring-offset-1":Z),e.approximate&&"border-dashed opacity-80",e.faded&&!t&&"opacity-40",n&&"scale-125 opacity-100")}var re=e=>U("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",!Q(e.tone??"")&&"border-white",e.tone??"bg-gray-900 text-white");function oe({pins:t,selectedKey:n,focus:s,onSelect:m,ariaLabel:h,className:g="",children:y,routes:b,fitTo:x,attribution:M,marks:N,groupCrowded:C=!1,noun:S,highlightKey:z=null,picking:A=!1,onPick:R,card:B,cardMinMapWidth:O=480,fullScreen:V,initialView:X=D,cooperativeGestures:Q=!1}){const oe=r().map,ie=o(null),se=o(null),ce=o(null),ue=o(null),de=o([]),pe=o(/* @__PURE__ */new Map),me=o(/* @__PURE__ */new Map),he=o(/* @__PURE__ */new Map),ge=o(null),fe=o(/* @__PURE__ */new Map),ye=o(""),[be,xe]=a(!1),[ve,we]=a(!1),ke=c(H,W,()=>!1)?"dark":"light",Me=o({onSelect:m,onPick:R,picking:A,pins:t,selectedKey:n,highlightKey:z,groupCrowded:C,strings:oe,noun:S});l(()=>{Me.current={onSelect:m,onPick:R,picking:A,pins:t,selectedKey:n,highlightKey:z,groupCrowded:C,strings:oe,noun:S}});const Ne=i(()=>{const e=ce.current,{pins:t,selectedKey:n}=Me.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:J()?0:400})},[]),Ce=o(!1),Le=i((e,t)=>{const n=ce.current,r=ue.current;if(!n||!r)return;const o=n.getZoom();if(o>=17.5){const t=e.indexOf(Me.current.selectedKey??"");return void Me.current.onSelect(e[(t+1)%e.length])}const a=e.map(e=>pe.current.get(e).pin),l=new r.LngLatBounds([a[0].lng,a[0].lat],[a[0].lng,a[0].lat]);for(const e of a)l.extend([e.lng,e.lat]);const i=a.map(e=>n.project([e.lng,e.lat])),s=Math.max(...i.map((e,t)=>F(e,i.filter((e,n)=>n!==t),o))),{clientWidth:c,clientHeight:u}=n.getContainer(),d=n.cameraForBounds(l,{padding:Math.min(64,c/4,u/4)})?.zoom??18,p=document.activeElement===t;Ce.current=!0,n.once("moveend",()=>{if(Ce.current=!1,!p)return;const e=a[0].key,t=pe.current.get(e)?.button,n=t&&"none"!==t.style.display?t:[...me.current.values()].find(t=>t.keys.includes(e))?.button;n?.focus({preventScroll:!0})}),n.easeTo({center:l.getCenter(),zoom:Math.min(18,Math.max(o+1,Math.min(d,s))),duration:J()?0:600})},[]),$e=i(()=>{const e=ce.current,t=ue.current;if(!e||!t||!ie.current||Ce.current&&e.isMoving())return;const{selectedKey:n,highlightKey:r,groupCrowded:o,strings:a,noun:l}=Me.current;for(const[e,t]of pe.current){const a=ne(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=[...ie.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=T([...pe.current.values()].map(({pin:t})=>{const n=e.project([t.lng,t.lat]);return{key:t.key,x:n.x,y:n.y,stop:t.stop??null}}),o);const s=e=>(l??a.places)(e),c=e.getZoom()<17.5?a.spread:a.cycle,u=(e,t)=>{const n=t?"":"none";e.style.display!==n&&(e.style.display=n)},d=/* @__PURE__ */new Map;for(const r of i.groups){const o=r.under>0?a.closeBy(r.under,s(r.under)):null,l=1===r.keys.length?pe.current.get(r.keys[0]):null;if(l){u(l.button,!0),l.button.setAttribute("aria-label",o?`${l.name}; ${o}`:l.name),l.button.title=o?`${l.title}\n${o}`:l.title;continue}for(const e of r.keys)u(pe.current.get(e).button,!1);const i=r.keys.join(" ");let p=me.current.get(i);if(!p){const n=document.createElement("button");n.type="button",n.dataset.pinGroup="",n.className="grid place-items-center rounded-full cursor-pointer",n.append(document.createElement("span"));const o=pe.current.get(r.keys[0]).pin,a={button:n,keys:r.keys,marker:new t.Marker({element:n,anchor:"center"}).setLngLat([o.lng,o.lat]).addTo(e)};n.addEventListener("click",e=>{e.stopPropagation(),Le(a.keys,n)}),p=a}p.keys=r.keys;const m=r.keys.map(e=>pe.current.get(e)),h=r.stops.length>0?j(r.stops):String(m.length),g=r.stops.length>0?a.stops(h):a.group(m.length,s(m.length));p.button.style.width=`${r.width}px`,p.button.style.height=`${r.height}px`,p.button.setAttribute("aria-label",`${g}: ${m.map(e=>e.pin.label).join("; ")}. ${c}${o?`; ${o}`:""}.`),p.button.title=[`${g}:`,...m.map(e=>e.title),...o?[o]:[],c].join("\n");const f=p.button.firstElementChild;f.textContent=h;const y=U("grid place-items-center rounded-full border-2 border-gray-700 bg-white font-semibold leading-none text-gray-900 shadow-sm",r.stops.length>0?"h-7 w-full px-1 text-xs ring-2 ring-gray-900":m.every(e=>e.pin.dot)?"h-5 w-5 text-[0.6rem]":"h-6 w-6 text-[0.7rem]",null!=n&&r.keys.includes(n)&&Z);f.className!==y&&(f.className=y),d.set(i,p)}for(const e of i.hidden)u(pe.current.get(e).button,!1);for(const[e,t]of me.current)d.has(e)||t.marker.remove();me.current=d}if(ge.current){const e=r&&i?i.groups.find(e=>e.keys.includes(r)&&e.keys.length>1):void 0,t=r?pe.current.get(r):void 0,n=r?he.current.get(r):void 0,o=e?{at:pe.current.get(e.keys[0]).pin,width:e.width,height:e.height}:t?{at:t.pin,width:t.button.offsetWidth||(null!=t.pin.stop?E:$),height:t.button.offsetHeight||(null!=t.pin.stop?E:$)}:n?{at:n.mark,width:n.element.offsetWidth||E,height:n.element.offsetHeight||E}:null,a=ge.current.getElement();a.style.display=o?"":"none",o&&(ge.current.setLngLat([o.at.lng,o.at.lat]),a.style.width=`${o.width+22}px`,a.style.height=`${o.height+22}px`)}},[Le]);l(()=>{if($e(),!ie.current)return;const e=new ResizeObserver(()=>$e());e.observe(ie.current);for(const t of ie.current.children)t.contains(se.current)||e.observe(t);return()=>e.disconnect()}),l(()=>{let e=!1,t=null,n=null,r=()=>{};return(async()=>{try{const o=await L();if(e||!se.current)return;ue.current=o,t=new o.Map({container:se.current,style:I[ke],center:X.center,zoom:X.zoom,attributionControl:M?{compact:!0,customAttribution:M}:{compact:!0},dragRotate:!1,pitchWithRotate:!1,touchPitch:!1,maxPitch:0,cooperativeGestures:"coarse"===Q?window.matchMedia("(pointer: coarse)").matches:Q}),t.touchZoomRotate.disableRotation(),t.keyboard.disableRotation(),t.addControl(new o.NavigationControl({showCompass:!1}),"top-right");const a=document.createElement("div");a.dataset.pinRing="",a.setAttribute("aria-hidden","true"),a.className="pointer-events-none rounded-full border-2 border-gray-900 bg-gray-900/15 shadow-[0_0_0_2px_var(--color-white,#fff)]",a.style.display="none",ge.current=new o.Marker({element:a,anchor:"center"}).setLngLat(X.center).addTo(t),t.on("click",e=>{Me.current.picking&&Me.current.onPick?.({lat:e.lngLat.lat,lng:e.lngLat.lng})}),t.on("move",$e),t.on("moveend",$e),t.on("resize",$e),t.on("error",e=>console.warn("[map]",e.error?.message)),r=f(se.current.querySelector(".maplibregl-ctrl-attrib"));const l=t;n=new ResizeObserver(()=>{l.resize(),Ne()}),n.observe(se.current),ce.current=t,xe(!0)}catch(t){console.error("[map] could not start",t),e||we(!0)}})(),()=>{e=!0,n?.disconnect(),r(),de.current.forEach(e=>e.remove()),de.current=[],me.current.forEach(e=>e.marker.remove()),me.current.clear(),ge.current?.remove(),ge.current=null,t?.remove(),ce.current=null}},[]);const Ee=o(ke);l(()=>{be&&ce.current&&Ee.current!==ke&&(Ee.current=ke,ce.current.setStyle(I[ke]))},[be,ke]),l(()=>{const e=ce.current,n=ue.current;if(!be||!e||!n)return;de.current.forEach(e=>e.remove()),de.current=[],me.current.forEach(e=>e.marker.remove()),me.current.clear(),pe.current.clear(),he.current.clear();for(const e of fe.current.keys())t.some(t=>t.key===e)||fe.current.delete(e);const r=Me.current.strings;for(const o of t){const t=document.createElement("button");t.type="button",t.dataset.pin=o.key,t.className=te(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 i=document.createElement("span");if(ee(i,o.data),o.dot);else if(null!=o.iconNode){const e=fe.current.get(o.key);e&&i.append(e)}else o.icon?.length?i.append(Y(o.icon)):i.textContent=null!=o.stop?String(o.stop):o.glyph;if(t.append(i),o.badge){const e=document.createElement("span");e.setAttribute("aria-hidden","true"),e.className=U("absolute -right-2 -top-2 grid h-4 min-w-4 place-items-center rounded-full px-0.5 text-[9px] font-semibold leading-none shadow",o.badgeTone??"bg-white text-gray-900"),e.textContent=o.badge,t.appendChild(e)}t.addEventListener("click",e=>{e.stopPropagation(),Me.current.onSelect(o.key)}),de.current.push(new n.Marker({element:t,anchor:"center"}).setLngLat([o.lng,o.lat]).addTo(e)),pe.current.set(o.key,{pin:o,button:t,mark:i,name:a,title:l})}for(const t of N??[]){const r=document.createElement("div");r.dataset.mapMark=t.key,ee(r,t.data),r.className=re(t),r.textContent=t.text,r.title=t.title??t.label,r.setAttribute("role","img"),r.setAttribute("aria-label",t.label),de.current.push(new n.Marker({element:r,anchor:"center"}).setLngLat([t.lng,t.lat]).addTo(e)),he.current.set(t.key,{mark:t,element:r})}$e()},[be,t,N,C,$e]),l(()=>{be&&$e()},[be,n,z,$e]),l(()=>{if(!be||!n)return;const e=requestAnimationFrame(Ne);return()=>cancelAnimationFrame(e)},[be,n,Ne]),l(()=>{const e=ce.current,n=ue.current,r=x?[...t,...N??[]].filter(e=>x.includes(e.key)):t;if(!be||!e||!n||0===r.length)return;const o=r.map(e=>`${e.key}@${e.lat},${e.lng}`).sort().join("|");if(ye.current===o)return;const a=""===ye.current;if(ye.current=o,1===r.length)return void e.jumpTo({center:[r[0].lng,r[0].lat],zoom:13});const l=new n.LngLatBounds([r[0].lng,r[0].lat],[r[0].lng,r[0].lat]);for(const e of r)l.extend([e.lng,e.lat]);e.fitBounds(l,{padding:48,maxZoom:14,animate:!a})},[be,t,N,x]),l(()=>{const e=ce.current;if(!be||!e)return;const t=(b??[]).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(),P(t)}(),o={type:"FeatureCollection",features:t.map(e=>({type:"Feature",properties:{key:e.key,estimate:e.estimate,faded:!!e.faded,color:e.color?_(e.color):r},geometry:{type:"LineString",coordinates:e.coordinates}}))},a=["case",["get","faded"],.25,.85],l=["get","color"],i=e.getSource(q);if(i&&(i.attribution||"")!==n){for(const t of K)e.getLayer(t)&&e.removeLayer(t);e.removeSource(q)}const s=e.getSource(q);s?s.setData(o):e.addSource(q,{type:"geojson",data:o,...n?{attribution:n}:{}}),e.getLayer("routes-road")||e.addLayer({id:"routes-road",type:"line",source:q,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:q,filter:["get","estimate"],layout:{"line-join":"round","line-cap":"round"},paint:{"line-color":l,"line-width":3,"line-dasharray":[1.5,1.5],"line-opacity":a}})},o=()=>{try{r()}catch(e){console.debug("[map] routes wait for the style",e)}};return o(),e.on("style.load",o),e.once("idle",o),()=>{e.off("style.load",o),e.off("idle",o)}},[be,b,ke]),l(()=>{const e=ce.current;if(!be||!e||!s)return;const n=t.find(e=>e.key===s.key);if(!n)return;const r=e.getZoom(),o=C?F(e.project([n.lng,n.lat]),t.filter(e=>e.key!==n.key).map(t=>e.project([t.lng,t.lat])),r):-1/0,a={center:[n.lng,n.lat],zoom:Math.min(18,Math.max(r,13,o))};J()?e.jumpTo(a):e.flyTo({...a,duration:600})},[be,s?.n]);const[Se,je]=a(!1);l(()=>{const e=ie.current;if(!e)return;const t=()=>je(e.clientWidth<O);t();const n=new ResizeObserver(t);return n.observe(e),()=>n.disconnect()},[O]);const ze=n?t.find(e=>e.key===n)??null:null,Ae=ze?.key??null,Re=ze?.lng??0,Be=ze?.lat??0,Oe=be&&!Se&&null!=B&&!!ze,[Te,Fe]=a(null);l(()=>{const e=ce.current,t=ue.current;if(!(Oe&&e&&t&&Ae))return;const n=document.createElement("div");n.dataset.mapCard="",n.className="w-[26rem] overflow-y-auto overscroll-contain";const r=new t.Popup({anchor:"bottom",offset:v,className:"rosh-map-card",maxWidth:"none",closeButton:!1,closeOnClick:!1,closeOnMove:!1,focusAfterOpen:!1}).setLngLat([Re,Be]).setDOMContent(n).addTo(e),o=r.getElement(),a=o.querySelector(".maplibregl-popup-content");a&&Object.assign(a.style,{padding:"0",background:"transparent",borderRadius:"0",boxShadow:"none"});const l=o.querySelector(".maplibregl-popup-tip");l&&Object.assign(l.style,{borderTopColor:G,borderBottomColor:G}),Fe(n);let i=!1,s=!1;const c=(t=!0)=>{if(s)return;if(e.isMoving())return void(i||(i=!0,e.once("moveend",()=>{i=!1,c()})));const{clientWidth:o,clientHeight:a}=e.getContainer(),l=function(e,t){const n=e.getBoundingClientRect().top,r=[...e.querySelectorAll(".maplibregl-ctrl-top-left > *, .maplibregl-ctrl-top-right > *"),...t?.querySelectorAll(":scope > [data-map-control]")??[]];let o=0;for(const e of r){const t=e.getBoundingClientRect();t.height>0&&(o=Math.max(o,t.bottom-n))}return o}(e.getContainer(),ie.current)+8,u=`${w(a,l)}px`;n.style.maxHeight!==u&&(n.style.maxHeight=u);const d=r.getElement(),p=r.getLngLat(),{anchor:m,move:h}=k(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:J()?0:250}),$e()},u=new ResizeObserver(()=>c());u.observe(n);const d=()=>c(),p=()=>{i||c(!1)};e.on("resize",d),e.on("moveend",p);let m=!1;const h=pe.current,g=e=>{m=n.contains(e.target)};return document.addEventListener("focusin",g),()=>{if(s=!0,u.disconnect(),e.off("resize",d),e.off("moveend",p),document.removeEventListener("focusin",g),r.remove(),Fe(null),m&&(!document.activeElement||document.activeElement===document.body)){const e=h.get(Ae)?.button;e&&"none"!==e.style.display&&e.focus({preventScroll:!0})}}},[Oe,Ae,Re,Be,$e]);const He=V?.active??!1,We=o(V?.onChange);l(()=>{We.current=V?.onChange}),l(()=>{if(!V)return;const e=document.documentElement;He&&!document.fullscreenElement&&e.requestFullscreen&&e.requestFullscreen().catch(()=>{}),!He&&document.fullscreenElement&&document.exitFullscreen().catch(()=>{})},[He]);const qe=!!V;return l(()=>{if(!qe)return;const e=()=>{document.fullscreenElement||We.current?.(!1)};return document.addEventListener("fullscreenchange",e),()=>document.removeEventListener("fullscreenchange",e)},[qe]),/* @__PURE__ */d("div",{ref:ie,className:U("relative min-h-72 overflow-hidden rounded-lg border border-gray-200 bg-gray-100",A&&"[&_canvas]:cursor-crosshair",g),children:[
|
|
3
|
+
/* @__PURE__ */p("div",{className:"absolute inset-0",children:/* @__PURE__ */p("div",{ref:se,className:"h-full w-full",role:"region","aria-label":h})}),ve&&/* @__PURE__ */p("p",{className:"absolute inset-0 grid place-items-center p-6 text-center text-sm text-gray-500",children:oe.failed}),V&&/* @__PURE__ */p(e,{"data-map-control":"",variant:"secondary",size:"sm",className:"absolute left-3 top-3 z-10",onClick:()=>V.onChange(!V.active),leftIcon:/* @__PURE__ */p(le,{leave:V.active}),children:V.active?oe.leaveFullScreen:oe.fullScreen}),y,null!=B&&!Oe&&/* @__PURE__ */p("div",{"data-map-card":"",className:"absolute bottom-3 left-3 right-3 z-10 max-h-[calc(100%-1.5rem)] max-w-md overflow-y-auto overscroll-contain",children:B}),Oe&&Te?u(B,Te):null,be&&/* @__PURE__ */p(ae,{pins:t,hosts:fe.current})]})}function ae({pins:e,hosts:t}){/* @__PURE__ */
|
|
4
4
|
return p(m,{children:e.map(e=>{if(null==e.iconNode||e.dot)return null;let n=t.get(e.key);return n||(n=document.createElement("span"),n.className="contents",t.set(e.key,n)),u(e.iconNode,n,e.key)})})}function le({leave:e}){/* @__PURE__ */
|
|
5
5
|
return p("svg",{"aria-hidden":"true",className:"h-4 w-4",fill:"none",viewBox:"0 0 24 24",stroke:"currentColor",strokeWidth:2,children:/* @__PURE__ */p("path",{strokeLinecap:"round",strokeLinejoin:"round",d:e?"M9 9V4.5M9 9H4.5M9 9 3.75 3.75M9 15v4.5M9 15H4.5M9 15l-5.25 5.25M15 9h4.5M15 9V4.5M15 9l5.25-5.25M15 15h4.5M15 15v4.5m0-4.5 5.25 5.25":"M3.75 3.75v4.5m0-4.5h4.5m-4.5 0L9 9M3.75 20.25v-4.5m0 4.5h4.5m-4.5 0L9 15M20.25 3.75h-4.5m4.5 0v4.5m0-4.5L15 9m5.25 11.25h-4.5m4.5 0v-4.5m0 4.5L15 15"})})}function ie(){const[e,t]=a(null);return{highlightKey:e,pointAt:i(e=>{const n=()=>t(e),r=()=>t(t=>t===e?null:t);return{onMouseEnter:n,onMouseLeave:r,onFocus:n,onBlur:r}},[])}}var se=3e3,ce=e=>!!e?.pending&&3e3,ue=e=>`${e.kind}:${e.id}`,de=e=>("located"===e.placement||"approximate"===e.placement)&&null!=e.lat&&null!=e.lng;function pe(e){switch(e){case"located":return null;case"approximate":return"Approximate: only the suburb or postcode matched";case"pending":return"Locating…";case"not_found":return"Not on the map: address not found";case"failed":return"Not on the map: the map service could not be reached";case"no_address":return"Not on the map: no city or postcode"}}var me={importer:{label:"Importer",tone:"bg-sky-600 text-white"},dealer:{label:"Dealer",tone:"bg-purple-600 text-white"},retail:{label:"Retail",tone:"bg-green-600 text-white"},supplier:{label:"Supplier",tone:"bg-sky-600 text-white"},delivery_location:{label:"Delivery location",tone:"bg-amber-600 text-white"},warehouse:{label:"Warehouse",tone:"bg-amber-600 text-white"}},he=["importer","dealer","retail","supplier","delivery_location","warehouse"];function ge(e){return"supplier"===e.kind?"supplier":"customer"===e.kind?e.category||"importer":e.kind}var fe=(e,t=me)=>t[e]?.tone??"bg-gray-700 text-white",ye=(e,t=me)=>t[e]?.label??e,be=(e,t)=>fe(ge(e),t);function xe(e,t,n=me){return null!=t?String(t):(n[ge(e)]?.label??"").charAt(0).toUpperCase()}var ve=["delivery_location","warehouse"];function we(e,t=ve){const n=/* @__PURE__ */new Map;let r=0;for(const o of e)t.includes(o.kind)&&n.set(ue(o),++r);return n}function ke(e){const t={onMap:0,approximate:0,pending:0,off:0};for(const n of e)de(n)?(t.onMap+=1,"approximate"===n.placement&&(t.approximate+=1)):"pending"===n.placement?t.pending+=1:t.off+=1;return t}function 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 Ne(e){const t=[...new Set(e.filter(de).map(ge))];return[...he.filter(e=>t.includes(e)),...t.filter(e=>!he.includes(e))]}function Ce(e,t){return e.filter(e=>!de(e)&&"pending"!==e.placement).map(e=>{const n=t?.get(ue(e)),r=pe(e.placement)?.replace(/^Not on the map: /,"")??"";return{key:ue(e),text:`${null!=n?`${n}. `:""}${e.label}: ${r}`}})}function Le({categories:e,palette:t=me,floating:n=!0}){return e.length<2?null:/* @__PURE__ */p("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-2.5 py-1.5 text-xs text-gray-600 shadow-sm",children:e.map(e=>/* @__PURE__ */d("span",{className:"inline-flex items-center gap-1.5",children:[
|
|
6
6
|
/* @__PURE__ */p("span",{"aria-hidden":!0,className:`h-2.5 w-2.5 rounded-full ${fe(e,t)}`}),ye(e,t)]},e))})}function $e({point:t,number:n,onOpen:o,onClose:a,palette:l=me}){const i=pe(t.placement),s=ge(t),c=r().map;/* @__PURE__ */
|
|
@@ -20,4 +20,4 @@ return d("section",{"aria-label":c,className:`flex min-w-0 flex-col ${h}`,childr
|
|
|
20
20
|
/* @__PURE__ */p("button",{type:"button",onClick:()=>{b()},className:"font-medium text-blue-600 hover:text-blue-800 hover:underline",children:"Try again"})]}),!y&&($>0||C.length>0)&&/* @__PURE__ */d("div",{className:"max-w-full space-y-0.5 rounded-lg border border-gray-200 bg-white px-2.5 py-1.5 text-xs shadow-sm","aria-live":"polite",children:[$>0&&/* @__PURE__ */d("p",{className:"flex items-center gap-1.5 text-gray-500",children:[
|
|
21
21
|
/* @__PURE__ */d("svg",{className:"h-3 w-3 animate-spin",fill:"none",viewBox:"0 0 24 24",children:[
|
|
22
22
|
/* @__PURE__ */p("circle",{className:"opacity-25",cx:"12",cy:"12",r:"10",stroke:"currentColor",strokeWidth:"4"}),
|
|
23
|
-
/* @__PURE__ */p("path",{className:"opacity-75",fill:"currentColor",d:"M4 12a8 8 0 018-8v4a4 4 0 00-4 4H4z"})]}),"Locating ",$," address",1===$?"":"es","…"]}),C.slice(0,3).map(e=>/* @__PURE__ */p("p",{className:"truncate text-amber-700",title:e.text,children:e.text},e.key)),C.length>3&&/* @__PURE__ */d("p",{className:"text-gray-500",children:["+",C.length-3," more not on the map"]})]})]}),E&&/* @__PURE__ */p($e,{point:E,number:M.get(ue(E))??null,onOpen:S,onClose:()=>w(null),palette:u})]})]})}export{x as CARD_MIN_MAP_WIDTH,g as COMPACT_SHOW,oe as EntityMap,Se as LocationsMap,M as MAPLIBRE_WORKER_FILE,S as MAP_APART_PX,me as MAP_CATEGORIES,E as MAP_STOP_PX,$ as MAP_TARGET_PX,Le as MapLegend,se as PENDING_POLL_MS,ve as SECONDARY_KINDS,$e as SelectedCard,w as cardMaxHeight,ye as categoryLabel,fe as categoryTone,f as foldAttributionOnce,de as isOnMap,
|
|
23
|
+
/* @__PURE__ */p("path",{className:"opacity-75",fill:"currentColor",d:"M4 12a8 8 0 018-8v4a4 4 0 00-4 4H4z"})]}),"Locating ",$," address",1===$?"":"es","…"]}),C.slice(0,3).map(e=>/* @__PURE__ */p("p",{className:"truncate text-amber-700",title:e.text,children:e.text},e.key)),C.length>3&&/* @__PURE__ */d("p",{className:"text-gray-500",children:["+",C.length-3," more not on the map"]})]})]}),E&&/* @__PURE__ */p($e,{point:E,number:M.get(ue(E))??null,onOpen:S,onClose:()=>w(null),palette:u})]})]})}export{x as CARD_MIN_MAP_WIDTH,g as COMPACT_SHOW,oe as EntityMap,Se as LocationsMap,M as MAPLIBRE_WORKER_FILE,S as MAP_APART_PX,me as MAP_CATEGORIES,E as MAP_STOP_PX,$ as MAP_TARGET_PX,Le as MapLegend,se as PENDING_POLL_MS,ve as SECONDARY_KINDS,$e as SelectedCard,w as cardMaxHeight,ye as categoryLabel,fe as categoryTone,f as foldAttributionOnce,de as isOnMap,T as layoutPins,Ne as legendCategories,L as loadMapLibre,we as locationNumbers,N as mapLibreWorkerUrl,ce as mapPointsRefetchInterval,Ce as offMapNotes,ge as pinCategory,xe as pinGlyph,be as pinTone,k as placeCard,pe as placementNote,ue as pointKey,j as stopsLabel,ke as summarize,Me as summaryText,ie as useMapHighlight,Ee as useMapPoints,F as zoomApart};
|
package/dist/page-tabs/index.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use client";
|
|
2
|
-
import{TabStrip as e}from"../chunk-
|
|
3
|
-
return b(g.Provider,{value:re,children:e})}var
|
|
4
|
-
return b("div",{ref:y,role:c?"tabpanel":void 0,id:c,"aria-labelledby":u,hidden:!
|
|
5
|
-
return b("div",{className:t,children:e(r)},D);const{state:i,currentKey:l,locationFor:c,idFor:a}=n,s=i.tabs.filter(e=>i.mounted.includes(e.key)).map(e=>e.key);return l&&!s.includes(l)&&s.push(l),/* @__PURE__ */h(v,{children:[s.map(n=>{const i=n===l,s=i?r:c(n);return s?/* @__PURE__ */b($,{tabKey:n,active:i,location:s,render:e,className:t,panelId:a(n,"panel"),tabId:a(n,"tab")},n):null}),!l&&/* @__PURE__ */b($,{tabKey:D,active:!0,location:r,render:e,className:t},D)]})}function
|
|
6
|
-
return b(e,{tabs:a.map(e=>({key:e.key,title:e.title,pinned:e.pinned,dirty:s.dirty.includes(e.key),copy:l.copies[e.key],icon:f(
|
|
2
|
+
import{TabStrip as e}from"../chunk-Y3UKUB7V.js";import"../chunk-6KO2U66R.js";import"../chunk-PGVUO7GB.js";import"../chunk-HZZNJHRH.js";import{useBrowserLayoutEffect as t}from"../chunk-D65T4H6J.js";import{confirm as n}from"../chunk-ECFMRDUP.js";import"../chunk-AFYQTVZO.js";import"../chunk-X4FJ54PP.js";import{useShellStrings as r}from"../chunk-NCQLGQYR.js";import*as i from"react";import{createContext as l,memo as c,useRef as a,useEffect as s,useMemo as o,useId as u,useCallback as y,useReducer as d,useState as f,useContext as p}from"react";import{useLocation as k,useNavigate as m}from"react-router-dom";import{jsx as b,Fragment as v,jsxs as h}from"react/jsx-runtime";var g=l(null),K=l(null),F=12;var N=(e,t)=>e.filter(e=>e!==t);function T(e,t){return[...t.map(t=>e.find(e=>e.key===t)).filter(e=>Boolean(e)),...e.filter(e=>!t.includes(e.key))]}function w(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 l={...e,tabs:i,activeKey:t.key,mounted:(c=e.mounted,a=t.key,c.includes(a)?c:[...c,a]),clock:r};var c,a;return l.closing&&l.closing!==t.key?l=C(l,l.closing):l.closing===t.key&&(l={...l,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=C(n,e[0].key)}return n}(l,n)}function A(e){let t={...e,activeKey:null};return t.closing&&(t=C(t,t.closing)),t}function C(e,t){return{...e,tabs:e.tabs.filter(e=>e.key!==t),mounted:N(e.mounted,t),dirty:N(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 w(e,t.entry,t.maxTabs);case"transient":return A(e);case"close":{let n=e;for(const e of t.keys)n=C(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]:N(e.dirty,t)}}(e,t.key,t.dirty)}}var M=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 j({children:e,resolve:i,pinned:l=[],storageKey:c,maxTabs:p=12,enabled:v=!0,confirmDiscard:h}){const K=k(),F=m(),N=r().pageTabs,C=u(),j=a(i);j.current=i;const x=y(e=>{const t=j.current(e);return t?{key:t.key??e.pathname,path:M(e),title:t.title}:null},[]),[L,R]=d(I,void 0,()=>{const e=function(e,t){if(!e)return[];let n;try{n=JSON.parse(e)}catch{return[]}const r=n;if(!r||1!==r.v||!Array.isArray(r.tabs))return[];const i=[];for(const e of r.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,l=t(r);if(!l||i.some(e=>e.key===l.key))continue;const c="page"===e.titleFrom&&"string"==typeof e.title&&e.title;i.push({key:l.key,path:r,title:c||l.title,titleFrom:c?"page":"route",pinned:!1,lastActive:0})}return i}(function(e){if(!e)return null;try{return localStorage.getItem(e)}catch{return null}}(c),e=>x(O(e)));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:T(r,n)}}({tabs:[],activeKey:null,mounted:[],dirty:[],closing:null,clock:0,tabs:e},l.map(e=>x(O(e))).filter(e=>Boolean(e)));const n=v?x(K):null;return t=n?w(t,n,p):A(t),t}),$=a(L);$.current=L;const D=a(/* @__PURE__ */new Map),E=v?x(K):null,P=E?.key??null;t(()=>{if(!v)return;const e=x(K);e?(D.current.set(e.key,K),R({type:"visit",entry:e,maxTabs:p})):R({type:"transient"})},[K,v,p,x]),s(()=>{const e=new Set(L.tabs.map(e=>e.key));for(const t of D.current.keys())e.has(t)||D.current.delete(t)},[L.tabs]);const S=o(()=>function(e){const t={v:1,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(t)}(L),[L]);s(()=>{if(c)try{localStorage.setItem(c,S)}catch{}},[S,c]);const B=L.dirty.length>0;s(()=>{if(!B)return;const e=e=>{e.preventDefault(),e.returnValue=""};return window.addEventListener("beforeunload",e),()=>window.removeEventListener("beforeunload",e)},[B]);const J=a(/* @__PURE__ */new Map),U=y((e,t)=>{let n=J.current.get(e);return void 0===n&&(n=J.current.size,J.current.set(e,n)),`${C}-page-${t}-${n}`},[C]),H=y(e=>h?h(e):n({title:N.discardTitle,message:1===e.length?N.discardOne:N.discardCount?.(e.length)??`${e.length} ${N.discardMany}`,confirmLabel:N.discardConfirm,cancelLabel:N.keepEditing,variant:"warning"}),[h,N]),V=y(()=>{const e=$.current;return e.tabs.find(e=>e.pinned)?.path??"/"},[]),G=y((e,t,n)=>{const r=$.current,i=r.activeKey;if(!i||!e.includes(i))return void R({type:"close",keys:e,closing:null});let l=t;if(!l){const t={...r,tabs:r.tabs.filter(t=>t.key===i||!e.includes(t.key))},c=n?r.tabs.find(t=>t.key===n&&!e.includes(t.key)):void 0;l=(c??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()}R({type:"close",keys:e.filter(e=>e!==i),closing:i}),F(l)},[F,V]),Q=y(async(e,t={})=>{const n=$.current.tabs.find(t=>t.key===e);return!n||n.pinned?(t.to&&F(t.to),!1):!(!t.force&&$.current.dirty.includes(e)&&!await H([n]))&&(!!$.current.tabs.some(t=>t.key===e)&&(G([e],t.to),!0))},[H,G,F]),Y=y(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)}($.current,e,t);const r=$.current.tabs.filter(e=>n.includes(e.key)&&$.current.dirty.includes(e.key));r.length&&!await H(r)&&(n=n.filter(e=>!r.some(t=>t.key===e)));const i=new Set($.current.tabs.map(e=>e.key));n=n.filter(e=>i.has(e)),n.length&&G(n,void 0,"all"===e?null:t)},[H,G]),Z=y(e=>{const t=$.current.tabs.find(t=>t.key===e);t&&e!==$.current.activeKey&&F(t.path)},[F]),W=y((e,t)=>R({type:"title",key:e,title:t}),[]),z=y((e,t)=>R({type:"dirty",key:e,dirty:t}),[]),[X,q]=f({}),_=y((e,t)=>{q(n=>{if((n[e]??null)===t)return n;const r={...n};return t?r[e]=t:delete r[e],r})},[]),ee=y(e=>x(e)?.key??null,[x]),te=y(e=>D.current.get(e),[]),ne=o(()=>v?L.tabs.filter(e=>e.key!==L.closing):[],[v,L.tabs,L.closing]),re=o(()=>({enabled:v,state:L,currentKey:P,resolve:i,keyFor:ee,locationFor:te,idFor:U,activate:Z,close:Q,closeMany:Y,setTitle:W,setDirty:z,copies:X,setCopy:_,visibleTabs:ne}),[v,L,P,i,ee,te,U,Z,Q,Y,W,z,X,_,ne]);/* @__PURE__ */
|
|
3
|
+
return b(g.Provider,{value:re,children:e})}var x=i.Activity,L=Boolean(x);function R({active:e,children:t}){return x?/* @__PURE__ */b(x,{mode:e?"visible":"hidden",children:t}):/* @__PURE__ */b(v,{children:t})}var $=c(function({tabKey:e,active:n,location:r,render:i,className:l,panelId:c,tabId:u}){const y=a(null),d=a(n),f=a(/* @__PURE__ */new Map);t(()=>{const e=d.current;if(d.current=n,n&&!e)for(const[e,[t,n]]of f.current)e.isConnected?(e.scrollTop=t,e.scrollLeft=n):f.current.delete(e)},[n]),s(()=>{const e=y.current;if(!e)return;const t=e=>{if(!d.current)return;const t=e.target;t&&"number"==typeof t.scrollTop&&f.current.set(t,[t.scrollTop,t.scrollLeft])};return e.addEventListener("scroll",t,!0),()=>e.removeEventListener("scroll",t,!0)},[]);const p=o(()=>({key:e,activeRef:d}),[e]);/* @__PURE__ */
|
|
4
|
+
return b("div",{ref:y,role:c?"tabpanel":void 0,id:c,"aria-labelledby":u,hidden:!n,style:n?void 0:{display:"none"},className:l,"data-page-tab":e,children:/* @__PURE__ */b(K.Provider,{value:p,children:/* @__PURE__ */b(R,{active:n,children:i(r)})})})},(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)),D="\0transient";function E({children:e,frameClassName:t}){const n=p(g),r=k();if(!n||!n.enabled)/* @__PURE__ */
|
|
5
|
+
return b("div",{className:t,children:e(r)},D);const{state:i,currentKey:l,locationFor:c,idFor:a}=n,s=i.tabs.filter(e=>i.mounted.includes(e.key)).map(e=>e.key);return l&&!s.includes(l)&&s.push(l),/* @__PURE__ */h(v,{children:[s.map(n=>{const i=n===l,s=i?r:c(n);return s?/* @__PURE__ */b($,{tabKey:n,active:i,location:s,render:e,className:t,panelId:a(n,"panel"),tabId:a(n,"tab")},n):null}),!l&&/* @__PURE__ */b($,{tabKey:D,active:!0,location:r,render:e,className:t},D)]})}function P({className:t,activeClassName:n,end:i}){const l=p(g),c=r().pageTabs;if(!l||!l.enabled)return null;const{visibleTabs:a,state:s,idFor:o,activate:u,close:y,closeMany:d,resolve:f}=l;/* @__PURE__ */
|
|
6
|
+
return b(e,{tabs:a.map(e=>({key:e.key,title:e.title,pinned:e.pinned,dirty:s.dirty.includes(e.key),copy:l.copies[e.key],icon:f(O(e.path))?.icon})),activeKey:l.currentKey??null,idFor:o,panelMounted:e=>s.mounted.includes(e),onActivate:u,onClose:e=>{y(e)},onCloseMany:(e,t)=>{d(e,t)},label:c.label,className:t,activeClassName:n,end:i})}var S={enabled:!1,tabs:[],activeKey:null,activate:()=>{},close:async()=>!1,closeOthers:async()=>{},closeRight:async()=>{},closeAll:async()=>{}};function B(){const e=p(g);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)}:S}function J(){const e=p(g),t=p(K),n=m();return{key:e?.enabled&&t?t.key:null,close:y(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 U(e){const t=p(g),n=p(K),r=t?.enabled?t.setTitle:void 0,i=n?.key;s(()=>{r&&i&&e&&r(i,e)},[r,i,e])}function H(e){const t=p(g),n=p(K),r=t?.enabled?t.setCopy:void 0,i=n?.key;s(()=>{if(r&&i)return r(i,e||null),()=>r(i,null)},[r,i,e])}function V(e){const t=p(g),n=p(K),r=t?.enabled?t.setDirty:void 0;s(()=>{if(r&&n)return r(n.key,e),()=>{n.activeRef.current&&r(n.key,!1)}},[r,n,e])}export{F as DEFAULT_MAX_TABS,L as PAGE_TABS_PAUSE_HIDDEN,P as PageTabBar,E as PageTabsOutlet,j as PageTabsProvider,O as parseTabPath,J as usePageTab,H as usePageTabCopy,V as usePageTabDirty,U as usePageTabTitle,B as usePageTabs};
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
import { ComponentType, SVGProps } from 'react';
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* The icon registry: which drawings exist, under which set, and which set the
|
|
5
|
+
* theme has chosen.
|
|
6
|
+
*
|
|
7
|
+
* Harness UI-24: every icon comes through the shell. A component asks for an
|
|
8
|
+
* icon by what it MEANS (`<Icon name="trash" />`), and the registry answers
|
|
9
|
+
* with the drawing the active set has for that meaning. The sets themselves are
|
|
10
|
+
* separate subpaths (`efficient-shell/icons/heroicons`, `…/lucide`,
|
|
11
|
+
* `…/efficient`), so a host bundles only the ones it registers, and the icon
|
|
12
|
+
* packages behind them stay optional peers.
|
|
13
|
+
*
|
|
14
|
+
* This module is the one piece of state every entry shares. It imports nothing
|
|
15
|
+
* at run time, not even React, so the kit can reach it without gaining a peer
|
|
16
|
+
* and a host's code can register a set before anything renders.
|
|
17
|
+
*/
|
|
18
|
+
/** A drawing: any component that takes an `<svg>`'s props. Every set's icons are. */
|
|
19
|
+
type IconDrawing = ComponentType<SVGProps<SVGSVGElement>>;
|
|
20
|
+
/** One icon set, as a host registers it. */
|
|
21
|
+
interface IconSet {
|
|
22
|
+
/** The key the theme stores: `'heroicons'`. */
|
|
23
|
+
name: string;
|
|
24
|
+
/** What Customization calls it: `'Heroicons'`. */
|
|
25
|
+
label: string;
|
|
26
|
+
/** Meaning to drawing. A set need not draw every meaning. */
|
|
27
|
+
icons: Readonly<Record<string, IconDrawing>>;
|
|
28
|
+
}
|
|
29
|
+
/** For `useSyncExternalStore`: called whenever a set, a drawing or the choice changes. */
|
|
30
|
+
declare function subscribeIcons(listener: () => void): () => void;
|
|
31
|
+
/** A number that moves when anything `resolveIcon` reads has moved. */
|
|
32
|
+
declare function iconsVersion(): number;
|
|
33
|
+
/**
|
|
34
|
+
* Register a set. The first one registered is the default: what draws when the
|
|
35
|
+
* theme has chosen nothing, and what a meaning falls back to when the chosen
|
|
36
|
+
* set does not draw it.
|
|
37
|
+
*
|
|
38
|
+
* Safe to call again with the same set (a module evaluated twice, hot reload):
|
|
39
|
+
* drawings are merged, and nothing is announced when nothing changed.
|
|
40
|
+
*/
|
|
41
|
+
declare function registerIconSet(set: IconSet): void;
|
|
42
|
+
/**
|
|
43
|
+
* Add drawings to a set by name: the way an editor registers its own glyphs (a
|
|
44
|
+
* block type, a settings row) without importing an icon package. The set is
|
|
45
|
+
* created if it is not there, and is then not offered in Customization until
|
|
46
|
+
* something registers it with a label.
|
|
47
|
+
*/
|
|
48
|
+
declare function registerIcons(setName: string, icons: Readonly<Record<string, IconDrawing>>): void;
|
|
49
|
+
/** Make `name` the set that draws when the theme has chosen nothing. */
|
|
50
|
+
declare function setDefaultIconSet(name: string): void;
|
|
51
|
+
/**
|
|
52
|
+
* The theme's choice (`null` for none). A name no set is registered under is
|
|
53
|
+
* kept, not refused: the set may register after the preference is read, and
|
|
54
|
+
* until it does the default draws.
|
|
55
|
+
*/
|
|
56
|
+
declare function setIconSet(name: string | null | undefined): void;
|
|
57
|
+
/** The set drawing right now: the theme's choice if it is registered, else the default. */
|
|
58
|
+
declare function activeIconSet(): string | null;
|
|
59
|
+
/** The sets a person can choose between, in the order they were registered. */
|
|
60
|
+
declare function iconSets(): {
|
|
61
|
+
name: string;
|
|
62
|
+
label: string;
|
|
63
|
+
}[];
|
|
64
|
+
/**
|
|
65
|
+
* The drawing for a meaning. The active set first; then the default set, so a
|
|
66
|
+
* set that draws only some meanings never leaves a hole; then any set that has
|
|
67
|
+
* it, which is where an editor's own glyphs are found whatever the theme chose.
|
|
68
|
+
*/
|
|
69
|
+
declare function resolveIcon(name: string): IconDrawing | undefined;
|
|
70
|
+
|
|
71
|
+
export { type IconSet as I, type IconDrawing as a, activeIconSet as b, iconsVersion as c, registerIcons as d, resolveIcon as e, setIconSet as f, subscribeIcons as g, iconSets as i, registerIconSet as r, setDefaultIconSet as s };
|
package/dist/ui/index.d.ts
CHANGED
|
@@ -1,5 +1,7 @@
|
|
|
1
|
-
export { A as ALT, b as ALT_SHIFT_D, c as ALT_SHIFT_E, d as ALT_SHIFT_N, e as APP_UPDATE_POLL_MS, f as Accordion, g as AccordionItem, h as AccordionProps, i as Align, j as AngleScale, k as AppUpdateBanner, l as AppUpdateBannerProps, m as AttachButton, n as AttachButtonProps, o as AttachmentDropZone, p as AttachmentDropZoneProps, q as AttachmentList, r as AttachmentListProps, s as AuthScreen, t as AuthScreenProps, u as Avatar, v as AvatarGroup, w as AvatarGroupProps, x as AvatarProps, y as AvatarSize, z as AvatarStatus, B as BackgroundVariant, D as BandScale, E as Banner, F as BannerEmphasis, G as BannerProps, H as BannerTone, I as BarChart, J as BarChartProps, K as BoxPlotBox, L as BoxPlotChart, M as BoxPlotChartProps, N as BrandAssetEditor, O as BrandAssetEditorProps, Q as BrandAssetPreview, R as BrandMark, T as BrandMarkProps, U as BrandMarkSlot, V as BrandMarkSurface, W as BrandMarkTreatment, X as BreadcrumbItem, Y as Breadcrumbs, Z as BreadcrumbsProps, _ as BudgetBar, $ as BudgetBarProps, a0 as BudgetState, a1 as Button, a2 as ButtonClassesOptions, a3 as ButtonProps, a4 as ButtonSize, a5 as ButtonVariant, a6 as CHART_INK, a7 as CMD_A, a8 as CMD_DOT, a9 as CMD_ENTER, aa as CMD_K, ab as CMD_S, ac as Calendar, ad as CalendarMode, ae as CalendarProps, af as Candle, ag as CandlestickChart, ah as CandlestickChartProps, ai as Card, aj as CardPadding, ak as CardProps, al as CartesianPlot, am as CartesianPlotProps, an as CellStyle, ao as ChartBackgroundVariant, ap as ChartBrush, aq as ChartBrushProps, ar as ChartCurve, as as ChartDefs, at as ChartDefsProps, au as ChartDot, av as ChartDotProps, aw as ChartDotVariant, ax as ChartFillVariant, ay as ChartFrame, az as ChartFrameProps, aA as ChartHighlightProvider, aB as ChartLegendEntry, aC as ChartLegendSwatch, aD as ChartRange, aE as ChartReferenceLine, aF as ChartRevealDirection, aG as ChartSkeleton, aH as ChartSkeletonProps, aI as ChartStatusTone, aJ as ChartStrokeVariant, aK as ChartTooltip, aL as ChartTooltipProps, aM as ChartTooltipRow, aN as ChatTemplate, aO as Checkbox, aP as CheckboxProps, aQ as CheckoutTemplate, aR as ChordChart, aS as ChordChartProps, aT as ColorPicker, aU as ColorPickerPanel, aV as ColorPickerPanelProps, aW as ColorPickerProps, aX as ColorPreset, aY as ColorSwatch, aZ as ColorSwatchProps, a_ as ColorSwatchSize, a$ as ColoredBadge, b0 as ColoredBadgeProps, b1 as ColumnChart, b2 as ColumnChartProps, C as ColumnDef, b3 as ColumnSeries, b4 as ComposerAttachments, b5 as ComposerAttachmentsProps, b6 as ConfirmProvider, b7 as ContainerFillChart, b8 as ContainerFillChartProps, b9 as ContainerFillItem, ba as ContextMenu, bb as ContextMenuPoint, bc as ContextMenuProps, bd as ContextMenuState, be as CountBadge, bf as CountBadgeProps, bg as CountBadgeTone, bh as Curve, bi as DAY_MS, bj as DEFAULT_SHELL_STRINGS, bk as DashboardTemplate, bl as DataTable, bm as DataTableColumn, bn as DataTableColumnGroup, bo as DataTableHeader, bp as DataTablePage, bq as DataTableProps, br as DataTableRowLink, bs as DataTableRowProps, bt as DatePicker, bu as DatePickerProps, bv as DateRangePicker, bw as DateRangePickerProps, bx as DateTimePicker, by as DateTimePickerProps, bz as DescriptionColumns, bA as DescriptionItem, bB as DescriptionList, bC as DescriptionListProps, bD as Dialog, bE as DialogProps, bF as DialogSize, bG as Divider, bH as DividerProps, bI as DividerSpacing, bJ as DonutChart, bK as DonutChartProps, bL as DonutSegment, bM as Drawer, bN as DrawerProps, bO as DrawerSide, bP as DrawerSize, bQ as DropdownMenu, bR as DropdownMenuAlign, bS as DropdownMenuCheckboxItem, bT as DropdownMenuDividerItem, bU as DropdownMenuEntry, bV as DropdownMenuItem, bW as DropdownMenuLabelItem, bX as DropdownMenuLinkItem, bY as DropdownMenuProps, bZ as DropdownMenuRadioItem, b_ as DropdownMenuSide, b$ as DropdownPositionOptions, c0 as ENTER, c1 as EditableGrid, c2 as EditableGridProps, c3 as EmailTemplate, c4 as EmptyState, c5 as EmptyStateProps, c6 as EmptyValue, c7 as EmptyValueProps, c8 as ErrorBoundary, c9 as ErrorBoundaryProps, ca as ErrorPage, cb as ErrorPageProps, cc as FileIntake, cd as FilePicker, ce as FilePickerProps, cf as FillVariant, cg as FormError, ch as FormErrorSummary, ci as FormErrorSummaryProps, cj as FormField, ck as FormFieldProps, cl as FormLayoutPage, cm as FunnelChart, cn as FunnelChartProps, co as FunnelStage, cp as GLASS_DIVIDER, cr as GROUP_COLORS, cs as GROUP_COLORS_SOLID, ct as GalleryTemplate, cu as Gap, cv as GlassOptions, cw as GlobalSearch, cx as GlobalSearchProps, cy as Grid, cz as GridCols, cA as GridColumn, cB as GridProps, cC as HeatmapChart, cD as HeatmapChartProps, cE as HelpCenter, cF as HelpCenterDoc, cG as HelpCenterProps, cH as HexInput, cI as HistogramBin, cJ as HistogramChart, cK as HistogramChartProps, cL as Hsv, cM as INPUT_BASE, cN as INPUT_SIZES, cO as IconButton, cP as IconButtonClassesOptions, cQ as IconButtonProps, cR as IconRail, cS as IconRailButton, cT as IconRailButtonProps, cU as IconRailLabels, cV as IconRailLabelsShown, cW as IconRailOrientation, cX as IconRailProps, cY as Inline, cZ as InlineProps, c_ as Input, c$ as InputNumber, d0 as InputNumberProps, d1 as InputProps, d2 as InputSize, d3 as Justify, d4 as Kanban, d5 as KanbanColumn, d6 as KanbanProps, d7 as Kbd, d8 as KbdProps, d9 as KbdSize, da as Label, db as LabelClassesOptions, dc as LabelProps, dd as LadderScale, de as LineChart, df as LineChartProps, dg as LineChartSeries, dh as LinearScale, di as ListDrop, dj as ListFooter, dk as ListLoadError, dl as ListLoadErrorProps, dm as ListMove, dn as ListRow, dp as ListRowProps, dq as LoadingSpinner, dr as LoadingSpinnerProps, ds as MAX_FRACTION_DIGITS, dt as MENU_MAX_HEIGHT, du as MOD, dv as MOTION, dw as Markdown, dw as MarkdownLite, dx as MarkdownLiteProps, dx as MarkdownProps, dy as MediaUploadField, dz as MediaUploadFieldProps, dA as MediaUploadGrid, dB as MediaUploadGridItem, dC as MediaUploadGridProps, dD as MenuPos, dE as Meter, dF as MeterProps, dG as MetricBar, dH as MetricBarProps, dI as Milestone, dJ as MilestoneKind, dK as MilestoneTimeline, dL as MilestoneTimelineProps, dN as NEXT_CHUNK_PATH_PREFIX, dO as NativeSelect, dP as NumericKeypad, dQ as NumericKeypadProps, dR as OVERLAY_OPEN_EVENT, dS as POPUP_MAX_WIDTH, dT as POST_PRODUCTION_STATUSES, dU as PageHeader, dV as PageHeaderProps, P as PaginatedResponse, dW as Pagination, dX as PaginationProps, dY as PaperclipGlyph, dZ as Paragraph, d_ as ParagraphProps, d$ as PieChart, e0 as PieChartProps, e1 as PieSegment, e2 as PlotGeometry, e3 as Point, e4 as Popover, e5 as PopoverAlign, e6 as PopoverProps, e7 as PopoverRenderProps, e8 as PopoverSide, e9 as PopupMenu, ea as PopupMenuDivider, eb as PopupMenuItem, ec as PopupMenuItemProps, ed as PopupMenuLabel, ee as PopupMenuProps, ef as PopupSubmenu, eg as PopupSubmenuProps, eh as PortalBrandingContextValue, ei as PortalBrandingProvider, ej as PortalBrandingProviderProps, ek as ProductionTimeline, el as ProductionTimelineProps, em as ProductionTimelineSnapshot, en as ProgressItem, eo as PublicPortal, ep as PublicPortalBranding, eq as RADAR_SERIES_CAP, er as RadarAxis, es as RadarChart, et as RadarChartProps, eu as RadarSeries, ev as RadialBarChart, ew as RadialBarChartProps, ex as RadialBarRow, ey as Radio, ez as RadioGroup, eA as RadioGroupOption, eB as RadioGroupOrientation, eC as RadioGroupProps, eD as RadioProps, eE as Range, eF as RangeChart, eG as RangeChartProps, eH as RangeRow, eI as RankedBars, eJ as RankedBarsProps, eK as RankedBarsRow, eL as ResizeHandle, eM as ResizeHandleProps, eN as ResizeHandleSide, eO as ResolvedPortalBrandAsset, eP as Result, eQ as ResultProps, eR as ResultStatus, eS as RevealDirection, eT as SCATTER_SERIES_CAP, eU as SERIES_SLOT_COUNT, eV as SERIES_VARS, eW as SHIFT, eX as STAGES, eY as STALE_CHUNK_RELOAD_COOLDOWN_MS, eZ as STALE_CHUNK_RELOAD_KEY, e_ as STATUS_VARS, e$ as SankeyChart, f0 as SankeyChartProps, f1 as SankeyLink, f2 as SankeyNode, f3 as ScatterChart, f4 as ScatterChartProps, f5 as ScatterPoint, f6 as ScatterSeries, S as SearchConfig, f7 as SearchListRoute, f8 as SearchProvider, f9 as SearchQuickAction, fa as SearchResponse, fb as SearchResult, fc as SearchableItem, fd as SearchableOption, fe as SearchableOptionGroup, ff as SearchableSelect, fg as SearchableSelectBaseProps, fh as SearchableSelectMultipleProps, fi as SearchableSelectProps, fj as Segmented, fk as SegmentedOption, fl as SegmentedProps, fm as SegmentedSize, fn as Select, fo as SelectBaseProps, fp as SelectItem, fq as SelectMultipleProps, fr as SelectOption, fs as SelectOptionGroup, ft as SelectProps, fu as SemanticGroup, fv as SettingRow, fw as SettingRowProps, fx as SeverityTone, fA as ShellPrefsAdapter, fB as ShellPrefsProvider, fC as ShellStrings, fD as ShellStringsOverride, fE as ShellStringsProvider, fF as SidebarActionButton, fG as SidebarActionButtonProps, fH as SidebarGroupLabel, fI as SidebarGroupLabelProps, fJ as SidebarLayout, fK as SidebarLayoutProps, fL as SidebarNavGroup, fM as SidebarNavGroupProps, fN as SidebarNavItem, fO as SidebarNavItemProps, fP as Skeleton, fQ as SkeletonProps, fR as SkeletonVariant, fS as Slider, fT as SliderProps, fU as SliderSize, fV as Snippet, fW as SnippetProps, fX as SnippetSize, fY as SnippetVariant, a as SortState, fZ as SortableList, f_ as SortableListProps, f$ as SortableListSpacing, g0 as Sparkline, g1 as SparklineProps, g2 as Stack, g3 as StackProps, g4 as StaleChunkReloadOptions, g5 as StatCard, g6 as StatCardProps, g7 as StatTile, g8 as StatTileProps, g9 as Statistic, ga as StatisticProps, gb as StatisticSize, gc as StatisticTone, gd as StatusBadge, ge as StatusBadgeProvider, gf as StatusEmphasis, gg as StepItem, gh as Stepper, gi as StepperProps, gj as StrokeVariant, gk as SunburstChart, gl as SunburstChartProps, gm as SunburstNode, gn as Switch, go as SwitchProps, gp as SwitchSize, gq as TabItem, gr as Tabs, gs as TabsProps, gt as TagInput, gu as TagInputOption, gv as TagInputProps, gw as Text, gx as TextProps, gy as TextSize, gz as TextTone, gA as TextWeight, gB as Textarea, gC as TextareaProps, gD as Theme, gE as TileButton, gF as TileButtonProps, gG as TileSize, gH as TimeAgo, gI as TimeAgoProps, gJ as TimePicker, gK as TimePickerProps, gL as TimeSeriesChart, gM as TimeSeriesChartProps, gN as TimeSeriesSeries, gO as TimelineMarker, gP as TimelineMarkerKind, gQ as TimelineReport, gR as TimelineScrubProgress, gS as TimelineTrack, gT as TimelineTrackItem, gU as TimelineTrackKind, gV as TimelineTrackPending, gW as TimelineTrackPhase, gX as TimelineTrackPlayback, gY as TimelineTrackProps, gZ as TimelineTrackThumb, g_ as Title, g$ as TitleLevel, h0 as TitleProps, h1 as ToastOptions, h2 as ToastPlacement, h3 as Tooltip, h4 as TooltipProps, h5 as TopNav, h6 as TopNavItem, h7 as TopNavProps, h8 as Tree, h9 as TreeDrop, ha as TreeEmptySlot, hb as TreeEmptySlotProps, hc as TreeGroup, hd as TreeGroupLabel, he as TreeGroupProps, hf as TreeMove, hg as TreeProps, hh as TreeRow, hi as TreeRowProps, hj as TreeSeam, hk as TreeSeamProps, hl as TreemapChart, hm as TreemapChartProps, hn as TreemapItem, ho as TreemapTile, hp as UseAppUpdateOptions, hq as UseContextMenu, hr as UseProductionTimelineOpts, hs as VERSION, ht as VITE_PRELOAD_ERROR_EVENT, hu as WaterfallChart, hv as WaterfallChartProps, hw as WaterfallStep, hx as ZLayer, hy as Z_LAYERS, hz as angleScale, hA as appendKey, hB as applyThemePrefs, hC as arcPath, hD as areaBetween, hE as areaFrom, hF as autoHighlightIndex, hG as backspace, hH as bandScale, hI as binValues, hJ as budgetState, hK as bumpPath, hL as buttonClasses, hM as calcOverall, hN as calcReportOverall, hO as colorFill, hP as colorSwatchClasses, hQ as confirm, hR as confirmDestructive, hS as curvePath, hT as dashFor, hV as dismissPopups, hW as fillFor, hX as fillId, hY as fmtSliderDate, hZ as fromDateKey, h_ as glassStyle, h$ as glowId, i0 as groundId, i1 as groupColors, i2 as hexToHsv, i3 as highlightOpacity, i4 as hsvToHex, i5 as iconButtonClasses, i6 as inputClasses, i7 as installStaleChunkReload, i8 as isMac, i9 as isSeverityTone, ia as isStaleChunkError, ic as labelClasses, id as ladderScale, ie as leavesContextMenuAlone, ig as linearPath, ih as linearScale, ii as logScale, ij as maskId, ik as mediaFileName, il as monotonePath, im as niceMax, io as openGlobalSearch, ip as parseHexColor, iq as polygonPoints, ir as popupBounds, is as prompt, it as pushRecentSearch, iu as radiusScale, iv as registerModalEscapeInterceptor, iw as resolveBrandMarkTreatment, ix as resolvePortalBrandAsset, iy as resolveSeriesColor, iz as resolveTheme, iA as sanitizeRecentSearches, iB as seriesColor, iC as severityOf, iD as splinePath, iE as squarify, iF as stagger, iG as stepPath, iH as tabButtonId, iI as tabPanelId, iJ as toDateKey, iK as toDayMs, iL as toISODate, iM as toast, iN as useAppUpdate, iO as useClickOutside, iP as useConfirm, iQ as useContextMenu, iR as useDebouncedValue, iS as useDropdownPosition, iT as useFocusTrap, iU as useHighlight, iV as useIsMobile, iW as useLocalStoragePrefs, iX as usePlotWidth, iY as usePortalBranding, iZ as useProductionTimeline, i_ as useScrollLock, i$ as useShellLocale, j0 as useShellPrefs, j1 as useShellStrings, j2 as useTheme } from '../index-CbLbd__n.js';
|
|
1
|
+
export { A as ALT, b as ALT_SHIFT_D, c as ALT_SHIFT_E, d as ALT_SHIFT_N, e as APP_UPDATE_POLL_MS, f as Accordion, g as AccordionItem, h as AccordionProps, i as Align, j as AngleScale, k as AppUpdateBanner, l as AppUpdateBannerProps, m as AttachButton, n as AttachButtonProps, o as AttachmentDropZone, p as AttachmentDropZoneProps, q as AttachmentList, r as AttachmentListProps, s as AuthScreen, t as AuthScreenProps, u as Avatar, v as AvatarGroup, w as AvatarGroupProps, x as AvatarProps, y as AvatarSize, z as AvatarStatus, B as BackgroundVariant, D as BandScale, E as Banner, F as BannerEmphasis, G as BannerProps, H as BannerTone, I as BarChart, J as BarChartProps, K as BoxPlotBox, L as BoxPlotChart, M as BoxPlotChartProps, N as BrandAssetEditor, O as BrandAssetEditorProps, Q as BrandAssetPreview, R as BrandMark, T as BrandMarkProps, U as BrandMarkSlot, V as BrandMarkSurface, W as BrandMarkTreatment, X as BreadcrumbItem, Y as Breadcrumbs, Z as BreadcrumbsProps, _ as BudgetBar, $ as BudgetBarProps, a0 as BudgetState, a1 as Button, a2 as ButtonClassesOptions, a3 as ButtonProps, a4 as ButtonSize, a5 as ButtonVariant, a6 as CHART_INK, a7 as CMD_A, a8 as CMD_DOT, a9 as CMD_ENTER, aa as CMD_K, ab as CMD_S, ac as CORNERS, ad as Calendar, ae as CalendarMode, af as CalendarProps, ag as Candle, ah as CandlestickChart, ai as CandlestickChartProps, aj as Card, ak as CardPadding, al as CardProps, am as CartesianPlot, an as CartesianPlotProps, ao as CellStyle, ap as ChartBackgroundVariant, aq as ChartBrush, ar as ChartBrushProps, as as ChartCurve, at as ChartDefs, au as ChartDefsProps, av as ChartDot, aw as ChartDotProps, ax as ChartDotVariant, ay as ChartFillVariant, az as ChartFrame, aA as ChartFrameProps, aB as ChartHighlightProvider, aC as ChartLegendEntry, aD as ChartLegendSwatch, aE as ChartRange, aF as ChartReferenceLine, aG as ChartRevealDirection, aH as ChartSkeleton, aI as ChartSkeletonProps, aJ as ChartStatusTone, aK as ChartStrokeVariant, aL as ChartTooltip, aM as ChartTooltipProps, aN as ChartTooltipRow, aO as ChatTemplate, aP as Checkbox, aQ as CheckboxProps, aR as CheckoutTemplate, aS as ChordChart, aT as ChordChartProps, aU as ColorPicker, aV as ColorPickerPanel, aW as ColorPickerPanelProps, aX as ColorPickerProps, aY as ColorPreset, aZ as ColorSwatch, a_ as ColorSwatchProps, a$ as ColorSwatchSize, b0 as ColoredBadge, b1 as ColoredBadgeProps, b2 as ColumnChart, b3 as ColumnChartProps, C as ColumnDef, b4 as ColumnSeries, b5 as ComposerAttachments, b6 as ComposerAttachmentsProps, b7 as ConfirmProvider, b8 as ContainerFillChart, b9 as ContainerFillChartProps, ba as ContainerFillItem, bb as ContextMenu, bc as ContextMenuPoint, bd as ContextMenuProps, be as ContextMenuState, bf as Corners, bg as CountBadge, bh as CountBadgeProps, bi as CountBadgeTone, bj as Curve, bk as DAY_MS, bl as DEFAULT_SHELL_STRINGS, bm as DashboardTemplate, bn as DataTable, bo as DataTableColumn, bp as DataTableColumnGroup, bq as DataTableHeader, br as DataTablePage, bs as DataTableProps, bt as DataTableRowLink, bu as DataTableRowProps, bv as DatePicker, bw as DatePickerProps, bx as DateRangePicker, by as DateRangePickerProps, bz as DateTimePicker, bA as DateTimePickerProps, bB as DescriptionColumns, bC as DescriptionItem, bD as DescriptionList, bE as DescriptionListProps, bF as Dialog, bG as DialogProps, bH as DialogSize, bI as Divider, bJ as DividerProps, bK as DividerSpacing, bL as DonutChart, bM as DonutChartProps, bN as DonutSegment, bO as Drawer, bP as DrawerProps, bQ as DrawerSide, bR as DrawerSize, bS as DropdownMenu, bT as DropdownMenuAlign, bU as DropdownMenuCheckboxItem, bV as DropdownMenuDividerItem, bW as DropdownMenuEntry, bX as DropdownMenuItem, bY as DropdownMenuLabelItem, bZ as DropdownMenuLinkItem, b_ as DropdownMenuProps, b$ as DropdownMenuRadioItem, c0 as DropdownMenuSide, c1 as DropdownPositionOptions, c2 as ENGLISH, c3 as ENTER, c4 as EditableGrid, c5 as EditableGridProps, c6 as EmailTemplate, c7 as EmptyState, c8 as EmptyStateProps, c9 as EmptyValue, ca as EmptyValueProps, cb as ErrorBoundary, cc as ErrorBoundaryProps, cd as ErrorPage, ce as ErrorPageProps, cf as FileIntake, cg as FilePicker, ch as FilePickerProps, ci as FillVariant, cj as FormError, ck as FormErrorSummary, cl as FormErrorSummaryProps, cm as FormField, cn as FormFieldProps, co as FormLayoutPage, cp as FunnelChart, cq as FunnelChartProps, cr as FunnelStage, cs as GLASS_DIVIDER, cu as GROUP_COLORS, cv as GROUP_COLORS_SOLID, cw as GalleryTemplate, cx as Gap, cy as GlassOptions, cz as GlobalSearch, cA as GlobalSearchProps, cB as Grid, cC as GridCols, cD as GridColumn, cE as GridProps, cF as HeatmapChart, cG as HeatmapChartProps, cH as HelpCenter, cI as HelpCenterDoc, cJ as HelpCenterProps, cK as HexInput, cL as HistogramBin, cM as HistogramChart, cN as HistogramChartProps, cO as Hsv, cP as INPUT_BASE, cQ as INPUT_SIZES, cR as IconButton, cS as IconButtonClassesOptions, cT as IconButtonProps, cU as IconRail, cV as IconRailButton, cW as IconRailButtonProps, cX as IconRailLabels, cY as IconRailLabelsShown, cZ as IconRailOrientation, c_ as IconRailProps, c$ as Inline, d0 as InlineProps, d1 as Input, d2 as InputNumber, d3 as InputNumberProps, d4 as InputProps, d5 as InputSize, d6 as Justify, d7 as Kanban, d8 as KanbanColumn, d9 as KanbanProps, da as Kbd, db as KbdProps, dc as KbdSize, dd as Label, de as LabelClassesOptions, df as LabelProps, dg as LadderScale, dh as LineChart, di as LineChartProps, dj as LineChartSeries, dk as LinearScale, dl as ListDrop, dm as ListFooter, dn as ListLoadError, dp as ListLoadErrorProps, dq as ListMove, dr as ListRow, ds as ListRowProps, dt as LoadingSpinner, du as LoadingSpinnerProps, dv as MAX_FRACTION_DIGITS, dw as MENU_MAX_HEIGHT, dx as MOD, dy as MOTION, dz as Markdown, dz as MarkdownLite, dA as MarkdownLiteProps, dA as MarkdownProps, dB as MediaUploadField, dC as MediaUploadFieldProps, dD as MediaUploadGrid, dE as MediaUploadGridItem, dF as MediaUploadGridProps, dG as MenuPos, dH as Meter, dI as MeterProps, dJ as MetricBar, dK as MetricBarProps, dL as Milestone, dM as MilestoneKind, dN as MilestoneTimeline, dO as MilestoneTimelineProps, dQ as NEXT_CHUNK_PATH_PREFIX, dR as NativeSelect, dS as NumericKeypad, dT as NumericKeypadProps, dU as OVERLAY_OPEN_EVENT, dV as POPUP_MAX_WIDTH, dW as POST_PRODUCTION_STATUSES, dX as PageHeader, dY as PageHeaderProps, P as PaginatedResponse, dZ as Pagination, d_ as PaginationProps, d$ as PaperclipGlyph, e0 as Paragraph, e1 as ParagraphProps, e2 as PieChart, e3 as PieChartProps, e4 as PieSegment, e5 as PlotGeometry, e6 as Point, e7 as Popover, e8 as PopoverAlign, e9 as PopoverProps, ea as PopoverRenderProps, eb as PopoverSide, ec as PopupMenu, ed as PopupMenuDivider, ee as PopupMenuItem, ef as PopupMenuItemProps, eg as PopupMenuLabel, eh as PopupMenuProps, ei as PopupSubmenu, ej as PopupSubmenuProps, ek as PortalBrandingContextValue, el as PortalBrandingProvider, em as PortalBrandingProviderProps, en as ProductionTimeline, eo as ProductionTimelineProps, ep as ProductionTimelineSnapshot, eq as ProgressItem, er as PublicPortal, es as PublicPortalBranding, et as RADAR_SERIES_CAP, eu as RadarAxis, ev as RadarChart, ew as RadarChartProps, ex as RadarSeries, ey as RadialBarChart, ez as RadialBarChartProps, eA as RadialBarRow, eB as Radio, eC as RadioGroup, eD as RadioGroupOption, eE as RadioGroupOrientation, eF as RadioGroupProps, eG as RadioProps, eH as Range, eI as RangeChart, eJ as RangeChartProps, eK as RangeRow, eL as RankedBars, eM as RankedBarsProps, eN as RankedBarsRow, eO as ResizeHandle, eP as ResizeHandleProps, eQ as ResizeHandleSide, eR as ResolvedPortalBrandAsset, eS as Result, eT as ResultProps, eU as ResultStatus, eV as RevealDirection, eW as SCATTER_SERIES_CAP, eX as SERIES_SLOT_COUNT, eY as SERIES_VARS, eZ as SHELL_LANGUAGE_STORAGE_KEY, e_ as SHIFT, e$ as STAGES, f0 as STALE_CHUNK_RELOAD_COOLDOWN_MS, f1 as STALE_CHUNK_RELOAD_KEY, f2 as STATUS_VARS, f3 as SankeyChart, f4 as SankeyChartProps, f5 as SankeyLink, f6 as SankeyNode, f7 as ScatterChart, f8 as ScatterChartProps, f9 as ScatterPoint, fa as ScatterSeries, S as SearchConfig, fb as SearchListRoute, fc as SearchProvider, fd as SearchQuickAction, fe as SearchResponse, ff as SearchResult, fg as SearchableItem, fh as SearchableOption, fi as SearchableOptionGroup, fj as SearchableSelect, fk as SearchableSelectBaseProps, fl as SearchableSelectMultipleProps, fm as SearchableSelectProps, fn as Segmented, fo as SegmentedOption, fp as SegmentedProps, fq as SegmentedSize, fr as Select, fs as SelectBaseProps, ft as SelectItem, fu as SelectMultipleProps, fv as SelectOption, fw as SelectOptionGroup, fx as SelectProps, fy as SemanticGroup, fz as SettingRow, fA as SettingRowProps, fB as SeverityTone, fE as ShellLanguage, fF as ShellLanguageProvider, fG as ShellLanguageState, fH as ShellPrefsAdapter, fI as ShellPrefsProvider, fJ as ShellStrings, fK as ShellStringsOverride, fL as ShellStringsProvider, fM as SidebarActionButton, fN as SidebarActionButtonProps, fO as SidebarGroupLabel, fP as SidebarGroupLabelProps, fQ as SidebarLayout, fR as SidebarLayoutProps, fS as SidebarNavGroup, fT as SidebarNavGroupProps, fU as SidebarNavItem, fV as SidebarNavItemProps, fW as Skeleton, fX as SkeletonProps, fY as SkeletonVariant, fZ as Slider, f_ as SliderProps, f$ as SliderSize, g0 as Snippet, g1 as SnippetProps, g2 as SnippetSize, g3 as SnippetVariant, a as SortState, g4 as SortableList, g5 as SortableListProps, g6 as SortableListSpacing, g7 as Sparkline, g8 as SparklineProps, g9 as Stack, ga as StackProps, gb as StaleChunkReloadOptions, gc as StatCard, gd as StatCardProps, ge as StatTile, gf as StatTileProps, gg as Statistic, gh as StatisticProps, gi as StatisticSize, gj as StatisticTone, gk as StatusBadge, gl as StatusBadgeProvider, gm as StatusEmphasis, gn as StepItem, go as Stepper, gp as StepperProps, gq as StrokeVariant, gr as SunburstChart, gs as SunburstChartProps, gt as SunburstNode, gu as Switch, gv as SwitchProps, gw as SwitchSize, gx as TabItem, gy as Tabs, gz as TabsProps, gA as TagInput, gB as TagInputOption, gC as TagInputProps, gD as Text, gE as TextProps, gF as TextSize, gG as TextTone, gH as TextWeight, gI as Textarea, gJ as TextareaProps, gK as Theme, gL as TileButton, gM as TileButtonProps, gN as TileSize, gO as TimeAgo, gP as TimeAgoProps, gQ as TimePicker, gR as TimePickerProps, gS as TimeSeriesChart, gT as TimeSeriesChartProps, gU as TimeSeriesSeries, gV as TimelineMarker, gW as TimelineMarkerKind, gX as TimelineReport, gY as TimelineScrubProgress, gZ as TimelineTrack, g_ as TimelineTrackItem, g$ as TimelineTrackKind, h0 as TimelineTrackPending, h1 as TimelineTrackPhase, h2 as TimelineTrackPlayback, h3 as TimelineTrackProps, h4 as TimelineTrackThumb, h5 as Title, h6 as TitleLevel, h7 as TitleProps, h8 as ToastOptions, h9 as ToastPlacement, ha as Tooltip, hb as TooltipProps, hc as TopNav, hd as TopNavItem, he as TopNavProps, hf as Tree, hg as TreeDrop, hh as TreeEmptySlot, hi as TreeEmptySlotProps, hj as TreeGroup, hk as TreeGroupLabel, hl as TreeGroupProps, hm as TreeMove, hn as TreeProps, ho as TreeRow, hp as TreeRowProps, hq as TreeSeam, hr as TreeSeamProps, hs as TreemapChart, ht as TreemapChartProps, hu as TreemapItem, hv as TreemapTile, hw as UseAppUpdateOptions, hx as UseContextMenu, hy as UseProductionTimelineOpts, hz as VERSION, hA as VITE_PRELOAD_ERROR_EVENT, hB as WaterfallChart, hC as WaterfallChartProps, hD as WaterfallStep, hE as ZLayer, hF as Z_LAYERS, hG as angleScale, hH as appendKey, hI as applyCorners, hJ as applyIconSet, hK as applyThemePrefs, hL as arcPath, hM as areaBetween, hN as areaFrom, hO as autoHighlightIndex, hP as backspace, hQ as bandScale, hR as binValues, hS as budgetState, hT as bumpPath, hU as buttonClasses, hV as calcOverall, hW as calcReportOverall, hX as colorFill, hY as colorSwatchClasses, hZ as confirm, h_ as confirmDestructive, h$ as curvePath, i0 as dashFor, i2 as dismissPopups, i3 as fillFor, i4 as fillId, i5 as fmtSliderDate, i6 as fromDateKey, i7 as glassStyle, i8 as glowId, i9 as groundId, ia as groupColors, ib as hexToHsv, ic as highlightOpacity, id as hsvToHex, ie as iconButtonClasses, ig as inputClasses, ih as installStaleChunkReload, ii as isMac, ij as isSeverityTone, ik as isStaleChunkError, im as labelClasses, io as ladderScale, ip as leavesContextMenuAlone, iq as linearPath, ir as linearScale, is as logScale, it as maskId, iu as matchShellLanguage, iv as mediaFileName, iw as monotonePath, ix as niceMax, iy as openGlobalSearch, iz as parseHexColor, iA as polygonPoints, iB as popupBounds, iC as prompt, iD as pushRecentSearch, iE as radiusScale, iF as readSavedShellLanguage, iG as registerModalEscapeInterceptor, iH as resolveBrandMarkTreatment, iI as resolveCorners, iJ as resolvePortalBrandAsset, iK as resolveSeriesColor, iL as resolveShellLanguage, iM as resolveTheme, iN as sanitizeRecentSearches, iO as saveShellLanguage, iP as seriesColor, iQ as severityOf, iR as splinePath, iS as squarify, iT as stagger, iU as stepPath, iV as tabButtonId, iW as tabPanelId, iX as toDateKey, iY as toDayMs, iZ as toISODate, i_ as toast, i$ as useAppUpdate, j0 as useClickOutside, j1 as useConfirm, j2 as useContextMenu, j3 as useDebouncedValue, j4 as useDropdownPosition, j5 as useFocusTrap, j6 as useHighlight, j7 as useIsMobile, j8 as useLocalStoragePrefs, j9 as usePlotWidth, ja as usePortalBranding, jb as useProductionTimeline, jc as useScrollLock, jd as useShellLanguage, je as useShellLocale, jf as useShellPrefs, jg as useShellStrings, jh as useTheme } from '../index-Dq20bi8D.js';
|
|
2
2
|
export { FileIntakeAlert, FileIntakeLimits, FileIntakeOptions, FileRejection, FileRejectionReason, acceptsFile, useFileIntake } from '../file-intake/index.js';
|
|
3
|
+
export { ICON_NAMES, Icon, IconName, IconProps, IconTone, isIconName } from '../icons/index.js';
|
|
4
|
+
export { a as IconDrawing, I as IconSet, b as activeIconSet, i as iconSets, c as iconsVersion, r as registerIconSet, d as registerIcons, e as resolveIcon, s as setDefaultIconSet, f as setIconSet, g as subscribeIcons } from '../registry-FHdUeVww.js';
|
|
3
5
|
export { C as CurrencyFormat, D as DATE_FORMAT_OPTIONS, a as DateFormatKey, E as EMPTY_VALUE, F as FormatDateOptions, b as FormatMoneyOptions, T as TZ_AUTO, c as TimeAgoOptions, d as currencyDecimals, e as currencySymbol, f as firstDayOfWeek, g as formatBytes, h as formatDate, i as formatDateTime, j as formatMoney, k as formatTime, l as getUserDateFormat, m as getUserTimezone, s as setCurrencyFormats, n as setUserDateFormat, o as setUserTimezone, p as syncTimezoneFromProfile, t as timeAgo } from '../index-DCUzlKPZ.js';
|
|
4
6
|
import 'react';
|
|
5
7
|
import 'react/jsx-runtime';
|
package/dist/ui/index.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
"use client";
|
|
2
|
-
export{APP_UPDATE_POLL_MS,Accordion,AppUpdateBanner,AttachButton,AttachmentDropZone,AttachmentList,AuthScreen,Avatar,AvatarGroup,Banner,BarChart,BoxPlotChart,BrandAssetEditor,BudgetBar,CHART_INK,Calendar,CandlestickChart,Card,CartesianPlot,ChartBrush,ChartDefs,ChartDot,ChartFrame,ChartHighlightProvider,ChartSkeleton,ChartTooltip,ChatTemplate,Checkbox_default as Checkbox,CheckoutTemplate,ChordChart,ColorPicker,ColorPickerPanel,ColorSwatch,ColoredBadge,ColumnChart,ComposerAttachments,ContainerFillChart,ContextMenu,CountBadge,DAY_MS,DashboardTemplate,DataTable,DataTablePage,DatePicker_default as DatePicker,DateRangePicker,DateTimePicker_default as DateTimePicker,DescriptionList,Divider,DonutChart,Drawer,DropdownMenu,EmailTemplate,EmptyState,EmptyValue,ErrorBoundary,ErrorPage,FilePicker_default as FilePicker,FormErrorSummary,FormField,FormLayoutPage,FunnelChart,GROUP_COLORS,GROUP_COLORS_SOLID,GalleryTemplate,Grid,HeatmapChart,HelpCenter,HexInput,HistogramChart,INPUT_BASE,INPUT_SIZES,IconButton_default as IconButton,IconRail,IconRailButton,Inline,Input_default as Input,InputNumber_default as InputNumber,Kanban,Label,LineChart,ListFooter,ListLoadError,ListRow,MAX_FRACTION_DIGITS,MOTION,Markdown,Markdown as MarkdownLite,MediaUploadField,MediaUploadGrid,Meter,MetricBar,MilestoneTimeline,NativeSelect,NumericKeypad,POST_PRODUCTION_STATUSES,PageHeader,Pagination,PaperclipGlyph,Paragraph,PieChart,Popover,PortalBrandingProvider,ProductionTimeline,RADAR_SERIES_CAP,RadarChart,RadialBarChart,Radio_default as Radio,RadioGroup,RangeChart,RankedBars,SCATTER_SERIES_CAP,SERIES_SLOT_COUNT,SERIES_VARS,STAGES,STATUS_VARS,SankeyChart,ScatterChart,SearchableSelect,Segmented,Select_default as Select,SettingRow,SidebarActionButton,SidebarGroupLabel,SidebarNavGroup,SidebarNavItem,Skeleton,Slider,Snippet,SortableList,Sparkline,Stack,StatCard,StatTile,Statistic,StatusBadge,StatusBadgeProvider,Stepper,SunburstChart,Switch_default as Switch,Tabs,TagInput,Text,Textarea_default as Textarea,TileButton_default as TileButton,TimeAgo,TimePicker_default as TimePicker,TimeSeriesChart,TimelineTrack,Title,TopNav,Tree,TreeEmptySlot,TreeGroup,TreeGroupLabel,TreeRow,TreeSeam,TreemapChart,WaterfallChart,angleScale,appendKey,applyThemePrefs,arcPath,areaBetween,areaFrom,autoHighlightIndex,backspace,bandScale,binValues,budgetState,bumpPath,calcOverall,calcReportOverall,colorFill,colorSwatchClasses,curvePath,dashFor,fillFor,fillId,fmtSliderDate,fromKey as fromDateKey,glowId,groundId,groupColors,hexToHsv,highlightOpacity,hsvToHex,inputClasses,isSeverityTone,labelClasses,ladderScale,linearPath,linearScale,logScale,maskId,mediaFileName,monotonePath,niceMax,parseHexColor,polygonPoints,radiusScale,resolvePortalBrandAsset,resolveSeriesColor,resolveTheme,seriesColor,severityOf,splinePath,squarify,stagger,stepPath,tabButtonId,tabPanelId,toKey as toDateKey,toDayMs,toISODate,useAppUpdate,useClickOutside,useContextMenu,useDebouncedValue,useHighlight,usePlotWidth,usePortalBranding,useProductionTimeline,useTheme}from"../chunk-
|
|
2
|
+
export{APP_UPDATE_POLL_MS,Accordion,AppUpdateBanner,AttachButton,AttachmentDropZone,AttachmentList,AuthScreen,Avatar,AvatarGroup,Banner,BarChart,BoxPlotChart,BrandAssetEditor,BudgetBar,CHART_INK,CORNERS,Calendar,CandlestickChart,Card,CartesianPlot,ChartBrush,ChartDefs,ChartDot,ChartFrame,ChartHighlightProvider,ChartSkeleton,ChartTooltip,ChatTemplate,Checkbox_default as Checkbox,CheckoutTemplate,ChordChart,ColorPicker,ColorPickerPanel,ColorSwatch,ColoredBadge,ColumnChart,ComposerAttachments,ContainerFillChart,ContextMenu,CountBadge,DAY_MS,DashboardTemplate,DataTable,DataTablePage,DatePicker_default as DatePicker,DateRangePicker,DateTimePicker_default as DateTimePicker,DescriptionList,Divider,DonutChart,Drawer,DropdownMenu,ENGLISH,EmailTemplate,EmptyState,EmptyValue,ErrorBoundary,ErrorPage,FilePicker_default as FilePicker,FormErrorSummary,FormField,FormLayoutPage,FunnelChart,GROUP_COLORS,GROUP_COLORS_SOLID,GalleryTemplate,Grid,HeatmapChart,HelpCenter,HexInput,HistogramChart,INPUT_BASE,INPUT_SIZES,IconButton_default as IconButton,IconRail,IconRailButton,Inline,Input_default as Input,InputNumber_default as InputNumber,Kanban,Label,LineChart,ListFooter,ListLoadError,ListRow,MAX_FRACTION_DIGITS,MOTION,Markdown,Markdown as MarkdownLite,MediaUploadField,MediaUploadGrid,Meter,MetricBar,MilestoneTimeline,NativeSelect,NumericKeypad,POST_PRODUCTION_STATUSES,PageHeader,Pagination,PaperclipGlyph,Paragraph,PieChart,Popover,PortalBrandingProvider,ProductionTimeline,RADAR_SERIES_CAP,RadarChart,RadialBarChart,Radio_default as Radio,RadioGroup,RangeChart,RankedBars,SCATTER_SERIES_CAP,SERIES_SLOT_COUNT,SERIES_VARS,SHELL_LANGUAGE_STORAGE_KEY,STAGES,STATUS_VARS,SankeyChart,ScatterChart,SearchableSelect,Segmented,Select_default as Select,SettingRow,ShellLanguageProvider,SidebarActionButton,SidebarGroupLabel,SidebarNavGroup,SidebarNavItem,Skeleton,Slider,Snippet,SortableList,Sparkline,Stack,StatCard,StatTile,Statistic,StatusBadge,StatusBadgeProvider,Stepper,SunburstChart,Switch_default as Switch,Tabs,TagInput,Text,Textarea_default as Textarea,TileButton_default as TileButton,TimeAgo,TimePicker_default as TimePicker,TimeSeriesChart,TimelineTrack,Title,TopNav,Tree,TreeEmptySlot,TreeGroup,TreeGroupLabel,TreeRow,TreeSeam,TreemapChart,WaterfallChart,angleScale,appendKey,applyCorners,applyIconSet,applyThemePrefs,arcPath,areaBetween,areaFrom,autoHighlightIndex,backspace,bandScale,binValues,budgetState,bumpPath,calcOverall,calcReportOverall,colorFill,colorSwatchClasses,curvePath,dashFor,fillFor,fillId,fmtSliderDate,fromKey as fromDateKey,glowId,groundId,groupColors,hexToHsv,highlightOpacity,hsvToHex,inputClasses,isSeverityTone,labelClasses,ladderScale,linearPath,linearScale,logScale,maskId,matchShellLanguage,mediaFileName,monotonePath,niceMax,parseHexColor,polygonPoints,radiusScale,readSavedShellLanguage,resolveCorners,resolvePortalBrandAsset,resolveSeriesColor,resolveShellLanguage,resolveTheme,saveShellLanguage,seriesColor,severityOf,splinePath,squarify,stagger,stepPath,tabButtonId,tabPanelId,toKey as toDateKey,toDayMs,toISODate,useAppUpdate,useClickOutside,useContextMenu,useDebouncedValue,useHighlight,usePlotWidth,usePortalBranding,useProductionTimeline,useShellLanguage,useTheme}from"../chunk-GKLJ2SYS.js";export{Breadcrumbs}from"../chunk-FZRQBHTK.js";export{BrandMark,GlobalSearch,openGlobalSearch,pushRecent as pushRecentSearch,resolveBrandMarkTreatment,sanitizeRecent as sanitizeRecentSearches}from"../chunk-5G4QMZGJ.js";export{EditableGrid}from"../chunk-7YFAFXQG.js";import"../chunk-BR22X7E5.js";export{ResizeHandle,SidebarLayout}from"../chunk-AUKURHBZ.js";export{VERSION}from"../chunk-67ZUPDWG.js";export{toast_default as toast}from"../chunk-KSSAVLO7.js";export{ALT,ALT_SHIFT_D,ALT_SHIFT_E,ALT_SHIFT_N,CMD_A,CMD_DOT,CMD_ENTER,CMD_K,CMD_S,ENTER,Kbd,LoadingSpinner,MOD,NEXT_CHUNK_PATH_PREFIX,Result,SHIFT,STALE_CHUNK_RELOAD_COOLDOWN_MS,STALE_CHUNK_RELOAD_KEY,ShellPrefsProvider,VITE_PRELOAD_ERROR_EVENT,installStaleChunkReload,isMac,isStaleChunkError,useIsMobile,useLocalStoragePrefs,useShellPrefs}from"../chunk-CRI4UFBU.js";import"../chunk-5A7MWTXX.js";export{Button_default as Button,MENU_MAX_HEIGHT,POPUP_MAX_WIDTH,Tooltip,buttonClasses,iconButtonClasses,popupBounds,useDropdownPosition}from"../chunk-EXXHI5DO.js";export{PopupMenu,PopupMenuDivider,PopupMenuItem,PopupMenuLabel,PopupSubmenu,leavesContextMenuAlone}from"../chunk-PGVUO7GB.js";export{GLASS_DIVIDER,glassStyle}from"../chunk-HZZNJHRH.js";import"../chunk-D65T4H6J.js";export{ConfirmProvider,Dialog,confirm,confirmDestructive,prompt,useConfirm,useFocusTrap,useScrollLock}from"../chunk-ECFMRDUP.js";import"../chunk-AFYQTVZO.js";export{OVERLAY_OPEN_EVENT,Z_LAYERS,dismissPopups,registerModalEscapeInterceptor}from"../chunk-X4FJ54PP.js";export{FileIntakeAlert,acceptsFile,useFileIntake}from"../chunk-5J2TKKGH.js";export{DEFAULT_SHELL_STRINGS,ShellStringsProvider,useShellLocale,useShellStrings}from"../chunk-NCQLGQYR.js";export{DATE_FORMAT_OPTIONS,EMPTY_VALUE,TZ_AUTO,currencyDecimals,currencySymbol,firstDayOfWeek,formatBytes,formatDate,formatDateTime,formatMoney,formatTime,getUserDateFormat,getUserTimezone,setCurrencyFormats,setUserDateFormat,setUserTimezone,syncTimezoneFromProfile,timeAgo}from"../chunk-S2AZZGFF.js";export{ICON_NAMES,isIconName}from"../chunk-FWOPZB6I.js";export{Icon,activeIconSet,iconSets,iconsVersion,registerIconSet,registerIcons,resolveIcon,setDefaultIconSet,setIconSet,subscribeIcons}from"../chunk-YKZHOXI4.js";
|
package/dist/ui.css
CHANGED
|
@@ -105,6 +105,87 @@
|
|
|
105
105
|
@source not "../docs/**";
|
|
106
106
|
@source not "../.design-sync/**";
|
|
107
107
|
|
|
108
|
+
/*
|
|
109
|
+
* ── Corners: how round the kit is, as part of the theme ─────────────────────
|
|
110
|
+
*
|
|
111
|
+
* ROLE TOKENS. A component does not pick a step of the radius scale for
|
|
112
|
+
* itself; it asks for the radius of what it IS. Four roles, each defaulting to
|
|
113
|
+
* the step that role drew before the tokens existed, so declaring them renders
|
|
114
|
+
* nothing new:
|
|
115
|
+
*
|
|
116
|
+
* --radius-control buttons, fields, the options of a segmented control
|
|
117
|
+
* --radius-card cards, panels, dialogs, a segmented control's track
|
|
118
|
+
* --radius-popup menus and the lists a select opens
|
|
119
|
+
* --radius-window windows and their title bars
|
|
120
|
+
*
|
|
121
|
+
* Pills stay pills (the full-radius utility): a switch, a status badge and an
|
|
122
|
+
* avatar are round at every setting.
|
|
123
|
+
*
|
|
124
|
+
* Plain custom properties, not `@theme` keys, on purpose. A theme key is only
|
|
125
|
+
* emitted when a utility NAMED after it is used, and each of these points at a
|
|
126
|
+
* scale step that may itself not be emitted; a plain property with a literal
|
|
127
|
+
* fallback is defined whatever the consuming build happened to compile. A host
|
|
128
|
+
* restyles one role by setting the property, like any other token.
|
|
129
|
+
*
|
|
130
|
+
* THE SETTING. `data-corners` on <html> (stamped from the `corners` preference
|
|
131
|
+
* by `useTheme` / `applyThemePrefs`, beside `data-theme`) rescales the radius
|
|
132
|
+
* SCALE itself, so the roles follow it and so does every scale utility a
|
|
133
|
+
* portal wrote for itself. "soft" is the absence of the attribute: nothing
|
|
134
|
+
* below applies, and a host's own `@theme` radii still win, exactly as before.
|
|
135
|
+
* Square and round are a person's own choice in Customization, so they beat
|
|
136
|
+
* the host's theme, the way a chosen colour theme does.
|
|
137
|
+
*
|
|
138
|
+
* The bare radius utility is the one thing the scale cannot reach: Tailwind
|
|
139
|
+
* compiles it to a literal 0.25rem, not to a theme variable. It is remapped
|
|
140
|
+
* by class below, in the same way the dark themes remap colour utilities.
|
|
141
|
+
*/
|
|
142
|
+
:root {
|
|
143
|
+
--radius-control: var(--radius-md, 0.375rem);
|
|
144
|
+
--radius-card: var(--radius-lg, 0.5rem);
|
|
145
|
+
--radius-popup: var(--radius-2xl, 1rem);
|
|
146
|
+
--radius-window: var(--radius-2xl, 1rem);
|
|
147
|
+
}
|
|
148
|
+
|
|
149
|
+
:root[data-corners="square"] {
|
|
150
|
+
--radius-xs: 0px;
|
|
151
|
+
--radius-sm: 0px;
|
|
152
|
+
--radius-md: 0px;
|
|
153
|
+
--radius-lg: 0px;
|
|
154
|
+
--radius-xl: 0px;
|
|
155
|
+
--radius-2xl: 0px;
|
|
156
|
+
--radius-3xl: 0px;
|
|
157
|
+
--radius-4xl: 0px;
|
|
158
|
+
--rosh-radius-bare: 0px;
|
|
159
|
+
}
|
|
160
|
+
|
|
161
|
+
:root[data-corners="round"] {
|
|
162
|
+
--radius-xs: 0.25rem;
|
|
163
|
+
--radius-sm: 0.375rem;
|
|
164
|
+
--radius-md: 0.625rem;
|
|
165
|
+
--radius-lg: 0.875rem;
|
|
166
|
+
--radius-xl: 1.125rem;
|
|
167
|
+
--radius-2xl: 1.5rem;
|
|
168
|
+
--radius-3xl: 2rem;
|
|
169
|
+
--radius-4xl: 2.5rem;
|
|
170
|
+
--rosh-radius-bare: 0.375rem;
|
|
171
|
+
}
|
|
172
|
+
|
|
173
|
+
:root:is([data-corners="square"], [data-corners="round"]) .rounded { border-radius: var(--rosh-radius-bare); }
|
|
174
|
+
:root:is([data-corners="square"], [data-corners="round"]) .rounded-t { border-top-left-radius: var(--rosh-radius-bare); border-top-right-radius: var(--rosh-radius-bare); }
|
|
175
|
+
:root:is([data-corners="square"], [data-corners="round"]) .rounded-r { border-top-right-radius: var(--rosh-radius-bare); border-bottom-right-radius: var(--rosh-radius-bare); }
|
|
176
|
+
:root:is([data-corners="square"], [data-corners="round"]) .rounded-b { border-bottom-right-radius: var(--rosh-radius-bare); border-bottom-left-radius: var(--rosh-radius-bare); }
|
|
177
|
+
:root:is([data-corners="square"], [data-corners="round"]) .rounded-l { border-top-left-radius: var(--rosh-radius-bare); border-bottom-left-radius: var(--rosh-radius-bare); }
|
|
178
|
+
:root:is([data-corners="square"], [data-corners="round"]) .rounded-s { border-start-start-radius: var(--rosh-radius-bare); border-end-start-radius: var(--rosh-radius-bare); }
|
|
179
|
+
:root:is([data-corners="square"], [data-corners="round"]) .rounded-e { border-start-end-radius: var(--rosh-radius-bare); border-end-end-radius: var(--rosh-radius-bare); }
|
|
180
|
+
:root:is([data-corners="square"], [data-corners="round"]) .rounded-tl { border-top-left-radius: var(--rosh-radius-bare); }
|
|
181
|
+
:root:is([data-corners="square"], [data-corners="round"]) .rounded-tr { border-top-right-radius: var(--rosh-radius-bare); }
|
|
182
|
+
:root:is([data-corners="square"], [data-corners="round"]) .rounded-br { border-bottom-right-radius: var(--rosh-radius-bare); }
|
|
183
|
+
:root:is([data-corners="square"], [data-corners="round"]) .rounded-bl { border-bottom-left-radius: var(--rosh-radius-bare); }
|
|
184
|
+
:root:is([data-corners="square"], [data-corners="round"]) .rounded-ss { border-start-start-radius: var(--rosh-radius-bare); }
|
|
185
|
+
:root:is([data-corners="square"], [data-corners="round"]) .rounded-se { border-start-end-radius: var(--rosh-radius-bare); }
|
|
186
|
+
:root:is([data-corners="square"], [data-corners="round"]) .rounded-ee { border-end-end-radius: var(--rosh-radius-bare); }
|
|
187
|
+
:root:is([data-corners="square"], [data-corners="round"]) .rounded-es { border-end-start-radius: var(--rosh-radius-bare); }
|
|
188
|
+
|
|
108
189
|
/* The default `utils/glass.ts` already assumes at `getMenuOpacity()`'s
|
|
109
190
|
fallback. Declared here so a ui-only consumer gets identical glass to a shell
|
|
110
191
|
consumer at rest, and has one knob to dial it. <Layout> overrides it inline
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "efficient-shell",
|
|
3
|
-
"version": "4.
|
|
3
|
+
"version": "4.171.0",
|
|
4
4
|
"description": "Desktop-style React UI shell — windows, taskbar, start menu, sticky notes, frosted glass theming, and bundled apps.",
|
|
5
5
|
"license": "UNLICENSED",
|
|
6
6
|
"author": "Efficient Pty Ltd",
|
|
@@ -68,11 +68,34 @@
|
|
|
68
68
|
"import": "./dist/ui/index.js",
|
|
69
69
|
"default": "./dist/ui/index.js"
|
|
70
70
|
},
|
|
71
|
+
"./icons": {
|
|
72
|
+
"types": "./dist/icons/index.d.ts",
|
|
73
|
+
"import": "./dist/icons/index.js",
|
|
74
|
+
"default": "./dist/icons/index.js"
|
|
75
|
+
},
|
|
76
|
+
"./icons/heroicons": {
|
|
77
|
+
"types": "./dist/icons/heroicons.d.ts",
|
|
78
|
+
"import": "./dist/icons/heroicons.js",
|
|
79
|
+
"default": "./dist/icons/heroicons.js"
|
|
80
|
+
},
|
|
81
|
+
"./icons/lucide": {
|
|
82
|
+
"types": "./dist/icons/lucide.d.ts",
|
|
83
|
+
"import": "./dist/icons/lucide.js",
|
|
84
|
+
"default": "./dist/icons/lucide.js"
|
|
85
|
+
},
|
|
86
|
+
"./icons/efficient": {
|
|
87
|
+
"types": "./dist/icons/efficient.d.ts",
|
|
88
|
+
"import": "./dist/icons/efficient.js",
|
|
89
|
+
"default": "./dist/icons/efficient.js"
|
|
90
|
+
},
|
|
71
91
|
"./styles.css": "./dist/styles.css",
|
|
72
92
|
"./ui.css": "./dist/ui.css",
|
|
73
93
|
"./themes.css": "./dist/themes.css",
|
|
74
94
|
"./brand.css": "./dist/brand.css"
|
|
75
95
|
},
|
|
96
|
+
"bin": {
|
|
97
|
+
"efficient-shell-ui-check": "./dist/bin/ui-check.js"
|
|
98
|
+
},
|
|
76
99
|
"files": [
|
|
77
100
|
"dist"
|
|
78
101
|
],
|
|
@@ -82,6 +105,7 @@
|
|
|
82
105
|
"@tanstack/react-query": ">=5",
|
|
83
106
|
"axios": ">=1.6",
|
|
84
107
|
"dxf-viewer": "*",
|
|
108
|
+
"lucide-react": ">=0.577",
|
|
85
109
|
"mammoth": "*",
|
|
86
110
|
"maplibre-gl": ">=6",
|
|
87
111
|
"online-3d-viewer": "*",
|
|
@@ -94,6 +118,7 @@
|
|
|
94
118
|
"remark-breaks": ">=4",
|
|
95
119
|
"remark-gfm": ">=4",
|
|
96
120
|
"tailwindcss": ">=4",
|
|
121
|
+
"typescript": ">=5",
|
|
97
122
|
"xlsx": "*"
|
|
98
123
|
},
|
|
99
124
|
"devDependencies": {
|
|
@@ -109,6 +134,7 @@
|
|
|
109
134
|
"dxf-viewer": "^1.0.47",
|
|
110
135
|
"esbuild": "^0.27.0",
|
|
111
136
|
"jsdom": "^26.1.0",
|
|
137
|
+
"lucide-react": "^1.55.0",
|
|
112
138
|
"mammoth": "^1.8.0",
|
|
113
139
|
"maplibre-gl": "6.11.2",
|
|
114
140
|
"online-3d-viewer": "^0.18.0",
|
|
@@ -128,12 +154,13 @@
|
|
|
128
154
|
"xlsx": "^0.18.5"
|
|
129
155
|
},
|
|
130
156
|
"scripts": {
|
|
131
|
-
"build": "tsup && cp src/*.css dist/ && npm run build:brand",
|
|
157
|
+
"build": "tsup && tsup --config tsup.bin.config.ts && cp src/*.css dist/ && npm run build:brand",
|
|
132
158
|
"dev": "tsup --watch",
|
|
133
159
|
"typecheck": "tsc --noEmit && tsc -p tsconfig.test.json",
|
|
134
160
|
"test": "node scripts/test.mjs",
|
|
135
161
|
"test:browser": "node scripts/test-browser.mjs",
|
|
136
162
|
"screenshot": "node scripts/screenshot.mjs",
|
|
163
|
+
"icons": "node scripts/icons/generate.mjs",
|
|
137
164
|
"clean": "rm -rf dist",
|
|
138
165
|
"build:brand": "tailwindcss -i src/brand.css -o dist/brand.css --minify"
|
|
139
166
|
},
|
|
@@ -165,6 +192,9 @@
|
|
|
165
192
|
"dxf-viewer": {
|
|
166
193
|
"optional": true
|
|
167
194
|
},
|
|
195
|
+
"lucide-react": {
|
|
196
|
+
"optional": true
|
|
197
|
+
},
|
|
168
198
|
"mammoth": {
|
|
169
199
|
"optional": true
|
|
170
200
|
},
|
|
@@ -195,6 +225,9 @@
|
|
|
195
225
|
"tailwindcss": {
|
|
196
226
|
"optional": true
|
|
197
227
|
},
|
|
228
|
+
"typescript": {
|
|
229
|
+
"optional": true
|
|
230
|
+
},
|
|
198
231
|
"xlsx": {
|
|
199
232
|
"optional": true
|
|
200
233
|
}
|