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
@@ -1,7 +1,31 @@
1
+ import { LiveStore, NamedNode, st } from 'rdflib';
1
2
  export type RowStatus = 'existing' | 'new' | 'modified' | 'deleted';
2
3
  export type MutationOps<T> = {
3
4
  create: T[];
4
5
  update: T[];
5
6
  remove: T[];
6
7
  };
8
+ export type RdfStatement = ReturnType<typeof st>;
9
+ export type PrefixCapable = {
10
+ namespaces?: Record<string, string>;
11
+ setPrefixForURI?: (prefix: string, uri: string) => void;
12
+ };
13
+ export type UpdateCallback = (_uri: string, ok: boolean, message?: string) => void;
14
+ export type DavUpdateCallback = (_uri: string, ok: boolean, body?: string) => void;
15
+ export type RdfUpdater = PrefixCapable & {
16
+ update?: (deletions: RdfStatement[], insertions: RdfStatement[], callback: UpdateCallback) => void;
17
+ updateDav?: (doc: NamedNode, deletions: RdfStatement[], insertions: RdfStatement[], callback: DavUpdateCallback) => void;
18
+ serialize?: (docUri: string, statements: RdfStatement[], contentType: string) => string;
19
+ store?: PrefixCapable;
20
+ };
21
+ export type WebOperationResponse = {
22
+ ok?: boolean;
23
+ status?: number;
24
+ responseText?: string;
25
+ };
26
+ export type RdfFetcher = {
27
+ load?: (doc: NamedNode) => Promise<unknown>;
28
+ webOperation?: (...args: unknown[]) => Promise<WebOperationResponse>;
29
+ };
30
+ export type MutationCapableStore = LiveStore;
7
31
  //# sourceMappingURL=types.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/sections/shared/types.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,SAAS,GAAG,UAAU,GAAG,KAAK,GAAG,UAAU,GAAG,SAAS,CAAA;AAEnE,MAAM,MAAM,WAAW,CAAC,CAAC,IAAI;IAC3B,MAAM,EAAE,CAAC,EAAE,CAAA;IACX,MAAM,EAAE,CAAC,EAAE,CAAA;IACX,MAAM,EAAE,CAAC,EAAE,CAAA;CACZ,CAAA"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/sections/shared/types.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAA;AAEjD,MAAM,MAAM,SAAS,GAAG,UAAU,GAAG,KAAK,GAAG,UAAU,GAAG,SAAS,CAAA;AAEnE,MAAM,MAAM,WAAW,CAAC,CAAC,IAAI;IAC3B,MAAM,EAAE,CAAC,EAAE,CAAA;IACX,MAAM,EAAE,CAAC,EAAE,CAAA;IACX,MAAM,EAAE,CAAC,EAAE,CAAA;CACZ,CAAA;AAED,MAAM,MAAM,YAAY,GAAG,UAAU,CAAC,OAAO,EAAE,CAAC,CAAA;AAEhD,MAAM,MAAM,aAAa,GAAG;IAC1B,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IACnC,eAAe,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,KAAK,IAAI,CAAA;CACxD,CAAA;AAED,MAAM,MAAM,cAAc,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,OAAO,EAAE,OAAO,CAAC,EAAE,MAAM,KAAK,IAAI,CAAA;AAElF,MAAM,MAAM,iBAAiB,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,OAAO,EAAE,IAAI,CAAC,EAAE,MAAM,KAAK,IAAI,CAAA;AAElF,MAAM,MAAM,UAAU,GAAG,aAAa,GAAG;IACvC,MAAM,CAAC,EAAE,CAAC,SAAS,EAAE,YAAY,EAAE,EAAE,UAAU,EAAE,YAAY,EAAE,EAAE,QAAQ,EAAE,cAAc,KAAK,IAAI,CAAA;IAClG,SAAS,CAAC,EAAE,CAAC,GAAG,EAAE,SAAS,EAAE,SAAS,EAAE,YAAY,EAAE,EAAE,UAAU,EAAE,YAAY,EAAE,EAAE,QAAQ,EAAE,iBAAiB,KAAK,IAAI,CAAA;IACxH,SAAS,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,YAAY,EAAE,EAAE,WAAW,EAAE,MAAM,KAAK,MAAM,CAAA;IACvF,KAAK,CAAC,EAAE,aAAa,CAAA;CACtB,CAAA;AAED,MAAM,MAAM,oBAAoB,GAAG;IACjC,EAAE,CAAC,EAAE,OAAO,CAAA;IACZ,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,YAAY,CAAC,EAAE,MAAM,CAAA;CACtB,CAAA;AAED,MAAM,MAAM,UAAU,GAAG;IACvB,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,SAAS,KAAK,OAAO,CAAC,OAAO,CAAC,CAAA;IAC3C,YAAY,CAAC,EAAE,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,OAAO,CAAC,oBAAoB,CAAC,CAAA;CACrE,CAAA;AAED,MAAM,MAAM,oBAAoB,GAAG,SAAS,CAAA"}
@@ -1,6 +1,8 @@
1
+ import 'solid-ui/components/actions/button';
2
+ import 'solid-ui/components/forms/combobox';
1
3
  import { SkillDetails } from './types';
2
4
  import '../../styles/EditDialogs.css';
3
- import '../../styles/ContactInfoEditDialog.css';
5
+ import '../contactInfo/ContactInfoEditDialog.css';
4
6
  import { LiveStore, NamedNode } from 'rdflib';
5
7
  import { ViewerMode } from '../../types';
6
8
  export declare function createSkillsEditDialog(event: Event, store: LiveStore, subject: NamedNode, skills: SkillDetails[], viewerMode: ViewerMode, onSaved?: () => Promise<void> | void): Promise<void>;
@@ -1 +1 @@
1
- {"version":3,"file":"SkillsEditDialog.d.ts","sourceRoot":"","sources":["../../../src/sections/skills/SkillsEditDialog.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,YAAY,EAAY,MAAM,SAAS,CAAA;AAChD,OAAO,8BAA8B,CAAA;AACrC,OAAO,wCAAwC,CAAA;AAC/C,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,QAAQ,CAAA;AAC7C,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAA;AAmXxC,wBAAsB,sBAAsB,CAC1C,KAAK,EAAE,KAAK,EACZ,KAAK,EAAE,SAAS,EAChB,OAAO,EAAE,SAAS,EAClB,MAAM,EAAE,YAAY,EAAE,EACtB,UAAU,EAAE,UAAU,EACtB,OAAO,CAAC,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,iBA2CrC"}
1
+ {"version":3,"file":"SkillsEditDialog.d.ts","sourceRoot":"","sources":["../../../src/sections/skills/SkillsEditDialog.ts"],"names":[],"mappings":"AAEA,OAAO,oCAAoC,CAAA;AAC3C,OAAO,oCAAoC,CAAA;AAC3C,OAAO,EAAE,YAAY,EAAY,MAAM,SAAS,CAAA;AAChD,OAAO,8BAA8B,CAAA;AACrC,OAAO,0CAA0C,CAAA;AACjD,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,QAAQ,CAAA;AAC7C,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAA;AA8YxC,wBAAsB,sBAAsB,CAC1C,KAAK,EAAE,KAAK,EACZ,KAAK,EAAE,SAAS,EAChB,OAAO,EAAE,SAAS,EAClB,MAAM,EAAE,YAAY,EAAE,EACtB,UAAU,EAAE,UAAU,EACtB,OAAO,CAAC,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,iBAkDrC"}
@@ -6,20 +6,23 @@ Object.defineProperty(exports, "__esModule", {
6
6
  exports.createSkillsEditDialog = createSkillsEditDialog;
7
7
  var _dialog = require("../../ui/dialog");
8
8
  var _litHtml = require("lit-html");
9
+ require("solid-ui/components/actions/button");
10
+ require("solid-ui/components/forms/combobox");
9
11
  require("../../styles/EditDialogs.css");
10
- require("../../styles/ContactInfoEditDialog.css");
12
+ require("../contactInfo/ContactInfoEditDialog.css");
11
13
  var _rowState = require("../shared/rowState");
12
14
  var _textUtils = require("../../textUtils");
13
15
  var _mutations = require("./mutations");
14
16
  var _profileIcons = require("../../icons-svg/profileIcons");
15
17
  var _texts = require("../../texts");
16
- const ESCO_SKILL_SEARCH_URI = 'https://ec.europa.eu/esco/api/search?language=$(language)&limit=$(limit)&type=skill&text=$(name)';
18
+ const ESCO_SKILL_SEARCH_URI = 'https://ec.europa.eu/esco/api/search?language=$(language)&limit=$(limit)&type=skill&text=$(name)&selectedVersion=v1.2.0';
17
19
  const ESCO_SEARCH_LANGUAGE = 'en';
18
20
  const ESCO_SEARCH_LIMIT = 8;
19
21
  const ESCO_SKILL_BASE_URI = 'http://data.europa.eu/esco/skill/';
20
22
  function normalizeSkillPublicId(value) {
21
23
  const normalized = sanitizeSkillFieldValue(value);
22
24
  if (!normalized) return '';
25
+ if (normalized.startsWith('_:')) return normalized;
23
26
  if (normalized.startsWith('skill:')) return normalized;
24
27
  if (normalized.startsWith(ESCO_SKILL_BASE_URI)) {
25
28
  const suffix = normalized.slice(ESCO_SKILL_BASE_URI.length);
@@ -48,10 +51,10 @@ async function fetchEscoSkillSuggestions(name) {
48
51
  const seen = new Set();
49
52
  return results.map(result => {
50
53
  const label = sanitizeSkillFieldValue(toSkillLabel(result));
51
- const uri = typeof result?.uri === 'string' ? result.uri : '';
54
+ const publicId = normalizeSkillPublicId(typeof result?.uri === 'string' ? result.uri : '');
52
55
  return {
53
56
  label,
54
- uri
57
+ publicId
55
58
  };
56
59
  }).filter(suggestion => {
57
60
  if (!suggestion.label) return false;
@@ -86,74 +89,130 @@ function toFormState(details) {
86
89
  }]
87
90
  };
88
91
  }
89
- function matchSkillSuggestion(suggestions, value) {
90
- const normalized = sanitizeSkillFieldValue(value).toLowerCase();
91
- if (!normalized) return null;
92
- return suggestions.find(suggestion => suggestion.label.toLowerCase() === normalized) || null;
92
+ function toSkillComboboxOption(suggestion) {
93
+ return {
94
+ label: suggestion.label,
95
+ value: suggestion.publicId,
96
+ publicId: suggestion.publicId
97
+ };
93
98
  }
94
- function validateSkillsBeforeSave(rows) {
95
- const ops = (0, _rowState.summarizeRowOps)(rows, rowHasContent);
96
- const hasChanges = ops.create.length > 0 || ops.update.length > 0 || ops.remove.length > 0;
97
- if (!hasChanges) return 'No skill changes detected.';
98
- for (let i = 0; i < rows.length; i++) {
99
- const row = rows[i];
100
- if (!row || row.status === 'deleted') continue;
101
- if (!(0, _textUtils.hasNonEmptyText)(row.name)) continue;
102
- if (row.status !== 'existing' && !(0, _textUtils.hasNonEmptyText)(row.publicId)) {
103
- return `Skill ${i + 1}: please select a skill from the ESCO suggestions.`;
104
- }
99
+ function readSkillComboboxInputValue(event) {
100
+ const customEvent = event;
101
+ if (typeof customEvent.detail?.value === 'string') {
102
+ return customEvent.detail.value;
103
+ }
104
+ const target = event.target;
105
+ return typeof target?.value === 'string' ? target.value : '';
106
+ }
107
+ function readSkillComboboxChange(event) {
108
+ const customEvent = event;
109
+ if (customEvent.detail?.option) {
110
+ return customEvent.detail.option;
105
111
  }
106
112
  return null;
107
113
  }
108
- function hasInvalidSkillSelection(rows) {
109
- return rows.some(row => {
110
- if (!row || row.status === 'deleted') return false;
111
- if (!(0, _textUtils.hasNonEmptyText)(row.name)) return false;
112
- return !(0, _textUtils.hasNonEmptyText)(row.publicId);
114
+ function createSkillSuggestionProvider() {
115
+ return async query => {
116
+ const suggestions = await fetchEscoSkillSuggestions(query);
117
+ return suggestions.map(toSkillComboboxOption);
118
+ };
119
+ }
120
+ function initializeSkillComboboxes(form, rows) {
121
+ const comboboxElements = form.querySelectorAll('solid-ui-combobox[data-skill-row-index]');
122
+ comboboxElements.forEach(comboboxElement => {
123
+ const rowIndex = Number(comboboxElement.dataset.skillRowIndex);
124
+ if (Number.isNaN(rowIndex)) return;
125
+ const row = rows[rowIndex];
126
+ const nextInputValue = row?.name || '';
127
+ const options = row?.publicId && row?.name ? [{
128
+ label: row.name,
129
+ value: row.publicId,
130
+ publicId: row.publicId
131
+ }] : [];
132
+ comboboxElement.suggestionProvider = createSkillSuggestionProvider();
133
+ comboboxElement.options = options;
134
+ comboboxElement.value = row?.publicId || '';
135
+ comboboxElement.inputValue = nextInputValue;
136
+ comboboxElement.label = '';
137
+ comboboxElement.placeholder = 'Skill';
138
+ const comboboxInput = comboboxElement.shadowRoot?.querySelector('input');
139
+ if (comboboxInput) {
140
+ comboboxInput.value = nextInputValue;
141
+ }
142
+ });
143
+ }
144
+ function syncSkillRowsFromComboboxes(form, rows) {
145
+ const comboboxElements = form.querySelectorAll('solid-ui-combobox[data-skill-row-index]');
146
+ comboboxElements.forEach(comboboxElement => {
147
+ const rowIndex = Number(comboboxElement.dataset.skillRowIndex);
148
+ if (Number.isNaN(rowIndex) || !rows[rowIndex]) return;
149
+ const comboboxInput = comboboxElement.shadowRoot?.querySelector('input');
150
+ const nextName = sanitizeSkillFieldValue(comboboxInput?.value || comboboxElement.inputValue || '');
151
+ const nextPublicId = normalizeSkillPublicId(comboboxElement.value || '');
152
+ (0, _rowState.applyRowFieldChange)(rows[rowIndex], 'name', nextName, rowHasContent);
153
+ rows[rowIndex].publicId = nextPublicId;
113
154
  });
114
155
  }
156
+ function validateSkillsBeforeSave(_rows) {
157
+ return null;
158
+ }
159
+ function hasInvalidSkillSelection(_rows) {
160
+ return false;
161
+ }
115
162
  function updateSkillsSubmitEnabled(rows) {
116
- const submitButton = document.querySelector('#profile-modal #modal-buttons button.btn-primary');
163
+ const submitButton = (0, _dialog.getSharedDialogSaveButton)(document);
117
164
  if (!submitButton) return;
118
165
  submitButton.disabled = hasInvalidSkillSelection(rows);
119
166
  }
120
167
  function focusSkillField(form, selector) {
121
168
  const nextField = form.querySelector(selector);
122
169
  if (!nextField || typeof nextField.focus !== 'function') return;
123
- nextField.scrollIntoView({
124
- block: 'start',
125
- behavior: 'auto'
126
- });
127
- nextField.focus();
128
- if (nextField instanceof HTMLInputElement || nextField instanceof HTMLTextAreaElement) {
129
- nextField.select();
170
+ if (typeof nextField.scrollIntoView === 'function') {
171
+ nextField.scrollIntoView({
172
+ block: 'start',
173
+ behavior: 'auto'
174
+ });
175
+ }
176
+ const comboboxHost = nextField.tagName === 'SOLID-UI-COMBOBOX' ? nextField : null;
177
+ const comboboxInput = comboboxHost ? comboboxHost.shadowRoot?.querySelector('input') : null;
178
+ const focusTarget = comboboxInput || nextField;
179
+ focusTarget.focus();
180
+ if (focusTarget instanceof HTMLInputElement) {
181
+ const caretPosition = 0;
182
+ focusTarget.setSelectionRange(caretPosition, caretPosition);
183
+ focusTarget.scrollLeft = 0;
184
+ requestAnimationFrame(() => {
185
+ focusTarget.scrollLeft = 0;
186
+ });
187
+ }
188
+ if (comboboxHost?._closePopup) {
189
+ requestAnimationFrame(() => {
190
+ comboboxHost._closePopup?.();
191
+ });
130
192
  }
131
193
  }
132
194
  function renderSkillInputRow({
133
195
  rows,
134
196
  index,
135
197
  displayIndex,
136
- onDelete,
137
- onChange,
138
- onSkillSearch,
139
- suggestions
198
+ onDelete
140
199
  }) {
141
- const row = rows[index];
142
200
  const label = `Skill ${displayIndex + 1}`;
143
- const skillName = `skill-${index}`;
144
- const datalistId = `skill-suggestions-${index}`;
145
- const hasSelectionIssue = Boolean(row && row.status !== 'deleted' && (0, _textUtils.hasNonEmptyText)(row.name) && !(0, _textUtils.hasNonEmptyText)(row.publicId));
146
- const handleSkillInput = field => e => {
147
- const target = e.target;
148
- const nextValue = sanitizeSkillFieldValue(target.value);
201
+ const handleSkillInput = _field => e => {
202
+ const nextValue = sanitizeSkillFieldValue(readSkillComboboxInputValue(e));
149
203
  if (rows[index]) {
150
- (0, _rowState.applyRowFieldChange)(rows[index], field, nextValue, rowHasContent);
151
- const matchedSuggestion = matchSkillSuggestion(suggestions, nextValue);
152
- rows[index].publicId = normalizeSkillPublicId(matchedSuggestion?.uri || '');
153
- onSkillSearch(index, nextValue);
154
- onChange();
204
+ (0, _rowState.applyRowFieldChange)(rows[index], 'name', nextValue, rowHasContent);
205
+ rows[index].publicId = '';
206
+ updateSkillsSubmitEnabled(rows);
155
207
  }
156
208
  };
209
+ const handleSkillChange = e => {
210
+ const selectedOption = readSkillComboboxChange(e);
211
+ if (!rows[index] || !selectedOption?.publicId) return;
212
+ (0, _rowState.applyRowFieldChange)(rows[index], 'name', sanitizeSkillFieldValue(selectedOption.label), rowHasContent);
213
+ rows[index].publicId = selectedOption.publicId;
214
+ updateSkillsSubmitEnabled(rows);
215
+ };
157
216
  const handleDelete = event => {
158
217
  event.preventDefault();
159
218
  onDelete();
@@ -161,45 +220,31 @@ function renderSkillInputRow({
161
220
  return (0, _litHtml.html)`
162
221
  <div class="profile-edit-dialog__row profile-edit-dialog__row--full profile-edit-dialog__row--skill">
163
222
  <label aria-label=${`${label} Name`} class="label profile-edit-dialog__field profile-edit-dialog__field--full">
164
- <div class="profile-edit-dialog__input-wrap">
165
- <span class="profile-edit-dialog__search-icon" aria-hidden="true">${_profileIcons.searchIcon}</span>
166
- <input
167
- class="input profile-edit-dialog__input--with-leading-icon"
168
- type="text"
169
- name=${skillName}
170
- .value=${row?.name || ''}
171
- required
172
- data-contact-field="name"
173
- data-entry-node=${row?.entryNode || ''}
174
- data-row-status=${row?.status || 'n/a'}
175
- placeholder="Skill"
176
- autocomplete="off"
177
- list=${datalistId}
178
- inputmode="text"
179
- aria-invalid=${hasSelectionIssue ? 'true' : 'false'}
180
- @input=${handleSkillInput('name')}
181
- />
182
- </div>
183
- <datalist id=${datalistId}>
184
- ${suggestions.map(suggestion => (0, _litHtml.html)`<option value=${suggestion.label}></option>`)}
185
- </datalist>
186
- <small class="profile-edit-dialog__input-help-text">Type to search ESCO and select one suggestion.</small>
223
+ <solid-ui-combobox
224
+ aria-label=${`${label} Name`}
225
+ data-skill-row-index=${String(index)}
226
+ @input=${handleSkillInput('name')}
227
+ @change=${handleSkillChange}
228
+ ></solid-ui-combobox>
229
+ <small class="profile-edit-dialog__input-help-text">Type to search ESCO, or enter your own skill.</small>
187
230
  </label>
188
231
  <div class="profile-edit-dialog__actions profile-edit-dialog__actions--edge">
189
- <button
232
+ <solid-ui-button
190
233
  type="button"
234
+ variant="icon"
235
+ size="md"
191
236
  class="profile-edit-dialog__delete-button"
192
237
  aria-label=${`Delete skill ${displayIndex + 1}`}
193
238
  title=${_texts.deleteEntryButtonTitleText}
194
239
  @click=${handleDelete}
195
240
  >
196
- <span class="profile-edit-dialog__delete-icon" aria-hidden="true">${_profileIcons.trashIcon}</span>
197
- </button>
241
+ <span slot="icon" class="profile-edit-dialog__delete-icon" aria-hidden="true">${_profileIcons.trashIcon}</span>
242
+ </solid-ui-button>
198
243
  </div>
199
244
  </div>
200
245
  `;
201
246
  }
202
- function renderSkillsSection(rows, onAddRow, suggestionByIndex, handleSearch) {
247
+ function renderSkillsSection(rows, onAddRow) {
203
248
  const visibleRows = rows.map((row, index) => ({
204
249
  row,
205
250
  index
@@ -216,12 +261,8 @@ function renderSkillsSection(rows, onAddRow, suggestionByIndex, handleSearch) {
216
261
  rows,
217
262
  index,
218
263
  displayIndex,
219
- onChange: onAddRow,
220
- onSkillSearch: handleSearch,
221
- suggestions: suggestionByIndex[index] || [],
222
264
  onDelete: () => {
223
265
  (0, _rowState.deleteRow)(rows, index);
224
- delete suggestionByIndex[index];
225
266
  onAddRow();
226
267
  }
227
268
  }))}
@@ -230,39 +271,15 @@ function renderSkillsSection(rows, onAddRow, suggestionByIndex, handleSearch) {
230
271
  `;
231
272
  }
232
273
  function renderSkillsEditTemplate(form, formState, viewerMode, options = {}) {
233
- const formStateWithSearch = formState;
234
- const suggestionByIndex = formStateWithSearch.suggestionByIndex || (formStateWithSearch.suggestionByIndex = {});
235
- const searchSeqByIndex = formStateWithSearch.searchSeqByIndex || (formStateWithSearch.searchSeqByIndex = {});
236
- const searchTimerByIndex = formStateWithSearch.searchTimerByIndex || (formStateWithSearch.searchTimerByIndex = {});
237
- const rerender = (nextOptions = {}) => renderSkillsEditTemplate(form, formState, viewerMode, nextOptions);
238
- const handleSearch = (rowIndex, term) => {
239
- if (searchTimerByIndex[rowIndex]) {
240
- clearTimeout(searchTimerByIndex[rowIndex]);
241
- }
242
- const normalized = sanitizeSkillFieldValue(term);
243
- if (normalized.length < 2) {
244
- suggestionByIndex[rowIndex] = [];
245
- rerender();
246
- return;
247
- }
248
- const seq = (searchSeqByIndex[rowIndex] || 0) + 1;
249
- searchSeqByIndex[rowIndex] = seq;
250
- searchTimerByIndex[rowIndex] = setTimeout(async () => {
251
- const suggestions = await fetchEscoSkillSuggestions(normalized);
252
- if (searchSeqByIndex[rowIndex] !== seq) return;
253
- suggestionByIndex[rowIndex] = suggestions;
254
- const row = formState.skills[rowIndex];
255
- if (row) {
256
- const matchedSuggestion = matchSkillSuggestion(suggestions, row.name);
257
- row.publicId = matchedSuggestion ? normalizeSkillPublicId(matchedSuggestion.uri) : row.publicId;
258
- }
259
- rerender();
260
- }, 220);
274
+ const rerender = (nextOptions = {}) => {
275
+ syncSkillRowsFromComboboxes(form, formState.skills);
276
+ renderSkillsEditTemplate(form, formState, viewerMode, nextOptions);
261
277
  };
262
278
  (0, _litHtml.render)((0, _litHtml.html)`
263
- ${renderSkillsSection(formState.skills, rerender, suggestionByIndex, handleSearch)}
279
+ ${renderSkillsSection(formState.skills, rerender)}
264
280
  ${viewerMode !== 'owner' ? (0, _litHtml.html)`<p class="profile-edit-dialog__login-message">${_texts.ownerLoginRequiredDialogMessageText}</p>` : null}
265
281
  `, form);
282
+ initializeSkillComboboxes(form, formState.skills);
266
283
  updateSkillsSubmitEnabled(formState.skills);
267
284
  if (options.focusSelector) {
268
285
  focusSkillField(form, options.focusSelector);
@@ -274,18 +291,15 @@ function createSkillsEditForm(details, viewerMode) {
274
291
  const formState = toFormState(details);
275
292
  renderSkillsEditTemplate(form, formState, viewerMode);
276
293
  const addRow = () => {
294
+ syncSkillRowsFromComboboxes(form, formState.skills);
277
295
  formState.skills.unshift({
278
296
  name: '',
279
297
  publicId: '',
280
298
  entryNode: '',
281
299
  status: 'new'
282
300
  });
283
- const formStateWithSearch = formState;
284
- formStateWithSearch.suggestionByIndex = {};
285
- formStateWithSearch.searchSeqByIndex = {};
286
- formStateWithSearch.searchTimerByIndex = {};
287
301
  renderSkillsEditTemplate(form, formState, viewerMode, {
288
- focusSelector: '[name="skill-0"]'
302
+ focusSelector: '[data-skill-row-index="0"]'
289
303
  });
290
304
  };
291
305
  return {
@@ -305,6 +319,12 @@ async function createSkillsEditDialog(event, store, subject, skills, viewerMode,
305
319
  title: _texts.editSkillsDialogTitleText,
306
320
  dom,
307
321
  form,
322
+ onOpen: () => focusSkillField(form, '[data-skill-row-index="0"]'),
323
+ shouldCloseWithoutSave: () => {
324
+ syncSkillRowsFromComboboxes(form, formState.skills);
325
+ const ops = (0, _rowState.summarizeRowOps)(formState.skills, rowHasContent);
326
+ return ops.create.length === 0 && ops.update.length === 0 && ops.remove.length === 0;
327
+ },
308
328
  headerAction: {
309
329
  type: 'button',
310
330
  label: '+ Add More',
@@ -314,12 +334,14 @@ async function createSkillsEditDialog(event, store, subject, skills, viewerMode,
314
334
  submitLabel: _texts.dialogSubmitLabelText,
315
335
  cancelLabel: _texts.dialogCancelLabelText,
316
336
  validate: () => {
337
+ syncSkillRowsFromComboboxes(form, formState.skills);
317
338
  if (viewerMode !== 'owner') {
318
339
  return _texts.ownerLoginRequiredDialogMessageText;
319
340
  }
320
341
  return validateSkillsBeforeSave(formState.skills);
321
342
  },
322
343
  onSave: async () => {
344
+ syncSkillRowsFromComboboxes(form, formState.skills);
323
345
  const skillOps = (0, _rowState.summarizeRowOps)(formState.skills, rowHasContent);
324
346
  const plan = {
325
347
  create: skillOps.create,
@@ -329,8 +351,7 @@ async function createSkillsEditDialog(event, store, subject, skills, viewerMode,
329
351
  await (0, _mutations.processSkillsMutations)(store, subject, plan);
330
352
  },
331
353
  formatSaveError: error => {
332
- const message = error instanceof Error ? error.message : String(error);
333
- return `${_texts.saveContactUpdatesFailedPrefixText} ${message}`;
354
+ return error instanceof Error ? error.message : _texts.saveSkillsUpdatesFailedMessageText;
334
355
  }
335
356
  });
336
357
  if (!result) return;
@@ -0,0 +1,173 @@
1
+ /* Skills list */
2
+ .skills__list {
3
+ display: flex;
4
+ flex-direction: row;
5
+ flex-wrap: wrap;
6
+ width: 100%;
7
+ max-width: 100%;
8
+ min-width: 0;
9
+ box-sizing: border-box;
10
+ align-items: flex-start;
11
+ list-style: none;
12
+ margin: 0;
13
+ padding: 0;
14
+ gap: var(--spacing-base, 0.5rem);
15
+ }
16
+
17
+ .skills__item,
18
+ .skills__remove-button svg,
19
+ solid-ui-button.skills__remove-button {
20
+ --skills-remove-icon-size: var(--icon-xxs, 1rem);
21
+ }
22
+
23
+ /* Skill chip */
24
+ .skills__item {
25
+ display: inline-flex;
26
+ align-items: center;
27
+ justify-content: flex-start;
28
+ gap: 0.375rem;
29
+ padding: var(--spacing-base, 0.5rem) var(--spacing-2xs, 0.625rem);
30
+ border-radius: var(--border-radius-base, 0.3125rem);
31
+ background: var(--color-surface-chip, var(--gray-100, #F3F4F6));
32
+ width: fit-content;
33
+ max-width: 100%;
34
+ }
35
+
36
+ .skills__item[data-pending='true'] {
37
+ opacity: 0.55;
38
+ }
39
+
40
+ .skills__item-label {
41
+ display: inline;
42
+ color: var(--color-text-strong, var(--slate-900, #0F172B));
43
+ font-size: var(--font-size-sm, 0.875rem);
44
+ font-weight: var(--font-weight-md, 500);
45
+ line-height: 1.2;
46
+ overflow-wrap: anywhere;
47
+ }
48
+
49
+ .skills__item-tail {
50
+ display: inline-flex;
51
+ align-items: center;
52
+ white-space: nowrap;
53
+ }
54
+
55
+ .skills__item-tail::before {
56
+ content: '\00a0';
57
+ }
58
+
59
+ .skills__empty-icon {
60
+ display: inline-flex;
61
+ align-items: center;
62
+ justify-content: center;
63
+ }
64
+
65
+ /* Remove button */
66
+ solid-ui-button.skills__remove-button {
67
+ width: var(--skills-remove-icon-size);
68
+ height: var(--skills-remove-icon-size);
69
+ line-height: 0;
70
+ vertical-align: text-top;
71
+ --button-height-sm: var(--skills-remove-icon-size);
72
+ --button-padding-sm: 0;
73
+ --button-icon-size-sm: var(--skills-remove-icon-size);
74
+ --button-background: transparent;
75
+ --button-border-width: 0;
76
+ --button-border: transparent;
77
+ --button-text: currentColor;
78
+ --button-hover-background: transparent;
79
+ --button-hover-border: transparent;
80
+ --button-hover-text: currentColor;
81
+ }
82
+
83
+ solid-ui-button.skills__remove-button[data-loading='true'] {
84
+ pointer-events: none;
85
+ }
86
+
87
+ .skills__remove-button svg {
88
+ display: block;
89
+ width: var(--skills-remove-icon-size);
90
+ height: var(--skills-remove-icon-size);
91
+ }
92
+
93
+ .profile__section[data-profile-section='skills'] .profile-section-inline-error {
94
+ margin-top: var(--spacing-sm, 0.938rem);
95
+ padding: var(--spacing-xs, 0.75rem);
96
+ border: 1px solid var(--dialog-error-border, var(--pink-700, #ff98b3));
97
+ border-radius: var(--border-radius-base, 0.3125rem);
98
+ background: var(--dialog-error-background, var(--pink-500, #ffdde6));
99
+ color: var(--dialog-error-text, var(--red-600, #B00020));
100
+ text-align: left;
101
+ white-space: pre-wrap;
102
+ overflow-wrap: anywhere;
103
+ }
104
+
105
+ :is(.profile-pane-host, .profile-pane-root)[data-layout='mobile'] .skills__list {
106
+ align-items: flex-start;
107
+ }
108
+
109
+ :is(.profile-pane-host, .profile-pane-root)[data-layout='mobile'] .skills__item {
110
+ display: inline-flex;
111
+ align-items: center;
112
+ justify-content: flex-start;
113
+ gap: 0.375rem;
114
+ padding: var(--spacing-base, 0.5rem) var(--spacing-2xs, 0.625rem);
115
+ width: fit-content;
116
+ max-width: 100%;
117
+ }
118
+
119
+ :is(.profile-pane-host, .profile-pane-root)[data-layout='mobile'] .skills__item-label {
120
+ font-size: var(--font-size-sm, 0.875rem);
121
+ }
122
+
123
+ :is(.profile-pane-host, .profile-pane-root)[data-layout='mobile'] .skills__item-tail::before {
124
+ content: none;
125
+ }
126
+
127
+ @media (max-width: 576px) {
128
+ .skills__list {
129
+ align-items: flex-start;
130
+ }
131
+
132
+ .skills__item {
133
+ display: inline-flex;
134
+ align-items: center;
135
+ justify-content: flex-start;
136
+ gap: 0.375rem;
137
+ padding: var(--spacing-base, 0.5rem) var(--spacing-2xs, 0.625rem);
138
+ width: fit-content;
139
+ max-width: 100%;
140
+ }
141
+
142
+ .skills__item-label {
143
+ font-size: var(--font-size-sm, 0.875rem);
144
+ }
145
+
146
+ .skills__item-tail::before {
147
+ content: none;
148
+ }
149
+ }
150
+
151
+ @container profile-pane (max-width: 576px) {
152
+ .skills__list {
153
+ align-items: flex-start;
154
+ }
155
+
156
+ .skills__item {
157
+ display: inline-flex;
158
+ align-items: center;
159
+ justify-content: flex-start;
160
+ gap: 0.375rem;
161
+ padding: var(--spacing-base, 0.5rem) var(--spacing-2xs, 0.625rem);
162
+ width: fit-content;
163
+ max-width: 100%;
164
+ }
165
+
166
+ .skills__item-label {
167
+ font-size: var(--font-size-sm, 0.875rem);
168
+ }
169
+
170
+ .skills__item-tail::before {
171
+ content: none;
172
+ }
173
+ }
@@ -1,5 +1,7 @@
1
+ import 'solid-ui/components/actions/button';
1
2
  import { LiveStore, NamedNode } from 'rdflib';
2
3
  import { ViewerMode } from '../../types';
4
+ import './SkillsSection.css';
3
5
  import { SkillDetails } from './types';
4
6
  export declare function renderSkillsSection(store: LiveStore, subject: NamedNode, skills: SkillDetails[], viewerMode: ViewerMode, onSaved?: () => Promise<void> | void): import("lit-html").TemplateResult<1> | "";
5
7
  //# sourceMappingURL=SkillsSection.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"SkillsSection.d.ts","sourceRoot":"","sources":["../../../src/sections/skills/SkillsSection.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,QAAQ,CAAA;AAC7C,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAA;AAExC,OAAO,EAAE,YAAY,EAAY,MAAM,SAAS,CAAA;AAgMhD,wBAAgB,mBAAmB,CACjC,KAAK,EAAE,SAAS,EAChB,OAAO,EAAE,SAAS,EAClB,MAAM,EAAE,YAAY,EAAE,EACtB,UAAU,EAAE,UAAU,EACtB,OAAO,CAAC,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,6CAYrC"}
1
+ {"version":3,"file":"SkillsSection.d.ts","sourceRoot":"","sources":["../../../src/sections/skills/SkillsSection.ts"],"names":[],"mappings":"AACA,OAAO,oCAAoC,CAAA;AAE3C,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,QAAQ,CAAA;AAC7C,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAA;AACxC,OAAO,qBAAqB,CAAA;AAE5B,OAAO,EAAE,YAAY,EAAY,MAAM,SAAS,CAAA;AA6PhD,wBAAgB,mBAAmB,CACjC,KAAK,EAAE,SAAS,EAChB,OAAO,EAAE,SAAS,EAClB,MAAM,EAAE,YAAY,EAAE,EACtB,UAAU,EAAE,UAAU,EACtB,OAAO,CAAC,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,6CAYrC"}