solid-panes 5.1.0-1 → 5.1.0-2

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 (277) hide show
  1. package/dist/RDFXMLPane2.esm.js +1 -2
  2. package/dist/_virtual/~icons/lucide/cake.esm.js +1 -2
  3. package/dist/_virtual/~icons/lucide/camera.esm.js +1 -2
  4. package/dist/_virtual/~icons/lucide/circle-user-round.esm.js +1 -2
  5. package/dist/_virtual/~icons/lucide/folder-open.esm.js +1 -2
  6. package/dist/_virtual/~icons/lucide/help-circle.esm.js +1 -2
  7. package/dist/_virtual/~icons/lucide/layout-dashboard.esm.js +1 -2
  8. package/dist/_virtual/~icons/lucide/mail.esm.js +1 -2
  9. package/dist/_virtual/~icons/lucide/map-pin.esm.js +1 -2
  10. package/dist/_virtual/~icons/lucide/pencil.esm.js +1 -2
  11. package/dist/_virtual/~icons/lucide/phone.esm.js +1 -2
  12. package/dist/_virtual/~icons/lucide/settings-2.esm.js +1 -2
  13. package/dist/_virtual/~icons/lucide/user-round-plus.esm.js +1 -2
  14. package/dist/_virtual/~icons/lucide/user.esm.js +1 -2
  15. package/dist/_virtual/~icons/lucide/users.esm.js +1 -2
  16. package/dist/_virtual/~icons/lucide/x.esm.js +1 -2
  17. package/dist/audio/audioPane.esm.js +1 -2
  18. package/dist/classInstancePane.esm.js +1 -2
  19. package/dist/components/editor-card/EditorCard.cjs.js +1 -1
  20. package/dist/components/editor-card/EditorCard.cjs.js.map +1 -1
  21. package/dist/components/editor-card/EditorCard.esm.js +6 -7
  22. package/dist/components/editor-card/EditorCard.styles.esm.js +1 -2
  23. package/dist/components/header/Header.cjs.js +1 -1
  24. package/dist/components/header/Header.cjs.js.map +1 -1
  25. package/dist/components/header/Header.esm.js +7 -8
  26. package/dist/components/header/Header.styles.esm.js +1 -2
  27. package/dist/components/navbar/Navbar.cjs.js +2 -2
  28. package/dist/components/navbar/Navbar.cjs.js.map +1 -1
  29. package/dist/components/navbar/Navbar.esm.js +8 -9
  30. package/dist/components/navbar/Navbar.styles.esm.js +1 -2
  31. package/dist/components/profile-heading/ProfileHeading.cjs.js +17 -17
  32. package/dist/components/profile-heading/ProfileHeading.cjs.js.map +1 -1
  33. package/dist/components/profile-heading/ProfileHeading.esm.js +28 -29
  34. package/dist/components/profile-heading/ProfileHeading.styles.esm.js +1 -2
  35. package/dist/components/profile-heading/editor/sections/heading/HeadingEditDialog.cjs.js +1 -1
  36. package/dist/components/profile-heading/editor/sections/heading/HeadingEditDialog.esm.js +2 -3
  37. package/dist/components/profile-heading/editor/sections/heading/dateHelpers.esm.js +1 -2
  38. package/dist/components/profile-heading/editor/sections/heading/imageHelpers.esm.js +1 -2
  39. package/dist/components/profile-heading/editor/sections/heading/imagePreview.esm.js +1 -2
  40. package/dist/components/profile-heading/editor/sections/heading/mutations.esm.js +1 -2
  41. package/dist/components/profile-heading/editor/sections/shared/contactTypeUtils.esm.js +1 -2
  42. package/dist/components/profile-heading/editor/sections/shared/idNodeFactory.esm.js +1 -2
  43. package/dist/components/profile-heading/editor/sections/shared/phoneCountries.esm.js +0 -1
  44. package/dist/components/profile-heading/editor/sections/shared/rdfMutationHelpers.esm.js +1 -2
  45. package/dist/components/profile-heading/editor/sections/shared/rowState.esm.js +1 -2
  46. package/dist/components/profile-heading/editor/sections/shared/sanitizeUtils.esm.js +1 -2
  47. package/dist/components/profile-heading/editor/textUtils.esm.js +1 -2
  48. package/dist/components/profile-heading/editor/texts/dialogTexts.esm.js +1 -2
  49. package/dist/components/profile-heading/editor/texts/messageTexts.esm.js +1 -2
  50. package/dist/components/profile-heading/editor/ui/dialog2.cjs.js +3 -3
  51. package/dist/components/profile-heading/editor/ui/dialog2.cjs.js.map +1 -1
  52. package/dist/components/profile-heading/editor/ui/dialog2.esm.js +4 -19
  53. package/dist/components/profile-heading/editor/ui/dialog2.esm.js.map +1 -1
  54. package/dist/components/profile-heading/editor/ui/spinner.esm.js +1 -2
  55. package/dist/components/profile-heading/editor/utils/errorDisplay.esm.js +1 -2
  56. package/dist/components/profile-heading/friendActions.esm.js +1 -2
  57. package/dist/components/profile-heading/profileHeadingData.esm.js +1 -2
  58. package/dist/dashboard/basicPreferences.esm.js +1 -2
  59. package/dist/dashboard/dashboardPane.esm.js +0 -1
  60. package/dist/dashboard/homepage.esm.js +1 -2
  61. package/dist/dashboard/ontologyData.esm.js +1 -2
  62. package/dist/dashboard/preferencesFormText.esm.js +1 -2
  63. package/dist/dataContentPane2.cjs.js +1 -1
  64. package/dist/dataContentPane2.esm.js +2 -3
  65. package/dist/defaultPane2.cjs.js +1 -1
  66. package/dist/defaultPane2.esm.js +2 -3
  67. package/dist/dokieli/dokieliPane.cjs.js +1 -1
  68. package/dist/dokieli/dokieliPane.cjs.js.map +1 -1
  69. package/dist/dokieli/dokieliPane.esm.js +7 -12
  70. package/dist/dokieli/dokieliPane.esm.js.map +1 -1
  71. package/dist/dokieli/new.esm.js +1 -2
  72. package/dist/form/pane.esm.js +1 -2
  73. package/dist/home/homePane.esm.js +1 -2
  74. package/dist/humanReadablePane.d.ts +3 -0
  75. package/dist/humanReadablePane.d.ts.map +1 -1
  76. package/dist/humanReadablePane2.cjs.js +276 -1
  77. package/dist/humanReadablePane2.cjs.js.map +1 -1
  78. package/dist/humanReadablePane2.esm.js +428 -31
  79. package/dist/humanReadablePane2.esm.js.map +1 -1
  80. package/dist/icons/folder.esm.js +1 -2
  81. package/dist/icons/friends.esm.js +1 -2
  82. package/dist/icons/person.esm.js +1 -2
  83. package/dist/imagePane.d.ts.map +1 -1
  84. package/dist/imagePane2.cjs.js +1 -1
  85. package/dist/imagePane2.cjs.js.map +1 -1
  86. package/dist/imagePane2.esm.js +2 -3
  87. package/dist/imagePane2.esm.js.map +1 -1
  88. package/dist/index.esm.js +1 -2
  89. package/dist/internal/internalPane2.cjs.js +1 -1
  90. package/dist/internal/internalPane2.esm.js +2 -3
  91. package/dist/mainPage/header.esm.js +1 -2
  92. package/dist/mainPage/index.cjs.js +1 -1
  93. package/dist/mainPage/index.cjs.js.map +1 -1
  94. package/dist/mainPage/index.d.ts +1 -1
  95. package/dist/mainPage/index.d.ts.map +1 -1
  96. package/dist/mainPage/index.esm.js +6 -2
  97. package/dist/mainPage/index.esm.js.map +1 -1
  98. package/dist/mainPage/navbar.esm.js +1 -2
  99. package/dist/mainPage/navigation.cjs.js +1 -1
  100. package/dist/mainPage/navigation.cjs.js.map +1 -1
  101. package/dist/mainPage/navigation.d.ts.map +1 -1
  102. package/dist/mainPage/navigation.esm.js +14 -11
  103. package/dist/mainPage/navigation.esm.js.map +1 -1
  104. package/dist/mainPage/profileHeading2.esm.js +1 -2
  105. package/dist/n3Pane2.esm.js +1 -2
  106. package/dist/navigation/browserEvents.esm.js +1 -2
  107. package/dist/navigation/chrome.esm.js +1 -2
  108. package/dist/navigation/controller.cjs.js +1 -1
  109. package/dist/navigation/controller.cjs.js.map +1 -1
  110. package/dist/navigation/controller.esm.js +6 -7
  111. package/dist/navigation/controller.esm.js.map +1 -1
  112. package/dist/navigation/events.esm.js +1 -2
  113. package/dist/navigation/navbarVisibility.esm.js +1 -2
  114. package/dist/navigation/options.esm.js +1 -2
  115. package/dist/navigation/podContext.esm.js +1 -2
  116. package/dist/navigation/state.esm.js +1 -2
  117. package/dist/outline/context.esm.js +1 -2
  118. package/dist/outline/fileExplorerHelpers.cjs.js +2 -0
  119. package/dist/outline/fileExplorerHelpers.cjs.js.map +1 -0
  120. package/dist/outline/fileExplorerHelpers.d.ts +13 -0
  121. package/dist/outline/fileExplorerHelpers.d.ts.map +1 -0
  122. package/dist/outline/fileExplorerHelpers.esm.js +24 -0
  123. package/dist/outline/fileExplorerHelpers.esm.js.map +1 -0
  124. package/dist/outline/manager2.cjs.js +1 -1
  125. package/dist/outline/manager2.cjs.js.map +1 -1
  126. package/dist/outline/manager2.esm.js +422 -433
  127. package/dist/outline/manager2.esm.js.map +1 -1
  128. package/dist/outline/outlineDomHelpers.cjs.js +2 -0
  129. package/dist/outline/outlineDomHelpers.cjs.js.map +1 -0
  130. package/dist/outline/outlineDomHelpers.d.ts +30 -0
  131. package/dist/outline/outlineDomHelpers.d.ts.map +1 -0
  132. package/dist/outline/outlineDomHelpers.esm.js +79 -0
  133. package/dist/outline/outlineDomHelpers.esm.js.map +1 -0
  134. package/dist/outline/outlineIcons.esm.js +1 -2
  135. package/dist/outline/propertyViews.esm.js +1 -2
  136. package/dist/outline/queryByExample.cjs.js.map +1 -1
  137. package/dist/outline/queryByExample.esm.js +1 -2
  138. package/dist/outline/queryByExample.esm.js.map +1 -1
  139. package/dist/outline/userInput.cjs.js +9 -9
  140. package/dist/outline/userInput.cjs.js.map +1 -1
  141. package/dist/outline/userInput.esm.js +50 -40
  142. package/dist/outline/userInput.esm.js.map +1 -1
  143. package/dist/outline/viewAsImage.esm.js +1 -2
  144. package/dist/outline/viewAsMbox.esm.js +1 -2
  145. package/dist/pad/padPane2.cjs.js +1 -1
  146. package/dist/pad/padPane2.esm.js +2 -3
  147. package/dist/playlist/playlistPane.esm.js +1 -2
  148. package/dist/registerPanes.esm.js +1 -2
  149. package/dist/schedule/formsForSchedule.esm.js +1 -2
  150. package/dist/schedule/schedulePane.d.ts.map +1 -1
  151. package/dist/schedule/schedulePane2.cjs.js +1 -1
  152. package/dist/schedule/schedulePane2.cjs.js.map +1 -1
  153. package/dist/schedule/schedulePane2.esm.js +60 -59
  154. package/dist/schedule/schedulePane2.esm.js.map +1 -1
  155. package/dist/sharing/sharingPane.esm.js +1 -2
  156. package/dist/slideshow/slideshowPane.esm.js +1 -2
  157. package/dist/social/editProfileDetails.cjs.js +1 -1
  158. package/dist/social/editProfileDetails.esm.js +1 -2
  159. package/dist/social/icons.esm.js +1 -2
  160. package/dist/social/socialPane2.esm.js +1 -2
  161. package/dist/social/socialSections.esm.js +1 -2
  162. package/dist/social/triage.esm.js +1 -2
  163. package/dist/tabbed/tabbedPane.esm.js +1 -2
  164. package/dist/tableViewPane.esm.js +1 -2
  165. package/dist/transaction/pane.esm.js +1 -2
  166. package/dist/transaction/period.esm.js +1 -2
  167. package/dist/trip/tripPane.esm.js +1 -2
  168. package/dist/trustedApplications/trustedApplications.dom.esm.js +1 -2
  169. package/dist/trustedApplications/trustedApplications.utils.esm.js +1 -2
  170. package/dist/trustedApplications/trustedApplications.view.esm.js +1 -2
  171. package/dist/ui/pane.esm.js +1 -2
  172. package/dist/utils/paneUtils.cjs.js +1 -1
  173. package/dist/utils/paneUtils.cjs.js.map +1 -1
  174. package/dist/utils/paneUtils.d.ts +5 -3
  175. package/dist/utils/paneUtils.d.ts.map +1 -1
  176. package/dist/utils/paneUtils.esm.js +36 -29
  177. package/dist/utils/paneUtils.esm.js.map +1 -1
  178. package/dist/utils/podUtils.cjs.js +1 -1
  179. package/dist/utils/podUtils.cjs.js.map +1 -1
  180. package/dist/utils/podUtils.d.ts +9 -1
  181. package/dist/utils/podUtils.d.ts.map +1 -1
  182. package/dist/utils/podUtils.esm.js +22 -95
  183. package/dist/utils/podUtils.esm.js.map +1 -1
  184. package/dist/utils/viewerUtils.esm.js +1 -2
  185. package/dist/utils/webIdUtils.esm.js +1 -2
  186. package/dist/versionInfo.cjs.js +1 -1
  187. package/dist/versionInfo.cjs.js.map +1 -1
  188. package/dist/versionInfo.esm.js +4 -5
  189. package/dist/versionInfo.esm.js.map +1 -1
  190. package/dist/video/videoPane.esm.js +1 -2
  191. package/package.json +7 -6
  192. package/dist/_virtual/~icons/lucide/arrow-left.cjs.js +0 -2
  193. package/dist/_virtual/~icons/lucide/arrow-left.cjs.js.map +0 -1
  194. package/dist/_virtual/~icons/lucide/arrow-left.esm.js +0 -11
  195. package/dist/_virtual/~icons/lucide/arrow-left.esm.js.map +0 -1
  196. package/dist/_virtual/~icons/lucide/ellipsis-vertical.cjs.js +0 -2
  197. package/dist/_virtual/~icons/lucide/ellipsis-vertical.cjs.js.map +0 -1
  198. package/dist/_virtual/~icons/lucide/ellipsis-vertical.esm.js +0 -11
  199. package/dist/_virtual/~icons/lucide/ellipsis-vertical.esm.js.map +0 -1
  200. package/dist/_virtual/~icons/lucide/folder.cjs.js +0 -2
  201. package/dist/_virtual/~icons/lucide/folder.cjs.js.map +0 -1
  202. package/dist/_virtual/~icons/lucide/folder.esm.js +0 -11
  203. package/dist/_virtual/~icons/lucide/folder.esm.js.map +0 -1
  204. package/dist/_virtual/~icons/lucide/globe.cjs.js +0 -2
  205. package/dist/_virtual/~icons/lucide/globe.cjs.js.map +0 -1
  206. package/dist/_virtual/~icons/lucide/globe.esm.js +0 -11
  207. package/dist/_virtual/~icons/lucide/globe.esm.js.map +0 -1
  208. package/dist/_virtual/~icons/lucide/lock-keyhole.cjs.js +0 -2
  209. package/dist/_virtual/~icons/lucide/lock-keyhole.cjs.js.map +0 -1
  210. package/dist/_virtual/~icons/lucide/lock-keyhole.esm.js +0 -11
  211. package/dist/_virtual/~icons/lucide/lock-keyhole.esm.js.map +0 -1
  212. package/dist/_virtual/~icons/lucide/share-2.cjs.js +0 -2
  213. package/dist/_virtual/~icons/lucide/share-2.cjs.js.map +0 -1
  214. package/dist/_virtual/~icons/lucide/share-2.esm.js +0 -11
  215. package/dist/_virtual/~icons/lucide/share-2.esm.js.map +0 -1
  216. package/dist/_virtual/~icons/lucide/user-round-cog.cjs.js +0 -2
  217. package/dist/_virtual/~icons/lucide/user-round-cog.cjs.js.map +0 -1
  218. package/dist/_virtual/~icons/lucide/user-round-cog.esm.js +0 -11
  219. package/dist/_virtual/~icons/lucide/user-round-cog.esm.js.map +0 -1
  220. package/dist/components/file-explorer-header/FileExplorerHeader.cjs.js +0 -14
  221. package/dist/components/file-explorer-header/FileExplorerHeader.cjs.js.map +0 -1
  222. package/dist/components/file-explorer-header/FileExplorerHeader.d.ts +0 -18
  223. package/dist/components/file-explorer-header/FileExplorerHeader.d.ts.map +0 -1
  224. package/dist/components/file-explorer-header/FileExplorerHeader.esm.js +0 -292
  225. package/dist/components/file-explorer-header/FileExplorerHeader.esm.js.map +0 -1
  226. package/dist/components/file-explorer-header/FileExplorerHeader.styles.cjs.js +0 -2
  227. package/dist/components/file-explorer-header/FileExplorerHeader.styles.cjs.js.map +0 -1
  228. package/dist/components/file-explorer-header/FileExplorerHeader.styles.esm.js +0 -7
  229. package/dist/components/file-explorer-header/FileExplorerHeader.styles.esm.js.map +0 -1
  230. package/dist/components/file-explorer-header/FileExplorerHeaderControls.cjs.js +0 -32
  231. package/dist/components/file-explorer-header/FileExplorerHeaderControls.cjs.js.map +0 -1
  232. package/dist/components/file-explorer-header/FileExplorerHeaderControls.d.ts +0 -21
  233. package/dist/components/file-explorer-header/FileExplorerHeaderControls.d.ts.map +0 -1
  234. package/dist/components/file-explorer-header/FileExplorerHeaderControls.esm.js +0 -294
  235. package/dist/components/file-explorer-header/FileExplorerHeaderControls.esm.js.map +0 -1
  236. package/dist/components/file-explorer-header/FileExplorerHeaderControls.styles.cjs.js +0 -2
  237. package/dist/components/file-explorer-header/FileExplorerHeaderControls.styles.cjs.js.map +0 -1
  238. package/dist/components/file-explorer-header/FileExplorerHeaderControls.styles.esm.js +0 -7
  239. package/dist/components/file-explorer-header/FileExplorerHeaderControls.styles.esm.js.map +0 -1
  240. package/dist/components/file-explorer-header/FileExplorerHeaderSummary.cjs.js +0 -34
  241. package/dist/components/file-explorer-header/FileExplorerHeaderSummary.cjs.js.map +0 -1
  242. package/dist/components/file-explorer-header/FileExplorerHeaderSummary.d.ts +0 -20
  243. package/dist/components/file-explorer-header/FileExplorerHeaderSummary.d.ts.map +0 -1
  244. package/dist/components/file-explorer-header/FileExplorerHeaderSummary.esm.js +0 -346
  245. package/dist/components/file-explorer-header/FileExplorerHeaderSummary.esm.js.map +0 -1
  246. package/dist/components/file-explorer-header/FileExplorerHeaderSummary.styles.cjs.js +0 -2
  247. package/dist/components/file-explorer-header/FileExplorerHeaderSummary.styles.cjs.js.map +0 -1
  248. package/dist/components/file-explorer-header/FileExplorerHeaderSummary.styles.esm.js +0 -7
  249. package/dist/components/file-explorer-header/FileExplorerHeaderSummary.styles.esm.js.map +0 -1
  250. package/dist/components/file-explorer-header/FileExplorerProvider.cjs.js +0 -13
  251. package/dist/components/file-explorer-header/FileExplorerProvider.cjs.js.map +0 -1
  252. package/dist/components/file-explorer-header/FileExplorerProvider.d.ts +0 -36
  253. package/dist/components/file-explorer-header/FileExplorerProvider.d.ts.map +0 -1
  254. package/dist/components/file-explorer-header/FileExplorerProvider.esm.js +0 -470
  255. package/dist/components/file-explorer-header/FileExplorerProvider.esm.js.map +0 -1
  256. package/dist/components/file-explorer-header/FileExplorerProvider.styles.cjs.js +0 -2
  257. package/dist/components/file-explorer-header/FileExplorerProvider.styles.cjs.js.map +0 -1
  258. package/dist/components/file-explorer-header/FileExplorerProvider.styles.esm.js +0 -7
  259. package/dist/components/file-explorer-header/FileExplorerProvider.styles.esm.js.map +0 -1
  260. package/dist/components/file-explorer-header/index.cjs.js +0 -1
  261. package/dist/components/file-explorer-header/index.d.ts +0 -3
  262. package/dist/components/file-explorer-header/index.d.ts.map +0 -1
  263. package/dist/components/file-explorer-header/index.esm.js +0 -2
  264. package/dist/components/file-explorer-header/types.d.ts +0 -10
  265. package/dist/components/file-explorer-header/types.d.ts.map +0 -1
  266. package/dist/components/resource-actions-menu/DeleteResourceDialog.d.ts +0 -8
  267. package/dist/components/resource-actions-menu/DeleteResourceDialog.d.ts.map +0 -1
  268. package/dist/components/resource-actions-menu/ResourceActionsMenu.cjs.js +0 -32
  269. package/dist/components/resource-actions-menu/ResourceActionsMenu.cjs.js.map +0 -1
  270. package/dist/components/resource-actions-menu/ResourceActionsMenu.d.ts +0 -19
  271. package/dist/components/resource-actions-menu/ResourceActionsMenu.d.ts.map +0 -1
  272. package/dist/components/resource-actions-menu/ResourceActionsMenu.esm.js +0 -322
  273. package/dist/components/resource-actions-menu/ResourceActionsMenu.esm.js.map +0 -1
  274. package/dist/components/resource-actions-menu/ResourceActionsMenu.styles.cjs.js +0 -2
  275. package/dist/components/resource-actions-menu/ResourceActionsMenu.styles.cjs.js.map +0 -1
  276. package/dist/components/resource-actions-menu/ResourceActionsMenu.styles.esm.js +0 -7
  277. package/dist/components/resource-actions-menu/ResourceActionsMenu.styles.esm.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"dialog2.cjs.js","names":["html","render","createSpinner","formatDisplayError","closeIcon","modalDialog","scrollLockState","WeakMap","getEventTargetElement","target","HTMLElement","Node","parentElement","getEventPath","event","composedPath","isDialogScrollRegionTarget","path","description","querySelector","includes","targetElement","contains","Boolean","closest","getDocumentScrollLockState","dom","state","get","count","previousHtmlOverflow","documentElement","style","overflow","previousBodyOverflow","body","removeScrollGuard","set","installDocumentScrollGuard","preventBackgroundScroll","preventDefault","addEventListener","capture","passive","removeEventListener","lockDocumentScroll","unlockDocumentScroll","getDialogMountTarget","isSolidUiButton","control","tagName","setDialogActionDisabled","disabled","toggleAttribute","setDialogActionLabel","label","setAttribute","textContent","getSharedDialogSaveButton","root","getSharedDialogCancelButton","ensureModalDialog","mountTarget","appendChild","createElement","id","innerHTML","getDialogElements","dialog","title","headerAction","error","buttons","savingOverlay","syncDialogErrorDescription","elements","defaultDescription","describedBy","hidden","trim","clearModalError","setModalError","fallbackMessage","openDialogElement","ownerDocument","showModal","open","closeDialogElement","close","removeAttribute","isMobileDialogLayout","isFocusableElement","element","hasAttribute","getAttribute","tabIndex","findPreferredInitialFocusTarget","container","focusableControls","querySelectorAll","join","match","focusInitialDialogTarget","focus","initialTarget","HTMLInputElement","HTMLTextAreaElement","select","firstButton","collectFormValues","form","data","FormData","values","forEach","value","key","String","openModal","message","Promise","resolve","finish","closeModal","requestCancel","cancelBtn","click","oncancel","resolvedHeaderAction","type","closeButton","iconSlot","onclick","actionButton","className","ariaLabel","onClick","btn","b","primary","cancel","beforeClose","shouldClose","scheduleInitialFocus","defaultView","requestAnimationFrame","callback","setTimeout","_result","headerActionButton","closeSharedDialog","alertDialog","updateSavingUI","submitLabel","isSaving","saveButton","cancelButton","classList","toggle","activeElement","blur","setSharedDialogSavingState","openInputDialog","options","cancelLabel","deriveDefaultFieldLabel","replace","ensureFormControlsHaveAccessibleNames","titleLabel","controls","Array","from","length","hasExplicitLabel","hasNativeLabel","handleSubmit","dialogPromise","shouldCloseWithoutSave","validate","validationMessage","onSave","fallback","formatSaveError","undefined","scheduleOpenCallback","onOpen","hideFooterButtons","then","result","finally","formatDisplayError","createSpinner","require_spinner","require_errorDisplay","lit_html","closeIcon","modalDialog","scrollLockState","getEventTargetElement","target","getEventPath","event","isDialogScrollRegionTarget","path","description","targetElement","getDocumentScrollLockState","state","dom","installDocumentScrollGuard","preventBackgroundScroll","lockDocumentScroll","unlockDocumentScroll","getDialogMountTarget","isSolidUiButton","control","setDialogActionDisabled","disabled","setDialogActionLabel","label","getSharedDialogSaveButton","root","getSharedDialogCancelButton","ensureModalDialog","mountTarget","getDialogElements","dialog","syncDialogErrorDescription","defaultDescription","describedBy","elements","clearModalError","setModalError","error","fallbackMessage","openDialogElement","closeDialogElement","isMobileDialogLayout","isFocusableElement","element","findPreferredInitialFocusTarget","focusableControls","container","match","focusInitialDialogTarget","initialTarget","firstButton","buttons","collectFormValues","data","form","values","key","value","openModal","title","message","finish","closeModal","resolve","requestCancel","cancelBtn","resolvedHeaderAction","headerAction","closeButton","iconSlot","actionButton","b","btn","callback","headerActionButton","updateSavingUI","saveButton","cancelButton","isSaving","activeElement","submitLabel","openInputDialog","options","cancelLabel","deriveDefaultFieldLabel","titleLabel","controls","hasExplicitLabel","hasNativeLabel","handleSubmit","dialogPromise","validationMessage","fallback","scheduleOpenCallback","result"],"sources":["../../../../../src/components/profile-heading/editor/ui/dialog.ts"],"sourcesContent":["import './dialog.css'\nimport 'solid-ui/components/button'\nimport '~icons/lucide/x'\nimport { html, render } from 'lit-html'\nimport { createSpinner } from './spinner'\nimport { formatDisplayError } from '../utils/errorDisplay'\n\nconst closeIcon = html`<icon-lucide-x aria-hidden=\"true\" focusable=\"false\" style=\"width:12px;height:12px;color:#667085\"></icon-lucide-x>`\n\n/* Copied from issue-pane, minor typescript adjustments */\n/* Changed modal from div to dialog element */\nlet modalDialog: HTMLDialogElement | null = null\n\nconst scrollLockState = new WeakMap<Document, {\n count: number,\n previousHtmlOverflow: string,\n previousBodyOverflow: string,\n removeScrollGuard: (() => void) | null\n}>()\n\nfunction getEventTargetElement (target: EventTarget | null): HTMLElement | null {\n if (target instanceof HTMLElement) return target\n if (target instanceof Node) return target.parentElement\n return null\n}\n\nfunction getEventPath (event: Event): EventTarget[] {\n if (typeof event.composedPath === 'function') {\n return event.composedPath()\n }\n\n return event.target ? [event.target] : []\n}\n\nfunction isDialogScrollRegionTarget (event: Event): boolean {\n const path = getEventPath(event)\n const description = modalDialog?.querySelector('#modal-desc')\n\n if (description && path.includes(description)) {\n return true\n }\n\n if (modalDialog && path.includes(modalDialog)) {\n return true\n }\n\n const targetElement = getEventTargetElement(event.target)\n if (!targetElement || !modalDialog || !modalDialog.contains(targetElement)) {\n return false\n }\n\n return Boolean(targetElement.closest('#modal-desc'))\n}\n\nfunction getDocumentScrollLockState (dom: Document) {\n let state = scrollLockState.get(dom)\n if (!state) {\n state = {\n count: 0,\n previousHtmlOverflow: dom.documentElement.style.overflow,\n previousBodyOverflow: dom.body.style.overflow,\n removeScrollGuard: null\n }\n scrollLockState.set(dom, state)\n }\n return state\n}\n\nfunction installDocumentScrollGuard (dom: Document): void {\n const state = getDocumentScrollLockState(dom)\n if (state.removeScrollGuard) return\n\n const preventBackgroundScroll = (event: Event) => {\n if (!isDialogScrollRegionTarget(event)) {\n event.preventDefault()\n }\n }\n\n dom.addEventListener('wheel', preventBackgroundScroll, { capture: true, passive: false })\n dom.addEventListener('touchmove', preventBackgroundScroll, { capture: true, passive: false })\n state.removeScrollGuard = () => {\n dom.removeEventListener('wheel', preventBackgroundScroll, true)\n dom.removeEventListener('touchmove', preventBackgroundScroll, true)\n state.removeScrollGuard = null\n }\n}\n\nfunction lockDocumentScroll (dom: Document): void {\n const state = getDocumentScrollLockState(dom)\n\n if (state.count === 0) {\n state.previousHtmlOverflow = dom.documentElement.style.overflow\n state.previousBodyOverflow = dom.body.style.overflow\n\n dom.documentElement.style.overflow = 'hidden'\n dom.body.style.overflow = 'hidden'\n installDocumentScrollGuard(dom)\n }\n\n state.count += 1\n}\n\nfunction unlockDocumentScroll (dom: Document): void {\n const state = getDocumentScrollLockState(dom)\n if (state.count === 0) return\n\n state.count -= 1\n if (state.count > 0) return\n\n dom.documentElement.style.overflow = state.previousHtmlOverflow\n dom.body.style.overflow = state.previousBodyOverflow\n state.removeScrollGuard?.()\n state.removeScrollGuard = null\n}\n\nfunction getDialogMountTarget (dom: Document): HTMLElement {\n return dom.body\n}\n\ntype DialogButtonValue = boolean | 'save' | null\ntype DialogButton = {\n label: string,\n value: DialogButtonValue,\n primary?: boolean,\n cancel?: boolean,\n beforeClose?: () => Promise<boolean> | boolean\n}\n\ntype DialogHeaderAction =\n | { type: 'close' }\n | { type: 'none' }\n | {\n type: 'button',\n label: string,\n ariaLabel?: string,\n className?: string,\n onClick?: () => Promise<void> | void\n }\n\ntype DialogElements = {\n dialog: HTMLDialogElement,\n title: HTMLHeadingElement,\n headerAction: HTMLDivElement,\n description: HTMLDivElement,\n error: HTMLElement,\n buttons: HTMLDivElement,\n savingOverlay: HTMLDivElement\n}\n\ntype DialogActionControl = HTMLElement & {\n disabled?: boolean,\n label?: string,\n click: () => void,\n shadowRoot?: ShadowRoot | null\n}\n\nfunction isSolidUiButton (control: Element | null): control is DialogActionControl {\n return control?.tagName === 'SOLID-UI-BUTTON'\n}\n\nfunction setDialogActionDisabled (control: DialogActionControl | null, disabled: boolean): void {\n if (!control) return\n control.disabled = disabled\n control.toggleAttribute('disabled', disabled)\n}\n\nfunction setDialogActionLabel (control: DialogActionControl | null, label: string): void {\n if (!control) return\n\n if (isSolidUiButton(control)) {\n control.label = label\n control.setAttribute('label', label)\n control.textContent = label\n return\n }\n\n ;(control as HTMLElement).textContent = label\n}\n\nexport function getSharedDialogSaveButton (root: ParentNode): DialogActionControl | null {\n return root.querySelector('#modal-buttons [data-dialog-primary=\"true\"]') as DialogActionControl | null\n}\n\nexport function getSharedDialogCancelButton (root: ParentNode): DialogActionControl | null {\n return root.querySelector('#modal-buttons [data-cancel=\"true\"]') as DialogActionControl | null\n}\n\nfunction ensureModalDialog (dom: Document): HTMLDialogElement {\n const mountTarget = getDialogMountTarget(dom)\n\n // if we previously created a dialog but it was removed from the document\n // (tests clear body), rebuild it. Checking presence ensures our reference\n // doesn't point at a detached element.\n if (modalDialog && dom.body.contains(modalDialog)) {\n if (modalDialog.parentElement !== mountTarget) {\n mountTarget.appendChild(modalDialog)\n }\n return modalDialog\n }\n\n modalDialog = null\n modalDialog = dom.createElement('dialog')\n modalDialog.id = 'profile-modal'\n modalDialog.setAttribute('aria-modal', 'true')\n modalDialog.setAttribute('aria-labelledby', 'modal-title')\n modalDialog.setAttribute('aria-describedby', 'modal-desc')\n\n modalDialog.innerHTML = `\n <div class=\"modal\">\n <div class=\"modal-header flex-row align-center justify-between\">\n <h2 id=\"modal-title\"></h2>\n <div id=\"modal-header-action\" class=\"flex-row align-center\"></div>\n </div>\n <div id=\"modal-desc\"></div>\n <section id=\"modal-error\" class=\"modal__error-section\" aria-live=\"assertive\" aria-atomic=\"true\" aria-hidden=\"true\" role=\"alert\" tabindex=\"-1\" hidden></section>\n <div id=\"modal-buttons\" class=\"flex-row align-center justify-end\"></div>\n <div id=\"modal-saving-overlay\" hidden></div>\n </div>\n `\n\n mountTarget.appendChild(modalDialog)\n return modalDialog\n}\n\nfunction getDialogElements (dialog: HTMLDialogElement): DialogElements {\n return {\n dialog,\n title: dialog.querySelector('#modal-title') as HTMLHeadingElement,\n headerAction: dialog.querySelector('#modal-header-action') as HTMLDivElement,\n description: dialog.querySelector('#modal-desc') as HTMLDivElement,\n error: dialog.querySelector('#modal-error') as HTMLElement,\n buttons: dialog.querySelector('#modal-buttons') as HTMLDivElement,\n savingOverlay: dialog.querySelector('#modal-saving-overlay') as HTMLDivElement\n }\n}\n\nfunction syncDialogErrorDescription (elements: DialogElements): void {\n const defaultDescription = 'modal-desc'\n const describedBy = elements.error.hidden || !elements.error.textContent?.trim()\n ? defaultDescription\n : `${defaultDescription} modal-error`\n\n elements.dialog.setAttribute('aria-describedby', describedBy)\n}\n\nfunction clearModalError (elements: DialogElements): void {\n elements.error.textContent = ''\n elements.error.setAttribute('aria-hidden', 'true')\n elements.error.hidden = true\n syncDialogErrorDescription(elements)\n}\n\nfunction setModalError (elements: DialogElements, error: unknown, fallbackMessage?: string): void {\n elements.error.textContent = formatDisplayError(error, fallbackMessage)\n elements.error.setAttribute('aria-hidden', 'false')\n elements.error.hidden = false\n syncDialogErrorDescription(elements)\n}\n\nfunction openDialogElement (dialog: HTMLDialogElement): void {\n lockDocumentScroll(dialog.ownerDocument)\n\n if (typeof dialog.showModal === 'function') {\n try {\n if (!dialog.open) dialog.showModal()\n return\n } catch {\n // Fall back for jsdom or partial dialog implementations.\n }\n }\n\n dialog.setAttribute('open', '')\n}\n\nfunction closeDialogElement (dialog: HTMLDialogElement): void {\n try {\n if (typeof dialog.close === 'function' && dialog.open) {\n dialog.close()\n return\n }\n\n dialog.removeAttribute('open')\n } finally {\n unlockDocumentScroll(dialog.ownerDocument)\n }\n}\n\nfunction isMobileDialogLayout (dom: Document): boolean {\n return Boolean(dom.querySelector('[data-layout=\\'mobile\\']'))\n}\n\nfunction isFocusableElement (element: HTMLElement): boolean {\n if (element.hasAttribute('disabled')) return false\n if (element.getAttribute('aria-hidden') === 'true') return false\n if (element.getAttribute('hidden') !== null) return false\n if (element.tabIndex < 0) return false\n return true\n}\n\nfunction findPreferredInitialFocusTarget (container: ParentNode): HTMLElement | null {\n const focusableControls = container.querySelectorAll([\n 'input:not([type=\"hidden\"]):not([disabled])',\n 'textarea:not([disabled])',\n 'select:not([disabled])',\n 'solid-ui-select:not([disabled])',\n 'solid-ui-combobox:not([disabled])',\n '[contenteditable=\"true\"]',\n 'button:not([disabled])',\n 'solid-ui-button:not([disabled])',\n '[tabindex]:not([tabindex=\"-1\"])'\n ].join(','))\n\n for (const match of focusableControls) {\n if (match instanceof HTMLElement && isFocusableElement(match)) return match\n }\n\n return null\n}\n\nfunction focusInitialDialogTarget (dialog: HTMLDialogElement, description: HTMLDivElement, buttons: HTMLDivElement): void {\n if (isMobileDialogLayout(dialog.ownerDocument)) {\n dialog.tabIndex = -1\n dialog.focus()\n return\n }\n\n const initialTarget = findPreferredInitialFocusTarget(description)\n if (initialTarget) {\n initialTarget.focus()\n if (initialTarget instanceof HTMLInputElement || initialTarget instanceof HTMLTextAreaElement) {\n initialTarget.select()\n }\n return\n }\n\n const firstButton = findPreferredInitialFocusTarget(buttons)\n if (firstButton) {\n firstButton.focus()\n }\n}\n\nfunction collectFormValues (form: HTMLFormElement): InputDialogValues {\n const data = new FormData(form)\n const values: InputDialogValues = {}\n data.forEach((value, key) => {\n values[key] = String(value)\n })\n return values\n}\n\nfunction openModal ({\n title,\n message,\n buttons,\n headerAction,\n dom\n}: {\n title?: string,\n message?: string | Node,\n buttons: DialogButton[],\n headerAction?: DialogHeaderAction,\n dom: Document\n}) {\n const dialog = ensureModalDialog(dom)\n const elements = getDialogElements(dialog)\n\n openDialogElement(dialog)\n\n elements.title.textContent = title || ''\n elements.description.innerHTML = ''\n if (typeof message === 'string') {\n elements.description.textContent = message\n } else if (message) {\n elements.description.appendChild(message)\n }\n\n elements.buttons.innerHTML = ''\n clearModalError(elements)\n\n return new Promise<DialogButtonValue>((resolve) => {\n const finish = (value: DialogButtonValue) => {\n closeModal(value)\n resolve(value)\n }\n\n const requestCancel = () => {\n const cancelBtn = getSharedDialogCancelButton(dialog)\n if (cancelBtn) {\n cancelBtn.click()\n return\n }\n\n finish(false)\n }\n\n dialog.oncancel = (event: Event) => {\n event.preventDefault()\n requestCancel()\n }\n\n elements.headerAction.innerHTML = ''\n const resolvedHeaderAction = headerAction || { type: 'close' as const }\n if (resolvedHeaderAction.type === 'close') {\n const closeButton = dom.createElement('solid-ui-button') as DialogActionControl\n closeButton.setAttribute('variant', 'ghost')\n closeButton.setAttribute('aria-label', 'Close dialog')\n const iconSlot = dom.createElement('span')\n iconSlot.setAttribute('slot', 'icon')\n render(closeIcon, iconSlot)\n closeButton.appendChild(iconSlot)\n closeButton.onclick = () => requestCancel()\n elements.headerAction.appendChild(closeButton)\n } else if (resolvedHeaderAction.type === 'button') {\n const actionButton = dom.createElement('solid-ui-button') as DialogActionControl\n actionButton.setAttribute('variant', 'tertiary')\n actionButton.className = resolvedHeaderAction.className || ''\n actionButton.textContent = resolvedHeaderAction.label\n actionButton.setAttribute('label', resolvedHeaderAction.label)\n actionButton.setAttribute('aria-label', resolvedHeaderAction.ariaLabel || resolvedHeaderAction.label)\n actionButton.onclick = async () => {\n if (resolvedHeaderAction.onClick) {\n await resolvedHeaderAction.onClick()\n }\n }\n elements.headerAction.appendChild(actionButton)\n }\n\n buttons.forEach((btn) => {\n const b = dom.createElement('solid-ui-button') as DialogActionControl\n b.setAttribute('label', btn.label)\n b.setAttribute('variant', btn.primary ? 'primary' : 'secondary')\n b.textContent = btn.label\n if (btn.primary) {\n b.setAttribute('data-dialog-primary', 'true')\n }\n if (btn.cancel) {\n b.setAttribute('data-cancel', 'true')\n }\n b.addEventListener('click', async () => {\n if (btn.beforeClose) {\n const shouldClose = await btn.beforeClose()\n if (!shouldClose) return\n }\n finish(btn.value)\n })\n elements.buttons.appendChild(b)\n })\n\n const scheduleInitialFocus = dom.defaultView?.requestAnimationFrame\n ? (callback: () => void) => dom.defaultView?.requestAnimationFrame(() => callback())\n : (callback: () => void) => setTimeout(callback, 0)\n\n scheduleInitialFocus(() => {\n focusInitialDialogTarget(dialog, elements.description, elements.buttons)\n })\n })\n}\n\nfunction closeModal (_result: DialogButtonValue): void {\n if (modalDialog) {\n const elements = getDialogElements(modalDialog)\n clearModalError(elements)\n closeDialogElement(modalDialog)\n modalDialog.oncancel = null\n const headerActionButton = modalDialog.querySelector('#modal-header-action button') as HTMLButtonElement | null\n if (headerActionButton) headerActionButton.onclick = null\n }\n}\n\nexport function closeSharedDialog (): void {\n closeModal(null)\n}\n\nexport function alertDialog (message: string, title = 'Information', dom: Document) {\n return openModal({\n title,\n message,\n buttons: [{ label: 'OK', value: true, primary: true }],\n dom\n })\n}\n\nfunction updateSavingUI (dialog: HTMLDialogElement, submitLabel: string, isSaving: boolean) {\n const elements = getDialogElements(dialog)\n const saveButton = getSharedDialogSaveButton(dialog)\n const cancelButton = getSharedDialogCancelButton(dialog)\n\n dialog.classList.toggle('modal--saving', isSaving)\n dialog.setAttribute('aria-busy', String(isSaving))\n elements.description.toggleAttribute('inert', isSaving)\n\n if (isSaving) {\n const activeElement = dialog.ownerDocument.activeElement as HTMLElement | null\n if (activeElement && dialog.contains(activeElement)) {\n activeElement.blur()\n }\n }\n\n if (saveButton) {\n setDialogActionDisabled(saveButton, isSaving)\n saveButton.setAttribute('aria-busy', String(isSaving))\n setDialogActionLabel(saveButton, submitLabel)\n }\n\n if (cancelButton) {\n setDialogActionDisabled(cancelButton, isSaving)\n }\n\n elements.savingOverlay.hidden = !isSaving\n if (isSaving) {\n render(html`\n <div class=\"modal__saving-indicator inline-flex-row justify-center\" aria-live=\"polite\" aria-label=\"Saving changes\">\n ${createSpinner()}\n </div>\n `, elements.savingOverlay)\n } else {\n render(html``, elements.savingOverlay)\n }\n}\n\nexport function setSharedDialogSavingState (dom: Document, isSaving: boolean, submitLabel = 'Saving Changes'): void {\n const dialog = ensureModalDialog(dom)\n updateSavingUI(dialog, submitLabel, isSaving)\n}\n\ntype OpenInputDialogCustom = {\n title: string,\n dom: Document,\n form: HTMLFormElement,\n submitLabel?: string,\n cancelLabel?: string,\n headerAction?: DialogHeaderAction,\n hideFooterButtons?: boolean,\n onOpen?: () => void,\n shouldCloseWithoutSave?: () => Promise<boolean> | boolean,\n validate?: () => Promise<string | null> | string | null,\n onSave?: () => Promise<void> | void,\n formatSaveError?: (error: unknown) => string\n}\n\ntype InputDialogValues = Record<string, string>\n/* Function below generated by AI Model: GPT-5.3-Codex */\n/* Prompt: write me a reusable function to open a dialog with a form and return the form values on submit.\nThe function should also support validation and display error messages in the dialog.\nIt should reuse the OpenModal function for consistency. Done in 2 passes */\nexport function openInputDialog (options: OpenInputDialogCustom): Promise<InputDialogValues | null> {\n const submitLabel = options.submitLabel || 'Save Changes'\n const cancelLabel = options.cancelLabel || 'Cancel'\n const dialog = ensureModalDialog(options.dom)\n const elements = getDialogElements(dialog)\n\n const deriveDefaultFieldLabel = (value: string): string => value\n .replace(/^\\s*edit\\s+/i, '')\n .replace(/^\\s*add\\s+/i, '')\n .replace(/^\\s*create\\s+/i, '')\n .trim()\n\n const ensureFormControlsHaveAccessibleNames = () => {\n const titleLabel = deriveDefaultFieldLabel(options.title)\n if (!titleLabel) return\n\n const controls = Array.from(options.form.querySelectorAll<HTMLInputElement | HTMLTextAreaElement | HTMLSelectElement>([\n 'input:not([type=\"hidden\"])',\n 'textarea',\n 'select'\n ].join(',')))\n\n if (controls.length !== 1) return\n\n const [control] = controls\n const hasExplicitLabel = control.hasAttribute('aria-label') || control.hasAttribute('aria-labelledby')\n const hasNativeLabel = Boolean(control.closest('label'))\n if (hasExplicitLabel || hasNativeLabel || control.getAttribute('type') === 'hidden') {\n return\n }\n\n if (!control.getAttribute('aria-label')) {\n control.setAttribute('aria-label', titleLabel)\n }\n }\n\n ensureFormControlsHaveAccessibleNames()\n\n const handleSubmit = (event: SubmitEvent) => {\n event.preventDefault()\n const saveButton = getSharedDialogSaveButton(dialog)\n saveButton?.click()\n }\n\n options.form.addEventListener('submit', handleSubmit)\n\n const dialogPromise = openModal({\n title: options.title,\n message: options.form,\n headerAction: options.headerAction,\n buttons: [\n { label: cancelLabel, value: null, cancel: true },\n {\n label: submitLabel,\n value: 'save',\n primary: true,\n beforeClose: async () => {\n clearModalError(elements)\n\n if (options.shouldCloseWithoutSave && await options.shouldCloseWithoutSave()) {\n return true\n }\n\n if (options.validate) {\n const validationMessage = await options.validate()\n if (validationMessage) {\n setModalError(elements, validationMessage)\n return false\n }\n }\n\n if (!options.onSave) return true\n\n try {\n updateSavingUI(dialog, submitLabel, true)\n\n await options.onSave()\n return true\n } catch (error) {\n updateSavingUI(dialog, submitLabel, false)\n const fallback = options.formatSaveError ? options.formatSaveError(error) : undefined\n setModalError(elements, error, fallback)\n return false\n }\n }\n }\n ],\n dom: options.dom\n })\n\n const scheduleOpenCallback = options.dom.defaultView?.requestAnimationFrame\n ? (callback: () => void) => options.dom.defaultView?.requestAnimationFrame(() => callback())\n : (callback: () => void) => setTimeout(callback, 0)\n\n if (options.onOpen) {\n scheduleOpenCallback(options.onOpen)\n }\n\n elements.buttons.hidden = Boolean(options.hideFooterButtons)\n\n return dialogPromise\n .then((result) => {\n if (result !== 'save') return null\n return collectFormValues(options.form)\n })\n .finally(() => {\n elements.buttons.hidden = false\n updateSavingUI(dialog, submitLabel, false)\n options.form.removeEventListener('submit', handleSubmit)\n })\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"dialog2.cjs.js","names":["html","render","createSpinner","formatDisplayError","closeIcon","modalDialog","scrollLockState","WeakMap","getEventTargetElement","target","HTMLElement","Node","parentElement","getEventPath","event","composedPath","isDialogScrollRegionTarget","path","description","querySelector","includes","targetElement","contains","Boolean","closest","getDocumentScrollLockState","dom","state","get","count","previousHtmlOverflow","documentElement","style","overflow","previousBodyOverflow","body","removeScrollGuard","set","installDocumentScrollGuard","preventBackgroundScroll","preventDefault","addEventListener","capture","passive","removeEventListener","lockDocumentScroll","unlockDocumentScroll","getDialogMountTarget","isSolidUiButton","control","tagName","setDialogActionDisabled","disabled","toggleAttribute","setDialogActionLabel","label","setAttribute","textContent","getSharedDialogSaveButton","root","getSharedDialogCancelButton","ensureModalDialog","mountTarget","appendChild","createElement","id","innerHTML","getDialogElements","dialog","title","headerAction","error","buttons","savingOverlay","syncDialogErrorDescription","elements","defaultDescription","describedBy","hidden","trim","clearModalError","setModalError","fallbackMessage","openDialogElement","ownerDocument","showModal","open","closeDialogElement","close","removeAttribute","isMobileDialogLayout","isFocusableElement","element","hasAttribute","getAttribute","tabIndex","findPreferredInitialFocusTarget","container","focusableControls","querySelectorAll","join","match","focusInitialDialogTarget","focus","initialTarget","HTMLInputElement","HTMLTextAreaElement","select","firstButton","collectFormValues","form","data","FormData","values","forEach","value","key","String","openModal","message","Promise","resolve","finish","closeModal","requestCancel","cancelBtn","click","oncancel","resolvedHeaderAction","type","closeButton","iconSlot","onclick","actionButton","className","ariaLabel","onClick","btn","b","primary","cancel","beforeClose","shouldClose","scheduleInitialFocus","defaultView","requestAnimationFrame","callback","setTimeout","_result","headerActionButton","closeSharedDialog","alertDialog","updateSavingUI","submitLabel","isSaving","saveButton","cancelButton","classList","toggle","activeElement","blur","setSharedDialogSavingState","openInputDialog","options","cancelLabel","deriveDefaultFieldLabel","replace","ensureFormControlsHaveAccessibleNames","titleLabel","controls","Array","from","length","hasExplicitLabel","hasNativeLabel","handleSubmit","dialogPromise","shouldCloseWithoutSave","validate","validationMessage","onSave","fallback","formatSaveError","undefined","scheduleOpenCallback","onOpen","hideFooterButtons","then","result","finally","formatDisplayError","createSpinner","require_spinner","require_errorDisplay","lit_html","closeIcon","modalDialog","scrollLockState","getEventTargetElement","target","getEventPath","event","isDialogScrollRegionTarget","path","description","targetElement","getDocumentScrollLockState","state","dom","installDocumentScrollGuard","preventBackgroundScroll","lockDocumentScroll","unlockDocumentScroll","getDialogMountTarget","isSolidUiButton","control","setDialogActionDisabled","disabled","setDialogActionLabel","label","getSharedDialogSaveButton","root","getSharedDialogCancelButton","ensureModalDialog","mountTarget","getDialogElements","dialog","syncDialogErrorDescription","defaultDescription","describedBy","elements","clearModalError","setModalError","error","fallbackMessage","openDialogElement","closeDialogElement","isMobileDialogLayout","isFocusableElement","element","findPreferredInitialFocusTarget","focusableControls","container","match","focusInitialDialogTarget","initialTarget","firstButton","buttons","collectFormValues","data","form","values","key","value","openModal","title","message","finish","closeModal","resolve","requestCancel","cancelBtn","resolvedHeaderAction","headerAction","closeButton","iconSlot","actionButton","b","btn","callback","headerActionButton","updateSavingUI","saveButton","cancelButton","isSaving","activeElement","submitLabel","openInputDialog","options","cancelLabel","deriveDefaultFieldLabel","titleLabel","controls","hasExplicitLabel","hasNativeLabel","handleSubmit","dialogPromise","validationMessage","fallback","scheduleOpenCallback","result"],"sources":["../../../../../src/components/profile-heading/editor/ui/dialog.ts"],"sourcesContent":["import './dialog.css'\nimport 'solid-ui/components/button'\nimport '~icons/lucide/x'\nimport { html, render } from 'lit-html'\nimport { createSpinner } from './spinner'\nimport { formatDisplayError } from '../utils/errorDisplay'\n\nconst closeIcon = html`<icon-lucide-x aria-hidden=\"true\" focusable=\"false\" style=\"width:12px;height:12px;color:#667085\"></icon-lucide-x>`\n\n/* Copied from issue-pane, minor typescript adjustments */\n/* Changed modal from div to dialog element */\nlet modalDialog: HTMLDialogElement | null = null\n\nconst scrollLockState = new WeakMap<Document, {\n count: number,\n previousHtmlOverflow: string,\n previousBodyOverflow: string,\n removeScrollGuard: (() => void) | null\n}>()\n\nfunction getEventTargetElement (target: EventTarget | null): HTMLElement | null {\n if (target instanceof HTMLElement) return target\n if (target instanceof Node) return target.parentElement\n return null\n}\n\nfunction getEventPath (event: Event): EventTarget[] {\n if (typeof event.composedPath === 'function') {\n return event.composedPath()\n }\n\n return event.target ? [event.target] : []\n}\n\nfunction isDialogScrollRegionTarget (event: Event): boolean {\n const path = getEventPath(event)\n const description = modalDialog?.querySelector('#modal-desc')\n\n if (description && path.includes(description)) {\n return true\n }\n\n if (modalDialog && path.includes(modalDialog)) {\n return true\n }\n\n const targetElement = getEventTargetElement(event.target)\n if (!targetElement || !modalDialog || !modalDialog.contains(targetElement)) {\n return false\n }\n\n return Boolean(targetElement.closest('#modal-desc'))\n}\n\nfunction getDocumentScrollLockState (dom: Document) {\n let state = scrollLockState.get(dom)\n if (!state) {\n state = {\n count: 0,\n previousHtmlOverflow: dom.documentElement.style.overflow,\n previousBodyOverflow: dom.body.style.overflow,\n removeScrollGuard: null\n }\n scrollLockState.set(dom, state)\n }\n return state\n}\n\nfunction installDocumentScrollGuard (dom: Document): void {\n const state = getDocumentScrollLockState(dom)\n if (state.removeScrollGuard) return\n\n const preventBackgroundScroll = (event: Event) => {\n if (!isDialogScrollRegionTarget(event)) {\n event.preventDefault()\n }\n }\n\n dom.addEventListener('wheel', preventBackgroundScroll, { capture: true, passive: false })\n dom.addEventListener('touchmove', preventBackgroundScroll, { capture: true, passive: false })\n state.removeScrollGuard = () => {\n dom.removeEventListener('wheel', preventBackgroundScroll, true)\n dom.removeEventListener('touchmove', preventBackgroundScroll, true)\n state.removeScrollGuard = null\n }\n}\n\nfunction lockDocumentScroll (dom: Document): void {\n const state = getDocumentScrollLockState(dom)\n\n if (state.count === 0) {\n state.previousHtmlOverflow = dom.documentElement.style.overflow\n state.previousBodyOverflow = dom.body.style.overflow\n\n dom.documentElement.style.overflow = 'hidden'\n dom.body.style.overflow = 'hidden'\n installDocumentScrollGuard(dom)\n }\n\n state.count += 1\n}\n\nfunction unlockDocumentScroll (dom: Document): void {\n const state = getDocumentScrollLockState(dom)\n if (state.count === 0) return\n\n state.count -= 1\n if (state.count > 0) return\n\n dom.documentElement.style.overflow = state.previousHtmlOverflow\n dom.body.style.overflow = state.previousBodyOverflow\n state.removeScrollGuard?.()\n state.removeScrollGuard = null\n}\n\nfunction getDialogMountTarget (dom: Document): HTMLElement {\n return dom.body\n}\n\ntype DialogButtonValue = boolean | 'save' | null\ntype DialogButton = {\n label: string,\n value: DialogButtonValue,\n primary?: boolean,\n cancel?: boolean,\n beforeClose?: () => Promise<boolean> | boolean\n}\n\ntype DialogHeaderAction =\n | { type: 'close' }\n | { type: 'none' }\n | {\n type: 'button',\n label: string,\n ariaLabel?: string,\n className?: string,\n onClick?: () => Promise<void> | void\n }\n\ntype DialogElements = {\n dialog: HTMLDialogElement,\n title: HTMLHeadingElement,\n headerAction: HTMLDivElement,\n description: HTMLDivElement,\n error: HTMLElement,\n buttons: HTMLDivElement,\n savingOverlay: HTMLDivElement\n}\n\ntype DialogActionControl = HTMLElement & {\n disabled?: boolean,\n label?: string,\n click: () => void,\n shadowRoot?: ShadowRoot | null\n}\n\nfunction isSolidUiButton (control: Element | null): control is DialogActionControl {\n return control?.tagName === 'SOLID-UI-BUTTON'\n}\n\nfunction setDialogActionDisabled (control: DialogActionControl | null, disabled: boolean): void {\n if (!control) return\n control.disabled = disabled\n control.toggleAttribute('disabled', disabled)\n}\n\nfunction setDialogActionLabel (control: DialogActionControl | null, label: string): void {\n if (!control) return\n\n if (isSolidUiButton(control)) {\n control.label = label\n control.setAttribute('label', label)\n control.textContent = label\n return\n }\n\n ;(control as HTMLElement).textContent = label\n}\n\nexport function getSharedDialogSaveButton (root: ParentNode): DialogActionControl | null {\n return root.querySelector('#modal-buttons [data-dialog-primary=\"true\"]') as DialogActionControl | null\n}\n\nexport function getSharedDialogCancelButton (root: ParentNode): DialogActionControl | null {\n return root.querySelector('#modal-buttons [data-cancel=\"true\"]') as DialogActionControl | null\n}\n\nfunction ensureModalDialog (dom: Document): HTMLDialogElement {\n const mountTarget = getDialogMountTarget(dom)\n\n // if we previously created a dialog but it was removed from the document\n // (tests clear body), rebuild it. Checking presence ensures our reference\n // doesn't point at a detached element.\n if (modalDialog && dom.body.contains(modalDialog)) {\n if (modalDialog.parentElement !== mountTarget) {\n mountTarget.appendChild(modalDialog)\n }\n return modalDialog\n }\n\n modalDialog = null\n modalDialog = dom.createElement('dialog')\n modalDialog.id = 'profile-modal'\n modalDialog.setAttribute('aria-modal', 'true')\n modalDialog.setAttribute('aria-labelledby', 'modal-title')\n modalDialog.setAttribute('aria-describedby', 'modal-desc')\n\n modalDialog.innerHTML = `\n <div class=\"modal\">\n <div class=\"modal-header flex-row align-center justify-between\">\n <h2 id=\"modal-title\"></h2>\n <div id=\"modal-header-action\" class=\"flex-row align-center\"></div>\n </div>\n <div id=\"modal-desc\"></div>\n <section id=\"modal-error\" class=\"modal__error-section\" aria-live=\"assertive\" aria-atomic=\"true\" aria-hidden=\"true\" role=\"alert\" tabindex=\"-1\" hidden></section>\n <div id=\"modal-buttons\" class=\"flex-row align-center justify-end\"></div>\n <div id=\"modal-saving-overlay\" hidden></div>\n </div>\n `\n\n mountTarget.appendChild(modalDialog)\n return modalDialog\n}\n\nfunction getDialogElements (dialog: HTMLDialogElement): DialogElements {\n return {\n dialog,\n title: dialog.querySelector('#modal-title') as HTMLHeadingElement,\n headerAction: dialog.querySelector('#modal-header-action') as HTMLDivElement,\n description: dialog.querySelector('#modal-desc') as HTMLDivElement,\n error: dialog.querySelector('#modal-error') as HTMLElement,\n buttons: dialog.querySelector('#modal-buttons') as HTMLDivElement,\n savingOverlay: dialog.querySelector('#modal-saving-overlay') as HTMLDivElement\n }\n}\n\nfunction syncDialogErrorDescription (elements: DialogElements): void {\n const defaultDescription = 'modal-desc'\n const describedBy = elements.error.hidden || !elements.error.textContent?.trim()\n ? defaultDescription\n : `${defaultDescription} modal-error`\n\n elements.dialog.setAttribute('aria-describedby', describedBy)\n}\n\nfunction clearModalError (elements: DialogElements): void {\n elements.error.textContent = ''\n elements.error.setAttribute('aria-hidden', 'true')\n elements.error.hidden = true\n syncDialogErrorDescription(elements)\n}\n\nfunction setModalError (elements: DialogElements, error: unknown, fallbackMessage?: string): void {\n elements.error.textContent = formatDisplayError(error, fallbackMessage)\n elements.error.setAttribute('aria-hidden', 'false')\n elements.error.hidden = false\n syncDialogErrorDescription(elements)\n}\n\nfunction openDialogElement (dialog: HTMLDialogElement): void {\n lockDocumentScroll(dialog.ownerDocument)\n\n if (typeof dialog.showModal === 'function') {\n try {\n if (!dialog.open) dialog.showModal()\n return\n } catch {\n // Fall back for jsdom or partial dialog implementations.\n }\n }\n\n dialog.setAttribute('open', '')\n}\n\nfunction closeDialogElement (dialog: HTMLDialogElement): void {\n try {\n if (typeof dialog.close === 'function' && dialog.open) {\n dialog.close()\n return\n }\n\n dialog.removeAttribute('open')\n } finally {\n unlockDocumentScroll(dialog.ownerDocument)\n }\n}\n\nfunction isMobileDialogLayout (dom: Document): boolean {\n return Boolean(dom.querySelector('[data-layout=\\'mobile\\']'))\n}\n\nfunction isFocusableElement (element: HTMLElement): boolean {\n if (element.hasAttribute('disabled')) return false\n if (element.getAttribute('aria-hidden') === 'true') return false\n if (element.getAttribute('hidden') !== null) return false\n if (element.tabIndex < 0) return false\n return true\n}\n\nfunction findPreferredInitialFocusTarget (container: ParentNode): HTMLElement | null {\n const focusableControls = container.querySelectorAll([\n 'input:not([type=\"hidden\"]):not([disabled])',\n 'textarea:not([disabled])',\n 'select:not([disabled])',\n 'solid-ui-select:not([disabled])',\n 'solid-ui-combobox:not([disabled])',\n '[contenteditable=\"true\"]',\n 'button:not([disabled])',\n 'solid-ui-button:not([disabled])',\n '[tabindex]:not([tabindex=\"-1\"])'\n ].join(','))\n\n for (const match of focusableControls) {\n if (match instanceof HTMLElement && isFocusableElement(match)) return match\n }\n\n return null\n}\n\nfunction focusInitialDialogTarget (dialog: HTMLDialogElement, description: HTMLDivElement, buttons: HTMLDivElement): void {\n if (isMobileDialogLayout(dialog.ownerDocument)) {\n dialog.tabIndex = -1\n dialog.focus()\n return\n }\n\n const initialTarget = findPreferredInitialFocusTarget(description)\n if (initialTarget) {\n initialTarget.focus()\n if (initialTarget instanceof HTMLInputElement || initialTarget instanceof HTMLTextAreaElement) {\n initialTarget.select()\n }\n return\n }\n\n const firstButton = findPreferredInitialFocusTarget(buttons)\n if (firstButton) {\n firstButton.focus()\n }\n}\n\nfunction collectFormValues (form: HTMLFormElement): InputDialogValues {\n const data = new FormData(form)\n const values: InputDialogValues = {}\n data.forEach((value, key) => {\n values[key] = String(value)\n })\n return values\n}\n\nfunction openModal ({\n title,\n message,\n buttons,\n headerAction,\n dom\n}: {\n title?: string,\n message?: string | Node,\n buttons: DialogButton[],\n headerAction?: DialogHeaderAction,\n dom: Document\n}) {\n const dialog = ensureModalDialog(dom)\n const elements = getDialogElements(dialog)\n\n openDialogElement(dialog)\n\n elements.title.textContent = title || ''\n elements.description.innerHTML = ''\n if (typeof message === 'string') {\n elements.description.textContent = message\n } else if (message) {\n elements.description.appendChild(message)\n }\n\n elements.buttons.innerHTML = ''\n clearModalError(elements)\n\n return new Promise<DialogButtonValue>((resolve) => {\n const finish = (value: DialogButtonValue) => {\n closeModal(value)\n resolve(value)\n }\n\n const requestCancel = () => {\n const cancelBtn = getSharedDialogCancelButton(dialog)\n if (cancelBtn) {\n cancelBtn.click()\n return\n }\n\n finish(false)\n }\n\n dialog.oncancel = (event: Event) => {\n event.preventDefault()\n requestCancel()\n }\n\n elements.headerAction.innerHTML = ''\n const resolvedHeaderAction = headerAction || { type: 'close' as const }\n if (resolvedHeaderAction.type === 'close') {\n const closeButton = dom.createElement('solid-ui-button') as DialogActionControl\n closeButton.setAttribute('variant', 'ghost')\n closeButton.setAttribute('aria-label', 'Close dialog')\n const iconSlot = dom.createElement('span')\n iconSlot.setAttribute('slot', 'icon')\n render(closeIcon, iconSlot)\n closeButton.appendChild(iconSlot)\n closeButton.onclick = () => requestCancel()\n elements.headerAction.appendChild(closeButton)\n } else if (resolvedHeaderAction.type === 'button') {\n const actionButton = dom.createElement('solid-ui-button') as DialogActionControl\n actionButton.setAttribute('variant', 'tertiary')\n actionButton.className = resolvedHeaderAction.className || ''\n actionButton.textContent = resolvedHeaderAction.label\n actionButton.setAttribute('label', resolvedHeaderAction.label)\n actionButton.setAttribute('aria-label', resolvedHeaderAction.ariaLabel || resolvedHeaderAction.label)\n actionButton.onclick = async () => {\n if (resolvedHeaderAction.onClick) {\n await resolvedHeaderAction.onClick()\n }\n }\n elements.headerAction.appendChild(actionButton)\n }\n\n buttons.forEach((btn) => {\n const b = dom.createElement('solid-ui-button') as DialogActionControl\n b.setAttribute('label', btn.label)\n b.setAttribute('variant', btn.primary ? 'primary' : 'secondary')\n b.textContent = btn.label\n if (btn.primary) {\n b.setAttribute('data-dialog-primary', 'true')\n }\n if (btn.cancel) {\n b.setAttribute('data-cancel', 'true')\n }\n b.addEventListener('click', async () => {\n if (btn.beforeClose) {\n const shouldClose = await btn.beforeClose()\n if (!shouldClose) return\n }\n finish(btn.value)\n })\n elements.buttons.appendChild(b)\n })\n\n const scheduleInitialFocus = dom.defaultView?.requestAnimationFrame\n ? (callback: () => void) => dom.defaultView?.requestAnimationFrame(() => callback())\n : (callback: () => void) => setTimeout(callback, 0)\n\n scheduleInitialFocus(() => {\n focusInitialDialogTarget(dialog, elements.description, elements.buttons)\n })\n })\n}\n\nfunction closeModal (_result: DialogButtonValue): void {\n if (modalDialog) {\n const elements = getDialogElements(modalDialog)\n clearModalError(elements)\n closeDialogElement(modalDialog)\n modalDialog.oncancel = null\n const headerActionButton = modalDialog.querySelector('#modal-header-action button') as HTMLButtonElement | null\n if (headerActionButton) headerActionButton.onclick = null\n }\n}\n\nexport function closeSharedDialog (): void {\n closeModal(null)\n}\n\nexport function alertDialog (message: string, title = 'Information', dom: Document) {\n return openModal({\n title,\n message,\n buttons: [{ label: 'OK', value: true, primary: true }],\n dom\n })\n}\n\nfunction updateSavingUI (dialog: HTMLDialogElement, submitLabel: string, isSaving: boolean) {\n const elements = getDialogElements(dialog)\n const saveButton = getSharedDialogSaveButton(dialog)\n const cancelButton = getSharedDialogCancelButton(dialog)\n\n dialog.classList.toggle('modal--saving', isSaving)\n dialog.setAttribute('aria-busy', String(isSaving))\n elements.description.toggleAttribute('inert', isSaving)\n\n if (isSaving) {\n const activeElement = dialog.ownerDocument.activeElement as HTMLElement | null\n if (activeElement && dialog.contains(activeElement)) {\n activeElement.blur()\n }\n }\n\n if (saveButton) {\n setDialogActionDisabled(saveButton, isSaving)\n saveButton.setAttribute('aria-busy', String(isSaving))\n setDialogActionLabel(saveButton, submitLabel)\n }\n\n if (cancelButton) {\n setDialogActionDisabled(cancelButton, isSaving)\n }\n\n elements.savingOverlay.hidden = !isSaving\n if (isSaving) {\n render(html`\n <div class=\"modal__saving-indicator inline-flex-row justify-center\" aria-live=\"polite\" aria-label=\"Saving changes\">\n ${createSpinner()}\n </div>\n `, elements.savingOverlay)\n } else {\n render(html``, elements.savingOverlay)\n }\n}\n\nexport function setSharedDialogSavingState (dom: Document, isSaving: boolean, submitLabel = 'Saving Changes'): void {\n const dialog = ensureModalDialog(dom)\n updateSavingUI(dialog, submitLabel, isSaving)\n}\n\ntype OpenInputDialogCustom = {\n title: string,\n dom: Document,\n form: HTMLFormElement,\n submitLabel?: string,\n cancelLabel?: string,\n headerAction?: DialogHeaderAction,\n hideFooterButtons?: boolean,\n onOpen?: () => void,\n shouldCloseWithoutSave?: () => Promise<boolean> | boolean,\n validate?: () => Promise<string | null> | string | null,\n onSave?: () => Promise<void> | void,\n formatSaveError?: (error: unknown) => string\n}\n\ntype InputDialogValues = Record<string, string>\n/* Function below generated by AI Model: GPT-5.3-Codex */\n/* Prompt: write me a reusable function to open a dialog with a form and return the form values on submit.\nThe function should also support validation and display error messages in the dialog.\nIt should reuse the OpenModal function for consistency. Done in 2 passes */\nexport function openInputDialog (options: OpenInputDialogCustom): Promise<InputDialogValues | null> {\n const submitLabel = options.submitLabel || 'Save Changes'\n const cancelLabel = options.cancelLabel || 'Cancel'\n const dialog = ensureModalDialog(options.dom)\n const elements = getDialogElements(dialog)\n\n const deriveDefaultFieldLabel = (value: string): string => value\n .replace(/^\\s*edit\\s+/i, '')\n .replace(/^\\s*add\\s+/i, '')\n .replace(/^\\s*create\\s+/i, '')\n .trim()\n\n const ensureFormControlsHaveAccessibleNames = () => {\n const titleLabel = deriveDefaultFieldLabel(options.title)\n if (!titleLabel) return\n\n const controls = Array.from(options.form.querySelectorAll<HTMLInputElement | HTMLTextAreaElement | HTMLSelectElement>([\n 'input:not([type=\"hidden\"])',\n 'textarea',\n 'select'\n ].join(',')))\n\n if (controls.length !== 1) return\n\n const [control] = controls\n const hasExplicitLabel = control.hasAttribute('aria-label') || control.hasAttribute('aria-labelledby')\n const hasNativeLabel = Boolean(control.closest('label'))\n if (hasExplicitLabel || hasNativeLabel || control.getAttribute('type') === 'hidden') {\n return\n }\n\n if (!control.getAttribute('aria-label')) {\n control.setAttribute('aria-label', titleLabel)\n }\n }\n\n ensureFormControlsHaveAccessibleNames()\n\n const handleSubmit = (event: SubmitEvent) => {\n event.preventDefault()\n const saveButton = getSharedDialogSaveButton(dialog)\n saveButton?.click()\n }\n\n options.form.addEventListener('submit', handleSubmit)\n\n const dialogPromise = openModal({\n title: options.title,\n message: options.form,\n headerAction: options.headerAction,\n buttons: [\n { label: cancelLabel, value: null, cancel: true },\n {\n label: submitLabel,\n value: 'save',\n primary: true,\n beforeClose: async () => {\n clearModalError(elements)\n\n if (options.shouldCloseWithoutSave && await options.shouldCloseWithoutSave()) {\n return true\n }\n\n if (options.validate) {\n const validationMessage = await options.validate()\n if (validationMessage) {\n setModalError(elements, validationMessage)\n return false\n }\n }\n\n if (!options.onSave) return true\n\n try {\n updateSavingUI(dialog, submitLabel, true)\n\n await options.onSave()\n return true\n } catch (error) {\n updateSavingUI(dialog, submitLabel, false)\n const fallback = options.formatSaveError ? options.formatSaveError(error) : undefined\n setModalError(elements, error, fallback)\n return false\n }\n }\n }\n ],\n dom: options.dom\n })\n\n const scheduleOpenCallback = options.dom.defaultView?.requestAnimationFrame\n ? (callback: () => void) => options.dom.defaultView?.requestAnimationFrame(() => callback())\n : (callback: () => void) => setTimeout(callback, 0)\n\n if (options.onOpen) {\n scheduleOpenCallback(options.onOpen)\n }\n\n elements.buttons.hidden = Boolean(options.hideFooterButtons)\n\n return dialogPromise\n .then((result) => {\n if (result !== 'save') return null\n return collectFormValues(options.form)\n })\n .finally(() => {\n elements.buttons.hidden = false\n updateSavingUI(dialog, submitLabel, false)\n options.form.removeEventListener('submit', handleSubmit)\n })\n}\n"],"mappings":"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"}
@@ -2,9 +2,9 @@
2
2
  import "../../../../_virtual/~icons/lucide/x.esm.js";
3
3
  import { createSpinner as e } from "./spinner.esm.js";
4
4
  import { formatDisplayError as t } from "../utils/errorDisplay.esm.js";
5
- import "solid-ui/components/button";
6
5
  import { html as n, render as r } from "lit-html";
7
- //#region src/components/profile-heading/editor/ui/dialog.ts
6
+ import "solid-ui/components/button";
7
+ // src/components/profile-heading/editor/ui/dialog.ts
8
8
  var i = n`<icon-lucide-x aria-hidden="true" focusable="false" style="width:12px;height:12px;color:#667085"></icon-lucide-x>`, a = null, o = /* @__PURE__ */ new WeakMap();
9
9
  function s(e) {
10
10
  return e instanceof HTMLElement ? e : e instanceof Node ? e.parentElement : null;
@@ -119,17 +119,7 @@ function O(e) {
119
119
  return !(e.hasAttribute("disabled") || e.getAttribute("aria-hidden") === "true" || e.getAttribute("hidden") !== null || e.tabIndex < 0);
120
120
  }
121
121
  function k(e) {
122
- let t = e.querySelectorAll([
123
- "input:not([type=\"hidden\"]):not([disabled])",
124
- "textarea:not([disabled])",
125
- "select:not([disabled])",
126
- "solid-ui-select:not([disabled])",
127
- "solid-ui-combobox:not([disabled])",
128
- "[contenteditable=\"true\"]",
129
- "button:not([disabled])",
130
- "solid-ui-button:not([disabled])",
131
- "[tabindex]:not([tabindex=\"-1\"])"
132
- ].join(","));
122
+ let t = e.querySelectorAll("input:not([type=\"hidden\"]):not([disabled]),textarea:not([disabled]),select:not([disabled]),solid-ui-select:not([disabled]),solid-ui-combobox:not([disabled]),[contenteditable=\"true\"],button:not([disabled]),solid-ui-button:not([disabled]),[tabindex]:not([tabindex=\"-1\"])");
133
123
  for (let e of t) if (e instanceof HTMLElement && O(e)) return e;
134
124
  return null;
135
125
  }
@@ -210,11 +200,7 @@ function F(e) {
210
200
  (() => {
211
201
  let t = a(e.title);
212
202
  if (!t) return;
213
- let n = Array.from(e.form.querySelectorAll([
214
- "input:not([type=\"hidden\"])",
215
- "textarea",
216
- "select"
217
- ].join(",")));
203
+ let n = Array.from(e.form.querySelectorAll("input:not([type=\"hidden\"]),textarea,select"));
218
204
  if (n.length !== 1) return;
219
205
  let [r] = n, i = r.hasAttribute("aria-label") || r.hasAttribute("aria-labelledby"), o = !!r.closest("label");
220
206
  i || o || r.getAttribute("type") === "hidden" || r.getAttribute("aria-label") || r.setAttribute("aria-label", t);
@@ -257,7 +243,6 @@ function F(e) {
257
243
  i.buttons.hidden = !1, P(r, t, !1), e.form.removeEventListener("submit", o);
258
244
  });
259
245
  }
260
- //#endregion
261
246
  export { y as getSharedDialogCancelButton, v as getSharedDialogSaveButton, F as openInputDialog };
262
247
 
263
248
  //# sourceMappingURL=dialog2.esm.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"dialog2.esm.js","names":["html","render","createSpinner","formatDisplayError","closeIcon","modalDialog","scrollLockState","WeakMap","getEventTargetElement","target","HTMLElement","Node","parentElement","getEventPath","event","composedPath","isDialogScrollRegionTarget","path","description","querySelector","includes","targetElement","contains","Boolean","closest","getDocumentScrollLockState","dom","state","get","count","previousHtmlOverflow","documentElement","style","overflow","previousBodyOverflow","body","removeScrollGuard","set","installDocumentScrollGuard","preventBackgroundScroll","preventDefault","addEventListener","capture","passive","removeEventListener","lockDocumentScroll","unlockDocumentScroll","getDialogMountTarget","isSolidUiButton","control","tagName","setDialogActionDisabled","disabled","toggleAttribute","setDialogActionLabel","label","setAttribute","textContent","getSharedDialogSaveButton","root","getSharedDialogCancelButton","ensureModalDialog","mountTarget","appendChild","createElement","id","innerHTML","getDialogElements","dialog","title","headerAction","error","buttons","savingOverlay","syncDialogErrorDescription","elements","defaultDescription","describedBy","hidden","trim","clearModalError","setModalError","fallbackMessage","openDialogElement","ownerDocument","showModal","open","closeDialogElement","close","removeAttribute","isMobileDialogLayout","isFocusableElement","element","hasAttribute","getAttribute","tabIndex","findPreferredInitialFocusTarget","container","focusableControls","querySelectorAll","join","match","focusInitialDialogTarget","focus","initialTarget","HTMLInputElement","HTMLTextAreaElement","select","firstButton","collectFormValues","form","data","FormData","values","forEach","value","key","String","openModal","message","Promise","resolve","finish","closeModal","requestCancel","cancelBtn","click","oncancel","resolvedHeaderAction","type","closeButton","iconSlot","onclick","actionButton","className","ariaLabel","onClick","btn","b","primary","cancel","beforeClose","shouldClose","scheduleInitialFocus","defaultView","requestAnimationFrame","callback","setTimeout","_result","headerActionButton","closeSharedDialog","alertDialog","updateSavingUI","submitLabel","isSaving","saveButton","cancelButton","classList","toggle","activeElement","blur","setSharedDialogSavingState","openInputDialog","options","cancelLabel","deriveDefaultFieldLabel","replace","ensureFormControlsHaveAccessibleNames","titleLabel","controls","Array","from","length","hasExplicitLabel","hasNativeLabel","handleSubmit","dialogPromise","shouldCloseWithoutSave","validate","validationMessage","onSave","fallback","formatSaveError","undefined","scheduleOpenCallback","onOpen","hideFooterButtons","then","result","finally","closeIcon","modalDialog","scrollLockState","getEventTargetElement","target","getEventPath","event","isDialogScrollRegionTarget","path","description","targetElement","getDocumentScrollLockState","state","dom","installDocumentScrollGuard","preventBackgroundScroll","lockDocumentScroll","unlockDocumentScroll","getDialogMountTarget","isSolidUiButton","control","setDialogActionDisabled","disabled","setDialogActionLabel","label","getSharedDialogSaveButton","root","getSharedDialogCancelButton","ensureModalDialog","mountTarget","getDialogElements","dialog","syncDialogErrorDescription","defaultDescription","describedBy","elements","clearModalError","setModalError","formatDisplayError","error","fallbackMessage","openDialogElement","closeDialogElement","isMobileDialogLayout","isFocusableElement","element","findPreferredInitialFocusTarget","focusableControls","container","match","focusInitialDialogTarget","initialTarget","firstButton","buttons","collectFormValues","data","form","values","key","value","openModal","title","message","finish","closeModal","resolve","requestCancel","cancelBtn","resolvedHeaderAction","headerAction","closeButton","iconSlot","render","actionButton","b","btn","callback","headerActionButton","updateSavingUI","saveButton","cancelButton","isSaving","activeElement","submitLabel","createSpinner","openInputDialog","options","cancelLabel","deriveDefaultFieldLabel","titleLabel","controls","hasExplicitLabel","hasNativeLabel","handleSubmit","dialogPromise","validationMessage","fallback","scheduleOpenCallback","result"],"sources":["../../../../../src/components/profile-heading/editor/ui/dialog.ts"],"sourcesContent":["import './dialog.css'\nimport 'solid-ui/components/button'\nimport '~icons/lucide/x'\nimport { html, render } from 'lit-html'\nimport { createSpinner } from './spinner'\nimport { formatDisplayError } from '../utils/errorDisplay'\n\nconst closeIcon = html`<icon-lucide-x aria-hidden=\"true\" focusable=\"false\" style=\"width:12px;height:12px;color:#667085\"></icon-lucide-x>`\n\n/* Copied from issue-pane, minor typescript adjustments */\n/* Changed modal from div to dialog element */\nlet modalDialog: HTMLDialogElement | null = null\n\nconst scrollLockState = new WeakMap<Document, {\n count: number,\n previousHtmlOverflow: string,\n previousBodyOverflow: string,\n removeScrollGuard: (() => void) | null\n}>()\n\nfunction getEventTargetElement (target: EventTarget | null): HTMLElement | null {\n if (target instanceof HTMLElement) return target\n if (target instanceof Node) return target.parentElement\n return null\n}\n\nfunction getEventPath (event: Event): EventTarget[] {\n if (typeof event.composedPath === 'function') {\n return event.composedPath()\n }\n\n return event.target ? [event.target] : []\n}\n\nfunction isDialogScrollRegionTarget (event: Event): boolean {\n const path = getEventPath(event)\n const description = modalDialog?.querySelector('#modal-desc')\n\n if (description && path.includes(description)) {\n return true\n }\n\n if (modalDialog && path.includes(modalDialog)) {\n return true\n }\n\n const targetElement = getEventTargetElement(event.target)\n if (!targetElement || !modalDialog || !modalDialog.contains(targetElement)) {\n return false\n }\n\n return Boolean(targetElement.closest('#modal-desc'))\n}\n\nfunction getDocumentScrollLockState (dom: Document) {\n let state = scrollLockState.get(dom)\n if (!state) {\n state = {\n count: 0,\n previousHtmlOverflow: dom.documentElement.style.overflow,\n previousBodyOverflow: dom.body.style.overflow,\n removeScrollGuard: null\n }\n scrollLockState.set(dom, state)\n }\n return state\n}\n\nfunction installDocumentScrollGuard (dom: Document): void {\n const state = getDocumentScrollLockState(dom)\n if (state.removeScrollGuard) return\n\n const preventBackgroundScroll = (event: Event) => {\n if (!isDialogScrollRegionTarget(event)) {\n event.preventDefault()\n }\n }\n\n dom.addEventListener('wheel', preventBackgroundScroll, { capture: true, passive: false })\n dom.addEventListener('touchmove', preventBackgroundScroll, { capture: true, passive: false })\n state.removeScrollGuard = () => {\n dom.removeEventListener('wheel', preventBackgroundScroll, true)\n dom.removeEventListener('touchmove', preventBackgroundScroll, true)\n state.removeScrollGuard = null\n }\n}\n\nfunction lockDocumentScroll (dom: Document): void {\n const state = getDocumentScrollLockState(dom)\n\n if (state.count === 0) {\n state.previousHtmlOverflow = dom.documentElement.style.overflow\n state.previousBodyOverflow = dom.body.style.overflow\n\n dom.documentElement.style.overflow = 'hidden'\n dom.body.style.overflow = 'hidden'\n installDocumentScrollGuard(dom)\n }\n\n state.count += 1\n}\n\nfunction unlockDocumentScroll (dom: Document): void {\n const state = getDocumentScrollLockState(dom)\n if (state.count === 0) return\n\n state.count -= 1\n if (state.count > 0) return\n\n dom.documentElement.style.overflow = state.previousHtmlOverflow\n dom.body.style.overflow = state.previousBodyOverflow\n state.removeScrollGuard?.()\n state.removeScrollGuard = null\n}\n\nfunction getDialogMountTarget (dom: Document): HTMLElement {\n return dom.body\n}\n\ntype DialogButtonValue = boolean | 'save' | null\ntype DialogButton = {\n label: string,\n value: DialogButtonValue,\n primary?: boolean,\n cancel?: boolean,\n beforeClose?: () => Promise<boolean> | boolean\n}\n\ntype DialogHeaderAction =\n | { type: 'close' }\n | { type: 'none' }\n | {\n type: 'button',\n label: string,\n ariaLabel?: string,\n className?: string,\n onClick?: () => Promise<void> | void\n }\n\ntype DialogElements = {\n dialog: HTMLDialogElement,\n title: HTMLHeadingElement,\n headerAction: HTMLDivElement,\n description: HTMLDivElement,\n error: HTMLElement,\n buttons: HTMLDivElement,\n savingOverlay: HTMLDivElement\n}\n\ntype DialogActionControl = HTMLElement & {\n disabled?: boolean,\n label?: string,\n click: () => void,\n shadowRoot?: ShadowRoot | null\n}\n\nfunction isSolidUiButton (control: Element | null): control is DialogActionControl {\n return control?.tagName === 'SOLID-UI-BUTTON'\n}\n\nfunction setDialogActionDisabled (control: DialogActionControl | null, disabled: boolean): void {\n if (!control) return\n control.disabled = disabled\n control.toggleAttribute('disabled', disabled)\n}\n\nfunction setDialogActionLabel (control: DialogActionControl | null, label: string): void {\n if (!control) return\n\n if (isSolidUiButton(control)) {\n control.label = label\n control.setAttribute('label', label)\n control.textContent = label\n return\n }\n\n ;(control as HTMLElement).textContent = label\n}\n\nexport function getSharedDialogSaveButton (root: ParentNode): DialogActionControl | null {\n return root.querySelector('#modal-buttons [data-dialog-primary=\"true\"]') as DialogActionControl | null\n}\n\nexport function getSharedDialogCancelButton (root: ParentNode): DialogActionControl | null {\n return root.querySelector('#modal-buttons [data-cancel=\"true\"]') as DialogActionControl | null\n}\n\nfunction ensureModalDialog (dom: Document): HTMLDialogElement {\n const mountTarget = getDialogMountTarget(dom)\n\n // if we previously created a dialog but it was removed from the document\n // (tests clear body), rebuild it. Checking presence ensures our reference\n // doesn't point at a detached element.\n if (modalDialog && dom.body.contains(modalDialog)) {\n if (modalDialog.parentElement !== mountTarget) {\n mountTarget.appendChild(modalDialog)\n }\n return modalDialog\n }\n\n modalDialog = null\n modalDialog = dom.createElement('dialog')\n modalDialog.id = 'profile-modal'\n modalDialog.setAttribute('aria-modal', 'true')\n modalDialog.setAttribute('aria-labelledby', 'modal-title')\n modalDialog.setAttribute('aria-describedby', 'modal-desc')\n\n modalDialog.innerHTML = `\n <div class=\"modal\">\n <div class=\"modal-header flex-row align-center justify-between\">\n <h2 id=\"modal-title\"></h2>\n <div id=\"modal-header-action\" class=\"flex-row align-center\"></div>\n </div>\n <div id=\"modal-desc\"></div>\n <section id=\"modal-error\" class=\"modal__error-section\" aria-live=\"assertive\" aria-atomic=\"true\" aria-hidden=\"true\" role=\"alert\" tabindex=\"-1\" hidden></section>\n <div id=\"modal-buttons\" class=\"flex-row align-center justify-end\"></div>\n <div id=\"modal-saving-overlay\" hidden></div>\n </div>\n `\n\n mountTarget.appendChild(modalDialog)\n return modalDialog\n}\n\nfunction getDialogElements (dialog: HTMLDialogElement): DialogElements {\n return {\n dialog,\n title: dialog.querySelector('#modal-title') as HTMLHeadingElement,\n headerAction: dialog.querySelector('#modal-header-action') as HTMLDivElement,\n description: dialog.querySelector('#modal-desc') as HTMLDivElement,\n error: dialog.querySelector('#modal-error') as HTMLElement,\n buttons: dialog.querySelector('#modal-buttons') as HTMLDivElement,\n savingOverlay: dialog.querySelector('#modal-saving-overlay') as HTMLDivElement\n }\n}\n\nfunction syncDialogErrorDescription (elements: DialogElements): void {\n const defaultDescription = 'modal-desc'\n const describedBy = elements.error.hidden || !elements.error.textContent?.trim()\n ? defaultDescription\n : `${defaultDescription} modal-error`\n\n elements.dialog.setAttribute('aria-describedby', describedBy)\n}\n\nfunction clearModalError (elements: DialogElements): void {\n elements.error.textContent = ''\n elements.error.setAttribute('aria-hidden', 'true')\n elements.error.hidden = true\n syncDialogErrorDescription(elements)\n}\n\nfunction setModalError (elements: DialogElements, error: unknown, fallbackMessage?: string): void {\n elements.error.textContent = formatDisplayError(error, fallbackMessage)\n elements.error.setAttribute('aria-hidden', 'false')\n elements.error.hidden = false\n syncDialogErrorDescription(elements)\n}\n\nfunction openDialogElement (dialog: HTMLDialogElement): void {\n lockDocumentScroll(dialog.ownerDocument)\n\n if (typeof dialog.showModal === 'function') {\n try {\n if (!dialog.open) dialog.showModal()\n return\n } catch {\n // Fall back for jsdom or partial dialog implementations.\n }\n }\n\n dialog.setAttribute('open', '')\n}\n\nfunction closeDialogElement (dialog: HTMLDialogElement): void {\n try {\n if (typeof dialog.close === 'function' && dialog.open) {\n dialog.close()\n return\n }\n\n dialog.removeAttribute('open')\n } finally {\n unlockDocumentScroll(dialog.ownerDocument)\n }\n}\n\nfunction isMobileDialogLayout (dom: Document): boolean {\n return Boolean(dom.querySelector('[data-layout=\\'mobile\\']'))\n}\n\nfunction isFocusableElement (element: HTMLElement): boolean {\n if (element.hasAttribute('disabled')) return false\n if (element.getAttribute('aria-hidden') === 'true') return false\n if (element.getAttribute('hidden') !== null) return false\n if (element.tabIndex < 0) return false\n return true\n}\n\nfunction findPreferredInitialFocusTarget (container: ParentNode): HTMLElement | null {\n const focusableControls = container.querySelectorAll([\n 'input:not([type=\"hidden\"]):not([disabled])',\n 'textarea:not([disabled])',\n 'select:not([disabled])',\n 'solid-ui-select:not([disabled])',\n 'solid-ui-combobox:not([disabled])',\n '[contenteditable=\"true\"]',\n 'button:not([disabled])',\n 'solid-ui-button:not([disabled])',\n '[tabindex]:not([tabindex=\"-1\"])'\n ].join(','))\n\n for (const match of focusableControls) {\n if (match instanceof HTMLElement && isFocusableElement(match)) return match\n }\n\n return null\n}\n\nfunction focusInitialDialogTarget (dialog: HTMLDialogElement, description: HTMLDivElement, buttons: HTMLDivElement): void {\n if (isMobileDialogLayout(dialog.ownerDocument)) {\n dialog.tabIndex = -1\n dialog.focus()\n return\n }\n\n const initialTarget = findPreferredInitialFocusTarget(description)\n if (initialTarget) {\n initialTarget.focus()\n if (initialTarget instanceof HTMLInputElement || initialTarget instanceof HTMLTextAreaElement) {\n initialTarget.select()\n }\n return\n }\n\n const firstButton = findPreferredInitialFocusTarget(buttons)\n if (firstButton) {\n firstButton.focus()\n }\n}\n\nfunction collectFormValues (form: HTMLFormElement): InputDialogValues {\n const data = new FormData(form)\n const values: InputDialogValues = {}\n data.forEach((value, key) => {\n values[key] = String(value)\n })\n return values\n}\n\nfunction openModal ({\n title,\n message,\n buttons,\n headerAction,\n dom\n}: {\n title?: string,\n message?: string | Node,\n buttons: DialogButton[],\n headerAction?: DialogHeaderAction,\n dom: Document\n}) {\n const dialog = ensureModalDialog(dom)\n const elements = getDialogElements(dialog)\n\n openDialogElement(dialog)\n\n elements.title.textContent = title || ''\n elements.description.innerHTML = ''\n if (typeof message === 'string') {\n elements.description.textContent = message\n } else if (message) {\n elements.description.appendChild(message)\n }\n\n elements.buttons.innerHTML = ''\n clearModalError(elements)\n\n return new Promise<DialogButtonValue>((resolve) => {\n const finish = (value: DialogButtonValue) => {\n closeModal(value)\n resolve(value)\n }\n\n const requestCancel = () => {\n const cancelBtn = getSharedDialogCancelButton(dialog)\n if (cancelBtn) {\n cancelBtn.click()\n return\n }\n\n finish(false)\n }\n\n dialog.oncancel = (event: Event) => {\n event.preventDefault()\n requestCancel()\n }\n\n elements.headerAction.innerHTML = ''\n const resolvedHeaderAction = headerAction || { type: 'close' as const }\n if (resolvedHeaderAction.type === 'close') {\n const closeButton = dom.createElement('solid-ui-button') as DialogActionControl\n closeButton.setAttribute('variant', 'ghost')\n closeButton.setAttribute('aria-label', 'Close dialog')\n const iconSlot = dom.createElement('span')\n iconSlot.setAttribute('slot', 'icon')\n render(closeIcon, iconSlot)\n closeButton.appendChild(iconSlot)\n closeButton.onclick = () => requestCancel()\n elements.headerAction.appendChild(closeButton)\n } else if (resolvedHeaderAction.type === 'button') {\n const actionButton = dom.createElement('solid-ui-button') as DialogActionControl\n actionButton.setAttribute('variant', 'tertiary')\n actionButton.className = resolvedHeaderAction.className || ''\n actionButton.textContent = resolvedHeaderAction.label\n actionButton.setAttribute('label', resolvedHeaderAction.label)\n actionButton.setAttribute('aria-label', resolvedHeaderAction.ariaLabel || resolvedHeaderAction.label)\n actionButton.onclick = async () => {\n if (resolvedHeaderAction.onClick) {\n await resolvedHeaderAction.onClick()\n }\n }\n elements.headerAction.appendChild(actionButton)\n }\n\n buttons.forEach((btn) => {\n const b = dom.createElement('solid-ui-button') as DialogActionControl\n b.setAttribute('label', btn.label)\n b.setAttribute('variant', btn.primary ? 'primary' : 'secondary')\n b.textContent = btn.label\n if (btn.primary) {\n b.setAttribute('data-dialog-primary', 'true')\n }\n if (btn.cancel) {\n b.setAttribute('data-cancel', 'true')\n }\n b.addEventListener('click', async () => {\n if (btn.beforeClose) {\n const shouldClose = await btn.beforeClose()\n if (!shouldClose) return\n }\n finish(btn.value)\n })\n elements.buttons.appendChild(b)\n })\n\n const scheduleInitialFocus = dom.defaultView?.requestAnimationFrame\n ? (callback: () => void) => dom.defaultView?.requestAnimationFrame(() => callback())\n : (callback: () => void) => setTimeout(callback, 0)\n\n scheduleInitialFocus(() => {\n focusInitialDialogTarget(dialog, elements.description, elements.buttons)\n })\n })\n}\n\nfunction closeModal (_result: DialogButtonValue): void {\n if (modalDialog) {\n const elements = getDialogElements(modalDialog)\n clearModalError(elements)\n closeDialogElement(modalDialog)\n modalDialog.oncancel = null\n const headerActionButton = modalDialog.querySelector('#modal-header-action button') as HTMLButtonElement | null\n if (headerActionButton) headerActionButton.onclick = null\n }\n}\n\nexport function closeSharedDialog (): void {\n closeModal(null)\n}\n\nexport function alertDialog (message: string, title = 'Information', dom: Document) {\n return openModal({\n title,\n message,\n buttons: [{ label: 'OK', value: true, primary: true }],\n dom\n })\n}\n\nfunction updateSavingUI (dialog: HTMLDialogElement, submitLabel: string, isSaving: boolean) {\n const elements = getDialogElements(dialog)\n const saveButton = getSharedDialogSaveButton(dialog)\n const cancelButton = getSharedDialogCancelButton(dialog)\n\n dialog.classList.toggle('modal--saving', isSaving)\n dialog.setAttribute('aria-busy', String(isSaving))\n elements.description.toggleAttribute('inert', isSaving)\n\n if (isSaving) {\n const activeElement = dialog.ownerDocument.activeElement as HTMLElement | null\n if (activeElement && dialog.contains(activeElement)) {\n activeElement.blur()\n }\n }\n\n if (saveButton) {\n setDialogActionDisabled(saveButton, isSaving)\n saveButton.setAttribute('aria-busy', String(isSaving))\n setDialogActionLabel(saveButton, submitLabel)\n }\n\n if (cancelButton) {\n setDialogActionDisabled(cancelButton, isSaving)\n }\n\n elements.savingOverlay.hidden = !isSaving\n if (isSaving) {\n render(html`\n <div class=\"modal__saving-indicator inline-flex-row justify-center\" aria-live=\"polite\" aria-label=\"Saving changes\">\n ${createSpinner()}\n </div>\n `, elements.savingOverlay)\n } else {\n render(html``, elements.savingOverlay)\n }\n}\n\nexport function setSharedDialogSavingState (dom: Document, isSaving: boolean, submitLabel = 'Saving Changes'): void {\n const dialog = ensureModalDialog(dom)\n updateSavingUI(dialog, submitLabel, isSaving)\n}\n\ntype OpenInputDialogCustom = {\n title: string,\n dom: Document,\n form: HTMLFormElement,\n submitLabel?: string,\n cancelLabel?: string,\n headerAction?: DialogHeaderAction,\n hideFooterButtons?: boolean,\n onOpen?: () => void,\n shouldCloseWithoutSave?: () => Promise<boolean> | boolean,\n validate?: () => Promise<string | null> | string | null,\n onSave?: () => Promise<void> | void,\n formatSaveError?: (error: unknown) => string\n}\n\ntype InputDialogValues = Record<string, string>\n/* Function below generated by AI Model: GPT-5.3-Codex */\n/* Prompt: write me a reusable function to open a dialog with a form and return the form values on submit.\nThe function should also support validation and display error messages in the dialog.\nIt should reuse the OpenModal function for consistency. Done in 2 passes */\nexport function openInputDialog (options: OpenInputDialogCustom): Promise<InputDialogValues | null> {\n const submitLabel = options.submitLabel || 'Save Changes'\n const cancelLabel = options.cancelLabel || 'Cancel'\n const dialog = ensureModalDialog(options.dom)\n const elements = getDialogElements(dialog)\n\n const deriveDefaultFieldLabel = (value: string): string => value\n .replace(/^\\s*edit\\s+/i, '')\n .replace(/^\\s*add\\s+/i, '')\n .replace(/^\\s*create\\s+/i, '')\n .trim()\n\n const ensureFormControlsHaveAccessibleNames = () => {\n const titleLabel = deriveDefaultFieldLabel(options.title)\n if (!titleLabel) return\n\n const controls = Array.from(options.form.querySelectorAll<HTMLInputElement | HTMLTextAreaElement | HTMLSelectElement>([\n 'input:not([type=\"hidden\"])',\n 'textarea',\n 'select'\n ].join(',')))\n\n if (controls.length !== 1) return\n\n const [control] = controls\n const hasExplicitLabel = control.hasAttribute('aria-label') || control.hasAttribute('aria-labelledby')\n const hasNativeLabel = Boolean(control.closest('label'))\n if (hasExplicitLabel || hasNativeLabel || control.getAttribute('type') === 'hidden') {\n return\n }\n\n if (!control.getAttribute('aria-label')) {\n control.setAttribute('aria-label', titleLabel)\n }\n }\n\n ensureFormControlsHaveAccessibleNames()\n\n const handleSubmit = (event: SubmitEvent) => {\n event.preventDefault()\n const saveButton = getSharedDialogSaveButton(dialog)\n saveButton?.click()\n }\n\n options.form.addEventListener('submit', handleSubmit)\n\n const dialogPromise = openModal({\n title: options.title,\n message: options.form,\n headerAction: options.headerAction,\n buttons: [\n { label: cancelLabel, value: null, cancel: true },\n {\n label: submitLabel,\n value: 'save',\n primary: true,\n beforeClose: async () => {\n clearModalError(elements)\n\n if (options.shouldCloseWithoutSave && await options.shouldCloseWithoutSave()) {\n return true\n }\n\n if (options.validate) {\n const validationMessage = await options.validate()\n if (validationMessage) {\n setModalError(elements, validationMessage)\n return false\n }\n }\n\n if (!options.onSave) return true\n\n try {\n updateSavingUI(dialog, submitLabel, true)\n\n await options.onSave()\n return true\n } catch (error) {\n updateSavingUI(dialog, submitLabel, false)\n const fallback = options.formatSaveError ? options.formatSaveError(error) : undefined\n setModalError(elements, error, fallback)\n return false\n }\n }\n }\n ],\n dom: options.dom\n })\n\n const scheduleOpenCallback = options.dom.defaultView?.requestAnimationFrame\n ? (callback: () => void) => options.dom.defaultView?.requestAnimationFrame(() => callback())\n : (callback: () => void) => setTimeout(callback, 0)\n\n if (options.onOpen) {\n scheduleOpenCallback(options.onOpen)\n }\n\n elements.buttons.hidden = Boolean(options.hideFooterButtons)\n\n return dialogPromise\n .then((result) => {\n if (result !== 'save') return null\n return collectFormValues(options.form)\n })\n .finally(() => {\n elements.buttons.hidden = false\n updateSavingUI(dialog, submitLabel, false)\n options.form.removeEventListener('submit', handleSubmit)\n })\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"dialog2.esm.js","names":["html","render","createSpinner","formatDisplayError","closeIcon","modalDialog","scrollLockState","WeakMap","getEventTargetElement","target","HTMLElement","Node","parentElement","getEventPath","event","composedPath","isDialogScrollRegionTarget","path","description","querySelector","includes","targetElement","contains","Boolean","closest","getDocumentScrollLockState","dom","state","get","count","previousHtmlOverflow","documentElement","style","overflow","previousBodyOverflow","body","removeScrollGuard","set","installDocumentScrollGuard","preventBackgroundScroll","preventDefault","addEventListener","capture","passive","removeEventListener","lockDocumentScroll","unlockDocumentScroll","getDialogMountTarget","isSolidUiButton","control","tagName","setDialogActionDisabled","disabled","toggleAttribute","setDialogActionLabel","label","setAttribute","textContent","getSharedDialogSaveButton","root","getSharedDialogCancelButton","ensureModalDialog","mountTarget","appendChild","createElement","id","innerHTML","getDialogElements","dialog","title","headerAction","error","buttons","savingOverlay","syncDialogErrorDescription","elements","defaultDescription","describedBy","hidden","trim","clearModalError","setModalError","fallbackMessage","openDialogElement","ownerDocument","showModal","open","closeDialogElement","close","removeAttribute","isMobileDialogLayout","isFocusableElement","element","hasAttribute","getAttribute","tabIndex","findPreferredInitialFocusTarget","container","focusableControls","querySelectorAll","join","match","focusInitialDialogTarget","focus","initialTarget","HTMLInputElement","HTMLTextAreaElement","select","firstButton","collectFormValues","form","data","FormData","values","forEach","value","key","String","openModal","message","Promise","resolve","finish","closeModal","requestCancel","cancelBtn","click","oncancel","resolvedHeaderAction","type","closeButton","iconSlot","onclick","actionButton","className","ariaLabel","onClick","btn","b","primary","cancel","beforeClose","shouldClose","scheduleInitialFocus","defaultView","requestAnimationFrame","callback","setTimeout","_result","headerActionButton","closeSharedDialog","alertDialog","updateSavingUI","submitLabel","isSaving","saveButton","cancelButton","classList","toggle","activeElement","blur","setSharedDialogSavingState","openInputDialog","options","cancelLabel","deriveDefaultFieldLabel","replace","ensureFormControlsHaveAccessibleNames","titleLabel","controls","Array","from","length","hasExplicitLabel","hasNativeLabel","handleSubmit","dialogPromise","shouldCloseWithoutSave","validate","validationMessage","onSave","fallback","formatSaveError","undefined","scheduleOpenCallback","onOpen","hideFooterButtons","then","result","finally","closeIcon","modalDialog","scrollLockState","getEventTargetElement","target","getEventPath","event","isDialogScrollRegionTarget","path","description","targetElement","getDocumentScrollLockState","state","dom","installDocumentScrollGuard","preventBackgroundScroll","lockDocumentScroll","unlockDocumentScroll","getDialogMountTarget","isSolidUiButton","control","setDialogActionDisabled","disabled","setDialogActionLabel","label","getSharedDialogSaveButton","root","getSharedDialogCancelButton","ensureModalDialog","mountTarget","getDialogElements","dialog","syncDialogErrorDescription","defaultDescription","describedBy","elements","clearModalError","setModalError","formatDisplayError","error","fallbackMessage","openDialogElement","closeDialogElement","isMobileDialogLayout","isFocusableElement","element","findPreferredInitialFocusTarget","focusableControls","container","match","focusInitialDialogTarget","initialTarget","firstButton","buttons","collectFormValues","data","form","values","key","value","openModal","title","message","finish","closeModal","resolve","requestCancel","cancelBtn","resolvedHeaderAction","headerAction","closeButton","iconSlot","render","actionButton","b","btn","callback","headerActionButton","updateSavingUI","saveButton","cancelButton","isSaving","activeElement","submitLabel","createSpinner","openInputDialog","options","cancelLabel","deriveDefaultFieldLabel","titleLabel","controls","hasExplicitLabel","hasNativeLabel","handleSubmit","dialogPromise","validationMessage","fallback","scheduleOpenCallback","result"],"sources":["../../../../../src/components/profile-heading/editor/ui/dialog.ts"],"sourcesContent":["import './dialog.css'\nimport 'solid-ui/components/button'\nimport '~icons/lucide/x'\nimport { html, render } from 'lit-html'\nimport { createSpinner } from './spinner'\nimport { formatDisplayError } from '../utils/errorDisplay'\n\nconst closeIcon = html`<icon-lucide-x aria-hidden=\"true\" focusable=\"false\" style=\"width:12px;height:12px;color:#667085\"></icon-lucide-x>`\n\n/* Copied from issue-pane, minor typescript adjustments */\n/* Changed modal from div to dialog element */\nlet modalDialog: HTMLDialogElement | null = null\n\nconst scrollLockState = new WeakMap<Document, {\n count: number,\n previousHtmlOverflow: string,\n previousBodyOverflow: string,\n removeScrollGuard: (() => void) | null\n}>()\n\nfunction getEventTargetElement (target: EventTarget | null): HTMLElement | null {\n if (target instanceof HTMLElement) return target\n if (target instanceof Node) return target.parentElement\n return null\n}\n\nfunction getEventPath (event: Event): EventTarget[] {\n if (typeof event.composedPath === 'function') {\n return event.composedPath()\n }\n\n return event.target ? [event.target] : []\n}\n\nfunction isDialogScrollRegionTarget (event: Event): boolean {\n const path = getEventPath(event)\n const description = modalDialog?.querySelector('#modal-desc')\n\n if (description && path.includes(description)) {\n return true\n }\n\n if (modalDialog && path.includes(modalDialog)) {\n return true\n }\n\n const targetElement = getEventTargetElement(event.target)\n if (!targetElement || !modalDialog || !modalDialog.contains(targetElement)) {\n return false\n }\n\n return Boolean(targetElement.closest('#modal-desc'))\n}\n\nfunction getDocumentScrollLockState (dom: Document) {\n let state = scrollLockState.get(dom)\n if (!state) {\n state = {\n count: 0,\n previousHtmlOverflow: dom.documentElement.style.overflow,\n previousBodyOverflow: dom.body.style.overflow,\n removeScrollGuard: null\n }\n scrollLockState.set(dom, state)\n }\n return state\n}\n\nfunction installDocumentScrollGuard (dom: Document): void {\n const state = getDocumentScrollLockState(dom)\n if (state.removeScrollGuard) return\n\n const preventBackgroundScroll = (event: Event) => {\n if (!isDialogScrollRegionTarget(event)) {\n event.preventDefault()\n }\n }\n\n dom.addEventListener('wheel', preventBackgroundScroll, { capture: true, passive: false })\n dom.addEventListener('touchmove', preventBackgroundScroll, { capture: true, passive: false })\n state.removeScrollGuard = () => {\n dom.removeEventListener('wheel', preventBackgroundScroll, true)\n dom.removeEventListener('touchmove', preventBackgroundScroll, true)\n state.removeScrollGuard = null\n }\n}\n\nfunction lockDocumentScroll (dom: Document): void {\n const state = getDocumentScrollLockState(dom)\n\n if (state.count === 0) {\n state.previousHtmlOverflow = dom.documentElement.style.overflow\n state.previousBodyOverflow = dom.body.style.overflow\n\n dom.documentElement.style.overflow = 'hidden'\n dom.body.style.overflow = 'hidden'\n installDocumentScrollGuard(dom)\n }\n\n state.count += 1\n}\n\nfunction unlockDocumentScroll (dom: Document): void {\n const state = getDocumentScrollLockState(dom)\n if (state.count === 0) return\n\n state.count -= 1\n if (state.count > 0) return\n\n dom.documentElement.style.overflow = state.previousHtmlOverflow\n dom.body.style.overflow = state.previousBodyOverflow\n state.removeScrollGuard?.()\n state.removeScrollGuard = null\n}\n\nfunction getDialogMountTarget (dom: Document): HTMLElement {\n return dom.body\n}\n\ntype DialogButtonValue = boolean | 'save' | null\ntype DialogButton = {\n label: string,\n value: DialogButtonValue,\n primary?: boolean,\n cancel?: boolean,\n beforeClose?: () => Promise<boolean> | boolean\n}\n\ntype DialogHeaderAction =\n | { type: 'close' }\n | { type: 'none' }\n | {\n type: 'button',\n label: string,\n ariaLabel?: string,\n className?: string,\n onClick?: () => Promise<void> | void\n }\n\ntype DialogElements = {\n dialog: HTMLDialogElement,\n title: HTMLHeadingElement,\n headerAction: HTMLDivElement,\n description: HTMLDivElement,\n error: HTMLElement,\n buttons: HTMLDivElement,\n savingOverlay: HTMLDivElement\n}\n\ntype DialogActionControl = HTMLElement & {\n disabled?: boolean,\n label?: string,\n click: () => void,\n shadowRoot?: ShadowRoot | null\n}\n\nfunction isSolidUiButton (control: Element | null): control is DialogActionControl {\n return control?.tagName === 'SOLID-UI-BUTTON'\n}\n\nfunction setDialogActionDisabled (control: DialogActionControl | null, disabled: boolean): void {\n if (!control) return\n control.disabled = disabled\n control.toggleAttribute('disabled', disabled)\n}\n\nfunction setDialogActionLabel (control: DialogActionControl | null, label: string): void {\n if (!control) return\n\n if (isSolidUiButton(control)) {\n control.label = label\n control.setAttribute('label', label)\n control.textContent = label\n return\n }\n\n ;(control as HTMLElement).textContent = label\n}\n\nexport function getSharedDialogSaveButton (root: ParentNode): DialogActionControl | null {\n return root.querySelector('#modal-buttons [data-dialog-primary=\"true\"]') as DialogActionControl | null\n}\n\nexport function getSharedDialogCancelButton (root: ParentNode): DialogActionControl | null {\n return root.querySelector('#modal-buttons [data-cancel=\"true\"]') as DialogActionControl | null\n}\n\nfunction ensureModalDialog (dom: Document): HTMLDialogElement {\n const mountTarget = getDialogMountTarget(dom)\n\n // if we previously created a dialog but it was removed from the document\n // (tests clear body), rebuild it. Checking presence ensures our reference\n // doesn't point at a detached element.\n if (modalDialog && dom.body.contains(modalDialog)) {\n if (modalDialog.parentElement !== mountTarget) {\n mountTarget.appendChild(modalDialog)\n }\n return modalDialog\n }\n\n modalDialog = null\n modalDialog = dom.createElement('dialog')\n modalDialog.id = 'profile-modal'\n modalDialog.setAttribute('aria-modal', 'true')\n modalDialog.setAttribute('aria-labelledby', 'modal-title')\n modalDialog.setAttribute('aria-describedby', 'modal-desc')\n\n modalDialog.innerHTML = `\n <div class=\"modal\">\n <div class=\"modal-header flex-row align-center justify-between\">\n <h2 id=\"modal-title\"></h2>\n <div id=\"modal-header-action\" class=\"flex-row align-center\"></div>\n </div>\n <div id=\"modal-desc\"></div>\n <section id=\"modal-error\" class=\"modal__error-section\" aria-live=\"assertive\" aria-atomic=\"true\" aria-hidden=\"true\" role=\"alert\" tabindex=\"-1\" hidden></section>\n <div id=\"modal-buttons\" class=\"flex-row align-center justify-end\"></div>\n <div id=\"modal-saving-overlay\" hidden></div>\n </div>\n `\n\n mountTarget.appendChild(modalDialog)\n return modalDialog\n}\n\nfunction getDialogElements (dialog: HTMLDialogElement): DialogElements {\n return {\n dialog,\n title: dialog.querySelector('#modal-title') as HTMLHeadingElement,\n headerAction: dialog.querySelector('#modal-header-action') as HTMLDivElement,\n description: dialog.querySelector('#modal-desc') as HTMLDivElement,\n error: dialog.querySelector('#modal-error') as HTMLElement,\n buttons: dialog.querySelector('#modal-buttons') as HTMLDivElement,\n savingOverlay: dialog.querySelector('#modal-saving-overlay') as HTMLDivElement\n }\n}\n\nfunction syncDialogErrorDescription (elements: DialogElements): void {\n const defaultDescription = 'modal-desc'\n const describedBy = elements.error.hidden || !elements.error.textContent?.trim()\n ? defaultDescription\n : `${defaultDescription} modal-error`\n\n elements.dialog.setAttribute('aria-describedby', describedBy)\n}\n\nfunction clearModalError (elements: DialogElements): void {\n elements.error.textContent = ''\n elements.error.setAttribute('aria-hidden', 'true')\n elements.error.hidden = true\n syncDialogErrorDescription(elements)\n}\n\nfunction setModalError (elements: DialogElements, error: unknown, fallbackMessage?: string): void {\n elements.error.textContent = formatDisplayError(error, fallbackMessage)\n elements.error.setAttribute('aria-hidden', 'false')\n elements.error.hidden = false\n syncDialogErrorDescription(elements)\n}\n\nfunction openDialogElement (dialog: HTMLDialogElement): void {\n lockDocumentScroll(dialog.ownerDocument)\n\n if (typeof dialog.showModal === 'function') {\n try {\n if (!dialog.open) dialog.showModal()\n return\n } catch {\n // Fall back for jsdom or partial dialog implementations.\n }\n }\n\n dialog.setAttribute('open', '')\n}\n\nfunction closeDialogElement (dialog: HTMLDialogElement): void {\n try {\n if (typeof dialog.close === 'function' && dialog.open) {\n dialog.close()\n return\n }\n\n dialog.removeAttribute('open')\n } finally {\n unlockDocumentScroll(dialog.ownerDocument)\n }\n}\n\nfunction isMobileDialogLayout (dom: Document): boolean {\n return Boolean(dom.querySelector('[data-layout=\\'mobile\\']'))\n}\n\nfunction isFocusableElement (element: HTMLElement): boolean {\n if (element.hasAttribute('disabled')) return false\n if (element.getAttribute('aria-hidden') === 'true') return false\n if (element.getAttribute('hidden') !== null) return false\n if (element.tabIndex < 0) return false\n return true\n}\n\nfunction findPreferredInitialFocusTarget (container: ParentNode): HTMLElement | null {\n const focusableControls = container.querySelectorAll([\n 'input:not([type=\"hidden\"]):not([disabled])',\n 'textarea:not([disabled])',\n 'select:not([disabled])',\n 'solid-ui-select:not([disabled])',\n 'solid-ui-combobox:not([disabled])',\n '[contenteditable=\"true\"]',\n 'button:not([disabled])',\n 'solid-ui-button:not([disabled])',\n '[tabindex]:not([tabindex=\"-1\"])'\n ].join(','))\n\n for (const match of focusableControls) {\n if (match instanceof HTMLElement && isFocusableElement(match)) return match\n }\n\n return null\n}\n\nfunction focusInitialDialogTarget (dialog: HTMLDialogElement, description: HTMLDivElement, buttons: HTMLDivElement): void {\n if (isMobileDialogLayout(dialog.ownerDocument)) {\n dialog.tabIndex = -1\n dialog.focus()\n return\n }\n\n const initialTarget = findPreferredInitialFocusTarget(description)\n if (initialTarget) {\n initialTarget.focus()\n if (initialTarget instanceof HTMLInputElement || initialTarget instanceof HTMLTextAreaElement) {\n initialTarget.select()\n }\n return\n }\n\n const firstButton = findPreferredInitialFocusTarget(buttons)\n if (firstButton) {\n firstButton.focus()\n }\n}\n\nfunction collectFormValues (form: HTMLFormElement): InputDialogValues {\n const data = new FormData(form)\n const values: InputDialogValues = {}\n data.forEach((value, key) => {\n values[key] = String(value)\n })\n return values\n}\n\nfunction openModal ({\n title,\n message,\n buttons,\n headerAction,\n dom\n}: {\n title?: string,\n message?: string | Node,\n buttons: DialogButton[],\n headerAction?: DialogHeaderAction,\n dom: Document\n}) {\n const dialog = ensureModalDialog(dom)\n const elements = getDialogElements(dialog)\n\n openDialogElement(dialog)\n\n elements.title.textContent = title || ''\n elements.description.innerHTML = ''\n if (typeof message === 'string') {\n elements.description.textContent = message\n } else if (message) {\n elements.description.appendChild(message)\n }\n\n elements.buttons.innerHTML = ''\n clearModalError(elements)\n\n return new Promise<DialogButtonValue>((resolve) => {\n const finish = (value: DialogButtonValue) => {\n closeModal(value)\n resolve(value)\n }\n\n const requestCancel = () => {\n const cancelBtn = getSharedDialogCancelButton(dialog)\n if (cancelBtn) {\n cancelBtn.click()\n return\n }\n\n finish(false)\n }\n\n dialog.oncancel = (event: Event) => {\n event.preventDefault()\n requestCancel()\n }\n\n elements.headerAction.innerHTML = ''\n const resolvedHeaderAction = headerAction || { type: 'close' as const }\n if (resolvedHeaderAction.type === 'close') {\n const closeButton = dom.createElement('solid-ui-button') as DialogActionControl\n closeButton.setAttribute('variant', 'ghost')\n closeButton.setAttribute('aria-label', 'Close dialog')\n const iconSlot = dom.createElement('span')\n iconSlot.setAttribute('slot', 'icon')\n render(closeIcon, iconSlot)\n closeButton.appendChild(iconSlot)\n closeButton.onclick = () => requestCancel()\n elements.headerAction.appendChild(closeButton)\n } else if (resolvedHeaderAction.type === 'button') {\n const actionButton = dom.createElement('solid-ui-button') as DialogActionControl\n actionButton.setAttribute('variant', 'tertiary')\n actionButton.className = resolvedHeaderAction.className || ''\n actionButton.textContent = resolvedHeaderAction.label\n actionButton.setAttribute('label', resolvedHeaderAction.label)\n actionButton.setAttribute('aria-label', resolvedHeaderAction.ariaLabel || resolvedHeaderAction.label)\n actionButton.onclick = async () => {\n if (resolvedHeaderAction.onClick) {\n await resolvedHeaderAction.onClick()\n }\n }\n elements.headerAction.appendChild(actionButton)\n }\n\n buttons.forEach((btn) => {\n const b = dom.createElement('solid-ui-button') as DialogActionControl\n b.setAttribute('label', btn.label)\n b.setAttribute('variant', btn.primary ? 'primary' : 'secondary')\n b.textContent = btn.label\n if (btn.primary) {\n b.setAttribute('data-dialog-primary', 'true')\n }\n if (btn.cancel) {\n b.setAttribute('data-cancel', 'true')\n }\n b.addEventListener('click', async () => {\n if (btn.beforeClose) {\n const shouldClose = await btn.beforeClose()\n if (!shouldClose) return\n }\n finish(btn.value)\n })\n elements.buttons.appendChild(b)\n })\n\n const scheduleInitialFocus = dom.defaultView?.requestAnimationFrame\n ? (callback: () => void) => dom.defaultView?.requestAnimationFrame(() => callback())\n : (callback: () => void) => setTimeout(callback, 0)\n\n scheduleInitialFocus(() => {\n focusInitialDialogTarget(dialog, elements.description, elements.buttons)\n })\n })\n}\n\nfunction closeModal (_result: DialogButtonValue): void {\n if (modalDialog) {\n const elements = getDialogElements(modalDialog)\n clearModalError(elements)\n closeDialogElement(modalDialog)\n modalDialog.oncancel = null\n const headerActionButton = modalDialog.querySelector('#modal-header-action button') as HTMLButtonElement | null\n if (headerActionButton) headerActionButton.onclick = null\n }\n}\n\nexport function closeSharedDialog (): void {\n closeModal(null)\n}\n\nexport function alertDialog (message: string, title = 'Information', dom: Document) {\n return openModal({\n title,\n message,\n buttons: [{ label: 'OK', value: true, primary: true }],\n dom\n })\n}\n\nfunction updateSavingUI (dialog: HTMLDialogElement, submitLabel: string, isSaving: boolean) {\n const elements = getDialogElements(dialog)\n const saveButton = getSharedDialogSaveButton(dialog)\n const cancelButton = getSharedDialogCancelButton(dialog)\n\n dialog.classList.toggle('modal--saving', isSaving)\n dialog.setAttribute('aria-busy', String(isSaving))\n elements.description.toggleAttribute('inert', isSaving)\n\n if (isSaving) {\n const activeElement = dialog.ownerDocument.activeElement as HTMLElement | null\n if (activeElement && dialog.contains(activeElement)) {\n activeElement.blur()\n }\n }\n\n if (saveButton) {\n setDialogActionDisabled(saveButton, isSaving)\n saveButton.setAttribute('aria-busy', String(isSaving))\n setDialogActionLabel(saveButton, submitLabel)\n }\n\n if (cancelButton) {\n setDialogActionDisabled(cancelButton, isSaving)\n }\n\n elements.savingOverlay.hidden = !isSaving\n if (isSaving) {\n render(html`\n <div class=\"modal__saving-indicator inline-flex-row justify-center\" aria-live=\"polite\" aria-label=\"Saving changes\">\n ${createSpinner()}\n </div>\n `, elements.savingOverlay)\n } else {\n render(html``, elements.savingOverlay)\n }\n}\n\nexport function setSharedDialogSavingState (dom: Document, isSaving: boolean, submitLabel = 'Saving Changes'): void {\n const dialog = ensureModalDialog(dom)\n updateSavingUI(dialog, submitLabel, isSaving)\n}\n\ntype OpenInputDialogCustom = {\n title: string,\n dom: Document,\n form: HTMLFormElement,\n submitLabel?: string,\n cancelLabel?: string,\n headerAction?: DialogHeaderAction,\n hideFooterButtons?: boolean,\n onOpen?: () => void,\n shouldCloseWithoutSave?: () => Promise<boolean> | boolean,\n validate?: () => Promise<string | null> | string | null,\n onSave?: () => Promise<void> | void,\n formatSaveError?: (error: unknown) => string\n}\n\ntype InputDialogValues = Record<string, string>\n/* Function below generated by AI Model: GPT-5.3-Codex */\n/* Prompt: write me a reusable function to open a dialog with a form and return the form values on submit.\nThe function should also support validation and display error messages in the dialog.\nIt should reuse the OpenModal function for consistency. Done in 2 passes */\nexport function openInputDialog (options: OpenInputDialogCustom): Promise<InputDialogValues | null> {\n const submitLabel = options.submitLabel || 'Save Changes'\n const cancelLabel = options.cancelLabel || 'Cancel'\n const dialog = ensureModalDialog(options.dom)\n const elements = getDialogElements(dialog)\n\n const deriveDefaultFieldLabel = (value: string): string => value\n .replace(/^\\s*edit\\s+/i, '')\n .replace(/^\\s*add\\s+/i, '')\n .replace(/^\\s*create\\s+/i, '')\n .trim()\n\n const ensureFormControlsHaveAccessibleNames = () => {\n const titleLabel = deriveDefaultFieldLabel(options.title)\n if (!titleLabel) return\n\n const controls = Array.from(options.form.querySelectorAll<HTMLInputElement | HTMLTextAreaElement | HTMLSelectElement>([\n 'input:not([type=\"hidden\"])',\n 'textarea',\n 'select'\n ].join(',')))\n\n if (controls.length !== 1) return\n\n const [control] = controls\n const hasExplicitLabel = control.hasAttribute('aria-label') || control.hasAttribute('aria-labelledby')\n const hasNativeLabel = Boolean(control.closest('label'))\n if (hasExplicitLabel || hasNativeLabel || control.getAttribute('type') === 'hidden') {\n return\n }\n\n if (!control.getAttribute('aria-label')) {\n control.setAttribute('aria-label', titleLabel)\n }\n }\n\n ensureFormControlsHaveAccessibleNames()\n\n const handleSubmit = (event: SubmitEvent) => {\n event.preventDefault()\n const saveButton = getSharedDialogSaveButton(dialog)\n saveButton?.click()\n }\n\n options.form.addEventListener('submit', handleSubmit)\n\n const dialogPromise = openModal({\n title: options.title,\n message: options.form,\n headerAction: options.headerAction,\n buttons: [\n { label: cancelLabel, value: null, cancel: true },\n {\n label: submitLabel,\n value: 'save',\n primary: true,\n beforeClose: async () => {\n clearModalError(elements)\n\n if (options.shouldCloseWithoutSave && await options.shouldCloseWithoutSave()) {\n return true\n }\n\n if (options.validate) {\n const validationMessage = await options.validate()\n if (validationMessage) {\n setModalError(elements, validationMessage)\n return false\n }\n }\n\n if (!options.onSave) return true\n\n try {\n updateSavingUI(dialog, submitLabel, true)\n\n await options.onSave()\n return true\n } catch (error) {\n updateSavingUI(dialog, submitLabel, false)\n const fallback = options.formatSaveError ? options.formatSaveError(error) : undefined\n setModalError(elements, error, fallback)\n return false\n }\n }\n }\n ],\n dom: options.dom\n })\n\n const scheduleOpenCallback = options.dom.defaultView?.requestAnimationFrame\n ? (callback: () => void) => options.dom.defaultView?.requestAnimationFrame(() => callback())\n : (callback: () => void) => setTimeout(callback, 0)\n\n if (options.onOpen) {\n scheduleOpenCallback(options.onOpen)\n }\n\n elements.buttons.hidden = Boolean(options.hideFooterButtons)\n\n return dialogPromise\n .then((result) => {\n if (result !== 'save') return null\n return collectFormValues(options.form)\n })\n .finally(() => {\n elements.buttons.hidden = false\n updateSavingUI(dialog, submitLabel, false)\n options.form.removeEventListener('submit', handleSubmit)\n })\n}\n"],"mappings":";;;;;;;AAOA,IAAMI,IAAYJ,CAAI,qHAIlBK,IAAwC,MAEtCC,oBAAkB,IAAIC,QAKzB;AAEH,SAASC,EAAuBC,GAAgD;CAG9E,OAFIA,aAAkBC,cAAoBD,IACtCA,aAAkBE,OAAaF,EAAOG,gBACnC;AACT;AAEA,SAASC,EAAcC,GAA6B;CAKlD,OAJI,OAAOA,EAAMC,gBAAiB,aACzBD,EAAMC,aAAa,IAGrBD,EAAML,SAAS,CAACK,EAAML,MAAM,IAAI,CAAA;AACzC;AAEA,SAASO,EAA4BF,GAAuB;CAC1D,IAAMG,IAAOJ,EAAaC,CAAK,GACzBI,IAAcb,GAAac,cAAc,aAAa;CAM5D,IAJID,KAAeD,EAAKG,SAASF,CAAW,KAIxCb,KAAeY,EAAKG,SAASf,CAAW,GAC1C,OAAO;CAGT,IAAMgB,IAAgBb,EAAsBM,EAAML,MAAM;CAKxD,OAJI,CAACY,KAAiB,CAAChB,KAAe,CAACA,EAAYiB,SAASD,CAAa,IAChE,KAGFE,EAAQF,EAAcG,QAAQ,aAAa;AACpD;AAEA,SAASC,EAA4BC,GAAe;CAClD,IAAIC,IAAQrB,EAAgBsB,IAAIF,CAAG;CAUnC,OATKC,MACHA,IAAQ;EACNE,OAAO;EACPC,sBAAsBJ,EAAIK,gBAAgBC,MAAMC;EAChDC,sBAAsBR,EAAIS,KAAKH,MAAMC;EACrCG,mBAAmB;CACrB,GACA9B,EAAgB+B,IAAIX,GAAKC,CAAK,IAEzBA;AACT;AAEA,SAASW,EAA4BZ,GAAqB;CACxD,IAAMC,IAAQF,EAA2BC,CAAG;CAC5C,IAAIC,EAAMS,mBAAmB;CAE7B,IAAMG,KAA2BzB,MAAiB;EAChD,AAAKE,EAA2BF,CAAK,KACnCA,EAAM0B,eAAe;CAEzB;CAIAb,AAFAD,EAAIe,iBAAiB,SAASF,GAAyB;EAAEG,SAAS;EAAMC,SAAS;CAAM,CAAC,GACxFjB,EAAIe,iBAAiB,aAAaF,GAAyB;EAAEG,SAAS;EAAMC,SAAS;CAAM,CAAC,GAC5FhB,EAAMS,0BAA0B;EAG9BT,AAFAD,EAAIkB,oBAAoB,SAASL,GAAyB,EAAI,GAC9Db,EAAIkB,oBAAoB,aAAaL,GAAyB,EAAI,GAClEZ,EAAMS,oBAAoB;CAC5B;AACF;AAEA,SAASS,EAAoBnB,GAAqB;CAChD,IAAMC,IAAQF,EAA2BC,CAAG;CAW5CC,AATIA,EAAME,UAAU,MAClBF,EAAMG,uBAAuBJ,EAAIK,gBAAgBC,MAAMC,UACvDN,EAAMO,uBAAuBR,EAAIS,KAAKH,MAAMC,UAE5CP,EAAIK,gBAAgBC,MAAMC,WAAW,UACrCP,EAAIS,KAAKH,MAAMC,WAAW,UAC1BK,EAA2BZ,CAAG,IAGhCC,EAAME,SAAS;AACjB;AAEA,SAASiB,EAAsBpB,GAAqB;CAClD,IAAMC,IAAQF,EAA2BC,CAAG;CAC5C,AAAIC,EAAME,UAAU,MAEpBF,IAAME,OACFF,IAAME,QAAQ,OAElBH,EAAIK,gBAAgBC,MAAMC,WAAWN,EAAMG,sBAC3CJ,EAAIS,KAAKH,MAAMC,WAAWN,EAAMO,sBAChCP,EAAMS,oBAAoB,GAC1BT,EAAMS,oBAAoB;AAC5B;AAEA,SAASW,EAAsBrB,GAA4B;CACzD,OAAOA,EAAIS;AACb;AAuCA,SAASa,EAAiBC,GAAyD;CACjF,OAAOA,GAASC,YAAY;AAC9B;AAEA,SAASC,EAAyBF,GAAqCG,GAAyB;CAC9F,AAAKH,MACLA,EAAQG,WAAWA,GACnBH,EAAQI,gBAAgB,YAAYD,CAAQ;AAC9C;AAEA,SAASE,EAAsBL,GAAqCM,GAAqB;CACvF,AAAKN,MAEDD,EAAgBC,CAAO,MACzBA,EAAQM,QAAQA,GAChBN,EAAQO,aAAa,SAASD,CAAK,IACnCN,EAAQQ,cAAcF;AAK1B;AAEA,SAAgBG,EAA2BC,GAA8C;CACvF,OAAOA,EAAKxC,cAAc,+CAA6C;AACzE;AAEA,SAAgByC,EAA6BD,GAA8C;CACzF,OAAOA,EAAKxC,cAAc,uCAAqC;AACjE;AAEA,SAAS0C,EAAmBnC,GAAkC;CAC5D,IAAMoC,IAAcf,EAAqBrB,CAAG;CAiC5C,OA5BIrB,KAAeqB,EAAIS,KAAKb,SAASjB,CAAW,KAC1CA,EAAYO,kBAAkBkD,KAChCA,EAAYC,YAAY1D,CAAW,GAE9BA,MAGTA,IAAc,MACdA,IAAcqB,EAAIsC,cAAc,QAAQ,GACxC3D,EAAY4D,KAAK,iBACjB5D,EAAYmD,aAAa,cAAc,MAAM,GAC7CnD,EAAYmD,aAAa,mBAAmB,aAAa,GACzDnD,EAAYmD,aAAa,oBAAoB,YAAY,GAEzDnD,EAAY6D,YAAY,imBAaxBJ,EAAYC,YAAY1D,CAAW,GAC5BA;AACT;AAEA,SAAS8D,EAAmBC,GAA2C;CACrE,OAAO;EACLA;EACAC,OAAOD,EAAOjD,cAAc,cAAc;EAC1CmD,cAAcF,EAAOjD,cAAc,sBAAsB;EACzDD,aAAakD,EAAOjD,cAAc,aAAa;EAC/CoD,OAAOH,EAAOjD,cAAc,cAAc;EAC1CqD,SAASJ,EAAOjD,cAAc,gBAAgB;EAC9CsD,eAAeL,EAAOjD,cAAc,uBAAuB;CAC7D;AACF;AAEA,SAASuD,EAA4BC,GAAgC;CACnE,IAAMC,IAAqB,cACrBC,IAAcF,EAASJ,MAAMO,UAAU,CAACH,EAASJ,MAAMd,aAAasB,KAAK,IAC3EH,IACA,GAAGA,EAAkB;CAEzBD,EAASP,OAAOZ,aAAa,oBAAoBqB,CAAW;AAC9D;AAEA,SAASG,EAAiBL,GAAgC;CAIxDD,AAHAC,EAASJ,MAAMd,cAAc,IAC7BkB,EAASJ,MAAMf,aAAa,eAAe,MAAM,GACjDmB,EAASJ,MAAMO,SAAS,IACxBJ,EAA2BC,CAAQ;AACrC;AAEA,SAASM,EAAeN,GAA0BJ,GAAgBW,GAAgC;CAIhGR,AAHAC,EAASJ,MAAMd,cAActD,EAAmBoE,GAAOW,CAAe,GACtEP,EAASJ,MAAMf,aAAa,eAAe,OAAO,GAClDmB,EAASJ,MAAMO,SAAS,IACxBJ,EAA2BC,CAAQ;AACrC;AAEA,SAASQ,EAAmBf,GAAiC;CAG3D,IAFAvB,EAAmBuB,EAAOgB,aAAa,GAEnC,OAAOhB,EAAOiB,aAAc,YAC9B,IAAI;EACF,AAAKjB,EAAOkB,QAAMlB,EAAOiB,UAAU;EACnC;CACF,QAAQ,CACN;CAIJjB,EAAOZ,aAAa,QAAQ,EAAE;AAChC;AAEA,SAAS+B,EAAoBnB,GAAiC;CAC5D,IAAI;EACF,IAAI,OAAOA,EAAOoB,SAAU,cAAcpB,EAAOkB,MAAM;GACrDlB,EAAOoB,MAAM;GACb;EACF;EAEApB,EAAOqB,gBAAgB,MAAM;CAC/B,UAAU;EACR3C,EAAqBsB,EAAOgB,aAAa;CAC3C;AACF;AAEA,SAASM,EAAsBhE,GAAwB;CACrD,OAAOH,EAAQG,EAAIP,cAAc,wBAA0B;AAC7D;AAEA,SAASwE,EAAoBC,GAA+B;CAK1D,OADA,EAHIA,EAAQC,aAAa,UAAU,KAC/BD,EAAQE,aAAa,aAAa,MAAM,UACxCF,EAAQE,aAAa,QAAQ,MAAM,QACnCF,EAAQG,WAAW;AAEzB;AAEA,SAASC,EAAiCC,GAA2C;CACnF,IAAMC,IAAoBD,EAAUE,iBAAiB,oRAU1C;CAEX,KAAK,IAAME,KAASH,GAClB,IAAIG,aAAiB3F,eAAeiF,EAAmBU,CAAK,GAAG,OAAOA;CAGxE,OAAO;AACT;AAEA,SAASC,EAA0BlC,GAA2BlD,GAA6BsD,GAA+B;CACxH,IAAIkB,EAAqBtB,EAAOgB,aAAa,GAAG;EAE9ChB,AADAA,EAAO2B,WAAW,IAClB3B,EAAOmC,MAAM;EACb;CACF;CAEA,IAAMC,IAAgBR,EAAgC9E,CAAW;CACjE,IAAIsF,GAAe;EAEjB,AADAA,EAAcD,MAAM,IAChBC,aAAyBC,oBAAoBD,aAAyBE,wBACxEF,EAAcG,OAAO;EAEvB;CACF;CAEA,IAAMC,IAAcZ,EAAgCxB,CAAO;CAC3D,AAAIoC,KACFA,EAAYL,MAAM;AAEtB;AAEA,SAASM,EAAmBC,GAA0C;CACpE,IAAMC,IAAO,IAAIC,SAASF,CAAI,GACxBG,IAA4B,CAAC;CAInC,OAHAF,EAAKG,SAASC,GAAOC,MAAQ;EAC3BH,EAAOG,KAAOC,OAAOF,CAAK;CAC5B,CAAC,GACMF;AACT;AAEA,SAASK,EAAW,EAClBjD,UACAkD,YACA/C,YACAF,iBACA5C,UAOC;CACD,IAAM0C,IAASP,EAAkBnC,CAAG,GAC9BiD,IAAWR,EAAkBC,CAAM;CAezC,OAbAe,EAAkBf,CAAM,GAExBO,EAASN,MAAMZ,cAAcY,KAAS,IACtCM,EAASzD,YAAYgD,YAAY,IAC7B,OAAOqD,KAAY,WACrB5C,EAASzD,YAAYuC,cAAc8D,IAC1BA,KACT5C,EAASzD,YAAY6C,YAAYwD,CAAO,GAG1C5C,EAASH,QAAQN,YAAY,IAC7Bc,EAAgBL,CAAQ,GAEjB,IAAI6C,SAA4BC,MAAY;EACjD,IAAMC,KAAUP,MAA6B;GAE3CM,AADAE,EAAWR,CAAK,GAChBM,EAAQN,CAAK;EACf,GAEMS,UAAsB;GAC1B,IAAMC,IAAYjE,EAA4BQ,CAAM;GACpD,AAAIyD,IACFA,EAAUC,MAAM,IAIlBJ,EAAO,EAAK;EACd;EAOA/C,AALAP,EAAO2D,YAAYjH,MAAiB;GAElC8G,AADA9G,EAAM0B,eAAe,GACrBoF,EAAc;EAChB,GAEAjD,EAASL,aAAaJ,YAAY;EAClC,IAAM8D,IAAuB1D,KAAgB,EAAE2D,MAAM,QAAiB;EACtE,IAAID,EAAqBC,SAAS,SAAS;GACzC,IAAMC,IAAcxG,EAAIsC,cAAc,iBAAiB;GAEvDkE,AADAA,EAAY1E,aAAa,WAAW,OAAO,GAC3C0E,EAAY1E,aAAa,cAAc,cAAc;GACrD,IAAM2E,IAAWzG,EAAIsC,cAAc,MAAM;GAKzCW,AAJAwD,EAAS3E,aAAa,QAAQ,MAAM,GACpCvD,EAAOG,GAAW+H,CAAQ,GAC1BD,EAAYnE,YAAYoE,CAAQ,GAChCD,EAAYE,gBAAgBR,EAAc,GAC1CjD,EAASL,aAAaP,YAAYmE,CAAW;EAC/C,OAAO,IAAIF,EAAqBC,SAAS,UAAU;GACjD,IAAMI,IAAe3G,EAAIsC,cAAc,iBAAiB;GAWxDW,AAVA0D,EAAa7E,aAAa,WAAW,UAAU,GAC/C6E,EAAaC,YAAYN,EAAqBM,aAAa,IAC3DD,EAAa5E,cAAcuE,EAAqBzE,OAChD8E,EAAa7E,aAAa,SAASwE,EAAqBzE,KAAK,GAC7D8E,EAAa7E,aAAa,cAAcwE,EAAqBO,aAAaP,EAAqBzE,KAAK,GACpG8E,EAAaD,UAAU,YAAY;IACjC,AAAIJ,EAAqBQ,WACvB,MAAMR,EAAqBQ,QAAQ;GAEvC,GACA7D,EAASL,aAAaP,YAAYsE,CAAY;EAChD;EA2BAU,AAzBAvE,EAAQ0C,SAASuB,MAAQ;GACvB,IAAMC,IAAIhH,EAAIsC,cAAc,iBAAiB;GAiB7CW,AAhBA+D,EAAElF,aAAa,SAASiF,EAAIlF,KAAK,GACjCmF,EAAElF,aAAa,WAAWiF,EAAIE,UAAU,YAAY,WAAW,GAC/DD,EAAEjF,cAAcgF,EAAIlF,OAChBkF,EAAIE,WACND,EAAElF,aAAa,uBAAuB,MAAM,GAE1CiF,EAAIG,UACNF,EAAElF,aAAa,eAAe,MAAM,GAEtCkF,EAAEjG,iBAAiB,SAAS,YAAY;IACtC,CAAIgG,GAAII,eAEDC,MADqBL,EAAII,YAAY,MAG5CnB,EAAOe,EAAItB,KAAK;GAClB,CAAC,GACDxC,EAASH,QAAQT,YAAY2E,CAAC;EAChC,CAAC,IAE4BhH,EAAIsH,aAAaC,yBACzCC,MAAyBxH,EAAIsH,aAAaC,4BAA4BC,EAAS,CAAC,KAChFA,MAAyBC,WAAWD,GAAU,CAAC,EAAA,OAEzB;GACzB5C,EAAyBlC,GAAQO,EAASzD,aAAayD,EAASH,OAAO;EACzE,CAAC;CACH,CAAC;AACH;AAEA,SAASmD,EAAYyB,GAAkC;CACrD,IAAI/I,GAAa;EAIfA,AAFA2E,EADiBb,EAAkB9D,CACnBsE,CAAQ,GACxBY,EAAmBlF,CAAW,GAC9BA,EAAY0H,WAAW;EACvB,IAAMsB,IAAqBhJ,EAAYc,cAAc,6BAA6B;EAClF,AAAIkI,MAAoBA,EAAmBjB,UAAU;CACvD;AACF;AAeA,SAASoB,EAAgBpF,GAA2BqF,GAAqBC,GAAmB;CAC1F,IAAM/E,IAAWR,EAAkBC,CAAM,GACnCuF,IAAajG,EAA0BU,CAAM,GAC7CwF,IAAehG,EAA4BQ,CAAM;CAMvD,IAJAA,EAAOyF,UAAUC,OAAO,iBAAiBJ,CAAQ,GACjDtF,EAAOZ,aAAa,aAAa6D,OAAOqC,CAAQ,CAAC,GACjD/E,EAASzD,YAAYmC,gBAAgB,SAASqG,CAAQ,GAElDA,GAAU;EACZ,IAAMK,IAAgB3F,EAAOgB,cAAc2E;EAC3C,AAAIA,KAAiB3F,EAAO9C,SAASyI,CAAa,KAChDA,EAAcC,KAAK;CAEvB;CAaA,AAXIL,MACFxG,EAAwBwG,GAAYD,CAAQ,GAC5CC,EAAWnG,aAAa,aAAa6D,OAAOqC,CAAQ,CAAC,GACrDpG,EAAqBqG,GAAYF,CAAW,IAG1CG,KACFzG,EAAwByG,GAAcF,CAAQ,GAGhD/E,EAASF,cAAcK,SAAS,CAAC4E,GAE/BzJ,EADEyJ,IACK1J,CAAI;;UAELE,EAAc,EAAC;;QAIdF,CAAI,IAFR2E,EAASF,aAEyB;AAEzC;AA2BA,SAAgByF,EAAiBC,GAAmE;CAClG,IAAMV,IAAcU,EAAQV,eAAe,gBACrCW,IAAcD,EAAQC,eAAe,UACrChG,IAASP,EAAkBsG,EAAQzI,GAAG,GACtCiD,IAAWR,EAAkBC,CAAM,GAEnCiG,KAA2BlD,MAA0BA,EACxDmD,QAAQ,gBAAgB,EAAE,CAAC,CAC3BA,QAAQ,eAAe,EAAE,CAAC,CAC1BA,QAAQ,kBAAkB,EAAE,CAAC,CAC7BvF,KAAK;CA0BRwF,OAxBoD;EAClD,IAAMC,IAAaH,EAAwBF,EAAQ9F,KAAK;EACxD,IAAI,CAACmG,GAAY;EAEjB,IAAMC,IAAWC,MAAMC,KAAKR,EAAQrD,KAAKX,iBAA6E,8CAI3G,CAAC;EAEZ,IAAIsE,EAASG,WAAW,GAAG;EAE3B,IAAM,CAAC3H,KAAWwH,GACZI,IAAmB5H,EAAQ4C,aAAa,YAAY,KAAK5C,EAAQ4C,aAAa,iBAAiB,GAC/FiF,IAAiBvJ,EAAQ0B,EAAQzB,QAAQ,OAAO;EACtD,AAAIqJ,KAAoBC,KAAkB7H,EAAQ6C,aAAa,MAAM,MAAM,YAItE7C,EAAQ6C,aAAa,YAAY,KACpC7C,EAAQO,aAAa,cAAcgH,CAAU;CAEjD,EAEAD,CAAsC;CAEtC,IAAMQ,KAAgBjK,MAAuB;EAG3C6I,AAFA7I,EAAM0B,eAAe,GAErBmH,EAD6CvF,CAC7CuF,CAAAA,EAAY7B,MAAM;CACpB;CAEAqC,EAAQrD,KAAKrE,iBAAiB,UAAUsI,CAAY;CAEpD,IAAMC,IAAgB1D,EAAU;EAC9BjD,OAAO8F,EAAQ9F;EACfkD,SAAS4C,EAAQrD;EACjBxC,cAAc6F,EAAQ7F;EACtBE,SAAS,CACP;GAAEjB,OAAO6G;GAAajD,OAAO;GAAMyB,QAAQ;EAAK,GAChD;GACErF,OAAOkG;GACPtC,OAAO;GACPwB,SAAS;GACTE,aAAa,YAAY;IAGvB,IAFA7D,EAAgBL,CAAQ,GAEpBwF,EAAQc,0BAA0B,MAAMd,EAAQc,uBAAuB,GACzE,OAAO;IAGT,IAAId,EAAQe,UAAU;KACpB,IAAMC,IAAoB,MAAMhB,EAAQe,SAAS;KACjD,IAAIC,GAEF,OADAlG,EAAcN,GAAUwG,CAAiB,GAClC;IAEX;IAEA,IAAI,CAAChB,EAAQiB,QAAQ,OAAO;IAE5B,IAAI;KAIF,OAHA5B,EAAepF,GAAQqF,GAAa,EAAI,GAExC,MAAMU,EAAQiB,OAAO,GACd;IACT,SAAS7G,GAAO;KACdiF,EAAepF,GAAQqF,GAAa,EAAK;KACzC,IAAM4B,IAAWlB,EAAQmB,kBAAkBnB,EAAQmB,gBAAgB/G,CAAK,IAAIgH,KAAAA;KAE5E,OADAtG,EAAcN,GAAUJ,GAAO8G,CAAQ,GAChC;IACT;GACF;EACF,CAAC;EAEH3J,KAAKyI,EAAQzI;CACf,CAAC,GAEK8J,IAAuBrB,EAAQzI,IAAIsH,aAAaC,yBACjDC,MAAyBiB,EAAQzI,IAAIsH,aAAaC,4BAA4BC,EAAS,CAAC,KACxFA,MAAyBC,WAAWD,GAAU,CAAC;CAQpD,OANIiB,EAAQsB,UACVD,EAAqBrB,EAAQsB,MAAM,GAGrC9G,EAASH,QAAQM,SAASvD,EAAQ4I,EAAQuB,mBAEnCV,EACJW,MAAMC,MACDA,MAAW,SACR/E,EAAkBsD,EAAQrD,IAAI,IADP,IAE/B,CAAC,CACD+E,cAAc;EAGb1B,AAFAxF,EAASH,QAAQM,SAAS,IAC1B0E,EAAepF,GAAQqF,GAAa,EAAK,GACzCU,EAAQrD,KAAKlE,oBAAoB,UAAUmI,CAAY;CACzD,CAAC;AACL"}
@@ -1,12 +1,11 @@
1
1
  import { html as e } from "lit-html";
2
- //#region src/components/profile-heading/editor/ui/spinner.ts
2
+ // src/components/profile-heading/editor/ui/spinner.ts
3
3
  function t() {
4
4
  return e`
5
5
  <span class="loading-spinner" aria-hidden="true"></span>
6
6
  <span class="sr-only">Saving...</span>
7
7
  `;
8
8
  }
9
- //#endregion
10
9
  export { t as createSpinner };
11
10
 
12
11
  //# sourceMappingURL=spinner.esm.js.map
@@ -1,4 +1,4 @@
1
- //#region src/components/profile-heading/editor/utils/errorDisplay.ts
1
+ // src/components/profile-heading/editor/utils/errorDisplay.ts
2
2
  function e(e) {
3
3
  if (typeof e == "string") return e;
4
4
  if (e instanceof Error) return e.message || e.name;
@@ -12,7 +12,6 @@ function e(e) {
12
12
  function t(t, n) {
13
13
  return (n || e(t) || "Something went wrong.").trim();
14
14
  }
15
- //#endregion
16
15
  export { t as formatDisplayError };
17
16
 
18
17
  //# sourceMappingURL=errorDisplay.esm.js.map
@@ -3,7 +3,7 @@ import { ensureStandardMutationPrefixes as t } from "./editor/sections/shared/rd
3
3
  import { ns as n } from "solid-ui";
4
4
  import { authn as r, store as i } from "solid-logic";
5
5
  import { st as a } from "rdflib";
6
- //#region src/components/profile-heading/friendActions.ts
6
+ // src/components/profile-heading/friendActions.ts
7
7
  var o = {
8
8
  add: "Add as friend",
9
9
  exists: "Already a friend",
@@ -26,7 +26,6 @@ async function l(r, l) {
26
26
  throw e(t).includes("Unauthenticated") ? Error(o.loginRequired) : t;
27
27
  }
28
28
  }
29
- //#endregion
30
29
  export { l as addFriend, c as checkFriend, o as friendTexts };
31
30
 
32
31
  //# sourceMappingURL=friendActions.esm.js.map
@@ -1,7 +1,7 @@
1
1
  import { getViewerRelation as e } from "../../utils/viewerUtils.esm.js";
2
2
  import { ns as t, utils as n, widgets as r } from "solid-ui";
3
3
  import { store as i } from "solid-logic";
4
- //#region src/components/profile-heading/profileHeadingData.ts
4
+ // src/components/profile-heading/profileHeadingData.ts
5
5
  async function a(t) {
6
6
  let n = e(t);
7
7
  if (n !== "owner") return n;
@@ -75,7 +75,6 @@ function d(e) {
75
75
  let t = e.trim().toLowerCase();
76
76
  return t === "work" || t.endsWith("#work") || t.endsWith("/work");
77
77
  }
78
- //#endregion
79
78
  export { a as getViewerMode, o as presentProfile };
80
79
 
81
80
  //# sourceMappingURL=profileHeadingData.esm.js.map
@@ -2,7 +2,7 @@ import e from "./ontologyData.esm.js";
2
2
  import t from "./preferencesFormText.esm.js";
3
3
  import { icons as n, login as r, ns as i, widgets as a } from "solid-ui";
4
4
  import { parse as o } from "rdflib";
5
- //#region src/dashboard/basicPreferences.ts
5
+ // src/dashboard/basicPreferences.ts
6
6
  var s = {
7
7
  icon: n.iconBase + "noun_Sliders_341315_000000.svg",
8
8
  name: "basicPreferences",
@@ -64,7 +64,6 @@ function f(e, t, n) {
64
64
  let i = r.appendChild(t.createElement("h3"));
65
65
  return i.innerText = n, r;
66
66
  }
67
- //#endregion
68
67
  export { s as basicPreferencesPane, s as default };
69
68
 
70
69
  //# sourceMappingURL=basicPreferences.esm.js.map
@@ -2,6 +2,5 @@ import "./homepage.esm.js";
2
2
  import { icons as e } from "solid-ui";
3
3
  import "solid-logic";
4
4
  e.iconBase + "";
5
- //#endregion
6
5
 
7
6
  //# sourceMappingURL=dashboardPane.esm.js.map
@@ -1,5 +1,5 @@
1
1
  import { getName as e, loadProfileFromURI as t } from "../utils/webIdUtils.esm.js";
2
- //#region src/dashboard/homepage.ts
2
+ // src/dashboard/homepage.ts
3
3
  async function n(n, a, o) {
4
4
  let s = await t(n), c = e(a, s), l = document.createElement("div");
5
5
  return l.classList.add("container"), l.appendChild(i(s.uri, c)), l.appendChild(r(c)), l;
@@ -20,7 +20,6 @@ function i(e, t) {
20
20
  let i = document.createElement("h1");
21
21
  return i.appendChild(n), i.appendChild(r), i;
22
22
  }
23
- //#endregion
24
23
  export { n as generateHomepage };
25
24
 
26
25
  //# sourceMappingURL=homepage.esm.js.map
@@ -1,6 +1,5 @@
1
- //#region src/dashboard/ontologyData.ttl
1
+ // src/dashboard/ontologyData.ttl
2
2
  var e = "@prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>.\n@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#>.\n@prefix solid: <http://www.w3.org/ns/solid/terms#>.\n@prefix foaf: <http://xmlns.com/foaf/0.1/>.\n@prefix schema: <http:/schema.org/>.\n@prefix ui: <http://www.w3.org/ns/ui#>.\n@prefix vcard: <http://www.w3.org/2006/vcard/ns#>.\n@prefix : <#>.\n\nsolid:User a rdfs:Class;\n rdfs:label \"user\"@en, \"utilisateur\"@fr;\n rdfs:comment \"\"\"Any person who might use a Solid-based system\"\"\";\n rdfs:subClassOf foaf:Person, schema:Person, vcard:Individual.\n\n# Since these options are opt-in, it is a bit strange to have new users opt in\n# That they are new users - also we do not use this class for anything specific\n# yet\n# solid:NewUser a rdfs:Class;\n# rdfs:label \"new user\"@en;\n# rdfs:comment \"\"\"A person who might use a Solid-based system who has a low\n# level of familiarity with technical details.\"\"\";\n# rdfs:subClassOf solid:User.\n\nsolid:PowerUser a rdfs:Class;\n rdfs:label \"power user\"@en;\n rdfs:comment \"\"\"A person who might use a Solid-based system\n who is prepared to be given a more complex interface in order\n to be provided with more pwerful features.\"\"\";\n rdfs:subClassOf solid:User.\n\n solid:Developer a rdfs:Class;\n rdfs:label \"Developer\";\n rdfs:comment \"\"\"Any person who might use a Solid-based system,\n who has software development skills.\"\"\";\n rdfs:subClassOf solid:User.\n";
3
- //#endregion
4
3
  export { e as default };
5
4
 
6
5
  //# sourceMappingURL=ontologyData.esm.js.map
@@ -1,6 +1,5 @@
1
- //#region src/dashboard/preferencesFormText.ttl
1
+ // src/dashboard/preferencesFormText.ttl
2
2
  var e = "@prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>.\n@prefix solid: <http://www.w3.org/ns/solid/terms#>.\n@prefix ui: <http://www.w3.org/ns/ui#>.\n@prefix : <#>.\n\n:this <http://purl.org/dc/elements/1.1/title> \"Basic preferences\" ;\n a ui:Form ;\n ui:part :categorizeUser, :privateComment, :personalInformationHeading;\n ui:parts ( :personalInformationHeading :privateComment :categorizeUser ).\n\n:personalInformationHeading a ui:Heading;\n ui:contents \"Personal information\".\n\n:privateComment a ui:Comment;\n ui:contents \"This information is private.\".\n\n:categorizeUser a ui:Classifier;\n ui:label \"Level of user\"; ui:property rdf:type ; ui:category solid:User.\n";
3
- //#endregion
4
3
  export { e as default };
5
4
 
6
5
  //# sourceMappingURL=preferencesFormText.esm.js.map