solid-panes 4.4.2-3 → 4.4.2-4

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.
Files changed (41) hide show
  1. package/dist/_virtual/~icons/lucide/help-circle.cjs.js +2 -0
  2. package/dist/_virtual/~icons/lucide/help-circle.cjs.js.map +1 -0
  3. package/dist/_virtual/~icons/lucide/help-circle.esm.js +11 -0
  4. package/dist/_virtual/~icons/lucide/help-circle.esm.js.map +1 -0
  5. package/dist/components/header/Header.cjs.js +19 -0
  6. package/dist/components/header/Header.cjs.js.map +1 -0
  7. package/dist/components/header/Header.esm.js +228 -0
  8. package/dist/components/header/Header.esm.js.map +1 -0
  9. package/dist/components/header/Header.styles.cjs.js +2 -0
  10. package/dist/components/header/Header.styles.cjs.js.map +1 -0
  11. package/dist/components/header/Header.styles.esm.js +7 -0
  12. package/dist/components/header/Header.styles.esm.js.map +1 -0
  13. package/dist/components/header/index.cjs.js +1 -0
  14. package/dist/components/header/index.esm.js +1 -0
  15. package/dist/dashboard/dashboardPane.cjs.js +2 -0
  16. package/dist/dashboard/dashboardPane.cjs.js.map +1 -0
  17. package/dist/dashboard/dashboardPane.esm.js +7 -0
  18. package/dist/dashboard/dashboardPane.esm.js.map +1 -0
  19. package/dist/dashboard/homepage.cjs.js +2 -0
  20. package/dist/dashboard/homepage.cjs.js.map +1 -0
  21. package/dist/dashboard/homepage.esm.js +26 -0
  22. package/dist/dashboard/homepage.esm.js.map +1 -0
  23. package/dist/mainPage/header.cjs.js +1 -1
  24. package/dist/mainPage/header.cjs.js.map +1 -1
  25. package/dist/mainPage/header.esm.js +1 -0
  26. package/dist/mainPage/header.esm.js.map +1 -1
  27. package/dist/registerPanes.cjs.js +1 -1
  28. package/dist/registerPanes.cjs.js.map +1 -1
  29. package/dist/registerPanes.esm.js +1 -0
  30. package/dist/registerPanes.esm.js.map +1 -1
  31. package/dist/social/editProfileDetails.cjs.js +1 -1
  32. package/dist/social/editProfileDetails.cjs.js.map +1 -1
  33. package/dist/social/editProfileDetails.esm.js +2 -0
  34. package/dist/social/editProfileDetails.esm.js.map +1 -1
  35. package/dist/social/spinner.cjs.js +1 -0
  36. package/dist/social/spinner.esm.js +1 -0
  37. package/dist/versionInfo.cjs.js +1 -1
  38. package/dist/versionInfo.cjs.js.map +1 -1
  39. package/dist/versionInfo.esm.js +3 -3
  40. package/dist/versionInfo.esm.js.map +1 -1
  41. package/package.json +2 -5
@@ -0,0 +1,2 @@
1
+ var e=class extends HTMLElement{constructor(){super(),this.attachShadow({mode:`open`}).innerHTML=`<style>:host { display: inline-flex; }</style><svg viewBox="0 0 24 24" width="100%" height="100%" ><g fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"><circle cx="12" cy="12" r="10"/><path d="M9.09 9a3 3 0 0 1 5.83 1c0 2-3 3-3 3m.08 4h.01"/></g></svg>`}};customElements.get(`icon-lucide-help-circle`)||customElements.define(`icon-lucide-help-circle`,e),exports.default=e;
2
+ //# sourceMappingURL=help-circle.cjs.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"help-circle.cjs.js","names":[],"sources":[],"mappings":""}
@@ -0,0 +1,11 @@
1
+ //#region ~icons/lucide/help-circle
2
+ var e = class extends HTMLElement {
3
+ constructor() {
4
+ super(), this.attachShadow({ mode: "open" }).innerHTML = "<style>:host { display: inline-flex; }</style><svg viewBox=\"0 0 24 24\" width=\"100%\" height=\"100%\" ><g fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\"><circle cx=\"12\" cy=\"12\" r=\"10\"/><path d=\"M9.09 9a3 3 0 0 1 5.83 1c0 2-3 3-3 3m.08 4h.01\"/></g></svg>";
5
+ }
6
+ };
7
+ customElements.get("icon-lucide-help-circle") || customElements.define("icon-lucide-help-circle", e);
8
+ //#endregion
9
+ export { e as default };
10
+
11
+ //# sourceMappingURL=help-circle.esm.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"help-circle.esm.js","names":[],"sources":[],"mappings":""}
@@ -0,0 +1,19 @@
1
+ require("../../_virtual/~icons/lucide/help-circle.cjs.js");const e=require("./Header.styles.cjs.js");let t=require("solid-ui");require("solid-ui/components/button");let n=require("lit"),r=require("lit/decorators.js");require("solid-ui/components/account"),require("solid-ui/components/menu-item"),require("solid-ui/components/menu"),require("solid-ui/components/solid-emblem");var i,a,o,s,c,l,u,d,f,p;function m(e,t,n){h(e,t),t.set(e,n)}function h(e,t){if(t.has(e))throw TypeError(`Cannot initialize the same private elements twice on an object`)}function g(e,t,n){return e.set(v(e,t),n),n}function _(e,t){return e.get(v(e,t))}function v(e,t,n){if(typeof e==`function`?e===t:e.has(t))return arguments.length<3?t:n;throw TypeError(`Private element is not present on this object`)}function y(e,t,n){return(t=x(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function b(e,t,n,r,i,a){function o(e,t,n){return function(r,i){return n&&n(r),e[t].call(r,i)}}function s(e,t){for(var n=0;n<e.length;n++)e[n].call(t);return t}function c(e,t,n,r){if(typeof e!=`function`&&(r||e!==void 0))throw TypeError(t+` must `+(n||`be`)+` a function`+(r?``:` or undefined`));return e}function l(e,t,n,r,i,a,s,l,u,d,f,p,m){function h(e){if(!m(e))throw TypeError(`Attempted to access private element on non-instance`)}var g,_=t[0],v=t[3],y=!l;if(!y){n||Array.isArray(_)||(_=[_]);var b={},x=[],S=i===3?`get`:i===4||p?`set`:`value`;d?(f||p?b={get:C(function(){return v(this)},r,`get`),set:function(e){t[4](this,e)}}:b[S]=v,f||C(b[S],r,i===2?``:S)):f||(b=Object.getOwnPropertyDescriptor(e,r))}for(var w=e,T=_.length-1;T>=0;T-=n?2:1){var E=_[T],D=n?_[T-1]:void 0,O={},k={kind:[`field`,`accessor`,`method`,`getter`,`setter`,`class`][i],name:r,metadata:a,addInitializer:function(e,t){if(e.v)throw Error(`attempted to call addInitializer after decoration was finished`);c(t,`An initializer`,`be`,!0),s.push(t)}.bind(null,O)};try{if(y)(g=c(E.call(D,w,k),`class decorators`,`return`))&&(w=g);else{var A,j;k.static=u,k.private=d,d?i===2?A=function(e){return h(e),b.value}:(i<4&&(A=o(b,`get`,h)),i!==3&&(j=o(b,`set`,h))):(A=function(e){return e[r]},(i<2||i===4)&&(j=function(e,t){e[r]=t}));var M=k.access={has:d?m.bind():function(e){return r in e}};if(A&&(M.get=A),j&&(M.set=j),w=E.call(D,p?{get:b.get,set:b.set}:b[S],k),p){if(typeof w==`object`&&w)(g=c(w.get,`accessor.get`))&&(b.get=g),(g=c(w.set,`accessor.set`))&&(b.set=g),(g=c(w.init,`accessor.init`))&&x.push(g);else if(w!==void 0)throw TypeError(`accessor decorators must return an object with get, set, or init properties or void 0`)}else c(w,(f?`field`:`method`)+` decorators`,`return`)&&(f?x.push(w):b[S]=w)}}finally{O.v=!0}}return(f||p)&&l.push(function(e,t){for(var n=x.length-1;n>=0;n--)t=x[n].call(e,t);return t}),f||y||(d?p?l.push(o(b,`get`),o(b,`set`)):l.push(i===2?b[S]:o.call.bind(b[S])):Object.defineProperty(e,r,b)),w}function u(e,t){return Object.defineProperty(e,Symbol.metadata||Symbol.for(`Symbol.metadata`),{configurable:!0,enumerable:!0,value:t})}if(arguments.length>=6)var d=a[Symbol.metadata||Symbol.for(`Symbol.metadata`)];var f=Object.create(d??null),p=function(e,t,n,r){var i,a,o=[],c=function(t){return w(t)===e},u=new Map;function d(e){e&&o.push(s.bind(null,e))}for(var f=0;f<t.length;f++){var p=t[f];if(Array.isArray(p)){var m=p[1],h=p[2],g=p.length>3,_=16&m,v=!!(8&m),y=(m&=7)==0,b=h+`/`+v;if(!y&&!g){var S=u.get(b);if(!0===S||S===3&&m!==4||S===4&&m!==3)throw Error(`Attempted to decorate a public method/accessor that has the same name as a previously decorated public method/accessor. This is not currently supported by the decorators plugin. Property name was: `+h);u.set(b,!(m>2)||m)}l(v?e:e.prototype,p,_,g?`#`+h:x(h),m,r,v?a||=[]:i||=[],o,v,g,y,m===1,v&&g?c:n)}}return d(i),d(a),o}(e,t,i,f);return n.length||u(e,f),{e:p,get c(){var t=[];return n.length&&[u(l(e,[n],r,e.name,5,f,t),f),s.bind(null,t,e)]}}}function x(e){var t=S(e,`string`);return typeof t==`symbol`?t:t+``}function S(e,t){if(typeof e!=`object`||!e)return e;var n=e[Symbol.toPrimitive];if(n!==void 0){var r=n.call(e,t||`default`);if(typeof r!=`object`)return r;throw TypeError(`@@toPrimitive must return a primitive value.`)}return(t===`string`?String:Number)(e)}function C(e,t,n){typeof t==`symbol`&&(t=(t=t.description)?`[`+t+`]`:``);try{Object.defineProperty(e,"name",{configurable:!0,value:n?n+` `+t:t})}catch{}return e}function w(e){if(Object(e)!==e)throw TypeError(`right-hand side of 'in' should be an object, got `+(e===null?`null`:typeof e));return e}function T(e){return e}l=[(0,t.customElement)(`solid-panes-header`)];var E;new(f=(o=new WeakMap,p=(u=(0,r.property)({type:Array}),`menuItems`),a=class extends t.WebComponent{constructor(...e){super(...e),m(this,o,(s(this),d(this,[])))}get[p](){return _(o,this)}set menuItems(e){g(o,this,e)}render(){return n.html`
2
+ <a href="/" class="logo">
3
+ <span class="sr-only">Home</span>
4
+ <solid-ui-solid-emblem></solid-ui-solid-emblem>
5
+ </a>
6
+ <div class="spacer"></div>
7
+ <solid-ui-account .menuItems=${this.menuItems}></solid-ui-account>
8
+ <span class="separator"></span>
9
+ <solid-ui-menu placement="bottom-end" distance="5">
10
+ <solid-ui-button slot="trigger" variant="ghost" title="Open help">
11
+ <span class="sr-only">Open help</span>
12
+ <icon-lucide-help-circle slot="icon"></icon-lucide-help-circle>
13
+ </solid-ui-button>
14
+
15
+ <solid-ui-menu-item href="https://solidos.github.io/userguide/">User guide</solid-ui-menu-item>
16
+ <solid-ui-menu-item href="https://github.com/solidos/solidos/issues">Report a problem</solid-ui-menu-item>
17
+ </solid-ui-menu>
18
+ `}},{e:[d,s],c:[E,c]}=b(a,[[u,1,`menuItems`]],l,0,void 0,t.WebComponent),a),i=class extends T{constructor(){super(E),y(this,`styles`,e.default),c()}},y(i,f,void 0),i),Object.defineProperty(exports,"default",{enumerable:!0,get:function(){return E}});
19
+ //# sourceMappingURL=Header.cjs.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Header.cjs.js","names":["customElement","WebComponent","html","property","styles","_classDecs","_Header","_Header2","_A","WeakMap","_ref","_menuItemsDecs","type","Array","_Header3","Header","constructor","args","_classPrivateFieldInitSpec","_initProto","_init_menuItems","_classPrivateFieldGet","menuItems","v","_classPrivateFieldSet","render","e","c","_initClass","_applyDecs","_Class","_identity","_defineProperty","default"],"sources":["../../../src/components/header/Header.ts"],"sourcesContent":["import { customElement, WebComponent } from 'solid-ui'\nimport { html } from 'lit'\nimport { property } from 'lit/decorators.js'\nimport type { AccountMenuItem } from 'solid-ui/components/account'\n\nimport 'solid-ui/components/account'\nimport 'solid-ui/components/button'\nimport 'solid-ui/components/menu-item'\nimport 'solid-ui/components/menu'\nimport 'solid-ui/components/solid-emblem'\nimport '~icons/lucide/help-circle'\n\nimport styles from './Header.styles.css'\n\n@customElement('solid-panes-header')\nexport default class Header extends WebComponent {\n static styles = styles\n\n @property({ type: Array })\n accessor menuItems: AccountMenuItem[] = []\n\n render () {\n return html`\n <a href=\"/\" class=\"logo\">\n <span class=\"sr-only\">Home</span>\n <solid-ui-solid-emblem></solid-ui-solid-emblem>\n </a>\n <div class=\"spacer\"></div>\n <solid-ui-account .menuItems=${this.menuItems}></solid-ui-account>\n <span class=\"separator\"></span>\n <solid-ui-menu placement=\"bottom-end\" distance=\"5\">\n <solid-ui-button slot=\"trigger\" variant=\"ghost\" title=\"Open help\">\n <span class=\"sr-only\">Open help</span>\n <icon-lucide-help-circle slot=\"icon\"></icon-lucide-help-circle>\n </solid-ui-button>\n\n <solid-ui-menu-item href=\"https://solidos.github.io/userguide/\">User guide</solid-ui-menu-item>\n <solid-ui-menu-item href=\"https://github.com/solidos/solidos/issues\">Report a problem</solid-ui-menu-item>\n </solid-ui-menu>\n `\n }\n}\n"],"mappings":"q8IAYwCK,EAAA,EAAA,EAAA,EAAA,cAAA,CAEzB,oBAAoB,CAAC,EAAA,IAAAC,EAAA,IAAAC,GAAAC,EAAA,IAAAC,QAAAC,GAAAC,GAAAA,EAAAA,EAAAA,SAAAA,CAIxB,CAAEC,KAAMC,KAAM,CAAC,EAAC,aAAAC,EAJ5B,cACoCb,EAAAA,YAAa,CAAAe,YAAA,GAAAC,EAAA,CAAA,MAAA,GAAAA,CAAA,EAAAC,EAAA,KAAAV,GAAAW,EAAA,IAAA,EAAAC,EAAA,KAIP,CAAA,CAAE,EAAA,CAAA,CAAA,IAAAV,IAAA,CAAA,OAAAW,EAAAb,EAAA,IAAA,CAAA,CAAA,IAAjCc,UAASC,EAAA,CAAAC,EAAAhB,EAAA,KAAAe,CAAA,CAAA,CAElBE,QAAU,CACR,MAAOvB,GAAAA,IAAI;;;;;;uCAMwB,KAAKoB,UAAS;;;;;;;;;;;KAYnD,CACF,EAAC,CAAAI,EAAA,CAAAN,EAAAD,GAAAQ,EAAA,CAAArB,EAAAsB,IAAAC,EAAAf,EAAA,CAAA,CAAAH,EAAA,EAAA,WAAA,CAAA,EAAAN,EAAA,EAAA,IAAA,GA1BmCJ,EAAAA,YAAY,EAAAa,GAAAgB,EAAA,cAAAC,CAAA,CAAAf,aAAA,CAAA,MAAAV,CAAA,EAAA0B,EAAA,KAAA,SAC9B5B,EAAAA,OAAM,EAAAwB,EAAA,CAAA,CAAA,EAAAI,EAAAF,EAAAvB,EAAA,IAAA,EAAA,EAAAuB"}
@@ -0,0 +1,228 @@
1
+ import "../../_virtual/~icons/lucide/help-circle.esm.js";
2
+ import e from "./Header.styles.esm.js";
3
+ import { WebComponent as t, customElement as n } from "solid-ui";
4
+ import "solid-ui/components/button";
5
+ import { html as r } from "lit";
6
+ import { property as i } from "lit/decorators.js";
7
+ import "solid-ui/components/account";
8
+ import "solid-ui/components/menu-item";
9
+ import "solid-ui/components/menu";
10
+ import "solid-ui/components/solid-emblem";
11
+ //#region src/components/header/Header.ts
12
+ var a, o, s, c, l, u, d, f, p, m;
13
+ function h(e, t, n) {
14
+ g(e, t), t.set(e, n);
15
+ }
16
+ function g(e, t) {
17
+ if (t.has(e)) throw TypeError("Cannot initialize the same private elements twice on an object");
18
+ }
19
+ function _(e, t, n) {
20
+ return e.set(y(e, t), n), n;
21
+ }
22
+ function v(e, t) {
23
+ return e.get(y(e, t));
24
+ }
25
+ function y(e, t, n) {
26
+ if (typeof e == "function" ? e === t : e.has(t)) return arguments.length < 3 ? t : n;
27
+ throw TypeError("Private element is not present on this object");
28
+ }
29
+ function b(e, t, n) {
30
+ return (t = S(t)) in e ? Object.defineProperty(e, t, {
31
+ value: n,
32
+ enumerable: !0,
33
+ configurable: !0,
34
+ writable: !0
35
+ }) : e[t] = n, e;
36
+ }
37
+ function x(e, t, n, r, i, a) {
38
+ function o(e, t, n) {
39
+ return function(r, i) {
40
+ return n && n(r), e[t].call(r, i);
41
+ };
42
+ }
43
+ function s(e, t) {
44
+ for (var n = 0; n < e.length; n++) e[n].call(t);
45
+ return t;
46
+ }
47
+ function c(e, t, n, r) {
48
+ if (typeof e != "function" && (r || e !== void 0)) throw TypeError(t + " must " + (n || "be") + " a function" + (r ? "" : " or undefined"));
49
+ return e;
50
+ }
51
+ function l(e, t, n, r, i, a, s, l, u, d, f, p, m) {
52
+ function h(e) {
53
+ if (!m(e)) throw TypeError("Attempted to access private element on non-instance");
54
+ }
55
+ var g, _ = t[0], v = t[3], y = !l;
56
+ if (!y) {
57
+ n || Array.isArray(_) || (_ = [_]);
58
+ var b = {}, x = [], S = i === 3 ? "get" : i === 4 || p ? "set" : "value";
59
+ d ? (f || p ? b = {
60
+ get: w(function() {
61
+ return v(this);
62
+ }, r, "get"),
63
+ set: function(e) {
64
+ t[4](this, e);
65
+ }
66
+ } : b[S] = v, f || w(b[S], r, i === 2 ? "" : S)) : f || (b = Object.getOwnPropertyDescriptor(e, r));
67
+ }
68
+ for (var C = e, T = _.length - 1; T >= 0; T -= n ? 2 : 1) {
69
+ var E = _[T], D = n ? _[T - 1] : void 0, O = {}, k = {
70
+ kind: [
71
+ "field",
72
+ "accessor",
73
+ "method",
74
+ "getter",
75
+ "setter",
76
+ "class"
77
+ ][i],
78
+ name: r,
79
+ metadata: a,
80
+ addInitializer: function(e, t) {
81
+ if (e.v) throw Error("attempted to call addInitializer after decoration was finished");
82
+ c(t, "An initializer", "be", !0), s.push(t);
83
+ }.bind(null, O)
84
+ };
85
+ try {
86
+ if (y) (g = c(E.call(D, C, k), "class decorators", "return")) && (C = g);
87
+ else {
88
+ var A, j;
89
+ k.static = u, k.private = d, d ? i === 2 ? A = function(e) {
90
+ return h(e), b.value;
91
+ } : (i < 4 && (A = o(b, "get", h)), i !== 3 && (j = o(b, "set", h))) : (A = function(e) {
92
+ return e[r];
93
+ }, (i < 2 || i === 4) && (j = function(e, t) {
94
+ e[r] = t;
95
+ }));
96
+ var M = k.access = { has: d ? m.bind() : function(e) {
97
+ return r in e;
98
+ } };
99
+ if (A && (M.get = A), j && (M.set = j), C = E.call(D, p ? {
100
+ get: b.get,
101
+ set: b.set
102
+ } : b[S], k), p) {
103
+ if (typeof C == "object" && C) (g = c(C.get, "accessor.get")) && (b.get = g), (g = c(C.set, "accessor.set")) && (b.set = g), (g = c(C.init, "accessor.init")) && x.push(g);
104
+ else if (C !== void 0) throw TypeError("accessor decorators must return an object with get, set, or init properties or void 0");
105
+ } else c(C, (f ? "field" : "method") + " decorators", "return") && (f ? x.push(C) : b[S] = C);
106
+ }
107
+ } finally {
108
+ O.v = !0;
109
+ }
110
+ }
111
+ return (f || p) && l.push(function(e, t) {
112
+ for (var n = x.length - 1; n >= 0; n--) t = x[n].call(e, t);
113
+ return t;
114
+ }), f || y || (d ? p ? l.push(o(b, "get"), o(b, "set")) : l.push(i === 2 ? b[S] : o.call.bind(b[S])) : Object.defineProperty(e, r, b)), C;
115
+ }
116
+ function u(e, t) {
117
+ return Object.defineProperty(e, Symbol.metadata || Symbol.for("Symbol.metadata"), {
118
+ configurable: !0,
119
+ enumerable: !0,
120
+ value: t
121
+ });
122
+ }
123
+ if (arguments.length >= 6) var d = a[Symbol.metadata || Symbol.for("Symbol.metadata")];
124
+ var f = Object.create(d ?? null), p = function(e, t, n, r) {
125
+ var i, a, o = [], c = function(t) {
126
+ return T(t) === e;
127
+ }, u = /* @__PURE__ */ new Map();
128
+ function d(e) {
129
+ e && o.push(s.bind(null, e));
130
+ }
131
+ for (var f = 0; f < t.length; f++) {
132
+ var p = t[f];
133
+ if (Array.isArray(p)) {
134
+ var m = p[1], h = p[2], g = p.length > 3, _ = 16 & m, v = !!(8 & m), y = (m &= 7) == 0, b = h + "/" + v;
135
+ if (!y && !g) {
136
+ var x = u.get(b);
137
+ if (!0 === x || x === 3 && m !== 4 || x === 4 && m !== 3) throw Error("Attempted to decorate a public method/accessor that has the same name as a previously decorated public method/accessor. This is not currently supported by the decorators plugin. Property name was: " + h);
138
+ u.set(b, !(m > 2) || m);
139
+ }
140
+ l(v ? e : e.prototype, p, _, g ? "#" + h : S(h), m, r, v ? a ||= [] : i ||= [], o, v, g, y, m === 1, v && g ? c : n);
141
+ }
142
+ }
143
+ return d(i), d(a), o;
144
+ }(e, t, i, f);
145
+ return n.length || u(e, f), {
146
+ e: p,
147
+ get c() {
148
+ var t = [];
149
+ return n.length && [u(l(e, [n], r, e.name, 5, f, t), f), s.bind(null, t, e)];
150
+ }
151
+ };
152
+ }
153
+ function S(e) {
154
+ var t = C(e, "string");
155
+ return typeof t == "symbol" ? t : t + "";
156
+ }
157
+ function C(e, t) {
158
+ if (typeof e != "object" || !e) return e;
159
+ var n = e[Symbol.toPrimitive];
160
+ if (n !== void 0) {
161
+ var r = n.call(e, t || "default");
162
+ if (typeof r != "object") return r;
163
+ throw TypeError("@@toPrimitive must return a primitive value.");
164
+ }
165
+ return (t === "string" ? String : Number)(e);
166
+ }
167
+ function w(e, t, n) {
168
+ typeof t == "symbol" && (t = (t = t.description) ? "[" + t + "]" : "");
169
+ try {
170
+ Object.defineProperty(e, "name", {
171
+ configurable: !0,
172
+ value: n ? n + " " + t : t
173
+ });
174
+ } catch {}
175
+ return e;
176
+ }
177
+ function T(e) {
178
+ if (Object(e) !== e) throw TypeError("right-hand side of 'in' should be an object, got " + (e === null ? "null" : typeof e));
179
+ return e;
180
+ }
181
+ function E(e) {
182
+ return e;
183
+ }
184
+ u = [n("solid-panes-header")];
185
+ var D;
186
+ new (p = (s = /*#__PURE__*/ new WeakMap(), m = (d = i({ type: Array }), "menuItems"), o = class extends t {
187
+ constructor(...e) {
188
+ super(...e), h(this, s, (c(this), f(this, [])));
189
+ }
190
+ get [m]() {
191
+ return v(s, this);
192
+ }
193
+ set menuItems(e) {
194
+ _(s, this, e);
195
+ }
196
+ render() {
197
+ return r`
198
+ <a href="/" class="logo">
199
+ <span class="sr-only">Home</span>
200
+ <solid-ui-solid-emblem></solid-ui-solid-emblem>
201
+ </a>
202
+ <div class="spacer"></div>
203
+ <solid-ui-account .menuItems=${this.menuItems}></solid-ui-account>
204
+ <span class="separator"></span>
205
+ <solid-ui-menu placement="bottom-end" distance="5">
206
+ <solid-ui-button slot="trigger" variant="ghost" title="Open help">
207
+ <span class="sr-only">Open help</span>
208
+ <icon-lucide-help-circle slot="icon"></icon-lucide-help-circle>
209
+ </solid-ui-button>
210
+
211
+ <solid-ui-menu-item href="https://solidos.github.io/userguide/">User guide</solid-ui-menu-item>
212
+ <solid-ui-menu-item href="https://github.com/solidos/solidos/issues">Report a problem</solid-ui-menu-item>
213
+ </solid-ui-menu>
214
+ `;
215
+ }
216
+ }, {e: [f, c], c: [D, l]} = x(o, [[
217
+ d,
218
+ 1,
219
+ "menuItems"
220
+ ]], u, 0, void 0, t), o), a = class extends E {
221
+ constructor() {
222
+ super(D), b(this, "styles", e), l();
223
+ }
224
+ }, b(a, p, void 0), a)();
225
+ //#endregion
226
+ export { D as default };
227
+
228
+ //# sourceMappingURL=Header.esm.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Header.esm.js","names":["customElement","WebComponent","html","property","styles","_classDecs","_Header","_Header2","_A","WeakMap","_ref","_menuItemsDecs","type","Array","_Header3","Header","constructor","args","_classPrivateFieldInitSpec","_initProto","_init_menuItems","_classPrivateFieldGet","menuItems","v","_classPrivateFieldSet","render","e","c","_initClass","_applyDecs","_Class","_identity","_defineProperty","default"],"sources":["../../../src/components/header/Header.ts"],"sourcesContent":["import { customElement, WebComponent } from 'solid-ui'\nimport { html } from 'lit'\nimport { property } from 'lit/decorators.js'\nimport type { AccountMenuItem } from 'solid-ui/components/account'\n\nimport 'solid-ui/components/account'\nimport 'solid-ui/components/button'\nimport 'solid-ui/components/menu-item'\nimport 'solid-ui/components/menu'\nimport 'solid-ui/components/solid-emblem'\nimport '~icons/lucide/help-circle'\n\nimport styles from './Header.styles.css'\n\n@customElement('solid-panes-header')\nexport default class Header extends WebComponent {\n static styles = styles\n\n @property({ type: Array })\n accessor menuItems: AccountMenuItem[] = []\n\n render () {\n return html`\n <a href=\"/\" class=\"logo\">\n <span class=\"sr-only\">Home</span>\n <solid-ui-solid-emblem></solid-ui-solid-emblem>\n </a>\n <div class=\"spacer\"></div>\n <solid-ui-account .menuItems=${this.menuItems}></solid-ui-account>\n <span class=\"separator\"></span>\n <solid-ui-menu placement=\"bottom-end\" distance=\"5\">\n <solid-ui-button slot=\"trigger\" variant=\"ghost\" title=\"Open help\">\n <span class=\"sr-only\">Open help</span>\n <icon-lucide-help-circle slot=\"icon\"></icon-lucide-help-circle>\n </solid-ui-button>\n\n <solid-ui-menu-item href=\"https://solidos.github.io/userguide/\">User guide</solid-ui-menu-item>\n <solid-ui-menu-item href=\"https://github.com/solidos/solidos/issues\">Report a problem</solid-ui-menu-item>\n </solid-ui-menu>\n `\n }\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAYwCK,IAAA,CAEvCL,EAAc,oBAAoB,CAAC;AAAA,IAAAM;AAAA,KAAAC,KAAAC,kBAAA,IAAAC,QAAA,GAAAC,KAAAC,IAIjCR,EAAS,EAAES,MAAMC,MAAM,CAAC,GAAC,cAAAC,IAJ5B,cACoCb,EAAa;CAAAe,YAAA,GAAAC,GAAA;EAAAC,AAAA,MAAA,GAAAD,CAAA,GAAAC,EAAA,MAAAV,IAAAW,EAAA,IAAA,GAAAC,EAAA,MAIP,CAAA,CAAE,EAAA;CAAA;CAAA,KAAAV,KAAA;EAAA,OAAAW,EAAAb,GAAA,IAAA;CAAA;CAAA,IAAjCc,UAASC,GAAA;EAAAC,EAAAhB,GAAA,MAAAe,CAAA;CAAA;CAElBE,SAAU;EACR,OAAOvB,CAAI;;;;;;uCAMwB,KAAKoB,UAAS;;;;;;;;;;;;CAYnD;AACF,GAAC,CAAAI,GAAA,CAAAN,GAAAD,IAAAQ,GAAA,CAAArB,GAAAsB,MAAAC,EAAAf,GAAA,CAAA;CAAAH;CAAA;CAAA;AAAA,CAAA,GAAAN,GAAA,GAAA,KAAA,GA1BmCJ,CAAY,GAAAa,IAAAgB,IAAA,cAAAC,EAAA;CAAAf,cAAA;EAAA,MAAAV,CAAA,GAAA0B,EAAA,MAAA,UAC9B5B,CAAM,GAAAwB,EAAA;CAAA;AAAA,GAAAI,EAAAF,GAAAvB,GAAA,KAAA,CAAA,GAAAuB,GAAA"}
@@ -0,0 +1,2 @@
1
+ var e=require("lit").css`:host{background:var(--solid-ui-color-slate-800);color:var(--solid-ui-color-white);flex-direction:row;justify-content:space-between;align-items:center;gap:10px;padding:7px 20px;display:flex}:host a.logo{height:40px}:host a.logo solid-ui-solid-emblem{height:100%}:host .spacer{flex:1}:host .separator{background:var(--solid-ui-color-body-grey);align-self:stretch;width:1px}@media (width<=48rem){:host a.logo,:host solid-ui-menu,:host .separator{display:none}}`;exports.default=e;
2
+ //# sourceMappingURL=Header.styles.cjs.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Header.styles.cjs.js","names":[],"sources":["../../../src/components/header/Header.styles.css"],"sourcesContent":["@import \"solid-ui/breakpoints.css\";\n\n:host {\n display: flex;\n flex-direction: row;\n align-items: center;\n justify-content: space-between;\n background: var(--solid-ui-color-slate-800);\n color: var(--solid-ui-color-white);\n padding: 7px 20px;\n gap: 10px;\n\n a.logo {\n height: 40px;\n\n solid-ui-solid-emblem {\n height: 100%;\n }\n }\n\n .spacer {\n flex: 1;\n }\n\n .separator {\n background: var(--solid-ui-color-body-grey);\n width: 1px;\n align-self: stretch;\n }\n\n @media (--solid-ui-mobile) {\n a.logo,\n solid-ui-menu,\n .separator {\n display: none;\n }\n }\n}\n"],"mappings":""}
@@ -0,0 +1,7 @@
1
+ import { css as e } from "lit";
2
+ //#region src/components/header/Header.styles.css
3
+ var t = e`:host{background:var(--solid-ui-color-slate-800);color:var(--solid-ui-color-white);flex-direction:row;justify-content:space-between;align-items:center;gap:10px;padding:7px 20px;display:flex}:host a.logo{height:40px}:host a.logo solid-ui-solid-emblem{height:100%}:host .spacer{flex:1}:host .separator{background:var(--solid-ui-color-body-grey);align-self:stretch;width:1px}@media (width<=48rem){:host a.logo,:host solid-ui-menu,:host .separator{display:none}}`;
4
+ //#endregion
5
+ export { t as default };
6
+
7
+ //# sourceMappingURL=Header.styles.esm.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Header.styles.esm.js","names":[],"sources":["../../../src/components/header/Header.styles.css"],"sourcesContent":["@import \"solid-ui/breakpoints.css\";\n\n:host {\n display: flex;\n flex-direction: row;\n align-items: center;\n justify-content: space-between;\n background: var(--solid-ui-color-slate-800);\n color: var(--solid-ui-color-white);\n padding: 7px 20px;\n gap: 10px;\n\n a.logo {\n height: 40px;\n\n solid-ui-solid-emblem {\n height: 100%;\n }\n }\n\n .spacer {\n flex: 1;\n }\n\n .separator {\n background: var(--solid-ui-color-body-grey);\n width: 1px;\n align-self: stretch;\n }\n\n @media (--solid-ui-mobile) {\n a.logo,\n solid-ui-menu,\n .separator {\n display: none;\n }\n }\n}\n"],"mappings":""}
@@ -0,0 +1 @@
1
+ require("./Header.cjs.js");
@@ -0,0 +1 @@
1
+ import "./Header.esm.js";
@@ -0,0 +1,2 @@
1
+ require("./homepage.cjs.js");let e=require("solid-ui");require("solid-logic"),e.icons.iconBase+``;
2
+ //# sourceMappingURL=dashboardPane.cjs.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dashboardPane.cjs.js","names":[],"sources":["../../src/dashboard/dashboardPane.ts"],"sourcesContent":["import { icons } from 'solid-ui'\nimport { authn, authSession, store } from 'solid-logic'\nimport { Fetcher, NamedNode } from 'rdflib'\nimport { generateHomepage } from './homepage'\nimport { DataBrowserContext, PaneDefinition } from 'pane-registry'\n\nexport const dashboardPane: PaneDefinition = {\n icon: icons.iconBase + 'noun_547570.svg',\n name: 'dashboard',\n label: subject => {\n if (subject.termType === 'NamedNode' && subject.uri === subject.site().uri) {\n return 'Dashboard'\n }\n return null\n },\n render: (subject, context) => {\n console.log('Dashboard Pane Render')\n const dom = context.dom\n const container = dom.createElement('div')\n const runBuildPage = () => {\n container.innerHTML = ''\n buildPage(\n container,\n authn.currentUser() || null,\n context,\n subject\n )\n }\n\n authSession.events.on('login', () => {\n // console.log('On Login')\n runBuildPage()\n })\n authSession.events.on('sessionRestore', () => {\n // console.log('On Session Restore')\n runBuildPage()\n })\n // console.log('Initial Load')\n runBuildPage()\n\n return container\n }\n}\n\nfunction buildPage (\n container: HTMLElement,\n webId: NamedNode | null,\n context: DataBrowserContext,\n subject: NamedNode | null\n) {\n const uri = (new URL(window.location.href)).searchParams.get('uri')\n\n if (uri && webId) {\n return buildDashboard(container, context)\n }\n\n if (!uri && subject) {\n return buildHomePage(container, subject)\n }\n\n if (!uri && !subject && webId) {\n return buildDashboard(container, context)\n }\n\n const fallbackSubject = subject || webId || store.sym(window.location.href)\n return buildHomePage(container, fallbackSubject)\n}\n\nfunction buildDashboard (container: HTMLElement, context: DataBrowserContext) {\n // console.log('build dashboard')\n // @@ TODO get a proper type\n const outliner: any = context.getOutliner(context.dom)\n outliner\n .getDashboard()\n .then((dashboard: HTMLElement) => container.appendChild(dashboard))\n}\n\nfunction buildHomePage (container: HTMLElement, subject: NamedNode) {\n // console.log('build home page')\n const wrapper = document.createElement('div')\n container.appendChild(wrapper)\n const shadow = wrapper.attachShadow({ mode: 'open' })\n const link = document.createElement('link')\n link.rel = 'stylesheet'\n link.href = '/common/css/bootstrap.min.css'\n shadow.appendChild(link)\n generateHomepage(subject, store, store.fetcher as Fetcher).then(homepage =>\n shadow.appendChild(homepage)\n )\n}\n\nexport default dashboardPane\n"],"mappings":"8EAOQ,EAAA,MAAM,SAAW"}
@@ -0,0 +1,7 @@
1
+ import "./homepage.esm.js";
2
+ import { icons as e } from "solid-ui";
3
+ import "solid-logic";
4
+ e.iconBase + "";
5
+ //#endregion
6
+
7
+ //# sourceMappingURL=dashboardPane.esm.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dashboardPane.esm.js","names":[],"sources":["../../src/dashboard/dashboardPane.ts"],"sourcesContent":["import { icons } from 'solid-ui'\nimport { authn, authSession, store } from 'solid-logic'\nimport { Fetcher, NamedNode } from 'rdflib'\nimport { generateHomepage } from './homepage'\nimport { DataBrowserContext, PaneDefinition } from 'pane-registry'\n\nexport const dashboardPane: PaneDefinition = {\n icon: icons.iconBase + 'noun_547570.svg',\n name: 'dashboard',\n label: subject => {\n if (subject.termType === 'NamedNode' && subject.uri === subject.site().uri) {\n return 'Dashboard'\n }\n return null\n },\n render: (subject, context) => {\n console.log('Dashboard Pane Render')\n const dom = context.dom\n const container = dom.createElement('div')\n const runBuildPage = () => {\n container.innerHTML = ''\n buildPage(\n container,\n authn.currentUser() || null,\n context,\n subject\n )\n }\n\n authSession.events.on('login', () => {\n // console.log('On Login')\n runBuildPage()\n })\n authSession.events.on('sessionRestore', () => {\n // console.log('On Session Restore')\n runBuildPage()\n })\n // console.log('Initial Load')\n runBuildPage()\n\n return container\n }\n}\n\nfunction buildPage (\n container: HTMLElement,\n webId: NamedNode | null,\n context: DataBrowserContext,\n subject: NamedNode | null\n) {\n const uri = (new URL(window.location.href)).searchParams.get('uri')\n\n if (uri && webId) {\n return buildDashboard(container, context)\n }\n\n if (!uri && subject) {\n return buildHomePage(container, subject)\n }\n\n if (!uri && !subject && webId) {\n return buildDashboard(container, context)\n }\n\n const fallbackSubject = subject || webId || store.sym(window.location.href)\n return buildHomePage(container, fallbackSubject)\n}\n\nfunction buildDashboard (container: HTMLElement, context: DataBrowserContext) {\n // console.log('build dashboard')\n // @@ TODO get a proper type\n const outliner: any = context.getOutliner(context.dom)\n outliner\n .getDashboard()\n .then((dashboard: HTMLElement) => container.appendChild(dashboard))\n}\n\nfunction buildHomePage (container: HTMLElement, subject: NamedNode) {\n // console.log('build home page')\n const wrapper = document.createElement('div')\n container.appendChild(wrapper)\n const shadow = wrapper.attachShadow({ mode: 'open' })\n const link = document.createElement('link')\n link.rel = 'stylesheet'\n link.href = '/common/css/bootstrap.min.css'\n shadow.appendChild(link)\n generateHomepage(subject, store, store.fetcher as Fetcher).then(homepage =>\n shadow.appendChild(homepage)\n )\n}\n\nexport default dashboardPane\n"],"mappings":";;;AAOQ,EAAM,WAAW"}
@@ -0,0 +1,2 @@
1
+ const e=require("../profileUtils/ownerProfile.cjs.js");async function t(t,i,a){let o=await e.loadProfileFromURI(t,i,a),s=e.getName(i,o),c=document.createElement(`div`);return c.classList.add(`container`),c.appendChild(r(o.uri,s)),c.appendChild(n(s)),c}function n(e){let t=document.createElement(`section`),n=document.createElement(`h2`);n.innerText=`Data`,t.appendChild(n);let r=document.createElement(`div`);r.classList.add(`list-group`),t.appendChild(r);let i=document.createElement(`a`);return i.classList.add(`list-group-item`),i.href=window.document.location.href+`public/`,i.innerText=`View ${e}'s files`,r.appendChild(i),t}function r(e,t){let n=document.createElement(`a`);n.href=e,n.innerText=t;let r=document.createElement(`span`);r.innerText=`'s Profile`;let i=document.createElement(`h1`);return i.appendChild(n),i.appendChild(r),i}exports.generateHomepage=t;
2
+ //# sourceMappingURL=homepage.cjs.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"homepage.cjs.js","names":[],"sources":["../../src/dashboard/homepage.ts"],"sourcesContent":["import { Fetcher, IndexedFormula, NamedNode } from 'rdflib'\nimport { loadProfileFromURI, getName } from '../profileUtils/ownerProfile'\n\nexport async function generateHomepage (\n uri: NamedNode,\n store: IndexedFormula,\n fetcher: Fetcher\n): Promise<HTMLElement> {\n const ownersProfile = await loadProfileFromURI(uri, store, fetcher)\n const name = getName(store, ownersProfile)\n\n const wrapper = document.createElement('div')\n wrapper.classList.add('container')\n wrapper.appendChild(createTitle(ownersProfile.uri, name))\n wrapper.appendChild(createDataSection(name))\n\n return wrapper\n}\n\nfunction createDataSection (name: string): HTMLElement {\n const dataSection = document.createElement('section')\n\n const title = document.createElement('h2')\n title.innerText = 'Data'\n dataSection.appendChild(title)\n\n const listGroup = document.createElement('div')\n listGroup.classList.add('list-group')\n dataSection.appendChild(listGroup)\n\n const publicDataLink = document.createElement('a')\n publicDataLink.classList.add('list-group-item')\n publicDataLink.href = window.document.location.href + 'public/'\n publicDataLink.innerText = `View ${name}'s files`\n listGroup.appendChild(publicDataLink)\n\n return dataSection\n}\n\nfunction createTitle (uri: string, name: string): HTMLElement {\n const profileLink = document.createElement('a')\n profileLink.href = uri\n profileLink.innerText = name\n\n const profileLinkPost = document.createElement('span')\n profileLinkPost.innerText = '\\'s Profile'\n\n const title = document.createElement('h1')\n title.appendChild(profileLink)\n title.appendChild(profileLinkPost)\n\n return title\n}\n"],"mappings":"uDAGA,eAAsB,EACpB,EACA,EACA,EACsB,CACtB,IAAM,EAAgB,MAAM,EAAA,mBAAmB,EAAK,EAAO,CAAO,EAC5D,EAAO,EAAA,QAAQ,EAAO,CAAa,EAEnC,EAAU,SAAS,cAAc,KAAK,EAK5C,OAJA,EAAQ,UAAU,IAAI,WAAW,EACjC,EAAQ,YAAY,EAAY,EAAc,IAAK,CAAI,CAAC,EACxD,EAAQ,YAAY,EAAkB,CAAI,CAAC,EAEpC,CACT,CAEA,SAAS,EAAmB,EAA2B,CACrD,IAAM,EAAc,SAAS,cAAc,SAAS,EAE9C,EAAQ,SAAS,cAAc,IAAI,EACzC,EAAM,UAAY,OAClB,EAAY,YAAY,CAAK,EAE7B,IAAM,EAAY,SAAS,cAAc,KAAK,EAC9C,EAAU,UAAU,IAAI,YAAY,EACpC,EAAY,YAAY,CAAS,EAEjC,IAAM,EAAiB,SAAS,cAAc,GAAG,EAMjD,OALA,EAAe,UAAU,IAAI,iBAAiB,EAC9C,EAAe,KAAO,OAAO,SAAS,SAAS,KAAO,UACtD,EAAe,UAAY,QAAQ,EAAK,UACxC,EAAU,YAAY,CAAc,EAE7B,CACT,CAEA,SAAS,EAAa,EAAa,EAA2B,CAC5D,IAAM,EAAc,SAAS,cAAc,GAAG,EAC9C,EAAY,KAAO,EACnB,EAAY,UAAY,EAExB,IAAM,EAAkB,SAAS,cAAc,MAAM,EACrD,EAAgB,UAAY,aAE5B,IAAM,EAAQ,SAAS,cAAc,IAAI,EAIzC,OAHA,EAAM,YAAY,CAAW,EAC7B,EAAM,YAAY,CAAe,EAE1B,CACT"}
@@ -0,0 +1,26 @@
1
+ import { getName as e, loadProfileFromURI as t } from "../profileUtils/ownerProfile.esm.js";
2
+ //#region src/dashboard/homepage.ts
3
+ async function n(n, a, o) {
4
+ let s = await t(n, a, o), c = e(a, s), l = document.createElement("div");
5
+ return l.classList.add("container"), l.appendChild(i(s.uri, c)), l.appendChild(r(c)), l;
6
+ }
7
+ function r(e) {
8
+ let t = document.createElement("section"), n = document.createElement("h2");
9
+ n.innerText = "Data", t.appendChild(n);
10
+ let r = document.createElement("div");
11
+ r.classList.add("list-group"), t.appendChild(r);
12
+ let i = document.createElement("a");
13
+ return i.classList.add("list-group-item"), i.href = window.document.location.href + "public/", i.innerText = `View ${e}'s files`, r.appendChild(i), t;
14
+ }
15
+ function i(e, t) {
16
+ let n = document.createElement("a");
17
+ n.href = e, n.innerText = t;
18
+ let r = document.createElement("span");
19
+ r.innerText = "'s Profile";
20
+ let i = document.createElement("h1");
21
+ return i.appendChild(n), i.appendChild(r), i;
22
+ }
23
+ //#endregion
24
+ export { n as generateHomepage };
25
+
26
+ //# sourceMappingURL=homepage.esm.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"homepage.esm.js","names":[],"sources":["../../src/dashboard/homepage.ts"],"sourcesContent":["import { Fetcher, IndexedFormula, NamedNode } from 'rdflib'\nimport { loadProfileFromURI, getName } from '../profileUtils/ownerProfile'\n\nexport async function generateHomepage (\n uri: NamedNode,\n store: IndexedFormula,\n fetcher: Fetcher\n): Promise<HTMLElement> {\n const ownersProfile = await loadProfileFromURI(uri, store, fetcher)\n const name = getName(store, ownersProfile)\n\n const wrapper = document.createElement('div')\n wrapper.classList.add('container')\n wrapper.appendChild(createTitle(ownersProfile.uri, name))\n wrapper.appendChild(createDataSection(name))\n\n return wrapper\n}\n\nfunction createDataSection (name: string): HTMLElement {\n const dataSection = document.createElement('section')\n\n const title = document.createElement('h2')\n title.innerText = 'Data'\n dataSection.appendChild(title)\n\n const listGroup = document.createElement('div')\n listGroup.classList.add('list-group')\n dataSection.appendChild(listGroup)\n\n const publicDataLink = document.createElement('a')\n publicDataLink.classList.add('list-group-item')\n publicDataLink.href = window.document.location.href + 'public/'\n publicDataLink.innerText = `View ${name}'s files`\n listGroup.appendChild(publicDataLink)\n\n return dataSection\n}\n\nfunction createTitle (uri: string, name: string): HTMLElement {\n const profileLink = document.createElement('a')\n profileLink.href = uri\n profileLink.innerText = name\n\n const profileLinkPost = document.createElement('span')\n profileLinkPost.innerText = '\\'s Profile'\n\n const title = document.createElement('h1')\n title.appendChild(profileLink)\n title.appendChild(profileLinkPost)\n\n return title\n}\n"],"mappings":";;AAGA,eAAsB,EACpB,GACA,GACA,GACsB;CACtB,IAAM,IAAgB,MAAM,EAAmB,GAAK,GAAO,CAAO,GAC5D,IAAO,EAAQ,GAAO,CAAa,GAEnC,IAAU,SAAS,cAAc,KAAK;CAK5C,OAJA,EAAQ,UAAU,IAAI,WAAW,GACjC,EAAQ,YAAY,EAAY,EAAc,KAAK,CAAI,CAAC,GACxD,EAAQ,YAAY,EAAkB,CAAI,CAAC,GAEpC;AACT;AAEA,SAAS,EAAmB,GAA2B;CACrD,IAAM,IAAc,SAAS,cAAc,SAAS,GAE9C,IAAQ,SAAS,cAAc,IAAI;CAEzC,AADA,EAAM,YAAY,QAClB,EAAY,YAAY,CAAK;CAE7B,IAAM,IAAY,SAAS,cAAc,KAAK;CAE9C,AADA,EAAU,UAAU,IAAI,YAAY,GACpC,EAAY,YAAY,CAAS;CAEjC,IAAM,IAAiB,SAAS,cAAc,GAAG;CAMjD,OALA,EAAe,UAAU,IAAI,iBAAiB,GAC9C,EAAe,OAAO,OAAO,SAAS,SAAS,OAAO,WACtD,EAAe,YAAY,QAAQ,EAAK,WACxC,EAAU,YAAY,CAAc,GAE7B;AACT;AAEA,SAAS,EAAa,GAAa,GAA2B;CAC5D,IAAM,IAAc,SAAS,cAAc,GAAG;CAE9C,AADA,EAAY,OAAO,GACnB,EAAY,YAAY;CAExB,IAAM,IAAkB,SAAS,cAAc,MAAM;CACrD,EAAgB,YAAY;CAE5B,IAAM,IAAQ,SAAS,cAAc,IAAI;CAIzC,OAHA,EAAM,YAAY,CAAW,GAC7B,EAAM,YAAY,CAAe,GAE1B;AACT"}
@@ -1,2 +1,2 @@
1
- const e=require("./menu2.cjs.js");require("../_virtual/~icons/lucide/user.cjs.js");let t=require("solid-logic"),n=require("lit-html");async function r(r){let i=document.querySelector(`solid-panes-header`);if(i)return i;let a=document.getElementById(`MainContent`),o=document.createElement(`div`);(0,n.render)(n.html`<solid-panes-header .menuItems=${[{label:n.html`<icon-lucide-user slot="left-icon"></icon-lucide-user> Profile`,onSelected(){let n=t.authn.currentUser();n&&(r.showDashboard(n,{pane:`profile`}),e.setActiveMenuPane(`profile`))}}]}></solid-panes-header>`,o);let s=o.firstElementChild;if(!s)throw Error(`Failed to create header`);return a&&a.parentNode?a.parentNode.insertBefore(s,a):document.body.prepend(s),s}exports.createHeader=r;
1
+ const e=require("./menu2.cjs.js");require("../_virtual/~icons/lucide/user.cjs.js"),require("../components/header/index.cjs.js");let t=require("solid-logic"),n=require("lit-html");async function r(r){let i=document.querySelector(`solid-panes-header`);if(i)return i;let a=document.getElementById(`MainContent`),o=document.createElement(`div`);(0,n.render)(n.html`<solid-panes-header .menuItems=${[{label:n.html`<icon-lucide-user slot="left-icon"></icon-lucide-user> Profile`,onSelected(){let n=t.authn.currentUser();n&&(r.showDashboard(n,{pane:`profile`}),e.setActiveMenuPane(`profile`))}}]}></solid-panes-header>`,o);let s=o.firstElementChild;if(!s)throw Error(`Failed to create header`);return a&&a.parentNode?a.parentNode.insertBefore(s,a):document.body.prepend(s),s}exports.createHeader=r;
2
2
  //# sourceMappingURL=header.cjs.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"header.cjs.js","names":[],"sources":["../../src/mainPage/header.ts"],"sourcesContent":["import { authn } from 'solid-logic'\nimport { html, render } from 'lit-html'\nimport type { AccountMenuItem } from 'solid-ui/components/account'\n\nimport { setActiveMenuPane } from './menu'\nimport type { OutlineManager } from '../outline/manager'\n\nimport '~icons/lucide/user'\nimport '../components/header'\n\nexport async function createHeader (outliner: OutlineManager) {\n const existingHeader = document.querySelector('solid-panes-header')\n\n if (existingHeader) {\n return existingHeader\n }\n\n const main = document.getElementById('MainContent')\n const tmpContainer = document.createElement('div')\n const menuItems: AccountMenuItem[] = [\n {\n label: html`<icon-lucide-user slot=\"left-icon\"></icon-lucide-user> Profile`,\n onSelected () {\n const currentUser = authn.currentUser()\n\n if (currentUser) {\n outliner.showDashboard(currentUser, { pane: 'profile' })\n setActiveMenuPane('profile')\n }\n }\n }\n ]\n\n render(\n html`<solid-panes-header .menuItems=${menuItems}></solid-panes-header>`,\n tmpContainer\n )\n\n const header = tmpContainer.firstElementChild\n\n if (!header) {\n throw new Error('Failed to create header')\n }\n\n // ensure it is in DOM (before MainContent for consistency)\n if (main && main.parentNode) {\n main.parentNode.insertBefore(header, main)\n } else {\n document.body.prepend(header)\n }\n\n return header\n}\n"],"mappings":"sIAUA,eAAsB,EAAc,EAA0B,CAC5D,IAAM,EAAiB,SAAS,cAAc,oBAAoB,EAElE,GAAI,EACF,OAAO,EAGT,IAAM,EAAO,SAAS,eAAe,aAAa,EAC5C,EAAe,SAAS,cAAc,KAAK,GAejD,EAAA,EAAA,OAAA,CACE,EAAA,IAAI,kCAAkC,CAdtC,CACE,MAAO,EAAA,IAAI,iEACX,YAAc,CACZ,IAAM,EAAc,EAAA,MAAM,YAAY,EAElC,IACF,EAAS,cAAc,EAAa,CAAE,KAAM,SAAU,CAAC,EACvD,EAAA,kBAAkB,SAAS,EAE/B,CACF,CAIsC,EAAU,wBAChD,CACF,EAEA,IAAM,EAAS,EAAa,kBAE5B,GAAI,CAAC,EACH,MAAU,MAAM,yBAAyB,EAU3C,OANI,GAAQ,EAAK,WACf,EAAK,WAAW,aAAa,EAAQ,CAAI,EAEzC,SAAS,KAAK,QAAQ,CAAM,EAGvB,CACT"}
1
+ {"version":3,"file":"header.cjs.js","names":[],"sources":["../../src/mainPage/header.ts"],"sourcesContent":["import { authn } from 'solid-logic'\nimport { html, render } from 'lit-html'\nimport type { AccountMenuItem } from 'solid-ui/components/account'\n\nimport { setActiveMenuPane } from './menu'\nimport type { OutlineManager } from '../outline/manager'\n\nimport '~icons/lucide/user'\nimport '../components/header'\n\nexport async function createHeader (outliner: OutlineManager) {\n const existingHeader = document.querySelector('solid-panes-header')\n\n if (existingHeader) {\n return existingHeader\n }\n\n const main = document.getElementById('MainContent')\n const tmpContainer = document.createElement('div')\n const menuItems: AccountMenuItem[] = [\n {\n label: html`<icon-lucide-user slot=\"left-icon\"></icon-lucide-user> Profile`,\n onSelected () {\n const currentUser = authn.currentUser()\n\n if (currentUser) {\n outliner.showDashboard(currentUser, { pane: 'profile' })\n setActiveMenuPane('profile')\n }\n }\n }\n ]\n\n render(\n html`<solid-panes-header .menuItems=${menuItems}></solid-panes-header>`,\n tmpContainer\n )\n\n const header = tmpContainer.firstElementChild\n\n if (!header) {\n throw new Error('Failed to create header')\n }\n\n // ensure it is in DOM (before MainContent for consistency)\n if (main && main.parentNode) {\n main.parentNode.insertBefore(header, main)\n } else {\n document.body.prepend(header)\n }\n\n return header\n}\n"],"mappings":"mLAUA,eAAsB,EAAc,EAA0B,CAC5D,IAAM,EAAiB,SAAS,cAAc,oBAAoB,EAElE,GAAI,EACF,OAAO,EAGT,IAAM,EAAO,SAAS,eAAe,aAAa,EAC5C,EAAe,SAAS,cAAc,KAAK,GAejD,EAAA,EAAA,OAAA,CACE,EAAA,IAAI,kCAAkC,CAdtC,CACE,MAAO,EAAA,IAAI,iEACX,YAAc,CACZ,IAAM,EAAc,EAAA,MAAM,YAAY,EAElC,IACF,EAAS,cAAc,EAAa,CAAE,KAAM,SAAU,CAAC,EACvD,EAAA,kBAAkB,SAAS,EAE/B,CACF,CAIsC,EAAU,wBAChD,CACF,EAEA,IAAM,EAAS,EAAa,kBAE5B,GAAI,CAAC,EACH,MAAU,MAAM,yBAAyB,EAU3C,OANI,GAAQ,EAAK,WACf,EAAK,WAAW,aAAa,EAAQ,CAAI,EAEzC,SAAS,KAAK,QAAQ,CAAM,EAGvB,CACT"}
@@ -1,5 +1,6 @@
1
1
  import { setActiveMenuPane as e } from "./menu2.esm.js";
2
2
  import "../_virtual/~icons/lucide/user.esm.js";
3
+ import "../components/header/index.esm.js";
3
4
  import { authn as t } from "solid-logic";
4
5
  import { html as n, render as r } from "lit-html";
5
6
  //#region src/mainPage/header.ts
@@ -1 +1 @@
1
- {"version":3,"file":"header.esm.js","names":[],"sources":["../../src/mainPage/header.ts"],"sourcesContent":["import { authn } from 'solid-logic'\nimport { html, render } from 'lit-html'\nimport type { AccountMenuItem } from 'solid-ui/components/account'\n\nimport { setActiveMenuPane } from './menu'\nimport type { OutlineManager } from '../outline/manager'\n\nimport '~icons/lucide/user'\nimport '../components/header'\n\nexport async function createHeader (outliner: OutlineManager) {\n const existingHeader = document.querySelector('solid-panes-header')\n\n if (existingHeader) {\n return existingHeader\n }\n\n const main = document.getElementById('MainContent')\n const tmpContainer = document.createElement('div')\n const menuItems: AccountMenuItem[] = [\n {\n label: html`<icon-lucide-user slot=\"left-icon\"></icon-lucide-user> Profile`,\n onSelected () {\n const currentUser = authn.currentUser()\n\n if (currentUser) {\n outliner.showDashboard(currentUser, { pane: 'profile' })\n setActiveMenuPane('profile')\n }\n }\n }\n ]\n\n render(\n html`<solid-panes-header .menuItems=${menuItems}></solid-panes-header>`,\n tmpContainer\n )\n\n const header = tmpContainer.firstElementChild\n\n if (!header) {\n throw new Error('Failed to create header')\n }\n\n // ensure it is in DOM (before MainContent for consistency)\n if (main && main.parentNode) {\n main.parentNode.insertBefore(header, main)\n } else {\n document.body.prepend(header)\n }\n\n return header\n}\n"],"mappings":";;;;;AAUA,eAAsB,EAAc,GAA0B;CAC5D,IAAM,IAAiB,SAAS,cAAc,oBAAoB;CAElE,IAAI,GACF,OAAO;CAGT,IAAM,IAAO,SAAS,eAAe,aAAa,GAC5C,IAAe,SAAS,cAAc,KAAK;CAejD,EACE,CAAI,kCAAkC,CAdtC;EACE,OAAO,CAAI;EACX,aAAc;GACZ,IAAM,IAAc,EAAM,YAAY;GAEtC,AAAI,MACF,EAAS,cAAc,GAAa,EAAE,MAAM,UAAU,CAAC,GACvD,EAAkB,SAAS;EAE/B;CACF,CAIsC,EAAU,yBAChD,CACF;CAEA,IAAM,IAAS,EAAa;CAE5B,IAAI,CAAC,GACH,MAAU,MAAM,yBAAyB;CAU3C,OANI,KAAQ,EAAK,aACf,EAAK,WAAW,aAAa,GAAQ,CAAI,IAEzC,SAAS,KAAK,QAAQ,CAAM,GAGvB;AACT"}
1
+ {"version":3,"file":"header.esm.js","names":[],"sources":["../../src/mainPage/header.ts"],"sourcesContent":["import { authn } from 'solid-logic'\nimport { html, render } from 'lit-html'\nimport type { AccountMenuItem } from 'solid-ui/components/account'\n\nimport { setActiveMenuPane } from './menu'\nimport type { OutlineManager } from '../outline/manager'\n\nimport '~icons/lucide/user'\nimport '../components/header'\n\nexport async function createHeader (outliner: OutlineManager) {\n const existingHeader = document.querySelector('solid-panes-header')\n\n if (existingHeader) {\n return existingHeader\n }\n\n const main = document.getElementById('MainContent')\n const tmpContainer = document.createElement('div')\n const menuItems: AccountMenuItem[] = [\n {\n label: html`<icon-lucide-user slot=\"left-icon\"></icon-lucide-user> Profile`,\n onSelected () {\n const currentUser = authn.currentUser()\n\n if (currentUser) {\n outliner.showDashboard(currentUser, { pane: 'profile' })\n setActiveMenuPane('profile')\n }\n }\n }\n ]\n\n render(\n html`<solid-panes-header .menuItems=${menuItems}></solid-panes-header>`,\n tmpContainer\n )\n\n const header = tmpContainer.firstElementChild\n\n if (!header) {\n throw new Error('Failed to create header')\n }\n\n // ensure it is in DOM (before MainContent for consistency)\n if (main && main.parentNode) {\n main.parentNode.insertBefore(header, main)\n } else {\n document.body.prepend(header)\n }\n\n return header\n}\n"],"mappings":";;;;;;AAUA,eAAsB,EAAc,GAA0B;CAC5D,IAAM,IAAiB,SAAS,cAAc,oBAAoB;CAElE,IAAI,GACF,OAAO;CAGT,IAAM,IAAO,SAAS,eAAe,aAAa,GAC5C,IAAe,SAAS,cAAc,KAAK;CAejD,EACE,CAAI,kCAAkC,CAdtC;EACE,OAAO,CAAI;EACX,aAAc;GACZ,IAAM,IAAc,EAAM,YAAY;GAEtC,AAAI,MACF,EAAS,cAAc,GAAa,EAAE,MAAM,UAAU,CAAC,GACvD,EAAkB,SAAS;EAE/B;CACF,CAIsC,EAAU,yBAChD,CACF;CAEA,IAAM,IAAS,EAAa;CAE5B,IAAI,CAAC,GACH,MAAU,MAAM,yBAAyB;CAU3C,OANI,KAAQ,EAAK,aACf,EAAK,WAAW,aAAa,GAAQ,CAAI,IAEzC,SAAS,KAAK,QAAQ,CAAM,GAGvB;AACT"}
@@ -1,2 +1,2 @@
1
- const e=require("./_virtual/_rolldown/runtime.cjs.js"),t=require("./trustedApplications/trustedApplications.view.cjs.js"),n=require("./dashboard/basicPreferences.cjs.js"),r=require("./pad/padPane2.cjs.js"),i=require("./transaction/pane.cjs.js"),a=require("./transaction/period.cjs.js"),o=require("./tabbed/tabbedPane.cjs.js"),s=require("./schedule/schedulePane2.cjs.js"),c=require("./trip/tripPane.cjs.js"),l=require("./imagePane2.cjs.js"),u=require("./playlist/playlistPane.cjs.js"),d=require("./video/videoPane.cjs.js"),f=require("./audio/audioPane.cjs.js"),p=require("./dokieli/dokieliPane.cjs.js"),m=require("./classInstancePane.cjs.js"),h=require("./slideshow/slideshowPane.cjs.js"),g=require("./social/socialPane2.cjs.js"),_=require("./humanReadablePane2.cjs.js"),v=require("./dataContentPane2.cjs.js"),y=require("./n3Pane2.cjs.js"),b=require("./RDFXMLPane2.cjs.js"),x=require("./form/pane.cjs.js"),S=require("./tableViewPane.cjs.js"),C=require("./defaultPane2.cjs.js"),w=require("./ui/pane.cjs.js"),T=require("./sharing/sharingPane.cjs.js"),E=require("./internal/internalPane2.cjs.js"),D=require("./home/homePane.cjs.js");let O=require("profile-pane");O=e.__toESM(O);let k=require("issue-pane");k=e.__toESM(k);let A=require("contacts-pane");A=e.__toESM(A);let j=require("activitystreams-pane");j=e.__toESM(j);let M=require("meeting-pane");M=e.__toESM(M);let N=require("chat-pane"),P=require("folder-pane");P=e.__toESM(P);let F=require("source-pane");F=e.__toESM(F);function I(e){e(O.default);let I=O.default.editor;I?e(I):console.log(`@@@ editProfileView`,`profilePane is not providing an editor pane`),e(t.default),e(n.basicPreferencesPane),e(k.default),e(A.default),e(j.default),e(r.default),e(i.default),e(a.default),e(M.default),e(o.default),e(N.longChatPane),e(N.shortChatPane),e(s.schedulePane),e(c.default),e(l.imagePane),e(u.default),e(d.default),e(f.default),e(p.default),e(P.default),e(m.classInstancePane),e(h.slideshowPane),e(g.socialPane),e(_.default),e(v.dataContentPane),e(F.default),e(y.n3Pane),e(b.RDFXMLPane),e(x.formPane),e(S.tableViewPane),e(C.defaultPane),e(w.default),e(T.default),e(E.default),e(D.default)}exports.registerPanes=I;
1
+ const e=require("./_virtual/_rolldown/runtime.cjs.js"),t=require("./trustedApplications/trustedApplications.view.cjs.js");require("./dashboard/dashboardPane.cjs.js");const n=require("./dashboard/basicPreferences.cjs.js"),r=require("./pad/padPane2.cjs.js"),i=require("./transaction/pane.cjs.js"),a=require("./transaction/period.cjs.js"),o=require("./tabbed/tabbedPane.cjs.js"),s=require("./schedule/schedulePane2.cjs.js"),c=require("./trip/tripPane.cjs.js"),l=require("./imagePane2.cjs.js"),u=require("./playlist/playlistPane.cjs.js"),d=require("./video/videoPane.cjs.js"),f=require("./audio/audioPane.cjs.js"),p=require("./dokieli/dokieliPane.cjs.js"),m=require("./classInstancePane.cjs.js"),h=require("./slideshow/slideshowPane.cjs.js"),g=require("./social/socialPane2.cjs.js"),_=require("./humanReadablePane2.cjs.js"),v=require("./dataContentPane2.cjs.js"),y=require("./n3Pane2.cjs.js"),b=require("./RDFXMLPane2.cjs.js"),x=require("./form/pane.cjs.js"),S=require("./tableViewPane.cjs.js"),C=require("./defaultPane2.cjs.js"),w=require("./ui/pane.cjs.js"),T=require("./sharing/sharingPane.cjs.js"),E=require("./internal/internalPane2.cjs.js"),D=require("./home/homePane.cjs.js");let O=require("profile-pane");O=e.__toESM(O);let k=require("issue-pane");k=e.__toESM(k);let A=require("contacts-pane");A=e.__toESM(A);let j=require("activitystreams-pane");j=e.__toESM(j);let M=require("meeting-pane");M=e.__toESM(M);let N=require("chat-pane"),P=require("folder-pane");P=e.__toESM(P);let F=require("source-pane");F=e.__toESM(F);function I(e){e(O.default);let I=O.default.editor;I?e(I):console.log(`@@@ editProfileView`,`profilePane is not providing an editor pane`),e(t.default),e(n.basicPreferencesPane),e(k.default),e(A.default),e(j.default),e(r.default),e(i.default),e(a.default),e(M.default),e(o.default),e(N.longChatPane),e(N.shortChatPane),e(s.schedulePane),e(c.default),e(l.imagePane),e(u.default),e(d.default),e(f.default),e(p.default),e(P.default),e(m.classInstancePane),e(h.slideshowPane),e(g.socialPane),e(_.default),e(v.dataContentPane),e(F.default),e(y.n3Pane),e(b.RDFXMLPane),e(x.formPane),e(S.tableViewPane),e(C.defaultPane),e(w.default),e(T.default),e(E.default),e(D.default)}exports.registerPanes=I;
2
2
  //# sourceMappingURL=registerPanes.cjs.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"registerPanes.cjs.js","names":["profilePane","trustedApplications","basicPreferences","issuePane","contactsPane","activityStreamsPane","padPane","transactionPane","financialPeriodPane","meetingPane","tabbedPane","longChatPane","shortChatPane","schedulePane","tripPane","imagePane","playListPane","videoPane","audioPane","dokieliPane","folderPane","classInstancePane","slideshowPane","socialPane","humanReadablePane","dataContentPane","sourcePane","n3Pane","RDFXMLPane","formPane","tableViewPane","defaultPane","uiPane","sharingPane","internalPane","homePane"],"sources":["../src/registerPanes.js"],"sourcesContent":["import profilePane from 'profile-pane'\n// import editProfileView from './profile/editProfile.view'\nimport trustedApplications from './trustedApplications/trustedApplications.view'\nimport dashboardPane from './dashboard/dashboardPane'\nimport basicPreferences from './dashboard/basicPreferences'\nimport issuePane from 'issue-pane'\nimport contactsPane from 'contacts-pane'\nimport activityStreamsPane from 'activitystreams-pane'\nimport padPane from './pad/padPane'\n// import argumentPane from './argument/argumentPane.js'\nimport transactionPane from './transaction/pane.js'\nimport financialPeriodPane from './transaction/period.js'\nimport meetingPane from 'meeting-pane'\nimport tabbedPane from './tabbed/tabbedPane'\nimport { longChatPane, shortChatPane } from 'chat-pane'\nimport { schedulePane } from './schedule/schedulePane'\n// import publicationPane from './publication/publicationPane.js'\nimport tripPane from './trip/tripPane.js'\nimport { imagePane } from './imagePane'\nimport playListPane from './playlist/playlistPane.js'\nimport videoPane from './video/videoPane.js'\nimport audioPane from './audio/audioPane.js'\nimport dokieliPane from './dokieli/dokieliPane.js'\nimport folderPane from 'folder-pane'\nimport { classInstancePane } from './classInstancePane.js'\nimport { slideshowPane } from './slideshow/slideshowPane.js'\nimport { socialPane } from './social/socialPane'\nimport humanReadablePane from './humanReadablePane'\n\nimport { dataContentPane } from './dataContentPane'\nimport sourcePane from 'source-pane'\nimport { n3Pane } from './n3Pane'\nimport { RDFXMLPane } from './RDFXMLPane'\nimport { formPane } from './form/pane'\nimport { tableViewPane } from './tableViewPane.js'\nimport { defaultPane } from './defaultPane'\nimport uiPane from './ui/pane.js'\n\nimport sharingPane from './sharing/sharingPane'\nimport internalPane from './internal/internalPane'\n\nimport homePane from './home/homePane'\n\nexport function registerPanes (register) {\n /* Note that the earliest panes have priority. So the most specific ones are first.\n **\n */\n // Developer designed:\n\n register(profilePane) // View someone's public profile - dominates all other panes.\n const editProfileView = profilePane.editor\n if (!editProfileView) {\n console.log('@@@ editProfileView', 'profilePane is not providing an editor pane')\n } else {\n register(editProfileView) // Edit my profile.\n }\n\n register(trustedApplications) // must be registered before basicPreferences\n // register(dashboardPane)\n register(basicPreferences)\n register(issuePane)\n register(contactsPane)\n register(activityStreamsPane)\n\n register(padPane)\n // register(argumentPane) // A position in an argument tree\n\n register(transactionPane)\n register(financialPeriodPane)\n\n register(meetingPane)\n register(tabbedPane)\n\n register(longChatPane) // Long pane must have prio in case short pane tries to do a long pane\n register(shortChatPane) // was './chat/chatPane.js'\n\n // register(publicationPane) // Suppress for now\n\n register(schedulePane) // doodle poll\n\n register(tripPane)\n // register(require('./airPane.js'))\n\n // Content views\n\n register(imagePane) // Basic image view\n register(playListPane) // Basic playlist view\n\n register(videoPane) // Video clip player\n register(audioPane) // Audio clip player\n\n register(dokieliPane) // Should be above dataContentPane\n register(folderPane) // Should be above dataContentPane\n register(classInstancePane) // Should be above dataContentPane\n // register(require('./dynamic/dynamicPanes.js')) // warp etc warp broken 2017/8\n register(slideshowPane)\n\n register(socialPane)\n\n register(humanReadablePane) // A web page as a web page -- how to escape to tabr?\n // register(require('markdown-pane').Pane) // replaced by markdown in humanReadablePane\n\n register(dataContentPane) // Preferred for a data file\n register(sourcePane) // edit source\n register(n3Pane)\n register(RDFXMLPane)\n\n // User configured - data driven\n register(formPane)\n\n // Generic:\n\n register(tableViewPane)\n\n // Fallback totally generic:\n register(defaultPane)\n\n register(uiPane)\n\n // register(require(\"categoryPane.js\")) // Not useful enough\n // register(require(\"pubsPane.js\")) // not finished\n\n // @@ jambo commented these things out to pare things down temporarily.\n // Note must use // not /* to comment out to make sure expander sees it\n // register(require(\"lawPane.js\"))\n\n // register(require('./microblogPane/microblogPane.js'))\n\n // register(require(\"./social/pane.js\")) // competitor to other social\n // register(require(\"./airPane.js\"))\n // register(require(\"./lawPane.js\"))\n // register(require(\"pushbackPane.js\"))\n // register(require(\"CVPane.js\"))\n // register(require(\"photoPane.js\"))\n // register(require(\"tagPane.js\"))\n // register(require(\"photoImportPane.js\"))\n\n // The sharing pane is fairly generic and administrative 201\n register(sharingPane)\n\n // The internals pane is always (almost?) the last as it is the least user-friendly\n register(internalPane)\n\n register(homePane) // This is a global pane\n\n // ENDS\n}\n"],"mappings":"g8CA2CA,SAAgB,EAAe,EAAU,CAMvC,EAASA,EAAAA,OAAW,EACpB,IAAM,EAAkBA,EAAAA,QAAY,OAC/B,EAGH,EAAS,CAAe,EAFxB,QAAQ,IAAI,sBAAuB,6CAA6C,EAKlF,EAASC,EAAAA,OAAmB,EAE5B,EAASC,EAAAA,oBAAgB,EACzB,EAASC,EAAAA,OAAS,EAClB,EAASC,EAAAA,OAAY,EACrB,EAASC,EAAAA,OAAmB,EAE5B,EAASC,EAAAA,OAAO,EAGhB,EAASC,EAAAA,OAAe,EACxB,EAASC,EAAAA,OAAmB,EAE5B,EAASC,EAAAA,OAAW,EACpB,EAASC,EAAAA,OAAU,EAEnB,EAASC,EAAAA,YAAY,EACrB,EAASC,EAAAA,aAAa,EAItB,EAASC,EAAAA,YAAY,EAErB,EAASC,EAAAA,OAAQ,EAKjB,EAASC,EAAAA,SAAS,EAClB,EAASC,EAAAA,OAAY,EAErB,EAASC,EAAAA,OAAS,EAClB,EAASC,EAAAA,OAAS,EAElB,EAASC,EAAAA,OAAW,EACpB,EAASC,EAAAA,OAAU,EACnB,EAASC,EAAAA,iBAAiB,EAE1B,EAASC,EAAAA,aAAa,EAEtB,EAASC,EAAAA,UAAU,EAEnB,EAASC,EAAAA,OAAiB,EAG1B,EAASC,EAAAA,eAAe,EACxB,EAASC,EAAAA,OAAU,EACnB,EAASC,EAAAA,MAAM,EACf,EAASC,EAAAA,UAAU,EAGnB,EAASC,EAAAA,QAAQ,EAIjB,EAASC,EAAAA,aAAa,EAGtB,EAASC,EAAAA,WAAW,EAEpB,EAASC,EAAAA,OAAM,EAqBf,EAASC,EAAAA,OAAW,EAGpB,EAASC,EAAAA,OAAY,EAErB,EAASC,EAAAA,OAAQ,CAGnB"}
1
+ {"version":3,"file":"registerPanes.cjs.js","names":["profilePane","trustedApplications","basicPreferences","issuePane","contactsPane","activityStreamsPane","padPane","transactionPane","financialPeriodPane","meetingPane","tabbedPane","longChatPane","shortChatPane","schedulePane","tripPane","imagePane","playListPane","videoPane","audioPane","dokieliPane","folderPane","classInstancePane","slideshowPane","socialPane","humanReadablePane","dataContentPane","sourcePane","n3Pane","RDFXMLPane","formPane","tableViewPane","defaultPane","uiPane","sharingPane","internalPane","homePane"],"sources":["../src/registerPanes.js"],"sourcesContent":["import profilePane from 'profile-pane'\n// import editProfileView from './profile/editProfile.view'\nimport trustedApplications from './trustedApplications/trustedApplications.view'\nimport dashboardPane from './dashboard/dashboardPane'\nimport basicPreferences from './dashboard/basicPreferences'\nimport issuePane from 'issue-pane'\nimport contactsPane from 'contacts-pane'\nimport activityStreamsPane from 'activitystreams-pane'\nimport padPane from './pad/padPane'\n// import argumentPane from './argument/argumentPane.js'\nimport transactionPane from './transaction/pane.js'\nimport financialPeriodPane from './transaction/period.js'\nimport meetingPane from 'meeting-pane'\nimport tabbedPane from './tabbed/tabbedPane'\nimport { longChatPane, shortChatPane } from 'chat-pane'\nimport { schedulePane } from './schedule/schedulePane'\n// import publicationPane from './publication/publicationPane.js'\nimport tripPane from './trip/tripPane.js'\nimport { imagePane } from './imagePane'\nimport playListPane from './playlist/playlistPane.js'\nimport videoPane from './video/videoPane.js'\nimport audioPane from './audio/audioPane.js'\nimport dokieliPane from './dokieli/dokieliPane.js'\nimport folderPane from 'folder-pane'\nimport { classInstancePane } from './classInstancePane.js'\nimport { slideshowPane } from './slideshow/slideshowPane.js'\nimport { socialPane } from './social/socialPane'\nimport humanReadablePane from './humanReadablePane'\n\nimport { dataContentPane } from './dataContentPane'\nimport sourcePane from 'source-pane'\nimport { n3Pane } from './n3Pane'\nimport { RDFXMLPane } from './RDFXMLPane'\nimport { formPane } from './form/pane'\nimport { tableViewPane } from './tableViewPane.js'\nimport { defaultPane } from './defaultPane'\nimport uiPane from './ui/pane.js'\n\nimport sharingPane from './sharing/sharingPane'\nimport internalPane from './internal/internalPane'\n\nimport homePane from './home/homePane'\n\nexport function registerPanes (register) {\n /* Note that the earliest panes have priority. So the most specific ones are first.\n **\n */\n // Developer designed:\n\n register(profilePane) // View someone's public profile - dominates all other panes.\n const editProfileView = profilePane.editor\n if (!editProfileView) {\n console.log('@@@ editProfileView', 'profilePane is not providing an editor pane')\n } else {\n register(editProfileView) // Edit my profile.\n }\n\n register(trustedApplications) // must be registered before basicPreferences\n // register(dashboardPane)\n register(basicPreferences)\n register(issuePane)\n register(contactsPane)\n register(activityStreamsPane)\n\n register(padPane)\n // register(argumentPane) // A position in an argument tree\n\n register(transactionPane)\n register(financialPeriodPane)\n\n register(meetingPane)\n register(tabbedPane)\n\n register(longChatPane) // Long pane must have prio in case short pane tries to do a long pane\n register(shortChatPane) // was './chat/chatPane.js'\n\n // register(publicationPane) // Suppress for now\n\n register(schedulePane) // doodle poll\n\n register(tripPane)\n // register(require('./airPane.js'))\n\n // Content views\n\n register(imagePane) // Basic image view\n register(playListPane) // Basic playlist view\n\n register(videoPane) // Video clip player\n register(audioPane) // Audio clip player\n\n register(dokieliPane) // Should be above dataContentPane\n register(folderPane) // Should be above dataContentPane\n register(classInstancePane) // Should be above dataContentPane\n // register(require('./dynamic/dynamicPanes.js')) // warp etc warp broken 2017/8\n register(slideshowPane)\n\n register(socialPane)\n\n register(humanReadablePane) // A web page as a web page -- how to escape to tabr?\n // register(require('markdown-pane').Pane) // replaced by markdown in humanReadablePane\n\n register(dataContentPane) // Preferred for a data file\n register(sourcePane) // edit source\n register(n3Pane)\n register(RDFXMLPane)\n\n // User configured - data driven\n register(formPane)\n\n // Generic:\n\n register(tableViewPane)\n\n // Fallback totally generic:\n register(defaultPane)\n\n register(uiPane)\n\n // register(require(\"categoryPane.js\")) // Not useful enough\n // register(require(\"pubsPane.js\")) // not finished\n\n // @@ jambo commented these things out to pare things down temporarily.\n // Note must use // not /* to comment out to make sure expander sees it\n // register(require(\"lawPane.js\"))\n\n // register(require('./microblogPane/microblogPane.js'))\n\n // register(require(\"./social/pane.js\")) // competitor to other social\n // register(require(\"./airPane.js\"))\n // register(require(\"./lawPane.js\"))\n // register(require(\"pushbackPane.js\"))\n // register(require(\"CVPane.js\"))\n // register(require(\"photoPane.js\"))\n // register(require(\"tagPane.js\"))\n // register(require(\"photoImportPane.js\"))\n\n // The sharing pane is fairly generic and administrative 201\n register(sharingPane)\n\n // The internals pane is always (almost?) the last as it is the least user-friendly\n register(internalPane)\n\n register(homePane) // This is a global pane\n\n // ENDS\n}\n"],"mappings":"k/CA2CA,SAAgB,EAAe,EAAU,CAMvC,EAASA,EAAAA,OAAW,EACpB,IAAM,EAAkBA,EAAAA,QAAY,OAC/B,EAGH,EAAS,CAAe,EAFxB,QAAQ,IAAI,sBAAuB,6CAA6C,EAKlF,EAASC,EAAAA,OAAmB,EAE5B,EAASC,EAAAA,oBAAgB,EACzB,EAASC,EAAAA,OAAS,EAClB,EAASC,EAAAA,OAAY,EACrB,EAASC,EAAAA,OAAmB,EAE5B,EAASC,EAAAA,OAAO,EAGhB,EAASC,EAAAA,OAAe,EACxB,EAASC,EAAAA,OAAmB,EAE5B,EAASC,EAAAA,OAAW,EACpB,EAASC,EAAAA,OAAU,EAEnB,EAASC,EAAAA,YAAY,EACrB,EAASC,EAAAA,aAAa,EAItB,EAASC,EAAAA,YAAY,EAErB,EAASC,EAAAA,OAAQ,EAKjB,EAASC,EAAAA,SAAS,EAClB,EAASC,EAAAA,OAAY,EAErB,EAASC,EAAAA,OAAS,EAClB,EAASC,EAAAA,OAAS,EAElB,EAASC,EAAAA,OAAW,EACpB,EAASC,EAAAA,OAAU,EACnB,EAASC,EAAAA,iBAAiB,EAE1B,EAASC,EAAAA,aAAa,EAEtB,EAASC,EAAAA,UAAU,EAEnB,EAASC,EAAAA,OAAiB,EAG1B,EAASC,EAAAA,eAAe,EACxB,EAASC,EAAAA,OAAU,EACnB,EAASC,EAAAA,MAAM,EACf,EAASC,EAAAA,UAAU,EAGnB,EAASC,EAAAA,QAAQ,EAIjB,EAASC,EAAAA,aAAa,EAGtB,EAASC,EAAAA,WAAW,EAEpB,EAASC,EAAAA,OAAM,EAqBf,EAASC,EAAAA,OAAW,EAGpB,EAASC,EAAAA,OAAY,EAErB,EAASC,EAAAA,OAAQ,CAGnB"}
@@ -1,4 +1,5 @@
1
1
  import e from "./trustedApplications/trustedApplications.view.esm.js";
2
+ import "./dashboard/dashboardPane.esm.js";
2
3
  import { basicPreferencesPane as t } from "./dashboard/basicPreferences.esm.js";
3
4
  import n from "./pad/padPane2.esm.js";
4
5
  import r from "./transaction/pane.esm.js";
@@ -1 +1 @@
1
- {"version":3,"file":"registerPanes.esm.js","names":["trustedApplications","basicPreferences","padPane","transactionPane","financialPeriodPane","tabbedPane","tripPane","playListPane","videoPane","audioPane","dokieliPane","uiPane","internalPane","homePane"],"sources":["../src/registerPanes.js"],"sourcesContent":["import profilePane from 'profile-pane'\n// import editProfileView from './profile/editProfile.view'\nimport trustedApplications from './trustedApplications/trustedApplications.view'\nimport dashboardPane from './dashboard/dashboardPane'\nimport basicPreferences from './dashboard/basicPreferences'\nimport issuePane from 'issue-pane'\nimport contactsPane from 'contacts-pane'\nimport activityStreamsPane from 'activitystreams-pane'\nimport padPane from './pad/padPane'\n// import argumentPane from './argument/argumentPane.js'\nimport transactionPane from './transaction/pane.js'\nimport financialPeriodPane from './transaction/period.js'\nimport meetingPane from 'meeting-pane'\nimport tabbedPane from './tabbed/tabbedPane'\nimport { longChatPane, shortChatPane } from 'chat-pane'\nimport { schedulePane } from './schedule/schedulePane'\n// import publicationPane from './publication/publicationPane.js'\nimport tripPane from './trip/tripPane.js'\nimport { imagePane } from './imagePane'\nimport playListPane from './playlist/playlistPane.js'\nimport videoPane from './video/videoPane.js'\nimport audioPane from './audio/audioPane.js'\nimport dokieliPane from './dokieli/dokieliPane.js'\nimport folderPane from 'folder-pane'\nimport { classInstancePane } from './classInstancePane.js'\nimport { slideshowPane } from './slideshow/slideshowPane.js'\nimport { socialPane } from './social/socialPane'\nimport humanReadablePane from './humanReadablePane'\n\nimport { dataContentPane } from './dataContentPane'\nimport sourcePane from 'source-pane'\nimport { n3Pane } from './n3Pane'\nimport { RDFXMLPane } from './RDFXMLPane'\nimport { formPane } from './form/pane'\nimport { tableViewPane } from './tableViewPane.js'\nimport { defaultPane } from './defaultPane'\nimport uiPane from './ui/pane.js'\n\nimport sharingPane from './sharing/sharingPane'\nimport internalPane from './internal/internalPane'\n\nimport homePane from './home/homePane'\n\nexport function registerPanes (register) {\n /* Note that the earliest panes have priority. So the most specific ones are first.\n **\n */\n // Developer designed:\n\n register(profilePane) // View someone's public profile - dominates all other panes.\n const editProfileView = profilePane.editor\n if (!editProfileView) {\n console.log('@@@ editProfileView', 'profilePane is not providing an editor pane')\n } else {\n register(editProfileView) // Edit my profile.\n }\n\n register(trustedApplications) // must be registered before basicPreferences\n // register(dashboardPane)\n register(basicPreferences)\n register(issuePane)\n register(contactsPane)\n register(activityStreamsPane)\n\n register(padPane)\n // register(argumentPane) // A position in an argument tree\n\n register(transactionPane)\n register(financialPeriodPane)\n\n register(meetingPane)\n register(tabbedPane)\n\n register(longChatPane) // Long pane must have prio in case short pane tries to do a long pane\n register(shortChatPane) // was './chat/chatPane.js'\n\n // register(publicationPane) // Suppress for now\n\n register(schedulePane) // doodle poll\n\n register(tripPane)\n // register(require('./airPane.js'))\n\n // Content views\n\n register(imagePane) // Basic image view\n register(playListPane) // Basic playlist view\n\n register(videoPane) // Video clip player\n register(audioPane) // Audio clip player\n\n register(dokieliPane) // Should be above dataContentPane\n register(folderPane) // Should be above dataContentPane\n register(classInstancePane) // Should be above dataContentPane\n // register(require('./dynamic/dynamicPanes.js')) // warp etc warp broken 2017/8\n register(slideshowPane)\n\n register(socialPane)\n\n register(humanReadablePane) // A web page as a web page -- how to escape to tabr?\n // register(require('markdown-pane').Pane) // replaced by markdown in humanReadablePane\n\n register(dataContentPane) // Preferred for a data file\n register(sourcePane) // edit source\n register(n3Pane)\n register(RDFXMLPane)\n\n // User configured - data driven\n register(formPane)\n\n // Generic:\n\n register(tableViewPane)\n\n // Fallback totally generic:\n register(defaultPane)\n\n register(uiPane)\n\n // register(require(\"categoryPane.js\")) // Not useful enough\n // register(require(\"pubsPane.js\")) // not finished\n\n // @@ jambo commented these things out to pare things down temporarily.\n // Note must use // not /* to comment out to make sure expander sees it\n // register(require(\"lawPane.js\"))\n\n // register(require('./microblogPane/microblogPane.js'))\n\n // register(require(\"./social/pane.js\")) // competitor to other social\n // register(require(\"./airPane.js\"))\n // register(require(\"./lawPane.js\"))\n // register(require(\"pushbackPane.js\"))\n // register(require(\"CVPane.js\"))\n // register(require(\"photoPane.js\"))\n // register(require(\"tagPane.js\"))\n // register(require(\"photoImportPane.js\"))\n\n // The sharing pane is fairly generic and administrative 201\n register(sharingPane)\n\n // The internals pane is always (almost?) the last as it is the least user-friendly\n register(internalPane)\n\n register(homePane) // This is a global pane\n\n // ENDS\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA2CA,SAAgB,EAAe,GAAU;CAMvC,EAAS,CAAW;CACpB,IAAM,IAAkB,EAAY;CA6FpC,AA5FK,IAGH,EAAS,CAAe,IAFxB,QAAQ,IAAI,uBAAuB,6CAA6C,GAKlF,EAASA,CAAmB,GAE5B,EAASC,CAAgB,GACzB,EAAS,CAAS,GAClB,EAAS,CAAY,GACrB,EAAS,CAAmB,GAE5B,EAASC,CAAO,GAGhB,EAASC,CAAe,GACxB,EAASC,CAAmB,GAE5B,EAAS,CAAW,GACpB,EAASC,CAAU,GAEnB,EAAS,CAAY,GACrB,EAAS,CAAa,GAItB,EAAS,CAAY,GAErB,EAASC,CAAQ,GAKjB,EAAS,CAAS,GAClB,EAASC,CAAY,GAErB,EAASC,CAAS,GAClB,EAASC,CAAS,GAElB,EAASC,CAAW,GACpB,EAAS,CAAU,GACnB,EAAS,CAAiB,GAE1B,EAAS,CAAa,GAEtB,EAAS,CAAU,GAEnB,EAAS,CAAiB,GAG1B,EAAS,CAAe,GACxB,EAAS,CAAU,GACnB,EAAS,CAAM,GACf,EAAS,CAAU,GAGnB,EAAS,CAAQ,GAIjB,EAAS,CAAa,GAGtB,EAAS,CAAW,GAEpB,EAASC,CAAM,GAqBf,EAAS,CAAW,GAGpB,EAASC,CAAY,GAErB,EAASC,CAAQ;AAGnB"}
1
+ {"version":3,"file":"registerPanes.esm.js","names":["trustedApplications","basicPreferences","padPane","transactionPane","financialPeriodPane","tabbedPane","tripPane","playListPane","videoPane","audioPane","dokieliPane","uiPane","internalPane","homePane"],"sources":["../src/registerPanes.js"],"sourcesContent":["import profilePane from 'profile-pane'\n// import editProfileView from './profile/editProfile.view'\nimport trustedApplications from './trustedApplications/trustedApplications.view'\nimport dashboardPane from './dashboard/dashboardPane'\nimport basicPreferences from './dashboard/basicPreferences'\nimport issuePane from 'issue-pane'\nimport contactsPane from 'contacts-pane'\nimport activityStreamsPane from 'activitystreams-pane'\nimport padPane from './pad/padPane'\n// import argumentPane from './argument/argumentPane.js'\nimport transactionPane from './transaction/pane.js'\nimport financialPeriodPane from './transaction/period.js'\nimport meetingPane from 'meeting-pane'\nimport tabbedPane from './tabbed/tabbedPane'\nimport { longChatPane, shortChatPane } from 'chat-pane'\nimport { schedulePane } from './schedule/schedulePane'\n// import publicationPane from './publication/publicationPane.js'\nimport tripPane from './trip/tripPane.js'\nimport { imagePane } from './imagePane'\nimport playListPane from './playlist/playlistPane.js'\nimport videoPane from './video/videoPane.js'\nimport audioPane from './audio/audioPane.js'\nimport dokieliPane from './dokieli/dokieliPane.js'\nimport folderPane from 'folder-pane'\nimport { classInstancePane } from './classInstancePane.js'\nimport { slideshowPane } from './slideshow/slideshowPane.js'\nimport { socialPane } from './social/socialPane'\nimport humanReadablePane from './humanReadablePane'\n\nimport { dataContentPane } from './dataContentPane'\nimport sourcePane from 'source-pane'\nimport { n3Pane } from './n3Pane'\nimport { RDFXMLPane } from './RDFXMLPane'\nimport { formPane } from './form/pane'\nimport { tableViewPane } from './tableViewPane.js'\nimport { defaultPane } from './defaultPane'\nimport uiPane from './ui/pane.js'\n\nimport sharingPane from './sharing/sharingPane'\nimport internalPane from './internal/internalPane'\n\nimport homePane from './home/homePane'\n\nexport function registerPanes (register) {\n /* Note that the earliest panes have priority. So the most specific ones are first.\n **\n */\n // Developer designed:\n\n register(profilePane) // View someone's public profile - dominates all other panes.\n const editProfileView = profilePane.editor\n if (!editProfileView) {\n console.log('@@@ editProfileView', 'profilePane is not providing an editor pane')\n } else {\n register(editProfileView) // Edit my profile.\n }\n\n register(trustedApplications) // must be registered before basicPreferences\n // register(dashboardPane)\n register(basicPreferences)\n register(issuePane)\n register(contactsPane)\n register(activityStreamsPane)\n\n register(padPane)\n // register(argumentPane) // A position in an argument tree\n\n register(transactionPane)\n register(financialPeriodPane)\n\n register(meetingPane)\n register(tabbedPane)\n\n register(longChatPane) // Long pane must have prio in case short pane tries to do a long pane\n register(shortChatPane) // was './chat/chatPane.js'\n\n // register(publicationPane) // Suppress for now\n\n register(schedulePane) // doodle poll\n\n register(tripPane)\n // register(require('./airPane.js'))\n\n // Content views\n\n register(imagePane) // Basic image view\n register(playListPane) // Basic playlist view\n\n register(videoPane) // Video clip player\n register(audioPane) // Audio clip player\n\n register(dokieliPane) // Should be above dataContentPane\n register(folderPane) // Should be above dataContentPane\n register(classInstancePane) // Should be above dataContentPane\n // register(require('./dynamic/dynamicPanes.js')) // warp etc warp broken 2017/8\n register(slideshowPane)\n\n register(socialPane)\n\n register(humanReadablePane) // A web page as a web page -- how to escape to tabr?\n // register(require('markdown-pane').Pane) // replaced by markdown in humanReadablePane\n\n register(dataContentPane) // Preferred for a data file\n register(sourcePane) // edit source\n register(n3Pane)\n register(RDFXMLPane)\n\n // User configured - data driven\n register(formPane)\n\n // Generic:\n\n register(tableViewPane)\n\n // Fallback totally generic:\n register(defaultPane)\n\n register(uiPane)\n\n // register(require(\"categoryPane.js\")) // Not useful enough\n // register(require(\"pubsPane.js\")) // not finished\n\n // @@ jambo commented these things out to pare things down temporarily.\n // Note must use // not /* to comment out to make sure expander sees it\n // register(require(\"lawPane.js\"))\n\n // register(require('./microblogPane/microblogPane.js'))\n\n // register(require(\"./social/pane.js\")) // competitor to other social\n // register(require(\"./airPane.js\"))\n // register(require(\"./lawPane.js\"))\n // register(require(\"pushbackPane.js\"))\n // register(require(\"CVPane.js\"))\n // register(require(\"photoPane.js\"))\n // register(require(\"tagPane.js\"))\n // register(require(\"photoImportPane.js\"))\n\n // The sharing pane is fairly generic and administrative 201\n register(sharingPane)\n\n // The internals pane is always (almost?) the last as it is the least user-friendly\n register(internalPane)\n\n register(homePane) // This is a global pane\n\n // ENDS\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA2CA,SAAgB,EAAe,GAAU;CAMvC,EAAS,CAAW;CACpB,IAAM,IAAkB,EAAY;CA6FpC,AA5FK,IAGH,EAAS,CAAe,IAFxB,QAAQ,IAAI,uBAAuB,6CAA6C,GAKlF,EAASA,CAAmB,GAE5B,EAASC,CAAgB,GACzB,EAAS,CAAS,GAClB,EAAS,CAAY,GACrB,EAAS,CAAmB,GAE5B,EAASC,CAAO,GAGhB,EAASC,CAAe,GACxB,EAASC,CAAmB,GAE5B,EAAS,CAAW,GACpB,EAASC,CAAU,GAEnB,EAAS,CAAY,GACrB,EAAS,CAAa,GAItB,EAAS,CAAY,GAErB,EAASC,CAAQ,GAKjB,EAAS,CAAS,GAClB,EAASC,CAAY,GAErB,EAASC,CAAS,GAClB,EAASC,CAAS,GAElB,EAASC,CAAW,GACpB,EAAS,CAAU,GACnB,EAAS,CAAiB,GAE1B,EAAS,CAAa,GAEtB,EAAS,CAAU,GAEnB,EAAS,CAAiB,GAG1B,EAAS,CAAe,GACxB,EAAS,CAAU,GACnB,EAAS,CAAM,GACf,EAAS,CAAU,GAGnB,EAAS,CAAQ,GAIjB,EAAS,CAAa,GAGtB,EAAS,CAAW,GAEpB,EAASC,CAAM,GAqBf,EAAS,CAAW,GAGpB,EAASC,CAAY,GAErB,EAASC,CAAQ;AAGnB"}
@@ -1,2 +1,2 @@
1
- let e=require("solid-ui");require("rdflib"),require("lit-html"),require("solid-ui/components/button"),e.ns.foaf(`homepage`),e.ns.foaf(`weblog`),e.ns.foaf(`workplaceHomepage`),e.ns.foaf(`schoolHomepage`);function t(e,t,n,r){}exports.appendProfileLinks=t;
1
+ require("./icons.cjs.js"),require("./spinner.cjs.js");let e=require("solid-ui");require("rdflib"),require("lit-html"),require("solid-ui/components/button"),e.ns.foaf(`homepage`),e.ns.foaf(`weblog`),e.ns.foaf(`workplaceHomepage`),e.ns.foaf(`schoolHomepage`);function t(e,t,n,r){}exports.appendProfileLinks=t;
2
2
  //# sourceMappingURL=editProfileDetails.cjs.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"editProfileDetails.cjs.js","names":[],"sources":["../../src/social/editProfileDetails.ts"],"sourcesContent":["import { LiveStore, NamedNode, st, sym } from 'rdflib'\nimport { html, render } from 'lit-html'\nimport { ns } from 'solid-ui'\nimport 'solid-ui/components/button'\nimport { editIcon, plusIcon, trashIcon } from './icons'\nimport { createSpinner } from './spinner'\n/* The following code was generated by AI Model: GPT-5.4\n Prompt: can you create me a form to enter this data [\nns.foaf('homepage'),\nns.foaf('weblog'),\nns.foaf('workplaceHomepage'),\nns.foaf('schoolHomepage')\n] and put an edit button at the top left corner of the header\n that when you click it pops up so you can enter this information\n and save it to the Webid. You can look in\n Dev2025/profile-pane/src/sections/heading/mutations to see how\n to write this data in the profile. */\ntype SolidUIButton = HTMLElement & {\n type: string\n variant: string\n size: string\n label: string\n disabled: boolean\n}\n\ntype ProfileLinkField = {\n key: 'homepage' | 'weblog' | 'workplaceHomepage' | 'schoolHomepage'\n label: string\n placeholder: string\n predicate: NamedNode\n}\n\ntype ProfileLinksValues = Record<ProfileLinkField['key'], string[]>\n\ntype EditProfileDetailsButtonOptions = {\n dom: HTMLDocument\n store: LiveStore\n subject: NamedNode\n onSaved: () => void\n}\n\nexport const profileLinkFields: ProfileLinkField[] = [\n {\n key: 'homepage',\n label: 'Homepage',\n placeholder: 'https://example.com',\n predicate: ns.foaf('homepage')\n },\n {\n key: 'weblog',\n label: 'Weblog',\n placeholder: 'https://blog.example.com',\n predicate: ns.foaf('weblog')\n },\n {\n key: 'workplaceHomepage',\n label: 'Workplace Homepage',\n placeholder: 'https://company.example.com',\n predicate: ns.foaf('workplaceHomepage')\n },\n {\n key: 'schoolHomepage',\n label: 'School Homepage',\n placeholder: 'https://school.example.edu',\n predicate: ns.foaf('schoolHomepage')\n }\n]\n\nfunction createEmptyProfileLinkValues (): ProfileLinksValues {\n return {\n homepage: [''],\n weblog: [''],\n workplaceHomepage: [''],\n schoolHomepage: ['']\n }\n}\n\nfunction readProfileLinkValues (store: LiveStore, subject: NamedNode): ProfileLinksValues {\n const doc = subject.doc()\n return profileLinkFields.reduce((result, field) => {\n const values = store\n .statementsMatching(subject, field.predicate, undefined, doc)\n .map((statement) => statement.object?.value || '')\n .filter(Boolean)\n\n result[field.key] = values.length ? values : ['']\n return result\n }, createEmptyProfileLinkValues())\n}\n\nfunction normalizeUrlList (values: string[], fieldLabel: string): string[] {\n const unique = new Set<string>()\n const lines = values\n .map((entry) => entry.trim())\n .filter(Boolean)\n\n for (const line of lines) {\n let parsed: URL\n try {\n parsed = new URL(line)\n } catch {\n throw new Error(`${fieldLabel} must contain valid absolute URLs.`)\n }\n\n if (parsed.protocol !== 'http:' && parsed.protocol !== 'https:') {\n throw new Error(`${fieldLabel} only supports http and https URLs.`)\n }\n\n unique.add(parsed.toString())\n }\n\n return [...unique]\n}\n\nasync function saveProfileLinkValues (\n store: LiveStore,\n subject: NamedNode,\n values: ProfileLinksValues\n): Promise<void> {\n const updater = (store as any).updater\n const fetcher = (store as any).fetcher\n if (!updater || typeof updater.serialize !== 'function' || !fetcher || typeof fetcher.webOperation !== 'function') {\n throw new Error('This profile cannot be edited with the current store.')\n }\n\n const doc = subject.doc()\n const insertions: any[] = []\n const existingStatements: any[] = []\n\n for (const field of profileLinkFields) {\n existingStatements.push(...store.statementsMatching(subject, field.predicate, undefined, doc))\n const nextValues = normalizeUrlList(values[field.key], field.label)\n for (const nextValue of nextValues) {\n insertions.push(st(subject, field.predicate, sym(nextValue), doc))\n }\n }\n\n const retainedStatements = store\n .statementsMatching(undefined, undefined, undefined, doc)\n .filter((statement) => {\n return !profileLinkFields.some((field) => {\n return statement.subject.equals(subject) && statement.predicate.equals(field.predicate)\n })\n })\n\n const nextStatements = retainedStatements.concat(insertions)\n const contentType = 'text/turtle'\n const body = updater.serialize(doc.value, nextStatements, contentType)\n const response = await fetcher.webOperation('PUT', doc.value, {\n noMeta: true,\n contentType,\n body\n })\n\n if (!response || response.ok !== true) {\n const status = response?.status || 'unknown'\n throw new Error(`Unable to save profile links. Web error: ${status}`)\n }\n\n existingStatements.forEach((statement) => {\n store.removeStatement(statement)\n })\n\n for (const statement of insertions) {\n store.add(statement.subject, statement.predicate, statement.object, statement.why)\n }\n}\n\nexport function appendProfileLinks (\n _container: HTMLElement,\n _dom: HTMLDocument,\n _store: LiveStore,\n _subject: NamedNode\n): void {\n // Hidden for now because social-pane website links are not part of the new design.\n // Revisit later if we decide to show profile links in this header again.\n}\n\nexport function createEditProfileDetailsButton (\n options: EditProfileDetailsButtonOptions\n): HTMLElement {\n const { dom, store, subject, onSaved } = options\n const button = dom.createElement('solid-ui-button') as SolidUIButton\n button.type = 'button'\n button.className = 'social-pane__edit-button profile__action-button profile__heading-action-button profile-action-text flex-center profile-section-collapsible__edit-button'\n button.variant = 'secondary'\n button.size = 'sm'\n\n const label = dom.createElement('span')\n label.className = 'profile-section-collapsible__edit-label social-pane__edit-button-label'\n label.innerHTML = `${editIcon} Edit`\n button.appendChild(label)\n\n const icon = dom.createElement('span')\n icon.className = 'profile-section-collapsible__edit-icon social-pane__edit-button-icon'\n icon.setAttribute('aria-hidden', 'true')\n icon.innerHTML = editIcon\n button.appendChild(icon)\n\n button.setAttribute('aria-label', 'Edit profile links')\n\n const openDialog = () => {\n const initialValues = readProfileLinkValues(store, subject)\n const formState = profileLinkFields.reduce((result, field) => {\n result[field.key] = [...initialValues[field.key]]\n return result\n }, createEmptyProfileLinkValues())\n const overlay = dom.createElement('div')\n overlay.classList.add('social-pane__dialog-backdrop', 'flex-center')\n\n const dialog = dom.createElement('div')\n dialog.classList.add('social-pane__dialog')\n dialog.setAttribute('role', 'dialog')\n dialog.setAttribute('aria-modal', 'true')\n dialog.setAttribute('aria-label', 'Edit profile links')\n overlay.appendChild(dialog)\n\n const dialogHeader = dom.createElement('div')\n dialogHeader.classList.add('social-pane__dialog-header')\n dialog.appendChild(dialogHeader)\n\n const title = dom.createElement('h2')\n title.className = 'social-pane__dialog-title'\n title.textContent = 'Edit profile links'\n dialogHeader.appendChild(title)\n\n const form = dom.createElement('form')\n form.classList.add('social-pane__dialog-form', 'flex-column')\n dialog.appendChild(form)\n\n const savingOverlay = dom.createElement('div')\n savingOverlay.className = 'social-pane__dialog-saving-overlay'\n savingOverlay.hidden = true\n dialog.appendChild(savingOverlay)\n\n const fieldsContainer = dom.createElement('div')\n fieldsContainer.className = 'social-pane__dialog-fields'\n form.appendChild(fieldsContainer)\n\n const errorMessage = dom.createElement('p')\n errorMessage.className = 'social-pane__dialog-error'\n\n const focusRow = (fieldKey: ProfileLinkField['key'], rowIndex: number) => {\n const nextField = fieldsContainer.querySelector<HTMLInputElement>(`input[data-profile-link-key=\"${fieldKey}\"][data-profile-link-index=\"${String(rowIndex)}\"]`)\n nextField?.focus()\n }\n\n const renderFields = (focusTarget?: { fieldKey: ProfileLinkField['key'], rowIndex: number }) => {\n fieldsContainer.replaceChildren()\n\n for (const field of profileLinkFields) {\n const fieldWrapper = dom.createElement('section')\n fieldWrapper.classList.add('social-pane__dialog-field', 'flex-column')\n\n const fieldHeader = dom.createElement('div')\n fieldHeader.className = 'social-pane__dialog-field-header'\n fieldWrapper.appendChild(fieldHeader)\n\n const fieldLabel = dom.createElement('h3')\n fieldLabel.className = 'social-pane__dialog-label'\n fieldLabel.textContent = field.label\n fieldHeader.appendChild(fieldLabel)\n\n const addButton = dom.createElement('solid-ui-button') as SolidUIButton\n addButton.type = 'button'\n addButton.className = 'social-pane__dialog-row-button--add'\n addButton.setAttribute('aria-label', `Add another ${field.label.toLowerCase()}`)\n addButton.variant = 'secondary'\n addButton.size = 'sm'\n const addButtonContent = dom.createElement('span')\n addButtonContent.className = 'social-pane__add-more-content'\n const addButtonInline = dom.createElement('span')\n addButtonInline.className = 'social-pane__add-more-inline'\n const addButtonIcon = dom.createElement('span')\n addButtonIcon.className = 'social-pane__add-more-icon'\n addButtonIcon.setAttribute('aria-hidden', 'true')\n addButtonIcon.innerHTML = plusIcon\n const addButtonText = dom.createElement('span')\n addButtonText.textContent = 'Add More'\n addButtonInline.appendChild(addButtonIcon)\n addButtonInline.appendChild(addButtonText)\n addButtonContent.appendChild(addButtonInline)\n addButton.appendChild(addButtonContent)\n addButton.addEventListener('click', () => {\n formState[field.key].push('')\n renderFields({ fieldKey: field.key, rowIndex: formState[field.key].length - 1 })\n })\n fieldHeader.appendChild(addButton)\n\n const rows = dom.createElement('div')\n rows.className = 'social-pane__dialog-row-list'\n fieldWrapper.appendChild(rows)\n\n const values = formState[field.key].length ? formState[field.key] : ['']\n values.forEach((value, index) => {\n const row = dom.createElement('div')\n row.className = 'social-pane__dialog-row'\n\n const input = dom.createElement('input')\n input.classList.add('social-pane__dialog-input', 'input')\n input.type = 'url'\n input.placeholder = field.placeholder\n input.value = value\n input.setAttribute('data-profile-link-key', field.key)\n input.setAttribute('data-profile-link-index', String(index))\n input.addEventListener('input', () => {\n formState[field.key][index] = input.value\n })\n row.appendChild(input)\n\n const removeButton = dom.createElement('solid-ui-button') as SolidUIButton\n removeButton.type = 'button'\n removeButton.className = 'social-pane__dialog-row-button--remove'\n removeButton.setAttribute('aria-label', `Remove ${field.label.toLowerCase()} ${index + 1}`)\n removeButton.setAttribute('title', 'Remove')\n removeButton.variant = 'icon'\n removeButton.size = 'md'\n const removeButtonIcon = dom.createElement('span')\n removeButtonIcon.className = 'social-pane__dialog-row-button-icon social-pane__dialog-row-button-icon--remove'\n removeButtonIcon.setAttribute('slot', 'icon')\n removeButtonIcon.setAttribute('aria-hidden', 'true')\n removeButtonIcon.innerHTML = trashIcon\n removeButton.appendChild(removeButtonIcon)\n removeButton.addEventListener('click', () => {\n if (formState[field.key].length === 1) {\n formState[field.key][0] = ''\n } else {\n formState[field.key].splice(index, 1)\n }\n renderFields()\n })\n row.appendChild(removeButton)\n\n rows.appendChild(row)\n })\n\n fieldsContainer.appendChild(fieldWrapper)\n }\n\n if (focusTarget) {\n focusRow(focusTarget.fieldKey, focusTarget.rowIndex)\n }\n }\n\n renderFields()\n\n form.appendChild(errorMessage)\n\n const actions = dom.createElement('div')\n actions.className = 'social-pane__dialog-actions'\n form.appendChild(actions)\n\n const closeButton = dom.createElement('solid-ui-button') as SolidUIButton\n closeButton.type = 'button'\n closeButton.className = 'social-pane__dialog-button--cancel'\n closeButton.setAttribute('aria-label', 'Close dialog')\n closeButton.label = 'Close'\n closeButton.variant = 'secondary'\n closeButton.size = 'md'\n actions.appendChild(closeButton)\n\n const saveButton = dom.createElement('solid-ui-button') as SolidUIButton\n saveButton.type = 'button'\n saveButton.className = 'social-pane__dialog-button--save'\n saveButton.label = 'Save Changes'\n saveButton.variant = 'primary'\n saveButton.size = 'md'\n actions.appendChild(saveButton)\n\n let isSaving = false\n\n const setSavingState = (nextSaving: boolean) => {\n isSaving = nextSaving\n dialog.classList.toggle('modal--saving', nextSaving)\n dialog.setAttribute('aria-busy', String(nextSaving))\n form.toggleAttribute('inert', nextSaving)\n saveButton.disabled = nextSaving\n saveButton.setAttribute('aria-busy', String(nextSaving))\n closeButton.disabled = nextSaving\n savingOverlay.hidden = !nextSaving\n\n if (nextSaving) {\n const activeElement = dialog.ownerDocument.activeElement as HTMLElement | null\n if (activeElement && dialog.contains(activeElement)) {\n activeElement.blur()\n }\n\n render(html`\n <div class=\"modal__saving-indicator inline-flex-row justify-center\" aria-live=\"polite\" aria-label=\"Saving changes\">\n ${createSpinner()}\n </div>\n `, savingOverlay)\n } else {\n render(html``, savingOverlay)\n }\n }\n\n const closeDialog = (force = false) => {\n if (isSaving && !force) return\n overlay.remove()\n }\n\n const requestCloseDialog = () => {\n closeDialog()\n }\n\n const handleSave = async () => {\n errorMessage.textContent = ''\n setSavingState(true)\n\n const nextValues = profileLinkFields.reduce((result, field) => {\n result[field.key] = [...formState[field.key]]\n return result\n }, createEmptyProfileLinkValues())\n\n try {\n await saveProfileLinkValues(store, subject, nextValues)\n setSavingState(false)\n closeDialog(true)\n onSaved()\n } catch (error) {\n errorMessage.textContent = error instanceof Error ? error.message : 'Unable to save profile links.'\n } finally {\n if (isSaving) {\n setSavingState(false)\n }\n }\n }\n\n overlay.addEventListener('click', (event) => {\n if (event.target === overlay) closeDialog()\n })\n closeButton.addEventListener('click', requestCloseDialog)\n\n saveButton.addEventListener('click', async (event) => {\n event.preventDefault()\n await handleSave()\n })\n\n overlay.addEventListener('keydown', (event) => {\n if (event.key === 'Escape') closeDialog()\n })\n\n form.addEventListener('submit', (event) => {\n event.preventDefault()\n })\n\n dom.body.appendChild(overlay)\n focusRow('homepage', 0)\n }\n\n button.addEventListener('click', openDialog)\n return button\n}\n"],"mappings":"sGA8Ce,EAAA,GAAG,KAAK,UAAU,EAMlB,EAAA,GAAG,KAAK,QAAQ,EAMhB,EAAA,GAAG,KAAK,mBAAmB,EAM3B,EAAA,GAAG,KAAK,gBAAgB,EAwGvC,SAAgB,EACd,EACA,EACA,EACA,EACM,CAGR"}
1
+ {"version":3,"file":"editProfileDetails.cjs.js","names":[],"sources":["../../src/social/editProfileDetails.ts"],"sourcesContent":["import { LiveStore, NamedNode, st, sym } from 'rdflib'\nimport { html, render } from 'lit-html'\nimport { ns } from 'solid-ui'\nimport 'solid-ui/components/button'\nimport { editIcon, plusIcon, trashIcon } from './icons'\nimport { createSpinner } from './spinner'\n/* The following code was generated by AI Model: GPT-5.4\n Prompt: can you create me a form to enter this data [\nns.foaf('homepage'),\nns.foaf('weblog'),\nns.foaf('workplaceHomepage'),\nns.foaf('schoolHomepage')\n] and put an edit button at the top left corner of the header\n that when you click it pops up so you can enter this information\n and save it to the Webid. You can look in\n Dev2025/profile-pane/src/sections/heading/mutations to see how\n to write this data in the profile. */\ntype SolidUIButton = HTMLElement & {\n type: string\n variant: string\n size: string\n label: string\n disabled: boolean\n}\n\ntype ProfileLinkField = {\n key: 'homepage' | 'weblog' | 'workplaceHomepage' | 'schoolHomepage'\n label: string\n placeholder: string\n predicate: NamedNode\n}\n\ntype ProfileLinksValues = Record<ProfileLinkField['key'], string[]>\n\ntype EditProfileDetailsButtonOptions = {\n dom: HTMLDocument\n store: LiveStore\n subject: NamedNode\n onSaved: () => void\n}\n\nexport const profileLinkFields: ProfileLinkField[] = [\n {\n key: 'homepage',\n label: 'Homepage',\n placeholder: 'https://example.com',\n predicate: ns.foaf('homepage')\n },\n {\n key: 'weblog',\n label: 'Weblog',\n placeholder: 'https://blog.example.com',\n predicate: ns.foaf('weblog')\n },\n {\n key: 'workplaceHomepage',\n label: 'Workplace Homepage',\n placeholder: 'https://company.example.com',\n predicate: ns.foaf('workplaceHomepage')\n },\n {\n key: 'schoolHomepage',\n label: 'School Homepage',\n placeholder: 'https://school.example.edu',\n predicate: ns.foaf('schoolHomepage')\n }\n]\n\nfunction createEmptyProfileLinkValues (): ProfileLinksValues {\n return {\n homepage: [''],\n weblog: [''],\n workplaceHomepage: [''],\n schoolHomepage: ['']\n }\n}\n\nfunction readProfileLinkValues (store: LiveStore, subject: NamedNode): ProfileLinksValues {\n const doc = subject.doc()\n return profileLinkFields.reduce((result, field) => {\n const values = store\n .statementsMatching(subject, field.predicate, undefined, doc)\n .map((statement) => statement.object?.value || '')\n .filter(Boolean)\n\n result[field.key] = values.length ? values : ['']\n return result\n }, createEmptyProfileLinkValues())\n}\n\nfunction normalizeUrlList (values: string[], fieldLabel: string): string[] {\n const unique = new Set<string>()\n const lines = values\n .map((entry) => entry.trim())\n .filter(Boolean)\n\n for (const line of lines) {\n let parsed: URL\n try {\n parsed = new URL(line)\n } catch {\n throw new Error(`${fieldLabel} must contain valid absolute URLs.`)\n }\n\n if (parsed.protocol !== 'http:' && parsed.protocol !== 'https:') {\n throw new Error(`${fieldLabel} only supports http and https URLs.`)\n }\n\n unique.add(parsed.toString())\n }\n\n return [...unique]\n}\n\nasync function saveProfileLinkValues (\n store: LiveStore,\n subject: NamedNode,\n values: ProfileLinksValues\n): Promise<void> {\n const updater = (store as any).updater\n const fetcher = (store as any).fetcher\n if (!updater || typeof updater.serialize !== 'function' || !fetcher || typeof fetcher.webOperation !== 'function') {\n throw new Error('This profile cannot be edited with the current store.')\n }\n\n const doc = subject.doc()\n const insertions: any[] = []\n const existingStatements: any[] = []\n\n for (const field of profileLinkFields) {\n existingStatements.push(...store.statementsMatching(subject, field.predicate, undefined, doc))\n const nextValues = normalizeUrlList(values[field.key], field.label)\n for (const nextValue of nextValues) {\n insertions.push(st(subject, field.predicate, sym(nextValue), doc))\n }\n }\n\n const retainedStatements = store\n .statementsMatching(undefined, undefined, undefined, doc)\n .filter((statement) => {\n return !profileLinkFields.some((field) => {\n return statement.subject.equals(subject) && statement.predicate.equals(field.predicate)\n })\n })\n\n const nextStatements = retainedStatements.concat(insertions)\n const contentType = 'text/turtle'\n const body = updater.serialize(doc.value, nextStatements, contentType)\n const response = await fetcher.webOperation('PUT', doc.value, {\n noMeta: true,\n contentType,\n body\n })\n\n if (!response || response.ok !== true) {\n const status = response?.status || 'unknown'\n throw new Error(`Unable to save profile links. Web error: ${status}`)\n }\n\n existingStatements.forEach((statement) => {\n store.removeStatement(statement)\n })\n\n for (const statement of insertions) {\n store.add(statement.subject, statement.predicate, statement.object, statement.why)\n }\n}\n\nexport function appendProfileLinks (\n _container: HTMLElement,\n _dom: HTMLDocument,\n _store: LiveStore,\n _subject: NamedNode\n): void {\n // Hidden for now because social-pane website links are not part of the new design.\n // Revisit later if we decide to show profile links in this header again.\n}\n\nexport function createEditProfileDetailsButton (\n options: EditProfileDetailsButtonOptions\n): HTMLElement {\n const { dom, store, subject, onSaved } = options\n const button = dom.createElement('solid-ui-button') as SolidUIButton\n button.type = 'button'\n button.className = 'social-pane__edit-button profile__action-button profile__heading-action-button profile-action-text flex-center profile-section-collapsible__edit-button'\n button.variant = 'secondary'\n button.size = 'sm'\n\n const label = dom.createElement('span')\n label.className = 'profile-section-collapsible__edit-label social-pane__edit-button-label'\n label.innerHTML = `${editIcon} Edit`\n button.appendChild(label)\n\n const icon = dom.createElement('span')\n icon.className = 'profile-section-collapsible__edit-icon social-pane__edit-button-icon'\n icon.setAttribute('aria-hidden', 'true')\n icon.innerHTML = editIcon\n button.appendChild(icon)\n\n button.setAttribute('aria-label', 'Edit profile links')\n\n const openDialog = () => {\n const initialValues = readProfileLinkValues(store, subject)\n const formState = profileLinkFields.reduce((result, field) => {\n result[field.key] = [...initialValues[field.key]]\n return result\n }, createEmptyProfileLinkValues())\n const overlay = dom.createElement('div')\n overlay.classList.add('social-pane__dialog-backdrop', 'flex-center')\n\n const dialog = dom.createElement('div')\n dialog.classList.add('social-pane__dialog')\n dialog.setAttribute('role', 'dialog')\n dialog.setAttribute('aria-modal', 'true')\n dialog.setAttribute('aria-label', 'Edit profile links')\n overlay.appendChild(dialog)\n\n const dialogHeader = dom.createElement('div')\n dialogHeader.classList.add('social-pane__dialog-header')\n dialog.appendChild(dialogHeader)\n\n const title = dom.createElement('h2')\n title.className = 'social-pane__dialog-title'\n title.textContent = 'Edit profile links'\n dialogHeader.appendChild(title)\n\n const form = dom.createElement('form')\n form.classList.add('social-pane__dialog-form', 'flex-column')\n dialog.appendChild(form)\n\n const savingOverlay = dom.createElement('div')\n savingOverlay.className = 'social-pane__dialog-saving-overlay'\n savingOverlay.hidden = true\n dialog.appendChild(savingOverlay)\n\n const fieldsContainer = dom.createElement('div')\n fieldsContainer.className = 'social-pane__dialog-fields'\n form.appendChild(fieldsContainer)\n\n const errorMessage = dom.createElement('p')\n errorMessage.className = 'social-pane__dialog-error'\n\n const focusRow = (fieldKey: ProfileLinkField['key'], rowIndex: number) => {\n const nextField = fieldsContainer.querySelector<HTMLInputElement>(`input[data-profile-link-key=\"${fieldKey}\"][data-profile-link-index=\"${String(rowIndex)}\"]`)\n nextField?.focus()\n }\n\n const renderFields = (focusTarget?: { fieldKey: ProfileLinkField['key'], rowIndex: number }) => {\n fieldsContainer.replaceChildren()\n\n for (const field of profileLinkFields) {\n const fieldWrapper = dom.createElement('section')\n fieldWrapper.classList.add('social-pane__dialog-field', 'flex-column')\n\n const fieldHeader = dom.createElement('div')\n fieldHeader.className = 'social-pane__dialog-field-header'\n fieldWrapper.appendChild(fieldHeader)\n\n const fieldLabel = dom.createElement('h3')\n fieldLabel.className = 'social-pane__dialog-label'\n fieldLabel.textContent = field.label\n fieldHeader.appendChild(fieldLabel)\n\n const addButton = dom.createElement('solid-ui-button') as SolidUIButton\n addButton.type = 'button'\n addButton.className = 'social-pane__dialog-row-button--add'\n addButton.setAttribute('aria-label', `Add another ${field.label.toLowerCase()}`)\n addButton.variant = 'secondary'\n addButton.size = 'sm'\n const addButtonContent = dom.createElement('span')\n addButtonContent.className = 'social-pane__add-more-content'\n const addButtonInline = dom.createElement('span')\n addButtonInline.className = 'social-pane__add-more-inline'\n const addButtonIcon = dom.createElement('span')\n addButtonIcon.className = 'social-pane__add-more-icon'\n addButtonIcon.setAttribute('aria-hidden', 'true')\n addButtonIcon.innerHTML = plusIcon\n const addButtonText = dom.createElement('span')\n addButtonText.textContent = 'Add More'\n addButtonInline.appendChild(addButtonIcon)\n addButtonInline.appendChild(addButtonText)\n addButtonContent.appendChild(addButtonInline)\n addButton.appendChild(addButtonContent)\n addButton.addEventListener('click', () => {\n formState[field.key].push('')\n renderFields({ fieldKey: field.key, rowIndex: formState[field.key].length - 1 })\n })\n fieldHeader.appendChild(addButton)\n\n const rows = dom.createElement('div')\n rows.className = 'social-pane__dialog-row-list'\n fieldWrapper.appendChild(rows)\n\n const values = formState[field.key].length ? formState[field.key] : ['']\n values.forEach((value, index) => {\n const row = dom.createElement('div')\n row.className = 'social-pane__dialog-row'\n\n const input = dom.createElement('input')\n input.classList.add('social-pane__dialog-input', 'input')\n input.type = 'url'\n input.placeholder = field.placeholder\n input.value = value\n input.setAttribute('data-profile-link-key', field.key)\n input.setAttribute('data-profile-link-index', String(index))\n input.addEventListener('input', () => {\n formState[field.key][index] = input.value\n })\n row.appendChild(input)\n\n const removeButton = dom.createElement('solid-ui-button') as SolidUIButton\n removeButton.type = 'button'\n removeButton.className = 'social-pane__dialog-row-button--remove'\n removeButton.setAttribute('aria-label', `Remove ${field.label.toLowerCase()} ${index + 1}`)\n removeButton.setAttribute('title', 'Remove')\n removeButton.variant = 'icon'\n removeButton.size = 'md'\n const removeButtonIcon = dom.createElement('span')\n removeButtonIcon.className = 'social-pane__dialog-row-button-icon social-pane__dialog-row-button-icon--remove'\n removeButtonIcon.setAttribute('slot', 'icon')\n removeButtonIcon.setAttribute('aria-hidden', 'true')\n removeButtonIcon.innerHTML = trashIcon\n removeButton.appendChild(removeButtonIcon)\n removeButton.addEventListener('click', () => {\n if (formState[field.key].length === 1) {\n formState[field.key][0] = ''\n } else {\n formState[field.key].splice(index, 1)\n }\n renderFields()\n })\n row.appendChild(removeButton)\n\n rows.appendChild(row)\n })\n\n fieldsContainer.appendChild(fieldWrapper)\n }\n\n if (focusTarget) {\n focusRow(focusTarget.fieldKey, focusTarget.rowIndex)\n }\n }\n\n renderFields()\n\n form.appendChild(errorMessage)\n\n const actions = dom.createElement('div')\n actions.className = 'social-pane__dialog-actions'\n form.appendChild(actions)\n\n const closeButton = dom.createElement('solid-ui-button') as SolidUIButton\n closeButton.type = 'button'\n closeButton.className = 'social-pane__dialog-button--cancel'\n closeButton.setAttribute('aria-label', 'Close dialog')\n closeButton.label = 'Close'\n closeButton.variant = 'secondary'\n closeButton.size = 'md'\n actions.appendChild(closeButton)\n\n const saveButton = dom.createElement('solid-ui-button') as SolidUIButton\n saveButton.type = 'button'\n saveButton.className = 'social-pane__dialog-button--save'\n saveButton.label = 'Save Changes'\n saveButton.variant = 'primary'\n saveButton.size = 'md'\n actions.appendChild(saveButton)\n\n let isSaving = false\n\n const setSavingState = (nextSaving: boolean) => {\n isSaving = nextSaving\n dialog.classList.toggle('modal--saving', nextSaving)\n dialog.setAttribute('aria-busy', String(nextSaving))\n form.toggleAttribute('inert', nextSaving)\n saveButton.disabled = nextSaving\n saveButton.setAttribute('aria-busy', String(nextSaving))\n closeButton.disabled = nextSaving\n savingOverlay.hidden = !nextSaving\n\n if (nextSaving) {\n const activeElement = dialog.ownerDocument.activeElement as HTMLElement | null\n if (activeElement && dialog.contains(activeElement)) {\n activeElement.blur()\n }\n\n render(html`\n <div class=\"modal__saving-indicator inline-flex-row justify-center\" aria-live=\"polite\" aria-label=\"Saving changes\">\n ${createSpinner()}\n </div>\n `, savingOverlay)\n } else {\n render(html``, savingOverlay)\n }\n }\n\n const closeDialog = (force = false) => {\n if (isSaving && !force) return\n overlay.remove()\n }\n\n const requestCloseDialog = () => {\n closeDialog()\n }\n\n const handleSave = async () => {\n errorMessage.textContent = ''\n setSavingState(true)\n\n const nextValues = profileLinkFields.reduce((result, field) => {\n result[field.key] = [...formState[field.key]]\n return result\n }, createEmptyProfileLinkValues())\n\n try {\n await saveProfileLinkValues(store, subject, nextValues)\n setSavingState(false)\n closeDialog(true)\n onSaved()\n } catch (error) {\n errorMessage.textContent = error instanceof Error ? error.message : 'Unable to save profile links.'\n } finally {\n if (isSaving) {\n setSavingState(false)\n }\n }\n }\n\n overlay.addEventListener('click', (event) => {\n if (event.target === overlay) closeDialog()\n })\n closeButton.addEventListener('click', requestCloseDialog)\n\n saveButton.addEventListener('click', async (event) => {\n event.preventDefault()\n await handleSave()\n })\n\n overlay.addEventListener('keydown', (event) => {\n if (event.key === 'Escape') closeDialog()\n })\n\n form.addEventListener('submit', (event) => {\n event.preventDefault()\n })\n\n dom.body.appendChild(overlay)\n focusRow('homepage', 0)\n }\n\n button.addEventListener('click', openDialog)\n return button\n}\n"],"mappings":"4JA8Ce,EAAA,GAAG,KAAK,UAAU,EAMlB,EAAA,GAAG,KAAK,QAAQ,EAMhB,EAAA,GAAG,KAAK,mBAAmB,EAM3B,EAAA,GAAG,KAAK,gBAAgB,EAwGvC,SAAgB,EACd,EACA,EACA,EACA,EACM,CAGR"}
@@ -1,3 +1,5 @@
1
+ import "./icons.esm.js";
2
+ import "./spinner.esm.js";
1
3
  import { ns as e } from "solid-ui";
2
4
  import "rdflib";
3
5
  import "lit-html";
@@ -1 +1 @@
1
- {"version":3,"file":"editProfileDetails.esm.js","names":[],"sources":["../../src/social/editProfileDetails.ts"],"sourcesContent":["import { LiveStore, NamedNode, st, sym } from 'rdflib'\nimport { html, render } from 'lit-html'\nimport { ns } from 'solid-ui'\nimport 'solid-ui/components/button'\nimport { editIcon, plusIcon, trashIcon } from './icons'\nimport { createSpinner } from './spinner'\n/* The following code was generated by AI Model: GPT-5.4\n Prompt: can you create me a form to enter this data [\nns.foaf('homepage'),\nns.foaf('weblog'),\nns.foaf('workplaceHomepage'),\nns.foaf('schoolHomepage')\n] and put an edit button at the top left corner of the header\n that when you click it pops up so you can enter this information\n and save it to the Webid. You can look in\n Dev2025/profile-pane/src/sections/heading/mutations to see how\n to write this data in the profile. */\ntype SolidUIButton = HTMLElement & {\n type: string\n variant: string\n size: string\n label: string\n disabled: boolean\n}\n\ntype ProfileLinkField = {\n key: 'homepage' | 'weblog' | 'workplaceHomepage' | 'schoolHomepage'\n label: string\n placeholder: string\n predicate: NamedNode\n}\n\ntype ProfileLinksValues = Record<ProfileLinkField['key'], string[]>\n\ntype EditProfileDetailsButtonOptions = {\n dom: HTMLDocument\n store: LiveStore\n subject: NamedNode\n onSaved: () => void\n}\n\nexport const profileLinkFields: ProfileLinkField[] = [\n {\n key: 'homepage',\n label: 'Homepage',\n placeholder: 'https://example.com',\n predicate: ns.foaf('homepage')\n },\n {\n key: 'weblog',\n label: 'Weblog',\n placeholder: 'https://blog.example.com',\n predicate: ns.foaf('weblog')\n },\n {\n key: 'workplaceHomepage',\n label: 'Workplace Homepage',\n placeholder: 'https://company.example.com',\n predicate: ns.foaf('workplaceHomepage')\n },\n {\n key: 'schoolHomepage',\n label: 'School Homepage',\n placeholder: 'https://school.example.edu',\n predicate: ns.foaf('schoolHomepage')\n }\n]\n\nfunction createEmptyProfileLinkValues (): ProfileLinksValues {\n return {\n homepage: [''],\n weblog: [''],\n workplaceHomepage: [''],\n schoolHomepage: ['']\n }\n}\n\nfunction readProfileLinkValues (store: LiveStore, subject: NamedNode): ProfileLinksValues {\n const doc = subject.doc()\n return profileLinkFields.reduce((result, field) => {\n const values = store\n .statementsMatching(subject, field.predicate, undefined, doc)\n .map((statement) => statement.object?.value || '')\n .filter(Boolean)\n\n result[field.key] = values.length ? values : ['']\n return result\n }, createEmptyProfileLinkValues())\n}\n\nfunction normalizeUrlList (values: string[], fieldLabel: string): string[] {\n const unique = new Set<string>()\n const lines = values\n .map((entry) => entry.trim())\n .filter(Boolean)\n\n for (const line of lines) {\n let parsed: URL\n try {\n parsed = new URL(line)\n } catch {\n throw new Error(`${fieldLabel} must contain valid absolute URLs.`)\n }\n\n if (parsed.protocol !== 'http:' && parsed.protocol !== 'https:') {\n throw new Error(`${fieldLabel} only supports http and https URLs.`)\n }\n\n unique.add(parsed.toString())\n }\n\n return [...unique]\n}\n\nasync function saveProfileLinkValues (\n store: LiveStore,\n subject: NamedNode,\n values: ProfileLinksValues\n): Promise<void> {\n const updater = (store as any).updater\n const fetcher = (store as any).fetcher\n if (!updater || typeof updater.serialize !== 'function' || !fetcher || typeof fetcher.webOperation !== 'function') {\n throw new Error('This profile cannot be edited with the current store.')\n }\n\n const doc = subject.doc()\n const insertions: any[] = []\n const existingStatements: any[] = []\n\n for (const field of profileLinkFields) {\n existingStatements.push(...store.statementsMatching(subject, field.predicate, undefined, doc))\n const nextValues = normalizeUrlList(values[field.key], field.label)\n for (const nextValue of nextValues) {\n insertions.push(st(subject, field.predicate, sym(nextValue), doc))\n }\n }\n\n const retainedStatements = store\n .statementsMatching(undefined, undefined, undefined, doc)\n .filter((statement) => {\n return !profileLinkFields.some((field) => {\n return statement.subject.equals(subject) && statement.predicate.equals(field.predicate)\n })\n })\n\n const nextStatements = retainedStatements.concat(insertions)\n const contentType = 'text/turtle'\n const body = updater.serialize(doc.value, nextStatements, contentType)\n const response = await fetcher.webOperation('PUT', doc.value, {\n noMeta: true,\n contentType,\n body\n })\n\n if (!response || response.ok !== true) {\n const status = response?.status || 'unknown'\n throw new Error(`Unable to save profile links. Web error: ${status}`)\n }\n\n existingStatements.forEach((statement) => {\n store.removeStatement(statement)\n })\n\n for (const statement of insertions) {\n store.add(statement.subject, statement.predicate, statement.object, statement.why)\n }\n}\n\nexport function appendProfileLinks (\n _container: HTMLElement,\n _dom: HTMLDocument,\n _store: LiveStore,\n _subject: NamedNode\n): void {\n // Hidden for now because social-pane website links are not part of the new design.\n // Revisit later if we decide to show profile links in this header again.\n}\n\nexport function createEditProfileDetailsButton (\n options: EditProfileDetailsButtonOptions\n): HTMLElement {\n const { dom, store, subject, onSaved } = options\n const button = dom.createElement('solid-ui-button') as SolidUIButton\n button.type = 'button'\n button.className = 'social-pane__edit-button profile__action-button profile__heading-action-button profile-action-text flex-center profile-section-collapsible__edit-button'\n button.variant = 'secondary'\n button.size = 'sm'\n\n const label = dom.createElement('span')\n label.className = 'profile-section-collapsible__edit-label social-pane__edit-button-label'\n label.innerHTML = `${editIcon} Edit`\n button.appendChild(label)\n\n const icon = dom.createElement('span')\n icon.className = 'profile-section-collapsible__edit-icon social-pane__edit-button-icon'\n icon.setAttribute('aria-hidden', 'true')\n icon.innerHTML = editIcon\n button.appendChild(icon)\n\n button.setAttribute('aria-label', 'Edit profile links')\n\n const openDialog = () => {\n const initialValues = readProfileLinkValues(store, subject)\n const formState = profileLinkFields.reduce((result, field) => {\n result[field.key] = [...initialValues[field.key]]\n return result\n }, createEmptyProfileLinkValues())\n const overlay = dom.createElement('div')\n overlay.classList.add('social-pane__dialog-backdrop', 'flex-center')\n\n const dialog = dom.createElement('div')\n dialog.classList.add('social-pane__dialog')\n dialog.setAttribute('role', 'dialog')\n dialog.setAttribute('aria-modal', 'true')\n dialog.setAttribute('aria-label', 'Edit profile links')\n overlay.appendChild(dialog)\n\n const dialogHeader = dom.createElement('div')\n dialogHeader.classList.add('social-pane__dialog-header')\n dialog.appendChild(dialogHeader)\n\n const title = dom.createElement('h2')\n title.className = 'social-pane__dialog-title'\n title.textContent = 'Edit profile links'\n dialogHeader.appendChild(title)\n\n const form = dom.createElement('form')\n form.classList.add('social-pane__dialog-form', 'flex-column')\n dialog.appendChild(form)\n\n const savingOverlay = dom.createElement('div')\n savingOverlay.className = 'social-pane__dialog-saving-overlay'\n savingOverlay.hidden = true\n dialog.appendChild(savingOverlay)\n\n const fieldsContainer = dom.createElement('div')\n fieldsContainer.className = 'social-pane__dialog-fields'\n form.appendChild(fieldsContainer)\n\n const errorMessage = dom.createElement('p')\n errorMessage.className = 'social-pane__dialog-error'\n\n const focusRow = (fieldKey: ProfileLinkField['key'], rowIndex: number) => {\n const nextField = fieldsContainer.querySelector<HTMLInputElement>(`input[data-profile-link-key=\"${fieldKey}\"][data-profile-link-index=\"${String(rowIndex)}\"]`)\n nextField?.focus()\n }\n\n const renderFields = (focusTarget?: { fieldKey: ProfileLinkField['key'], rowIndex: number }) => {\n fieldsContainer.replaceChildren()\n\n for (const field of profileLinkFields) {\n const fieldWrapper = dom.createElement('section')\n fieldWrapper.classList.add('social-pane__dialog-field', 'flex-column')\n\n const fieldHeader = dom.createElement('div')\n fieldHeader.className = 'social-pane__dialog-field-header'\n fieldWrapper.appendChild(fieldHeader)\n\n const fieldLabel = dom.createElement('h3')\n fieldLabel.className = 'social-pane__dialog-label'\n fieldLabel.textContent = field.label\n fieldHeader.appendChild(fieldLabel)\n\n const addButton = dom.createElement('solid-ui-button') as SolidUIButton\n addButton.type = 'button'\n addButton.className = 'social-pane__dialog-row-button--add'\n addButton.setAttribute('aria-label', `Add another ${field.label.toLowerCase()}`)\n addButton.variant = 'secondary'\n addButton.size = 'sm'\n const addButtonContent = dom.createElement('span')\n addButtonContent.className = 'social-pane__add-more-content'\n const addButtonInline = dom.createElement('span')\n addButtonInline.className = 'social-pane__add-more-inline'\n const addButtonIcon = dom.createElement('span')\n addButtonIcon.className = 'social-pane__add-more-icon'\n addButtonIcon.setAttribute('aria-hidden', 'true')\n addButtonIcon.innerHTML = plusIcon\n const addButtonText = dom.createElement('span')\n addButtonText.textContent = 'Add More'\n addButtonInline.appendChild(addButtonIcon)\n addButtonInline.appendChild(addButtonText)\n addButtonContent.appendChild(addButtonInline)\n addButton.appendChild(addButtonContent)\n addButton.addEventListener('click', () => {\n formState[field.key].push('')\n renderFields({ fieldKey: field.key, rowIndex: formState[field.key].length - 1 })\n })\n fieldHeader.appendChild(addButton)\n\n const rows = dom.createElement('div')\n rows.className = 'social-pane__dialog-row-list'\n fieldWrapper.appendChild(rows)\n\n const values = formState[field.key].length ? formState[field.key] : ['']\n values.forEach((value, index) => {\n const row = dom.createElement('div')\n row.className = 'social-pane__dialog-row'\n\n const input = dom.createElement('input')\n input.classList.add('social-pane__dialog-input', 'input')\n input.type = 'url'\n input.placeholder = field.placeholder\n input.value = value\n input.setAttribute('data-profile-link-key', field.key)\n input.setAttribute('data-profile-link-index', String(index))\n input.addEventListener('input', () => {\n formState[field.key][index] = input.value\n })\n row.appendChild(input)\n\n const removeButton = dom.createElement('solid-ui-button') as SolidUIButton\n removeButton.type = 'button'\n removeButton.className = 'social-pane__dialog-row-button--remove'\n removeButton.setAttribute('aria-label', `Remove ${field.label.toLowerCase()} ${index + 1}`)\n removeButton.setAttribute('title', 'Remove')\n removeButton.variant = 'icon'\n removeButton.size = 'md'\n const removeButtonIcon = dom.createElement('span')\n removeButtonIcon.className = 'social-pane__dialog-row-button-icon social-pane__dialog-row-button-icon--remove'\n removeButtonIcon.setAttribute('slot', 'icon')\n removeButtonIcon.setAttribute('aria-hidden', 'true')\n removeButtonIcon.innerHTML = trashIcon\n removeButton.appendChild(removeButtonIcon)\n removeButton.addEventListener('click', () => {\n if (formState[field.key].length === 1) {\n formState[field.key][0] = ''\n } else {\n formState[field.key].splice(index, 1)\n }\n renderFields()\n })\n row.appendChild(removeButton)\n\n rows.appendChild(row)\n })\n\n fieldsContainer.appendChild(fieldWrapper)\n }\n\n if (focusTarget) {\n focusRow(focusTarget.fieldKey, focusTarget.rowIndex)\n }\n }\n\n renderFields()\n\n form.appendChild(errorMessage)\n\n const actions = dom.createElement('div')\n actions.className = 'social-pane__dialog-actions'\n form.appendChild(actions)\n\n const closeButton = dom.createElement('solid-ui-button') as SolidUIButton\n closeButton.type = 'button'\n closeButton.className = 'social-pane__dialog-button--cancel'\n closeButton.setAttribute('aria-label', 'Close dialog')\n closeButton.label = 'Close'\n closeButton.variant = 'secondary'\n closeButton.size = 'md'\n actions.appendChild(closeButton)\n\n const saveButton = dom.createElement('solid-ui-button') as SolidUIButton\n saveButton.type = 'button'\n saveButton.className = 'social-pane__dialog-button--save'\n saveButton.label = 'Save Changes'\n saveButton.variant = 'primary'\n saveButton.size = 'md'\n actions.appendChild(saveButton)\n\n let isSaving = false\n\n const setSavingState = (nextSaving: boolean) => {\n isSaving = nextSaving\n dialog.classList.toggle('modal--saving', nextSaving)\n dialog.setAttribute('aria-busy', String(nextSaving))\n form.toggleAttribute('inert', nextSaving)\n saveButton.disabled = nextSaving\n saveButton.setAttribute('aria-busy', String(nextSaving))\n closeButton.disabled = nextSaving\n savingOverlay.hidden = !nextSaving\n\n if (nextSaving) {\n const activeElement = dialog.ownerDocument.activeElement as HTMLElement | null\n if (activeElement && dialog.contains(activeElement)) {\n activeElement.blur()\n }\n\n render(html`\n <div class=\"modal__saving-indicator inline-flex-row justify-center\" aria-live=\"polite\" aria-label=\"Saving changes\">\n ${createSpinner()}\n </div>\n `, savingOverlay)\n } else {\n render(html``, savingOverlay)\n }\n }\n\n const closeDialog = (force = false) => {\n if (isSaving && !force) return\n overlay.remove()\n }\n\n const requestCloseDialog = () => {\n closeDialog()\n }\n\n const handleSave = async () => {\n errorMessage.textContent = ''\n setSavingState(true)\n\n const nextValues = profileLinkFields.reduce((result, field) => {\n result[field.key] = [...formState[field.key]]\n return result\n }, createEmptyProfileLinkValues())\n\n try {\n await saveProfileLinkValues(store, subject, nextValues)\n setSavingState(false)\n closeDialog(true)\n onSaved()\n } catch (error) {\n errorMessage.textContent = error instanceof Error ? error.message : 'Unable to save profile links.'\n } finally {\n if (isSaving) {\n setSavingState(false)\n }\n }\n }\n\n overlay.addEventListener('click', (event) => {\n if (event.target === overlay) closeDialog()\n })\n closeButton.addEventListener('click', requestCloseDialog)\n\n saveButton.addEventListener('click', async (event) => {\n event.preventDefault()\n await handleSave()\n })\n\n overlay.addEventListener('keydown', (event) => {\n if (event.key === 'Escape') closeDialog()\n })\n\n form.addEventListener('submit', (event) => {\n event.preventDefault()\n })\n\n dom.body.appendChild(overlay)\n focusRow('homepage', 0)\n }\n\n button.addEventListener('click', openDialog)\n return button\n}\n"],"mappings":";;;;AA8Ce,EAAG,KAAK,UAAU,GAMlB,EAAG,KAAK,QAAQ,GAMhB,EAAG,KAAK,mBAAmB,GAM3B,EAAG,KAAK,gBAAgB;AAwGvC,SAAgB,EACd,GACA,GACA,GACA,GACM,CAGR"}
1
+ {"version":3,"file":"editProfileDetails.esm.js","names":[],"sources":["../../src/social/editProfileDetails.ts"],"sourcesContent":["import { LiveStore, NamedNode, st, sym } from 'rdflib'\nimport { html, render } from 'lit-html'\nimport { ns } from 'solid-ui'\nimport 'solid-ui/components/button'\nimport { editIcon, plusIcon, trashIcon } from './icons'\nimport { createSpinner } from './spinner'\n/* The following code was generated by AI Model: GPT-5.4\n Prompt: can you create me a form to enter this data [\nns.foaf('homepage'),\nns.foaf('weblog'),\nns.foaf('workplaceHomepage'),\nns.foaf('schoolHomepage')\n] and put an edit button at the top left corner of the header\n that when you click it pops up so you can enter this information\n and save it to the Webid. You can look in\n Dev2025/profile-pane/src/sections/heading/mutations to see how\n to write this data in the profile. */\ntype SolidUIButton = HTMLElement & {\n type: string\n variant: string\n size: string\n label: string\n disabled: boolean\n}\n\ntype ProfileLinkField = {\n key: 'homepage' | 'weblog' | 'workplaceHomepage' | 'schoolHomepage'\n label: string\n placeholder: string\n predicate: NamedNode\n}\n\ntype ProfileLinksValues = Record<ProfileLinkField['key'], string[]>\n\ntype EditProfileDetailsButtonOptions = {\n dom: HTMLDocument\n store: LiveStore\n subject: NamedNode\n onSaved: () => void\n}\n\nexport const profileLinkFields: ProfileLinkField[] = [\n {\n key: 'homepage',\n label: 'Homepage',\n placeholder: 'https://example.com',\n predicate: ns.foaf('homepage')\n },\n {\n key: 'weblog',\n label: 'Weblog',\n placeholder: 'https://blog.example.com',\n predicate: ns.foaf('weblog')\n },\n {\n key: 'workplaceHomepage',\n label: 'Workplace Homepage',\n placeholder: 'https://company.example.com',\n predicate: ns.foaf('workplaceHomepage')\n },\n {\n key: 'schoolHomepage',\n label: 'School Homepage',\n placeholder: 'https://school.example.edu',\n predicate: ns.foaf('schoolHomepage')\n }\n]\n\nfunction createEmptyProfileLinkValues (): ProfileLinksValues {\n return {\n homepage: [''],\n weblog: [''],\n workplaceHomepage: [''],\n schoolHomepage: ['']\n }\n}\n\nfunction readProfileLinkValues (store: LiveStore, subject: NamedNode): ProfileLinksValues {\n const doc = subject.doc()\n return profileLinkFields.reduce((result, field) => {\n const values = store\n .statementsMatching(subject, field.predicate, undefined, doc)\n .map((statement) => statement.object?.value || '')\n .filter(Boolean)\n\n result[field.key] = values.length ? values : ['']\n return result\n }, createEmptyProfileLinkValues())\n}\n\nfunction normalizeUrlList (values: string[], fieldLabel: string): string[] {\n const unique = new Set<string>()\n const lines = values\n .map((entry) => entry.trim())\n .filter(Boolean)\n\n for (const line of lines) {\n let parsed: URL\n try {\n parsed = new URL(line)\n } catch {\n throw new Error(`${fieldLabel} must contain valid absolute URLs.`)\n }\n\n if (parsed.protocol !== 'http:' && parsed.protocol !== 'https:') {\n throw new Error(`${fieldLabel} only supports http and https URLs.`)\n }\n\n unique.add(parsed.toString())\n }\n\n return [...unique]\n}\n\nasync function saveProfileLinkValues (\n store: LiveStore,\n subject: NamedNode,\n values: ProfileLinksValues\n): Promise<void> {\n const updater = (store as any).updater\n const fetcher = (store as any).fetcher\n if (!updater || typeof updater.serialize !== 'function' || !fetcher || typeof fetcher.webOperation !== 'function') {\n throw new Error('This profile cannot be edited with the current store.')\n }\n\n const doc = subject.doc()\n const insertions: any[] = []\n const existingStatements: any[] = []\n\n for (const field of profileLinkFields) {\n existingStatements.push(...store.statementsMatching(subject, field.predicate, undefined, doc))\n const nextValues = normalizeUrlList(values[field.key], field.label)\n for (const nextValue of nextValues) {\n insertions.push(st(subject, field.predicate, sym(nextValue), doc))\n }\n }\n\n const retainedStatements = store\n .statementsMatching(undefined, undefined, undefined, doc)\n .filter((statement) => {\n return !profileLinkFields.some((field) => {\n return statement.subject.equals(subject) && statement.predicate.equals(field.predicate)\n })\n })\n\n const nextStatements = retainedStatements.concat(insertions)\n const contentType = 'text/turtle'\n const body = updater.serialize(doc.value, nextStatements, contentType)\n const response = await fetcher.webOperation('PUT', doc.value, {\n noMeta: true,\n contentType,\n body\n })\n\n if (!response || response.ok !== true) {\n const status = response?.status || 'unknown'\n throw new Error(`Unable to save profile links. Web error: ${status}`)\n }\n\n existingStatements.forEach((statement) => {\n store.removeStatement(statement)\n })\n\n for (const statement of insertions) {\n store.add(statement.subject, statement.predicate, statement.object, statement.why)\n }\n}\n\nexport function appendProfileLinks (\n _container: HTMLElement,\n _dom: HTMLDocument,\n _store: LiveStore,\n _subject: NamedNode\n): void {\n // Hidden for now because social-pane website links are not part of the new design.\n // Revisit later if we decide to show profile links in this header again.\n}\n\nexport function createEditProfileDetailsButton (\n options: EditProfileDetailsButtonOptions\n): HTMLElement {\n const { dom, store, subject, onSaved } = options\n const button = dom.createElement('solid-ui-button') as SolidUIButton\n button.type = 'button'\n button.className = 'social-pane__edit-button profile__action-button profile__heading-action-button profile-action-text flex-center profile-section-collapsible__edit-button'\n button.variant = 'secondary'\n button.size = 'sm'\n\n const label = dom.createElement('span')\n label.className = 'profile-section-collapsible__edit-label social-pane__edit-button-label'\n label.innerHTML = `${editIcon} Edit`\n button.appendChild(label)\n\n const icon = dom.createElement('span')\n icon.className = 'profile-section-collapsible__edit-icon social-pane__edit-button-icon'\n icon.setAttribute('aria-hidden', 'true')\n icon.innerHTML = editIcon\n button.appendChild(icon)\n\n button.setAttribute('aria-label', 'Edit profile links')\n\n const openDialog = () => {\n const initialValues = readProfileLinkValues(store, subject)\n const formState = profileLinkFields.reduce((result, field) => {\n result[field.key] = [...initialValues[field.key]]\n return result\n }, createEmptyProfileLinkValues())\n const overlay = dom.createElement('div')\n overlay.classList.add('social-pane__dialog-backdrop', 'flex-center')\n\n const dialog = dom.createElement('div')\n dialog.classList.add('social-pane__dialog')\n dialog.setAttribute('role', 'dialog')\n dialog.setAttribute('aria-modal', 'true')\n dialog.setAttribute('aria-label', 'Edit profile links')\n overlay.appendChild(dialog)\n\n const dialogHeader = dom.createElement('div')\n dialogHeader.classList.add('social-pane__dialog-header')\n dialog.appendChild(dialogHeader)\n\n const title = dom.createElement('h2')\n title.className = 'social-pane__dialog-title'\n title.textContent = 'Edit profile links'\n dialogHeader.appendChild(title)\n\n const form = dom.createElement('form')\n form.classList.add('social-pane__dialog-form', 'flex-column')\n dialog.appendChild(form)\n\n const savingOverlay = dom.createElement('div')\n savingOverlay.className = 'social-pane__dialog-saving-overlay'\n savingOverlay.hidden = true\n dialog.appendChild(savingOverlay)\n\n const fieldsContainer = dom.createElement('div')\n fieldsContainer.className = 'social-pane__dialog-fields'\n form.appendChild(fieldsContainer)\n\n const errorMessage = dom.createElement('p')\n errorMessage.className = 'social-pane__dialog-error'\n\n const focusRow = (fieldKey: ProfileLinkField['key'], rowIndex: number) => {\n const nextField = fieldsContainer.querySelector<HTMLInputElement>(`input[data-profile-link-key=\"${fieldKey}\"][data-profile-link-index=\"${String(rowIndex)}\"]`)\n nextField?.focus()\n }\n\n const renderFields = (focusTarget?: { fieldKey: ProfileLinkField['key'], rowIndex: number }) => {\n fieldsContainer.replaceChildren()\n\n for (const field of profileLinkFields) {\n const fieldWrapper = dom.createElement('section')\n fieldWrapper.classList.add('social-pane__dialog-field', 'flex-column')\n\n const fieldHeader = dom.createElement('div')\n fieldHeader.className = 'social-pane__dialog-field-header'\n fieldWrapper.appendChild(fieldHeader)\n\n const fieldLabel = dom.createElement('h3')\n fieldLabel.className = 'social-pane__dialog-label'\n fieldLabel.textContent = field.label\n fieldHeader.appendChild(fieldLabel)\n\n const addButton = dom.createElement('solid-ui-button') as SolidUIButton\n addButton.type = 'button'\n addButton.className = 'social-pane__dialog-row-button--add'\n addButton.setAttribute('aria-label', `Add another ${field.label.toLowerCase()}`)\n addButton.variant = 'secondary'\n addButton.size = 'sm'\n const addButtonContent = dom.createElement('span')\n addButtonContent.className = 'social-pane__add-more-content'\n const addButtonInline = dom.createElement('span')\n addButtonInline.className = 'social-pane__add-more-inline'\n const addButtonIcon = dom.createElement('span')\n addButtonIcon.className = 'social-pane__add-more-icon'\n addButtonIcon.setAttribute('aria-hidden', 'true')\n addButtonIcon.innerHTML = plusIcon\n const addButtonText = dom.createElement('span')\n addButtonText.textContent = 'Add More'\n addButtonInline.appendChild(addButtonIcon)\n addButtonInline.appendChild(addButtonText)\n addButtonContent.appendChild(addButtonInline)\n addButton.appendChild(addButtonContent)\n addButton.addEventListener('click', () => {\n formState[field.key].push('')\n renderFields({ fieldKey: field.key, rowIndex: formState[field.key].length - 1 })\n })\n fieldHeader.appendChild(addButton)\n\n const rows = dom.createElement('div')\n rows.className = 'social-pane__dialog-row-list'\n fieldWrapper.appendChild(rows)\n\n const values = formState[field.key].length ? formState[field.key] : ['']\n values.forEach((value, index) => {\n const row = dom.createElement('div')\n row.className = 'social-pane__dialog-row'\n\n const input = dom.createElement('input')\n input.classList.add('social-pane__dialog-input', 'input')\n input.type = 'url'\n input.placeholder = field.placeholder\n input.value = value\n input.setAttribute('data-profile-link-key', field.key)\n input.setAttribute('data-profile-link-index', String(index))\n input.addEventListener('input', () => {\n formState[field.key][index] = input.value\n })\n row.appendChild(input)\n\n const removeButton = dom.createElement('solid-ui-button') as SolidUIButton\n removeButton.type = 'button'\n removeButton.className = 'social-pane__dialog-row-button--remove'\n removeButton.setAttribute('aria-label', `Remove ${field.label.toLowerCase()} ${index + 1}`)\n removeButton.setAttribute('title', 'Remove')\n removeButton.variant = 'icon'\n removeButton.size = 'md'\n const removeButtonIcon = dom.createElement('span')\n removeButtonIcon.className = 'social-pane__dialog-row-button-icon social-pane__dialog-row-button-icon--remove'\n removeButtonIcon.setAttribute('slot', 'icon')\n removeButtonIcon.setAttribute('aria-hidden', 'true')\n removeButtonIcon.innerHTML = trashIcon\n removeButton.appendChild(removeButtonIcon)\n removeButton.addEventListener('click', () => {\n if (formState[field.key].length === 1) {\n formState[field.key][0] = ''\n } else {\n formState[field.key].splice(index, 1)\n }\n renderFields()\n })\n row.appendChild(removeButton)\n\n rows.appendChild(row)\n })\n\n fieldsContainer.appendChild(fieldWrapper)\n }\n\n if (focusTarget) {\n focusRow(focusTarget.fieldKey, focusTarget.rowIndex)\n }\n }\n\n renderFields()\n\n form.appendChild(errorMessage)\n\n const actions = dom.createElement('div')\n actions.className = 'social-pane__dialog-actions'\n form.appendChild(actions)\n\n const closeButton = dom.createElement('solid-ui-button') as SolidUIButton\n closeButton.type = 'button'\n closeButton.className = 'social-pane__dialog-button--cancel'\n closeButton.setAttribute('aria-label', 'Close dialog')\n closeButton.label = 'Close'\n closeButton.variant = 'secondary'\n closeButton.size = 'md'\n actions.appendChild(closeButton)\n\n const saveButton = dom.createElement('solid-ui-button') as SolidUIButton\n saveButton.type = 'button'\n saveButton.className = 'social-pane__dialog-button--save'\n saveButton.label = 'Save Changes'\n saveButton.variant = 'primary'\n saveButton.size = 'md'\n actions.appendChild(saveButton)\n\n let isSaving = false\n\n const setSavingState = (nextSaving: boolean) => {\n isSaving = nextSaving\n dialog.classList.toggle('modal--saving', nextSaving)\n dialog.setAttribute('aria-busy', String(nextSaving))\n form.toggleAttribute('inert', nextSaving)\n saveButton.disabled = nextSaving\n saveButton.setAttribute('aria-busy', String(nextSaving))\n closeButton.disabled = nextSaving\n savingOverlay.hidden = !nextSaving\n\n if (nextSaving) {\n const activeElement = dialog.ownerDocument.activeElement as HTMLElement | null\n if (activeElement && dialog.contains(activeElement)) {\n activeElement.blur()\n }\n\n render(html`\n <div class=\"modal__saving-indicator inline-flex-row justify-center\" aria-live=\"polite\" aria-label=\"Saving changes\">\n ${createSpinner()}\n </div>\n `, savingOverlay)\n } else {\n render(html``, savingOverlay)\n }\n }\n\n const closeDialog = (force = false) => {\n if (isSaving && !force) return\n overlay.remove()\n }\n\n const requestCloseDialog = () => {\n closeDialog()\n }\n\n const handleSave = async () => {\n errorMessage.textContent = ''\n setSavingState(true)\n\n const nextValues = profileLinkFields.reduce((result, field) => {\n result[field.key] = [...formState[field.key]]\n return result\n }, createEmptyProfileLinkValues())\n\n try {\n await saveProfileLinkValues(store, subject, nextValues)\n setSavingState(false)\n closeDialog(true)\n onSaved()\n } catch (error) {\n errorMessage.textContent = error instanceof Error ? error.message : 'Unable to save profile links.'\n } finally {\n if (isSaving) {\n setSavingState(false)\n }\n }\n }\n\n overlay.addEventListener('click', (event) => {\n if (event.target === overlay) closeDialog()\n })\n closeButton.addEventListener('click', requestCloseDialog)\n\n saveButton.addEventListener('click', async (event) => {\n event.preventDefault()\n await handleSave()\n })\n\n overlay.addEventListener('keydown', (event) => {\n if (event.key === 'Escape') closeDialog()\n })\n\n form.addEventListener('submit', (event) => {\n event.preventDefault()\n })\n\n dom.body.appendChild(overlay)\n focusRow('homepage', 0)\n }\n\n button.addEventListener('click', openDialog)\n return button\n}\n"],"mappings":";;;;;;AA8Ce,EAAG,KAAK,UAAU,GAMlB,EAAG,KAAK,QAAQ,GAMhB,EAAG,KAAK,mBAAmB,GAM3B,EAAG,KAAK,gBAAgB;AAwGvC,SAAgB,EACd,GACA,GACA,GACA,GACM,CAGR"}
@@ -0,0 +1 @@
1
+ require("lit-html");
@@ -0,0 +1 @@
1
+ import "lit-html";
@@ -1,2 +1,2 @@
1
- var e={buildTime:`2026-07-02T15:11:20Z`,commit:`68fe2e5993d71398cd8672b1aca03e4eda05a153`,npmInfo:{"solid-panes":`4.4.2-3`,npm:`10.9.8`,node:`22.23.1`,acorn:`8.16.0`,ada:`2.9.2`,amaro:`1.1.8`,ares:`1.34.6`,brotli:`1.1.0`,cjs_module_lexer:`2.2.0`,cldr:`48.0`,icu:`78.2`,llhttp:`9.4.2`,modules:`127`,napi:`10`,nbytes:`0.1.3`,ncrypto:`0.0.1`,nghttp2:`1.69.0`,openssl:`3.5.7`,simdjson:`4.5.0`,simdutf:`6.4.2`,sqlite:`3.51.3`,tz:`2026a`,undici:`6.27.0`,unicode:`17.0`,uv:`1.51.0`,uvwasi:`0.0.23`,v8:`12.4.254.21-node.56`,zlib:`1.3.1-e00f703`,zstd:`1.5.7`}};exports.default=e;
1
+ var e={buildTime:`2026-07-03T07:32:22Z`,commit:`63bd00c600f13799946b4062fb58a7c8fa888b51`,npmInfo:{"solid-panes":`4.4.2-4`,npm:`10.9.8`,node:`22.23.1`,acorn:`8.16.0`,ada:`2.9.2`,amaro:`1.1.8`,ares:`1.34.6`,brotli:`1.1.0`,cjs_module_lexer:`2.2.0`,cldr:`48.0`,icu:`78.2`,llhttp:`9.4.2`,modules:`127`,napi:`10`,nbytes:`0.1.3`,ncrypto:`0.0.1`,nghttp2:`1.69.0`,openssl:`3.5.7`,simdjson:`4.5.0`,simdutf:`6.4.2`,sqlite:`3.51.3`,tz:`2026a`,undici:`6.27.0`,unicode:`17.0`,uv:`1.51.0`,uvwasi:`0.0.23`,v8:`12.4.254.21-node.56`,zlib:`1.3.1-e00f703`,zstd:`1.5.7`}};exports.default=e;
2
2
  //# sourceMappingURL=versionInfo.cjs.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"versionInfo.cjs.js","names":[],"sources":["../src/versionInfo.ts"],"sourcesContent":["export default {\n buildTime: '2026-07-02T15:11:20Z',\n commit: '68fe2e5993d71398cd8672b1aca03e4eda05a153',\n npmInfo: {\n 'solid-panes': '4.4.2-3',\n npm: '10.9.8',\n node: '22.23.1',\n acorn: '8.16.0',\n ada: '2.9.2',\n amaro: '1.1.8',\n ares: '1.34.6',\n brotli: '1.1.0',\n cjs_module_lexer: '2.2.0',\n cldr: '48.0',\n icu: '78.2',\n llhttp: '9.4.2',\n modules: '127',\n napi: '10',\n nbytes: '0.1.3',\n ncrypto: '0.0.1',\n nghttp2: '1.69.0',\n openssl: '3.5.7',\n simdjson: '4.5.0',\n simdutf: '6.4.2',\n sqlite: '3.51.3',\n tz: '2026a',\n undici: '6.27.0',\n unicode: '17.0',\n uv: '1.51.0',\n uvwasi: '0.0.23',\n v8: '12.4.254.21-node.56',\n zlib: '1.3.1-e00f703',\n zstd: '1.5.7',\n }\n}\n"],"mappings":"AAAA,IAAA,EAAe,CACb,UAAW,uBACX,OAAQ,2CACR,QAAS,CACP,cAAe,UACf,IAAK,SACL,KAAM,UACN,MAAO,SACP,IAAK,QACL,MAAO,QACP,KAAM,SACN,OAAQ,QACR,iBAAkB,QAClB,KAAM,OACN,IAAK,OACL,OAAQ,QACR,QAAS,MACT,KAAM,KACN,OAAQ,QACR,QAAS,QACT,QAAS,SACT,QAAS,QACT,SAAU,QACV,QAAS,QACT,OAAQ,SACR,GAAI,QACJ,OAAQ,SACR,QAAS,OACT,GAAI,SACJ,OAAQ,SACR,GAAI,sBACJ,KAAM,gBACN,KAAM,OACR,CACF"}
1
+ {"version":3,"file":"versionInfo.cjs.js","names":[],"sources":["../src/versionInfo.ts"],"sourcesContent":["export default {\n buildTime: '2026-07-03T07:32:22Z',\n commit: '63bd00c600f13799946b4062fb58a7c8fa888b51',\n npmInfo: {\n 'solid-panes': '4.4.2-4',\n npm: '10.9.8',\n node: '22.23.1',\n acorn: '8.16.0',\n ada: '2.9.2',\n amaro: '1.1.8',\n ares: '1.34.6',\n brotli: '1.1.0',\n cjs_module_lexer: '2.2.0',\n cldr: '48.0',\n icu: '78.2',\n llhttp: '9.4.2',\n modules: '127',\n napi: '10',\n nbytes: '0.1.3',\n ncrypto: '0.0.1',\n nghttp2: '1.69.0',\n openssl: '3.5.7',\n simdjson: '4.5.0',\n simdutf: '6.4.2',\n sqlite: '3.51.3',\n tz: '2026a',\n undici: '6.27.0',\n unicode: '17.0',\n uv: '1.51.0',\n uvwasi: '0.0.23',\n v8: '12.4.254.21-node.56',\n zlib: '1.3.1-e00f703',\n zstd: '1.5.7',\n }\n}\n"],"mappings":"AAAA,IAAA,EAAe,CACb,UAAW,uBACX,OAAQ,2CACR,QAAS,CACP,cAAe,UACf,IAAK,SACL,KAAM,UACN,MAAO,SACP,IAAK,QACL,MAAO,QACP,KAAM,SACN,OAAQ,QACR,iBAAkB,QAClB,KAAM,OACN,IAAK,OACL,OAAQ,QACR,QAAS,MACT,KAAM,KACN,OAAQ,QACR,QAAS,QACT,QAAS,SACT,QAAS,QACT,SAAU,QACV,QAAS,QACT,OAAQ,SACR,GAAI,QACJ,OAAQ,SACR,QAAS,OACT,GAAI,SACJ,OAAQ,SACR,GAAI,sBACJ,KAAM,gBACN,KAAM,OACR,CACF"}
@@ -1,9 +1,9 @@
1
1
  //#region src/versionInfo.ts
2
2
  var e = {
3
- buildTime: "2026-07-02T15:11:20Z",
4
- commit: "68fe2e5993d71398cd8672b1aca03e4eda05a153",
3
+ buildTime: "2026-07-03T07:32:22Z",
4
+ commit: "63bd00c600f13799946b4062fb58a7c8fa888b51",
5
5
  npmInfo: {
6
- "solid-panes": "4.4.2-3",
6
+ "solid-panes": "4.4.2-4",
7
7
  npm: "10.9.8",
8
8
  node: "22.23.1",
9
9
  acorn: "8.16.0",
@@ -1 +1 @@
1
- {"version":3,"file":"versionInfo.esm.js","names":[],"sources":["../src/versionInfo.ts"],"sourcesContent":["export default {\n buildTime: '2026-07-02T15:11:20Z',\n commit: '68fe2e5993d71398cd8672b1aca03e4eda05a153',\n npmInfo: {\n 'solid-panes': '4.4.2-3',\n npm: '10.9.8',\n node: '22.23.1',\n acorn: '8.16.0',\n ada: '2.9.2',\n amaro: '1.1.8',\n ares: '1.34.6',\n brotli: '1.1.0',\n cjs_module_lexer: '2.2.0',\n cldr: '48.0',\n icu: '78.2',\n llhttp: '9.4.2',\n modules: '127',\n napi: '10',\n nbytes: '0.1.3',\n ncrypto: '0.0.1',\n nghttp2: '1.69.0',\n openssl: '3.5.7',\n simdjson: '4.5.0',\n simdutf: '6.4.2',\n sqlite: '3.51.3',\n tz: '2026a',\n undici: '6.27.0',\n unicode: '17.0',\n uv: '1.51.0',\n uvwasi: '0.0.23',\n v8: '12.4.254.21-node.56',\n zlib: '1.3.1-e00f703',\n zstd: '1.5.7',\n }\n}\n"],"mappings":";AAAA,IAAA,IAAe;CACb,WAAW;CACX,QAAQ;CACR,SAAS;EACP,eAAe;EACf,KAAK;EACL,MAAM;EACN,OAAO;EACP,KAAK;EACL,OAAO;EACP,MAAM;EACN,QAAQ;EACR,kBAAkB;EAClB,MAAM;EACN,KAAK;EACL,QAAQ;EACR,SAAS;EACT,MAAM;EACN,QAAQ;EACR,SAAS;EACT,SAAS;EACT,SAAS;EACT,UAAU;EACV,SAAS;EACT,QAAQ;EACR,IAAI;EACJ,QAAQ;EACR,SAAS;EACT,IAAI;EACJ,QAAQ;EACR,IAAI;EACJ,MAAM;EACN,MAAM;CACR;AACF"}
1
+ {"version":3,"file":"versionInfo.esm.js","names":[],"sources":["../src/versionInfo.ts"],"sourcesContent":["export default {\n buildTime: '2026-07-03T07:32:22Z',\n commit: '63bd00c600f13799946b4062fb58a7c8fa888b51',\n npmInfo: {\n 'solid-panes': '4.4.2-4',\n npm: '10.9.8',\n node: '22.23.1',\n acorn: '8.16.0',\n ada: '2.9.2',\n amaro: '1.1.8',\n ares: '1.34.6',\n brotli: '1.1.0',\n cjs_module_lexer: '2.2.0',\n cldr: '48.0',\n icu: '78.2',\n llhttp: '9.4.2',\n modules: '127',\n napi: '10',\n nbytes: '0.1.3',\n ncrypto: '0.0.1',\n nghttp2: '1.69.0',\n openssl: '3.5.7',\n simdjson: '4.5.0',\n simdutf: '6.4.2',\n sqlite: '3.51.3',\n tz: '2026a',\n undici: '6.27.0',\n unicode: '17.0',\n uv: '1.51.0',\n uvwasi: '0.0.23',\n v8: '12.4.254.21-node.56',\n zlib: '1.3.1-e00f703',\n zstd: '1.5.7',\n }\n}\n"],"mappings":";AAAA,IAAA,IAAe;CACb,WAAW;CACX,QAAQ;CACR,SAAS;EACP,eAAe;EACf,KAAK;EACL,MAAM;EACN,OAAO;EACP,KAAK;EACL,OAAO;EACP,MAAM;EACN,QAAQ;EACR,kBAAkB;EAClB,MAAM;EACN,KAAK;EACL,QAAQ;EACR,SAAS;EACT,MAAM;EACN,QAAQ;EACR,SAAS;EACT,SAAS;EACT,SAAS;EACT,UAAU;EACV,SAAS;EACT,QAAQ;EACR,IAAI;EACJ,QAAQ;EACR,SAAS;EACT,IAAI;EACJ,QAAQ;EACR,IAAI;EACJ,MAAM;EACN,MAAM;CACR;AACF"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "solid-panes",
3
- "version": "4.4.2-3",
3
+ "version": "4.4.2-4",
4
4
  "description": "Solid-compatible Panes: applets and views for the mashlib and databrowser",
5
5
  "main": "dist/index.cjs.js",
6
6
  "types": "dist/index.d.ts",
@@ -11,9 +11,6 @@
11
11
  "require": "./dist/index.cjs.js"
12
12
  }
13
13
  },
14
- "sideEffects": [
15
- "*.css"
16
- ],
17
14
  "files": [
18
15
  "dist/",
19
16
  "README.md",
@@ -75,7 +72,7 @@
75
72
  "rdflib": "2.4.0",
76
73
  "solid-logic": "4.0.8-1",
77
74
  "solid-namespace": "^0.5.4",
78
- "solid-ui": "3.1.3-8",
75
+ "solid-ui": "3.1.3-9",
79
76
  "source-pane": "3.1.1-1"
80
77
  },
81
78
  "overrides": {