profile-pane 3.1.4 → 3.2.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 (311) hide show
  1. package/README.md +16 -0
  2. package/lib/04567ff683933c35c465.png +0 -0
  3. package/lib/10163fd9b5a0e00d63a0.png +0 -0
  4. package/lib/1234dcb2eec2e45f252b.png +0 -0
  5. package/lib/20899934157df4db56cb.png +0 -0
  6. package/lib/33760bf79f097f449da5.png +0 -0
  7. package/lib/578d2b6ed32e7624164e.png +0 -0
  8. package/lib/5f62a5b2b7e99b9640c7.png +0 -0
  9. package/lib/6525766ecd288ec60129.png +0 -0
  10. package/lib/7800be6f6c4b5b0f4f20.png +0 -0
  11. package/lib/976473cf5fe24d657d4b.png +0 -0
  12. package/lib/ChatWithMe.d.ts +2 -1
  13. package/lib/ChatWithMe.d.ts.map +1 -1
  14. package/lib/ChatWithMe.js +3 -3
  15. package/lib/ProfileView.d.ts +1 -1
  16. package/lib/ProfileView.d.ts.map +1 -1
  17. package/lib/ProfileView.js +71 -131
  18. package/lib/ProfileViewModelPresenter.d.ts +23 -0
  19. package/lib/ProfileViewModelPresenter.d.ts.map +1 -0
  20. package/lib/ProfileViewModelPresenter.js +37 -0
  21. package/lib/QRCodeCard.d.ts +3 -1
  22. package/lib/QRCodeCard.d.ts.map +1 -1
  23. package/lib/QRCodeCard.js +86 -66
  24. package/lib/addMeToYourFriends.d.ts +3 -3
  25. package/lib/addMeToYourFriends.d.ts.map +1 -1
  26. package/lib/addMeToYourFriends.js +14 -30
  27. package/lib/bda84f59e7216675a208.png +0 -0
  28. package/lib/buttonsHelper.js +1 -1
  29. package/lib/cd68e8f3990ba8b2139e.png +0 -0
  30. package/lib/e7074a7e2cb69e51cfd3.png +0 -0
  31. package/lib/editProfilePane/EditCVCard.d.ts +1 -0
  32. package/lib/editProfilePane/EditCVCard.d.ts.map +1 -1
  33. package/lib/editProfilePane/EditCVCard.js +2 -1
  34. package/lib/editProfilePane/EditCommunitiesCard.d.ts +1 -1
  35. package/lib/editProfilePane/EditCommunitiesCard.d.ts.map +1 -1
  36. package/lib/editProfilePane/EditCommunitiesCard.js +2 -1
  37. package/lib/editProfilePane/EditContactsCard.d.ts +1 -0
  38. package/lib/editProfilePane/EditContactsCard.d.ts.map +1 -1
  39. package/lib/editProfilePane/EditContactsCard.js +2 -0
  40. package/lib/editProfilePane/EditFriendsCard.d.ts +1 -1
  41. package/lib/editProfilePane/EditFriendsCard.d.ts.map +1 -1
  42. package/lib/editProfilePane/EditFriendsCard.js +2 -1
  43. package/lib/editProfilePane/EditOtherPreferences.d.ts +1 -0
  44. package/lib/editProfilePane/EditOtherPreferences.d.ts.map +1 -1
  45. package/lib/editProfilePane/EditOtherPreferences.js +1 -0
  46. package/lib/editProfilePane/EditProfileView.d.ts +1 -1
  47. package/lib/editProfilePane/EditProfileView.d.ts.map +1 -1
  48. package/lib/editProfilePane/EditProfileView.js +1 -1
  49. package/lib/editProfilePane/EditSocialCard.d.ts +1 -0
  50. package/lib/editProfilePane/EditSocialCard.d.ts.map +1 -1
  51. package/lib/editProfilePane/EditSocialCard.js +2 -1
  52. package/lib/editProfilePane/editProfilePresenter.d.ts +1 -0
  53. package/lib/editProfilePane/editProfilePresenter.d.ts.map +1 -1
  54. package/lib/editProfilePane/editProfilePresenter.js +2 -0
  55. package/lib/f3772696fb7ee53c23d8.png +0 -0
  56. package/lib/icons-svg/contactIcons.d.ts +3 -0
  57. package/lib/icons-svg/contactIcons.d.ts.map +1 -0
  58. package/lib/icons-svg/contactIcons.js +32 -0
  59. package/lib/icons-svg/profileIcons.d.ts +22 -0
  60. package/lib/icons-svg/profileIcons.d.ts.map +1 -0
  61. package/lib/icons-svg/profileIcons.js +309 -0
  62. package/lib/index.d.ts +1 -3
  63. package/lib/index.d.ts.map +1 -1
  64. package/lib/index.js +42 -19
  65. package/lib/profile-pane.js +15629 -5666
  66. package/lib/profile-pane.js.map +1 -1
  67. package/lib/profile-pane.min.js +2171 -230
  68. package/lib/profile-pane.min.js.map +1 -1
  69. package/lib/rdfFormsHelper.d.ts +1 -0
  70. package/lib/rdfFormsHelper.d.ts.map +1 -1
  71. package/lib/rdfFormsHelper.js +2 -0
  72. package/lib/sections/bio/BioEditDialog.d.ts +6 -0
  73. package/lib/sections/bio/BioEditDialog.d.ts.map +1 -0
  74. package/lib/sections/bio/BioEditDialog.js +119 -0
  75. package/lib/sections/bio/BioSection.d.ts +7 -0
  76. package/lib/sections/bio/BioSection.d.ts.map +1 -0
  77. package/lib/sections/bio/BioSection.js +131 -0
  78. package/lib/sections/bio/mutations.d.ts +4 -0
  79. package/lib/sections/bio/mutations.d.ts.map +1 -0
  80. package/lib/sections/bio/mutations.js +43 -0
  81. package/lib/sections/bio/selectors.d.ts +4 -0
  82. package/lib/sections/bio/selectors.d.ts.map +1 -0
  83. package/lib/sections/bio/selectors.js +15 -0
  84. package/lib/sections/bio/types.d.ts +15 -0
  85. package/lib/sections/bio/types.d.ts.map +1 -0
  86. package/lib/sections/bio/types.js +5 -0
  87. package/lib/sections/contactInfo/ContactInfoEditDialog.d.ts +7 -0
  88. package/lib/sections/contactInfo/ContactInfoEditDialog.d.ts.map +1 -0
  89. package/lib/sections/contactInfo/ContactInfoEditDialog.js +658 -0
  90. package/lib/sections/contactInfo/ContactInfoSection.d.ts +5 -0
  91. package/lib/sections/contactInfo/ContactInfoSection.d.ts.map +1 -0
  92. package/lib/sections/contactInfo/ContactInfoSection.js +229 -0
  93. package/lib/sections/contactInfo/mutations.d.ts +4 -0
  94. package/lib/sections/contactInfo/mutations.d.ts.map +1 -0
  95. package/lib/sections/contactInfo/mutations.js +150 -0
  96. package/lib/sections/contactInfo/selectors.d.ts +4 -0
  97. package/lib/sections/contactInfo/selectors.d.ts.map +1 -0
  98. package/lib/sections/contactInfo/selectors.js +104 -0
  99. package/lib/sections/contactInfo/types.d.ts +44 -0
  100. package/lib/sections/contactInfo/types.d.ts.map +1 -0
  101. package/lib/sections/contactInfo/types.js +5 -0
  102. package/lib/sections/education/EducationEditDialog.d.ts +7 -0
  103. package/lib/sections/education/EducationEditDialog.d.ts.map +1 -0
  104. package/lib/sections/education/EducationEditDialog.js +459 -0
  105. package/lib/sections/education/EducationSection.d.ts +7 -0
  106. package/lib/sections/education/EducationSection.d.ts.map +1 -0
  107. package/lib/sections/education/EducationSection.js +126 -0
  108. package/lib/sections/education/mutations.d.ts +4 -0
  109. package/lib/sections/education/mutations.d.ts.map +1 -0
  110. package/lib/sections/education/mutations.js +60 -0
  111. package/lib/sections/education/selectors.d.ts +4 -0
  112. package/lib/sections/education/selectors.d.ts.map +1 -0
  113. package/lib/sections/education/selectors.js +64 -0
  114. package/lib/sections/education/types.d.ts +20 -0
  115. package/lib/sections/education/types.d.ts.map +1 -0
  116. package/lib/sections/education/types.js +5 -0
  117. package/lib/sections/heading/HeadingEditDialog.d.ts +6 -0
  118. package/lib/sections/heading/HeadingEditDialog.d.ts.map +1 -0
  119. package/lib/sections/heading/HeadingEditDialog.js +742 -0
  120. package/lib/sections/heading/HeadingSection.d.ts +9 -0
  121. package/lib/sections/heading/HeadingSection.d.ts.map +1 -0
  122. package/lib/sections/heading/HeadingSection.js +97 -0
  123. package/lib/sections/heading/camera.d.ts +19 -0
  124. package/lib/sections/heading/camera.d.ts.map +1 -0
  125. package/lib/sections/heading/camera.js +199 -0
  126. package/lib/sections/heading/dateHelpers.d.ts +4 -0
  127. package/lib/sections/heading/dateHelpers.d.ts.map +1 -0
  128. package/lib/sections/heading/dateHelpers.js +48 -0
  129. package/lib/sections/heading/imageHelpers.d.ts +4 -0
  130. package/lib/sections/heading/imageHelpers.d.ts.map +1 -0
  131. package/lib/sections/heading/imageHelpers.js +81 -0
  132. package/lib/sections/heading/mutations.d.ts +4 -0
  133. package/lib/sections/heading/mutations.d.ts.map +1 -0
  134. package/lib/sections/heading/mutations.js +190 -0
  135. package/lib/sections/heading/selectors.d.ts +5 -0
  136. package/lib/sections/heading/selectors.d.ts.map +1 -0
  137. package/lib/sections/heading/selectors.js +157 -0
  138. package/lib/sections/heading/types.d.ts +36 -0
  139. package/lib/sections/heading/types.d.ts.map +1 -0
  140. package/lib/sections/heading/types.js +5 -0
  141. package/lib/sections/languages/LanguageEditDialog.d.ts +7 -0
  142. package/lib/sections/languages/LanguageEditDialog.d.ts.map +1 -0
  143. package/lib/sections/languages/LanguageEditDialog.js +457 -0
  144. package/lib/sections/languages/LanguageSection.d.ts +5 -0
  145. package/lib/sections/languages/LanguageSection.d.ts.map +1 -0
  146. package/lib/sections/languages/LanguageSection.js +137 -0
  147. package/lib/sections/languages/mutations.d.ts +6 -0
  148. package/lib/sections/languages/mutations.d.ts.map +1 -0
  149. package/lib/sections/languages/mutations.js +296 -0
  150. package/lib/sections/languages/selectors.d.ts +5 -0
  151. package/lib/sections/languages/selectors.d.ts.map +1 -0
  152. package/lib/sections/languages/selectors.js +146 -0
  153. package/lib/sections/languages/types.d.ts +15 -0
  154. package/lib/sections/languages/types.d.ts.map +1 -0
  155. package/lib/sections/languages/types.js +5 -0
  156. package/lib/sections/projects/ProjectEditDialog.d.ts +7 -0
  157. package/lib/sections/projects/ProjectEditDialog.d.ts.map +1 -0
  158. package/lib/sections/projects/ProjectEditDialog.js +182 -0
  159. package/lib/sections/projects/ProjectSection.d.ts +6 -0
  160. package/lib/sections/projects/ProjectSection.d.ts.map +1 -0
  161. package/lib/sections/projects/ProjectSection.js +220 -0
  162. package/lib/sections/projects/mutations.d.ts +4 -0
  163. package/lib/sections/projects/mutations.d.ts.map +1 -0
  164. package/lib/sections/projects/mutations.js +188 -0
  165. package/lib/sections/projects/selectors.d.ts +5 -0
  166. package/lib/sections/projects/selectors.d.ts.map +1 -0
  167. package/lib/sections/projects/selectors.js +163 -0
  168. package/lib/sections/projects/types.d.ts +28 -0
  169. package/lib/sections/projects/types.d.ts.map +1 -0
  170. package/lib/sections/projects/types.js +8 -0
  171. package/lib/sections/resume/ResumeEditDialog.d.ts +7 -0
  172. package/lib/sections/resume/ResumeEditDialog.d.ts.map +1 -0
  173. package/lib/sections/resume/ResumeEditDialog.js +629 -0
  174. package/lib/sections/resume/ResumeSection.d.ts +7 -0
  175. package/lib/sections/resume/ResumeSection.d.ts.map +1 -0
  176. package/lib/sections/resume/ResumeSection.js +160 -0
  177. package/lib/sections/resume/mutations.d.ts +6 -0
  178. package/lib/sections/resume/mutations.d.ts.map +1 -0
  179. package/lib/sections/resume/mutations.js +172 -0
  180. package/lib/sections/resume/selectors.d.ts +4 -0
  181. package/lib/sections/resume/selectors.d.ts.map +1 -0
  182. package/lib/sections/resume/selectors.js +142 -0
  183. package/lib/sections/resume/types.d.ts +33 -0
  184. package/lib/sections/resume/types.d.ts.map +1 -0
  185. package/lib/sections/resume/types.js +8 -0
  186. package/lib/sections/shared/collapsibleSection.d.ts +2 -0
  187. package/lib/sections/shared/collapsibleSection.d.ts.map +1 -0
  188. package/lib/sections/shared/collapsibleSection.js +24 -0
  189. package/lib/sections/shared/contactTypeUtils.d.ts +7 -0
  190. package/lib/sections/shared/contactTypeUtils.d.ts.map +1 -0
  191. package/lib/sections/shared/contactTypeUtils.js +48 -0
  192. package/lib/sections/shared/idNodeFactory.d.ts +3 -0
  193. package/lib/sections/shared/idNodeFactory.d.ts.map +1 -0
  194. package/lib/sections/shared/idNodeFactory.js +14 -0
  195. package/lib/sections/shared/phoneCountries.d.ts +20 -0
  196. package/lib/sections/shared/phoneCountries.d.ts.map +1 -0
  197. package/lib/sections/shared/phoneCountries.js +1080 -0
  198. package/lib/sections/shared/rdfList.d.ts +3 -0
  199. package/lib/sections/shared/rdfList.d.ts.map +1 -0
  200. package/lib/sections/shared/rdfList.js +34 -0
  201. package/lib/sections/shared/rdfMutationHelpers.d.ts +12 -0
  202. package/lib/sections/shared/rdfMutationHelpers.d.ts.map +1 -0
  203. package/lib/sections/shared/rdfMutationHelpers.js +82 -0
  204. package/lib/sections/shared/rowState.d.ts +21 -0
  205. package/lib/sections/shared/rowState.d.ts.map +1 -0
  206. package/lib/sections/shared/rowState.js +52 -0
  207. package/lib/sections/shared/sanitizeUtils.d.ts +5 -0
  208. package/lib/sections/shared/sanitizeUtils.d.ts.map +1 -0
  209. package/lib/sections/shared/sanitizeUtils.js +22 -0
  210. package/lib/sections/shared/sectionCardHelpers.d.ts +11 -0
  211. package/lib/sections/shared/sectionCardHelpers.d.ts.map +1 -0
  212. package/lib/sections/shared/sectionCardHelpers.js +105 -0
  213. package/lib/sections/shared/types.d.ts +7 -0
  214. package/lib/sections/shared/types.d.ts.map +1 -0
  215. package/lib/sections/shared/types.js +5 -0
  216. package/lib/sections/skills/SkillsEditDialog.d.ts +7 -0
  217. package/lib/sections/skills/SkillsEditDialog.d.ts.map +1 -0
  218. package/lib/sections/skills/SkillsEditDialog.js +340 -0
  219. package/lib/sections/skills/SkillsSection.d.ts +5 -0
  220. package/lib/sections/skills/SkillsSection.d.ts.map +1 -0
  221. package/lib/sections/skills/SkillsSection.js +169 -0
  222. package/lib/sections/skills/mutations.d.ts +6 -0
  223. package/lib/sections/skills/mutations.d.ts.map +1 -0
  224. package/lib/sections/skills/mutations.js +110 -0
  225. package/lib/sections/skills/selectors.d.ts +6 -0
  226. package/lib/sections/skills/selectors.d.ts.map +1 -0
  227. package/lib/sections/skills/selectors.js +37 -0
  228. package/lib/sections/skills/types.d.ts +14 -0
  229. package/lib/sections/skills/types.d.ts.map +1 -0
  230. package/lib/sections/skills/types.js +5 -0
  231. package/lib/sections/social/SocialEditDialog.d.ts +7 -0
  232. package/lib/sections/social/SocialEditDialog.d.ts.map +1 -0
  233. package/lib/sections/social/SocialEditDialog.js +362 -0
  234. package/lib/sections/social/SocialSection.d.ts +8 -0
  235. package/lib/sections/social/SocialSection.d.ts.map +1 -0
  236. package/lib/sections/social/SocialSection.js +201 -0
  237. package/lib/sections/social/constants.d.ts +3 -0
  238. package/lib/sections/social/constants.d.ts.map +1 -0
  239. package/lib/sections/social/constants.js +16 -0
  240. package/lib/sections/social/helpers.d.ts +15 -0
  241. package/lib/sections/social/helpers.d.ts.map +1 -0
  242. package/lib/sections/social/helpers.js +316 -0
  243. package/lib/sections/social/mutations.d.ts +4 -0
  244. package/lib/sections/social/mutations.d.ts.map +1 -0
  245. package/lib/sections/social/mutations.js +298 -0
  246. package/lib/sections/social/selectors.d.ts +4 -0
  247. package/lib/sections/social/selectors.d.ts.map +1 -0
  248. package/lib/sections/social/selectors.js +43 -0
  249. package/lib/sections/social/types.d.ts +19 -0
  250. package/lib/sections/social/types.d.ts.map +1 -0
  251. package/lib/sections/social/types.js +5 -0
  252. package/lib/styles/BioSection.css +77 -0
  253. package/lib/styles/CVCard.css +107 -2
  254. package/lib/styles/ContactInfoEditDialog.css +153 -0
  255. package/lib/styles/EditDialogs.css +1028 -0
  256. package/lib/styles/EducationCard.css +103 -0
  257. package/lib/styles/HeadingSection.css +309 -0
  258. package/lib/styles/ProfileCard.css +10 -42
  259. package/lib/styles/ProfileView.css +53 -8
  260. package/lib/styles/ProjectsCard.css +206 -0
  261. package/lib/styles/QRCodeCard.css +29 -10
  262. package/lib/styles/SocialCard.css +41 -13
  263. package/lib/styles/dialog.css +209 -0
  264. package/lib/styles/utilities.css +638 -256
  265. package/lib/textUtils.d.ts +6 -0
  266. package/lib/textUtils.d.ts.map +1 -0
  267. package/lib/textUtils.js +44 -0
  268. package/lib/texts.d.ts +45 -4
  269. package/lib/texts.d.ts.map +1 -1
  270. package/lib/texts.js +46 -5
  271. package/lib/types.d.ts +2 -0
  272. package/lib/types.d.ts.map +1 -0
  273. package/lib/types.js +5 -0
  274. package/lib/ui/dialog.d.ts +29 -0
  275. package/lib/ui/dialog.d.ts.map +1 -0
  276. package/lib/ui/dialog.js +269 -0
  277. package/lib/ui/errors.d.ts +2 -0
  278. package/lib/ui/errors.d.ts.map +1 -0
  279. package/lib/ui/errors.js +10 -0
  280. package/package.json +8 -6
  281. package/lib/CVCard.d.ts +0 -4
  282. package/lib/CVCard.d.ts.map +0 -1
  283. package/lib/CVCard.js +0 -114
  284. package/lib/CVPresenter.d.ts +0 -25
  285. package/lib/CVPresenter.d.ts.map +0 -1
  286. package/lib/CVPresenter.js +0 -119
  287. package/lib/FriendList.d.ts +0 -6
  288. package/lib/FriendList.d.ts.map +0 -1
  289. package/lib/FriendList.js +0 -27
  290. package/lib/ProfileCard.d.ts +0 -6
  291. package/lib/ProfileCard.d.ts.map +0 -1
  292. package/lib/ProfileCard.js +0 -62
  293. package/lib/SocialCard.d.ts +0 -5
  294. package/lib/SocialCard.d.ts.map +0 -1
  295. package/lib/SocialCard.js +0 -51
  296. package/lib/SocialPresenter.d.ts +0 -11
  297. package/lib/SocialPresenter.d.ts.map +0 -1
  298. package/lib/SocialPresenter.js +0 -117
  299. package/lib/StuffCard.d.ts +0 -10
  300. package/lib/StuffCard.d.ts.map +0 -1
  301. package/lib/StuffCard.js +0 -52
  302. package/lib/StuffPresenter.d.ts +0 -14
  303. package/lib/StuffPresenter.d.ts.map +0 -1
  304. package/lib/StuffPresenter.js +0 -53
  305. package/lib/presenter.d.ts +0 -14
  306. package/lib/presenter.d.ts.map +0 -1
  307. package/lib/presenter.js +0 -68
  308. package/lib/styles/FriendList.css +0 -12
  309. package/lib/styles/StuffCard.css +0 -23
  310. package/lib/styles/editProfile.css +0 -62
  311. package/lib/styles/profileRDFFormsEnforced.css +0 -427
@@ -0,0 +1,629 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.createResumeEditDialog = createResumeEditDialog;
7
+ var _dialog = require("../../ui/dialog");
8
+ var _litHtml = require("lit-html");
9
+ require("../../styles/EditDialogs.css");
10
+ require("../../styles/ContactInfoEditDialog.css");
11
+ var _rdflib = require("rdflib");
12
+ var _mutations = require("./mutations");
13
+ var _rowState = require("../shared/rowState");
14
+ var _textUtils = require("../../textUtils");
15
+ var _profileIcons = require("../../icons-svg/profileIcons");
16
+ var _texts = require("../../texts");
17
+ function sanitizeResumeFieldValue(value) {
18
+ return (0, _textUtils.sanitizeTextValue)(value);
19
+ }
20
+ function parseYearMonthFromDateText(dateText) {
21
+ const normalized = (dateText || '').trim();
22
+ if (!normalized) return {
23
+ year: '',
24
+ month: ''
25
+ };
26
+ const isoYearMonth = normalized.match(/^(\d{4})-(\d{2})/);
27
+ if (isoYearMonth) {
28
+ return {
29
+ year: isoYearMonth[1],
30
+ month: isoYearMonth[2]
31
+ };
32
+ }
33
+ const fallbackYear = normalized.match(/(\d{4})/);
34
+ return {
35
+ year: fallbackYear ? fallbackYear[1] : '',
36
+ month: ''
37
+ };
38
+ }
39
+ function rowHasContent(row) {
40
+ return Boolean(row.isCurrentRole) || [row.title, row.roleType, (0, _textUtils.toText)(row.startDate), (0, _textUtils.toText)(row.endDate), row.orgName, row.orgType, row.orgLocation, row.orgHomePage, row.description].some(_textUtils.hasNonEmptyText);
41
+ }
42
+ function toFormState(resumeData) {
43
+ const roles = (resumeData || []).map(role => ({
44
+ title: sanitizeResumeFieldValue((0, _textUtils.toText)(role.title)),
45
+ roleType: sanitizeResumeFieldValue((0, _textUtils.toText)(role.roleType)),
46
+ startDate: role.startDate,
47
+ endDate: role.endDate,
48
+ isCurrentRole: role.isCurrentRole ?? !role.endDate,
49
+ orgName: sanitizeResumeFieldValue((0, _textUtils.toText)(role.orgName)),
50
+ orgType: sanitizeResumeFieldValue((0, _textUtils.toText)(role.orgType)),
51
+ orgLocation: sanitizeResumeFieldValue((0, _textUtils.toText)(role.orgLocation)),
52
+ orgHomePage: sanitizeResumeFieldValue((0, _textUtils.toText)(role.orgHomePage)),
53
+ description: sanitizeResumeFieldValue((0, _textUtils.toText)(role.description)),
54
+ entryNode: (0, _textUtils.toText)(role.entryNode),
55
+ status: (0, _textUtils.toText)(role.entryNode) ? 'existing' : 'new'
56
+ })).filter(role => rowHasContent(role) || Boolean(role.entryNode));
57
+ return {
58
+ resumeData: roles.length ? roles : [{
59
+ title: '',
60
+ roleType: '',
61
+ startDate: undefined,
62
+ endDate: undefined,
63
+ isCurrentRole: false,
64
+ orgName: '',
65
+ orgType: '',
66
+ orgLocation: '',
67
+ orgHomePage: '',
68
+ description: '',
69
+ entryNode: '',
70
+ status: 'new'
71
+ }]
72
+ };
73
+ }
74
+ function validateResumeBeforeSave(rows) {
75
+ for (let i = 0; i < rows.length; i++) {
76
+ const row = rows[i];
77
+ if (!row || row.status === 'deleted') continue;
78
+ if (!rowHasContent(row)) continue;
79
+ const endDateText = (0, _textUtils.toText)(row.endDate).trim();
80
+ if (!row.isCurrentRole && !endDateText) {
81
+ return {
82
+ ok: false,
83
+ message: `Resume ${i + 1}: End Year is required unless "I am currently working in this role" is selected.`
84
+ };
85
+ }
86
+ }
87
+ return {
88
+ ok: true
89
+ };
90
+ }
91
+ function renderResumeInputRow({
92
+ resumeData,
93
+ index,
94
+ displayIndex,
95
+ onDelete,
96
+ onChange
97
+ }) {
98
+ const resumeRow = resumeData[index];
99
+ const label = `Resume ${displayIndex + 1}`;
100
+ const experienceHeadingId = `resume-experience-heading-${index}`;
101
+ const titleName = `resume-title-${index}`;
102
+ const organizationName = `resume-organization-${index}`;
103
+ const organizationTypeName = `resume-organization-type-${index}`;
104
+ const organizationTypeSelectId = `resume-organization-type-select-${index}`;
105
+ const companyUrlName = `resume-company-url-${index}`;
106
+ const orgLocationName = `resume-org-location-${index}`;
107
+ const descriptionName = `resume-description-${index}`;
108
+ const descriptionCounterId = `resume-description-counter-${index}`;
109
+ const descriptionMaxLength = 2000;
110
+ const descriptionCount = (resumeRow?.description || '').length;
111
+ const startMonthLabel = `Start Month ${displayIndex + 1}`;
112
+ const startMonthInputName = `resume-start-month-${index}`;
113
+ const startMonthSelectId = `resume-start-month-select-${index}`;
114
+ const startYearLabel = `Start Year ${displayIndex + 1}`;
115
+ const startYearInputName = `resume-start-year-${index}`;
116
+ const startYearSelectId = `resume-start-year-select-${index}`;
117
+ const startDateText = (0, _textUtils.toText)(resumeRow?.startDate);
118
+ const startDateParts = parseYearMonthFromDateText(startDateText);
119
+ const startMonthValue = startDateParts.month;
120
+ const startYearText = startDateParts.year;
121
+ const endMonthLabel = `End Month ${displayIndex + 1}`;
122
+ const endMonthInputName = `resume-end-month-${index}`;
123
+ const endMonthSelectId = `resume-end-month-select-${index}`;
124
+ const endDateText = (0, _textUtils.toText)(resumeRow?.endDate);
125
+ const endYearLabel = `End Year ${displayIndex + 1}`;
126
+ const endYearInputName = `resume-end-year-${index}`;
127
+ const endYearSelectId = `resume-end-year-select-${index}`;
128
+ const endDateParts = parseYearMonthFromDateText(endDateText);
129
+ const endMonthValue = endDateParts.month;
130
+ const endYearParsedText = endDateParts.year;
131
+ const isCurrentRoleId = `resume-current-role-${index}`;
132
+ const currentYear = new Date().getFullYear();
133
+ const baseYearOptions = Array.from({
134
+ length: 120
135
+ }, (_, i) => String(currentYear - i));
136
+ const yearOptions = Array.from(new Set([...baseYearOptions, startYearText, endYearParsedText].filter(Boolean))).sort((a, b) => Number(b) - Number(a));
137
+ const monthOptions = [{
138
+ value: '01',
139
+ label: 'January'
140
+ }, {
141
+ value: '02',
142
+ label: 'February'
143
+ }, {
144
+ value: '03',
145
+ label: 'March'
146
+ }, {
147
+ value: '04',
148
+ label: 'April'
149
+ }, {
150
+ value: '05',
151
+ label: 'May'
152
+ }, {
153
+ value: '06',
154
+ label: 'June'
155
+ }, {
156
+ value: '07',
157
+ label: 'July'
158
+ }, {
159
+ value: '08',
160
+ label: 'August'
161
+ }, {
162
+ value: '09',
163
+ label: 'September'
164
+ }, {
165
+ value: '10',
166
+ label: 'October'
167
+ }, {
168
+ value: '11',
169
+ label: 'November'
170
+ }, {
171
+ value: '12',
172
+ label: 'December'
173
+ }];
174
+ const renderMonthOptions = (selectedMonth, emptyLabel = 'Select Month') => (0, _litHtml.html)`
175
+ <option value="" ?selected=${!selectedMonth}>${emptyLabel}</option>
176
+ ${monthOptions.map(month => (0, _litHtml.html)`
177
+ <option value=${month.value} ?selected=${month.value === selectedMonth}>${month.label}</option>
178
+ `)}
179
+ `;
180
+ const renderYearOptions = (selectedYear, emptyLabel = 'Select Year') => (0, _litHtml.html)`
181
+ <option value="" ?selected=${!selectedYear}>${emptyLabel}</option>
182
+ ${yearOptions.map(year => (0, _litHtml.html)`
183
+ <option value=${year} ?selected=${year === selectedYear}>${year}</option>
184
+ `)}
185
+ `;
186
+ const handleResumeInput = field => e => {
187
+ const target = e.target;
188
+ const nextValue = sanitizeResumeFieldValue(target.value);
189
+ if (resumeRow) {
190
+ (0, _rowState.applyRowFieldChange)(resumeRow, field, nextValue, rowHasContent);
191
+ onChange();
192
+ }
193
+ };
194
+ const handleDelete = event => {
195
+ event.preventDefault();
196
+ onDelete();
197
+ };
198
+ const buildDateLiteral = (month, year) => {
199
+ if (!month || !year) return undefined;
200
+ return (0, _rdflib.literal)(`${year}-${month}-01`);
201
+ };
202
+
203
+ /* The following function was generated by AI Model: GPT-5.3-Codex */
204
+ /* Prompt: can you make this a month drop down for the start year */
205
+ const handleStartMonthChange = event => {
206
+ const target = event.target;
207
+ const month = target.value;
208
+ const year = parseYearMonthFromDateText((0, _textUtils.toText)(resumeData[index]?.startDate)).year || String(currentYear);
209
+ const nextStartDate = buildDateLiteral(month, year);
210
+ if (resumeData[index]) {
211
+ (0, _rowState.applyRowFieldChange)(resumeData[index], 'startDate', nextStartDate, rowHasContent);
212
+ onChange();
213
+ }
214
+ };
215
+ const handleStartYearChange = event => {
216
+ const target = event.target;
217
+ const year = target.value;
218
+ const month = parseYearMonthFromDateText((0, _textUtils.toText)(resumeData[index]?.startDate)).month || '01';
219
+ const nextStartDate = buildDateLiteral(month, year);
220
+ if (resumeData[index]) {
221
+ (0, _rowState.applyRowFieldChange)(resumeData[index], 'startDate', nextStartDate, rowHasContent);
222
+ onChange();
223
+ }
224
+ };
225
+ const handleEndMonthChange = event => {
226
+ const target = event.target;
227
+ const month = target.value;
228
+ const year = parseYearMonthFromDateText((0, _textUtils.toText)(resumeData[index]?.endDate)).year || String(currentYear);
229
+ const nextEndDate = buildDateLiteral(month, year);
230
+ if (resumeData[index]) {
231
+ (0, _rowState.applyRowFieldChange)(resumeData[index], 'endDate', nextEndDate, rowHasContent);
232
+ onChange();
233
+ }
234
+ };
235
+ const handleEndYearChange = event => {
236
+ const target = event.target;
237
+ const year = target.value;
238
+ const month = parseYearMonthFromDateText((0, _textUtils.toText)(resumeData[index]?.endDate)).month || '01';
239
+ const nextEndDate = buildDateLiteral(month, year);
240
+ if (resumeData[index]) {
241
+ (0, _rowState.applyRowFieldChange)(resumeData[index], 'endDate', nextEndDate, rowHasContent);
242
+ onChange();
243
+ }
244
+ };
245
+ const handleDescriptionInput = event => {
246
+ const target = event.target;
247
+ const nextValue = sanitizeResumeFieldValue(target.value.slice(0, descriptionMaxLength));
248
+ if (resumeData[index]) {
249
+ (0, _rowState.applyRowFieldChange)(resumeData[index], 'description', nextValue, rowHasContent);
250
+ onChange();
251
+ }
252
+ };
253
+ const handleCurrentRoleToggle = event => {
254
+ const target = event.target;
255
+ if (resumeData[index]) {
256
+ (0, _rowState.applyRowFieldChange)(resumeData[index], 'isCurrentRole', target.checked, rowHasContent);
257
+ if (target.checked) {
258
+ (0, _rowState.applyRowFieldChange)(resumeData[index], 'endDate', undefined, rowHasContent);
259
+ }
260
+ const formRoot = target.form || target.closest('form');
261
+ const endMonthSelect = formRoot?.querySelector(`#${endMonthSelectId}`);
262
+ const endYearSelect = formRoot?.querySelector(`#${endYearSelectId}`);
263
+ if (endMonthSelect) {
264
+ endMonthSelect.disabled = target.checked;
265
+ endMonthSelect.value = '';
266
+ const emptyOption = endMonthSelect.options[0];
267
+ if (emptyOption) {
268
+ emptyOption.text = target.checked ? 'Present' : 'Select Month';
269
+ }
270
+ }
271
+ if (endYearSelect) {
272
+ endYearSelect.disabled = target.checked;
273
+ endYearSelect.value = '';
274
+ const emptyOption = endYearSelect.options[0];
275
+ if (emptyOption) {
276
+ emptyOption.text = target.checked ? '' : 'Select Year';
277
+ }
278
+ }
279
+ }
280
+ };
281
+ const handleOrganizationTypeInput = e => {
282
+ const target = e.target;
283
+ const nextType = target.value;
284
+ if (resumeRow) {
285
+ (0, _rowState.applyRowSelectChange)(resumeRow, 'orgType', nextType);
286
+ onChange();
287
+ }
288
+ };
289
+ return (0, _litHtml.html)`
290
+ <div class="profile-edit-dialog__row profile-edit-dialog__row--resume-entry-header" role="group" aria-labelledby=${experienceHeadingId}>
291
+ <h3 id=${experienceHeadingId} class="profile-edit-dialog__entry-heading">${label}</h3>
292
+ <div class="profile-edit-dialog__actions profile-edit-dialog__actions--edge">
293
+ <button
294
+ type="button"
295
+ class="profile-edit-dialog__delete-button"
296
+ aria-label=${`Delete resume ${displayIndex + 1}`}
297
+ title=${_texts.deleteEntryButtonTitleText}
298
+ @click=${handleDelete}
299
+ >
300
+ <span class="profile-edit-dialog__delete-icon" aria-hidden="true">${_profileIcons.trashIcon}</span>
301
+ </button>
302
+ </div>
303
+ </div>
304
+ <label aria-label=${`${label} Title`} class="label profile-edit-dialog__field">
305
+ Title
306
+ <input
307
+ class="input"
308
+ type="text"
309
+ name=${titleName}
310
+ .value=${resumeRow?.title || ''}
311
+ data-contact-field="title"
312
+ data-entry-node=${resumeRow?.entryNode || ''}
313
+ data-row-status=${resumeRow?.status || 'n/a'}
314
+ placeholder="Title"
315
+ autocomplete="title"
316
+ inputmode="text"
317
+ @change=${handleResumeInput('title')}
318
+ />
319
+ </label>
320
+ <div class="profile-edit-dialog__row">
321
+ <label aria-label=${`${label} Organization Name`} class="label profile-edit-dialog__field">
322
+ Company or Organization
323
+ <input
324
+ class="input"
325
+ type="text"
326
+ name=${organizationName}
327
+ .value=${resumeRow?.orgName || ''}
328
+ required
329
+ data-contact-field="organizationName"
330
+ data-entry-node=${resumeRow?.entryNode || ''}
331
+ data-row-status=${resumeRow?.status || 'n/a'}
332
+ placeholder="Company or Organization"
333
+ autocomplete="organization"
334
+ inputmode="text"
335
+ @change=${handleResumeInput('orgName')}
336
+ />
337
+ </label>
338
+ <label aria-label=${`${label} Organization Type`} class="label profile-edit-dialog__field">
339
+ Organization Type
340
+ <select name=${organizationTypeName} id=${organizationTypeSelectId} @change=${handleOrganizationTypeInput} .value=${resumeRow?.orgType || ''}>
341
+ <option value="Corporation">Corporation</option>
342
+ <option value="EducationalOrganization">Educational Organization</option>
343
+ <option value="ResearchOrganization">Research Organization</option>
344
+ <option value="GovernmentOrganization">Government Organization</option>
345
+ <option value="NGO">NGO</option>
346
+ <option value="PerformingGroup">Performing Group</option>
347
+ <option value="Project">Project</option>
348
+ <option value="SportsOrganization">Sports Organization</option>
349
+ <option value="Other">Other</option>
350
+ </select>
351
+ </label>
352
+ </div>
353
+ <div class="profile-edit-dialog__row">
354
+ <label aria-label=${`${label} Company URL`} class="label profile-edit-dialog__field">
355
+ Company URL
356
+ <input
357
+ class="input"
358
+ type="text"
359
+ name=${companyUrlName}
360
+ .value=${resumeRow?.orgHomePage || ''}
361
+ data-contact-field="orgHomePage"
362
+ data-entry-node=${resumeRow?.entryNode || ''}
363
+ data-row-status=${resumeRow?.status || 'n/a'}
364
+ placeholder="Company URL"
365
+ autocomplete="url"
366
+ inputmode="text"
367
+ @change=${handleResumeInput('orgHomePage')}
368
+ />
369
+ </label>
370
+ <label aria-label=${`${label} Location`} class="label profile-edit-dialog__field profile-edit-dialog__field--resume-location">
371
+ Location
372
+ <input
373
+ class="input"
374
+ type="text"
375
+ name=${orgLocationName}
376
+ .value=${resumeRow?.orgLocation || ''}
377
+ data-contact-field="orgLocation"
378
+ data-entry-node=${resumeRow?.entryNode || ''}
379
+ data-row-status=${resumeRow?.status || 'n/a'}
380
+ placeholder="Location"
381
+ autocomplete="address-level2"
382
+ inputmode="text"
383
+ @change=${handleResumeInput('orgLocation')}
384
+ />
385
+ </label>
386
+ </div>
387
+ <div class="profile-edit-dialog__row profile-edit-dialog__row--resume-dates">
388
+ <label aria-label=${`Start Date ${displayIndex + 1}`} class="label profile-edit-dialog__field profile-edit-dialog__field--date-group">
389
+ <span>Start Date</span>
390
+ <div class="profile-edit-dialog__date-pair">
391
+ <select name=${startMonthInputName} id=${startMonthSelectId} aria-label=${startMonthLabel} @change=${handleStartMonthChange}>
392
+ ${renderMonthOptions(startMonthValue)}
393
+ </select>
394
+ <select name=${startYearInputName} id=${startYearSelectId} aria-label=${startYearLabel} @change=${handleStartYearChange}>
395
+ ${renderYearOptions(startYearText)}
396
+ </select>
397
+ </div>
398
+ </label>
399
+ <label aria-label=${`End Date ${displayIndex + 1}`} class="label profile-edit-dialog__field profile-edit-dialog__field--date-group">
400
+ <span>End Date</span>
401
+ <div class="profile-edit-dialog__date-pair">
402
+ <select
403
+ name=${endMonthInputName}
404
+ id=${endMonthSelectId}
405
+ aria-label=${endMonthLabel}
406
+ @change=${handleEndMonthChange}
407
+ ?disabled=${Boolean(resumeRow?.isCurrentRole)}
408
+ >
409
+ ${renderMonthOptions(endMonthValue, resumeRow?.isCurrentRole ? 'Present' : 'Select Month')}
410
+ </select>
411
+ <select
412
+ name=${endYearInputName}
413
+ id=${endYearSelectId}
414
+ aria-label=${endYearLabel}
415
+ @change=${handleEndYearChange}
416
+ ?disabled=${Boolean(resumeRow?.isCurrentRole)}
417
+ >
418
+ ${renderYearOptions(endYearParsedText, resumeRow?.isCurrentRole ? '' : 'Select Year')}
419
+ </select>
420
+ </div>
421
+ </label>
422
+ </div>
423
+ <div class="profile-edit-dialog__row profile-edit-dialog__row--inline-end">
424
+ <label class="label profile-edit-dialog__checkbox-label" for=${isCurrentRoleId}>
425
+ <input
426
+ class="profile-edit-dialog__checkbox-input"
427
+ type="checkbox"
428
+ id=${isCurrentRoleId}
429
+ name="isCurrentRole"
430
+ .checked=${Boolean(resumeRow?.isCurrentRole)}
431
+ @change=${handleCurrentRoleToggle}
432
+ />
433
+ <span>I am currently working in this role</span>
434
+ </label>
435
+ </div>
436
+ <label aria-label=${`${label} Description`} class="label profile-edit-dialog__field profile-edit-dialog__field--full profile-edit-dialog__field--stack">
437
+ <span>Description</span>
438
+ <textarea
439
+ class="profile-edit-dialog__textarea"
440
+ name=${descriptionName}
441
+ rows="4"
442
+ .value=${resumeRow?.description || ''}
443
+ maxlength=${descriptionMaxLength}
444
+ aria-describedby=${descriptionCounterId}
445
+ data-contact-field="description"
446
+ data-entry-node=${resumeRow?.entryNode || ''}
447
+ data-row-status=${resumeRow?.status || 'n/a'}
448
+ placeholder="Description"
449
+ autocomplete="off"
450
+ inputmode="text"
451
+ @input=${handleDescriptionInput}
452
+ ></textarea>
453
+ <small id=${descriptionCounterId} aria-live="polite">${descriptionCount}/${descriptionMaxLength}</small>
454
+ </label>
455
+ `;
456
+ }
457
+ function renderResumeSection(resumeData, onAddRow) {
458
+ const visibleResumeRows = resumeData.map((resume, index) => ({
459
+ resume,
460
+ index
461
+ })).filter(({
462
+ resume
463
+ }) => resume.status !== 'deleted');
464
+ return (0, _litHtml.html)`
465
+ <section class="profile-edit-dialog__section profile-edit-dialog__section--resume" aria-label="Resume">
466
+ <fieldset>
467
+ <legend class="sr-only">Resume entries</legend>
468
+ ${visibleResumeRows.map(({
469
+ index
470
+ }, displayIndex) => renderResumeInputRow({
471
+ resumeData,
472
+ index,
473
+ displayIndex,
474
+ onDelete: () => {
475
+ (0, _rowState.deleteRow)(resumeData, index);
476
+ onAddRow();
477
+ },
478
+ onChange: onAddRow
479
+ }))}
480
+ </fieldset>
481
+ </section>
482
+ `;
483
+ }
484
+ function renderResumeEditTemplate(form, formState, rerender, viewerMode) {
485
+ (0, _litHtml.render)((0, _litHtml.html)`
486
+ ${renderResumeSection(formState.resumeData, rerender)}
487
+ ${viewerMode !== 'owner' ? (0, _litHtml.html)`<p class="profile-edit-dialog__login-message">${_texts.ownerLoginRequiredDialogMessageText}</p>` : null}
488
+ `, form);
489
+ }
490
+ function captureResumeDialogRenderState(form) {
491
+ const dialog = form.closest('dialog');
492
+ const description = dialog?.querySelector('#modal-desc');
493
+ const activeElement = form.ownerDocument.activeElement;
494
+ return {
495
+ dialogScrollTop: dialog?.scrollTop || 0,
496
+ descriptionScrollTop: description?.scrollTop || 0,
497
+ activeId: activeElement?.id || '',
498
+ activeName: activeElement?.getAttribute('name') || ''
499
+ };
500
+ }
501
+ function restoreResumeDialogRenderState(form, state) {
502
+ const dialog = form.closest('dialog');
503
+ const description = dialog?.querySelector('#modal-desc');
504
+ if (dialog) dialog.scrollTop = state.dialogScrollTop;
505
+ if (description) description.scrollTop = state.descriptionScrollTop;
506
+ const escapedId = state.activeId && typeof CSS !== 'undefined' && typeof CSS.escape === 'function' ? CSS.escape(state.activeId) : state.activeId;
507
+ const escapedName = state.activeName && typeof CSS !== 'undefined' && typeof CSS.escape === 'function' ? CSS.escape(state.activeName) : state.activeName;
508
+ let nextActive = null;
509
+ if (escapedId) {
510
+ nextActive = form.querySelector(`#${escapedId}`);
511
+ }
512
+ if (!nextActive && escapedName) {
513
+ nextActive = form.querySelector(`[name="${escapedName}"]`);
514
+ }
515
+ if (nextActive && typeof nextActive.focus === 'function') {
516
+ nextActive.focus({
517
+ preventScroll: true
518
+ });
519
+ }
520
+ }
521
+ function focusResumeField(form, selector) {
522
+ const nextField = form.querySelector(selector);
523
+ if (!nextField || typeof nextField.focus !== 'function') return;
524
+ nextField.focus({
525
+ preventScroll: true
526
+ });
527
+ if (nextField instanceof HTMLInputElement || nextField instanceof HTMLTextAreaElement) {
528
+ nextField.select();
529
+ }
530
+ }
531
+ function createResumeEditForm(resumeData, viewerMode) {
532
+ const form = document.createElement('form');
533
+ form.classList.add('profile__edit-form');
534
+ form.classList.add('profile__edit-form--resume');
535
+ const formState = toFormState(resumeData);
536
+ const rerender = (options = {}) => {
537
+ const {
538
+ preserveState = true,
539
+ focusSelector
540
+ } = options;
541
+ const renderState = preserveState ? captureResumeDialogRenderState(form) : null;
542
+ renderResumeEditTemplate(form, formState, rerender, viewerMode);
543
+ if (renderState) {
544
+ restoreResumeDialogRenderState(form, renderState);
545
+ }
546
+ if (focusSelector) {
547
+ focusResumeField(form, focusSelector);
548
+ }
549
+ };
550
+ rerender();
551
+ const addRow = () => {
552
+ formState.resumeData.unshift({
553
+ title: '',
554
+ roleType: '',
555
+ startDate: undefined,
556
+ endDate: undefined,
557
+ isCurrentRole: false,
558
+ orgName: '',
559
+ orgType: '',
560
+ orgLocation: '',
561
+ orgHomePage: '',
562
+ description: '',
563
+ entryNode: '',
564
+ status: 'new'
565
+ });
566
+ rerender({
567
+ preserveState: false,
568
+ focusSelector: '[name="resume-title-0"]'
569
+ });
570
+ };
571
+ return {
572
+ form,
573
+ formState,
574
+ rerender,
575
+ addRow
576
+ };
577
+ }
578
+ async function createResumeEditDialog(event, store, subject, resumeData, viewerMode, onSaved) {
579
+ const dom = event.currentTarget?.ownerDocument || document;
580
+ const {
581
+ form,
582
+ formState,
583
+ rerender,
584
+ addRow
585
+ } = createResumeEditForm(resumeData, viewerMode);
586
+ const result = await (0, _dialog.openInputDialog)({
587
+ title: _texts.editResumeDialogTitleText,
588
+ dom,
589
+ form,
590
+ headerAction: {
591
+ type: 'button',
592
+ label: '+ Add More',
593
+ ariaLabel: 'Add another resume entry',
594
+ onClick: addRow
595
+ },
596
+ submitLabel: _texts.dialogSubmitLabelText,
597
+ cancelLabel: _texts.dialogCancelLabelText,
598
+ validate: async () => {
599
+ if (viewerMode !== 'owner') {
600
+ return _texts.ownerLoginRequiredDialogMessageText;
601
+ }
602
+ const plan = (0, _rowState.summarizeRowOps)(formState.resumeData, rowHasContent);
603
+ const hasChanges = plan.create.length > 0 || plan.update.length > 0 || plan.remove.length > 0;
604
+ if (!hasChanges) {
605
+ return 'No resume changes detected.';
606
+ }
607
+ const validation = validateResumeBeforeSave(formState.resumeData);
608
+ if (!validation.ok) {
609
+ return validation.message || 'Please complete the required resume fields.';
610
+ }
611
+ return null;
612
+ },
613
+ onSave: async () => {
614
+ const plan = (0, _rowState.summarizeRowOps)(formState.resumeData, rowHasContent);
615
+ await (0, _mutations.processResumeMutations)(store, subject, plan);
616
+ rerender();
617
+ },
618
+ formatSaveError: error => {
619
+ const message = error instanceof Error ? error.message : String(error);
620
+ return `${_texts.saveResumeUpdatesFailedPrefixText} ${message}`;
621
+ }
622
+ });
623
+ if (!result) return;
624
+ if (onSaved) {
625
+ await onSaved();
626
+ return;
627
+ }
628
+ await (0, _dialog.alertDialog)('Resume updates saved. Refresh to see latest values.', 'Saved', dom);
629
+ }
@@ -0,0 +1,7 @@
1
+ import { RoleDetails } from './types';
2
+ import { ViewerMode } from '../../types';
3
+ import '../../styles/CVCard.css';
4
+ import { LiveStore, NamedNode } from 'rdflib';
5
+ export declare const CVCard: (cvData: RoleDetails[], viewerMode: ViewerMode) => import("lit-html").TemplateResult<1>;
6
+ export declare function renderCVSection(store: LiveStore, subject: NamedNode, roles: RoleDetails[], viewerMode: ViewerMode, onSaved?: () => Promise<void> | void): import("lit-html").TemplateResult<1> | "";
7
+ //# sourceMappingURL=ResumeSection.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ResumeSection.d.ts","sourceRoot":"","sources":["../../../src/sections/resume/ResumeSection.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAE,MAAM,SAAS,CAAA;AACrC,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAA;AACxC,OAAO,yBAAyB,CAAA;AAEhC,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,QAAQ,CAAA;AA6D7C,eAAO,MAAM,MAAM,GACjB,QAAQ,WAAW,EAAE,EACrB,YAAY,UAAU,yCAevB,CAAA;AA+GD,wBAAgB,eAAe,CAC7B,KAAK,EAAE,SAAS,EAChB,OAAO,EAAE,SAAS,EAClB,KAAK,EAAE,WAAW,EAAE,EACpB,UAAU,EAAE,UAAU,EACtB,OAAO,CAAC,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,6CAarC"}