efficient-shell 5.6.0 → 6.4.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 (112) hide show
  1. package/README.md +189 -46
  2. package/THIRD_PARTY_NOTICES.md +212 -0
  3. package/dist/Browser-USPZWDYH.js +43 -0
  4. package/dist/Calculator-FP5HUWCW.js +29 -0
  5. package/dist/ConfirmDialog-3TIHKJRT.js +1 -0
  6. package/dist/{CurrencyConverter-YJ47A3L5.js → CurrencyConverter-XD5LYOCD.js} +7 -7
  7. package/dist/Documents-ADFEHEUW.js +52 -0
  8. package/dist/Files-BVUVRNC5.js +87 -0
  9. package/dist/Notepad-WJI5ODGS.js +25 -0
  10. package/dist/PdfViewer-226I3LSD.js +1 -0
  11. package/dist/PomodoroTimer-GEMQHIPJ.js +91 -0
  12. package/dist/Preview-HNSEYNZL.js +182 -0
  13. package/dist/Sidebar-PVHZPNIY.js +44 -0
  14. package/dist/{Spreadsheet-INXG5UMI.js → Spreadsheet-6Z5ACGTT.js} +14 -14
  15. package/dist/{Stock-CBQN2IJF.js → Stock-X3LIU4ZX.js} +4 -4
  16. package/dist/{Weather-2EVUTIXX.js → Weather-BLO354GM.js} +18 -18
  17. package/dist/{WorldClock-TZUF7MOB.js → WorldClock-BAH7QFRG.js} +7 -7
  18. package/dist/apps/index.js +1 -1
  19. package/dist/bin/ui-check.js +1 -1
  20. package/dist/brand.css +1 -1
  21. package/dist/chunk-2SSRFEOZ.js +91 -0
  22. package/dist/{chunk-TFETN2GI.js → chunk-4JZZLUGG.js} +1 -1
  23. package/dist/{chunk-GG7AE6OC.js → chunk-5K76RQML.js} +1 -1
  24. package/dist/chunk-5LUN632W.js +5 -0
  25. package/dist/chunk-5MDQNFOG.js +9 -0
  26. package/dist/chunk-7IQ3B77H.js +1 -0
  27. package/dist/{chunk-SKB6L53D.js → chunk-7PGHRG6J.js} +9 -9
  28. package/dist/chunk-CXJQ42XT.js +21 -0
  29. package/dist/chunk-DBXZS7OA.js +29 -0
  30. package/dist/{chunk-X4FJ54PP.js → chunk-FIEA5CGB.js} +1 -1
  31. package/dist/chunk-GJ37JCC2.js +1 -0
  32. package/dist/{chunk-KXAUDC3A.js → chunk-GWDVD3VQ.js} +27 -27
  33. package/dist/chunk-HQLAISFX.js +11 -0
  34. package/dist/chunk-I2H2CKID.js +3 -0
  35. package/dist/{chunk-MLYC5VQI.js → chunk-I534M65N.js} +2 -2
  36. package/dist/{chunk-R4XSSHDI.js → chunk-IHZL3GJU.js} +1 -1
  37. package/dist/chunk-K6DKX55N.js +1 -0
  38. package/dist/chunk-KNUR2UEG.js +1 -0
  39. package/dist/{chunk-JXAAZGLJ.js → chunk-MORDXCV6.js} +1 -1
  40. package/dist/chunk-PFKMIPZH.js +1028 -0
  41. package/dist/chunk-PJPK2ADX.js +1 -0
  42. package/dist/chunk-Q5O5UMJY.js +6 -0
  43. package/dist/chunk-QJHWLDEN.js +108 -0
  44. package/dist/chunk-R5VRLW5Z.js +1 -0
  45. package/dist/chunk-S3LGKIZ3.js +12 -0
  46. package/dist/chunk-SBF5A6XV.js +1 -0
  47. package/dist/chunk-SK5DL6JX.js +24 -0
  48. package/dist/{chunk-CLPJDJH4.js → chunk-UUYPUKP7.js} +1 -1
  49. package/dist/{chunk-AFYQTVZO.js → chunk-UVBK6YSR.js} +1 -1
  50. package/dist/chunk-VR6TR575.js +13 -0
  51. package/dist/{chunk-PKEQ7XOH.js → chunk-XO2AMGVU.js} +1 -1
  52. package/dist/{chunk-N3A3GWJI.js → chunk-YX2IMURA.js} +12 -12
  53. package/dist/chunk-ZEIKSMFR.js +10 -0
  54. package/dist/client-DLm3Fvbc.d.ts +65 -0
  55. package/dist/file-intake/index.js +1 -1
  56. package/dist/i18n/index.d.ts +1 -1
  57. package/dist/icons/efficient-looks.d.ts +1 -1
  58. package/dist/icons/efficient.d.ts +1 -1
  59. package/dist/icons/index.d.ts +12 -12
  60. package/dist/icons/index.js +1 -1
  61. package/dist/{index-BgM75MC6.d.ts → index-D5bms_uA.d.ts} +188 -76
  62. package/dist/index.d.ts +6 -4
  63. package/dist/index.js +639 -639
  64. package/dist/locales/zh-Hans.d.ts +1 -1
  65. package/dist/locales/zh-Hans.js +1 -1
  66. package/dist/map/index.js +22 -22
  67. package/dist/markdown/index.js +6 -6
  68. package/dist/markup/index.d.ts +460 -36
  69. package/dist/markup/index.js +1 -1
  70. package/dist/page-tabs/index.js +5 -5
  71. package/dist/pdf/index.js +1 -1
  72. package/dist/{registry-J-TU7zKx.d.ts → registry-Dw6QO2Ch.d.ts} +12 -9
  73. package/dist/{strings-BVB64Nck.d.ts → strings-fYzxZPn4.d.ts} +5 -0
  74. package/dist/telemetry/index.d.ts +39 -0
  75. package/dist/telemetry/index.js +1 -0
  76. package/dist/ui/index.d.ts +4 -3
  77. package/dist/ui/index.js +1 -1
  78. package/dist/ui.css +62 -21
  79. package/package.json +7 -21
  80. package/dist/Browser-6QB2QTO7.js +0 -43
  81. package/dist/Calculator-KOWRV2VK.js +0 -29
  82. package/dist/ConfirmDialog-32NLLK4K.js +0 -1
  83. package/dist/Documents-TGGI2QBV.js +0 -52
  84. package/dist/Files-KSDK3EO4.js +0 -87
  85. package/dist/Notepad-EKB6FJPR.js +0 -25
  86. package/dist/PdfViewer-KW5B44AX.js +0 -1
  87. package/dist/PomodoroTimer-RD5GRRA5.js +0 -91
  88. package/dist/Preview-AQVXKT2I.js +0 -182
  89. package/dist/Sidebar-VYXN5YIJ.js +0 -44
  90. package/dist/chunk-3GPU3JOW.js +0 -24
  91. package/dist/chunk-3HJTOINK.js +0 -1
  92. package/dist/chunk-4SWPNARR.js +0 -5
  93. package/dist/chunk-6LTDJKIL.js +0 -138
  94. package/dist/chunk-FROOMUJ7.js +0 -11
  95. package/dist/chunk-HRLPFUPB.js +0 -3
  96. package/dist/chunk-HZZNJHRH.js +0 -1
  97. package/dist/chunk-JEM73E4C.js +0 -21
  98. package/dist/chunk-L5XA5MLK.js +0 -108
  99. package/dist/chunk-OGXU7QFW.js +0 -12
  100. package/dist/chunk-RCHCT7AO.js +0 -6
  101. package/dist/chunk-RDQ7OXUA.js +0 -1026
  102. package/dist/chunk-RL626E7Q.js +0 -13
  103. package/dist/chunk-RMJZOKHY.js +0 -10
  104. package/dist/chunk-TNBCUZVE.js +0 -1
  105. package/dist/chunk-WRBXEZFN.js +0 -1
  106. package/dist/chunk-XWSWYMGM.js +0 -2
  107. package/dist/chunk-Z2353HNE.js +0 -9
  108. package/dist/chunk-ZUCYJAQH.js +0 -29
  109. package/dist/icons/heroicons.d.ts +0 -6
  110. package/dist/icons/heroicons.js +0 -1
  111. package/dist/icons/lucide.d.ts +0 -6
  112. package/dist/icons/lucide.js +0 -1
@@ -1,6 +1,6 @@
1
1
  "use client";
2
- import{TabStrip as e}from"../chunk-JEM73E4C.js";import{useShellLanguage as t}from"../chunk-GG7AE6OC.js";import"../chunk-HRLPFUPB.js";import{confirm as n}from"../chunk-ZUCYJAQH.js";import"../chunk-RMJZOKHY.js";import"../chunk-AFYQTVZO.js";import"../chunk-HZZNJHRH.js";import"../chunk-X4FJ54PP.js";import{useBrowserLayoutEffect as r}from"../chunk-D65T4H6J.js";import"../chunk-6LTDJKIL.js";import{useShellStrings as i}from"../chunk-TNBCUZVE.js";import"../chunk-C3QOHMR6.js";import"../chunk-XWSWYMGM.js";import*as l from"react";import{createContext as c,memo as a,useRef as s,useEffect as o,useMemo as u,useId as y,useCallback as d,useReducer as f,useState as p,useContext as k}from"react";import{useLocation as m,useNavigate as b}from"react-router-dom";import{jsx as v,Fragment as h,jsxs as g}from"react/jsx-runtime";var K=c(null),F=c(null),T=12;var M=(e,t)=>e.filter(e=>e!==t);function N(e,t){return[...t.map(t=>e.find(e=>e.key===t)).filter(e=>Boolean(e)),...e.filter(e=>!t.includes(e.key))]}function A(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=j(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=j(n,e[0].key)}return n}(l,n)}function C(e){let t={...e,activeKey:null};return t.closing&&(t=j(t,t.closing)),t}function j(e,t){return{...e,tabs:e.tabs.filter(e=>e.key!==t),mounted:M(e.mounted,t),dirty:M(e.dirty,t),activeKey:e.activeKey===t?null:e.activeKey,closing:e.closing===t?null:e.closing}}function w(e,t){switch(t.type){case"visit":return A(e,t.entry,t.maxTabs);case"transient":return C(e);case"close":{let n=e;for(const e of t.keys)n=j(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]:M(e.dirty,t)}}(e,t.key,t.dirty)}}var I=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 L({children:e,resolve:l,pinned:c=[],storageKey:a,maxTabs:k=12,enabled:h=!0,confirmDiscard:g}){const F=m(),T=b(),M=i().pageTabs,j=y(),L=s(l);L.current=l;const x=d(e=>{const t=L.current(e);return t?{key:t.key??e.pathname,path:I(e),title:t.title}:null},[]),{language:E}=t(),[J,H]=f(w,void 0,()=>{const e=function(e,t,n){if(!e)return[];let r;try{r=JSON.parse(e)}catch{return[]}const i=r;if(!i||1!==i.v||!Array.isArray(i.tabs))return[];const l=Boolean(n&&"string"==typeof i.lang&&i.lang!==n),c=[];for(const e of i.tabs){if(!e||"string"!=typeof e.path||!e.path.startsWith("/")||e.path.startsWith("//"))continue;const n=e.path.indexOf("#"),r=n>=0?e.path.slice(0,n):e.path,i=t(r);if(!i||c.some(e=>e.key===i.key))continue;const a=!l&&"page"===e.titleFrom&&"string"==typeof e.title&&e.title;c.push({key:i.key,path:r,title:a||i.title,titleFrom:a?"page":"route",pinned:!1,lastActive:0})}return c}(function(e){if(!e)return null;try{return localStorage.getItem(e)}catch{return null}}(a),e=>x(O(e)),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:N(r,n)}}({tabs:[],activeKey:null,mounted:[],dirty:[],closing:null,clock:0,tabs:e},c.map(e=>x(O(e))).filter(e=>Boolean(e)));const n=h?x(F):null;return t=n?A(t,n,k):C(t),t}),R=s(J);R.current=J;const S=s(/* @__PURE__ */new Map),$=h?x(F):null,B=$?.key??null;r(()=>{if(!h)return;const e=x(F);e?(S.current.set(e.key,F),H({type:"visit",entry:e,maxTabs:k})):H({type:"transient"})},[F,h,k,x]),o(()=>{const e=new Set(J.tabs.map(e=>e.key));for(const t of S.current.keys())e.has(t)||S.current.delete(t)},[J.tabs]);const D=u(()=>function(e,t){const n={v:1,...t?{lang:t}:{},tabs:e.tabs.filter(t=>t.key!==e.closing).map(({key:e,path:t,title:n,titleFrom:r})=>({key:e,path:t,title:n,titleFrom:r}))};return JSON.stringify(n)}(J,E),[J,E]);o(()=>{if(a)try{localStorage.setItem(a,D)}catch{}},[D,a]);const P=J.dirty.length>0;o(()=>{if(!P)return;const e=e=>{e.preventDefault(),e.returnValue=""};return window.addEventListener("beforeunload",e),()=>window.removeEventListener("beforeunload",e)},[P]);const Z=s(/* @__PURE__ */new Map),W=d((e,t)=>{let n=Z.current.get(e);return void 0===n&&(n=Z.current.size,Z.current.set(e,n)),`${j}-page-${t}-${n}`},[j]),Y=d(e=>g?g(e):n({title:M.discardTitle,message:1===e.length?M.discardOne:M.discardCount?.(e.length)??`${e.length} ${M.discardMany}`,confirmLabel:M.discardConfirm,cancelLabel:M.keepEditing,variant:"warning"}),[g,M]),G=d(()=>{const e=R.current;return e.tabs.find(e=>e.pinned)?.path??"/"},[]),Q=d((e,t,n)=>{const r=R.current,i=r.activeKey;if(!i||!e.includes(i))return void H({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??G()}H({type:"close",keys:e.filter(e=>e!==i),closing:i}),T(l)},[T,G]),U=d(async(e,t={})=>{const n=R.current.tabs.find(t=>t.key===e);return!n||n.pinned?(t.to&&T(t.to),!1):!(!t.force&&R.current.dirty.includes(e)&&!await Y([n]))&&(!!R.current.tabs.some(t=>t.key===e)&&(Q([e],t.to),!0))},[Y,Q,T]),V=d(async(e,t)=>{let n=function(e,t,n){const r=e.tabs.filter(e=>!e.pinned);if("all"===t)return r.map(e=>e.key);if("others"===t)return r.filter(e=>e.key!==n).map(e=>e.key);const i=e.tabs.findIndex(e=>e.key===n);return i<0?[]:e.tabs.slice(i+1).filter(e=>!e.pinned).map(e=>e.key)}(R.current,e,t);const r=R.current.tabs.filter(e=>n.includes(e.key)&&R.current.dirty.includes(e.key));r.length&&!await Y(r)&&(n=n.filter(e=>!r.some(t=>t.key===e)));const i=new Set(R.current.tabs.map(e=>e.key));n=n.filter(e=>i.has(e)),n.length&&Q(n,void 0,"all"===e?null:t)},[Y,Q]),X=d(e=>{const t=R.current.tabs.find(t=>t.key===e);t&&e!==R.current.activeKey&&T(t.path)},[T]),z=d((e,t)=>H({type:"title",key:e,title:t}),[]),q=d((e,t)=>H({type:"dirty",key:e,dirty:t}),[]),[_,ee]=p({}),te=d((e,t)=>{ee(n=>{if((n[e]??null)===t)return n;const r={...n};return t?r[e]=t:delete r[e],r})},[]),ne=d(e=>x(e)?.key??null,[x]),re=d(e=>S.current.get(e),[]),ie=u(()=>h?J.tabs.filter(e=>e.key!==J.closing):[],[h,J.tabs,J.closing]),le=u(()=>({enabled:h,state:J,currentKey:B,resolve:l,keyFor:ne,locationFor:re,idFor:W,activate:X,close:U,closeMany:V,setTitle:z,setDirty:q,copies:_,setCopy:te,visibleTabs:ie}),[h,J,B,l,ne,re,W,X,U,V,z,q,_,te,ie]);/* @__PURE__ */
3
- return v(K.Provider,{value:le,children:e})}var x=l.Activity,E=Boolean(x);function J({active:e,children:t}){return x?/* @__PURE__ */v(x,{mode:e?"visible":"hidden",children:t}):/* @__PURE__ */v(h,{children:t})}var H=a(function({tabKey:e,active:t,location:n,render:i,className:l,panelId:c,tabId:a}){const y=s(null),d=s(t),f=s(/* @__PURE__ */new Map);r(()=>{const e=d.current;if(d.current=t,t&&!e)for(const[e,[t,n]]of f.current)e.isConnected?(e.scrollTop=t,e.scrollLeft=n):f.current.delete(e)},[t]),o(()=>{const e=y.current;if(!e)return;const t=e=>{if(!d.current)return;const t=e.target;t&&"number"==typeof t.scrollTop&&f.current.set(t,[t.scrollTop,t.scrollLeft])};return e.addEventListener("scroll",t,!0),()=>e.removeEventListener("scroll",t,!0)},[]);const p=u(()=>({key:e,activeRef:d}),[e]);/* @__PURE__ */
4
- return v("div",{ref:y,role:c?"tabpanel":void 0,id:c,"aria-labelledby":a,hidden:!t,style:t?void 0:{display:"none"},className:l,"data-page-tab":e,children:/* @__PURE__ */v(F.Provider,{value:p,children:/* @__PURE__ */v(J,{active:t,children:i(n)})})})},(e,t)=>e.active===t.active&&e.location===t.location&&e.className===t.className&&e.panelId===t.panelId&&e.tabId===t.tabId&&(!t.active||e.render===t.render)),R="\0transient";function S({children:e,frameClassName:t}){const n=k(K),r=m();if(!n||!n.enabled)/* @__PURE__ */
5
- return v("div",{className:t,children:e(r)},R);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__ */g(h,{children:[s.map(n=>{const i=n===l,s=i?r:c(n);return s?/* @__PURE__ */v(H,{tabKey:n,active:i,location:s,render:e,className:t,panelId:a(n,"panel"),tabId:a(n,"tab")},n):null}),!l&&/* @__PURE__ */v(H,{tabKey:R,active:!0,location:r,render:e,className:t},R)]})}function $({className:t,activeClassName:n,end:r}){const l=k(K),c=i().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 v(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:r})}var B={enabled:!1,tabs:[],activeKey:null,activate:()=>{},close:async()=>!1,closeOthers:async()=>{},closeRight:async()=>{},closeAll:async()=>{}};function D(){const e=k(K);return e&&e.enabled?{enabled:!0,tabs:e.visibleTabs,activeKey:e.currentKey,activate:e.activate,close:e.close,closeOthers:t=>e.closeMany("others",t),closeRight:t=>e.closeMany("right",t),closeAll:()=>e.closeMany("all",null)}:B}function P(){const e=k(K),t=k(F),n=b();return{key:e?.enabled&&t?t.key:null,close:d(async(r={})=>e?.enabled&&t&&e.state.tabs.some(e=>e.key===t.key)?e.close(t.key,r):(r.to&&n(r.to),!1),[e,t,n])}}function Z(e){const t=k(K),n=k(F),r=t?.enabled?t.setTitle:void 0,i=n?.key;o(()=>{r&&i&&e&&r(i,e)},[r,i,e])}function W(e){const t=k(K),n=k(F),r=t?.enabled?t.setCopy:void 0,i=n?.key;o(()=>{if(r&&i)return r(i,e||null),()=>r(i,null)},[r,i,e])}function Y(e){const t=k(K),n=k(F),r=t?.enabled?t.setDirty:void 0;o(()=>{if(r&&n)return r(n.key,e),()=>{n.activeRef.current&&r(n.key,!1)}},[r,n,e])}export{T as DEFAULT_MAX_TABS,E as PAGE_TABS_PAUSE_HIDDEN,$ as PageTabBar,S as PageTabsOutlet,L as PageTabsProvider,O as parseTabPath,P as usePageTab,W as usePageTabCopy,Y as usePageTabDirty,Z as usePageTabTitle,D as usePageTabs};
2
+ import{TabStrip as e}from"../chunk-CXJQ42XT.js";import{useShellLanguage as t}from"../chunk-5K76RQML.js";import"../chunk-I2H2CKID.js";import{confirm as n}from"../chunk-DBXZS7OA.js";import"../chunk-ZEIKSMFR.js";import"../chunk-UVBK6YSR.js";import"../chunk-7IQ3B77H.js";import"../chunk-FIEA5CGB.js";import{useBrowserLayoutEffect as r}from"../chunk-D65T4H6J.js";import{useShellStrings as i}from"../chunk-K6DKX55N.js";import"../chunk-C3QOHMR6.js";import"../chunk-2SSRFEOZ.js";import*as l from"react";import{createContext as c,memo as a,useRef as s,useEffect as o,useMemo as u,useId as y,useCallback as d,useReducer as f,useState as p,useContext as k}from"react";import{useLocation as m,useNavigate as b}from"react-router-dom";import{jsx as v,Fragment as h,jsxs as g}from"react/jsx-runtime";var K=c(null),F=c(null),I=12;var T=(e,t)=>e.filter(e=>e!==t);function N(e,t){return[...t.map(t=>e.find(e=>e.key===t)).filter(e=>Boolean(e)),...e.filter(e=>!t.includes(e.key))]}function A(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=M(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=M(n,e[0].key)}return n}(l,n)}function C(e){let t={...e,activeKey:null};return t.closing&&(t=M(t,t.closing)),t}function M(e,t){return{...e,tabs:e.tabs.filter(e=>e.key!==t),mounted:T(e.mounted,t),dirty:T(e.dirty,t),activeKey:e.activeKey===t?null:e.activeKey,closing:e.closing===t?null:e.closing}}function j(e,t){switch(t.type){case"visit":return A(e,t.entry,t.maxTabs);case"transient":return C(e);case"close":{let n=e;for(const e of t.keys)n=M(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]:T(e.dirty,t)}}(e,t.key,t.dirty)}}var w=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 S({children:e,resolve:l,pinned:c=[],storageKey:a,maxTabs:k=12,enabled:h=!0,confirmDiscard:g}){const F=m(),I=b(),T=i().pageTabs,M=y(),S=s(l);S.current=l;const x=d(e=>{const t=S.current(e);return t?{key:t.key??e.pathname,path:w(e),title:t.title}:null},[]),{language:L}=t(),[R,B]=f(j,void 0,()=>{const e=function(e,t,n){if(!e)return[];let r;try{r=JSON.parse(e)}catch{return[]}const i=r;if(!i||1!==i.v||!Array.isArray(i.tabs))return[];const l=Boolean(n&&"string"==typeof i.lang&&i.lang!==n),c=[];for(const e of i.tabs){if(!e||"string"!=typeof e.path||!e.path.startsWith("/")||e.path.startsWith("//"))continue;const n=e.path.indexOf("#"),r=n>=0?e.path.slice(0,n):e.path,i=t(r);if(!i||c.some(e=>e.key===i.key))continue;const a=!l&&"page"===e.titleFrom&&"string"==typeof e.title&&e.title;c.push({key:i.key,path:r,title:a||i.title,titleFrom:a?"page":"route",pinned:!1,lastActive:0})}return c}(function(e){if(!e)return null;try{return localStorage.getItem(e)}catch{return null}}(a),e=>x(O(e)),L);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:N(r,n)}}({tabs:[],activeKey:null,mounted:[],dirty:[],closing:null,clock:0,tabs:e},c.map(e=>x(O(e))).filter(e=>Boolean(e)));const n=h?x(F):null;return t=n?A(t,n,k):C(t),t}),D=s(R);D.current=R;const E=s(/* @__PURE__ */new Map),$=h?x(F):null,H=$?.key??null;r(()=>{if(!h)return;const e=x(F);e?(E.current.set(e.key,F),B({type:"visit",entry:e,maxTabs:k})):B({type:"transient"})},[F,h,k,x]),o(()=>{const e=new Set(R.tabs.map(e=>e.key));for(const t of E.current.keys())e.has(t)||E.current.delete(t)},[R.tabs]);const J=u(()=>function(e,t){const n={v:1,...t?{lang:t}:{},tabs:e.tabs.filter(t=>t.key!==e.closing).map(({key:e,path:t,title:n,titleFrom:r})=>({key:e,path:t,title:n,titleFrom:r}))};return JSON.stringify(n)}(R,L),[R,L]);o(()=>{if(a)try{localStorage.setItem(a,J)}catch{}},[J,a]);const Q=R.dirty.length>0;o(()=>{if(!Q)return;const e=e=>{e.preventDefault(),e.returnValue=""};return window.addEventListener("beforeunload",e),()=>window.removeEventListener("beforeunload",e)},[Q]);const X=s(/* @__PURE__ */new Map),Z=d((e,t)=>{let n=X.current.get(e);return void 0===n&&(n=X.current.size,X.current.set(e,n)),`${M}-page-${t}-${n}`},[M]),P=d(e=>g?g(e):n({title:T.discardTitle,message:1===e.length?T.discardOne:T.discardCount?.(e.length)??`${e.length} ${T.discardMany}`,confirmLabel:T.discardConfirm,cancelLabel:T.keepEditing,variant:"warning"}),[g,T]),V=d(()=>{const e=D.current;return e.tabs.find(e=>e.pinned)?.path??"/"},[]),W=d((e,t,n)=>{const r=D.current,i=r.activeKey;if(!i||!e.includes(i))return void B({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()}B({type:"close",keys:e.filter(e=>e!==i),closing:i}),I(l)},[I,V]),z=d(async(e,t={})=>{const n=D.current.tabs.find(t=>t.key===e);return!n||n.pinned?(t.to&&I(t.to),!1):!(!t.force&&D.current.dirty.includes(e)&&!await P([n]))&&(!!D.current.tabs.some(t=>t.key===e)&&(W([e],t.to),!0))},[P,W,I]),G=d(async(e,t)=>{let n=function(e,t,n){const r=e.tabs.filter(e=>!e.pinned);if("all"===t)return r.map(e=>e.key);if("others"===t)return r.filter(e=>e.key!==n).map(e=>e.key);const i=e.tabs.findIndex(e=>e.key===n);return i<0?[]:e.tabs.slice(i+1).filter(e=>!e.pinned).map(e=>e.key)}(D.current,e,t);const r=D.current.tabs.filter(e=>n.includes(e.key)&&D.current.dirty.includes(e.key));r.length&&!await P(r)&&(n=n.filter(e=>!r.some(t=>t.key===e)));const i=new Set(D.current.tabs.map(e=>e.key));n=n.filter(e=>i.has(e)),n.length&&W(n,void 0,"all"===e?null:t)},[P,W]),U=d(e=>{const t=D.current.tabs.find(t=>t.key===e);t&&e!==D.current.activeKey&&I(t.path)},[I]),Y=d((e,t)=>B({type:"title",key:e,title:t}),[]),q=d((e,t)=>B({type:"dirty",key:e,dirty:t}),[]),[_,ee]=p({}),te=d((e,t)=>{ee(n=>{if((n[e]??null)===t)return n;const r={...n};return t?r[e]=t:delete r[e],r})},[]),ne=d(e=>x(e)?.key??null,[x]),re=d(e=>E.current.get(e),[]),ie=u(()=>h?R.tabs.filter(e=>e.key!==R.closing):[],[h,R.tabs,R.closing]),le=u(()=>({enabled:h,state:R,currentKey:H,resolve:l,keyFor:ne,locationFor:re,idFor:Z,activate:U,close:z,closeMany:G,setTitle:Y,setDirty:q,copies:_,setCopy:te,visibleTabs:ie}),[h,R,H,l,ne,re,Z,U,z,G,Y,q,_,te,ie]);/* @__PURE__ */
3
+ return v(K.Provider,{value:le,children:e})}var x=l.Activity,L=Boolean(x);function R({active:e,children:t}){return x?/* @__PURE__ */v(x,{mode:e?"visible":"hidden",children:t}):/* @__PURE__ */v(h,{children:t})}var B=a(function({tabKey:e,active:t,location:n,render:i,className:l,panelId:c,tabId:a}){const y=s(null),d=s(t),f=s(/* @__PURE__ */new Map);r(()=>{const e=d.current;if(d.current=t,t&&!e)for(const[e,[t,n]]of f.current)e.isConnected?(e.scrollTop=t,e.scrollLeft=n):f.current.delete(e)},[t]),o(()=>{const e=y.current;if(!e)return;const t=e=>{if(!d.current)return;const t=e.target;t&&"number"==typeof t.scrollTop&&f.current.set(t,[t.scrollTop,t.scrollLeft])};return e.addEventListener("scroll",t,!0),()=>e.removeEventListener("scroll",t,!0)},[]);const p=u(()=>({key:e,activeRef:d}),[e]);/* @__PURE__ */
4
+ return v("div",{ref:y,role:c?"tabpanel":void 0,id:c,"aria-labelledby":a,hidden:!t,style:t?void 0:{display:"none"},className:l,"data-page-tab":e,children:/* @__PURE__ */v(F.Provider,{value:p,children:/* @__PURE__ */v(R,{active:t,children:i(n)})})})},(e,t)=>e.active===t.active&&e.location===t.location&&e.className===t.className&&e.panelId===t.panelId&&e.tabId===t.tabId&&(!t.active||e.render===t.render)),D="\0transient";function E({children:e,frameClassName:t}){const n=k(K),r=m();if(!n||!n.enabled)/* @__PURE__ */
5
+ return v("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__ */g(h,{children:[s.map(n=>{const i=n===l,s=i?r:c(n);return s?/* @__PURE__ */v(B,{tabKey:n,active:i,location:s,render:e,className:t,panelId:a(n,"panel"),tabId:a(n,"tab")},n):null}),!l&&/* @__PURE__ */v(B,{tabKey:D,active:!0,location:r,render:e,className:t},D)]})}function $({className:t,activeClassName:n,end:r}){const l=k(K),c=i().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 v(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:r})}var H={enabled:!1,tabs:[],activeKey:null,activate:()=>{},close:async()=>!1,closeOthers:async()=>{},closeRight:async()=>{},closeAll:async()=>{}};function J(){const e=k(K);return e&&e.enabled?{enabled:!0,tabs:e.visibleTabs,activeKey:e.currentKey,activate:e.activate,close:e.close,closeOthers:t=>e.closeMany("others",t),closeRight:t=>e.closeMany("right",t),closeAll:()=>e.closeMany("all",null)}:H}function Q(){const e=k(K),t=k(F),n=b();return{key:e?.enabled&&t?t.key:null,close:d(async(r={})=>e?.enabled&&t&&e.state.tabs.some(e=>e.key===t.key)?e.close(t.key,r):(r.to&&n(r.to),!1),[e,t,n])}}function X(e){const t=k(K),n=k(F),r=t?.enabled?t.setTitle:void 0,i=n?.key;o(()=>{r&&i&&e&&r(i,e)},[r,i,e])}function Z(e){const t=k(K),n=k(F),r=t?.enabled?t.setCopy:void 0,i=n?.key;o(()=>{if(r&&i)return r(i,e||null),()=>r(i,null)},[r,i,e])}function P(e){const t=k(K),n=k(F),r=t?.enabled?t.setDirty:void 0;o(()=>{if(r&&n)return r(n.key,e),()=>{n.activeRef.current&&r(n.key,!1)}},[r,n,e])}export{I as DEFAULT_MAX_TABS,L as PAGE_TABS_PAUSE_HIDDEN,$ as PageTabBar,E as PageTabsOutlet,S as PageTabsProvider,O as parseTabPath,Q as usePageTab,Z as usePageTabCopy,P as usePageTabDirty,X as usePageTabTitle,J as usePageTabs};
package/dist/pdf/index.js CHANGED
@@ -1,2 +1,2 @@
1
1
  "use client";
2
- import{lazy as r}from"react";var e=r(()=>import("../PdfViewer-KW5B44AX.js"));export{e as PdfViewer};
2
+ import{lazy as r}from"react";var e=r(()=>import("../PdfViewer-226I3LSD.js"));export{e as PdfViewer};
@@ -6,11 +6,12 @@ import { ComponentType, SVGProps } from 'react';
6
6
  *
7
7
  * Harness UI-24: every icon comes through the shell. A component asks for an
8
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/efficient`, its other looks in
11
- * `…/efficient-looks`, and the deprecated `…/heroicons` and `…/lucide`), so a
12
- * host bundles only the ones it registers, and the icon packages behind the
13
- * deprecated two stay optional peers.
9
+ * with the drawing the active set has for that meaning. The default set is the
10
+ * one Lewis picked (`efficient-shell/icons/efficient`, its other looks in
11
+ * `…/efficient-looks`). Another set is one module that exports an `IconSet` and
12
+ * is registered beside it: the theme may choose it (`icon_set`, Customization's
13
+ * Icons row), and any meaning it does not draw falls back to the default's
14
+ * drawing, so a new set may start with a handful of meanings.
14
15
  *
15
16
  * This module is the one piece of state every entry shares. It imports nothing
16
17
  * at run time, not even React, so the kit can reach it without gaining a peer
@@ -20,9 +21,9 @@ import { ComponentType, SVGProps } from 'react';
20
21
  type IconDrawing = ComponentType<SVGProps<SVGSVGElement>>;
21
22
  /** One icon set, as a host registers it. */
22
23
  interface IconSet {
23
- /** The key the theme stores: `'heroicons'`. */
24
+ /** The key the theme stores: `'efficient'`. */
24
25
  name: string;
25
- /** What Customization calls it: `'Heroicons'`. */
26
+ /** What Customization calls it: `'Efficient'`. */
26
27
  label: string;
27
28
  /** Meaning to drawing. A set need not draw every meaning. */
28
29
  icons: Readonly<Record<string, IconDrawing>>;
@@ -73,8 +74,10 @@ declare function iconSets(): {
73
74
  * set that draws only some meanings never leaves a hole; then any set that has
74
75
  * it, which is where an editor's own glyphs are found whatever the theme chose.
75
76
  *
76
- * With a `look` (`'solid'`), that look is looked for first in the same order;
77
- * a meaning no set draws in that look gets its default drawing, never nothing.
77
+ * With a `look` (`'solid'`), each set is asked for that look first and then
78
+ * for its default drawing, in the same order: a meaning no set draws in that
79
+ * look gets a default drawing, never nothing, and a chosen set that draws the
80
+ * meaning keeps its own style.
78
81
  */
79
82
  declare function resolveIcon(name: string, look?: string): IconDrawing | undefined;
80
83
 
@@ -64,6 +64,11 @@ interface ShellStrings {
64
64
  noMatches: string;
65
65
  allSelected: string;
66
66
  clear: string;
67
+ /** The row at the top of an open multi-pick list that clears every choice. */
68
+ clearAll: string;
69
+ /** A closed multi-pick field too narrow for even one label and a "+N":
70
+ * how many are chosen ("6 selected"). */
71
+ selectedCount: (count: number) => string;
67
72
  /** aria-label of a TagInput chip's remove button: `"{remove} {label}"`. */
68
73
  remove: string;
69
74
  /** The whole chip label, when the word order is not "{remove} {label}".
@@ -0,0 +1,39 @@
1
+ export { C as ClientTelemetry, a as ClientTelemetryConfig, s as startClientTelemetry } from '../client-DLm3Fvbc.js';
2
+
3
+ interface WebVitalEvent {
4
+ type: 'vital';
5
+ name: 'LCP' | 'INP' | 'CLS' | 'FCP' | 'TTFB';
6
+ value: number;
7
+ route: string;
8
+ navigation: string;
9
+ device: string;
10
+ }
11
+ type ErrorSource = 'onerror' | 'unhandledrejection' | 'boundary';
12
+ interface ClientErrorEvent {
13
+ type: 'error';
14
+ source: ErrorSource;
15
+ name: string;
16
+ message: string;
17
+ frames: string[];
18
+ route: string;
19
+ count: number;
20
+ }
21
+ type TelemetryEvent = WebVitalEvent | ClientErrorEvent;
22
+ /** What the intake takes: one batch. */
23
+ interface TelemetryBatch {
24
+ app: string;
25
+ release: string;
26
+ shell_version: string;
27
+ events: TelemetryEvent[];
28
+ }
29
+
30
+ /**
31
+ * The device class a vital is filed under: desktop, tablet or mobile.
32
+ *
33
+ * Read from the viewport and the primary pointer, not the user agent: a
34
+ * figure is about the layout the page drew and the input it waited for, and
35
+ * both of those are what the page itself sees.
36
+ */
37
+ type DeviceClass = 'desktop' | 'tablet' | 'mobile';
38
+
39
+ export type { ClientErrorEvent, DeviceClass, ErrorSource, TelemetryBatch, TelemetryEvent, WebVitalEvent };
@@ -0,0 +1 @@
1
+ export{startClientTelemetry}from"../chunk-R5VRLW5Z.js";import"../chunk-SBF5A6XV.js";import"../chunk-KNUR2UEG.js";
@@ -1,8 +1,9 @@
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 AlignmentGrid, k as AlignmentGridProps, l as AlignmentPoint, m as AngleScale, n as AppUpdateBanner, o as AppUpdateBannerProps, p as AttachButton, q as AttachButtonProps, r as AttachmentDropZone, s as AttachmentDropZoneProps, t as AttachmentList, u as AttachmentListProps, v as AuthScreen, w as AuthScreenProps, x as Avatar, y as AvatarGroup, z as AvatarGroupProps, B as AvatarProps, D as AvatarSize, E as AvatarStatus, F as BORDER_WIDTHS, G as BackgroundVariant, H as BandScale, I as Banner, J as BannerEmphasis, K as BannerProps, L as BannerTone, M as BarChart, N as BarChartProps, O as BorderRole, Q as BoxPlotBox, R as BoxPlotChart, T as BoxPlotChartProps, U as BrandAssetEditor, V as BrandAssetEditorProps, W as BrandAssetPreview, X as BrandMark, Y as BrandMarkProps, Z as BrandMarkSlot, _ as BrandMarkSurface, $ as BrandMarkTreatment, a0 as BreadcrumbItem, a1 as Breadcrumbs, a2 as BreadcrumbsProps, a3 as BudgetBar, a4 as BudgetBarProps, a5 as BudgetState, a6 as Button, a7 as ButtonClassesOptions, a8 as ButtonProps, a9 as ButtonSize, aa as ButtonVariant, ab as CHART_INK, ac as CMD_A, ad as CMD_DOT, ae as CMD_ENTER, af as CMD_K, ag as CMD_S, ah as COLUMN_COUNT_MAX, ai as COLUMN_COUNT_WIDTHS, aj as COLUMN_SHARES_EQUAL, ak as COLUMN_SHARE_MIN, al as CONTROL_HEIGHTS, am as CORNERS, an as Calendar, ao as CalendarMode, ap as CalendarProps, aq as Candle, ar as CandlestickChart, as as CandlestickChartProps, at as Card, au as CardPadding, av as CardProps, aw as CartesianPlot, ax as CartesianPlotProps, ay as CellStyle, az as ChartBackgroundVariant, aA as ChartBrush, aB as ChartBrushProps, aC as ChartCurve, aD as ChartDefs, aE as ChartDefsProps, aF as ChartDot, aG as ChartDotProps, aH as ChartDotVariant, aI as ChartFillVariant, aJ as ChartFrame, aK as ChartFrameProps, aL as ChartHighlightProvider, aM as ChartLegendEntry, aN as ChartLegendSwatch, aO as ChartRange, aP as ChartReferenceLine, aQ as ChartRevealDirection, aR as ChartSkeleton, aS as ChartSkeletonProps, aT as ChartStatusTone, aU as ChartStrokeVariant, aV as ChartTooltip, aW as ChartTooltipProps, aX as ChartTooltipRow, aY as ChatTemplate, aZ as Checkbox, a_ as CheckboxProps, a$ as CheckoutTemplate, b0 as ChordChart, b1 as ChordChartProps, b2 as ColorPicker, b3 as ColorPickerPanel, b4 as ColorPickerPanelProps, b5 as ColorPickerProps, b6 as ColorPreset, b7 as ColorSwatch, b8 as ColorSwatchProps, b9 as ColorSwatchSize, ba as ColoredBadge, bb as ColoredBadgeProps, bc as ColumnChart, bd as ColumnChartProps, C as ColumnDef, be as ColumnSeries, bf as ColumnShares, bg as ComposerAttachments, bh as ComposerAttachmentsProps, bi as ConfirmProvider, bj as ContainerFillChart, bk as ContainerFillChartProps, bl as ContainerFillItem, bm as ContextMenu, bn as ContextMenuPoint, bo as ContextMenuProps, bp as ContextMenuState, bq as ControlSize, br as CornerOption, bs as Corners, bt as CornersInput, bu as CornersInputProps, bv as CountBadge, bw as CountBadgeProps, bx as CountBadgeTone, by as Curve, bz as DAY_MS, bA as DashboardTemplate, bB as DataTable, bC as DataTableColumn, bD as DataTableColumnGroup, bE as DataTableHeader, bF as DataTablePage, bG as DataTableProps, bH as DataTableRowLink, bI as DataTableRowProps, bJ as DatePicker, bK as DatePickerProps, bL as DateRangePicker, bM as DateRangePickerProps, bN as DateTimePicker, bO as DateTimePickerProps, bP as DescriptionColumns, bQ as DescriptionItem, bR as DescriptionList, bS as DescriptionListProps, bT as Dialog, bU as DialogProps, bV as DialogSize, bW as DisplayChipItem, bX as DisplayChips, bY as DisplayChipsProps, bZ as Divider, b_ as DividerProps, b$ as DividerSpacing, c0 as DonutChart, c1 as DonutChartProps, c2 as DonutSegment, c3 as Drawer, c4 as DrawerProps, c5 as DrawerSide, c6 as DrawerSize, c7 as DropdownMenu, c8 as DropdownMenuAlign, c9 as DropdownMenuCheckboxItem, ca as DropdownMenuDividerItem, cb as DropdownMenuEntry, cc as DropdownMenuItem, cd as DropdownMenuLabelItem, ce as DropdownMenuLinkItem, cf as DropdownMenuProps, cg as DropdownMenuRadioItem, ch as DropdownMenuSide, ci as DropdownPositionOptions, cj as ELEVATION_LEVELS, ck as ENGLISH, cl as ENTER, cm as EditableGrid, cn as EditableGridProps, co as ElevationLevel, cp as EmailTemplate, cq as EmptyState, cr as EmptyStateProps, cs as EmptyValue, ct as EmptyValueProps, cu as ErrorBoundary, cv as ErrorBoundaryProps, cw as ErrorPage, cx as ErrorPageProps, cy as FONT_WEIGHTS, cz as FileIntake, cA as FilePicker, cB as FilePickerProps, cC as FillVariant, cD as FontWeightRole, cE as FormError, cF as FormErrorSummary, cG as FormErrorSummaryProps, cH as FormField, cI as FormFieldProps, cJ as FormLayoutPage, cK as FunnelChart, cL as FunnelChartProps, cM as FunnelStage, cN as GLASS_DIVIDER, cP as GROUP_COLORS, cQ as GROUP_COLORS_SOLID, cR as GalleryTemplate, cS as Gap, cT as GlassOptions, cU as GlobalSearch, cV as GlobalSearchProps, cW as Grid, cX as GridCols, cY as GridColumn, cZ as GridProps, c_ as HeatmapChart, c$ as HeatmapChartProps, d0 as HelpCenter, d1 as HelpCenterDoc, d2 as HelpCenterProps, d3 as HexInput, d4 as HistogramBin, d5 as HistogramChart, d6 as HistogramChartProps, d7 as Hsv, d8 as INPUT_BASE, d9 as INPUT_SIZES, da as IconButton, db as IconButtonClassesOptions, dc as IconButtonProps, dd as IconRail, de as IconRailButton, df as IconRailButtonProps, dg as IconRailLabels, dh as IconRailLabelsShown, di as IconRailOrientation, dj as IconRailProps, dk as ImageFocusPoint, dl as ImageFocusPointProps, dm as Inline, dn as InlineProps, dp as Input, dq as InputNumber, dr as InputNumberProps, ds as InputProps, dt as InputSize, du as Justify, dv as Kanban, dw as KanbanColumn, dx as KanbanProps, dy as Kbd, dz as KbdProps, dA as KbdSize, dB as Label, dC as LabelClassesOptions, dD as LabelProps, dE as LadderScale, dF as LanguagePanel, dG as LanguagePanelProps, dH as LanguageSelect, dI as LanguageSelectProps, dJ as LineChart, dK as LineChartProps, dL as LineChartSeries, dM as LinearScale, dN as LinkFilter, dO as LinkFilterField, dP as LinkKindChoice, dQ as LinkOption, dR as LinkOptionGroup, dS as LinkPicker, dT as LinkPickerFieldProps, dU as LinkPickerProps, dV as LinkPickerWindowProps, dW as LinkRules, dX as LinkTarget, dY as ListDrop, dZ as ListFooter, d_ as ListLoadError, d$ as ListLoadErrorProps, e0 as ListMove, e1 as ListRow, e2 as ListRowProps, e3 as LoadingSpinner, e4 as LoadingSpinnerProps, e5 as MAX_FRACTION_DIGITS, e6 as MENU_MAX_HEIGHT, e7 as MOD, e8 as MOTION, e9 as MOTION_DURATIONS, ea as Markdown, ea as MarkdownLite, eb as MarkdownLiteProps, eb as MarkdownProps, ec as MediaUploadField, ed as MediaUploadFieldProps, ee as MediaUploadGrid, ef as MediaUploadGridItem, eg as MediaUploadGridProps, eh as MenuPos, ei as Meter, ej as MeterProps, ek as MetricBar, el as MetricBarProps, em as Milestone, en as MilestoneKind, eo as MilestoneTimeline, ep as MilestoneTimelineProps, eq as MotionSpeed, es as NEXT_CHUNK_PATH_PREFIX, et as NativeSelect, eu as NumericKeypad, ev as NumericKeypadProps, ew as OVERLAY_OPEN_EVENT, ex as POPUP_MAX_WIDTH, ey as POST_PRODUCTION_STATUSES, ez as PageHeader, eA as PageHeaderProps, P as PaginatedResponse, eB as Pagination, eC as PaginationProps, eD as PaperclipGlyph, eE as Paragraph, eF as ParagraphProps, eG as PieChart, eH as PieChartProps, eI as PieSegment, eJ as PlotGeometry, eK as Point, eL as Popover, eM as PopoverAlign, eN as PopoverProps, eO as PopoverRenderProps, eP as PopoverSide, eQ as PopupMenu, eR as PopupMenuDivider, eS as PopupMenuItem, eT as PopupMenuItemProps, eU as PopupMenuLabel, eV as PopupMenuProps, eW as PopupSubmenu, eX as PopupSubmenuProps, eY as PortalBrandingContextValue, eZ as PortalBrandingProvider, e_ as PortalBrandingProviderProps, e$ as ProductionTimeline, f0 as ProductionTimelineProps, f1 as ProductionTimelineSnapshot, f2 as ProgressItem, f3 as PublicPortal, f4 as PublicPortalBranding, f5 as RADAR_SERIES_CAP, f6 as RADIUS_ROLES, f7 as RadarAxis, f8 as RadarChart, f9 as RadarChartProps, fa as RadarSeries, fb as RadialBarChart, fc as RadialBarChartProps, fd as RadialBarRow, fe as Radio, ff as RadioGroup, fg as RadioGroupOption, fh as RadioGroupOrientation, fi as RadioGroupProps, fj as RadioProps, fk as RadiusRole, fl as Range, fm as RangeChart, fn as RangeChartProps, fo as RangeRow, fp as RankedBars, fq as RankedBarsProps, fr as RankedBarsRow, fs as ResizeHandle, ft as ResizeHandleProps, fu as ResizeHandleSide, fv as ResolvedPortalBrandAsset, fw as Result, fx as ResultProps, fy as ResultStatus, fz as RevealDirection, fA as SCATTER_SERIES_CAP, fB as SERIES_SLOT_COUNT, fC as SERIES_VARS, fD as SHELL_LANGUAGE_STORAGE_KEY, fE as SHIFT, fF as SPACING_ROLES, fG as SPACING_SCALE, fH as STAGES, fI as STALE_CHUNK_RELOAD_COOLDOWN_MS, fJ as STALE_CHUNK_RELOAD_KEY, fK as STATUS_VARS, fL as SankeyChart, fM as SankeyChartProps, fN as SankeyLink, fO as SankeyNode, fP as ScatterChart, fQ as ScatterChartProps, fR as ScatterPoint, fS as ScatterSeries, S as SearchConfig, fT as SearchListRoute, fU as SearchProvider, fV as SearchQuickAction, fW as SearchResponse, fX as SearchResult, fY as SearchableItem, fZ as SearchableOption, f_ as SearchableOptionGroup, f$ as SearchableSelect, g0 as SearchableSelectBaseProps, g1 as SearchableSelectMultipleProps, g2 as SearchableSelectProps, g3 as Segmented, g4 as SegmentedOption, g5 as SegmentedProps, g6 as SegmentedSize, g7 as Select, g8 as SelectBaseProps, g9 as SelectItem, ga as SelectMultipleProps, gb as SelectOption, gc as SelectOptionGroup, gd as SelectProps, ge as SemanticGroup, gf as SettingRow, gg as SettingRowProps, gh as SeverityTone, gk as ShellLanguage, gl as ShellLanguageProvider, gm as ShellLanguageState, gn as ShellPrefsAdapter, go as ShellPrefsProvider, gp as SidebarActionButton, gq as SidebarActionButtonProps, gr as SidebarGroupLabel, gs as SidebarGroupLabelProps, gt as SidebarLayout, gu as SidebarLayoutProps, gv as SidebarNavGroup, gw as SidebarNavGroupProps, gx as SidebarNavItem, gy as SidebarNavItemProps, gz as Skeleton, gA as SkeletonProps, gB as SkeletonVariant, gC as Slider, gD as SliderProps, gE as SliderSize, gF as Snippet, gG as SnippetProps, gH as SnippetSize, gI as SnippetVariant, a as SortState, gJ as SortableList, gK as SortableListProps, gL as SortableListSpacing, gM as SpacingRole, gN as SpacingStep, gO as Sparkline, gP as SparklineProps, gQ as Stack, gR as StackProps, gS as StaleChunkReloadOptions, gT as StatCard, gU as StatCardProps, gV as StatTile, gW as StatTileProps, gX as Statistic, gY as StatisticProps, gZ as StatisticSize, g_ as StatisticTone, g$ as StatusBadge, h0 as StatusBadgeProvider, h1 as StatusEmphasis, h2 as StepItem, h3 as Stepper, h4 as StepperProps, h5 as StrokeVariant, h6 as SunburstChart, h7 as SunburstChartProps, h8 as SunburstNode, h9 as Switch, ha as SwitchProps, hb as SwitchSize, hc as TYPE_SCALE, hd as TabItem, he as Tabs, hf as TabsProps, hg as TagInput, hh as TagInputOption, hi as TagInputProps, hj as Text, hk as TextLinkField, hl as TextLinkFieldProps, hm as TextProps, hn as TextSize, ho as TextTone, hp as TextWeight, hq as Textarea, hr as TextareaProps, hs as Theme, ht as TileButton, hu as TileButtonProps, hv as TileSize, hw as TimeAgo, hx as TimeAgoProps, hy as TimePicker, hz as TimePickerProps, hA as TimeSeriesChart, hB as TimeSeriesChartProps, hC as TimeSeriesSeries, hD as TimelineMarker, hE as TimelineMarkerKind, hF as TimelineReport, hG as TimelineScrubProgress, hH as TimelineTrack, hI as TimelineTrackItem, hJ as TimelineTrackKind, hK as TimelineTrackPending, hL as TimelineTrackPhase, hM as TimelineTrackPlayback, hN as TimelineTrackProps, hO as TimelineTrackThumb, hP as Title, hQ as TitleLevel, hR as TitleProps, hS as ToastOptions, hT as ToastPlacement, hU as Tooltip, hV as TooltipProps, hW as TopNav, hX as TopNavItem, hY as TopNavProps, hZ as Tree, h_ as TreeDrop, h$ as TreeEmptySlot, i0 as TreeEmptySlotProps, i1 as TreeGroup, i2 as TreeGroupLabel, i3 as TreeGroupProps, i4 as TreeMove, i5 as TreeProps, i6 as TreeRow, i7 as TreeRowProps, i8 as TreeSeam, i9 as TreeSeamProps, ia as TreemapChart, ib as TreemapChartProps, ic as TreemapItem, id as TreemapTile, ie as TypeStep, ig as UseAppUpdateOptions, ih as UseContextMenu, ii as UseProductionTimelineOpts, ij as VERSION, ik as VITE_PRELOAD_ERROR_EVENT, il as WaterfallChart, im as WaterfallChartProps, io as WaterfallStep, ip as WidthsBar, iq as WidthsBarProps, ir as ZLayer, is as Z_LAYERS, it as angleScale, iu as appendKey, iv as applyCorners, iw as applyIconSet, ix as applyThemePrefs, iy as arcPath, iz as areaBetween, iA as areaFrom, iB as autoHighlightIndex, iC as backspace, iD as bandScale, iE as binValues, iF as budgetState, iG as bumpPath, iH as buttonClasses, iI as calcOverall, iJ as calcReportOverall, iK as colorFill, iL as colorSwatchClasses, iM as columnSharesWidths, iN as confirm, iO as confirmDestructive, iP as curvePath, iQ as dashFor, iS as dismissPopups, iT as fillFor, iU as fillId, iV as fmtSliderDate, iW as fromDateKey, iX as glassStyle, iY as glowId, iZ as groundId, i_ as groupColors, i$ as hexToHsv, j0 as highlightOpacity, j1 as hsvToHex, j2 as iconButtonClasses, j3 as inputClasses, j4 as installStaleChunkReload, j5 as isMac, j6 as isSafeLinkHref, j7 as isSeverityTone, j8 as isSpacingStep, j9 as isStaleChunkError, jb as labelClasses, jc as ladderScale, jd as languageSelectWidth, je as leavesContextMenuAlone, jf as linearPath, jg as linearScale, jh as logScale, ji as maskId, jj as matchShellLanguage, jk as mediaFileName, jl as monotonePath, jm as niceMax, jn as openGlobalSearch, jo as parseHexColor, jp as polygonPoints, jq as popupBounds, jr as prompt, js as pushRecentSearch, jt as radiusScale, ju as readSavedShellLanguage, jv as registerModalEscapeInterceptor, jw as resolveBrandMarkTreatment, jx as resolveColumnShares, jy as resolveColumnWidths, jz as resolveCorners, jA as resolvePortalBrandAsset, jB as resolveSeriesColor, jC as resolveShellLanguage, jD as resolveTheme, jE as sanitizeRecentSearches, jF as saveShellLanguage, jG as seriesColor, jH as severityOf, jI as splinePath, jJ as squarify, jK as stagger, jL as stepPath, jM as tabButtonId, jN as tabPanelId, jO as toDateKey, jP as toDayMs, jQ as toISODate, jR as toast, jS as useAppUpdate, jT as useClickOutside, jU as useConfirm, jV as useContextMenu, jW as useDebouncedValue, jX as useDropdownPosition, jY as useFocusTrap, jZ as useHighlight, j_ as useIsMobile, j$ as useLocalStoragePrefs, k0 as usePlotWidth, k1 as usePortalBranding, k2 as useProductionTimeline, k3 as useScrollLock, k4 as useShellLanguage, k5 as useShellPrefs, k6 as useStatusLabel, k7 as useTheme } from '../index-BgM75MC6.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 AlignmentGrid, k as AlignmentGridProps, l as AlignmentPoint, m as AngleScale, n as AppUpdateBanner, o as AppUpdateBannerProps, p as AttachButton, q as AttachButtonProps, r as AttachmentDropZone, s as AttachmentDropZoneProps, t as AttachmentList, u as AttachmentListProps, v as AuthScreen, w as AuthScreenProps, x as Avatar, y as AvatarGroup, z as AvatarGroupProps, B as AvatarProps, D as AvatarSize, E as AvatarStatus, F as BORDER_WIDTHS, G as BackgroundVariant, H as BandScale, I as Banner, J as BannerEmphasis, K as BannerProps, L as BannerTone, M as BarChart, N as BarChartProps, O as BorderRole, Q as BoxPlotBox, R as BoxPlotChart, T as BoxPlotChartProps, U as BrandAssetEditor, V as BrandAssetEditorProps, W as BrandAssetPreview, X as BrandMark, Y as BrandMarkProps, Z as BrandMarkSlot, _ as BrandMarkSurface, $ as BrandMarkTreatment, a0 as BreadcrumbItem, a1 as Breadcrumbs, a2 as BreadcrumbsProps, a3 as BudgetBar, a4 as BudgetBarProps, a5 as BudgetState, a6 as Button, a7 as ButtonClassesOptions, a8 as ButtonProps, a9 as ButtonSize, aa as ButtonVariant, ab as CHART_INK, ac as CMD_A, ad as CMD_DOT, ae as CMD_ENTER, af as CMD_K, ag as CMD_S, ah as COLUMN_COUNT_MAX, ai as COLUMN_COUNT_WIDTHS, aj as COLUMN_SHARES_EQUAL, ak as COLUMN_SHARE_MIN, al as CONTROL_HEIGHTS, am as CORNERS, an as Calendar, ao as CalendarMode, ap as CalendarProps, aq as Candle, ar as CandlestickChart, as as CandlestickChartProps, at as Card, au as CardPadding, av as CardProps, aw as CardTone, ax as CartesianPlot, ay as CartesianPlotProps, az as CellStyle, aA as ChartBackgroundVariant, aB as ChartBrush, aC as ChartBrushProps, aD as ChartCurve, aE as ChartDefs, aF as ChartDefsProps, aG as ChartDot, aH as ChartDotProps, aI as ChartDotVariant, aJ as ChartFillVariant, aK as ChartFrame, aL as ChartFrameProps, aM as ChartHighlightProvider, aN as ChartLegendEntry, aO as ChartLegendSwatch, aP as ChartRange, aQ as ChartReferenceLine, aR as ChartRevealDirection, aS as ChartSkeleton, aT as ChartSkeletonProps, aU as ChartStatusTone, aV as ChartStrokeVariant, aW as ChartTooltip, aX as ChartTooltipProps, aY as ChartTooltipRow, aZ as ChatTemplate, a_ as Checkbox, a$ as CheckboxProps, b0 as CheckoutTemplate, b1 as ChordChart, b2 as ChordChartProps, b3 as ColorPicker, b4 as ColorPickerPanel, b5 as ColorPickerPanelProps, b6 as ColorPickerProps, b7 as ColorPreset, b8 as ColorSwatch, b9 as ColorSwatchProps, ba as ColorSwatchSize, bb as ColoredBadge, bc as ColoredBadgeProps, bd as ColumnChart, be as ColumnChartProps, C as ColumnDef, bf as ColumnSeries, bg as ColumnShares, bh as ComposerAttachments, bi as ComposerAttachmentsProps, bj as ConfirmProvider, bk as ContainerFillChart, bl as ContainerFillChartProps, bm as ContainerFillItem, bn as ContextMenu, bo as ContextMenuPoint, bp as ContextMenuProps, bq as ContextMenuState, br as ControlSize, bs as CornerOption, bt as Corners, bu as CornersInput, bv as CornersInputProps, bw as CountBadge, bx as CountBadgeProps, by as CountBadgeTone, bz as Curve, bA as DAY_MS, bB as DashboardTemplate, bC as DataTable, bD as DataTableColumn, bE as DataTableColumnGroup, bF as DataTableHeader, bG as DataTablePage, bH as DataTableProps, bI as DataTableRowLink, bJ as DataTableRowProps, bK as DatePicker, bL as DatePickerProps, bM as DateRangePicker, bN as DateRangePickerProps, bO as DateTimePicker, bP as DateTimePickerProps, bQ as DescriptionColumns, bR as DescriptionItem, bS as DescriptionList, bT as DescriptionListProps, bU as Dialog, bV as DialogProps, bW as DialogSize, bX as DisplayChipItem, bY as DisplayChips, bZ as DisplayChipsProps, b_ as Divider, b$ as DividerProps, c0 as DividerSpacing, c1 as DonutChart, c2 as DonutChartProps, c3 as DonutSegment, c4 as Drawer, c5 as DrawerProps, c6 as DrawerSide, c7 as DrawerSize, c8 as DropdownMenu, c9 as DropdownMenuAlign, ca as DropdownMenuCheckboxItem, cb as DropdownMenuDividerItem, cc as DropdownMenuEntry, cd as DropdownMenuItem, ce as DropdownMenuLabelItem, cf as DropdownMenuLinkItem, cg as DropdownMenuProps, ch as DropdownMenuRadioItem, ci as DropdownMenuSide, cj as DropdownPositionOptions, ck as ELEVATION_LEVELS, cl as ENGLISH, cm as ENTER, cn as EditableGrid, co as EditableGridProps, cp as ElevationLevel, cq as EmailTemplate, cr as EmptyState, cs as EmptyStateProps, ct as EmptyValue, cu as EmptyValueProps, cv as ErrorBoundary, cw as ErrorBoundaryProps, cx as ErrorPage, cy as ErrorPageProps, cz as FONT_WEIGHTS, cA as FileIntake, cB as FilePicker, cC as FilePickerProps, cD as FillVariant, cE as FontWeightRole, cF as FormError, cG as FormErrorSummary, cH as FormErrorSummaryProps, cI as FormField, cJ as FormFieldProps, cK as FormLayoutPage, cL as FunnelChart, cM as FunnelChartProps, cN as FunnelStage, cO as GLASS_DIVIDER, cQ as GROUP_COLORS, cR as GROUP_COLORS_SOLID, cS as GalleryTemplate, cT as Gap, cU as GlassOptions, cV as GlobalSearch, cW as GlobalSearchProps, cX as Grid, cY as GridCols, cZ as GridColumn, c_ as GridProps, c$ as HeatmapChart, d0 as HeatmapChartProps, d1 as HelpCenter, d2 as HelpCenterDoc, d3 as HelpCenterProps, d4 as HexInput, d5 as HistogramBin, d6 as HistogramChart, d7 as HistogramChartProps, d8 as Hsv, d9 as INPUT_BASE, da as INPUT_SIZES, db as IconButton, dc as IconButtonClassesOptions, dd as IconButtonProps, de as IconRail, df as IconRailButton, dg as IconRailButtonProps, dh as IconRailLabels, di as IconRailLabelsShown, dj as IconRailOrientation, dk as IconRailProps, dl as ImageFocusPoint, dm as ImageFocusPointProps, dn as Inline, dp as InlineProps, dq as Input, dr as InputNumber, ds as InputNumberProps, dt as InputProps, du as InputSize, dv as Justify, dw as Kanban, dx as KanbanColumn, dy as KanbanProps, dz as Kbd, dA as KbdProps, dB as KbdSize, dC as KbdTone, dD as Label, dE as LabelClassesOptions, dF as LabelProps, dG as LadderScale, dH as LanguagePanel, dI as LanguagePanelProps, dJ as LanguageSelect, dK as LanguageSelectProps, dL as LineChart, dM as LineChartProps, dN as LineChartSeries, dO as LinearScale, dP as LinkFilter, dQ as LinkFilterField, dR as LinkKindChoice, dS as LinkOption, dT as LinkOptionGroup, dU as LinkPicker, dV as LinkPickerFieldProps, dW as LinkPickerProps, dX as LinkPickerWindowProps, dY as LinkRules, dZ as LinkTarget, d_ as ListDrop, d$ as ListFooter, e0 as ListLoadError, e1 as ListLoadErrorProps, e2 as ListMove, e3 as ListRow, e4 as ListRowProps, e5 as LoadingSpinner, e6 as LoadingSpinnerProps, e7 as MAX_FRACTION_DIGITS, e8 as MENU_MAX_HEIGHT, e9 as MOD, ea as MOTION, eb as MOTION_DURATIONS, ec as Markdown, ec as MarkdownLite, ed as MarkdownLiteProps, ed as MarkdownProps, ee as MediaUploadField, ef as MediaUploadFieldProps, eg as MediaUploadGrid, eh as MediaUploadGridItem, ei as MediaUploadGridProps, ej as MenuPos, ek as Meter, el as MeterProps, em as MetricBar, en as MetricBarProps, eo as Milestone, ep as MilestoneKind, eq as MilestoneTimeline, er as MilestoneTimelineProps, es as MotionSpeed, eu as NEXT_CHUNK_PATH_PREFIX, ev as NativeSelect, ew as NumericKeypad, ex as NumericKeypadProps, ey as OVERLAY_OPEN_EVENT, ez as POPUP_MAX_WIDTH, eA as POST_PRODUCTION_STATUSES, eB as PageHeader, eC as PageHeaderProps, P as PaginatedResponse, eD as Pagination, eE as PaginationProps, eF as PaperclipGlyph, eG as Paragraph, eH as ParagraphProps, eI as PieChart, eJ as PieChartProps, eK as PieSegment, eL as PlotGeometry, eM as Point, eN as Popover, eO as PopoverAlign, eP as PopoverProps, eQ as PopoverRenderProps, eR as PopoverSide, eS as PopupMenu, eT as PopupMenuDivider, eU as PopupMenuItem, eV as PopupMenuItemProps, eW as PopupMenuLabel, eX as PopupMenuProps, eY as PopupSubmenu, eZ as PopupSubmenuProps, e_ as PortalBrandingContextValue, e$ as PortalBrandingProvider, f0 as PortalBrandingProviderProps, f1 as ProductionTimeline, f2 as ProductionTimelineProps, f3 as ProductionTimelineSnapshot, f4 as ProgressItem, f5 as PublicPortal, f6 as PublicPortalBranding, f7 as RADAR_SERIES_CAP, f8 as RADIUS_ROLES, f9 as RadarAxis, fa as RadarChart, fb as RadarChartProps, fc as RadarSeries, fd as RadialBarChart, fe as RadialBarChartProps, ff as RadialBarRow, fg as Radio, fh as RadioGroup, fi as RadioGroupOption, fj as RadioGroupOrientation, fk as RadioGroupProps, fl as RadioProps, fm as RadiusRole, fn as Range, fo as RangeChart, fp as RangeChartProps, fq as RangeRow, fr as RankedBars, fs as RankedBarsProps, ft as RankedBarsRow, fu as ResizeHandle, fv as ResizeHandleOrientation, fw as ResizeHandleProps, fx as ResizeHandleSide, fy as ResizeHandleStackSide, fz as ResolvedPortalBrandAsset, fA as Result, fB as ResultProps, fC as ResultStatus, fD as RevealDirection, fE as SCATTER_SERIES_CAP, fF as SERIES_SLOT_COUNT, fG as SERIES_VARS, fH as SHELL_LANGUAGE_STORAGE_KEY, fI as SHIFT, fJ as SPACING_ROLES, fK as SPACING_SCALE, fL as STAGES, fM as STALE_CHUNK_RELOAD_COOLDOWN_MS, fN as STALE_CHUNK_RELOAD_KEY, fO as STATUS_VARS, fP as SankeyChart, fQ as SankeyChartProps, fR as SankeyLink, fS as SankeyNode, fT as ScatterChart, fU as ScatterChartProps, fV as ScatterPoint, fW as ScatterSeries, S as SearchConfig, fX as SearchListRoute, fY as SearchProvider, fZ as SearchQuickAction, f_ as SearchResponse, f$ as SearchResult, g0 as SearchableItem, g1 as SearchableOption, g2 as SearchableOptionGroup, g3 as SearchableSelect, g4 as SearchableSelectBaseProps, g5 as SearchableSelectMultipleProps, g6 as SearchableSelectProps, g7 as Segmented, g8 as SegmentedOption, g9 as SegmentedProps, ga as SegmentedSize, gb as Select, gc as SelectBaseProps, gd as SelectItem, ge as SelectMultipleProps, gf as SelectOption, gg as SelectOptionGroup, gh as SelectProps, gi as SemanticGroup, gj as SettingRow, gk as SettingRowProps, gl as SeverityTone, go as ShellLanguage, gp as ShellLanguageProvider, gq as ShellLanguageState, gr as ShellPrefsAdapter, gs as ShellPrefsProvider, gt as SidebarActionButton, gu as SidebarActionButtonProps, gv as SidebarGroupLabel, gw as SidebarGroupLabelProps, gx as SidebarLayout, gy as SidebarLayoutProps, gz as SidebarNavGroup, gA as SidebarNavGroupProps, gB as SidebarNavItem, gC as SidebarNavItemProps, gD as Skeleton, gE as SkeletonProps, gF as SkeletonVariant, gG as Slider, gH as SliderProps, gI as SliderSize, gJ as Snippet, gK as SnippetProps, gL as SnippetSize, gM as SnippetVariant, a as SortState, gN as SortableList, gO as SortableListProps, gP as SortableListSpacing, gQ as SpacingRole, gR as SpacingStep, gS as Sparkline, gT as SparklineProps, gU as Stack, gV as StackProps, gW as StaleChunkReloadOptions, gX as StatCard, gY as StatCardProps, gZ as StatTile, g_ as StatTileProps, g$ as Statistic, h0 as StatisticProps, h1 as StatisticSize, h2 as StatisticTone, h3 as StatusBadge, h4 as StatusBadgeProvider, h5 as StatusEmphasis, h6 as StepItem, h7 as Stepper, h8 as StepperProps, h9 as StrokeVariant, ha as SunburstChart, hb as SunburstChartProps, hc as SunburstNode, hd as Switch, he as SwitchProps, hf as SwitchSize, hg as TYPE_SCALE, hh as TabItem, hi as Tabs, hj as TabsProps, hk as TagInput, hl as TagInputOption, hm as TagInputProps, hn as Text, ho as TextLinkField, hp as TextLinkFieldProps, hq as TextProps, hr as TextSize, hs as TextTone, ht as TextWeight, hu as Textarea, hv as TextareaProps, hw as Theme, hx as TileButton, hy as TileButtonProps, hz as TileSize, hA as TimeAgo, hB as TimeAgoProps, hC as TimePicker, hD as TimePickerProps, hE as TimeSeriesChart, hF as TimeSeriesChartProps, hG as TimeSeriesSeries, hH as TimelineMarker, hI as TimelineMarkerKind, hJ as TimelineReport, hK as TimelineScrubProgress, hL as TimelineTrack, hM as TimelineTrackItem, hN as TimelineTrackKind, hO as TimelineTrackPending, hP as TimelineTrackPhase, hQ as TimelineTrackPlayback, hR as TimelineTrackProps, hS as TimelineTrackThumb, hT as Title, hU as TitleLevel, hV as TitleProps, hW as ToastOptions, hX as ToastPlacement, hY as Tooltip, hZ as TooltipProps, h_ as TopNav, h$ as TopNavItem, i0 as TopNavProps, i1 as Tree, i2 as TreeDrop, i3 as TreeEmptySlot, i4 as TreeEmptySlotProps, i5 as TreeGroup, i6 as TreeGroupLabel, i7 as TreeGroupProps, i8 as TreeMove, i9 as TreeProps, ia as TreeRow, ib as TreeRowProps, ic as TreeSeam, id as TreeSeamProps, ie as TreemapChart, ig as TreemapChartProps, ih as TreemapItem, ii as TreemapTile, ij as TypeStep, ik as UseAppUpdateOptions, il as UseContextMenu, im as UseProductionTimelineOpts, io as VERSION, ip as VITE_PRELOAD_ERROR_EVENT, iq as WaterfallChart, ir as WaterfallChartProps, is as WaterfallStep, it as WidthsBar, iu as WidthsBarProps, iv as ZLayer, iw as Z_LAYERS, ix as angleScale, iy as appendKey, iz as applyCorners, iA as applyIconSet, iB as applyThemePrefs, iC as arcPath, iD as areaBetween, iE as areaFrom, iF as autoHighlightIndex, iG as backspace, iH as bandScale, iI as binValues, iJ as budgetState, iK as bumpPath, iL as buttonClasses, iM as calcOverall, iN as calcReportOverall, iO as colorFill, iP as colorSwatchClasses, iQ as columnSharesWidths, iR as confirm, iS as confirmDestructive, iT as curvePath, iU as dashFor, iW as dismissPopups, iX as fillFor, iY as fillId, iZ as fmtSliderDate, i_ as fromDateKey, i$ as glassStyle, j0 as glowId, j1 as groundId, j2 as groupColors, j3 as hexToHsv, j4 as highlightOpacity, j5 as hsvToHex, j6 as iconButtonClasses, j7 as inputClasses, j8 as installStaleChunkReload, j9 as isMac, ja as isSeverityTone, jb as isSpacingStep, jc as isStaleChunkError, je as labelClasses, jf as ladderScale, jg as languageSelectWidth, jh as leavesContextMenuAlone, ji as linearPath, jj as linearScale, jk as logScale, jl as maskId, jm as matchShellLanguage, jn as mediaFileName, jo as monotonePath, jp as niceMax, jq as openGlobalSearch, jr as parseHexColor, js as polygonPoints, jt as popupBounds, ju as prompt, jv as pushRecentSearch, jw as radiusScale, jx as readSavedShellLanguage, jy as registerModalEscapeInterceptor, jz as resolveBrandMarkTreatment, jA as resolveColumnShares, jB as resolveColumnWidths, jC as resolveCorners, jD as resolvePortalBrandAsset, jE as resolveSeriesColor, jF as resolveShellLanguage, jG as resolveTheme, jH as sanitizeRecentSearches, jI as saveShellLanguage, jJ as seriesColor, jK as severityOf, jL as splinePath, jM as squarify, jN as stagger, jO as stepPath, jP as tabButtonId, jQ as tabPanelId, jR as toDateKey, jS as toDayMs, jT as toISODate, jU as toast, jV as useAppUpdate, jW as useClickOutside, jX as useConfirm, jY as useContextMenu, jZ as useDebouncedValue, j_ as useDropdownPosition, j$ as useFocusTrap, k0 as useHighlight, k1 as useIsMobile, k2 as useLocalStoragePrefs, k3 as usePlotWidth, k4 as usePortalBranding, k5 as useProductionTimeline, k6 as useScrollLock, k7 as useShellLanguage, k8 as useShellPrefs, k9 as useStatusLabel, ka as useTheme } from '../index-D5bms_uA.js';
2
2
  export { C as CurrencyFormat, D as DATE_FORMAT_OPTIONS, a as DateFormatKey, E as EMPTY_VALUE, F as FOCAL_DEFAULT, b as FOCAL_NUDGE_COARSE, c as FOCAL_NUDGE_STEP, d as FocalPoint, e as FormatDateOptions, f as FormatMoneyOptions, T as TZ_AUTO, g as TimeAgoOptions, h as currencyDecimals, i as currencySymbol, j as firstDayOfWeek, k as focalFromRect, l as formatBytes, m as formatDate, n as formatDateTime, o as formatFocal, p as formatMoney, q as formatTime, r as getUserDateFormat, s as getUserTimezone, t as nudgeFocal, u as parseFocal, v as setCurrencyFormats, w as setUserDateFormat, x as setUserTimezone, y as syncTimezoneFromProfile, z as timeAgo } from '../index-CHufemKB.js';
3
+ export { isSafeLinkHref } from '../markup/index.js';
3
4
  export { FileIntakeAlert, FileIntakeLimits, FileIntakeOptions, FileRejection, FileRejectionReason, acceptsFile, useFileIntake } from '../file-intake/index.js';
4
5
  export { ICON_NAMES, Icon, IconName, IconProps, IconTone, isIconName } from '../icons/index.js';
5
- 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-J-TU7zKx.js';
6
- export { D as DEFAULT_SHELL_STRINGS, a as ShellStrings, S as ShellStringsOverride, b as ShellStringsProvider, u as useShellLocale, c as useShellStrings } from '../strings-BVB64Nck.js';
6
+ 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-Dw6QO2Ch.js';
7
+ export { D as DEFAULT_SHELL_STRINGS, a as ShellStrings, S as ShellStringsOverride, b as ShellStringsProvider, u as useShellLocale, c as useShellStrings } from '../strings-fYzxZPn4.js';
7
8
  import 'react';
8
9
  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,AlignmentGrid,AppUpdateBanner,AttachButton,AttachmentDropZone,AttachmentList,AuthScreen,Avatar,AvatarGroup,BORDER_WIDTHS,Banner,BarChart,BoxPlotChart,BrandAssetEditor,BudgetBar,CHART_INK,COLUMN_COUNT_MAX,COLUMN_COUNT_WIDTHS,COLUMN_SHARES_EQUAL,COLUMN_SHARE_MIN,CONTROL_HEIGHTS,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,CornersInput,CountBadge,DAY_MS,DashboardTemplate,DataTable,DataTablePage,DatePicker_default as DatePicker,DateRangePicker,DateTimePicker_default as DateTimePicker,DescriptionList,DisplayChips,Divider,DonutChart,Drawer,DropdownMenu,ELEVATION_LEVELS,EmailTemplate,EmptyState,EmptyValue,ErrorBoundary,ErrorPage,FONT_WEIGHTS,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,ImageFocusPoint,Inline,Input_default as Input,InputNumber_default as InputNumber,Kanban,Label,LanguagePanel,LanguageSelect,LineChart,LinkPicker,ListFooter,ListLoadError,ListRow,MAX_FRACTION_DIGITS,MOTION,MOTION_DURATIONS,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,RADIUS_ROLES,RadarChart,RadialBarChart,Radio_default as Radio,RadioGroup,RangeChart,RankedBars,SCATTER_SERIES_CAP,SERIES_SLOT_COUNT,SERIES_VARS,SPACING_ROLES,SPACING_SCALE,STAGES,STATUS_VARS,SankeyChart,ScatterChart,SearchableSelect,Segmented,Select_default as Select,SettingRow,SidebarActionButton,SidebarGroupLabel,SidebarNavGroup,SidebarNavItem,Skeleton,Slider,Snippet,SortableList,Sparkline,Stack,StatCard,StatTile,Statistic,StatusBadge,StatusBadgeProvider,Stepper,SunburstChart,Switch_default as Switch,TYPE_SCALE,Tabs,TagInput,Text,TextLinkField,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,WidthsBar,angleScale,appendKey,applyCorners,applyIconSet,applyThemePrefs,arcPath,areaBetween,areaFrom,autoHighlightIndex,backspace,bandScale,binValues,budgetState,bumpPath,calcOverall,calcReportOverall,colorFill,colorSwatchClasses,columnSharesWidths,curvePath,dashFor,fillFor,fillId,fmtSliderDate,fromKey as fromDateKey,glowId,groundId,groupColors,hexToHsv,highlightOpacity,hsvToHex,inputClasses,isSafeLinkHref,isSeverityTone,isSpacingStep,labelClasses,ladderScale,languageSelectWidth,linearPath,linearScale,logScale,maskId,mediaFileName,monotonePath,niceMax,parseHexColor,polygonPoints,radiusScale,resolveColumnShares,resolveColumnWidths,resolveCorners,resolvePortalBrandAsset,resolveSeriesColor,resolveTheme,seriesColor,severityOf,splinePath,squarify,stagger,stepPath,tabButtonId,tabPanelId,toKey as toDateKey,toDayMs,toISODate,useAppUpdate,useClickOutside,useContextMenu,useDebouncedValue,useHighlight,usePlotWidth,usePortalBranding,useProductionTimeline,useStatusLabel,useTheme}from"../chunk-RDQ7OXUA.js";export{Breadcrumbs}from"../chunk-RCHCT7AO.js";export{ResizeHandle,SidebarLayout}from"../chunk-4SWPNARR.js";export{BrandMark,GlobalSearch,openGlobalSearch,pushRecent as pushRecentSearch,resolveBrandMarkTreatment,sanitizeRecent as sanitizeRecentSearches}from"../chunk-SKB6L53D.js";export{EditableGrid}from"../chunk-N3A3GWJI.js";import"../chunk-BR22X7E5.js";export{ENGLISH,SHELL_LANGUAGE_STORAGE_KEY,ShellLanguageProvider,matchShellLanguage,readSavedShellLanguage,resolveShellLanguage,saveShellLanguage,useShellLanguage}from"../chunk-GG7AE6OC.js";export{toast_default as toast}from"../chunk-3HJTOINK.js";export{VERSION}from"../chunk-WRBXEZFN.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-FROOMUJ7.js";import"../chunk-5A7MWTXX.js";export{Button_default as Button,MENU_MAX_HEIGHT,POPUP_MAX_WIDTH,Tooltip,buttonClasses,iconButtonClasses,popupBounds,useDropdownPosition}from"../chunk-OGXU7QFW.js";export{ConfirmProvider,Dialog,confirm,confirmDestructive,prompt,useConfirm,useFocusTrap,useScrollLock}from"../chunk-ZUCYJAQH.js";export{PopupMenu,PopupMenuDivider,PopupMenuItem,PopupMenuLabel,PopupSubmenu,leavesContextMenuAlone}from"../chunk-RMJZOKHY.js";import"../chunk-AFYQTVZO.js";export{GLASS_DIVIDER,glassStyle}from"../chunk-HZZNJHRH.js";export{OVERLAY_OPEN_EVENT,Z_LAYERS,dismissPopups,registerModalEscapeInterceptor}from"../chunk-X4FJ54PP.js";import"../chunk-D65T4H6J.js";import"../chunk-6LTDJKIL.js";export{FOCAL_DEFAULT,FOCAL_NUDGE_COARSE,FOCAL_NUDGE_STEP,focalFromRect,formatFocal,nudgeFocal,parseFocal}from"../chunk-AP2QEJXQ.js";export{DATE_FORMAT_OPTIONS,EMPTY_VALUE,TZ_AUTO,currencyDecimals,currencySymbol,firstDayOfWeek,formatBytes,formatDate,formatDateTime,formatMoney,formatTime,getUserDateFormat,getUserTimezone,setCurrencyFormats,setUserDateFormat,setUserTimezone,syncTimezoneFromProfile,timeAgo}from"../chunk-W32SKK3D.js";export{FileIntakeAlert,acceptsFile,useFileIntake}from"../chunk-CLPJDJH4.js";export{DEFAULT_SHELL_STRINGS,ShellStringsProvider,useShellLocale,useShellStrings}from"../chunk-TNBCUZVE.js";import"../chunk-C3QOHMR6.js";export{ICON_NAMES,isIconName}from"../chunk-WOEFPBQF.js";export{Icon,activeIconSet,iconSets,iconsVersion,registerIconSet,registerIcons,resolveIcon,setDefaultIconSet,setIconSet,subscribeIcons}from"../chunk-XWSWYMGM.js";
2
+ export{APP_UPDATE_POLL_MS,Accordion,AlignmentGrid,AppUpdateBanner,AttachButton,AttachmentDropZone,AttachmentList,AuthScreen,Avatar,AvatarGroup,BORDER_WIDTHS,Banner,BarChart,BoxPlotChart,BrandAssetEditor,BudgetBar,CHART_INK,COLUMN_COUNT_MAX,COLUMN_COUNT_WIDTHS,COLUMN_SHARES_EQUAL,COLUMN_SHARE_MIN,CONTROL_HEIGHTS,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,CornersInput,CountBadge,DAY_MS,DashboardTemplate,DataTable,DataTablePage,DatePicker_default as DatePicker,DateRangePicker,DateTimePicker_default as DateTimePicker,DescriptionList,DisplayChips,Divider,DonutChart,Drawer,DropdownMenu,ELEVATION_LEVELS,EmailTemplate,EmptyState,EmptyValue,ErrorBoundary,ErrorPage,FONT_WEIGHTS,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,ImageFocusPoint,Inline,Input_default as Input,InputNumber_default as InputNumber,Kanban,Label,LanguagePanel,LanguageSelect,LineChart,LinkPicker,ListFooter,ListLoadError,ListRow,MAX_FRACTION_DIGITS,MOTION,MOTION_DURATIONS,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,RADIUS_ROLES,RadarChart,RadialBarChart,Radio_default as Radio,RadioGroup,RangeChart,RankedBars,SCATTER_SERIES_CAP,SERIES_SLOT_COUNT,SERIES_VARS,SPACING_ROLES,SPACING_SCALE,STAGES,STATUS_VARS,SankeyChart,ScatterChart,SearchableSelect,Segmented,Select_default as Select,SettingRow,SidebarActionButton,SidebarGroupLabel,SidebarNavGroup,SidebarNavItem,Skeleton,Slider,Snippet,SortableList,Sparkline,Stack,StatCard,StatTile,Statistic,StatusBadge,StatusBadgeProvider,Stepper,SunburstChart,Switch_default as Switch,TYPE_SCALE,Tabs,TagInput,Text,TextLinkField,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,WidthsBar,angleScale,appendKey,applyCorners,applyIconSet,applyThemePrefs,arcPath,areaBetween,areaFrom,autoHighlightIndex,backspace,bandScale,binValues,budgetState,bumpPath,calcOverall,calcReportOverall,colorFill,colorSwatchClasses,columnSharesWidths,curvePath,dashFor,fillFor,fillId,fmtSliderDate,fromKey as fromDateKey,glowId,groundId,groupColors,hexToHsv,highlightOpacity,hsvToHex,inputClasses,isSeverityTone,isSpacingStep,labelClasses,ladderScale,languageSelectWidth,linearPath,linearScale,logScale,maskId,mediaFileName,monotonePath,niceMax,parseHexColor,polygonPoints,radiusScale,resolveColumnShares,resolveColumnWidths,resolveCorners,resolvePortalBrandAsset,resolveSeriesColor,resolveTheme,seriesColor,severityOf,splinePath,squarify,stagger,stepPath,tabButtonId,tabPanelId,toKey as toDateKey,toDayMs,toISODate,useAppUpdate,useClickOutside,useContextMenu,useDebouncedValue,useHighlight,usePlotWidth,usePortalBranding,useProductionTimeline,useStatusLabel,useTheme}from"../chunk-PFKMIPZH.js";export{Breadcrumbs}from"../chunk-Q5O5UMJY.js";export{ResizeHandle,SidebarLayout}from"../chunk-5LUN632W.js";export{BrandMark,GlobalSearch,openGlobalSearch,pushRecent as pushRecentSearch,resolveBrandMarkTreatment,sanitizeRecent as sanitizeRecentSearches}from"../chunk-7PGHRG6J.js";export{EditableGrid}from"../chunk-YX2IMURA.js";import"../chunk-BR22X7E5.js";export{isSafeLinkHref}from"../chunk-PJPK2ADX.js";export{ENGLISH,SHELL_LANGUAGE_STORAGE_KEY,ShellLanguageProvider,matchShellLanguage,readSavedShellLanguage,resolveShellLanguage,saveShellLanguage,useShellLanguage}from"../chunk-5K76RQML.js";export{toast_default as toast}from"../chunk-GJ37JCC2.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-HQLAISFX.js";import"../chunk-5A7MWTXX.js";export{Button_default as Button,MENU_MAX_HEIGHT,POPUP_MAX_WIDTH,Tooltip,buttonClasses,iconButtonClasses,popupBounds,useDropdownPosition}from"../chunk-S3LGKIZ3.js";export{ConfirmProvider,Dialog,confirm,confirmDestructive,prompt,useConfirm,useFocusTrap,useScrollLock}from"../chunk-DBXZS7OA.js";export{PopupMenu,PopupMenuDivider,PopupMenuItem,PopupMenuLabel,PopupSubmenu,leavesContextMenuAlone}from"../chunk-ZEIKSMFR.js";import"../chunk-UVBK6YSR.js";export{GLASS_DIVIDER,glassStyle}from"../chunk-7IQ3B77H.js";export{OVERLAY_OPEN_EVENT,Z_LAYERS,dismissPopups,registerModalEscapeInterceptor}from"../chunk-FIEA5CGB.js";import"../chunk-D65T4H6J.js";export{VERSION}from"../chunk-SBF5A6XV.js";import"../chunk-KNUR2UEG.js";export{FOCAL_DEFAULT,FOCAL_NUDGE_COARSE,FOCAL_NUDGE_STEP,focalFromRect,formatFocal,nudgeFocal,parseFocal}from"../chunk-AP2QEJXQ.js";export{DATE_FORMAT_OPTIONS,EMPTY_VALUE,TZ_AUTO,currencyDecimals,currencySymbol,firstDayOfWeek,formatBytes,formatDate,formatDateTime,formatMoney,formatTime,getUserDateFormat,getUserTimezone,setCurrencyFormats,setUserDateFormat,setUserTimezone,syncTimezoneFromProfile,timeAgo}from"../chunk-W32SKK3D.js";export{FileIntakeAlert,acceptsFile,useFileIntake}from"../chunk-UUYPUKP7.js";export{DEFAULT_SHELL_STRINGS,ShellStringsProvider,useShellLocale,useShellStrings}from"../chunk-K6DKX55N.js";import"../chunk-C3QOHMR6.js";export{ICON_NAMES,isIconName}from"../chunk-WOEFPBQF.js";export{Icon,activeIconSet,iconSets,iconsVersion,registerIconSet,registerIcons,resolveIcon,setDefaultIconSet,setIconSet,subscribeIcons}from"../chunk-2SSRFEOZ.js";
package/dist/ui.css CHANGED
@@ -775,7 +775,8 @@ html.rosh-reduce-transparency *::after {
775
775
  * so a selector rewrite of the dark theme touches one short block.
776
776
  */
777
777
  :root {
778
- /* glassStyle() — every menu, popup, listbox and tooltip in the kit. The
778
+ /* glassStyle() — every menu, popup and listbox in the kit; a Tooltip
779
+ bubble is always the solid one (solidSurfaceStyle()). The
779
780
  surface a popup is tinted from (frosted) or painted in (solid), and the
780
781
  stop across the middle of its gradient. Both chain to the ramp, so a host
781
782
  that restyles `--surface` moves its popups with it; one that wants its
@@ -901,10 +902,10 @@ html.rosh-reduce-transparency *::after {
901
902
  * IN NO LAYER, as they were in the portal, so they outrank a utility in the
902
903
  * same class attribute. That is as far as it goes. The dark and accent remaps
903
904
  * of a utility are `!important` and outrank these in turn, so a chip that is
904
- * to follow the theme wears `kbd-submit` and NO palette utility of its own: a
905
- * bare `<kbd>`, as the kit's two are, rather than `Kbd`, which brings gray
906
- * ones. `tests/browser/submitAffordance.check.mjs` reads the computed colours
907
- * under every theme.
905
+ * to follow the theme wears `kbd-submit` and NO palette utility of its own:
906
+ * `<Kbd tone="accent">`, or a bare `<kbd>` — never the default `Kbd`, which
907
+ * brings gray ones. `tests/browser/submitAffordance.check.mjs` reads the
908
+ * computed colours under every theme.
908
909
  */
909
910
  :root {
910
911
  --submit-bg: #2563eb;
@@ -930,30 +931,55 @@ html.rosh-reduce-transparency *::after {
930
931
  background-color: var(--submit-kbd-bg);
931
932
  }
932
933
 
934
+ /*
935
+ * ── Layers ───────────────────────────────────────────────────────────────────
936
+ *
937
+ * The stack order of every shell layer, in hundreds (owner ruling,
938
+ * 2026-10-12), as custom properties for markup: `z-(--z-taskbar)`. The same
939
+ * numbers are `Z_LAYERS` in `src/shell/zLayers.ts`, for inline styles, which
940
+ * explains each layer; `tests/zLayersHundreds.test.ts` keeps the two equal and
941
+ * holds the kit to naming a layer instead of writing its number.
942
+ */
943
+ :root {
944
+ --z-raised: 10;
945
+ --z-sticky: 20;
946
+ --z-in-box: 30;
947
+ --z-snap-preview: 900;
948
+ --z-window: 1000;
949
+ --z-peek: 1999;
950
+ --z-pinned-window: 2000;
951
+ --z-desktop-widget: 2100;
952
+ --z-taskbar: 2200;
953
+ --z-sidebar: 2300;
954
+ --z-taskbar-preview: 2350;
955
+ --z-start-menu: 2400;
956
+ --z-restore-tab: 2500;
957
+ --z-expose: 2600;
958
+ --z-overlay: 2700;
959
+ --z-toast: 2800;
960
+ --z-popup: 2900;
961
+ --z-menu: 2900;
962
+ --z-hint: 3000;
963
+ }
964
+
933
965
  /* ── Tooltip arrow ──────────────────────────────────────────────────────────
934
966
  * `Tooltip`'s pointer: a 10px square turned 45°, standing out of the bubble's
935
967
  * edge that faces the trigger. `data-side` is the side the BUBBLE is on, so
936
968
  * `top` means the bubble is above its trigger and the arrow points down.
937
969
  *
938
- * It is the bubble's own surface. `Tooltip` fills it inline with `glassFill()`
939
- * — the glass as one flat colour: exactly the bubble's opaque surface under
940
- * `rosh-reduce-transparency`, the surface at the glass's own alpha when
941
- * frosted (why not the gradient or a blur of its own: `glassFill` in
942
- * utils/glass.ts) — and gives it the bubble's border as `--rosh-tooltip-edge`.
943
- * So it is solid or frosted with the bubble, light or dark with it, and follows
944
- * whatever a theme or a host does to `--rosh-glass-*` and `--surface`: no
945
- * colour is written here.
970
+ * It is the bubble's own surface. `Tooltip` fills it inline with the bubble's
971
+ * solid fill (`solidSurfaceStyle()` in utils/glass.ts: opaque in both themes,
972
+ * Lewis 2026-10-13) and gives it the bubble's border as `--rosh-tooltip-edge`.
973
+ * So it is light or dark with the bubble, and follows whatever a theme or a
974
+ * host does to `--rosh-glass-*` and `--surface`: no colour is written here.
946
975
  *
947
976
  * Where it meets the bubble, two decisions:
948
- * * It is CLIPPED to its outward half. A frosted bubble is translucent, and
949
- * the inner half of a whole square laid over it would show through as a
950
- * darker diamond inside the bubble.
977
+ * * It is CLIPPED to its outward half, so nothing of it lies inside the
978
+ * bubble.
951
979
  * * Its centre — the clip line — sits on the INNER line of the bubble's 1px
952
980
  * border, so the outward half covers that border where the two meet, and
953
981
  * the border runs round bubble and arrow together: drawn on the arrow's two
954
- * outward edges only. On a solid bubble the join is invisible; on a frosted
955
- * one the hairline under the base shows through faintly, as anything
956
- * behind translucent glass does.
982
+ * outward edges only. On the solid bubble the join is invisible.
957
983
  *
958
984
  * Placed: `Tooltip` writes `left`/`top` as the point on the bubble's outer edge
959
985
  * the arrow is centred on, and each side's margins move the square's centre
@@ -2210,8 +2236,12 @@ html.rosh-reduce-transparency *::after {
2210
2236
 
2211
2237
  Inputs — apply the form-input dark styling, but skip elements that
2212
2238
  explicitly opt into a transparent background (e.g. the start-menu
2213
- search) so they keep their parent's frosted-glass tile. */
2214
- :is([data-theme="dark"], .dark) input:not(.bg-transparent):not([type="checkbox"]):not([type="radio"]):not([type="color"]):not([type="file"]):where(:root:not(.rosh-host-elements) *),
2239
+ search) so they keep their parent's frosted-glass tile, and a filter that
2240
+ is on (`.rosh-field-on`, forms/styles.ts), whose accent border and wash
2241
+ are painted by their own utilities' remaps. Both in ONE `:not()`: a
2242
+ selector list there counts as its most specific item, so adding the
2243
+ second changes this rule's specificity not at all. */
2244
+ :is([data-theme="dark"], .dark) input:not(.bg-transparent, .rosh-field-on):not([type="checkbox"]):not([type="radio"]):not([type="color"]):not([type="file"]):where(:root:not(.rosh-host-elements) *),
2215
2245
  :is([data-theme="dark"], .dark) select:not(.bg-transparent):where(:root:not(.rosh-host-elements) *),
2216
2246
  :is([data-theme="dark"], .dark) textarea:not(.bg-transparent):where(:root:not(.rosh-host-elements) *) {
2217
2247
  background-color: var(--surface-sunken) !important;
@@ -2234,6 +2264,17 @@ html.rosh-reduce-transparency *::after {
2234
2264
  }
2235
2265
  }
2236
2266
 
2267
+ /* ── A field that shows its choice in the placeholder's place ───────────────
2268
+ An open `SearchableSelect` — several values, or a `filter` — is its own
2269
+ search box, so its value is the typed text, empty until the person types.
2270
+ Until then it shows what is chosen where the placeholder goes
2271
+ (`.rosh-field-shows-choice`), in the field's own ink rather than the hint
2272
+ grey: it is the value, not a hint ("All Procedures" would say the filter is
2273
+ off). `inherit` takes the field's colour in every theme — the ink utility's
2274
+ remap, or the bare dark input rule's. `input.` so it outranks the
2275
+ `placeholder:` utility whatever the stylesheet order. */
2276
+ input.rosh-field-shows-choice::placeholder { color: inherit; opacity: 1; }
2277
+
2237
2278
  /* Status badges — tone down brightness in dark mode (matches StatusBadge.tsx semantic groups) */
2238
2279
  :is([data-theme="dark"], .dark) .bg-gray-100.text-gray-800 { background-color: var(--surface-raised) !important; color: var(--ink) !important; }
2239
2280
  :is([data-theme="dark"], .dark) .bg-gray-300.text-gray-800 { background-color: var(--line-strong) !important; color: var(--ink-strongest) !important; }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "efficient-shell",
3
- "version": "5.6.0",
3
+ "version": "6.4.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",
@@ -83,16 +83,6 @@
83
83
  "import": "./dist/icons/index.js",
84
84
  "default": "./dist/icons/index.js"
85
85
  },
86
- "./icons/heroicons": {
87
- "types": "./dist/icons/heroicons.d.ts",
88
- "import": "./dist/icons/heroicons.js",
89
- "default": "./dist/icons/heroicons.js"
90
- },
91
- "./icons/lucide": {
92
- "types": "./dist/icons/lucide.d.ts",
93
- "import": "./dist/icons/lucide.js",
94
- "default": "./dist/icons/lucide.js"
95
- },
96
86
  "./icons/efficient": {
97
87
  "types": "./dist/icons/efficient.d.ts",
98
88
  "import": "./dist/icons/efficient.js",
@@ -103,6 +93,11 @@
103
93
  "import": "./dist/icons/efficient-looks.js",
104
94
  "default": "./dist/icons/efficient-looks.js"
105
95
  },
96
+ "./telemetry": {
97
+ "types": "./dist/telemetry/index.d.ts",
98
+ "import": "./dist/telemetry/index.js",
99
+ "default": "./dist/telemetry/index.js"
100
+ },
106
101
  "./styles.css": "./dist/styles.css",
107
102
  "./ui.css": "./dist/ui.css",
108
103
  "./themes.css": "./dist/themes.css",
@@ -117,12 +112,10 @@
117
112
  ],
118
113
  "peerDependencies": {
119
114
  "@headlessui/react": ">=2",
120
- "@heroicons/react": ">=2",
121
115
  "@tanstack/react-query": ">=5",
122
116
  "axios": ">=1.6",
123
117
  "dxf-viewer": "*",
124
118
  "i18next": ">=26",
125
- "lucide-react": ">=0.577",
126
119
  "mammoth": "*",
127
120
  "maplibre-gl": ">=6",
128
121
  "online-3d-viewer": "*",
@@ -141,7 +134,6 @@
141
134
  },
142
135
  "devDependencies": {
143
136
  "@headlessui/react": "^2.2.10",
144
- "@heroicons/react": "^2.2.0",
145
137
  "@tailwindcss/cli": "^4.2.4",
146
138
  "@tanstack/react-query": "^5.100.5",
147
139
  "@types/jsdom": "^28.0.3",
@@ -153,7 +145,6 @@
153
145
  "esbuild": "^0.27.0",
154
146
  "i18next": "^26.4.3",
155
147
  "jsdom": "^26.1.0",
156
- "lucide-react": "^1.55.0",
157
148
  "mammoth": "^1.8.0",
158
149
  "maplibre-gl": "6.11.2",
159
150
  "online-3d-viewer": "^0.18.0",
@@ -171,6 +162,7 @@
171
162
  "terser": "^5.51.2",
172
163
  "tsup": "^8.0.0",
173
164
  "typescript": "^5.3.0",
165
+ "web-vitals": "6.2.3",
174
166
  "xlsx": "^0.18.5"
175
167
  },
176
168
  "scripts": {
@@ -200,9 +192,6 @@
200
192
  "@headlessui/react": {
201
193
  "optional": true
202
194
  },
203
- "@heroicons/react": {
204
- "optional": true
205
- },
206
195
  "@tanstack/react-query": {
207
196
  "optional": true
208
197
  },
@@ -215,9 +204,6 @@
215
204
  "i18next": {
216
205
  "optional": true
217
206
  },
218
- "lucide-react": {
219
- "optional": true
220
- },
221
207
  "mammoth": {
222
208
  "optional": true
223
209
  },
@@ -1,43 +0,0 @@
1
- import{peekBrowserStartUrl as e,claimBrowserStartUrl as t}from"./chunk-LWLCNQY7.js";import{AboutApp as o}from"./chunk-Z2353HNE.js";import"./chunk-WRBXEZFN.js";import{WindowTitle as r}from"./chunk-L5XA5MLK.js";import"./chunk-FROOMUJ7.js";import"./chunk-DSSLOQDW.js";import"./chunk-5A7MWTXX.js";import"./chunk-OGXU7QFW.js";import"./chunk-HRLPFUPB.js";import{confirm as a}from"./chunk-ZUCYJAQH.js";import"./chunk-RMJZOKHY.js";import"./chunk-AFYQTVZO.js";import"./chunk-HZZNJHRH.js";import"./chunk-X4FJ54PP.js";import"./chunk-D65T4H6J.js";import{ChevronLeftFallback as n,ChevronRightFallback as l,RefreshFallback as s,HomeFallback as i,StarFallback as c,ExternalFallback as m,HelpFallback as d,NoSymbolFallback as u}from"./chunk-6LTDJKIL.js";import"./chunk-TNBCUZVE.js";import"./chunk-C3QOHMR6.js";import{Icon as h}from"./chunk-XWSWYMGM.js";import{useRef as p,useEffect as b,useState as g}from"react";import{jsxs as f,jsx as k,Fragment as x}from"react/jsx-runtime";var w="react-os-shell:browser-bookmarks",y="react-os-shell:browser-homepage",v="https://en.wikipedia.org/wiki/Main_Page",N=[{label:"Wikipedia",url:"https://en.wikipedia.org/wiki/Main_Page"},{label:"DevDocs",url:"https://devdocs.io"},{label:"Example",url:"https://example.com"}],j=new Set(["ac ad ae af ag ai al am ao aq ar as at au aw ax az ba bb bd be bf bg bh bi","bj bm bn bo br bs bt bw by bz ca cc cd cf cg ch ci ck cl cm cn co cr cu cv","cw cx cy cz de dj dk dm do dz ec ee eg er es et eu fi fj fk fm fo fr ga gd","ge gf gg gh gi gl gm gn gp gq gr gs gt gu gw gy hk hm hn hr ht hu id ie il","im in io iq ir is it je jm jo jp ke kg kh ki km kn kp kr kw ky kz la lb lc","li lk lr ls lt lu lv ly ma mc md me mg mh mk ml mm mn mo mp mq mr ms mt mu","mv mw mx my mz na nc ne nf ng ni nl no np nr nu nz om pa pe pf pg ph pk pl","pm pn pr ps pt pw py qa re ro rs ru rw sa sb sc sd se sg sh si sk sl sm sn","so sr ss st su sv sx sy sz tc td tf tg th tj tk tl tm tn to tr tt tv tw tz","ua ug uk us uy uz va vc ve vg vi vn vu wf ws ye yt za zm zw","com net org edu gov mil int info biz name pro app dev xyz online site tech","store shop cloud design digital agency studio media news blog live life","world today email systems solutions services software page link space host","press wiki team group works careers finance capital energy academy"].join(" ").split(" "));function C(e){let t=e.trim();return t?/^[a-z][a-z0-9+.-]*:\/\//i.test(t)?t:function(e){const t=/^([\w-]+\.)+([a-z]{2,})(\/.*)?$/i.exec(e);return null!==t&&j.has(t[2].toLowerCase())}(t)?"https://"+t:"https://duckduckgo.com/?q="+encodeURIComponent(t):""}var z=["duckduckgo.com","developer.mozilla.org","google.com","gmail.com","youtube.com","facebook.com","instagram.com","whatsapp.com","twitter.com","x.com","github.com","gitlab.com","linkedin.com","reddit.com","pinterest.com","amazon.com","amazon.ca","amazon.co.uk","apple.com","icloud.com","microsoft.com","outlook.com","live.com","office.com","netflix.com","spotify.com","paypal.com","stripe.com","chat.openai.com","chatgpt.com","claude.ai"];function W(){if("undefined"==typeof window)return N;try{const e=localStorage.getItem(w);if(!e)return N;const t=JSON.parse(e);if(Array.isArray(t)&&t.every(e=>"string"==typeof e?.url))return t}catch{}return N}function R(){return"undefined"==typeof window?v:localStorage.getItem(y)||v}function L(){const u=p(void 0);void 0===u.current&&(u.current=e()),b(()=>{null!=u.current&&t(u.current)},[]);const x=u.current?C(u.current.url):"",[v,N]=g(R),[j,z]=g(x||v),[L,E]=g(j),[O,D]=g([j]),[M,T]=g(0),[U,F]=g(0),[J,P]=g(W),[X,Z]=g(!1),[A,I]=g(null),q=p(null),B=p(null);b(()=>{try{localStorage.setItem(w,JSON.stringify(J))}catch{}},[J]);const K=e=>{const t=C(e);t&&(z(t),E(t),D(e=>{const o=e.slice(0,M+1);return o.push(t),o}),T(e=>e+1),Z(!1))},Q=()=>{"undefined"!=typeof window&&window.open(j,"_blank","noopener,noreferrer")},G=()=>{const e=A?.trim();e?(P(t=>[...t,{label:e,url:j}]),I(null)):I(null)};b(()=>{if(null===A)return;q.current?.focus(),q.current?.select();const e=e=>{const t=e.target;t?.closest("[data-bookmark-popover]")||I(null)},t=setTimeout(()=>document.addEventListener("mousedown",e),0);return()=>{clearTimeout(t),document.removeEventListener("mousedown",e)}},[null!==A]);const Y=e=>{P(t=>t.filter((t,o)=>o!==e))},$=M>0,_=M<O.length-1,V=J.some(e=>e.url===j),ee="p-1.5 rounded hover:bg-gray-200 transition-colors text-gray-600 disabled:opacity-30";/* @__PURE__ */
2
- return f("div",{className:"relative flex flex-col h-full bg-white",children:[
3
- /* @__PURE__ */k(r,{title:`Browser - ${S(j)}`}),
4
- /* @__PURE__ */k(o,{app:"browser"}),
5
- /* @__PURE__ */f("div",{className:"flex items-center gap-1 px-2 py-1.5 border-b border-gray-200 bg-gray-50 shrink-0",children:[
6
- /* @__PURE__ */k("button",{onClick:()=>{if(M>0){const e=M-1;T(e),z(O[e]),E(O[e]),Z(!1)}},disabled:!$,className:ee,title:"Back",children:/* @__PURE__ */k(h,{name:"chevron-left",fallback:n,className:"h-4 w-4",strokeWidth:2})}),
7
- /* @__PURE__ */k("button",{onClick:()=>{if(M<O.length-1){const e=M+1;T(e),z(O[e]),E(O[e]),Z(!1)}},disabled:!_,className:ee,title:"Forward",children:/* @__PURE__ */k(h,{name:"chevron-right",fallback:l,className:"h-4 w-4",strokeWidth:2})}),
8
- /* @__PURE__ */k("button",{onClick:()=>F(e=>e+1),className:ee,title:"Refresh",children:/* @__PURE__ */k(h,{name:"refresh",fallback:s,className:"h-4 w-4",strokeWidth:1.8})}),
9
- /* @__PURE__ */k("button",{onClick:()=>K(v),className:ee,title:"Home",children:/* @__PURE__ */k(h,{name:"home",fallback:i,className:"h-4 w-4",strokeWidth:1.8})}),
10
- /* @__PURE__ */k("form",{onSubmit:e=>{e.preventDefault(),K(L)},className:"flex-1 flex items-center mx-1",children:/* @__PURE__ */f("div",{className:"flex items-center w-full bg-white border border-gray-300 rounded focus-within:border-blue-400 focus-within:ring-1 focus-within:ring-blue-200",children:[
11
- /* @__PURE__ */k("span",{className:"px-2 text-gray-400 text-xs",children:j.startsWith("https://")?"🔒":"⚠️"}),
12
- /* @__PURE__ */k("input",{type:"text",value:L,onChange:e=>E(e.target.value),onFocus:e=>e.target.select(),className:"flex-1 px-1 py-1 text-sm bg-transparent outline-none font-mono",spellCheck:!1,placeholder:"Enter URL or search…"}),j!==L&&/* @__PURE__ */k("button",{type:"button",onClick:()=>E(j),className:"px-1.5 text-[10px] text-gray-400 hover:text-gray-700",title:"Reset to current URL",children:"×"})]})}),
13
- /* @__PURE__ */k("button",{"data-bookmark-popover":!0,onClick:()=>V?Y(J.findIndex(e=>e.url===j)):void I(S(j)),className:ee+" "+(V?"text-yellow-500":""),title:V?"Remove bookmark":"Add bookmark",children:/* @__PURE__ */k(h,{name:"star",fallback:c,className:"h-4 w-4",fill:V?"currentColor":"none",strokeWidth:1.5})}),
14
- /* @__PURE__ */k("button",{onClick:Q,className:ee,title:"Open in new tab",children:/* @__PURE__ */k(h,{name:"external",fallback:m,className:"h-4 w-4",strokeWidth:1.5})}),
15
- /* @__PURE__ */k("button",{onClick:()=>Z(e=>!e),className:ee,title:"Embedding help",children:/* @__PURE__ */k(h,{name:"help",fallback:d,className:"h-4 w-4",strokeWidth:1.5})})]}),null!==A&&/* @__PURE__ */f("div",{"data-bookmark-popover":!0,className:"absolute right-3 top-12 z-30 w-72 bg-white border border-gray-200 rounded-md shadow-lg p-3",children:[
16
- /* @__PURE__ */k("div",{className:"text-[11px] font-semibold uppercase tracking-wide text-gray-500 mb-1",children:"Bookmark this page"}),
17
- /* @__PURE__ */k("div",{className:"text-[11px] text-gray-400 truncate mb-2 font-mono",title:j,children:j}),
18
- /* @__PURE__ */k("input",{ref:q,type:"text",value:A,onChange:e=>I(e.target.value),onKeyDown:e=>{"Enter"===e.key?G():"Escape"===e.key&&I(null)},placeholder:"Name",className:"w-full text-sm px-2 py-1.5 border border-gray-300 rounded focus:outline-none focus:border-blue-400 focus:ring-1 focus:ring-blue-200"}),
19
- /* @__PURE__ */f("div",{className:"flex justify-end gap-1 mt-2",children:[
20
- /* @__PURE__ */k("button",{onClick:()=>I(null),className:"px-2 py-1 text-xs text-gray-600 hover:bg-gray-100 rounded",children:"Cancel"}),
21
- /* @__PURE__ */k("button",{onClick:G,disabled:!A.trim(),className:"px-2 py-1 text-xs bg-blue-500 text-white rounded hover:bg-blue-600 disabled:opacity-40",children:"Save"})]})]}),
22
- /* @__PURE__ */f("div",{className:"flex items-center gap-0.5 px-2 py-1 border-b border-gray-200 bg-white shrink-0 overflow-x-auto",children:[0===J.length&&/* @__PURE__ */k("span",{className:"text-[11px] text-gray-400 italic px-2",children:"No bookmarks yet — star the address bar to add one."}),J.map((e,t)=>/* @__PURE__ */f("button",{onClick:()=>K(e.url),onContextMenu:async o=>{o.preventDefault();await a({title:"Remove bookmark",message:`"${e.label}" will be removed from your bookmarks.`,confirmLabel:"Remove",variant:"danger"})&&Y(t)},className:"flex items-center gap-1.5 px-2 py-0.5 rounded text-[12px] text-gray-700 hover:bg-gray-100 whitespace-nowrap",title:`${e.url}\n(right-click to remove)`,children:[
23
- /* @__PURE__ */k("img",{src:`https://icons.duckduckgo.com/ip3/${new URL(e.url).hostname}.ico`,alt:"",className:"h-3.5 w-3.5",onError:e=>{e.target.style.visibility="hidden"}}),e.label]},t)),
24
- /* @__PURE__ */k("div",{className:"flex-1"}),
25
- /* @__PURE__ */k("button",{onClick:()=>{N(j);try{localStorage.setItem(y,j)}catch{}},className:"px-2 py-0.5 text-[11px] text-gray-500 hover:text-gray-800",title:"Set current page as homepage",children:"Set as home"})]}),
26
- /* @__PURE__ */k("div",{className:"flex-1 relative min-h-0 bg-gray-50",children:/* @__PURE__ */k(H,{url:j,iframeKey:U,iframeRef:B,openExternal:Q,showHelp:X,dismissHelp:()=>Z(!1)})})]})}function S(e){try{return new URL(e).hostname.replace(/^www\./,"")}catch{return e}}function H({url:e,iframeKey:t,iframeRef:o,openExternal:r,showHelp:a,dismissHelp:n}){const[l,s]=g(!1);b(()=>{s(!1)},[e]);return function(e){try{const t=new URL(e).hostname.toLowerCase();return z.some(e=>t===e||t.endsWith("."+e))}catch{return!1}}(e)&&!l?/* @__PURE__ */k("div",{className:"absolute inset-0 flex items-center justify-center bg-white p-8",children:/* @__PURE__ */f("div",{className:"max-w-md text-center",children:[
27
- /* @__PURE__ */k(h,{name:"no-symbol",fallback:u,className:"h-14 w-14 mx-auto text-gray-300 mb-3",strokeWidth:1.2}),
28
- /* @__PURE__ */f("h3",{className:"text-base font-semibold text-gray-800 mb-1",children:[S(e)," can't be embedded"]}),
29
- /* @__PURE__ */f("p",{className:"text-sm text-gray-500 mb-4",children:["This site sends an ",
30
- /* @__PURE__ */k("span",{className:"font-mono text-xs",children:"X-Frame-Options"})," ","or ",
31
- /* @__PURE__ */k("span",{className:"font-mono text-xs",children:"Content-Security-Policy"})," header that refuses iframe embedding. The browser blocks the load before our app can do anything about it."]}),
32
- /* @__PURE__ */f("div",{className:"flex flex-col items-center gap-2",children:[
33
- /* @__PURE__ */f("button",{onClick:r,className:"px-4 py-2 bg-blue-500 text-white text-sm rounded hover:bg-blue-600 inline-flex items-center gap-2",children:[
34
- /* @__PURE__ */k(h,{name:"external",fallback:m,className:"h-4 w-4",strokeWidth:1.5}),"Open in a new tab"]}),
35
- /* @__PURE__ */k("button",{onClick:()=>s(!0),className:"text-xs text-gray-500 hover:text-gray-800 underline",children:"Try loading it here anyway"})]})]})}):/* @__PURE__ */f(x,{children:[
36
- /* @__PURE__ */k("iframe",{ref:o,src:e,className:"absolute inset-0 w-full h-full bg-white",sandbox:"allow-scripts allow-forms allow-popups allow-popups-to-escape-sandbox allow-same-origin allow-modals",referrerPolicy:"no-referrer-when-downgrade"},t+e),a&&/* @__PURE__ */f("div",{className:"absolute top-2 right-2 max-w-sm bg-white border border-gray-200 rounded-md shadow-lg p-3 text-xs text-gray-700 z-10",children:[
37
- /* @__PURE__ */k("div",{className:"font-medium text-gray-900 mb-1",children:"Why is this page blank?"}),
38
- /* @__PURE__ */f("p",{className:"mb-2",children:["Most major sites (Google, GitHub, banks, news) refuse to be embedded in an iframe via ",
39
- /* @__PURE__ */k("span",{className:"font-mono",children:"X-Frame-Options"})," or Content Security Policy. There's no workaround — the browser blocks the load before our app can do anything."]}),
40
- /* @__PURE__ */f("p",{children:["Hit the ",
41
- /* @__PURE__ */k("span",{className:"font-medium",children:"↗"})," button to open the page in a real new tab. Sites that ",
42
- /* @__PURE__ */k("em",{children:"do"})," allow embedding (Wikipedia, DevDocs, your own apps) work fine in here."]}),
43
- /* @__PURE__ */k("button",{onClick:n,className:"mt-2 text-[11px] text-blue-600 hover:underline",children:"Got it"})]})]})}export{L as default};