@pretextbook/web-editor 0.5.0 → 0.5.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.es.js +4 -4
- package/dist/index.es.js.map +1 -1
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/dist/sectionUtils.d.ts +12 -4
- package/package.json +1 -1
package/dist/index.js
CHANGED
|
@@ -1080,5 +1080,5 @@ Expected it to be ${r}.`}var QU=class extends Error{name=`InvalidDocError`;const
|
|
|
1080
1080
|
`+e.slice(a)}function S6(e,t){let n=RegExp(`[ \t]*${_6(t)}[ \t]*\n?`,`g`);return e.replace(n,``)}function C6(e,t,n){let r=new RegExp(_6(t)).exec(e),i=r?D6(r[0]):`<plus:division ref="${t}"/>`,a=S6(e,t);if(n!==null){let e=new RegExp(_6(n)).exec(a);if(e){let t=e.index+e[0].length;return a.slice(0,t)+`
|
|
1081
1081
|
`+i+a.slice(t)}}let o=a.lastIndexOf(`</`);return o===-1?a+`
|
|
1082
1082
|
`+i:a.slice(0,o)+i+`
|
|
1083
|
-
`+a.slice(o)}function w6(e,t,n,r){let i=new RegExp(_6(t));return i.test(e)?e.replace(i,`<plus:${r} ref="${n}"/>`):e}function T6(e,t){let n=new RegExp(_6(t));return e.find(e=>n.test(e.content))??null}function E6(e,t){let n=e,r=null;for(let e of t)n=C6(n,e,r),r=e;return n}function D6(e){return e.replace(/<plus:([a-z-]+)((?:\s[^>]*?)?)>\s*<\/plus:\1>/g,(e,t,n)=>`<plus:${t}${n}/>`)}function O6(e,t){let n=new Set,r=[t];for(;r.length>0;){let t=r.pop();if(n.has(t))continue;n.add(t);let i=e.find(e=>e.xmlId===t);if(i)for(let e of v6(i.content))r.push(e)}return n}function k6(e,t){let n=O6(e,t);return e.filter(e=>!n.has(e.xmlId))}function A6(e,t){let n=[],r=new Set([t]),i=(t,a)=>{let o=e.find(e=>e.xmlId===t);if(o)for(let s of v6(o.content)){if(r.has(s))continue;let o=e.find(e=>e.xmlId===s);o&&(r.add(s),n.push({division:o,depth:a,parentXmlId:t}),i(s,a+1))}};return i(t,0),n}function j6(e,t){let n=k6(e,t),r=new Set(n.map(e=>e.xmlId)),i=new Set;for(let e of n)for(let t of v6(e.content))r.has(t)&&i.add(t);return n.filter(e=>!i.has(e.xmlId))}function M6(e,t,n){let r=t.find(t=>t.xmlId===e);if(!r)return`<!-- missing division: ${e} -->`;if(n.has(e))return`<!-- circular reference: ${e} -->`;let i;if(r.sourceFormat===`pretext`)i=r.content;else{let{pretextSource:e,pretextError:t}=W4(r.sourceFormat===`latex`?i6(r.content,r.type):t6(r.content),r.sourceFormat),n=e??`<!-- conversion error: ${t} -->`;i=`<${r.type} xml:id="${r.xmlId}">\n<title>${r.title}</title>\n\n${n}\n</${r.type}>`}if(r.sourceFormat!==`pretext`)return i;let a=new Set(n).add(e);return i.replace(/<plus:[a-z-]+\s[^>]*ref="([^"]+)"[^>]*?(?:\/>|>\s*<\/plus:[a-z-]+>)/g,(e,n)=>M6(n,t,a))}function N6(e,t){return M6(t,e,new Set)}var P6=new Set([`part`,`chapter`]),F6=new Set([`book`,`article`,`slideshow`]);function I6(e,t,n){let r=F6.has(e)?t:P6.has(e)?`<book>\n${t}\n</book>`:`<article>\n${t}\n</article>`;return`<pretext>\n${n.trim()?`${n.trim()}\n`:``}${r}\n</pretext>`}var L6=({onOpenAssetPicker:e})=>{let r=Q4(e=>e.divisions),i=Q4(e=>e.rootDivisionId),a=Q4(e=>e.activeDivisionId),o=Q4(e=>e.selectSection),s=Q4(e=>e.removeSection),c=Q4(e=>e.divisionContentChange),l=Q4(e=>e.insertAtCursor),u=Q4(e=>e.startSectionEdit),d=Q4(e=>e.setEditDraft),f=Q4(e=>e.commitSectionEdit),p=Q4(e=>e.cancelSectionEdit),m=Q4(e=>e.editingId),h=Q4(e=>e.editDraft),g=r?r.find(e=>e.xmlId===i)??r.find(e=>e.type===`book`||e.type===`article`||e.type===`slideshow`)??r[0]??null:null,_=g&&r?A6(r,g.xmlId):[],v=g&&r?j6(r,g.xmlId):[],[y,b]=(0,n.useState)(new Set),x=e=>!y.has(e),S=e=>{b(t=>{let n=new Set(t);return n.has(e)?n.delete(e):n.add(e),n})};(0,n.useEffect)(()=>{if(!a||!g)return;let e=new Map(_.map(e=>[e.division.xmlId,e])),t=new Set;t.add(g.xmlId);let n=a;for(;n;){let r=e.get(n);if(!r?.parentXmlId)break;t.add(r.parentXmlId),n=r.parentXmlId}b(e=>{if([...t].every(t=>!e.has(t)))return e;let n=new Set(e);return t.forEach(e=>n.delete(e)),n})},[a]);let C=new Set(_.map(e=>e.parentXmlId).filter(Boolean)),w=[];if(g){let e=new Set;x(g.xmlId)&&e.add(g.xmlId);for(let t of _)t.parentXmlId&&e.has(t.parentXmlId)&&(w.push(t),x(t.division.xmlId)&&e.add(t.division.xmlId))}let T=(e,t)=>{if(!r)return;let n=r.find(e=>e.xmlId===t);n&&c(n.xmlId,D6(S6(n.content,e)))},E=(e,t)=>{if(window.confirm(`Delete "${e.title||`Untitled`}"? This permanently removes the division.`)){if(t&&r){let n=r.find(e=>e.xmlId===t);n&&c(n.xmlId,D6(S6(n.content,e.xmlId)))}s(e.xmlId)}},D=e=>{l(`<plus:${e.type} ref="${e.xmlId}"/>`)},O=e=>{g&&c(g.xmlId,D6(x6(g.content,e.xmlId,e.type,null)))};return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsxs)(`ul`,{className:`pretext-plus-editor__toc-list`,role:`list`,children:[g&&(0,t.jsx)(O3,{division:g,depth:0,isActive:a===g.xmlId,hasChildren:C.has(g.xmlId),isExpanded:x(g.xmlId),onToggleExpand:()=>S(g.xmlId),editDraft:m===g.xmlId?h:null,onSelect:()=>o(g.xmlId),onDraftChange:d,onEditCommit:f,onEditCancel:p,menuItems:[{label:`Edit properties`,onClick:()=>u(g)}],isLatex:g.sourceFormat===`latex`,isRoot:!0}),w.length===0&&g&&x(g.xmlId)&&(0,t.jsx)(`li`,{className:`pretext-plus-editor__toc-no-sections`,children:(0,t.jsx)(`span`,{children:`No placed divisions`})}),w.map(e=>(0,t.jsx)(O3,{division:e.division,depth:e.depth+1,isActive:a===e.division.xmlId,hasChildren:C.has(e.division.xmlId),isExpanded:x(e.division.xmlId),onToggleExpand:()=>S(e.division.xmlId),editDraft:m===e.division.xmlId?h:null,onSelect:()=>o(e.division.xmlId),onDraftChange:d,onEditCommit:f,onEditCancel:p,menuItems:[{label:`Edit properties`,onClick:()=>u(e.division)},{label:`Remove from document`,onClick:()=>T(e.division.xmlId,e.parentXmlId)},{label:`Delete from project`,onClick:()=>E(e.division,e.parentXmlId),danger:!0}],isLatex:e.division.sourceFormat===`latex`},e.division.xmlId))]}),v.length>0&&(0,t.jsxs)(`div`,{className:`pretext-plus-editor__toc-orphans`,children:[(0,t.jsx)(`div`,{className:`pretext-plus-editor__toc-orphans-heading`,children:`Unplaced divisions`}),(0,t.jsx)(`ul`,{className:`pretext-plus-editor__toc-list`,children:v.map(e=>{let i=r?A6(r,e.xmlId):[],s=new Set(i.map(e=>e.parentXmlId).filter(Boolean));return(0,t.jsxs)(n.Fragment,{children:[(0,t.jsx)(O3,{division:e,depth:0,isActive:a===e.xmlId,hasChildren:s.has(e.xmlId),isExpanded:x(e.xmlId),onToggleExpand:()=>S(e.xmlId),editDraft:m===e.xmlId?h:null,onSelect:()=>o(e.xmlId),onDraftChange:d,onEditCommit:f,onEditCancel:p,menuItems:[{label:`Edit properties`,onClick:()=>u(e)},{label:`Place in document`,onClick:()=>O(e)},{label:`Insert at cursor`,onClick:()=>D(e)},{label:`Delete from project`,onClick:()=>E(e,null),danger:!0}],isLatex:e.sourceFormat===`latex`}),x(e.xmlId)&&i.map(e=>(0,t.jsx)(O3,{division:e.division,depth:e.depth+1,isActive:a===e.division.xmlId,hasChildren:s.has(e.division.xmlId),isExpanded:x(e.division.xmlId),onToggleExpand:()=>S(e.division.xmlId),editDraft:m===e.division.xmlId?h:null,onSelect:()=>o(e.division.xmlId),onDraftChange:d,onEditCommit:f,onEditCancel:p,menuItems:[{label:`Edit properties`,onClick:()=>u(e.division)},{label:`Insert at cursor`,onClick:()=>D(e.division)},{label:`Delete from project`,onClick:()=>E(e.division,e.parentXmlId),danger:!0}],isLatex:e.division.sourceFormat===`latex`},e.division.xmlId))]},e.xmlId)})})]}),e&&(0,t.jsx)(`button`,{type:`button`,className:`pretext-plus-editor__toc-assets-btn`,onClick:e,children:`Manage Assets`})]})},R6=({isCollapsed:e,onToggleCollapse:n,onOpenAssetPicker:r})=>e?(0,t.jsx)(`div`,{className:`pretext-plus-editor__toc pretext-plus-editor__toc--collapsed`,children:(0,t.jsx)(`button`,{type:`button`,className:`pretext-plus-editor__toc-toggle`,onClick:n,"aria-label":`Expand table of contents`,title:`Expand table of contents`,children:`☰`})}):(0,t.jsxs)(`div`,{className:`pretext-plus-editor__toc`,children:[(0,t.jsxs)(`div`,{className:`pretext-plus-editor__toc-header`,children:[(0,t.jsx)(`span`,{className:`pretext-plus-editor__toc-heading`,children:`Contents`}),(0,t.jsx)(`div`,{className:`pretext-plus-editor__toc-header-actions`,children:(0,t.jsx)(`button`,{type:`button`,className:`pretext-plus-editor__toc-toggle`,onClick:n,"aria-label":`Collapse table of contents`,title:`Collapse table of contents`,children:`✕`})})]}),(0,t.jsx)(L6,{onOpenAssetPicker:r})]}),z6=class extends n.Component{state={error:null};static getDerivedStateFromError(e){return{error:e}}componentDidCatch(e,t){this.props.onError?.(e,t),console.error(`ErrorBoundary caught an error:`,e,t)}componentDidUpdate(e){if(this.state.error===null)return;let{resetKeys:t}=this.props,n=e.resetKeys;t&&n&&(t.length!==n.length||t.some((e,t)=>!Object.is(e,n[t])))&&this.reset()}reset=()=>{this.setState({error:null})};render(){let{error:e}=this.state;return e===null?this.props.children:this.props.fallback?this.props.fallback(e,this.reset):(0,t.jsxs)(`div`,{className:`pretext-plus-editor__error-boundary`,role:`alert`,children:[(0,t.jsx)(`strong`,{children:`Something went wrong rendering this view.`}),(0,t.jsx)(`p`,{className:`pretext-plus-editor__error-boundary-detail`,children:e.message}),(0,t.jsx)(`button`,{type:`button`,className:`pretext-plus-editor__error-boundary-retry`,onClick:this.reset,children:`Try again`})]})}};function B6(e){let t=()=>{},n={cbs:{selectDivision:t,addDivision:t,removeDivision:t,updateDivision:t,divisionContentChange:t,handleDivisionContentChange:t,assetInsert:t,updateTitle:t}};return{store:J4()((t,r)=>({source:e.source,sourceFormat:e.sourceFormat,projectAssets:void 0,libraryAssets:void 0,title:e.title,docinfo:e.docinfo,commonDocinfo:e.commonDocinfo,useCommonDocinfo:e.useCommonDocinfo,projectType:e.projectType,projectUrl:void 0,divisions:e.divisions,rootDivisionId:void 0,activeDivisionId:e.activeDivisionId,canConvertToPretext:!0,activeEditorSource:e.source,hasFeedback:!1,isTocCollapsed:!1,showFullPreview:!0,isNarrowScreen:typeof window<`u`?window.innerWidth<800:!1,activeTab:`editor`,isLatexDialogOpen:!1,isConvertDialogOpen:!1,isDocinfoEditorOpen:!1,isAssetPickerOpen:!1,editingId:null,editDraft:null,syncState:e=>t(e),applyExternalUpdate:e=>t(e),setDivisionContent:(e,n)=>t(t=>{if(!t.divisions)return{};let r=!1,i=t.divisions.map(t=>t.xmlId===e&&t.content!==n?(r=!0,{...t,content:n}):t);return r?{divisions:i}:{}}),patchDivision:(e,n)=>t(t=>t.divisions?{divisions:t.divisions.map(t=>t.xmlId===e?{...t,...n.title!==void 0&&{title:n.title},...n.type!==void 0&&{type:n.type},...n.xmlId!=null&&{xmlId:n.xmlId},...n.sourceFormat!==void 0&&{sourceFormat:n.sourceFormat}}:t)}:{}),addDivisionToPool:e=>t(t=>{let n=t.divisions??[];return n.some(t=>t.xmlId===e.xmlId)?{}:{divisions:[...n,e]}}),removeDivisionFromPool:e=>t(t=>({divisions:(t.divisions??[]).filter(t=>t.xmlId!==e)})),setActiveDivisionId:e=>t({activeDivisionId:e}),setTitle:e=>t({title:e}),setDocinfo:({docinfo:e,commonDocinfo:n,useCommonDocinfo:r})=>t({docinfo:e,commonDocinfo:n,useCommonDocinfo:r}),setShowFullPreview:e=>t({showFullPreview:e}),setActiveTab:e=>t({activeTab:e}),setIsNarrowScreen:e=>t({isNarrowScreen:e}),setIsTocCollapsed:e=>t(t=>({isTocCollapsed:typeof e==`function`?e(t.isTocCollapsed):e})),openModal:e=>t({[e]:!0}),closeModal:e=>t({[e]:!1}),selectSection:e=>n.cbs.selectDivision(e),addSection:e=>n.cbs.addDivision(e),removeSection:e=>n.cbs.removeDivision(e),updateSection:(e,t)=>n.cbs.updateDivision(e,t),divisionContentChange:(e,t)=>n.cbs.divisionContentChange?.(e,t),startSectionEdit:e=>{let{xmlId:n,label:r}=p6(e.content);t({editingId:e.xmlId,editDraft:{title:e.title,type:e.type,xmlId:n,label:r}})},setEditDraft:e=>t({editDraft:e}),commitSectionEdit:()=>{let{editingId:e,editDraft:i}=r();e&&i&&n.cbs.updateDivision(e,{title:i.title.trim()||void 0,type:i.type,xmlId:i.xmlId.trim()||null,label:i.label.trim()||null}),t({editingId:null,editDraft:null})},cancelSectionEdit:()=>t({editingId:null,editDraft:null}),insertAsset:e=>n.cbs.assetInsert(e),insertAtCursor:e=>n.cbs.insertContentAtCursor?.(e),updateTitle:e=>n.cbs.updateTitle(e),feedbackSubmit:e=>n.cbs.feedbackSubmit?.(e)})),bindCallbacks:e=>{n.cbs=e}}}function V6({store:e,children:n}){return(0,t.jsx)(Z4.Provider,{value:e,children:n})}var H6=(e,t)=>e.find(e=>t?e.xmlId===t:e.type===`book`||e.type===`article`||e.type===`slideshow`)??e[0]??null,U6=e=>{let[r]=(0,n.useState)(()=>{let t=H6(e.divisions,e.rootDivisionId),n=e.activeDivisionId??t?.xmlId??null,r=e.divisions.find(e=>e.xmlId===n)??t;return B6({source:r?.content??``,sourceFormat:r?.sourceFormat??`pretext`,title:e.title??`Document Title`,docinfo:e.docinfo??``,commonDocinfo:e.commonDocinfo??``,useCommonDocinfo:e.useCommonDocinfo??!1,projectType:e.projectType,divisions:e.divisions,activeDivisionId:n})});return(0,t.jsx)(V6,{store:r.store,children:(0,t.jsx)(W6,{...e,bindCallbacks:r.bindCallbacks})})},W6=e=>{let{bindCallbacks:r}=e,i=Q4(e=>e.showFullPreview),a=Q4(e=>e.isNarrowScreen),o=Q4(e=>e.setIsNarrowScreen),s=Q4(e=>e.activeTab),c=Q4(e=>e.setActiveTab),l=Q4(e=>e.isTocCollapsed),u=Q4(e=>e.setIsTocCollapsed),d=Q4(e=>e.isLatexDialogOpen),f=Q4(e=>e.isConvertDialogOpen),p=Q4(e=>e.isDocinfoEditorOpen),m=Q4(e=>e.isAssetPickerOpen),h=Q4(e=>e.openModal),g=Q4(e=>e.closeModal),_=Q4(e=>e.syncState),v=Q4(e=>e.divisions)??[],y=Q4(e=>e.activeDivisionId),b=Q4(e=>e.title),x=Q4(e=>e.docinfo),S=Q4(e=>e.commonDocinfo),C=Q4(e=>e.useCommonDocinfo),w=Q4(e=>e.applyExternalUpdate),T=Q4(e=>e.setDivisionContent),E=Q4(e=>e.patchDivision),D=Q4(e=>e.addDivisionToPool),O=Q4(e=>e.removeDivisionFromPool),k=Q4(e=>e.setActiveDivisionId),A=Q4(e=>e.setTitle),j=Q4(e=>e.setDocinfo),ee=(0,n.useRef)(null),te=(0,n.useRef)(null),ne=H6(v,e.rootDivisionId),re=v.find(e=>e.xmlId===y)??v[0]??null,M=re?.sourceFormat??`pretext`,ie=re?.content??``,ae=(t,n,r,i)=>{T(t,n),e.onContentChange({xmlId:t,sourceContent:n,sourceFormat:r,pretextSource:r===`pretext`?n:void 0,...i})},oe=(t,n)=>{E(t,n),e.onDivisionUpdate?.(t,n)},N=t=>{D(t),e.onDivisionAdd?.(t)},se=t=>{O(t),e.onDivisionRemove?.(t)},P=t=>{k(t),e.onDivisionSelect?.(t)},ce=(0,n.useMemo)(()=>{if(!re||M===`pretext`)return;let e=W4(ie,M);return e.pretextError?void 0:e.pretextSource},[re,M,ie]),le=e=>{if(!re)return;let t=M===`pretext`?D6(e||``):e||``;if(t===re.content)return;if(ae(re.xmlId,t,M),M===`pretext`){let e=m6(t);if(e){oe(re.xmlId,{title:e.title,type:e.type,xmlId:e.xmlId||null,label:e.label||null});let t=e.xmlId||re.xmlId;if(t!==re.xmlId||e.type!==re.type){let n=T6(v,re.xmlId);if(n){let r=w6(n.content,re.xmlId,t,e.type);r!==n.content&&ae(n.xmlId,r,n.sourceFormat)}}e.xmlId&&e.xmlId!==re.xmlId&&P(e.xmlId)}}else if(M===`latex`&&re.type===`section`){let e=c6(t);e!==null&&oe(re.xmlId,{title:e})}let n=new Set(v.map(e=>e.xmlId));for(let{xmlId:e,type:r}of y6(t))n.has(e)||(N(b6(e,r,M)),n.add(e))},ue=e=>{P(e)},de=()=>{let e=Q3();N(e),k(e.xmlId)},F=e=>e.ref?`<plus:${e.kind} ref="${e.ref}"/>`:``,fe=t=>{let n=F(t);n&&te.current?.insertAtCursor(n),e.onAssetInsert?.(t)};(0,n.useEffect)(()=>{let e=()=>o(window.innerWidth<800);return window.addEventListener(`resize`,e),()=>window.removeEventListener(`resize`,e)},[o]);let pe=M!==`pretext`;(0,n.useLayoutEffect)(()=>{r({selectDivision:ue,addDivision:()=>de(),removeDivision:e=>se(e),updateDivision:(e,t)=>oe(e,t),divisionContentChange:(e,t)=>{ae(e,t,v.find(t=>t.xmlId===e)?.sourceFormat??`pretext`)},handleDivisionContentChange:le,assetInsert:fe,insertContentAtCursor:e=>te.current?.insertAtCursor(e),updateTitle:t=>{A(t),e.onTitleChange?.(t)},feedbackSubmit:e.onFeedbackSubmit})}),(0,n.useEffect)(()=>{_({source:ie,sourceFormat:M,projectAssets:e.projectAssets,libraryAssets:e.libraryAssets,projectType:e.projectType,projectUrl:e.projectUrl,rootDivisionId:ne?.xmlId,canConvertToPretext:ce!==void 0,activeEditorSource:ie,hasFeedback:e.onFeedbackSubmit!==void 0})});let me=(0,n.useRef)({divisions:e.divisions,title:e.title,docinfo:e.docinfo,commonDocinfo:e.commonDocinfo,useCommonDocinfo:e.useCommonDocinfo,activeDivisionId:e.activeDivisionId});(0,n.useEffect)(()=>{let t=me.current,n={},r=!1;if(e.divisions!==t.divisions){n.divisions=e.divisions;let t=H6(e.divisions,e.rootDivisionId);(y==null||!e.divisions.some(e=>e.xmlId===y))&&(n.activeDivisionId=t?.xmlId??null),r=!0}e.title!==void 0&&e.title!==t.title&&(n.title=e.title,r=!0),e.docinfo!==void 0&&e.docinfo!==t.docinfo&&(n.docinfo=e.docinfo,r=!0),e.commonDocinfo!==void 0&&e.commonDocinfo!==t.commonDocinfo&&(n.commonDocinfo=e.commonDocinfo,r=!0),e.useCommonDocinfo!==void 0&&e.useCommonDocinfo!==t.useCommonDocinfo&&(n.useCommonDocinfo=e.useCommonDocinfo,r=!0),e.activeDivisionId!==void 0&&e.activeDivisionId!==t.activeDivisionId&&(n.activeDivisionId=e.activeDivisionId,r=!0),r&&w(n),me.current={divisions:e.divisions,title:e.title,docinfo:e.docinfo,commonDocinfo:e.commonDocinfo,useCommonDocinfo:e.useCommonDocinfo,activeDivisionId:e.activeDivisionId}});let he=C?S:x,ge=re?M===`pretext`?re.content:ce===void 0?void 0:`<${re.type} xml:id="${re.xmlId}">\n<title>${re.title}</title>\n\n${ce}\n</${re.type}>`:void 0,I=re&&ge!==void 0?I6(re.type,ge,he):void 0,_e=()=>ee.current?.rebuild(),ve=()=>{e.onSave?.(),ee.current?.rebuild()},ye=t=>{let n=t.ctrlKey||t.metaKey;n&&t.key===`Enter`&&e.onPreviewRebuild?(t.preventDefault(),_e()):n&&t.key===`s`&&(t.preventDefault(),ve())},be=()=>{if(!re||!ce)return;let e=Q3(),t=D6(n6(ce,re.type));N({id:e.xmlId,xmlId:e.xmlId,title:re.title,type:re.type,sourceFormat:`pretext`,content:t})},xe=(0,t.jsx)(Ps,{ref:te,content:ie,sourceFormat:M,onChange:le,onRebuild:e.onPreviewRebuild?_e:void 0,onSave:ve,onOpenLatexImport:()=>h(`isLatexDialogOpen`),onOpenDocinfoEditor:()=>h(`isDocinfoEditorOpen`),onOpenConvertToPretext:pe&&ce!==void 0?()=>h(`isConvertDialogOpen`):void 0,canConvertToPretext:ce!==void 0,onOpenAssets:e.projectAssets!==void 0&&M===`pretext`?()=>h(`isAssetPickerOpen`):void 0}),Se;Se=i&&e.onPreviewRebuild?(0,t.jsx)($L,{ref:ee,content:I||``,title:b,onRebuild:e.onPreviewRebuild}):(0,t.jsx)(XL,{content:ie,canEdit:M===`pretext`,editDisabledReason:M===`markdown`?`Visual editing is not available for Markdown documents.`:M===`latex`?`Visual editing is not available for LaTeX documents.`:``,onChange:e=>le(e)});let Ce=(0,t.jsx)(R6,{isCollapsed:l,onToggleCollapse:()=>u(e=>!e),onOpenAssetPicker:e.projectAssets===void 0?void 0:()=>h(`isAssetPickerOpen`)}),L=`pretext-plus-tab-editor`,we=`pretext-plus-tab-preview`,Te=`pretext-plus-tabpanel`,Ee=a&&Ce?(0,t.jsx)(`div`,{className:`pretext-plus-editor__toc-drawer`,children:l?(0,t.jsx)(`button`,{type:`button`,className:`pretext-plus-editor__toc-drawer-toggle`,onClick:()=>u(!1),children:`☰ Contents`}):(0,t.jsx)(`div`,{className:`pretext-plus-editor__toc-drawer-open`,children:Ce})}):null,R;return R=a?(0,t.jsxs)(`div`,{className:`pretext-plus-editor__tabs`,children:[Ee,(0,t.jsxs)(`div`,{className:`pretext-plus-editor__tab-list`,role:`tablist`,children:[(0,t.jsx)(`button`,{type:`button`,id:L,role:`tab`,"aria-controls":Te,"aria-selected":s===`editor`,tabIndex:s===`editor`?0:-1,className:`pretext-plus-editor__tab-button ${s===`editor`?`is-active`:``}`,onClick:()=>c(`editor`),children:`Editor`}),(0,t.jsx)(`button`,{type:`button`,id:we,role:`tab`,"aria-controls":Te,"aria-selected":s===`preview`,tabIndex:s===`preview`?0:-1,className:`pretext-plus-editor__tab-button ${s===`preview`?`is-active`:``}`,onClick:()=>c(`preview`),children:`Preview`})]}),(0,t.jsx)(`div`,{id:Te,className:`pretext-plus-editor__tab-panel`,role:`tabpanel`,"aria-labelledby":s===`editor`?L:we,children:(0,t.jsx)(`div`,{style:{height:`100%`},children:s===`editor`?xe:Se})})]}):(0,t.jsxs)(`div`,{className:`pretext-plus-editor__sectioned-layout`,children:[Ce,(0,t.jsxs)(gt,{orientation:`horizontal`,className:`pretext-plus-editor__splitter`,children:[(0,t.jsx)(yt,{className:`pretext-plus-editor__editor-panel`,children:xe}),(0,t.jsx)(St,{className:`pretext-plus-editor__resize-handle`,children:(0,t.jsx)(`div`,{className:`pretext-plus-editor__resize-dots`})}),(0,t.jsx)(yt,{className:`pretext-plus-editor__preview-panel`,children:Se})]})]}),(0,t.jsxs)(`div`,{className:`pretext-plus-editor`,onKeyDown:ye,children:[(0,t.jsx)(S3,{onSaveButton:e.onSaveButton,saveButtonLabel:e.saveButtonLabel,onCancelButton:e.onCancelButton,cancelButtonLabel:e.cancelButtonLabel,showPreviewModeToggle:e.onPreviewRebuild!==void 0}),(0,t.jsxs)(`div`,{className:`pretext-plus-editor__editor-displays`,children:[(0,t.jsx)(z6,{resetKeys:[ie,y],children:R}),d?(0,t.jsx)(e3,{onClose:()=>g(`isLatexDialogOpen`)}):null,f&&re&&ce?(0,t.jsx)(i3,{sourceContent:ie,sourceFormat:M,pretextSource:ce,onConfirm:be,onClose:()=>g(`isConvertDialogOpen`)}):null,p?(0,t.jsx)(g3,{docinfo:x,showCommonDocinfoControls:!0,commonDocinfo:S,initialUseCommonDocinfo:C,onClose:t=>{if(g(`isDocinfoEditorOpen`),t!==void 0){j({docinfo:t.docinfo,commonDocinfo:t.commonDocinfo,useCommonDocinfo:t.useCommonDocinfo}),e.onCommonDocinfoChange?.(t.commonDocinfo),e.onUseCommonDocinfoChange?.(t.useCommonDocinfo);let n=ne??re;ae(n?.xmlId??``,n?.content??``,n?.sourceFormat??`pretext`,{docinfo:t.docinfo,commonDocinfo:t.commonDocinfo,useCommonDocinfo:t.useCommonDocinfo})}}}):null,m&&e.projectAssets!==void 0?(0,t.jsx)(x3,{open:m,onClose:()=>g(`isAssetPickerOpen`),onLoadAssets:e.onLoadAssets,onLoadLibraryAssets:e.onLoadLibraryAssets,onAddFromLibrary:e.onAssetAddFromLibrary,onUpload:e.onAssetUpload,onAddUrl:e.onAssetAddUrl,onCreateDoenet:e.onCreateDoenet,onRemoveAsset:e.onAssetRemove,onInsert:fe}):null]})]})};e.CodeEditor=Ps,e.DocinfoEditor=g3,e.Editors=U6,e.FeedbackLink=K4,e.FullPreview=$L,e.VisualEditor=XL,e.assembleProjectSource=N6,e.buildDivisionTree=A6,e.convertLatexToPretext=V4,e.createConclusion=e6,e.createIntroduction=$3,e.createLatexConclusion=d6,e.createLatexIntroduction=u6,e.createNewLatexSection=l6,e.createNewSection=Q3,e.derivePretextContent=W4,e.detectSourceFormat=B4,e.ensureLatexSectionWrapper=o6,e.ensureSectionWrapper=r6,e.extractDivisionMetadata=m6,e.extractLatexDivisionTitle=c6,e.findDivisionParent=T6,e.getOrphanRoots=j6,e.getOrphanedDivisions=k6,e.getSectionAttributes=p6,e.insertDivisionRef=x6,e.mergeTwoSections=f6,e.moveDivisionRef=C6,e.normalizeSelfClosingRefs=D6,e.parseDivisionRefs=v6,e.postToIframe=QL,e.removeDivisionRef=S6,e.renameDivisionRef=w6,e.reorderDivisionRefs=E6,e.rewrapLatexSection=a6,e.rewrapSection=n6,e.stripLatexSectionWrapper=i6,e.stripSectionWrapper=t6,e.updateDivisionTitle=Z3,e.updateLatexSectionTitle=s6,e.updateSectionMetadata=h6,e.wrapDivisionForPreview=I6});
|
|
1083
|
+
`+a.slice(o)}function w6(e,t,n,r){let i=new RegExp(_6(t));return i.test(e)?e.replace(i,`<plus:${r} ref="${n}"/>`):e}function T6(e,t){let n=new RegExp(_6(t));return e.find(e=>n.test(e.content))??null}function E6(e,t){let n=e,r=null;for(let e of t)n=C6(n,e,r),r=e;return n}function D6(e){return e.replace(/<plus:([a-z-]+)((?:\s[^>]*?)?)>\s*<\/plus:\1>/g,(e,t,n)=>`<plus:${t}${n}/>`)}function O6(e,t){let n=new Set,r=[t];for(;r.length>0;){let t=r.pop();if(n.has(t))continue;n.add(t);let i=e.find(e=>e.xmlId===t);if(i)for(let e of v6(i.content))r.push(e)}return n}function k6(e,t){let n=O6(e,t);return e.filter(e=>!n.has(e.xmlId))}function A6(e,t){let n=[],r=new Set([t]),i=(t,a)=>{let o=e.find(e=>e.xmlId===t);if(o)for(let s of v6(o.content)){if(r.has(s))continue;let o=e.find(e=>e.xmlId===s);o&&(r.add(s),n.push({division:o,depth:a,parentXmlId:t}),i(s,a+1))}};return i(t,0),n}function j6(e,t){let n=k6(e,t),r=new Set(n.map(e=>e.xmlId)),i=new Set;for(let e of n)for(let t of v6(e.content))r.has(t)&&i.add(t);return n.filter(e=>!i.has(e.xmlId))}function M6(e,t,n){let r=t.find(t=>t.xmlId===e);if(!r)return`<!-- missing division: ${e} -->`;if(n.has(e))return`<!-- circular reference: ${e} -->`;let i;if(r.sourceFormat===`pretext`)i=r.content;else{let{pretextSource:e,pretextError:t}=W4(r.sourceFormat===`latex`?i6(r.content,r.type):t6(r.content),r.sourceFormat),n=e??`<!-- conversion error: ${t} -->`;i=`<${r.type} xml:id="${r.xmlId}">\n<title>${r.title}</title>\n\n${n}\n</${r.type}>`}if(r.sourceFormat!==`pretext`)return i;let a=new Set(n).add(e);return i.replace(/<plus:[a-z-]+\s[^>]*ref="([^"]+)"[^>]*?(?:\/>|>\s*<\/plus:[a-z-]+>)/g,(e,n)=>M6(n,t,a))}function N6(e,t){return M6(t,e,new Set)}var P6=new Set([`part`,`chapter`]),F6=new Set([`book`,`article`,`slideshow`]);function I6(e,t,n,r){let i=F6.has(e)?t:P6.has(e)?`<book label="preview">\n<title>${r}</title>\n${t}\n</book>`:`<article label="preview">\n<title>${r}</title>\n${t}\n</article>`;return`<pretext>\n${n.trim()?`${n.trim()}\n`:``}${i}\n</pretext>`}var L6=({onOpenAssetPicker:e})=>{let r=Q4(e=>e.divisions),i=Q4(e=>e.rootDivisionId),a=Q4(e=>e.activeDivisionId),o=Q4(e=>e.selectSection),s=Q4(e=>e.removeSection),c=Q4(e=>e.divisionContentChange),l=Q4(e=>e.insertAtCursor),u=Q4(e=>e.startSectionEdit),d=Q4(e=>e.setEditDraft),f=Q4(e=>e.commitSectionEdit),p=Q4(e=>e.cancelSectionEdit),m=Q4(e=>e.editingId),h=Q4(e=>e.editDraft),g=r?r.find(e=>e.xmlId===i)??r.find(e=>e.type===`book`||e.type===`article`||e.type===`slideshow`)??r[0]??null:null,_=g&&r?A6(r,g.xmlId):[],v=g&&r?j6(r,g.xmlId):[],[y,b]=(0,n.useState)(new Set),x=e=>!y.has(e),S=e=>{b(t=>{let n=new Set(t);return n.has(e)?n.delete(e):n.add(e),n})};(0,n.useEffect)(()=>{if(!a||!g)return;let e=new Map(_.map(e=>[e.division.xmlId,e])),t=new Set;t.add(g.xmlId);let n=a;for(;n;){let r=e.get(n);if(!r?.parentXmlId)break;t.add(r.parentXmlId),n=r.parentXmlId}b(e=>{if([...t].every(t=>!e.has(t)))return e;let n=new Set(e);return t.forEach(e=>n.delete(e)),n})},[a]);let C=new Set(_.map(e=>e.parentXmlId).filter(Boolean)),w=[];if(g){let e=new Set;x(g.xmlId)&&e.add(g.xmlId);for(let t of _)t.parentXmlId&&e.has(t.parentXmlId)&&(w.push(t),x(t.division.xmlId)&&e.add(t.division.xmlId))}let T=(e,t)=>{if(!r)return;let n=r.find(e=>e.xmlId===t);n&&c(n.xmlId,D6(S6(n.content,e)))},E=(e,t)=>{if(window.confirm(`Delete "${e.title||`Untitled`}"? This permanently removes the division.`)){if(t&&r){let n=r.find(e=>e.xmlId===t);n&&c(n.xmlId,D6(S6(n.content,e.xmlId)))}s(e.xmlId)}},D=e=>{l(`<plus:${e.type} ref="${e.xmlId}"/>`)},O=e=>{g&&c(g.xmlId,D6(x6(g.content,e.xmlId,e.type,null)))};return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsxs)(`ul`,{className:`pretext-plus-editor__toc-list`,role:`list`,children:[g&&(0,t.jsx)(O3,{division:g,depth:0,isActive:a===g.xmlId,hasChildren:C.has(g.xmlId),isExpanded:x(g.xmlId),onToggleExpand:()=>S(g.xmlId),editDraft:m===g.xmlId?h:null,onSelect:()=>o(g.xmlId),onDraftChange:d,onEditCommit:f,onEditCancel:p,menuItems:[{label:`Edit properties`,onClick:()=>u(g)}],isLatex:g.sourceFormat===`latex`,isRoot:!0}),w.length===0&&g&&x(g.xmlId)&&(0,t.jsx)(`li`,{className:`pretext-plus-editor__toc-no-sections`,children:(0,t.jsx)(`span`,{children:`No placed divisions`})}),w.map(e=>(0,t.jsx)(O3,{division:e.division,depth:e.depth+1,isActive:a===e.division.xmlId,hasChildren:C.has(e.division.xmlId),isExpanded:x(e.division.xmlId),onToggleExpand:()=>S(e.division.xmlId),editDraft:m===e.division.xmlId?h:null,onSelect:()=>o(e.division.xmlId),onDraftChange:d,onEditCommit:f,onEditCancel:p,menuItems:[{label:`Edit properties`,onClick:()=>u(e.division)},{label:`Remove from document`,onClick:()=>T(e.division.xmlId,e.parentXmlId)},{label:`Delete from project`,onClick:()=>E(e.division,e.parentXmlId),danger:!0}],isLatex:e.division.sourceFormat===`latex`},e.division.xmlId))]}),v.length>0&&(0,t.jsxs)(`div`,{className:`pretext-plus-editor__toc-orphans`,children:[(0,t.jsx)(`div`,{className:`pretext-plus-editor__toc-orphans-heading`,children:`Unplaced divisions`}),(0,t.jsx)(`ul`,{className:`pretext-plus-editor__toc-list`,children:v.map(e=>{let i=r?A6(r,e.xmlId):[],s=new Set(i.map(e=>e.parentXmlId).filter(Boolean));return(0,t.jsxs)(n.Fragment,{children:[(0,t.jsx)(O3,{division:e,depth:0,isActive:a===e.xmlId,hasChildren:s.has(e.xmlId),isExpanded:x(e.xmlId),onToggleExpand:()=>S(e.xmlId),editDraft:m===e.xmlId?h:null,onSelect:()=>o(e.xmlId),onDraftChange:d,onEditCommit:f,onEditCancel:p,menuItems:[{label:`Edit properties`,onClick:()=>u(e)},{label:`Place in document`,onClick:()=>O(e)},{label:`Insert at cursor`,onClick:()=>D(e)},{label:`Delete from project`,onClick:()=>E(e,null),danger:!0}],isLatex:e.sourceFormat===`latex`}),x(e.xmlId)&&i.map(e=>(0,t.jsx)(O3,{division:e.division,depth:e.depth+1,isActive:a===e.division.xmlId,hasChildren:s.has(e.division.xmlId),isExpanded:x(e.division.xmlId),onToggleExpand:()=>S(e.division.xmlId),editDraft:m===e.division.xmlId?h:null,onSelect:()=>o(e.division.xmlId),onDraftChange:d,onEditCommit:f,onEditCancel:p,menuItems:[{label:`Edit properties`,onClick:()=>u(e.division)},{label:`Insert at cursor`,onClick:()=>D(e.division)},{label:`Delete from project`,onClick:()=>E(e.division,e.parentXmlId),danger:!0}],isLatex:e.division.sourceFormat===`latex`},e.division.xmlId))]},e.xmlId)})})]}),e&&(0,t.jsx)(`button`,{type:`button`,className:`pretext-plus-editor__toc-assets-btn`,onClick:e,children:`Manage Assets`})]})},R6=({isCollapsed:e,onToggleCollapse:n,onOpenAssetPicker:r})=>e?(0,t.jsx)(`div`,{className:`pretext-plus-editor__toc pretext-plus-editor__toc--collapsed`,children:(0,t.jsx)(`button`,{type:`button`,className:`pretext-plus-editor__toc-toggle`,onClick:n,"aria-label":`Expand table of contents`,title:`Expand table of contents`,children:`☰`})}):(0,t.jsxs)(`div`,{className:`pretext-plus-editor__toc`,children:[(0,t.jsxs)(`div`,{className:`pretext-plus-editor__toc-header`,children:[(0,t.jsx)(`span`,{className:`pretext-plus-editor__toc-heading`,children:`Contents`}),(0,t.jsx)(`div`,{className:`pretext-plus-editor__toc-header-actions`,children:(0,t.jsx)(`button`,{type:`button`,className:`pretext-plus-editor__toc-toggle`,onClick:n,"aria-label":`Collapse table of contents`,title:`Collapse table of contents`,children:`✕`})})]}),(0,t.jsx)(L6,{onOpenAssetPicker:r})]}),z6=class extends n.Component{state={error:null};static getDerivedStateFromError(e){return{error:e}}componentDidCatch(e,t){this.props.onError?.(e,t),console.error(`ErrorBoundary caught an error:`,e,t)}componentDidUpdate(e){if(this.state.error===null)return;let{resetKeys:t}=this.props,n=e.resetKeys;t&&n&&(t.length!==n.length||t.some((e,t)=>!Object.is(e,n[t])))&&this.reset()}reset=()=>{this.setState({error:null})};render(){let{error:e}=this.state;return e===null?this.props.children:this.props.fallback?this.props.fallback(e,this.reset):(0,t.jsxs)(`div`,{className:`pretext-plus-editor__error-boundary`,role:`alert`,children:[(0,t.jsx)(`strong`,{children:`Something went wrong rendering this view.`}),(0,t.jsx)(`p`,{className:`pretext-plus-editor__error-boundary-detail`,children:e.message}),(0,t.jsx)(`button`,{type:`button`,className:`pretext-plus-editor__error-boundary-retry`,onClick:this.reset,children:`Try again`})]})}};function B6(e){let t=()=>{},n={cbs:{selectDivision:t,addDivision:t,removeDivision:t,updateDivision:t,divisionContentChange:t,handleDivisionContentChange:t,assetInsert:t,updateTitle:t}};return{store:J4()((t,r)=>({source:e.source,sourceFormat:e.sourceFormat,projectAssets:void 0,libraryAssets:void 0,title:e.title,docinfo:e.docinfo,commonDocinfo:e.commonDocinfo,useCommonDocinfo:e.useCommonDocinfo,projectType:e.projectType,projectUrl:void 0,divisions:e.divisions,rootDivisionId:void 0,activeDivisionId:e.activeDivisionId,canConvertToPretext:!0,activeEditorSource:e.source,hasFeedback:!1,isTocCollapsed:!1,showFullPreview:!0,isNarrowScreen:typeof window<`u`?window.innerWidth<800:!1,activeTab:`editor`,isLatexDialogOpen:!1,isConvertDialogOpen:!1,isDocinfoEditorOpen:!1,isAssetPickerOpen:!1,editingId:null,editDraft:null,syncState:e=>t(e),applyExternalUpdate:e=>t(e),setDivisionContent:(e,n)=>t(t=>{if(!t.divisions)return{};let r=!1,i=t.divisions.map(t=>t.xmlId===e&&t.content!==n?(r=!0,{...t,content:n}):t);return r?{divisions:i}:{}}),patchDivision:(e,n)=>t(t=>t.divisions?{divisions:t.divisions.map(t=>t.xmlId===e?{...t,...n.title!==void 0&&{title:n.title},...n.type!==void 0&&{type:n.type},...n.xmlId!=null&&{xmlId:n.xmlId},...n.sourceFormat!==void 0&&{sourceFormat:n.sourceFormat}}:t)}:{}),addDivisionToPool:e=>t(t=>{let n=t.divisions??[];return n.some(t=>t.xmlId===e.xmlId)?{}:{divisions:[...n,e]}}),removeDivisionFromPool:e=>t(t=>({divisions:(t.divisions??[]).filter(t=>t.xmlId!==e)})),setActiveDivisionId:e=>t({activeDivisionId:e}),setTitle:e=>t({title:e}),setDocinfo:({docinfo:e,commonDocinfo:n,useCommonDocinfo:r})=>t({docinfo:e,commonDocinfo:n,useCommonDocinfo:r}),setShowFullPreview:e=>t({showFullPreview:e}),setActiveTab:e=>t({activeTab:e}),setIsNarrowScreen:e=>t({isNarrowScreen:e}),setIsTocCollapsed:e=>t(t=>({isTocCollapsed:typeof e==`function`?e(t.isTocCollapsed):e})),openModal:e=>t({[e]:!0}),closeModal:e=>t({[e]:!1}),selectSection:e=>n.cbs.selectDivision(e),addSection:e=>n.cbs.addDivision(e),removeSection:e=>n.cbs.removeDivision(e),updateSection:(e,t)=>n.cbs.updateDivision(e,t),divisionContentChange:(e,t)=>n.cbs.divisionContentChange?.(e,t),startSectionEdit:e=>{let{xmlId:n,label:r}=p6(e.content);t({editingId:e.xmlId,editDraft:{title:e.title,type:e.type,xmlId:n,label:r}})},setEditDraft:e=>t({editDraft:e}),commitSectionEdit:()=>{let{editingId:e,editDraft:i}=r();e&&i&&n.cbs.updateDivision(e,{title:i.title.trim()||void 0,type:i.type,xmlId:i.xmlId.trim()||null,label:i.label.trim()||null}),t({editingId:null,editDraft:null})},cancelSectionEdit:()=>t({editingId:null,editDraft:null}),insertAsset:e=>n.cbs.assetInsert(e),insertAtCursor:e=>n.cbs.insertContentAtCursor?.(e),updateTitle:e=>n.cbs.updateTitle(e),feedbackSubmit:e=>n.cbs.feedbackSubmit?.(e)})),bindCallbacks:e=>{n.cbs=e}}}function V6({store:e,children:n}){return(0,t.jsx)(Z4.Provider,{value:e,children:n})}var H6=(e,t)=>e.find(e=>t?e.xmlId===t:e.type===`book`||e.type===`article`||e.type===`slideshow`)??e[0]??null,U6=e=>{let[r]=(0,n.useState)(()=>{let t=H6(e.divisions,e.rootDivisionId),n=e.activeDivisionId??t?.xmlId??null,r=e.divisions.find(e=>e.xmlId===n)??t;return B6({source:r?.content??``,sourceFormat:r?.sourceFormat??`pretext`,title:e.title??`Document Title`,docinfo:e.docinfo??``,commonDocinfo:e.commonDocinfo??``,useCommonDocinfo:e.useCommonDocinfo??!1,projectType:e.projectType,divisions:e.divisions,activeDivisionId:n})});return(0,t.jsx)(V6,{store:r.store,children:(0,t.jsx)(W6,{...e,bindCallbacks:r.bindCallbacks})})},W6=e=>{let{bindCallbacks:r}=e,i=Q4(e=>e.showFullPreview),a=Q4(e=>e.isNarrowScreen),o=Q4(e=>e.setIsNarrowScreen),s=Q4(e=>e.activeTab),c=Q4(e=>e.setActiveTab),l=Q4(e=>e.isTocCollapsed),u=Q4(e=>e.setIsTocCollapsed),d=Q4(e=>e.isLatexDialogOpen),f=Q4(e=>e.isConvertDialogOpen),p=Q4(e=>e.isDocinfoEditorOpen),m=Q4(e=>e.isAssetPickerOpen),h=Q4(e=>e.openModal),g=Q4(e=>e.closeModal),_=Q4(e=>e.syncState),v=Q4(e=>e.divisions)??[],y=Q4(e=>e.activeDivisionId),b=Q4(e=>e.title),x=Q4(e=>e.docinfo),S=Q4(e=>e.commonDocinfo),C=Q4(e=>e.useCommonDocinfo),w=Q4(e=>e.applyExternalUpdate),T=Q4(e=>e.setDivisionContent),E=Q4(e=>e.patchDivision),D=Q4(e=>e.addDivisionToPool),O=Q4(e=>e.removeDivisionFromPool),k=Q4(e=>e.setActiveDivisionId),A=Q4(e=>e.setTitle),j=Q4(e=>e.setDocinfo),ee=(0,n.useRef)(null),te=(0,n.useRef)(null),ne=H6(v,e.rootDivisionId),re=v.find(e=>e.xmlId===y)??v[0]??null,M=re?.sourceFormat??`pretext`,ie=re?.content??``,ae=(t,n,r,i)=>{T(t,n),e.onContentChange({xmlId:t,sourceContent:n,sourceFormat:r,pretextSource:r===`pretext`?n:void 0,...i})},oe=(t,n)=>{E(t,n),e.onDivisionUpdate?.(t,n)},N=t=>{D(t),e.onDivisionAdd?.(t)},se=t=>{O(t),e.onDivisionRemove?.(t)},P=t=>{k(t),e.onDivisionSelect?.(t)},ce=(0,n.useMemo)(()=>{if(!re||M===`pretext`)return;let e=W4(ie,M);return e.pretextError?void 0:e.pretextSource},[re,M,ie]),le=e=>{if(!re)return;let t=M===`pretext`?D6(e||``):e||``;if(t===re.content)return;if(ae(re.xmlId,t,M),M===`pretext`){let e=m6(t);if(e){oe(re.xmlId,{title:e.title,type:e.type,xmlId:e.xmlId||null,label:e.label||null});let t=e.xmlId||re.xmlId;if(t!==re.xmlId||e.type!==re.type){let n=T6(v,re.xmlId);if(n){let r=w6(n.content,re.xmlId,t,e.type);r!==n.content&&ae(n.xmlId,r,n.sourceFormat)}}e.xmlId&&e.xmlId!==re.xmlId&&P(e.xmlId)}}else if(M===`latex`&&re.type===`section`){let e=c6(t);e!==null&&oe(re.xmlId,{title:e})}let n=new Set(v.map(e=>e.xmlId));for(let{xmlId:e,type:r}of y6(t))n.has(e)||(N(b6(e,r,M)),n.add(e))},ue=e=>{P(e)},de=()=>{let e=Q3();N(e),k(e.xmlId)},F=e=>e.ref?`<plus:${e.kind} ref="${e.ref}"/>`:``,fe=t=>{let n=F(t);n&&te.current?.insertAtCursor(n),e.onAssetInsert?.(t)};(0,n.useEffect)(()=>{let e=()=>o(window.innerWidth<800);return window.addEventListener(`resize`,e),()=>window.removeEventListener(`resize`,e)},[o]);let pe=M!==`pretext`;(0,n.useLayoutEffect)(()=>{r({selectDivision:ue,addDivision:()=>de(),removeDivision:e=>se(e),updateDivision:(e,t)=>oe(e,t),divisionContentChange:(e,t)=>{ae(e,t,v.find(t=>t.xmlId===e)?.sourceFormat??`pretext`)},handleDivisionContentChange:le,assetInsert:fe,insertContentAtCursor:e=>te.current?.insertAtCursor(e),updateTitle:t=>{A(t),e.onTitleChange?.(t)},feedbackSubmit:e.onFeedbackSubmit})}),(0,n.useEffect)(()=>{_({source:ie,sourceFormat:M,projectAssets:e.projectAssets,libraryAssets:e.libraryAssets,projectType:e.projectType,projectUrl:e.projectUrl,rootDivisionId:ne?.xmlId,canConvertToPretext:ce!==void 0,activeEditorSource:ie,hasFeedback:e.onFeedbackSubmit!==void 0})});let me=(0,n.useRef)({divisions:e.divisions,title:e.title,docinfo:e.docinfo,commonDocinfo:e.commonDocinfo,useCommonDocinfo:e.useCommonDocinfo,activeDivisionId:e.activeDivisionId});(0,n.useEffect)(()=>{let t=me.current,n={},r=!1;if(e.divisions!==t.divisions){n.divisions=e.divisions;let t=H6(e.divisions,e.rootDivisionId);(y==null||!e.divisions.some(e=>e.xmlId===y))&&(n.activeDivisionId=t?.xmlId??null),r=!0}e.title!==void 0&&e.title!==t.title&&(n.title=e.title,r=!0),e.docinfo!==void 0&&e.docinfo!==t.docinfo&&(n.docinfo=e.docinfo,r=!0),e.commonDocinfo!==void 0&&e.commonDocinfo!==t.commonDocinfo&&(n.commonDocinfo=e.commonDocinfo,r=!0),e.useCommonDocinfo!==void 0&&e.useCommonDocinfo!==t.useCommonDocinfo&&(n.useCommonDocinfo=e.useCommonDocinfo,r=!0),e.activeDivisionId!==void 0&&e.activeDivisionId!==t.activeDivisionId&&(n.activeDivisionId=e.activeDivisionId,r=!0),r&&w(n),me.current={divisions:e.divisions,title:e.title,docinfo:e.docinfo,commonDocinfo:e.commonDocinfo,useCommonDocinfo:e.useCommonDocinfo,activeDivisionId:e.activeDivisionId}});let he=C?S:x,ge=re?M===`pretext`?N6(v,re.xmlId):ce===void 0?void 0:`<${re.type} xml:id="${re.xmlId}">\n<title>${re.title}</title>\n\n${ce}\n</${re.type}>`:void 0,I=re&&ge!==void 0?I6(re.type,ge,he,re.title):void 0,_e=()=>ee.current?.rebuild(),ve=()=>{e.onSave?.(),ee.current?.rebuild()},ye=t=>{let n=t.ctrlKey||t.metaKey;n&&t.key===`Enter`&&e.onPreviewRebuild?(t.preventDefault(),_e()):n&&t.key===`s`&&(t.preventDefault(),ve())},be=()=>{if(!re||!ce)return;let e=Q3(),t=D6(n6(ce,re.type));N({id:e.xmlId,xmlId:e.xmlId,title:re.title,type:re.type,sourceFormat:`pretext`,content:t})},xe=(0,t.jsx)(Ps,{ref:te,content:ie,sourceFormat:M,onChange:le,onRebuild:e.onPreviewRebuild?_e:void 0,onSave:ve,onOpenLatexImport:()=>h(`isLatexDialogOpen`),onOpenDocinfoEditor:()=>h(`isDocinfoEditorOpen`),onOpenConvertToPretext:pe&&ce!==void 0?()=>h(`isConvertDialogOpen`):void 0,canConvertToPretext:ce!==void 0,onOpenAssets:e.projectAssets!==void 0&&M===`pretext`?()=>h(`isAssetPickerOpen`):void 0}),Se;Se=i&&e.onPreviewRebuild?(0,t.jsx)($L,{ref:ee,content:I||``,title:b,onRebuild:e.onPreviewRebuild}):(0,t.jsx)(XL,{content:ie,canEdit:M===`pretext`,editDisabledReason:M===`markdown`?`Visual editing is not available for Markdown documents.`:M===`latex`?`Visual editing is not available for LaTeX documents.`:``,onChange:e=>le(e)});let Ce=(0,t.jsx)(R6,{isCollapsed:l,onToggleCollapse:()=>u(e=>!e),onOpenAssetPicker:e.projectAssets===void 0?void 0:()=>h(`isAssetPickerOpen`)}),L=`pretext-plus-tab-editor`,we=`pretext-plus-tab-preview`,Te=`pretext-plus-tabpanel`,Ee=a&&Ce?(0,t.jsx)(`div`,{className:`pretext-plus-editor__toc-drawer`,children:l?(0,t.jsx)(`button`,{type:`button`,className:`pretext-plus-editor__toc-drawer-toggle`,onClick:()=>u(!1),children:`☰ Contents`}):(0,t.jsx)(`div`,{className:`pretext-plus-editor__toc-drawer-open`,children:Ce})}):null,R;return R=a?(0,t.jsxs)(`div`,{className:`pretext-plus-editor__tabs`,children:[Ee,(0,t.jsxs)(`div`,{className:`pretext-plus-editor__tab-list`,role:`tablist`,children:[(0,t.jsx)(`button`,{type:`button`,id:L,role:`tab`,"aria-controls":Te,"aria-selected":s===`editor`,tabIndex:s===`editor`?0:-1,className:`pretext-plus-editor__tab-button ${s===`editor`?`is-active`:``}`,onClick:()=>c(`editor`),children:`Editor`}),(0,t.jsx)(`button`,{type:`button`,id:we,role:`tab`,"aria-controls":Te,"aria-selected":s===`preview`,tabIndex:s===`preview`?0:-1,className:`pretext-plus-editor__tab-button ${s===`preview`?`is-active`:``}`,onClick:()=>c(`preview`),children:`Preview`})]}),(0,t.jsx)(`div`,{id:Te,className:`pretext-plus-editor__tab-panel`,role:`tabpanel`,"aria-labelledby":s===`editor`?L:we,children:(0,t.jsx)(`div`,{style:{height:`100%`},children:s===`editor`?xe:Se})})]}):(0,t.jsxs)(`div`,{className:`pretext-plus-editor__sectioned-layout`,children:[Ce,(0,t.jsxs)(gt,{orientation:`horizontal`,className:`pretext-plus-editor__splitter`,children:[(0,t.jsx)(yt,{className:`pretext-plus-editor__editor-panel`,children:xe}),(0,t.jsx)(St,{className:`pretext-plus-editor__resize-handle`,children:(0,t.jsx)(`div`,{className:`pretext-plus-editor__resize-dots`})}),(0,t.jsx)(yt,{className:`pretext-plus-editor__preview-panel`,children:Se})]})]}),(0,t.jsxs)(`div`,{className:`pretext-plus-editor`,onKeyDown:ye,children:[(0,t.jsx)(S3,{onSaveButton:e.onSaveButton,saveButtonLabel:e.saveButtonLabel,onCancelButton:e.onCancelButton,cancelButtonLabel:e.cancelButtonLabel,showPreviewModeToggle:e.onPreviewRebuild!==void 0}),(0,t.jsxs)(`div`,{className:`pretext-plus-editor__editor-displays`,children:[(0,t.jsx)(z6,{resetKeys:[ie,y],children:R}),d?(0,t.jsx)(e3,{onClose:()=>g(`isLatexDialogOpen`)}):null,f&&re&&ce?(0,t.jsx)(i3,{sourceContent:ie,sourceFormat:M,pretextSource:ce,onConfirm:be,onClose:()=>g(`isConvertDialogOpen`)}):null,p?(0,t.jsx)(g3,{docinfo:x,showCommonDocinfoControls:!0,commonDocinfo:S,initialUseCommonDocinfo:C,onClose:t=>{if(g(`isDocinfoEditorOpen`),t!==void 0){j({docinfo:t.docinfo,commonDocinfo:t.commonDocinfo,useCommonDocinfo:t.useCommonDocinfo}),e.onCommonDocinfoChange?.(t.commonDocinfo),e.onUseCommonDocinfoChange?.(t.useCommonDocinfo);let n=ne??re;ae(n?.xmlId??``,n?.content??``,n?.sourceFormat??`pretext`,{docinfo:t.docinfo,commonDocinfo:t.commonDocinfo,useCommonDocinfo:t.useCommonDocinfo})}}}):null,m&&e.projectAssets!==void 0?(0,t.jsx)(x3,{open:m,onClose:()=>g(`isAssetPickerOpen`),onLoadAssets:e.onLoadAssets,onLoadLibraryAssets:e.onLoadLibraryAssets,onAddFromLibrary:e.onAssetAddFromLibrary,onUpload:e.onAssetUpload,onAddUrl:e.onAssetAddUrl,onCreateDoenet:e.onCreateDoenet,onRemoveAsset:e.onAssetRemove,onInsert:fe}):null]})]})};e.CodeEditor=Ps,e.DocinfoEditor=g3,e.Editors=U6,e.FeedbackLink=K4,e.FullPreview=$L,e.VisualEditor=XL,e.assembleProjectSource=N6,e.buildDivisionTree=A6,e.convertLatexToPretext=V4,e.createConclusion=e6,e.createIntroduction=$3,e.createLatexConclusion=d6,e.createLatexIntroduction=u6,e.createNewLatexSection=l6,e.createNewSection=Q3,e.derivePretextContent=W4,e.detectSourceFormat=B4,e.ensureLatexSectionWrapper=o6,e.ensureSectionWrapper=r6,e.extractDivisionMetadata=m6,e.extractLatexDivisionTitle=c6,e.findDivisionParent=T6,e.getOrphanRoots=j6,e.getOrphanedDivisions=k6,e.getSectionAttributes=p6,e.insertDivisionRef=x6,e.mergeTwoSections=f6,e.moveDivisionRef=C6,e.normalizeSelfClosingRefs=D6,e.parseDivisionRefs=v6,e.postToIframe=QL,e.removeDivisionRef=S6,e.renameDivisionRef=w6,e.reorderDivisionRefs=E6,e.rewrapLatexSection=a6,e.rewrapSection=n6,e.stripLatexSectionWrapper=i6,e.stripSectionWrapper=t6,e.updateDivisionTitle=Z3,e.updateLatexSectionTitle=s6,e.updateSectionMetadata=h6,e.wrapDivisionForPreview=I6});
|
|
1084
1084
|
//# sourceMappingURL=index.js.map
|