issue-pane 3.0.1-e86c8e91 → 3.0.1-eb7e54ed
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/issue-pane.js +2522 -0
- package/lib/issue-pane.js.map +1 -0
- package/lib/issue-pane.min.js +2 -0
- package/lib/issue-pane.min.js.map +1 -0
- package/lib/styles/board.css +42 -0
- package/lib/styles/csvButton.css +0 -0
- package/lib/styles/issue.css +148 -0
- package/lib/styles/issuePane.css +65 -0
- package/lib/styles/newIssue.css +13 -0
- package/lib/styles/newTracker.css +3 -0
- package/package.json +6 -8
- package/dist/board.js +0 -1
- package/dist/csvButton.js +0 -1
- package/dist/issue.js +0 -1
- package/dist/issuePane.js +0 -1
- package/dist/newIssue.js +0 -1
- package/dist/newTracker.js +0 -1
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
!function(e,n){"object"==typeof exports&&"object"==typeof module?module.exports=n(require("UI"),require("SolidLogic"),require("$rdf")):"function"==typeof define&&define.amd?define(["UI","SolidLogic","$rdf"],n):"object"==typeof exports?exports.IssuePane=n(require("UI"),require("SolidLogic"),require("$rdf")):e.IssuePane=n(e.UI,e.SolidLogic,e.$rdf)}(this,(e,n,t)=>(()=>{"use strict";var s={691(e,n,t){t.d(n,{A:()=>o});var s=t(354),r=t.n(s),a=t(314),i=t.n(a)()(r());i.push([e.id,".trackerBoard {\n width: fit-content;\n border-collapse: collapse;\n margin: 1em;\n}\n\n.trackerBoardTable {\n width: fit-content;\n border-collapse: collapse;\n}\n\n.trackerBoardHeader {\n margin: var(--spacing-sm);\n padding: var(--spacing-sm) 1em;\n font-weight: bold;\n font-size: 120%;\n}\n\n.trackerBoardColumn {\n border: 0.01em solid white;\n padding: 0.1em;\n /* display: flex; flex-direction: column; align-items: center; */\n} \n\n.trackerBoardHeaderCell {\n margin: var(--spacing-sm);\n padding: var(--spacing-sm) var(--spacing-md);\n font-weight: bold;\n font-size: 120%;\n}\n\n.trackerBoardCard {\n width: 100%;\n border: 0.01em solid grey;\n border-radius: var(--border-radius-base);\n padding: var(--spacing-sm);\n margin: var(--spacing-sm) 0;\n}\n\n.trackerBoardCardTable {\n margin: var(--spacing-md);\n} \n","",{version:3,sources:["webpack://./src/styles/board.css"],names:[],mappings:"AAAA;EACE,kBAAkB;EAClB,yBAAyB;EACzB,WAAW;AACb;;AAEA;EACE,kBAAkB;EAClB,yBAAyB;AAC3B;;AAEA;EACE,yBAAyB;EACzB,8BAA8B;EAC9B,iBAAiB;EACjB,eAAe;AACjB;;AAEA;EACE,0BAA0B;EAC1B,cAAc;EACd,gEAAgE;AAClE;;AAEA;EACE,yBAAyB;EACzB,4CAA4C;EAC5C,iBAAiB;EACjB,eAAe;AACjB;;AAEA;EACE,WAAW;EACX,yBAAyB;EACzB,wCAAwC;EACxC,0BAA0B;EAC1B,2BAA2B;AAC7B;;AAEA;EACE,yBAAyB;AAC3B",sourcesContent:[".trackerBoard {\n width: fit-content;\n border-collapse: collapse;\n margin: 1em;\n}\n\n.trackerBoardTable {\n width: fit-content;\n border-collapse: collapse;\n}\n\n.trackerBoardHeader {\n margin: var(--spacing-sm);\n padding: var(--spacing-sm) 1em;\n font-weight: bold;\n font-size: 120%;\n}\n\n.trackerBoardColumn {\n border: 0.01em solid white;\n padding: 0.1em;\n /* display: flex; flex-direction: column; align-items: center; */\n} \n\n.trackerBoardHeaderCell {\n margin: var(--spacing-sm);\n padding: var(--spacing-sm) var(--spacing-md);\n font-weight: bold;\n font-size: 120%;\n}\n\n.trackerBoardCard {\n width: 100%;\n border: 0.01em solid grey;\n border-radius: var(--border-radius-base);\n padding: var(--spacing-sm);\n margin: var(--spacing-sm) 0;\n}\n\n.trackerBoardCardTable {\n margin: var(--spacing-md);\n} \n"],sourceRoot:""}]);const o=i},472(e,n,t){t.d(n,{A:()=>o});var s=t(354),r=t.n(s),a=t(314),i=t.n(a)()(r());i.push([e.id,"","",{version:3,sources:[],names:[],mappings:"",sourceRoot:""}]);const o=i},993(e,n,t){t.d(n,{A:()=>o});var s=t(354),r=t.n(s),a=t(314),i=t.n(a)()(r());i.push([e.id,'.trackerBoardIssueCard {\n margin: var(--spacing-sm);\n max-width: 24em;\n padding: var(--spacing-sm);\n border: 0.05em solid grey;\n border-radius: var(--border-radius-base);\n}\n.trackerBoardIssueCardTable {\n width: 100%;\n}\n.trackerBoardIssueCardTable td {\n padding: 0.1em 0.7em 0.1em 0.1em;\n}\n.trackerBoardIssueCardTable img {\n width: 1.5em;\n height: 1.5em;\n border-radius: 50%;\n}\n\n.trackerBoardIssueCardTable {\n width: 100%;\n border-collapse: collapse;\n}\n\n.trackerOverlayCloseButton {\n background: none;\n border: none;\n cursor: pointer;\n position: absolute;\n top: 0.7em;\n right: 0.7em;\n margin: 0;\n}\n.trackerOverlay {\n position: fixed;\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n background: rgba(0, 0, 0, 0.5);\n display: flex;\n justify-content: center;\n align-items: center;\n z-index: 9999;\n}\n\n.trackerIssue {\n position: relative;\n background: white;\n padding: var(--spacing-md);\n border-radius: var(--border-radius-base);\n max-width: 80%;\n max-height: 80%;\n overflow: auto;\n}\n\n.trackerIssueIconButton {\n width: 1.5em;\n height: 1.5em;\n border-radius: 50%;\n}\n\n.trackerIssueSpacer {\n height: 1em;\n margin: 0.5em;\n}\n\n.trackerIssueForm {\n margin-top: var(--spacing-md);\n padding: var(--spacing-sm);\n border: 0.05em solid grey;\n border-radius: var(--border-radius-base);\n}\n.trackerIssueSubIssuePanel {\n margin: var(--spacing-md);\n padding: var(--spacing-md);\n border: 0.05em solid grey;\n border-radius: var(--border-radius-base);\n}\n\n.trackerIssueSubIssuePanelSupersList {\n display: flex;\n flex-wrap: wrap;\n gap: var(--spacing-sm);\n}\n\n.trackerIssueSubIssuePanelSubsList {\n display: flex;\n flex-wrap: wrap;\n gap: var(--spacing-sm);\n flex-direction: row-reverse; /* Not sure if it should be row or column */\n}\n.trackerIssueSubIssuePanelNewSubButton {\n margin: var(--spacing-sm) var(--spacing-md);\n padding: var(--spacing-sm);\n border: 0.05em solid grey;\n border-radius: var(--border-radius-base);\n background-color: #f0f0f0;\n cursor: pointer;\n float: right;\n}\n\n.trackerIssueTrackerLink {\n float: right;\n margin: var(--spacing-sm) var(--spacing-md);\n padding: var(--spacing-sm);\n}\n\n.trackerIssueDeleteButton {\n color: white;\n border: none;\n padding: var(--spacing-sm);\n border-radius: var(--border-radius-base);\n cursor: pointer;\n float: right; /* this is the only one from the code */\n}\n\n/* below styles the remove task popup */\n.trackerIssue > div[style*="position: relative"] {\n z-index: 2000;\n}\n\n.trackerIssue > div[style*="position: relative"] > div[style*="position: absolute"] {\n top: -1em !important;\n left: 50% !important;\n transform: translate(-55%, -3em);\n z-index: 2001;\n}\n\n.trackerIssueRefreshButton {\n clear: both;\n position: relative;\n z-index: 1;\n}\n\n/* below not from code from ai */\n.trackerIssueMessageArea {\n border: 0.05em solid grey;\n border-radius: var(--border-radius-base);\n padding: var(--spacing-md);\n}\n\n.trackerIssueMessageAreaError {\n color: red;\n font-weight: bold;\n}\n/* ends here for ai generated */\n\n',"",{version:3,sources:["webpack://./src/styles/issue.css"],names:[],mappings:"AAAA;EACE,yBAAyB;EACzB,eAAe;EACf,0BAA0B;EAC1B,yBAAyB;EACzB,wCAAwC;AAC1C;AACA;EACE,WAAW;AACb;AACA;EACE,gCAAgC;AAClC;AACA;EACE,YAAY;EACZ,aAAa;EACb,kBAAkB;AACpB;;AAEA;EACE,WAAW;EACX,yBAAyB;AAC3B;;AAEA;EACE,gBAAgB;EAChB,YAAY;EACZ,eAAe;EACf,kBAAkB;EAClB,UAAU;EACV,YAAY;EACZ,SAAS;AACX;AACA;EACE,eAAe;EACf,MAAM;EACN,OAAO;EACP,WAAW;EACX,YAAY;EACZ,8BAA8B;EAC9B,aAAa;EACb,uBAAuB;EACvB,mBAAmB;EACnB,aAAa;AACf;;AAEA;EACE,kBAAkB;EAClB,iBAAiB;EACjB,0BAA0B;EAC1B,wCAAwC;EACxC,cAAc;EACd,eAAe;EACf,cAAc;AAChB;;AAEA;EACE,YAAY;EACZ,aAAa;EACb,kBAAkB;AACpB;;AAEA;EACE,WAAW;EACX,aAAa;AACf;;AAEA;EACE,6BAA6B;EAC7B,0BAA0B;EAC1B,yBAAyB;EACzB,wCAAwC;AAC1C;AACA;EACE,yBAAyB;EACzB,0BAA0B;EAC1B,yBAAyB;EACzB,wCAAwC;AAC1C;;AAEA;EACE,aAAa;EACb,eAAe;EACf,sBAAsB;AACxB;;AAEA;EACE,aAAa;EACb,eAAe;EACf,sBAAsB;EACtB,4BAA4B,EAAE,2CAA2C;AAC3E;AACA;EACE,2CAA2C;EAC3C,0BAA0B;EAC1B,yBAAyB;EACzB,wCAAwC;EACxC,yBAAyB;EACzB,eAAe;EACf,YAAY;AACd;;AAEA;EACE,YAAY;EACZ,2CAA2C;EAC3C,0BAA0B;AAC5B;;AAEA;EACE,YAAY;EACZ,YAAY;EACZ,0BAA0B;EAC1B,wCAAwC;EACxC,eAAe;EACf,YAAY,EAAE,uCAAuC;AACvD;;AAEA,uCAAuC;AACvC;EACE,aAAa;AACf;;AAEA;EACE,oBAAoB;EACpB,oBAAoB;EACpB,gCAAgC;EAChC,aAAa;AACf;;AAEA;EACE,WAAW;EACX,kBAAkB;EAClB,UAAU;AACZ;;AAEA,gCAAgC;AAChC;EACE,yBAAyB;EACzB,wCAAwC;EACxC,0BAA0B;AAC5B;;AAEA;EACE,UAAU;EACV,iBAAiB;AACnB;AACA,+BAA+B",sourcesContent:['.trackerBoardIssueCard {\n margin: var(--spacing-sm);\n max-width: 24em;\n padding: var(--spacing-sm);\n border: 0.05em solid grey;\n border-radius: var(--border-radius-base);\n}\n.trackerBoardIssueCardTable {\n width: 100%;\n}\n.trackerBoardIssueCardTable td {\n padding: 0.1em 0.7em 0.1em 0.1em;\n}\n.trackerBoardIssueCardTable img {\n width: 1.5em;\n height: 1.5em;\n border-radius: 50%;\n}\n\n.trackerBoardIssueCardTable {\n width: 100%;\n border-collapse: collapse;\n}\n\n.trackerOverlayCloseButton {\n background: none;\n border: none;\n cursor: pointer;\n position: absolute;\n top: 0.7em;\n right: 0.7em;\n margin: 0;\n}\n.trackerOverlay {\n position: fixed;\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n background: rgba(0, 0, 0, 0.5);\n display: flex;\n justify-content: center;\n align-items: center;\n z-index: 9999;\n}\n\n.trackerIssue {\n position: relative;\n background: white;\n padding: var(--spacing-md);\n border-radius: var(--border-radius-base);\n max-width: 80%;\n max-height: 80%;\n overflow: auto;\n}\n\n.trackerIssueIconButton {\n width: 1.5em;\n height: 1.5em;\n border-radius: 50%;\n}\n\n.trackerIssueSpacer {\n height: 1em;\n margin: 0.5em;\n}\n\n.trackerIssueForm {\n margin-top: var(--spacing-md);\n padding: var(--spacing-sm);\n border: 0.05em solid grey;\n border-radius: var(--border-radius-base);\n}\n.trackerIssueSubIssuePanel {\n margin: var(--spacing-md);\n padding: var(--spacing-md);\n border: 0.05em solid grey;\n border-radius: var(--border-radius-base);\n}\n\n.trackerIssueSubIssuePanelSupersList {\n display: flex;\n flex-wrap: wrap;\n gap: var(--spacing-sm);\n}\n\n.trackerIssueSubIssuePanelSubsList {\n display: flex;\n flex-wrap: wrap;\n gap: var(--spacing-sm);\n flex-direction: row-reverse; /* Not sure if it should be row or column */\n}\n.trackerIssueSubIssuePanelNewSubButton {\n margin: var(--spacing-sm) var(--spacing-md);\n padding: var(--spacing-sm);\n border: 0.05em solid grey;\n border-radius: var(--border-radius-base);\n background-color: #f0f0f0;\n cursor: pointer;\n float: right;\n}\n\n.trackerIssueTrackerLink {\n float: right;\n margin: var(--spacing-sm) var(--spacing-md);\n padding: var(--spacing-sm);\n}\n\n.trackerIssueDeleteButton {\n color: white;\n border: none;\n padding: var(--spacing-sm);\n border-radius: var(--border-radius-base);\n cursor: pointer;\n float: right; /* this is the only one from the code */\n}\n\n/* below styles the remove task popup */\n.trackerIssue > div[style*="position: relative"] {\n z-index: 2000;\n}\n\n.trackerIssue > div[style*="position: relative"] > div[style*="position: absolute"] {\n top: -1em !important;\n left: 50% !important;\n transform: translate(-55%, -3em);\n z-index: 2001;\n}\n\n.trackerIssueRefreshButton {\n clear: both;\n position: relative;\n z-index: 1;\n}\n\n/* below not from code from ai */\n.trackerIssueMessageArea {\n border: 0.05em solid grey;\n border-radius: var(--border-radius-base);\n padding: var(--spacing-md);\n}\n\n.trackerIssueMessageAreaError {\n color: red;\n font-weight: bold;\n}\n/* ends here for ai generated */\n\n'],sourceRoot:""}]);const o=i},95(e,n,t){t.d(n,{A:()=>o});var s=t(354),r=t.n(s),a=t(314),i=t.n(a)()(r());i.push([e.id,".trackerIssuePaneTable {\n width: fit-content;\n border-collapse: collapse;\n}\n.trackerIssuePaneTable td {\n padding: 0.1em 0.7em 0.1em 0.1em;\n}\n.trackerIssuePaneTable img {\n width: 1.5em;\n height: 1.5em;\n border-radius: 50%;\n}\n\n.trackerIssuePaneNewIssueButtonContainer {\n display: flex;\n flex-direction: row;\n}\n\n.trackerIssuePaneNewIssueButton {\n display: inline-flex;\n background-color: #F0F0F0;\n color: #505050;\n flex-direction: row;\n align-items: center;\n justify-content: flex-start;\n border: 1px solid grey;\n border-radius: var(--border-radius-base);\n cursor: pointer;\n gap: var(--spacing-sm);\n white-space: nowrap;\n text-align: left;\n padding: var(--spacing-sm);\n font-size: 100%;\n margin: var(--spacing-sm);\n}\n\n.trackerIssuePaneNewIssueButton > .trackerIssuePaneNewIssueButtonImage {\n order: 1;\n display: inline-block;\n width: 1em;\n height: 1em;\n margin: 0.2em;\n vertical-align: middle;\n}\n\n.trackerIssuePaneNewIssueButton > .trackerIssuePaneNewIssueButtonText {\n order: 2;\n display: inline-block;\n margin-left: 0;\n vertical-align: middle;\n}\n\n.trackerIssuePaneOverflow {\n position: fixed;\n z-index: 100;\n top: 1.51em;\n right: 2em;\n left: 2em;\n bottom: 1.5em;\n border: 0.1em grey solid;\n overflow: scroll;\n}\n.trackerIssuePaneLoginButton {\n margin: var(--spacing-sm) var(--spacing-md);\n}\n","",{version:3,sources:["webpack://./src/styles/issuePane.css"],names:[],mappings:"AAAA;EACE,kBAAkB;EAClB,yBAAyB;AAC3B;AACA;EACE,gCAAgC;AAClC;AACA;EACE,YAAY;EACZ,aAAa;EACb,kBAAkB;AACpB;;AAEA;EACE,aAAa;EACb,mBAAmB;AACrB;;AAEA;EACE,oBAAoB;EACpB,yBAAyB;EACzB,cAAc;EACd,mBAAmB;EACnB,mBAAmB;EACnB,2BAA2B;EAC3B,sBAAsB;EACtB,wCAAwC;EACxC,eAAe;EACf,sBAAsB;EACtB,mBAAmB;EACnB,gBAAgB;EAChB,0BAA0B;EAC1B,eAAe;EACf,yBAAyB;AAC3B;;AAEA;EACE,QAAQ;EACR,qBAAqB;EACrB,UAAU;EACV,WAAW;EACX,aAAa;EACb,sBAAsB;AACxB;;AAEA;EACE,QAAQ;EACR,qBAAqB;EACrB,cAAc;EACd,sBAAsB;AACxB;;AAEA;EACE,eAAe;EACf,YAAY;EACZ,WAAW;EACX,UAAU;EACV,SAAS;EACT,aAAa;EACb,wBAAwB;EACxB,gBAAgB;AAClB;AACA;EACE,2CAA2C;AAC7C",sourcesContent:[".trackerIssuePaneTable {\n width: fit-content;\n border-collapse: collapse;\n}\n.trackerIssuePaneTable td {\n padding: 0.1em 0.7em 0.1em 0.1em;\n}\n.trackerIssuePaneTable img {\n width: 1.5em;\n height: 1.5em;\n border-radius: 50%;\n}\n\n.trackerIssuePaneNewIssueButtonContainer {\n display: flex;\n flex-direction: row;\n}\n\n.trackerIssuePaneNewIssueButton {\n display: inline-flex;\n background-color: #F0F0F0;\n color: #505050;\n flex-direction: row;\n align-items: center;\n justify-content: flex-start;\n border: 1px solid grey;\n border-radius: var(--border-radius-base);\n cursor: pointer;\n gap: var(--spacing-sm);\n white-space: nowrap;\n text-align: left;\n padding: var(--spacing-sm);\n font-size: 100%;\n margin: var(--spacing-sm);\n}\n\n.trackerIssuePaneNewIssueButton > .trackerIssuePaneNewIssueButtonImage {\n order: 1;\n display: inline-block;\n width: 1em;\n height: 1em;\n margin: 0.2em;\n vertical-align: middle;\n}\n\n.trackerIssuePaneNewIssueButton > .trackerIssuePaneNewIssueButtonText {\n order: 2;\n display: inline-block;\n margin-left: 0;\n vertical-align: middle;\n}\n\n.trackerIssuePaneOverflow {\n position: fixed;\n z-index: 100;\n top: 1.51em;\n right: 2em;\n left: 2em;\n bottom: 1.5em;\n border: 0.1em grey solid;\n overflow: scroll;\n}\n.trackerIssuePaneLoginButton {\n margin: var(--spacing-sm) var(--spacing-md);\n}\n"],sourceRoot:""}]);const o=i},233(e,n,t){t.d(n,{A:()=>o});var s=t(354),r=t.n(s),a=t(314),i=t.n(a)()(r());i.push([e.id,".trackerNewIssueForm {\n display: flex;\n flex-direction: column;\n gap: var(--spacing-sm);\n padding: var(--spacing-md);\n}\n\n.trackerNewIssueTitleField {\n margin: var(--spacing-sm);\n font-size: 100%;\n padding: var(--spacing-sm);\n width: 100%;\n}\n","",{version:3,sources:["webpack://./src/styles/newIssue.css"],names:[],mappings:"AAAA;EACE,aAAa;EACb,sBAAsB;EACtB,sBAAsB;EACtB,0BAA0B;AAC5B;;AAEA;EACE,yBAAyB;EACzB,eAAe;EACf,0BAA0B;EAC1B,WAAW;AACb",sourcesContent:[".trackerNewIssueForm {\n display: flex;\n flex-direction: column;\n gap: var(--spacing-sm);\n padding: var(--spacing-md);\n}\n\n.trackerNewIssueTitleField {\n margin: var(--spacing-sm);\n font-size: 100%;\n padding: var(--spacing-sm);\n width: 100%;\n}\n"],sourceRoot:""}]);const o=i},788(e,n,t){t.d(n,{A:()=>o});var s=t(354),r=t.n(s),a=t(314),i=t.n(a)()(r());i.push([e.id,".trackerNewTrackerButton {\n margin: var(--spacing-sm) var(--spacing-md);\n}\n","",{version:3,sources:["webpack://./src/styles/newTracker.css"],names:[],mappings:"AAAA;EACE,2CAA2C;AAC7C",sourcesContent:[".trackerNewTrackerButton {\n margin: var(--spacing-sm) var(--spacing-md);\n}\n"],sourceRoot:""}]);const o=i},314(e){e.exports=function(e){var n=[];return n.toString=function(){return this.map(function(n){var t="",s=void 0!==n[5];return n[4]&&(t+="@supports (".concat(n[4],") {")),n[2]&&(t+="@media ".concat(n[2]," {")),s&&(t+="@layer".concat(n[5].length>0?" ".concat(n[5]):""," {")),t+=e(n),s&&(t+="}"),n[2]&&(t+="}"),n[4]&&(t+="}"),t}).join("")},n.i=function(e,t,s,r,a){"string"==typeof e&&(e=[[null,e,void 0]]);var i={};if(s)for(var o=0;o<this.length;o++){var l=this[o][0];null!=l&&(i[l]=!0)}for(var c=0;c<e.length;c++){var u=[].concat(e[c]);s&&i[u[0]]||(void 0!==a&&(void 0===u[5]||(u[1]="@layer".concat(u[5].length>0?" ".concat(u[5]):""," {").concat(u[1],"}")),u[5]=a),t&&(u[2]?(u[1]="@media ".concat(u[2]," {").concat(u[1],"}"),u[2]=t):u[2]=t),r&&(u[4]?(u[1]="@supports (".concat(u[4],") {").concat(u[1],"}"),u[4]=r):u[4]="".concat(r)),n.push(u))}},n}},354(e){e.exports=function(e){var n=e[1],t=e[3];if(!t)return n;if("function"==typeof btoa){var s=btoa(unescape(encodeURIComponent(JSON.stringify(t)))),r="sourceMappingURL=data:application/json;charset=utf-8;base64,".concat(s),a="/*# ".concat(r," */");return[n].concat([a]).join("\n")}return[n].join("\n")}},72(e){var n=[];function t(e){for(var t=-1,s=0;s<n.length;s++)if(n[s].identifier===e){t=s;break}return t}function s(e,s){for(var a={},i=[],o=0;o<e.length;o++){var l=e[o],c=s.base?l[0]+s.base:l[0],u=a[c]||0,d="".concat(c," ").concat(u);a[c]=u+1;var p=t(d),f={css:l[1],media:l[2],sourceMap:l[3],supports:l[4],layer:l[5]};if(-1!==p)n[p].references++,n[p].updater(f);else{var m=r(f,s);s.byIndex=o,n.splice(o,0,{identifier:d,updater:m,references:1})}i.push(d)}return i}function r(e,n){var t=n.domAPI(n);t.update(e);return function(n){if(n){if(n.css===e.css&&n.media===e.media&&n.sourceMap===e.sourceMap&&n.supports===e.supports&&n.layer===e.layer)return;t.update(e=n)}else t.remove()}}e.exports=function(e,r){var a=s(e=e||[],r=r||{});return function(e){e=e||[];for(var i=0;i<a.length;i++){var o=t(a[i]);n[o].references--}for(var l=s(e,r),c=0;c<a.length;c++){var u=t(a[c]);0===n[u].references&&(n[u].updater(),n.splice(u,1))}a=l}}},659(e){var n={};e.exports=function(e,t){var s=function(e){if(void 0===n[e]){var t=document.querySelector(e);if(window.HTMLIFrameElement&&t instanceof window.HTMLIFrameElement)try{t=t.contentDocument.head}catch(e){t=null}n[e]=t}return n[e]}(e);if(!s)throw new Error("Couldn't find a style target. This probably means that the value for the 'insert' parameter is invalid.");s.appendChild(t)}},540(e){e.exports=function(e){var n=document.createElement("style");return e.setAttributes(n,e.attributes),e.insert(n,e.options),n}},56(e,n,t){e.exports=function(e){var n=t.nc;n&&e.setAttribute("nonce",n)}},825(e){e.exports=function(e){if("undefined"==typeof document)return{update:function(){},remove:function(){}};var n=e.insertStyleElement(e);return{update:function(t){!function(e,n,t){var s="";t.supports&&(s+="@supports (".concat(t.supports,") {")),t.media&&(s+="@media ".concat(t.media," {"));var r=void 0!==t.layer;r&&(s+="@layer".concat(t.layer.length>0?" ".concat(t.layer):""," {")),s+=t.css,r&&(s+="}"),t.media&&(s+="}"),t.supports&&(s+="}");var a=t.sourceMap;a&&"undefined"!=typeof btoa&&(s+="\n/*# sourceMappingURL=data:application/json;base64,".concat(btoa(unescape(encodeURIComponent(JSON.stringify(a))))," */")),n.styleTagTransform(s,e,n.options)}(n,e,t)},remove:function(){!function(e){if(null===e.parentNode)return!1;e.parentNode.removeChild(e)}(n)}}}},113(e){e.exports=function(e,n){if(n.styleSheet)n.styleSheet.cssText=e;else{for(;n.firstChild;)n.removeChild(n.firstChild);n.appendChild(document.createTextNode(e))}}},197(e){e.exports='# Ontology for user interface hints and forms\n#\n# See also related: the Fresnel language\n#\n@prefix contact: <http://www.w3.org/2000/10/swap/pim/contact#>.\n@prefix dc: <http://purl.org/dc/elements/1.1/>.\n@prefix doc: <http://www.w3.org/2000/10/swap/pim/doc#>.\n@prefix foaf: <http://xmlns.com/foaf/0.1/>.\n@prefix owl: <http://www.w3.org/2002/07/owl#>.\n@prefix r: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>.\n@prefix s: <http://www.w3.org/2000/01/rdf-schema#>.\n@prefix tt: <http://dig.csail.mit.edu/2010/issues/track#>.\n@prefix ui: <http://www.w3.org/ns/ui#>.\n@prefix : <http://www.w3.org/ns/ui#>.\n@prefix wf: <http://www.w3.org/2005/01/wf/flow#>.\n@prefix xsd: <http://www.w3.org/2001/XMLSchema#>.\n\n@keywords is, of, a.\n\n<> dc:title "An ontology for User Interface description, Hints and Forms.";\n dc:description """The User Interface ontology allows the definition\n of forms for processing RDF model data, and include a bootstrap form for\n editing forms. It allows user interface hints such as background colors,\n can be associated with objects and classes.\n """;\n dc:created 2010-08-07;\n dc:license <https://creativecommons.org/publicdomain/zero/1.0/>;\n dc:modified """$Date: 2020/03/22 16:53:21 $""";\n dc:author <https://www.w3.org/People/Berners-Lee/card#i>.\n\nstyle a r:Property, owl:DatatypeProperty;\n s:label "style";\n prompt "CSS style";\n s:comment """Must be a valid CSS style string such as one could put in\n an HTML style attribute. Depending on the user interface system, this can\n by given to individuals, classes or properties. It is up to a user interface\n which wants to draw on them to pick how it uses styles from which parts\n of the data it has. For example, the style of a class may be picked\n to distinguish information about things in that class.""".\n\nbackgroundColor a r:Property, owl:DatatypeProperty;\n s:label "background color"@en;\n s:range ui:Color;\n s:comment """Must be a valid CSS color string such as one could put in\n an HTML style attribute. This should be in the #xxxxxx form,\n (with 6 digits of hex) so that it\n can work with Graphviz.""".\n\nbackgroundImage a r:Property, owl:DatatypeProperty;\n s:label "background image"@en;\n s:comment """URI or base64 representation of an image""".\n\ncolor a r:Property, owl:DatatypeProperty;\n s:label "color"@en;\n s:range ui:Color;\n s:comment """Must be a valid CSS color string such as one could put in\n an HTML style attribute. This should be in the #xxxxxx form,\n (with 6 digits of hex) so that it\n can work with Graphviz.""".\n\n\n\nsortPriority a r:Property, owl:DatatypeProperty;\n s:label "sort priority";\n s:range xsd:integer;\n s:comment """When individuals or classes must be sorted, then\n if they are given different values of sortPriority a user agent can\n use this as a hint to how to present information.""".\n\nsortBy a r:Property;\n s:label "sort by";\n s:domain s:Class;\n s:range r:Property;\n s:comment """A property which typically is used to sort\n members of a given class.""".\n\nseqeunce a r:Property;\n s:label "sequence number";\n s:range xsd:integer;\n s:comment """The sequence in which this item is arranged with repect to other parts.""".\n\ninitialProperties a r:Property;\n s:label "initial properties";\n s:domain s:Class;\n s:range r:List; # List of r:Property\n s:comment """A really simple way of enabling user interfaces to\n create new information about a class of things is to make a define of properties\n to be specified when a information about a new item\n ("New item" here means an item which the system\n does not have prvious information about yet,\n not an items which has just been created,\n like new friend as opposed to new baby)""";\n prompt "Properties to be specified for new ones".\n\ntableProperties a r:Property;\n s:domain s:Class;\n s:label "table properties";\n s:range r:List; # List of r:Property\n s:comment """This is a crude way of specifying a table-based\n view for objects of this class.""";\n prompt "Properties to be given in a default table view".\n\nprompt a r:Property;\n s:label "user prompt";\n s:comment """A string for the UI to use if the user needs a longer\n prompts than just a field name, the rdfs:label. """;\n ui:prompt "A longer prompt for a user inputting this property".\n\n\n# A Taxonomy of Field types\n\nui:Form owl:disjointUnionOf ( ui:ValueField ui:Group ui:Choice ui:Classifier ui:Options ui:Multiple ui:Heading ui:Comment);\n s:comment """A form can be any type of single field, or typically a Group of several fields,\n including interspersed headings and comments. """.\nui:Single owl:disjointUnionOf ( ui:ValueField ui:Group ui:Choice ui:Classifier ui:Options ui:Heading ui:Comment).\nui:ValueField owl:disjointUnionOf ( ui:TextField ui:NumericField ui:ColorField ui:DateField ui:DateTimeField ui:PhoneField ui:EmailField).\nui:NumericField owl:disjointUnionOf (ui:BooleanField ui:TriStateField ui:IntegerField ui:DecimalField ui:FloatField).\n# ui:Multiple owl:disjointUnionOf ( ui:ZeroOrMore ui:OneOrMore ).\nui:TextField owl:disjointUnionOf (ui:SingleLineTextField ui:MultiLineTextField).\n\nui:Form a s:Class; is s:subClassOf of ui:ValueField, ui:Group, ui:Choice, ui:Heading, ui:Comment, ui:Classifier, ui:Options, ui:Multiple.\nui:Single a s:Class; is s:subClassOf of ui:ValueField, ui:Group, ui:Choice, ui:Heading, ui:Comment, ui:Classifier, ui:Options.\nui:ValueField a s:Class; is s:subClassOf of ui:TextField, ui:NumericField, ui:ColorField, ui:DateField, ui:DateTimeField, ui:PhoneField, ui:EmailField.\nui:NumericField a s:Class; is s:subClassOf of ui:BooleanField, ui:TriStateField, ui:IntegerField, ui:DecimalField, ui:FloatField.\nui:TextField a s:Class; is s:subClassOf of ui:SingleLineTextField, ui:MultiLineTextField.\n\nui:Classifier a s:Class; s:label "classifier";\n s:comment """A classifier allows the user to select the type of an object.\n The possible types must be subclasses of some overall class, the "category".\n (Ideally, the superclass is also set up as the disjoint union of the subclasses,\n if they are disjoint.)\n\n The form normally stores the resulting classes using an rdf:type triple,\n but a different predicate can be used if required, so the classifier field\n needs is \'property\' defined too.\n\n If the subclass selected itself is has subclasses defined, the user can\n recursively select from them in turn, as many levels as needed.""".\n\nui:property a r:Property; s:domain ui:Form; s:range r:Property;\n s:label "property to be stored"@en;\n s:comment """Many fields prompt for information about a given property of the subject.\n When field is filled in, this gives which property is written into the data.""".\n\nui:category a r:Property; s:domain ui:Classifier; s:range s:Class;\n s:label "overall superclass"@en;\n s:comment """The superclass subclasses of which will be selected.""".\n\nui:dependingOn a r:Property; s:domain ui:Options; s:range r:Property;\n s:label "depending on"@en;\n s:comment """Many fields prompt for information about a given property of the subject""".\n\nui:for a r:Property; s:label "for"@en; s:comment "The value for which this case is selected.".\nui:use a r:Property; s:range ui:Form.\n\nui:part a r:Property; s:label "part"@en ; s:domain ui:Form; s:range ui:Form. # Used for Multiple field - the subform for each item\nui:parts a r:Property; s:label "parts"@en ; s:domain ui:Form; s:range r:Collection. # (of Forms) The ordered set of fields in a group\nui:ordered e r:Property; s:label "ordered"; s:range xsd:Boolean . # Could be useful for all kinds of things in future so not restricted to Multiple\n\nui:from a r:Property; s:domain ui:Choice; s:range r:Class;\n s:label "from"; ui:prompt "from what class".\n\nui:size a r:Property; s:domain ui:ValueField; s:range xsd:integer;\n s:label "size of field";\n ui:prompt "size of field in characters".\n\nui:maxLength a r:Property; s:domain ui:TextField; s:range xsd:integer;\n s:label "max length of value".\n\nui:minValue a r:Property; s:domain ui:ValueField; s:label "min". # @@ range?\nui:maxValue a r:Property; s:domain ui:ValueField; s:label "max".\n\n ui:creationForm a r:Property; s:domain s:Class; s:range ui:Form;\n s:label "creation form";\n s:comment """A form which may be used to collect information about a\n hitherto locally undocumented instance instance of this class.""".\n\n ui:annotationForm a r:Property; s:domain s:Class; s:range ui:Form;\n s:label "annotation form";\n s:comment """A form which may be used to add more infromation to an\ninstance of this class which we know something about. Anything from\nadding just add one more fact, to adding a whole lot of information about a specific\nfacet of the thing.\n""".\n\n\n#############################################\n#\n# Form for editing Forms\n#\n\nFormForm a ui:Form;\n dc:title "Form for editing Forms";\n is ui:creationForm of Form;\n a ui:Group; ui:parts (FF1 FF2 FF3 FieldList) .\n\n FF1 ui:sequence 1; a ui:Heading; ui:contents "Edit Form"@en .\n FF2 ui:sequence 2; a ui:SingleLineTextField; ui:property dc:title; ui:size 60 .\n FF3 ui:sequence 3; a ui:Comment; ui:contents\n """To add a field to the form, press the plus at the bottom,\n and then select what sort of field you want."""@en; ui:style "background-color: #ffe;" .\n\n FieldList ui:sequence 10; a ui:Multiple; ui:ordered true; ui:property ui:parts; ui:part FieldForm .\n\nFieldForm a ui:Group;\n dc:title "Form for selecting a type of field";\n ui:parts (\n\n [ ui:sequence 1; a ui:Classifier; ui:property r:type; ui:category ui:Form]\n\n [ a ui:Options; ui:sequence 2; ui:dependingOn r:type;\n\n ui:case [ ui:for ui:TextField; ui:use [a ui:Group; ui:parts (\n [ a ui:Choice; ui:canMintNew true; ui:property ui:property; ui:label "property"; ui:from owl:DatatypeProperty] # @@@ Needs inference on current web\n [ a ui:IntegerField; ui:property ui:size; ui:label "field size"; ui:min 1; ui:max 4096]\n [ a ui:IntegerField; ui:property ui:maxLength; ui:label "Max. length of string"; ui:min 1]\n )]];\n\n ui:case [ ui:for ui:IntegerField; ui:use [a ui:Group; ui:parts (\n [ ui:sequence 1; a ui:Choice; ui:canMintNew true; ui:property ui:property; ui:label "property"; ui:from owl:DatatypeProperty]\n [ ui:sequence 2; a ui:IntegerField; ui:property ui:min; ui:label "minimum value"]\n [ ui:sequence 3; a ui:IntegerField; ui:property ui:max; ui:label "maximum value"] ) ]];\n\n ui:case [ ui:for ui:DecimalField; ui:use [a ui:Group; ui:parts (\n [ ui:sequence 1; a ui:Choice; ui:canMintNew true; ui:property ui:property; ui:label "property"; ui:from owl:DatatypeProperty]\n [ ui:sequence 2; a ui:DecimalField; ui:property ui:min; ui:label "minimum value"]\n [ ui:sequence 3; a ui:DecimalField; ui:property ui:max; ui:label "maximum value"] ) ]];\n\n ui:case [ ui:for ui:FloatField; ui:use [a ui:Group; ui:parts (\n [ ui:sequence 1; a ui:Choice; ui:canMintNew true; ui:property ui:property; ui:label "property"; ui:from owl:DatatypeProperty]\n [ ui:sequence 2; a ui:FloatField; ui:property ui:min; ui:label "minimum value"]\n [ ui:sequence 3; a ui:FloatField; ui:property ui:max; ui:label "maximum value"] ) ]];\n\n ui:case [ ui:for ui:ColorField; ui:use [a ui:Group; ui:parts (\n [ ui:sequence 1; a ui:Choice; ui:canMintNew true; ui:property ui:property; ui:label "property"; ui:from owl:DatatypeProperty] )\n ]];\n\n ui:case [ ui:for ui:DateField; ui:use [a ui:Group; ui:parts (\n [ ui:sequence 1; a ui:Choice; ui:canMintNew true; ui:property ui:property; ui:label "property"; ui:from owl:DatatypeProperty]\n [ ui:sequence 2; a ui:DateField; ui:property ui:min; ui:label "min"]\n [ ui:sequence 3; a ui:DateField; ui:property ui:max ; ui:label "max"]\n ) ]];\n\n ui:case [ ui:for ui:DateTimeField; ui:use [a ui:Group; ui:parts (\n [ ui:sequence 1; a ui:Choice; ui:canMintNew true; ui:property ui:property; ui:label "property"; ui:from owl:DatatypeProperty]\n [ ui:sequence 2; a ui:DateTimeField; ui:property ui:min; ui:label "min"]\n [ ui:sequence 3; a ui:DateTimeField; ui:property ui:max ; ui:label "max"]\n ) ]];\n\n ui:case [ ui:for ui:EmailField; ui:use [a ui:Group; ui:parts (\n [ ui:sequence 1; a ui:Choice; ui:canMintNew true; ui:property ui:property; ui:label "property"; ui:from owl:ObjectProperty]\n ) ]];\n\n ui:case [ ui:for ui:PhoneField; ui:use [a ui:Group; ui:parts (\n [ ui:sequence 1; a ui:Choice; ui:canMintNew true; ui:property ui:property; ui:label "property"; ui:from owl:ObjectProperty]\n )]];\n\n ui:case [ ui:for ui:Group; ui:use FieldList];\n\n ui:case [ ui:for ui:Options; ui:use [a ui:Group; ui:parts (\n [ ui:sequence 1; a ui:Choice; ui:canMintNew true; ui:property ui:dependingOn; ui:label "depending on"; ui:from r:Property; ui:default r:type]\n [ ui:sequence 2; a ui:Multiple; ui:property ui:case; ui:part CaseForm]\n ) ]];\n\n ui:case [ ui:for ui:Choice; ui:use [a ui:Group; ui:parts (\n [ ui:sequence 1; a ui:Choice; ui:canMintNew true; ui:property ui:property; ui:label "property";\n ui:canMintNew true; ui:from owl:ObjectProperty]\n [ ui:sequence 2; a ui:Choice; ui:canMintNew true; ui:property ui:from; ui:label "destination class";\n ui:from s:Class; ui:canMintNew true; ]\n [ ui:sequence 3; a ui:BooleanField; ui:property ui:canMintNew; # No class form yet\n ui:label "user can add new"]\n [ ui:sequence 4; a ui:Choice; ui:canMintNew true; ui:property ui:use; ui:label "Nested Form (if any)";\n ui:from ui:Form; ui:optional true; ui:use FormForm] # @@ optional\n\n ) ]];\n\n ui:case [ ui:for ui:Classifier; ui:use [a ui:Group; ui:parts (\n [ ui:sequence 2; a ui:Comment; ui:contents """A classifier allows the user to which classes the item belongs to, given a common superclass of the allowed classes. Give the superclass here:""" ]\n\n [ ui:sequence 4; a ui:Choice; ui:canMintNew true; ui:property ui:category; ui:label "superclass"; ui:from s:Class]\n\n [ ui:sequence 6; a ui:Comment; ui:contents """(When the choice is made normally the item is given a rdf:type. Set this to rdf:type unless you want the form to set a different property.)""" ]\n\n [ ui:sequence 8; a ui:Choice; ui:canMintNew true; ui:property ui:property;\n ui:label "property"; ui:from owl:ObjectProperty; ui:default r:type] # @@ restriction\n\n ) ]];\n\n ui:case [ ui:for ui:Multiple; ui:use [a ui:Group; ui:parts (\n [ui:sequence 0; a ui:BooleanField; ui:property ui:ordered; ui:label "ordered"] # If this an ordered array or an unordered set?\n [ui:sequence 0; a ui:IntegerField; ui:property ui:min; ui:label "minimum number"] # If this an ordered array or an unordered set?\n [ui:sequence 1; a ui:Choice; ui:canMintNew true; ui:property ui:property; ui:label "property"; ui:from r:Property]\n [ui:sequence 2; a ui:Choice; ui:canMintNew true; ui:property ui:part; ui:from ui:Form; ui:use FieldForm] # Form for details of the field part of the multiple\n ) ]];\n\n ui:case [ ui:for ui:Heading; ui:use [a ui:SingleLineTextField; ui:property ui:contents]];\n\n ui:case [ ui:for ui:Comment; ui:use [a ui:MultiLineTextField; ui:property ui:contents]]\n ]).\n\n\nCaseForm a ui:Group;\n dc:title "Form for a conditional case in a form";\n ui:parts (\n [ ui:sequence 1; a ui:Choice; ui:canMintNew true; ui:property ui:for; ui:label "when it is"; ui:canMintNew true; ui:from s:Class]\n [ui:sequence 2; a ui:Choice; ui:canMintNew true; ui:property ui:use; ui:from ui:Form; ui:canMintNew true; ui:use FieldForm] ). # Form for details of the field part of the multiple\n\n# ENDS\n'},240(e){e.exports='# Issue tracking - Workflow application definition ontology\n#\n# Finite state automaton ontology\n#\n# See requirements for tracking tools http://www.w3.org/2005/01/06-tool-req.html\n#\n@keywords a, is, of.\n\n@prefix : <http://www.w3.org/2005/01/wf/flow#>.\n@prefix wf: <http://www.w3.org/2005/01/wf/flow#>.\n\n@prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .\n@prefix s: <http://www.w3.org/2000/01/rdf-schema#> .\n@prefix owl: <http://www.w3.org/2002/07/owl#>.\n@prefix xsd: <http://www.w3.org/2001/XMLSchema#>.\n\n@prefix doc: <http://www.w3.org/2000/10/swap/pim/doc#> .\n@prefix log: <http://www.w3.org/2000/10/swap/log#> .\n@prefix foaf: <http://xmlns.com/foaf/0.1/>.\n@prefix contact: <http://www.w3.org/2000/10/swap/pim/contact#> .\n@prefix doap: <http://usefulinc.com/ns/doap#>.\n@prefix dc: <http://purl.org/dc/elements/1.1/>.\n@prefix dct: <http://purl.org/dc/terms/>.\n@prefix ui: <http://www.w3.org/ns/ui#>.\n\n<> dc:title "Issue Tracking Ontology";\n\n dct:creator <http://www.w3.org/People/Berners-Lee/card#i>;\n\n s:comment """This ontology defines a very general class (Task)\n which can used for any kind of bug tracking, issue tracking,\n to-do-list management, action items, goal dependency, and so on.\n It captures the state of a task as a subclass, so that\n subsumption can be used.\n It captures a discussion thread about a task.\n It captures subtasks structure if necessary.\n A "Tracker" defines actual set of states, categories, etc.,\n which a task can be in. The data about the tracker\n guides the software managing the task.\n\n There is some workflow modeling finite state machine\n terms which are optional for more complex definition\n of the transitions allowed.\n """.\n\nTask a s:Class;\n s:label "task"@en; owl:disjointUnionOf (Open Closed);\n s:comment """Something to be done in a wide sense,\n an agenda item at a meeting is one example, but any\n issue, task, action item, goal, product, deliverable, milestone, can such a thing.\n The requirement for this framework was that it would allow\n one to customize ontologies for things such as agenda items,\n action items, working group issues with a spec, w3c Last Call issues,\n software bugs and administrative requests.\n In π-calculus, a process.\n Make your type of issue a subclass of Task.\n """.\n\nOpen a s:Class; s:subClassOf Task;\n s:label "open"@en, "ouvert"@fr;\n ui:backgroundColor "#d6f5d6"; # green like github for some reason\n s:comment """A task which needs attention. The very crude states of Open and Closed all\n interoperability between different systems if the states for a given\n application are made subclasses of either Open or Closed. This allows\n tasks from different systems to be mixed and treated together with\n limited but valuable functionality.\n """.\n\nClosed a s:Class; s:subClassOf Task;\n s:label "closed"@en, "fermé"@fr;\n ui:backgroundColor "#f5d6d6"; # pink\n s:comment """A task which does not need attention. It may be closed because\n has been abandoned or completed, for example.\n """.\n\n\n ActionItem a s:Class;\n s:subClassOf Task;\n s:label "action item"@en; owl:disjointUnionOf (Open Closed);\n s:comment """An obligation taken on by a person, typically at a meeting.\n """.\n\n\ndescription a rdf:Property;\n s:label "description";\n s:comment """The description, definition,\n or abstract. Information explaining what this is.\n Not arbitrary comment about anything, only about the subject.\n (Use this property for anything. There is no domain restriction.).""".\n\ndependent a rdf:Property;\n s:label "how"; owl:inverseOf [ s:label "why"];\n s:domain Task; s:range Task;\n s:comment """Another task upon which this depends, in the sense that\n this task cannot be completed without that task being done.\n You can\'t use this for dependencies on anything other than other tasks.\n (Note the US spelling of the URI. In the UK, a dependant is a something\n which is dependent on somehing else.)""".\n\nassignee a rdf:Property;\n s:label "assigned to"; owl:inverseOf [s:label "assignment"];\n# s:domain Task;\n s:range foaf:Agent;\n s:comment """The person or group to whom this has been assigned.""".\n\n# use dct:modified\n#modified a rdf:Property;\n# s:label "last changed".\n\nmodifiedBy a rdf:Property;\n s:range foaf:Agent;\n s:label "changed by".\n\n# use dct:created instead\n#created a rdf:Property;\n# s:range xsd:dateTime;\n#\n# Use foaf:maker instead\n#creator a rdf:Property;\n# s:range foaf:Agent;\n# s:label "changed by".\n\nsubscriber a rdf:Property;\n s:label "subscriber";\n s:range foaf:Agent.\n\n\n################## Products\n#\n#\n# History: The Tracker system included a cocept of a product,\n# such that an action could be associated with *either* an issue *or* a product.\n# Noah Mendelsohn for the TAG needed to be able make\n# and to give products: Goals, scuuess criteria,\n# deliverables with dates, schedules, TAG members assigned, related issues.\n#\n\n\nProduct a s:Class; s:subClassOf Task;\n s:label "product";\n s:comment """A product is a task which monitors something\n which must be produced.""".\n\ndeliverable a rdf:Property; s:subPropertyOf dependent;\n s:range Product;\n s:label "deliverable"@en;\n s:comment """Something which must be delivered to accomplish this""".\n\ngoalDescription a rdf:Property, owl:DatatypeProperty;\n s:domain Task; s:range xsd:string;\n s:label "goals";\n s:comment """A textual description of the goals of this product, etc.""".\n\nsuccessCriteria a rdf:Property, owl:DatatypeProperty;\n s:domain Task; s:range xsd:string;\n s:label "success criteria";\n s:comment """A textual description of the successs critera.\n How when we know this is done?""".\n\ndateDue a rdf:Property, owl:DatatypeProperty;\n s:domain Task; s:range xsd:date;\n s:label "due"@en;\n s:comment """The date this task is due.\n """.\n\n################## Attachments\n\nattachment a rdf:Property;\n s:label "attachment";\n s:comment """Something related is attached for information.""".\n\nscreenShot a rdf:Property; s:subPropertyOf attachment;\n s:label "screen shot"@en;\n s:comment """An image taken by capturing the state of a\n computer screen, for example to demonstrate a problem""".\n\ntestData a rdf:Property; s:subPropertyOf attachment;\n s:label "test data"@en;\n s:comment """A file which can be used as inpiut to a test\n or to demonstrate a problem. """.\n\n\nterminalOutput a rdf:Property; s:subPropertyOf attachment;\n s:label "terminal output"@en;\n s:comment """A file showing user interaction from a\n text terminal or console etc. """.\n\n\nmessage a rdf:Property; s:subPropertyOf attachment;\n s:label "message"@en;\n s:comment """A message about this. Attached for information.""".\n\n\nMessage a s:Class; s:label "message"@en.\nrecipent a rdf:Property; s:label "to"; s:domain Message; s:range foaf:Agent.\nsender a rdf:Property; s:label "from"; s:domain Message; s:range foaf:Agent.\n\n############################# A Tracker connects and manages issues\n\ntracker a rdf:Property;\n s:label "tracker";\n owl:inverseOf [ s:label "issue"];\n s:domain Task;\n s:range Tracker.\n\nTracker a s:Class;\n s:label "tracker";\n s:comment """A set of issues and\n the constraints on how they evolve.\n To use this ontology, craete a new tracker.\n Copy an existing one or make up your own.""".\n\nissueClass a rdf:Property;\n s:label "all issues must be in";\n s:domain Tracker;\n s:range s:Class, State;\n s:comment """The class of issues which are allowed in this tracker.\n This is essemtial to the operation of the tracker,\n as it defines which states an issue can be in.\n (The issueClass must be a disjointUnionOf the state classes)""".\n\nissueCategory a rdf:Property;\n s:label "issue category";\n s:domain Tracker;\n s:range s:Class;\n s:comment """Issues may be categorized according to the\n subclasses of this class""".\n\nstateStore a rdf:Property;\n s:label "state store";\n s:domain Tracker;\n s:range doc:Document;\n s:comment """A read-write document.\n The state of the issues is modified here.\n When you set up a trcaker, thgis must be set to point\n to a writeble data resource on the web.""".\n\ntransactionStore\n a rdf:Property;\n s:label "transaction store";\n s:domain Tracker;\n s:range doc:Document;\n s:comment """An appendable document. Transactions and messsages\n can be written into here""".\n\nasigneeClass\n a rdf:Property;\n s:label "assignees must be";\n s:domain Tracker;\n s:range s:Class; # Subclass of foaf:Agent\n s:comment """When an issue is assigned, the assignee must be from this class""".\n\ninitialState\n a rdf:Property;\n s:label "initial state"@en;\n s:label "état initial"@fr;\n s:domain Tracker;\n s:range State;\n s:comment """The initial state for a new issue""".\n\n# Use this to link a project to a tracker\ndoap:bug-database owl:inverseOf [ s:label "project"@en ].\n\n\n\n\n############################################################\n#\n# Finite state machines\n#\nChange a s:Class;\n s:label "change";\n s:comment """The universal class of things which\nchange the state of a task.\nIncluded now: Creation, Transition. (Maybe in the future\nmore π-calculus constructions such as splitting & merging tasks,\nand import/export of obligations to a foreign opaque system.)\n""".\n\nTransition a s:Class; s:subClassOf Change;\n s:label "transition";\n s:comment """A transition is a change of state of\na task. Typical properties include date and/or source\n(a document causing the transition), and a final state.""".\n\nCreation a s:Class; s:subClassOf Change;\n s:label "creation";\n s:comment """A creation is a change from existence\nto non-existence\na task. Typical properties include date and/or source\n(a document causing the transition), and a final state.""".\n\n\ndate s:range DateTime.\n\nfinal a rdf:Property;\n s:label "to";\n s:domain Transition;\n s:range State.\n\ntask a rdf:Property;\n s:range Task;\n s:label "task".\n\nrequires a rdf:Property;\n s:label "requires";\n s:domain Transition;\n s:range rdf:List; # Of properties for validation\n s:comment """To be a valid transition,\n a necessary (but not necessarily sufficuent) condition\n is that there be recorded these properties for the record""".\n\naffects a rdf:Property;\n s:label "affects";\n s:domain doc:Work;\n s:range Task.\n\n\n# { ?x a Transition; task ?t; source ?doc } => { ?doc affects ?t }.\n\n\ncreates a rdf:Property;\n s:label "creates";\n s:domain doc:Work;\n s:range Task.\n\n\nallowedTransitions a rdf:Property;\n s:domain State;\n s:range rdf:List; # @@@ of Action\n s:label "allowed transitions";\n s:comment """The state machine is defined\n by these lists of transition allowed for each issue.\n (An interesting option in the Web is to make an allowed transition\n to a state in soemone else\'s ontology, which in turn allows\n transitions into many ontologies. So a finite state maxchine\n may become very large. In practice this means that a task handed\n off to another organization may be processed on all kinds of ways.)""".\n\n# { ?x a TerminalState} => { ?x allowedTransitions () }.\n\nfinal a rdf:Property;\n s:label "to";\n s:range State.\n\nissue a rdf:Property;\n s:label "issue";\n s:comment\n """A transition changes the state of the given issue.""".\n\nsource a rdf:Property;\n s:label "source";\n s:comment """The source of a transition is\n the document by which it happened""";\n s:range doc:Work.\nTerminalState a s:Class;\n s:subClassOf State;\n s:label "terminal state";\n s:comment """A state from which there are no transitions.""".\n\nNonTerminalState a s:Class;\n s:label "non-terminal state";\n owl:disjointWith TerminalState;\n s:comment """A state from which there are transitions.""".\n\n######################################################\n\n#ends\n'},264(e){e.exports=t},663(e){e.exports=n},426(n){n.exports=e}},r={};function a(e){var n=r[e];if(void 0!==n)return n.exports;var t=r[e]={id:e,exports:{}};return s[e](t,t.exports,a),t.exports}a.n=e=>{var n=e&&e.__esModule?()=>e.default:()=>e;return a.d(n,{a:n}),n},a.d=(e,n)=>{for(var t in n)a.o(n,t)&&!a.o(e,t)&&Object.defineProperty(e,t,{enumerable:!0,get:n[t]})},a.o=(e,n)=>Object.prototype.hasOwnProperty.call(e,n),a.nc=void 0;var i={};a.d(i,{default:()=>X});var o=a(426),l=a(663),c=a(264),u=a(72),d=a.n(u),p=a(825),f=a.n(p),m=a(659),h=a.n(m),g=a(56),A=a.n(g),w=a(540),b=a.n(w),y=a(113),C=a.n(y),k=a(691),v={};v.styleTagTransform=C(),v.setAttributes=A(),v.insert=h().bind(null,"head"),v.domAPI=f(),v.insertStyleElement=b();d()(k.A,v);k.A&&k.A.locals&&k.A.locals;var B=a(233),E={};E.styleTagTransform=C(),E.setAttributes=A(),E.insert=h().bind(null,"head"),E.domAPI=f(),E.insertStyleElement=b();d()(B.A,E);B.A&&B.A.locals&&B.A.locals;function x(e,n,t,s,r,a){const i=e.createElement("div");i.classList.add("trackerNewIssueForm");const l=n.any(t,o.ns.wf("stateStore"));a=a||function(){};const u=function(){h.setAttribute("class","pendingedit"),h.disabled=!0;const e=[],a=n.anyValue(t,o.ns.wf("issueURITemplate")),u=a?n.sym(function(e){const n=new c.Literal(new Date),t=""+(new Date).getTime(),s=n.value.slice(0,4),r=n.value.slice(5,7),a=n.value.slice(8,10);return e.replace("{N}",t).replace("{YYYY}",s).replace("{MM}",r).replace("{DD}",a)}(c.uri.join(a,l.uri))):n.sym(l.uri+"#Iss"+(new Date).getTime()),d=u.doc(),p=n.literal(h.value);e.push(new c.Statement(u,o.ns.wf("tracker"),t,l)),e.push(new c.Statement(u,o.ns.dc("title"),p,l)),e.push(new c.Statement(u,o.ns.dct("created"),new Date,l));const f=s?n.each(s,o.ns.rdf("type"),null,s.doc()):n.each(t,o.ns.wf("initialState"));for(const n of f)e.push(new c.Statement(u,o.ns.rdf("type"),n,l));s&&e.push(new c.Statement(s,o.ns.wf("dependent"),u,l)),a&&(e.push(new c.Statement(u,o.ns.wf("tracker"),t,d)),e.push(new c.Statement(u,o.ns.rdfs("seeAlso"),l,d)));n.updater.update([],e,function(e,n,t){n?(i.parentNode.removeChild(i),r(u)):console.log("Error: can't save new issue:"+t)})},d=n.any(t,o.ns.wf("issueClass")),p=o.utils.label(d),f=i.appendChild(e.createElement("div"));f.classList.add("trackerNewIssueHeader");f.appendChild(e.createElement("h2")).textContent="Add new "+(s?"sub ":"")+p;const m=f.appendChild(e.createElement("button"));m.classList.add("trackerNewIssueCloseButton"),m.setAttribute("type","button"),m.setAttribute("aria-label","Close new issue form"),m.textContent="×",m.addEventListener("click",function(){i.parentNode&&i.parentNode.removeChild(i),a()},!1);i.appendChild(e.createElement("p")).textContent="Title of new "+p+":";const h=e.createElement("input");return h.classList.add("trackerNewIssueTitleField"),h.setAttribute("type","text"),h.setAttribute("maxLength","2048"),h.select(),h.addEventListener("keyup",function(e){13===e.keyCode&&u()},!1),i.appendChild(h),h.focus(),i}var T=a(993),F={};F.styleTagTransform=C(),F.setAttributes=A(),F.insert=h().bind(null,"head"),F.domAPI=f(),F.insertStyleElement=b();d()(T.A,F);T.A&&T.A.locals&&T.A.locals;const I=l.store,P=o.icons.iconBase+"noun_17020_gray-tick.svg",S=(o.icons.iconBase,o.icons.iconBase+"noun_17020.svg");function L(e){return function(e){return!!I.findTypeURIs(e)[o.ns.wf("Open").uri]}(e)?P:S}function O(e){const n=I.each(e,o.ns.rdf("type")).map(e=>I.any(e,o.ns.ui("backgroundColor"))).filter(e=>!!e);return n.length?n[0].value:null}function N(e,n){function t(){const n=O(e)||"white";a.style.backgroundColor=n,c.style.backgroundColor=n}const s=n.dom,r=!O(e),a=s.createElement("div");a.classList.add("trackerBoardIssueCard");const i=a.appendChild(s.createElement("table"));i.classList.add("trackerBoardIssueCardTable");i.appendChild(o.widgets.personTR(s,null,e,{draggable:!1})),i.subject=e;a.firstChild.firstChild.firstChild.firstChild.setAttribute("src",o.icons.iconBase+"noun_Danger_1259514.svg");const l=a.firstChild.firstChild.children[2];l.classList.add("trackerBoardIssueCardButtons");const c=o.widgets.button(s,o.icons.iconBase+"noun_253504.svg","edit",async t=>{M(e,n)});c.classList.add("trackerBoardIssueCardEditButton");const u=c.firstChild;if(u.classList.add("trackerBoardIssueCardEditButtonImage"),u.style.width=u.style.height="1.5em",l.appendChild(c),r){const t=o.widgets.deleteButtonWithCheck(s,l,"issue",async function(){try{await I.updater.update(I.connectedStatements(e))}catch(e){!function(e,n){console.warn(e),n.paneDiv.appendChild(o.widgets.errorMessageBlock(n.dom,e))}(`Unable to delete issue: ${e}`,n)}console.log("User deleted issue "+e),a.parentNode.removeChild(a),o.widgets.refreshTree(n.paneDiv)});l.appendChild(t)}return a.refresh=t,t(),a}function M(e,n){const t=n.overlay;t.classList.add("trackerOverlay"),t.innerHTML="";const s=U(e,n);t.appendChild(s);const r=s.appendChild(o.widgets.button(n.dom,o.icons.iconBase+"noun_1180156.svg","close",function(){t.innerHTML="",t.style.visibility="hidden"}));r.classList.add("trackerOverlayCloseButton"),delete r.style.backgroundColor,t.style.visibility="visible"}function D(e,n){const t=e.createElement("div");return t.classList.add("trackerIssueSpacer"),t.style.backgroundColor=n,t}function U(e,n){function t(e,n,t){false}function s(e,n){const t=u.createElement("pre");return t.setAttribute("style",n||"color: grey"),m.appendChild(t),t.appendChild(u.createTextNode(e)),t}function r(e){console.warn(e),m.appendChild(o.widgets.errorMessageBlock(u,e))}function a(e,n){e||r("Sorry, failed to save your change:\n"+n)}function i(e,n){const t=I.any(e,o.ns.ui(n));return!(!t||!t.value)}const u=n.dom,d=I.the(e,o.ns.wf("tracker"),null,e.doc());if(!d)throw new Error("No tracker");const p=I.any(d,o.ns.wf("stateStore")),f=e.doc(),m=u.createElement("div");m.classList.add("trackerIssue");l.authn.currentUser();const h=O(e)||"white";!function(){const n="padding: 0.5em 1.5em 1em 1.5em; border: 0.7em;border-color: "+(O(e)||"#eee")+"; ";m.setAttribute("style",n),m.style.backgroundColor="white"}(),l.authn.checkUser();const g=m.appendChild(o.widgets.button(u,L(e)));g.classList.add("trackerIssueIconButton"),o.widgets.makeDraggable(g,e);const A=I.any(d,o.ns.wf("issueClass"));if(!A)throw new Error("This tracker "+d+" has no issueClass");const w=o.widgets.makeSelectForCategory(u,I,e,A,p,function(e,n){e?(t(),o.widgets.refreshTree(m)):console.log("Failed to change state:\n"+n)});m.appendChild(w);const b=I.each(d,o.ns.wf("issueCategory"));for(const n of b)m.appendChild(o.widgets.makeSelectForCategory(u,I,e,n,p,function(e,n){e?(t(),o.widgets.refreshTree(m)):console.log("Failed to change category:\n"+n)}));const y=u.createElement("a");y.classList.add("trackerIssueTrackerLink"),y.setAttribute("href",d.uri),m.appendChild(y).textContent=o.utils.label(d),y.addEventListener("click",o.widgets.openHrefInOutlineMode,!0);const C=o.ns.wf("coreIsueForm");c.parse('\n @prefix : <http://www.w3.org/ns/ui#> .\n @prefix core: <http://www.w3.org/2005/01/wf/flow#>.\n @prefix dc: <http://purl.org/dc/elements/1.1/>.\n @prefix wf: <http://www.w3.org/2005/01/wf/flow#> .\n\n core:coreIsueForm a :Form;\n <http://purl.org/dc/elements/1.1/title> "Core issue data";\n :parts (\n core:titleField\n core:descriptionField ) .\n\n core:descriptionField a :MultiLineTextField;\n :label "Description";\n :property wf:description;\n :size "40" .\n\n core:titleField a :SingleLineTextField;\n :label "Title";\n :maxLength "128";\n :property dc:title; # @@ Should move to dct or schema\n :size "40" .\n\n wf:Task :creationForm core:coreIsueForm .\n',I,C.doc().uri,"text/turtle");const k=o.widgets.appendForm(u,null,{},e,C,p,a);k.classList.add("trackerIssueForm"),m.appendChild(k),k.style.backgroundColor=h;const v=I.statementsMatching(e,o.ns.wf("assignee"));if(v.length>1){s("Weird, was assigned to more than one person. Fixing ..");const e=v.slice(1);I.updater.update(e,[],function(e,n,t){n?s("Now fixed."):r("Fixed failed: "+t)})}function B(e){return o.widgets.personTR(u,o.ns.wf("dependent"),e,{link:!1})}function E(e,n){n=n||[];const t=I.any(null,o.ns.wf("dependent"),e,e.doc());return t?E(t,[t].concat(n)):n}if(async function(){const n=I.each(e,o.ns.wf("assigneeGroup"));await I.fetcher.load(n);const t=n.map(e=>I.each(e,o.ns.vcard("member"),null,e.doc())).flat(),s=I.any(null,o.ns.doap("bug-database"),d);s&&await I.fetcher.load(s);const r=s?I.each(s,o.ns.doap("developer")):[];return t.concat(r)}().then(n=>{if(n.length){n.forEach(function(e){I.fetcher.lookUpThing(e)});const s={nullLabel:"(unassigned)"};m.appendChild(o.widgets.makeSelectForOptions(u,I,e,o.ns.wf("assignee"),n,s,f,function(e,n){e?t():console.log("Failed to change assignee:\n"+n)}))}}),i(d,"allowSubIssues")){const n=m.appendChild(u.createElement("div"));n.classList.add("trackerIssueSubIssuePanel"),n.appendChild(u.createElement("h4")).textContent="Super Issues";const t=n.appendChild(u.createElement("div"));t.classList.add("trackerIssueSubIssuePanelSupersList"),t.refresh=function(){const n=E(e);o.utils.syncTableToArrayReOrdered(t,n,B)},t.refresh(),n.appendChild(u.createElement("h4")).textContent="Sub Issues";const s=n.appendChild(u.createElement("div"));s.classList.add("trackerIssueSubIssuePanelSubsList"),s.refresh=function(){const n=I.each(e,o.ns.wf("dependent"),null,e.doc());o.utils.syncTableToArrayReOrdered(s,n,B)},s.refresh();const r=u.createElement("button");r.classList.add("trackerIssueSubIssuePanelNewSubButton"),r.setAttribute("type","button"),n.appendChild(r);const a=o.utils.label(A);r.innerHTML="New sub "+a,r.addEventListener("click",function(t){n.insertBefore(x(u,I,d,e,s.refresh),r.nextSibling)},!1)}m.appendChild(u.createElement("br"));const T=I.any(d,o.ns.wf("extrasEntryForm"));T&&o.widgets.appendForm(u,m,{},e,T,p,a);const F=m.appendChild(D(u,h));F.classList.add("trackerIssueSpacer");let P;I.anyValue(d,o.ns.wf("issueURITemplate"))?P=e.doc():(P=I.any(d,o.ns.wf("messageStore")),P||(P=I.any(d,o.ns.wf("stateStore"))),I.sym(P.uri+"#Chat"+(new Date).getTime())),I.fetcher.nowOrWhenFetched(P,function(n,t,s){if(n){const n=(0,o.messageArea)(u,I,e,P);n.classList.add("trackerIssueMessageArea"),m.insertBefore(n,F),m.insertBefore(D(u,h),n)}else{const e=u.createElement("p");e.classList.add("trackerIssueMessageAreaError"),e.textContent=t,m.insertBefore(e,F)}});const S=m.appendChild(u.createElement("div"));S.classList.add("trackerIssueAttachmentHint"),S.innerHTML="<h4>Attachments</h4>\n <p>Drag files, emails,\n web pages onto the paper clip, or click the file upload button.</p>";const N=e.uri.endsWith("/index.ttl#this")?e.uri.slice(0,14)+"Files/":e.dir().uri+"Files/"+e.uri.split("#")[1]+"/";o.widgets.attachmentList(u,e,m,{doc:p,promptIcon:o.icons.iconBase+"noun_25830.svg",uploadFolder:I.sym(N),predicate:o.ns.wf("attachment")});o.widgets.deleteButtonWithCheck(u,m,"issue",async function(){try{await I.updater.update(I.connectedStatements(e))}catch(e){r(`Unable to delete issue: ${e}`)}r("DELETED OK"),m.style.backgroundColor="#eee",m.style.color="orange"}).classList.add("trackerIssueDeleteButton");const M=u.createElement("button");return M.classList.add("trackerIssueRefreshButton"),M.textContent="refresh messages",M.addEventListener("click",async function(e){try{await I.fetcher.load(P,{force:!0,clearPreviousData:!0})}catch(e){return void alert(e)}o.widgets.refreshTree(m)},!1),M.setAttribute("style",o.style.button),m.appendChild(M),m}var j=a(788),q={};q.styleTagTransform=C(),q.setAttributes=A(),q.insert=h().bind(null,"head"),q.domAPI=f(),q.insertStyleElement=b();d()(j.A,q);j.A&&j.A.locals&&j.A.locals;const z=o.ns,W=l.store.updater;function H(e,n){const t=o.login.newAppInstance(n.dom,{noun:"tracker"},function(t,s){function r(e){if(void 0!==e.elements)return e.elements.map(r);if(void 0===e.uri)return e;let n=e.uri;return n===u.uri?d:(n.slice(0,f.length)===f&&(n=s+n.slice(f.length)),l.sym(n))}const a="issuetracker.w3.org",i=o.ns.space,l=n.session.store;if(!s&&("/"!==(s=l.any(t,i("uriPrefix")).value).slice(-1)&&(c.log.error(a+": No / at end of uriPrefix "+s),s+="/"),s+=a+"/"+(new Date).getTime()+"/",!confirm("Make new tracker at "+s+"?")))return;const u=l.any(e,z.wf("stateStore")),d=l.sym(s+"store.ttl"),p=e.doc(),f=p.uri.slice(0,p.uri.lastIndexOf("/")+1),m=r(p),h=r(e),g=l.statementsMatching(void 0,void 0,void 0,p);for(let e=0;e<g.length;e++){const n=g[e];l.add(r(n.subject),r(n.predicate),r(n.object),m)}l.add(h,o.ns.space("inspiration"),e,u),l.add(h,o.ns.space("inspiration"),e,m),W.put(m,l.statementsMatching(void 0,void 0,void 0,m),"text/turtle",function(e,n,t){n?W.put(d,[],"text/turtle",function(e,n,t){n?console.info("Ok The tracker created OK at: "+h.uri+"\nMake a note of it, bookmark it. "):console.log("FAILED to set up new store at: "+d.uri+" : "+t)}):console.log("FAILED to save new tracker at: "+m.uri+" : "+t)})});return t.classList.add("trackerNewTrackerButton"),t}function V(e){const n=e.replaceAll("\n"," ");if(!n.includes(","))return n;const t='"'+n.replaceAll('"','""')+'"';console.log("Quoted: >>>"+t+"<<<");if(t.slice(1,-1).replaceAll('""',"").includes('"'))throw new Error("CSV inconsistecy");return t}function R(e,n){const t=e.any(n,o.ns.wf("stateStore")),s=e.each(null,o.ns.wf("tracker"),n,t);console.log(" CSV: Tasks:",s.length);const r=[{label:"Name",predicate:o.ns.dc("title")}],a=e.any(n,o.ns.wf("issueClass"));console.log(" CSV: States - main superclass:",a);const i={label:"State",category:a};console.log(" CSV: found column from state",i),r.push(i);const l=e.each(n,o.ns.wf("issueCategory"));console.log(" CSV: Categories : ",l),console.log(" CSV: Categories : length: ",l.length),console.log(" CSV: Categories : first: ",l[0]);const c=l;for(const e of c){const n={label:o.utils.label(e),category:e};console.log(" CSV: found column from classifications",n),r.push(n)}const u=e.any(n,o.ns.wf("extrasEntryForm"),null,null);if(console.log(" CSV: Form : ",u),u){const n=e.any(u,o.ns.ui("parts"),null,u.doc());console.log(" CSV: parts : ",n);const t=n.elements;console.log(" CSV: fields : ",t);for(const n of t){const t=e.any(n,o.ns.ui("property"));if(t){const e={label:o.utils.label(t),predicate:t};console.log(" CSV: found column from form",e),r.push(e)}}}r.push({label:"Description",predicate:o.ns.wf("description")}),console.log("Columns: ",r.length);const d=r.map(e=>e.label).join(",")+"\n";console.log("CSV: Header= ",d);return d+s.map(function(n){return r.map(t=>function(n,t){let s;if(t.predicate)return s=e.any(n,t.predicate),s?s.value:"--";if(!t.category)throw new Error("wot no pred or cat",t);{const r=e.each(n,o.ns.rdf("type"));for(const n of r)e.holds(n,o.ns.rdfs("subClassOf"),t.category)&&(s=n);if(!s)return"?"+o.utils.label(t.category)}return o.utils.label(s)}(n,t)).map(V).join(",")+"\n"}).join("")}var G=a(472),Y={};Y.styleTagTransform=C(),Y.setAttributes=A(),Y.insert=h().bind(null,"head"),Y.domAPI=f(),Y.insertStyleElement=b();d()(G.A,Y);G.A&&G.A.locals&&G.A.locals;var _=a(95),$={};$.styleTagTransform=C(),$.setAttributes=A(),$.insert=h().bind(null,"head"),$.domAPI=f(),$.insertStyleElement=b();d()(_.A,$);_.A&&_.A.locals&&_.A.locals;const Z=l.store,X={icon:o.icons.iconBase+"noun_122196.svg",name:"issue",audience:[],label:function(e,n){const t=Z.findTypeURIs(e);return t["http://www.w3.org/2005/01/wf/flow#Task"]||Z.holds(e,o.ns.wf("tracker"))?"issue":t["http://www.w3.org/2005/01/wf/flow#Tracker"]?"tracker":null},mintClass:o.ns.wf("Tracker"),mintNew:async function(e,n){const t=e.session.store;let s;n.newInstance?s=t.sym(n.newInstance.doc().uri+"_state.ttl"):(n.newInstance=t.sym(n.newBase+"index.ttl#this"),s=t.sym(n.newBase+"state.ttl"));const r=n.newInstance,a=r.doc(),i=l.authn.currentUser();i&&t.add(r,o.ns.dc("author"),i,a),t.add(r,o.ns.rdf("type"),o.ns.wf("Tracker"),a),t.add(r,o.ns.dc("created"),new Date,a),t.add(r,o.ns.wf("issueClass"),o.ns.wf("Task"),a),t.add(r,o.ns.wf("initialState"),o.ns.wf("Open"),a),t.add(r,o.ns.wf("stateStore"),s,a),t.add(r,o.ns.wf("assigneeClass"),o.ns.foaf("Person"),a),t.add(r,o.ns.wf("stateStore"),s,s);const c=t.statementsMatching(void 0,void 0,void 0,a).concat(t.statementsMatching(void 0,void 0,void 0,s));try{await async function(e,n){const s=e.concat(n).map(e=>e.why),r=Array.from(new Set(s)).map(s=>t.updater.update(e.filter(e=>e.why.sameTerm(s)),n.filter(e=>e.why.sameTerm(s))));return Promise.all(r)}([],c)}catch(n){return o.widgets.complain(e,"Error writing tracker configuration: "+n)}const u=e.dom;return n.div.appendChild(u.createElement("div")).innerHTML=`<h4>Success</h4>\n <p>Your <a href="${r.uri}">new tracker</a> has been made.\n Use the settings tab to configure it.\n </p>\n `,n},render:function(e,n){const t=n.dom,s=t.createElement("div");function r(e){console.warn(e),s.appendChild(o.widgets.errorMessageBlock(t,e))}function i(e,n){e||r(n)}function u(e,s){const a=Z.any(e,o.ns.wf("issueClass")),i=(s=s||a).sameTerm(a),u=Z.any(s,o.ns.owl("disjointUnionOf"));if(!u)return r(`Configuration error: state ${a} does not have substates`);let d=u.elements;i&&d.length>2&&(d=d.filter(e=>Z.holds(e,o.ns.rdfs("subClassOf"),o.ns.wf("Open"))||e.sameTerm(o.ns.wf("Open"))));const p={columnDropHandler:async function(e,t){const r=function(e,n){const t=I.the(e,o.ns.wf("tracker"),null,e.doc()),s=I.any(t,o.ns.wf("issueClass"));n=n||s;const r=I.each(e,o.ns.rdf("type")).filter(e=>I.holds(e,o.ns.rdfs("subClassOf"),n));if(1!==r.length)throw new Error("Issue must have one type as state: "+r.length);return r[0]}(e,s),a=Z.the(e,o.ns.wf("tracker"),null,e.doc()),i=Z.any(a,o.ns.wf("stateStore"));if(!t.sameTerm(r)){try{await Z.updater.update([c.st(e,o.ns.rdf("type"),r,i)],[c.st(e,o.ns.rdf("type"),t,i)])}catch(e){o.widgets.complain(n,"Unable to change issue state: "+e)}f.refresh()}},filter:i?null:function(e){return!!Z.findTypeURIs(e)[o.ns.wf("Open").uri]}};p.sortBy=o.ns.dct("created"),p.sortReverse=!0;const f=function(e,n,t,s){const r=e.createElement("div");r.classList.add("trackerBoard");const a=r.appendChild(e.createElement("table"));a.classList.add("trackerBoardTable");const i=a.appendChild(e.createElement("tr"));i.classList.add("trackerBoardHeader");const u=a.appendChild(e.createElement("tr"));function d(n,t){const s=e.createElement("div");s.classList.add("trackerBoardCard");const r=s.appendChild(e.createElement("table"));r.classList.add("trackerBoardCardTable");const a=l.store.each(n,o.ns.rdf("type")).map(e=>l.store.any(e,o.ns.ui("backgroundColor"))).filter(e=>e);r.appendChild(o.widgets.personTR(e,null,n)),r.subject=n;const i=a[0]||l.store.any(t,o.ns.ui("backgroundColor"));return s.style.backgroundColor=i?i.value:"#fff",s}function p(e,n,t,s){const r=e.map(e=>[l.store.any(e,n)||t,e]);return r.sort(),s&&r.reverse(),r.map(e=>e[1])}return u.classList.add("trackerBoardMainRow"),n.forEach(n=>{const t=i.appendChild(e.createElement("th"));t.classList.add("trackerBoardHeaderCell"),t.textContent=o.utils.label(n,!0),t.subject=n;const r=u.appendChild(e.createElement("td"));r.classList.add("trackerBoardColumn"),r.subject=n,s.columnDropHandler&&o.widgets.makeDropTarget(r,function(e){e.forEach(function(e){console.log("Dropped on column: "+e);const t=l.store.sym(e);s.columnDropHandler(t,n)})})}),r.refresh=function(){const e=new c.Literal(new Date),n=t||s.renderItem||d;function r(e){const t=n(e);return o.widgets.makeDraggable(t,e),t.subject=e,t}for(let n=u.firstChild;n;n=n.nextSibling){const t=n.subject;let a=l.store.each(null,o.ns.rdf("type"),t);const i=s.sortBy||o.ns.dct("created");s.filter&&(a=a.filter(s.filter));const c=p(a,i,e,!0);o.utils.syncTableToArrayReOrdered(n,c,r)}},r.refresh(),r}(t,d,function(e){return N(e,n)},p);return f.classList.add("trackerBoard"),f}function d(s){function r(){const e=new c.IndexedFormula;return u.pat.optional.push(e),e}const a=Z.any(e,o.ns.wf("issueClass")),i=Z.each(s,o.ns.wf("issueCategory")),l=["issue","state","created"],u=new c.Query(o.utils.label(e));for(let e=0;e<i.length;e++)l.push("_cat_"+e);const d={};l.forEach(function(e){u.vars.push(d[e]=c.variable(e))}),u.pat.add(d.issue,o.ns.wf("tracker"),s),u.pat.add(d.issue,o.ns.dct("created"),d.created),u.pat.add(d.issue,o.ns.rdf("type"),d.state),u.pat.add(d.state,o.ns.rdfs("subClassOf"),a),u.pat.optional=[];for(let e=0;e<i.length;e++){const n=r();n.add(d.issue,o.ns.rdf("type"),d["_cat_"+e]),n.add(d["_cat_"+e],o.ns.rdfs("subClassOf"),i[e])}const p=Z.any(s,o.ns.wf("propertyList"));if(p){const e=p.elements;for(let n=0;n<e.length;n++){const t=e[n];let s="_prop_"+n;t.uri.indexOf("#")>=0&&(s=t.uri.split("#")[1]);const a=r();u.vars.push(d[s]=c.variable(s)),a.add(d.issue,t,d[s])}}const f={};Z.each(void 0,o.ns.rdfs("subClassOf"),a).forEach(function(e){(Z.holds(e,o.ns.rdfs("subClassOf"),o.ns.wf("Open"))||e.sameTerm(o.ns.wf("Open")))&&(f[e.uri]=!0)});const m=(0,o.table)(t,{query:u,keyVariable:"?issue",sortBy:"?created",sortReverse:!0,hints:{"?issue":{linkFunction:function(e){M(c.sym(e),n)},label:"Title"},"?created":{cellFormat:"shortDate"},"?state":{initialSelection:f,label:"Status"}}}),h=Z.any(e,o.ns.wf("stateStore"));return m.appendChild(function(e,n){return o.widgets.button(t,o.icons.iconBase+"noun_479395.svg","refresh table",async t=>{try{await Z.fetcher.load(e,{force:!0,clearPreviousData:!0})}catch(e){return void alert(e)}o.widgets.refreshTree(n)})}(h,m)),m.classList.add("trackerBoardTable"),m}function p(e){const s=t.createElement("div"),r=l.authn.currentUser(),a={div:s,dom:t,noun:"tracker",statusArea:s,me:r,refreshTarget:e},i=[n.session.paneRegistry.byName("issue")];return o.create.newThingUI(a,n,i),s.classList.add("trackerCreationControlContainer"),s}function f(e){const n=t.createElement("div");n.appendChild(function(e,n){const t=e.createElement("div"),s=o.widgets.button(e,o.icons.iconBase+"noun_Document_998605.svg","Copy as CSV",async e=>{const t=s.parentNode.parentNode;console.log("button gparent div",t),t.addEventListener("copy",e=>{const t=R(l.store,n);e.clipboardData.setData("text/plain",t),e.clipboardData.setData("text/csv",t),alert("Copy data: "+t),e.preventDefault()})});return t.appendChild(s),t}(t,e));const s=Z.any(e,o.ns.wf("issueClass")),r=[g,s].concat(Z.each(e,o.ns.wf("issueCategory"))),a=n.appendChild(t.createElement("div"));o.widgets.renderNameValuePair(t,Z,a,null,"Default view").appendChild(o.widgets.makeSelectForOptions(t,Z,e,o.ns.wf("defaultView"),r,{},e.doc()));const u={dom:t,div:n,noun:"tracker"};return o.login.registrationControl(u,e,o.ns.wf("Tracker")).then(s=>{const r=o.ns.wf("TrackerSettingsForm");c.parse('@prefix : <http://www.w3.org/ns/ui#> .\n@prefix core: <http://www.w3.org/2005/01/wf/flow#>.\n@prefix dct: <http://purl.org/dc/terms/>.\n@prefix owl: <http://www.w3.org/2002/07/owl#>.\n@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#>.\n@prefix ui: <http://www.w3.org/ns/ui#> .\n@prefix vcard: <http://www.w3.org/2006/vcard/ns#>.\n@prefix wf: <http://www.w3.org/2005/01/wf/flow#> .\n\n core:TrackerSettingsForm a :Form;\n <http://purl.org/dc/elements/1.1/title> "Tracker Configuration Form";\n :parts (\n\n [ a ui:Heading; ui:contents "About the tracker"@en ]\n\n [ a :SingleLineTextField;\n :label "Title of issue tracker";\n :maxLength "128";\n :property dct:title;\n :size "40" ]\n\n [ a :MultiLineTextField; :label "Description"; :property wf:description; :size "40" ]\n\n [ a ui:Choice; ui:canMintNew true; ui:use core:SuperClassForm; ui:follow true;\n ui:property wf:issueClass;\n ui:label "What states can an issue be in?";\n ui:from rdfs:Class;\n ui:default wf:Task ]\n\n [ a ui:Comment; ui:contents """You can optionally sort issues using (one or more) classification systems"""@en ]\n\n\n [ a ui:Multiple; ui:canMintNew true; ui:part core:ClassificationForm;\n ui:property wf:issueCategory; ui:label "Sort them into which category?"; ui:from rdfs:Class ]\n\n [ a :BooleanField;\n :label "Allow issues to have sub-issues";\n :property wf:allowSubIssues;\n :default false ]\n\n [ a ui:Heading; ui:contents "Table view:"@en ]\n\n [ a ui:Comment; ui:contents "Any extra properties to include?"@en ]\n\n\n [a ui:Multiple; ui:property wf:propertyList; ui:ordered true; ui:part core:PropertyForm; ui:follow true ]\n\n [ a ui:Heading; ui:contents "Details of issues"@en ]\n\n # Use a people picker ideally\n [ a ui:Choice; ui:canMintNew true; ui:use core:GroupForm;\n ui:property wf:assigneeGroup;\n ui:label "Assign issues to people from which group?";\n ui:from vcard:Group;\n ]\n\n # Optionally one form for extras\n\n [ a ui:Choice; ui:canMintNew true; ui:use ui:FormForm;\n ui:property wf:extrasEntryForm;\n ui:label "Other things to save about each issue?";\n ui:from ui:Form;\n ]\n\n\n ) .\n\n # Form for the superclass of all states\n # @@ also We must require each state class to be stated to be a subclass of EITHER Open OR Closed.\n core:SuperClassForm a ui:Form; dct:title "Form for managing states";\n ui:parts (\n [ a :SingleLineTextField;\n :label "Name of set of states";\n :defualt "States";\n :maxLength "128";\n :property rdfs:label;\n :size "40" ]\n [a ui:Multiple; ui:property owl:disjointUnionOf; ui:ordered true; ui:part core:StateForm ]\n # [ a ui:Multiple; ui:property rdfs:subClassOf; ui:reverse true; ui:part core:StateForm ]\n ) .\n\n core:StateForm a ui:Form; dct:title "Form for one state";\n ui:parts (\n [ a :SingleLineTextField;\n :label "Name of state";\n :maxLength "128";\n :property rdfs:label;\n :size "40" ]\n [ a :ColorField; :label "Background color"; :property :backgroundColor ]\n # @@ add icon for state\n\n ).\n\n\n # Form for Classification\n\n core:ClassificationForm a ui:Form; dct:title "Form for a classification by categpry";\n ui:parts (\n [ a :SingleLineTextField;\n :label "Name of classification:";\n :maxLength "128";\n :property rdfs:label;\n :size "40" ]\n [a ui:Multiple; ui:property owl:disjointUnionOf; ui:ordered true; ui:part core:CategoryForm ]\n ) .\n\n core:CategoryForm a ui:Form; dct:title "Form for a category";\n ui:parts (\n [ a :SingleLineTextField;\n :label "Name of category";\n :maxLength "128";\n :property rdfs:label;\n :size "40" ]\n [ a :ColorField; :label "Background color"; :property :backgroundColor ]\n\n ).\n\n core:PropertyForm a ui:Form; ui:parts ( # Internded for raed only only marking the\n [ a :SingleLineTextField;\n :label "(property name)";\n :maxLength "128";\n :property rdfs:label;\n :size "40" ]\n ).\n\n\n # Other ontology stuff we are otherwis missing\n\n # we can usde ui:label to give a decent abel when the ontology uses a really bad one\n rdfs:subClassOf ui:label "super class" .\n # We can also add a specific nice label for the inverse\n [] owl:inverse rdfs:subClassOf; rdfs:label "sub class" .\n owl:disjointUnionOf ui:label "option" .\n\n # Form for new group\n\n\n core:GroupForm a ui:Form; dct:title "Form for new contacts group"; ui:parts (\n [ a :SingleLineTextField;\n :label "Name of new group";\n :maxLength "128";\n :property vcard:fn;\n :size "60" ]\n\n [ a ui:Heading; ui:contents "Members of group"@en ]\n\n [ a ui:Multiple; ui:label "contacts in group"; ui:property vcard:member; ui:part core:PersonForm ]\n\n ).\n\n core:PersonForm a ui:Form; dct:title "New contact details form"; ui:parts (\n\n [ a :NamedNodeURIField; ui:label "Solid ID"; ui:property owl:sameAs; ui:size 60 ]\n\n [ a :SingleLineTextField;\n :label "Name of contact";\n :maxLength "128";\n :property vcard:fn;\n :size "60" ]\n\n [ a ui:PhoneField; :label "Phone"; :property vcard:phone; ] # @@ check property]\n\n [ a :EmailField; :label "Email"; :property vcard:email ] # @@ check property\n\n ).\n\n# classificattion owl:disjointUnionOf ()\n wf:Tracker :creationForm core:SettingsForm .\n',Z,r.doc().uri,"text/turtle"),o.widgets.appendForm(t,n,{},e,r,e.doc(),i)}),n}function m(){const e=Z.any(C,o.ns.wf("issueClass")),n=[w,g,e].concat(Z.each(C,o.ns.wf("issueCategory")));n.push(A);const s={renderMain:function(e,n){if(e.innerHTML="",n.sameTerm(h))e.appendChild(u(C));else if(n.sameTerm(g))e.appendChild(d(C));else if(n.sameTerm(A))e.appendChild(f(C));else if(n.sameTerm(w))e.appendChild(function(e){const n=t.createElement("div"),s={dom:t,div:n,noun:"tracker"};return o.login.registrationList(s,{public:!0,private:!0,type:e}).then(e=>{n.appendChild(p(n))}),n}(o.ns.wf("Tracker")));else{if(!Z.holds(C,o.ns.wf("issueCategory"),n)&&!Z.holds(C,o.ns.wf("issueClass"),n))throw new Error("Unexpected tab type: "+n);e.appendChild(u(C,n))}},items:n,selectedTab:Z.any(C,o.ns.wf("defaultView"),null,C.doc())||g},r=w.doc();Z.add(w,o.ns.rdfs("label"),"My Trackers",r),Z.add(A,o.ns.rdfs("label"),"Settings",r),Z.add(e,o.ns.rdfs("label"),"By State",r);return o.tabs.tabWidget(s)}n.paneDiv=s,s.setAttribute("class","issuePane");const h=o.ns.wf("BoardView"),g=o.ns.wf("TableView"),A=o.ns.wf("SettingsView"),w=o.ns.wf("InstancesView"),b=Z.updater,y=Z.findTypeURIs(e);let C;const k=o.ns.wf("").doc();Z.holds(void 0,void 0,void 0,k)||c.parse(a(240),Z,k.uri,"text/turtle");const v=o.ns.ui("").doc();let B;Z.holds(void 0,void 0,void 0,v)||c.parse(a(197),Z,v.uri,"text/turtle"),y["http://www.w3.org/2005/01/wf/flow#Task"]||Z.holds(e,o.ns.wf("tracker"))?async function(){if(C=Z.any(e,o.ns.wf("tracker")),!C)throw new Error("This issue "+e+"has no tracker");try{await n.session.store.fetcher.load(C.doc())}catch(e){return r("Failed to load tracker config "+C.doc()+": "+e)}const t=Z.any(C,o.ns.wf("stateStore"));if(!t)return r("Tracker has no state store: "+C);try{await n.session.store.fetcher.load(e)}catch(e){return r("Failed to load issue state "+t+": "+e)}s.appendChild(U(e,n)),b.addDownstreamChangeListener(t,function(){o.widgets.refreshTree(s)})}().then(()=>console.log("Single issue rendered")):y["http://www.w3.org/2005/01/wf/flow#Tracker"]?async function(){function r(e){o.widgets.refreshTree(s),M(e,n),d.disabled=!1}C=e;try{await async function(e,n){async function t(n){const t=e.any(n,o.ns.owl("disjointUnionOf"),null,s);if(!t)throw new Error(`Classification ${n} has no disjointUnionOf`);if(!t.elements)throw new Error(`Classification ${n} has no array`);const r=new Set(t.elements.map(e=>e.uri)),a=new Set(e.each(null,o.ns.rdfs("subClassOf"),n,s).map(e=>e.uri)),i=[...a].filter(e=>!r.has(e)).map(t=>({action:"delete",st:c.st(e.sym(t),o.ns.rdfs("subClassOf"),n,s)})),l=[...r].filter(e=>!a.has(e)).map(t=>({action:"insert",st:c.st(e.sym(t),o.ns.rdfs("subClassOf"),n,s)}));return i.concat(l)}const s=n.doc(),r=e.any(n,o.ns.wf("issueClass")),a=e.each(n,o.ns.wf("issueCategory")).concat([r]);let i=[];for(const e of a)i=i.concat(await t(e));if(i.length){const n=i.filter(e=>"insert"===e.action).map(e=>e.st),t=i.filter(e=>"delete"===e.action).map(e=>e.st);console.log("Damage:",i),confirm(`Fix ${i} inconsistent subclasses in tracker config?`)&&await e.updater.update(t,n)}}(Z,C)}catch(e){console.log("@@@ Error fixing subclasses in config: "+e)}const a=Z.any(e,o.ns.wf("issueClass"));if(!a)throw new Error("This tracker has no issueClass");const i=Z.any(e,o.ns.wf("stateStore"));if(!i)throw new Error("This tracker has no stateStore");const l=t.createElement("h2");l.setAttribute("style","font-size: 150%"),s.appendChild(l);const u=o.utils.label(a);l.appendChild(t.createTextNode(u+" list"));const d=t.createElement("button"),p=t.createElement("div");d.setAttribute("type","button"),d.classList.add("trackerIssuePaneNewIssueButton"),p.classList.add("trackerIssuePaneNewIssueButtonContainer"),p.appendChild(d),s.appendChild(p);const f=t.createElement("img");f.classList.add("trackerIssuePaneNewIssueButtonImage"),f.setAttribute("src",o.icons.iconBase+"noun_19460_green.svg"),d.appendChild(f);const h=t.createElement("span");h.classList.add("trackerIssuePaneNewIssueButtonText"),h.innerHTML="New "+u,d.appendChild(h),d.addEventListener("click",function(e){d.disabled=!0,p.appendChild(x(t,Z,C,null,r))},!1),n.session.store.fetcher.load([i]).then(function(t){const r=m();s.appendChild(r),r.refresh||console.log("No table refresh function?!"),s.appendChild(H(e,n)),b.addDownstreamChangeListener(i,r.refresh)}).catch(function(e){return console.log("Cannot load state store: "+e)})}().then(()=>console.log("Tracker rendered")):console.log("Error: Issue pane: No evidence that "+e+" is either a bug or a tracker.");const E=s.appendChild(t.createElement("div"));return E.classList.add("trackerIssuePaneOverflow"),n.overlay=E,E.style.visibility="hidden",l.authn.checkUser().then(e=>{if(e)return console.log("Web ID set already: "+e),void(n.me=e);B=o.login.loginStatusBox(t,e=>{e?(n.me=Z.sym(e),console.log("Web ID set from login button: "+e),s.removeChild(B)):n.me=null}),B.classList.add("trackerIssuePaneLoginButton"),s.appendChild(B),n.statusArea||(n.statusArea=s.appendChild(t.createElement("div")))}),s}};return i=i.default})());
|
|
2
|
+
//# sourceMappingURL=issue-pane.min.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"issue-pane.min.js","mappings":"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","sources":["webpack://IssuePane/webpack/universalModuleDefinition","webpack://IssuePane/./src/styles/board.css","webpack://IssuePane/./src/styles/csvButton.css","webpack://IssuePane/./src/styles/issue.css","webpack://IssuePane/./src/styles/issuePane.css","webpack://IssuePane/./src/styles/newIssue.css","webpack://IssuePane/./src/styles/newTracker.css","webpack://IssuePane/./node_modules/css-loader/dist/runtime/api.js","webpack://IssuePane/./node_modules/css-loader/dist/runtime/sourceMaps.js","webpack://IssuePane/./node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js","webpack://IssuePane/./node_modules/style-loader/dist/runtime/insertBySelector.js","webpack://IssuePane/./node_modules/style-loader/dist/runtime/insertStyleElement.js","webpack://IssuePane/./node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js","webpack://IssuePane/./node_modules/style-loader/dist/runtime/styleDomAPI.js","webpack://IssuePane/./node_modules/style-loader/dist/runtime/styleTagTransform.js","webpack://IssuePane/external umd \"$rdf\"","webpack://IssuePane/external umd \"SolidLogic\"","webpack://IssuePane/external umd \"UI\"","webpack://IssuePane/webpack/bootstrap","webpack://IssuePane/webpack/runtime/compat get default export","webpack://IssuePane/webpack/runtime/define property getters","webpack://IssuePane/webpack/runtime/hasOwnProperty shorthand","webpack://IssuePane/webpack/runtime/nonce","webpack://IssuePane/./src/styles/board.css?a61e","webpack://IssuePane/./src/styles/newIssue.css?c4eb","webpack://IssuePane/./src/newIssue.js","webpack://IssuePane/./src/styles/issue.css?5e49","webpack://IssuePane/./src/issue.js","webpack://IssuePane/./src/styles/newTracker.css?1e68","webpack://IssuePane/./src/newTracker.js","webpack://IssuePane/./src/csvButton.js","webpack://IssuePane/./src/styles/csvButton.css?c973","webpack://IssuePane/./src/styles/issuePane.css?12bc","webpack://IssuePane/./src/index.js","webpack://IssuePane/./src/board.js"],"sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory(require(\"UI\"), require(\"SolidLogic\"), require(\"$rdf\"));\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([\"UI\", \"SolidLogic\", \"$rdf\"], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"IssuePane\"] = factory(require(\"UI\"), require(\"SolidLogic\"), require(\"$rdf\"));\n\telse\n\t\troot[\"IssuePane\"] = factory(root[\"UI\"], root[\"SolidLogic\"], root[\"$rdf\"]);\n})(this, (__WEBPACK_EXTERNAL_MODULE__426__, __WEBPACK_EXTERNAL_MODULE__663__, __WEBPACK_EXTERNAL_MODULE__264__) => {\nreturn ","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, `.trackerBoard {\n width: fit-content;\n border-collapse: collapse;\n margin: 1em;\n}\n\n.trackerBoardTable {\n width: fit-content;\n border-collapse: collapse;\n}\n\n.trackerBoardHeader {\n margin: var(--spacing-sm);\n padding: var(--spacing-sm) 1em;\n font-weight: bold;\n font-size: 120%;\n}\n\n.trackerBoardColumn {\n border: 0.01em solid white;\n padding: 0.1em;\n /* display: flex; flex-direction: column; align-items: center; */\n} \n\n.trackerBoardHeaderCell {\n margin: var(--spacing-sm);\n padding: var(--spacing-sm) var(--spacing-md);\n font-weight: bold;\n font-size: 120%;\n}\n\n.trackerBoardCard {\n width: 100%;\n border: 0.01em solid grey;\n border-radius: var(--border-radius-base);\n padding: var(--spacing-sm);\n margin: var(--spacing-sm) 0;\n}\n\n.trackerBoardCardTable {\n margin: var(--spacing-md);\n} \n`, \"\",{\"version\":3,\"sources\":[\"webpack://./src/styles/board.css\"],\"names\":[],\"mappings\":\"AAAA;EACE,kBAAkB;EAClB,yBAAyB;EACzB,WAAW;AACb;;AAEA;EACE,kBAAkB;EAClB,yBAAyB;AAC3B;;AAEA;EACE,yBAAyB;EACzB,8BAA8B;EAC9B,iBAAiB;EACjB,eAAe;AACjB;;AAEA;EACE,0BAA0B;EAC1B,cAAc;EACd,gEAAgE;AAClE;;AAEA;EACE,yBAAyB;EACzB,4CAA4C;EAC5C,iBAAiB;EACjB,eAAe;AACjB;;AAEA;EACE,WAAW;EACX,yBAAyB;EACzB,wCAAwC;EACxC,0BAA0B;EAC1B,2BAA2B;AAC7B;;AAEA;EACE,yBAAyB;AAC3B\",\"sourcesContent\":[\".trackerBoard {\\n width: fit-content;\\n border-collapse: collapse;\\n margin: 1em;\\n}\\n\\n.trackerBoardTable {\\n width: fit-content;\\n border-collapse: collapse;\\n}\\n\\n.trackerBoardHeader {\\n margin: var(--spacing-sm);\\n padding: var(--spacing-sm) 1em;\\n font-weight: bold;\\n font-size: 120%;\\n}\\n\\n.trackerBoardColumn {\\n border: 0.01em solid white;\\n padding: 0.1em;\\n /* display: flex; flex-direction: column; align-items: center; */\\n} \\n\\n.trackerBoardHeaderCell {\\n margin: var(--spacing-sm);\\n padding: var(--spacing-sm) var(--spacing-md);\\n font-weight: bold;\\n font-size: 120%;\\n}\\n\\n.trackerBoardCard {\\n width: 100%;\\n border: 0.01em solid grey;\\n border-radius: var(--border-radius-base);\\n padding: var(--spacing-sm);\\n margin: var(--spacing-sm) 0;\\n}\\n\\n.trackerBoardCardTable {\\n margin: var(--spacing-md);\\n} \\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, ``, \"\",{\"version\":3,\"sources\":[],\"names\":[],\"mappings\":\"\",\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, `.trackerBoardIssueCard {\n margin: var(--spacing-sm);\n max-width: 24em;\n padding: var(--spacing-sm);\n border: 0.05em solid grey;\n border-radius: var(--border-radius-base);\n}\n.trackerBoardIssueCardTable {\n width: 100%;\n}\n.trackerBoardIssueCardTable td {\n padding: 0.1em 0.7em 0.1em 0.1em;\n}\n.trackerBoardIssueCardTable img {\n width: 1.5em;\n height: 1.5em;\n border-radius: 50%;\n}\n\n.trackerBoardIssueCardTable {\n width: 100%;\n border-collapse: collapse;\n}\n\n.trackerOverlayCloseButton {\n background: none;\n border: none;\n cursor: pointer;\n position: absolute;\n top: 0.7em;\n right: 0.7em;\n margin: 0;\n}\n.trackerOverlay {\n position: fixed;\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n background: rgba(0, 0, 0, 0.5);\n display: flex;\n justify-content: center;\n align-items: center;\n z-index: 9999;\n}\n\n.trackerIssue {\n position: relative;\n background: white;\n padding: var(--spacing-md);\n border-radius: var(--border-radius-base);\n max-width: 80%;\n max-height: 80%;\n overflow: auto;\n}\n\n.trackerIssueIconButton {\n width: 1.5em;\n height: 1.5em;\n border-radius: 50%;\n}\n\n.trackerIssueSpacer {\n height: 1em;\n margin: 0.5em;\n}\n\n.trackerIssueForm {\n margin-top: var(--spacing-md);\n padding: var(--spacing-sm);\n border: 0.05em solid grey;\n border-radius: var(--border-radius-base);\n}\n.trackerIssueSubIssuePanel {\n margin: var(--spacing-md);\n padding: var(--spacing-md);\n border: 0.05em solid grey;\n border-radius: var(--border-radius-base);\n}\n\n.trackerIssueSubIssuePanelSupersList {\n display: flex;\n flex-wrap: wrap;\n gap: var(--spacing-sm);\n}\n\n.trackerIssueSubIssuePanelSubsList {\n display: flex;\n flex-wrap: wrap;\n gap: var(--spacing-sm);\n flex-direction: row-reverse; /* Not sure if it should be row or column */\n}\n.trackerIssueSubIssuePanelNewSubButton {\n margin: var(--spacing-sm) var(--spacing-md);\n padding: var(--spacing-sm);\n border: 0.05em solid grey;\n border-radius: var(--border-radius-base);\n background-color: #f0f0f0;\n cursor: pointer;\n float: right;\n}\n\n.trackerIssueTrackerLink {\n float: right;\n margin: var(--spacing-sm) var(--spacing-md);\n padding: var(--spacing-sm);\n}\n\n.trackerIssueDeleteButton {\n color: white;\n border: none;\n padding: var(--spacing-sm);\n border-radius: var(--border-radius-base);\n cursor: pointer;\n float: right; /* this is the only one from the code */\n}\n\n/* below styles the remove task popup */\n.trackerIssue > div[style*=\"position: relative\"] {\n z-index: 2000;\n}\n\n.trackerIssue > div[style*=\"position: relative\"] > div[style*=\"position: absolute\"] {\n top: -1em !important;\n left: 50% !important;\n transform: translate(-55%, -3em);\n z-index: 2001;\n}\n\n.trackerIssueRefreshButton {\n clear: both;\n position: relative;\n z-index: 1;\n}\n\n/* below not from code from ai */\n.trackerIssueMessageArea {\n border: 0.05em solid grey;\n border-radius: var(--border-radius-base);\n padding: var(--spacing-md);\n}\n\n.trackerIssueMessageAreaError {\n color: red;\n font-weight: bold;\n}\n/* ends here for ai generated */\n\n`, \"\",{\"version\":3,\"sources\":[\"webpack://./src/styles/issue.css\"],\"names\":[],\"mappings\":\"AAAA;EACE,yBAAyB;EACzB,eAAe;EACf,0BAA0B;EAC1B,yBAAyB;EACzB,wCAAwC;AAC1C;AACA;EACE,WAAW;AACb;AACA;EACE,gCAAgC;AAClC;AACA;EACE,YAAY;EACZ,aAAa;EACb,kBAAkB;AACpB;;AAEA;EACE,WAAW;EACX,yBAAyB;AAC3B;;AAEA;EACE,gBAAgB;EAChB,YAAY;EACZ,eAAe;EACf,kBAAkB;EAClB,UAAU;EACV,YAAY;EACZ,SAAS;AACX;AACA;EACE,eAAe;EACf,MAAM;EACN,OAAO;EACP,WAAW;EACX,YAAY;EACZ,8BAA8B;EAC9B,aAAa;EACb,uBAAuB;EACvB,mBAAmB;EACnB,aAAa;AACf;;AAEA;EACE,kBAAkB;EAClB,iBAAiB;EACjB,0BAA0B;EAC1B,wCAAwC;EACxC,cAAc;EACd,eAAe;EACf,cAAc;AAChB;;AAEA;EACE,YAAY;EACZ,aAAa;EACb,kBAAkB;AACpB;;AAEA;EACE,WAAW;EACX,aAAa;AACf;;AAEA;EACE,6BAA6B;EAC7B,0BAA0B;EAC1B,yBAAyB;EACzB,wCAAwC;AAC1C;AACA;EACE,yBAAyB;EACzB,0BAA0B;EAC1B,yBAAyB;EACzB,wCAAwC;AAC1C;;AAEA;EACE,aAAa;EACb,eAAe;EACf,sBAAsB;AACxB;;AAEA;EACE,aAAa;EACb,eAAe;EACf,sBAAsB;EACtB,4BAA4B,EAAE,2CAA2C;AAC3E;AACA;EACE,2CAA2C;EAC3C,0BAA0B;EAC1B,yBAAyB;EACzB,wCAAwC;EACxC,yBAAyB;EACzB,eAAe;EACf,YAAY;AACd;;AAEA;EACE,YAAY;EACZ,2CAA2C;EAC3C,0BAA0B;AAC5B;;AAEA;EACE,YAAY;EACZ,YAAY;EACZ,0BAA0B;EAC1B,wCAAwC;EACxC,eAAe;EACf,YAAY,EAAE,uCAAuC;AACvD;;AAEA,uCAAuC;AACvC;EACE,aAAa;AACf;;AAEA;EACE,oBAAoB;EACpB,oBAAoB;EACpB,gCAAgC;EAChC,aAAa;AACf;;AAEA;EACE,WAAW;EACX,kBAAkB;EAClB,UAAU;AACZ;;AAEA,gCAAgC;AAChC;EACE,yBAAyB;EACzB,wCAAwC;EACxC,0BAA0B;AAC5B;;AAEA;EACE,UAAU;EACV,iBAAiB;AACnB;AACA,+BAA+B\",\"sourcesContent\":[\".trackerBoardIssueCard {\\n margin: var(--spacing-sm);\\n max-width: 24em;\\n padding: var(--spacing-sm);\\n border: 0.05em solid grey;\\n border-radius: var(--border-radius-base);\\n}\\n.trackerBoardIssueCardTable {\\n width: 100%;\\n}\\n.trackerBoardIssueCardTable td {\\n padding: 0.1em 0.7em 0.1em 0.1em;\\n}\\n.trackerBoardIssueCardTable img {\\n width: 1.5em;\\n height: 1.5em;\\n border-radius: 50%;\\n}\\n\\n.trackerBoardIssueCardTable {\\n width: 100%;\\n border-collapse: collapse;\\n}\\n\\n.trackerOverlayCloseButton {\\n background: none;\\n border: none;\\n cursor: pointer;\\n position: absolute;\\n top: 0.7em;\\n right: 0.7em;\\n margin: 0;\\n}\\n.trackerOverlay {\\n position: fixed;\\n top: 0;\\n left: 0;\\n width: 100%;\\n height: 100%;\\n background: rgba(0, 0, 0, 0.5);\\n display: flex;\\n justify-content: center;\\n align-items: center;\\n z-index: 9999;\\n}\\n\\n.trackerIssue {\\n position: relative;\\n background: white;\\n padding: var(--spacing-md);\\n border-radius: var(--border-radius-base);\\n max-width: 80%;\\n max-height: 80%;\\n overflow: auto;\\n}\\n\\n.trackerIssueIconButton {\\n width: 1.5em;\\n height: 1.5em;\\n border-radius: 50%;\\n}\\n\\n.trackerIssueSpacer {\\n height: 1em;\\n margin: 0.5em;\\n}\\n\\n.trackerIssueForm {\\n margin-top: var(--spacing-md);\\n padding: var(--spacing-sm);\\n border: 0.05em solid grey;\\n border-radius: var(--border-radius-base);\\n}\\n.trackerIssueSubIssuePanel {\\n margin: var(--spacing-md);\\n padding: var(--spacing-md);\\n border: 0.05em solid grey;\\n border-radius: var(--border-radius-base);\\n}\\n\\n.trackerIssueSubIssuePanelSupersList {\\n display: flex;\\n flex-wrap: wrap;\\n gap: var(--spacing-sm);\\n}\\n\\n.trackerIssueSubIssuePanelSubsList {\\n display: flex;\\n flex-wrap: wrap;\\n gap: var(--spacing-sm);\\n flex-direction: row-reverse; /* Not sure if it should be row or column */\\n}\\n.trackerIssueSubIssuePanelNewSubButton {\\n margin: var(--spacing-sm) var(--spacing-md);\\n padding: var(--spacing-sm);\\n border: 0.05em solid grey;\\n border-radius: var(--border-radius-base);\\n background-color: #f0f0f0;\\n cursor: pointer;\\n float: right;\\n}\\n\\n.trackerIssueTrackerLink {\\n float: right;\\n margin: var(--spacing-sm) var(--spacing-md);\\n padding: var(--spacing-sm);\\n}\\n\\n.trackerIssueDeleteButton {\\n color: white;\\n border: none;\\n padding: var(--spacing-sm);\\n border-radius: var(--border-radius-base);\\n cursor: pointer;\\n float: right; /* this is the only one from the code */\\n}\\n\\n/* below styles the remove task popup */\\n.trackerIssue > div[style*=\\\"position: relative\\\"] {\\n z-index: 2000;\\n}\\n\\n.trackerIssue > div[style*=\\\"position: relative\\\"] > div[style*=\\\"position: absolute\\\"] {\\n top: -1em !important;\\n left: 50% !important;\\n transform: translate(-55%, -3em);\\n z-index: 2001;\\n}\\n\\n.trackerIssueRefreshButton {\\n clear: both;\\n position: relative;\\n z-index: 1;\\n}\\n\\n/* below not from code from ai */\\n.trackerIssueMessageArea {\\n border: 0.05em solid grey;\\n border-radius: var(--border-radius-base);\\n padding: var(--spacing-md);\\n}\\n\\n.trackerIssueMessageAreaError {\\n color: red;\\n font-weight: bold;\\n}\\n/* ends here for ai generated */\\n\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, `.trackerIssuePaneTable {\n width: fit-content;\n border-collapse: collapse;\n}\n.trackerIssuePaneTable td {\n padding: 0.1em 0.7em 0.1em 0.1em;\n}\n.trackerIssuePaneTable img {\n width: 1.5em;\n height: 1.5em;\n border-radius: 50%;\n}\n\n.trackerIssuePaneNewIssueButtonContainer {\n display: flex;\n flex-direction: row;\n}\n\n.trackerIssuePaneNewIssueButton {\n display: inline-flex;\n background-color: #F0F0F0;\n color: #505050;\n flex-direction: row;\n align-items: center;\n justify-content: flex-start;\n border: 1px solid grey;\n border-radius: var(--border-radius-base);\n cursor: pointer;\n gap: var(--spacing-sm);\n white-space: nowrap;\n text-align: left;\n padding: var(--spacing-sm);\n font-size: 100%;\n margin: var(--spacing-sm);\n}\n\n.trackerIssuePaneNewIssueButton > .trackerIssuePaneNewIssueButtonImage {\n order: 1;\n display: inline-block;\n width: 1em;\n height: 1em;\n margin: 0.2em;\n vertical-align: middle;\n}\n\n.trackerIssuePaneNewIssueButton > .trackerIssuePaneNewIssueButtonText {\n order: 2;\n display: inline-block;\n margin-left: 0;\n vertical-align: middle;\n}\n\n.trackerIssuePaneOverflow {\n position: fixed;\n z-index: 100;\n top: 1.51em;\n right: 2em;\n left: 2em;\n bottom: 1.5em;\n border: 0.1em grey solid;\n overflow: scroll;\n}\n.trackerIssuePaneLoginButton {\n margin: var(--spacing-sm) var(--spacing-md);\n}\n`, \"\",{\"version\":3,\"sources\":[\"webpack://./src/styles/issuePane.css\"],\"names\":[],\"mappings\":\"AAAA;EACE,kBAAkB;EAClB,yBAAyB;AAC3B;AACA;EACE,gCAAgC;AAClC;AACA;EACE,YAAY;EACZ,aAAa;EACb,kBAAkB;AACpB;;AAEA;EACE,aAAa;EACb,mBAAmB;AACrB;;AAEA;EACE,oBAAoB;EACpB,yBAAyB;EACzB,cAAc;EACd,mBAAmB;EACnB,mBAAmB;EACnB,2BAA2B;EAC3B,sBAAsB;EACtB,wCAAwC;EACxC,eAAe;EACf,sBAAsB;EACtB,mBAAmB;EACnB,gBAAgB;EAChB,0BAA0B;EAC1B,eAAe;EACf,yBAAyB;AAC3B;;AAEA;EACE,QAAQ;EACR,qBAAqB;EACrB,UAAU;EACV,WAAW;EACX,aAAa;EACb,sBAAsB;AACxB;;AAEA;EACE,QAAQ;EACR,qBAAqB;EACrB,cAAc;EACd,sBAAsB;AACxB;;AAEA;EACE,eAAe;EACf,YAAY;EACZ,WAAW;EACX,UAAU;EACV,SAAS;EACT,aAAa;EACb,wBAAwB;EACxB,gBAAgB;AAClB;AACA;EACE,2CAA2C;AAC7C\",\"sourcesContent\":[\".trackerIssuePaneTable {\\n width: fit-content;\\n border-collapse: collapse;\\n}\\n.trackerIssuePaneTable td {\\n padding: 0.1em 0.7em 0.1em 0.1em;\\n}\\n.trackerIssuePaneTable img {\\n width: 1.5em;\\n height: 1.5em;\\n border-radius: 50%;\\n}\\n\\n.trackerIssuePaneNewIssueButtonContainer {\\n display: flex;\\n flex-direction: row;\\n}\\n\\n.trackerIssuePaneNewIssueButton {\\n display: inline-flex;\\n background-color: #F0F0F0;\\n color: #505050;\\n flex-direction: row;\\n align-items: center;\\n justify-content: flex-start;\\n border: 1px solid grey;\\n border-radius: var(--border-radius-base);\\n cursor: pointer;\\n gap: var(--spacing-sm);\\n white-space: nowrap;\\n text-align: left;\\n padding: var(--spacing-sm);\\n font-size: 100%;\\n margin: var(--spacing-sm);\\n}\\n\\n.trackerIssuePaneNewIssueButton > .trackerIssuePaneNewIssueButtonImage {\\n order: 1;\\n display: inline-block;\\n width: 1em;\\n height: 1em;\\n margin: 0.2em;\\n vertical-align: middle;\\n}\\n\\n.trackerIssuePaneNewIssueButton > .trackerIssuePaneNewIssueButtonText {\\n order: 2;\\n display: inline-block;\\n margin-left: 0;\\n vertical-align: middle;\\n}\\n\\n.trackerIssuePaneOverflow {\\n position: fixed;\\n z-index: 100;\\n top: 1.51em;\\n right: 2em;\\n left: 2em;\\n bottom: 1.5em;\\n border: 0.1em grey solid;\\n overflow: scroll;\\n}\\n.trackerIssuePaneLoginButton {\\n margin: var(--spacing-sm) var(--spacing-md);\\n}\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, `.trackerNewIssueForm {\n display: flex;\n flex-direction: column;\n gap: var(--spacing-sm);\n padding: var(--spacing-md);\n}\n\n.trackerNewIssueTitleField {\n margin: var(--spacing-sm);\n font-size: 100%;\n padding: var(--spacing-sm);\n width: 100%;\n}\n`, \"\",{\"version\":3,\"sources\":[\"webpack://./src/styles/newIssue.css\"],\"names\":[],\"mappings\":\"AAAA;EACE,aAAa;EACb,sBAAsB;EACtB,sBAAsB;EACtB,0BAA0B;AAC5B;;AAEA;EACE,yBAAyB;EACzB,eAAe;EACf,0BAA0B;EAC1B,WAAW;AACb\",\"sourcesContent\":[\".trackerNewIssueForm {\\n display: flex;\\n flex-direction: column;\\n gap: var(--spacing-sm);\\n padding: var(--spacing-md);\\n}\\n\\n.trackerNewIssueTitleField {\\n margin: var(--spacing-sm);\\n font-size: 100%;\\n padding: var(--spacing-sm);\\n width: 100%;\\n}\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, `.trackerNewTrackerButton {\n margin: var(--spacing-sm) var(--spacing-md);\n}\n`, \"\",{\"version\":3,\"sources\":[\"webpack://./src/styles/newTracker.css\"],\"names\":[],\"mappings\":\"AAAA;EACE,2CAA2C;AAC7C\",\"sourcesContent\":[\".trackerNewTrackerButton {\\n margin: var(--spacing-sm) var(--spacing-md);\\n}\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","\"use strict\";\n\n/*\n MIT License http://www.opensource.org/licenses/mit-license.php\n Author Tobias Koppers @sokra\n*/\nmodule.exports = function (cssWithMappingToString) {\n var list = [];\n\n // return the list of modules as css string\n list.toString = function toString() {\n return this.map(function (item) {\n var content = \"\";\n var needLayer = typeof item[5] !== \"undefined\";\n if (item[4]) {\n content += \"@supports (\".concat(item[4], \") {\");\n }\n if (item[2]) {\n content += \"@media \".concat(item[2], \" {\");\n }\n if (needLayer) {\n content += \"@layer\".concat(item[5].length > 0 ? \" \".concat(item[5]) : \"\", \" {\");\n }\n content += cssWithMappingToString(item);\n if (needLayer) {\n content += \"}\";\n }\n if (item[2]) {\n content += \"}\";\n }\n if (item[4]) {\n content += \"}\";\n }\n return content;\n }).join(\"\");\n };\n\n // import a list of modules into the list\n list.i = function i(modules, media, dedupe, supports, layer) {\n if (typeof modules === \"string\") {\n modules = [[null, modules, undefined]];\n }\n var alreadyImportedModules = {};\n if (dedupe) {\n for (var k = 0; k < this.length; k++) {\n var id = this[k][0];\n if (id != null) {\n alreadyImportedModules[id] = true;\n }\n }\n }\n for (var _k = 0; _k < modules.length; _k++) {\n var item = [].concat(modules[_k]);\n if (dedupe && alreadyImportedModules[item[0]]) {\n continue;\n }\n if (typeof layer !== \"undefined\") {\n if (typeof item[5] === \"undefined\") {\n item[5] = layer;\n } else {\n item[1] = \"@layer\".concat(item[5].length > 0 ? \" \".concat(item[5]) : \"\", \" {\").concat(item[1], \"}\");\n item[5] = layer;\n }\n }\n if (media) {\n if (!item[2]) {\n item[2] = media;\n } else {\n item[1] = \"@media \".concat(item[2], \" {\").concat(item[1], \"}\");\n item[2] = media;\n }\n }\n if (supports) {\n if (!item[4]) {\n item[4] = \"\".concat(supports);\n } else {\n item[1] = \"@supports (\".concat(item[4], \") {\").concat(item[1], \"}\");\n item[4] = supports;\n }\n }\n list.push(item);\n }\n };\n return list;\n};","\"use strict\";\n\nmodule.exports = function (item) {\n var content = item[1];\n var cssMapping = item[3];\n if (!cssMapping) {\n return content;\n }\n if (typeof btoa === \"function\") {\n var base64 = btoa(unescape(encodeURIComponent(JSON.stringify(cssMapping))));\n var data = \"sourceMappingURL=data:application/json;charset=utf-8;base64,\".concat(base64);\n var sourceMapping = \"/*# \".concat(data, \" */\");\n return [content].concat([sourceMapping]).join(\"\\n\");\n }\n return [content].join(\"\\n\");\n};","\"use strict\";\n\nvar stylesInDOM = [];\nfunction getIndexByIdentifier(identifier) {\n var result = -1;\n for (var i = 0; i < stylesInDOM.length; i++) {\n if (stylesInDOM[i].identifier === identifier) {\n result = i;\n break;\n }\n }\n return result;\n}\nfunction modulesToDom(list, options) {\n var idCountMap = {};\n var identifiers = [];\n for (var i = 0; i < list.length; i++) {\n var item = list[i];\n var id = options.base ? item[0] + options.base : item[0];\n var count = idCountMap[id] || 0;\n var identifier = \"\".concat(id, \" \").concat(count);\n idCountMap[id] = count + 1;\n var indexByIdentifier = getIndexByIdentifier(identifier);\n var obj = {\n css: item[1],\n media: item[2],\n sourceMap: item[3],\n supports: item[4],\n layer: item[5]\n };\n if (indexByIdentifier !== -1) {\n stylesInDOM[indexByIdentifier].references++;\n stylesInDOM[indexByIdentifier].updater(obj);\n } else {\n var updater = addElementStyle(obj, options);\n options.byIndex = i;\n stylesInDOM.splice(i, 0, {\n identifier: identifier,\n updater: updater,\n references: 1\n });\n }\n identifiers.push(identifier);\n }\n return identifiers;\n}\nfunction addElementStyle(obj, options) {\n var api = options.domAPI(options);\n api.update(obj);\n var updater = function updater(newObj) {\n if (newObj) {\n if (newObj.css === obj.css && newObj.media === obj.media && newObj.sourceMap === obj.sourceMap && newObj.supports === obj.supports && newObj.layer === obj.layer) {\n return;\n }\n api.update(obj = newObj);\n } else {\n api.remove();\n }\n };\n return updater;\n}\nmodule.exports = function (list, options) {\n options = options || {};\n list = list || [];\n var lastIdentifiers = modulesToDom(list, options);\n return function update(newList) {\n newList = newList || [];\n for (var i = 0; i < lastIdentifiers.length; i++) {\n var identifier = lastIdentifiers[i];\n var index = getIndexByIdentifier(identifier);\n stylesInDOM[index].references--;\n }\n var newLastIdentifiers = modulesToDom(newList, options);\n for (var _i = 0; _i < lastIdentifiers.length; _i++) {\n var _identifier = lastIdentifiers[_i];\n var _index = getIndexByIdentifier(_identifier);\n if (stylesInDOM[_index].references === 0) {\n stylesInDOM[_index].updater();\n stylesInDOM.splice(_index, 1);\n }\n }\n lastIdentifiers = newLastIdentifiers;\n };\n};","\"use strict\";\n\nvar memo = {};\n\n/* istanbul ignore next */\nfunction getTarget(target) {\n if (typeof memo[target] === \"undefined\") {\n var styleTarget = document.querySelector(target);\n\n // Special case to return head of iframe instead of iframe itself\n if (window.HTMLIFrameElement && styleTarget instanceof window.HTMLIFrameElement) {\n try {\n // This will throw an exception if access to iframe is blocked\n // due to cross-origin restrictions\n styleTarget = styleTarget.contentDocument.head;\n } catch (e) {\n // istanbul ignore next\n styleTarget = null;\n }\n }\n memo[target] = styleTarget;\n }\n return memo[target];\n}\n\n/* istanbul ignore next */\nfunction insertBySelector(insert, style) {\n var target = getTarget(insert);\n if (!target) {\n throw new Error(\"Couldn't find a style target. This probably means that the value for the 'insert' parameter is invalid.\");\n }\n target.appendChild(style);\n}\nmodule.exports = insertBySelector;","\"use strict\";\n\n/* istanbul ignore next */\nfunction insertStyleElement(options) {\n var element = document.createElement(\"style\");\n options.setAttributes(element, options.attributes);\n options.insert(element, options.options);\n return element;\n}\nmodule.exports = insertStyleElement;","\"use strict\";\n\n/* istanbul ignore next */\nfunction setAttributesWithoutAttributes(styleElement) {\n var nonce = typeof __webpack_nonce__ !== \"undefined\" ? __webpack_nonce__ : null;\n if (nonce) {\n styleElement.setAttribute(\"nonce\", nonce);\n }\n}\nmodule.exports = setAttributesWithoutAttributes;","\"use strict\";\n\n/* istanbul ignore next */\nfunction apply(styleElement, options, obj) {\n var css = \"\";\n if (obj.supports) {\n css += \"@supports (\".concat(obj.supports, \") {\");\n }\n if (obj.media) {\n css += \"@media \".concat(obj.media, \" {\");\n }\n var needLayer = typeof obj.layer !== \"undefined\";\n if (needLayer) {\n css += \"@layer\".concat(obj.layer.length > 0 ? \" \".concat(obj.layer) : \"\", \" {\");\n }\n css += obj.css;\n if (needLayer) {\n css += \"}\";\n }\n if (obj.media) {\n css += \"}\";\n }\n if (obj.supports) {\n css += \"}\";\n }\n var sourceMap = obj.sourceMap;\n if (sourceMap && typeof btoa !== \"undefined\") {\n css += \"\\n/*# sourceMappingURL=data:application/json;base64,\".concat(btoa(unescape(encodeURIComponent(JSON.stringify(sourceMap)))), \" */\");\n }\n\n // For old IE\n /* istanbul ignore if */\n options.styleTagTransform(css, styleElement, options.options);\n}\nfunction removeStyleElement(styleElement) {\n // istanbul ignore if\n if (styleElement.parentNode === null) {\n return false;\n }\n styleElement.parentNode.removeChild(styleElement);\n}\n\n/* istanbul ignore next */\nfunction domAPI(options) {\n if (typeof document === \"undefined\") {\n return {\n update: function update() {},\n remove: function remove() {}\n };\n }\n var styleElement = options.insertStyleElement(options);\n return {\n update: function update(obj) {\n apply(styleElement, options, obj);\n },\n remove: function remove() {\n removeStyleElement(styleElement);\n }\n };\n}\nmodule.exports = domAPI;","\"use strict\";\n\n/* istanbul ignore next */\nfunction styleTagTransform(css, styleElement) {\n if (styleElement.styleSheet) {\n styleElement.styleSheet.cssText = css;\n } else {\n while (styleElement.firstChild) {\n styleElement.removeChild(styleElement.firstChild);\n }\n styleElement.appendChild(document.createTextNode(css));\n }\n}\nmodule.exports = styleTagTransform;","module.exports = __WEBPACK_EXTERNAL_MODULE__264__;","module.exports = __WEBPACK_EXTERNAL_MODULE__663__;","module.exports = __WEBPACK_EXTERNAL_MODULE__426__;","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\tid: moduleId,\n\t\t// no module.loaded needed\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId](module, module.exports, __webpack_require__);\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n","// getDefaultExport function for compatibility with non-harmony modules\n__webpack_require__.n = (module) => {\n\tvar getter = module && module.__esModule ?\n\t\t() => (module['default']) :\n\t\t() => (module);\n\t__webpack_require__.d(getter, { a: getter });\n\treturn getter;\n};","// define getter functions for harmony exports\n__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","__webpack_require__.nc = undefined;","\n import API from \"!../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import domAPI from \"!../../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n import insertFn from \"!../../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n import setAttributes from \"!../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n import insertStyleElement from \"!../../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n import styleTagTransformFn from \"!../../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n import content, * as namedExport from \"!!../../node_modules/css-loader/dist/cjs.js!./board.css\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\noptions.insert = insertFn.bind(null, \"head\");\noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../node_modules/css-loader/dist/cjs.js!./board.css\";\n export default content && content.locals ? content.locals : undefined;\n","\n import API from \"!../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import domAPI from \"!../../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n import insertFn from \"!../../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n import setAttributes from \"!../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n import insertStyleElement from \"!../../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n import styleTagTransformFn from \"!../../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n import content, * as namedExport from \"!!../../node_modules/css-loader/dist/cjs.js!./newIssue.css\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\noptions.insert = insertFn.bind(null, \"head\");\noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../node_modules/css-loader/dist/cjs.js!./newIssue.css\";\n export default content && content.locals ? content.locals : undefined;\n","// Form to collect data about a New Issue\n//\nimport { ns, utils } from 'solid-ui'\nimport * as $rdf from 'rdflib'\nimport './styles/newIssue.css'\n\nexport function newIssueForm (dom, kb, tracker, superIssue, showNewIssue, onCancel) {\n const form = dom.createElement('div') // form is broken as HTML behaviour can resurface on js error\n form.classList.add('trackerNewIssueForm')\n const stateStore = kb.any(tracker, ns.wf('stateStore'))\n onCancel = onCancel || function () {}\n\n const timestring = function () {\n const now = new Date()\n return '' + now.getTime()\n // http://www.w3schools.com/jsref/jsref_obj_date.asp\n }\n\n const sendNewIssue = function () {\n titlefield.setAttribute('class', 'pendingedit')\n titlefield.disabled = true\n const sts = []\n\n const expandTemplate = function (template) {\n const now = new $rdf.Literal(new Date())\n const nnnn = '' + new Date().getTime()\n const YYYY = now.value.slice(0, 4)\n const MM = now.value.slice(5, 7)\n const DD = now.value.slice(8, 10)\n return template\n .replace('{N}', nnnn)\n .replace('{YYYY}', YYYY)\n .replace('{MM}', MM)\n .replace('{DD}', DD)\n }\n // Where to store the new issue?\n const template = kb.anyValue(tracker, ns.wf('issueURITemplate'))\n const issue = template\n // Does each issue do in its own file?\n ? kb.sym(expandTemplate($rdf.uri.join(template, stateStore.uri)))\n : kb.sym(stateStore.uri + '#' + 'Iss' + timestring())\n\n const issueDoc = issue.doc()\n\n // Basic 9 core predicates are stored in the main stateStore\n\n const title = kb.literal(titlefield.value)\n sts.push(new $rdf.Statement(issue, ns.wf('tracker'), tracker, stateStore))\n sts.push(new $rdf.Statement(issue, ns.dc('title'), title, stateStore))\n sts.push(new $rdf.Statement(issue, ns.dct('created'), new Date(), stateStore))\n // Copy states from super issue as after all they are subtasks so initially same state same category\n const initialStates = superIssue\n ? kb.each(superIssue, ns.rdf('type'), null, superIssue.doc())\n : kb.each(tracker, ns.wf('initialState'))\n for (const state of initialStates) {\n sts.push(\n new $rdf.Statement(\n issue,\n ns.rdf('type'),\n state,\n stateStore\n )\n )\n }\n if (superIssue) {\n sts.push(\n new $rdf.Statement(superIssue, ns.wf('dependent'), issue, stateStore)\n )\n }\n\n // Other things are stores in the individual\n if (template) {\n sts.push(new $rdf.Statement(issue, ns.wf('tracker'), tracker, issueDoc))\n sts.push(\n new $rdf.Statement(issue, ns.rdfs('seeAlso'), stateStore, issueDoc)\n )\n }\n\n const sendComplete = function (uri, success, body) {\n if (!success) {\n console.log('Error: can\\'t save new issue:' + body)\n } else {\n form.parentNode.removeChild(form)\n showNewIssue(issue)\n }\n }\n kb.updater.update([], sts, sendComplete)\n }\n\n const states = kb.any(tracker, ns.wf('issueClass'))\n const classLabel = utils.label(states)\n const closeForm = function () {\n if (form.parentNode) {\n form.parentNode.removeChild(form)\n }\n onCancel()\n }\n\n const header = form.appendChild(dom.createElement('div'))\n header.classList.add('trackerNewIssueHeader')\n\n const heading = header.appendChild(dom.createElement('h2'))\n heading.textContent = 'Add new ' + (superIssue ? 'sub ' : '') + classLabel\n\n const closeButton = header.appendChild(dom.createElement('button'))\n closeButton.classList.add('trackerNewIssueCloseButton')\n closeButton.setAttribute('type', 'button')\n closeButton.setAttribute('aria-label', 'Close new issue form')\n closeButton.textContent = '×'\n closeButton.addEventListener('click', closeForm, false)\n\n const prompt = form.appendChild(dom.createElement('p'))\n prompt.textContent = 'Title of new ' + classLabel + ':'\n\n const titlefield = dom.createElement('input')\n titlefield.classList.add('trackerNewIssueTitleField')\n titlefield.setAttribute('type', 'text')\n titlefield.setAttribute('maxLength', '2048') // No arbitrary limits\n titlefield.select() // focus next user input\n titlefield.addEventListener(\n 'keyup',\n function (e) {\n if (e.keyCode === 13) {\n sendNewIssue()\n }\n },\n false\n )\n form.appendChild(titlefield)\n titlefield.focus() // we want user cursor here\n return form\n}\n","\n import API from \"!../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import domAPI from \"!../../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n import insertFn from \"!../../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n import setAttributes from \"!../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n import insertStyleElement from \"!../../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n import styleTagTransformFn from \"!../../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n import content, * as namedExport from \"!!../../node_modules/css-loader/dist/cjs.js!./issue.css\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\noptions.insert = insertFn.bind(null, \"head\");\noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../node_modules/css-loader/dist/cjs.js!./issue.css\";\n export default content && content.locals ? content.locals : undefined;\n","// All the UI for a single issue, without store load or listening for changes\n//\nimport { icons, messageArea, ns, style, utils, widgets } from 'solid-ui'\nimport { authn, store } from 'solid-logic'\nimport { newIssueForm } from './newIssue'\nimport * as $rdf from 'rdflib'\nimport './styles/issue.css'\n\nconst kb = store\n\nconst SET_MODIFIED_DATES = false\n\nexport const TASK_ICON = icons.iconBase + 'noun_17020_gray-tick.svg'\nexport const OPEN_TASK_ICON = icons.iconBase + 'noun_17020_sans-tick.svg'\nexport const CLOSED_TASK_ICON = icons.iconBase + 'noun_17020.svg'\n\nfunction complain (message, context) {\n console.warn(message)\n context.paneDiv.appendChild(widgets.errorMessageBlock(context.dom, message))\n}\n\nexport function isOpen (issue) {\n const types = kb.findTypeURIs(issue)\n return !!types[ns.wf('Open').uri]\n}\n\nexport function iconForIssue (issue) {\n return isOpen(issue) ? TASK_ICON : CLOSED_TASK_ICON\n}\nexport function getState (issue, classification) {\n const tracker = kb.the(issue, ns.wf('tracker'), null, issue.doc())\n const states = kb.any(tracker, ns.wf('issueClass'))\n classification = classification || states\n const types = kb.each(issue, ns.rdf('type'))\n .filter(ty => kb.holds(ty, ns.rdfs('subClassOf'), classification))\n if (types.length !== 1) {\n // const initialState = kb.any(tracker, ns.wf('initialState')) No do NOT default\n // if (initialState) return initialState\n throw new Error('Issue must have one type as state: ' + types.length)\n }\n return types[0]\n}\n\nexport function getBackgroundColorFromTypes (issue) {\n const classes = kb.each(issue, ns.rdf('type')) // @@ pick cats in order then state\n const catColors = classes.map(cat => kb.any(cat, ns.ui('backgroundColor'))).filter(c => !!c)\n\n if (catColors.length) return catColors[0].value // pick first one\n return null\n}\n\nexport function renderIssueCard (issue, context) {\n function refresh () {\n const backgroundColor = getBackgroundColorFromTypes(issue) || 'white'\n card.style.backgroundColor = backgroundColor\n editButton.style.backgroundColor = backgroundColor // Override white from style sheet\n }\n const dom = context.dom\n const uncategorized = !getBackgroundColorFromTypes(issue) // This is a suspect issue. Prompt to delete it\n\n const card = dom.createElement('div')\n card.classList.add('trackerBoardIssueCard')\n const table = card.appendChild(dom.createElement('table'))\n table.classList.add('trackerBoardIssueCardTable')\n const options = { draggable: false } // Let the board make the whole card draggable\n table.appendChild(widgets.personTR(dom, null, issue, options))\n table.subject = issue\n\n const img = card.firstChild.firstChild.firstChild.firstChild // div/table/tr/td/img\n img.setAttribute('src', icons.iconBase + 'noun_Danger_1259514.svg') // override\n // Add a button for viewing the whole issue in overlay\n const buttonsCell = card.firstChild.firstChild.children[2] // right hand part of card\n buttonsCell.classList.add('trackerBoardIssueCardButtons')\n const editButton = widgets.button(dom, icons.iconBase + 'noun_253504.svg', 'edit', async _event => {\n exposeOverlay(issue, context)\n })\n editButton.classList.add('trackerBoardIssueCardEditButton')\n const editButtonImage = editButton.firstChild\n editButtonImage.classList.add('trackerBoardIssueCardEditButtonImage')\n editButtonImage.style.width = editButtonImage.style.height = '1.5em'\n buttonsCell.appendChild(editButton)\n\n // If uncategorized, shortcut to delete issue\n if (uncategorized) {\n const deleteButton = widgets.deleteButtonWithCheck(dom, buttonsCell, 'issue', async function () { // noun?\n try {\n await kb.updater.update(kb.connectedStatements(issue))\n } catch (err) {\n complain(`Unable to delete issue: ${err}`, context)\n }\n console.log('User deleted issue ' + issue)\n card.parentNode.removeChild(card) // refresh doesn't work yet because it is not passed though tabs so short cut\n widgets.refreshTree(context.paneDiv) // Should delete the card if nec when tabs pass it though\n // complain('DELETED OK', context)\n })\n buttonsCell.appendChild(deleteButton)\n }\n card.refresh = refresh\n refresh()\n return card\n}\n\nexport function exposeOverlay (subject, context) {\n function hideOverlay () {\n overlay.innerHTML = '' // clear overlay\n overlay.style.visibility = 'hidden'\n }\n const overlay = context.overlay\n overlay.classList.add('trackerOverlay')\n overlay.innerHTML = '' // clear existing\n const issuePanel = renderIssue(subject, context)\n overlay.appendChild(issuePanel)\n const button = issuePanel.appendChild(\n widgets.button(context.dom, icons.iconBase + 'noun_1180156.svg', 'close', hideOverlay))\n button.classList.add('trackerOverlayCloseButton')\n delete button.style.backgroundColor // do not want white\n overlay.style.visibility = 'visible'\n}\n\nfunction renderSpacer (dom, backgroundColor) {\n const spacer = dom.createElement('div')\n spacer.classList.add('trackerIssueSpacer')\n spacer.style.backgroundColor = backgroundColor // try that\n return spacer\n}\n\nexport function renderIssue (issue, context) {\n // Don't bother changing the last modified dates of things: save time\n function setModifiedDate (subj, kb, doc) {\n if (SET_MODIFIED_DATES) {\n if (!getOption(tracker, 'trackLastModified')) return\n const deletions = kb.statementsMatching(issue, ns.dct('modified'))\n .concat(kb.statementsMatching(issue, ns.wf('modifiedBy'))\n )\n const insertions = [$rdf.st(issue, ns.dct('modified'), new Date(), doc)]\n if (me) insertions.push($rdf.st(issue, ns.wf('modifiedBy'), me, doc))\n kb.updater.update(deletions, insertions, function (_uri, _ok, _body) {})\n }\n }\n\n function say (message, style) {\n const pre = dom.createElement('pre')\n pre.setAttribute('style', style || 'color: grey')\n issueDiv.appendChild(pre)\n pre.appendChild(dom.createTextNode(message))\n return pre\n }\n\n function timestring () {\n const now = new Date()\n return '' + now.getTime()\n // http://www.w3schools.com/jsref/jsref_obj_date.asp\n }\n\n function complain (message) {\n console.warn(message)\n issueDiv.appendChild(widgets.errorMessageBlock(dom, message))\n }\n\n function complainIfBad (ok, body) {\n if (!ok) {\n complain(\n 'Sorry, failed to save your change:\\n' + body,\n 'background-color: pink;', context\n )\n }\n }\n function getOption (tracker, option) {\n // eg 'allowSubIssues'\n const opt = kb.any(tracker, ns.ui(option))\n return !!(opt && opt.value)\n }\n\n function setPaneStyle () {\n const backgroundColor = getBackgroundColorFromTypes(issue) || '#eee' // default grey\n const mystyle0 = 'padding: 0.5em 1.5em 1em 1.5em; border: 0.7em;'\n const mystyle = mystyle0 + 'border-color: ' + backgroundColor + '; '\n issueDiv.setAttribute('style', mystyle)\n issueDiv.style.backgroundColor = 'white'\n }\n\n /// ////////////// Body of renderIssue\n\n const dom = context.dom\n\n const tracker = kb.the(issue, ns.wf('tracker'), null, issue.doc())\n if (!tracker) throw new Error('No tracker')\n\n const stateStore = kb.any(tracker, ns.wf('stateStore'))\n const store = issue.doc()\n\n const issueDiv = dom.createElement('div')\n issueDiv.classList.add('trackerIssue')\n const me = authn.currentUser()\n const backgroundColor = getBackgroundColorFromTypes(issue) || 'white'\n\n setPaneStyle()\n\n authn.checkUser() // kick off async operation\n\n const iconButton = issueDiv.appendChild(widgets.button(dom, iconForIssue(issue)))\n iconButton.classList.add('trackerIssueIconButton')\n widgets.makeDraggable(iconButton, issue) // Drag me wherever you need to do stuff with this issue\n\n const states = kb.any(tracker, ns.wf('issueClass'))\n if (!states) { throw new Error('This tracker ' + tracker + ' has no issueClass') }\n const select = widgets.makeSelectForCategory(\n dom,\n kb,\n issue,\n states,\n stateStore,\n function (ok, body) {\n if (ok) {\n setModifiedDate(store, kb, store)\n widgets.refreshTree(issueDiv)\n } else {\n console.log('Failed to change state:\\n' + body)\n }\n }\n )\n issueDiv.appendChild(select)\n\n const cats = kb.each(tracker, ns.wf('issueCategory')) // zero or more\n for (const cat of cats) {\n issueDiv.appendChild(\n widgets.makeSelectForCategory(\n dom,\n kb,\n issue,\n cat,\n stateStore,\n function (ok, body) {\n if (ok) {\n setModifiedDate(store, kb, store)\n widgets.refreshTree(issueDiv)\n } else {\n console.log('Failed to change category:\\n' + body)\n }\n }\n )\n )\n }\n\n // For when issue is the main solo subject, include link to tracker itself.\n const a = dom.createElement('a')\n a.classList.add('trackerIssueTrackerLink')\n a.setAttribute('href', tracker.uri)\n issueDiv.appendChild(a).textContent = utils.label(tracker)\n a.addEventListener('click', widgets.openHrefInOutlineMode, true)\n\n // Main Form for Title, description only\n const coreIssueFormText = `\n @prefix : <http://www.w3.org/ns/ui#> .\n @prefix core: <http://www.w3.org/2005/01/wf/flow#>.\n @prefix dc: <http://purl.org/dc/elements/1.1/>.\n @prefix wf: <http://www.w3.org/2005/01/wf/flow#> .\n\n core:coreIsueForm a :Form;\n <http://purl.org/dc/elements/1.1/title> \"Core issue data\";\n :parts (\n core:titleField\n core:descriptionField ) .\n\n core:descriptionField a :MultiLineTextField;\n :label \"Description\";\n :property wf:description;\n :size \"40\" .\n\n core:titleField a :SingleLineTextField;\n :label \"Title\";\n :maxLength \"128\";\n :property dc:title; # @@ Should move to dct or schema\n :size \"40\" .\n\n wf:Task :creationForm core:coreIsueForm .\n`\n const CORE_ISSUE_FORM = ns.wf('coreIsueForm')\n $rdf.parse(coreIssueFormText, kb, CORE_ISSUE_FORM.doc().uri, 'text/turtle')\n const form = widgets.appendForm(\n dom,\n null, // was: container\n {},\n issue,\n CORE_ISSUE_FORM,\n stateStore,\n complainIfBad\n )\n form.classList.add('trackerIssueForm')\n issueDiv.appendChild(form)\n form.style.backgroundColor = backgroundColor\n\n // Assigned to whom?\n\n const assignments = kb.statementsMatching(issue, ns.wf('assignee'))\n if (assignments.length > 1) {\n say('Weird, was assigned to more than one person. Fixing ..')\n const deletions = assignments.slice(1)\n kb.updater.update(deletions, [], function (uri, ok, body) {\n if (ok) {\n say('Now fixed.')\n } else {\n complain('Fixed failed: ' + body, context)\n }\n })\n }\n\n // Who could be assigned to this?\n // Anyone assigned to any issue we know about\n\n async function getPossibleAssignees () {\n const devGroups = kb.each(issue, ns.wf('assigneeGroup'))\n await kb.fetcher.load(devGroups) // Load them all\n const groupDevs = devGroups.map(group => kb.each(group, ns.vcard('member'), null, group.doc())).flat()\n // Anyone who is a developer of any project which uses this tracker\n const proj = kb.any(null, ns.doap('bug-database'), tracker) // What project?\n if (proj) {\n await kb.fetcher.load(proj)\n }\n const projectDevs = proj ? kb.each(proj, ns.doap('developer')) : []\n return groupDevs.concat(projectDevs)\n }\n\n // Super issues first - like parent directories .. maybe use breadcrums from?? @@\n function renderSubIssue (issue) {\n const options = { link: false }\n return widgets.personTR(dom, ns.wf('dependent'), issue, options)\n }\n\n getPossibleAssignees().then(devs => {\n if (devs.length) {\n devs.forEach(function (person) {\n kb.fetcher.lookUpThing(person)\n }) // best effort async for names etc\n const opts = {\n // 'mint': '** Add new person **',\n nullLabel: '(unassigned)'\n /* 'mintStatementsFun': function (newDev) {\n var sts = [ $rdf.st(newDev, ns.rdf('type'), ns.foaf('Person')) ]\n if (proj) sts.push($rdf.st(proj, ns.doap('developer'), newDev))\n return sts\n }\n */\n }\n issueDiv.appendChild(\n widgets.makeSelectForOptions(\n dom,\n kb,\n issue,\n ns.wf('assignee'),\n devs,\n opts,\n store,\n function (ok, body) {\n if (ok) setModifiedDate(store, kb, store)\n else console.log('Failed to change assignee:\\n' + body)\n }\n )\n )\n }\n })\n\n /* The trees of super-issues and sub-issues\n */\n function supersOver (issue, stack) {\n stack = stack || []\n const sup = kb.any(null, ns.wf('dependent'), issue, issue.doc())\n if (sup) return supersOver(sup, [sup].concat(stack))\n return stack\n }\n if (getOption(tracker, 'allowSubIssues')) {\n const subIssuePanel = issueDiv.appendChild(dom.createElement('div'))\n subIssuePanel.classList.add('trackerIssueSubIssuePanel')\n\n subIssuePanel.appendChild(dom.createElement('h4')).textContent = 'Super Issues'\n const listOfSupers = subIssuePanel.appendChild(dom.createElement('div'))\n listOfSupers.classList.add('trackerIssueSubIssuePanelSupersList')\n listOfSupers.refresh = function () {\n // const supers = kb.each(null, ns.wf('dependent'), issue, issue.doc())\n const supers = supersOver(issue)\n utils.syncTableToArrayReOrdered(listOfSupers, supers, renderSubIssue)\n }\n listOfSupers.refresh()\n\n // Sub issues\n subIssuePanel.appendChild(dom.createElement('h4')).textContent = 'Sub Issues'\n const listOfSubs = subIssuePanel.appendChild(dom.createElement('div'))\n listOfSubs.classList.add('trackerIssueSubIssuePanelSubsList')\n listOfSubs.refresh = function () {\n const subs = kb.each(issue, ns.wf('dependent'), null, issue.doc())\n utils.syncTableToArrayReOrdered(listOfSubs, subs, renderSubIssue)\n }\n listOfSubs.refresh()\n\n const b = dom.createElement('button')\n b.classList.add('trackerIssueSubIssuePanelNewSubButton')\n b.setAttribute('type', 'button')\n subIssuePanel.appendChild(b)\n const classLabel = utils.label(states)\n b.innerHTML = 'New sub ' + classLabel\n b.addEventListener(\n 'click',\n function (_event) {\n subIssuePanel.insertBefore(newIssueForm(dom, kb, tracker, issue, listOfSubs.refresh), b.nextSibling) // Pop form just after button\n },\n false\n )\n }\n\n issueDiv.appendChild(dom.createElement('br'))\n\n // Extras are stored centrally to the tracker\n const extrasForm = kb.any(tracker, ns.wf('extrasEntryForm'))\n if (extrasForm) {\n widgets.appendForm(\n dom,\n issueDiv,\n {},\n issue,\n extrasForm,\n stateStore,\n complainIfBad\n )\n // issueDiv.appendChild(renderSpacer(backgroundColor))\n }\n\n // Comment/discussion area\n\n const spacer = issueDiv.appendChild(renderSpacer(dom, backgroundColor))\n spacer.classList.add('trackerIssueSpacer')\n const template = kb.anyValue(tracker, ns.wf('issueURITemplate'))\n /*\n var chatDocURITemplate = kb.anyValue(tracker, ns.wf('chatDocURITemplate')) // relaive to issue\n var chat\n if (chatDocURITemplate) {\n let template = $rdf.uri.join(chatDocURITemplate, issue.uri) // Template is relative to issue\n chat = kb.sym(expandTemplate(template))\n } else\n */\n let messageStore\n if (template) {\n messageStore = issue.doc() // for now. Could go deeper\n } else {\n messageStore = kb.any(tracker, ns.wf('messageStore'))\n if (!messageStore) messageStore = kb.any(tracker, ns.wf('stateStore'))\n kb.sym(messageStore.uri + '#' + 'Chat' + timestring()) // var chat =\n }\n\n kb.fetcher.nowOrWhenFetched(messageStore, function (ok, body, _xhr) {\n if (!ok) {\n const er = dom.createElement('p')\n er.classList.add('trackerIssueMessageAreaError')\n er.textContent = body // @@ use nice error message\n issueDiv.insertBefore(er, spacer)\n } else {\n const discussion = messageArea(dom, kb, issue, messageStore)\n discussion.classList.add('trackerIssueMessageArea')\n issueDiv.insertBefore(discussion, spacer)\n issueDiv.insertBefore(renderSpacer(dom, backgroundColor), discussion)\n } // Not sure why e stuck this in upwards rather than downwards\n })\n\n // Draggable attachment list\n const attachmentHint = issueDiv.appendChild(dom.createElement('div'))\n attachmentHint.classList.add('trackerIssueAttachmentHint')\n attachmentHint.innerHTML = `<h4>Attachments</h4>\n <p>Drag files, emails,\n web pages onto the paper clip, or click the file upload button.</p>`\n const uploadFolderURI =\n issue.uri.endsWith('/index.ttl#this') // This has a whole folder to itself\n ? issue.uri.slice(0, 14) + 'Files/' // back to slash\n : issue.dir().uri + 'Files/' + issue.uri.split('#')[1] + '/' // New folder for issue in file with others\n\n widgets.attachmentList(dom, issue, issueDiv, {\n doc: stateStore,\n promptIcon: icons.iconBase + 'noun_25830.svg',\n uploadFolder: kb.sym(uploadFolderURI), // Allow local files to be uploaded\n predicate: ns.wf('attachment')\n })\n\n // Delete button to delete the issue\n const deleteButton = widgets.deleteButtonWithCheck(dom, issueDiv, 'issue', async function () {\n try {\n await kb.updater.update(kb.connectedStatements(issue))\n } catch (err) {\n complain(`Unable to delete issue: ${err}`, context)\n }\n // @@ refreshTree\n complain('DELETED OK', context)\n issueDiv.style.backgroundColor = '#eee'\n issueDiv.style.color = 'orange'\n })\n deleteButton.classList.add('trackerIssueDeleteButton')\n\n // Refresh button\n const refreshButton = dom.createElement('button')\n refreshButton.classList.add('trackerIssueRefreshButton')\n refreshButton.textContent = 'refresh messages'\n refreshButton.addEventListener(\n 'click',\n async function (_event) {\n try {\n await kb.fetcher.load(messageStore, { force: true, clearPreviousData: true })\n } catch (err) {\n alert(err)\n return\n }\n widgets.refreshTree(issueDiv)\n },\n false\n )\n refreshButton.setAttribute('style', style.button)\n issueDiv.appendChild(refreshButton)\n return issueDiv\n} // renderIssue\n","\n import API from \"!../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import domAPI from \"!../../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n import insertFn from \"!../../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n import setAttributes from \"!../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n import insertStyleElement from \"!../../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n import styleTagTransformFn from \"!../../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n import content, * as namedExport from \"!!../../node_modules/css-loader/dist/cjs.js!./newTracker.css\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\noptions.insert = insertFn.bind(null, \"head\");\noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../node_modules/css-loader/dist/cjs.js!./newTracker.css\";\n export default content && content.locals ? content.locals : undefined;\n","import * as UI from 'solid-ui'\nimport * as $rdf from 'rdflib'\nimport { store } from 'solid-logic'\nimport './styles/newTracker.css'\n\nconst ns = UI.ns\nconst updater = store.updater\n\n/* Button for making a whole new tracker\n** This is the least tesetd part of the tracker system at the moment.\n*/\nexport function newTrackerButton (thisTracker, context) {\n function timestring () {\n const now = new Date()\n return '' + now.getTime()\n // http://www.w3schools.com/jsref/jsref_obj_date.asp\n }\n\n // const dom = context.dom\n const button = UI.login.newAppInstance(context.dom, { noun: 'tracker' }, function (\n ws,\n base\n ) {\n function morph (x) {\n // Move any URIs in this space into that space\n if (x.elements !== undefined) return x.elements.map(morph) // Morph within lists\n if (x.uri === undefined) return x\n let u = x.uri\n if (u === stateStore.uri) return newStore // special case\n if (u.slice(0, oldBase.length) === oldBase) {\n u = base + u.slice(oldBase.length)\n }\n return kb.sym(u)\n }\n\n const appPathSegment = 'issuetracker.w3.org' // how to allocate this string and connect to\n // console.log(\"Ready to make new instance at \"+ws)\n const sp = UI.ns.space\n const kb = context.session.store\n\n if (!base) {\n base = kb.any(ws, sp('uriPrefix')).value\n if (base.slice(-1) !== '/') {\n $rdf.log.error(\n appPathSegment + ': No / at end of uriPrefix ' + base\n )\n base = base + '/'\n }\n base += appPathSegment + '/' + timestring() + '/' // unique id\n if (!confirm('Make new tracker at ' + base + '?')) {\n return\n }\n }\n\n const stateStore = kb.any(thisTracker, ns.wf('stateStore'))\n const newStore = kb.sym(base + 'store.ttl')\n\n const here = thisTracker.doc()\n\n const oldBase = here.uri.slice(0, here.uri.lastIndexOf('/') + 1)\n\n const there = morph(here)\n const newTracker = morph(thisTracker)\n\n const myConfig = kb.statementsMatching(\n undefined,\n undefined,\n undefined,\n here\n )\n for (let i = 0; i < myConfig.length; i++) {\n const st = myConfig[i]\n kb.add(\n morph(st.subject),\n morph(st.predicate),\n morph(st.object),\n there\n )\n }\n\n // Keep a paper trail @@ Revisit when we have non-public ones @@ Privacy\n //\n kb.add(newTracker, UI.ns.space('inspiration'), thisTracker, stateStore)\n\n kb.add(newTracker, UI.ns.space('inspiration'), thisTracker, there)\n\n // $rdf.log.debug(\"\\n Ready to put \" + kb.statementsMatching(undefined, undefined, undefined, there)); //@@\n\n updater.put(\n there,\n kb.statementsMatching(undefined, undefined, undefined, there),\n 'text/turtle',\n function (uri2, ok, message) {\n if (ok) {\n updater.put(newStore, [], 'text/turtle', function (\n uri3,\n ok,\n message\n ) {\n if (ok) {\n console.info(\n 'Ok The tracker created OK at: ' +\n newTracker.uri +\n '\\nMake a note of it, bookmark it. '\n )\n } else {\n console.log(\n 'FAILED to set up new store at: ' +\n newStore.uri +\n ' : ' +\n message\n )\n }\n })\n } else {\n console.log(\n 'FAILED to save new tracker at: ' + there.uri + ' : ' + message\n )\n }\n }\n )\n\n // Created new data files.\n // @@ Now create initial files - html skin, (Copy of mashlib, css?)\n // @@ Now create form to edit configuation parameters\n // @@ Optionally link new instance to list of instances -- both ways? and to child/parent?\n // @@ Set up access control for new config and store.\n }) // callback to newAppInstance\n button.classList.add('trackerNewTrackerButton')\n return button\n} // newTrackerButton\n","// A Button to copy the state of the tracker in CSV format\n// Comma-separated Values\n//\n// Yes this mixes the layers but that is not all bad if it gets it in one file\n// one can look at\n\nimport { icons, ns, utils, widgets } from 'solid-ui'\nimport { store } from 'solid-logic'\n\nexport function quoteString (value) {\n // https://www.rfc-editor.org/rfc/rfc4180\n const stripped = value.replaceAll('\\n', ' ')\n if (!stripped.includes(',')) {\n return stripped\n } // If contains comma then put in quotes and double up internal quotes\n const quoted = '\"' + stripped.replaceAll('\"', '\"\"') + '\"'\n console.log('Quoted: >>>' + quoted + '<<<')\n const check = quoted.slice(1, -1).replaceAll('\"\"', '')\n if (check.includes('\"')) throw new Error('CSV inconsistecy')\n return quoted\n}\n\nexport function csvText (store, tracker) {\n function columnText (task, column) {\n let thing\n if (column.predicate) {\n thing = store.any(task, column.predicate)\n return thing ? thing.value : '--'\n } else if (column.category) {\n const types = store.each(task, ns.rdf('type'))\n for (const t of types) {\n // console.log('@@ checking subclass type: ', t, ' category: ', column.category )\n if (store.holds(t, ns.rdfs('subClassOf'), column.category)) {\n thing = t\n }\n }\n if (!thing) return '?' + utils.label(column.category) // Missing cat OK\n // if (!thing) throw new Error('wot no class of category ', column.category)\n } else {\n throw new Error('wot no pred or cat', column)\n }\n return utils.label(thing)\n }\n\n function taskLine (task) {\n return columns.map(column => columnText(task, column))\n .map(quoteString)\n .join(',') + '\\n'\n }\n const stateStore = store.any(tracker, ns.wf('stateStore'))\n const tasks = store.each(null, ns.wf('tracker'), tracker, stateStore)\n console.log(' CSV: Tasks:', tasks.length)\n\n const columns = [\n\n { label: 'Name', predicate: ns.dc('title') },\n /* { label: 'Description', predicate: ns.wf('description') }, */\n\n /* { label: 'State', category: ns.wf('Task') }\n */\n ]\n const states = store.any(tracker, ns.wf('issueClass')) // Main states are subclasses of this class\n console.log(' CSV: States - main superclass:', states)\n const stateColumn = { label: 'State', category: states } // better than 'task'\n console.log(' CSV: found column from state', stateColumn)\n columns.push(stateColumn)\n\n const categories = store.each(tracker, ns.wf('issueCategory'))\n console.log(' CSV: Categories : ', categories)\n console.log(' CSV: Categories : length: ', categories.length)\n console.log(' CSV: Categories : first: ', categories[0])\n\n const classifications = categories\n for (const c of classifications) {\n const column = { label: utils.label(c), category: c }\n console.log(' CSV: found column from classifications', column)\n columns.push(column) // Classes are different\n }\n\n // const propertyList = ns.wf('propertyList')\n const form = store.any(tracker, ns.wf('extrasEntryForm'), null, null)\n console.log(' CSV: Form : ', form)\n\n if (form) {\n const parts = store.any(form, ns.ui('parts'), null, form.doc())\n console.log(' CSV: parts : ', parts)\n\n const fields = parts.elements\n console.log(' CSV: fields : ', fields)\n\n for (const field of fields) {\n const prop = store.any(field, ns.ui('property'))\n if (prop) {\n const lab = utils.label(prop)\n const column = { label: lab, predicate: prop }\n console.log(' CSV: found column from form', column)\n columns.push(column)\n }\n }\n }\n // Put description on the end as it can be long\n columns.push({ label: 'Description', predicate: ns.wf('description') })\n console.log('Columns: ', columns.length)\n const header = columns.map(col => col.label).join(',') + '\\n'\n console.log('CSV: Header= ', header)\n // Order tasks?? By Creation date? By Status?\n const body = tasks.map(taskLine).join('')\n return header + body\n}\n\nexport function csvButton (dom, tracker) {\n const wrapper = dom.createElement('div')\n // Add a button\n const button = widgets.button(dom, icons.iconBase + 'noun_Document_998605.svg',\n 'Copy as CSV', async _event => {\n const div = button.parentNode.parentNode\n console.log('button gparent div', div)\n div.addEventListener('copy', event => {\n // alert ('Copy caught');\n const csv = csvText(store, tracker)\n event.clipboardData.setData('text/plain', csv)\n event.clipboardData.setData('text/csv', csv)\n alert('Copy data: ' + csv)\n event.preventDefault()\n })\n })\n\n wrapper.appendChild(button)\n return wrapper\n}\n","\n import API from \"!../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import domAPI from \"!../../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n import insertFn from \"!../../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n import setAttributes from \"!../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n import insertStyleElement from \"!../../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n import styleTagTransformFn from \"!../../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n import content, * as namedExport from \"!!../../node_modules/css-loader/dist/cjs.js!./csvButton.css\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\noptions.insert = insertFn.bind(null, \"head\");\noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../node_modules/css-loader/dist/cjs.js!./csvButton.css\";\n export default content && content.locals ? content.locals : undefined;\n","\n import API from \"!../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import domAPI from \"!../../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n import insertFn from \"!../../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n import setAttributes from \"!../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n import insertStyleElement from \"!../../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n import styleTagTransformFn from \"!../../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n import content, * as namedExport from \"!!../../node_modules/css-loader/dist/cjs.js!./issuePane.css\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\noptions.insert = insertFn.bind(null, \"head\");\noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../node_modules/css-loader/dist/cjs.js!./issuePane.css\";\n export default content && content.locals ? content.locals : undefined;\n","/* Issue Tracker Pane\n **\n ** This solid view allows a user to interact with an issue tracker, or individual issue,\n ** to change its state according to an ontology, comment on it, etc.\n **\n */\n\nimport { create, login, ns, icons, tabs, table, utils, widgets } from 'solid-ui'\nimport { store, authn } from 'solid-logic'\nimport { board } from './board' // @@ will later be in solid-UI\nimport { renderIssue, renderIssueCard, getState, exposeOverlay } from './issue'\nimport { newTrackerButton } from './newTracker'\nimport { newIssueForm } from './newIssue'\nimport { csvButton } from './csvButton'\nimport { trackerSettingsFormText } from './ontology/trackerSettingsForm.ttl'\nimport * as $rdf from 'rdflib'\nimport './styles/issue.css'\nimport './styles/board.css'\nimport './styles/newTracker.css'\nimport './styles/newIssue.css'\nimport './styles/csvButton.css'\nimport './styles/issuePane.css'\n\nconst kb = store\n\n// const MY_TRACKERS_ICON = UI.icons.iconBase + 'noun_Document_998605.svg'\n// const TRACKER_ICON = UI.icons.iconBase + 'noun_list_638112'\n// const TASK_ICON = UI.icons.iconBase + 'noun_17020.svg'\n\nconst OVERFLOW_CLASS = 'trackerIssuePaneOverflow'\n\nexport default {\n icon: icons.iconBase + 'noun_122196.svg', // was: js/panes/issue/tbl-bug-22.png\n // noun_list_638112 is a checklist document\n // noun_Document_998605.svg is a stack of twpo checklists\n // noun_97839.svg is a ladybug\n // noun_122196.svg is a clipboard with a check list on it\n // noun_17020.svg is a single check box\n name: 'issue',\n\n audience: [], // Anyone. was [ns.solid('PowerUser')]\n\n // Does the subject deserve an issue pane?\n label: function (subject, _context) {\n const t = kb.findTypeURIs(subject)\n if (\n t['http://www.w3.org/2005/01/wf/flow#Task'] ||\n kb.holds(subject, ns.wf('tracker'))\n ) { return 'issue' } // in case ontology not available\n if (t['http://www.w3.org/2005/01/wf/flow#Tracker']) return 'tracker'\n // Later: Person. For a list of things assigned to them,\n // open bugs on projects they are developer on, etc\n return null // No under other circumstances (while testing at least!)\n },\n\n mintClass: ns.wf('Tracker'),\n\n mintNew: async function (context, options) {\n /** Perform updates on more than one document @@ Move to rdflib!\n */\n async function updateMany (deletions, insertions) {\n const docs = deletions.concat(insertions).map(st => st.why)\n const uniqueDocs = Array.from(new Set(docs))\n const updates = uniqueDocs.map(doc =>\n kb.updater.update(deletions.filter(st => st.why.sameTerm(doc)),\n insertions.filter(st => st.why.sameTerm(doc))))\n return Promise.all(updates)\n }\n\n const kb = context.session.store\n let stateStore\n if (options.newInstance) {\n stateStore = kb.sym(options.newInstance.doc().uri + '_state.ttl')\n } else {\n options.newInstance = kb.sym(options.newBase + 'index.ttl#this')\n stateStore = kb.sym(options.newBase + 'state.ttl')\n }\n const tracker = options.newInstance\n const appDoc = tracker.doc()\n\n const me = authn.currentUser()\n if (me) {\n kb.add(tracker, ns.dc('author'), me, appDoc)\n }\n\n kb.add(tracker, ns.rdf('type'), ns.wf('Tracker'), appDoc)\n kb.add(tracker, ns.dc('created'), new Date(), appDoc)\n\n // @@ to do --- adk user what sort of tracker they want\n\n kb.add(tracker, ns.wf('issueClass'), ns.wf('Task'), appDoc) // @@ ask user\n kb.add(tracker, ns.wf('initialState'), ns.wf('Open'), appDoc)\n kb.add(tracker, ns.wf('stateStore'), stateStore, appDoc)\n kb.add(tracker, ns.wf('assigneeClass'), ns.foaf('Person'), appDoc) // @@ set to people in the meeting?\n\n kb.add(tracker, ns.wf('stateStore'), stateStore, stateStore) // Back Link\n\n const ins = kb.statementsMatching(undefined, undefined, undefined, appDoc).concat(kb.statementsMatching(undefined, undefined, undefined, stateStore))\n try {\n await updateMany([], ins)\n } catch (err) {\n return widgets.complain(context, 'Error writing tracker configuration: ' + err)\n }\n /*\n try {\n await kb.updater.updateMany([], kb.statementsMatching(undefined, undefined, undefined, stateStore))\n } catch (err) {\n return widgets.complain(context, 'Error writing tracker state file: ' + err)\n }\n */\n const dom = context.dom\n const div = options.div\n\n const notice = div.appendChild(dom.createElement('div'))\n notice.innerHTML = `<h4>Success</h4>\n <p>Your <a href=\"${tracker.uri}\">new tracker</a> has been made.\n Use the settings tab to configure it.\n </p>\n `\n // console.log('New tracker created ' + tracker)\n // alert('New tracker created')\n return options\n },\n\n render: function (subject, context) {\n const dom = context.dom\n\n const paneDiv = dom.createElement('div')\n context.paneDiv = paneDiv\n paneDiv.setAttribute('class', 'issuePane')\n\n function complain (message) {\n console.warn(message)\n paneDiv.appendChild(widgets.errorMessageBlock(dom, message))\n }\n\n function complainIfBad (ok, message) {\n if (!ok) {\n complain(message)\n }\n }\n\n /** Infer subclass from disjoint Union\n **\n ** This is would not be needed if our quey language\n ** allowed is to query ardf Collection membership.\n */\n async function fixSubClasses (kb, tracker) { // 20220228\n async function checkOneSuperclass (klass) {\n const collection = kb.any(klass, ns.owl('disjointUnionOf'), null, doc)\n if (!collection) throw new Error(`Classification ${klass} has no disjointUnionOf`)\n if (!collection.elements) throw new Error(`Classification ${klass} has no array`)\n const needed = new Set(collection.elements.map(x => x.uri))\n const existing = new Set(kb.each(null, ns.rdfs('subClassOf'), klass, doc).map(x => x.uri))\n\n const superfluous = [...existing].filter(sub => !needed.has(sub))\n const deleteActions = superfluous.map(sub => { return { action: 'delete', st: $rdf.st(kb.sym(sub), ns.rdfs('subClassOf'), klass, doc) } })\n\n const missing = [...needed].filter(sub => !existing.has(sub))\n const insertActions = missing.map(sub => { return { action: 'insert', st: $rdf.st(kb.sym(sub), ns.rdfs('subClassOf'), klass, doc) } })\n return deleteActions.concat(insertActions)\n }\n const doc = tracker.doc()\n const states = kb.any(tracker, ns.wf('issueClass'))\n const cats = kb.each(tracker, ns.wf('issueCategory')).concat([states])\n let damage = [] // to make totally functionaly need to deal with map over async.\n for (const klass of cats) {\n damage = damage.concat(await checkOneSuperclass(klass))\n }\n if (damage.length) {\n const insertables = damage.filter(fix => fix.action === 'insert').map(fix => fix.st)\n const deletables = damage.filter(fix => fix.action === 'delete').map(fix => fix.st)\n // alert(`Internal error: s${damage} subclasses inconsistences!`)\n console.log('Damage:', damage)\n if (confirm(`Fix ${damage} inconsistent subclasses in tracker config?`)) {\n await kb.updater.update(deletables, insertables)\n }\n }\n }\n\n /** /////////////////////////// Board\n */\n function renderBoard (tracker, klass) {\n const states = kb.any(tracker, ns.wf('issueClass'))\n klass = klass || states // default to states\n const doingStates = klass.sameTerm(states)\n\n // These are states we will show by default: the open issues.\n const stateArray = kb.any(klass, ns.owl('disjointUnionOf'))\n\n if (!stateArray) {\n return complain(`Configuration error: state ${states} does not have substates`)\n }\n let columnValues = stateArray.elements\n if (doingStates && columnValues.length > 2 // and there are more than two\n ) { // strip out closed states\n columnValues = columnValues.filter(state => kb.holds(state, ns.rdfs('subClassOf'), ns.wf('Open')) || state.sameTerm(ns.wf('Open')))\n }\n\n async function columnDropHandler (issue, newState) {\n const currentState = getState(issue, klass)\n const tracker = kb.the(issue, ns.wf('tracker'), null, issue.doc())\n const stateStore = kb.any(tracker, ns.wf('stateStore'))\n\n if (newState.sameTerm(currentState)) {\n // alert('Same state ' + utils.label(currentState)) // @@ remove\n return\n }\n try {\n await kb.updater.update(\n [$rdf.st(issue, ns.rdf('type'), currentState, stateStore)],\n [$rdf.st(issue, ns.rdf('type'), newState, stateStore)])\n } catch (err) {\n widgets.complain(context, 'Unable to change issue state: ' + err)\n }\n boardDiv.refresh() // reorganize board to match the new reality\n }\n\n function isOpen (issue) {\n const types = kb.findTypeURIs(issue)\n return !!types[ns.wf('Open').uri]\n }\n\n const options = { columnDropHandler, filter: doingStates ? null : isOpen }\n options.sortBy = ns.dct('created')\n options.sortReverse = true\n function localRenderIssueCard (issue) {\n return renderIssueCard(issue, context)\n }\n // const columnValues = states // @@ optionally selected states would work\n const boardDiv = board(dom, columnValues, localRenderIssueCard, options)\n boardDiv.classList.add('trackerBoard')\n return boardDiv\n }\n\n /** ////////////// Table\n */\n function tableRefreshButton (stateStore, tableDiv) {\n const refreshButton = widgets.button(dom, icons.iconBase + 'noun_479395.svg',\n 'refresh table', async _event => {\n try {\n await kb.fetcher.load(stateStore, { force: true, clearPreviousData: true })\n } catch (err) {\n alert(err)\n return\n }\n widgets.refreshTree(tableDiv)\n })\n return refreshButton\n }\n\n function renderTable (tracker) {\n function newOptionalClause () {\n const clause = new $rdf.IndexedFormula()\n query.pat.optional.push(clause)\n return clause\n }\n const states = kb.any(subject, ns.wf('issueClass'))\n const cats = kb.each(tracker, ns.wf('issueCategory')) // zero or more\n const vars = ['issue', 'state', 'created']\n const query = new $rdf.Query(utils.label(subject))\n for (let i = 0; i < cats.length; i++) {\n vars.push('_cat_' + i)\n }\n const v = {} // The RDF variable objects for each variable name\n vars.forEach(function (x) {\n query.vars.push((v[x] = $rdf.variable(x)))\n })\n query.pat.add(v.issue, ns.wf('tracker'), tracker)\n // query.pat.add(v['issue'], ns.dc('title'), v['title'])\n query.pat.add(v.issue, ns.dct('created'), v.created)\n query.pat.add(v.issue, ns.rdf('type'), v.state)\n query.pat.add(v.state, ns.rdfs('subClassOf'), states)\n\n query.pat.optional = []\n\n for (let i = 0; i < cats.length; i++) {\n const clause = newOptionalClause()\n clause.add(v.issue, ns.rdf('type'), v['_cat_' + i])\n clause.add(v['_cat_' + i], ns.rdfs('subClassOf'), cats[i])\n }\n\n const propertyList = kb.any(tracker, ns.wf('propertyList')) // List of extra properties\n if (propertyList) {\n const properties = propertyList.elements\n for (let p = 0; p < properties.length; p++) {\n const prop = properties[p]\n let vname = '_prop_' + p\n if (prop.uri.indexOf('#') >= 0) {\n vname = prop.uri.split('#')[1]\n }\n const oneOpt = newOptionalClause()\n query.vars.push((v[vname] = $rdf.variable(vname)))\n oneOpt.add(v.issue, prop, v[vname])\n }\n }\n\n const selectedStates = {}\n const possible = kb.each(undefined, ns.rdfs('subClassOf'), states)\n possible.forEach(function (s) {\n if (\n kb.holds(s, ns.rdfs('subClassOf'), ns.wf('Open')) ||\n s.sameTerm(ns.wf('Open'))\n ) {\n selectedStates[s.uri] = true\n // console.log('on '+s.uri); // @@\n }\n })\n\n function exposeThisOverlay (href) {\n const subject = $rdf.sym(href)\n exposeOverlay(subject, context)\n }\n\n const tableDiv = table(dom, {\n query,\n keyVariable: '?issue', // Charactersic of row\n sortBy: '?created', // By default, sort by date\n sortReverse: true, // most recent at the top\n hints: {\n '?issue': { linkFunction: exposeThisOverlay, label: 'Title' },\n '?created': { cellFormat: 'shortDate' },\n '?state': { initialSelection: selectedStates, label: 'Status' }\n }\n })\n const stateStore = kb.any(subject, ns.wf('stateStore'))\n tableDiv.appendChild(tableRefreshButton(stateStore, tableDiv))\n tableDiv.classList.add('trackerBoardTable')\n return tableDiv\n }\n\n // Allow user to create new things within the folder\n function renderCreationControl (refreshTarget) {\n const creationDiv = dom.createElement('div')\n const me = authn.currentUser()\n const creationContext = {\n // folder: subject,\n div: creationDiv,\n dom,\n noun: 'tracker',\n statusArea: creationDiv,\n me,\n refreshTarget\n }\n const issuePane = context.session.paneRegistry.byName('issue')\n const relevantPanes = [issuePane]\n create.newThingUI(creationContext, context, relevantPanes) // Have to pass panes down newUI\n creationDiv.classList.add('trackerCreationControlContainer')\n return creationDiv\n }\n\n function renderInstances (theClass) {\n const instancesDiv = dom.createElement('div')\n const context = { dom, div: instancesDiv, noun: 'tracker' }\n login.registrationList(context, { public: true, private: true, type: theClass }).then(_context2 => {\n instancesDiv.appendChild(renderCreationControl(instancesDiv))\n /* // keep this code in case we need a form\n const InstancesForm = ns.wf('TrackerInstancesForm')\n const text = trackerInstancesFormText\n $rdf.parse(text, kb, InstancesForm.doc().uri, 'text/turtle')\n widgets.appendForm(dom, instancesDiv, {}, tracker, InstancesForm,\n tracker.doc(), complainIfBad)\n */\n })\n return instancesDiv\n }\n function renderSettings (tracker) {\n const settingsDiv = dom.createElement('div')\n settingsDiv.appendChild(csvButton(dom, tracker)) // Button to copy the tracker as a CSV file\n const states = kb.any(tracker, ns.wf('issueClass'))\n const views = [tableView, states] // Possible default views\n .concat(kb.each(tracker, ns.wf('issueCategory')))\n const box = settingsDiv.appendChild(dom.createElement('div'))\n const lhs = widgets.renderNameValuePair(dom, kb, box, null, 'Default view') // @@ use a predicate?\n lhs.appendChild(widgets.makeSelectForOptions(dom, kb, tracker,\n ns.wf('defaultView'),\n views, {}, tracker.doc()))\n\n // A registration control allows the to record this tracker in their type index\n const context = { dom, div: settingsDiv, noun: 'tracker' }\n login.registrationControl(context, tracker, ns.wf('Tracker')).then(_context2 => {\n const settingsForm = ns.wf('TrackerSettingsForm')\n const text = trackerSettingsFormText\n $rdf.parse(text, kb, settingsForm.doc().uri, 'text/turtle')\n widgets.appendForm(dom, settingsDiv, {}, tracker, settingsForm,\n tracker.doc(), complainIfBad)\n })\n return settingsDiv\n }\n\n function renderTabsTableAndBoard () {\n function renderMain (ele, object) {\n ele.innerHTML = '' // Clear out \"loading message\"\n if (object.sameTerm(boardView)) {\n ele.appendChild(renderBoard(tracker))\n } else if (object.sameTerm(tableView)) {\n ele.appendChild(renderTable(tracker))\n } else if (object.sameTerm(settingsView)) {\n ele.appendChild(renderSettings(tracker))\n } else if (object.sameTerm(instancesView)) {\n ele.appendChild(renderInstances(ns.wf('Tracker')))\n } else if ((kb.holds(tracker, ns.wf('issueCategory'), object)) ||\n (kb.holds(tracker, ns.wf('issueClass'), object))) {\n ele.appendChild(renderBoard(tracker, object))\n } else {\n throw new Error('Unexpected tab type: ' + object)\n }\n }\n const states = kb.any(tracker, ns.wf('issueClass'))\n const items = [instancesView, tableView, states]\n .concat(kb.each(tracker, ns.wf('issueCategory')))\n items.push(settingsView)\n const selectedTab = kb.any(tracker, ns.wf('defaultView'), null, tracker.doc()) || tableView\n const options = { renderMain, items, selectedTab }\n\n // Add stuff to the ontologies which we believe but they don't say\n const doc = instancesView.doc()\n kb.add(instancesView, ns.rdfs('label'), 'My Trackers', doc) // @@ squatting on wf ns\n kb.add(settingsView, ns.rdfs('label'), 'Settings', doc) // @@ squatting on wf ns\n kb.add(states, ns.rdfs('label'), 'By State', doc) // @@ squatting on wf ns\n\n const myTabs = tabs.tabWidget(options)\n return myTabs\n }\n\n async function renderSingleIssue () {\n tracker = kb.any(subject, ns.wf('tracker'))\n if (!tracker) throw new Error('This issue ' + subject + 'has no tracker')\n\n // Much data is in the tracker instance, so wait for the data from it\n try {\n // eslint-disable-next-line no-unused-vars\n const _xhrs = await context.session.store.fetcher.load(tracker.doc())\n } catch (err) {\n const msg = 'Failed to load tracker config ' + tracker.doc() + ': ' + err\n return complain(msg)\n }\n\n const stateStore = kb.any(tracker, ns.wf('stateStore'))\n if (!stateStore) {\n return complain('Tracker has no state store: ' + tracker)\n }\n try {\n await context.session.store.fetcher.load(subject)\n } catch (err) {\n return complain('Failed to load issue state ' + stateStore + ': ' + err)\n }\n paneDiv.appendChild(renderIssue(subject, context))\n updater.addDownstreamChangeListener(stateStore, function () {\n widgets.refreshTree(paneDiv)\n }) // Live update\n }\n\n async function renderTracker () {\n function showNewIssue (issue) {\n widgets.refreshTree(paneDiv)\n exposeOverlay(issue, context)\n newIssueButton.disabled = false // https://stackoverflow.com/questions/41176582/enable-disable-a-button-in-pure-javascript\n }\n tracker = subject\n\n try {\n await fixSubClasses(kb, tracker)\n } catch (err) {\n console.log('@@@ Error fixing subclasses in config: ' + err)\n }\n\n const states = kb.any(subject, ns.wf('issueClass'))\n if (!states) throw new Error('This tracker has no issueClass')\n const stateStore = kb.any(subject, ns.wf('stateStore'))\n if (!stateStore) throw new Error('This tracker has no stateStore')\n\n // const me = await authn.currentUser()\n\n const h = dom.createElement('h2')\n h.setAttribute('style', 'font-size: 150%')\n paneDiv.appendChild(h)\n const classLabel = utils.label(states)\n h.appendChild(dom.createTextNode(classLabel + ' list')) // Use class label @@I18n\n\n // New Issue button\n const newIssueButton = dom.createElement('button')\n const container = dom.createElement('div')\n newIssueButton.setAttribute('type', 'button')\n newIssueButton.classList.add('trackerIssuePaneNewIssueButton')\n container.classList.add('trackerIssuePaneNewIssueButtonContainer')\n container.appendChild(newIssueButton)\n paneDiv.appendChild(container)\n const img = dom.createElement('img')\n img.classList.add('trackerIssuePaneNewIssueButtonImage')\n img.setAttribute('src', icons.iconBase + 'noun_19460_green.svg')\n newIssueButton.appendChild(img)\n const span = dom.createElement('span')\n span.classList.add('trackerIssuePaneNewIssueButtonText')\n span.innerHTML = 'New ' + classLabel\n newIssueButton.appendChild(span)\n newIssueButton.addEventListener(\n 'click',\n function (_event) {\n newIssueButton.disabled = true\n container.appendChild(newIssueForm(dom, kb, tracker, null, showNewIssue))\n },\n false\n )\n\n // Table of issues - when we have the main issue list\n // We also need the ontology loaded\n //\n context.session.store.fetcher\n .load([stateStore])\n .then(function (_xhrs) {\n const tableDiv = renderTabsTableAndBoard(tracker)\n // const tableDiv = renderTable(tracker) // was\n paneDiv.appendChild(tableDiv)\n\n if (tableDiv.refresh) {\n // Refresh function\n } else {\n console.log('No table refresh function?!')\n }\n paneDiv.appendChild(newTrackerButton(subject, context))\n updater.addDownstreamChangeListener(stateStore, tableDiv.refresh) // Live update\n })\n .catch(function (err) {\n return console.log('Cannot load state store: ' + err)\n })\n // end of Tracker instance\n } // render tracker\n\n /* Render tabs with both views\n */\n const boardView = ns.wf('BoardView')\n const tableView = ns.wf('TableView')\n const settingsView = ns.wf('SettingsView')\n const instancesView = ns.wf('InstancesView')\n\n const updater = kb.updater\n const t = kb.findTypeURIs(subject)\n let tracker\n\n // Whatever we are rendering, lets load the ontology\n const flowOntology = ns.wf('').doc()\n if (!kb.holds(undefined, undefined, undefined, flowOntology)) {\n // If not loaded already\n $rdf.parse(require('./ontology/wf.ttl'), kb, flowOntology.uri, 'text/turtle') // Load ontology directly\n }\n const userInterfaceOntology = ns.ui('').doc()\n if (!kb.holds(undefined, undefined, undefined, userInterfaceOntology)) {\n // If not loaded already\n $rdf.parse(require('./ontology/ui.ttl'), kb, userInterfaceOntology.uri, 'text/turtle') // Load ontology directly\n }\n\n // Render a single issue\n if (\n t['http://www.w3.org/2005/01/wf/flow#Task'] ||\n kb.holds(subject, ns.wf('tracker'))\n ) {\n renderSingleIssue().then(() => console.log('Single issue rendered'))\n } else if (t['http://www.w3.org/2005/01/wf/flow#Tracker']) {\n // Render a Tracker instance\n renderTracker().then(() => console.log('Tracker rendered'))\n } else {\n console.log(\n 'Error: Issue pane: No evidence that ' +\n subject +\n ' is either a bug or a tracker.'\n )\n }\n\n let loginOutButton\n const overlay = paneDiv.appendChild(dom.createElement('div'))\n overlay.classList.add(OVERFLOW_CLASS)\n context.overlay = overlay\n overlay.style.visibility = 'hidden'\n\n authn.checkUser().then(webId => {\n if (webId) {\n console.log('Web ID set already: ' + webId)\n context.me = webId\n // @@ enable things\n return\n }\n\n loginOutButton = login.loginStatusBox(dom, webIdUri => {\n if (webIdUri) {\n context.me = kb.sym(webIdUri)\n console.log('Web ID set from login button: ' + webIdUri)\n paneDiv.removeChild(loginOutButton)\n // enable things\n } else {\n context.me = null\n }\n })\n\n loginOutButton.classList.add('trackerIssuePaneLoginButton')\n paneDiv.appendChild(loginOutButton)\n if (!context.statusArea) {\n context.statusArea = paneDiv.appendChild(dom.createElement('div'))\n }\n })\n\n return paneDiv\n }\n}\n","/** A Board of vertical columns\n *\n * Like a github \"project\", or a kanbam board, a board allows\n * you to triage stuff into simple cateories.\n *\n * if an object is added in a refresh, then a new column should be added if needed\n * if its value is previously unseen\n * (Should the coluimn order be defined by user or caller?)\n *\n * @returns dom:Element\n*/\n\nimport { ns, utils, widgets } from 'solid-ui'\nimport { store } from 'solid-logic'\nimport * as $rdf from 'rdflib'\nimport './styles/board.css'\n\nexport function board (dom, columnValues, renderItem, options) {\n const board = dom.createElement('div')\n board.classList.add('trackerBoard')\n const table = board.appendChild(dom.createElement('table'))\n table.classList.add('trackerBoardTable')\n\n const headerRow = table.appendChild(dom.createElement('tr'))\n headerRow.classList.add('trackerBoardHeader')\n const mainRow = table.appendChild(dom.createElement('tr'))\n mainRow.classList.add('trackerBoardMainRow')\n columnValues.forEach(x => {\n const cell = headerRow.appendChild(dom.createElement('th'))\n cell.classList.add('trackerBoardHeaderCell')\n cell.textContent = utils.label(x, true) // Initial capital\n cell.subject = x\n\n const column = mainRow.appendChild(dom.createElement('td'))\n column.classList.add('trackerBoardColumn')\n column.subject = x\n\n function droppedURIHandler (uris) {\n uris.forEach(function (u) {\n console.log('Dropped on column: ' + u)\n const item = store.sym(u)\n options.columnDropHandler(item, x)\n })\n }\n\n if (options.columnDropHandler) {\n widgets.makeDropTarget(column, droppedURIHandler)\n }\n })\n\n /* Each item on the board\n * normally App will override this\n */\n function defaultRenderItem (item, category) {\n const card = dom.createElement('div')\n card.classList.add('trackerBoardCard')\n const table = card.appendChild(dom.createElement('table'))\n table.classList.add('trackerBoardCardTable')\n const classes = store.each(item, ns.rdf('type'))\n const catColors = classes.map(cat => store.any(cat, ns.ui('backgroundColor'))).filter(c => c)\n\n table.appendChild(widgets.personTR(dom, null, item))\n table.subject = item\n\n const backgroundColor = catColors[0] || store.any(category, ns.ui('backgroundColor'))\n card.style.backgroundColor = backgroundColor ? backgroundColor.value : '#fff'\n return card\n }\n\n function sortedBy (values, predicate, defaultSortValue, reverse) {\n const toBeSorted = values.map(x => [store.any(x, predicate) || defaultSortValue, x])\n toBeSorted.sort()\n if (reverse) toBeSorted.reverse() // @@ check\n return toBeSorted.map(pair => pair[1])\n }\n board.refresh = function () {\n const now = new $rdf.Literal(new Date())\n const actualRenderItem = renderItem || options.renderItem || defaultRenderItem\n function localRenderItem (subject) {\n const ele = actualRenderItem(subject)\n widgets.makeDraggable(ele, subject)\n ele.subject = subject\n return ele\n }\n for (let col = mainRow.firstChild; col; col = col.nextSibling) {\n const category = col.subject\n let items = store.each(null, ns.rdf('type'), category)\n const sortBy = options.sortBy || ns.dct('created')\n if (options.filter) {\n items = items.filter(options.filter)\n }\n const sortedItems = sortedBy(items, sortBy, now, true)\n utils.syncTableToArrayReOrdered(col, sortedItems, localRenderItem)\n }\n }\n\n // kb.query(query, addCellFromBindings, undefined, whenDone) // Populate the board\n board.refresh()\n return board\n}\n"],"names":["root","factory","exports","module","require","define","amd","this","__WEBPACK_EXTERNAL_MODULE__426__","__WEBPACK_EXTERNAL_MODULE__663__","__WEBPACK_EXTERNAL_MODULE__264__","___CSS_LOADER_EXPORT___","push","id","cssWithMappingToString","list","toString","map","item","content","needLayer","concat","length","join","i","modules","media","dedupe","supports","layer","undefined","alreadyImportedModules","k","_k","cssMapping","btoa","base64","unescape","encodeURIComponent","JSON","stringify","data","sourceMapping","stylesInDOM","getIndexByIdentifier","identifier","result","modulesToDom","options","idCountMap","identifiers","base","count","indexByIdentifier","obj","css","sourceMap","references","updater","addElementStyle","byIndex","splice","api","domAPI","update","newObj","remove","lastIdentifiers","newList","index","newLastIdentifiers","_i","_index","memo","insert","style","target","styleTarget","document","querySelector","window","HTMLIFrameElement","contentDocument","head","e","getTarget","Error","appendChild","element","createElement","setAttributes","attributes","styleElement","nonce","setAttribute","insertStyleElement","styleTagTransform","apply","parentNode","removeChild","removeStyleElement","styleSheet","cssText","firstChild","createTextNode","__webpack_module_cache__","__webpack_require__","moduleId","cachedModule","__webpack_modules__","n","getter","__esModule","d","a","definition","key","o","Object","defineProperty","enumerable","get","prop","prototype","hasOwnProperty","call","nc","locals","newIssueForm","dom","kb","tracker","superIssue","showNewIssue","onCancel","form","classList","add","stateStore","any","ns","wf","sendNewIssue","titlefield","disabled","sts","template","anyValue","issue","sym","now","$rdf","Date","nnnn","getTime","YYYY","value","slice","MM","DD","replace","expandTemplate","uri","issueDoc","doc","title","literal","dc","dct","initialStates","each","rdf","state","rdfs","success","body","console","log","states","classLabel","utils","label","header","textContent","closeButton","addEventListener","select","keyCode","focus","store","TASK_ICON","icons","iconBase","CLOSED_TASK_ICON","iconForIssue","findTypeURIs","isOpen","getBackgroundColorFromTypes","catColors","cat","ui","filter","c","renderIssueCard","context","refresh","backgroundColor","card","editButton","uncategorized","table","widgets","personTR","draggable","subject","buttonsCell","children","button","async","exposeOverlay","editButtonImage","width","height","deleteButton","deleteButtonWithCheck","connectedStatements","err","message","warn","paneDiv","errorMessageBlock","complain","refreshTree","overlay","innerHTML","issuePanel","renderIssue","visibility","renderSpacer","spacer","setModifiedDate","subj","say","pre","issueDiv","complainIfBad","ok","getOption","option","opt","the","authn","currentUser","mystyle","mystyle0","setPaneStyle","checkUser","iconButton","makeDraggable","makeSelectForCategory","cats","openHrefInOutlineMode","CORE_ISSUE_FORM","appendForm","assignments","statementsMatching","deletions","renderSubIssue","link","supersOver","stack","sup","devGroups","fetcher","load","groupDevs","group","vcard","flat","proj","doap","projectDevs","getPossibleAssignees","then","devs","forEach","person","lookUpThing","opts","nullLabel","makeSelectForOptions","subIssuePanel","listOfSupers","supers","syncTableToArrayReOrdered","listOfSubs","subs","b","_event","insertBefore","nextSibling","extrasForm","messageStore","nowOrWhenFetched","_xhr","discussion","messageArea","er","attachmentHint","uploadFolderURI","endsWith","dir","split","attachmentList","promptIcon","uploadFolder","predicate","color","refreshButton","force","clearPreviousData","alert","UI","newTrackerButton","thisTracker","newAppInstance","noun","ws","morph","x","elements","u","newStore","oldBase","appPathSegment","sp","space","session","error","confirm","here","lastIndexOf","there","newTracker","myConfig","st","object","put","uri2","uri3","info","quoteString","stripped","replaceAll","includes","quoted","csvText","tasks","columns","stateColumn","category","categories","classifications","column","parts","fields","field","col","task","thing","types","t","holds","columnText","icon","name","audience","_context","mintClass","mintNew","newInstance","newBase","appDoc","me","foaf","ins","insertions","docs","why","updates","Array","from","Set","sameTerm","Promise","all","updateMany","div","render","renderBoard","klass","doingStates","stateArray","owl","columnValues","columnDropHandler","newState","currentState","classification","ty","getState","boardDiv","sortBy","sortReverse","renderItem","board","headerRow","mainRow","defaultRenderItem","sortedBy","values","defaultSortValue","reverse","toBeSorted","sort","pair","cell","makeDropTarget","uris","actualRenderItem","localRenderItem","ele","items","sortedItems","renderTable","newOptionalClause","clause","query","pat","optional","vars","v","created","propertyList","properties","p","vname","indexOf","oneOpt","selectedStates","s","tableDiv","keyVariable","hints","linkFunction","href","cellFormat","initialSelection","tableRefreshButton","renderCreationControl","refreshTarget","creationDiv","creationContext","statusArea","relevantPanes","paneRegistry","byName","create","newThingUI","renderSettings","settingsDiv","wrapper","event","csv","clipboardData","setData","preventDefault","csvButton","views","tableView","box","renderNameValuePair","login","registrationControl","_context2","settingsForm","renderTabsTableAndBoard","instancesView","settingsView","renderMain","boardView","theClass","instancesDiv","registrationList","public","private","type","renderInstances","selectedTab","tabs","tabWidget","flowOntology","userInterfaceOntology","loginOutButton","addDownstreamChangeListener","renderSingleIssue","newIssueButton","checkOneSuperclass","collection","needed","existing","deleteActions","sub","has","action","insertActions","damage","insertables","fix","deletables","fixSubClasses","h","container","img","span","_xhrs","catch","renderTracker","webId","loginStatusBox","webIdUri"],"sourceRoot":""}
|