@ai-matrx/alchemy 0.20.5 → 0.20.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,13 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## 0.20.6
|
|
4
|
+
|
|
5
|
+
- The internal `estimateTokens` (a 4-chars-per-token stand-in no module used, never part of a
|
|
6
|
+
public entry) is deleted; the platform estimate is `@ai-matrx/kit`'s `estimateTokens` /
|
|
7
|
+
`estimateTokensForText` (architecture step 3).
|
|
8
|
+
|
|
9
|
+
Consumer action: none.
|
|
10
|
+
|
|
3
11
|
## 0.20.5
|
|
4
12
|
|
|
5
13
|
Automatic changed-only republish (docs/metadata drift since the last tag — see
|
package/dist/react-workspace.cjs
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
"use client";
|
|
2
|
-
"use strict";"use client";var __create=Object.create;var __defProp=Object.defineProperty;var __getOwnPropDesc=Object.getOwnPropertyDescriptor;var __getOwnPropNames=Object.getOwnPropertyNames;var __getProtoOf=Object.getPrototypeOf,__hasOwnProp=Object.prototype.hasOwnProperty;var __export=(target,all)=>{for(var name in all)__defProp(target,name,{get:all[name],enumerable:!0})},__copyProps=(to,from,except,desc)=>{if(from&&typeof from=="object"||typeof from=="function")for(let key of __getOwnPropNames(from))!__hasOwnProp.call(to,key)&&key!==except&&__defProp(to,key,{get:()=>from[key],enumerable:!(desc=__getOwnPropDesc(from,key))||desc.enumerable});return to};var __toESM=(mod,isNodeMode,target)=>(target=mod!=null?__create(__getProtoOf(mod)):{},__copyProps(isNodeMode||!mod||!mod.__esModule?__defProp(target,"default",{value:mod,enumerable:!0}):target,mod)),__toCommonJS=mod=>__copyProps(__defProp({},"__esModule",{value:!0}),mod);var react_workspace_exports={};__export(react_workspace_exports,{ALCHEMY_COPY_TRANSFORM_SVG:()=>import_icon2.ALCHEMY_COPY_TRANSFORM_SVG,ALCHEMY_GLYPH_SVG:()=>import_icon2.ALCHEMY_GLYPH_SVG,AlchemyGlyph:()=>AlchemyGlyph,AlchemyTableCopyControls:()=>AlchemyTableCopyControls,ContentTransferCapabilitiesProvider:()=>ContentTransferCapabilitiesProvider,ContentTransferMenu:()=>ContentTransferMenu,ContentTransferSurfaceProvider:()=>ContentTransferSurfaceProvider,GROOMER_LEVELS:()=>GROOMER_LEVELS,MatrxCopyMenu:()=>MatrxCopyMenu,PALETTE_HEADINGS:()=>PALETTE_HEADINGS,applyGroomerPreset:()=>applyGroomerPreset,buildGroomerPresetPayload:()=>buildGroomerPresetPayload,createTransferEmailActions:()=>createTransferEmailActions,createTransferHtmlPreviewAction:()=>createTransferHtmlPreviewAction,defaultGroomerSelections:()=>defaultGroomerSelections,groomerPresetVariants:()=>groomerPresetVariants,tableDataFormat:()=>tableDataFormat,tableSchemaFormat:()=>tableSchemaFormat,useContentTransferCapabilities:()=>useContentTransferCapabilities,useContentTransferSurface:()=>useContentTransferSurface});module.exports=__toCommonJS(react_workspace_exports);var React=__toESM(require("react"),1),import_design_system=require("@ai-matrx/design-system"),import_design_system2=require("@ai-matrx/design-system"),import_jsx_runtime=require("react/jsx-runtime"),cancelled=()=>({status:"cancelled"}),failed=error=>({status:"error",code:"email-failed",message:error instanceof Error?error.message:"Could not send email.",retryable:!0});function useReviewedTransferEmail(email){let[pending,setPending]=React.useState(null),[sending,setSending]=React.useState(!1),pendingRef=React.useRef(null),sendingRef=React.useRef(!1),settle=React.useCallback((request,outcome,render=!0)=>{pendingRef.current===request&&(pendingRef.current=null,request.context.signal.removeEventListener("abort",request.onAbort),request.resolve(outcome),sendingRef.current=!1,render&&(setSending(!1),setPending(null)))},[]);React.useEffect(()=>()=>{let request=pendingRef.current;request&&(pendingRef.current=null,request.context.signal.removeEventListener("abort",request.onAbort),request.resolve(cancelled()),sendingRef.current=!1)},[]);let reviewed=React.useMemo(()=>{if(email)return{send:(artifact,context)=>context.signal.aborted?Promise.resolve(cancelled()):pendingRef.current?Promise.resolve({status:"error",code:"email-review-active",message:"Finish reviewing the current email before starting another.",retryable:!0}):new Promise(resolve2=>{let request={artifact,context,resolve:resolve2,onAbort:()=>settle(request,cancelled())};pendingRef.current=request,context.signal.addEventListener("abort",request.onAbort,{once:!0}),setSending(!1),setPending(request)})}},[email,settle]),cancel=React.useCallback(()=>{let request=pendingRef.current;request&&!sendingRef.current&&settle(request,cancelled())},[settle]),confirm=React.useCallback(()=>{let request=pendingRef.current;!request||sendingRef.current||request.context.signal.aborted||(sendingRef.current=!0,setSending(!0),email?.send(request.artifact,request.context).then(outcome=>settle(request,outcome),error=>settle(request,failed(error))))},[email,settle]),review=pending?(0,import_jsx_runtime.jsx)(import_design_system2.Dialog,{open:!0,onOpenChange:open=>{open||cancel()},children:(0,import_jsx_runtime.jsxs)(import_design_system2.DialogContent,{className:"matrx-alchemy-workspace matrx-alchemy-email-review","aria-busy":sending,children:[(0,import_jsx_runtime.jsxs)(import_design_system2.DialogHeader,{children:[(0,import_jsx_runtime.jsx)(import_design_system2.DialogTitle,{children:"Review email attachment"}),(0,import_jsx_runtime.jsxs)(import_design_system2.DialogDescription,{children:["Email ",pending.artifact.file?.filename??`${pending.artifact.format} output`," from ",pending.context.label,". Review this exact attachment before sending."]})]}),(0,import_jsx_runtime.jsx)("textarea",{"aria-label":"Email attachment preview",readOnly:!0,value:pending.artifact.plainText,className:"matrx-alchemy-preview"}),pending.artifact.omissions.length?(0,import_jsx_runtime.jsxs)("details",{className:"matrx-alchemy-email-adjustments",open:!0,children:[(0,import_jsx_runtime.jsxs)("summary",{children:[pending.artifact.omissions.length," omission",pending.artifact.omissions.length===1?"":"s"," or adjustment",pending.artifact.omissions.length===1?"":"s"]}),(0,import_jsx_runtime.jsx)("ul",{children:pending.artifact.omissions.map((omission,index)=>(0,import_jsx_runtime.jsxs)("li",{children:[omission.path||"/",": ",omission.reason,omission.count==null?"":` (${omission.count})`]},`${omission.path}-${omission.reason}-${index}`))})]}):(0,import_jsx_runtime.jsx)("p",{className:"matrx-alchemy-meta",children:"No omissions or adjustments."}),(0,import_jsx_runtime.jsxs)(import_design_system2.DialogFooter,{children:[(0,import_jsx_runtime.jsx)(import_design_system.Button,{type:"button",variant:"outline",className:"matrx-alchemy-workspace-secondary",disabled:sending,onClick:cancel,children:"Cancel"}),(0,import_jsx_runtime.jsx)(import_design_system.Button,{type:"button",className:"matrx-alchemy-workspace-primary",disabled:sending,onClick:confirm,children:sending?"Sending email\u2026":"Send email"})]})]})}):null;return{email:reviewed,review}}var React6=__toESM(require("react"),1),import_react_dom2=require("react-dom"),import_operate7=require("@ai-matrx/alchemy/operate"),import_design_system8=require("@ai-matrx/design-system"),import_design_system9=require("@ai-matrx/design-system");var React2=__toESM(require("react"),1),import_format=require("@ai-matrx/kit/format"),import_operate=require("@ai-matrx/alchemy/operate"),import_filter_engine=require("@ai-matrx/design-system/data-table/filter-engine"),import_jsx_runtime2=require("react/jsx-runtime");function MenuPresentation({label,hint,icon:Icon}){return(0,import_jsx_runtime2.jsxs)(import_jsx_runtime2.Fragment,{children:[Icon?(0,import_jsx_runtime2.jsx)(Icon,{className:"matrx-alchemy-menu-icon"}):(0,import_jsx_runtime2.jsx)(PaletteGlyph,{file:!0}),(0,import_jsx_runtime2.jsxs)("span",{children:[label,hint?(0,import_jsx_runtime2.jsx)("small",{className:"matrx-alchemy-menu-hint",children:hint}):null]})]})}function DestinationPresentation({action}){let path={notes:"M5 3h14v18H5zM8 8h8M8 12h8M8 16h5",scratch:"M5 3h14v18H5zM9 12h6M12 9v6",document:"M6 3h8l4 4v14H6zM14 3v5h4M9 12h6M9 16h6",workbook:"M3 4h18v16H3zM3 9h18M9 4v16M15 9v11M3 15h18",task:"M9 6h11M9 12h11M9 18h11M3 6l1 1 2-2M3 12l1 1 2-2M3 18l1 1 2-2",attach:"m9 12 5-5a3 3 0 0 1 4 4l-7 7a5 5 0 0 1-7-7l8-8M7 14l7-7",code:"m8 6-6 6 6 6m8-12 6 6-6 6m-3-14-2 16",chat:"M4 4h16v13H9l-5 4zM8 9h8M8 13h5",assistant:"M3 4h18v16H3zM15 4v16M6 9h6M6 13h4",tools:"m14 4 3 3 4-1a6 6 0 0 1-8 7l-7 7-3-3 7-7a6 6 0 0 1 4-6z"}[action.id.replace(/^matrx:/,"")];return(0,import_jsx_runtime2.jsxs)(import_jsx_runtime2.Fragment,{children:[action.icon?(0,import_jsx_runtime2.jsx)(action.icon,{className:"matrx-alchemy-menu-icon"}):path?(0,import_jsx_runtime2.jsx)("svg",{className:"matrx-alchemy-palette-glyph",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"1.8",strokeLinecap:"round",strokeLinejoin:"round","aria-hidden":"true",children:(0,import_jsx_runtime2.jsx)("path",{d:path})}):(0,import_jsx_runtime2.jsx)(PaletteGlyph,{file:!0}),(0,import_jsx_runtime2.jsxs)("span",{children:[action.label,action.hint?(0,import_jsx_runtime2.jsx)("small",{className:"matrx-alchemy-menu-hint",children:action.hint}):null]})]})}function ReceiptLink({target}){return target?.href&&/^(\/(?!\/)|https?:\/\/)/.test(target.href)?(0,import_jsx_runtime2.jsxs)("a",{className:"matrx-alchemy-receipt-link",href:target.href,children:["Open ",target.kind]}):null}function PaletteGlyph({format,ai=!1,file=!1,kind}){return kind==="link"?(0,import_jsx_runtime2.jsx)("svg",{className:"matrx-alchemy-palette-glyph",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"1.8",strokeLinecap:"round",strokeLinejoin:"round","aria-hidden":"true",children:(0,import_jsx_runtime2.jsx)("path",{d:"M10 13a5 5 0 0 0 7 0l3-3a5 5 0 0 0-7-7l-2 2M14 11a5 5 0 0 0-7 0l-3 3a5 5 0 0 0 7 7l2-2"})}):kind==="surface"?(0,import_jsx_runtime2.jsxs)("svg",{className:"matrx-alchemy-palette-glyph",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"1.8",strokeLinecap:"round",strokeLinejoin:"round","aria-hidden":"true",children:[(0,import_jsx_runtime2.jsx)("rect",{x:"3",y:"3",width:"18",height:"18",rx:"2"}),(0,import_jsx_runtime2.jsx)("path",{d:"M3 9h18M9 9v12"})]}):kind==="ai-copy"?(0,import_jsx_runtime2.jsxs)("svg",{className:"matrx-alchemy-palette-glyph",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"1.8",strokeLinecap:"round",strokeLinejoin:"round","aria-hidden":"true",children:[(0,import_jsx_runtime2.jsx)("rect",{x:"5",y:"5",width:"11",height:"14",rx:"2"}),(0,import_jsx_runtime2.jsx)("path",{d:"M9 3h6a2 2 0 0 1 2 2v10"}),(0,import_jsx_runtime2.jsx)("path",{d:"m18.5 3 .55 1.45L20.5 5l-1.45.55L18.5 7l-.55-1.45L16.5 5l1.45-.55z"})]}):kind==="sliders"?(0,import_jsx_runtime2.jsxs)("svg",{className:"matrx-alchemy-palette-glyph",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"1.8",strokeLinecap:"round",strokeLinejoin:"round","aria-hidden":"true",children:[(0,import_jsx_runtime2.jsx)("path",{d:"M4 6h16M4 12h16M4 18h16"}),(0,import_jsx_runtime2.jsx)("path",{d:"M8 3v6M16 9v6M10 15v6"})]}):ai?(0,import_jsx_runtime2.jsxs)("svg",{className:"matrx-alchemy-palette-glyph",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"1.8",strokeLinecap:"round",strokeLinejoin:"round","aria-hidden":"true",children:[(0,import_jsx_runtime2.jsx)("path",{d:"M12 5a3 3 0 1 0-5.997.125A4 4 0 0 0 3.5 10.9a4 4 0 0 0 .556 6.588A4 4 0 0 0 12 19"}),(0,import_jsx_runtime2.jsx)("path",{d:"M12 5a3 3 0 1 1 5.997.125 4 4 0 0 1 2.503 5.775 4 4 0 0 1-.556 6.588A4 4 0 0 1 12 19"}),(0,import_jsx_runtime2.jsx)("path",{d:"M12 5v14M8 9h1M15 9h1M8 15h1M15 15h1"})]}):file?(0,import_jsx_runtime2.jsxs)("svg",{className:"matrx-alchemy-palette-glyph",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"1.8",strokeLinecap:"round",strokeLinejoin:"round","aria-hidden":"true",children:[(0,import_jsx_runtime2.jsx)("path",{d:"M6 3h8l4 4v14H6z"}),(0,import_jsx_runtime2.jsx)("path",{d:"M14 3v5h5M9 13h6M9 17h6"})]}):(0,import_jsx_runtime2.jsx)("svg",{className:"matrx-alchemy-palette-glyph",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"1.8",strokeLinecap:"round",strokeLinejoin:"round","aria-hidden":"true",children:format==="json"||format==="table-data"?(0,import_jsx_runtime2.jsxs)(import_jsx_runtime2.Fragment,{children:[(0,import_jsx_runtime2.jsx)("path",{d:"M9 4C7 4 7 7 5 7v3c2 0 2 1 2 2s0 2-2 2v3c2 0 2 3 4 3"}),(0,import_jsx_runtime2.jsx)("path",{d:"M15 4c2 0 2 3 4 3v3c-2 0-2 1-2 2s0 2 2 2v3c-2 0-2 3-4 3"})]}):format==="table-schema"?(0,import_jsx_runtime2.jsxs)(import_jsx_runtime2.Fragment,{children:[(0,import_jsx_runtime2.jsx)("rect",{x:"8",y:"3",width:"8",height:"5",rx:"1"}),(0,import_jsx_runtime2.jsx)("rect",{x:"2",y:"16",width:"8",height:"5",rx:"1"}),(0,import_jsx_runtime2.jsx)("rect",{x:"14",y:"16",width:"8",height:"5",rx:"1"}),(0,import_jsx_runtime2.jsx)("path",{d:"M12 8v4M6 16v-4h12v4"})]}):format==="compact-json"?(0,import_jsx_runtime2.jsxs)(import_jsx_runtime2.Fragment,{children:[(0,import_jsx_runtime2.jsx)("path",{d:"m14 10 7-7"}),(0,import_jsx_runtime2.jsx)("path",{d:"M20 10h-6V4"}),(0,import_jsx_runtime2.jsx)("path",{d:"m3 21 7-7"}),(0,import_jsx_runtime2.jsx)("path",{d:"M4 14h6v6"})]}):format==="csv"?(0,import_jsx_runtime2.jsxs)(import_jsx_runtime2.Fragment,{children:[(0,import_jsx_runtime2.jsx)("rect",{x:"4",y:"4",width:"16",height:"16",rx:"1"}),(0,import_jsx_runtime2.jsx)("path",{d:"M4 10h16M10 4v16"})]}):format==="tsv"?(0,import_jsx_runtime2.jsxs)(import_jsx_runtime2.Fragment,{children:[(0,import_jsx_runtime2.jsx)("path",{d:"M14 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8z"}),(0,import_jsx_runtime2.jsx)("path",{d:"M14 2v6h6M8 13h2M14 13h2M8 17h2M14 17h2"})]}):format==="xlsx"?(0,import_jsx_runtime2.jsxs)(import_jsx_runtime2.Fragment,{children:[(0,import_jsx_runtime2.jsx)("path",{d:"M14 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8z"}),(0,import_jsx_runtime2.jsx)("path",{d:"M14 2v6h6M8 13h8M8 17h8M12 11v8"})]}):format==="markdown"?(0,import_jsx_runtime2.jsxs)(import_jsx_runtime2.Fragment,{children:[(0,import_jsx_runtime2.jsx)("path",{d:"M14.5 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V7.5z"}),(0,import_jsx_runtime2.jsx)("path",{d:"M14 2v6h6M10 13l-2 2 2 2M14 17l2-2-2-2"})]}):format==="html"?(0,import_jsx_runtime2.jsx)(import_jsx_runtime2.Fragment,{children:(0,import_jsx_runtime2.jsx)("path",{d:"M15 6h6M3 6h7M3 12h18M3 18h12"})}):(0,import_jsx_runtime2.jsx)(import_jsx_runtime2.Fragment,{children:(0,import_jsx_runtime2.jsx)("path",{d:"M4 7V4h16v3M9 20h6M12 4v16"})})})}var LABEL={plain:"Plain text",markdown:"Markdown",html:"Formatted",json:"JSON","compact-json":"Compact JSON",csv:"CSV",tsv:"Google Sheets",xlsx:"Excel workbook"},BUILT_INS=Object.freeze(Object.keys(LABEL).map(id=>({id}))),COPIES=["plain","markdown","html","json","compact-json","csv","tsv"],DOWNLOADS=[...COPIES,"xlsx"],EMPTY_VARIANTS=[],SCOPE_LABEL={target:"This content",row:"This row",selected:"Selected rows",view:"Current view",loaded:"Loaded rows","all-matching":"All matching rows"},filenameFor=label=>label.toLocaleLowerCase().replace(/[^a-z0-9]+/g,"-").replace(/(^-|-$)/g,"")||"export";var errorMessage=(error,fallback)=>error instanceof Error?error.message:fallback,isAbort=error=>error instanceof DOMException&&error.name==="AbortError",supportsBuiltIn=(format,payload)=>!["csv","tsv","xlsx"].includes(format)||payload.kind==="rows",outcomeMessage=result=>{if(result.status==="success"){let success=result;return success.delivered==="action"?success.message??"Action completed":success.delivered==="download-started"?"Download started":success.message??"Copied"}return result.status==="queued"?`${result.message} ${result.remedy}`:result.status==="degraded"?`Copied as plain text: ${result.reason}`:result.status==="cancelled"?"Cancelled":result.message},materialIds=new WeakMap,nextMaterialId=0;function materialIdentity(material){if(!material)return"missing";if("instanceId"in material)return`surface:${material.instanceId}`;if("id"in material)return`source:${material.id}`;let id=materialIds.get(material);return id===void 0&&(id=++nextMaterialId,materialIds.set(material,id)),`payload:${id}`}function snapshotContent(snapshot){let{sourceId,label,payload,coverage,unsavedChanges,omissions,sections,limits}=snapshot;return JSON.stringify({sourceId,label,payload,coverage,unsavedChanges,omissions,sections,limits})}function useFence(){let mounted=React2.useRef(!0),nextId=React2.useRef(0),active=React2.useRef(new Set);React2.useEffect(()=>(mounted.current=!0,()=>{mounted.current=!1,nextId.current+=1,active.current.forEach(c=>c.abort()),active.current.clear()}),[]);let begin=React2.useCallback(()=>{let controller=new AbortController;return active.current.add(controller),{controller,id:++nextId.current}},[]),finish=React2.useCallback(controller=>active.current.delete(controller),[]),valid=React2.useCallback((id,controller)=>mounted.current&&!controller.signal.aborted&&nextId.current===id,[]),abortAll=React2.useCallback(()=>{nextId.current+=1,active.current.forEach(c=>c.abort()),active.current.clear()},[]);return{begin,finish,valid,abortAll}}async function xlsxArtifact(draft,label){if(draft.payload.kind!=="rows")throw new Error("Excel workbook export requires tabular content.");let{xlsxEngine}=await import("@ai-matrx/alchemy/operate/formats/xlsx");return xlsxEngine.build(draft,{filename:`${filenameFor(label)}.xlsx`},new AbortController().signal)}async function buildWithAdapter(adapter,draft,signal,options={}){return(await adapter.load()).build(draft,options,signal)}async function markdownRichArtifact(draft,filename="export.html"){if(draft.payload.kind!=="markdown")throw new Error("Rich Markdown requires Markdown content.");let{richHtmlEngine}=await import("@ai-matrx/alchemy/operate/formats/rich-html"),rich=await richHtmlEngine.build(draft,{filename},new AbortController().signal);return(0,import_operate.sealTransferArtifact)({snapshotId:draft.snapshotId,draftRevision:draft.revision,format:"html",plainText:draft.payload.text,...rich.html===void 0?{}:{html:rich.html},...rich.file===void 0?{}:{file:rich.file},omissions:[...draft.omissions]})}async function buildArtifact(draft,format,label){if(!supportsBuiltIn(format,draft.payload))throw new Error(`${LABEL[format]} is available for tabular content only.`);if(format==="xlsx")return xlsxArtifact(draft,label);if(format==="html"&&draft.payload.kind==="markdown")return markdownRichArtifact(draft,`${filenameFor(label)}.html`);let extension=format==="plain"?"txt":format==="compact-json"?"json":format;return(0,import_operate.serialize)(draft,format,{filename:`${filenameFor(label)}.${extension}`})}function hostEngineFor(adapters,format){return isBuiltInFormat(format)?adapters.find(adapter=>adapter.id===format):void 0}async function buildFormat(draft,format,label,adapters,signal){let engine=hostEngineFor(adapters,format);if(!engine)return buildArtifact(draft,format,label);let artifact=await buildWithAdapter(engine,draft,signal);if(!artifact.file)return artifact;let dot=artifact.file.filename.lastIndexOf("."),extension=dot>0?artifact.file.filename.slice(dot):"";return(0,import_operate.sealTransferArtifact)({...artifact,file:{filename:`${filenameFor(label)}${extension}`,mime:artifact.file.mime,bytes:artifact.file.bytes}})}function offersFormat(format,payload,adapters){if(format==="plain"&&payload.kind==="rows")return!1;let engine=hostEngineFor(adapters,format);return engine?engine.supports(payload):supportsBuiltIn(format,payload)&&offersDistinctOutput(format,payload)}var NO_STRUCTURE={exclude:[],limits:{}},exportableColumn=column=>column.exportable!==!1&&column.classification!=="secret"&&column.classification!=="credential";function initialControls(state){let rows=state.original.payload.kind==="rows"?state.original.payload:null;return{preset:state.preferences.initialPreset,sections:state.snapshot.sections.filter(s=>s.includedByDefault).map(s=>s.id),search:"",searchMode:"contains",filters:{},layeredFilters:[],sort:"",direction:"asc",top:state.preferences.limits.maxRows,visibleColumns:rows?.columns.filter(c=>c.visible&&exportableColumn(c)).map(c=>c.id)??[],excludedRows:[],structure:NO_STRUCTURE,sectionLimits:{},columnLimits:{},maxDepth:state.preferences.limits.maxDepth,maxStringChars:state.preferences.limits.maxStringChars,maxArrayItems:state.preferences.limits.maxArrayItems??null}}function presetLimits(preset,controls,preferences){let min=(choice,cap)=>choice==null?cap:cap==null?choice:Math.min(choice,cap);if(preset==="full")return preferences.limits;let request=preset==="brief"?{maxDepth:4,maxStringChars:800,maxArrayItems:25}:preset==="compact"?{maxDepth:8,maxStringChars:4e3,maxArrayItems:100}:{maxDepth:controls.maxDepth,maxStringChars:controls.maxStringChars,maxArrayItems:controls.maxArrayItems};return{...preferences.limits,maxDepth:min(request.maxDepth,preferences.limits.maxDepth),maxStringChars:min(request.maxStringChars,preferences.limits.maxStringChars),maxArrayItems:min(request.maxArrayItems,preferences.limits.maxArrayItems??null)}}var layouts=new WeakMap,draftLayout=draft=>layouts.get(draft)??{};function matchRows(payload,controls){let shown=new Set(controls.visibleColumns),defs=payload.columns.filter(column=>shown.has(column.id)&&exportableColumn(column)).map(column=>({id:column.id,header:column.label,accessorFn:index=>(0,import_operate.readTransferCell)(payload.rows[index],column)})),filters=Object.fromEntries(Object.entries(controls.filters).filter(([id,value])=>value&&shown.has(id)).map(([id,value])=>[id,{kind:"text",value}])),sort=controls.sort&&shown.has(controls.sort)?{id:controls.sort,direction:controls.direction}:null;return(0,import_filter_engine.filterAndSortRows)(payload.rows.map((_,index)=>index),defs,filters,sort,controls.search,void 0,controls.layeredFilters.filter(rule=>shown.has(rule.field)),controls.searchMode)}function applyColumnLimits(draft,limits){let payload=draft.payload,entries=Object.entries(limits);if(payload.kind!=="rows"||!entries.length)return draft;let omissions=[],rows=payload.rows;for(let[id,limit]of entries){let column=payload.columns.find(candidate=>candidate.id===id);if(!column||limit.kind==="maxItems")continue;let count=0;rows=rows.map(row=>{let value=row[id];if(value==null)return row;let text=typeof value=="string"?value:JSON.stringify(value);return limit.kind==="stub"?(count++,{...row,[id]:(0,import_operate.stubText)(value)}):text.length<=limit.value?row:(count++,{...row,[id]:`${text.slice(0,limit.value)} \u2026 [truncated \u2014 ${(0,import_format.formatCount)(text.length,{locale:"en-US"})} chars]`})}),count&&omissions.push({path:`/columns/${id}`,reason:"truncated",count,label:`${column.label} \u2014 ${limit.kind==="stub"?"stubbed":`cut to ${(0,import_format.formatCount)(limit.value)} chars per cell`}`})}return omissions.length?(0,import_operate.deriveDraft)(draft,{...payload,rows},omissions,"Column limits"):draft}function rebuild(state,controls){let draft=(0,import_operate.resetDraft)(state.snapshot),layout={},sections=state.snapshot.sections;if(sections.length){let payload=draft.payload;if((payload.kind==="text"||payload.kind==="markdown")&§ions.every(import_operate.isProseSection)){let laid=(0,import_operate.sectionLayout)(payload.text,sections,controls.sections,controls.sectionLimits);draft=(0,import_operate.deriveDraft)(draft,{...payload,text:laid.text},laid.omissions,"Selected sections"),layout.sectionRanges=laid.ranges,layout.sectionText=laid.text}else payload.kind==="json"||payload.kind==="registered"?draft=(0,import_operate.applySectionStructure)(draft,sections,controls.sections,controls.sectionLimits):draft=(0,import_operate.applySectionSelection)(draft,state.snapshot,controls.sections)}if(draft.payload.kind==="rows"){let payload=draft.payload,matched=matchRows(payload,controls),left=new Set(controls.excludedRows),order=matched.filter(index=>!left.has(index));layout.matchedRows=matched,layout.rowOrder=order;let omissions=[];matched.length<payload.rows.length&&omissions.push({path:"/rows",reason:"filtered",count:payload.rows.length-matched.length,label:"rows the search and filters leave out"}),order.length<matched.length&&omissions.push({path:"/rows",reason:"excluded",count:matched.length-order.length,label:"rows you left out"}),order.length===payload.rows.length&&order.every((index,position)=>index===position)||(draft=(0,import_operate.deriveDraft)(draft,{...payload,rows:order.map(index=>payload.rows[index])},omissions,"Rows you chose"));let visible=controls.visibleColumns.filter(id=>payload.columns.some(column=>column.id===id&&exportableColumn(column)));draft=(0,import_operate.transformRows)(draft,{visibleColumns:visible,structuredProjection:"visible",top:controls.top}),controls.top!=null&&order.length>controls.top&&(layout.rowOrder=order.slice(0,controls.top)),draft=applyColumnLimits(draft,controls.columnLimits)}(draft.payload.kind==="json"||draft.payload.kind==="registered")&&(draft=(0,import_operate.applyJsonStructure)(draft,controls.structure));let limits=presetLimits(controls.preset,controls,state.preferences);(draft.payload.kind==="json"||draft.payload.kind==="registered")&&(draft=(0,import_operate.reduceJson)(draft,{maxDepth:limits.maxDepth,maxStringChars:limits.maxStringChars,maxArrayItems:limits.maxArrayItems??null}));let final=(0,import_operate.applyTransferLimits)(draft,limits);return layouts.set(final,layout),final}function offersDistinctOutput(format,payload){return payload.kind==="markdown"?format!=="plain"&&format!=="compact-json":payload.kind==="json"||payload.kind==="registered"?format!=="plain"&&format!=="markdown":payload.kind==="text"?format!=="compact-json"&&(format!=="markdown"||!!payload.language):!0}function countNoun(unit,n){return n===1?unit:`${unit}s`}function isBuiltInFormat(format){return format in LABEL}function envelopeDataFormat(format,artifact){return format==="html"||format==="xlsx"||artifact.html!==void 0?null:format==="plain"?"text":/^[a-z][a-z0-9-]*$/.test(format)?format:"text"}function defaultEnvelope(snapshot){return{kind:"matrx_content",location:snapshot.label,description:"Captured content for an assistant",attributes:{source:snapshot.sourceId}}}var envelopeBodies=new WeakMap;function sealForAi(formatArtifact,dataFormat,envelope,instructions,label){let data=dataFormat==="json"?JSON.parse(formatArtifact.plainText):formatArtifact.plainText,{text,body,bodyOffset}=(0,import_operate.assembleAgentPayload)({...envelope,data,dataFormat,...instructions.trim()?{instructions}:{}}),artifact=(0,import_operate.sealTransferArtifact)({snapshotId:formatArtifact.snapshotId,draftRevision:formatArtifact.draftRevision,format:`ai-context:${formatArtifact.format}`,plainText:text,file:{filename:`${filenameFor(label)}-for-ai.md`,mime:"text/markdown;charset=utf-8",bytes:new TextEncoder().encode(text)},omissions:[...formatArtifact.omissions]});return envelopeBodies.set(artifact,{body,bodyOffset,dataFormat}),artifact}function shownSpans(draft,formatArtifact,shown){let base;try{base=(0,import_operate.spanMap)(draft,formatArtifact)}catch{return null}if(shown===formatArtifact)return base;let envelope=envelopeBodies.get(shown);if(!envelope)return null;try{if(envelope.dataFormat!=="json")return envelope.body===formatArtifact.plainText?(0,import_operate.offsetSpans)(base,envelope.bodyOffset):null;let spans=(0,import_operate.jsonTextSpans)(envelope.body,"",envelope.bodyOffset);return draft.payload.kind==="rows"?spans.map(span=>({...span,path:`/rows${span.path}`})):spans}catch{return null}}function sectionSpan(draft,spans,text,sectionId){let layout=draftLayout(draft),range=layout.sectionRanges?.[sectionId],whole=spans.find(span=>span.path===""),payload=draft.payload;return!range||!whole||payload.kind!=="text"&&payload.kind!=="markdown"||layout.sectionText!==payload.text||text.slice(whole.start,whole.end)!==payload.text?null:{path:`/sections/${sectionId}`,start:whole.start+range.start,end:whole.start+range.end}}var encodePointer=segment=>segment.replace(/~/g,"~0").replace(/\//g,"~1"),sortMarks=marks=>marks.sort((a,b)=>a.start-b.start||b.end-a.end);function outermost(marks){let out=[];for(let mark of sortMarks(marks)){let last=out[out.length-1];last&&mark.start>=last.start&&mark.end<=last.end||out.push(mark)}return out}async function locateProjectedSections(output,pieces,engine,signal){let found={},cursor=0;for(let piece of pieces){let draft={snapshotId:"section",sourceId:"section",sourceRevision:"section",revision:0,payload:{kind:"markdown",text:piece.text},omissions:[],manuallyEdited:!1,provenance:[]},projected=(await buildWithAdapter(engine,draft,signal)).plainText.trim();if(!projected)continue;let at=output.indexOf(projected,cursor);at<0||(found[piece.id]={start:at,end:at+projected.length},cursor=at+projected.length)}return found}function removedMarks(state,controls,full,fullArtifact,projected){let spans;try{spans=(0,import_operate.spanMap)(full,fullArtifact)}catch{return null}let byPath=new Map(spans.map(span=>[span.path,span])),marks=[],mark=(path,kind)=>{let span=byPath.get(path);span&&span.end>span.start&&marks.push({start:span.start,end:span.end,kind})},payload=full.payload;if(payload.kind==="json"||payload.kind==="registered"){for(let pattern of controls.structure.exclude)(0,import_operate.concretePointers)(payload.value,pattern).forEach(pointer=>mark(pointer,"removed"));for(let pattern of Object.keys(controls.structure.limits))(0,import_operate.concretePointers)(payload.value,pattern).forEach(pointer=>mark(pointer,"changed"))}let sections=state.snapshot.sections;if(sections.length){let keep=new Set(controls.sections);if((payload.kind==="text"||payload.kind==="markdown")&§ions.every(import_operate.isProseSection)){let whole=byPath.get(""),exact=whole&&fullArtifact.plainText.slice(whole.start,whole.end)===payload.text;for(let section of sections){let[,a,b]=/^\/text\/(\d+)-(\d+)$/.exec(section.path),kind=keep.has(section.id)?controls.sectionLimits[section.id]?"changed":null:"removed";kind&&(exact?marks.push({start:whole.start+Number(a),end:whole.start+Number(b),kind}):projected?.[section.id]&&marks.push({...projected[section.id],kind}))}}else for(let section of sections)keep.has(section.id)?controls.sectionLimits[section.id]&&mark(section.path,"changed"):mark(section.path,"removed")}if(payload.kind==="rows"){let kept=new Set(draftLayout(state.draft).rowOrder??payload.rows.map((_,index)=>index)),shown=new Set(controls.visibleColumns),hidden=payload.columns.filter(column=>column.visible&&exportableColumn(column)&&!shown.has(column.id));payload.rows.forEach((_,index)=>{if(!kept.has(index)){mark(`/rows/${index}`,"removed");return}let cell=(column,kind)=>{mark(`/rows/${index}${column.path}`,kind),mark(`/rows/${index}/${encodePointer(column.id)}`,kind)};for(let column of hidden)cell(column,"removed");for(let id of Object.keys(controls.columnLimits)){let column=payload.columns.find(candidate=>candidate.id===id);column&&shown.has(id)&&cell(column,"changed")}});for(let column of hidden)mark(`/columns/${encodePointer(column.id)}`,"removed")}let merged=[...outermost(marks.filter(m=>m.kind==="removed")),...outermost(marks.filter(m=>m.kind==="changed"))];return{marks:sortMarks(merged),removed:merged.filter(m=>m.kind==="removed").length,changed:merged.filter(m=>m.kind==="changed").length,chars:merged.filter(m=>m.kind==="removed").reduce((sum,m)=>sum+m.end-m.start,0)}}function findMatches(text,query,mode,cap=1e3){let trimmed=query.trim();if(!trimmed)return{marks:[],total:0};let escape=value=>value.replace(/[.*+?^${}()|[\]\\]/g,"\\$&"),pattern=mode==="whole_words"?new RegExp(trimmed.split(/[^\p{L}\p{N}]+/u).filter(Boolean).map(word=>`(?<![\\p{L}\\p{N}])${escape(word)}(?![\\p{L}\\p{N}])`).join("|")||"(?!)","giu"):new RegExp(escape(trimmed),"gi"),marks=[],total=0;for(let match of text.matchAll(pattern))match[0]&&(total++,marks.length<cap&&marks.push({start:match.index??0,end:(match.index??0)+match[0].length,kind:"match"}));return{marks,total}}var decodePointer=segment=>segment.replace(/~1/g,"/").replace(/~0/g,"~");function sectionSize(payload,path){let range=/^\/text\/(\d+)-(\d+)$/.exec(path);if(range&&(payload.kind==="text"||payload.kind==="markdown"))return Math.max(0,Number(range[2])-Number(range[1]));if(payload.kind!=="json"&&payload.kind!=="registered")return null;let segments=path.split("/").slice(1).map(decodePointer),value=payload.value;for(let segment of segments){if(value===null||typeof value!="object")return null;value=value[segment]}let text=JSON.stringify(value,null,2);return text===void 0?null:text.replace(/\n/g,`
|
|
2
|
+
"use strict";"use client";var __create=Object.create;var __defProp=Object.defineProperty;var __getOwnPropDesc=Object.getOwnPropertyDescriptor;var __getOwnPropNames=Object.getOwnPropertyNames;var __getProtoOf=Object.getPrototypeOf,__hasOwnProp=Object.prototype.hasOwnProperty;var __export=(target,all)=>{for(var name in all)__defProp(target,name,{get:all[name],enumerable:!0})},__copyProps=(to,from,except,desc)=>{if(from&&typeof from=="object"||typeof from=="function")for(let key of __getOwnPropNames(from))!__hasOwnProp.call(to,key)&&key!==except&&__defProp(to,key,{get:()=>from[key],enumerable:!(desc=__getOwnPropDesc(from,key))||desc.enumerable});return to};var __toESM=(mod,isNodeMode,target)=>(target=mod!=null?__create(__getProtoOf(mod)):{},__copyProps(isNodeMode||!mod||!mod.__esModule?__defProp(target,"default",{value:mod,enumerable:!0}):target,mod)),__toCommonJS=mod=>__copyProps(__defProp({},"__esModule",{value:!0}),mod);var react_workspace_exports={};__export(react_workspace_exports,{ALCHEMY_COPY_TRANSFORM_SVG:()=>import_icon2.ALCHEMY_COPY_TRANSFORM_SVG,ALCHEMY_GLYPH_SVG:()=>import_icon2.ALCHEMY_GLYPH_SVG,AlchemyGlyph:()=>AlchemyGlyph,AlchemyTableCopyControls:()=>AlchemyTableCopyControls,ContentTransferCapabilitiesProvider:()=>ContentTransferCapabilitiesProvider,ContentTransferMenu:()=>ContentTransferMenu,ContentTransferSurfaceProvider:()=>ContentTransferSurfaceProvider,GROOMER_LEVELS:()=>GROOMER_LEVELS,MatrxCopyMenu:()=>MatrxCopyMenu,PALETTE_HEADINGS:()=>PALETTE_HEADINGS,applyGroomerPreset:()=>applyGroomerPreset,buildGroomerPresetPayload:()=>buildGroomerPresetPayload,createTransferEmailActions:()=>createTransferEmailActions,createTransferHtmlPreviewAction:()=>createTransferHtmlPreviewAction,defaultGroomerSelections:()=>defaultGroomerSelections,groomerPresetVariants:()=>groomerPresetVariants,tableDataFormat:()=>tableDataFormat,tableSchemaFormat:()=>tableSchemaFormat,useContentTransferCapabilities:()=>useContentTransferCapabilities,useContentTransferSurface:()=>useContentTransferSurface});module.exports=__toCommonJS(react_workspace_exports);var React=__toESM(require("react"),1),import_design_system=require("@ai-matrx/design-system"),import_design_system2=require("@ai-matrx/design-system"),import_jsx_runtime=require("react/jsx-runtime"),cancelled=()=>({status:"cancelled"}),failed=error=>({status:"error",code:"email-failed",message:error instanceof Error?error.message:"Could not send email.",retryable:!0});function useReviewedTransferEmail(email){let[pending,setPending]=React.useState(null),[sending,setSending]=React.useState(!1),pendingRef=React.useRef(null),sendingRef=React.useRef(!1),settle=React.useCallback((request,outcome,render=!0)=>{pendingRef.current===request&&(pendingRef.current=null,request.context.signal.removeEventListener("abort",request.onAbort),request.resolve(outcome),sendingRef.current=!1,render&&(setSending(!1),setPending(null)))},[]);React.useEffect(()=>()=>{let request=pendingRef.current;request&&(pendingRef.current=null,request.context.signal.removeEventListener("abort",request.onAbort),request.resolve(cancelled()),sendingRef.current=!1)},[]);let reviewed=React.useMemo(()=>{if(email)return{send:(artifact,context)=>context.signal.aborted?Promise.resolve(cancelled()):pendingRef.current?Promise.resolve({status:"error",code:"email-review-active",message:"Finish reviewing the current email before starting another.",retryable:!0}):new Promise(resolve2=>{let request={artifact,context,resolve:resolve2,onAbort:()=>settle(request,cancelled())};pendingRef.current=request,context.signal.addEventListener("abort",request.onAbort,{once:!0}),setSending(!1),setPending(request)})}},[email,settle]),cancel=React.useCallback(()=>{let request=pendingRef.current;request&&!sendingRef.current&&settle(request,cancelled())},[settle]),confirm=React.useCallback(()=>{let request=pendingRef.current;!request||sendingRef.current||request.context.signal.aborted||(sendingRef.current=!0,setSending(!0),email?.send(request.artifact,request.context).then(outcome=>settle(request,outcome),error=>settle(request,failed(error))))},[email,settle]),review=pending?(0,import_jsx_runtime.jsx)(import_design_system2.Dialog,{open:!0,onOpenChange:open=>{open||cancel()},children:(0,import_jsx_runtime.jsxs)(import_design_system2.DialogContent,{className:"matrx-alchemy-workspace matrx-alchemy-email-review","aria-busy":sending,children:[(0,import_jsx_runtime.jsxs)(import_design_system2.DialogHeader,{children:[(0,import_jsx_runtime.jsx)(import_design_system2.DialogTitle,{children:"Review email attachment"}),(0,import_jsx_runtime.jsxs)(import_design_system2.DialogDescription,{children:["Email ",pending.artifact.file?.filename??`${pending.artifact.format} output`," from ",pending.context.label,". Review this exact attachment before sending."]})]}),(0,import_jsx_runtime.jsx)("textarea",{"aria-label":"Email attachment preview",readOnly:!0,value:pending.artifact.plainText,className:"matrx-alchemy-preview"}),pending.artifact.omissions.length?(0,import_jsx_runtime.jsxs)("details",{className:"matrx-alchemy-email-adjustments",open:!0,children:[(0,import_jsx_runtime.jsxs)("summary",{children:[pending.artifact.omissions.length," omission",pending.artifact.omissions.length===1?"":"s"," or adjustment",pending.artifact.omissions.length===1?"":"s"]}),(0,import_jsx_runtime.jsx)("ul",{children:pending.artifact.omissions.map((omission,index)=>(0,import_jsx_runtime.jsxs)("li",{children:[omission.path||"/",": ",omission.reason,omission.count==null?"":` (${omission.count})`]},`${omission.path}-${omission.reason}-${index}`))})]}):(0,import_jsx_runtime.jsx)("p",{className:"matrx-alchemy-meta",children:"No omissions or adjustments."}),(0,import_jsx_runtime.jsxs)(import_design_system2.DialogFooter,{children:[(0,import_jsx_runtime.jsx)(import_design_system.Button,{type:"button",variant:"outline",className:"matrx-alchemy-workspace-secondary",disabled:sending,onClick:cancel,children:"Cancel"}),(0,import_jsx_runtime.jsx)(import_design_system.Button,{type:"button",className:"matrx-alchemy-workspace-primary",disabled:sending,onClick:confirm,children:sending?"Sending email\u2026":"Send email"})]})]})}):null;return{email:reviewed,review}}var React6=__toESM(require("react"),1),import_react_dom2=require("react-dom"),import_operate7=require("@ai-matrx/alchemy/operate"),import_design_system8=require("@ai-matrx/design-system"),import_design_system9=require("@ai-matrx/design-system");var React2=__toESM(require("react"),1),import_format=require("@ai-matrx/kit/format"),import_operate=require("@ai-matrx/alchemy/operate"),import_filter_engine=require("@ai-matrx/design-system/data-table/filter-engine"),import_jsx_runtime2=require("react/jsx-runtime");function MenuPresentation({label,hint,icon:Icon}){return(0,import_jsx_runtime2.jsxs)(import_jsx_runtime2.Fragment,{children:[Icon?(0,import_jsx_runtime2.jsx)(Icon,{className:"matrx-alchemy-menu-icon"}):(0,import_jsx_runtime2.jsx)(PaletteGlyph,{file:!0}),(0,import_jsx_runtime2.jsxs)("span",{children:[label,hint?(0,import_jsx_runtime2.jsx)("small",{className:"matrx-alchemy-menu-hint",children:hint}):null]})]})}function DestinationPresentation({action}){let path={notes:"M5 3h14v18H5zM8 8h8M8 12h8M8 16h5",scratch:"M5 3h14v18H5zM9 12h6M12 9v6",document:"M6 3h8l4 4v14H6zM14 3v5h4M9 12h6M9 16h6",workbook:"M3 4h18v16H3zM3 9h18M9 4v16M15 9v11M3 15h18",task:"M9 6h11M9 12h11M9 18h11M3 6l1 1 2-2M3 12l1 1 2-2M3 18l1 1 2-2",attach:"m9 12 5-5a3 3 0 0 1 4 4l-7 7a5 5 0 0 1-7-7l8-8M7 14l7-7",code:"m8 6-6 6 6 6m8-12 6 6-6 6m-3-14-2 16",chat:"M4 4h16v13H9l-5 4zM8 9h8M8 13h5",assistant:"M3 4h18v16H3zM15 4v16M6 9h6M6 13h4",tools:"m14 4 3 3 4-1a6 6 0 0 1-8 7l-7 7-3-3 7-7a6 6 0 0 1 4-6z"}[action.id.replace(/^matrx:/,"")];return(0,import_jsx_runtime2.jsxs)(import_jsx_runtime2.Fragment,{children:[action.icon?(0,import_jsx_runtime2.jsx)(action.icon,{className:"matrx-alchemy-menu-icon"}):path?(0,import_jsx_runtime2.jsx)("svg",{className:"matrx-alchemy-palette-glyph",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"1.8",strokeLinecap:"round",strokeLinejoin:"round","aria-hidden":"true",children:(0,import_jsx_runtime2.jsx)("path",{d:path})}):(0,import_jsx_runtime2.jsx)(PaletteGlyph,{file:!0}),(0,import_jsx_runtime2.jsxs)("span",{children:[action.label,action.hint?(0,import_jsx_runtime2.jsx)("small",{className:"matrx-alchemy-menu-hint",children:action.hint}):null]})]})}function ReceiptLink({target}){return target?.href&&/^(\/(?!\/)|https?:\/\/)/.test(target.href)?(0,import_jsx_runtime2.jsxs)("a",{className:"matrx-alchemy-receipt-link",href:target.href,children:["Open ",target.kind]}):null}function PaletteGlyph({format,ai=!1,file=!1,kind}){return kind==="link"?(0,import_jsx_runtime2.jsx)("svg",{className:"matrx-alchemy-palette-glyph",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"1.8",strokeLinecap:"round",strokeLinejoin:"round","aria-hidden":"true",children:(0,import_jsx_runtime2.jsx)("path",{d:"M10 13a5 5 0 0 0 7 0l3-3a5 5 0 0 0-7-7l-2 2M14 11a5 5 0 0 0-7 0l-3 3a5 5 0 0 0 7 7l2-2"})}):kind==="surface"?(0,import_jsx_runtime2.jsxs)("svg",{className:"matrx-alchemy-palette-glyph",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"1.8",strokeLinecap:"round",strokeLinejoin:"round","aria-hidden":"true",children:[(0,import_jsx_runtime2.jsx)("rect",{x:"3",y:"3",width:"18",height:"18",rx:"2"}),(0,import_jsx_runtime2.jsx)("path",{d:"M3 9h18M9 9v12"})]}):kind==="ai-copy"?(0,import_jsx_runtime2.jsxs)("svg",{className:"matrx-alchemy-palette-glyph",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"1.8",strokeLinecap:"round",strokeLinejoin:"round","aria-hidden":"true",children:[(0,import_jsx_runtime2.jsx)("rect",{x:"5",y:"5",width:"11",height:"14",rx:"2"}),(0,import_jsx_runtime2.jsx)("path",{d:"M9 3h6a2 2 0 0 1 2 2v10"}),(0,import_jsx_runtime2.jsx)("path",{d:"m18.5 3 .55 1.45L20.5 5l-1.45.55L18.5 7l-.55-1.45L16.5 5l1.45-.55z"})]}):kind==="sliders"?(0,import_jsx_runtime2.jsxs)("svg",{className:"matrx-alchemy-palette-glyph",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"1.8",strokeLinecap:"round",strokeLinejoin:"round","aria-hidden":"true",children:[(0,import_jsx_runtime2.jsx)("path",{d:"M4 6h16M4 12h16M4 18h16"}),(0,import_jsx_runtime2.jsx)("path",{d:"M8 3v6M16 9v6M10 15v6"})]}):ai?(0,import_jsx_runtime2.jsxs)("svg",{className:"matrx-alchemy-palette-glyph",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"1.8",strokeLinecap:"round",strokeLinejoin:"round","aria-hidden":"true",children:[(0,import_jsx_runtime2.jsx)("path",{d:"M12 5a3 3 0 1 0-5.997.125A4 4 0 0 0 3.5 10.9a4 4 0 0 0 .556 6.588A4 4 0 0 0 12 19"}),(0,import_jsx_runtime2.jsx)("path",{d:"M12 5a3 3 0 1 1 5.997.125 4 4 0 0 1 2.503 5.775 4 4 0 0 1-.556 6.588A4 4 0 0 1 12 19"}),(0,import_jsx_runtime2.jsx)("path",{d:"M12 5v14M8 9h1M15 9h1M8 15h1M15 15h1"})]}):file?(0,import_jsx_runtime2.jsxs)("svg",{className:"matrx-alchemy-palette-glyph",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"1.8",strokeLinecap:"round",strokeLinejoin:"round","aria-hidden":"true",children:[(0,import_jsx_runtime2.jsx)("path",{d:"M6 3h8l4 4v14H6z"}),(0,import_jsx_runtime2.jsx)("path",{d:"M14 3v5h5M9 13h6M9 17h6"})]}):(0,import_jsx_runtime2.jsx)("svg",{className:"matrx-alchemy-palette-glyph",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"1.8",strokeLinecap:"round",strokeLinejoin:"round","aria-hidden":"true",children:format==="json"||format==="table-data"?(0,import_jsx_runtime2.jsxs)(import_jsx_runtime2.Fragment,{children:[(0,import_jsx_runtime2.jsx)("path",{d:"M9 4C7 4 7 7 5 7v3c2 0 2 1 2 2s0 2-2 2v3c2 0 2 3 4 3"}),(0,import_jsx_runtime2.jsx)("path",{d:"M15 4c2 0 2 3 4 3v3c-2 0-2 1-2 2s0 2 2 2v3c-2 0-2 3-4 3"})]}):format==="table-schema"?(0,import_jsx_runtime2.jsxs)(import_jsx_runtime2.Fragment,{children:[(0,import_jsx_runtime2.jsx)("rect",{x:"8",y:"3",width:"8",height:"5",rx:"1"}),(0,import_jsx_runtime2.jsx)("rect",{x:"2",y:"16",width:"8",height:"5",rx:"1"}),(0,import_jsx_runtime2.jsx)("rect",{x:"14",y:"16",width:"8",height:"5",rx:"1"}),(0,import_jsx_runtime2.jsx)("path",{d:"M12 8v4M6 16v-4h12v4"})]}):format==="compact-json"?(0,import_jsx_runtime2.jsxs)(import_jsx_runtime2.Fragment,{children:[(0,import_jsx_runtime2.jsx)("path",{d:"m14 10 7-7"}),(0,import_jsx_runtime2.jsx)("path",{d:"M20 10h-6V4"}),(0,import_jsx_runtime2.jsx)("path",{d:"m3 21 7-7"}),(0,import_jsx_runtime2.jsx)("path",{d:"M4 14h6v6"})]}):format==="csv"?(0,import_jsx_runtime2.jsxs)(import_jsx_runtime2.Fragment,{children:[(0,import_jsx_runtime2.jsx)("rect",{x:"4",y:"4",width:"16",height:"16",rx:"1"}),(0,import_jsx_runtime2.jsx)("path",{d:"M4 10h16M10 4v16"})]}):format==="tsv"?(0,import_jsx_runtime2.jsxs)(import_jsx_runtime2.Fragment,{children:[(0,import_jsx_runtime2.jsx)("path",{d:"M14 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8z"}),(0,import_jsx_runtime2.jsx)("path",{d:"M14 2v6h6M8 13h2M14 13h2M8 17h2M14 17h2"})]}):format==="xlsx"?(0,import_jsx_runtime2.jsxs)(import_jsx_runtime2.Fragment,{children:[(0,import_jsx_runtime2.jsx)("path",{d:"M14 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8z"}),(0,import_jsx_runtime2.jsx)("path",{d:"M14 2v6h6M8 13h8M8 17h8M12 11v8"})]}):format==="markdown"?(0,import_jsx_runtime2.jsxs)(import_jsx_runtime2.Fragment,{children:[(0,import_jsx_runtime2.jsx)("path",{d:"M14.5 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V7.5z"}),(0,import_jsx_runtime2.jsx)("path",{d:"M14 2v6h6M10 13l-2 2 2 2M14 17l2-2-2-2"})]}):format==="html"?(0,import_jsx_runtime2.jsx)(import_jsx_runtime2.Fragment,{children:(0,import_jsx_runtime2.jsx)("path",{d:"M15 6h6M3 6h7M3 12h18M3 18h12"})}):(0,import_jsx_runtime2.jsx)(import_jsx_runtime2.Fragment,{children:(0,import_jsx_runtime2.jsx)("path",{d:"M4 7V4h16v3M9 20h6M12 4v16"})})})}var LABEL={plain:"Plain text",markdown:"Markdown",html:"Formatted",json:"JSON","compact-json":"Compact JSON",csv:"CSV",tsv:"Google Sheets",xlsx:"Excel workbook"},BUILT_INS=Object.freeze(Object.keys(LABEL).map(id=>({id}))),COPIES=["plain","markdown","html","json","compact-json","csv","tsv"],DOWNLOADS=[...COPIES,"xlsx"],EMPTY_VARIANTS=[],SCOPE_LABEL={target:"This content",row:"This row",selected:"Selected rows",view:"Current view",loaded:"Loaded rows","all-matching":"All matching rows"},filenameFor=label=>label.toLocaleLowerCase().replace(/[^a-z0-9]+/g,"-").replace(/(^-|-$)/g,"")||"export",errorMessage=(error,fallback)=>error instanceof Error?error.message:fallback,isAbort=error=>error instanceof DOMException&&error.name==="AbortError",supportsBuiltIn=(format,payload)=>!["csv","tsv","xlsx"].includes(format)||payload.kind==="rows",outcomeMessage=result=>{if(result.status==="success"){let success=result;return success.delivered==="action"?success.message??"Action completed":success.delivered==="download-started"?"Download started":success.message??"Copied"}return result.status==="queued"?`${result.message} ${result.remedy}`:result.status==="degraded"?`Copied as plain text: ${result.reason}`:result.status==="cancelled"?"Cancelled":result.message},materialIds=new WeakMap,nextMaterialId=0;function materialIdentity(material){if(!material)return"missing";if("instanceId"in material)return`surface:${material.instanceId}`;if("id"in material)return`source:${material.id}`;let id=materialIds.get(material);return id===void 0&&(id=++nextMaterialId,materialIds.set(material,id)),`payload:${id}`}function snapshotContent(snapshot){let{sourceId,label,payload,coverage,unsavedChanges,omissions,sections,limits}=snapshot;return JSON.stringify({sourceId,label,payload,coverage,unsavedChanges,omissions,sections,limits})}function useFence(){let mounted=React2.useRef(!0),nextId=React2.useRef(0),active=React2.useRef(new Set);React2.useEffect(()=>(mounted.current=!0,()=>{mounted.current=!1,nextId.current+=1,active.current.forEach(c=>c.abort()),active.current.clear()}),[]);let begin=React2.useCallback(()=>{let controller=new AbortController;return active.current.add(controller),{controller,id:++nextId.current}},[]),finish=React2.useCallback(controller=>active.current.delete(controller),[]),valid=React2.useCallback((id,controller)=>mounted.current&&!controller.signal.aborted&&nextId.current===id,[]),abortAll=React2.useCallback(()=>{nextId.current+=1,active.current.forEach(c=>c.abort()),active.current.clear()},[]);return{begin,finish,valid,abortAll}}async function xlsxArtifact(draft,label){if(draft.payload.kind!=="rows")throw new Error("Excel workbook export requires tabular content.");let{xlsxEngine}=await import("@ai-matrx/alchemy/operate/formats/xlsx");return xlsxEngine.build(draft,{filename:`${filenameFor(label)}.xlsx`},new AbortController().signal)}async function buildWithAdapter(adapter,draft,signal,options={}){return(await adapter.load()).build(draft,options,signal)}async function markdownRichArtifact(draft,filename="export.html"){if(draft.payload.kind!=="markdown")throw new Error("Rich Markdown requires Markdown content.");let{richHtmlEngine}=await import("@ai-matrx/alchemy/operate/formats/rich-html"),rich=await richHtmlEngine.build(draft,{filename},new AbortController().signal);return(0,import_operate.sealTransferArtifact)({snapshotId:draft.snapshotId,draftRevision:draft.revision,format:"html",plainText:draft.payload.text,...rich.html===void 0?{}:{html:rich.html},...rich.file===void 0?{}:{file:rich.file},omissions:[...draft.omissions]})}async function buildArtifact(draft,format,label){if(!supportsBuiltIn(format,draft.payload))throw new Error(`${LABEL[format]} is available for tabular content only.`);if(format==="xlsx")return xlsxArtifact(draft,label);if(format==="html"&&draft.payload.kind==="markdown")return markdownRichArtifact(draft,`${filenameFor(label)}.html`);let extension=format==="plain"?"txt":format==="compact-json"?"json":format;return(0,import_operate.serialize)(draft,format,{filename:`${filenameFor(label)}.${extension}`})}function hostEngineFor(adapters,format){return isBuiltInFormat(format)?adapters.find(adapter=>adapter.id===format):void 0}async function buildFormat(draft,format,label,adapters,signal){let engine=hostEngineFor(adapters,format);if(!engine)return buildArtifact(draft,format,label);let artifact=await buildWithAdapter(engine,draft,signal);if(!artifact.file)return artifact;let dot=artifact.file.filename.lastIndexOf("."),extension=dot>0?artifact.file.filename.slice(dot):"";return(0,import_operate.sealTransferArtifact)({...artifact,file:{filename:`${filenameFor(label)}${extension}`,mime:artifact.file.mime,bytes:artifact.file.bytes}})}function offersFormat(format,payload,adapters){if(format==="plain"&&payload.kind==="rows")return!1;let engine=hostEngineFor(adapters,format);return engine?engine.supports(payload):supportsBuiltIn(format,payload)&&offersDistinctOutput(format,payload)}var NO_STRUCTURE={exclude:[],limits:{}},exportableColumn=column=>column.exportable!==!1&&column.classification!=="secret"&&column.classification!=="credential";function initialControls(state){let rows=state.original.payload.kind==="rows"?state.original.payload:null;return{preset:state.preferences.initialPreset,sections:state.snapshot.sections.filter(s=>s.includedByDefault).map(s=>s.id),search:"",searchMode:"contains",filters:{},layeredFilters:[],sort:"",direction:"asc",top:state.preferences.limits.maxRows,visibleColumns:rows?.columns.filter(c=>c.visible&&exportableColumn(c)).map(c=>c.id)??[],excludedRows:[],structure:NO_STRUCTURE,sectionLimits:{},columnLimits:{},maxDepth:state.preferences.limits.maxDepth,maxStringChars:state.preferences.limits.maxStringChars,maxArrayItems:state.preferences.limits.maxArrayItems??null}}function presetLimits(preset,controls,preferences){let min=(choice,cap)=>choice==null?cap:cap==null?choice:Math.min(choice,cap);if(preset==="full")return preferences.limits;let request=preset==="brief"?{maxDepth:4,maxStringChars:800,maxArrayItems:25}:preset==="compact"?{maxDepth:8,maxStringChars:4e3,maxArrayItems:100}:{maxDepth:controls.maxDepth,maxStringChars:controls.maxStringChars,maxArrayItems:controls.maxArrayItems};return{...preferences.limits,maxDepth:min(request.maxDepth,preferences.limits.maxDepth),maxStringChars:min(request.maxStringChars,preferences.limits.maxStringChars),maxArrayItems:min(request.maxArrayItems,preferences.limits.maxArrayItems??null)}}var layouts=new WeakMap,draftLayout=draft=>layouts.get(draft)??{};function matchRows(payload,controls){let shown=new Set(controls.visibleColumns),defs=payload.columns.filter(column=>shown.has(column.id)&&exportableColumn(column)).map(column=>({id:column.id,header:column.label,accessorFn:index=>(0,import_operate.readTransferCell)(payload.rows[index],column)})),filters=Object.fromEntries(Object.entries(controls.filters).filter(([id,value])=>value&&shown.has(id)).map(([id,value])=>[id,{kind:"text",value}])),sort=controls.sort&&shown.has(controls.sort)?{id:controls.sort,direction:controls.direction}:null;return(0,import_filter_engine.filterAndSortRows)(payload.rows.map((_,index)=>index),defs,filters,sort,controls.search,void 0,controls.layeredFilters.filter(rule=>shown.has(rule.field)),controls.searchMode)}function applyColumnLimits(draft,limits){let payload=draft.payload,entries=Object.entries(limits);if(payload.kind!=="rows"||!entries.length)return draft;let omissions=[],rows=payload.rows;for(let[id,limit]of entries){let column=payload.columns.find(candidate=>candidate.id===id);if(!column||limit.kind==="maxItems")continue;let count=0;rows=rows.map(row=>{let value=row[id];if(value==null)return row;let text=typeof value=="string"?value:JSON.stringify(value);return limit.kind==="stub"?(count++,{...row,[id]:(0,import_operate.stubText)(value)}):text.length<=limit.value?row:(count++,{...row,[id]:`${text.slice(0,limit.value)} \u2026 [truncated \u2014 ${(0,import_format.formatCount)(text.length,{locale:"en-US"})} chars]`})}),count&&omissions.push({path:`/columns/${id}`,reason:"truncated",count,label:`${column.label} \u2014 ${limit.kind==="stub"?"stubbed":`cut to ${(0,import_format.formatCount)(limit.value)} chars per cell`}`})}return omissions.length?(0,import_operate.deriveDraft)(draft,{...payload,rows},omissions,"Column limits"):draft}function rebuild(state,controls){let draft=(0,import_operate.resetDraft)(state.snapshot),layout={},sections=state.snapshot.sections;if(sections.length){let payload=draft.payload;if((payload.kind==="text"||payload.kind==="markdown")&§ions.every(import_operate.isProseSection)){let laid=(0,import_operate.sectionLayout)(payload.text,sections,controls.sections,controls.sectionLimits);draft=(0,import_operate.deriveDraft)(draft,{...payload,text:laid.text},laid.omissions,"Selected sections"),layout.sectionRanges=laid.ranges,layout.sectionText=laid.text}else payload.kind==="json"||payload.kind==="registered"?draft=(0,import_operate.applySectionStructure)(draft,sections,controls.sections,controls.sectionLimits):draft=(0,import_operate.applySectionSelection)(draft,state.snapshot,controls.sections)}if(draft.payload.kind==="rows"){let payload=draft.payload,matched=matchRows(payload,controls),left=new Set(controls.excludedRows),order=matched.filter(index=>!left.has(index));layout.matchedRows=matched,layout.rowOrder=order;let omissions=[];matched.length<payload.rows.length&&omissions.push({path:"/rows",reason:"filtered",count:payload.rows.length-matched.length,label:"rows the search and filters leave out"}),order.length<matched.length&&omissions.push({path:"/rows",reason:"excluded",count:matched.length-order.length,label:"rows you left out"}),order.length===payload.rows.length&&order.every((index,position)=>index===position)||(draft=(0,import_operate.deriveDraft)(draft,{...payload,rows:order.map(index=>payload.rows[index])},omissions,"Rows you chose"));let visible=controls.visibleColumns.filter(id=>payload.columns.some(column=>column.id===id&&exportableColumn(column)));draft=(0,import_operate.transformRows)(draft,{visibleColumns:visible,structuredProjection:"visible",top:controls.top}),controls.top!=null&&order.length>controls.top&&(layout.rowOrder=order.slice(0,controls.top)),draft=applyColumnLimits(draft,controls.columnLimits)}(draft.payload.kind==="json"||draft.payload.kind==="registered")&&(draft=(0,import_operate.applyJsonStructure)(draft,controls.structure));let limits=presetLimits(controls.preset,controls,state.preferences);(draft.payload.kind==="json"||draft.payload.kind==="registered")&&(draft=(0,import_operate.reduceJson)(draft,{maxDepth:limits.maxDepth,maxStringChars:limits.maxStringChars,maxArrayItems:limits.maxArrayItems??null}));let final=(0,import_operate.applyTransferLimits)(draft,limits);return layouts.set(final,layout),final}function offersDistinctOutput(format,payload){return payload.kind==="markdown"?format!=="plain"&&format!=="compact-json":payload.kind==="json"||payload.kind==="registered"?format!=="plain"&&format!=="markdown":payload.kind==="text"?format!=="compact-json"&&(format!=="markdown"||!!payload.language):!0}function countNoun(unit,n){return n===1?unit:`${unit}s`}function isBuiltInFormat(format){return format in LABEL}function envelopeDataFormat(format,artifact){return format==="html"||format==="xlsx"||artifact.html!==void 0?null:format==="plain"?"text":/^[a-z][a-z0-9-]*$/.test(format)?format:"text"}function defaultEnvelope(snapshot){return{kind:"matrx_content",location:snapshot.label,description:"Captured content for an assistant",attributes:{source:snapshot.sourceId}}}var envelopeBodies=new WeakMap;function sealForAi(formatArtifact,dataFormat,envelope,instructions,label){let data=dataFormat==="json"?JSON.parse(formatArtifact.plainText):formatArtifact.plainText,{text,body,bodyOffset}=(0,import_operate.assembleAgentPayload)({...envelope,data,dataFormat,...instructions.trim()?{instructions}:{}}),artifact=(0,import_operate.sealTransferArtifact)({snapshotId:formatArtifact.snapshotId,draftRevision:formatArtifact.draftRevision,format:`ai-context:${formatArtifact.format}`,plainText:text,file:{filename:`${filenameFor(label)}-for-ai.md`,mime:"text/markdown;charset=utf-8",bytes:new TextEncoder().encode(text)},omissions:[...formatArtifact.omissions]});return envelopeBodies.set(artifact,{body,bodyOffset,dataFormat}),artifact}function shownSpans(draft,formatArtifact,shown){let base;try{base=(0,import_operate.spanMap)(draft,formatArtifact)}catch{return null}if(shown===formatArtifact)return base;let envelope=envelopeBodies.get(shown);if(!envelope)return null;try{if(envelope.dataFormat!=="json")return envelope.body===formatArtifact.plainText?(0,import_operate.offsetSpans)(base,envelope.bodyOffset):null;let spans=(0,import_operate.jsonTextSpans)(envelope.body,"",envelope.bodyOffset);return draft.payload.kind==="rows"?spans.map(span=>({...span,path:`/rows${span.path}`})):spans}catch{return null}}function sectionSpan(draft,spans,text,sectionId){let layout=draftLayout(draft),range=layout.sectionRanges?.[sectionId],whole=spans.find(span=>span.path===""),payload=draft.payload;return!range||!whole||payload.kind!=="text"&&payload.kind!=="markdown"||layout.sectionText!==payload.text||text.slice(whole.start,whole.end)!==payload.text?null:{path:`/sections/${sectionId}`,start:whole.start+range.start,end:whole.start+range.end}}var encodePointer=segment=>segment.replace(/~/g,"~0").replace(/\//g,"~1"),sortMarks=marks=>marks.sort((a,b)=>a.start-b.start||b.end-a.end);function outermost(marks){let out=[];for(let mark of sortMarks(marks)){let last=out[out.length-1];last&&mark.start>=last.start&&mark.end<=last.end||out.push(mark)}return out}async function locateProjectedSections(output,pieces,engine,signal){let found={},cursor=0;for(let piece of pieces){let draft={snapshotId:"section",sourceId:"section",sourceRevision:"section",revision:0,payload:{kind:"markdown",text:piece.text},omissions:[],manuallyEdited:!1,provenance:[]},projected=(await buildWithAdapter(engine,draft,signal)).plainText.trim();if(!projected)continue;let at=output.indexOf(projected,cursor);at<0||(found[piece.id]={start:at,end:at+projected.length},cursor=at+projected.length)}return found}function removedMarks(state,controls,full,fullArtifact,projected){let spans;try{spans=(0,import_operate.spanMap)(full,fullArtifact)}catch{return null}let byPath=new Map(spans.map(span=>[span.path,span])),marks=[],mark=(path,kind)=>{let span=byPath.get(path);span&&span.end>span.start&&marks.push({start:span.start,end:span.end,kind})},payload=full.payload;if(payload.kind==="json"||payload.kind==="registered"){for(let pattern of controls.structure.exclude)(0,import_operate.concretePointers)(payload.value,pattern).forEach(pointer=>mark(pointer,"removed"));for(let pattern of Object.keys(controls.structure.limits))(0,import_operate.concretePointers)(payload.value,pattern).forEach(pointer=>mark(pointer,"changed"))}let sections=state.snapshot.sections;if(sections.length){let keep=new Set(controls.sections);if((payload.kind==="text"||payload.kind==="markdown")&§ions.every(import_operate.isProseSection)){let whole=byPath.get(""),exact=whole&&fullArtifact.plainText.slice(whole.start,whole.end)===payload.text;for(let section of sections){let[,a,b]=/^\/text\/(\d+)-(\d+)$/.exec(section.path),kind=keep.has(section.id)?controls.sectionLimits[section.id]?"changed":null:"removed";kind&&(exact?marks.push({start:whole.start+Number(a),end:whole.start+Number(b),kind}):projected?.[section.id]&&marks.push({...projected[section.id],kind}))}}else for(let section of sections)keep.has(section.id)?controls.sectionLimits[section.id]&&mark(section.path,"changed"):mark(section.path,"removed")}if(payload.kind==="rows"){let kept=new Set(draftLayout(state.draft).rowOrder??payload.rows.map((_,index)=>index)),shown=new Set(controls.visibleColumns),hidden=payload.columns.filter(column=>column.visible&&exportableColumn(column)&&!shown.has(column.id));payload.rows.forEach((_,index)=>{if(!kept.has(index)){mark(`/rows/${index}`,"removed");return}let cell=(column,kind)=>{mark(`/rows/${index}${column.path}`,kind),mark(`/rows/${index}/${encodePointer(column.id)}`,kind)};for(let column of hidden)cell(column,"removed");for(let id of Object.keys(controls.columnLimits)){let column=payload.columns.find(candidate=>candidate.id===id);column&&shown.has(id)&&cell(column,"changed")}});for(let column of hidden)mark(`/columns/${encodePointer(column.id)}`,"removed")}let merged=[...outermost(marks.filter(m=>m.kind==="removed")),...outermost(marks.filter(m=>m.kind==="changed"))];return{marks:sortMarks(merged),removed:merged.filter(m=>m.kind==="removed").length,changed:merged.filter(m=>m.kind==="changed").length,chars:merged.filter(m=>m.kind==="removed").reduce((sum,m)=>sum+m.end-m.start,0)}}function findMatches(text,query,mode,cap=1e3){let trimmed=query.trim();if(!trimmed)return{marks:[],total:0};let escape=value=>value.replace(/[.*+?^${}()|[\]\\]/g,"\\$&"),pattern=mode==="whole_words"?new RegExp(trimmed.split(/[^\p{L}\p{N}]+/u).filter(Boolean).map(word=>`(?<![\\p{L}\\p{N}])${escape(word)}(?![\\p{L}\\p{N}])`).join("|")||"(?!)","giu"):new RegExp(escape(trimmed),"gi"),marks=[],total=0;for(let match of text.matchAll(pattern))match[0]&&(total++,marks.length<cap&&marks.push({start:match.index??0,end:(match.index??0)+match[0].length,kind:"match"}));return{marks,total}}var decodePointer=segment=>segment.replace(/~1/g,"/").replace(/~0/g,"~");function sectionSize(payload,path){let range=/^\/text\/(\d+)-(\d+)$/.exec(path);if(range&&(payload.kind==="text"||payload.kind==="markdown"))return Math.max(0,Number(range[2])-Number(range[1]));if(payload.kind!=="json"&&payload.kind!=="registered")return null;let segments=path.split("/").slice(1).map(decodePointer),value=payload.value;for(let segment of segments){if(value===null||typeof value!="object")return null;value=value[segment]}let text=JSON.stringify(value,null,2);return text===void 0?null:text.replace(/\n/g,`
|
|
3
3
|
${" ".repeat(segments.length)}`).length}function columnSize(rows,columnId){let column=rows.columns.find(c=>c.id===columnId);if(!column)return 0;let total=0;for(let row of rows.rows){let value=(0,import_operate.readTransferCell)(row,column);total+=value==null?0:typeof value=="string"?value.length:JSON.stringify(value).length}return total}function sizeLabel(chars){return`${(0,import_format.formatCount)(chars)} chars \xB7 \u2248${(0,import_format.formatCount)(Math.ceil(chars/4))} tokens`}var React4=__toESM(require("react"),1),import_format3=require("@ai-matrx/kit/format"),import_react_dom=require("react-dom"),import_operate4=require("@ai-matrx/alchemy/operate"),import_design_system3=require("@ai-matrx/design-system"),import_design_system4=require("@ai-matrx/design-system"),import_design_system5=require("@ai-matrx/design-system"),import_design_system6=require("@ai-matrx/design-system"),import_data_table2=require("@ai-matrx/design-system/data-table");var import_operate2=require("@ai-matrx/alchemy/operate"),sectionLeverKey=id=>`section:${id}`;function payloadForEnvelope(value){if(typeof value=="string")return{payload:{kind:"markdown",text:value}};let{data,dataFormat,instructions:_instructions,...envelope}=value,clean=record=>Object.fromEntries(Object.entries(record??{}).filter(([,entry])=>entry!==void 0)),meta={...envelope,attributes:clean(envelope.attributes),context:clean(envelope.context)};return typeof data=="string"?{payload:dataFormat==="markdown"?{kind:"markdown",text:data}:{kind:"text",text:data},envelope:meta}:{payload:{kind:"json",value:(0,import_operate2.normalizeTransferJson)(data,{omitUndefinedObjectProperties:!0})},envelope:meta}}function customLevers(custom){return{options:custom.options,initial:Object.fromEntries(custom.options.map(option=>[option.key,option.default])),build(values){let optionValues=values,result=custom.build(optionValues),{payload,envelope}=payloadForEnvelope(custom.wrap(result.text,optionValues,result.meta));return{payload,envelope,...result.meta?{meta:result.meta}:{}}}}}function nestedJsonLength(key,value){let text=JSON.stringify(value,null,2);return text===void 0?0:2+JSON.stringify(key).length+2+text.replace(/\n/g,`
|
|
4
4
|
`).length+2}function groomerLevers(config){return{sections:config.sections,initial:Object.fromEntries(config.sections.map(section=>[sectionLeverKey(section.id),section.defaultSelection??"full"])),build(values){let data={},dropped=[],sectionSizes={};for(let section of config.sections){let level=values[sectionLeverKey(section.id)]??"full";if(level==="off"){dropped.push(section.id),sectionSizes[section.id]=0;continue}let value=section.build(level);value!=null?(data[section.id]=value,sectionSizes[section.id]=nestedJsonLength(section.id,(0,import_operate2.normalizeTransferJson)(value,{omitUndefinedObjectProperties:!0}))):sectionSizes[section.id]=0}return{payload:{kind:"json",value:(0,import_operate2.normalizeTransferJson)(data,{omitUndefinedObjectProperties:!0})},envelope:{kind:config.kind,location:config.location,description:config.description,...config.summary!==void 0?{summary:config.summary}:{},attributes:{...config.attributes,...dropped.length?{dropped_sections:dropped.join(",")}:{}},...config.context?{context:config.context}:{}},sectionSizes}}}}function applyGroomerPreset(preset,sections){return Object.fromEntries(sections.map(section=>[section.id,preset==="everything"?"full":preset==="balanced"?"compact":section.cuttable?"off":"brief"]))}function activeGroomerPreset(values,sections){for(let preset of["everything","balanced","minimal"]){let levels=applyGroomerPreset(preset,sections);if(sections.every(section=>(values[sectionLeverKey(section.id)]??"full")===levels[section.id]))return preset}return null}function leverSnapshot(payload,sourceId,label){let raw=(0,import_operate2.directSource)(payload,{sourceId,label});return(0,import_operate2.projectSnapshot)(raw.snapshot,raw.projection)}var React3=__toESM(require("react"),1),import_format2=require("@ai-matrx/kit/format"),import_data_table=require("@ai-matrx/design-system/data-table"),import_operate3=require("@ai-matrx/alchemy/operate");var import_jsx_runtime3=require("react/jsx-runtime"),KEEP="keep",TEXT_LIMITS=[{value:KEEP,label:"Keep"},{value:"stub",label:"Stub"},{value:"chars:200",label:"Max 200 chars"},{value:"chars:1000",label:"Max 1,000 chars"},{value:"chars:4000",label:"Max 4,000 chars"}],LIST_LIMITS=[{value:KEEP,label:"Keep"},{value:"stub",label:"Stub"},{value:"items:5",label:"First 5 items"},{value:"items:25",label:"First 25 items"},{value:"items:100",label:"First 100 items"}],OBJECT_LIMITS=[{value:KEEP,label:"Keep"},{value:"stub",label:"Stub"},{value:"chars:1000",label:"Max 1,000 chars per text"}],CELL_LIMITS=[{value:KEEP,label:"Keep"},{value:"stub",label:"Stub cells"},{value:"chars:100",label:"Max 100 chars"},{value:"chars:500",label:"Max 500 chars"},{value:"chars:2000",label:"Max 2,000 chars"}];function encodeLimit(limit){return limit?limit.kind==="stub"?"stub":limit.kind==="maxChars"?`chars:${limit.value}`:`items:${limit.value}`:KEEP}function decodeLimit(value){if(value==="stub")return{kind:"stub"};let m=/^(chars|items):(\d+)$/.exec(value);return m?m[1]==="chars"?{kind:"maxChars",value:Number(m[2])}:{kind:"maxItems",value:Number(m[2])}:null}function useRowHeight(){let[coarse,setCoarse]=React3.useState(()=>typeof window<"u"&&typeof window.matchMedia=="function"&&window.matchMedia("(pointer: coarse)").matches);return React3.useEffect(()=>{if(typeof window>"u"||typeof window.matchMedia!="function")return;let query=window.matchMedia("(pointer: coarse)"),update=()=>setCoarse(query.matches);return query.addEventListener?.("change",update),()=>query.removeEventListener?.("change",update)},[]),coarse?48:40}function Checkbox({state,label,onChange}){let ref=React3.useRef(null);return React3.useEffect(()=>{ref.current&&(ref.current.indeterminate=state==="mixed")},[state]),(0,import_jsx_runtime3.jsx)("input",{ref,type:"checkbox",className:"matrx-alchemy-tree-check","aria-label":label,checked:state==="on","aria-checked":state==="mixed"?"mixed":state==="on",onChange})}var LockGlyph=()=>(0,import_jsx_runtime3.jsxs)("svg",{viewBox:"0 0 24 24",width:"14",height:"14",fill:"none",stroke:"currentColor",strokeWidth:"1.8",strokeLinecap:"round",strokeLinejoin:"round","aria-hidden":"true",children:[(0,import_jsx_runtime3.jsx)("rect",{x:"5",y:"11",width:"14",height:"10",rx:"2"}),(0,import_jsx_runtime3.jsx)("path",{d:"M8 11V7a4 4 0 0 1 8 0v4"})]}),CopyGlyph=()=>(0,import_jsx_runtime3.jsxs)("svg",{viewBox:"0 0 24 24",width:"14",height:"14",fill:"none",stroke:"currentColor",strokeWidth:"1.8",strokeLinecap:"round",strokeLinejoin:"round","aria-hidden":"true",children:[(0,import_jsx_runtime3.jsx)("rect",{x:"9",y:"9",width:"12",height:"12",rx:"2"}),(0,import_jsx_runtime3.jsx)("path",{d:"M5 15H4a1 1 0 0 1-1-1V4a1 1 0 0 1 1-1h10a1 1 0 0 1 1 1v1"})]}),Chevron=({open})=>(0,import_jsx_runtime3.jsx)("svg",{viewBox:"0 0 24 24",width:"14",height:"14",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round","aria-hidden":"true",style:{transform:open?"rotate(90deg)":void 0,transition:"transform 120ms"},children:(0,import_jsx_runtime3.jsx)("path",{d:"m9 6 6 6-6 6"})});function TreeRow({item,whole,focused,height,handlers}){let share=whole>0&&item.chars!==null?Math.min(1,item.chars/whole):0;return(0,import_jsx_runtime3.jsxs)("div",{role:"treeitem","aria-level":item.depth+1,"aria-expanded":item.expandable?!!item.expanded:void 0,"aria-selected":focused,"data-row-index":item.rowIndex,className:"matrx-alchemy-tree-row","data-state":item.state??"root",style:{height,paddingLeft:`${.25+item.depth*.875}rem`},children:[item.expandable?(0,import_jsx_runtime3.jsx)("button",{type:"button",className:"matrx-alchemy-tree-twisty","aria-label":`${item.expanded?"Collapse":"Expand"} ${item.label}`,onClick:()=>handlers.expand?.(item),children:(0,import_jsx_runtime3.jsx)(Chevron,{open:!!item.expanded})}):(0,import_jsx_runtime3.jsx)("span",{className:"matrx-alchemy-tree-twisty","aria-hidden":"true"}),item.locked?(0,import_jsx_runtime3.jsx)("span",{className:"matrx-alchemy-tree-lock",role:"img","aria-label":item.locked,title:item.locked,children:(0,import_jsx_runtime3.jsx)(LockGlyph,{})}):item.coveredBy?(0,import_jsx_runtime3.jsx)("button",{type:"button",className:"matrx-alchemy-tree-covered","aria-label":`Left out by ${item.coveredBy} \u2014 include it again`,title:`Left out by ${item.coveredBy}. Include it again.`,onClick:()=>handlers.includeAgain?.(item),children:(0,import_jsx_runtime3.jsx)("input",{type:"checkbox",tabIndex:-1,"aria-hidden":"true",checked:!1,readOnly:!0})}):item.state?(0,import_jsx_runtime3.jsx)(Checkbox,{state:item.state,label:item.label,onChange:()=>handlers.toggle(item)}):(0,import_jsx_runtime3.jsx)("span",{className:"matrx-alchemy-tree-twisty","aria-hidden":"true"}),(0,import_jsx_runtime3.jsxs)("button",{type:"button",className:"matrx-alchemy-tree-label","aria-label":`Highlight ${item.label}`,"aria-pressed":focused,onClick:()=>handlers.focus(item),title:item.detail?`${item.label} \u2014 ${item.detail}`:item.label,children:[(0,import_jsx_runtime3.jsx)("span",{className:"matrx-alchemy-tree-name",children:item.label}),(0,import_jsx_runtime3.jsxs)("span",{className:"matrx-alchemy-tree-meta",children:[item.chars!==null?(0,import_jsx_runtime3.jsxs)("span",{className:"matrx-alchemy-prep-size matrx-alchemy-tree-size",title:sizeLabel(item.chars),children:[(0,import_jsx_runtime3.jsx)("span",{className:"matrx-alchemy-prep-share","aria-hidden":"true",children:(0,import_jsx_runtime3.jsx)("span",{style:{width:`${(share*100).toFixed(1)}%`}})}),(0,import_jsx_runtime3.jsx)("span",{children:compactSize(item.chars)})]}):null,item.detail?(0,import_jsx_runtime3.jsx)("small",{className:"matrx-alchemy-tree-detail",children:item.detail}):null]})]}),item.limitChoices&&handlers.limit&&item.state!=="off"&&!item.locked&&!item.coveredBy?(0,import_jsx_runtime3.jsx)("select",{className:"matrx-alchemy-tree-limit","aria-label":`Limit ${item.label}`,value:item.limit??KEEP,onChange:event=>handlers.limit(item,event.target.value),children:item.limitChoices.map(choice=>(0,import_jsx_runtime3.jsx)("option",{value:choice.value,children:choice.label},choice.value))}):null,item.copyPath&&handlers.copyPath?(0,import_jsx_runtime3.jsx)("button",{type:"button",className:"matrx-alchemy-tree-icon","aria-label":`Copy path ${item.copyPath}`,title:`Copy ${item.copyPath}`,onClick:()=>handlers.copyPath(item.copyPath),children:(0,import_jsx_runtime3.jsx)(CopyGlyph,{})}):null]})}function compactSize(chars){let short=value=>(0,import_format2.formatCount)(value,{style:"compact"});return`${short(chars)} \xB7 \u2248${short(Math.ceil(chars/4))} tok`}function StructureTreeList({label,items,whole,focusKey,handlers,maxHeight="24rem",onContextMenu}){let height=useRowHeight(),ref=React3.useRef(null),[offset,setOffset]=React3.useState(0),[viewport,setViewport]=React3.useState(0);React3.useLayoutEffect(()=>{let node=ref.current;if(!node)return;let measure=()=>setViewport(node.clientHeight);if(measure(),typeof ResizeObserver>"u")return;let observer=new ResizeObserver(measure);return observer.observe(node),()=>observer.disconnect()},[]);let view=(0,import_data_table.computeWindow)({count:items.length,itemSize:height,viewport:viewport||640,offset}),rows=[];for(let index=view.start;index<view.end;index++){let item=items[index];rows.push((0,import_jsx_runtime3.jsx)(TreeRow,{item,whole,focused:item.key===focusKey,height,handlers},item.key))}return(0,import_jsx_runtime3.jsxs)("div",{ref,role:"tree","aria-label":label,className:"matrx-alchemy-tree",style:{maxHeight},onScroll:event=>setOffset(event.currentTarget.scrollTop),onContextMenu,children:[(0,import_jsx_runtime3.jsx)("div",{style:{height:view.padStart},"aria-hidden":"true"}),rows,(0,import_jsx_runtime3.jsx)("div",{style:{height:view.padEnd},"aria-hidden":"true"})]})}var isRecord=value=>value!==null&&typeof value=="object"&&!Array.isArray(value),enc=segment=>segment.replace(/~/g,"~0").replace(/\//g,"~1");function jsonChildren(node){let values=node.values;if(values.length&&values.every(Array.isArray)){let items=values.flat(),out=[];return items.length>1&&out.push({pattern:`${node.pattern}/*`,label:"[*] every item",values:items,concrete:!1}),node.concrete&&values[0].forEach((item,index)=>out.push({pattern:`${node.pattern}/${index}`,label:`[${index}]`,values:[item],concrete:!0})),out}let objects=values.filter(isRecord);if(!objects.length)return[];let keys=[],seen=new Set;for(let object of objects)for(let key of Object.keys(object))seen.has(key)||(seen.add(key),keys.push(key));return keys.map(key=>({pattern:`${node.pattern}/${enc(key)}`,label:key,values:objects.filter(object=>Object.prototype.hasOwnProperty.call(object,key)).map(object=>object[key]),concrete:node.concrete}))}var hasChildren=node=>node.values.some(value=>Array.isArray(value)&&value.length>0||isRecord(value)&&Object.keys(value).length>0);function preview(value){return typeof value=="string"?value.length>60?`"${value.slice(0,60).replace(/\s+/g," ")}\u2026"`:JSON.stringify(value):Array.isArray(value)?`[${(0,import_format2.formatCount)(value.length)} items]`:isRecord(value)?`{${(0,import_format2.formatCount)(Object.keys(value).length)} keys}`:String(value)}function limitChoicesFor(node){return node.values.every(Array.isArray)?LIST_LIMITS:node.values.every(value=>typeof value=="string")?TEXT_LIMITS:node.values.every(isRecord)?OBJECT_LIMITS:[{value:KEEP,label:"Keep"},{value:"stub",label:"Stub"}]}function overlaps(a,b){let x=(0,import_operate3.pointerSegments)(a),y=(0,import_operate3.pointerSegments)(b);return x.length===y.length&&x.every((segment,index)=>segment===y[index]||segment==="*"||y[index]==="*")}function nodeState(pattern,exclude){if(exclude.includes(pattern))return{state:"off"};let cover=exclude.find(candidate=>(0,import_operate3.patternCovers)(candidate,pattern));return cover!==void 0?{state:"off",coveredBy:cover}:exclude.some(candidate=>(0,import_operate3.patternBelow)(candidate,pattern)||overlaps(candidate,pattern))?{state:"mixed"}:{state:"on"}}function toggleNode(recipe,pattern){let{state}=nodeState(pattern,recipe.exclude);if(state==="off")return{...recipe,exclude:recipe.exclude.filter(candidate=>candidate!==pattern)};let limits=Object.fromEntries(Object.entries(recipe.limits).filter(([candidate])=>!(0,import_operate3.patternCovers)(pattern,candidate)));return{exclude:[...recipe.exclude.filter(candidate=>!(0,import_operate3.patternCovers)(pattern,candidate)),pattern],limits}}function jsonTreeItems(root,recipe,expanded){let items=[],visit=(node,depth)=>{let expandable=hasChildren(node),isOpen=expandable&&expanded.has(node.pattern),chars=node.values.reduce((sum,value)=>sum+(node.pattern===""?(0,import_operate3.jsonSize)(value):(0,import_operate3.nodeChars)(value)),0),{state,coveredBy}=node.pattern===""?{state:void 0,coveredBy:void 0}:nodeState(node.pattern,recipe.exclude);if(items.push({key:node.pattern||"#root",depth,label:node.label,detail:node.concrete?preview(node.values[0]??null):`in ${(0,import_format2.formatCount)(node.values.length)} items`,chars,state,coveredBy:coveredBy===void 0?void 0:(0,import_operate3.displayPath)(coveredBy),expandable,expanded:isOpen,...node.pattern?{limitChoices:limitChoicesFor(node),limit:encodeLimit(recipe.limits[node.pattern]),copyPath:(0,import_operate3.displayPath)(node.pattern)}:{copyPath:"data"}}),isOpen&&state!=="off")for(let child of jsonChildren(node))visit(child,depth+1)};return visit({pattern:"",label:"data",values:[root],concrete:!0},0),items}function jsonSearchItems(root,recipe,query,cap=500){let q=query.trim().toLocaleLowerCase();if(!q)return[];let items=[],walk=(value,segments)=>{if(items.length>=cap)return;let key=segments[segments.length-1]??"",scalar=value===null||typeof value!="object";if((key.toLocaleLowerCase().includes(q)||scalar&&String(value).toLocaleLowerCase().includes(q))&&segments.length){let pattern=segments.map(segment=>`/${enc(segment)}`).join(""),{state,coveredBy}=nodeState(pattern,recipe.exclude),node={pattern,label:key,values:[value],concrete:!0};items.push({key:`search:${pattern}`,depth:0,label:(0,import_operate3.displayPath)(pattern),detail:preview(value),chars:(0,import_operate3.nodeChars)(value),state,coveredBy:coveredBy===void 0?void 0:(0,import_operate3.displayPath)(coveredBy),limitChoices:limitChoicesFor(node),limit:encodeLimit(recipe.limits[pattern]),copyPath:(0,import_operate3.displayPath)(pattern)})}if(Array.isArray(value))value.forEach((item,index)=>walk(item,[...segments,String(index)]));else if(isRecord(value))for(let[child,item]of Object.entries(value))walk(item,[...segments,child])};return walk(root,[]),items}var itemPattern=item=>item.key.startsWith("search:")?item.key.slice(7):item.key==="#root"?"":item.key;var import_jsx_runtime4=require("react/jsx-runtime"),PANE_KEY="matrx-alchemy:prepare-panes",TAB_KEY="matrx-alchemy:prepare-tab",DEFAULT_PANES={left:320,right:340},MIN_PANE=220,MOBILE_WIDTH=768,PREVIEW_CHUNK_LINES=200;function readStored(key,fallback,valid){try{let raw=globalThis.localStorage?.getItem(key);if(!raw)return fallback;let value=JSON.parse(raw);return valid(value)?value:fallback}catch{return fallback}}function writeStored(key,value){try{globalThis.localStorage?.setItem(key,JSON.stringify(value))}catch{}}var isPanes=value=>!!value&&typeof value=="object"&&Number.isFinite(value.left)&&Number.isFinite(value.right),isTab=value=>value==="structure"||value==="preview"||value==="settings";function useNarrow(ref){let[narrow,setNarrow]=React4.useState(()=>typeof window<"u"&&window.innerWidth<MOBILE_WIDTH);return React4.useLayoutEffect(()=>{let node=ref.current;if(!node)return;let measure=()=>{let width=node.getBoundingClientRect().width||window.innerWidth;setNarrow(width<MOBILE_WIDTH)};if(measure(),typeof ResizeObserver>"u")return window.addEventListener("resize",measure),()=>window.removeEventListener("resize",measure);let observer=new ResizeObserver(measure);return observer.observe(node),()=>observer.disconnect()}),narrow}function PreviewText({text,id,marks=EMPTY_MARKS,label="Prepared output"}){let chunks=React4.useMemo(()=>{let out=[],start=0,lines=0;for(let i=0;i<text.length;i++)text.charCodeAt(i)===10&&++lines===PREVIEW_CHUNK_LINES&&(out.push({start,text:text.slice(start,i+1)}),start=i+1,lines=0);return(start<text.length||out.length===0)&&out.push({start,text:text.slice(start)}),out},[text]),ref=React4.useRef(null),focusStart=marks.find(mark=>mark.kind==="focus")?.start??-1;return React4.useEffect(()=>{focusStart<0||ref.current?.querySelector("[data-mark~='focus']")?.scrollIntoView?.({block:"center"})},[focusStart]),(0,import_jsx_runtime4.jsx)("div",{ref,id,className:"matrx-alchemy-preview matrx-alchemy-prep-preview",role:"region","aria-label":label,tabIndex:0,"data-chars":text.length,children:chunks.map((chunk,index)=>(0,import_jsx_runtime4.jsx)("pre",{className:"matrx-alchemy-prep-chunk",children:marked(chunk.text,chunk.start,marks)},index))})}var EMPTY_MARKS=[];function marked(text,offset,marks){let end=offset+text.length,inside=marks.filter(mark=>mark.end>offset&&mark.start<end&&mark.end>mark.start);if(!inside.length)return text;let cuts=new Set([offset,end]);for(let mark of inside)cuts.add(Math.max(offset,mark.start)),cuts.add(Math.min(end,mark.end));let points=[...cuts].sort((a,b)=>a-b),out=[];for(let i=0;i<points.length-1;i++){let a=points[i],b=points[i+1],piece=text.slice(a-offset,b-offset),kinds=[...new Set(inside.filter(mark=>mark.start<=a&&mark.end>=b).map(mark=>mark.kind))];out.push(kinds.length?(0,import_jsx_runtime4.jsx)("mark",{className:"matrx-alchemy-mark","data-mark":kinds.join(" "),children:piece},a):piece)}return out}function PreviewHtml({html}){return(0,import_jsx_runtime4.jsx)("iframe",{className:"matrx-alchemy-preview matrx-alchemy-prep-html",title:"Prepared output (formatted)",sandbox:"",srcDoc:html})}function ShareBar({part,whole}){let share=whole>0?Math.min(1,part/whole):0;return(0,import_jsx_runtime4.jsx)("span",{className:"matrx-alchemy-prep-share","aria-hidden":"true",children:(0,import_jsx_runtime4.jsx)("span",{style:{width:`${(share*100).toFixed(1)}%`}})})}function SizeNote({chars,whole}){return chars===null?null:(0,import_jsx_runtime4.jsxs)("span",{className:"matrx-alchemy-prep-size",children:[(0,import_jsx_runtime4.jsx)(ShareBar,{part:chars,whole}),(0,import_jsx_runtime4.jsx)("span",{children:sizeLabel(chars)})]})}function useProjectedLabels(labels,adapters){let engine=hostEngineFor(adapters,"plain"),key=labels.join("\0"),[projected,setProjected]=React4.useState(null);return React4.useEffect(()=>{if(!engine||!labels.some(label=>/[#*_`[\]>~|]/.test(label)))return;let controller=new AbortController;return Promise.all(labels.map(async label=>(await buildWithAdapter(engine,{snapshotId:"label",sourceId:"label",sourceRevision:"label",revision:0,payload:{kind:"markdown",text:label.replace(/\s+(#{1,6}\s)/g,`
|
|
5
5
|
$1`)},omissions:[],manuallyEdited:!1,provenance:[]},controller.signal)).plainText.replace(/\s+/g," ").trim()||label)).then(result=>{controller.signal.aborted||setProjected({key,labels:result})}).catch(()=>{}),()=>controller.abort()},[engine,key]),projected?.key===key?projected.labels:labels}function Segmented({label,value,choices,onChange}){return(0,import_jsx_runtime4.jsx)("div",{className:"matrx-alchemy-prep-segmented",role:"group","aria-label":label,children:choices.map(choice=>(0,import_jsx_runtime4.jsx)("button",{type:"button","aria-pressed":choice.value===value,title:choice.title,onClick:()=>onChange(choice.value),children:choice.label},String(choice.value)))})}function LeverControl({option,value,onChange}){let hint="hint"in option&&option.hint?(0,import_jsx_runtime4.jsx)("small",{className:"matrx-alchemy-prep-hint",children:option.hint}):null;if(option.kind==="toggle")return(0,import_jsx_runtime4.jsxs)("div",{className:"matrx-alchemy-prep-lever",children:[(0,import_jsx_runtime4.jsxs)("button",{type:"button",role:"switch","aria-checked":!!value,className:"matrx-alchemy-prep-switch",onClick:()=>onChange(!value),children:[(0,import_jsx_runtime4.jsx)("span",{className:"matrx-alchemy-prep-switch-track","aria-hidden":"true",children:(0,import_jsx_runtime4.jsx)("span",{})}),(0,import_jsx_runtime4.jsx)("span",{className:"matrx-alchemy-prep-lever-label",children:option.label})]}),hint]});if(option.kind==="preset")return(0,import_jsx_runtime4.jsxs)("div",{className:"matrx-alchemy-prep-lever",children:[(0,import_jsx_runtime4.jsx)("span",{className:"matrx-alchemy-prep-lever-label",children:option.label}),(0,import_jsx_runtime4.jsx)(Segmented,{label:option.label,value:Number(value),choices:option.options.map(choice=>({value:choice.value,label:choice.label})),onChange})]});if(option.kind==="slider"){let index=Math.max(0,option.stops.indexOf(Number(value)));return(0,import_jsx_runtime4.jsxs)("label",{className:"matrx-alchemy-prep-lever",children:[(0,import_jsx_runtime4.jsxs)("span",{className:"matrx-alchemy-prep-lever-row",children:[(0,import_jsx_runtime4.jsx)("span",{className:"matrx-alchemy-prep-lever-label",children:option.label}),(0,import_jsx_runtime4.jsx)("output",{className:"matrx-alchemy-prep-value",children:option.formatValue(Number(value))})]}),(0,import_jsx_runtime4.jsx)("input",{type:"range","aria-label":option.label,min:0,max:Math.max(0,option.stops.length-1),step:1,value:index,"aria-valuetext":option.formatValue(Number(value)),onChange:event=>onChange(option.stops[Number(event.target.value)])}),hint]})}return(0,import_jsx_runtime4.jsxs)("div",{className:"matrx-alchemy-prep-lever",children:[(0,import_jsx_runtime4.jsxs)("label",{className:"matrx-alchemy-prep-lever-row",children:[(0,import_jsx_runtime4.jsx)("span",{className:"matrx-alchemy-prep-lever-label",children:option.label}),(0,import_jsx_runtime4.jsx)("input",{type:"number","aria-label":option.label,min:option.min,step:option.step,value:Number(value),onChange:event=>{Number.isNaN(event.target.valueAsNumber)||onChange(event.target.valueAsNumber)}})]}),option.presets?.length?(0,import_jsx_runtime4.jsx)(Segmented,{label:`${option.label} presets`,value:Number(value),choices:option.presets.map(preset=>({value:preset.value,label:preset.label})),onChange}):null,hint]})}var LEVEL_NAMES={full:"Full",compact:"Compact",brief:"Brief",off:"Off"};function GroomerSection({section,level,size,whole,onChange}){let levels=section.cuttable?["full","compact","brief","off"]:["full","compact","brief"];return(0,import_jsx_runtime4.jsxs)("div",{className:"matrx-alchemy-prep-node","data-level":level,children:[(0,import_jsx_runtime4.jsxs)("div",{className:"matrx-alchemy-prep-node-head",children:[(0,import_jsx_runtime4.jsxs)("span",{className:"matrx-alchemy-prep-node-title",children:[section.title,section.cuttable?(0,import_jsx_runtime4.jsx)("span",{className:"matrx-alchemy-prep-cut",title:"Safe to cut",children:"\u2702"}):null]}),(0,import_jsx_runtime4.jsx)(SizeNote,{chars:size,whole})]}),section.description?(0,import_jsx_runtime4.jsx)("small",{className:"matrx-alchemy-prep-hint",children:section.description}):null,(0,import_jsx_runtime4.jsx)(Segmented,{label:`${section.title} detail`,value:level,choices:levels.map(value=>({value,label:LEVEL_NAMES[value],...value!=="off"&§ion.levelLabels?.[value]?{title:section.levelLabels[value]}:{}})),onChange}),level!=="off"&§ion.levelLabels?.[level]?(0,import_jsx_runtime4.jsx)("small",{className:"matrx-alchemy-prep-hint",children:section.levelLabels[level]}):null]})}function PreparationWorkspace({restoreFocus,open,frame,windowNode,state,scopes,scopeLabels,onClose,onChange,transport,ai,adapters,actions,onOutcome,captureScope}){let fence=useFence(),latest=React4.useRef(state);latest.current=state;let aiSession=React4.useRef(void 0);!aiSession.current&&ai&&(aiSession.current=ai.fork?.()??ai);let[controls,setControls]=React4.useState(()=>initialControls(state)),[controlsHistory,setControlsHistory]=React4.useState([]),[pending,setPending]=React4.useState(null),requestedFormat=state.preferences.initialFormat,firstOffered=()=>{let kind=state.draft.payload.kind;return[kind==="json"||kind==="registered"?"json":kind==="rows"?"tsv":kind==="markdown"?"markdown":"plain",...COPIES].find(f=>offersFormat(f,state.draft.payload,adapters))??"plain"},[format,setFormat]=React4.useState(()=>isBuiltInFormat(requestedFormat)?offersFormat(requestedFormat,state.draft.payload,adapters)?requestedFormat:firstOffered():adapters.some(adapter=>adapter.id===requestedFormat&&adapter.supports(state.draft.payload))?requestedFormat:firstOffered()),[envelopeOn,setEnvelopeOn]=React4.useState(state.preferences.initialEnvelope!=="text"),[instructions,setInstructions]=React4.useState(""),[sealedInstructions,setSealedInstructions]=React4.useState(""),[formatArtifact,setFormatArtifact]=React4.useState(null),[formatError,setFormatError]=React4.useState(null),[editing,setEditing]=React4.useState(!1),[buffer,setBuffer]=React4.useState(""),[bufferError,setBufferError]=React4.useState(null),[aiInstruction,setAiInstruction]=React4.useState(""),[busy,setBusy]=React4.useState(null),[aiFailed,setAiFailed]=React4.useState(!1),[biggestFirst,setBiggestFirst]=React4.useState(!1),[focus,setFocus]=React4.useState(null),[treeQuery,setTreeQuery]=React4.useState(""),[expanded,setExpanded]=React4.useState(()=>new Set([""])),[showRemoved,setShowRemoved]=React4.useState(!1),[removedView,setRemovedView]=React4.useState(null),[panes,setPanes]=React4.useState(()=>readStored(PANE_KEY,DEFAULT_PANES,isPanes)),[tab,setTab]=React4.useState(()=>readStored(TAB_KEY,"preview",isTab)),root=React4.useRef(null),narrow=useNarrow(root);React4.useEffect(()=>{setAiFailed(!1)},[state.snapshot.id,state.draft.revision]);let handingOff=React4.useRef(!1);React4.useEffect(()=>{open&&(handingOff.current=!1)},[open]);let activeAi=React4.useRef(null),activeCapture=React4.useRef(null);React4.useEffect(()=>{let timer=setTimeout(()=>setSealedInstructions(instructions),200);return()=>clearTimeout(timer)},[instructions]),React4.useEffect(()=>{if(state.buildError){setFormatArtifact(null),setFormatError(null);return}if(bufferError)return;let adapter=adapters.find(candidate=>candidate.id===format),controller=new AbortController,snapshotId=state.snapshot.id,revision=state.draft.revision;return setFormatError(null),(isBuiltInFormat(format)?buildFormat(state.draft,format,state.snapshot.label,adapters,controller.signal):adapter?buildWithAdapter(adapter,state.draft,controller.signal):buildArtifact(state.draft,"plain",state.snapshot.label)).then(artifact=>{!controller.signal.aborted&&artifact.snapshotId===snapshotId&&artifact.draftRevision===revision&&setFormatArtifact(artifact)}).catch(error=>{controller.signal.aborted||setFormatError(errorMessage(error,"Format preview failed"))}),()=>controller.abort()},[adapters,bufferError,format,state.buildError,state.draft,state.snapshot.id,state.snapshot.label]);let sealed=React4.useMemo(()=>{if(state.buildError||!formatArtifact||formatArtifact.snapshotId!==state.snapshot.id||formatArtifact.draftRevision!==state.draft.revision)return{artifact:null,error:null};let dataFormat=envelopeDataFormat(format,formatArtifact);if(!envelopeOn||!dataFormat)return{artifact:formatArtifact,error:null};try{return{artifact:sealForAi(formatArtifact,dataFormat,state.envelope??defaultEnvelope(state.snapshot),sealedInstructions,state.snapshot.label),error:null}}catch(cause){return{artifact:null,error:errorMessage(cause,"The AI envelope could not be sealed.")}}},[envelopeOn,format,formatArtifact,sealedInstructions,state.buildError,state.draft.revision,state.envelope,state.snapshot]),shown=sealed.artifact,close=React4.useCallback(()=>{activeAi.current?.abort(),activeCapture.current?.abort(),activeAi.current=null,activeCapture.current=null,fence.abortAll(),setBusy(null),onClose()},[fence,onClose]),applyLevers=(values,base=latest.current,withControls=controls)=>{let levers=base.levers;if(levers)try{let built=levers.build(values),snapshot=leverSnapshot(built.payload,base.snapshot.sourceId,base.snapshot.label),original=(0,import_operate4.createDraft)(snapshot),next={...base,snapshot,original,draft:original,leverValues:values,leverMeta:built.meta,leverSizes:built.sectionSizes,envelope:built.envelope,buildError:void 0,error:void 0};onChange({...next,draft:rebuild(next,withControls)})}catch(cause){onChange({...base,leverValues:values,buildError:errorMessage(cause,"This source could not be prepared with these options.")})}},changeLevers=values=>{if(state.draft.manuallyEdited){setPending({kind:"levers",values});return}React4.startTransition(()=>applyLevers(values))},leverTimer=React4.useRef(null);React4.useEffect(()=>()=>{leverTimer.current&&clearTimeout(leverTimer.current)},[]);let[typedLevers,setTypedLevers]=React4.useState(null),leverValues=typedLevers??state.leverValues??state.levers?.initial??{},setLever=(key,value,debounce=!1)=>{let next={...leverValues,[key]:value};if(!debounce){setTypedLevers(null),changeLevers(next);return}setTypedLevers(next),leverTimer.current&&clearTimeout(leverTimer.current),leverTimer.current=setTimeout(()=>{setTypedLevers(null),changeLevers(next)},150)},changeControls=next=>{if(state.draft.manuallyEdited){setPending({kind:"controls",controls:next});return}setControlsHistory(history=>[...history,controls]),setControls(next),React4.startTransition(()=>onChange({...latest.current,draft:rebuild(latest.current,next),error:void 0}))},applyPending=()=>{pending&&(setBufferError(null),setEditing(!1),pending.kind==="controls"?(setControlsHistory(history=>[...history,controls]),setControls(pending.controls),onChange({...state,draft:rebuild(state,pending.controls),error:void 0})):applyLevers(pending.values,state),setPending(null))},rebuildFromSource=()=>{setBufferError(null),setEditing(!1),setPending(null),state.levers?applyLevers(state.leverValues??state.levers.initial,state):onChange({...state,draft:rebuild(state,controls),error:void 0})},startEditing=()=>{setBuffer(formatArtifact?.plainText??""),setEditing(!0)},editBuffer=text=>{setBuffer(text),setFormatError(null);let payload=state.draft.payload;if(payload.kind==="json"||payload.kind==="registered"){try{let value=JSON.parse(text),next=payload.kind==="json"?{kind:"json",value}:{kind:"registered",format:payload.format,value};setBufferError(null),onChange({...state,draft:(0,import_operate4.editDraft)(state.draft,next),error:void 0})}catch{setBufferError("JSON is incomplete or invalid. Fix it before copying or downloading.")}return}setBufferError(null);let kind=payload.kind==="markdown"||format==="markdown"?"markdown":"text";(payload.kind==="rows"||!isBuiltInFormat(format))&&setFormat("plain"),onChange({...state,draft:(0,import_operate4.editDraft)(state.draft,{kind,text}),error:void 0})},requestCapture=async scope=>{activeCapture.current?.abort();let{controller,id}=fence.begin();activeCapture.current=controller;let revision=state.draft.revision;setBusy("capture");try{let result=await captureScope(scope,controller.signal);fence.valid(id,controller)&&latest.current.draft.revision===revision&&onChange({...latest.current,pending:{...result,scope},sourceStale:!1,error:result.collectionError})}catch(error){fence.valid(id,controller)&&onChange({...latest.current,error:errorMessage(error,"Refresh failed")})}finally{fence.finish(controller),activeCapture.current===controller&&(activeCapture.current=null),fence.valid(id,controller)&&setBusy(null)}},resolveCapture=choice=>{if(!state.pending)return;if(choice==="keep"){let{pending:_pending,...kept}=state;onChange({...kept,error:void 0});return}let fresh=state.pending,preferences=(0,import_operate4.resolveTransferPreferences)({},state.preferences,fresh.snapshot.limits),base={...fresh,key:state.key,original:(0,import_operate4.createDraft)(fresh.snapshot),draft:(0,import_operate4.createDraft)(fresh.snapshot),scope:fresh.scope,preferences,...fresh.collectionError?{error:fresh.collectionError}:{},...state.envelope?{envelope:state.envelope}:{}},nextControls=initialControls(base);setControls(nextControls),setControlsHistory([]),setPending(null),setBufferError(null),setEditing(!1),onChange({...base,draft:rebuild(base,nextControls)})},runAi=async(recover=!1)=>{let adapter=aiSession.current;if(!adapter||!adapter.supports(state.snapshot)||!recover&&!aiInstruction.trim()||recover&&!adapter.recover)return;activeAi.current?.abort();let{controller,id}=fence.begin();activeAi.current=controller;let snapshotId=state.snapshot.id,revision=state.draft.revision;setBusy("ai"),setAiFailed(!1);try{let next=recover?await adapter.recover({snapshot:state.snapshot,draft:state.draft,signal:controller.signal}):await adapter.run({snapshot:state.snapshot,draft:state.draft,instruction:aiInstruction,signal:controller.signal}),current=latest.current;if(!fence.valid(id,controller)||current.snapshot.id!==snapshotId||current.draft.revision!==revision||next.snapshotId!==snapshotId||next.sourceId!==state.draft.sourceId||next.sourceRevision!==state.draft.sourceRevision||next.revision<=revision)return;try{(0,import_operate4.serialize)(next,"plain")}catch{onChange({...current,error:"AI returned an invalid transfer draft."}),setAiFailed(!0);return}onChange({...current,draft:next,error:void 0}),setBufferError(null)}catch(error){!isAbort(error)&&fence.valid(id,controller)&&(setAiFailed(!0),onChange({...latest.current,error:errorMessage(error,"AI preparation failed")}))}finally{fence.finish(controller),activeAi.current===controller&&(activeAi.current=null),fence.valid(id,controller)&&setBusy(null)}},cancelAi=async()=>{let aiController=activeAi.current,{controller,id}=fence.begin();try{await aiSession.current?.cancel?.()}catch(error){fence.valid(id,controller)&&onChange({...latest.current,error:errorMessage(error,"AI cancellation failed")})}finally{aiController?.abort(),fence.finish(controller),activeAi.current===aiController&&(activeAi.current=null),fence.valid(id,controller)&&setBusy(null)}},[deliveryNotice,setDeliveryNotice]=React4.useState(null);React4.useEffect(()=>{setDeliveryNotice(null)},[state.draft.revision]);let reportDelivery=outcome=>{setDeliveryNotice(outcomeMessage(outcome)),onOutcome(outcome)},deliver=async download=>{if(bufferError)return;let{controller,id}=fence.begin(),snapshotId=state.snapshot.id,revision=state.draft.revision;setBusy(download?"download":"copy");try{if(!shown)throw new Error("Wait for the preview before delivery.");let artifact=shown,current=latest.current;if(!fence.valid(id,controller)||current.snapshot.id!==snapshotId||current.draft.revision!==revision||artifact.snapshotId!==snapshotId||artifact.draftRevision!==revision)return;let result=await transport[download?"download":"copy"](artifact,controller.signal);fence.valid(id,controller)&&reportDelivery(result)}catch(error){fence.valid(id,controller)&&reportDelivery({status:"error",code:"prepare-failed",message:errorMessage(error,"Preparation failed"),retryable:!0})}finally{fence.finish(controller),fence.valid(id,controller)&&setBusy(null)}},deliverAction=async action=>{if(busy||bufferError||formatError||!shown)return;let{controller,id}=fence.begin(),current=latest.current;setBusy("action");try{if(!action.supports(current.snapshot,current.draft))throw new Error(`${action.label} is unavailable for this prepared content.`);handingOff.current=!0,(0,import_react_dom.flushSync)(()=>onClose());let result=await action.run({snapshot:current.snapshot,draft:current.draft,signal:controller.signal});fence.valid(id,controller)&&reportDelivery(result)}catch(error){fence.valid(id,controller)&&reportDelivery({status:"error",code:"destination-failed",message:errorMessage(error,"Could not deliver prepared content"),retryable:!1})}finally{fence.finish(controller),fence.valid(id,controller)&&setBusy(null)}},eligibleActions=state.buildError?[]:actions.filter(action=>action.supports(state.snapshot,state.draft)),rows=state.original.payload.kind==="rows"?state.original.payload:null,formats=COPIES.filter(f=>offersFormat(f,state.draft.payload,adapters)),workspaceAdapters=adapters.filter(adapter=>!isBuiltInFormat(adapter.id)&&adapter.supports(state.draft.payload)),displayedOmissions=shown?.omissions??state.draft.omissions,shownText=shown?.plainText??"",chars=shownText.length,bytes=React4.useMemo(()=>new TextEncoder().encode(shownText).length,[shownText]),envelopeOffered=formatArtifact?envelopeDataFormat(format,formatArtifact)!==null:format!=="html"&&format!=="xlsx",snapshotSections=state.snapshot.sections,sectionLabels=useProjectedLabels(snapshotSections.map(section=>section.label),adapters),sectionRows=snapshotSections.map((section,index)=>({section,label:sectionLabels[index]??section.label,size:sectionSize(state.original.payload,section.path)})),sectionWhole=sectionRows.reduce((sum,row)=>sum+(row.size??0),0),orderedSections=biggestFirst?[...sectionRows].sort((a,b)=>(b.size??0)-(a.size??0)):sectionRows,groomer=state.levers?.sections??null,groomerWhole=Object.values(state.leverSizes??{}).reduce((sum,size)=>sum+size,0),orderedGroomer=groomer?biggestFirst?[...groomer].sort((a,b)=>(state.leverSizes?.[b.id]??0)-(state.leverSizes?.[a.id]??0)):groomer:null,activePreset=groomer?activeGroomerPreset(leverValues,groomer):null,options=state.levers?.options??null,jsonRoot=!groomer&&(state.original.payload.kind==="json"||state.original.payload.kind==="registered")?state.original.payload.value:void 0,hasStructure=!!(rows||snapshotSections.length||groomer||jsonRoot!==void 0),editHeld=state.draft.manuallyEdited,meta=Object.entries(state.leverMeta??{}).filter(([,value])=>value!==void 0&&value!==""),title=`Prepare ${state.snapshot.label}`,copyVisible=!state.buildError&&!formatError&&!bufferError&&!sealed.error&&!showRemoved,spans=React4.useMemo(()=>shown&&formatArtifact&&formatArtifact.snapshotId===state.snapshot.id&&formatArtifact.draftRevision===state.draft.revision?shownSpans(state.draft,formatArtifact,shown):null,[formatArtifact,shown,state.draft,state.snapshot.id]),[projectedSections,setProjectedSections]=React4.useState(null);React4.useEffect(()=>{let engine=hostEngineFor(adapters,format),layout2=draftLayout(state.draft),payload=state.draft.payload;if(!engine||!formatArtifact||!layout2.sectionRanges||payload.kind!=="text"&&payload.kind!=="markdown"||formatArtifact.draftRevision!==state.draft.revision){setProjectedSections(null);return}let controller=new AbortController,pieces=Object.entries(layout2.sectionRanges).sort((a,b)=>a[1].start-b[1].start).map(([id,range])=>({id,text:payload.text.slice(range.start,range.end)}));return locateProjectedSections(formatArtifact.plainText,pieces,engine,controller.signal).then(ranges=>{controller.signal.aborted||setProjectedSections({artifact:formatArtifact,ranges})}).catch(()=>{controller.signal.aborted||setProjectedSections(null)}),()=>controller.abort()},[adapters,format,formatArtifact,state.draft]);let focusResult=React4.useMemo(()=>{if(!focus||!shown)return{marks:[],note:null};if(!spans)return{marks:[],note:"This format has no highlight map. Choose JSON, Markdown, CSV, Google Sheets or plain text to see where it lands."};let byPath=new Map(spans.map(span=>[span.path,span])),found=[];if(focus.kind==="json"&&jsonRoot!==void 0)found=(focus.id.includes("*")?(0,import_operate4.concretePointers)(jsonRoot,focus.id).slice(0,500):[focus.id]).map(pointer=>(0,import_operate4.outputPointer)(jsonRoot,controls.structure,pointer)).flatMap(pointer=>pointer===null?[]:[byPath.get(pointer)].filter(span=>!!span));else if(focus.kind==="section"){let section=snapshotSections.find(candidate=>candidate.id===focus.id),span=section?sectionSpan(state.draft,spans,shownText,section.id)??byPath.get(section.path):void 0,projected=section&&projectedSections?.artifact===formatArtifact?projectedSections.ranges[section.id]:void 0,whole=byPath.get("");!span&&projected&&whole&&(span={path:`/sections/${section.id}`,start:whole.start+projected.start,end:whole.start+projected.end}),span&&(found=[span])}else if(focus.kind==="row"){let position=draftLayout(state.draft).rowOrder?.indexOf(Number(focus.id))??-1,span=position>=0?byPath.get(`/rows/${position}`):void 0;span&&(found=[span])}else{let span=byPath.get(`/columns/${encodePointer(focus.id)}`);span&&(found=[span])}if(!found.length){let included=focus.kind==="section"?controls.sections.includes(focus.id):focus.kind==="row"?!controls.excludedRows.includes(Number(focus.id)):!0;return{marks:[],note:included&&focus.kind==="section"?"This format rewrites the text, so this section's place cannot be pointed at yet. Choose Markdown to see exactly where it lands.":"Not in the output: it is left out, or a limit trimmed it."}}return{marks:found.map(span=>({start:span.start,end:span.end,kind:"focus"})),note:null}},[controls.excludedRows,controls.sections,controls.structure,focus,formatArtifact,jsonRoot,projectedSections,shown,shownText,snapshotSections,spans,state.draft]),searchQuery=rows?controls.search:treeQuery,matches=React4.useMemo(()=>findMatches(shownText,searchQuery,rows?controls.searchMode:"contains"),[controls.searchMode,rows,searchQuery,shownText]),previewMarks=React4.useMemo(()=>[...focusResult.marks,...matches.marks],[focusResult.marks,matches.marks]),copyText=(text,what)=>{let artifact=(0,import_operate4.sealTransferArtifact)({snapshotId:state.draft.snapshotId,draftRevision:state.draft.revision,format:"plain",plainText:text,omissions:[]});transport.copy(artifact,new AbortController().signal).then(outcome=>{setDeliveryNotice(outcome.status==="success"?`${what} copied`:outcomeMessage(outcome)),onOutcome(outcome)}).catch(error=>setDeliveryNotice(errorMessage(error,`${what} could not be copied`)))};React4.useEffect(()=>{if(!showRemoved){setRemovedView(null);return}if(!isBuiltInFormat(format)||format==="xlsx"||format==="html"){setRemovedView({error:"Choose JSON, Markdown, CSV, Google Sheets or plain text to see what was removed."});return}let controller=new AbortController,full=(0,import_operate4.resetDraft)(state.snapshot);return buildFormat(full,format,state.snapshot.label,adapters,controller.signal).then(async artifact=>{if(controller.signal.aborted)return;let engine=hostEngineFor(adapters,format),payload=full.payload,prose=(payload.kind==="text"||payload.kind==="markdown")&&snapshotSections.length>0&&snapshotSections.every(section=>/^\/text\/\d+-\d+$/.test(section.path)),projected=engine&&prose?await locateProjectedSections(artifact.plainText,snapshotSections.map(section=>{let[,a,b]=/^\/text\/(\d+)-(\d+)$/.exec(section.path);return{id:section.id,text:payload.text.slice(Number(a),Number(b))}}),engine,controller.signal):void 0;if(controller.signal.aborted)return;let result=removedMarks(state,controls,full,artifact,projected);setRemovedView(result?{text:artifact.plainText,marks:result.marks,summary:`${(0,import_format3.formatCount)(result.removed)} removed \xB7 ${(0,import_format3.formatCount)(result.changed)} shortened \xB7 ${(0,import_format3.formatCount)(result.chars)} chars left out`}:{error:"This format has no span map, so its removals cannot be pointed at."})}).catch(error=>{controller.signal.aborted||setRemovedView({error:errorMessage(error,"Full could not be built in this format.")})}),()=>controller.abort()},[adapters,controls,format,showRemoved,state.draft,state.snapshot]);let jsonItems=React4.useMemo(()=>jsonRoot===void 0?[]:treeQuery.trim()?jsonSearchItems(jsonRoot,controls.structure,treeQuery):jsonTreeItems(jsonRoot,controls.structure,expanded),[controls.structure,expanded,jsonRoot,treeQuery]),jsonWhole=jsonItems.find(item=>item.key==="#root")?.chars??jsonItems.reduce((max,item)=>Math.max(max,item.chars??0),0),setStructure=structure2=>changeControls({...controls,structure:structure2}),jsonHandlers={toggle:item=>setStructure(toggleNode(controls.structure,itemPattern(item))),includeAgain:item=>{let pattern=itemPattern(item),cover=controls.structure.exclude.find(candidate=>candidate!==pattern&&(0,import_operate4.patternCovers)(candidate,pattern));cover!==void 0&&setStructure({...controls.structure,exclude:controls.structure.exclude.filter(candidate=>candidate!==cover)})},expand:item=>setExpanded(current=>{let next=new Set(current),pattern=itemPattern(item);return next.has(pattern)?next.delete(pattern):next.add(pattern),next}),focus:item=>setFocus({kind:"json",id:itemPattern(item),key:item.key}),limit:(item,value)=>{let pattern=itemPattern(item),limits={...controls.structure.limits},limit=decodeLimit(value);limit?limits[pattern]=limit:delete limits[pattern],setStructure({...controls.structure,limits})},copyPath:path=>copyText(path,"Path")},sectionText=path=>{let m=/^\/text\/(\d+)-(\d+)$/.exec(path),payload=state.original.payload;return m&&(payload.kind==="text"||payload.kind==="markdown")?payload.text.slice(Number(m[1]),Number(m[2])):""},sectionQuery=treeQuery.trim().toLocaleLowerCase(),sectionItems=orderedSections.filter(({section,label})=>!sectionQuery||label.toLocaleLowerCase().includes(sectionQuery)||sectionText(section.path).toLocaleLowerCase().includes(sectionQuery)).map(({section,label,size})=>({key:`section:${section.id}`,depth:0,label,chars:size,state:controls.sections.includes(section.id)?"on":"off",limitChoices:TEXT_LIMITS,limit:encodeLimit(controls.sectionLimits[section.id])})),sectionId=item=>item.key.slice(8),sectionHandlers={toggle:item=>{let id=sectionId(item);changeControls({...controls,sections:controls.sections.includes(id)?controls.sections.filter(value=>value!==id):[...controls.sections,id]})},focus:item=>setFocus({kind:"section",id:sectionId(item),key:item.key}),limit:(item,value)=>{let id=sectionId(item),limits={...controls.sectionLimits},limit=decodeLimit(value);limit?limits[id]=limit:delete limits[id],changeControls({...controls,sectionLimits:limits})}},drag=React4.useRef(null),clampPane=width=>{let total=root.current?.getBoundingClientRect().width||1600;return Math.round(Math.min(Math.max(width,MIN_PANE),Math.max(MIN_PANE,total*.45)))},setPane=(side,width,persist)=>{setPanes(current=>{let next={...current,[side]:clampPane(width)};return persist&&writeStored(PANE_KEY,next),next})},divider=side=>(0,import_jsx_runtime4.jsx)("div",{role:"separator","aria-orientation":"vertical","aria-label":side==="left"?"Resize structure pane":"Resize settings pane","aria-valuenow":panes[side],"aria-valuemin":MIN_PANE,tabIndex:0,className:"matrx-alchemy-prep-divider",onPointerDown:event=>{drag.current={side,startX:event.clientX,start:panes[side]},event.currentTarget.setPointerCapture?.(event.pointerId)},onPointerMove:event=>{let d=drag.current;if(!d||d.side!==side)return;let delta=event.clientX-d.startX;setPane(side,side==="left"?d.start+delta:d.start-delta,!1)},onPointerUp:event=>{drag.current&&(drag.current=null,event.currentTarget.releasePointerCapture?.(event.pointerId),setPanes(current=>(writeStored(PANE_KEY,current),current)))},onKeyDown:event=>{let step=event.shiftKey?64:16;event.key==="ArrowLeft"&&(event.preventDefault(),setPane(side,panes[side]+(side==="left"?-step:step),!0)),event.key==="ArrowRight"&&(event.preventDefault(),setPane(side,panes[side]+(side==="left"?step:-step),!0))}}),chooseTab=next=>{setTab(next),writeStored(TAB_KEY,next)},topBar=(0,import_jsx_runtime4.jsxs)("div",{className:"matrx-alchemy-prep-top",children:[scopes.length>1?(0,import_jsx_runtime4.jsxs)("label",{className:"matrx-alchemy-prep-field",children:["Scope",(0,import_jsx_runtime4.jsx)("select",{"aria-label":"Transfer scope",value:state.scope,disabled:busy!==null,onChange:e=>{requestCapture(e.target.value)},children:scopes.map(scope=>(0,import_jsx_runtime4.jsx)("option",{value:scope,children:scopeLabels?.[scope]??SCOPE_LABEL[scope]},scope))})]}):null,(0,import_jsx_runtime4.jsxs)("label",{className:"matrx-alchemy-prep-field",children:["Detail",(0,import_jsx_runtime4.jsxs)("select",{"aria-label":"Detail preset",value:controls.preset,onChange:e=>changeControls({...controls,preset:e.target.value}),children:[(0,import_jsx_runtime4.jsx)("option",{value:"full",children:"Full"}),(0,import_jsx_runtime4.jsx)("option",{value:"compact",children:"Compact"}),(0,import_jsx_runtime4.jsx)("option",{value:"brief",children:"Brief"}),(0,import_jsx_runtime4.jsx)("option",{value:"custom",children:"Custom"})]})]}),(0,import_jsx_runtime4.jsxs)("label",{className:"matrx-alchemy-prep-field",children:["Format",(0,import_jsx_runtime4.jsxs)("select",{"aria-label":"Output format",value:format,onChange:e=>{setFormat(e.target.value),setEditing(!1)},children:[formats.map(f=>(0,import_jsx_runtime4.jsx)("option",{value:f,children:LABEL[f]},f)),state.draft.payload.kind==="rows"?(0,import_jsx_runtime4.jsx)("option",{value:"xlsx",children:"Excel workbook"}):null,workspaceAdapters.map(adapter=>(0,import_jsx_runtime4.jsx)("option",{value:adapter.id,children:adapter.label},adapter.id))]})]}),envelopeOffered?(0,import_jsx_runtime4.jsx)(Segmented,{label:"Copy as",value:envelopeOn?"ai":"text",choices:[{value:"text",label:"Text",title:"The format's bytes alone"},{value:"ai",label:"For AI",title:"Inside the AI envelope, with your instructions first"}],onChange:value=>setEnvelopeOn(value==="ai")}):null,(0,import_jsx_runtime4.jsx)("span",{className:"matrx-alchemy-prep-totals","aria-live":"polite",children:shown?(0,import_jsx_runtime4.jsxs)(import_jsx_runtime4.Fragment,{children:[(0,import_format3.formatCount)(chars)," chars \xB7 ",(0,import_format3.formatCount)(bytes)," bytes \xB7 \u2248",(0,import_format3.formatCount)(Math.ceil(chars/4))," tokens ",(0,import_jsx_runtime4.jsx)("small",{children:"(estimate)"})]}):state.buildError?"Nothing to copy":"Preparing\u2026"}),meta.length?(0,import_jsx_runtime4.jsx)("span",{className:"matrx-alchemy-prep-meta",children:meta.map(([key,value])=>`${key.replace(/_/g," ")} ${String(value)}`).join(" \xB7 ")}):null]}),structure=hasStructure?(0,import_jsx_runtime4.jsxs)("section",{className:"matrx-alchemy-prep-pane matrx-alchemy-prep-structure","aria-label":"Structure",children:[(0,import_jsx_runtime4.jsxs)("div",{className:"matrx-alchemy-prep-pane-head",children:[(0,import_jsx_runtime4.jsx)("h3",{children:"Structure"}),snapshotSections.length>1||(groomer?.length??0)>1?(0,import_jsx_runtime4.jsx)("button",{type:"button",className:"matrx-alchemy-prep-chip","aria-pressed":biggestFirst,onClick:()=>setBiggestFirst(!biggestFirst),children:"Biggest first"}):null]}),editHeld?(0,import_jsx_runtime4.jsx)("p",{className:"matrx-alchemy-prep-held",children:"Editing \u2014 rebuild from source to change the structure."}):null,focusResult.note?(0,import_jsx_runtime4.jsx)("p",{className:"matrx-alchemy-prep-hint",role:"status",children:focusResult.note}):null,groomer&&orderedGroomer?(0,import_jsx_runtime4.jsxs)("div",{className:"matrx-alchemy-prep-group",children:[(0,import_jsx_runtime4.jsxs)("div",{className:"matrx-alchemy-prep-lever-row",children:[(0,import_jsx_runtime4.jsx)("span",{className:"matrx-alchemy-prep-lever-label",children:"Sections"}),(0,import_jsx_runtime4.jsx)("span",{className:"matrx-alchemy-prep-hint",children:activePreset?`${activePreset[0].toUpperCase()}${activePreset.slice(1)}`:"Custom"})]}),(0,import_jsx_runtime4.jsx)(Segmented,{label:"Section preset",value:activePreset??"custom",choices:[{value:"everything",label:"Everything"},{value:"balanced",label:"Balanced"},{value:"minimal",label:"Minimal"},...activePreset?[]:[{value:"custom",label:"Custom"}]],onChange:value=>{if(value==="custom")return;let levels=applyGroomerPreset(value,groomer);changeLevers({...leverValues,...Object.fromEntries(Object.entries(levels).map(([id,level])=>[sectionLeverKey(id),level]))})}}),orderedGroomer.map(section=>(0,import_jsx_runtime4.jsx)(GroomerSection,{section,level:leverValues[sectionLeverKey(section.id)]??"full",size:state.leverSizes?.[section.id]??0,whole:groomerWhole,onChange:level=>setLever(sectionLeverKey(section.id),level)},section.id))]}):null,jsonRoot!==void 0?(0,import_jsx_runtime4.jsxs)("div",{className:"matrx-alchemy-prep-group",children:[(0,import_jsx_runtime4.jsx)("input",{className:"matrx-alchemy-prep-search",type:"search","aria-label":"Find in data",placeholder:"Find a key or value",value:treeQuery,onChange:e=>setTreeQuery(e.target.value)}),treeQuery.trim()?(0,import_jsx_runtime4.jsxs)("small",{className:"matrx-alchemy-prep-hint",role:"status",children:[jsonItems.length>=500?"500+":(0,import_format3.formatCount)(jsonItems.length)," ",jsonItems.length===1?"node matches":"nodes match"," \xB7 ",(0,import_format3.formatCount)(matches.total)," in the preview"]}):null,(0,import_jsx_runtime4.jsx)(StructureTreeList,{label:"Data",items:jsonItems,whole:jsonWhole,focusKey:focus?.key??null,handlers:jsonHandlers,maxHeight:"calc(92dvh - 16rem)"})]}):null,snapshotSections.length?(0,import_jsx_runtime4.jsxs)("fieldset",{className:"matrx-alchemy-prep-group","aria-label":"Included sections",children:[(0,import_jsx_runtime4.jsxs)("legend",{className:"matrx-alchemy-prep-legend",children:[controls.sections.length.toLocaleString()," of ",snapshotSections.length.toLocaleString()," ",countNoun(state.snapshot.coverage.unit??"section",snapshotSections.length)," included"]}),snapshotSections.length>6?(0,import_jsx_runtime4.jsx)("input",{className:"matrx-alchemy-prep-search",type:"search","aria-label":`Find a ${state.snapshot.coverage.unit??"section"}`,placeholder:"Find by name or text",value:treeQuery,onChange:e=>setTreeQuery(e.target.value)}):null,sectionQuery?(0,import_jsx_runtime4.jsxs)("small",{className:"matrx-alchemy-prep-hint",role:"status",children:[(0,import_format3.formatCount)(sectionItems.length)," ",sectionItems.length===1?"matches":"match"," \xB7 ",(0,import_format3.formatCount)(matches.total)," in the preview"]}):null,(0,import_jsx_runtime4.jsx)(StructureTreeList,{label:"Sections",items:sectionItems,whole:sectionWhole,focusKey:focus?.key??null,handlers:sectionHandlers,maxHeight:"calc(92dvh - 16rem)"})]}):null,rows?(0,import_jsx_runtime4.jsx)(RowsStructure,{rows,controls,change:changeControls,draft:state.draft,focusKey:focus?.key??null,matchesInPreview:matches.total,onFocus:(kind,id)=>setFocus({kind,id,key:`${kind}:${id}`}),onCopyRow:text=>copyText(text,"Row")}):null]}):null,previewPane=(0,import_jsx_runtime4.jsxs)("section",{className:"matrx-alchemy-prep-pane matrx-alchemy-prep-center","aria-label":"Preview",children:[(0,import_jsx_runtime4.jsxs)("div",{className:"matrx-alchemy-prep-pane-head",children:[(0,import_jsx_runtime4.jsx)("h3",{children:editing?"Editing":showRemoved?"Removed compared with Full":envelopeOn&&envelopeOffered?"Preview \u2014 for AI":"Preview"}),searchQuery.trim()&&shown&&!showRemoved?(0,import_jsx_runtime4.jsxs)("span",{className:"matrx-alchemy-prep-hint",role:"status","aria-label":"Matches in the preview",children:[matches.total.toLocaleString()," ",matches.total===1?"match":"matches"]}):null,hasStructure&&!editing&&!state.buildError?(0,import_jsx_runtime4.jsx)("button",{type:"button",className:"matrx-alchemy-prep-chip","aria-pressed":showRemoved,onClick:()=>setShowRemoved(!showRemoved),children:showRemoved?"Back to preview":"Show what was removed"}):null,!state.buildError&&!showRemoved&&(formatArtifact||editing)?editing?(0,import_jsx_runtime4.jsx)(import_design_system3.Button,{type:"button",size:"sm",variant:"outline",className:"matrx-alchemy-workspace-secondary",onClick:()=>setEditing(!1),children:"Done"}):(0,import_jsx_runtime4.jsx)(import_design_system3.Button,{type:"button",size:"sm",variant:"outline",className:"matrx-alchemy-workspace-secondary",onClick:startEditing,children:"Edit"}):null]}),editHeld&&!editing&&!pending?(0,import_jsx_runtime4.jsxs)("div",{className:"matrx-alchemy-prep-held",role:"status",children:[(0,import_jsx_runtime4.jsx)("span",{children:"Editing \u2014 rebuild from source to change the structure."}),(0,import_jsx_runtime4.jsx)(import_design_system3.Button,{type:"button",size:"sm",variant:"outline",className:"matrx-alchemy-workspace-secondary",onClick:rebuildFromSource,children:"Rebuild from source"})]}):null,pending?(0,import_jsx_runtime4.jsxs)("div",{className:"matrx-alchemy-decision",role:"alert",children:[(0,import_jsx_runtime4.jsx)("p",{children:"This control would replace your manual edit."}),(0,import_jsx_runtime4.jsx)(import_design_system3.Button,{className:"matrx-alchemy-workspace-secondary",type:"button",variant:"outline",onClick:()=>setPending(null),children:"Keep edited draft"}),(0,import_jsx_runtime4.jsx)(import_design_system3.Button,{className:"matrx-alchemy-workspace-primary",type:"button",onClick:applyPending,children:"Rebuild from source"})]}):null,state.buildError?(0,import_jsx_runtime4.jsxs)("div",{className:"matrx-alchemy-preview matrx-alchemy-prep-preview matrx-alchemy-prep-failed",role:"alert","aria-label":"Prepared output",children:[(0,import_jsx_runtime4.jsx)("p",{children:(0,import_jsx_runtime4.jsx)("strong",{children:"This source could not be prepared."})}),(0,import_jsx_runtime4.jsx)("p",{children:state.buildError}),(0,import_jsx_runtime4.jsx)("p",{className:"matrx-alchemy-prep-hint",children:"Change an option to try again; nothing was copied."})]}):editing?(0,import_jsx_runtime4.jsxs)(import_jsx_runtime4.Fragment,{children:[envelopeOn&&envelopeOffered?(0,import_jsx_runtime4.jsxs)("p",{className:"matrx-alchemy-prep-hint",children:["Copy wraps this text in the AI envelope",sealedInstructions.trim()?" with your instructions first":"","."]}):null,(0,import_jsx_runtime4.jsx)("textarea",{className:"matrx-alchemy-preview matrx-alchemy-prep-editor","aria-label":"Edit prepared output","aria-invalid":bufferError?!0:void 0,"aria-describedby":bufferError?"alchemy-buffer-error":void 0,value:buffer,onChange:e=>editBuffer(e.target.value),autoFocus:!0})]}):showRemoved?removedView===null?(0,import_jsx_runtime4.jsx)("p",{className:"matrx-alchemy-prep-hint",role:"status",children:"Building Full to compare\u2026"}):"error"in removedView?(0,import_jsx_runtime4.jsx)("p",{className:"matrx-alchemy-prep-hint",role:"status",children:removedView.error}):(0,import_jsx_runtime4.jsxs)(import_jsx_runtime4.Fragment,{children:[(0,import_jsx_runtime4.jsxs)("p",{className:"matrx-alchemy-prep-hint",role:"status",children:[removedView.summary,". Full, before your structure choices \u2014 this is not what you copy."]}),(0,import_jsx_runtime4.jsx)(PreviewText,{text:removedView.text,marks:removedView.marks,label:"Removed compared with Full"})]}):shown?shown.html!==void 0&&!(envelopeOn&&envelopeOffered)?(0,import_jsx_runtime4.jsx)(PreviewHtml,{html:shown.html}):(0,import_jsx_runtime4.jsx)(PreviewText,{text:shownText,marks:previewMarks}):formatError?null:(0,import_jsx_runtime4.jsx)("p",{className:"matrx-alchemy-prep-hint",role:"status",children:"Preparing preview\u2026"}),bufferError?(0,import_jsx_runtime4.jsx)("p",{id:"alchemy-buffer-error",role:"alert",className:"matrx-alchemy-error",children:bufferError}):null,formatError?(0,import_jsx_runtime4.jsx)("p",{role:"alert",className:"matrx-alchemy-error",children:formatError}):null,sealed.error?(0,import_jsx_runtime4.jsx)("p",{role:"alert",className:"matrx-alchemy-error",children:sealed.error}):null,bufferError?(0,import_jsx_runtime4.jsx)(import_design_system3.Button,{className:"matrx-alchemy-workspace-secondary",type:"button",variant:"outline",disabled:busy!==null,onClick:()=>{let fallback=(0,import_operate4.editDraft)(state.draft,{kind:"text",text:buffer});setBufferError(null),onChange({...state,draft:fallback,error:void 0}),setFormat("plain")},children:"Use invalid JSON as plain text"}):null,(0,import_jsx_runtime4.jsxs)("div",{className:"matrx-alchemy-coverage",children:[(0,import_jsx_runtime4.jsxs)("span",{children:[snapshotSections.length?`${(0,import_format3.formatCount)(controls.sections.length)} of ${(0,import_format3.formatCount)(snapshotSections.length)} ${countNoun(state.snapshot.coverage.unit??"section",snapshotSections.length)} included`:`${(0,import_format3.formatCount)(state.snapshot.coverage.included)} included${state.snapshot.coverage.total==null?"":` of ${(0,import_format3.formatCount)(state.snapshot.coverage.total)}`}`," \xB7 ",state.snapshot.coverage.status]}),state.snapshot.coverage.reason?(0,import_jsx_runtime4.jsx)("span",{children:state.snapshot.coverage.reason}):null,displayedOmissions.length?(0,import_jsx_runtime4.jsxs)("details",{children:[(0,import_jsx_runtime4.jsxs)("summary",{children:[displayedOmissions.length," omissions or adjustments"]}),(0,import_jsx_runtime4.jsx)("ul",{children:displayedOmissions.map((o,i)=>(0,import_jsx_runtime4.jsxs)("li",{children:[o.label?`${o.label}: ${o.reason}`:`${o.path||"/"}: ${o.reason}`,o.count==null?"":` (${o.count})`]},`${o.path}-${o.reason}-${i}`))})]}):null]})]}),settings=(0,import_jsx_runtime4.jsxs)("section",{className:"matrx-alchemy-prep-pane matrx-alchemy-prep-settings","aria-label":"Settings",children:[(0,import_jsx_runtime4.jsx)("div",{className:"matrx-alchemy-prep-pane-head",children:(0,import_jsx_runtime4.jsx)("h3",{children:"Settings"})}),options?.length?(0,import_jsx_runtime4.jsxs)("div",{className:"matrx-alchemy-prep-group",role:"group","aria-label":"Source options",children:[(0,import_jsx_runtime4.jsx)("h4",{children:"Source options"}),options.map(option=>(0,import_jsx_runtime4.jsx)(LeverControl,{option,value:leverValues[option.key]??option.default,onChange:value=>setLever(option.key,value,option.kind==="number")},option.key))]}):null,controls.preset==="custom"?(0,import_jsx_runtime4.jsxs)("fieldset",{className:"matrx-alchemy-prep-group",children:[(0,import_jsx_runtime4.jsx)("legend",{className:"matrx-alchemy-prep-legend",children:state.draft.payload.kind==="json"||state.draft.payload.kind==="registered"?"JSON limits":"Content limits"}),[["maxDepth","Maximum depth"],["maxStringChars",state.draft.payload.kind==="rows"?"Maximum characters per cell":"Maximum string characters"],["maxArrayItems","Maximum array items"]].filter(([key])=>key==="maxStringChars"||state.draft.payload.kind==="json"||state.draft.payload.kind==="registered").map(([key,text])=>(0,import_jsx_runtime4.jsxs)("label",{className:"matrx-alchemy-prep-lever-row",children:[(0,import_jsx_runtime4.jsx)("span",{children:text}),(0,import_jsx_runtime4.jsx)("input",{type:"number",min:"0",value:controls[key]??"",onChange:e=>changeControls({...controls,[key]:Number.isNaN(e.target.valueAsNumber)?null:e.target.valueAsNumber})})]},key))]}):null,envelopeOn&&envelopeOffered?(0,import_jsx_runtime4.jsxs)("label",{className:"matrx-alchemy-prep-group",children:[(0,import_jsx_runtime4.jsx)("h4",{children:"Instructions for the model"}),(0,import_jsx_runtime4.jsx)("textarea",{"aria-label":"Instructions for the model",value:instructions,onChange:e=>setInstructions(e.target.value),placeholder:"e.g. Review this conversation for tool errors"}),(0,import_jsx_runtime4.jsx)("small",{className:"matrx-alchemy-prep-hint",children:"Sealed first in what you copy, and counted in the total."})]}):null,ai?(0,import_jsx_runtime4.jsxs)("div",{className:"matrx-alchemy-prep-group",children:[(0,import_jsx_runtime4.jsx)("h4",{children:"Prepare with AI"}),(0,import_jsx_runtime4.jsxs)("label",{className:"matrx-alchemy-prep-field",children:["Start with",(0,import_jsx_runtime4.jsxs)("select",{"aria-label":"AI preparation recipe",defaultValue:"",onChange:event=>{event.target.value&&setAiInstruction(event.target.value)},children:[(0,import_jsx_runtime4.jsx)("option",{value:"",children:"Choose an instruction"}),(0,import_jsx_runtime4.jsx)("option",{value:"Summarize this content concisely. Preserve important facts, names, decisions, and source references.",children:"Summarize"}),(0,import_jsx_runtime4.jsx)("option",{value:"Extract decisions, action items, owners, and due dates. Mark missing details as unspecified.",children:"Extract action items"}),(0,import_jsx_runtime4.jsx)("option",{value:"Prepare a complete handoff for another assistant. Include the objective, relevant facts, constraints, decisions, and unresolved questions.",children:"Assistant handoff"}),(0,import_jsx_runtime4.jsx)("option",{value:"Condense this content by removing repetition and formatting noise. Preserve every unique fact and all identifiers.",children:"Condense without losing facts"}),(0,import_jsx_runtime4.jsx)("option",{value:"Turn this content into a clear structured outline. Keep the original meaning and explicitly flag uncertainty.",children:"Create an outline"}),(0,import_jsx_runtime4.jsx)("option",{value:"Analyze this data. Identify patterns, anomalies, and useful comparisons. Distinguish observations from inferences.",children:"Analyze the data"})]})]}),(0,import_jsx_runtime4.jsxs)("label",{className:"matrx-alchemy-prep-field",children:["AI instruction",(0,import_jsx_runtime4.jsx)("textarea",{value:aiInstruction,onChange:e=>setAiInstruction(e.target.value),placeholder:"Tell AI how to prepare this content"})]}),(0,import_jsx_runtime4.jsx)(import_design_system3.Button,{className:"matrx-alchemy-workspace-secondary",type:"button",variant:"outline",disabled:!aiSession.current||!aiInstruction.trim()||busy!==null||!aiSession.current.supports(state.snapshot),onClick:()=>{runAi(!1)},children:"Generate preview"}),busy==="ai"?(0,import_jsx_runtime4.jsx)(import_design_system3.Button,{className:"matrx-alchemy-workspace-secondary",type:"button",variant:"outline",onClick:()=>{cancelAi()},children:aiSession.current?.cancel?"Cancel AI":"Stop waiting"}):null,aiFailed&&aiSession.current?.recover&&busy!=="ai"?(0,import_jsx_runtime4.jsx)(import_design_system3.Button,{className:"matrx-alchemy-workspace-secondary",type:"button",variant:"outline",onClick:()=>{runAi(!0)},children:"Retry or rejoin AI run"}):null,(0,import_jsx_runtime4.jsx)("p",{className:"matrx-alchemy-meta",children:"AI updates the preview; copy it when you are ready. Closing this window lets the AI run continue."})]}):null,!options?.length&&controls.preset!=="custom"&&!(envelopeOn&&envelopeOffered)&&!ai&&!eligibleActions.length?(0,import_jsx_runtime4.jsx)("p",{className:"matrx-alchemy-prep-hint",children:envelopeOffered?"Choose For AI to seal instructions for the model with what you copy.":"This format has no further settings."}):null,busy==="capture"?(0,import_jsx_runtime4.jsx)(import_design_system3.Button,{className:"matrx-alchemy-workspace-secondary",type:"button",variant:"outline",onClick:()=>{activeCapture.current?.abort(),activeCapture.current=null,setBusy(null)},children:"Stop loading rows"}):null,state.error?(0,import_jsx_runtime4.jsx)("p",{role:"alert",className:"matrx-alchemy-error",children:state.error}):null,eligibleActions.length?(0,import_jsx_runtime4.jsxs)("details",{className:"matrx-alchemy-prep-group matrx-alchemy-destinations",children:[(0,import_jsx_runtime4.jsxs)("summary",{children:["Use prepared content \xB7 ",eligibleActions.length," ",eligibleActions.length===1?"destination":"destinations"]}),(0,import_jsx_runtime4.jsx)("div",{className:"matrx-alchemy-destination-grid",children:eligibleActions.map(action=>(0,import_jsx_runtime4.jsx)("button",{type:"button",className:"matrx-alchemy-palette-row",disabled:busy!==null||!!(bufferError||formatError)||!shown,onClick:()=>{deliverAction(action)},children:(0,import_jsx_runtime4.jsx)(DestinationPresentation,{action})},action.id))})]}):null]}),footer=(0,import_jsx_runtime4.jsxs)("div",{className:"matrx-alchemy-prep-footer",children:[state.sourceStale?(0,import_jsx_runtime4.jsx)("p",{role:"alert",className:"matrx-alchemy-decision",children:"The source changed since this draft. Use Refresh source to review the latest data."}):null,state.pending?(0,import_jsx_runtime4.jsxs)("div",{className:"matrx-alchemy-decision",role:"alert",children:[(0,import_jsx_runtime4.jsx)("p",{children:"A fresh source snapshot is ready."}),state.pending.scope!==state.scope?(0,import_jsx_runtime4.jsxs)("p",{children:["Switch from ",scopeLabels?.[state.scope]??SCOPE_LABEL[state.scope]," to ",scopeLabels?.[state.pending.scope]??SCOPE_LABEL[state.pending.scope]," by regenerating. Your current draft is retained until you choose."]}):null,(0,import_jsx_runtime4.jsx)(import_design_system3.Button,{className:"matrx-alchemy-workspace-secondary",type:"button",variant:"outline",onClick:()=>resolveCapture("keep"),children:"Keep current snapshot and draft"}),(0,import_jsx_runtime4.jsx)(import_design_system3.Button,{className:"matrx-alchemy-workspace-primary",type:"button",onClick:()=>resolveCapture("regenerate"),children:"Regenerate from fresh source"})]}):null,(0,import_jsx_runtime4.jsxs)("div",{className:"matrx-alchemy-prep-actions",children:[deliveryNotice?(0,import_jsx_runtime4.jsx)("p",{role:"status",className:"matrx-alchemy-meta",children:deliveryNotice}):null,showRemoved?(0,import_jsx_runtime4.jsx)(import_design_system3.Button,{type:"button",size:"sm",className:"matrx-alchemy-workspace-primary",onClick:()=>setShowRemoved(!1),children:"Back to preview to copy"}):null,(0,import_jsx_runtime4.jsx)(import_design_system3.Button,{type:"button",size:"sm",variant:"outline",className:"matrx-alchemy-workspace-secondary",disabled:!state.draft.history?.length&&!controlsHistory.length||busy!==null,onClick:()=>{if(setBufferError(null),controlsHistory.length){let next=controlsHistory[controlsHistory.length-1];setControls(next),setControlsHistory(history=>history.slice(0,-1)),onChange({...state,draft:rebuild(state,next),error:void 0})}else onChange({...state,draft:(0,import_operate4.undoDraft)(state.draft),error:void 0})},children:"Undo"}),(0,import_jsx_runtime4.jsx)(import_design_system3.Button,{type:"button",size:"sm",variant:"outline",className:"matrx-alchemy-workspace-secondary",disabled:busy!==null,onClick:()=>{let next=initialControls(state);setControls(next),setControlsHistory([]),setPending(null),setBufferError(null),setEditing(!1),state.levers?applyLevers(state.levers.initial,state,next):onChange({...state,draft:rebuild(state,next),error:void 0})},children:"Reset"}),state.levers?null:(0,import_jsx_runtime4.jsx)(import_design_system3.Button,{type:"button",size:"sm",variant:"outline",className:"matrx-alchemy-workspace-secondary",disabled:busy!==null,onClick:()=>{requestCapture(state.scope)},children:"Refresh source"}),frame==="dialog"?(0,import_jsx_runtime4.jsx)(import_design_system3.Button,{type:"button",variant:"outline",className:"matrx-alchemy-workspace-secondary",onClick:close,children:"Close"}):null,copyVisible?(0,import_jsx_runtime4.jsx)(import_design_system3.Button,{type:"button",variant:"outline",className:"matrx-alchemy-workspace-secondary","aria-label":"Download prepared output",disabled:busy!==null||!shown,onClick:()=>{deliver(!0)},children:"Download"}):null,copyVisible?(0,import_jsx_runtime4.jsx)(import_design_system3.Button,{type:"button",className:"matrx-alchemy-workspace-primary","aria-label":"Copy prepared output",disabled:busy!==null||!shown,onClick:()=>{deliver(!1)},children:shown?envelopeOn&&envelopeOffered?"Copy for AI":"Copy":"Preparing\u2026"}):null]})]}),layout=narrow?(0,import_jsx_runtime4.jsxs)(import_jsx_runtime4.Fragment,{children:[(0,import_jsx_runtime4.jsx)("div",{className:"matrx-alchemy-prep-tabs",role:"tablist","aria-label":"Workspace sections",children:[...hasStructure?[["structure","Structure"]]:[],["preview","Preview"],["settings","Settings"]].map(([id,label])=>(0,import_jsx_runtime4.jsx)("button",{type:"button",role:"tab","aria-selected":(hasStructure||tab!=="structure"?tab:"preview")===id,onClick:()=>chooseTab(id),children:label},id))}),(0,import_jsx_runtime4.jsx)("div",{className:"matrx-alchemy-prep-tabpanel",role:"tabpanel",children:(hasStructure||tab!=="structure"?tab:"preview")==="structure"?structure:tab==="settings"?settings:previewPane})]}):(0,import_jsx_runtime4.jsxs)("div",{className:"matrx-alchemy-prep-panes",style:{gridTemplateColumns:hasStructure?`${panes.left}px 8px minmax(0, 1fr) 8px ${panes.right}px`:`minmax(0, 1fr) 8px ${panes.right}px`},children:[structure,hasStructure?divider("left"):null,previewPane,divider("right"),settings]}),body=(0,import_jsx_runtime4.jsxs)("div",{ref:root,className:(0,import_design_system4.cn)("matrx-alchemy-prep",narrow&&"matrx-alchemy-prep-narrow"),"data-frame":frame,"aria-busy":busy!==null,children:[frame==="host"&&state.snapshot.unsavedChanges?(0,import_jsx_runtime4.jsx)("p",{className:"matrx-alchemy-prep-hint",children:"Includes your unsaved changes."}):null,topBar,layout,footer]});return frame==="host"?open&&windowNode?(0,import_react_dom.createPortal)(body,windowNode):null:(0,import_jsx_runtime4.jsx)(import_design_system5.Dialog,{open,onOpenChange:next=>{next||close()},children:(0,import_jsx_runtime4.jsxs)(import_design_system5.DialogContent,{onCloseAutoFocus:event=>{event.preventDefault(),handingOff.current||restoreFocus()},className:"matrx-alchemy-workspace matrx-alchemy-prep-dialog","aria-busy":busy!==null,children:[(0,import_jsx_runtime4.jsxs)(import_design_system5.DialogHeader,{children:[(0,import_jsx_runtime4.jsx)(import_design_system5.DialogTitle,{children:title}),(0,import_jsx_runtime4.jsxs)(import_design_system5.DialogDescription,{children:[state.snapshot.unsavedChanges?"Includes your unsaved changes. ":"","Review and edit this copy. Your original stays unchanged."]})]}),body]})})}function RowsStructure({rows,controls,change,draft,focusKey,matchesInPreview,onFocus,onCopyRow}){let[columnSearch,setColumnSearch]=React4.useState(""),[menuRow,setMenuRow]=React4.useState(null),shown=React4.useMemo(()=>new Set(controls.visibleColumns),[controls.visibleColumns]),filterCount=Object.values(controls.filters).filter(Boolean).length+controls.layeredFilters.length,sizes=React4.useMemo(()=>Object.fromEntries(rows.columns.map(column=>[column.id,columnSize(rows,column.id)])),[rows]),whole=Object.values(sizes).reduce((sum,size)=>sum+size,0),shownColumns=rows.columns.filter(column=>!columnSearch.trim()||column.label.toLowerCase().includes(columnSearch.trim().toLowerCase())),visibleDefs=rows.columns.filter(column=>shown.has(column.id)&&exportableColumn(column)),matched=draftLayout(draft).matchedRows??rows.rows.map((_,index)=>index),left=React4.useMemo(()=>new Set(controls.excludedRows),[controls.excludedRows]),included=matched.filter(index=>!left.has(index)).length,rowText=React4.useCallback(index=>visibleDefs.map(column=>cellText((0,import_operate4.readTransferCell)(rows.rows[index],column))),[rows,visibleDefs]),rowItems=React4.useMemo(()=>matched.map(index=>{let cells=rowText(index),summary=cells.slice(0,2).filter(Boolean).join(" \xB7 ");return{key:`row:${index}`,depth:0,label:`Row ${index+1}${summary?` \u2014 ${summary}`:""}`,chars:cells.reduce((sum,cell)=>sum+cell.length,0),state:left.has(index)?"off":"on",rowIndex:index}}),[left,matched,rowText]),rowWhole=rowItems.reduce((sum,item)=>sum+(item.chars??0),0),setRowIncluded=(index,include)=>change({...controls,excludedRows:include?controls.excludedRows.filter(value=>value!==index):[...controls.excludedRows,index]}),rowHandlers={toggle:item=>setRowIncluded(item.rowIndex,left.has(item.rowIndex)),focus:item=>onFocus("row",String(item.rowIndex))},everyRow=included===matched.length?"on":included===0?"off":"mixed",toggleEveryRow=()=>{let inView=new Set(matched);change({...controls,excludedRows:everyRow==="off"?controls.excludedRows.filter(index=>!inView.has(index)):[...new Set([...controls.excludedRows,...matched])]})},setColumnShown=(column,visible)=>{if(visible){change({...controls,visibleColumns:[...controls.visibleColumns,column.id]});return}let{[column.id]:_filter,...filters}=controls.filters,{[column.id]:_limit,...columnLimits}=controls.columnLimits;change({...controls,visibleColumns:controls.visibleColumns.filter(id=>id!==column.id),filters,columnLimits,layeredFilters:controls.layeredFilters.filter(rule=>rule.field!==column.id),...controls.sort===column.id?{sort:"",direction:"asc"}:{}})},layeredFields=visibleDefs.map(column=>column.schema?.dataType==="number"||column.schema?.dataType==="integer"?{id:column.id,label:column.label,kind:"number"}:{id:column.id,label:column.label,kind:"text"}),rowCopy=index=>visibleDefs.map(column=>`${column.label}: ${cellText((0,import_operate4.readTransferCell)(rows.rows[index],column))}`).join(`
|