diff --git a/.obsidian/community-plugins.json b/.obsidian/community-plugins.json index 046a756..d6d0eb3 100644 --- a/.obsidian/community-plugins.json +++ b/.obsidian/community-plugins.json @@ -24,5 +24,7 @@ "pdf-plus", "copy-document-as-html", "templater-obsidian", - "obsidian-toggle-list" + "obsidian-toggle-list", + "neighbouring-files", + "cmdr" ] \ No newline at end of file diff --git a/.obsidian/hotkeys.json b/.obsidian/hotkeys.json index 5259e3e..01c5626 100644 --- a/.obsidian/hotkeys.json +++ b/.obsidian/hotkeys.json @@ -42,15 +42,6 @@ "key": "S" } ], - "obsidian-linter:lint-all-files": [ - { - "modifiers": [ - "Mod", - "Shift" - ], - "key": "S" - } - ], "copy-as-html:copy-as-html-command": [ { "modifiers": [ @@ -93,5 +84,31 @@ ], "key": "X" } - ] + ], + "graph:open": [], + "graph:open-local": [ + { + "modifiers": [ + "Mod" + ], + "key": "G" + } + ], + "neighbouring-files:prev-alphabetical": [ + { + "modifiers": [ + "Mod" + ], + "key": "K" + } + ], + "neighbouring-files:next-alphabetical": [ + { + "modifiers": [ + "Mod" + ], + "key": "J" + } + ], + "editor:insert-link": [] } \ No newline at end of file diff --git a/.obsidian/plugins/cmdr/data.json b/.obsidian/plugins/cmdr/data.json new file mode 100644 index 0000000..0fc0ba3 --- /dev/null +++ b/.obsidian/plugins/cmdr/data.json @@ -0,0 +1,51 @@ +{ + "confirmDeletion": false, + "showAddCommand": true, + "debug": false, + "editorMenu": [], + "fileMenu": [], + "leftRibbon": [], + "rightRibbon": [], + "titleBar": [], + "statusBar": [], + "pageHeader": [ + { + "id": "neighbouring-files:prev-alphabetical", + "icon": "lucide-file-up", + "name": "Neighbouring Files: Navigate to prev file (alphabetical)", + "mode": "any" + }, + { + "id": "neighbouring-files:next-alphabetical", + "icon": "lucide-file-down", + "name": "Neighbouring Files: Navigate to next file (alphabetical)", + "mode": "any" + } + ], + "macros": [], + "explorer": [], + "hide": { + "statusbar": [ + "properties", + "backlink" + ], + "leftRibbon": [ + "Digital Garden Publication Center", + "Open Git source control", + "New drawing", + "Advanced Tables Toolbar", + "Create new base" + ] + }, + "spacing": "8", + "advancedToolbar": { + "rowHeight": 48, + "rowCount": 1, + "spacing": 0, + "buttonWidth": 48, + "columnLayout": false, + "mappedIcons": [], + "tooltips": false, + "heightOffset": 0 + } +} \ No newline at end of file diff --git a/.obsidian/plugins/cmdr/main.js b/.obsidian/plugins/cmdr/main.js new file mode 100644 index 0000000..1754350 --- /dev/null +++ b/.obsidian/plugins/cmdr/main.js @@ -0,0 +1,11 @@ +/* +THIS IS A GENERATED/BUNDLED FILE BY ESBUILD +if you want to view the source, please visit the github repository of this plugin (https://github.com/phibr0/obsidian-commander) +*/ + +var Oe=Object.defineProperty,Rn=Object.defineProperties,zn=Object.getOwnPropertyDescriptor,On=Object.getOwnPropertyDescriptors,Fn=Object.getOwnPropertyNames,ze=Object.getOwnPropertySymbols;var vt=Object.prototype.hasOwnProperty,$t=Object.prototype.propertyIsEnumerable;var Yt=(t,o,e)=>o in t?Oe(t,o,{enumerable:!0,configurable:!0,writable:!0,value:e}):t[o]=e,Fe=(t,o)=>{for(var e in o||(o={}))vt.call(o,e)&&Yt(t,e,o[e]);if(ze)for(var e of ze(o))$t.call(o,e)&&Yt(t,e,o[e]);return t},Gt=(t,o)=>Rn(t,On(o));var Kt=(t,o)=>{var e={};for(var n in t)vt.call(t,n)&&o.indexOf(n)<0&&(e[n]=t[n]);if(t!=null&&ze)for(var n of ze(t))o.indexOf(n)<0&&$t.call(t,n)&&(e[n]=t[n]);return e};var Vn=(t,o)=>{for(var e in o)Oe(t,e,{get:o[e],enumerable:!0})},Wn=(t,o,e,n)=>{if(o&&typeof o=="object"||typeof o=="function")for(let a of Fn(o))!vt.call(t,a)&&a!==e&&Oe(t,a,{get:()=>o[a],enumerable:!(n=zn(o,a))||n.enumerable});return t};var jn=t=>Wn(Oe({},"__esModule",{value:!0}),t);var Va={};Vn(Va,{default:()=>lt});module.exports=jn(Va);var Ve=require("obsidian");var Ct=require("obsidian");var Qt={};var eo={"Open Commander Settings":"Otev\u0159\xEDt nastaven\xED Commandera","Open Macro Builder":"Otev\u0159\xEDt tv\u016Frce Maker","Change Icon":"Zm\u011Bnit ikonu",Rename:"P\u0159ejmenovat",Delete:"Smazat","Add command":"P\u0159idat p\u0159\xEDkaz","Add new":"P\u0159idat nov\xFD","This Command seems to have been removed. {{command_name}}":"Tento p\u0159\xEDkaz se zd\xE1 b\xFDt odstran\u011Bn. {{command_name}}","Choose a Command to add":"Vyberte p\u0159\xEDkaz k p\u0159id\xE1n\xED","to navigate":"pro navigaci","to choose an icon":"pro v\xFDb\u011Br ikony","to cancel":"pro zru\u0161en\xED","Use a custom name":"Pou\u017E\xEDt vlastn\xED jm\xE9no","Choose a custom Name for your new Command":"Vyberte vlastn\xED jm\xE9no pro v\xE1\u0161 nov\xFD p\u0159\xEDkaz","to save":"pro ulo\u017Een\xED","Choose a Icon for your new Command":"Vyberte ikonu pro v\xE1\u0161 nov\xFD p\u0159\xEDkaz","to choose a custom icon":"pro v\xFDb\u011Br vlastn\xED ikony","Remove Command":"Odstranit p\u0159\xEDkaz","Double click to rename":"Pro p\u0159ejmenov\xE1n\xED dvakr\xE1t klikn\u011Bte","This device":"Toto za\u0159\xEDzen\xED","Added by {{plugin_name}}.":"P\u0159id\xE1no pomoc\xED {{plugin_name}}.","Warning: This is a checked Command, meaning it might not run under every circumstance.":"Varov\xE1n\xED: Tento p\u0159\xEDkaz je kontrolov\xE1n a nemus\xED fungovat ve v\u0161ech p\u0159\xEDpadech.","Move down":"P\u0159esunout dol\u016F","Move up":"P\u0159esunout nahoru","Change Mode (Currently: {{current_mode}})":"Zm\u011Bnit re\u017Eim (Nyn\xED: {{current_mode}})","Are you sure you want to delete the Command?":"Opravdu chcete smazat tento p\u0159\xEDkaz?","Remove and don't ask again":"Odstranit a u\u017E se neptat",Remove:"Odstranit",Cancel:"Zru\u0161it","Always ask before removing?":"V\u017Edy se pt\xE1t p\u0159ed odstran\u011Bn\xEDm?","Always show a Popup to confirm deletion of a Command.":"V\u017Edy zobrazovat vyskakovac\xED okno pro potvrzen\xED odstran\u011Bn\xED p\u0159\xEDkazu.",'Show "Add Command" Button':'Zobrazit tla\u010D\xEDtko "P\u0159idat p\u0159\xEDkaz"','Show the "Add Command" Button in every Menu. Requires restart.':'Zobrazit tla\u010D\xEDtko "P\u0159idat p\u0159\xEDkaz" ve v\u0161ech nab\xEDdk\xE1ch. Vy\u017Eaduje restart.',"Please restart Obsidian for these changes to take effect.":"Pros\xEDm restartujte Obsidian, aby se zm\u011Bny projevily.","Enable debugging":"Povolit lad\u011Bn\xED","Enable console output.":"Povolit v\xFDstup do konzole.",General:"Obecn\xE9","Editor Menu":"Kontextov\xE1 nab\xEDdka v editoru","File Menu":"Nab\xEDdka souboru","Left Ribbon":"Lev\xFD Ribbon","Right Ribbon":"Prav\xFD Ribbon",Titlebar:"Li\u0161ta aplikace",Statusbar:"Stavov\xE1 li\u0161ta","Page Header":"Hlavi\u010Dka str\xE1nky","Support development":"Podpo\u0159te v\xFDvoj","No commands here!":"Nejsou zde \u017E\xE1dn\xE9 p\u0159\xEDkazy!","Would you like to add one now?":"Chcete nyn\xED jeden p\u0159idat?","Hide Commands":"Skr\xFDt p\u0159\xEDkazy","Choose new":"Vyberte nov\xFD","Hide Commands of other Plugins":"Skr\xFDt p\u0159\xEDkazy jin\xFDch roz\u0161\xED\u0159en\xED",Icon:"Ikona",Name:"N\xE1zev","Custom Name":"Vlastn\xED n\xE1zev","Add command to all devices":"P\u0159idat p\u0159\xEDkaz na v\u0161echna za\u0159\xEDzen\xED","Add command only to mobile devices":"P\u0159idat p\u0159\xEDkaz pouze na mobiln\xED za\u0159\xEDzen\xED","Add command only to desktop devices":"P\u0159idat p\u0159\xEDkaz pouze na stoln\xED za\u0159\xEDzen\xED","Add command only to this device":"P\u0159idat p\u0159\xEDkaz pouze na toto za\u0159\xEDzen\xED",Done:"Hotovo","By Johnny\u2728 and phibr0":"Vytvo\u0159il Johnny\u2728 a phibr0","Leave feedback":"Zanechat zp\u011Btnou vazbu",Donate:"P\u0159isp\u011Bt","Share feedback, issues, and ideas with our feedback form.":"Sd\xEDlejte zp\u011Btnou vazbu, probl\xE9my a n\xE1pady pomoc\xED na\u0161eho formul\xE1\u0159e.","Consider donating to support development.":"Zva\u017Ete p\u0159\xEDsp\u011Bvek na podporu v\xFDvoje.",Save:"Ulo\u017Eit","This Command is not available on this device.":"Tento p\u0159\xEDkaz nen\xED dostupn\xFD na tomto za\u0159\xEDzen\xED.",Show:"Zobrazit",Hide:"Skr\xFDt","Hide other Commands":"Skr\xFDt ostatn\xED p\u0159\xEDkazy","Double click to enter custom value":"Dvakr\xE1t klikn\u011Bte pro zad\xE1n\xED vlastn\xED hodnoty","Choose custom spacing for Command Buttons":"Vyberte vlastn\xED odsazen\xED pro tla\u010D\xEDtka p\u0159\xEDkaz\u016F","Change the spacing between commands. You can set different values on mobile and desktop.":"Zm\u011Bna odsazen\xED mezi p\u0159\xEDkazy. M\u016F\u017Eete nastavit r\u016Fzn\xE9 hodnoty na mobiln\xEDch a stoln\xEDch za\u0159\xEDzen\xEDch.",Warning:"Varov\xE1n\xED","As of Obsidian 0.16.0 you need to explicitly enable the View Header.":"Od verze Obsidian 0.16.0 je nutn\xE9 explicitn\u011B povolit z\xE1hlav\xED zobrazen\xED. Po povolen\xED je mo\u017En\xE9, \u017Ee budete muset restartovat Obsidian.","Open Appearance Settings":"Otev\u0159\xEDt nastaven\xED vzhledu",Explorer:"Pr\u016Fzkumn\xEDk"};var to={};var oo={"Open Commander Settings":"Commander Einstellungen \xF6ffnen","Open Macro Builder":"Makro Baukasten \xF6ffnen","Change Icon":"Symbol ver\xE4ndern",Rename:"Umbenennen",Delete:"L\xF6schen","Add command":"Befehl hinzuf\xFCgen","Add new":"Neuen Befehl hinzuf\xFCgen","This Command seems to have been removed. {{command_name}}":"Dieser Befehl wurde entfernt. {{command_name}}","Choose a Command to add":"W\xE4hle einen Befehl zum hinzuf\xFCgen","to navigate":"zum navigieren","to choose an icon":"um ein symbol auszuw\xE4hlen","to cancel":"zum abbrechen","Use a custom name":"Nutze einen benutzerdefinierten Namen","Choose a custom Name for your new Command":"W\xE4hle einen benutzerdefinierten Namen f\xFCr deinen neuen Befehl","to save":"zum speichern","Choose a Icon for your new Command":"W\xE4hle ein Symbol f\xFCr deinen neuen Befehl","to choose a custom icon":"um ein benutzerdefiniertes Symbol auszuw\xE4hlen","Remove Command":"Befehl entfernen","Double click to rename":"Zum umbenennen doppelklicken","This device":"Dieses Ger\xE4t","Added by {{plugin_name}}.":"Hinzugef\xFCgt von {{plugin_name}}.","Warning: This is a checked Command, meaning it might not run under every circumstance.":"Warnung: Dieser Befehl wird nur unter bestimmten Vorraussetzungen ausgef\xFChrt.","Move down":"Nach unten","Move up":"Nach oben","Change Mode (Currently: {{current_mode}})":"Modus ver\xE4ndern (Momentan: {{current_mode}})","Are you sure you want to delete the Command?":"Bist du dir sicher, dass du diesen Befehl entfernen m\xF6chtest?","Remove and don't ask again":"Entfernen und Auswahl speichern",Remove:"Entfernen",Cancel:"Abbrechen","Always ask before removing?":"Immer fragen, bevor ein Befehl gel\xF6scht wird?","Always show a Popup to confirm deletion of a Command.":"Zeige immer ein Popup um L\xF6schen zu best\xE4tigen.",'Show "Add Command" Button':'Zeige "Befehl hinzuf\xFCgen" Knopf','Show the "Add Command" Button in every Menu. Requires restart.':'Zeige den "Befehl hinzuf\xFCgen" Knopf in jedem Men\xFC. Erfordert neustart.',"Please restart Obsidian for these changes to take effect.":"Bitte starte Obsidian neu, damit diese \xC4nderungen in Kraft treten.","Enable debugging":"Aktiviere debugging","Enable console output.":"Aktiviere Konsolen-Output (F\xFCr Entwickler)",General:"Allgemein","Editor Menu":"Editor-Men\xFC","File Menu":"Datei-Men\xFC","Left Ribbon":"Band","Right Ribbon":"Rechtes Band",Titlebar:"Titelleiste",Statusbar:"Statusleiste","Page Header":"Kopfzeile","Support development":"Entwicklung unterst\xFCtzen","No commands here!":"Keine Befehle da!","Would you like to add one now?":"M\xF6chtest du jetzt einen hinzuf\xFCgen?","Hide Commands":"Befehle verstecken","Choose new":"W\xE4hle neu","Hide Commands of other Plugins":"Hide Commands of other Plugins",Icon:"Symbol",Name:"Name","Custom Name":"Benutzerdefinierter Name","Add command to all devices":"F\xFCge Befehl allen Ger\xE4ten hinzu","Add command only to mobile devices":"F\xFCge Befehl nur Mobilen Ger\xE4ten hinzu","Add command only to desktop devices":"F\xFCge Befehl nur Desktop Ger\xE4ten hinzu","Add command only to this device":"F\xFCge Befehl nur diesem Ger\xE4t hinzu",Done:"Fertig","By Johnny\u2728 and phibr0":"Von Johnny\u2728 und phibr0","Leave feedback":"Feedback geben",Donate:"Spenden","Share feedback, issues, and ideas with our feedback form.":"Teile Feedback, Probleme und Ideen mit unserem Feedback Formular!","Consider donating to support development.":"Spende um die Entwicklung zu unterst\xFCtzen.",Save:"Speichern","This Command is not available on this device.":"Dieser Befehl ist auf diesem Ger\xE4t nicht verf\xFCgbar.",Show:"Anzeigen",Hide:"Verstecken","Hide other Commands":"Andere Befehle verstecken","Double click to enter custom value":"Doppelklicken um eigenen Wert einzutragen","Choose custom spacing for Command Buttons":"W\xE4hle den Abstand zwischen Befehlen","Change the spacing between commands. You can set different values on mobile and desktop.":"Ver\xE4ndert den Abstand zwischen Befehlen.",Warning:"Achtung","As of Obsidian 0.16.0 you need to explicitly enable the View Header.":'Ab Obsidian Version 0.16.0 m\xFCssen Sie den "View Header" explizit aktivieren. Anschlie\xDFend muss Obsidian neugestartet werden.',"Open Appearance Settings":"\xD6ffne Darstellungs-Einstellungen",Explorer:"Explorer"};var gt={"Open Commander Settings":"Open Commander Settings","Open Macro Builder":"Open Macro Builder","Change Icon":"Change Icon",Rename:"Rename",Delete:"Delete","Add command":"Add command","Add new":"Add new command","This Command seems to have been removed. {{command_name}}":"This Command seems to have been removed. {{command_name}}","Choose a Command to add":"Choose a Command to add","to navigate":"to navigate","to choose an icon":"to choose an icon","to cancel":"to cancel","Use a custom name":"Use a custom name","Choose a custom Name for your new Command":"Choose a custom Name for your new Command","to save":"to save","Choose a Icon for your new Command":"Choose a Icon for your new Command","to choose a custom icon":"to choose a custom icon","Remove Command":"Remove Command","Double click to rename":"Double click to rename","This device":"This device","Added by {{plugin_name}}.":"Added by {{plugin_name}}.","Warning: This is a checked Command, meaning it might not run under every circumstance.":"Warning: This is a checked Command, meaning it might not run under every circumstance.","Move down":"Move down","Move up":"Move up","Change Mode (Currently: {{current_mode}})":"Change Mode (Currently: {{current_mode}})","Are you sure you want to delete the Command?":"Are you sure you want to delete the Command?","Remove and don't ask again":"Remove and don't ask again",Remove:"Remove",Cancel:"Cancel","Always ask before removing?":"Always ask before removing?","Always show a Popup to confirm deletion of a Command.":"Always show a Popup to confirm deletion of a Command.",'Show "Add Command" Button':'Show "Add Command" Button','Show the "Add Command" Button in every Menu. Requires restart.':'Show the "Add Command" Button in every Menu. Requires restart.',"Please restart Obsidian for these changes to take effect.":"Please restart Obsidian for these changes to take effect.","Enable debugging":"Enable debugging","Enable console output.":"Enable console output.",General:"General","Editor Menu":"Editor Menu","File Menu":"File Menu","Left Ribbon":"Ribbon","Right Ribbon":"Right Ribbon",Titlebar:"Titlebar",Statusbar:"Status Bar","Page Header":"Tab Bar","Support development":"Support development","No commands here!":"No commands here!","Would you like to add one now?":"Would you like to add one now?","Hide Commands":"Hide Commands","Choose new":"Choose new","Hide Commands of other Plugins":"Hide Commands of other Plugins",Icon:"Icon",Name:"Name","Custom Name":"Custom Name","Add command to all devices":"Add command to all devices","Add command only to mobile devices":"Add command only to mobile devices","Add command only to desktop devices":"Add command only to desktop devices","Add command only to this device":"Add command only to this device",Done:"Done","By Johnny\u2728 and phibr0":"By Johnny\u2728 and phibr0","Leave feedback":"Leave feedback",Donate:"Donate","Share feedback, issues, and ideas with our feedback form.":"Share feedback, issues, and ideas with our feedback form.","Consider donating to support development.":"Consider donating to support development.",Save:"Save","This Command is not available on this device.":"This Command is not available on this device.",Show:"Show",Hide:"Hide","Hide other Commands":"Hide other Commands","Double click to enter custom value":"Double click to enter custom value","Choose custom spacing for Command Buttons":"Choose custom spacing for Command Buttons","Change the spacing between commands. You can set different values on mobile and desktop.":"Change the spacing between commands.",Warning:"Warning","As of Obsidian 0.16.0 you need to explicitly enable the View Header.":"As of Obsidian 0.16.0 you need to explicitly enable the Tab Title Bar. Once enabled, you might need to restart Obsidian.","Open Appearance Settings":"Open Appearance Settings",Explorer:"Explorer"};var no={};var ao={};var io={"Open Commander Settings":"Ouvrir les param\xE8tres de Commander","Open Macro Builder":"Ouvrir le constructeur de Macro","Change Icon":"Changer l'ic\xF4ne",Rename:"Renommer",Delete:"Supprimer","Add command":"Ajouter une commande","Add new":"Ajouter une nouvelle commande","This Command seems to have been removed. {{command_name}}":"Cette commande semble avoir \xE9t\xE9 supprim\xE9e. {{command_name}}","Choose a Command to add":"Choisissez une commande \xE0 ajouter","to navigate":"pour naviguer","to choose an icon":"pour choisir une ic\xF4ne","to cancel":"pour annuler","Use a custom name":"Utiliser un nom personnalis\xE9","Choose a custom Name for your new Command":"Choisissez un nom personnalis\xE9 pour votre nouvelle commande","to save":"pour enregistrer","Choose a Icon for your new Command":"Choisissez une ic\xF4ne pour votre nouvelle commande","to choose a custom icon":"pour choisir une ic\xF4ne personnalis\xE9e","Remove Command":"Supprimer la commande","Double click to rename":"Double-cliquez pour renommer","This device":"Cet appareil","Added by {{plugin_name}}.":"Ajout\xE9 par {{plugin_name}}.","Warning: This is a checked Command, meaning it might not run under every circumstance.":"Attention : Cette commande est coch\xE9e, ce qui signifie qu'elle pourrait ne pas fonctionner dans toutes les situations.","Move down":"Descendre","Move up":"Monter","Change Mode (Currently: {{current_mode}})":"Changer de mode (Actuellement : {{current_mode}})","Are you sure you want to delete the Command?":"\xCAtes-vous s\xFBr de vouloir supprimer la commande ?","Remove and don't ask again":"Supprimer et ne plus demander",Remove:"Supprimer",Cancel:"Annuler","Always ask before removing?":"Toujours demander avant de supprimer ?","Always show a Popup to confirm deletion of a Command.":"Toujours afficher une fen\xEAtre contextuelle pour confirmer la suppression d'une commande.",'Show "Add Command" Button':'Afficher le bouton "Ajouter une commande"','Show the "Add Command" Button in every Menu. Requires restart.':'Afficher le bouton "Ajouter une commande" dans chaque menu. N\xE9cessite un red\xE9marrage.',"Please restart Obsidian for these changes to take effect.":"Veuillez red\xE9marrer Obsidian pour que ces modifications prennent effet.","Enable debugging":"Activer le d\xE9bogage","Enable console output.":"Activer la sortie console.",General:"G\xE9n\xE9ral","Editor Menu":"Menu \xE9diteur","File Menu":"Menu fichier","Left Ribbon":"Ruban gauche","Right Ribbon":"Ruban droit",Titlebar:"Barre de titre",Statusbar:"Barre d'\xE9tat","Page Header":"En-t\xEAte de page","Support development":"Soutenir le d\xE9veloppement","No commands here!":"Aucune commande ici !","Would you like to add one now?":"Voulez-vous en ajouter une maintenant ?","Hide Commands":"Masquer les commandes","Choose new":"Choisir nouveau","Hide Commands of other Plugins":"Masquer les commandes d'autres plugins",Icon:"Ic\xF4ne",Name:"Nom","Custom Name":"Nom personnalis\xE9","Add command to all devices":"Ajouter la commande \xE0 tous les appareils","Add command only to mobile devices":"Ajouter la commande uniquement sur les appareils mobiles","Add command only to desktop devices":"Ajouter la commande uniquement sur les ordinateurs de bureau","Add command only to this device":"Ajouter la commande uniquement sur cet appareil",Done:"Termin\xE9","By Johnny\u2728 and phibr0":"Par Johnny\u2728 et phibr0","Leave feedback":"Laisser un commentaire",Donate:"Faire un don","Share feedback, issues, and ideas with our feedback form.":"Partagez vos commentaires, probl\xE8mes et id\xE9es avec notre formulaire de retour d'information.","Consider donating to support development.":"Envisagez de faire un don pour soutenir le d\xE9veloppement.",Save:"Enregistrer","This Command is not available on this device.":"Cette commande n'est pas disponible sur cet appareil.",Show:"Afficher",Hide:"Masquer","Hide other Commands":"Masquer les autres commandes","Double click to enter custom value":"Double-cliquez pour entrer une valeur personnalis\xE9e","Choose custom spacing for Command Buttons":"Choisissez un espacement personnalis\xE9 pour les boutons de commande","Change the spacing between commands.":"Modifier l'espacement entre les commandes.",Warning:"Avertissement","As of Obsidian 0.16.0 you need to explicitly enable the Tab Title Bar. Once enabled, you might need to restart Obsidian.":"\xC0 partir d'Obsidian 0.16.0, vous devez activer explicitement la barre de titre des onglets. Une fois activ\xE9e, il se peut que vous deviez red\xE9marrer Obsidian.","Open Appearance Settings":"Ouvrir les param\xE8tres d'apparence",Explorer:"Explorateur"};var ro={};var so={};var co={};var mo={};var lo={};var uo={"Open Commander Settings":"Open Commander Instellingen","Open Macro Builder":"Open Macro Bouwer","Change Icon":"Verander Icoon",Rename:"Hernoem",Delete:"Verwijder","Add command":"Voeg commando toe","Add new":"Voeg nieuw commando toe","This Command seems to have been removed. {{command_name}}":"Het lijkt er op dat dit commando is verwijderd. {{command_name}}","Choose a Command to add":"Kies een commando om toe te voegen","to navigate":"naar navigatie","to choose an icon":"naar kies een icoon","to cancel":"naar annuleren","Use a custom name":"Gebruik een aangepaste naam","Choose a custom Name for your new Command":"Kies een aangepaste naam voor je nieuwe commando","to save":"naar opslaan","Choose a Icon for your new Command":"Kies een icoon voor je nieuwe commando","to choose a custom icon":"to choose a custom icon","Remove Command":"Verwijder commando","Double click to rename":"Dubbel klik om te hernoemen","This device":"Dit apparaat","Added by {{plugin_name}}.":"Toegevoegd door {{plugin_name}}.","Warning: This is a checked Command, meaning it might not run under every circumstance.":"Waarschuwing: Dit is een aangevinkte opdracht, wat betekent dat deze mogelijk niet onder alle omstandigheden wordt uitgevoerd.","Move down":"Naar beneden","Move up":"Naar boven","Change Mode (Currently: {{current_mode}})":"Verander modus (Currently: {{current_mode}})","Are you sure you want to delete the Command?":"Weet je zeker dat je dit commando wilt verwijderen??","Remove and don't ask again":"Verwijder en vraag niet opnieuw",Remove:"Verwijder",Cancel:"Annuleer","Always ask before removing?":"Altijd vragen voor verwijderen?","Always show a Popup to confirm deletion of a Command.":"Laat altijd een venster zien om het verwijderen van een commando te bevestigen.",'Show "Add Command" Button':'Laat "Voeg Commando toe" knop zien','Show the "Add Command" Button in every Menu. Requires restart.':'Laat de "Voeg Commenado toe" knop zien in elk menu. Vereist herstart.',"Please restart Obsidian for these changes to take effect.":"Start Obsidian a.u.b. opnieuw op om deze wijzigingen toe te passen.","Enable debugging":"Activeer debugging","Enable console output.":"Activeer console output.",General:"Algemeen","Editor Menu":"Editor Menu","File Menu":"Bestand Menu","Left Ribbon":"Linkse Lint","Right Ribbon":"Rechtse Lint",Titlebar:"Titelbalk",Statusbar:"Statusbalk","Page Header":"Pagina Kop","Support development":"Steun ontwikkeling","No commands here!":"Geen commando's hier!","Would you like to add one now?":"Zou je er \xE9\xE9n willen toevoegen?","Hide Commands":"Verberg Commando's","Choose new":"Kies nieuw","Hide Commands of other Plugins":"Verberg Commando's van andere Plugins",Icon:"Icoon",Name:"Naam","Custom Name":"Aangepaste naam","Add command to all devices":"Voeg commando toe aan alle apparaten","Add command only to mobile devices":"Voeg commando toe aan alleen mobiele apparaten","Add command only to desktop devices":"Voeg commando toe aan alleen dekstop apparaten","Add command only to this device":"Voed commando toe aan alleen dit apparaat",Done:"Klaar","By Johnny\u2728 and phibr0":"Door Johnny\u2728 en phibr0","Leave feedback":"Laat feedback achter",Donate:"Doneer","Share feedback, issues, and ideas with our feedback form.":"Deel feedback, problemen en idee\xEBn met ons feedback formulier.","Consider donating to support development.":"Overweeg te doneren om ontwikkeling te steunen.",Save:"Opslaan","This Command is not available on this device.":"Dit Commando is niet beschikbaar op dit apparaat.",Show:"Laat zien",Hide:"Verberg","Hide other Commands":"Verberg andere Commando's","Double click to enter custom value":"Dubbel klik om een aangepaste waarde in te vullen","Choose custom spacing for Command Buttons":"Kies aangepaste regelafstand voor Commando Knoppen","Change the spacing between commands. You can set different values on mobile and desktop.":"Verander regelafstand tussen Commando's. Dit kan verschillen tussen mobiel en dekstop.",Warning:"Waarschuwing","As of Obsidian 0.16.0 you need to explicitly enable the View Header.":"Sinds Obsidian 0.16.0 moet je de kop expliciet inschakelen. Wanneer ingeschakeld moet je mogelijk Obsidian herstarten.","Open Appearance Settings":"Open Weergave Instellingen",Explorer:"Verkenner"};var po={};var fo={};var ho={};var vo={};var go={};var bo={"Open Commander Settings":'\u041E\u0442\u043A\u0440\u044B\u0442\u044C \u043D\u0430\u0441\u0442\u0440\u043E\u0439\u043A\u0438 "Commander"',"Open Macro Builder":"\u041E\u0442\u043A\u0440\u044B\u0442\u044C \u043A\u043E\u043D\u0441\u0442\u0440\u0443\u043A\u0442\u043E\u0440 \u043C\u0430\u043A\u0440\u043E\u0441\u043E\u0432","Change Icon":"\u0418\u0437\u043C\u0435\u043D\u0438\u0442\u044C \u0437\u043D\u0430\u0447\u043E\u043A",Rename:"\u041F\u0435\u0440\u0435\u0438\u043C\u0435\u043D\u043E\u0432\u0430\u0442\u044C",Delete:"\u0423\u0434\u0430\u043B\u0438\u0442\u044C","Add command":"\u0414\u043E\u0431\u0430\u0432\u0438\u0442\u044C \u043A\u043E\u043C\u0430\u043D\u0434\u0443","Add new":"\u0414\u043E\u0431\u0430\u0432\u0438\u0442\u044C \u043D\u043E\u0432\u0443\u044E \u043A\u043E\u043C\u0430\u043D\u0434\u0443","This Command seems to have been removed. {{command_name}}":"\u042D\u0442\u0430 \u043A\u043E\u043C\u0430\u043D\u0434\u0430, \u043A\u0430\u0436\u0435\u0442\u0441\u044F, \u0431\u044B\u043B\u0430 \u0443\u0434\u0430\u043B\u0435\u043D\u0430. {{command_name}}","Choose a Command to add":"\u0412\u044B\u0431\u0435\u0440\u0438\u0442\u0435 \u043A\u043E\u043C\u0430\u043D\u0434\u0443 \u0434\u043B\u044F \u0434\u043E\u0431\u0430\u0432\u043B\u0435\u043D\u0438\u044F","to navigate":"\u0434\u043B\u044F \u043D\u0430\u0432\u0438\u0433\u0430\u0446\u0438\u0438","to choose an icon":"\u0432\u044B\u0431\u0440\u0430\u0442\u044C \u0437\u043D\u0430\u0447\u043E\u043A","to cancel":"\u043E\u0442\u043C\u0435\u043D\u0438\u0442\u044C","Use a custom name":"\u0418\u0441\u043F\u043E\u043B\u044C\u0437\u043E\u0432\u0430\u0442\u044C \u0441\u043E\u0431\u0441\u0442\u0432\u0435\u043D\u043D\u043E\u0435 \u0438\u043C\u044F","Choose a custom Name for your new Command":"\u0412\u0432\u0435\u0434\u0438\u0442\u0435 \u043F\u043E\u043B\u044C\u0437\u043E\u0432\u0430\u0442\u0435\u043B\u044C\u0441\u043A\u043E\u0435 \u0438\u043C\u044F \u0434\u043B\u044F \u0432\u0430\u0448\u0435\u0439 \u043D\u043E\u0432\u043E\u0439 \u043A\u043E\u043C\u0430\u043D\u0434\u044B","to save":"\u0441\u043E\u0445\u0440\u0430\u043D\u0438\u0442\u044C","Choose a Icon for your new Command":"\u0412\u044B\u0431\u0435\u0440\u0438\u0442\u0435 \u0437\u043D\u0430\u0447\u043E\u043A \u0434\u043B\u044F \u0432\u0430\u0448\u0435\u0439 \u043D\u043E\u0432\u043E\u0439 \u043A\u043E\u043C\u0430\u043D\u0434\u044B","to choose a custom icon":"\u0432\u044B\u0431\u0440\u0430\u0442\u044C \u043F\u043E\u043B\u044C\u0437\u043E\u0432\u0430\u0442\u0435\u043B\u044C\u0441\u043A\u0438\u0439 \u0437\u043D\u0430\u0447\u043E\u043A","Remove Command":"\u0423\u0434\u0430\u043B\u0438\u0442\u044C \u043A\u043E\u043C\u0430\u043D\u0434\u0443","Double click to rename":"\u0414\u0432\u0430\u0436\u0434\u044B \u0449\u0435\u043B\u043A\u043D\u0438\u0442\u0435, \u0447\u0442\u043E\u0431\u044B \u043F\u0435\u0440\u0435\u0438\u043C\u0435\u043D\u043E\u0432\u0430\u0442\u044C","This device":"\u042D\u0442\u043E \u0443\u0441\u0442\u0440\u043E\u0439\u0441\u0442\u0432\u043E","Added by {{plugin_name}}.":"\u0414\u043E\u0431\u0430\u0432\u043B\u0435\u043D \u043F\u043B\u0430\u0433\u0438\u043D\u043E\u043C {{plugin_name}}.","Warning: This is a checked Command, meaning it might not run under every circumstance.":"\u041F\u0440\u0435\u0434\u0443\u043F\u0440\u0435\u0436\u0434\u0435\u043D\u0438\u0435: \u044D\u0442\u043E \u043F\u0440\u043E\u0432\u0435\u0440\u0435\u043D\u043D\u0430\u044F \u043A\u043E\u043C\u0430\u043D\u0434\u0430, \u0442\u043E \u0435\u0441\u0442\u044C \u043E\u043D\u0430 \u043C\u043E\u0436\u0435\u0442 \u043D\u0435 \u0432\u044B\u043F\u043E\u043B\u043D\u044F\u0442\u044C\u0441\u044F \u043F\u0440\u0438 \u043B\u044E\u0431\u044B\u0445 \u043E\u0431\u0441\u0442\u043E\u044F\u0442\u0435\u043B\u044C\u0441\u0442\u0432\u0430\u0445.","Move down":"\u0412\u043D\u0438\u0437","Move up":"\u0412\u0432\u0435\u0440\u0445","Change Mode (Currently: {{current_mode}})":"\u0418\u0437\u043C\u0435\u043D\u0438\u0442\u044C \u0440\u0435\u0436\u0438\u043C (\u0421\u0435\u0439\u0447\u0430\u0441: {{current_mode}})","Are you sure you want to delete the Command?":"\u0412\u044B \u0443\u0432\u0435\u0440\u0435\u043D\u044B, \u0447\u0442\u043E \u0445\u043E\u0442\u0438\u0442\u0435 \u0443\u0434\u0430\u043B\u0438\u0442\u044C \u043A\u043E\u043C\u0430\u043D\u0434\u0443?","Remove and don't ask again":"\u0423\u0434\u0430\u043B\u0438\u0442\u0435 \u0438 \u0431\u043E\u043B\u044C\u0448\u0435 \u043D\u0435 \u0441\u043F\u0440\u0430\u0448\u0438\u0432\u0430\u0439\u0442\u0435",Remove:"\u0423\u0434\u0430\u043B\u0438\u0442\u044C",Cancel:"\u041E\u0442\u043C\u0435\u043D\u0430","Always ask before removing?":"\u0412\u0441\u0435\u0433\u0434\u0430 \u0441\u043F\u0440\u0430\u0448\u0438\u0432\u0430\u0442\u044C \u043F\u0435\u0440\u0435\u0434 \u0443\u0434\u0430\u043B\u0435\u043D\u0438\u0435\u043C?","Always show a Popup to confirm deletion of a Command.":"\u0412\u0441\u0435\u0433\u0434\u0430 \u043F\u043E\u043A\u0430\u0437\u044B\u0432\u0430\u0442\u044C \u0432\u0441\u043F\u043B\u044B\u0432\u0430\u044E\u0449\u0435\u0435 \u043E\u043A\u043D\u043E \u0434\u043B\u044F \u043F\u043E\u0434\u0442\u0432\u0435\u0440\u0436\u0434\u0435\u043D\u0438\u044F \u0443\u0434\u0430\u043B\u0435\u043D\u0438\u044F \u043A\u043E\u043C\u0430\u043D\u0434\u044B.",'Show "Add Command" Button':"\u041F\u043E\u043A\u0430\u0437\u0430\u0442\u044C \u043A\u043D\u043E\u043F\u043A\u0443 \xAB\u0414\u043E\u0431\u0430\u0432\u0438\u0442\u044C \u043A\u043E\u043C\u0430\u043D\u0434\u0443\xBB",'Show the "Add Command" Button in every Menu. Requires restart.':"\u041F\u043E\u043A\u0430\u0437\u044B\u0432\u0430\u0442\u044C \u043A\u043D\u043E\u043F\u043A\u0443 \xAB\u0414\u043E\u0431\u0430\u0432\u0438\u0442\u044C \u043A\u043E\u043C\u0430\u043D\u0434\u0443\xBB \u0432 \u043A\u0430\u0436\u0434\u043E\u043C \u043C\u0435\u043D\u044E. \u0422\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044F \u043F\u0435\u0440\u0435\u0437\u0430\u0433\u0440\u0443\u0437\u043A\u0430.","Please restart Obsidian for these changes to take effect.":"\u041F\u043E\u0436\u0430\u043B\u0443\u0439\u0441\u0442\u0430, \u043F\u0435\u0440\u0435\u0437\u0430\u043F\u0443\u0441\u0442\u0438\u0442\u0435 Obsidian, \u0447\u0442\u043E\u0431\u044B \u044D\u0442\u0438 \u0438\u0437\u043C\u0435\u043D\u0435\u043D\u0438\u044F \u0432\u0441\u0442\u0443\u043F\u0438\u043B\u0438 \u0432 \u0441\u0438\u043B\u0443.","Enable debugging":"\u0412\u043A\u043B\u044E\u0447\u0438\u0442\u044C \u043E\u0442\u043B\u0430\u0434\u043A\u0443","Enable console output.":"\u0412\u043A\u043B\u044E\u0447\u0438\u0442\u044C \u0432\u044B\u0432\u043E\u0434 \u043A\u043E\u043D\u0441\u043E\u043B\u0438.",General:"\u041E\u0431\u0449\u0435\u0435","Editor Menu":"\u041C\u0435\u043D\u044E \u0440\u0435\u0434\u0430\u043A\u0442\u043E\u0440\u0430","File Menu":"\u041C\u0435\u043D\u044E \xAB\u0424\u0430\u0439\u043B\xBB","Left Ribbon":"\u041B\u0435\u0432\u0430\u044F \u041B\u0435\u043D\u0442\u0430","Right Ribbon":"\u041F\u0440\u0430\u0432\u0430\u044F \u041B\u0435\u043D\u0442\u0430",Titlebar:"\u0417\u0430\u0433\u043E\u043B\u043E\u0432\u043E\u043A",Statusbar:"\u0421\u0442\u0430\u0442\u0443\u0441 \u0431\u0430\u0440","Page Header":"\u041F\u0430\u043D\u0435\u043B\u044C \u0432\u043A\u043B\u0430\u0434\u043E\u043A","Support development":"\u041F\u043E\u0434\u0434\u0435\u0440\u0436\u043A\u0430 \u0440\u0430\u0437\u0440\u0430\u0431\u043E\u0442\u043A\u0438","No commands here!":"\u0417\u0434\u0435\u0441\u044C \u043D\u0435\u0442 \u043A\u043E\u043C\u0430\u043D\u0434!","Would you like to add one now?":"\u0425\u043E\u0442\u0438\u0442\u0435 \u0434\u043E\u0431\u0430\u0432\u0438\u0442\u044C \u0441\u0435\u0439\u0447\u0430\u0441?","Hide Commands":"\u0421\u043A\u0440\u044B\u0442\u044C \u043A\u043E\u043C\u0430\u043D\u0434\u044B","Choose new":"\u0412\u044B\u0431\u0440\u0430\u0442\u044C \u043D\u043E\u0432\u0443\u044E","Hide Commands of other Plugins":"\u0421\u043A\u0440\u044B\u0442\u044C \u043A\u043E\u043C\u0430\u043D\u0434\u044B \u0434\u0440\u0443\u0433\u0438\u0445 \u043F\u043B\u0430\u0433\u0438\u043D\u043E\u0432",Icon:"\u0418\u043A\u043E\u043D\u043A\u0430",Name:"\u0418\u043C\u044F","Custom Name":"\u041F\u043E\u043B\u044C\u0437\u043E\u0432\u0430\u0442\u0435\u043B\u044C\u0441\u043A\u043E\u0435 \u0438\u043C\u044F","Add command to all devices":"\u0414\u043E\u0431\u0430\u0432\u0438\u0442\u044C \u043A\u043E\u043C\u0430\u043D\u0434\u0443 \u043D\u0430 \u0432\u0441\u0435 \u0443\u0441\u0442\u0440\u043E\u0439\u0441\u0442\u0432\u0430","Add command only to mobile devices":"\u0414\u043E\u0431\u0430\u0432\u0438\u0442\u044C \u043A\u043E\u043C\u0430\u043D\u0434\u0443 \u0442\u043E\u043B\u044C\u043A\u043E \u0434\u043B\u044F \u043C\u043E\u0431\u0438\u043B\u044C\u043D\u044B\u0445 \u0443\u0441\u0442\u0440\u043E\u0439\u0441\u0442\u0432","Add command only to desktop devices":'\u0414\u043E\u0431\u0430\u0432\u0438\u0442\u044C \u043A\u043E\u043C\u0430\u043D\u0434\u0443 \u0442\u043E\u043B\u044C\u043A\u043E \u0434\u043B\u044F "Desktop" \u0443\u0441\u0442\u0440\u043E\u0439\u0441\u0442\u0432',"Add command only to this device":"\u0414\u043E\u0431\u0430\u0432\u0438\u0442\u044C \u043A\u043E\u043C\u0430\u043D\u0434\u0443 \u0442\u043E\u043B\u044C\u043A\u043E \u043D\u0430 \u044D\u0442\u043E \u0443\u0441\u0442\u0440\u043E\u0439\u0441\u0442\u0432\u043E",Done:"\u0413\u043E\u0442\u043E\u0432\u043E","By Johnny\u2728 and phibr0":'\u0421\u0434\u0435\u043B\u0430\u043B\u0438: "Johnny\u2728" \u0438 "phibr0"',"Leave feedback":"\u041E\u0441\u0442\u0430\u0432\u0438\u0442\u044C \u043E\u0442\u0437\u044B\u0432",Donate:"\u041F\u043E\u0436\u0435\u0440\u0442\u0432\u043E\u0432\u0430\u0442\u044C","Share feedback, issues, and ideas with our feedback form.":"\u041F\u043E\u0434\u0435\u043B\u0438\u0442\u0435\u0441\u044C \u043E\u0442\u0437\u044B\u0432\u0430\u043C\u0438, \u043F\u0440\u043E\u0431\u043B\u0435\u043C\u0430\u043C\u0438 \u0438 \u0438\u0434\u0435\u044F\u043C\u0438 \u0441 \u043F\u043E\u043C\u043E\u0449\u044C\u044E \u043D\u0430\u0448\u0435\u0439 \u0444\u043E\u0440\u043C\u044B \u043E\u0431\u0440\u0430\u0442\u043D\u043E\u0439 \u0441\u0432\u044F\u0437\u0438.","Consider donating to support development.":"\u041F\u043E\u0434\u0443\u043C\u0430\u0439\u0442\u0435 \u043E \u043F\u043E\u0436\u0435\u0440\u0442\u0432\u043E\u0432\u0430\u043D\u0438\u0438 \u0434\u043B\u044F \u043F\u043E\u0434\u0434\u0435\u0440\u0436\u043A\u0438 \u0440\u0430\u0437\u0432\u0438\u0442\u0438\u044F.",Save:"\u0421\u043E\u0445\u0440\u0430\u043D\u0438\u0442\u044C","This Command is not available on this device.":"This Command is not available on this device.",Show:"\u041F\u043E\u043A\u0430\u0437\u0430\u0442\u044C",Hide:"\u0421\u043F\u0440\u044F\u0442\u0430\u0442\u044C","Hide other Commands":"\u0421\u043F\u0440\u044F\u0442\u0430\u0442\u044C \u0434\u0440\u0443\u0433\u0438\u0435 \u043A\u043E\u043C\u0430\u043D\u0434\u044B","Double click to enter custom value":"\u0414\u0432\u0430\u0436\u0434\u044B \u0449\u0435\u043B\u043A\u043D\u0438\u0442\u0435, \u0447\u0442\u043E\u0431\u044B \u0432\u0432\u0435\u0441\u0442\u0438 \u043F\u043E\u043B\u044C\u0437\u043E\u0432\u0430\u0442\u0435\u043B\u044C\u0441\u043A\u043E\u0435 \u0437\u043D\u0430\u0447\u0435\u043D\u0438\u0435","Choose custom spacing for Command Buttons":"\u0412\u044B\u0431\u0435\u0440\u0438\u0442\u0435 \u043F\u043E\u043B\u044C\u0437\u043E\u0432\u0430\u0442\u0435\u043B\u044C\u0441\u043A\u0438\u0439 \u0438\u043D\u0442\u0435\u0440\u0432\u0430\u043B \u043C\u0435\u0436\u0434\u0443 \u043A\u043E\u043C\u0430\u043D\u0434\u043D\u044B\u043C\u0438 \u043A\u043D\u043E\u043F\u043A\u0430\u043C\u0438","Change the spacing between commands. You can set different values on mobile and desktop.":"\u0418\u0437\u043C\u0435\u043D\u0438\u0442\u0435 \u0440\u0430\u0441\u0441\u0442\u043E\u044F\u043D\u0438\u0435 \u043C\u0435\u0436\u0434\u0443 \u043A\u043E\u043C\u0430\u043D\u0434\u0430\u043C\u0438.",Warning:"\u041F\u0440\u0435\u0434\u0443\u043F\u0440\u0435\u0436\u0434\u0435\u043D\u0438\u0435","As of Obsidian 0.16.0 you need to explicitly enable the View Header.":"\u041D\u0430\u0447\u0438\u043D\u0430\u044F \u0441 Obsidian 0.16.0 \u0432\u0430\u043C \u043D\u0435\u043E\u0431\u0445\u043E\u0434\u0438\u043C\u043E \u044F\u0432\u043D\u043E \u0432\u043A\u043B\u044E\u0447\u0438\u0442\u044C \u0441\u0442\u0440\u043E\u043A\u0443 \u0437\u0430\u0433\u043E\u043B\u043E\u0432\u043A\u0430 \u0432\u043A\u043B\u0430\u0434\u043A\u0438. \u041F\u043E\u0441\u043B\u0435 \u0432\u043A\u043B\u044E\u0447\u0435\u043D\u0438\u044F \u0432\u0430\u043C \u043C\u043E\u0436\u0435\u0442 \u043F\u043E\u0442\u0440\u0435\u0431\u043E\u0432\u0430\u0442\u044C\u0441\u044F \u043F\u0435\u0440\u0435\u0437\u0430\u043F\u0443\u0441\u0442\u0438\u0442\u044C Obsidian.","Open Appearance Settings":"\u041E\u0442\u043A\u0440\u043E\u0439\u0442\u0435 \u043D\u0430\u0441\u0442\u0440\u043E\u0439\u043A\u0438 \u0432\u043D\u0435\u0448\u043D\u0435\u0433\u043E \u0432\u0438\u0434\u0430",Explorer:"\u0424\u0430\u0439\u043B\u043E\u0432\u044B\u0439 \u043C\u0435\u043D\u0435\u0434\u0436\u0435\u0440"};var Co={};var _o={"Open Commander Settings":"\u6253\u5F00 Commander \u8BBE\u7F6E","Open Macro Builder":"\u6253\u5F00\u5B8F\u6307\u4EE4\u751F\u6210\u5668","Change Icon":"\u66F4\u6362\u56FE\u6807",Rename:"\u91CD\u547D\u540D",Delete:"\u5220\u9664","Add command":"\u6DFB\u52A0\u547D\u4EE4","Add new":"\u6DFB\u52A0\u65B0\u547D\u4EE4","This Command seems to have been removed. {{command_name}}":"\u8BE5\u547D\u4EE4\u4F3C\u4E4E\u5DF2\u88AB\u79FB\u9664\u3002{{command_name}}","Choose a Command to add":"\u9009\u62E9\u4E00\u4E2A\u547D\u4EE4\u5E76\u6DFB\u52A0","to navigate":"\u5BFC\u822A","to choose an icon":"\u9009\u4E2D\u4E00\u4E2A\u56FE\u6807","to cancel":"\u53D6\u6D88","Use a custom name":"\u4F7F\u7528\u4E00\u4E2A\u81EA\u5B9A\u4E49\u540D\u79F0","Choose a custom Name for your new Command":"\u4E3A\u4F60\u7684\u65B0\u547D\u4EE4\u9009\u62E9\u4E00\u4E2A\u81EA\u5B9A\u4E49\u540D\u79F0","to save":"\u4FDD\u5B58","Choose a Icon for your new Command":"\u4E3A\u4F60\u7684\u65B0\u547D\u4EE4\u9009\u62E9\u4E00\u4E2A\u56FE\u6807","to choose a custom icon":"\u9009\u62E9\u4E00\u4E2A\u81EA\u5B9A\u4E49\u56FE\u6807","Remove Command":"\u79FB\u9664\u547D\u4EE4","Double click to rename":"\u53CC\u51FB\u4EE5\u91CD\u547D\u540D","This device":"\u8BE5\u8BBE\u5907","Added by {{plugin_name}}.":"\u7531{{plugin_name}}\u6DFB\u52A0\u3002","Warning: This is a checked Command, meaning it might not run under every circumstance.":"\u8B66\u544A\uFF1A\u8FD9\u662F\u4E00\u4E2A\u53D7\u68C0\u7684\u547D\u4EE4\uFF0C\u8FD9\u610F\u5473\u7740\u5B83\u672A\u5FC5\u80FD\u5728\u6240\u6709\u73AF\u5883\u4E0B\u8FD0\u884C\u3002","Move down":"\u5411\u4E0B\u79FB\u52A8","Move up":"\u5411\u4E0A\u79FB\u52A8","Change Mode (Currently: {{current_mode}})":"\u5207\u6362\u6A21\u5F0F\uFF08\u5F53\u524D\uFF1A{{current_mode}}\uFF09","Are you sure you want to delete the Command?":"\u662F\u5426\u786E\u8BA4\u79FB\u9664\u8BE5\u547D\u4EE4\uFF1F","Remove and don't ask again":"\u79FB\u9664\u4E14\u4E0D\u8981\u518D\u8BE2\u95EE",Remove:"\u79FB\u9664",Cancel:"\u53D6\u6D88","Always ask before removing?":"\u5728\u79FB\u9664\u524D\u603B\u662F\u8BE2\u95EE\uFF1F","Always show a Popup to confirm deletion of a Command.":"\u5728\u786E\u8BA4\u79FB\u9664\u547D\u4EE4\u524D\u603B\u662F\u5F39\u7A97\u3002",'Show "Add Command" Button':"\u663E\u793A\u201C\u6DFB\u52A0\u547D\u4EE4\u201D\u6309\u94AE",'Show the "Add Command" Button in every Menu. Requires restart.':"\u5728\u6BCF\u4E2A\u83DC\u5355\u90FD\u5C55\u793A\u201C\u6DFB\u52A0\u547D\u4EE4\u201D\u6309\u94AE\u3002\u9700\u8981\u91CD\u542F\u3002","Please restart Obsidian for these changes to take effect.":"\u8BF7\u91CD\u542F Obsidian \u4EE5\u4F7F\u8FD9\u4E9B\u66F4\u6539\u751F\u6548\u3002","Enable debugging":"\u542F\u7528\u9664\u9519","Enable console output.":"\u542F\u7528\u63A7\u5236\u53F0\u8F93\u51FA\u3002",General:"\u901A\u7528","Editor Menu":"\u7F16\u8F91\u5668\u83DC\u5355","File Menu":"\u6587\u4EF6\u83DC\u5355","Left Ribbon":"\u5DE6\u4FA7\u8FB9\u680F","Right Ribbon":"\u53F3\u4FA7\u8FB9\u680F",Titlebar:"\u6807\u9898\u680F",Statusbar:"\u72B6\u6001\u680F","Page Header":"\u9875\u9996","Support development":"\u652F\u6301\u5F00\u53D1","No commands here!":"\u8FD9\u91CC\u6CA1\u6709\u547D\u4EE4\uFF01","Would you like to add one now?":"\u4F60\u73B0\u5728\u60F3\u8981\u52A0\u4E00\u4E2A\u5417\uFF1F","Hide Commands":"\u9690\u85CF\u547D\u4EE4","Choose new":"\u9009\u62E9\u65B0\u7684","Hide Commands of other Plugins":"\u9690\u85CF\u5176\u4ED6\u63D2\u4EF6\u7684\u547D\u4EE4",Icon:"\u56FE\u6807",Name:"\u540D\u79F0","Custom Name":"\u81EA\u5B9A\u4E49\u540D\u79F0","Add command to all devices":"\u5411\u6240\u6709\u8BBE\u5907\u6DFB\u52A0\u547D\u4EE4","Add command only to mobile devices":"\u53EA\u5411\u79FB\u52A8\u8BBE\u5907\u6DFB\u52A0\u547D\u4EE4","Add command only to desktop devices":"\u53EA\u5411\u684C\u9762\u8BBE\u5907\u6DFB\u52A0\u547D\u4EE4","Add command only to this device":"\u53EA\u5411\u5F53\u524D\u8BBE\u5907\u6DFB\u52A0\u547D\u4EE4",Done:"\u5B8C\u6210","By Johnny\u2728 and phibr0":"\u7531 Johnny\u2728 \u548C phibr0 \u5F00\u53D1","Leave feedback":"\u7559\u4E0B\u53CD\u9988",Donate:"\u6350\u8D60","Share feedback, issues, and ideas with our feedback form.":"\u4EE5\u6211\u4EEC\u7684\u53CD\u9988\u8868\uFF0C\u5206\u4EAB\u53CD\u9988\u3001\u8BAE\u9898\u6216\u8005\u4F60\u7684\u60F3\u6CD5\u3002","Consider donating to support development.":"\u8003\u8651\u6350\u8D60\u4EE5\u652F\u6301\u5F00\u53D1\u3002",Save:"\u4FDD\u5B58","This Command is not available on this device.":"\u8FD9\u4E00\u547D\u4EE4\u5728\u5F53\u524D\u8BBE\u5907\u4E0D\u53EF\u7528\u3002",Show:"\u663E\u793A",Hide:"\u9690\u85CF","Hide other Commands":"\u9690\u85CF\u5176\u4F59\u547D\u4EE4","Double click to enter custom value":"\u53CC\u51FB\u4EE5\u6DFB\u52A0\u81EA\u5B9A\u4E49\u503C","Choose custom spacing for Command Buttons":"\u4E3A\u547D\u4EE4\u6309\u94AE\u9009\u62E9\u81EA\u5B9A\u4E49\u95F4\u8DDD","Change the spacing between commands. You can set different values on mobile and desktop.":"\u6539\u53D8\u547D\u4EE4\u4E4B\u95F4\u7684\u95F4\u8DDD\u3002\u4F60\u53EF\u4EE5\u4E3A\u79FB\u52A8\u548C\u684C\u9762\u8BBE\u5907\u8BBE\u7F6E\u4E0D\u540C\u7684\u503C\u3002",Warning:"\u8B66\u544A","As of Obsidian 0.16.0 you need to explicitly enable the View Header.":"\u4ECE Obsidian 0.16.0 \u5F00\u59CB\uFF0C\u4F60\u9700\u8981\u663E\u5F0F\u542F\u7528\u6807\u7B7E\u9875\u6807\u9898\u680F\u3002\u542F\u7528\u540E\uFF0C\u9700\u8981\u91CD\u542F Obsidian \u624D\u80FD\u751F\u6548\u3002","Open Appearance Settings":"\u6253\u5F00\u5916\u89C2\u8BBE\u7F6E",Explorer:"\u6587\u4EF6\u7BA1\u7406\u5668"};var yo={};var pa={ar:Qt,cs:eo,da:to,de:oo,en:gt,"en-gb":no,es:ao,fr:io,hi:ro,id:so,it:co,ja:mo,ko:lo,nl:uo,nn:po,pl:fo,pt:ho,"pt-br":vo,ro:go,ru:bo,tr:Co,"zh-cn":_o,"zh-tw":yo},bt=pa[Ct.moment.locale()];function u(t){return bt||console.error("Error: dictionary locale not found",Ct.moment.locale()),bt&&bt[t]||gt[t]}var ne=class extends Ve.FuzzySuggestModal{constructor(e){super(e.app);this.plugin=e,this.commands=Object.values(e.app.commands.commands),this.setPlaceholder(u("Choose a Command to add")),this.setInstructions([{command:"\u2191\u2193",purpose:u("to navigate")},{command:"\u21B5",purpose:u("to choose an icon")},{command:"esc",purpose:u("to cancel")}])}async awaitSelection(){return this.open(),new Promise((e,n)=>{this.onChooseItem=a=>e(a),this.onClose=()=>window.setTimeout(()=>n("No Command selected"),0)})}renderSuggestion(e,n){if(n.addClass("mod-complex"),n.createDiv({cls:"suggestion-content"}).createDiv({cls:"suggestion-title"}).setText(e.item.name),e.item.icon){let i=n.createDiv({cls:"suggestion-aux"});(0,Ve.setIcon)(i.createSpan({cls:"suggestion-flair"}),e.item.icon)}}getItems(){return this.commands}getItemText(e){return e.name}onChooseItem(e,n){}};var We=require("obsidian"),wo={confirmDeletion:!0,showAddCommand:!0,debug:!1,editorMenu:[],fileMenu:[],leftRibbon:[],rightRibbon:[],titleBar:[],statusBar:[],pageHeader:[],macros:[],explorer:[],hide:{statusbar:[],leftRibbon:[]},spacing:8,advancedToolbar:{rowHeight:48,rowCount:1,spacing:0,buttonWidth:48,columnLayout:!1,mappedIcons:[],tooltips:!1,heightOffset:0}},ko=(0,We.requireApiVersion)("1.7.3")?(0,We.getIconIds)():["activity","airplay","alarm-check","alarm-clock-off","alarm-clock","alarm-minus","alarm-plus","album","alert-circle","alert-octagon","alert-triangle","align-center-horizontal","align-center-vertical","align-center","align-end-horizontal","align-end-vertical","align-horizontal-distribute-center","align-horizontal-distribute-end","align-horizontal-distribute-start","align-horizontal-justify-center","align-horizontal-justify-end","align-horizontal-justify-start","align-horizontal-space-around","align-horizontal-space-between","align-justify","align-left","align-right","align-start-horizontal","align-start-vertical","align-vertical-distribute-center","align-vertical-distribute-end","align-vertical-distribute-start","align-vertical-justify-center","align-vertical-justify-end","align-vertical-justify-start","align-vertical-space-around","align-vertical-space-between","anchor","aperture","archive","arrow-big-down","arrow-big-left","arrow-big-right","arrow-big-up","arrow-down-circle","arrow-down-left","arrow-down-right","arrow-down","arrow-left-circle","arrow-left-right","arrow-left","arrow-right-circle","arrow-right","arrow-up-circle","arrow-up-left","arrow-up-right","arrow-up","asterisk","at-sign","award","axe","banknote","bar-chart-2","bar-chart","baseline","battery-charging","battery-full","battery-low","battery-medium","battery","beaker","bell-minus","bell-off","bell-plus","bell-ring","bell","bike","binary","bitcoin","bluetooth-connected","bluetooth-off","bluetooth-searching","bluetooth","bold","book-open","book","bookmark-minus","bookmark-plus","bookmark","bot","box-select","box","briefcase","brush","bug","building-2","building","bus","calculator","calendar","camera-off","camera","car","carrot","cast","check-circle-2","check-circle","check-square","check","chevron-down","chevron-first","chevron-last","chevron-left","chevron-right","chevron-up","chevrons-down-up","chevrons-down","chevrons-left","chevrons-right","chevrons-up-down","chevrons-up","chrome","circle-slashed","circle","clipboard-check","clipboard-copy","clipboard-list","clipboard-x","clipboard","clock-1","clock-10","clock-11","clock-12","clock-2","clock-3","clock-4","clock-5","clock-6","clock-7","clock-8","clock-9","lucide-clock","cloud-drizzle","cloud-fog","cloud-hail","cloud-lightning","cloud-moon","cloud-off","cloud-rain-wind","cloud-rain","cloud-snow","cloud-sun","lucide-cloud","cloudy","clover","code-2","code","codepen","codesandbox","coffee","coins","columns","command","compass","contact","contrast","cookie","copy","copyleft","copyright","corner-down-left","corner-down-right","corner-left-down","corner-left-up","corner-right-down","corner-right-up","corner-up-left","corner-up-right","cpu","credit-card","crop","lucide-cross","crosshair","crown","currency","database","delete","dice-1","dice-2","dice-3","dice-4","dice-5","dice-6","disc","divide-circle","divide-square","divide","dollar-sign","download-cloud","download","dribbble","droplet","droplets","drumstick","edit-2","edit-3","edit","egg","equal-not","equal","eraser","euro","expand","external-link","eye-off","eye","facebook","fast-forward","feather","figma","file-check-2","file-check","file-code","file-digit","file-input","file-minus-2","file-minus","file-output","file-plus-2","file-plus","file-search","file-text","file-x-2","file-x","file","files","film","filter","flag-off","flag-triangle-left","flag-triangle-right","flag","flame","flashlight-off","flashlight","flask-conical","flask-round","folder-minus","folder-open","folder-plus","lucide-folder","form-input","forward","frame","framer","frown","function-square","gamepad-2","gamepad","gauge","gavel","gem","ghost","gift","git-branch-plus","git-branch","git-commit","git-fork","git-merge","git-pull-request","github","gitlab","glasses","globe-2","globe","grab","graduation-cap","grid","grip-horizontal","grip-vertical","hammer","hand-metal","hand","hard-drive","hard-hat","hash","haze","headphones","heart","help-circle","hexagon","highlighter","history","home","image-minus","image-off","image-plus","image","import","inbox","indent","indian-rupee","infinity","lucide-info","inspect","instagram","italic","japanese-yen","key","keyboard","landmark","lucide-languages","laptop-2","laptop","lasso-select","lasso","layers","layout-dashboard","layout-grid","layout-list","layout-template","layout","library","life-buoy","lightbulb-off","lightbulb","link-2-off","link-2","lucide-link","linkedin","list-checks","list-minus","list-ordered","list-plus","list-x","list","loader-2","loader","locate-fixed","locate-off","locate","lock","log-in","log-out","mail","map-pin","map","maximize-2","maximize","megaphone","meh","menu","message-circle","message-square","mic-off","mic","minimize-2","minimize","minus-circle","minus-square","minus","monitor-off","monitor-speaker","monitor","moon","more-horizontal","more-vertical","mountain-snow","mountain","mouse-pointer-2","mouse-pointer-click","mouse-pointer","mouse","move-diagonal-2","move-diagonal","move-horizontal","move-vertical","move","music","navigation-2","navigation","network","octagon","option","outdent","package-check","package-minus","package-plus","package-search","package-x","package","palette","palmtree","paperclip","pause-circle","pause-octagon","pause","pen-tool","lucide-pencil","percent","person-standing","phone-call","phone-forwarded","phone-incoming","phone-missed","phone-off","phone-outgoing","phone","pie-chart","piggy-bank","lucide-pin","pipette","plane","play-circle","play","plug-zap","plus-circle","plus-square","plus","pocket","podcast","pointer","pound-sterling","power-off","power","printer","qr-code","quote","radio-receiver","radio","redo","refresh-ccw","refresh-cw","regex","repeat-1","repeat","reply-all","reply","rewind","rocket","rocking-chair","rotate-ccw","rotate-cw","rss","ruler","russian-ruble","save","scale","scan-line","scan","scissors","screen-share-off","screen-share","lucide-search","send","separator-horizontal","separator-vertical","server-crash","server-off","server","settings-2","settings","share-2","share","sheet","shield-alert","shield-check","shield-close","shield-off","shield","shirt","shopping-bag","shopping-cart","shovel","shrink","shuffle","sidebar-close","sidebar-open","sidebar","sigma","signal-high","signal-low","signal-medium","signal-zero","signal","skip-back","skip-forward","skull","slack","slash","sliders","smartphone-charging","smartphone","smile","snowflake","sort-asc","sort-desc","speaker","sprout","square","star-half","lucide-star","stop-circle","stretch-horizontal","stretch-vertical","strikethrough","subscript","sun","sunrise","sunset","superscript","swiss-franc","switch-camera","table","tablet","tag","target","tent","terminal-square","terminal","text-cursor-input","text-cursor","thermometer-snowflake","thermometer-sun","thermometer","thumbs-down","thumbs-up","ticket","timer-off","timer-reset","timer","toggle-left","toggle-right","tornado","trash-2","lucide-trash","trello","trending-down","trending-up","triangle","truck","tv-2","tv","twitch","twitter","type","umbrella","underline","undo","unlink-2","unlink","unlock","upload-cloud","upload","user-check","user-minus","user-plus","user-x","user","users","verified","vibrate","video-off","video","view","voicemail","volume-1","volume-2","volume-x","volume","wallet","wand","watch","waves","webcam","wifi-off","wifi","wind","wrap-text","wrench","x-circle","x-octagon","x-square","x","youtube","zap-off","zap","zoom-in","zoom-out","search-large"];var je=require("obsidian");var R=class extends je.FuzzySuggestModal{constructor(e){super(e.app);this.plugin=e,this.setPlaceholder(u("Choose a Icon for your new Command")),this.setInstructions([{command:"\u2191\u2193",purpose:u("to navigate")},{command:"\u21B5",purpose:u("to choose a custom icon")},{command:"esc",purpose:u("to cancel")}])}async awaitSelection(){return this.open(),new Promise((e,n)=>{this.onChooseItem=a=>e(a),this.onClose=()=>window.setTimeout(()=>n("No Icon selected"),0)})}renderSuggestion(e,n){n.addClass("mod-complex"),n.createDiv({cls:"suggestion-content"}).createDiv({cls:"suggestion-title"}).setText(e.item.replace("lucide-","").replace(/-/g," ").replace(/(^\w{1})|(\s+\w{1})/g,c=>c.toUpperCase()));let i=n.createDiv({cls:"suggestion-aux"});(0,je.setIcon)(i.createSpan({cls:"suggestion-flair"}),e.item)}getItems(){return ko}getItemText(e){return e}onChooseItem(e,n){}};var tt=require("obsidian");var Mo=require("obsidian");var U=class extends Mo.SuggestModal{constructor(e,n){super(n.app);this.defaultName=e;this.plugin=n;this.setPlaceholder(u("Use a custom name")),this.resultContainerEl.style.display="none",this.setInstructions([{command:"",purpose:u("Choose a custom Name for your new Command")},{command:"\u21B5",purpose:u("to save")},{command:"esc",purpose:u("to cancel")}])}onOpen(){var a;super.onOpen(),this.inputEl.value=this.defaultName;let e=createDiv({cls:"cmdr-name-input-wrapper"});(a=this.inputEl.parentNode)==null||a.insertBefore(e,this.inputEl),e.appendChild(this.inputEl),e.parentElement.style.display="block";let n=createEl("button",{text:u("Save"),cls:"mod-cta"});n.onclick=i=>this.selectSuggestion(this.inputEl.value,i),e.appendChild(n)}async awaitSelection(){return this.open(),new Promise((e,n)=>{this.onChooseSuggestion=a=>e(a),this.onClose=()=>window.setTimeout(()=>n("No Name selected"),0)})}getSuggestions(e){return[e]}renderSuggestion(e,n){}onChooseSuggestion(e,n){}};var Xe,_,Io,fa,_e,Eo,Ao,qe={},To=[],ha=/acit|ex(?:s|g|n|p|$)|rph|grid|ows|mnc|ntw|ine[ch]|zoo|^ord|itera/i;function ae(t,o){for(var e in o)t[e]=o[e];return t}function Lo(t){var o=t.parentNode;o&&o.removeChild(t)}function r(t,o,e){var n,a,i,c={};for(i in o)i=="key"?n=o[i]:i=="ref"?a=o[i]:c[i]=o[i];if(arguments.length>2&&(c.children=arguments.length>3?Xe.call(arguments,2):e),typeof t=="function"&&t.defaultProps!=null)for(i in t.defaultProps)c[i]===void 0&&(c[i]=t.defaultProps[i]);return Ue(t,c,n,a,null)}function Ue(t,o,e,n,a){var i={type:t,props:o,key:e,ref:n,__k:null,__:null,__b:0,__e:null,__d:void 0,__c:null,__h:null,constructor:void 0,__v:a==null?++Io:a};return a==null&&_.vnode!=null&&_.vnode(i),i}function P(t){return t.children}function G(t,o){this.props=t,this.context=o}function ye(t,o){if(o==null)return t.__?ye(t.__,t.__.__k.indexOf(t)+1):null;for(var e;o0?Ue(f.type,f.props,f.key,f.ref?f.ref:null,f.__v):f)!=null){if(f.__=e,f.__b=e.__b+1,(b=A[s])===null||b&&f.key==b.key&&f.type===b.type)A[s]=void 0;else for(g=0;g=e.__.length&&e.__.push({__V:$e}),e.__[t]}function D(t){return Ke=1,Xo(Yo,t)}function Xo(t,o,e){var n=Qe(ke++,2);if(n.t=t,!n.__c&&(n.__=[e?e(o):Yo(void 0,o),function(i){var c=n.__N?n.__N[0]:n.__[0],m=n.t(c,i);c!==m&&(n.__N=[m,n.__[1]],n.__c.setState({}))}],n.__c=z,!z.u)){z.u=!0;var a=z.shouldComponentUpdate;z.shouldComponentUpdate=function(i,c,m){if(!n.__c.__H)return!0;var l=n.__c.__H.__.filter(function(s){return s.__c});if(l.every(function(s){return!s.__N}))return!a||a.call(this,i,c,m);var h=!1;return l.forEach(function(s){if(s.__N){var g=s.__[0];s.__=s.__N,s.__N=void 0,g!==s.__[0]&&(h=!0)}}),!(!h&&n.__c.props===i)&&(!a||a.call(this,i,c,m))}}return n.__N||n.__}function O(t,o){var e=Qe(ke++,3);!_.__s&&Et(e.__H,o)&&(e.__=t,e.i=o,z.__H.__h.push(e))}function Mt(t,o){var e=Qe(ke++,4);!_.__s&&Et(e.__H,o)&&(e.__=t,e.i=o,z.__h.push(e))}function K(t){return Ke=5,et(function(){return{current:t}},[])}function et(t,o){var e=Qe(ke++,7);return Et(e.__H,o)?(e.__V=t(),e.i=o,e.__h=t,e.__V):e.__}function Ca(){for(var t;t=Jo.shift();)if(t.__P&&t.__H)try{t.__H.__h.forEach(Ge),t.__H.__h.forEach(kt),t.__H.__h=[]}catch(o){t.__H.__h=[],_.__e(o,t.__v)}}_.__b=function(t){z=null,Vo&&Vo(t)},_.__r=function(t){Wo&&Wo(t),ke=0;var o=(z=t.__c).__H;o&&(wt===z?(o.__h=[],z.__h=[],o.__.forEach(function(e){e.__N&&(e.__=e.__N),e.__V=$e,e.__N=e.i=void 0})):(o.__h.forEach(Ge),o.__h.forEach(kt),o.__h=[])),wt=z},_.diffed=function(t){jo&&jo(t);var o=t.__c;o&&o.__H&&(o.__H.__h.length&&(Jo.push(o)!==1&&Fo===_.requestAnimationFrame||((Fo=_.requestAnimationFrame)||_a)(Ca)),o.__H.__.forEach(function(e){e.i&&(e.__H=e.i),e.__V!==$e&&(e.__=e.__V),e.i=void 0,e.__V=$e})),wt=z=null},_.__c=function(t,o){o.some(function(e){try{e.__h.forEach(Ge),e.__h=e.__h.filter(function(n){return!n.__||kt(n)})}catch(n){o.some(function(a){a.__h&&(a.__h=[])}),o=[],_.__e(n,e.__v)}}),Uo&&Uo(t,o)},_.unmount=function(t){qo&&qo(t);var o,e=t.__c;e&&e.__H&&(e.__H.__.forEach(function(n){try{Ge(n)}catch(a){o=a}}),e.__H=void 0,o&&_.__e(o,e.__v))};var Zo=typeof requestAnimationFrame=="function";function _a(t){var o,e=function(){clearTimeout(n),Zo&&cancelAnimationFrame(o),setTimeout(t)},n=setTimeout(e,100);Zo&&(o=requestAnimationFrame(e))}function Ge(t){var o=z,e=t.__c;typeof e=="function"&&(t.__c=void 0,e()),z=o}function kt(t){var o=z;t.__c=t.__(),z=o}function Et(t,o){return!t||t.length!==o.length||o.some(function(e,n){return e!==t[n]})}function Yo(t,o){return typeof o=="function"?o(t):o}var xt={};(function t(o,e,n,a){var i=!!(o.Worker&&o.Blob&&o.Promise&&o.OffscreenCanvas&&o.OffscreenCanvasRenderingContext2D&&o.HTMLCanvasElement&&o.HTMLCanvasElement.prototype.transferControlToOffscreen&&o.URL&&o.URL.createObjectURL);function c(){}function m(p){var d=e.exports.Promise,S=d!==void 0?d:o.Promise;return typeof S=="function"?new S(p):(p(c,c),null)}var l=function(){var p=Math.floor(16.666666666666668),d,S,M={},T=0;return typeof requestAnimationFrame=="function"&&typeof cancelAnimationFrame=="function"?(d=function(I){var E=Math.random();return M[E]=requestAnimationFrame(function x(B){T===B||T+p-1{(0,tt.setIcon)(i.current,t)},[t,o]),r("div",Fe({ref:i},e))}function X(t,o){let{isMobile:e,appId:n}=o.app;return t==="any"||t===n||t==="mobile"&&e||t==="desktop"&&!e}function Me(t){var e,n;let o="";for(let a of(e=t.hide.leftRibbon)!=null?e:[])o+=`div.side-dock-ribbon-action[aria-label="${a}"] {display: none !important; content-visibility: hidden;}`;for(let a of t.hide.statusbar)o+=`div.status-bar-item.plugin-${a} {display: none !important; content-visibility: hidden;}`;(n=document.head.querySelector("style#cmdr"))==null||n.remove(),o&&document.head.appendChild(createEl("style",{attr:{id:"cmdr"},text:o,type:"text/css"}))}async function St({target:t}){let o=activeDocument.createElement("canvas");activeDocument.body.appendChild(o),o.style.position="fixed",o.style.width="100vw",o.style.height="100vh",o.style.top="0px",o.style.left="0px",o.style["pointer-events"]="none",o.style["z-index"]="100";let e=$o.create(o,{resize:!0,useWorker:!0}),n=t.getBoundingClientRect();await e({particleCount:tt.Platform.isDesktop?160:80,startVelocity:55,spread:75,angle:90,drift:-1,ticks:250,origin:{x:(n.x+n.width/2)/activeWindow.innerWidth,y:(n.y+n.height/2)/activeWindow.innerHeight}}),o.remove()}function ot(t){activeDocument.body.style.setProperty("--cmdr-spacing",`${t}px`)}function Ee(t){let o=Object.keys(t.app.commands.commands).filter(n=>n.startsWith("cmdr:macro-"));for(let n of o)app.commands.removeCommand(n);let e=t.settings.macros;for(let[n,a]of Object.entries(e))t.addCommand({id:`macro-${n}`,name:a.name,callback:()=>{t.executeMacro(parseInt(n))}})}function oe(t){var n,a;let{classList:o,style:e}=document.body;e.setProperty("--at-button-height",((n=t.rowHeight)!=null?n:48)+"px"),e.setProperty("--at-button-width",((a=t.buttonWidth)!=null?a:48)+"px"),e.setProperty("--at-row-count",t.rowCount.toString()),e.setProperty("--at-spacing",t.spacing+"px"),e.setProperty("--at-offset",t.heightOffset+"px"),o.toggle("AT-multirow",t.rowCount>1),o.toggle("AT-row",!t.columnLayout),o.toggle("AT-column",t.columnLayout),o.toggle("AT-no-toolbar",t.rowCount===0)}function Go(){let{classList:t,style:o}=document.body;o.removeProperty("--at-button-height"),o.removeProperty("--at-button-width"),o.removeProperty("--at-row-count"),o.removeProperty("--at-spacing"),o.removeProperty("--at-offset"),t.remove("AT-multirow"),t.remove("AT-row"),t.remove("AT-column"),t.remove("AT-no-toolbar"),t.remove("advanced-toolbar")}function nt(t,o){t.mappedIcons.forEach(e=>{let n=o.app.commands.commands[e.commandID];n?n.icon=e.iconID:t.mappedIcons.remove(e)})}var Pn=require("obsidian");var xe=require("obsidian");var Qo=require("obsidian");function Ko({modal:t}){return r(P,null,r("p",null,u("Are you sure you want to delete the Command?")),r("div",{className:"modal-button-container"},r("button",{className:"mod-warning",onClick:async()=>{t.plugin.settings.confirmDeletion=!1,t.plugin.saveSettings(),t.remove=!0,t.close()}},u("Remove and don't ask again")),r("button",{className:"mod-warning",onClick:()=>{t.remove=!0,t.close()}},u("Remove")),r("button",{onClick:()=>{t.remove=!1,t.close()}},u("Cancel"))))}var F=class extends Qo.Modal{constructor(e){super(e.app);this.plugin=e}async onOpen(){this.titleEl.innerText=u("Remove Command"),this.containerEl.style.zIndex="99",this.reactComponent=r(Ko,{modal:this}),W(this.reactComponent,this.contentEl)}async didChooseRemove(){return this.open(),new Promise(e=>{this.onClose=()=>{var n;return e((n=this.remove)!=null?n:!1)}})}onClose(){W(null,this.contentEl)}};var Z=class{constructor(o,e){this.plugin=o,this.pairs=e}};var ve=class extends Z{constructor(e,n){super(e,n);this.actions=new Map;this.init(),this.plugin.register(()=>this.actions.forEach((a,i)=>this.removeAction(i)))}getFileExplorers(){return this.plugin.app.workspace.getLeavesOfType("file-explorer")}init(){this.plugin.app.workspace.onLayoutReady(()=>{for(let e of this.pairs)X(e.mode,this.plugin)&&(this.plugin.app.workspace.onLayoutReady(()=>{this.getFileExplorers().forEach(a=>{this.addAction(e,a)})}),this.plugin.registerEvent(this.plugin.app.workspace.on("layout-change",()=>{this.getFileExplorers().forEach(a=>{this.addAction(e,a)})})))})}reorder(){this.actions.forEach((e,n)=>this.removeAction(n,!0)),this.init()}async addCommand(e){this.pairs.push(e),this.plugin.app.workspace.onLayoutReady(()=>{this.getFileExplorers().forEach(a=>{this.addAction(e,a)})}),this.plugin.registerEvent(this.plugin.app.workspace.on("layout-change",()=>{this.getFileExplorers().forEach(a=>{this.addAction(e,a)})})),await this.plugin.saveSettings()}async removeCommand(e){this.pairs.remove(e),this.removeAction(e),await this.plugin.saveSettings()}buttonExists(e,n){return[...e.view.containerEl.querySelectorAll("div.nav-buttons-container > .cmdr.clickable-icon")].some(a=>a.getAttribute("data-cmdr")===n.icon+n.name)}addAction(e,n){var l,h,s,g,b;if(this.buttonExists(n,e))return;let a=createDiv({cls:"cmdr clickable-icon",attr:{"aria-label-position":"top","aria-label":e.name,"data-cmdr":e.icon+e.name}});this.actions.set(e,a),a.style.color=e.color==="#000000"||e.color===void 0?"inherit":e.color;let i=!1,c=()=>{a.empty(),(0,xe.setIcon)(a,e.icon),a.onclick=()=>this.plugin.app.commands.executeCommandById(e.id)},m=()=>{a.empty(),(0,xe.setIcon)(a,"trash"),a.onclick=async()=>{(!this.plugin.settings.confirmDeletion||await new F(this.plugin).didChooseRemove())&&this.removeCommand(e)}};a.addEventListener("mouseleave",()=>{c(),i=!1}),a.addEventListener("mousemove",f=>{f.preventDefault(),f.stopImmediatePropagation(),f.shiftKey&&(i||m(),i=!0)}),a.addEventListener("contextmenu",f=>{f.stopImmediatePropagation(),new xe.Menu().addItem(C=>{C.setTitle(u("Add command")).setIcon("command").onClick(async()=>{let w=await q(this.plugin);this.addCommand(w)})}).addSeparator().addItem(C=>{C.setTitle(u("Change Icon")).setIcon("box").onClick(async()=>{let w=await new R(this.plugin).awaitSelection();w&&w!==e.icon&&(e.icon=w,await this.plugin.saveSettings(),this.reorder())})}).addItem(C=>{C.setTitle(u("Rename")).setIcon("text-cursor-input").onClick(async()=>{let w=await new U(e.name,this.plugin).awaitSelection();w&&w!==e.name&&(e.name=w,await this.plugin.saveSettings(),this.reorder())})}).addItem(C=>{C.dom.addClass("is-warning"),C.setTitle(u("Delete")).setIcon("lucide-trash").onClick(async()=>{(!this.plugin.settings.confirmDeletion||await new F(this.plugin).didChooseRemove())&&this.removeCommand(e)})}).showAtMouseEvent(f)}),c(),(b=(g=(s=(h=(l=n.view)==null?void 0:l.containerEl)==null?void 0:h.querySelector)==null?void 0:s.call(h,"div.nav-buttons-container"))==null?void 0:g.appendChild)==null||b.call(g,a)}removeAction(e,n=!1){let a=this.actions.get(e);if(!!a){if(n){a.remove(),this.actions.delete(e);return}a.addClass("cmdr-ribbon-removing"),a.addEventListener("transitionend",async()=>{a.remove(),this.actions.delete(e)})}}};var se=require("obsidian");var at=class extends Z{async addCommand(o){this.pairs.push(o),await this.plugin.saveSettings()}async removeCommand(o){this.pairs.remove(o),await this.plugin.saveSettings()}reorder(){}addRemovableCommand(o,e,n,a,i){return c=>{var f;c.dom.addClass("cmdr"),c.dom.style.color=e.color==="#000000"||e.color===void 0?"inherit":e.color,c.setSection("cmdr"),c.dom.style.display="flex";let m=createDiv({cls:"cmdr-menu-more-options"}),l=null;m.addEventListener("click",C=>{C.preventDefault(),C.stopImmediatePropagation(),l?(l.hide(),l=null):l=new se.Menu().addItem(w=>{w.setTitle(u("Change Icon")).setIcon("box").onClick(async()=>{let v=await new R(n).awaitSelection();v&&v!==e.icon&&(e.icon=v,await n.saveSettings())})}).addItem(w=>{w.setTitle(u("Rename")).setIcon("text-cursor-input").onClick(async()=>{let v=await new U(e.name,n).awaitSelection();v&&v!==e.name&&(e.name=v,await n.saveSettings())})}).addItem(w=>{w.dom.addClass("is-warning"),w.setTitle(u("Delete")).setIcon("lucide-trash").onClick(async()=>{(!n.settings.confirmDeletion||await new F(n).didChooseRemove())&&b()})}).showAtMouseEvent(C)}),(0,se.setIcon)(m,"more-vertical"),c.dom.append(m),c.setTitle((f=e.name)!=null?f:o.name).setIcon(e.icon).onClick(()=>n.app.commands.executeCommandById(e.id));let h=!1,s=()=>{m.style.display="none"},g=()=>{m.style.display="block"},b=async()=>{c.dom.addClass("cmdr-removing"),a.registerDomEvent(c.dom,"transitionend",()=>{c.dom.remove()}),i.remove(e),await n.saveSettings()};a.registerDomEvent(c.dom,"mousemove",C=>{C.preventDefault(),C.stopImmediatePropagation(),h||g(),h=!0}),a.registerDomEvent(c.dom,"mouseleave",()=>{s(),h=!1}),s()}}addCommandAddButton(o,e,n){o.settings.showAddCommand&&e.addItem(a=>{a.setTitle(u("Add command")).setIcon("plus-circle").setSection("cmdr").onClick(async()=>{try{let i=await q(o);n.push(i),await o.saveSettings()}catch(i){console.log(i)}})})}},Se=class extends at{applyEditorMenuCommands(o){return async(e,n,a)=>{this.addCommandAddButton(o,e,o.settings.editorMenu);for(let i of o.settings.editorMenu){let c=Q(i.id,o);!c||!X(i.mode,o)||c.checkCallback&&!c.checkCallback(!0)||c.editorCheckCallback&&!c.editorCheckCallback(!0,n,a)||e.addItem(this.addRemovableCommand.call(this,c,i,o,e,o.settings.editorMenu))}}}},Pe=class extends at{applyFileMenuCommands(o){return async(e,n,a,i)=>{this.addCommandAddButton(o,e,o.settings.fileMenu);for(let c of o.settings.fileMenu){let m=Q(c.id,o);if(!!m&&!(m.checkCallback&&!m.checkCallback(!0))){if(m.editorCallback){if(!((i==null?void 0:i.view)instanceof se.MarkdownView))continue}else if(m.editorCheckCallback)if((i==null?void 0:i.view)instanceof se.MarkdownView){if(!m.editorCheckCallback(!0,i.view.editor,i.view))continue}else continue;e.addItem(this.addRemovableCommand.call(this,m,c,o,e,o.settings.fileMenu))}}}}};var ce=require("obsidian");var ge=class extends Z{constructor(e,n){super(e,n);this.buttons=new WeakMap;this.init()}addPageHeaderButton(e,n){let{id:a,icon:i,name:c}=n,{view:m}=e;if(!(m instanceof ce.ItemView))return;let l=this.buttonsFor(e,!0);if(!l||l.has(a))return;let h=m.addAction(i,c,()=>{this.plugin.app.workspace.setActiveLeaf(e,{focus:!0}),this.plugin.app.commands.executeCommandById(a)});l.set(a,h),h.addClasses(["cmdr-page-header",a]),h.style.color=n.color==="#000000"||n.color===void 0?"inherit":n.color,h.addEventListener("contextmenu",s=>{s.stopImmediatePropagation(),new ce.Menu().addItem(g=>{g.setTitle(u("Add command")).setIcon("command").onClick(async()=>{let b=await q(this.plugin);this.addCommand(b)})}).addSeparator().addItem(g=>{g.setTitle(u("Change Icon")).setIcon("box").onClick(async()=>{let b=await new R(this.plugin).awaitSelection();b&&b!==n.icon&&(n.icon=b,await this.plugin.saveSettings(),this.reorder())})}).addItem(g=>{g.setTitle(u("Rename")).setIcon("text-cursor-input").onClick(async()=>{let b=await new U(n.name,this.plugin).awaitSelection();b&&b!==n.name&&(n.name=b,await this.plugin.saveSettings(),this.reorder())})}).addItem(g=>{g.dom.addClass("is-warning"),g.setTitle(u("Delete")).setIcon("lucide-trash").onClick(async()=>{(!this.plugin.settings.confirmDeletion||await new F(this.plugin).didChooseRemove())&&this.removeCommand(n)})}).showAtMouseEvent(s)})}init(){this.plugin.register(()=>{this.removeButtonsFromAllLeaves()}),this.plugin.registerEvent(this.plugin.app.workspace.on("layout-change",()=>{this.addButtonsToAllLeaves()})),this.plugin.app.workspace.onLayoutReady(()=>setTimeout(()=>this.addButtonsToAllLeaves(),100))}addAdderButton(e){var c;let{view:n}=e,a="cmdr-adder";if(!(n instanceof ce.ItemView)||(c=this.buttons.get(n))!=null&&c.has(a))return;let i=n.addAction("plus",u("Add new"),async()=>{this.addCommand(await q(this.plugin))});i.addClasses(["cmdr",a]),this.buttons.has(n)||this.buttons.set(n,new Map),this.buttons.get(n).set(a,i)}addButtonsToAllLeaves(e=!1){activeWindow.requestAnimationFrame(()=>this.plugin.app.workspace.iterateAllLeaves(n=>this.addButtonsToLeaf(n,e)))}removeButtonsFromAllLeaves(){activeWindow.requestAnimationFrame(()=>this.plugin.app.workspace.iterateAllLeaves(e=>this.removeButtonsFromLeaf(e)))}buttonsFor(e,n=!1){if(e.view instanceof ce.ItemView)return n&&!this.buttons.has(e.view)&&this.buttons.set(e.view,new Map),this.buttons.get(e.view)}addButtonsToLeaf(e,n=!1){var a;if(e.view instanceof ce.ItemView){if(n)this.removeButtonsFromLeaf(e);else if((a=this.buttonsFor(e))!=null&&a.size)return;for(let i=this.pairs.length-1;i>=0;i--){let c=this.pairs[i];X(c.mode,this.plugin)&&this.addPageHeaderButton(e,c)}this.plugin.settings.showAddCommand&&this.addAdderButton(e)}}removeButtonsFromLeaf(e){let n=this.buttonsFor(e);if(n){for(let a of n.values())a.detach();n==null||n.clear()}}reorder(){this.addButtonsToAllLeaves(!0)}async addCommand(e){this.pairs.push(e),this.addButtonsToAllLeaves(!0),await this.plugin.saveSettings()}async removeCommand(e){this.pairs.remove(e),this.addButtonsToAllLeaves(!0),await this.plugin.saveSettings()}};var de=require("obsidian");var be=class extends Z{constructor(e,n){super(e,n);this.actions=new Map;this.addBtn=createDiv({cls:"cmdr status-bar-item cmdr-adder",attr:{"aria-label-position":"top","aria-label":u("Add new")}});this.init(),this.plugin.register(()=>this.actions.forEach((a,i)=>this.removeAction(i)))}init(){this.plugin.app.workspace.onLayoutReady(()=>{this.container=this.plugin.app.statusBar.containerEl;for(let e of this.pairs)Q(e.id,this.plugin)||this.pairs.remove(e),X(e.mode,this.plugin)&&this.addAction(e);this.plugin.saveSettings(),this.plugin.registerDomEvent(this.container,"contextmenu",e=>{e.target===this.container&&new de.Menu().addItem(n=>{n.setTitle(u("Add command")).setIcon("command").onClick(async()=>{let a=await q(this.plugin);this.addCommand(a)})}).showAtMouseEvent(e)}),this.plugin.register(()=>this.addBtn.remove()),(0,de.setIcon)(this.addBtn,"plus"),this.addBtn.onclick=async()=>{let e=await q(this.plugin);this.addCommand(e),this.reorder()},this.plugin.settings.showAddCommand&&this.container.prepend(this.addBtn)})}reorder(){this.addBtn.remove(),this.actions.forEach((e,n)=>this.removeAction(n,!0)),this.init()}async addCommand(e){this.pairs.push(e),this.addAction(e),await this.plugin.saveSettings()}async removeCommand(e){this.pairs.remove(e),this.removeAction(e),await this.plugin.saveSettings()}addAction(e){let n=createDiv({cls:"cmdr status-bar-item clickable-icon",attr:{"aria-label-position":"top","aria-label":e.name}});this.actions.set(e,n),n.style.color=e.color==="#000000"||e.color===void 0?"inherit":e.color;let a=!1,i=()=>{n.empty(),(0,de.setIcon)(n,e.icon),n.onclick=()=>this.plugin.app.commands.executeCommandById(e.id)},c=()=>{n.empty(),(0,de.setIcon)(n,"trash"),n.onclick=async()=>{(!this.plugin.settings.confirmDeletion||await new F(this.plugin).didChooseRemove())&&this.removeCommand(e)}};n.addEventListener("mouseleave",()=>{i(),a=!1}),n.addEventListener("mousemove",m=>{m.preventDefault(),m.stopImmediatePropagation(),m.shiftKey&&(a||c(),a=!0)}),n.addEventListener("contextmenu",m=>{m.stopImmediatePropagation(),new de.Menu().addItem(l=>{l.setTitle(u("Add command")).setIcon("command").onClick(async()=>{let h=await q(this.plugin);this.addCommand(h)})}).addSeparator().addItem(l=>{l.setTitle(u("Change Icon")).setIcon("box").onClick(async()=>{let h=await new R(this.plugin).awaitSelection();h&&h!==e.icon&&(e.icon=h,await this.plugin.saveSettings(),this.reorder())})}).addItem(l=>{l.setTitle(u("Rename")).setIcon("text-cursor-input").onClick(async()=>{let h=await new U(e.name,this.plugin).awaitSelection();h&&h!==e.name&&(e.name=h,await this.plugin.saveSettings(),this.reorder())})}).addItem(l=>{l.dom.addClass("is-warning"),l.setTitle(u("Delete")).setIcon("lucide-trash").onClick(async()=>{(!this.plugin.settings.confirmDeletion||await new F(this.plugin).didChooseRemove())&&this.removeCommand(e)})}).showAtMouseEvent(m)}),i(),this.container.prepend(n)}removeAction(e,n=!1){let a=this.actions.get(e);if(!!a){if(n){a.remove(),this.actions.delete(e);return}a.addClass("cmdr-ribbon-removing"),a.addEventListener("transitionend",async()=>{a.remove(),this.actions.delete(e)})}}};var en=require("obsidian");var dt=require("obsidian");var J=require("obsidian");var Tt=require("obsidian");var tn=["https://github.com/jsmorabito","https://github.com/phibr0","https://www.youtube.com/watch?v=dQw4w9WgXcQ"];function Pt(){let[t,o]=D(0);return r("div",{className:"cmdr-credits"},r("span",{onClick:()=>{o(e=>e+1),location.replace(tn[t%tn.length])}},u("By Johnny\u2728 and phibr0")))}function wa(t,o){for(var e in o)t[e]=o[e];return t}function At(t,o){for(var e in t)if(e!=="__source"&&!(e in o))return!0;for(var n in o)if(n!=="__source"&&t[n]!==o[n])return!0;return!1}function on(t){this.props=t}function ln(t,o){function e(a){var i=this.props.ref,c=i==a.ref;return!c&&i&&(i.call?i(null):i.current=null),o?!o(this.props,a)||!c:At(this.props,a)}function n(a){return this.shouldComponentUpdate=e,r(t,a)}return n.displayName="Memo("+(t.displayName||t.name)+")",n.prototype.isReactComponent=!0,n.__f=!0,n}(on.prototype=new G).isPureReactComponent=!0,on.prototype.shouldComponentUpdate=function(t,o){return At(this.props,t)||At(this.state,o)};var nn=_.__b;_.__b=function(t){t.type&&t.type.__f&&t.ref&&(t.props.ref=t.ref,t.ref=null),nn&&nn(t)};var Ss=typeof Symbol!="undefined"&&Symbol.for&&Symbol.for("react.forward_ref")||3911;var ka=_.__e;_.__e=function(t,o,e,n){if(t.then){for(var a,i=o;i=i.__;)if((a=i.__c)&&a.__c)return o.__e==null&&(o.__e=e.__e,o.__k=e.__k),a.__c(t,o)}ka(t,o,e,n)};var an=_.unmount;function un(t,o,e){return t&&(t.__c&&t.__c.__H&&(t.__c.__H.__.forEach(function(n){typeof n.__c=="function"&&n.__c()}),t.__c.__H=null),(t=wa({},t)).__c!=null&&(t.__c.__P===e&&(t.__c.__P=o),t.__c=null),t.__k=t.__k&&t.__k.map(function(n){return un(n,o,e)})),t}function pn(t,o,e){return t&&(t.__v=null,t.__k=t.__k&&t.__k.map(function(n){return pn(n,o,e)}),t.__c&&t.__c.__P===o&&(t.__e&&e.insertBefore(t.__e,t.__d),t.__c.__e=!0,t.__c.__P=e)),t}function It(){this.__u=0,this.t=null,this.__b=null}function fn(t){var o=t.__.__c;return o&&o.__a&&o.__a(t)}function it(){this.u=null,this.o=null}_.unmount=function(t){var o=t.__c;o&&o.__R&&o.__R(),o&&t.__h===!0&&(t.type=null),an&&an(t)},(It.prototype=new G).__c=function(t,o){var e=o.__c,n=this;n.t==null&&(n.t=[]),n.t.push(e);var a=fn(n.__v),i=!1,c=function(){i||(i=!0,e.__R=null,a?a(m):m())};e.__R=c;var m=function(){if(!--n.__u){if(n.state.__a){var h=n.state.__a;n.__v.__k[0]=pn(h,h.__c.__P,h.__c.__O)}var s;for(n.setState({__a:n.__b=null});s=n.t.pop();)s.forceUpdate()}},l=o.__h===!0;n.__u++||l||n.setState({__a:n.__b=n.__v.__k[0]}),t.then(c,c)},It.prototype.componentWillUnmount=function(){this.t=[]},It.prototype.render=function(t,o){if(this.__b){if(this.__v.__k){var e=document.createElement("div"),n=this.__v.__k[0].__c;this.__v.__k[0]=un(this.__b,e,n.__O=n.__P)}this.__b=null}var a=o.__a&&r(P,null,t.fallback);return a&&(a.__h=null),[r(P,null,o.__a?null:t.children),a]};var rn=function(t,o,e){if(++e[1]===e[0]&&t.o.delete(o),t.props.revealOrder&&(t.props.revealOrder[0]!=="t"||!t.o.size))for(e=t.u;e;){for(;e.length>3;)e.pop()();if(e[1]{St(n),setTimeout(()=>location.replace("https://forms.gle/hPjn61G9bqqFb3256"),Math.random()*800+500)}},r(k,{icon:"message-square",size:20}),u("Leave feedback")),e=r("button",{className:"mod-cta",onClick:n=>{St(n),setTimeout(()=>location.replace("https://ko-fi.com/phibr0"),Math.random()*800+500)}},r(k,{icon:"coffee",size:20}),u("Support development"));return r("div",{className:"cmdr-about"},Tt.Platform.isMobile&&[r("hr",null),o,e],Tt.Platform.isDesktop&&[r("div",{className:"setting-item mod-toggle",style:{width:"100%",borderTop:"1px solid var(--background-modifier-border)",paddingTop:"18px"}},r("div",{className:"setting-item-info"},r("div",{className:"setting-item-name"},u("Leave feedback")),r("div",{className:"setting-item-description"},u("Share feedback, issues, and ideas with our feedback form."))),r("div",{className:"setting-item-control"},o)),r("div",{className:"setting-item mod-toggle",style:{width:"100%"}},r("div",{className:"setting-item-info"},r("div",{className:"setting-item-name"},u("Donate")),r("div",{className:"setting-item-description"},u("Consider donating to support development."))),r("div",{className:"setting-item-control"},e)),r("hr",null)],r(Ce,null),r("b",null,t.name),r(Pt,null),r("a",{className:"cmdr-version",href:"https://github.com/phibr0/obsidian-commander/releases/tag/"+t.version},t.version))}var V=require("obsidian");function Nt(t,o){if(t.empty(),new V.Setting(t).setName("Toolbar Row Count").setDesc("Set how many Rows the Mobile Toolbar should have. Set this to 0 to remove the Toolbar.").addSlider(n=>n.setLimits(0,5,1).setValue(o.settings.advancedToolbar.rowCount).setDynamicTooltip().onChange(async a=>{o.settings.advancedToolbar.rowCount=a,await o.saveSettings(),oe(o.settings.advancedToolbar)})),new V.Setting(t).setName("Column Layout").setDesc("Use a column based layout instead of the default row. This makes it easier to arrange the Commands.").addToggle(n=>n.setValue(o.settings.advancedToolbar.columnLayout).onChange(async a=>{o.settings.advancedToolbar.columnLayout=a,await o.saveSettings(),oe(o.settings.advancedToolbar)})),new V.Setting(t).setName("Bottom Offset").setDesc("Offset the Toolbar from the Bottom of the Screen. This is useful if the toolbar is partially obscured by other UI Elements.").addSlider(n=>n.setLimits(0,32,1).setValue(o.settings.advancedToolbar.heightOffset).setDynamicTooltip().onChange(async a=>{o.settings.advancedToolbar.heightOffset=a,await o.saveSettings(),oe(o.settings.advancedToolbar)})),V.Platform.isMobile){let n=document.createDocumentFragment();n.appendChild(createEl("h3",{text:"Custom Icons"})),t.appendChild(n),o.getCommandsWithoutIcons().forEach(a=>{new V.Setting(t).setName(a.name).setDesc(`ID: ${a.id}`).addButton(i=>{var m;let c=i.buttonEl.createDiv({cls:"AT-settings-icon"});if(a.icon)(0,V.setIcon)(c,a.icon);else{let l=(m=o.settings.advancedToolbar.mappedIcons.find(h=>h.commandID===a.id))==null?void 0:m.iconID;l?(0,V.setIcon)(c,l):i.setButtonText("No Icon")}i.onClick(async()=>{let l=await new R(o).awaitSelection(),h=o.settings.advancedToolbar.mappedIcons.find(s=>s.commandID===a.id);h?h.iconID=l:o.settings.advancedToolbar.mappedIcons.push({commandID:a.id,iconID:l}),await o.saveSettings(),nt(o.settings.advancedToolbar,o),Nt(t,o)})}).addExtraButton(i=>{i.setIcon("reset").setTooltip("Reset to default - Requires a restart").onClick(async()=>{o.settings.advancedToolbar.mappedIcons=o.settings.advancedToolbar.mappedIcons.filter(c=>c.commandID!==a.id),delete a.icon,delete o.app.commands.commands[a.id].icon,await o.saveSettings(),Nt(t,o),new V.Notice("If the default Icon doesn't appear, you might have to restart Obsidian.")})})})}let e=t.appendChild(createEl("div",{cls:"cmdr-sep-con",attr:{style:"margin-top: 64px"}}));e.appendChild(createEl("div",{text:"Advanced Settings",attr:{style:"margin-bottom: 8px; font-weight: bold"}})),new V.Setting(e).setName("Button Height").setDesc("Change the Height of each Button inside the Mobile Toolbar (in px).").addText(n=>{var a,i;return n.setValue((i=(a=o.settings.advancedToolbar.rowHeight)==null?void 0:a.toString())!=null?i:"48").setPlaceholder("48").onChange(async c=>{let m=Number(c),l=isNaN(m);n.inputEl.toggleClass("is-invalid",l),l||(o.settings.advancedToolbar.rowHeight=m,await o.saveSettings(),oe(o.settings.advancedToolbar))})}),new V.Setting(e).setName("Button Width").setDesc("Change the Width of each Button inside the Mobile Toolbar (in px).").addText(n=>{var a,i;return n.setValue((i=(a=o.settings.advancedToolbar.buttonWidth)==null?void 0:a.toString())!=null?i:"48").setPlaceholder("48").onChange(async c=>{let m=Number(c),l=isNaN(m);n.inputEl.toggleClass("is-invalid",l),l||(o.settings.advancedToolbar.buttonWidth=m,await o.saveSettings(),oe(o.settings.advancedToolbar))})}),new V.Setting(e).setName("Toolbar Extra Spacing").setDesc("Some Themes need extra spacing in the toolbar. If your Toolbar doesn't wrap properly, try increasing this value.").addSlider(n=>n.setLimits(0,64,1).setValue(o.settings.advancedToolbar.spacing).setDynamicTooltip().onChange(async a=>{o.settings.advancedToolbar.spacing=a,await o.saveSettings(),oe(o.settings.advancedToolbar)}))}function Dt({plugin:t}){let o=K(null);return O(()=>(o.current&&Nt(o.current,t),()=>o.current&&o.current.empty()),[]),r(P,null,r("div",{className:"cmdr-sep-con callout","data-callout":"info"},r("span",{className:"cmdr-callout-warning"},r(k,{icon:"alert-circle"})," ","Info"),r("p",{className:"cmdr-warning-description"},"The Toolbar is only available in Obsidian Mobile. ",V.Platform.isMobile&&r(P,null,"To configure which Commands show up in the Toolbar, open the Mobile Settings.")),V.Platform.isMobile&&r("button",{onClick:()=>{t.app.setting.openTabById("mobile")},className:"mod-cta"},"Open Mobile Settings")),r("div",{ref:o,style:{paddingBottom:"128px"}}))}var le=require("obsidian");var _n=require("obsidian");var Cn=require("obsidian");var rt=({initialColor:t,onChange:o})=>{let e=K(null);return O(()=>(e.current&&new Cn.ColorComponent(e.current).setValue(t).onChange(o),()=>{var n,a;return(a=(n=e.current)==null?void 0:n.empty)==null?void 0:a.call(n)}),[o,t]),r("div",{ref:e,className:"cmdr-flex cmdr-items-center"})};function Bt({plugin:t,modal:o}){var e;return O(()=>{let n=()=>{this.forceUpdate()};return addEventListener("cmdr-icon-changed",n),()=>removeEventListener("cmdr-icon-changed",n)},[]),r("div",{className:"cmdr-mobile-modify-grid"},r("div",{className:"cmdr-mobile-modify-option",onClick:o.handleNewIcon},r("span",null,u("Icon")),r("span",{className:"cmdr-flex cmdr-gap-1"},r(k,{icon:o.pair.icon,size:20,className:"clickable-icon",style:{marginRight:"0px"}}),r(rt,{initialColor:(e=o.pair.color)!=null?e:"#000",onChange:o.handleColorChange}))),r("div",{className:"cmdr-mobile-modify-option"},r("span",null,u("Name")),r("input",{onBlur:({currentTarget:n})=>o.handleRename(n.value),type:"text",placeholder:u("Custom Name"),value:o.pair.name})),r("div",{className:"cmdr-mobile-modify-option"},r("select",{className:"dropdown",value:o.pair.mode,onChange:({currentTarget:n})=>o.handleModeChange(n.value)},r("option",{value:"any"},u("Add command to all devices")),r("option",{value:"mobile"},u("Add command only to mobile devices")),r("option",{value:"desktop"},u("Add command only to desktop devices")),r("option",{value:t.app.appId},u("Add command only to this device")))),r("div",{className:"modal-button-container"},r("button",{className:"mod-cta",onClick:()=>o.close()},u("Done"))))}var me=class extends _n.Modal{constructor(e,n,a,i,c,m){super(e.app);this.plugin=e;this.pair=n;this.handleRename=a;this.handleNewIcon=i;this.handleModeChange=c;this.handleColorChange=m}async onOpen(){this.titleEl.innerText=this.pair.name,this.reactComponent=r(Bt,{plugin:this.plugin,modal:this}),W(this.reactComponent,this.contentEl)}onClose(){W(null,this.contentEl)}};function Ie({value:t,handleChange:o,ariaLabel:e}){let[n,a]=D(!1),i=K(null),[c,m]=D(0);return O(()=>{var l,h;(l=i==null?void 0:i.current)==null||l.select(),(h=i==null?void 0:i.current)==null||h.focus()}),r("div",{class:"cmdr-editable"},n?r("input",{type:"text",value:t,style:{width:c+25+"px"},onKeyDown:l=>{l.key==="Enter"&&l.target.value.length>0&&(a(!1),o(l))},onBlur:()=>a(!1),ref:i}):r("span",{onDblClick:({target:l})=>{m(l==null?void 0:l.offsetWidth),a(!0)},"aria-label":e},t))}function Ht({plugin:t,pair:o,handleRemove:e,handleDown:n,handleUp:a,handleNewIcon:i,handleRename:c,handleModeChange:m,handleColorChange:l,sortable:h=!0}){var A;let s=Q(o.id,t);if(!s)return r(P,null,le.Platform.isDesktop&&r("div",{className:"setting-item mod-toggle"},r(k,{icon:"alert-triangle",size:20,className:"cmdr-icon clickable-icon mod-warning"}),r("div",{className:"setting-item-info"},r("div",{className:"setting-item-name"},o.name),r("div",{className:"setting-item-description"},u("This Command is not available on this device."))),r("div",{className:"setting-item-control"},r("button",{className:"mod-warning",style:"display: flex",onClick:e,"aria-label":u("Delete")},r(k,{icon:"lucide-trash"})))),le.Platform.isMobile&&r("div",{className:"mobile-option-setting-item",onClick:()=>{new le.Notice(u("This Command is not available on this device."))}},r("span",{className:"mobile-option-setting-item-remove-icon",onClick:e},r(k,{icon:"minus-with-circle",size:22,style:{color:"var(--text-error)"}})),r("span",{className:"mobile-option-setting-item-option-icon mod-warning"},r(k,{icon:"alert-triangle",size:22})),r("span",{className:"mobile-option-setting-item-name"},o.name)));let g=s.id.split(":").first(),b=t.app.plugins.manifests[g],f=!b,C=s.hasOwnProperty("checkCallback")||s.hasOwnProperty("editorCheckCallback"),w=Ra(o.mode),v=o.mode.match(/desktop|mobile|any/)?o.mode[0].toUpperCase()+o.mode.substring(1):u("This device");return r(P,null,le.Platform.isDesktop&&r("div",{className:"setting-item mod-toggle"},r(k,{icon:o.icon,size:20,"aria-label":u("Choose new"),onClick:i,className:"cmdr-icon clickable-icon"}),r("div",{className:"setting-item-info"},r("div",{className:"setting-item-name"},r(Ie,{ariaLabel:u("Double click to rename"),handleChange:({target:y})=>{c(y==null?void 0:y.value)},value:o.name}),o.name!==s.name&&r("span",{style:"margin-left: .8ex"},"(",s.name,")")),r("div",{className:"setting-item-description"},u("Added by {{plugin_name}}.".replace("{{plugin_name}}",f?"Obsidian":b.name))," ",C?u("Warning: This is a checked Command, meaning it might not run under every circumstance."):"")),r("div",{className:"setting-item-control"},r(rt,{initialColor:(A=o.color)!=null?A:"#000",onChange:l}),h&&r(P,null,r(k,{icon:"arrow-down",className:"setting-editor-extra-setting-button clickable-icon",onClick:n,"aria-label":u("Move down")}),r(k,{icon:"arrow-up",className:"setting-editor-extra-setting-button clickable-icon",onClick:a,"aria-label":u("Move up")})),r(k,{icon:w,className:"setting-editor-extra-setting-button clickable-icon",onClick:()=>m(),"aria-label":u("Change Mode (Currently: {{current_mode}})").replace("{{current_mode}}",v)}),r("button",{className:"mod-warning",style:"display: flex",onClick:e,"aria-label":u("Delete")},r(k,{icon:"lucide-trash"})))),le.Platform.isMobile&&r("div",{className:"mobile-option-setting-item"},r("span",{className:"mobile-option-setting-item-remove-icon",onClick:e},r(k,{icon:"minus-with-circle",size:22,style:{color:"var(--text-error)"}})),r("span",{className:"mobile-option-setting-item-option-icon"},r(k,{icon:o.icon,size:22,onClick:()=>{new me(t,o,c,i,m,l).open()}})),r("span",{className:"mobile-option-setting-item-name",onClick:()=>{new me(t,o,c,i,m,l).open()}},o.name,o.name!==s.name&&r("span",{className:"cmdr-option-setting-name"},"(",s.name,")")),r("span",{className:"mobile-option-setting-item-option-icon"},h&&r(P,null,r(k,{icon:"arrow-down",className:"clickable-icon",onClick:n}),r(k,{icon:"arrow-up",className:"clickable-icon",onClick:a})),r(k,{icon:"three-horizontal-bars",className:"clickable-icon",onClick:()=>{new me(t,o,c,i,m,l).open()}}))))}function Ra(t){return t==="mobile"?"smartphone":t==="desktop"?"monitor":t==="any"?"cmdr-all-devices":"airplay"}function Rt(t,o,e){let n=o<0?t.length+o:o;if(n>=0&&n{if(a.mode.match(/desktop|mobile|any/)||a.mode===o.app.appId)return r(Ht,{plugin:o,sortable:n,key:a.id,pair:a,handleRemove:async()=>{(!o.settings.confirmDeletion||await new F(o).didChooseRemove())&&(await t.removeCommand(a),this.forceUpdate())},handleUp:()=>{Rt(t.pairs,i,i-1),t.reorder(),this.forceUpdate()},handleDown:()=>{Rt(t.pairs,i,i+1),t.reorder(),this.forceUpdate()},handleRename:async c=>{a.name=c,await o.saveSettings(),t.reorder(),this.forceUpdate()},handleNewIcon:async()=>{let c=await new R(o).awaitSelection();c&&c!==a.icon&&(a.icon=c,await o.saveSettings(),t.reorder(),this.forceUpdate()),dispatchEvent(new Event("cmdr-icon-changed"))},handleModeChange:async c=>{let m=["any","desktop","mobile",o.app.appId],l=m.indexOf(a.mode);l===3&&(l=-1),a.mode=c||m[l+1],await o.saveSettings(),t.reorder(),this.forceUpdate()},handleColorChange:async c=>{a.color=c,await o.saveSettings(),t.reorder()}})})),!t.pairs.some(a=>X(a.mode,o)||a.mode.match(/mobile|desktop/))&&r("div",{class:"cmdr-commands-empty"},r(Ce,null),r("h3",null,u("No commands here!")),r("span",null,u("Would you like to add one now?"))),yn.Platform.isMobile&&r("hr",null),r("div",{className:"cmdr-add-new-wrapper"},r("button",{className:"mod-cta",onClick:async()=>{let a=await q(o);await t.addCommand(a),t.reorder(),this.forceUpdate()}},u("Add command")))),e)}function st({title:t,children:o}){let[e,n]=D(!1);return r("div",{className:"cmdr-accordion cmdr-sep-con","aria-expanded":e},r("div",{className:"cmdr-accordion-header cmdr-mb-1",onClick:()=>{n(!e)}},r(k,{className:"cmdr-accordion-chevron clickable-icon",icon:"chevron-down",size:24}),r("span",null,t)),r("div",{className:"cmdr-accordion-content",style:{maxHeight:[o].flat().length*120+"px"}},o))}function zt({name:t,description:o,children:e,className:n}){return r("div",{className:`setting-item ${n}`},r("div",{className:"setting-item-info"},r("div",{className:"setting-item-name"},t),r("div",{className:"setting-item-description"},o)),r("div",{className:"setting-item-control"},e))}function Ot(t){let[o,e]=D(t.value);return r(zt,{name:t.name,description:t.description,className:"mod-toggle"},r("div",{className:`checkbox-container ${o?"is-enabled":""}`,onClick:()=>{e(!o),t.changeHandler(o)}}))}function Ft({name:t,description:o,changeHandler:e,value:n,hideLabel:a,showLabel:i}){let[c,m]=D(n);return r(zt,{name:t,description:o,className:"mod-toggle"},r(k,{"aria-label":c?i:a,icon:c?"eye-off":"eye",size:20,className:"clickable-icon",onClick:()=>{m(!c),e(c)}}))}function ct(t){var n,a,i;let[o,e]=D(t.value);return r(zt,{description:t.description,name:t.name,className:"cmdr-slider"},r("div",null,r(Ie,{ariaLabel:u("Double click to enter custom value"),value:o.toString(),handleChange:({target:c})=>{let m=Number(c.value);!isNaN(m)&&o!==m&&(e(m),t.changeHandler(m))}}),r("input",{class:"slider",type:"range",min:(n=t.min)!=null?n:"0",max:(a=t.max)!=null?a:"32",step:(i=t.step)!=null?i:"1",value:o,onPointerMove:({target:c})=>{o!==c.value&&(e(c.value),t.changeHandler(c.value))}})))}function wn({plugin:t}){let[o,e]=D([]),n=t.settings.hide.leftRibbon;return O(()=>{e(app.workspace.leftRibbon.items.map(a=>({name:a.title,icon:a.icon})))},[]),r(P,null,r("hr",null),r(st,{title:u("Hide other Commands")},o.map(a=>r(Ft,{name:a.name,description:"",hideLabel:u("Hide"),showLabel:u("Show"),changeHandler:async i=>{i?n.contains(a.name)&&n.remove(a.name):n.push(a.name),Me(t.settings),await t.saveSettings()},value:n.contains(a.name)}))))}function kn({plugin:t}){let o=t.settings.hide.statusbar,[e,n]=D([]);return O(()=>{let i=[...t.app.statusBar.containerEl.getElementsByClassName("status-bar-item")].map(c=>[...c.classList].find(m=>m.startsWith("plugin-"))).filter(c=>c).map(c=>c.substring(7));n(i.map(c=>t.app.plugins.manifests[c]||{id:c,name:c.replace(/-/g," ").replace(/(^\w{1})|(\s+\w{1})/g,m=>m.toUpperCase()),description:"Core Plugin"}))},[]),r(P,null,r("hr",null),r(st,{title:u("Hide other Commands")},e.map(a=>r(Ft,{name:a.name,description:a.description,value:o.contains(a.id),hideLabel:u("Hide"),showLabel:u("Show"),changeHandler:async i=>{i?o.contains(a.id)&&o.remove(a.id):o.push(a.id),Me(t.settings),await t.saveSettings()}}))))}var xn=require("obsidian");var En=require("obsidian");function Mn({plugin:t,macro:o,onSave:e,onCancel:n}){let[a,i]=D(o.name||"Macro Name"),[c,m]=D(o.icon||"star"),[l,h]=D(o.startup||!1),[s,g]=D(JSON.parse(JSON.stringify(o.macro))||[]),b=this.forceUpdate.bind(this),f=async()=>{let w=await new ne(t).awaitSelection();w&&g([...s,{action:0,commandId:w.id}])},C=async()=>{g([...s,{action:1,delay:250}])};return r("div",null,r("div",{class:"setting-item cmdr-mm-item"},r("div",null,r("span",null,"Name"),r("input",{type:"text",placeholder:"Macro Name",value:a,onChange:w=>i(w.currentTarget.value),width:"100%"})),r("div",null,r("span",null,"Icon"),r("button",{onClick:async()=>m(await new R(t).awaitSelection())},r(k,{icon:c})))),s.map((w,v)=>{switch(w.action){case 0:let A=Q(w.commandId,t);return r("div",{class:"setting-item cmdr-mm-item"},r("div",null,r("button",{onClick:async()=>{let y=await new ne(t).awaitSelection();g(s.map((H,ee)=>ee===v?Gt(Fe({},H),{commandId:y.id}):H))}},(A==null?void 0:A.name)||"Cannot find Command")),r("div",null,r("div",{class:"cmdr-mm-action-options"},r(k,{class:"clickable-icon",icon:"arrow-down",onClick:()=>{if(v===s.length-1)return;let y=[...s],H=y[v];y[v]=y[v+1],y[v+1]=H,g(y)}}),r(k,{class:"clickable-icon",icon:"arrow-up",onClick:()=>{if(v===0)return;let y=[...s],H=y[v];y[v]=y[v-1],y[v-1]=H,g(y)}}),r(k,{class:"clickable-icon",icon:"cross",onClick:()=>{g(s.filter((y,H)=>H!==v))}}))));case 1:return r("div",{class:"setting-item cmdr-mm-item"},r("div",null,r(ct,{name:"Delay",min:0,max:1e4,step:50,description:"Delay in milliseconds",value:w.delay,changeHandler:y=>w.delay=y})),r("div",null,r("div",{class:"cmdr-mm-action-options"},r(k,{class:"clickable-icon",icon:"arrow-down",onClick:()=>{if(v===s.length-1)return;let y=[...s],H=y[v];y[v]=y[v+1],y[v+1]=H,g(y)}}),r(k,{class:"clickable-icon",icon:"arrow-up",onClick:()=>{if(v===0)return;let y=[...s],H=y[v];y[v]=y[v-1],y[v-1]=H,g(y)}}),r(k,{class:"clickable-icon",icon:"cross",onClick:()=>{g(s.filter((y,H)=>H!==v))}}))));case 2:return r("div",null,"Editor: ",w.action);case 3:return r("div",null,"Loop: ",w.times)}}),r("div",{className:"setting-item cmdr-mm-actions cmdr-justify-between"},r("div",{className:"cmdr-flex cmdr-items-center cmdr-justify-self-start"},r("input",{type:"checkbox",id:"checkbox",checked:l,onChange:({target:w})=>{var v;h((v=w==null?void 0:w.checked)!=null?v:!1)}}),r("label",{htmlFor:"checkbox"},"Auto-Run on Startup")),r("div",null,r("button",{onClick:f},"Add Command"),r("button",{onClick:C},"Add Delay"))),r("div",{className:"cmdr-mm-control"},r("button",{class:s.length===0?"disabled":"mod-cta",disabled:s.length===0,onClick:()=>s.length&&e({macro:s,name:a,icon:c,startup:l})},"Save"),r("button",{onClick:n},"Cancel")))}var Ae=class extends En.Modal{constructor(e,n,a){super(e.app);this.macro=n,this.plugin=e,this.onSave=a}onOpen(){this.titleEl.setText("Macro Builder"),W(r(Mn,{plugin:this.plugin,macro:this.macro,onSave:this.onSave,onCancel:this.close.bind(this)}),this.contentEl)}onClose(){W(null,this.contentEl)}};function Vt({plugin:t,macros:o}){let e=(a,i)=>{let c=l=>{o.splice(i!==void 0?i:o.length,i!==void 0?1:0,l),t.saveSettings(),this.forceUpdate(),Ee(t),m.close()},m=new Ae(t,a,c);m.open()},n=a=>{o.splice(a,1),t.saveSettings(),this.forceUpdate(),Ee(t)};return r(P,null,r("div",{className:"cmdr-sep-con"},o.map((a,i)=>r("div",{class:"setting-item mod-toggle"},r("div",{className:"setting-item-info"},r("div",{className:"setting-item-name"},a.name),r("div",{className:"setting-item-description"},a.macro.length," Actions")),r("div",{className:"setting-item-control"},r("button",{"aria-label":"Edit Macro",onClick:()=>e(a,i)},r(k,{icon:"lucide-pencil"})),r("button",{"aria-label":"Delete",class:"mod-warning",onClick:async()=>{(!t.settings.confirmDeletion||await new F(t).didChooseRemove())&&n(i)}},r(k,{icon:"trash"})))))),!o.length&&r("div",{class:"cmdr-commands-empty"},r(Ce,null),r("h3",null,"No Macros yet!"),r("span",null,u("Would you like to add one now?"))),xn.Platform.isMobile&&r("hr",null),r("div",{className:"cmdr-add-new-wrapper"},r("button",{class:"mod-cta",onClick:()=>e({name:"",macro:[],icon:"star"})},"Add Macro")))}function Te({plugin:t,mobileMode:o}){let[e,n]=D(0),[a,i]=D(!0),c=({key:l,shiftKey:h})=>{h&&l==="Tab"?e>0?n((e-1)%m.length):n(m.length-1):l==="Tab"&&n((e+1)%m.length)};O(()=>(addEventListener("keydown",c),()=>removeEventListener("keydown",c)),[e]),J.Platform.isMobile&&O(()=>{let l=document.querySelector(".modal-setting-back-button"),h=l.cloneNode(!0);l.parentNode.replaceChild(h,l),i(!0)},[]),O(()=>{let l=document.querySelector(".modal-setting-back-button");!l||(a?(l.parentElement.lastChild.textContent="Commander",l.onclick=()=>t.app.setting.closeActiveTab()):(l.parentElement.lastChild.textContent=m[e].name,l.onclick=()=>i(!0)))},[a]);let m=et(()=>[{name:u("General"),tab:r(P,null,r(Ot,{name:u("Always ask before removing?"),description:u("Always show a Popup to confirm deletion of a Command."),value:t.settings.confirmDeletion,changeHandler:async l=>{t.settings.confirmDeletion=!l,await t.saveSettings()}}),r(Ot,{value:t.settings.showAddCommand,name:u('Show "Add Command" Button'),description:'Show the "Add Command" Button in every Menu.',changeHandler:async l=>{t.settings.showAddCommand=!l,t.manager.pageHeader.reorder(),await t.saveSettings()}}),r(ct,{value:t.settings.spacing,name:u("Choose custom spacing for Command Buttons"),description:u("Change the spacing between commands. You can set different values on mobile and desktop."),changeHandler:async l=>{ot(l),t.settings.spacing=l,await t.saveSettings()}}))},{name:u("Left Ribbon"),tab:r(ie,{manager:t.manager.leftRibbon,plugin:t,sortable:!1},r(wn,{plugin:t}),r("div",{className:"cmdr-sep-con callout","data-callout":"warning"},r("span",{className:"cmdr-callout-warning"},r(k,{icon:"alert-triangle"})," ","Reordering and Sorting"),r("p",{className:"cmdr-warning-description"},"As of Obsidian 1.1.0 you can reorder the Buttons in the left ribbon by dragging. This will replace the old sorting feature.")))},{name:u("Page Header"),tab:r(ie,{manager:t.manager.pageHeader,plugin:t},r("hr",null),r("div",{className:"cmdr-sep-con callout","data-callout":"warning"},r("span",{className:"cmdr-callout-warning"},r(k,{icon:"alert-triangle"})," ",u("Warning")),r("p",{className:"cmdr-warning-description"},u("As of Obsidian 0.16.0 you need to explicitly enable the View Header.")),r("button",{onClick:()=>{t.app.setting.openTabById("appearance"),setTimeout(()=>{var l,h,s,g;t.app.setting.activeTab.containerEl.scroll({behavior:"smooth",top:250}),(g=(s=(h=(l=t.app.setting.activeTab.containerEl.querySelectorAll(".setting-item-heading")[1].nextSibling)==null?void 0:l.nextSibling)==null?void 0:h.nextSibling)==null?void 0:s.addClass)==null||g.call(s,"cmdr-cta")},50)},className:"mod-cta"},u("Open Appearance Settings"))))},{name:u("Statusbar"),tab:r(ie,{manager:t.manager.statusBar,plugin:t},r(kn,{plugin:t}))},{name:u("Editor Menu"),tab:r(ie,{manager:t.manager.editorMenu,plugin:t})},{name:u("File Menu"),tab:r(ie,{manager:t.manager.fileMenu,plugin:t})},{name:u("Explorer"),tab:r(ie,{manager:t.manager.explorerManager,plugin:t},r("hr",null),r("div",{className:"cmdr-sep-con callout","data-callout":"warning"},r("span",{className:"cmdr-callout-warning"},r(k,{icon:"alert-triangle"})," ",u("Warning")),r("p",{className:"cmdr-warning-description"},"When clicking on a Command in the Explorer, the Explorer view will become focused. This might interfere with Commands that are supposed to be executed on an active File/Explorer.")))},{name:J.Platform.isMobile?"Mobile Toolbar":"Toolbar",tab:r(Dt,{plugin:t})},{name:"Macros",tab:r(Vt,{plugin:t,macros:t.settings.macros})}],[]);return r(P,null,J.Platform.isDesktop&&r("div",{className:"cmdr-setting-title"},r("h1",null,t.manifest.name)),(J.Platform.isDesktop||a)&&r(Fa,{tabs:m,activeTab:e,setActiveTab:n,setOpen:i}),r("div",{class:`cmdr-setting-content ${o?"cmdr-mobile":""}`},(J.Platform.isDesktop||!a)&&m[e].tab,(J.Platform.isMobile&&a||J.Platform.isDesktop&&e===0)&&r(Lt,{manifest:t.manifest})))}function Fa({tabs:t,activeTab:o,setActiveTab:e,setOpen:n}){let a=K(null),i=c=>{var m;c.preventDefault(),(m=a.current)==null||m.scrollBy({left:c.deltaY>0?16:-16})};return O(()=>{let c=a.current;if(!(!c||J.Platform.isMobile))return c.addEventListener("wheel",i),()=>c.removeEventListener("wheel",i)},[]),O(()=>{var c;return(c=document.querySelector(".cmdr-tab-active"))==null?void 0:c.scrollIntoView({behavior:"smooth",block:"nearest"})},[o]),r("nav",{class:`cmdr-setting-header ${J.Platform.isMobile?"cmdr-mobile":""}`,ref:a},r("div",{class:`cmdr-setting-tab-group ${J.Platform.isMobile?"vertical-tab-header-group-items":""}`},t.map((c,m)=>r("div",{className:`cmdr-tab ${o===m?"cmdr-tab-active":""} ${J.Platform.isMobile?"vertical-tab-nav-item":""}`,onClick:()=>{e(m),n(!1)}},c.name,J.Platform.isMobile&&r(k,{className:"vertical-tab-nav-item-chevron cmdr-block",icon:"chevron-right",size:24})))),J.Platform.isDesktop&&r("div",{className:"cmdr-fill"}))}var Le=class extends dt.PluginSettingTab{constructor(e){super(e.app,e);this.plugin=e}display(){W(r(Te,{plugin:this.plugin,mobileMode:dt.Platform.isMobile}),this.containerEl)}hide(){W(null,this.containerEl)}};var mt=require("obsidian");var Ne=class extends mt.Modal{constructor(e){super(e.app);this.plugin=e,this.containerEl.addClass("cmdr-setting-modal")}onOpen(){let e=mt.Platform.isMobile;W(r(Te,{plugin:this.plugin,mobileMode:e}),this.contentEl)}onClose(){W(null,this.contentEl)}};var Sn=require("obsidian");function Wt(){(0,Sn.addIcon)("cmdr-all-devices",'')}var De=class extends Z{constructor(e){super(e,e.settings.leftRibbon);this.plugin=e,this.plugin.settings.leftRibbon.forEach(n=>this.addCommand(n,!1)),this.plugin.app.workspace.onLayoutReady(()=>{})}async addCommand(e,n=!0){if(n&&(this.plugin.settings.leftRibbon.push(e),await this.plugin.saveSettings()),X(e.mode,this.plugin)){this.plugin.addRibbonIcon(e.icon,e.name,()=>this.plugin.app.commands.executeCommandById(e.id));let a=this.plugin.app.workspace.leftRibbon.items.find(i=>i.icon===e.icon&&i.name===i.name);a&&(a.buttonEl.style.color=e.color==="#000000"||e.color===void 0?"inherit":e.color),this.plugin.register(()=>this.removeCommand(e,!1))}}async removeCommand(e,n=!0){n&&(this.plugin.settings.leftRibbon.remove(e),await this.plugin.saveSettings());let a=this.plugin.app.workspace.leftRibbon.items.find(i=>i.icon===e.icon&&i.name===i.name);a&&a.buttonEl.remove(),app.workspace.leftRibbon.items.remove(a)}reorder(){this.plugin.settings.leftRibbon.forEach(e=>{this.removeCommand(e,!1),this.addCommand(e,!1)})}};var lt=class extends Pn.Plugin{async executeStartupMacros(){this.settings.macros.forEach((e,n)=>{e.startup&&this.executeMacro(n)})}async executeMacro(e){let n=this.settings.macros[e];if(!n)throw new Error("Macro not found");for(let a of n.macro)switch(a.action){case 0:{await this.app.commands.executeCommandById(a.commandId);continue}case 1:{await new Promise(i=>setTimeout(i,a.delay));continue}case 2:continue;case 3:{for(let i=0;inew Ne(this).open()}),this.registerEvent(this.app.workspace.on("editor-menu",this.manager.editorMenu.applyEditorMenuCommands(this))),this.registerEvent(this.app.workspace.on("file-menu",this.manager.fileMenu.applyFileMenuCommands(this))),this.app.workspace.onLayoutReady(()=>{Me(this.settings),Ee(this),ot(this.settings.spacing),oe(this.settings.advancedToolbar),nt(this.settings.advancedToolbar,this),this.executeStartupMacros()})}onunload(){var e;(e=document.head.querySelector("style#cmdr"))==null||e.remove(),Go()}async loadSettings(){let e=Object.assign({},wo,await this.loadData());this.settings=e}async saveSettings(){await this.saveData(this.settings)}listActiveToolbarCommands(){return this.app.vault.getConfig("mobileToolbarCommands")}getCommands(){let e=[];return this.listActiveToolbarCommands().forEach(n=>{let a=this.app.commands.commands[n];a&&e.push(a)}),e}getCommandsWithoutIcons(e=!0){let n=[];return this.getCommands().forEach(a=>{a&&!a.icon&&n.push(a)}),e&&this.getCommands().forEach(a=>{this.settings.advancedToolbar.mappedIcons.find(i=>i.commandID===a.id)&&n.push(a)}),n}}; + +/* by phibr0 */ + +/* nosourcemap */ \ No newline at end of file diff --git a/.obsidian/plugins/cmdr/manifest.json b/.obsidian/plugins/cmdr/manifest.json new file mode 100644 index 0000000..91ed1f6 --- /dev/null +++ b/.obsidian/plugins/cmdr/manifest.json @@ -0,0 +1,11 @@ +{ + "id": "cmdr", + "name": "Commander", + "version": "0.5.5", + "minAppVersion": "1.4.0", + "description": "Customize your workspace by adding commands everywhere, create Macros and supercharge your mobile toolbar.", + "author": "jsmorabito & phibr0", + "authorUrl": "https://github.com/phibr0", + "fundingUrl": "https://ko-fi.com/phibr0", + "isDesktopOnly": false +} diff --git a/.obsidian/plugins/cmdr/styles.css b/.obsidian/plugins/cmdr/styles.css new file mode 100644 index 0000000..91fa779 --- /dev/null +++ b/.obsidian/plugins/cmdr/styles.css @@ -0,0 +1 @@ +.cmdr{transition:transform .4s 0s}.cmdr.status-bar-item{margin:0}.cmdr-removing{transform:translate(100%);z-index:0}.cmdr-ribbon-removing{transform:scale(0)}.cmdr-setting-title{display:flex;align-items:baseline;justify-content:space-between}.cmdr-setting-title h1{font-weight:900;margin-top:6px;margin-bottom:12px}.cmdr-option-setting-name{margin-left:.8ex}.cmdr-base-component{padding:0 20px;margin-bottom:-18px}.cmdr-menu-more-options{color:var(--text-muted);position:absolute;right:6px;padding-top:2px;transform:scale(.9);transition:all .15s ease}.cmdr-menu-more-options:hover{color:var(--text-primary)}.cmdr-mobile .cmdr-credits{place-content:center}.cmdr-fill{border:2px solid transparent;width:100%}.cmdr-icon{height:20px;align-self:center}.cmdr-setting-modal>.modal{height:60vh;width:80vw}.cmdr-editable{display:inline-block}.cmdr-editable input{padding:0;border:none;height:unset;background-color:transparent!important;border-bottom:1px solid var(--interactive-accent);border-radius:0}.cmdr-setting-content{height:calc(100% - 10rem)}.cmdr-setting-content .setting-item:first{border-top:none}.cmdr-commands-empty{display:flex;place-items:center;flex-flow:column;margin:2.5rem 0 1.25rem;place-content:center}.cmdr-commands-empty svg{width:100%}.cmdr-commands-empty h3{margin:8px 0;font-weight:900}.cmdr-sep-con:not(:empty){background-color:var(--background-primary);border:1px solid var(--background-modifier-border);padding:12px;border-radius:12px}.cmdr-sep-con:not(:empty) .setting-item:first-of-type{padding-top:0}.cmdr-sep-con:not(:empty) .setting-item:last-of-type{padding-bottom:0}.cmdr-sep-con:not(:empty) .cmdr-callout-warning{padding:var(--callout-title-padding);display:flex;gap:var(--size-4-1);font-size:var(--callout-title-size);color:rgb(var(--callout-color));line-height:var(--line-height-tight);font-weight:700}.cmdr-sep-con:not(:empty) p.cmdr-warning-description{margin:8px 0}.cmdr-accordion{margin-bottom:16px}.cmdr-accordion .cmdr-accordion-chevron{margin-left:0;margin-right:4px;height:24px}.cmdr-accordion .cmdr-accordion-chevron>svg{transition:all .25s ease}.cmdr-accordion .cmdr-accordion-content{max-height:1000px;transition:all .3s ease-in-out;overflow:hidden;margin-left:14px;padding-left:14px}.cmdr-accordion .cmdr-accordion-content .setting-item{padding-top:12px}.cmdr-accordion[aria-expanded=false] .cmdr-accordion-chevron>svg{transform:rotate(-90deg)}.cmdr-accordion[aria-expanded=false] .cmdr-accordion-content{max-height:0!important;transition:max-height .3s cubic-bezier(0,1,0,1)}.cmdr-accordion .cmdr-accordion-header{display:flex;cursor:var(--cursor)}.cmdr-accordion .cmdr-accordion-header span{font-weight:600;margin-top:0;align-self:end}.cmdr-add-new-wrapper{width:100%;margin-top:12px;margin-bottom:2rem;display:flex;justify-content:center;align-items:center}.cmdr-add-new-wrapper button{margin:0 24px}.cmdr-adder{opacity:0;transition:opacity .12s ease}.cmdr-adder:hover{opacity:1}.cmdr-adder.view-action{order:-1001}.cmdr-page-header{order:-1000}.cmdr-macro-builder .modal{height:80vh;width:95vw;padding:0}.cmdr-macro-builder .modal-close-button{z-index:99}.cmdr-macro-builder .modal-content{margin-top:0}.cmdr-macro-builder .cmdr-macro-icon{display:flex;justify-content:center}.cmdr-macro-builder .cmdr-macro-control{position:absolute;z-index:5;height:100%;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:8px;width:3em;top:0}.cmdr-macro-builder .cmdr-macro-control .cmdr-macro-button{background-color:var(--background-secondary-alt);aspect-ratio:1;display:flex;justify-content:center;align-items:center;border-radius:2px;outline:1px solid var(--background-modifier-border);padding:2px}.cmdr-setting-header{margin-bottom:24px;overflow-y:hidden;overflow-x:auto}.cmdr-setting-header .cmdr-setting-tab-group{display:flex;align-items:flex-end;border-bottom:2px solid var(--background-modifier-border)}.cmdr-setting-header.cmdr-mobile .cmdr-setting-tab-group{display:flex;flex-direction:column;align-items:flex-start;border:none}.cmdr-setting-header.cmdr-mobile .cmdr-setting-tab-group .cmdr-tab{border-left:none!important;border-right:none!important;border-top:none!important;transform:none;transition:color .2s ease;width:100%;display:flex;font-weight:500;justify-content:space-between}.cmdr-setting-header.cmdr-mobile .cmdr-setting-tab-group .cmdr-tab:first-child{margin-left:0}.cmdr-setting-header.cmdr-mobile .cmdr-setting-tab-group .cmdr-tab.cmdr-tab-active{transform:none}.cmdr-setting-header .cmdr-tab{padding:6px 8px;font-size:14px;font-weight:600;cursor:pointer;white-space:nowrap;border-left:2px solid transparent;border-right:2px solid transparent}.cmdr-setting-header .cmdr-tab:first-child{margin-left:6px}.cmdr-setting-header .cmdr-tab.cmdr-tab-active{transform:translateY(2px);border-radius:2px;border:2px solid var(--background-modifier-border);border-bottom-color:var(--background-primary)}.is-tablet .cmdr-tab{border:none!important;margin-bottom:2px;padding:10px;font-size:1.08em}.is-tablet .cmdr-tab,.is-tablet .cmdr-tab .cmdr-block{display:flex;align-items:center}.cmdr-mobile-modify-grid{padding:22px}.cmdr-mobile-modify-grid .cmdr-mobile-modify-option{display:flex;width:100%;justify-content:space-between;align-items:center;margin-bottom:16px}.cmdr-mobile-modify-grid .cmdr-mobile-modify-option>input{max-width:70%}.cmdr-mobile-modify-grid .cmdr-mobile-modify-option .dropdown{margin:auto}.cmdr-credits{display:flex}.cmdr-credits>span{color:var(--text-muted);font-size:14px}.cmdr-about{display:flex;flex-direction:column;align-items:center;padding-bottom:64px}.cmdr-about hr{width:100%;margin-top:0}.cmdr-about button{display:flex;align-items:center;height:2.6em;font-weight:700;gap:16px;border-radius:6px;margin-bottom:8px}.cmdr-about button:last-of-type{margin-bottom:32px}.cmdr-about .setting-item button{margin:0}.cmdr-about .cmdr-icon-wrapper{display:flex}.cmdr-about .cmdr-icon-wrapper>svg{width:90px;height:90px}.cmdr-about .cmdr-version{text-decoration:none;font-size:12px;color:var(--text-muted)}.cmdr-name-input-wrapper{display:flex;gap:8px;align-items:center}.cmdr-name-input-wrapper button{margin:8px}.cmdr-icon.clickable-icon.mod-warning{cursor:default}.cmdr-hider-title{display:flex;flex-direction:column;align-items:center}.cmdr-hider-title h3{margin-top:0;margin-bottom:8px;font-weight:900}.cmdr-hider-title p{margin-top:0;margin-bottom:26px;width:50%;text-align:center}.setting-item-control .cmdr-editable{width:2em;text-align:center}.setting-item-control .cmdr-editable input,.setting-item-control .cmdr-editable span{width:2em;color:var(--text-normal)}.cmdr-slider .setting-item-control>div{width:100%}.cmdr-slider input.slider{margin-left:4px}.view-action:not(:last-child){margin-right:var(--cmdr-spacing)}.status-bar-item:not(:last-child),.titlebar-button:not(:last-child){margin-right:calc(var(--cmdr-spacing) - 8px)}.side-dock-ribbon-action:not(:last-child){margin-bottom:calc(var(--cmdr-spacing) - 8px)}.cmdr-cta{position:relative}.cmdr-cta:after{content:"";position:absolute;top:-10%;width:104%;left:-2%;height:120%;outline:2px solid var(--color-accent);border-radius:1em;pointer-events:none}.cmdr-mm-item{display:flex;flex-direction:row!important;align-items:center!important;justify-content:space-between;padding:24px 0}.cmdr-mm-item>:first-child{flex-grow:1}.cmdr-mm-item>:last-child{display:flex}.cmdr-mm-item>*{display:flex;flex-direction:column}.cmdr-mm-item>*>span{margin-right:4px;margin-bottom:2px;font-size:12px;color:var(--text-muted);font-weight:700;margin-left:2px}.cmdr-mm-item .cmdr-slider{padding-bottom:0}.cmdr-mm-item .cmdr-slider .cmdr-editable{width:auto;font-size:smaller}.cmdr-mm-item .cmdr-slider .cmdr-editable span{color:var(--text-muted)}.cmdr-mm-actions{width:100%;display:flex;flex-direction:row!important;justify-content:end;gap:8px}.cmdr-mm-actions button{all:unset;cursor:pointer;color:var(--text-accent);padding:6px;border-radius:4px;transition:all .15s ease;text-transform:uppercase;font-weight:700;font-size:small}.cmdr-mm-actions button:hover{color:var(--text-accent-hover);background-color:var(--background-secondary)}.cmdr-mm-actions button:before{content:"+ "}.cmdr-mm-actions button:active{transform:scale(.98)}.cmdr-mm-control{margin-top:24px;width:100%;display:flex;justify-content:center;gap:8px}.cmdr-mm-action-text{opacity:0}.cmdr-mm-action-options{display:flex}.body{--at-button-height:48;--at-row-count:0}.AT-multirow.AT-row .mobile-toolbar-options-list{flex-flow:column wrap}.is-mobile .mobile-toolbar{position:sticky!important;z-index:5;margin-bottom:var(--at-offset);padding-bottom:0!important}.is-mobile .mobile-toolbar-spacer{height:0}.AT-always-shown .is-pinned .workspace-drawer-inner{margin-bottom:calc(var(--at-button-height)*var(--at-row-count) + var(--at-spacing))}.AT-multirow.AT-column .mobile-toolbar-options-list{flex-flow:row wrap;overflow-y:auto}.mobile-toolbar-option{height:var(--at-button-height);min-width:var(--at-button-width)}.AT-multirow .mobile-toolbar,.AT-multirow .mobile-toolbar-options-list{height:calc(var(--at-button-height)*var(--at-row-count) + var(--at-spacing))!important}.AT-no-toolbar .mobile-toolbar{display:none}.cmdr-mb-1{margin-bottom:.25rem}.cmdr-block{display:block}.cmdr-flex{display:flex}.cmdr-items-center{align-items:center}.cmdr-justify-between{justify-content:space-between}.cmdr-gap-1{gap:.25rem}.cmdr-justify-self-start{justify-self:start} \ No newline at end of file diff --git a/.obsidian/plugins/neighbouring-files/data.json b/.obsidian/plugins/neighbouring-files/data.json new file mode 100644 index 0000000..f3ea15d --- /dev/null +++ b/.obsidian/plugins/neighbouring-files/data.json @@ -0,0 +1,10 @@ +{ + "defaultSortOrder": "alphabetical", + "enableFolderLoop": true, + "enableFolderBoundary": false, + "includedFileTypes": "markdownOnly", + "additionalExtensions": [ + "canvas", + "pdf" + ] +} \ No newline at end of file diff --git a/.obsidian/plugins/neighbouring-files/main.js b/.obsidian/plugins/neighbouring-files/main.js new file mode 100644 index 0000000..69fec34 --- /dev/null +++ b/.obsidian/plugins/neighbouring-files/main.js @@ -0,0 +1,450 @@ +/* +THIS IS A GENERATED/BUNDLED FILE BY ESBUILD +if you want to view the source, please visit the github repository of this plugin +*/ + +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __export = (target, all) => { + for (var name in all) + __defProp(target, name, { get: all[name], enumerable: true }); +}; +var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from)) + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); + } + return to; +}; +var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); + +// src/main.ts +var main_exports = {}; +__export(main_exports, { + default: () => NeighbouringFileNavigatorPlugin +}); +module.exports = __toCommonJS(main_exports); + +// src/NeighbouringFileNavigator.ts +var import_obsidian = require("obsidian"); +var _NeighbouringFileNavigator = class _NeighbouringFileNavigator { + constructor(settings) { + this.settings = settings; + } + static reverse(fn) { + return (a, b) => -fn(a, b); + } + getFileExplorerSortOrder(workspace) { + var _a, _b, _c, _d, _e, _f; + return (_f = (_e = (_d = (_c = (_b = (_a = workspace.getLeavesOfType) == null ? void 0 : _a.call(workspace, "file-explorer")) == null ? void 0 : _b.first()) == null ? void 0 : _c.getViewState()) == null ? void 0 : _d.state) == null ? void 0 : _e.sortOrder) != null ? _f : this.settings.defaultSortOrder; + } + getCurrentSortFn(workspace) { + const sortOrder = this.getFileExplorerSortOrder(workspace); + return _NeighbouringFileNavigator.sorters[sortOrder]; + } + navigateToNextFile(workspace) { + const sortOrder = this.getFileExplorerSortOrder(workspace); + console.debug("navigateToNextFile with sortOrder", sortOrder); + const sortFn = _NeighbouringFileNavigator.sorters[sortOrder]; + this.navigateToNeighbouringFile(workspace, sortFn, true); + } + navigateToPrevFile(workspace) { + const sortOrder = this.getFileExplorerSortOrder(workspace); + console.debug("navigateToPrevFile with sortOrder", sortOrder); + const sortFn = _NeighbouringFileNavigator.sorters[sortOrder]; + this.navigateToNeighbouringFile(workspace, sortFn, false); + } + navigateToNextAlphabeticalFile(workspace) { + console.debug("navigateToNextAlphabeticalFile"); + this.navigateToNeighbouringFile( + workspace, + _NeighbouringFileNavigator.sorters.alphabetical, + true + ); + } + navigateToPrevAlphabeticalFile(workspace) { + console.debug("navigateToPrevAlphabeticalFile"); + this.navigateToNeighbouringFile( + workspace, + _NeighbouringFileNavigator.sorters.alphabetical, + false + ); + } + navigateToOlderCreatedFile(workspace) { + console.debug("navigateToOlderCreatedFile"); + this.navigateToNeighbouringFile( + workspace, + _NeighbouringFileNavigator.sorters.byCreatedTime, + true + ); + } + navigateToNewerCreatedFile(workspace) { + console.debug("navigateToNewerCreatedFile"); + this.navigateToNeighbouringFile( + workspace, + _NeighbouringFileNavigator.sorters.byCreatedTimeReverse, + true + ); + } + navigateToOlderModifiedFile(workspace) { + console.debug("navigateToOlderModifiedFile"); + this.navigateToNeighbouringFile( + workspace, + _NeighbouringFileNavigator.sorters.byModifiedTime, + true + ); + } + navigateToNewerModifiedFile(workspace) { + console.debug("navigateToNewerModifiedFile"); + this.navigateToNeighbouringFile( + workspace, + _NeighbouringFileNavigator.sorters.byModifiedTimeReverse, + true + ); + } + navigateToResolvedFile(workspace, resolveTarget) { + const activeFile = workspace.getActiveFile(); + if (!activeFile) return; + const toFile = resolveTarget(activeFile, this.getCurrentSortFn(workspace)); + if (!toFile || toFile === activeFile) return; + workspace.getLeaf(false).openFile(toFile); + } + navigateToParentFolder(workspace) { + this.navigateToResolvedFile(workspace, (activeFile, sortFn) => { + var _a; + const parentFolder = (_a = activeFile.parent) == null ? void 0 : _a.parent; + return parentFolder ? this.findBoundaryFileInFolderTree(parentFolder, sortFn, true) : void 0; + }); + } + navigateToFirstChildFolder(workspace) { + this.navigateToResolvedFile( + workspace, + (activeFile, sortFn) => this.findFileInChildFolders(activeFile.parent, sortFn) + ); + } + navigateToNextSiblingFolder(workspace) { + this.navigateToResolvedFile( + workspace, + (activeFile, sortFn) => this.findFileInSiblingFolders(activeFile.parent, sortFn, true) + ); + } + navigateToPrevSiblingFolder(workspace) { + this.navigateToResolvedFile( + workspace, + (activeFile, sortFn) => this.findFileInSiblingFolders(activeFile.parent, sortFn, false) + ); + } + navigateToNeighbouringFile(workspace, sortFn, forward = true) { + const activeFile = workspace.getActiveFile(); + if (!activeFile) return; + const files = this.getNeighbouringFiles(activeFile, sortFn); + if (!files.length) return; + const currentItem = files.findIndex( + (item) => item.name === activeFile.name + ); + if (currentItem === -1) return; + const delta = forward ? 1 : -1; + const tentativeIndex = currentItem + delta; + const isAtBoundary = tentativeIndex < 0 || tentativeIndex >= files.length; + const nextIndex = this.settings.enableFolderLoop ? isAtBoundary ? forward ? 0 : files.length - 1 : tentativeIndex : Math.max(0, Math.min(tentativeIndex, files.length - 1)); + let toFile = files[nextIndex]; + const atFolderBoundary = !this.settings.enableFolderLoop && nextIndex === currentItem && isAtBoundary && (forward ? currentItem === files.length - 1 : currentItem === 0); + if (atFolderBoundary && this.settings.enableFolderBoundary) { + const boundaryFile = this.findBoundaryFile( + activeFile, + sortFn, + forward + ); + if (boundaryFile) { + toFile = boundaryFile; + } + } + if (!toFile) return; + workspace.getLeaf(false).openFile(toFile); + } + filterFiletype(file) { + if (this.settings.includedFileTypes === "allFiles") return true; + if (this.settings.includedFileTypes === "markdownOnly") { + return file.extension === "md"; + } else if (this.settings.includedFileTypes === "additionalExtensions") { + return file.extension === "md" || this.settings.additionalExtensions.includes(file.extension); + } + } + getNeighbouringFiles(file, sortFn) { + return file.parent ? this.getSortedFilesInFolder(file.parent, sortFn) : []; + } + getSortedFilesInFolder(folder, sortFn) { + var _a, _b; + return (_b = (_a = folder.children) == null ? void 0 : _a.filter((child) => child instanceof import_obsidian.TFile).filter((file) => this.filterFiletype(file)).sort(sortFn)) != null ? _b : []; + } + getChildFolders(folder) { + var _a, _b; + return (_b = (_a = folder.children) == null ? void 0 : _a.filter( + (child) => child instanceof import_obsidian.TFolder + )) != null ? _b : []; + } + findFileInChildFolders(folder, sortFn) { + if (!folder) return void 0; + for (const childFolder of this.getChildFolders(folder)) { + const toFile = this.findBoundaryFileInFolderTree( + childFolder, + sortFn, + true + ); + if (toFile) return toFile; + } + return void 0; + } + findFileInSiblingFolders(currentFolder, sortFn, forward) { + if (!(currentFolder == null ? void 0 : currentFolder.parent)) return void 0; + const siblingFolders = this.getChildFolders(currentFolder.parent); + const currentFolderIndex = siblingFolders.findIndex( + (folder) => folder === currentFolder + ); + if (currentFolderIndex === -1) return void 0; + const step = forward ? 1 : -1; + for (let folderIndex = currentFolderIndex + step; folderIndex >= 0 && folderIndex < siblingFolders.length; folderIndex += step) { + const toFile = this.findBoundaryFileInFolderTree( + siblingFolders[folderIndex], + sortFn, + forward + ); + if (toFile) return toFile; + } + return void 0; + } + findBoundaryFileInFolderTree(folder, sortFn, forward) { + const sortedFiles = this.getSortedFilesInFolder(folder, sortFn); + const childFolders = this.getChildFolders(folder); + const orderedChildFolders = forward ? childFolders : childFolders.slice().reverse(); + if (forward) { + if (sortedFiles.length) return sortedFiles[0]; + for (const childFolder of orderedChildFolders) { + const file = this.findBoundaryFileInFolderTree( + childFolder, + sortFn, + forward + ); + if (file) return file; + } + return void 0; + } + for (const childFolder of orderedChildFolders) { + const file = this.findBoundaryFileInFolderTree( + childFolder, + sortFn, + forward + ); + if (file) return file; + } + return sortedFiles.length ? sortedFiles[sortedFiles.length - 1] : void 0; + } + findBoundaryFile(activeFile, sortFn, forward) { + let currentFolder = activeFile.parent; + if (!currentFolder) return void 0; + while (currentFolder && currentFolder.parent) { + const parentFolder = currentFolder.parent; + const boundaryFile = this.findFileInSiblingFolders( + currentFolder, + sortFn, + forward + ); + if (boundaryFile) return boundaryFile; + const parentFiles = this.getSortedFilesInFolder( + parentFolder, + sortFn + ); + if (parentFiles.length) { + return forward ? parentFiles[0] : parentFiles[parentFiles.length - 1]; + } + currentFolder = parentFolder; + } + return void 0; + } +}; +_NeighbouringFileNavigator.localeSorter = (a, b) => a.basename.localeCompare(b.basename, void 0, { + numeric: true, + sensitivity: "base" +}); +_NeighbouringFileNavigator.mtimeSorter = (a, b) => { + return b.stat.mtime - a.stat.mtime; +}; +_NeighbouringFileNavigator.ctimeSorter = (a, b) => { + return b.stat.ctime - a.stat.ctime; +}; +_NeighbouringFileNavigator.sorters = { + alphabetical: _NeighbouringFileNavigator.localeSorter, + byCreatedTime: _NeighbouringFileNavigator.ctimeSorter, + byModifiedTime: _NeighbouringFileNavigator.mtimeSorter, + alphabeticalReverse: _NeighbouringFileNavigator.reverse(_NeighbouringFileNavigator.localeSorter), + byCreatedTimeReverse: _NeighbouringFileNavigator.reverse(_NeighbouringFileNavigator.ctimeSorter), + byModifiedTimeReverse: _NeighbouringFileNavigator.reverse(_NeighbouringFileNavigator.mtimeSorter) +}; +var NeighbouringFileNavigator = _NeighbouringFileNavigator; + +// src/NeighbouringFileNavigatorPluginSettings.ts +var DEFAULT_SETTINGS = { + // sorting + defaultSortOrder: "alphabetical", + // navigation options + enableFolderLoop: false, + enableFolderBoundary: false, + // file mask + includedFileTypes: "markdownOnly", + additionalExtensions: ["canvas", "pdf"] +}; + +// src/NeighbouringFileNavigatorPluginSettingTab.ts +var import_obsidian2 = require("obsidian"); +var NeighbouringFileNavigatorPluginSettingTab = class extends import_obsidian2.PluginSettingTab { + constructor(app, plugin) { + super(app, plugin); + this.plugin = plugin; + } + display() { + let { containerEl } = this; + containerEl.empty(); + new import_obsidian2.Setting(containerEl).setName("Default Sort Order").setDesc("Fallback sort order used for the default command").addDropdown((dropdown) => { + dropdown.addOption("alphabetical", "Alphabetical"); + dropdown.addOption("byCreatedTime", "Creation Timestamp"); + dropdown.addOption("byModifiedTime", "Modification Timestamp"); + dropdown.setValue(this.plugin.settings.defaultSortOrder); + dropdown.onChange(async (value) => { + this.plugin.settings.defaultSortOrder = value; + await this.plugin.saveSettings(); + }); + }); + new import_obsidian2.Setting(containerEl).setName("Loop Notes in Folder").setDesc("Navigate to the first note when navigating past the last note in the same folder.").addToggle((toggle) => { + toggle.setValue(this.plugin.settings.enableFolderLoop); + toggle.onChange(async (value) => { + this.plugin.settings.enableFolderLoop = value; + await this.plugin.saveSettings(); + }); + }); + new import_obsidian2.Setting(containerEl).setName("Continue Across Folders").setDesc("Move to adjacent folders when navigating beyond the current folder boundary.").addToggle((toggle) => { + toggle.setValue(this.plugin.settings.enableFolderBoundary); + toggle.onChange(async (value) => { + this.plugin.settings.enableFolderBoundary = value; + await this.plugin.saveSettings(); + }); + }); + new import_obsidian2.Setting(containerEl).setName("Included File Types").setDesc("Set which file types to include in the navigation").addDropdown((dropdown) => { + dropdown.addOption("markdownOnly", "Markdown only"); + dropdown.addOption("allFiles", "All files"); + dropdown.addOption("additionalExtensions", "Additional file extensions below"); + dropdown.setValue(this.plugin.settings.includedFileTypes); + dropdown.onChange(async (value) => { + this.plugin.settings.includedFileTypes = value; + await this.plugin.saveSettings(); + this.display(); + }); + }); + if (this.plugin.settings.includedFileTypes === "additionalExtensions") { + new import_obsidian2.Setting(containerEl).setName("Extensions").setDesc("List of additional file extensions to include in the navigation (comma separated)").addText((text) => { + text.setPlaceholder("canvas, pdf"); + text.setValue(this.plugin.settings.additionalExtensions.join(", ")); + text.onChange(async (value) => { + this.plugin.settings.additionalExtensions = value.split(",").map((ext) => ext.trim()); + await this.plugin.saveSettings(); + }); + }); + } + } +}; + +// src/main.ts +var import_obsidian3 = require("obsidian"); +var NeighbouringFileNavigatorPlugin = class extends import_obsidian3.Plugin { + async onload() { + await this.loadSettings(); + this.addSettingTab( + new NeighbouringFileNavigatorPluginSettingTab(this.app, this) + ); + this.navigator = new NeighbouringFileNavigator(this.settings); + this.addCommand({ + id: "next", + name: "Navigate to next file", + callback: () => this.navigator.navigateToNextFile(this.app.workspace) + }); + this.addCommand({ + id: "prev", + name: "Navigate to prev file", + callback: () => this.navigator.navigateToPrevFile(this.app.workspace) + }); + this.addCommand({ + id: "next-alphabetical", + name: "Navigate to next file (alphabetical)", + callback: () => this.navigator.navigateToNextAlphabeticalFile( + this.app.workspace + ) + }); + this.addCommand({ + id: "prev-alphabetical", + name: "Navigate to prev file (alphabetical)", + callback: () => this.navigator.navigateToPrevAlphabeticalFile( + this.app.workspace + ) + }); + const olderCreated = { + name: "Navigate to older file (creation timestamp)", + callback: () => this.navigator.navigateToOlderCreatedFile(this.app.workspace) + }; + this.addCommand({ ...olderCreated, id: "older-created" }); + this.addCommand({ ...olderCreated, id: "prev-created" }); + const newerCreated = { + name: "Navigate to newer file (creation timestamp)", + callback: () => this.navigator.navigateToNewerCreatedFile(this.app.workspace) + }; + this.addCommand({ ...newerCreated, id: "next-created" }); + this.addCommand({ ...newerCreated, id: "newer-created" }); + const olderModified = { + name: "Navigate to older file (modification timestamp)", + callback: () => this.navigator.navigateToOlderModifiedFile(this.app.workspace) + }; + this.addCommand({ ...olderModified, id: "older-modified" }); + this.addCommand({ ...olderModified, id: "prev-modified" }); + const newerModified = { + name: "Navigate to newer file (modification timestamp)", + callback: () => this.navigator.navigateToNewerModifiedFile(this.app.workspace) + }; + this.addCommand({ ...newerModified, id: "next-modified" }); + this.addCommand({ ...newerModified, id: "newer-modified" }); + this.addCommand({ + id: "folder-up", + name: "Folder up", + callback: () => this.navigator.navigateToParentFolder(this.app.workspace) + }); + this.addCommand({ + id: "folder-down", + name: "Folder down", + callback: () => this.navigator.navigateToFirstChildFolder(this.app.workspace) + }); + this.addCommand({ + id: "folder-next", + name: "Next folder", + callback: () => this.navigator.navigateToNextSiblingFolder(this.app.workspace) + }); + this.addCommand({ + id: "folder-prev", + name: "Prev folder", + callback: () => this.navigator.navigateToPrevSiblingFolder(this.app.workspace) + }); + } + onunload() { + } + async loadSettings() { + this.settings = Object.assign( + {}, + DEFAULT_SETTINGS, + await this.loadData() + ); + } + async saveSettings() { + await this.saveData(this.settings); + } +}; + +/* nosourcemap */ \ No newline at end of file diff --git a/.obsidian/plugins/neighbouring-files/manifest.json b/.obsidian/plugins/neighbouring-files/manifest.json new file mode 100644 index 0000000..4052a3d --- /dev/null +++ b/.obsidian/plugins/neighbouring-files/manifest.json @@ -0,0 +1,11 @@ +{ + "id": "neighbouring-files", + "name": "Neighbouring Files", + "version": "1.1.3", + "minAppVersion": "0.15.0", + "description": "Navigate to the next and previous file in the current directory", + "author": "Fabian Untermoser", + "authorUrl": "https://www.ederbit.xyz", + "fundingUrl": "https://www.ederbit.xyz/coffee", + "isDesktopOnly": false +} \ No newline at end of file diff --git a/.obsidian/plugins/sheets/main.js b/.obsidian/plugins/sheets/main.js new file mode 100644 index 0000000..312a966 --- /dev/null +++ b/.obsidian/plugins/sheets/main.js @@ -0,0 +1,1847 @@ +/* +THIS IS A GENERATED/BUNDLED FILE BY ESBUILD +if you want to view the source, please visit the github repository of this plugin +*/ + +var __create = Object.create; +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __getProtoOf = Object.getPrototypeOf; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __commonJS = (cb, mod) => function __require() { + return mod || (0, cb[__getOwnPropNames(cb)[0]])((mod = { exports: {} }).exports, mod), mod.exports; +}; +var __export = (target, all) => { + for (var name in all) + __defProp(target, name, { get: all[name], enumerable: true }); +}; +var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from)) + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); + } + return to; +}; +var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps( + // If the importer is in node compatibility mode or this is not an ESM + // file that has been converted to a CommonJS file using a Babel- + // compatible transform (i.e. "__esModule" has not been set), then set + // "default" to the CommonJS "module.exports" for node compatibility. + isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target, + mod +)); +var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); + +// node_modules/.pnpm/json5@2.2.3/node_modules/json5/dist/index.js +var require_dist = __commonJS({ + "node_modules/.pnpm/json5@2.2.3/node_modules/json5/dist/index.js"(exports, module2) { + (function(global, factory) { + typeof exports === "object" && typeof module2 !== "undefined" ? module2.exports = factory() : typeof define === "function" && define.amd ? define(factory) : global.JSON5 = factory(); + })(exports, function() { + "use strict"; + function createCommonjsModule(fn, module3) { + return module3 = { exports: {} }, fn(module3, module3.exports), module3.exports; + } + var _global = createCommonjsModule(function(module3) { + var global = module3.exports = typeof window != "undefined" && window.Math == Math ? window : typeof self != "undefined" && self.Math == Math ? self : Function("return this")(); + if (typeof __g == "number") { + __g = global; + } + }); + var _core = createCommonjsModule(function(module3) { + var core = module3.exports = { version: "2.6.5" }; + if (typeof __e == "number") { + __e = core; + } + }); + var _core_1 = _core.version; + var _isObject = function(it) { + return typeof it === "object" ? it !== null : typeof it === "function"; + }; + var _anObject = function(it) { + if (!_isObject(it)) { + throw TypeError(it + " is not an object!"); + } + return it; + }; + var _fails = function(exec) { + try { + return !!exec(); + } catch (e) { + return true; + } + }; + var _descriptors = !_fails(function() { + return Object.defineProperty({}, "a", { get: function() { + return 7; + } }).a != 7; + }); + var document2 = _global.document; + var is = _isObject(document2) && _isObject(document2.createElement); + var _domCreate = function(it) { + return is ? document2.createElement(it) : {}; + }; + var _ie8DomDefine = !_descriptors && !_fails(function() { + return Object.defineProperty(_domCreate("div"), "a", { get: function() { + return 7; + } }).a != 7; + }); + var _toPrimitive = function(it, S) { + if (!_isObject(it)) { + return it; + } + var fn, val; + if (S && typeof (fn = it.toString) == "function" && !_isObject(val = fn.call(it))) { + return val; + } + if (typeof (fn = it.valueOf) == "function" && !_isObject(val = fn.call(it))) { + return val; + } + if (!S && typeof (fn = it.toString) == "function" && !_isObject(val = fn.call(it))) { + return val; + } + throw TypeError("Can't convert object to primitive value"); + }; + var dP = Object.defineProperty; + var f = _descriptors ? Object.defineProperty : function defineProperty(O, P, Attributes) { + _anObject(O); + P = _toPrimitive(P, true); + _anObject(Attributes); + if (_ie8DomDefine) { + try { + return dP(O, P, Attributes); + } catch (e) { + } + } + if ("get" in Attributes || "set" in Attributes) { + throw TypeError("Accessors not supported!"); + } + if ("value" in Attributes) { + O[P] = Attributes.value; + } + return O; + }; + var _objectDp = { + f + }; + var _propertyDesc = function(bitmap, value) { + return { + enumerable: !(bitmap & 1), + configurable: !(bitmap & 2), + writable: !(bitmap & 4), + value + }; + }; + var _hide = _descriptors ? function(object, key2, value) { + return _objectDp.f(object, key2, _propertyDesc(1, value)); + } : function(object, key2, value) { + object[key2] = value; + return object; + }; + var hasOwnProperty = {}.hasOwnProperty; + var _has = function(it, key2) { + return hasOwnProperty.call(it, key2); + }; + var id = 0; + var px = Math.random(); + var _uid = function(key2) { + return "Symbol(".concat(key2 === void 0 ? "" : key2, ")_", (++id + px).toString(36)); + }; + var _library = false; + var _shared = createCommonjsModule(function(module3) { + var SHARED = "__core-js_shared__"; + var store = _global[SHARED] || (_global[SHARED] = {}); + (module3.exports = function(key2, value) { + return store[key2] || (store[key2] = value !== void 0 ? value : {}); + })("versions", []).push({ + version: _core.version, + mode: _library ? "pure" : "global", + copyright: "\xA9 2019 Denis Pushkarev (zloirock.ru)" + }); + }); + var _functionToString = _shared("native-function-to-string", Function.toString); + var _redefine = createCommonjsModule(function(module3) { + var SRC = _uid("src"); + var TO_STRING = "toString"; + var TPL = ("" + _functionToString).split(TO_STRING); + _core.inspectSource = function(it) { + return _functionToString.call(it); + }; + (module3.exports = function(O, key2, val, safe) { + var isFunction = typeof val == "function"; + if (isFunction) { + _has(val, "name") || _hide(val, "name", key2); + } + if (O[key2] === val) { + return; + } + if (isFunction) { + _has(val, SRC) || _hide(val, SRC, O[key2] ? "" + O[key2] : TPL.join(String(key2))); + } + if (O === _global) { + O[key2] = val; + } else if (!safe) { + delete O[key2]; + _hide(O, key2, val); + } else if (O[key2]) { + O[key2] = val; + } else { + _hide(O, key2, val); + } + })(Function.prototype, TO_STRING, function toString() { + return typeof this == "function" && this[SRC] || _functionToString.call(this); + }); + }); + var _aFunction = function(it) { + if (typeof it != "function") { + throw TypeError(it + " is not a function!"); + } + return it; + }; + var _ctx = function(fn, that, length) { + _aFunction(fn); + if (that === void 0) { + return fn; + } + switch (length) { + case 1: + return function(a) { + return fn.call(that, a); + }; + case 2: + return function(a, b) { + return fn.call(that, a, b); + }; + case 3: + return function(a, b, c2) { + return fn.call(that, a, b, c2); + }; + } + return function() { + return fn.apply(that, arguments); + }; + }; + var PROTOTYPE = "prototype"; + var $export = function(type, name, source2) { + var IS_FORCED = type & $export.F; + var IS_GLOBAL = type & $export.G; + var IS_STATIC = type & $export.S; + var IS_PROTO = type & $export.P; + var IS_BIND = type & $export.B; + var target = IS_GLOBAL ? _global : IS_STATIC ? _global[name] || (_global[name] = {}) : (_global[name] || {})[PROTOTYPE]; + var exports2 = IS_GLOBAL ? _core : _core[name] || (_core[name] = {}); + var expProto = exports2[PROTOTYPE] || (exports2[PROTOTYPE] = {}); + var key2, own, out, exp; + if (IS_GLOBAL) { + source2 = name; + } + for (key2 in source2) { + own = !IS_FORCED && target && target[key2] !== void 0; + out = (own ? target : source2)[key2]; + exp = IS_BIND && own ? _ctx(out, _global) : IS_PROTO && typeof out == "function" ? _ctx(Function.call, out) : out; + if (target) { + _redefine(target, key2, out, type & $export.U); + } + if (exports2[key2] != out) { + _hide(exports2, key2, exp); + } + if (IS_PROTO && expProto[key2] != out) { + expProto[key2] = out; + } + } + }; + _global.core = _core; + $export.F = 1; + $export.G = 2; + $export.S = 4; + $export.P = 8; + $export.B = 16; + $export.W = 32; + $export.U = 64; + $export.R = 128; + var _export = $export; + var ceil = Math.ceil; + var floor = Math.floor; + var _toInteger = function(it) { + return isNaN(it = +it) ? 0 : (it > 0 ? floor : ceil)(it); + }; + var _defined = function(it) { + if (it == void 0) { + throw TypeError("Can't call method on " + it); + } + return it; + }; + var _stringAt = function(TO_STRING) { + return function(that, pos2) { + var s = String(_defined(that)); + var i = _toInteger(pos2); + var l = s.length; + var a, b; + if (i < 0 || i >= l) { + return TO_STRING ? "" : void 0; + } + a = s.charCodeAt(i); + return a < 55296 || a > 56319 || i + 1 === l || (b = s.charCodeAt(i + 1)) < 56320 || b > 57343 ? TO_STRING ? s.charAt(i) : a : TO_STRING ? s.slice(i, i + 2) : (a - 55296 << 10) + (b - 56320) + 65536; + }; + }; + var $at = _stringAt(false); + _export(_export.P, "String", { + // 21.1.3.3 String.prototype.codePointAt(pos) + codePointAt: function codePointAt2(pos2) { + return $at(this, pos2); + } + }); + var codePointAt = _core.String.codePointAt; + var max = Math.max; + var min = Math.min; + var _toAbsoluteIndex = function(index, length) { + index = _toInteger(index); + return index < 0 ? max(index + length, 0) : min(index, length); + }; + var fromCharCode = String.fromCharCode; + var $fromCodePoint = String.fromCodePoint; + _export(_export.S + _export.F * (!!$fromCodePoint && $fromCodePoint.length != 1), "String", { + // 21.1.2.2 String.fromCodePoint(...codePoints) + fromCodePoint: function fromCodePoint2(x) { + var arguments$1 = arguments; + var res = []; + var aLen = arguments.length; + var i = 0; + var code; + while (aLen > i) { + code = +arguments$1[i++]; + if (_toAbsoluteIndex(code, 1114111) !== code) { + throw RangeError(code + " is not a valid code point"); + } + res.push( + code < 65536 ? fromCharCode(code) : fromCharCode(((code -= 65536) >> 10) + 55296, code % 1024 + 56320) + ); + } + return res.join(""); + } + }); + var fromCodePoint = _core.String.fromCodePoint; + var Space_Separator = /[\u1680\u2000-\u200A\u202F\u205F\u3000]/; + var ID_Start = /[\xAA\xB5\xBA\xC0-\xD6\xD8-\xF6\xF8-\u02C1\u02C6-\u02D1\u02E0-\u02E4\u02EC\u02EE\u0370-\u0374\u0376\u0377\u037A-\u037D\u037F\u0386\u0388-\u038A\u038C\u038E-\u03A1\u03A3-\u03F5\u03F7-\u0481\u048A-\u052F\u0531-\u0556\u0559\u0561-\u0587\u05D0-\u05EA\u05F0-\u05F2\u0620-\u064A\u066E\u066F\u0671-\u06D3\u06D5\u06E5\u06E6\u06EE\u06EF\u06FA-\u06FC\u06FF\u0710\u0712-\u072F\u074D-\u07A5\u07B1\u07CA-\u07EA\u07F4\u07F5\u07FA\u0800-\u0815\u081A\u0824\u0828\u0840-\u0858\u0860-\u086A\u08A0-\u08B4\u08B6-\u08BD\u0904-\u0939\u093D\u0950\u0958-\u0961\u0971-\u0980\u0985-\u098C\u098F\u0990\u0993-\u09A8\u09AA-\u09B0\u09B2\u09B6-\u09B9\u09BD\u09CE\u09DC\u09DD\u09DF-\u09E1\u09F0\u09F1\u09FC\u0A05-\u0A0A\u0A0F\u0A10\u0A13-\u0A28\u0A2A-\u0A30\u0A32\u0A33\u0A35\u0A36\u0A38\u0A39\u0A59-\u0A5C\u0A5E\u0A72-\u0A74\u0A85-\u0A8D\u0A8F-\u0A91\u0A93-\u0AA8\u0AAA-\u0AB0\u0AB2\u0AB3\u0AB5-\u0AB9\u0ABD\u0AD0\u0AE0\u0AE1\u0AF9\u0B05-\u0B0C\u0B0F\u0B10\u0B13-\u0B28\u0B2A-\u0B30\u0B32\u0B33\u0B35-\u0B39\u0B3D\u0B5C\u0B5D\u0B5F-\u0B61\u0B71\u0B83\u0B85-\u0B8A\u0B8E-\u0B90\u0B92-\u0B95\u0B99\u0B9A\u0B9C\u0B9E\u0B9F\u0BA3\u0BA4\u0BA8-\u0BAA\u0BAE-\u0BB9\u0BD0\u0C05-\u0C0C\u0C0E-\u0C10\u0C12-\u0C28\u0C2A-\u0C39\u0C3D\u0C58-\u0C5A\u0C60\u0C61\u0C80\u0C85-\u0C8C\u0C8E-\u0C90\u0C92-\u0CA8\u0CAA-\u0CB3\u0CB5-\u0CB9\u0CBD\u0CDE\u0CE0\u0CE1\u0CF1\u0CF2\u0D05-\u0D0C\u0D0E-\u0D10\u0D12-\u0D3A\u0D3D\u0D4E\u0D54-\u0D56\u0D5F-\u0D61\u0D7A-\u0D7F\u0D85-\u0D96\u0D9A-\u0DB1\u0DB3-\u0DBB\u0DBD\u0DC0-\u0DC6\u0E01-\u0E30\u0E32\u0E33\u0E40-\u0E46\u0E81\u0E82\u0E84\u0E87\u0E88\u0E8A\u0E8D\u0E94-\u0E97\u0E99-\u0E9F\u0EA1-\u0EA3\u0EA5\u0EA7\u0EAA\u0EAB\u0EAD-\u0EB0\u0EB2\u0EB3\u0EBD\u0EC0-\u0EC4\u0EC6\u0EDC-\u0EDF\u0F00\u0F40-\u0F47\u0F49-\u0F6C\u0F88-\u0F8C\u1000-\u102A\u103F\u1050-\u1055\u105A-\u105D\u1061\u1065\u1066\u106E-\u1070\u1075-\u1081\u108E\u10A0-\u10C5\u10C7\u10CD\u10D0-\u10FA\u10FC-\u1248\u124A-\u124D\u1250-\u1256\u1258\u125A-\u125D\u1260-\u1288\u128A-\u128D\u1290-\u12B0\u12B2-\u12B5\u12B8-\u12BE\u12C0\u12C2-\u12C5\u12C8-\u12D6\u12D8-\u1310\u1312-\u1315\u1318-\u135A\u1380-\u138F\u13A0-\u13F5\u13F8-\u13FD\u1401-\u166C\u166F-\u167F\u1681-\u169A\u16A0-\u16EA\u16EE-\u16F8\u1700-\u170C\u170E-\u1711\u1720-\u1731\u1740-\u1751\u1760-\u176C\u176E-\u1770\u1780-\u17B3\u17D7\u17DC\u1820-\u1877\u1880-\u1884\u1887-\u18A8\u18AA\u18B0-\u18F5\u1900-\u191E\u1950-\u196D\u1970-\u1974\u1980-\u19AB\u19B0-\u19C9\u1A00-\u1A16\u1A20-\u1A54\u1AA7\u1B05-\u1B33\u1B45-\u1B4B\u1B83-\u1BA0\u1BAE\u1BAF\u1BBA-\u1BE5\u1C00-\u1C23\u1C4D-\u1C4F\u1C5A-\u1C7D\u1C80-\u1C88\u1CE9-\u1CEC\u1CEE-\u1CF1\u1CF5\u1CF6\u1D00-\u1DBF\u1E00-\u1F15\u1F18-\u1F1D\u1F20-\u1F45\u1F48-\u1F4D\u1F50-\u1F57\u1F59\u1F5B\u1F5D\u1F5F-\u1F7D\u1F80-\u1FB4\u1FB6-\u1FBC\u1FBE\u1FC2-\u1FC4\u1FC6-\u1FCC\u1FD0-\u1FD3\u1FD6-\u1FDB\u1FE0-\u1FEC\u1FF2-\u1FF4\u1FF6-\u1FFC\u2071\u207F\u2090-\u209C\u2102\u2107\u210A-\u2113\u2115\u2119-\u211D\u2124\u2126\u2128\u212A-\u212D\u212F-\u2139\u213C-\u213F\u2145-\u2149\u214E\u2160-\u2188\u2C00-\u2C2E\u2C30-\u2C5E\u2C60-\u2CE4\u2CEB-\u2CEE\u2CF2\u2CF3\u2D00-\u2D25\u2D27\u2D2D\u2D30-\u2D67\u2D6F\u2D80-\u2D96\u2DA0-\u2DA6\u2DA8-\u2DAE\u2DB0-\u2DB6\u2DB8-\u2DBE\u2DC0-\u2DC6\u2DC8-\u2DCE\u2DD0-\u2DD6\u2DD8-\u2DDE\u2E2F\u3005-\u3007\u3021-\u3029\u3031-\u3035\u3038-\u303C\u3041-\u3096\u309D-\u309F\u30A1-\u30FA\u30FC-\u30FF\u3105-\u312E\u3131-\u318E\u31A0-\u31BA\u31F0-\u31FF\u3400-\u4DB5\u4E00-\u9FEA\uA000-\uA48C\uA4D0-\uA4FD\uA500-\uA60C\uA610-\uA61F\uA62A\uA62B\uA640-\uA66E\uA67F-\uA69D\uA6A0-\uA6EF\uA717-\uA71F\uA722-\uA788\uA78B-\uA7AE\uA7B0-\uA7B7\uA7F7-\uA801\uA803-\uA805\uA807-\uA80A\uA80C-\uA822\uA840-\uA873\uA882-\uA8B3\uA8F2-\uA8F7\uA8FB\uA8FD\uA90A-\uA925\uA930-\uA946\uA960-\uA97C\uA984-\uA9B2\uA9CF\uA9E0-\uA9E4\uA9E6-\uA9EF\uA9FA-\uA9FE\uAA00-\uAA28\uAA40-\uAA42\uAA44-\uAA4B\uAA60-\uAA76\uAA7A\uAA7E-\uAAAF\uAAB1\uAAB5\uAAB6\uAAB9-\uAABD\uAAC0\uAAC2\uAADB-\uAADD\uAAE0-\uAAEA\uAAF2-\uAAF4\uAB01-\uAB06\uAB09-\uAB0E\uAB11-\uAB16\uAB20-\uAB26\uAB28-\uAB2E\uAB30-\uAB5A\uAB5C-\uAB65\uAB70-\uABE2\uAC00-\uD7A3\uD7B0-\uD7C6\uD7CB-\uD7FB\uF900-\uFA6D\uFA70-\uFAD9\uFB00-\uFB06\uFB13-\uFB17\uFB1D\uFB1F-\uFB28\uFB2A-\uFB36\uFB38-\uFB3C\uFB3E\uFB40\uFB41\uFB43\uFB44\uFB46-\uFBB1\uFBD3-\uFD3D\uFD50-\uFD8F\uFD92-\uFDC7\uFDF0-\uFDFB\uFE70-\uFE74\uFE76-\uFEFC\uFF21-\uFF3A\uFF41-\uFF5A\uFF66-\uFFBE\uFFC2-\uFFC7\uFFCA-\uFFCF\uFFD2-\uFFD7\uFFDA-\uFFDC]|\uD800[\uDC00-\uDC0B\uDC0D-\uDC26\uDC28-\uDC3A\uDC3C\uDC3D\uDC3F-\uDC4D\uDC50-\uDC5D\uDC80-\uDCFA\uDD40-\uDD74\uDE80-\uDE9C\uDEA0-\uDED0\uDF00-\uDF1F\uDF2D-\uDF4A\uDF50-\uDF75\uDF80-\uDF9D\uDFA0-\uDFC3\uDFC8-\uDFCF\uDFD1-\uDFD5]|\uD801[\uDC00-\uDC9D\uDCB0-\uDCD3\uDCD8-\uDCFB\uDD00-\uDD27\uDD30-\uDD63\uDE00-\uDF36\uDF40-\uDF55\uDF60-\uDF67]|\uD802[\uDC00-\uDC05\uDC08\uDC0A-\uDC35\uDC37\uDC38\uDC3C\uDC3F-\uDC55\uDC60-\uDC76\uDC80-\uDC9E\uDCE0-\uDCF2\uDCF4\uDCF5\uDD00-\uDD15\uDD20-\uDD39\uDD80-\uDDB7\uDDBE\uDDBF\uDE00\uDE10-\uDE13\uDE15-\uDE17\uDE19-\uDE33\uDE60-\uDE7C\uDE80-\uDE9C\uDEC0-\uDEC7\uDEC9-\uDEE4\uDF00-\uDF35\uDF40-\uDF55\uDF60-\uDF72\uDF80-\uDF91]|\uD803[\uDC00-\uDC48\uDC80-\uDCB2\uDCC0-\uDCF2]|\uD804[\uDC03-\uDC37\uDC83-\uDCAF\uDCD0-\uDCE8\uDD03-\uDD26\uDD50-\uDD72\uDD76\uDD83-\uDDB2\uDDC1-\uDDC4\uDDDA\uDDDC\uDE00-\uDE11\uDE13-\uDE2B\uDE80-\uDE86\uDE88\uDE8A-\uDE8D\uDE8F-\uDE9D\uDE9F-\uDEA8\uDEB0-\uDEDE\uDF05-\uDF0C\uDF0F\uDF10\uDF13-\uDF28\uDF2A-\uDF30\uDF32\uDF33\uDF35-\uDF39\uDF3D\uDF50\uDF5D-\uDF61]|\uD805[\uDC00-\uDC34\uDC47-\uDC4A\uDC80-\uDCAF\uDCC4\uDCC5\uDCC7\uDD80-\uDDAE\uDDD8-\uDDDB\uDE00-\uDE2F\uDE44\uDE80-\uDEAA\uDF00-\uDF19]|\uD806[\uDCA0-\uDCDF\uDCFF\uDE00\uDE0B-\uDE32\uDE3A\uDE50\uDE5C-\uDE83\uDE86-\uDE89\uDEC0-\uDEF8]|\uD807[\uDC00-\uDC08\uDC0A-\uDC2E\uDC40\uDC72-\uDC8F\uDD00-\uDD06\uDD08\uDD09\uDD0B-\uDD30\uDD46]|\uD808[\uDC00-\uDF99]|\uD809[\uDC00-\uDC6E\uDC80-\uDD43]|[\uD80C\uD81C-\uD820\uD840-\uD868\uD86A-\uD86C\uD86F-\uD872\uD874-\uD879][\uDC00-\uDFFF]|\uD80D[\uDC00-\uDC2E]|\uD811[\uDC00-\uDE46]|\uD81A[\uDC00-\uDE38\uDE40-\uDE5E\uDED0-\uDEED\uDF00-\uDF2F\uDF40-\uDF43\uDF63-\uDF77\uDF7D-\uDF8F]|\uD81B[\uDF00-\uDF44\uDF50\uDF93-\uDF9F\uDFE0\uDFE1]|\uD821[\uDC00-\uDFEC]|\uD822[\uDC00-\uDEF2]|\uD82C[\uDC00-\uDD1E\uDD70-\uDEFB]|\uD82F[\uDC00-\uDC6A\uDC70-\uDC7C\uDC80-\uDC88\uDC90-\uDC99]|\uD835[\uDC00-\uDC54\uDC56-\uDC9C\uDC9E\uDC9F\uDCA2\uDCA5\uDCA6\uDCA9-\uDCAC\uDCAE-\uDCB9\uDCBB\uDCBD-\uDCC3\uDCC5-\uDD05\uDD07-\uDD0A\uDD0D-\uDD14\uDD16-\uDD1C\uDD1E-\uDD39\uDD3B-\uDD3E\uDD40-\uDD44\uDD46\uDD4A-\uDD50\uDD52-\uDEA5\uDEA8-\uDEC0\uDEC2-\uDEDA\uDEDC-\uDEFA\uDEFC-\uDF14\uDF16-\uDF34\uDF36-\uDF4E\uDF50-\uDF6E\uDF70-\uDF88\uDF8A-\uDFA8\uDFAA-\uDFC2\uDFC4-\uDFCB]|\uD83A[\uDC00-\uDCC4\uDD00-\uDD43]|\uD83B[\uDE00-\uDE03\uDE05-\uDE1F\uDE21\uDE22\uDE24\uDE27\uDE29-\uDE32\uDE34-\uDE37\uDE39\uDE3B\uDE42\uDE47\uDE49\uDE4B\uDE4D-\uDE4F\uDE51\uDE52\uDE54\uDE57\uDE59\uDE5B\uDE5D\uDE5F\uDE61\uDE62\uDE64\uDE67-\uDE6A\uDE6C-\uDE72\uDE74-\uDE77\uDE79-\uDE7C\uDE7E\uDE80-\uDE89\uDE8B-\uDE9B\uDEA1-\uDEA3\uDEA5-\uDEA9\uDEAB-\uDEBB]|\uD869[\uDC00-\uDED6\uDF00-\uDFFF]|\uD86D[\uDC00-\uDF34\uDF40-\uDFFF]|\uD86E[\uDC00-\uDC1D\uDC20-\uDFFF]|\uD873[\uDC00-\uDEA1\uDEB0-\uDFFF]|\uD87A[\uDC00-\uDFE0]|\uD87E[\uDC00-\uDE1D]/; + var ID_Continue = /[\xAA\xB5\xBA\xC0-\xD6\xD8-\xF6\xF8-\u02C1\u02C6-\u02D1\u02E0-\u02E4\u02EC\u02EE\u0300-\u0374\u0376\u0377\u037A-\u037D\u037F\u0386\u0388-\u038A\u038C\u038E-\u03A1\u03A3-\u03F5\u03F7-\u0481\u0483-\u0487\u048A-\u052F\u0531-\u0556\u0559\u0561-\u0587\u0591-\u05BD\u05BF\u05C1\u05C2\u05C4\u05C5\u05C7\u05D0-\u05EA\u05F0-\u05F2\u0610-\u061A\u0620-\u0669\u066E-\u06D3\u06D5-\u06DC\u06DF-\u06E8\u06EA-\u06FC\u06FF\u0710-\u074A\u074D-\u07B1\u07C0-\u07F5\u07FA\u0800-\u082D\u0840-\u085B\u0860-\u086A\u08A0-\u08B4\u08B6-\u08BD\u08D4-\u08E1\u08E3-\u0963\u0966-\u096F\u0971-\u0983\u0985-\u098C\u098F\u0990\u0993-\u09A8\u09AA-\u09B0\u09B2\u09B6-\u09B9\u09BC-\u09C4\u09C7\u09C8\u09CB-\u09CE\u09D7\u09DC\u09DD\u09DF-\u09E3\u09E6-\u09F1\u09FC\u0A01-\u0A03\u0A05-\u0A0A\u0A0F\u0A10\u0A13-\u0A28\u0A2A-\u0A30\u0A32\u0A33\u0A35\u0A36\u0A38\u0A39\u0A3C\u0A3E-\u0A42\u0A47\u0A48\u0A4B-\u0A4D\u0A51\u0A59-\u0A5C\u0A5E\u0A66-\u0A75\u0A81-\u0A83\u0A85-\u0A8D\u0A8F-\u0A91\u0A93-\u0AA8\u0AAA-\u0AB0\u0AB2\u0AB3\u0AB5-\u0AB9\u0ABC-\u0AC5\u0AC7-\u0AC9\u0ACB-\u0ACD\u0AD0\u0AE0-\u0AE3\u0AE6-\u0AEF\u0AF9-\u0AFF\u0B01-\u0B03\u0B05-\u0B0C\u0B0F\u0B10\u0B13-\u0B28\u0B2A-\u0B30\u0B32\u0B33\u0B35-\u0B39\u0B3C-\u0B44\u0B47\u0B48\u0B4B-\u0B4D\u0B56\u0B57\u0B5C\u0B5D\u0B5F-\u0B63\u0B66-\u0B6F\u0B71\u0B82\u0B83\u0B85-\u0B8A\u0B8E-\u0B90\u0B92-\u0B95\u0B99\u0B9A\u0B9C\u0B9E\u0B9F\u0BA3\u0BA4\u0BA8-\u0BAA\u0BAE-\u0BB9\u0BBE-\u0BC2\u0BC6-\u0BC8\u0BCA-\u0BCD\u0BD0\u0BD7\u0BE6-\u0BEF\u0C00-\u0C03\u0C05-\u0C0C\u0C0E-\u0C10\u0C12-\u0C28\u0C2A-\u0C39\u0C3D-\u0C44\u0C46-\u0C48\u0C4A-\u0C4D\u0C55\u0C56\u0C58-\u0C5A\u0C60-\u0C63\u0C66-\u0C6F\u0C80-\u0C83\u0C85-\u0C8C\u0C8E-\u0C90\u0C92-\u0CA8\u0CAA-\u0CB3\u0CB5-\u0CB9\u0CBC-\u0CC4\u0CC6-\u0CC8\u0CCA-\u0CCD\u0CD5\u0CD6\u0CDE\u0CE0-\u0CE3\u0CE6-\u0CEF\u0CF1\u0CF2\u0D00-\u0D03\u0D05-\u0D0C\u0D0E-\u0D10\u0D12-\u0D44\u0D46-\u0D48\u0D4A-\u0D4E\u0D54-\u0D57\u0D5F-\u0D63\u0D66-\u0D6F\u0D7A-\u0D7F\u0D82\u0D83\u0D85-\u0D96\u0D9A-\u0DB1\u0DB3-\u0DBB\u0DBD\u0DC0-\u0DC6\u0DCA\u0DCF-\u0DD4\u0DD6\u0DD8-\u0DDF\u0DE6-\u0DEF\u0DF2\u0DF3\u0E01-\u0E3A\u0E40-\u0E4E\u0E50-\u0E59\u0E81\u0E82\u0E84\u0E87\u0E88\u0E8A\u0E8D\u0E94-\u0E97\u0E99-\u0E9F\u0EA1-\u0EA3\u0EA5\u0EA7\u0EAA\u0EAB\u0EAD-\u0EB9\u0EBB-\u0EBD\u0EC0-\u0EC4\u0EC6\u0EC8-\u0ECD\u0ED0-\u0ED9\u0EDC-\u0EDF\u0F00\u0F18\u0F19\u0F20-\u0F29\u0F35\u0F37\u0F39\u0F3E-\u0F47\u0F49-\u0F6C\u0F71-\u0F84\u0F86-\u0F97\u0F99-\u0FBC\u0FC6\u1000-\u1049\u1050-\u109D\u10A0-\u10C5\u10C7\u10CD\u10D0-\u10FA\u10FC-\u1248\u124A-\u124D\u1250-\u1256\u1258\u125A-\u125D\u1260-\u1288\u128A-\u128D\u1290-\u12B0\u12B2-\u12B5\u12B8-\u12BE\u12C0\u12C2-\u12C5\u12C8-\u12D6\u12D8-\u1310\u1312-\u1315\u1318-\u135A\u135D-\u135F\u1380-\u138F\u13A0-\u13F5\u13F8-\u13FD\u1401-\u166C\u166F-\u167F\u1681-\u169A\u16A0-\u16EA\u16EE-\u16F8\u1700-\u170C\u170E-\u1714\u1720-\u1734\u1740-\u1753\u1760-\u176C\u176E-\u1770\u1772\u1773\u1780-\u17D3\u17D7\u17DC\u17DD\u17E0-\u17E9\u180B-\u180D\u1810-\u1819\u1820-\u1877\u1880-\u18AA\u18B0-\u18F5\u1900-\u191E\u1920-\u192B\u1930-\u193B\u1946-\u196D\u1970-\u1974\u1980-\u19AB\u19B0-\u19C9\u19D0-\u19D9\u1A00-\u1A1B\u1A20-\u1A5E\u1A60-\u1A7C\u1A7F-\u1A89\u1A90-\u1A99\u1AA7\u1AB0-\u1ABD\u1B00-\u1B4B\u1B50-\u1B59\u1B6B-\u1B73\u1B80-\u1BF3\u1C00-\u1C37\u1C40-\u1C49\u1C4D-\u1C7D\u1C80-\u1C88\u1CD0-\u1CD2\u1CD4-\u1CF9\u1D00-\u1DF9\u1DFB-\u1F15\u1F18-\u1F1D\u1F20-\u1F45\u1F48-\u1F4D\u1F50-\u1F57\u1F59\u1F5B\u1F5D\u1F5F-\u1F7D\u1F80-\u1FB4\u1FB6-\u1FBC\u1FBE\u1FC2-\u1FC4\u1FC6-\u1FCC\u1FD0-\u1FD3\u1FD6-\u1FDB\u1FE0-\u1FEC\u1FF2-\u1FF4\u1FF6-\u1FFC\u203F\u2040\u2054\u2071\u207F\u2090-\u209C\u20D0-\u20DC\u20E1\u20E5-\u20F0\u2102\u2107\u210A-\u2113\u2115\u2119-\u211D\u2124\u2126\u2128\u212A-\u212D\u212F-\u2139\u213C-\u213F\u2145-\u2149\u214E\u2160-\u2188\u2C00-\u2C2E\u2C30-\u2C5E\u2C60-\u2CE4\u2CEB-\u2CF3\u2D00-\u2D25\u2D27\u2D2D\u2D30-\u2D67\u2D6F\u2D7F-\u2D96\u2DA0-\u2DA6\u2DA8-\u2DAE\u2DB0-\u2DB6\u2DB8-\u2DBE\u2DC0-\u2DC6\u2DC8-\u2DCE\u2DD0-\u2DD6\u2DD8-\u2DDE\u2DE0-\u2DFF\u2E2F\u3005-\u3007\u3021-\u302F\u3031-\u3035\u3038-\u303C\u3041-\u3096\u3099\u309A\u309D-\u309F\u30A1-\u30FA\u30FC-\u30FF\u3105-\u312E\u3131-\u318E\u31A0-\u31BA\u31F0-\u31FF\u3400-\u4DB5\u4E00-\u9FEA\uA000-\uA48C\uA4D0-\uA4FD\uA500-\uA60C\uA610-\uA62B\uA640-\uA66F\uA674-\uA67D\uA67F-\uA6F1\uA717-\uA71F\uA722-\uA788\uA78B-\uA7AE\uA7B0-\uA7B7\uA7F7-\uA827\uA840-\uA873\uA880-\uA8C5\uA8D0-\uA8D9\uA8E0-\uA8F7\uA8FB\uA8FD\uA900-\uA92D\uA930-\uA953\uA960-\uA97C\uA980-\uA9C0\uA9CF-\uA9D9\uA9E0-\uA9FE\uAA00-\uAA36\uAA40-\uAA4D\uAA50-\uAA59\uAA60-\uAA76\uAA7A-\uAAC2\uAADB-\uAADD\uAAE0-\uAAEF\uAAF2-\uAAF6\uAB01-\uAB06\uAB09-\uAB0E\uAB11-\uAB16\uAB20-\uAB26\uAB28-\uAB2E\uAB30-\uAB5A\uAB5C-\uAB65\uAB70-\uABEA\uABEC\uABED\uABF0-\uABF9\uAC00-\uD7A3\uD7B0-\uD7C6\uD7CB-\uD7FB\uF900-\uFA6D\uFA70-\uFAD9\uFB00-\uFB06\uFB13-\uFB17\uFB1D-\uFB28\uFB2A-\uFB36\uFB38-\uFB3C\uFB3E\uFB40\uFB41\uFB43\uFB44\uFB46-\uFBB1\uFBD3-\uFD3D\uFD50-\uFD8F\uFD92-\uFDC7\uFDF0-\uFDFB\uFE00-\uFE0F\uFE20-\uFE2F\uFE33\uFE34\uFE4D-\uFE4F\uFE70-\uFE74\uFE76-\uFEFC\uFF10-\uFF19\uFF21-\uFF3A\uFF3F\uFF41-\uFF5A\uFF66-\uFFBE\uFFC2-\uFFC7\uFFCA-\uFFCF\uFFD2-\uFFD7\uFFDA-\uFFDC]|\uD800[\uDC00-\uDC0B\uDC0D-\uDC26\uDC28-\uDC3A\uDC3C\uDC3D\uDC3F-\uDC4D\uDC50-\uDC5D\uDC80-\uDCFA\uDD40-\uDD74\uDDFD\uDE80-\uDE9C\uDEA0-\uDED0\uDEE0\uDF00-\uDF1F\uDF2D-\uDF4A\uDF50-\uDF7A\uDF80-\uDF9D\uDFA0-\uDFC3\uDFC8-\uDFCF\uDFD1-\uDFD5]|\uD801[\uDC00-\uDC9D\uDCA0-\uDCA9\uDCB0-\uDCD3\uDCD8-\uDCFB\uDD00-\uDD27\uDD30-\uDD63\uDE00-\uDF36\uDF40-\uDF55\uDF60-\uDF67]|\uD802[\uDC00-\uDC05\uDC08\uDC0A-\uDC35\uDC37\uDC38\uDC3C\uDC3F-\uDC55\uDC60-\uDC76\uDC80-\uDC9E\uDCE0-\uDCF2\uDCF4\uDCF5\uDD00-\uDD15\uDD20-\uDD39\uDD80-\uDDB7\uDDBE\uDDBF\uDE00-\uDE03\uDE05\uDE06\uDE0C-\uDE13\uDE15-\uDE17\uDE19-\uDE33\uDE38-\uDE3A\uDE3F\uDE60-\uDE7C\uDE80-\uDE9C\uDEC0-\uDEC7\uDEC9-\uDEE6\uDF00-\uDF35\uDF40-\uDF55\uDF60-\uDF72\uDF80-\uDF91]|\uD803[\uDC00-\uDC48\uDC80-\uDCB2\uDCC0-\uDCF2]|\uD804[\uDC00-\uDC46\uDC66-\uDC6F\uDC7F-\uDCBA\uDCD0-\uDCE8\uDCF0-\uDCF9\uDD00-\uDD34\uDD36-\uDD3F\uDD50-\uDD73\uDD76\uDD80-\uDDC4\uDDCA-\uDDCC\uDDD0-\uDDDA\uDDDC\uDE00-\uDE11\uDE13-\uDE37\uDE3E\uDE80-\uDE86\uDE88\uDE8A-\uDE8D\uDE8F-\uDE9D\uDE9F-\uDEA8\uDEB0-\uDEEA\uDEF0-\uDEF9\uDF00-\uDF03\uDF05-\uDF0C\uDF0F\uDF10\uDF13-\uDF28\uDF2A-\uDF30\uDF32\uDF33\uDF35-\uDF39\uDF3C-\uDF44\uDF47\uDF48\uDF4B-\uDF4D\uDF50\uDF57\uDF5D-\uDF63\uDF66-\uDF6C\uDF70-\uDF74]|\uD805[\uDC00-\uDC4A\uDC50-\uDC59\uDC80-\uDCC5\uDCC7\uDCD0-\uDCD9\uDD80-\uDDB5\uDDB8-\uDDC0\uDDD8-\uDDDD\uDE00-\uDE40\uDE44\uDE50-\uDE59\uDE80-\uDEB7\uDEC0-\uDEC9\uDF00-\uDF19\uDF1D-\uDF2B\uDF30-\uDF39]|\uD806[\uDCA0-\uDCE9\uDCFF\uDE00-\uDE3E\uDE47\uDE50-\uDE83\uDE86-\uDE99\uDEC0-\uDEF8]|\uD807[\uDC00-\uDC08\uDC0A-\uDC36\uDC38-\uDC40\uDC50-\uDC59\uDC72-\uDC8F\uDC92-\uDCA7\uDCA9-\uDCB6\uDD00-\uDD06\uDD08\uDD09\uDD0B-\uDD36\uDD3A\uDD3C\uDD3D\uDD3F-\uDD47\uDD50-\uDD59]|\uD808[\uDC00-\uDF99]|\uD809[\uDC00-\uDC6E\uDC80-\uDD43]|[\uD80C\uD81C-\uD820\uD840-\uD868\uD86A-\uD86C\uD86F-\uD872\uD874-\uD879][\uDC00-\uDFFF]|\uD80D[\uDC00-\uDC2E]|\uD811[\uDC00-\uDE46]|\uD81A[\uDC00-\uDE38\uDE40-\uDE5E\uDE60-\uDE69\uDED0-\uDEED\uDEF0-\uDEF4\uDF00-\uDF36\uDF40-\uDF43\uDF50-\uDF59\uDF63-\uDF77\uDF7D-\uDF8F]|\uD81B[\uDF00-\uDF44\uDF50-\uDF7E\uDF8F-\uDF9F\uDFE0\uDFE1]|\uD821[\uDC00-\uDFEC]|\uD822[\uDC00-\uDEF2]|\uD82C[\uDC00-\uDD1E\uDD70-\uDEFB]|\uD82F[\uDC00-\uDC6A\uDC70-\uDC7C\uDC80-\uDC88\uDC90-\uDC99\uDC9D\uDC9E]|\uD834[\uDD65-\uDD69\uDD6D-\uDD72\uDD7B-\uDD82\uDD85-\uDD8B\uDDAA-\uDDAD\uDE42-\uDE44]|\uD835[\uDC00-\uDC54\uDC56-\uDC9C\uDC9E\uDC9F\uDCA2\uDCA5\uDCA6\uDCA9-\uDCAC\uDCAE-\uDCB9\uDCBB\uDCBD-\uDCC3\uDCC5-\uDD05\uDD07-\uDD0A\uDD0D-\uDD14\uDD16-\uDD1C\uDD1E-\uDD39\uDD3B-\uDD3E\uDD40-\uDD44\uDD46\uDD4A-\uDD50\uDD52-\uDEA5\uDEA8-\uDEC0\uDEC2-\uDEDA\uDEDC-\uDEFA\uDEFC-\uDF14\uDF16-\uDF34\uDF36-\uDF4E\uDF50-\uDF6E\uDF70-\uDF88\uDF8A-\uDFA8\uDFAA-\uDFC2\uDFC4-\uDFCB\uDFCE-\uDFFF]|\uD836[\uDE00-\uDE36\uDE3B-\uDE6C\uDE75\uDE84\uDE9B-\uDE9F\uDEA1-\uDEAF]|\uD838[\uDC00-\uDC06\uDC08-\uDC18\uDC1B-\uDC21\uDC23\uDC24\uDC26-\uDC2A]|\uD83A[\uDC00-\uDCC4\uDCD0-\uDCD6\uDD00-\uDD4A\uDD50-\uDD59]|\uD83B[\uDE00-\uDE03\uDE05-\uDE1F\uDE21\uDE22\uDE24\uDE27\uDE29-\uDE32\uDE34-\uDE37\uDE39\uDE3B\uDE42\uDE47\uDE49\uDE4B\uDE4D-\uDE4F\uDE51\uDE52\uDE54\uDE57\uDE59\uDE5B\uDE5D\uDE5F\uDE61\uDE62\uDE64\uDE67-\uDE6A\uDE6C-\uDE72\uDE74-\uDE77\uDE79-\uDE7C\uDE7E\uDE80-\uDE89\uDE8B-\uDE9B\uDEA1-\uDEA3\uDEA5-\uDEA9\uDEAB-\uDEBB]|\uD869[\uDC00-\uDED6\uDF00-\uDFFF]|\uD86D[\uDC00-\uDF34\uDF40-\uDFFF]|\uD86E[\uDC00-\uDC1D\uDC20-\uDFFF]|\uD873[\uDC00-\uDEA1\uDEB0-\uDFFF]|\uD87A[\uDC00-\uDFE0]|\uD87E[\uDC00-\uDE1D]|\uDB40[\uDD00-\uDDEF]/; + var unicode = { + Space_Separator, + ID_Start, + ID_Continue + }; + var util = { + isSpaceSeparator: function isSpaceSeparator(c2) { + return typeof c2 === "string" && unicode.Space_Separator.test(c2); + }, + isIdStartChar: function isIdStartChar(c2) { + return typeof c2 === "string" && (c2 >= "a" && c2 <= "z" || c2 >= "A" && c2 <= "Z" || c2 === "$" || c2 === "_" || unicode.ID_Start.test(c2)); + }, + isIdContinueChar: function isIdContinueChar(c2) { + return typeof c2 === "string" && (c2 >= "a" && c2 <= "z" || c2 >= "A" && c2 <= "Z" || c2 >= "0" && c2 <= "9" || c2 === "$" || c2 === "_" || c2 === "\u200C" || c2 === "\u200D" || unicode.ID_Continue.test(c2)); + }, + isDigit: function isDigit(c2) { + return typeof c2 === "string" && /[0-9]/.test(c2); + }, + isHexDigit: function isHexDigit(c2) { + return typeof c2 === "string" && /[0-9A-Fa-f]/.test(c2); + } + }; + var source; + var parseState; + var stack; + var pos; + var line; + var column; + var token; + var key; + var root; + var parse3 = function parse4(text, reviver) { + source = String(text); + parseState = "start"; + stack = []; + pos = 0; + line = 1; + column = 0; + token = void 0; + key = void 0; + root = void 0; + do { + token = lex(); + parseStates[parseState](); + } while (token.type !== "eof"); + if (typeof reviver === "function") { + return internalize({ "": root }, "", reviver); + } + return root; + }; + function internalize(holder, name, reviver) { + var value = holder[name]; + if (value != null && typeof value === "object") { + if (Array.isArray(value)) { + for (var i = 0; i < value.length; i++) { + var key2 = String(i); + var replacement = internalize(value, key2, reviver); + if (replacement === void 0) { + delete value[key2]; + } else { + Object.defineProperty(value, key2, { + value: replacement, + writable: true, + enumerable: true, + configurable: true + }); + } + } + } else { + for (var key$1 in value) { + var replacement$1 = internalize(value, key$1, reviver); + if (replacement$1 === void 0) { + delete value[key$1]; + } else { + Object.defineProperty(value, key$1, { + value: replacement$1, + writable: true, + enumerable: true, + configurable: true + }); + } + } + } + } + return reviver.call(holder, name, value); + } + var lexState; + var buffer; + var doubleQuote; + var sign; + var c; + function lex() { + lexState = "default"; + buffer = ""; + doubleQuote = false; + sign = 1; + for (; ; ) { + c = peek(); + var token2 = lexStates[lexState](); + if (token2) { + return token2; + } + } + } + function peek() { + if (source[pos]) { + return String.fromCodePoint(source.codePointAt(pos)); + } + } + function read() { + var c2 = peek(); + if (c2 === "\n") { + line++; + column = 0; + } else if (c2) { + column += c2.length; + } else { + column++; + } + if (c2) { + pos += c2.length; + } + return c2; + } + var lexStates = { + default: function default$1() { + switch (c) { + case " ": + case "\v": + case "\f": + case " ": + case "\xA0": + case "\uFEFF": + case "\n": + case "\r": + case "\u2028": + case "\u2029": + read(); + return; + case "/": + read(); + lexState = "comment"; + return; + case void 0: + read(); + return newToken("eof"); + } + if (util.isSpaceSeparator(c)) { + read(); + return; + } + return lexStates[parseState](); + }, + comment: function comment() { + switch (c) { + case "*": + read(); + lexState = "multiLineComment"; + return; + case "/": + read(); + lexState = "singleLineComment"; + return; + } + throw invalidChar(read()); + }, + multiLineComment: function multiLineComment() { + switch (c) { + case "*": + read(); + lexState = "multiLineCommentAsterisk"; + return; + case void 0: + throw invalidChar(read()); + } + read(); + }, + multiLineCommentAsterisk: function multiLineCommentAsterisk() { + switch (c) { + case "*": + read(); + return; + case "/": + read(); + lexState = "default"; + return; + case void 0: + throw invalidChar(read()); + } + read(); + lexState = "multiLineComment"; + }, + singleLineComment: function singleLineComment() { + switch (c) { + case "\n": + case "\r": + case "\u2028": + case "\u2029": + read(); + lexState = "default"; + return; + case void 0: + read(); + return newToken("eof"); + } + read(); + }, + value: function value() { + switch (c) { + case "{": + case "[": + return newToken("punctuator", read()); + case "n": + read(); + literal("ull"); + return newToken("null", null); + case "t": + read(); + literal("rue"); + return newToken("boolean", true); + case "f": + read(); + literal("alse"); + return newToken("boolean", false); + case "-": + case "+": + if (read() === "-") { + sign = -1; + } + lexState = "sign"; + return; + case ".": + buffer = read(); + lexState = "decimalPointLeading"; + return; + case "0": + buffer = read(); + lexState = "zero"; + return; + case "1": + case "2": + case "3": + case "4": + case "5": + case "6": + case "7": + case "8": + case "9": + buffer = read(); + lexState = "decimalInteger"; + return; + case "I": + read(); + literal("nfinity"); + return newToken("numeric", Infinity); + case "N": + read(); + literal("aN"); + return newToken("numeric", NaN); + case '"': + case "'": + doubleQuote = read() === '"'; + buffer = ""; + lexState = "string"; + return; + } + throw invalidChar(read()); + }, + identifierNameStartEscape: function identifierNameStartEscape() { + if (c !== "u") { + throw invalidChar(read()); + } + read(); + var u = unicodeEscape(); + switch (u) { + case "$": + case "_": + break; + default: + if (!util.isIdStartChar(u)) { + throw invalidIdentifier(); + } + break; + } + buffer += u; + lexState = "identifierName"; + }, + identifierName: function identifierName() { + switch (c) { + case "$": + case "_": + case "\u200C": + case "\u200D": + buffer += read(); + return; + case "\\": + read(); + lexState = "identifierNameEscape"; + return; + } + if (util.isIdContinueChar(c)) { + buffer += read(); + return; + } + return newToken("identifier", buffer); + }, + identifierNameEscape: function identifierNameEscape() { + if (c !== "u") { + throw invalidChar(read()); + } + read(); + var u = unicodeEscape(); + switch (u) { + case "$": + case "_": + case "\u200C": + case "\u200D": + break; + default: + if (!util.isIdContinueChar(u)) { + throw invalidIdentifier(); + } + break; + } + buffer += u; + lexState = "identifierName"; + }, + sign: function sign$1() { + switch (c) { + case ".": + buffer = read(); + lexState = "decimalPointLeading"; + return; + case "0": + buffer = read(); + lexState = "zero"; + return; + case "1": + case "2": + case "3": + case "4": + case "5": + case "6": + case "7": + case "8": + case "9": + buffer = read(); + lexState = "decimalInteger"; + return; + case "I": + read(); + literal("nfinity"); + return newToken("numeric", sign * Infinity); + case "N": + read(); + literal("aN"); + return newToken("numeric", NaN); + } + throw invalidChar(read()); + }, + zero: function zero() { + switch (c) { + case ".": + buffer += read(); + lexState = "decimalPoint"; + return; + case "e": + case "E": + buffer += read(); + lexState = "decimalExponent"; + return; + case "x": + case "X": + buffer += read(); + lexState = "hexadecimal"; + return; + } + return newToken("numeric", sign * 0); + }, + decimalInteger: function decimalInteger() { + switch (c) { + case ".": + buffer += read(); + lexState = "decimalPoint"; + return; + case "e": + case "E": + buffer += read(); + lexState = "decimalExponent"; + return; + } + if (util.isDigit(c)) { + buffer += read(); + return; + } + return newToken("numeric", sign * Number(buffer)); + }, + decimalPointLeading: function decimalPointLeading() { + if (util.isDigit(c)) { + buffer += read(); + lexState = "decimalFraction"; + return; + } + throw invalidChar(read()); + }, + decimalPoint: function decimalPoint() { + switch (c) { + case "e": + case "E": + buffer += read(); + lexState = "decimalExponent"; + return; + } + if (util.isDigit(c)) { + buffer += read(); + lexState = "decimalFraction"; + return; + } + return newToken("numeric", sign * Number(buffer)); + }, + decimalFraction: function decimalFraction() { + switch (c) { + case "e": + case "E": + buffer += read(); + lexState = "decimalExponent"; + return; + } + if (util.isDigit(c)) { + buffer += read(); + return; + } + return newToken("numeric", sign * Number(buffer)); + }, + decimalExponent: function decimalExponent() { + switch (c) { + case "+": + case "-": + buffer += read(); + lexState = "decimalExponentSign"; + return; + } + if (util.isDigit(c)) { + buffer += read(); + lexState = "decimalExponentInteger"; + return; + } + throw invalidChar(read()); + }, + decimalExponentSign: function decimalExponentSign() { + if (util.isDigit(c)) { + buffer += read(); + lexState = "decimalExponentInteger"; + return; + } + throw invalidChar(read()); + }, + decimalExponentInteger: function decimalExponentInteger() { + if (util.isDigit(c)) { + buffer += read(); + return; + } + return newToken("numeric", sign * Number(buffer)); + }, + hexadecimal: function hexadecimal() { + if (util.isHexDigit(c)) { + buffer += read(); + lexState = "hexadecimalInteger"; + return; + } + throw invalidChar(read()); + }, + hexadecimalInteger: function hexadecimalInteger() { + if (util.isHexDigit(c)) { + buffer += read(); + return; + } + return newToken("numeric", sign * Number(buffer)); + }, + string: function string() { + switch (c) { + case "\\": + read(); + buffer += escape(); + return; + case '"': + if (doubleQuote) { + read(); + return newToken("string", buffer); + } + buffer += read(); + return; + case "'": + if (!doubleQuote) { + read(); + return newToken("string", buffer); + } + buffer += read(); + return; + case "\n": + case "\r": + throw invalidChar(read()); + case "\u2028": + case "\u2029": + separatorChar(c); + break; + case void 0: + throw invalidChar(read()); + } + buffer += read(); + }, + start: function start() { + switch (c) { + case "{": + case "[": + return newToken("punctuator", read()); + } + lexState = "value"; + }, + beforePropertyName: function beforePropertyName() { + switch (c) { + case "$": + case "_": + buffer = read(); + lexState = "identifierName"; + return; + case "\\": + read(); + lexState = "identifierNameStartEscape"; + return; + case "}": + return newToken("punctuator", read()); + case '"': + case "'": + doubleQuote = read() === '"'; + lexState = "string"; + return; + } + if (util.isIdStartChar(c)) { + buffer += read(); + lexState = "identifierName"; + return; + } + throw invalidChar(read()); + }, + afterPropertyName: function afterPropertyName() { + if (c === ":") { + return newToken("punctuator", read()); + } + throw invalidChar(read()); + }, + beforePropertyValue: function beforePropertyValue() { + lexState = "value"; + }, + afterPropertyValue: function afterPropertyValue() { + switch (c) { + case ",": + case "}": + return newToken("punctuator", read()); + } + throw invalidChar(read()); + }, + beforeArrayValue: function beforeArrayValue() { + if (c === "]") { + return newToken("punctuator", read()); + } + lexState = "value"; + }, + afterArrayValue: function afterArrayValue() { + switch (c) { + case ",": + case "]": + return newToken("punctuator", read()); + } + throw invalidChar(read()); + }, + end: function end() { + throw invalidChar(read()); + } + }; + function newToken(type, value) { + return { + type, + value, + line, + column + }; + } + function literal(s) { + for (var i = 0, list = s; i < list.length; i += 1) { + var c2 = list[i]; + var p = peek(); + if (p !== c2) { + throw invalidChar(read()); + } + read(); + } + } + function escape() { + var c2 = peek(); + switch (c2) { + case "b": + read(); + return "\b"; + case "f": + read(); + return "\f"; + case "n": + read(); + return "\n"; + case "r": + read(); + return "\r"; + case "t": + read(); + return " "; + case "v": + read(); + return "\v"; + case "0": + read(); + if (util.isDigit(peek())) { + throw invalidChar(read()); + } + return "\0"; + case "x": + read(); + return hexEscape(); + case "u": + read(); + return unicodeEscape(); + case "\n": + case "\u2028": + case "\u2029": + read(); + return ""; + case "\r": + read(); + if (peek() === "\n") { + read(); + } + return ""; + case "1": + case "2": + case "3": + case "4": + case "5": + case "6": + case "7": + case "8": + case "9": + throw invalidChar(read()); + case void 0: + throw invalidChar(read()); + } + return read(); + } + function hexEscape() { + var buffer2 = ""; + var c2 = peek(); + if (!util.isHexDigit(c2)) { + throw invalidChar(read()); + } + buffer2 += read(); + c2 = peek(); + if (!util.isHexDigit(c2)) { + throw invalidChar(read()); + } + buffer2 += read(); + return String.fromCodePoint(parseInt(buffer2, 16)); + } + function unicodeEscape() { + var buffer2 = ""; + var count = 4; + while (count-- > 0) { + var c2 = peek(); + if (!util.isHexDigit(c2)) { + throw invalidChar(read()); + } + buffer2 += read(); + } + return String.fromCodePoint(parseInt(buffer2, 16)); + } + var parseStates = { + start: function start() { + if (token.type === "eof") { + throw invalidEOF(); + } + push(); + }, + beforePropertyName: function beforePropertyName() { + switch (token.type) { + case "identifier": + case "string": + key = token.value; + parseState = "afterPropertyName"; + return; + case "punctuator": + pop(); + return; + case "eof": + throw invalidEOF(); + } + }, + afterPropertyName: function afterPropertyName() { + if (token.type === "eof") { + throw invalidEOF(); + } + parseState = "beforePropertyValue"; + }, + beforePropertyValue: function beforePropertyValue() { + if (token.type === "eof") { + throw invalidEOF(); + } + push(); + }, + beforeArrayValue: function beforeArrayValue() { + if (token.type === "eof") { + throw invalidEOF(); + } + if (token.type === "punctuator" && token.value === "]") { + pop(); + return; + } + push(); + }, + afterPropertyValue: function afterPropertyValue() { + if (token.type === "eof") { + throw invalidEOF(); + } + switch (token.value) { + case ",": + parseState = "beforePropertyName"; + return; + case "}": + pop(); + } + }, + afterArrayValue: function afterArrayValue() { + if (token.type === "eof") { + throw invalidEOF(); + } + switch (token.value) { + case ",": + parseState = "beforeArrayValue"; + return; + case "]": + pop(); + } + }, + end: function end() { + } + }; + function push() { + var value; + switch (token.type) { + case "punctuator": + switch (token.value) { + case "{": + value = {}; + break; + case "[": + value = []; + break; + } + break; + case "null": + case "boolean": + case "numeric": + case "string": + value = token.value; + break; + } + if (root === void 0) { + root = value; + } else { + var parent = stack[stack.length - 1]; + if (Array.isArray(parent)) { + parent.push(value); + } else { + Object.defineProperty(parent, key, { + value, + writable: true, + enumerable: true, + configurable: true + }); + } + } + if (value !== null && typeof value === "object") { + stack.push(value); + if (Array.isArray(value)) { + parseState = "beforeArrayValue"; + } else { + parseState = "beforePropertyName"; + } + } else { + var current = stack[stack.length - 1]; + if (current == null) { + parseState = "end"; + } else if (Array.isArray(current)) { + parseState = "afterArrayValue"; + } else { + parseState = "afterPropertyValue"; + } + } + } + function pop() { + stack.pop(); + var current = stack[stack.length - 1]; + if (current == null) { + parseState = "end"; + } else if (Array.isArray(current)) { + parseState = "afterArrayValue"; + } else { + parseState = "afterPropertyValue"; + } + } + function invalidChar(c2) { + if (c2 === void 0) { + return syntaxError("JSON5: invalid end of input at " + line + ":" + column); + } + return syntaxError("JSON5: invalid character '" + formatChar(c2) + "' at " + line + ":" + column); + } + function invalidEOF() { + return syntaxError("JSON5: invalid end of input at " + line + ":" + column); + } + function invalidIdentifier() { + column -= 5; + return syntaxError("JSON5: invalid identifier character at " + line + ":" + column); + } + function separatorChar(c2) { + console.warn("JSON5: '" + formatChar(c2) + "' in strings is not valid ECMAScript; consider escaping"); + } + function formatChar(c2) { + var replacements = { + "'": "\\'", + '"': '\\"', + "\\": "\\\\", + "\b": "\\b", + "\f": "\\f", + "\n": "\\n", + "\r": "\\r", + " ": "\\t", + "\v": "\\v", + "\0": "\\0", + "\u2028": "\\u2028", + "\u2029": "\\u2029" + }; + if (replacements[c2]) { + return replacements[c2]; + } + if (c2 < " ") { + var hexString = c2.charCodeAt(0).toString(16); + return "\\x" + ("00" + hexString).substring(hexString.length); + } + return c2; + } + function syntaxError(message) { + var err = new SyntaxError(message); + err.lineNumber = line; + err.columnNumber = column; + return err; + } + var stringify = function stringify2(value, replacer, space) { + var stack2 = []; + var indent = ""; + var propertyList; + var replacerFunc; + var gap = ""; + var quote; + if (replacer != null && typeof replacer === "object" && !Array.isArray(replacer)) { + space = replacer.space; + quote = replacer.quote; + replacer = replacer.replacer; + } + if (typeof replacer === "function") { + replacerFunc = replacer; + } else if (Array.isArray(replacer)) { + propertyList = []; + for (var i = 0, list = replacer; i < list.length; i += 1) { + var v = list[i]; + var item = void 0; + if (typeof v === "string") { + item = v; + } else if (typeof v === "number" || v instanceof String || v instanceof Number) { + item = String(v); + } + if (item !== void 0 && propertyList.indexOf(item) < 0) { + propertyList.push(item); + } + } + } + if (space instanceof Number) { + space = Number(space); + } else if (space instanceof String) { + space = String(space); + } + if (typeof space === "number") { + if (space > 0) { + space = Math.min(10, Math.floor(space)); + gap = " ".substr(0, space); + } + } else if (typeof space === "string") { + gap = space.substr(0, 10); + } + return serializeProperty("", { "": value }); + function serializeProperty(key2, holder) { + var value2 = holder[key2]; + if (value2 != null) { + if (typeof value2.toJSON5 === "function") { + value2 = value2.toJSON5(key2); + } else if (typeof value2.toJSON === "function") { + value2 = value2.toJSON(key2); + } + } + if (replacerFunc) { + value2 = replacerFunc.call(holder, key2, value2); + } + if (value2 instanceof Number) { + value2 = Number(value2); + } else if (value2 instanceof String) { + value2 = String(value2); + } else if (value2 instanceof Boolean) { + value2 = value2.valueOf(); + } + switch (value2) { + case null: + return "null"; + case true: + return "true"; + case false: + return "false"; + } + if (typeof value2 === "string") { + return quoteString(value2, false); + } + if (typeof value2 === "number") { + return String(value2); + } + if (typeof value2 === "object") { + return Array.isArray(value2) ? serializeArray(value2) : serializeObject(value2); + } + return void 0; + } + function quoteString(value2) { + var quotes = { + "'": 0.1, + '"': 0.2 + }; + var replacements = { + "'": "\\'", + '"': '\\"', + "\\": "\\\\", + "\b": "\\b", + "\f": "\\f", + "\n": "\\n", + "\r": "\\r", + " ": "\\t", + "\v": "\\v", + "\0": "\\0", + "\u2028": "\\u2028", + "\u2029": "\\u2029" + }; + var product = ""; + for (var i2 = 0; i2 < value2.length; i2++) { + var c2 = value2[i2]; + switch (c2) { + case "'": + case '"': + quotes[c2]++; + product += c2; + continue; + case "\0": + if (util.isDigit(value2[i2 + 1])) { + product += "\\x00"; + continue; + } + } + if (replacements[c2]) { + product += replacements[c2]; + continue; + } + if (c2 < " ") { + var hexString = c2.charCodeAt(0).toString(16); + product += "\\x" + ("00" + hexString).substring(hexString.length); + continue; + } + product += c2; + } + var quoteChar = quote || Object.keys(quotes).reduce(function(a, b) { + return quotes[a] < quotes[b] ? a : b; + }); + product = product.replace(new RegExp(quoteChar, "g"), replacements[quoteChar]); + return quoteChar + product + quoteChar; + } + function serializeObject(value2) { + if (stack2.indexOf(value2) >= 0) { + throw TypeError("Converting circular structure to JSON5"); + } + stack2.push(value2); + var stepback = indent; + indent = indent + gap; + var keys = propertyList || Object.keys(value2); + var partial = []; + for (var i2 = 0, list2 = keys; i2 < list2.length; i2 += 1) { + var key2 = list2[i2]; + var propertyString = serializeProperty(key2, value2); + if (propertyString !== void 0) { + var member = serializeKey(key2) + ":"; + if (gap !== "") { + member += " "; + } + member += propertyString; + partial.push(member); + } + } + var final; + if (partial.length === 0) { + final = "{}"; + } else { + var properties; + if (gap === "") { + properties = partial.join(","); + final = "{" + properties + "}"; + } else { + var separator = ",\n" + indent; + properties = partial.join(separator); + final = "{\n" + indent + properties + ",\n" + stepback + "}"; + } + } + stack2.pop(); + indent = stepback; + return final; + } + function serializeKey(key2) { + if (key2.length === 0) { + return quoteString(key2, true); + } + var firstChar = String.fromCodePoint(key2.codePointAt(0)); + if (!util.isIdStartChar(firstChar)) { + return quoteString(key2, true); + } + for (var i2 = firstChar.length; i2 < key2.length; i2++) { + if (!util.isIdContinueChar(String.fromCodePoint(key2.codePointAt(i2)))) { + return quoteString(key2, true); + } + } + return key2; + } + function serializeArray(value2) { + if (stack2.indexOf(value2) >= 0) { + throw TypeError("Converting circular structure to JSON5"); + } + stack2.push(value2); + var stepback = indent; + indent = indent + gap; + var partial = []; + for (var i2 = 0; i2 < value2.length; i2++) { + var propertyString = serializeProperty(String(i2), value2); + partial.push(propertyString !== void 0 ? propertyString : "null"); + } + var final; + if (partial.length === 0) { + final = "[]"; + } else { + if (gap === "") { + var properties = partial.join(","); + final = "[" + properties + "]"; + } else { + var separator = ",\n" + indent; + var properties$1 = partial.join(separator); + final = "[\n" + indent + properties$1 + ",\n" + stepback + "]"; + } + } + stack2.pop(); + indent = stepback; + return final; + } + }; + var JSON53 = { + parse: parse3, + stringify + }; + var lib = JSON53; + var es5 = lib; + return es5; + }); + } +}); + +// src/main.ts +var main_exports = {}; +__export(main_exports, { + ObsidianSpreadsheet: () => ObsidianSpreadsheet, + default: () => main_default +}); +module.exports = __toCommonJS(main_exports); +var import_obsidian3 = require("obsidian"); + +// src/settings.ts +var import_obsidian = require("obsidian"); +var SheetSettingsTab = class extends import_obsidian.PluginSettingTab { + constructor(app, plugin) { + super(app, plugin); + this.plugin = plugin; + } + display() { + const { containerEl } = this; + containerEl.empty(); + new import_obsidian.Setting(containerEl).setName("Native table post processing").setDesc("Enable this setting to use Obsidian Sheets' renderer ").addToggle( + (toggle) => toggle.setValue(this.plugin.settings.nativeProcessing).onChange(async (value) => { + var _a, _b; + this.plugin.settings.nativeProcessing = value; + await this.plugin.saveSettings(); + (_a = this.app.workspace.activeLeaf) == null ? void 0 : _a.rebuildView(); + (_b = this.app.workspace.getActiveViewOfType(import_obsidian.MarkdownView)) == null ? void 0 : _b.previewMode.rerender(true); + }) + ); + new import_obsidian.Setting(containerEl).setName("Use paragraphs in cells").setDesc("Enable this setting to use paragraphs for table cells ").addToggle( + (toggle) => toggle.setValue(this.plugin.settings.paragraphs).onChange(async (value) => { + var _a, _b; + this.plugin.settings.paragraphs = value; + await this.plugin.saveSettings(); + (_a = this.app.workspace.activeLeaf) == null ? void 0 : _a.rebuildView(); + (_b = this.app.workspace.getActiveViewOfType(import_obsidian.MarkdownView)) == null ? void 0 : _b.previewMode.rerender(true); + }) + ); + } +}; + +// src/sheetElement.ts +var import_obsidian2 = require("obsidian"); +var JSON5 = __toESM(require_dist()); +var MERGE_UP_SIGNIFIER = "^"; +var MERGE_LEFT_SIGNIFIER = "<"; +var HEADER_DELIMETER = "-"; +var META_DELIMETER = "---"; +var SheetElement = class extends import_obsidian2.MarkdownRenderChild { + constructor(el, source, ctx, app, plugin) { + super(el); + this.el = el; + this.source = source; + this.ctx = ctx; + this.app = app; + this.plugin = plugin; + this.globalStyle = {}; + this.cellMaxLength = 0; + this.rowMaxLength = 0; + this.rowStyles = []; + this.colStyles = []; + this.domGrid = []; + } + async onload() { + this.metaRE = new RegExp(String.raw`^${META_DELIMETER}\s*?(?:~(.*?))?\s*?\n+`, "mg"); + this.newLineRE = new RegExp(String.raw`\n`); + this.cellBorderRE = new RegExp(String.raw`(? this.cellBorderRE.test(row)).map((row) => row.split(this.cellBorderRE).map((cell) => cell.trim())); + const [meta, unparsedStyle, source] = this.source.split(this.metaRE); + this.parseMetadata(meta); + if (unparsedStyle) { + let cellStyle = {}; + const cls = unparsedStyle.match(/\.\S+/g) || []; + cls.forEach((cssClass) => { + var _a2; + cellStyle = { ...cellStyle, ...((_a2 = this.styles) == null ? void 0 : _a2[cssClass.slice(1)]) || {} }; + }); + const inlineStyle = ((_a = unparsedStyle.match(/\{.*\}/)) == null ? void 0 : _a[0]) || "{}"; + try { + cellStyle = { ...cellStyle, ...JSON5.parse(inlineStyle) }; + } catch (e) { + console.error(`Invalid cell style \`${inlineStyle}\``); + } + this.globalStyle = cellStyle; + } + return this.contentGrid = source.split(this.newLineRE).map((row) => row.split(this.cellBorderRE).map((cell) => cell.trim())); + } + parseMetadata(meta) { + let metadata; + try { + metadata = JSON5.parse(meta); + } catch (error) { + return this.displayError("Metadata is not proper JSON"); + } + this.metadata = metadata; + if (metadata.classes) { + this.styles = metadata.classes; + } + } + validateInput() { + if (!this.contentGrid.every( + (row) => { + var _a, _b; + return !((_a = row.pop()) == null ? void 0 : _a.trim()) && !((_b = row.shift()) == null ? void 0 : _b.trim()); + } + )) + return this.displayError("Malformed table"); + } + normalizeGrid() { + for (let rowIndex = 0; rowIndex < this.contentGrid.length; rowIndex++) { + const row = this.contentGrid[rowIndex]; + if (this.rowMaxLength < row.length) + this.rowMaxLength = row.length; + for (let colIndex = 0; colIndex < row.length; colIndex++) + if (this.cellMaxLength < row[colIndex].trim().length) + this.cellMaxLength = row[colIndex].trim().length; + } + this.contentGrid = this.contentGrid.map( + (line) => Array.from( + { ...line, length: this.rowMaxLength }, + (cell) => cell || "" + ) + ); + } + getHeaderBoundaries() { + this.headerRow = this.contentGrid.findIndex( + (headerRow) => headerRow.every((headerCol) => this.headerRE.test(headerCol)) + ); + this.headerCol = this.contentGrid[0].map( + (_, i) => this.contentGrid.map((row) => row[i]) + ).findIndex( + (headerCol) => headerCol.every((headerCol2) => this.headerRE.test(headerCol2)) + ); + } + getHeaderStyles() { + if (this.headerRow !== -1) + this.colStyles = this.contentGrid[this.headerRow].map((rowHead) => { + var _a, _b; + let styles = {}; + const alignment = rowHead.match(this.headerRE); + if (!alignment) + return { classes: [], styles }; + else if (alignment[1] && alignment[2]) + styles["textAlign"] = "center"; + else if (alignment[1]) + styles["textAlign"] = "left"; + else if (alignment[2]) + styles["textAlign"] = "right"; + const classes = ((_b = (_a = alignment[3]) == null ? void 0 : _a.match(/\.\S+/g)) == null ? void 0 : _b.map(String)) || []; + classes.forEach( + (cssClass) => { + var _a2; + return styles = { + ...styles, + ...((_a2 = this.styles) == null ? void 0 : _a2[cssClass.slice(1)]) || {} + }; + } + ); + return { classes, styles }; + }); + if (this.headerCol !== -1) + this.rowStyles = this.contentGrid[0].map( + (_, i) => this.contentGrid.map((row) => row[i]) + )[this.headerCol].map((rowHead) => { + var _a, _b; + let styles = {}; + const alignment = rowHead.match(this.headerRE); + if (!alignment) + return { classes: [], styles }; + else if (alignment[1] && alignment[2]) + styles["textAlign"] = "center"; + else if (alignment[1]) + styles["textAlign"] = "left"; + else if (alignment[2]) + styles["textAlign"] = "right"; + const classes = ((_b = (_a = alignment[3]) == null ? void 0 : _a.match(/\.\S+/g)) == null ? void 0 : _b.map(String)) || []; + classes.forEach( + (cssClass) => { + var _a2; + return styles = { + ...styles, + ...((_a2 = this.styles) == null ? void 0 : _a2[cssClass.slice(1)]) || {} + }; + } + ); + return { classes, styles }; + }); + } + buildDomTable() { + for (let rowIndex = 0; rowIndex < this.contentGrid.length; rowIndex++) + this.buildDomRow(rowIndex); + } + buildDomRow(rowIndex) { + const rowContents = this.contentGrid[rowIndex]; + let rowNode = this.tableBody.createEl("tr"); + if (rowIndex < this.headerRow) + rowNode = this.tableHead.createEl("tr"); + else if (rowIndex === this.headerRow) + return; + this.domGrid[rowIndex] = []; + for (let columnIndex = 0; columnIndex < rowContents.length; columnIndex++) + this.buildDomCell(rowIndex, columnIndex, rowNode); + } + async buildDomCell(rowIndex, columnIndex, rowNode) { + var _a, _b, _c, _d, _e, _f, _g, _h, _i; + const [ + cellContent, + cellStyles + ] = this.contentGrid[rowIndex][columnIndex].split(/(? { + var _a2; + cellStyle = { ...cellStyle, ...((_a2 = this.styles) == null ? void 0 : _a2[cssClass]) || {} }; + }); + const inlineStyle = ((_a = cellStyles.match(/\{.*\}/)) == null ? void 0 : _a[0]) || "{}"; + try { + cellStyle = { ...cellStyle, ...JSON5.parse(inlineStyle) }; + } catch (e) { + console.error(`Invalid cell style \`${inlineStyle}\``); + } + } + let cellTag = "td"; + let cell; + if (columnIndex === this.headerCol || rowIndex === this.headerRow) + return; + else if (columnIndex < this.headerCol || rowIndex < this.headerRow) + cellTag = "th"; + if (cellContent == MERGE_LEFT_SIGNIFIER && ((_c = (_b = this.domGrid) == null ? void 0 : _b[rowIndex]) == null ? void 0 : _c[columnIndex - 1])) { + cell = this.domGrid[rowIndex][columnIndex - 1]; + (cell == null ? void 0 : cell.colSpan) || Object.assign(cell, { colSpan: 1 }); + cell.colSpan = columnIndex - parseInt(cell.getAttribute("col-index") || columnIndex.toString()) + 1; + } else if (cellContent == MERGE_UP_SIGNIFIER && ((_e = (_d = this.domGrid) == null ? void 0 : _d[rowIndex - 1]) == null ? void 0 : _e[columnIndex])) { + cell = this.domGrid[rowIndex - 1][columnIndex]; + (cell == null ? void 0 : cell.rowSpan) || Object.assign(cell, { rowSpan: 1 }); + cell.rowSpan = rowIndex - parseInt(cell.getAttribute("row-index") || "0") + 1; + } else if (((_g = (_f = this.domGrid) == null ? void 0 : _f[rowIndex - 1]) == null ? void 0 : _g[columnIndex]) && ((_i = (_h = this.domGrid) == null ? void 0 : _h[rowIndex]) == null ? void 0 : _i[columnIndex - 1]) && this.domGrid[rowIndex][columnIndex - 1] === this.domGrid[rowIndex - 1][columnIndex]) + cell = this.domGrid[rowIndex][columnIndex - 1]; + else { + cell = rowNode.createEl(cellTag, { cls }); + cell.setAttribute("row-index", rowIndex.toString()); + cell.setAttribute("col-index", columnIndex.toString()); + import_obsidian2.MarkdownRenderer.render( + this.app, + "\u200B " + (cellContent || "\u200B"), + // Make sure markdown that requires to be at the start of a line is not rendered + cell, + "", + this + ).then(() => { + cell.innerHTML = cell.children[0].innerHTML.replace(/^\u200B /g, ""); + }); + Object.assign(cell.style, cellStyle); + } + return this.domGrid[rowIndex][columnIndex] = cell; + } +}; + +// src/main.ts +var JSON52 = __toESM(require_dist()); +var DEFAULT_SETTINGS = { + nativeProcessing: true, + paragraphs: true +}; +var ObsidianSpreadsheet = class extends import_obsidian3.Plugin { + async onload() { + this.loadSettings(); + this.registerMarkdownCodeBlockProcessor( + "sheet", + async (source, el, ctx) => { + source = source.trim(); + ctx.addChild( + new SheetElement( + el, + source, + ctx, + this.app, + this + ) + ); + } + ); + this.registerMarkdownPostProcessor(async (el, ctx) => { + var _a, _b, _c, _d; + if (!this.settings.nativeProcessing) + return; + if (((_a = ctx.frontmatter) == null ? void 0 : _a["disable-sheet"]) === true) + return; + const tableEls = el.querySelectorAll("table"); + if (tableEls.length) { + for (const tableEl2 of Array.from(tableEls)) { + if (!tableEl2) + return; + if ((tableEl2 == null ? void 0 : tableEl2.id) === "obsidian-sheets-parsed") + return; + const sec = ctx.getSectionInfo(tableEl2); + let source = ""; + if (!sec) { + tableEl2.querySelectorAll(":scope td").forEach(({ childNodes }) => childNodes.forEach((node) => { + var _a2; + if (node.nodeType == 3) + node.textContent = ((_a2 = node.textContent) == null ? void 0 : _a2.replace(/[*_`[\]$()]|[~=]{2}/g, "\\$&")) || ""; + })); + tableEl2.querySelectorAll(":scope a.internal-link").forEach((link) => { + const parsedLink = document.createElement("span"); + parsedLink.innerText = `[[${link.getAttr("href")}|${link.innerText}]]`; + link.replaceWith(parsedLink); + }); + tableEl2.querySelectorAll(":scope span.math").forEach( + (link) => { + var _a2; + return ((_a2 = link.textContent) == null ? void 0 : _a2.trim().length) ? link.textContent = `$${link.textContent || ""}$` : null; + } + ); + source = (0, import_obsidian3.htmlToMarkdown)(tableEl2).trim().replace(/\\\\/g, "$&$&"); + if (!source) + return; + } else { + const { text, lineStart, lineEnd } = sec; + let textContent = text.split("\n").slice(lineStart, 1 + lineEnd).map((line) => line.replace(/^.*?(?=\|(?![^[]*]))/, "")); + const endIndex = textContent.findIndex((line) => /^(?!\|)/.test(line)); + if (textContent[0].startsWith("```")) + return; + if (endIndex !== -1) + textContent = textContent.slice(0, endIndex + 1); + if (!textContent.filter((row) => /(? row.split(/(? cell.trim())).every( + (row) => { + var _a2, _b2; + return !((_a2 = row.pop()) == null ? void 0 : _a2.trim()) && !((_b2 = row.shift()) == null ? void 0 : _b2.trim()); + } + )) + return; + source = textContent.join("\n"); + } + tableEl2.empty(); + ctx.addChild(new SheetElement(tableEl2, source.trim(), ctx, this.app, this)); + } + return; + } + const tableEl = el.closest("table"); + if (!tableEl) + return; + if ((tableEl == null ? void 0 : tableEl.id) === "obsidian-sheets-parsed") + return; + const rawMarkdown = ((_b = ctx.getSectionInfo(tableEl)) == null ? void 0 : _b.text) || (0, import_obsidian3.htmlToMarkdown)(tableEl); + const rawMarkdownArray = rawMarkdown.replace(/\n\s*\|\s*-+.*?(?=\n)/g, "").replace(/^\||\|$/gm, "").split(/\||\n/g); + const toChange = rawMarkdownArray.reduce((cum, curr, i) => { + /(? m.toString())) || []; + let cellStyle = {}; + const inlineStyle = ((_d = cellStyles.match(/\{.*\}/)) == null ? void 0 : _d[0]) || "{}"; + try { + cellStyle = { ...cellStyle, ...JSON52.parse(inlineStyle) }; + } catch (e) { + console.error(`Invalid cell style \`${inlineStyle}\``); + } + const DOMContent = DOMCellArray[index].querySelector(".table-cell-wrapper") || DOMCellArray[index]; + Object.assign(DOMContent.style, cellStyle); + DOMContent.classList.add(...classes); + DOMContent.innerText = DOMContent.innerText.split(/(? Even when drawings show 2 separate duplex receptacles, > use `DW & DISPOSAL DUAL CIR - ...`, > which includes only one receptacle. -``` \ No newline at end of file +``` diff --git a/timestamped/2026-02-17_16-36-35.md b/timestamped/2026-02-17_16-36-35.md index 311b2d5..fea61ac 100644 --- a/timestamped/2026-02-17_16-36-35.md +++ b/timestamped/2026-02-17_16-36-35.md @@ -21,16 +21,8 @@ variance of actual cost/hours versus estimated, (obviously) requires estimates, which are subject to bias and error. If you argue that subject matter expert estimates _are_ objective -<<<<<<< HEAD under a Bayesian interpretation, then sure, but then EVM is not unique. EVM WBS's, as a form of [[estimate-decomposition]], suffer from its weakness of compounding inaccuracy. -======= -under the Bayesian interpretation, -then sure, but then EVM is not unique. - -EVM as a form of [[estimate-decomposition]] -suffers f ->>>>>>> origin/main diff --git a/timestamped/2026-03-02_15-35-49.md b/timestamped/2026-03-02_15-35-49.md index bfc58a7..95baebc 100644 --- a/timestamped/2026-03-02_15-35-49.md +++ b/timestamped/2026-03-02_15-35-49.md @@ -2,10 +2,10 @@ id: 2026-03-02T15:35:49-0500 title: 2026-03-02 15:35:49 tags: - - status/draft - occupational -date-created: 2026-03-02T15:35:49-05:00 + - status/draft daily: "[[2026-03-02]]" +date-created: 2026-03-02T15:35:49-05:00 --- # 2026-03-02 15:35:49 @@ -14,4 +14,4 @@ daily: "[[2026-03-02]]" Change order for awarded project [[belle-meade-plaza|Belle Meade Plaza]] Distribution Panel "DPCT2" was deleted, -orphaned loads to be served from "DPCT" (previously "DPCT1") \ No newline at end of file +orphaned loads to be served from "DPCT" (previously "DPCT1") diff --git a/timestamped/2026-03-03_09-37-39.md b/timestamped/2026-03-03_09-37-39.md index 49e9ab4..52aa6f7 100644 --- a/timestamped/2026-03-03_09-37-39.md +++ b/timestamped/2026-03-03_09-37-39.md @@ -207,7 +207,8 @@ and completes each systems accurately (FA/DAS/2Way). Zane references Electrical and Low Voltage drawings to determine job requirements for accurate take-off of the Telecom system. -Telecom seems to be a living system that changes between initial take-off to completion, +Telecom seems to be a living system +that changes between initial take-off to completion, and Zane does a good job to stay on top of it. Can improve speed of take-off diff --git a/timestamped/2026-03-10_13-51-32.md b/timestamped/2026-03-10_13-51-32.md index 5975f3a..6efed82 100644 --- a/timestamped/2026-03-10_13-51-32.md +++ b/timestamped/2026-03-10_13-51-32.md @@ -28,7 +28,7 @@ with clarification by [[joel-jansen]]: > in dry locations only. > [!quote] Joel Jansen 2026-03-10 (pp.) -> Takeoff as specified +> Take off as specified ### Liquid-Tight Conduit diff --git a/timestamped/2026-03-13_09-47-42.md b/timestamped/2026-03-13_09-47-42.md index 5a731b9..2c0995b 100644 --- a/timestamped/2026-03-13_09-47-42.md +++ b/timestamped/2026-03-13_09-47-42.md @@ -21,7 +21,8 @@ with a search algorithm like [A*](https://en.wikipedia.org/wiki/A*_search_algori Such a program could also calculate voltage drop. I think, though, I may have been unfair to my employers (current and previous). -Innovative methods will always be bottlenecked by [[accubid|Accubid]]'s strict input pattern, +Innovative methods will always be bottlenecked +by [[accubid|Accubid]]'s strict input pattern, but there are still opportunities for improvement that can comply with existing expectations of evidence. diff --git a/timestamped/2026-03-19_09-00-43.md b/timestamped/2026-03-19_09-00-43.md index 7ed39a5..5919391 100644 --- a/timestamped/2026-03-19_09-00-43.md +++ b/timestamped/2026-03-19_09-00-43.md @@ -26,8 +26,11 @@ be used to track Intent is too provide information to the bid team potentially to be qualified in future bids. -> 1. ConEst deviates from specs based on direction from [[pdi-bid-estimating|Bid]]. +> 1. ConEst deviates from specs +> based on direction from [[pdi-bid-estimating|Bid]]. +> > 2. Awarded contract does not include respect for the direction +> > 3. Ops, not aware of direction, believes ConEst takeoff was in error. Intent is to improve transparency, diff --git a/timestamped/2026-03-20_09-11-09.md b/timestamped/2026-03-20_09-11-09.md index 84ac5ae..2a87ec8 100644 --- a/timestamped/2026-03-20_09-11-09.md +++ b/timestamped/2026-03-20_09-11-09.md @@ -19,9 +19,11 @@ Follow-up to [[2026-03-19_09-00-43]] > Following up from our meeting yesterday. > Please see attached for the Pre-takeoff template and example. > -> * The template is saved here: S:\Estimating\7 ConEst Team\ConEst Process Documents +> * The template is saved here: +> S:\Estimating\7 ConEst Team\ConEst Process Documents > -> * When completed please save in #4. Notes & E-mails within the project folder. +> * When completed please save in +> #4. Notes & E-mails within the project folder. > > * When distribution to the team, > please send content within the body of the email @@ -30,10 +32,14 @@ Follow-up to [[2026-03-19_09-00-43]] > * Distribution List: > > * To: PCM, Senior Estimator & Estimator -> * CC: Senior Construction Estimator, Other ConEst team members on the project, Josh Ford, Corwin Fluit & Jessalyn Williams +> * CC: Senior Construction Estimator, +> Other ConEst team members on the project, +> Josh Ford, Corwin Fluit & Jessalyn Williams > -> * We will not use this exact template for Design Builds (remove spec portion of email), -> Data Centers, Stadiums or Large commercial projects (We will customize based on SOW) +> * We will not use this exact template for Design Builds +> (remove spec portion of email), +> Data Centers, Stadiums or Large commercial projects +> (We will customize based on SOW) > > For the tasks, I will set up a separate meeting to go over that portion, > feel free to leave that portion off the email until after that training. diff --git a/timestamped/2026-03-23_12-48-49.md b/timestamped/2026-03-23_12-48-49.md index d8d835f..6a0b7e3 100644 --- a/timestamped/2026-03-23_12-48-49.md +++ b/timestamped/2026-03-23_12-48-49.md @@ -9,20 +9,21 @@ daily: "[[2026-03-23]]" --- # 2026-03-23 12:48:49 -[[joel-jansen]] asked me to give feedback on the project engineer -I've had shadowing and helping me on [[charlotte-south-end-hotel]]. +[[joel-jansen]] asked me to give feedback on Christopher Glass, +the project engineer I've had shadowing me +and helping on [[charlotte-south-end-hotel]]. -They've been exceptionally engaged, +He's been exceptionally engaged, with an impressive ability to follow along with procedures that are based in electrical and general construction considerations -that they weren't already familiar with. +that he wasn't already familiar with. I told Joel the same. -I added that I appreciated that their engagement extends +I added that I appreciated that his engagement extends to my explanations of my thought processes during takeoff, which can be quite abstract. -I found the PE's receptivity +I found Chris's receptivity a pleasant surprise. In my experience training estimating, both at Ace and PDI, diff --git a/timestamped/2026-03-25_13-17-35.md b/timestamped/2026-03-25_13-17-35.md index 832a051..a781812 100644 --- a/timestamped/2026-03-25_13-17-35.md +++ b/timestamped/2026-03-25_13-17-35.md @@ -20,14 +20,14 @@ Intent is to reduce WBS turnaround, reduce time spent sitting on WBS's completed except for pending tasks. -A task is "missing" -if it is necessary to complete the WBS -and it is not already open (or completed) in BPM. +A task is "missing" if +1. it is necessary to complete the WBS +2. it is not already open (or completed) in BPM. * **BPM > Bid History:** Tasks within the current Bid Round * **BPM > Tasks:** Tasks outside of Bid Round - Tasks > 1. Open Tasks + Tasks > 1. Open Tasks \ Tasks > 2. Completed Tasks * Constructability Review diff --git a/timestamped/2026-03-26_14-10-46.md b/timestamped/2026-03-26_14-10-46.md index 589f0e4..c8b093a 100644 --- a/timestamped/2026-03-26_14-10-46.md +++ b/timestamped/2026-03-26_14-10-46.md @@ -12,7 +12,7 @@ daily: "[[2026-03-26]]" ## 1990 K Street: ConEst Manager Review [[conest-manager-review]] for [[1990-k-street]] -lead by Josh Ford and [[joel-jansen]] +lead by [[josh-ford|Josh Ford]] and [[joel-jansen|Joel Jansen]] ### Purpose of ConEst Manager Review @@ -53,12 +53,14 @@ to be confirmed with [[christian-pereiro]]. ### EV Chargers -EV Chargers were erroneously placed in `System` "EL - Electrical". +> [!failure] +> EV Chargers were erroneously placed in `System` "EL - Electrical". ### Lighting Controls -Josh was looking for for energy code -not present in pre-takeoff email or OneNote. +> [!failure] +> Josh was looking for for energy code +> not present in pre-takeoff email or OneNote. ASHRAE 2016 diff --git a/timestamped/2026-04-01_13-56-44.md b/timestamped/2026-04-01_13-56-44.md index abee6ac..215b1fc 100644 --- a/timestamped/2026-04-01_13-56-44.md +++ b/timestamped/2026-04-01_13-56-44.md @@ -18,6 +18,9 @@ attended by [[joel-jansen]] and myself. "MSA TO BUSDUCT" needs more elbows: added. + +*** + Josh talked about necessary pullboxes, but they were not added. Josh stated the purpose of the closeout budget @@ -25,6 +28,8 @@ is to prevent procurement from buying sizes that may be chosen arbitrarily. Added $5,000 to the budget. +*** + Concern was expressed that feeders up from Main Elec may need to be lengthened to follow MSA TO BUSDUCT routing shown on floor plans. @@ -53,13 +58,13 @@ Josh complemented subfeed routing: "That's taking pride in your work." I have had hesitation that it was worth doing, -if someone told be it was a waste of time, +if someone told me it was a waste of time, I would not have been inclined to disagree. #### Units Unit receptacles are shown controlled by master switch system. -I assumed full control (not half) so no made no consideration in takeoff. +I assumed full control (not half) so made no consideration in takeoff. Approved. #### Lighting Control @@ -79,7 +84,7 @@ DO NOT USE `System` "LV - Lighting Controls System" EVER > [!quote] Josh Ford > We're carrying material handling -> because we own fixtures and its a tall building +> because we own fixtures and it's a tall building #### Labor Plan diff --git a/timestamped/2026-04-07_07-21-00.md b/timestamped/2026-04-07_07-21-00.md index b05ba3b..5def218 100644 --- a/timestamped/2026-04-07_07-21-00.md +++ b/timestamped/2026-04-07_07-21-00.md @@ -22,9 +22,11 @@ I would not be surprised to hear of an estimator responding this way even after Hubbard's calibration. Hubbard repeatedly conflates estimates of uncertain events with personal estimates of trivia questions with certain answers. -These are functionally identical, -but _feel_ very different. +Under Bayesian statistics these cases are identical, +but they still _feel_ very different. Hubbard could do better to address this bias. -If you don't know the answer offhand, -imagine it has been lost to time. +If you don't know the answer offhand, imagine it has been lost to time. +According to most discographers, +The Winstons' _Color Him Father_ (the origin of the Amen break) +was released "May 1969", with no date. diff --git a/timestamped/2026-04-08_13-53-59.md b/timestamped/2026-04-08_13-53-59.md index 732ee52..885a9d9 100644 --- a/timestamped/2026-04-08_13-53-59.md +++ b/timestamped/2026-04-08_13-53-59.md @@ -8,11 +8,18 @@ date-created: 2026-04-08T13:53:59-04:00 --- # 2026-04-08 13:53:59 -> [!quote] [[hubbard_2025_project-management#Conflating Uncertainty with Knowing Nothing]] (text decoration added) -> An assumption is a statement we treat as true for the sake of argument, regardless of whether it is true. -> Assumptions are necessary if you have to use deterministic accounting methods with exact points as values. +> [!quote] Hubbard et al[^1] +> An assumption is a statement +> we treat as true for the sake of argument, +> regardless of whether it is true. +> Assumptions are necessary +> if you have to use deterministic accounting methods +> with exact points as values. > ==You rarely, if ever, know an exact point with certainty,== > ==so any such value must be an assumption.== +[^1]: [[hubbard_2025_project-management#Conflating Uncertainty with Knowing Nothing]] + (text decoration added) + Assumptions are frowned upon in [[construction-estimating]], but they are only made necessary by the insistence on exact values. diff --git a/timestamped/2026-04-09_09-10-26.md b/timestamped/2026-04-09_09-10-26.md index 4d072ea..4116e7e 100644 --- a/timestamped/2026-04-09_09-10-26.md +++ b/timestamped/2026-04-09_09-10-26.md @@ -18,7 +18,7 @@ Data grabbed from The Hub last year before I lost access has both sale price and cost at exactly $19,906,645.23. > [!aside] -> Obviously this is doctored, +> Obviously this is phony, > which is immensely frustrating, > but irrelevant to this note. diff --git a/timestamped/2026-04-10_08-28-18.md b/timestamped/2026-04-10_08-28-18.md index 29a4813..f72143c 100644 --- a/timestamped/2026-04-10_08-28-18.md +++ b/timestamped/2026-04-10_08-28-18.md @@ -30,9 +30,9 @@ and with that I feel my understanding has doubled. At 5,976,038 sqft per BPM that comes out to almost exactly $0.04 per sqft. -If ConEst is budgeted per square foot -then it should follow that ConEst effort -should be proportional to building area, +ConEst is budgeted per square foot +which suggests that total ConEst effort +is expected to be proportional to building area, but this is not usually the case in practice. Since larger jobs tend to have more typical work, jobs of every size tend to take about two weeks diff --git a/timestamped/2026-04-11_16-20-11.md b/timestamped/2026-04-11_16-20-11.md index bafa680..65235cc 100644 --- a/timestamped/2026-04-11_16-20-11.md +++ b/timestamped/2026-04-11_16-20-11.md @@ -21,8 +21,8 @@ but when there was still vocal opposition to its adoption as such. In elementary school I was taught how to use the library traditionally -and I heard every week that on Wikipedia -erroneous content is presented as fact. +and I heard every week +that on Wikipedia erroneous content is presented as fact. At the time I took issue with the warning, now I recognize it as implicit [[nirvana-fallacy]]. Print encyclopedias have the same problem diff --git a/timestamped/2026-04-11_23-50-56.md b/timestamped/2026-04-11_23-50-56.md index 2a70b67..db8a109 100644 --- a/timestamped/2026-04-11_23-50-56.md +++ b/timestamped/2026-04-11_23-50-56.md @@ -44,9 +44,9 @@ Just a decade after the Rolodex was killed, but already two from today. In another another three -my kid will say the same. -Just a decade after the Rolodex was killed, -but already five from today. +my kid will say the same: +"Just a decade after the Rolodex was killed, +but already five from today." Chips get faster, apps get slower. diff --git a/timestamped/2026-04-12_02-23-28.md b/timestamped/2026-04-12_02-23-28.md index c224bd2..89e68da 100644 --- a/timestamped/2026-04-12_02-23-28.md +++ b/timestamped/2026-04-12_02-23-28.md @@ -8,11 +8,12 @@ daily: "[[2026-04-12]]" --- # 2026-04-12 02:23:28 -Speaking to a mechanical engineer formerly employed by PDI +Speaking to a mechanical engineer +formerly employed by [[power-design-inc|PDI]] I asked if they had any examples of PDI-specific practice that they had been lead to believe was industry standard. They said that the drafting that they were expected to perform -was at an unhappy middle ground of detail +was at an unhappy middle ground of granularity between the practice they were taught in school would be appropriate for their skill and that which they associated with operations. diff --git a/timestamped/2026-04-15_14-54-00.md b/timestamped/2026-04-15_14-54-00.md index 32ab561..c9c866b 100644 --- a/timestamped/2026-04-15_14-54-00.md +++ b/timestamped/2026-04-15_14-54-00.md @@ -22,7 +22,7 @@ because one can not think as deeply while standing as while sitting.[^1] I think the largest part of my tendency is that I don't like people watching me work. -He clarified that he did this in order to _focus_, +He clarified that he did this _in order to focus_, which I have heard before but never gave much credit. I then made the now obvious connection that impairing deep thinking is exactly the method diff --git a/timestamped/2026-04-15_15-59-02.md b/timestamped/2026-04-15_15-59-02.md index 01657c0..1f9bf8c 100644 --- a/timestamped/2026-04-15_15-59-02.md +++ b/timestamped/2026-04-15_15-59-02.md @@ -35,7 +35,7 @@ to prevent the most pain from future mistakes. *** Rationale is the most important part of the entry. -It's not helpful to say +It's not helpful to say "I just wasn't thinking". If that's truly what seems to be the cause, consider your state at the time: Were you mentally exhausted? diff --git a/timestamped/2026-04-15_17-31-57.md b/timestamped/2026-04-15_17-31-57.md index 47b59da..c2e4ee9 100644 --- a/timestamped/2026-04-15_17-31-57.md +++ b/timestamped/2026-04-15_17-31-57.md @@ -8,7 +8,7 @@ daily: "[[2026-04-15]]" --- # 2026-04-15 17:31:57 -A peer, not intending to, +[[william-bonn|Willie]], not intending to, convinced me I should buy my next car as much over email as possible. diff --git a/timestamped/2026-04-15_19-58-19.md b/timestamped/2026-04-15_19-58-19.md index c67fe5a..be0f43d 100644 --- a/timestamped/2026-04-15_19-58-19.md +++ b/timestamped/2026-04-15_19-58-19.md @@ -13,7 +13,8 @@ daily: "[[2026-04-15]]" The [Gell-Mann amnesia effect](https://en.wikipedia.org/wiki/Michael_Crichton#%22Gell-Mann_amnesia_effect%22) may explain my tendency to rave about literature on other disciplines. I am a bitter detractor of Mike Holt, -(who may be the only thing approaching a published researcher in our shared fields[^1]) +(who may be the only thing approaching a published researcher +in our shared fields[^1]) but I'm quick to ignore typos and other presentation issues which may be indicative of low rigor in books and articles for adjacent fields. diff --git a/timestamped/2026-04-29_21-27-28.md b/timestamped/2026-04-29_21-27-28.md index e8ea961..53da794 100644 --- a/timestamped/2026-04-29_21-27-28.md +++ b/timestamped/2026-04-29_21-27-28.md @@ -9,7 +9,8 @@ daily: "[[2026-04-29]]" ## Soldiering [**Soldiering**](https://en.wikipedia.org/wiki/Scientific_management#Soldiering) -describes the practice of performing the bare minimum necessary to avoid punishment. +describes the practice of workers +performing to the bare minimum necessary to avoid punishment. Coined in [[taylor_1911_scientific-management]], though Taylor acknowledged the tendency was given many names. diff --git a/timestamped/2026-05-04_06-36-50.md b/timestamped/2026-05-04_06-36-50.md index 5105a69..056c40e 100644 --- a/timestamped/2026-05-04_06-36-50.md +++ b/timestamped/2026-05-04_06-36-50.md @@ -27,7 +27,8 @@ Evidence for the theory seems to come down to two points: * **Zampanò is personally invested in _The Navidson Record_.** It is widely understood that _House of Leaves_ - (by Zampanò, not the fictional book Navy reads in the _Record_) + (by Zampanò, not by Danielewski, + also not the fictional book Navy reads in the _Record_) is allegorical for Zampanò's blindness. At times, Zampanò refers to Navy in the first person. These do not prove he invented the narrative, diff --git a/timestamped/2026-05-05_11-53-09.md b/timestamped/2026-05-05_11-53-09.md index d1c9e05..15b8192 100644 --- a/timestamped/2026-05-05_11-53-09.md +++ b/timestamped/2026-05-05_11-53-09.md @@ -15,8 +15,6 @@ received while working on [[hilltop-gardens|Hilltop Gardens]]. Relevant to [[two-way-takeoff]]: - - > [!quote] Ben O'Brien's OneNote: Takeoff/(FA RISER + 2-WAY) > * Horizontal: > * Length: