efficient-shell 7.45.0 → 7.46.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 (69) hide show
  1. package/README.md +65 -0
  2. package/dist/{Browser-7M22OFSW.js → Browser-VNDS2FSD.js} +14 -14
  3. package/dist/Calculator-YGJ7I5VT.js +29 -0
  4. package/dist/ConfirmDialog-OJLZG4QL.js +1 -0
  5. package/dist/{CurrencyConverter-4QTVWEFM.js → CurrencyConverter-PH75TBDL.js} +6 -6
  6. package/dist/{Documents-LELK7IBM.js → Documents-KSO66MP3.js} +22 -22
  7. package/dist/Files-TGXFG2JF.js +87 -0
  8. package/dist/{Notepad-CLHKYQ34.js → Notepad-OUMZHB2S.js} +14 -14
  9. package/dist/PdfViewer-D4GRPG4G.js +1 -0
  10. package/dist/{PomodoroTimer-L45QS5OR.js → PomodoroTimer-BUKDNFPJ.js} +24 -24
  11. package/dist/{Preview-47BCBIP4.js → Preview-SGYKP5VY.js} +66 -66
  12. package/dist/Sidebar-A3UG662D.js +44 -0
  13. package/dist/{Spreadsheet-6NX5WA4J.js → Spreadsheet-OVBIGF7S.js} +12 -12
  14. package/dist/{Stock-ZZ6AM43M.js → Stock-FB5VIBVY.js} +3 -3
  15. package/dist/{Weather-K3BZD2NX.js → Weather-2MOP5LTK.js} +17 -17
  16. package/dist/{WorldClock-5STYQA56.js → WorldClock-KMMKBE4B.js} +6 -6
  17. package/dist/ai/index.d.ts +271 -0
  18. package/dist/ai/index.js +37 -0
  19. package/dist/ai.css +2 -0
  20. package/dist/apps/index.js +1 -1
  21. package/dist/bin/ui-check.js +1 -1
  22. package/dist/brand.css +1 -1
  23. package/dist/{chunk-JJBFXVOY.js → chunk-3RKM5ZGV.js} +2 -2
  24. package/dist/{chunk-YRLOXHKG.js → chunk-3ZZ2UPNR.js} +1 -1
  25. package/dist/{chunk-DENNF2LM.js → chunk-4FQTMGCA.js} +2 -2
  26. package/dist/{chunk-M2AM6DAA.js → chunk-4QW4I2XQ.js} +1 -1
  27. package/dist/{chunk-GM2ASLIK.js → chunk-4TOFAEAW.js} +29 -29
  28. package/dist/{chunk-G4UIEBPD.js → chunk-BFJRKFOH.js} +13 -13
  29. package/dist/{chunk-HPUHB47C.js → chunk-BMYURA2N.js} +1 -1
  30. package/dist/chunk-CLYMUTNF.js +27 -0
  31. package/dist/{chunk-PR7MCFEU.js → chunk-EZTEOTUD.js} +95 -95
  32. package/dist/{chunk-FQIZMZDX.js → chunk-FBXOKW33.js} +3 -3
  33. package/dist/{chunk-K6YIBHZN.js → chunk-FGPEAC7B.js} +16 -16
  34. package/dist/{chunk-XYG3CVL5.js → chunk-FY3H52BM.js} +1 -1
  35. package/dist/{chunk-ABKFLSHY.js → chunk-G32MW4IF.js} +1 -1
  36. package/dist/{chunk-UNLQRUWP.js → chunk-GFWRYNPX.js} +18 -18
  37. package/dist/{chunk-LK7BWXYY.js → chunk-JFZLYYAN.js} +1 -1
  38. package/dist/{chunk-JXMYF3JR.js → chunk-JGWOY2KV.js} +9 -9
  39. package/dist/chunk-KRAJDKZC.js +1 -0
  40. package/dist/{chunk-UNA3BQJI.js → chunk-MMLU5ZHI.js} +9 -9
  41. package/dist/{chunk-XDR3Y3WU.js → chunk-RNPURBKT.js} +5 -5
  42. package/dist/chunk-RWNNFCSA.js +1 -0
  43. package/dist/chunk-UBXRSOQ6.js +47 -0
  44. package/dist/{chunk-CWCKDF37.js → chunk-VJ6KJYRS.js} +3 -3
  45. package/dist/{chunk-LTEM56OL.js → chunk-WSRZRWN7.js} +1 -1
  46. package/dist/chunk-XGOXX466.js +1020 -0
  47. package/dist/{chunk-3G5TA3IF.js → chunk-YT4B3NSV.js} +4 -3
  48. package/dist/{chunk-HQ74L5MM.js → chunk-YWJD6RUT.js} +1 -1
  49. package/dist/{chunk-X6NYTLYX.js → chunk-ZELMENOO.js} +2 -2
  50. package/dist/icons/index.js +1 -1
  51. package/dist/{index-BWDtKUcA.d.ts → index-BI54lOAz.d.ts} +30 -1
  52. package/dist/index.d.ts +2 -2
  53. package/dist/index.js +682 -682
  54. package/dist/map/index.js +8 -8
  55. package/dist/markdown/index.js +1 -1
  56. package/dist/page-tabs/index.js +5 -5
  57. package/dist/pdf/index.js +1 -1
  58. package/dist/telemetry/index.js +1 -1
  59. package/dist/ui/index.d.ts +1 -1
  60. package/dist/ui/index.js +1 -1
  61. package/package.json +21 -4
  62. package/dist/Calculator-LKWOOCNC.js +0 -29
  63. package/dist/ConfirmDialog-ZT3XT66V.js +0 -1
  64. package/dist/Files-LAWZGFQQ.js +0 -87
  65. package/dist/PdfViewer-VJ743BW7.js +0 -1
  66. package/dist/Sidebar-AYYJL3IJ.js +0 -44
  67. package/dist/chunk-NGWXT4QX.js +0 -1
  68. package/dist/chunk-NZBFQTOB.js +0 -27
  69. package/dist/chunk-WGSCC6QU.js +0 -1050
@@ -0,0 +1,271 @@
1
+ import * as react_jsx_runtime from 'react/jsx-runtime';
2
+ import { UIMessage } from 'ai';
3
+
4
+ /** The conversation the server keeps for this chat. `guestToken` is set for an
5
+ * anonymous (storefront) visitor and is sent back by the host's `getHeaders`. */
6
+ interface AssistantConversation {
7
+ id: string;
8
+ guestToken?: string;
9
+ }
10
+ /** The one transient data part the server sends right after `start`. */
11
+ interface ConversationDataPart {
12
+ id: string;
13
+ guest_token?: string;
14
+ }
15
+ /** Who wrote a restored message. `staff` is a teammate who took the thread over;
16
+ * `system` is a notice the server wrote. Streamed messages carry no source. */
17
+ type MessageSource = 'user' | 'assistant' | 'staff' | 'system';
18
+ interface AssistantMessageMetadata {
19
+ source?: MessageSource;
20
+ }
21
+ /** A step of a server-run plan. `status` is the server's record of what ran. */
22
+ interface PlanStepData {
23
+ id: string;
24
+ position: number;
25
+ title: string;
26
+ status: 'pending' | 'running' | 'done' | 'failed' | 'skipped';
27
+ result_summary: string;
28
+ tool_name: string;
29
+ /** Exactly what the step runs with. */
30
+ input: Record<string, unknown>;
31
+ }
32
+ type PlanStatus = 'proposed' | 'approved' | 'denied' | 'running' | 'completed' | 'failed' | 'expired';
33
+ /** A `data-plan` part: a multi-step write the person approves once. The server
34
+ * sends it whole on every change, with the plan id as the part id, so the
35
+ * latest one replaces the last. */
36
+ interface PlanDataPart {
37
+ id: string;
38
+ approval_id: string;
39
+ status: PlanStatus;
40
+ steps: PlanStepData[];
41
+ }
42
+ type AssistantUIMessage = UIMessage<AssistantMessageMetadata, {
43
+ conversation: ConversationDataPart;
44
+ plan: PlanDataPart;
45
+ }>;
46
+ /** How a tool is named and narrated to the person using the chat. */
47
+ interface ToolLabelSpec {
48
+ /** What the tool does, as a short action ("Check stock"). Used as the title
49
+ * of an approval card and as the fallback for the lines below. */
50
+ label: string;
51
+ /** The status line while the tool runs ("Checking stock"). */
52
+ running?: string;
53
+ /** The status line once it has finished ("Checked stock"). */
54
+ done?: string;
55
+ /** A phrase from the tool's input, appended to the status line and shown on
56
+ * the approval card header ("for PN-1042"). Return `undefined` for none. */
57
+ describe?: (input: Record<string, unknown>) => string | undefined;
58
+ }
59
+ type ToolLabel = string | ToolLabelSpec;
60
+ /** Friendly names by tool name. A tool with no entry gets its name, humanised. */
61
+ type ToolLabels = Record<string, ToolLabel>;
62
+ /** Every word the chat shows. Pass a partial object to translate or reword. */
63
+ interface AssistantChatLabels {
64
+ title: string;
65
+ placeholder: string;
66
+ inputLabel: string;
67
+ send: string;
68
+ stop: string;
69
+ newChat: string;
70
+ open: string;
71
+ close: string;
72
+ thinking: string;
73
+ loadingHistory: string;
74
+ historyFailed: string;
75
+ emptyState: string;
76
+ approvalNeeded: string;
77
+ approve: string;
78
+ deny: string;
79
+ approved: string;
80
+ declined: string;
81
+ toolFailed: string;
82
+ toolDeclined: string;
83
+ details: string;
84
+ reasoning: string;
85
+ genericError: string;
86
+ /** Name on a teammate's message bubble. */
87
+ working: string;
88
+ steps: string;
89
+ teamName: string;
90
+ /** The notice shown once a person has taken the conversation over. */
91
+ teamJoined: string;
92
+ /** Names the pinned plan checklist for assistive technology. */
93
+ plan: string;
94
+ /** The checklist's one line: "{done}" and "{total}" are filled in. */
95
+ planSummary: string;
96
+ planProposed: string;
97
+ planApproved: string;
98
+ planRunning: string;
99
+ planCompleted: string;
100
+ planFailed: string;
101
+ planDenied: string;
102
+ planExpired: string;
103
+ /** The plan approval card's heading; "{count}" is the number of steps. */
104
+ planApprovalHeading: string;
105
+ approvePlan: string;
106
+ }
107
+ type AssistantChatVariant = 'panel' | 'window' | 'bubble';
108
+ interface AssistantChatProps {
109
+ /** Base URL of the API, without the trailing `assistant/chat/` ("/api/v1"). */
110
+ apiBase: string;
111
+ /** Request headers for every call — `Authorization`, `X-Portal-Audience`, or
112
+ * the guest `X-Chat-Token`. Called per request, so a refreshed token is used. */
113
+ getHeaders?: () => Promise<Record<string, string>> | Record<string, string>;
114
+ /** Fetch credentials mode. Left to the browser's default (same-origin) when omitted. */
115
+ credentials?: RequestCredentials;
116
+ /** The conversation to restore on mount; `null`/`undefined` starts a new one. */
117
+ conversationId?: string | null;
118
+ /** Called when the server names the conversation (and again for a new guest
119
+ * token), and with `null` when the person starts a new chat. Persist it. */
120
+ onConversation?: (conversation: AssistantConversation | null) => void;
121
+ title?: string;
122
+ placeholder?: string;
123
+ /** `panel`: docked side panel. `window`: fills its container (a shell
124
+ * window). `bubble`: a floating launcher that opens a panel. Default `panel`. */
125
+ variant?: AssistantChatVariant;
126
+ toolLabels?: ToolLabels;
127
+ /** Reword or translate the chat's own text. */
128
+ labels?: Partial<AssistantChatLabels>;
129
+ /** Draw the component's own header (title, New chat, close). Default: yes,
130
+ * except in `window`, whose shell window already has a title bar. Without
131
+ * the header, "New chat" is an icon button beside the composer and the
132
+ * section keeps its accessible name from `title`. */
133
+ showHeader?: boolean;
134
+ /** Show the model's reasoning as a collapsed step in the chain. Only `window`
135
+ * (staff) ever honours it; `panel` and `bubble` never show reasoning. */
136
+ showReasoning?: boolean;
137
+ /** Bubble only: start open. */
138
+ defaultOpen?: boolean;
139
+ /** Bubble only: told when the panel opens or closes. */
140
+ onOpenChange?: (open: boolean) => void;
141
+ /** Live updates for a conversation a person can take over. Called once the
142
+ * conversation exists (and again if its guest token changes); the host opens
143
+ * whatever channel it has (a socket, a poll) and calls `refresh()` when
144
+ * something new may have arrived. Return a function that closes it. The chat
145
+ * then adds the staff and system messages it is missing, never replaces a
146
+ * turn it is streaming, and, because the host says when, does not ask the
147
+ * server after each turn. */
148
+ subscribe?: (conversation: AssistantConversation, refresh: () => void) => (() => void) | void;
149
+ /** Replaces `fetch`, for hosts that need to wrap requests. */
150
+ fetch?: typeof fetch;
151
+ className?: string;
152
+ }
153
+
154
+ declare function AssistantChat(props: AssistantChatProps): react_jsx_runtime.JSX.Element;
155
+
156
+ interface MessageProps {
157
+ message: AssistantUIMessage;
158
+ toolLabels: ToolLabels | undefined;
159
+ labels: AssistantChatLabels;
160
+ showReasoning: boolean;
161
+ showToolOutput: boolean;
162
+ /** This message is the one being written right now. */
163
+ live: boolean;
164
+ onApprove: (approvalId: string, approved: boolean) => void;
165
+ /** Plans by approval id, for a plan's approval card. */
166
+ plans?: Map<string, PlanDataPart>;
167
+ }
168
+ declare function Message({ message, toolLabels, labels, showReasoning, showToolOutput, live, onApprove, plans }: MessageProps): react_jsx_runtime.JSX.Element | null;
169
+
170
+ interface ApprovalDecision {
171
+ approval_id: string;
172
+ approved: boolean;
173
+ reason?: string;
174
+ }
175
+ interface AssistantChatRequestBody {
176
+ conversation_id: string | null;
177
+ text: string | null;
178
+ approvals: ApprovalDecision[];
179
+ }
180
+ /** The tool-part fields the chat reads, whatever the tool is called. */
181
+ interface ToolPartView {
182
+ toolName: string;
183
+ toolCallId: string;
184
+ state: string;
185
+ input: unknown;
186
+ output: unknown;
187
+ errorText: string | undefined;
188
+ approvalId: string | undefined;
189
+ approved: boolean | undefined;
190
+ }
191
+ /** The request body for the next turn. Throws when there is nothing to send,
192
+ * so a bug cannot become an empty request the server has to reject. */
193
+ declare function buildRequestBody(messages: AssistantUIMessage[], conversationId: string | null): AssistantChatRequestBody;
194
+ interface HistoryMessage {
195
+ id: string;
196
+ role: 'user' | 'assistant';
197
+ /** Absent on older servers; `staff` and `system` render differently. */
198
+ source?: MessageSource;
199
+ text: string;
200
+ created_at?: string;
201
+ }
202
+ interface HistoryApproval {
203
+ approval_id: string;
204
+ /** The tool call the approval belongs to. The continuation stream reuses it,
205
+ * so the answered card and its result are ONE part. */
206
+ tool_call_id?: string;
207
+ tool_name: string;
208
+ input: unknown;
209
+ requested_at?: string;
210
+ expires_at?: string;
211
+ /** Set when the approval decides a whole plan. */
212
+ plan_id?: string | null;
213
+ }
214
+ interface ConversationHistory {
215
+ id: string;
216
+ /** True once a person has taken the conversation over from the assistant. */
217
+ handed_over?: boolean;
218
+ messages: HistoryMessage[];
219
+ pending_approvals: HistoryApproval[];
220
+ /** Every plan of the conversation, oldest first (servers before plans omit it). */
221
+ plans?: PlanDataPart[];
222
+ }
223
+ /** The latest state of every plan in the thread, by plan id. A later part for
224
+ * the same plan (the server re-sends it on every change) wins. */
225
+ declare function plansOf(messages: AssistantUIMessage[]): Map<string, PlanDataPart>;
226
+ /** The plan to pin above the composer: the most recently updated one while it
227
+ * is active, and — once it has finished — until the person sends another
228
+ * message, so its outcome stays in view (folded). */
229
+ declare function pinnedPlan(messages: AssistantUIMessage[]): PlanDataPart | null;
230
+ /** Rebuild the thread from `GET <apiBase>/assistant/chat/<id>/`. Pending
231
+ * approvals come back as one trailing assistant message of tool parts in
232
+ * `approval-requested`, so the same card and the same continuation apply.
233
+ * A plan still waiting or running rides in that message as its `data-plan`
234
+ * part, so the checklist is pinned again and the continuation's updates
235
+ * replace it in place. A finished plan is already told in the thread by the
236
+ * server's own summary message. */
237
+ declare function messagesFromHistory(history: ConversationHistory): AssistantUIMessage[];
238
+
239
+ interface ToolCallProps {
240
+ tool: ToolPartView;
241
+ toolLabels: ToolLabels | undefined;
242
+ labels: AssistantChatLabels;
243
+ /** Show what the tool returned. Internal surfaces only. */
244
+ showOutput: boolean;
245
+ onApprove: (approvalId: string, approved: boolean) => void;
246
+ }
247
+ declare function ApprovalCard({ tool, toolLabels, labels, onApprove }: Omit<ToolCallProps, 'showOutput'>): react_jsx_runtime.JSX.Element;
248
+ declare function ToolStep({ tool, toolLabels, labels, showOutput }: Omit<ToolCallProps, 'onApprove'>): react_jsx_runtime.JSX.Element;
249
+
250
+ interface ChecklistProps {
251
+ plan: PlanDataPart;
252
+ labels: AssistantChatLabels;
253
+ }
254
+ declare function PlanChecklist({ plan, labels }: ChecklistProps): react_jsx_runtime.JSX.Element;
255
+ interface ApprovalProps {
256
+ approvalId: string;
257
+ /** The server's plan when it has arrived; otherwise the call's own input. */
258
+ plan: PlanDataPart | undefined;
259
+ input: unknown;
260
+ labels: AssistantChatLabels;
261
+ toolLabels: ToolLabels | undefined;
262
+ onApprove: (approvalId: string, approved: boolean) => void;
263
+ }
264
+ /** One decision for the whole plan: every step, by its friendly name and
265
+ * inputs, then Approve or Deny. */
266
+ declare function PlanApprovalCard({ approvalId, plan, input, labels, toolLabels, onApprove }: ApprovalProps): react_jsx_runtime.JSX.Element;
267
+
268
+ /** The chat's own words, English. Hosts translate through the `labels` prop. */
269
+ declare const DEFAULT_ASSISTANT_CHAT_LABELS: AssistantChatLabels;
270
+
271
+ export { ApprovalCard, type ApprovalDecision, AssistantChat, type AssistantChatLabels, type AssistantChatProps, type AssistantChatRequestBody, type AssistantChatVariant, type AssistantConversation, Message as AssistantMessage, type AssistantMessageMetadata, type AssistantUIMessage, type ConversationHistory, DEFAULT_ASSISTANT_CHAT_LABELS, type MessageSource, PlanApprovalCard, PlanChecklist, type PlanDataPart, type PlanStatus, type PlanStepData, type ToolLabel, type ToolLabelSpec, type ToolLabels, ToolStep, buildRequestBody, messagesFromHistory, pinnedPlan, plansOf };
@@ -0,0 +1,37 @@
1
+ "use client";
2
+ import{StepChain as e,StepChainItem as t,Markdown as n,Banner as r,Textarea_default as a}from"../chunk-UBXRSOQ6.js";import"../chunk-HJQAE6SP.js";import"../chunk-PJPK2ADX.js";import{IconButton_default as o}from"../chunk-RWNNFCSA.js";import{Button_default as s}from"../chunk-G5GERM76.js";import"../chunk-3E27HV76.js";import"../chunk-7IQ3B77H.js";import"../chunk-FIEA5CGB.js";import"../chunk-K7PQXJO7.js";import"../chunk-D65T4H6J.js";import{Icon as l}from"../chunk-YT4B3NSV.js";import"../chunk-LVCRH3K6.js";import"../chunk-C3QOHMR6.js";import{SpinnerRing as i}from"../chunk-2J6F4EE7.js";import{useState as d,useId as c,useRef as p,useEffect as u,useCallback as m,useMemo as h}from"react";import{jsx as g,jsxs as f}from"react/jsx-runtime";import{isToolUIPart as v,getToolName as b,DefaultChatTransport as y,lastAssistantMessageIsCompleteWithApprovalResponses as x}from"ai";import{useChat as w}from"@ai-sdk/react";function N({labels:e,placeholder:t,busy:n,focusWhen:r,onSend:i,onStop:c,onNewChat:m}){const[h,v]=d(""),b=p(null);u(()=>{r&&b.current?.focus()},[r]);const y=()=>{!n&&h.trim()&&(i(h),v(""))};/* @__PURE__ */
3
+ return f("form",{className:"flex items-end gap-2 border-t border-gray-200 p-3",onSubmit:e=>{e.preventDefault(),y()},children:[m&&/* @__PURE__ */g(o,{type:"button",variant:"ghost","aria-label":e.newChat,title:e.newChat,onClick:m,children:/* @__PURE__ */g(l,{name:"add"})}),
4
+ /* @__PURE__ */g("div",{className:"min-w-0 flex-1",children:/* @__PURE__ */g(a,{ref:b,"aria-label":e.inputLabel,placeholder:t,rows:1,autoGrow:!0,value:h,onChange:e=>v(e.target.value),onKeyDown:e=>{"Enter"!==e.key||e.shiftKey||e.nativeEvent.isComposing||(e.preventDefault(),y())},className:"max-h-32"})}),/* @__PURE__ */g(s,n?{type:"button",variant:"secondary",onClick:c,children:e.stop}:{type:"submit",disabled:!h.trim(),children:e.send})]})}function k(e){if(!v(e))return null;const t=e;return{toolName:b(e),toolCallId:t.toolCallId,state:t.state,input:t.input,output:t.output,errorText:t.errorText,approvalId:t.approval?.id,approved:t.approval?.approved}}function C(e){return e.parts.map(e=>"text"===e.type?e.text:"").join("")}function A(e,t){const n=e[e.length-1];if(!n)throw new Error("assistant chat: no message to send");if("user"===n.role){const e=C(n).trim();if(!e)throw new Error("assistant chat: empty message");return{conversation_id:t,text:e,approvals:[]}}const r=function(e){const t=[];for(const n of e.parts){if(!v(n))continue;const e=n;if("approval-responded"!==e.state||!e.approval||"boolean"!=typeof e.approval.approved)continue;const r={approval_id:e.approval.id,approved:e.approval.approved};e.approval.reason&&(r.reason=e.approval.reason),t.push(r)}return t}(n);if(0===r.length)throw new Error("assistant chat: no approval decision to send");return{conversation_id:t,text:null,approvals:r}}var $=/* @__PURE__ */new Set(["proposed","approved","running"]);function j(e){return $.has(e.status)}function S(e){const t=[];for(const n of e.parts)"data-plan"===n.type&&t.push(n.data);return t}function _(e){const t=/* @__PURE__ */new Map;for(const n of e)for(const e of S(n))t.delete(e.id),t.set(e.id,e);return t}function I(e){const t=[..._(e).values()],n=t[t.length-1];if(!n)return null;if(j(n))return n;const r=e[e.length-1];return r&&"assistant"===r.role&&S(r).some(e=>e.id===n.id)?n:null}function T(e){const t=e.messages.filter(e=>e.text).map(e=>({id:e.id,role:e.role,parts:[{type:"text",text:e.text}],...e.source&&e.source!==e.role?{metadata:{source:e.source}}:{}})),n=(e.plans??[]).filter(j);return(e.pending_approvals.length>0||n.length>0)&&t.push({id:`pending-approvals-${e.id}`,role:"assistant",parts:[...n.map(e=>({type:"data-plan",id:e.id,data:e})),...e.pending_approvals.map(e=>({type:`tool-${e.tool_name}`,toolCallId:e.tool_call_id??e.approval_id,state:"approval-requested",input:e.input,approval:{id:e.approval_id}}))]}),t}function O(e,t){const n=e?.message?.trim();if(!n)return t;if(n.startsWith("{")){try{const e=JSON.parse(n);for(const t of["detail","errorText","message","title","error"]){const n=e[t];if("string"==typeof n&&n.trim())return n.trim()}}catch{return t}return t}return n.startsWith("<")||n.length>400?t:n}function E(e){const t=e.replace(/^tool-/,"").replace(/([a-z0-9])([A-Z])/g,"$1 $2").replace(/[_\-.]+/g," ").trim().toLowerCase();return t?t.charAt(0).toUpperCase()+t.slice(1):e}var L={propose_plan:{label:"Plan the changes",running:"Planning the changes",done:"Planned the changes"}};function R(e,t){const n=t?.[e]??L[e];return"string"==typeof n?{label:n}:n??{label:E(e)}}function H(e,t){return R(e,t).label}function D(e){return e&&"object"==typeof e&&!Array.isArray(e)?e:{}}function P(e,t,n){const r=R(e,n).describe;if(!r)return"";try{return r(D(t))?.trim()??""}catch{return""}}function z(e,t){return null==e?"":"boolean"==typeof e?e?"Yes":"No":"object"!=typeof e?String(e):Array.isArray(e)?e.map(e=>z(e,t+1)).filter(Boolean).join(", "):t>=3?"…":Object.entries(e).map(([e,n])=>{const r=z(n,t+1);return r?`${E(e)}: ${r}`:""}).filter(Boolean).join("; ")}function B(e){const t=D(e),n=[];for(const[e,r]of Object.entries(t)){const t=z(r,0);t&&n.push({label:E(e),value:t})}return 0===n.length&&null!=e&&"object"!=typeof e&&n.push({label:"Value",value:z(e,0)}),n}var J={proposed:"planProposed",approved:"planApproved",running:"planRunning",completed:"planCompleted",failed:"planFailed",denied:"planDenied",expired:"planExpired"},M={pending:"pending",running:"active",done:"complete",failed:"failed",skipped:"skipped"};function F(e,t){const n=P(e.tool_name,e.input,t);return`${H(e.tool_name,t)}${n?` ${n}`:""}`}function q(e,t){return e.replace(/\{(\w+)\}/g,(e,n)=>n in t?String(t[n]):e)}function W(e,t){const n=e.steps.filter(e=>"done"===e.status).length;return`${q(t.planSummary,{done:n,total:e.steps.length})} · ${t[J[e.status]]}`}function G({plan:n,labels:r}){/* @__PURE__ */
5
+ return g("section",{"aria-label":r.plan,className:"border-t border-gray-200 bg-white px-3 py-2",children:/* @__PURE__ */g(e,{summary:W(n,r),busy:j(n),label:r.plan,children:n.steps.map(e=>/* @__PURE__ */g(t,{label:e.title,status:M[e.status],description:"done"!==e.status&&e.result_summary?e.result_summary:void 0},e.id))})})}function K({approvalId:e,plan:t,input:n,labels:r,toolLabels:a,onApprove:o}){const l=function(e,t){if(e)return e.steps.map(e=>({key:e.id,title:e.title,tool_name:e.tool_name,input:e.input}));const n=t?.steps;return Array.isArray(n)?n.map((e,t)=>{const n=e??{};return{key:String(t),title:"string"==typeof n.title?n.title:"",tool_name:"string"==typeof n.tool?n.tool:"",input:n.args}}):[]}(t,n),i=q(r.planApprovalHeading,{count:l.length});/* @__PURE__ */
6
+ return f("div",{role:"group","aria-label":i,className:"rounded-lg border border-amber-300 bg-amber-50 p-3 text-sm",children:[
7
+ /* @__PURE__ */g("div",{className:"font-medium text-gray-900",children:i}),
8
+ /* @__PURE__ */g("ol",{className:"mt-2 list-decimal space-y-2 pl-5",children:l.map(e=>{const t=B(e.input);/* @__PURE__ */
9
+ return f("li",{children:[
10
+ /* @__PURE__ */g("div",{className:"font-medium text-gray-900",children:F(e,a)}),e.title&&/* @__PURE__ */g("div",{className:"text-xs text-gray-600",children:e.title}),t.length>0&&/* @__PURE__ */g("dl",{className:"mt-1 grid grid-cols-[max-content_1fr] gap-x-3 gap-y-1 text-xs",children:t.map(e=>/* @__PURE__ */f("div",{className:"contents",children:[
11
+ /* @__PURE__ */g("dt",{className:"text-gray-500",children:e.label}),
12
+ /* @__PURE__ */g("dd",{className:"min-w-0 break-words text-gray-800",children:e.value})]},e.label))})]},e.key)})}),
13
+ /* @__PURE__ */f("div",{className:"mt-3 flex gap-2",children:[
14
+ /* @__PURE__ */g(s,{size:"sm",onClick:()=>o(e,!0),children:r.approvePlan}),
15
+ /* @__PURE__ */g(s,{size:"sm",variant:"secondary",onClick:()=>o(e,!1),children:r.deny})]})]})}function Q({rows:e}){/* @__PURE__ */
16
+ return g("dl",{className:"grid grid-cols-[max-content_1fr] gap-x-3 gap-y-1 text-xs",children:e.map(e=>/* @__PURE__ */f("div",{className:"contents",children:[
17
+ /* @__PURE__ */g("dt",{className:"text-gray-500",children:e.label}),
18
+ /* @__PURE__ */g("dd",{className:"min-w-0 break-words text-gray-800",children:e.value})]},e.label))})}function V({tool:e,toolLabels:t,labels:n,onApprove:r}){const a=P(e.toolName,e.input,t),o=B(e.input),l=e.approvalId,i=`${n.approvalNeeded}: ${H(e.toolName,t)}${a?` ${a}`:""}`;/* @__PURE__ */
19
+ return f("div",{role:"group","aria-label":i,className:"rounded-lg border border-amber-300 bg-amber-50 p-3 text-sm",children:[
20
+ /* @__PURE__ */g("div",{className:"font-medium text-gray-900",children:i}),o.length>0&&/* @__PURE__ */g("div",{className:"mt-2",children:/* @__PURE__ */g(Q,{rows:o})}),
21
+ /* @__PURE__ */f("div",{className:"mt-3 flex gap-2",children:[
22
+ /* @__PURE__ */g(s,{size:"sm",onClick:()=>r(l,!0),children:n.approve}),
23
+ /* @__PURE__ */g(s,{size:"sm",variant:"secondary",onClick:()=>r(l,!1),children:n.deny})]})]})}var U={running:"active",done:"complete",failed:"failed",declined:"stopped",waiting:"waiting"};function X(e,t,n){return function(e,t,n,r,a,o){const s=R(n,a),l=P(n,r,a),i=(e,t)=>({kind:e,base:t,subject:l,text:l?`${t} ${l}`:t});switch(e){case"output-available":return i("done",s.done??s.label);case"output-error":return i("failed",`${s.label} ${o.toolFailed}`);case"output-denied":return i("declined",`${s.label} ${o.toolDeclined}`);case"approval-requested":return i("waiting",`${o.approvalNeeded}: ${s.label}`);case"approval-responded":return!1===t?i("declined",`${s.label} — ${o.declined}`):i("running",`${o.approved}: ${s.running??s.label}`);default:return i("running",s.running??s.label)}}(e.state,e.approved,e.toolName,e.input,t,n)}function Y({tool:e,toolLabels:n,labels:r,showOutput:a}){const o=X(e,n,r),s=B(e.input),l=a&&"output-available"===e.state?B(e.output):[],i=a&&"output-error"===e.state&&e.errorText?e.errorText:"";let d=null;return(s.length>0||l.length>0||i)&&(d=/* @__PURE__ */f("details",{children:[
24
+ /* @__PURE__ */g("summary",{className:"cursor-pointer select-none",children:r.details}),
25
+ /* @__PURE__ */f("div",{className:"mt-1 space-y-2",children:[s.length>0&&/* @__PURE__ */g(Q,{rows:s}),l.length>0&&/* @__PURE__ */g(Q,{rows:l}),i&&/* @__PURE__ */g("div",{className:"text-red-600",children:i})]})]})),/* @__PURE__ */g(t,{label:o.base,description:o.subject||void 0,status:U[o.kind],children:d})}function Z(e,t){return"approval-responded"===e.state&&t.some(t=>{return t.toolName===e.toolName&&"approval-requested"!==t.state&&(t.toolCallId===e.toolCallId||(n=t.input,r=e.input,JSON.stringify(n)===JSON.stringify(r)));var n,r})}function ee(e,t,n,r){const a=e.flatMap(e=>"tool"===e.kind?[X(e.tool,n,r)]:[]);if(t){const e=a.find(e=>"running"===e.kind);return e?e.base:r.working}const o=[...new Set(a.map(e=>e.base))];return o.length>0?o.join(" · "):r.reasoning}function te({message:r,toolLabels:a,labels:o,showReasoning:s,showToolOutput:l,live:i,onApprove:d,plans:c}){const p=r.metadata?.source;if("system"===p){const e=C(r);return e?/* @__PURE__ */g("div",{className:"text-center text-xs text-gray-500",children:e}):null}if("user"===r.role){const e=C(r);return e?/* @__PURE__ */g("div",{className:"flex justify-end",children:/* @__PURE__ */g("div",{className:"max-w-[85%] whitespace-pre-wrap break-words rounded-2xl bg-blue-600 px-3 py-2 text-sm text-white",children:e})}):null}const u=r.parts.map(k),m=[],h=[];let v=-1;const b=e=>{v<0&&(v=m.push(null)-1),h.push(e)};return r.parts.forEach((e,t)=>{if("text"===e.type)return void(e.text.trim()&&m.push(/* @__PURE__ */g(n,{children:e.text},t)));if("reasoning"===e.type)return void(s&&e.text.trim()&&b({kind:"reasoning",key:`r${t}`,text:e.text}));const r=u[t];r&&(Z(r,u.slice(t+1).filter(e=>null!==e))||("approval-requested"===r.state&&r.approvalId&&"propose_plan"===r.toolName?m.push(
26
+ /* @__PURE__ */g(K,{approvalId:r.approvalId,plan:c?.get(r.approvalId),input:r.input,labels:o,toolLabels:a,onApprove:d},r.toolCallId)):"approval-requested"===r.state&&r.approvalId?m.push(
27
+ /* @__PURE__ */g(V,{tool:r,toolLabels:a,labels:o,onApprove:d},r.toolCallId)):b({kind:"tool",key:r.toolCallId,tool:r})))}),v>=0&&(m[v]=/* @__PURE__ */g(e,{summary:ee(h,i,a,o),busy:i,label:o.steps,children:h.map(e=>"tool"===e.kind?/* @__PURE__ */g(Y,{tool:e.tool,toolLabels:a,labels:o,showOutput:l},e.key):/* @__PURE__ */g(t,{status:"complete",label:/* @__PURE__ */f("details",{children:[
28
+ /* @__PURE__ */g("summary",{className:"cursor-pointer select-none",children:o.reasoning}),
29
+ /* @__PURE__ */g("div",{className:"mt-1 whitespace-pre-wrap text-gray-500",children:e.text})]})},e.key))},"chain")),0===m.length?null:/* @__PURE__ */g("div",{className:"flex justify-start",children:/* @__PURE__ */f("div",{className:"max-w-[92%] min-w-0 space-y-2 rounded-2xl bg-white px-3 py-2 text-gray-800 shadow-sm",children:["staff"===p&&/* @__PURE__ */g("div",{className:"text-xs font-medium text-blue-600",children:o.teamName}),m]})})}function ne(e){const{messages:t,status:n,error:a,history:o,labels:s}=e,l=p(null),d=h(()=>function(e){const t=/* @__PURE__ */new Map;for(const n of _(e).values())t.set(n.approval_id,n);return t}(t),[t]);return u(()=>{const e=l.current;e&&(e.scrollTop=e.scrollHeight)},[t,n]),/* @__PURE__ */f("div",{ref:l,role:"log","aria-label":e.title,"aria-live":"polite","aria-busy":"submitted"===n||"streaming"===n,className:"flex min-h-0 flex-1 flex-col gap-3 overflow-auto bg-gray-50 p-3",children:["loading"===o&&/* @__PURE__ */f("div",{role:"status",className:"flex items-center gap-2 text-xs text-gray-500",children:[
30
+ /* @__PURE__ */g(i,{className:"h-3 w-3"}),s.loadingHistory]}),"failed"===o&&/* @__PURE__ */g(r,{tone:"warning",children:s.historyFailed}),0===t.length&&"idle"===o&&/* @__PURE__ */g("p",{className:"m-auto text-center text-sm text-gray-500",children:s.emptyState}),t.map((r,a)=>/* @__PURE__ */g(te,{live:a===t.length-1&&("submitted"===n||"streaming"===n),message:r,toolLabels:e.toolLabels,labels:s,showReasoning:e.showReasoning,showToolOutput:e.showToolOutput,onApprove:e.onApprove,plans:d},r.id)),e.handedOver&&/* @__PURE__ */g("div",{role:"status",className:"text-center text-xs text-gray-500",children:s.teamJoined}),"submitted"===n&&/* @__PURE__ */f("div",{role:"status",className:"flex items-center gap-2 text-xs text-gray-500",children:[
31
+ /* @__PURE__ */g(i,{className:"h-3 w-3"}),s.thinking]}),a&&/* @__PURE__ */g("div",{role:"alert",children:/* @__PURE__ */g(r,{tone:"danger",children:O(a,s.genericError)})})]})}var re={title:"Assistant",placeholder:"Ask a question…",inputLabel:"Message to the assistant",send:"Send",stop:"Stop",newChat:"New chat",open:"Open assistant",close:"Close assistant",thinking:"Thinking",loadingHistory:"Loading the conversation",historyFailed:"The earlier conversation could not be loaded.",emptyState:"Ask me anything to get started.",approvalNeeded:"Approval needed",approve:"Approve",deny:"Deny",approved:"Approved",declined:"Declined",toolFailed:"did not complete",toolDeclined:"was not approved",details:"Details",reasoning:"Reasoning",genericError:"Something went wrong. Please try again.",working:"Working",steps:"Steps",teamName:"Team",teamJoined:"A team member has joined",plan:"Plan",planSummary:"Plan: {done} of {total} done",planProposed:"waiting for your approval",planApproved:"approved, starting",planRunning:"in progress",planCompleted:"finished",planFailed:"stopped — not every step ran",planDenied:"not approved — nothing was changed",planExpired:"expired — nothing was changed",planApprovalHeading:"Approve this plan of {count} steps",approvePlan:"Approve plan"},ae=(e,t)=>`${e.replace(/\/+$/,"")}/${t}`;function oe(e){return ae(e,"assistant/chat/")}function se(e,t){return ae(e,`assistant/chat/${encodeURIComponent(t)}/`)}function le(e){const t={...re,...e.labels},n=e.variant??"panel",r=function(e){const t=p(e);t.current=e;const n=p(e.conversationId?{id:e.conversationId}:null),[r,a]=d("idle"),[o,s]=d(!1),[l,i]=d(n.current),c=m(e=>{n.current=e,i(e)},[]),g=m((e,n)=>(t.current.fetch??fetch)(e,n),[]),f=h(()=>new y({api:oe(e.apiBase),fetch:g,prepareSendMessagesRequest:async({messages:e})=>{const{apiBase:r,getHeaders:a,credentials:o}=t.current;return{api:oe(r),body:A(e,n.current?.id??null),headers:await(a?.())??{},...o?{credentials:o}:{}}}}),[g]),v=w({transport:f,sendAutomaticallyWhen:x,onData:e=>{if("data-conversation"!==e.type)return;const{id:r,guest_token:a}=e.data,o=n.current,s=a??(o?.id===r?o.guestToken:void 0);o&&o.id===r&&o.guestToken===s||(c(s?{id:r,guestToken:s}:{id:r}),t.current.onConversation?.(n.current))}}),{setMessages:b,stop:N}=v,k=m(async(e,n)=>{const{apiBase:r,getHeaders:o,credentials:l,onConversation:i}=t.current;a("loading");try{const t=await g(se(r,e),{method:"GET",headers:await(o?.())??{},...l?{credentials:l}:{},signal:n});if(n.aborted)return;if(404===t.status)return c(null),i?.(null),void a("idle");if(!t.ok)throw new Error(`history ${t.status}`);const d=await t.json();if(n.aborted)return;s(!0===d.handed_over),b(e=>e.length>0?e:T(d)),a("idle")}catch{n.aborted||a("failed")}},[g,b,c]),C=e.conversationId??null;u(()=>{if(C===(n.current?.id??null)&&v.messages.length>0)return;if(null===C)return n.current&&(c(null),N(),b([])),void a("idle");n.current?.id===C||c({id:C});const e=new AbortController;return k(C,e.signal),()=>e.abort()},[C,k,b,N,c]);const $=m(async e=>{const r=n.current?.id;if(r)try{const{apiBase:a,getHeaders:o,credentials:l}=t.current,i=await g(se(a,r),{method:"GET",headers:await(o?.())??{},...l?{credentials:l}:{},...e?{signal:e}:{}});if(!i.ok||e?.aborted||n.current?.id!==r)return;const d=await i.json();s(!0===d.handed_over);const c=T(d).filter(e=>e.metadata?.source);if(0===c.length)return;b(e=>{const t=new Set(e.map(e=>e.id)),n=c.filter(e=>!t.has(e.id));return n.length>0?[...e,...n]:e})}catch{}},[g,b]),j=p($);j.current=$;const{status:S}=v,_="submitted"===S||"streaming"===S,I=p(!1),O=p(!1),E=!!e.subscribe;u(()=>{const e=I.current&&!_;if(I.current=_,!e)return;if(E&&!O.current)return;O.current=!1;const t=new AbortController;return j.current(t.signal),()=>t.abort()},[_,E]);const L=p(_);L.current=_;const R=l?.id,H=l?.guestToken;u(()=>{const e=n.current,r=t.current.subscribe;if(e&&r)return r(e,()=>{L.current?O.current=!0:j.current()})??void 0},[R,H]);const D=m(e=>{const t=e.trim();t&&v.sendMessage({text:t})},[v]),P=m((e,t)=>{v.addToolApprovalResponse({id:e,approved:t})},[v]),z=m(()=>{N(),c(null),b([]),a("idle"),s(!1),t.current.onConversation?.(null)},[b,N,c]);return{messages:v.messages,status:v.status,error:v.error,historyState:r,handedOver:o,send:D,stop:N,approve:P,reset:z}}(e),a="submitted"===r.status||"streaming"===r.status,i="window"===n,c=e.showHeader??"window"!==n,v=e.title??t.title,b=I(r.messages);/* @__PURE__ */
32
+ return f("section",{"aria-label":v,className:`flex h-full min-h-0 flex-col bg-white text-gray-900 ${e.className??""}`.trim(),children:[c&&/* @__PURE__ */f("header",{className:"flex items-center gap-2 border-b border-gray-200 px-3 py-2",children:[
33
+ /* @__PURE__ */g("h2",{className:"min-w-0 flex-1 truncate text-sm font-semibold",children:v}),r.messages.length>0&&/* @__PURE__ */g(s,{size:"sm",variant:"ghost",onClick:r.reset,children:t.newChat}),e.onClose&&/* @__PURE__ */g(o,{size:"sm","aria-label":t.close,onClick:e.onClose,children:/* @__PURE__ */g(l,{name:"close"})})]}),
34
+ /* @__PURE__ */g(ne,{messages:r.messages,status:r.status,error:r.error,history:r.historyState,handedOver:r.handedOver,labels:t,title:v,toolLabels:e.toolLabels,showReasoning:i&&!0===e.showReasoning,showToolOutput:i,onApprove:r.approve}),b&&/* @__PURE__ */g(G,{plan:b,labels:t},b.id),
35
+ /* @__PURE__ */g(N,{labels:t,placeholder:e.placeholder??t.placeholder,busy:a,focusWhen:e.focusComposer,onSend:r.send,onStop:r.stop,onNewChat:!c&&r.messages.length>0?r.reset:void 0})]})}function ie(e){const t={...re,...e.labels},[n,r]=d(e.defaultOpen??!1),a=c(),o=p(null),s=p(n),i=t=>{r(t),e.onOpenChange?.(t)};return u(()=>{s.current&&!n&&o.current?.focus(),s.current=n},[n]),/* @__PURE__ */f("div",{className:"rosh-assistant",style:{display:"contents"},children:[n&&/* @__PURE__ */g("div",{id:a,role:"dialog","aria-label":e.title??t.title,onKeyDown:e=>{"Escape"===e.key&&i(!1)},className:"fixed inset-x-2 bottom-20 z-[var(--z-window,1000)] h-[min(34rem,calc(100dvh-6rem))] overflow-hidden rounded-xl border border-gray-200 shadow-xl sm:inset-x-auto sm:right-4 sm:w-96",children:/* @__PURE__ */g(le,{...e,onClose:()=>i(!1),focusComposer:!0})}),
36
+ /* @__PURE__ */g("button",{ref:o,type:"button","aria-expanded":n,"aria-controls":n?a:void 0,"aria-label":n?t.close:t.open,onClick:()=>i(!n),className:"fixed bottom-4 right-4 z-[var(--z-window,1000)] flex h-12 w-12 items-center justify-center rounded-full bg-blue-600 text-white shadow-lg hover:bg-blue-700 focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-blue-600",children:/* @__PURE__ */g(l,n?{name:"close",size:20}:{name:"chat-bubble-left-right",size:22})})]})}function de(e){if("bubble"===e.variant)/* @__PURE__ */return g(ie,{...e});const t="window"!==e.variant;/* @__PURE__ */
37
+ return g(le,{...e,className:`${t?"border-l border-gray-200":""} ${e.className??""}`.trim()})}export{V as ApprovalCard,de as AssistantChat,te as AssistantMessage,re as DEFAULT_ASSISTANT_CHAT_LABELS,K as PlanApprovalCard,G as PlanChecklist,Y as ToolStep,A as buildRequestBody,T as messagesFromHistory,I as pinnedPlan,_ as plansOf};
package/dist/ai.css ADDED
@@ -0,0 +1,2 @@
1
+ /*! tailwindcss v4.3.3 | MIT License | https://tailwindcss.com */
2
+ @layer properties{@supports (((-webkit-hyphens:none)) and (not (margin-trim:inline))) or ((-moz-orient:inline) and (not (color:rgb(from red r g b)))){*,:before,:after,::backdrop{--tw-space-y-reverse:0;--tw-border-style:solid;--tw-leading:initial;--tw-font-weight:initial;--tw-tracking:initial;--tw-shadow:0 0 #0000;--tw-shadow-color:initial;--tw-shadow-alpha:100%;--tw-inset-shadow:0 0 #0000;--tw-inset-shadow-color:initial;--tw-inset-shadow-alpha:100%;--tw-ring-color:initial;--tw-ring-shadow:0 0 #0000;--tw-inset-ring-color:initial;--tw-inset-ring-shadow:0 0 #0000;--tw-ring-inset:initial;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-offset-shadow:0 0 #0000;--tw-outline-style:solid}}}.rosh-assistant .sr-only{clip-path:inset(50%);white-space:nowrap;border-width:0;width:1px;height:1px;margin:-1px;padding:0;position:absolute;overflow:hidden}.rosh-assistant .fixed{position:fixed}.rosh-assistant .sticky{position:sticky}.rosh-assistant .inset-x-2{inset-inline:.5rem}.rosh-assistant .top-0{top:0}.rosh-assistant .right-4{right:1rem}.rosh-assistant .bottom-4{bottom:1rem}.rosh-assistant .bottom-20{bottom:5rem}.rosh-assistant .z-30{z-index:30}.rosh-assistant .z-\[var\(--z-window\,1000\)\]{z-index:var(--z-window,1000)}.rosh-assistant .container{width:100%}@media (min-width:40rem){.rosh-assistant .container{max-width:40rem}}@media (min-width:48rem){.rosh-assistant .container{max-width:48rem}}@media (min-width:64rem){.rosh-assistant .container{max-width:64rem}}@media (min-width:80rem){.rosh-assistant .container{max-width:80rem}}@media (min-width:96rem){.rosh-assistant .container{max-width:96rem}}.rosh-assistant .m-auto{margin:auto}.rosh-assistant .my-1{margin-block:.25rem}.rosh-assistant .mt-0\.5{margin-top:.125rem}.rosh-assistant .mt-1{margin-top:.25rem}.rosh-assistant .mt-2{margin-top:.5rem}.rosh-assistant .mt-3{margin-top:.75rem}.rosh-assistant .ml-2{margin-left:.5rem}.rosh-assistant .block{display:block}.rosh-assistant .contents{display:contents}.rosh-assistant .flex{display:flex}.rosh-assistant .grid{display:grid}.rosh-assistant .hidden{display:none}.rosh-assistant .inline{display:inline}.rosh-assistant .inline-flex{display:inline-flex}.rosh-assistant .table{display:table}.rosh-assistant .size-3{width:.75rem;height:.75rem}.rosh-assistant .size-3\.5{width:.875rem;height:.875rem}.rosh-assistant .h-3{height:.75rem}.rosh-assistant .h-3\.5{height:.875rem}.rosh-assistant .h-4{height:1rem}.rosh-assistant .h-5{height:1.25rem}.rosh-assistant .h-6{height:1.5rem}.rosh-assistant .h-8{height:2rem}.rosh-assistant .h-10{height:2.5rem}.rosh-assistant .h-11{height:2.75rem}.rosh-assistant .h-12{height:3rem}.rosh-assistant .h-14{height:3.5rem}.rosh-assistant .h-16{height:4rem}.rosh-assistant .h-20{height:5rem}.rosh-assistant .h-\[min\(34rem\,calc\(100dvh-6rem\)\)\]{height:min(34rem,100dvh - 6rem)}.rosh-assistant .h-full{height:100%}.rosh-assistant .max-h-32{max-height:8rem}.rosh-assistant .min-h-0{min-height:0}.rosh-assistant .w-3{width:.75rem}.rosh-assistant .w-3\.5{width:.875rem}.rosh-assistant .w-4{width:1rem}.rosh-assistant .w-5{width:1.25rem}.rosh-assistant .w-6{width:1.5rem}.rosh-assistant .w-8{width:2rem}.rosh-assistant .w-10{width:2.5rem}.rosh-assistant .w-11{width:2.75rem}.rosh-assistant .w-12{width:3rem}.rosh-assistant .w-14{width:3.5rem}.rosh-assistant .w-16{width:4rem}.rosh-assistant .w-20{width:5rem}.rosh-assistant .w-full{width:100%}.rosh-assistant .max-w-\[85\%\]{max-width:85%}.rosh-assistant .max-w-\[92\%\]{max-width:92%}.rosh-assistant .min-w-0{min-width:0}.rosh-assistant .flex-1{flex:1}.rosh-assistant .shrink-0{flex-shrink:0}.rosh-assistant .grow{flex-grow:1}.rosh-assistant .basis-48{flex-basis:12rem}.rosh-assistant .border-collapse{border-collapse:collapse}.rosh-assistant .rotate-90{rotate:90deg}.rosh-assistant .cursor-pointer{cursor:pointer}.rosh-assistant .resize{resize:both}.rosh-assistant .resize-none{resize:none}.rosh-assistant .list-decimal{list-style-type:decimal}.rosh-assistant .list-disc{list-style-type:disc}.rosh-assistant .grid-cols-\[max-content_1fr\]{grid-template-columns:max-content 1fr}.rosh-assistant .flex-col{flex-direction:column}.rosh-assistant .flex-wrap{flex-wrap:wrap}.rosh-assistant .items-center{align-items:center}.rosh-assistant .items-end{align-items:flex-end}.rosh-assistant .items-start{align-items:flex-start}.rosh-assistant .justify-center{justify-content:center}.rosh-assistant .justify-end{justify-content:flex-end}.rosh-assistant .justify-start{justify-content:flex-start}.rosh-assistant .gap-1{gap:.25rem}.rosh-assistant .gap-2{gap:.5rem}.rosh-assistant .gap-3{gap:.75rem}:where(.rosh-assistant .space-y-1>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(.25rem * var(--tw-space-y-reverse));margin-block-end:calc(.25rem * calc(1 - var(--tw-space-y-reverse)))}:where(.rosh-assistant .space-y-2>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(.25rem * 2) * var(--tw-space-y-reverse));margin-block-end:calc(calc(.25rem * 2) * calc(1 - var(--tw-space-y-reverse)))}:where(.rosh-assistant .space-y-3>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(.25rem * 3) * var(--tw-space-y-reverse));margin-block-end:calc(calc(.25rem * 3) * calc(1 - var(--tw-space-y-reverse)))}.rosh-assistant .gap-x-3{column-gap:.75rem}.rosh-assistant .gap-y-1{row-gap:.25rem}.rosh-assistant .gap-y-2{row-gap:.5rem}.rosh-assistant .self-center{align-self:center}.rosh-assistant .truncate{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.rosh-assistant .overflow-auto{overflow:auto}.rosh-assistant .overflow-hidden{overflow:hidden}.rosh-assistant .overflow-x-auto{overflow-x:auto}.rosh-assistant .rounded{border-radius:.25rem}.rosh-assistant .rounded-\(--radius-control\){border-radius:var(--radius-control)}.rosh-assistant .rounded-2xl{border-radius:1rem}.rosh-assistant .rounded-full{border-radius:3.40282e38px}.rosh-assistant .rounded-lg{border-radius:.5rem}.rosh-assistant .rounded-xl{border-radius:.75rem}.rosh-assistant .rounded-r-lg{border-top-right-radius:.5rem;border-bottom-right-radius:.5rem}.rosh-assistant .border{border-style:var(--tw-border-style);border-width:1px}.rosh-assistant .border-t{border-top-style:var(--tw-border-style);border-top-width:1px}.rosh-assistant .border-b{border-bottom-style:var(--tw-border-style);border-bottom-width:1px}.rosh-assistant .border-l{border-left-style:var(--tw-border-style);border-left-width:1px}.rosh-assistant .border-l-4{border-left-style:var(--tw-border-style);border-left-width:4px}.rosh-assistant .border-dashed{--tw-border-style:dashed;border-style:dashed}.rosh-assistant .border-\[color\:var\(--line\)\]{border-color:var(--line)}.rosh-assistant .border-\[color\:var\(--status-neutral-solid\)\]{border-color:var(--status-neutral-solid)}.rosh-assistant .border-amber-200{border-color:oklch(92.4% .12 95.746)}.rosh-assistant .border-amber-300{border-color:oklch(87.9% .169 91.605)}.rosh-assistant .border-amber-700{border-color:oklch(55.5% .163 48.998)}.rosh-assistant .border-blue-200{border-color:oklch(88.2% .059 254.128)}.rosh-assistant .border-blue-300{border-color:oklch(80.9% .105 251.813)}.rosh-assistant .border-blue-700{border-color:oklch(48.8% .243 264.376)}.rosh-assistant .border-gray-100{border-color:oklch(96.7% .003 264.542)}.rosh-assistant .border-gray-200{border-color:oklch(92.8% .006 264.531)}.rosh-assistant .border-gray-300{border-color:oklch(87.2% .01 258.338)}.rosh-assistant .border-green-200{border-color:oklch(92.5% .084 155.995)}.rosh-assistant .border-green-700{border-color:oklch(52.7% .154 150.069)}.rosh-assistant .border-red-200{border-color:oklch(88.5% .062 18.334)}.rosh-assistant .border-red-300{border-color:oklch(80.8% .114 19.571)}.rosh-assistant .border-red-700{border-color:oklch(50.5% .213 27.518)}.rosh-assistant .bg-\[var\(--status-neutral-soft\)\]{background-color:var(--status-neutral-soft)}.rosh-assistant .bg-\[var\(--status-neutral-solid\)\]{background-color:var(--status-neutral-solid)}.rosh-assistant .bg-amber-50{background-color:oklch(98.7% .022 95.277)}.rosh-assistant .bg-amber-700{background-color:oklch(55.5% .163 48.998)}.rosh-assistant .bg-blue-50{background-color:oklch(97% .014 254.604)}.rosh-assistant .bg-blue-50\/60{background-color:oklab(97% -.00371685 -.0134976/.6)}.rosh-assistant .bg-blue-600{background-color:oklch(54.6% .245 262.881)}.rosh-assistant .bg-blue-700{background-color:oklch(48.8% .243 264.376)}.rosh-assistant .bg-gray-50{background-color:oklch(98.5% .002 247.839)}.rosh-assistant .bg-gray-100{background-color:oklch(96.7% .003 264.542)}.rosh-assistant .bg-gray-200{background-color:oklch(92.8% .006 264.531)}.rosh-assistant .bg-green-50{background-color:oklch(98.2% .018 155.826)}.rosh-assistant .bg-green-700{background-color:oklch(52.7% .154 150.069)}.rosh-assistant .bg-red-50{background-color:oklch(97.1% .013 17.38)}.rosh-assistant .bg-red-600{background-color:oklch(57.7% .245 27.325)}.rosh-assistant .bg-red-700{background-color:oklch(50.5% .213 27.518)}.rosh-assistant .bg-white{background-color:#fff}.rosh-assistant .p-0{padding:0}.rosh-assistant .p-3{padding:.75rem}.rosh-assistant .px-1{padding-inline:.25rem}.rosh-assistant .px-2{padding-inline:.5rem}.rosh-assistant .px-3{padding-inline:.75rem}.rosh-assistant .px-4{padding-inline:1rem}.rosh-assistant .px-5{padding-inline:1.25rem}.rosh-assistant .px-6{padding-inline:1.5rem}.rosh-assistant .px-8{padding-inline:2rem}.rosh-assistant .py-0\.5{padding-block:.125rem}.rosh-assistant .py-2{padding-block:.5rem}.rosh-assistant .py-3{padding-block:.75rem}.rosh-assistant .py-12{padding-block:3rem}.rosh-assistant .pl-1{padding-left:.25rem}.rosh-assistant .pl-3{padding-left:.75rem}.rosh-assistant .pl-5{padding-left:1.25rem}.rosh-assistant .text-center{text-align:center}.rosh-assistant .text-left{text-align:left}.rosh-assistant .align-top{vertical-align:top}.rosh-assistant .font-mono{font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace}.rosh-assistant .text-2xl{font-size:1.5rem;line-height:var(--tw-leading,calc(2 / 1.5))}.rosh-assistant .text-base{font-size:1rem;line-height:var(--tw-leading,calc(1.5 / 1))}.rosh-assistant .text-lg{font-size:1.125rem;line-height:var(--tw-leading,calc(1.75 / 1.125))}.rosh-assistant .text-sm{font-size:.875rem;line-height:var(--tw-leading,calc(1.25 / .875))}.rosh-assistant .text-xs{font-size:.75rem;line-height:var(--tw-leading,calc(1 / .75))}.rosh-assistant .text-\[0\.85em\]{font-size:.85em}.rosh-assistant .leading-relaxed{--tw-leading:1.625;line-height:1.625}.rosh-assistant .font-medium{--tw-font-weight:500;font-weight:500}.rosh-assistant .font-semibold{--tw-font-weight:600;font-weight:600}.rosh-assistant .tracking-wide{--tw-tracking:.025em;letter-spacing:.025em}.rosh-assistant .break-words{overflow-wrap:break-word}.rosh-assistant .whitespace-pre-wrap{white-space:pre-wrap}.rosh-assistant .text-\[color\:var\(--status-neutral-soft-ink\)\]{color:var(--status-neutral-soft-ink)}.rosh-assistant .text-\[color\:var\(--status-on-solid\)\]{color:var(--status-on-solid)}.rosh-assistant .text-amber-600{color:oklch(66.6% .179 58.318)}.rosh-assistant .text-amber-700{color:oklch(55.5% .163 48.998)}.rosh-assistant .text-blue-600{color:oklch(54.6% .245 262.881)}.rosh-assistant .text-blue-700{color:oklch(48.8% .243 264.376)}.rosh-assistant .text-gray-400{color:oklch(70.7% .022 261.325)}.rosh-assistant .text-gray-500{color:oklch(55.1% .027 264.364)}.rosh-assistant .text-gray-600{color:oklch(44.6% .03 256.802)}.rosh-assistant .text-gray-700{color:oklch(37.3% .034 259.733)}.rosh-assistant .text-gray-800{color:oklch(27.8% .033 256.848)}.rosh-assistant .text-gray-900{color:oklch(21% .034 264.665)}.rosh-assistant .text-green-600{color:oklch(62.7% .194 149.214)}.rosh-assistant .text-inherit{color:inherit}.rosh-assistant .text-red-600{color:oklch(57.7% .245 27.325)}.rosh-assistant .text-white{color:#fff}.rosh-assistant .uppercase{text-transform:uppercase}.rosh-assistant .no-underline{text-decoration-line:none}.rosh-assistant .underline{text-decoration-line:underline}.rosh-assistant .underline-offset-4{text-underline-offset:4px}.rosh-assistant .opacity-80{opacity:.8}.rosh-assistant .shadow{--tw-shadow:0 1px 3px 0 var(--tw-shadow-color,#0000001a), 0 1px 2px -1px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.rosh-assistant .shadow-lg{--tw-shadow:0 10px 15px -3px var(--tw-shadow-color,#0000001a), 0 4px 6px -4px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.rosh-assistant .shadow-sm{--tw-shadow:0 1px 3px 0 var(--tw-shadow-color,#0000001a), 0 1px 2px -1px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.rosh-assistant .shadow-xl{--tw-shadow:0 20px 25px -5px var(--tw-shadow-color,#0000001a), 0 8px 10px -6px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.rosh-assistant .ring{--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.rosh-assistant .transition-colors{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to;transition-timing-function:var(--tw-ease,cubic-bezier(.4, 0, .2, 1));transition-duration:var(--tw-duration,.15s)}.rosh-assistant .select-none{-webkit-user-select:none;user-select:none}.rosh-assistant .marker\:text-gray-400 ::marker{color:oklch(70.7% .022 261.325)}.rosh-assistant .marker\:text-gray-400::marker{color:oklch(70.7% .022 261.325)}.rosh-assistant .marker\:text-gray-400 ::-webkit-details-marker{color:oklch(70.7% .022 261.325)}.rosh-assistant .marker\:text-gray-400::-webkit-details-marker{color:oklch(70.7% .022 261.325)}.rosh-assistant .even\:bg-gray-50\/50:nth-child(2n){background-color:oklab(98.5% -.00075442 -.00185226/.5)}@media (hover:hover){.rosh-assistant .hover\:bg-blue-700:hover{background-color:oklch(48.8% .243 264.376)}.rosh-assistant .hover\:text-gray-600:hover{color:oklch(44.6% .03 256.802)}.rosh-assistant .hover\:text-gray-700:hover{color:oklch(37.3% .034 259.733)}.rosh-assistant .hover\:underline:hover{text-decoration-line:underline}.rosh-assistant .hover\:opacity-100:hover{opacity:1}.rosh-assistant .not-disabled\:not-aria-disabled\:hover\:bg-amber-800:not(:disabled):not([aria-disabled=true]):hover{background-color:oklch(47.3% .137 46.201)}.rosh-assistant .not-disabled\:not-aria-disabled\:hover\:bg-blue-100:not(:disabled):not([aria-disabled=true]):hover{background-color:oklch(93.2% .032 255.585)}.rosh-assistant .not-disabled\:not-aria-disabled\:hover\:bg-blue-700:not(:disabled):not([aria-disabled=true]):hover{background-color:oklch(48.8% .243 264.376)}.rosh-assistant .not-disabled\:not-aria-disabled\:hover\:bg-gray-50:not(:disabled):not([aria-disabled=true]):hover{background-color:oklch(98.5% .002 247.839)}.rosh-assistant .not-disabled\:not-aria-disabled\:hover\:bg-gray-100:not(:disabled):not([aria-disabled=true]):hover{background-color:oklch(96.7% .003 264.542)}.rosh-assistant .not-disabled\:not-aria-disabled\:hover\:bg-red-50:not(:disabled):not([aria-disabled=true]):hover{background-color:oklch(97.1% .013 17.38)}.rosh-assistant .not-disabled\:not-aria-disabled\:hover\:bg-red-700:not(:disabled):not([aria-disabled=true]):hover{background-color:oklch(50.5% .213 27.518)}.rosh-assistant .not-disabled\:not-aria-disabled\:hover\:underline:not(:disabled):not([aria-disabled=true]):hover{text-decoration-line:underline}}.rosh-assistant .focus-visible\:ring-2:focus-visible{--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.rosh-assistant .focus-visible\:ring-\[color\:var\(--rosh-focus-ring\)\]:focus-visible{--tw-ring-color:var(--rosh-focus-ring)}.rosh-assistant .focus-visible\:ring-\[color\:var\(--rosh-focus-ring-invalid\)\]:focus-visible{--tw-ring-color:var(--rosh-focus-ring-invalid)}.rosh-assistant .focus-visible\:ring-\[color\:var\(--rosh-focus-ring-invalid-strong\)\]:focus-visible{--tw-ring-color:var(--rosh-focus-ring-invalid-strong)}.rosh-assistant .focus-visible\:ring-\[color\:var\(--rosh-focus-ring-strong\)\]:focus-visible{--tw-ring-color:var(--rosh-focus-ring-strong)}.rosh-assistant .focus-visible\:outline:focus-visible{outline-style:var(--tw-outline-style);outline-width:1px}.rosh-assistant .focus-visible\:outline-2:focus-visible{outline-style:var(--tw-outline-style);outline-width:2px}.rosh-assistant .focus-visible\:outline-offset-2:focus-visible{outline-offset:2px}.rosh-assistant .focus-visible\:outline-blue-600:focus-visible{outline-color:oklch(54.6% .245 262.881)}.rosh-assistant .disabled\:cursor-not-allowed:disabled{cursor:not-allowed}.rosh-assistant .disabled\:opacity-60:disabled{opacity:.6}.rosh-assistant .aria-disabled\:cursor-not-allowed[aria-disabled=true]{cursor:not-allowed}.rosh-assistant .aria-disabled\:opacity-60[aria-disabled=true]{opacity:.6}@media (prefers-reduced-motion:no-preference){.rosh-assistant .motion-safe\:transition-transform{transition-property:transform,translate,scale,rotate;transition-timing-function:var(--tw-ease,cubic-bezier(.4, 0, .2, 1));transition-duration:var(--tw-duration,.15s)}}@media (prefers-reduced-motion:reduce){.rosh-assistant .motion-reduce\:animate-none{animation:none}}@media (min-width:40rem){.rosh-assistant .sm\:inset-x-auto{inset-inline:auto}.rosh-assistant .sm\:right-4{right:1rem}.rosh-assistant .sm\:w-96{width:24rem}}@property --tw-space-y-reverse{syntax:"*";inherits:false;initial-value:0}@property --tw-border-style{syntax:"*";inherits:false;initial-value:solid}@property --tw-leading{syntax:"*";inherits:false}@property --tw-font-weight{syntax:"*";inherits:false}@property --tw-tracking{syntax:"*";inherits:false}@property --tw-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-shadow-color{syntax:"*";inherits:false}@property --tw-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-inset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-shadow-color{syntax:"*";inherits:false}@property --tw-inset-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-ring-color{syntax:"*";inherits:false}@property --tw-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-ring-color{syntax:"*";inherits:false}@property --tw-inset-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-ring-inset{syntax:"*";inherits:false}@property --tw-ring-offset-width{syntax:"<length>";inherits:false;initial-value:0}@property --tw-ring-offset-color{syntax:"*";inherits:false;initial-value:#fff}@property --tw-ring-offset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-outline-style{syntax:"*";inherits:false;initial-value:solid}
@@ -1,2 +1,2 @@
1
1
  "use client";
2
- export{openFilesInTrashMode,setFilesDemoTree}from"../chunk-YRLOXHKG.js";export{setBrowserStartUrl}from"../chunk-LWLCNQY7.js";export{BUILTIN_APP_INFO}from"../chunk-XDR3Y3WU.js";import"../chunk-DENNF2LM.js";import{setPdfPreview as e}from"../chunk-ESL5TDNA.js";export{setPdfPreview}from"../chunk-ESL5TDNA.js";import{setSpreadsheetPreview as t}from"../chunk-VTVSMRFX.js";export{setSpreadsheetPreview}from"../chunk-VTVSMRFX.js";import{toast_default as o}from"../chunk-LTEM56OL.js";import"../chunk-NGWXT4QX.js";import"../chunk-PR7MCFEU.js";import"../chunk-JXMYF3JR.js";import"../chunk-KNUR2UEG.js";import"../chunk-DSSLOQDW.js";import"../chunk-5A7MWTXX.js";import"../chunk-CWCKDF37.js";import"../chunk-UNLQRUWP.js";import"../chunk-UNA3BQJI.js";import"../chunk-UVBK6YSR.js";import"../chunk-G5GERM76.js";import"../chunk-3E27HV76.js";import"../chunk-7IQ3B77H.js";import"../chunk-FIEA5CGB.js";import"../chunk-K7PQXJO7.js";import"../chunk-2J6F4EE7.js";import{currentShellStrings as r}from"../chunk-LVCRH3K6.js";import"../chunk-C3QOHMR6.js";import"../chunk-D65T4H6J.js";import"../chunk-3G5TA3IF.js";import{lazy as n}from"react";function i(e){const t=/\.([a-z0-9]+)(?:[?#].*)?$/i.exec((e||"").trim());return t?t[1].toLowerCase():""}var s=/* @__PURE__ */new Set(["csv","tsv"]),c=/* @__PURE__ */new Set(["xlsx","xls","xlsm","ods"]),l=/* @__PURE__ */new Set(["png","jpg","jpeg","gif","webp","bmp","svg","avif"]),a=/* @__PURE__ */new Set(["step","stp","stl","obj","gltf","glb","3mf","iges","igs"]);function m(e){const t=i(e);return"pdf"===t?"pdf":"dxf"===t?"dxf":s.has(t)?"csv":l.has(t)?"image":a.has(t)?"3d":null}function p(e){window.open(e,"_blank","noopener,noreferrer")}async function u(e,t,o){if(t.fetchBlob)return(await t.fetchBlob(o)).text();const r=await fetch(e);if(!r.ok)throw new Error(`fetch failed: ${r.status}`);return r.text()}function h(e,t){return(e instanceof Error?e.message:"")||t}async function d(n,s,l={}){const a=r().attachment,d=n?.url||"",f=n?.filename||a.fallbackName;if(!d&&!l.fetchBlob)return void o.error(a.noLink);const j=m(f)??m(d);if("csv"===j){try{t({csv:await u(d,l,n),filename:f}),s("/spreadsheet")}catch{o.error(a.spreadsheetFailed),d&&p(d)}return}if(c.has(i(f)||i(d)))return o.error(a.workbookUnavailable),void(d&&p(d));if(!j)return d?(o.info(a.noViewer),void p(d)):void o.error(a.noLink);if(!l.fetchBlob)return e({url:d,filename:f,kind:j}),void s("/preview");const k=e({filename:f,kind:j,converting:!0,convertingMessage:l.loadingMessage||a.loading});s("/preview");try{const e=await l.fetchBlob(n);k.update({url:URL.createObjectURL(e),filename:f,kind:j})}catch(e){k.update({filename:f,kind:j,converting:!1,convertingMessage:h(e,a.loadFailed)})}}var f=n(()=>import("../Calculator-LKWOOCNC.js")),j=n(()=>import("../Spreadsheet-6NX5WA4J.js")),k=n(()=>import("../Weather-K3BZD2NX.js")),w=n(()=>import("../CurrencyConverter-4QTVWEFM.js")),g=n(()=>import("../PomodoroTimer-L45QS5OR.js")),v=n(()=>import("../Notepad-CLHKYQ34.js")),b=n(()=>import("../WorldClock-5STYQA56.js")),S=n(()=>import("../Stock-ZZ6AM43M.js")),L=n(()=>import("../Preview-47BCBIP4.js")),x=n(()=>import("../PdfViewer-VJ743BW7.js")),C=n(()=>import("../Documents-LELK7IBM.js")),y=n(()=>import("../Files-LAWZGFQQ.js")),B=n(()=>import("../Browser-7M22OFSW.js")),F={"/calculator":{component:f,label:"Calculator",size:"sm",allowPinOnTop:!0,utility:!0,widget:!0,dimensions:[280,420]},"/spreadsheet":{component:j,label:"Spreadsheets",size:"2xl",appStyle:!0,multiInstance:!0},"/notepad":{component:v,label:"Notepad",size:"lg",allowPinOnTop:!0,flushBody:!0},"/weather":{component:k,label:"Weather",size:"sm",utility:!0,widget:!0,autoHeight:!0,dimensions:[320,400]},"/currency":{component:w,label:"Currency Converter",size:"sm",utility:!0,widget:!0,autoHeight:!0,dimensions:[320,480]},"/pomodoro":{component:g,label:"Pomodoro Timer",size:"sm",utility:!0,widget:!0,dimensions:[320,600]},"/world-clock":{component:b,label:"World Clock",size:"sm",utility:!0,widget:!0,autoHeight:!0,dimensions:[320,480]},"/stock":{component:S,label:"Stocks",size:"sm",utility:!0,widget:!0,autoHeight:!0,dimensions:[320,360]}},M={"/preview":{component:L,label:"Preview",size:"2xl",appStyle:!0,multiInstance:!0},"/documents":{component:C,label:"Documents",size:"xl",appStyle:!0,multiInstance:!0},"/files":{component:y,label:"Files",size:"xl",appStyle:!0}},T={"/browser":{component:B,label:"Browser",size:"2xl",appStyle:!0,multiInstance:!0}},N={...F,...M,...T};export{B as Browser,f as Calculator,w as CurrencyConverter,C as Documents,y as Files,v as Notepad,x as PdfViewer,g as PomodoroTimer,L as Preview,j as Spreadsheet,S as Stock,k as Weather,b as WorldClock,m as attachmentKind,N as bundledApps,M as documentApps,d as openAttachment,F as utilityApps,T as webApps};
2
+ export{openFilesInTrashMode,setFilesDemoTree}from"../chunk-3ZZ2UPNR.js";export{setBrowserStartUrl}from"../chunk-LWLCNQY7.js";export{BUILTIN_APP_INFO}from"../chunk-RNPURBKT.js";import"../chunk-4FQTMGCA.js";import{setPdfPreview as e}from"../chunk-ESL5TDNA.js";export{setPdfPreview}from"../chunk-ESL5TDNA.js";import{setSpreadsheetPreview as t}from"../chunk-VTVSMRFX.js";export{setSpreadsheetPreview}from"../chunk-VTVSMRFX.js";import"../chunk-EZTEOTUD.js";import"../chunk-VJ6KJYRS.js";import{toast_default as o}from"../chunk-WSRZRWN7.js";import"../chunk-JGWOY2KV.js";import"../chunk-KRAJDKZC.js";import"../chunk-KNUR2UEG.js";import"../chunk-GFWRYNPX.js";import"../chunk-DSSLOQDW.js";import"../chunk-5A7MWTXX.js";import"../chunk-MMLU5ZHI.js";import"../chunk-UVBK6YSR.js";import"../chunk-G5GERM76.js";import"../chunk-3E27HV76.js";import"../chunk-7IQ3B77H.js";import"../chunk-FIEA5CGB.js";import"../chunk-K7PQXJO7.js";import"../chunk-D65T4H6J.js";import"../chunk-YT4B3NSV.js";import{currentShellStrings as r}from"../chunk-LVCRH3K6.js";import"../chunk-C3QOHMR6.js";import"../chunk-2J6F4EE7.js";import{lazy as n}from"react";function i(e){const t=/\.([a-z0-9]+)(?:[?#].*)?$/i.exec((e||"").trim());return t?t[1].toLowerCase():""}var s=/* @__PURE__ */new Set(["csv","tsv"]),c=/* @__PURE__ */new Set(["xlsx","xls","xlsm","ods"]),l=/* @__PURE__ */new Set(["png","jpg","jpeg","gif","webp","bmp","svg","avif"]),a=/* @__PURE__ */new Set(["step","stp","stl","obj","gltf","glb","3mf","iges","igs"]);function m(e){const t=i(e);return"pdf"===t?"pdf":"dxf"===t?"dxf":s.has(t)?"csv":l.has(t)?"image":a.has(t)?"3d":null}function p(e){window.open(e,"_blank","noopener,noreferrer")}async function u(e,t,o){if(t.fetchBlob)return(await t.fetchBlob(o)).text();const r=await fetch(e);if(!r.ok)throw new Error(`fetch failed: ${r.status}`);return r.text()}function h(e,t){return(e instanceof Error?e.message:"")||t}async function d(n,s,l={}){const a=r().attachment,d=n?.url||"",f=n?.filename||a.fallbackName;if(!d&&!l.fetchBlob)return void o.error(a.noLink);const j=m(f)??m(d);if("csv"===j){try{t({csv:await u(d,l,n),filename:f}),s("/spreadsheet")}catch{o.error(a.spreadsheetFailed),d&&p(d)}return}if(c.has(i(f)||i(d)))return o.error(a.workbookUnavailable),void(d&&p(d));if(!j)return d?(o.info(a.noViewer),void p(d)):void o.error(a.noLink);if(!l.fetchBlob)return e({url:d,filename:f,kind:j}),void s("/preview");const k=e({filename:f,kind:j,converting:!0,convertingMessage:l.loadingMessage||a.loading});s("/preview");try{const e=await l.fetchBlob(n);k.update({url:URL.createObjectURL(e),filename:f,kind:j})}catch(e){k.update({filename:f,kind:j,converting:!1,convertingMessage:h(e,a.loadFailed)})}}var f=n(()=>import("../Calculator-YGJ7I5VT.js")),j=n(()=>import("../Spreadsheet-OVBIGF7S.js")),k=n(()=>import("../Weather-2MOP5LTK.js")),w=n(()=>import("../CurrencyConverter-PH75TBDL.js")),g=n(()=>import("../PomodoroTimer-BUKDNFPJ.js")),S=n(()=>import("../Notepad-OUMZHB2S.js")),v=n(()=>import("../WorldClock-KMMKBE4B.js")),b=n(()=>import("../Stock-FB5VIBVY.js")),B=n(()=>import("../Preview-SGYKP5VY.js")),P=n(()=>import("../PdfViewer-D4GRPG4G.js")),T=n(()=>import("../Documents-KSO66MP3.js")),x=n(()=>import("../Files-TGXFG2JF.js")),y=n(()=>import("../Browser-VNDS2FSD.js")),F={"/calculator":{component:f,label:"Calculator",size:"sm",allowPinOnTop:!0,utility:!0,widget:!0,dimensions:[280,420]},"/spreadsheet":{component:j,label:"Spreadsheets",size:"2xl",appStyle:!0,multiInstance:!0},"/notepad":{component:S,label:"Notepad",size:"lg",allowPinOnTop:!0,flushBody:!0},"/weather":{component:k,label:"Weather",size:"sm",utility:!0,widget:!0,autoHeight:!0,dimensions:[320,400]},"/currency":{component:w,label:"Currency Converter",size:"sm",utility:!0,widget:!0,autoHeight:!0,dimensions:[320,480]},"/pomodoro":{component:g,label:"Pomodoro Timer",size:"sm",utility:!0,widget:!0,dimensions:[320,600]},"/world-clock":{component:v,label:"World Clock",size:"sm",utility:!0,widget:!0,autoHeight:!0,dimensions:[320,480]},"/stock":{component:b,label:"Stocks",size:"sm",utility:!0,widget:!0,autoHeight:!0,dimensions:[320,360]}},R={"/preview":{component:B,label:"Preview",size:"2xl",appStyle:!0,multiInstance:!0},"/documents":{component:T,label:"Documents",size:"xl",appStyle:!0,multiInstance:!0},"/files":{component:x,label:"Files",size:"xl",appStyle:!0}},V={"/browser":{component:y,label:"Browser",size:"2xl",appStyle:!0,multiInstance:!0}},M={...F,...R,...V};export{y as Browser,f as Calculator,w as CurrencyConverter,T as Documents,x as Files,S as Notepad,P as PdfViewer,g as PomodoroTimer,B as Preview,j as Spreadsheet,b as Stock,k as Weather,v as WorldClock,m as attachmentKind,M as bundledApps,R as documentApps,d as openAttachment,F as utilityApps,V as webApps};