@notis_ai/cli 0.2.20 → 0.2.22

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.
@@ -1,5 +1,5 @@
1
1
  // Generated by packages/cli/scripts/build-space-sdk.js for Node tests only. A Space view always uses the Notis host SDK.
2
- import{DEFAULT_KEYMAP,Dialog,ESCAPE_PRIORITY,HELP_WORDS,Icon,KEY_JOIN_WORDS,KeyboardEngineCore,MultiSelectDragOverlay,NNBSP,NotisKeyClash,ROOT_OWNER,RenderChartData,SEQUENCE_TIMEOUT_MS,SHELL_WORDS,STANDARD_ACTIONS,ShortcutRegistry,__export,actionErrorReason,canonicalKey,closestComposed,containsComposed,cx,deepActiveElement,detectLocale,detectPlatform,eventTarget,eventWithin,fillWords,flag,formatKey,formatKeyParts,formatKeySpoken,getSharedInstance,hasIcon,isSequenceSpec,isStandardActionId,isValidKeySpec,isVisibleComposed,isWords,keyFingerprints,keyList,keysOff,matchChord,matchKey,modalLayerOf,openModalLayers,pick,renderIcon,resolveActionRef,revealInline,safeWhen,selectedCount,selfClashes,toAriaKeyShortcuts,toWords,useEngineCore,useEscapeBlocker,useEscapeLayer,useHelpSheet,useIsoLayoutEffect,useLabelValue,useLatest,useMarqueeSelection,useNativeMutation,useNotisRuntime,useRegistryVersion,useShortcut,useShortcutOwner,useShortcutScope,useShortcuts2 as useShortcuts,useShown,useStableId,useT,useToolkitLocale,useToolkitPlatform,useToolkitSettings,useTopBarSearch,useTopBarTitleLeaf,w,writeViewParams}from"./chunk-ZSN57ATH.js";import{createContext as createContext2,useCallback,useContext as useContext3,useEffect as useEffect3,useId,useLayoutEffect as useLayoutEffect2,useMemo,useRef as useRef2,useState}from"react";import{useEffect,useLayoutEffect}from"react";import{Fragment,jsx}from"react/jsx-runtime";var useIsoLayoutEffect2=typeof window>"u"?useEffect:useLayoutEffect;function KeyboardEngine(props){let shared=getSharedInstance(),core=props.engine??shared.core,{host,locale,platform,strict,onClash}=props;core.configure({host,locale,platform,strict,onClash},{silent:!0}),useIsoLayoutEffect2(()=>{core.registry.notify()},[core,host,locale,platform,strict]),useIsoLayoutEffect2(()=>(core.mounted+=1,core.registry.notify(),()=>{core.mounted-=1,core.registry.notify()}),[core]);let doc=props.document??(typeof document<"u"?document:void 0);useEffect(()=>doc?core.attach(doc):void 0,[core,doc]);let content=props.children??null;return props.engine?jsx(shared.EngineContext.Provider,{value:props.engine,children:content}):jsx(Fragment,{children:content})}function ShortcutScope({owner,available,kind,children}){let{OwnerContext}=getSharedInstance();return useShortcutScope(owner,{available,kind}),jsx(OwnerContext.Provider,{value:owner,children})}import{useEffect as useEffect2,useRef}from"react";import{createPortal}from"react-dom";import{Fragment as Fragment2,useContext}from"react";import{jsx as jsx2,jsxs}from"react/jsx-runtime";function Keycap({keys,on,className}){let locale=useToolkitLocale(),platform=useToolkitPlatform(),inherited=useContext(getSharedInstance().KeycapContext),surface=on??inherited??"surface",options={platform,locale},alternatives=formatKeyParts(keys,options);if(!alternatives.length)return null;let then=KEY_JOIN_WORDS.then[locale],or=KEY_JOIN_WORDS.or[locale];return jsxs("span",{className:className?`nui-kbd-group ${className}`:"nui-kbd-group","data-on":surface,children:[jsx2("span",{className:"nui-kbd-caps","aria-hidden":"true",children:alternatives.map((caps,i)=>jsxs(Fragment2,{children:[i>0&&jsx2("span",{className:"nui-kbd-sep",children:or}),caps.map((cap,j)=>jsxs(Fragment2,{children:[j>0&&jsx2("span",{className:"nui-kbd-sep",children:then}),jsx2("kbd",{className:"nui-kbd",children:cap})]},j))]},i))}),jsx2("span",{className:"nui-sr-only",children:formatKeySpoken(keys,options)})]})}function KeycapSurface({on,children}){let{KeycapContext}=getSharedInstance();return jsx2(KeycapContext.Provider,{value:on,children})}function useKeyLabel(keys){let locale=useToolkitLocale(),platform=useToolkitPlatform();return formatKey(keys,{platform,locale})}import{createContext,useContext as useContext2}from"react";import{jsx as jsx3}from"react/jsx-runtime";var LAYER_ROOT_ATTRIBUTE="data-notis-layer-root",LayerRootContext=createContext(null);function LayerRootProvider({root,children}){return jsx3(LayerRootContext.Provider,{value:root,children})}function findLayerRoot(from){if(typeof document>"u")return null;let dialog=(from?.nodeType===1?from:from?.parentElement)?.closest("dialog[open]");if(dialog){let existing=Array.from(dialog.children).find(child=>child.hasAttribute(LAYER_ROOT_ATTRIBUTE));if(existing)return existing;let created=dialog.ownerDocument.createElement("div");return created.setAttribute(LAYER_ROOT_ATTRIBUTE,""),created.className="nui-layer",dialog.appendChild(created),created}let root=from&&typeof from.getRootNode=="function"?from.getRootNode():document;if(typeof ShadowRoot<"u"&&root instanceof ShadowRoot){let existing=Array.from(root.querySelectorAll(`[${LAYER_ROOT_ATTRIBUTE}]`)).find(layer=>!layer.closest("dialog"));if(existing)return existing;let created=root.ownerDocument.createElement("div");return created.setAttribute(LAYER_ROOT_ATTRIBUTE,""),created.className="nui-layer",(root.querySelector("[data-notis-app-root]")??root).appendChild(created),created}return(root instanceof Document?root:document).body}function useLayerRoot(anchor){let pinned=useContext2(LayerRootContext);return pinned||(anchor?findLayerRoot(anchor):typeof document>"u"?null:document.body)}function usePinnedLayerRoot(){return useContext2(LayerRootContext)}import{jsx as jsx4,jsxs as jsxs2}from"react/jsx-runtime";var FOCUSABLE='button:not([disabled]), [href], input:not([disabled]), select:not([disabled]), textarea:not([disabled]), [tabindex]:not([tabindex="-1"])';function deepActiveElement2(doc){let active=doc.activeElement;for(;active?.shadowRoot?.activeElement;)active=active.shadowRoot.activeElement;return active}function HelpSheet({container}){let{isOpen}=useHelpSheet(),core=useEngineCore(),pinned=usePinnedLayerRoot();if(!isOpen)return null;let target=container??pinned??core.attachedDocument()?.body??null;return target?createPortal(jsx4(HelpSheetPanel,{}),target):null}function HelpSheetPanel(){let core=useEngineCore(),locale=useToolkitLocale(),{close}=useHelpSheet();useRegistryVersion();let panelRef=useRef(null);useEscapeLayer("help-sheet",()=>(close(),!0),{priority:ESCAPE_PRIORITY.help}),useEffect2(()=>core.register({id:"help.close",keys:"?",scope:"modal",label:HELP_WORDS.close,hidden:!0,run:()=>{core.closeHelp()}},ROOT_OWNER)??void 0,[core]),useEffect2(()=>{let panel=panelRef.current;if(!panel)return;let previous=deepActiveElement2(panel.ownerDocument);return panel.focus(),()=>{previous?.isConnected&&previous.focus()}},[]);let trapTab=event=>{if(event.key!=="Tab")return;let panel=panelRef.current;if(!panel)return;let items2=[...panel.querySelectorAll(FOCUSABLE)];if(!items2.length){event.preventDefault(),panel.focus();return}let first=items2[0],last=items2[items2.length-1],active=deepActiveElement2(panel.ownerDocument);event.shiftKey&&(active===first||active===panel)?(event.preventDefault(),last.focus()):!event.shiftKey&&active===last&&(event.preventDefault(),first.focus())},entries=core.registry.helpEntries(),groups=[{group:"space",title:HELP_WORDS.groupSpace[locale]},{group:"notis",title:HELP_WORDS.groupNotis[locale]}],titleId="nui-help-title";return jsxs2("div",{className:"nui-root nui-help","data-notis-escape-owned":"",lang:locale,children:[jsx4("div",{className:"nui-help-backdrop","aria-hidden":"true"}),jsxs2("div",{ref:panelRef,className:"nui-help-panel",role:"dialog","aria-modal":"true","aria-labelledby":titleId,tabIndex:-1,onKeyDown:trapTab,children:[jsxs2("div",{className:"nui-help-head",children:[jsx4("h2",{id:titleId,className:"nui-help-title",children:HELP_WORDS.title[locale]}),jsx4("button",{type:"button",className:"nui-icon-btn","aria-label":HELP_WORDS.close[locale],onClick:close,children:jsx4("svg",{className:"nui-icon",viewBox:"0 0 16 16","aria-hidden":"true",fill:"none",stroke:"currentColor",strokeWidth:"1.5",strokeLinecap:"round",children:jsx4("path",{d:"M4 4l8 8M12 4l-8 8"})})})]}),jsx4("div",{className:"nui-help-body",children:jsxs2(KeycapSurface,{on:"discreet",children:[entries.length===0&&jsx4("p",{className:"nui-help-empty",children:HELP_WORDS.empty[locale]}),groups.map(({group,title})=>{let rows=entries.filter(entry=>entry.group===group);return rows.length?jsxs2("section",{className:"nui-help-group","aria-label":title,children:[jsx4("h3",{className:"nui-help-group-title",children:title}),jsx4("ul",{className:"nui-help-list",children:rows.map(row=>jsxs2("li",{className:"nui-help-row","data-shortcut-id":row.id,children:[jsx4("span",{className:"nui-help-label",children:row.label[locale]}),jsx4(Keycap,{keys:row.keys})]},row.id))})]},group):null})]})})]})]})}function stepCursor(ids,cursor,delta,options={}){if(!ids.length)return null;let{wrap=!0,repeat=!1}=options,index=cursor==null?-1:ids.indexOf(cursor);if(index===-1)return delta>=0?ids[0]:ids[ids.length-1];let next=index+delta;return(next<0||next>=ids.length)&&(wrap&&!repeat?next=(next%ids.length+ids.length)%ids.length:next=Math.max(0,Math.min(ids.length-1,next))),ids[next]}var panelMath_exports={};__export(panelMath_exports,{CHAT_NARROWED_ATTRIBUTE:()=>CHAT_NARROWED_ATTRIBUTE,CHAT_PANEL_DEFAULT_WIDTH_PX:()=>CHAT_PANEL_DEFAULT_WIDTH_PX,CHAT_PANEL_DESKTOP_MEDIA_QUERY:()=>CHAT_PANEL_DESKTOP_MEDIA_QUERY,CHAT_PANEL_KEYBOARD_STEP_PX:()=>CHAT_PANEL_KEYBOARD_STEP_PX,CHAT_PANEL_MIN_CONTENT_WIDTH_PX:()=>CHAT_PANEL_MIN_CONTENT_WIDTH_PX,CHAT_PANEL_MIN_WIDTH_PX:()=>CHAT_PANEL_MIN_WIDTH_PX,CHAT_PANEL_OVERLAP_PROPERTY:()=>CHAT_PANEL_OVERLAP_PROPERTY,CHAT_PANEL_PAGE_HOVER_DELAY_MS:()=>CHAT_PANEL_PAGE_HOVER_DELAY_MS,CHAT_PANEL_PAGE_PEEK_PX:()=>CHAT_PANEL_PAGE_PEEK_PX,CHAT_PANEL_WIDTH_PROPERTY:()=>CHAT_PANEL_WIDTH_PROPERTY,CHAT_PANEL_WIDTH_STORAGE_KEY:()=>CHAT_PANEL_WIDTH_STORAGE_KEY,MANAGER_PHONE_LAYOUT_BELOW_PX:()=>MANAGER_PHONE_LAYOUT_BELOW_PX,PANELS_HOVER_DELAY_MS:()=>PANELS_HOVER_DELAY_MS,PANELS_KEYBOARD_STEP_PX:()=>PANELS_KEYBOARD_STEP_PX,PANELS_LIST_MIN_PX:()=>PANELS_LIST_MIN_PX,PANELS_READER_MIN_PX:()=>PANELS_READER_MIN_PX,PANELS_READER_PEEK_PX:()=>PANELS_READER_PEEK_PX,PANELS_READER_WANT_PX:()=>PANELS_READER_WANT_PX,PANELS_READER_WANT_WIDE_PX:()=>PANELS_READER_WANT_WIDE_PX,PANELS_READER_WIDE_FROM_PX:()=>PANELS_READER_WIDE_FROM_PX,chatPanelMaxWidth:()=>chatPanelMaxWidth,chatPanelOverlap:()=>chatPanelOverlap,chatPanelPageWidth:()=>chatPanelPageWidth,chatPanelPushLimit:()=>chatPanelPushLimit,clampChatPanelWidth:()=>clampChatPanelWidth,clampReaderWidth:()=>clampReaderWidth,overlap:()=>overlap,parseStoredChatPanelWidth:()=>parseStoredChatPanelWidth,parseStoredWidth:()=>parseStoredWidth,pushLimit:()=>pushLimit,readerMaxWidth:()=>readerMaxWidth,readerWantWidth:()=>readerWantWidth,splitBreakpoint:()=>splitBreakpoint,splitFits:()=>splitFits});var CHAT_PANEL_WIDTH_PROPERTY="--notis-chat-panel-width",CHAT_PANEL_OVERLAP_PROPERTY="--notis-chat-panel-overlap",CHAT_PANEL_WIDTH_STORAGE_KEY="notis:chat-panel-width",CHAT_PANEL_DEFAULT_WIDTH_PX=420,CHAT_PANEL_DESKTOP_MEDIA_QUERY="(min-width: 64rem)",MANAGER_PHONE_LAYOUT_BELOW_PX=576,CHAT_NARROWED_ATTRIBUTE="data-chat-narrowed",CHAT_PANEL_MIN_WIDTH_PX=360,CHAT_PANEL_MIN_CONTENT_WIDTH_PX=320,CHAT_PANEL_PAGE_PEEK_PX=80,CHAT_PANEL_KEYBOARD_STEP_PX=24,CHAT_PANEL_PAGE_HOVER_DELAY_MS=200,PANELS_LIST_MIN_PX=320,PANELS_READER_MIN_PX=360,PANELS_READER_PEEK_PX=80,PANELS_KEYBOARD_STEP_PX=24,PANELS_HOVER_DELAY_MS=200,PANELS_READER_WANT_PX=420,PANELS_READER_WANT_WIDE_PX=480,PANELS_READER_WIDE_FROM_PX=1280;function readerWantWidth(windowWidth2){return windowWidth2>=1280?480:420}function readerMaxWidth(container,keep=320,readerMin=360){return container===null?Number.POSITIVE_INFINITY:Math.max(readerMin,Math.round(container-keep))}function pushLimit(container,listMin=320,readerMin=360){return readerMaxWidth(container,listMin,readerMin)}function overlap(width,container,listMin=320){return container===null?0:Math.max(0,Math.round(width-(container-listMin)))}function splitFits(container,listMin=320,readerMin=360){return container===null?!0:container>=listMin+readerMin}function splitBreakpoint(listMin=320,readerMin=360){return listMin+readerMin}function clampReaderWidth(want,container,listMin=320,readerMin=360,peek=80){if(container===null)return Math.round(Math.max(readerMin,want));let pushed=Math.min(want,container-listMin);return Math.round(Math.max(0,Math.min(Math.max(pushed,readerMin),container-peek)))}function parseStoredWidth(raw){if(!raw)return null;let width=Number(raw);return Number.isFinite(width)&&width>0?width:null}function chatPanelMaxWidth(sharedWidth){return readerMaxWidth(sharedWidth,80,360)}function chatPanelPushLimit(sharedWidth){return pushLimit(sharedWidth,320,360)}function clampChatPanelWidth(width,sharedWidth){return Math.round(Math.min(chatPanelMaxWidth(sharedWidth),Math.max(360,width)))}function chatPanelPageWidth(chosenWidth,sharedWidth){let width=clampChatPanelWidth(chosenWidth,sharedWidth);return sharedWidth-width+chatPanelOverlap(width,sharedWidth)}function chatPanelOverlap(width,sharedWidth){return overlap(width,sharedWidth,320)}function parseStoredChatPanelWidth(raw){return parseStoredWidth(raw)}import{jsx as jsx5,jsxs as jsxs3}from"react/jsx-runtime";var PANELS_WORDS=Object.freeze({resizeReader:{en:"Resize the open item",fr:"Redimensionner l\u2019\xE9l\xE9ment ouvert"},resizeReaderHint:{en:"Drag to resize, double-click to reset",fr:"Fais glisser pour redimensionner, double-clique pour r\xE9initialiser"}}),STORAGE_PREFIX="notis:panels:",PanelsContext=createContext2(null);function usePanels(){return useContext3(PanelsContext)??OUTSIDE_PANELS}var OUTSIDE_PANELS=Object.freeze({mode:"split",readerWidth:readerWantWidth(0),setReaderWidth:()=>{},readerOpen:!1,settled:!0});function readStored(storageKey){if(!storageKey)return null;try{return parseStoredWidth(window.localStorage.getItem(STORAGE_PREFIX+storageKey))}catch{return null}}function writeStored(storageKey,width){if(storageKey)try{width===null?window.localStorage.removeItem(STORAGE_PREFIX+storageKey):window.localStorage.setItem(STORAGE_PREFIX+storageKey,String(width))}catch{}}function windowWidth(){return typeof window>"u"?0:window.innerWidth}function useWindowWidth(){let[width,setWidth]=useState(windowWidth);return useEffect3(()=>{let update=()=>setWidth(windowWidth());return update(),window.addEventListener("resize",update),()=>window.removeEventListener("resize",update)},[]),width}function afterFrame(fn){if(typeof requestAnimationFrame=="function"){let frame=requestAnimationFrame(fn);return()=>cancelAnimationFrame(frame)}let timer=setTimeout(fn,16);return()=>clearTimeout(timer)}function measure(element){let width=element?.getBoundingClientRect().width??0;return width>0?width:null}function splitRules(name,id,breakpoint){let self=`.nui-panels[data-panels-id="${id}"]`;return`@container ${name} (min-width: ${breakpoint}px) {${self} > .nui-panels-reader { position: relative; inset: auto; z-index: auto; flex: 0 0 auto; transform: none; transition: none; width: clamp(var(--nui-panels-reader-min), var(--nui-panels-reader-w), calc(100cqw - var(--nui-panels-list-min))); }${self} > .nui-panels-reader > .nui-panels-handle { display: block; }${self} > .nui-panels-reader > .nui-panels-backbar { display: none; }}`}function Panels({list,reader,listMin=320,readerMin=360,defaultReaderWidth,resizable=!1,storageKey,onBack,className}){let rootRef=useRef2(null),reactId=useId(),id=useMemo(()=>reactId.replace(/[^a-zA-Z0-9_-]/g,""),[reactId]),customBreakpoint=listMin!==320||readerMin!==360,containerName=customBreakpoint?`nui-panels nui-panels-${id}`:"nui-panels",[container,setContainer]=useState(null),[settled,setSettled]=useState(!1),[preferred,setPreferred]=useState(null),readerOpen=reader!=null;useLayoutEffect2(()=>{setPreferred(readStored(storageKey))},[storageKey]),useLayoutEffect2(()=>{let root=rootRef.current,update=()=>{let width=measure(root);width!==null&&(setContainer(current=>current===width?current:width),setSettled(!0))};update();let stopFrame=afterFrame(()=>setSettled(!0));if(!root||typeof ResizeObserver>"u")return stopFrame;let observer=new ResizeObserver(update);return observer.observe(root),()=>{stopFrame(),observer.disconnect()}},[]);let mode=splitFits(container,listMin,readerMin)?"split":"stacked",want=readerWantWidth(useWindowWidth()),chosen=preferred??defaultReaderWidth??want,readerWidth=clampReaderWidth(chosen,container,listMin,readerMin),setReaderWidth=useCallback(px2=>{let width=clampReaderWidth(px2,measure(rootRef.current)??container,listMin,readerMin);setPreferred(width),writeStored(storageKey,width)},[container,listMin,readerMin,storageKey]),resetReaderWidth=useCallback(()=>{setPreferred(null),writeStored(storageKey,null)},[storageKey]),state=useMemo(()=>({mode,readerWidth,setReaderWidth,readerOpen,settled}),[mode,readerOpen,readerWidth,setReaderWidth,settled]),covered=mode==="stacked"&&readerOpen,style={containerName,"--nui-panels-reader-w":`${chosen}px`,"--nui-panels-reader-min":`${readerMin}px`,"--nui-panels-list-min":`${listMin}px`};return jsx5(PanelsContext.Provider,{value:state,children:jsxs3("div",{ref:rootRef,className:className?`nui-panels ${className}`:"nui-panels",style,"data-panels-id":id,"data-custom-split":customBreakpoint?"":void 0,"data-mode":mode,"data-reader-open":readerOpen?"":void 0,children:[customBreakpoint?jsx5("style",{children:splitRules(`nui-panels-${id}`,id,splitBreakpoint(listMin,readerMin))}):null,jsx5("div",{className:"nui-panels-list",inert:covered||void 0,"aria-hidden":covered||void 0,children:list}),readerOpen?jsxs3("div",{className:"nui-panels-reader",children:[resizable?jsx5(PanelsHandle,{width:readerWidth,listMin,readerMin,max:container===null?void 0:readerMaxWidth(container,listMin,readerMin),onWidth:setReaderWidth,onReset:resetReaderWidth,rootRef}):null,onBack?jsx5(PanelsBackBar,{onBack}):null,reader]}):null]})})}function PanelsBackBar({onBack}){let locale=useToolkitLocale(),onBackRef=useRef2(onBack);useLayoutEffect2(()=>{onBackRef.current=onBack});let onEscape=useCallback(()=>(onBackRef.current(),!0),[]);return useEscapeLayer(`panels-back${useId()}`,onEscape,{priority:ESCAPE_PRIORITY.detail}),jsx5("div",{className:"nui-panels-backbar",children:jsxs3("button",{type:"button",className:"nui-panels-back",onClick:onBack,children:[jsx5("svg",{className:"nui-icon",viewBox:"0 0 16 16","aria-hidden":"true",fill:"none",stroke:"currentColor",strokeWidth:"1.5",strokeLinecap:"round",strokeLinejoin:"round",children:jsx5("path",{d:"M10 3.5 5.5 8l4.5 4.5"})}),pick(SHELL_WORDS.back,locale)]})})}function PanelsHandle({width,listMin,readerMin,max,onWidth,onReset,rootRef}){let locale=useToolkitLocale(),dragRef=useRef2(null),[dragWidth,setDragWidth]=useState(null),end=useCallback(()=>{let drag=dragRef.current;drag&&(dragRef.current=null,setDragWidth(null),drag.width!==null&&onWidth(drag.width))},[onWidth]);useEffect3(()=>end,[end]);let onPointerDown=event=>{event.button===0&&(event.preventDefault(),event.currentTarget.setPointerCapture?.(event.pointerId),dragRef.current={pointerId:event.pointerId,startX:event.clientX,startWidth:width,container:measure(rootRef.current),width:null},setDragWidth(width))},onPointerMove=event=>{let drag=dragRef.current;if(!drag||event.pointerId!==drag.pointerId)return;let next=clampReaderWidth(drag.startWidth+drag.startX-event.clientX,drag.container,listMin,readerMin);next!==drag.width&&(drag.width=next,rootRef.current?.style.setProperty("--nui-panels-reader-w",`${next}px`),setDragWidth(next))},onKeyDown=event=>{let direction=event.key==="ArrowLeft"?1:event.key==="ArrowRight"?-1:0;direction!==0&&(event.preventDefault(),event.stopPropagation(),onWidth(width+direction*24))};return jsx5("div",{className:"nui-panels-handle",role:"separator","aria-orientation":"vertical","aria-label":pick(PANELS_WORDS.resizeReader,locale),"aria-valuemin":readerMin,"aria-valuemax":max,"aria-valuenow":Math.round(dragWidth??width),title:pick(PANELS_WORDS.resizeReaderHint,locale),tabIndex:0,"data-resizing":dragWidth===null?void 0:"",onPointerDown,onPointerMove,onPointerUp:end,onPointerCancel:end,onLostPointerCapture:end,onDoubleClick:onReset,onKeyDown})}var PAGE_VIEWPORT_ATTRIBUTE="data-notis-view-viewport";function pageViewport(panel){return panel.parentElement?.querySelector(`:scope > [${PAGE_VIEWPORT_ATTRIBUTE}]`)??null}function measureSharedWidth(panel){let viewport=pageViewport(panel);return viewport?panel.getBoundingClientRect().right-viewport.getBoundingClientRect().left:null}function defaultPanelWidth(){return 420}function setPixels(panel,property2,value){let next=value===null?"":`${value}px`;panel.style.getPropertyValue(property2)!==next&&(next?panel.style.setProperty(property2,next):panel.style.removeProperty(property2))}function readStoredWidth(){try{return parseStoredChatPanelWidth(window.localStorage.getItem(CHAT_PANEL_WIDTH_STORAGE_KEY))}catch{return null}}function storeWidth(width){try{width===null?window.localStorage.removeItem(CHAT_PANEL_WIDTH_STORAGE_KEY):window.localStorage.setItem(CHAT_PANEL_WIDTH_STORAGE_KEY,String(width))}catch{}}function isHoverPointer(event){return event.pointerType==="mouse"||event.pointerType==="pen"}function focusedElement(event){return(typeof event.composedPath=="function"?event.composedPath():[])[0]??event.target}function isFocusVisible(target){let element=target;if(!element||typeof element.matches!="function")return!1;try{return element.matches(":focus-visible")}catch{return!1}}function createChatPanelEdge(adapters,initial){let preferred=null,drag=null,pageExtended=!1,pageHoverTimer=null,hidden=initial.hidden,desktop=initial.desktop,keyboardInput=!1,keyboardResized=!1,panelNode=()=>adapters.handle()?.parentElement??null;function sidebarInsetValue(){let property2=adapters.sidebarInsetProperty;return property2?document.documentElement.style.getPropertyValue(property2).trim():""}function restingSharedWidth(){let raw=sidebarInsetValue(),value=Number.parseFloat(raw),inset=Number.isFinite(value)?raw.endsWith("rem")?value*(Number.parseFloat(window.getComputedStyle(document.documentElement).fontSize)||16):value:0;return window.innerWidth-inset}function applyWidth(width,sharedWidth){let panel=panelNode();if(!panel)return;let overlap2=chatPanelOverlap(width??defaultPanelWidth(),sharedWidth);setPixels(panel,CHAT_PANEL_WIDTH_PROPERTY,width),setPixels(panel,CHAT_PANEL_OVERLAP_PROPERTY,overlap2>0?overlap2:null),panel.toggleAttribute("data-overlay",overlap2>0)}function chosenWidth(sharedWidth){return preferred!==null?clampChatPanelWidth(preferred,sharedWidth):defaultPanelWidth()}function displayedWidth(sharedWidth){let width=chosenWidth(sharedWidth);return pageExtended?Math.min(width,chatPanelPushLimit(sharedWidth)):width}let lastAria=null;function describe(width,sharedWidth){let max=chatPanelMaxWidth(sharedWidth),next={now:Math.round(width),max:Number.isFinite(max)?max:void 0};lastAria?.now===next.now&&lastAria?.max===next.max||(lastAria=next,adapters.onDescribe(next))}function narrowsPage(chosen,resting=restingSharedWidth()){if(chosen===null||hidden||!desktop)return!1;let limit=Math.min(576,chatPanelPageWidth(defaultPanelWidth(),resting));return chatPanelPageWidth(chosen,resting)<limit}function syncPageNarrowed(chosen,resting){let panel=panelNode();(panel?pageViewport(panel):null)?.toggleAttribute(CHAT_NARROWED_ATTRIBUTE,narrowsPage(chosen,resting))}function fit(){let panel=panelNode();if(!panel||drag)return;let sharedWidth=measureSharedWidth(panel);applyWidth(preferred===null&&!pageExtended?null:displayedWidth(sharedWidth),sharedWidth),describe(displayedWidth(sharedWidth),sharedWidth),syncPageNarrowed(preferred)}function cancelPageHover(){pageHoverTimer!==null&&clearTimeout(pageHoverTimer),pageHoverTimer=null}function setPageExtended(extended){return cancelPageHover(),pageExtended===extended?!1:(pageExtended=extended,fit(),!0)}function reportResize(method,width,sharedWidth){let overlap2=chatPanelOverlap(width??defaultPanelWidth(),sharedWidth);adapters.analytics().resized({method,width,coversPage:overlap2>0,page:adapters.page(),managerPhoneLayout:narrowsPage(width)})}function setWidth(width,sharedWidth){cancelPageHover(),pageExtended=!1,preferred=width,storeWidth(width),applyWidth(width,sharedWidth),syncPageNarrowed(width)}function endDrag(){let current=drag;if(!current)return;drag=null,panelNode()?.removeAttribute("data-resizing"),document.body.style.cursor=current.bodyCursor,document.body.style.userSelect=current.bodyUserSelect;let handle=adapters.handle();!current.focusedAtStart&&handle&&document.activeElement===handle&&handle.blur(),current.width!==null&&(setWidth(current.width,current.sharedWidth),reportResize("drag",current.width,current.sharedWidth))}function flushKeyboardResize(){let panel=panelNode();if(!panel||!keyboardResized)return;keyboardResized=!1;let sharedWidth=measureSharedWidth(panel);reportResize("keyboard",chosenWidth(sharedWidth),sharedWidth)}return{mount(){preferred=readStoredWidth(),fit()},setHidden(next){next&&(endDrag(),flushKeyboardResize()),hidden=next,setPageExtended(!1),syncPageNarrowed(preferred)},setDesktop(next){desktop=next,next||setPageExtended(!1),syncPageNarrowed(preferred)},reportAvailable(){!hidden&&desktop&&adapters.analytics().available(adapters.page())},trackInput(){let onKey=event=>{!event.metaKey&&!event.ctrlKey&&!event.altKey&&(keyboardInput=!0)},onPointer=()=>{keyboardInput=!1};return document.addEventListener("keydown",onKey,!0),document.addEventListener("pointerdown",onPointer,!0),()=>{document.removeEventListener("keydown",onKey,!0),document.removeEventListener("pointerdown",onPointer,!0)}},attach(){let panel=panelNode(),viewport=panel?pageViewport(panel):null;if(!panel||!viewport)return()=>{};let observer=typeof ResizeObserver>"u"?null:new ResizeObserver(()=>fit());observer?.observe(viewport);let inset=sidebarInsetValue(),insetObserver=adapters.sidebarInsetProperty&&window.MutationObserver?new window.MutationObserver(()=>{let next=sidebarInsetValue();next!==inset&&(inset=next,drag||syncPageNarrowed(preferred))}):null;insetObserver?.observe(document.documentElement,{attributes:!0,attributeFilter:["style"]});let covering=()=>!hidden&&desktop&&panel.hasAttribute("data-overlay"),onPagePointer=event=>{!isHoverPointer(event)||drag||!covering()||pageExtended||pageHoverTimer!==null||(pageHoverTimer=setTimeout(()=>{setPageExtended(!0)&&adapters.analytics().pageExtended("hover",adapters.page())},200))},onPageLeave=event=>{isHoverPointer(event)&&cancelPageHover()},onPanelPointer=event=>{!isHoverPointer(event)||adapters.handle()?.contains(event.target)||setPageExtended(!1)},onPageFocus=event=>{!covering()||!keyboardInput||!isFocusVisible(focusedElement(event))||setPageExtended(!0)&&adapters.analytics().pageExtended("keyboard",adapters.page())};return viewport.addEventListener("pointerenter",onPagePointer),viewport.addEventListener("pointermove",onPagePointer),viewport.addEventListener("pointerleave",onPageLeave),viewport.addEventListener("focusin",onPageFocus),panel.addEventListener("pointerover",onPanelPointer),()=>{observer?.disconnect(),insetObserver?.disconnect(),cancelPageHover(),viewport.removeAttribute(CHAT_NARROWED_ATTRIBUTE),viewport.removeEventListener("pointerenter",onPagePointer),viewport.removeEventListener("pointermove",onPagePointer),viewport.removeEventListener("pointerleave",onPageLeave),viewport.removeEventListener("focusin",onPageFocus),panel.removeEventListener("pointerover",onPanelPointer)}},pointerDown(event){let panel=panelNode();if(!panel||event.button!==0)return;event.preventDefault();let target=event.currentTarget;target?.setPointerCapture?.(event.pointerId);let startWidth=panel.getBoundingClientRect().width,sharedWidth=measureSharedWidth(panel);drag={pointerId:event.pointerId,startX:event.clientX,startWidth,sharedWidth,restingSharedWidth:restingSharedWidth(),width:null,focusedAtStart:document.activeElement===target,bodyCursor:document.body.style.cursor,bodyUserSelect:document.body.style.userSelect},panel.setAttribute("data-resizing",""),document.body.style.cursor="col-resize",document.body.style.userSelect="none",describe(startWidth,sharedWidth)},pointerMove(event){let current=drag;if(!current||event.pointerId!==current.pointerId)return;let width=clampChatPanelWidth(current.startWidth+current.startX-event.clientX,current.sharedWidth);width!==current.width&&(current.width=width,applyWidth(width,current.sharedWidth),syncPageNarrowed(width,current.restingSharedWidth),describe(width,current.sharedWidth))},endDrag,keyDown(event){let panel=panelNode(),direction=event.key==="ArrowLeft"?1:event.key==="ArrowRight"?-1:0;if(!panel||direction===0)return;event.preventDefault(),event.stopPropagation();let sharedWidth=measureSharedWidth(panel),width=clampChatPanelWidth(displayedWidth(sharedWidth)+direction*24,sharedWidth);setWidth(width,sharedWidth),keyboardResized=!0,describe(width,sharedWidth)},doubleClick(){let panel=panelNode();if(!panel)return;let sharedWidth=measureSharedWidth(panel);setWidth(null,sharedWidth),reportResize("reset",null,sharedWidth),describe(chosenWidth(sharedWidth),sharedWidth)},focus(){let panel=panelNode();if(!panel)return;let sharedWidth=measureSharedWidth(panel);describe(displayedWidth(sharedWidth),sharedWidth)},blur:flushKeyboardResize}}import React2,{createContext as createContext3,useCallback as useCallback2,useContext as useContext4,useEffect as useEffect5,useMemo as useMemo2,useRef as useRef3,useState as useState3}from"react";import{createPortal as createPortal2}from"react-dom";import{useEffect as useEffect4,useState as useState2}from"react";function place(anchor,size,options){let{align="start",offset=4,margin=8,viewport}=options,side=options.side??"bottom";if(side==="bottom"||side==="top"){let below=viewport.height-anchor.bottom-offset-margin,above=anchor.top-offset-margin;side==="bottom"&&size.height>below&&above>below?side="top":side==="top"&&size.height>above&&below>above&&(side="bottom")}else{let right=viewport.width-anchor.right-offset-margin,left2=anchor.left-offset-margin;side==="right"&&size.width>right&&left2>right?side="left":side==="left"&&size.width>left2&&right>left2&&(side="right")}let top,left;side==="bottom"||side==="top"?(top=side==="bottom"?anchor.bottom+offset:anchor.top-offset-size.height,left=align==="start"?anchor.left:align==="end"?anchor.right-size.width:anchor.left+anchor.width/2-size.width/2):(left=side==="right"?anchor.right+offset:anchor.left-offset-size.width,top=align==="start"?anchor.top:align==="end"?anchor.bottom-size.height:anchor.top+anchor.height/2-size.height/2);let maxLeft=Math.max(margin,viewport.width-margin-size.width),maxTop=Math.max(margin,viewport.height-margin-size.height);return{top:Math.round(clamp(top,margin,maxTop)),left:Math.round(clamp(left,margin,maxLeft)),side}}function clamp(value,min,max){return Math.min(max,Math.max(min,value))}function useFloatingStyle(open,anchor,panel,{side="bottom",align="start",offset=4}){let[state,setState]=useState2({top:0,left:0,side,measured:!1});return useIsoLayoutEffect(()=>{if(!open){setState(current=>current.measured?{...current,measured:!1}:current);return}let update=()=>{let anchorEl=anchor.current,panelEl=panel.current;if(!anchorEl||!panelEl)return;let rect=anchorEl.getBoundingClientRect(),viewport={width:window.innerWidth||document.documentElement.clientWidth||1024,height:window.innerHeight||document.documentElement.clientHeight||768},size={width:panelEl.offsetWidth,height:panelEl.offsetHeight},next=place(rect,size,{side,align,offset,viewport});setState(current=>current.top===next.top&&current.left===next.left&&current.side===next.side&&current.measured?current:{...next,measured:!0})};update(),window.addEventListener("resize",update),window.addEventListener("scroll",update,!0);let observer=typeof ResizeObserver<"u"?new ResizeObserver(update):null;return observer&&panel.current&&observer.observe(panel.current),()=>{window.removeEventListener("resize",update),window.removeEventListener("scroll",update,!0),observer?.disconnect()}},[open,side,align,offset]),{style:{top:state.top,left:state.left,visibility:state.measured?void 0:"hidden"},side:state.side}}function useOutsidePress(open,inside2,onDismiss){let latest=useLatest({inside:inside2,onDismiss});useEffect4(()=>{if(!open||typeof document>"u")return;let onPointerDown=event=>{eventWithin(event,latest.current.inside())||latest.current.onDismiss()};return document.addEventListener("pointerdown",onPointerDown,!0),document.addEventListener("mousedown",onPointerDown,!0),()=>{document.removeEventListener("pointerdown",onPointerDown,!0),document.removeEventListener("mousedown",onPointerDown,!0)}},[open,latest])}import{cloneElement}from"react";function setRef(ref,value){ref&&(typeof ref=="function"?ref(value):ref.current=value)}function ownRef(element){return element.props?.ref??element.ref??void 0}function cloneTrigger(element,extra){let own=element.props??{},merged={...extra};for(let[name,handler]of Object.entries(extra)){if(!/^on[A-Z]/.test(name)||typeof handler!="function")continue;let original=own[name];typeof original=="function"&&(merged[name]=event=>{original(event),event.defaultPrevented||handler(event)})}let elementRef=ownRef(element),extraRef=extra.ref;return merged.ref=node=>{setRef(elementRef,node),setRef(extraRef,node)},cloneElement(element,merged)}import{Fragment as Fragment3,jsx as jsx6,jsxs as jsxs4}from"react/jsx-runtime";var ITEM_SELECTOR="[data-nui-menu-item]",TreeContext=createContext3(null),PanelContext=createContext3(null);function useMenu(){let tree=useContext4(TreeContext);return useMemo2(()=>({close:()=>tree?.close({focusTrigger:!0}),isOpen:!!tree?.isOpen}),[tree])}function items(panel){return panel?Array.from(panel.querySelectorAll(ITEM_SELECTOR)).filter(item=>item.closest(".nui-menu")===panel&&item.getAttribute("aria-disabled")!=="true"):[]}function focusItem(panel,which){let list=items(panel);if(list.length===0)return;let active=deepActiveElement(panel?.getRootNode()),index=active?list.indexOf(active):-1,next;which==="first"?next=list[0]:which==="last"?next=list[list.length-1]:which==="next"?next=list[index===-1?0:(index+1)%list.length]:next=list[index===-1?list.length-1:(index-1+list.length)%list.length],next?.focus({preventScroll:!1})}function MenuPanel({open,anchor,side,align,label,className,tree,onKeyDownExtra,children,layerRoot,id}){let t=useT(),platform=useToolkitPlatform(),panelRef=useRef3(null),[openSub,setOpenSub]=useState3(null),{style,side:placedSide}=useFloatingStyle(open&&!!layerRoot,anchor,panelRef,{side,align,offset:side==="right"||side==="left"?2:4}),typeahead=useRef3({text:"",at:0});useEffect5(()=>{let panel=panelRef.current;if(!(!open||!panel))return tree.panels.add(panel),()=>{tree.panels.delete(panel)}},[open,tree,layerRoot]),useEffect5(()=>{open||setOpenSub(null)},[open]);let panelContext=useMemo2(()=>({tree,openSub,setOpenSub,panel:()=>panelRef.current}),[tree,openSub]);if(!open||!layerRoot)return null;let onKeyDown=event=>{if(event.nativeEvent.isComposing)return;let panel=panelRef.current;if(!onKeyDownExtra?.(event)&&event.target.closest?.(".nui-menu")===panel){switch(event.key){case"ArrowDown":event.preventDefault(),focusItem(panel,"next");return;case"ArrowUp":event.preventDefault(),focusItem(panel,"prev");return;case"Home":event.preventDefault(),focusItem(panel,"first");return;case"End":event.preventDefault(),focusItem(panel,"last");return;case"Tab":tree.close();return;case"Enter":case" ":{let target=event.target;target.matches(ITEM_SELECTOR)&&(event.preventDefault(),target.click());return}default:break}if(event.key==="ArrowRight"){let target=event.target;target.getAttribute("aria-haspopup")==="menu"&&(event.preventDefault(),target.click());return}for(let item of items(panel)){let keys=item.getAttribute("data-nui-keys");if(keys&&keys.split(`
2
+ import{DEFAULT_KEYMAP,Dialog,ESCAPE_PRIORITY,HELP_WORDS,Icon,KEY_JOIN_WORDS,KeyboardEngineCore,MultiSelectDragOverlay,NNBSP,NotisKeyClash,ROOT_OWNER,RenderChartData,SEQUENCE_TIMEOUT_MS,SHELL_WORDS,STANDARD_ACTIONS,ShortcutRegistry,__export,actionErrorReason,canonicalKey,closestComposed,containsComposed,cx,deepActiveElement,detectLocale,detectPlatform,eventTarget,eventWithin,fillWords,flag,formatKey,formatKeyParts,formatKeySpoken,getSharedInstance,hasIcon,isSequenceSpec,isStandardActionId,isValidKeySpec,isVisibleComposed,isWords,keyFingerprints,keyList,keysOff,matchChord,matchKey,modalLayerOf,openModalLayers,pick,renderIcon,resolveActionRef,revealInline,safeWhen,selectedCount,selfClashes,toAriaKeyShortcuts,toWords,useEngineCore,useEscapeBlocker,useEscapeLayer,useHelpSheet,useIsoLayoutEffect,useLabelValue,useLatest,useMarqueeSelection,useNativeMutation,useNotisRuntime,useRegistryVersion,useShortcut,useShortcutOwner,useShortcutScope,useShortcuts2 as useShortcuts,useShown,useStableId,useT,useToolkitLocale,useToolkitPlatform,useToolkitSettings,useTopBarSearch,useTopBarTitleLeaf,w,writeViewParams}from"./chunk-SVZATGZB.js";import{createContext as createContext2,useCallback,useContext as useContext3,useEffect as useEffect3,useId,useLayoutEffect as useLayoutEffect2,useMemo,useRef as useRef2,useState}from"react";import{useEffect,useLayoutEffect}from"react";import{Fragment,jsx}from"react/jsx-runtime";var useIsoLayoutEffect2=typeof window>"u"?useEffect:useLayoutEffect;function KeyboardEngine(props){let shared=getSharedInstance(),core=props.engine??shared.core,{host,locale,platform,strict,onClash}=props;core.configure({host,locale,platform,strict,onClash},{silent:!0}),useIsoLayoutEffect2(()=>{core.registry.notify()},[core,host,locale,platform,strict]),useIsoLayoutEffect2(()=>(core.mounted+=1,core.registry.notify(),()=>{core.mounted-=1,core.registry.notify()}),[core]);let doc=props.document??(typeof document<"u"?document:void 0);useEffect(()=>doc?core.attach(doc):void 0,[core,doc]);let content=props.children??null;return props.engine?jsx(shared.EngineContext.Provider,{value:props.engine,children:content}):jsx(Fragment,{children:content})}function ShortcutScope({owner,available,kind,children}){let{OwnerContext}=getSharedInstance();return useShortcutScope(owner,{available,kind}),jsx(OwnerContext.Provider,{value:owner,children})}import{useEffect as useEffect2,useRef}from"react";import{createPortal}from"react-dom";import{Fragment as Fragment2,useContext}from"react";import{jsx as jsx2,jsxs}from"react/jsx-runtime";function Keycap({keys,on,className}){let locale=useToolkitLocale(),platform=useToolkitPlatform(),inherited=useContext(getSharedInstance().KeycapContext),surface=on??inherited??"surface",options={platform,locale},alternatives=formatKeyParts(keys,options);if(!alternatives.length)return null;let then=KEY_JOIN_WORDS.then[locale],or=KEY_JOIN_WORDS.or[locale];return jsxs("span",{className:className?`nui-kbd-group ${className}`:"nui-kbd-group","data-on":surface,children:[jsx2("span",{className:"nui-kbd-caps","aria-hidden":"true",children:alternatives.map((caps,i)=>jsxs(Fragment2,{children:[i>0&&jsx2("span",{className:"nui-kbd-sep",children:or}),caps.map((cap,j)=>jsxs(Fragment2,{children:[j>0&&jsx2("span",{className:"nui-kbd-sep",children:then}),jsx2("kbd",{className:"nui-kbd",children:cap})]},j))]},i))}),jsx2("span",{className:"nui-sr-only",children:formatKeySpoken(keys,options)})]})}function KeycapSurface({on,children}){let{KeycapContext}=getSharedInstance();return jsx2(KeycapContext.Provider,{value:on,children})}function useKeyLabel(keys){let locale=useToolkitLocale(),platform=useToolkitPlatform();return formatKey(keys,{platform,locale})}import{createContext,useContext as useContext2}from"react";import{jsx as jsx3}from"react/jsx-runtime";var LAYER_ROOT_ATTRIBUTE="data-notis-layer-root",LayerRootContext=createContext(null);function LayerRootProvider({root,children}){return jsx3(LayerRootContext.Provider,{value:root,children})}function findLayerRoot(from){if(typeof document>"u")return null;let dialog=(from?.nodeType===1?from:from?.parentElement)?.closest("dialog[open]");if(dialog){let existing=Array.from(dialog.children).find(child=>child.hasAttribute(LAYER_ROOT_ATTRIBUTE));if(existing)return existing;let created=dialog.ownerDocument.createElement("div");return created.setAttribute(LAYER_ROOT_ATTRIBUTE,""),created.className="nui-layer",dialog.appendChild(created),created}let root=from&&typeof from.getRootNode=="function"?from.getRootNode():document;if(typeof ShadowRoot<"u"&&root instanceof ShadowRoot){let existing=Array.from(root.querySelectorAll(`[${LAYER_ROOT_ATTRIBUTE}]`)).find(layer=>!layer.closest("dialog"));if(existing)return existing;let created=root.ownerDocument.createElement("div");return created.setAttribute(LAYER_ROOT_ATTRIBUTE,""),created.className="nui-layer",(root.querySelector("[data-notis-app-root]")??root).appendChild(created),created}return(root instanceof Document?root:document).body}function useLayerRoot(anchor){let pinned=useContext2(LayerRootContext);return pinned||(anchor?findLayerRoot(anchor):typeof document>"u"?null:document.body)}function usePinnedLayerRoot(){return useContext2(LayerRootContext)}import{jsx as jsx4,jsxs as jsxs2}from"react/jsx-runtime";var FOCUSABLE='button:not([disabled]), [href], input:not([disabled]), select:not([disabled]), textarea:not([disabled]), [tabindex]:not([tabindex="-1"])';function deepActiveElement2(doc){let active=doc.activeElement;for(;active?.shadowRoot?.activeElement;)active=active.shadowRoot.activeElement;return active}function HelpSheet({container}){let{isOpen}=useHelpSheet(),core=useEngineCore(),pinned=usePinnedLayerRoot();if(!isOpen)return null;let target=container??pinned??core.attachedDocument()?.body??null;return target?createPortal(jsx4(HelpSheetPanel,{}),target):null}function HelpSheetPanel(){let core=useEngineCore(),locale=useToolkitLocale(),{close}=useHelpSheet();useRegistryVersion();let panelRef=useRef(null);useEscapeLayer("help-sheet",()=>(close(),!0),{priority:ESCAPE_PRIORITY.help}),useEffect2(()=>core.register({id:"help.close",keys:"?",scope:"modal",label:HELP_WORDS.close,hidden:!0,run:()=>{core.closeHelp()}},ROOT_OWNER)??void 0,[core]),useEffect2(()=>{let panel=panelRef.current;if(!panel)return;let previous=deepActiveElement2(panel.ownerDocument);return panel.focus(),()=>{previous?.isConnected&&previous.focus()}},[]);let trapTab=event=>{if(event.key!=="Tab")return;let panel=panelRef.current;if(!panel)return;let items2=[...panel.querySelectorAll(FOCUSABLE)];if(!items2.length){event.preventDefault(),panel.focus();return}let first=items2[0],last=items2[items2.length-1],active=deepActiveElement2(panel.ownerDocument);event.shiftKey&&(active===first||active===panel)?(event.preventDefault(),last.focus()):!event.shiftKey&&active===last&&(event.preventDefault(),first.focus())},entries=core.registry.helpEntries(),groups=[{group:"space",title:HELP_WORDS.groupSpace[locale]},{group:"notis",title:HELP_WORDS.groupNotis[locale]}],titleId="nui-help-title";return jsxs2("div",{className:"nui-root nui-help","data-notis-escape-owned":"",lang:locale,children:[jsx4("div",{className:"nui-help-backdrop","aria-hidden":"true"}),jsxs2("div",{ref:panelRef,className:"nui-help-panel",role:"dialog","aria-modal":"true","aria-labelledby":titleId,tabIndex:-1,onKeyDown:trapTab,children:[jsxs2("div",{className:"nui-help-head",children:[jsx4("h2",{id:titleId,className:"nui-help-title",children:HELP_WORDS.title[locale]}),jsx4("button",{type:"button",className:"nui-icon-btn","aria-label":HELP_WORDS.close[locale],onClick:close,children:jsx4("svg",{className:"nui-icon",viewBox:"0 0 16 16","aria-hidden":"true",fill:"none",stroke:"currentColor",strokeWidth:"1.5",strokeLinecap:"round",children:jsx4("path",{d:"M4 4l8 8M12 4l-8 8"})})})]}),jsx4("div",{className:"nui-help-body",children:jsxs2(KeycapSurface,{on:"discreet",children:[entries.length===0&&jsx4("p",{className:"nui-help-empty",children:HELP_WORDS.empty[locale]}),groups.map(({group,title})=>{let rows=entries.filter(entry=>entry.group===group);return rows.length?jsxs2("section",{className:"nui-help-group","aria-label":title,children:[jsx4("h3",{className:"nui-help-group-title",children:title}),jsx4("ul",{className:"nui-help-list",children:rows.map(row=>jsxs2("li",{className:"nui-help-row","data-shortcut-id":row.id,children:[jsx4("span",{className:"nui-help-label",children:row.label[locale]}),jsx4(Keycap,{keys:row.keys})]},row.id))})]},group):null})]})})]})]})}function stepCursor(ids,cursor,delta,options={}){if(!ids.length)return null;let{wrap=!0,repeat=!1}=options,index=cursor==null?-1:ids.indexOf(cursor);if(index===-1)return delta>=0?ids[0]:ids[ids.length-1];let next=index+delta;return(next<0||next>=ids.length)&&(wrap&&!repeat?next=(next%ids.length+ids.length)%ids.length:next=Math.max(0,Math.min(ids.length-1,next))),ids[next]}var panelMath_exports={};__export(panelMath_exports,{CHAT_NARROWED_ATTRIBUTE:()=>CHAT_NARROWED_ATTRIBUTE,CHAT_PANEL_DEFAULT_WIDTH_PX:()=>CHAT_PANEL_DEFAULT_WIDTH_PX,CHAT_PANEL_DESKTOP_MEDIA_QUERY:()=>CHAT_PANEL_DESKTOP_MEDIA_QUERY,CHAT_PANEL_KEYBOARD_STEP_PX:()=>CHAT_PANEL_KEYBOARD_STEP_PX,CHAT_PANEL_MIN_CONTENT_WIDTH_PX:()=>CHAT_PANEL_MIN_CONTENT_WIDTH_PX,CHAT_PANEL_MIN_WIDTH_PX:()=>CHAT_PANEL_MIN_WIDTH_PX,CHAT_PANEL_OVERLAP_PROPERTY:()=>CHAT_PANEL_OVERLAP_PROPERTY,CHAT_PANEL_PAGE_HOVER_DELAY_MS:()=>CHAT_PANEL_PAGE_HOVER_DELAY_MS,CHAT_PANEL_PAGE_PEEK_PX:()=>CHAT_PANEL_PAGE_PEEK_PX,CHAT_PANEL_WIDTH_PROPERTY:()=>CHAT_PANEL_WIDTH_PROPERTY,CHAT_PANEL_WIDTH_STORAGE_KEY:()=>CHAT_PANEL_WIDTH_STORAGE_KEY,MANAGER_PHONE_LAYOUT_BELOW_PX:()=>MANAGER_PHONE_LAYOUT_BELOW_PX,PANELS_HOVER_DELAY_MS:()=>PANELS_HOVER_DELAY_MS,PANELS_KEYBOARD_STEP_PX:()=>PANELS_KEYBOARD_STEP_PX,PANELS_LIST_MIN_PX:()=>PANELS_LIST_MIN_PX,PANELS_READER_MIN_PX:()=>PANELS_READER_MIN_PX,PANELS_READER_PEEK_PX:()=>PANELS_READER_PEEK_PX,PANELS_READER_WANT_PX:()=>PANELS_READER_WANT_PX,PANELS_READER_WANT_WIDE_PX:()=>PANELS_READER_WANT_WIDE_PX,PANELS_READER_WIDE_FROM_PX:()=>PANELS_READER_WIDE_FROM_PX,chatPanelMaxWidth:()=>chatPanelMaxWidth,chatPanelOverlap:()=>chatPanelOverlap,chatPanelPageWidth:()=>chatPanelPageWidth,chatPanelPushLimit:()=>chatPanelPushLimit,clampChatPanelWidth:()=>clampChatPanelWidth,clampReaderWidth:()=>clampReaderWidth,overlap:()=>overlap,parseStoredChatPanelWidth:()=>parseStoredChatPanelWidth,parseStoredWidth:()=>parseStoredWidth,pushLimit:()=>pushLimit,readerMaxWidth:()=>readerMaxWidth,readerWantWidth:()=>readerWantWidth,splitBreakpoint:()=>splitBreakpoint,splitFits:()=>splitFits});var CHAT_PANEL_WIDTH_PROPERTY="--notis-chat-panel-width",CHAT_PANEL_OVERLAP_PROPERTY="--notis-chat-panel-overlap",CHAT_PANEL_WIDTH_STORAGE_KEY="notis:chat-panel-width",CHAT_PANEL_DEFAULT_WIDTH_PX=420,CHAT_PANEL_DESKTOP_MEDIA_QUERY="(min-width: 64rem)",MANAGER_PHONE_LAYOUT_BELOW_PX=576,CHAT_NARROWED_ATTRIBUTE="data-chat-narrowed",CHAT_PANEL_MIN_WIDTH_PX=360,CHAT_PANEL_MIN_CONTENT_WIDTH_PX=320,CHAT_PANEL_PAGE_PEEK_PX=80,CHAT_PANEL_KEYBOARD_STEP_PX=24,CHAT_PANEL_PAGE_HOVER_DELAY_MS=200,PANELS_LIST_MIN_PX=320,PANELS_READER_MIN_PX=360,PANELS_READER_PEEK_PX=80,PANELS_KEYBOARD_STEP_PX=24,PANELS_HOVER_DELAY_MS=200,PANELS_READER_WANT_PX=420,PANELS_READER_WANT_WIDE_PX=480,PANELS_READER_WIDE_FROM_PX=1280;function readerWantWidth(windowWidth2){return windowWidth2>=1280?480:420}function readerMaxWidth(container,keep=320,readerMin=360){return container===null?Number.POSITIVE_INFINITY:Math.max(readerMin,Math.round(container-keep))}function pushLimit(container,listMin=320,readerMin=360){return readerMaxWidth(container,listMin,readerMin)}function overlap(width,container,listMin=320){return container===null?0:Math.max(0,Math.round(width-(container-listMin)))}function splitFits(container,listMin=320,readerMin=360){return container===null?!0:container>=listMin+readerMin}function splitBreakpoint(listMin=320,readerMin=360){return listMin+readerMin}function clampReaderWidth(want,container,listMin=320,readerMin=360,peek=80){if(container===null)return Math.round(Math.max(readerMin,want));let pushed=Math.min(want,container-listMin);return Math.round(Math.max(0,Math.min(Math.max(pushed,readerMin),container-peek)))}function parseStoredWidth(raw){if(!raw)return null;let width=Number(raw);return Number.isFinite(width)&&width>0?width:null}function chatPanelMaxWidth(sharedWidth){return readerMaxWidth(sharedWidth,80,360)}function chatPanelPushLimit(sharedWidth){return pushLimit(sharedWidth,320,360)}function clampChatPanelWidth(width,sharedWidth){return Math.round(Math.min(chatPanelMaxWidth(sharedWidth),Math.max(360,width)))}function chatPanelPageWidth(chosenWidth,sharedWidth){let width=clampChatPanelWidth(chosenWidth,sharedWidth);return sharedWidth-width+chatPanelOverlap(width,sharedWidth)}function chatPanelOverlap(width,sharedWidth){return overlap(width,sharedWidth,320)}function parseStoredChatPanelWidth(raw){return parseStoredWidth(raw)}import{jsx as jsx5,jsxs as jsxs3}from"react/jsx-runtime";var PANELS_WORDS=Object.freeze({resizeReader:{en:"Resize the open item",fr:"Redimensionner l\u2019\xE9l\xE9ment ouvert"},resizeReaderHint:{en:"Drag to resize, double-click to reset",fr:"Fais glisser pour redimensionner, double-clique pour r\xE9initialiser"}}),STORAGE_PREFIX="notis:panels:",PanelsContext=createContext2(null);function usePanels(){return useContext3(PanelsContext)??OUTSIDE_PANELS}var OUTSIDE_PANELS=Object.freeze({mode:"split",readerWidth:readerWantWidth(0),setReaderWidth:()=>{},readerOpen:!1,settled:!0});function readStored(storageKey){if(!storageKey)return null;try{return parseStoredWidth(window.localStorage.getItem(STORAGE_PREFIX+storageKey))}catch{return null}}function writeStored(storageKey,width){if(storageKey)try{width===null?window.localStorage.removeItem(STORAGE_PREFIX+storageKey):window.localStorage.setItem(STORAGE_PREFIX+storageKey,String(width))}catch{}}function windowWidth(){return typeof window>"u"?0:window.innerWidth}function useWindowWidth(){let[width,setWidth]=useState(windowWidth);return useEffect3(()=>{let update=()=>setWidth(windowWidth());return update(),window.addEventListener("resize",update),()=>window.removeEventListener("resize",update)},[]),width}function afterFrame(fn){if(typeof requestAnimationFrame=="function"){let frame=requestAnimationFrame(fn);return()=>cancelAnimationFrame(frame)}let timer=setTimeout(fn,16);return()=>clearTimeout(timer)}function measure(element){let width=element?.getBoundingClientRect().width??0;return width>0?width:null}function splitRules(name,id,breakpoint){let self=`.nui-panels[data-panels-id="${id}"]`;return`@container ${name} (min-width: ${breakpoint}px) {${self} > .nui-panels-reader { position: relative; inset: auto; z-index: auto; flex: 0 0 auto; transform: none; transition: none; width: clamp(var(--nui-panels-reader-min), var(--nui-panels-reader-w), calc(100cqw - var(--nui-panels-list-min))); }${self} > .nui-panels-reader > .nui-panels-handle { display: block; }${self} > .nui-panels-reader > .nui-panels-backbar { display: none; }}`}function Panels({list,reader,listMin=320,readerMin=360,defaultReaderWidth,resizable=!1,storageKey,onBack,className}){let rootRef=useRef2(null),reactId=useId(),id=useMemo(()=>reactId.replace(/[^a-zA-Z0-9_-]/g,""),[reactId]),customBreakpoint=listMin!==320||readerMin!==360,containerName=customBreakpoint?`nui-panels nui-panels-${id}`:"nui-panels",[container,setContainer]=useState(null),[settled,setSettled]=useState(!1),[preferred,setPreferred]=useState(null),readerOpen=reader!=null;useLayoutEffect2(()=>{setPreferred(readStored(storageKey))},[storageKey]),useLayoutEffect2(()=>{let root=rootRef.current,update=()=>{let width=measure(root);width!==null&&(setContainer(current=>current===width?current:width),setSettled(!0))};update();let stopFrame=afterFrame(()=>setSettled(!0));if(!root||typeof ResizeObserver>"u")return stopFrame;let observer=new ResizeObserver(update);return observer.observe(root),()=>{stopFrame(),observer.disconnect()}},[]);let mode=splitFits(container,listMin,readerMin)?"split":"stacked",want=readerWantWidth(useWindowWidth()),chosen=preferred??defaultReaderWidth??want,readerWidth=clampReaderWidth(chosen,container,listMin,readerMin),setReaderWidth=useCallback(px2=>{let width=clampReaderWidth(px2,measure(rootRef.current)??container,listMin,readerMin);setPreferred(width),writeStored(storageKey,width)},[container,listMin,readerMin,storageKey]),resetReaderWidth=useCallback(()=>{setPreferred(null),writeStored(storageKey,null)},[storageKey]),state=useMemo(()=>({mode,readerWidth,setReaderWidth,readerOpen,settled}),[mode,readerOpen,readerWidth,setReaderWidth,settled]),covered=mode==="stacked"&&readerOpen,style={containerName,"--nui-panels-reader-w":`${chosen}px`,"--nui-panels-reader-min":`${readerMin}px`,"--nui-panels-list-min":`${listMin}px`};return jsx5(PanelsContext.Provider,{value:state,children:jsxs3("div",{ref:rootRef,className:className?`nui-panels ${className}`:"nui-panels",style,"data-panels-id":id,"data-custom-split":customBreakpoint?"":void 0,"data-mode":mode,"data-reader-open":readerOpen?"":void 0,children:[customBreakpoint?jsx5("style",{children:splitRules(`nui-panels-${id}`,id,splitBreakpoint(listMin,readerMin))}):null,jsx5("div",{className:"nui-panels-list",inert:covered||void 0,"aria-hidden":covered||void 0,children:list}),readerOpen?jsxs3("div",{className:"nui-panels-reader",children:[resizable?jsx5(PanelsHandle,{width:readerWidth,listMin,readerMin,max:container===null?void 0:readerMaxWidth(container,listMin,readerMin),onWidth:setReaderWidth,onReset:resetReaderWidth,rootRef}):null,onBack?jsx5(PanelsBackBar,{onBack}):null,reader]}):null]})})}function PanelsBackBar({onBack}){let locale=useToolkitLocale(),onBackRef=useRef2(onBack);useLayoutEffect2(()=>{onBackRef.current=onBack});let onEscape=useCallback(()=>(onBackRef.current(),!0),[]);return useEscapeLayer(`panels-back${useId()}`,onEscape,{priority:ESCAPE_PRIORITY.detail}),jsx5("div",{className:"nui-panels-backbar",children:jsxs3("button",{type:"button",className:"nui-panels-back",onClick:onBack,children:[jsx5("svg",{className:"nui-icon",viewBox:"0 0 16 16","aria-hidden":"true",fill:"none",stroke:"currentColor",strokeWidth:"1.5",strokeLinecap:"round",strokeLinejoin:"round",children:jsx5("path",{d:"M10 3.5 5.5 8l4.5 4.5"})}),pick(SHELL_WORDS.back,locale)]})})}function PanelsHandle({width,listMin,readerMin,max,onWidth,onReset,rootRef}){let locale=useToolkitLocale(),dragRef=useRef2(null),[dragWidth,setDragWidth]=useState(null),end=useCallback(()=>{let drag=dragRef.current;drag&&(dragRef.current=null,setDragWidth(null),drag.width!==null&&onWidth(drag.width))},[onWidth]);useEffect3(()=>end,[end]);let onPointerDown=event=>{event.button===0&&(event.preventDefault(),event.currentTarget.setPointerCapture?.(event.pointerId),dragRef.current={pointerId:event.pointerId,startX:event.clientX,startWidth:width,container:measure(rootRef.current),width:null},setDragWidth(width))},onPointerMove=event=>{let drag=dragRef.current;if(!drag||event.pointerId!==drag.pointerId)return;let next=clampReaderWidth(drag.startWidth+drag.startX-event.clientX,drag.container,listMin,readerMin);next!==drag.width&&(drag.width=next,rootRef.current?.style.setProperty("--nui-panels-reader-w",`${next}px`),setDragWidth(next))},onKeyDown=event=>{let direction=event.key==="ArrowLeft"?1:event.key==="ArrowRight"?-1:0;direction!==0&&(event.preventDefault(),event.stopPropagation(),onWidth(width+direction*24))};return jsx5("div",{className:"nui-panels-handle",role:"separator","aria-orientation":"vertical","aria-label":pick(PANELS_WORDS.resizeReader,locale),"aria-valuemin":readerMin,"aria-valuemax":max,"aria-valuenow":Math.round(dragWidth??width),title:pick(PANELS_WORDS.resizeReaderHint,locale),tabIndex:0,"data-resizing":dragWidth===null?void 0:"",onPointerDown,onPointerMove,onPointerUp:end,onPointerCancel:end,onLostPointerCapture:end,onDoubleClick:onReset,onKeyDown})}var PAGE_VIEWPORT_ATTRIBUTE="data-notis-view-viewport";function pageViewport(panel){return panel.parentElement?.querySelector(`:scope > [${PAGE_VIEWPORT_ATTRIBUTE}]`)??null}function measureSharedWidth(panel){let viewport=pageViewport(panel);return viewport?panel.getBoundingClientRect().right-viewport.getBoundingClientRect().left:null}function defaultPanelWidth(){return 420}function setPixels(panel,property2,value){let next=value===null?"":`${value}px`;panel.style.getPropertyValue(property2)!==next&&(next?panel.style.setProperty(property2,next):panel.style.removeProperty(property2))}function readStoredWidth(){try{return parseStoredChatPanelWidth(window.localStorage.getItem(CHAT_PANEL_WIDTH_STORAGE_KEY))}catch{return null}}function storeWidth(width){try{width===null?window.localStorage.removeItem(CHAT_PANEL_WIDTH_STORAGE_KEY):window.localStorage.setItem(CHAT_PANEL_WIDTH_STORAGE_KEY,String(width))}catch{}}function isHoverPointer(event){return event.pointerType==="mouse"||event.pointerType==="pen"}function focusedElement(event){return(typeof event.composedPath=="function"?event.composedPath():[])[0]??event.target}function isFocusVisible(target){let element=target;if(!element||typeof element.matches!="function")return!1;try{return element.matches(":focus-visible")}catch{return!1}}function createChatPanelEdge(adapters,initial){let preferred=null,drag=null,pageExtended=!1,pageHoverTimer=null,hidden=initial.hidden,desktop=initial.desktop,keyboardInput=!1,keyboardResized=!1,panelNode=()=>adapters.handle()?.parentElement??null;function sidebarInsetValue(){let property2=adapters.sidebarInsetProperty;return property2?document.documentElement.style.getPropertyValue(property2).trim():""}function restingSharedWidth(){let raw=sidebarInsetValue(),value=Number.parseFloat(raw),inset=Number.isFinite(value)?raw.endsWith("rem")?value*(Number.parseFloat(window.getComputedStyle(document.documentElement).fontSize)||16):value:0;return window.innerWidth-inset}function applyWidth(width,sharedWidth){let panel=panelNode();if(!panel)return;let overlap2=chatPanelOverlap(width??defaultPanelWidth(),sharedWidth);setPixels(panel,CHAT_PANEL_WIDTH_PROPERTY,width),setPixels(panel,CHAT_PANEL_OVERLAP_PROPERTY,overlap2>0?overlap2:null),panel.toggleAttribute("data-overlay",overlap2>0)}function chosenWidth(sharedWidth){return preferred!==null?clampChatPanelWidth(preferred,sharedWidth):defaultPanelWidth()}function displayedWidth(sharedWidth){let width=chosenWidth(sharedWidth);return pageExtended?Math.min(width,chatPanelPushLimit(sharedWidth)):width}let lastAria=null;function describe(width,sharedWidth){let max=chatPanelMaxWidth(sharedWidth),next={now:Math.round(width),max:Number.isFinite(max)?max:void 0};lastAria?.now===next.now&&lastAria?.max===next.max||(lastAria=next,adapters.onDescribe(next))}function narrowsPage(chosen,resting=restingSharedWidth()){if(chosen===null||hidden||!desktop)return!1;let limit=Math.min(576,chatPanelPageWidth(defaultPanelWidth(),resting));return chatPanelPageWidth(chosen,resting)<limit}function syncPageNarrowed(chosen,resting){let panel=panelNode();(panel?pageViewport(panel):null)?.toggleAttribute(CHAT_NARROWED_ATTRIBUTE,narrowsPage(chosen,resting))}function fit(){let panel=panelNode();if(!panel||drag)return;let sharedWidth=measureSharedWidth(panel);applyWidth(preferred===null&&!pageExtended?null:displayedWidth(sharedWidth),sharedWidth),describe(displayedWidth(sharedWidth),sharedWidth),syncPageNarrowed(preferred)}function cancelPageHover(){pageHoverTimer!==null&&clearTimeout(pageHoverTimer),pageHoverTimer=null}function setPageExtended(extended){return cancelPageHover(),pageExtended===extended?!1:(pageExtended=extended,fit(),!0)}function reportResize(method,width,sharedWidth){let overlap2=chatPanelOverlap(width??defaultPanelWidth(),sharedWidth);adapters.analytics().resized({method,width,coversPage:overlap2>0,page:adapters.page(),managerPhoneLayout:narrowsPage(width)})}function setWidth(width,sharedWidth){cancelPageHover(),pageExtended=!1,preferred=width,storeWidth(width),applyWidth(width,sharedWidth),syncPageNarrowed(width)}function endDrag(){let current=drag;if(!current)return;drag=null,panelNode()?.removeAttribute("data-resizing"),document.body.style.cursor=current.bodyCursor,document.body.style.userSelect=current.bodyUserSelect;let handle=adapters.handle();!current.focusedAtStart&&handle&&document.activeElement===handle&&handle.blur(),current.width!==null&&(setWidth(current.width,current.sharedWidth),reportResize("drag",current.width,current.sharedWidth))}function flushKeyboardResize(){let panel=panelNode();if(!panel||!keyboardResized)return;keyboardResized=!1;let sharedWidth=measureSharedWidth(panel);reportResize("keyboard",chosenWidth(sharedWidth),sharedWidth)}return{mount(){preferred=readStoredWidth(),fit()},setHidden(next){next&&(endDrag(),flushKeyboardResize()),hidden=next,setPageExtended(!1),syncPageNarrowed(preferred)},setDesktop(next){desktop=next,next||setPageExtended(!1),syncPageNarrowed(preferred)},reportAvailable(){!hidden&&desktop&&adapters.analytics().available(adapters.page())},trackInput(){let onKey=event=>{!event.metaKey&&!event.ctrlKey&&!event.altKey&&(keyboardInput=!0)},onPointer=()=>{keyboardInput=!1};return document.addEventListener("keydown",onKey,!0),document.addEventListener("pointerdown",onPointer,!0),()=>{document.removeEventListener("keydown",onKey,!0),document.removeEventListener("pointerdown",onPointer,!0)}},attach(){let panel=panelNode(),viewport=panel?pageViewport(panel):null;if(!panel||!viewport)return()=>{};let observer=typeof ResizeObserver>"u"?null:new ResizeObserver(()=>fit());observer?.observe(viewport);let inset=sidebarInsetValue(),insetObserver=adapters.sidebarInsetProperty&&window.MutationObserver?new window.MutationObserver(()=>{let next=sidebarInsetValue();next!==inset&&(inset=next,drag||syncPageNarrowed(preferred))}):null;insetObserver?.observe(document.documentElement,{attributes:!0,attributeFilter:["style"]});let covering=()=>!hidden&&desktop&&panel.hasAttribute("data-overlay"),onPagePointer=event=>{!isHoverPointer(event)||drag||!covering()||pageExtended||pageHoverTimer!==null||(pageHoverTimer=setTimeout(()=>{setPageExtended(!0)&&adapters.analytics().pageExtended("hover",adapters.page())},200))},onPageLeave=event=>{isHoverPointer(event)&&cancelPageHover()},onPanelPointer=event=>{!isHoverPointer(event)||adapters.handle()?.contains(event.target)||setPageExtended(!1)},onPageFocus=event=>{!covering()||!keyboardInput||!isFocusVisible(focusedElement(event))||setPageExtended(!0)&&adapters.analytics().pageExtended("keyboard",adapters.page())};return viewport.addEventListener("pointerenter",onPagePointer),viewport.addEventListener("pointermove",onPagePointer),viewport.addEventListener("pointerleave",onPageLeave),viewport.addEventListener("focusin",onPageFocus),panel.addEventListener("pointerover",onPanelPointer),()=>{observer?.disconnect(),insetObserver?.disconnect(),cancelPageHover(),viewport.removeAttribute(CHAT_NARROWED_ATTRIBUTE),viewport.removeEventListener("pointerenter",onPagePointer),viewport.removeEventListener("pointermove",onPagePointer),viewport.removeEventListener("pointerleave",onPageLeave),viewport.removeEventListener("focusin",onPageFocus),panel.removeEventListener("pointerover",onPanelPointer)}},pointerDown(event){let panel=panelNode();if(!panel||event.button!==0)return;event.preventDefault();let target=event.currentTarget;target?.setPointerCapture?.(event.pointerId);let startWidth=panel.getBoundingClientRect().width,sharedWidth=measureSharedWidth(panel);drag={pointerId:event.pointerId,startX:event.clientX,startWidth,sharedWidth,restingSharedWidth:restingSharedWidth(),width:null,focusedAtStart:document.activeElement===target,bodyCursor:document.body.style.cursor,bodyUserSelect:document.body.style.userSelect},panel.setAttribute("data-resizing",""),document.body.style.cursor="col-resize",document.body.style.userSelect="none",describe(startWidth,sharedWidth)},pointerMove(event){let current=drag;if(!current||event.pointerId!==current.pointerId)return;let width=clampChatPanelWidth(current.startWidth+current.startX-event.clientX,current.sharedWidth);width!==current.width&&(current.width=width,applyWidth(width,current.sharedWidth),syncPageNarrowed(width,current.restingSharedWidth),describe(width,current.sharedWidth))},endDrag,keyDown(event){let panel=panelNode(),direction=event.key==="ArrowLeft"?1:event.key==="ArrowRight"?-1:0;if(!panel||direction===0)return;event.preventDefault(),event.stopPropagation();let sharedWidth=measureSharedWidth(panel),width=clampChatPanelWidth(displayedWidth(sharedWidth)+direction*24,sharedWidth);setWidth(width,sharedWidth),keyboardResized=!0,describe(width,sharedWidth)},doubleClick(){let panel=panelNode();if(!panel)return;let sharedWidth=measureSharedWidth(panel);setWidth(null,sharedWidth),reportResize("reset",null,sharedWidth),describe(chosenWidth(sharedWidth),sharedWidth)},focus(){let panel=panelNode();if(!panel)return;let sharedWidth=measureSharedWidth(panel);describe(displayedWidth(sharedWidth),sharedWidth)},blur:flushKeyboardResize}}import React2,{createContext as createContext3,useCallback as useCallback2,useContext as useContext4,useEffect as useEffect5,useMemo as useMemo2,useRef as useRef3,useState as useState3}from"react";import{createPortal as createPortal2}from"react-dom";import{useEffect as useEffect4,useState as useState2}from"react";function place(anchor,size,options){let{align="start",offset=4,margin=8,viewport}=options,side=options.side??"bottom";if(side==="bottom"||side==="top"){let below=viewport.height-anchor.bottom-offset-margin,above=anchor.top-offset-margin;side==="bottom"&&size.height>below&&above>below?side="top":side==="top"&&size.height>above&&below>above&&(side="bottom")}else{let right=viewport.width-anchor.right-offset-margin,left2=anchor.left-offset-margin;side==="right"&&size.width>right&&left2>right?side="left":side==="left"&&size.width>left2&&right>left2&&(side="right")}let top,left;side==="bottom"||side==="top"?(top=side==="bottom"?anchor.bottom+offset:anchor.top-offset-size.height,left=align==="start"?anchor.left:align==="end"?anchor.right-size.width:anchor.left+anchor.width/2-size.width/2):(left=side==="right"?anchor.right+offset:anchor.left-offset-size.width,top=align==="start"?anchor.top:align==="end"?anchor.bottom-size.height:anchor.top+anchor.height/2-size.height/2);let maxLeft=Math.max(margin,viewport.width-margin-size.width),maxTop=Math.max(margin,viewport.height-margin-size.height);return{top:Math.round(clamp(top,margin,maxTop)),left:Math.round(clamp(left,margin,maxLeft)),side}}function clamp(value,min,max){return Math.min(max,Math.max(min,value))}function useFloatingStyle(open,anchor,panel,{side="bottom",align="start",offset=4}){let[state,setState]=useState2({top:0,left:0,side,measured:!1});return useIsoLayoutEffect(()=>{if(!open){setState(current=>current.measured?{...current,measured:!1}:current);return}let update=()=>{let anchorEl=anchor.current,panelEl=panel.current;if(!anchorEl||!panelEl)return;let rect=anchorEl.getBoundingClientRect(),viewport={width:window.innerWidth||document.documentElement.clientWidth||1024,height:window.innerHeight||document.documentElement.clientHeight||768},size={width:panelEl.offsetWidth,height:panelEl.offsetHeight},next=place(rect,size,{side,align,offset,viewport});setState(current=>current.top===next.top&&current.left===next.left&&current.side===next.side&&current.measured?current:{...next,measured:!0})};update(),window.addEventListener("resize",update),window.addEventListener("scroll",update,!0);let observer=typeof ResizeObserver<"u"?new ResizeObserver(update):null;return observer&&panel.current&&observer.observe(panel.current),()=>{window.removeEventListener("resize",update),window.removeEventListener("scroll",update,!0),observer?.disconnect()}},[open,side,align,offset]),{style:{top:state.top,left:state.left,visibility:state.measured?void 0:"hidden"},side:state.side}}function useOutsidePress(open,inside2,onDismiss){let latest=useLatest({inside:inside2,onDismiss});useEffect4(()=>{if(!open||typeof document>"u")return;let onPointerDown=event=>{eventWithin(event,latest.current.inside())||latest.current.onDismiss()};return document.addEventListener("pointerdown",onPointerDown,!0),document.addEventListener("mousedown",onPointerDown,!0),()=>{document.removeEventListener("pointerdown",onPointerDown,!0),document.removeEventListener("mousedown",onPointerDown,!0)}},[open,latest])}import{cloneElement}from"react";function setRef(ref,value){ref&&(typeof ref=="function"?ref(value):ref.current=value)}function ownRef(element){return element.props?.ref??element.ref??void 0}function cloneTrigger(element,extra){let own=element.props??{},merged={...extra};for(let[name,handler]of Object.entries(extra)){if(!/^on[A-Z]/.test(name)||typeof handler!="function")continue;let original=own[name];typeof original=="function"&&(merged[name]=event=>{original(event),event.defaultPrevented||handler(event)})}let elementRef=ownRef(element),extraRef=extra.ref;return merged.ref=node=>{setRef(elementRef,node),setRef(extraRef,node)},cloneElement(element,merged)}import{Fragment as Fragment3,jsx as jsx6,jsxs as jsxs4}from"react/jsx-runtime";var ITEM_SELECTOR="[data-nui-menu-item]",TreeContext=createContext3(null),PanelContext=createContext3(null);function useMenu(){let tree=useContext4(TreeContext);return useMemo2(()=>({close:()=>tree?.close({focusTrigger:!0}),isOpen:!!tree?.isOpen}),[tree])}function items(panel){return panel?Array.from(panel.querySelectorAll(ITEM_SELECTOR)).filter(item=>item.closest(".nui-menu")===panel&&item.getAttribute("aria-disabled")!=="true"):[]}function focusItem(panel,which){let list=items(panel);if(list.length===0)return;let active=deepActiveElement(panel?.getRootNode()),index=active?list.indexOf(active):-1,next;which==="first"?next=list[0]:which==="last"?next=list[list.length-1]:which==="next"?next=list[index===-1?0:(index+1)%list.length]:next=list[index===-1?list.length-1:(index-1+list.length)%list.length],next?.focus({preventScroll:!1})}function MenuPanel({open,anchor,side,align,label,className,tree,onKeyDownExtra,children,layerRoot,id}){let t=useT(),platform=useToolkitPlatform(),panelRef=useRef3(null),[openSub,setOpenSub]=useState3(null),{style,side:placedSide}=useFloatingStyle(open&&!!layerRoot,anchor,panelRef,{side,align,offset:side==="right"||side==="left"?2:4}),typeahead=useRef3({text:"",at:0});useEffect5(()=>{let panel=panelRef.current;if(!(!open||!panel))return tree.panels.add(panel),()=>{tree.panels.delete(panel)}},[open,tree,layerRoot]),useEffect5(()=>{open||setOpenSub(null)},[open]);let panelContext=useMemo2(()=>({tree,openSub,setOpenSub,panel:()=>panelRef.current}),[tree,openSub]);if(!open||!layerRoot)return null;let onKeyDown=event=>{if(event.nativeEvent.isComposing)return;let panel=panelRef.current;if(!onKeyDownExtra?.(event)&&event.target.closest?.(".nui-menu")===panel){switch(event.key){case"ArrowDown":event.preventDefault(),focusItem(panel,"next");return;case"ArrowUp":event.preventDefault(),focusItem(panel,"prev");return;case"Home":event.preventDefault(),focusItem(panel,"first");return;case"End":event.preventDefault(),focusItem(panel,"last");return;case"Tab":tree.close();return;case"Enter":case" ":{let target=event.target;target.matches(ITEM_SELECTOR)&&(event.preventDefault(),target.click());return}default:break}if(event.key==="ArrowRight"){let target=event.target;target.getAttribute("aria-haspopup")==="menu"&&(event.preventDefault(),target.click());return}for(let item of items(panel)){let keys=item.getAttribute("data-nui-keys");if(keys&&keys.split(`
3
3
  `).some(spec=>matchKey(event.nativeEvent,spec,platform))){event.preventDefault(),event.stopPropagation(),item.click();return}}if(event.key.length===1&&/\S/.test(event.key)&&!event.metaKey&&!event.ctrlKey&&!event.altKey){let now=Date.now(),text=(now-typeahead.current.at<700?typeahead.current.text:"")+event.key.toLowerCase();typeahead.current={text,at:now};let list=items(panel),active=deepActiveElement(panel?.getRootNode()),start=active?list.indexOf(active):-1,ordered=[...list.slice(start+1),...list.slice(0,start+1)],match=ordered.find(item=>(item.textContent||"").trim().toLowerCase().startsWith(text))??(text.length>1?void 0:ordered.find(item=>(item.textContent||"").trim().toLowerCase().startsWith(event.key.toLowerCase())));match&&(event.preventDefault(),match.focus())}}};return createPortal2(jsx6(PanelContext.Provider,{value:panelContext,children:jsx6(KeycapSurface,{on:"discreet",children:jsx6("div",{ref:panelRef,id,role:"menu","aria-label":label?t(label):void 0,"aria-orientation":"vertical",tabIndex:-1,"data-notis-escape-owned":"","data-notis-floating":"","data-state":"open","data-side":placedSide,className:cx("nui-menu",className),style,onKeyDown,onContextMenu:event=>event.preventDefault(),children})})}),layerRoot)}function resolveAnchor(anchor){return anchor?typeof anchor.getBoundingClientRect=="function"?anchor:anchor.current??null:null}var ACCELERATOR_ID="notis.menu-key:",OWNER_SALT=Math.random().toString(36).slice(2,8);function textOf(node){return node==null||typeof node=="boolean"?"":typeof node=="string"||typeof node=="number"?String(node):Array.isArray(node)?node.map(textOf).join(""):React2.isValidElement(node)?textOf(node.props.children):""}function keyedItems(children,out=[]){return React2.Children.forEach(children,child=>{if(!React2.isValidElement(child))return;if(child.type===React2.Fragment){keyedItems(child.props.children,out);return}if(child.type===MenuSub){let sub=child.props;sub.disabled||keyedItems(sub.children,out);return}if(child.type!==MenuItem)return;let props=child.props,specs=keyList(props.keys).filter(spec=>isValidKeySpec(spec)&&!isSequenceSpec(spec));specs.length&&out.push({specs,disabled:!!props.disabled,label:textOf(props.children).trim(),onSelect:props.onSelect})}),out}function groupSpecs(lists){let groups=[];for(let specs of lists){if(!specs.length)continue;let next={specs:new Set(specs),prints:new Set(keyFingerprints(specs).keys())},rest=[];for(let group of groups)if([...group.prints].some(print=>next.prints.has(print))){for(let spec of group.specs)next.specs.add(spec);for(let print of group.prints)next.prints.add(print)}else rest.push(group);groups=[...rest,next]}return groups.map(group=>[...group.specs])}function pageKeyComesFirst(core,def,event){let{platform}=core.settings,ours=core.registry.all().find(entry=>entry.def===def);if(!ours)return!1;for(let entry of core.registry.active({modalOnly:def.scope==="modal"})){if(entry.def.id.startsWith(ACCELERATOR_ID))continue;let asksLater=entry.rank<ours.rank||entry.rank===ours.rank&&entry.seq<ours.seq;if(entry.chords.some(chords=>matchChord(event,chords[0],platform)&&(chords.length>1||asksLater))&&(!entry.def.when||safeWhen(entry.def.when)))return!0}return!1}function keyFromLayer(element,event){let layer=modalLayerOf(element);if(!layer)return!1;let target=eventTarget(event),doc=element.ownerDocument;return!target||target===doc.body||target===doc.documentElement||containsComposed(layer,target)}function useMenuAccelerators({id,enabled,children,open,target}){let core=useEngineCore(),parent=useShortcutOwner(),items2=enabled?keyedItems(children):[],live=useLatest({items:items2,open,target}),itemKey=JSON.stringify(items2.map(item=>item.specs));useEffect5(()=>{let lists=live.current.items.map(item=>item.specs);if(!lists.length)return;let kind=parent===ROOT_OWNER?"host":core.registry.ownerKind(parent),allowed=new Set(lists.flat().filter(spec=>!selfClashes({id,keys:spec,scope:"route",owner:parent,ownerKind:kind}).some(clash=>clash.severity==="error"))),groups=groupSpecs(lists.map(specs=>specs.filter(spec=>allowed.has(spec))));if(!groups.length)return;let owner=`${id}:${OWNER_SALT}:keys`,release=core.defineOwner(owner,{parent,kind}),gate=scope=>{if(live.current.open)return!1;let element=live.current.target();if(!element||!isVisibleComposed(element)||keysOff(element)||element.matches(':disabled, [aria-disabled="true"]'))return!1;let layer=modalLayerOf(element);return scope==="route"?!layer:!!layer&&!openModalLayers(element.ownerDocument).some(el=>el.matches('[role="menu"], [role="listbox"]'))},unregisters=[];return groups.forEach((specs,index)=>{let label=live.current.items.find(item=>item.specs.some(spec=>specs.includes(spec)))?.label||specs[0];for(let scope of["route","modal"]){let def={id:`${ACCELERATOR_ID}${id}:${scope}:${index}`,keys:specs,scope,owner,hidden:!0,label:{en:label,fr:label},when:()=>gate(scope),run:event=>{if(!gate(scope))return!1;let{platform}=core.settings,item=live.current.items.find(entry=>!entry.disabled&&entry.specs.some(spec=>allowed.has(spec)&&matchKey(event,spec,platform)));return!item||scope==="modal"&&!keyFromLayer(live.current.target(),event)||pageKeyComesFirst(core,def,event)?!1:(item.onSelect?.(),!0)}};unregisters.push(core.register(def,owner))}}),()=>{for(let unregister of unregisters)unregister?.();release()}},[core,parent,id,itemKey])}function MenuRoot({trigger,anchor,children,align="start",side="bottom",label,open:controlledOpen,onOpenChange,className,accelerators=!0}){let[uncontrolled,setUncontrolled]=useState3(!1),open=controlledOpen??uncontrolled,triggerRef=useRef3(null),pinned=usePinnedLayerRoot(),[layerRoot,setLayerRoot]=useState3(null),focusFirst=useRef3(!1),id=useStableId("nui-menu"),latest=useLatest({onOpenChange,controlled:controlledOpen!==void 0}),panels=useRef3(new Set).current;trigger||(triggerRef.current=resolveAnchor(anchor)),useMenuAccelerators({id,enabled:accelerators,children,open,target:()=>trigger?triggerRef.current:resolveAnchor(anchor)});let setOpen=useCallback2(next=>{latest.current.controlled||setUncontrolled(next),latest.current.onOpenChange?.(next)},[latest]),tree=useMemo2(()=>({isOpen:open,panels,close:({focusTrigger=!1}={})=>{let panelList=Array.from(panels),active=deepActiveElement(triggerRef.current?.getRootNode()),focusInside2=!!active&&panelList.some(panel=>panel.contains(active));setOpen(!1),(focusTrigger||focusInside2)&&triggerRef.current&&triggerRef.current.focus({preventScroll:!0})}}),[open,panels,setOpen]);useEffect5(()=>{open&&setLayerRoot(pinned??findLayerRoot(triggerRef.current))},[open,pinned]),useEffect5(()=>{if(!open||!layerRoot)return;let frame=requestAnimationFrame(()=>{let panel=Array.from(panels).find(p=>p.id===id)??null;panel&&(focusFirst.current||!trigger?focusItem(panel,"first"):panel.focus({preventScroll:!0}),focusFirst.current=!1)});return()=>cancelAnimationFrame(frame)},[open,layerRoot,id,panels,trigger]),useOutsidePress(open,()=>[triggerRef.current,...Array.from(panels)],()=>setOpen(!1)),useEscapeLayer(`menu:${id}`,()=>open?(tree.close({focusTrigger:!0}),!0):!1,{priority:ESCAPE_PRIORITY.overlay});let triggerNode=trigger?cloneTrigger(trigger,{ref:node=>{triggerRef.current=node},"aria-haspopup":"menu","aria-expanded":open,"aria-controls":open?id:void 0,onClick:event=>{event.stopPropagation(),focusFirst.current=event.detail===0,setOpen(!open)},onKeyDown:event=>{(event.key==="ArrowDown"||event.key==="ArrowUp")&&(event.preventDefault(),focusFirst.current=!0,setOpen(!0))}}):null;return jsxs4(TreeContext.Provider,{value:tree,children:[triggerNode,jsx6(MenuPanel,{open,anchor:triggerRef,side,align,label,className,tree,layerRoot,id,children})]})}function MenuItem({children,icon,keys,tone="default",onSelect,checked,disabled,closeOnSelect=!0,className}){let tree=useContext4(TreeContext),panel=useContext4(PanelContext),platform=useToolkitPlatform(),specs=keyList(keys);return jsxs4("button",{type:"button",role:checked===void 0?"menuitem":"menuitemcheckbox","aria-checked":checked===void 0?void 0:checked,"aria-disabled":disabled||void 0,"aria-keyshortcuts":specs.length?toAriaKeyShortcuts(specs,platform):void 0,tabIndex:-1,"data-nui-menu-item":"","data-nui-keys":specs.length?specs.join(`
4
4
  `):void 0,"data-tone":tone==="danger"?"danger":void 0,className:cx("nui-menu-item",className),onPointerMove:event=>{disabled||(event.currentTarget!==deepActiveElement(event.currentTarget.getRootNode())&&event.currentTarget.focus({preventScroll:!0}),panel?.openSub&&panel.setOpenSub(null))},onClick:event=>{disabled||(onSelect?.(event),!event.defaultPrevented&&closeOnSelect&&tree?.close({focusTrigger:!0}))},children:[renderIcon(icon),jsx6("span",{className:"nui-menu-label",children}),specs.length?jsx6("span",{className:"nui-menu-keys",children:jsx6(Keycap,{keys:specs})}):null,checked!==void 0?jsx6(Icon,{name:"check",className:"nui-menu-check"}):null]})}function MenuSeparator(){return jsx6("div",{role:"separator",className:"nui-menu-sep"})}function MenuSub({label,icon,disabled,children,menuLabel}){let tree=useContext4(TreeContext),parent=useContext4(PanelContext),id=useStableId("nui-sub"),itemRef=useRef3(null),open=!!parent&&parent.openSub===id,hoverTimer=useRef3(null),layerRoot=itemRef.current?findLayerRoot(itemRef.current):null,panelId=`${id}-menu`;return useEffect5(()=>()=>{hoverTimer.current&&clearTimeout(hoverTimer.current)},[]),useEffect5(()=>{if(!open)return;let frame=requestAnimationFrame(()=>{let panel=tree?Array.from(tree.panels).find(p=>p.id===panelId)??null:null;focusItem(panel,"first")});return()=>cancelAnimationFrame(frame)},[open,panelId,tree]),!tree||!parent?null:jsxs4(Fragment3,{children:[jsxs4("button",{ref:itemRef,type:"button",role:"menuitem","aria-haspopup":"menu","aria-expanded":open,"aria-controls":open?panelId:void 0,"aria-disabled":disabled||void 0,tabIndex:-1,"data-nui-menu-item":"","data-active":flag(open),className:"nui-menu-item",onPointerMove:event=>{disabled||(event.currentTarget.focus({preventScroll:!0}),hoverTimer.current&&clearTimeout(hoverTimer.current),hoverTimer.current=setTimeout(()=>parent.setOpenSub(id),120))},onPointerLeave:()=>{hoverTimer.current&&clearTimeout(hoverTimer.current)},onClick:()=>{disabled||parent.setOpenSub(open?null:id)},children:[renderIcon(icon),jsx6("span",{className:"nui-menu-label",children:label}),jsx6(Icon,{name:"caret-right",className:"nui-menu-caret"})]}),jsx6(MenuPanel,{open,anchor:itemRef,side:"right",align:"start",label:menuLabel??(typeof label=="string"?label:void 0),tree,layerRoot,id:panelId,onKeyDownExtra:event=>event.key!=="ArrowLeft"||event.target.closest?.(".nui-menu")?.id!==panelId?!1:(event.preventDefault(),parent.setOpenSub(null),itemRef.current?.focus(),!0),children})]})}var Menu=MenuRoot;Menu.Item=MenuItem;Menu.Separator=MenuSeparator;Menu.Sub=MenuSub;import{useCallback as useCallback3,useEffect as useEffect6,useMemo as useMemo3,useRef as useRef4,useState as useState4}from"react";import{createPortal as createPortal3}from"react-dom";import{Fragment as Fragment4,jsx as jsx7,jsxs as jsxs5}from"react/jsx-runtime";var FOCUSABLE2='button:not([disabled]), [href], input:not([disabled]):not([type="hidden"]), select:not([disabled]), textarea:not([disabled]), [tabindex]:not([tabindex="-1"]), [contenteditable="true"]';function focusables(panel){return Array.from(panel.querySelectorAll(FOCUSABLE2)).filter(el=>!el.closest("[inert]"))}function Popover({trigger,content,side="bottom",align="start",modal=!1,open:controlledOpen,onOpenChange,label,className,autoFocus=!0}){let t=useT(),[uncontrolled,setUncontrolled]=useState4(!1),open=controlledOpen??uncontrolled,triggerRef=useRef4(null),panelRef=useRef4(null),pinned=usePinnedLayerRoot(),[layerRoot,setLayerRoot]=useState4(null),id=useStableId("nui-popover"),latest=useLatest({onOpenChange,controlled:controlledOpen!==void 0}),setOpen=useCallback3(next=>{latest.current.controlled||setUncontrolled(next),latest.current.onOpenChange?.(next)},[latest]),close=useCallback3((focusTrigger=!1)=>{let panel=panelRef.current,active=deepActiveElement(triggerRef.current?.getRootNode()),focusInside2=!!panel&&!!active&&panel.contains(active);setOpen(!1),(focusTrigger||focusInside2)&&triggerRef.current&&triggerRef.current.focus({preventScroll:!0})},[setOpen]),controller=useMemo3(()=>({close:()=>close(!0)}),[close]),{style,side:placedSide}=useFloatingStyle(open&&!!layerRoot,triggerRef,panelRef,{side,align,offset:6});useEffect6(()=>{open&&setLayerRoot(pinned??findLayerRoot(triggerRef.current))},[open,pinned]),useEffect6(()=>{if(!open||!layerRoot)return;let frame=requestAnimationFrame(()=>{let panel=panelRef.current;if(!panel)return;((autoFocus?focusables(panel)[0]:void 0)??panel).focus({preventScroll:!0})});return()=>cancelAnimationFrame(frame)},[open,layerRoot,autoFocus]),useOutsidePress(open,()=>[triggerRef.current,panelRef.current],()=>setOpen(!1)),useEscapeLayer(`popover:${id}`,()=>open?(close(!0),!0):!1,{priority:ESCAPE_PRIORITY.overlay});let onKeyDown=event=>{if(!modal||event.key!=="Tab")return;let panel=panelRef.current;if(!panel)return;let list=focusables(panel);if(!list.length){event.preventDefault();return}let active=deepActiveElement(panel.getRootNode()),first=list[0],last=list[list.length-1];event.shiftKey&&(active===first||active===panel)?(event.preventDefault(),last.focus()):!event.shiftKey&&active===last&&(event.preventDefault(),first.focus())},triggerNode=cloneTrigger(trigger,{ref:node=>{triggerRef.current=node},"aria-haspopup":"dialog","aria-expanded":open,"aria-controls":open?id:void 0,onClick:event=>{event.stopPropagation(),setOpen(!open)}});return jsxs5(Fragment4,{children:[triggerNode,open&&layerRoot?createPortal3(jsx7("div",{ref:panelRef,id,role:"dialog","aria-modal":modal?"true":void 0,"aria-label":label?t(label):void 0,tabIndex:-1,"data-notis-escape-owned":"","data-notis-floating":"","data-notis-nonmodal":modal?void 0:"","data-side":placedSide,className:cx("nui-popover",className),style,onKeyDown,children:typeof content=="function"?content(controller):content}),layerRoot):null]})}import{useEffect as useEffect7,useRef as useRef5,useState as useState5}from"react";import{createPortal as createPortal4}from"react-dom";import{Fragment as Fragment5,jsx as jsx8,jsxs as jsxs6}from"react/jsx-runtime";function Tooltip({label,keys,side="top",align="center",delay=500,children,disabled}){let t=useT(),[open,setOpen]=useState5(!1),anchorRef=useRef5(null),tipRef=useRef5(null),timer=useRef5(null),pinned=usePinnedLayerRoot(),id=useStableId("nui-tip"),{style}=useFloatingStyle(open,anchorRef,tipRef,{side,align,offset:6}),clear=()=>{timer.current&&(clearTimeout(timer.current),timer.current=null)},show=now=>{disabled||(clear(),now?setOpen(!0):timer.current=setTimeout(()=>setOpen(!0),delay))},hide=()=>{clear(),setOpen(!1)};useEffect7(()=>()=>clear(),[]),useEffect7(()=>{disabled&&hide()},[disabled]),useEffect7(()=>{if(!open||typeof document>"u")return;let onKey=()=>hide();return document.addEventListener("keydown",onKey,!0),document.addEventListener("pointerdown",onKey,!0),()=>{document.removeEventListener("keydown",onKey,!0),document.removeEventListener("pointerdown",onKey,!0)}},[open]);let layerRoot=open?pinned??findLayerRoot(anchorRef.current):null,trigger=cloneTrigger(children,{ref:node=>{anchorRef.current=node},"aria-describedby":open?id:void 0,onPointerEnter:event=>{event.pointerType!=="touch"&&show(!1)},onPointerLeave:hide,onFocus:event=>{let target=event.target,visible=!0;try{visible=target.matches(":focus-visible")}catch{visible=!0}visible&&show(!0)},onBlur:hide});return jsxs6(Fragment5,{children:[trigger,open&&layerRoot?createPortal4(jsx8(KeycapSurface,{on:"tooltip",children:jsxs6("div",{ref:tipRef,id,role:"tooltip",className:"nui-tip",style,children:[jsx8("span",{children:t(label)}),keys?jsx8(Keycap,{keys}):null]})}),layerRoot):null]})}import{useCallback as useCallback13,useEffect as useEffect16,useImperativeHandle,useMemo as useMemo11,useRef as useRef15,useState as useState13}from"react";var ACTION_TOAST_MS=6e3,ACTION_WORDS=Object.freeze({failed:w("That did not work. Try again.","\xC7a n\u2019a pas march\xE9. R\xE9essaie."),resultUnknown:w("We could not confirm the result. Check before trying again.","Impossible de confirmer le r\xE9sultat. V\xE9rifie avant de r\xE9essayer."),undone:w("Undone.","Annul\xE9."),undoing:w("Undoing\u2026","Annulation\u2026"),undoFailed:w("Could not undo that.","Impossible d\u2019annuler."),dismiss:w("Dismiss","Fermer"),failedOne:w("1 item could not be changed. It stays selected.","1 \xE9l\xE9ment n\u2019a pas pu \xEAtre modifi\xE9. Il reste s\xE9lectionn\xE9."),failedMany:w("{n} items could not be changed. They stay selected.","{n} \xE9l\xE9ments n\u2019ont pas pu \xEAtre modifi\xE9s. Ils restent s\xE9lectionn\xE9s.")});function failedItemsWords(n){return n===1?ACTION_WORDS.failedOne:fillWords(ACTION_WORDS.failedMany,{n})}import{jsx as jsx9,jsxs as jsxs7}from"react/jsx-runtime";function ActionToast({toast,onUndo,onDismiss,owner}){let t=useT(),entry=DEFAULT_KEYMAP.undo,canUndo=!!toast?.undo,undoing=!!toast?.undoing;return useShortcuts(canUndo?[{id:entry.id,keys:[...entry.keys],scope:entry.scope,label:entry.label,...owner?{owner}:{},when:()=>canUndo,run:()=>canUndo?(undoing||onUndo(),!0):!1}]:[]),toast?jsx9("div",{className:"nui-toast-wrap",children:jsxs7("div",{className:"nui-toast",role:"status","aria-live":"polite","data-tone":toast.tone==="danger"?"danger":void 0,children:[jsxs7("span",{className:"nui-toast-text",children:[jsx9("span",{className:"nui-toast-words",children:t(toast.words)}),toast.reason&&jsx9("span",{className:"nui-toast-reason",children:t(toast.reason)})]}),toast.undo&&jsxs7("button",{type:"button",className:"nui-toast-btn","aria-disabled":undoing||void 0,"aria-busy":undoing||void 0,onClick:()=>{undoing||onUndo()},children:[t(undoing?ACTION_WORDS.undoing:SHELL_WORDS.undo),!undoing&&jsx9(Keycap,{keys:"z",on:"discreet"})]}),onDismiss&&!undoing&&jsx9("button",{type:"button",className:"nui-toast-x","aria-label":t(ACTION_WORDS.dismiss),onClick:onDismiss,children:jsx9(Icon,{name:"x"})})]})}):null}import{useCallback as useCallback5,useMemo as useMemo5,useRef as useRef7,useState as useState7}from"react";import{useCallback as useCallback4,useEffect as useEffect8,useMemo as useMemo4,useRef as useRef6,useState as useState6}from"react";function useToast(options={}){let[toast,setToast]=useState6(null),current=useRef6(null),timer=useRef6(null),seq=useRef6(0),optionsRef=useRef6(options);optionsRef.current=options;let clearTimer=()=>{timer.current&&clearTimeout(timer.current),timer.current=null},set=next=>{current.current=next,setToast(next)};useEffect8(()=>clearTimer,[]);let show=useCallback4(next=>{clearTimer();let state={...next,undoing:!1,id:++seq.current};set(state),timer.current=setTimeout(()=>{timer.current=null,current.current?.id===state.id&&!current.current.undoing&&set(null)},ACTION_TOAST_MS)},[]),notify=useCallback4((words,notifyOptions={})=>{show({words:toWords(words),reason:notifyOptions.reason?toWords(notifyOptions.reason):null,tone:notifyOptions.tone??"default",undo:notifyOptions.undo??null})},[show]),dismiss=useCallback4(()=>{current.current?.undoing||(clearTimer(),set(null))},[]),undo=useCallback4(async()=>{let shown=current.current;if(!(!shown?.undo||shown.undoing)){clearTimer(),set({...shown,undoing:!0});try{await shown.undo(),(!current.current||current.current.id===shown.id)&&show({words:ACTION_WORDS.undone,reason:null,tone:"default",undo:null})}catch(error){let reason=actionErrorReason(error);show({words:ACTION_WORDS.undoFailed,reason:reason?toWords(reason):null,tone:"danger",undo:null}),optionsRef.current.onError?.(error)}}},[show]);return useMemo4(()=>({toast,notify,undo,dismiss}),[toast,notify,undo,dismiss])}var DELETE_ACTION_TIMEOUT_MS=12e4,DeleteActionTimeout=class extends Error{code="notis_action_result_unknown";constructor(){super(ACTION_WORDS.resultUnknown.en),this.name="DeleteActionTimeout"}};function withDeleteDeadline(run){let timer;return Promise.race([Promise.resolve().then(run),new Promise((_,reject)=>{timer=setTimeout(()=>reject(new DeleteActionTimeout),DELETE_ACTION_TIMEOUT_MS)})]).finally(()=>clearTimeout(timer))}function resolveActions(refs,handlers={}){let out=[],seen=new Set;for(let ref of refs){let def=resolveActionRef(ref);if(seen.has(def.id))continue;let standard=isStandardActionId(def.id)?STANDARD_ACTIONS[def.id]:null;if(standard?.managerOnly)continue;let run=def.run??(standard?handlers[standard.id]:void 0);if(!run||!def.label)continue;seen.add(def.id);let options=def.options;out.push({id:def.id,label:toWords(def.label),icon:def.icon,key:def.key,tone:def.tone??"default",bulk:def.bulk??!0,appliesTo:def.appliesTo,run,toast:def.toast?def.toast:def.toast===void 0?void 0:null,toggle:def.toggle??standard?.toggle,picker:!!standard?.picker||!!options,options:options?items2=>typeof options=="function"?options(items2):options:void 0,value:def.value})}return out}function availableActions(actions,items2){if(!items2.length)return[];let result=[],fitsAll=action=>!action.appliesTo||items2.every(action.appliesTo),fitsSome=action=>!action.appliesTo||items2.some(action.appliesTo),handled=new Set;for(let action of actions){if(handled.has(action.id))continue;let partner=action.toggle?actions.find(other=>other.id===action.toggle):void 0;if(partner){handled.add(action.id),handled.add(partner.id);let pair=actions.indexOf(partner)<actions.indexOf(action)?[partner,action]:[action,partner],picked=pair.find(fitsAll)??pair.find(fitsSome);picked&&result.push(picked);continue}fitsSome(action)&&result.push(action)}return result}function isActionResult(value){return!!value&&typeof value=="object"&&!Array.isArray(value)}function iconSignature(icon){return icon===void 0?"":typeof icon=="string"?icon:"node"}function wordsSignature(words){return`${words.en}${words.fr}`}function useActions(refs,handlers={},options={}){let[busy,setBusy]=useState7(()=>new Set),busyRef=useRef7(new Set),optionsRef=useRef7(options);optionsRef.current=options;let toaster=useToast({onError:error=>optionsRef.current.onError?.(error,{id:"undo"})}),{notify}=toaster,refsRef=useRef7(refs);refsRef.current=refs;let handlersRef=useRef7(handlers);handlersRef.current=handlers;let runtime=useNotisRuntime(),resolved=resolveActions(refs,handlers),signature=resolved.map(action=>[action.id,wordsSignature(action.label),iconSignature(action.icon),keySignature(action.key),action.tone,action.bulk?1:0,action.toggle??"",action.picker?1:0,action.appliesTo?1:0,action.options?1:0,action.value?1:0,action.toast===null?0:1].join("")).join(""),actions=useMemo5(()=>resolved.map(action=>{let live=()=>resolveActions(refsRef.current,handlersRef.current).find(item=>item.id===action.id)??action;return{...action,run:((items2,choice)=>live().run(items2,choice)),appliesTo:action.appliesTo?item=>(live().appliesTo??action.appliesTo)(item):void 0,toast:action.toast===null?null:n=>{let current=live().toast;return current?current(n):null},options:action.options?items2=>(live().options??action.options)(items2):void 0,value:action.value?items2=>(live().value??action.value)(items2):void 0}}),[signature]),markBusy=useCallback5((id,on)=>{on?busyRef.current.add(id):busyRef.current.delete(id),setBusy(new Set(busyRef.current))},[]),run=useCallback5(async(actionOrId,items2,choice)=>{let action=typeof actionOrId=="string"?actions.find(item=>item.id===actionOrId):actionOrId;if(!action)return{status:"cancelled",done:[],failed:[]};if(busyRef.current.has(action.id))return{status:"busy",done:[],failed:[]};let targets=action.appliesTo?items2.filter(action.appliesTo):[...items2];if(!targets.length)return{status:"cancelled",done:[],failed:[]};markBusy(action.id,!0);let keys=action.id==="delete"?targets.map(recordKeyOf):[],hidden=keys.some(Boolean)?runtime?.queryClient?.hideRecords?.(keys.filter(key=>!!key)):void 0,settled=!1;try{let result=action.id==="delete"?await withDeleteDeadline(()=>action.run(targets,choice)):await action.run(targets,choice),ranUndo=typeof result=="function"?result:isActionResult(result)&&typeof result.undo=="function"?result.undo:null,detail=isActionResult(result)&&typeof result!="function"?result:null;if(detail?.cancelled)return{status:"cancelled",done:[],failed:[]};let failedSet=new Set(detail?.failed??[]),failed=targets.filter(item=>failedSet.has(item)),done=targets.filter(item=>!failedSet.has(item));hidden&&(hidden.commit(done.map(recordKeyOf).filter(key=>!!key)),hidden.restore(failed.map(recordKeyOf).filter(key=>!!key)),settled=!0);let undo=ranUndo&&hidden?async()=>{hidden.restore(),await ranUndo()}:ranUndo,reason=detail?.reason?toWords(detail.reason):null;if(failed.length&&!done.length)return notify(ACTION_WORDS.failed,{tone:"danger",reason}),{status:"failed",done,failed};if(failed.length)return notify(failedItemsWords(failed.length),{tone:"danger",undo,reason}),{status:"done",done,failed};let words;if(detail&&Object.prototype.hasOwnProperty.call(detail,"toast"))words=detail.toast?toWords(detail.toast):null;else{let custom=action.toast?action.toast(done.length):null;words=custom?toWords(custom):undo&&action.toast!==null?action.label:null}return words?notify(words,{undo,reason}):reason&&notify(reason,{undo}),{status:"done",done,failed}}catch(error){return notify(error instanceof DeleteActionTimeout?ACTION_WORDS.resultUnknown:ACTION_WORDS.failed,{tone:"danger",reason:actionErrorReason(error)}),optionsRef.current.onError?.(error,{id:action.id}),{status:"failed",done:[],failed:targets}}finally{hidden&&!settled&&hidden.restore(),markBusy(action.id,!1)}},[actions,notify,markBusy,runtime]),available=useCallback5(items2=>availableActions(actions,items2),[actions]),isBusy=useCallback5(id=>busyRef.current.has(id),[]);return{actions,available,run,busy,isBusy,toast:toaster.toast,notify,undo:toaster.undo,dismiss:toaster.dismiss}}function recordKeyOf(item){if(!item||typeof item!="object")return null;let value=item.record_key??item.recordKey;return typeof value=="string"&&value?value:null}function keySignature(key){return key===void 0?"":Array.isArray(key)?key.join(","):String(key)}import{forwardRef,useEffect as useEffect9,useRef as useRef8}from"react";import{jsx as jsx10,jsxs as jsxs8}from"react/jsx-runtime";var BLOCK_WORDS=Object.freeze({previousPage:{en:"Previous page",fr:"Page pr\xE9c\xE9dente"},nextPage:{en:"Next page",fr:"Page suivante"},pageOf:{en:"Page {page} of {count}",fr:"Page {page} sur {count}"},rangeOf:{en:"{from} to {to} of {total}",fr:"{from} \xE0 {to} sur {total}"},pagination:{en:"Pages",fr:"Pages"},emptyTitle:{en:"Nothing here yet",fr:"Rien ici pour l\u2019instant"},emptyBody:{en:"Items show up here as soon as there are some.",fr:"Les \xE9l\xE9ments s\u2019affichent ici d\xE8s qu\u2019il y en a."}});function Section({kind="data",title,count,meta,tabs,actions,children,className}){let t=useT(),hasMeta=meta!=null&&meta!==!1,head=title!==void 0||typeof count=="number"||hasMeta||!!tabs||!!actions;return jsxs8("section",{className:cx("nui-section",className),"data-kind":kind,children:[head&&jsxs8("div",{className:"nui-section-head",children:[title!==void 0&&jsx10("h2",{className:"nui-section-title",children:t(title)}),typeof count=="number"&&jsx10("span",{className:"nui-section-count",children:count}),hasMeta&&jsx10("span",{className:"nui-section-meta",children:textOrNode(meta,t)}),tabs&&jsx10("div",{className:"nui-section-tabs",children:tabs}),actions&&jsx10("div",{className:"nui-section-actions",children:actions})]}),children]})}function textOrNode(value,t){return typeof value=="string"||isWords2(value)?t(value):value}function Badge({tone="default",icon,children,className}){let t=useT();return jsxs8("span",{className:cx("nui-badge",className),"data-tone":tone==="default"?void 0:tone,children:[icon!==void 0&&renderIcon(icon),textOrNode(children,t)]})}function isWords2(value){return!!value&&typeof value=="object"&&typeof value.en=="string"&&typeof value.fr=="string"}var Button=forwardRef(function({variant="default",size="md",icon,pressed,children,className,type="button",...rest},ref){let t=useT();return jsxs8("button",{ref,type,className:cx("nui-btn",className),"aria-pressed":pressed,"data-variant":variant==="default"?void 0:variant,"data-size":size==="md"?void 0:size,...rest,children:[icon!==void 0&&renderIcon(icon),isWords2(children)?t(children):children]})});function ToggleGroup({options,value,onChange,label,size="sm",className}){let t=useT(),on=new Set(value);return jsx10("div",{role:"group",className:cx("nui-toggles",className),"aria-label":label!==void 0?t(label):void 0,children:options.map(option=>{let pressed=on.has(option.value);return jsxs8(Button,{size,pressed,disabled:option.disabled,icon:option.icon,onClick:()=>onChange(options.filter(other=>other.value===option.value?!pressed:on.has(other.value)).map(other=>other.value)),children:[t(option.label),typeof option.count=="number"&&jsx10("span",{className:"nui-btn-count",children:option.count})]},option.value)})})}function SegmentedControl({options,value,onChange,label,className}){let t=useT(),groupRef=useRef8(null);return useEffect9(()=>{revealInline(groupRef.current?.querySelector('[aria-pressed="true"]'))},[value]),jsx10("div",{ref:groupRef,role:"group",className:cx("nui-seg",className),"aria-label":label!==void 0?t(label):void 0,children:options.map(option=>jsxs8("button",{type:"button","aria-pressed":option.value===value,disabled:option.disabled,onClick:()=>{option.value!==value&&onChange(option.value)},children:[option.icon!==void 0&&renderIcon(option.icon),t(option.label),typeof option.count=="number"&&jsx10("span",{className:"nui-seg-count",children:option.count})]},option.value))})}function Switch({checked,onChange,label,hideLabel=!1,disabled=!1,busy=!1,size="sm",className}){let name=useT()(label);return jsxs8("button",{type:"button",role:"switch","aria-checked":checked,"aria-label":hideLabel?name:void 0,"aria-busy":busy||void 0,disabled,"data-size":size==="md"?"md":void 0,className:cx("nui-switch",className),onClick:event=>{event.stopPropagation(),!(disabled||busy)&&onChange(!checked)},children:[jsx10("span",{className:"nui-switch-track","aria-hidden":"true",children:jsx10("span",{className:"nui-switch-thumb"})}),!hideLabel&&jsx10("span",{className:"nui-switch-label",children:name})]})}function Pagination({page,pageCount,total:total2,pageSize,onChange,busy=!1,className}){let t=useT(),count=Math.max(1,pageCount??(total2!==void 0&&pageSize?Math.ceil(total2/pageSize):1)),current=Math.min(Math.max(1,Math.floor(page)),count),label=total2!==void 0&&pageSize?fillWords(BLOCK_WORDS.rangeOf,{from:total2===0?0:(current-1)*pageSize+1,to:Math.min(total2,current*pageSize),total:total2}):fillWords(BLOCK_WORDS.pageOf,{page:current,count});return jsxs8("nav",{className:cx("nui-pagination",className),"aria-label":t(BLOCK_WORDS.pagination),children:[jsx10("span",{className:"nui-pagination-label","aria-live":"polite",children:t(label)}),jsx10("button",{type:"button",className:"nui-icon-btn","aria-label":t(BLOCK_WORDS.previousPage),disabled:busy||current<=1,onClick:()=>onChange(current-1),children:jsx10(Icon,{name:"caret-left"})}),jsx10("button",{type:"button",className:"nui-icon-btn","aria-label":t(BLOCK_WORDS.nextPage),disabled:busy||current>=count,onClick:()=>onChange(current+1),children:jsx10(Icon,{name:"caret-right"})})]})}function NativeSelect({options,value,onChange,label,className,...rest}){let t=useT();return jsx10("select",{className:cx("nui-select",className),value,"aria-label":label!==void 0?t(label):void 0,onChange:event=>onChange(event.target.value),...rest,children:options.map(option=>jsx10("option",{value:option.value,disabled:option.disabled,children:t(option.label)},option.value))})}function EmptyState({title=BLOCK_WORDS.emptyTitle,body,action,icon,className}){let t=useT();return jsxs8("div",{className:cx("nui-empty",className),children:[icon!==void 0&&renderIcon(icon),jsx10("p",{className:"nui-empty-title",children:t(title)}),body!==void 0&&jsx10("p",{className:"nui-empty-body",children:t(body)}),action&&jsx10("div",{className:"nui-empty-action",children:action})]})}function Notice({tone="default",children,onRetry,action,urgent=!1,className}){let t=useT();return jsxs8("div",{className:cx("nui-notice",className),"data-tone":tone==="default"?void 0:tone,role:urgent?"alert":"status",children:[jsx10("div",{className:"nui-notice-text",children:isWords2(children)?t(children):children}),action,onRetry&&jsx10(Button,{size:"sm",onClick:onRetry,children:t(SHELL_WORDS.tryAgain)})]})}function Metric({label,value,delta,trend,invert=!1,hint,className}){let t=useT(),shown=trend==="flat"||trend===void 0?void 0:trend==="up"!==invert?"up":"down";return jsxs8("div",{className:cx("nui-metric",className),children:[jsx10("span",{className:"nui-metric-label",children:t(label)}),jsx10("span",{className:"nui-metric-value",children:value}),delta!=null&&jsx10("span",{className:"nui-metric-delta","data-trend":shown,children:delta}),hint!==void 0&&jsx10("span",{className:"nui-metric-hint",children:t(hint)})]})}import{useCallback as useCallback7,useEffect as useEffect11,useId as useId2,useMemo as useMemo6,useRef as useRef10,useState as useState9}from"react";import*as React5 from"react";function cssEscape(value){return typeof CSS<"u"&&typeof CSS.escape=="function"?CSS.escape(value):value.replace(/["\\]/g,"\\$&")}function useElementWidth(ref){let[width,setWidth]=React5.useState(1200);return React5.useEffect(()=>{let el=ref.current;if(!el)return;let measure2=()=>{el.clientWidth&&setWidth(el.clientWidth)};if(measure2(),typeof ResizeObserver>"u")return;let observer=new ResizeObserver(measure2);return observer.observe(el),()=>observer.disconnect()},[ref]),width}function useCursorFocus(rootRef,cursor){let pending=React5.useRef(null),focusNow=React5.useCallback(id=>{let root=rootRef.current,el=root?.querySelector(`[data-nav-id="${cssEscape(id)}"]`);if(!root||!el)return;let active=deepActiveElement(root.getRootNode());(!active||active===root.ownerDocument.body||root.contains(active))&&el.focus({preventScroll:!0}),el.scrollIntoView?.({block:"nearest",inline:"nearest"})},[rootRef]);return React5.useEffect(()=>{let id=pending.current;id===null||id!==cursor||(pending.current=null,focusNow(id))},[cursor,focusNow]),React5.useCallback((id,current)=>{id!==null&&(pending.current=id,id===current&&focusNow(id))},[focusNow])}function focusFreeFor(root){if(!root)return!1;let active=deepActiveElement(root.getRootNode());return!active||active===root.ownerDocument.body||root.contains(active)}function focusInside(root){if(!root)return!1;let active=deepActiveElement(root.getRootNode());return!!active&&active!==root.ownerDocument.body&&root.contains(active)}function useKeepFocusInside(rootRef){let armed=React5.useRef(!1);return React5.useEffect(()=>{if(!armed.current)return;armed.current=!1;let root=rootRef.current;root&&!focusInside(root)&&root.focus({preventScroll:!0})}),React5.useCallback(()=>{focusInside(rootRef.current)&&(armed.current=!0,setTimeout(()=>{armed.current=!1},0))},[rootRef])}function keymapDef(id,label,when,run){let entry=DEFAULT_KEYMAP[id];return{id:entry.id,keys:[...entry.keys],scope:entry.scope,label,when,run,...entry.repeat?{repeat:!0}:{}}}import{Fragment as Fragment6,jsx as jsx11,jsxs as jsxs9}from"react/jsx-runtime";var TABS_WORDS=Object.freeze({views:{en:"Views",fr:"Vues"},previousView:{en:"Previous view",fr:"Vue pr\xE9c\xE9dente"},nextView:{en:"Next view",fr:"Vue suivante"}}),TABROW_WORDS=Object.freeze({filters:{en:"Filters",fr:"Filtres"},more:{en:"More",fr:"Plus"},showMore:{en:"Show more",fr:"Afficher plus"}}),MORE_GUESS=72;function tabIds(prefix,value){let safe=value.replace(/[^A-Za-z0-9_-]/g,"_");return{tab:`${prefix}-tab-${safe}`,panel:`${prefix}-panel-${safe}`}}function tabPanelProps(prefix,value){let ids=tabIds(prefix,value);return{id:ids.panel,role:"tabpanel","aria-labelledby":ids.tab,tabIndex:0}}function stepIn(list,keyOf,from,direction){let count=list.length,found=list.findIndex(item=>keyOf(item)===from),start=found!==-1?found:direction===1?-1:count;for(let step=1;step<=count;step+=1){let item=list[((start+direction*step)%count+count)%count];if(!item.disabled&&keyOf(item)!==from)return item}return null}function edgeIn(list,end){return(end==="first"?list:[...list].reverse()).find(item=>!item.disabled)??null}var tabValue=tab=>tab.value,rowItemId=item=>item.id;function stepTab(tabs,from,direction){return stepIn(tabs,tabValue,from,direction)?.value??null}function Tabs({tabs,value,onChange,label,keys=!0,activation="auto",children,id,className,panelClassName}){let t=useT(),generated=useId2(),prefix=id??`nui-tabs${generated.replace(/[^A-Za-z0-9_-]/g,"")}`,stripRef=useRef10(null),latest=useRef10({tabs,value,onChange});latest.current={tabs,value,onChange};let tabElement=useCallback7(tabValue2=>stripRef.current?.querySelector(`[data-tab-value="${cssEscape(tabValue2)}"]`)??null,[]);useEffect11(()=>{revealInline(tabElement(value))},[value,tabElement]);let show=useCallback7((next,focus)=>{let{value:current,onChange:change}=latest.current;next!==current&&change(next),focus&&tabElement(next)?.focus()},[tabElement]),focusInStrip=()=>{let strip=stripRef.current,active=strip?.ownerDocument.activeElement??null;return!!strip&&!!active&&strip.contains(active)},defs=useMemo6(()=>{if(!keys)return[];let live=()=>isVisibleComposed(stripRef.current)&&latest.current.tabs.filter(tab=>!tab.disabled).length>1,step=direction=>()=>{let{tabs:list,value:current}=latest.current,next=stepTab(list,current,direction);if(next===null)return!1;show(next,focusInStrip())},def=(entry,label2,run)=>({id:entry.id,keys:[...entry.keys],scope:entry.scope,label:label2,when:live,run});return[def(DEFAULT_KEYMAP["view.prev"],TABS_WORDS.previousView,step(-1)),def(DEFAULT_KEYMAP["view.next"],TABS_WORDS.nextView,step(1))]},[keys,show]);useShortcuts(defs,[defs]);let onKeyDown=event=>{if(event.metaKey||event.ctrlKey||event.altKey)return;let from=event.target.closest('[role="tab"]')?.dataset.tabValue??value,next=null;if(event.key==="ArrowRight")next=stepTab(tabs,from,1);else if(event.key==="ArrowLeft")next=stepTab(tabs,from,-1);else if(event.key==="Home")next=edgeIn(tabs,"first")?.value??null;else if(event.key==="End")next=edgeIn(tabs,"last")?.value??null;else return;event.preventDefault(),event.stopPropagation(),!(next===null||next===from)&&(activation==="auto"?show(next,!0):tabElement(next)?.focus())},activeIds=tabIds(prefix,value);return jsxs9(Fragment6,{children:[jsx11("div",{ref:stripRef,role:"tablist","aria-orientation":"horizontal",className:cx("nui-tabs",className),"aria-label":t(label??TABS_WORDS.views),onKeyDown,children:tabs.map(tab=>{let selected=tab.value===value,ids=tabIds(prefix,tab.value);return jsxs9("button",{type:"button",role:"tab",id:ids.tab,"data-tab-value":tab.value,"aria-selected":selected,"aria-controls":ids.panel,tabIndex:selected?0:-1,disabled:tab.disabled,className:"nui-tab",onClick:()=>show(tab.value,!1),children:[tab.icon!==void 0&&renderIcon(tab.icon),jsx11("span",{className:"nui-tab-label",children:t(tab.label)}),typeof tab.count=="number"&&jsx11("span",{className:"nui-tab-count",children:tab.count})]},tab.value)})}),children!==void 0&&jsx11("div",{id:activeIds.panel,role:"tabpanel","aria-labelledby":activeIds.tab,tabIndex:0,className:cx("nui-tabpanel",panelClassName),children})]})}function splitItems(items2,value,maxVisible){if(maxVisible===void 0||items2.length<=maxVisible)return{shown:items2,hidden:[]};let cap=Math.max(1,Math.floor(maxVisible)),active=items2.findIndex(item=>item.id===value),shown=active>=cap?[...items2.slice(0,cap-1),items2[active]]:items2.slice(0,cap),ids=new Set(shown.map(item=>item.id));return{shown,hidden:items2.filter(item=>!ids.has(item.id))}}function px(...values){return values.reduce((total2,value)=>total2+(parseFloat(value??"")||0),0)}function TabRow({role,items:items2,value,onChange,label,maxVisible,lead,end,inset="list",keys=!1,id,className}){let t=useT(),generated=useId2(),prefix=id??`nui-tabrow${generated.replace(/[^A-Za-z0-9_-]/g,"")}`,isTabs=role==="tabs",stripRef=useRef10(null),focusNext=useRef10(null),widths=useRef10(new Map),moreWidth=useRef10(MORE_GUESS),[fit,setFit]=useState9(void 0),sizeKey=items2.map(item=>[item.id,t(item.label),item.count??"",typeof item.icon=="string"?item.icon:item.icon===void 0?"":"*"].join("")).join(""),[measuredKey,setMeasuredKey]=useState9(null),measuring=measuredKey!==sizeKey,limit=measuring?void 0:fit??maxVisible,{shown,hidden}=useMemo6(()=>splitItems(items2,value,limit),[items2,value,limit]),latest=useRef10({items:items2,value,onChange,maxVisible});latest.current={items:items2,value,onChange,maxVisible};let pill=useCallback7(itemId=>stripRef.current?.querySelector(`[data-item-id="${cssEscape(itemId)}"]`)??null,[]),refit=useCallback7(()=>{let strip=stripRef.current,tabs=strip?.parentElement,row=tabs?.parentElement,view=row?.ownerDocument.defaultView;if(!strip||!tabs||!row||!view)return;let{items:list,value:current,maxVisible:cap}=latest.current,rowStyle=view.getComputedStyle(row),stripStyle=view.getComputedStyle(strip),gap=px(rowStyle.columnGap),more=row.querySelector(":scope > .nui-tabrow-more");more&&more.offsetWidth>0&&(moreWidth.current=more.offsetWidth);let room=row.clientWidth-px(rowStyle.paddingLeft,rowStyle.paddingRight);for(let kid of Array.from(row.children))kid!==tabs&&kid!==more&&(room-=kid.offsetWidth+gap);if(row.clientWidth<=0)return;if(list.some(item=>!widths.current.has(item.id))){setMeasuredKey(null);return}let pillGap=px(stripStyle.columnGap),span=pills=>pills.reduce((total2,item,index)=>total2+(widths.current.get(item.id)??0)+(index>0?pillGap:0),px(stripStyle.paddingLeft,stripStyle.paddingRight)),all=splitItems(list,current,cap),next;if(all.hidden.length===0&&span(all.shown)<=room)next=void 0;else{let left=room-gap-moreWidth.current;next=1;for(let count=Math.min(cap??list.length,list.length);count>1;count-=1)if(span(splitItems(list,current,count).shown)<=left){next=count;break}cap!==void 0&&next>=cap&&(next=void 0)}setFit(prev=>prev===next?prev:next)},[]);useIsoLayoutEffect(()=>{let strip=stripRef.current,laidOut=!!strip?.parentElement?.parentElement&&strip.parentElement.parentElement.clientWidth>0;if(measuring&&widths.current.clear(),strip&&laidOut)for(let kid of Array.from(strip.children)){if(kid.dataset.itemId===void 0)continue;let label2=kid.querySelector(":scope > .nui-pill-label"),cut=label2?Math.max(0,label2.scrollWidth-label2.clientWidth):0;widths.current.set(kid.dataset.itemId,kid.offsetWidth+cut)}if(measuring){setMeasuredKey(sizeKey);return}refit()}),useEffect11(()=>{let row=stripRef.current?.closest(".nui-tabrow");if(!row)return;let observer=typeof ResizeObserver<"u"?new ResizeObserver(()=>refit()):null;observer?.observe(row);let alive=!0;return row.ownerDocument.fonts?.ready.then(()=>{alive&&setMeasuredKey(null)}),()=>{alive=!1,observer?.disconnect()}},[refit]);let shownKey=shown.map(item=>item.id).join(`
5
5
  `);useEffect11(()=>{let wanted=focusNext.current;focusNext.current=null,wanted!==null&&wanted===value&&pill(value)?.focus()},[value,shownKey,pill]);let select=useCallback7((next,focus)=>{let{value:current,onChange:change}=latest.current;if(next!==current&&change(next),!focus)return;let target=pill(next);target?target.focus():focusNext.current=next},[pill]),focusInRow=()=>{let strip=stripRef.current,row=strip?.closest(".nui-tabrow")??null,active=strip?deepActiveElement(strip.getRootNode()):null;return!!row&&!!active&&row.contains(active)},defs=useMemo6(()=>{if(!keys)return[];let live=()=>isVisibleComposed(stripRef.current)&&latest.current.items.filter(item=>!item.disabled).length>1,step=direction=>()=>{let{items:list,value:current}=latest.current,next=stepIn(list,rowItemId,current,direction);if(next===null)return!1;select(next.id,focusInRow())},def=(entry,label2,run)=>({id:entry.id,keys:[...entry.keys],scope:entry.scope,label:label2,when:live,run});return[def(DEFAULT_KEYMAP["view.prev"],TABS_WORDS.previousView,step(-1)),def(DEFAULT_KEYMAP["view.next"],TABS_WORDS.nextView,step(1))]},[keys,select]);useShortcuts(defs,[defs]);let onKeyDown=event=>{if(event.metaKey||event.ctrlKey||event.altKey)return;let from=event.target.closest("[data-item-id]")?.dataset.itemId??value,forward=event.key==="ArrowRight"||!isTabs&&event.key==="ArrowDown",back=event.key==="ArrowLeft"||!isTabs&&event.key==="ArrowUp",next=null;if(forward)next=stepIn(shown,rowItemId,from,1);else if(back)next=stepIn(shown,rowItemId,from,-1);else if(event.key==="Home")next=edgeIn(shown,"first");else if(event.key==="End")next=edgeIn(shown,"last");else return;event.preventDefault(),event.stopPropagation(),!(next===null||next.id===from)&&select(next.id,!0)},tabStop=shown.some(item=>item.id===value&&!item.disabled)?value:edgeIn(shown,"first")?.id;return jsxs9("div",{className:cx("nui-tabrow",className),"data-inset":inset==="page"?"page":void 0,"data-fold":!measuring&&limit===1&&hidden.length>0?"least":void 0,children:[lead,jsx11("div",{className:"nui-tabrow-tabs",children:jsx11("div",{ref:stripRef,role:isTabs?"tablist":"radiogroup","aria-orientation":isTabs?"horizontal":void 0,"aria-label":t(label??(isTabs?TABS_WORDS.views:TABROW_WORDS.filters)),className:"nui-tabrow-strip",onKeyDown,children:shown.map(item=>{let on=item.id===value,ids=tabIds(prefix,item.id);return jsxs9("button",{type:"button",className:"nui-pill","data-item-id":item.id,"data-on":on?"":void 0,role:isTabs?"tab":"radio",id:isTabs?ids.tab:void 0,"aria-selected":isTabs?on:void 0,"aria-checked":isTabs?void 0:on,"aria-controls":isTabs&&id!==void 0?ids.panel:void 0,tabIndex:item.id===tabStop?0:-1,disabled:item.disabled,onClick:()=>select(item.id,!1),children:[item.icon!==void 0&&renderIcon(item.icon),jsx11("span",{className:"nui-pill-label",children:t(item.label)}),typeof item.count=="number"&&jsx11("span",{className:"nui-pill-count",children:item.count})]},item.id)})})}),hidden.length>0&&jsx11(Menu,{label:TABROW_WORDS.showMore,trigger:jsxs9("button",{type:"button",className:"nui-pill nui-tabrow-more",children:[jsx11("span",{className:"nui-pill-label",children:t(TABROW_WORDS.more)}),jsx11(Icon,{name:"caret-down",className:"nui-tabrow-caret"})]}),children:hidden.map(item=>jsxs9(Menu.Item,{icon:item.icon,disabled:item.disabled,onSelect:()=>select(item.id,!0),children:[t(item.label),typeof item.count=="number"&&jsx11("span",{className:"nui-tabrow-menu-count",children:item.count})]},item.id))}),end!==void 0&&jsx11("div",{className:"nui-tabrow-end",children:end})]})}import{useCallback as useCallback8,useEffect as useEffect12,useState as useState10}from"react";import{createContext as createContext4,createElement,useContext as useContext5}from"react";var OPEN_MODES=Object.freeze(["side","center","full"]);function isOpenMode(value){return value==="side"||value==="center"||value==="full"}var OPEN_MODE_CACHE_PREFIX="notis:open-mode:";function storage(){try{return typeof window<"u"?window.localStorage:null}catch{return null}}function readOpenModeCache(key){try{let value=storage()?.getItem(OPEN_MODE_CACHE_PREFIX+key);return isOpenMode(value)?value:null}catch{return null}}function writeOpenModeCache(key,mode){try{storage()?.setItem(OPEN_MODE_CACHE_PREFIX+key,mode)}catch{}}var localStorageOpenModeStore=Object.freeze({read:key=>readOpenModeCache(key),write:(key,mode)=>writeOpenModeCache(key,mode),subscribe:(key,onChange)=>{if(typeof window>"u")return()=>{};let listener=event=>{event.key===OPEN_MODE_CACHE_PREFIX+key&&onChange(isOpenMode(event.newValue)?event.newValue:null)};return window.addEventListener("storage",listener),()=>window.removeEventListener("storage",listener)}});function userSettingsOpenModeStore(settings){return{read:async key=>{let value=await settings.get(`openMode:${key}`);return isOpenMode(value)?value:null},write:(key,mode)=>settings.set(`openMode:${key}`,mode)}}var globalStore=localStorageOpenModeStore;function setOpenModeStore(store){let previous=globalStore;return globalStore=store??localStorageOpenModeStore,previous}function getOpenModeStore(){return globalStore}var OpenModeStoreContext=createContext4(null);function OpenModeStoreProvider({store,children}){return createElement(OpenModeStoreContext.Provider,{value:store},children)}function useOpenModeStore(){return useContext5(OpenModeStoreContext)??globalStore}function normalizeAllowed(allowed){let list=allowed===void 0?OPEN_MODES:typeof allowed=="string"?[allowed]:allowed,out=[];for(let mode of list)isOpenMode(mode)&&!out.includes(mode)&&out.push(mode);return out.length?out:["side"]}function useOpenModeKey(storageKey,listId="list"){let runtime=useNotisRuntime();if(storageKey)return storageKey;let spaceId=runtime?.resource?.kind==="space"?runtime.resource.id:runtime?.space?.id;return spaceId?`${spaceId}:${listId}`:null}function useOpenMode(options={}){let allowed=normalizeAllowed(options.allowed),allowedKey=allowed.join(","),key=useOpenModeKey(options.storageKey,options.listId),store=useOpenModeStore(),fit=useCallback8(mode2=>mode2&&allowed.includes(mode2)?mode2:allowed[0],[allowedKey]),[mode,setModeState]=useState10(()=>fit(key?readOpenModeCache(key):null));useEffect12(()=>{if(!key){setModeState(current=>fit(current));return}let alive=!0;setModeState(fit(readOpenModeCache(key)));let apply=value=>{!alive||!value||(writeOpenModeCache(key,value),setModeState(fit(value)))};try{let answer=store.read(key);answer&&typeof answer.then=="function"?answer.then(apply,()=>{}):apply(answer)}catch{}let unsubscribe=store.subscribe?.(key,apply);return()=>{alive=!1,unsubscribe?.()}},[key,store,fit]);let setMode=useCallback8(next=>{let value=fit(next);if(setModeState(value),!!key){writeOpenModeCache(key,value);try{Promise.resolve(store.write(key,value)).catch(()=>{})}catch{}}},[key,store,fit]);return[mode,setMode]}import{jsx as jsx12,jsxs as jsxs10}from"react/jsx-runtime";var OPEN_MODE_WORDS=Object.freeze({side:SHELL_WORDS.sidePeek,center:SHELL_WORDS.centerPeek,full:SHELL_WORDS.fullPage}),OPEN_MODE_ICONS=Object.freeze({side:"sidebar-simple",center:"square-center",full:"corners-out"});function OpenAsMenu({allowed,mode,onChange,className}){let t=useT(),modes=normalizeAllowed(allowed);if(modes.length<2)return null;let name=`${t(SHELL_WORDS.openAs)} ${t(OPEN_MODE_WORDS[mode]).toLowerCase()}`;return jsx12(Menu,{label:SHELL_WORDS.openAs,align:"start",trigger:jsxs10("button",{type:"button",className:className?`nui-om-btn ${className}`:"nui-om-btn","aria-label":name,"data-mode":mode,"data-part":"mode",children:[jsx12(Icon,{name:OPEN_MODE_ICONS[mode]}),jsx12(Icon,{name:"caret-down",className:"nui-om-caret"})]}),children:modes.map(option=>jsx12(Menu.Item,{icon:OPEN_MODE_ICONS[option],checked:option===mode,onSelect:()=>onChange(option),children:t(OPEN_MODE_WORDS[option])},option))})}function boardOrder(items2,columns,getColumn){let lanes=new Map(columns.map(column=>[column.id,[]]));for(let item of items2)lanes.get(getColumn(item))?.push(item);return columns.flatMap(column=>lanes.get(column.id))}function neighbourColumn(columns,columnId,delta){let index=columns.findIndex(column=>column.id===columnId);return index===-1?null:columns[index+delta]?.id??null}function dropIndex(tiles,pointerY){let index=tiles.findIndex(tile=>tile.top+tile.height/2>pointerY);return index===-1?{index:tiles.length,before:null}:{index,before:tiles[index].id}}var BOARD_WORDS=Object.freeze({board:w("Board","Tableau"),moveLeft:w("Move to the column on the left","D\xE9placer vers la colonne de gauche"),moveRight:w("Move to the column on the right","D\xE9placer vers la colonne de droite"),emptyColumn:w("No items","Aucun \xE9l\xE9ment"),moved:w("Moved to {column}.","D\xE9plac\xE9 vers {column}.")});import{useContext as useContext7}from"react";import{createContext as createContext5,useContext as useContext6}from"react";var IDLE_ROW_STATE=Object.freeze({cursor:!1,open:!1,selected:!1,anySelected:!1,index:-1}),RowStateContext=createContext5(null),RowIdContext=createContext5(null);function useRowState(id){let source=useContext6(RowStateContext),contextId=useContext6(RowIdContext),rowId=id??contextId;return!source||rowId===null?IDLE_ROW_STATE:source.stateOf(rowId)}import{Fragment as Fragment7,jsx as jsx13,jsxs as jsxs11}from"react/jsx-runtime";var STATUS_ALIASES=Object.freeze({backlog:"backlog",icebox:"backlog",someday:"backlog",todo:"todo",to_do:"todo",open:"todo",new:"todo",planned:"todo",triage:"todo",queued:"todo",active:"active",in_progress:"active",doing:"active",started:"active",running:"active",live:"active",beta:"active",in_beta:"active",review:"review",in_review:"review",ready_for_review:"review",needs_review:"review",to_review:"review",for_review:"review",awaiting_review:"review",pending_review:"review",under_review:"review",waiting:"waiting",blocked:"waiting",paused:"waiting",on_hold:"waiting",pending:"waiting",done:"done",completed:"done",complete:"done",closed:"done",resolved:"done",shipped:"done",merged:"done",cancelled:"cancelled",canceled:"cancelled",wont_do:"cancelled",duplicate:"cancelled",skipped:"cancelled",failed:"failed",error:"failed",errored:"failed",rejected:"failed",up:"up",operational:"up",online:"up",available:"up",down:"down",offline:"down",outage:"down",unavailable:"down",unreachable:"down"}),STATUS_ICONS=Object.freeze({backlog:"circle-dashed",todo:"circle",active:"circle-half",review:"circle-three-quarter",waiting:"clock-countdown",done:"check-circle-fill",cancelled:"minus-circle",failed:"x-circle-fill",up:"check-circle-fill",down:"x-circle-fill"}),STATUS_WORDS=Object.freeze({backlog:{en:"Backlog",fr:"En r\xE9serve"},todo:{en:"To do",fr:"\xC0 faire"},active:{en:"In progress",fr:"En cours"},review:{en:"Ready for review",fr:"\xC0 relire"},waiting:{en:"Waiting",fr:"En attente"},done:{en:"Done",fr:"Termin\xE9"},cancelled:{en:"Cancelled",fr:"Annul\xE9"},failed:{en:"Failed",fr:"\xC9chec"},up:{en:"Up",fr:"Disponible"},down:{en:"Down",fr:"Indisponible"}});function statusGroup(status){let key=status.trim().toLowerCase().replace(/[\s-]+/g,"_");return STATUS_ALIASES[key]??"todo"}function StatusIcon({status,label,decorative=!1}){let t=useT(),group=statusGroup(status);return jsx13("span",{className:"nui-st","data-st":group==="todo"?void 0:group,...decorative?{"aria-hidden":!0}:{role:"img","aria-label":t(label??STATUS_WORDS[group])},children:jsx13(Icon,{name:STATUS_ICONS[group]})})}var STAR_WORDS=Object.freeze({starred:{en:"Starred",fr:"Favori"}});function StarMark({decorative=!1}){let t=useT();return jsx13("span",{className:"nui-star",...decorative?{"aria-hidden":!0}:{role:"img","aria-label":t(STAR_WORDS.starred)},children:jsx13(Icon,{name:"star-fill"})})}function RowMore(){let source=useContext7(RowStateContext),id=useContext7(RowIdContext);return!source?.more||id===null?null:jsx13(Fragment7,{children:source.more(id)})}var ROW_TIME_WORDS=Object.freeze({today:{en:"Today",fr:"Aujourd\u2019hui"},ago:{en:"{t} ago",fr:"il y a {t}"}}),NB="\u202F",MINUTE=6e4,RELATIVE_DAYS=30,DATE_ONLY=/^(\d{4})-(\d{2})-(\d{2})$/;function parseRowDate(value,dateOnly=!1){if(typeof value=="string"){let match=DATE_ONLY.exec(value.trim());if(match)return{date:new Date(Number(match[1]),Number(match[2])-1,Number(match[3]),12),dateOnly:!0}}let date=value instanceof Date?new Date(value.getTime()):new Date(value);return dateOnly&&typeof value=="string"&&/^\d{4}-\d{2}-\d{2}T00:00(:00(\.0+)?)?(Z|[+-]00:?00)?$/.test(value.trim())?{date:new Date(date.getUTCFullYear(),date.getUTCMonth(),date.getUTCDate(),12),dateOnly:!0}:(dateOnly&&!Number.isNaN(date.getTime())&&date.setHours(12,0,0,0),{date,dateOnly})}function formatRowAgo(value,locale,now=new Date){let{date}=parseRowDate(value),ms=now.getTime()-date.getTime();if(Number.isNaN(ms)||ms<0)return null;let fr2=locale==="fr",minutes=Math.max(1,Math.floor(ms/MINUTE));if(minutes<60)return fr2?`${minutes}${NB}min`:`${minutes}m`;let hours=Math.round(minutes/60);if(hours<24)return fr2?`${hours}${NB}h`:`${hours}h`;let days=Math.round(hours/24);return fr2?`${days}${NB}j`:`${days}d`}function formatReaderAgo(value,locale,now=new Date){let ago=formatRowAgo(value,locale,now);return ago===null?"":pick(ROW_TIME_WORDS.ago,locale).replace("{t}",ago)}function formatRowTime(value,locale,now=new Date,timeOptions={}){let{date,dateOnly}=parseRowDate(value,timeOptions.dateOnly);if(Number.isNaN(date.getTime()))return"";let tag=locale==="fr"?"fr-FR":"en-US";if(date.getFullYear()===now.getFullYear()&&date.getMonth()===now.getMonth()&&date.getDate()===now.getDate()&&dateOnly)return pick(ROW_TIME_WORDS.today,locale);if(!dateOnly&&now.getTime()-date.getTime()<RELATIVE_DAYS*24*60*MINUTE){let ago=formatRowAgo(date,locale,now);if(ago!==null)return ago}let options={month:"short",day:"numeric"};return date.getFullYear()!==now.getFullYear()&&(options.year="numeric"),new Intl.DateTimeFormat(tag,options).format(date)}function initials(name){let parts=name.trim().split(/\s+/).filter(Boolean);if(!parts.length)return"";let first=parts[0][0]??"",last=parts.length>1?parts[parts.length-1][0]??"":"";return(first+last).toUpperCase()}function Check(){return jsx13("svg",{viewBox:"0 0 12 12","aria-hidden":"true",focusable:"false",children:jsx13("path",{d:"M2.5 6.2l2.3 2.3 4.7-4.9",fill:"none",stroke:"currentColor",strokeWidth:1.75,strokeLinecap:"round",strokeLinejoin:"round"})})}function TagX(){return jsx13("svg",{viewBox:"0 0 12 12",width:"10",height:"10","aria-hidden":"true",children:jsx13("path",{d:"M3 3l6 6M9 3l-6 6",fill:"none",stroke:"currentColor",strokeWidth:"1.5",strokeLinecap:"round"})})}function isUrgentLabel(entry){return typeof entry!="string"&&(entry.tone==="warning"||entry.tone==="danger")}function isStatusIcon(icon){return!!icon&&typeof icon=="object"&&!Array.isArray(icon)&&typeof icon.status=="string"&&!("$$typeof"in icon)}function Row({icon,title,meta,snippet,labels,tags,owner,time,dateOnly,now,trailing,more,state,wrap,className}){let locale=useToolkitLocale(),source=useContext7(RowStateContext),contextId=useContext7(RowIdContext),contextState=useRowState(),inList=!!source&&contextId!==null,rowState=state??(inList?contextState:IDLE_ROW_STATE),lead=icon==null||icon===!1?null:isStatusIcon(icon)?jsx13(StatusIcon,{status:icon.status}):renderIcon(icon),toggle=inList?source.toggle:null,showMore=(more??!0)&&inList&&!!source.more,hasMeta=meta!=null&&meta!==!1,ordered=labels?.length?[...labels.filter(isUrgentLabel),...labels.filter(entry=>!isUrgentLabel(entry))]:[],hasTime=time!=null&&time!=="",content=jsxs11(Fragment7,{children:[(lead||toggle)&&jsxs11("span",{className:"nui-row-lead",children:[lead&&jsx13("span",{className:"nui-row-icon",children:lead}),toggle&&jsx13("button",{type:"button",className:"nui-row-check",tabIndex:-1,role:"checkbox","aria-checked":rowState.selected,"aria-label":pick(SHELL_WORDS.select,locale),onClick:event=>{event.stopPropagation(),toggle(contextId)},children:jsx13(Check,{})})]}),jsxs11("span",{className:"nui-row-main","data-wrap":wrap===2?2:void 0,children:[jsx13("span",{className:"nui-row-title","data-lines":wrap===2?2:void 0,children:title}),(hasMeta||ordered.length>0)&&jsxs11("span",{className:"nui-row-meta",children:[hasMeta&&jsx13("span",{className:"nui-row-meta-start",children:meta}),hasMeta&&ordered.length>0&&jsx13("span",{className:"nui-row-dot","aria-hidden":"true",children:"\xB7"}),ordered.length>0&&jsx13("span",{className:"nui-row-labels",children:ordered.map((entry,index)=>{let label=typeof entry=="string"?entry:entry.label,tone=typeof entry=="string"?void 0:entry.tone;return jsxs11("span",{className:"nui-row-label","data-tone":tone&&tone!=="default"?tone:void 0,children:[index>0?", ":"",pick(label,locale)]},index)})})]}),snippet!=null&&snippet!==!1&&jsx13("span",{className:"nui-row-snippet",children:snippet})]}),tags?.length?jsx13("span",{className:"nui-row-tags",children:tags.map(tag=>jsxs11("span",{className:"nui-row-tag","data-removable":tag.onRemove||tag.pending?"":void 0,title:tag.label,children:[tag.icon&&jsx13("span",{className:"nui-row-tag-icon","aria-hidden":"true",children:renderIcon(tag.icon)}),jsx13("span",{className:"nui-row-tag-label",children:tag.label}),tag.pending?jsx13("span",{className:"nui-row-tag-spin",role:"status","aria-label":pick(fillWords(SHELL_WORDS.savingNamed,{name:tag.label}),locale)}):tag.onRemove&&jsx13("button",{type:"button",className:"nui-row-tag-x",tabIndex:-1,disabled:tag.busy,"aria-label":tag.removeLabel??pick(fillWords(SHELL_WORDS.removeNamed,{name:tag.label}),locale),onClick:event=>{event.stopPropagation(),tag.onRemove()},children:jsx13(TagX,{})})]},tag.id))}):null,(owner||hasTime||trailing||showMore)&&jsxs11("span",{className:"nui-row-trail",children:[trailing,hasTime&&jsx13("time",{className:"nui-row-time",dateTime:toIso(time,dateOnly),children:formatRowTime(time,locale,now??new Date,{dateOnly})}),owner&&jsx13("span",{className:"nui-avatar",title:owner.name,role:"img","aria-label":owner.name,children:owner.avatarUrl?jsx13("img",{src:owner.avatarUrl,alt:""}):initials(owner.name)}),showMore&&source.more(contextId)]})]});return inList?content:jsx13("div",{className:cx("nui-row",className),"data-cursor":flag(rowState.cursor),"data-open":flag(rowState.open),"data-selected":flag(rowState.selected),"data-wrap":wrap===2?2:void 0,children:content})}function toIso(value,dateOnly){let parsed=parseRowDate(value,dateOnly);if(Number.isNaN(parsed.date.getTime()))return;if(!parsed.dateOnly)return parsed.date.toISOString();let d=parsed.date;return`${d.getFullYear()}-${String(d.getMonth()+1).padStart(2,"0")}-${String(d.getDate()).padStart(2,"0")}`}import{useCallback as useCallback9,useMemo as useMemo7,useRef as useRef11,useState as useState11}from"react";import{jsx as jsx14,jsxs as jsxs12}from"react/jsx-runtime";var SELECTION_BAR_MAX_INLINE=5,SELECTION_BAR_BOOST=25,BAR_WORDS=Object.freeze({label:{en:"Selection actions",fr:"Actions de la s\xE9lection"}});function chooseFit(measure2,room){for(let fit of["","nokeys","icons"])if(measure2(fit)<=room)return fit;return"icons"}function SelectionBar({actions,count,onClear,onRun,busy,anchor="list",className}){let t=useT(),locale=useToolkitLocale(),barRef=useRef11(null),[fit,setFit]=useState11(""),inline=actions.slice(0,SELECTION_BAR_MAX_INLINE),overflow=actions.slice(SELECTION_BAR_MAX_INLINE),label=t(selectedCount(count)),signature=`${actions.map(action=>action.id).join(",")}|${count}|${locale}`,refit=useCallback9(()=>{let bar=barRef.current,slot=bar?.parentElement;if(!bar||!slot)return;let room=slot.clientWidth-24;if(room<=0)return;bar.style.maxWidth="none";let next=chooseFit(candidate=>(candidate?bar.dataset.fit=candidate:delete bar.dataset.fit,bar.offsetWidth),room);bar.style.maxWidth="",next?bar.dataset.fit=next:delete bar.dataset.fit,setFit(next)},[]);useIsoLayoutEffect(()=>{refit()},[refit,signature]),useIsoLayoutEffect(()=>{let slot=barRef.current?.parentElement;if(!slot||typeof ResizeObserver>"u")return;let observer=new ResizeObserver(()=>refit());return observer.observe(slot),()=>observer.disconnect()},[refit]);let tipped=(key,node,name,keys)=>jsx14(Tooltip,{label:name,keys,disabled:fit==="",children:node},key);return jsx14("div",{className:"nui-selbar-slot","data-anchor":anchor==="page"?"page":void 0,children:jsx14(KeycapSurface,{on:"pill",children:jsxs12("div",{ref:barRef,className:cx("nui-selbar",className),role:"toolbar","aria-label":t(BAR_WORDS.label),"data-fit":fit||void 0,children:[jsx14("span",{className:"nui-sb-count","aria-live":"polite",children:label}),inline.map(action=>{let keys=keyList(action.key),name=t(action.label),running=!!busy?.has(action.id);return tipped(action.id,jsxs12("button",{type:"button",className:"nui-sb-btn","aria-label":name,"data-action":action.id,"aria-busy":running||void 0,disabled:running,"aria-haspopup":action.options?"menu":void 0,"data-tone":action.tone==="danger"?"danger":void 0,onClick:event=>onRun(action,event.currentTarget),children:[jsx14("span",{className:"nui-sb-icon",children:renderIcon(action.icon)}),jsx14("span",{className:"nui-sb-label",children:name}),keys.length>0&&jsx14(Keycap,{keys,className:"nui-sb-keys"})]}),action.label,keys.length?keys:void 0)}),overflow.length>0&&jsx14(Menu,{side:"top",align:"end",label:SHELL_WORDS.more,accelerators:!1,trigger:jsxs12("button",{type:"button",className:"nui-sb-btn","aria-label":t(SHELL_WORDS.more),children:[jsx14("span",{className:"nui-sb-icon",children:jsx14(Icon,{name:"dots-three"})}),jsx14("span",{className:"nui-sb-label",children:t(SHELL_WORDS.more)})]}),children:overflow.map(action=>jsx14(Menu.Item,{icon:action.icon,tone:action.tone,disabled:!!busy?.has(action.id),keys:action.key?keyList(action.key):void 0,onSelect:()=>onRun(action,null),children:t(action.label)},action.id))}),tipped("clear",jsx14("button",{type:"button",className:"nui-sb-btn","aria-label":t(SHELL_WORDS.clearSelection),"data-action":"clear",onClick:onClear,children:jsx14(Icon,{name:"x",className:"nui-sb-x"})}),SHELL_WORDS.clearSelection,["escape"])]})})})}function useSelectionBar(options){let{controller,selection,getItem}=options,platform=useToolkitPlatform(),latest=useLatest(options),selectedItems=useMemo7(()=>{let out=[];for(let id of selection.selected){let item=getItem(id);item!==void 0&&out.push(item)}return out},[selection.selected,getItem]),bulk=useMemo7(()=>controller.actions.filter(action=>action.bulk),[controller.actions]),available=useMemo7(()=>controller.available(selectedItems).filter(action=>action.bulk),[controller,selectedItems]),targets=useCallback9(()=>{let{selection:sel,getItem:lookup,fallback}=latest.current;if(sel.count>0){let out=[];for(let id of sel.selected){let item=lookup(id);item!==void 0&&out.push(item)}return out}return fallback?.()??[]},[latest]),runAction=useCallback9(async(action,anchor=null)=>{let items2=targets();if(!items2.length)return null;let live=latest.current;if(action.options&&live.onPick)return live.onPick(action,items2,anchor),null;let outcome=await live.controller.run(action,items2);return outcome.status!=="busy"&&latest.current.onRan?.(action,items2,outcome),outcome},[latest,targets]),groups=useMemo7(()=>{let byKey=new Map;for(let action of bulk)for(let spec of keyList(action.key)){let canonical=canonicalKey(spec,platform),group=byKey.get(canonical)??{spec,actions:[]};group.actions.push(action),byKey.set(canonical,group)}return[...byKey.entries()]},[bulk,platform]),defs=useMemo7(()=>groups.map(([canonical,group])=>({id:`selection.${group.actions.map(action=>action.id).join("|")}.${canonical}`,keys:[group.spec],scope:"collection",boost:SELECTION_BAR_BOOST,label:group.actions[0].label,...latest.current.owner?{owner:latest.current.owner}:{},when:()=>(latest.current.when?.()??!0)&&targets().length>0,run:()=>{let items2=targets(),fits=latest.current.controller.available(items2),action=group.actions.find(candidate=>fits.some(fit=>fit.id===candidate.id));return action?(runAction(action),!0):!1}})),[groups,latest,runAction,targets]);useShortcuts(defs);let barProps={actions:available,count:selection.count,onClear:selection.clear,onRun:(action,anchor)=>{runAction(action,anchor??null)},busy:controller.busy};return{visible:selection.count>0&&bulk.length>0,selectedItems,barProps,runAction}}import{useCallback as useCallback10,useEffect as useEffect13,useMemo as useMemo8,useRef as useRef12}from"react";var ROW_INTERACTIVE_SELECTOR='button, a, input, textarea, select, [role="button"], [contenteditable]:not([contenteditable="false"])',ROW_ID_ATTRIBUTE="data-nui-item",LONG_PRESS_MS=500,LONG_PRESS_TOLERANCE_PX=10;function cssEscape2(value){return typeof CSS<"u"&&typeof CSS.escape=="function"?CSS.escape(value):value.replace(/["\\]/g,"\\$&")}function findRow(container,id){return container?.querySelector(`[${ROW_ID_ATTRIBUTE}="${cssEscape2(id)}"]`)??null}var GRID_WORDS=Object.freeze({left:{en:"Tile to the left",fr:"Tuile \xE0 gauche"},right:{en:"Tile to the right",fr:"Tuile \xE0 droite"},up:{en:"Tile above",fr:"Tuile au-dessus"},down:{en:"Tile below",fr:"Tuile en dessous"}});function boardStep(lanes,current,dir){let lane=current===null?-1:lanes.findIndex(ids=>ids.includes(current));if(lane===-1)return lanes.find(ids=>ids.length>0)?.[0]??null;let index=lanes[lane].indexOf(current);if(dir==="up"||dir==="down")return lanes[lane][index+(dir==="up"?-1:1)]??null;let delta=dir==="left"?-1:1;for(let next=lane+delta;next>=0&&next<lanes.length;next+=delta){let ids=lanes[next];if(ids.length>0)return ids[Math.min(index,ids.length-1)]}return null}function gridColumns(container,ids){let rows=ids.map(id=>findRow(container,id)).filter(row=>!!row);if(rows.length<2)return 1;let top=Math.round(rows[0].getBoundingClientRect().top),count=0;for(let row of rows){if(Math.round(row.getBoundingClientRect().top)!==top)break;count+=1}return Math.max(1,count)}function focusStaysOnMove(active,container){if(!active||active===active.ownerDocument.body||containsComposed(container,active))return!1;let holder=closestComposed(active,"[data-notis-escape-owned]");return holder!==null&&!containsComposed(holder,container)}function isInteractiveTarget(event){let target=event.target;if(!target||target===event.currentTarget||typeof target.closest!="function")return!1;let hit=target.closest(ROW_INTERACTIVE_SELECTOR);return!!hit&&hit!==event.currentTarget&&event.currentTarget?.contains(hit)===!0}function useListKeys(options){let{ids,cursor,containerRef,selection=null,openId=null,wrap=!0,scope="collection",enabled=!0,owner}=options,platform=useToolkitPlatform(),latest=useLatest(options),pendingFocus=useRef12(null),suppressClick=useRef12(!1),longPressed=useRef12(!1),press=useRef12(null),cancelPress=useCallback10(()=>{press.current&&clearTimeout(press.current.timer),press.current=null},[]);useEffect13(()=>cancelPress,[cancelPress]);let visibleIds=useCallback10(()=>{let container=containerRef.current;return latest.current.ids.filter(id=>{let row=findRow(container,id);return!row||isVisibleComposed(row)})},[containerRef,latest]),focusRow=useCallback10(id=>{let container=containerRef.current,row=findRow(container,id);if(!row)return;let active=deepActiveElement(row.getRootNode());focusStaysOnMove(active,container)||row.focus({preventScroll:!0}),row.scrollIntoView?.({block:"nearest"})},[containerRef]);useEffect13(()=>{let id=pendingFocus.current;id===null||id!==cursor||(pendingFocus.current=null,focusRow(id))},[cursor,focusRow]);let moveTo=useCallback10((next,open)=>{if(next===null)return!1;let{setCursor,onOpen}=latest.current;return pendingFocus.current=next,setCursor(next),next===latest.current.cursor&&focusRow(next),open&&onOpen(next),!0},[focusRow,latest]),live=()=>enabled&&latest.current.enabled!==!1&&isVisibleComposed(containerRef.current)&&latest.current.ids.length>0,defs=useMemo8(()=>{let k=DEFAULT_KEYMAP,step=delta=>event=>{let{cursor:current,wrap:wrapping=!0,openId:open=null,selection:sel=null}=latest.current,visible=visibleIds(),next=stepCursor(visible,current,delta,{wrap:wrapping,repeat:event.repeat});return next===null?!1:next===current&&delta>0&&latest.current.onReachEnd&&visible[visible.length-1]===current?(latest.current.onReachEnd(),!0):(sel?.navigate(next),moveTo(next,open!==null&&next!==open))},extend=delta=>event=>{let{cursor:current,selection:sel}=latest.current;if(!sel)return!1;let next=stepCursor(visibleIds(),current,delta,{wrap:!1,repeat:event.repeat});return next===null?!1:(sel.extendStep(next),moveTo(next,!1))},base=entry=>({id:entry.id,keys:[...entry.keys],scope,label:entry.label,when:live,...owner?{owner}:{}}),gridOn=!!latest.current.grid||!!latest.current.board,noArrows=def=>gridOn?{...def,keys:[def.keys].flat().filter(spec=>!/^arrow(up|down)$/i.test(spec))}:def,list=[{...noArrows(base(k["list.next"])),repeat:!0,run:step(1)},{...noArrows(base(k["list.prev"])),repeat:!0,run:step(-1)},{...base(k["list.open"]),run:()=>{let{cursor:current,onOpen}=latest.current;return current===null||!latest.current.ids.includes(current)?!1:(onOpen(current),!0)}}];if(selection&&list.push({...base(k["list.extendDown"]),repeat:!0,run:extend(1)},{...base(k["list.extendUp"]),repeat:!0,run:extend(-1)},{...base(k["list.toggleSelect"]),run:()=>{let{cursor:current,selection:sel}=latest.current;return!sel||current===null?!1:(sel.toggle(current),!0)}},{...base(k["list.selectAll"]),run:()=>{let sel=latest.current.selection;return sel?(sel.selectAll(),!0):!1}}),gridOn){let gridStep=dir=>()=>{let{cursor:current,openId:open=null,selection:sel=null}=latest.current,visible=visibleIds(),index=current===null?-1:visible.indexOf(current);if(index===-1)return moveTo(visible[0]??null,!1);let board=latest.current.board;if(board){let shown=new Set(visible),next2=boardStep(board.map(ids2=>ids2.filter(id=>shown.has(id))),current,dir);return next2===null||next2===current?!0:(sel?.navigate(next2),moveTo(next2,open!==null&&next2!==open))}let columns=gridColumns(containerRef.current,visible),delta=dir==="left"?-1:dir==="right"?1:dir==="up"?-columns:columns,target=index+delta;if(target<0||target>=visible.length)return!0;let next=visible[target];return sel?.navigate(next),moveTo(next,open!==null&&next!==open)};for(let dir of["left","right","up","down"])list.push({id:`list.grid.${dir}`,keys:[`arrow${dir}`],scope,label:GRID_WORDS[dir],when:live,repeat:!0,...owner?{owner}:{},run:gridStep(dir)})}return list},[scope,owner,!!selection,enabled,!!options.grid||!!options.board]);useShortcuts(enabled?defs:[],[enabled]);let isMod=event=>platform==="mac"?event.metaKey:event.ctrlKey,roving=(cursor!==null&&ids.includes(cursor)?cursor:null)??(openId!==null&&ids.includes(openId)?openId:null)??ids[0]??null;return{getRowProps:id=>{let selected=selection?.isSelected(id)??!1;return{role:"option","aria-selected":selected,tabIndex:id===roving?0:-1,[ROW_ID_ATTRIBUTE]:id,"data-cursor":flag(id===cursor),"data-open":flag(id===openId),"data-selected":flag(selected),onMouseDown:event=>{if(event.button!==0||!isMod(event)||isInteractiveTarget(event))return;let sel=latest.current.selection;sel&&(event.preventDefault(),suppressClick.current=!0,sel.toggle(id),latest.current.setCursor(id),event.currentTarget.focus({preventScroll:!0}))},onClickCapture:event=>{longPressed.current&&(longPressed.current=!1,event.preventDefault(),event.stopPropagation())},onClick:event=>{if(suppressClick.current){suppressClick.current=!1;return}if(event.defaultPrevented||isInteractiveTarget(event))return;let{selection:sel,setCursor,onOpen}=latest.current;if(event.shiftKey&&sel){event.preventDefault(),sel.extendTo(id),setCursor(id);return}isMod(event)||(sel&&(sel.clear(),sel.activate(id)),setCursor(id),onOpen(id))},onKeyDown:event=>{if(event.target!==event.currentTarget||event.key!==" ")return;let sel=latest.current.selection;sel&&(event.preventDefault(),sel.toggle(id),latest.current.setCursor(id))},onFocus:event=>{event.target===event.currentTarget&&latest.current.cursor!==id&&latest.current.setCursor(id)},onPointerDown:event=>{!latest.current.selection||event.pointerType!=="touch"||event.button!==0||isInteractiveTarget(event)||(cancelPress(),press.current={id,x:event.clientX,y:event.clientY,timer:setTimeout(()=>{press.current=null;let{selection:sel,setCursor}=latest.current;sel&&(suppressClick.current=!0,longPressed.current=!0,sel.toggle(id),setCursor(id))},LONG_PRESS_MS)})},onPointerMove:event=>{let start=press.current;start&&(Math.abs(event.clientX-start.x)>LONG_PRESS_TOLERANCE_PX||Math.abs(event.clientY-start.y)>LONG_PRESS_TOLERANCE_PX)&&cancelPress()},onPointerUp:()=>cancelPress(),onPointerCancel:()=>cancelPress()}},visibleIds}}import{createElement as createElement2,useCallback as useCallback11,useEffect as useEffect14,useMemo as useMemo9,useRef as useRef13,useState as useState12}from"react";var REORDER_DRAG_TYPE="application/x-notis-reorder",REORDER_WORDS=Object.freeze({hint:w("Drag to reorder. Alt and an arrow key also move it.","Glisse pour r\xE9ordonner. Alt et une fl\xE8che le d\xE9placent aussi."),moved:w("Moved to position {n} of {total}.","D\xE9plac\xE9 en position {n} sur {total}."),failed:w("Could not save the new order. Try again.","Impossible d\u2019enregistrer le nouvel ordre. R\xE9essaie.")}),sameOrder=(a,b)=>a.length===b.length&&a.every((id,i)=>id===b[i]);function mergeOrder(order,natural){let present=new Set(natural),out=order.filter(id=>present.has(id)),kept=new Set(out);for(let id of natural)kept.has(id)||out.push(id);return out}function dropIndex2(from,over,side){let place2=side==="before"?over:over+1;return place2>from?place2-1:place2}var KEY_STEPS={vertical:{ArrowUp:-1,ArrowDown:1},horizontal:{ArrowLeft:-1,ArrowRight:1},both:{ArrowUp:-1,ArrowDown:1,ArrowLeft:-1,ArrowRight:1}};function useReorder(options){let{items:natural,getId,enabled=!0,orientation="vertical"}=options,t=useT(),latest=useLatest(options),hintId=useStableId("nui-reorder-hint"),naturalIds=useMemo9(()=>natural.map(getId),[natural,getId]),naturalKey=naturalIds.join("\0"),[override,setOverride]=useState12(null);useEffect14(()=>{override&&(sameOrder(mergeOrder(override.ids,naturalIds),naturalIds)||override.settled&&naturalKey!==override.base)&&setOverride(null)},[naturalIds,naturalKey,override]);let ids=useMemo9(()=>override?mergeOrder(override.ids,naturalIds):naturalIds,[naturalIds,override]),items2=useMemo9(()=>{if(!override)return natural.slice();let byId=new Map;return natural.forEach((item,index)=>byId.set(naturalIds[index],item)),ids.map(id=>byId.get(id)).filter(item=>item!==void 0)},[ids,natural,naturalIds,override]),current=useLatest({ids,items:items2,naturalKey}),[message,setMessage]=useState12(""),flip=useRef13(!1),say=useCallback11(text=>{flip.current=!flip.current,setMessage(flip.current?text:`${text}\xA0`)},[]),seq=useRef13(0),[pendingCount,setPendingCount]=useState12(0),move=useCallback11((id,target2)=>{let{ids:order,items:shown,naturalKey:base}=current.current,from=order.indexOf(id);if(from<0)return;let to=Math.max(0,Math.min(order.length-1,Math.round(target2)));if(to===from)return;let next=order.slice();next.splice(from,1),next.splice(to,0,id);let item=shown[from],mine=++seq.current;setOverride({ids:next,base,seq:mine,settled:!1}),say(t(REORDER_WORDS.moved).replace("{n}",String(to+1)).replace("{total}",String(next.length)));let settle=()=>setOverride(prev=>prev&&prev.seq===mine?{...prev,settled:!0}:prev),fail=error=>{setOverride(null);let onError=latest.current.onError;onError?onError(error):say(t(REORDER_WORDS.failed))},result;try{result=latest.current.onReorder({item,id,from,to,ids:next})}catch(error){fail(error);return}result&&typeof result.then=="function"?(setPendingCount(count=>count+1),result.then(settle,fail).finally(()=>setPendingCount(count=>count-1))):settle()},[current,latest,say,t]),dragging=useRef13(null),[dragState,setDragState]=useState12(null),endDrag=useCallback11(()=>{dragging.current=null,setDragState(null)},[]),target=(overId,event)=>{let from=current.current.ids.indexOf(dragging.current??""),over=current.current.ids.indexOf(overId);if(from<0||over<0)return null;let rect=event.currentTarget.getBoundingClientRect(),side=((latest.current.orientation==="horizontal"||latest.current.orientation==="both")&&rect.width>0?event.clientX<rect.left+rect.width/2:rect.height>0?event.clientY<rect.top+rect.height/2:over<from)?"before":"after",to=dropIndex2(from,over,side);return to===from?null:{side,to}},nodes=useRef13(new Map),refs=useRef13(new Map),refFor=id=>{let ref=refs.current.get(id);return ref||(ref=element=>{element?nodes.current.set(id,element):nodes.current.delete(id)},refs.current.set(id,ref)),ref},refocus=useRef13(null);useIsoLayoutEffect(()=>{let id=refocus.current;if(id===null)return;refocus.current=null;let node=nodes.current.get(id);node&&node.ownerDocument.activeElement!==node&&node.focus()});let movableItem=id=>{let index=current.current.ids.indexOf(id),item=current.current.items[index],can=latest.current.canReorder;return item!==void 0&&(!can||can(item))},getItemProps=(id,itemOptions)=>{if(!enabled)return{};let movable=itemOptions?.movable??movableItem(id),drop=dragState&&dragState.over===id?dragState.side:void 0,props={ref:refFor(id),"data-reorder":"","data-drop":drop,onDragOver:event=>{if(dragging.current===null)return;event.preventDefault(),event.dataTransfer&&(event.dataTransfer.dropEffect="move");let found=target(id,event),over=found?id:null,side=found?.side??"before";setDragState(prev=>prev&&prev.over===over&&prev.side===side?prev:{id:dragging.current,over,side})},onDragLeave:event=>{if(dragging.current===null)return;let next=event.relatedTarget;next&&event.currentTarget.contains(next)||setDragState(prev=>prev&&prev.over===id?{...prev,over:null}:prev)},onDrop:event=>{if(dragging.current===null)return;event.preventDefault();let moved=dragging.current,found=target(id,event);endDrag(),found&&move(moved,found.to)}};return movable?{...props,draggable:!0,"aria-describedby":hintId,"data-dragging":flag(dragState?.id===id),onDragStart:event=>{if(event.target!==event.currentTarget)return;dragging.current=id,setDragState({id,over:null,side:"before"});let data=event.dataTransfer;if(data)try{data.setData(REORDER_DRAG_TYPE,id),(data.effectAllowed==="none"||data.effectAllowed==="uninitialized")&&(data.effectAllowed="move")}catch{}},onDragEnd:endDrag,onKeyDown:event=>{if(event.target!==event.currentTarget||event.defaultPrevented||!event.altKey||event.metaKey||event.ctrlKey||event.shiftKey)return;let order=current.current.ids,from=order.indexOf(id);if(from<0)return;let to=null;if(event.key==="Home")to=0;else if(event.key==="End")to=order.length-1;else{let step=KEY_STEPS[latest.current.orientation??"vertical"][event.key];step!==void 0&&(to=from+step)}to!==null&&(event.preventDefault(),event.stopPropagation(),!(to<0||to>=order.length||to===from)&&(refocus.current=id,move(id,to)))}}:props},announcer=createElement2("span",{className:"nui-reorder-live"},createElement2("span",{id:hintId,className:"nui-sr-only"},enabled?t(REORDER_WORDS.hint):""),createElement2("span",{className:"nui-sr-only",role:"status","aria-live":"polite","aria-atomic":!0},message));return{items:items2,ids,getItemProps,announcer,move,pending:pendingCount>0}}function chainReorderProps(own,reorder){let out={...own,...reorder},mine=own;for(let key of["onDragStart","onDragOver","onDragLeave","onDrop","onDragEnd","onKeyDown"]){let a=mine[key],b=reorder[key];a&&b&&(out[key]=event=>{a(event),b(event)})}let ownRef2=mine.ref;if(ownRef2&&reorder.ref){let theirs=reorder.ref;out.ref=element=>{ownRef2(element),theirs(element)}}return out}import{useCallback as useCallback12,useEffect as useEffect15,useMemo as useMemo10,useReducer,useRef as useRef14}from"react";var EMPTY_SELECTION=Object.freeze({selected:new Set,anchor:null,base:null});function rangeBetween(ids,a,b){let from=ids.indexOf(a),to=ids.indexOf(b);if(from===-1||to===-1)return[b];let[lo,hi]=from<=to?[from,to]:[to,from];return ids.slice(lo,hi+1)}function without(set,drop){let next=new Set(set);for(let id of drop)next.delete(id);return next}function union(a,b){let next=new Set(a);for(let id of b)next.add(id);return next}function sameSet(a,b){if(a.size!==b.size)return!1;for(let id of a)if(!b.has(id))return!1;return!0}function selectionReducer(state,action){switch(action.type){case"toggle":{let selected=new Set(state.selected);return selected.has(action.id)?selected.delete(action.id):selected.add(action.id),{selected,anchor:action.id,base:null}}case"set":return{selected:new Set(action.ids),anchor:action.ids[action.ids.length-1]??null,base:null};case"clear":return!state.selected.size&&state.anchor===null&&state.base===null?state:{selected:new Set,anchor:null,base:null};case"selectAll":return{selected:new Set(action.ids),anchor:action.ids[action.ids.length-1]??null,base:null};case"activate":return{...state,anchor:action.id,base:null};case"navigate":return{...state,anchor:action.id,base:new Set};case"extendStep":{let stableAnchor=state.anchor??action.cursor??action.next,base=state.base??without(state.selected,[stableAnchor]);return{selected:union(base,rangeBetween(action.ids,stableAnchor,action.next)),anchor:stableAnchor,base}}case"range":{let rangeAnchor=state.anchor??action.cursor??action.id,range=rangeBetween(action.ids,rangeAnchor,action.id),base=state.base??without(state.selected,range);return{selected:union(base,range),anchor:rangeAnchor,base}}case"prune":{let keep=new Set(action.ids),selected=new Set([...state.selected].filter(id=>keep.has(id))),base=state.base?new Set([...state.base].filter(id=>keep.has(id))):null,anchor=state.anchor!==null&&keep.has(state.anchor)?state.anchor:null;return sameSet(selected,state.selected)&&anchor===state.anchor&&(base===null?state.base===null:state.base!==null&&sameSet(base,state.base))?state:{selected,anchor,base}}default:return state}}function useSelection({ids,cursor,selected:controlledSelected,onChange}){let controlled=controlledSelected!==void 0,[,rerender]=useReducer(n=>n+1,0),store=useRef14(EMPTY_SELECTION),idsRef=useRef14(ids);idsRef.current=ids;let onChangeRef=useRef14(onChange);onChangeRef.current=onChange;let idsKey=ids.join("\0");if(controlled){let given=controlledSelected instanceof Set?controlledSelected:new Set(controlledSelected);sameSet(given,store.current.selected)||(store.current={...store.current,selected:given,base:null})}let dispatch=useCallback12(action=>{let before=store.current,next=selectionReducer(before,action);if(next!==before){if(store.current=next,onChangeRef.current&&!sameSet(next.selected,before.selected)){let inList=idsRef.current.filter(id=>next.selected.has(id)),rest=[...next.selected].filter(id=>!inList.includes(id));onChangeRef.current([...inList,...rest])}rerender()}},[]);useEffect15(()=>{dispatch({type:"prune",ids})},[idsKey]);let toggle=useCallback12(id=>dispatch({type:"toggle",id}),[dispatch]),clear=useCallback12(()=>dispatch({type:"clear"}),[dispatch]),set=useCallback12(next=>dispatch({type:"set",ids:next}),[dispatch]),navigate=useCallback12(id=>dispatch({type:"navigate",id}),[dispatch]),activate=useCallback12(id=>dispatch({type:"activate",id}),[dispatch]),selectAll=useCallback12(()=>dispatch({type:"selectAll",ids:idsRef.current}),[dispatch]),extendTo=useCallback12(id=>dispatch({type:"range",ids:idsRef.current,cursor,id}),[dispatch,cursor]),extendStep=useCallback12(next=>dispatch({type:"extendStep",ids:idsRef.current,cursor,next}),[dispatch,cursor]),{selected,anchor}=store.current;return useMemo10(()=>({selected,isSelected:id=>selected.has(id),toggle,extendTo,selectAll,clear,set,extendStep,navigate,activate,count:selected.size,anchor}),[selected,anchor,toggle,extendTo,selectAll,clear,set,extendStep,navigate,activate])}import{Fragment as Fragment8,jsx as jsx15,jsxs as jsxs13}from"react/jsx-runtime";var LIST_READER_WORDS=Object.freeze({list:w("Items","\xC9l\xE9ments"),open:w("Open","Ouvrir"),openFull:w("Open as full page","Ouvrir en pleine page"),viewOptions:w("View options","Options de la vue"),sort:w("Sort","Trier"),group:w("Group","Grouper"),layout:w("Layout","Disposition"),pickOne:w("Pick something from the list to read it.","Choisis un \xE9l\xE9ment de la liste pour le lire."),pickKeys:w("{a} to move, {b} to open.","{a} pour te d\xE9placer, {b} pour ouvrir."),rowActions:w("Actions","Actions"),loadMore:w("Load more","Charger plus"),loading:w("Loading\u2026","Chargement\u2026"),expandGroup:w("Show group","Afficher le groupe"),collapseGroup:w("Hide group","Masquer le groupe"),keptOpen:w("Save or cancel your changes first.","Enregistre ou annule tes modifications d\u2019abord."),notMoved:w("The page did not change. Try again.","La page n\u2019a pas chang\xE9. R\xE9essaie."),notFound:w("Item not found","\xC9l\xE9ment introuvable"),notFoundBody:w("It may have been deleted, or a search or filter hides it.","Il a peut-\xEAtre \xE9t\xE9 supprim\xE9, ou une recherche ou un filtre le masque.")});function refusalOf(verdict){return verdict===!1?LIST_READER_WORDS.keptOpen:typeof verdict=="string"?verdict.trim()?toWords(verdict):LIST_READER_WORDS.keptOpen:isWords(verdict)?verdict.en.trim()||verdict.fr.trim()?verdict:LIST_READER_WORDS.keptOpen:null}var LIST_DRAG_TYPE="application/x-notis-items",SKELETON_ROWS=8;function textOf2(item){let record=item;return typeof record?.title=="string"&&record.title?record.title:typeof record?.name=="string"&&record.name?record.name:null}function defaultCrumbLabel(item){return textOf2(item)}function defaultMatch(item,query){return(textOf2(item)??"").toLocaleLowerCase().includes(query.toLocaleLowerCase())}var STATUS_ACTION_IDS=new Set(["progress","pause","resume"]);function rankActions(actions){let eIndex=actions.findIndex(action=>keyList(action.key).some(key=>key.toLowerCase()==="e")),rank=(action,index)=>index===eIndex?0:action.tone==="danger"?3:STATUS_ACTION_IDS.has(action.id)?1:2;return actions.map((action,index)=>({action,index,rank:rank(action,index)})).sort((a,b)=>a.rank-b.rank||a.index-b.index).map(entry=>entry.action)}var READER_ACTIONS_MAX=3;function defaultGetId(item){let id=item?.id;return typeof id=="string"?id:String(id)}function successorOf(previous,now,gone){let present=new Set(now),index=previous.indexOf(gone);if(index===-1)return null;for(let i=index+1;i<previous.length;i+=1)if(present.has(previous[i]))return previous[i];for(let i=index-1;i>=0;i-=1)if(present.has(previous[i]))return previous[i];return null}function sameColumns(a,b){let label=value=>typeof value=="string"?value:`${value.en}${value.fr}`;return a===b||a.length===b.length&&a.every((column,index)=>column.id===b[index].id&&column.tone===b[index].tone&&label(column.label)===label(b[index].label))}function cancelledOutcome(){return{status:"cancelled",done:[],failed:[]}}function focusOf(root){return root?{active:deepActiveElement(root.getRootNode())??deepActiveElement(root.ownerDocument),body:root.ownerDocument.body}:{active:null,body:null}}function urlWithParam(param,id){if(typeof window>"u")return null;try{let url=new URL(window.location.href);return url.searchParams.set(param,id),`${url.pathname}${url.search}`}catch{return null}}var ITEM_HREF_ATTRIBUTE="data-notis-href";function readUrlParam(param){if(typeof window>"u")return null;try{return new URL(window.location.href).searchParams.get(param)||null}catch{return null}}function writeUrlParam(param,id,push){if(!(typeof window>"u"||!window.history))try{let url=new URL(window.location.href);if(id===null?url.searchParams.delete(param):url.searchParams.set(param,id),url.href===window.location.href)return;push?window.history.pushState(window.history.state,"",url.href):window.history.replaceState(window.history.state,"",url.href)}catch{}}function useOpenId(param,controlled,onChange,useUrl,refuse){let runtime=useNotisRuntime(),raw=runtime?.context?.params??null,inSpace=runtime?.resource?.kind==="space"&&typeof runtime.navigate=="function",pageUrl=!inSpace&&useUrl&&controlled===void 0,urlValue=inSpace&&raw?.[param]||null,[local,setLocal]=useState13(()=>pageUrl?readUrlParam(param):urlValue),latest=useLatest({runtime,inSpace,onChange,controlled,pageUrl,local,refuse,urlValue}),written=useRef15([]),allows=useCallback13((id,reason)=>{let words=refusalOf(latest.current.onChange?.(id,reason));return words===null?!0:(reason!=="auto"&&latest.current.refuse(words),!1)},[latest]),writeSpace=useCallback13((id,replace,follow=!1)=>{let entry={id};written.current.push(entry),writeViewParams(latest.current.runtime,{[param]:id},{replace}).catch(()=>{if(written.current=written.current.filter(pending=>pending!==entry),!follow||written.current.length)return;let{urlValue:kept,local:current,refuse:say}=latest.current;kept!==current&&(setLocal(kept),say(LIST_READER_WORDS.notMoved))})},[latest,param]);useEffect16(()=>{if(!inSpace)return;let{controlled:isControlled,local:current}=latest.current;if(isControlled!==void 0){setLocal(urlValue);return}let echo=written.current.findIndex(entry=>entry.id===urlValue);if(echo!==-1){written.current.splice(0,echo+1),written.current.length||setLocal(urlValue);return}if(urlValue!==current){if(written.current=[],!allows(urlValue,"url")){writeSpace(current,!0);return}setLocal(urlValue)}},[allows,inSpace,latest,urlValue,writeSpace]),useEffect16(()=>{if(!pageUrl||typeof window>"u")return;let sync=()=>{let next=readUrlParam(param),{local:current}=latest.current;if(next!==current){if(!allows(next,"url")){writeUrlParam(param,current,!1);return}setLocal(next)}};return sync(),window.addEventListener("popstate",sync),()=>window.removeEventListener("popstate",sync)},[allows,latest,pageUrl,param]);let set=useCallback13((id,quiet=!1,noStep=!1)=>{let{inSpace:space,controlled:isControlled,pageUrl:page,local:current}=latest.current;if(!allows(id,quiet?"auto":"user"))return!1;if(isControlled!==void 0)return!0;setLocal(id);let replace=noStep||id!==null&&current!==null;return page?writeUrlParam(param,id,!replace):space&&writeSpace(id,replace,!quiet),!0},[allows,latest,param,writeSpace]);return[controlled!==void 0?controlled:local,set]}function guardSelection(selection,blocked,selectable){return{...selection,toggle:id=>{blocked(id)||selection.toggle(id)},extendTo:id=>{blocked(id)||selection.extendTo(id)},extendStep:id=>{blocked(id)||selection.extendStep(id)},set:ids=>selection.set(ids.filter(id=>!blocked(id))),selectAll:()=>selection.set(selectable)}}function ListSkeleton({grouped=!1,rows=SKELETON_ROWS}){let t=useT();return jsxs13("div",{className:"nui-lr-scroll",role:"status","aria-busy":"true","aria-label":t(LIST_READER_WORDS.loading),children:[grouped&&jsx15("div",{className:"nui-group-head","aria-hidden":"true",children:jsx15("span",{className:"nui-skel nui-skel-head"})}),Array.from({length:rows},(_,index)=>jsxs13("div",{className:"nui-row nui-row-skel","aria-hidden":"true",children:[jsx15("span",{className:"nui-skel nui-skel-dot"}),jsxs13("span",{className:"nui-row-main",children:[jsx15("span",{className:"nui-skel nui-skel-line",style:{width:`${44-index*13%22}%`}}),jsx15("span",{className:"nui-skel nui-skel-meta",style:{width:`${22+index*7%12}%`}})]})]},index))]})}function ListReader(props){let parent=useShortcutOwner(),autoId=useStableId("list"),owner=props.scope??`${parent}/${props.listId??autoId}`;return jsx15(ShortcutScope,{owner,available:!0,children:jsx15(ListReaderInner,{...props})})}function ListReaderInner({getId=defaultGetId,row,reader,actions=[],handlers,openAs,density="comfortable",layout="list",columns,groupBy,selectable,dragSelect=!0,wrap=!0,empty,title,tabs,toolbarActions,create,viewMenu,infoLine,search,footer,readerLabel,readerActions,crumbLabel=defaultCrumbLabel,autoOpen:autoOpenProp=!1,renderTile,tileVariant,look="plain",openParam="open",onOpen,itemHref,open:controlledOpen,onOpenChange,listId="list",label,className,openInUrl=!0,selected:controlledSelected,onSelectedChange,afterAction="clear",draggable,onDragStart,loading=!1,hasMore=!1,onLoadMore,loadingMore=!1,isPending,isDisabled,collapsible=!1,collapsed:controlledCollapsed,onCollapsedChange,groupCounts=!0,apiRef,items:naturalItems,reorder,board}){let t=useT(),labelled=useLabelValue(),rootRef=useRef15(null),listRef=useRef15(null),scrollRef=useRef15(null),readerRef=useRef15(null),[localQuery,setLocalQuery]=useState13(""),query=!!search&&!search.onChange?localQuery.trim():"",match=search?.match??defaultMatch,notifyRef=useRef15(null),reorderer=useReorder({items:naturalItems,getId,enabled:!!reorder&&!query&&!groupBy&&layout!=="board",orientation:layout==="tiles"?"both":"vertical",canReorder:reorder?.canReorder,onReorder:change=>reorder?.onReorder(change),onError:error=>notifyRef.current?.(REORDER_WORDS.failed,{tone:"danger",reason:actionErrorReason(error)})}),allItems=reorderer.items,filtered=useMemo11(()=>query?allItems.filter(item=>match(item,query)):allItems,[allItems,match,query]),boardOn=layout==="board"&&!!board,autoOpen=autoOpenProp&&!boardOn,boardItems=useRef15([]),boardColumns=useRef15([]),items2=filtered;if(boardOn){let ordered=boardOrder(filtered,board.columns,board.getColumn),previous=boardItems.current;(ordered.length!==previous.length||ordered.some((item,index)=>item!==previous[index]))&&(boardItems.current=ordered),items2=boardItems.current}let columnKey=boardOn?items2.map(item=>board.getColumn(item)).join(""):"",itemColumns=useMemo11(()=>columnKey.split(""),[columnKey]);boardOn&&!sameColumns(board.columns,boardColumns.current)&&(boardColumns.current=board.columns);let boardCols=boardColumns.current,ids=useMemo11(()=>items2.map(getId),[items2,getId]),byId=useMemo11(()=>{let map=new Map;return items2.forEach((item,index)=>map.set(ids[index],item)),map},[items2,ids]),blockedIds=useMemo11(()=>{let out=new Set;return!isPending&&!isDisabled||items2.forEach((item,index)=>{(isPending?.(item)||isDisabled?.(item))&&out.add(ids[index])}),out},[ids,isDisabled,isPending,items2]),disabledIds=useMemo11(()=>{let out=new Set;return isDisabled&&items2.forEach((item,index)=>{isDisabled(item)&&out.add(ids[index])}),out},[ids,isDisabled,items2]),isBlocked=useCallback13(id=>blockedIds.has(id),[blockedIds]),getItem=useCallback13(id=>blockedIds.has(id)?void 0:byId.get(id),[blockedIds,byId]),groups=useMemo11(()=>{let out=[];return items2.forEach((item,index)=>{let group=groupBy?groupBy(item):null,last=out[out.length-1];last&&(last.group?.id??null)===(group?.id??null)?last.entries.push({item,id:ids[index]}):out.push({group,entries:[{item,id:ids[index]}]})}),out},[groupBy,ids,items2]),[collapsedLocal,setCollapsedLocal]=useState13([]),collapsedList=controlledCollapsed??collapsedLocal,collapsedSet=useMemo11(()=>new Set(collapsible&&!boardOn?collapsedList:[]),[boardOn,collapsible,collapsedList]),toggleGroup=useCallback13(id=>{let next=collapsedList.includes(id)?collapsedList.filter(entry=>entry!==id):[...collapsedList,id];controlledCollapsed===void 0&&setCollapsedLocal(next),onCollapsedChange?.(next)},[collapsedList,controlledCollapsed,onCollapsedChange]),navIds=useMemo11(()=>collapsedSet.size?groups.flatMap(({group,entries})=>group&&collapsedSet.has(group.id)?[]:entries.map(e=>e.id)):ids,[collapsedSet,groups,ids]),selectableIds=useMemo11(()=>blockedIds.size?ids.filter(id=>!blockedIds.has(id)):ids,[blockedIds,ids]),lanes=useMemo11(()=>{if(!boardOn)return[];let map=new Map(boardCols.map(column=>[column.id,[]]));return items2.forEach((item,index)=>map.get(itemColumns[index])?.push({item,id:ids[index]})),boardCols.map(column=>({column,entries:map.get(column.id)}))},[boardOn,boardCols,itemColumns,ids,items2]),laneIds=useMemo11(()=>lanes.map(lane=>lane.entries.map(entry=>entry.id)),[lanes]),pendingIndex=useRef15(void 0),landing=useRef15(null),moveRun=useRef15(()=>{}),boardMove=boardOn&&!!board.onMove,boardRef=useLatest(board),listActions=useMemo11(()=>{if(!boardMove)return actions;let def={id:"move",bulk:!0,options:()=>boardRef.current.columns.map(column=>({value:column.id,label:column.label})),value:targets=>{let first=targets[0]?boardRef.current.getColumn(targets[0]):null;return first!==null&&targets.every(item=>boardRef.current.getColumn(item)===first)?first:null},run:(targets,choice)=>moveRun.current(targets,choice)},at=actions.findIndex(ref=>(typeof ref=="string"?ref:ref.id)==="move");if(at===-1)return[def,...actions];let listed2=actions[at],merged=typeof listed2=="string"?def:{...listed2,...def};return actions.map((ref,index)=>index===at?merged:ref)},[actions,boardMove,boardRef,moveRun]),actionsController=useActions(listActions,handlers),[openId,setOpenId]=useOpenId(openParam,controlledOpen,onOpenChange,openInUrl,actionsController.notify),runtime=useNotisRuntime(),lastShown=useRef15(null),listed=openId!==null&&byId.has(openId);openId===null||!listed&&lastShown.current?.id!==openId?lastShown.current=null:listed&&(lastShown.current={id:openId,item:byId.get(openId)});let known=openId!==null&&lastShown.current?.id===openId,openItem=reader&&known?lastShown.current.item:null,missing=!!reader&&openId!==null&&!known&&!loading&&!hasMore&&items2.length>0,readerOpen=openItem!==null||missing,[cursor,setCursor]=useState13(openId),allowed=normalizeAllowed(openAs),storeKey=useOpenModeKey(void 0,listId),[mode,setMode]=useOpenMode({allowed,listId}),latest=useLatest({ids,navIds,byId,onOpen,openId,cursor,reader,disabledIds,hasMore,onLoadMore,loadingMore});useEffect16(()=>{openId!==null&&setCursor(openId)},[openId]);let announced=useRef15(null),shownId=openItem!==null?openId:null;useEffect16(()=>{if(!reader||openId!==null&&openItem===null&&!missing||announced.current===shownId)return;announced.current=shownId;let{onOpen:notify2,byId:map}=latest.current;notify2?.(shownId===null?null:map.get(shownId)??lastShown.current?.item??null)},[latest,missing,openId,openItem,reader,shownId]);let open=useCallback13((id,options={})=>{let{byId:map,onOpen:notify2,disabledIds:disabled}=latest.current;if(id!==null&&setCursor(id),id!==null&&disabled.has(id))return!1;if(!latest.current.reader)return id!==null&&notify2?.(map.get(id)??null),!0;let kept=latest.current.openId;return id===kept||setOpenId(id,!!options.quiet,!!options.noStep)?!0:(kept!==null&&latest.current.ids.includes(kept)&&setCursor(kept),!1)},[latest,setOpenId]),close=useCallback13(()=>open(null),[open]);useTopBarTitleLeaf(openItem!==null?crumbLabel(openItem):null,close);let follow=useRef15(null),noteFollow=useCallback13(id=>{let{active,body:body2}=focusOf(rootRef.current);id===null?follow.current=null:active&&active!==body2&&containsComposed(readerRef.current,active)?follow.current={id,where:"reader"}:!active||active===body2||containsComposed(listRef.current,active)?follow.current={id,where:"list"}:follow.current=null},[]);useEffect16(()=>{let target=follow.current;if(!target||(follow.current=null,target.id!==cursor))return;let{active,body:body2}=focusOf(rootRef.current),dropped=!active||active===body2;if(target.where==="reader"){dropped&&readerRef.current?.focus({preventScroll:!0});return}if(!dropped&&!containsComposed(listRef.current,active))return;let rowEl=findRow(scrollRef.current,target.id);rowEl&&(rowEl.focus({preventScroll:!0}),rowEl.scrollIntoView?.({block:"nearest"}))},[cursor]);let[section,setSection]=useState13(null),sectionSeq=useRef15(0),sectionOpenId=useRef15(openId);useEffect16(()=>{sectionOpenId.current!==openId&&(sectionOpenId.current=openId,section&&section.id!==openId&&setSection(null))},[openId,section]);let notify=actionsController.notify;notifyRef.current=notify,useImperativeHandle(apiRef,()=>({open:(id,options)=>{let opened=open(id);return opened&&setSection(options?.section?{id,name:options.section,seq:++sectionSeq.current}:null),opened},close:()=>open(null),focus:id=>{latest.current.ids.includes(id)&&setCursor(id)},notify}),[latest,notify,open]);let activeSection=section&&section.id===openId?section:null,rawSelection=useSelection({ids:selectableIds,cursor,selected:controlledSelected,onChange:onSelectedChange}),selection=useMemo11(()=>blockedIds.size?guardSelection(rawSelection,isBlocked,selectableIds):rawSelection,[blockedIds.size,isBlocked,rawSelection,selectableIds]),selectionRef=useLatest(selection),runStarts=useRef15(new Map),controller={...actionsController,run:(action,items3,choice)=>{let id=typeof action=="string"?action:action.id;if(!actionsController.isBusy(id)){let sel=selectionRef.current;runStarts.current.set(id,{onSelection:sel.count>0&&items3.some(item=>sel.isSelected(getId(item))),selected:[...sel.selected]})}return actionsController.run(action,items3,choice)}},canSelect=selectable??controller.actions.some(action=>action.bulk),listSelection=canSelect?selection:null,onRan=useCallback13((action,items3,outcome)=>{let start=runStarts.current.get(action.id);if(runStarts.current.delete(action.id),outcome.status==="cancelled"||outcome.status==="busy")return;let sel=selectionRef.current,{ids:present,disabledIds:disabled}=latest.current,failedIds=outcome.failed.map(item=>getId(item)),ranOnSelection=!!start?.onSelection||sel.count>0&&items3.some(item=>sel.isSelected(getId(item))),moveOn=keyList(action.key).some(key=>key.toLowerCase()==="e"),keep=afterAction==="keep"||boardMove&&action.id==="move",restore=next2=>{let wanted=new Set(next2),kept=present.filter(id=>wanted.has(id)&&!disabled.has(id));(kept.length!==sel.count||kept.some(id=>!sel.isSelected(id)))&&rawSelection.set(kept)};if((ranOnSelection||moveOn)&&(!keep||moveOn?failedIds.length?restore(failedIds):sel.clear():restore([...start?.selected??[],...sel.selected,...failedIds])),!moveOn||outcome.status!=="done")return;let{ids:list,cursor:current,openId:opened}=latest.current,doneIds=outcome.done.map(item=>getId(item)),last=Math.max(-1,...doneIds.map(id=>list.indexOf(id))),next=list.slice(last+1).find(id=>!doneIds.includes(id))??null;!next||!doneIds.includes(current??opened)||(noteFollow(next),setCursor(next),opened!==null&&doneIds.includes(opened)&&open(next,{quiet:!0}))},[afterAction,boardMove,getId,latest,noteFollow,open,rawSelection,selectionRef]),[picker,setPicker]=useState13(null),pickerSettle=useRef15(null),settlePicker=useCallback13(outcome=>{let settle=pickerSettle.current;pickerSettle.current=null,settle&&settle(outcome??cancelledOutcome())},[]),pickerAnchor=useCallback13(action=>{let root=rootRef.current;if(!root)return null;let escapeId=action.id.replace(/["\\]/g,"\\$&"),button=root.querySelector(`.nui-selbar [data-action="${escapeId}"]`);if(button)return button;let{cursor:current,openId:opened}=latest.current;if(opened!==null&&!!readerRef.current)return readerRef.current.querySelector('[data-part="actions"]')??readerRef.current;let rowId=current??opened,rowEl=rowId!==null?findRow(scrollRef.current,rowId):null;return rowEl?.querySelector(".nui-row-more")??rowEl??scrollRef.current??root},[latest]),openPicker=useCallback13((action,targets,anchor,settle)=>{settlePicker(null),pickerSettle.current=settle??null,setPicker({action,items:targets,anchor:anchor??pickerAnchor(action)})},[pickerAnchor,settlePicker]),choose=useCallback13((action,targets,option)=>(setPicker(null),controller.run(action,targets,option).then(outcome=>(outcome.status!=="busy"&&onRan(action,targets,outcome),outcome))),[controller,onRan]),listVisible=useCallback13(()=>{let element=listRef.current;return!element||!element.isConnected||element.hasAttribute("inert")?!1:typeof window>"u"||window.getComputedStyle(element).display!=="none"},[]),selectionKeys=useCallback13(()=>selectionRef.current.count>0&&listVisible(),[listVisible,selectionRef]),bar=useSelectionBar({controller,selection,getItem,fallback:()=>{let{openId:opened,cursor:current}=latest.current,id=current??opened,item=id!==null?getItem(id):void 0;return item!==void 0?[item]:[]},when:listVisible,onRan,onPick:openPicker}),previousIds=useRef15(ids);useIsoLayoutEffect(()=>{let previous=previousIds.current;if(previousIds.current=ids,previous===ids)return;let present=new Set(ids),{cursor:current,openId:opened}=latest.current;if(current!==null&&!present.has(current)&&previous.includes(current)){let next=successorOf(previous,ids,current);noteFollow(next),setCursor(next)}opened!==null&&!present.has(opened)&&previous.includes(opened)&&open(successorOf(previous,ids,opened),{quiet:!0})},[ids]);let centerOpen=readerOpen&&mode==="center",fullOpen=readerOpen&&mode==="full",[paneLayout,setPaneLayout]=useState13(NO_PANE),listCovered=fullOpen||centerOpen||mode==="side"&&readerOpen&&paneLayout.covers,besideList=!!reader&&mode==="side"&&paneLayout.split,autoOpened=useRef15(!1);useEffect16(()=>{if(!(!autoOpen||autoOpened.current||!besideList)){if(openId!==null){autoOpened.current=!0;return}loading||!navIds.length||(autoOpened.current=!0,open(navIds[0],{quiet:!0,noStep:!0}))}},[autoOpen,besideList,loading,navIds,open,openId]);let loadMore=useCallback13(()=>{let{hasMore:more,onLoadMore:load,loadingMore:busy}=latest.current;!more||!load||busy||Promise.resolve(load()).catch(()=>{})},[latest]),wraps=wrap&&!hasMore,{getRowProps}=useListKeys({ids:navIds,cursor,setCursor,onOpen:open,wrap:wraps,containerRef:scrollRef,selection:listSelection,openId:readerOpen?openId:null,enabled:!centerOpen&&!fullOpen,onReachEnd:hasMore&&onLoadMore?loadMore:void 0,grid:layout==="tiles",board:boardOn?laneIds:void 0}),marquee=useMarqueeSelection({enabled:canSelect&&dragSelect&&!centerOpen&&!fullOpen,itemAttribute:ROW_ID_ATTRIBUTE,interactiveSelector:ROW_INTERACTIVE_SELECTOR,startSelector:".nui-row-lead",isSelectable:id=>!blockedIds.has(id)&&byId.has(id),onSelect:next=>selectionRef.current.set(next),onClear:()=>{selectionRef.current.count>0&&selectionRef.current.clear()}}),step=useCallback13((delta,repeat=!1)=>{let{navIds:list,openId:opened,cursor:current}=latest.current,from=opened??current,next=stepCursor(list,from,delta,{wrap:wraps,repeat});return next===null?!1:next===from?delta>0&&latest.current.hasMore&&list[list.length-1]===from?(loadMore(),!0):!1:(open(next),!0)},[latest,loadMore,open,wraps]),centerDefs=useMemo11(()=>{if(!centerOpen)return[];let onlyThisDialog=()=>{let dialog=readerRef.current;return dialog?openModalLayers(dialog.ownerDocument).every(layer=>layer===dialog):!1},k=DEFAULT_KEYMAP;return[{id:`${k["list.next"].id}.center`,keys:[...k["list.next"].keys],scope:"modal",label:k["list.next"].label,repeat:!0,when:onlyThisDialog,run:event=>step(1,event.repeat)},{id:`${k["list.prev"].id}.center`,keys:[...k["list.prev"].keys],scope:"modal",label:k["list.prev"].label,repeat:!0,when:onlyThisDialog,run:event=>step(-1,event.repeat)}]},[centerOpen,step]);useShortcuts(centerDefs);let coverDefs=useMemo11(()=>{if(!readerOpen||centerOpen)return[];let covering=()=>{let pane=readerRef.current;return!pane||!isVisibleComposed(pane)?!1:fullOpen||!isVisibleComposed(listRef.current)},k=DEFAULT_KEYMAP;return[{id:`${k["list.next"].id}.reader`,keys:[...k["list.next"].keys],scope:"detail",label:k["list.next"].label,repeat:!0,when:covering,run:event=>step(1,event.repeat)},{id:`${k["list.prev"].id}.reader`,keys:[...k["list.prev"].keys],scope:"detail",label:k["list.prev"].label,repeat:!0,when:covering,run:event=>step(-1,event.repeat)}]},[centerOpen,fullOpen,readerOpen,step]);useShortcuts(coverDefs);let laneIdsRef=useLatest(laneIds),controllerRef=useLatest(controller);moveRun.current=(targets,choice)=>{let index=pendingIndex.current;pendingIndex.current=void 0;let current=boardRef.current;if(!choice||!current?.onMove||!targets.length)return{cancelled:!0};let to=choice.value,targetIds=targets.map(getId),at=current.columns.findIndex(column=>column.id===to);if(at===-1)return{cancelled:!0};if(index===void 0){if(targets.every(item=>current.getColumn(item)===to))return{cancelled:!0}}else{let lane=laneIdsRef.current[at]??[],rest=lane.filter(id=>!targetIds.includes(id)),next=[...rest.slice(0,index),...targetIds,...rest.slice(index)];if(next.length===lane.length&&next.every((id,position)=>id===lane[position]))return{cancelled:!0}}let{cursor:currentCursor}=latest.current,lead=currentCursor!==null&&targetIds.includes(currentCursor)?currentCursor:targetIds[0],{active,body:body2}=focusOf(rootRef.current);landing.current={id:lead,column:to,focus:!active||active===body2||containsComposed(listRef.current,active)},setCursor(lead);let words=toWords(current.columns[at].label),moved={en:BOARD_WORDS.moved.en.replace("{column}",words.en),fr:BOARD_WORDS.moved.fr.replace("{column}",words.fr)},settle=result2=>{if(typeof result2=="function")return{undo:result2,toast:moved};if(result2&&typeof result2=="object"){let detail=result2;if((detail.cancelled||detail.failed?.length)&&(landing.current=null),typeof detail.undo=="function"&&!("toast"in detail))return{...detail,toast:moved}}return result2},result;try{result=current.onMove(targetIds,to,index)}catch(error){throw landing.current=null,error}return!result||typeof result.then!="function"?settle(result):result.then(settle,error=>{throw landing.current=null,error})};let moveBy=useCallback13(delta=>{let current=boardRef.current;if(!current?.onMove)return!1;let sel=selectionRef.current,{ids:list,cursor:currentCursor,openId:opened}=latest.current,targets=[];if(sel.count>0&&(targets=list.filter(id=>sel.isSelected(id)).map(id=>getItem(id)).filter(item=>item!==void 0)),!targets.length){let id=currentCursor??opened,item=id!==null?getItem(id):void 0;item!==void 0&&(targets=[item])}if(!targets.length)return!1;let lead=targets.find(item=>getId(item)===currentCursor)??targets[0],to=neighbourColumn(current.columns,current.getColumn(lead),delta);if(to===null)return!0;let column=current.columns.find(entry=>entry.id===to);return controllerRef.current.run("move",targets,{value:to,label:column.label}).finally(()=>{runStarts.current.delete("move")}),!0},[boardRef,controllerRef,getId,getItem,latest,selectionRef]),boardDefs=useMemo11(()=>{if(!boardMove||centerOpen||fullOpen)return[];let live=()=>{let scroll=scrollRef.current;return listVisible()&&!!scroll&&isVisibleComposed(scroll)&&!scroll.closest("[inert]")};return[{id:"list.board.moveLeft",keys:["shift+arrowleft"],scope:"collection",label:BOARD_WORDS.moveLeft,repeat:!0,when:live,run:()=>moveBy(-1)},{id:"list.board.moveRight",keys:["shift+arrowright"],scope:"collection",label:BOARD_WORDS.moveRight,repeat:!0,when:live,run:()=>moveBy(1)}]},[boardMove,centerOpen,fullOpen,listVisible,moveBy]);useShortcuts(boardDefs),useIsoLayoutEffect(()=>{let target=landing.current;if(!target||!boardOn)return;let item=byId.get(target.id);if(!item){landing.current=null;return}if(board.getColumn(item)!==target.column)return;landing.current=null,setCursor(target.id);let rowEl=findRow(scrollRef.current,target.id);if(!rowEl)return;let{active,body:body2}=focusOf(rootRef.current);target.focus&&(!active||active===body2||containsComposed(listRef.current,active))&&rowEl.focus({preventScroll:!0}),rowEl.scrollIntoView?.({block:"nearest",inline:"nearest"})},[items2,columnKey]);let[drop,setDrop]=useState13(null),dragIds=useRef15([]),dropAt=useCallback13((columnId,event)=>{let lane=laneIdsRef.current[boardRef.current?.columns.findIndex(column=>column.id===columnId)??-1]??[],container=event.currentTarget,tiles=lane.filter(id=>!dragIds.current.includes(id)).flatMap(id=>{let el=findRow(container,id);if(!el)return[];let rect=el.getBoundingClientRect();return[{id,top:rect.top,height:rect.height}]});return{column:columnId,...dropIndex(tiles,event.clientY)}},[boardRef,laneIdsRef]),isListDrag=event=>Array.from(event.dataTransfer?.types??[]).includes(LIST_DRAG_TYPE),onColumnDragOver=columnId=>event=>{if(!boardMove||!isListDrag(event))return;event.preventDefault(),event.dataTransfer.dropEffect="move";let next=dropAt(columnId,event);setDrop(previous=>previous&&previous.column===next.column&&previous.before===next.before&&previous.index===next.index?previous:next)},onColumnDragLeave=event=>{let related=event.relatedTarget;related&&event.currentTarget.contains(related)||setDrop(null)},onColumnDrop=columnId=>event=>{if(!boardMove||!isListDrag(event))return;event.preventDefault();let place2=dropAt(columnId,event);setDrop(null);let dropped=[];try{let parsed=JSON.parse(event.dataTransfer.getData(LIST_DRAG_TYPE)||"[]");Array.isArray(parsed)&&(dropped=parsed.filter(id=>typeof id=="string"))}catch{}dropped.length||(dropped=dragIds.current),dragIds.current=[];let targets=dropped.map(id=>getItem(id)).filter(item=>item!==void 0),column=boardRef.current?.columns.find(entry=>entry.id===columnId),action=controllerRef.current.actions.find(entry=>entry.id==="move");!targets.length||!column||!action||(pendingIndex.current=place2.index,choose(action,targets,{value:columnId,label:column.label}),pendingIndex.current=void 0)},onTileDragEnd=()=>{dragIds.current=[],setDrop(null)},visible=()=>{let root=rootRef.current;return!!root&&root.isConnected&&(typeof window>"u"||window.getComputedStyle(root).display!=="none")};useEscapeLayer(`${listId}.detail`,()=>!latest.current.openId||!visible()?!1:(close(),!0),{priority:ESCAPE_PRIORITY.detail,enabled:readerOpen}),useEscapeLayer(`${listId}.selection`,()=>latest.current.openId&&readerOpen||selection.count===0||!visible()?!1:(selection.clear(),!0),{priority:ESCAPE_PRIORITY.selection,enabled:selection.count>0});let wasCenter=useRef15(!1);useIsoLayoutEffect(()=>{let list=listRef.current;if(list&&(centerOpen?list.setAttribute("inert",""):list.removeAttribute("inert")),centerOpen&&!wasCenter.current&&readerRef.current?.focus({preventScroll:!0}),!centerOpen&&wasCenter.current){let id=latest.current.cursor;id!==null&&findRow(scrollRef.current,id)?.focus({preventScroll:!0})}wasCenter.current=centerOpen},[centerOpen]);let itemMenu=useCallback13((item,where,extra=[],listActions2=!0)=>{let list=listActions2?rankActions(controller.available([item])):[],canOpen=where==="row"&&!!(latest.current.reader||latest.current.onOpen);if(!list.length&&!extra.length&&!canOpen)return null;let id=getId(item),firstDanger=list.findIndex(action=>action.tone==="danger");return jsxs13(Menu,{align:"end",label:LIST_READER_WORDS.rowActions,accelerators:where==="reader",trigger:jsx15("button",{type:"button",className:where==="row"?"nui-row-more":"nui-om-btn","aria-label":t(SHELL_WORDS.more),"data-part":where==="reader"?"more":void 0,children:jsx15(Icon,{name:"dots-three"})}),children:[canOpen&&jsx15(Menu.Item,{icon:"arrow-square-out",keys:"enter",onSelect:()=>{open(id)},children:t(LIST_READER_WORDS.open)}),extra.map(action=>jsx15(Menu.Item,{icon:action.icon,keys:action.key,disabled:action.disabled,onSelect:()=>{action.disabled||Promise.resolve(action.run()).catch(()=>{})},children:t(action.label)},`reader:${action.id}`)),list.map((action,index)=>{let line=index===firstDanger&&index>0?jsx15(Menu.Separator,{},`sep:${action.id}`):null,options=action.options?.([item]);if(options){let value=action.value?.([item]);return[line,jsx15(Menu.Sub,{icon:action.icon,disabled:controller.busy.has(action.id),menuLabel:action.label,label:action.key?jsxs13("span",{className:"nui-lr-sub-label",children:[jsx15("span",{children:t(action.label)}),jsx15("span",{className:"nui-menu-keys",children:jsx15(Keycap,{keys:keyList(action.key)})})]}):t(action.label),children:options.map(option=>jsx15(Menu.Item,{icon:option.icon,checked:action.value?value===option.value:void 0,onSelect:()=>{choose(action,[item],option)},children:t(option.label)},option.value))},action.id)]}return[line,jsx15(Menu.Item,{icon:action.icon,tone:action.tone,disabled:controller.busy.has(action.id),keys:action.key?keyList(action.key):void 0,onSelect:()=>{controller.run(action,[item]).then(outcome=>{outcome.status!=="busy"&&onRan(action,[item],outcome)})},children:t(action.label)},action.id)]})]})},[choose,controller,getId,latest,onRan,open,t]),rowMore=useCallback13(id=>{let item=getItem(id),slot=jsx15("span",{className:"nui-row-more","data-slot":"","aria-hidden":"true"});return item===void 0?slot:itemMenu(item,"row")??slot},[getItem,itemMenu]),anySelected=selection.count>0,stateOf=useCallback13(id=>({cursor:cursor===id,open:readerOpen&&openId===id,selected:canSelect&&selection.isSelected(id),anySelected:canSelect&&anySelected,index:ids.indexOf(id)}),[anySelected,canSelect,cursor,ids,openId,readerOpen,selection]),source=useMemo11(()=>({stateOf,toggle:canSelect?selection.toggle:null,more:controller.actions.length?rowMore:null}),[canSelect,controller.actions.length,rowMore,selection.toggle,stateOf]),dragOn=draggable??boardMove,canDrag=(item,id)=>!!dragOn&&!blockedIds.has(id)&&(typeof dragOn=="function"?dragOn(item):!0),dragStart=(id,event)=>{let sel=selectionRef.current,carried=canSelect&&sel.isSelected(id)?ids.filter(entry=>sel.isSelected(entry)&&!blockedIds.has(entry)):[id];dragIds.current=carried;let dragged=carried.map(entry=>byId.get(entry)).filter(entry=>entry!==void 0),data=event.dataTransfer;if(data)try{data.setData(LIST_DRAG_TYPE,JSON.stringify(carried)),data.setData("text/plain",carried.join(`
@@ -14,5 +14,5 @@ ${lines}
14
14
  `)}function applyCommentPatches(comments,patches){return comments.map(comment=>{let patch=patches[comment.recordKey];return!patch||patch.revision!=null&&comment.revision>=patch.revision?comment:{...comment,...patch.fields,revision:Math.max(comment.revision,patch.revision??0)}})}var COMMENT_CHECK_ANSWERS=["Looks good","Undo"],COMMENT_TEXT_FILE=/\.(txt|md|markdown|csv|tsv|json|ya?ml|html?|xml|srt|vtt)$/i;function clipCommentAnswer(body){return body.length>500?`${body.slice(0,497)}...`:body}function newCommentId(){return typeof crypto<"u"&&"randomUUID"in crypto?crypto.randomUUID():`${Date.now().toString(16)}-${Math.random().toString(16).slice(2)}`}function commentRelativeTime(iso,locale,now){let at=commentTimeOf(iso);if(!Number.isFinite(at))return"";let seconds=Math.round((at-now)/1e3),format=new Intl.RelativeTimeFormat(locale,{numeric:"auto",style:"short"}),abs=Math.abs(seconds);return abs<45?format.format(0,"second"):abs<3600?format.format(Math.round(seconds/60),"minute"):abs<86400?format.format(Math.round(seconds/3600),"hour"):format.format(Math.round(seconds/86400),"day")}async function writeCommentClipboard(text,host){try{if(typeof navigator<"u"&&navigator.clipboard?.writeText)return await navigator.clipboard.writeText(text),!0}catch{}if(!host)return!1;try{let doc=host.ownerDocument,area=doc.createElement("textarea");area.value=text,area.setAttribute("readonly",""),area.style.position="absolute",area.style.opacity="0",area.style.pointerEvents="none",host.appendChild(area),area.select();let ok=doc.execCommand("copy");return area.remove(),ok}catch{return!1}}function scrollCommentIntoView(element){let view=element.ownerDocument.defaultView;if(!view)return;let box=element.parentElement;for(;box&&box.tagName!=="BODY";){let style=view.getComputedStyle(box);if(/(auto|scroll)/.test(style.overflowY)&&box.scrollHeight>box.clientHeight+1)break;box=box.parentElement}if(!box||box.tagName==="BODY")return;let outer=box.getBoundingClientRect(),at=element.getBoundingClientRect(),delta=at.top<outer.top?at.top-outer.top-8:at.bottom>outer.bottom?at.bottom-outer.bottom+8:0;delta&&typeof box.scrollBy=="function"&&box.scrollBy({top:delta,behavior:"smooth"})}var COMMENT_WORDS=Object.freeze({comments:w("Comments","Commentaires"),thisAnchor:w("This item","Cet \xE9l\xE9ment"),all:w("All","Tous"),open:w("Open","Ouverts"),resolved:w("Resolved","R\xE9solu"),resolvedFilter:w("Resolved","R\xE9solus"),status:w("Status","Statut"),scope:w("Show","Afficher"),copy:w("Copy changes since last turn","Copier depuis le dernier tour"),copiedOne:w("Copied 1 change","1 changement copi\xE9"),copiedMany:w("Copied {n} changes","{n} changements copi\xE9s"),copyFailed:w("Could not copy. Try again.","Copie impossible. R\xE9essaie."),anchorLabel:w("Item {n}","\xC9l\xE9ment {n}"),reply:w("Reply","R\xE9pondre"),replyToReopen:w("Reply to reopen","R\xE9pondre pour rouvrir"),newComment:w("New comment","Nouveau commentaire"),newCommentOn:w("New comment on item {n}","Nouveau commentaire sur l\u2019\xE9l\xE9ment {n}"),newCommentWhole:w("New comment on all of item {n}","Nouveau commentaire sur tout l\u2019\xE9l\xE9ment {n}"),commentOnAnchor:w("Comment on all of item {n}","Commenter tout l\u2019\xE9l\xE9ment {n}"),pinHint:w("Click where the comment goes.","Clique l\xE0 o\xF9 va le commentaire."),zoneHint:w("Click to pin a spot, or hold and drag to mark a zone.","Clique pour \xE9pingler un point, ou maintiens et fais glisser pour marquer une zone."),commentPlaceholder:w("Add a comment","Ajouter un commentaire"),send:w("Send","Envoyer"),cancel:w("Cancel","Annuler"),resolve:w("Resolve","R\xE9soudre"),reopen:w("Reopen","Rouvrir"),delete:w("Delete","Supprimer"),deleteTitle:w("Delete this comment thread?",`Supprimer ce fil de commentaires${NNBSP}?`),deleteBody:w("It disappears from the page. The next copy still tells agents you deleted it.","Il dispara\xEEt de la page. La prochaine copie indique quand m\xEAme aux agents que tu l\u2019as supprim\xE9."),needs:w("{who} needs","{who} a besoin de"),needCheck:w("Your check on the change","Ta validation du changement"),needChoice:w("A choice","Un choix"),needInput:w("A file or text","Un fichier ou du texte"),looksGood:w("Looks good","\xC7a me va"),undo:w("Undo","Annuler le changement"),attach:w("Attach a file","Joindre un fichier"),paste:w("Paste text","Coller du texte"),sent:w("{answer}, sent to the agent","{answer}, envoy\xE9 \xE0 l\u2019agent"),example:w("Example","Exemple"),emptyAnchor:w("No comments here yet.","Aucun commentaire ici pour le moment."),emptyAll:w("No comments yet.","Aucun commentaire pour le moment."),emptyResolved:w("No resolved comments.","Aucun commentaire r\xE9solu."),saveError:w("Could not save that change. Try again.","Impossible d\u2019enregistrer ce changement. R\xE9essaie."),textOnly:w("Only text files can be attached here.","Seuls les fichiers texte peuvent \xEAtre joints ici."),newActivity:w("New since last turn","Nouveau depuis le dernier tour"),pin:w("{who}: {body}",`{who}${NNBSP}: {body}`),zone:w("{who}, on a zone: {body}",`{who}, sur une zone${NNBSP}: {body}`)});function commentWords(overrides){return overrides?Object.freeze({...COMMENT_WORDS,...overrides}):COMMENT_WORDS}function commentCopiedWords(words,n){return n===1?words.copiedOne:fillWords(words.copiedMany,{n})}import{useCallback as useCallback19,useEffect as useEffect24,useMemo as useMemo20,useRef as useRef23,useState as useState23}from"react";var ZONE_MIN_PX=4,NO_ANCHORS=Object.freeze([]);function useComments(options={}){let{list="comments",database="comments",scope=null,anchors=NO_ANCHORS,anchorKey=null,me="Flo",authors,fallbackAuthor="Notis",pageSize=500,live=!0}=options,runtime=useNotisRuntime(),locale=useToolkitLocale(),words=useMemo20(()=>commentWords(options.words),[options.words]),say=useCallback19((key,vars)=>pick(vars?fillWords(words[key],vars):words[key],locale),[words,locale]),columns=useMemo20(()=>commentColumns(options.columns),[options.columns]),latest=useRef23(options);latest.current=options;let query=useShown(list,{pageSize}),refetch=query.refetch,refetchRef=useRef23(refetch);refetchRef.current=refetch,useEffect24(()=>{if(!live||!runtime?.subscribeDatabase)return;let stop2=runtime.subscribeDatabase(database,()=>{refetchRef.current()});return()=>{stop2?.()}},[runtime,database,live]);let insertMutation=useNativeMutation(database,"insert"),updateMutation=useNativeMutation(database,"update"),toaster=useToast(),notify=toaster.notify,[patches,setPatches]=useState23({}),[drafts,setDrafts]=useState23([]),[busy,setBusy]=useState23(()=>new Set),[marker,setMarker]=useState23(null),authorsKey=authors?.join("|")??null,serverComments=useMemo20(()=>commentRowsOf(query.data).map(row=>readCommentRow(row,{columns,authors:authorsKey?.split("|"),fallbackAuthor})),[query.data,columns,authorsKey,fallbackAuthor]),comments=useMemo20(()=>{let serverKeys=new Set(serverComments.map(comment=>comment.recordKey)),pending=drafts.filter(draft=>!draft.serverKey||!serverKeys.has(draft.serverKey)).map(draft=>draft.comment);return[...applyCommentPatches(serverComments,patches),...pending]},[serverComments,patches,drafts]);useEffect24(()=>{let serverKeys=new Set(serverComments.map(comment=>comment.recordKey));setDrafts(current=>current.some(draft=>draft.serverKey&&serverKeys.has(draft.serverKey))?current.filter(draft=>!(draft.serverKey&&serverKeys.has(draft.serverKey))):current),setPatches(current=>{let changed=!1,next={};for(let[key,patch]of Object.entries(current)){let row=serverComments.find(comment=>comment.recordKey===key);if(row&&patch.revision!=null&&row.revision>=patch.revision){changed=!0;continue}next[key]=patch}return changed?next:current})},[serverComments]);let scopeKey=scope?`${scope.id}|${scope.recordKey}`:null,inScope=useMemo20(()=>comments.filter(comment=>inCommentScope(comment,scope)),[comments,scopeKey]),threads=useMemo20(()=>commentThreads(inScope,anchors).filter(thread=>thread.root.status!=="Deleted"),[inScope,anchors]),checkpoint=useMemo20(()=>{let saved=scope?.checkpoint??null;return marker&&(commentTimeOf(saved)||0)<commentTimeOf(marker)?marker:saved},[scope?.checkpoint,marker]),changes=useMemo20(()=>commentChangesSince(inScope,checkpoint,me),[inScope,checkpoint,me]),lastTurn=commentTimeOf(checkpoint)||0,isNew=useCallback19(comment=>comment.author!==me&&(commentTimeOf(comment.createdAt)||0)>lastTurn,[me,lastTurn]),threadsOn=useCallback19(key=>threads.filter(thread=>(thread.anchor?.recordKey??null)===(key??null)),[threads]),numberOf3=useCallback19(thread=>threadsOn(thread.anchor?.recordKey).findIndex(item=>item.root.recordKey===thread.root.recordKey)+1,[threadsOn]),anchor=useMemo20(()=>anchors.find(item=>item.recordKey===anchorKey),[anchors,anchorKey]),[filter,setFilter]=useState23("anchor"),[statusFilter,setStatusFilter]=useState23("open"),[threadKey,setThreadKey]=useState23(null),[draftPin,setDraftPin]=useState23(null),[deleting,setDeleting]=useState23(null),[commenting,setCommentingState]=useState23(!1),[copying,setCopying]=useState23(!1),effectiveFilter=anchors.length?filter:"all",visibleThreads=useMemo20(()=>{let wanted=statusFilter==="resolved"?"Resolved":"Open";return(effectiveFilter==="anchor"?threadsOn(anchorKey):threads).filter(thread=>thread.root.status===wanted)},[effectiveFilter,statusFilter,threadsOn,anchorKey,threads]),selectThread=useCallback19(thread=>{setThreadKey(thread.root.recordKey),setDraftPin(null),setCommentingState(!1),setStatusFilter(thread.root.status==="Resolved"?"resolved":"open"),latest.current.onSelectThread?.(thread)},[]),[now,setNow]=useState23(()=>Date.now());useEffect24(()=>{let id=setInterval(()=>setNow(Date.now()),3e4);return()=>clearInterval(id)},[]);let schemaRevision=query.data?.schema_revision,fail=useCallback19(error=>{console.warn("[comments] write failed",error),notify(words.saveError,{tone:"danger"})},[notify,words]),setBusyKey=useCallback19((key,on)=>setBusy(current=>{let next=new Set(current);return on?next.add(key):next.delete(key),next}),[]),commentsRef=useRef23(comments);commentsRef.current=comments;let patchesRef=useRef23(patches);patchesRef.current=patches;let updateRoot=useCallback19(async(root,fields,properties)=>{if(schemaRevision==null)return fail(new Error("Comments schema revision unknown")),!1;let key=root.recordKey,previous=patchesRef.current[key],revision=commentsRef.current.find(comment=>comment.recordKey===key)?.revision??root.revision;setPatches(current=>({...current,[key]:{fields:{...current[key]?.fields??{},...fields},revision:null}})),setBusyKey(key,!0);try{let receipt=await updateMutation.mutate({record_key:key,expected_revision:revision,properties},{schemaRevision,requestId:newCommentId()});return setPatches(current=>current[key]?{...current,[key]:{...current[key],revision:receipt.revision}}:current),refetch(),!0}catch(error){return setPatches(current=>{let next={...current};return previous?next[key]=previous:delete next[key],next}),fail(error),!1}finally{setBusyKey(key,!1)}},[schemaRevision,updateMutation,refetch,fail,setBusyKey]),changeProps=useCallback19((change,at,extra={})=>({...extra,[columns.change]:change,[columns.changedAt]:at}),[columns]),insert=useCallback19(async fields=>{if(schemaRevision==null)return fail(new Error("Comments schema revision unknown")),!1;let at=new Date().toISOString(),tempKey=`draft-${newCommentId()}`,currentScope=latest.current.scope??null,comment={id:tempKey,recordKey:tempKey,revision:0,body:fields.body,scopeIds:currentScope?[currentScope.id]:[],anchorIds:fields.anchor?[fields.anchor.id]:[],thread:fields.thread,author:me,x:fields.x,y:fields.y,w:columns.w&&columns.h?fields.w:null,h:columns.w&&columns.h?fields.h:null,status:"Open",needs:"none",options:[],answer:"",answeredAt:null,change:fields.change,changedAt:at,example:!1,createdAt:at};setDrafts(current=>[...current,{comment,serverKey:null}]);let properties={[columns.author]:me,[columns.status]:"Open",[columns.needs]:"none",[columns.example]:!1,...changeProps(fields.change,at)};columns.scope&&currentScope&&(properties[columns.scope]=[currentScope.id]),columns.anchor&&fields.anchor&&(properties[columns.anchor]=[fields.anchor.id]),fields.thread&&(properties[columns.thread]=fields.thread),fields.x!=null&&fields.y!=null&&(properties[columns.x]=Number(fields.x.toFixed(4)),properties[columns.y]=Number(fields.y.toFixed(4)),columns.w&&columns.h&&fields.w!=null&&fields.h!=null&&(properties[columns.w]=Number(fields.w.toFixed(4)),properties[columns.h]=Number(fields.h.toFixed(4))));try{let receipt=await insertMutation.mutate({columns:{title:fields.body},properties},{schemaRevision,requestId:newCommentId()});return setDrafts(current=>current.map(draft=>draft.comment.recordKey===tempKey?{...draft,serverKey:receipt.record_key}:draft)),refetch(),receipt.record_key}catch(error){return setDrafts(current=>current.filter(draft=>draft.comment.recordKey!==tempKey)),fail(error),!1}},[schemaRevision,me,columns,changeProps,insertMutation,refetch,fail]),actions=useMemo20(()=>({reply:async(thread,body)=>{let{root}=thread;if(root.recordKey.startsWith("draft-"))return!1;let rootFields={},rootProps={},at=new Date().toISOString();if(root.status==="Resolved"&&(Object.assign(rootFields,{status:"Open",change:"reopened",changedAt:at}),Object.assign(rootProps,changeProps("reopened",at,{[columns.status]:"Open"}))),root.needs==="input"&&!root.answer){let answer=clipCommentAnswer(body);Object.assign(rootFields,{answer,answeredAt:at}),Object.assign(rootProps,{[columns.answer]:answer,[columns.answeredAt]:at})}let[inserted]=await Promise.all([insert({body,anchor:thread.anchor,thread:root.recordKey,x:null,y:null,w:null,h:null,change:"replied"}),Object.keys(rootProps).length?updateRoot(root,rootFields,rootProps):Promise.resolve(!0)]);return inserted&&root.status==="Resolved"&&setStatusFilter("open"),!!inserted},answer:(root,answer)=>{let at=new Date().toISOString();updateRoot(root,{answer,answeredAt:at,change:"answered",changedAt:at},changeProps("answered",at,{[columns.answer]:answer,[columns.answeredAt]:at}))},setStatus:(root,status)=>{let at=new Date().toISOString(),change=status==="Resolved"?"resolved":"reopened";updateRoot(root,{status,change,changedAt:at},changeProps(change,at,{[columns.status]:status}))},askDelete:root=>setDeleting(root),notify:text=>notify(text)}),[insert,updateRoot,changeProps,columns,notify]),confirmDelete=useCallback19(async()=>{let root=deleting;if(!root)return;let at=new Date().toISOString();setDeleting(null),setThreadKey(current=>current===root.recordKey?null:current),await updateRoot(root,{status:"Deleted",change:"deleted",changedAt:at},changeProps("deleted",at,{[columns.status]:"Deleted"}))},[deleting,updateRoot,changeProps,columns]),placePin=useCallback19((key,x,y,w2=null,h=null)=>{setCommentingState(!1),setDraftPin({anchorKey:key,x,y,w:x==null||y==null?null:w2,h:x==null||y==null?null:h}),setThreadKey(null),setFilter("anchor"),setStatusFilter("open")},[]),placePinFromEvent=useCallback19((event,key)=>{if(!commenting)return!1;let rect=event.currentTarget.getBoundingClientRect(),x=rect.width?Math.min(1,Math.max(0,(event.clientX-rect.left)/rect.width)):.5,y=rect.height?Math.min(1,Math.max(0,(event.clientY-rect.top)/rect.height)):.5;return placePin(key,x,y),!0},[commenting,placePin]),cancelPin=useCallback19(()=>setDraftPin(null),[]),zones=!!(columns.w&&columns.h),[dragZone,setDragZone]=useState23(null),dragRef=useRef23(null),endDrag=useCallback19(()=>{dragRef.current=null,setDragZone(null)},[]),zoneHandlers=useCallback19(key=>{let zoneOf=(drag,clientX,clientY)=>{let{rect}=drag,clamp2=value=>Math.min(1,Math.max(0,value)),ax=clamp2((drag.x0-rect.left)/(rect.width||1)),ay=clamp2((drag.y0-rect.top)/(rect.height||1)),bx=clamp2((clientX-rect.left)/(rect.width||1)),by=clamp2((clientY-rect.top)/(rect.height||1));return{anchorKey:drag.key,x:Math.min(ax,bx),y:Math.min(ay,by),w:Math.abs(bx-ax),h:Math.abs(by-ay)}};return{onPointerDown:event=>{if(!(!commenting||event.button!==0)){event.preventDefault(),event.stopPropagation();try{event.currentTarget.setPointerCapture(event.pointerId)}catch{}dragRef.current={key,rect:event.currentTarget.getBoundingClientRect(),x0:event.clientX,y0:event.clientY,pointerId:event.pointerId,moved:!1}}},onPointerMove:event=>{let drag=dragRef.current;!drag||drag.pointerId!==event.pointerId||!zones||!drag.moved&&Math.abs(event.clientX-drag.x0)<ZONE_MIN_PX&&Math.abs(event.clientY-drag.y0)<ZONE_MIN_PX||(drag.moved=!0,setDragZone(zoneOf(drag,event.clientX,event.clientY)))},onPointerUp:event=>{let drag=dragRef.current;if(!drag||drag.pointerId!==event.pointerId)return;event.stopPropagation();let{rect}=drag,wide=Math.abs(event.clientX-drag.x0)>=ZONE_MIN_PX&&rect.width>0,high=Math.abs(event.clientY-drag.y0)>=ZONE_MIN_PX&&rect.height>0;if(endDrag(),zones&&drag.moved&&wide&&high){let zone=zoneOf(drag,event.clientX,event.clientY);placePin(drag.key,zone.x,zone.y,zone.w,zone.h);return}let x=rect.width?Math.min(1,Math.max(0,(drag.x0-rect.left)/rect.width)):.5,y=rect.height?Math.min(1,Math.max(0,(drag.y0-rect.top)/rect.height)):.5;placePin(drag.key,x,y)},onPointerCancel:()=>endDrag()}},[commenting,zones,placePin,endDrag]),sendNew=useCallback19(async body=>{let pin=draftPin;if(!pin||!body.trim())return!1;let target=anchors.find(item=>item.recordKey===pin.anchorKey),key=await insert({body:body.trim(),anchor:target,thread:"",x:pin.x,y:pin.y,w:pin.w,h:pin.h,change:"created"});return key?(setDraftPin(null),setThreadKey(key),!0):!1},[draftPin,anchors,insert]),setCommenting=useCallback19(on=>{on?setDraftPin(null):endDrag(),setCommentingState(on)},[endDrag]),toggleCommenting=useCallback19(()=>{setDraftPin(null),endDrag(),setCommentingState(current=>!current)},[endDrag]);useEscapeLayer(`comments.${database}.mode`,()=>(endDrag(),setCommentingState(!1),!0),{priority:ESCAPE_PRIORITY.selection+2,enabled:commenting});let copyChanges=useCallback19(async host=>{if(!changes.length||copying)return!1;setCopying(!0);let at=new Date().toISOString(),count=changes.length,text=commentDigest({scope:scope?{...scope,checkpoint}:null,comments:inScope,anchors,changes,nowIso:at},{me,columns:options.columns,...latest.current.digest??{}});if(!await writeCommentClipboard(text,host))return notify(words.copyFailed,{tone:"danger"}),setCopying(!1),!1;notify(commentCopiedWords(words,count));let previous=marker;setMarker(at);try{await latest.current.onCheckpoint?.(at)}catch(error){setMarker(previous),fail(error)}finally{setCopying(!1)}return!0},[changes,copying,scope,checkpoint,inScope,anchors,me,options.columns,notify,words,marker,fail]);return{comments:inScope,threads,visibleThreads,changes,checkpoint,isNew,threadsOn,numberOf:numberOf3,scope,anchors,anchorKey,anchor,filter:effectiveFilter,setFilter,statusFilter,setStatusFilter,threadKey,setThreadKey,selectThread,actions,commenting,setCommenting,toggleCommenting,draftPin,placePin,placePinFromEvent,cancelPin,sendNew,zones,dragZone,zoneHandlers,deleting,cancelDelete:()=>setDeleting(null),confirmDelete,copyChanges,copying,busy,now,toaster,words,say,locale,me,loading:query.loading&&!query.hasData,hasData:query.hasData,error:query.error??null,refetch}}import{useEffect as useEffect25,useRef as useRef24,useState as useState24}from"react";import{Fragment as Fragment13,jsx as jsx28,jsxs as jsxs24}from"react/jsx-runtime";function CommentAvatar({author,me,className}){return jsx28("span",{"aria-hidden":"true",className:cx("nui-comment-avatar",className),"data-me":author===me?"":void 0,children:(author.trim().slice(0,1)||"?").toUpperCase()})}function IconAction({label,icon,onClick,disabled}){return jsx28(Tooltip,{label,children:jsx28(Button,{variant:"ghost",size:"sm",className:"nui-comment-icon-btn","aria-label":label,disabled,onClick,icon:jsx28(Icon,{name:icon})})})}function answerLabel(controller,answer){return answer===COMMENT_CHECK_ANSWERS[0]?controller.say("looksGood"):answer===COMMENT_CHECK_ANSWERS[1]?controller.say("undo"):answer}function stop(event){event.stopPropagation()}function sendsOnEnter(event){return event.key==="Enter"&&!event.shiftKey&&!event.nativeEvent.isComposing}function CommentThreadCard({controller,thread,showAnchor=!1}){let{root,replies,anchor}=thread,{actions,locale,now,isNew,me}=controller,[draft,setDraft]=useState24(""),[sending,setSending]=useState24(!1),replyRef=useRef24(null),fileRef=useRef24(null),cardRef=useRef24(null),resolved=root.status==="Resolved",selected=controller.threadKey===root.recordKey,busy=controller.busy.has(root.recordKey),number=controller.numberOf(thread);useEffect25(()=>{selected&&cardRef.current&&scrollCommentIntoView(cardRef.current)},[selected]);let send=async()=>{let body=draft.trim();if(!body||sending)return;setSending(!0);let ok=await actions.reply(thread,body);setSending(!1),ok&&setDraft("")},attach=async file=>{if(!file)return;if(!(file.type.startsWith("text/")||COMMENT_TEXT_FILE.test(file.name))){actions.notify(controller.words.textOnly);return}let content=(await file.text()).slice(0,8e3);setDraft(current=>`${current?`${current}
15
15
 
16
16
  `:""}${file.name}
17
- ${content}`),replyRef.current?.focus()},select=()=>controller.selectThread(thread),onCardKey=event=>{event.target===event.currentTarget&&(event.key==="Enter"||event.key===" ")&&(event.preventDefault(),select())},needsLabel=root.needs==="check"?controller.say("needCheck"):root.needs==="choice"?controller.say("needChoice"):controller.say("needInput"),choices=root.needs==="check"?[...COMMENT_CHECK_ANSWERS]:root.options,meta=[commentRelativeTime(root.createdAt,locale,now),showAnchor&&anchor?controller.say("anchorLabel",{n:anchor.order}):"",number>0&&root.x!=null?`#${number}`:""].filter(Boolean).join(" \xB7 "),replyLabel=resolved?controller.say("replyToReopen"):controller.say("reply"),newDot=comment=>isNew(comment)?jsx28("span",{className:"nui-comment-new",role:"img","aria-label":controller.say("newActivity")}):null;return jsxs24("article",{ref:cardRef,className:"nui-comment-card","data-thread":root.recordKey,"data-selected":selected?"":void 0,"data-resolved":resolved?"":void 0,"aria-current":selected?"true":void 0,"aria-label":controller.say("pin",{who:root.author,body:root.body}),tabIndex:0,onClick:select,onKeyDown:onCardKey,children:[jsxs24("header",{className:"nui-comment-head",children:[jsx28(CommentAvatar,{author:root.author,me}),jsxs24("div",{className:"nui-comment-who",children:[jsx28("span",{className:"nui-comment-author",children:root.author}),jsx28("span",{className:"nui-comment-meta",children:meta}),newDot(root)]}),jsxs24("div",{className:"nui-comment-actions",onClick:stop,onKeyDown:stop,children:[resolved?jsx28(IconAction,{label:controller.say("reopen"),icon:"arrow-counter-clockwise",disabled:busy,onClick:()=>actions.setStatus(root,"Open")}):jsx28(IconAction,{label:controller.say("resolve"),icon:"check",disabled:busy,onClick:()=>actions.setStatus(root,"Resolved")}),jsx28(IconAction,{label:controller.say("delete"),icon:"trash",disabled:busy,onClick:()=>actions.askDelete(root)})]})]}),root.example||resolved?jsxs24("div",{className:"nui-comment-badges",children:[root.example?jsx28(Badge,{children:controller.words.example}):null,resolved?jsx28(Badge,{children:controller.words.resolved}):null]}):null,jsx28("p",{className:"nui-comment-body",children:root.body}),root.needs!=="none"?jsxs24("div",{className:"nui-comment-ask",onClick:stop,onKeyDown:stop,children:[jsxs24("p",{className:"nui-comment-ask-label",children:[jsx28("span",{className:"nui-comment-ask-who",children:controller.say("needs",{who:root.author})})," ",needsLabel]}),root.answer?jsxs24("p",{className:"nui-comment-answer",children:[jsx28(Icon,{name:"check"}),jsx28("span",{children:controller.say("sent",{answer:answerLabel(controller,root.answer)})})]}):root.needs==="input"?jsxs24("div",{className:"nui-comment-choices",children:[jsx28(Button,{size:"sm",variant:"secondary",disabled:busy,icon:"paperclip",onClick:()=>fileRef.current?.click(),children:controller.words.attach}),jsx28(Button,{size:"sm",variant:"secondary",disabled:busy,icon:"clipboard-text",onClick:()=>replyRef.current?.focus(),children:controller.words.paste}),jsx28("input",{ref:fileRef,type:"file",className:"nui-sr-only",tabIndex:-1,"aria-hidden":"true",accept:"text/*,.md,.txt,.csv,.json",onChange:event=>{attach(event.target.files?.[0]),event.target.value=""}})]}):jsx28("div",{className:"nui-comment-choices",role:"group","aria-label":needsLabel,children:choices.map(choice=>jsx28(Button,{size:"sm",variant:"secondary",disabled:busy,onClick:()=>actions.answer(root,choice),children:answerLabel(controller,choice)},choice))})]}):null,replies.length?jsx28("ol",{className:"nui-comment-replies",children:replies.map(reply=>jsxs24("li",{className:"nui-comment-reply",children:[jsx28(CommentAvatar,{author:reply.author,me}),jsxs24("div",{className:"nui-comment-reply-text",children:[jsxs24("div",{className:"nui-comment-who",children:[jsx28("span",{className:"nui-comment-author",children:reply.author}),jsx28("span",{className:"nui-comment-meta",children:commentRelativeTime(reply.createdAt,locale,now)}),newDot(reply)]}),jsx28("p",{className:"nui-comment-body",children:reply.body})]})]},reply.recordKey))}):null,jsxs24("div",{className:"nui-comment-compose",onClick:stop,onKeyDown:stop,children:[jsx28("textarea",{ref:replyRef,className:"nui-comment-input",value:draft,rows:1,placeholder:replyLabel,"aria-label":replyLabel,onChange:event=>setDraft(event.target.value),onKeyDown:event=>{sendsOnEnter(event)&&(event.preventDefault(),send())}}),jsx28(IconAction,{label:controller.say("send"),icon:"paper-plane-right",disabled:!draft.trim()||sending,onClick:()=>{send()}})]})]})}function NewCommentBox({controller}){let pin=controller.draftPin,[body,setBody]=useState24(""),[sending,setSending]=useState24(!1),ref=useRef24(null),cancel=controller.cancelPin,where=pin?.anchorKey??null;if(useEffect25(()=>{ref.current?.focus({preventScroll:!0})},[where]),useEscapeLayer("comments.new",()=>(cancel(),!0),{priority:ESCAPE_PRIORITY.selection+1,enabled:pin!=null}),!pin)return null;let anchor=controller.anchors.find(item=>item.recordKey===pin.anchorKey),heading=anchor&&pin.x==null?controller.say("newCommentWhole",{n:anchor.order}):anchor?controller.say("newCommentOn",{n:anchor.order}):controller.say("newComment"),send=async()=>{if(!body.trim()||sending)return;setSending(!0);let ok=await controller.sendNew(body.trim());setSending(!1),ok&&setBody("")};return jsxs24("div",{className:"nui-comment-new-box",role:"group","aria-label":heading,children:[jsx28("p",{className:"nui-comment-new-title",children:heading}),jsx28("textarea",{ref,className:"nui-comment-input",value:body,rows:2,placeholder:controller.say("commentPlaceholder"),"aria-label":controller.say("commentPlaceholder"),onChange:event=>setBody(event.target.value),onKeyDown:event=>{sendsOnEnter(event)&&(event.preventDefault(),send()),event.key==="Escape"&&!event.nativeEvent.isComposing&&(event.preventDefault(),body.trim()?event.currentTarget.blur():cancel())}}),jsxs24("div",{className:"nui-comment-new-actions",children:[jsx28(Button,{size:"sm",variant:"ghost",onClick:cancel,children:controller.words.cancel}),jsx28(Button,{size:"sm",variant:"primary",disabled:!body.trim()||sending,icon:"paper-plane-right",onClick:()=>{send()},children:controller.words.send})]})]})}function CommentPins({controller,anchorKey,onOpen}){let key=anchorKey===void 0?controller.anchorKey:anchorKey,pins=controller.threadsOn(key).filter(thread=>thread.root.x!=null&&thread.root.y!=null),draft=controller.draftPin,drag=controller.dragZone,here=key??null,open=(event,thread)=>{event.stopPropagation(),onOpen?onOpen(thread):controller.selectThread(thread)},box=zone=>({left:`${zone.x*100}%`,top:`${zone.y*100}%`,width:`${zone.w*100}%`,height:`${zone.h*100}%`});return jsxs24(Fragment13,{children:[controller.commenting?jsx28("div",{className:"nui-comment-capture","aria-hidden":"true",...controller.zoneHandlers(here),onClick:event=>event.stopPropagation()}):null,pins.filter(thread=>isCommentZone(thread.root)).map(thread=>jsx28("span",{className:"nui-comment-zone","aria-hidden":"true","data-selected":thread.root.recordKey===controller.threadKey?"":void 0,"data-resolved":thread.root.status==="Resolved"?"":void 0,style:box({x:thread.root.x,y:thread.root.y,w:thread.root.w,h:thread.root.h})},`zone-${thread.root.recordKey}`)),pins.map(thread=>jsx28("button",{type:"button",className:"nui-comment-pin","data-agent":thread.root.author!==controller.me?"":void 0,"data-selected":thread.root.recordKey===controller.threadKey?"":void 0,"data-resolved":thread.root.status==="Resolved"?"":void 0,style:{left:`${thread.root.x*100}%`,top:`${thread.root.y*100}%`},"aria-label":controller.say(isCommentZone(thread.root)?"zone":"pin",{who:thread.root.author,body:thread.root.body}),onClick:event=>open(event,thread),children:controller.numberOf(thread)},thread.root.recordKey)),drag&&drag.anchorKey===here?jsx28("span",{className:"nui-comment-zone","data-draft":"","data-selected":"","aria-hidden":"true",style:box(drag)}):null,draft&&draft.anchorKey===here&&draft.x!=null&&draft.y!=null?jsxs24(Fragment13,{children:[isCommentZone(draft)?jsx28("span",{className:"nui-comment-zone","data-draft":"","data-selected":"","aria-hidden":"true",style:box({x:draft.x,y:draft.y,w:draft.w,h:draft.h})}):null,jsx28("span",{className:"nui-comment-pin","data-draft":"","data-selected":"","aria-hidden":"true",style:{left:`${draft.x*100}%`,top:`${draft.y*100}%`},children:"+"})]}):null]})}function CommentPane({controller,title,showCopy=!0,className}){let rootRef=useRef24(null),heading=title??controller.say("comments"),{threads,visibleThreads,changes,draftPin,filter,statusFilter,anchors,anchorKey}=controller,scoped=filter==="anchor"?controller.threadsOn(anchorKey):threads,openCount=scoped.filter(thread=>thread.root.status==="Open").length,resolvedCount=scoped.filter(thread=>thread.root.status==="Resolved").length,emptyTitle=statusFilter==="resolved"?controller.say("emptyResolved"):filter==="anchor"?controller.say("emptyAnchor"):controller.say("emptyAll");return jsxs24("aside",{ref:rootRef,className:cx("nui-comment-pane",className),"aria-label":heading,children:[jsxs24("div",{className:"nui-comment-pane-head",children:[jsx28("h2",{className:"nui-comment-pane-title",children:heading}),anchors.length?jsx28(SegmentedControl,{label:controller.words.scope,value:filter,onChange:value=>controller.setFilter(value),options:[{value:"anchor",label:controller.words.thisAnchor,count:controller.threadsOn(anchorKey).length},{value:"all",label:controller.words.all,count:threads.length}]}):null]}),jsx28(SegmentedControl,{label:controller.words.status,value:statusFilter,onChange:value=>controller.setStatusFilter(value),options:[{value:"open",label:controller.words.open,count:openCount},{value:"resolved",label:controller.words.resolvedFilter,count:resolvedCount}]}),showCopy?jsxs24(Button,{variant:"secondary",className:"nui-comment-copy",icon:"copy",disabled:!changes.length||controller.copying,onClick:()=>{controller.copyChanges(rootRef.current)},children:[jsx28("span",{className:"nui-comment-copy-label",children:controller.say("copy")}),jsx28("span",{className:"nui-comment-count",children:changes.length})]}):null,draftPin?jsx28(NewCommentBox,{controller}):anchors.length&&controller.anchor?jsxs24("div",{className:"nui-comment-start",children:[jsx28(Button,{variant:"secondary",icon:"chat-circle-text",onClick:()=>controller.placePin(anchorKey,null,null),children:controller.say("commentOnAnchor",{n:controller.anchor.order})}),controller.commenting?jsx28("p",{className:"nui-comment-hint",children:controller.say(controller.zones?"zoneHint":"pinHint")}):null]}):null,visibleThreads.length?jsx28("div",{className:"nui-comment-list",children:visibleThreads.map(thread=>jsx28(CommentThreadCard,{controller,thread,showAnchor:filter==="all"},thread.root.recordKey))}):!draftPin&&!controller.loading?jsx28(EmptyState,{className:"nui-comment-empty",icon:"chat-circle-text",title:emptyTitle}):null,jsx28(Dialog,{open:controller.deleting!=null,onClose:controller.cancelDelete,title:controller.say("deleteTitle"),description:controller.say("deleteBody"),role:"alertdialog",children:jsxs24("div",{className:"nui-comment-dialog-actions",children:[jsx28(Button,{variant:"ghost","data-dialog-cancel":"",onClick:controller.cancelDelete,children:controller.words.cancel}),jsx28(Button,{variant:"danger","data-dialog-confirm":"",onClick:()=>{controller.confirmDelete()},children:controller.words.delete})]})}),jsx28(ActionToast,{toast:controller.toaster.toast,onUndo:()=>{controller.toaster.undo()},onDismiss:controller.toaster.dismiss})]})}var PRESENT_WORDS=Object.freeze({audienceTitle:{en:"Presentation",fr:"Pr\xE9sentation"},fillScreen:{en:"Click to fill this screen",fr:"Clique pour remplir cet \xE9cran"},dragToScreen:{en:"Drag this window to the other screen, then click to fill it",fr:"Fais glisser cette fen\xEAtre sur l\u2019autre \xE9cran, puis clique pour la remplir"},pressAgain:{en:"Press Present again to show it on the other screen",fr:"Appuie de nouveau sur Pr\xE9senter pour l\u2019afficher sur l\u2019autre \xE9cran"},blocked:{en:"The presentation window was blocked. Allow pop-ups for Notis, then press Present again.",fr:"La fen\xEAtre de pr\xE9sentation a \xE9t\xE9 bloqu\xE9e. Autorise les fen\xEAtres pop-up pour Notis, puis appuie de nouveau sur Pr\xE9senter."},onOtherScreen:{en:"Showing on the other screen",fr:"Affich\xE9 sur l\u2019autre \xE9cran"}});var AUDIENCE_WINDOW_NAME="notis-presenter-audience";function hasSecondScreen(win){return win?.screen?.isExtended===!0}function sameArea(a,b){return a.availLeft===b.availLeft&&a.availTop===b.availTop&&a.availWidth===b.availWidth&&a.availHeight===b.availHeight}function pickAudienceScreen(screens,current){let others=screens.filter(screen=>!(current&&(screen===current||sameArea(screen,current))));return others.length===0?null:[...others].sort((a,b)=>{let external=+(a.isInternal===!0)-+(b.isInternal===!0);return external!==0?external:b.availWidth*b.availHeight-a.availWidth*a.availHeight})[0]}function audienceFeatures(screen){if(!screen)return"popup,width=960,height=540";let{availLeft:left,availTop:top,availWidth:width,availHeight:height}=screen;return`popup,left=${Math.round(left)},top=${Math.round(top)},width=${Math.round(width)},height=${Math.round(height)}`}var KEY_ACTIONS=Object.freeze({ArrowRight:"next",ArrowDown:"next",PageDown:"next"," ":"next",Enter:"next",ArrowLeft:"previous",ArrowUp:"previous",PageUp:"previous",Home:"first",End:"last",Escape:"stop"}),FIELD='input,textarea,select,[contenteditable=""],[contenteditable="true"]',ACTIVE="a[href],button,label,summary,details,video,audio,[role=button],[role=link],[role=tab],[onclick],[tabindex]";function inside(target,selector){let element=target;return!!(element&&typeof element.closest=="function"&&element.closest(selector))}function keyAction(event){let action=KEY_ACTIONS[event.key];return!action||event.defaultPrevented||event.altKey||event.ctrlKey||event.metaKey||inside(event.target,FIELD)||(event.key===" "||event.key==="Enter")&&inside(event.target,ACTIVE)?null:action}function clickHasOwnTarget(target){return inside(target,FIELD)||inside(target,ACTIVE)}function fillsScreen(win){if(win.document.fullscreenElement)return!0;let{width,height}=win.screen;return width>0&&height>0&&win.innerWidth>=width-1&&win.innerHeight>=height-1}function sheetText2(sheet){try{return Array.from(sheet.cssRules,rule=>rule.cssText).join(`
18
- `)}catch{return""}}function copyNodes(target,source){for(let node of Array.from(source.querySelectorAll('link[rel~="stylesheet"],style')))if(node.localName==="link"){let link=target.createElement("link");link.rel="stylesheet",link.href=node.href;let media=node.getAttribute("media");media&&(link.media=media),target.head.append(link)}else{let style=target.createElement("style");style.textContent=node.textContent,target.head.append(style)}}function copyAdopted(target,sheets){for(let sheet of sheets??[]){let text=sheetText2(sheet);if(!text)continue;let style=target.createElement("style");style.textContent=text,target.head.append(style)}}function copyStylesInto(target,source,shadowRoot){copyNodes(target,source),copyAdopted(target,source.adoptedStyleSheets),shadowRoot&&(copyNodes(target,shadowRoot),copyAdopted(target,shadowRoot.adoptedStyleSheets));let from=source.documentElement,to=target.documentElement;from.className&&(to.className=from.className);let style=from.getAttribute("style");style?to.setAttribute("style",style):to.removeAttribute("style")}import{useCallback as useCallback20,useEffect as useEffect26,useRef as useRef25,useState as useState25}from"react";import{createPortal as createPortal6}from"react-dom";import{jsx as jsx29,jsxs as jsxs25}from"react/jsx-runtime";async function windowManagementState(win){if(typeof win.getScreenDetails!="function")return"unsupported";try{return(await win.navigator.permissions.query({name:"window-management"})).state}catch{return"prompt"}}async function screenDetails(win){try{return await win.getScreenDetails()}catch{return null}}var AUDIENCE_BASE_CSS=["html,body{height:100%;margin:0;overflow:hidden;background:hsl(0 0% 0%)}","[data-notis-audience-root]{position:fixed;inset:0;display:flex;flex-direction:column}"].join("");function setUpWindow(win,anchor,title,locale){let doc=win.document,root=anchor?.getRootNode(),shadow=typeof ShadowRoot<"u"&&root instanceof ShadowRoot?root:null;doc.head.replaceChildren();let charset=doc.createElement("meta");charset.setAttribute("charset","utf-8"),doc.head.append(charset),doc.title=title,doc.documentElement.lang=locale,copyStylesInto(doc,document,shadow);let base=doc.createElement("style");base.textContent=AUDIENCE_BASE_CSS,doc.head.append(base);let appRoot=anchor?.closest("[data-notis-app-root]")??null,container=doc.createElement("div");container.setAttribute("data-notis-app-root",""),container.setAttribute("data-notis-audience-root","");let theme=appRoot?.getAttribute("data-notis-theme");theme&&container.setAttribute("data-notis-theme",theme);let style=appRoot?.getAttribute("style");style&&container.setAttribute("style",style);let layer=doc.createElement("div");return layer.setAttribute(LAYER_ROOT_ATTRIBUTE,""),doc.body.replaceChildren(container,layer),{win,container,layer,placed:!1}}function AudienceView({audience,children}){let t=useT(),{win}=audience,[filled,setFilled]=useState25(()=>fillsScreen(win));useEffect26(()=>{let update=()=>setFilled(fillsScreen(win));return update(),win.addEventListener("resize",update),win.document.addEventListener("fullscreenchange",update),()=>{win.removeEventListener("resize",update),win.document.removeEventListener("fullscreenchange",update)}},[win]);let fill=useCallback20(event=>{event.preventDefault(),event.stopPropagation(),win.document.documentElement.requestFullscreen?.({navigationUI:"hide"})?.catch(()=>{})},[win]);return jsxs25(LayerRootProvider,{root:audience.layer,children:[children,filled?null:jsx29("button",{type:"button","data-notis-audience-fill":"",onClick:fill,className:"fixed inset-0 z-[1000] flex cursor-pointer items-end justify-center bg-transparent p-8",children:jsx29("span",{className:"rounded-full bg-popover px-4 py-2 text-sm text-popover-foreground shadow-lg ring-1 ring-border",children:t(audience.placed?PRESENT_WORDS.fillScreen:PRESENT_WORDS.dragToScreen)})})]})}function useAudienceScreen(options){let t=useT(),locale=useToolkitLocale(),optionsRef=useRef25(options);optionsRef.current=options;let[secondScreen,setSecondScreen]=useState25(()=>typeof window>"u"?!1:hasSecondScreen(window)),[audience,setAudience]=useState25(null),audienceRef=useRef25(null),teardownRef=useRef25(null);useEffect26(()=>{if(typeof window>"u")return;let screen=window.screen,update=()=>setSecondScreen(hasSecondScreen(window));if(update(),typeof screen.addEventListener=="function")return screen.addEventListener("change",update),()=>screen.removeEventListener?.("change",update)},[]);let finish=useCallback20(closeWindow=>{let current=audienceRef.current;current&&(audienceRef.current=null,teardownRef.current?.(),teardownRef.current=null,closeWindow&&!current.win.closed&&current.win.close(),setAudience(null),optionsRef.current.onClose?.())},[]),close=useCallback20(()=>finish(!0),[finish]),open=useCallback20(async anchor=>{let current=audienceRef.current;if(current&&!current.win.closed)return current.win.focus(),"opened";if(typeof window>"u"||!hasSecondScreen(window))return"one-screen";let state=await windowManagementState(window),target=null;if(state==="granted"||state==="prompt"){let details=await screenDetails(window);details&&(target=pickAudienceScreen(details.screens,details.currentScreen))}let win=window.open("",AUDIENCE_WINDOW_NAME,audienceFeatures(target));if(!win)return state==="prompt"?"press-again":"blocked";let next=setUpWindow(win,anchor??null,t(optionsRef.current.title??PRESENT_WORDS.audienceTitle),locale);next.placed=target!==null;let onKey=event=>{let action=keyAction(event);action&&(event.preventDefault(),optionsRef.current.onAction(action))},onClick=event=>{event.defaultPrevented||event.button!==0||clickHasOwnTarget(event.target)||optionsRef.current.onAction("next")},onContextMenu=event=>{event.defaultPrevented||clickHasOwnTarget(event.target)||(event.preventDefault(),optionsRef.current.onAction("previous"))},onGone=()=>finish(!1),onLeave=()=>finish(!0);win.addEventListener("keydown",onKey),win.addEventListener("click",onClick),win.addEventListener("contextmenu",onContextMenu),win.addEventListener("pagehide",onGone),window.addEventListener("pagehide",onLeave);let poll=window.setInterval(()=>{win.closed&&finish(!1)},500);return teardownRef.current?.(),teardownRef.current=()=>{window.clearInterval(poll),window.removeEventListener("pagehide",onLeave),win.removeEventListener("keydown",onKey),win.removeEventListener("click",onClick),win.removeEventListener("contextmenu",onContextMenu),win.removeEventListener("pagehide",onGone)},audienceRef.current=next,setAudience(next),win.focus(),"opened"},[finish,locale,t]);useEffect26(()=>()=>finish(!0),[finish]);let portal=useCallback20(node=>audience?createPortal6(jsx29(AudienceView,{audience,children:node}),audience.container):null,[audience]);return{secondScreen,isOpen:audience!==null,open,close,portal}}export{ACTION_TOAST_MS,ACTION_WORDS,AUDIENCE_WINDOW_NAME,ActionToast,Area2 as Area,AreaChart,AttachmentGallery,BLOCK_WORDS,BOARD_WORDS,Badge,Bar2 as Bar,BarChart,BoardView,Button,CALENDAR_NARROW_MAX,CALENDAR_TRAY_SIDE_MIN,CALENDAR_VIEWS,CALENDAR_WORDS,CHART_WORDS,CHAT_NARROWED_ATTRIBUTE,CHAT_PANEL_DEFAULT_WIDTH_PX,CHAT_PANEL_DESKTOP_MEDIA_QUERY,CHAT_PANEL_KEYBOARD_STEP_PX,CHAT_PANEL_MIN_CONTENT_WIDTH_PX,CHAT_PANEL_MIN_WIDTH_PX,CHAT_PANEL_OVERLAP_PROPERTY,CHAT_PANEL_PAGE_HOVER_DELAY_MS,CHAT_PANEL_PAGE_PEEK_PX,CHAT_PANEL_WIDTH_PROPERTY,CHAT_PANEL_WIDTH_STORAGE_KEY,COMMENT_CHECK_ANSWERS,COMMENT_COLUMNS,COMMENT_TEXT_FILE,COMMENT_WORDS,COMPARES,COMPARE_WORDS,CalendarView,CartesianGrid2 as CartesianGrid,Cell2 as Cell,Chart,ChartContainer,ChartLegend,ChartStyle,ChartTable,ChartTooltip,ChartTooltipContent,CommentAvatar,CommentPane,CommentPins,CommentThreadCard,ComposedChart2 as ComposedChart,DEFAULT_COMPARE,DEFAULT_PRESET,DayPicker,EMPTY_SELECTION,ESCAPE_PRIORITY,EditableFields,EmptyState,FIELDS_ESCAPE_PRIORITY,FIELDS_SAVE_KEYS,FIELD_WORDS,FieldDisclosure,FieldList,FieldLongText,FieldMultiSelect,FieldRow,FieldSelect,FieldText,GALLERY_WORDS,HelpSheet,IDLE_ROW_STATE,IMAGE_VIEWER_ZOOM_LEVELS,Icon,ImageViewer,KeyboardEngine,KeyboardEngineCore,Keycap,KeycapSurface,LAYER_ROOT_ATTRIBUTE,LIST_DRAG_TYPE,LIST_READER_WORDS,LabelList,LayerRootProvider,Legend,Line2 as Line,LineChart,ListReader,ListSkeleton,MANAGER_PHONE_LAYOUT_BELOW_PX,Menu,MenuItem,MenuSeparator,MenuSub,Metric,NativeSelect,NewCommentBox,Notice,NotisKeyClash,OPEN_MODES,OPEN_MODE_CACHE_PREFIX,OPEN_MODE_ICONS,OPEN_MODE_WORDS,OpenAsMenu,OpenModeStoreProvider,PAGE_VIEWPORT_ATTRIBUTE,PANELS_HOVER_DELAY_MS,PANELS_KEYBOARD_STEP_PX,PANELS_LIST_MIN_PX,PANELS_READER_MIN_PX,PANELS_READER_PEEK_PX,PANELS_READER_WANT_PX,PANELS_READER_WANT_WIDE_PX,PANELS_READER_WIDE_FROM_PX,PERIOD_PICKER_TWO_MONTHS_MIN,PERIOD_WORDS,PRESENT_WORDS,PRESETS,PRESET_WORDS,Pagination,Panels,PeriodPicker,Pie,PieChart,Popover,REORDER_DRAG_TYPE,REORDER_WORDS,ROOT_OWNER,ROW_ID_ATTRIBUTE,ROW_INTERACTIVE_SELECTOR,ROW_TIME_WORDS,ReferenceDot,ReferenceLine,RenderChartData,ResponsiveContainer2 as ResponsiveContainer,Row,RowIdContext,RowMore,RowStateContext,SELECTION_BAR_BOOST,SELECTION_BAR_MAX_INLINE,SEQUENCE_TIMEOUT_MS,STAR_WORDS,STATUS_WORDS,Scatter,Section,SegmentedControl,SelectionBar,ShortcutRegistry,ShortcutScope,Sparkline,StarMark,StatRow,StatusIcon,Switch,TABROW_WORDS,TABS_WORDS,TIMELINE_WORDS,TIMELINE_ZOOMS,TabRow,Tabs,TimelineView,ToggleGroup,Tooltip,VS_WORDS,XAxis2 as XAxis,YAxis2 as YAxis,adoptToolkitStyles,applyCommentPatches,audienceFeatures,availableActions,barLabel,barShape,binUnit,dropIndex as boardDropIndex,boardOrder,boardStep,buildBins,chainReorderProps,changedFieldKeys,chatPanelMaxWidth,chatPanelOverlap,chatPanelPageWidth,chatPanelPushLimit,chooseFit,clampChatPanelWidth,clampReaderWidth,clickHasOwnTarget,clipCommentAnswer,commentAnchorOf,commentChangesSince,commentColumns,commentCopiedWords,commentDigest,commentRelativeTime,commentRowsOf,commentThreads,commentTimeOf,commentWords,compareRange,copyStylesInto,createChatPanelEdge,customPeriod,dayCount,dayNumberLabel,detectLocale,detectPlatform,dropIndex2 as dropIndex,failedItemsWords,fillsScreen,findLayerRoot,findRow,formatDateRange,formatDayHeading,formatDelta,formatLongDay,formatMonthYear,formatNumber,formatPeriodParam,formatReaderAgo,formatRowAgo,formatRowTime,formatShortDay,formatValue,fromIsoDay,galleryItemKind,galleryItemName,getOpenModeStore,getSharedInstance,getToolkitStyleSheet,getToolkitStyleText,gridColumns,hasIcon,hasSecondScreen,inCommentScope,intlLocale,isCommentZone,isCompareId,isOpenMode,isPresetId,keyAction,layoutTimeline,localStorageOpenModeStore,metricView,neighbourColumn,newCommentId,normalizeAllowed,normalizePeriod,overlap,pageViewport,panelMath_exports as panelMath,parsePeriodParam,parseRowDate,parseStoredChatPanelWidth,parseStoredWidth,periodRanges,periodSeries,pickAudienceScreen,place,presetRange,pushLimit,rangeBetween,rankActions,readCommentRow,readOpenModeCache,readerMaxWidth,readerWantWidth,registerToolkitStyles,renderIcon,resolveActions,samePeriod,scrollCommentIntoView,selectionReducer,seriesColor,setOpenModeStore,sparkPaths,splitBreakpoint,splitFits,statusGroup,stepCursor,stepTab,successorOf,tabIds,tabPanelProps,timelineWindow,toIsoDay,toggleFieldValue,total,useActions,useAudienceScreen,useChart,useComments,useEngineCore,useEscapeBlocker,useEscapeLayer,useFieldDraft,useHelpSheet,useKeyLabel,useLayerRoot,useListKeys,useMenu,useOpenMode,useOpenModeKey,useOpenModeStore,usePanels,usePeriod,useRegistryVersion,useReorder,useRowState,useSelection,useSelectionBar,useShortcut,useShortcutOwner,useShortcutScope,useShortcuts,useToast,useToolkitLocale,useToolkitPlatform,useToolkitSettings,userSettingsOpenModeStore,weekdayNames,writeCommentClipboard,writeOpenModeCache};
17
+ ${content}`),replyRef.current?.focus()},select=()=>controller.selectThread(thread),onCardKey=event=>{event.target===event.currentTarget&&(event.key==="Enter"||event.key===" ")&&(event.preventDefault(),select())},needsLabel=root.needs==="check"?controller.say("needCheck"):root.needs==="choice"?controller.say("needChoice"):controller.say("needInput"),choices=root.needs==="check"?[...COMMENT_CHECK_ANSWERS]:root.options,meta=[commentRelativeTime(root.createdAt,locale,now),showAnchor&&anchor?controller.say("anchorLabel",{n:anchor.order}):"",number>0&&root.x!=null?`#${number}`:""].filter(Boolean).join(" \xB7 "),replyLabel=resolved?controller.say("replyToReopen"):controller.say("reply"),newDot=comment=>isNew(comment)?jsx28("span",{className:"nui-comment-new",role:"img","aria-label":controller.say("newActivity")}):null;return jsxs24("article",{ref:cardRef,className:"nui-comment-card","data-thread":root.recordKey,"data-selected":selected?"":void 0,"data-resolved":resolved?"":void 0,"aria-current":selected?"true":void 0,"aria-label":controller.say("pin",{who:root.author,body:root.body}),tabIndex:0,onClick:select,onKeyDown:onCardKey,children:[jsxs24("header",{className:"nui-comment-head",children:[jsx28(CommentAvatar,{author:root.author,me}),jsxs24("div",{className:"nui-comment-who",children:[jsx28("span",{className:"nui-comment-author",children:root.author}),jsx28("span",{className:"nui-comment-meta",children:meta}),newDot(root)]}),jsxs24("div",{className:"nui-comment-actions",onClick:stop,onKeyDown:stop,children:[resolved?jsx28(IconAction,{label:controller.say("reopen"),icon:"arrow-counter-clockwise",disabled:busy,onClick:()=>actions.setStatus(root,"Open")}):jsx28(IconAction,{label:controller.say("resolve"),icon:"check",disabled:busy,onClick:()=>actions.setStatus(root,"Resolved")}),jsx28(IconAction,{label:controller.say("delete"),icon:"trash",disabled:busy,onClick:()=>actions.askDelete(root)})]})]}),root.example||resolved?jsxs24("div",{className:"nui-comment-badges",children:[root.example?jsx28(Badge,{children:controller.words.example}):null,resolved?jsx28(Badge,{children:controller.words.resolved}):null]}):null,jsx28("p",{className:"nui-comment-body",children:root.body}),root.needs!=="none"?jsxs24("div",{className:"nui-comment-ask",onClick:stop,onKeyDown:stop,children:[jsxs24("p",{className:"nui-comment-ask-label",children:[jsx28("span",{className:"nui-comment-ask-who",children:controller.say("needs",{who:root.author})})," ",needsLabel]}),root.answer?jsxs24("p",{className:"nui-comment-answer",children:[jsx28(Icon,{name:"check"}),jsx28("span",{children:controller.say("sent",{answer:answerLabel(controller,root.answer)})})]}):root.needs==="input"?jsxs24("div",{className:"nui-comment-choices",children:[jsx28(Button,{size:"sm",variant:"secondary",disabled:busy,icon:"paperclip",onClick:()=>fileRef.current?.click(),children:controller.words.attach}),jsx28(Button,{size:"sm",variant:"secondary",disabled:busy,icon:"clipboard-text",onClick:()=>replyRef.current?.focus(),children:controller.words.paste}),jsx28("input",{ref:fileRef,type:"file",className:"nui-sr-only",tabIndex:-1,"aria-hidden":"true",accept:"text/*,.md,.txt,.csv,.json",onChange:event=>{attach(event.target.files?.[0]),event.target.value=""}})]}):jsx28("div",{className:"nui-comment-choices",role:"group","aria-label":needsLabel,children:choices.map(choice=>jsx28(Button,{size:"sm",variant:"secondary",disabled:busy,onClick:()=>actions.answer(root,choice),children:answerLabel(controller,choice)},choice))})]}):null,replies.length?jsx28("ol",{className:"nui-comment-replies",children:replies.map(reply=>jsxs24("li",{className:"nui-comment-reply",children:[jsx28(CommentAvatar,{author:reply.author,me}),jsxs24("div",{className:"nui-comment-reply-text",children:[jsxs24("div",{className:"nui-comment-who",children:[jsx28("span",{className:"nui-comment-author",children:reply.author}),jsx28("span",{className:"nui-comment-meta",children:commentRelativeTime(reply.createdAt,locale,now)}),newDot(reply)]}),jsx28("p",{className:"nui-comment-body",children:reply.body})]})]},reply.recordKey))}):null,jsxs24("div",{className:"nui-comment-compose",onClick:stop,onKeyDown:stop,children:[jsx28("textarea",{ref:replyRef,className:"nui-comment-input",value:draft,rows:1,placeholder:replyLabel,"aria-label":replyLabel,onChange:event=>setDraft(event.target.value),onKeyDown:event=>{sendsOnEnter(event)&&(event.preventDefault(),send())}}),jsx28(IconAction,{label:controller.say("send"),icon:"paper-plane-right",disabled:!draft.trim()||sending,onClick:()=>{send()}})]})]})}function NewCommentBox({controller}){let pin=controller.draftPin,[body,setBody]=useState24(""),[sending,setSending]=useState24(!1),ref=useRef24(null),cancel=controller.cancelPin,where=pin?.anchorKey??null;if(useEffect25(()=>{ref.current?.focus({preventScroll:!0})},[where]),useEscapeLayer("comments.new",()=>(cancel(),!0),{priority:ESCAPE_PRIORITY.selection+1,enabled:pin!=null}),!pin)return null;let anchor=controller.anchors.find(item=>item.recordKey===pin.anchorKey),heading=anchor&&pin.x==null?controller.say("newCommentWhole",{n:anchor.order}):anchor?controller.say("newCommentOn",{n:anchor.order}):controller.say("newComment"),send=async()=>{if(!body.trim()||sending)return;setSending(!0);let ok=await controller.sendNew(body.trim());setSending(!1),ok&&setBody("")};return jsxs24("div",{className:"nui-comment-new-box",role:"group","aria-label":heading,children:[jsx28("p",{className:"nui-comment-new-title",children:heading}),jsx28("textarea",{ref,className:"nui-comment-input",value:body,rows:2,placeholder:controller.say("commentPlaceholder"),"aria-label":controller.say("commentPlaceholder"),onChange:event=>setBody(event.target.value),onKeyDown:event=>{sendsOnEnter(event)&&(event.preventDefault(),send()),event.key==="Escape"&&!event.nativeEvent.isComposing&&(event.preventDefault(),body.trim()?event.currentTarget.blur():cancel())}}),jsxs24("div",{className:"nui-comment-new-actions",children:[jsx28(Button,{size:"sm",variant:"ghost",onClick:cancel,children:controller.words.cancel}),jsx28(Button,{size:"sm",variant:"primary",disabled:!body.trim()||sending,icon:"paper-plane-right",onClick:()=>{send()},children:controller.words.send})]})]})}function CommentPins({controller,anchorKey,onOpen}){let key=anchorKey===void 0?controller.anchorKey:anchorKey,pins=controller.threadsOn(key).filter(thread=>thread.root.x!=null&&thread.root.y!=null),draft=controller.draftPin,drag=controller.dragZone,here=key??null,open=(event,thread)=>{event.stopPropagation(),onOpen?onOpen(thread):controller.selectThread(thread)},box=zone=>({left:`${zone.x*100}%`,top:`${zone.y*100}%`,width:`${zone.w*100}%`,height:`${zone.h*100}%`});return jsxs24(Fragment13,{children:[controller.commenting?jsx28("div",{className:"nui-comment-capture","aria-hidden":"true",...controller.zoneHandlers(here),onClick:event=>event.stopPropagation()}):null,pins.filter(thread=>isCommentZone(thread.root)).map(thread=>jsx28("span",{className:"nui-comment-zone","aria-hidden":"true","data-selected":thread.root.recordKey===controller.threadKey?"":void 0,"data-resolved":thread.root.status==="Resolved"?"":void 0,style:box({x:thread.root.x,y:thread.root.y,w:thread.root.w,h:thread.root.h})},`zone-${thread.root.recordKey}`)),pins.map(thread=>jsx28("button",{type:"button",className:"nui-comment-pin","data-agent":thread.root.author!==controller.me?"":void 0,"data-selected":thread.root.recordKey===controller.threadKey?"":void 0,"data-resolved":thread.root.status==="Resolved"?"":void 0,style:{left:`${thread.root.x*100}%`,top:`${thread.root.y*100}%`},"aria-label":controller.say(isCommentZone(thread.root)?"zone":"pin",{who:thread.root.author,body:thread.root.body}),onClick:event=>open(event,thread),children:controller.numberOf(thread)},thread.root.recordKey)),drag&&drag.anchorKey===here?jsx28("span",{className:"nui-comment-zone","data-draft":"","data-selected":"","aria-hidden":"true",style:box(drag)}):null,draft&&draft.anchorKey===here&&draft.x!=null&&draft.y!=null?jsxs24(Fragment13,{children:[isCommentZone(draft)?jsx28("span",{className:"nui-comment-zone","data-draft":"","data-selected":"","aria-hidden":"true",style:box({x:draft.x,y:draft.y,w:draft.w,h:draft.h})}):null,jsx28("span",{className:"nui-comment-pin","data-draft":"","data-selected":"","aria-hidden":"true",style:{left:`${draft.x*100}%`,top:`${draft.y*100}%`},children:"+"})]}):null]})}function CommentPane({controller,title,showCopy=!0,className}){let rootRef=useRef24(null),heading=title??controller.say("comments"),{threads,visibleThreads,changes,draftPin,filter,statusFilter,anchors,anchorKey}=controller,scoped=filter==="anchor"?controller.threadsOn(anchorKey):threads,openCount=scoped.filter(thread=>thread.root.status==="Open").length,resolvedCount=scoped.filter(thread=>thread.root.status==="Resolved").length,emptyTitle=statusFilter==="resolved"?controller.say("emptyResolved"):filter==="anchor"?controller.say("emptyAnchor"):controller.say("emptyAll");return jsxs24("aside",{ref:rootRef,className:cx("nui-comment-pane",className),"aria-label":heading,children:[jsxs24("div",{className:"nui-comment-pane-head",children:[jsx28("h2",{className:"nui-comment-pane-title",children:heading}),anchors.length?jsx28(SegmentedControl,{label:controller.words.scope,value:filter,onChange:value=>controller.setFilter(value),options:[{value:"anchor",label:controller.words.thisAnchor,count:controller.threadsOn(anchorKey).length},{value:"all",label:controller.words.all,count:threads.length}]}):null]}),jsx28(SegmentedControl,{label:controller.words.status,value:statusFilter,onChange:value=>controller.setStatusFilter(value),options:[{value:"open",label:controller.words.open,count:openCount},{value:"resolved",label:controller.words.resolvedFilter,count:resolvedCount}]}),showCopy?jsxs24(Button,{variant:"secondary",className:"nui-comment-copy",icon:"copy",disabled:!changes.length||controller.copying,onClick:()=>{controller.copyChanges(rootRef.current)},children:[jsx28("span",{className:"nui-comment-copy-label",children:controller.say("copy")}),jsx28("span",{className:"nui-comment-count",children:changes.length})]}):null,draftPin?jsx28(NewCommentBox,{controller}):anchors.length&&controller.anchor?jsxs24("div",{className:"nui-comment-start",children:[jsx28(Button,{variant:"secondary",icon:"chat-circle-text",onClick:()=>controller.placePin(anchorKey,null,null),children:controller.say("commentOnAnchor",{n:controller.anchor.order})}),controller.commenting?jsx28("p",{className:"nui-comment-hint",children:controller.say(controller.zones?"zoneHint":"pinHint")}):null]}):null,visibleThreads.length?jsx28("div",{className:"nui-comment-list",children:visibleThreads.map(thread=>jsx28(CommentThreadCard,{controller,thread,showAnchor:filter==="all"},thread.root.recordKey))}):!draftPin&&!controller.loading?jsx28(EmptyState,{className:"nui-comment-empty",icon:"chat-circle-text",title:emptyTitle}):null,jsx28(Dialog,{open:controller.deleting!=null,onClose:controller.cancelDelete,title:controller.say("deleteTitle"),description:controller.say("deleteBody"),role:"alertdialog",children:jsxs24("div",{className:"nui-comment-dialog-actions",children:[jsx28(Button,{variant:"ghost","data-dialog-cancel":"",onClick:controller.cancelDelete,children:controller.words.cancel}),jsx28(Button,{variant:"danger","data-dialog-confirm":"",onClick:()=>{controller.confirmDelete()},children:controller.words.delete})]})}),jsx28(ActionToast,{toast:controller.toaster.toast,onUndo:()=>{controller.toaster.undo()},onDismiss:controller.toaster.dismiss})]})}var PRESENT_WORDS=Object.freeze({audienceTitle:{en:"Presentation",fr:"Pr\xE9sentation"},fillScreen:{en:"Click to fill this screen",fr:"Clique pour remplir cet \xE9cran"},dragToScreen:{en:"Drag this window to the other screen, then click to fill it",fr:"Fais glisser cette fen\xEAtre sur l\u2019autre \xE9cran, puis clique pour la remplir"},pressAgain:{en:"Press Present again to show it on the other screen",fr:"Appuie de nouveau sur Pr\xE9senter pour l\u2019afficher sur l\u2019autre \xE9cran"},blocked:{en:"The presentation window was blocked. Allow pop-ups for Notis, then press Present again.",fr:"La fen\xEAtre de pr\xE9sentation a \xE9t\xE9 bloqu\xE9e. Autorise les fen\xEAtres pop-up pour Notis, puis appuie de nouveau sur Pr\xE9senter."},onOtherScreen:{en:"Showing on the other screen",fr:"Affich\xE9 sur l\u2019autre \xE9cran"}});var AUDIENCE_WINDOW_NAME="notis-presenter-audience";function hasSecondScreen(win){return win?.screen?.isExtended===!0}function sameArea(a,b){return a.availLeft===b.availLeft&&a.availTop===b.availTop&&a.availWidth===b.availWidth&&a.availHeight===b.availHeight}function pickAudienceScreen(screens,current){let others=screens.filter(screen=>!(current&&(screen===current||sameArea(screen,current))));return others.length===0?null:[...others].sort((a,b)=>{let external=+(a.isInternal===!0)-+(b.isInternal===!0);return external!==0?external:b.availWidth*b.availHeight-a.availWidth*a.availHeight})[0]}function audienceFeatures(screen){if(!screen)return"popup,width=960,height=540";let{availLeft:left,availTop:top,availWidth:width,availHeight:height}=screen;return`popup,left=${Math.round(left)},top=${Math.round(top)},width=${Math.round(width)},height=${Math.round(height)}`}var KEY_ACTIONS=Object.freeze({ArrowRight:"next",ArrowDown:"next",PageDown:"next"," ":"next",Enter:"next",ArrowLeft:"previous",ArrowUp:"previous",PageUp:"previous",Home:"first",End:"last",Escape:"stop"}),FIELD='input,textarea,select,[contenteditable=""],[contenteditable="true"]',ACTIVE="a[href],button,label,summary,details,video,audio,[role=button],[role=link],[role=tab],[onclick],[tabindex]";function inside(target,selector){let element=target;return!!(element&&typeof element.closest=="function"&&element.closest(selector))}function keyAction(event){let action=KEY_ACTIONS[event.key];return!action||event.defaultPrevented||event.altKey||event.ctrlKey||event.metaKey||inside(event.target,FIELD)||(event.key===" "||event.key==="Enter")&&inside(event.target,ACTIVE)?null:action}function clickHasOwnTarget(target){return inside(target,FIELD)||inside(target,ACTIVE)}function fillsScreen(win){if(win.document.fullscreenElement)return!0;let{width,height}=win.screen;return width>0&&height>0&&win.innerWidth>=width-1&&win.innerHeight>=height-1&&win.outerWidth>0&&win.outerHeight>0&&Math.abs(win.outerWidth-win.innerWidth)<=1&&Math.abs(win.outerHeight-win.innerHeight)<=1}function resolveSheetUrls(css,base){let decode=value=>value.replace(/\\([\da-f]{1,6}\s?|\r\n|[\n\r\f]|[^\n\r\f])/gi,(_,escape)=>{if(/^[\da-f]/i.test(escape)){let point=parseInt(escape.trim(),16);return point>0&&point<=1114111&&!(point>=55296&&point<=57343)?String.fromCodePoint(point):"\uFFFD"}return/^[\n\r\f]/.test(escape)?"":escape});return css.replace(/\/\*[\s\S]*?\*\/|url\(\s*(?:"((?:\\.|[^"\\])*)"|'((?:\\.|[^'\\])*)'|((?:\\.|[^)\\])*))\s*\)|@import\s+(?:"((?:\\.|[^"\\])*)"|'((?:\\.|[^'\\])*)')|"(?:\\.|[^"\\])*"|'(?:\\.|[^'\\])*'/gi,(token,double,single,bare,importDouble,importSingle)=>{let value=double??single??bare?.trim()??importDouble??importSingle;if(value===void 0)return token;let decoded=decode(value);if(decoded.startsWith("#"))return token;try{let url=JSON.stringify(new URL(decoded,base).href);return importDouble!==void 0||importSingle!==void 0?`@import ${url}`:`url(${url})`}catch{return token}})}function sheetText2(sheet){if(!sheet)return null;try{let text=Array.from(sheet.cssRules,rule=>rule.cssText).join(`
18
+ `);return sheet.href?resolveSheetUrls(text,sheet.href):text}catch{return null}}function copyNodes(target,source){for(let node of Array.from(source.querySelectorAll('link[rel~="stylesheet"],style'))){let sheetNode=node;if(sheetNode.disabled||sheetNode.sheet?.disabled)continue;let text=sheetText2(sheetNode.sheet),copy;if(node.localName==="link"&&text===null){let link=target.createElement("link");link.rel="stylesheet",link.href=node.href,copy=link}else{let style=target.createElement("style");style.textContent=text??node.textContent,copy=style}let media=node.getAttribute("media");media&&(copy.media=media),target.head.append(copy)}}function copyAdopted(target,sheets){for(let sheet of sheets??[]){if(sheet.disabled)continue;let text=sheetText2(sheet);if(!text)continue;let style=target.createElement("style");style.textContent=text,target.head.append(style)}}function copyStylesInto(target,source,shadowRoot){copyNodes(target,source),copyAdopted(target,source.adoptedStyleSheets),shadowRoot&&(copyNodes(target,shadowRoot),copyAdopted(target,shadowRoot.adoptedStyleSheets));let from=source.documentElement,to=target.documentElement;from.className&&(to.className=from.className);let style=from.getAttribute("style");style?to.setAttribute("style",style):to.removeAttribute("style")}import{useCallback as useCallback20,useEffect as useEffect26,useRef as useRef25,useState as useState25}from"react";import{createPortal as createPortal6}from"react-dom";import{jsx as jsx29,jsxs as jsxs25}from"react/jsx-runtime";async function windowManagementState(win){if(typeof win.getScreenDetails!="function")return"unsupported";try{return(await win.navigator.permissions.query({name:"window-management"})).state}catch{return"prompt"}}async function screenDetails(win){try{return await win.getScreenDetails()}catch{return null}}var AUDIENCE_BASE_CSS=["html,body{height:100%;margin:0;overflow:hidden;background:hsl(0 0% 0%)}","[data-notis-audience-root]{position:fixed;inset:0;display:flex;flex-direction:column}"].join("");function setUpWindow(win,anchor,title,locale){let doc=win.document,root=anchor?.getRootNode(),shadow=typeof ShadowRoot<"u"&&root instanceof ShadowRoot?root:null;doc.head.replaceChildren();let charset=doc.createElement("meta");charset.setAttribute("charset","utf-8"),doc.head.append(charset),doc.title=title,doc.documentElement.lang=locale,copyStylesInto(doc,document,shadow);let base=doc.createElement("style");base.textContent=AUDIENCE_BASE_CSS,doc.head.append(base);let appRoot=anchor?.closest("[data-notis-app-root]")??null,container=doc.createElement("div");container.setAttribute("data-notis-app-root",""),container.setAttribute("data-notis-audience-root","");let theme=appRoot?.getAttribute("data-notis-theme");theme&&container.setAttribute("data-notis-theme",theme);let style=appRoot?.getAttribute("style");style&&container.setAttribute("style",style);let layer=doc.createElement("div");return layer.setAttribute(LAYER_ROOT_ATTRIBUTE,""),doc.body.replaceChildren(container,layer),{win,container,layer,placed:!1}}function AudienceView({audience,children}){let t=useT(),{win}=audience,[filled,setFilled]=useState25(()=>fillsScreen(win));useEffect26(()=>{let update=()=>setFilled(fillsScreen(win));return update(),win.addEventListener("resize",update),win.document.addEventListener("fullscreenchange",update),()=>{win.removeEventListener("resize",update),win.document.removeEventListener("fullscreenchange",update)}},[win]);let fill=useCallback20(event=>{event.preventDefault(),event.stopPropagation(),win.document.documentElement.requestFullscreen?.({navigationUI:"hide"})?.catch(()=>{})},[win]);return jsxs25(LayerRootProvider,{root:audience.layer,children:[children,filled?null:jsx29("button",{type:"button","data-notis-audience-fill":"",onClick:fill,className:"fixed inset-0 z-[1000] flex cursor-pointer items-end justify-center bg-transparent p-8",children:jsx29("span",{className:"rounded-full bg-popover px-4 py-2 text-sm text-popover-foreground shadow-lg ring-1 ring-border",children:t(audience.placed?PRESENT_WORDS.fillScreen:PRESENT_WORDS.dragToScreen)})})]})}function useAudienceScreen(options){let t=useT(),locale=useToolkitLocale(),optionsRef=useRef25(options);optionsRef.current=options;let[secondScreen,setSecondScreen]=useState25(()=>typeof window>"u"?!1:hasSecondScreen(window)),[audience,setAudience]=useState25(null),audienceRef=useRef25(null),teardownRef=useRef25(null);useEffect26(()=>{if(typeof window>"u")return;let screen=window.screen,update=()=>setSecondScreen(hasSecondScreen(window));if(update(),typeof screen.addEventListener=="function")return screen.addEventListener("change",update),()=>screen.removeEventListener?.("change",update)},[]);let finish=useCallback20(closeWindow=>{let current=audienceRef.current;current&&(audienceRef.current=null,teardownRef.current?.(),teardownRef.current=null,closeWindow&&!current.win.closed&&current.win.close(),setAudience(null),optionsRef.current.onClose?.())},[]),close=useCallback20(()=>finish(!0),[finish]),open=useCallback20(async anchor=>{let current=audienceRef.current;if(current&&!current.win.closed)return current.win.focus(),"opened";if(typeof window>"u"||!hasSecondScreen(window))return"one-screen";let state=await windowManagementState(window),target=null;if(state==="granted"||state==="prompt"){let details=await screenDetails(window);details&&(target=pickAudienceScreen(details.screens,details.currentScreen))}let win=window.open("",AUDIENCE_WINDOW_NAME,audienceFeatures(target));if(!win)return state==="prompt"?"press-again":"blocked";let next=setUpWindow(win,anchor??null,t(optionsRef.current.title??PRESENT_WORDS.audienceTitle),locale);next.placed=target!==null;let onKey=event=>{let action=keyAction(event);action&&(event.preventDefault(),optionsRef.current.onAction(action))},onClick=event=>{event.defaultPrevented||event.button!==0||clickHasOwnTarget(event.target)||optionsRef.current.onAction("next")},onContextMenu=event=>{event.defaultPrevented||clickHasOwnTarget(event.target)||(event.preventDefault(),optionsRef.current.onAction("previous"))},onGone=()=>finish(!1),onLeave=()=>finish(!0);win.addEventListener("keydown",onKey),win.addEventListener("click",onClick),win.addEventListener("contextmenu",onContextMenu),win.addEventListener("pagehide",onGone),window.addEventListener("pagehide",onLeave);let poll=window.setInterval(()=>{win.closed&&finish(!1)},500);return teardownRef.current?.(),teardownRef.current=()=>{window.clearInterval(poll),window.removeEventListener("pagehide",onLeave),win.removeEventListener("keydown",onKey),win.removeEventListener("click",onClick),win.removeEventListener("contextmenu",onContextMenu),win.removeEventListener("pagehide",onGone)},audienceRef.current=next,setAudience(next),win.focus(),"opened"},[finish,locale,t]);useEffect26(()=>()=>finish(!0),[finish]);let portal=useCallback20(node=>audience?createPortal6(jsx29(AudienceView,{audience,children:node}),audience.container):null,[audience]);return{secondScreen,isOpen:audience!==null,open,close,portal}}export{ACTION_TOAST_MS,ACTION_WORDS,AUDIENCE_WINDOW_NAME,ActionToast,Area2 as Area,AreaChart,AttachmentGallery,BLOCK_WORDS,BOARD_WORDS,Badge,Bar2 as Bar,BarChart,BoardView,Button,CALENDAR_NARROW_MAX,CALENDAR_TRAY_SIDE_MIN,CALENDAR_VIEWS,CALENDAR_WORDS,CHART_WORDS,CHAT_NARROWED_ATTRIBUTE,CHAT_PANEL_DEFAULT_WIDTH_PX,CHAT_PANEL_DESKTOP_MEDIA_QUERY,CHAT_PANEL_KEYBOARD_STEP_PX,CHAT_PANEL_MIN_CONTENT_WIDTH_PX,CHAT_PANEL_MIN_WIDTH_PX,CHAT_PANEL_OVERLAP_PROPERTY,CHAT_PANEL_PAGE_HOVER_DELAY_MS,CHAT_PANEL_PAGE_PEEK_PX,CHAT_PANEL_WIDTH_PROPERTY,CHAT_PANEL_WIDTH_STORAGE_KEY,COMMENT_CHECK_ANSWERS,COMMENT_COLUMNS,COMMENT_TEXT_FILE,COMMENT_WORDS,COMPARES,COMPARE_WORDS,CalendarView,CartesianGrid2 as CartesianGrid,Cell2 as Cell,Chart,ChartContainer,ChartLegend,ChartStyle,ChartTable,ChartTooltip,ChartTooltipContent,CommentAvatar,CommentPane,CommentPins,CommentThreadCard,ComposedChart2 as ComposedChart,DEFAULT_COMPARE,DEFAULT_PRESET,DayPicker,EMPTY_SELECTION,ESCAPE_PRIORITY,EditableFields,EmptyState,FIELDS_ESCAPE_PRIORITY,FIELDS_SAVE_KEYS,FIELD_WORDS,FieldDisclosure,FieldList,FieldLongText,FieldMultiSelect,FieldRow,FieldSelect,FieldText,GALLERY_WORDS,HelpSheet,IDLE_ROW_STATE,IMAGE_VIEWER_ZOOM_LEVELS,Icon,ImageViewer,KeyboardEngine,KeyboardEngineCore,Keycap,KeycapSurface,LAYER_ROOT_ATTRIBUTE,LIST_DRAG_TYPE,LIST_READER_WORDS,LabelList,LayerRootProvider,Legend,Line2 as Line,LineChart,ListReader,ListSkeleton,MANAGER_PHONE_LAYOUT_BELOW_PX,Menu,MenuItem,MenuSeparator,MenuSub,Metric,NativeSelect,NewCommentBox,Notice,NotisKeyClash,OPEN_MODES,OPEN_MODE_CACHE_PREFIX,OPEN_MODE_ICONS,OPEN_MODE_WORDS,OpenAsMenu,OpenModeStoreProvider,PAGE_VIEWPORT_ATTRIBUTE,PANELS_HOVER_DELAY_MS,PANELS_KEYBOARD_STEP_PX,PANELS_LIST_MIN_PX,PANELS_READER_MIN_PX,PANELS_READER_PEEK_PX,PANELS_READER_WANT_PX,PANELS_READER_WANT_WIDE_PX,PANELS_READER_WIDE_FROM_PX,PERIOD_PICKER_TWO_MONTHS_MIN,PERIOD_WORDS,PRESENT_WORDS,PRESETS,PRESET_WORDS,Pagination,Panels,PeriodPicker,Pie,PieChart,Popover,REORDER_DRAG_TYPE,REORDER_WORDS,ROOT_OWNER,ROW_ID_ATTRIBUTE,ROW_INTERACTIVE_SELECTOR,ROW_TIME_WORDS,ReferenceDot,ReferenceLine,RenderChartData,ResponsiveContainer2 as ResponsiveContainer,Row,RowIdContext,RowMore,RowStateContext,SELECTION_BAR_BOOST,SELECTION_BAR_MAX_INLINE,SEQUENCE_TIMEOUT_MS,STAR_WORDS,STATUS_WORDS,Scatter,Section,SegmentedControl,SelectionBar,ShortcutRegistry,ShortcutScope,Sparkline,StarMark,StatRow,StatusIcon,Switch,TABROW_WORDS,TABS_WORDS,TIMELINE_WORDS,TIMELINE_ZOOMS,TabRow,Tabs,TimelineView,ToggleGroup,Tooltip,VS_WORDS,XAxis2 as XAxis,YAxis2 as YAxis,adoptToolkitStyles,applyCommentPatches,audienceFeatures,availableActions,barLabel,barShape,binUnit,dropIndex as boardDropIndex,boardOrder,boardStep,buildBins,chainReorderProps,changedFieldKeys,chatPanelMaxWidth,chatPanelOverlap,chatPanelPageWidth,chatPanelPushLimit,chooseFit,clampChatPanelWidth,clampReaderWidth,clickHasOwnTarget,clipCommentAnswer,commentAnchorOf,commentChangesSince,commentColumns,commentCopiedWords,commentDigest,commentRelativeTime,commentRowsOf,commentThreads,commentTimeOf,commentWords,compareRange,copyStylesInto,createChatPanelEdge,customPeriod,dayCount,dayNumberLabel,detectLocale,detectPlatform,dropIndex2 as dropIndex,failedItemsWords,fillsScreen,findLayerRoot,findRow,formatDateRange,formatDayHeading,formatDelta,formatLongDay,formatMonthYear,formatNumber,formatPeriodParam,formatReaderAgo,formatRowAgo,formatRowTime,formatShortDay,formatValue,fromIsoDay,galleryItemKind,galleryItemName,getOpenModeStore,getSharedInstance,getToolkitStyleSheet,getToolkitStyleText,gridColumns,hasIcon,hasSecondScreen,inCommentScope,intlLocale,isCommentZone,isCompareId,isOpenMode,isPresetId,keyAction,layoutTimeline,localStorageOpenModeStore,metricView,neighbourColumn,newCommentId,normalizeAllowed,normalizePeriod,overlap,pageViewport,panelMath_exports as panelMath,parsePeriodParam,parseRowDate,parseStoredChatPanelWidth,parseStoredWidth,periodRanges,periodSeries,pickAudienceScreen,place,presetRange,pushLimit,rangeBetween,rankActions,readCommentRow,readOpenModeCache,readerMaxWidth,readerWantWidth,registerToolkitStyles,renderIcon,resolveActions,samePeriod,scrollCommentIntoView,selectionReducer,seriesColor,setOpenModeStore,sparkPaths,splitBreakpoint,splitFits,statusGroup,stepCursor,stepTab,successorOf,tabIds,tabPanelProps,timelineWindow,toIsoDay,toggleFieldValue,total,useActions,useAudienceScreen,useChart,useComments,useEngineCore,useEscapeBlocker,useEscapeLayer,useFieldDraft,useHelpSheet,useKeyLabel,useLayerRoot,useListKeys,useMenu,useOpenMode,useOpenModeKey,useOpenModeStore,usePanels,usePeriod,useRegistryVersion,useReorder,useRowState,useSelection,useSelectionBar,useShortcut,useShortcutOwner,useShortcutScope,useShortcuts,useToast,useToolkitLocale,useToolkitPlatform,useToolkitSettings,userSettingsOpenModeStore,weekdayNames,writeCommentClipboard,writeOpenModeCache};