mashlib 2.1.3 → 2.1.4-e3cab069

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/dist/mashlib.js CHANGED
@@ -14449,8 +14449,50 @@ async function getDataModelIssues(groups) {
14449
14449
  Object.defineProperty(exports, "__esModule", ({
14450
14450
  value: true
14451
14451
  }));
14452
+ Object.defineProperty(exports, "addPersonToGroup", ({
14453
+ enumerable: true,
14454
+ get: function () {
14455
+ return _contactLogic.addPersonToGroup;
14456
+ }
14457
+ }));
14458
+ Object.defineProperty(exports, "addWebIDToContacts", ({
14459
+ enumerable: true,
14460
+ get: function () {
14461
+ return _webidControl.addWebIDToContacts;
14462
+ }
14463
+ }));
14452
14464
  exports["default"] = void 0;
14465
+ Object.defineProperty(exports, "getPersonas", ({
14466
+ enumerable: true,
14467
+ get: function () {
14468
+ return _webidControl.getPersonas;
14469
+ }
14470
+ }));
14453
14471
  exports.getSameAs = getSameAs;
14472
+ Object.defineProperty(exports, "groupMembers", ({
14473
+ enumerable: true,
14474
+ get: function () {
14475
+ return _contactLogic.groupMembers;
14476
+ }
14477
+ }));
14478
+ Object.defineProperty(exports, "removeWebIDFromContacts", ({
14479
+ enumerable: true,
14480
+ get: function () {
14481
+ return _webidControl.removeWebIDFromContacts;
14482
+ }
14483
+ }));
14484
+ Object.defineProperty(exports, "saveNewContact", ({
14485
+ enumerable: true,
14486
+ get: function () {
14487
+ return _contactLogic.saveNewContact;
14488
+ }
14489
+ }));
14490
+ Object.defineProperty(exports, "saveNewGroup", ({
14491
+ enumerable: true,
14492
+ get: function () {
14493
+ return _contactLogic.saveNewGroup;
14494
+ }
14495
+ }));
14454
14496
  var _solidLogic = __webpack_require__(9332);
14455
14497
  var _contactLogic = __webpack_require__(466);
14456
14498
  var UI = _interopRequireWildcard(__webpack_require__(500));
@@ -14458,6 +14500,7 @@ var _mintNewAddressBook = __webpack_require__(7587);
14458
14500
  var _individual = __webpack_require__(547);
14459
14501
  var _toolsPane = __webpack_require__(4195);
14460
14502
  var _groupMembershipControl = __webpack_require__(9208);
14503
+ var _webidControl = __webpack_require__(4416);
14461
14504
  function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function (e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, default: e }; if (null === e || "object" != typeof e && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (const t in e) "default" !== t && {}.hasOwnProperty.call(e, t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, t)) && (i.get || i.set) ? o(f, t, i) : f[t] = e[t]); return f; })(e, t); }
14462
14505
  /* Contact AddressBook Pane
14463
14506
  **
@@ -15239,7 +15282,6 @@ var _default = exports["default"] = {
15239
15282
  } // render function
15240
15283
  }; // pane object
15241
15284
  // ends
15242
-
15243
15285
  function getSameAs(kb, item, doc) {
15244
15286
  return kb.each(item, ns.owl('sameAs'), null, doc).concat(kb.each(null, ns.owl('sameAs'), item, doc));
15245
15287
  }
@@ -18207,7 +18249,7 @@ if (true) {
18207
18249
  (module) {
18208
18250
 
18209
18251
  "use strict";
18210
- /*! @license DOMPurify 3.3.1 | (c) Cure53 and other contributors | Released under the Apache license 2.0 and Mozilla Public License 2.0 | github.com/cure53/DOMPurify/blob/3.3.1/LICENSE */
18252
+ /*! @license DOMPurify 3.3.3 | (c) Cure53 and other contributors | Released under the Apache license 2.0 and Mozilla Public License 2.0 | github.com/cure53/DOMPurify/blob/3.3.3/LICENSE */
18211
18253
 
18212
18254
 
18213
18255
 
@@ -18516,7 +18558,7 @@ const _createHooksMap = function _createHooksMap() {
18516
18558
  function createDOMPurify() {
18517
18559
  let window = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : getGlobal();
18518
18560
  const DOMPurify = root => createDOMPurify(root);
18519
- DOMPurify.version = '3.3.1';
18561
+ DOMPurify.version = '3.3.3';
18520
18562
  DOMPurify.removed = [];
18521
18563
  if (!window || !window.document || window.document.nodeType !== NODE_TYPE.document || !window.Element) {
18522
18564
  // Not running in a browser, provide a factory function
@@ -18811,7 +18853,7 @@ function createDOMPurify() {
18811
18853
  /* Parse profile info */
18812
18854
  if (USE_PROFILES) {
18813
18855
  ALLOWED_TAGS = addToSet({}, text);
18814
- ALLOWED_ATTR = [];
18856
+ ALLOWED_ATTR = create(null);
18815
18857
  if (USE_PROFILES.html === true) {
18816
18858
  addToSet(ALLOWED_TAGS, html$1);
18817
18859
  addToSet(ALLOWED_ATTR, html);
@@ -18832,6 +18874,13 @@ function createDOMPurify() {
18832
18874
  addToSet(ALLOWED_ATTR, xml);
18833
18875
  }
18834
18876
  }
18877
+ /* Prevent function-based ADD_ATTR / ADD_TAGS from leaking across calls */
18878
+ if (!objectHasOwnProperty(cfg, 'ADD_TAGS')) {
18879
+ EXTRA_ELEMENT_HANDLING.tagCheck = null;
18880
+ }
18881
+ if (!objectHasOwnProperty(cfg, 'ADD_ATTR')) {
18882
+ EXTRA_ELEMENT_HANDLING.attributeCheck = null;
18883
+ }
18835
18884
  /* Merge configuration parameters */
18836
18885
  if (cfg.ADD_TAGS) {
18837
18886
  if (typeof cfg.ADD_TAGS === 'function') {
@@ -19229,6 +19278,10 @@ function createDOMPurify() {
19229
19278
  */
19230
19279
  // eslint-disable-next-line complexity
19231
19280
  const _isValidAttribute = function _isValidAttribute(lcTag, lcName, value) {
19281
+ /* FORBID_ATTR must always win, even if ADD_ATTR predicate would allow it */
19282
+ if (FORBID_ATTR[lcName]) {
19283
+ return false;
19284
+ }
19232
19285
  /* Make sure attribute cannot clobber */
19233
19286
  if (SANITIZE_DOM && (lcName === 'id' || lcName === 'name') && (value in document || value in formElement)) {
19234
19287
  return false;
@@ -19321,7 +19374,7 @@ function createDOMPurify() {
19321
19374
  value = SANITIZE_NAMED_PROPS_PREFIX + value;
19322
19375
  }
19323
19376
  /* Work around a security issue with comments inside attributes */
19324
- if (SAFE_FOR_XML && regExpTest(/((--!?|])>)|<\/(style|title|textarea)/i, value)) {
19377
+ if (SAFE_FOR_XML && regExpTest(/((--!?|])>)|<\/(style|script|title|xmp|textarea|noscript|iframe|noembed|noframes)/i, value)) {
19325
19378
  _removeAttribute(name, currentNode);
19326
19379
  continue;
19327
19380
  }
@@ -20464,14 +20517,14 @@ exports.write = function (buffer, value, offset, isLE, mLen, nBytes) {
20464
20517
  /***/ 3931
20465
20518
  (module, __unused_webpack_exports, __webpack_require__) {
20466
20519
 
20467
- !function(e,n){ true?module.exports=n(__webpack_require__(500),__webpack_require__(9332),__webpack_require__(8230)):0}(this,(e,n,t)=>(()=>{"use strict";var s={85:(e,n,t)=>{t.d(n,{board:()=>o});var s=t(426),i=t(663),r=t(264);function o(e,n,t,o){const a=e.createElement("div");a.style="width: 100%;",a.style.margin="1em";const l=a.appendChild(e.createElement("table"));l.style="width: 100%;",l.style.borderCollapse="collapse";const u=l.appendChild(e.createElement("tr")),c=l.appendChild(e.createElement("tr"));function d(n,t){const r=e.createElement("div"),o=r.appendChild(e.createElement("table")),a=i.store.each(n,s.ns.rdf("type")).map(e=>i.store.any(e,s.ns.ui("backgroundColor"))).filter(e=>e);o.appendChild(s.widgets.personTR(e,null,n)),o.subject=n,o.style="margin: 1em;";const l=a[0]||i.store.any(t,s.ns.ui("backgroundColor"));return r.style.backgroundColor=l?l.value:"#fff",r}function p(e,n,t,s){const r=e.map(e=>[i.store.any(e,n)||t,e]);return r.sort(),s&&r.reverse(),r.map(e=>e[1])}return n.forEach(n=>{const t=u.appendChild(e.createElement("th"));t.textContent=s.utils.label(n,!0),t.subject=n,t.style="margin: 0.3em; padding: 0.5em 1em; font-treatment: bold; font-size: 120%;";const r=c.appendChild(e.createElement("td"));r.subject=n,r.style="border: 0.01em solid white; padding: 0.1em;",o.columnDropHandler&&s.widgets.makeDropTarget(r,function(e){e.forEach(function(e){console.log("Dropped on column: "+e);const t=i.store.sym(e);o.columnDropHandler(t,n)})})}),a.refresh=function(){const e=new r.Literal(new Date),n=t||o.renderItem||d;function a(e){const t=n(e);return s.widgets.makeDraggable(t,e),t.subject=e,t}for(let n=c.firstChild;n;n=n.nextSibling){const t=n.subject;let r=i.store.each(null,s.ns.rdf("type"),t);const l=o.sortBy||s.ns.dct("created");o.filter&&(r=r.filter(o.filter));const u=p(r,l,e,!0);s.utils.syncTableToArrayReOrdered(n,u,a)}},a.refresh(),a}},178:(e,n,t)=>{t.d(n,{exposeOverlay:()=>m,getState:()=>d,renderIssue:()=>w,renderIssueCard:()=>f});var s=t(426),i=t(663),r=t(324),o=t(264);const a=i.store,l=!1,u=s.icons.iconBase+"noun_17020_gray-tick.svg",c=(s.icons.iconBase,s.icons.iconBase+"noun_17020.svg");function d(e,n){const t=a.the(e,s.ns.wf("tracker"),null,e.doc()),i=a.any(t,s.ns.wf("issueClass"));n=n||i;const r=a.each(e,s.ns.rdf("type")).filter(e=>a.holds(e,s.ns.rdfs("subClassOf"),n));if(1!==r.length)throw new Error("Issue must have one type as state: "+r.length);return r[0]}function p(e){const n=a.each(e,s.ns.rdf("type")).map(e=>a.any(e,s.ns.ui("backgroundColor"))).filter(e=>!!e);return n.length?n[0].value:null}function f(e,n){function t(){const n=p(e)||"white";o.style.backgroundColor=n,c.style.backgroundColor=n}const i=n.dom,r=!p(e),o=i.createElement("div"),l=o.appendChild(i.createElement("table"));l.style.width="100%",l.appendChild(s.widgets.personTR(i,null,e,{draggable:!1})),l.subject=e,o.style="border-radius: 0.4em; border: 0.05em solid grey; margin: 0.3em;",o.firstChild.firstChild.firstChild.firstChild.setAttribute("src",s.icons.iconBase+"noun_Danger_1259514.svg");const u=o.firstChild.firstChild.children[2],c=s.widgets.button(i,s.icons.iconBase+"noun_253504.svg","edit",async t=>{m(e,n)}),d=c.firstChild;if(d.style.width=d.style.height="1.5em",u.appendChild(c),r){const t=s.widgets.deleteButtonWithCheck(i,u,"issue",async function(){try{await a.updater.update(a.connectedStatements(e))}catch(e){!function(e,n){console.warn(e),n.paneDiv.appendChild(s.widgets.errorMessageBlock(n.dom,e))}(`Unable to delete issue: ${e}`,n)}console.log("User deleted issue "+e),o.parentNode.removeChild(o),s.widgets.refreshTree(n.paneDiv)});u.appendChild(t)}return o.style.maxWidth="24em",o.refresh=t,t(),o}function m(e,n){const t=n.overlay;t.innerHTML="";const i=t.appendChild(s.widgets.button(n.dom,s.icons.iconBase+"noun_1180156.svg","close",function(){t.innerHTML="",t.style.visibility="hidden"}));i.style.float="right",i.style.margin="0.7em",delete i.style.backgroundColor,t.style.visibility="visible",t.appendChild(w(e,n)),t.firstChild.style.overflow="auto"}function h(e,n){const t=e.createElement("div");return t.setAttribute("style","height: 1em; margin: 0.5em;"),t.style.backgroundColor=n,t}function w(e,n){function t(n,t,i){if(l){if(!w(y,"trackLastModified"))return;const n=t.statementsMatching(e,s.ns.dct("modified")).concat(t.statementsMatching(e,s.ns.wf("modifiedBy"))),r=[o.st(e,s.ns.dct("modified"),new Date,i)];k&&r.push(o.st(e,s.ns.wf("modifiedBy"),k,i)),t.updater.update(n,r,function(e,n,t){})}}function d(e,n){const t=g.createElement("pre");return t.setAttribute("style",n||"color: grey"),F.appendChild(t),t.appendChild(g.createTextNode(e)),t}function f(e){console.warn(e),F.appendChild(s.widgets.errorMessageBlock(g,e))}function m(e,n){e||f("Sorry, failed to save your change:\n"+n)}function w(e,n){const t=a.any(e,s.ns.ui(n));return!(!t||!t.value)}const g=n.dom,y=a.the(e,s.ns.wf("tracker"),null,e.doc());if(!y)throw new Error("No tracker");const b=a.any(y,s.ns.wf("stateStore")),C=e.doc(),F=g.createElement("div"),k=i.authn.currentUser(),v=p(e)||"white";!function(){const n="padding: 0.5em 1.5em 1em 1.5em; border: 0.7em;border-color: "+(p(e)||"#eee")+"; ";F.setAttribute("style",n),F.style.backgroundColor="white"}(),i.authn.checkUser();const T=F.appendChild(s.widgets.button(g,function(e){return function(e){return!!a.findTypeURIs(e)[s.ns.wf("Open").uri]}(e)?u:c}(e)));s.widgets.makeDraggable(T,e);const x=a.any(y,s.ns.wf("issueClass"));if(!x)throw new Error("This tracker "+y+" has no issueClass");const S=s.widgets.makeSelectForCategory(g,a,e,x,b,function(e,n){e?(t(0,a,C),s.widgets.refreshTree(F)):console.log("Failed to change state:\n"+n)});F.appendChild(S);const P=a.each(y,s.ns.wf("issueCategory"));for(const n of P)F.appendChild(s.widgets.makeSelectForCategory(g,a,e,n,b,function(e,n){e?(t(0,a,C),s.widgets.refreshTree(F)):console.log("Failed to change category:\n"+n)}));const O=g.createElement("a");O.setAttribute("href",y.uri),O.setAttribute("style","float:right"),F.appendChild(O).textContent=s.utils.label(y),O.addEventListener("click",s.widgets.openHrefInOutlineMode,!0);const M=s.ns.wf("coreIsueForm");o.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',a,M.doc().uri,"text/turtle");const A=s.widgets.appendForm(g,null,{},e,M,b,m);F.appendChild(A),A.style.backgroundColor=v;const D=a.statementsMatching(e,s.ns.wf("assignee"));if(D.length>1){d("Weird, was assigned to more than one person. Fixing ..");const e=D.slice(1);a.updater.update(e,[],function(e,n,t){n?d("Now fixed."):f("Fixed failed: "+t)})}function E(e){return s.widgets.personTR(g,s.ns.wf("dependent"),e,{link:!1})}function I(e,n){n=n||[];const t=a.any(null,s.ns.wf("dependent"),e,e.doc());return t?I(t,[t].concat(n)):n}if(async function(){const n=a.each(e,s.ns.wf("assigneeGroup"));await a.fetcher.load(n);const t=n.map(e=>a.each(e,s.ns.vcard("member"),null,e.doc())).flat(),i=a.any(null,s.ns.doap("bug-database"),y);i&&await a.fetcher.load(i);const r=i?a.each(i,s.ns.doap("developer")):[];return t.concat(r)}().then(n=>{if(n.length){n.forEach(function(e){a.fetcher.lookUpThing(e)});const i={nullLabel:"(unassigned)"};F.appendChild(s.widgets.makeSelectForOptions(g,a,e,s.ns.wf("assignee"),n,i,C,function(e,n){e?t(0,a,C):console.log("Failed to change assignee:\n"+n)}))}}),w(y,"allowSubIssues")){const n=F.appendChild(g.createElement("div"));n.style="margin: 1em; padding: 1em;",n.appendChild(g.createElement("h4")).textContent="Super Issues";const t=n.appendChild(g.createElement("div"));t.style.display="flex",t.refresh=function(){const n=I(e);s.utils.syncTableToArrayReOrdered(t,n,E)},t.refresh(),n.appendChild(g.createElement("h4")).textContent="Sub Issues";const i=n.appendChild(g.createElement("div"));i.style.display="flex",i.style.flexDirection="reverse",i.refresh=function(){const n=a.each(e,s.ns.wf("dependent"),null,e.doc());s.utils.syncTableToArrayReOrdered(i,n,E)},i.refresh();const o=g.createElement("button");o.setAttribute("type","button"),n.appendChild(o);const l=s.utils.label(x);o.innerHTML="New sub "+l,o.setAttribute("style","float: right; margin: 0.5em 1em;"),o.addEventListener("click",function(t){n.insertBefore((0,r.newIssueForm)(g,a,y,e,i.refresh),o.nextSibling)},!1)}F.appendChild(g.createElement("br"));const L=a.any(y,s.ns.wf("extrasEntryForm"));L&&s.widgets.appendForm(g,F,{},e,L,b,m);const N=F.appendChild(h(g,v));let q;a.anyValue(y,s.ns.wf("issueURITemplate"))?q=e.doc():(q=a.any(y,s.ns.wf("messageStore")),q||(q=a.any(y,s.ns.wf("stateStore"))),a.sym(q.uri+"#Chat"+(new Date).getTime())),a.fetcher.nowOrWhenFetched(q,function(n,t,i){if(n){const n=(0,s.messageArea)(g,a,e,q);F.insertBefore(n,N),F.insertBefore(h(g,v),n)}else{const e=g.createElement("p");e.textContent=t,F.insertBefore(e,N)}}),F.appendChild(g.createElement("div")).innerHTML="<h4>Attachments</h4>\n <p>Drag files, emails,\n web pages onto the paper clip, or click the file upload button.</p>";const j=e.uri.endsWith("/index.ttl#this")?e.uri.slice(0,14)+"Files/":e.dir().uri+"Files/"+e.uri.split("#")[1]+"/";s.widgets.attachmentList(g,e,F,{doc:b,promptIcon:s.icons.iconBase+"noun_25830.svg",uploadFolder:a.sym(j),predicate:s.ns.wf("attachment")}),s.widgets.deleteButtonWithCheck(g,F,"issue",async function(){try{await a.updater.update(a.connectedStatements(e))}catch(e){f(`Unable to delete issue: ${e}`)}f("DELETED OK"),F.style.backgroundColor="#eee",F.style.fontColor="orange"}).style.float="right";const U=g.createElement("button");return U.textContent="refresh messages",U.addEventListener("click",async function(e){try{await a.fetcher.load(q,{force:!0,clearPreviousData:!0})}catch(e){return void alert(e)}s.widgets.refreshTree(F)},!1),U.setAttribute("style",s.style.button),F.appendChild(U),F}},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},324:(e,n,t)=>{t.d(n,{newIssueForm:()=>r});var s=t(426),i=t(264);function r(e,n,t,r,o){const a=e.createElement("div"),l=n.any(t,s.ns.wf("stateStore")),u=n.any(t,s.ns.wf("issueClass")),c=s.utils.label(u);a.innerHTML="<h2>Add new "+(r?"sub ":"")+c+"</h2><p>Title of new "+c+":</p>";const d=e.createElement("input");return d.setAttribute("type","text"),d.setAttribute("style","margin: 0.5em; font-size: 100%; padding: 0.3em;"),d.setAttribute("size","100"),d.setAttribute("maxLength","2048"),d.select(),d.addEventListener("keyup",function(e){13===e.keyCode&&function(){d.setAttribute("class","pendingedit"),d.disabled=!0;const e=[],u=n.anyValue(t,s.ns.wf("issueURITemplate")),c=u?n.sym(function(e){const n=new i.Literal(new Date),t=""+(new Date).getTime(),s=n.value.slice(0,4),r=n.value.slice(5,7),o=n.value.slice(8,10);return e.replace("{N}",t).replace("{YYYY}",s).replace("{MM}",r).replace("{DD}",o)}(i.uri.join(u,l.uri))):n.sym(l.uri+"#Iss"+(new Date).getTime()),p=c.doc(),f=n.literal(d.value);e.push(new i.Statement(c,s.ns.wf("tracker"),t,l)),e.push(new i.Statement(c,s.ns.dc("title"),f,l)),e.push(new i.Statement(c,s.ns.dct("created"),new Date,l));const m=r?n.each(r,s.ns.rdf("type"),null,r.doc()):n.each(t,s.ns.wf("initialState"));for(const n of m)e.push(new i.Statement(c,s.ns.rdf("type"),n,l));r&&e.push(new i.Statement(r,s.ns.wf("dependent"),c,l)),u&&(e.push(new i.Statement(c,s.ns.wf("tracker"),t,p)),e.push(new i.Statement(c,s.ns.rdfs("seeAlso"),l,p))),n.updater.update([],e,function(e,n,t){n?(a.parentNode.removeChild(a),o(c)):console.log("Error: can't save new issue:"+t)})}()},!1),a.appendChild(d),d.focus(),a}},426:n=>{n.exports=e},663:e=>{e.exports=n},685:(e,n,t)=>{t.d(n,{csvButton:()=>o});var s=t(426),i=t(663);function r(e){const n=e.replaceAll("\n"," ");if(!n.includes(","))return n;const t='"'+n.replaceAll('"','""')+'"';if(console.log("Quoted: >>>"+t+"<<<"),t.slice(1,-1).replaceAll('""',"").includes('"'))throw new Error("CSV inconsistecy");return t}function o(e,n){const t=e.createElement("div"),o=s.widgets.button(e,s.icons.iconBase+"noun_Document_998605.svg","Copy as CSV",async e=>{const t=o.parentNode.parentNode;console.log("button gparent div",t),t.addEventListener("copy",e=>{const t=function(e,n){const t=e.any(n,s.ns.wf("stateStore")),i=e.each(null,s.ns.wf("tracker"),n,t);console.log(" CSV: Tasks:",i.length);const o=[{label:"Name",predicate:s.ns.dc("title")}],a=e.any(n,s.ns.wf("issueClass"));console.log(" CSV: States - main superclass:",a);const l={label:"State",category:a};console.log(" CSV: found column from state",l),o.push(l);const u=e.each(n,s.ns.wf("issueCategory"));console.log(" CSV: Categories : ",u),console.log(" CSV: Categories : length: ",u.length),console.log(" CSV: Categories : first: ",u[0]);const c=u;for(const e of c){const n={label:s.utils.label(e),category:e};console.log(" CSV: found column from classifications",n),o.push(n)}const d=e.any(n,s.ns.wf("extrasEntryForm"),null,null);if(console.log(" CSV: Form : ",d),d){const n=e.any(d,s.ns.ui("parts"),null,d.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,s.ns.ui("property"));if(t){const e={label:s.utils.label(t),predicate:t};console.log(" CSV: found column from form",e),o.push(e)}}}o.push({label:"Description",predicate:s.ns.wf("description")}),console.log("Columns: ",o.length);const p=o.map(e=>e.label).join(",")+"\n";return console.log("CSV: Header= ",p),p+i.map(function(n){return o.map(t=>function(n,t){let i;if(t.predicate)return i=e.any(n,t.predicate),i?i.value:"--";if(!t.category)throw new Error("wot no pred or cat",t);{const r=e.each(n,s.ns.rdf("type"));for(const n of r)e.holds(n,s.ns.rdfs("subClassOf"),t.category)&&(i=n);if(!i)return"?"+s.utils.label(t.category)}return s.utils.label(i)}(n,t)).map(r).join(",")+"\n"}).join("")}(i.store,n);e.clipboardData.setData("text/plain",t),e.clipboardData.setData("text/csv",t),alert("Copy data: "+t),e.preventDefault()})});return t.appendChild(o),t}},719:(e,n,t)=>{t.d(n,{newTrackerButton:()=>l});var s=t(426),i=t(264),r=t(663);const o=s.ns,a=r.store.updater;function l(e,n){const t=s.login.newAppInstance(n.dom,{noun:"tracker"},function(t,r){function l(e){if(void 0!==e.elements)return e.elements.map(l);if(void 0===e.uri)return e;let n=e.uri;return n===p.uri?f:(n.slice(0,h.length)===h&&(n=r+n.slice(h.length)),d.sym(n))}const u="issuetracker.w3.org",c=s.ns.space,d=n.session.store;if(!r&&("/"!==(r=d.any(t,c("uriPrefix")).value).slice(-1)&&(i.log.error(u+": No / at end of uriPrefix "+r),r+="/"),r+=u+"/"+(new Date).getTime()+"/",!confirm("Make new tracker at "+r+"?")))return;const p=d.any(e,o.wf("stateStore")),f=d.sym(r+"store.ttl"),m=e.doc(),h=m.uri.slice(0,m.uri.lastIndexOf("/")+1),w=l(m),g=l(e),y=d.statementsMatching(void 0,void 0,void 0,m);for(let e=0;e<y.length;e++){const n=y[e];d.add(l(n.subject),l(n.predicate),l(n.object),w)}d.add(g,s.ns.space("inspiration"),e,p),d.add(g,s.ns.space("inspiration"),e,w),a.put(w,d.statementsMatching(void 0,void 0,void 0,w),"text/turtle",function(e,n,t){n?a.put(f,[],"text/turtle",function(e,n,t){n?console.info("Ok The tracker created OK at: "+g.uri+"\nMake a note of it, bookmark it. "):console.log("FAILED to set up new store at: "+f.uri+" : "+t)}):console.log("FAILED to save new tracker at: "+w.uri+" : "+t)})});return t.setAttribute("style","margin: 0.5em 1em;"),t}}},i={};function r(e){var n=i[e];if(void 0!==n)return n.exports;var t=i[e]={exports:{}};return s[e](t,t.exports,r),t.exports}r.n=e=>{var n=e&&e.__esModule?()=>e.default:()=>e;return r.d(n,{a:n}),n},r.d=(e,n)=>{for(var t in n)r.o(n,t)&&!r.o(e,t)&&Object.defineProperty(e,t,{enumerable:!0,get:n[t]})},r.o=(e,n)=>Object.prototype.hasOwnProperty.call(e,n),r.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})};var o={};r.r(o),r.d(o,{default:()=>w});var a=r(426),l=r(663),u=r(85),c=r(178),d=r(719),p=r(324),f=r(685),m=r(264);const h=l.store,w={icon:a.icons.iconBase+"noun_122196.svg",name:"issue",audience:[],label:function(e,n){const t=h.findTypeURIs(e);return t["http://www.w3.org/2005/01/wf/flow#Task"]||h.holds(e,a.ns.wf("tracker"))?"issue":t["http://www.w3.org/2005/01/wf/flow#Tracker"]?"tracker":null},mintClass:a.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 i=n.newInstance,r=i.doc(),o=l.authn.currentUser();o&&t.add(i,a.ns.dc("author"),o,r),t.add(i,a.ns.rdf("type"),a.ns.wf("Tracker"),r),t.add(i,a.ns.dc("created"),new Date,r),t.add(i,a.ns.wf("issueClass"),a.ns.wf("Task"),r),t.add(i,a.ns.wf("initialState"),a.ns.wf("Open"),r),t.add(i,a.ns.wf("stateStore"),s,r),t.add(i,a.ns.wf("assigneeClass"),a.ns.foaf("Person"),r),t.add(i,a.ns.wf("stateStore"),s,s);const u=t.statementsMatching(void 0,void 0,void 0,r).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),i=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(i)}([],u)}catch(n){return a.widgets.complain(e,"Error writing tracker configuration: "+n)}const c=e.dom;return n.div.appendChild(c.createElement("div")).innerHTML=`<h4>Success</h4>\n <p>Your <a href="${i.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 i(e){console.warn(e),s.appendChild(a.widgets.errorMessageBlock(t,e))}function o(e,n){e||i(n)}function w(e,s){const r=h.any(e,a.ns.wf("issueClass")),o=(s=s||r).sameTerm(r),l=h.any(s,a.ns.owl("disjointUnionOf"));if(!l)return i(`Configuration error: state ${r} does not have substates`);let d=l.elements;o&&d.length>2&&(d=d.filter(e=>h.holds(e,a.ns.rdfs("subClassOf"),a.ns.wf("Open"))||e.sameTerm(a.ns.wf("Open"))));const p={columnDropHandler:async function(e,t){const i=(0,c.getState)(e,s),r=h.the(e,a.ns.wf("tracker"),null,e.doc()),o=h.any(r,a.ns.wf("stateStore"));if(!t.sameTerm(i)){try{await h.updater.update([m.st(e,a.ns.rdf("type"),i,o)],[m.st(e,a.ns.rdf("type"),t,o)])}catch(e){a.widgets.complain(n,"Unable to change issue state: "+e)}f.refresh()}},filter:o?null:function(e){return!!h.findTypeURIs(e)[a.ns.wf("Open").uri]}};p.sortBy=a.ns.dct("created"),p.sortReverse=!0;const f=(0,u.board)(t,d,function(e){return(0,c.renderIssueCard)(e,n)},p);return f}function g(e){const s=t.createElement("div"),i=l.authn.currentUser(),r={div:s,dom:t,noun:"tracker",statusArea:s,me:i,refreshTarget:e},o=[n.session.paneRegistry.byName("issue")];return a.create.newThingUI(r,n,o),s}function y(){const s=h.any(x,a.ns.wf("issueClass")),i=[k,C,s].concat(h.each(x,a.ns.wf("issueCategory")));i.push(F);const r={renderMain:function(s,i){if(s.innerHTML="",i.sameTerm(b))s.appendChild(w(x));else if(i.sameTerm(C))s.appendChild(function(s){function i(){const e=new m.IndexedFormula;return u.pat.optional.push(e),e}const r=h.any(e,a.ns.wf("issueClass")),o=h.each(s,a.ns.wf("issueCategory")),l=["issue","state","created"],u=new m.Query(a.utils.label(e));for(let e=0;e<o.length;e++)l.push("_cat_"+e);const d={};l.forEach(function(e){u.vars.push(d[e]=m.variable(e))}),u.pat.add(d.issue,a.ns.wf("tracker"),s),u.pat.add(d.issue,a.ns.dct("created"),d.created),u.pat.add(d.issue,a.ns.rdf("type"),d.state),u.pat.add(d.state,a.ns.rdfs("subClassOf"),r),u.pat.optional=[];for(let e=0;e<o.length;e++){const n=i();n.add(d.issue,a.ns.rdf("type"),d["_cat_"+e]),n.add(d["_cat_"+e],a.ns.rdfs("subClassOf"),o[e])}const p=h.any(s,a.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 r=i();u.vars.push(d[s]=m.variable(s)),r.add(d.issue,t,d[s])}}const f={};h.each(void 0,a.ns.rdfs("subClassOf"),r).forEach(function(e){(h.holds(e,a.ns.rdfs("subClassOf"),a.ns.wf("Open"))||e.sameTerm(a.ns.wf("Open")))&&(f[e.uri]=!0)});const w=(0,a.table)(t,{query:u,keyVariable:"?issue",sortBy:"?created",sortReverse:!0,hints:{"?issue":{linkFunction:function(e){const t=m.sym(e);(0,c.exposeOverlay)(t,n)},label:"Title"},"?created":{cellFormat:"shortDate"},"?state":{initialSelection:f,label:"Status"}}}),g=h.any(e,a.ns.wf("stateStore"));return w.appendChild(function(e,n){return a.widgets.button(t,a.icons.iconBase+"noun_479395.svg","refresh table",async t=>{try{await h.fetcher.load(e,{force:!0,clearPreviousData:!0})}catch(e){return void alert(e)}a.widgets.refreshTree(n)})}(g,w)),w}(x));else if(i.sameTerm(F))s.appendChild(function(e){const n=t.createElement("div");n.appendChild((0,f.csvButton)(t,e));const s=h.any(e,a.ns.wf("issueClass")),i=[C,s].concat(h.each(e,a.ns.wf("issueCategory"))),r=n.appendChild(t.createElement("div"));a.widgets.renderNameValuePair(t,h,r,null,"Default view").appendChild(a.widgets.makeSelectForOptions(t,h,e,a.ns.wf("defaultView"),i,{},e.doc()));const l={dom:t,div:n,noun:"tracker"};return a.login.registrationControl(l,e,a.ns.wf("Tracker")).then(s=>{const i=a.ns.wf("TrackerSettingsForm");m.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',h,i.doc().uri,"text/turtle"),a.widgets.appendForm(t,n,{},e,i,e.doc(),o)}),n}(x));else if(i.sameTerm(k))s.appendChild(function(e){const n=t.createElement("div"),s={dom:t,div:n,noun:"tracker"};return a.login.registrationList(s,{public:!0,private:!0,type:e}).then(e=>{n.appendChild(g(n))}),n}(a.ns.wf("Tracker")));else{if(!h.holds(x,a.ns.wf("issueCategory"),i)&&!h.holds(x,a.ns.wf("issueClass"),i))throw new Error("Unexpected tab type: "+i);s.appendChild(w(x,i))}},items:i,selectedTab:h.any(x,a.ns.wf("defaultView"),null,x.doc())||C},l=k.doc();return h.add(k,a.ns.rdfs("label"),"My Trackers",l),h.add(F,a.ns.rdfs("label"),"Settings",l),h.add(s,a.ns.rdfs("label"),"By State",l),a.tabs.tabWidget(r)}n.paneDiv=s,s.setAttribute("class","issuePane");const b=a.ns.wf("BoardView"),C=a.ns.wf("TableView"),F=a.ns.wf("SettingsView"),k=a.ns.wf("InstancesView"),v=h.updater,T=h.findTypeURIs(e);let x;const S=a.ns.wf("").doc();h.holds(void 0,void 0,void 0,S)||m.parse(r(240),h,S.uri,"text/turtle");const P=a.ns.ui("").doc();let O;h.holds(void 0,void 0,void 0,P)||m.parse(r(197),h,P.uri,"text/turtle"),T["http://www.w3.org/2005/01/wf/flow#Task"]||h.holds(e,a.ns.wf("tracker"))?async function(){if(x=h.any(e,a.ns.wf("tracker")),!x)throw new Error("This issue "+e+"has no tracker");try{await n.session.store.fetcher.load(x.doc())}catch(e){return i("Failed to load tracker config "+x.doc()+": "+e)}const t=h.any(x,a.ns.wf("stateStore"));if(!t)return i("Tracker has no state store: "+x);try{await n.session.store.fetcher.load(e)}catch(e){return i("Failed to load issue state "+t+": "+e)}s.appendChild((0,c.renderIssue)(e,n)),v.addDownstreamChangeListener(t,function(){a.widgets.refreshTree(s)})}().then(()=>console.log("Single issue rendered")):T["http://www.w3.org/2005/01/wf/flow#Tracker"]?async function(){function i(e){a.widgets.refreshTree(s),(0,c.exposeOverlay)(e,n),f.disabled=!1}x=e;try{await async function(e,n){async function t(n){const t=e.any(n,a.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 i=new Set(t.elements.map(e=>e.uri)),r=new Set(e.each(null,a.ns.rdfs("subClassOf"),n,s).map(e=>e.uri)),o=[...r].filter(e=>!i.has(e)).map(t=>({action:"delete",st:m.st(e.sym(t),a.ns.rdfs("subClassOf"),n,s)})),l=[...i].filter(e=>!r.has(e)).map(t=>({action:"insert",st:m.st(e.sym(t),a.ns.rdfs("subClassOf"),n,s)}));return o.concat(l)}const s=n.doc(),i=e.any(n,a.ns.wf("issueClass")),r=e.each(n,a.ns.wf("issueCategory")).concat([i]);let o=[];for(const e of r)o=o.concat(await t(e));if(o.length){const n=o.filter(e=>"insert"===e.action).map(e=>e.st),t=o.filter(e=>"delete"===e.action).map(e=>e.st);console.log("Damage:",o),confirm(`Fix ${o} inconsistent subclasses in tracker config?`)&&await e.updater.update(t,n)}}(h,x)}catch(e){console.log("@@@ Error fixing subclasses in config: "+e)}const r=h.any(e,a.ns.wf("issueClass"));if(!r)throw new Error("This tracker has no issueClass");const o=h.any(e,a.ns.wf("stateStore"));if(!o)throw new Error("This tracker has no stateStore");const l=t.createElement("h2");l.setAttribute("style","font-size: 150%"),s.appendChild(l);const u=a.utils.label(r);l.appendChild(t.createTextNode(u+" list"));const f=t.createElement("button"),w=t.createElement("div");f.setAttribute("type","button"),f.setAttribute("style","padding: 0.3em; font-size: 100%; margin: 0.5em;"),w.appendChild(f),s.appendChild(w);const g=t.createElement("img");g.setAttribute("src",a.icons.iconBase+"noun_19460_green.svg"),g.setAttribute("style","width: 1em; height: 1em; margin: 0.2em;"),f.appendChild(g);const b=t.createElement("span");b.innerHTML="New "+u,f.appendChild(b),f.addEventListener("click",function(e){f.disabled=!0,w.appendChild((0,p.newIssueForm)(t,h,x,null,i))},!1),n.session.store.fetcher.load([o]).then(function(t){const i=y();s.appendChild(i),i.refresh||console.log("No table refresh function?!"),s.appendChild((0,d.newTrackerButton)(e,n)),v.addDownstreamChangeListener(o,i.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 M=s.appendChild(t.createElement("div"));return n.overlay=M,M.style="position: fixed; z-index: 100; top: 1.51em; right: 2em; left: 2em; bottom:1.5em; border: 0.1em grey; overflow: scroll;",M.style.visibility="hidden",l.authn.checkUser().then(e=>{if(e)return console.log("Web ID set already: "+e),void(n.me=e);O=a.login.loginStatusBox(t,e=>{e?(n.me=h.sym(e),console.log("Web ID set from login button: "+e),s.removeChild(O)):n.me=null}),O.setAttribute("style","margin: 0.5em 1em;"),s.appendChild(O),n.statusArea||(n.statusArea=s.appendChild(t.createElement("div")))}),s}};return o})());
20520
+ !function(e,n){ true?module.exports=n(__webpack_require__(500),__webpack_require__(9332),__webpack_require__(8230)):0}(this,(e,n,t)=>(()=>{"use strict";var s={85(e,n,t){t.d(n,{board:()=>o});var s=t(426),i=t(663),r=t(264);function o(e,n,t,o){const a=e.createElement("div");a.style="width: 100%;",a.style.margin="1em";const l=a.appendChild(e.createElement("table"));l.style="width: 100%;",l.style.borderCollapse="collapse";const u=l.appendChild(e.createElement("tr")),c=l.appendChild(e.createElement("tr"));function d(n,t){const r=e.createElement("div"),o=r.appendChild(e.createElement("table")),a=i.store.each(n,s.ns.rdf("type")).map(e=>i.store.any(e,s.ns.ui("backgroundColor"))).filter(e=>e);o.appendChild(s.widgets.personTR(e,null,n)),o.subject=n,o.style="margin: 1em;";const l=a[0]||i.store.any(t,s.ns.ui("backgroundColor"));return r.style.backgroundColor=l?l.value:"#fff",r}function p(e,n,t,s){const r=e.map(e=>[i.store.any(e,n)||t,e]);return r.sort(),s&&r.reverse(),r.map(e=>e[1])}return n.forEach(n=>{const t=u.appendChild(e.createElement("th"));t.textContent=s.utils.label(n,!0),t.subject=n,t.style="margin: 0.3em; padding: 0.5em 1em; font-treatment: bold; font-size: 120%;";const r=c.appendChild(e.createElement("td"));r.subject=n,r.style="border: 0.01em solid white; padding: 0.1em;",o.columnDropHandler&&s.widgets.makeDropTarget(r,function(e){e.forEach(function(e){console.log("Dropped on column: "+e);const t=i.store.sym(e);o.columnDropHandler(t,n)})})}),a.refresh=function(){const e=new r.Literal(new Date),n=t||o.renderItem||d;function a(e){const t=n(e);return s.widgets.makeDraggable(t,e),t.subject=e,t}for(let n=c.firstChild;n;n=n.nextSibling){const t=n.subject;let r=i.store.each(null,s.ns.rdf("type"),t);const l=o.sortBy||s.ns.dct("created");o.filter&&(r=r.filter(o.filter));const u=p(r,l,e,!0);s.utils.syncTableToArrayReOrdered(n,u,a)}},a.refresh(),a}},685(e,n,t){t.d(n,{csvButton:()=>o});var s=t(426),i=t(663);function r(e){const n=e.replaceAll("\n"," ");if(!n.includes(","))return n;const t='"'+n.replaceAll('"','""')+'"';if(console.log("Quoted: >>>"+t+"<<<"),t.slice(1,-1).replaceAll('""',"").includes('"'))throw new Error("CSV inconsistecy");return t}function o(e,n){const t=e.createElement("div"),o=s.widgets.button(e,s.icons.iconBase+"noun_Document_998605.svg","Copy as CSV",async e=>{const t=o.parentNode.parentNode;console.log("button gparent div",t),t.addEventListener("copy",e=>{const t=function(e,n){const t=e.any(n,s.ns.wf("stateStore")),i=e.each(null,s.ns.wf("tracker"),n,t);console.log(" CSV: Tasks:",i.length);const o=[{label:"Name",predicate:s.ns.dc("title")}],a=e.any(n,s.ns.wf("issueClass"));console.log(" CSV: States - main superclass:",a);const l={label:"State",category:a};console.log(" CSV: found column from state",l),o.push(l);const u=e.each(n,s.ns.wf("issueCategory"));console.log(" CSV: Categories : ",u),console.log(" CSV: Categories : length: ",u.length),console.log(" CSV: Categories : first: ",u[0]);const c=u;for(const e of c){const n={label:s.utils.label(e),category:e};console.log(" CSV: found column from classifications",n),o.push(n)}const d=e.any(n,s.ns.wf("extrasEntryForm"),null,null);if(console.log(" CSV: Form : ",d),d){const n=e.any(d,s.ns.ui("parts"),null,d.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,s.ns.ui("property"));if(t){const e={label:s.utils.label(t),predicate:t};console.log(" CSV: found column from form",e),o.push(e)}}}o.push({label:"Description",predicate:s.ns.wf("description")}),console.log("Columns: ",o.length);const p=o.map(e=>e.label).join(",")+"\n";return console.log("CSV: Header= ",p),p+i.map(function(n){return o.map(t=>function(n,t){let i;if(t.predicate)return i=e.any(n,t.predicate),i?i.value:"--";if(!t.category)throw new Error("wot no pred or cat",t);{const r=e.each(n,s.ns.rdf("type"));for(const n of r)e.holds(n,s.ns.rdfs("subClassOf"),t.category)&&(i=n);if(!i)return"?"+s.utils.label(t.category)}return s.utils.label(i)}(n,t)).map(r).join(",")+"\n"}).join("")}(i.store,n);e.clipboardData.setData("text/plain",t),e.clipboardData.setData("text/csv",t),alert("Copy data: "+t),e.preventDefault()})});return t.appendChild(o),t}},178(e,n,t){t.d(n,{exposeOverlay:()=>f,getState:()=>c,renderIssue:()=>h,renderIssueCard:()=>p});var s=t(426),i=t(663),r=t(324),o=t(264);const a=i.store,l=s.icons.iconBase+"noun_17020_gray-tick.svg",u=(s.icons.iconBase,s.icons.iconBase+"noun_17020.svg");function c(e,n){const t=a.the(e,s.ns.wf("tracker"),null,e.doc()),i=a.any(t,s.ns.wf("issueClass"));n=n||i;const r=a.each(e,s.ns.rdf("type")).filter(e=>a.holds(e,s.ns.rdfs("subClassOf"),n));if(1!==r.length)throw new Error("Issue must have one type as state: "+r.length);return r[0]}function d(e){const n=a.each(e,s.ns.rdf("type")).map(e=>a.any(e,s.ns.ui("backgroundColor"))).filter(e=>!!e);return n.length?n[0].value:null}function p(e,n){function t(){const n=d(e)||"white";o.style.backgroundColor=n,c.style.backgroundColor=n}const i=n.dom,r=!d(e),o=i.createElement("div"),l=o.appendChild(i.createElement("table"));l.style.width="100%",l.appendChild(s.widgets.personTR(i,null,e,{draggable:!1})),l.subject=e,o.style="border-radius: 0.4em; border: 0.05em solid grey; margin: 0.3em;",o.firstChild.firstChild.firstChild.firstChild.setAttribute("src",s.icons.iconBase+"noun_Danger_1259514.svg");const u=o.firstChild.firstChild.children[2],c=s.widgets.button(i,s.icons.iconBase+"noun_253504.svg","edit",async t=>{f(e,n)}),p=c.firstChild;if(p.style.width=p.style.height="1.5em",u.appendChild(c),r){const t=s.widgets.deleteButtonWithCheck(i,u,"issue",async function(){try{await a.updater.update(a.connectedStatements(e))}catch(e){!function(e,n){console.warn(e),n.paneDiv.appendChild(s.widgets.errorMessageBlock(n.dom,e))}(`Unable to delete issue: ${e}`,n)}console.log("User deleted issue "+e),o.parentNode.removeChild(o),s.widgets.refreshTree(n.paneDiv)});u.appendChild(t)}return o.style.maxWidth="24em",o.refresh=t,t(),o}function f(e,n){const t=n.overlay;t.innerHTML="";const i=t.appendChild(s.widgets.button(n.dom,s.icons.iconBase+"noun_1180156.svg","close",function(){t.innerHTML="",t.style.visibility="hidden"}));i.style.float="right",i.style.margin="0.7em",delete i.style.backgroundColor,t.style.visibility="visible",t.appendChild(h(e,n)),t.firstChild.style.overflow="auto"}function m(e,n){const t=e.createElement("div");return t.setAttribute("style","height: 1em; margin: 0.5em;"),t.style.backgroundColor=n,t}function h(e,n){function t(e,n){const t=f.createElement("pre");return t.setAttribute("style",n||"color: grey"),y.appendChild(t),t.appendChild(f.createTextNode(e)),t}function c(e){console.warn(e),y.appendChild(s.widgets.errorMessageBlock(f,e))}function p(e,n){e||c("Sorry, failed to save your change:\n"+n)}const f=n.dom,h=a.the(e,s.ns.wf("tracker"),null,e.doc());if(!h)throw new Error("No tracker");const w=a.any(h,s.ns.wf("stateStore")),g=e.doc(),y=f.createElement("div"),b=(i.authn.currentUser(),d(e)||"white");!function(){const n="padding: 0.5em 1.5em 1em 1.5em; border: 0.7em;border-color: "+(d(e)||"#eee")+"; ";y.setAttribute("style",n),y.style.backgroundColor="white"}(),i.authn.checkUser();const C=y.appendChild(s.widgets.button(f,function(e){return function(e){return!!a.findTypeURIs(e)[s.ns.wf("Open").uri]}(e)?l:u}(e)));s.widgets.makeDraggable(C,e);const F=a.any(h,s.ns.wf("issueClass"));if(!F)throw new Error("This tracker "+h+" has no issueClass");const k=s.widgets.makeSelectForCategory(f,a,e,F,w,function(e,n){e?s.widgets.refreshTree(y):console.log("Failed to change state:\n"+n)});y.appendChild(k);const v=a.each(h,s.ns.wf("issueCategory"));for(const n of v)y.appendChild(s.widgets.makeSelectForCategory(f,a,e,n,w,function(e,n){e?s.widgets.refreshTree(y):console.log("Failed to change category:\n"+n)}));const T=f.createElement("a");T.setAttribute("href",h.uri),T.setAttribute("style","float:right"),y.appendChild(T).textContent=s.utils.label(h),T.addEventListener("click",s.widgets.openHrefInOutlineMode,!0);const x=s.ns.wf("coreIsueForm");o.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',a,x.doc().uri,"text/turtle");const S=s.widgets.appendForm(f,null,{},e,x,w,p);y.appendChild(S),S.style.backgroundColor=b;const P=a.statementsMatching(e,s.ns.wf("assignee"));if(P.length>1){t("Weird, was assigned to more than one person. Fixing ..");const e=P.slice(1);a.updater.update(e,[],function(e,n,s){n?t("Now fixed."):c("Fixed failed: "+s)})}function O(e){return s.widgets.personTR(f,s.ns.wf("dependent"),e,{link:!1})}function M(e,n){n=n||[];const t=a.any(null,s.ns.wf("dependent"),e,e.doc());return t?M(t,[t].concat(n)):n}if(async function(){const n=a.each(e,s.ns.wf("assigneeGroup"));await a.fetcher.load(n);const t=n.map(e=>a.each(e,s.ns.vcard("member"),null,e.doc())).flat(),i=a.any(null,s.ns.doap("bug-database"),h);i&&await a.fetcher.load(i);const r=i?a.each(i,s.ns.doap("developer")):[];return t.concat(r)}().then(n=>{if(n.length){n.forEach(function(e){a.fetcher.lookUpThing(e)});const t={nullLabel:"(unassigned)"};y.appendChild(s.widgets.makeSelectForOptions(f,a,e,s.ns.wf("assignee"),n,t,g,function(e,n){e||console.log("Failed to change assignee:\n"+n)}))}}),function(e,n){const t=a.any(e,s.ns.ui(n));return!(!t||!t.value)}(h,"allowSubIssues")){const n=y.appendChild(f.createElement("div"));n.style="margin: 1em; padding: 1em;",n.appendChild(f.createElement("h4")).textContent="Super Issues";const t=n.appendChild(f.createElement("div"));t.style.display="flex",t.refresh=function(){const n=M(e);s.utils.syncTableToArrayReOrdered(t,n,O)},t.refresh(),n.appendChild(f.createElement("h4")).textContent="Sub Issues";const i=n.appendChild(f.createElement("div"));i.style.display="flex",i.style.flexDirection="reverse",i.refresh=function(){const n=a.each(e,s.ns.wf("dependent"),null,e.doc());s.utils.syncTableToArrayReOrdered(i,n,O)},i.refresh();const o=f.createElement("button");o.setAttribute("type","button"),n.appendChild(o);const l=s.utils.label(F);o.innerHTML="New sub "+l,o.setAttribute("style","float: right; margin: 0.5em 1em;"),o.addEventListener("click",function(t){n.insertBefore((0,r.newIssueForm)(f,a,h,e,i.refresh),o.nextSibling)},!1)}y.appendChild(f.createElement("br"));const A=a.any(h,s.ns.wf("extrasEntryForm"));A&&s.widgets.appendForm(f,y,{},e,A,w,p);const D=y.appendChild(m(f,b));let E;a.anyValue(h,s.ns.wf("issueURITemplate"))?E=e.doc():(E=a.any(h,s.ns.wf("messageStore")),E||(E=a.any(h,s.ns.wf("stateStore"))),a.sym(E.uri+"#Chat"+(new Date).getTime())),a.fetcher.nowOrWhenFetched(E,function(n,t,i){if(n){const n=(0,s.messageArea)(f,a,e,E);y.insertBefore(n,D),y.insertBefore(m(f,b),n)}else{const e=f.createElement("p");e.textContent=t,y.insertBefore(e,D)}}),y.appendChild(f.createElement("div")).innerHTML="<h4>Attachments</h4>\n <p>Drag files, emails,\n web pages onto the paper clip, or click the file upload button.</p>";const I=e.uri.endsWith("/index.ttl#this")?e.uri.slice(0,14)+"Files/":e.dir().uri+"Files/"+e.uri.split("#")[1]+"/";s.widgets.attachmentList(f,e,y,{doc:w,promptIcon:s.icons.iconBase+"noun_25830.svg",uploadFolder:a.sym(I),predicate:s.ns.wf("attachment")}),s.widgets.deleteButtonWithCheck(f,y,"issue",async function(){try{await a.updater.update(a.connectedStatements(e))}catch(e){c(`Unable to delete issue: ${e}`)}c("DELETED OK"),y.style.backgroundColor="#eee",y.style.fontColor="orange"}).style.float="right";const L=f.createElement("button");return L.textContent="refresh messages",L.addEventListener("click",async function(e){try{await a.fetcher.load(E,{force:!0,clearPreviousData:!0})}catch(e){return void alert(e)}s.widgets.refreshTree(y)},!1),L.setAttribute("style",s.style.button),y.appendChild(L),y}},324(e,n,t){t.d(n,{newIssueForm:()=>r});var s=t(426),i=t(264);function r(e,n,t,r,o){const a=e.createElement("div"),l=n.any(t,s.ns.wf("stateStore")),u=n.any(t,s.ns.wf("issueClass")),c=s.utils.label(u);a.innerHTML="<h2>Add new "+(r?"sub ":"")+c+"</h2><p>Title of new "+c+":</p>";const d=e.createElement("input");return d.setAttribute("type","text"),d.setAttribute("style","margin: 0.5em; font-size: 100%; padding: 0.3em;"),d.setAttribute("size","100"),d.setAttribute("maxLength","2048"),d.select(),d.addEventListener("keyup",function(e){13===e.keyCode&&function(){d.setAttribute("class","pendingedit"),d.disabled=!0;const e=[],u=n.anyValue(t,s.ns.wf("issueURITemplate")),c=u?n.sym(function(e){const n=new i.Literal(new Date),t=""+(new Date).getTime(),s=n.value.slice(0,4),r=n.value.slice(5,7),o=n.value.slice(8,10);return e.replace("{N}",t).replace("{YYYY}",s).replace("{MM}",r).replace("{DD}",o)}(i.uri.join(u,l.uri))):n.sym(l.uri+"#Iss"+(new Date).getTime()),p=c.doc(),f=n.literal(d.value);e.push(new i.Statement(c,s.ns.wf("tracker"),t,l)),e.push(new i.Statement(c,s.ns.dc("title"),f,l)),e.push(new i.Statement(c,s.ns.dct("created"),new Date,l));const m=r?n.each(r,s.ns.rdf("type"),null,r.doc()):n.each(t,s.ns.wf("initialState"));for(const n of m)e.push(new i.Statement(c,s.ns.rdf("type"),n,l));r&&e.push(new i.Statement(r,s.ns.wf("dependent"),c,l)),u&&(e.push(new i.Statement(c,s.ns.wf("tracker"),t,p)),e.push(new i.Statement(c,s.ns.rdfs("seeAlso"),l,p))),n.updater.update([],e,function(e,n,t){n?(a.parentNode.removeChild(a),o(c)):console.log("Error: can't save new issue:"+t)})}()},!1),a.appendChild(d),d.focus(),a}},719(e,n,t){t.d(n,{newTrackerButton:()=>l});var s=t(426),i=t(264),r=t(663);const o=s.ns,a=r.store.updater;function l(e,n){const t=s.login.newAppInstance(n.dom,{noun:"tracker"},function(t,r){function l(e){if(void 0!==e.elements)return e.elements.map(l);if(void 0===e.uri)return e;let n=e.uri;return n===p.uri?f:(n.slice(0,h.length)===h&&(n=r+n.slice(h.length)),d.sym(n))}const u="issuetracker.w3.org",c=s.ns.space,d=n.session.store;if(!r&&("/"!==(r=d.any(t,c("uriPrefix")).value).slice(-1)&&(i.log.error(u+": No / at end of uriPrefix "+r),r+="/"),r+=u+"/"+(new Date).getTime()+"/",!confirm("Make new tracker at "+r+"?")))return;const p=d.any(e,o.wf("stateStore")),f=d.sym(r+"store.ttl"),m=e.doc(),h=m.uri.slice(0,m.uri.lastIndexOf("/")+1),w=l(m),g=l(e),y=d.statementsMatching(void 0,void 0,void 0,m);for(let e=0;e<y.length;e++){const n=y[e];d.add(l(n.subject),l(n.predicate),l(n.object),w)}d.add(g,s.ns.space("inspiration"),e,p),d.add(g,s.ns.space("inspiration"),e,w),a.put(w,d.statementsMatching(void 0,void 0,void 0,w),"text/turtle",function(e,n,t){n?a.put(f,[],"text/turtle",function(e,n,t){n?console.info("Ok The tracker created OK at: "+g.uri+"\nMake a note of it, bookmark it. "):console.log("FAILED to set up new store at: "+f.uri+" : "+t)}):console.log("FAILED to save new tracker at: "+w.uri+" : "+t)})});return t.setAttribute("style","margin: 0.5em 1em;"),t}},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}},i={};function r(e){var n=i[e];if(void 0!==n)return n.exports;var t=i[e]={exports:{}};return s[e](t,t.exports,r),t.exports}r.n=e=>{var n=e&&e.__esModule?()=>e.default:()=>e;return r.d(n,{a:n}),n},r.d=(e,n)=>{for(var t in n)r.o(n,t)&&!r.o(e,t)&&Object.defineProperty(e,t,{enumerable:!0,get:n[t]})},r.o=(e,n)=>Object.prototype.hasOwnProperty.call(e,n),r.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})};var o={};r.r(o),r.d(o,{default:()=>w});var a=r(426),l=r(663),u=r(85),c=r(178),d=r(719),p=r(324),f=r(685),m=r(264);const h=l.store,w={icon:a.icons.iconBase+"noun_122196.svg",name:"issue",audience:[],label:function(e,n){const t=h.findTypeURIs(e);return t["http://www.w3.org/2005/01/wf/flow#Task"]||h.holds(e,a.ns.wf("tracker"))?"issue":t["http://www.w3.org/2005/01/wf/flow#Tracker"]?"tracker":null},mintClass:a.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 i=n.newInstance,r=i.doc(),o=l.authn.currentUser();o&&t.add(i,a.ns.dc("author"),o,r),t.add(i,a.ns.rdf("type"),a.ns.wf("Tracker"),r),t.add(i,a.ns.dc("created"),new Date,r),t.add(i,a.ns.wf("issueClass"),a.ns.wf("Task"),r),t.add(i,a.ns.wf("initialState"),a.ns.wf("Open"),r),t.add(i,a.ns.wf("stateStore"),s,r),t.add(i,a.ns.wf("assigneeClass"),a.ns.foaf("Person"),r),t.add(i,a.ns.wf("stateStore"),s,s);const u=t.statementsMatching(void 0,void 0,void 0,r).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),i=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(i)}([],u)}catch(n){return a.widgets.complain(e,"Error writing tracker configuration: "+n)}const c=e.dom;return n.div.appendChild(c.createElement("div")).innerHTML=`<h4>Success</h4>\n <p>Your <a href="${i.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 i(e){console.warn(e),s.appendChild(a.widgets.errorMessageBlock(t,e))}function o(e,n){e||i(n)}function w(e,s){const r=h.any(e,a.ns.wf("issueClass")),o=(s=s||r).sameTerm(r),l=h.any(s,a.ns.owl("disjointUnionOf"));if(!l)return i(`Configuration error: state ${r} does not have substates`);let d=l.elements;o&&d.length>2&&(d=d.filter(e=>h.holds(e,a.ns.rdfs("subClassOf"),a.ns.wf("Open"))||e.sameTerm(a.ns.wf("Open"))));const p={columnDropHandler:async function(e,t){const i=(0,c.getState)(e,s),r=h.the(e,a.ns.wf("tracker"),null,e.doc()),o=h.any(r,a.ns.wf("stateStore"));if(!t.sameTerm(i)){try{await h.updater.update([m.st(e,a.ns.rdf("type"),i,o)],[m.st(e,a.ns.rdf("type"),t,o)])}catch(e){a.widgets.complain(n,"Unable to change issue state: "+e)}f.refresh()}},filter:o?null:function(e){return!!h.findTypeURIs(e)[a.ns.wf("Open").uri]}};p.sortBy=a.ns.dct("created"),p.sortReverse=!0;const f=(0,u.board)(t,d,function(e){return(0,c.renderIssueCard)(e,n)},p);return f}function g(e){const s=t.createElement("div"),i=l.authn.currentUser(),r={div:s,dom:t,noun:"tracker",statusArea:s,me:i,refreshTarget:e},o=[n.session.paneRegistry.byName("issue")];return a.create.newThingUI(r,n,o),s}function y(){const s=h.any(x,a.ns.wf("issueClass")),i=[k,C,s].concat(h.each(x,a.ns.wf("issueCategory")));i.push(F);const r={renderMain:function(s,i){if(s.innerHTML="",i.sameTerm(b))s.appendChild(w(x));else if(i.sameTerm(C))s.appendChild(function(s){function i(){const e=new m.IndexedFormula;return u.pat.optional.push(e),e}const r=h.any(e,a.ns.wf("issueClass")),o=h.each(s,a.ns.wf("issueCategory")),l=["issue","state","created"],u=new m.Query(a.utils.label(e));for(let e=0;e<o.length;e++)l.push("_cat_"+e);const d={};l.forEach(function(e){u.vars.push(d[e]=m.variable(e))}),u.pat.add(d.issue,a.ns.wf("tracker"),s),u.pat.add(d.issue,a.ns.dct("created"),d.created),u.pat.add(d.issue,a.ns.rdf("type"),d.state),u.pat.add(d.state,a.ns.rdfs("subClassOf"),r),u.pat.optional=[];for(let e=0;e<o.length;e++){const n=i();n.add(d.issue,a.ns.rdf("type"),d["_cat_"+e]),n.add(d["_cat_"+e],a.ns.rdfs("subClassOf"),o[e])}const p=h.any(s,a.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 r=i();u.vars.push(d[s]=m.variable(s)),r.add(d.issue,t,d[s])}}const f={};h.each(void 0,a.ns.rdfs("subClassOf"),r).forEach(function(e){(h.holds(e,a.ns.rdfs("subClassOf"),a.ns.wf("Open"))||e.sameTerm(a.ns.wf("Open")))&&(f[e.uri]=!0)});const w=(0,a.table)(t,{query:u,keyVariable:"?issue",sortBy:"?created",sortReverse:!0,hints:{"?issue":{linkFunction:function(e){const t=m.sym(e);(0,c.exposeOverlay)(t,n)},label:"Title"},"?created":{cellFormat:"shortDate"},"?state":{initialSelection:f,label:"Status"}}}),g=h.any(e,a.ns.wf("stateStore"));return w.appendChild(function(e,n){return a.widgets.button(t,a.icons.iconBase+"noun_479395.svg","refresh table",async t=>{try{await h.fetcher.load(e,{force:!0,clearPreviousData:!0})}catch(e){return void alert(e)}a.widgets.refreshTree(n)})}(g,w)),w}(x));else if(i.sameTerm(F))s.appendChild(function(e){const n=t.createElement("div");n.appendChild((0,f.csvButton)(t,e));const s=h.any(e,a.ns.wf("issueClass")),i=[C,s].concat(h.each(e,a.ns.wf("issueCategory"))),r=n.appendChild(t.createElement("div"));a.widgets.renderNameValuePair(t,h,r,null,"Default view").appendChild(a.widgets.makeSelectForOptions(t,h,e,a.ns.wf("defaultView"),i,{},e.doc()));const l={dom:t,div:n,noun:"tracker"};return a.login.registrationControl(l,e,a.ns.wf("Tracker")).then(s=>{const i=a.ns.wf("TrackerSettingsForm");m.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',h,i.doc().uri,"text/turtle"),a.widgets.appendForm(t,n,{},e,i,e.doc(),o)}),n}(x));else if(i.sameTerm(k))s.appendChild(function(e){const n=t.createElement("div"),s={dom:t,div:n,noun:"tracker"};return a.login.registrationList(s,{public:!0,private:!0,type:e}).then(e=>{n.appendChild(g(n))}),n}(a.ns.wf("Tracker")));else{if(!h.holds(x,a.ns.wf("issueCategory"),i)&&!h.holds(x,a.ns.wf("issueClass"),i))throw new Error("Unexpected tab type: "+i);s.appendChild(w(x,i))}},items:i,selectedTab:h.any(x,a.ns.wf("defaultView"),null,x.doc())||C},l=k.doc();return h.add(k,a.ns.rdfs("label"),"My Trackers",l),h.add(F,a.ns.rdfs("label"),"Settings",l),h.add(s,a.ns.rdfs("label"),"By State",l),a.tabs.tabWidget(r)}n.paneDiv=s,s.setAttribute("class","issuePane");const b=a.ns.wf("BoardView"),C=a.ns.wf("TableView"),F=a.ns.wf("SettingsView"),k=a.ns.wf("InstancesView"),v=h.updater,T=h.findTypeURIs(e);let x;const S=a.ns.wf("").doc();h.holds(void 0,void 0,void 0,S)||m.parse(r(240),h,S.uri,"text/turtle");const P=a.ns.ui("").doc();let O;h.holds(void 0,void 0,void 0,P)||m.parse(r(197),h,P.uri,"text/turtle"),T["http://www.w3.org/2005/01/wf/flow#Task"]||h.holds(e,a.ns.wf("tracker"))?async function(){if(x=h.any(e,a.ns.wf("tracker")),!x)throw new Error("This issue "+e+"has no tracker");try{await n.session.store.fetcher.load(x.doc())}catch(e){return i("Failed to load tracker config "+x.doc()+": "+e)}const t=h.any(x,a.ns.wf("stateStore"));if(!t)return i("Tracker has no state store: "+x);try{await n.session.store.fetcher.load(e)}catch(e){return i("Failed to load issue state "+t+": "+e)}s.appendChild((0,c.renderIssue)(e,n)),v.addDownstreamChangeListener(t,function(){a.widgets.refreshTree(s)})}().then(()=>console.log("Single issue rendered")):T["http://www.w3.org/2005/01/wf/flow#Tracker"]?async function(){function i(e){a.widgets.refreshTree(s),(0,c.exposeOverlay)(e,n),f.disabled=!1}x=e;try{await async function(e,n){async function t(n){const t=e.any(n,a.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 i=new Set(t.elements.map(e=>e.uri)),r=new Set(e.each(null,a.ns.rdfs("subClassOf"),n,s).map(e=>e.uri)),o=[...r].filter(e=>!i.has(e)).map(t=>({action:"delete",st:m.st(e.sym(t),a.ns.rdfs("subClassOf"),n,s)})),l=[...i].filter(e=>!r.has(e)).map(t=>({action:"insert",st:m.st(e.sym(t),a.ns.rdfs("subClassOf"),n,s)}));return o.concat(l)}const s=n.doc(),i=e.any(n,a.ns.wf("issueClass")),r=e.each(n,a.ns.wf("issueCategory")).concat([i]);let o=[];for(const e of r)o=o.concat(await t(e));if(o.length){const n=o.filter(e=>"insert"===e.action).map(e=>e.st),t=o.filter(e=>"delete"===e.action).map(e=>e.st);console.log("Damage:",o),confirm(`Fix ${o} inconsistent subclasses in tracker config?`)&&await e.updater.update(t,n)}}(h,x)}catch(e){console.log("@@@ Error fixing subclasses in config: "+e)}const r=h.any(e,a.ns.wf("issueClass"));if(!r)throw new Error("This tracker has no issueClass");const o=h.any(e,a.ns.wf("stateStore"));if(!o)throw new Error("This tracker has no stateStore");const l=t.createElement("h2");l.setAttribute("style","font-size: 150%"),s.appendChild(l);const u=a.utils.label(r);l.appendChild(t.createTextNode(u+" list"));const f=t.createElement("button"),w=t.createElement("div");f.setAttribute("type","button"),f.setAttribute("style","padding: 0.3em; font-size: 100%; margin: 0.5em;"),w.appendChild(f),s.appendChild(w);const g=t.createElement("img");g.setAttribute("src",a.icons.iconBase+"noun_19460_green.svg"),g.setAttribute("style","width: 1em; height: 1em; margin: 0.2em;"),f.appendChild(g);const b=t.createElement("span");b.innerHTML="New "+u,f.appendChild(b),f.addEventListener("click",function(e){f.disabled=!0,w.appendChild((0,p.newIssueForm)(t,h,x,null,i))},!1),n.session.store.fetcher.load([o]).then(function(t){const i=y();s.appendChild(i),i.refresh||console.log("No table refresh function?!"),s.appendChild((0,d.newTrackerButton)(e,n)),v.addDownstreamChangeListener(o,i.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 M=s.appendChild(t.createElement("div"));return n.overlay=M,M.style="position: fixed; z-index: 100; top: 1.51em; right: 2em; left: 2em; bottom:1.5em; border: 0.1em grey; overflow: scroll;",M.style.visibility="hidden",l.authn.checkUser().then(e=>{if(e)return console.log("Web ID set already: "+e),void(n.me=e);O=a.login.loginStatusBox(t,e=>{e?(n.me=h.sym(e),console.log("Web ID set from login button: "+e),s.removeChild(O)):n.me=null}),O.setAttribute("style","margin: 0.5em 1em;"),s.appendChild(O),n.statusArea||(n.statusArea=s.appendChild(t.createElement("div")))}),s}};return o})());
20468
20521
 
20469
20522
  /***/ },
20470
20523
 
20471
20524
  /***/ 1927
20472
20525
  (module, __unused_webpack_exports, __webpack_require__) {
20473
20526
 
20474
- !function(e,t){ true?module.exports=t(__webpack_require__(500),__webpack_require__(8230),__webpack_require__(9332)):0}(this,(e,t,n)=>(()=>{"use strict";var i={264(e){e.exports=t},426(t){t.exports=e},663(e){e.exports=n}},o={};function a(e){var t=o[e];if(void 0!==t)return t.exports;var n=o[e]={exports:{}};return i[e](n,n.exports,a),n.exports}a.n=e=>{var t=e&&e.__esModule?()=>e.default:()=>e;return a.d(t,{a:t}),t},a.d=(e,t)=>{for(var n in t)a.o(t,n)&&!a.o(e,n)&&Object.defineProperty(e,n,{enumerable:!0,get:t[n]})},a.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),a.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})};var s={};a.r(s),a.d(s,{default:()=>p});var r=a(426),l=a(264),d=a(663);const{typeIndex:c}=d.solidLogicSingleton,{loadTypeIndexesFor:u}=c,m=r.ns,p={icon:r.icons.iconBase+"noun_66617.svg",name:"meeting",audience:[m.solid("PowerUser")],label:function(e,t){const n=t.session.store,i=r.ns;return n.holds(e,i.rdf("type"),i.meeting("Meeting"))?"Meeting":null},mintClass:r.ns.meeting("Meeting"),mintNew:function(e,t){return new Promise(function(n,i){const o=e.session.store,a=r.ns;t.newInstance=t.newInstance||o.sym(t.newBase+"index.ttl#this");const s=t.newInstance,c=s.doc(),u=d.authn.currentUser();u&&o.add(s,a.dc("author"),u,c),o.add(s,a.rdf("type"),a.meeting("Meeting"),c),o.add(s,a.dc("created"),new Date,c),o.add(s,a.ui("backgroundColor"),new l.Literal("#ddddcc",void 0,a.xsd("color")),c);const m=new l.Collection;o.add(s,a.meeting("toolList"),m,c),m.elements.push(s),o.updater.put(c,o.statementsMatching(void 0,void 0,void 0,c),"text/turtle",function(e,o,a){o?n(t):i(new Error("Error writing meeting configuration: "+a))})})},render:function(e,t){const n=t.dom,i=t.session.store,o=r.ns,a=i.updater,s=this,c=function(e,t){console.log(e);const i=n.createElement("pre");i.setAttribute("style","background-color: "+t||0),h.appendChild(i),i.appendChild(n.createTextNode(e))},m=function(e,t){e||c(t)},p=e,g=e.doc(),f=e.dir().uri,h=n.createElement("div"),b=h.appendChild(n.createElement("table"));b.style="width: 100%; height: 100%; margin:0;";const w=b.appendChild(n.createElement("tr"));w.appendChild(n.createElement("div"));const y=b.appendChild(n.createElement("tr")),v=b.appendChild(n.createElement("td")).appendChild(n.createElement("table")).appendChild(n.createElement("tr"));w.setAttribute("style","height: 2em;");let C=null;const x=function(){a.put(g,i.statementsMatching(void 0,void 0,void 0,g),"text/turtle",function(e,t,n){t?($.refresh(),z()):c(n="FAILED to save new thing at: "+g+" : "+n)})},k=function(e,t,n){const s=t.doc();n&&i.add(p,n,t,s),i.add(t,o.meeting("parentMeeting"),p,s),a.put(s,i.statementsMatching(void 0,void 0,void 0,s),"text/turtle",function(e,n,i){n?x():c("FAILED to save new tool at: "+t+" : "+i)})},T=function(e,t,n,a){t&&i.add(p,t,e,g);const s=r.widgets.newThing(g);return n&&i.add(s,o.rdfs("label"),n,g),a&&i.add(s,o.meeting("icon"),i.sym(a),g),i.add(s,o.rdf("type"),o.meeting("Tool"),g),i.add(s,o.meeting("target"),e,g),i.the(p,o.meeting("toolList")).elements.push(s),s};function A(e){const t=/https:\/\/www\.google\..*\/maps\//,n="https://www.google.com/maps/embed/v1/",i=e.uri;if(!i.match(t))return e;if(i.startsWith(n))return e;const o=i.replace(t,n)+"&key=AIzaSyB8aaT6bY9tcLCmc2oPCkdUYLmTOWM8R54";return console.log("Converted Google Map URI! "+o),l.sym(o)}const E=function(n){Promise.all(n.map(function(n){return function(n){return new Promise(function(a){console.log("Dropped on thing "+n);const s=n.uri;if(s.startsWith("http:")&&s.indexOf("#")<0)return function(n){const a=o.wf("attachment");i.add(e,a,n,e.doc()),P({icon:"noun_160581.svg",limit:1,shareTab:!0},{newInstance:e,pane:t.session.paneRegistry.byName("link"),predicate:o.meeting("attachmentTool"),tabTitle:"Links",view:"link",noIndexHTML:!0})}(n),a(n);i.fetcher.nowOrWhenFetched(n,function(e,t){function d(e){e=A(e),console.log("make web page attachement tab "+e);const t=T(e,r.ns.wf("attachment"),r.utils.label(e),null);return i.add(t,r.ns.meeting("view"),"iframe",g),a(e)}if(e){const e=n,t=i.findTypeURIs(e);for(const e in t)console.log(" drop object type includes: "+e);if(o.vcard("Individual").uri in t||o.foaf("Person").uri in t||o.foaf("Agent").uri in t)return function(e){const t=i.any(e,o.foaf("preferredURI")),n=t?i.sym(t):e,a=i.any(p,o.meeting("attendeeGroup")),s=function(e,t){const n=[l.st(t,r.ns.vcard("hasMember"),e,t.doc())],a=i.any(e,o.vcard("fn"))||i.any(e,o.foaf("name"));a&&n.push(l.st(e,r.ns.vcard("fn"),a,t.doc())),i.fetcher.nowOrWhenFetched(t.doc(),void 0,function(o,a){o?i.updater.update([],n,function(t,n,i){m(n,i),n&&console.log("Addded to particpants OK: "+e)}):c("Can't read group to add person"+t)})};a?s(n,a):I().then(function(e){const t=e.newInstance;s(n,t),i.fetcher.putBack(g,{contentType:"text/turtle"}).then(function(e){console.log("Particiants Group created: "+t)})}).catch(function(e){c(e)})}(n),a(n);if(s.startsWith("https:")&&s.indexOf("#")<0){const e=i.fetcher.getHeader(n,"x-frame-options");let t=!0;if(e)for(let n=0;n<e.length;n++)console.log("x-frame-options: "+e[n]),e[n].indexOf("sameorigin")<0&&(t=!1),e[n].indexOf("deny")<0&&(t=!1);if(t)return function(e){const t=T(e,r.ns.wf("attachment"),r.utils.label(e),null);i.add(t,r.ns.meeting("view"),"iframe",g)}(n=A(n)),a(n)}return console.log("Default: assume web page attachement "+n),d(n)}return console.log("Error looking up dropped thing, will just add it anyway. "+n+": "+t),d(n)})})}(l.sym(n))})).then(function(e){x()})},F=function(e){r.widgets.uploadFiles(i.fetcher,e,p.dir().uri+"Files",p.dir().uri+"Pictures",function(e,t){e.type.startsWith("image/")?L("Files"):M("Pictures")})},L=function(e){return P({icon:"noun_598334.svg",limit:1,shareTab:!0},{newInstance:i.sym(p.dir().uri+e+"/"),pane:t.session.paneRegistry.byName("folder"),predicate:o.meeting("pictures"),shareTab:!0,tabTitle:e,view:"slideshow",noIndexHTML:!0})},M=function(e){return P({icon:"noun_681601.svg",limit:1,shareTab:!0},{newInstance:i.sym(p.dir().uri+"Files/"),pane:t.session.paneRegistry.byName("folder"),predicate:o.meeting("materialsFolder"),tabTitle:"Materials",noIndexHTML:!0})},I=function(){return P({icon:"noun_339237.svg",limit:1,shareTab:!0},{newInstance:i.sym(p.dir().uri+"Attendees/index.ttl#this"),pane:t.session.paneRegistry.byName("contact"),predicate:o.meeting("attendeeGroup"),tabTitle:"Attendees",instanceClass:o.vcard("Group"),instanceName:r.utils.label(e)+" attendees",noIndexHTML:!0})};function P(e,n){return new Promise(function(i,o){const a=t.session.store;if(!n.useExisting){const t=a.any(p,n.predicate);if(t){if(e.limit&&1===e.limit&&!e.shareTab)return c("Already have "+t+" as "+r.utils.label(n.predicate)),c("Cant have two"),i(null);if(e.shareTab)return console.log("Using existing "+t+" as "+r.utils.label(n.predicate)),i({me:C,newInstance:t,instanceClass:n.instanceClass})}}C||n.me||o(new Error("Username not defined for new tool")),n.me=n.me||C,n.newInstance=n.useExisting||n.newInstance||a.sym(n.newBase+"index.ttl#this"),n.pane.mintNew(t,n).then(function(e){const t=T(e.newInstance,e.predicate,e.tabTitle,e.pane.icon);e.view&&a.add(t,r.ns.meeting("view"),e.view,g),x(),a.fetcher.putBack(g,{contentType:"text/turtle"}).then(function(t){i(e)}).catch(function(e){o(e)})}).catch(function(e){c(e),o(e)})})}const _=function(){const e=r.login.selectWorkspace(n,{noun:"meeting"},function(i,o){s.mintNew(t,{newBase:o}).then(function(t){const i=t.newInstance;R.removeChild(e);const o=R.appendChild(n.createElement("p"));o.setAttribute("style","font-size: 140%;"),o.innerHTML="Your <a target='_blank' href='"+i.uri+"'><b>new meeting</b></a> is ready to be set up. <br/><br/><a target='_blank' href='"+i.uri+"'>Go to your new meeting.</a>"}).catch(function(t){R.removeChild(e),R.appendChild(r.widgets.errorMessageBlock(n,t))})});R.appendChild(e)},S=[{icon:"noun_339237.svg",maker:function(e){const n=f+"Group/",i=t.session.store;let a=i.any(p,o.meeting("particpants"));a||(a=l.sym(n+"index.ttl#this")),console.log("Participant group: "+a);const s=T(a,o.meeting("particpants"),"Particpants",r.icons.iconBase+"noun_339237.svg");i.add(s,r.ns.meeting("view"),"peoplePicker",g),x()},hint:"Make a group of people",limit:1},{icon:"noun_346777.svg",maker:function(e){return P(e,{useExisting:p,pane:t.session.paneRegistry.byName("schedule"),view:"schedule",tabTitle:"Schedule poll",noIndexHTML:!0})},hint:"Make a poll to schedule the meeting"},{icon:"noun_48218.svg",maker:function(e){},limit:1,hint:"Add an agenda list",disabled:!0},{icon:"noun_79217.svg",maker:function(e){return P(e,{newBase:f+"SharedNotes/",predicate:r.ns.meeting("sharedNotes"),tabTitle:"Shared Notes",pane:t.session.paneRegistry.byName("pad")})},hint:"Add a shared notepad"},{icon:"noun_346319.svg",maker:function(e){const n=f+"Chat/",i=t.session.store;if(i.holds(p,o.meeting("chat")))return void console.log("Ignored - already have chat");const a=i.sym(n+"chat.ttl");i.add(a,o.rdf("type"),o.meeting("Chat"),a),T(a,o.meeting("chat"),"Chat",r.icons.iconBase+"noun_346319.svg"),k(0,a,o.meeting("chat"))},limit:1,hint:"Add a chat channel for the meeting"},{icon:"noun_17020.svg",maker:function(e){const n=f+"Actions/",i=t.session.store;if(i.holds(p,o.meeting("actions")))return void console.log("Ignored - already have actions");const a=i.sym(n+"config.ttl"),s=i.sym(n+"config.ttl#this"),l=i.sym(n+"state.ttl");i.add(s,o.dc("title"),(i.anyValue(p,o.cal("summary"))||"Meeting ")+" actions",a),i.add(s,o.wf("issueClass"),o.wf("Task"),a),i.add(s,o.wf("initialState"),o.wf("Open"),a),i.add(s,o.wf("stateStore"),l,a),i.add(s,o.wf("assigneeClass"),o.foaf("Person"),a),i.add(s,o.rdf("type"),o.wf("Tracker"),a),i.add(s,o.rdf("type"),o.wf("Tracker"),a),T(s,o.meeting("actions"),"Actions",r.icons.iconBase+"noun_17020.svg"),k(0,s,o.meeting("actions"))},limit:1,hint:"Add a list of action items"},{icon:"noun_260227.svg",maker:function(e){const n=t.session.store,i=l.sym("https://meet.jit.si/"+r.utils.genUuid());if(n.holds(p,o.meeting("videoCallPage")))return void console.log("Ignored - already have a videoCallPage");n.add(i,o.rdf("type"),o.meeting("VideoCallPage"),g);const a=T(i,o.meeting("videoCallPage"),"Video call",r.icons.iconBase+"noun_260227.svg");n.add(a,o.meeting("view"),"iframe",g),x()},limit:1,hint:"Add a video call for the meeting"},{icon:"noun_25830.svg",maker:function(e){r.widgets.askName(n,i,R,o.log("uri"),r.ns.rdf("Resource")).then(function(e){if(!e)return z();const n=t.session.store,i=r.ns,o=n.sym(e),a=T(o,i.wf("attachment"),r.utils.label(o),null);n.add(a,i.meeting("view"),"iframe",g),x()}).catch(function(e){c("Error making new sub-meeting: "+e)})},hint:"Attach meeting materials",disabled:!1},{icon:"noun_123691.svg",maker:function(e){const n=t.session.store,i=r.ns,o=p.dir();if(e.limit&&1===e.limit&&n.holds(p,i.wf("sharingControl")))return void c("Ignored - already have "+r.utils.label(V.predicate));const a=T(o,i.wf("sharingControl"),"Sharing",r.icons.iconBase+"noun_123691.svg");n.add(a,i.meeting("view"),"sharing",g),x()},limit:1,hint:"Control Sharing",disabled:!1},{icon:"noun_66617.svg",maker:function(e){r.widgets.askName(n,i,R,o.foaf("name"),r.ns.meeting("Meeting")).then(function(n){if(!n)return z();const i=encodeURIComponent(n),o={newBase:f+i+"/",predicate:r.ns.meeting("subMeeting"),tabTitle:n,pane:t.session.paneRegistry.byName("meeting")};return P(e,o)}).catch(function(e){c("Error making new sub-meeting: "+e)})},hint:"Make a sub meeting",disabled:!1}],N=l.sym("https://solid.github.io/solid-panes/meeting/meetingDetailsForm.ttl#settings");l.parse('@prefix : <http://www.w3.org/ns/ui#> .\n@prefix f: <#> .\n@prefix dc: <http://purl.org/dc/elements/1.1/>.\n@prefix cal: <http://www.w3.org/2002/12/cal/ical#>.\n@prefix meeting: <http://www.w3.org/ns/pim/meeting#>.\n@prefix ns: <http://www.w3.org/2006/vcard/ns#> .\n@prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .\n@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#>.\n@prefix te: <http://purl.org/dc/terms/> .\n@prefix dc: <http://purl.org/dc/elements/1.1/>.\n@prefix xsd: <http://www.w3.org/2001/XMLSchema#>.\n@prefix ui: <http://www.w3.org/ns/ui#>.\n\n f:main a :Form;\n cal:summary "Meeting Details";\n :part f:titleField, f:locationField, f:startField,\n f:endField, f:eventComment, f:colorField .\n\n f:titleField a :SingleLineTextField;\n :maxLength 256;\n :property cal:summary;\n :label "Name of meeting";\n :size 80 .\n\n f:locationField a :SingleLineTextField;\n :maxLength 128;\n :property cal:location;\n :size 40 .\n\n f:startField a :DateField;\n :label "Start";\n :property cal:dtstart .\n\n f:endField a :DateField;\n :label "End";\n :property cal:dtend .\n\n f:colorField a :ColorField;\n :label "Tab color";\n # :default "#ddddcc"^^xsd:color;\n :property ui:backgroundColor .\n\n f:eventComment\n a ui:MultiLineTextField;\n # ui:maxLength\n # "1048";\n # ui:size\n # "40".\n ui:property\n cal:comment.\n\n###################################################\n\nf:settings a :Form;\n dc:title "Tab settings";\n :part f:labelField, f:targetField, f:viewField.\n\n f:labelField a :SingleLineTextField;\n :maxLength 128;\n :property rdfs:label;\n :label "Label on tab";\n :size 40 .\n\n f:targetField a :NamedNodeURIField;\n :maxLength 1024; # Longer?\n :property meeting:target;\n :label "URL of resource";\n :size 80 .\n\n f:colorField2 a :ColorField;\n :label "Tab color";\n # :default "#ddddcc"^^xsd:color;\n :property ui:backgroundColor .\n\n f:viewField a :SingleLineTextField;\n :maxLength 128;\n :property meeting:view;\n :label "View mode (experts only)";\n :size 40 .\n\n#\n',i,N.doc().uri,"text/turtle");const B="padding: 1em; width: 3em; height: 3em;",U=v.appendChild(n.createElement("td")),R=v.appendChild(n.createElement("td")),D=U.appendChild(n.createElement("img"));let O=!1;D.setAttribute("src",r.icons.iconBase+"noun_19460_green.svg"),D.setAttribute("style",B+"opacity: 50%;"),D.setAttribute("title","Add another tool to the meeting");const j=function(e){O=!O,D.setAttribute("style",B+(O?"background-color: yellow;":"")),H(O?"":"display: none;")};let G;d.authn.checkUser().then(e=>{if(e)return C=e,D.addEventListener("click",j),void D.setAttribute("style",B);G=r.login.loginStatusBox(n,e=>{e?(C=i.sym(e),R.removeChild(G),D.addEventListener("click",j),D.setAttribute("style",B)):(console.log("(Logged out)"),C=null)}),G.setAttribute("style","margin: 0.5em 1em;"),R.appendChild(G)});const W=[];for(let e=0;e<S.length;e++)(function(){const t=S[e],i=U.appendChild(n.createElement("img"));i.setAttribute("src",r.icons.iconBase+t.icon),i.setAttribute("style",B+"display: none;"),W.push(i),i.tool=t;const o=t.maker;t.disabled||i.addEventListener("click",function(e){q(i),o(t)})})();const H=function(e){for(let t=0;t<W.length;t++){let n=B+e;S[t].disabled&&(n+="opacity: 0.3;"),W[t].setAttribute("style",n)}},z=function(){H("display: none;"),D.setAttribute("style",B)},q=function(e){H("display: none;"),e.setAttribute("style",B+"background-color: yellow;")},V={dom:n};V.predicate=o.meeting("toolList"),V.subject=e,V.ordered=!0,V.orientation=1,V.renderMain=function(e,a){let s,m=null,f=null;e.innerHTML="";const h=function(t,n){t||(e.textContent=""+n)},b=function(){e.appendChild(n.createElement("h3")).textContent="Details of meeting";const t=l.sym("https://solid.github.io/solid-panes/meeting/meetingDetailsForm.ttl#main");r.widgets.appendForm(document,e,{},p,t,p.doc(),h),e.appendChild(function(){const e=n.createElement("div"),t=e.appendChild(n.createElement("p"));return t.setAttribute("style","margin: 0em; padding:3em; color: #888;"),t.textContent="Tip: Drag URL-bar icons of web pages into the tab bar on the left to add new meeting materials.",e}()),C=d.authn.currentUser(),C&&i.add(p,o.dc("author"),C,g);const a={noun:"meeting",me:C,statusArea:e,div:e,dom:n};r.login.registrationControl(a,p,o.meeting("Meeting")).then(function(e){console.log("Registration control finsished.")}),r.pad.manageParticipation(n,e,g,p,C,{});const s="height: 2em; width: 2em; margin:0.5em;",c=e.appendChild(n.createElement("div")),u=c.appendChild(n.createElement("img"));u.setAttribute("src",r.icons.iconBase+"noun_145978.svg"),u.setAttribute("title","Make a fresh new meeting"),u.addEventListener("click",_),u.setAttribute("style",s);const m=c.appendChild(n.createElement("a"));m.setAttribute("href","https://github.com/solid/solid-panes"),m.setAttribute("target","_blank");const f=m.appendChild(n.createElement("img"));f.setAttribute("src",r.icons.iconBase+"noun_368567.svg"),f.setAttribute("title","Fork me on github"),f.setAttribute("style",s+"opacity: 50%;")};if(i.holds(a,o.rdf("type"),o.meeting("Tool"))){const g=i.any(a,o.meeting("target"));if(g.sameTerm(p)&&!i.any(a,o.meeting("view")))b();else{let h=i.any(a,o.meeting("view"));h=h?h.value:null,"details"===h?b():"peoplePicker"===h?function(){const t={div:e,dom:n};e.appendChild(n.createElement("h4")).textContent="Meeting Participants";const a=function(e){const t=[l.st(p,o.meeting("particpantGroup"),e,p.doc())];i.updater.update([],t,function(t,n,i){n?f=e:c("Cant save participants group: "+i)})};f=i.any(p,o.meeting("particpantGroup")),d.authn.checkUser().then(e=>{e&&u(i.sym(e)).then(function(){const e={defaultNewGroupName:"Meeting Participants",selectedGroup:f};new r.widgets.PeoplePicker(t.div,t.index.private[0],a,e).render()})})}():"iframe"===h?function(t){const i=e.appendChild(n.createElement("iframe"));i.setAttribute("src",t.uri),i.setAttribute("style","border: none; margin: 0; padding: 0; height: 100%; width: 100%;"),i.setAttribute("allow","microphone camera"),i.setAttribute("name","disable-x-frame-options"),e.style.padding=0}(g):(m=h?t.session.paneRegistry.byName(h):null,s=e.appendChild(n.createElement("table")),s.style.width="100%",t.getOutliner(n).GotoSubject(g,!0,m,!1,void 0,s))}}else a.sameTerm(p)?b():(!a.sameTerm(a.doc())||i.holds(a,r.ns.rdf("type"),r.ns.meeting("Chat"))||i.holds(a,r.ns.rdf("type"),r.ns.meeting("PaneView")))&&(s=e.appendChild(n.createElement("table")),t.getOutliner(n).GotoSubject(a,!0,void 0,!1,void 0,s))},V.renderTab=function(e,t){if(i.holds(t,o.rdf("type"),o.meeting("Tool"))){const a=i.any(t,o.meeting("target"));let s=i.any(t,o.rdfs("label"));s=s?s.value:r.utils.label(a);const l=e.appendChild(n.createElement("div"));l.textContent=s,l.setAttribute("style","margin-left: 0.7em");const d=i.any(t,o.meeting("icon"));if(d){const t=e.appendChild(n.createElement("table")).appendChild(n.createElement("tr")),i=t.appendChild(n.createElement("td")),o=t.appendChild(n.createElement("td")),a=i.appendChild(n.createElement("img"));a.setAttribute("src",d.uri),a.setAttribute("style","width: 1.5em; height: 1.5em;"),a.setAttribute("title",s),o.appendChild(l)}else e.appendChild(l)}else e.textContent=r.utils.label(t)},V.renderTabSettings=function(e,t){if(e.innerHTML="",e.style+="border-color: #eed;",e.appendChild(n.createElement("h3")).textContent="Adjust this tab",i.holds(t,o.rdf("type"),o.meeting("Tool"))){const a=l.sym("https://solid.github.io/solid-panes/meeting/meetingDetailsForm.ttl#settings");r.widgets.appendForm(document,e,{},t,a,p.doc(),m),r.widgets.deleteButtonWithCheck(n,e,"tab",function(){const e=i.the(p,o.meeting("toolList"));for(let n=0;n<e.elements.length;n++)if(e.elements[n].sameTerm(t)){e.elements.splice(n,1);break}const n=i.any(t,o.meeting("target")),a=i.statementsMatching(t).concat(i.statementsMatching(void 0,void 0,t)).concat(i.statementsMatching(p,void 0,n));i.remove(a),x()}).setAttribute("style","width: 1.5em; height: 1.5em;")}else e.appendChild(n.createElement("h4")).textContent="(No adjustments available)"},V.backgroundColor=i.anyValue(e,o.ui("backgroundColor"))||"#ddddcc";const $=y.appendChild(r.tabs.tabWidget(V));return r.aclControl.preventBrowserDropEvents(n),r.widgets.makeDropTarget($.tabContainer,E,F),r.widgets.makeDropTarget(U,E,F),h}};return s})());
20527
+ !function(e,t){ true?module.exports=t(__webpack_require__(500),__webpack_require__(8230),__webpack_require__(9332)):0}(this,(e,t,n)=>(()=>{"use strict";var i={264(e){e.exports=t},663(e){e.exports=n},426(t){t.exports=e}},o={};function a(e){var t=o[e];if(void 0!==t)return t.exports;var n=o[e]={exports:{}};return i[e](n,n.exports,a),n.exports}a.n=e=>{var t=e&&e.__esModule?()=>e.default:()=>e;return a.d(t,{a:t}),t},a.d=(e,t)=>{for(var n in t)a.o(t,n)&&!a.o(e,n)&&Object.defineProperty(e,n,{enumerable:!0,get:t[n]})},a.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),a.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})};var s={};a.r(s),a.d(s,{default:()=>p});var r=a(426),l=a(264),d=a(663);const{typeIndex:c}=d.solidLogicSingleton,{loadTypeIndexesFor:u}=c,m=r.ns,p={icon:r.icons.iconBase+"noun_66617.svg",name:"meeting",audience:[m.solid("PowerUser")],label:function(e,t){const n=t.session.store,i=r.ns;return n.holds(e,i.rdf("type"),i.meeting("Meeting"))?"Meeting":null},mintClass:r.ns.meeting("Meeting"),mintNew:function(e,t){return new Promise(function(n,i){const o=e.session.store,a=r.ns;t.newInstance=t.newInstance||o.sym(t.newBase+"index.ttl#this");const s=t.newInstance,c=s.doc(),u=d.authn.currentUser();u&&o.add(s,a.dc("author"),u,c),o.add(s,a.rdf("type"),a.meeting("Meeting"),c),o.add(s,a.dc("created"),new Date,c),o.add(s,a.ui("backgroundColor"),new l.Literal("#ddddcc",void 0,a.xsd("color")),c);const m=new l.Collection;o.add(s,a.meeting("toolList"),m,c),m.elements.push(s),o.updater.put(c,o.statementsMatching(void 0,void 0,void 0,c),"text/turtle",function(e,o,a){o?n(t):i(new Error("Error writing meeting configuration: "+a))})})},render:function(e,t){const n=t.dom,i=t.session.store,o=r.ns,a=i.updater,s=this,c=function(e,t){console.log(e);const i=n.createElement("pre");i.setAttribute("style","background-color: "+t||0),h.appendChild(i),i.appendChild(n.createTextNode(e))},m=function(e,t){e||c(t)},p=e,g=e.doc(),f=e.dir().uri,h=n.createElement("div"),b=h.appendChild(n.createElement("table"));b.style="width: 100%; height: 100%; margin:0;";const w=b.appendChild(n.createElement("tr"));w.appendChild(n.createElement("div"));const y=b.appendChild(n.createElement("tr")),v=b.appendChild(n.createElement("td")).appendChild(n.createElement("table")).appendChild(n.createElement("tr"));w.setAttribute("style","height: 2em;");let C=null;const x=function(){a.put(g,i.statementsMatching(void 0,void 0,void 0,g),"text/turtle",function(e,t,n){t?($.refresh(),z()):c(n="FAILED to save new thing at: "+g+" : "+n)})},k=function(e,t,n){const s=t.doc();n&&i.add(p,n,t,s),i.add(t,o.meeting("parentMeeting"),p,s),a.put(s,i.statementsMatching(void 0,void 0,void 0,s),"text/turtle",function(e,n,i){n?x():c("FAILED to save new tool at: "+t+" : "+i)})},T=function(e,t,n,a){t&&i.add(p,t,e,g);const s=r.widgets.newThing(g);return n&&i.add(s,o.rdfs("label"),n,g),a&&i.add(s,o.meeting("icon"),i.sym(a),g),i.add(s,o.rdf("type"),o.meeting("Tool"),g),i.add(s,o.meeting("target"),e,g),i.the(p,o.meeting("toolList")).elements.push(s),s};function A(e){const t=/https:\/\/www\.google\..*\/maps\//,n="https://www.google.com/maps/embed/v1/",i=e.uri;if(!i.match(t))return e;if(i.startsWith(n))return e;const o=i.replace(t,n)+"&key=AIzaSyB8aaT6bY9tcLCmc2oPCkdUYLmTOWM8R54";return console.log("Converted Google Map URI! "+o),l.sym(o)}const E=function(n){Promise.all(n.map(function(n){return function(n){return new Promise(function(a){console.log("Dropped on thing "+n);const s=n.uri;if(s.startsWith("http:")&&s.indexOf("#")<0)return function(n){const a=o.wf("attachment");i.add(e,a,n,e.doc()),P({icon:"noun_160581.svg",limit:1,shareTab:!0},{newInstance:e,pane:t.session.paneRegistry.byName("link"),predicate:o.meeting("attachmentTool"),tabTitle:"Links",view:"link",noIndexHTML:!0})}(n),a(n);i.fetcher.nowOrWhenFetched(n,function(e,t){function d(e){e=A(e),console.log("make web page attachement tab "+e);const t=T(e,r.ns.wf("attachment"),r.utils.label(e),null);return i.add(t,r.ns.meeting("view"),"iframe",g),a(e)}if(e){const e=n,t=i.findTypeURIs(e);for(const e in t)console.log(" drop object type includes: "+e);if(o.vcard("Individual").uri in t||o.foaf("Person").uri in t||o.foaf("Agent").uri in t)return function(e){const t=i.any(e,o.foaf("preferredURI")),n=t?i.sym(t):e,a=i.any(p,o.meeting("attendeeGroup")),s=function(e,t){const n=[l.st(t,r.ns.vcard("hasMember"),e,t.doc())],a=i.any(e,o.vcard("fn"))||i.any(e,o.foaf("name"));a&&n.push(l.st(e,r.ns.vcard("fn"),a,t.doc())),i.fetcher.nowOrWhenFetched(t.doc(),void 0,function(o,a){o?i.updater.update([],n,function(t,n,i){m(n,i),n&&console.log("Addded to particpants OK: "+e)}):c("Can't read group to add person"+t)})};a?s(n,a):I().then(function(e){const t=e.newInstance;s(n,t),i.fetcher.putBack(g,{contentType:"text/turtle"}).then(function(e){console.log("Particiants Group created: "+t)})}).catch(function(e){c(e)})}(n),a(n);if(s.startsWith("https:")&&s.indexOf("#")<0){const e=i.fetcher.getHeader(n,"x-frame-options");let t=!0;if(e)for(let n=0;n<e.length;n++)console.log("x-frame-options: "+e[n]),e[n].indexOf("sameorigin")<0&&(t=!1),e[n].indexOf("deny")<0&&(t=!1);if(t)return function(e){const t=T(e,r.ns.wf("attachment"),r.utils.label(e),null);i.add(t,r.ns.meeting("view"),"iframe",g)}(n=A(n)),a(n)}return console.log("Default: assume web page attachement "+n),d(n)}return console.log("Error looking up dropped thing, will just add it anyway. "+n+": "+t),d(n)})})}(l.sym(n))})).then(function(e){x()})},F=function(e){r.widgets.uploadFiles(i.fetcher,e,p.dir().uri+"Files",p.dir().uri+"Pictures",function(e,t){e.type.startsWith("image/")?L("Files"):M("Pictures")})},L=function(e){return P({icon:"noun_598334.svg",limit:1,shareTab:!0},{newInstance:i.sym(p.dir().uri+e+"/"),pane:t.session.paneRegistry.byName("folder"),predicate:o.meeting("pictures"),shareTab:!0,tabTitle:e,view:"slideshow",noIndexHTML:!0})},M=function(e){return P({icon:"noun_681601.svg",limit:1,shareTab:!0},{newInstance:i.sym(p.dir().uri+"Files/"),pane:t.session.paneRegistry.byName("folder"),predicate:o.meeting("materialsFolder"),tabTitle:"Materials",noIndexHTML:!0})},I=function(){return P({icon:"noun_339237.svg",limit:1,shareTab:!0},{newInstance:i.sym(p.dir().uri+"Attendees/index.ttl#this"),pane:t.session.paneRegistry.byName("contact"),predicate:o.meeting("attendeeGroup"),tabTitle:"Attendees",instanceClass:o.vcard("Group"),instanceName:r.utils.label(e)+" attendees",noIndexHTML:!0})};function P(e,n){return new Promise(function(i,o){const a=t.session.store;if(!n.useExisting){const t=a.any(p,n.predicate);if(t){if(e.limit&&1===e.limit&&!e.shareTab)return c("Already have "+t+" as "+r.utils.label(n.predicate)),c("Cant have two"),i(null);if(e.shareTab)return console.log("Using existing "+t+" as "+r.utils.label(n.predicate)),i({me:C,newInstance:t,instanceClass:n.instanceClass})}}C||n.me||o(new Error("Username not defined for new tool")),n.me=n.me||C,n.newInstance=n.useExisting||n.newInstance||a.sym(n.newBase+"index.ttl#this"),n.pane.mintNew(t,n).then(function(e){const t=T(e.newInstance,e.predicate,e.tabTitle,e.pane.icon);e.view&&a.add(t,r.ns.meeting("view"),e.view,g),x(),a.fetcher.putBack(g,{contentType:"text/turtle"}).then(function(t){i(e)}).catch(function(e){o(e)})}).catch(function(e){c(e),o(e)})})}const _=function(){const e=r.login.selectWorkspace(n,{noun:"meeting"},function(i,o){s.mintNew(t,{newBase:o}).then(function(t){const i=t.newInstance;R.removeChild(e);const o=R.appendChild(n.createElement("p"));o.setAttribute("style","font-size: 140%;"),o.innerHTML="Your <a target='_blank' href='"+i.uri+"'><b>new meeting</b></a> is ready to be set up. <br/><br/><a target='_blank' href='"+i.uri+"'>Go to your new meeting.</a>"}).catch(function(t){R.removeChild(e),R.appendChild(r.widgets.errorMessageBlock(n,t))})});R.appendChild(e)},S=[{icon:"noun_339237.svg",maker:function(e){const n=f+"Group/",i=t.session.store;let a=i.any(p,o.meeting("particpants"));a||(a=l.sym(n+"index.ttl#this")),console.log("Participant group: "+a);const s=T(a,o.meeting("particpants"),"Particpants",r.icons.iconBase+"noun_339237.svg");i.add(s,r.ns.meeting("view"),"peoplePicker",g),x()},hint:"Make a group of people",limit:1},{icon:"noun_346777.svg",maker:function(e){return P(e,{useExisting:p,pane:t.session.paneRegistry.byName("schedule"),view:"schedule",tabTitle:"Schedule poll",noIndexHTML:!0})},hint:"Make a poll to schedule the meeting"},{icon:"noun_48218.svg",maker:function(e){},limit:1,hint:"Add an agenda list",disabled:!0},{icon:"noun_79217.svg",maker:function(e){return P(e,{newBase:f+"SharedNotes/",predicate:r.ns.meeting("sharedNotes"),tabTitle:"Shared Notes",pane:t.session.paneRegistry.byName("pad")})},hint:"Add a shared notepad"},{icon:"noun_346319.svg",maker:function(e){const n=f+"Chat/",i=t.session.store;if(i.holds(p,o.meeting("chat")))return void console.log("Ignored - already have chat");const a=i.sym(n+"chat.ttl");i.add(a,o.rdf("type"),o.meeting("Chat"),a),T(a,o.meeting("chat"),"Chat",r.icons.iconBase+"noun_346319.svg"),k(0,a,o.meeting("chat"))},limit:1,hint:"Add a chat channel for the meeting"},{icon:"noun_17020.svg",maker:function(e){const n=f+"Actions/",i=t.session.store;if(i.holds(p,o.meeting("actions")))return void console.log("Ignored - already have actions");const a=i.sym(n+"config.ttl"),s=i.sym(n+"config.ttl#this"),l=i.sym(n+"state.ttl");i.add(s,o.dc("title"),(i.anyValue(p,o.cal("summary"))||"Meeting ")+" actions",a),i.add(s,o.wf("issueClass"),o.wf("Task"),a),i.add(s,o.wf("initialState"),o.wf("Open"),a),i.add(s,o.wf("stateStore"),l,a),i.add(s,o.wf("assigneeClass"),o.foaf("Person"),a),i.add(s,o.rdf("type"),o.wf("Tracker"),a),i.add(s,o.rdf("type"),o.wf("Tracker"),a),T(s,o.meeting("actions"),"Actions",r.icons.iconBase+"noun_17020.svg"),k(0,s,o.meeting("actions"))},limit:1,hint:"Add a list of action items"},{icon:"noun_260227.svg",maker:function(e){const n=t.session.store,i=l.sym("https://meet.jit.si/"+r.utils.genUuid());if(n.holds(p,o.meeting("videoCallPage")))return void console.log("Ignored - already have a videoCallPage");n.add(i,o.rdf("type"),o.meeting("VideoCallPage"),g);const a=T(i,o.meeting("videoCallPage"),"Video call",r.icons.iconBase+"noun_260227.svg");n.add(a,o.meeting("view"),"iframe",g),x()},limit:1,hint:"Add a video call for the meeting"},{icon:"noun_25830.svg",maker:function(e){r.widgets.askName(n,i,R,o.log("uri"),r.ns.rdf("Resource")).then(function(e){if(!e)return z();const n=t.session.store,i=r.ns,o=n.sym(e),a=T(o,i.wf("attachment"),r.utils.label(o),null);n.add(a,i.meeting("view"),"iframe",g),x()}).catch(function(e){c("Error making new sub-meeting: "+e)})},hint:"Attach meeting materials",disabled:!1},{icon:"noun_123691.svg",maker:function(e){const n=t.session.store,i=r.ns,o=p.dir();if(e.limit&&1===e.limit&&n.holds(p,i.wf("sharingControl")))return void c("Ignored - already have "+r.utils.label(V.predicate));const a=T(o,i.wf("sharingControl"),"Sharing",r.icons.iconBase+"noun_123691.svg");n.add(a,i.meeting("view"),"sharing",g),x()},limit:1,hint:"Control Sharing",disabled:!1},{icon:"noun_66617.svg",maker:function(e){r.widgets.askName(n,i,R,o.foaf("name"),r.ns.meeting("Meeting")).then(function(n){if(!n)return z();const i=encodeURIComponent(n),o={newBase:f+i+"/",predicate:r.ns.meeting("subMeeting"),tabTitle:n,pane:t.session.paneRegistry.byName("meeting")};return P(e,o)}).catch(function(e){c("Error making new sub-meeting: "+e)})},hint:"Make a sub meeting",disabled:!1}],N=l.sym("https://solid.github.io/solid-panes/meeting/meetingDetailsForm.ttl#settings");l.parse('@prefix : <http://www.w3.org/ns/ui#> .\n@prefix f: <#> .\n@prefix dc: <http://purl.org/dc/elements/1.1/>.\n@prefix cal: <http://www.w3.org/2002/12/cal/ical#>.\n@prefix meeting: <http://www.w3.org/ns/pim/meeting#>.\n@prefix ns: <http://www.w3.org/2006/vcard/ns#> .\n@prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .\n@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#>.\n@prefix te: <http://purl.org/dc/terms/> .\n@prefix dc: <http://purl.org/dc/elements/1.1/>.\n@prefix xsd: <http://www.w3.org/2001/XMLSchema#>.\n@prefix ui: <http://www.w3.org/ns/ui#>.\n\n f:main a :Form;\n cal:summary "Meeting Details";\n :part f:titleField, f:locationField, f:startField,\n f:endField, f:eventComment, f:colorField .\n\n f:titleField a :SingleLineTextField;\n :maxLength 256;\n :property cal:summary;\n :label "Name of meeting";\n :size 80 .\n\n f:locationField a :SingleLineTextField;\n :maxLength 128;\n :property cal:location;\n :size 40 .\n\n f:startField a :DateField;\n :label "Start";\n :property cal:dtstart .\n\n f:endField a :DateField;\n :label "End";\n :property cal:dtend .\n\n f:colorField a :ColorField;\n :label "Tab color";\n # :default "#ddddcc"^^xsd:color;\n :property ui:backgroundColor .\n\n f:eventComment\n a ui:MultiLineTextField;\n # ui:maxLength\n # "1048";\n # ui:size\n # "40".\n ui:property\n cal:comment.\n\n###################################################\n\nf:settings a :Form;\n dc:title "Tab settings";\n :part f:labelField, f:targetField, f:viewField.\n\n f:labelField a :SingleLineTextField;\n :maxLength 128;\n :property rdfs:label;\n :label "Label on tab";\n :size 40 .\n\n f:targetField a :NamedNodeURIField;\n :maxLength 1024; # Longer?\n :property meeting:target;\n :label "URL of resource";\n :size 80 .\n\n f:colorField2 a :ColorField;\n :label "Tab color";\n # :default "#ddddcc"^^xsd:color;\n :property ui:backgroundColor .\n\n f:viewField a :SingleLineTextField;\n :maxLength 128;\n :property meeting:view;\n :label "View mode (experts only)";\n :size 40 .\n\n#\n',i,N.doc().uri,"text/turtle");const B="padding: 1em; width: 3em; height: 3em;",U=v.appendChild(n.createElement("td")),R=v.appendChild(n.createElement("td")),D=U.appendChild(n.createElement("img"));let O=!1;D.setAttribute("src",r.icons.iconBase+"noun_19460_green.svg"),D.setAttribute("style",B+"opacity: 50%;"),D.setAttribute("title","Add another tool to the meeting");const j=function(e){O=!O,D.setAttribute("style",B+(O?"background-color: yellow;":"")),H(O?"":"display: none;")};let G;d.authn.checkUser().then(e=>{if(e)return C=e,D.addEventListener("click",j),void D.setAttribute("style",B);G=r.login.loginStatusBox(n,e=>{e?(C=i.sym(e),R.removeChild(G),D.addEventListener("click",j),D.setAttribute("style",B)):(console.log("(Logged out)"),C=null)}),G.setAttribute("style","margin: 0.5em 1em;"),R.appendChild(G)});const W=[];for(let e=0;e<S.length;e++)(function(){const t=S[e],i=U.appendChild(n.createElement("img"));i.setAttribute("src",r.icons.iconBase+t.icon),i.setAttribute("style",B+"display: none;"),W.push(i),i.tool=t;const o=t.maker;t.disabled||i.addEventListener("click",function(e){q(i),o(t)})})();const H=function(e){for(let t=0;t<W.length;t++){let n=B+e;S[t].disabled&&(n+="opacity: 0.3;"),W[t].setAttribute("style",n)}},z=function(){H("display: none;"),D.setAttribute("style",B)},q=function(e){H("display: none;"),e.setAttribute("style",B+"background-color: yellow;")},V={dom:n};V.predicate=o.meeting("toolList"),V.subject=e,V.ordered=!0,V.orientation=1,V.renderMain=function(e,a){let s,m=null,f=null;e.innerHTML="";const h=function(t,n){t||(e.textContent=""+n)},b=function(){e.appendChild(n.createElement("h3")).textContent="Details of meeting";const t=l.sym("https://solid.github.io/solid-panes/meeting/meetingDetailsForm.ttl#main");r.widgets.appendForm(document,e,{},p,t,p.doc(),h),e.appendChild(function(){const e=n.createElement("div"),t=e.appendChild(n.createElement("p"));return t.setAttribute("style","margin: 0em; padding:3em; color: #888;"),t.textContent="Tip: Drag URL-bar icons of web pages into the tab bar on the left to add new meeting materials.",e}()),C=d.authn.currentUser(),C&&i.add(p,o.dc("author"),C,g);const a={noun:"meeting",me:C,statusArea:e,div:e,dom:n};r.login.registrationControl(a,p,o.meeting("Meeting")).then(function(e){console.log("Registration control finsished.")}),r.pad.manageParticipation(n,e,g,p,C,{});const s="height: 2em; width: 2em; margin:0.5em;",c=e.appendChild(n.createElement("div")),u=c.appendChild(n.createElement("img"));u.setAttribute("src",r.icons.iconBase+"noun_145978.svg"),u.setAttribute("title","Make a fresh new meeting"),u.addEventListener("click",_),u.setAttribute("style",s);const m=c.appendChild(n.createElement("a"));m.setAttribute("href","https://github.com/solid/solid-panes"),m.setAttribute("target","_blank");const f=m.appendChild(n.createElement("img"));f.setAttribute("src",r.icons.iconBase+"noun_368567.svg"),f.setAttribute("title","Fork me on github"),f.setAttribute("style",s+"opacity: 50%;")};if(i.holds(a,o.rdf("type"),o.meeting("Tool"))){const g=i.any(a,o.meeting("target"));if(g.sameTerm(p)&&!i.any(a,o.meeting("view")))b();else{let h=i.any(a,o.meeting("view"));h=h?h.value:null,"details"===h?b():"peoplePicker"===h?function(){const t={div:e,dom:n};e.appendChild(n.createElement("h4")).textContent="Meeting Participants";const a=function(e){const t=[l.st(p,o.meeting("particpantGroup"),e,p.doc())];i.updater.update([],t,function(t,n,i){n?f=e:c("Cant save participants group: "+i)})};f=i.any(p,o.meeting("particpantGroup")),d.authn.checkUser().then(e=>{e&&u(i.sym(e)).then(function(){const e={defaultNewGroupName:"Meeting Participants",selectedGroup:f};new r.widgets.PeoplePicker(t.div,t.index.private[0],a,e).render()})})}():"iframe"===h?function(t){const i=e.appendChild(n.createElement("iframe"));i.setAttribute("src",t.uri),i.setAttribute("style","border: none; margin: 0; padding: 0; height: 100%; width: 100%;"),i.setAttribute("allow","microphone camera"),i.setAttribute("name","disable-x-frame-options"),e.style.padding=0}(g):(m=h?t.session.paneRegistry.byName(h):null,s=e.appendChild(n.createElement("table")),s.style.width="100%",t.getOutliner(n).GotoSubject(g,!0,m,!1,void 0,s))}}else a.sameTerm(p)?b():(!a.sameTerm(a.doc())||i.holds(a,r.ns.rdf("type"),r.ns.meeting("Chat"))||i.holds(a,r.ns.rdf("type"),r.ns.meeting("PaneView")))&&(s=e.appendChild(n.createElement("table")),t.getOutliner(n).GotoSubject(a,!0,void 0,!1,void 0,s))},V.renderTab=function(e,t){if(i.holds(t,o.rdf("type"),o.meeting("Tool"))){const a=i.any(t,o.meeting("target"));let s=i.any(t,o.rdfs("label"));s=s?s.value:r.utils.label(a);const l=e.appendChild(n.createElement("div"));l.textContent=s,l.setAttribute("style","margin-left: 0.7em");const d=i.any(t,o.meeting("icon"));if(d){const t=e.appendChild(n.createElement("table")).appendChild(n.createElement("tr")),i=t.appendChild(n.createElement("td")),o=t.appendChild(n.createElement("td")),a=i.appendChild(n.createElement("img"));a.setAttribute("src",d.uri),a.setAttribute("style","width: 1.5em; height: 1.5em;"),a.setAttribute("title",s),o.appendChild(l)}else e.appendChild(l)}else e.textContent=r.utils.label(t)},V.renderTabSettings=function(e,t){if(e.innerHTML="",e.style+="border-color: #eed;",e.appendChild(n.createElement("h3")).textContent="Adjust this tab",i.holds(t,o.rdf("type"),o.meeting("Tool"))){const a=l.sym("https://solid.github.io/solid-panes/meeting/meetingDetailsForm.ttl#settings");r.widgets.appendForm(document,e,{},t,a,p.doc(),m),r.widgets.deleteButtonWithCheck(n,e,"tab",function(){const e=i.the(p,o.meeting("toolList"));for(let n=0;n<e.elements.length;n++)if(e.elements[n].sameTerm(t)){e.elements.splice(n,1);break}const n=i.any(t,o.meeting("target")),a=i.statementsMatching(t).concat(i.statementsMatching(void 0,void 0,t)).concat(i.statementsMatching(p,void 0,n));i.remove(a),x()}).setAttribute("style","width: 1.5em; height: 1.5em;")}else e.appendChild(n.createElement("h4")).textContent="(No adjustments available)"},V.backgroundColor=i.anyValue(e,o.ui("backgroundColor"))||"#ddddcc";const $=y.appendChild(r.tabs.tabWidget(V));return r.aclControl.preventBrowserDropEvents(n),r.widgets.makeDropTarget($.tabContainer,E,F),r.widgets.makeDropTarget(U,E,F),h}};return s})());
20475
20528
 
20476
20529
  /***/ },
20477
20530
 
@@ -20875,6 +20928,16 @@ __webpack_require__.r(__webpack_exports__);
20875
20928
  // extracted by mini-css-extract-plugin
20876
20929
 
20877
20930
 
20931
+ /***/ },
20932
+
20933
+ /***/ 3824
20934
+ (__unused_webpack_module, __webpack_exports__, __webpack_require__) {
20935
+
20936
+ "use strict";
20937
+ __webpack_require__.r(__webpack_exports__);
20938
+ // extracted by mini-css-extract-plugin
20939
+
20940
+
20878
20941
  /***/ },
20879
20942
 
20880
20943
  /***/ 5576
@@ -41850,11 +41913,13 @@ const IRIs_RDF = 'http://www.w3.org/1999/02/22-rdf-syntax-ns#',
41850
41913
  string: `${XSD}string`,
41851
41914
  },
41852
41915
  rdf: {
41853
- type: `${IRIs_RDF}type`,
41854
- nil: `${IRIs_RDF}nil`,
41855
- first: `${IRIs_RDF}first`,
41856
- rest: `${IRIs_RDF}rest`,
41857
- langString: `${IRIs_RDF}langString`,
41916
+ type: `${IRIs_RDF}type`,
41917
+ nil: `${IRIs_RDF}nil`,
41918
+ first: `${IRIs_RDF}first`,
41919
+ rest: `${IRIs_RDF}rest`,
41920
+ langString: `${IRIs_RDF}langString`,
41921
+ dirLangString: `${IRIs_RDF}dirLangString`,
41922
+ reifies: `${IRIs_RDF}reifies`,
41858
41923
  },
41859
41924
  owl: {
41860
41925
  sameAs: 'http://www.w3.org/2002/07/owl#sameAs',
@@ -41892,6 +41957,7 @@ const lineModeRegExps = {
41892
41957
  _unescapedIri: true,
41893
41958
  _simpleQuotedString: true,
41894
41959
  _langcode: true,
41960
+ _dircode: true,
41895
41961
  _blank: true,
41896
41962
  _newline: true,
41897
41963
  _comment: true,
@@ -41909,15 +41975,16 @@ class N3Lexer {
41909
41975
  this._unescapedIri = /^<([^\x00-\x20<>\\"\{\}\|\^\`]*)>[ \t]*/; // IRI without escape sequences; no unescaping
41910
41976
  this._simpleQuotedString = /^"([^"\\\r\n]*)"(?=[^"])/; // string without escape sequences
41911
41977
  this._simpleApostropheString = /^'([^'\\\r\n]*)'(?=[^'])/;
41912
- this._langcode = /^@([a-z]+(?:-[a-z0-9]+)*)(?=[^a-z0-9\-])/i;
41978
+ this._langcode = /^@([a-z]+(?:-[a-z0-9]+)*)(?=[^a-z0-9])/i;
41979
+ this._dircode = /^--(ltr)|(rtl)/;
41913
41980
  this._prefix = /^((?:[A-Za-z\xc0-\xd6\xd8-\xf6\xf8-\u02ff\u0370-\u037d\u037f-\u1fff\u200c\u200d\u2070-\u218f\u2c00-\u2fef\u3001-\ud7ff\uf900-\ufdcf\ufdf0-\ufffd]|[\ud800-\udb7f][\udc00-\udfff])(?:\.?[\-0-9A-Z_a-z\xb7\xc0-\xd6\xd8-\xf6\xf8-\u037d\u037f-\u1fff\u200c\u200d\u203f\u2040\u2070-\u218f\u2c00-\u2fef\u3001-\ud7ff\uf900-\ufdcf\ufdf0-\ufffd]|[\ud800-\udb7f][\udc00-\udfff])*)?:(?=[#\s<])/;
41914
41981
  this._prefixed = /^((?:[A-Za-z\xc0-\xd6\xd8-\xf6\xf8-\u02ff\u0370-\u037d\u037f-\u1fff\u200c\u200d\u2070-\u218f\u2c00-\u2fef\u3001-\ud7ff\uf900-\ufdcf\ufdf0-\ufffd]|[\ud800-\udb7f][\udc00-\udfff])(?:\.?[\-0-9A-Z_a-z\xb7\xc0-\xd6\xd8-\xf6\xf8-\u037d\u037f-\u1fff\u200c\u200d\u203f\u2040\u2070-\u218f\u2c00-\u2fef\u3001-\ud7ff\uf900-\ufdcf\ufdf0-\ufffd]|[\ud800-\udb7f][\udc00-\udfff])*)?:((?:(?:[0-:A-Z_a-z\xc0-\xd6\xd8-\xf6\xf8-\u02ff\u0370-\u037d\u037f-\u1fff\u200c\u200d\u2070-\u218f\u2c00-\u2fef\u3001-\ud7ff\uf900-\ufdcf\ufdf0-\ufffd]|[\ud800-\udb7f][\udc00-\udfff]|%[0-9a-fA-F]{2}|\\[!#-\/;=?\-@_~])(?:(?:[\.\-0-:A-Z_a-z\xb7\xc0-\xd6\xd8-\xf6\xf8-\u037d\u037f-\u1fff\u200c\u200d\u203f\u2040\u2070-\u218f\u2c00-\u2fef\u3001-\ud7ff\uf900-\ufdcf\ufdf0-\ufffd]|[\ud800-\udb7f][\udc00-\udfff]|%[0-9a-fA-F]{2}|\\[!#-\/;=?\-@_~])*(?:[\-0-:A-Z_a-z\xb7\xc0-\xd6\xd8-\xf6\xf8-\u037d\u037f-\u1fff\u200c\u200d\u203f\u2040\u2070-\u218f\u2c00-\u2fef\u3001-\ud7ff\uf900-\ufdcf\ufdf0-\ufffd]|[\ud800-\udb7f][\udc00-\udfff]|%[0-9a-fA-F]{2}|\\[!#-\/;=?\-@_~]))?)?)(?:[ \t]+|(?=\.?[,;!\^\s#()\[\]\{\}"'<>]))/;
41915
41982
  this._variable = /^\?(?:(?:[A-Z_a-z\xc0-\xd6\xd8-\xf6\xf8-\u02ff\u0370-\u037d\u037f-\u1fff\u200c\u200d\u2070-\u218f\u2c00-\u2fef\u3001-\ud7ff\uf900-\ufdcf\ufdf0-\ufffd]|[\ud800-\udb7f][\udc00-\udfff])(?:[\-0-:A-Z_a-z\xb7\xc0-\xd6\xd8-\xf6\xf8-\u037d\u037f-\u1fff\u200c\u200d\u203f\u2040\u2070-\u218f\u2c00-\u2fef\u3001-\ud7ff\uf900-\ufdcf\ufdf0-\ufffd]|[\ud800-\udb7f][\udc00-\udfff])*)(?=[.,;!\^\s#()\[\]\{\}"'<>])/;
41916
41983
  this._blank = /^_:((?:[0-9A-Z_a-z\xc0-\xd6\xd8-\xf6\xf8-\u02ff\u0370-\u037d\u037f-\u1fff\u200c\u200d\u2070-\u218f\u2c00-\u2fef\u3001-\ud7ff\uf900-\ufdcf\ufdf0-\ufffd]|[\ud800-\udb7f][\udc00-\udfff])(?:\.?[\-0-9A-Z_a-z\xb7\xc0-\xd6\xd8-\xf6\xf8-\u037d\u037f-\u1fff\u200c\u200d\u203f\u2040\u2070-\u218f\u2c00-\u2fef\u3001-\ud7ff\uf900-\ufdcf\ufdf0-\ufffd]|[\ud800-\udb7f][\udc00-\udfff])*)(?:[ \t]+|(?=\.?[,;:\s#()\[\]\{\}"'<>]))/;
41917
41984
  this._number = /^[\-+]?(?:(\d+\.\d*|\.?\d+)[eE][\-+]?|\d*(\.)?)\d+(?=\.?[,;:\s#()\[\]\{\}"'<>])/;
41918
41985
  this._boolean = /^(?:true|false)(?=[.,;\s#()\[\]\{\}"'<>])/;
41919
- this._keyword = /^@[a-z]+(?=[\s#<:])/i;
41920
- this._sparqlKeyword = /^(?:PREFIX|BASE|GRAPH)(?=[\s#<])/i;
41986
+ this._atKeyword = /^@[a-z]+(?=[\s#<:])/i;
41987
+ this._keyword = /^(?:PREFIX|BASE|VERSION|GRAPH)(?=[\s#<])/i;
41921
41988
  this._shortPredicates = /^a(?=[\s#()\[\]\{\}"'<>])/;
41922
41989
  this._newline = /^[ \t]*(?:#[^\n\r]*)?(?:\r\n|\n|\r)[ \t]*/;
41923
41990
  this._comment = /#([^\n\r]*)/;
@@ -42022,8 +42089,11 @@ class N3Lexer {
42022
42089
  return reportSyntaxError(this);
42023
42090
  type = 'IRI';
42024
42091
  }
42025
- // Try to find a nested triple
42026
- else if (input.length > 1 && input[1] === '<')
42092
+ // Try to find a triple term
42093
+ else if (input.length > 2 && input[1] === '<' && input[2] === '(')
42094
+ type = '<<(', matchLength = 3;
42095
+ // Try to find a reified triple
42096
+ else if (!this._lineMode && input.length > (inputFinished ? 1 : 2) && input[1] === '<')
42027
42097
  type = '<<', matchLength = 2;
42028
42098
  // Try to find a backwards implication arrow
42029
42099
  else if (this._n3Mode && input.length > 1 && input[1] === '=') {
@@ -42034,6 +42104,7 @@ class N3Lexer {
42034
42104
  break;
42035
42105
 
42036
42106
  case '>':
42107
+ // Try to find a reified triple
42037
42108
  if (input.length > 1 && input[1] === '>')
42038
42109
  type = '>>', matchLength = 2;
42039
42110
  break;
@@ -42089,10 +42160,10 @@ class N3Lexer {
42089
42160
 
42090
42161
  case '@':
42091
42162
  // Try to find a language code
42092
- if (this._previousMarker === 'literal' && (match = this._langcode.exec(input)))
42163
+ if (this._previousMarker === 'literal' && (match = this._langcode.exec(input)) && match[1] !== 'version')
42093
42164
  type = 'langcode', value = match[1];
42094
42165
  // Try to find a keyword
42095
- else if (match = this._keyword.exec(input))
42166
+ else if (match = this._atKeyword.exec(input))
42096
42167
  type = match[0];
42097
42168
  break;
42098
42169
 
@@ -42117,6 +42188,13 @@ class N3Lexer {
42117
42188
  case '9':
42118
42189
  case '+':
42119
42190
  case '-':
42191
+ if (input[1] === '-') {
42192
+ // Try to find a direction code
42193
+ if (this._previousMarker === 'langcode' && (match = this._dircode.exec(input)))
42194
+ type = 'dircode', matchLength = 2, value = (match[1] || match[2]), matchLength = value.length + 2;
42195
+ break;
42196
+ }
42197
+
42120
42198
  // Try to find a number. Since it can contain (but not end with) a dot,
42121
42199
  // we always need a non-dot character before deciding it is a number.
42122
42200
  // Therefore, try inserting a space if we're at the end of the input.
@@ -42134,8 +42212,10 @@ class N3Lexer {
42134
42212
  case 'P':
42135
42213
  case 'G':
42136
42214
  case 'g':
42215
+ case 'V':
42216
+ case 'v':
42137
42217
  // Try to find a SPARQL-style keyword
42138
- if (match = this._sparqlKeyword.exec(input))
42218
+ if (match = this._keyword.exec(input))
42139
42219
  type = match[0].toUpperCase();
42140
42220
  else
42141
42221
  inconclusive = true;
@@ -42172,13 +42252,23 @@ class N3Lexer {
42172
42252
  case '!':
42173
42253
  if (!this._n3Mode)
42174
42254
  break;
42255
+ case ')':
42256
+ if (!inputFinished && (input.length === 1 || (input.length === 2 && input[1] === '>'))) {
42257
+ // Don't consume yet, as it *could* become a triple term end.
42258
+ break;
42259
+ }
42260
+ // Try to find a triple term
42261
+ if (input.length > 2 && input[1] === '>' && input[2] === '>') {
42262
+ type = ')>>', matchLength = 3;
42263
+ break;
42264
+ }
42175
42265
  case ',':
42176
42266
  case ';':
42177
42267
  case '[':
42178
42268
  case ']':
42179
42269
  case '(':
42180
- case ')':
42181
42270
  case '}':
42271
+ case '~':
42182
42272
  if (!this._lineMode) {
42183
42273
  matchLength = 1;
42184
42274
  type = firstChar;
@@ -42489,8 +42579,18 @@ class N3DataFactory_Literal extends Term {
42489
42579
  // Find the last quotation mark (e.g., '"abc"@en-us')
42490
42580
  const id = this.id;
42491
42581
  let atPos = id.lastIndexOf('"') + 1;
42582
+ const dirPos = id.lastIndexOf('--');
42492
42583
  // If "@" it follows, return the remaining substring; empty otherwise
42493
- return atPos < id.length && id[atPos++] === '@' ? id.substr(atPos).toLowerCase() : '';
42584
+ return atPos < id.length && id[atPos++] === '@' ? (dirPos > atPos ? id.substr(0, dirPos) : id).substr(atPos).toLowerCase() : '';
42585
+ }
42586
+
42587
+ // ### The direction of this literal
42588
+ get direction() {
42589
+ // Find the last double dash after the closing quote (e.g., '"abc"@en-us--ltr')
42590
+ const id = this.id;
42591
+ const endPos = id.lastIndexOf('"');
42592
+ const dirPos = id.lastIndexOf('--');
42593
+ return dirPos > endPos && dirPos + 2 < id.length ? id.substr(dirPos + 2).toLowerCase() : '';
42494
42594
  }
42495
42595
 
42496
42596
  // ### The datatype IRI of this literal
@@ -42505,8 +42605,8 @@ class N3DataFactory_Literal extends Term {
42505
42605
  const char = dtPos < id.length ? id[dtPos] : '';
42506
42606
  // If "^" it follows, return the remaining substring
42507
42607
  return char === '^' ? id.substr(dtPos + 2) :
42508
- // If "@" follows, return rdf:langString; xsd:string otherwise
42509
- (char !== '@' ? N3DataFactory_xsd.string : N3DataFactory_rdf.langString);
42608
+ // If "@" follows, return rdf:langString or rdf:dirLangString; xsd:string otherwise
42609
+ (char !== '@' ? N3DataFactory_xsd.string : (id.indexOf('--', dtPos) > 0 ? N3DataFactory_rdf.dirLangString : N3DataFactory_rdf.langString));
42510
42610
  }
42511
42611
 
42512
42612
  // ### Returns whether this object represents the same term as the other
@@ -42520,14 +42620,16 @@ class N3DataFactory_Literal extends Term {
42520
42620
  this.termType === other.termType &&
42521
42621
  this.value === other.value &&
42522
42622
  this.language === other.language &&
42623
+ ((this.direction === other.direction) || (this.direction === '' && !other.direction)) &&
42523
42624
  this.datatype.value === other.datatype.value;
42524
42625
  }
42525
42626
 
42526
42627
  toJSON() {
42527
42628
  return {
42528
- termType: this.termType,
42529
- value: this.value,
42530
- language: this.language,
42629
+ termType: this.termType,
42630
+ value: this.value,
42631
+ language: this.language,
42632
+ direction: this.direction,
42531
42633
  datatype: { termType: 'NamedNode', value: this.datatypeString },
42532
42634
  };
42533
42635
  }
@@ -42617,9 +42719,22 @@ function termFromId(id, factory, nested) {
42617
42719
  return factory.literal(id.substr(1, id.length - 2));
42618
42720
  // Literal with datatype or language
42619
42721
  const endPos = id.lastIndexOf('"', id.length - 1);
42722
+ let languageOrDatatype;
42723
+ if (id[endPos + 1] === '@') {
42724
+ languageOrDatatype = id.substr(endPos + 2);
42725
+ const dashDashIndex = languageOrDatatype.lastIndexOf('--');
42726
+ if (dashDashIndex > 0 && dashDashIndex < languageOrDatatype.length) {
42727
+ languageOrDatatype = {
42728
+ language: languageOrDatatype.substr(0, dashDashIndex),
42729
+ direction: languageOrDatatype.substr(dashDashIndex + 2),
42730
+ };
42731
+ }
42732
+ }
42733
+ else {
42734
+ languageOrDatatype = factory.namedNode(id.substr(endPos + 3));
42735
+ }
42620
42736
  return factory.literal(id.substr(1, endPos - 1),
42621
- id[endPos + 1] === '@' ? id.substr(endPos + 2)
42622
- : factory.namedNode(id.substr(endPos + 3)));
42737
+ languageOrDatatype);
42623
42738
  case '[':
42624
42739
  id = JSON.parse(id);
42625
42740
  break;
@@ -42656,7 +42771,7 @@ function termToId(term, nested) {
42656
42771
  case 'Variable': return `?${term.value}`;
42657
42772
  case 'DefaultGraph': return '';
42658
42773
  case 'Literal': return `"${term.value}"${
42659
- term.language ? `@${term.language}` :
42774
+ term.language ? `@${term.language}${term.direction ? `--${term.direction}` : ''}` :
42660
42775
  (term.datatype && term.datatype.value !== N3DataFactory_xsd.string ? `^^${term.datatype.value}` : '')}`;
42661
42776
  case 'Quad':
42662
42777
  const res = [
@@ -42751,6 +42866,11 @@ function literal(value, languageOrDataType) {
42751
42866
  if (typeof languageOrDataType === 'string')
42752
42867
  return new N3DataFactory_Literal(`"${value}"@${languageOrDataType.toLowerCase()}`);
42753
42868
 
42869
+ // Create a language-tagged string with base direction
42870
+ if (languageOrDataType !== undefined && !('termType' in languageOrDataType)) {
42871
+ return new N3DataFactory_Literal(`"${value}"@${languageOrDataType.language.toLowerCase()}${languageOrDataType.direction ? `--${languageOrDataType.direction.toLowerCase()}` : ''}`);
42872
+ }
42873
+
42754
42874
  // Automatically determine datatype for booleans and numbers
42755
42875
  let datatype = languageOrDataType ? languageOrDataType.value : '';
42756
42876
  if (datatype === '') {
@@ -42848,8 +42968,6 @@ class N3Parser {
42848
42968
  this._supportsQuads = !(isTurtle || isTriG || isNTriples || isN3);
42849
42969
  // Whether the log:isImpliedBy predicate is supported
42850
42970
  this._isImpliedBy = options.isImpliedBy;
42851
- // Support nesting of triples
42852
- this._supportsRDFStar = format === '' || /star|\*$/.test(format);
42853
42971
  // Disable relative IRIs in N-Triples or N-Quads mode
42854
42972
  if (isLineMode)
42855
42973
  this._resolveRelativeIRI = iri => { return null; };
@@ -42858,6 +42976,9 @@ class N3Parser {
42858
42976
  this._lexer = options.lexer || new N3Lexer({ lineMode: isLineMode, n3: isN3, isImpliedBy: this._isImpliedBy });
42859
42977
  // Disable explicit quantifiers by default
42860
42978
  this._explicitQuantifiers = !!options.explicitQuantifiers;
42979
+ // Disable parsing of unsupported versions by default
42980
+ this._parseUnsupportedVersions = !!options.parseUnsupportedVersions;
42981
+ this._version = options.version;
42861
42982
  }
42862
42983
 
42863
42984
  // ## Static class methods
@@ -42935,6 +43056,13 @@ class N3Parser {
42935
43056
  }
42936
43057
  }
42937
43058
 
43059
+ // ### `_readBeforeTopContext` is called once only at the start of parsing.
43060
+ _readBeforeTopContext(token) {
43061
+ if (this._version && !this._isValidVersion(this._version))
43062
+ return this._error(`Detected unsupported version as media type parameter: "${this._version}"`, token);
43063
+ return this._readInTopContext(token);
43064
+ }
43065
+
42938
43066
  // ### `_readInTopContext` reads a token when in the top context
42939
43067
  _readInTopContext(token) {
42940
43068
  switch (token.type) {
@@ -42954,6 +43082,11 @@ class N3Parser {
42954
43082
  this._sparqlStyle = true;
42955
43083
  case '@base':
42956
43084
  return this._readBaseIRI;
43085
+ // It could be a version declaration
43086
+ case 'VERSION':
43087
+ this._sparqlStyle = true;
43088
+ case '@version':
43089
+ return this._readVersion;
42957
43090
  // It could be a graph
42958
43091
  case '{':
42959
43092
  if (this._supportsNamedGraphs) {
@@ -43018,6 +43151,10 @@ class N3Parser {
43018
43151
  this._subject = this._factory.blankNode(), null, null);
43019
43152
  return this._readBlankNodeHead;
43020
43153
  case '(':
43154
+ const stack = this._contextStack, parent = stack.length && stack[stack.length - 1];
43155
+ if (parent.type === '<<') {
43156
+ return this._error('Unexpected list in reified triple', token);
43157
+ }
43021
43158
  // Start a new list
43022
43159
  this._saveContext('list', this._graph, this.RDF_NIL, null, null);
43023
43160
  this._subject = null;
@@ -43058,9 +43195,13 @@ class N3Parser {
43058
43195
  this._subject = this._factory.literal(token.value, this._factory.namedNode(token.prefix));
43059
43196
 
43060
43197
  break;
43198
+ case '<<(':
43199
+ if (!this._n3Mode)
43200
+ return this._error('Disallowed triple term as subject', token);
43201
+ this._saveContext('<<(', this._graph, null, null, null);
43202
+ this._graph = null;
43203
+ return this._readSubject;
43061
43204
  case '<<':
43062
- if (!this._supportsRDFStar)
43063
- return this._error('Unexpected RDF-star syntax', token);
43064
43205
  this._saveContext('<<', this._graph, null, null, null);
43065
43206
  this._graph = null;
43066
43207
  return this._readSubject;
@@ -43090,6 +43231,7 @@ class N3Parser {
43090
43231
  case '.':
43091
43232
  case ']':
43092
43233
  case '}':
43234
+ case '|}':
43093
43235
  // Expected predicate didn't come, must have been trailing semicolon
43094
43236
  if (this._predicate === null)
43095
43237
  return this._error(`Unexpected ${type}`, token);
@@ -43113,6 +43255,7 @@ class N3Parser {
43113
43255
  if ((this._predicate = this._readEntity(token)) === undefined)
43114
43256
  return;
43115
43257
  }
43258
+ this._validAnnotation = true;
43116
43259
  // The next token must be an object
43117
43260
  return this._readObject;
43118
43261
  }
@@ -43136,6 +43279,10 @@ class N3Parser {
43136
43279
  this._subject = this._factory.blankNode());
43137
43280
  return this._readBlankNodeHead;
43138
43281
  case '(':
43282
+ const stack = this._contextStack, parent = stack.length && stack[stack.length - 1];
43283
+ if (parent.type === '<<') {
43284
+ return this._error('Unexpected list in reified triple', token);
43285
+ }
43139
43286
  // Start a new list
43140
43287
  this._saveContext('list', this._graph, this._subject, this._predicate, this.RDF_NIL);
43141
43288
  this._subject = null;
@@ -43147,9 +43294,11 @@ class N3Parser {
43147
43294
  this._saveContext('formula', this._graph, this._subject, this._predicate,
43148
43295
  this._graph = this._factory.blankNode());
43149
43296
  return this._readSubject;
43297
+ case '<<(':
43298
+ this._saveContext('<<(', this._graph, this._subject, this._predicate, null);
43299
+ this._graph = null;
43300
+ return this._readSubject;
43150
43301
  case '<<':
43151
- if (!this._supportsRDFStar)
43152
- return this._error('Unexpected RDF-star syntax', token);
43153
43302
  this._saveContext('<<', this._graph, this._subject, this._predicate, null);
43154
43303
  this._graph = null;
43155
43304
  return this._readSubject;
@@ -43185,6 +43334,10 @@ class N3Parser {
43185
43334
  return this._readBlankNodeTail(token);
43186
43335
  }
43187
43336
  else {
43337
+ const stack = this._contextStack, parentParent = stack.length > 1 && stack[stack.length - 2];
43338
+ if (parentParent.type === '<<') {
43339
+ return this._error('Unexpected compound blank node expression in reified triple', token);
43340
+ }
43188
43341
  this._predicate = null;
43189
43342
  return this._readPredicate(token);
43190
43343
  }
@@ -43294,6 +43447,11 @@ class N3Parser {
43294
43447
  this._saveContext('formula', this._graph, this._subject, this._predicate,
43295
43448
  this._graph = this._factory.blankNode());
43296
43449
  return this._readSubject;
43450
+ case '<<':
43451
+ this._saveContext('<<', this._graph, null, null, null);
43452
+ this._graph = null;
43453
+ next = this._readSubject;
43454
+ break;
43297
43455
  default:
43298
43456
  if ((item = this._readEntity(token)) === undefined)
43299
43457
  return;
@@ -43303,6 +43461,10 @@ class N3Parser {
43303
43461
  if (list === null)
43304
43462
  this._subject = list = this._factory.blankNode();
43305
43463
 
43464
+ // When reading a reified triple, store the list as subject in the stack, as this will be overridden when reading the triple.
43465
+ if (token.type === '<<')
43466
+ stack[stack.length - 1].subject = this._subject;
43467
+
43306
43468
  // Is this the first element of the list?
43307
43469
  if (previousList === null) {
43308
43470
  // This list is either the subject or the object of its parent
@@ -43343,9 +43505,10 @@ class N3Parser {
43343
43505
  }
43344
43506
 
43345
43507
  // ### `_completeLiteral` completes a literal with an optional datatype or language
43346
- _completeLiteral(token) {
43508
+ _completeLiteral(token, component) {
43347
43509
  // Create a simple string literal by default
43348
43510
  let literal = this._factory.literal(this._literalValue);
43511
+ let readCb;
43349
43512
 
43350
43513
  switch (token.type) {
43351
43514
  // Create a datatyped literal
@@ -43353,43 +43516,82 @@ class N3Parser {
43353
43516
  case 'typeIRI':
43354
43517
  const datatype = this._readEntity(token);
43355
43518
  if (datatype === undefined) return; // No datatype means an error occurred
43519
+ if (datatype.value === IRIs.rdf.langString || datatype.value === IRIs.rdf.dirLangString) {
43520
+ return this._error('Detected illegal (directional) languaged-tagged string with explicit datatype', token);
43521
+ }
43356
43522
  literal = this._factory.literal(this._literalValue, datatype);
43357
43523
  token = null;
43358
43524
  break;
43359
43525
  // Create a language-tagged string
43360
43526
  case 'langcode':
43527
+ if (token.value.split('-').some(t => t.length > 8))
43528
+ return this._error('Detected language tag with subtag longer than 8 characters', token);
43361
43529
  literal = this._factory.literal(this._literalValue, token.value);
43530
+ this._literalLanguage = token.value;
43362
43531
  token = null;
43532
+ readCb = this._readDirCode.bind(this, component);
43363
43533
  break;
43364
43534
  }
43365
43535
 
43366
- return { token, literal };
43536
+ return { token, literal, readCb };
43537
+ }
43538
+
43539
+ _readDirCode(component, listItem, token) {
43540
+ // Attempt to read a dircode
43541
+ if (token.type === 'dircode') {
43542
+ const term = this._factory.literal(this._literalValue, { language: this._literalLanguage, direction: token.value });
43543
+ if (component === 'subject')
43544
+ this._subject = term;
43545
+ else
43546
+ this._object = term;
43547
+ this._literalLanguage = undefined;
43548
+ token = null;
43549
+ }
43550
+
43551
+ if (component === 'subject')
43552
+ return token === null ? this._readPredicateOrNamedGraph : this._readPredicateOrNamedGraph(token);
43553
+ return this._completeObjectLiteralPost(token, listItem);
43367
43554
  }
43368
43555
 
43369
43556
  // Completes a literal in subject position
43370
43557
  _completeSubjectLiteral(token) {
43371
- this._subject = this._completeLiteral(token).literal;
43558
+ const completed = this._completeLiteral(token, 'subject');
43559
+ this._subject = completed.literal;
43560
+
43561
+ // Postpone completion if the literal is only partially completed (such as lang+dir).
43562
+ if (completed.readCb)
43563
+ return completed.readCb.bind(this, false);
43564
+
43372
43565
  return this._readPredicateOrNamedGraph;
43373
43566
  }
43374
43567
 
43375
43568
  // Completes a literal in object position
43376
43569
  _completeObjectLiteral(token, listItem) {
43377
- const completed = this._completeLiteral(token);
43570
+ const completed = this._completeLiteral(token, 'object');
43378
43571
  if (!completed)
43379
43572
  return;
43573
+
43380
43574
  this._object = completed.literal;
43381
43575
 
43576
+ // Postpone completion if the literal is only partially completed (such as lang+dir).
43577
+ if (completed.readCb)
43578
+ return completed.readCb.bind(this, listItem);
43579
+
43580
+ return this._completeObjectLiteralPost(completed.token, listItem);
43581
+ }
43582
+
43583
+ _completeObjectLiteralPost(token, listItem) {
43382
43584
  // If this literal was part of a list, write the item
43383
43585
  // (we could also check the context stack, but passing in a flag is faster)
43384
43586
  if (listItem)
43385
43587
  this._emit(this._subject, this.RDF_FIRST, this._object, this._graph);
43386
43588
  // If the token was consumed, continue with the rest of the input
43387
- if (completed.token === null)
43589
+ if (token === null)
43388
43590
  return this._getContextEndReader();
43389
43591
  // Otherwise, consume the token now
43390
43592
  else {
43391
43593
  this._readCallback = this._getContextEndReader();
43392
- return this._readCallback(completed.token);
43594
+ return this._readCallback(token);
43393
43595
  }
43394
43596
  }
43395
43597
 
@@ -43411,7 +43613,7 @@ class N3Parser {
43411
43613
 
43412
43614
  // ### `_readPunctuation` reads punctuation between quads or quad parts
43413
43615
  _readPunctuation(token) {
43414
- let next, graph = this._graph;
43616
+ let next, graph = this._graph, startingAnnotation = false;
43415
43617
  const subject = this._subject, inversePredicate = this._inversePredicate;
43416
43618
  switch (token.type) {
43417
43619
  // A closing brace ends a graph
@@ -43424,6 +43626,7 @@ class N3Parser {
43424
43626
  // A dot just ends the statement, without sharing anything with the next
43425
43627
  case '.':
43426
43628
  this._subject = null;
43629
+ this._tripleTerm = null;
43427
43630
  next = this._contextStack.length ? this._readSubject : this._readInTopContext;
43428
43631
  if (inversePredicate) this._inversePredicate = false;
43429
43632
  break;
@@ -43435,20 +43638,27 @@ class N3Parser {
43435
43638
  case ',':
43436
43639
  next = this._readObject;
43437
43640
  break;
43641
+ // ~ is allowed in the annotation syntax
43642
+ case '~':
43643
+ next = this._readReifierInAnnotation;
43644
+ startingAnnotation = true;
43645
+ break;
43438
43646
  // {| means that the current triple is annotated with predicate-object pairs.
43439
43647
  case '{|':
43440
- if (!this._supportsRDFStar)
43441
- return this._error('Unexpected RDF-star syntax', token);
43442
- // Continue using the last triple as quoted triple subject for the predicate-object pairs.
43443
- const predicate = this._predicate, object = this._object;
43444
- this._subject = this._factory.quad(subject, predicate, object, this.DEFAULTGRAPH);
43648
+ // Continue using the last triple as reified triple subject for the predicate-object pairs.
43649
+ this._subject = this._readTripleTerm();
43650
+ this._validAnnotation = false;
43651
+ startingAnnotation = true;
43445
43652
  next = this._readPredicate;
43446
43653
  break;
43447
- // |} means that the current quoted triple in annotation syntax is finalized.
43654
+ // |} means that the current reified triple in annotation syntax is finalized.
43448
43655
  case '|}':
43449
- if (this._subject.termType !== 'Quad')
43450
- return this._error('Unexpected asserted triple closing', token);
43656
+ if (!this._annotation)
43657
+ return this._error('Unexpected annotation syntax closing', token);
43658
+ if (!this._validAnnotation)
43659
+ return this._error('Annotation block can not be empty', token);
43451
43660
  this._subject = null;
43661
+ this._annotation = false;
43452
43662
  next = this._readPunctuation;
43453
43663
  break;
43454
43664
  default:
@@ -43460,13 +43670,16 @@ class N3Parser {
43460
43670
  return this._error(`Expected punctuation to follow "${this._object.id}"`, token);
43461
43671
  }
43462
43672
  // A quad has been completed now, so return it
43463
- if (subject !== null) {
43673
+ if (subject !== null && (!startingAnnotation || (startingAnnotation && !this._annotation))) {
43464
43674
  const predicate = this._predicate, object = this._object;
43465
43675
  if (!inversePredicate)
43466
43676
  this._emit(subject, predicate, object, graph);
43467
43677
  else
43468
43678
  this._emit(object, predicate, subject, graph);
43469
43679
  }
43680
+ if (startingAnnotation) {
43681
+ this._annotation = true;
43682
+ }
43470
43683
  return next;
43471
43684
  }
43472
43685
 
@@ -43524,6 +43737,23 @@ class N3Parser {
43524
43737
  return this._readDeclarationPunctuation;
43525
43738
  }
43526
43739
 
43740
+ // ### `_isValidVersion` checks if the given version is valid for this parser to handle.
43741
+ _isValidVersion(version) {
43742
+ return this._parseUnsupportedVersions || N3Parser.SUPPORTED_VERSIONS.includes(version);
43743
+ }
43744
+
43745
+ // ### `_readVersion` reads version string declaration
43746
+ _readVersion(token) {
43747
+ if (token.type !== 'literal')
43748
+ return this._error('Expected literal to follow version declaration', token);
43749
+ if ((token.end - token.start) !== token.value.length + 2)
43750
+ return this._error('Version declarations must use single quotes', token);
43751
+ this._versionCallback(token.value);
43752
+ if (!this._isValidVersion(token.value))
43753
+ return this._error(`Detected unsupported version: "${token.value}"`, token);
43754
+ return this._readDeclarationPunctuation;
43755
+ }
43756
+
43527
43757
  // ### `_readNamedGraphLabel` reads the label of a named graph
43528
43758
  _readNamedGraphLabel(token) {
43529
43759
  switch (token.type) {
@@ -43672,25 +43902,15 @@ class N3Parser {
43672
43902
  return this._readPath;
43673
43903
  }
43674
43904
 
43675
- // ### `_readRDFStarTailOrGraph` reads the graph of a nested RDF-star quad or the end of a nested RDF-star triple
43676
- _readRDFStarTailOrGraph(token) {
43677
- if (token.type !== '>>') {
43678
- // An entity means this is a quad (only allowed if not already inside a graph)
43679
- if (this._supportsQuads && this._graph === null && (this._graph = this._readEntity(token)) !== undefined)
43680
- return this._readRDFStarTail;
43681
- return this._error(`Expected >> to follow "${this._object.id}"`, token);
43682
- }
43683
- return this._readRDFStarTail(token);
43684
- }
43685
-
43686
- // ### `_readRDFStarTail` reads the end of a nested RDF-star triple
43687
- _readRDFStarTail(token) {
43688
- if (token.type !== '>>')
43689
- return this._error(`Expected >> but got ${token.type}`, token);
43905
+ // ### `_readTripleTermTail` reads the end of a triple term
43906
+ _readTripleTermTail(token) {
43907
+ if (token.type !== ')>>')
43908
+ return this._error(`Expected )>> but got ${token.type}`, token);
43690
43909
  // Read the quad and restore the previous context
43691
43910
  const quad = this._factory.quad(this._subject, this._predicate, this._object,
43692
- this._graph || this.DEFAULTGRAPH);
43693
- this._restoreContext('<<', token);
43911
+ this._graph || this.DEFAULTGRAPH);
43912
+ this._restoreContext('<<(', token);
43913
+
43694
43914
  // If the triple was the subject, continue by reading the predicate.
43695
43915
  if (this._subject === null) {
43696
43916
  this._subject = quad;
@@ -43703,6 +43923,78 @@ class N3Parser {
43703
43923
  }
43704
43924
  }
43705
43925
 
43926
+ // ### `_readReifiedTripleTailOrReifier` reads a reifier or the end of a nested reified triple
43927
+ _readReifiedTripleTailOrReifier(token) {
43928
+ if (token.type === '~') {
43929
+ return this._readReifier;
43930
+ }
43931
+ return this._readReifiedTripleTail(token);
43932
+ }
43933
+
43934
+ // ### `_readReifiedTripleTail` reads the end of a nested reified triple
43935
+ _readReifiedTripleTail(token) {
43936
+ if (token.type !== '>>')
43937
+ return this._error(`Expected >> but got ${token.type}`, token);
43938
+ // Read the triple term and restore the previous context
43939
+ this._tripleTerm = null;
43940
+ const reifier = this._readTripleTerm();
43941
+ this._restoreContext('<<', token);
43942
+
43943
+ // // If we're in a list, continue processing that list
43944
+ const stack = this._contextStack, parent = stack.length && stack[stack.length - 1];
43945
+ if (parent && parent.type === 'list') {
43946
+ this._emit(this._subject, this.RDF_FIRST, reifier, this._graph);
43947
+ return this._getContextEndReader();
43948
+ }
43949
+ // If the triple was the subject, continue by reading the predicate.
43950
+ else if (this._subject === null) {
43951
+ this._subject = reifier;
43952
+ return this._readPredicateOrReifierTripleEnd;
43953
+ }
43954
+ // If the triple was the object, read context end.
43955
+ else {
43956
+ this._object = reifier;
43957
+ return this._getContextEndReader();
43958
+ }
43959
+ }
43960
+
43961
+ _readPredicateOrReifierTripleEnd(token) {
43962
+ if (token.type === '.') {
43963
+ this._subject = null;
43964
+ return this._readPunctuation(token);
43965
+ }
43966
+ return this._readPredicate(token);
43967
+ }
43968
+
43969
+ // ### `_readReifier` reads the triple term identifier after a tilde when in a reifying triple.
43970
+ _readReifier(token) {
43971
+ this._reifier = this._readEntity(token);
43972
+ return this._readReifiedTripleTail;
43973
+ }
43974
+
43975
+ // ### `_readReifier` reads the optional triple term identifier after a tilde when in annotation syntax.
43976
+ _readReifierInAnnotation(token) {
43977
+ // If next token is a reifier, read it as such.
43978
+ if (token.type === 'IRI' || token.type === 'typeIRI' || token.type === 'type' || token.type === 'prefixed' || token.type === 'blank' || token.type === 'var') {
43979
+ this._reifier = this._readEntity(token);
43980
+ return this._readPunctuation;
43981
+ }
43982
+ // Otherwise, emit and assert triple term.
43983
+ this._readTripleTerm();
43984
+ this._subject = null;
43985
+ return this._readPunctuation(token);
43986
+ }
43987
+
43988
+ _readTripleTerm() {
43989
+ const stack = this._contextStack, parent = stack.length && stack[stack.length - 1];
43990
+ const parentGraph = parent ? parent.graph : undefined;
43991
+ const reifier = this._reifier || this._factory.blankNode();
43992
+ this._reifier = null;
43993
+ this._tripleTerm = this._tripleTerm || this._factory.quad(this._subject, this._predicate, this._object);
43994
+ this._emit(reifier, this.RDF_REIFIES, this._tripleTerm, parentGraph || this.DEFAULTGRAPH);
43995
+ return reifier;
43996
+ }
43997
+
43706
43998
  // ### `_getContextEndReader` gets the next reader function at the end of a context
43707
43999
  _getContextEndReader() {
43708
44000
  const contextStack = this._contextStack;
@@ -43716,8 +44008,10 @@ class N3Parser {
43716
44008
  return this._readListItem;
43717
44009
  case 'formula':
43718
44010
  return this._readFormulaTail;
44011
+ case '<<(':
44012
+ return this._readTripleTermTail;
43719
44013
  case '<<':
43720
- return this._readRDFStarTailOrGraph;
44014
+ return this._readReifiedTripleTailOrReifier;
43721
44015
  }
43722
44016
  }
43723
44017
 
@@ -43832,27 +44126,30 @@ class N3Parser {
43832
44126
  // ## Public methods
43833
44127
 
43834
44128
  // ### `parse` parses the N3 input and emits each parsed quad through the onQuad callback.
43835
- parse(input, quadCallback, prefixCallback) {
44129
+ parse(input, quadCallback, prefixCallback, versionCallback) {
43836
44130
  // The second parameter accepts an object { onQuad: ..., onPrefix: ..., onComment: ...}
43837
44131
  // As a second and third parameter it still accepts a separate quadCallback and prefixCallback for backward compatibility as well
43838
- let onQuad, onPrefix, onComment;
43839
- if (quadCallback && (quadCallback.onQuad || quadCallback.onPrefix || quadCallback.onComment)) {
44132
+ let onQuad, onPrefix, onComment, onVersion;
44133
+ if (quadCallback && (quadCallback.onQuad || quadCallback.onPrefix || quadCallback.onComment || quadCallback.onVersion)) {
43840
44134
  onQuad = quadCallback.onQuad;
43841
44135
  onPrefix = quadCallback.onPrefix;
43842
44136
  onComment = quadCallback.onComment;
44137
+ onVersion = quadCallback.onVersion;
43843
44138
  }
43844
44139
  else {
43845
44140
  onQuad = quadCallback;
43846
44141
  onPrefix = prefixCallback;
44142
+ onVersion = versionCallback;
43847
44143
  }
43848
44144
  // The read callback is the next function to be executed when a token arrives.
43849
44145
  // We start reading in the top context.
43850
- this._readCallback = this._readInTopContext;
44146
+ this._readCallback = this._readBeforeTopContext;
43851
44147
  this._sparqlStyle = false;
43852
44148
  this._prefixes = Object.create(null);
43853
44149
  this._prefixes._ = this._blankNodePrefix ? this._blankNodePrefix.substr(2)
43854
44150
  : `b${blankNodePrefix++}_`;
43855
44151
  this._prefixCallback = onPrefix || noop;
44152
+ this._versionCallback = onVersion || noop;
43856
44153
  this._inversePredicate = false;
43857
44154
  this._quantified = Object.create(null);
43858
44155
 
@@ -43908,11 +44205,12 @@ function initDataFactory(parser, factory) {
43908
44205
  parser.DEFAULTGRAPH = factory.defaultGraph();
43909
44206
 
43910
44207
  // Set common named nodes
43911
- parser.RDF_FIRST = factory.namedNode(IRIs.rdf.first);
43912
- parser.RDF_REST = factory.namedNode(IRIs.rdf.rest);
43913
- parser.RDF_NIL = factory.namedNode(IRIs.rdf.nil);
43914
- parser.N3_FORALL = factory.namedNode(IRIs.r.forAll);
43915
- parser.N3_FORSOME = factory.namedNode(IRIs.r.forSome);
44208
+ parser.RDF_FIRST = factory.namedNode(IRIs.rdf.first);
44209
+ parser.RDF_REST = factory.namedNode(IRIs.rdf.rest);
44210
+ parser.RDF_NIL = factory.namedNode(IRIs.rdf.nil);
44211
+ parser.RDF_REIFIES = factory.namedNode(IRIs.rdf.reifies);
44212
+ parser.N3_FORALL = factory.namedNode(IRIs.r.forAll);
44213
+ parser.N3_FORSOME = factory.namedNode(IRIs.r.forSome);
43916
44214
  parser.ABBREVIATIONS = {
43917
44215
  'a': factory.namedNode(IRIs.rdf.type),
43918
44216
  '=': factory.namedNode(IRIs.owl.sameAs),
@@ -43921,6 +44219,11 @@ function initDataFactory(parser, factory) {
43921
44219
  };
43922
44220
  parser.QUANTIFIERS_GRAPH = factory.namedNode('urn:n3:quantifiers');
43923
44221
  }
44222
+ N3Parser.SUPPORTED_VERSIONS = [
44223
+ '1.2',
44224
+ '1.2-basic',
44225
+ '1.1',
44226
+ ];
43924
44227
  initDataFactory(N3Parser.prototype, N3DataFactory);
43925
44228
 
43926
44229
  ;// ./node_modules/n3/src/N3Util.js
@@ -44280,8 +44583,9 @@ class N3Writer {
44280
44583
  value = value.replace(escapeAll, characterReplacer);
44281
44584
 
44282
44585
  // Write a language-tagged literal
44586
+ const direction = literal.direction ? `--${literal.direction}` : '';
44283
44587
  if (literal.language)
44284
- return `"${value}"@${literal.language}`;
44588
+ return `"${value}"@${literal.language}${direction}`;
44285
44589
 
44286
44590
  // Write dedicated literals per data type
44287
44591
  if (this._lineMode) {
@@ -44336,11 +44640,11 @@ class N3Writer {
44336
44640
 
44337
44641
  // ### `_encodeQuad` encodes an RDF-star quad
44338
44642
  _encodeQuad({ subject, predicate, object, graph }) {
44339
- return `<<${
44643
+ return `<<(${
44340
44644
  this._encodeSubject(subject)} ${
44341
44645
  this._encodePredicate(predicate)} ${
44342
44646
  this._encodeObject(object)}${
44343
- N3Util_isDefaultGraph(graph) ? '' : ` ${this._encodeIriOrBlank(graph)}`}>>`;
44647
+ N3Util_isDefaultGraph(graph) ? '' : ` ${this._encodeIriOrBlank(graph)}`})>>`;
44344
44648
  }
44345
44649
 
44346
44650
  // ### `_blockedWrite` replaces `_write` after the writer has been closed
@@ -70070,7 +70374,6 @@ const RDFXMLPane = exports.RDFXMLPane = {
70070
70374
  };
70071
70375
 
70072
70376
  // ends
70073
- //# sourceMappingURL=RDFXMLPane.js.map
70074
70377
 
70075
70378
  /***/ },
70076
70379
 
@@ -70259,7 +70562,6 @@ var _default = exports["default"] = {
70259
70562
  return div;
70260
70563
  }
70261
70564
  }; // ends
70262
- //# sourceMappingURL=audioPane.js.map
70263
70565
 
70264
70566
  /***/ },
70265
70567
 
@@ -70358,7 +70660,6 @@ const classInstancePane = exports.classInstancePane = {
70358
70660
  }
70359
70661
  };
70360
70662
  // ends
70361
- //# sourceMappingURL=classInstancePane.js.map
70362
70663
 
70363
70664
  /***/ },
70364
70665
 
@@ -70512,7 +70813,6 @@ function createSection(container, dom, title) {
70512
70813
  titleElement.innerText = title;
70513
70814
  return section;
70514
70815
  }
70515
- //# sourceMappingURL=basicPreferences.js.map
70516
70816
 
70517
70817
  /***/ },
70518
70818
 
@@ -70587,7 +70887,6 @@ function buildHomePage(container, subject) {
70587
70887
  (0, _homepage.generateHomepage)(subject, _solidLogic.store, _solidLogic.store.fetcher).then(homepage => shadow.appendChild(homepage));
70588
70888
  }
70589
70889
  var _default = exports["default"] = dashboardPane;
70590
- //# sourceMappingURL=dashboardPane.js.map
70591
70890
 
70592
70891
  /***/ },
70593
70892
 
@@ -70667,7 +70966,6 @@ async function loadProfile(subject, store, fetcher) {
70667
70966
  function getName(store, ownersProfile) {
70668
70967
  return store.anyValue(ownersProfile, _solidUi.ns.vcard('fn'), null, ownersProfile.doc()) || store.anyValue(ownersProfile, _solidUi.ns.foaf('name'), null, ownersProfile.doc()) || new URL(ownersProfile.uri).host.split('.')[0];
70669
70968
  }
70670
- //# sourceMappingURL=homepage.js.map
70671
70969
 
70672
70970
  /***/ },
70673
70971
 
@@ -70932,7 +71230,6 @@ const dataContentPane = exports.dataContentPane = {
70932
71230
  return div;
70933
71231
  }
70934
71232
  };
70935
- //# sourceMappingURL=dataContentPane.js.map
70936
71233
 
70937
71234
  /***/ },
70938
71235
 
@@ -71014,7 +71311,6 @@ const defaultPane = exports.defaultPane = {
71014
71311
  };
71015
71312
 
71016
71313
  // ends
71017
- //# sourceMappingURL=defaultPane.js.map
71018
71314
 
71019
71315
  /***/ },
71020
71316
 
@@ -71096,7 +71392,6 @@ var _default = exports["default"] = {
71096
71392
 
71097
71393
  // render: removed - now handled by humanReadablePane with appropriate dokieli icon
71098
71394
  }; // ends
71099
- //# sourceMappingURL=dokieliPane.js.map
71100
71395
 
71101
71396
  /***/ },
71102
71397
 
@@ -71131,7 +71426,6 @@ const DOKIELI_TEMPLATE = `<!DOCTYPE html>
71131
71426
  </html>
71132
71427
  `;
71133
71428
  var _default = exports["default"] = DOKIELI_TEMPLATE;
71134
- //# sourceMappingURL=new.js.map
71135
71429
 
71136
71430
  /***/ },
71137
71431
 
@@ -71323,7 +71617,6 @@ const formPane = exports.formPane = {
71323
71617
  return box;
71324
71618
  }
71325
71619
  };
71326
- //# sourceMappingURL=pane.js.map
71327
71620
 
71328
71621
  /***/ },
71329
71622
 
@@ -71403,7 +71696,6 @@ const HomePaneSource = {
71403
71696
 
71404
71697
  // ends
71405
71698
  var _default = exports["default"] = HomePaneSource;
71406
- //# sourceMappingURL=homePane.js.map
71407
71699
 
71408
71700
  /***/ },
71409
71701
 
@@ -71617,7 +71909,6 @@ const humanReadablePane = {
71617
71909
  }
71618
71910
  };
71619
71911
  var _default = exports["default"] = humanReadablePane; // ends
71620
- //# sourceMappingURL=humanReadablePane.js.map
71621
71912
 
71622
71913
  /***/ },
71623
71914
 
@@ -71694,7 +71985,6 @@ const imagePane = exports.imagePane = {
71694
71985
  };
71695
71986
 
71696
71987
  // ends
71697
- //# sourceMappingURL=imagePane.js.map
71698
71988
 
71699
71989
  /***/ },
71700
71990
 
@@ -71810,7 +72100,6 @@ if (typeof window !== 'undefined') {
71810
72100
  getOutliner
71811
72101
  };
71812
72102
  }
71813
- //# sourceMappingURL=index.js.map
71814
72103
 
71815
72104
  /***/ },
71816
72105
 
@@ -72001,7 +72290,6 @@ function isProtectedUri(subject) {
72001
72290
  return subject.uri === siteUri || subject.uri === siteUri + 'profile/' || subject.uri === siteUri + 'profile/card' || subject.uri === siteUri + 'settings/' || subject.uri === siteUri + 'settings/prefs.ttl' || subject.uri === siteUri + 'settings/privateTypeIndex.ttl' || subject.uri === siteUri + 'settings/publicTypeIndex.ttl' || subject.uri === siteUri + 'settings/serverSide.ttl';
72002
72291
  }
72003
72292
  var _default = exports["default"] = pane; // ends
72004
- //# sourceMappingURL=internalPane.js.map
72005
72293
 
72006
72294
  /***/ },
72007
72295
 
@@ -72030,7 +72318,6 @@ function setFooterOptions() {
72030
72318
  solidProjectName: SOLID_PROJECT_NAME
72031
72319
  };
72032
72320
  }
72033
- //# sourceMappingURL=footer.js.map
72034
72321
 
72035
72322
  /***/ },
72036
72323
 
@@ -72123,7 +72410,6 @@ async function openDashboardPane(outliner, pane) {
72123
72410
  pane
72124
72411
  });
72125
72412
  }
72126
- //# sourceMappingURL=header.js.map
72127
72413
 
72128
72414
  /***/ },
72129
72415
 
@@ -72155,7 +72441,6 @@ async function initMainPage(store, uri) {
72155
72441
  const footer = (0, _footer.createFooter)(store);
72156
72442
  return Promise.all([header, footer]);
72157
72443
  }
72158
- //# sourceMappingURL=index.js.map
72159
72444
 
72160
72445
  /***/ },
72161
72446
 
@@ -72219,7 +72504,6 @@ const n3Pane = exports.n3Pane = {
72219
72504
  return div;
72220
72505
  }
72221
72506
  };
72222
- //# sourceMappingURL=n3Pane.js.map
72223
72507
 
72224
72508
  /***/ },
72225
72509
 
@@ -72245,7 +72529,6 @@ function createContext(dom, paneRegistry, store, logic) {
72245
72529
  }
72246
72530
  };
72247
72531
  }
72248
- //# sourceMappingURL=context.js.map
72249
72532
 
72250
72533
  /***/ },
72251
72534
 
@@ -72260,6 +72543,7 @@ Object.defineProperty(exports, "__esModule", ({
72260
72543
  }));
72261
72544
  exports["default"] = _default;
72262
72545
  var paneRegistry = _interopRequireWildcard(__webpack_require__(4059));
72546
+ __webpack_require__(3824);
72263
72547
  var $rdf = _interopRequireWildcard(__webpack_require__(8230));
72264
72548
  var UI = _interopRequireWildcard(__webpack_require__(500));
72265
72549
  var _solidLogic = __webpack_require__(9332);
@@ -72406,8 +72690,12 @@ function _default(context) {
72406
72690
 
72407
72691
  this.outlineObjectTD = function outlineObjectTD(obj, view, deleteNode, statement) {
72408
72692
  const td = dom.createElement('td');
72409
- td.setAttribute('style', 'margin: 0.2em; border: none; padding: 0; vertical-align: top;');
72693
+ td.classList.add('obj');
72410
72694
  td.setAttribute('notSelectable', 'false');
72695
+ td.style.margin = '0.2em';
72696
+ td.style.border = 'none';
72697
+ td.style.padding = '0';
72698
+ td.style.verticalAlign = 'top';
72411
72699
  const theClass = 'obj';
72412
72700
 
72413
72701
  // set about and put 'expand' icon
@@ -72416,7 +72704,6 @@ function _default(context) {
72416
72704
  td.appendChild(UI.utils.AJARImage(UI.icons.originalIconBase + 'tbl-expand-trans.png', 'expand', undefined, dom)).addEventListener('click', expandMouseDownListener);
72417
72705
  }
72418
72706
  td.setAttribute('class', theClass); // this is how you find an object
72419
- // @@ TAKE CSS OUT OF STYLE SHEET
72420
72707
  if (kb.whether(obj, UI.ns.rdf('type'), UI.ns.link('Request'))) {
72421
72708
  td.className = 'undetermined';
72422
72709
  } // @@? why-timbl
@@ -72462,7 +72749,7 @@ function _default(context) {
72462
72749
  // if (kb.statementsMatching(predicate,rdf('type'), UI.ns.link('Request')).length) predicateTD.className='undetermined';
72463
72750
 
72464
72751
  const labelTD = dom.createElement('TD');
72465
- labelTD.setAttribute('style', 'margin: 0.2em; border: none; padding: 0; vertical-align: top;');
72752
+ labelTD.classList.add('labelTD');
72466
72753
  labelTD.setAttribute('notSelectable', 'true');
72467
72754
  labelTD.appendChild(dom.createTextNode(lab));
72468
72755
  predicateTD.appendChild(labelTD);
@@ -72536,7 +72823,7 @@ function _default(context) {
72536
72823
  const me = _solidLogic.authn.currentUser();
72537
72824
  if (!me) return [];
72538
72825
  const div = dom.createElement('div');
72539
- const [books, pods] = await Promise.all([getAddressBooks(), getPods()]);
72826
+ const [pods] = await Promise.all([getPods()]);
72540
72827
  return [{
72541
72828
  paneName: 'home',
72542
72829
  label: 'Your stuff',
@@ -72553,7 +72840,7 @@ function _default(context) {
72553
72840
  paneName: 'editProfile',
72554
72841
  label: 'Edit your Profile',
72555
72842
  icon: UI.icons.iconBase + 'noun_492246.svg'
72556
- }].concat(books).concat(pods);
72843
+ }].concat(pods);
72557
72844
  async function getPods() {
72558
72845
  async function addPodStorage(pod) {
72559
72846
  // namedNode
@@ -72922,7 +73209,7 @@ function _default(context) {
72922
73209
  const table = d.parentNode;
72923
73210
  const par = table.parentNode;
72924
73211
  const placeholder = dom.createElement('table');
72925
- placeholder.setAttribute('style', 'width: 100%;');
73212
+ placeholder.classList.add('placeholderTable');
72926
73213
  par.replaceChild(placeholder, table);
72927
73214
  table.removeChild(d);
72928
73215
  par.replaceChild(table, placeholder); // Attempt to
@@ -72935,7 +73222,7 @@ function _default(context) {
72935
73222
  if (!table) {
72936
73223
  // Create a new property table
72937
73224
  table = dom.createElement('table');
72938
- table.setAttribute('style', 'width: 100%;');
73225
+ table.classList.add('tableFullWidth');
72939
73226
  expandedHeaderTR(subject, pane, options).then(tr1 => {
72940
73227
  table.appendChild(tr1);
72941
73228
  if (tr1.firstPane) {
@@ -74232,7 +74519,7 @@ function _default(context) {
74232
74519
  } else if (obj.termType === 'Collection') {
74233
74520
  // obj.elements is an array of the elements in the collection
74234
74521
  rep = dom.createElement('table');
74235
- rep.setAttribute('style', 'width: 100%;');
74522
+ rep.classList.add('tableFullWidth');
74236
74523
  rep.setAttribute('about', obj.toNT());
74237
74524
  /* Not sure which looks best -- with or without. I think without
74238
74525
  var tr = rep.appendChild(document.createElement('tr'));
@@ -74243,7 +74530,7 @@ function _default(context) {
74243
74530
  const elt = obj.elements[i];
74244
74531
  const row = rep.appendChild(dom.createElement('tr'));
74245
74532
  const numcell = row.appendChild(dom.createElement('td'));
74246
- numcell.setAttribute('style', 'margin: 0.2em; border: none; padding: 0; vertical-align: top;');
74533
+ numcell.classList.add('obj');
74247
74534
  numcell.setAttribute('notSelectable', 'false');
74248
74535
  numcell.setAttribute('about', obj.toNT());
74249
74536
  numcell.innerHTML = i + 1 + ')';
@@ -74274,7 +74561,6 @@ function _default(context) {
74274
74561
 
74275
74562
  return this;
74276
74563
  } // END OF OUTLINE
74277
- //# sourceMappingURL=manager.js.map
74278
74564
 
74279
74565
  /***/ },
74280
74566
 
@@ -74408,7 +74694,6 @@ outlineIcons.termWidgets.optOn = new outlineIcons.OutlinerIcon(outlineIcons.src.
74408
74694
  outlineIcons.termWidgets.optOff = new outlineIcons.OutlinerIcon(outlineIcons.src.icon_optoff, 20, 'opt off', 'Make this branch of your query optional.');
74409
74695
  outlineIcons.termWidgets.addTri = new outlineIcons.OutlinerIcon(outlineIcons.src.icon_add_triple, 18, 'add tri', 'Add one');
74410
74696
  // Ideally: "New "+label(subject)
74411
- //# sourceMappingURL=outlineIcons.js.map
74412
74697
 
74413
74698
  /***/ },
74414
74699
 
@@ -74459,7 +74744,6 @@ function viewsAddPropertyView(views, property, pviewfunc, isDefault) {
74459
74744
  views.defaults[property] = pviewfunc;
74460
74745
  }
74461
74746
  } // viewsAddPropertyView
74462
- //# sourceMappingURL=propertyViews.js.map
74463
74747
 
74464
74748
  /***/ },
74465
74749
 
@@ -74752,7 +75036,6 @@ function QuerySource() {
74752
75036
  }
74753
75037
  };
74754
75038
  }
74755
- //# sourceMappingURL=queryByExample.js.map
74756
75039
 
74757
75040
  /***/ },
74758
75041
 
@@ -76578,7 +76861,6 @@ function UserInput(outline) {
76578
76861
  }
76579
76862
  };
76580
76863
  }
76581
- //# sourceMappingURL=userInput.js.map
76582
76864
 
76583
76865
  /***/ },
76584
76866
 
@@ -76600,7 +76882,6 @@ var _default = dom => function viewAsImage(obj) {
76600
76882
  return img;
76601
76883
  };
76602
76884
  exports["default"] = _default;
76603
- //# sourceMappingURL=viewAsImage.js.map
76604
76885
 
76605
76886
  /***/ },
76606
76887
 
@@ -76629,7 +76910,6 @@ var _default = dom => function viewAsMbox(obj) {
76629
76910
  return anchor;
76630
76911
  };
76631
76912
  exports["default"] = _default;
76632
- //# sourceMappingURL=viewAsMbox.js.map
76633
76913
 
76634
76914
  /***/ },
76635
76915
 
@@ -77047,7 +77327,6 @@ const paneDef = {
77047
77327
  };
77048
77328
  // ends
77049
77329
  var _default = exports["default"] = paneDef;
77050
- //# sourceMappingURL=padPane.js.map
77051
77330
 
77052
77331
  /***/ },
77053
77332
 
@@ -77178,7 +77457,6 @@ var _default = exports["default"] = {
77178
77457
  return div;
77179
77458
  }
77180
77459
  }; // ends
77181
- //# sourceMappingURL=playlistPane.js.map
77182
77460
 
77183
77461
  /***/ },
77184
77462
 
@@ -77331,7 +77609,6 @@ function registerPanes(register) {
77331
77609
 
77332
77610
  // ENDS
77333
77611
  }
77334
- //# sourceMappingURL=registerPanes.js.map
77335
77612
 
77336
77613
  /***/ },
77337
77614
 
@@ -77764,9 +78041,29 @@ const schedulePane = exports.schedulePane = {
77764
78041
  const showForms = function () {
77765
78042
  clearElement(naviCenter); // Remove refresh button if nec
77766
78043
  const div = naviMain;
78044
+
78045
+ // form2 depends on sched:allDay; seed a local default for new polls
78046
+ if (!kb.any(subject, ns.sched('allDay'))) {
78047
+ kb.add(subject, ns.sched('allDay'), $rdf.literal('true', undefined, $rdf.sym('http://www.w3.org/2001/XMLSchema#boolean')), detailsDoc);
78048
+ }
77767
78049
  const wizard = true;
77768
78050
  let currentSlide = 0;
77769
78051
  let gotDoneButton = false;
78052
+ const hasFormControls = function (container) {
78053
+ return !!container.querySelector('input, select, textarea, button');
78054
+ };
78055
+ const asBoolean = function (term, fallback) {
78056
+ if (!term) return fallback;
78057
+ const value = (term.value || '').toLowerCase();
78058
+ if (value === 'true' || value === '1') return true;
78059
+ if (value === 'false' || value === '0') return false;
78060
+ return fallback;
78061
+ };
78062
+ const renderTimeProposalFallback = function (slide) {
78063
+ const allDayValue = asBoolean(kb.any(subject, ns.sched('allDay')), true);
78064
+ const fallbackForm = kb.sym(formsURI + (allDayValue ? '#AllDayForm2' : '#NotAllDayForm2'));
78065
+ UI.widgets.appendForm(document, slide, {}, subject, fallbackForm, detailsDoc, complainIfBad);
78066
+ };
77770
78067
  if (wizard) {
77771
78068
  const forms = [form1, form2, form3];
77772
78069
  const slides = [];
@@ -77774,6 +78071,11 @@ const schedulePane = exports.schedulePane = {
77774
78071
  for (let f = 0; f < forms.length; f++) {
77775
78072
  const slide = dom.createElement('div');
77776
78073
  UI.widgets.appendForm(document, slide, {}, subject, forms[f], detailsDoc, complainIfBad);
78074
+
78075
+ // Some stores end up with form2's ui:Options unresolved; force a usable input form.
78076
+ if (f === 1 && !hasFormControls(slide)) {
78077
+ renderTimeProposalFallback(slide);
78078
+ }
77777
78079
  slides.push(slide);
77778
78080
  }
77779
78081
  const refresh = function () {
@@ -77990,7 +78292,7 @@ const schedulePane = exports.schedulePane = {
77990
78292
 
77991
78293
  // Read or create empty results file
77992
78294
  function getResults() {
77993
- fetcher.nowOrWhenFetched(resultsDoc.uri, (ok, body, response) => {
78295
+ fetcher.nowOrWhenFetched(resultsDoc.uri, undefined, (ok, body, response) => {
77994
78296
  if (!ok) {
77995
78297
  if (response.status === 404) {
77996
78298
  // / Check explicitly for 404 error
@@ -78058,13 +78360,19 @@ const schedulePane = exports.schedulePane = {
78058
78360
  options.set_x = kb.each(subject, ns.sched('option')); // @@@@@ option -> dtstart in future
78059
78361
  options.set_x = options.set_x.map(function (opt) {
78060
78362
  return kb.any(opt, ns.cal('dtstart'));
78363
+ }).filter(function (time) {
78364
+ return !!time;
78061
78365
  });
78062
78366
  options.set_y = kb.each(subject, ns.sched('response'));
78063
78367
  options.set_y = options.set_y.map(function (resp) {
78064
78368
  return kb.any(resp, ns.dc('author'));
78369
+ }).filter(function (author) {
78370
+ return !!author;
78065
78371
  });
78066
78372
  const possibleTimes = kb.each(invitation, ns.sched('option')).map(function (opt) {
78067
78373
  return kb.any(opt, ns.cal('dtstart'));
78374
+ }).filter(function (time) {
78375
+ return !!time;
78068
78376
  });
78069
78377
  const displayTheMatrix = function () {
78070
78378
  const matrix = div.appendChild(UI.matrix.matrixForQuery(dom, query, v.time, v.author, v.value, options, function () {}));
@@ -78121,6 +78429,7 @@ const schedulePane = exports.schedulePane = {
78121
78429
  }; // @@ may need that
78122
78430
  const selectOptions = {};
78123
78431
  const predicate = ns.sched('availabilty');
78432
+ if (!x) return;
78124
78433
  const cellSubject = dataPointForNT[x.toNT()];
78125
78434
  const selector = UI.widgets.makeSelectForOptions(dom, kb, cellSubject, predicate, possibleAvailabilities, selectOptions, resultsDoc, callbackFunction);
78126
78435
  cell.appendChild(selector);
@@ -78146,15 +78455,18 @@ const schedulePane = exports.schedulePane = {
78146
78455
  const dps = kb.each(myResponse, ns.sched('cell'));
78147
78456
  dps.forEach(function (dataPoint) {
78148
78457
  const time = kb.any(dataPoint, ns.cal('dtstart'));
78458
+ if (!time) return;
78149
78459
  dataPointForNT[time.toNT()] = dataPoint;
78150
78460
  });
78151
78461
  }
78152
78462
  for (let j = 0; j < possibleTimes.length; j++) {
78153
- if (dataPointForNT[possibleTimes[j].toNT()]) continue;
78463
+ const possibleTime = possibleTimes[j];
78464
+ if (!possibleTime) continue;
78465
+ if (dataPointForNT[possibleTime.toNT()]) continue;
78154
78466
  const dataPoint = $rdf.sym(id + '_' + j);
78155
78467
  insertables.push($rdf.st(myResponse, ns.sched('cell'), dataPoint, doc));
78156
- insertables.push($rdf.st(dataPoint, ns.cal('dtstart'), possibleTimes[j], doc)); // @@
78157
- dataPointForNT[possibleTimes[j].toNT()] = dataPoint;
78468
+ insertables.push($rdf.st(dataPoint, ns.cal('dtstart'), possibleTime, doc)); // @@
78469
+ dataPointForNT[possibleTime.toNT()] = dataPoint;
78158
78470
  }
78159
78471
  if (insertables.length) {
78160
78472
  kb.updater.update([], insertables, function (uri, success, errorBody) {
@@ -78226,7 +78538,6 @@ const schedulePane = exports.schedulePane = {
78226
78538
  } // render
78227
78539
  }; // property list
78228
78540
  // ends
78229
- //# sourceMappingURL=schedulePane.js.map
78230
78541
 
78231
78542
  /***/ },
78232
78543
 
@@ -78282,7 +78593,6 @@ const sharingPane = {
78282
78593
  }
78283
78594
  };
78284
78595
  var _default = exports["default"] = sharingPane;
78285
- //# sourceMappingURL=sharingPane.js.map
78286
78596
 
78287
78597
  /***/ },
78288
78598
 
@@ -78369,7 +78679,6 @@ const slideshowPane = exports.slideshowPane = {
78369
78679
  };
78370
78680
 
78371
78681
  // ends
78372
- //# sourceMappingURL=slideshowPane.js.map
78373
78682
 
78374
78683
  /***/ },
78375
78684
 
@@ -78807,7 +79116,6 @@ const socialPane = exports.socialPane = {
78807
79116
  } // render()
78808
79117
  }; //
78809
79118
  // ends
78810
- //# sourceMappingURL=socialPane.js.map
78811
79119
 
78812
79120
  /***/ },
78813
79121
 
@@ -78872,7 +79180,6 @@ const TabbedPane = {
78872
79180
  }
78873
79181
  };
78874
79182
  var _default = exports["default"] = TabbedPane;
78875
- //# sourceMappingURL=tabbedPane.js.map
78876
79183
 
78877
79184
  /***/ },
78878
79185
 
@@ -78936,7 +79243,6 @@ const tableViewPane = exports.tableViewPane = {
78936
79243
  return div;
78937
79244
  }
78938
79245
  };
78939
- //# sourceMappingURL=tableViewPane.js.map
78940
79246
 
78941
79247
  /***/ },
78942
79248
 
@@ -79421,7 +79727,6 @@ var _default = exports["default"] = {
79421
79727
  return div;
79422
79728
  }
79423
79729
  }; // ends
79424
- //# sourceMappingURL=pane.js.map
79425
79730
 
79426
79731
  /***/ },
79427
79732
 
@@ -79752,7 +80057,6 @@ var _default = exports["default"] = {
79752
80057
  return div;
79753
80058
  }
79754
80059
  }; // ends
79755
- //# sourceMappingURL=period.js.map
79756
80060
 
79757
80061
  /***/ },
79758
80062
 
@@ -79934,7 +80238,6 @@ var _default = exports["default"] = {
79934
80238
  return div;
79935
80239
  }
79936
80240
  }; // ends
79937
- //# sourceMappingURL=tripPane.js.map
79938
80241
 
79939
80242
  /***/ },
79940
80243
 
@@ -80087,7 +80390,6 @@ function createModesInput({
80087
80390
  }, {}, element => formElements.modes.push(element)), createText('span', mode)]);
80088
80391
  });
80089
80392
  }
80090
- //# sourceMappingURL=trustedApplications.dom.js.map
80091
80393
 
80092
80394
  /***/ },
80093
80395
 
@@ -80118,7 +80420,6 @@ function getStatementsToAdd(origin, nodeName, modes, person, ns) {
80118
80420
  function generateRandomString() {
80119
80421
  return Math.random().toString(36).substr(2, 5);
80120
80422
  }
80121
- //# sourceMappingURL=trustedApplications.utils.js.map
80122
80423
 
80123
80424
  /***/ },
80124
80425
 
@@ -80181,7 +80482,6 @@ async function render(dom, main, statusArea) {
80181
80482
  main.appendChild((0, _trustedApplications.createText)('p', 'Application URLs must be valid URL. Examples are http://localhost:3000, https://trusted.app, and https://sub.trusted.app.'));
80182
80483
  }
80183
80484
  var _default = exports["default"] = trustedApplicationView;
80184
- //# sourceMappingURL=trustedApplications.view.js.map
80185
80485
 
80186
80486
  /***/ },
80187
80487
 
@@ -80335,7 +80635,6 @@ var _default = exports["default"] = {
80335
80635
  return box;
80336
80636
  }
80337
80637
  }; // ends
80338
- //# sourceMappingURL=pane.js.map
80339
80638
 
80340
80639
  /***/ },
80341
80640
 
@@ -80350,35 +80649,40 @@ Object.defineProperty(exports, "__esModule", ({
80350
80649
  }));
80351
80650
  exports["default"] = void 0;
80352
80651
  var _default = exports["default"] = {
80353
- buildTime: '2026-02-23T18:23:25Z',
80354
- commit: 'aa09685725f8b4b928f10df372ae6422ca570082',
80652
+ buildTime: '2026-03-23T14:31:09Z',
80653
+ commit: 'bced9969943d3ef2701e66051be109ba49afdaf9',
80355
80654
  npmInfo: {
80356
- 'solid-panes': '4.2.3',
80357
- npm: '10.8.2',
80358
- node: '20.20.0',
80655
+ 'solid-panes': '4.2.4',
80656
+ npm: '10.9.4',
80657
+ node: '22.22.1',
80359
80658
  acorn: '8.15.0',
80360
80659
  ada: '2.9.2',
80660
+ amaro: '1.1.5',
80361
80661
  ares: '1.34.6',
80362
80662
  brotli: '1.1.0',
80363
- cjs_module_lexer: '2.1.0',
80364
- cldr: '47.0',
80365
- icu: '77.1',
80663
+ cjs_module_lexer: '2.2.0',
80664
+ cldr: '48.0',
80665
+ icu: '78.2',
80366
80666
  llhttp: '9.3.0',
80367
- modules: '115',
80368
- napi: '9',
80369
- nghttp2: '1.61.0',
80370
- openssl: '3.0.17',
80667
+ modules: '127',
80668
+ napi: '10',
80669
+ nbytes: '0.1.1',
80670
+ ncrypto: '0.0.1',
80671
+ nghttp2: '1.64.0',
80672
+ openssl: '3.5.5',
80673
+ simdjson: '4.2.4',
80371
80674
  simdutf: '6.4.2',
80372
- tz: '2025b',
80675
+ sqlite: '3.51.2',
80676
+ tz: '2025c',
80373
80677
  undici: '6.23.0',
80374
- unicode: '16.0',
80375
- uv: '1.46.0',
80678
+ unicode: '17.0',
80679
+ uv: '1.51.0',
80376
80680
  uvwasi: '0.0.23',
80377
- v8: '11.3.244.8-node.33',
80378
- zlib: '1.3.1-470d3a2'
80681
+ v8: '12.4.254.21-node.35',
80682
+ zlib: '1.3.1-e00f703',
80683
+ zstd: '1.5.7'
80379
80684
  }
80380
80685
  };
80381
- //# sourceMappingURL=versionInfo.js.map
80382
80686
 
80383
80687
  /***/ },
80384
80688
 
@@ -80428,7 +80732,6 @@ var _default = exports["default"] = {
80428
80732
  return div;
80429
80733
  }
80430
80734
  }; // ends
80431
- //# sourceMappingURL=videoPane.js.map
80432
80735
 
80433
80736
  /***/ },
80434
80737
 
@@ -84524,7 +84827,7 @@ function attachmentList(dom, subject, div) {
84524
84827
  var attachmentRight = attachmentOne.appendChild(dom.createElement('td'));
84525
84828
  var attachmentTable = attachmentRight.appendChild(dom.createElement('table'));
84526
84829
  attachmentTable.appendChild(dom.createElement('tr')) // attachmentTableTop
84527
- ;
84830
+ ;
84528
84831
  attachmentOuter.refresh = refresh; // Participate in downstream changes
84529
84832
  // ;(attachmentTable as any).refresh = refresh <- outer should be best?
84530
84833
 
@@ -85346,6 +85649,8 @@ function basicField(dom, container, already, subject, form, doc, callbackFunctio
85346
85649
  field.style = inputStyle;
85347
85650
  rhs.appendChild(field);
85348
85651
  field.setAttribute('type', params.type ? params.type : 'text');
85652
+ var fieldType = (field.getAttribute('type') || '').toLowerCase();
85653
+ var deferWhileFocused = fieldType === 'date' || fieldType === 'datetime-local';
85349
85654
  var size = kb.anyJS(form, src_ns.ui('size')) || styleConstants.textInputSize || 20;
85350
85655
  field.setAttribute('size', size);
85351
85656
  var maxLength = kb.any(form, src_ns.ui('maxLength'));
@@ -85369,7 +85674,7 @@ function basicField(dom, container, already, subject, form, doc, callbackFunctio
85369
85674
  }
85370
85675
  if (!kb.updater.editable(doc.uri)) {
85371
85676
  field.readOnly = true // was: disabled. readOnly is better
85372
- ;
85677
+ ;
85373
85678
  field.style = style.textInputStyleUneditable + paramStyle;
85374
85679
  if (suppressEmptyUneditable && field.value === '') {
85375
85680
  box.style.display = 'none'; // clutter
@@ -85384,9 +85689,18 @@ function basicField(dom, container, already, subject, form, doc, callbackFunctio
85384
85689
  }
85385
85690
  }, true);
85386
85691
  field.addEventListener('change', function (_e) {
85692
+ if (deferWhileFocused && dom.activeElement === field) {
85693
+ if (field.dataset) {
85694
+ field.dataset.deferredChange = 'true';
85695
+ }
85696
+ return;
85697
+ }
85387
85698
  // i.e. lose focus with changed data
85388
85699
  if (params.pattern && !field.value.match(params.pattern)) return;
85389
- field.disabled = true; // See if this stops getting two dates from fumbling e.g the chrome datepicker.
85700
+ var disabledForSave = !deferWhileFocused;
85701
+ if (disabledForSave) {
85702
+ field.disabled = true; // See if this stops getting two dates from fumbling, e.g., the chrome datepicker.
85703
+ }
85390
85704
  field.setAttribute('style', inputStyle + 'color: gray;'); // pending
85391
85705
  var ds = kb.statementsMatching(subject, property); // remove any multiple values
85392
85706
  var result;
@@ -85454,7 +85768,9 @@ function basicField(dom, container, already, subject, form, doc, callbackFunctio
85454
85768
  updateMany(ds, is, function (uri, ok, body) {
85455
85769
  // kb.updater.update(ds, is, function (uri, ok, body) {
85456
85770
  if (ok) {
85457
- field.disabled = false;
85771
+ if (disabledForSave) {
85772
+ field.disabled = false;
85773
+ }
85458
85774
  field.setAttribute('style', inputStyle);
85459
85775
  } else {
85460
85776
  box.appendChild(errorMessageBlock(dom, body));
@@ -85462,6 +85778,15 @@ function basicField(dom, container, already, subject, form, doc, callbackFunctio
85462
85778
  callbackFunction(ok, body);
85463
85779
  });
85464
85780
  }, true);
85781
+ field.addEventListener('blur', function (_e) {
85782
+ if (deferWhileFocused && field.dataset && field.dataset.deferredChange === 'true') {
85783
+ delete field.dataset.deferredChange;
85784
+ var event = new Event('change', {
85785
+ bubbles: true
85786
+ });
85787
+ field.dispatchEvent(event);
85788
+ }
85789
+ }, true);
85465
85790
  return box;
85466
85791
  }
85467
85792
  ;// ./src/widgets/forms/autocomplete/language.ts
@@ -88697,9 +89022,33 @@ field[src_ns.ui('Classifier').uri] = function (dom, container, already, subject,
88697
89022
  if (!ok) return callbackFunction(ok, body);
88698
89023
  return callbackFunction(ok, body);
88699
89024
  };
88700
- var box = makeSelectForNestedCategory(dom, kb, subject, category, dataDoc, checkOptions);
88701
- if (container) container.appendChild(box);
88702
- return box;
89025
+ // Create container for label and select
89026
+ var outerBox = dom.createElement('div');
89027
+ outerBox.setAttribute('class', 'classifierBox');
89028
+ // Render label
89029
+ var labelDiv = dom.createElement('div');
89030
+ labelDiv.setAttribute('class', 'formFieldName classifierBox-label');
89031
+ // Use fieldLabel to render ui:label if present
89032
+ labelDiv.appendChild(fieldLabel(dom, category, form));
89033
+ outerBox.appendChild(labelDiv);
89034
+ // Render select
89035
+ var selectBox = dom.createElement('div');
89036
+ selectBox.setAttribute('class', 'formFieldValue classifierBox-selectBox');
89037
+ var selectElement = makeSelectForNestedCategory(dom, kb, subject, category, dataDoc, checkOptions);
89038
+ // Set readonly if not editable
89039
+ if (selectElement && selectElement.querySelectorAll) {
89040
+ var selects = selectElement.querySelectorAll('select');
89041
+ if (selects.length && !kb.updater.editable(dataDoc.uri)) {
89042
+ selects.forEach(function (select) {
89043
+ select.readOnly = true;
89044
+ select.style = style.textInputStyleUneditable;
89045
+ });
89046
+ }
89047
+ }
89048
+ selectBox.appendChild(selectElement);
89049
+ outerBox.appendChild(selectBox);
89050
+ if (container) container.appendChild(outerBox);
89051
+ return outerBox;
88703
89052
  };
88704
89053
 
88705
89054
  /** Choice field
@@ -91887,6 +92236,8 @@ var AccessGroups = /*#__PURE__*/function () {
91887
92236
  thing,
91888
92237
  _this$_store,
91889
92238
  message,
92239
+ detectedTypes,
92240
+ typeDetails,
91890
92241
  error,
91891
92242
  _args4 = arguments,
91892
92243
  _t2;
@@ -91920,7 +92271,9 @@ var AccessGroups = /*#__PURE__*/function () {
91920
92271
  _context4.next = 6;
91921
92272
  break;
91922
92273
  }
91923
- error = " Error: Drop fails to drop appropriate thing! ".concat(uri);
92274
+ detectedTypes = Object.keys(this.store.findTypeURIs(thing));
92275
+ typeDetails = detectedTypes.length > 0 ? "Detected RDF types: ".concat(detectedTypes.join(', ')) : 'No RDF type was detected for this URI.';
92276
+ error = "Error: Failed to add access target: ".concat(uri, " is not a recognized ACL target type.") + " Expected one of: vcard:WebID, vcard:Group, foaf:Person, foaf:Agent, solid:AppProvider, solid:AppProviderClass, or recognized ACL classes." + ' Hint: try dropping a WebID profile URI, a vcard:Group URI, or a web app origin.' + typeDetails;
91924
92277
  src_debug/* error */.z3(error);
91925
92278
  return _context4.abrupt("return", Promise.reject(new Error(error)));
91926
92279
  case 6:
@@ -93259,7 +93612,7 @@ function cameraCaptureControl(dom, store, getImageDoc, doneCallback) {
93259
93612
  // if (!confirm('Save picture to ' + destination + ' ?')) return
93260
93613
  src_debug/* log */.Rm('Putting ' + blob.size + ' bytes of ' + contentType + ' to ' + destination)
93261
93614
  // @@ TODO Remove casting
93262
- ;
93615
+ ;
93263
93616
  store.fetcher.webOperation('PUT', destination.uri, {
93264
93617
  data: blob,
93265
93618
  contentType: contentType
@@ -99357,8 +99710,8 @@ function notepad(dom, padDoc, subject, me, options) {
99357
99710
  }
99358
99711
  }
99359
99712
  /* @@ TODO want to look into this, it seems upstream should be a boolean and default to false ?
99360
- *
99361
- */
99713
+ *
99714
+ */
99362
99715
  var complain = function complain(message) {
99363
99716
  var upstream = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;
99364
99717
  (0,src_debug/* log */.Rm)(message);
@@ -99370,6 +99723,7 @@ function notepad(dom, padDoc, subject, me, options) {
99370
99723
  // @@ TODO need to refactor so that we don't have to type cast
99371
99724
  var clearStatus = function clearStatus(_upsteam) {
99372
99725
  if (options.statusArea) {
99726
+ ;
99373
99727
  options.statusArea.innerHTML = '';
99374
99728
  }
99375
99729
  };
@@ -99401,7 +99755,7 @@ function notepad(dom, padDoc, subject, me, options) {
99401
99755
  var next = kb.any(chunk, PAD('next'));
99402
99756
  if (prev.sameTerm(subject) && next.sameTerm(subject)) {
99403
99757
  // Last one
99404
- (0,src_debug/* log */.Rm)('You can\'t delete the only line.');
99758
+ (0,src_debug/* log */.Rm)("You can't delete the only line.");
99405
99759
  return;
99406
99760
  }
99407
99761
  var del = kb.statementsMatching(chunk, undefined, undefined, padDoc).concat(kb.statementsMatching(undefined, undefined, chunk, padDoc));
@@ -99443,10 +99797,10 @@ function notepad(dom, padDoc, subject, me, options) {
99443
99797
  }, 1000);
99444
99798
  } else {
99445
99799
  (0,src_debug/* log */.Rm)(' removePart FAILED ' + chunk + ': ' + errorMessage);
99446
- (0,src_debug/* log */.Rm)(' removePart was deleteing :\'' + del);
99800
+ (0,src_debug/* log */.Rm)(" removePart was deleting :'" + del);
99447
99801
  setPartStyle(part, 'color: black; background-color: #fdd;'); // failed
99448
99802
  var res = response ? response.status : ' [no response field] ';
99449
- complain('Error ' + res + ' saving changes: ' + errorMessage["true"]); // upstream,
99803
+ complain('Error ' + res + ' saving changes: ' + String(errorMessage)); // upstream,
99450
99804
  // updater.requestDownstreamAction(padDoc, reloadAndSync);
99451
99805
  }
99452
99806
  });
@@ -99463,7 +99817,7 @@ function notepad(dom, padDoc, subject, me, options) {
99463
99817
  }
99464
99818
  updater.update(del, ins, function (uri, ok, errorBody) {
99465
99819
  if (!ok) {
99466
- (0,src_debug/* log */.Rm)('Indent change FAILED \'' + newIndent + '\' for ' + padDoc + ': ' + errorBody);
99820
+ (0,src_debug/* log */.Rm)("Indent change FAILED '" + newIndent + "' for " + padDoc + ': ' + errorBody);
99467
99821
  setPartStyle(part, 'color: black; background-color: #fdd;'); // failed
99468
99822
  updater.requestDownstreamAction(padDoc, reloadAndSync);
99469
99823
  } else {
@@ -99472,6 +99826,7 @@ function notepad(dom, padDoc, subject, me, options) {
99472
99826
  });
99473
99827
  };
99474
99828
  var addListeners = function addListeners(part, chunk) {
99829
+ var inputDebounceTimer = null;
99475
99830
  part.addEventListener('keydown', function (event) {
99476
99831
  if (!updater) {
99477
99832
  throw new Error('no updater');
@@ -99480,8 +99835,8 @@ function notepad(dom, padDoc, subject, me, options) {
99480
99835
  // up 38; down 40; left 37; right 39 tab 9; shift 16; escape 27
99481
99836
  switch (event.keyCode) {
99482
99837
  case 13:
99483
- // Return
99484
99838
  {
99839
+ // Return
99485
99840
  var before = event.shiftKey;
99486
99841
  (0,src_debug/* log */.Rm)('enter'); // Shift-return inserts before -- only way to add to top of pad.
99487
99842
  if (before) {
@@ -99528,8 +99883,8 @@ function notepad(dom, padDoc, subject, me, options) {
99528
99883
  }
99529
99884
  break;
99530
99885
  case 9:
99531
- // Tab
99532
99886
  {
99887
+ // Tab
99533
99888
  var delta = event.shiftKey ? -1 : 1;
99534
99889
  changeIndent(part, chunk, delta);
99535
99890
  event.preventDefault(); // default is to highlight next field
@@ -99572,7 +99927,8 @@ function notepad(dom, padDoc, subject, me, options) {
99572
99927
  // DEBUGGING ONLY
99573
99928
  if (part.lastSent) {
99574
99929
  if (old !== part.lastSent) {
99575
- throw new Error('Out of order, last sent expected \'' + old + '\' but found \'' + part.lastSent + '\'');
99930
+ // Non-fatal: log a warning instead of throwing, to avoid crashing the pad UI.
99931
+ console.warn("Out of order, last sent expected '" + old + "' but found '" + part.lastSent + "'");
99576
99932
  }
99577
99933
  }
99578
99934
  part.lastSent = newOne;
@@ -99592,7 +99948,7 @@ function notepad(dom, padDoc, subject, me, options) {
99592
99948
  updater.update(del, ins, function (uri, ok, errorBody, xhr) {
99593
99949
  if (!ok) {
99594
99950
  // alert("clash " + errorBody);
99595
- (0,src_debug/* log */.Rm)(' patch FAILED ' + xhr.status + ' for \'' + old + '\' -> \'' + newOne + '\': ' + errorBody);
99951
+ (0,src_debug/* log */.Rm)(' patch FAILED ' + xhr.status + " for '" + old + "' -> '" + newOne + "': " + errorBody);
99596
99952
  if (xhr.status === 409) {
99597
99953
  // Conflict - @@ we assume someone else
99598
99954
  setPartStyle(part, 'color: black; background-color: #fdd;');
@@ -99603,15 +99959,28 @@ function notepad(dom, padDoc, subject, me, options) {
99603
99959
  }, 1000);
99604
99960
  } else {
99605
99961
  setPartStyle(part, 'color: black; background-color: #fdd;'); // failed pink
99606
- part.state = 0;
99607
- complain(' Error ' + xhr.status + ' sending data: ' + errorBody, true);
99608
- beep(1.0, 128); // Other
99609
- // @@@ Do soemthing more serious with other errors eg auth, etc
99962
+ var status = xhr === null || xhr === void 0 ? void 0 : xhr.status;
99963
+ if (!status || status === 502 || status === 503) {
99964
+ // Transient server error – retry after a short delay
99965
+ part.lastSent = undefined;
99966
+ part.state = 0;
99967
+ setTimeout(function () {
99968
+ if (part.state === 0 || part.state === undefined) {
99969
+ part.state = 1;
99970
+ _updateStore(part);
99971
+ }
99972
+ }, 2000);
99973
+ } else {
99974
+ part.state = 0;
99975
+ complain(' Error ' + status + ' sending data: ' + errorBody, true);
99976
+ beep(1.0, 128); // Other
99977
+ // @@@ Do something more serious with other errors eg auth, etc
99978
+ }
99610
99979
  }
99611
99980
  } else {
99612
99981
  clearStatus(true); // upstream
99613
99982
  setPartStyle(part); // synced
99614
- (0,src_debug/* log */.Rm)(' Patch ok \'' + old + '\' -> \'' + newOne + '\' ');
99983
+ (0,src_debug/* log */.Rm)(" Patch ok '" + old + "' -> '" + newOne + "' ");
99615
99984
  if (part.state === 4) {
99616
99985
  // delete me
99617
99986
  part.state = 3;
@@ -99631,7 +100000,7 @@ function notepad(dom, padDoc, subject, me, options) {
99631
100000
  part.addEventListener('input', function inputChangeListener(_event) {
99632
100001
  // debug.log("input changed "+part.value);
99633
100002
  setPartStyle(part, undefined, true); // grey out - not synced
99634
- (0,src_debug/* log */.Rm)('Input event state ' + part.state + ' value \'' + part.value + '\'');
100003
+ (0,src_debug/* log */.Rm)('Input event state ' + part.state + " value '" + part.value + "'");
99635
100004
  switch (part.state) {
99636
100005
  case 3:
99637
100006
  // being deleted
@@ -99647,8 +100016,15 @@ function notepad(dom, padDoc, subject, me, options) {
99647
100016
  return;
99648
100017
  case 0:
99649
100018
  case undefined:
99650
- part.state = 1; // being upadted
99651
- _updateStore(part);
100019
+ // Debounce: wait for a pause in typing before sending PATCH
100020
+ if (inputDebounceTimer !== null) clearTimeout(inputDebounceTimer);
100021
+ inputDebounceTimer = setTimeout(function () {
100022
+ inputDebounceTimer = null;
100023
+ if (part.state === 0 || part.state === undefined) {
100024
+ part.state = 1; // being updated
100025
+ _updateStore(part);
100026
+ }
100027
+ }, 400);
99652
100028
  }
99653
100029
  }); // listener
99654
100030
  }; // addlisteners
@@ -99678,13 +100054,13 @@ function notepad(dom, padDoc, subject, me, options) {
99678
100054
  addListeners(part, chunk);
99679
100055
  } else {
99680
100056
  setPartStyle(part, 'color: #222; background-color: #fff');
99681
- (0,src_debug/* log */.Rm)('Note can\'t add listeners - not logged in');
100057
+ (0,src_debug/* log */.Rm)("Note can't add listeners - not logged in");
99682
100058
  }
99683
100059
  return part;
99684
100060
  };
99685
100061
 
99686
100062
  /* @@ TODO we need to look at indent, it can be a Number or an Object this doesn't seem correct.
99687
- */
100063
+ */
99688
100064
  var _newChunk = function newChunk(ele, before) {
99689
100065
  // element of chunk being split
99690
100066
  var kb = pad_store;
@@ -99809,6 +100185,7 @@ function notepad(dom, padDoc, subject, me, options) {
99809
100185
  var msg = 'Pad: Inconsistent data - NEXT pointers: ' + kb.each(subject, PAD('next')).length;
99810
100186
  (0,src_debug/* log */.Rm)(msg);
99811
100187
  if (options.statusArea) {
100188
+ ;
99812
100189
  options.statusArea.textContent += msg;
99813
100190
  }
99814
100191
  return;
@@ -104553,7 +104930,7 @@ function tabWidget(options) {
104553
104930
  _getColors2 = _slicedToArray(_getColors, 2),
104554
104931
  selectedColor = _getColors2[0],
104555
104932
  color = _getColors2[1];
104556
- var bodyMainStyle = "flex: 2; width: auto; height: 100%; border: 0.1em; border-style: solid; border-color: ".concat(selectedColor, "; padding: 1em;");
104933
+ var bodyMainStyle = "display: grid; width: auto; height: 100%; border: 0.1em; border-style: solid; border-color: ".concat(selectedColor, "; padding: 1em;");
104557
104934
  var rootElement = dom.createElement('div'); // 20200117a
104558
104935
 
104559
104936
  rootElement.setAttribute('style', style.tabsRootElement);
@@ -106505,25 +106882,25 @@ __webpack_require__.r(__webpack_exports__);
106505
106882
  /* harmony export */ __webpack_require__.d(__webpack_exports__, {
106506
106883
  /* harmony export */ Hooks: () => (/* binding */ P),
106507
106884
  /* harmony export */ Lexer: () => (/* binding */ x),
106508
- /* harmony export */ Marked: () => (/* binding */ B),
106885
+ /* harmony export */ Marked: () => (/* binding */ D),
106509
106886
  /* harmony export */ Parser: () => (/* binding */ b),
106510
106887
  /* harmony export */ Renderer: () => (/* binding */ y),
106511
106888
  /* harmony export */ TextRenderer: () => (/* binding */ $),
106512
106889
  /* harmony export */ Tokenizer: () => (/* binding */ w),
106513
106890
  /* harmony export */ defaults: () => (/* binding */ T),
106514
106891
  /* harmony export */ getDefaults: () => (/* binding */ M),
106515
- /* harmony export */ lexer: () => (/* binding */ en),
106892
+ /* harmony export */ lexer: () => (/* binding */ Jt),
106516
106893
  /* harmony export */ marked: () => (/* binding */ g),
106517
- /* harmony export */ options: () => (/* binding */ Ut),
106518
- /* harmony export */ parse: () => (/* binding */ Vt),
106519
- /* harmony export */ parseInline: () => (/* binding */ Jt),
106520
- /* harmony export */ parser: () => (/* binding */ Yt),
106521
- /* harmony export */ setOptions: () => (/* binding */ Kt),
106522
- /* harmony export */ use: () => (/* binding */ Wt),
106523
- /* harmony export */ walkTokens: () => (/* binding */ Xt)
106894
+ /* harmony export */ options: () => (/* binding */ Qt),
106895
+ /* harmony export */ parse: () => (/* binding */ Wt),
106896
+ /* harmony export */ parseInline: () => (/* binding */ Kt),
106897
+ /* harmony export */ parser: () => (/* binding */ Xt),
106898
+ /* harmony export */ setOptions: () => (/* binding */ jt),
106899
+ /* harmony export */ use: () => (/* binding */ Ft),
106900
+ /* harmony export */ walkTokens: () => (/* binding */ Ut)
106524
106901
  /* harmony export */ });
106525
106902
  /**
106526
- * marked v17.0.3 - a markdown parser
106903
+ * marked v17.0.5 - a markdown parser
106527
106904
  * Copyright (c) 2018-2026, MarkedJS. (MIT License)
106528
106905
  * Copyright (c) 2011-2018, Christopher Jeffrey. (MIT License)
106529
106906
  * https://github.com/markedjs/marked
@@ -106534,12 +106911,12 @@ __webpack_require__.r(__webpack_exports__);
106534
106911
  * The code in this file is generated from files in ./src/
106535
106912
  */
106536
106913
 
106537
- function M(){return{async:!1,breaks:!1,extensions:null,gfm:!0,hooks:null,pedantic:!1,renderer:null,silent:!1,tokenizer:null,walkTokens:null}}var T=M();function H(u){T=u}var _={exec:()=>null};function k(u,e=""){let t=typeof u=="string"?u:u.source,n={replace:(r,i)=>{let s=typeof i=="string"?i:i.source;return s=s.replace(m.caret,"$1"),t=t.replace(r,s),n},getRegex:()=>new RegExp(t,e)};return n}var Re=(()=>{try{return!!new RegExp("(?<=1)(?<!1)")}catch{return!1}})(),m={codeRemoveIndent:/^(?: {1,4}| {0,3}\t)/gm,outputLinkReplace:/\\([\[\]])/g,indentCodeCompensation:/^(\s+)(?:```)/,beginningSpace:/^\s+/,endingHash:/#$/,startingSpaceChar:/^ /,endingSpaceChar:/ $/,nonSpaceChar:/[^ ]/,newLineCharGlobal:/\n/g,tabCharGlobal:/\t/g,multipleSpaceGlobal:/\s+/g,blankLine:/^[ \t]*$/,doubleBlankLine:/\n[ \t]*\n[ \t]*$/,blockquoteStart:/^ {0,3}>/,blockquoteSetextReplace:/\n {0,3}((?:=+|-+) *)(?=\n|$)/g,blockquoteSetextReplace2:/^ {0,3}>[ \t]?/gm,listReplaceNesting:/^ {1,4}(?=( {4})*[^ ])/g,listIsTask:/^\[[ xX]\] +\S/,listReplaceTask:/^\[[ xX]\] +/,listTaskCheckbox:/\[[ xX]\]/,anyLine:/\n.*\n/,hrefBrackets:/^<(.*)>$/,tableDelimiter:/[:|]/,tableAlignChars:/^\||\| *$/g,tableRowBlankLine:/\n[ \t]*$/,tableAlignRight:/^ *-+: *$/,tableAlignCenter:/^ *:-+: *$/,tableAlignLeft:/^ *:-+ *$/,startATag:/^<a /i,endATag:/^<\/a>/i,startPreScriptTag:/^<(pre|code|kbd|script)(\s|>)/i,endPreScriptTag:/^<\/(pre|code|kbd|script)(\s|>)/i,startAngleBracket:/^</,endAngleBracket:/>$/,pedanticHrefTitle:/^([^'"]*[^\s])\s+(['"])(.*)\2/,unicodeAlphaNumeric:/[\p{L}\p{N}]/u,escapeTest:/[&<>"']/,escapeReplace:/[&<>"']/g,escapeTestNoEncode:/[<>"']|&(?!(#\d{1,7}|#[Xx][a-fA-F0-9]{1,6}|\w+);)/,escapeReplaceNoEncode:/[<>"']|&(?!(#\d{1,7}|#[Xx][a-fA-F0-9]{1,6}|\w+);)/g,unescapeTest:/&(#(?:\d+)|(?:#x[0-9A-Fa-f]+)|(?:\w+));?/ig,caret:/(^|[^\[])\^/g,percentDecode:/%25/g,findPipe:/\|/g,splitPipe:/ \|/,slashPipe:/\\\|/g,carriageReturn:/\r\n|\r/g,spaceLine:/^ +$/gm,notSpaceStart:/^\S*/,endingNewline:/\n$/,listItemRegex:u=>new RegExp(`^( {0,3}${u})((?:[ ][^\\n]*)?(?:\\n|$))`),nextBulletRegex:u=>new RegExp(`^ {0,${Math.min(3,u-1)}}(?:[*+-]|\\d{1,9}[.)])((?:[ ][^\\n]*)?(?:\\n|$))`),hrRegex:u=>new RegExp(`^ {0,${Math.min(3,u-1)}}((?:- *){3,}|(?:_ *){3,}|(?:\\* *){3,})(?:\\n+|$)`),fencesBeginRegex:u=>new RegExp(`^ {0,${Math.min(3,u-1)}}(?:\`\`\`|~~~)`),headingBeginRegex:u=>new RegExp(`^ {0,${Math.min(3,u-1)}}#`),htmlBeginRegex:u=>new RegExp(`^ {0,${Math.min(3,u-1)}}<(?:[a-z].*>|!--)`,"i"),blockquoteBeginRegex:u=>new RegExp(`^ {0,${Math.min(3,u-1)}}>`)},Te=/^(?:[ \t]*(?:\n|$))+/,Oe=/^((?: {4}| {0,3}\t)[^\n]+(?:\n(?:[ \t]*(?:\n|$))*)?)+/,we=/^ {0,3}(`{3,}(?=[^`\n]*(?:\n|$))|~{3,})([^\n]*)(?:\n|$)(?:|([\s\S]*?)(?:\n|$))(?: {0,3}\1[~`]* *(?=\n|$)|$)/,I=/^ {0,3}((?:-[\t ]*){3,}|(?:_[ \t]*){3,}|(?:\*[ \t]*){3,})(?:\n+|$)/,ye=/^ {0,3}(#{1,6})(?=\s|$)(.*)(?:\n+|$)/,N=/ {0,3}(?:[*+-]|\d{1,9}[.)])/,re=/^(?!bull |blockCode|fences|blockquote|heading|html|table)((?:.|\n(?!\s*?\n|bull |blockCode|fences|blockquote|heading|html|table))+?)\n {0,3}(=+|-+) *(?:\n+|$)/,se=k(re).replace(/bull/g,N).replace(/blockCode/g,/(?: {4}| {0,3}\t)/).replace(/fences/g,/ {0,3}(?:`{3,}|~{3,})/).replace(/blockquote/g,/ {0,3}>/).replace(/heading/g,/ {0,3}#{1,6}/).replace(/html/g,/ {0,3}<[^\n>]+>\n/).replace(/\|table/g,"").getRegex(),Pe=k(re).replace(/bull/g,N).replace(/blockCode/g,/(?: {4}| {0,3}\t)/).replace(/fences/g,/ {0,3}(?:`{3,}|~{3,})/).replace(/blockquote/g,/ {0,3}>/).replace(/heading/g,/ {0,3}#{1,6}/).replace(/html/g,/ {0,3}<[^\n>]+>\n/).replace(/table/g,/ {0,3}\|?(?:[:\- ]*\|)+[\:\- ]*\n/).getRegex(),Q=/^([^\n]+(?:\n(?!hr|heading|lheading|blockquote|fences|list|html|table| +\n)[^\n]+)*)/,Se=/^[^\n]+/,F=/(?!\s*\])(?:\\[\s\S]|[^\[\]\\])+/,$e=k(/^ {0,3}\[(label)\]: *(?:\n[ \t]*)?([^<\s][^\s]*|<.*?>)(?:(?: +(?:\n[ \t]*)?| *\n[ \t]*)(title))? *(?:\n+|$)/).replace("label",F).replace("title",/(?:"(?:\\"?|[^"\\])*"|'[^'\n]*(?:\n[^'\n]+)*\n?'|\([^()]*\))/).getRegex(),_e=k(/^(bull)([ \t][^\n]+?)?(?:\n|$)/).replace(/bull/g,N).getRegex(),q="address|article|aside|base|basefont|blockquote|body|caption|center|col|colgroup|dd|details|dialog|dir|div|dl|dt|fieldset|figcaption|figure|footer|form|frame|frameset|h[1-6]|head|header|hr|html|iframe|legend|li|link|main|menu|menuitem|meta|nav|noframes|ol|optgroup|option|p|param|search|section|summary|table|tbody|td|tfoot|th|thead|title|tr|track|ul",j=/<!--(?:-?>|[\s\S]*?(?:-->|$))/,Le=k("^ {0,3}(?:<(script|pre|style|textarea)[\\s>][\\s\\S]*?(?:</\\1>[^\\n]*\\n+|$)|comment[^\\n]*(\\n+|$)|<\\?[\\s\\S]*?(?:\\?>\\n*|$)|<![A-Z][\\s\\S]*?(?:>\\n*|$)|<!\\[CDATA\\[[\\s\\S]*?(?:\\]\\]>\\n*|$)|</?(tag)(?: +|\\n|/?>)[\\s\\S]*?(?:(?:\\n[ ]*)+\\n|$)|<(?!script|pre|style|textarea)([a-z][\\w-]*)(?:attribute)*? */?>(?=[ \\t]*(?:\\n|$))[\\s\\S]*?(?:(?:\\n[ ]*)+\\n|$)|</(?!script|pre|style|textarea)[a-z][\\w-]*\\s*>(?=[ \\t]*(?:\\n|$))[\\s\\S]*?(?:(?:\\n[ ]*)+\\n|$))","i").replace("comment",j).replace("tag",q).replace("attribute",/ +[a-zA-Z:_][\w.:-]*(?: *= *"[^"\n]*"| *= *'[^'\n]*'| *= *[^\s"'=<>`]+)?/).getRegex(),ie=k(Q).replace("hr",I).replace("heading"," {0,3}#{1,6}(?:\\s|$)").replace("|lheading","").replace("|table","").replace("blockquote"," {0,3}>").replace("fences"," {0,3}(?:`{3,}(?=[^`\\n]*\\n)|~{3,})[^\\n]*\\n").replace("list"," {0,3}(?:[*+-]|1[.)])[ \\t]").replace("html","</?(?:tag)(?: +|\\n|/?>)|<(?:script|pre|style|textarea|!--)").replace("tag",q).getRegex(),Me=k(/^( {0,3}> ?(paragraph|[^\n]*)(?:\n|$))+/).replace("paragraph",ie).getRegex(),U={blockquote:Me,code:Oe,def:$e,fences:we,heading:ye,hr:I,html:Le,lheading:se,list:_e,newline:Te,paragraph:ie,table:_,text:Se},te=k("^ *([^\\n ].*)\\n {0,3}((?:\\| *)?:?-+:? *(?:\\| *:?-+:? *)*(?:\\| *)?)(?:\\n((?:(?! *\\n|hr|heading|blockquote|code|fences|list|html).*(?:\\n|$))*)\\n*|$)").replace("hr",I).replace("heading"," {0,3}#{1,6}(?:\\s|$)").replace("blockquote"," {0,3}>").replace("code","(?: {4}| {0,3} )[^\\n]").replace("fences"," {0,3}(?:`{3,}(?=[^`\\n]*\\n)|~{3,})[^\\n]*\\n").replace("list"," {0,3}(?:[*+-]|1[.)])[ \\t]").replace("html","</?(?:tag)(?: +|\\n|/?>)|<(?:script|pre|style|textarea|!--)").replace("tag",q).getRegex(),ze={...U,lheading:Pe,table:te,paragraph:k(Q).replace("hr",I).replace("heading"," {0,3}#{1,6}(?:\\s|$)").replace("|lheading","").replace("table",te).replace("blockquote"," {0,3}>").replace("fences"," {0,3}(?:`{3,}(?=[^`\\n]*\\n)|~{3,})[^\\n]*\\n").replace("list"," {0,3}(?:[*+-]|1[.)])[ \\t]").replace("html","</?(?:tag)(?: +|\\n|/?>)|<(?:script|pre|style|textarea|!--)").replace("tag",q).getRegex()},Ce={...U,html:k(`^ *(?:comment *(?:\\n|\\s*$)|<(tag)[\\s\\S]+?</\\1> *(?:\\n{2,}|\\s*$)|<tag(?:"[^"]*"|'[^']*'|\\s[^'"/>\\s]*)*?/?> *(?:\\n{2,}|\\s*$))`).replace("comment",j).replace(/tag/g,"(?!(?:a|em|strong|small|s|cite|q|dfn|abbr|data|time|code|var|samp|kbd|sub|sup|i|b|u|mark|ruby|rt|rp|bdi|bdo|span|br|wbr|ins|del|img)\\b)\\w+(?!:|[^\\w\\s@]*@)\\b").getRegex(),def:/^ *\[([^\]]+)\]: *<?([^\s>]+)>?(?: +(["(][^\n]+[")]))? *(?:\n+|$)/,heading:/^(#{1,6})(.*)(?:\n+|$)/,fences:_,lheading:/^(.+?)\n {0,3}(=+|-+) *(?:\n+|$)/,paragraph:k(Q).replace("hr",I).replace("heading",` *#{1,6} *[^
106538
- ]`).replace("lheading",se).replace("|table","").replace("blockquote"," {0,3}>").replace("|fences","").replace("|list","").replace("|html","").replace("|tag","").getRegex()},Ae=/^\\([!"#$%&'()*+,\-./:;<=>?@\[\]\\^_`{|}~])/,Ie=/^(`+)([^`]|[^`][\s\S]*?[^`])\1(?!`)/,oe=/^( {2,}|\\)\n(?!\s*$)/,Ee=/^(`+|[^`])(?:(?= {2,}\n)|[\s\S]*?(?:(?=[\\<!\[`*_]|\b_|$)|[^ ](?= {2,}\n)))/,v=/[\p{P}\p{S}]/u,K=/[\s\p{P}\p{S}]/u,ae=/[^\s\p{P}\p{S}]/u,Be=k(/^((?![*_])punctSpace)/,"u").replace(/punctSpace/g,K).getRegex(),le=/(?!~)[\p{P}\p{S}]/u,De=/(?!~)[\s\p{P}\p{S}]/u,qe=/(?:[^\s\p{P}\p{S}]|~)/u,ue=/(?![*_])[\p{P}\p{S}]/u,ve=/(?![*_])[\s\p{P}\p{S}]/u,Ge=/(?:[^\s\p{P}\p{S}]|[*_])/u,He=k(/link|precode-code|html/,"g").replace("link",/\[(?:[^\[\]`]|(?<a>`+)[^`]+\k<a>(?!`))*?\]\((?:\\[\s\S]|[^\\\(\)]|\((?:\\[\s\S]|[^\\\(\)])*\))*\)/).replace("precode-",Re?"(?<!`)()":"(^^|[^`])").replace("code",/(?<b>`+)[^`]+\k<b>(?!`)/).replace("html",/<(?! )[^<>]*?>/).getRegex(),pe=/^(?:\*+(?:((?!\*)punct)|[^\s*]))|^_+(?:((?!_)punct)|([^\s_]))/,Ze=k(pe,"u").replace(/punct/g,v).getRegex(),Ne=k(pe,"u").replace(/punct/g,le).getRegex(),ce="^[^_*]*?__[^_*]*?\\*[^_*]*?(?=__)|[^*]+(?=[^*])|(?!\\*)punct(\\*+)(?=[\\s]|$)|notPunctSpace(\\*+)(?!\\*)(?=punctSpace|$)|(?!\\*)punctSpace(\\*+)(?=notPunctSpace)|[\\s](\\*+)(?!\\*)(?=punct)|(?!\\*)punct(\\*+)(?!\\*)(?=punct)|notPunctSpace(\\*+)(?=notPunctSpace)",Qe=k(ce,"gu").replace(/notPunctSpace/g,ae).replace(/punctSpace/g,K).replace(/punct/g,v).getRegex(),Fe=k(ce,"gu").replace(/notPunctSpace/g,qe).replace(/punctSpace/g,De).replace(/punct/g,le).getRegex(),je=k("^[^_*]*?\\*\\*[^_*]*?_[^_*]*?(?=\\*\\*)|[^_]+(?=[^_])|(?!_)punct(_+)(?=[\\s]|$)|notPunctSpace(_+)(?!_)(?=punctSpace|$)|(?!_)punctSpace(_+)(?=notPunctSpace)|[\\s](_+)(?!_)(?=punct)|(?!_)punct(_+)(?!_)(?=punct)","gu").replace(/notPunctSpace/g,ae).replace(/punctSpace/g,K).replace(/punct/g,v).getRegex(),Ue=k(/^~~?(?:((?!~)punct)|[^\s~])/,"u").replace(/punct/g,ue).getRegex(),Ke="^[^~]+(?=[^~])|(?!~)punct(~~?)(?=[\\s]|$)|notPunctSpace(~~?)(?!~)(?=punctSpace|$)|(?!~)punctSpace(~~?)(?=notPunctSpace)|[\\s](~~?)(?!~)(?=punct)|(?!~)punct(~~?)(?!~)(?=punct)|notPunctSpace(~~?)(?=notPunctSpace)",We=k(Ke,"gu").replace(/notPunctSpace/g,Ge).replace(/punctSpace/g,ve).replace(/punct/g,ue).getRegex(),Xe=k(/\\(punct)/,"gu").replace(/punct/g,v).getRegex(),Je=k(/^<(scheme:[^\s\x00-\x1f<>]*|email)>/).replace("scheme",/[a-zA-Z][a-zA-Z0-9+.-]{1,31}/).replace("email",/[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+(@)[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)+(?![-_])/).getRegex(),Ve=k(j).replace("(?:-->|$)","-->").getRegex(),Ye=k("^comment|^</[a-zA-Z][\\w:-]*\\s*>|^<[a-zA-Z][\\w-]*(?:attribute)*?\\s*/?>|^<\\?[\\s\\S]*?\\?>|^<![a-zA-Z]+\\s[\\s\\S]*?>|^<!\\[CDATA\\[[\\s\\S]*?\\]\\]>").replace("comment",Ve).replace("attribute",/\s+[a-zA-Z:_][\w.:-]*(?:\s*=\s*"[^"]*"|\s*=\s*'[^']*'|\s*=\s*[^\s"'=<>`]+)?/).getRegex(),D=/(?:\[(?:\\[\s\S]|[^\[\]\\])*\]|\\[\s\S]|`+[^`]*?`+(?!`)|[^\[\]\\`])*?/,et=k(/^!?\[(label)\]\(\s*(href)(?:(?:[ \t]*(?:\n[ \t]*)?)(title))?\s*\)/).replace("label",D).replace("href",/<(?:\\.|[^\n<>\\])+>|[^ \t\n\x00-\x1f]*/).replace("title",/"(?:\\"?|[^"\\])*"|'(?:\\'?|[^'\\])*'|\((?:\\\)?|[^)\\])*\)/).getRegex(),he=k(/^!?\[(label)\]\[(ref)\]/).replace("label",D).replace("ref",F).getRegex(),ke=k(/^!?\[(ref)\](?:\[\])?/).replace("ref",F).getRegex(),tt=k("reflink|nolink(?!\\()","g").replace("reflink",he).replace("nolink",ke).getRegex(),ne=/[hH][tT][tT][pP][sS]?|[fF][tT][pP]/,W={_backpedal:_,anyPunctuation:Xe,autolink:Je,blockSkip:He,br:oe,code:Ie,del:_,delLDelim:_,delRDelim:_,emStrongLDelim:Ze,emStrongRDelimAst:Qe,emStrongRDelimUnd:je,escape:Ae,link:et,nolink:ke,punctuation:Be,reflink:he,reflinkSearch:tt,tag:Ye,text:Ee,url:_},nt={...W,link:k(/^!?\[(label)\]\((.*?)\)/).replace("label",D).getRegex(),reflink:k(/^!?\[(label)\]\s*\[([^\]]*)\]/).replace("label",D).getRegex()},Z={...W,emStrongRDelimAst:Fe,emStrongLDelim:Ne,delLDelim:Ue,delRDelim:We,url:k(/^((?:protocol):\/\/|www\.)(?:[a-zA-Z0-9\-]+\.?)+[^\s<]*|^email/).replace("protocol",ne).replace("email",/[A-Za-z0-9._+-]+(@)[a-zA-Z0-9-_]+(?:\.[a-zA-Z0-9-_]*[a-zA-Z0-9])+(?![-_])/).getRegex(),_backpedal:/(?:[^?!.,:;*_'"~()&]+|\([^)]*\)|&(?![a-zA-Z0-9]+;$)|[?!.,:;*_'"~)]+(?!$))+/,del:/^(~~?)(?=[^\s~])((?:\\[\s\S]|[^\\])*?(?:\\[\s\S]|[^\s~\\]))\1(?=[^~]|$)/,text:k(/^([`~]+|[^`~])(?:(?= {2,}\n)|(?=[a-zA-Z0-9.!#$%&'*+\/=?_`{\|}~-]+@)|[\s\S]*?(?:(?=[\\<!\[`*~_]|\b_|protocol:\/\/|www\.|$)|[^ ](?= {2,}\n)|[^a-zA-Z0-9.!#$%&'*+\/=?_`{\|}~-](?=[a-zA-Z0-9.!#$%&'*+\/=?_`{\|}~-]+@)))/).replace("protocol",ne).getRegex()},rt={...Z,br:k(oe).replace("{2,}","*").getRegex(),text:k(Z.text).replace("\\b_","\\b_| {2,}\\n").replace(/\{2,\}/g,"*").getRegex()},E={normal:U,gfm:ze,pedantic:Ce},z={normal:W,gfm:Z,breaks:rt,pedantic:nt};var st={"&":"&amp;","<":"&lt;",">":"&gt;",'"':"&quot;","'":"&#39;"},de=u=>st[u];function O(u,e){if(e){if(m.escapeTest.test(u))return u.replace(m.escapeReplace,de)}else if(m.escapeTestNoEncode.test(u))return u.replace(m.escapeReplaceNoEncode,de);return u}function X(u){try{u=encodeURI(u).replace(m.percentDecode,"%")}catch{return null}return u}function J(u,e){let t=u.replace(m.findPipe,(i,s,a)=>{let o=!1,l=s;for(;--l>=0&&a[l]==="\\";)o=!o;return o?"|":" |"}),n=t.split(m.splitPipe),r=0;if(n[0].trim()||n.shift(),n.length>0&&!n.at(-1)?.trim()&&n.pop(),e)if(n.length>e)n.splice(e);else for(;n.length<e;)n.push("");for(;r<n.length;r++)n[r]=n[r].trim().replace(m.slashPipe,"|");return n}function C(u,e,t){let n=u.length;if(n===0)return"";let r=0;for(;r<n;){let i=u.charAt(n-r-1);if(i===e&&!t)r++;else if(i!==e&&t)r++;else break}return u.slice(0,n-r)}function ge(u,e){if(u.indexOf(e[1])===-1)return-1;let t=0;for(let n=0;n<u.length;n++)if(u[n]==="\\")n++;else if(u[n]===e[0])t++;else if(u[n]===e[1]&&(t--,t<0))return n;return t>0?-2:-1}function fe(u,e=0){let t=e,n="";for(let r of u)if(r===" "){let i=4-t%4;n+=" ".repeat(i),t+=i}else n+=r,t++;return n}function me(u,e,t,n,r){let i=e.href,s=e.title||null,a=u[1].replace(r.other.outputLinkReplace,"$1");n.state.inLink=!0;let o={type:u[0].charAt(0)==="!"?"image":"link",raw:t,href:i,title:s,text:a,tokens:n.inlineTokens(a)};return n.state.inLink=!1,o}function it(u,e,t){let n=u.match(t.other.indentCodeCompensation);if(n===null)return e;let r=n[1];return e.split(`
106914
+ function M(){return{async:!1,breaks:!1,extensions:null,gfm:!0,hooks:null,pedantic:!1,renderer:null,silent:!1,tokenizer:null,walkTokens:null}}var T=M();function G(u){T=u}var _={exec:()=>null};function k(u,e=""){let t=typeof u=="string"?u:u.source,n={replace:(r,i)=>{let s=typeof i=="string"?i:i.source;return s=s.replace(m.caret,"$1"),t=t.replace(r,s),n},getRegex:()=>new RegExp(t,e)};return n}var be=(()=>{try{return!!new RegExp("(?<=1)(?<!1)")}catch{return!1}})(),m={codeRemoveIndent:/^(?: {1,4}| {0,3}\t)/gm,outputLinkReplace:/\\([\[\]])/g,indentCodeCompensation:/^(\s+)(?:```)/,beginningSpace:/^\s+/,endingHash:/#$/,startingSpaceChar:/^ /,endingSpaceChar:/ $/,nonSpaceChar:/[^ ]/,newLineCharGlobal:/\n/g,tabCharGlobal:/\t/g,multipleSpaceGlobal:/\s+/g,blankLine:/^[ \t]*$/,doubleBlankLine:/\n[ \t]*\n[ \t]*$/,blockquoteStart:/^ {0,3}>/,blockquoteSetextReplace:/\n {0,3}((?:=+|-+) *)(?=\n|$)/g,blockquoteSetextReplace2:/^ {0,3}>[ \t]?/gm,listReplaceNesting:/^ {1,4}(?=( {4})*[^ ])/g,listIsTask:/^\[[ xX]\] +\S/,listReplaceTask:/^\[[ xX]\] +/,listTaskCheckbox:/\[[ xX]\]/,anyLine:/\n.*\n/,hrefBrackets:/^<(.*)>$/,tableDelimiter:/[:|]/,tableAlignChars:/^\||\| *$/g,tableRowBlankLine:/\n[ \t]*$/,tableAlignRight:/^ *-+: *$/,tableAlignCenter:/^ *:-+: *$/,tableAlignLeft:/^ *:-+ *$/,startATag:/^<a /i,endATag:/^<\/a>/i,startPreScriptTag:/^<(pre|code|kbd|script)(\s|>)/i,endPreScriptTag:/^<\/(pre|code|kbd|script)(\s|>)/i,startAngleBracket:/^</,endAngleBracket:/>$/,pedanticHrefTitle:/^([^'"]*[^\s])\s+(['"])(.*)\2/,unicodeAlphaNumeric:/[\p{L}\p{N}]/u,escapeTest:/[&<>"']/,escapeReplace:/[&<>"']/g,escapeTestNoEncode:/[<>"']|&(?!(#\d{1,7}|#[Xx][a-fA-F0-9]{1,6}|\w+);)/,escapeReplaceNoEncode:/[<>"']|&(?!(#\d{1,7}|#[Xx][a-fA-F0-9]{1,6}|\w+);)/g,caret:/(^|[^\[])\^/g,percentDecode:/%25/g,findPipe:/\|/g,splitPipe:/ \|/,slashPipe:/\\\|/g,carriageReturn:/\r\n|\r/g,spaceLine:/^ +$/gm,notSpaceStart:/^\S*/,endingNewline:/\n$/,listItemRegex:u=>new RegExp(`^( {0,3}${u})((?:[ ][^\\n]*)?(?:\\n|$))`),nextBulletRegex:u=>new RegExp(`^ {0,${Math.min(3,u-1)}}(?:[*+-]|\\d{1,9}[.)])((?:[ ][^\\n]*)?(?:\\n|$))`),hrRegex:u=>new RegExp(`^ {0,${Math.min(3,u-1)}}((?:- *){3,}|(?:_ *){3,}|(?:\\* *){3,})(?:\\n+|$)`),fencesBeginRegex:u=>new RegExp(`^ {0,${Math.min(3,u-1)}}(?:\`\`\`|~~~)`),headingBeginRegex:u=>new RegExp(`^ {0,${Math.min(3,u-1)}}#`),htmlBeginRegex:u=>new RegExp(`^ {0,${Math.min(3,u-1)}}<(?:[a-z].*>|!--)`,"i"),blockquoteBeginRegex:u=>new RegExp(`^ {0,${Math.min(3,u-1)}}>`)},Re=/^(?:[ \t]*(?:\n|$))+/,Te=/^((?: {4}| {0,3}\t)[^\n]+(?:\n(?:[ \t]*(?:\n|$))*)?)+/,Oe=/^ {0,3}(`{3,}(?=[^`\n]*(?:\n|$))|~{3,})([^\n]*)(?:\n|$)(?:|([\s\S]*?)(?:\n|$))(?: {0,3}\1[~`]* *(?=\n|$)|$)/,C=/^ {0,3}((?:-[\t ]*){3,}|(?:_[ \t]*){3,}|(?:\*[ \t]*){3,})(?:\n+|$)/,we=/^ {0,3}(#{1,6})(?=\s|$)(.*)(?:\n+|$)/,Q=/ {0,3}(?:[*+-]|\d{1,9}[.)])/,se=/^(?!bull |blockCode|fences|blockquote|heading|html|table)((?:.|\n(?!\s*?\n|bull |blockCode|fences|blockquote|heading|html|table))+?)\n {0,3}(=+|-+) *(?:\n+|$)/,ie=k(se).replace(/bull/g,Q).replace(/blockCode/g,/(?: {4}| {0,3}\t)/).replace(/fences/g,/ {0,3}(?:`{3,}|~{3,})/).replace(/blockquote/g,/ {0,3}>/).replace(/heading/g,/ {0,3}#{1,6}/).replace(/html/g,/ {0,3}<[^\n>]+>\n/).replace(/\|table/g,"").getRegex(),ye=k(se).replace(/bull/g,Q).replace(/blockCode/g,/(?: {4}| {0,3}\t)/).replace(/fences/g,/ {0,3}(?:`{3,}|~{3,})/).replace(/blockquote/g,/ {0,3}>/).replace(/heading/g,/ {0,3}#{1,6}/).replace(/html/g,/ {0,3}<[^\n>]+>\n/).replace(/table/g,/ {0,3}\|?(?:[:\- ]*\|)+[\:\- ]*\n/).getRegex(),j=/^([^\n]+(?:\n(?!hr|heading|lheading|blockquote|fences|list|html|table| +\n)[^\n]+)*)/,Pe=/^[^\n]+/,F=/(?!\s*\])(?:\\[\s\S]|[^\[\]\\])+/,Se=k(/^ {0,3}\[(label)\]: *(?:\n[ \t]*)?([^<\s][^\s]*|<.*?>)(?:(?: +(?:\n[ \t]*)?| *\n[ \t]*)(title))? *(?:\n+|$)/).replace("label",F).replace("title",/(?:"(?:\\"?|[^"\\])*"|'[^'\n]*(?:\n[^'\n]+)*\n?'|\([^()]*\))/).getRegex(),$e=k(/^(bull)([ \t][^\n]+?)?(?:\n|$)/).replace(/bull/g,Q).getRegex(),v="address|article|aside|base|basefont|blockquote|body|caption|center|col|colgroup|dd|details|dialog|dir|div|dl|dt|fieldset|figcaption|figure|footer|form|frame|frameset|h[1-6]|head|header|hr|html|iframe|legend|li|link|main|menu|menuitem|meta|nav|noframes|ol|optgroup|option|p|param|search|section|summary|table|tbody|td|tfoot|th|thead|title|tr|track|ul",U=/<!--(?:-?>|[\s\S]*?(?:-->|$))/,_e=k("^ {0,3}(?:<(script|pre|style|textarea)[\\s>][\\s\\S]*?(?:</\\1>[^\\n]*\\n+|$)|comment[^\\n]*(\\n+|$)|<\\?[\\s\\S]*?(?:\\?>\\n*|$)|<![A-Z][\\s\\S]*?(?:>\\n*|$)|<!\\[CDATA\\[[\\s\\S]*?(?:\\]\\]>\\n*|$)|</?(tag)(?: +|\\n|/?>)[\\s\\S]*?(?:(?:\\n[ ]*)+\\n|$)|<(?!script|pre|style|textarea)([a-z][\\w-]*)(?:attribute)*? */?>(?=[ \\t]*(?:\\n|$))[\\s\\S]*?(?:(?:\\n[ ]*)+\\n|$)|</(?!script|pre|style|textarea)[a-z][\\w-]*\\s*>(?=[ \\t]*(?:\\n|$))[\\s\\S]*?(?:(?:\\n[ ]*)+\\n|$))","i").replace("comment",U).replace("tag",v).replace("attribute",/ +[a-zA-Z:_][\w.:-]*(?: *= *"[^"\n]*"| *= *'[^'\n]*'| *= *[^\s"'=<>`]+)?/).getRegex(),oe=k(j).replace("hr",C).replace("heading"," {0,3}#{1,6}(?:\\s|$)").replace("|lheading","").replace("|table","").replace("blockquote"," {0,3}>").replace("fences"," {0,3}(?:`{3,}(?=[^`\\n]*\\n)|~{3,})[^\\n]*\\n").replace("list"," {0,3}(?:[*+-]|1[.)])[ \\t]").replace("html","</?(?:tag)(?: +|\\n|/?>)|<(?:script|pre|style|textarea|!--)").replace("tag",v).getRegex(),Le=k(/^( {0,3}> ?(paragraph|[^\n]*)(?:\n|$))+/).replace("paragraph",oe).getRegex(),K={blockquote:Le,code:Te,def:Se,fences:Oe,heading:we,hr:C,html:_e,lheading:ie,list:$e,newline:Re,paragraph:oe,table:_,text:Pe},ne=k("^ *([^\\n ].*)\\n {0,3}((?:\\| *)?:?-+:? *(?:\\| *:?-+:? *)*(?:\\| *)?)(?:\\n((?:(?! *\\n|hr|heading|blockquote|code|fences|list|html).*(?:\\n|$))*)\\n*|$)").replace("hr",C).replace("heading"," {0,3}#{1,6}(?:\\s|$)").replace("blockquote"," {0,3}>").replace("code","(?: {4}| {0,3} )[^\\n]").replace("fences"," {0,3}(?:`{3,}(?=[^`\\n]*\\n)|~{3,})[^\\n]*\\n").replace("list"," {0,3}(?:[*+-]|1[.)])[ \\t]").replace("html","</?(?:tag)(?: +|\\n|/?>)|<(?:script|pre|style|textarea|!--)").replace("tag",v).getRegex(),Me={...K,lheading:ye,table:ne,paragraph:k(j).replace("hr",C).replace("heading"," {0,3}#{1,6}(?:\\s|$)").replace("|lheading","").replace("table",ne).replace("blockquote"," {0,3}>").replace("fences"," {0,3}(?:`{3,}(?=[^`\\n]*\\n)|~{3,})[^\\n]*\\n").replace("list"," {0,3}(?:[*+-]|1[.)])[ \\t]").replace("html","</?(?:tag)(?: +|\\n|/?>)|<(?:script|pre|style|textarea|!--)").replace("tag",v).getRegex()},ze={...K,html:k(`^ *(?:comment *(?:\\n|\\s*$)|<(tag)[\\s\\S]+?</\\1> *(?:\\n{2,}|\\s*$)|<tag(?:"[^"]*"|'[^']*'|\\s[^'"/>\\s]*)*?/?> *(?:\\n{2,}|\\s*$))`).replace("comment",U).replace(/tag/g,"(?!(?:a|em|strong|small|s|cite|q|dfn|abbr|data|time|code|var|samp|kbd|sub|sup|i|b|u|mark|ruby|rt|rp|bdi|bdo|span|br|wbr|ins|del|img)\\b)\\w+(?!:|[^\\w\\s@]*@)\\b").getRegex(),def:/^ *\[([^\]]+)\]: *<?([^\s>]+)>?(?: +(["(][^\n]+[")]))? *(?:\n+|$)/,heading:/^(#{1,6})(.*)(?:\n+|$)/,fences:_,lheading:/^(.+?)\n {0,3}(=+|-+) *(?:\n+|$)/,paragraph:k(j).replace("hr",C).replace("heading",` *#{1,6} *[^
106915
+ ]`).replace("lheading",ie).replace("|table","").replace("blockquote"," {0,3}>").replace("|fences","").replace("|list","").replace("|html","").replace("|tag","").getRegex()},Ee=/^\\([!"#$%&'()*+,\-./:;<=>?@\[\]\\^_`{|}~])/,Ie=/^(`+)([^`]|[^`][\s\S]*?[^`])\1(?!`)/,ae=/^( {2,}|\\)\n(?!\s*$)/,Ae=/^(`+|[^`])(?:(?= {2,}\n)|[\s\S]*?(?:(?=[\\<!\[`*_]|\b_|$)|[^ ](?= {2,}\n)))/,z=/[\p{P}\p{S}]/u,H=/[\s\p{P}\p{S}]/u,W=/[^\s\p{P}\p{S}]/u,Ce=k(/^((?![*_])punctSpace)/,"u").replace(/punctSpace/g,H).getRegex(),le=/(?!~)[\p{P}\p{S}]/u,Be=/(?!~)[\s\p{P}\p{S}]/u,De=/(?:[^\s\p{P}\p{S}]|~)/u,qe=k(/link|precode-code|html/,"g").replace("link",/\[(?:[^\[\]`]|(?<a>`+)[^`]+\k<a>(?!`))*?\]\((?:\\[\s\S]|[^\\\(\)]|\((?:\\[\s\S]|[^\\\(\)])*\))*\)/).replace("precode-",be?"(?<!`)()":"(^^|[^`])").replace("code",/(?<b>`+)[^`]+\k<b>(?!`)/).replace("html",/<(?! )[^<>]*?>/).getRegex(),ue=/^(?:\*+(?:((?!\*)punct)|([^\s*]))?)|^_+(?:((?!_)punct)|([^\s_]))?/,ve=k(ue,"u").replace(/punct/g,z).getRegex(),He=k(ue,"u").replace(/punct/g,le).getRegex(),pe="^[^_*]*?__[^_*]*?\\*[^_*]*?(?=__)|[^*]+(?=[^*])|(?!\\*)punct(\\*+)(?=[\\s]|$)|notPunctSpace(\\*+)(?!\\*)(?=punctSpace|$)|(?!\\*)punctSpace(\\*+)(?=notPunctSpace)|[\\s](\\*+)(?!\\*)(?=punct)|(?!\\*)punct(\\*+)(?!\\*)(?=punct)|notPunctSpace(\\*+)(?=notPunctSpace)",Ze=k(pe,"gu").replace(/notPunctSpace/g,W).replace(/punctSpace/g,H).replace(/punct/g,z).getRegex(),Ge=k(pe,"gu").replace(/notPunctSpace/g,De).replace(/punctSpace/g,Be).replace(/punct/g,le).getRegex(),Ne=k("^[^_*]*?\\*\\*[^_*]*?_[^_*]*?(?=\\*\\*)|[^_]+(?=[^_])|(?!_)punct(_+)(?=[\\s]|$)|notPunctSpace(_+)(?!_)(?=punctSpace|$)|(?!_)punctSpace(_+)(?=notPunctSpace)|[\\s](_+)(?!_)(?=punct)|(?!_)punct(_+)(?!_)(?=punct)","gu").replace(/notPunctSpace/g,W).replace(/punctSpace/g,H).replace(/punct/g,z).getRegex(),Qe=k(/^~~?(?:((?!~)punct)|[^\s~])/,"u").replace(/punct/g,z).getRegex(),je="^[^~]+(?=[^~])|(?!~)punct(~~?)(?=[\\s]|$)|notPunctSpace(~~?)(?!~)(?=punctSpace|$)|(?!~)punctSpace(~~?)(?=notPunctSpace)|[\\s](~~?)(?!~)(?=punct)|(?!~)punct(~~?)(?!~)(?=punct)|notPunctSpace(~~?)(?=notPunctSpace)",Fe=k(je,"gu").replace(/notPunctSpace/g,W).replace(/punctSpace/g,H).replace(/punct/g,z).getRegex(),Ue=k(/\\(punct)/,"gu").replace(/punct/g,z).getRegex(),Ke=k(/^<(scheme:[^\s\x00-\x1f<>]*|email)>/).replace("scheme",/[a-zA-Z][a-zA-Z0-9+.-]{1,31}/).replace("email",/[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+(@)[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)+(?![-_])/).getRegex(),We=k(U).replace("(?:-->|$)","-->").getRegex(),Xe=k("^comment|^</[a-zA-Z][\\w:-]*\\s*>|^<[a-zA-Z][\\w-]*(?:attribute)*?\\s*/?>|^<\\?[\\s\\S]*?\\?>|^<![a-zA-Z]+\\s[\\s\\S]*?>|^<!\\[CDATA\\[[\\s\\S]*?\\]\\]>").replace("comment",We).replace("attribute",/\s+[a-zA-Z:_][\w.:-]*(?:\s*=\s*"[^"]*"|\s*=\s*'[^']*'|\s*=\s*[^\s"'=<>`]+)?/).getRegex(),q=/(?:\[(?:\\[\s\S]|[^\[\]\\])*\]|\\[\s\S]|`+(?!`)[^`]*?`+(?!`)|``+(?=\])|[^\[\]\\`])*?/,Je=k(/^!?\[(label)\]\(\s*(href)(?:(?:[ \t]+(?:\n[ \t]*)?|\n[ \t]*)(title))?\s*\)/).replace("label",q).replace("href",/<(?:\\.|[^\n<>\\])+>|[^ \t\n\x00-\x1f]*/).replace("title",/"(?:\\"?|[^"\\])*"|'(?:\\'?|[^'\\])*'|\((?:\\\)?|[^)\\])*\)/).getRegex(),ce=k(/^!?\[(label)\]\[(ref)\]/).replace("label",q).replace("ref",F).getRegex(),he=k(/^!?\[(ref)\](?:\[\])?/).replace("ref",F).getRegex(),Ve=k("reflink|nolink(?!\\()","g").replace("reflink",ce).replace("nolink",he).getRegex(),re=/[hH][tT][tT][pP][sS]?|[fF][tT][pP]/,X={_backpedal:_,anyPunctuation:Ue,autolink:Ke,blockSkip:qe,br:ae,code:Ie,del:_,delLDelim:_,delRDelim:_,emStrongLDelim:ve,emStrongRDelimAst:Ze,emStrongRDelimUnd:Ne,escape:Ee,link:Je,nolink:he,punctuation:Ce,reflink:ce,reflinkSearch:Ve,tag:Xe,text:Ae,url:_},Ye={...X,link:k(/^!?\[(label)\]\((.*?)\)/).replace("label",q).getRegex(),reflink:k(/^!?\[(label)\]\s*\[([^\]]*)\]/).replace("label",q).getRegex()},N={...X,emStrongRDelimAst:Ge,emStrongLDelim:He,delLDelim:Qe,delRDelim:Fe,url:k(/^((?:protocol):\/\/|www\.)(?:[a-zA-Z0-9\-]+\.?)+[^\s<]*|^email/).replace("protocol",re).replace("email",/[A-Za-z0-9._+-]+(@)[a-zA-Z0-9-_]+(?:\.[a-zA-Z0-9-_]*[a-zA-Z0-9])+(?![-_])/).getRegex(),_backpedal:/(?:[^?!.,:;*_'"~()&]+|\([^)]*\)|&(?![a-zA-Z0-9]+;$)|[?!.,:;*_'"~)]+(?!$))+/,del:/^(~~?)(?=[^\s~])((?:\\[\s\S]|[^\\])*?(?:\\[\s\S]|[^\s~\\]))\1(?=[^~]|$)/,text:k(/^([`~]+|[^`~])(?:(?= {2,}\n)|(?=[a-zA-Z0-9.!#$%&'*+\/=?_`{\|}~-]+@)|[\s\S]*?(?:(?=[\\<!\[`*~_]|\b_|protocol:\/\/|www\.|$)|[^ ](?= {2,}\n)|[^a-zA-Z0-9.!#$%&'*+\/=?_`{\|}~-](?=[a-zA-Z0-9.!#$%&'*+\/=?_`{\|}~-]+@)))/).replace("protocol",re).getRegex()},et={...N,br:k(ae).replace("{2,}","*").getRegex(),text:k(N.text).replace("\\b_","\\b_| {2,}\\n").replace(/\{2,\}/g,"*").getRegex()},B={normal:K,gfm:Me,pedantic:ze},E={normal:X,gfm:N,breaks:et,pedantic:Ye};var tt={"&":"&amp;","<":"&lt;",">":"&gt;",'"':"&quot;","'":"&#39;"},ke=u=>tt[u];function O(u,e){if(e){if(m.escapeTest.test(u))return u.replace(m.escapeReplace,ke)}else if(m.escapeTestNoEncode.test(u))return u.replace(m.escapeReplaceNoEncode,ke);return u}function J(u){try{u=encodeURI(u).replace(m.percentDecode,"%")}catch{return null}return u}function V(u,e){let t=u.replace(m.findPipe,(i,s,a)=>{let o=!1,l=s;for(;--l>=0&&a[l]==="\\";)o=!o;return o?"|":" |"}),n=t.split(m.splitPipe),r=0;if(n[0].trim()||n.shift(),n.length>0&&!n.at(-1)?.trim()&&n.pop(),e)if(n.length>e)n.splice(e);else for(;n.length<e;)n.push("");for(;r<n.length;r++)n[r]=n[r].trim().replace(m.slashPipe,"|");return n}function I(u,e,t){let n=u.length;if(n===0)return"";let r=0;for(;r<n;){let i=u.charAt(n-r-1);if(i===e&&!t)r++;else if(i!==e&&t)r++;else break}return u.slice(0,n-r)}function de(u,e){if(u.indexOf(e[1])===-1)return-1;let t=0;for(let n=0;n<u.length;n++)if(u[n]==="\\")n++;else if(u[n]===e[0])t++;else if(u[n]===e[1]&&(t--,t<0))return n;return t>0?-2:-1}function ge(u,e=0){let t=e,n="";for(let r of u)if(r===" "){let i=4-t%4;n+=" ".repeat(i),t+=i}else n+=r,t++;return n}function fe(u,e,t,n,r){let i=e.href,s=e.title||null,a=u[1].replace(r.other.outputLinkReplace,"$1");n.state.inLink=!0;let o={type:u[0].charAt(0)==="!"?"image":"link",raw:t,href:i,title:s,text:a,tokens:n.inlineTokens(a)};return n.state.inLink=!1,o}function nt(u,e,t){let n=u.match(t.other.indentCodeCompensation);if(n===null)return e;let r=n[1];return e.split(`
106539
106916
  `).map(i=>{let s=i.match(t.other.beginningSpace);if(s===null)return i;let[a]=s;return a.length>=r.length?i.slice(r.length):i}).join(`
106540
- `)}var w=class{options;rules;lexer;constructor(e){this.options=e||T}space(e){let t=this.rules.block.newline.exec(e);if(t&&t[0].length>0)return{type:"space",raw:t[0]}}code(e){let t=this.rules.block.code.exec(e);if(t){let n=t[0].replace(this.rules.other.codeRemoveIndent,"");return{type:"code",raw:t[0],codeBlockStyle:"indented",text:this.options.pedantic?n:C(n,`
106541
- `)}}}fences(e){let t=this.rules.block.fences.exec(e);if(t){let n=t[0],r=it(n,t[3]||"",this.rules);return{type:"code",raw:n,lang:t[2]?t[2].trim().replace(this.rules.inline.anyPunctuation,"$1"):t[2],text:r}}}heading(e){let t=this.rules.block.heading.exec(e);if(t){let n=t[2].trim();if(this.rules.other.endingHash.test(n)){let r=C(n,"#");(this.options.pedantic||!r||this.rules.other.endingSpaceChar.test(r))&&(n=r.trim())}return{type:"heading",raw:t[0],depth:t[1].length,text:n,tokens:this.lexer.inline(n)}}}hr(e){let t=this.rules.block.hr.exec(e);if(t)return{type:"hr",raw:C(t[0],`
106542
- `)}}blockquote(e){let t=this.rules.block.blockquote.exec(e);if(t){let n=C(t[0],`
106917
+ `)}var w=class{options;rules;lexer;constructor(e){this.options=e||T}space(e){let t=this.rules.block.newline.exec(e);if(t&&t[0].length>0)return{type:"space",raw:t[0]}}code(e){let t=this.rules.block.code.exec(e);if(t){let n=t[0].replace(this.rules.other.codeRemoveIndent,"");return{type:"code",raw:t[0],codeBlockStyle:"indented",text:this.options.pedantic?n:I(n,`
106918
+ `)}}}fences(e){let t=this.rules.block.fences.exec(e);if(t){let n=t[0],r=nt(n,t[3]||"",this.rules);return{type:"code",raw:n,lang:t[2]?t[2].trim().replace(this.rules.inline.anyPunctuation,"$1"):t[2],text:r}}}heading(e){let t=this.rules.block.heading.exec(e);if(t){let n=t[2].trim();if(this.rules.other.endingHash.test(n)){let r=I(n,"#");(this.options.pedantic||!r||this.rules.other.endingSpaceChar.test(r))&&(n=r.trim())}return{type:"heading",raw:t[0],depth:t[1].length,text:n,tokens:this.lexer.inline(n)}}}hr(e){let t=this.rules.block.hr.exec(e);if(t)return{type:"hr",raw:I(t[0],`
106919
+ `)}}blockquote(e){let t=this.rules.block.blockquote.exec(e);if(t){let n=I(t[0],`
106543
106920
  `).split(`
106544
106921
  `),r="",i="",s=[];for(;n.length>0;){let a=!1,o=[],l;for(l=0;l<n.length;l++)if(this.rules.other.blockquoteStart.test(n[l]))o.push(n[l]),a=!0;else if(!a)o.push(n[l]);else break;n=n.slice(l);let p=o.join(`
106545
106922
  `),c=p.replace(this.rules.other.blockquoteSetextReplace,`
@@ -106550,17 +106927,17 @@ ${c}`:c;let d=this.lexer.state.top;if(this.lexer.state.top=!0,this.lexer.blockTo
106550
106927
  `),S=this.blockquote(f);s[s.length-1]=S,r=r.substring(0,r.length-R.raw.length)+S.raw,i=i.substring(0,i.length-R.text.length)+S.text;break}else if(h?.type==="list"){let R=h,f=R.raw+`
106551
106928
  `+n.join(`
106552
106929
  `),S=this.list(f);s[s.length-1]=S,r=r.substring(0,r.length-h.raw.length)+S.raw,i=i.substring(0,i.length-R.raw.length)+S.raw,n=f.substring(s.at(-1).raw.length).split(`
106553
- `);continue}}return{type:"blockquote",raw:r,tokens:s,text:i}}}list(e){let t=this.rules.block.list.exec(e);if(t){let n=t[1].trim(),r=n.length>1,i={type:"list",raw:"",ordered:r,start:r?+n.slice(0,-1):"",loose:!1,items:[]};n=r?`\\d{1,9}\\${n.slice(-1)}`:`\\${n}`,this.options.pedantic&&(n=r?n:"[*+-]");let s=this.rules.other.listItemRegex(n),a=!1;for(;e;){let l=!1,p="",c="";if(!(t=s.exec(e))||this.rules.block.hr.test(e))break;p=t[0],e=e.substring(p.length);let d=fe(t[2].split(`
106930
+ `);continue}}return{type:"blockquote",raw:r,tokens:s,text:i}}}list(e){let t=this.rules.block.list.exec(e);if(t){let n=t[1].trim(),r=n.length>1,i={type:"list",raw:"",ordered:r,start:r?+n.slice(0,-1):"",loose:!1,items:[]};n=r?`\\d{1,9}\\${n.slice(-1)}`:`\\${n}`,this.options.pedantic&&(n=r?n:"[*+-]");let s=this.rules.other.listItemRegex(n),a=!1;for(;e;){let l=!1,p="",c="";if(!(t=s.exec(e))||this.rules.block.hr.test(e))break;p=t[0],e=e.substring(p.length);let d=ge(t[2].split(`
106554
106931
  `,1)[0],t[1].length),h=e.split(`
106555
106932
  `,1)[0],R=!d.trim(),f=0;if(this.options.pedantic?(f=2,c=d.trimStart()):R?f=t[1].length+1:(f=d.search(this.rules.other.nonSpaceChar),f=f>4?1:f,c=d.slice(f),f+=t[1].length),R&&this.rules.other.blankLine.test(h)&&(p+=h+`
106556
- `,e=e.substring(h.length+1),l=!0),!l){let S=this.rules.other.nextBulletRegex(f),V=this.rules.other.hrRegex(f),Y=this.rules.other.fencesBeginRegex(f),ee=this.rules.other.headingBeginRegex(f),xe=this.rules.other.htmlBeginRegex(f),be=this.rules.other.blockquoteBeginRegex(f);for(;e;){let G=e.split(`
106557
- `,1)[0],A;if(h=G,this.options.pedantic?(h=h.replace(this.rules.other.listReplaceNesting," "),A=h):A=h.replace(this.rules.other.tabCharGlobal," "),Y.test(h)||ee.test(h)||xe.test(h)||be.test(h)||S.test(h)||V.test(h))break;if(A.search(this.rules.other.nonSpaceChar)>=f||!h.trim())c+=`
106558
- `+A.slice(f);else{if(R||d.replace(this.rules.other.tabCharGlobal," ").search(this.rules.other.nonSpaceChar)>=4||Y.test(d)||ee.test(d)||V.test(d))break;c+=`
106559
- `+h}R=!h.trim(),p+=G+`
106560
- `,e=e.substring(G.length+1),d=A.slice(f)}}i.loose||(a?i.loose=!0:this.rules.other.doubleBlankLine.test(p)&&(a=!0)),i.items.push({type:"list_item",raw:p,task:!!this.options.gfm&&this.rules.other.listIsTask.test(c),loose:!1,text:c,tokens:[]}),i.raw+=p}let o=i.items.at(-1);if(o)o.raw=o.raw.trimEnd(),o.text=o.text.trimEnd();else return;i.raw=i.raw.trimEnd();for(let l of i.items){if(this.lexer.state.top=!1,l.tokens=this.lexer.blockTokens(l.text,[]),l.task){if(l.text=l.text.replace(this.rules.other.listReplaceTask,""),l.tokens[0]?.type==="text"||l.tokens[0]?.type==="paragraph"){l.tokens[0].raw=l.tokens[0].raw.replace(this.rules.other.listReplaceTask,""),l.tokens[0].text=l.tokens[0].text.replace(this.rules.other.listReplaceTask,"");for(let c=this.lexer.inlineQueue.length-1;c>=0;c--)if(this.rules.other.listIsTask.test(this.lexer.inlineQueue[c].src)){this.lexer.inlineQueue[c].src=this.lexer.inlineQueue[c].src.replace(this.rules.other.listReplaceTask,"");break}}let p=this.rules.other.listTaskCheckbox.exec(l.raw);if(p){let c={type:"checkbox",raw:p[0]+" ",checked:p[0]!=="[ ]"};l.checked=c.checked,i.loose?l.tokens[0]&&["paragraph","text"].includes(l.tokens[0].type)&&"tokens"in l.tokens[0]&&l.tokens[0].tokens?(l.tokens[0].raw=c.raw+l.tokens[0].raw,l.tokens[0].text=c.raw+l.tokens[0].text,l.tokens[0].tokens.unshift(c)):l.tokens.unshift({type:"paragraph",raw:c.raw,text:c.raw,tokens:[c]}):l.tokens.unshift(c)}}if(!i.loose){let p=l.tokens.filter(d=>d.type==="space"),c=p.length>0&&p.some(d=>this.rules.other.anyLine.test(d.raw));i.loose=c}}if(i.loose)for(let l of i.items){l.loose=!0;for(let p of l.tokens)p.type==="text"&&(p.type="paragraph")}return i}}html(e){let t=this.rules.block.html.exec(e);if(t)return{type:"html",block:!0,raw:t[0],pre:t[1]==="pre"||t[1]==="script"||t[1]==="style",text:t[0]}}def(e){let t=this.rules.block.def.exec(e);if(t){let n=t[1].toLowerCase().replace(this.rules.other.multipleSpaceGlobal," "),r=t[2]?t[2].replace(this.rules.other.hrefBrackets,"$1").replace(this.rules.inline.anyPunctuation,"$1"):"",i=t[3]?t[3].substring(1,t[3].length-1).replace(this.rules.inline.anyPunctuation,"$1"):t[3];return{type:"def",tag:n,raw:t[0],href:r,title:i}}}table(e){let t=this.rules.block.table.exec(e);if(!t||!this.rules.other.tableDelimiter.test(t[2]))return;let n=J(t[1]),r=t[2].replace(this.rules.other.tableAlignChars,"").split("|"),i=t[3]?.trim()?t[3].replace(this.rules.other.tableRowBlankLine,"").split(`
106561
- `):[],s={type:"table",raw:t[0],header:[],align:[],rows:[]};if(n.length===r.length){for(let a of r)this.rules.other.tableAlignRight.test(a)?s.align.push("right"):this.rules.other.tableAlignCenter.test(a)?s.align.push("center"):this.rules.other.tableAlignLeft.test(a)?s.align.push("left"):s.align.push(null);for(let a=0;a<n.length;a++)s.header.push({text:n[a],tokens:this.lexer.inline(n[a]),header:!0,align:s.align[a]});for(let a of i)s.rows.push(J(a,s.header.length).map((o,l)=>({text:o,tokens:this.lexer.inline(o),header:!1,align:s.align[l]})));return s}}lheading(e){let t=this.rules.block.lheading.exec(e);if(t)return{type:"heading",raw:t[0],depth:t[2].charAt(0)==="="?1:2,text:t[1],tokens:this.lexer.inline(t[1])}}paragraph(e){let t=this.rules.block.paragraph.exec(e);if(t){let n=t[1].charAt(t[1].length-1)===`
106562
- `?t[1].slice(0,-1):t[1];return{type:"paragraph",raw:t[0],text:n,tokens:this.lexer.inline(n)}}}text(e){let t=this.rules.block.text.exec(e);if(t)return{type:"text",raw:t[0],text:t[0],tokens:this.lexer.inline(t[0])}}escape(e){let t=this.rules.inline.escape.exec(e);if(t)return{type:"escape",raw:t[0],text:t[1]}}tag(e){let t=this.rules.inline.tag.exec(e);if(t)return!this.lexer.state.inLink&&this.rules.other.startATag.test(t[0])?this.lexer.state.inLink=!0:this.lexer.state.inLink&&this.rules.other.endATag.test(t[0])&&(this.lexer.state.inLink=!1),!this.lexer.state.inRawBlock&&this.rules.other.startPreScriptTag.test(t[0])?this.lexer.state.inRawBlock=!0:this.lexer.state.inRawBlock&&this.rules.other.endPreScriptTag.test(t[0])&&(this.lexer.state.inRawBlock=!1),{type:"html",raw:t[0],inLink:this.lexer.state.inLink,inRawBlock:this.lexer.state.inRawBlock,block:!1,text:t[0]}}link(e){let t=this.rules.inline.link.exec(e);if(t){let n=t[2].trim();if(!this.options.pedantic&&this.rules.other.startAngleBracket.test(n)){if(!this.rules.other.endAngleBracket.test(n))return;let s=C(n.slice(0,-1),"\\");if((n.length-s.length)%2===0)return}else{let s=ge(t[2],"()");if(s===-2)return;if(s>-1){let o=(t[0].indexOf("!")===0?5:4)+t[1].length+s;t[2]=t[2].substring(0,s),t[0]=t[0].substring(0,o).trim(),t[3]=""}}let r=t[2],i="";if(this.options.pedantic){let s=this.rules.other.pedanticHrefTitle.exec(r);s&&(r=s[1],i=s[3])}else i=t[3]?t[3].slice(1,-1):"";return r=r.trim(),this.rules.other.startAngleBracket.test(r)&&(this.options.pedantic&&!this.rules.other.endAngleBracket.test(n)?r=r.slice(1):r=r.slice(1,-1)),me(t,{href:r&&r.replace(this.rules.inline.anyPunctuation,"$1"),title:i&&i.replace(this.rules.inline.anyPunctuation,"$1")},t[0],this.lexer,this.rules)}}reflink(e,t){let n;if((n=this.rules.inline.reflink.exec(e))||(n=this.rules.inline.nolink.exec(e))){let r=(n[2]||n[1]).replace(this.rules.other.multipleSpaceGlobal," "),i=t[r.toLowerCase()];if(!i){let s=n[0].charAt(0);return{type:"text",raw:s,text:s}}return me(n,i,n[0],this.lexer,this.rules)}}emStrong(e,t,n=""){let r=this.rules.inline.emStrongLDelim.exec(e);if(!r||r[3]&&n.match(this.rules.other.unicodeAlphaNumeric))return;if(!(r[1]||r[2]||"")||!n||this.rules.inline.punctuation.exec(n)){let s=[...r[0]].length-1,a,o,l=s,p=0,c=r[0][0]==="*"?this.rules.inline.emStrongRDelimAst:this.rules.inline.emStrongRDelimUnd;for(c.lastIndex=0,t=t.slice(-1*e.length+s);(r=c.exec(t))!=null;){if(a=r[1]||r[2]||r[3]||r[4]||r[5]||r[6],!a)continue;if(o=[...a].length,r[3]||r[4]){l+=o;continue}else if((r[5]||r[6])&&s%3&&!((s+o)%3)){p+=o;continue}if(l-=o,l>0)continue;o=Math.min(o,o+l+p);let d=[...r[0]][0].length,h=e.slice(0,s+r.index+d+o);if(Math.min(s,o)%2){let f=h.slice(1,-1);return{type:"em",raw:h,text:f,tokens:this.lexer.inlineTokens(f)}}let R=h.slice(2,-2);return{type:"strong",raw:h,text:R,tokens:this.lexer.inlineTokens(R)}}}}codespan(e){let t=this.rules.inline.code.exec(e);if(t){let n=t[2].replace(this.rules.other.newLineCharGlobal," "),r=this.rules.other.nonSpaceChar.test(n),i=this.rules.other.startingSpaceChar.test(n)&&this.rules.other.endingSpaceChar.test(n);return r&&i&&(n=n.substring(1,n.length-1)),{type:"codespan",raw:t[0],text:n}}}br(e){let t=this.rules.inline.br.exec(e);if(t)return{type:"br",raw:t[0]}}del(e,t,n=""){let r=this.rules.inline.delLDelim.exec(e);if(!r)return;if(!(r[1]||"")||!n||this.rules.inline.punctuation.exec(n)){let s=[...r[0]].length-1,a,o,l=s,p=this.rules.inline.delRDelim;for(p.lastIndex=0,t=t.slice(-1*e.length+s);(r=p.exec(t))!=null;){if(a=r[1]||r[2]||r[3]||r[4]||r[5]||r[6],!a||(o=[...a].length,o!==s))continue;if(r[3]||r[4]){l+=o;continue}if(l-=o,l>0)continue;o=Math.min(o,o+l);let c=[...r[0]][0].length,d=e.slice(0,s+r.index+c+o),h=d.slice(s,-s);return{type:"del",raw:d,text:h,tokens:this.lexer.inlineTokens(h)}}}}autolink(e){let t=this.rules.inline.autolink.exec(e);if(t){let n,r;return t[2]==="@"?(n=t[1],r="mailto:"+n):(n=t[1],r=n),{type:"link",raw:t[0],text:n,href:r,tokens:[{type:"text",raw:n,text:n}]}}}url(e){let t;if(t=this.rules.inline.url.exec(e)){let n,r;if(t[2]==="@")n=t[0],r="mailto:"+n;else{let i;do i=t[0],t[0]=this.rules.inline._backpedal.exec(t[0])?.[0]??"";while(i!==t[0]);n=t[0],t[1]==="www."?r="http://"+t[0]:r=t[0]}return{type:"link",raw:t[0],text:n,href:r,tokens:[{type:"text",raw:n,text:n}]}}}inlineText(e){let t=this.rules.inline.text.exec(e);if(t){let n=this.lexer.state.inRawBlock;return{type:"text",raw:t[0],text:t[0],escaped:n}}}};var x=class u{tokens;options;state;inlineQueue;tokenizer;constructor(e){this.tokens=[],this.tokens.links=Object.create(null),this.options=e||T,this.options.tokenizer=this.options.tokenizer||new w,this.tokenizer=this.options.tokenizer,this.tokenizer.options=this.options,this.tokenizer.lexer=this,this.inlineQueue=[],this.state={inLink:!1,inRawBlock:!1,top:!0};let t={other:m,block:E.normal,inline:z.normal};this.options.pedantic?(t.block=E.pedantic,t.inline=z.pedantic):this.options.gfm&&(t.block=E.gfm,this.options.breaks?t.inline=z.breaks:t.inline=z.gfm),this.tokenizer.rules=t}static get rules(){return{block:E,inline:z}}static lex(e,t){return new u(t).lex(e)}static lexInline(e,t){return new u(t).inlineTokens(e)}lex(e){e=e.replace(m.carriageReturn,`
106563
- `),this.blockTokens(e,this.tokens);for(let t=0;t<this.inlineQueue.length;t++){let n=this.inlineQueue[t];this.inlineTokens(n.src,n.tokens)}return this.inlineQueue=[],this.tokens}blockTokens(e,t=[],n=!1){for(this.options.pedantic&&(e=e.replace(m.tabCharGlobal," ").replace(m.spaceLine,""));e;){let r;if(this.options.extensions?.block?.some(s=>(r=s.call({lexer:this},e,t))?(e=e.substring(r.raw.length),t.push(r),!0):!1))continue;if(r=this.tokenizer.space(e)){e=e.substring(r.raw.length);let s=t.at(-1);r.raw.length===1&&s!==void 0?s.raw+=`
106933
+ `,e=e.substring(h.length+1),l=!0),!l){let S=this.rules.other.nextBulletRegex(f),Y=this.rules.other.hrRegex(f),ee=this.rules.other.fencesBeginRegex(f),te=this.rules.other.headingBeginRegex(f),me=this.rules.other.htmlBeginRegex(f),xe=this.rules.other.blockquoteBeginRegex(f);for(;e;){let Z=e.split(`
106934
+ `,1)[0],A;if(h=Z,this.options.pedantic?(h=h.replace(this.rules.other.listReplaceNesting," "),A=h):A=h.replace(this.rules.other.tabCharGlobal," "),ee.test(h)||te.test(h)||me.test(h)||xe.test(h)||S.test(h)||Y.test(h))break;if(A.search(this.rules.other.nonSpaceChar)>=f||!h.trim())c+=`
106935
+ `+A.slice(f);else{if(R||d.replace(this.rules.other.tabCharGlobal," ").search(this.rules.other.nonSpaceChar)>=4||ee.test(d)||te.test(d)||Y.test(d))break;c+=`
106936
+ `+h}R=!h.trim(),p+=Z+`
106937
+ `,e=e.substring(Z.length+1),d=A.slice(f)}}i.loose||(a?i.loose=!0:this.rules.other.doubleBlankLine.test(p)&&(a=!0)),i.items.push({type:"list_item",raw:p,task:!!this.options.gfm&&this.rules.other.listIsTask.test(c),loose:!1,text:c,tokens:[]}),i.raw+=p}let o=i.items.at(-1);if(o)o.raw=o.raw.trimEnd(),o.text=o.text.trimEnd();else return;i.raw=i.raw.trimEnd();for(let l of i.items){if(this.lexer.state.top=!1,l.tokens=this.lexer.blockTokens(l.text,[]),l.task){if(l.text=l.text.replace(this.rules.other.listReplaceTask,""),l.tokens[0]?.type==="text"||l.tokens[0]?.type==="paragraph"){l.tokens[0].raw=l.tokens[0].raw.replace(this.rules.other.listReplaceTask,""),l.tokens[0].text=l.tokens[0].text.replace(this.rules.other.listReplaceTask,"");for(let c=this.lexer.inlineQueue.length-1;c>=0;c--)if(this.rules.other.listIsTask.test(this.lexer.inlineQueue[c].src)){this.lexer.inlineQueue[c].src=this.lexer.inlineQueue[c].src.replace(this.rules.other.listReplaceTask,"");break}}let p=this.rules.other.listTaskCheckbox.exec(l.raw);if(p){let c={type:"checkbox",raw:p[0]+" ",checked:p[0]!=="[ ]"};l.checked=c.checked,i.loose?l.tokens[0]&&["paragraph","text"].includes(l.tokens[0].type)&&"tokens"in l.tokens[0]&&l.tokens[0].tokens?(l.tokens[0].raw=c.raw+l.tokens[0].raw,l.tokens[0].text=c.raw+l.tokens[0].text,l.tokens[0].tokens.unshift(c)):l.tokens.unshift({type:"paragraph",raw:c.raw,text:c.raw,tokens:[c]}):l.tokens.unshift(c)}}if(!i.loose){let p=l.tokens.filter(d=>d.type==="space"),c=p.length>0&&p.some(d=>this.rules.other.anyLine.test(d.raw));i.loose=c}}if(i.loose)for(let l of i.items){l.loose=!0;for(let p of l.tokens)p.type==="text"&&(p.type="paragraph")}return i}}html(e){let t=this.rules.block.html.exec(e);if(t)return{type:"html",block:!0,raw:t[0],pre:t[1]==="pre"||t[1]==="script"||t[1]==="style",text:t[0]}}def(e){let t=this.rules.block.def.exec(e);if(t){let n=t[1].toLowerCase().replace(this.rules.other.multipleSpaceGlobal," "),r=t[2]?t[2].replace(this.rules.other.hrefBrackets,"$1").replace(this.rules.inline.anyPunctuation,"$1"):"",i=t[3]?t[3].substring(1,t[3].length-1).replace(this.rules.inline.anyPunctuation,"$1"):t[3];return{type:"def",tag:n,raw:t[0],href:r,title:i}}}table(e){let t=this.rules.block.table.exec(e);if(!t||!this.rules.other.tableDelimiter.test(t[2]))return;let n=V(t[1]),r=t[2].replace(this.rules.other.tableAlignChars,"").split("|"),i=t[3]?.trim()?t[3].replace(this.rules.other.tableRowBlankLine,"").split(`
106938
+ `):[],s={type:"table",raw:t[0],header:[],align:[],rows:[]};if(n.length===r.length){for(let a of r)this.rules.other.tableAlignRight.test(a)?s.align.push("right"):this.rules.other.tableAlignCenter.test(a)?s.align.push("center"):this.rules.other.tableAlignLeft.test(a)?s.align.push("left"):s.align.push(null);for(let a=0;a<n.length;a++)s.header.push({text:n[a],tokens:this.lexer.inline(n[a]),header:!0,align:s.align[a]});for(let a of i)s.rows.push(V(a,s.header.length).map((o,l)=>({text:o,tokens:this.lexer.inline(o),header:!1,align:s.align[l]})));return s}}lheading(e){let t=this.rules.block.lheading.exec(e);if(t){let n=t[1].trim();return{type:"heading",raw:t[0],depth:t[2].charAt(0)==="="?1:2,text:n,tokens:this.lexer.inline(n)}}}paragraph(e){let t=this.rules.block.paragraph.exec(e);if(t){let n=t[1].charAt(t[1].length-1)===`
106939
+ `?t[1].slice(0,-1):t[1];return{type:"paragraph",raw:t[0],text:n,tokens:this.lexer.inline(n)}}}text(e){let t=this.rules.block.text.exec(e);if(t)return{type:"text",raw:t[0],text:t[0],tokens:this.lexer.inline(t[0])}}escape(e){let t=this.rules.inline.escape.exec(e);if(t)return{type:"escape",raw:t[0],text:t[1]}}tag(e){let t=this.rules.inline.tag.exec(e);if(t)return!this.lexer.state.inLink&&this.rules.other.startATag.test(t[0])?this.lexer.state.inLink=!0:this.lexer.state.inLink&&this.rules.other.endATag.test(t[0])&&(this.lexer.state.inLink=!1),!this.lexer.state.inRawBlock&&this.rules.other.startPreScriptTag.test(t[0])?this.lexer.state.inRawBlock=!0:this.lexer.state.inRawBlock&&this.rules.other.endPreScriptTag.test(t[0])&&(this.lexer.state.inRawBlock=!1),{type:"html",raw:t[0],inLink:this.lexer.state.inLink,inRawBlock:this.lexer.state.inRawBlock,block:!1,text:t[0]}}link(e){let t=this.rules.inline.link.exec(e);if(t){let n=t[2].trim();if(!this.options.pedantic&&this.rules.other.startAngleBracket.test(n)){if(!this.rules.other.endAngleBracket.test(n))return;let s=I(n.slice(0,-1),"\\");if((n.length-s.length)%2===0)return}else{let s=de(t[2],"()");if(s===-2)return;if(s>-1){let o=(t[0].indexOf("!")===0?5:4)+t[1].length+s;t[2]=t[2].substring(0,s),t[0]=t[0].substring(0,o).trim(),t[3]=""}}let r=t[2],i="";if(this.options.pedantic){let s=this.rules.other.pedanticHrefTitle.exec(r);s&&(r=s[1],i=s[3])}else i=t[3]?t[3].slice(1,-1):"";return r=r.trim(),this.rules.other.startAngleBracket.test(r)&&(this.options.pedantic&&!this.rules.other.endAngleBracket.test(n)?r=r.slice(1):r=r.slice(1,-1)),fe(t,{href:r&&r.replace(this.rules.inline.anyPunctuation,"$1"),title:i&&i.replace(this.rules.inline.anyPunctuation,"$1")},t[0],this.lexer,this.rules)}}reflink(e,t){let n;if((n=this.rules.inline.reflink.exec(e))||(n=this.rules.inline.nolink.exec(e))){let r=(n[2]||n[1]).replace(this.rules.other.multipleSpaceGlobal," "),i=t[r.toLowerCase()];if(!i){let s=n[0].charAt(0);return{type:"text",raw:s,text:s}}return fe(n,i,n[0],this.lexer,this.rules)}}emStrong(e,t,n=""){let r=this.rules.inline.emStrongLDelim.exec(e);if(!r||!r[1]&&!r[2]&&!r[3]&&!r[4]||r[4]&&n.match(this.rules.other.unicodeAlphaNumeric))return;if(!(r[1]||r[3]||"")||!n||this.rules.inline.punctuation.exec(n)){let s=[...r[0]].length-1,a,o,l=s,p=0,c=r[0][0]==="*"?this.rules.inline.emStrongRDelimAst:this.rules.inline.emStrongRDelimUnd;for(c.lastIndex=0,t=t.slice(-1*e.length+s);(r=c.exec(t))!=null;){if(a=r[1]||r[2]||r[3]||r[4]||r[5]||r[6],!a)continue;if(o=[...a].length,r[3]||r[4]){l+=o;continue}else if((r[5]||r[6])&&s%3&&!((s+o)%3)){p+=o;continue}if(l-=o,l>0)continue;o=Math.min(o,o+l+p);let d=[...r[0]][0].length,h=e.slice(0,s+r.index+d+o);if(Math.min(s,o)%2){let f=h.slice(1,-1);return{type:"em",raw:h,text:f,tokens:this.lexer.inlineTokens(f)}}let R=h.slice(2,-2);return{type:"strong",raw:h,text:R,tokens:this.lexer.inlineTokens(R)}}}}codespan(e){let t=this.rules.inline.code.exec(e);if(t){let n=t[2].replace(this.rules.other.newLineCharGlobal," "),r=this.rules.other.nonSpaceChar.test(n),i=this.rules.other.startingSpaceChar.test(n)&&this.rules.other.endingSpaceChar.test(n);return r&&i&&(n=n.substring(1,n.length-1)),{type:"codespan",raw:t[0],text:n}}}br(e){let t=this.rules.inline.br.exec(e);if(t)return{type:"br",raw:t[0]}}del(e,t,n=""){let r=this.rules.inline.delLDelim.exec(e);if(!r)return;if(!(r[1]||"")||!n||this.rules.inline.punctuation.exec(n)){let s=[...r[0]].length-1,a,o,l=s,p=this.rules.inline.delRDelim;for(p.lastIndex=0,t=t.slice(-1*e.length+s);(r=p.exec(t))!=null;){if(a=r[1]||r[2]||r[3]||r[4]||r[5]||r[6],!a||(o=[...a].length,o!==s))continue;if(r[3]||r[4]){l+=o;continue}if(l-=o,l>0)continue;o=Math.min(o,o+l);let c=[...r[0]][0].length,d=e.slice(0,s+r.index+c+o),h=d.slice(s,-s);return{type:"del",raw:d,text:h,tokens:this.lexer.inlineTokens(h)}}}}autolink(e){let t=this.rules.inline.autolink.exec(e);if(t){let n,r;return t[2]==="@"?(n=t[1],r="mailto:"+n):(n=t[1],r=n),{type:"link",raw:t[0],text:n,href:r,tokens:[{type:"text",raw:n,text:n}]}}}url(e){let t;if(t=this.rules.inline.url.exec(e)){let n,r;if(t[2]==="@")n=t[0],r="mailto:"+n;else{let i;do i=t[0],t[0]=this.rules.inline._backpedal.exec(t[0])?.[0]??"";while(i!==t[0]);n=t[0],t[1]==="www."?r="http://"+t[0]:r=t[0]}return{type:"link",raw:t[0],text:n,href:r,tokens:[{type:"text",raw:n,text:n}]}}}inlineText(e){let t=this.rules.inline.text.exec(e);if(t){let n=this.lexer.state.inRawBlock;return{type:"text",raw:t[0],text:t[0],escaped:n}}}};var x=class u{tokens;options;state;inlineQueue;tokenizer;constructor(e){this.tokens=[],this.tokens.links=Object.create(null),this.options=e||T,this.options.tokenizer=this.options.tokenizer||new w,this.tokenizer=this.options.tokenizer,this.tokenizer.options=this.options,this.tokenizer.lexer=this,this.inlineQueue=[],this.state={inLink:!1,inRawBlock:!1,top:!0};let t={other:m,block:B.normal,inline:E.normal};this.options.pedantic?(t.block=B.pedantic,t.inline=E.pedantic):this.options.gfm&&(t.block=B.gfm,this.options.breaks?t.inline=E.breaks:t.inline=E.gfm),this.tokenizer.rules=t}static get rules(){return{block:B,inline:E}}static lex(e,t){return new u(t).lex(e)}static lexInline(e,t){return new u(t).inlineTokens(e)}lex(e){e=e.replace(m.carriageReturn,`
106940
+ `),this.blockTokens(e,this.tokens);for(let t=0;t<this.inlineQueue.length;t++){let n=this.inlineQueue[t];this.inlineTokens(n.src,n.tokens)}return this.inlineQueue=[],this.tokens}blockTokens(e,t=[],n=!1){for(this.tokenizer.lexer=this,this.options.pedantic&&(e=e.replace(m.tabCharGlobal," ").replace(m.spaceLine,""));e;){let r;if(this.options.extensions?.block?.some(s=>(r=s.call({lexer:this},e,t))?(e=e.substring(r.raw.length),t.push(r),!0):!1))continue;if(r=this.tokenizer.space(e)){e=e.substring(r.raw.length);let s=t.at(-1);r.raw.length===1&&s!==void 0?s.raw+=`
106564
106941
  `:t.push(r);continue}if(r=this.tokenizer.code(e)){e=e.substring(r.raw.length);let s=t.at(-1);s?.type==="paragraph"||s?.type==="text"?(s.raw+=(s.raw.endsWith(`
106565
106942
  `)?"":`
106566
106943
  `)+r.raw,s.text+=`
@@ -106573,7 +106950,7 @@ ${c}`:c;let d=this.lexer.state.top;if(this.lexer.state.top=!0,this.lexer.blockTo
106573
106950
  `+r.text,this.inlineQueue.pop(),this.inlineQueue.at(-1).src=s.text):t.push(r),n=i.length!==e.length,e=e.substring(r.raw.length);continue}if(r=this.tokenizer.text(e)){e=e.substring(r.raw.length);let s=t.at(-1);s?.type==="text"?(s.raw+=(s.raw.endsWith(`
106574
106951
  `)?"":`
106575
106952
  `)+r.raw,s.text+=`
106576
- `+r.text,this.inlineQueue.pop(),this.inlineQueue.at(-1).src=s.text):t.push(r);continue}if(e){let s="Infinite loop on byte: "+e.charCodeAt(0);if(this.options.silent){console.error(s);break}else throw new Error(s)}}return this.state.top=!0,t}inline(e,t=[]){return this.inlineQueue.push({src:e,tokens:t}),t}inlineTokens(e,t=[]){let n=e,r=null;if(this.tokens.links){let o=Object.keys(this.tokens.links);if(o.length>0)for(;(r=this.tokenizer.rules.inline.reflinkSearch.exec(n))!=null;)o.includes(r[0].slice(r[0].lastIndexOf("[")+1,-1))&&(n=n.slice(0,r.index)+"["+"a".repeat(r[0].length-2)+"]"+n.slice(this.tokenizer.rules.inline.reflinkSearch.lastIndex))}for(;(r=this.tokenizer.rules.inline.anyPunctuation.exec(n))!=null;)n=n.slice(0,r.index)+"++"+n.slice(this.tokenizer.rules.inline.anyPunctuation.lastIndex);let i;for(;(r=this.tokenizer.rules.inline.blockSkip.exec(n))!=null;)i=r[2]?r[2].length:0,n=n.slice(0,r.index+i)+"["+"a".repeat(r[0].length-i-2)+"]"+n.slice(this.tokenizer.rules.inline.blockSkip.lastIndex);n=this.options.hooks?.emStrongMask?.call({lexer:this},n)??n;let s=!1,a="";for(;e;){s||(a=""),s=!1;let o;if(this.options.extensions?.inline?.some(p=>(o=p.call({lexer:this},e,t))?(e=e.substring(o.raw.length),t.push(o),!0):!1))continue;if(o=this.tokenizer.escape(e)){e=e.substring(o.raw.length),t.push(o);continue}if(o=this.tokenizer.tag(e)){e=e.substring(o.raw.length),t.push(o);continue}if(o=this.tokenizer.link(e)){e=e.substring(o.raw.length),t.push(o);continue}if(o=this.tokenizer.reflink(e,this.tokens.links)){e=e.substring(o.raw.length);let p=t.at(-1);o.type==="text"&&p?.type==="text"?(p.raw+=o.raw,p.text+=o.text):t.push(o);continue}if(o=this.tokenizer.emStrong(e,n,a)){e=e.substring(o.raw.length),t.push(o);continue}if(o=this.tokenizer.codespan(e)){e=e.substring(o.raw.length),t.push(o);continue}if(o=this.tokenizer.br(e)){e=e.substring(o.raw.length),t.push(o);continue}if(o=this.tokenizer.del(e,n,a)){e=e.substring(o.raw.length),t.push(o);continue}if(o=this.tokenizer.autolink(e)){e=e.substring(o.raw.length),t.push(o);continue}if(!this.state.inLink&&(o=this.tokenizer.url(e))){e=e.substring(o.raw.length),t.push(o);continue}let l=e;if(this.options.extensions?.startInline){let p=1/0,c=e.slice(1),d;this.options.extensions.startInline.forEach(h=>{d=h.call({lexer:this},c),typeof d=="number"&&d>=0&&(p=Math.min(p,d))}),p<1/0&&p>=0&&(l=e.substring(0,p+1))}if(o=this.tokenizer.inlineText(l)){e=e.substring(o.raw.length),o.raw.slice(-1)!=="_"&&(a=o.raw.slice(-1)),s=!0;let p=t.at(-1);p?.type==="text"?(p.raw+=o.raw,p.text+=o.text):t.push(o);continue}if(e){let p="Infinite loop on byte: "+e.charCodeAt(0);if(this.options.silent){console.error(p);break}else throw new Error(p)}}return t}};var y=class{options;parser;constructor(e){this.options=e||T}space(e){return""}code({text:e,lang:t,escaped:n}){let r=(t||"").match(m.notSpaceStart)?.[0],i=e.replace(m.endingNewline,"")+`
106953
+ `+r.text,this.inlineQueue.pop(),this.inlineQueue.at(-1).src=s.text):t.push(r);continue}if(e){let s="Infinite loop on byte: "+e.charCodeAt(0);if(this.options.silent){console.error(s);break}else throw new Error(s)}}return this.state.top=!0,t}inline(e,t=[]){return this.inlineQueue.push({src:e,tokens:t}),t}inlineTokens(e,t=[]){this.tokenizer.lexer=this;let n=e,r=null;if(this.tokens.links){let o=Object.keys(this.tokens.links);if(o.length>0)for(;(r=this.tokenizer.rules.inline.reflinkSearch.exec(n))!=null;)o.includes(r[0].slice(r[0].lastIndexOf("[")+1,-1))&&(n=n.slice(0,r.index)+"["+"a".repeat(r[0].length-2)+"]"+n.slice(this.tokenizer.rules.inline.reflinkSearch.lastIndex))}for(;(r=this.tokenizer.rules.inline.anyPunctuation.exec(n))!=null;)n=n.slice(0,r.index)+"++"+n.slice(this.tokenizer.rules.inline.anyPunctuation.lastIndex);let i;for(;(r=this.tokenizer.rules.inline.blockSkip.exec(n))!=null;)i=r[2]?r[2].length:0,n=n.slice(0,r.index+i)+"["+"a".repeat(r[0].length-i-2)+"]"+n.slice(this.tokenizer.rules.inline.blockSkip.lastIndex);n=this.options.hooks?.emStrongMask?.call({lexer:this},n)??n;let s=!1,a="";for(;e;){s||(a=""),s=!1;let o;if(this.options.extensions?.inline?.some(p=>(o=p.call({lexer:this},e,t))?(e=e.substring(o.raw.length),t.push(o),!0):!1))continue;if(o=this.tokenizer.escape(e)){e=e.substring(o.raw.length),t.push(o);continue}if(o=this.tokenizer.tag(e)){e=e.substring(o.raw.length),t.push(o);continue}if(o=this.tokenizer.link(e)){e=e.substring(o.raw.length),t.push(o);continue}if(o=this.tokenizer.reflink(e,this.tokens.links)){e=e.substring(o.raw.length);let p=t.at(-1);o.type==="text"&&p?.type==="text"?(p.raw+=o.raw,p.text+=o.text):t.push(o);continue}if(o=this.tokenizer.emStrong(e,n,a)){e=e.substring(o.raw.length),t.push(o);continue}if(o=this.tokenizer.codespan(e)){e=e.substring(o.raw.length),t.push(o);continue}if(o=this.tokenizer.br(e)){e=e.substring(o.raw.length),t.push(o);continue}if(o=this.tokenizer.del(e,n,a)){e=e.substring(o.raw.length),t.push(o);continue}if(o=this.tokenizer.autolink(e)){e=e.substring(o.raw.length),t.push(o);continue}if(!this.state.inLink&&(o=this.tokenizer.url(e))){e=e.substring(o.raw.length),t.push(o);continue}let l=e;if(this.options.extensions?.startInline){let p=1/0,c=e.slice(1),d;this.options.extensions.startInline.forEach(h=>{d=h.call({lexer:this},c),typeof d=="number"&&d>=0&&(p=Math.min(p,d))}),p<1/0&&p>=0&&(l=e.substring(0,p+1))}if(o=this.tokenizer.inlineText(l)){e=e.substring(o.raw.length),o.raw.slice(-1)!=="_"&&(a=o.raw.slice(-1)),s=!0;let p=t.at(-1);p?.type==="text"?(p.raw+=o.raw,p.text+=o.text):t.push(o);continue}if(e){let p="Infinite loop on byte: "+e.charCodeAt(0);if(this.options.silent){console.error(p);break}else throw new Error(p)}}return t}};var y=class{options;parser;constructor(e){this.options=e||T}space(e){return""}code({text:e,lang:t,escaped:n}){let r=(t||"").match(m.notSpaceStart)?.[0],i=e.replace(m.endingNewline,"")+`
106577
106954
  `;return r?'<pre><code class="language-'+O(r)+'">'+(n?i:O(i,!0))+`</code></pre>
106578
106955
  `:"<pre><code>"+(n?i:O(i,!0))+`</code></pre>
106579
106956
  `}blockquote({tokens:e}){return`<blockquote>
@@ -106591,8 +106968,8 @@ ${this.parser.parse(e)}</blockquote>
106591
106968
  `}tablerow({text:e}){return`<tr>
106592
106969
  ${e}</tr>
106593
106970
  `}tablecell(e){let t=this.parser.parseInline(e.tokens),n=e.header?"th":"td";return(e.align?`<${n} align="${e.align}">`:`<${n}>`)+t+`</${n}>
106594
- `}strong({tokens:e}){return`<strong>${this.parser.parseInline(e)}</strong>`}em({tokens:e}){return`<em>${this.parser.parseInline(e)}</em>`}codespan({text:e}){return`<code>${O(e,!0)}</code>`}br(e){return"<br>"}del({tokens:e}){return`<del>${this.parser.parseInline(e)}</del>`}link({href:e,title:t,tokens:n}){let r=this.parser.parseInline(n),i=X(e);if(i===null)return r;e=i;let s='<a href="'+e+'"';return t&&(s+=' title="'+O(t)+'"'),s+=">"+r+"</a>",s}image({href:e,title:t,text:n,tokens:r}){r&&(n=this.parser.parseInline(r,this.parser.textRenderer));let i=X(e);if(i===null)return O(n);e=i;let s=`<img src="${e}" alt="${O(n)}"`;return t&&(s+=` title="${O(t)}"`),s+=">",s}text(e){return"tokens"in e&&e.tokens?this.parser.parseInline(e.tokens):"escaped"in e&&e.escaped?e.text:O(e.text)}};var $=class{strong({text:e}){return e}em({text:e}){return e}codespan({text:e}){return e}del({text:e}){return e}html({text:e}){return e}text({text:e}){return e}link({text:e}){return""+e}image({text:e}){return""+e}br(){return""}checkbox({raw:e}){return e}};var b=class u{options;renderer;textRenderer;constructor(e){this.options=e||T,this.options.renderer=this.options.renderer||new y,this.renderer=this.options.renderer,this.renderer.options=this.options,this.renderer.parser=this,this.textRenderer=new $}static parse(e,t){return new u(t).parse(e)}static parseInline(e,t){return new u(t).parseInline(e)}parse(e){let t="";for(let n=0;n<e.length;n++){let r=e[n];if(this.options.extensions?.renderers?.[r.type]){let s=r,a=this.options.extensions.renderers[s.type].call({parser:this},s);if(a!==!1||!["space","hr","heading","code","table","blockquote","list","html","def","paragraph","text"].includes(s.type)){t+=a||"";continue}}let i=r;switch(i.type){case"space":{t+=this.renderer.space(i);break}case"hr":{t+=this.renderer.hr(i);break}case"heading":{t+=this.renderer.heading(i);break}case"code":{t+=this.renderer.code(i);break}case"table":{t+=this.renderer.table(i);break}case"blockquote":{t+=this.renderer.blockquote(i);break}case"list":{t+=this.renderer.list(i);break}case"checkbox":{t+=this.renderer.checkbox(i);break}case"html":{t+=this.renderer.html(i);break}case"def":{t+=this.renderer.def(i);break}case"paragraph":{t+=this.renderer.paragraph(i);break}case"text":{t+=this.renderer.text(i);break}default:{let s='Token with "'+i.type+'" type was not found.';if(this.options.silent)return console.error(s),"";throw new Error(s)}}}return t}parseInline(e,t=this.renderer){let n="";for(let r=0;r<e.length;r++){let i=e[r];if(this.options.extensions?.renderers?.[i.type]){let a=this.options.extensions.renderers[i.type].call({parser:this},i);if(a!==!1||!["escape","html","link","image","strong","em","codespan","br","del","text"].includes(i.type)){n+=a||"";continue}}let s=i;switch(s.type){case"escape":{n+=t.text(s);break}case"html":{n+=t.html(s);break}case"link":{n+=t.link(s);break}case"image":{n+=t.image(s);break}case"checkbox":{n+=t.checkbox(s);break}case"strong":{n+=t.strong(s);break}case"em":{n+=t.em(s);break}case"codespan":{n+=t.codespan(s);break}case"br":{n+=t.br(s);break}case"del":{n+=t.del(s);break}case"text":{n+=t.text(s);break}default:{let a='Token with "'+s.type+'" type was not found.';if(this.options.silent)return console.error(a),"";throw new Error(a)}}}return n}};var P=class{options;block;constructor(e){this.options=e||T}static passThroughHooks=new Set(["preprocess","postprocess","processAllTokens","emStrongMask"]);static passThroughHooksRespectAsync=new Set(["preprocess","postprocess","processAllTokens"]);preprocess(e){return e}postprocess(e){return e}processAllTokens(e){return e}emStrongMask(e){return e}provideLexer(){return this.block?x.lex:x.lexInline}provideParser(){return this.block?b.parse:b.parseInline}};var B=class{defaults=M();options=this.setOptions;parse=this.parseMarkdown(!0);parseInline=this.parseMarkdown(!1);Parser=b;Renderer=y;TextRenderer=$;Lexer=x;Tokenizer=w;Hooks=P;constructor(...e){this.use(...e)}walkTokens(e,t){let n=[];for(let r of e)switch(n=n.concat(t.call(this,r)),r.type){case"table":{let i=r;for(let s of i.header)n=n.concat(this.walkTokens(s.tokens,t));for(let s of i.rows)for(let a of s)n=n.concat(this.walkTokens(a.tokens,t));break}case"list":{let i=r;n=n.concat(this.walkTokens(i.items,t));break}default:{let i=r;this.defaults.extensions?.childTokens?.[i.type]?this.defaults.extensions.childTokens[i.type].forEach(s=>{let a=i[s].flat(1/0);n=n.concat(this.walkTokens(a,t))}):i.tokens&&(n=n.concat(this.walkTokens(i.tokens,t)))}}return n}use(...e){let t=this.defaults.extensions||{renderers:{},childTokens:{}};return e.forEach(n=>{let r={...n};if(r.async=this.defaults.async||r.async||!1,n.extensions&&(n.extensions.forEach(i=>{if(!i.name)throw new Error("extension name required");if("renderer"in i){let s=t.renderers[i.name];s?t.renderers[i.name]=function(...a){let o=i.renderer.apply(this,a);return o===!1&&(o=s.apply(this,a)),o}:t.renderers[i.name]=i.renderer}if("tokenizer"in i){if(!i.level||i.level!=="block"&&i.level!=="inline")throw new Error("extension level must be 'block' or 'inline'");let s=t[i.level];s?s.unshift(i.tokenizer):t[i.level]=[i.tokenizer],i.start&&(i.level==="block"?t.startBlock?t.startBlock.push(i.start):t.startBlock=[i.start]:i.level==="inline"&&(t.startInline?t.startInline.push(i.start):t.startInline=[i.start]))}"childTokens"in i&&i.childTokens&&(t.childTokens[i.name]=i.childTokens)}),r.extensions=t),n.renderer){let i=this.defaults.renderer||new y(this.defaults);for(let s in n.renderer){if(!(s in i))throw new Error(`renderer '${s}' does not exist`);if(["options","parser"].includes(s))continue;let a=s,o=n.renderer[a],l=i[a];i[a]=(...p)=>{let c=o.apply(i,p);return c===!1&&(c=l.apply(i,p)),c||""}}r.renderer=i}if(n.tokenizer){let i=this.defaults.tokenizer||new w(this.defaults);for(let s in n.tokenizer){if(!(s in i))throw new Error(`tokenizer '${s}' does not exist`);if(["options","rules","lexer"].includes(s))continue;let a=s,o=n.tokenizer[a],l=i[a];i[a]=(...p)=>{let c=o.apply(i,p);return c===!1&&(c=l.apply(i,p)),c}}r.tokenizer=i}if(n.hooks){let i=this.defaults.hooks||new P;for(let s in n.hooks){if(!(s in i))throw new Error(`hook '${s}' does not exist`);if(["options","block"].includes(s))continue;let a=s,o=n.hooks[a],l=i[a];P.passThroughHooks.has(s)?i[a]=p=>{if(this.defaults.async&&P.passThroughHooksRespectAsync.has(s))return(async()=>{let d=await o.call(i,p);return l.call(i,d)})();let c=o.call(i,p);return l.call(i,c)}:i[a]=(...p)=>{if(this.defaults.async)return(async()=>{let d=await o.apply(i,p);return d===!1&&(d=await l.apply(i,p)),d})();let c=o.apply(i,p);return c===!1&&(c=l.apply(i,p)),c}}r.hooks=i}if(n.walkTokens){let i=this.defaults.walkTokens,s=n.walkTokens;r.walkTokens=function(a){let o=[];return o.push(s.call(this,a)),i&&(o=o.concat(i.call(this,a))),o}}this.defaults={...this.defaults,...r}}),this}setOptions(e){return this.defaults={...this.defaults,...e},this}lexer(e,t){return x.lex(e,t??this.defaults)}parser(e,t){return b.parse(e,t??this.defaults)}parseMarkdown(e){return(n,r)=>{let i={...r},s={...this.defaults,...i},a=this.onError(!!s.silent,!!s.async);if(this.defaults.async===!0&&i.async===!1)return a(new Error("marked(): The async option was set to true by an extension. Remove async: false from the parse options object to return a Promise."));if(typeof n>"u"||n===null)return a(new Error("marked(): input parameter is undefined or null"));if(typeof n!="string")return a(new Error("marked(): input parameter is of type "+Object.prototype.toString.call(n)+", string expected"));if(s.hooks&&(s.hooks.options=s,s.hooks.block=e),s.async)return(async()=>{let o=s.hooks?await s.hooks.preprocess(n):n,p=await(s.hooks?await s.hooks.provideLexer():e?x.lex:x.lexInline)(o,s),c=s.hooks?await s.hooks.processAllTokens(p):p;s.walkTokens&&await Promise.all(this.walkTokens(c,s.walkTokens));let h=await(s.hooks?await s.hooks.provideParser():e?b.parse:b.parseInline)(c,s);return s.hooks?await s.hooks.postprocess(h):h})().catch(a);try{s.hooks&&(n=s.hooks.preprocess(n));let l=(s.hooks?s.hooks.provideLexer():e?x.lex:x.lexInline)(n,s);s.hooks&&(l=s.hooks.processAllTokens(l)),s.walkTokens&&this.walkTokens(l,s.walkTokens);let c=(s.hooks?s.hooks.provideParser():e?b.parse:b.parseInline)(l,s);return s.hooks&&(c=s.hooks.postprocess(c)),c}catch(o){return a(o)}}}onError(e,t){return n=>{if(n.message+=`
106595
- Please report this to https://github.com/markedjs/marked.`,e){let r="<p>An error occurred:</p><pre>"+O(n.message+"",!0)+"</pre>";return t?Promise.resolve(r):r}if(t)return Promise.reject(n);throw n}}};var L=new B;function g(u,e){return L.parse(u,e)}g.options=g.setOptions=function(u){return L.setOptions(u),g.defaults=L.defaults,H(g.defaults),g};g.getDefaults=M;g.defaults=T;g.use=function(...u){return L.use(...u),g.defaults=L.defaults,H(g.defaults),g};g.walkTokens=function(u,e){return L.walkTokens(u,e)};g.parseInline=L.parseInline;g.Parser=b;g.parser=b.parse;g.Renderer=y;g.TextRenderer=$;g.Lexer=x;g.lexer=x.lex;g.Tokenizer=w;g.Hooks=P;g.parse=g;var Ut=g.options,Kt=g.setOptions,Wt=g.use,Xt=g.walkTokens,Jt=g.parseInline,Vt=g,Yt=b.parse,en=x.lex;
106971
+ `}strong({tokens:e}){return`<strong>${this.parser.parseInline(e)}</strong>`}em({tokens:e}){return`<em>${this.parser.parseInline(e)}</em>`}codespan({text:e}){return`<code>${O(e,!0)}</code>`}br(e){return"<br>"}del({tokens:e}){return`<del>${this.parser.parseInline(e)}</del>`}link({href:e,title:t,tokens:n}){let r=this.parser.parseInline(n),i=J(e);if(i===null)return r;e=i;let s='<a href="'+e+'"';return t&&(s+=' title="'+O(t)+'"'),s+=">"+r+"</a>",s}image({href:e,title:t,text:n,tokens:r}){r&&(n=this.parser.parseInline(r,this.parser.textRenderer));let i=J(e);if(i===null)return O(n);e=i;let s=`<img src="${e}" alt="${O(n)}"`;return t&&(s+=` title="${O(t)}"`),s+=">",s}text(e){return"tokens"in e&&e.tokens?this.parser.parseInline(e.tokens):"escaped"in e&&e.escaped?e.text:O(e.text)}};var $=class{strong({text:e}){return e}em({text:e}){return e}codespan({text:e}){return e}del({text:e}){return e}html({text:e}){return e}text({text:e}){return e}link({text:e}){return""+e}image({text:e}){return""+e}br(){return""}checkbox({raw:e}){return e}};var b=class u{options;renderer;textRenderer;constructor(e){this.options=e||T,this.options.renderer=this.options.renderer||new y,this.renderer=this.options.renderer,this.renderer.options=this.options,this.renderer.parser=this,this.textRenderer=new $}static parse(e,t){return new u(t).parse(e)}static parseInline(e,t){return new u(t).parseInline(e)}parse(e){this.renderer.parser=this;let t="";for(let n=0;n<e.length;n++){let r=e[n];if(this.options.extensions?.renderers?.[r.type]){let s=r,a=this.options.extensions.renderers[s.type].call({parser:this},s);if(a!==!1||!["space","hr","heading","code","table","blockquote","list","html","def","paragraph","text"].includes(s.type)){t+=a||"";continue}}let i=r;switch(i.type){case"space":{t+=this.renderer.space(i);break}case"hr":{t+=this.renderer.hr(i);break}case"heading":{t+=this.renderer.heading(i);break}case"code":{t+=this.renderer.code(i);break}case"table":{t+=this.renderer.table(i);break}case"blockquote":{t+=this.renderer.blockquote(i);break}case"list":{t+=this.renderer.list(i);break}case"checkbox":{t+=this.renderer.checkbox(i);break}case"html":{t+=this.renderer.html(i);break}case"def":{t+=this.renderer.def(i);break}case"paragraph":{t+=this.renderer.paragraph(i);break}case"text":{t+=this.renderer.text(i);break}default:{let s='Token with "'+i.type+'" type was not found.';if(this.options.silent)return console.error(s),"";throw new Error(s)}}}return t}parseInline(e,t=this.renderer){this.renderer.parser=this;let n="";for(let r=0;r<e.length;r++){let i=e[r];if(this.options.extensions?.renderers?.[i.type]){let a=this.options.extensions.renderers[i.type].call({parser:this},i);if(a!==!1||!["escape","html","link","image","strong","em","codespan","br","del","text"].includes(i.type)){n+=a||"";continue}}let s=i;switch(s.type){case"escape":{n+=t.text(s);break}case"html":{n+=t.html(s);break}case"link":{n+=t.link(s);break}case"image":{n+=t.image(s);break}case"checkbox":{n+=t.checkbox(s);break}case"strong":{n+=t.strong(s);break}case"em":{n+=t.em(s);break}case"codespan":{n+=t.codespan(s);break}case"br":{n+=t.br(s);break}case"del":{n+=t.del(s);break}case"text":{n+=t.text(s);break}default:{let a='Token with "'+s.type+'" type was not found.';if(this.options.silent)return console.error(a),"";throw new Error(a)}}}return n}};var P=class{options;block;constructor(e){this.options=e||T}static passThroughHooks=new Set(["preprocess","postprocess","processAllTokens","emStrongMask"]);static passThroughHooksRespectAsync=new Set(["preprocess","postprocess","processAllTokens"]);preprocess(e){return e}postprocess(e){return e}processAllTokens(e){return e}emStrongMask(e){return e}provideLexer(){return this.block?x.lex:x.lexInline}provideParser(){return this.block?b.parse:b.parseInline}};var D=class{defaults=M();options=this.setOptions;parse=this.parseMarkdown(!0);parseInline=this.parseMarkdown(!1);Parser=b;Renderer=y;TextRenderer=$;Lexer=x;Tokenizer=w;Hooks=P;constructor(...e){this.use(...e)}walkTokens(e,t){let n=[];for(let r of e)switch(n=n.concat(t.call(this,r)),r.type){case"table":{let i=r;for(let s of i.header)n=n.concat(this.walkTokens(s.tokens,t));for(let s of i.rows)for(let a of s)n=n.concat(this.walkTokens(a.tokens,t));break}case"list":{let i=r;n=n.concat(this.walkTokens(i.items,t));break}default:{let i=r;this.defaults.extensions?.childTokens?.[i.type]?this.defaults.extensions.childTokens[i.type].forEach(s=>{let a=i[s].flat(1/0);n=n.concat(this.walkTokens(a,t))}):i.tokens&&(n=n.concat(this.walkTokens(i.tokens,t)))}}return n}use(...e){let t=this.defaults.extensions||{renderers:{},childTokens:{}};return e.forEach(n=>{let r={...n};if(r.async=this.defaults.async||r.async||!1,n.extensions&&(n.extensions.forEach(i=>{if(!i.name)throw new Error("extension name required");if("renderer"in i){let s=t.renderers[i.name];s?t.renderers[i.name]=function(...a){let o=i.renderer.apply(this,a);return o===!1&&(o=s.apply(this,a)),o}:t.renderers[i.name]=i.renderer}if("tokenizer"in i){if(!i.level||i.level!=="block"&&i.level!=="inline")throw new Error("extension level must be 'block' or 'inline'");let s=t[i.level];s?s.unshift(i.tokenizer):t[i.level]=[i.tokenizer],i.start&&(i.level==="block"?t.startBlock?t.startBlock.push(i.start):t.startBlock=[i.start]:i.level==="inline"&&(t.startInline?t.startInline.push(i.start):t.startInline=[i.start]))}"childTokens"in i&&i.childTokens&&(t.childTokens[i.name]=i.childTokens)}),r.extensions=t),n.renderer){let i=this.defaults.renderer||new y(this.defaults);for(let s in n.renderer){if(!(s in i))throw new Error(`renderer '${s}' does not exist`);if(["options","parser"].includes(s))continue;let a=s,o=n.renderer[a],l=i[a];i[a]=(...p)=>{let c=o.apply(i,p);return c===!1&&(c=l.apply(i,p)),c||""}}r.renderer=i}if(n.tokenizer){let i=this.defaults.tokenizer||new w(this.defaults);for(let s in n.tokenizer){if(!(s in i))throw new Error(`tokenizer '${s}' does not exist`);if(["options","rules","lexer"].includes(s))continue;let a=s,o=n.tokenizer[a],l=i[a];i[a]=(...p)=>{let c=o.apply(i,p);return c===!1&&(c=l.apply(i,p)),c}}r.tokenizer=i}if(n.hooks){let i=this.defaults.hooks||new P;for(let s in n.hooks){if(!(s in i))throw new Error(`hook '${s}' does not exist`);if(["options","block"].includes(s))continue;let a=s,o=n.hooks[a],l=i[a];P.passThroughHooks.has(s)?i[a]=p=>{if(this.defaults.async&&P.passThroughHooksRespectAsync.has(s))return(async()=>{let d=await o.call(i,p);return l.call(i,d)})();let c=o.call(i,p);return l.call(i,c)}:i[a]=(...p)=>{if(this.defaults.async)return(async()=>{let d=await o.apply(i,p);return d===!1&&(d=await l.apply(i,p)),d})();let c=o.apply(i,p);return c===!1&&(c=l.apply(i,p)),c}}r.hooks=i}if(n.walkTokens){let i=this.defaults.walkTokens,s=n.walkTokens;r.walkTokens=function(a){let o=[];return o.push(s.call(this,a)),i&&(o=o.concat(i.call(this,a))),o}}this.defaults={...this.defaults,...r}}),this}setOptions(e){return this.defaults={...this.defaults,...e},this}lexer(e,t){return x.lex(e,t??this.defaults)}parser(e,t){return b.parse(e,t??this.defaults)}parseMarkdown(e){return(n,r)=>{let i={...r},s={...this.defaults,...i},a=this.onError(!!s.silent,!!s.async);if(this.defaults.async===!0&&i.async===!1)return a(new Error("marked(): The async option was set to true by an extension. Remove async: false from the parse options object to return a Promise."));if(typeof n>"u"||n===null)return a(new Error("marked(): input parameter is undefined or null"));if(typeof n!="string")return a(new Error("marked(): input parameter is of type "+Object.prototype.toString.call(n)+", string expected"));if(s.hooks&&(s.hooks.options=s,s.hooks.block=e),s.async)return(async()=>{let o=s.hooks?await s.hooks.preprocess(n):n,p=await(s.hooks?await s.hooks.provideLexer():e?x.lex:x.lexInline)(o,s),c=s.hooks?await s.hooks.processAllTokens(p):p;s.walkTokens&&await Promise.all(this.walkTokens(c,s.walkTokens));let h=await(s.hooks?await s.hooks.provideParser():e?b.parse:b.parseInline)(c,s);return s.hooks?await s.hooks.postprocess(h):h})().catch(a);try{s.hooks&&(n=s.hooks.preprocess(n));let l=(s.hooks?s.hooks.provideLexer():e?x.lex:x.lexInline)(n,s);s.hooks&&(l=s.hooks.processAllTokens(l)),s.walkTokens&&this.walkTokens(l,s.walkTokens);let c=(s.hooks?s.hooks.provideParser():e?b.parse:b.parseInline)(l,s);return s.hooks&&(c=s.hooks.postprocess(c)),c}catch(o){return a(o)}}}onError(e,t){return n=>{if(n.message+=`
106972
+ Please report this to https://github.com/markedjs/marked.`,e){let r="<p>An error occurred:</p><pre>"+O(n.message+"",!0)+"</pre>";return t?Promise.resolve(r):r}if(t)return Promise.reject(n);throw n}}};var L=new D;function g(u,e){return L.parse(u,e)}g.options=g.setOptions=function(u){return L.setOptions(u),g.defaults=L.defaults,G(g.defaults),g};g.getDefaults=M;g.defaults=T;g.use=function(...u){return L.use(...u),g.defaults=L.defaults,G(g.defaults),g};g.walkTokens=function(u,e){return L.walkTokens(u,e)};g.parseInline=L.parseInline;g.Parser=b;g.parser=b.parse;g.Renderer=y;g.TextRenderer=$;g.Lexer=x;g.lexer=x.lex;g.Tokenizer=w;g.Hooks=P;g.parse=g;var Qt=g.options,jt=g.setOptions,Ft=g.use,Ut=g.walkTokens,Kt=g.parseInline,Wt=g,Xt=b.parse,Jt=x.lex;
106596
106973
  //# sourceMappingURL=marked.esm.js.map
106597
106974
 
106598
106975
 
@@ -113471,6 +113848,9 @@ function createProfileLogic(store, authn, utilityLogic) {
113471
113848
 
113472
113849
  function createTypeIndexLogic(store, authn, profileLogic, utilityLogic) {
113473
113850
  const ns = ns_ns;
113851
+ function isAbsoluteHttpUri(uri) {
113852
+ return !!uri && (uri.startsWith('https://') || uri.startsWith('http://'));
113853
+ }
113474
113854
  function getRegistrations(instance, theClass) {
113475
113855
  return store
113476
113856
  .each(undefined, ns.solid('instance'), instance)
@@ -113563,14 +113943,23 @@ function createTypeIndexLogic(store, authn, profileLogic, utilityLogic) {
113563
113943
  const communities = store.each(user, ns.solid('community'), undefined, preferencesFile).concat(store.each(user, ns.solid('community'), undefined, user.doc()));
113564
113944
  let result = [];
113565
113945
  for (const org of communities) {
113566
- result = result.concat(await loadTypeIndexesFor(org));
113946
+ if (org.termType !== 'NamedNode' || !isAbsoluteHttpUri(org.uri)) {
113947
+ warn(`Skipping malformed community node for ${user}: ${org}`);
113948
+ continue;
113949
+ }
113950
+ try {
113951
+ result = result.concat(await loadTypeIndexesFor(org));
113952
+ }
113953
+ catch (err) {
113954
+ warn(`Skipping community type indexes for ${org.uri}: ${err}`);
113955
+ }
113567
113956
  }
113568
113957
  return result;
113569
113958
  }
113570
113959
  return []; // No communities
113571
113960
  }
113572
113961
  async function loadAllTypeIndexes(user) {
113573
- return (await loadTypeIndexesFor(user)).concat((await loadCommunityTypeIndexes(user)).flat());
113962
+ return (await loadTypeIndexesFor(user)).concat(await loadCommunityTypeIndexes(user));
113574
113963
  }
113575
113964
  async function getScopedAppInstances(klass, user) {
113576
113965
  const scopes = await loadAllTypeIndexes(user);
@@ -113594,11 +113983,11 @@ function createTypeIndexLogic(store, authn, profileLogic, utilityLogic) {
113594
113983
  function docDirUri(node) {
113595
113984
  const doc = node.doc();
113596
113985
  const dir = doc.dir();
113597
- if (dir === null || dir === void 0 ? void 0 : dir.uri)
113986
+ if ((dir === null || dir === void 0 ? void 0 : dir.uri) && isAbsoluteHttpUri(dir.uri))
113598
113987
  return dir.uri;
113599
113988
  const docUri = doc.uri;
113600
- if (!docUri) {
113601
- log(`docDirUri: missing doc uri for ${node === null || node === void 0 ? void 0 : node.uri}`);
113989
+ if (!docUri || !isAbsoluteHttpUri(docUri)) {
113990
+ log(`docDirUri: missing or non-http(s) doc uri for ${node === null || node === void 0 ? void 0 : node.uri}`);
113602
113991
  return null;
113603
113992
  }
113604
113993
  const withoutFragment = docUri.split('#')[0];
@@ -114365,32 +114754,38 @@ var dist = __webpack_require__(7523);
114365
114754
  var solid_logic_esm = __webpack_require__(9332);
114366
114755
  ;// ./src/versionInfo.ts
114367
114756
  /* harmony default export */ const versionInfo = ({
114368
- buildTime: '2026-02-23T18:38:59Z',
114369
- commit: 'e1941a6329a0d2666cfebf1fca9a73fdd04fd20e',
114757
+ buildTime: '2026-03-23T14:34:25Z',
114758
+ commit: 'e3cab069577b9b440fa3652d96ae4f2bb3229f96',
114370
114759
  npmInfo: {
114371
- 'mashlib': '2.1.3',
114372
- 'npm': '10.8.2',
114373
- 'node': '20.20.0',
114760
+ 'mashlib': '2.1.4',
114761
+ 'npm': '10.9.4',
114762
+ 'node': '22.22.1',
114374
114763
  'acorn': '8.15.0',
114375
114764
  'ada': '2.9.2',
114765
+ 'amaro': '1.1.5',
114376
114766
  'ares': '1.34.6',
114377
114767
  'brotli': '1.1.0',
114378
- 'cjs_module_lexer': '2.1.0',
114379
- 'cldr': '47.0',
114380
- 'icu': '77.1',
114768
+ 'cjs_module_lexer': '2.2.0',
114769
+ 'cldr': '48.0',
114770
+ 'icu': '78.2',
114381
114771
  'llhttp': '9.3.0',
114382
- 'modules': '115',
114383
- 'napi': '9',
114384
- 'nghttp2': '1.61.0',
114385
- 'openssl': '3.0.17',
114772
+ 'modules': '127',
114773
+ 'napi': '10',
114774
+ 'nbytes': '0.1.1',
114775
+ 'ncrypto': '0.0.1',
114776
+ 'nghttp2': '1.64.0',
114777
+ 'openssl': '3.5.5',
114778
+ 'simdjson': '4.2.4',
114386
114779
  'simdutf': '6.4.2',
114387
- 'tz': '2025b',
114780
+ 'sqlite': '3.51.2',
114781
+ 'tz': '2025c',
114388
114782
  'undici': '6.23.0',
114389
- 'unicode': '16.0',
114390
- 'uv': '1.46.0',
114783
+ 'unicode': '17.0',
114784
+ 'uv': '1.51.0',
114391
114785
  'uvwasi': '0.0.23',
114392
- 'v8': '11.3.244.8-node.33',
114393
- 'zlib': '1.3.1-470d3a2'
114786
+ 'v8': '12.4.254.21-node.35',
114787
+ 'zlib': '1.3.1-e00f703',
114788
+ 'zstd': '1.5.7'
114394
114789
  }
114395
114790
  });
114396
114791
  ;// ./src/styles/mash.css