profile-pane 3.2.0 → 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.
- package/README.md +50 -0
- package/icons-png/discord.png +0 -0
- package/icons-png/dribbble.png +0 -0
- package/icons-png/facebook.png +0 -0
- package/icons-png/instagram.png +0 -0
- package/icons-png/linkedin.png +0 -0
- package/icons-png/pinterest.png +0 -0
- package/icons-png/sharechat.png +0 -0
- package/icons-png/signup.png +0 -0
- package/icons-png/snapchat.png +0 -0
- package/icons-png/spotify.png +0 -0
- package/icons-png/telegram.png +0 -0
- package/icons-png/tiktok.png +0 -0
- package/icons-png/whatsapp.png +0 -0
- package/icons-png/x.png +0 -0
- package/icons-png/youtube.png +0 -0
- package/lib/303.profile-pane.js +1362 -0
- package/lib/303.profile-pane.js.map +1 -0
- package/lib/303.profile-pane.min.js +2 -0
- package/lib/303.profile-pane.min.js.map +1 -0
- package/lib/ProfileView.css +1090 -0
- package/lib/ProfileView.d.ts +2 -1
- package/lib/ProfileView.d.ts.map +1 -1
- package/lib/ProfileView.js +64 -36
- package/lib/buttonsHelper.d.ts +1 -1
- package/lib/buttonsHelper.d.ts.map +1 -1
- package/lib/buttonsHelper.js +2 -1
- package/lib/editProfilePane/EditCVCard.js +1 -1
- package/lib/editProfilePane/EditCommunitiesCard.js +1 -1
- package/lib/editProfilePane/EditFriendsCard.js +1 -1
- package/lib/editProfilePane/EditProfileView.d.ts +1 -1
- package/lib/editProfilePane/EditProfileView.d.ts.map +1 -1
- package/lib/editProfilePane/EditProfileView.js +4 -5
- package/lib/editProfilePane/editProfilePresenter.d.ts.map +1 -1
- package/lib/editProfilePane/editProfilePresenter.js +5 -4
- package/lib/icons-svg/profileIcons.d.ts +1 -1
- package/lib/icons-svg/profileIcons.d.ts.map +1 -1
- package/lib/icons-svg/profileIcons.js +9 -17
- package/lib/index.d.ts +1 -8
- package/lib/index.d.ts.map +1 -1
- package/lib/index.js +74 -40
- package/lib/ontology/otherPreferencesForm.ttl +32 -0
- package/lib/ontology/resumeForm.ttl +349 -0
- package/lib/ontology/socialMedia.ttl +433 -0
- package/lib/profile-pane.js +32266 -13247
- package/lib/profile-pane.js.map +1 -1
- package/lib/profile-pane.min.js +2315 -935
- package/lib/profile-pane.min.js.map +1 -1
- package/lib/rdfFormsHelper.d.ts +13 -1
- package/lib/rdfFormsHelper.d.ts.map +1 -1
- package/lib/rdfFormsHelper.js +13 -1
- package/lib/sections/bio/BioEditDialog.d.ts.map +1 -1
- package/lib/sections/bio/BioEditDialog.js +7 -7
- package/lib/sections/bio/BioSection.css +300 -0
- package/lib/sections/bio/BioSection.d.ts +3 -2
- package/lib/sections/bio/BioSection.d.ts.map +1 -1
- package/lib/sections/bio/BioSection.js +26 -19
- package/lib/sections/bio/mutations.d.ts.map +1 -1
- package/lib/sections/bio/mutations.js +14 -3
- package/lib/sections/contactInfo/ContactInfoEditDialog.css +354 -0
- package/lib/sections/contactInfo/ContactInfoEditDialog.d.ts +3 -1
- package/lib/sections/contactInfo/ContactInfoEditDialog.d.ts.map +1 -1
- package/lib/sections/contactInfo/ContactInfoEditDialog.js +183 -98
- package/lib/sections/contactInfo/ContactInfoSection.css +125 -0
- package/lib/sections/contactInfo/ContactInfoSection.d.ts +2 -0
- package/lib/sections/contactInfo/ContactInfoSection.d.ts.map +1 -1
- package/lib/sections/contactInfo/ContactInfoSection.js +64 -41
- package/lib/sections/contactInfo/mutations.d.ts.map +1 -1
- package/lib/sections/contactInfo/mutations.js +51 -16
- package/lib/sections/education/EducationEditDialog.d.ts +3 -1
- package/lib/sections/education/EducationEditDialog.d.ts.map +1 -1
- package/lib/sections/education/EducationEditDialog.js +170 -92
- package/lib/sections/education/EducationSection.css +133 -0
- package/lib/sections/education/EducationSection.d.ts +3 -2
- package/lib/sections/education/EducationSection.d.ts.map +1 -1
- package/lib/sections/education/EducationSection.js +32 -25
- package/lib/sections/education/mutations.d.ts.map +1 -1
- package/lib/sections/education/mutations.js +14 -3
- package/lib/sections/heading/HeadingEditDialog.d.ts +4 -1
- package/lib/sections/heading/HeadingEditDialog.d.ts.map +1 -1
- package/lib/sections/heading/HeadingEditDialog.js +287 -162
- package/lib/sections/heading/HeadingSection.css +862 -0
- package/lib/sections/heading/HeadingSection.d.ts +3 -2
- package/lib/sections/heading/HeadingSection.d.ts.map +1 -1
- package/lib/sections/heading/HeadingSection.js +63 -32
- package/lib/sections/heading/imageHelpers.d.ts +1 -0
- package/lib/sections/heading/imageHelpers.d.ts.map +1 -1
- package/lib/sections/heading/imageHelpers.js +40 -1
- package/lib/sections/heading/mutations.d.ts.map +1 -1
- package/lib/sections/heading/mutations.js +86 -23
- package/lib/sections/heading/selectors.d.ts.map +1 -1
- package/lib/sections/heading/selectors.js +14 -3
- package/lib/sections/heading/types.d.ts +1 -2
- package/lib/sections/heading/types.d.ts.map +1 -1
- package/lib/sections/languages/LanguageEditDialog.d.ts +3 -1
- package/lib/sections/languages/LanguageEditDialog.d.ts.map +1 -1
- package/lib/sections/languages/LanguageEditDialog.js +202 -119
- package/lib/sections/languages/LanguageSection.css +53 -0
- package/lib/sections/languages/LanguageSection.d.ts +2 -0
- package/lib/sections/languages/LanguageSection.d.ts.map +1 -1
- package/lib/sections/languages/LanguageSection.js +42 -31
- package/lib/sections/languages/mutations.d.ts.map +1 -1
- package/lib/sections/languages/mutations.js +60 -161
- package/lib/sections/languages/selectors.d.ts.map +1 -1
- package/lib/sections/languages/selectors.js +1 -2
- package/lib/sections/projects/ProjectEditDialog.d.ts +2 -1
- package/lib/sections/projects/ProjectEditDialog.d.ts.map +1 -1
- package/lib/sections/projects/ProjectEditDialog.js +13 -24
- package/lib/sections/projects/ProjectSection.css +368 -0
- package/lib/sections/projects/ProjectSection.d.ts +2 -1
- package/lib/sections/projects/ProjectSection.d.ts.map +1 -1
- package/lib/sections/projects/ProjectSection.js +116 -34
- package/lib/sections/projects/mutations.d.ts.map +1 -1
- package/lib/sections/projects/mutations.js +109 -132
- package/lib/sections/projects/selectors.d.ts.map +1 -1
- package/lib/sections/projects/selectors.js +4 -45
- package/lib/{QRCodeCard.d.ts → sections/qrcode/QRCodeCard.d.ts} +2 -1
- package/lib/sections/qrcode/QRCodeCard.d.ts.map +1 -0
- package/lib/{QRCodeCard.js → sections/qrcode/QRCodeCard.js} +59 -11
- package/lib/sections/qrcode/QRCodeSection.css +108 -0
- package/lib/sections/qrcode/QRCodeSection.d.ts +4 -0
- package/lib/sections/qrcode/QRCodeSection.d.ts.map +1 -0
- package/lib/sections/qrcode/QRCodeSection.js +17 -0
- package/lib/sections/resume/ResumeEditDialog.d.ts +10 -1
- package/lib/sections/resume/ResumeEditDialog.d.ts.map +1 -1
- package/lib/sections/resume/ResumeEditDialog.js +531 -149
- package/lib/sections/resume/ResumeSection.css +350 -0
- package/lib/sections/resume/ResumeSection.d.ts +3 -2
- package/lib/sections/resume/ResumeSection.d.ts.map +1 -1
- package/lib/sections/resume/ResumeSection.js +78 -49
- package/lib/sections/resume/mutations.d.ts.map +1 -1
- package/lib/sections/resume/mutations.js +17 -3
- package/lib/sections/resume/selectors.d.ts.map +1 -1
- package/lib/sections/resume/selectors.js +1 -0
- package/lib/sections/resume/types.d.ts +1 -0
- package/lib/sections/resume/types.d.ts.map +1 -1
- package/lib/sections/shared/collapsibleSection.d.ts.map +1 -1
- package/lib/sections/shared/collapsibleSection.js +1 -0
- package/lib/sections/shared/phoneCountries.d.ts +1 -1
- package/lib/sections/shared/phoneCountries.d.ts.map +1 -1
- package/lib/sections/shared/phoneCountries.js +2 -2
- package/lib/sections/shared/projectCommunityNodes.d.ts +6 -0
- package/lib/sections/shared/projectCommunityNodes.d.ts.map +1 -0
- package/lib/sections/shared/projectCommunityNodes.js +56 -0
- package/lib/sections/shared/rdfMutationHelpers.d.ts +35 -2
- package/lib/sections/shared/rdfMutationHelpers.d.ts.map +1 -1
- package/lib/sections/shared/rdfMutationHelpers.js +290 -14
- package/lib/sections/shared/sectionCardHelpers.d.ts.map +1 -1
- package/lib/sections/shared/sectionCardHelpers.js +80 -11
- package/lib/sections/shared/types.d.ts +24 -0
- package/lib/sections/shared/types.d.ts.map +1 -1
- package/lib/sections/skills/SkillsEditDialog.d.ts +3 -1
- package/lib/sections/skills/SkillsEditDialog.d.ts.map +1 -1
- package/lib/sections/skills/SkillsEditDialog.js +136 -115
- package/lib/sections/skills/SkillsSection.css +173 -0
- package/lib/sections/skills/SkillsSection.d.ts +2 -0
- package/lib/sections/skills/SkillsSection.d.ts.map +1 -1
- package/lib/sections/skills/SkillsSection.js +107 -47
- package/lib/sections/skills/mutations.d.ts.map +1 -1
- package/lib/sections/skills/mutations.js +25 -21
- package/lib/sections/skills/selectors.d.ts.map +1 -1
- package/lib/sections/skills/selectors.js +5 -3
- package/lib/sections/social/SocialEditDialog.d.ts +3 -1
- package/lib/sections/social/SocialEditDialog.d.ts.map +1 -1
- package/lib/sections/social/SocialEditDialog.js +170 -62
- package/lib/sections/social/SocialSection.css +194 -0
- package/lib/sections/social/SocialSection.d.ts +4 -3
- package/lib/sections/social/SocialSection.d.ts.map +1 -1
- package/lib/sections/social/SocialSection.js +59 -43
- package/lib/sections/social/mutations.d.ts.map +1 -1
- package/lib/sections/social/mutations.js +23 -132
- package/lib/specialButtons/AddMeToYourFriends.css +54 -0
- package/lib/specialButtons/addContact/AddMeToYourContacts.css +1118 -0
- package/lib/specialButtons/addContact/ContactCreationDialog.d.ts +10 -0
- package/lib/specialButtons/addContact/ContactCreationDialog.d.ts.map +1 -0
- package/lib/specialButtons/addContact/ContactCreationDialog.js +1123 -0
- package/lib/specialButtons/addContact/addMeToYourContacts.d.ts +16 -0
- package/lib/specialButtons/addContact/addMeToYourContacts.d.ts.map +1 -0
- package/lib/specialButtons/addContact/addMeToYourContacts.js +136 -0
- package/lib/specialButtons/addContact/contactsErrors.d.ts +8 -0
- package/lib/specialButtons/addContact/contactsErrors.d.ts.map +1 -0
- package/lib/specialButtons/addContact/contactsErrors.js +106 -0
- package/lib/specialButtons/addContact/contactsTypes.d.ts +43 -0
- package/lib/specialButtons/addContact/contactsTypes.d.ts.map +1 -0
- package/lib/specialButtons/addContact/contactsTypes.js +5 -0
- package/lib/specialButtons/addContact/helpers.d.ts +7 -0
- package/lib/specialButtons/addContact/helpers.d.ts.map +1 -0
- package/lib/specialButtons/addContact/helpers.js +103 -0
- package/lib/specialButtons/addContact/mutations.d.ts +16 -0
- package/lib/specialButtons/addContact/mutations.d.ts.map +1 -0
- package/lib/specialButtons/addContact/mutations.js +300 -0
- package/lib/specialButtons/addContact/selectors.d.ts +10 -0
- package/lib/specialButtons/addContact/selectors.d.ts.map +1 -0
- package/lib/specialButtons/addContact/selectors.js +163 -0
- package/lib/{addMeToYourFriends.d.ts → specialButtons/addMeToYourFriends.d.ts} +6 -4
- package/lib/specialButtons/addMeToYourFriends.d.ts.map +1 -0
- package/lib/{addMeToYourFriends.js → specialButtons/addMeToYourFriends.js} +46 -11
- package/lib/styles/CollapsibleSection.css +519 -0
- package/lib/styles/EditDialogs.css +506 -686
- package/lib/styles/EditDialogs.responsive.css +989 -0
- package/lib/texts/buttonTexts.d.ts +9 -0
- package/lib/texts/buttonTexts.d.ts.map +1 -0
- package/lib/texts/buttonTexts.js +14 -0
- package/lib/texts/dialogTexts.d.ts +14 -0
- package/lib/texts/dialogTexts.d.ts.map +1 -0
- package/lib/texts/dialogTexts.js +19 -0
- package/lib/texts/messageTexts.d.ts +42 -0
- package/lib/texts/messageTexts.d.ts.map +1 -0
- package/lib/texts/messageTexts.js +47 -0
- package/lib/texts/profileTexts.d.ts +14 -0
- package/lib/texts/profileTexts.d.ts.map +1 -0
- package/lib/texts/profileTexts.js +19 -0
- package/lib/texts/qrCodeTexts.d.ts +2 -0
- package/lib/texts/qrCodeTexts.d.ts.map +1 -0
- package/lib/texts/qrCodeTexts.js +7 -0
- package/lib/texts.d.ts +5 -60
- package/lib/texts.d.ts.map +1 -1
- package/lib/texts.js +55 -70
- package/lib/ui/dialog.css +233 -0
- package/lib/ui/dialog.d.ts +15 -1
- package/lib/ui/dialog.d.ts.map +1 -1
- package/lib/ui/dialog.js +245 -45
- package/lib/ui/dialog.responsive.css +195 -0
- package/lib/ui/errors.d.ts.map +1 -1
- package/lib/ui/errors.js +2 -1
- package/lib/ui/spinner.d.ts +3 -0
- package/lib/ui/spinner.d.ts.map +1 -0
- package/lib/ui/spinner.js +13 -0
- package/lib/utils/debug.d.ts +5 -0
- package/lib/utils/debug.d.ts.map +1 -0
- package/lib/utils/debug.js +23 -0
- package/lib/utils/errorDisplay.d.ts +2 -0
- package/lib/utils/errorDisplay.d.ts.map +1 -0
- package/lib/utils/errorDisplay.js +19 -0
- package/package.json +34 -26
- package/lib/ChatWithMe.d.ts +0 -7
- package/lib/ChatWithMe.d.ts.map +0 -1
- package/lib/ChatWithMe.js +0 -90
- package/lib/QRCodeCard.d.ts.map +0 -1
- package/lib/addMeToYourFriends.d.ts.map +0 -1
- package/lib/sections/heading/camera.d.ts +0 -19
- package/lib/sections/heading/camera.d.ts.map +0 -1
- package/lib/sections/heading/camera.js +0 -199
- package/lib/styles/BioSection.css +0 -77
- package/lib/styles/CVCard.css +0 -142
- package/lib/styles/ChatWithMe.css +0 -6
- package/lib/styles/ContactInfoEditDialog.css +0 -153
- package/lib/styles/EducationCard.css +0 -103
- package/lib/styles/HeadingSection.css +0 -309
- package/lib/styles/ProfileCard.css +0 -66
- package/lib/styles/ProfileView.css +0 -65
- package/lib/styles/ProjectsCard.css +0 -206
- package/lib/styles/QRCodeCard.css +0 -43
- package/lib/styles/SocialCard.css +0 -89
- package/lib/styles/dialog.css +0 -209
- 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
|
-
|
|
10
|
-
|
|
11
|
-
|
|
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
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
}
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
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
|
-
|
|
74
|
-
insertions.forEach(statement => {
|
|
75
|
-
store.add(statement.subject, statement.predicate, statement.object, statement.why);
|
|
76
|
-
});
|
|
49
|
+
return nodes;
|
|
77
50
|
}
|
|
78
|
-
|
|
79
|
-
const
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
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.
|
|
136
|
-
const
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
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
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
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
|
|
150
|
-
|
|
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
|
-
|
|
156
|
-
|
|
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
|
-
|
|
170
|
-
|
|
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
|
-
|
|
175
|
-
if (urlKey) {
|
|
176
|
-
seenCreateUrlKeys.add(urlKey);
|
|
177
|
-
}
|
|
141
|
+
addUrlToDoc(doc, newLink.value);
|
|
178
142
|
});
|
|
179
|
-
|
|
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 (
|
|
185
|
-
const
|
|
186
|
-
|
|
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;
|
|
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
|
|
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("
|
|
10
|
-
var
|
|
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
|
|
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
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
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 @@
|
|
|
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 '
|
|
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,
|
|
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"}
|