\n );\n }\n}","import React from 'react';\nimport './app.scss';\nimport LocalEditor from './lib/components/LocalEditor';\n\nfunction App() {\n return (\n
\n \n
\n );\n}\n\nexport default App;\n","// This optional code is used to register a service worker.\n// register() is not called by default.\n\n// This lets the app load faster on subsequent visits in production, and gives\n// it offline capabilities. However, it also means that developers (and users)\n// will only see deployed updates on subsequent visits to a page, after all the\n// existing tabs open on the page have been closed, since previously cached\n// resources are updated in the background.\n\n// To learn more about the benefits of this model and instructions on how to\n// opt-in, read https://bit.ly/CRA-PWA\n\nconst isLocalhost = Boolean(\n window.location.hostname === 'localhost' ||\n // [::1] is the IPv6 localhost address.\n window.location.hostname === '[::1]' ||\n // 127.0.0.0/8 are considered localhost for IPv4.\n window.location.hostname.match(\n /^127(?:\\.(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)){3}$/\n )\n);\n\nexport function register(config) {\n if (process.env.NODE_ENV === 'production' && 'serviceWorker' in navigator) {\n // The URL constructor is available in all browsers that support SW.\n const publicUrl = new URL(process.env.PUBLIC_URL, window.location.href);\n if (publicUrl.origin !== window.location.origin) {\n // Our service worker won't work if PUBLIC_URL is on a different origin\n // from what our page is served on. This might happen if a CDN is used to\n // serve assets; see https://github.com/facebook/create-react-app/issues/2374\n return;\n }\n\n window.addEventListener('load', () => {\n const swUrl = `${process.env.PUBLIC_URL}/service-worker.js`;\n\n if (isLocalhost) {\n // This is running on localhost. Let's check if a service worker still exists or not.\n checkValidServiceWorker(swUrl, config);\n\n // Add some additional logging to localhost, pointing developers to the\n // service worker/PWA documentation.\n navigator.serviceWorker.ready.then(() => {\n console.log(\n 'This web app is being served cache-first by a service ' +\n 'worker. To learn more, visit https://bit.ly/CRA-PWA'\n );\n });\n } else {\n // Is not localhost. Just register service worker\n registerValidSW(swUrl, config);\n }\n });\n }\n}\n\nfunction registerValidSW(swUrl, config) {\n navigator.serviceWorker\n .register(swUrl)\n .then(registration => {\n registration.onupdatefound = () => {\n const installingWorker = registration.installing;\n if (installingWorker == null) {\n return;\n }\n installingWorker.onstatechange = () => {\n if (installingWorker.state === 'installed') {\n if (navigator.serviceWorker.controller) {\n // At this point, the updated precached content has been fetched,\n // but the previous service worker will still serve the older\n // content until all client tabs are closed.\n console.log(\n 'New content is available and will be used when all ' +\n 'tabs for this page are closed. See https://bit.ly/CRA-PWA.'\n );\n\n // Execute callback\n if (config && config.onUpdate) {\n config.onUpdate(registration);\n }\n } else {\n // At this point, everything has been precached.\n // It's the perfect time to display a\n // \"Content is cached for offline use.\" message.\n console.log('Content is cached for offline use.');\n\n // Execute callback\n if (config && config.onSuccess) {\n config.onSuccess(registration);\n }\n }\n }\n };\n };\n })\n .catch(error => {\n console.error('Error during service worker registration:', error);\n });\n}\n\nfunction checkValidServiceWorker(swUrl, config) {\n // Check if the service worker can be found. If it can't reload the page.\n fetch(swUrl, {\n headers: { 'Service-Worker': 'script' },\n })\n .then(response => {\n // Ensure service worker exists, and that we really are getting a JS file.\n const contentType = response.headers.get('content-type');\n if (\n response.status === 404 ||\n (contentType != null && contentType.indexOf('javascript') === -1)\n ) {\n // No service worker found. Probably a different app. Reload the page.\n navigator.serviceWorker.ready.then(registration => {\n registration.unregister().then(() => {\n window.location.reload();\n });\n });\n } else {\n // Service worker found. Proceed as normal.\n registerValidSW(swUrl, config);\n }\n })\n .catch(() => {\n console.log(\n 'No internet connection found. App is running in offline mode.'\n );\n });\n}\n\nexport function unregister() {\n if ('serviceWorker' in navigator) {\n navigator.serviceWorker.ready\n .then(registration => {\n registration.unregister();\n })\n .catch(error => {\n console.error(error.message);\n });\n }\n}\n","import React from 'react';\nimport ReactDOM from 'react-dom';\nimport './index.css';\nimport App from './App';\nimport * as serviceWorker from './serviceWorker';\n\nReactDOM.render(\n \n \n ,\n document.getElementById('root')\n);\n\n// If you want your app to work offline and load faster, you can change\n// unregister() to register() below. Note this comes with some pitfalls.\n// Learn more about service workers: https://bit.ly/CRA-PWA\nserviceWorker.unregister();\n"],"sourceRoot":""}
\ No newline at end of file
diff --git a/build/static/js/main.28a00ef4.chunk.js b/build/static/js/main.c2094a5b.chunk.js
similarity index 77%
rename from build/static/js/main.28a00ef4.chunk.js
rename to build/static/js/main.c2094a5b.chunk.js
index 51e58a0..fa13f4a 100644
--- a/build/static/js/main.28a00ef4.chunk.js
+++ b/build/static/js/main.c2094a5b.chunk.js
@@ -1,2 +1,2 @@
-(this["webpackJsonpsn-rme"]=this["webpackJsonpsn-rme"]||[]).push([[0],{130:function(e,t,n){e.exports=n(373)},135:function(e,t,n){},136:function(e,t,n){},373:function(e,t,n){"use strict";n.r(t);var o=n(1),a=n.n(o),r=n(17),c=n.n(r),i=(n(135),n(136),n(32)),s=n(26),l=n(55),u=n(54),d=n(24),h=n(124),g=n.n(h),b=n(129),m=n(128),k=n.n(m),v=function(){function e(){Object(i.a)(this,e),this.updateObservers=[],this.initiateBridge()}return Object(s.a)(e,null,[{key:"get",value:function(){return null==this.instance&&(this.instance=new e),this.instance}}]),Object(s.a)(e,[{key:"addUpdateObserver",value:function(e){var t={callback:e};return this.updateObservers.push(t),t}},{key:"notifyObserversOfUpdate",value:function(){var e,t=Object(b.a)(this.updateObservers);try{for(t.s();!(e=t.n()).done;){e.value.callback()}}catch(n){t.e(n)}finally{t.f()}}},{key:"getNote",value:function(){return this.note}},{key:"initiateBridge",value:function(){var e=this;this.componentManager=new k.a([{name:"stream-context-item"}],(function(){})),this.componentManager.streamContextItem((function(t){e.note=t,e.notifyObserversOfUpdate()})),this.componentManager.streamItems(["SN|Component","SN|Theme","SF|Extension"],(function(t){e.items=t.filter((function(e){return!e.isMetadataUpdate}))}))}},{key:"save",value:function(){var e=this;if(this.note){var t=this.note;t.content&&t.content.text&&(t.content.text=t.content.text.replace(/\n\\/g,"\n")),this.componentManager.saveItemWithPresave(t,(function(){t=e.note}))}}}]),e}();v.instance=null;var f=n(33),y={almostBlack:"#181A1B",lightBlack:"#2F3336",almostWhite:"#E6E6E6",white:"#FFF",white10:"rgba(255, 255, 255, 0.1)",black:"#000",black10:"rgba(0, 0, 0, 0.1)",primary:"#1AB6FF",greyLight:"#F4F7FA",grey:"#E8EBED",greyMid:"#C5CCD3",greyDark:"#DAE1E9"},p=Object(f.a)(Object(f.a)({},y),{},{fontFamily:"var(--sn-stylekit-sans-serif-font)",fontFamilyMono:"'SFMono-Regular',Consolas,'Liberation Mono', Menlo, Courier,monospace",fontWeight:400,zIndex:100,link:"var(--sn-stylekit-info-color)",placeholder:"var(--sn-stylekit-input-placeholder-color)",textSecondary:"#4E5C6E",textLight:y.white,textHighlight:"#ff0",selected:y.primary,codeComment:"var(--sn-stylekit-secondary-foreground-color)",codePunctuation:"var(--sn-stylekit-contrast-backround-color)",codeNumber:"#d73a49",codeProperty:"#c08b30",codeTag:"#3d8fd1",codeString:"var(--sn-stylekit-success-color)",codeSelector:"#6679cc",codeAttr:"#c76b29",codeEntity:"#22a2c9",codeKeyword:"var(--sn-stylekit-info-color)",codeFunction:"#6f42c1",codeStatement:"#22a2c9",codePlaceholder:"#3d8fd1",codeInserted:"#202746",codeImportant:"#c94922",blockToolbarBackground:y.white,blockToolbarTrigger:y.greyMid,blockToolbarTriggerIcon:y.white,blockToolbarItem:y.almostBlack,blockToolbarText:y.almostBlack,blockToolbarHoverBackground:y.greyLight,blockToolbarDivider:y.greyMid,noticeInfoBackground:"#F5BE31",noticeInfoText:y.almostBlack,noticeTipBackground:"#9E5CF7",noticeTipText:y.white,noticeWarningBackground:"#FF5C80",noticeWarningText:y.white}),w=Object(f.a)(Object(f.a)({},p),{},{background:"transparent",text:"var(--sn-stylekit-paragraph-text-color)",code:"var(--sn-stylekit-secondary-foreground-color)",cursor:"var(--sn-stylekit-contrast-foreground-color)",divider:y.greyMid,toolbarBackground:y.lightBlack,toolbarInput:y.white10,toolbarItem:y.white,tableDivider:"var(--sn-stylekit-secondary-foreground-color)",tableSelected:"var(--sn-stylekit-secondary-foreground-color)",tableSelectedBackground:"var(--sn-stylekit-contrast-background-color)",quote:"var(--sn-stylekit-secondary-foreground-color)",codeBackground:"var(--sn-stylekit-secondary-background-color)",codeBorder:"var(--sn-stylekit-secondary-foreground-color)",horizontalRule:"var(--sn-stylekit-input-placeholder-color)",imageErrorBackground:y.greyLight}),O=function(e){Object(l.a)(n,e);var t=Object(u.a)(n);function n(){return Object(i.a)(this,n),t.apply(this,arguments)}return Object(s.a)(n,[{key:"render",value:function(){var e=this.props.attrs.matches[1];return a.a.createElement("iframe",{src:"https://www.youtube.com/embed/".concat(e,"?modestbranding=1")})}}]),n}(a.a.Component),B=function(e){Object(l.a)(n,e);var t=Object(u.a)(n);function n(e){var o;return Object(i.a)(this,n),(o=t.call(this,e)).onChange=Object(d.debounce)((function(e){var t=e(),n=o.state.note;n.content.text=t,o.setState({note:n}),v.get().save()})),o.state={},o}return Object(s.a)(n,[{key:"componentDidMount",value:function(){var e=this;v.get().addUpdateObserver((function(){var t=v.get().getNote(),n=!e.state.note||e.state.note&&e.state.note.uuid!=t.uuid;e.setState({note:v.get().getNote()}),n&&e.updateMarkdown()}))}},{key:"updateMarkdown",value:function(){var e=this.state.note.content.text.replace(/(\n{2})(\n+)/g,(function(e,t,n){return t+n.replace(/(\n)/g,"\\$1")}));this.setState({markdown:e})}},{key:"getNoteContents",value:function(){return this.state.note?this.state.note.content.text:""}},{key:"render",value:function(){return a.a.createElement("div",null,a.a.createElement(g.a,{value:this.state.markdown,placeholder:"",autoFocus:!0,onChange:this.onChange.bind(this),theme:w,embeds:[{title:"YouTube",keywords:"youtube video tube google",icon:function(){return a.a.createElement("img",{src:"https://upload.wikimedia.org/wikipedia/commons/7/75/YouTube_social_white_squircle_%282017%29.svg",width:24,height:24})},matcher:function(e){return e.match(/(?:https?:\/\/)?(?:www\.)?youtu\.?be(?:\.com)?\/?.*(?:watch|embed)?(?:.*v=|v\/|\/)([a-zA-Z0-9_-]{11})$/i)},component:O}]}))}}]),n}(a.a.Component);var E=function(){return a.a.createElement("div",{className:"App"},a.a.createElement(B,null))};Boolean("localhost"===window.location.hostname||"[::1]"===window.location.hostname||window.location.hostname.match(/^127(?:\.(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)){3}$/));c.a.render(a.a.createElement(a.a.StrictMode,null,a.a.createElement(E,null)),document.getElementById("root")),"serviceWorker"in navigator&&navigator.serviceWorker.ready.then((function(e){e.unregister()})).catch((function(e){console.error(e.message)}))}},[[130,1,2]]]);
-//# sourceMappingURL=main.28a00ef4.chunk.js.map
\ No newline at end of file
+(this["webpackJsonpsn-rme"]=this["webpackJsonpsn-rme"]||[]).push([[0],{130:function(e,t,n){e.exports=n(373)},135:function(e,t,n){},136:function(e,t,n){},373:function(e,t,n){"use strict";n.r(t);var o=n(1),a=n.n(o),r=n(17),c=n.n(r),i=(n(135),n(136),n(32)),s=n(26),l=n(55),u=n(54),d=n(24),h=n(124),g=n.n(h),b=n(129),m=n(128),k=n.n(m),v=function(){function e(){Object(i.a)(this,e),this.updateObservers=[],this.initiateBridge()}return Object(s.a)(e,null,[{key:"get",value:function(){return null==this.instance&&(this.instance=new e),this.instance}}]),Object(s.a)(e,[{key:"addUpdateObserver",value:function(e){var t={callback:e};return this.updateObservers.push(t),t}},{key:"notifyObserversOfUpdate",value:function(){var e,t=Object(b.a)(this.updateObservers);try{for(t.s();!(e=t.n()).done;){e.value.callback()}}catch(n){t.e(n)}finally{t.f()}}},{key:"getNote",value:function(){return this.note}},{key:"initiateBridge",value:function(){var e=this;this.componentManager=new k.a([{name:"stream-context-item"}],(function(){})),this.componentManager.streamContextItem((function(t){e.note=t,e.notifyObserversOfUpdate()})),this.componentManager.streamItems(["SN|Component","SN|Theme","SF|Extension"],(function(t){e.items=t.filter((function(e){return!e.isMetadataUpdate}))}))}},{key:"save",value:function(){var e=this;if(this.note){var t=this.note;t.content&&t.content.text&&(t.content.text=t.content.text.replace(/\n\\/g,"\n")),this.componentManager.saveItemWithPresave(t,(function(){t=e.note}))}}}]),e}();v.instance=null;var f=n(33),y={almostBlack:"#181A1B",lightBlack:"#2F3336",almostWhite:"#E6E6E6",white:"#FFF",white10:"rgba(255, 255, 255, 0.1)",black:"#000",black10:"rgba(0, 0, 0, 0.1)",primary:"#1AB6FF",greyLight:"#F4F7FA",grey:"#E8EBED",greyMid:"#C5CCD3",greyDark:"#DAE1E9"},p=Object(f.a)(Object(f.a)({},y),{},{fontFamily:"var(--sn-stylekit-sans-serif-font)",fontFamilyMono:"'SFMono-Regular',Consolas,'Liberation Mono', Menlo, Courier,monospace",fontWeight:400,zIndex:100,link:"var(--sn-stylekit-info-color)",placeholder:"var(--sn-stylekit-input-placeholder-color)",textSecondary:"#4E5C6E",textLight:y.white,textHighlight:"#ff0",selected:y.primary,codeComment:"var(--sn-stylekit-secondary-foreground-color)",codePunctuation:"var(--sn-stylekit-contrast-backround-color)",codeNumber:"#d73a49",codeProperty:"#c08b30",codeTag:"#3d8fd1",codeString:"var(--sn-stylekit-success-color)",codeSelector:"#6679cc",codeAttr:"#c76b29",codeEntity:"#22a2c9",codeKeyword:"var(--sn-stylekit-info-color)",codeFunction:"#6f42c1",codeStatement:"#22a2c9",codePlaceholder:"#3d8fd1",codeInserted:"#202746",codeImportant:"#c94922",blockToolbarBackground:y.white,blockToolbarTrigger:y.greyMid,blockToolbarTriggerIcon:y.white,blockToolbarItem:y.almostBlack,blockToolbarText:y.almostBlack,blockToolbarHoverBackground:y.greyLight,blockToolbarDivider:y.greyMid,noticeInfoBackground:"#F5BE31",noticeInfoText:y.almostBlack,noticeTipBackground:"#9E5CF7",noticeTipText:y.white,noticeWarningBackground:"#FF5C80",noticeWarningText:y.white}),w=Object(f.a)(Object(f.a)({},p),{},{background:"transparent",text:"var(--sn-stylekit-paragraph-text-color)",code:"var(--sn-stylekit-secondary-foreground-color)",cursor:"var(--sn-stylekit-contrast-foreground-color)",divider:y.greyMid,toolbarBackground:y.lightBlack,toolbarInput:y.white10,toolbarItem:y.white,tableDivider:"var(--sn-stylekit-secondary-foreground-color)",tableSelected:"var(--sn-stylekit-secondary-foreground-color)",tableSelectedBackground:"var(--sn-stylekit-contrast-background-color)",quote:"var(--sn-stylekit-secondary-foreground-color)",codeBackground:"var(--sn-stylekit-secondary-background-color)",codeBorder:"var(--sn-stylekit-secondary-foreground-color)",horizontalRule:"var(--sn-stylekit-input-placeholder-color)",imageErrorBackground:y.greyLight}),O=function(e){Object(l.a)(n,e);var t=Object(u.a)(n);function n(){return Object(i.a)(this,n),t.apply(this,arguments)}return Object(s.a)(n,[{key:"render",value:function(){var e=this.props.attrs.matches[1];return a.a.createElement("iframe",{src:"https://www.youtube.com/embed/".concat(e,"?modestbranding=1")})}}]),n}(a.a.Component),B=function(e){Object(l.a)(n,e);var t=Object(u.a)(n);function n(e){var o;return Object(i.a)(this,n),(o=t.call(this,e)).onChange=Object(d.debounce)((function(e){var t=e(),n=o.state.note;n.content.text=t,o.setState({note:n}),v.get().save()})),o.state={},o}return Object(s.a)(n,[{key:"componentDidMount",value:function(){var e=this;v.get().addUpdateObserver((function(){var t=v.get().getNote(),n=!e.state.note||e.state.note&&e.state.note.uuid!=t.uuid;e.setState({note:v.get().getNote()}),n&&e.updateMarkdown()}))}},{key:"updateMarkdown",value:function(){var e=this.state.note.content.text.replace(/(\n{2})(\n+)/g,(function(e,t,n){return t+n.replace(/(\n)/g,"\\$1")}));""==e&&(e="\n"),this.setState({markdown:e})}},{key:"getNoteContents",value:function(){return this.state.note?this.state.note.content.text:""}},{key:"render",value:function(){return a.a.createElement("div",null,a.a.createElement(g.a,{value:this.state.markdown,placeholder:"",autoFocus:!0,onChange:this.onChange.bind(this),theme:w,embeds:[{title:"YouTube",keywords:"youtube video tube google",icon:function(){return a.a.createElement("img",{src:"https://upload.wikimedia.org/wikipedia/commons/7/75/YouTube_social_white_squircle_%282017%29.svg",width:24,height:24})},matcher:function(e){return e.match(/(?:https?:\/\/)?(?:www\.)?youtu\.?be(?:\.com)?\/?.*(?:watch|embed)?(?:.*v=|v\/|\/)([a-zA-Z0-9_-]{11})$/i)},component:O}]}))}}]),n}(a.a.Component);var E=function(){return a.a.createElement("div",{className:"App"},a.a.createElement(B,null))};Boolean("localhost"===window.location.hostname||"[::1]"===window.location.hostname||window.location.hostname.match(/^127(?:\.(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)){3}$/));c.a.render(a.a.createElement(a.a.StrictMode,null,a.a.createElement(E,null)),document.getElementById("root")),"serviceWorker"in navigator&&navigator.serviceWorker.ready.then((function(e){e.unregister()})).catch((function(e){console.error(e.message)}))}},[[130,1,2]]]);
+//# sourceMappingURL=main.c2094a5b.chunk.js.map
\ No newline at end of file
diff --git a/build/static/js/main.c2094a5b.chunk.js.map b/build/static/js/main.c2094a5b.chunk.js.map
new file mode 100644
index 0000000..e1878e5
--- /dev/null
+++ b/build/static/js/main.c2094a5b.chunk.js.map
@@ -0,0 +1 @@
+{"version":3,"sources":["lib/BridgeManager.js","lib/theme.js","lib/components/LocalEditor.js","App.js","serviceWorker.js","index.js"],"names":["BridgeManager","this","updateObservers","initiateBridge","instance","callback","observer","push","note","componentManager","ComponentManager","name","streamContextItem","item","notifyObserversOfUpdate","streamItems","items","filter","isMetadataUpdate","content","text","replace","saveItemWithPresave","colors","almostBlack","lightBlack","almostWhite","white","white10","black","black10","primary","greyLight","grey","greyMid","greyDark","base","fontFamily","fontFamilyMono","fontWeight","zIndex","link","placeholder","textSecondary","textLight","textHighlight","selected","codeComment","codePunctuation","codeNumber","codeProperty","codeTag","codeString","codeSelector","codeAttr","codeEntity","codeKeyword","codeFunction","codeStatement","codePlaceholder","codeInserted","codeImportant","blockToolbarBackground","blockToolbarTrigger","blockToolbarTriggerIcon","blockToolbarItem","blockToolbarText","blockToolbarHoverBackground","blockToolbarDivider","noticeInfoBackground","noticeInfoText","noticeTipBackground","noticeTipText","noticeWarningBackground","noticeWarningText","light","background","code","cursor","divider","toolbarBackground","toolbarInput","toolbarItem","tableDivider","tableSelected","tableSelectedBackground","quote","codeBackground","codeBorder","horizontalRule","imageErrorBackground","YoutubeEmbed","videoId","props","attrs","matches","src","React","Component","LocalEditor","onChange","debounce","value","state","setState","get","save","addUpdateObserver","getNote","refresh","uuid","updateMarkdown","markdown","m","p","q","autoFocus","bind","theme","embeds","title","keywords","icon","width","height","matcher","url","match","component","App","className","Boolean","window","location","hostname","ReactDOM","render","StrictMode","document","getElementById","navigator","serviceWorker","ready","then","registration","unregister","catch","error","console","message"],"mappings":"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","file":"static/js/main.c2094a5b.chunk.js","sourcesContent":["import ComponentManager from 'sn-components-api';\n\nexport default class BridgeManager {\n\n /* Singleton */\n static instance = null;\n static get() {\n if (this.instance == null) { this.instance = new BridgeManager(); }\n return this.instance;\n }\n\n constructor() {\n this.updateObservers = [];\n this.initiateBridge();\n }\n\n addUpdateObserver(callback) {\n let observer = { callback: callback };\n this.updateObservers.push(observer);\n return observer;\n }\n\n notifyObserversOfUpdate() {\n for (var observer of this.updateObservers) {\n observer.callback();\n }\n }\n\n getNote() {\n return this.note;\n }\n\n initiateBridge() {\n var permissions = [\n {\n name: \"stream-context-item\"\n // name: \"stream-items\"\n }\n ]\n\n this.componentManager = new ComponentManager(permissions, function () {\n // on ready\n });\n\n this.componentManager.streamContextItem((item) => {\n this.note = item;\n this.notifyObserversOfUpdate();\n })\n\n this.componentManager.streamItems([\"SN|Component\", \"SN|Theme\", \"SF|Extension\"], (items) => {\n this.items = items.filter((item) => {return !item.isMetadataUpdate});\n });\n }\n\n save() {\n if (this.note) {\n // Be sure to capture this object as a variable, as this.note may be reassigned in `streamContextItem`, so by the time\n // you modify it in the presave block, it may not be the same object anymore, so the presave values will not be applied to\n // the right object, and it will save incorrectly.\n let note = this.note;\n if (note.content && note.content.text) {\n note.content.text = note.content.text.replace(/\\n\\\\/g, '\\n');\n }\n this.componentManager.saveItemWithPresave(note, () => {\n note = this.note ;\n });\n }\n }\n\n}","const colors = {\n almostBlack: \"#181A1B\",\n lightBlack: \"#2F3336\",\n almostWhite: \"#E6E6E6\",\n white: \"#FFF\",\n white10: \"rgba(255, 255, 255, 0.1)\",\n black: \"#000\",\n black10: \"rgba(0, 0, 0, 0.1)\",\n primary: \"#1AB6FF\",\n greyLight: \"#F4F7FA\",\n grey: \"#E8EBED\",\n greyMid: \"#C5CCD3\",\n greyDark: \"#DAE1E9\",\n};\n\nexport const base = {\n ...colors,\n fontFamily:\n \"var(--sn-stylekit-sans-serif-font)\",\n fontFamilyMono:\n \"'SFMono-Regular',Consolas,'Liberation Mono', Menlo, Courier,monospace\",\n fontWeight: 400,\n zIndex: 100,\n link: 'var(--sn-stylekit-info-color)',\n placeholder: 'var(--sn-stylekit-input-placeholder-color)',\n textSecondary: \"#4E5C6E\",\n textLight: colors.white,\n textHighlight: '#ff0',\n selected: colors.primary,\n codeComment: 'var(--sn-stylekit-secondary-foreground-color)',\n codePunctuation: 'var(--sn-stylekit-contrast-backround-color)',\n codeNumber: \"#d73a49\",\n codeProperty: \"#c08b30\",\n codeTag: \"#3d8fd1\",\n codeString: \"var(--sn-stylekit-success-color)\",\n codeSelector: \"#6679cc\",\n codeAttr: \"#c76b29\",\n codeEntity: \"#22a2c9\",\n codeKeyword: 'var(--sn-stylekit-info-color)',\n codeFunction: \"#6f42c1\",\n codeStatement: \"#22a2c9\",\n codePlaceholder: \"#3d8fd1\",\n codeInserted: \"#202746\",\n codeImportant: \"#c94922\",\n\n blockToolbarBackground: colors.white,\n blockToolbarTrigger: colors.greyMid,\n blockToolbarTriggerIcon: colors.white,\n blockToolbarItem: colors.almostBlack,\n blockToolbarText: colors.almostBlack,\n blockToolbarHoverBackground: colors.greyLight,\n blockToolbarDivider: colors.greyMid,\n\n noticeInfoBackground: \"#F5BE31\",\n noticeInfoText: colors.almostBlack,\n noticeTipBackground: \"#9E5CF7\",\n noticeTipText: colors.white,\n noticeWarningBackground: \"#FF5C80\",\n noticeWarningText: colors.white,\n};\n\nexport const light = {\n ...base,\n background: 'transparent',\n text: 'var(--sn-stylekit-paragraph-text-color)',\n code: 'var(--sn-stylekit-secondary-foreground-color)',\n cursor: 'var(--sn-stylekit-contrast-foreground-color)',\n divider: colors.greyMid,\n\n toolbarBackground: colors.lightBlack,\n toolbarInput: colors.white10,\n toolbarItem: colors.white,\n\n tableDivider: 'var(--sn-stylekit-secondary-foreground-color)',\n tableSelected: 'var(--sn-stylekit-secondary-foreground-color)',\n tableSelectedBackground: 'var(--sn-stylekit-contrast-background-color)',\n\n quote: 'var(--sn-stylekit-secondary-foreground-color)',\n codeBackground: 'var(--sn-stylekit-secondary-background-color)',\n codeBorder: 'var(--sn-stylekit-secondary-foreground-color)',\n horizontalRule: 'var(--sn-stylekit-input-placeholder-color)',\n imageErrorBackground: colors.greyLight,\n};\n\nexport default light;","import React from 'react';\nimport { debounce } from \"lodash\";\nimport RichMarkdownEditor, { theme } from \"rich-markdown-editor\";\nimport BridgeManager from \"../BridgeManager\";\nimport light from '../theme';\n\n\nclass YoutubeEmbed extends React.Component {\n render() {\n const { attrs } = this.props;\n const videoId = attrs.matches[1];\n\n return (\n \n );\n }\n}\n\nexport default class LocalEditor extends React.Component {\n constructor(props){\n super(props);\n this.state = {};\n }\n\n componentDidMount() {\n BridgeManager.get().addUpdateObserver(() => {\n const note = BridgeManager.get().getNote();\n const refresh = !this.state.note\n || (this.state.note && this.state.note.uuid != note.uuid);\n this.setState({\n note: BridgeManager.get().getNote(),\n });\n if (refresh) {\n this.updateMarkdown();\n }\n });\n }\n\n updateMarkdown() {\n let markdown = this.state.note.content.text\n .replace(/(\\n{2})(\\n+)/g, (m, p, q) => p + q.replace(/(\\n)/g, '\\\\$1'));\n if (markdown == \"\") {\n markdown = \"\\n\";\n }\n this.setState({ markdown });\n }\n\n onChange = debounce((value) => {\n const text = value();\n let note = this.state.note;\n note.content.text = text;\n this.setState({ note: note });\n BridgeManager.get().save();\n })\n\n getNoteContents() {\n if (this.state.note) {\n return this.state.note.content.text;\n }\n return '';\n }\n\n render() {\n return (\n
\n );\n }\n}","import React from 'react';\nimport './app.scss';\nimport LocalEditor from './lib/components/LocalEditor';\n\nfunction App() {\n return (\n
\n \n
\n );\n}\n\nexport default App;\n","// This optional code is used to register a service worker.\n// register() is not called by default.\n\n// This lets the app load faster on subsequent visits in production, and gives\n// it offline capabilities. However, it also means that developers (and users)\n// will only see deployed updates on subsequent visits to a page, after all the\n// existing tabs open on the page have been closed, since previously cached\n// resources are updated in the background.\n\n// To learn more about the benefits of this model and instructions on how to\n// opt-in, read https://bit.ly/CRA-PWA\n\nconst isLocalhost = Boolean(\n window.location.hostname === 'localhost' ||\n // [::1] is the IPv6 localhost address.\n window.location.hostname === '[::1]' ||\n // 127.0.0.0/8 are considered localhost for IPv4.\n window.location.hostname.match(\n /^127(?:\\.(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)){3}$/\n )\n);\n\nexport function register(config) {\n if (process.env.NODE_ENV === 'production' && 'serviceWorker' in navigator) {\n // The URL constructor is available in all browsers that support SW.\n const publicUrl = new URL(process.env.PUBLIC_URL, window.location.href);\n if (publicUrl.origin !== window.location.origin) {\n // Our service worker won't work if PUBLIC_URL is on a different origin\n // from what our page is served on. This might happen if a CDN is used to\n // serve assets; see https://github.com/facebook/create-react-app/issues/2374\n return;\n }\n\n window.addEventListener('load', () => {\n const swUrl = `${process.env.PUBLIC_URL}/service-worker.js`;\n\n if (isLocalhost) {\n // This is running on localhost. Let's check if a service worker still exists or not.\n checkValidServiceWorker(swUrl, config);\n\n // Add some additional logging to localhost, pointing developers to the\n // service worker/PWA documentation.\n navigator.serviceWorker.ready.then(() => {\n console.log(\n 'This web app is being served cache-first by a service ' +\n 'worker. To learn more, visit https://bit.ly/CRA-PWA'\n );\n });\n } else {\n // Is not localhost. Just register service worker\n registerValidSW(swUrl, config);\n }\n });\n }\n}\n\nfunction registerValidSW(swUrl, config) {\n navigator.serviceWorker\n .register(swUrl)\n .then(registration => {\n registration.onupdatefound = () => {\n const installingWorker = registration.installing;\n if (installingWorker == null) {\n return;\n }\n installingWorker.onstatechange = () => {\n if (installingWorker.state === 'installed') {\n if (navigator.serviceWorker.controller) {\n // At this point, the updated precached content has been fetched,\n // but the previous service worker will still serve the older\n // content until all client tabs are closed.\n console.log(\n 'New content is available and will be used when all ' +\n 'tabs for this page are closed. See https://bit.ly/CRA-PWA.'\n );\n\n // Execute callback\n if (config && config.onUpdate) {\n config.onUpdate(registration);\n }\n } else {\n // At this point, everything has been precached.\n // It's the perfect time to display a\n // \"Content is cached for offline use.\" message.\n console.log('Content is cached for offline use.');\n\n // Execute callback\n if (config && config.onSuccess) {\n config.onSuccess(registration);\n }\n }\n }\n };\n };\n })\n .catch(error => {\n console.error('Error during service worker registration:', error);\n });\n}\n\nfunction checkValidServiceWorker(swUrl, config) {\n // Check if the service worker can be found. If it can't reload the page.\n fetch(swUrl, {\n headers: { 'Service-Worker': 'script' },\n })\n .then(response => {\n // Ensure service worker exists, and that we really are getting a JS file.\n const contentType = response.headers.get('content-type');\n if (\n response.status === 404 ||\n (contentType != null && contentType.indexOf('javascript') === -1)\n ) {\n // No service worker found. Probably a different app. Reload the page.\n navigator.serviceWorker.ready.then(registration => {\n registration.unregister().then(() => {\n window.location.reload();\n });\n });\n } else {\n // Service worker found. Proceed as normal.\n registerValidSW(swUrl, config);\n }\n })\n .catch(() => {\n console.log(\n 'No internet connection found. App is running in offline mode.'\n );\n });\n}\n\nexport function unregister() {\n if ('serviceWorker' in navigator) {\n navigator.serviceWorker.ready\n .then(registration => {\n registration.unregister();\n })\n .catch(error => {\n console.error(error.message);\n });\n }\n}\n","import React from 'react';\nimport ReactDOM from 'react-dom';\nimport './index.css';\nimport App from './App';\nimport * as serviceWorker from './serviceWorker';\n\nReactDOM.render(\n \n \n ,\n document.getElementById('root')\n);\n\n// If you want your app to work offline and load faster, you can change\n// unregister() to register() below. Note this comes with some pitfalls.\n// Learn more about service workers: https://bit.ly/CRA-PWA\nserviceWorker.unregister();\n"],"sourceRoot":""}
\ No newline at end of file
diff --git a/docs/asset-manifest.json b/docs/asset-manifest.json
index e3e2151..8121a3b 100644
--- a/docs/asset-manifest.json
+++ b/docs/asset-manifest.json
@@ -1,15 +1,15 @@
{
"files": {
"main.css": "./static/css/main.65867940.chunk.css",
- "main.js": "./static/js/main.28a00ef4.chunk.js",
- "main.js.map": "./static/js/main.28a00ef4.chunk.js.map",
+ "main.js": "./static/js/main.c2094a5b.chunk.js",
+ "main.js.map": "./static/js/main.c2094a5b.chunk.js.map",
"runtime-main.js": "./static/js/runtime-main.5a852d11.js",
"runtime-main.js.map": "./static/js/runtime-main.5a852d11.js.map",
"static/css/2.16816ef8.chunk.css": "./static/css/2.16816ef8.chunk.css",
"static/js/2.f3d62920.chunk.js": "./static/js/2.f3d62920.chunk.js",
"static/js/2.f3d62920.chunk.js.map": "./static/js/2.f3d62920.chunk.js.map",
"index.html": "./index.html",
- "precache-manifest.ce707d7c0fcf5467d881031286beccdc.js": "./precache-manifest.ce707d7c0fcf5467d881031286beccdc.js",
+ "precache-manifest.302d3c1726238430d7e309be964ff275.js": "./precache-manifest.302d3c1726238430d7e309be964ff275.js",
"service-worker.js": "./service-worker.js",
"static/css/2.16816ef8.chunk.css.map": "./static/css/2.16816ef8.chunk.css.map",
"static/css/main.65867940.chunk.css.map": "./static/css/main.65867940.chunk.css.map",
@@ -20,6 +20,6 @@
"static/css/2.16816ef8.chunk.css",
"static/js/2.f3d62920.chunk.js",
"static/css/main.65867940.chunk.css",
- "static/js/main.28a00ef4.chunk.js"
+ "static/js/main.c2094a5b.chunk.js"
]
}
\ No newline at end of file
diff --git a/docs/index.html b/docs/index.html
index ec38835..bae98eb 100644
--- a/docs/index.html
+++ b/docs/index.html
@@ -1 +1 @@
-React App
\ No newline at end of file
+React App
\ No newline at end of file
diff --git a/docs/precache-manifest.302d3c1726238430d7e309be964ff275.js b/docs/precache-manifest.302d3c1726238430d7e309be964ff275.js
new file mode 100644
index 0000000..c3cc8f3
--- /dev/null
+++ b/docs/precache-manifest.302d3c1726238430d7e309be964ff275.js
@@ -0,0 +1,30 @@
+self.__precacheManifest = (self.__precacheManifest || []).concat([
+ {
+ "revision": "35083f7ef6274af41a1fc3de48792f41",
+ "url": "./index.html"
+ },
+ {
+ "revision": "64bfbf1138f6fbf7fe68",
+ "url": "./static/css/2.16816ef8.chunk.css"
+ },
+ {
+ "revision": "e03e7e1ba1fb426f4a7e",
+ "url": "./static/css/main.65867940.chunk.css"
+ },
+ {
+ "revision": "64bfbf1138f6fbf7fe68",
+ "url": "./static/js/2.f3d62920.chunk.js"
+ },
+ {
+ "revision": "555e3d9985a574b9555a465f4c721686",
+ "url": "./static/js/2.f3d62920.chunk.js.LICENSE.txt"
+ },
+ {
+ "revision": "e03e7e1ba1fb426f4a7e",
+ "url": "./static/js/main.c2094a5b.chunk.js"
+ },
+ {
+ "revision": "3fae0b9d79f6c70627b6",
+ "url": "./static/js/runtime-main.5a852d11.js"
+ }
+]);
\ No newline at end of file
diff --git a/docs/service-worker.js b/docs/service-worker.js
index ed01932..da91b54 100644
--- a/docs/service-worker.js
+++ b/docs/service-worker.js
@@ -14,7 +14,7 @@
importScripts("https://storage.googleapis.com/workbox-cdn/releases/4.3.1/workbox-sw.js");
importScripts(
- "./precache-manifest.ce707d7c0fcf5467d881031286beccdc.js"
+ "./precache-manifest.302d3c1726238430d7e309be964ff275.js"
);
self.addEventListener('message', (event) => {
diff --git a/docs/static/js/main.c2094a5b.chunk.js b/docs/static/js/main.c2094a5b.chunk.js
new file mode 100644
index 0000000..fa13f4a
--- /dev/null
+++ b/docs/static/js/main.c2094a5b.chunk.js
@@ -0,0 +1,2 @@
+(this["webpackJsonpsn-rme"]=this["webpackJsonpsn-rme"]||[]).push([[0],{130:function(e,t,n){e.exports=n(373)},135:function(e,t,n){},136:function(e,t,n){},373:function(e,t,n){"use strict";n.r(t);var o=n(1),a=n.n(o),r=n(17),c=n.n(r),i=(n(135),n(136),n(32)),s=n(26),l=n(55),u=n(54),d=n(24),h=n(124),g=n.n(h),b=n(129),m=n(128),k=n.n(m),v=function(){function e(){Object(i.a)(this,e),this.updateObservers=[],this.initiateBridge()}return Object(s.a)(e,null,[{key:"get",value:function(){return null==this.instance&&(this.instance=new e),this.instance}}]),Object(s.a)(e,[{key:"addUpdateObserver",value:function(e){var t={callback:e};return this.updateObservers.push(t),t}},{key:"notifyObserversOfUpdate",value:function(){var e,t=Object(b.a)(this.updateObservers);try{for(t.s();!(e=t.n()).done;){e.value.callback()}}catch(n){t.e(n)}finally{t.f()}}},{key:"getNote",value:function(){return this.note}},{key:"initiateBridge",value:function(){var e=this;this.componentManager=new k.a([{name:"stream-context-item"}],(function(){})),this.componentManager.streamContextItem((function(t){e.note=t,e.notifyObserversOfUpdate()})),this.componentManager.streamItems(["SN|Component","SN|Theme","SF|Extension"],(function(t){e.items=t.filter((function(e){return!e.isMetadataUpdate}))}))}},{key:"save",value:function(){var e=this;if(this.note){var t=this.note;t.content&&t.content.text&&(t.content.text=t.content.text.replace(/\n\\/g,"\n")),this.componentManager.saveItemWithPresave(t,(function(){t=e.note}))}}}]),e}();v.instance=null;var f=n(33),y={almostBlack:"#181A1B",lightBlack:"#2F3336",almostWhite:"#E6E6E6",white:"#FFF",white10:"rgba(255, 255, 255, 0.1)",black:"#000",black10:"rgba(0, 0, 0, 0.1)",primary:"#1AB6FF",greyLight:"#F4F7FA",grey:"#E8EBED",greyMid:"#C5CCD3",greyDark:"#DAE1E9"},p=Object(f.a)(Object(f.a)({},y),{},{fontFamily:"var(--sn-stylekit-sans-serif-font)",fontFamilyMono:"'SFMono-Regular',Consolas,'Liberation Mono', Menlo, Courier,monospace",fontWeight:400,zIndex:100,link:"var(--sn-stylekit-info-color)",placeholder:"var(--sn-stylekit-input-placeholder-color)",textSecondary:"#4E5C6E",textLight:y.white,textHighlight:"#ff0",selected:y.primary,codeComment:"var(--sn-stylekit-secondary-foreground-color)",codePunctuation:"var(--sn-stylekit-contrast-backround-color)",codeNumber:"#d73a49",codeProperty:"#c08b30",codeTag:"#3d8fd1",codeString:"var(--sn-stylekit-success-color)",codeSelector:"#6679cc",codeAttr:"#c76b29",codeEntity:"#22a2c9",codeKeyword:"var(--sn-stylekit-info-color)",codeFunction:"#6f42c1",codeStatement:"#22a2c9",codePlaceholder:"#3d8fd1",codeInserted:"#202746",codeImportant:"#c94922",blockToolbarBackground:y.white,blockToolbarTrigger:y.greyMid,blockToolbarTriggerIcon:y.white,blockToolbarItem:y.almostBlack,blockToolbarText:y.almostBlack,blockToolbarHoverBackground:y.greyLight,blockToolbarDivider:y.greyMid,noticeInfoBackground:"#F5BE31",noticeInfoText:y.almostBlack,noticeTipBackground:"#9E5CF7",noticeTipText:y.white,noticeWarningBackground:"#FF5C80",noticeWarningText:y.white}),w=Object(f.a)(Object(f.a)({},p),{},{background:"transparent",text:"var(--sn-stylekit-paragraph-text-color)",code:"var(--sn-stylekit-secondary-foreground-color)",cursor:"var(--sn-stylekit-contrast-foreground-color)",divider:y.greyMid,toolbarBackground:y.lightBlack,toolbarInput:y.white10,toolbarItem:y.white,tableDivider:"var(--sn-stylekit-secondary-foreground-color)",tableSelected:"var(--sn-stylekit-secondary-foreground-color)",tableSelectedBackground:"var(--sn-stylekit-contrast-background-color)",quote:"var(--sn-stylekit-secondary-foreground-color)",codeBackground:"var(--sn-stylekit-secondary-background-color)",codeBorder:"var(--sn-stylekit-secondary-foreground-color)",horizontalRule:"var(--sn-stylekit-input-placeholder-color)",imageErrorBackground:y.greyLight}),O=function(e){Object(l.a)(n,e);var t=Object(u.a)(n);function n(){return Object(i.a)(this,n),t.apply(this,arguments)}return Object(s.a)(n,[{key:"render",value:function(){var e=this.props.attrs.matches[1];return a.a.createElement("iframe",{src:"https://www.youtube.com/embed/".concat(e,"?modestbranding=1")})}}]),n}(a.a.Component),B=function(e){Object(l.a)(n,e);var t=Object(u.a)(n);function n(e){var o;return Object(i.a)(this,n),(o=t.call(this,e)).onChange=Object(d.debounce)((function(e){var t=e(),n=o.state.note;n.content.text=t,o.setState({note:n}),v.get().save()})),o.state={},o}return Object(s.a)(n,[{key:"componentDidMount",value:function(){var e=this;v.get().addUpdateObserver((function(){var t=v.get().getNote(),n=!e.state.note||e.state.note&&e.state.note.uuid!=t.uuid;e.setState({note:v.get().getNote()}),n&&e.updateMarkdown()}))}},{key:"updateMarkdown",value:function(){var e=this.state.note.content.text.replace(/(\n{2})(\n+)/g,(function(e,t,n){return t+n.replace(/(\n)/g,"\\$1")}));""==e&&(e="\n"),this.setState({markdown:e})}},{key:"getNoteContents",value:function(){return this.state.note?this.state.note.content.text:""}},{key:"render",value:function(){return a.a.createElement("div",null,a.a.createElement(g.a,{value:this.state.markdown,placeholder:"",autoFocus:!0,onChange:this.onChange.bind(this),theme:w,embeds:[{title:"YouTube",keywords:"youtube video tube google",icon:function(){return a.a.createElement("img",{src:"https://upload.wikimedia.org/wikipedia/commons/7/75/YouTube_social_white_squircle_%282017%29.svg",width:24,height:24})},matcher:function(e){return e.match(/(?:https?:\/\/)?(?:www\.)?youtu\.?be(?:\.com)?\/?.*(?:watch|embed)?(?:.*v=|v\/|\/)([a-zA-Z0-9_-]{11})$/i)},component:O}]}))}}]),n}(a.a.Component);var E=function(){return a.a.createElement("div",{className:"App"},a.a.createElement(B,null))};Boolean("localhost"===window.location.hostname||"[::1]"===window.location.hostname||window.location.hostname.match(/^127(?:\.(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)){3}$/));c.a.render(a.a.createElement(a.a.StrictMode,null,a.a.createElement(E,null)),document.getElementById("root")),"serviceWorker"in navigator&&navigator.serviceWorker.ready.then((function(e){e.unregister()})).catch((function(e){console.error(e.message)}))}},[[130,1,2]]]);
+//# sourceMappingURL=main.c2094a5b.chunk.js.map
\ No newline at end of file
diff --git a/docs/static/js/main.c2094a5b.chunk.js.map b/docs/static/js/main.c2094a5b.chunk.js.map
new file mode 100644
index 0000000..e1878e5
--- /dev/null
+++ b/docs/static/js/main.c2094a5b.chunk.js.map
@@ -0,0 +1 @@
+{"version":3,"sources":["lib/BridgeManager.js","lib/theme.js","lib/components/LocalEditor.js","App.js","serviceWorker.js","index.js"],"names":["BridgeManager","this","updateObservers","initiateBridge","instance","callback","observer","push","note","componentManager","ComponentManager","name","streamContextItem","item","notifyObserversOfUpdate","streamItems","items","filter","isMetadataUpdate","content","text","replace","saveItemWithPresave","colors","almostBlack","lightBlack","almostWhite","white","white10","black","black10","primary","greyLight","grey","greyMid","greyDark","base","fontFamily","fontFamilyMono","fontWeight","zIndex","link","placeholder","textSecondary","textLight","textHighlight","selected","codeComment","codePunctuation","codeNumber","codeProperty","codeTag","codeString","codeSelector","codeAttr","codeEntity","codeKeyword","codeFunction","codeStatement","codePlaceholder","codeInserted","codeImportant","blockToolbarBackground","blockToolbarTrigger","blockToolbarTriggerIcon","blockToolbarItem","blockToolbarText","blockToolbarHoverBackground","blockToolbarDivider","noticeInfoBackground","noticeInfoText","noticeTipBackground","noticeTipText","noticeWarningBackground","noticeWarningText","light","background","code","cursor","divider","toolbarBackground","toolbarInput","toolbarItem","tableDivider","tableSelected","tableSelectedBackground","quote","codeBackground","codeBorder","horizontalRule","imageErrorBackground","YoutubeEmbed","videoId","props","attrs","matches","src","React","Component","LocalEditor","onChange","debounce","value","state","setState","get","save","addUpdateObserver","getNote","refresh","uuid","updateMarkdown","markdown","m","p","q","autoFocus","bind","theme","embeds","title","keywords","icon","width","height","matcher","url","match","component","App","className","Boolean","window","location","hostname","ReactDOM","render","StrictMode","document","getElementById","navigator","serviceWorker","ready","then","registration","unregister","catch","error","console","message"],"mappings":"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","file":"static/js/main.c2094a5b.chunk.js","sourcesContent":["import ComponentManager from 'sn-components-api';\n\nexport default class BridgeManager {\n\n /* Singleton */\n static instance = null;\n static get() {\n if (this.instance == null) { this.instance = new BridgeManager(); }\n return this.instance;\n }\n\n constructor() {\n this.updateObservers = [];\n this.initiateBridge();\n }\n\n addUpdateObserver(callback) {\n let observer = { callback: callback };\n this.updateObservers.push(observer);\n return observer;\n }\n\n notifyObserversOfUpdate() {\n for (var observer of this.updateObservers) {\n observer.callback();\n }\n }\n\n getNote() {\n return this.note;\n }\n\n initiateBridge() {\n var permissions = [\n {\n name: \"stream-context-item\"\n // name: \"stream-items\"\n }\n ]\n\n this.componentManager = new ComponentManager(permissions, function () {\n // on ready\n });\n\n this.componentManager.streamContextItem((item) => {\n this.note = item;\n this.notifyObserversOfUpdate();\n })\n\n this.componentManager.streamItems([\"SN|Component\", \"SN|Theme\", \"SF|Extension\"], (items) => {\n this.items = items.filter((item) => {return !item.isMetadataUpdate});\n });\n }\n\n save() {\n if (this.note) {\n // Be sure to capture this object as a variable, as this.note may be reassigned in `streamContextItem`, so by the time\n // you modify it in the presave block, it may not be the same object anymore, so the presave values will not be applied to\n // the right object, and it will save incorrectly.\n let note = this.note;\n if (note.content && note.content.text) {\n note.content.text = note.content.text.replace(/\\n\\\\/g, '\\n');\n }\n this.componentManager.saveItemWithPresave(note, () => {\n note = this.note ;\n });\n }\n }\n\n}","const colors = {\n almostBlack: \"#181A1B\",\n lightBlack: \"#2F3336\",\n almostWhite: \"#E6E6E6\",\n white: \"#FFF\",\n white10: \"rgba(255, 255, 255, 0.1)\",\n black: \"#000\",\n black10: \"rgba(0, 0, 0, 0.1)\",\n primary: \"#1AB6FF\",\n greyLight: \"#F4F7FA\",\n grey: \"#E8EBED\",\n greyMid: \"#C5CCD3\",\n greyDark: \"#DAE1E9\",\n};\n\nexport const base = {\n ...colors,\n fontFamily:\n \"var(--sn-stylekit-sans-serif-font)\",\n fontFamilyMono:\n \"'SFMono-Regular',Consolas,'Liberation Mono', Menlo, Courier,monospace\",\n fontWeight: 400,\n zIndex: 100,\n link: 'var(--sn-stylekit-info-color)',\n placeholder: 'var(--sn-stylekit-input-placeholder-color)',\n textSecondary: \"#4E5C6E\",\n textLight: colors.white,\n textHighlight: '#ff0',\n selected: colors.primary,\n codeComment: 'var(--sn-stylekit-secondary-foreground-color)',\n codePunctuation: 'var(--sn-stylekit-contrast-backround-color)',\n codeNumber: \"#d73a49\",\n codeProperty: \"#c08b30\",\n codeTag: \"#3d8fd1\",\n codeString: \"var(--sn-stylekit-success-color)\",\n codeSelector: \"#6679cc\",\n codeAttr: \"#c76b29\",\n codeEntity: \"#22a2c9\",\n codeKeyword: 'var(--sn-stylekit-info-color)',\n codeFunction: \"#6f42c1\",\n codeStatement: \"#22a2c9\",\n codePlaceholder: \"#3d8fd1\",\n codeInserted: \"#202746\",\n codeImportant: \"#c94922\",\n\n blockToolbarBackground: colors.white,\n blockToolbarTrigger: colors.greyMid,\n blockToolbarTriggerIcon: colors.white,\n blockToolbarItem: colors.almostBlack,\n blockToolbarText: colors.almostBlack,\n blockToolbarHoverBackground: colors.greyLight,\n blockToolbarDivider: colors.greyMid,\n\n noticeInfoBackground: \"#F5BE31\",\n noticeInfoText: colors.almostBlack,\n noticeTipBackground: \"#9E5CF7\",\n noticeTipText: colors.white,\n noticeWarningBackground: \"#FF5C80\",\n noticeWarningText: colors.white,\n};\n\nexport const light = {\n ...base,\n background: 'transparent',\n text: 'var(--sn-stylekit-paragraph-text-color)',\n code: 'var(--sn-stylekit-secondary-foreground-color)',\n cursor: 'var(--sn-stylekit-contrast-foreground-color)',\n divider: colors.greyMid,\n\n toolbarBackground: colors.lightBlack,\n toolbarInput: colors.white10,\n toolbarItem: colors.white,\n\n tableDivider: 'var(--sn-stylekit-secondary-foreground-color)',\n tableSelected: 'var(--sn-stylekit-secondary-foreground-color)',\n tableSelectedBackground: 'var(--sn-stylekit-contrast-background-color)',\n\n quote: 'var(--sn-stylekit-secondary-foreground-color)',\n codeBackground: 'var(--sn-stylekit-secondary-background-color)',\n codeBorder: 'var(--sn-stylekit-secondary-foreground-color)',\n horizontalRule: 'var(--sn-stylekit-input-placeholder-color)',\n imageErrorBackground: colors.greyLight,\n};\n\nexport default light;","import React from 'react';\nimport { debounce } from \"lodash\";\nimport RichMarkdownEditor, { theme } from \"rich-markdown-editor\";\nimport BridgeManager from \"../BridgeManager\";\nimport light from '../theme';\n\n\nclass YoutubeEmbed extends React.Component {\n render() {\n const { attrs } = this.props;\n const videoId = attrs.matches[1];\n\n return (\n \n );\n }\n}\n\nexport default class LocalEditor extends React.Component {\n constructor(props){\n super(props);\n this.state = {};\n }\n\n componentDidMount() {\n BridgeManager.get().addUpdateObserver(() => {\n const note = BridgeManager.get().getNote();\n const refresh = !this.state.note\n || (this.state.note && this.state.note.uuid != note.uuid);\n this.setState({\n note: BridgeManager.get().getNote(),\n });\n if (refresh) {\n this.updateMarkdown();\n }\n });\n }\n\n updateMarkdown() {\n let markdown = this.state.note.content.text\n .replace(/(\\n{2})(\\n+)/g, (m, p, q) => p + q.replace(/(\\n)/g, '\\\\$1'));\n if (markdown == \"\") {\n markdown = \"\\n\";\n }\n this.setState({ markdown });\n }\n\n onChange = debounce((value) => {\n const text = value();\n let note = this.state.note;\n note.content.text = text;\n this.setState({ note: note });\n BridgeManager.get().save();\n })\n\n getNoteContents() {\n if (this.state.note) {\n return this.state.note.content.text;\n }\n return '';\n }\n\n render() {\n return (\n
\n );\n }\n}","import React from 'react';\nimport './app.scss';\nimport LocalEditor from './lib/components/LocalEditor';\n\nfunction App() {\n return (\n
\n \n
\n );\n}\n\nexport default App;\n","// This optional code is used to register a service worker.\n// register() is not called by default.\n\n// This lets the app load faster on subsequent visits in production, and gives\n// it offline capabilities. However, it also means that developers (and users)\n// will only see deployed updates on subsequent visits to a page, after all the\n// existing tabs open on the page have been closed, since previously cached\n// resources are updated in the background.\n\n// To learn more about the benefits of this model and instructions on how to\n// opt-in, read https://bit.ly/CRA-PWA\n\nconst isLocalhost = Boolean(\n window.location.hostname === 'localhost' ||\n // [::1] is the IPv6 localhost address.\n window.location.hostname === '[::1]' ||\n // 127.0.0.0/8 are considered localhost for IPv4.\n window.location.hostname.match(\n /^127(?:\\.(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)){3}$/\n )\n);\n\nexport function register(config) {\n if (process.env.NODE_ENV === 'production' && 'serviceWorker' in navigator) {\n // The URL constructor is available in all browsers that support SW.\n const publicUrl = new URL(process.env.PUBLIC_URL, window.location.href);\n if (publicUrl.origin !== window.location.origin) {\n // Our service worker won't work if PUBLIC_URL is on a different origin\n // from what our page is served on. This might happen if a CDN is used to\n // serve assets; see https://github.com/facebook/create-react-app/issues/2374\n return;\n }\n\n window.addEventListener('load', () => {\n const swUrl = `${process.env.PUBLIC_URL}/service-worker.js`;\n\n if (isLocalhost) {\n // This is running on localhost. Let's check if a service worker still exists or not.\n checkValidServiceWorker(swUrl, config);\n\n // Add some additional logging to localhost, pointing developers to the\n // service worker/PWA documentation.\n navigator.serviceWorker.ready.then(() => {\n console.log(\n 'This web app is being served cache-first by a service ' +\n 'worker. To learn more, visit https://bit.ly/CRA-PWA'\n );\n });\n } else {\n // Is not localhost. Just register service worker\n registerValidSW(swUrl, config);\n }\n });\n }\n}\n\nfunction registerValidSW(swUrl, config) {\n navigator.serviceWorker\n .register(swUrl)\n .then(registration => {\n registration.onupdatefound = () => {\n const installingWorker = registration.installing;\n if (installingWorker == null) {\n return;\n }\n installingWorker.onstatechange = () => {\n if (installingWorker.state === 'installed') {\n if (navigator.serviceWorker.controller) {\n // At this point, the updated precached content has been fetched,\n // but the previous service worker will still serve the older\n // content until all client tabs are closed.\n console.log(\n 'New content is available and will be used when all ' +\n 'tabs for this page are closed. See https://bit.ly/CRA-PWA.'\n );\n\n // Execute callback\n if (config && config.onUpdate) {\n config.onUpdate(registration);\n }\n } else {\n // At this point, everything has been precached.\n // It's the perfect time to display a\n // \"Content is cached for offline use.\" message.\n console.log('Content is cached for offline use.');\n\n // Execute callback\n if (config && config.onSuccess) {\n config.onSuccess(registration);\n }\n }\n }\n };\n };\n })\n .catch(error => {\n console.error('Error during service worker registration:', error);\n });\n}\n\nfunction checkValidServiceWorker(swUrl, config) {\n // Check if the service worker can be found. If it can't reload the page.\n fetch(swUrl, {\n headers: { 'Service-Worker': 'script' },\n })\n .then(response => {\n // Ensure service worker exists, and that we really are getting a JS file.\n const contentType = response.headers.get('content-type');\n if (\n response.status === 404 ||\n (contentType != null && contentType.indexOf('javascript') === -1)\n ) {\n // No service worker found. Probably a different app. Reload the page.\n navigator.serviceWorker.ready.then(registration => {\n registration.unregister().then(() => {\n window.location.reload();\n });\n });\n } else {\n // Service worker found. Proceed as normal.\n registerValidSW(swUrl, config);\n }\n })\n .catch(() => {\n console.log(\n 'No internet connection found. App is running in offline mode.'\n );\n });\n}\n\nexport function unregister() {\n if ('serviceWorker' in navigator) {\n navigator.serviceWorker.ready\n .then(registration => {\n registration.unregister();\n })\n .catch(error => {\n console.error(error.message);\n });\n }\n}\n","import React from 'react';\nimport ReactDOM from 'react-dom';\nimport './index.css';\nimport App from './App';\nimport * as serviceWorker from './serviceWorker';\n\nReactDOM.render(\n \n \n ,\n document.getElementById('root')\n);\n\n// If you want your app to work offline and load faster, you can change\n// unregister() to register() below. Note this comes with some pitfalls.\n// Learn more about service workers: https://bit.ly/CRA-PWA\nserviceWorker.unregister();\n"],"sourceRoot":""}
\ No newline at end of file
diff --git a/package.json b/package.json
index 73012ad..a863207 100644
--- a/package.json
+++ b/package.json
@@ -1,6 +1,6 @@
{
"name": "sn-rme",
- "version": "0.7.0",
+ "version": "0.8.0",
"homepage": ".",
"private": true,
"dependencies": {