solid-panes 4.2.6 → 4.4.1-test.0

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 (143) hide show
  1. package/README.md +45 -1
  2. package/dist/0314353e28ce6e5539af.svg +9 -0
  3. package/dist/04567ff683933c35c465.png +0 -0
  4. package/dist/10163fd9b5a0e00d63a0.png +0 -0
  5. package/dist/1234dcb2eec2e45f252b.png +0 -0
  6. package/dist/20899934157df4db56cb.png +0 -0
  7. package/dist/33760bf79f097f449da5.png +0 -0
  8. package/dist/4cceba29ab33b1ddd9bb.svg +6 -0
  9. package/dist/578d2b6ed32e7624164e.png +0 -0
  10. package/dist/5f62a5b2b7e99b9640c7.png +0 -0
  11. package/dist/6525766ecd288ec60129.png +0 -0
  12. package/dist/7800be6f6c4b5b0f4f20.png +0 -0
  13. package/dist/7b7538c6f6b317968009.svg +9 -0
  14. package/dist/92d03142abe6efc0b42d.svg +6 -0
  15. package/dist/976473cf5fe24d657d4b.png +0 -0
  16. package/dist/RDFXMLPane.css +70 -0
  17. package/dist/RDFXMLPane.d.ts +13 -0
  18. package/dist/RDFXMLPane.d.ts.map +1 -0
  19. package/dist/RDFXMLPane.js +46 -4
  20. package/dist/bda84f59e7216675a208.png +0 -0
  21. package/dist/cd68e8f3990ba8b2139e.png +0 -0
  22. package/dist/dashboard/basicPreferences.d.ts.map +1 -1
  23. package/dist/dashboard/basicPreferences.js +1 -0
  24. package/dist/dashboard/dashboardPane.d.ts.map +1 -1
  25. package/dist/dashboard/dashboardPane.js +9 -3
  26. package/dist/dashboard/homepage.d.ts +1 -1
  27. package/dist/dashboard/homepage.d.ts.map +1 -1
  28. package/dist/dashboard/homepage.js +5 -35
  29. package/dist/dataContentPane.css +271 -0
  30. package/dist/dataContentPane.d.ts +14 -0
  31. package/dist/dataContentPane.d.ts.map +1 -0
  32. package/dist/dataContentPane.js +68 -101
  33. package/dist/defaultPane.css +97 -0
  34. package/dist/defaultPane.d.ts +14 -0
  35. package/dist/defaultPane.d.ts.map +1 -0
  36. package/dist/defaultPane.js +9 -2
  37. package/dist/e7074a7e2cb69e51cfd3.png +0 -0
  38. package/dist/f3772696fb7ee53c23d8.png +0 -0
  39. package/dist/form/formPane.css +120 -0
  40. package/dist/form/pane.d.ts +4 -0
  41. package/dist/form/pane.d.ts.map +1 -0
  42. package/dist/form/pane.js +120 -54
  43. package/dist/home/homePane.d.ts.map +1 -1
  44. package/dist/home/homePane.js +2 -0
  45. package/dist/humanReadablePane.css +129 -0
  46. package/dist/humanReadablePane.d.ts +13 -0
  47. package/dist/humanReadablePane.d.ts.map +1 -0
  48. package/dist/humanReadablePane.js +53 -16
  49. package/dist/icons/clock.svg +7 -0
  50. package/dist/icons/comment.svg +6 -0
  51. package/dist/icons/dashboard.svg +9 -0
  52. package/dist/icons/downArrow.svg +6 -0
  53. package/dist/icons/folder.svg +6 -0
  54. package/dist/icons/friends.svg +9 -0
  55. package/dist/icons/help.svg +8 -0
  56. package/dist/icons/iconHelper.d.ts +2 -0
  57. package/dist/icons/iconHelper.d.ts.map +1 -0
  58. package/dist/icons/iconHelper.js +23 -0
  59. package/dist/icons/menu.svg +8 -0
  60. package/dist/icons/person.svg +6 -0
  61. package/dist/icons/personInCircle.svg +8 -0
  62. package/dist/icons/sharing.svg +10 -0
  63. package/dist/icons/signOut.svg +8 -0
  64. package/dist/icons/signUp.svg +9 -0
  65. package/dist/icons/star.svg +3 -0
  66. package/dist/imagePane.css +4 -0
  67. package/dist/imagePane.d.ts +12 -0
  68. package/dist/imagePane.d.ts.map +1 -0
  69. package/dist/imagePane.js +19 -21
  70. package/dist/index.d.ts +5 -4
  71. package/dist/index.d.ts.map +1 -1
  72. package/dist/index.js +19 -4
  73. package/dist/internal/internalPane.css +14 -0
  74. package/dist/internal/internalPane.d.ts +1 -0
  75. package/dist/internal/internalPane.d.ts.map +1 -1
  76. package/dist/internal/internalPane.js +6 -6
  77. package/dist/mainPage/footer.d.ts +14 -2
  78. package/dist/mainPage/footer.d.ts.map +1 -1
  79. package/dist/mainPage/footer.js +21 -13
  80. package/dist/mainPage/header.d.ts +16 -1
  81. package/dist/mainPage/header.d.ts.map +1 -1
  82. package/dist/mainPage/header.js +179 -61
  83. package/dist/mainPage/index.d.ts +16 -1
  84. package/dist/mainPage/index.d.ts.map +1 -1
  85. package/dist/mainPage/index.js +61 -7
  86. package/dist/mainPage/menu.css +243 -0
  87. package/dist/mainPage/menu.d.ts +7 -0
  88. package/dist/mainPage/menu.d.ts.map +1 -0
  89. package/dist/mainPage/menu.js +436 -0
  90. package/dist/n3Pane.css +49 -0
  91. package/dist/n3Pane.d.ts +13 -0
  92. package/dist/n3Pane.d.ts.map +1 -0
  93. package/dist/n3Pane.js +36 -4
  94. package/dist/outline/context.d.ts +2 -2
  95. package/dist/outline/context.d.ts.map +1 -1
  96. package/dist/outline/context.js +5 -2
  97. package/dist/outline/manager.css +12 -14
  98. package/dist/outline/manager.js +172 -82
  99. package/dist/outline/userInput.js +6 -3
  100. package/dist/pad/padPane.css +40 -0
  101. package/dist/pad/padPane.d.ts +1 -0
  102. package/dist/pad/padPane.d.ts.map +1 -1
  103. package/dist/pad/padPane.js +33 -22
  104. package/dist/playlist/playlistPane.js +2 -6
  105. package/dist/profileUtils/ownerProfile.d.ts +5 -0
  106. package/dist/profileUtils/ownerProfile.d.ts.map +1 -0
  107. package/dist/profileUtils/ownerProfile.js +84 -0
  108. package/dist/registerPanes.js +12 -12
  109. package/dist/schedule/schedulePane.css +294 -0
  110. package/dist/schedule/schedulePane.d.ts +23 -0
  111. package/dist/schedule/schedulePane.d.ts.map +1 -0
  112. package/dist/schedule/schedulePane.js +161 -61
  113. package/dist/slideshow/slideshowPane.js +1 -1
  114. package/dist/social/editProfileDetails.d.ts +19 -0
  115. package/dist/social/editProfileDetails.d.ts.map +1 -0
  116. package/dist/social/editProfileDetails.js +362 -0
  117. package/dist/social/icons.d.ts +7 -0
  118. package/dist/social/icons.d.ts.map +1 -0
  119. package/dist/social/icons.js +95 -0
  120. package/dist/social/socialPane.css +1464 -0
  121. package/dist/social/socialPane.d.ts +30 -0
  122. package/dist/social/socialPane.d.ts.map +1 -0
  123. package/dist/social/socialPane.js +651 -0
  124. package/dist/social/socialSections.d.ts +77 -0
  125. package/dist/social/socialSections.d.ts.map +1 -0
  126. package/dist/social/socialSections.js +393 -0
  127. package/dist/social/spinner.d.ts +3 -0
  128. package/dist/social/spinner.d.ts.map +1 -0
  129. package/dist/social/spinner.js +13 -0
  130. package/dist/social/triage.d.ts +17 -0
  131. package/dist/social/triage.d.ts.map +1 -0
  132. package/dist/social/triage.js +79 -0
  133. package/dist/solid-panes.js +49544 -18164
  134. package/dist/solid-panes.js.map +1 -1
  135. package/dist/solid-panes.min.js +3884 -240
  136. package/dist/solid-panes.min.js.map +1 -1
  137. package/dist/{style → styles}/tabbedtab.css +0 -281
  138. package/dist/styles/utilities.css +5 -0
  139. package/dist/tabbed/tabbedPane.d.ts.map +1 -1
  140. package/dist/tabbed/tabbedPane.js +2 -0
  141. package/dist/versionInfo.js +14 -14
  142. package/package.json +37 -31
  143. package/dist/socialPane.js +0 -430
@@ -4,18 +4,26 @@ Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
6
  exports.createFooter = createFooter;
7
- var _solidUi = require("solid-ui");
8
- /**
9
- * links in the footer
10
- */
11
- const SOLID_PROJECT_URL = 'https://solidproject.org';
12
- const SOLID_PROJECT_NAME = 'solidproject.org';
7
+ require("solid-ui/components/footer");
13
8
  function createFooter(store) {
14
- (0, _solidUi.initFooter)(store, setFooterOptions());
15
- }
16
- function setFooterOptions() {
17
- return {
18
- solidProjectUrl: SOLID_PROJECT_URL,
19
- solidProjectName: SOLID_PROJECT_NAME
20
- };
9
+ let footer = document.querySelector('solid-ui-footer');
10
+ if (!footer) {
11
+ footer = document.createElement('solid-ui-footer');
12
+ footer.className = 'menu-footer';
13
+ footer.style.position = 'static';
14
+ footer.style.width = '100%';
15
+ const navMenu = document.getElementById('NavMenu');
16
+ if (navMenu) {
17
+ navMenu.appendChild(footer);
18
+ } else {
19
+ document.body.appendChild(footer);
20
+ }
21
+ } else {
22
+ const navMenu = document.getElementById('NavMenu');
23
+ if (navMenu && footer.parentElement !== navMenu) {
24
+ navMenu.appendChild(footer);
25
+ }
26
+ }
27
+ footer.store = store;
28
+ return footer;
21
29
  }
@@ -1,2 +1,17 @@
1
- export declare function createHeader(store: any, outliner: any): Promise<void>;
1
+ import 'solid-ui/components/header';
2
+ import { Header } from 'solid-ui/components/header';
3
+ import { OutlineManager } from '../outline/manager';
4
+ import { LiveStore } from 'rdflib';
5
+ export declare const HELP_MENU_LIST: {
6
+ label: string;
7
+ url: string;
8
+ target: string;
9
+ }[];
10
+ type ManagedHeader = Header & {
11
+ __solidPanesListenersAttached?: boolean;
12
+ __solidPanesOutliner?: OutlineManager;
13
+ };
14
+ export declare function createHeader(store: LiveStore, outliner: OutlineManager): Promise<ManagedHeader>;
15
+ export declare function refreshHeader(outliner: OutlineManager, headerElement?: Header): Promise<Header | null>;
16
+ export {};
2
17
  //# sourceMappingURL=header.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"header.d.ts","sourceRoot":"","sources":["../../src/mainPage/header.ts"],"names":[],"mappings":"AAuBA,wBAAsB,YAAY,CAAE,KAAK,KAAA,EAAE,QAAQ,KAAA,iBAElD"}
1
+ {"version":3,"file":"header.d.ts","sourceRoot":"","sources":["../../src/mainPage/header.ts"],"names":[],"mappings":"AAEA,OAAO,4BAA4B,CAAA;AACnC,OAAO,EAAE,MAAM,EAAE,MAAM,4BAA4B,CAAA;AAEnD,OAAO,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAA;AACnD,OAAO,EAAE,SAAS,EAAE,MAAM,QAAQ,CAAA;AA4BlC,eAAO,MAAM,cAAc;;;;GAG1B,CAAA;AAID,KAAK,aAAa,GAAG,MAAM,GAAG;IAC5B,6BAA6B,CAAC,EAAE,OAAO,CAAA;IACvC,oBAAoB,CAAC,EAAE,cAAc,CAAA;CACtC,CAAA;AAcD,wBAAsB,YAAY,CAAE,KAAK,EAAE,SAAS,EAAE,QAAQ,EAAE,cAAc,0BA6B7E;AAoDD,wBAAsB,aAAa,CAAE,QAAQ,EAAE,cAAc,EAAE,aAAa,CAAC,EAAE,MAAM,0BAyBpF"}
@@ -3,83 +3,201 @@
3
3
  Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
+ exports.HELP_MENU_LIST = void 0;
6
7
  exports.createHeader = createHeader;
8
+ exports.refreshHeader = refreshHeader;
7
9
  var _solidLogic = require("solid-logic");
8
10
  var _solidUi = require("solid-ui");
11
+ require("solid-ui/components/header");
12
+ var _help = _interopRequireDefault(require("../icons/help.svg?raw"));
13
+ var _person = _interopRequireDefault(require("../icons/person.svg?raw"));
14
+ var _signOut = _interopRequireDefault(require("../icons/signOut.svg?raw"));
15
+ var _personInCircle = _interopRequireDefault(require("../icons/personInCircle.svg?raw"));
16
+ var _downArrow = _interopRequireDefault(require("../icons/downArrow.svg?raw"));
17
+ var _signUp = _interopRequireDefault(require("../icons/signUp.svg?raw"));
18
+ var _iconHelper = require("../icons/iconHelper");
19
+ var _menu = require("./menu");
20
+ function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
9
21
  /**
10
22
  * menu icons
11
23
  */
12
- const HELP_MENU_ICON = _solidUi.icons.iconBase + 'noun_help.svg';
24
+ const HELP_MENU_ICON = (0, _iconHelper.createUiIcon)(_help.default, 'Help Icon', '#ffffff');
25
+ const LOGIN_ICON = (0, _iconHelper.createUiIcon)(_person.default, 'LogIn Icon', '#ffffff');
26
+ const SIGNUP_ICON = (0, _iconHelper.createUiIcon)(_signUp.default, 'SignUp Icon', '#ffffff');
27
+ const LOGOUT_ICON = (0, _iconHelper.createUiIcon)(_signOut.default, 'LogOut Icon', '#000000');
28
+ const DEFAULT_AVATAR_ICON = (0, _iconHelper.createUiIcon)(_personInCircle.default, 'Default Avatar Icon', '#6A7282');
29
+ const DOWN_ARROW_ICON = (0, _iconHelper.createUiIcon)(_downArrow.default, 'Down Arrow Icon', '#ffffff');
13
30
  const SOLID_ICON_URL = 'https://solidproject.org/assets/img/solid-emblem.svg';
14
-
15
31
  /**
16
32
  * menu elements
17
33
  */
18
- const USER_GUIDE_MENU_ITEM = 'User guide';
19
- const REPORT_A_PROBLEM_MENU_ITEM = 'Report a problem';
20
- const SHOW_YOUR_PROFILE_MENU_ITEM = 'Show your profile';
21
- const LOG_OUT_MENU_ITEM = 'Log out';
22
- /**
23
- * URLS
24
- */
25
- const USER_GUIDE_MENU_URL = 'https://solidos.github.io/userguide/';
26
- const REPORT_A_PROBLEM_MENU_URL = 'https://github.com/solidos/solidos/issues';
34
+ const SIGN_IN_MENU_ITEM = 'Log In';
35
+ const SIGN_OUT_MENU_ITEM = 'Log Out';
36
+ const SIGN_UP_MENU_ITEM = 'Sign Up';
37
+ const SIGN_UP__MENU_LINK = 'https://solidproject.org/get_a_pod';
38
+
39
+ // data structure extracted for solid-ui-header binding
40
+ const HELP_MENU_LIST = exports.HELP_MENU_LIST = [{
41
+ label: 'User guide',
42
+ url: 'https://solidos.github.io/userguide/',
43
+ target: '_blank'
44
+ }, {
45
+ label: 'Report a problem',
46
+ url: 'https://github.com/solidos/solidos/issues',
47
+ target: '_blank'
48
+ }];
49
+ const HEADER_MOBILE_STYLE_ID = 'solid-ui-header-mobile-style';
50
+ function ensureMobileHeaderStyles() {
51
+ if (document.getElementById(HEADER_MOBILE_STYLE_ID)) return;
52
+ const style = document.createElement('style');
53
+ style.id = HEADER_MOBILE_STYLE_ID;
54
+ style.textContent = `
55
+ solid-ui-header[layout="mobile"]::part(logo) {
56
+ display: none !important;
57
+ }
58
+ `;
59
+ document.head.appendChild(style);
60
+ }
27
61
  async function createHeader(store, outliner) {
28
- (0, _solidUi.initHeader)(store, await setUserMenu(outliner), setHeaderOptions());
62
+ ensureMobileHeaderStyles();
63
+ const header = document.querySelector('solid-ui-header') || document.createElement('solid-ui-header');
64
+ const isNewHeader = !header.isConnected;
65
+ if (!header.id) {
66
+ header.id = 'mainSolidUiHeader';
67
+ }
68
+ header.__solidPanesOutliner = outliner;
69
+
70
+ // ensure it is in DOM (before MainContent for consistency)
71
+ const main = document.getElementById('MainContent');
72
+ if (!header.isConnected) {
73
+ if (main && main.parentNode) {
74
+ main.parentNode.insertBefore(header, main);
75
+ } else {
76
+ document.body.prepend(header);
77
+ }
78
+ }
79
+ await refreshHeader(outliner, header);
80
+ if (isNewHeader) {
81
+ header.__solidPanesListenersAttached = false;
82
+ }
83
+ attachHeaderListeners(header);
84
+ return header;
29
85
  }
30
- function setHeaderOptions() {
31
- const helpMenuList = [{
32
- label: USER_GUIDE_MENU_ITEM,
33
- url: USER_GUIDE_MENU_URL,
34
- target: '_blank'
35
- }, {
36
- label: REPORT_A_PROBLEM_MENU_ITEM,
37
- url: REPORT_A_PROBLEM_MENU_URL,
38
- target: '_blank'
39
- }];
86
+ function attachHeaderListeners(header) {
87
+ if (header.__solidPanesListenersAttached) return;
88
+ const refreshCurrentHeader = async () => {
89
+ const outliner = header.__solidPanesOutliner;
90
+ if (!outliner) return;
91
+ await refreshHeader(outliner, header);
92
+ };
93
+ _solidLogic.authSession.events.on('login', refreshCurrentHeader);
94
+ _solidLogic.authSession.events.on('logout', refreshCurrentHeader);
95
+ _solidLogic.authSession.events.on('sessionRestore', refreshCurrentHeader);
96
+ header.addEventListener('auth-action-select', async e => {
97
+ const outliner = header.__solidPanesOutliner;
98
+ if (!outliner) return;
99
+ const detail = e.detail;
100
+ if (detail?.role === 'login') {
101
+ await refreshCurrentHeader();
102
+ // Do not auto-open the profile pane after login.
103
+ // outliner.showDashboard({ pane: 'profile' })
104
+ }
105
+ });
106
+ header.addEventListener('signup-success', async () => {
107
+ // do nothing
108
+ });
109
+ header.addEventListener('account-menu-select', async e => {
110
+ const outliner = header.__solidPanesOutliner;
111
+ if (!outliner) return;
112
+ const detail = e.detail;
113
+ if (detail?.action === 'logout') {
114
+ await refreshCurrentHeader();
115
+ // Do not navigate to the profile after logout.
116
+ } else if (detail?.action === 'show-profile') {
117
+ // TODO see if this can be consolidated
118
+ const currentUser = _solidLogic.authn.currentUser();
119
+ if (currentUser) {
120
+ outliner.showDashboard(currentUser, {
121
+ pane: 'profile'
122
+ });
123
+ (0, _menu.setActiveMenuPane)('profile');
124
+ }
125
+ }
126
+ });
127
+ header.__solidPanesListenersAttached = true;
128
+ }
129
+ async function refreshHeader(outliner, headerElement) {
130
+ ensureMobileHeaderStyles();
131
+ const headerOptions = setHeaderOptions(outliner);
132
+ const header = headerElement || document.querySelector('solid-ui-header');
133
+ if (!header) return null;
134
+ header.theme = headerOptions.theme;
135
+ header.layout = headerOptions.layout;
136
+ header.brandLink = headerOptions.brandLink;
137
+ header.logo = headerOptions.layout === 'desktop' ? headerOptions.logo : '';
138
+ header.helpIcon = headerOptions.helpIcon;
139
+ header.helpMenuList = headerOptions.helpMenuList;
140
+ header.authState = headerOptions.authState;
141
+ header.loginAction = headerOptions.loginAction;
142
+ header.signUpAction = headerOptions.signUpAction;
143
+ header.accountMenu = await setUserMenu();
144
+ header.logoutLabel = headerOptions.logoutLabel;
145
+ header.accountIcon = headerOptions.accountIcon;
146
+ header.accountAvatar = headerOptions.accountAvatar;
147
+ header.accountAvatarFallback = headerOptions.accountAvatarFallback;
148
+ header.loginIcon = headerOptions.loginIcon;
149
+ header.signUpIcon = headerOptions.signUpIcon;
150
+ header.logoutIcon = headerOptions.logoutIcon;
151
+ return header;
152
+ }
153
+ function setHeaderOptions(outliner) {
154
+ const currentUser = _solidLogic.authn.currentUser();
155
+ const isAuthenticated = !!currentUser;
156
+ const authState = isAuthenticated ? 'logged-in' : 'logged-out';
157
+ const layout = outliner.context?.environment?.layout === 'mobile' ? 'mobile' : 'desktop';
158
+ const theme = outliner.context?.environment?.theme === 'dark' ? 'dark' : 'light';
40
159
  const headerOptions = {
41
160
  logo: SOLID_ICON_URL,
42
161
  helpIcon: HELP_MENU_ICON,
43
- helpMenuList
162
+ helpMenuList: HELP_MENU_LIST,
163
+ layout,
164
+ theme,
165
+ brandLink: '/',
166
+ authState,
167
+ loginAction: {
168
+ label: SIGN_IN_MENU_ITEM
169
+ },
170
+ signUpAction: {
171
+ label: SIGN_UP_MENU_ITEM,
172
+ url: SIGN_UP__MENU_LINK
173
+ },
174
+ logoutLabel: SIGN_OUT_MENU_ITEM,
175
+ accountIcon: isAuthenticated ? DOWN_ARROW_ICON : '',
176
+ accountAvatar: isAuthenticated ? _solidUi.widgets.findImage(currentUser) : undefined,
177
+ accountAvatarFallback: DEFAULT_AVATAR_ICON,
178
+ loginIcon: LOGIN_ICON,
179
+ signUpIcon: SIGNUP_ICON,
180
+ logoutIcon: LOGOUT_ICON
44
181
  };
45
182
  return headerOptions;
46
183
  }
47
- async function setUserMenu(outliner) {
48
- // @ts-ignore: showProfile is used conditionally
49
- const showProfile = {
50
- label: SHOW_YOUR_PROFILE_MENU_ITEM,
51
- onclick: () => openUserProfile(outliner)
52
- };
53
- const logOut = {
54
- label: LOG_OUT_MENU_ITEM,
55
- onclick: () => {
56
- _solidLogic.authSession.logout();
57
- }
58
- };
59
-
60
- // the order of the menu is important here, show profile first and logout last
61
- let userMenuList = []; // was [showProfile]
62
- userMenuList = userMenuList.concat(await getMenuItems(outliner));
63
- userMenuList.push(logOut);
64
- return userMenuList;
65
- }
66
-
67
- // Does not work to jump to user profile,
68
- function openUserProfile(outliner) {
69
- outliner.GotoSubject(_solidLogic.authn.currentUser(), true, undefined, true, undefined);
70
- location.reload();
71
- }
72
- async function getMenuItems(outliner) {
73
- const items = await outliner.getDashboardItems();
74
- return items.map(element => {
75
- return {
76
- label: element.label,
77
- onclick: () => openDashboardPane(outliner, element.tabName || element.paneName)
78
- };
79
- });
80
- }
81
- async function openDashboardPane(outliner, pane) {
82
- outliner.showDashboard({
83
- pane
84
- });
184
+ async function setUserMenu() {
185
+ const me = _solidLogic.authn.currentUser();
186
+ if (!me) {
187
+ return [];
188
+ }
189
+ try {
190
+ await _solidLogic.store.fetcher.load(me.doc());
191
+ } catch (err) {
192
+ console.error('Unable to load user profile', err);
193
+ }
194
+ const accountMenu = [{
195
+ label: _solidUi.utils.label(me),
196
+ avatar: _solidUi.widgets.findImage(me),
197
+ webid: me.value,
198
+ action: 'show-profile'
199
+ }
200
+ // TODO add all my available accounts
201
+ ];
202
+ return accountMenu;
85
203
  }
@@ -1,3 +1,18 @@
1
1
  import { LiveStore, NamedNode } from 'rdflib';
2
- export default function initMainPage(store: LiveStore, uri?: string | NamedNode | null): Promise<[void, void]>;
2
+ import type { RenderEnvironment } from 'pane-registry';
3
+ import { OutlineManager } from '../index';
4
+ export { refreshMenu as updateMenuLayout } from './menu';
5
+ export { refreshHeader } from './header';
6
+ export declare function initMainPage(store: LiveStore, uri?: string | NamedNode | null, environment?: RenderEnvironment): Promise<[import("solid-ui/components/header").Header & {
7
+ __solidPanesListenersAttached?: boolean;
8
+ __solidPanesOutliner?: OutlineManager;
9
+ }, void, HTMLElement & {
10
+ store?: LiveStore | null;
11
+ position?: "static" | "absolute" | "relative" | "fixed" | "sticky";
12
+ top?: string;
13
+ right?: string;
14
+ bottom?: string;
15
+ left?: string;
16
+ }]>;
17
+ export declare function refreshUI(outliner: OutlineManager): Promise<void>;
3
18
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/mainPage/index.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,QAAQ,CAAA;AAK7C,wBAA8B,YAAY,CAAE,KAAK,EAAE,SAAS,EAAE,GAAG,CAAC,EAAE,MAAM,GAAG,SAAS,GAAG,IAAI,yBAS5F"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/mainPage/index.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,QAAQ,CAAA;AAC7C,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAA;AACtD,OAAO,EAAe,cAAc,EAAE,MAAM,UAAU,CAAA;AActD,OAAO,EAAE,WAAW,IAAI,gBAAgB,EAAE,MAAM,QAAQ,CAAA;AACxD,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAA;AAexC,wBAAsB,YAAY,CAChC,KAAK,EAAE,SAAS,EAChB,GAAG,CAAC,EAAE,MAAM,GAAG,SAAS,GAAG,IAAI,EAC/B,WAAW,CAAC,EAAE,iBAAiB;;;;;;;;;;IAahC;AAED,wBAAsB,SAAS,CAAE,QAAQ,EAAE,cAAc,iBAoBxD"}
@@ -3,22 +3,76 @@
3
3
  Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
- exports.default = initMainPage;
6
+ exports.initMainPage = initMainPage;
7
+ Object.defineProperty(exports, "refreshHeader", {
8
+ enumerable: true,
9
+ get: function () {
10
+ return _header.refreshHeader;
11
+ }
12
+ });
13
+ exports.refreshUI = refreshUI;
14
+ Object.defineProperty(exports, "updateMenuLayout", {
15
+ enumerable: true,
16
+ get: function () {
17
+ return _menu.refreshMenu;
18
+ }
19
+ });
7
20
  var _index = require("../index");
8
21
  var _header = require("./header");
9
22
  var _footer = require("./footer");
23
+ var _menu = require("./menu");
10
24
  /* Main Page
11
25
  **
12
26
  ** This code is called in mashlib and renders the header and footer of the Databrowser.
13
27
  */
14
28
 
15
- async function initMainPage(store, uri) {
16
- const outliner = (0, _index.getOutliner)(document);
29
+ // Symbol used to stash the last render-relevant env snapshot on the outliner
30
+ // so refreshUI can skip a full GotoSubject re-render when nothing changed.
31
+ const LAST_RENDER_ENV_KEY = '__lastRenderEnvSignature';
32
+ function renderEnvSignature(env) {
33
+ if (!env) return '';
34
+ return [env.layout, env.theme, env.inputMode].join('|');
35
+ }
36
+ function ensureMainContent() {
37
+ let main = document.getElementById('MainContent');
38
+ if (!main) {
39
+ main = document.createElement('main');
40
+ main.id = 'MainContent';
41
+ main.setAttribute('role', 'main');
42
+ main.setAttribute('tabindex', '-1');
43
+ main.setAttribute('aria-live', 'polite');
44
+ document.body.appendChild(main);
45
+ }
46
+ return main;
47
+ }
48
+ async function initMainPage(store, uri, environment) {
49
+ ensureMainContent();
50
+ const outliner = (0, _index.getOutliner)(document, environment);
51
+ outliner[LAST_RENDER_ENV_KEY] = renderEnvSignature(environment);
17
52
  uri = uri || window.location.href;
18
- let subject = uri;
19
- if (typeof uri === 'string') subject = store.sym(uri);
53
+ const subject = typeof uri === 'string' ? store.sym(uri) : uri;
20
54
  outliner.GotoSubject(subject, true, undefined, true, undefined);
21
55
  const header = await (0, _header.createHeader)(store, outliner);
22
- const footer = (0, _footer.createFooter)(store);
23
- return Promise.all([header, footer]);
56
+ const menu = (0, _menu.createLeftSideMenu)(subject, outliner);
57
+ const footer = menu.then(() => (0, _footer.createFooter)(store));
58
+ return Promise.all([header, menu, footer]);
59
+ }
60
+ async function refreshUI(outliner) {
61
+ const store = outliner?.context?.session?.store;
62
+ const paneRegistry = outliner?.context?.session?.paneRegistry;
63
+ const subjectUri = window.document.location.href;
64
+ const paneName = window.history.state?.paneName;
65
+ const pane = paneName ? paneRegistry?.byName?.(paneName) : undefined;
66
+
67
+ // Only re-run GotoSubject (full pane re-render) when render-relevant
68
+ // environment fields actually changed since the last render.
69
+ const currentSignature = renderEnvSignature(outliner?.context?.environment);
70
+ const previousSignature = outliner?.[LAST_RENDER_ENV_KEY] ?? '';
71
+ const envChanged = currentSignature !== previousSignature;
72
+ if (envChanged && store && typeof outliner?.GotoSubject === 'function') {
73
+ outliner.GotoSubject(store.sym(subjectUri), true, pane, true, undefined);
74
+ outliner[LAST_RENDER_ENV_KEY] = currentSignature;
75
+ }
76
+ await (0, _header.refreshHeader)(outliner);
77
+ (0, _menu.refreshMenu)(outliner.context.environment?.layout === 'mobile' ? 'mobile' : 'desktop');
24
78
  }
@@ -0,0 +1,243 @@
1
+ .menu-content {
2
+ display: flex;
3
+ flex-direction: column;
4
+ gap: 0.5rem;
5
+ min-height: 0;
6
+ overflow-y: auto;
7
+ }
8
+
9
+ .app-nav.mobile-hidden .menu-content,
10
+ .app-nav.mobile-visible .menu-content {
11
+ padding-top: 0.75rem;
12
+ }
13
+
14
+ .menu-footer {
15
+ width: 100%;
16
+ padding: 1rem;
17
+ border-top: 1px solid var(--color-border, #d1d1d1);
18
+ font-size: 0.875rem;
19
+ color: var(--color-text-muted, #555);
20
+ line-height: 1.4;
21
+ background: inherit;
22
+ }
23
+
24
+ .app-nav.collapsed .menu-footer {
25
+ display: none;
26
+ text-align: center;
27
+ padding: 0.75rem 0;
28
+ }
29
+
30
+ .menu-item {
31
+ display: flex;
32
+ align-items: center;
33
+ gap: var(--spacing-2xs, 0.625rem);
34
+ border: 0;
35
+ border-radius: var(--border-radius-sm, 0.2rem);
36
+ padding: 0.5rem var(--spacing-xs, 0.75rem);
37
+ background: transparent;
38
+ color: var(--color-text-heading, #000000);
39
+ text-decoration: none;
40
+ width: 100%;
41
+ text-align: left;
42
+ cursor: pointer;
43
+ }
44
+
45
+ .menu-toggle-icon {
46
+ width: 30px;
47
+ height: 30px;
48
+ }
49
+
50
+ .menu-item-icon {
51
+ width: var(--icon-xxs, 1rem);
52
+ height: var(--icon-xxs, 1rem);
53
+ flex: 0 0 var(--icon-xxs, 1rem);
54
+ object-fit: contain;
55
+ }
56
+
57
+ .menu-item-label {
58
+ min-width: 0;
59
+ }
60
+
61
+ .menu-item:hover,
62
+ .menu-item:focus {
63
+ background: var(--color-header-menu-item-hover, #e6dcff);
64
+ }
65
+
66
+ .menu-item-active,
67
+ .menu-item-active:hover,
68
+ .menu-item-active:focus {
69
+ background: var(--color-header-menu-item-selected, #cbb9ff);
70
+ color: var(--color-header-menu-item-text-selected, #7c4cff);
71
+ }
72
+
73
+ .menu-toggle {
74
+ position: fixed;
75
+ top: 0.5rem;
76
+ left: 1rem;
77
+ z-index: 300;
78
+ display: inline-flex;
79
+ align-items: center;
80
+ justify-content: center;
81
+ gap: 0.375rem;
82
+ min-width: var(--icon-md, 2.5rem);
83
+ height: var(--icon-md, 2.5rem);
84
+ padding: 0 0.625rem;
85
+ border: 1px solid var(--color-border);
86
+ background: var(--color-menu-bg, #ffffff);
87
+ color: var(--color-text);
88
+ border-radius: var(--border-radius-sm, 0.2rem);
89
+ margin: 0;
90
+ }
91
+
92
+ .menu-toggle-label {
93
+ font-size: 1.2rem;
94
+ font-weight: 600;
95
+ white-space: nowrap;
96
+ overflow: hidden;
97
+ text-overflow: ellipsis;
98
+ max-width: 10rem;
99
+ }
100
+
101
+ .menu-overlay {
102
+ position: fixed;
103
+ inset: 0;
104
+ background: rgba(0, 0, 0, 0.35);
105
+ z-index: 100;
106
+ }
107
+
108
+ .app-nav {
109
+ position: fixed;
110
+ left: 0;
111
+ top: 0;
112
+ bottom: 0;
113
+ width: min(18rem, 320px);
114
+ display: grid;
115
+ grid-template-rows: 1fr auto;
116
+ overflow: hidden;
117
+ background: var(--color-menu-bg, #ffffff);
118
+ border-right: 1px solid var(--color-border);
119
+ z-index: 10;
120
+ }
121
+
122
+ .app-nav.mobile-hidden,
123
+ .app-nav.mobile-visible {
124
+ position: fixed;
125
+ left: 0;
126
+ top: 0;
127
+ bottom: 0;
128
+ width: min(80vw, 320px);
129
+ height: 100vh;
130
+ min-height: 100vh;
131
+ transform: translateX(-100%);
132
+ transition: transform 0.25s ease-in-out;
133
+ z-index: 999;
134
+ display: flex;
135
+ flex-direction: column;
136
+ background: var(--color-menu-bg, #ffffff);
137
+ border-right: none;
138
+ box-shadow: none;
139
+ overflow: hidden;
140
+ padding-top: 3.75rem;
141
+ }
142
+
143
+ .app-nav.mobile-hidden .menu-content,
144
+ .app-nav.mobile-visible .menu-content {
145
+ flex: 1;
146
+ min-height: 0;
147
+ }
148
+
149
+ .app-nav.mobile-visible {
150
+ transform: translateX(0);
151
+ visibility: visible;
152
+ background: var(--color-menu-bg, #ffffff);
153
+ }
154
+
155
+ .menu-header {
156
+ display: none;
157
+ position: absolute;
158
+ top: 0;
159
+ left: 0;
160
+ right: 0;
161
+ align-items: center;
162
+ justify-content: flex-start;
163
+ background-color: #42345a !important;
164
+ color: #ffffff;
165
+ font-weight: 600;
166
+ min-height: 3.75rem;
167
+ height: 3.75rem;
168
+ box-sizing: border-box;
169
+ width: 100%;
170
+ z-index: 1000;
171
+ border-right: none;
172
+ box-shadow: none;
173
+ }
174
+
175
+ .app-nav.mobile-hidden .menu-header,
176
+ .app-nav.mobile-visible .menu-header {
177
+ display: flex;
178
+ }
179
+
180
+ .menu-header-title {
181
+ font-size: 1.25rem;
182
+ color: #ffffff;
183
+ }
184
+
185
+ .menu-close {
186
+ border: none;
187
+ background: transparent;
188
+ color: #ffffff;
189
+ font-size: 1.25rem;
190
+ cursor: pointer;
191
+ padding-left: 1.25rem;
192
+ line-height: 1;
193
+ }
194
+
195
+ .menu-close:hover,
196
+ .menu-close:focus {
197
+ opacity: 0.85;
198
+ }
199
+
200
+ .app-nav.collapsed {
201
+ width: 4.5rem;
202
+ min-width: 4.5rem;
203
+ }
204
+
205
+ .app-nav.collapsed .menu-content {
206
+ gap: 0.25rem;
207
+ align-items: center;
208
+ }
209
+
210
+ .app-nav.collapsed .menu-item {
211
+ justify-content: center;
212
+ padding-left: 0.5rem;
213
+ padding-right: 0.5rem;
214
+ }
215
+
216
+ .app-nav.collapsed .menu-item-label {
217
+ display: none;
218
+ }
219
+
220
+ .menu-collapse {
221
+ position: fixed;
222
+ left: 3rem;
223
+ bottom: 8rem;
224
+ z-index: 320;
225
+ width: 1.25rem;
226
+ height: 1.25rem;
227
+ display: inline-flex;
228
+ align-items: center;
229
+ justify-content: center;
230
+ border: 1px solid var(--color-border);
231
+ border-radius: 999px;
232
+ color: var(--color-text);
233
+ font-size: 1.3rem;
234
+ line-height: 1;
235
+ cursor: pointer;
236
+ box-shadow: 0 1px 4px rgba(124,77,255,0.12);
237
+ }
238
+
239
+ @media (max-width: 768px) {
240
+ .menu-collapse {
241
+ display: none;
242
+ }
243
+ }
@@ -0,0 +1,7 @@
1
+ import './menu.css';
2
+ import { OutlineManager } from '../outline/manager';
3
+ import { NamedNode } from 'rdflib';
4
+ export declare const setActiveMenuPane: (paneName?: string) => void;
5
+ export declare const refreshMenu: (layout: "mobile" | "desktop") => void;
6
+ export declare const createLeftSideMenu: (subject: NamedNode, outliner: OutlineManager) => Promise<void>;
7
+ //# sourceMappingURL=menu.d.ts.map