efficient-shell 4.156.1 → 4.159.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (42) hide show
  1. package/README.md +29 -4
  2. package/dist/{Browser-WBZPCS6W.js → Browser-OQCHLKM3.js} +12 -12
  3. package/dist/{Calculator-5DF4PSEG.js → Calculator-YBL65JNM.js} +22 -22
  4. package/dist/{CurrencyConverter-BEI6UUDD.js → CurrencyConverter-6VFY4GF6.js} +7 -7
  5. package/dist/{Documents-5WGBDLTF.js → Documents-IPXRU4CT.js} +5 -5
  6. package/dist/Files-3MGL4ZT7.js +89 -0
  7. package/dist/Notepad-RJ2DYW2O.js +25 -0
  8. package/dist/{PomodoroTimer-3BDFGHC6.js → PomodoroTimer-6OQ33FY3.js} +26 -26
  9. package/dist/{Preview-O52DJFV6.js → Preview-3WRPZWDU.js} +14 -14
  10. package/dist/{Sidebar-H6R3AK5G.js → Sidebar-FUPFF7BT.js} +23 -23
  11. package/dist/{Spreadsheet-7PMGYBO6.js → Spreadsheet-6NK53IZV.js} +13 -13
  12. package/dist/{Stock-PEZB3WXV.js → Stock-ZFLDG6TT.js} +3 -3
  13. package/dist/{Weather-6EJFJQIX.js → Weather-BBPTXGQA.js} +17 -17
  14. package/dist/{WorldClock-5BMGEL2A.js → WorldClock-CQGQ2Y6N.js} +6 -6
  15. package/dist/apps/index.js +1 -1
  16. package/dist/brand.css +1 -1
  17. package/dist/{chunk-ELCH5NDO.js → chunk-CK245P3T.js} +4 -4
  18. package/dist/{chunk-XC64WV33.js → chunk-DLD4AKVT.js} +36 -36
  19. package/dist/{chunk-5DVD4E4P.js → chunk-EI4WZOP3.js} +1 -1
  20. package/dist/chunk-J7AAGG7P.js +942 -0
  21. package/dist/chunk-L4KRS7N3.js +1 -0
  22. package/dist/{chunk-DRN636EP.js → chunk-M4AKWGQM.js} +1 -1
  23. package/dist/chunk-S2AZZGFF.js +1 -0
  24. package/dist/chunk-VNEH2Y6H.js +9 -0
  25. package/dist/{chunk-LGDG4YMF.js → chunk-VRW5JNMR.js} +6 -6
  26. package/dist/{chunk-KAESEFKM.js → chunk-Z3LPT4HB.js} +1 -1
  27. package/dist/format/index.d.ts +1 -0
  28. package/dist/format/index.js +1 -0
  29. package/dist/{index-C-inEe7F.d.ts → index-D0K5U1Pb.d.ts} +80 -49
  30. package/dist/index-DCUzlKPZ.d.ts +194 -0
  31. package/dist/index.d.ts +3 -2
  32. package/dist/index.js +645 -645
  33. package/dist/page-tabs/index.js +5 -5
  34. package/dist/ui/index.d.ts +2 -1
  35. package/dist/ui/index.js +1 -1
  36. package/dist/ui.css +7 -0
  37. package/package.json +6 -1
  38. package/dist/Files-62DPJ4NN.js +0 -89
  39. package/dist/Notepad-U67M72JS.js +0 -25
  40. package/dist/chunk-ESXQJ7YI.js +0 -934
  41. package/dist/chunk-J7LKJIZC.js +0 -9
  42. package/dist/chunk-O5BOGWO3.js +0 -1
@@ -0,0 +1 @@
1
+ var r="4.159.0",a=r;export{a as APP_VERSION,r as VERSION};
@@ -1,4 +1,4 @@
1
- import{Modal as e}from"./chunk-XC64WV33.js";import{keepsNativeMenu as a}from"./chunk-J7LKJIZC.js";import{jsx as i,jsxs as n}from"react/jsx-runtime";var t={activeOpacity:70,inactiveOpacity:50,activeBlur:0,inactiveBlur:0};function r(e){try{const a=JSON.parse(localStorage.getItem(e)||"");return null!=a.blur&&null==a.activeBlur&&(a.activeBlur=a.blur,a.inactiveBlur=a.blur,delete a.blur),{...t,...a}}catch{return t}}function l({open:t,onClose:r,title:l,appearance:c,onAppearanceChange:s,onSave:d,children:o}){if(!t)return null;const u="w-full h-1.5 rounded-full appearance-none bg-gray-200 cursor-pointer accent-blue-500",p="flex items-center justify-between text-xs text-gray-500";/* @__PURE__ */
1
+ import{Modal as e}from"./chunk-DLD4AKVT.js";import{keepsNativeMenu as a}from"./chunk-VNEH2Y6H.js";import{jsx as i,jsxs as n}from"react/jsx-runtime";var t={activeOpacity:70,inactiveOpacity:50,activeBlur:0,inactiveBlur:0};function r(e){try{const a=JSON.parse(localStorage.getItem(e)||"");return null!=a.blur&&null==a.activeBlur&&(a.activeBlur=a.blur,a.inactiveBlur=a.blur,delete a.blur),{...t,...a}}catch{return t}}function l({open:t,onClose:r,title:l,appearance:c,onAppearanceChange:s,onSave:d,children:o}){if(!t)return null;const u="w-full h-1.5 rounded-full appearance-none bg-gray-200 cursor-pointer accent-blue-500",p="flex items-center justify-between text-xs text-gray-500";/* @__PURE__ */
2
2
  return i("div",{onPointerDown:e=>e.stopPropagation(),onContextMenu:e=>{e.stopPropagation(),a(e.target)||e.preventDefault()},children:/* @__PURE__ */i(e,{open:t,onClose:r,title:l,size:"sm",children:/* @__PURE__ */n("div",{className:"space-y-4",children:[o,
3
3
  /* @__PURE__ */n("div",{children:[
4
4
  /* @__PURE__ */i("h3",{className:"text-sm font-semibold text-gray-700 mb-3",children:"Appearance"}),
@@ -0,0 +1 @@
1
+ var e="—",t=[{key:"DD/MM/YYYY",example:"24/04/2026"},{key:"MM/DD/YYYY",example:"04/24/2026"},{key:"YYYY-MM-DD",example:"2026-04-24"},{key:"DD-MM-YYYY",example:"24-04-2026"},{key:"MM-DD-YYYY",example:"04-24-2026"},{key:"DD.MM.YYYY",example:"24.04.2026"},{key:"YYYY.MM.DD",example:"2026.04.24"},{key:"YYYY/MM/DD",example:"2026/04/24"},{key:"DD/MM/YY",example:"24/04/26"},{key:"MM/DD/YY",example:"04/24/26"},{key:"DD/MMM/YYYY",example:"24/Apr/2026"},{key:"DD/MMM/YY",example:"24/Apr/26"},{key:"DD MMM YYYY",example:"24 Apr 2026"},{key:"MMM DD, YYYY",example:"Apr 24, 2026"},{key:"DD MMMM YYYY",example:"24 April 2026"},{key:"MMMM DD, YYYY",example:"April 24, 2026"}],r=["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],n=["January","February","March","April","May","June","July","August","September","October","November","December"];function o(e){return r[parseInt(e,10)-1]??e}function a(e){return n[parseInt(e,10)-1]??e}function u(){if("undefined"==typeof window)return"DD/MM/YYYY";try{return localStorage.getItem("user_date_format")||"DD/MM/YYYY"}catch{return"DD/MM/YYYY"}}function i(e){localStorage.setItem("user_date_format",e)}var Y="user_timezone",c="auto";function m(){if("undefined"!=typeof window)try{const e=localStorage.getItem(Y);return e&&e!==c?e:void 0}catch{return}}function s(e){e&&e!==c?localStorage.setItem(Y,e):localStorage.removeItem(Y)}function M(e){e&&localStorage.setItem(Y,e)}var l={dateStyle:"medium"},D=/* @__PURE__ */new Map;function f(e,t){const r=`${e}|${JSON.stringify(t)}`;let n=D.get(r);return n||(n=new Intl.DateTimeFormat(e,{...t,timeZone:"UTC",calendar:"gregory"}),D.set(r,n)),n}var $=/* @__PURE__ */new Map;function y(e,t){const r=function(e){const t=e??"";let r=$.get(t);if(!r){const n={year:"numeric",month:"2-digit",day:"2-digit",hour:"2-digit",minute:"2-digit",hourCycle:"h23",calendar:"gregory"};try{r=new Intl.DateTimeFormat("en-GB",{...n,timeZone:e})}catch{r=new Intl.DateTimeFormat("en-GB",n)}$.set(t,r)}return r}(t).formatToParts(e),n=e=>r.find(t=>t.type===e)?.value??"";return{y:n("year"),m:n("month"),d:n("day"),hh:n("hour"),mm:n("minute")}}var d=/^(\d{4})-(\d{1,2})-(\d{1,2})$/;function g(t,r){const n=function(e,t){if(!e)return null;const r=d.exec(e);if(r){const[e,t,n]=r.slice(1).map(Number);return t<1||t>12||n<1||n>31?null:{y:String(e),m:String(t).padStart(2,"0"),d:String(n).padStart(2,"0")}}const n=new Date(e);return Number.isNaN(n.getTime())?null:y(n,t)}(t,r?.timeZone||m());return n?r?.locale?f(r.locale,r.style??l).format(new Date(Date.UTC(Number(n.y),Number(n.m)-1,Number(n.d)))):function(e,t,r){switch(u()){case"MM/DD/YYYY":return`${t}/${r}/${e}`;case"YYYY-MM-DD":return`${e}-${t}-${r}`;case"DD-MM-YYYY":return`${r}-${t}-${e}`;case"MM-DD-YYYY":return`${t}-${r}-${e}`;case"DD.MM.YYYY":return`${r}.${t}.${e}`;case"YYYY.MM.DD":return`${e}.${t}.${r}`;case"YYYY/MM/DD":return`${e}/${t}/${r}`;case"DD/MM/YY":return`${r}/${t}/${e.slice(-2)}`;case"MM/DD/YY":return`${t}/${r}/${e.slice(-2)}`;case"DD/MMM/YYYY":return`${r}/${o(t)}/${e}`;case"DD/MMM/YY":return`${r}/${o(t)}/${e.slice(-2)}`;case"DD MMM YYYY":return`${r} ${o(t)} ${e}`;case"MMM DD, YYYY":return`${o(t)} ${r}, ${e}`;case"DD MMMM YYYY":return`${r} ${a(t)} ${e}`;case"MMMM DD, YYYY":return`${a(t)} ${r}, ${e}`;default:return`${r}/${t}/${e}`}}(n.y,n.m,n.d):e}function h(t,r){if(!t||d.test(t))return e;const n=new Date(t);if(Number.isNaN(n.getTime()))return e;const o=r?.timeZone||m();if(r?.locale)return function(e,t,r){const n={hour:"numeric",minute:"2-digit"};try{return e.toLocaleTimeString(t,{...n,timeZone:r})}catch{return e.toLocaleTimeString(t,n)}}(n,r.locale,o);const{hh:a,mm:u}=y(n,o);return function(e,t){const r=Number(e);return`${r%12||12}:${t} ${r<12?"am":"pm"}`}(a,u)}function p(t,r){const n=h(t,r);return n===e?e:`${g(t,r)}, ${n}`}var w={months:n,monthsShort:r,weekdays:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],weekdaysShort:["Su","Mo","Tu","We","Th","Fr","Sa"],monthYear:(e,t)=>`${n[t]} ${e}`,shortMonthYear:(e,t)=>`${r[t]} ${e}`,longDate:(e,t,r)=>`${r} ${n[t]} ${e}`},S=/* @__PURE__ */new Map;function k(e){if(!e)return w;const t=S.get(e);if(t)return t;const r=t=>f(e,t),n=(e,t,r=1)=>new Date(Date.UTC(e,t,r)),o=r({month:"long"}),a=r({month:"short"}),u=r({weekday:"long"}),i=r({weekday:"short"}),Y=r({month:"long",year:"numeric"}),c=r({month:"short",year:"numeric"}),m=r({day:"numeric",month:"long",year:"numeric"}),s=Array.from({length:12},(e,t)=>t),M=Array.from({length:7},(e,t)=>t),l={months:s.map(e=>o.format(n(2e3,e))),monthsShort:s.map(e=>a.format(n(2e3,e))),weekdays:M.map(e=>u.format(n(2e3,0,2+e))),weekdaysShort:M.map(e=>i.format(n(2e3,0,2+e))),monthYear:(e,t)=>Y.format(n(e,t)),shortMonthYear:(e,t)=>c.format(n(e,t)),longDate:(e,t,r)=>m.format(n(e,t,r))};return S.set(e,l),l}var b=/* @__PURE__ */new Map;function x(e){if(!e)return 0;let t=b.get(e);if(void 0===t){t=0;try{const r=new Intl.Locale(e),n="function"==typeof r.getWeekInfo?r.getWeekInfo():r.weekInfo;1===n?.firstDay&&(t=1)}catch{}b.set(e,t)}return t}var N=6e4,T=36e5,v=24*T;function I(e){if(null==e||""===e)return null;const t=e instanceof Date?e:new Date(e);return Number.isNaN(t.getTime())?null:t}function A(t,r){const n=I(t);if(!n)return e;const o=Date.now()-n.getTime();return o<0?"just now":o<N?r?.precise&&o>=1e3?`${Math.floor(o/1e3)}s ago`:"just now":o<T?`${Math.floor(o/N)}m ago`:o<v?`${Math.floor(o/T)}h ago`:o<7*v?`${Math.floor(o/v)}d ago`:g(n.toISOString())}var F=null;function B(e){if(!e)return void(F=null);const t={};for(const[r,n]of Object.entries(e))t[r.toUpperCase()]=n;F=t}function C(e){const t=e.toUpperCase();return F?.[t]?.symbol||t}function J(e){return e?F?.[e.toUpperCase()]?.decimals??2:2}function U(t,r,n){if(null==t||""===t)return e;const o="string"==typeof t?Number(t):t;if(!Number.isFinite(o))return e;const a=n?.whole?0:J(r),u=Math.abs(o).toLocaleString("en-US",{minimumFractionDigits:a,maximumFractionDigits:a}),i=o<0&&/[1-9]/.test(u)?"-":"";if(!r)return`${i}${u}`;const Y=C(r);return`${i}${/^[A-Za-z]+$/.test(Y)?`${Y} `:Y}${u}`}var Z=["KB","MB","GB","TB"];function O(t){if(null==t||!Number.isFinite(t)||t<0)return e;if(t<1024)return`${Math.round(t)} B`;let r=t/1024,n=0;for(;n<Z.length-1&&Number(r.toFixed(1))>=1024;)r/=1024,n++;return`${r.toFixed(1)} ${Z[n]}`}export{t as DATE_FORMAT_OPTIONS,e as EMPTY_VALUE,c as TZ_AUTO,k as calendarNames,J as currencyDecimals,C as currencySymbol,x as firstDayOfWeek,O as formatBytes,g as formatDate,p as formatDateTime,U as formatMoney,h as formatTime,u as getUserDateFormat,m as getUserTimezone,B as setCurrencyFormats,i as setUserDateFormat,s as setUserTimezone,M as syncTimezoneFromProfile,A as timeAgo,I as toInstant};
@@ -0,0 +1,9 @@
1
+ import{onOverlayOpen as e,Z_LAYERS as t,registerModalEscapeInterceptor as n}from"./chunk-OSJ3ADF2.js";import{rootIsDark as r}from"./chunk-MAIHBBWT.js";import{useHydrated as o,useBrowserLayoutEffect as i}from"./chunk-D65T4H6J.js";import{createContext as a,forwardRef as s,useContext as l,useRef as u,useId as c,useState as d,useEffect as p,useMemo as m,useCallback as h}from"react";import{createPortal as f}from"react-dom";import{jsx as g,jsxs as y,Fragment as b}from"react/jsx-runtime";function x(){try{const e=getComputedStyle(document.documentElement).getPropertyValue("--menu-opacity")?.trim();if(e)return parseFloat(e)}catch{}return.95}var w=r;function v(){try{return document.documentElement.classList.contains("rosh-reduce-transparency")}catch{return!1}}function k(e,t){return`color-mix(in srgb, ${e} ${+(Math.round(255*Math.min(1,Math.max(0,t)))/255*100).toFixed(4)}%, transparent)`}function C(e,t={}){const n=e??x();if(v()&&"light"===t.ink)return{background:"var(--rosh-glass-light-ink-surface)",border:"1px solid var(--rosh-glass-light-ink-solid-border)",boxShadow:"var(--rosh-glass-solid-shadow)"};if(v())return{background:"var(--rosh-glass-surface)",border:"1px solid var(--rosh-glass-solid-border)",boxShadow:"var(--rosh-glass-solid-shadow)"};const r="var(--rosh-glass-surface)",o="var(--rosh-glass-surface-mid)";return w()?{background:`linear-gradient(135deg in srgb, ${k(r,.85*n)} 0%, ${k(o,.75*n)} 50%, ${k(r,.85*n)} 100%)`,backdropFilter:"blur(40px) saturate(1.6)",WebkitBackdropFilter:"blur(40px) saturate(1.6)",border:"1px solid var(--rosh-glass-border)",boxShadow:"var(--rosh-glass-shadow)"}:{background:`linear-gradient(135deg in srgb, ${k(r,.85*n)} 0%, ${k(o,.65*n)} 50%, ${k(r,.75*n)} 100%)`,backdropFilter:"blur(40px) saturate(1.8)",WebkitBackdropFilter:"blur(40px) saturate(1.8)",border:"1px solid var(--rosh-glass-border)",boxShadow:"var(--rosh-glass-shadow)"}}function $(e){return v()?"var(--rosh-glass-surface)":k("var(--rosh-glass-surface)",.85*(e??x()))}var M="border-white/20",N="glass-input-bg",L=/* @__PURE__ */new Set(["text","search","url","tel","email","password","number","date","datetime-local","month","week","time"]),B="data-native-context-menu";function E(e,t){return e&&"function"==typeof e.closest?e.closest(t):null}function T(e){const t=e;if(!t||"function"!=typeof t.closest)return!1;if(E(t,`[${B}]`))return!0;if(E(t,"textarea"))return!0;if(E(t,"img, picture, canvas, video, audio"))return!0;const n=E(t,"input");if(n){const e=(n.type||"text").toLowerCase();if(L.has(e))return!0}const r=E(t,"[contenteditable]");if(r){const e=(r.getAttribute("contenteditable")||"").toLowerCase();if(""===e||"true"===e||"plaintext-only"===e)return!0}return!1}var W=/* @__PURE__ */new Set(["http:","https:","mailto:","tel:","blob:"]);function A(e,t,n){const r=E(e,"a[href]"),o=(t||"").trim(),i=function(e,t){if(e&&"#"!==e)try{const n=new URL(e,t??("undefined"!=typeof document?document.baseURI:void 0));return W.has(n.protocol)?n.href:void 0}catch{return}}(r?.getAttribute("href"),n);return{kind:o?"selection":i?"link":"default",...o?{selectionText:o}:{},...i?{linkUrl:i}:{}}}function F(e,t,n){return e.length===t+1&&e[t].key===n.key?e:[...e.slice(0,t),n]}function S(e,t){const n=Math.max(0,t);return e.length>n?e.slice(0,n):e}function R(e,t,n){if(0===t.length||0===e.length)return[];const r=[e];for(let e=1;e<t.length;e++){const o=r[e-1].find(n=>n.to===t[e].key),i=o?n(o):[];if(0===i.length)break;r.push(i)}return r}function D(e,t,n,r){const o=Math.max(0,r-n),i=Math.min(t,o),a=e-i/2;return a<n?n:a+i>r?Math.max(n,r-i):a}function H(e,t,n,r,o,i=!1,a=8){const s=t+o,l=e-o-n,u=l>=a;return i&&u?{left:l,flipped:!0}:s+n<=r-a?{left:s,flipped:!1}:u?{left:l,flipped:!0}:i?{left:a,flipped:!0}:{left:Math.max(a,r-a-n),flipped:!1}}function P(){try{return getComputedStyle(document.documentElement).getPropertyValue("--menu-density")?.trim()||"normal"}catch{return"normal"}}var I=a(null);function j({children:n,style:r,className:i="",onClose:a,minWidth:s=180,portal:l=!1}){const h=u(null),y=c(),[b,x]=d([]),w=u();p(()=>()=>clearTimeout(w.current),[]);const v=o(),k=m(()=>{const e=()=>clearTimeout(w.current);return{id:y,depth:0,path:b,open:(t,n)=>{e(),x(e=>F(e,t,n))},scheduleClose:t=>{e(),w.current=setTimeout(()=>x(e=>S(e,t)),200)},closeBelow:t=>{e(),x(e=>S(e,t))},cancelClose:e,closeTree:()=>{e(),x([]),a?.()},root:h}},[y,b,a]);p(()=>{if(!a)return;const t=e=>{e.target.closest("[data-menu-toggle]")||e.target.closest?.(`[data-popup-menu-tree="${y}"]`)||h.current&&!h.current.contains(e.target)&&a()},n=e=>{"Escape"===e.key&&a()};window.addEventListener("pointerdown",t),window.addEventListener("keydown",n);const r=e(a);return()=>{window.removeEventListener("pointerdown",t),window.removeEventListener("keydown",n),r()}},[a,y]),p(()=>{const e=h.current;e&&requestAnimationFrame(()=>{const t=e.getBoundingClientRect();if(t.right>window.innerWidth-8){const n=t.right-window.innerWidth+8;e.style.left?e.style.left=parseFloat(e.style.left)-n+"px":e.style.right||(e.style.left=t.left-n+"px")}if(t.left<8&&(e.style.left?e.style.left="8px":e.style.right&&(e.style.right=window.innerWidth-t.width-8+"px")),t.bottom>window.innerHeight-8){const n=t.bottom-window.innerHeight+8;e.style.top?e.style.top=parseFloat(e.style.top)-n+"px":e.style.bottom?e.style.bottom="8px":e.style.top=t.top-n+"px"}t.top<8&&(e.style.top?e.style.top="8px":e.style.bottom&&(e.style.bottom=window.innerHeight-t.height-8+"px"))})});const $=P(),M=/(^|[\s:])!?z-/.test(i),N=/* @__PURE__ */g("div",{ref:h,"data-popup-menu-tree":y,className:`fixed rounded-2xl ${"tight"===$?"py-1":"large"===$?"py-2":"py-1.5"} ${i}`,onContextMenu:e=>{T(e.target)||e.preventDefault()},style:{...M?{}:{zIndex:t.menu},minWidth:s,animation:"popup-in 0.12s ease-out",...C(),...r},children:/* @__PURE__ */g(I.Provider,{value:k,children:n})});return l?v?f(N,document.body):null:N}function z(e,t,n,r=!1){const o=P(),i="tight"===o?"0.25rem":"large"===o?"0.6rem":"max(0.25rem, calc(var(--menu-padding-y, 0.5rem) - 0.1rem))";return{className:`w-full flex items-center gap-2 text-left transition-colors rounded-lg mx-auto\n ${e?"text-red-600 hover:bg-red-50":r?"bg-blue-50 text-blue-700":"text-gray-700 hover:bg-blue-50 hover:text-blue-700"}\n ${t?"opacity-40 cursor-not-allowed":""}\n ${n}`,style:{width:"calc(100% - 8px)",marginLeft:4,marginRight:4,fontSize:"var(--menu-font-size, 14px)",paddingLeft:"var(--menu-padding-x, 1rem)",paddingRight:"var(--menu-padding-x, 1rem)",paddingTop:i,paddingBottom:i}}}var q=s(function({onClick:e,children:t,className:n="",danger:r,disabled:o,role:i,tabIndex:a,id:s,onMouseEnter:u},c){const d=l(I),p=z(r,o,n);/* @__PURE__ */
2
+ return g("button",{ref:c,id:s,role:i,tabIndex:a,onClick:()=>{e?.(),d&&d.depth>0&&d.closeTree()},onMouseEnter:()=>{d?.scheduleClose(d.depth),u?.()},disabled:o,className:p.className,style:p.style,children:t})}),U=/* @__PURE__ */g("svg",{"aria-hidden":!0,className:"h-3.5 w-3.5 shrink-0 ml-auto text-gray-500",fill:"none",viewBox:"0 0 24 24",stroke:"currentColor",strokeWidth:2,children:/* @__PURE__ */g("path",{strokeLinecap:"round",strokeLinejoin:"round",d:"M8.25 4.5l7.5 7.5-7.5 7.5"})});function J(e){let n=t.menu;for(let t=e;t&&t!==document.body;t=t.parentElement){const e=parseInt(getComputedStyle(t).zIndex,10);Number.isNaN(e)||(n=e)}return n}function K(e){return e?[...e.querySelectorAll("button:not([disabled])")].filter(t=>t.closest("[data-popup-submenu-panel]")===e):[]}function O({label:e,icon:t,children:r,disabled:o,className:a="",minWidth:s=180,maxHeight:d}){const x=l(I),w=c(),v=u(null),k=u(null),$=u(),M=u(!1),N=`${w}-menu`;p(()=>()=>clearTimeout($.current),[]);const L=x?.depth??0,B=x?.path[L],E=!!B&&B.key===w&&!o,W=h(e=>{if(!x||o||!v.current)return;clearTimeout($.current),M.current=e;const t=v.current.getBoundingClientRect(),n=v.current.closest("[data-popup-submenu-panel]")??v.current.closest("[data-popup-menu-tree]"),r=n?.getBoundingClientRect()??t,i=L>0&&(x.path[L-1]?.flipped??!1),a=H(r.left,r.right,s,window.innerWidth,4,i);x.open(L,{key:w,y:t.top,...a})},[x,o,L,w,s]),A=e=>{x?.closeBelow(L),v.current?.focus()};p(()=>{if(E)return n(e=>"Escape"===e.key&&(!(x&&x.path.length>L+1)&&(A(),!0)))}),i(()=>{if(!E||!B)return;const e=()=>{const e=k.current;if(!e||!v.current)return;const t=v.current.closest("[data-popup-submenu-panel]")??v.current.closest("[data-popup-menu-tree]"),n=t?.getBoundingClientRect()??v.current.getBoundingClientRect(),r=L>0&&(x?.path[L-1]?.flipped??!1),o=e.offsetWidth||s,i=H(n.left,n.right,o,window.innerWidth,4,r,8),a=e.offsetHeight,l=D(v.current.getBoundingClientRect().top+a/2,a,8,window.innerHeight-8);e.style.left=`${i.left}px`,e.style.top=`${l}px`,e.dataset.flipped=String(i.flipped)};e();let t=0;const n=requestAnimationFrame(()=>{t=requestAnimationFrame(e)});return()=>{cancelAnimationFrame(n),cancelAnimationFrame(t)}}),p(()=>{E&&M.current&&(M.current=!1,K(k.current)[0]?.focus())},[E]);const F=m(()=>x&&{...x,depth:L+1},[x,L]);if(!x)throw new Error("PopupSubmenu must be rendered inside a PopupMenu");const S=z(!1,o,a,E),R=P();/* @__PURE__ */
3
+ return y(b,{children:[
4
+ /* @__PURE__ */y("button",{ref:v,type:"button",role:"menuitem","aria-haspopup":"menu","aria-expanded":E,"aria-controls":E?N:void 0,disabled:o,"data-popup-submenu-row":!0,className:S.className,style:S.style,onClick:e=>{const t=0===e.detail;E?t&&K(k.current)[0]?.focus():W(t)},onKeyDown:e=>{"ArrowRight"===e.key&&(e.preventDefault(),e.stopPropagation(),W(!0))},onMouseEnter:()=>{o||(x.cancelClose(),E?x.closeBelow(L+1):(clearTimeout($.current),$.current=setTimeout(()=>W(!1),120)))},onMouseLeave:()=>{clearTimeout($.current),x.scheduleClose(L)},children:[t,
5
+ /* @__PURE__ */g("span",{className:"min-w-0 flex-1 truncate",children:e}),U]}),E&&f(
6
+ /* @__PURE__ */g("div",{ref:k,id:N,role:"menu","data-popup-menu-tree":x.id,"data-popup-submenu-panel":!0,className:"fixed rounded-2xl overflow-x-hidden overflow-y-auto overscroll-contain "+("tight"===R?"py-1":"large"===R?"py-2":"py-1.5"),style:{left:B.left,top:B.y,minWidth:s,maxHeight:void 0===d?"calc(100vh - 16px)":`min(${"number"==typeof d?`${d}px`:d}, calc(100vh - 16px))`,zIndex:J(x.root.current)+L+1,animation:(B.flipped?"popup-submenu-in-left":"popup-submenu-in")+" 0.1s ease-out",...C()},onKeyDown:e=>{if(e.target.closest("[data-popup-submenu-panel]")!==e.currentTarget)return;const t=K(k.current),n=t.indexOf(document.activeElement),r=n=>{e.preventDefault(),e.stopPropagation(),t[(n+t.length)%t.length]?.focus()};"ArrowDown"===e.key?r(n+1):"ArrowUp"===e.key?r(n<0?t.length-1:n-1):"Home"===e.key?r(0):"End"===e.key?r(t.length-1):"ArrowLeft"===e.key&&(e.preventDefault(),e.stopPropagation(),A())},onMouseEnter:()=>{x.cancelClose(),clearTimeout($.current)},onMouseLeave:()=>x.scheduleClose(L+1),onContextMenu:e=>{T(e.target)||e.preventDefault()},children:/* @__PURE__ */g(I.Provider,{value:F,children:r})}),document.body)]})}function V(){const e=P();/* @__PURE__ */
7
+ return g("div",{className:`border-t ${M} ${"tight"===e?"my-0.5":"large"===e?"my-1.5":"my-1"} mx-3`})}function G({children:e}){const t=P(),n="tight"===t?"0.125rem":"large"===t?"0.375rem":"0.25rem";/* @__PURE__ */
8
+ return g("div",{className:"text-xs font-medium uppercase tracking-wide",style:{color:"var(--ink-muted)",paddingLeft:"var(--menu-padding-x, 1rem)",paddingRight:"var(--menu-padding-x, 1rem)",paddingTop:n,paddingBottom:n},children:e})}function Q({d:e,className:t="h-4 w-4 text-gray-400"}){/* @__PURE__ */
9
+ return g("svg",{className:t,fill:"none",viewBox:"0 0 24 24",stroke:"currentColor",strokeWidth:1.5,children:/* @__PURE__ */g("path",{strokeLinecap:"round",strokeLinejoin:"round",d:e})})}export{M as GLASS_DIVIDER,N as GLASS_INPUT_BG,Q as MenuIcon,B as NATIVE_MENU_ATTR,j as PopupMenu,V as PopupMenuDivider,q as PopupMenuItem,G as PopupMenuLabel,O as PopupSubmenu,D as clampMenuTop,S as closeMenuBelow,A as describeContextTarget,$ as glassFill,C as glassStyle,z as itemLook,T as keepsNativeMenu,H as menuPanelLeft,F as openMenuLevel,R as resolveMenuLevels};
@@ -1,5 +1,5 @@
1
- import{PopupMenu as e,PopupMenuItem as r,PopupMenuDivider as n}from"./chunk-J7LKJIZC.js";import{useShellStrings as t}from"./chunk-VVI77XNV.js";import{useState as l,useEffect as i,Fragment as a}from"react";import{jsxs as o,jsx as s}from"react/jsx-runtime";var d="outline-none focus-visible:ring-2 focus-visible:ring-inset focus-visible:ring-blue-500";function c(){/* @__PURE__ */
2
- return s("svg",{viewBox:"0 0 20 20",fill:"currentColor","aria-hidden":"true",className:"size-3.5",children:/* @__PURE__ */s("path",{d:"M6.28 5.22a.75.75 0 00-1.06 1.06L8.94 10l-3.72 3.72a.75.75 0 101.06 1.06L10 11.06l3.72 3.72a.75.75 0 101.06-1.06L11.06 10l3.72-3.72a.75.75 0 00-1.06-1.06L10 8.94 6.28 5.22z"})})}function m({tabs:m,activeKey:u,idFor:h,panelMounted:y,onActivate:p,onClose:f,onCloseMany:g,label:x,className:b,activeClassName:k,end:v}){const w=t().pageTabs,[N,C]=l(null),$=m.length;i(()=>{if(!u)return;const e=document.getElementById(h(u,"tab"));e?.scrollIntoView?.({block:"nearest",inline:"nearest"})},[h,u,$]);const j=m.some(e=>e.key===u)?u:m[0]?.key,z=e=>{const r=m[(e+m.length)%m.length];r&&document.getElementById(h(r.key,"tab"))?.focus()},I=N?m.find(e=>e.key===N.key):void 0,D=I?m.indexOf(I):-1,L=e=>e.some(e=>!e.pinned),A=e=>()=>{C(null),e()};/* @__PURE__ */
1
+ import{PopupMenu as e,PopupMenuItem as r,PopupMenuDivider as n}from"./chunk-VNEH2Y6H.js";import{useShellStrings as t}from"./chunk-VVI77XNV.js";import{useState as l,useEffect as i,Fragment as a}from"react";import{jsxs as o,jsx as s}from"react/jsx-runtime";var d="outline-none focus-visible:ring-2 focus-visible:ring-inset focus-visible:ring-blue-500";function c(){/* @__PURE__ */
2
+ return s("svg",{viewBox:"0 0 20 20",fill:"currentColor","aria-hidden":"true",className:"size-3.5",children:/* @__PURE__ */s("path",{d:"M6.28 5.22a.75.75 0 00-1.06 1.06L8.94 10l-3.72 3.72a.75.75 0 101.06 1.06L10 11.06l3.72 3.72a.75.75 0 101.06-1.06L11.06 10l3.72-3.72a.75.75 0 00-1.06-1.06L10 8.94 6.28 5.22z"})})}function m({tabs:m,activeKey:u,idFor:h,panelMounted:y,onActivate:p,onClose:f,onCloseMany:g,label:x,className:b,activeClassName:k,end:v}){const w=t().pageTabs,[N,C]=l(null),$=m.length;i(()=>{if(!u)return;const e=document.getElementById(h(u,"tab"));e?.scrollIntoView?.({block:"nearest",inline:"nearest"})},[h,u,$]);const j=m.some(e=>e.key===u)?u:m[0]?.key,z=e=>{const r=m[(e+m.length)%m.length];r&&document.getElementById(h(r.key,"tab"))?.focus()},I=N?m.find(e=>e.key===N.key):void 0,D=I?m.indexOf(I):-1,A=e=>e.some(e=>!e.pinned),E=e=>()=>{C(null),e()};/* @__PURE__ */
3
3
  return o("div",{className:b??"relative flex h-10 shrink-0 items-end gap-3 bg-gray-100 px-3",children:[
4
4
  /* @__PURE__ */s("div",{"aria-hidden":"true",className:"pointer-events-none absolute inset-x-0 bottom-0 h-px bg-gray-200"}),
5
5
  /* @__PURE__ */s("div",{role:"tablist","aria-label":x,onKeyDown:e=>{const r=m.findIndex(r=>document.getElementById(h(r.key,"tab"))===e.target);if(!(r<0)){if("ArrowRight"===e.key)z(r+1);else if("ArrowLeft"===e.key)z(r-1);else if("Home"===e.key)z(0);else if("End"===e.key)z(m.length-1);else{if("Delete"!==e.key||m[r].pinned)return;f(m[r].key)}e.preventDefault()}},className:"flex min-w-0 flex-1 items-end overflow-x-auto overflow-y-hidden [scrollbar-width:none] [&::-webkit-scrollbar]:hidden",children:m.map((e,r)=>{const n=e.key===u,t=!!e.dirty,l=e.icon,i=n?k??"z-[1] border-gray-200 bg-gray-50 text-gray-900":"border-transparent text-gray-600 hover:bg-gray-200/70 hover:text-gray-900",g=r>0&&!n&&m[r-1].key!==u,x={type:"button",role:"tab",id:h(e.key,"tab"),"aria-selected":n,"aria-controls":y?.(e.key)?h(e.key,"panel"):void 0,tabIndex:e.key===j?0:-1,title:e.title,onClick:()=>p(e.key)},b={onContextMenu:r=>((e,r)=>{e.preventDefault(),C({x:e.clientX,y:e.clientY,key:r.key})})(r,e),onAuxClick:r=>((e,r)=>{1!==e.button||r.pinned||(e.preventDefault(),f(r.key))})(r,e),onMouseDown:e=>{1===e.button&&e.preventDefault()}},v=l&&
@@ -11,8 +11,8 @@ return o("div",{className:b??"relative flex h-10 shrink-0 items-end gap-3 bg-gra
11
11
  /* @__PURE__ */s("span",{className:"min-w-0 flex-1 overflow-hidden whitespace-nowrap [mask-image:linear-gradient(to_right,#000_calc(100%-1rem),transparent)] "+(l?n?"@max-[5rem]:sr-only":"@max-[4.5rem]:sr-only":""),children:e.title})]}),
12
12
  /* @__PURE__ */o("span",{className:"mr-1.5 flex size-5 shrink-0 items-center justify-center "+(n?"":"@max-[6.5rem]:hidden @max-[6.5rem]:group-hover:flex"),children:[t&&/* @__PURE__ */s("span",{role:"img","aria-label":w.unsaved,className:"size-2 rounded-full bg-gray-500 group-hover:hidden"}),
13
13
  /* @__PURE__ */s("button",{type:"button",tabIndex:-1,"aria-label":w.closeTab?.(e.title)??`${w.close} ${e.title}`,onClick:()=>f(e.key),className:"size-5 items-center justify-center rounded text-gray-400 hover:bg-gray-200 hover:text-gray-700 "+(t?"hidden group-hover:flex":n?"flex":"flex opacity-0 group-hover:opacity-100 focus-visible:opacity-100"),children:/* @__PURE__ */s(c,{})})]})]})]},e.key)})}),v&&/* @__PURE__ */s("div",{className:"flex shrink-0 items-center gap-2 self-center",children:v}),N&&I&&/* @__PURE__ */o(e,{portal:!0,style:{left:N.x,top:N.y},onClose:()=>C(null),children:[
14
- /* @__PURE__ */s(r,{disabled:I.pinned,onClick:A(()=>f(I.key)),children:w.close}),
14
+ /* @__PURE__ */s(r,{disabled:I.pinned,onClick:E(()=>f(I.key)),children:w.close}),
15
15
  /* @__PURE__ */s(n,{}),
16
- /* @__PURE__ */s(r,{disabled:!L(m.filter(e=>e.key!==I.key)),onClick:A(()=>g("others",I.key)),children:w.closeOthers}),
17
- /* @__PURE__ */s(r,{disabled:!L(m.slice(D+1)),onClick:A(()=>g("right",I.key)),children:w.closeRight}),
18
- /* @__PURE__ */s(r,{disabled:!L(m),onClick:A(()=>g("all",null)),children:w.closeAll})]})]})}export{m as TabStrip};
16
+ /* @__PURE__ */s(r,{disabled:!A(m.filter(e=>e.key!==I.key)),onClick:E(()=>g("others",I.key)),children:w.closeOthers}),
17
+ /* @__PURE__ */s(r,{disabled:!A(m.slice(D+1)),onClick:E(()=>g("right",I.key)),children:w.closeRight}),
18
+ /* @__PURE__ */s(r,{disabled:!A(m),onClick:E(()=>g("all",null)),children:w.closeAll})]})]})}export{m as TabStrip};
@@ -1 +1 @@
1
- import{client_default as a}from"./chunk-XC64WV33.js";var e=()=>a.get("/auth/numbering-configs/").then(a=>a.data?.results??a.data??[]),t="uploaded:wallpaper";function r(a,e){return"string"!=typeof a||!a||"none"===a||a.startsWith("#")?"":a===t?e||"":a}var p=()=>a.get("/auth/me/wallpaper/").then(a=>a.data),n=e=>{const t=new FormData;return t.append("wallpaper",e),a.post("/auth/me/wallpaper/",t).then(a=>a.data)},l=()=>a.delete("/auth/me/wallpaper/").then(a=>a.data);function s(a){const e=a?.response?.status,t=a?.response?.data,r=Array.isArray(t?.wallpaper)?t.wallpaper[0]:void 0;return r||(413===e?"That picture is too large to use as a wallpaper.":415===e?"That file is not a picture this can use as a wallpaper.":"The wallpaper could not be saved. Please try again.")}export{t as WALLPAPER_PREF_TOKEN,l as deleteWallpaper,e as getNumberingConfigs,p as getWallpaper,n as uploadWallpaper,r as wallpaperSrc,s as wallpaperUploadError};
1
+ import{client_default as a}from"./chunk-DLD4AKVT.js";var e=()=>a.get("/auth/numbering-configs/").then(a=>a.data?.results??a.data??[]),t="uploaded:wallpaper";function r(a,e){return"string"!=typeof a||!a||"none"===a||a.startsWith("#")?"":a===t?e||"":a}var p=()=>a.get("/auth/me/wallpaper/").then(a=>a.data),n=e=>{const t=new FormData;return t.append("wallpaper",e),a.post("/auth/me/wallpaper/",t).then(a=>a.data)},l=()=>a.delete("/auth/me/wallpaper/").then(a=>a.data);function s(a){const e=a?.response?.status,t=a?.response?.data,r=Array.isArray(t?.wallpaper)?t.wallpaper[0]:void 0;return r||(413===e?"That picture is too large to use as a wallpaper.":415===e?"That file is not a picture this can use as a wallpaper.":"The wallpaper could not be saved. Please try again.")}export{t as WALLPAPER_PREF_TOKEN,l as deleteWallpaper,e as getNumberingConfigs,p as getWallpaper,n as uploadWallpaper,r as wallpaperSrc,s as wallpaperUploadError};
@@ -0,0 +1 @@
1
+ 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, 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';
@@ -0,0 +1 @@
1
+ export{DATE_FORMAT_OPTIONS,EMPTY_VALUE,TZ_AUTO,currencyDecimals,currencySymbol,formatBytes,formatDate,formatDateTime,formatMoney,formatTime,getUserDateFormat,getUserTimezone,setCurrencyFormats,setUserDateFormat,setUserTimezone,syncTimezoneFromProfile,timeAgo}from"../chunk-S2AZZGFF.js";
@@ -2,6 +2,7 @@ import * as react from 'react';
2
2
  import { ButtonHTMLAttributes, ReactNode, InputHTMLAttributes, TextareaHTMLAttributes, SelectHTMLAttributes, LabelHTMLAttributes, CSSProperties, RefObject, ElementType, MouseEvent, Component, ErrorInfo } from 'react';
3
3
  import * as react_jsx_runtime from 'react/jsx-runtime';
4
4
  import { useFileIntake, FileIntakeLimits, FileRejection } from './file-intake/index.js';
5
+ import { c as TimeAgoOptions } from './index-DCUzlKPZ.js';
5
6
 
6
7
  /**
7
8
  * Button styling — the class strings `Button` and `IconButton` wear, and the
@@ -4111,14 +4112,16 @@ interface SidebarActionButtonProps {
4111
4112
  }
4112
4113
  declare function SidebarActionButton({ children, onClick, variant, hotkey, disabled, type, title, className, }: SidebarActionButtonProps): react_jsx_runtime.JSX.Element;
4113
4114
 
4114
- /**
4115
- * Presentational building blocks for SidebarLayout filter sidebars (status
4116
- * buckets, categories, …) — the same item + group-label markup every list
4117
- * window renders. Data wiring (count fetching) stays in the consuming app.
4118
- */
4119
- declare function SidebarGroupLabel({ children }: {
4115
+ interface SidebarGroupLabelProps {
4120
4116
  children: ReactNode;
4121
- }): react_jsx_runtime.JSX.Element;
4117
+ /**
4118
+ * The group's total, read-only, at the right of the heading (Reports 991
4119
+ * over its Open and Closed rows). Plain text in the heading's own muted ink,
4120
+ * not a row's pill: the heading is a label, not somewhere to click.
4121
+ */
4122
+ count?: number;
4123
+ }
4124
+ declare function SidebarGroupLabel({ children, count }: SidebarGroupLabelProps): react_jsx_runtime.JSX.Element;
4122
4125
  interface SidebarNavItemProps {
4123
4126
  /**
4124
4127
  * Widened from `string` to `ReactNode` so an item can carry markup the label
@@ -4172,8 +4175,37 @@ interface SidebarNavItemProps {
4172
4175
  * on a bad token would turn the safety feature into the outage.
4173
4176
  */
4174
4177
  severity?: SeverityTone;
4178
+ /**
4179
+ * Nesting level. `1` indents the row under the one above it, for a parent
4180
+ * bucket and its parts (Open, then Submitted / Under review / In progress).
4181
+ * One level only: a sidebar deeper than that has become a tree view, which
4182
+ * this component is not. Omitted or `0` renders exactly as before.
4183
+ */
4184
+ depth?: 0 | 1;
4185
+ }
4186
+ declare function SidebarNavItem({ label, count, active, onClick, icon, trailing, severity, depth }: SidebarNavItemProps): react_jsx_runtime.JSX.Element;
4187
+ interface SidebarNavGroupProps {
4188
+ /** The group's name — a heading with a total, not a destination. */
4189
+ label: string;
4190
+ /** The group's total, in the same pill and column as a row's count. */
4191
+ count?: number;
4192
+ /** The group's rows — `SidebarNavItem`s with `depth={1}`. */
4193
+ children: ReactNode;
4194
+ /** Open on first render when nothing is saved. Defaults to open. */
4195
+ defaultExpanded?: boolean;
4196
+ /** Persist the open/closed state across reopens, like `SidebarLayout`'s width. */
4197
+ storageKey?: string;
4175
4198
  }
4176
- declare function SidebarNavItem({ label, count, active, onClick, icon, trailing, severity }: SidebarNavItemProps): react_jsx_runtime.JSX.Element;
4199
+ /**
4200
+ * A parent row whose rows fold away (Open over Submitted / Under review / In
4201
+ * progress). Like a section in the shell's own menu, the whole row is the
4202
+ * disclosure: it folds and unfolds, and opens nothing itself. The chevron
4203
+ * follows the label, so the label and the count stay in the same columns as
4204
+ * every other row's — a chevron column in front pushed the label right, and
4205
+ * one hung in the gutter was cramped and clipped its focus ring. Folded over
4206
+ * the current location, the row is lit, so the place is never lost.
4207
+ */
4208
+ declare function SidebarNavGroup({ label, count, children, defaultExpanded, storageKey }: SidebarNavGroupProps): react_jsx_runtime.JSX.Element;
4177
4209
 
4178
4210
  /**
4179
4211
  * Generic top navigation bar. A horizontal row of tab-style links with an
@@ -6540,7 +6572,7 @@ declare function applyThemePrefs(p: {
6540
6572
  }): void;
6541
6573
  declare function useTheme(): {
6542
6574
  theme: Theme;
6543
- resolved: "dark" | "blue" | "green" | "grey" | "pink" | "light";
6575
+ resolved: "dark" | "light" | "blue" | "green" | "grey" | "pink";
6544
6576
  };
6545
6577
 
6546
6578
  interface ShellPrefsAdapter {
@@ -6578,6 +6610,17 @@ declare function useLocalStoragePrefs(storageKey?: string, defaults?: Record<str
6578
6610
  * A caller that must know reads `useShellPrefsAdapter` instead. */
6579
6611
  declare function useShellPrefs(): ShellPrefsAdapter;
6580
6612
 
6613
+ /** How a glass surface is inked, which decides its solid fallback. */
6614
+ interface GlassOptions {
6615
+ /**
6616
+ * `'light'` for glass that carries white ink over a picture whatever the
6617
+ * theme — a sign-in card on a photograph. Under `rosh-reduce-transparency`
6618
+ * it paints `--rosh-glass-light-ink-surface`, a dark surface in both themes,
6619
+ * instead of the theme's `--surface`. Frosted, it changes nothing. Omitted,
6620
+ * the glass is inked by the theme like every kit popup.
6621
+ */
6622
+ ink?: 'theme' | 'light';
6623
+ }
6581
6624
  /** Frosted glass style — shared across all menus, popups, and glass UI elements.
6582
6625
  * Reads --menu-opacity CSS variable set by the theme system, and adapts the
6583
6626
  * base tint to dark mode so menus don't stay light-cream when text is light.
@@ -6591,8 +6634,9 @@ declare function useShellPrefs(): ShellPrefsAdapter;
6591
6634
  *
6592
6635
  * To make every popup SOLID in the host's own surface colour, put
6593
6636
  * `rosh-reduce-transparency` on <html>: the branch below then paints one opaque
6594
- * `--rosh-glass-surface`, and the stylesheet drops every backdrop blur. */
6595
- declare function glassStyle(opacity?: number): CSSProperties;
6637
+ * `--rosh-glass-surface`, and the stylesheet drops every backdrop blur.
6638
+ * Glass inked white over a picture passes `{ ink: 'light' }` (GlassOptions). */
6639
+ declare function glassStyle(opacity?: number, options?: GlassOptions): CSSProperties;
6596
6640
  /** Glass divider border color */
6597
6641
  declare const GLASS_DIVIDER = "border-white/20";
6598
6642
  /** Glass input/search bar background — declared in styles.css so it can adapt
@@ -6701,48 +6745,35 @@ declare function isStaleChunkError(error: unknown): boolean;
6701
6745
  */
6702
6746
  declare function installStaleChunkReload(options?: StaleChunkReloadOptions): () => void;
6703
6747
 
6704
- interface FormatDateOptions {
6705
- /**
6706
- * A BCP 47 tag — usually `useShellLocale()`. With one, the date is written by
6707
- * `Intl.DateTimeFormat` in that locale and the stored `user_date_format` is
6708
- * not read; without one, the stored format decides, as it always has.
6709
- */
6710
- locale?: string;
6711
- /**
6712
- * How a localised date is written. Defaults to `{ dateStyle: 'medium' }` —
6713
- * `Oct 2, 2026`, `02.10.2026`, `2026/10/02`. Ignored without `locale`, and
6714
- * the time zone is always UTC, because the value is a calendar day rather
6715
- * than an instant (see `formatDate`).
6716
- */
6717
- style?: Intl.DateTimeFormatOptions;
6748
+ interface EmptyValueProps {
6749
+ /** What a screen reader says instead of "dash". "Not available" when the
6750
+ * data is missing; "Not set" when nobody has chosen a value yet. */
6751
+ label?: string;
6752
+ }
6753
+ /**
6754
+ * An empty field: one grey dash that a screen reader reads as words.
6755
+ *
6756
+ * `role="img"` is what makes `aria-label` count on a span — without a role a
6757
+ * screen reader may skip the label and read "em dash" instead.
6758
+ */
6759
+ declare function EmptyValue({ label }: EmptyValueProps): react_jsx_runtime.JSX.Element;
6760
+
6761
+ interface TimeAgoProps extends TimeAgoOptions {
6762
+ value: string | number | Date | null | undefined;
6763
+ className?: string;
6718
6764
  }
6719
6765
  /**
6720
- * Format a date string (YYYY-MM-DD or ISO timestamp) for display.
6721
- * Returns '—' for null/empty values.
6722
- *
6723
- * Only the DATE part of a timestamp is read, with or without a locale: the
6724
- * value is treated as the calendar day it names, never as an instant to be
6725
- * moved into the reader's time zone (which would print the 1st as the 31st
6726
- * anywhere west of Greenwich). The localised path builds that day at UTC
6727
- * midnight and formats it in UTC for the same reason.
6766
+ * "5m ago", with the full date and time on hover — the same everywhere a
6767
+ * relative time is shown. A missing value is the empty value, with no hover.
6728
6768
  */
6729
- declare function formatDate(value: string | null | undefined, options?: FormatDateOptions): string;
6769
+ declare function TimeAgo({ value, precise, className }: TimeAgoProps): react_jsx_runtime.JSX.Element;
6770
+
6730
6771
  /**
6731
- * The day a locale's weeks start on, as a calendar grid's `weekStartsOn`:
6732
- * 1 for Monday (`en-AU`, `en-GB`, `de`), 0 for Sunday (`en-US`, `ja`) — and 0
6733
- * without a locale, which is what every grid in the kit drew before it asked.
6734
- *
6735
- * `Intl.Locale` knows, where the runtime has the week data: `getWeekInfo()` in
6736
- * current V8, the `weekInfo` getter it shipped as first (Chromium 99–129),
6737
- * Safari's `weekInfo`. A runtime with neither — Firefox, an old Node — answers
6738
- * 0, as does a tag `Intl.Locale` refuses. A locale whose week starts on
6739
- * Saturday (`ar-EG`, `fa-IR`) also answers 0: the grid draws a Sunday- or a
6740
- * Monday-first week and nothing else, and Sunday is the nearer.
6741
- *
6742
- * Bare languages are read the way `Intl` maximises them: `en` is `en-US`, so
6743
- * Sunday. A host serving Australians says `en-AU`.
6772
+ * The value, settled: it changes only after `delay` ms (300 by default) with no
6773
+ * new change. Feed the settled value into a search query or a query key, not
6774
+ * the raw one, so typing does not send a request per key.
6744
6775
  */
6745
- declare function firstDayOfWeek(locale?: string): 0 | 1;
6776
+ declare function useDebouncedValue<T>(value: T, delay?: number): T;
6746
6777
 
6747
6778
  declare function useClickOutside(ref: RefObject<HTMLElement | null>, onClose: () => void): void;
6748
6779
 
@@ -7201,4 +7232,4 @@ declare function ChordChart({ labels, matrix, size, maxNodes, padAngle, arcWidth
7201
7232
  * string when the source is consumed without a build (e.g. tests). */
7202
7233
  declare const VERSION: string;
7203
7234
 
7204
- export { type BudgetBarProps as $, ALT as A, type BackgroundVariant as B, type ColumnDef as C, type BandScale as D, Banner as E, type BannerEmphasis as F, type BannerProps as G, type BannerTone as H, BarChart as I, type BarChartProps as J, type BoxPlotBox as K, BoxPlotChart as L, type BoxPlotChartProps as M, BrandAssetEditor as N, type BrandAssetEditorProps as O, type PaginatedResponse as P, type BrandAssetPreview as Q, BrandMark as R, type SearchConfig as S, type BrandMarkProps as T, type BrandMarkSlot as U, type BrandMarkSurface as V, type BrandMarkTreatment as W, type BreadcrumbItem as X, Breadcrumbs as Y, type BreadcrumbsProps as Z, BudgetBar as _, type SortState as a, ContainerFillChart as a$, type BudgetState as a0, Button as a1, type ButtonClassesOptions as a2, type ButtonProps as a3, type ButtonSize as a4, type ButtonVariant as a5, CHART_INK as a6, CMD_A as a7, CMD_DOT as a8, CMD_ENTER as a9, ChartHighlightProvider as aA, type ChartLegendEntry as aB, type ChartLegendSwatch as aC, type ChartRange as aD, type ChartReferenceLine as aE, type ChartRevealDirection as aF, ChartSkeleton as aG, type ChartSkeletonProps as aH, type ChartStatusTone as aI, type ChartStrokeVariant as aJ, ChartTooltip as aK, type ChartTooltipProps as aL, type ChartTooltipRow as aM, ChatTemplate as aN, Checkbox as aO, type CheckboxProps as aP, CheckoutTemplate as aQ, ChordChart as aR, type ChordChartProps as aS, ColoredBadge as aT, type ColoredBadgeProps as aU, ColumnChart as aV, type ColumnChartProps as aW, type ColumnSeries as aX, ComposerAttachments as aY, type ComposerAttachmentsProps as aZ, ConfirmProvider as a_, CMD_K as aa, CMD_S as ab, Calendar as ac, type CalendarMode as ad, type CalendarProps as ae, type Candle as af, CandlestickChart as ag, type CandlestickChartProps as ah, Card as ai, type CardPadding as aj, type CardProps as ak, CartesianPlot as al, type CartesianPlotProps as am, type CellStyle as an, type ChartBackgroundVariant as ao, ChartBrush as ap, type ChartBrushProps as aq, type ChartCurve as ar, ChartDefs as as, type ChartDefsProps as at, ChartDot as au, type ChartDotProps as av, type ChartDotVariant as aw, type ChartFillVariant as ax, ChartFrame as ay, type ChartFrameProps as az, ALT_SHIFT_D as b, FilePicker as b$, type ContainerFillChartProps as b0, type ContainerFillItem as b1, CountBadge as b2, type CountBadgeProps as b3, type CountBadgeTone as b4, type Curve as b5, DAY_MS as b6, DEFAULT_SHELL_STRINGS as b7, DashboardTemplate as b8, DataTable as b9, Drawer as bA, type DrawerProps as bB, type DrawerSide as bC, type DrawerSize as bD, DropdownMenu as bE, type DropdownMenuAlign as bF, type DropdownMenuCheckboxItem as bG, type DropdownMenuDividerItem as bH, type DropdownMenuEntry as bI, type DropdownMenuItem as bJ, type DropdownMenuLabelItem as bK, type DropdownMenuLinkItem as bL, type DropdownMenuProps as bM, type DropdownMenuRadioItem as bN, type DropdownMenuSide as bO, type DropdownPositionOptions as bP, ENTER as bQ, EditableGrid as bR, type EditableGridProps as bS, EmailTemplate as bT, EmptyState as bU, type EmptyStateProps as bV, ErrorBoundary as bW, type ErrorBoundaryProps as bX, ErrorPage as bY, type ErrorPageProps as bZ, type FileIntake as b_, type DataTableColumn as ba, type DataTableColumnGroup as bb, type DataTableHeader as bc, DataTablePage as bd, type DataTableProps as be, type DataTableRowLink as bf, type DataTableRowProps as bg, DatePicker as bh, type DatePickerProps as bi, DateRangePicker as bj, type DateRangePickerProps as bk, DateTimePicker as bl, type DateTimePickerProps as bm, type DescriptionColumns as bn, type DescriptionItem as bo, DescriptionList as bp, type DescriptionListProps as bq, Dialog as br, type DialogProps as bs, type DialogSize as bt, Divider as bu, type DividerProps as bv, type DividerSpacing as bw, DonutChart as bx, type DonutChartProps as by, type DonutSegment as bz, ALT_SHIFT_E as c, type LoadingSpinnerProps as c$, type FilePickerProps as c0, type FillVariant as c1, type FormError as c2, FormErrorSummary as c3, type FormErrorSummaryProps as c4, FormField as c5, type FormFieldProps as c6, FormLayoutPage as c7, type FormatDateOptions as c8, FunnelChart as c9, type IconButtonProps as cA, Inline as cB, type InlineProps as cC, Input as cD, InputNumber as cE, type InputNumberProps as cF, type InputProps as cG, type InputSize as cH, type Justify as cI, Kanban as cJ, type KanbanColumn as cK, type KanbanProps as cL, Kbd as cM, type KbdProps as cN, type KbdSize as cO, Label as cP, type LabelClassesOptions as cQ, type LabelProps as cR, type LadderScale as cS, LineChart as cT, type LineChartProps as cU, type LineChartSeries as cV, type LinearScale as cW, ListFooter as cX, ListLoadError as cY, type ListLoadErrorProps as cZ, LoadingSpinner as c_, type FunnelChartProps as ca, type FunnelStage as cb, GLASS_DIVIDER as cc, GLASS_INPUT_BG as cd, GROUP_COLORS as ce, GROUP_COLORS_SOLID as cf, GalleryTemplate as cg, type Gap as ch, GlobalSearch as ci, type GlobalSearchProps as cj, Grid as ck, type GridCols as cl, type GridColumn as cm, type GridProps as cn, HeatmapChart as co, type HeatmapChartProps as cp, HelpCenter as cq, type HelpCenterDoc as cr, type HelpCenterProps as cs, type HistogramBin as ct, HistogramChart as cu, type HistogramChartProps as cv, INPUT_BASE as cw, INPUT_SIZES as cx, IconButton as cy, type IconButtonClassesOptions as cz, ALT_SHIFT_N as d, type RadarAxis as d$, MAX_FRACTION_DIGITS as d0, MENU_MAX_HEIGHT as d1, MOD as d2, MOTION as d3, Markdown as d4, type MarkdownProps as d5, MediaUploadField as d6, type MediaUploadFieldProps as d7, MediaUploadGrid as d8, type MediaUploadGridItem as d9, type PieChartProps as dA, type PieSegment as dB, type PlotGeometry as dC, type Point as dD, Popover as dE, type PopoverAlign as dF, type PopoverProps as dG, type PopoverRenderProps as dH, type PopoverSide as dI, PopupMenu as dJ, PopupMenuDivider as dK, PopupMenuItem as dL, type PopupMenuItemProps as dM, PopupMenuLabel as dN, type PopupMenuProps as dO, PopupSubmenu as dP, type PopupSubmenuProps as dQ, type PortalBrandingContextValue as dR, PortalBrandingProvider as dS, type PortalBrandingProviderProps as dT, ProductionTimeline as dU, type ProductionTimelineProps as dV, type ProductionTimelineSnapshot as dW, type ProgressItem as dX, type PublicPortal as dY, type PublicPortalBranding as dZ, RADAR_SERIES_CAP as d_, type MediaUploadGridProps as da, type MenuPos as db, Meter as dc, type MeterProps as dd, MetricBar as de, type MetricBarProps as df, type Milestone as dg, type MilestoneKind as dh, MilestoneTimeline as di, type MilestoneTimelineProps as dj, NEXT_CHUNK_PATH_PREFIX as dk, NativeSelect as dl, NumericKeypad as dm, type NumericKeypadProps as dn, OVERLAY_OPEN_EVENT as dp, POPUP_MAX_WIDTH as dq, POST_PRODUCTION_STATUSES as dr, PageHeader as ds, type PageHeaderProps as dt, Pagination as du, type PaginationProps as dv, PaperclipGlyph as dw, Paragraph as dx, type ParagraphProps as dy, PieChart as dz, APP_UPDATE_POLL_MS as e, SidebarGroupLabel as e$, RadarChart as e0, type RadarChartProps as e1, type RadarSeries as e2, RadialBarChart as e3, type RadialBarChartProps as e4, type RadialBarRow as e5, Radio as e6, RadioGroup as e7, type RadioGroupOption as e8, type RadioGroupOrientation as e9, ScatterChart as eA, type ScatterChartProps as eB, type ScatterPoint as eC, type ScatterSeries as eD, type SearchProvider as eE, type SearchResult as eF, type SearchableOption as eG, SearchableSelect as eH, type SearchableSelectProps as eI, Segmented as eJ, type SegmentedOption as eK, type SegmentedProps as eL, type SegmentedSize as eM, Select as eN, type SelectOption as eO, type SelectProps as eP, type SemanticGroup as eQ, SettingRow as eR, type SettingRowProps as eS, type SeverityTone as eT, type ShellPrefsAdapter as eU, ShellPrefsProvider as eV, type ShellStrings as eW, type ShellStringsOverride as eX, ShellStringsProvider as eY, SidebarActionButton as eZ, type SidebarActionButtonProps as e_, type RadioGroupProps as ea, type RadioProps as eb, type Range as ec, RangeChart as ed, type RangeChartProps as ee, type RangeRow as ef, RankedBars as eg, type RankedBarsProps as eh, type RankedBarsRow as ei, type ResolvedPortalBrandAsset as ej, Result as ek, type ResultProps as el, type ResultStatus as em, type RevealDirection as en, SCATTER_SERIES_CAP as eo, SERIES_SLOT_COUNT as ep, SERIES_VARS as eq, SHIFT as er, STAGES as es, STALE_CHUNK_RELOAD_COOLDOWN_MS as et, STALE_CHUNK_RELOAD_KEY as eu, STATUS_VARS as ev, SankeyChart as ew, type SankeyChartProps as ex, type SankeyLink as ey, type SankeyNode as ez, Accordion as f, TimelineTrack as f$, SidebarLayout as f0, type SidebarLayoutProps as f1, SidebarNavItem as f2, type SidebarNavItemProps as f3, Skeleton as f4, type SkeletonProps as f5, type SkeletonVariant as f6, Snippet as f7, type SnippetProps as f8, type SnippetSize as f9, type SwitchSize as fA, type TabItem as fB, Tabs as fC, type TabsProps as fD, TagInput as fE, type TagInputOption as fF, type TagInputProps as fG, Text as fH, type TextProps as fI, type TextSize as fJ, type TextTone as fK, type TextWeight as fL, Textarea as fM, type TextareaProps as fN, type Theme as fO, TileButton as fP, type TileButtonProps as fQ, type TileSize as fR, TimePicker as fS, type TimePickerProps as fT, TimeSeriesChart as fU, type TimeSeriesChartProps as fV, type TimeSeriesSeries as fW, type TimelineMarker as fX, type TimelineMarkerKind as fY, type TimelineReport as fZ, type TimelineScrubProgress as f_, type SnippetVariant as fa, Sparkline as fb, type SparklineProps as fc, Stack as fd, type StackProps as fe, type StaleChunkReloadOptions as ff, StatCard as fg, type StatCardProps as fh, StatTile as fi, type StatTileProps as fj, Statistic as fk, type StatisticProps as fl, type StatisticSize as fm, type StatisticTone as fn, StatusBadge as fo, StatusBadgeProvider as fp, type StatusEmphasis as fq, type StepItem as fr, Stepper as fs, type StepperProps as ft, type StrokeVariant as fu, SunburstChart as fv, type SunburstChartProps as fw, type SunburstNode as fx, Switch as fy, type SwitchProps as fz, type AccordionItem as g, installStaleChunkReload as g$, type TimelineTrackItem as g0, type TimelineTrackKind as g1, type TimelineTrackPending as g2, type TimelineTrackPhase as g3, type TimelineTrackPlayback as g4, type TimelineTrackProps as g5, type TimelineTrackThumb as g6, Title as g7, type TitleLevel as g8, type TitleProps as g9, autoHighlightIndex as gA, backspace as gB, bandScale as gC, binValues as gD, budgetState as gE, bumpPath as gF, buttonClasses as gG, calcOverall as gH, calcReportOverall as gI, confirm as gJ, confirmDestructive as gK, curvePath as gL, dashFor as gM, dismissPopups as gN, fillFor as gO, fillId as gP, firstDayOfWeek as gQ, fmtSliderDate as gR, formatDate as gS, fromKey as gT, glassStyle as gU, glowId as gV, groundId as gW, groupColors as gX, highlightOpacity as gY, iconButtonClasses as gZ, inputClasses as g_, type ToastOptions as ga, type ToastPlacement as gb, Tooltip as gc, type TooltipProps as gd, TopNav as ge, type TopNavItem as gf, type TopNavProps as gg, TreemapChart as gh, type TreemapChartProps as gi, type TreemapItem as gj, type TreemapTile as gk, type UseAppUpdateOptions as gl, type UseProductionTimelineOpts as gm, VERSION as gn, VITE_PRELOAD_ERROR_EVENT as go, WaterfallChart as gp, type WaterfallChartProps as gq, type WaterfallStep as gr, type ZLayer as gs, Z_LAYERS as gt, angleScale as gu, appendKey as gv, applyThemePrefs as gw, arcPath as gx, areaBetween as gy, areaFrom as gz, type AccordionProps as h, isMac as h0, isSeverityTone as h1, isStaleChunkError as h2, labelClasses as h3, ladderScale as h4, linearPath as h5, linearScale as h6, logScale as h7, maskId as h8, mediaFileName as h9, useDropdownPosition as hA, useFocusTrap as hB, useHighlight as hC, useIsMobile as hD, useLocalStoragePrefs as hE, usePlotWidth as hF, usePortalBranding as hG, useProductionTimeline as hH, useScrollLock as hI, useShellLocale as hJ, useShellPrefs as hK, useShellStrings as hL, useTheme as hM, monotonePath as ha, niceMax as hb, openGlobalSearch as hc, polygonPoints as hd, popupBounds as he, prompt as hf, radiusScale as hg, resolveBrandMarkTreatment as hh, resolvePortalBrandAsset as hi, resolveSeriesColor as hj, resolveTheme as hk, seriesColor as hl, severityOf as hm, splinePath as hn, squarify as ho, stagger as hp, stepPath as hq, tabButtonId as hr, tabPanelId as hs, toKey as ht, toDayMs as hu, toISODate as hv, toast as hw, useAppUpdate as hx, useClickOutside as hy, useConfirm as hz, type Align as i, type AngleScale as j, AppUpdateBanner as k, type AppUpdateBannerProps as l, AttachButton as m, type AttachButtonProps as n, AttachmentDropZone as o, type AttachmentDropZoneProps as p, AttachmentList as q, type AttachmentListProps as r, AuthScreen as s, type AuthScreenProps as t, Avatar as u, AvatarGroup as v, type AvatarGroupProps as w, type AvatarProps as x, type AvatarSize as y, type AvatarStatus as z };
7235
+ export { type BudgetBarProps as $, ALT as A, type BackgroundVariant as B, type ColumnDef as C, type BandScale as D, Banner as E, type BannerEmphasis as F, type BannerProps as G, type BannerTone as H, BarChart as I, type BarChartProps as J, type BoxPlotBox as K, BoxPlotChart as L, type BoxPlotChartProps as M, BrandAssetEditor as N, type BrandAssetEditorProps as O, type PaginatedResponse as P, type BrandAssetPreview as Q, BrandMark as R, type SearchConfig as S, type BrandMarkProps as T, type BrandMarkSlot as U, type BrandMarkSurface as V, type BrandMarkTreatment as W, type BreadcrumbItem as X, Breadcrumbs as Y, type BreadcrumbsProps as Z, BudgetBar as _, type SortState as a, ContainerFillChart as a$, type BudgetState as a0, Button as a1, type ButtonClassesOptions as a2, type ButtonProps as a3, type ButtonSize as a4, type ButtonVariant as a5, CHART_INK as a6, CMD_A as a7, CMD_DOT as a8, CMD_ENTER as a9, ChartHighlightProvider as aA, type ChartLegendEntry as aB, type ChartLegendSwatch as aC, type ChartRange as aD, type ChartReferenceLine as aE, type ChartRevealDirection as aF, ChartSkeleton as aG, type ChartSkeletonProps as aH, type ChartStatusTone as aI, type ChartStrokeVariant as aJ, ChartTooltip as aK, type ChartTooltipProps as aL, type ChartTooltipRow as aM, ChatTemplate as aN, Checkbox as aO, type CheckboxProps as aP, CheckoutTemplate as aQ, ChordChart as aR, type ChordChartProps as aS, ColoredBadge as aT, type ColoredBadgeProps as aU, ColumnChart as aV, type ColumnChartProps as aW, type ColumnSeries as aX, ComposerAttachments as aY, type ComposerAttachmentsProps as aZ, ConfirmProvider as a_, CMD_K as aa, CMD_S as ab, Calendar as ac, type CalendarMode as ad, type CalendarProps as ae, type Candle as af, CandlestickChart as ag, type CandlestickChartProps as ah, Card as ai, type CardPadding as aj, type CardProps as ak, CartesianPlot as al, type CartesianPlotProps as am, type CellStyle as an, type ChartBackgroundVariant as ao, ChartBrush as ap, type ChartBrushProps as aq, type ChartCurve as ar, ChartDefs as as, type ChartDefsProps as at, ChartDot as au, type ChartDotProps as av, type ChartDotVariant as aw, type ChartFillVariant as ax, ChartFrame as ay, type ChartFrameProps as az, ALT_SHIFT_D as b, type ErrorPageProps as b$, type ContainerFillChartProps as b0, type ContainerFillItem as b1, CountBadge as b2, type CountBadgeProps as b3, type CountBadgeTone as b4, type Curve as b5, DAY_MS as b6, DEFAULT_SHELL_STRINGS as b7, DashboardTemplate as b8, DataTable as b9, Drawer as bA, type DrawerProps as bB, type DrawerSide as bC, type DrawerSize as bD, DropdownMenu as bE, type DropdownMenuAlign as bF, type DropdownMenuCheckboxItem as bG, type DropdownMenuDividerItem as bH, type DropdownMenuEntry as bI, type DropdownMenuItem as bJ, type DropdownMenuLabelItem as bK, type DropdownMenuLinkItem as bL, type DropdownMenuProps as bM, type DropdownMenuRadioItem as bN, type DropdownMenuSide as bO, type DropdownPositionOptions as bP, ENTER as bQ, EditableGrid as bR, type EditableGridProps as bS, EmailTemplate as bT, EmptyState as bU, type EmptyStateProps as bV, EmptyValue as bW, type EmptyValueProps as bX, ErrorBoundary as bY, type ErrorBoundaryProps as bZ, ErrorPage as b_, type DataTableColumn as ba, type DataTableColumnGroup as bb, type DataTableHeader as bc, DataTablePage as bd, type DataTableProps as be, type DataTableRowLink as bf, type DataTableRowProps as bg, DatePicker as bh, type DatePickerProps as bi, DateRangePicker as bj, type DateRangePickerProps as bk, DateTimePicker as bl, type DateTimePickerProps as bm, type DescriptionColumns as bn, type DescriptionItem as bo, DescriptionList as bp, type DescriptionListProps as bq, Dialog as br, type DialogProps as bs, type DialogSize as bt, Divider as bu, type DividerProps as bv, type DividerSpacing as bw, DonutChart as bx, type DonutChartProps as by, type DonutSegment as bz, ALT_SHIFT_E as c, type ListLoadErrorProps as c$, type FileIntake as c0, FilePicker as c1, type FilePickerProps as c2, type FillVariant as c3, type FormError as c4, FormErrorSummary as c5, type FormErrorSummaryProps as c6, FormField as c7, type FormFieldProps as c8, FormLayoutPage as c9, IconButton as cA, type IconButtonClassesOptions as cB, type IconButtonProps as cC, Inline as cD, type InlineProps as cE, Input as cF, InputNumber as cG, type InputNumberProps as cH, type InputProps as cI, type InputSize as cJ, type Justify as cK, Kanban as cL, type KanbanColumn as cM, type KanbanProps as cN, Kbd as cO, type KbdProps as cP, type KbdSize as cQ, Label as cR, type LabelClassesOptions as cS, type LabelProps as cT, type LadderScale as cU, LineChart as cV, type LineChartProps as cW, type LineChartSeries as cX, type LinearScale as cY, ListFooter as cZ, ListLoadError as c_, FunnelChart as ca, type FunnelChartProps as cb, type FunnelStage as cc, GLASS_DIVIDER as cd, GLASS_INPUT_BG as ce, GROUP_COLORS as cf, GROUP_COLORS_SOLID as cg, GalleryTemplate as ch, type Gap as ci, type GlassOptions as cj, GlobalSearch as ck, type GlobalSearchProps as cl, Grid as cm, type GridCols as cn, type GridColumn as co, type GridProps as cp, HeatmapChart as cq, type HeatmapChartProps as cr, HelpCenter as cs, type HelpCenterDoc as ct, type HelpCenterProps as cu, type HistogramBin as cv, HistogramChart as cw, type HistogramChartProps as cx, INPUT_BASE as cy, INPUT_SIZES as cz, ALT_SHIFT_N as d, type PublicPortalBranding as d$, LoadingSpinner as d0, type LoadingSpinnerProps as d1, MAX_FRACTION_DIGITS as d2, MENU_MAX_HEIGHT as d3, MOD as d4, MOTION as d5, Markdown as d6, type MarkdownProps as d7, MediaUploadField as d8, type MediaUploadFieldProps as d9, type ParagraphProps as dA, PieChart as dB, type PieChartProps as dC, type PieSegment as dD, type PlotGeometry as dE, type Point as dF, Popover as dG, type PopoverAlign as dH, type PopoverProps as dI, type PopoverRenderProps as dJ, type PopoverSide as dK, PopupMenu as dL, PopupMenuDivider as dM, PopupMenuItem as dN, type PopupMenuItemProps as dO, PopupMenuLabel as dP, type PopupMenuProps as dQ, PopupSubmenu as dR, type PopupSubmenuProps as dS, type PortalBrandingContextValue as dT, PortalBrandingProvider as dU, type PortalBrandingProviderProps as dV, ProductionTimeline as dW, type ProductionTimelineProps as dX, type ProductionTimelineSnapshot as dY, type ProgressItem as dZ, type PublicPortal as d_, MediaUploadGrid as da, type MediaUploadGridItem as db, type MediaUploadGridProps as dc, type MenuPos as dd, Meter as de, type MeterProps as df, MetricBar as dg, type MetricBarProps as dh, type Milestone as di, type MilestoneKind as dj, MilestoneTimeline as dk, type MilestoneTimelineProps as dl, NEXT_CHUNK_PATH_PREFIX as dm, NativeSelect as dn, NumericKeypad as dp, type NumericKeypadProps as dq, OVERLAY_OPEN_EVENT as dr, POPUP_MAX_WIDTH as ds, POST_PRODUCTION_STATUSES as dt, PageHeader as du, type PageHeaderProps as dv, Pagination as dw, type PaginationProps as dx, PaperclipGlyph as dy, Paragraph as dz, APP_UPDATE_POLL_MS as e, SidebarActionButton as e$, RADAR_SERIES_CAP as e0, type RadarAxis as e1, RadarChart as e2, type RadarChartProps as e3, type RadarSeries as e4, RadialBarChart as e5, type RadialBarChartProps as e6, type RadialBarRow as e7, Radio as e8, RadioGroup as e9, type SankeyLink as eA, type SankeyNode as eB, ScatterChart as eC, type ScatterChartProps as eD, type ScatterPoint as eE, type ScatterSeries as eF, type SearchProvider as eG, type SearchResult as eH, type SearchableOption as eI, SearchableSelect as eJ, type SearchableSelectProps as eK, Segmented as eL, type SegmentedOption as eM, type SegmentedProps as eN, type SegmentedSize as eO, Select as eP, type SelectOption as eQ, type SelectProps as eR, type SemanticGroup as eS, SettingRow as eT, type SettingRowProps as eU, type SeverityTone as eV, type ShellPrefsAdapter as eW, ShellPrefsProvider as eX, type ShellStrings as eY, type ShellStringsOverride as eZ, ShellStringsProvider as e_, type RadioGroupOption as ea, type RadioGroupOrientation as eb, type RadioGroupProps as ec, type RadioProps as ed, type Range as ee, RangeChart as ef, type RangeChartProps as eg, type RangeRow as eh, RankedBars as ei, type RankedBarsProps as ej, type RankedBarsRow as ek, type ResolvedPortalBrandAsset as el, Result as em, type ResultProps as en, type ResultStatus as eo, type RevealDirection as ep, SCATTER_SERIES_CAP as eq, SERIES_SLOT_COUNT as er, SERIES_VARS as es, SHIFT as et, STAGES as eu, STALE_CHUNK_RELOAD_COOLDOWN_MS as ev, STALE_CHUNK_RELOAD_KEY as ew, STATUS_VARS as ex, SankeyChart as ey, type SankeyChartProps as ez, Accordion as f, TimeSeriesChart as f$, type SidebarActionButtonProps as f0, SidebarGroupLabel as f1, type SidebarGroupLabelProps as f2, SidebarLayout as f3, type SidebarLayoutProps as f4, SidebarNavGroup as f5, type SidebarNavGroupProps as f6, SidebarNavItem as f7, type SidebarNavItemProps as f8, Skeleton as f9, SunburstChart as fA, type SunburstChartProps as fB, type SunburstNode as fC, Switch as fD, type SwitchProps as fE, type SwitchSize as fF, type TabItem as fG, Tabs as fH, type TabsProps as fI, TagInput as fJ, type TagInputOption as fK, type TagInputProps as fL, Text as fM, type TextProps as fN, type TextSize as fO, type TextTone as fP, type TextWeight as fQ, Textarea as fR, type TextareaProps as fS, type Theme as fT, TileButton as fU, type TileButtonProps as fV, type TileSize as fW, TimeAgo as fX, type TimeAgoProps as fY, TimePicker as fZ, type TimePickerProps as f_, type SkeletonProps as fa, type SkeletonVariant as fb, Snippet as fc, type SnippetProps as fd, type SnippetSize as fe, type SnippetVariant as ff, Sparkline as fg, type SparklineProps as fh, Stack as fi, type StackProps as fj, type StaleChunkReloadOptions as fk, StatCard as fl, type StatCardProps as fm, StatTile as fn, type StatTileProps as fo, Statistic as fp, type StatisticProps as fq, type StatisticSize as fr, type StatisticTone as fs, StatusBadge as ft, StatusBadgeProvider as fu, type StatusEmphasis as fv, type StepItem as fw, Stepper as fx, type StepperProps as fy, type StrokeVariant as fz, type AccordionItem as g, groundId as g$, type TimeSeriesChartProps as g0, type TimeSeriesSeries as g1, type TimelineMarker as g2, type TimelineMarkerKind as g3, type TimelineReport as g4, type TimelineScrubProgress as g5, TimelineTrack as g6, type TimelineTrackItem as g7, type TimelineTrackKind as g8, type TimelineTrackPending as g9, Z_LAYERS as gA, angleScale as gB, appendKey as gC, applyThemePrefs as gD, arcPath as gE, areaBetween as gF, areaFrom as gG, autoHighlightIndex as gH, backspace as gI, bandScale as gJ, binValues as gK, budgetState as gL, bumpPath as gM, buttonClasses as gN, calcOverall as gO, calcReportOverall as gP, confirm as gQ, confirmDestructive as gR, curvePath as gS, dashFor as gT, dismissPopups as gU, fillFor as gV, fillId as gW, fmtSliderDate as gX, fromKey as gY, glassStyle as gZ, glowId as g_, type TimelineTrackPhase as ga, type TimelineTrackPlayback as gb, type TimelineTrackProps as gc, type TimelineTrackThumb as gd, Title as ge, type TitleLevel as gf, type TitleProps as gg, type ToastOptions as gh, type ToastPlacement as gi, Tooltip as gj, type TooltipProps as gk, TopNav as gl, type TopNavItem as gm, type TopNavProps as gn, TreemapChart as go, type TreemapChartProps as gp, type TreemapItem as gq, type TreemapTile as gr, type UseAppUpdateOptions as gs, type UseProductionTimelineOpts as gt, VERSION as gu, VITE_PRELOAD_ERROR_EVENT as gv, WaterfallChart as gw, type WaterfallChartProps as gx, type WaterfallStep as gy, type ZLayer as gz, type AccordionProps as h, groupColors as h0, highlightOpacity as h1, iconButtonClasses as h2, inputClasses as h3, installStaleChunkReload as h4, isMac as h5, isSeverityTone as h6, isStaleChunkError as h7, labelClasses as h8, ladderScale as h9, toISODate as hA, toast as hB, useAppUpdate as hC, useClickOutside as hD, useConfirm as hE, useDebouncedValue as hF, useDropdownPosition as hG, useFocusTrap as hH, useHighlight as hI, useIsMobile as hJ, useLocalStoragePrefs as hK, usePlotWidth as hL, usePortalBranding as hM, useProductionTimeline as hN, useScrollLock as hO, useShellLocale as hP, useShellPrefs as hQ, useShellStrings as hR, useTheme as hS, linearPath as ha, linearScale as hb, logScale as hc, maskId as hd, mediaFileName as he, monotonePath as hf, niceMax as hg, openGlobalSearch as hh, polygonPoints as hi, popupBounds as hj, prompt as hk, radiusScale as hl, resolveBrandMarkTreatment as hm, resolvePortalBrandAsset as hn, resolveSeriesColor as ho, resolveTheme as hp, seriesColor as hq, severityOf as hr, splinePath as hs, squarify as ht, stagger as hu, stepPath as hv, tabButtonId as hw, tabPanelId as hx, toKey as hy, toDayMs as hz, type Align as i, type AngleScale as j, AppUpdateBanner as k, type AppUpdateBannerProps as l, AttachButton as m, type AttachButtonProps as n, AttachmentDropZone as o, type AttachmentDropZoneProps as p, AttachmentList as q, type AttachmentListProps as r, AuthScreen as s, type AuthScreenProps as t, Avatar as u, AvatarGroup as v, type AvatarGroupProps as w, type AvatarProps as x, type AvatarSize as y, type AvatarStatus as z };
@@ -0,0 +1,194 @@
1
+ /**
2
+ * Shared date formatting utility.
3
+ *
4
+ * Two settings of the reader's decide every date the portals show:
5
+ * - the date FORMAT (`user_date_format` in localStorage) — how a day is
6
+ * written, `DD/MM/YYYY` and the rest below;
7
+ * - the time ZONE (`user_timezone`, copied from the account by
8
+ * `syncTimezoneFromProfile`, or the browser's own when unset) — which day
9
+ * and hour a stored instant falls on for that reader.
10
+ * Times read `9:30 am`. A missing or unreadable value is `EMPTY_VALUE`.
11
+ *
12
+ * Supported formats (numeric, two-digit-year, abbreviated- and full-month):
13
+ * 'DD/MM/YYYY' — 24/04/2026 'MM/DD/YY' — 04/24/26
14
+ * 'MM/DD/YYYY' — 04/24/2026 'YYYY/MM/DD' — 2026/04/24
15
+ * 'YYYY-MM-DD' — 2026-04-24 'YYYY.MM.DD' — 2026.04.24
16
+ * 'DD-MM-YYYY' — 24-04-2026 'MM-DD-YYYY' — 04-24-2026
17
+ * 'DD.MM.YYYY' — 24.04.2026 'DD MMM YYYY' — 24 Apr 2026
18
+ * 'DD/MM/YY' — 24/04/26 'MMM DD, YYYY' — Apr 24, 2026
19
+ * 'DD/MMM/YYYY' — 24/Apr/2026 'DD MMMM YYYY' — 24 April 2026
20
+ * 'DD/MMM/YY' — 24/Apr/26 'MMMM DD, YYYY' — April 24, 2026
21
+ *
22
+ * ── A locale replaces the format key ──
23
+ * The key is the shell's per-user setting, and it only knows English month
24
+ * names. A host that hands `ShellStringsProvider` a `locale` is saying how
25
+ * dates read for everyone it serves, so `formatDate(value, { locale })` writes
26
+ * the date with `Intl.DateTimeFormat` in that locale (`2 Oct 2026`,
27
+ * `02.10.2026`, `2026/10/02`) and does not consult the stored key at all. With
28
+ * no locale nothing changes: the key decides, exactly as before.
29
+ *
30
+ * `calendarNames` is the same split for the kit's own calendar furniture —
31
+ * month and weekday names, and the two or three ways a date is spelled out —
32
+ * so the pickers and the timeline ruler read one set of words, from one place.
33
+ */
34
+ type DateFormatKey = 'DD/MM/YYYY' | 'MM/DD/YYYY' | 'YYYY-MM-DD' | 'DD-MM-YYYY' | 'DD.MM.YYYY' | 'DD/MM/YY' | 'DD/MMM/YYYY' | 'DD/MMM/YY' | 'MM/DD/YY' | 'YYYY/MM/DD' | 'YYYY.MM.DD' | 'MM-DD-YYYY' | 'DD MMM YYYY' | 'MMM DD, YYYY' | 'DD MMMM YYYY' | 'MMMM DD, YYYY';
35
+ declare const DATE_FORMAT_OPTIONS: {
36
+ key: DateFormatKey;
37
+ example: string;
38
+ }[];
39
+ /**
40
+ * The reader's chosen format, or the default where there is no reader to ask.
41
+ *
42
+ * `formatDate` is called while components render, so this runs on a server
43
+ * too — where there is no `localStorage` at all (Node 25+ has a global by that
44
+ * name that is `undefined` until a flag provides a file), and where the answer
45
+ * that matches a reader who never chose is the default. Storage that throws (a
46
+ * sandboxed frame) is read the same way.
47
+ *
48
+ * What this cannot do is make a server and a reader who DID choose agree: the
49
+ * server writes the default and the browser hydrates the stored format. A page
50
+ * that server-renders dates and also lets readers pick a format should render
51
+ * those dates from a client component after mount.
52
+ */
53
+ declare function getUserDateFormat(): DateFormatKey;
54
+ declare function setUserDateFormat(fmt: DateFormatKey): void;
55
+ /** The stored value meaning "follow the browser's own zone". */
56
+ declare const TZ_AUTO = "auto";
57
+ /**
58
+ * The reader's chosen IANA zone, or `undefined` to follow the browser (and on a
59
+ * server, where there is no reader to ask). `undefined` handed to `Intl` is the
60
+ * runtime's own zone, which is exactly what "Auto" means.
61
+ */
62
+ declare function getUserTimezone(): string | undefined;
63
+ declare function setUserTimezone(zone: string | undefined): void;
64
+ /**
65
+ * Copy the zone saved on the account into this browser, so the formatters
66
+ * (which are synchronous) use it on every device. Call when the signed-in user
67
+ * loads. A blank account value leaves the local choice, or Auto, alone.
68
+ */
69
+ declare function syncTimezoneFromProfile(zone: string | null | undefined): void;
70
+ interface FormatDateOptions {
71
+ /**
72
+ * A BCP 47 tag — usually `useShellLocale()`. With one, the date is written by
73
+ * `Intl.DateTimeFormat` in that locale and the stored `user_date_format` is
74
+ * not read; without one, the stored format decides, as it always has.
75
+ */
76
+ locale?: string;
77
+ /**
78
+ * How a localised date is written. Defaults to `{ dateStyle: 'medium' }` —
79
+ * `Oct 2, 2026`, `02.10.2026`, `2026/10/02`. Ignored without `locale`.
80
+ */
81
+ style?: Intl.DateTimeFormatOptions;
82
+ /**
83
+ * The IANA zone a timestamp is read in, instead of the reader's own. For an
84
+ * instant that belongs to somebody else and has to read their way — a
85
+ * contract signed in Perth says Perth time whoever opens it.
86
+ */
87
+ timeZone?: string;
88
+ }
89
+ /**
90
+ * A date for display, in the reader's date format: `02/10/2026`.
91
+ *
92
+ * A bare calendar day (`2026-10-02`) is written as it is. A timestamp is an
93
+ * instant, so it is moved into the reader's time zone (`user_timezone`, or the
94
+ * browser's) BEFORE its day is taken — 23:30 UTC on the 1st is the 2nd in
95
+ * Sydney, and the reader in Sydney must see the 2nd. Missing or unreadable
96
+ * values are `EMPTY_VALUE`.
97
+ */
98
+ declare function formatDate(value: string | null | undefined, options?: FormatDateOptions): string;
99
+ /**
100
+ * The time of day alone, in the reader's zone: `9:30 am`, `6:03 pm`. Twelve-hour,
101
+ * with a small am/pm — a deadline reads "6:03 pm", not "18:03". With a
102
+ * `locale`, the locale's own clock instead. Missing or unreadable values are
103
+ * `EMPTY_VALUE`.
104
+ */
105
+ declare function formatTime(value: string | null | undefined, options?: FormatDateOptions): string;
106
+ /**
107
+ * A date and a time, in the reader's zone and date format:
108
+ * `02/10/2026, 9:30 am`. Missing or unreadable values are `EMPTY_VALUE`.
109
+ */
110
+ declare function formatDateTime(value: string | null | undefined, options?: FormatDateOptions): string;
111
+ /**
112
+ * The day a locale's weeks start on, as a calendar grid's `weekStartsOn`:
113
+ * 1 for Monday (`en-AU`, `en-GB`, `de`), 0 for Sunday (`en-US`, `ja`) — and 0
114
+ * without a locale, which is what every grid in the kit drew before it asked.
115
+ *
116
+ * `Intl.Locale` knows, where the runtime has the week data: `getWeekInfo()` in
117
+ * current V8, the `weekInfo` getter it shipped as first (Chromium 99–129),
118
+ * Safari's `weekInfo`. A runtime with neither — Firefox, an old Node — answers
119
+ * 0, as does a tag `Intl.Locale` refuses. A locale whose week starts on
120
+ * Saturday (`ar-EG`, `fa-IR`) also answers 0: the grid draws a Sunday- or a
121
+ * Monday-first week and nothing else, and Sunday is the nearer.
122
+ *
123
+ * Bare languages are read the way `Intl` maximises them: `en` is `en-US`, so
124
+ * Sunday. A host serving Australians says `en-AU`.
125
+ */
126
+ declare function firstDayOfWeek(locale?: string): 0 | 1;
127
+
128
+ /**
129
+ * What a formatter returns when there is nothing to show: one dash, the same
130
+ * everywhere. On screen, JSX uses `<EmptyValue />` (a grey dash a screen reader
131
+ * reads as "Not available"); a string can only carry the dash itself.
132
+ *
133
+ * Its own module so `date.ts` and `format.ts` can both use it without
134
+ * importing each other.
135
+ */
136
+ declare const EMPTY_VALUE = "\u2014";
137
+
138
+ interface TimeAgoOptions {
139
+ /** Count seconds under a minute ("12s ago") — for a status screen that polls
140
+ * every few seconds. Without it, anything under a minute is "just now". */
141
+ precise?: boolean;
142
+ }
143
+ /**
144
+ * How long ago, in the fewest characters: "just now", "5m ago", "3h ago",
145
+ * "2d ago". From seven days on it is the date itself, in the reader's date
146
+ * format and time zone — "9d ago" makes the reader count, a date does not.
147
+ *
148
+ * A time in the future is "just now": a few seconds of clock skew between the
149
+ * browser and the server must not print "-1m ago".
150
+ */
151
+ declare function timeAgo(value: string | number | Date | null | undefined, options?: TimeAgoOptions): string;
152
+ /** One row of the currency catalog: the glyph and the minor units. */
153
+ interface CurrencyFormat {
154
+ symbol: string;
155
+ decimals: number;
156
+ }
157
+ /**
158
+ * Hand the kit the currency catalog — the backend's Globalization list
159
+ * (`/api/currencies/`), keyed by ISO code. Each portal loads it once a session
160
+ * starts. Until it does, amounts print with their code ("AUD 12.00") rather
161
+ * than a guessed symbol. `null` clears it.
162
+ */
163
+ declare function setCurrencyFormats(formats: Record<string, CurrencyFormat> | null): void;
164
+ /**
165
+ * The glyph for a currency, or its CODE when the catalog has none for it.
166
+ * Never a guess: an unknown code says "CHF", not "$".
167
+ */
168
+ declare function currencySymbol(currency: string): string;
169
+ /** The currency's minor units from the catalog — 0 for JPY, 3 for BHD, else 2. */
170
+ declare function currencyDecimals(currency: string | null | undefined): number;
171
+ interface FormatMoneyOptions {
172
+ /** No decimals at all ("A$3,841") — a storefront card's price. */
173
+ whole?: boolean;
174
+ }
175
+ /**
176
+ * An amount of money: "A$1,234.50", "-€50.00", "CHF 1,200.00".
177
+ *
178
+ * - The symbol is the catalog's (see `setCurrencyFormats`). A code with no
179
+ * glyph is set off by a space; a glyph sits against the number.
180
+ * - The minus sign comes first, and an amount that rounds to zero has none.
181
+ * - Commas between thousands and a point before the decimals, whatever the
182
+ * browser's language — a figure must read the same on every screen.
183
+ * - No currency at all prints the bare figure; nothing is guessed.
184
+ * - A missing or unreadable amount is `EMPTY_VALUE`, never "$null".
185
+ */
186
+ declare function formatMoney(amount: number | string | null | undefined, currency?: string | null, options?: FormatMoneyOptions): string;
187
+ /**
188
+ * A file size: "512 B", "1.5 KB", "40.0 MB", "2.3 GB". Whole bytes, then one
189
+ * decimal on a 1024 base, written "KB" (not "KiB") because that is what people
190
+ * read. A size that would round up to 1024 of a unit moves to the next one.
191
+ */
192
+ declare function formatBytes(bytes: number | null | undefined): string;
193
+
194
+ export { type CurrencyFormat as C, DATE_FORMAT_OPTIONS as D, EMPTY_VALUE as E, type FormatDateOptions as F, TZ_AUTO as T, type DateFormatKey as a, type FormatMoneyOptions as b, type TimeAgoOptions as c, currencyDecimals as d, currencySymbol as e, firstDayOfWeek as f, formatBytes as g, formatDate as h, formatDateTime as i, formatMoney as j, formatTime as k, getUserDateFormat as l, getUserTimezone as m, setUserDateFormat as n, setUserTimezone as o, syncTimezoneFromProfile as p, setCurrencyFormats as s, timeAgo as t };