solid-ui 5.0.1-0 → 5.0.1-1

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 (68) hide show
  1. package/README.md +21 -0
  2. package/dist/_virtual/~icons/lucide/square-arrow-out-up-right.cjs.js +2 -0
  3. package/dist/_virtual/~icons/lucide/square-arrow-out-up-right.cjs.js.map +1 -0
  4. package/dist/_virtual/~icons/lucide/square-arrow-out-up-right.esm.js +11 -0
  5. package/dist/_virtual/~icons/lucide/square-arrow-out-up-right.esm.js.map +1 -0
  6. package/dist/chunks/{access-control-modal-C9ECFvn0.js → access-control-modal-eOv2-U27.js} +3 -3
  7. package/dist/chunks/{access-control-modal-C9ECFvn0.js.map → access-control-modal-eOv2-U27.js.map} +1 -1
  8. package/dist/chunks/{account-BUnArMjm.js → account-DpmYJEd-.js} +6 -6
  9. package/dist/chunks/{account-BUnArMjm.js.map → account-DpmYJEd-.js.map} +1 -1
  10. package/dist/chunks/{auth-BgEyix2g.js → auth-Hp8M6TQf.js} +2 -2
  11. package/dist/chunks/{auth-BgEyix2g.js.map → auth-Hp8M6TQf.js.map} +1 -1
  12. package/dist/chunks/{avatar-DiGyEwvL.js → avatar-D5rcw6gN.js} +2 -2
  13. package/dist/chunks/{avatar-DiGyEwvL.js.map → avatar-D5rcw6gN.js.map} +1 -1
  14. package/dist/chunks/{combobox-a0vVnPo8.js → combobox-Dmv-TZtI.js} +2 -2
  15. package/dist/chunks/combobox-Dmv-TZtI.js.map +1 -0
  16. package/dist/chunks/{guard-c6JOj8UM.js → guard-FbhNrJGh.js} +2 -2
  17. package/dist/chunks/{guard-c6JOj8UM.js.map → guard-FbhNrJGh.js.map} +1 -1
  18. package/dist/chunks/{login-button-gUZbphp9.js → login-button-DCq4Gi3_.js} +2 -2
  19. package/dist/chunks/{login-button-gUZbphp9.js.map → login-button-DCq4Gi3_.js.map} +1 -1
  20. package/dist/chunks/{logout-button-GWQMrdx4.js → logout-button-D3dJrsV4.js} +2 -2
  21. package/dist/chunks/{logout-button-GWQMrdx4.js.map → logout-button-D3dJrsV4.js.map} +1 -1
  22. package/dist/chunks/{provider-DLNWLlfX.js → provider-D9UgRI4G.js} +2 -2
  23. package/dist/chunks/{provider-DLNWLlfX.js.map → provider-D9UgRI4G.js.map} +1 -1
  24. package/dist/chunks/{signup-button-i9d5eTUY.js → signup-button-BQ4AWem2.js} +2 -2
  25. package/dist/chunks/{signup-button-i9d5eTUY.js.map → signup-button-BQ4AWem2.js.map} +1 -1
  26. package/dist/chunks/{src-B9ABTiyW.js → src-DQMZZG1B.js} +2319 -2281
  27. package/dist/chunks/src-DQMZZG1B.js.map +1 -0
  28. package/dist/chunks/{widgets-CQOLuw3A.js → widgets-CVLwnfkU.js} +122 -74
  29. package/dist/chunks/widgets-CVLwnfkU.js.map +1 -0
  30. package/dist/components/access-control-modal.js +1 -1
  31. package/dist/components/account.js +1 -1
  32. package/dist/components/avatar.js +1 -1
  33. package/dist/components/combobox/Combobox.styles.cjs.js +1 -1
  34. package/dist/components/combobox/Combobox.styles.cjs.js.map +1 -1
  35. package/dist/components/combobox/Combobox.styles.esm.js +1 -1
  36. package/dist/components/combobox/Combobox.styles.esm.js.map +1 -1
  37. package/dist/components/combobox.js +1 -1
  38. package/dist/components/guard.js +1 -1
  39. package/dist/components/login-button.js +1 -1
  40. package/dist/components/login-modal.js +1 -1
  41. package/dist/components/logout-button.js +1 -1
  42. package/dist/components/provider.js +1 -1
  43. package/dist/components/signup-button.js +1 -1
  44. package/dist/components.js +10 -10
  45. package/dist/index.js +3 -3
  46. package/dist/lib/iconBase.cjs.js +1 -1
  47. package/dist/lib/iconBase.cjs.js.map +1 -1
  48. package/dist/lib/iconBase.esm.js +3 -2
  49. package/dist/lib/iconBase.esm.js.map +1 -1
  50. package/dist/loader.js +3 -3
  51. package/dist/solid-ui.js +30 -30
  52. package/dist/solid-ui.min.js +30 -30
  53. package/dist/solid-ui.min.js.map +1 -1
  54. package/dist/widgets/buttons/iconLinks.cjs.js +1 -1
  55. package/dist/widgets/buttons/iconLinks.cjs.js.map +1 -1
  56. package/dist/widgets/buttons/iconLinks.d.ts.map +1 -1
  57. package/dist/widgets/buttons/iconLinks.esm.js +16 -10
  58. package/dist/widgets/buttons/iconLinks.esm.js.map +1 -1
  59. package/dist/widgets/buttons.cjs.js +1 -1
  60. package/dist/widgets/buttons.cjs.js.map +1 -1
  61. package/dist/widgets/buttons.d.ts +5 -1
  62. package/dist/widgets/buttons.d.ts.map +1 -1
  63. package/dist/widgets/buttons.esm.js +67 -34
  64. package/dist/widgets/buttons.esm.js.map +1 -1
  65. package/package.json +1 -1
  66. package/dist/chunks/combobox-a0vVnPo8.js.map +0 -1
  67. package/dist/chunks/src-B9ABTiyW.js.map +0 -1
  68. package/dist/chunks/widgets-CQOLuw3A.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"access-control-modal-C9ECFvn0.js","names":["customElement","WebComponent","html","property","state","ACCESS_ROLES","findImage","sym","styles","_classDecs","_AccessControlSharedA","_AccessControlSharedA2","_A","WeakMap","_B","_ref","_accessGrantViewModelsDecs","attribute","_searchValueDecs","_AccessControlSharedAccess","AccessControlSharedAccess","constructor","args","_classPrivateFieldInitSpec","_initProto","_init_accessGrantViewModels","_init_searchValue","_classPrivateFieldGet","accessGrantViewModels","v","_classPrivateFieldSet","searchValue","onSearchInput","event","target","currentTarget","value","onSearchSelect","option","detail","label","onAccessGrantRoleChange","id","includes","role","dispatchEvent","CustomEvent","bubbles","composed","getFilteredAccessGrants","query","trim","toLowerCase","filter","subjectLabel","subjects","length","renderAccessGrant","entry","renderAuthorizationBadge","authorization","renderAuthorizationRole","badge","getAuthorizationBadge","kind","image","text","agent","getInitials","agentGroup","agentClass","origin","maxWords","parts","split","Boolean","slice","initials","map","part","join","toUpperCase","renderGrantRoleOptions","render","accessGrants","e","c","_initClass","_applyDecs","_Class","_identity","_defineProperty","default","_Class","_A","_B","_initProto","_initClass","_classDecs","_ref","_classPrivateFieldInitSpec","_checkPrivateRedeclaration","_classPrivateFieldSet","_assertClassBrand","_classPrivateFieldGet","_defineProperty","_toPropertyKey","_applyDecs","_setFunctionName","_checkInRHS","_toPrimitive","_identity","property","state","ACCESS_ROLES","sym","styles","customElement","WebComponent","html","property","ACCESS_ROLES","PUBLIC_ACCESS_ROLES","debug","styles","_classDecs","_AccessControlGeneral","_AccessControlGeneral2","_A","WeakMap","_B","_C","_ref","_subjectUriDecs","attribute","_authenticatedAccessRoleValueDecs","_publicAccessRoleValueDecs","_AccessControlGeneralAccess","AccessControlGeneralAccess","constructor","args","_classPrivateFieldInitSpec","_initProto","_init_subjectUri","undefined","_init_authenticatedAccessRoleValue","_init_publicAccessRoleValue","_classPrivateFieldGet","subjectUri","v","_classPrivateFieldSet","authenticatedAccessRoleValue","publicAccessRoleValue","onAuthenticatedRoleChange","event","dispatchRoleChange","onPublicRoleChange","eventName","roles","value","detail","option","includes","role","dispatchEvent","CustomEvent","bubbles","composed","onCopyLinkClick","preventDefault","navigator","clipboard","writeText","error","renderAuthenticatedRoleOptions","map","renderPublicRoleOptions","renderAuthenticatedModeSelector","renderPublicModeSelector","renderGeneralAccessIcon","renderGeneralShareRow","options","title","description","variant","render","e","c","_initClass","_applyDecs","_Class","_identity","_defineProperty","default","_Class","_A","_B","_C","_initProto","_initClass","_classDecs","_subjectUriDecs","_init_subjectUri","_authenticatedAccessRoleValueDecs","_init_authenticatedAccessRoleValue","_publicAccessRoleValueDecs","_init_publicAccessRoleValue","_ref","_classPrivateFieldInitSpec","_checkPrivateRedeclaration","_classPrivateFieldSet","_assertClassBrand","_classPrivateFieldGet","_defineProperty","_toPropertyKey","_applyDecs","_setFunctionName","_checkInRHS","_toPrimitive","_identity","property","ACCESS_ROLES","PUBLIC_ACCESS_ROLES","error","styles","customElement","WebComponent","html","property","styles","_classDecs","_AccessControlErrors","_AccessControlErrors2","_A","WeakMap","_B","_ref","_errorsDecs","attribute","_successfulChangesRefreshedDecs","_AccessControlErrors3","AccessControlErrors","constructor","args","_classPrivateFieldInitSpec","_initProto","_init_errors","_init_successfulChangesRefreshed","_classPrivateFieldGet","errors","v","_classPrivateFieldSet","successfulChangesRefreshed","onClose","event","stopPropagation","dispatchEvent","CustomEvent","bubbles","composed","render","length","map","error","label","action","role","e","c","_initClass","_applyDecs","_Class","_identity","_defineProperty","default","_Class","_A","_B","_initProto","_initClass","_classDecs","_errorsDecs","_init_errors","_successfulChangesRefreshedDecs","_init_successfulChangesRefreshed","_ref","_classPrivateFieldInitSpec","_checkPrivateRedeclaration","_classPrivateFieldSet","_assertClassBrand","_classPrivateFieldGet","_defineProperty","_toPropertyKey","_applyDecs","_setFunctionName","_checkInRHS","_toPrimitive","_identity","property","styles","isAbsoluteHttpUri","value","url","URL","protocol","Boolean","hostname","isOriginUrl","pathname","search","hash","username","password","normalizeOriginInput","trimmedValue","trim","undefined","parsed","isHttpOrigin","hasOnlyOriginParts","isRecognizedHost","includes","origin","dedupeByKey","items","getKey","uniqueItems","Map","item","key","has","set","values","dedupeComboboxOptions","options","option","label","Authenticated","Public","solidLogicSingleton","sym","getSharedAuthorization","authorization","agentClass","filter","iri","getAuthorizationSubjectEntries","subjectSets","type","iris","agent","agentGroup","origin","flatMap","map","getAccessGrantId","subject","sort","join","getAccessGrantIds","authorizations","occurrences","Map","sharedAuthorization","baseId","occurrence","get","set","getAuthorizationSubjectLabel","subjects","length","getAuthorizationRole","acl","roleFromModes","mode","createAccessGrantDraft","id","role","initialRole","subjectLabel","createAccessGrantDrafts","ids","index","getAccessGrantViewModels","drafts","left","right","leftIsOwner","rightIsOwner","indexOf","getChangedAccessGrants","getAuthenticatedAccessRole","accessGrants","find","item","includes","getPublicAccessRole","publicRoleFromModes","getAccessSubjectLabel","trim","sym","solidLogicSingleton","customElement","WebComponent","html","nothing","property","ACCESS_ROLES","styles","directoryEntryOptionTemplate","entry","renderDirectoryEntryIcon","label","sources","includes","_classDecs","_AccessControlAddAcce","_AccessControlAddAcce2","_A","WeakMap","_B","_C","_D","_E","_ref","_principalInputValueDecs","attribute","_addAccessRoleValueDecs","_pendingAccessGrantsDecs","_inputErrorDecs","_asyncOptionsProviderDecs","_AccessControlAddAccess","AccessControlAddAccess","constructor","args","_classPrivateFieldInitSpec","_initProto","_init_principalInputValue","_init_addAccessRoleValue","_init_pendingAccessGrants","_init_inputError","_init_asyncOptionsProvider","_classPrivateFieldGet","principalInputValue","v","_classPrivateFieldSet","addAccessRoleValue","pendingAccessGrants","inputError","asyncOptionsProvider","onPrincipalInput","event","value","getEventValue","dispatchEvent","CustomEvent","detail","bubbles","composed","onPrincipalSelect","option","onRoleChange","role","onPendingGrantRemove","index","target","currentTarget","render","renderPendingAccessGrants","filter","map","length","grant","e","c","_initClass","_applyDecs","_Class","_identity","_defineProperty","default","_Class","_A","_B","_C","_D","_E","_initProto","_initClass","_classDecs","_principalInputValueDecs","_init_principalInputValue","_addAccessRoleValueDecs","_init_addAccessRoleValue","_pendingAccessGrantsDecs","_init_pendingAccessGrants","_ref","_classPrivateFieldInitSpec","_checkPrivateRedeclaration","_classPrivateFieldSet","_assertClassBrand","_classPrivateFieldGet","_defineProperty","_toPropertyKey","_applyDecs","_setFunctionName","_checkInRHS","_toPrimitive","_identity","nothing","property","ACCESS_ROLES","styles","defineAsyncComboboxOptionsProvider","directoryEntryOptionTemplate","label","DEFAULT_DIRECTORY_SOURCES","solidLogicSingleton","sym","dedupeByKey","dedupeComboboxOptions","isAbsoluteHttpUri","isOriginUrl","normalizeOriginInput","classifyAccessTarget","principal","normalizedOrigin","kind","subjectValue","acl","classifyAccessControlSubject","resolveAccessTargetLabel","resolvedPrincipal","preferredLabel","subject","store","fetcher","load","doc","resolvedLabel","trim","undefined","resolveAccessTarget","subjectType","createUrlOption","uri","resolved","value","directoryEntryToOption","entry","labelValue","template","getPreferredAccessPrincipalOptions","query","URL","origin","urlOption","getShortQueryOptions","preferredOptions","length","selectable","accessPrincipalOptionsProvider","filter","entries","directory","search","sources","error","verifiedEntries","Promise","all","map","options","entryLabel","option","solidLogicSingleton","sym","DEFAULT_DIRECTORY_SOURCES","Public","solidLogicSingleton","applyAccessChanges","subjectUri","accessChanges","errors","subject","label","role","plan","acl","planRevoke","planGrant","type","iri","modesFromPublicRole","modesFromRole","applyPlan","error","push","action","targetUri","message","Error","solidLogicSingleton","getAccessSubjectLabel","buildAccessChanges","pendingAccessGrants","generalAccessChanges","changedAccessGrants","map","grant","subject","type","subjectType","iri","subjectValue","role","label","flatMap","subjects","customElement","DialogComponent","html","property","state","label","debug","Authenticated","Public","solidLogicSingleton","sym","styles","dedupeByKey","createAccessGrantDrafts","getAccessGrantIds","getAccessGrantViewModels","getAuthenticatedAccessRole","getAuthorizationSubjectLabel","getChangedAccessGrants","getPublicAccessRole","getSharedAuthorization","accessPrincipalOptionsProvider","resolveAccessTarget","applyAccessChanges","buildAccessChanges","isDefined","value","undefined","_classDecs","_AccessControlModal","_AccessControlModal2","_A","WeakMap","_B","_C","_D","_E","_F","_G","_H","_I","_J","_K","_ref","_subjectUriDecs","attribute","_accessGrantsDecs","_principalInputValueDecs","_addAccessRoleValueDecs","_authenticatedAccessRoleValueDecs","_publicAccessRoleValueDecs","_submittingDecs","_pendingAccessGrantsDecs","_accessGrantDraftsDecs","_errorsDecs","_successfulChangesRefreshedDecs","_AccessControlModal3","AccessControlModal","constructor","args","_classPrivateFieldInitSpec","_initProto","_init_subjectUri","_init_accessGrants","_init_principalInputValue","_init_addAccessRoleValue","_init_authenticatedAccessRoleValue","_init_publicAccessRoleValue","_init_submitting","_init_pendingAccessGrants","_init_accessGrantDrafts","_init_errors","_init_successfulChangesRefreshed","_defineProperty","_classPrivateFieldGet","subjectUri","v","_classPrivateFieldSet","accessGrants","principalInputValue","addAccessRoleValue","authenticatedAccessRoleValue","publicAccessRoleValue","submitting","pendingAccessGrants","accessGrantDrafts","errors","successfulChangesRefreshed","disconnectedCallback","accessGrantLabelRequestVersion","inputError","find","error","action","message","saveErrors","filter","setInputError","item","clearInputError","willUpdate","changedProperties","has","updated","refreshAccessGrantLabels","catch","requestVersion","grants","length","labels","Promise","all","map","authorization","agentGroup","groupUri","store","fetcher","load","doc","labelsById","Map","id","index","draft","subjectLabel","get","getDialogTitle","subject","trim","render","dialogTitle","onSubmit","onPrincipalInput","onPrincipalSelect","onAddAccessRoleInput","onPendingGrantRemoved","onAccessGrantRoleInput","onAuthenticatedAccessRoleInput","onPublicAccessRoleInput","onCancelClick","hasUnsavedChanges","onSaveClick","e","preventDefault","commitPrincipalFromInputSafely","committed","saveAccessChanges","close","changedAccessGrants","generalAccessChanges","getGeneralAccessChanges","accessChanges","acl","findAccessGrants","targetUri","Error","event","detail","queuePendingPrincipal","currentAuthenticatedRole","currentPublicRole","authenticatedChange","role","publicChange","grant","_","pendingIndex","Boolean","commitPrincipalFromInput","rawValue","inputSnapshot","principal","preferredLabel","snapshot","result","createPendingAccessGrant","merged","dedupePendingAccessGrants","normalizedPrincipal","resolvedTarget","subjectType","subjectValue","draftGrants","draftGrant","c","_initClass","_applyDecs","_Class","_identity","default","property","state","error","solidLogicSingleton","sym","styles","AccessControlModal","AccessControlModal","namedNode","Authenticated","c$1","h","g","c","Public","label","error","findImage","DialogComponent","A","customElement","n","WebComponent","i","b","defineAsyncComboboxOptionsProvider","iconlucidecirclex","AccessControlSharedAccess_styles_default","_Class$4","_AccessControlSharedAccess","_A$4","_B$4","_initProto$4","_initClass$4","_classDecs$4","_accessGrantViewModelsDecs","_init_accessGrantViewModels","_searchValueDecs","_init_searchValue","_AccessControlSharedA2","_ref$4","_classPrivateFieldInitSpec$4","a","_checkPrivateRedeclaration$4","_classPrivateFieldSet$4","s","_assertClassBrand$4","r","_classPrivateFieldGet$4","_defineProperty$4","_toPropertyKey$4","t","_applyDecs$4","o","applyDec","m","y","v","u","w","S","d","p","_setFunctionName$4","P","j","D","I","F","l","f","N","_checkInRHS$4","_toPrimitive$4","e","_identity$4","_AccessControlSharedA","args","target","event","option","value","detail","query","subjects","subjectLabel","entry","badge","authorization","agent","image","agentClass","maxWords","part","role","id","accessGrants","iconlucidelink","iconlucideglobe","AccessControlGeneralAccess_styles_default","_Class$3","_AccessControlGeneralAccess","_A$3","_B$3","_C$2","_initProto$3","_initClass$3","_classDecs$3","_subjectUriDecs$1","_init_subjectUri$1","_authenticatedAccessRoleValueDecs$1","_init_authenticatedAccessRoleValue$1","_publicAccessRoleValueDecs$1","_init_publicAccessRoleValue$1","_AccessControlGeneral2","_ref$3","_classPrivateFieldInitSpec$3","_checkPrivateRedeclaration$3","_classPrivateFieldSet$3","_assertClassBrand$3","_classPrivateFieldGet$3","_defineProperty$3","_toPropertyKey$3","_applyDecs$3","_setFunctionName$3","_checkInRHS$3","_toPrimitive$3","_identity$3","_AccessControlGeneral","roles","eventName","error$4","options","AccessControlErrors_styles_default","_Class$2","_AccessControlErrors3","_A$2","_B$2","_initProto$2","_initClass$2","_classDecs$2","_errorsDecs$1","_init_errors$1","_successfulChangesRefreshedDecs$1","_init_successfulChangesRefreshed$1","_AccessControlErrors2","_ref$2","_classPrivateFieldInitSpec$2","_checkPrivateRedeclaration$2","_classPrivateFieldSet$2","_assertClassBrand$2","_classPrivateFieldGet$2","_defineProperty$2","_toPropertyKey$2","_applyDecs$2","_setFunctionName$2","_checkInRHS$2","_toPrimitive$2","_identity$2","_AccessControlErrors","AccessControlModal_styles_default","isAbsoluteHttpUri","url","isOriginUrl","normalizeOriginInput","trimmedValue","parsed","isHttpOrigin","hasOnlyOriginParts","isRecognizedHost","dedupeByKey","uniqueItems","item","items","key","getKey","dedupeComboboxOptions","getSharedAuthorization","iri","getAuthorizationSubjectEntries","iris","getAccessGrantId","subject","getAccessGrantIds","occurrences","authorizations","baseId","occurrence","getAuthorizationSubjectLabel","getAuthorizationRole","createAccessGrantDraft","sharedAuthorization","createAccessGrantDrafts","ids","index","getAccessGrantViewModels","drafts","leftIsOwner","left","rightIsOwner","right","getChangedAccessGrants","initialRole","getAuthenticatedAccessRole","getPublicAccessRole","getAccessSubjectLabel","iconlucidebookuser","iconlucideuserround","iconlucideusers","AccessControlAddAccess_styles_default","_Class$1","_AccessControlAddAccess","_A$1","_B$1","_C$1","_D$1","_E$1","_initProto$1","_initClass$1","_classDecs$1","_principalInputValueDecs$1","_init_principalInputValue$1","_addAccessRoleValueDecs$1","_init_addAccessRoleValue$1","_pendingAccessGrantsDecs$1","_init_pendingAccessGrants$1","_inputErrorDecs","_init_inputError","_asyncOptionsProviderDecs","_init_asyncOptionsProvider","_AccessControlAddAcce2","_ref$1","_classPrivateFieldInitSpec$1","_checkPrivateRedeclaration$1","_classPrivateFieldSet$1","_assertClassBrand$1","_classPrivateFieldGet$1","_defineProperty$1","_toPropertyKey$1","_applyDecs$1","_setFunctionName$1","_checkInRHS$1","_toPrimitive$1","_identity$1","directoryEntryOptionTemplate","renderDirectoryEntryIcon","_AccessControlAddAcce","grant","classifyAccessTarget","normalizedOrigin","principal","resolveAccessTargetLabel","resolvedPrincipal","resolvedLabel","preferredLabel","resolveAccessTarget","createUrlOption","resolved","uri","directoryEntryToOption","labelValue","getPreferredAccessPrincipalOptions","urlOption","getShortQueryOptions","preferredOptions","accessPrincipalOptionsProvider","filter","entries","entryLabel","applyAccessChanges","errors","accessChanges","plan","subjectUri","buildAccessChanges","pendingAccessGrants","generalAccessChanges","changedAccessGrants","_Class","_AccessControlModal3","_A","_B","_C","_D","_E","_F","_G","_H","_I","_J","_K","_initProto","_initClass","_classDecs","_subjectUriDecs","_init_subjectUri","_accessGrantsDecs","_init_accessGrants","_principalInputValueDecs","_init_principalInputValue","_addAccessRoleValueDecs","_init_addAccessRoleValue","_authenticatedAccessRoleValueDecs","_init_authenticatedAccessRoleValue","_publicAccessRoleValueDecs","_init_publicAccessRoleValue","_submittingDecs","_init_submitting","_pendingAccessGrantsDecs","_init_pendingAccessGrants","_accessGrantDraftsDecs","_init_accessGrantDrafts","_errorsDecs","_init_errors","_successfulChangesRefreshedDecs","_init_successfulChangesRefreshed","_AccessControlModal2","_ref","_classPrivateFieldInitSpec","_checkPrivateRedeclaration","_classPrivateFieldSet","_assertClassBrand","_classPrivateFieldGet","_defineProperty","_toPropertyKey","_applyDecs","_setFunctionName","_checkInRHS","_toPrimitive","_identity","isDefined","_AccessControlModal","changedProperties","error$3","requestVersion","grants","labels","groupUri","labelsById","draft","dialogTitle","saveErrors","error$2","currentAuthenticatedRole","currentPublicRole","pendingIndex","rawValue","inputSnapshot","error$1","snapshot","result","merged","normalizedPrincipal","resolvedTarget","draftGrants","draftGrant","access_control_modal_default"],"sources":["../../src/components/access-control-modal/AccessControlSharedAccess.styles.css","../../src/components/access-control-modal/AccessControlSharedAccess.ts","../../src/components/access-control-modal/AccessControlGeneralAccess.styles.css","../../src/components/access-control-modal/AccessControlGeneralAccess.ts","../../src/components/access-control-modal/AccessControlErrors.styles.css","../../src/components/access-control-modal/AccessControlErrors.ts","../../src/components/access-control-modal/AccessControlModal.styles.css","../../src/components/access-control-modal/helpers.ts","../../src/components/access-control-modal/accessGrantDrafts.ts","../../src/components/access-control-modal/AccessControlAddAccess.styles.css","../../src/components/access-control-modal/AccessControlAddAccess.ts","../../src/components/access-control-modal/accessTargetResolver.ts","../../src/components/access-control-modal/applyAccessChanges.ts","../../src/components/access-control-modal/buildAccessChanges.ts","../../src/components/access-control-modal/AccessControlModal.ts","../../src/components/access-control-modal/index.ts"],"sourcesContent":[":host {\n h2 {\n color: var(--solid-ui-color-gray-900, #101828);\n font-size: var(--solid-ui-font-size-md, 1rem);\n font-weight: 600;\n }\n\n .access-grants-header,\n .access-grants-list {\n padding: 0 10px;\n align-self: stretch;\n }\n\n .access-grants-header {\n display: flex;\n align-items: center;\n gap: 15px;\n justify-content: space-between;\n\n .access-grants-search-input {\n flex: 0 0 auto;\n width: 12ch;\n min-width: 12ch;\n --solid-ui-input-border-color: transparent;\n color: var(--solid-ui-color-zinc-500, #71717B);\n font-size: var(--solid-ui-font-size-sm, .875rem);\n font-weight: 500;\n }\n }\n\n .access-grants-list {\n display: flex;\n align-items: flex-start;\n gap: 20px;\n\n ul {\n display: flex;\n flex-direction: column;\n height: 195px;\n padding: 15px;\n align-items: flex-start;\n gap: 15px;\n flex: 1 0 0;\n min-height: 0;\n box-sizing: border-box;\n overflow-y: auto;\n overflow-x: hidden;\n border-radius: 10px;\n border: 1px solid var(--solid-ui-color-gray-200, #E5E7EB);\n }\n\n li {\n display: flex;\n align-items: center;\n gap: 10px;\n flex: 0 0 auto;\n width: 100%;\n\n .access-grants-image {\n display: flex;\n justify-content: center;\n align-items: center;\n aspect-ratio: 1/1;\n width: 30px;\n height: 30px;\n flex: 0 0 30px;\n border-radius: 999px;\n overflow: hidden;\n color: var(--solid-ui-color-white, #FFF);\n text-align: center;\n font-size: var(--solid-ui-font-size-xs, .75rem);\n font-weight: 500;\n\n img {\n display: flex;\n width: 100%;\n height: 100%;\n border-radius: 999px;\n object-fit: cover;\n }\n\n span {\n display: flex;\n width: 100%;\n height: 100%;\n align-items: center;\n justify-content: center;\n line-height: 1;\n }\n }\n\n .access-grants-image--agentGroup {\n background: var(--solid-ui-color-blue-900, #083575);\n }\n\n .access-grants-image--agent,\n .access-grants-image--agentClass {\n background: var(--solid-ui-color-lavender-300, #e6dcff);\n }\n\n .access-grants-image--origin {\n background: var(--solid-ui-color-green-700, #15803D);\n }\n\n .access-grants-image--unknown {\n background: var(--solid-ui-color-gray-300, #D1D5DB);\n }\n\n h3 {\n flex: 1 1 auto;\n min-width: 0;\n color: var(--solid-ui-color-gray-800, #1E2939);\n font-size: var(--solid-ui-font-size-xs, .75rem);\n font-weight: 600;\n }\n\n span {\n margin-left: auto;\n flex: 0 0 auto;\n text-align: right;\n }\n\n .access-grants-role {\n margin-left: auto;\n flex: 0 0 auto;\n font-size: var(--solid-ui-font-size-xs, .75rem);\n }\n\n .access-grants-role--owner {\n font-size: var(--solid-ui-font-size-xs, .75rem);\n }\n\n .access-grants-role--editable {\n max-width: 100%;\n }\n }\n }\n\n .access-role-select--compact {\n width: 110px;\n min-width: 110px;\n flex: 0 0 110px;\n max-width: 100%;\n --solid-ui-input-border-color: transparent;\n margin-top: 0;\n }\n\n .access-grants-list li .access-role-select--compact {\n width: 110px;\n min-width: 110px;\n flex: 0 0 110px;\n }\n}\n","import { customElement, WebComponent } from '@/lib/components'\nimport { html } from 'lit'\nimport { property, state } from 'lit/decorators.js'\nimport { ACCESS_ROLES, type AccessRole } from 'solid-logic'\nimport { findImage } from '@/widgets'\nimport type { ComboboxChangeEvent } from '@/components/combobox'\nimport { sym } from 'rdflib'\n\nimport '@/components/combobox'\nimport '@/components/combobox-option'\n\nimport styles from './AccessControlSharedAccess.styles.css'\nimport type { AccessGrantRoleChangedDetail, AccessGrantViewModel } from './types'\n\n@customElement('solid-ui-access-control-shared-access')\nexport default class AccessControlSharedAccess extends WebComponent {\n static styles = styles\n\n @property({ attribute: false })\n accessor accessGrantViewModels: AccessGrantViewModel[] = []\n\n @state()\n private accessor searchValue = ''\n\n private onSearchInput (event: Event) {\n const target = event.currentTarget as { value?: string | null } | null\n this.searchValue = typeof target?.value === 'string' ? target.value : ''\n }\n\n private onSearchSelect (event: ComboboxChangeEvent) {\n const option = event.detail.option\n if (typeof option.label !== 'string') {\n return\n }\n\n this.searchValue = option.label\n }\n\n private onAccessGrantRoleChange (id: string, event: ComboboxChangeEvent) {\n const value = event.detail.option.value\n if (typeof value !== 'string' || !ACCESS_ROLES.includes(value as AccessRole)) {\n return\n }\n\n const detail: AccessGrantRoleChangedDetail = {\n id,\n role: value as AccessRole\n }\n\n this.dispatchEvent(new CustomEvent<AccessGrantRoleChangedDetail>('access-grant-role-changed', {\n detail,\n bubbles: true,\n composed: true\n }))\n }\n\n private getFilteredAccessGrants () {\n const query = this.searchValue.trim().toLowerCase()\n\n return this.accessGrantViewModels.filter(({ subjectLabel, subjects }) => {\n if (!subjects.length) {\n return false\n }\n\n return !query || subjectLabel.toLowerCase().includes(query)\n })\n }\n\n private renderAccessGrant (entry: AccessGrantViewModel) {\n return html`\n <li>\n ${this.renderAuthorizationBadge(entry.authorization, entry.subjectLabel)}\n <h3>${entry.subjectLabel}</h3>\n ${this.renderAuthorizationRole(entry.role, entry.id)}\n </li>\n `\n }\n\n private renderAuthorizationBadge (authorization: AccessGrantViewModel['authorization'], subjectLabel: string) {\n const badge = this.getAuthorizationBadge(authorization, subjectLabel)\n\n return html`\n <div class=\"access-grants-image access-grants-image--${badge.kind}\">\n ${badge.image\n ? html`<img src=${badge.image} alt=\"\" aria-hidden=\"true\" />`\n : html`<span aria-hidden=\"true\">${badge.text}</span>`}\n </div>\n `\n }\n\n private getAuthorizationBadge (\n authorization: AccessGrantViewModel['authorization'],\n subjectLabel: string\n ) {\n const agent = authorization.agent[0]\n if (agent) {\n const image = findImage(sym(agent))\n return {\n kind: 'agent' as const,\n image,\n text: image ? '' : this.getInitials(subjectLabel, 2)\n }\n }\n\n const agentGroup = authorization.agentGroup[0]\n if (agentGroup) {\n return {\n kind: 'agentGroup' as const,\n text: this.getInitials(subjectLabel, 1)\n }\n }\n\n const agentClass = authorization.agentClass[0]\n if (agentClass) {\n const image = findImage(sym(agentClass))\n return {\n kind: 'agentClass' as const,\n image,\n text: image ? '' : this.getInitials(subjectLabel, 2)\n }\n }\n\n if (authorization.origin[0]) {\n return {\n kind: 'origin' as const,\n text: 'O'\n }\n }\n\n return {\n kind: 'unknown' as const,\n text: '?'\n }\n }\n\n private getInitials (value: string, maxWords = 2): string {\n const parts = value.split(/\\s+/).filter(Boolean).slice(0, maxWords)\n const initials = parts.map(part => part[0]).join('')\n return (initials || value.slice(0, maxWords)).toUpperCase()\n }\n\n private renderAuthorizationRole (role: AccessRole, id: string) {\n return html`\n <solid-ui-combobox\n class=\"access-role-select access-role-select--compact access-grants-role access-grants-role--editable ${role === 'Owner' ? 'access-grants-role--owner' : ''}\"\n .value=${role}\n @change=${(event: ComboboxChangeEvent) => this.onAccessGrantRoleChange(id, event)}\n >\n ${this.renderGrantRoleOptions()}\n </solid-ui-combobox>\n `\n }\n\n private renderGrantRoleOptions () {\n return ACCESS_ROLES.map(role => html`\n <solid-ui-combobox-option value=${role}>${role === 'No Access' ? 'Remove' : role}</solid-ui-combobox-option>\n `)\n }\n\n protected render () {\n const accessGrants = this.getFilteredAccessGrants()\n\n return html`\n <section aria-labelledby=\"access-grants-heading\">\n <div class=\"access-grants-header\">\n <h2 id=\"access-grants-heading\">Share with</h2>\n <solid-ui-combobox\n class=\"access-grants-search-input\"\n label=\"Search access grants\"\n .srOnlyLabel=${true}\n .value=${this.searchValue}\n placeholder=\"Search\"\n @input=${this.onSearchInput}\n @change=${this.onSearchSelect}\n >\n ${this.accessGrantViewModels\n .filter(({ subjects }) => subjects.length > 0)\n .map(({ subjectLabel }) => html`\n <solid-ui-combobox-option .value=${subjectLabel}>\n ${subjectLabel}\n </solid-ui-combobox-option>\n `)}\n </solid-ui-combobox>\n </div>\n <div class=\"access-grants-list\">\n <ul>\n ${accessGrants.length > 0\n ? accessGrants.map(entry => this.renderAccessGrant(entry))\n : html`<li>No access grants</li>`}\n </ul>\n </div>\n </section>\n `\n }\n}\n",":host {\n h2 {\n color: var(--solid-ui-color-gray-900, #101828);\n font-size: var(--solid-ui-font-size-md, 1rem);\n font-weight: 600;\n }\n\n .access-grants-general {\n display: flex;\n flex-direction: column;\n align-items: flex-start;\n gap: 10px;\n padding: 0 10px;\n align-self: stretch;\n\n solid-ui-combobox,\n solid-ui-input {\n --solid-ui-input-border-color: var(--solid-ui-color-slate-200, #E2E8F0);\n }\n\n .access-grants-general-header {\n display: flex;\n flex-direction: row;\n justify-content: space-between;\n align-items: center;\n gap: 15px;\n align-self: stretch;\n\n .access-grants-copy-link-button-label {\n font-size: var(--solid-ui-font-size-xs, .75rem);\n font-weight: 500;\n }\n\n .access-grants-copy-link-button icon-lucide-link {\n width: 12px;\n height: 12px;\n aspect-ratio: 1/1;\n }\n }\n\n .access-grants-general-share {\n display: flex;\n align-items: center;\n gap: 10px;\n align-self: stretch;\n\n .access-grants-general-share-content {\n display: flex;\n flex-direction: row;\n align-items: flex-start;\n gap: 10px;\n flex: 1 0 0;\n\n .access-grants-general-share-icon {\n display: flex;\n width: 30px;\n height: 30px;\n padding: 5px;\n justify-content: center;\n align-items: center;\n aspect-ratio: 1/1;\n border-radius: 50px;\n background: var(--solid-ui-color-violet-50, #F5F3FF);\n }\n\n .access-grants-general-share-icon-inner {\n display: flex;\n width: 20px;\n height: 20px;\n padding: 1.25px;\n justify-content: center;\n align-items: center;\n flex-shrink: 0;\n aspect-ratio: 1/1;\n\n icon-lucide-globe {\n width: 17.5px;\n height: 17.5px;\n flex-shrink: 0;\n aspect-ratio: 1/1;\n }\n }\n\n .access-grants-general-share-text {\n flex: 1 1 auto;\n min-width: 0;\n\n .access-grants-general-share-text-title {\n color: var(--solid-ui-color-gray-900, #101828);\n font-size: var(--solid-ui-font-size-sm, .875rem);\n font-weight: 600;\n }\n\n .access-grants-general-share-text-description {\n color: var(--solid-ui-color-gray-700, #364153);\n font-size: var(--solid-ui-font-size-sm, .875rem);\n }\n }\n }\n }\n }\n\n .access-role-select--general {\n width: 120px;\n min-width: 120px;\n flex: 0 0 120px;\n font-size: var(--solid-ui-font-size-xs, .75rem);\n font-weight: 500;\n }\n\n .access-role-select--compact {\n display: block;\n max-width: 100%;\n --solid-ui-input-border-color: transparent;\n margin-top: 0;\n }\n}\n","import { customElement, WebComponent } from '@/lib/components'\nimport { html } from 'lit'\nimport { property } from 'lit/decorators.js'\nimport { ACCESS_ROLES, PUBLIC_ACCESS_ROLES, type AccessRole } from 'solid-logic'\nimport * as debug from '@/lib/debug'\nimport type { ComboboxChangeEvent } from '@/components/combobox'\n\nimport '~icons/lucide/link'\nimport '~icons/lucide/globe'\nimport '@/components/button'\nimport '@/components/combobox'\nimport '@/components/combobox-option'\n\nimport styles from './AccessControlGeneralAccess.styles.css'\nimport type { RoleChangedDetail } from './types'\n\n@customElement('solid-ui-access-control-general-access')\nexport default class AccessControlGeneralAccess extends WebComponent {\n static styles = styles\n\n @property({ attribute: false })\n accessor subjectUri: string | undefined = undefined\n\n @property({ attribute: false })\n accessor authenticatedAccessRoleValue: AccessRole = 'No Access'\n\n @property({ attribute: false })\n accessor publicAccessRoleValue: AccessRole = 'No Access'\n\n private onAuthenticatedRoleChange (event: ComboboxChangeEvent) {\n this.dispatchRoleChange('authenticated-role-changed', event, ACCESS_ROLES)\n }\n\n private onPublicRoleChange (event: ComboboxChangeEvent) {\n this.dispatchRoleChange('public-role-changed', event, PUBLIC_ACCESS_ROLES)\n }\n\n private dispatchRoleChange (\n eventName: 'authenticated-role-changed' | 'public-role-changed',\n event: ComboboxChangeEvent,\n roles: readonly string[]\n ) {\n const value = event.detail.option.value\n if (typeof value !== 'string' || !roles.includes(value)) {\n return\n }\n\n const detail: RoleChangedDetail = { role: value as AccessRole }\n this.dispatchEvent(new CustomEvent<RoleChangedDetail>(eventName, {\n detail,\n bubbles: true,\n composed: true\n }))\n }\n\n private async onCopyLinkClick (event: Event) {\n event.preventDefault()\n\n if (!this.subjectUri) {\n return\n }\n\n try {\n await navigator.clipboard.writeText(this.subjectUri)\n } catch (error) {\n debug.error('Failed to copy resource link', error)\n }\n }\n\n private renderAuthenticatedRoleOptions () {\n return ACCESS_ROLES.map(role => html`\n <solid-ui-combobox-option value=${role}>${role}</solid-ui-combobox-option>\n `)\n }\n\n private renderPublicRoleOptions () {\n return PUBLIC_ACCESS_ROLES.map(role => html`\n <solid-ui-combobox-option value=${role}>${role}</solid-ui-combobox-option>\n `)\n }\n\n private renderAuthenticatedModeSelector () {\n return html`\n <solid-ui-combobox\n class=\"access-role-select access-role-select--compact access-role-select--general access-grants-role access-grants-role--editable access-role-select--authenticated\"\n .value=${this.authenticatedAccessRoleValue}\n @change=${this.onAuthenticatedRoleChange}\n >\n ${this.renderAuthenticatedRoleOptions()}\n </solid-ui-combobox>\n `\n }\n\n private renderPublicModeSelector () {\n return html`\n <solid-ui-combobox\n class=\"access-role-select access-role-select--compact access-role-select--general access-grants-role access-grants-role--editable access-role-select--public\"\n .value=${this.publicAccessRoleValue}\n @change=${this.onPublicRoleChange}\n >\n ${this.renderPublicRoleOptions()}\n </solid-ui-combobox>\n `\n }\n\n private renderGeneralAccessIcon () {\n return html`\n <div class=\"access-grants-general-share-icon\">\n <div class=\"access-grants-general-share-icon-inner\">\n <icon-lucide-globe class=\"access-grants-general-share-icon-image\"></icon-lucide-globe>\n </div>\n </div>\n `\n }\n\n private renderGeneralShareRow (options: {\n title: string\n description: string\n variant: 'authenticated' | 'public'\n }) {\n return html`\n <div class=\"access-grants-general-share\">\n <div class=\"access-grants-general-share-content\">\n ${this.renderGeneralAccessIcon()}\n <div class=\"access-grants-general-share-text\">\n <p class=\"access-grants-general-share-text-title\">${options.title}</p>\n <p class=\"access-grants-general-share-text-description\">${options.description}</p>\n </div>\n </div>\n ${options.variant === 'authenticated'\n ? this.renderAuthenticatedModeSelector()\n : this.renderPublicModeSelector()}\n </div>\n `\n }\n\n protected render () {\n return html`\n <section class=\"access-grants-general\" aria-labelledby=\"general-access-heading\">\n <div class=\"access-grants-general-header\">\n <h2 id=\"general-access-heading\">General Access</h2>\n <solid-ui-button\n class=\"access-grants-copy-link-button\"\n variant=\"tertiary\"\n @click=${this.onCopyLinkClick}\n >\n <icon-lucide-link slot=\"left-icon\"></icon-lucide-link>\n <span class=\"access-grants-copy-link-button-label\">Copy Link</span>\n </solid-ui-button>\n </div>\n ${this.renderGeneralShareRow({\n title: 'Share with Anyone Signed In',\n description: 'Users must sign in to SolidOS to access this shared item using the link.',\n variant: 'authenticated'\n })}\n ${this.renderGeneralShareRow({\n title: 'Anyone with the Link',\n description: 'Anyone on the internet with the link can view.',\n variant: 'public'\n })}\n </section>\n `\n }\n}\n",":host {\n display: block;\n width: 100%;\n contain: inline-size;\n\n solid-ui-error-state {\n width: 100%;\n max-width: 100%;\n contain: inline-size;\n }\n\n .access-control-save-errors {\n display: grid;\n gap: 8px;\n width: 100%;\n margin: 0;\n padding-left: 0;\n box-sizing: border-box;\n list-style: none;\n\n li {\n display: grid;\n grid-template-columns: minmax(0, 18rem) minmax(0, 1fr);\n align-items: baseline;\n gap: 6px;\n min-width: 0;\n color: var(--solid-ui-color-red-600, #be2e48);\n font-size: var(--solid-ui-font-size-sm, .875rem);\n line-height: 1.4;\n }\n\n .access-control-save-error-label {\n font-weight: 500;\n overflow-wrap: anywhere;\n }\n\n .access-control-save-error-detail {\n min-width: 0;\n overflow-wrap: anywhere;\n }\n }\n\n @media (max-width: 600px) {\n .access-control-save-errors li {\n grid-template-columns: minmax(0, 40%) minmax(0, 1fr);\n }\n }\n}\n","import { customElement, WebComponent } from '@/lib/components'\nimport { html } from 'lit'\nimport { property } from 'lit/decorators.js'\n\nimport '@/components/error-state'\n\nimport styles from './AccessControlErrors.styles.css'\nimport type { AccessSaveError } from './types'\n\n@customElement('solid-ui-access-control-errors')\nexport default class AccessControlErrors extends WebComponent {\n static styles = styles\n\n @property({ attribute: false })\n accessor errors: AccessSaveError[] = []\n\n @property({ attribute: false })\n accessor successfulChangesRefreshed = true\n\n private onClose (event: Event) {\n event.stopPropagation()\n this.dispatchEvent(new CustomEvent('close', {\n bubbles: true,\n composed: true\n }))\n }\n\n protected render () {\n if (!this.errors.length) {\n return html``\n }\n\n return html`\n <solid-ui-error-state\n title=\"Some access changes could not be saved\"\n message=${this.successfulChangesRefreshed\n ? 'Any successful changes are shown above. The list below shows only the changes that failed. Close this dialog and reopen it if you want to try again.'\n : 'Some changes may have been saved, but we could not refresh the Shared with list. The list below shows only the changes that failed. Close this dialog and reopen it if you want to try again.'}\n @close=${this.onClose}\n >\n <ul class=\"access-control-save-errors\">\n ${this.errors.map(error => html`\n <li>\n <span class=\"access-control-save-error-label\">${error.label}</span>\n <span class=\"access-control-save-error-detail\">\n ${error.action === 'grant'\n ? `Could not grant ${error.role ?? 'access'}`\n : error.action === 'revoke'\n ? 'Could not remove access'\n : 'Could not save access changes'}\n </span>\n </li>\n `)}\n </ul>\n </solid-ui-error-state>\n `\n }\n}\n",":host {\n .access-control-footer-actions {\n display: flex;\n justify-content: flex-end;\n align-items: center;\n gap: 15px;\n width: 100%;\n\n > solid-ui-button {\n min-width: 132px;\n }\n }\n\n @media (max-width: 380px) {\n .access-control-footer-actions {\n gap: 8px;\n\n > solid-ui-button {\n min-width: 0;\n flex: 1 1 0;\n }\n }\n }\n}\n","import type { ComboboxOptionData } from '@/components/combobox'\n\nexport type StringComboboxOptionData = ComboboxOptionData & { value: string }\n\nexport function isAbsoluteHttpUri (value: string): boolean {\n try {\n const url = new URL(value)\n return (url.protocol === 'http:' || url.protocol === 'https:') && Boolean(url.hostname)\n } catch {\n return false\n }\n}\n\nexport function isOriginUrl (value: string): boolean {\n if (!isAbsoluteHttpUri(value)) {\n return false\n }\n\n const url = new URL(value)\n return url.pathname === '/' &&\n !url.search &&\n !url.hash &&\n !url.username &&\n !url.password\n}\n\nexport function normalizeOriginInput (value: string): string | undefined {\n const trimmedValue = value.trim()\n if (!trimmedValue || isAbsoluteHttpUri(trimmedValue)) {\n return undefined\n }\n\n try {\n const parsed = new URL(`https://${trimmedValue}`)\n const isHttpOrigin = parsed.protocol === 'http:' || parsed.protocol === 'https:'\n const hasOnlyOriginParts = parsed.pathname === '/' && !parsed.search && !parsed.hash\n const isRecognizedHost = parsed.hostname.includes('.') ||\n parsed.hostname.includes(':')\n\n return isHttpOrigin && hasOnlyOriginParts && isRecognizedHost && !parsed.username && !parsed.password\n ? parsed.origin\n : undefined\n } catch {\n return undefined\n }\n}\n\nexport function dedupeByKey<T> (items: T[], getKey: (item: T) => string | undefined): T[] {\n const uniqueItems = new Map<string, T>()\n\n for (const item of items) {\n const key = getKey(item)\n if (key && !uniqueItems.has(key)) {\n uniqueItems.set(key, item)\n }\n }\n\n return [...uniqueItems.values()]\n}\n\nexport function dedupeComboboxOptions (options: StringComboboxOptionData[]): StringComboboxOptionData[] {\n return dedupeByKey(options, option => option.value)\n}\n","import { label } from '@/utils/label'\nimport { Authenticated, Public, solidLogicSingleton, type AccessRole, type AccessSubject } from 'solid-logic'\nimport { sym } from 'rdflib'\nimport type { AccessAuthorization, AccessGrantDraft, AccessGrantViewModel, AuthorizationSubjectSet, ChangedAccessGrant } from './types'\n\nexport function getSharedAuthorization (authorization: AccessAuthorization): AccessAuthorization {\n return {\n ...authorization,\n agentClass: authorization.agentClass.filter(iri => iri !== Authenticated.iri && iri !== Public.iri)\n }\n}\n\nexport function getAuthorizationSubjectEntries (authorization: AccessAuthorization): AccessSubject[] {\n const subjectSets: AuthorizationSubjectSet[] = [\n { type: 'agent', iris: authorization.agent },\n { type: 'agentGroup', iris: authorization.agentGroup },\n { type: 'agentClass', iris: authorization.agentClass },\n { type: 'origin', iris: authorization.origin }\n ]\n\n return subjectSets.flatMap(({ type, iris }) => iris.map(iri => ({ type, iri })))\n}\n\nexport function getAccessGrantId (authorization: AccessAuthorization): string {\n return getAuthorizationSubjectEntries(authorization)\n .map(subject => `${subject.type}:${subject.iri}`)\n .sort()\n .join('|')\n}\n\nexport function getAccessGrantIds (authorizations: AccessAuthorization[]): string[] {\n const occurrences = new Map<string, number>()\n\n return authorizations.map(authorization => {\n const sharedAuthorization = getSharedAuthorization(authorization)\n const baseId = getAccessGrantId(sharedAuthorization)\n const occurrence = occurrences.get(baseId) ?? 0\n occurrences.set(baseId, occurrence + 1)\n return occurrence === 0 ? baseId : `${baseId}#${occurrence}`\n })\n}\n\nexport function getAuthorizationSubjectLabel (authorization: AccessAuthorization): string {\n const subjects = [\n ...authorization.agent,\n ...authorization.agentGroup,\n ...authorization.agentClass,\n ...authorization.origin\n ]\n return subjects.length ? subjects.map(subject => label(sym(subject))).join(', ') : 'Unknown access holder'\n}\n\nexport function getAuthorizationRole (authorization: AccessAuthorization): AccessRole {\n return solidLogicSingleton.acl.roleFromModes(authorization.mode)\n}\n\nexport function createAccessGrantDraft (authorization: AccessAuthorization): AccessGrantDraft {\n const sharedAuthorization = getSharedAuthorization(authorization)\n return {\n id: getAccessGrantId(sharedAuthorization),\n authorization: sharedAuthorization,\n role: getAuthorizationRole(sharedAuthorization),\n initialRole: getAuthorizationRole(authorization),\n subjectLabel: getAuthorizationSubjectLabel(sharedAuthorization),\n subjects: getAuthorizationSubjectEntries(sharedAuthorization)\n }\n}\n\nexport function createAccessGrantDrafts (authorizations: AccessAuthorization[]): AccessGrantDraft[] {\n const ids = getAccessGrantIds(authorizations)\n return authorizations.map((authorization, index) => ({\n ...createAccessGrantDraft(authorization),\n id: ids[index]\n }))\n}\n\nexport function getAccessGrantViewModels (drafts: AccessGrantDraft[]): AccessGrantViewModel[] {\n return [...drafts]\n .sort((left, right) => {\n const leftIsOwner = left.role === 'Owner'\n const rightIsOwner = right.role === 'Owner'\n\n if (leftIsOwner && !rightIsOwner) return -1\n if (!leftIsOwner && rightIsOwner) return 1\n return drafts.indexOf(left) - drafts.indexOf(right)\n })\n}\n\nexport function getChangedAccessGrants (drafts: AccessGrantDraft[]): ChangedAccessGrant[] {\n return getAccessGrantViewModels(drafts)\n .filter(({ role, initialRole, subjects }) => role !== initialRole && subjects.length > 0)\n .map(({ authorization, subjects, role }) => ({ authorization, subjects, role }))\n}\n\nexport function getAuthenticatedAccessRole (accessGrants: AccessAuthorization[]): AccessRole {\n const authorization = accessGrants.find(item => item.agentClass.includes(Authenticated.iri))\n return authorization ? getAuthorizationRole(authorization) : 'No Access'\n}\n\nexport function getPublicAccessRole (accessGrants: AccessAuthorization[]): AccessRole {\n const authorization = accessGrants.find(item => item.agentClass.includes(Public.iri))\n return authorization ? solidLogicSingleton.acl.publicRoleFromModes(authorization.mode) : 'No Access'\n}\n\nexport function getAccessSubjectLabel (subject: AccessSubject): string {\n if (subject.iri === Authenticated.iri) {\n return 'Authenticated users'\n }\n\n if (subject.iri === Public.iri) {\n return 'Public'\n }\n\n return label(sym(subject.iri)).trim() || subject.iri\n}\n",":host {\n .access-grants-form {\n display: flex;\n flex-direction: column;\n padding: 10px;\n align-items: flex-start;\n gap: 10px;\n align-self: stretch;\n font-size: var(--solid-ui-font-size-sm, .875rem);\n\n --access-role-select-width: 129px;\n\n p {\n color: var(--solid-ui-color-gray-600, #4A5565);\n line-height: 1.5;\n }\n\n .access-grants-form-main {\n display: flex;\n align-items: flex-start;\n gap: 10px;\n align-self: stretch;\n\n .access-grants-input {\n display: flex;\n flex-direction: column;\n flex: 1 1 auto;\n min-width: 0;\n padding: 10px 15px;\n gap: 12px;\n align-items: flex-start;\n border-radius: 5px;\n border: 1px solid var(--solid-ui-color-slate-200, #E2E8F0);\n background: var(--solid-ui-color-white, #FFF);\n\n solid-ui-combobox {\n width: 100%;\n --solid-ui-input-border-color: var(--solid-ui-color-slate-200, #E2E8F0);\n }\n\n .access-principal-error {\n margin: 0;\n color: var(--solid-ui-color-red-700, #B42318);\n font-size: var(--solid-ui-font-size-xs, .75rem);\n line-height: 1.4;\n }\n }\n }\n\n .access-grants-pending {\n display: flex;\n flex-wrap: wrap;\n gap: 8px;\n min-height: 42px;\n align-items: center;\n }\n\n .access-grants-pending-item {\n display: flex;\n padding: 5px 10px;\n align-items: center;\n gap: 6px;\n max-width: 100%;\n border-radius: 5px;\n border: 1px solid var(--solid-ui-color-gray-300, #D1D5DC);\n background: var(--solid-ui-color-gray-50, #F9FAFB);\n color: var(--solid-ui-color-gray-700, #374151);\n }\n\n .access-grants-pending-item-label {\n min-width: 0;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n color: var(--solid-ui-color-gray-500, #6A7282);\n font-size: var(--solid-ui-font-size-xs, .75rem);\n line-height: 1;\n }\n\n .access-grants-pending-item-remove {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n padding: 0;\n border: none;\n border-radius: 999px;\n background: transparent;\n color: var(--solid-ui-color-gray-300, #D1D5DC);\n cursor: pointer;\n\n icon-lucide-circle-x {\n width: 14px;\n height: 14px;\n }\n }\n }\n\n .access-grants-directory-entry {\n display: inline-flex;\n align-items: center;\n gap: 8px;\n line-height: 1;\n }\n\n .access-role-select {\n display: block;\n max-width: 100%;\n margin-top: 25px;\n flex: 0 0 auto;\n width: var(--access-role-select-width);\n --solid-ui-input-border-color: var(--solid-ui-color-slate-200, #E2E8F0);\n }\n\n .access-role-select--top {\n margin-top: 0;\n }\n}\n","import { customElement, WebComponent } from '@/lib/components'\nimport { html, nothing } from 'lit'\nimport { property } from 'lit/decorators.js'\nimport { ACCESS_ROLES, type AccessRole, type DirectoryEntry } from 'solid-logic'\nimport type { AsyncComboboxOptionsProvider, ComboboxChangeEvent } from '@/components/combobox'\n\nimport '~icons/lucide/book-user'\nimport '~icons/lucide/user-round'\nimport '~icons/lucide/users'\nimport '~icons/lucide/circle-x'\nimport '@/components/button'\nimport '@/components/combobox'\nimport '@/components/combobox-option'\n\nimport styles from './AccessControlAddAccess.styles.css'\nimport type { PendingAccessGrant, PendingGrantRemovedDetail, RoleChangedDetail, TargetInputDetail, TargetSelectedDetail } from './types'\n\nexport function directoryEntryOptionTemplate (entry: DirectoryEntry) {\n return html`\n <span class=\"access-grants-directory-entry\">\n ${renderDirectoryEntryIcon(entry)}\n <span>${entry.label}</span>\n </span>\n `\n}\n\nfunction renderDirectoryEntryIcon (entry: DirectoryEntry) {\n if (entry.sources.includes('contacts') || entry.sources.includes('groups')) {\n return html`<icon-lucide-book-user style=\"width: 13px; height: 13px; flex: 0 0 13px;\"></icon-lucide-book-user>`\n }\n\n if (entry.sources.includes('friends')) {\n return html`<icon-lucide-users style=\"width: 13px; height: 13px; flex: 0 0 13px;\"></icon-lucide-users>`\n }\n\n if (entry.sources.includes('catalog')) {\n return html`<icon-lucide-user-round style=\"width: 13px; height: 13px; flex: 0 0 13px;\"></icon-lucide-user-round>`\n }\n\n return nothing\n}\n\n@customElement('solid-ui-access-control-add-access')\nexport default class AccessControlAddAccess extends WebComponent {\n static styles = styles\n\n @property({ attribute: false })\n accessor principalInputValue = ''\n\n @property({ attribute: false })\n accessor addAccessRoleValue: AccessRole = 'Viewer'\n\n @property({ attribute: false })\n accessor pendingAccessGrants: PendingAccessGrant[] = []\n\n @property({ attribute: false })\n accessor inputError = ''\n\n @property({ attribute: false })\n accessor asyncOptionsProvider: AsyncComboboxOptionsProvider | null = null\n\n private onPrincipalInput (event: Event) {\n const value = this.getEventValue(event)\n this.dispatchEvent(new CustomEvent<TargetInputDetail>('target-input', {\n detail: { value },\n bubbles: true,\n composed: true\n }))\n }\n\n private onPrincipalSelect (event: ComboboxChangeEvent) {\n const option = event.detail.option\n if (typeof option.value !== 'string') {\n return\n }\n\n this.dispatchEvent(new CustomEvent<TargetSelectedDetail>('target-selected', {\n detail: {\n value: option.value,\n label: option.label\n },\n bubbles: true,\n composed: true\n }))\n }\n\n private onRoleChange (event: ComboboxChangeEvent) {\n const role = event.detail.option.value\n if (typeof role !== 'string' || !ACCESS_ROLES.includes(role as AccessRole)) {\n return\n }\n\n this.dispatchEvent(new CustomEvent<RoleChangedDetail>('role-changed', {\n detail: { role: role as AccessRole },\n bubbles: true,\n composed: true\n }))\n }\n\n private onPendingGrantRemove (index: number) {\n this.dispatchEvent(new CustomEvent<PendingGrantRemovedDetail>('pending-grant-removed', {\n detail: { index },\n bubbles: true,\n composed: true\n }))\n }\n\n private getEventValue (event: Event): string {\n const target = event.currentTarget as { value?: string | null } | null\n return typeof target?.value === 'string' ? target.value : ''\n }\n\n protected render () {\n return html`\n <section class=\"access-grants-form\" aria-label=\"Add access\">\n <p>Add person, group or software agent URL.</p>\n <div class=\"access-grants-form-main\">\n <div class=\"access-grants-input\">\n <solid-ui-combobox\n class=\"access-principal-combobox\"\n label=\"Add person, group or software agent URL.\"\n .srOnlyLabel=${true}\n .value=${this.principalInputValue}\n placeholder=\"Paste a link or enter a name\"\n .asyncOptionsProvider=${this.asyncOptionsProvider}\n @input=${this.onPrincipalInput}\n @change=${this.onPrincipalSelect}\n ></solid-ui-combobox>\n ${this.inputError\n ? html`<p class=\"access-principal-error\" role=\"alert\">${this.inputError}</p>`\n : nothing}\n ${this.renderPendingAccessGrants()}\n </div>\n <solid-ui-combobox\n class=\"access-role-select access-role-select--top\"\n .value=${this.addAccessRoleValue}\n @change=${this.onRoleChange}\n >\n ${ACCESS_ROLES\n .filter(role => role !== 'No Access')\n .map(role => html`\n <solid-ui-combobox-option value=${role}>${role}</solid-ui-combobox-option>\n `)}\n </solid-ui-combobox>\n </div>\n </section>\n `\n }\n\n private renderPendingAccessGrants () {\n if (!this.pendingAccessGrants.length) {\n return nothing\n }\n\n return html`\n <div class=\"access-grants-pending\">\n ${this.pendingAccessGrants.map((grant, index) => html`\n <div class=\"access-grants-pending-item\">\n <span class=\"access-grants-pending-item-label\">${grant.label}</span>\n <solid-ui-button\n type=\"button\"\n variant=\"ghost\"\n class=\"access-grants-pending-item-remove\"\n @click=${() => this.onPendingGrantRemove(index)}\n >\n <span class=\"sr-only\">Remove ${grant.label}</span>\n <icon-lucide-circle-x slot=\"icon\"></icon-lucide-circle-x>\n </solid-ui-button>\n </div>\n `)}\n </div>\n `\n }\n}\n","import { defineAsyncComboboxOptionsProvider, type AsyncComboboxOptionsProvider, type ComboboxOptionData } from '@/components/combobox'\nimport { directoryEntryOptionTemplate } from './AccessControlAddAccess'\nimport { label } from '@/utils/label'\nimport { DEFAULT_DIRECTORY_SOURCES, solidLogicSingleton, type AccessControlSubjectKind, type DirectoryEntry } from 'solid-logic'\nimport { sym } from 'rdflib'\nimport { dedupeByKey, dedupeComboboxOptions, isAbsoluteHttpUri, isOriginUrl, normalizeOriginInput, type StringComboboxOptionData } from './helpers'\n\nexport type ResolvedAccessTarget = {\n subjectType: AccessControlSubjectKind\n subjectValue: string\n label: string\n}\n\nasync function classifyAccessTarget (principal: string) {\n const normalizedOrigin = normalizeOriginInput(principal)\n return normalizedOrigin\n ? { kind: 'origin' as const, subjectValue: normalizedOrigin }\n : await solidLogicSingleton.acl.classifyAccessControlSubject(principal)\n}\n\nasync function resolveAccessTargetLabel (\n resolvedPrincipal: Awaited<ReturnType<typeof classifyAccessTarget>>,\n preferredLabel?: string\n): Promise<string | undefined> {\n if (!resolvedPrincipal || resolvedPrincipal.kind === 'origin') {\n return resolvedPrincipal?.subjectValue\n }\n\n const subject = sym(resolvedPrincipal.subjectValue)\n await solidLogicSingleton.store.fetcher.load(subject.doc())\n const resolvedLabel = preferredLabel?.trim() || label(subject).trim()\n if (!resolvedLabel || resolvedLabel === resolvedPrincipal.subjectValue) {\n return undefined\n }\n\n return resolvedLabel\n}\n\nexport async function resolveAccessTarget (\n principal: string,\n preferredLabel?: string\n): Promise<ResolvedAccessTarget | undefined> {\n const resolvedPrincipal = await classifyAccessTarget(principal)\n if (!resolvedPrincipal) {\n return undefined\n }\n\n const resolvedLabel = await resolveAccessTargetLabel(resolvedPrincipal, preferredLabel)\n if (!resolvedLabel) {\n return undefined\n }\n\n return {\n subjectType: resolvedPrincipal.kind,\n subjectValue: resolvedPrincipal.subjectValue,\n label: resolvedLabel\n }\n}\n\nasync function createUrlOption (uri: string): Promise<StringComboboxOptionData | undefined> {\n const resolved = await resolveAccessTarget(uri)\n return resolved\n ? { label: resolved.label, value: uri }\n : undefined\n}\n\nfunction directoryEntryToOption (entry: DirectoryEntry, labelValue: string): ComboboxOptionData {\n return {\n label: labelValue,\n value: entry.uri,\n template: directoryEntryOptionTemplate({ ...entry, label: labelValue })\n }\n}\n\nasync function getPreferredAccessPrincipalOptions (query: string): Promise<ComboboxOptionData[]> {\n const normalizedOrigin = normalizeOriginInput(query)\n if (normalizedOrigin) {\n return [{\n label: `Use origin ${normalizedOrigin}`,\n value: normalizedOrigin\n }]\n }\n\n if (!isAbsoluteHttpUri(query)) {\n return []\n }\n\n if (isOriginUrl(query)) {\n return [{\n label: `Use origin ${new URL(query).origin}`,\n value: new URL(query).origin\n }]\n }\n\n const urlOption = await createUrlOption(query)\n return dedupeComboboxOptions(urlOption ? [urlOption] : [])\n}\n\nfunction getShortQueryOptions (preferredOptions: ComboboxOptionData[]): ComboboxOptionData[] {\n if (preferredOptions.length) {\n return preferredOptions\n }\n\n return [{\n label: 'Type at least 2 characters to search',\n value: '',\n selectable: false\n }]\n}\n\nexport const accessPrincipalOptionsProvider: AsyncComboboxOptionsProvider =\n defineAsyncComboboxOptionsProvider(async (filter: string) => {\n const query = filter.trim()\n const preferredOptions = await getPreferredAccessPrincipalOptions(query)\n\n if (query.length < 2) {\n return getShortQueryOptions(preferredOptions)\n }\n\n let entries: DirectoryEntry[] = []\n\n try {\n entries = await solidLogicSingleton.directory.search({\n query,\n sources: DEFAULT_DIRECTORY_SOURCES\n })\n } catch (error) {\n if (!preferredOptions.length) {\n throw error\n }\n }\n\n const verifiedEntries = await Promise.all(entries.map(async entry => {\n try {\n const resolved = await resolveAccessTarget(entry.uri, entry.label)\n return resolved ? { entry, label: resolved.label } : undefined\n } catch {\n return undefined\n }\n }))\n const options = verifiedEntries\n .filter((entry): entry is { entry: DirectoryEntry, label: string } => entry !== undefined)\n .map(({ entry, label: entryLabel }) => directoryEntryToOption(entry, entryLabel))\n return dedupeByKey(\n [...preferredOptions, ...options],\n option => typeof option.value === 'string' ? option.value : undefined\n )\n })\n","import { PUBLIC_ACCESS_ROLES, Public, solidLogicSingleton } from 'solid-logic'\nimport type { AccessChange, AccessSaveError } from './types'\n\nexport async function applyAccessChanges (\n subjectUri: string,\n accessChanges: AccessChange[]\n): Promise<AccessSaveError[]> {\n const errors: AccessSaveError[] = []\n\n for (const { subject, label, role } of accessChanges) {\n try {\n const plan = role === 'No Access'\n ? await solidLogicSingleton.acl.planRevoke(subjectUri, subject)\n : await solidLogicSingleton.acl.planGrant(subjectUri, subject, subject.type === 'agentClass' && subject.iri === Public.iri\n ? solidLogicSingleton.acl.modesFromPublicRole(role as (typeof PUBLIC_ACCESS_ROLES)[number])\n : solidLogicSingleton.acl.modesFromRole(role))\n\n await solidLogicSingleton.acl.applyPlan(plan)\n } catch (error) {\n errors.push({\n action: role === 'No Access' ? 'revoke' : 'grant',\n targetUri: subject.iri,\n label,\n role,\n message: error instanceof Error\n ? error.message\n : 'Unable to apply access change.'\n })\n }\n }\n\n return errors\n}\n","import { getAccessSubjectLabel } from './accessGrantDrafts'\nimport type { AccessChange, ChangedAccessGrant, PendingAccessGrant } from './types'\n\nexport type AccessChangeDrafts = {\n pendingAccessGrants: PendingAccessGrant[]\n generalAccessChanges: AccessChange[]\n changedAccessGrants: ChangedAccessGrant[]\n}\n\nexport function buildAccessChanges ({\n pendingAccessGrants,\n generalAccessChanges,\n changedAccessGrants\n}: AccessChangeDrafts): AccessChange[] {\n return [\n ...pendingAccessGrants.map(grant => ({\n subject: { type: grant.subjectType, iri: grant.subjectValue },\n role: grant.role,\n label: grant.label\n })),\n ...generalAccessChanges,\n ...changedAccessGrants.flatMap(({ subjects, role }) =>\n subjects.map(subject => ({\n subject,\n role,\n label: getAccessSubjectLabel(subject)\n }))\n )\n ]\n}\n","import { customElement, DialogComponent } from '@/lib/components'\nimport { html } from 'lit'\nimport type { PropertyValues } from 'lit'\nimport { property, state } from 'lit/decorators.js'\nimport { label } from '@/utils/label'\nimport * as debug from '@/lib/debug'\nimport { Authenticated, Public, solidLogicSingleton, type AccessRole, type Authorization } from 'solid-logic'\nimport { sym } from 'rdflib'\n\nimport '~icons/lucide/circle-x'\nimport '@/components/dialog'\nimport '@/components/dialog-content'\nimport '@/components/dialog-footer'\nimport '@/components/button'\nimport '@/components/combobox'\nimport '@/components/combobox-option'\nimport './AccessControlSharedAccess'\nimport './AccessControlGeneralAccess'\nimport './AccessControlErrors'\n\nimport styles from './AccessControlModal.styles.css'\nimport type { AccessChange, AccessControlError, AccessGrantDraft, AccessGrantRoleChangedEvent, AccessSaveError, InputAccessControlError, PendingAccessGrant, PendingGrantRemovedEvent, RoleChangedEvent, TargetInputEvent, TargetSelectedEvent } from './types'\nimport { dedupeByKey } from './helpers'\nimport { createAccessGrantDrafts, getAccessGrantIds, getAccessGrantViewModels, getAuthenticatedAccessRole, getAuthorizationSubjectLabel, getChangedAccessGrants, getPublicAccessRole, getSharedAuthorization } from './accessGrantDrafts'\nimport { accessPrincipalOptionsProvider, resolveAccessTarget } from './accessTargetResolver'\nimport { applyAccessChanges } from './applyAccessChanges'\nimport { buildAccessChanges } from './buildAccessChanges'\n\nfunction isDefined<T> (value: T | undefined | null): value is T {\n return value !== undefined && value !== null\n}\n\ntype PendingAccessGrantCreationResult =\n | { grant: PendingAccessGrant }\n | { error: InputAccessControlError }\n\n@customElement('solid-ui-access-control-modal')\nexport default class AccessControlModal extends DialogComponent<void> {\n static styles = styles\n\n @property({ attribute: false })\n accessor subjectUri: string | undefined = undefined\n\n @property({ attribute: false })\n accessor accessGrants: Authorization[] | undefined = undefined\n\n @state()\n private accessor principalInputValue: string = ''\n\n @state()\n private accessor addAccessRoleValue: AccessRole = 'Viewer'\n\n @state()\n private accessor authenticatedAccessRoleValue: AccessRole = 'No Access'\n\n @state()\n private accessor publicAccessRoleValue: AccessRole = 'No Access'\n\n @state()\n private accessor submitting: boolean = false\n\n @state()\n private accessor pendingAccessGrants: PendingAccessGrant[] = []\n\n @state()\n private accessor accessGrantDrafts: AccessGrantDraft[] = []\n\n @state()\n private accessor errors: AccessControlError[] = []\n\n @state()\n private accessor successfulChangesRefreshed = true\n\n private accessGrantLabelRequestVersion = 0\n\n disconnectedCallback (): void {\n this.accessGrantLabelRequestVersion++\n this.errors = []\n super.disconnectedCallback()\n }\n\n private get inputError (): string {\n return this.errors.find(error => error.action === 'input')?.message ?? ''\n }\n\n private get saveErrors (): AccessSaveError[] {\n return this.errors.filter((error): error is AccessSaveError => error.action !== 'input')\n }\n\n private setInputError (error: InputAccessControlError) {\n this.errors = [\n ...this.errors.filter(item => item.action !== 'input'),\n error\n ]\n }\n\n private clearInputError () {\n this.errors = this.errors.filter(error => error.action !== 'input')\n }\n\n protected willUpdate (changedProperties: PropertyValues<this>) {\n super.willUpdate(changedProperties)\n\n if (changedProperties.has('accessGrants')) {\n const accessGrants = this.accessGrants ?? []\n this.accessGrantDrafts = createAccessGrantDrafts(accessGrants)\n this.authenticatedAccessRoleValue = getAuthenticatedAccessRole(accessGrants)\n this.publicAccessRoleValue = getPublicAccessRole(accessGrants)\n }\n }\n\n protected updated (changedProperties: PropertyValues<this>) {\n super.updated(changedProperties)\n\n if (changedProperties.has('accessGrants')) {\n this.refreshAccessGrantLabels().catch((error: unknown) => {\n debug.error('Failed to refresh access grant labels', error)\n })\n }\n }\n\n private async refreshAccessGrantLabels () {\n const requestVersion = ++this.accessGrantLabelRequestVersion\n const grants = this.accessGrants ?? []\n if (!grants.length) {\n this.accessGrantDrafts = []\n return\n }\n\n const labels = await Promise.all(grants.map(async authorization => {\n await Promise.all(authorization.agentGroup.map(async groupUri => {\n try {\n await solidLogicSingleton.store.fetcher.load(sym(groupUri).doc())\n } catch {\n // Keep the fallback label if the group document cannot be loaded.\n }\n }))\n\n return getAuthorizationSubjectLabel(getSharedAuthorization(authorization))\n }))\n\n if (requestVersion === this.accessGrantLabelRequestVersion && this.accessGrants === grants) {\n const labelsById = new Map(getAccessGrantIds(grants).map((id, index) => [id, labels[index]]))\n this.accessGrantDrafts = this.accessGrantDrafts.map(draft => ({\n ...draft,\n subjectLabel: labelsById.get(draft.id) ?? draft.subjectLabel\n }))\n }\n }\n\n private getDialogTitle (): string {\n const subject = this.subjectUri ? sym(this.subjectUri) : undefined\n const subjectLabel = subject ? label(subject).trim() : ''\n\n if (!subjectLabel || subjectLabel === 'this resource') {\n return 'Share this resource'\n }\n\n return `Share \"${subjectLabel}\"`\n }\n\n protected render () {\n const dialogTitle = this.getDialogTitle()\n\n return html`\n <solid-ui-dialog title=${dialogTitle}>\n <form @submit=${this.onSubmit}>\n <solid-ui-dialog-content>\n <solid-ui-access-control-add-access\n .principalInputValue=${this.principalInputValue}\n .addAccessRoleValue=${this.addAccessRoleValue}\n .pendingAccessGrants=${this.pendingAccessGrants}\n .inputError=${this.inputError}\n .asyncOptionsProvider=${accessPrincipalOptionsProvider}\n @target-input=${this.onPrincipalInput}\n @target-selected=${this.onPrincipalSelect}\n @role-changed=${this.onAddAccessRoleInput}\n @pending-grant-removed=${this.onPendingGrantRemoved}\n ></solid-ui-access-control-add-access>\n <solid-ui-access-control-shared-access\n .accessGrantViewModels=${getAccessGrantViewModels(this.accessGrantDrafts)}\n @access-grant-role-changed=${this.onAccessGrantRoleInput}\n ></solid-ui-access-control-shared-access>\n <solid-ui-access-control-general-access\n .subjectUri=${this.subjectUri}\n .authenticatedAccessRoleValue=${this.authenticatedAccessRoleValue}\n .publicAccessRoleValue=${this.publicAccessRoleValue}\n @authenticated-role-changed=${this.onAuthenticatedAccessRoleInput}\n @public-role-changed=${this.onPublicAccessRoleInput}\n ></solid-ui-access-control-general-access>\n <solid-ui-access-control-errors\n .errors=${this.saveErrors}\n .successfulChangesRefreshed=${this.successfulChangesRefreshed}\n @close=${this.onCancelClick}\n ></solid-ui-access-control-errors>\n </solid-ui-dialog-content>\n\n <solid-ui-dialog-footer>\n <div class=\"access-control-footer-actions\">\n <solid-ui-button\n variant=\"secondary\"\n @click=${this.onCancelClick}\n >\n Cancel\n </solid-ui-button>\n <solid-ui-button\n ?disabled=${!this.hasUnsavedChanges() || this.submitting || this.saveErrors.length > 0}\n ?loading=${this.submitting}\n type=\"button\"\n @click=${this.onSaveClick}\n >\n Save Changes\n </solid-ui-button>\n </div>\n </solid-ui-dialog-footer>\n </form>\n </solid-ui-dialog>\n `\n }\n\n private async onSubmit (e: Event) {\n e.preventDefault()\n\n if (this.submitting) {\n return\n }\n\n await this.commitPrincipalFromInputSafely()\n }\n\n private async onSaveClick () {\n if (this.submitting) {\n return\n }\n\n if (this.principalInputValue.trim()) {\n const committed = await this.commitPrincipalFromInputSafely()\n\n if (!committed) {\n return\n }\n }\n\n await this.saveAccessChanges()\n }\n\n private onCancelClick () {\n this.close()\n }\n\n private async saveAccessChanges () {\n if (this.submitting) {\n return\n }\n\n const changedAccessGrants = getChangedAccessGrants(this.accessGrantDrafts)\n const generalAccessChanges = this.getGeneralAccessChanges()\n\n if (!this.pendingAccessGrants.length && !changedAccessGrants.length && !generalAccessChanges.length) {\n return\n }\n\n if (!this.subjectUri) {\n return\n }\n\n this.submitting = true\n this.errors = this.errors.filter(error => error.action === 'input')\n this.successfulChangesRefreshed = true\n\n try {\n const accessChanges = buildAccessChanges({\n pendingAccessGrants: this.pendingAccessGrants,\n generalAccessChanges,\n changedAccessGrants\n })\n\n const saveErrors = await applyAccessChanges(this.subjectUri, accessChanges)\n if (saveErrors.length) {\n this.errors = [...this.errors, ...saveErrors]\n this.principalInputValue = ''\n this.pendingAccessGrants = []\n\n try {\n this.accessGrants = await solidLogicSingleton.acl.findAccessGrants(this.subjectUri)\n } catch (error) {\n this.successfulChangesRefreshed = false\n this.errors = [\n ...this.errors,\n {\n action: 'save',\n targetUri: this.subjectUri,\n label: 'Shared with list',\n message: error instanceof Error\n ? error.message\n : 'Unable to refresh the access list.'\n }\n ]\n debug.error('Failed to refresh access grants after save errors', error)\n }\n\n debug.error('Failed to save some access changes', saveErrors)\n return\n }\n\n this.principalInputValue = ''\n this.pendingAccessGrants = []\n this.close()\n } catch (error) {\n this.errors = [\n ...this.errors,\n {\n action: 'save',\n targetUri: this.subjectUri ?? '',\n label: 'Access changes',\n message: error instanceof Error\n ? error.message\n : 'Unexpected error while saving access changes.'\n }\n ]\n } finally {\n this.submitting = false\n }\n }\n\n private onPrincipalInput (event: TargetInputEvent) {\n this.principalInputValue = event.detail.value\n this.clearInputError()\n }\n\n private onPrincipalSelect (event: TargetSelectedEvent) {\n this.queuePendingPrincipal(event.detail.value, this.addAccessRoleValue, event.detail.label)\n }\n\n private getGeneralAccessChanges (): AccessChange[] {\n if (!this.subjectUri) {\n return []\n }\n\n const accessGrants = this.accessGrants ?? []\n const currentAuthenticatedRole = getAuthenticatedAccessRole(accessGrants)\n const currentPublicRole = getPublicAccessRole(accessGrants)\n\n const authenticatedChange = this.authenticatedAccessRoleValue === currentAuthenticatedRole\n ? undefined\n : {\n subject: Authenticated,\n role: this.authenticatedAccessRoleValue,\n label: 'Authenticated users'\n }\n\n const publicChange = this.publicAccessRoleValue === currentPublicRole\n ? undefined\n : {\n subject: Public,\n role: this.publicAccessRoleValue,\n label: 'Public'\n }\n\n return [authenticatedChange, publicChange].filter(isDefined)\n }\n\n private onAddAccessRoleInput (event: RoleChangedEvent) {\n this.addAccessRoleValue = event.detail.role\n this.pendingAccessGrants = this.pendingAccessGrants.map(grant => ({\n ...grant,\n role: event.detail.role\n }))\n }\n\n private onAuthenticatedAccessRoleInput (event: RoleChangedEvent) {\n this.authenticatedAccessRoleValue = event.detail.role\n }\n\n private onPublicAccessRoleInput (event: RoleChangedEvent) {\n this.publicAccessRoleValue = event.detail.role\n }\n\n private onAccessGrantRoleInput (event: AccessGrantRoleChangedEvent) {\n this.accessGrantDrafts = this.accessGrantDrafts.map(draft =>\n draft.id === event.detail.id\n ? { ...draft, role: event.detail.role }\n : draft\n )\n }\n\n private onPendingGrantRemoved (event: PendingGrantRemovedEvent) {\n this.pendingAccessGrants = this.pendingAccessGrants.filter((_, pendingIndex) => pendingIndex !== event.detail.index)\n }\n\n private hasUnsavedChanges (): boolean {\n return Boolean(\n this.pendingAccessGrants.length ||\n this.principalInputValue.trim() ||\n getChangedAccessGrants(this.accessGrantDrafts).length ||\n this.getGeneralAccessChanges().length\n )\n }\n\n private async commitPrincipalFromInput (): Promise<boolean> {\n const rawValue = this.principalInputValue.trim()\n if (!rawValue) {\n return false\n }\n\n return this.queuePendingPrincipal(rawValue, this.addAccessRoleValue, undefined, rawValue)\n }\n\n private async commitPrincipalFromInputSafely (): Promise<boolean> {\n const inputSnapshot = this.principalInputValue.trim()\n\n try {\n return await this.commitPrincipalFromInput()\n } catch (error) {\n if (this.principalInputValue.trim() !== inputSnapshot) {\n debug.error('Ignored stale access-target validation error', error)\n return false\n }\n\n this.setInputError({\n action: 'input',\n label: 'Access target',\n targetUri: this.principalInputValue.trim(),\n message: 'We could not verify this access target. Check the value and try again.'\n })\n debug.error('Failed to commit pending access grants', error)\n return false\n }\n }\n\n private async queuePendingPrincipal (\n principal: string,\n role: AccessRole = this.addAccessRoleValue,\n preferredLabel?: string,\n inputSnapshot?: string\n ): Promise<boolean> {\n const snapshot = inputSnapshot ?? this.principalInputValue.trim()\n const result = await this.createPendingAccessGrant(principal, role, preferredLabel)\n\n if ('error' in result) {\n if (this.principalInputValue.trim() === snapshot) {\n this.setInputError(result.error)\n }\n debug.error('Failed to add access grant:', result.error.message)\n return false\n }\n\n const merged = [...this.pendingAccessGrants, result.grant]\n this.pendingAccessGrants = this.dedupePendingAccessGrants(merged)\n\n if (this.principalInputValue.trim() === snapshot) {\n this.clearInputError()\n this.principalInputValue = ''\n }\n\n return true\n }\n\n private async createPendingAccessGrant (\n principal: string,\n role: AccessRole = this.addAccessRoleValue,\n preferredLabel?: string\n ): Promise<PendingAccessGrantCreationResult> {\n try {\n const normalizedPrincipal = principal.trim()\n const resolvedTarget = await resolveAccessTarget(normalizedPrincipal, preferredLabel)\n if (!resolvedTarget) {\n return {\n error: {\n action: 'input',\n label: 'Access target',\n targetUri: normalizedPrincipal,\n message: 'Could not verify this access target'\n }\n }\n }\n\n return {\n grant: {\n subjectType: resolvedTarget.subjectType,\n subjectValue: resolvedTarget.subjectValue,\n role,\n label: resolvedTarget.label\n }\n }\n } catch (error) {\n return {\n error: {\n action: 'input',\n label: 'Access target',\n targetUri: principal,\n message: error instanceof Error && error.message.trim()\n ? error.message\n : 'Could not verify this access target'\n }\n }\n }\n }\n\n private dedupePendingAccessGrants (draftGrants: PendingAccessGrant[]): PendingAccessGrant[] {\n return dedupeByKey(draftGrants, draftGrant => `${draftGrant.subjectType}:${draftGrant.subjectValue}`)\n }\n}\n","import AccessControlModal from './AccessControlModal'\n\nexport { AccessControlModal }\nexport default AccessControlModal\n"],"mappings":"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"}
1
+ {"version":3,"file":"access-control-modal-eOv2-U27.js","names":["customElement","WebComponent","html","property","state","ACCESS_ROLES","findImage","sym","styles","_classDecs","_AccessControlSharedA","_AccessControlSharedA2","_A","WeakMap","_B","_ref","_accessGrantViewModelsDecs","attribute","_searchValueDecs","_AccessControlSharedAccess","AccessControlSharedAccess","constructor","args","_classPrivateFieldInitSpec","_initProto","_init_accessGrantViewModels","_init_searchValue","_classPrivateFieldGet","accessGrantViewModels","v","_classPrivateFieldSet","searchValue","onSearchInput","event","target","currentTarget","value","onSearchSelect","option","detail","label","onAccessGrantRoleChange","id","includes","role","dispatchEvent","CustomEvent","bubbles","composed","getFilteredAccessGrants","query","trim","toLowerCase","filter","subjectLabel","subjects","length","renderAccessGrant","entry","renderAuthorizationBadge","authorization","renderAuthorizationRole","badge","getAuthorizationBadge","kind","image","text","agent","getInitials","agentGroup","agentClass","origin","maxWords","parts","split","Boolean","slice","initials","map","part","join","toUpperCase","renderGrantRoleOptions","render","accessGrants","e","c","_initClass","_applyDecs","_Class","_identity","_defineProperty","default","_Class","_A","_B","_initProto","_initClass","_classDecs","_ref","_classPrivateFieldInitSpec","_checkPrivateRedeclaration","_classPrivateFieldSet","_assertClassBrand","_classPrivateFieldGet","_defineProperty","_toPropertyKey","_applyDecs","_setFunctionName","_checkInRHS","_toPrimitive","_identity","property","state","ACCESS_ROLES","sym","styles","customElement","WebComponent","html","property","ACCESS_ROLES","PUBLIC_ACCESS_ROLES","debug","styles","_classDecs","_AccessControlGeneral","_AccessControlGeneral2","_A","WeakMap","_B","_C","_ref","_subjectUriDecs","attribute","_authenticatedAccessRoleValueDecs","_publicAccessRoleValueDecs","_AccessControlGeneralAccess","AccessControlGeneralAccess","constructor","args","_classPrivateFieldInitSpec","_initProto","_init_subjectUri","undefined","_init_authenticatedAccessRoleValue","_init_publicAccessRoleValue","_classPrivateFieldGet","subjectUri","v","_classPrivateFieldSet","authenticatedAccessRoleValue","publicAccessRoleValue","onAuthenticatedRoleChange","event","dispatchRoleChange","onPublicRoleChange","eventName","roles","value","detail","option","includes","role","dispatchEvent","CustomEvent","bubbles","composed","onCopyLinkClick","preventDefault","navigator","clipboard","writeText","error","renderAuthenticatedRoleOptions","map","renderPublicRoleOptions","renderAuthenticatedModeSelector","renderPublicModeSelector","renderGeneralAccessIcon","renderGeneralShareRow","options","title","description","variant","render","e","c","_initClass","_applyDecs","_Class","_identity","_defineProperty","default","_Class","_A","_B","_C","_initProto","_initClass","_classDecs","_subjectUriDecs","_init_subjectUri","_authenticatedAccessRoleValueDecs","_init_authenticatedAccessRoleValue","_publicAccessRoleValueDecs","_init_publicAccessRoleValue","_ref","_classPrivateFieldInitSpec","_checkPrivateRedeclaration","_classPrivateFieldSet","_assertClassBrand","_classPrivateFieldGet","_defineProperty","_toPropertyKey","_applyDecs","_setFunctionName","_checkInRHS","_toPrimitive","_identity","property","ACCESS_ROLES","PUBLIC_ACCESS_ROLES","error","styles","customElement","WebComponent","html","property","styles","_classDecs","_AccessControlErrors","_AccessControlErrors2","_A","WeakMap","_B","_ref","_errorsDecs","attribute","_successfulChangesRefreshedDecs","_AccessControlErrors3","AccessControlErrors","constructor","args","_classPrivateFieldInitSpec","_initProto","_init_errors","_init_successfulChangesRefreshed","_classPrivateFieldGet","errors","v","_classPrivateFieldSet","successfulChangesRefreshed","onClose","event","stopPropagation","dispatchEvent","CustomEvent","bubbles","composed","render","length","map","error","label","action","role","e","c","_initClass","_applyDecs","_Class","_identity","_defineProperty","default","_Class","_A","_B","_initProto","_initClass","_classDecs","_errorsDecs","_init_errors","_successfulChangesRefreshedDecs","_init_successfulChangesRefreshed","_ref","_classPrivateFieldInitSpec","_checkPrivateRedeclaration","_classPrivateFieldSet","_assertClassBrand","_classPrivateFieldGet","_defineProperty","_toPropertyKey","_applyDecs","_setFunctionName","_checkInRHS","_toPrimitive","_identity","property","styles","isAbsoluteHttpUri","value","url","URL","protocol","Boolean","hostname","isOriginUrl","pathname","search","hash","username","password","normalizeOriginInput","trimmedValue","trim","undefined","parsed","isHttpOrigin","hasOnlyOriginParts","isRecognizedHost","includes","origin","dedupeByKey","items","getKey","uniqueItems","Map","item","key","has","set","values","dedupeComboboxOptions","options","option","label","Authenticated","Public","solidLogicSingleton","sym","getSharedAuthorization","authorization","agentClass","filter","iri","getAuthorizationSubjectEntries","subjectSets","type","iris","agent","agentGroup","origin","flatMap","map","getAccessGrantId","subject","sort","join","getAccessGrantIds","authorizations","occurrences","Map","sharedAuthorization","baseId","occurrence","get","set","getAuthorizationSubjectLabel","subjects","length","getAuthorizationRole","acl","roleFromModes","mode","createAccessGrantDraft","id","role","initialRole","subjectLabel","createAccessGrantDrafts","ids","index","getAccessGrantViewModels","drafts","left","right","leftIsOwner","rightIsOwner","indexOf","getChangedAccessGrants","getAuthenticatedAccessRole","accessGrants","find","item","includes","getPublicAccessRole","publicRoleFromModes","getAccessSubjectLabel","trim","sym","solidLogicSingleton","customElement","WebComponent","html","nothing","property","ACCESS_ROLES","styles","directoryEntryOptionTemplate","entry","renderDirectoryEntryIcon","label","sources","includes","_classDecs","_AccessControlAddAcce","_AccessControlAddAcce2","_A","WeakMap","_B","_C","_D","_E","_ref","_principalInputValueDecs","attribute","_addAccessRoleValueDecs","_pendingAccessGrantsDecs","_inputErrorDecs","_asyncOptionsProviderDecs","_AccessControlAddAccess","AccessControlAddAccess","constructor","args","_classPrivateFieldInitSpec","_initProto","_init_principalInputValue","_init_addAccessRoleValue","_init_pendingAccessGrants","_init_inputError","_init_asyncOptionsProvider","_classPrivateFieldGet","principalInputValue","v","_classPrivateFieldSet","addAccessRoleValue","pendingAccessGrants","inputError","asyncOptionsProvider","onPrincipalInput","event","value","getEventValue","dispatchEvent","CustomEvent","detail","bubbles","composed","onPrincipalSelect","option","onRoleChange","role","onPendingGrantRemove","index","target","currentTarget","render","renderPendingAccessGrants","filter","map","length","grant","e","c","_initClass","_applyDecs","_Class","_identity","_defineProperty","default","_Class","_A","_B","_C","_D","_E","_initProto","_initClass","_classDecs","_principalInputValueDecs","_init_principalInputValue","_addAccessRoleValueDecs","_init_addAccessRoleValue","_pendingAccessGrantsDecs","_init_pendingAccessGrants","_ref","_classPrivateFieldInitSpec","_checkPrivateRedeclaration","_classPrivateFieldSet","_assertClassBrand","_classPrivateFieldGet","_defineProperty","_toPropertyKey","_applyDecs","_setFunctionName","_checkInRHS","_toPrimitive","_identity","nothing","property","ACCESS_ROLES","styles","defineAsyncComboboxOptionsProvider","directoryEntryOptionTemplate","label","DEFAULT_DIRECTORY_SOURCES","solidLogicSingleton","sym","dedupeByKey","dedupeComboboxOptions","isAbsoluteHttpUri","isOriginUrl","normalizeOriginInput","classifyAccessTarget","principal","normalizedOrigin","kind","subjectValue","acl","classifyAccessControlSubject","resolveAccessTargetLabel","resolvedPrincipal","preferredLabel","subject","store","fetcher","load","doc","resolvedLabel","trim","undefined","resolveAccessTarget","subjectType","createUrlOption","uri","resolved","value","directoryEntryToOption","entry","labelValue","template","getPreferredAccessPrincipalOptions","query","URL","origin","urlOption","getShortQueryOptions","preferredOptions","length","selectable","accessPrincipalOptionsProvider","filter","entries","directory","search","sources","error","verifiedEntries","Promise","all","map","options","entryLabel","option","solidLogicSingleton","sym","DEFAULT_DIRECTORY_SOURCES","Public","solidLogicSingleton","applyAccessChanges","subjectUri","accessChanges","errors","subject","label","role","plan","acl","planRevoke","planGrant","type","iri","modesFromPublicRole","modesFromRole","applyPlan","error","push","action","targetUri","message","Error","solidLogicSingleton","getAccessSubjectLabel","buildAccessChanges","pendingAccessGrants","generalAccessChanges","changedAccessGrants","map","grant","subject","type","subjectType","iri","subjectValue","role","label","flatMap","subjects","customElement","DialogComponent","html","property","state","label","debug","Authenticated","Public","solidLogicSingleton","sym","styles","dedupeByKey","createAccessGrantDrafts","getAccessGrantIds","getAccessGrantViewModels","getAuthenticatedAccessRole","getAuthorizationSubjectLabel","getChangedAccessGrants","getPublicAccessRole","getSharedAuthorization","accessPrincipalOptionsProvider","resolveAccessTarget","applyAccessChanges","buildAccessChanges","isDefined","value","undefined","_classDecs","_AccessControlModal","_AccessControlModal2","_A","WeakMap","_B","_C","_D","_E","_F","_G","_H","_I","_J","_K","_ref","_subjectUriDecs","attribute","_accessGrantsDecs","_principalInputValueDecs","_addAccessRoleValueDecs","_authenticatedAccessRoleValueDecs","_publicAccessRoleValueDecs","_submittingDecs","_pendingAccessGrantsDecs","_accessGrantDraftsDecs","_errorsDecs","_successfulChangesRefreshedDecs","_AccessControlModal3","AccessControlModal","constructor","args","_classPrivateFieldInitSpec","_initProto","_init_subjectUri","_init_accessGrants","_init_principalInputValue","_init_addAccessRoleValue","_init_authenticatedAccessRoleValue","_init_publicAccessRoleValue","_init_submitting","_init_pendingAccessGrants","_init_accessGrantDrafts","_init_errors","_init_successfulChangesRefreshed","_defineProperty","_classPrivateFieldGet","subjectUri","v","_classPrivateFieldSet","accessGrants","principalInputValue","addAccessRoleValue","authenticatedAccessRoleValue","publicAccessRoleValue","submitting","pendingAccessGrants","accessGrantDrafts","errors","successfulChangesRefreshed","disconnectedCallback","accessGrantLabelRequestVersion","inputError","find","error","action","message","saveErrors","filter","setInputError","item","clearInputError","willUpdate","changedProperties","has","updated","refreshAccessGrantLabels","catch","requestVersion","grants","length","labels","Promise","all","map","authorization","agentGroup","groupUri","store","fetcher","load","doc","labelsById","Map","id","index","draft","subjectLabel","get","getDialogTitle","subject","trim","render","dialogTitle","onSubmit","onPrincipalInput","onPrincipalSelect","onAddAccessRoleInput","onPendingGrantRemoved","onAccessGrantRoleInput","onAuthenticatedAccessRoleInput","onPublicAccessRoleInput","onCancelClick","hasUnsavedChanges","onSaveClick","e","preventDefault","commitPrincipalFromInputSafely","committed","saveAccessChanges","close","changedAccessGrants","generalAccessChanges","getGeneralAccessChanges","accessChanges","acl","findAccessGrants","targetUri","Error","event","detail","queuePendingPrincipal","currentAuthenticatedRole","currentPublicRole","authenticatedChange","role","publicChange","grant","_","pendingIndex","Boolean","commitPrincipalFromInput","rawValue","inputSnapshot","principal","preferredLabel","snapshot","result","createPendingAccessGrant","merged","dedupePendingAccessGrants","normalizedPrincipal","resolvedTarget","subjectType","subjectValue","draftGrants","draftGrant","c","_initClass","_applyDecs","_Class","_identity","default","property","state","error","solidLogicSingleton","sym","styles","AccessControlModal","AccessControlModal","namedNode","Authenticated","c$1","h","g","c","Public","label","error","findImage","DialogComponent","A","customElement","n","WebComponent","i","b","defineAsyncComboboxOptionsProvider","iconlucidecirclex","AccessControlSharedAccess_styles_default","_Class$4","_AccessControlSharedAccess","_A$4","_B$4","_initProto$4","_initClass$4","_classDecs$4","_accessGrantViewModelsDecs","_init_accessGrantViewModels","_searchValueDecs","_init_searchValue","_AccessControlSharedA2","_ref$4","_classPrivateFieldInitSpec$4","a","_checkPrivateRedeclaration$4","_classPrivateFieldSet$4","s","_assertClassBrand$4","r","_classPrivateFieldGet$4","_defineProperty$4","_toPropertyKey$4","t","_applyDecs$4","o","applyDec","m","y","v","u","w","S","d","p","_setFunctionName$4","P","j","D","I","F","l","f","N","_checkInRHS$4","_toPrimitive$4","e","_identity$4","_AccessControlSharedA","args","target","event","option","value","detail","query","subjects","subjectLabel","entry","badge","authorization","agent","image","agentClass","maxWords","part","role","id","accessGrants","iconlucidelink","iconlucideglobe","AccessControlGeneralAccess_styles_default","_Class$3","_AccessControlGeneralAccess","_A$3","_B$3","_C$2","_initProto$3","_initClass$3","_classDecs$3","_subjectUriDecs$1","_init_subjectUri$1","_authenticatedAccessRoleValueDecs$1","_init_authenticatedAccessRoleValue$1","_publicAccessRoleValueDecs$1","_init_publicAccessRoleValue$1","_AccessControlGeneral2","_ref$3","_classPrivateFieldInitSpec$3","_checkPrivateRedeclaration$3","_classPrivateFieldSet$3","_assertClassBrand$3","_classPrivateFieldGet$3","_defineProperty$3","_toPropertyKey$3","_applyDecs$3","_setFunctionName$3","_checkInRHS$3","_toPrimitive$3","_identity$3","_AccessControlGeneral","roles","eventName","error$4","options","AccessControlErrors_styles_default","_Class$2","_AccessControlErrors3","_A$2","_B$2","_initProto$2","_initClass$2","_classDecs$2","_errorsDecs$1","_init_errors$1","_successfulChangesRefreshedDecs$1","_init_successfulChangesRefreshed$1","_AccessControlErrors2","_ref$2","_classPrivateFieldInitSpec$2","_checkPrivateRedeclaration$2","_classPrivateFieldSet$2","_assertClassBrand$2","_classPrivateFieldGet$2","_defineProperty$2","_toPropertyKey$2","_applyDecs$2","_setFunctionName$2","_checkInRHS$2","_toPrimitive$2","_identity$2","_AccessControlErrors","AccessControlModal_styles_default","isAbsoluteHttpUri","url","isOriginUrl","normalizeOriginInput","trimmedValue","parsed","isHttpOrigin","hasOnlyOriginParts","isRecognizedHost","dedupeByKey","uniqueItems","item","items","key","getKey","dedupeComboboxOptions","getSharedAuthorization","iri","getAuthorizationSubjectEntries","iris","getAccessGrantId","subject","getAccessGrantIds","occurrences","authorizations","baseId","occurrence","getAuthorizationSubjectLabel","getAuthorizationRole","createAccessGrantDraft","sharedAuthorization","createAccessGrantDrafts","ids","index","getAccessGrantViewModels","drafts","leftIsOwner","left","rightIsOwner","right","getChangedAccessGrants","initialRole","getAuthenticatedAccessRole","getPublicAccessRole","getAccessSubjectLabel","iconlucidebookuser","iconlucideuserround","iconlucideusers","AccessControlAddAccess_styles_default","_Class$1","_AccessControlAddAccess","_A$1","_B$1","_C$1","_D$1","_E$1","_initProto$1","_initClass$1","_classDecs$1","_principalInputValueDecs$1","_init_principalInputValue$1","_addAccessRoleValueDecs$1","_init_addAccessRoleValue$1","_pendingAccessGrantsDecs$1","_init_pendingAccessGrants$1","_inputErrorDecs","_init_inputError","_asyncOptionsProviderDecs","_init_asyncOptionsProvider","_AccessControlAddAcce2","_ref$1","_classPrivateFieldInitSpec$1","_checkPrivateRedeclaration$1","_classPrivateFieldSet$1","_assertClassBrand$1","_classPrivateFieldGet$1","_defineProperty$1","_toPropertyKey$1","_applyDecs$1","_setFunctionName$1","_checkInRHS$1","_toPrimitive$1","_identity$1","directoryEntryOptionTemplate","renderDirectoryEntryIcon","_AccessControlAddAcce","grant","classifyAccessTarget","normalizedOrigin","principal","resolveAccessTargetLabel","resolvedPrincipal","resolvedLabel","preferredLabel","resolveAccessTarget","createUrlOption","resolved","uri","directoryEntryToOption","labelValue","getPreferredAccessPrincipalOptions","urlOption","getShortQueryOptions","preferredOptions","accessPrincipalOptionsProvider","filter","entries","entryLabel","applyAccessChanges","errors","accessChanges","plan","subjectUri","buildAccessChanges","pendingAccessGrants","generalAccessChanges","changedAccessGrants","_Class","_AccessControlModal3","_A","_B","_C","_D","_E","_F","_G","_H","_I","_J","_K","_initProto","_initClass","_classDecs","_subjectUriDecs","_init_subjectUri","_accessGrantsDecs","_init_accessGrants","_principalInputValueDecs","_init_principalInputValue","_addAccessRoleValueDecs","_init_addAccessRoleValue","_authenticatedAccessRoleValueDecs","_init_authenticatedAccessRoleValue","_publicAccessRoleValueDecs","_init_publicAccessRoleValue","_submittingDecs","_init_submitting","_pendingAccessGrantsDecs","_init_pendingAccessGrants","_accessGrantDraftsDecs","_init_accessGrantDrafts","_errorsDecs","_init_errors","_successfulChangesRefreshedDecs","_init_successfulChangesRefreshed","_AccessControlModal2","_ref","_classPrivateFieldInitSpec","_checkPrivateRedeclaration","_classPrivateFieldSet","_assertClassBrand","_classPrivateFieldGet","_defineProperty","_toPropertyKey","_applyDecs","_setFunctionName","_checkInRHS","_toPrimitive","_identity","isDefined","_AccessControlModal","changedProperties","error$3","requestVersion","grants","labels","groupUri","labelsById","draft","dialogTitle","saveErrors","error$2","currentAuthenticatedRole","currentPublicRole","pendingIndex","rawValue","inputSnapshot","error$1","snapshot","result","merged","normalizedPrincipal","resolvedTarget","draftGrants","draftGrant","access_control_modal_default"],"sources":["../../src/components/access-control-modal/AccessControlSharedAccess.styles.css","../../src/components/access-control-modal/AccessControlSharedAccess.ts","../../src/components/access-control-modal/AccessControlGeneralAccess.styles.css","../../src/components/access-control-modal/AccessControlGeneralAccess.ts","../../src/components/access-control-modal/AccessControlErrors.styles.css","../../src/components/access-control-modal/AccessControlErrors.ts","../../src/components/access-control-modal/AccessControlModal.styles.css","../../src/components/access-control-modal/helpers.ts","../../src/components/access-control-modal/accessGrantDrafts.ts","../../src/components/access-control-modal/AccessControlAddAccess.styles.css","../../src/components/access-control-modal/AccessControlAddAccess.ts","../../src/components/access-control-modal/accessTargetResolver.ts","../../src/components/access-control-modal/applyAccessChanges.ts","../../src/components/access-control-modal/buildAccessChanges.ts","../../src/components/access-control-modal/AccessControlModal.ts","../../src/components/access-control-modal/index.ts"],"sourcesContent":[":host {\n h2 {\n color: var(--solid-ui-color-gray-900, #101828);\n font-size: var(--solid-ui-font-size-md, 1rem);\n font-weight: 600;\n }\n\n .access-grants-header,\n .access-grants-list {\n padding: 0 10px;\n align-self: stretch;\n }\n\n .access-grants-header {\n display: flex;\n align-items: center;\n gap: 15px;\n justify-content: space-between;\n\n .access-grants-search-input {\n flex: 0 0 auto;\n width: 12ch;\n min-width: 12ch;\n --solid-ui-input-border-color: transparent;\n color: var(--solid-ui-color-zinc-500, #71717B);\n font-size: var(--solid-ui-font-size-sm, .875rem);\n font-weight: 500;\n }\n }\n\n .access-grants-list {\n display: flex;\n align-items: flex-start;\n gap: 20px;\n\n ul {\n display: flex;\n flex-direction: column;\n height: 195px;\n padding: 15px;\n align-items: flex-start;\n gap: 15px;\n flex: 1 0 0;\n min-height: 0;\n box-sizing: border-box;\n overflow-y: auto;\n overflow-x: hidden;\n border-radius: 10px;\n border: 1px solid var(--solid-ui-color-gray-200, #E5E7EB);\n }\n\n li {\n display: flex;\n align-items: center;\n gap: 10px;\n flex: 0 0 auto;\n width: 100%;\n\n .access-grants-image {\n display: flex;\n justify-content: center;\n align-items: center;\n aspect-ratio: 1/1;\n width: 30px;\n height: 30px;\n flex: 0 0 30px;\n border-radius: 999px;\n overflow: hidden;\n color: var(--solid-ui-color-white, #FFF);\n text-align: center;\n font-size: var(--solid-ui-font-size-xs, .75rem);\n font-weight: 500;\n\n img {\n display: flex;\n width: 100%;\n height: 100%;\n border-radius: 999px;\n object-fit: cover;\n }\n\n span {\n display: flex;\n width: 100%;\n height: 100%;\n align-items: center;\n justify-content: center;\n line-height: 1;\n }\n }\n\n .access-grants-image--agentGroup {\n background: var(--solid-ui-color-blue-900, #083575);\n }\n\n .access-grants-image--agent,\n .access-grants-image--agentClass {\n background: var(--solid-ui-color-lavender-300, #e6dcff);\n }\n\n .access-grants-image--origin {\n background: var(--solid-ui-color-green-700, #15803D);\n }\n\n .access-grants-image--unknown {\n background: var(--solid-ui-color-gray-300, #D1D5DB);\n }\n\n h3 {\n flex: 1 1 auto;\n min-width: 0;\n color: var(--solid-ui-color-gray-800, #1E2939);\n font-size: var(--solid-ui-font-size-xs, .75rem);\n font-weight: 600;\n }\n\n span {\n margin-left: auto;\n flex: 0 0 auto;\n text-align: right;\n }\n\n .access-grants-role {\n margin-left: auto;\n flex: 0 0 auto;\n font-size: var(--solid-ui-font-size-xs, .75rem);\n }\n\n .access-grants-role--owner {\n font-size: var(--solid-ui-font-size-xs, .75rem);\n }\n\n .access-grants-role--editable {\n max-width: 100%;\n }\n }\n }\n\n .access-role-select--compact {\n width: 110px;\n min-width: 110px;\n flex: 0 0 110px;\n max-width: 100%;\n --solid-ui-input-border-color: transparent;\n margin-top: 0;\n }\n\n .access-grants-list li .access-role-select--compact {\n width: 110px;\n min-width: 110px;\n flex: 0 0 110px;\n }\n}\n","import { customElement, WebComponent } from '@/lib/components'\nimport { html } from 'lit'\nimport { property, state } from 'lit/decorators.js'\nimport { ACCESS_ROLES, type AccessRole } from 'solid-logic'\nimport { findImage } from '@/widgets'\nimport type { ComboboxChangeEvent } from '@/components/combobox'\nimport { sym } from 'rdflib'\n\nimport '@/components/combobox'\nimport '@/components/combobox-option'\n\nimport styles from './AccessControlSharedAccess.styles.css'\nimport type { AccessGrantRoleChangedDetail, AccessGrantViewModel } from './types'\n\n@customElement('solid-ui-access-control-shared-access')\nexport default class AccessControlSharedAccess extends WebComponent {\n static styles = styles\n\n @property({ attribute: false })\n accessor accessGrantViewModels: AccessGrantViewModel[] = []\n\n @state()\n private accessor searchValue = ''\n\n private onSearchInput (event: Event) {\n const target = event.currentTarget as { value?: string | null } | null\n this.searchValue = typeof target?.value === 'string' ? target.value : ''\n }\n\n private onSearchSelect (event: ComboboxChangeEvent) {\n const option = event.detail.option\n if (typeof option.label !== 'string') {\n return\n }\n\n this.searchValue = option.label\n }\n\n private onAccessGrantRoleChange (id: string, event: ComboboxChangeEvent) {\n const value = event.detail.option.value\n if (typeof value !== 'string' || !ACCESS_ROLES.includes(value as AccessRole)) {\n return\n }\n\n const detail: AccessGrantRoleChangedDetail = {\n id,\n role: value as AccessRole\n }\n\n this.dispatchEvent(new CustomEvent<AccessGrantRoleChangedDetail>('access-grant-role-changed', {\n detail,\n bubbles: true,\n composed: true\n }))\n }\n\n private getFilteredAccessGrants () {\n const query = this.searchValue.trim().toLowerCase()\n\n return this.accessGrantViewModels.filter(({ subjectLabel, subjects }) => {\n if (!subjects.length) {\n return false\n }\n\n return !query || subjectLabel.toLowerCase().includes(query)\n })\n }\n\n private renderAccessGrant (entry: AccessGrantViewModel) {\n return html`\n <li>\n ${this.renderAuthorizationBadge(entry.authorization, entry.subjectLabel)}\n <h3>${entry.subjectLabel}</h3>\n ${this.renderAuthorizationRole(entry.role, entry.id)}\n </li>\n `\n }\n\n private renderAuthorizationBadge (authorization: AccessGrantViewModel['authorization'], subjectLabel: string) {\n const badge = this.getAuthorizationBadge(authorization, subjectLabel)\n\n return html`\n <div class=\"access-grants-image access-grants-image--${badge.kind}\">\n ${badge.image\n ? html`<img src=${badge.image} alt=\"\" aria-hidden=\"true\" />`\n : html`<span aria-hidden=\"true\">${badge.text}</span>`}\n </div>\n `\n }\n\n private getAuthorizationBadge (\n authorization: AccessGrantViewModel['authorization'],\n subjectLabel: string\n ) {\n const agent = authorization.agent[0]\n if (agent) {\n const image = findImage(sym(agent))\n return {\n kind: 'agent' as const,\n image,\n text: image ? '' : this.getInitials(subjectLabel, 2)\n }\n }\n\n const agentGroup = authorization.agentGroup[0]\n if (agentGroup) {\n return {\n kind: 'agentGroup' as const,\n text: this.getInitials(subjectLabel, 1)\n }\n }\n\n const agentClass = authorization.agentClass[0]\n if (agentClass) {\n const image = findImage(sym(agentClass))\n return {\n kind: 'agentClass' as const,\n image,\n text: image ? '' : this.getInitials(subjectLabel, 2)\n }\n }\n\n if (authorization.origin[0]) {\n return {\n kind: 'origin' as const,\n text: 'O'\n }\n }\n\n return {\n kind: 'unknown' as const,\n text: '?'\n }\n }\n\n private getInitials (value: string, maxWords = 2): string {\n const parts = value.split(/\\s+/).filter(Boolean).slice(0, maxWords)\n const initials = parts.map(part => part[0]).join('')\n return (initials || value.slice(0, maxWords)).toUpperCase()\n }\n\n private renderAuthorizationRole (role: AccessRole, id: string) {\n return html`\n <solid-ui-combobox\n class=\"access-role-select access-role-select--compact access-grants-role access-grants-role--editable ${role === 'Owner' ? 'access-grants-role--owner' : ''}\"\n .value=${role}\n @change=${(event: ComboboxChangeEvent) => this.onAccessGrantRoleChange(id, event)}\n >\n ${this.renderGrantRoleOptions()}\n </solid-ui-combobox>\n `\n }\n\n private renderGrantRoleOptions () {\n return ACCESS_ROLES.map(role => html`\n <solid-ui-combobox-option value=${role}>${role === 'No Access' ? 'Remove' : role}</solid-ui-combobox-option>\n `)\n }\n\n protected render () {\n const accessGrants = this.getFilteredAccessGrants()\n\n return html`\n <section aria-labelledby=\"access-grants-heading\">\n <div class=\"access-grants-header\">\n <h2 id=\"access-grants-heading\">Share with</h2>\n <solid-ui-combobox\n class=\"access-grants-search-input\"\n label=\"Search access grants\"\n .srOnlyLabel=${true}\n .value=${this.searchValue}\n placeholder=\"Search\"\n @input=${this.onSearchInput}\n @change=${this.onSearchSelect}\n >\n ${this.accessGrantViewModels\n .filter(({ subjects }) => subjects.length > 0)\n .map(({ subjectLabel }) => html`\n <solid-ui-combobox-option .value=${subjectLabel}>\n ${subjectLabel}\n </solid-ui-combobox-option>\n `)}\n </solid-ui-combobox>\n </div>\n <div class=\"access-grants-list\">\n <ul>\n ${accessGrants.length > 0\n ? accessGrants.map(entry => this.renderAccessGrant(entry))\n : html`<li>No access grants</li>`}\n </ul>\n </div>\n </section>\n `\n }\n}\n",":host {\n h2 {\n color: var(--solid-ui-color-gray-900, #101828);\n font-size: var(--solid-ui-font-size-md, 1rem);\n font-weight: 600;\n }\n\n .access-grants-general {\n display: flex;\n flex-direction: column;\n align-items: flex-start;\n gap: 10px;\n padding: 0 10px;\n align-self: stretch;\n\n solid-ui-combobox,\n solid-ui-input {\n --solid-ui-input-border-color: var(--solid-ui-color-slate-200, #E2E8F0);\n }\n\n .access-grants-general-header {\n display: flex;\n flex-direction: row;\n justify-content: space-between;\n align-items: center;\n gap: 15px;\n align-self: stretch;\n\n .access-grants-copy-link-button-label {\n font-size: var(--solid-ui-font-size-xs, .75rem);\n font-weight: 500;\n }\n\n .access-grants-copy-link-button icon-lucide-link {\n width: 12px;\n height: 12px;\n aspect-ratio: 1/1;\n }\n }\n\n .access-grants-general-share {\n display: flex;\n align-items: center;\n gap: 10px;\n align-self: stretch;\n\n .access-grants-general-share-content {\n display: flex;\n flex-direction: row;\n align-items: flex-start;\n gap: 10px;\n flex: 1 0 0;\n\n .access-grants-general-share-icon {\n display: flex;\n width: 30px;\n height: 30px;\n padding: 5px;\n justify-content: center;\n align-items: center;\n aspect-ratio: 1/1;\n border-radius: 50px;\n background: var(--solid-ui-color-violet-50, #F5F3FF);\n }\n\n .access-grants-general-share-icon-inner {\n display: flex;\n width: 20px;\n height: 20px;\n padding: 1.25px;\n justify-content: center;\n align-items: center;\n flex-shrink: 0;\n aspect-ratio: 1/1;\n\n icon-lucide-globe {\n width: 17.5px;\n height: 17.5px;\n flex-shrink: 0;\n aspect-ratio: 1/1;\n }\n }\n\n .access-grants-general-share-text {\n flex: 1 1 auto;\n min-width: 0;\n\n .access-grants-general-share-text-title {\n color: var(--solid-ui-color-gray-900, #101828);\n font-size: var(--solid-ui-font-size-sm, .875rem);\n font-weight: 600;\n }\n\n .access-grants-general-share-text-description {\n color: var(--solid-ui-color-gray-700, #364153);\n font-size: var(--solid-ui-font-size-sm, .875rem);\n }\n }\n }\n }\n }\n\n .access-role-select--general {\n width: 120px;\n min-width: 120px;\n flex: 0 0 120px;\n font-size: var(--solid-ui-font-size-xs, .75rem);\n font-weight: 500;\n }\n\n .access-role-select--compact {\n display: block;\n max-width: 100%;\n --solid-ui-input-border-color: transparent;\n margin-top: 0;\n }\n}\n","import { customElement, WebComponent } from '@/lib/components'\nimport { html } from 'lit'\nimport { property } from 'lit/decorators.js'\nimport { ACCESS_ROLES, PUBLIC_ACCESS_ROLES, type AccessRole } from 'solid-logic'\nimport * as debug from '@/lib/debug'\nimport type { ComboboxChangeEvent } from '@/components/combobox'\n\nimport '~icons/lucide/link'\nimport '~icons/lucide/globe'\nimport '@/components/button'\nimport '@/components/combobox'\nimport '@/components/combobox-option'\n\nimport styles from './AccessControlGeneralAccess.styles.css'\nimport type { RoleChangedDetail } from './types'\n\n@customElement('solid-ui-access-control-general-access')\nexport default class AccessControlGeneralAccess extends WebComponent {\n static styles = styles\n\n @property({ attribute: false })\n accessor subjectUri: string | undefined = undefined\n\n @property({ attribute: false })\n accessor authenticatedAccessRoleValue: AccessRole = 'No Access'\n\n @property({ attribute: false })\n accessor publicAccessRoleValue: AccessRole = 'No Access'\n\n private onAuthenticatedRoleChange (event: ComboboxChangeEvent) {\n this.dispatchRoleChange('authenticated-role-changed', event, ACCESS_ROLES)\n }\n\n private onPublicRoleChange (event: ComboboxChangeEvent) {\n this.dispatchRoleChange('public-role-changed', event, PUBLIC_ACCESS_ROLES)\n }\n\n private dispatchRoleChange (\n eventName: 'authenticated-role-changed' | 'public-role-changed',\n event: ComboboxChangeEvent,\n roles: readonly string[]\n ) {\n const value = event.detail.option.value\n if (typeof value !== 'string' || !roles.includes(value)) {\n return\n }\n\n const detail: RoleChangedDetail = { role: value as AccessRole }\n this.dispatchEvent(new CustomEvent<RoleChangedDetail>(eventName, {\n detail,\n bubbles: true,\n composed: true\n }))\n }\n\n private async onCopyLinkClick (event: Event) {\n event.preventDefault()\n\n if (!this.subjectUri) {\n return\n }\n\n try {\n await navigator.clipboard.writeText(this.subjectUri)\n } catch (error) {\n debug.error('Failed to copy resource link', error)\n }\n }\n\n private renderAuthenticatedRoleOptions () {\n return ACCESS_ROLES.map(role => html`\n <solid-ui-combobox-option value=${role}>${role}</solid-ui-combobox-option>\n `)\n }\n\n private renderPublicRoleOptions () {\n return PUBLIC_ACCESS_ROLES.map(role => html`\n <solid-ui-combobox-option value=${role}>${role}</solid-ui-combobox-option>\n `)\n }\n\n private renderAuthenticatedModeSelector () {\n return html`\n <solid-ui-combobox\n class=\"access-role-select access-role-select--compact access-role-select--general access-grants-role access-grants-role--editable access-role-select--authenticated\"\n .value=${this.authenticatedAccessRoleValue}\n @change=${this.onAuthenticatedRoleChange}\n >\n ${this.renderAuthenticatedRoleOptions()}\n </solid-ui-combobox>\n `\n }\n\n private renderPublicModeSelector () {\n return html`\n <solid-ui-combobox\n class=\"access-role-select access-role-select--compact access-role-select--general access-grants-role access-grants-role--editable access-role-select--public\"\n .value=${this.publicAccessRoleValue}\n @change=${this.onPublicRoleChange}\n >\n ${this.renderPublicRoleOptions()}\n </solid-ui-combobox>\n `\n }\n\n private renderGeneralAccessIcon () {\n return html`\n <div class=\"access-grants-general-share-icon\">\n <div class=\"access-grants-general-share-icon-inner\">\n <icon-lucide-globe class=\"access-grants-general-share-icon-image\"></icon-lucide-globe>\n </div>\n </div>\n `\n }\n\n private renderGeneralShareRow (options: {\n title: string\n description: string\n variant: 'authenticated' | 'public'\n }) {\n return html`\n <div class=\"access-grants-general-share\">\n <div class=\"access-grants-general-share-content\">\n ${this.renderGeneralAccessIcon()}\n <div class=\"access-grants-general-share-text\">\n <p class=\"access-grants-general-share-text-title\">${options.title}</p>\n <p class=\"access-grants-general-share-text-description\">${options.description}</p>\n </div>\n </div>\n ${options.variant === 'authenticated'\n ? this.renderAuthenticatedModeSelector()\n : this.renderPublicModeSelector()}\n </div>\n `\n }\n\n protected render () {\n return html`\n <section class=\"access-grants-general\" aria-labelledby=\"general-access-heading\">\n <div class=\"access-grants-general-header\">\n <h2 id=\"general-access-heading\">General Access</h2>\n <solid-ui-button\n class=\"access-grants-copy-link-button\"\n variant=\"tertiary\"\n @click=${this.onCopyLinkClick}\n >\n <icon-lucide-link slot=\"left-icon\"></icon-lucide-link>\n <span class=\"access-grants-copy-link-button-label\">Copy Link</span>\n </solid-ui-button>\n </div>\n ${this.renderGeneralShareRow({\n title: 'Share with Anyone Signed In',\n description: 'Users must sign in to SolidOS to access this shared item using the link.',\n variant: 'authenticated'\n })}\n ${this.renderGeneralShareRow({\n title: 'Anyone with the Link',\n description: 'Anyone on the internet with the link can view.',\n variant: 'public'\n })}\n </section>\n `\n }\n}\n",":host {\n display: block;\n width: 100%;\n contain: inline-size;\n\n solid-ui-error-state {\n width: 100%;\n max-width: 100%;\n contain: inline-size;\n }\n\n .access-control-save-errors {\n display: grid;\n gap: 8px;\n width: 100%;\n margin: 0;\n padding-left: 0;\n box-sizing: border-box;\n list-style: none;\n\n li {\n display: grid;\n grid-template-columns: minmax(0, 18rem) minmax(0, 1fr);\n align-items: baseline;\n gap: 6px;\n min-width: 0;\n color: var(--solid-ui-color-red-600, #be2e48);\n font-size: var(--solid-ui-font-size-sm, .875rem);\n line-height: 1.4;\n }\n\n .access-control-save-error-label {\n font-weight: 500;\n overflow-wrap: anywhere;\n }\n\n .access-control-save-error-detail {\n min-width: 0;\n overflow-wrap: anywhere;\n }\n }\n\n @media (max-width: 600px) {\n .access-control-save-errors li {\n grid-template-columns: minmax(0, 40%) minmax(0, 1fr);\n }\n }\n}\n","import { customElement, WebComponent } from '@/lib/components'\nimport { html } from 'lit'\nimport { property } from 'lit/decorators.js'\n\nimport '@/components/error-state'\n\nimport styles from './AccessControlErrors.styles.css'\nimport type { AccessSaveError } from './types'\n\n@customElement('solid-ui-access-control-errors')\nexport default class AccessControlErrors extends WebComponent {\n static styles = styles\n\n @property({ attribute: false })\n accessor errors: AccessSaveError[] = []\n\n @property({ attribute: false })\n accessor successfulChangesRefreshed = true\n\n private onClose (event: Event) {\n event.stopPropagation()\n this.dispatchEvent(new CustomEvent('close', {\n bubbles: true,\n composed: true\n }))\n }\n\n protected render () {\n if (!this.errors.length) {\n return html``\n }\n\n return html`\n <solid-ui-error-state\n title=\"Some access changes could not be saved\"\n message=${this.successfulChangesRefreshed\n ? 'Any successful changes are shown above. The list below shows only the changes that failed. Close this dialog and reopen it if you want to try again.'\n : 'Some changes may have been saved, but we could not refresh the Shared with list. The list below shows only the changes that failed. Close this dialog and reopen it if you want to try again.'}\n @close=${this.onClose}\n >\n <ul class=\"access-control-save-errors\">\n ${this.errors.map(error => html`\n <li>\n <span class=\"access-control-save-error-label\">${error.label}</span>\n <span class=\"access-control-save-error-detail\">\n ${error.action === 'grant'\n ? `Could not grant ${error.role ?? 'access'}`\n : error.action === 'revoke'\n ? 'Could not remove access'\n : 'Could not save access changes'}\n </span>\n </li>\n `)}\n </ul>\n </solid-ui-error-state>\n `\n }\n}\n",":host {\n .access-control-footer-actions {\n display: flex;\n justify-content: flex-end;\n align-items: center;\n gap: 15px;\n width: 100%;\n\n > solid-ui-button {\n min-width: 132px;\n }\n }\n\n @media (max-width: 380px) {\n .access-control-footer-actions {\n gap: 8px;\n\n > solid-ui-button {\n min-width: 0;\n flex: 1 1 0;\n }\n }\n }\n}\n","import type { ComboboxOptionData } from '@/components/combobox'\n\nexport type StringComboboxOptionData = ComboboxOptionData & { value: string }\n\nexport function isAbsoluteHttpUri (value: string): boolean {\n try {\n const url = new URL(value)\n return (url.protocol === 'http:' || url.protocol === 'https:') && Boolean(url.hostname)\n } catch {\n return false\n }\n}\n\nexport function isOriginUrl (value: string): boolean {\n if (!isAbsoluteHttpUri(value)) {\n return false\n }\n\n const url = new URL(value)\n return url.pathname === '/' &&\n !url.search &&\n !url.hash &&\n !url.username &&\n !url.password\n}\n\nexport function normalizeOriginInput (value: string): string | undefined {\n const trimmedValue = value.trim()\n if (!trimmedValue || isAbsoluteHttpUri(trimmedValue)) {\n return undefined\n }\n\n try {\n const parsed = new URL(`https://${trimmedValue}`)\n const isHttpOrigin = parsed.protocol === 'http:' || parsed.protocol === 'https:'\n const hasOnlyOriginParts = parsed.pathname === '/' && !parsed.search && !parsed.hash\n const isRecognizedHost = parsed.hostname.includes('.') ||\n parsed.hostname.includes(':')\n\n return isHttpOrigin && hasOnlyOriginParts && isRecognizedHost && !parsed.username && !parsed.password\n ? parsed.origin\n : undefined\n } catch {\n return undefined\n }\n}\n\nexport function dedupeByKey<T> (items: T[], getKey: (item: T) => string | undefined): T[] {\n const uniqueItems = new Map<string, T>()\n\n for (const item of items) {\n const key = getKey(item)\n if (key && !uniqueItems.has(key)) {\n uniqueItems.set(key, item)\n }\n }\n\n return [...uniqueItems.values()]\n}\n\nexport function dedupeComboboxOptions (options: StringComboboxOptionData[]): StringComboboxOptionData[] {\n return dedupeByKey(options, option => option.value)\n}\n","import { label } from '@/utils/label'\nimport { Authenticated, Public, solidLogicSingleton, type AccessRole, type AccessSubject } from 'solid-logic'\nimport { sym } from 'rdflib'\nimport type { AccessAuthorization, AccessGrantDraft, AccessGrantViewModel, AuthorizationSubjectSet, ChangedAccessGrant } from './types'\n\nexport function getSharedAuthorization (authorization: AccessAuthorization): AccessAuthorization {\n return {\n ...authorization,\n agentClass: authorization.agentClass.filter(iri => iri !== Authenticated.iri && iri !== Public.iri)\n }\n}\n\nexport function getAuthorizationSubjectEntries (authorization: AccessAuthorization): AccessSubject[] {\n const subjectSets: AuthorizationSubjectSet[] = [\n { type: 'agent', iris: authorization.agent },\n { type: 'agentGroup', iris: authorization.agentGroup },\n { type: 'agentClass', iris: authorization.agentClass },\n { type: 'origin', iris: authorization.origin }\n ]\n\n return subjectSets.flatMap(({ type, iris }) => iris.map(iri => ({ type, iri })))\n}\n\nexport function getAccessGrantId (authorization: AccessAuthorization): string {\n return getAuthorizationSubjectEntries(authorization)\n .map(subject => `${subject.type}:${subject.iri}`)\n .sort()\n .join('|')\n}\n\nexport function getAccessGrantIds (authorizations: AccessAuthorization[]): string[] {\n const occurrences = new Map<string, number>()\n\n return authorizations.map(authorization => {\n const sharedAuthorization = getSharedAuthorization(authorization)\n const baseId = getAccessGrantId(sharedAuthorization)\n const occurrence = occurrences.get(baseId) ?? 0\n occurrences.set(baseId, occurrence + 1)\n return occurrence === 0 ? baseId : `${baseId}#${occurrence}`\n })\n}\n\nexport function getAuthorizationSubjectLabel (authorization: AccessAuthorization): string {\n const subjects = [\n ...authorization.agent,\n ...authorization.agentGroup,\n ...authorization.agentClass,\n ...authorization.origin\n ]\n return subjects.length ? subjects.map(subject => label(sym(subject))).join(', ') : 'Unknown access holder'\n}\n\nexport function getAuthorizationRole (authorization: AccessAuthorization): AccessRole {\n return solidLogicSingleton.acl.roleFromModes(authorization.mode)\n}\n\nexport function createAccessGrantDraft (authorization: AccessAuthorization): AccessGrantDraft {\n const sharedAuthorization = getSharedAuthorization(authorization)\n return {\n id: getAccessGrantId(sharedAuthorization),\n authorization: sharedAuthorization,\n role: getAuthorizationRole(sharedAuthorization),\n initialRole: getAuthorizationRole(authorization),\n subjectLabel: getAuthorizationSubjectLabel(sharedAuthorization),\n subjects: getAuthorizationSubjectEntries(sharedAuthorization)\n }\n}\n\nexport function createAccessGrantDrafts (authorizations: AccessAuthorization[]): AccessGrantDraft[] {\n const ids = getAccessGrantIds(authorizations)\n return authorizations.map((authorization, index) => ({\n ...createAccessGrantDraft(authorization),\n id: ids[index]\n }))\n}\n\nexport function getAccessGrantViewModels (drafts: AccessGrantDraft[]): AccessGrantViewModel[] {\n return [...drafts]\n .sort((left, right) => {\n const leftIsOwner = left.role === 'Owner'\n const rightIsOwner = right.role === 'Owner'\n\n if (leftIsOwner && !rightIsOwner) return -1\n if (!leftIsOwner && rightIsOwner) return 1\n return drafts.indexOf(left) - drafts.indexOf(right)\n })\n}\n\nexport function getChangedAccessGrants (drafts: AccessGrantDraft[]): ChangedAccessGrant[] {\n return getAccessGrantViewModels(drafts)\n .filter(({ role, initialRole, subjects }) => role !== initialRole && subjects.length > 0)\n .map(({ authorization, subjects, role }) => ({ authorization, subjects, role }))\n}\n\nexport function getAuthenticatedAccessRole (accessGrants: AccessAuthorization[]): AccessRole {\n const authorization = accessGrants.find(item => item.agentClass.includes(Authenticated.iri))\n return authorization ? getAuthorizationRole(authorization) : 'No Access'\n}\n\nexport function getPublicAccessRole (accessGrants: AccessAuthorization[]): AccessRole {\n const authorization = accessGrants.find(item => item.agentClass.includes(Public.iri))\n return authorization ? solidLogicSingleton.acl.publicRoleFromModes(authorization.mode) : 'No Access'\n}\n\nexport function getAccessSubjectLabel (subject: AccessSubject): string {\n if (subject.iri === Authenticated.iri) {\n return 'Authenticated users'\n }\n\n if (subject.iri === Public.iri) {\n return 'Public'\n }\n\n return label(sym(subject.iri)).trim() || subject.iri\n}\n",":host {\n .access-grants-form {\n display: flex;\n flex-direction: column;\n padding: 10px;\n align-items: flex-start;\n gap: 10px;\n align-self: stretch;\n font-size: var(--solid-ui-font-size-sm, .875rem);\n\n --access-role-select-width: 129px;\n\n p {\n color: var(--solid-ui-color-gray-600, #4A5565);\n line-height: 1.5;\n }\n\n .access-grants-form-main {\n display: flex;\n align-items: flex-start;\n gap: 10px;\n align-self: stretch;\n\n .access-grants-input {\n display: flex;\n flex-direction: column;\n flex: 1 1 auto;\n min-width: 0;\n padding: 10px 15px;\n gap: 12px;\n align-items: flex-start;\n border-radius: 5px;\n border: 1px solid var(--solid-ui-color-slate-200, #E2E8F0);\n background: var(--solid-ui-color-white, #FFF);\n\n solid-ui-combobox {\n width: 100%;\n --solid-ui-input-border-color: var(--solid-ui-color-slate-200, #E2E8F0);\n }\n\n .access-principal-error {\n margin: 0;\n color: var(--solid-ui-color-red-700, #B42318);\n font-size: var(--solid-ui-font-size-xs, .75rem);\n line-height: 1.4;\n }\n }\n }\n\n .access-grants-pending {\n display: flex;\n flex-wrap: wrap;\n gap: 8px;\n min-height: 42px;\n align-items: center;\n }\n\n .access-grants-pending-item {\n display: flex;\n padding: 5px 10px;\n align-items: center;\n gap: 6px;\n max-width: 100%;\n border-radius: 5px;\n border: 1px solid var(--solid-ui-color-gray-300, #D1D5DC);\n background: var(--solid-ui-color-gray-50, #F9FAFB);\n color: var(--solid-ui-color-gray-700, #374151);\n }\n\n .access-grants-pending-item-label {\n min-width: 0;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n color: var(--solid-ui-color-gray-500, #6A7282);\n font-size: var(--solid-ui-font-size-xs, .75rem);\n line-height: 1;\n }\n\n .access-grants-pending-item-remove {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n padding: 0;\n border: none;\n border-radius: 999px;\n background: transparent;\n color: var(--solid-ui-color-gray-300, #D1D5DC);\n cursor: pointer;\n\n icon-lucide-circle-x {\n width: 14px;\n height: 14px;\n }\n }\n }\n\n .access-grants-directory-entry {\n display: inline-flex;\n align-items: center;\n gap: 8px;\n line-height: 1;\n }\n\n .access-role-select {\n display: block;\n max-width: 100%;\n margin-top: 25px;\n flex: 0 0 auto;\n width: var(--access-role-select-width);\n --solid-ui-input-border-color: var(--solid-ui-color-slate-200, #E2E8F0);\n }\n\n .access-role-select--top {\n margin-top: 0;\n }\n}\n","import { customElement, WebComponent } from '@/lib/components'\nimport { html, nothing } from 'lit'\nimport { property } from 'lit/decorators.js'\nimport { ACCESS_ROLES, type AccessRole, type DirectoryEntry } from 'solid-logic'\nimport type { AsyncComboboxOptionsProvider, ComboboxChangeEvent } from '@/components/combobox'\n\nimport '~icons/lucide/book-user'\nimport '~icons/lucide/user-round'\nimport '~icons/lucide/users'\nimport '~icons/lucide/circle-x'\nimport '@/components/button'\nimport '@/components/combobox'\nimport '@/components/combobox-option'\n\nimport styles from './AccessControlAddAccess.styles.css'\nimport type { PendingAccessGrant, PendingGrantRemovedDetail, RoleChangedDetail, TargetInputDetail, TargetSelectedDetail } from './types'\n\nexport function directoryEntryOptionTemplate (entry: DirectoryEntry) {\n return html`\n <span class=\"access-grants-directory-entry\">\n ${renderDirectoryEntryIcon(entry)}\n <span>${entry.label}</span>\n </span>\n `\n}\n\nfunction renderDirectoryEntryIcon (entry: DirectoryEntry) {\n if (entry.sources.includes('contacts') || entry.sources.includes('groups')) {\n return html`<icon-lucide-book-user style=\"width: 13px; height: 13px; flex: 0 0 13px;\"></icon-lucide-book-user>`\n }\n\n if (entry.sources.includes('friends')) {\n return html`<icon-lucide-users style=\"width: 13px; height: 13px; flex: 0 0 13px;\"></icon-lucide-users>`\n }\n\n if (entry.sources.includes('catalog')) {\n return html`<icon-lucide-user-round style=\"width: 13px; height: 13px; flex: 0 0 13px;\"></icon-lucide-user-round>`\n }\n\n return nothing\n}\n\n@customElement('solid-ui-access-control-add-access')\nexport default class AccessControlAddAccess extends WebComponent {\n static styles = styles\n\n @property({ attribute: false })\n accessor principalInputValue = ''\n\n @property({ attribute: false })\n accessor addAccessRoleValue: AccessRole = 'Viewer'\n\n @property({ attribute: false })\n accessor pendingAccessGrants: PendingAccessGrant[] = []\n\n @property({ attribute: false })\n accessor inputError = ''\n\n @property({ attribute: false })\n accessor asyncOptionsProvider: AsyncComboboxOptionsProvider | null = null\n\n private onPrincipalInput (event: Event) {\n const value = this.getEventValue(event)\n this.dispatchEvent(new CustomEvent<TargetInputDetail>('target-input', {\n detail: { value },\n bubbles: true,\n composed: true\n }))\n }\n\n private onPrincipalSelect (event: ComboboxChangeEvent) {\n const option = event.detail.option\n if (typeof option.value !== 'string') {\n return\n }\n\n this.dispatchEvent(new CustomEvent<TargetSelectedDetail>('target-selected', {\n detail: {\n value: option.value,\n label: option.label\n },\n bubbles: true,\n composed: true\n }))\n }\n\n private onRoleChange (event: ComboboxChangeEvent) {\n const role = event.detail.option.value\n if (typeof role !== 'string' || !ACCESS_ROLES.includes(role as AccessRole)) {\n return\n }\n\n this.dispatchEvent(new CustomEvent<RoleChangedDetail>('role-changed', {\n detail: { role: role as AccessRole },\n bubbles: true,\n composed: true\n }))\n }\n\n private onPendingGrantRemove (index: number) {\n this.dispatchEvent(new CustomEvent<PendingGrantRemovedDetail>('pending-grant-removed', {\n detail: { index },\n bubbles: true,\n composed: true\n }))\n }\n\n private getEventValue (event: Event): string {\n const target = event.currentTarget as { value?: string | null } | null\n return typeof target?.value === 'string' ? target.value : ''\n }\n\n protected render () {\n return html`\n <section class=\"access-grants-form\" aria-label=\"Add access\">\n <p>Add person, group or software agent URL.</p>\n <div class=\"access-grants-form-main\">\n <div class=\"access-grants-input\">\n <solid-ui-combobox\n class=\"access-principal-combobox\"\n label=\"Add person, group or software agent URL.\"\n .srOnlyLabel=${true}\n .value=${this.principalInputValue}\n placeholder=\"Paste a link or enter a name\"\n .asyncOptionsProvider=${this.asyncOptionsProvider}\n @input=${this.onPrincipalInput}\n @change=${this.onPrincipalSelect}\n ></solid-ui-combobox>\n ${this.inputError\n ? html`<p class=\"access-principal-error\" role=\"alert\">${this.inputError}</p>`\n : nothing}\n ${this.renderPendingAccessGrants()}\n </div>\n <solid-ui-combobox\n class=\"access-role-select access-role-select--top\"\n .value=${this.addAccessRoleValue}\n @change=${this.onRoleChange}\n >\n ${ACCESS_ROLES\n .filter(role => role !== 'No Access')\n .map(role => html`\n <solid-ui-combobox-option value=${role}>${role}</solid-ui-combobox-option>\n `)}\n </solid-ui-combobox>\n </div>\n </section>\n `\n }\n\n private renderPendingAccessGrants () {\n if (!this.pendingAccessGrants.length) {\n return nothing\n }\n\n return html`\n <div class=\"access-grants-pending\">\n ${this.pendingAccessGrants.map((grant, index) => html`\n <div class=\"access-grants-pending-item\">\n <span class=\"access-grants-pending-item-label\">${grant.label}</span>\n <solid-ui-button\n type=\"button\"\n variant=\"ghost\"\n class=\"access-grants-pending-item-remove\"\n @click=${() => this.onPendingGrantRemove(index)}\n >\n <span class=\"sr-only\">Remove ${grant.label}</span>\n <icon-lucide-circle-x slot=\"icon\"></icon-lucide-circle-x>\n </solid-ui-button>\n </div>\n `)}\n </div>\n `\n }\n}\n","import { defineAsyncComboboxOptionsProvider, type AsyncComboboxOptionsProvider, type ComboboxOptionData } from '@/components/combobox'\nimport { directoryEntryOptionTemplate } from './AccessControlAddAccess'\nimport { label } from '@/utils/label'\nimport { DEFAULT_DIRECTORY_SOURCES, solidLogicSingleton, type AccessControlSubjectKind, type DirectoryEntry } from 'solid-logic'\nimport { sym } from 'rdflib'\nimport { dedupeByKey, dedupeComboboxOptions, isAbsoluteHttpUri, isOriginUrl, normalizeOriginInput, type StringComboboxOptionData } from './helpers'\n\nexport type ResolvedAccessTarget = {\n subjectType: AccessControlSubjectKind\n subjectValue: string\n label: string\n}\n\nasync function classifyAccessTarget (principal: string) {\n const normalizedOrigin = normalizeOriginInput(principal)\n return normalizedOrigin\n ? { kind: 'origin' as const, subjectValue: normalizedOrigin }\n : await solidLogicSingleton.acl.classifyAccessControlSubject(principal)\n}\n\nasync function resolveAccessTargetLabel (\n resolvedPrincipal: Awaited<ReturnType<typeof classifyAccessTarget>>,\n preferredLabel?: string\n): Promise<string | undefined> {\n if (!resolvedPrincipal || resolvedPrincipal.kind === 'origin') {\n return resolvedPrincipal?.subjectValue\n }\n\n const subject = sym(resolvedPrincipal.subjectValue)\n await solidLogicSingleton.store.fetcher.load(subject.doc())\n const resolvedLabel = preferredLabel?.trim() || label(subject).trim()\n if (!resolvedLabel || resolvedLabel === resolvedPrincipal.subjectValue) {\n return undefined\n }\n\n return resolvedLabel\n}\n\nexport async function resolveAccessTarget (\n principal: string,\n preferredLabel?: string\n): Promise<ResolvedAccessTarget | undefined> {\n const resolvedPrincipal = await classifyAccessTarget(principal)\n if (!resolvedPrincipal) {\n return undefined\n }\n\n const resolvedLabel = await resolveAccessTargetLabel(resolvedPrincipal, preferredLabel)\n if (!resolvedLabel) {\n return undefined\n }\n\n return {\n subjectType: resolvedPrincipal.kind,\n subjectValue: resolvedPrincipal.subjectValue,\n label: resolvedLabel\n }\n}\n\nasync function createUrlOption (uri: string): Promise<StringComboboxOptionData | undefined> {\n const resolved = await resolveAccessTarget(uri)\n return resolved\n ? { label: resolved.label, value: uri }\n : undefined\n}\n\nfunction directoryEntryToOption (entry: DirectoryEntry, labelValue: string): ComboboxOptionData {\n return {\n label: labelValue,\n value: entry.uri,\n template: directoryEntryOptionTemplate({ ...entry, label: labelValue })\n }\n}\n\nasync function getPreferredAccessPrincipalOptions (query: string): Promise<ComboboxOptionData[]> {\n const normalizedOrigin = normalizeOriginInput(query)\n if (normalizedOrigin) {\n return [{\n label: `Use origin ${normalizedOrigin}`,\n value: normalizedOrigin\n }]\n }\n\n if (!isAbsoluteHttpUri(query)) {\n return []\n }\n\n if (isOriginUrl(query)) {\n return [{\n label: `Use origin ${new URL(query).origin}`,\n value: new URL(query).origin\n }]\n }\n\n const urlOption = await createUrlOption(query)\n return dedupeComboboxOptions(urlOption ? [urlOption] : [])\n}\n\nfunction getShortQueryOptions (preferredOptions: ComboboxOptionData[]): ComboboxOptionData[] {\n if (preferredOptions.length) {\n return preferredOptions\n }\n\n return [{\n label: 'Type at least 2 characters to search',\n value: '',\n selectable: false\n }]\n}\n\nexport const accessPrincipalOptionsProvider: AsyncComboboxOptionsProvider =\n defineAsyncComboboxOptionsProvider(async (filter: string) => {\n const query = filter.trim()\n const preferredOptions = await getPreferredAccessPrincipalOptions(query)\n\n if (query.length < 2) {\n return getShortQueryOptions(preferredOptions)\n }\n\n let entries: DirectoryEntry[] = []\n\n try {\n entries = await solidLogicSingleton.directory.search({\n query,\n sources: DEFAULT_DIRECTORY_SOURCES\n })\n } catch (error) {\n if (!preferredOptions.length) {\n throw error\n }\n }\n\n const verifiedEntries = await Promise.all(entries.map(async entry => {\n try {\n const resolved = await resolveAccessTarget(entry.uri, entry.label)\n return resolved ? { entry, label: resolved.label } : undefined\n } catch {\n return undefined\n }\n }))\n const options = verifiedEntries\n .filter((entry): entry is { entry: DirectoryEntry, label: string } => entry !== undefined)\n .map(({ entry, label: entryLabel }) => directoryEntryToOption(entry, entryLabel))\n return dedupeByKey(\n [...preferredOptions, ...options],\n option => typeof option.value === 'string' ? option.value : undefined\n )\n })\n","import { PUBLIC_ACCESS_ROLES, Public, solidLogicSingleton } from 'solid-logic'\nimport type { AccessChange, AccessSaveError } from './types'\n\nexport async function applyAccessChanges (\n subjectUri: string,\n accessChanges: AccessChange[]\n): Promise<AccessSaveError[]> {\n const errors: AccessSaveError[] = []\n\n for (const { subject, label, role } of accessChanges) {\n try {\n const plan = role === 'No Access'\n ? await solidLogicSingleton.acl.planRevoke(subjectUri, subject)\n : await solidLogicSingleton.acl.planGrant(subjectUri, subject, subject.type === 'agentClass' && subject.iri === Public.iri\n ? solidLogicSingleton.acl.modesFromPublicRole(role as (typeof PUBLIC_ACCESS_ROLES)[number])\n : solidLogicSingleton.acl.modesFromRole(role))\n\n await solidLogicSingleton.acl.applyPlan(plan)\n } catch (error) {\n errors.push({\n action: role === 'No Access' ? 'revoke' : 'grant',\n targetUri: subject.iri,\n label,\n role,\n message: error instanceof Error\n ? error.message\n : 'Unable to apply access change.'\n })\n }\n }\n\n return errors\n}\n","import { getAccessSubjectLabel } from './accessGrantDrafts'\nimport type { AccessChange, ChangedAccessGrant, PendingAccessGrant } from './types'\n\nexport type AccessChangeDrafts = {\n pendingAccessGrants: PendingAccessGrant[]\n generalAccessChanges: AccessChange[]\n changedAccessGrants: ChangedAccessGrant[]\n}\n\nexport function buildAccessChanges ({\n pendingAccessGrants,\n generalAccessChanges,\n changedAccessGrants\n}: AccessChangeDrafts): AccessChange[] {\n return [\n ...pendingAccessGrants.map(grant => ({\n subject: { type: grant.subjectType, iri: grant.subjectValue },\n role: grant.role,\n label: grant.label\n })),\n ...generalAccessChanges,\n ...changedAccessGrants.flatMap(({ subjects, role }) =>\n subjects.map(subject => ({\n subject,\n role,\n label: getAccessSubjectLabel(subject)\n }))\n )\n ]\n}\n","import { customElement, DialogComponent } from '@/lib/components'\nimport { html } from 'lit'\nimport type { PropertyValues } from 'lit'\nimport { property, state } from 'lit/decorators.js'\nimport { label } from '@/utils/label'\nimport * as debug from '@/lib/debug'\nimport { Authenticated, Public, solidLogicSingleton, type AccessRole, type Authorization } from 'solid-logic'\nimport { sym } from 'rdflib'\n\nimport '~icons/lucide/circle-x'\nimport '@/components/dialog'\nimport '@/components/dialog-content'\nimport '@/components/dialog-footer'\nimport '@/components/button'\nimport '@/components/combobox'\nimport '@/components/combobox-option'\nimport './AccessControlSharedAccess'\nimport './AccessControlGeneralAccess'\nimport './AccessControlErrors'\n\nimport styles from './AccessControlModal.styles.css'\nimport type { AccessChange, AccessControlError, AccessGrantDraft, AccessGrantRoleChangedEvent, AccessSaveError, InputAccessControlError, PendingAccessGrant, PendingGrantRemovedEvent, RoleChangedEvent, TargetInputEvent, TargetSelectedEvent } from './types'\nimport { dedupeByKey } from './helpers'\nimport { createAccessGrantDrafts, getAccessGrantIds, getAccessGrantViewModels, getAuthenticatedAccessRole, getAuthorizationSubjectLabel, getChangedAccessGrants, getPublicAccessRole, getSharedAuthorization } from './accessGrantDrafts'\nimport { accessPrincipalOptionsProvider, resolveAccessTarget } from './accessTargetResolver'\nimport { applyAccessChanges } from './applyAccessChanges'\nimport { buildAccessChanges } from './buildAccessChanges'\n\nfunction isDefined<T> (value: T | undefined | null): value is T {\n return value !== undefined && value !== null\n}\n\ntype PendingAccessGrantCreationResult =\n | { grant: PendingAccessGrant }\n | { error: InputAccessControlError }\n\n@customElement('solid-ui-access-control-modal')\nexport default class AccessControlModal extends DialogComponent<void> {\n static styles = styles\n\n @property({ attribute: false })\n accessor subjectUri: string | undefined = undefined\n\n @property({ attribute: false })\n accessor accessGrants: Authorization[] | undefined = undefined\n\n @state()\n private accessor principalInputValue: string = ''\n\n @state()\n private accessor addAccessRoleValue: AccessRole = 'Viewer'\n\n @state()\n private accessor authenticatedAccessRoleValue: AccessRole = 'No Access'\n\n @state()\n private accessor publicAccessRoleValue: AccessRole = 'No Access'\n\n @state()\n private accessor submitting: boolean = false\n\n @state()\n private accessor pendingAccessGrants: PendingAccessGrant[] = []\n\n @state()\n private accessor accessGrantDrafts: AccessGrantDraft[] = []\n\n @state()\n private accessor errors: AccessControlError[] = []\n\n @state()\n private accessor successfulChangesRefreshed = true\n\n private accessGrantLabelRequestVersion = 0\n\n disconnectedCallback (): void {\n this.accessGrantLabelRequestVersion++\n this.errors = []\n super.disconnectedCallback()\n }\n\n private get inputError (): string {\n return this.errors.find(error => error.action === 'input')?.message ?? ''\n }\n\n private get saveErrors (): AccessSaveError[] {\n return this.errors.filter((error): error is AccessSaveError => error.action !== 'input')\n }\n\n private setInputError (error: InputAccessControlError) {\n this.errors = [\n ...this.errors.filter(item => item.action !== 'input'),\n error\n ]\n }\n\n private clearInputError () {\n this.errors = this.errors.filter(error => error.action !== 'input')\n }\n\n protected willUpdate (changedProperties: PropertyValues<this>) {\n super.willUpdate(changedProperties)\n\n if (changedProperties.has('accessGrants')) {\n const accessGrants = this.accessGrants ?? []\n this.accessGrantDrafts = createAccessGrantDrafts(accessGrants)\n this.authenticatedAccessRoleValue = getAuthenticatedAccessRole(accessGrants)\n this.publicAccessRoleValue = getPublicAccessRole(accessGrants)\n }\n }\n\n protected updated (changedProperties: PropertyValues<this>) {\n super.updated(changedProperties)\n\n if (changedProperties.has('accessGrants')) {\n this.refreshAccessGrantLabels().catch((error: unknown) => {\n debug.error('Failed to refresh access grant labels', error)\n })\n }\n }\n\n private async refreshAccessGrantLabels () {\n const requestVersion = ++this.accessGrantLabelRequestVersion\n const grants = this.accessGrants ?? []\n if (!grants.length) {\n this.accessGrantDrafts = []\n return\n }\n\n const labels = await Promise.all(grants.map(async authorization => {\n await Promise.all(authorization.agentGroup.map(async groupUri => {\n try {\n await solidLogicSingleton.store.fetcher.load(sym(groupUri).doc())\n } catch {\n // Keep the fallback label if the group document cannot be loaded.\n }\n }))\n\n return getAuthorizationSubjectLabel(getSharedAuthorization(authorization))\n }))\n\n if (requestVersion === this.accessGrantLabelRequestVersion && this.accessGrants === grants) {\n const labelsById = new Map(getAccessGrantIds(grants).map((id, index) => [id, labels[index]]))\n this.accessGrantDrafts = this.accessGrantDrafts.map(draft => ({\n ...draft,\n subjectLabel: labelsById.get(draft.id) ?? draft.subjectLabel\n }))\n }\n }\n\n private getDialogTitle (): string {\n const subject = this.subjectUri ? sym(this.subjectUri) : undefined\n const subjectLabel = subject ? label(subject).trim() : ''\n\n if (!subjectLabel || subjectLabel === 'this resource') {\n return 'Share this resource'\n }\n\n return `Share \"${subjectLabel}\"`\n }\n\n protected render () {\n const dialogTitle = this.getDialogTitle()\n\n return html`\n <solid-ui-dialog title=${dialogTitle}>\n <form @submit=${this.onSubmit}>\n <solid-ui-dialog-content>\n <solid-ui-access-control-add-access\n .principalInputValue=${this.principalInputValue}\n .addAccessRoleValue=${this.addAccessRoleValue}\n .pendingAccessGrants=${this.pendingAccessGrants}\n .inputError=${this.inputError}\n .asyncOptionsProvider=${accessPrincipalOptionsProvider}\n @target-input=${this.onPrincipalInput}\n @target-selected=${this.onPrincipalSelect}\n @role-changed=${this.onAddAccessRoleInput}\n @pending-grant-removed=${this.onPendingGrantRemoved}\n ></solid-ui-access-control-add-access>\n <solid-ui-access-control-shared-access\n .accessGrantViewModels=${getAccessGrantViewModels(this.accessGrantDrafts)}\n @access-grant-role-changed=${this.onAccessGrantRoleInput}\n ></solid-ui-access-control-shared-access>\n <solid-ui-access-control-general-access\n .subjectUri=${this.subjectUri}\n .authenticatedAccessRoleValue=${this.authenticatedAccessRoleValue}\n .publicAccessRoleValue=${this.publicAccessRoleValue}\n @authenticated-role-changed=${this.onAuthenticatedAccessRoleInput}\n @public-role-changed=${this.onPublicAccessRoleInput}\n ></solid-ui-access-control-general-access>\n <solid-ui-access-control-errors\n .errors=${this.saveErrors}\n .successfulChangesRefreshed=${this.successfulChangesRefreshed}\n @close=${this.onCancelClick}\n ></solid-ui-access-control-errors>\n </solid-ui-dialog-content>\n\n <solid-ui-dialog-footer>\n <div class=\"access-control-footer-actions\">\n <solid-ui-button\n variant=\"secondary\"\n @click=${this.onCancelClick}\n >\n Cancel\n </solid-ui-button>\n <solid-ui-button\n ?disabled=${!this.hasUnsavedChanges() || this.submitting || this.saveErrors.length > 0}\n ?loading=${this.submitting}\n type=\"button\"\n @click=${this.onSaveClick}\n >\n Save Changes\n </solid-ui-button>\n </div>\n </solid-ui-dialog-footer>\n </form>\n </solid-ui-dialog>\n `\n }\n\n private async onSubmit (e: Event) {\n e.preventDefault()\n\n if (this.submitting) {\n return\n }\n\n await this.commitPrincipalFromInputSafely()\n }\n\n private async onSaveClick () {\n if (this.submitting) {\n return\n }\n\n if (this.principalInputValue.trim()) {\n const committed = await this.commitPrincipalFromInputSafely()\n\n if (!committed) {\n return\n }\n }\n\n await this.saveAccessChanges()\n }\n\n private onCancelClick () {\n this.close()\n }\n\n private async saveAccessChanges () {\n if (this.submitting) {\n return\n }\n\n const changedAccessGrants = getChangedAccessGrants(this.accessGrantDrafts)\n const generalAccessChanges = this.getGeneralAccessChanges()\n\n if (!this.pendingAccessGrants.length && !changedAccessGrants.length && !generalAccessChanges.length) {\n return\n }\n\n if (!this.subjectUri) {\n return\n }\n\n this.submitting = true\n this.errors = this.errors.filter(error => error.action === 'input')\n this.successfulChangesRefreshed = true\n\n try {\n const accessChanges = buildAccessChanges({\n pendingAccessGrants: this.pendingAccessGrants,\n generalAccessChanges,\n changedAccessGrants\n })\n\n const saveErrors = await applyAccessChanges(this.subjectUri, accessChanges)\n if (saveErrors.length) {\n this.errors = [...this.errors, ...saveErrors]\n this.principalInputValue = ''\n this.pendingAccessGrants = []\n\n try {\n this.accessGrants = await solidLogicSingleton.acl.findAccessGrants(this.subjectUri)\n } catch (error) {\n this.successfulChangesRefreshed = false\n this.errors = [\n ...this.errors,\n {\n action: 'save',\n targetUri: this.subjectUri,\n label: 'Shared with list',\n message: error instanceof Error\n ? error.message\n : 'Unable to refresh the access list.'\n }\n ]\n debug.error('Failed to refresh access grants after save errors', error)\n }\n\n debug.error('Failed to save some access changes', saveErrors)\n return\n }\n\n this.principalInputValue = ''\n this.pendingAccessGrants = []\n this.close()\n } catch (error) {\n this.errors = [\n ...this.errors,\n {\n action: 'save',\n targetUri: this.subjectUri ?? '',\n label: 'Access changes',\n message: error instanceof Error\n ? error.message\n : 'Unexpected error while saving access changes.'\n }\n ]\n } finally {\n this.submitting = false\n }\n }\n\n private onPrincipalInput (event: TargetInputEvent) {\n this.principalInputValue = event.detail.value\n this.clearInputError()\n }\n\n private onPrincipalSelect (event: TargetSelectedEvent) {\n this.queuePendingPrincipal(event.detail.value, this.addAccessRoleValue, event.detail.label)\n }\n\n private getGeneralAccessChanges (): AccessChange[] {\n if (!this.subjectUri) {\n return []\n }\n\n const accessGrants = this.accessGrants ?? []\n const currentAuthenticatedRole = getAuthenticatedAccessRole(accessGrants)\n const currentPublicRole = getPublicAccessRole(accessGrants)\n\n const authenticatedChange = this.authenticatedAccessRoleValue === currentAuthenticatedRole\n ? undefined\n : {\n subject: Authenticated,\n role: this.authenticatedAccessRoleValue,\n label: 'Authenticated users'\n }\n\n const publicChange = this.publicAccessRoleValue === currentPublicRole\n ? undefined\n : {\n subject: Public,\n role: this.publicAccessRoleValue,\n label: 'Public'\n }\n\n return [authenticatedChange, publicChange].filter(isDefined)\n }\n\n private onAddAccessRoleInput (event: RoleChangedEvent) {\n this.addAccessRoleValue = event.detail.role\n this.pendingAccessGrants = this.pendingAccessGrants.map(grant => ({\n ...grant,\n role: event.detail.role\n }))\n }\n\n private onAuthenticatedAccessRoleInput (event: RoleChangedEvent) {\n this.authenticatedAccessRoleValue = event.detail.role\n }\n\n private onPublicAccessRoleInput (event: RoleChangedEvent) {\n this.publicAccessRoleValue = event.detail.role\n }\n\n private onAccessGrantRoleInput (event: AccessGrantRoleChangedEvent) {\n this.accessGrantDrafts = this.accessGrantDrafts.map(draft =>\n draft.id === event.detail.id\n ? { ...draft, role: event.detail.role }\n : draft\n )\n }\n\n private onPendingGrantRemoved (event: PendingGrantRemovedEvent) {\n this.pendingAccessGrants = this.pendingAccessGrants.filter((_, pendingIndex) => pendingIndex !== event.detail.index)\n }\n\n private hasUnsavedChanges (): boolean {\n return Boolean(\n this.pendingAccessGrants.length ||\n this.principalInputValue.trim() ||\n getChangedAccessGrants(this.accessGrantDrafts).length ||\n this.getGeneralAccessChanges().length\n )\n }\n\n private async commitPrincipalFromInput (): Promise<boolean> {\n const rawValue = this.principalInputValue.trim()\n if (!rawValue) {\n return false\n }\n\n return this.queuePendingPrincipal(rawValue, this.addAccessRoleValue, undefined, rawValue)\n }\n\n private async commitPrincipalFromInputSafely (): Promise<boolean> {\n const inputSnapshot = this.principalInputValue.trim()\n\n try {\n return await this.commitPrincipalFromInput()\n } catch (error) {\n if (this.principalInputValue.trim() !== inputSnapshot) {\n debug.error('Ignored stale access-target validation error', error)\n return false\n }\n\n this.setInputError({\n action: 'input',\n label: 'Access target',\n targetUri: this.principalInputValue.trim(),\n message: 'We could not verify this access target. Check the value and try again.'\n })\n debug.error('Failed to commit pending access grants', error)\n return false\n }\n }\n\n private async queuePendingPrincipal (\n principal: string,\n role: AccessRole = this.addAccessRoleValue,\n preferredLabel?: string,\n inputSnapshot?: string\n ): Promise<boolean> {\n const snapshot = inputSnapshot ?? this.principalInputValue.trim()\n const result = await this.createPendingAccessGrant(principal, role, preferredLabel)\n\n if ('error' in result) {\n if (this.principalInputValue.trim() === snapshot) {\n this.setInputError(result.error)\n }\n debug.error('Failed to add access grant:', result.error.message)\n return false\n }\n\n const merged = [...this.pendingAccessGrants, result.grant]\n this.pendingAccessGrants = this.dedupePendingAccessGrants(merged)\n\n if (this.principalInputValue.trim() === snapshot) {\n this.clearInputError()\n this.principalInputValue = ''\n }\n\n return true\n }\n\n private async createPendingAccessGrant (\n principal: string,\n role: AccessRole = this.addAccessRoleValue,\n preferredLabel?: string\n ): Promise<PendingAccessGrantCreationResult> {\n try {\n const normalizedPrincipal = principal.trim()\n const resolvedTarget = await resolveAccessTarget(normalizedPrincipal, preferredLabel)\n if (!resolvedTarget) {\n return {\n error: {\n action: 'input',\n label: 'Access target',\n targetUri: normalizedPrincipal,\n message: 'Could not verify this access target'\n }\n }\n }\n\n return {\n grant: {\n subjectType: resolvedTarget.subjectType,\n subjectValue: resolvedTarget.subjectValue,\n role,\n label: resolvedTarget.label\n }\n }\n } catch (error) {\n return {\n error: {\n action: 'input',\n label: 'Access target',\n targetUri: principal,\n message: error instanceof Error && error.message.trim()\n ? error.message\n : 'Could not verify this access target'\n }\n }\n }\n }\n\n private dedupePendingAccessGrants (draftGrants: PendingAccessGrant[]): PendingAccessGrant[] {\n return dedupeByKey(draftGrants, draftGrant => `${draftGrant.subjectType}:${draftGrant.subjectValue}`)\n }\n}\n","import AccessControlModal from './AccessControlModal'\n\nexport { AccessControlModal }\nexport default AccessControlModal\n"],"mappings":"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"}