Skip to content

Instantly share code, notes, and snippets.

@jamespwright
Created February 9, 2024 01:55
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save jamespwright/6dab2525d36c9d5a31f64dee35058bf2 to your computer and use it in GitHub Desktop.
Save jamespwright/6dab2525d36c9d5a31f64dee35058bf2 to your computer and use it in GitHub Desktop.
name: Bunpilot Word
description: ''
host: WORD
api_set: {}
script:
content: |
// Constants for API configuration
const OPENAI_API_URL = "https://api.openai.com/v1/chat/completions";
//TODO: Keyvault access for better security
const OPENAI_API_TOKEN = "YOURAPIKEY";
const OPENAI_API_MODEL = "gpt-4";
const promptsize = 15000;
// Set up event listeners for buttons
$("#btnimprove").click(improve);
$("#btnsummarise").click(summarise);
$("#btncoach").click(coach);
$(".close").click(function() {
$("#myModal").hide();
});
function improve() {
$(".loader").show();
// Get selected text from the email
Office.context.document.getSelectedDataAsync(Office.CoercionType.Text, function(result) {
const text = result.value;
// Check if any text is selected
if (text && text.trim() !== "") {
//console.log(text);
callOpenAI(text, "improve");
} else {
// Inform the user that no text is selected.
$(".loader").hide();
openmodal();
document.getElementById("modalText").innerHTML = "No text is selected for improvement.";
}
});
}
async function summarise() {
$(".loader").show();
await Word.run(async (context) => {
var body = context.document.body;
body.load("text");
await context.sync();
var text = body.text;
//console.log(text);
callOpenAI(text, "summarise");
});
}
async function coach() {
$(".loader").show();
await Word.run(async (context) => {
var body = context.document.body;
body.load("text");
await context.sync();
var text = body.text;
//console.log(text);
callOpenAI(text, "coach");
});
}
function callOpenAI(text, mode) {
//Reduce prompt size so we dont exceed max openai tokens
let prompttext = text.slice(0, promptsize);
//set prompt length
if ($("#short").prop("checked")) {
let promptlength = "short length sentences";
} else if ($("#medium").prop("checked")) {
let promptlength = "medium length sentences";
} else if ($("#long").prop("checked")) {
let promptlength = "long length sentenses";
}
//Set prompt tone
if ($("#direct").prop("checked")) {
let prompttone = "direct";
} else if ($("#formal").prop("checked")) {
let prompttone = "formal";
} else if ($("#casual").prop("checked")) {
let prompttone = "casual";
} else if ($("#neutral").prop("checked")) {
let prompttone = "neutral";
}
// Modify prompt text based on the selected mode
if (mode === "improve") {
prompttext = `Rewrite the following text in ${promptlength} using a ${prompttone} tone. ${prompttext}`;
} else if (mode === "summarise") {
prompttext = `Summarise the following text into the five dot points using ${promptlength}. ${prompttext}`;
} else if (mode === "coach") {
prompttext = `Five dot points with recommendations how to improve this text using ${promptlength}. ${prompttext}`;
}
// Define the conversation messages
const messages = [
{
role: "system",
content:
"You are a helpful assistant that writes documents in a corporate environment. Do not include the subject line. Use British English spelling."
},
{ role: "user", content: prompttext }
];
// Set up and send the API request
const xhr = new XMLHttpRequest();
xhr.open("POST", OPENAI_API_URL);
xhr.setRequestHeader("Content-Type", "application/json");
xhr.setRequestHeader("Authorization", "Bearer " + OPENAI_API_TOKEN);
xhr.onload = function(e) {
const jsonResponse = JSON.parse(this.response);
let outputContent = jsonResponse.choices[0].message.content;
// Replace the selected text with the improved or replied text
if (mode === "improve") {
$(".loader").hide();
//console.log(outputContent);
replaceSelection(outputContent);
}
$(".loader").hide();
// Log the summarized content to the console
if (mode === "summarise" || mode === "coach") {
//console.log(outputContent);
outputContent = outputContent.replace(/\n/g, "<br><br>");
$(".loader").hide();
openmodal();
document.getElementById("modalText").innerHTML = outputContent;
}
};
const requestData = {
model: OPENAI_API_MODEL,
messages: messages
};
//Call the openai api
xhr.send(JSON.stringify(requestData));
}
function replaceSelection(text) {
// Replace selected text
Office.context.document.setSelectedDataAsync(text, function(asyncResult) {
if (asyncResult.status === Office.AsyncResultStatus.Succeeded) {
//console.log(`Replaced selected text with "${text}".`);
} else {
handleAsyncError(asyncResult.error, "Failed to replace selected text.");
}
});
}
// Function to handle asynchronous errors
function handleAsyncError(error, errorMessage) {
// Display error message)
openmodal();
document.getElementById("modalText").innerHTML = errorMessage;
}
function openmodal() {
var modal = document.getElementById("myModal");
modal.style.display = "block";
}
language: typescript
template:
content: "<section>\n\t<img class=\"banner\" src=\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAcQAAAFvCAYAAADUhLsyAAAAxHpUWHRSYXcgcHJvZmlsZSB0eXBlIGV4aWYAAHjabVBbDsMgDPvnFDsCxCENx6EvaTfY8RcakMpWS9guFmmScHzeZ3g1UOLAeVEpItHAhQtVMxod9eIU+eILG3eX5vsgZ7dkClN4oOKaxn1/MDRVc/lWSLcerHNQ2JX0pxC5oHXU/N4LlV4I5EHqBaqPFaXoch9hPeIM9RMasc5t/30vtr09239AdCAhGgPiDaAdBFQLyJhg6zDP5jPEmDFGsoU87WkgfAF9c1l/x03t4QAAAYRpQ0NQSUNDIHByb2ZpbGUAAHicfZE9SMNAHMVfU6UiFQcriHTIUJ0sgoo4lioWwUJpK7TqYHLpFzRpSFJcHAXXgoMfi1UHF2ddHVwFQfADxNXFSdFFSvxfUmgR48FxP97de9y9A4RmlalmTwxQNctIJ+JiLr8qBl4RxDD8mERYYqaezCxm4Tm+7uHj612UZ3mf+3MMKAWTAT6ROMZ0wyLeIJ7dtHTO+8QhVpYU4nPiCYMuSPzIddnlN84lhwWeGTKy6XniELFY6mK5i1nZUIlniCOKqlG+kHNZ4bzFWa3WWfue/IXBgraS4TrNMBJYQhIpiJBRRwVVWIjSqpFiIk37cQ//qONPkUsmVwWMHAuoQYXk+MH/4He3ZnF6yk0KxoHeF9v+GAMCu0CrYdvfx7bdOgH8z8CV1vHXmsDcJ+mNjhY5Aga3gYvrjibvAZc7wMiTLhmSI/lpCsUi8H5G35QHhm6B/jW3t/Y+Th+ALHW1fAMcHALjJcpe93h3X3dv/55p9/cD0LByzP9aV9MAAA12aVRYdFhNTDpjb20uYWRvYmUueG1wAAAAAAA8P3hwYWNrZXQgYmVnaW49Iu+7vyIgaWQ9Ilc1TTBNcENlaGlIenJlU3pOVGN6a2M5ZCI/Pgo8eDp4bXBtZXRhIHhtbG5zOng9ImFkb2JlOm5zOm1ldGEvIiB4OnhtcHRrPSJYTVAgQ29yZSA0LjQuMC1FeGl2MiI+CiA8cmRmOlJERiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPgogIDxyZGY6RGVzY3JpcHRpb24gcmRmOmFib3V0PSIiCiAgICB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIKICAgIHhtbG5zOnN0RXZ0PSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VFdmVudCMiCiAgICB4bWxuczpkYz0iaHR0cDovL3B1cmwub3JnL2RjL2VsZW1lbnRzLzEuMS8iCiAgICB4bWxuczpHSU1QPSJodHRwOi8vd3d3LmdpbXAub3JnL3htcC8iCiAgICB4bWxuczp0aWZmPSJodHRwOi8vbnMuYWRvYmUuY29tL3RpZmYvMS4wLyIKICAgIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyIKICAgeG1wTU06RG9jdW1lbnRJRD0iZ2ltcDpkb2NpZDpnaW1wOjg0YTdmYmFlLTEzY2MtNDBiZS04NjI1LTA0ZDNhMjVlZGMyOSIKICAgeG1wTU06SW5zdGFuY2VJRD0ieG1wLmlpZDo4MGYzZDZiOC0yNzIwLTQ1N2UtODUxNi00OGE4NmExMTBlZWIiCiAgIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDo3ODc0ZjcxYy1kZjlmLTQxZDctYjQwOC0wZTQ1NGUzNmUxYTciCiAgIGRjOkZvcm1hdD0iaW1hZ2UvcG5nIgogICBHSU1QOkFQST0iMi4wIgogICBHSU1QOlBsYXRmb3JtPSJXaW5kb3dzIgogICBHSU1QOlRpbWVTdGFtcD0iMTcwMzEzMTAwNzQxODA4OSIKICAgR0lNUDpWZXJzaW9uPSIyLjEwLjM2IgogICB0aWZmOk9yaWVudGF0aW9uPSIxIgogICB4bXA6Q3JlYXRvclRvb2w9IkdJTVAgMi4xMCIKICAgeG1wOk1ldGFkYXRhRGF0ZT0iMjAyMzoxMjoyMVQxNDo1Njo0MysxMTowMCIKICAgeG1wOk1vZGlmeURhdGU9IjIwMjM6MTI6MjFUMTQ6NTY6NDMrMTE6MDAiPgogICA8eG1wTU06SGlzdG9yeT4KICAgIDxyZGY6U2VxPgogICAgIDxyZGY6bGkKICAgICAgc3RFdnQ6YWN0aW9uPSJzYXZlZCIKICAgICAgc3RFdnQ6Y2hhbmdlZD0iLyIKICAgICAgc3RFdnQ6aW5zdGFuY2VJRD0ieG1wLmlpZDpmZDRmMzZmNi02NjlmLTRkZWYtOTIzMS0yODlkNTE0ZDMzN2QiCiAgICAgIHN0RXZ0OnNvZnR3YXJlQWdlbnQ9IkdpbXAgMi4xMCAoV2luZG93cykiCiAgICAgIHN0RXZ0OndoZW49IjIwMjMtMTItMjFUMTQ6NTY6NDciLz4KICAgIDwvcmRmOlNlcT4KICAgPC94bXBNTTpIaXN0b3J5PgogIDwvcmRmOkRlc2NyaXB0aW9uPgogPC9yZGY6UkRGPgo8L3g6eG1wbWV0YT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgIAo8P3hwYWNrZXQgZW5kPSJ3Ij8+envxSwAAAAZiS0dEAP8A/wD/oL2nkwAAAAlwSFlzAAALEwAACxMBAJqcGAAAAAd0SU1FB+cMFQM4L9uq9M0AACAASURBVHja7d13dBT1/j7wZ3ez2Ww6aaQRCKFXaQJSpYl0EKWKIghSBKVXASFCAEG6dEXpXQEpIk1EITTpoYRU0rNpm+37+8Of9/r1KrBhdjO7+7zOueeeey47+cx7PjPPzO7MeyRevfqYQURE5OSkLAEREREDkYiIiIFIRETEQCQiImIgEhERMRCJiIgYiERERAxEIiIiBiIREREDkYiIiIFIRETEQCQiImIgEhERMRCJiIgYiERERAxEIiIiBiIREREDkYiIiIFIRETEQCQiImIgEhERMRCJiIgYiERERAxEIiIiBiIREREDkYiIiIFIRETEQCQiImIgEhERMRCJiIgYiERERAxEIiIiBiIREREDkYiIiIFIRETEQCQiImIgEhERMRCJiIgYiERERAxEIiIiBiIREREDkYiIqFS5OPoKHvn0EzSvWcMpN65aq0VBcTGK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MdwwQoTDkk+REx4O/46vO8X6alJSkD5uFDc8PfuEnCWgv3MfNg7hk6fCo0pVUVxFuJevgNCRo+EzezE3jkByxg1D7s+Of6elNiMdqWNGwJT0kBudGIhUgqszuTi/OJC48AsNIWUN64/cs2cc98owNRUpH42G8c5VbmxiIBLRM0Lxg4HI/O4gzCaTQ61X0cMHSBnyNozXfuVGJgYiET0f1ZTReLJyOQxqtd2vi9lsRu7p00jt3ZnvOSQGIhGV4Irqy8+RNHY01I8e2e066Avy8WTVCmSNfLtEzQuIGIhEBAAwnD+BlC6tkLFrp6AvFrb6VaHJhLzLsUgc2AdFqxdxQxIDkYiEkTd7AhIG9kHuz+dgMhhEPVb1o4dImjkNGW/3hOn+TW48eiG8bY+I/ofxzlVkDesPVcMW8Bk8FN6Nm8DF3V0UYzMZjVDfvYvcfXug2b6BG4sYiERkfYbYc8iOPYecwDB4vvM+PJs1h3tUlE26Fv2dJi0NhZdjUbB7BwwXz3DjEAORiGxBAkj+/3/DDHNWKgo+/xQFi02QlouCssebcK9XH8rISMj9A6wSkHqVCprkZBTfvomi40dh+OUkNwtZd9Z79epjduQV3B5/DVU0RdzSRNY6iPgHQ9G+M1yjKkEeHAx5YCBkXt6QubtD6q6EVO4KiUwGiUwG4I+bYMxGI8wGA0yaYhjVxTAWFsKQkw19ejp0iYnQ/nJWlG89oX/WoHozXiESEZmz06DZsREaloLsHO8yJSIiYiASERExEImIiBiIREREDEQiIiIGIhEREQORiIiIgUhERMRAJCIiYiASERE9ncO3bvsktDLcTCZuaSIicu5AvK/w4FYmIqJn4lemREREDEQiIiIGIhEREQORiIiIgUhERMRAJCIiYiASERExEImIiBiIREREDEQiIiIGIhEREQORiIiIgUhERMRAJCIiYiASERExEImIiBiIREREDEQiIiIGIhEREQORiIiIgUhERMRAJCIiYiASERExEImIiBiIREREDEQiIiIGIhEREQORiIiIgUhERMRAJCIiYiASERExEImIiBiIREREDEQiIiIGIhEREQORiIiIgUhERMRAJCIiYiASERExEImIiBiIREREDEQiIiIGIhEREQORiIiIgUhERMRAJCIiYiASERExEImIiBiIREREDEQiIiIGIhEREQORiIiIgUhERMRAJCIiYiASERExEImIiBiIREREDEQiIiIGIhEREQORiIjIHv0/crGuoKqMDTkAAAAASUVORK5CYII=\">\n</section>\n\t<div class=\"center\">\n\t\t<div class=\"loader\"></div>\n\t\t<section class=\"samples ms-font-m\">\n\t\t\t<p class=\"ms-font-m\">\n\t\t\t\t<h1>Bunpilot uses generative AI to help you write documents.</H1>\n\t\t\t</p>\n\t\t\t<p>Highlight text then click the improve button to improve grammar and wording.</p>\n\t\t\t<button id=\"btnimprove\" class=\"ms-Button\">\n\t\t\t<span class=\"ms-Button-label\">Improve</span>\n\t\t\t</button>\n\t\t\t<p>Click coach to generate coaching recommendations about your document.</p>\n\t\t\t<button id=\"btncoach\" class=\"ms-Button\">\n\t\t\t\t\t<span class=\"ms-Button-label\">Coach</span>\n\t\t\t</button>\n\t\t\t<p>Click summarise to view a summary of long documents.</p>\n\t\t\t<button id=\"btnsummarise\" class=\"ms-Button\">\n\t\t\t\t\t\t\t<span class=\"ms-Button-label\">Summarise</span>\n\t\t\t</button>\n\t\t\t<p>Select response tone.</p>\n\t\t\t<input type=\"radio\" id=\"neutral\" name=\"prompttone\" checked/>\n\t\t\t<label>Neutral</label>\n\t\t\t<input type=\"radio\" id=\"direct\" name=\"prompttone\"/>\n\t\t\t<label>Direct</label>\n\t\t\t<input type=\"radio\" id=\"formal\" name=\"prompttone\"/>\n\t\t\t<label>Formal</label>\n\t\t\t<input type=\"radio\" id=\"casual\" name=\"prompttone\"/>\n\t\t\t<label>Casual</label>\n\t\t\t<p>Select response length.</p>\n\t\t\t<input type=\"radio\" id=\"short\" name=\"promptlength\" checked/>\n\t\t\t<label>Short</label>\n\t\t\t<input type=\"radio\" id=\"medium\" name=\"promptlength\"/>\n\t\t\t<label>Medium</label>\n\t\t\t<input type=\"radio\" id=\"long\" name=\"promptlength\"/>\n\t\t\t<label>Long</label>\n\t\t</section>\n\n\t\t<div id=\"myModal\" class=\"modal\">\n\t\t\t<div class=\"modal-content\">\n\t\t\t\t<span class=\"close\">&times;</span>\n\t\t\t\t<p id=\"modalText\"></p>\n\t\t\t</div>\n\t\t</div>\n\t</div>"
language: html
style:
content: |+
section.samples {
margin-top: 20px;
margin-left: 10px;
margin-right: 10px;
}
section.samples .ms-Button, section.setup .ms-Button {
display: block;
margin-bottom: 5px;
margin-left: auto;
margin-right: auto;
min-width: 80px;
max-width: 200px;
border-radius:10px;
width: 90%;
}
body {
background-color: #0E5358;
background-repeat: no-repeat;
margin-left: auto;
margin-right: auto;
}
.center {
display: block;
margin-left: auto;
margin-right: auto;
width: 90%;
color: white;
}
.banner {
display: block;
margin-left: auto;
margin-right: auto;
width: 250px;
}
/* The Modal (background) */
.modal {
display: none; /* Hidden by default */
position: fixed; /* Stay in place */
z-index: 1; /* Sit on top */
left: 0;
top: 0;
width: 100%; /* Full width */
height: 100%; /* Full height */
overflow: auto; /* Enable scroll if needed */
background-color: rgb(0,0,0); /* Fallback color */
background-color: rgba(0,0,0,0.4); /* Black w/ opacity */
}
.modal-content {
background-color: whitesmoke;
color: black;
margin: 15% auto;
padding: 20px;
border: 1px solid #888;
width: 80%;
text-align: left;
font-family: "Segoe UI", Tahoma, Geneva, Verdana, sans-serif;
}
/* The Close Button */
.close {
color: #aaa;
float: right;
font-size: 28px;
font-weight: bold;
}
.close:hover,
.close:focus {
color: black;
text-decoration: none;
cursor: pointer;
}
.loader {
display: none;
position: absolute;
left: 45%;
top: 183px;
transform: translate(-50%, -50%);
z-index: 1;
width: 20px;
height: 20px;
border: 16px solid #f3f3f3;
border-radius: 50%;
border-top: 16px solid #3498db;
-webkit-animation: spin 2s linear infinite;
animation: spin 2s linear infinite;
}
@keyframes spin {
0% { transform: rotate(0deg); }
100% { transform: rotate(360deg); }
}
language: css
libraries: |
https://appsforoffice.microsoft.com/lib/1/hosted/office.js
@types/office-js
office-ui-fabric-js@1.4.0/dist/css/fabric.min.css
office-ui-fabric-js@1.4.0/dist/css/fabric.components.min.css
core-js@2.4.1/client/core.min.js
@types/core-js
jquery@3.1.1
@types/jquery@3.3.1
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment