@jpmorganchase/mosaic-content-editor-plugin 0.1.0-beta.37 → 0.1.0-beta.39

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (189) hide show
  1. package/.turbo/turbo-build.log +2 -2
  2. package/CHANGELOG.md +16 -0
  3. package/dist/api/save.d.ts +1 -1
  4. package/dist/api/save.js +1 -1
  5. package/dist/chunk-3QIETKQW.js +1 -0
  6. package/dist/chunk-4B2NDAA2.js +1 -0
  7. package/dist/chunk-4LQ77YZW.js +1 -0
  8. package/dist/chunk-6EO5B7QP.js +1 -0
  9. package/dist/chunk-6X665P47.js +1 -0
  10. package/dist/chunk-7JRJTNUG.js +1 -0
  11. package/dist/chunk-7LK4O57W.js +1 -0
  12. package/dist/chunk-B6MFPF7L.js +1 -0
  13. package/dist/chunk-BFF3MNBV.js +1 -0
  14. package/dist/chunk-BINIAABY.js +1 -0
  15. package/dist/chunk-DLRFTDUZ.js +1 -0
  16. package/dist/chunk-DXTVYP7D.js +1 -0
  17. package/dist/chunk-EMHRWY75.js +1 -0
  18. package/dist/chunk-FH2LMMJT.js +1 -0
  19. package/dist/chunk-FNNLNVQZ.js +1 -0
  20. package/dist/chunk-GYUEXLD6.js +1 -0
  21. package/dist/chunk-M4ISRNFD.js +1 -0
  22. package/dist/chunk-MZJ4JT73.js +1 -0
  23. package/dist/{chunk-GWUYDDYS.js → chunk-NFA3MZOC.js} +1 -1
  24. package/dist/chunk-NFSXCTUU.js +1 -0
  25. package/dist/chunk-OW5SK4AJ.js +1 -0
  26. package/dist/chunk-PXUVNH4P.js +1 -0
  27. package/dist/chunk-QHE4U3WR.js +1 -0
  28. package/dist/chunk-R2MEEU32.js +1 -0
  29. package/dist/chunk-ROQUYURQ.js +1 -0
  30. package/dist/chunk-SYL4AGHI.js +1 -0
  31. package/dist/chunk-TSWYSURQ.js +1 -0
  32. package/dist/chunk-UBWAGWSM.js +1 -0
  33. package/dist/chunk-WCOTJ6JY.js +1 -0
  34. package/dist/chunk-XSZUCLBY.js +1 -0
  35. package/dist/chunk-Y2A2ULLZ.js +1 -0
  36. package/dist/chunk-YIFLQ5MW.js +1 -0
  37. package/dist/chunk-Z6W7GDHE.js +1 -0
  38. package/dist/chunk-ZHZ4E2MI.js +1 -0
  39. package/dist/components/BaseToolbar/BaseToolbar.css +1 -0
  40. package/dist/components/BaseToolbar/BaseToolbar.css.css +1 -0
  41. package/dist/components/{Toolbar/TextFormatToolbarButton.css.d.ts → BaseToolbar/BaseToolbar.css.d.ts} +0 -1
  42. package/dist/components/BaseToolbar/BaseToolbar.css.js +1 -0
  43. package/dist/components/BaseToolbar/BaseToolbar.d.ts +7 -0
  44. package/dist/components/BaseToolbar/BaseToolbar.js +1 -0
  45. package/dist/components/BaseTooltray/BaseTooltray.css +1 -0
  46. package/dist/components/BaseTooltray/BaseTooltray.css.css +1 -0
  47. package/dist/components/BaseTooltray/BaseTooltray.css.d.ts +6 -0
  48. package/dist/components/BaseTooltray/BaseTooltray.css.js +1 -0
  49. package/dist/components/BaseTooltray/BaseTooltray.d.ts +9 -0
  50. package/dist/components/BaseTooltray/BaseTooltray.js +1 -0
  51. package/dist/components/ContentEditor.js +1 -1
  52. package/dist/components/Dialog.css +1 -0
  53. package/dist/components/Dialog.css.css +1 -0
  54. package/dist/components/Dialog.css.d.ts +4 -0
  55. package/dist/components/Dialog.css.js +1 -0
  56. package/dist/components/Dialog.d.ts +6 -0
  57. package/dist/components/Dialog.js +1 -0
  58. package/dist/components/Editor.css +1 -1
  59. package/dist/components/Editor.d.ts +3 -2
  60. package/dist/components/Editor.js +1 -1
  61. package/dist/components/EditorControls.css +1 -1
  62. package/dist/components/EditorControls.css.css +1 -1
  63. package/dist/components/EditorControls.css.js +1 -1
  64. package/dist/components/EditorControls.d.ts +4 -3
  65. package/dist/components/EditorControls.js +1 -1
  66. package/dist/components/LinkEditor/EditLinkButton.css +1 -0
  67. package/dist/components/LinkEditor/EditLinkButton.d.ts +2 -2
  68. package/dist/components/LinkEditor/EditLinkButton.js +1 -1
  69. package/dist/components/LinkEditor/LinkEditor.css +1 -1
  70. package/dist/components/LinkEditor/LinkEditor.js +1 -1
  71. package/dist/components/LinkEditor/SaveAdornment.css +1 -0
  72. package/dist/components/LinkEditor/SaveAdornment.js +1 -1
  73. package/dist/components/PersistEditDialog/PersistStatus.js +1 -1
  74. package/dist/components/PersistEditDialog/index.css +1 -1
  75. package/dist/components/PersistEditDialog/index.css.css +1 -0
  76. package/dist/components/PersistEditDialog/index.css.d.ts +4 -0
  77. package/dist/components/PersistEditDialog/index.css.js +1 -0
  78. package/dist/components/PersistEditDialog/index.d.ts +5 -2
  79. package/dist/components/PersistEditDialog/index.js +1 -1
  80. package/dist/components/Popper/Popper.js +1 -1
  81. package/dist/components/Toolbar/InsertHorizontalRule.css +1 -0
  82. package/dist/components/Toolbar/InsertHorizontalRule.js +1 -1
  83. package/dist/components/Toolbar/InsertImage.css +1 -1
  84. package/dist/components/Toolbar/InsertImage.js +1 -1
  85. package/dist/components/Toolbar/InsertLink.css +1 -1
  86. package/dist/components/Toolbar/InsertLink.js +1 -1
  87. package/dist/components/Toolbar/InsertTable.css +1 -1
  88. package/dist/components/Toolbar/InsertTable.css.css +1 -1
  89. package/dist/components/Toolbar/InsertTable.css.d.ts +1 -1
  90. package/dist/components/Toolbar/InsertTable.css.js +1 -1
  91. package/dist/components/Toolbar/InsertTable.js +1 -1
  92. package/dist/components/Toolbar/TextFormatTooltray.css +1 -1
  93. package/dist/components/Toolbar/TextFormatTooltray.css.css +1 -1
  94. package/dist/components/Toolbar/TextFormatTooltray.css.d.ts +0 -1
  95. package/dist/components/Toolbar/TextFormatTooltray.css.js +1 -1
  96. package/dist/components/Toolbar/TextFormatTooltray.js +1 -1
  97. package/dist/components/Toolbar/Toolbar.css +1 -1
  98. package/dist/components/Toolbar/Toolbar.js +1 -1
  99. package/dist/components/Toolbar/ToolbarButton.css +1 -0
  100. package/dist/components/Toolbar/ToolbarButton.css.css +1 -0
  101. package/dist/components/Toolbar/ToolbarButton.css.d.ts +4 -0
  102. package/dist/components/Toolbar/ToolbarButton.css.js +1 -0
  103. package/dist/components/Toolbar/ToolbarButton.d.ts +8 -0
  104. package/dist/components/Toolbar/ToolbarButton.js +1 -0
  105. package/dist/components/Toolbar/ToolbarSeparator.css.css +1 -0
  106. package/dist/components/Toolbar/ToolbarSeparator.css.d.ts +4 -0
  107. package/dist/components/Toolbar/ToolbarSeparator.css.js +1 -0
  108. package/dist/components/Toolbar/ToolbarSepartor.css +1 -0
  109. package/dist/components/Toolbar/ToolbarSepartor.d.ts +7 -0
  110. package/dist/components/Toolbar/ToolbarSepartor.js +1 -0
  111. package/dist/index.css +1 -1
  112. package/dist/index.js +1 -1
  113. package/dist/plugins/FloatingToolbarPlugin.css +1 -1
  114. package/dist/plugins/FloatingToolbarPlugin.css.css +1 -0
  115. package/dist/plugins/FloatingToolbarPlugin.css.d.ts +4 -0
  116. package/dist/plugins/FloatingToolbarPlugin.css.js +1 -0
  117. package/dist/plugins/FloatingToolbarPlugin.js +1 -1
  118. package/dist/plugins/MarkdownLinkPlugin.css +1 -1
  119. package/dist/plugins/MarkdownLinkPlugin.js +1 -1
  120. package/dist/plugins/PreviewPlugin.css +1 -1
  121. package/dist/plugins/PreviewPlugin.d.ts +6 -5
  122. package/dist/plugins/PreviewPlugin.js +1 -1
  123. package/dist/plugins/TableActionMenuPlugin.js +1 -1
  124. package/dist/transformers/index.js +1 -1
  125. package/package.json +14 -13
  126. package/src/api/save.ts +4 -4
  127. package/src/components/BaseToolbar/BaseToolbar.css.ts +21 -0
  128. package/src/components/BaseToolbar/BaseToolbar.tsx +13 -0
  129. package/src/components/BaseTooltray/BaseTooltray.css.ts +31 -0
  130. package/src/components/BaseTooltray/BaseTooltray.tsx +22 -0
  131. package/src/components/ContentEditor.tsx +2 -0
  132. package/src/components/Dialog.css.ts +7 -0
  133. package/src/components/Dialog.tsx +12 -0
  134. package/src/components/Editor.tsx +10 -8
  135. package/src/components/EditorControls.css.ts +2 -5
  136. package/src/components/EditorControls.tsx +13 -7
  137. package/src/components/LinkEditor/EditLinkButton.tsx +5 -5
  138. package/src/components/LinkEditor/SaveAdornment.tsx +4 -3
  139. package/src/components/PersistEditDialog/PersistStatus.tsx +7 -2
  140. package/src/components/PersistEditDialog/index.css.ts +14 -0
  141. package/src/components/PersistEditDialog/index.tsx +37 -16
  142. package/src/components/Popper/Popper.tsx +6 -1
  143. package/src/components/Toolbar/InsertHorizontalRule.tsx +2 -2
  144. package/src/components/Toolbar/InsertImage.tsx +9 -8
  145. package/src/components/Toolbar/InsertLink.tsx +9 -8
  146. package/src/components/Toolbar/InsertTable.css.ts +8 -2
  147. package/src/components/Toolbar/InsertTable.tsx +9 -4
  148. package/src/components/Toolbar/TextFormatTooltray.css.ts +0 -5
  149. package/src/components/Toolbar/TextFormatTooltray.tsx +16 -21
  150. package/src/components/Toolbar/Toolbar.tsx +11 -6
  151. package/src/components/Toolbar/ToolbarButton.css.ts +11 -0
  152. package/src/components/Toolbar/ToolbarButton.tsx +41 -0
  153. package/src/components/Toolbar/ToolbarSeparator.css.ts +28 -0
  154. package/src/components/Toolbar/ToolbarSepartor.tsx +13 -0
  155. package/src/components/__tests__/EditorControls.test.tsx +4 -4
  156. package/src/plugins/FloatingToolbarPlugin.css.ts +14 -0
  157. package/src/plugins/FloatingToolbarPlugin.tsx +9 -8
  158. package/src/plugins/PreviewPlugin.tsx +31 -6
  159. package/dist/chunk-4CRC7NS5.js +0 -1
  160. package/dist/chunk-5JA4V4PV.js +0 -1
  161. package/dist/chunk-6TWGPQT5.js +0 -1
  162. package/dist/chunk-B3MUPQQA.js +0 -1
  163. package/dist/chunk-DK6F4XAE.js +0 -1
  164. package/dist/chunk-FFJYM47T.js +0 -1
  165. package/dist/chunk-FI57IKHZ.js +0 -1
  166. package/dist/chunk-HB6ONQSD.js +0 -1
  167. package/dist/chunk-HYOY3SMH.js +0 -1
  168. package/dist/chunk-JJ5K5LVL.js +0 -1
  169. package/dist/chunk-JYGEHLYM.js +0 -1
  170. package/dist/chunk-KD66I56W.js +0 -1
  171. package/dist/chunk-L5I3DIHV.js +0 -1
  172. package/dist/chunk-MJUOPD42.js +0 -1
  173. package/dist/chunk-MOZEUF74.js +0 -1
  174. package/dist/chunk-PMMRU33I.js +0 -1
  175. package/dist/chunk-PZZKTKIE.js +0 -1
  176. package/dist/chunk-R6U5TOP4.js +0 -1
  177. package/dist/chunk-SI5CM3F4.js +0 -1
  178. package/dist/chunk-VO6JTL4J.js +0 -1
  179. package/dist/chunk-WCG3U3X2.js +0 -1
  180. package/dist/chunk-WTMALWJU.js +0 -1
  181. package/dist/chunk-XGBC7YGO.js +0 -1
  182. package/dist/chunk-ZUGL4RMA.js +0 -1
  183. package/dist/components/Toolbar/TextFormatToolbarButton.css +0 -1
  184. package/dist/components/Toolbar/TextFormatToolbarButton.css.css +0 -1
  185. package/dist/components/Toolbar/TextFormatToolbarButton.css.js +0 -1
  186. package/dist/components/Toolbar/TextFormatToolbarButton.d.ts +0 -7
  187. package/dist/components/Toolbar/TextFormatToolbarButton.js +0 -1
  188. package/src/components/Toolbar/TextFormatToolbarButton.css.ts +0 -10
  189. package/src/components/Toolbar/TextFormatToolbarButton.tsx +0 -29
@@ -7,6 +7,25 @@ import debounce from 'lodash/debounce';
7
7
  import transformers from '../transformers';
8
8
  import { useContentEditor } from '../index';
9
9
 
10
+ interface SourceResponse {
11
+ source: { compiledSource: string; frontmatter: any; scope: any };
12
+ error?: string;
13
+ exception?: string;
14
+ }
15
+
16
+ async function fetchSource(previewUrl: string, markdown: string) {
17
+ const response = await fetch(previewUrl, {
18
+ method: 'POST',
19
+ headers: {
20
+ 'Content-Type': 'application/json'
21
+ },
22
+ body: JSON.stringify({ mode: 'markdown', text: markdown })
23
+ });
24
+
25
+ const data = (await response.json()) as SourceResponse;
26
+ return data;
27
+ }
28
+
10
29
  function usePreview(onContentChange: (markdown: string) => void) {
11
30
  const handleContentChange = debounce(onContentChange, 250, { maxWait: 500 });
12
31
 
@@ -22,17 +41,23 @@ function usePreview(onContentChange: (markdown: string) => void) {
22
41
  return { onChange };
23
42
  }
24
43
 
25
- export type PreviewPluginProps = {
26
- compileMDX: (source: string, parseFrontMatter: boolean) => Promise<any>;
27
- };
44
+ interface PreviewPluginProps {
45
+ previewUrl: string;
46
+ }
28
47
 
29
- export const PreviewPlugin: React.FC<PreviewPluginProps> = ({ compileMDX }) => {
48
+ export const PreviewPlugin = ({ previewUrl }: PreviewPluginProps) => {
30
49
  const { setErrorMessage, setPreviewContent } = useContentEditor();
31
50
 
32
51
  const handleContentChange = async (content: string) => {
33
52
  try {
34
- const data = await compileMDX(content, false /** Don't parse frontmatter */);
35
- setPreviewContent(data);
53
+ if (content) {
54
+ const data = await fetchSource(previewUrl, content);
55
+ if (!data.error && data?.source) {
56
+ setPreviewContent(data.source);
57
+ } else {
58
+ setErrorMessage(`${data.error?.toUpperCase()}: ${data?.exception}`);
59
+ }
60
+ }
36
61
  } catch (e) {
37
62
  if (e instanceof Error) {
38
63
  setErrorMessage(`MDX Error: ${e.message}`);
@@ -1 +0,0 @@
1
- import{a as s}from"./chunk-JYGEHLYM.js";import{a as C}from"./chunk-U7COOUR6.js";import{a as m}from"./chunk-PMMRU33I.js";import o,{useCallback as O,useEffect as g,useState as n}from"react";import d from"clsx";import{FORMAT_TEXT_COMMAND as E,SELECTION_CHANGE_COMMAND as M,COMMAND_PRIORITY_CRITICAL as k,$getSelection as A,$isRangeSelection as _}from"lexical";import{useLexicalComposerContext as D}from"@lexical/react/LexicalComposerContext";import{$isListNode as $,ListNode as K}from"@lexical/list";import{$getNearestNodeOfType as S}from"@lexical/utils";import{$isHeadingNode as w}from"@lexical/rich-text";import{$isCodeNode as H}from"@lexical/code";import{Icon as N}from"@jpmorganchase/mosaic-components";import{Tooltray as G}from"@salt-ds/lab";function to({floating:T=!1}){let[c]=D(),[r,u]=n(c),[I,b]=n(!1),[h,F]=n(!1),[L,f]=n(!1),[B,y]=n("paragraph"),p=e=>{r.dispatchCommand(E,e)},l=O(()=>{let e=A();if(_(e)){b(e.hasFormat("bold")),F(e.hasFormat("italic")),f(e.hasFormat("code"));let a=e.anchor.getNode(),t=a.getKey()==="root"?a:a.getTopLevelElementOrThrow(),v=t.getKey();if(r.getElementByKey(v)!==null)if($(t)){let i=S(a,K),x=i?i.getListType():t.getListType();y(x)}else{let i=w(t)?t.getTag():t.getType();i&&y(i),H(t)&&f(!0)}}},[r]);return g(()=>r.registerUpdateListener(({editorState:e})=>{e.read(()=>{l()})}),[r,l]),g(()=>c.registerCommand(M,(e,a)=>(l(),u(a),!1),k),[c,l]),o.createElement("div",{className:s.root},T?null:o.createElement("span",null),o.createElement(G,{"data-collapsible":"instant"},!T&&o.createElement(C,{editor:r,type:B}),o.createElement(m,{active:I,onClick:()=>p("bold"),label:"Bold"},o.createElement("span",{className:d(s.icon,s.bold)},"B")),o.createElement(m,{active:h,onClick:()=>p("italic"),label:"Italic"},o.createElement("span",{className:d(s.icon,s.italic)},"I")),o.createElement(m,{active:L,onClick:()=>p("code"),label:"Inline Code"},o.createElement("span",{className:d(s.code)},o.createElement(N,{name:"chevronLeft"}),o.createElement(N,{name:"chevronRight"})))))}export{to as a};
@@ -1 +0,0 @@
1
- import{a as h}from"./chunk-B3MUPQQA.js";import{a as k}from"./chunk-6TWGPQT5.js";import{a as f}from"./chunk-UWF3FV3R.js";import{a as b}from"./chunk-DK6F4XAE.js";import{a as T}from"./chunk-KD66I56W.js";import{a as y}from"./chunk-3FJGHVH5.js";import{a as s}from"./chunk-XGBC7YGO.js";import{a as M}from"./chunk-QKOQTH4L.js";import{a as P}from"./chunk-RO6ARCLZ.js";import{a as F}from"./chunk-SI5CM3F4.js";import{a as x}from"./chunk-FKL4ZGDB.js";import{b as w}from"./chunk-YBFKG74H.js";import{b as E,d as S}from"./chunk-JJ5K5LVL.js";import{a as g}from"./chunk-WCG3U3X2.js";import{a as t}from"./chunk-NXV7KCC5.js";import{a as C,d as v,f as p}from"./chunk-G57W376H.js";import R from"react";import{$convertToMarkdownString as oo}from"@lexical/markdown";import{OnChangePlugin as ro}from"@lexical/react/LexicalOnChangePlugin";import to from"lodash/debounce";import o,{useRef as I,useState as $}from"react";import A from"clsx";import O from"gray-matter";import{LexicalComposer as U}from"@lexical/react/LexicalComposer";import{ListPlugin as X}from"@lexical/react/LexicalListPlugin";import{TablePlugin as W}from"@lexical/react/LexicalTablePlugin";import{LinkPlugin as j}from"@lexical/react/LexicalLinkPlugin";import{HistoryPlugin as q}from"@lexical/react/LexicalHistoryPlugin";import{MarkdownShortcutPlugin as G}from"@lexical/react/LexicalMarkdownShortcutPlugin";import J from"react-split";import{$convertFromMarkdownString as K}from"@lexical/markdown";function Q(r){console.error(r)}var V={namespace:"mosaic-content-editor",onError:Q,nodes:P,theme:y},Y=()=>{let r=document.createElement("div");return r.className=t.gutter,r},Z=({compileMDX:r,content:m,source:a,PreviewComponent:e,user:n,components:l})=>{let i=C()||a,{setUser:N}=v(),[u,d]=$(!1),z=I(null),{data:c,content:D}=O(m),B=()=>{d(!0),N(n)},H=()=>{d(!1)};return o.createElement(U,{initialConfig:{...V,editorState:()=>K(D,s)}},o.createElement("div",{className:t.root,onFocus:B,onBlur:H},o.createElement("div",{className:t.toolbarContainer},o.createElement(h,null),o.createElement(k,{meta:c}),o.createElement(M,null)),o.createElement("div",{className:t.editorRoot},o.createElement(J,{className:t.splitter,cursor:"col-resize",direction:"horizontal",dragInterval:1,expandToMin:!1,gutter:Y,gutterAlign:"center",minSize:100,sizes:[50,50],snapOffset:30},o.createElement(f,{className:A({[t.focused]:u,[t.unfocused]:!u}),ref:z},o.createElement(g,null)),o.createElement(f,null,e&&o.createElement(e,{source:i,meta:c,components:l}))),o.createElement(q,null),o.createElement(X,null),o.createElement(W,null),o.createElement(j,null),o.createElement(G,{transformers:s}),r&&o.createElement(L,{compileMDX:r}),o.createElement(w,null),o.createElement(E,null),o.createElement(b,null),o.createElement(x,null),o.createElement(F,null),o.createElement(T,null),o.createElement(S,null))))},_=Z;function eo(r){let m=to(r,250,{maxWait:500});return{onChange:e=>{e.read(()=>{let n=oo(s);n&&m(n)})}}}var L=({compileMDX:r})=>{let{setErrorMessage:m,setPreviewContent:a}=p(),e=async l=>{try{let i=await r(l,!1);a(i)}catch(i){i instanceof Error&&m(`MDX Error: ${i.message}`)}},{onChange:n}=eo(e);return R.createElement(ro,{onChange:n,ignoreSelectionChange:!0})};export{L as a,_ as b};
@@ -1 +0,0 @@
1
- import{a as D}from"./chunk-MOZEUF74.js";import{a as h}from"./chunk-XGBC7YGO.js";import{a as S}from"./chunk-FI57IKHZ.js";import{c as P,d as C}from"./chunk-G57W376H.js";import e,{useState as d}from"react";import{useLexicalComposerContext as T}from"@lexical/react/LexicalComposerContext";import{$convertToMarkdownString as x}from"@lexical/markdown";import{Link as H,P2 as b,Button as w}from"@jpmorganchase/mosaic-components";import{Dialog as B,DialogTitle as E,DialogContent as L,DialogActions as F}from"@salt-ds/lab";var G=({isRaising:i,prHref:a,error:u})=>!i&&!a&&!u?e.createElement(e.Fragment,null,e.createElement(b,null,"The content of this page resides in a Git repository and to update it requires a Pull Request which will be reviewed by the content owners."),e.createElement("br",null),e.createElement(b,null,"Should you decide to stop editing before creating the Pull Request then all changes will be lost.")):null,Q=({meta:i})=>{let{pageState:a,setPageState:u}=P(),{user:p}=C(),[y]=T(),[r,s]=d(!1),[o,t]=d(null),[n,l]=d(null),k=a==="SAVING",q=o!==null?"success":"info",m=()=>{u("EDIT"),t(null),s(!1)};return e.createElement(B,{onClose:m,open:k,status:n?"error":q,width:"50%"},e.createElement(E,null,o?"Pull Request Created Successfully":"Save Changes"),e.createElement(L,null,(r||n)&&!o&&e.createElement(D,{isRaising:r,error:n}),e.createElement(G,{isRaising:r,prHref:o,error:n}),!r&&o&&e.createElement(H,{href:o,target:"_blank"},"A Pull Request for your changes has been created")),e.createElement(F,null,e.createElement(w,{disabled:r,onClick:m},"Cancel"),e.createElement(w,{disabled:r||o!==null,onClick:()=>{s(!0),t(null),l(null);try{y.update(async()=>{let f=x(h);if(f&&p){let{sid:I,displayName:v,email:A}=p,c=await S({sid:I,name:v,email:A},i.route,f);if(c.ok){let g=await c.json();g.error?(l(g.error),t(null),s(!1)):(t(g?.links?.self[0]?.href),s(!1))}c.status===500&&(l("An unexpected error has occurred."),t(null),s(!1))}})}catch{l("Sorry"),t(null),s(!1)}},variant:"cta"},"Raise Pull Request")))};export{Q as a};
@@ -1 +0,0 @@
1
- import{a as s}from"./chunk-ZUGL4RMA.js";import{a as d}from"./chunk-L5I3DIHV.js";import{a as m}from"./chunk-HYOY3SMH.js";import{a as i}from"./chunk-FW7CHFWO.js";import{a as e}from"./chunk-4CRC7NS5.js";import{c as b}from"./chunk-JJ5K5LVL.js";import{a as n}from"./chunk-PC66Q33O.js";import{c as a}from"./chunk-G57W376H.js";import o from"react";import{Toolbar as g,ToolbarButton as t,Tooltray as r}from"@salt-ds/lab";import{Icon as l}from"@jpmorganchase/mosaic-components";var I=()=>{let{canRedo:p,canUndo:T,redoEdit:y,undoEdit:f}=i(),{setPageState:u}=a();return o.createElement(g,{"aria-label":"page editing toolbar",style:{minWidth:"100px"}},o.createElement(r,{"aria-label":"history tooltray"},o.createElement(t,{label:"Undo",disabled:!T,onClick:f},o.createElement(l,{name:"undo"})),o.createElement(t,{label:"Redo",disabled:!p,onClick:y},o.createElement(l,{name:"redo"}))),o.createElement(e,null),o.createElement(r,{"aria-label":"text format tooltray"},o.createElement(b,null),o.createElement(m,null),o.createElement(d,null),o.createElement(s,null)),o.createElement(r,{"aria-label":"stop editing tooltray",alignEnd:!0},o.createElement(t,{label:"Cancel Editing",onClick:()=>u("VIEW")},o.createElement(l,{name:"delete"}))),o.createElement(r,{"aria-label":"copy tooltray","data-pad-start":!0},o.createElement(n,null)))},v=I;export{v as a};
@@ -1 +0,0 @@
1
- import{a as C}from"./chunk-G4LBXKDE.js";import{a as S}from"./chunk-HB6ONQSD.js";import{a as L}from"./chunk-5YCBSSDA.js";import{a as y}from"./chunk-MJUOPD42.js";import{c as g,d}from"./chunk-R6U5TOP4.js";import{a as E}from"./chunk-VO6JTL4J.js";import{mergeRegister as x}from"@lexical/utils";import{$getSelection as P,$isRangeSelection as v,COMMAND_PRIORITY_LOW as T,SELECTION_CHANGE_COMMAND as B}from"lexical";import l,{useCallback as G,useEffect as k,useRef as $,useState as f}from"react";import{$isLinkNode as I,TOGGLE_LINK_COMMAND as b}from"@lexical/link";import{useLexicalComposerContext as F}from"@lexical/react/LexicalComposerContext";import{useFloatingUI as H}from"@salt-ds/core";import{Input as w}from"@salt-ds/lab";function re(){let[t]=F(),N=$(null),[o,r]=f(""),[h,i]=f(!1),[O,a]=f(null),c=()=>{r(""),i(!1),a(null)},{context:D,floating:M,reference:m,strategy:R,x:A,y:K}=H({placement:"right",strategy:"absolute",open:o.length>0,onOpenChange:c}),{getFloatingProps:U}=d([g(D,{ancestorScroll:!0})]),n=G(()=>{let e=P();if(v(e)){let s=C(e),p=s.getParent();I(p)?(m(t.getElementByKey(p.getKey())),r(p.getURL()),a(e)):I(s)?(m(t.getElementByKey(s.getKey())),r(s.getURL()),a(e)):c()}return i(!1),!0},[t,m]);k(()=>x(t.registerUpdateListener(({editorState:e})=>{e.read(()=>{n()})}),t.registerCommand(B,()=>(n(),!0),T)),[t,n]),k(()=>{t.getEditorState().read(()=>{n()})},[t,n]);let u=()=>{O!==null&&o!==""&&(t.dispatchCommand(b,o),i(!1))},_=()=>i(!0);return l.createElement(E,{className:L.popper,ref:M,open:o.length>0,style:{top:K??"",left:A??"",position:R},...U({})},h?l.createElement(w,{endAdornment:l.createElement(y,{onSave:u}),ref:N,value:o,onChange:e=>{r(e.target.value)},onKeyDown:e=>{e.key==="Enter"?(e.preventDefault(),u()):e.key==="Escape"&&e.preventDefault()}}):l.createElement(S,{onClick:_}))}export{re as a};
@@ -1 +0,0 @@
1
- var i={active:" wfgi8t3u wfgi8t44 wfgi8t3q wfgi8t4g wfgi8t4r wfgi8t51 wfgi8t4n wfgi8t5d wfgi8t5e wfgi8t5g wfgi8t5y wfgi8t5k wfgi8t6r wfgi8t6t wfgi8t6f wfgi8t6x",root:"_1sg4vms0"};export{i as a};
@@ -1 +0,0 @@
1
- function i(t,n,e){return fetch("http://localhost:8080/savecontent",{method:"POST",body:JSON.stringify({user:t,route:n,markdown:e}),headers:{Accept:"application/json","Content-Type":"application/json"}})}export{i as a};
@@ -1 +0,0 @@
1
- import o from"react";import{Button as n,Icon as m}from"@jpmorganchase/mosaic-components";var i=t=>o.createElement(n,{...t},o.createElement(m,{name:"edit"}));export{i as a};
@@ -1 +0,0 @@
1
- import{a as o}from"./chunk-GWUYDDYS.js";import{c as N,d as M}from"./chunk-R6U5TOP4.js";import{a as F}from"./chunk-VO6JTL4J.js";import{a as E}from"./chunk-PMMRU33I.js";import e,{useRef as P,useState as y}from"react";import{Icon as H}from"@jpmorganchase/mosaic-components";import{useLexicalComposerContext as W}from"@lexical/react/LexicalComposerContext";import{INSERT_TABLE_COMMAND as j}from"@lexical/table";import{useFloatingUI as q}from"@salt-ds/core";var G=({index:n,...r})=>e.createElement("td",{className:o.cell,"data-column":n,...r}),J=({children:n,index:r})=>e.createElement("tr",{className:r===1?o.headerRow:o.row,"data-row":r},n),K=({rowCount:n,columnCount:r})=>{let a=[],s=[];for(let t=1;t<=r;t++)a.push(e.createElement(G,{key:t,index:t}));for(let t=1;t<=n;t++)s.push(e.createElement(J,{key:t,index:t},a));return e.createElement("tbody",null,s)};function Q(n){let r=parseInt(n?.dataset?.column||"0",10),a=n.parentNode,s=parseInt(a?.dataset?.row||"0",10);return{columnIndex:r,rowIndex:s}}var ie=({minRows:n=2,minColumns:r=2,maxColumns:a=10,initialRowCount:s=4,initialColumnCount:t=4})=>{let[O]=W(),g=P(null),c=P(!1),[m,d]=y(t),[i,p]=y(s),[f,h]=y(!1),v=()=>{x(),h(l=>!l)},{context:L,floating:S,reference:B,strategy:k,x:A,y:D}=q({placement:"bottom",strategy:"absolute",open:f,onOpenChange:v}),{getFloatingProps:_}=M([N(L,{ancestorScroll:!0})]),$=l=>{let I=l.nativeEvent.target;if(!g.current?.contains(I)||!c.current)return;let{columnIndex:w,rowIndex:T}=Q(I);w<m&&w>=r&&d(w),T<i&&T>=n&&p(T)};function x(){d(t),p(s),c.current=!1}let z=()=>{c.current=!0,m+1<=a&&d(l=>l+1)},R=()=>{c.current=!0,p(l=>l+1)},U=()=>{O.dispatchCommand(j,{columns:m.toString(),rows:i.toString()}),x(),h(!1)},u=25,b=i*u,C=m*u;return e.createElement(e.Fragment,null,e.createElement(E,{ref:B,onClick:v,active:f},e.createElement(H,{name:"grid"}),e.createElement("div",{className:o.spacer}),e.createElement(H,{name:"chevronDown"})),e.createElement(F,{className:o.popper,ref:S,open:f,style:{top:D??"",left:A??"",position:k},..._({})},e.createElement("div",{className:o.tableContainer,onMouseOver:$,onClick:U},e.createElement("table",{className:o.table,style:{width:C,height:b},ref:g},e.createElement(K,{rowCount:i,columnCount:m})),e.createElement("div",{className:o.dimensions},`${m} x ${i}`),e.createElement("div",{className:o.addColumnArea,style:{left:C,height:b+u},onMouseOver:z}),e.createElement("div",{className:o.addRowArea,style:{top:b,width:C+u},onMouseOver:R}))))};export{ie as a};
@@ -1 +0,0 @@
1
- import{a as L}from"./chunk-WZYDYWT3.js";import{a as I}from"./chunk-PMMRU33I.js";import{e as f}from"./chunk-G57W376H.js";import{$createLinkNode as K,TOGGLE_LINK_COMMAND as V}from"@lexical/link";import{useLexicalComposerContext as q}from"@lexical/react/LexicalComposerContext";import{$wrapNodes as W}from"@lexical/selection";import{$createParagraphNode as G,$createTextNode as U,$getSelection as j,$isRangeSelection as Y,$isTextNode as z,COMMAND_PRIORITY_EDITOR as H,createCommand as J}from"lexical";import Q,{useCallback as X,useEffect as Z}from"react";import t,{useEffect as E,useState as k}from"react";import{useLexicalComposerContext as F}from"@lexical/react/LexicalComposerContext";import{Button as C,Icon as v}from"@jpmorganchase/mosaic-components";import{string as N,object as M}from"yup";import{FormField as S,Input as h}from"@salt-ds/lab";import{ButtonBar as P,Dialog as B,DialogTitle as _,DialogContent as A,DialogActions as O}from"@salt-ds/lab";import{$getSelection as $,$isRangeSelection as w}from"lexical";var D=M({url:N().required("Url is required"),text:N().required("Text is required").max(10,"Text must be fewer than 100 characters")}),ft=()=>{let{isInsertingLink:e,setIsInsertingLink:o}=f();return t.createElement(I,{active:e,onClick:()=>o(!0),label:"Insert Link"},t.createElement(v,{name:"linked"}))},T={url:"https://"},b=()=>{let[e]=F(),{isInsertingLink:o,setIsInsertingLink:a}=f(),[n,r]=k(T),[s,d]=k(),u=()=>{a(!1),d(void 0),r(T)};E(()=>{e.getEditorState().read(()=>{if(o){let i=$();if(w(i)){let l=i.getTextContent();r(m=>({...m,text:l}))}}})},[e,o]);let g=i=>{let l=i.inner.reduce((m,{path:c,message:y})=>({...m,[c]:y}),{});d(l)},x=(i,l)=>{let{name:m}=i.target,c={...n,[m]:l};D.validateAt(m,c,{abortEarly:!1}).then(()=>{d({...s,[m]:void 0})},g),r(c)};return t.createElement(B,{onClose:u,open:o,width:600},t.createElement("form",{onSubmit:async i=>{i.preventDefault(),D.validate(n,{abortEarly:!1}).then(()=>{let l={url:n?.url,text:n?.text};e.dispatchCommand(p,l),u()},g)},noValidate:!0},t.createElement(_,null,"Insert Link"),t.createElement(A,null,t.createElement("div",{className:L.fullWidth},t.createElement(S,{label:"Image URL text",validationStatus:s?.url?"error":void 0,helperText:s?.url},t.createElement(h,{value:n?.url,inputProps:{name:"url"},onChange:x})),t.createElement(S,{label:"Link text",validationStatus:s?.text?"error":void 0,helperText:s?.text},t.createElement(h,{value:n?.text,inputProps:{name:"text"},onChange:x})))),t.createElement(O,null,t.createElement(P,null,t.createElement(C,{onClick:u},"Cancel"),t.createElement(C,{variant:"cta",type:"submit"},"Insert")))))};var p=J();function R(){let[e]=q(),o=X(({url:a,text:n})=>{e.update(()=>{let r=j();if(Y(r)&&a!==void 0&&n!==void 0){let s=r.focus.getNode();if(z(s))e.dispatchCommand(V,a);else{let d=K(a),u=U(n);u.setFormat(r.focus.getNode().getFormat()),d.append(u),W(r,()=>d,G())}}})},[e]);Z(()=>e.registerCommand(p,a=>(o(a),!0),H),[e,o])}function St(){return R(),Q.createElement(b,null)}export{p as a,St as b,ft as c,b as d};
@@ -1 +0,0 @@
1
- var d={root:"u64up60",icon:"u64up61",bold:"u64up62",italic:"u64up63",code:"_1lf47lk0 byd2vlk byd2vlp byd2vl2 byd2vl9 u64up64"};export{d as a};
@@ -1 +0,0 @@
1
- import{a as M}from"./chunk-ESKW4XF6.js";import{a as T}from"./chunk-6YPAVQF4.js";import{c as S,d as L}from"./chunk-R6U5TOP4.js";import{a as D}from"./chunk-VO6JTL4J.js";import A,{useCallback as i,useEffect as h,useState as E}from"react";import{useLexicalComposerContext as N}from"@lexical/react/LexicalComposerContext";import{$getSelection as B,$isRangeSelection as O}from"lexical";import{$deleteTableColumn as U,$getElementGridForTableNode as $,$getTableCellNodeFromLexicalNode as k,$getTableColumnIndexFromTableCellNode as y,$getTableNodeFromLexicalNodeOrThrow as u,$getTableRowIndexFromTableCellNode as F,$insertTableColumn as K,$insertTableRow as G,$isTableCellNode as a,$removeTableRowAtIndex as H}from"@lexical/table";import{useFloatingUI as j}from"@salt-ds/core";import{ArrowDownIcon as q,ArrowLeftIcon as z,ArrowRightIcon as J,ArrowUpIcon as Q,DeleteIcon as v,DeleteSolidIcon as V}from"@salt-ds/icons";var W={menuItems:[{title:"Insert Row Above",icon:Q},{title:"Insert Row Below",icon:q},{title:"Insert Column Left",icon:z},{title:"Insert Column Right",icon:J},{title:"Delete Row",icon:v},{title:"Delete Column",icon:v},{title:"Delete Table",icon:V}]};function X({editor:t,tableCellNode:e,onComplete:o}){let s=n=>{if(!!n){if(n.title==="Delete Row"){f();return}if(n.title==="Insert Row Below"){m(!0);return}if(n.title==="Insert Row Above"){m(!1);return}if(n.title==="Insert Column Left"){d(!1);return}if(n.title==="Insert Column Right"){d(!0);return}if(n.title==="Delete Column"){p();return}n.title==="Delete Table"&&I()}},f=i(()=>{t.update(()=>{if(a(e)){let n=u(e),l=F(e);H(n,l),o()}})},[t,o,e]),m=i(n=>{t.update(()=>{if(a(e)){let l=u(e),c=F(e),r=$(t,l);G(l,c,n,1,r)}o()})},[t,e,o]),d=i(n=>{t.update(()=>{if(a(e)){let l=u(e),c=y(e),r=$(t,l);K(l,c,n,1,r)}o()})},[t,e,o]),p=i(()=>{t.update(()=>{if(a(e)){let n=u(e),l=y(e);U(n,l),o()}})},[t,e,o]),I=i(()=>{t.update(()=>{a(e)&&(u(e).remove(),o())})},[t,e,o]);return A.createElement(M,{initialSource:W,onItemClick:s})}function ae(){let[t]=N(),[e,o]=E(null),[s,f]=E(null),{context:m,floating:d,reference:p,strategy:I,x:n,y:l}=j({placement:"right",strategy:"absolute",open:e!==null,onOpenChange:()=>o(null)}),{getFloatingProps:c}=L([S(m,{ancestorScroll:!0})]),r=i(()=>{let g=B(),w=window.getSelection(),{activeElement:C}=document;if(g==null){o(null);return}let x=t.getRootElement();if(O(g)&&x!==null&&w!==null&&x.contains(w.anchorNode)){let R=k(g.anchor.getNode());if(R==null){o(null);return}let b=t.getElementByKey(R.getKey());if(b==null){o(null);return}b.classList.add(...T.focused),o(R),p(b),f(b)}else C||o(null)},[t,p]);h(()=>t.registerUpdateListener(()=>{t.getEditorState().read(()=>{r()})}),[t,r]),h(function(){return s?.classList.add(...T.focused),function(){s?.classList.remove(...T.focused)}},[s?.classList,e]);let P=()=>{f(null),o(null)};return A.createElement(D,{ref:d,open:e!==null,style:{top:l??"",left:n??"",position:I},...c({})},A.createElement(X,{editor:t,tableCellNode:e,onComplete:P}))}export{ae as a};
@@ -1 +0,0 @@
1
- import{a as h}from"./chunk-KZXCNQER.js";import{a as c}from"./chunk-YBFKG74H.js";import{a as g}from"./chunk-PMMRU33I.js";import t,{useState as s}from"react";import{useLexicalComposerContext as B}from"@lexical/react/LexicalComposerContext";import{Button as v,Icon as E}from"@jpmorganchase/mosaic-components";import{string as I,object as T}from"yup";import{ButtonBar as x,Dialog as w,DialogTitle as M,DialogContent as O,DialogActions as P}from"@salt-ds/lab";import{FormField as b,Input as S}from"@salt-ds/lab";var C=T({alt:I().required("Alternative Information is a required field").max(100,"Alternative Information must be fewer than 100 characters"),url:I().required("Url is required").url("Must be a valid Url")}),V={url:"https://"},H=()=>{let[D]=B(),[u,m]=s(!1),[e,F]=s(V),[r,d]=s(),i=()=>{m(!1)},y=()=>m(!0),f=o=>{let n=o.inner.reduce((a,{path:l,message:A})=>({...a,[l]:A}),{});d(n)},p=(o,n)=>{let{name:a}=o.target,l={...e,[a]:n};C.validateAt(a,l,{abortEarly:!1}).then(()=>{d({...r,[a]:void 0})},f),F(l)};return t.createElement(t.Fragment,null,t.createElement(g,{active:u,onClick:y,label:"Insert Image"},t.createElement(E,{name:"addDocument"})),t.createElement(w,{onClose:i,open:u,width:600},t.createElement("form",{onSubmit:async o=>{o.preventDefault(),C.validate(e,{abortEarly:!1}).then(()=>{let n={alt:e&&e.alt!==void 0?e.alt:null,url:e&&e.url!==void 0?e.url:null};D.dispatchCommand(c,n),i()},f)},noValidate:!0},t.createElement(M,null,"Insert Image"),t.createElement(O,null,t.createElement("div",{className:h.fullWidth},t.createElement(b,{label:"Url for image",validationStatus:r?.url?"error":void 0,helperText:r?.url},t.createElement(S,{value:e?.url,inputProps:{name:"url"},onChange:p})),t.createElement(b,{label:"Alternative Information (alt)",validationStatus:r?.alt?"error":void 0,helperText:r?.alt||"Provides alternative information for the image if for some reason it cannot be viewed"},t.createElement(S,{value:e?.alt,inputProps:{name:"alt"},onChange:p})))),t.createElement(P,null,t.createElement(x,null,t.createElement(v,{onClick:i},"Cancel"),t.createElement(v,{variant:"cta",type:"submit"},"Insert"))))))};export{H as a};
@@ -1 +0,0 @@
1
- import o from"react";import{Button as t,Icon as r}from"@jpmorganchase/mosaic-components";import{StaticInputAdornment as m}from"@salt-ds/lab";var i=({onSave:n})=>o.createElement(m,null,o.createElement(t,{onClick:n},o.createElement(r,{name:"save"})));export{i as a};
@@ -1 +0,0 @@
1
- import{a as r}from"./chunk-6TM3EYFS.js";import t,{useEffect as m,useState as g}from"react";import u from"clsx";import{P2 as c}from"@jpmorganchase/mosaic-components";var o=["Making a copy...","Applying changes...","Creating a Pull Request..."],p=o.length-1,S=({children:l,isComplete:a,isCurrent:e})=>t.createElement("div",{className:u(r.step,{[r.stepComplete]:a,[r.stepActive]:e})},t.createElement("span",{role:"img","aria-label":"emoji with party hat"},a?"\u{1F973}":null),t.createElement("span",{role:"img","aria-label":"person grimacing emoji "},e?"\u{1F603}":null),t.createElement("span",{role:"img","aria-label":"sleepy emoji"},!e&&!a?"\u{1F4A4}":null),t.createElement("span",{className:r.stepText},l),t.createElement("span",{role:"img","aria-label":"hourglass"},e?"\u231B":null)),I=({isRaising:l,error:a})=>{let[e,i]=g(0);return m(()=>{let n=setInterval(()=>{e===o.length-1?clearInterval(n):i(s=>s+1)},2e3);return function(){clearInterval(n)}},[e]),a?t.createElement(c,null,"\u{1F622} Sorry something has went wrong. Please try again later."):t.createElement(t.Fragment,null,o.map((n,s)=>t.createElement(S,{key:`step -${s}`,isComplete:e===p&&s===p?!l:e>s,isCurrent:e===s},n)))};export{I as a};
@@ -1 +0,0 @@
1
- import{a as o}from"./chunk-FFJYM47T.js";import l,{forwardRef as m}from"react";import T from"clsx";import{ToolbarButton as u}from"@salt-ds/lab";var d=m(function({active:t,className:r,onClick:e,children:a,...n},s){return l.createElement(u,{ref:s,onClick:e,style:{width:28,height:28},className:T(r,o.root,{[o.active]:t}),...n},a)});export{d as a};
@@ -1 +0,0 @@
1
- import{a as r}from"./chunk-WTMALWJU.js";import{f as a}from"./chunk-G57W376H.js";import t from"react";import{Icon as b}from"@jpmorganchase/mosaic-components";import{Toolbar as c,Tooltray as g,ToolbarButton as m}from"@salt-ds/lab";var y=({isLoggedIn:l=!1})=>{let{pageState:e,startEditing:i,stopEditing:n}=a(),o=e==="EDIT",s=()=>o?n():i(),d=l?o?"Cancel Editing":"Edit Page":"Login Required to Edit";return t.createElement(c,{"aria-label":"editor-controls",className:r.root},t.createElement(g,{"aria-label":"page editor controls tooltray"},t.createElement(m,{"aria-label":o?"cancel editing":"start editing",onClick:s,disabled:!l,label:d},t.createElement(b,{name:o?"delete":"edit"}))))};export{y as a};
@@ -1 +0,0 @@
1
- function ie(e){return e.split("-")[1]}function xe(e){return e==="y"?"height":"width"}function H(e){return e.split("-")[0]}function se(e){return["top","bottom"].includes(H(e))?"x":"y"}function ce(e){return typeof e!="number"?function(t){return{top:0,right:0,bottom:0,left:0,...t}}(e):{top:e,right:e,bottom:e,left:e}}function V(e){return{...e,top:e.y,left:e.x,right:e.x+e.width,bottom:e.y+e.height}}async function _(e,t){var r;t===void 0&&(t={});let{x:n,y:i,platform:o,rects:u,elements:f,strategy:h}=e,{boundary:O="clippingAncestors",rootBoundary:C="viewport",elementContext:a="floating",altBoundary:I=!1,padding:m=0}=t,R=ce(m),E=f[I?a==="floating"?"reference":"floating":a],T=V(await o.getClippingRect({element:(r=await(o.isElement==null?void 0:o.isElement(E)))==null||r?E:E.contextElement||await(o.getDocumentElement==null?void 0:o.getDocumentElement(f.floating)),boundary:O,rootBoundary:C,strategy:h})),P=a==="floating"?{...u.floating,x:n,y:i}:u.reference,d=await(o.getOffsetParent==null?void 0:o.getOffsetParent(f.floating)),p=await(o.isElement==null?void 0:o.isElement(d))&&await(o.getScale==null?void 0:o.getScale(d))||{x:1,y:1},w=V(o.convertOffsetParentRelativeRectToViewportRelativeRect?await o.convertOffsetParentRelativeRectToViewportRelativeRect({rect:P,offsetParent:d,strategy:h}):P);return{top:(T.top-w.top+R.top)/p.y,bottom:(w.bottom-T.bottom+R.bottom)/p.y,left:(T.left-w.left+R.left)/p.x,right:(w.right-T.right+R.right)/p.x}}var z=Math.min,Y=Math.max;var Ee=["top","right","bottom","left"],Ge=Ee.reduce((e,t)=>e.concat(t,t+"-start",t+"-end"),[]),Te={left:"right",right:"left",bottom:"top",top:"bottom"};function W(e){return e.replace(/left|right|bottom|top/g,t=>Te[t])}function Pe(e,t,r){r===void 0&&(r=!1);let n=ie(e),i=se(e),o=xe(i),u=i==="x"?n===(r?"end":"start")?"right":"left":n==="start"?"bottom":"top";return t.reference[o]>t.floating[o]&&(u=W(u)),{main:u,cross:W(u)}}var Ce={start:"end",end:"start"};function j(e){return e.replace(/start|end/g,t=>Ce[t])}var U=function(e){return e===void 0&&(e={}),{name:"flip",options:e,async fn(t){var r;let{placement:n,middlewareData:i,rects:o,initialPlacement:u,platform:f,elements:h}=t,{mainAxis:O=!0,crossAxis:C=!0,fallbackPlacements:a,fallbackStrategy:I="bestFit",fallbackAxisSideDirection:m="none",flipAlignment:R=!0,...E}=e,T=H(n),P=H(u)===u,d=await(f.isRTL==null?void 0:f.isRTL(h.floating)),p=a||(P||!R?[W(u)]:function(c){let v=W(c);return[j(c),v,j(v)]}(u));a||m==="none"||p.push(...function(c,v,s,y){let x=ie(c),b=function(M,F,te){let ne=["left","right"],re=["right","left"],be=["top","bottom"],we=["bottom","top"];switch(M){case"top":case"bottom":return te?F?re:ne:F?ne:re;case"left":case"right":return F?be:we;default:return[]}}(H(c),s==="start",y);return x&&(b=b.map(M=>M+"-"+x),v&&(b=b.concat(b.map(j)))),b}(u,R,m,d));let w=[u,...p],g=await _(t,E),L=[],A=((r=i.flip)==null?void 0:r.overflows)||[];if(O&&L.push(g[T]),C){let{main:c,cross:v}=Pe(n,o,d);L.push(g[c],g[v])}if(A=[...A,{placement:n,overflows:L}],!L.every(c=>c<=0)){var k,D;let c=(((k=i.flip)==null?void 0:k.index)||0)+1,v=w[c];if(v)return{data:{index:c,overflows:A},reset:{placement:v}};let s=(D=A.filter(y=>y.overflows[0]<=0).sort((y,x)=>y.overflows[1]-x.overflows[1])[0])==null?void 0:D.placement;if(!s)switch(I){case"bestFit":{var S;let y=(S=A.map(x=>[x.placement,x.overflows.filter(b=>b>0).reduce((b,M)=>b+M,0)]).sort((x,b)=>x[1]-b[1])[0])==null?void 0:S[0];y&&(s=y);break}case"initialPlacement":s=u}if(n!==s)return{reset:{placement:s}}}return{}}}};function oe(e){let t=z(...e.map(n=>n.left)),r=z(...e.map(n=>n.top));return{x:t,y:r,width:Y(...e.map(n=>n.right))-t,height:Y(...e.map(n=>n.bottom))-r}}var X=function(e){return e===void 0&&(e={}),{name:"inline",options:e,async fn(t){let{placement:r,elements:n,rects:i,platform:o,strategy:u}=t,{padding:f=2,x:h,y:O}=e,C=Array.from(await(o.getClientRects==null?void 0:o.getClientRects(n.reference))||[]),a=function(E){let T=E.slice().sort((p,w)=>p.y-w.y),P=[],d=null;for(let p=0;p<T.length;p++){let w=T[p];!d||w.y-d.y>d.height/2?P.push([w]):P[P.length-1].push(w),d=w}return P.map(p=>V(oe(p)))}(C),I=V(oe(C)),m=ce(f),R=await o.getElementRects({reference:{getBoundingClientRect:function(){if(a.length===2&&a[0].left>a[1].right&&h!=null&&O!=null)return a.find(E=>h>E.left-m.left&&h<E.right+m.right&&O>E.top-m.top&&O<E.bottom+m.bottom)||I;if(a.length>=2){if(se(r)==="x"){let g=a[0],L=a[a.length-1],A=H(r)==="top",k=g.top,D=L.bottom,S=A?g.left:L.left,c=A?g.right:L.right;return{top:k,bottom:D,left:S,right:c,width:c-S,height:D-k,x:S,y:k}}let E=H(r)==="left",T=Y(...a.map(g=>g.right)),P=z(...a.map(g=>g.left)),d=a.filter(g=>E?g.left===P:g.right===T),p=d[0].top,w=d[d.length-1].bottom;return{top:p,bottom:w,left:P,right:T,width:T-P,height:w-p,x:P,y:p}}return I}},floating:n.floating,strategy:u});return i.reference.x!==R.reference.x||i.reference.y!==R.reference.y||i.reference.width!==R.reference.width||i.reference.height!==R.reference.height?{reset:{rects:R}}:{}}}};function B(e){var t;return((t=e.ownerDocument)==null?void 0:t.defaultView)||window}function Oe(e){return B(e).getComputedStyle(e)}function pe(e){return e instanceof B(e).Node}function ge(e){return pe(e)?(e.nodeName||"").toLowerCase():""}function Ie(e){return e instanceof B(e).HTMLElement}function le(e){return typeof ShadowRoot>"u"?!1:e instanceof B(e).ShadowRoot||e instanceof ShadowRoot}function he(e){let{overflow:t,overflowX:r,overflowY:n,display:i}=Oe(e);return/auto|scroll|overlay|hidden|clip/.test(t+n+r)&&!["inline","contents"].includes(i)}function Me(e){return["html","body","#document"].includes(ge(e))}function Le(e){return((pe(e)?e.ownerDocument:e.document)||window.document).documentElement}function Ae(e){if(ge(e)==="html")return e;let t=e.assignedSlot||e.parentNode||le(e)&&e.host||Le(e);return le(t)?t.host:t}function Re(e){let t=Ae(e);return Me(t)?t.ownerDocument.body:Ie(t)&&he(t)?t:Re(t)}function N(e,t){var r;t===void 0&&(t=[]);let n=Re(e),i=n===((r=e.ownerDocument)==null?void 0:r.body),o=B(n);return i?t.concat(o,o.visualViewport||[],he(n)?n:[]):t.concat(n,N(n))}import*as K from"react";import{useLayoutEffect as nt,useEffect as rt}from"react";import*as ke from"react-dom";import*as l from"react";import{useLayoutEffect as at,useEffect as ft,useRef as dt}from"react";import{createPortal as pt,flushSync as gt}from"react-dom";var ht=l["useId".toString()];var Fe=l.createContext(null),Ne=l.createContext(null),He=()=>{var e;return((e=l.useContext(Fe))==null?void 0:e.id)||null},_e=()=>l.useContext(Ne);function ye(e){return e?.ownerDocument||document}function Be(){let e=navigator.userAgentData;return e!=null&&e.platform?e.platform:navigator.platform}function Ve(){let e=navigator.userAgentData;return e&&Array.isArray(e.brands)?e.brands.map(t=>{let{brand:r,version:n}=t;return r+"/"+n}).join(" "):navigator.userAgent}function ee(e){return ye(e).defaultView||window}function q(e){return e?e instanceof ee(e).Element:!1}function We(e){return e?e instanceof ee(e).HTMLElement:!1}function Ke(e){if(e.mozInputSource===0&&e.isTrusted)return!0;let t=/Android/i;return(t.test(Be())||t.test(Ve()))&&e.pointerType?e.type==="click"&&e.buttons===1:e.detail===0&&!e.pointerType}function je(e){return e.width===0&&e.height===0||e.width===1&&e.height===1&&e.pressure===0&&e.detail===0&&e.pointerType!=="mouse"||e.width<1&&e.height<1&&e.pressure===0&&e.detail===0}function G(e,t){let r=e.filter(i=>{var o;return i.parentId===t&&((o=i.context)==null?void 0:o.open)}),n=r;for(;n.length;)n=e.filter(i=>{var o;return(o=n)==null?void 0:o.some(u=>{var f;return i.parentId===u.id&&((f=i.context)==null?void 0:f.open)})}),r=r.concat(n);return r}function ze(e){return"composedPath"in e?e.composedPath()[0]:e.target}var Ye=l["useInsertionEffect".toString()],Ue=Ye||(e=>e());function Z(e){let t=l.useRef(()=>{});return Ue(()=>{t.current=e}),l.useCallback(function(){for(var r=arguments.length,n=new Array(r),i=0;i<r;i++)n[i]=arguments[i];return t.current==null?void 0:t.current(...n)},[])}function Q(e,t){if(t==null)return!1;if("composedPath"in e)return e.composedPath().includes(t);let r=e;return r.target!=null&&t.contains(r.target)}var Xe={pointerdown:"onPointerDown",mousedown:"onMouseDown",click:"onClick"},$e={pointerdown:"onPointerDownCapture",mousedown:"onMouseDownCapture",click:"onClickCapture"},qe=e=>{var t,r;return{escapeKeyBubbles:typeof e=="boolean"?e:(t=e?.escapeKey)!=null?t:!1,outsidePressBubbles:typeof e=="boolean"?e:(r=e?.outsidePress)!=null?r:!0}},Rt=function(e,t){t===void 0&&(t={});let{open:r,onOpenChange:n,events:i,nodeId:o,elements:{reference:u,domReference:f,floating:h},dataRef:O}=e,{enabled:C=!0,escapeKey:a=!0,outsidePress:I=!0,outsidePressEvent:m="pointerdown",referencePress:R=!1,referencePressEvent:E="pointerdown",ancestorScroll:T=!1,bubbles:P}=t,d=_e(),p=He()!=null,w=Z(typeof I=="function"?I:()=>!1),g=typeof I=="function"?w:I,L=l.useRef(!1),{escapeKeyBubbles:A,outsidePressBubbles:k}=qe(P),D=Z(c=>{if(!r||!C||!a||c.key!=="Escape")return;let v=d?G(d.nodesRef.current,o):[];if(!A&&(c.stopPropagation(),v.length>0)){let s=!0;if(v.forEach(y=>{var x;if((x=y.context)!=null&&x.open&&!y.context.dataRef.current.__escapeKeyBubbles){s=!1;return}}),!s)return}i.emit("dismiss",{type:"escapeKey",data:{returnFocus:{preventScroll:!1}}}),n(!1)}),S=Z(c=>{let v=L.current;if(L.current=!1,v||typeof g=="function"&&!g(c))return;let s=ze(c);if(We(s)&&h){let b=s.clientWidth>0&&s.scrollWidth>s.clientWidth,M=s.clientHeight>0&&s.scrollHeight>s.clientHeight,F=M&&c.offsetX>s.clientWidth;if(M&&ee(h).getComputedStyle(s).direction==="rtl"&&(F=c.offsetX<=s.offsetWidth-s.clientWidth),F||b&&c.offsetY>s.clientHeight)return}let y=d&&G(d.nodesRef.current,o).some(b=>{var M;return Q(c,(M=b.context)==null?void 0:M.elements.floating)});if(Q(c,h)||Q(c,f)||y)return;let x=d?G(d.nodesRef.current,o):[];if(x.length>0){let b=!0;if(x.forEach(M=>{var F;if((F=M.context)!=null&&F.open&&!M.context.dataRef.current.__outsidePressBubbles){b=!1;return}}),!b)return}i.emit("dismiss",{type:"outsidePress",data:{returnFocus:p?{preventScroll:!0}:Ke(c)||je(c)}}),n(!1)});return l.useEffect(()=>{if(!r||!C)return;O.current.__escapeKeyBubbles=A,O.current.__outsidePressBubbles=k;function c(){n(!1)}let v=ye(h);a&&v.addEventListener("keydown",D),g&&v.addEventListener(m,S);let s=[];return T&&(q(f)&&(s=N(f)),q(h)&&(s=s.concat(N(h))),!q(u)&&u&&u.contextElement&&(s=s.concat(N(u.contextElement)))),s=s.filter(y=>{var x;return y!==((x=v.defaultView)==null?void 0:x.visualViewport)}),s.forEach(y=>{y.addEventListener("scroll",c,{passive:!0})}),()=>{a&&v.removeEventListener("keydown",D),g&&v.removeEventListener(m,S),s.forEach(y=>{y.removeEventListener("scroll",c)})}},[O,h,f,u,a,g,m,r,n,T,C,A,k,D,S]),l.useEffect(()=>{L.current=!1},[g,m]),l.useMemo(()=>C?{reference:{onKeyDown:D,[Xe[E]]:()=>{R&&(i.emit("dismiss",{type:"referencePress",data:{returnFocus:!1}}),n(!1))}},floating:{onKeyDown:D,[$e[m]]:()=>{L.current=!0}}}:{},[C,i,R,m,E,n,D])};function J(e,t,r){let n=new Map;return{...r==="floating"&&{tabIndex:-1},...e,...t.map(i=>i?i[r]:null).concat(e).reduce((i,o)=>(o&&Object.entries(o).forEach(u=>{let[f,h]=u;if(f.indexOf("on")===0){if(n.has(f)||n.set(f,[]),typeof h=="function"){var O;(O=n.get(f))==null||O.push(h),i[f]=function(){for(var C,a=arguments.length,I=new Array(a),m=0;m<a;m++)I[m]=arguments[m];return(C=n.get(f))==null?void 0:C.map(R=>R(...I)).find(R=>R!==void 0)}}}else i[f]=h}),i),{})}}var vt=function(e){e===void 0&&(e=[]);let t=e,r=l.useCallback(o=>J(o,e,"reference"),t),n=l.useCallback(o=>J(o,e,"floating"),t),i=l.useCallback(o=>J(o,e,"item"),e.map(o=>o?.item));return l.useMemo(()=>({getReferenceProps:r,getFloatingProps:n,getItemProps:i}),[r,n,i])};export{U as a,X as b,Rt as c,vt as d};
@@ -1 +0,0 @@
1
- import{a as c}from"./chunk-4CRC7NS5.js";import{a as f,b as u,c as b,d as y}from"./chunk-R6U5TOP4.js";import{a as d}from"./chunk-VO6JTL4J.js";import{c as S}from"./chunk-JJ5K5LVL.js";import o,{useCallback as L,useEffect as N,useState as T}from"react";import{useLexicalComposerContext as A}from"@lexical/react/LexicalComposerContext";import{mergeRegister as M}from"@lexical/utils";import{$getSelection as R,$isRangeSelection as _,COMMAND_PRIORITY_LOW as k,SELECTION_CHANGE_COMMAND as w}from"lexical";import{Toolbar as D,Tooltray as B}from"@salt-ds/lab";import{useFloatingUI as W}from"@salt-ds/core";function V(){let[e]=A(),[t,i]=T(null),[s,r]=T(!1),P=t?{middleware:[u(t),f({fallbackPlacements:["bottom-start","top-start"]})]}:{placement:"bottom-start",strategy:"absolute"},{context:x,floating:C,reference:m,strategy:F}=W({placement:"bottom-start",open:s,onOpenChange:r,strategy:"absolute",...P}),{getFloatingProps:I}=y([b(x,{ancestorScroll:!0})]),n=L(()=>{let a=R(),p=window.getSelection(),g=p?.anchorNode?.parentElement;if(_(a)&&g){m(g);let E=p.getRangeAt(0),{x:O,y:h,height:U}=E.getBoundingClientRect();i({x:O,y:h+U}),r(!0)}else i(null),r(!1)},[m]);N(()=>M(e.registerUpdateListener(({editorState:a})=>{a.read(()=>{n()})}),e.registerCommand(w,()=>(n(),!1),k)),[e,n]);let l={position:F};return t&&(l={...l,top:t.y,left:t.x}),o.createElement(d,{ref:C,open:s,style:l,...I({})},o.createElement(D,{"aria-label":"page editing toolbar",style:{minWidth:"100px"}},o.createElement(c,{floating:!0}),o.createElement(B,{"aria-label":"text format tooltray"},o.createElement(S,null))))}export{V as a};
@@ -1 +0,0 @@
1
- import{b as o}from"./chunk-XP37MJCS.js";import r,{forwardRef as a}from"react";import{Portal as l,useWindow as m}from"@salt-ds/lab";import c from"clsx";var L=a(function(t,n){let{children:s,className:i,...e}=t,p=m();return e.open?r.createElement(l,null,r.createElement(p,{className:c(i,o.root),ref:n,...e},s)):null});export{L as a};
@@ -1 +0,0 @@
1
- import*as t from"react";import{RichTextPlugin as e}from"@lexical/react/LexicalRichTextPlugin";import{ContentEditable as o}from"@lexical/react/LexicalContentEditable";var i=()=>t.createElement(e,{contentEditable:t.createElement(o,null),placeholder:t.createElement("div",null,"Enter some text...")}),d=i;export{d as a};
@@ -1 +0,0 @@
1
- var r={root:"esx0bg0"};export{r as a};
@@ -1 +0,0 @@
1
- import{a as r}from"./chunk-WNTJMWYJ.js";import{a as o}from"./chunk-ESJNOEFD.js";import{TRANSFORMERS as m}from"@lexical/markdown";var p=[o,r,...m];export{p as a};
@@ -1 +0,0 @@
1
- import o from"react";import{ToolbarButton as t}from"@salt-ds/lab";import{Icon as n}from"@jpmorganchase/mosaic-components";import{useLexicalComposerContext as i}from"@lexical/react/LexicalComposerContext";import{INSERT_HORIZONTAL_RULE_COMMAND as m}from"@lexical/react/LexicalHorizontalRuleNode";var s=()=>{let[r]=i();return o.createElement(t,{onClick:()=>{r.dispatchCommand(m,void 0)}},o.createElement(n,{name:"minimize"}))};export{s as a};
@@ -1 +0,0 @@
1
- ._1sg4vms0{width:28px;height:28px}
@@ -1 +0,0 @@
1
- ._1sg4vms0{width:28px;height:28px}
@@ -1 +0,0 @@
1
- import{a}from"../../chunk-FFJYM47T.js";export{a as default};
@@ -1,7 +0,0 @@
1
- import React from 'react';
2
- import { ToolbarButtonProps } from '@salt-ds/lab';
3
- interface TextFormatToolbarButtonProps extends ToolbarButtonProps {
4
- active: boolean;
5
- }
6
- export declare const TextFormatToolbarButton: React.ForwardRefExoticComponent<TextFormatToolbarButtonProps & React.RefAttributes<HTMLButtonElement>>;
7
- export {};
@@ -1 +0,0 @@
1
- import{a}from"../../chunk-PMMRU33I.js";import"../../chunk-FFJYM47T.js";export{a as TextFormatToolbarButton};
@@ -1,10 +0,0 @@
1
- import { style } from '@vanilla-extract/css';
2
- import { primaryColor } from '@jpmorganchase/mosaic-theme';
3
-
4
- export default {
5
- active: primaryColor({ variant: 'regular' }),
6
- root: style({
7
- width: '28px',
8
- height: '28px'
9
- })
10
- };
@@ -1,29 +0,0 @@
1
- import React, { forwardRef, Ref } from 'react';
2
- import classnames from 'clsx';
3
- import { ToolbarButton, ToolbarButtonProps } from '@salt-ds/lab';
4
-
5
- import styles from './TextFormatToolbarButton.css';
6
-
7
- interface TextFormatToolbarButtonProps extends ToolbarButtonProps {
8
- active: boolean;
9
- }
10
-
11
- export const TextFormatToolbarButton = forwardRef(function TextFormatToolbarButton(
12
- { active, className, onClick, children, ...rest }: TextFormatToolbarButtonProps,
13
- ref: Ref<HTMLButtonElement>
14
- ) {
15
- return (
16
- <ToolbarButton
17
- ref={ref}
18
- onClick={onClick}
19
- // TODO remove once Salt ToolbarButton supports className overrides
20
- style={{ width: 28, height: 28 }}
21
- className={classnames(className, styles.root, {
22
- [styles.active]: active
23
- })}
24
- {...rest}
25
- >
26
- {children}
27
- </ToolbarButton>
28
- );
29
- });