solid-panes 5.1.0-2 → 5.1.0-3

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 (58) hide show
  1. package/README.md +6 -0
  2. package/dist/components/profile-heading/ProfileHeading.cjs.js +2 -2
  3. package/dist/components/profile-heading/ProfileHeading.cjs.js.map +1 -1
  4. package/dist/components/profile-heading/ProfileHeading.esm.js +2 -2
  5. package/dist/components/profile-heading/ProfileHeading.esm.js.map +1 -1
  6. package/dist/components/profile-heading/ProfileHeading.styles.cjs.js +1 -1
  7. package/dist/components/profile-heading/ProfileHeading.styles.cjs.js.map +1 -1
  8. package/dist/components/profile-heading/ProfileHeading.styles.esm.js +1 -1
  9. package/dist/components/profile-heading/ProfileHeading.styles.esm.js.map +1 -1
  10. package/dist/index.cjs.js +1 -1
  11. package/dist/index.cjs.js.map +1 -1
  12. package/dist/index.d.ts +1 -0
  13. package/dist/index.d.ts.map +1 -1
  14. package/dist/index.esm.js +16 -15
  15. package/dist/index.esm.js.map +1 -1
  16. package/dist/mainPage/index.cjs.js +1 -1
  17. package/dist/mainPage/index.cjs.js.map +1 -1
  18. package/dist/mainPage/index.d.ts.map +1 -1
  19. package/dist/mainPage/index.esm.js +36 -25
  20. package/dist/mainPage/index.esm.js.map +1 -1
  21. package/dist/mainPage/profileHeading.d.ts +2 -1
  22. package/dist/mainPage/profileHeading.d.ts.map +1 -1
  23. package/dist/mainPage/profileHeading2.cjs.js +1 -1
  24. package/dist/mainPage/profileHeading2.cjs.js.map +1 -1
  25. package/dist/mainPage/profileHeading2.esm.js +75 -75
  26. package/dist/mainPage/profileHeading2.esm.js.map +1 -1
  27. package/dist/navigation/chrome.cjs.js +1 -1
  28. package/dist/navigation/chrome.cjs.js.map +1 -1
  29. package/dist/navigation/chrome.d.ts +20 -2
  30. package/dist/navigation/chrome.d.ts.map +1 -1
  31. package/dist/navigation/chrome.esm.js +14 -8
  32. package/dist/navigation/chrome.esm.js.map +1 -1
  33. package/dist/navigation/controller.cjs.js +1 -1
  34. package/dist/navigation/controller.cjs.js.map +1 -1
  35. package/dist/navigation/controller.d.ts +3 -0
  36. package/dist/navigation/controller.d.ts.map +1 -1
  37. package/dist/navigation/controller.esm.js +49 -28
  38. package/dist/navigation/controller.esm.js.map +1 -1
  39. package/dist/navigation/options.cjs.js +1 -1
  40. package/dist/navigation/options.cjs.js.map +1 -1
  41. package/dist/navigation/options.d.ts +12 -0
  42. package/dist/navigation/options.d.ts.map +1 -1
  43. package/dist/navigation/options.esm.js +4 -1
  44. package/dist/navigation/options.esm.js.map +1 -1
  45. package/dist/navigation/podContext.cjs.js +1 -1
  46. package/dist/navigation/podContext.cjs.js.map +1 -1
  47. package/dist/navigation/podContext.d.ts.map +1 -1
  48. package/dist/navigation/podContext.esm.js +14 -14
  49. package/dist/navigation/podContext.esm.js.map +1 -1
  50. package/dist/outline/manager2.cjs.js +1 -1
  51. package/dist/outline/manager2.cjs.js.map +1 -1
  52. package/dist/outline/manager2.esm.js +352 -321
  53. package/dist/outline/manager2.esm.js.map +1 -1
  54. package/dist/versionInfo.cjs.js +1 -1
  55. package/dist/versionInfo.cjs.js.map +1 -1
  56. package/dist/versionInfo.esm.js +3 -3
  57. package/dist/versionInfo.esm.js.map +1 -1
  58. package/package.json +2 -2
package/README.md CHANGED
@@ -52,6 +52,12 @@ Volunteers are always welcome!
52
52
 
53
53
  ### Profile heading
54
54
 
55
+ Page shells can call `initializeProfileHeading(getPageUrl)` with a function
56
+ returning the currently browsed resource URL. Without an argument, the heading
57
+ uses `window.location.href`. The function is evaluated on each refresh, including
58
+ authentication changes, so shell-specific URL/query parsing stays in the shell.
59
+ Call `refreshProfileHeading(true)` after changing the shell's target.
60
+
55
61
  The `solid-panes-profile-heading` component accepts presentation data through
56
62
  `profileData`. Its boolean `compact` property (also available as an attribute)
57
63
  halves the responsive avatar size and shows only the photo, name, and job title.
@@ -27,7 +27,7 @@ const e=require("./editor/utils/errorDisplay.cjs.js");require("../../_virtual/~i
27
27
  </header>
28
28
  </div>
29
29
 
30
- ${(this.editContext||l)&&!this.compact?o.html`
30
+ ${this.editContext&&!this.compact||l?o.html`
31
31
  <div class="profile__actions profile__heading-edit-action">
32
32
  ${l?o.html`
33
33
  <div class="profile-friends-button__section" role="group" aria-label="Friend relationship actions">
@@ -45,7 +45,7 @@ const e=require("./editor/utils/errorDisplay.cjs.js");require("../../_virtual/~i
45
45
  </div>`:o.nothing}
46
46
  </div>
47
47
  `:o.nothing}
48
- ${this.editContext?o.html`
48
+ ${this.editContext&&!this.compact?o.html`
49
49
  <solid-ui-button
50
50
  variant="tertiary"
51
51
  class="profile-section-collapsible__edit-button desktop-edit-button"
@@ -1 +1 @@
1
- {"version":3,"file":"ProfileHeading.cjs.js","names":["authn","store","customElement","WebComponent","html","nothing","property","state","createHeadingEditDialog","addFriend","checkFriend","friendTexts","formatDisplayError","styles","_classDecs","_ProfileHeading","_ProfileHeading2","_A","WeakMap","_B","_C","_D","_E","_F","_G","_H","_ref","_profileDataDecs","attribute","_editContextDecs","_friendSubjectDecs","_compactDecs","type","Boolean","reflect","_failedImageSrcDecs","_friendStateDecs","_friendMessageDecs","_friendErrorDecs","_ProfileHeading3","ProfileHeading","constructor","args","_classPrivateFieldInitSpec","_initProto","_init_profileData","undefined","_init_editContext","_init_friendSubject","_init_compact","_init_failedImageSrc","_init_friendState","_init_friendMessage","_init_friendError","_defineProperty","event","preventDefault","friendState","subject","friendSubject","request","friendRequest","clearFriendMessage","viewer","currentUser","Error","loginRequired","showFriendMessage","success","error","context","editContext","profileData","viewerMode","dispatchEvent","CustomEvent","bubbles","composed","detail","subjectUri","value","onSaved","catch","console","failedImageSrc","currentTarget","getAttribute","_classPrivateFieldGet","v","_classPrivateFieldSet","compact","friendMessage","friendError","connectedCallback","friendRequestInterrupted","startFriendCheck","disconnectedCallback","clearTimeout","friendMessageTimer","willUpdate","changed","has","get","imageSrc","sameTerm","then","exists","message","setTimeout","updateComplete","shadowRoot","querySelector","focus","render","profile","phone","textValue","primaryPhone","valueNode","replace","email","primaryEmail","dateOfBirth","displayDate","showImage","showFriend","name","handleImageError","pronouns","jobTitle","handleAddFriend","add","handleEdit","renderEditIcon","renderLine","location","icon","renderIcon","e","c","_initClass","_applyDecs","_Class","_identity","default","raw","trim","isoDate","match","year","month","day","dmyDate","customElement","property","state","WebComponent","authn","friendTexts","addFriend","store","formatDisplayError","nothing","styles","require_errorDisplay","require_HeadingEditDialog","require_friendActions","require_ProfileHeading_styles","solid_ui","solid_logic","lit","lit_decorators_js","_Class","_ProfileHeading3","_A","_B","_C","_D","_E","_F","_G","_H","_initProto","_initClass","_classDecs","_profileDataDecs","_init_profileData","_editContextDecs","_init_editContext","_friendSubjectDecs","_init_friendSubject","_compactDecs","_init_compact","_failedImageSrcDecs","_init_failedImageSrc","_friendStateDecs","_init_friendState","_friendMessageDecs","_init_friendMessage","_friendErrorDecs","_init_friendError","_ProfileHeading2","_ref","_classPrivateFieldInitSpec","_checkPrivateRedeclaration","a","_classPrivateFieldSet","s","_assertClassBrand","r","_classPrivateFieldGet","_defineProperty","_toPropertyKey","t","_applyDecs","i","n","o","c","applyDec","m","h","y","v","g","b","u","w","S","A","d","f","p","_setFunctionName","P","j","D","I","F","l","N","_checkInRHS","_toPrimitive","e","_identity","_ProfileHeading","args","event","subject","request","viewer","error","context","changed","exists","message","profile","phone","textValue","email","dateOfBirth","displayDate","showImage","showFriend","value","icon","raw","isoDate","year","month","day","dmyDate"],"sources":["../../../src/components/profile-heading/ProfileHeading.ts"],"sourcesContent":["import { authn, store } from 'solid-logic'\nimport type { NamedNode, Node } from 'rdflib'\nimport { customElement, WebComponent } from 'solid-ui'\nimport { html, nothing, type PropertyValues, type TemplateResult } from 'lit'\nimport { property, state } from 'lit/decorators.js'\nimport { createHeadingEditDialog } from './editor/sections/heading/HeadingEditDialog'\nimport type { ProfileDetails, ProfilePresentation } from './editor/sections/heading/types'\nimport type { PointDetails } from './editor/sections/contactInfo/types'\nimport type { ViewerMode } from '../../types'\nimport { addFriend, checkFriend, friendTexts } from './friendActions'\nimport { formatDisplayError } from './editor/utils/errorDisplay'\nimport 'solid-ui/components/button'\nimport '~icons/lucide/cake'\nimport '~icons/lucide/circle-user-round'\nimport '~icons/lucide/mail'\nimport '~icons/lucide/map-pin'\nimport '~icons/lucide/pencil'\nimport '~icons/lucide/phone'\nimport '~icons/lucide/user-round-plus'\nimport styles from './ProfileHeading.styles.css'\n\nexport type ProfileHeadingPoint = Pick<PointDetails, 'valueNode'>\n\n// The heading renders a subset of the shared presentation model used by the editor.\nexport type ProfileHeadingData =\n Pick<ProfilePresentation, 'name' | 'imageSrc' | 'location' | 'pronouns' | 'dateOfBirth' | 'jobTitle'> & {\n primaryPhone?: ProfileHeadingPoint\n primaryEmail?: ProfileHeadingPoint\n }\n\nexport interface ProfileHeadingEditContext {\n subject: NamedNode\n profileData: ProfileDetails\n viewerMode: ViewerMode\n onSaved: () => Promise<void> | void\n}\n\n@customElement('solid-panes-profile-heading')\nexport default class ProfileHeading extends WebComponent {\n static styles = styles\n\n @property({ attribute: false })\n accessor profileData: ProfileHeadingData | undefined = undefined\n\n @property({ attribute: false })\n accessor editContext: ProfileHeadingEditContext | undefined = undefined\n\n @property({ attribute: false })\n accessor friendSubject: NamedNode | undefined = undefined\n\n @property({ type: Boolean, reflect: true })\n accessor compact = false\n\n @state()\n accessor failedImageSrc: string | undefined = undefined\n\n @state()\n accessor friendState: 'loading' | 'available' | 'exists' | 'saving' | 'error' = 'loading'\n\n @state()\n accessor friendMessage = ''\n\n @state()\n accessor friendError = false\n\n private friendRequest = 0\n private friendRequestInterrupted = false\n private friendMessageTimer: ReturnType<typeof setTimeout> | undefined\n\n connectedCallback (): void {\n super.connectedCallback()\n if (this.friendRequestInterrupted) {\n this.friendRequestInterrupted = false\n this.startFriendCheck()\n }\n }\n\n disconnectedCallback (): void {\n super.disconnectedCallback()\n this.friendRequest++\n if (this.friendState === 'loading' || this.friendState === 'saving') {\n this.friendRequestInterrupted = true\n }\n this.clearFriendMessage()\n }\n\n private clearFriendMessage (): void {\n clearTimeout(this.friendMessageTimer)\n this.friendMessageTimer = undefined\n this.friendMessage = ''\n }\n\n protected willUpdate (changed: PropertyValues<this>): void {\n super.willUpdate(changed)\n if (changed.has('profileData') && changed.get('profileData')?.imageSrc !== this.profileData?.imageSrc) {\n this.failedImageSrc = undefined\n }\n if (!changed.has('friendSubject')) return\n this.friendRequestInterrupted = false\n this.startFriendCheck()\n }\n\n private startFriendCheck (): void {\n const request = ++this.friendRequest\n this.friendState = 'loading'\n this.clearFriendMessage()\n this.friendError = false\n const subject = this.friendSubject\n const viewer = authn.currentUser()\n if (!subject || !viewer || viewer.sameTerm(subject)) return\n\n checkFriend(viewer, subject).then((exists) => {\n if (request !== this.friendRequest || this.friendSubject !== subject) return\n this.friendState = exists ? 'exists' : 'available'\n }).catch((error: unknown) => {\n if (request !== this.friendRequest || this.friendSubject !== subject) return\n this.friendState = 'error'\n this.showFriendMessage(error, true)\n })\n }\n\n private async showFriendMessage (message: unknown, error: boolean): Promise<void> {\n this.clearFriendMessage()\n this.friendMessage = formatDisplayError(message)\n this.friendError = error\n this.friendMessageTimer = setTimeout(() => {\n this.clearFriendMessage()\n }, 10000)\n await this.updateComplete\n this.shadowRoot?.querySelector<HTMLElement>('.friend-message')?.focus()\n }\n\n private handleAddFriend = async (event: Event): Promise<void> => {\n event.preventDefault()\n if (this.friendState !== 'available' && this.friendState !== 'error') return\n const subject = this.friendSubject\n if (!subject) return\n const request = this.friendRequest\n this.friendState = 'saving'\n this.clearFriendMessage()\n try {\n const viewer = authn.currentUser()\n if (!viewer) throw new Error(friendTexts.loginRequired)\n await addFriend(viewer, subject)\n if (request !== this.friendRequest || this.friendSubject !== subject) return\n this.friendState = 'exists'\n await this.showFriendMessage(friendTexts.success, false)\n } catch (error: unknown) {\n if (request !== this.friendRequest || this.friendSubject !== subject) return\n this.friendState = 'error'\n await this.showFriendMessage(error, true)\n }\n }\n\n private handleEdit = (event: Event) => {\n const context = this.editContext\n if (!context) return\n\n createHeadingEditDialog(\n event,\n store,\n context.subject,\n context.profileData,\n context.viewerMode,\n async () => {\n this.dispatchEvent(new CustomEvent('profile-heading-saved', {\n bubbles: true,\n composed: true,\n detail: { subjectUri: context.subject.value }\n }))\n await context.onSaved()\n }\n ).catch((error: unknown) => {\n console.error('Failed to edit profile heading.', error)\n })\n }\n\n private handleImageError = (event: Event) => {\n this.failedImageSrc = (event.currentTarget as HTMLImageElement).getAttribute('src') ?? undefined\n }\n\n render (): TemplateResult<1> {\n const profile = this.profileData\n if (!profile) return html``\n\n const phone = textValue(profile.primaryPhone?.valueNode).replace(/^tel:/i, '')\n const email = textValue(profile.primaryEmail?.valueNode).replace(/^mailto:/i, '')\n const dateOfBirth = displayDate(profile.dateOfBirth)\n const showImage = Boolean(profile.imageSrc && this.failedImageSrc !== profile.imageSrc)\n const viewer = authn.currentUser()\n const showFriend = Boolean(this.friendSubject && viewer && !viewer.sameTerm(this.friendSubject))\n\n return html`\n <section class=\"profile-heading\" aria-labelledby=\"profile-heading-name\">\n <div class=\"avatar\">\n <div class=\"image-frame ${showImage ? '' : 'image-frame--fallback'}\">\n ${showImage\n ? html`<img\n class=\"hero\"\n src=${profile.imageSrc}\n alt=${profile.name}\n width=\"140\"\n height=\"140\"\n loading=\"eager\"\n @error=${this.handleImageError}\n />`\n : nothing}\n <div class=\"hero-fallback\" role=\"img\" aria-label=${profile.name}>\n <icon-lucide-circle-user-round aria-hidden=\"true\"></icon-lucide-circle-user-round>\n </div>\n </div>\n </div>\n\n <div class=\"info\">\n <header class=\"header-bar\">\n <div class=\"identity\" role=\"group\" aria-label=${this.compact ? 'Name' : 'Name and pronouns'}>\n <h1 id=\"profile-heading-name\" class=\"name\">${profile.name}</h1>\n ${profile.pronouns ? html`<span class=\"pronouns\" ?hidden=${this.compact}>(${profile.pronouns})</span>` : nothing}\n </div>\n ${profile.jobTitle ? html`<div class=\"role\">${profile.jobTitle}</div>` : nothing}\n </header>\n </div>\n\n ${(this.editContext || showFriend) && !this.compact\n ? html`\n <div class=\"profile__actions profile__heading-edit-action\">\n ${showFriend\n ? html`\n <div class=\"profile-friends-button__section\" role=\"group\" aria-label=\"Friend relationship actions\">\n <solid-ui-button\n variant=\"secondary\"\n class=\"profile__btn-friends\"\n ?disabled=${this.friendState === 'loading' || this.friendState === 'saving' || this.friendState === 'exists'}\n aria-busy=${this.friendState === 'loading' || this.friendState === 'saving' ? 'true' : 'false'}\n @click=${this.handleAddFriend}\n >${this.friendState === 'exists'\n ? nothing\n : html`<icon-lucide-user-round-plus slot=\"icon\" class=\"profile__btn-friends-icon\" aria-hidden=\"true\"></icon-lucide-user-round-plus>`}${this.friendState === 'exists' ? friendTexts.exists : friendTexts.add}</solid-ui-button>\n ${this.friendMessage\n ? html`\n <div class=\"friend-message\" role=${this.friendError ? 'alert' : 'status'}\n aria-live=${this.friendError ? 'assertive' : 'polite'} tabindex=\"0\">\n ${this.friendMessage}\n </div>`\n : nothing}\n </div>\n `\n : nothing}\n ${this.editContext\n ? html`\n <solid-ui-button\n variant=\"tertiary\"\n class=\"profile-section-collapsible__edit-button desktop-edit-button\"\n aria-label=\"Add or edit heading information\"\n @click=${this.handleEdit}\n >\n <span slot=\"left-icon\" class=\"profile-section-collapsible__action-label profile__add-more-icon\" aria-hidden=\"true\">\n ${this.renderEditIcon()}\n </span>\n <span class=\"profile-section-collapsible__action-label edit-label\">Edit</span>\n </solid-ui-button>\n <solid-ui-button\n variant=\"ghost\"\n class=\"profile-section-collapsible__edit-button mobile-edit-button\"\n aria-label=\"Add or edit heading information\"\n @click=${this.handleEdit}\n >\n <span slot=\"icon\" class=\"profile-section-collapsible__edit-icon\" aria-hidden=\"true\">\n ${this.renderEditIcon()}\n </span>\n </solid-ui-button>\n `\n : nothing}\n </div>\n `\n : nothing}\n\n <div class=\"details-collapse\" aria-hidden=${this.compact ? 'true' : 'false'} ?inert=${this.compact}>\n <div class=\"details\">\n <div class=\"detail-row\" role=\"group\" aria-label=\"Additional profile information\">\n ${this.renderLine(dateOfBirth, 'birthday')}\n ${this.renderLine(profile.location, 'location')}\n </div>\n <div class=\"detail-row\" role=\"group\" aria-label=\"Contact information\">\n ${this.renderLine(phone, 'phone')}\n ${this.renderLine(email, 'email')}\n </div>\n </div>\n </div>\n </section>\n `\n }\n\n private renderLine (value: string | undefined, icon: 'birthday' | 'location' | 'phone' | 'email') {\n if (!value) return nothing\n\n return html`\n <div class=\"detail-item\">\n <span class=\"detail-icon\" aria-hidden=\"true\">\n ${this.renderIcon(icon)}\n </span>\n <span class=\"detail-value\">${value}</span>\n </div>\n `\n }\n\n private renderIcon (icon: 'birthday' | 'location' | 'phone' | 'email'): TemplateResult {\n switch (icon) {\n case 'birthday':\n return html`<icon-lucide-cake aria-hidden=\"true\"></icon-lucide-cake>`\n case 'location':\n return html`<icon-lucide-map-pin aria-hidden=\"true\"></icon-lucide-map-pin>`\n case 'phone':\n return html`<icon-lucide-phone aria-hidden=\"true\"></icon-lucide-phone>`\n case 'email':\n return html`<icon-lucide-mail aria-hidden=\"true\"></icon-lucide-mail>`\n }\n }\n\n private renderEditIcon (): TemplateResult {\n return html`<icon-lucide-pencil aria-hidden=\"true\"></icon-lucide-pencil>`\n }\n}\n\nfunction textValue (value: Node | undefined): string {\n return value?.value ?? ''\n}\n\nfunction displayDate (value?: string): string {\n const raw = (value || '').trim()\n const isoDate = raw.match(/^(\\d{4})-(\\d{2})-(\\d{2})/)\n if (isoDate) {\n const [, year, month, day] = isoDate\n return `${day}-${month}-${year}`\n }\n\n const dmyDate = raw.match(/^(\\d{2})[/-](\\d{2})[/-](\\d{4})$/)\n if (dmyDate) {\n const [, day, month, year] = dmyDate\n return `${day}-${month}-${year}`\n }\n\n return raw\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"ProfileHeading.cjs.js","names":["authn","store","customElement","WebComponent","html","nothing","property","state","createHeadingEditDialog","addFriend","checkFriend","friendTexts","formatDisplayError","styles","_classDecs","_ProfileHeading","_ProfileHeading2","_A","WeakMap","_B","_C","_D","_E","_F","_G","_H","_ref","_profileDataDecs","attribute","_editContextDecs","_friendSubjectDecs","_compactDecs","type","Boolean","reflect","_failedImageSrcDecs","_friendStateDecs","_friendMessageDecs","_friendErrorDecs","_ProfileHeading3","ProfileHeading","constructor","args","_classPrivateFieldInitSpec","_initProto","_init_profileData","undefined","_init_editContext","_init_friendSubject","_init_compact","_init_failedImageSrc","_init_friendState","_init_friendMessage","_init_friendError","_defineProperty","event","preventDefault","friendState","subject","friendSubject","request","friendRequest","clearFriendMessage","viewer","currentUser","Error","loginRequired","showFriendMessage","success","error","context","editContext","profileData","viewerMode","dispatchEvent","CustomEvent","bubbles","composed","detail","subjectUri","value","onSaved","catch","console","failedImageSrc","currentTarget","getAttribute","_classPrivateFieldGet","v","_classPrivateFieldSet","compact","friendMessage","friendError","connectedCallback","friendRequestInterrupted","startFriendCheck","disconnectedCallback","clearTimeout","friendMessageTimer","willUpdate","changed","has","get","imageSrc","sameTerm","then","exists","message","setTimeout","updateComplete","shadowRoot","querySelector","focus","render","profile","phone","textValue","primaryPhone","valueNode","replace","email","primaryEmail","dateOfBirth","displayDate","showImage","showFriend","name","handleImageError","pronouns","jobTitle","handleAddFriend","add","handleEdit","renderEditIcon","renderLine","location","icon","renderIcon","e","c","_initClass","_applyDecs","_Class","_identity","default","raw","trim","isoDate","match","year","month","day","dmyDate","customElement","property","state","WebComponent","authn","friendTexts","addFriend","store","formatDisplayError","nothing","styles","require_errorDisplay","require_HeadingEditDialog","require_friendActions","require_ProfileHeading_styles","solid_ui","solid_logic","lit","lit_decorators_js","_Class","_ProfileHeading3","_A","_B","_C","_D","_E","_F","_G","_H","_initProto","_initClass","_classDecs","_profileDataDecs","_init_profileData","_editContextDecs","_init_editContext","_friendSubjectDecs","_init_friendSubject","_compactDecs","_init_compact","_failedImageSrcDecs","_init_failedImageSrc","_friendStateDecs","_init_friendState","_friendMessageDecs","_init_friendMessage","_friendErrorDecs","_init_friendError","_ProfileHeading2","_ref","_classPrivateFieldInitSpec","_checkPrivateRedeclaration","a","_classPrivateFieldSet","s","_assertClassBrand","r","_classPrivateFieldGet","_defineProperty","_toPropertyKey","t","_applyDecs","i","n","o","c","applyDec","m","h","y","v","g","b","u","w","S","A","d","f","p","_setFunctionName","P","j","D","I","F","l","N","_checkInRHS","_toPrimitive","e","_identity","_ProfileHeading","args","event","subject","request","viewer","error","context","changed","exists","message","profile","phone","textValue","email","dateOfBirth","displayDate","showImage","showFriend","value","icon","raw","isoDate","year","month","day","dmyDate"],"sources":["../../../src/components/profile-heading/ProfileHeading.ts"],"sourcesContent":["import { authn, store } from 'solid-logic'\nimport type { NamedNode, Node } from 'rdflib'\nimport { customElement, WebComponent } from 'solid-ui'\nimport { html, nothing, type PropertyValues, type TemplateResult } from 'lit'\nimport { property, state } from 'lit/decorators.js'\nimport { createHeadingEditDialog } from './editor/sections/heading/HeadingEditDialog'\nimport type { ProfileDetails, ProfilePresentation } from './editor/sections/heading/types'\nimport type { PointDetails } from './editor/sections/contactInfo/types'\nimport type { ViewerMode } from '../../types'\nimport { addFriend, checkFriend, friendTexts } from './friendActions'\nimport { formatDisplayError } from './editor/utils/errorDisplay'\nimport 'solid-ui/components/button'\nimport '~icons/lucide/cake'\nimport '~icons/lucide/circle-user-round'\nimport '~icons/lucide/mail'\nimport '~icons/lucide/map-pin'\nimport '~icons/lucide/pencil'\nimport '~icons/lucide/phone'\nimport '~icons/lucide/user-round-plus'\nimport styles from './ProfileHeading.styles.css'\n\nexport type ProfileHeadingPoint = Pick<PointDetails, 'valueNode'>\n\n// The heading renders a subset of the shared presentation model used by the editor.\nexport type ProfileHeadingData =\n Pick<ProfilePresentation, 'name' | 'imageSrc' | 'location' | 'pronouns' | 'dateOfBirth' | 'jobTitle'> & {\n primaryPhone?: ProfileHeadingPoint\n primaryEmail?: ProfileHeadingPoint\n }\n\nexport interface ProfileHeadingEditContext {\n subject: NamedNode\n profileData: ProfileDetails\n viewerMode: ViewerMode\n onSaved: () => Promise<void> | void\n}\n\n@customElement('solid-panes-profile-heading')\nexport default class ProfileHeading extends WebComponent {\n static styles = styles\n\n @property({ attribute: false })\n accessor profileData: ProfileHeadingData | undefined = undefined\n\n @property({ attribute: false })\n accessor editContext: ProfileHeadingEditContext | undefined = undefined\n\n @property({ attribute: false })\n accessor friendSubject: NamedNode | undefined = undefined\n\n @property({ type: Boolean, reflect: true })\n accessor compact = false\n\n @state()\n accessor failedImageSrc: string | undefined = undefined\n\n @state()\n accessor friendState: 'loading' | 'available' | 'exists' | 'saving' | 'error' = 'loading'\n\n @state()\n accessor friendMessage = ''\n\n @state()\n accessor friendError = false\n\n private friendRequest = 0\n private friendRequestInterrupted = false\n private friendMessageTimer: ReturnType<typeof setTimeout> | undefined\n\n connectedCallback (): void {\n super.connectedCallback()\n if (this.friendRequestInterrupted) {\n this.friendRequestInterrupted = false\n this.startFriendCheck()\n }\n }\n\n disconnectedCallback (): void {\n super.disconnectedCallback()\n this.friendRequest++\n if (this.friendState === 'loading' || this.friendState === 'saving') {\n this.friendRequestInterrupted = true\n }\n this.clearFriendMessage()\n }\n\n private clearFriendMessage (): void {\n clearTimeout(this.friendMessageTimer)\n this.friendMessageTimer = undefined\n this.friendMessage = ''\n }\n\n protected willUpdate (changed: PropertyValues<this>): void {\n super.willUpdate(changed)\n if (changed.has('profileData') && changed.get('profileData')?.imageSrc !== this.profileData?.imageSrc) {\n this.failedImageSrc = undefined\n }\n if (!changed.has('friendSubject')) return\n this.friendRequestInterrupted = false\n this.startFriendCheck()\n }\n\n private startFriendCheck (): void {\n const request = ++this.friendRequest\n this.friendState = 'loading'\n this.clearFriendMessage()\n this.friendError = false\n const subject = this.friendSubject\n const viewer = authn.currentUser()\n if (!subject || !viewer || viewer.sameTerm(subject)) return\n\n checkFriend(viewer, subject).then((exists) => {\n if (request !== this.friendRequest || this.friendSubject !== subject) return\n this.friendState = exists ? 'exists' : 'available'\n }).catch((error: unknown) => {\n if (request !== this.friendRequest || this.friendSubject !== subject) return\n this.friendState = 'error'\n this.showFriendMessage(error, true)\n })\n }\n\n private async showFriendMessage (message: unknown, error: boolean): Promise<void> {\n this.clearFriendMessage()\n this.friendMessage = formatDisplayError(message)\n this.friendError = error\n this.friendMessageTimer = setTimeout(() => {\n this.clearFriendMessage()\n }, 10000)\n await this.updateComplete\n this.shadowRoot?.querySelector<HTMLElement>('.friend-message')?.focus()\n }\n\n private handleAddFriend = async (event: Event): Promise<void> => {\n event.preventDefault()\n if (this.friendState !== 'available' && this.friendState !== 'error') return\n const subject = this.friendSubject\n if (!subject) return\n const request = this.friendRequest\n this.friendState = 'saving'\n this.clearFriendMessage()\n try {\n const viewer = authn.currentUser()\n if (!viewer) throw new Error(friendTexts.loginRequired)\n await addFriend(viewer, subject)\n if (request !== this.friendRequest || this.friendSubject !== subject) return\n this.friendState = 'exists'\n await this.showFriendMessage(friendTexts.success, false)\n } catch (error: unknown) {\n if (request !== this.friendRequest || this.friendSubject !== subject) return\n this.friendState = 'error'\n await this.showFriendMessage(error, true)\n }\n }\n\n private handleEdit = (event: Event) => {\n const context = this.editContext\n if (!context) return\n\n createHeadingEditDialog(\n event,\n store,\n context.subject,\n context.profileData,\n context.viewerMode,\n async () => {\n this.dispatchEvent(new CustomEvent('profile-heading-saved', {\n bubbles: true,\n composed: true,\n detail: { subjectUri: context.subject.value }\n }))\n await context.onSaved()\n }\n ).catch((error: unknown) => {\n console.error('Failed to edit profile heading.', error)\n })\n }\n\n private handleImageError = (event: Event) => {\n this.failedImageSrc = (event.currentTarget as HTMLImageElement).getAttribute('src') ?? undefined\n }\n\n render (): TemplateResult<1> {\n const profile = this.profileData\n if (!profile) return html``\n\n const phone = textValue(profile.primaryPhone?.valueNode).replace(/^tel:/i, '')\n const email = textValue(profile.primaryEmail?.valueNode).replace(/^mailto:/i, '')\n const dateOfBirth = displayDate(profile.dateOfBirth)\n const showImage = Boolean(profile.imageSrc && this.failedImageSrc !== profile.imageSrc)\n const viewer = authn.currentUser()\n const showFriend = Boolean(this.friendSubject && viewer && !viewer.sameTerm(this.friendSubject))\n\n return html`\n <section class=\"profile-heading\" aria-labelledby=\"profile-heading-name\">\n <div class=\"avatar\">\n <div class=\"image-frame ${showImage ? '' : 'image-frame--fallback'}\">\n ${showImage\n ? html`<img\n class=\"hero\"\n src=${profile.imageSrc}\n alt=${profile.name}\n width=\"140\"\n height=\"140\"\n loading=\"eager\"\n @error=${this.handleImageError}\n />`\n : nothing}\n <div class=\"hero-fallback\" role=\"img\" aria-label=${profile.name}>\n <icon-lucide-circle-user-round aria-hidden=\"true\"></icon-lucide-circle-user-round>\n </div>\n </div>\n </div>\n\n <div class=\"info\">\n <header class=\"header-bar\">\n <div class=\"identity\" role=\"group\" aria-label=${this.compact ? 'Name' : 'Name and pronouns'}>\n <h1 id=\"profile-heading-name\" class=\"name\">${profile.name}</h1>\n ${profile.pronouns ? html`<span class=\"pronouns\" ?hidden=${this.compact}>(${profile.pronouns})</span>` : nothing}\n </div>\n ${profile.jobTitle ? html`<div class=\"role\">${profile.jobTitle}</div>` : nothing}\n </header>\n </div>\n\n ${(this.editContext && !this.compact) || showFriend\n ? html`\n <div class=\"profile__actions profile__heading-edit-action\">\n ${showFriend\n ? html`\n <div class=\"profile-friends-button__section\" role=\"group\" aria-label=\"Friend relationship actions\">\n <solid-ui-button\n variant=\"secondary\"\n class=\"profile__btn-friends\"\n ?disabled=${this.friendState === 'loading' || this.friendState === 'saving' || this.friendState === 'exists'}\n aria-busy=${this.friendState === 'loading' || this.friendState === 'saving' ? 'true' : 'false'}\n @click=${this.handleAddFriend}\n >${this.friendState === 'exists'\n ? nothing\n : html`<icon-lucide-user-round-plus slot=\"icon\" class=\"profile__btn-friends-icon\" aria-hidden=\"true\"></icon-lucide-user-round-plus>`}${this.friendState === 'exists' ? friendTexts.exists : friendTexts.add}</solid-ui-button>\n ${this.friendMessage\n ? html`\n <div class=\"friend-message\" role=${this.friendError ? 'alert' : 'status'}\n aria-live=${this.friendError ? 'assertive' : 'polite'} tabindex=\"0\">\n ${this.friendMessage}\n </div>`\n : nothing}\n </div>\n `\n : nothing}\n ${this.editContext && !this.compact\n ? html`\n <solid-ui-button\n variant=\"tertiary\"\n class=\"profile-section-collapsible__edit-button desktop-edit-button\"\n aria-label=\"Add or edit heading information\"\n @click=${this.handleEdit}\n >\n <span slot=\"left-icon\" class=\"profile-section-collapsible__action-label profile__add-more-icon\" aria-hidden=\"true\">\n ${this.renderEditIcon()}\n </span>\n <span class=\"profile-section-collapsible__action-label edit-label\">Edit</span>\n </solid-ui-button>\n <solid-ui-button\n variant=\"ghost\"\n class=\"profile-section-collapsible__edit-button mobile-edit-button\"\n aria-label=\"Add or edit heading information\"\n @click=${this.handleEdit}\n >\n <span slot=\"icon\" class=\"profile-section-collapsible__edit-icon\" aria-hidden=\"true\">\n ${this.renderEditIcon()}\n </span>\n </solid-ui-button>\n `\n : nothing}\n </div>\n `\n : nothing}\n\n <div class=\"details-collapse\" aria-hidden=${this.compact ? 'true' : 'false'} ?inert=${this.compact}>\n <div class=\"details\">\n <div class=\"detail-row\" role=\"group\" aria-label=\"Additional profile information\">\n ${this.renderLine(dateOfBirth, 'birthday')}\n ${this.renderLine(profile.location, 'location')}\n </div>\n <div class=\"detail-row\" role=\"group\" aria-label=\"Contact information\">\n ${this.renderLine(phone, 'phone')}\n ${this.renderLine(email, 'email')}\n </div>\n </div>\n </div>\n </section>\n `\n }\n\n private renderLine (value: string | undefined, icon: 'birthday' | 'location' | 'phone' | 'email') {\n if (!value) return nothing\n\n return html`\n <div class=\"detail-item\">\n <span class=\"detail-icon\" aria-hidden=\"true\">\n ${this.renderIcon(icon)}\n </span>\n <span class=\"detail-value\">${value}</span>\n </div>\n `\n }\n\n private renderIcon (icon: 'birthday' | 'location' | 'phone' | 'email'): TemplateResult {\n switch (icon) {\n case 'birthday':\n return html`<icon-lucide-cake aria-hidden=\"true\"></icon-lucide-cake>`\n case 'location':\n return html`<icon-lucide-map-pin aria-hidden=\"true\"></icon-lucide-map-pin>`\n case 'phone':\n return html`<icon-lucide-phone aria-hidden=\"true\"></icon-lucide-phone>`\n case 'email':\n return html`<icon-lucide-mail aria-hidden=\"true\"></icon-lucide-mail>`\n }\n }\n\n private renderEditIcon (): TemplateResult {\n return html`<icon-lucide-pencil aria-hidden=\"true\"></icon-lucide-pencil>`\n }\n}\n\nfunction textValue (value: Node | undefined): string {\n return value?.value ?? ''\n}\n\nfunction displayDate (value?: string): string {\n const raw = (value || '').trim()\n const isoDate = raw.match(/^(\\d{4})-(\\d{2})-(\\d{2})/)\n if (isoDate) {\n const [, year, month, day] = isoDate\n return `${day}-${month}-${year}`\n }\n\n const dmyDate = raw.match(/^(\\d{2})[/-](\\d{2})[/-](\\d{4})$/)\n if (dmyDate) {\n const [, day, month, year] = dmyDate\n return `${day}-${month}-${year}`\n }\n\n return raw\n}\n"],"mappings":"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"}
@@ -332,7 +332,7 @@ new (U = (g = /*#__PURE__*/ new WeakMap(), _ = /*#__PURE__*/ new WeakMap(), v =
332
332
  </header>
333
333
  </div>
334
334
 
335
- ${(this.editContext || s) && !this.compact ? u`
335
+ ${this.editContext && !this.compact || s ? u`
336
336
  <div class="profile__actions profile__heading-edit-action">
337
337
  ${s ? u`
338
338
  <div class="profile-friends-button__section" role="group" aria-label="Friend relationship actions">
@@ -350,7 +350,7 @@ new (U = (g = /*#__PURE__*/ new WeakMap(), _ = /*#__PURE__*/ new WeakMap(), v =
350
350
  </div>` : d}
351
351
  </div>
352
352
  ` : d}
353
- ${this.editContext ? u`
353
+ ${this.editContext && !this.compact ? u`
354
354
  <solid-ui-button
355
355
  variant="tertiary"
356
356
  class="profile-section-collapsible__edit-button desktop-edit-button"
@@ -1 +1 @@
1
- {"version":3,"file":"ProfileHeading.esm.js","names":["authn","store","customElement","WebComponent","html","nothing","property","state","createHeadingEditDialog","addFriend","checkFriend","friendTexts","formatDisplayError","styles","_classDecs","_ProfileHeading","_ProfileHeading2","_A","WeakMap","_B","_C","_D","_E","_F","_G","_H","_ref","_profileDataDecs","attribute","_editContextDecs","_friendSubjectDecs","_compactDecs","type","Boolean","reflect","_failedImageSrcDecs","_friendStateDecs","_friendMessageDecs","_friendErrorDecs","_ProfileHeading3","ProfileHeading","constructor","args","_classPrivateFieldInitSpec","_initProto","_init_profileData","undefined","_init_editContext","_init_friendSubject","_init_compact","_init_failedImageSrc","_init_friendState","_init_friendMessage","_init_friendError","_defineProperty","event","preventDefault","friendState","subject","friendSubject","request","friendRequest","clearFriendMessage","viewer","currentUser","Error","loginRequired","showFriendMessage","success","error","context","editContext","profileData","viewerMode","dispatchEvent","CustomEvent","bubbles","composed","detail","subjectUri","value","onSaved","catch","console","failedImageSrc","currentTarget","getAttribute","_classPrivateFieldGet","v","_classPrivateFieldSet","compact","friendMessage","friendError","connectedCallback","friendRequestInterrupted","startFriendCheck","disconnectedCallback","clearTimeout","friendMessageTimer","willUpdate","changed","has","get","imageSrc","sameTerm","then","exists","message","setTimeout","updateComplete","shadowRoot","querySelector","focus","render","profile","phone","textValue","primaryPhone","valueNode","replace","email","primaryEmail","dateOfBirth","displayDate","showImage","showFriend","name","handleImageError","pronouns","jobTitle","handleAddFriend","add","handleEdit","renderEditIcon","renderLine","location","icon","renderIcon","e","c","_initClass","_applyDecs","_Class","_identity","default","raw","trim","isoDate","match","year","month","day","dmyDate","styles","ProfileHeading_styles_default","_Class","_ProfileHeading3","_A","_B","_C","_D","_E","_F","_G","_H","_initProto","_initClass","_classDecs","_profileDataDecs","_init_profileData","_editContextDecs","_init_editContext","_friendSubjectDecs","_init_friendSubject","_compactDecs","_init_compact","_failedImageSrcDecs","_init_failedImageSrc","_friendStateDecs","_init_friendState","_friendMessageDecs","_init_friendMessage","_friendErrorDecs","_init_friendError","_ProfileHeading2","_ref","_classPrivateFieldInitSpec","a","_checkPrivateRedeclaration","_classPrivateFieldSet","s","_assertClassBrand","r","_classPrivateFieldGet","_defineProperty","_toPropertyKey","t","_applyDecs","i","n","o","c","applyDec","m","h","y","v","g","b","u","w","S","A","d","p","_setFunctionName","P","j","D","I","F","l","f","N","_checkInRHS","_toPrimitive","e","_identity","customElement","_ProfileHeading","property","state","WebComponent","args","event","subject","request","viewer","authn","friendTexts","addFriend","error","context","createHeadingEditDialog","store","changed","checkFriend","exists","formatDisplayError","message","profile","phone","textValue","email","dateOfBirth","displayDate","showImage","showFriend","nothing","value","icon","raw","isoDate","year","month","day","dmyDate"],"sources":["../../../src/components/profile-heading/ProfileHeading.ts"],"sourcesContent":["import { authn, store } from 'solid-logic'\nimport type { NamedNode, Node } from 'rdflib'\nimport { customElement, WebComponent } from 'solid-ui'\nimport { html, nothing, type PropertyValues, type TemplateResult } from 'lit'\nimport { property, state } from 'lit/decorators.js'\nimport { createHeadingEditDialog } from './editor/sections/heading/HeadingEditDialog'\nimport type { ProfileDetails, ProfilePresentation } from './editor/sections/heading/types'\nimport type { PointDetails } from './editor/sections/contactInfo/types'\nimport type { ViewerMode } from '../../types'\nimport { addFriend, checkFriend, friendTexts } from './friendActions'\nimport { formatDisplayError } from './editor/utils/errorDisplay'\nimport 'solid-ui/components/button'\nimport '~icons/lucide/cake'\nimport '~icons/lucide/circle-user-round'\nimport '~icons/lucide/mail'\nimport '~icons/lucide/map-pin'\nimport '~icons/lucide/pencil'\nimport '~icons/lucide/phone'\nimport '~icons/lucide/user-round-plus'\nimport styles from './ProfileHeading.styles.css'\n\nexport type ProfileHeadingPoint = Pick<PointDetails, 'valueNode'>\n\n// The heading renders a subset of the shared presentation model used by the editor.\nexport type ProfileHeadingData =\n Pick<ProfilePresentation, 'name' | 'imageSrc' | 'location' | 'pronouns' | 'dateOfBirth' | 'jobTitle'> & {\n primaryPhone?: ProfileHeadingPoint\n primaryEmail?: ProfileHeadingPoint\n }\n\nexport interface ProfileHeadingEditContext {\n subject: NamedNode\n profileData: ProfileDetails\n viewerMode: ViewerMode\n onSaved: () => Promise<void> | void\n}\n\n@customElement('solid-panes-profile-heading')\nexport default class ProfileHeading extends WebComponent {\n static styles = styles\n\n @property({ attribute: false })\n accessor profileData: ProfileHeadingData | undefined = undefined\n\n @property({ attribute: false })\n accessor editContext: ProfileHeadingEditContext | undefined = undefined\n\n @property({ attribute: false })\n accessor friendSubject: NamedNode | undefined = undefined\n\n @property({ type: Boolean, reflect: true })\n accessor compact = false\n\n @state()\n accessor failedImageSrc: string | undefined = undefined\n\n @state()\n accessor friendState: 'loading' | 'available' | 'exists' | 'saving' | 'error' = 'loading'\n\n @state()\n accessor friendMessage = ''\n\n @state()\n accessor friendError = false\n\n private friendRequest = 0\n private friendRequestInterrupted = false\n private friendMessageTimer: ReturnType<typeof setTimeout> | undefined\n\n connectedCallback (): void {\n super.connectedCallback()\n if (this.friendRequestInterrupted) {\n this.friendRequestInterrupted = false\n this.startFriendCheck()\n }\n }\n\n disconnectedCallback (): void {\n super.disconnectedCallback()\n this.friendRequest++\n if (this.friendState === 'loading' || this.friendState === 'saving') {\n this.friendRequestInterrupted = true\n }\n this.clearFriendMessage()\n }\n\n private clearFriendMessage (): void {\n clearTimeout(this.friendMessageTimer)\n this.friendMessageTimer = undefined\n this.friendMessage = ''\n }\n\n protected willUpdate (changed: PropertyValues<this>): void {\n super.willUpdate(changed)\n if (changed.has('profileData') && changed.get('profileData')?.imageSrc !== this.profileData?.imageSrc) {\n this.failedImageSrc = undefined\n }\n if (!changed.has('friendSubject')) return\n this.friendRequestInterrupted = false\n this.startFriendCheck()\n }\n\n private startFriendCheck (): void {\n const request = ++this.friendRequest\n this.friendState = 'loading'\n this.clearFriendMessage()\n this.friendError = false\n const subject = this.friendSubject\n const viewer = authn.currentUser()\n if (!subject || !viewer || viewer.sameTerm(subject)) return\n\n checkFriend(viewer, subject).then((exists) => {\n if (request !== this.friendRequest || this.friendSubject !== subject) return\n this.friendState = exists ? 'exists' : 'available'\n }).catch((error: unknown) => {\n if (request !== this.friendRequest || this.friendSubject !== subject) return\n this.friendState = 'error'\n this.showFriendMessage(error, true)\n })\n }\n\n private async showFriendMessage (message: unknown, error: boolean): Promise<void> {\n this.clearFriendMessage()\n this.friendMessage = formatDisplayError(message)\n this.friendError = error\n this.friendMessageTimer = setTimeout(() => {\n this.clearFriendMessage()\n }, 10000)\n await this.updateComplete\n this.shadowRoot?.querySelector<HTMLElement>('.friend-message')?.focus()\n }\n\n private handleAddFriend = async (event: Event): Promise<void> => {\n event.preventDefault()\n if (this.friendState !== 'available' && this.friendState !== 'error') return\n const subject = this.friendSubject\n if (!subject) return\n const request = this.friendRequest\n this.friendState = 'saving'\n this.clearFriendMessage()\n try {\n const viewer = authn.currentUser()\n if (!viewer) throw new Error(friendTexts.loginRequired)\n await addFriend(viewer, subject)\n if (request !== this.friendRequest || this.friendSubject !== subject) return\n this.friendState = 'exists'\n await this.showFriendMessage(friendTexts.success, false)\n } catch (error: unknown) {\n if (request !== this.friendRequest || this.friendSubject !== subject) return\n this.friendState = 'error'\n await this.showFriendMessage(error, true)\n }\n }\n\n private handleEdit = (event: Event) => {\n const context = this.editContext\n if (!context) return\n\n createHeadingEditDialog(\n event,\n store,\n context.subject,\n context.profileData,\n context.viewerMode,\n async () => {\n this.dispatchEvent(new CustomEvent('profile-heading-saved', {\n bubbles: true,\n composed: true,\n detail: { subjectUri: context.subject.value }\n }))\n await context.onSaved()\n }\n ).catch((error: unknown) => {\n console.error('Failed to edit profile heading.', error)\n })\n }\n\n private handleImageError = (event: Event) => {\n this.failedImageSrc = (event.currentTarget as HTMLImageElement).getAttribute('src') ?? undefined\n }\n\n render (): TemplateResult<1> {\n const profile = this.profileData\n if (!profile) return html``\n\n const phone = textValue(profile.primaryPhone?.valueNode).replace(/^tel:/i, '')\n const email = textValue(profile.primaryEmail?.valueNode).replace(/^mailto:/i, '')\n const dateOfBirth = displayDate(profile.dateOfBirth)\n const showImage = Boolean(profile.imageSrc && this.failedImageSrc !== profile.imageSrc)\n const viewer = authn.currentUser()\n const showFriend = Boolean(this.friendSubject && viewer && !viewer.sameTerm(this.friendSubject))\n\n return html`\n <section class=\"profile-heading\" aria-labelledby=\"profile-heading-name\">\n <div class=\"avatar\">\n <div class=\"image-frame ${showImage ? '' : 'image-frame--fallback'}\">\n ${showImage\n ? html`<img\n class=\"hero\"\n src=${profile.imageSrc}\n alt=${profile.name}\n width=\"140\"\n height=\"140\"\n loading=\"eager\"\n @error=${this.handleImageError}\n />`\n : nothing}\n <div class=\"hero-fallback\" role=\"img\" aria-label=${profile.name}>\n <icon-lucide-circle-user-round aria-hidden=\"true\"></icon-lucide-circle-user-round>\n </div>\n </div>\n </div>\n\n <div class=\"info\">\n <header class=\"header-bar\">\n <div class=\"identity\" role=\"group\" aria-label=${this.compact ? 'Name' : 'Name and pronouns'}>\n <h1 id=\"profile-heading-name\" class=\"name\">${profile.name}</h1>\n ${profile.pronouns ? html`<span class=\"pronouns\" ?hidden=${this.compact}>(${profile.pronouns})</span>` : nothing}\n </div>\n ${profile.jobTitle ? html`<div class=\"role\">${profile.jobTitle}</div>` : nothing}\n </header>\n </div>\n\n ${(this.editContext || showFriend) && !this.compact\n ? html`\n <div class=\"profile__actions profile__heading-edit-action\">\n ${showFriend\n ? html`\n <div class=\"profile-friends-button__section\" role=\"group\" aria-label=\"Friend relationship actions\">\n <solid-ui-button\n variant=\"secondary\"\n class=\"profile__btn-friends\"\n ?disabled=${this.friendState === 'loading' || this.friendState === 'saving' || this.friendState === 'exists'}\n aria-busy=${this.friendState === 'loading' || this.friendState === 'saving' ? 'true' : 'false'}\n @click=${this.handleAddFriend}\n >${this.friendState === 'exists'\n ? nothing\n : html`<icon-lucide-user-round-plus slot=\"icon\" class=\"profile__btn-friends-icon\" aria-hidden=\"true\"></icon-lucide-user-round-plus>`}${this.friendState === 'exists' ? friendTexts.exists : friendTexts.add}</solid-ui-button>\n ${this.friendMessage\n ? html`\n <div class=\"friend-message\" role=${this.friendError ? 'alert' : 'status'}\n aria-live=${this.friendError ? 'assertive' : 'polite'} tabindex=\"0\">\n ${this.friendMessage}\n </div>`\n : nothing}\n </div>\n `\n : nothing}\n ${this.editContext\n ? html`\n <solid-ui-button\n variant=\"tertiary\"\n class=\"profile-section-collapsible__edit-button desktop-edit-button\"\n aria-label=\"Add or edit heading information\"\n @click=${this.handleEdit}\n >\n <span slot=\"left-icon\" class=\"profile-section-collapsible__action-label profile__add-more-icon\" aria-hidden=\"true\">\n ${this.renderEditIcon()}\n </span>\n <span class=\"profile-section-collapsible__action-label edit-label\">Edit</span>\n </solid-ui-button>\n <solid-ui-button\n variant=\"ghost\"\n class=\"profile-section-collapsible__edit-button mobile-edit-button\"\n aria-label=\"Add or edit heading information\"\n @click=${this.handleEdit}\n >\n <span slot=\"icon\" class=\"profile-section-collapsible__edit-icon\" aria-hidden=\"true\">\n ${this.renderEditIcon()}\n </span>\n </solid-ui-button>\n `\n : nothing}\n </div>\n `\n : nothing}\n\n <div class=\"details-collapse\" aria-hidden=${this.compact ? 'true' : 'false'} ?inert=${this.compact}>\n <div class=\"details\">\n <div class=\"detail-row\" role=\"group\" aria-label=\"Additional profile information\">\n ${this.renderLine(dateOfBirth, 'birthday')}\n ${this.renderLine(profile.location, 'location')}\n </div>\n <div class=\"detail-row\" role=\"group\" aria-label=\"Contact information\">\n ${this.renderLine(phone, 'phone')}\n ${this.renderLine(email, 'email')}\n </div>\n </div>\n </div>\n </section>\n `\n }\n\n private renderLine (value: string | undefined, icon: 'birthday' | 'location' | 'phone' | 'email') {\n if (!value) return nothing\n\n return html`\n <div class=\"detail-item\">\n <span class=\"detail-icon\" aria-hidden=\"true\">\n ${this.renderIcon(icon)}\n </span>\n <span class=\"detail-value\">${value}</span>\n </div>\n `\n }\n\n private renderIcon (icon: 'birthday' | 'location' | 'phone' | 'email'): TemplateResult {\n switch (icon) {\n case 'birthday':\n return html`<icon-lucide-cake aria-hidden=\"true\"></icon-lucide-cake>`\n case 'location':\n return html`<icon-lucide-map-pin aria-hidden=\"true\"></icon-lucide-map-pin>`\n case 'phone':\n return html`<icon-lucide-phone aria-hidden=\"true\"></icon-lucide-phone>`\n case 'email':\n return html`<icon-lucide-mail aria-hidden=\"true\"></icon-lucide-mail>`\n }\n }\n\n private renderEditIcon (): TemplateResult {\n return html`<icon-lucide-pencil aria-hidden=\"true\"></icon-lucide-pencil>`\n }\n}\n\nfunction textValue (value: Node | undefined): string {\n return value?.value ?? ''\n}\n\nfunction displayDate (value?: string): string {\n const raw = (value || '').trim()\n const isoDate = raw.match(/^(\\d{4})-(\\d{2})-(\\d{2})/)\n if (isoDate) {\n const [, year, month, day] = isoDate\n return `${day}-${month}-${year}`\n }\n\n const dmyDate = raw.match(/^(\\d{2})[/-](\\d{2})[/-](\\d{4})$/)\n if (dmyDate) {\n const [, day, month, year] = dmyDate\n return `${day}-${month}-${year}`\n }\n\n return raw\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"ProfileHeading.esm.js","names":["authn","store","customElement","WebComponent","html","nothing","property","state","createHeadingEditDialog","addFriend","checkFriend","friendTexts","formatDisplayError","styles","_classDecs","_ProfileHeading","_ProfileHeading2","_A","WeakMap","_B","_C","_D","_E","_F","_G","_H","_ref","_profileDataDecs","attribute","_editContextDecs","_friendSubjectDecs","_compactDecs","type","Boolean","reflect","_failedImageSrcDecs","_friendStateDecs","_friendMessageDecs","_friendErrorDecs","_ProfileHeading3","ProfileHeading","constructor","args","_classPrivateFieldInitSpec","_initProto","_init_profileData","undefined","_init_editContext","_init_friendSubject","_init_compact","_init_failedImageSrc","_init_friendState","_init_friendMessage","_init_friendError","_defineProperty","event","preventDefault","friendState","subject","friendSubject","request","friendRequest","clearFriendMessage","viewer","currentUser","Error","loginRequired","showFriendMessage","success","error","context","editContext","profileData","viewerMode","dispatchEvent","CustomEvent","bubbles","composed","detail","subjectUri","value","onSaved","catch","console","failedImageSrc","currentTarget","getAttribute","_classPrivateFieldGet","v","_classPrivateFieldSet","compact","friendMessage","friendError","connectedCallback","friendRequestInterrupted","startFriendCheck","disconnectedCallback","clearTimeout","friendMessageTimer","willUpdate","changed","has","get","imageSrc","sameTerm","then","exists","message","setTimeout","updateComplete","shadowRoot","querySelector","focus","render","profile","phone","textValue","primaryPhone","valueNode","replace","email","primaryEmail","dateOfBirth","displayDate","showImage","showFriend","name","handleImageError","pronouns","jobTitle","handleAddFriend","add","handleEdit","renderEditIcon","renderLine","location","icon","renderIcon","e","c","_initClass","_applyDecs","_Class","_identity","default","raw","trim","isoDate","match","year","month","day","dmyDate","styles","ProfileHeading_styles_default","_Class","_ProfileHeading3","_A","_B","_C","_D","_E","_F","_G","_H","_initProto","_initClass","_classDecs","_profileDataDecs","_init_profileData","_editContextDecs","_init_editContext","_friendSubjectDecs","_init_friendSubject","_compactDecs","_init_compact","_failedImageSrcDecs","_init_failedImageSrc","_friendStateDecs","_init_friendState","_friendMessageDecs","_init_friendMessage","_friendErrorDecs","_init_friendError","_ProfileHeading2","_ref","_classPrivateFieldInitSpec","a","_checkPrivateRedeclaration","_classPrivateFieldSet","s","_assertClassBrand","r","_classPrivateFieldGet","_defineProperty","_toPropertyKey","t","_applyDecs","i","n","o","c","applyDec","m","h","y","v","g","b","u","w","S","A","d","p","_setFunctionName","P","j","D","I","F","l","f","N","_checkInRHS","_toPrimitive","e","_identity","customElement","_ProfileHeading","property","state","WebComponent","args","event","subject","request","viewer","authn","friendTexts","addFriend","error","context","createHeadingEditDialog","store","changed","checkFriend","exists","formatDisplayError","message","profile","phone","textValue","email","dateOfBirth","displayDate","showImage","showFriend","nothing","value","icon","raw","isoDate","year","month","day","dmyDate"],"sources":["../../../src/components/profile-heading/ProfileHeading.ts"],"sourcesContent":["import { authn, store } from 'solid-logic'\nimport type { NamedNode, Node } from 'rdflib'\nimport { customElement, WebComponent } from 'solid-ui'\nimport { html, nothing, type PropertyValues, type TemplateResult } from 'lit'\nimport { property, state } from 'lit/decorators.js'\nimport { createHeadingEditDialog } from './editor/sections/heading/HeadingEditDialog'\nimport type { ProfileDetails, ProfilePresentation } from './editor/sections/heading/types'\nimport type { PointDetails } from './editor/sections/contactInfo/types'\nimport type { ViewerMode } from '../../types'\nimport { addFriend, checkFriend, friendTexts } from './friendActions'\nimport { formatDisplayError } from './editor/utils/errorDisplay'\nimport 'solid-ui/components/button'\nimport '~icons/lucide/cake'\nimport '~icons/lucide/circle-user-round'\nimport '~icons/lucide/mail'\nimport '~icons/lucide/map-pin'\nimport '~icons/lucide/pencil'\nimport '~icons/lucide/phone'\nimport '~icons/lucide/user-round-plus'\nimport styles from './ProfileHeading.styles.css'\n\nexport type ProfileHeadingPoint = Pick<PointDetails, 'valueNode'>\n\n// The heading renders a subset of the shared presentation model used by the editor.\nexport type ProfileHeadingData =\n Pick<ProfilePresentation, 'name' | 'imageSrc' | 'location' | 'pronouns' | 'dateOfBirth' | 'jobTitle'> & {\n primaryPhone?: ProfileHeadingPoint\n primaryEmail?: ProfileHeadingPoint\n }\n\nexport interface ProfileHeadingEditContext {\n subject: NamedNode\n profileData: ProfileDetails\n viewerMode: ViewerMode\n onSaved: () => Promise<void> | void\n}\n\n@customElement('solid-panes-profile-heading')\nexport default class ProfileHeading extends WebComponent {\n static styles = styles\n\n @property({ attribute: false })\n accessor profileData: ProfileHeadingData | undefined = undefined\n\n @property({ attribute: false })\n accessor editContext: ProfileHeadingEditContext | undefined = undefined\n\n @property({ attribute: false })\n accessor friendSubject: NamedNode | undefined = undefined\n\n @property({ type: Boolean, reflect: true })\n accessor compact = false\n\n @state()\n accessor failedImageSrc: string | undefined = undefined\n\n @state()\n accessor friendState: 'loading' | 'available' | 'exists' | 'saving' | 'error' = 'loading'\n\n @state()\n accessor friendMessage = ''\n\n @state()\n accessor friendError = false\n\n private friendRequest = 0\n private friendRequestInterrupted = false\n private friendMessageTimer: ReturnType<typeof setTimeout> | undefined\n\n connectedCallback (): void {\n super.connectedCallback()\n if (this.friendRequestInterrupted) {\n this.friendRequestInterrupted = false\n this.startFriendCheck()\n }\n }\n\n disconnectedCallback (): void {\n super.disconnectedCallback()\n this.friendRequest++\n if (this.friendState === 'loading' || this.friendState === 'saving') {\n this.friendRequestInterrupted = true\n }\n this.clearFriendMessage()\n }\n\n private clearFriendMessage (): void {\n clearTimeout(this.friendMessageTimer)\n this.friendMessageTimer = undefined\n this.friendMessage = ''\n }\n\n protected willUpdate (changed: PropertyValues<this>): void {\n super.willUpdate(changed)\n if (changed.has('profileData') && changed.get('profileData')?.imageSrc !== this.profileData?.imageSrc) {\n this.failedImageSrc = undefined\n }\n if (!changed.has('friendSubject')) return\n this.friendRequestInterrupted = false\n this.startFriendCheck()\n }\n\n private startFriendCheck (): void {\n const request = ++this.friendRequest\n this.friendState = 'loading'\n this.clearFriendMessage()\n this.friendError = false\n const subject = this.friendSubject\n const viewer = authn.currentUser()\n if (!subject || !viewer || viewer.sameTerm(subject)) return\n\n checkFriend(viewer, subject).then((exists) => {\n if (request !== this.friendRequest || this.friendSubject !== subject) return\n this.friendState = exists ? 'exists' : 'available'\n }).catch((error: unknown) => {\n if (request !== this.friendRequest || this.friendSubject !== subject) return\n this.friendState = 'error'\n this.showFriendMessage(error, true)\n })\n }\n\n private async showFriendMessage (message: unknown, error: boolean): Promise<void> {\n this.clearFriendMessage()\n this.friendMessage = formatDisplayError(message)\n this.friendError = error\n this.friendMessageTimer = setTimeout(() => {\n this.clearFriendMessage()\n }, 10000)\n await this.updateComplete\n this.shadowRoot?.querySelector<HTMLElement>('.friend-message')?.focus()\n }\n\n private handleAddFriend = async (event: Event): Promise<void> => {\n event.preventDefault()\n if (this.friendState !== 'available' && this.friendState !== 'error') return\n const subject = this.friendSubject\n if (!subject) return\n const request = this.friendRequest\n this.friendState = 'saving'\n this.clearFriendMessage()\n try {\n const viewer = authn.currentUser()\n if (!viewer) throw new Error(friendTexts.loginRequired)\n await addFriend(viewer, subject)\n if (request !== this.friendRequest || this.friendSubject !== subject) return\n this.friendState = 'exists'\n await this.showFriendMessage(friendTexts.success, false)\n } catch (error: unknown) {\n if (request !== this.friendRequest || this.friendSubject !== subject) return\n this.friendState = 'error'\n await this.showFriendMessage(error, true)\n }\n }\n\n private handleEdit = (event: Event) => {\n const context = this.editContext\n if (!context) return\n\n createHeadingEditDialog(\n event,\n store,\n context.subject,\n context.profileData,\n context.viewerMode,\n async () => {\n this.dispatchEvent(new CustomEvent('profile-heading-saved', {\n bubbles: true,\n composed: true,\n detail: { subjectUri: context.subject.value }\n }))\n await context.onSaved()\n }\n ).catch((error: unknown) => {\n console.error('Failed to edit profile heading.', error)\n })\n }\n\n private handleImageError = (event: Event) => {\n this.failedImageSrc = (event.currentTarget as HTMLImageElement).getAttribute('src') ?? undefined\n }\n\n render (): TemplateResult<1> {\n const profile = this.profileData\n if (!profile) return html``\n\n const phone = textValue(profile.primaryPhone?.valueNode).replace(/^tel:/i, '')\n const email = textValue(profile.primaryEmail?.valueNode).replace(/^mailto:/i, '')\n const dateOfBirth = displayDate(profile.dateOfBirth)\n const showImage = Boolean(profile.imageSrc && this.failedImageSrc !== profile.imageSrc)\n const viewer = authn.currentUser()\n const showFriend = Boolean(this.friendSubject && viewer && !viewer.sameTerm(this.friendSubject))\n\n return html`\n <section class=\"profile-heading\" aria-labelledby=\"profile-heading-name\">\n <div class=\"avatar\">\n <div class=\"image-frame ${showImage ? '' : 'image-frame--fallback'}\">\n ${showImage\n ? html`<img\n class=\"hero\"\n src=${profile.imageSrc}\n alt=${profile.name}\n width=\"140\"\n height=\"140\"\n loading=\"eager\"\n @error=${this.handleImageError}\n />`\n : nothing}\n <div class=\"hero-fallback\" role=\"img\" aria-label=${profile.name}>\n <icon-lucide-circle-user-round aria-hidden=\"true\"></icon-lucide-circle-user-round>\n </div>\n </div>\n </div>\n\n <div class=\"info\">\n <header class=\"header-bar\">\n <div class=\"identity\" role=\"group\" aria-label=${this.compact ? 'Name' : 'Name and pronouns'}>\n <h1 id=\"profile-heading-name\" class=\"name\">${profile.name}</h1>\n ${profile.pronouns ? html`<span class=\"pronouns\" ?hidden=${this.compact}>(${profile.pronouns})</span>` : nothing}\n </div>\n ${profile.jobTitle ? html`<div class=\"role\">${profile.jobTitle}</div>` : nothing}\n </header>\n </div>\n\n ${(this.editContext && !this.compact) || showFriend\n ? html`\n <div class=\"profile__actions profile__heading-edit-action\">\n ${showFriend\n ? html`\n <div class=\"profile-friends-button__section\" role=\"group\" aria-label=\"Friend relationship actions\">\n <solid-ui-button\n variant=\"secondary\"\n class=\"profile__btn-friends\"\n ?disabled=${this.friendState === 'loading' || this.friendState === 'saving' || this.friendState === 'exists'}\n aria-busy=${this.friendState === 'loading' || this.friendState === 'saving' ? 'true' : 'false'}\n @click=${this.handleAddFriend}\n >${this.friendState === 'exists'\n ? nothing\n : html`<icon-lucide-user-round-plus slot=\"icon\" class=\"profile__btn-friends-icon\" aria-hidden=\"true\"></icon-lucide-user-round-plus>`}${this.friendState === 'exists' ? friendTexts.exists : friendTexts.add}</solid-ui-button>\n ${this.friendMessage\n ? html`\n <div class=\"friend-message\" role=${this.friendError ? 'alert' : 'status'}\n aria-live=${this.friendError ? 'assertive' : 'polite'} tabindex=\"0\">\n ${this.friendMessage}\n </div>`\n : nothing}\n </div>\n `\n : nothing}\n ${this.editContext && !this.compact\n ? html`\n <solid-ui-button\n variant=\"tertiary\"\n class=\"profile-section-collapsible__edit-button desktop-edit-button\"\n aria-label=\"Add or edit heading information\"\n @click=${this.handleEdit}\n >\n <span slot=\"left-icon\" class=\"profile-section-collapsible__action-label profile__add-more-icon\" aria-hidden=\"true\">\n ${this.renderEditIcon()}\n </span>\n <span class=\"profile-section-collapsible__action-label edit-label\">Edit</span>\n </solid-ui-button>\n <solid-ui-button\n variant=\"ghost\"\n class=\"profile-section-collapsible__edit-button mobile-edit-button\"\n aria-label=\"Add or edit heading information\"\n @click=${this.handleEdit}\n >\n <span slot=\"icon\" class=\"profile-section-collapsible__edit-icon\" aria-hidden=\"true\">\n ${this.renderEditIcon()}\n </span>\n </solid-ui-button>\n `\n : nothing}\n </div>\n `\n : nothing}\n\n <div class=\"details-collapse\" aria-hidden=${this.compact ? 'true' : 'false'} ?inert=${this.compact}>\n <div class=\"details\">\n <div class=\"detail-row\" role=\"group\" aria-label=\"Additional profile information\">\n ${this.renderLine(dateOfBirth, 'birthday')}\n ${this.renderLine(profile.location, 'location')}\n </div>\n <div class=\"detail-row\" role=\"group\" aria-label=\"Contact information\">\n ${this.renderLine(phone, 'phone')}\n ${this.renderLine(email, 'email')}\n </div>\n </div>\n </div>\n </section>\n `\n }\n\n private renderLine (value: string | undefined, icon: 'birthday' | 'location' | 'phone' | 'email') {\n if (!value) return nothing\n\n return html`\n <div class=\"detail-item\">\n <span class=\"detail-icon\" aria-hidden=\"true\">\n ${this.renderIcon(icon)}\n </span>\n <span class=\"detail-value\">${value}</span>\n </div>\n `\n }\n\n private renderIcon (icon: 'birthday' | 'location' | 'phone' | 'email'): TemplateResult {\n switch (icon) {\n case 'birthday':\n return html`<icon-lucide-cake aria-hidden=\"true\"></icon-lucide-cake>`\n case 'location':\n return html`<icon-lucide-map-pin aria-hidden=\"true\"></icon-lucide-map-pin>`\n case 'phone':\n return html`<icon-lucide-phone aria-hidden=\"true\"></icon-lucide-phone>`\n case 'email':\n return html`<icon-lucide-mail aria-hidden=\"true\"></icon-lucide-mail>`\n }\n }\n\n private renderEditIcon (): TemplateResult {\n return html`<icon-lucide-pencil aria-hidden=\"true\"></icon-lucide-pencil>`\n }\n}\n\nfunction textValue (value: Node | undefined): string {\n return value?.value ?? ''\n}\n\nfunction displayDate (value?: string): string {\n const raw = (value || '').trim()\n const isoDate = raw.match(/^(\\d{4})-(\\d{2})-(\\d{2})/)\n if (isoDate) {\n const [, year, month, day] = isoDate\n return `${day}-${month}-${year}`\n }\n\n const dmyDate = raw.match(/^(\\d{2})[/-](\\d{2})[/-](\\d{4})$/)\n if (dmyDate) {\n const [, day, month, year] = dmyDate\n return `${day}-${month}-${year}`\n }\n\n return raw\n}\n"],"mappings":"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"}
@@ -1,2 +1,2 @@
1
- var e=require("lit").css`:host{--profile-avatar-size:8.75rem;--profile-fallback-padding:36.4px;width:100%;color:var(--color-text-secondary,#4a5565);font-family:inherit;display:block}.profile-heading{box-sizing:border-box;background:var(--solid-ui-color-white,#fff);border:1px solid var(--solid-ui-color-slate-200,#e2e8f0);border-radius:5px;grid-template-columns:auto minmax(0,1fr) auto;grid-template-areas:\"avatar info edit\"\"avatar details details\";align-items:start;gap:20px;width:100%;padding:25px;transition:box-shadow .2s,transform .2s,padding .3s,row-gap .3s;display:grid;overflow-x:clip}.profile-heading:hover{box-shadow:0 8px 10px #7c4dff1a}.avatar{grid-area:avatar}.image-frame{width:var(--profile-avatar-size);aspect-ratio:1;place-items:center;transition:width .3s;display:grid;position:relative;overflow:hidden}.image-frame--fallback{border:1px dashed var(--solid-ui-color-slate-200,#e2e8f0);background:var(--solid-ui-color-slate-50,#f8fafc);box-sizing:border-box}.hero{border:1px solid var(--solid-ui-color-primary,#7c4dff);background:var(--color-surface-placeholder,var(--gray-300,#d1d5dc)) 50% / cover no-repeat;object-fit:cover;object-position:center;box-sizing:border-box;border-radius:10px;width:100%;height:100%;position:absolute;inset:0}.hero-fallback{width:100%;height:100%;padding:0 var(--profile-fallback-padding);box-sizing:border-box;justify-content:center;align-items:center;transition:padding .3s;display:none}.hero-fallback icon-lucide-circle-user-round{color:#cbd5e1;width:100%;height:100%;display:block}.image-frame--fallback .hero-fallback{display:flex}.info{grid-area:info;min-width:0}.profile__heading-edit-action{grid-area:edit;justify-content:flex-end;place-self:flex-start end;align-items:flex-start;gap:8px;margin-bottom:0;margin-left:auto;margin-right:0;padding:0;display:flex}.profile-friends-button__section{gap:8px;max-width:16rem;display:grid}.profile__btn-friends-icon{align-self:center;width:14px;height:14px;display:block;transform:translateY(-3px)}.friend-message{text-align:center;font-size:var(--solid-ui-font-size-sm,.875rem);overflow-wrap:anywhere}.friend-message[role=alert]{color:var(--solid-ui-color-red-700,#b91c1c)}.friend-message[role=status]{color:var(--solid-ui-color-green-700,#15803d)}.profile-section-collapsible__edit-button{min-width:0}.mobile-edit-button{color:var(--solid-ui-color-primary,#7c4dff);display:none}.profile-section-collapsible__action-label{font-size:var(--solid-ui-font-size-sm,.875rem)}.profile__add-more-icon{margin-right:0;line-height:0;position:relative;top:0;transform:translateY(0)}.profile__add-more-icon icon-lucide-pencil,.profile-section-collapsible__edit-icon icon-lucide-pencil{width:14px;height:14px;display:block}.header-bar{flex-direction:column;align-items:flex-start;gap:2px;width:100%;margin:0;padding:0;display:flex}.identity{flex-wrap:wrap;align-items:baseline;gap:7px;width:100%;display:flex}.name{color:var(--color-text-heading,#000);overflow-wrap:anywhere;margin:0;font-size:1.75rem;font-weight:600;line-height:1.2;display:block}.pronouns{color:var(--color-text-secondary,#4a5565);font-size:var(--solid-ui-font-size-sm,.875rem);font-weight:400;line-height:1.2}.role{width:100%;color:var(--solid-ui-color-gray-800,#101828);font-size:var(--solid-ui-font-size-lg,1.125rem);overflow-wrap:anywhere;font-weight:500;line-height:1.25}.details-collapse{grid-area:details;grid-template-rows:1fr;transition:grid-template-rows .3s,opacity .3s;display:grid}.details{width:100%;min-width:0;min-height:0;font-size:var(--font-size-sm,.875rem);flex-wrap:wrap;align-content:flex-start;align-items:flex-start;gap:12px 32px;display:flex;overflow:hidden}:host([compact]) .profile-heading{row-gap:0;padding:12.5px}:host([compact]) .image-frame{width:calc(var(--profile-avatar-size) / 2)}:host([compact]) .hero-fallback{padding-inline:calc(var(--profile-fallback-padding) / 2)}:host([compact]) .info{align-self:center}:host([compact]) .name{white-space:normal;overflow-wrap:anywhere}:host([compact]) .details-collapse{opacity:0;visibility:hidden;grid-template-rows:0fr}.pronouns[hidden]{display:none}.detail-row{grid-template-columns:repeat(2,minmax(0,1fr));align-items:start;gap:12px clamp(12px,2vw,24px);width:min(100%,544px);display:grid}.detail-item{align-items:flex-start;gap:7px;min-width:0;display:flex}.detail-icon{flex:0 0 16px;width:16px;height:16px;margin-top:1px;display:inline-flex}.detail-icon>icon-lucide-cake,.detail-icon>icon-lucide-map-pin,.detail-icon>icon-lucide-phone,.detail-icon>icon-lucide-mail{color:currentColor;width:16px;height:16px;display:block}.detail-value{overflow-wrap:anywhere;word-break:break-word;min-width:0}@media (width<=1200px){:host{--profile-avatar-size:6.5rem;--profile-fallback-padding:27px}.profile-heading{column-gap:15px}}@media (width<=768px){.profile-heading:has(.profile-friends-button__section) .name{white-space:normal;overflow-wrap:anywhere}.profile__btn-friends-icon,.profile__btn-friends[disabled]:not([aria-busy=true]){display:none}:host{--profile-avatar-size:4.375rem;--profile-fallback-padding:0px}.profile-heading{grid-template-areas:\"avatar info edit\"\"details details details\";gap:12px 8px}.profile-section-collapsible__edit-button{width:var(--solid-ui-clickable-area,42px);height:var(--solid-ui-clickable-area,42px)}.desktop-edit-button{display:none}.mobile-edit-button{display:inline-flex;position:relative;top:-12px;right:-12px}.profile-section-collapsible__edit-icon{justify-content:center;align-items:center;line-height:0;display:inline-flex}.profile-heading{column-gap:10px}.hero-fallback icon-lucide-circle-user-round{width:3rem;height:3rem;transition:width .3s,height .3s}:host([compact]) .hero-fallback icon-lucide-circle-user-round{width:1.5rem;height:1.5rem}.name{white-space:normal;overflow-wrap:anywhere;font-size:1.375rem;line-height:1.15;display:inline}.identity{gap:0}.pronouns{white-space:nowrap;margin-left:2px;font-size:.6875rem;line-height:1.1}.role{font-size:var(--solid-ui-font-size-sm,.875rem)}.details{gap:12px;font-size:.75rem}.detail-row{column-gap:2px}}@media (prefers-reduced-motion:reduce){.profile-heading,.image-frame,.hero-fallback,.hero-fallback icon-lucide-circle-user-round,.details-collapse{transition:none}}`;exports.default=e;
1
+ var e=require("lit").css`:host{--profile-avatar-size:8.75rem;--profile-fallback-padding:36.4px;width:100%;color:var(--color-text-secondary,#4a5565);font-family:inherit;display:block}.profile-heading{box-sizing:border-box;background:var(--solid-ui-color-white,#fff);border:1px solid var(--solid-ui-color-slate-200,#e2e8f0);border-radius:5px;grid-template-columns:auto minmax(0,1fr) auto;grid-template-areas:\"avatar info edit\"\"avatar details details\";align-items:start;gap:20px;width:100%;padding:25px;transition:box-shadow .2s,transform .2s,padding .3s,row-gap .3s;display:grid;overflow-x:clip}.profile-heading:hover{box-shadow:0 8px 10px #7c4dff1a}.avatar{grid-area:avatar}.image-frame{width:var(--profile-avatar-size);aspect-ratio:1;place-items:center;transition:width .3s;display:grid;position:relative;overflow:hidden}.image-frame--fallback{border:1px dashed var(--solid-ui-color-slate-200,#e2e8f0);background:var(--solid-ui-color-slate-50,#f8fafc);box-sizing:border-box}.hero{border:1px solid var(--solid-ui-color-primary,#7c4dff);background:var(--color-surface-placeholder,var(--gray-300,#d1d5dc)) 50% / cover no-repeat;object-fit:cover;object-position:center;box-sizing:border-box;border-radius:10px;width:100%;height:100%;position:absolute;inset:0}.hero-fallback{width:100%;height:100%;padding:0 var(--profile-fallback-padding);box-sizing:border-box;justify-content:center;align-items:center;transition:padding .3s;display:none}.hero-fallback icon-lucide-circle-user-round{color:#cbd5e1;width:100%;height:100%;display:block}.image-frame--fallback .hero-fallback{display:flex}.info{grid-area:info;min-width:0}.profile__heading-edit-action{grid-area:edit;justify-content:flex-end;place-self:flex-start end;align-items:flex-start;gap:8px;margin-bottom:0;margin-left:auto;margin-right:0;padding:0;display:flex}.profile-friends-button__section{gap:8px;max-width:16rem;display:grid}.profile__btn-friends-icon{align-self:center;width:14px;height:14px;display:block;transform:translateY(-3px)}.friend-message{text-align:center;font-size:var(--solid-ui-font-size-sm,.875rem);overflow-wrap:anywhere}.friend-message[role=alert]{color:var(--solid-ui-color-red-700,#b91c1c)}.friend-message[role=status]{color:var(--solid-ui-color-green-700,#15803d)}.profile-section-collapsible__edit-button{min-width:0}.mobile-edit-button{color:var(--solid-ui-color-primary,#7c4dff);display:none}.profile-section-collapsible__action-label{font-size:var(--solid-ui-font-size-sm,.875rem)}.profile__add-more-icon{margin-right:0;line-height:0;position:relative;top:0;transform:translateY(0)}.profile__add-more-icon icon-lucide-pencil,.profile-section-collapsible__edit-icon icon-lucide-pencil{width:14px;height:14px;display:block}.header-bar{flex-direction:column;align-items:flex-start;gap:2px;width:100%;margin:0;padding:0;display:flex}.identity{flex-wrap:wrap;align-items:baseline;gap:7px;width:100%;display:flex}.name{color:var(--color-text-heading,#000);overflow-wrap:anywhere;margin:0;font-size:1.75rem;font-weight:600;line-height:1.2;display:block}.pronouns{color:var(--color-text-secondary,#4a5565);font-size:var(--solid-ui-font-size-sm,.875rem);font-weight:400;line-height:1.2}.role{width:100%;color:var(--solid-ui-color-gray-800,#101828);font-size:var(--solid-ui-font-size-lg,1.125rem);overflow-wrap:anywhere;font-weight:500;line-height:1.25}.details-collapse{grid-area:details;grid-template-rows:1fr;transition:grid-template-rows .3s,opacity .3s;display:grid}.details{width:100%;min-width:0;min-height:0;font-size:var(--font-size-sm,.875rem);flex-wrap:wrap;align-content:flex-start;align-items:flex-start;gap:12px 32px;display:flex;overflow:hidden}:host([compact]) .profile-heading{row-gap:0;padding:12.5px}:host([compact]) .image-frame{width:calc(var(--profile-avatar-size) / 2)}:host([compact]) .hero-fallback{padding-inline:calc(var(--profile-fallback-padding) / 2)}:host([compact]) .info,:host([compact]) .profile__heading-edit-action{align-self:center}:host([compact]) .name{white-space:normal;overflow-wrap:anywhere}:host([compact]) .details-collapse{opacity:0;visibility:hidden;grid-template-rows:0fr}.pronouns[hidden]{display:none}.detail-row{grid-template-columns:repeat(2,minmax(0,1fr));align-items:start;gap:12px clamp(12px,2vw,24px);width:min(100%,544px);display:grid}.detail-item{align-items:flex-start;gap:7px;min-width:0;display:flex}.detail-icon{flex:0 0 16px;width:16px;height:16px;margin-top:1px;display:inline-flex}.detail-icon>icon-lucide-cake,.detail-icon>icon-lucide-map-pin,.detail-icon>icon-lucide-phone,.detail-icon>icon-lucide-mail{color:currentColor;width:16px;height:16px;display:block}.detail-value{overflow-wrap:anywhere;word-break:break-word;min-width:0}@media (width<=1200px){:host{--profile-avatar-size:6.5rem;--profile-fallback-padding:27px}.profile-heading{column-gap:15px}}@media (width<=768px){.profile-heading:has(.profile-friends-button__section) .name{white-space:normal;overflow-wrap:anywhere}.profile__btn-friends-icon,.profile__btn-friends[disabled]:not([aria-busy=true]){display:none}:host{--profile-avatar-size:4.375rem;--profile-fallback-padding:0px}.profile-heading{grid-template-areas:\"avatar info edit\"\"details details details\";gap:12px 8px}.profile-section-collapsible__edit-button{width:var(--solid-ui-clickable-area,42px);height:var(--solid-ui-clickable-area,42px)}.desktop-edit-button{display:none}.mobile-edit-button{display:inline-flex;position:relative;top:-12px;right:-12px}.profile-section-collapsible__edit-icon{justify-content:center;align-items:center;line-height:0;display:inline-flex}.profile-heading{column-gap:10px}.hero-fallback icon-lucide-circle-user-round{width:3rem;height:3rem;transition:width .3s,height .3s}:host([compact]) .hero-fallback icon-lucide-circle-user-round{width:1.5rem;height:1.5rem}.name{white-space:normal;overflow-wrap:anywhere;font-size:1.375rem;line-height:1.15;display:inline}.identity{gap:0}.pronouns{white-space:nowrap;margin-left:2px;font-size:.6875rem;line-height:1.1}.role{font-size:var(--solid-ui-font-size-sm,.875rem)}.details{gap:12px;font-size:.75rem}.detail-row{column-gap:2px}}@media (prefers-reduced-motion:reduce){.profile-heading,.image-frame,.hero-fallback,.hero-fallback icon-lucide-circle-user-round,.details-collapse{transition:none}}`;exports.default=e;
2
2
  //# sourceMappingURL=ProfileHeading.styles.cjs.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"ProfileHeading.styles.cjs.js","names":["ProfileHeading_styles_default"],"sources":["../../../src/components/profile-heading/ProfileHeading.styles.css"],"sourcesContent":[":host {\n --profile-avatar-size: 8.75rem;\n --profile-fallback-padding: 36.4px;\n display: block;\n width: 100%;\n color: var(--color-text-secondary, #4a5565);\n font-family: inherit;\n}\n\n.profile-heading {\n display: grid;\n grid-template-columns: auto minmax(0, 1fr) auto;\n grid-template-areas:\n \"avatar info edit\"\n \"avatar details details\";\n align-items: start;\n column-gap: 20px;\n row-gap: 20px;\n width: 100%;\n box-sizing: border-box;\n padding: 25px;\n overflow-x: clip;\n background: var(--solid-ui-color-white, #fff);\n border: 1px solid var(--solid-ui-color-slate-200, #e2e8f0);\n border-radius: 5px;\n transition: box-shadow 0.2s ease, transform 0.2s ease, padding 0.3s ease, row-gap 0.3s ease;\n}\n\n.profile-heading:hover {\n box-shadow: 0 8px 10px rgba(124, 77, 255, 0.1);\n}\n\n.avatar {\n grid-area: avatar;\n}\n\n.image-frame {\n position: relative;\n display: grid;\n place-items: center;\n width: var(--profile-avatar-size);\n aspect-ratio: 1;\n overflow: hidden;\n transition: width 0.3s ease;\n}\n\n.image-frame--fallback {\n border: 1px dashed var(--solid-ui-color-slate-200, #e2e8f0);\n background: var(--solid-ui-color-slate-50, #f8fafc);\n box-sizing: border-box;\n}\n\n.hero {\n position: absolute;\n inset: 0;\n width: 100%;\n height: 100%;\n border: 1px solid var(--solid-ui-color-primary, #7c4dff);\n background: var(--color-surface-placeholder, var(--gray-300, #d1d5dc)) 50% / cover no-repeat;\n object-fit: cover;\n object-position: center;\n box-sizing: border-box;\n border-radius: 10px;\n}\n\n.hero-fallback {\n display: none;\n align-items: center;\n justify-content: center;\n width: 100%;\n height: 100%;\n padding: 0 var(--profile-fallback-padding);\n box-sizing: border-box;\n transition: padding 0.3s ease;\n}\n\n.hero-fallback icon-lucide-circle-user-round {\n display: block;\n width: 100%;\n height: 100%;\n color: #cbd5e1;\n}\n\n.image-frame--fallback .hero-fallback {\n display: flex;\n}\n\n.info {\n grid-area: info;\n min-width: 0;\n}\n\n.profile__heading-edit-action {\n grid-area: edit;\n margin-left: auto;\n margin-right: 0;\n margin-bottom: 0;\n align-self: flex-start;\n justify-self: end;\n display: flex;\n justify-content: flex-end;\n align-items: flex-start;\n gap: 8px;\n padding: 0;\n}\n\n.profile-friends-button__section {\n display: grid;\n gap: 8px;\n max-width: 16rem;\n}\n\n.profile__btn-friends-icon {\n display: block;\n width: 14px;\n height: 14px;\n align-self: center;\n transform: translateY(-3px);\n}\n\n.friend-message {\n text-align: center;\n font-size: var(--solid-ui-font-size-sm, 0.875rem);\n overflow-wrap: anywhere;\n}\n\n.friend-message[role=\"alert\"] {\n color: var(--solid-ui-color-red-700, #b91c1c);\n}\n\n.friend-message[role=\"status\"] {\n color: var(--solid-ui-color-green-700, #15803d);\n}\n\n.profile-section-collapsible__edit-button {\n min-width: 0;\n}\n\n.mobile-edit-button {\n display: none;\n color: var(--solid-ui-color-primary, #7c4dff);\n}\n\n.profile-section-collapsible__action-label {\n font-size: var(--solid-ui-font-size-sm, 0.875rem);\n}\n\n.profile__add-more-icon {\n margin-right: 0;\n line-height: 0;\n position: relative;\n top: 0;\n transform: translateY(0);\n}\n\n.profile__add-more-icon icon-lucide-pencil,\n.profile-section-collapsible__edit-icon icon-lucide-pencil {\n display: block;\n width: 14px;\n height: 14px;\n}\n\n.header-bar {\n display: flex;\n flex-direction: column;\n align-items: flex-start;\n gap: 2px;\n width: 100%;\n margin: 0;\n padding: 0;\n}\n\n.identity {\n display: flex;\n align-items: baseline;\n gap: 7px;\n width: 100%;\n flex-wrap: wrap;\n}\n\n.name {\n display: block;\n margin: 0;\n color: var(--color-text-heading, #000);\n font-size: 1.75rem;\n font-weight: 600;\n line-height: 1.2;\n overflow-wrap: anywhere;\n}\n\n.pronouns {\n color: var(--color-text-secondary, #4a5565);\n font-size: var(--solid-ui-font-size-sm, 0.875rem);\n font-weight: 400;\n line-height: 1.2;\n}\n\n.role {\n width: 100%;\n color: var(--solid-ui-color-gray-800, #101828);\n font-size: var(--solid-ui-font-size-lg, 1.125rem);\n font-weight: 500;\n line-height: 1.25;\n overflow-wrap: anywhere;\n}\n\n.details-collapse {\n grid-area: details;\n display: grid;\n grid-template-rows: 1fr;\n transition: grid-template-rows 0.3s ease, opacity 0.3s ease;\n}\n\n.details {\n display: flex;\n flex-wrap: wrap;\n align-content: flex-start;\n align-items: flex-start;\n gap: 12px 32px;\n min-width: 0;\n min-height: 0;\n overflow: hidden;\n width: 100%;\n font-size: var(--font-size-sm, 0.875rem);\n}\n\n:host([compact]) .profile-heading {\n padding: 12.5px;\n row-gap: 0;\n}\n\n:host([compact]) .image-frame {\n width: calc(var(--profile-avatar-size) / 2);\n}\n\n:host([compact]) .hero-fallback {\n padding-inline: calc(var(--profile-fallback-padding) / 2);\n}\n\n:host([compact]) .info {\n align-self: center;\n}\n\n:host([compact]) .name {\n white-space: normal;\n overflow-wrap: anywhere;\n}\n\n:host([compact]) .details-collapse {\n grid-template-rows: 0fr;\n opacity: 0;\n visibility: hidden;\n}\n\n.pronouns[hidden] {\n display: none;\n}\n\n.detail-row {\n display: grid;\n grid-template-columns: repeat(2, minmax(0, 1fr));\n align-items: start;\n column-gap: clamp(12px, 2vw, 24px);\n row-gap: 12px;\n width: min(100%, 544px);\n}\n\n.detail-item {\n display: flex;\n align-items: flex-start;\n gap: 7px;\n min-width: 0;\n}\n\n.detail-icon {\n display: inline-flex;\n flex: 0 0 16px;\n width: 16px;\n height: 16px;\n margin-top: 1px;\n}\n\n.detail-icon > icon-lucide-cake,\n.detail-icon > icon-lucide-map-pin,\n.detail-icon > icon-lucide-phone,\n.detail-icon > icon-lucide-mail {\n display: block;\n width: 16px;\n height: 16px;\n color: currentColor;\n}\n\n.detail-value {\n min-width: 0;\n overflow-wrap: anywhere;\n word-break: break-word;\n}\n\n@media (max-width: 1200px) {\n :host {\n --profile-avatar-size: 6.5rem;\n --profile-fallback-padding: 27px;\n }\n\n .profile-heading {\n column-gap: 15px;\n }\n\n}\n\n@media (max-width: 768px) {\n .profile-heading:has(.profile-friends-button__section) .name {\n white-space: normal;\n overflow-wrap: anywhere;\n }\n\n .profile__btn-friends-icon {\n display: none;\n }\n\n .profile__btn-friends[disabled]:not([aria-busy=\"true\"]) {\n display: none;\n }\n\n :host {\n --profile-avatar-size: 4.375rem;\n --profile-fallback-padding: 0px;\n }\n\n .profile-heading {\n grid-template-areas:\n \"avatar info edit\"\n \"details details details\";\n column-gap: 8px;\n row-gap: 12px;\n }\n\n .profile-section-collapsible__edit-button {\n width: var(--solid-ui-clickable-area, 42px);\n height: var(--solid-ui-clickable-area, 42px);\n }\n\n .desktop-edit-button {\n display: none;\n }\n\n .mobile-edit-button {\n display: inline-flex;\n position: relative;\n top: -12px;\n right: -12px;\n }\n\n .profile-section-collapsible__edit-icon {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n line-height: 0;\n }\n\n .profile-heading {\n column-gap: 10px;\n }\n\n .hero-fallback icon-lucide-circle-user-round {\n width: 3rem;\n height: 3rem;\n transition: width 0.3s ease, height 0.3s ease;\n }\n\n :host([compact]) .hero-fallback icon-lucide-circle-user-round {\n width: 1.5rem;\n height: 1.5rem;\n }\n\n .name {\n display: inline;\n font-size: 1.375rem;\n line-height: 1.15;\n white-space: normal;\n overflow-wrap: anywhere;\n }\n\n .identity {\n gap: 0;\n }\n\n .pronouns {\n margin-left: 2px;\n font-size: 0.6875rem;\n line-height: 1.1;\n white-space: nowrap;\n }\n\n .role {\n font-size: var(--solid-ui-font-size-sm, 0.875rem);\n }\n\n .details {\n gap: 12px;\n font-size: 0.75rem;\n }\n\n .detail-row {\n column-gap: 2px;\n }\n}\n\n@media (prefers-reduced-motion: reduce) {\n .profile-heading,\n .image-frame,\n .hero-fallback,\n .hero-fallback icon-lucide-circle-user-round,\n .details-collapse {\n transition: none;\n }\n}\n"],"mappings":""}
1
+ {"version":3,"file":"ProfileHeading.styles.cjs.js","names":["ProfileHeading_styles_default"],"sources":["../../../src/components/profile-heading/ProfileHeading.styles.css"],"sourcesContent":[":host {\n --profile-avatar-size: 8.75rem;\n --profile-fallback-padding: 36.4px;\n display: block;\n width: 100%;\n color: var(--color-text-secondary, #4a5565);\n font-family: inherit;\n}\n\n.profile-heading {\n display: grid;\n grid-template-columns: auto minmax(0, 1fr) auto;\n grid-template-areas:\n \"avatar info edit\"\n \"avatar details details\";\n align-items: start;\n column-gap: 20px;\n row-gap: 20px;\n width: 100%;\n box-sizing: border-box;\n padding: 25px;\n overflow-x: clip;\n background: var(--solid-ui-color-white, #fff);\n border: 1px solid var(--solid-ui-color-slate-200, #e2e8f0);\n border-radius: 5px;\n transition: box-shadow 0.2s ease, transform 0.2s ease, padding 0.3s ease, row-gap 0.3s ease;\n}\n\n.profile-heading:hover {\n box-shadow: 0 8px 10px rgba(124, 77, 255, 0.1);\n}\n\n.avatar {\n grid-area: avatar;\n}\n\n.image-frame {\n position: relative;\n display: grid;\n place-items: center;\n width: var(--profile-avatar-size);\n aspect-ratio: 1;\n overflow: hidden;\n transition: width 0.3s ease;\n}\n\n.image-frame--fallback {\n border: 1px dashed var(--solid-ui-color-slate-200, #e2e8f0);\n background: var(--solid-ui-color-slate-50, #f8fafc);\n box-sizing: border-box;\n}\n\n.hero {\n position: absolute;\n inset: 0;\n width: 100%;\n height: 100%;\n border: 1px solid var(--solid-ui-color-primary, #7c4dff);\n background: var(--color-surface-placeholder, var(--gray-300, #d1d5dc)) 50% / cover no-repeat;\n object-fit: cover;\n object-position: center;\n box-sizing: border-box;\n border-radius: 10px;\n}\n\n.hero-fallback {\n display: none;\n align-items: center;\n justify-content: center;\n width: 100%;\n height: 100%;\n padding: 0 var(--profile-fallback-padding);\n box-sizing: border-box;\n transition: padding 0.3s ease;\n}\n\n.hero-fallback icon-lucide-circle-user-round {\n display: block;\n width: 100%;\n height: 100%;\n color: #cbd5e1;\n}\n\n.image-frame--fallback .hero-fallback {\n display: flex;\n}\n\n.info {\n grid-area: info;\n min-width: 0;\n}\n\n.profile__heading-edit-action {\n grid-area: edit;\n margin-left: auto;\n margin-right: 0;\n margin-bottom: 0;\n align-self: flex-start;\n justify-self: end;\n display: flex;\n justify-content: flex-end;\n align-items: flex-start;\n gap: 8px;\n padding: 0;\n}\n\n.profile-friends-button__section {\n display: grid;\n gap: 8px;\n max-width: 16rem;\n}\n\n.profile__btn-friends-icon {\n display: block;\n width: 14px;\n height: 14px;\n align-self: center;\n transform: translateY(-3px);\n}\n\n.friend-message {\n text-align: center;\n font-size: var(--solid-ui-font-size-sm, 0.875rem);\n overflow-wrap: anywhere;\n}\n\n.friend-message[role=\"alert\"] {\n color: var(--solid-ui-color-red-700, #b91c1c);\n}\n\n.friend-message[role=\"status\"] {\n color: var(--solid-ui-color-green-700, #15803d);\n}\n\n.profile-section-collapsible__edit-button {\n min-width: 0;\n}\n\n.mobile-edit-button {\n display: none;\n color: var(--solid-ui-color-primary, #7c4dff);\n}\n\n.profile-section-collapsible__action-label {\n font-size: var(--solid-ui-font-size-sm, 0.875rem);\n}\n\n.profile__add-more-icon {\n margin-right: 0;\n line-height: 0;\n position: relative;\n top: 0;\n transform: translateY(0);\n}\n\n.profile__add-more-icon icon-lucide-pencil,\n.profile-section-collapsible__edit-icon icon-lucide-pencil {\n display: block;\n width: 14px;\n height: 14px;\n}\n\n.header-bar {\n display: flex;\n flex-direction: column;\n align-items: flex-start;\n gap: 2px;\n width: 100%;\n margin: 0;\n padding: 0;\n}\n\n.identity {\n display: flex;\n align-items: baseline;\n gap: 7px;\n width: 100%;\n flex-wrap: wrap;\n}\n\n.name {\n display: block;\n margin: 0;\n color: var(--color-text-heading, #000);\n font-size: 1.75rem;\n font-weight: 600;\n line-height: 1.2;\n overflow-wrap: anywhere;\n}\n\n.pronouns {\n color: var(--color-text-secondary, #4a5565);\n font-size: var(--solid-ui-font-size-sm, 0.875rem);\n font-weight: 400;\n line-height: 1.2;\n}\n\n.role {\n width: 100%;\n color: var(--solid-ui-color-gray-800, #101828);\n font-size: var(--solid-ui-font-size-lg, 1.125rem);\n font-weight: 500;\n line-height: 1.25;\n overflow-wrap: anywhere;\n}\n\n.details-collapse {\n grid-area: details;\n display: grid;\n grid-template-rows: 1fr;\n transition: grid-template-rows 0.3s ease, opacity 0.3s ease;\n}\n\n.details {\n display: flex;\n flex-wrap: wrap;\n align-content: flex-start;\n align-items: flex-start;\n gap: 12px 32px;\n min-width: 0;\n min-height: 0;\n overflow: hidden;\n width: 100%;\n font-size: var(--font-size-sm, 0.875rem);\n}\n\n:host([compact]) .profile-heading {\n padding: 12.5px;\n row-gap: 0;\n}\n\n:host([compact]) .image-frame {\n width: calc(var(--profile-avatar-size) / 2);\n}\n\n:host([compact]) .hero-fallback {\n padding-inline: calc(var(--profile-fallback-padding) / 2);\n}\n\n:host([compact]) .info {\n align-self: center;\n}\n\n:host([compact]) .profile__heading-edit-action {\n align-self: center;\n}\n\n:host([compact]) .name {\n white-space: normal;\n overflow-wrap: anywhere;\n}\n\n:host([compact]) .details-collapse {\n grid-template-rows: 0fr;\n opacity: 0;\n visibility: hidden;\n}\n\n.pronouns[hidden] {\n display: none;\n}\n\n.detail-row {\n display: grid;\n grid-template-columns: repeat(2, minmax(0, 1fr));\n align-items: start;\n column-gap: clamp(12px, 2vw, 24px);\n row-gap: 12px;\n width: min(100%, 544px);\n}\n\n.detail-item {\n display: flex;\n align-items: flex-start;\n gap: 7px;\n min-width: 0;\n}\n\n.detail-icon {\n display: inline-flex;\n flex: 0 0 16px;\n width: 16px;\n height: 16px;\n margin-top: 1px;\n}\n\n.detail-icon > icon-lucide-cake,\n.detail-icon > icon-lucide-map-pin,\n.detail-icon > icon-lucide-phone,\n.detail-icon > icon-lucide-mail {\n display: block;\n width: 16px;\n height: 16px;\n color: currentColor;\n}\n\n.detail-value {\n min-width: 0;\n overflow-wrap: anywhere;\n word-break: break-word;\n}\n\n@media (max-width: 1200px) {\n :host {\n --profile-avatar-size: 6.5rem;\n --profile-fallback-padding: 27px;\n }\n\n .profile-heading {\n column-gap: 15px;\n }\n\n}\n\n@media (max-width: 768px) {\n .profile-heading:has(.profile-friends-button__section) .name {\n white-space: normal;\n overflow-wrap: anywhere;\n }\n\n .profile__btn-friends-icon {\n display: none;\n }\n\n .profile__btn-friends[disabled]:not([aria-busy=\"true\"]) {\n display: none;\n }\n\n :host {\n --profile-avatar-size: 4.375rem;\n --profile-fallback-padding: 0px;\n }\n\n .profile-heading {\n grid-template-areas:\n \"avatar info edit\"\n \"details details details\";\n column-gap: 8px;\n row-gap: 12px;\n }\n\n .profile-section-collapsible__edit-button {\n width: var(--solid-ui-clickable-area, 42px);\n height: var(--solid-ui-clickable-area, 42px);\n }\n\n .desktop-edit-button {\n display: none;\n }\n\n .mobile-edit-button {\n display: inline-flex;\n position: relative;\n top: -12px;\n right: -12px;\n }\n\n .profile-section-collapsible__edit-icon {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n line-height: 0;\n }\n\n .profile-heading {\n column-gap: 10px;\n }\n\n .hero-fallback icon-lucide-circle-user-round {\n width: 3rem;\n height: 3rem;\n transition: width 0.3s ease, height 0.3s ease;\n }\n\n :host([compact]) .hero-fallback icon-lucide-circle-user-round {\n width: 1.5rem;\n height: 1.5rem;\n }\n\n .name {\n display: inline;\n font-size: 1.375rem;\n line-height: 1.15;\n white-space: normal;\n overflow-wrap: anywhere;\n }\n\n .identity {\n gap: 0;\n }\n\n .pronouns {\n margin-left: 2px;\n font-size: 0.6875rem;\n line-height: 1.1;\n white-space: nowrap;\n }\n\n .role {\n font-size: var(--solid-ui-font-size-sm, 0.875rem);\n }\n\n .details {\n gap: 12px;\n font-size: 0.75rem;\n }\n\n .detail-row {\n column-gap: 2px;\n }\n}\n\n@media (prefers-reduced-motion: reduce) {\n .profile-heading,\n .image-frame,\n .hero-fallback,\n .hero-fallback icon-lucide-circle-user-round,\n .details-collapse {\n transition: none;\n }\n}\n"],"mappings":""}
@@ -1,6 +1,6 @@
1
1
  import { css as e } from "lit";
2
2
  // src/components/profile-heading/ProfileHeading.styles.css
3
- var t = e`:host{--profile-avatar-size:8.75rem;--profile-fallback-padding:36.4px;width:100%;color:var(--color-text-secondary,#4a5565);font-family:inherit;display:block}.profile-heading{box-sizing:border-box;background:var(--solid-ui-color-white,#fff);border:1px solid var(--solid-ui-color-slate-200,#e2e8f0);border-radius:5px;grid-template-columns:auto minmax(0,1fr) auto;grid-template-areas:\"avatar info edit\"\"avatar details details\";align-items:start;gap:20px;width:100%;padding:25px;transition:box-shadow .2s,transform .2s,padding .3s,row-gap .3s;display:grid;overflow-x:clip}.profile-heading:hover{box-shadow:0 8px 10px #7c4dff1a}.avatar{grid-area:avatar}.image-frame{width:var(--profile-avatar-size);aspect-ratio:1;place-items:center;transition:width .3s;display:grid;position:relative;overflow:hidden}.image-frame--fallback{border:1px dashed var(--solid-ui-color-slate-200,#e2e8f0);background:var(--solid-ui-color-slate-50,#f8fafc);box-sizing:border-box}.hero{border:1px solid var(--solid-ui-color-primary,#7c4dff);background:var(--color-surface-placeholder,var(--gray-300,#d1d5dc)) 50% / cover no-repeat;object-fit:cover;object-position:center;box-sizing:border-box;border-radius:10px;width:100%;height:100%;position:absolute;inset:0}.hero-fallback{width:100%;height:100%;padding:0 var(--profile-fallback-padding);box-sizing:border-box;justify-content:center;align-items:center;transition:padding .3s;display:none}.hero-fallback icon-lucide-circle-user-round{color:#cbd5e1;width:100%;height:100%;display:block}.image-frame--fallback .hero-fallback{display:flex}.info{grid-area:info;min-width:0}.profile__heading-edit-action{grid-area:edit;justify-content:flex-end;place-self:flex-start end;align-items:flex-start;gap:8px;margin-bottom:0;margin-left:auto;margin-right:0;padding:0;display:flex}.profile-friends-button__section{gap:8px;max-width:16rem;display:grid}.profile__btn-friends-icon{align-self:center;width:14px;height:14px;display:block;transform:translateY(-3px)}.friend-message{text-align:center;font-size:var(--solid-ui-font-size-sm,.875rem);overflow-wrap:anywhere}.friend-message[role=alert]{color:var(--solid-ui-color-red-700,#b91c1c)}.friend-message[role=status]{color:var(--solid-ui-color-green-700,#15803d)}.profile-section-collapsible__edit-button{min-width:0}.mobile-edit-button{color:var(--solid-ui-color-primary,#7c4dff);display:none}.profile-section-collapsible__action-label{font-size:var(--solid-ui-font-size-sm,.875rem)}.profile__add-more-icon{margin-right:0;line-height:0;position:relative;top:0;transform:translateY(0)}.profile__add-more-icon icon-lucide-pencil,.profile-section-collapsible__edit-icon icon-lucide-pencil{width:14px;height:14px;display:block}.header-bar{flex-direction:column;align-items:flex-start;gap:2px;width:100%;margin:0;padding:0;display:flex}.identity{flex-wrap:wrap;align-items:baseline;gap:7px;width:100%;display:flex}.name{color:var(--color-text-heading,#000);overflow-wrap:anywhere;margin:0;font-size:1.75rem;font-weight:600;line-height:1.2;display:block}.pronouns{color:var(--color-text-secondary,#4a5565);font-size:var(--solid-ui-font-size-sm,.875rem);font-weight:400;line-height:1.2}.role{width:100%;color:var(--solid-ui-color-gray-800,#101828);font-size:var(--solid-ui-font-size-lg,1.125rem);overflow-wrap:anywhere;font-weight:500;line-height:1.25}.details-collapse{grid-area:details;grid-template-rows:1fr;transition:grid-template-rows .3s,opacity .3s;display:grid}.details{width:100%;min-width:0;min-height:0;font-size:var(--font-size-sm,.875rem);flex-wrap:wrap;align-content:flex-start;align-items:flex-start;gap:12px 32px;display:flex;overflow:hidden}:host([compact]) .profile-heading{row-gap:0;padding:12.5px}:host([compact]) .image-frame{width:calc(var(--profile-avatar-size) / 2)}:host([compact]) .hero-fallback{padding-inline:calc(var(--profile-fallback-padding) / 2)}:host([compact]) .info{align-self:center}:host([compact]) .name{white-space:normal;overflow-wrap:anywhere}:host([compact]) .details-collapse{opacity:0;visibility:hidden;grid-template-rows:0fr}.pronouns[hidden]{display:none}.detail-row{grid-template-columns:repeat(2,minmax(0,1fr));align-items:start;gap:12px clamp(12px,2vw,24px);width:min(100%,544px);display:grid}.detail-item{align-items:flex-start;gap:7px;min-width:0;display:flex}.detail-icon{flex:0 0 16px;width:16px;height:16px;margin-top:1px;display:inline-flex}.detail-icon>icon-lucide-cake,.detail-icon>icon-lucide-map-pin,.detail-icon>icon-lucide-phone,.detail-icon>icon-lucide-mail{color:currentColor;width:16px;height:16px;display:block}.detail-value{overflow-wrap:anywhere;word-break:break-word;min-width:0}@media (width<=1200px){:host{--profile-avatar-size:6.5rem;--profile-fallback-padding:27px}.profile-heading{column-gap:15px}}@media (width<=768px){.profile-heading:has(.profile-friends-button__section) .name{white-space:normal;overflow-wrap:anywhere}.profile__btn-friends-icon,.profile__btn-friends[disabled]:not([aria-busy=true]){display:none}:host{--profile-avatar-size:4.375rem;--profile-fallback-padding:0px}.profile-heading{grid-template-areas:\"avatar info edit\"\"details details details\";gap:12px 8px}.profile-section-collapsible__edit-button{width:var(--solid-ui-clickable-area,42px);height:var(--solid-ui-clickable-area,42px)}.desktop-edit-button{display:none}.mobile-edit-button{display:inline-flex;position:relative;top:-12px;right:-12px}.profile-section-collapsible__edit-icon{justify-content:center;align-items:center;line-height:0;display:inline-flex}.profile-heading{column-gap:10px}.hero-fallback icon-lucide-circle-user-round{width:3rem;height:3rem;transition:width .3s,height .3s}:host([compact]) .hero-fallback icon-lucide-circle-user-round{width:1.5rem;height:1.5rem}.name{white-space:normal;overflow-wrap:anywhere;font-size:1.375rem;line-height:1.15;display:inline}.identity{gap:0}.pronouns{white-space:nowrap;margin-left:2px;font-size:.6875rem;line-height:1.1}.role{font-size:var(--solid-ui-font-size-sm,.875rem)}.details{gap:12px;font-size:.75rem}.detail-row{column-gap:2px}}@media (prefers-reduced-motion:reduce){.profile-heading,.image-frame,.hero-fallback,.hero-fallback icon-lucide-circle-user-round,.details-collapse{transition:none}}`;
3
+ var t = e`:host{--profile-avatar-size:8.75rem;--profile-fallback-padding:36.4px;width:100%;color:var(--color-text-secondary,#4a5565);font-family:inherit;display:block}.profile-heading{box-sizing:border-box;background:var(--solid-ui-color-white,#fff);border:1px solid var(--solid-ui-color-slate-200,#e2e8f0);border-radius:5px;grid-template-columns:auto minmax(0,1fr) auto;grid-template-areas:\"avatar info edit\"\"avatar details details\";align-items:start;gap:20px;width:100%;padding:25px;transition:box-shadow .2s,transform .2s,padding .3s,row-gap .3s;display:grid;overflow-x:clip}.profile-heading:hover{box-shadow:0 8px 10px #7c4dff1a}.avatar{grid-area:avatar}.image-frame{width:var(--profile-avatar-size);aspect-ratio:1;place-items:center;transition:width .3s;display:grid;position:relative;overflow:hidden}.image-frame--fallback{border:1px dashed var(--solid-ui-color-slate-200,#e2e8f0);background:var(--solid-ui-color-slate-50,#f8fafc);box-sizing:border-box}.hero{border:1px solid var(--solid-ui-color-primary,#7c4dff);background:var(--color-surface-placeholder,var(--gray-300,#d1d5dc)) 50% / cover no-repeat;object-fit:cover;object-position:center;box-sizing:border-box;border-radius:10px;width:100%;height:100%;position:absolute;inset:0}.hero-fallback{width:100%;height:100%;padding:0 var(--profile-fallback-padding);box-sizing:border-box;justify-content:center;align-items:center;transition:padding .3s;display:none}.hero-fallback icon-lucide-circle-user-round{color:#cbd5e1;width:100%;height:100%;display:block}.image-frame--fallback .hero-fallback{display:flex}.info{grid-area:info;min-width:0}.profile__heading-edit-action{grid-area:edit;justify-content:flex-end;place-self:flex-start end;align-items:flex-start;gap:8px;margin-bottom:0;margin-left:auto;margin-right:0;padding:0;display:flex}.profile-friends-button__section{gap:8px;max-width:16rem;display:grid}.profile__btn-friends-icon{align-self:center;width:14px;height:14px;display:block;transform:translateY(-3px)}.friend-message{text-align:center;font-size:var(--solid-ui-font-size-sm,.875rem);overflow-wrap:anywhere}.friend-message[role=alert]{color:var(--solid-ui-color-red-700,#b91c1c)}.friend-message[role=status]{color:var(--solid-ui-color-green-700,#15803d)}.profile-section-collapsible__edit-button{min-width:0}.mobile-edit-button{color:var(--solid-ui-color-primary,#7c4dff);display:none}.profile-section-collapsible__action-label{font-size:var(--solid-ui-font-size-sm,.875rem)}.profile__add-more-icon{margin-right:0;line-height:0;position:relative;top:0;transform:translateY(0)}.profile__add-more-icon icon-lucide-pencil,.profile-section-collapsible__edit-icon icon-lucide-pencil{width:14px;height:14px;display:block}.header-bar{flex-direction:column;align-items:flex-start;gap:2px;width:100%;margin:0;padding:0;display:flex}.identity{flex-wrap:wrap;align-items:baseline;gap:7px;width:100%;display:flex}.name{color:var(--color-text-heading,#000);overflow-wrap:anywhere;margin:0;font-size:1.75rem;font-weight:600;line-height:1.2;display:block}.pronouns{color:var(--color-text-secondary,#4a5565);font-size:var(--solid-ui-font-size-sm,.875rem);font-weight:400;line-height:1.2}.role{width:100%;color:var(--solid-ui-color-gray-800,#101828);font-size:var(--solid-ui-font-size-lg,1.125rem);overflow-wrap:anywhere;font-weight:500;line-height:1.25}.details-collapse{grid-area:details;grid-template-rows:1fr;transition:grid-template-rows .3s,opacity .3s;display:grid}.details{width:100%;min-width:0;min-height:0;font-size:var(--font-size-sm,.875rem);flex-wrap:wrap;align-content:flex-start;align-items:flex-start;gap:12px 32px;display:flex;overflow:hidden}:host([compact]) .profile-heading{row-gap:0;padding:12.5px}:host([compact]) .image-frame{width:calc(var(--profile-avatar-size) / 2)}:host([compact]) .hero-fallback{padding-inline:calc(var(--profile-fallback-padding) / 2)}:host([compact]) .info,:host([compact]) .profile__heading-edit-action{align-self:center}:host([compact]) .name{white-space:normal;overflow-wrap:anywhere}:host([compact]) .details-collapse{opacity:0;visibility:hidden;grid-template-rows:0fr}.pronouns[hidden]{display:none}.detail-row{grid-template-columns:repeat(2,minmax(0,1fr));align-items:start;gap:12px clamp(12px,2vw,24px);width:min(100%,544px);display:grid}.detail-item{align-items:flex-start;gap:7px;min-width:0;display:flex}.detail-icon{flex:0 0 16px;width:16px;height:16px;margin-top:1px;display:inline-flex}.detail-icon>icon-lucide-cake,.detail-icon>icon-lucide-map-pin,.detail-icon>icon-lucide-phone,.detail-icon>icon-lucide-mail{color:currentColor;width:16px;height:16px;display:block}.detail-value{overflow-wrap:anywhere;word-break:break-word;min-width:0}@media (width<=1200px){:host{--profile-avatar-size:6.5rem;--profile-fallback-padding:27px}.profile-heading{column-gap:15px}}@media (width<=768px){.profile-heading:has(.profile-friends-button__section) .name{white-space:normal;overflow-wrap:anywhere}.profile__btn-friends-icon,.profile__btn-friends[disabled]:not([aria-busy=true]){display:none}:host{--profile-avatar-size:4.375rem;--profile-fallback-padding:0px}.profile-heading{grid-template-areas:\"avatar info edit\"\"details details details\";gap:12px 8px}.profile-section-collapsible__edit-button{width:var(--solid-ui-clickable-area,42px);height:var(--solid-ui-clickable-area,42px)}.desktop-edit-button{display:none}.mobile-edit-button{display:inline-flex;position:relative;top:-12px;right:-12px}.profile-section-collapsible__edit-icon{justify-content:center;align-items:center;line-height:0;display:inline-flex}.profile-heading{column-gap:10px}.hero-fallback icon-lucide-circle-user-round{width:3rem;height:3rem;transition:width .3s,height .3s}:host([compact]) .hero-fallback icon-lucide-circle-user-round{width:1.5rem;height:1.5rem}.name{white-space:normal;overflow-wrap:anywhere;font-size:1.375rem;line-height:1.15;display:inline}.identity{gap:0}.pronouns{white-space:nowrap;margin-left:2px;font-size:.6875rem;line-height:1.1}.role{font-size:var(--solid-ui-font-size-sm,.875rem)}.details{gap:12px;font-size:.75rem}.detail-row{column-gap:2px}}@media (prefers-reduced-motion:reduce){.profile-heading,.image-frame,.hero-fallback,.hero-fallback icon-lucide-circle-user-round,.details-collapse{transition:none}}`;
4
4
  export { t as default };
5
5
 
6
6
  //# sourceMappingURL=ProfileHeading.styles.esm.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"ProfileHeading.styles.esm.js","names":["ProfileHeading_styles_default"],"sources":["../../../src/components/profile-heading/ProfileHeading.styles.css"],"sourcesContent":[":host {\n --profile-avatar-size: 8.75rem;\n --profile-fallback-padding: 36.4px;\n display: block;\n width: 100%;\n color: var(--color-text-secondary, #4a5565);\n font-family: inherit;\n}\n\n.profile-heading {\n display: grid;\n grid-template-columns: auto minmax(0, 1fr) auto;\n grid-template-areas:\n \"avatar info edit\"\n \"avatar details details\";\n align-items: start;\n column-gap: 20px;\n row-gap: 20px;\n width: 100%;\n box-sizing: border-box;\n padding: 25px;\n overflow-x: clip;\n background: var(--solid-ui-color-white, #fff);\n border: 1px solid var(--solid-ui-color-slate-200, #e2e8f0);\n border-radius: 5px;\n transition: box-shadow 0.2s ease, transform 0.2s ease, padding 0.3s ease, row-gap 0.3s ease;\n}\n\n.profile-heading:hover {\n box-shadow: 0 8px 10px rgba(124, 77, 255, 0.1);\n}\n\n.avatar {\n grid-area: avatar;\n}\n\n.image-frame {\n position: relative;\n display: grid;\n place-items: center;\n width: var(--profile-avatar-size);\n aspect-ratio: 1;\n overflow: hidden;\n transition: width 0.3s ease;\n}\n\n.image-frame--fallback {\n border: 1px dashed var(--solid-ui-color-slate-200, #e2e8f0);\n background: var(--solid-ui-color-slate-50, #f8fafc);\n box-sizing: border-box;\n}\n\n.hero {\n position: absolute;\n inset: 0;\n width: 100%;\n height: 100%;\n border: 1px solid var(--solid-ui-color-primary, #7c4dff);\n background: var(--color-surface-placeholder, var(--gray-300, #d1d5dc)) 50% / cover no-repeat;\n object-fit: cover;\n object-position: center;\n box-sizing: border-box;\n border-radius: 10px;\n}\n\n.hero-fallback {\n display: none;\n align-items: center;\n justify-content: center;\n width: 100%;\n height: 100%;\n padding: 0 var(--profile-fallback-padding);\n box-sizing: border-box;\n transition: padding 0.3s ease;\n}\n\n.hero-fallback icon-lucide-circle-user-round {\n display: block;\n width: 100%;\n height: 100%;\n color: #cbd5e1;\n}\n\n.image-frame--fallback .hero-fallback {\n display: flex;\n}\n\n.info {\n grid-area: info;\n min-width: 0;\n}\n\n.profile__heading-edit-action {\n grid-area: edit;\n margin-left: auto;\n margin-right: 0;\n margin-bottom: 0;\n align-self: flex-start;\n justify-self: end;\n display: flex;\n justify-content: flex-end;\n align-items: flex-start;\n gap: 8px;\n padding: 0;\n}\n\n.profile-friends-button__section {\n display: grid;\n gap: 8px;\n max-width: 16rem;\n}\n\n.profile__btn-friends-icon {\n display: block;\n width: 14px;\n height: 14px;\n align-self: center;\n transform: translateY(-3px);\n}\n\n.friend-message {\n text-align: center;\n font-size: var(--solid-ui-font-size-sm, 0.875rem);\n overflow-wrap: anywhere;\n}\n\n.friend-message[role=\"alert\"] {\n color: var(--solid-ui-color-red-700, #b91c1c);\n}\n\n.friend-message[role=\"status\"] {\n color: var(--solid-ui-color-green-700, #15803d);\n}\n\n.profile-section-collapsible__edit-button {\n min-width: 0;\n}\n\n.mobile-edit-button {\n display: none;\n color: var(--solid-ui-color-primary, #7c4dff);\n}\n\n.profile-section-collapsible__action-label {\n font-size: var(--solid-ui-font-size-sm, 0.875rem);\n}\n\n.profile__add-more-icon {\n margin-right: 0;\n line-height: 0;\n position: relative;\n top: 0;\n transform: translateY(0);\n}\n\n.profile__add-more-icon icon-lucide-pencil,\n.profile-section-collapsible__edit-icon icon-lucide-pencil {\n display: block;\n width: 14px;\n height: 14px;\n}\n\n.header-bar {\n display: flex;\n flex-direction: column;\n align-items: flex-start;\n gap: 2px;\n width: 100%;\n margin: 0;\n padding: 0;\n}\n\n.identity {\n display: flex;\n align-items: baseline;\n gap: 7px;\n width: 100%;\n flex-wrap: wrap;\n}\n\n.name {\n display: block;\n margin: 0;\n color: var(--color-text-heading, #000);\n font-size: 1.75rem;\n font-weight: 600;\n line-height: 1.2;\n overflow-wrap: anywhere;\n}\n\n.pronouns {\n color: var(--color-text-secondary, #4a5565);\n font-size: var(--solid-ui-font-size-sm, 0.875rem);\n font-weight: 400;\n line-height: 1.2;\n}\n\n.role {\n width: 100%;\n color: var(--solid-ui-color-gray-800, #101828);\n font-size: var(--solid-ui-font-size-lg, 1.125rem);\n font-weight: 500;\n line-height: 1.25;\n overflow-wrap: anywhere;\n}\n\n.details-collapse {\n grid-area: details;\n display: grid;\n grid-template-rows: 1fr;\n transition: grid-template-rows 0.3s ease, opacity 0.3s ease;\n}\n\n.details {\n display: flex;\n flex-wrap: wrap;\n align-content: flex-start;\n align-items: flex-start;\n gap: 12px 32px;\n min-width: 0;\n min-height: 0;\n overflow: hidden;\n width: 100%;\n font-size: var(--font-size-sm, 0.875rem);\n}\n\n:host([compact]) .profile-heading {\n padding: 12.5px;\n row-gap: 0;\n}\n\n:host([compact]) .image-frame {\n width: calc(var(--profile-avatar-size) / 2);\n}\n\n:host([compact]) .hero-fallback {\n padding-inline: calc(var(--profile-fallback-padding) / 2);\n}\n\n:host([compact]) .info {\n align-self: center;\n}\n\n:host([compact]) .name {\n white-space: normal;\n overflow-wrap: anywhere;\n}\n\n:host([compact]) .details-collapse {\n grid-template-rows: 0fr;\n opacity: 0;\n visibility: hidden;\n}\n\n.pronouns[hidden] {\n display: none;\n}\n\n.detail-row {\n display: grid;\n grid-template-columns: repeat(2, minmax(0, 1fr));\n align-items: start;\n column-gap: clamp(12px, 2vw, 24px);\n row-gap: 12px;\n width: min(100%, 544px);\n}\n\n.detail-item {\n display: flex;\n align-items: flex-start;\n gap: 7px;\n min-width: 0;\n}\n\n.detail-icon {\n display: inline-flex;\n flex: 0 0 16px;\n width: 16px;\n height: 16px;\n margin-top: 1px;\n}\n\n.detail-icon > icon-lucide-cake,\n.detail-icon > icon-lucide-map-pin,\n.detail-icon > icon-lucide-phone,\n.detail-icon > icon-lucide-mail {\n display: block;\n width: 16px;\n height: 16px;\n color: currentColor;\n}\n\n.detail-value {\n min-width: 0;\n overflow-wrap: anywhere;\n word-break: break-word;\n}\n\n@media (max-width: 1200px) {\n :host {\n --profile-avatar-size: 6.5rem;\n --profile-fallback-padding: 27px;\n }\n\n .profile-heading {\n column-gap: 15px;\n }\n\n}\n\n@media (max-width: 768px) {\n .profile-heading:has(.profile-friends-button__section) .name {\n white-space: normal;\n overflow-wrap: anywhere;\n }\n\n .profile__btn-friends-icon {\n display: none;\n }\n\n .profile__btn-friends[disabled]:not([aria-busy=\"true\"]) {\n display: none;\n }\n\n :host {\n --profile-avatar-size: 4.375rem;\n --profile-fallback-padding: 0px;\n }\n\n .profile-heading {\n grid-template-areas:\n \"avatar info edit\"\n \"details details details\";\n column-gap: 8px;\n row-gap: 12px;\n }\n\n .profile-section-collapsible__edit-button {\n width: var(--solid-ui-clickable-area, 42px);\n height: var(--solid-ui-clickable-area, 42px);\n }\n\n .desktop-edit-button {\n display: none;\n }\n\n .mobile-edit-button {\n display: inline-flex;\n position: relative;\n top: -12px;\n right: -12px;\n }\n\n .profile-section-collapsible__edit-icon {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n line-height: 0;\n }\n\n .profile-heading {\n column-gap: 10px;\n }\n\n .hero-fallback icon-lucide-circle-user-round {\n width: 3rem;\n height: 3rem;\n transition: width 0.3s ease, height 0.3s ease;\n }\n\n :host([compact]) .hero-fallback icon-lucide-circle-user-round {\n width: 1.5rem;\n height: 1.5rem;\n }\n\n .name {\n display: inline;\n font-size: 1.375rem;\n line-height: 1.15;\n white-space: normal;\n overflow-wrap: anywhere;\n }\n\n .identity {\n gap: 0;\n }\n\n .pronouns {\n margin-left: 2px;\n font-size: 0.6875rem;\n line-height: 1.1;\n white-space: nowrap;\n }\n\n .role {\n font-size: var(--solid-ui-font-size-sm, 0.875rem);\n }\n\n .details {\n gap: 12px;\n font-size: 0.75rem;\n }\n\n .detail-row {\n column-gap: 2px;\n }\n}\n\n@media (prefers-reduced-motion: reduce) {\n .profile-heading,\n .image-frame,\n .hero-fallback,\n .hero-fallback icon-lucide-circle-user-round,\n .details-collapse {\n transition: none;\n }\n}\n"],"mappings":""}
1
+ {"version":3,"file":"ProfileHeading.styles.esm.js","names":["ProfileHeading_styles_default"],"sources":["../../../src/components/profile-heading/ProfileHeading.styles.css"],"sourcesContent":[":host {\n --profile-avatar-size: 8.75rem;\n --profile-fallback-padding: 36.4px;\n display: block;\n width: 100%;\n color: var(--color-text-secondary, #4a5565);\n font-family: inherit;\n}\n\n.profile-heading {\n display: grid;\n grid-template-columns: auto minmax(0, 1fr) auto;\n grid-template-areas:\n \"avatar info edit\"\n \"avatar details details\";\n align-items: start;\n column-gap: 20px;\n row-gap: 20px;\n width: 100%;\n box-sizing: border-box;\n padding: 25px;\n overflow-x: clip;\n background: var(--solid-ui-color-white, #fff);\n border: 1px solid var(--solid-ui-color-slate-200, #e2e8f0);\n border-radius: 5px;\n transition: box-shadow 0.2s ease, transform 0.2s ease, padding 0.3s ease, row-gap 0.3s ease;\n}\n\n.profile-heading:hover {\n box-shadow: 0 8px 10px rgba(124, 77, 255, 0.1);\n}\n\n.avatar {\n grid-area: avatar;\n}\n\n.image-frame {\n position: relative;\n display: grid;\n place-items: center;\n width: var(--profile-avatar-size);\n aspect-ratio: 1;\n overflow: hidden;\n transition: width 0.3s ease;\n}\n\n.image-frame--fallback {\n border: 1px dashed var(--solid-ui-color-slate-200, #e2e8f0);\n background: var(--solid-ui-color-slate-50, #f8fafc);\n box-sizing: border-box;\n}\n\n.hero {\n position: absolute;\n inset: 0;\n width: 100%;\n height: 100%;\n border: 1px solid var(--solid-ui-color-primary, #7c4dff);\n background: var(--color-surface-placeholder, var(--gray-300, #d1d5dc)) 50% / cover no-repeat;\n object-fit: cover;\n object-position: center;\n box-sizing: border-box;\n border-radius: 10px;\n}\n\n.hero-fallback {\n display: none;\n align-items: center;\n justify-content: center;\n width: 100%;\n height: 100%;\n padding: 0 var(--profile-fallback-padding);\n box-sizing: border-box;\n transition: padding 0.3s ease;\n}\n\n.hero-fallback icon-lucide-circle-user-round {\n display: block;\n width: 100%;\n height: 100%;\n color: #cbd5e1;\n}\n\n.image-frame--fallback .hero-fallback {\n display: flex;\n}\n\n.info {\n grid-area: info;\n min-width: 0;\n}\n\n.profile__heading-edit-action {\n grid-area: edit;\n margin-left: auto;\n margin-right: 0;\n margin-bottom: 0;\n align-self: flex-start;\n justify-self: end;\n display: flex;\n justify-content: flex-end;\n align-items: flex-start;\n gap: 8px;\n padding: 0;\n}\n\n.profile-friends-button__section {\n display: grid;\n gap: 8px;\n max-width: 16rem;\n}\n\n.profile__btn-friends-icon {\n display: block;\n width: 14px;\n height: 14px;\n align-self: center;\n transform: translateY(-3px);\n}\n\n.friend-message {\n text-align: center;\n font-size: var(--solid-ui-font-size-sm, 0.875rem);\n overflow-wrap: anywhere;\n}\n\n.friend-message[role=\"alert\"] {\n color: var(--solid-ui-color-red-700, #b91c1c);\n}\n\n.friend-message[role=\"status\"] {\n color: var(--solid-ui-color-green-700, #15803d);\n}\n\n.profile-section-collapsible__edit-button {\n min-width: 0;\n}\n\n.mobile-edit-button {\n display: none;\n color: var(--solid-ui-color-primary, #7c4dff);\n}\n\n.profile-section-collapsible__action-label {\n font-size: var(--solid-ui-font-size-sm, 0.875rem);\n}\n\n.profile__add-more-icon {\n margin-right: 0;\n line-height: 0;\n position: relative;\n top: 0;\n transform: translateY(0);\n}\n\n.profile__add-more-icon icon-lucide-pencil,\n.profile-section-collapsible__edit-icon icon-lucide-pencil {\n display: block;\n width: 14px;\n height: 14px;\n}\n\n.header-bar {\n display: flex;\n flex-direction: column;\n align-items: flex-start;\n gap: 2px;\n width: 100%;\n margin: 0;\n padding: 0;\n}\n\n.identity {\n display: flex;\n align-items: baseline;\n gap: 7px;\n width: 100%;\n flex-wrap: wrap;\n}\n\n.name {\n display: block;\n margin: 0;\n color: var(--color-text-heading, #000);\n font-size: 1.75rem;\n font-weight: 600;\n line-height: 1.2;\n overflow-wrap: anywhere;\n}\n\n.pronouns {\n color: var(--color-text-secondary, #4a5565);\n font-size: var(--solid-ui-font-size-sm, 0.875rem);\n font-weight: 400;\n line-height: 1.2;\n}\n\n.role {\n width: 100%;\n color: var(--solid-ui-color-gray-800, #101828);\n font-size: var(--solid-ui-font-size-lg, 1.125rem);\n font-weight: 500;\n line-height: 1.25;\n overflow-wrap: anywhere;\n}\n\n.details-collapse {\n grid-area: details;\n display: grid;\n grid-template-rows: 1fr;\n transition: grid-template-rows 0.3s ease, opacity 0.3s ease;\n}\n\n.details {\n display: flex;\n flex-wrap: wrap;\n align-content: flex-start;\n align-items: flex-start;\n gap: 12px 32px;\n min-width: 0;\n min-height: 0;\n overflow: hidden;\n width: 100%;\n font-size: var(--font-size-sm, 0.875rem);\n}\n\n:host([compact]) .profile-heading {\n padding: 12.5px;\n row-gap: 0;\n}\n\n:host([compact]) .image-frame {\n width: calc(var(--profile-avatar-size) / 2);\n}\n\n:host([compact]) .hero-fallback {\n padding-inline: calc(var(--profile-fallback-padding) / 2);\n}\n\n:host([compact]) .info {\n align-self: center;\n}\n\n:host([compact]) .profile__heading-edit-action {\n align-self: center;\n}\n\n:host([compact]) .name {\n white-space: normal;\n overflow-wrap: anywhere;\n}\n\n:host([compact]) .details-collapse {\n grid-template-rows: 0fr;\n opacity: 0;\n visibility: hidden;\n}\n\n.pronouns[hidden] {\n display: none;\n}\n\n.detail-row {\n display: grid;\n grid-template-columns: repeat(2, minmax(0, 1fr));\n align-items: start;\n column-gap: clamp(12px, 2vw, 24px);\n row-gap: 12px;\n width: min(100%, 544px);\n}\n\n.detail-item {\n display: flex;\n align-items: flex-start;\n gap: 7px;\n min-width: 0;\n}\n\n.detail-icon {\n display: inline-flex;\n flex: 0 0 16px;\n width: 16px;\n height: 16px;\n margin-top: 1px;\n}\n\n.detail-icon > icon-lucide-cake,\n.detail-icon > icon-lucide-map-pin,\n.detail-icon > icon-lucide-phone,\n.detail-icon > icon-lucide-mail {\n display: block;\n width: 16px;\n height: 16px;\n color: currentColor;\n}\n\n.detail-value {\n min-width: 0;\n overflow-wrap: anywhere;\n word-break: break-word;\n}\n\n@media (max-width: 1200px) {\n :host {\n --profile-avatar-size: 6.5rem;\n --profile-fallback-padding: 27px;\n }\n\n .profile-heading {\n column-gap: 15px;\n }\n\n}\n\n@media (max-width: 768px) {\n .profile-heading:has(.profile-friends-button__section) .name {\n white-space: normal;\n overflow-wrap: anywhere;\n }\n\n .profile__btn-friends-icon {\n display: none;\n }\n\n .profile__btn-friends[disabled]:not([aria-busy=\"true\"]) {\n display: none;\n }\n\n :host {\n --profile-avatar-size: 4.375rem;\n --profile-fallback-padding: 0px;\n }\n\n .profile-heading {\n grid-template-areas:\n \"avatar info edit\"\n \"details details details\";\n column-gap: 8px;\n row-gap: 12px;\n }\n\n .profile-section-collapsible__edit-button {\n width: var(--solid-ui-clickable-area, 42px);\n height: var(--solid-ui-clickable-area, 42px);\n }\n\n .desktop-edit-button {\n display: none;\n }\n\n .mobile-edit-button {\n display: inline-flex;\n position: relative;\n top: -12px;\n right: -12px;\n }\n\n .profile-section-collapsible__edit-icon {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n line-height: 0;\n }\n\n .profile-heading {\n column-gap: 10px;\n }\n\n .hero-fallback icon-lucide-circle-user-round {\n width: 3rem;\n height: 3rem;\n transition: width 0.3s ease, height 0.3s ease;\n }\n\n :host([compact]) .hero-fallback icon-lucide-circle-user-round {\n width: 1.5rem;\n height: 1.5rem;\n }\n\n .name {\n display: inline;\n font-size: 1.375rem;\n line-height: 1.15;\n white-space: normal;\n overflow-wrap: anywhere;\n }\n\n .identity {\n gap: 0;\n }\n\n .pronouns {\n margin-left: 2px;\n font-size: 0.6875rem;\n line-height: 1.1;\n white-space: nowrap;\n }\n\n .role {\n font-size: var(--solid-ui-font-size-sm, 0.875rem);\n }\n\n .details {\n gap: 12px;\n font-size: 0.75rem;\n }\n\n .detail-row {\n column-gap: 2px;\n }\n}\n\n@media (prefers-reduced-motion: reduce) {\n .profile-heading,\n .image-frame,\n .hero-fallback,\n .hero-fallback icon-lucide-circle-user-round,\n .details-collapse {\n transition: none;\n }\n}\n"],"mappings":""}
package/dist/index.cjs.js CHANGED
@@ -1,2 +1,2 @@
1
- Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require("./_virtual/_rolldown/runtime.cjs.js"),t=require("./versionInfo.cjs.js"),n=require("./outline/manager2.cjs.js"),r=require("./registerPanes.cjs.js"),i=require("./outline/context.cjs.js"),a=require("./navigation/browserEvents.cjs.js"),o=require("./mainPage/index.cjs.js");let s=require("solid-ui");s=e.__toESM(s);let c=require("solid-logic"),l=require("pane-registry");function u(e,t){if(e.outlineManager)t&&(e.outlineManager.context=e.outlineManager.context||{},e.outlineManager.context.environment=t);else{let r=i.createContext(e,{list:l.list,paneForIcon:l.paneForIcon,paneForPredicate:l.paneForPredicate,register:l.register,byName:l.byName},c.store,c.solidLogicSingleton,t);e.outlineManager=new n.default(r)}return e.outlineManager}function d(e,t){e&&(e.context=e.context||{},e.context.environment=t)}typeof window<`u`&&u(window.document),r.registerPanes(e=>(0,l.register)(e.default||e)),typeof window<`u`&&(window.panes={getOutliner:u}),exports.OutlineManager=n.default,Object.defineProperty(exports,"UI",{enumerable:!0,get:function(){return s}}),Object.defineProperty(exports,"byName",{enumerable:!0,get:function(){return l.byName}}),exports.getOutliner=u,exports.initMainPage=o.initMainPage,exports.isHandlingBrowserNavigation=a.isHandlingBrowserNavigation,Object.defineProperty(exports,"list",{enumerable:!0,get:function(){return l.list}}),Object.defineProperty(exports,"paneForIcon",{enumerable:!0,get:function(){return l.paneForIcon}}),Object.defineProperty(exports,"paneForPredicate",{enumerable:!0,get:function(){return l.paneForPredicate}}),exports.refreshUI=o.refreshUI,Object.defineProperty(exports,"register",{enumerable:!0,get:function(){return l.register}}),exports.updateEnvironment=d,exports.versionInfo=t.default;
1
+ Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require("./_virtual/_rolldown/runtime.cjs.js"),t=require("./versionInfo.cjs.js"),n=require("./outline/manager2.cjs.js"),r=require("./registerPanes.cjs.js"),i=require("./outline/context.cjs.js"),a=require("./mainPage/profileHeading2.cjs.js"),o=require("./navigation/browserEvents.cjs.js"),s=require("./mainPage/index.cjs.js");let c=require("solid-ui");c=e.__toESM(c);let l=require("solid-logic"),u=require("pane-registry");function d(e,t){if(e.outlineManager)t&&(e.outlineManager.context=e.outlineManager.context||{},e.outlineManager.context.environment=t);else{let r=i.createContext(e,{list:u.list,paneForIcon:u.paneForIcon,paneForPredicate:u.paneForPredicate,register:u.register,byName:u.byName},l.store,l.solidLogicSingleton,t);e.outlineManager=new n.default(r)}return e.outlineManager}function f(e,t){e&&(e.context=e.context||{},e.context.environment=t)}typeof window<`u`&&d(window.document),r.registerPanes(e=>(0,u.register)(e.default||e)),typeof window<`u`&&(window.panes={getOutliner:d}),exports.OutlineManager=n.default,Object.defineProperty(exports,"UI",{enumerable:!0,get:function(){return c}}),Object.defineProperty(exports,"byName",{enumerable:!0,get:function(){return u.byName}}),exports.getOutliner=d,exports.initMainPage=s.initMainPage,exports.initializeProfileHeading=a.initializeProfileHeading,exports.isHandlingBrowserNavigation=o.isHandlingBrowserNavigation,Object.defineProperty(exports,"list",{enumerable:!0,get:function(){return u.list}}),Object.defineProperty(exports,"paneForIcon",{enumerable:!0,get:function(){return u.paneForIcon}}),Object.defineProperty(exports,"paneForPredicate",{enumerable:!0,get:function(){return u.paneForPredicate}}),exports.refreshProfileHeading=a.refreshProfileHeading,exports.refreshUI=s.refreshUI,Object.defineProperty(exports,"register",{enumerable:!0,get:function(){return u.register}}),exports.updateEnvironment=f,exports.versionInfo=t.default;
2
2
  //# sourceMappingURL=index.cjs.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.cjs.js","names":["createContext","store","solidLogicSingleton","OutlineManager","registerPanes","register","require_runtime","require_versionInfo","require_manager","require_registerPanes","require_context","require_browserEvents","require_index","solid_ui","solid_logic","pane_registry","getOutliner","dom","environment","context","updateEnvironment","outliner","cjsOrEsModule"],"sources":["../src/index.ts"],"sourcesContent":["/* SOLID PANES\n **\n ** Panes are regions of the outline view in which a particular subject is\n ** displayed in a particular way.\n ** Different panes about the same subject are typically stacked vertically.\n ** Panes may be used naked or with a pane selection header.\n **\n ** The label() method has two functions: it determines whether the pane is\n ** relevant to a given subject, returning null if not.\n ** If it is relevant, then it returns a suitable tooltip for a control which selects the pane\n */\n\nimport versionInfo from './versionInfo'\nimport * as UI from 'solid-ui'\nimport { LiveStore } from 'rdflib'\nimport { solidLogicSingleton, store } from 'solid-logic'\nimport OutlineManager from './outline/manager.js'\nimport { registerPanes } from './registerPanes.js'\nimport {\n list,\n paneForIcon,\n paneForPredicate,\n register,\n byName,\n RenderEnvironment\n} from 'pane-registry'\nimport { createContext } from './outline/context'\nimport { initMainPage, refreshUI } from './mainPage'\nimport { isHandlingBrowserNavigation } from './navigation/browserEvents'\n\nfunction getOutliner (dom, environment?: RenderEnvironment): OutlineManager {\n if (!dom.outlineManager) {\n const context = createContext(\n dom,\n { list, paneForIcon, paneForPredicate, register, byName },\n store as LiveStore,\n solidLogicSingleton,\n environment\n )\n dom.outlineManager = new OutlineManager(context)\n } else if (environment) {\n dom.outlineManager.context = dom.outlineManager.context || {}\n dom.outlineManager.context.environment = environment\n }\n return dom.outlineManager\n}\n\nfunction updateEnvironment (outliner: OutlineManager, environment: RenderEnvironment) {\n if (!outliner) return\n outliner.context = outliner.context || {}\n outliner.context.environment = environment\n}\n\nif (typeof window !== 'undefined') {\n getOutliner(window.document)\n}\n\nregisterPanes((cjsOrEsModule: any) => register(cjsOrEsModule.default || cjsOrEsModule))\n\n// This has common outline mode functionality for the default and other other panes\n// A separate outline manager is required per DOM in cases like a browser extension\n// where there are many occurrences of window and of window.document\n// But each DOM should have just one outline manager.\n\nexport {\n OutlineManager,\n getOutliner,\n updateEnvironment,\n UI,\n versionInfo,\n initMainPage,\n refreshUI,\n isHandlingBrowserNavigation,\n list, // from paneRegistry\n paneForIcon, // from paneRegistry\n paneForPredicate, // from paneRegistry\n register, // from paneRegistry\n byName // from paneRegistry\n}\n\n// export for simpler access by non-node scripts\nif (typeof window !== 'undefined') {\n ;(<any>window).panes = {\n getOutliner\n }\n}\n"],"mappings":"A,kcA8BA,SAASgB,EAAa,EAAK,EAAiD,CAC1E,GAAKC,EAAI,eASEC,IACT,EAAI,eAAe,QAAUD,EAAI,eAAe,SAAW,CAAC,EAC5D,EAAI,eAAe,QAAQ,YAAcC,OAXlB,CACvB,IAAMC,EAAUnB,EAAAA,cACdiB,EACA,CAAE,KAAAF,EAAA,KAAM,YAAAA,EAAA,YAAa,iBAAAA,EAAA,iBAAkB,SAAAA,EAAA,SAAU,OAAAA,EAAA,MAAO,EACxDd,EAAAA,MACAC,EAAAA,oBACAgB,CACF,EACA,EAAI,eAAiB,IAAIf,EAAAA,QAAegB,CAAO,CACjD,CAIA,OAAOF,EAAI,cACb,CAEA,SAASG,EAAmB,EAA0B,EAAgC,CAC/EC,IACL,EAAS,QAAUA,EAAS,SAAW,CAAC,EACxC,EAAS,QAAQ,YAAcH,EACjC,CAEI,OAAO,OAAW,KACpBF,EAAY,OAAO,QAAQ,EAG7BZ,EAAAA,cAAe,IAAA,EAAuBC,EAAAA,SAAAA,CAASiB,EAAc,SAAWA,CAAa,CAAC,EAwBlF,OAAO,OAAW,MACnB,OAAc,MAAQ,CACrB,aACF,G"}
1
+ {"version":3,"file":"index.cjs.js","names":["createContext","store","solidLogicSingleton","OutlineManager","registerPanes","register","require_runtime","require_versionInfo","require_manager","require_registerPanes","require_context","require_profileHeading","require_browserEvents","require_index","solid_ui","solid_logic","pane_registry","getOutliner","dom","environment","context","updateEnvironment","outliner","cjsOrEsModule"],"sources":["../src/index.ts"],"sourcesContent":["/* SOLID PANES\n **\n ** Panes are regions of the outline view in which a particular subject is\n ** displayed in a particular way.\n ** Different panes about the same subject are typically stacked vertically.\n ** Panes may be used naked or with a pane selection header.\n **\n ** The label() method has two functions: it determines whether the pane is\n ** relevant to a given subject, returning null if not.\n ** If it is relevant, then it returns a suitable tooltip for a control which selects the pane\n */\n\nimport versionInfo from './versionInfo'\nimport * as UI from 'solid-ui'\nimport { LiveStore } from 'rdflib'\nimport { solidLogicSingleton, store } from 'solid-logic'\nimport OutlineManager from './outline/manager.js'\nimport { registerPanes } from './registerPanes.js'\nimport {\n list,\n paneForIcon,\n paneForPredicate,\n register,\n byName,\n RenderEnvironment\n} from 'pane-registry'\nimport { createContext } from './outline/context'\nimport { initMainPage, refreshUI } from './mainPage'\nimport { isHandlingBrowserNavigation } from './navigation/browserEvents'\n\nfunction getOutliner (dom, environment?: RenderEnvironment): OutlineManager {\n if (!dom.outlineManager) {\n const context = createContext(\n dom,\n { list, paneForIcon, paneForPredicate, register, byName },\n store as LiveStore,\n solidLogicSingleton,\n environment\n )\n dom.outlineManager = new OutlineManager(context)\n } else if (environment) {\n dom.outlineManager.context = dom.outlineManager.context || {}\n dom.outlineManager.context.environment = environment\n }\n return dom.outlineManager\n}\n\nfunction updateEnvironment (outliner: OutlineManager, environment: RenderEnvironment) {\n if (!outliner) return\n outliner.context = outliner.context || {}\n outliner.context.environment = environment\n}\n\nif (typeof window !== 'undefined') {\n getOutliner(window.document)\n}\n\nregisterPanes((cjsOrEsModule: any) => register(cjsOrEsModule.default || cjsOrEsModule))\n\n// This has common outline mode functionality for the default and other other panes\n// A separate outline manager is required per DOM in cases like a browser extension\n// where there are many occurrences of window and of window.document\n// But each DOM should have just one outline manager.\n\nexport {\n OutlineManager,\n getOutliner,\n updateEnvironment,\n UI,\n versionInfo,\n initMainPage,\n refreshUI,\n isHandlingBrowserNavigation,\n list, // from paneRegistry\n paneForIcon, // from paneRegistry\n paneForPredicate, // from paneRegistry\n register, // from paneRegistry\n byName // from paneRegistry\n}\n\nexport {\n initializeProfileHeading,\n refreshProfileHeading\n} from './mainPage/profileHeading'\n\n// export for simpler access by non-node scripts\nif (typeof window !== 'undefined') {\n ;(<any>window).panes = {\n getOutliner\n }\n}\n"],"mappings":"A,ifA8BA,SAASiB,EAAa,EAAK,EAAiD,CAC1E,GAAKC,EAAI,eASEC,IACT,EAAI,eAAe,QAAUD,EAAI,eAAe,SAAW,CAAC,EAC5D,EAAI,eAAe,QAAQ,YAAcC,OAXlB,CACvB,IAAMC,EAAUpB,EAAAA,cACdkB,EACA,CAAE,KAAAF,EAAA,KAAM,YAAAA,EAAA,YAAa,iBAAAA,EAAA,iBAAkB,SAAAA,EAAA,SAAU,OAAAA,EAAA,MAAO,EACxDf,EAAAA,MACAC,EAAAA,oBACAiB,CACF,EACA,EAAI,eAAiB,IAAIhB,EAAAA,QAAeiB,CAAO,CACjD,CAIA,OAAOF,EAAI,cACb,CAEA,SAASG,EAAmB,EAA0B,EAAgC,CAC/EC,IACL,EAAS,QAAUA,EAAS,SAAW,CAAC,EACxC,EAAS,QAAQ,YAAcH,EACjC,CAEI,OAAO,OAAW,KACpBF,EAAY,OAAO,QAAQ,EAG7Bb,EAAAA,cAAe,IAAA,EAAuBC,EAAAA,SAAAA,CAASkB,EAAc,SAAWA,CAAa,CAAC,EA6BlF,OAAO,OAAW,MACnB,OAAc,MAAQ,CACrB,aACF,G"}
package/dist/index.d.ts CHANGED
@@ -11,4 +11,5 @@ paneForIcon, // from paneRegistry
11
11
  paneForPredicate, // from paneRegistry
12
12
  register, // from paneRegistry
13
13
  byName };
14
+ export { initializeProfileHeading, refreshProfileHeading } from './mainPage/profileHeading';
14
15
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAYA,OAAO,WAAW,MAAM,eAAe,CAAA;AACvC,OAAO,KAAK,EAAE,MAAM,UAAU,CAAA;AAG9B,OAAO,cAAc,MAAM,sBAAsB,CAAA;AAEjD,OAAO,EACL,IAAI,EACJ,WAAW,EACX,gBAAgB,EAChB,QAAQ,EACR,MAAM,EACN,iBAAiB,EAClB,MAAM,eAAe,CAAA;AAEtB,OAAO,EAAE,YAAY,EAAE,SAAS,EAAE,MAAM,YAAY,CAAA;AACpD,OAAO,EAAE,2BAA2B,EAAE,MAAM,4BAA4B,CAAA;AAExE,iBAAS,WAAW,CAAE,GAAG,KAAA,EAAE,WAAW,CAAC,EAAE,iBAAiB,GAAG,cAAc,CAe1E;AAED,iBAAS,iBAAiB,CAAE,QAAQ,EAAE,cAAc,EAAE,WAAW,EAAE,iBAAiB,QAInF;AAaD,OAAO,EACL,cAAc,EACd,WAAW,EACX,iBAAiB,EACjB,EAAE,EACF,WAAW,EACX,YAAY,EACZ,SAAS,EACT,2BAA2B,EAC3B,IAAI,EAAE,oBAAoB;AAC1B,WAAW,EAAE,oBAAoB;AACjC,gBAAgB,EAAE,oBAAoB;AACtC,QAAQ,EAAE,oBAAoB;AAC9B,MAAM,EACP,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAYA,OAAO,WAAW,MAAM,eAAe,CAAA;AACvC,OAAO,KAAK,EAAE,MAAM,UAAU,CAAA;AAG9B,OAAO,cAAc,MAAM,sBAAsB,CAAA;AAEjD,OAAO,EACL,IAAI,EACJ,WAAW,EACX,gBAAgB,EAChB,QAAQ,EACR,MAAM,EACN,iBAAiB,EAClB,MAAM,eAAe,CAAA;AAEtB,OAAO,EAAE,YAAY,EAAE,SAAS,EAAE,MAAM,YAAY,CAAA;AACpD,OAAO,EAAE,2BAA2B,EAAE,MAAM,4BAA4B,CAAA;AAExE,iBAAS,WAAW,CAAE,GAAG,KAAA,EAAE,WAAW,CAAC,EAAE,iBAAiB,GAAG,cAAc,CAe1E;AAED,iBAAS,iBAAiB,CAAE,QAAQ,EAAE,cAAc,EAAE,WAAW,EAAE,iBAAiB,QAInF;AAaD,OAAO,EACL,cAAc,EACd,WAAW,EACX,iBAAiB,EACjB,EAAE,EACF,WAAW,EACX,YAAY,EACZ,SAAS,EACT,2BAA2B,EAC3B,IAAI,EAAE,oBAAoB;AAC1B,WAAW,EAAE,oBAAoB;AACjC,gBAAgB,EAAE,oBAAoB;AACtC,QAAQ,EAAE,oBAAoB;AAC9B,MAAM,EACP,CAAA;AAED,OAAO,EACL,wBAAwB,EACxB,qBAAqB,EACtB,MAAM,2BAA2B,CAAA"}
package/dist/index.esm.js CHANGED
@@ -2,30 +2,31 @@ import e from "./versionInfo.esm.js";
2
2
  import t from "./outline/manager2.esm.js";
3
3
  import { registerPanes as n } from "./registerPanes.esm.js";
4
4
  import { createContext as r } from "./outline/context.esm.js";
5
- import { isHandlingBrowserNavigation as i } from "./navigation/browserEvents.esm.js";
6
- import { initMainPage as a, refreshUI as o } from "./mainPage/index.esm.js";
7
- import * as s from "solid-ui";
8
- import { solidLogicSingleton as c, store as l } from "solid-logic";
9
- import { byName as u, list as d, paneForIcon as f, paneForPredicate as p, register as m } from "pane-registry";
5
+ import { initializeProfileHeading as i, refreshProfileHeading as a } from "./mainPage/profileHeading2.esm.js";
6
+ import { isHandlingBrowserNavigation as o } from "./navigation/browserEvents.esm.js";
7
+ import { initMainPage as s, refreshUI as c } from "./mainPage/index.esm.js";
8
+ import * as l from "solid-ui";
9
+ import { solidLogicSingleton as u, store as d } from "solid-logic";
10
+ import { byName as f, list as p, paneForIcon as m, paneForPredicate as h, register as g } from "pane-registry";
10
11
  // src/index.ts
11
- function h(e, n) {
12
+ function _(e, n) {
12
13
  if (e.outlineManager) n && (e.outlineManager.context = e.outlineManager.context || {}, e.outlineManager.context.environment = n);
13
14
  else {
14
15
  let i = r(e, {
15
- list: d,
16
- paneForIcon: f,
17
- paneForPredicate: p,
18
- register: m,
19
- byName: u
20
- }, l, c, n);
16
+ list: p,
17
+ paneForIcon: m,
18
+ paneForPredicate: h,
19
+ register: g,
20
+ byName: f
21
+ }, d, u, n);
21
22
  e.outlineManager = new t(i);
22
23
  }
23
24
  return e.outlineManager;
24
25
  }
25
- function g(e, t) {
26
+ function v(e, t) {
26
27
  e && (e.context = e.context || {}, e.context.environment = t);
27
28
  }
28
- typeof window < "u" && h(window.document), n((e) => m(e.default || e)), typeof window < "u" && (window.panes = { getOutliner: h });
29
- export { t as OutlineManager, s as UI, u as byName, h as getOutliner, a as initMainPage, i as isHandlingBrowserNavigation, d as list, f as paneForIcon, p as paneForPredicate, o as refreshUI, m as register, g as updateEnvironment, e as versionInfo };
29
+ typeof window < "u" && _(window.document), n((e) => g(e.default || e)), typeof window < "u" && (window.panes = { getOutliner: _ });
30
+ export { t as OutlineManager, l as UI, f as byName, _ as getOutliner, s as initMainPage, i as initializeProfileHeading, o as isHandlingBrowserNavigation, p as list, m as paneForIcon, h as paneForPredicate, a as refreshProfileHeading, c as refreshUI, g as register, v as updateEnvironment, e as versionInfo };
30
31
 
31
32
  //# sourceMappingURL=index.esm.js.map