profile-pane 3.2.1 → 3.2.2-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 (241) hide show
  1. package/README.md +50 -0
  2. package/lib/303.profile-pane.js +1362 -0
  3. package/lib/303.profile-pane.js.map +1 -0
  4. package/lib/303.profile-pane.min.js +2 -0
  5. package/lib/303.profile-pane.min.js.map +1 -0
  6. package/lib/ProfileView.css +1090 -0
  7. package/lib/ProfileView.d.ts +2 -1
  8. package/lib/ProfileView.d.ts.map +1 -1
  9. package/lib/ProfileView.js +64 -36
  10. package/lib/buttonsHelper.d.ts +1 -1
  11. package/lib/buttonsHelper.d.ts.map +1 -1
  12. package/lib/buttonsHelper.js +2 -1
  13. package/lib/editProfilePane/EditCVCard.js +1 -1
  14. package/lib/editProfilePane/EditCommunitiesCard.js +1 -1
  15. package/lib/editProfilePane/EditFriendsCard.js +1 -1
  16. package/lib/editProfilePane/EditProfileView.d.ts +1 -1
  17. package/lib/editProfilePane/EditProfileView.d.ts.map +1 -1
  18. package/lib/editProfilePane/EditProfileView.js +4 -5
  19. package/lib/editProfilePane/editProfilePresenter.d.ts.map +1 -1
  20. package/lib/editProfilePane/editProfilePresenter.js +5 -4
  21. package/lib/icons-svg/profileIcons.d.ts +1 -1
  22. package/lib/icons-svg/profileIcons.d.ts.map +1 -1
  23. package/lib/icons-svg/profileIcons.js +9 -17
  24. package/lib/index.d.ts +1 -8
  25. package/lib/index.d.ts.map +1 -1
  26. package/lib/index.js +74 -40
  27. package/lib/ontology/otherPreferencesForm.ttl +32 -0
  28. package/lib/ontology/resumeForm.ttl +349 -0
  29. package/lib/ontology/socialMedia.ttl +433 -0
  30. package/lib/profile-pane.js +32266 -13247
  31. package/lib/profile-pane.js.map +1 -1
  32. package/lib/profile-pane.min.js +2315 -935
  33. package/lib/profile-pane.min.js.map +1 -1
  34. package/lib/rdfFormsHelper.d.ts +13 -1
  35. package/lib/rdfFormsHelper.d.ts.map +1 -1
  36. package/lib/rdfFormsHelper.js +13 -1
  37. package/lib/sections/bio/BioEditDialog.d.ts.map +1 -1
  38. package/lib/sections/bio/BioEditDialog.js +7 -7
  39. package/lib/sections/bio/BioSection.css +300 -0
  40. package/lib/sections/bio/BioSection.d.ts +3 -2
  41. package/lib/sections/bio/BioSection.d.ts.map +1 -1
  42. package/lib/sections/bio/BioSection.js +26 -19
  43. package/lib/sections/bio/mutations.d.ts.map +1 -1
  44. package/lib/sections/bio/mutations.js +14 -3
  45. package/lib/sections/contactInfo/ContactInfoEditDialog.css +354 -0
  46. package/lib/sections/contactInfo/ContactInfoEditDialog.d.ts +3 -1
  47. package/lib/sections/contactInfo/ContactInfoEditDialog.d.ts.map +1 -1
  48. package/lib/sections/contactInfo/ContactInfoEditDialog.js +183 -98
  49. package/lib/sections/contactInfo/ContactInfoSection.css +125 -0
  50. package/lib/sections/contactInfo/ContactInfoSection.d.ts +2 -0
  51. package/lib/sections/contactInfo/ContactInfoSection.d.ts.map +1 -1
  52. package/lib/sections/contactInfo/ContactInfoSection.js +64 -41
  53. package/lib/sections/contactInfo/mutations.d.ts.map +1 -1
  54. package/lib/sections/contactInfo/mutations.js +51 -16
  55. package/lib/sections/education/EducationEditDialog.d.ts +3 -1
  56. package/lib/sections/education/EducationEditDialog.d.ts.map +1 -1
  57. package/lib/sections/education/EducationEditDialog.js +170 -92
  58. package/lib/sections/education/EducationSection.css +133 -0
  59. package/lib/sections/education/EducationSection.d.ts +3 -2
  60. package/lib/sections/education/EducationSection.d.ts.map +1 -1
  61. package/lib/sections/education/EducationSection.js +32 -25
  62. package/lib/sections/education/mutations.d.ts.map +1 -1
  63. package/lib/sections/education/mutations.js +14 -3
  64. package/lib/sections/heading/HeadingEditDialog.d.ts +4 -1
  65. package/lib/sections/heading/HeadingEditDialog.d.ts.map +1 -1
  66. package/lib/sections/heading/HeadingEditDialog.js +287 -162
  67. package/lib/sections/heading/HeadingSection.css +862 -0
  68. package/lib/sections/heading/HeadingSection.d.ts +3 -2
  69. package/lib/sections/heading/HeadingSection.d.ts.map +1 -1
  70. package/lib/sections/heading/HeadingSection.js +63 -32
  71. package/lib/sections/heading/imageHelpers.d.ts +1 -0
  72. package/lib/sections/heading/imageHelpers.d.ts.map +1 -1
  73. package/lib/sections/heading/imageHelpers.js +40 -1
  74. package/lib/sections/heading/mutations.d.ts.map +1 -1
  75. package/lib/sections/heading/mutations.js +86 -23
  76. package/lib/sections/heading/selectors.d.ts.map +1 -1
  77. package/lib/sections/heading/selectors.js +14 -3
  78. package/lib/sections/heading/types.d.ts +1 -2
  79. package/lib/sections/heading/types.d.ts.map +1 -1
  80. package/lib/sections/languages/LanguageEditDialog.d.ts +3 -1
  81. package/lib/sections/languages/LanguageEditDialog.d.ts.map +1 -1
  82. package/lib/sections/languages/LanguageEditDialog.js +202 -119
  83. package/lib/sections/languages/LanguageSection.css +53 -0
  84. package/lib/sections/languages/LanguageSection.d.ts +2 -0
  85. package/lib/sections/languages/LanguageSection.d.ts.map +1 -1
  86. package/lib/sections/languages/LanguageSection.js +42 -31
  87. package/lib/sections/languages/mutations.d.ts.map +1 -1
  88. package/lib/sections/languages/mutations.js +60 -161
  89. package/lib/sections/languages/selectors.d.ts.map +1 -1
  90. package/lib/sections/languages/selectors.js +1 -2
  91. package/lib/sections/projects/ProjectEditDialog.d.ts +2 -1
  92. package/lib/sections/projects/ProjectEditDialog.d.ts.map +1 -1
  93. package/lib/sections/projects/ProjectEditDialog.js +13 -24
  94. package/lib/sections/projects/ProjectSection.css +368 -0
  95. package/lib/sections/projects/ProjectSection.d.ts +2 -1
  96. package/lib/sections/projects/ProjectSection.d.ts.map +1 -1
  97. package/lib/sections/projects/ProjectSection.js +116 -34
  98. package/lib/sections/projects/mutations.d.ts.map +1 -1
  99. package/lib/sections/projects/mutations.js +109 -132
  100. package/lib/sections/projects/selectors.d.ts.map +1 -1
  101. package/lib/sections/projects/selectors.js +4 -45
  102. package/lib/{QRCodeCard.d.ts → sections/qrcode/QRCodeCard.d.ts} +2 -1
  103. package/lib/sections/qrcode/QRCodeCard.d.ts.map +1 -0
  104. package/lib/{QRCodeCard.js → sections/qrcode/QRCodeCard.js} +59 -11
  105. package/lib/sections/qrcode/QRCodeSection.css +108 -0
  106. package/lib/sections/qrcode/QRCodeSection.d.ts +4 -0
  107. package/lib/sections/qrcode/QRCodeSection.d.ts.map +1 -0
  108. package/lib/sections/qrcode/QRCodeSection.js +17 -0
  109. package/lib/sections/resume/ResumeEditDialog.d.ts +10 -1
  110. package/lib/sections/resume/ResumeEditDialog.d.ts.map +1 -1
  111. package/lib/sections/resume/ResumeEditDialog.js +531 -149
  112. package/lib/sections/resume/ResumeSection.css +350 -0
  113. package/lib/sections/resume/ResumeSection.d.ts +3 -2
  114. package/lib/sections/resume/ResumeSection.d.ts.map +1 -1
  115. package/lib/sections/resume/ResumeSection.js +78 -49
  116. package/lib/sections/resume/mutations.d.ts.map +1 -1
  117. package/lib/sections/resume/mutations.js +17 -3
  118. package/lib/sections/resume/selectors.d.ts.map +1 -1
  119. package/lib/sections/resume/selectors.js +1 -0
  120. package/lib/sections/resume/types.d.ts +1 -0
  121. package/lib/sections/resume/types.d.ts.map +1 -1
  122. package/lib/sections/shared/collapsibleSection.d.ts.map +1 -1
  123. package/lib/sections/shared/collapsibleSection.js +1 -0
  124. package/lib/sections/shared/phoneCountries.d.ts +1 -1
  125. package/lib/sections/shared/phoneCountries.d.ts.map +1 -1
  126. package/lib/sections/shared/phoneCountries.js +2 -2
  127. package/lib/sections/shared/projectCommunityNodes.d.ts +6 -0
  128. package/lib/sections/shared/projectCommunityNodes.d.ts.map +1 -0
  129. package/lib/sections/shared/projectCommunityNodes.js +56 -0
  130. package/lib/sections/shared/rdfMutationHelpers.d.ts +35 -2
  131. package/lib/sections/shared/rdfMutationHelpers.d.ts.map +1 -1
  132. package/lib/sections/shared/rdfMutationHelpers.js +290 -14
  133. package/lib/sections/shared/sectionCardHelpers.d.ts.map +1 -1
  134. package/lib/sections/shared/sectionCardHelpers.js +80 -11
  135. package/lib/sections/shared/types.d.ts +24 -0
  136. package/lib/sections/shared/types.d.ts.map +1 -1
  137. package/lib/sections/skills/SkillsEditDialog.d.ts +3 -1
  138. package/lib/sections/skills/SkillsEditDialog.d.ts.map +1 -1
  139. package/lib/sections/skills/SkillsEditDialog.js +136 -115
  140. package/lib/sections/skills/SkillsSection.css +173 -0
  141. package/lib/sections/skills/SkillsSection.d.ts +2 -0
  142. package/lib/sections/skills/SkillsSection.d.ts.map +1 -1
  143. package/lib/sections/skills/SkillsSection.js +107 -47
  144. package/lib/sections/skills/mutations.d.ts.map +1 -1
  145. package/lib/sections/skills/mutations.js +25 -21
  146. package/lib/sections/skills/selectors.d.ts.map +1 -1
  147. package/lib/sections/skills/selectors.js +5 -3
  148. package/lib/sections/social/SocialEditDialog.d.ts +3 -1
  149. package/lib/sections/social/SocialEditDialog.d.ts.map +1 -1
  150. package/lib/sections/social/SocialEditDialog.js +170 -62
  151. package/lib/sections/social/SocialSection.css +194 -0
  152. package/lib/sections/social/SocialSection.d.ts +4 -3
  153. package/lib/sections/social/SocialSection.d.ts.map +1 -1
  154. package/lib/sections/social/SocialSection.js +59 -43
  155. package/lib/sections/social/mutations.d.ts.map +1 -1
  156. package/lib/sections/social/mutations.js +23 -132
  157. package/lib/specialButtons/AddMeToYourFriends.css +54 -0
  158. package/lib/specialButtons/addContact/AddMeToYourContacts.css +1118 -0
  159. package/lib/specialButtons/addContact/ContactCreationDialog.d.ts +10 -0
  160. package/lib/specialButtons/addContact/ContactCreationDialog.d.ts.map +1 -0
  161. package/lib/specialButtons/addContact/ContactCreationDialog.js +1123 -0
  162. package/lib/specialButtons/addContact/addMeToYourContacts.d.ts +16 -0
  163. package/lib/specialButtons/addContact/addMeToYourContacts.d.ts.map +1 -0
  164. package/lib/specialButtons/addContact/addMeToYourContacts.js +136 -0
  165. package/lib/specialButtons/addContact/contactsErrors.d.ts +8 -0
  166. package/lib/specialButtons/addContact/contactsErrors.d.ts.map +1 -0
  167. package/lib/specialButtons/addContact/contactsErrors.js +106 -0
  168. package/lib/specialButtons/addContact/contactsTypes.d.ts +43 -0
  169. package/lib/specialButtons/addContact/contactsTypes.d.ts.map +1 -0
  170. package/lib/specialButtons/addContact/contactsTypes.js +5 -0
  171. package/lib/specialButtons/addContact/helpers.d.ts +7 -0
  172. package/lib/specialButtons/addContact/helpers.d.ts.map +1 -0
  173. package/lib/specialButtons/addContact/helpers.js +103 -0
  174. package/lib/specialButtons/addContact/mutations.d.ts +16 -0
  175. package/lib/specialButtons/addContact/mutations.d.ts.map +1 -0
  176. package/lib/specialButtons/addContact/mutations.js +300 -0
  177. package/lib/specialButtons/addContact/selectors.d.ts +10 -0
  178. package/lib/specialButtons/addContact/selectors.d.ts.map +1 -0
  179. package/lib/specialButtons/addContact/selectors.js +163 -0
  180. package/lib/{addMeToYourFriends.d.ts → specialButtons/addMeToYourFriends.d.ts} +6 -4
  181. package/lib/specialButtons/addMeToYourFriends.d.ts.map +1 -0
  182. package/lib/{addMeToYourFriends.js → specialButtons/addMeToYourFriends.js} +46 -11
  183. package/lib/styles/CollapsibleSection.css +519 -0
  184. package/lib/styles/EditDialogs.css +506 -686
  185. package/lib/styles/EditDialogs.responsive.css +989 -0
  186. package/lib/texts/buttonTexts.d.ts +9 -0
  187. package/lib/texts/buttonTexts.d.ts.map +1 -0
  188. package/lib/texts/buttonTexts.js +14 -0
  189. package/lib/texts/dialogTexts.d.ts +14 -0
  190. package/lib/texts/dialogTexts.d.ts.map +1 -0
  191. package/lib/texts/dialogTexts.js +19 -0
  192. package/lib/texts/messageTexts.d.ts +42 -0
  193. package/lib/texts/messageTexts.d.ts.map +1 -0
  194. package/lib/texts/messageTexts.js +47 -0
  195. package/lib/texts/profileTexts.d.ts +14 -0
  196. package/lib/texts/profileTexts.d.ts.map +1 -0
  197. package/lib/texts/profileTexts.js +19 -0
  198. package/lib/texts/qrCodeTexts.d.ts +2 -0
  199. package/lib/texts/qrCodeTexts.d.ts.map +1 -0
  200. package/lib/texts/qrCodeTexts.js +7 -0
  201. package/lib/texts.d.ts +5 -60
  202. package/lib/texts.d.ts.map +1 -1
  203. package/lib/texts.js +55 -70
  204. package/lib/ui/dialog.css +233 -0
  205. package/lib/ui/dialog.d.ts +15 -1
  206. package/lib/ui/dialog.d.ts.map +1 -1
  207. package/lib/ui/dialog.js +245 -45
  208. package/lib/ui/dialog.responsive.css +195 -0
  209. package/lib/ui/errors.d.ts.map +1 -1
  210. package/lib/ui/errors.js +2 -1
  211. package/lib/ui/spinner.d.ts +3 -0
  212. package/lib/ui/spinner.d.ts.map +1 -0
  213. package/lib/ui/spinner.js +13 -0
  214. package/lib/utils/debug.d.ts +5 -0
  215. package/lib/utils/debug.d.ts.map +1 -0
  216. package/lib/utils/debug.js +23 -0
  217. package/lib/utils/errorDisplay.d.ts +2 -0
  218. package/lib/utils/errorDisplay.d.ts.map +1 -0
  219. package/lib/utils/errorDisplay.js +19 -0
  220. package/package.json +32 -25
  221. package/lib/ChatWithMe.d.ts +0 -7
  222. package/lib/ChatWithMe.d.ts.map +0 -1
  223. package/lib/ChatWithMe.js +0 -90
  224. package/lib/QRCodeCard.d.ts.map +0 -1
  225. package/lib/addMeToYourFriends.d.ts.map +0 -1
  226. package/lib/sections/heading/camera.d.ts +0 -19
  227. package/lib/sections/heading/camera.d.ts.map +0 -1
  228. package/lib/sections/heading/camera.js +0 -199
  229. package/lib/styles/BioSection.css +0 -77
  230. package/lib/styles/CVCard.css +0 -142
  231. package/lib/styles/ChatWithMe.css +0 -6
  232. package/lib/styles/ContactInfoEditDialog.css +0 -153
  233. package/lib/styles/EducationCard.css +0 -103
  234. package/lib/styles/HeadingSection.css +0 -309
  235. package/lib/styles/ProfileCard.css +0 -66
  236. package/lib/styles/ProfileView.css +0 -65
  237. package/lib/styles/ProjectsCard.css +0 -206
  238. package/lib/styles/QRCodeCard.css +0 -43
  239. package/lib/styles/SocialCard.css +0 -89
  240. package/lib/styles/dialog.css +0 -209
  241. package/lib/styles/utilities.css +0 -740
@@ -6,9 +6,10 @@ Object.defineProperty(exports, "__esModule", {
6
6
  exports.processProjectsMutations = processProjectsMutations;
7
7
  var _rdflib = require("rdflib");
8
8
  var _solidUi = require("solid-ui");
9
- /* This code is AI generated from Model: GPT-5.3-Codex */
10
- /* Prompt: I need to store Project data only the url of the project how
11
- should I store it please generate the code. Follow other sections */
9
+ var _projectCommunityNodes = require("../shared/projectCommunityNodes");
10
+ var _texts = require("../../texts");
11
+ var _rdfMutationHelpers = require("../shared/rdfMutationHelpers");
12
+ var _debug = require("../../utils/debug");
12
13
  function toProjectUrlNode(project) {
13
14
  const value = (project.url || '').trim();
14
15
  if (!value) return null;
@@ -29,160 +30,136 @@ function normalizeProjectUrlKey(value) {
29
30
  return text;
30
31
  }
31
32
  }
32
- function isPatchFailure(message) {
33
- const text = (message || '').toLowerCase();
34
- return text.includes(' on patch ') || text.includes('web error: 500') || text.includes('web error: 501') || text.includes('web error: 405') || text.includes('web error: 400');
35
- }
36
- function isMissingGetRecordError(message) {
37
- return (message || '').toLowerCase().includes('no record of our http get request for document');
38
- }
39
- function statementKey(statement) {
40
- return `${statement.subject?.toNT?.() || statement.subject?.value} ${statement.predicate?.toNT?.() || statement.predicate?.value} ${statement.object?.toNT?.() || statement.object?.value} ${statement.why?.toNT?.() || statement.why?.value}`;
41
- }
42
- function sanitizePatchStatements(store, deletions, insertions) {
43
- const safeDeletions = Array.from(new Map((deletions || []).filter(statement => {
44
- if (!statement || !statement.subject || !statement.predicate || !statement.object) return false;
45
- return store.holds(statement.subject, statement.predicate, statement.object, statement.why);
46
- }).map(statement => [statementKey(statement), statement])).values());
47
- const safeInsertions = Array.from(new Map((insertions || []).filter(statement => Boolean(statement && statement.subject && statement.predicate && statement.object)).map(statement => [statementKey(statement), statement])).values());
48
- return {
49
- safeDeletions,
50
- safeInsertions
51
- };
52
- }
53
- async function runPutFallback(store, doc, deletions, insertions) {
54
- const updater = store.updater;
55
- const fetcher = store.fetcher;
56
- if (!updater || typeof updater.serialize !== 'function' || !fetcher || typeof fetcher.webOperation !== 'function') {
57
- throw new Error('Project updates are not supported by this store updater.');
58
- }
59
- const currentStatements = store.statementsMatching(undefined, undefined, undefined, doc).slice();
60
- const deletionKeys = new Set((deletions || []).map(statement => statementKey(statement)));
61
- const nextStatements = currentStatements.filter(statement => !deletionKeys.has(statementKey(statement))).concat(insertions || []);
62
- const contentType = 'text/turtle';
63
- const body = updater.serialize(doc.value, nextStatements, contentType);
64
- const response = await fetcher.webOperation('PUT', doc.value, {
65
- noMeta: true,
66
- contentType,
67
- body
68
- });
69
- if (!response || response.ok !== true) {
70
- const status = response?.status || 'unknown';
71
- throw new Error(`Web error: ${status} on PUT of <${doc.value}>`);
33
+ function collectListChainNodes(store, listHead, doc) {
34
+ if (!store.any(listHead, _solidUi.ns.rdf('first'), null, doc)) return [];
35
+ const visited = new Set();
36
+ const nodes = [];
37
+ let current = listHead;
38
+ while (current) {
39
+ const key = `${current.termType}:${current.value}`;
40
+ if (visited.has(key)) break;
41
+ visited.add(key);
42
+ nodes.push(current);
43
+ const rest = store.any(current, _solidUi.ns.rdf('rest'), null, doc);
44
+ if (!rest || rest.termType === 'NamedNode' && rest.value === _solidUi.ns.rdf('nil').value) {
45
+ break;
46
+ }
47
+ current = rest;
72
48
  }
73
- store.remove(deletions);
74
- insertions.forEach(statement => {
75
- store.add(statement.subject, statement.predicate, statement.object, statement.why);
76
- });
49
+ return nodes;
77
50
  }
78
- async function runUpdateWithDavFallback(store, doc, deletions, insertions) {
79
- const updater = store.updater;
80
- if (!updater || typeof updater.update !== 'function') {
81
- throw new Error('Project updates are not supported by this store updater.');
82
- }
83
- const {
84
- safeDeletions,
85
- safeInsertions
86
- } = sanitizePatchStatements(store, deletions, insertions);
87
- if (safeDeletions.length === 0 && safeInsertions.length === 0) {
88
- return;
89
- }
90
- const tryUpdate = () => new Promise((resolve, reject) => {
91
- updater.update(safeDeletions, safeInsertions, (_uri, ok, message) => {
92
- if (ok === true) {
93
- resolve();
94
- return;
95
- }
96
- reject(new Error(message || 'Failed to save projects'));
51
+ function collectCommunityCleanupStatements(store, statement, fallbackDoc) {
52
+ const doc = statement.why || fallbackDoc;
53
+ const cleanup = [(0, _rdflib.st)(statement.subject, statement.predicate, statement.object, doc)];
54
+ const objectNode = statement.object;
55
+ if ((0, _projectCommunityNodes.isRdfListNode)(store, objectNode, doc)) {
56
+ collectListChainNodes(store, objectNode, doc).forEach(listNode => {
57
+ cleanup.push(...store.statementsMatching(listNode, null, null, doc));
97
58
  });
98
- });
99
- try {
100
- await tryUpdate();
101
- return;
102
- } catch (error) {
103
- const message = error instanceof Error ? error.message : String(error);
104
- if (!isPatchFailure(message) || typeof updater.updateDav !== 'function') {
105
- throw error;
106
- }
107
- if (store.fetcher && typeof store.fetcher.load === 'function') {
108
- try {
109
- await store.fetcher.load(doc);
110
- } catch {
111
- // continue to fallback
112
- }
113
- }
114
- try {
115
- await new Promise((resolve, reject) => {
116
- updater.updateDav(doc, safeDeletions, safeInsertions, (_uri, ok, body) => {
117
- if (ok === true) {
118
- resolve();
119
- return;
120
- }
121
- reject(new Error(body || message || 'Failed to save projects'));
122
- });
123
- });
124
- } catch (davError) {
125
- const davMessage = davError instanceof Error ? davError.message : String(davError);
126
- if (!isMissingGetRecordError(davMessage)) {
127
- throw davError;
128
- }
129
- await runPutFallback(store, doc, safeDeletions, safeInsertions);
130
- }
59
+ return cleanup;
131
60
  }
61
+ if (objectNode.termType === 'BlankNode') {
62
+ cleanup.push(...store.statementsMatching(objectNode, null, null, doc));
63
+ }
64
+ return cleanup;
132
65
  }
133
66
  async function mutateProjectEntries(store, subject, projectOps) {
134
67
  const doc = subject.doc();
135
- const existingLinks = store.each(subject, _solidUi.ns.solid('community'), null, doc);
136
- const existingByUrl = new Map();
137
- existingLinks.forEach(linkNode => {
138
- if (!linkNode || linkNode.termType !== 'NamedNode') return;
139
- const key = normalizeProjectUrlKey(linkNode.value);
140
- if (key && !existingByUrl.has(key)) {
141
- existingByUrl.set(key, linkNode);
142
- }
68
+ const existingLinks = store.statementsMatching(subject, _solidUi.ns.solid('community'), null, null);
69
+ const batchesByDoc = new Map();
70
+ const docKeyByUrl = new Map();
71
+ const touchedDocs = new Set();
72
+ const getDocBatch = targetDoc => {
73
+ const existing = batchesByDoc.get(targetDoc.value);
74
+ if (existing) return existing;
75
+ const next = {
76
+ doc: targetDoc,
77
+ cleanupStatements: [],
78
+ currentUrlsByKey: new Map()
79
+ };
80
+ batchesByDoc.set(targetDoc.value, next);
81
+ return next;
82
+ };
83
+ existingLinks.forEach(statement => {
84
+ const targetDoc = statement.why || doc;
85
+ const batch = getDocBatch(targetDoc);
86
+ batch.cleanupStatements.push(...collectCommunityCleanupStatements(store, statement, doc));
87
+ const objectNode = statement.object;
88
+ const communityNodes = (0, _projectCommunityNodes.expandCommunityNodes)(store, objectNode, targetDoc);
89
+ communityNodes.forEach(communityNode => {
90
+ const url = (0, _projectCommunityNodes.projectUrlFromCommunityNode)(communityNode, store);
91
+ const key = normalizeProjectUrlKey(url);
92
+ if (!key || docKeyByUrl.has(key)) return;
93
+ docKeyByUrl.set(key, targetDoc.value);
94
+ batch.currentUrlsByKey.set(key, url);
95
+ });
143
96
  });
144
- const deletions = [];
145
- const insertions = [];
146
- const removeLink = link => {
147
- deletions.push((0, _rdflib.st)(subject, _solidUi.ns.solid('community'), link, doc));
97
+ const ensureDocTouched = docKey => {
98
+ touchedDocs.add(docKey);
99
+ };
100
+ const removeExistingUrl = key => {
101
+ const targetDocKey = docKeyByUrl.get(key);
102
+ if (!targetDocKey) return null;
103
+ const batch = batchesByDoc.get(targetDocKey);
104
+ if (!batch) return null;
105
+ batch.currentUrlsByKey.delete(key);
106
+ docKeyByUrl.delete(key);
107
+ ensureDocTouched(targetDocKey);
108
+ return batch.doc;
148
109
  };
149
- const addLink = link => {
150
- insertions.push((0, _rdflib.st)(subject, _solidUi.ns.solid('community'), link, doc));
110
+ const addUrlToDoc = (targetDoc, url) => {
111
+ const key = normalizeProjectUrlKey(url);
112
+ if (!key || docKeyByUrl.has(key)) return;
113
+ const batch = getDocBatch(targetDoc);
114
+ batch.currentUrlsByKey.set(key, url);
115
+ docKeyByUrl.set(key, targetDoc.value);
116
+ ensureDocTouched(targetDoc.value);
151
117
  };
152
118
  projectOps.remove.forEach(project => {
153
119
  const entryKey = normalizeProjectUrlKey(project.entryNode || '');
154
120
  const urlKey = normalizeProjectUrlKey(project.url);
155
- const existing = entryKey && existingByUrl.get(entryKey) || urlKey && existingByUrl.get(urlKey);
156
- if (existing) removeLink(existing);
121
+ if (entryKey) {
122
+ removeExistingUrl(entryKey);
123
+ return;
124
+ }
125
+ if (urlKey) {
126
+ removeExistingUrl(urlKey);
127
+ }
157
128
  });
158
129
  projectOps.update.forEach(project => {
159
130
  const newLink = toProjectUrlNode(project);
160
- const urlKey = normalizeProjectUrlKey(project.url);
161
131
  const entryKey = normalizeProjectUrlKey(project.entryNode || '');
162
- const existing = entryKey && existingByUrl.get(entryKey) || urlKey && existingByUrl.get(urlKey);
163
- if (existing) removeLink(existing);
164
- if (newLink) addLink(newLink);
165
- });
166
- const seenCreateUrlKeys = new Set();
167
- projectOps.create.forEach(project => {
168
132
  const urlKey = normalizeProjectUrlKey(project.url);
169
- if (urlKey && (existingByUrl.has(urlKey) || seenCreateUrlKeys.has(urlKey))) {
170
- return;
133
+ const removedDoc = entryKey && removeExistingUrl(entryKey) || urlKey && removeExistingUrl(urlKey) || doc;
134
+ if (newLink) {
135
+ addUrlToDoc(removedDoc, newLink.value);
171
136
  }
137
+ });
138
+ projectOps.create.forEach(project => {
172
139
  const newLink = toProjectUrlNode(project);
173
140
  if (!newLink) return;
174
- addLink(newLink);
175
- if (urlKey) {
176
- seenCreateUrlKeys.add(urlKey);
177
- }
141
+ addUrlToDoc(doc, newLink.value);
178
142
  });
179
- await runUpdateWithDavFallback(store, doc, deletions, insertions);
143
+ for (const docKey of touchedDocs) {
144
+ const batch = batchesByDoc.get(docKey);
145
+ if (!batch) continue;
146
+ const insertions = Array.from(batch.currentUrlsByKey.values()).map(url => (0, _rdflib.st)(subject, _solidUi.ns.solid('community'), (0, _rdflib.sym)(url), batch.doc));
147
+ await (0, _rdfMutationHelpers.runUpdateTransport)(store, batch.doc, batch.cleanupStatements, insertions, {
148
+ unsupportedMessage: 'Project updates are not supported by this store updater.',
149
+ failureMessage: 'Failed to save projects',
150
+ useDavFallback: true,
151
+ usePutFallback: true
152
+ });
153
+ }
180
154
  }
181
155
  async function processProjectsMutations(store, subject, mutationPlan) {
182
156
  try {
183
157
  await mutateProjectEntries(store, subject, mutationPlan);
184
- } catch (error) {
185
- const message = error instanceof Error ? error.message : String(error);
186
- throw new Error(`Failed to save projects: ${message}`);
158
+ } catch (err) {
159
+ const rootError = err instanceof Error ? err : new Error(String(err));
160
+ (0, _debug.error)(_texts.projectsMutationSaveFailedDebugText, rootError);
161
+ throw new Error(_texts.saveProjectsUpdatesFailedMessageText, {
162
+ cause: rootError
163
+ });
187
164
  }
188
165
  }
@@ -1 +1 @@
1
- {"version":3,"file":"selectors.d.ts","sourceRoot":"","sources":["../../../src/sections/projects/selectors.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,SAAS,EAAa,MAAM,QAAQ,CAAA;AAExD,OAAO,EAAE,cAAc,EAAE,MAAM,SAAS,CAAA;AAiGxC,wBAAsB,4BAA4B,CAAC,OAAO,EAAE,SAAS,EAAE,KAAK,EAAE,SAAS,GAAG,OAAO,CAAC,IAAI,CAAC,CAiCtG;AA4BD,wBAAsB,eAAe,CAAC,OAAO,EAAE,SAAS,EAAE,KAAK,EAAE,SAAS,GAAG,OAAO,CAAC,cAAc,EAAE,CAAC,CAgErG"}
1
+ {"version":3,"file":"selectors.d.ts","sourceRoot":"","sources":["../../../src/sections/projects/selectors.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,SAAS,EAAa,MAAM,QAAQ,CAAA;AAExD,OAAO,EAAE,cAAc,EAAE,MAAM,SAAS,CAAA;AAwCxC,wBAAsB,4BAA4B,CAAC,OAAO,EAAE,SAAS,EAAE,KAAK,EAAE,SAAS,GAAG,OAAO,CAAC,IAAI,CAAC,CAiCtG;AA4BD,wBAAsB,eAAe,CAAC,OAAO,EAAE,SAAS,EAAE,KAAK,EAAE,SAAS,GAAG,OAAO,CAAC,cAAc,EAAE,CAAC,CAgErG"}
@@ -7,20 +7,12 @@ exports.ensureProjectDocumentsLoaded = ensureProjectDocumentsLoaded;
7
7
  exports.presentProjects = presentProjects;
8
8
  var _rdflib = require("rdflib");
9
9
  var _solidUi = require("solid-ui");
10
- var _rdfList = require("../shared/rdfList");
11
- /* The following functions communityNodesForSubject and ensureProjectDocumentsLoaded
12
- and a few updates in presentProjects are generated by AI Model: GPT-5.3-Codex */
13
- /* Prompt: Image and business type are not displaying, could it be that I didn't load
14
- the document? */
10
+ var _projectCommunityNodes = require("../shared/projectCommunityNodes");
15
11
  function communityNodesForSubject(subject, store, doc) {
16
12
  const inProfileDoc = store.each(subject, _solidUi.ns.solid('community'), null, doc);
17
13
  const inAnyDoc = store.each(subject, _solidUi.ns.solid('community'), null, null);
18
14
  const rawNodes = [...inProfileDoc, ...inAnyDoc];
19
- const expandedNodes = rawNodes.flatMap(node => {
20
- const hasCollectionElements = Array.isArray(node?.elements);
21
- const isListByTriples = (node.termType === 'BlankNode' || node.termType === 'NamedNode') && Boolean(store.any(node, _solidUi.ns.rdf('first')));
22
- return hasCollectionElements || isListByTriples ? (0, _rdfList.expandRdfList)(store, node) : [node];
23
- });
15
+ const expandedNodes = rawNodes.flatMap(node => (0, _projectCommunityNodes.expandCommunityNodes)(store, node, doc));
24
16
  const seen = new Set();
25
17
  const nodes = [];
26
18
  for (const node of expandedNodes) {
@@ -41,39 +33,6 @@ function clearStaleRequestedState(fetcher, docUrl) {
41
33
  }
42
34
  return previous;
43
35
  }
44
- function linkedProjectNodeFromCommunityNode(node, store) {
45
- if (!node) return null;
46
- if (node.termType === 'NamedNode') return node;
47
- if (node.termType === 'Literal') {
48
- try {
49
- return (0, _rdflib.sym)(node.value);
50
- } catch {
51
- return null;
52
- }
53
- }
54
- if (node.termType !== 'BlankNode') return null;
55
- const candidatePredicates = [_solidUi.ns.solid('publicId'), _solidUi.ns.schema('url'), _solidUi.ns.foaf('homepage'), _solidUi.ns.rdfs('seeAlso'), _solidUi.ns.schema('sameAs'), _solidUi.ns.schema('mainEntityOfPage')];
56
- for (const predicate of candidatePredicates) {
57
- const linked = store.any(node, predicate);
58
- if (!linked?.value) continue;
59
- if (linked.termType === 'NamedNode') {
60
- return linked;
61
- }
62
- if (linked.termType === 'Literal') {
63
- try {
64
- return (0, _rdflib.sym)(linked.value);
65
- } catch {
66
- // Keep trying the next predicate.
67
- }
68
- }
69
- }
70
- const outgoing = store.statementsMatching(node, null, null, null);
71
- const firstNamedNode = outgoing.find(statement => statement.object.termType === 'NamedNode');
72
- if (firstNamedNode?.object?.value) {
73
- return firstNamedNode.object;
74
- }
75
- return null;
76
- }
77
36
  async function ensureProjectDocumentsLoaded(subject, store) {
78
37
  const profileDoc = subject.doc();
79
38
  const fetcher = store?.fetcher;
@@ -83,7 +42,7 @@ async function ensureProjectDocumentsLoaded(subject, store) {
83
42
  const communityNodes = communityNodesForSubject(subject, store, profileDoc);
84
43
  const docsToLoad = new Map();
85
44
  for (const node of communityNodes) {
86
- const linkedProjectNode = linkedProjectNodeFromCommunityNode(node, store);
45
+ const linkedProjectNode = (0, _projectCommunityNodes.linkedProjectNodeFromCommunityNode)(node, store);
87
46
  if (!linkedProjectNode) continue;
88
47
  const projectDoc = linkedProjectNode.doc();
89
48
  docsToLoad.set(projectDoc.value, projectDoc);
@@ -130,7 +89,7 @@ async function presentProjects(subject, store) {
130
89
  const seen = new Set();
131
90
  const communityNodes = communityNodesForSubject(subject, store, doc);
132
91
  const projects = communityNodes.map(communityNode => {
133
- const linkedProjectNode = linkedProjectNodeFromCommunityNode(communityNode, store);
92
+ const linkedProjectNode = (0, _projectCommunityNodes.linkedProjectNodeFromCommunityNode)(communityNode, store);
134
93
  const url = linkedProjectNode?.value || projectNodeToUrl(communityNode);
135
94
  const key = normalizeUrlKey(url);
136
95
  const projectNode = linkedProjectNode || toProjectNamedNode(communityNode, url);
@@ -1,7 +1,8 @@
1
1
  import { TemplateResult } from 'lit-html';
2
2
  import { NamedNode } from 'rdflib';
3
- import './styles/QRCodeCard.css';
4
3
  type LegacySubjectArg = NamedNode | string;
4
+ export declare function hydrateQRCodeElement(QRCodeElement: HTMLElement): Promise<void>;
5
+ export declare function hydrateQRCodes(root: ParentNode): Promise<void>;
5
6
  export declare const QRCodeCard: (arg1: LegacySubjectArg, arg2?: unknown, arg3?: unknown) => TemplateResult;
6
7
  export {};
7
8
  //# sourceMappingURL=QRCodeCard.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"QRCodeCard.d.ts","sourceRoot":"","sources":["../../../src/sections/qrcode/QRCodeCard.ts"],"names":[],"mappings":"AAAA,OAAO,EAAQ,cAAc,EAAE,MAAM,UAAU,CAAA;AAC/C,OAAO,EAAa,SAAS,EAAE,MAAM,QAAQ,CAAA;AAS7C,KAAK,gBAAgB,GAAG,SAAS,GAAG,MAAM,CAAA;AA8G1C,wBAAsB,oBAAoB,CAAC,aAAa,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,CAkBpF;AAED,wBAAsB,cAAc,CAAC,IAAI,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC,CAQpE;AAED,eAAO,MAAM,UAAU,GACrB,MAAM,gBAAgB,EACtB,OAAO,OAAO,EACd,OAAO,OAAO,KACb,cAkEF,CAAA"}
@@ -4,10 +4,14 @@ Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
6
  exports.QRCodeCard = void 0;
7
+ exports.hydrateQRCodeElement = hydrateQRCodeElement;
8
+ exports.hydrateQRCodes = hydrateQRCodes;
7
9
  var _litHtml = require("lit-html");
8
10
  var _solidUi = require("solid-ui");
9
- require("./styles/QRCodeCard.css");
10
- var _texts = require("./texts");
11
+ var _debug = require("../../utils/debug");
12
+ var qrcode = _interopRequireWildcard(require("qrcode"));
13
+ var _texts = require("../../texts");
14
+ function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function (e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, default: e }; if (null === e || "object" != typeof e && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (const t in e) "default" !== t && {}.hasOwnProperty.call(e, t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, t)) && (i.get || i.set) ? o(f, t, i) : f[t] = e[t]); return f; })(e, t); }
11
15
  /* Part of this code was generated by AI Model: GPT-5.3-Codex */
12
16
  /* Prompt: The QRCode has a label "link to profile" but it should
13
17
  be a VCARD with name, and link to profile. So when you scan it
@@ -76,6 +80,49 @@ function firstContactValue(store, subject, predicate, kind) {
76
80
  }
77
81
  return '';
78
82
  }
83
+ const qrCodeRenderOptions = {
84
+ type: 'svg',
85
+ color: {
86
+ dark: '#000000',
87
+ light: '#ffffff'
88
+ }
89
+ };
90
+ function renderQRCodeSvg(value) {
91
+ return new Promise((resolve, reject) => {
92
+ qrcode.toString(value, qrCodeRenderOptions, (error, svg) => {
93
+ if (error) {
94
+ reject(error);
95
+ return;
96
+ }
97
+ resolve(svg);
98
+ });
99
+ });
100
+ }
101
+ async function hydrateQRCodeElement(QRCodeElement) {
102
+ const value = QRCodeElement.getAttribute('data-value');
103
+ if (!value) {
104
+ (0, _debug.error)('QRCode data-value missing');
105
+ return;
106
+ }
107
+ const imageContainer = QRCodeElement.querySelector('.qrcode-card__image');
108
+ if (!imageContainer) {
109
+ (0, _debug.error)('QRCode image container missing');
110
+ return;
111
+ }
112
+ try {
113
+ imageContainer.innerHTML = await renderQRCodeSvg(value);
114
+ } catch (error) {
115
+ (0, _debug.error)('QRcode error!', error);
116
+ }
117
+ }
118
+ async function hydrateQRCodes(root) {
119
+ const QRCodeElements = Array.from(root.querySelectorAll('.qrcode-card'));
120
+ if (!QRCodeElements.length) {
121
+ (0, _debug.error)('QRCode Ele missing');
122
+ return;
123
+ }
124
+ await Promise.all(QRCodeElements.map(element => hydrateQRCodeElement(element)));
125
+ }
79
126
  const QRCodeCard = (arg1, arg2, arg3) => {
80
127
  const {
81
128
  subject,
@@ -98,23 +145,24 @@ const QRCodeCard = (arg1, arg2, arg3) => {
98
145
  }
99
146
  vCardLines.push('END:VCARD');
100
147
  const vCard = vCardLines.join('\r\n');
101
-
102
- // console.log(`@@ qrcodes colours highlightColor ${highlightColor}, backgroundColor ${backgroundColor}`)
103
-
104
148
  return (0, _litHtml.html)`
105
149
  <figure
106
- class="qrcode-card flex-column-center"
150
+ class="qrcode-card"
107
151
  data-value="${vCard}"
108
152
  data-testid="qrcode-card"
109
153
  aria-labelledby="qr-code-caption"
110
154
  role="img"
111
155
  aria-describedby="qr-code-description"
112
156
  >
113
- <div
114
- aria-label="Static QR code containing contact information for ${name}"
115
- role="img"
116
- tabindex="0"
117
- ></div>
157
+ <div class="qrcode-card__frame">
158
+ <div
159
+ class="qrcode-card__image"
160
+ aria-label="Static QR code containing contact information for ${name}"
161
+ role="img"
162
+ tabindex="0"
163
+ >
164
+ </div>
165
+ </div>
118
166
  <figcaption
119
167
  id="qr-code-caption"
120
168
  class="qrcode-card__caption"
@@ -0,0 +1,108 @@
1
+ /* QR code section styles. */
2
+
3
+ .profile__qr-code {
4
+ --qrcode-card-gap: var(--spacing-md, 1.25rem);
5
+ --qrcode-card-caption-color: var(--color-text-strong-secondary, var(--gray-800, #1E2939));
6
+ --qrcode-card-caption-size: var(--font-size-md, 1rem);
7
+ --qrcode-card-caption-size-compact: var(--font-size-sm, 0.875rem);
8
+ --qrcode-card-caption-weight: var(--font-weight-md, 500);
9
+ --qrcode-card-image-padding-top: 1rem;
10
+ --qrcode-card-image-padding-right: 1rem;
11
+ --qrcode-card-image-padding-bottom: 1.0625rem;
12
+ --qrcode-card-image-padding-left: 1.0625rem;
13
+ --qrcode-card-frame-border: var(--border-width-thin, 0.1rem) solid var(--color-border, var(--gray-200, #E5E7EB));
14
+ --qrcode-card-frame-background: var(--color-surface-framed-content, #F3F4F6);
15
+ --qrcode-section-padding-compact: var(--spacing-sm, 0.938rem);
16
+ --qrcode-section-gap-compact: var(--spacing-2xs, 0.625rem);
17
+ border-radius: var(--border-radius-base, 0.3125rem);
18
+ background: var(--color-card-bg, var(--white, #FFF));
19
+ border: var(--border-width-thin, 0.1rem) solid var(--color-border-lighter, #E2E8F0);
20
+ }
21
+
22
+ /* Caption */
23
+ .qrcode-card__caption {
24
+ text-align: center;
25
+ margin: 0;
26
+ color: var(--qrcode-card-caption-color);
27
+ font-size: var(--qrcode-card-caption-size);
28
+ font-weight: var(--qrcode-card-caption-weight);
29
+ }
30
+
31
+ /* Card and frame */
32
+ .qrcode-card {
33
+ display: flex;
34
+ flex-direction: column;
35
+ align-items: center;
36
+ gap: var(--qrcode-card-gap);
37
+ align-self: stretch;
38
+ }
39
+
40
+ .qrcode-card__frame {
41
+ margin: 0;
42
+ padding:
43
+ var(--qrcode-card-image-padding-top)
44
+ var(--qrcode-card-image-padding-right)
45
+ var(--qrcode-card-image-padding-bottom)
46
+ var(--qrcode-card-image-padding-left);
47
+ border-radius: var(--border-radius-base, 0.3125rem);
48
+ border: var(--qrcode-card-frame-border);
49
+ background: var(--qrcode-card-frame-background);
50
+ }
51
+
52
+ /* QR image */
53
+ .qrcode-card__image {
54
+ flex-shrink: 0;
55
+ aspect-ratio: 1/1;
56
+ }
57
+
58
+ .qrcode-card__image svg {
59
+ width: 100%;
60
+ height: 100%;
61
+ display: block;
62
+ }
63
+
64
+ /* Compact layout */
65
+ :is(.profile-pane-host, .profile-pane-root)[data-layout='mobile'] .profile__qr-code {
66
+ display: flex;
67
+ flex-direction: column;
68
+ align-items: flex-start;
69
+ align-self: stretch;
70
+ padding: var(--qrcode-section-padding-compact);
71
+ gap: var(--qrcode-section-gap-compact);
72
+ }
73
+
74
+ @container profile-pane (max-width: 576px) {
75
+ .profile__qr-code {
76
+ display: flex;
77
+ flex-direction: column;
78
+ align-items: flex-start;
79
+ align-self: stretch;
80
+ padding: var(--qrcode-section-padding-compact);
81
+ gap: var(--qrcode-section-gap-compact);
82
+ }
83
+ }
84
+
85
+ :is(.profile-pane-host, .profile-pane-root)[data-layout='mobile'] .qrcode-card__caption {
86
+ font-size: var(--qrcode-card-caption-size-compact);
87
+ }
88
+
89
+ @media (max-width: 576px) {
90
+ .profile__qr-code {
91
+ display: flex;
92
+ flex-direction: column;
93
+ align-items: flex-start;
94
+ align-self: stretch;
95
+ padding: var(--qrcode-section-padding-compact);
96
+ gap: var(--qrcode-section-gap-compact);
97
+ }
98
+
99
+ .qrcode-card__caption {
100
+ font-size: var(--qrcode-card-caption-size-compact);
101
+ }
102
+ }
103
+
104
+ @container profile-pane (max-width: 576px) {
105
+ .qrcode-card__caption {
106
+ font-size: var(--qrcode-card-caption-size-compact);
107
+ }
108
+ }
@@ -0,0 +1,4 @@
1
+ import { LiveStore, NamedNode } from 'rdflib';
2
+ import './QRCodeSection.css';
3
+ export declare function renderQRCodeSection(subject: NamedNode, store: LiveStore): import("lit-html").TemplateResult<1>;
4
+ //# sourceMappingURL=QRCodeSection.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"QRCodeSection.d.ts","sourceRoot":"","sources":["../../../src/sections/qrcode/QRCodeSection.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,QAAQ,CAAA;AAC7C,OAAO,qBAAqB,CAAA;AAE5B,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,SAAS,EAAE,KAAK,EAAE,SAAS,wCAOvE"}
@@ -0,0 +1,17 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.renderQRCodeSection = renderQRCodeSection;
7
+ var _litHtml = require("lit-html");
8
+ var _QRCodeCard = require("./QRCodeCard");
9
+ require("./QRCodeSection.css");
10
+ function renderQRCodeSection(subject, store) {
11
+ return (0, _litHtml.html)`
12
+ <section class="profile__section profile__qr-code" data-profile-section="qr-code" aria-labelledby="qr-heading" tabindex="-1">
13
+ <h3 id="qr-heading" class="sr-only">QR code</h3>
14
+ ${(0, _QRCodeCard.QRCodeCard)(subject, store)}
15
+ </section>
16
+ `;
17
+ }
@@ -1,7 +1,16 @@
1
+ import 'solid-ui/components/actions/button';
2
+ import 'solid-ui/components/forms/combobox';
3
+ import 'solid-ui/components/forms/select';
1
4
  import { RoleDetails } from './types';
2
5
  import '../../styles/EditDialogs.css';
3
- import '../../styles/ContactInfoEditDialog.css';
6
+ import '../contactInfo/ContactInfoEditDialog.css';
4
7
  import { LiveStore, NamedNode } from 'rdflib';
5
8
  import { ViewerMode } from '../../types';
9
+ type ResumeOrganizationSuggestion = {
10
+ label: string;
11
+ publicId: string;
12
+ };
13
+ export declare function fetchWikidataOrganizationSuggestions(name: string, selectedType: string): Promise<ResumeOrganizationSuggestion[]>;
6
14
  export declare function createResumeEditDialog(event: Event, store: LiveStore, subject: NamedNode, resumeData: RoleDetails[], viewerMode: ViewerMode, onSaved?: () => Promise<void> | void): Promise<void>;
15
+ export {};
7
16
  //# sourceMappingURL=ResumeEditDialog.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"ResumeEditDialog.d.ts","sourceRoot":"","sources":["../../../src/sections/resume/ResumeEditDialog.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,WAAW,EAAa,MAAM,SAAS,CAAA;AAChD,OAAO,8BAA8B,CAAA;AACrC,OAAO,wCAAwC,CAAA;AAC/C,OAAO,EAAE,SAAS,EAAE,SAAS,EAAW,MAAM,QAAQ,CAAA;AAEtD,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAA;AA+nBxC,wBAAsB,sBAAsB,CAC1C,KAAK,EAAE,KAAK,EACZ,KAAK,EAAE,SAAS,EAChB,OAAO,EAAE,SAAS,EAClB,UAAU,EAAE,WAAW,EAAE,EACzB,UAAU,EAAE,UAAU,EACtB,OAAO,CAAC,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,iBAoDrC"}
1
+ {"version":3,"file":"ResumeEditDialog.d.ts","sourceRoot":"","sources":["../../../src/sections/resume/ResumeEditDialog.ts"],"names":[],"mappings":"AAEA,OAAO,oCAAoC,CAAA;AAC3C,OAAO,oCAAoC,CAAA;AAC3C,OAAO,kCAAkC,CAAA;AACzC,OAAO,EAAE,WAAW,EAAa,MAAM,SAAS,CAAA;AAChD,OAAO,8BAA8B,CAAA;AACrC,OAAO,0CAA0C,CAAA;AACjD,OAAO,EAAE,SAAS,EAAE,SAAS,EAAW,MAAM,QAAQ,CAAA;AAEtD,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAA;AA4BxC,KAAK,4BAA4B,GAAG;IAClC,KAAK,EAAE,MAAM,CAAA;IACb,QAAQ,EAAE,MAAM,CAAA;CACjB,CAAA;AA4OD,wBAAsB,oCAAoC,CACxD,IAAI,EAAE,MAAM,EACZ,YAAY,EAAE,MAAM,GACnB,OAAO,CAAC,4BAA4B,EAAE,CAAC,CA+CzC;AAi3BD,wBAAsB,sBAAsB,CAC1C,KAAK,EAAE,KAAK,EACZ,KAAK,EAAE,SAAS,EAChB,OAAO,EAAE,SAAS,EAClB,UAAU,EAAE,WAAW,EAAE,EACzB,UAAU,EAAE,UAAU,EACtB,OAAO,CAAC,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,iBAoDrC"}