@aiquants/auth-react-router 0.16.0 → 0.18.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +31 -6
- package/dist/admin.d.mts +0 -1
- package/dist/admin.d.ts +0 -1
- package/dist/admin.js +1 -1
- package/dist/admin.mjs +1 -1
- package/package.json +3 -3
package/dist/admin.mjs
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
import{resolveVirtualScrollLocale as We}from"@aiquants/virtualscroll";var j={title:"Users & Groups",locale:"en",formatLocale:"en-US",timeZone:"UTC",heading:"\u{1F464} User administration",common:{create:"Create",edit:"Edit",delete:"Delete",save:"Save",cancel:"Cancel",actions:"Actions",status:"Status",id:"ID",readOnly:"Read-only",managedUpstream:"Managed upstream",idTemplate:"#{id}",none:"-"},errors:{unknownUpstream:"No group named {key} exists upstream. Check the spelling, or pick one from the list.",directoryDisabled:"This deployment has no directory configured, so groups cannot be linked.",invalidField:"\u201C{field}\u201D is missing or not a value this operation accepts.",unknownIntent:"This screen does not perform that operation.",fieldNames:{groupId:"Group",userId:"User",entryId:"Entry",displayName:"Display name",email:"Email",groupKey:"Group key",name:"Name",provider:"Directory provider",externalKey:"Directory group address",membershipMode:"Membership expansion",isActive:"Active",isSyncEnabled:"Synchronization",pattern:"Pattern",type:"Type"},invalidAllowlistType:"The allowlist type must be either an address or a domain.",unexpected:"The operation failed. The reason is in the server log.",alreadyLinked:"{key} is already linked to {group}. One upstream group can back only one local group.",forbidden:"You do not have permission for this operation. The badge in the header shows what you currently hold; ask an administrator for the rest.",requestTooLarge:"The request was too large to process."},permissions:{label:"Your permissions:",canWrite:"Editable",canRead:"Read only",canDelete:"Delete only",none:"No access",unknown:"Unknown"},tabs:{users:"\u{1F464} Users",groups:"\u{1F465} Groups",groupMembers:"\u{1F517} Members",allowlist:"\u2709\uFE0F Allowlist",directory:"\u{1F504} Directory"},usersView:{title:"Users",sortBy:"Sort by {column}",searchPlaceholder:"Search by name or email...",searchLabel:"Search users",addUser:"\uFF0B Add user",editUser:"Edit user",displayName:"Name",email:"Email",active:"Active",inactive:"Inactive",activate:"Activate",deactivate:"Deactivate",editUserAria:"Edit {user}",activateAria:"Activate {user}",deactivateAria:"Deactivate {user}",emptyFiltered:"No user matches this search.",listSummary:"Showing {shown} of {total} users.",sortedAscending:"{column}, sorted ascending. Activate to sort descending.",sortedDescending:"{column}, sorted descending. Activate to sort ascending.",confirmDeactivate:"Deactivate {user}? They will no longer be able to sign in.",empty:"No user is registered yet."},groupsView:{emptyFiltered:"No group matches this search",createModeLabel:"How to create the group",createModeLocal:"Create locally",createModeUpstream:"Create from a directory group",pickUpstream:"Directory group",pickUpstreamPlaceholder:"Search by name or address...",upstreamOptionMembers:"{count} members",upstreamAlreadyLinked:"already linked to {group}",providerUnset:"This deployment has no directory provider configured, so a directory group cannot be linked yet. Ask an administrator to set it.",pickUpstreamFirst:"Pick a directory group first.",allUpstreamLinked:"Every directory group is already linked to a local group. One upstream group can back only one local group, so unlink one first.",catalogEmpty:"The directory reported no groups as of {at}. Creating from a directory group is unavailable until one exists upstream.",catalogUnavailable:"The directory could not be reached, so the group list is unavailable. Enter the address by hand instead. ({reason})",catalogUnavailableHere:"The directory could not be reached, so creating from a directory group is unavailable. Create the group locally, then link it on the Directory tab. ({reason})",catalogObservedAt:"This list is the directory as of {at}.",catalogStale:"\u26A0 This list is the directory as of {at} and is overdue for a refresh \u2014 a group created since then will not appear.",catalogFailures:{denied:"the directory refused this deployment's credential",rateLimited:"the directory is rate-limiting this deployment",upstreamError:"the directory reported an internal error",neverObserved:"the directory has not been read yet \u2014 the synchronization job may not be running",unknown:"the reason is in the server log"},createUpstreamNotice:"Creates the group and links it in one step. The directory then owns its membership \u2014 and this screen can no longer rename, describe or delete the group. Unlinking is the only way back, and it removes the member ledger and the group-based sign-in permission.",openMembers:"Members",openMembersAria:"Show the members of {group}",title:"Groups",searchPlaceholder:"Search by group name or key...",searchLabel:"Search groups",addGroup:"\uFF0B Add group",editGroup:"Edit group",groupKey:"Group key",name:"Name",description:"Description",memberCountTemplate:"{count} members",confirmDelete:"Delete {group}? Its {count} membership record(s) go with it, and anyone who could sign in only through this group will be locked out.",confirmCreateLinked:"Create {group} and hand its membership to {upstream}? Renaming and deleting it here becomes impossible.",editGroupAria:"Edit {group}",deleteGroupAria:"Delete {group}",noDescription:"No description",groupKeyPlaceholder:"e.g. dev-team",namePlaceholder:"e.g. Development team",empty:"No groups registered"},groupMembersView:{title:"Group members",searchLabel:"Search users",searchPlaceholder:"Search by name or email...",onlyMembers:"Members only ({count})",emptyFiltered:"No user matches this search",summary:"Showing {shown} of {total} users. This group has {members} member(s).",selectGroup:"Select a group",selectPrompt:"Select a group to manage its members",noGroups:"No group exists yet. Create one on the Groups tab first.",emptyNoMembers:"This group has no members yet. Untick \u201CMembers only\u201D to add someone.",noUsers:"No user is registered yet. Add one on the Users tab first.",deepLinkMissed:"Group {id} was not found \u2014 it may have been deleted. Showing {group} instead.",actionAdd:"Add",actionRemove:"Remove",actionAddAria:"Add {user} to this group",actionRemoveAria:"Remove {user} from this group",upstreamNotice:"Membership of this group is owned by the upstream directory. Edit it there \u2014 a local change would be reverted at the next synchronization.",membersOfTemplate:"Members of {group}",groupKeyLabel:"Group key"},allowlistView:{title:"Sign-in allowlist",addEntry:"\uFF0B Add pattern",pattern:"Pattern (e.g. @example.com or user@example.com)",type:"Type",emailType:"Exact email match",domainType:"Domain match",emailTypeShort:"Email",domainTypeShort:"Domain",groupTypeShort:"Group",target:"Target",description:"Description",deploymentOwner:"Deployment-wide",confirmDelete:"Remove {target} from the sign-in allowlist? Anyone who could sign in only through it will be locked out.",deleteAria:"Remove the allowlist entry for {target}",empty:"No allowlist entries registered"},directoryView:{title:"Directory synchronization",membershipMode:"Membership",directMode:"Direct only",transitiveMode:"Nested expanded",lastSynced:"Last synced",neverSynced:"Never",unresolvedTemplate:"{count} unresolved",syncPaused:"Paused",syncEnabled:"Active",syncNow:"Sync now",syncQueued:"Queued",syncAlreadyPending:"A synchronization request for this scope is already waiting, so nothing was queued. If it never completes, the synchronization job may not be running.",linkSyncNotQueued:'The link was created, but a synchronization request could not be queued. Use "Sync now" on the Directory tab.',staleWarning:"Synchronization is overdue. Until it runs, people removed upstream keep their access.",disabledWarning:"Directory synchronization is not wired for this deployment. Existing memberships remain in force and are no longer being refreshed.",pausedTemplate:"{paused} of {total} links are paused",erroredTemplate:"Last synchronization failed for {groups}",erroredItemTemplate:"{group}: {reason}",listSeparator:", ",oldestSyncedTemplate:"oldest successful sync: {at}",pendingTemplate:"{count} sync requests are queued",nothingToLink:"Every group is already linked to a directory.",noGroupsToLink:"No group exists yet. Create one on the Groups tab first.",notWiredNotice:"Directory synchronization is not wired for this deployment, so links cannot be created or changed here.",syncNowAria:"Synchronize {group} now",syncQueuedAria:"A synchronization of {group} is queued",pauseAria:"Pause synchronization of {group}",resumeAria:"Resume synchronization of {group}",allowGroupAria:"Allow members of {group} to sign in",disallowGroupAria:"Stop allowing members of {group} to sign in",unlinkAria:"Unlink {group} from the directory",confirmDisallow:"Stop allowing {group} to sign in? Anyone who could sign in only through it will be locked out.",link:"Link to a directory group",unlink:"Unlink",externalKey:"Upstream group",empty:"No groups are linked to a directory",selectGroup:"Group to link",pickUpstreamPlaceholder:"Search by name or address...",pickerNoOptions:"No matching group",pickerClear:"Clear the selection",pickerToggle:"Show the group list",pickerSelected:"Selected: {value}",pickerAvailable:"{count} groups available",externalKeyPlaceholder:"e.g. dev-team@example.com",confirmLink:"Hand {group}'s membership to {upstream}? Renaming, deleting, and editing its members here becomes impossible.",confirmUnlink:"Unlink {group} from {upstream}? Its member ledger and group-based sign-in permission are removed.",pause:"Pause",resume:"Resume",allowGroup:"Allow sign-in",disallowGroup:"Stop allowing sign-in",groupOptionTemplate:"{name} ({key})"}},Ct={title:"\u30E6\u30FC\u30B6\u30FC\u30FB\u30B0\u30EB\u30FC\u30D7\u7BA1\u7406",locale:"ja",formatLocale:"ja-JP",timeZone:"Asia/Tokyo",heading:"\u{1F464} \u30E6\u30FC\u30B6\u30FC\u7BA1\u7406",common:{create:"\u4F5C\u6210",edit:"\u7DE8\u96C6",delete:"\u524A\u9664",save:"\u4FDD\u5B58",cancel:"\u30AD\u30E3\u30F3\u30BB\u30EB",actions:"\u64CD\u4F5C",status:"\u72B6\u614B",id:"ID",readOnly:"\u5909\u66F4\u4E0D\u53EF",managedUpstream:"\u4E0A\u6D41\u304C\u6240\u6709",idTemplate:"#{id}",none:"-"},errors:{unknownUpstream:"\u4E0A\u6D41\u306B {key} \u3068\u3044\u3046\u30B0\u30EB\u30FC\u30D7\u304C\u898B\u3064\u304B\u308A\u307E\u305B\u3093\u3002\u7DB4\u308A\u3092\u78BA\u8A8D\u3059\u308B\u304B\u3001\u4E00\u89A7\u304B\u3089\u9078\u3093\u3067\u304F\u3060\u3055\u3044\u3002",directoryDisabled:"\u3053\u306E\u914D\u5099\u306B\u306F\u30C7\u30A3\u30EC\u30AF\u30C8\u30EA\u304C\u8A2D\u5B9A\u3055\u308C\u3066\u3044\u306A\u3044\u305F\u3081\u3001\u30B0\u30EB\u30FC\u30D7\u3092\u9023\u643A\u3067\u304D\u307E\u305B\u3093\u3002",invalidField:"\u300C{field}\u300D\u304C\u672A\u6307\u5B9A\u304B\u3001\u3053\u306E\u64CD\u4F5C\u304C\u53D7\u3051\u4ED8\u3051\u3089\u308C\u306A\u3044\u5024\u3067\u3059\u3002",unknownIntent:"\u3053\u306E\u753B\u9762\u3067\u306F\u3001\u305D\u306E\u64CD\u4F5C\u3092\u884C\u3044\u307E\u305B\u3093\u3002",fieldNames:{groupId:"\u30B0\u30EB\u30FC\u30D7",userId:"\u30E6\u30FC\u30B6\u30FC",entryId:"\u9805\u76EE",displayName:"\u8868\u793A\u540D",email:"\u30E1\u30FC\u30EB\u30A2\u30C9\u30EC\u30B9",groupKey:"\u30B0\u30EB\u30FC\u30D7\u30AD\u30FC",name:"\u540D\u524D",provider:"\u9023\u643A\u30D7\u30ED\u30D0\u30A4\u30C0",externalKey:"\u30C7\u30A3\u30EC\u30AF\u30C8\u30EA\u306E\u30B0\u30EB\u30FC\u30D7\u30A2\u30C9\u30EC\u30B9",membershipMode:"\u6240\u5C5E\u306E\u5C55\u958B",isActive:"\u6709\u52B9",isSyncEnabled:"\u540C\u671F",pattern:"\u30D1\u30BF\u30FC\u30F3",type:"\u7A2E\u5225"},invalidAllowlistType:"\u8A31\u53EF\u30EA\u30B9\u30C8\u306E\u7A2E\u5225\u306F\u3001\u30A2\u30C9\u30EC\u30B9\u304B\u30C9\u30E1\u30A4\u30F3\u306E\u3044\u305A\u308C\u304B\u3067\u6307\u5B9A\u3057\u3066\u304F\u3060\u3055\u3044\u3002",unexpected:"\u64CD\u4F5C\u306B\u5931\u6557\u3057\u307E\u3057\u305F\u3002\u7406\u7531\u306F\u30B5\u30FC\u30D0\u30FC\u306E\u30ED\u30B0\u306B\u51FA\u3066\u3044\u307E\u3059\u3002",alreadyLinked:"{key} \u306F\u65E2\u306B {group} \u3068\u9023\u643A\u3057\u3066\u3044\u307E\u3059\u30021 \u3064\u306E\u4E0A\u6D41\u30B0\u30EB\u30FC\u30D7\u3092 2 \u3064\u306E\u30ED\u30FC\u30AB\u30EB\u30B0\u30EB\u30FC\u30D7\u3078\u7E4B\u3050\u3053\u3068\u306F\u3067\u304D\u307E\u305B\u3093\u3002",forbidden:"\u3053\u306E\u64CD\u4F5C\u3092\u884C\u3046\u6A29\u9650\u304C\u3042\u308A\u307E\u305B\u3093\u3002\u4ECA\u306E\u6A29\u9650\u306F\u30D8\u30C3\u30C0\u30FC\u306E\u30D0\u30C3\u30B8\u306B\u51FA\u3066\u3044\u307E\u3059\u3002\u5FC5\u8981\u3067\u3042\u308C\u3070\u7BA1\u7406\u8005\u306B\u4ED8\u4E0E\u3092\u4F9D\u983C\u3057\u3066\u304F\u3060\u3055\u3044\u3002",requestTooLarge:"\u9001\u4FE1\u3055\u308C\u305F\u5185\u5BB9\u304C\u5927\u304D\u3059\u304E\u308B\u305F\u3081\u51E6\u7406\u3067\u304D\u307E\u305B\u3093\u3067\u3057\u305F\u3002"},permissions:{label:"\u3042\u306A\u305F\u306E\u6A29\u9650:",canWrite:"\u7DE8\u96C6\u53EF",canRead:"\u95B2\u89A7\u306E\u307F",canDelete:"\u524A\u9664\u306E\u307F",none:"\u6A29\u9650\u306A\u3057",unknown:"\u6A29\u9650\u4E0D\u660E"},tabs:{users:"\u{1F464} \u30E6\u30FC\u30B6\u30FC\u4E00\u89A7",groups:"\u{1F465} \u30E6\u30FC\u30B6\u30FC\u30B0\u30EB\u30FC\u30D7",groupMembers:"\u{1F517} \u30B0\u30EB\u30FC\u30D7\u30E1\u30F3\u30D0\u30FC",allowlist:"\u2709\uFE0F \u30A2\u30AF\u30BB\u30B9\u8A31\u53EF\u30EA\u30B9\u30C8",directory:"\u{1F504} \u30C7\u30A3\u30EC\u30AF\u30C8\u30EA\u9023\u643A"},usersView:{title:"\u30E6\u30FC\u30B6\u30FC\u7BA1\u7406",sortBy:"{column} \u3067\u4E26\u3079\u66FF\u3048",searchPlaceholder:"\u8868\u793A\u540D\u3084 Email \u3067\u691C\u7D22...",searchLabel:"\u30E6\u30FC\u30B6\u30FC\u3092\u691C\u7D22",addUser:"\uFF0B \u30E6\u30FC\u30B6\u30FC\u8FFD\u52A0",editUser:"\u30E6\u30FC\u30B6\u30FC\u7DE8\u96C6",displayName:"\u8868\u793A\u540D",email:"Email",active:"\u6709\u52B9",inactive:"\u7121\u52B9",activate:"\u6709\u52B9\u5316",deactivate:"\u7121\u52B9\u5316",editUserAria:"{user} \u3092\u7DE8\u96C6",activateAria:"{user} \u3092\u6709\u52B9\u5316",deactivateAria:"{user} \u3092\u7121\u52B9\u5316",emptyFiltered:"\u691C\u7D22\u6761\u4EF6\u306B\u4E00\u81F4\u3059\u308B\u5229\u7528\u8005\u306F\u3044\u307E\u305B\u3093\u3002",listSummary:"{total} \u4EBA\u4E2D {shown} \u4EBA\u3092\u8868\u793A\u3057\u3066\u3044\u307E\u3059\u3002",sortedAscending:"{column} (\u6607\u9806\u3067\u4E26\u3079\u66FF\u3048\u4E2D)\u3002\u62BC\u3059\u3068\u964D\u9806\u306B\u306A\u308A\u307E\u3059\u3002",sortedDescending:"{column} (\u964D\u9806\u3067\u4E26\u3079\u66FF\u3048\u4E2D)\u3002\u62BC\u3059\u3068\u6607\u9806\u306B\u306A\u308A\u307E\u3059\u3002",confirmDeactivate:"{user} \u3092\u7121\u52B9\u5316\u3057\u307E\u3059\u304B\uFF1F \u4EE5\u5F8C\u30B5\u30A4\u30F3\u30A4\u30F3\u3067\u304D\u306A\u304F\u306A\u308A\u307E\u3059\u3002",empty:"\u30E6\u30FC\u30B6\u30FC\u304C\u767B\u9332\u3055\u308C\u3066\u3044\u307E\u305B\u3093\u3002"},groupsView:{emptyFiltered:"\u691C\u7D22\u6761\u4EF6\u306B\u4E00\u81F4\u3059\u308B\u30B0\u30EB\u30FC\u30D7\u306F\u3042\u308A\u307E\u305B\u3093",createModeLabel:"\u4F5C\u6210\u65B9\u6CD5",createModeLocal:"\u30ED\u30FC\u30AB\u30EB\u306B\u4F5C\u6210",createModeUpstream:"\u30C7\u30A3\u30EC\u30AF\u30C8\u30EA\u306E\u30B0\u30EB\u30FC\u30D7\u304B\u3089\u4F5C\u6210",pickUpstream:"\u30C7\u30A3\u30EC\u30AF\u30C8\u30EA\u306E\u30B0\u30EB\u30FC\u30D7",pickUpstreamPlaceholder:"\u540D\u524D\u304B\u30A2\u30C9\u30EC\u30B9\u3067\u691C\u7D22...",upstreamOptionMembers:"{count} \u540D",upstreamAlreadyLinked:"{group} \u3068\u9023\u643A\u6E08\u307F",providerUnset:"\u3053\u306E\u914D\u5099\u306B\u306F\u9023\u643A\u30D7\u30ED\u30D0\u30A4\u30C0\u540D\u304C\u8A2D\u5B9A\u3055\u308C\u3066\u3044\u306A\u3044\u305F\u3081\u3001\u30C7\u30A3\u30EC\u30AF\u30C8\u30EA\u306E\u30B0\u30EB\u30FC\u30D7\u3092\u9023\u643A\u3067\u304D\u307E\u305B\u3093\u3002\u7BA1\u7406\u8005\u306B\u8A2D\u5B9A\u3092\u4F9D\u983C\u3057\u3066\u304F\u3060\u3055\u3044\u3002",pickUpstreamFirst:"\u5148\u306B\u30C7\u30A3\u30EC\u30AF\u30C8\u30EA\u306E\u30B0\u30EB\u30FC\u30D7\u3092\u9078\u3093\u3067\u304F\u3060\u3055\u3044\u3002",allUpstreamLinked:"\u30C7\u30A3\u30EC\u30AF\u30C8\u30EA\u306E\u30B0\u30EB\u30FC\u30D7\u306F\u3059\u3079\u3066\u3001\u3044\u305A\u308C\u304B\u306E\u30ED\u30FC\u30AB\u30EB\u30B0\u30EB\u30FC\u30D7\u3068\u9023\u643A\u6E08\u307F\u3067\u3059\u30021 \u3064\u306E\u4E0A\u6D41\u30B0\u30EB\u30FC\u30D7\u3092\u7E4B\u3052\u308B\u5148\u306F 1 \u3064\u3060\u3051\u306A\u306E\u3067\u3001\u7E4B\u304E\u66FF\u3048\u308B\u306B\u306F\u3069\u308C\u304B\u306E\u9023\u643A\u3092\u89E3\u9664\u3057\u3066\u304F\u3060\u3055\u3044\u3002",catalogEmpty:"{at} \u6642\u70B9\u3067\u3001\u4E0A\u6D41\u306B\u30B0\u30EB\u30FC\u30D7\u304C 1 \u3064\u3082\u3042\u308A\u307E\u305B\u3093\u3067\u3057\u305F\u3002\u4E0A\u6D41\u306B\u30B0\u30EB\u30FC\u30D7\u304C\u3067\u304D\u308B\u307E\u3067\u3001\u30C7\u30A3\u30EC\u30AF\u30C8\u30EA\u304B\u3089\u306E\u4F5C\u6210\u306F\u3067\u304D\u307E\u305B\u3093\u3002",catalogUnavailable:"\u4E0A\u6D41\u3078\u5230\u9054\u3067\u304D\u306A\u3044\u305F\u3081\u3001\u30B0\u30EB\u30FC\u30D7\u4E00\u89A7\u3092\u51FA\u305B\u307E\u305B\u3093\u3002\u30A2\u30C9\u30EC\u30B9\u3092\u624B\u5165\u529B\u3057\u3066\u304F\u3060\u3055\u3044\u3002({reason})",catalogUnavailableHere:"\u4E0A\u6D41\u3078\u5230\u9054\u3067\u304D\u306A\u3044\u305F\u3081\u3001\u30C7\u30A3\u30EC\u30AF\u30C8\u30EA\u304B\u3089\u306E\u4F5C\u6210\u306F\u3067\u304D\u307E\u305B\u3093\u3002\u30ED\u30FC\u30AB\u30EB\u306B\u4F5C\u6210\u3057\u305F\u3046\u3048\u3067\u3001\u9023\u643A\u30BF\u30D6\u304B\u3089\u9023\u643A\u3057\u3066\u304F\u3060\u3055\u3044\u3002({reason})",catalogObservedAt:"\u3053\u306E\u4E00\u89A7\u306F {at} \u6642\u70B9\u306E\u30C7\u30A3\u30EC\u30AF\u30C8\u30EA\u3067\u3059\u3002",catalogStale:"\u26A0 \u3053\u306E\u4E00\u89A7\u306F {at} \u6642\u70B9\u306E\u3082\u306E\u3067\u3001\u66F4\u65B0\u304C\u6EDE\u3063\u3066\u3044\u307E\u3059\u3002\u305D\u308C\u4EE5\u964D\u306B\u4F5C\u3089\u308C\u305F\u30B0\u30EB\u30FC\u30D7\u306F\u51FA\u3066\u304D\u307E\u305B\u3093\u3002",catalogFailures:{denied:"\u3053\u306E\u914D\u5099\u306E\u8CC7\u683C\u60C5\u5831\u304C\u4E0A\u6D41\u306B\u62D2\u5426\u3055\u308C\u307E\u3057\u305F",rateLimited:"\u4E0A\u6D41\u304C\u3053\u306E\u914D\u5099\u306E\u547C\u3073\u51FA\u3057\u3092\u5236\u9650\u3057\u3066\u3044\u307E\u3059",upstreamError:"\u4E0A\u6D41\u304C\u5185\u90E8\u30A8\u30E9\u30FC\u3092\u8FD4\u3057\u307E\u3057\u305F",neverObserved:"\u4E0A\u6D41\u3092\u307E\u3060\u4E00\u5EA6\u3082\u8AAD\u3081\u3066\u3044\u307E\u305B\u3093 (\u540C\u671F\u30B8\u30E7\u30D6\u304C\u52D5\u3044\u3066\u3044\u306A\u3044\u53EF\u80FD\u6027\u304C\u3042\u308A\u307E\u3059)",unknown:"\u7406\u7531\u306F\u30B5\u30FC\u30D0\u30FC\u306E\u30ED\u30B0\u306B\u51FA\u3066\u3044\u307E\u3059"},createUpstreamNotice:"\u30B0\u30EB\u30FC\u30D7\u306E\u4F5C\u6210\u3068\u9023\u643A\u3092 1 \u624B\u3067\u884C\u3044\u307E\u3059\u3002\u4EE5\u5F8C\u3001\u6240\u5C5E\u306F\u4E0A\u6D41\u304C\u6240\u6709\u3057 \u2014 \u3053\u306E\u753B\u9762\u304B\u3089\u306F\u540D\u79F0\u30FB\u8AAC\u660E\u306E\u5909\u66F4\u3082\u524A\u9664\u3082\u3067\u304D\u306A\u304F\u306A\u308A\u307E\u3059\u3002\u623B\u3059\u624B\u6BB5\u306F\u9023\u643A\u89E3\u9664\u3060\u3051\u3067\u3001\u305D\u308C\u306F\u30E1\u30F3\u30D0\u30FC\u53F0\u5E33\u3068\u30B0\u30EB\u30FC\u30D7\u5358\u4F4D\u306E\u30B5\u30A4\u30F3\u30A4\u30F3\u8A31\u53EF\u3092\u6D88\u3057\u307E\u3059\u3002",openMembers:"\u30E1\u30F3\u30D0\u30FC",openMembersAria:"{group} \u306E\u30E1\u30F3\u30D0\u30FC\u3092\u8868\u793A",title:"\u30E6\u30FC\u30B6\u30FC\u30B0\u30EB\u30FC\u30D7\u7BA1\u7406",searchPlaceholder:"\u30B0\u30EB\u30FC\u30D7\u540D\u3084\u30AD\u30FC\u3067\u691C\u7D22...",searchLabel:"\u30B0\u30EB\u30FC\u30D7\u3092\u691C\u7D22",addGroup:"\uFF0B \u30B0\u30EB\u30FC\u30D7\u8FFD\u52A0",editGroup:"\u30B0\u30EB\u30FC\u30D7\u7DE8\u96C6",groupKey:"\u30B0\u30EB\u30FC\u30D7\u30AD\u30FC",name:"\u540D\u79F0",description:"\u8AAC\u660E",memberCountTemplate:"\u6240\u5C5E {count} \u540D",confirmDelete:"{group} \u3092\u524A\u9664\u3057\u307E\u3059\u304B\uFF1F \u6240\u5C5E {count} \u4EF6\u3082\u4E00\u7DD2\u306B\u6D88\u3048\u3001\u3053\u306E\u30B0\u30EB\u30FC\u30D7\u3067\u3057\u304B\u30B5\u30A4\u30F3\u30A4\u30F3\u3067\u304D\u306A\u3044\u4EBA\u306F\u30B5\u30A4\u30F3\u30A4\u30F3\u3067\u304D\u306A\u304F\u306A\u308A\u307E\u3059\u3002",confirmCreateLinked:"{group} \u3092\u4F5C\u6210\u3057\u3001\u305D\u306E\u6240\u5C5E\u3092 {upstream} \u306B\u59D4\u306D\u307E\u3059\u304B\uFF1F \u4EE5\u5F8C\u3053\u306E\u753B\u9762\u304B\u3089\u540D\u79F0\u5909\u66F4\u3068\u524A\u9664\u304C\u3067\u304D\u306A\u304F\u306A\u308A\u307E\u3059\u3002",editGroupAria:"{group} \u3092\u7DE8\u96C6",deleteGroupAria:"{group} \u3092\u524A\u9664",noDescription:"\u8AAC\u660E\u306A\u3057",groupKeyPlaceholder:"\u4F8B: dev-team",namePlaceholder:"\u4F8B: \u958B\u767A\u30C1\u30FC\u30E0",empty:"\u30E6\u30FC\u30B6\u30FC\u30B0\u30EB\u30FC\u30D7\u304C\u767B\u9332\u3055\u308C\u3066\u3044\u307E\u305B\u3093"},groupMembersView:{title:"\u30B0\u30EB\u30FC\u30D7\u30E1\u30F3\u30D0\u30FC\u7BA1\u7406",searchLabel:"\u5229\u7528\u8005\u3092\u691C\u7D22",searchPlaceholder:"\u8868\u793A\u540D\u3084 Email \u3067\u691C\u7D22...",onlyMembers:"\u6240\u5C5E\u306E\u307F\u8868\u793A ({count} \u540D)",emptyFiltered:"\u691C\u7D22\u6761\u4EF6\u306B\u4E00\u81F4\u3059\u308B\u5229\u7528\u8005\u306F\u3044\u307E\u305B\u3093",summary:"{total} \u540D\u306E\u3046\u3061 {shown} \u540D\u3092\u8868\u793A\u4E2D\u3002\u3053\u306E\u30B0\u30EB\u30FC\u30D7\u306E\u6240\u5C5E\u306F {members} \u540D\u3067\u3059\u3002",selectGroup:"\u30B0\u30EB\u30FC\u30D7\u9078\u629E",selectPrompt:"\u30B0\u30EB\u30FC\u30D7\u3092\u9078\u629E\u3057\u3066\u304F\u3060\u3055\u3044",noGroups:"\u30B0\u30EB\u30FC\u30D7\u304C\u307E\u3060 1 \u3064\u3082\u3042\u308A\u307E\u305B\u3093\u3002\u5148\u306B\u30B0\u30EB\u30FC\u30D7\u30BF\u30D6\u3067\u4F5C\u6210\u3057\u3066\u304F\u3060\u3055\u3044\u3002",emptyNoMembers:"\u3053\u306E\u30B0\u30EB\u30FC\u30D7\u306B\u306F\u307E\u3060\u30E1\u30F3\u30D0\u30FC\u304C\u3044\u307E\u305B\u3093\u3002\u300C\u6240\u5C5E\u306E\u307F\u8868\u793A\u300D\u306E\u30C1\u30A7\u30C3\u30AF\u3092\u5916\u3059\u3068\u8FFD\u52A0\u3067\u304D\u307E\u3059\u3002",noUsers:"\u5229\u7528\u8005\u304C\u307E\u3060 1 \u4EBA\u3082\u767B\u9332\u3055\u308C\u3066\u3044\u307E\u305B\u3093\u3002\u5148\u306B\u30E6\u30FC\u30B6\u30FC\u30BF\u30D6\u3067\u8FFD\u52A0\u3057\u3066\u304F\u3060\u3055\u3044\u3002",deepLinkMissed:"\u30B0\u30EB\u30FC\u30D7 {id} \u304C\u898B\u3064\u304B\u308A\u307E\u305B\u3093\u3067\u3057\u305F (\u524A\u9664\u3055\u308C\u305F\u53EF\u80FD\u6027\u304C\u3042\u308A\u307E\u3059)\u3002\u4EE3\u308F\u308A\u306B {group} \u3092\u8868\u793A\u3057\u3066\u3044\u307E\u3059\u3002",actionAdd:"\u8FFD\u52A0",actionRemove:"\u9664\u5916",actionAddAria:"{user} \u3092\u3053\u306E\u30B0\u30EB\u30FC\u30D7\u3078\u8FFD\u52A0",actionRemoveAria:"{user} \u3092\u3053\u306E\u30B0\u30EB\u30FC\u30D7\u304B\u3089\u9664\u5916",upstreamNotice:"\u3053\u306E\u30B0\u30EB\u30FC\u30D7\u306E\u6240\u5C5E\u306F\u4E0A\u6D41\u30C7\u30A3\u30EC\u30AF\u30C8\u30EA\u304C\u6240\u6709\u3057\u3066\u3044\u307E\u3059\u3002\u5909\u66F4\u306F\u4E0A\u6D41\u3067\u884C\u3063\u3066\u304F\u3060\u3055\u3044 (\u3053\u3053\u3067\u5909\u3048\u3066\u3082\u6B21\u306E\u540C\u671F\u3067\u5143\u306B\u623B\u308A\u307E\u3059)\u3002",membersOfTemplate:"{group} \u306E\u6240\u5C5E\u30E1\u30F3\u30D0\u30FC",groupKeyLabel:"\u30B0\u30EB\u30FC\u30D7\u30AD\u30FC"},allowlistView:{title:"\u30B5\u30A4\u30F3\u30A4\u30F3\u8A31\u53EF\u30EA\u30B9\u30C8",addEntry:"\uFF0B \u30D1\u30BF\u30FC\u30F3\u8FFD\u52A0",pattern:"\u30D1\u30BF\u30FC\u30F3 (\u4F8B: @example.com \u307E\u305F\u306F user@example.com)",type:"\u7A2E\u5225",emailType:"\u30E1\u30FC\u30EB\u30A2\u30C9\u30EC\u30B9\u5B8C\u5168\u4E00\u81F4",domainType:"\u30C9\u30E1\u30A4\u30F3\u4E00\u81F4",emailTypeShort:"\u30E1\u30FC\u30EB",domainTypeShort:"\u30C9\u30E1\u30A4\u30F3",groupTypeShort:"\u30B0\u30EB\u30FC\u30D7",target:"\u5BFE\u8C61",description:"\u8AAC\u660E / \u5099\u8003",deploymentOwner:"\u914D\u5099\u5171\u901A",confirmDelete:"{target} \u3092\u8A31\u53EF\u30EA\u30B9\u30C8\u304B\u3089\u524A\u9664\u3057\u307E\u3059\u304B\uFF1F \u3053\u308C\u3067\u3057\u304B\u30B5\u30A4\u30F3\u30A4\u30F3\u3067\u304D\u306A\u3044\u4EBA\u306F\u30ED\u30B0\u30A4\u30F3\u3067\u304D\u306A\u304F\u306A\u308A\u307E\u3059\u3002",deleteAria:"{target} \u306E\u8A31\u53EF\u3092\u524A\u9664",empty:"\u30B5\u30A4\u30F3\u30A4\u30F3\u8A31\u53EF\u30EA\u30B9\u30C8\u306B\u767B\u9332\u304C\u3042\u308A\u307E\u305B\u3093\u3002"},directoryView:{title:"\u30C7\u30A3\u30EC\u30AF\u30C8\u30EA\u540C\u671F",membershipMode:"\u6240\u5C5E\u306E\u5C55\u958B",directMode:"\u76F4\u63A5\u6240\u5C5E\u306E\u307F",transitiveMode:"\u5165\u308C\u5B50\u3092\u5C55\u958B",lastSynced:"\u6700\u7D42\u540C\u671F",neverSynced:"\u672A\u5B9F\u884C",unresolvedTemplate:"{count} \u4EF6\u304C\u672A\u89E3\u6C7A",syncPaused:"\u505C\u6B62\u4E2D",syncEnabled:"\u6709\u52B9",syncNow:"\u4ECA\u3059\u3050\u540C\u671F",syncQueued:"\u540C\u671F\u3092\u8981\u6C42\u3057\u307E\u3057\u305F",syncAlreadyPending:"\u3053\u306E\u7BC4\u56F2\u306E\u540C\u671F\u8981\u6C42\u306F\u65E2\u306B\u5F85\u6A5F\u4E2D\u306E\u305F\u3081\u3001\u65B0\u3057\u304F\u306F\u7A4D\u307F\u307E\u305B\u3093\u3067\u3057\u305F\u3002\u3044\u3064\u307E\u3067\u3082\u5B8C\u4E86\u3057\u306A\u3044\u5834\u5408\u3001\u540C\u671F\u30B8\u30E7\u30D6\u304C\u52D5\u3044\u3066\u3044\u306A\u3044\u53EF\u80FD\u6027\u304C\u3042\u308A\u307E\u3059\u3002",linkSyncNotQueued:"\u9023\u643A\u306F\u4F5C\u6210\u3057\u307E\u3057\u305F\u304C\u3001\u540C\u671F\u8981\u6C42\u3092\u7A4D\u3081\u307E\u305B\u3093\u3067\u3057\u305F\u3002\u30C7\u30A3\u30EC\u30AF\u30C8\u30EA\u9023\u643A\u30BF\u30D6\u306E\u300C\u4ECA\u3059\u3050\u540C\u671F\u300D\u3067\u8981\u6C42\u3057\u3066\u304F\u3060\u3055\u3044\u3002",staleWarning:"\u540C\u671F\u304C\u6EDE\u3063\u3066\u3044\u307E\u3059\u3002\u5B9F\u884C\u3055\u308C\u308B\u307E\u3067\u3001\u4E0A\u6D41\u304B\u3089\u5916\u308C\u305F\u4EBA\u306E\u30A2\u30AF\u30BB\u30B9\u306F\u6B8B\u308A\u7D9A\u3051\u307E\u3059\u3002",disabledWarning:"\u3053\u306E\u914D\u5099\u3067\u306F\u30C7\u30A3\u30EC\u30AF\u30C8\u30EA\u540C\u671F\u304C\u7D50\u7DDA\u3055\u308C\u3066\u3044\u307E\u305B\u3093\u3002\u65E2\u5B58\u306E\u6240\u5C5E\u306F\u305D\u306E\u307E\u307E\u6709\u52B9\u3067\u3001\u66F4\u65B0\u3060\u3051\u304C\u6B62\u307E\u3063\u3066\u3044\u307E\u3059\u3002",pausedTemplate:"\u9023\u643A {total} \u4EF6\u306E\u3046\u3061 {paused} \u4EF6\u304C\u505C\u6B62\u4E2D",erroredTemplate:"\u76F4\u8FD1\u306E\u540C\u671F\u306B\u5931\u6557\u3057\u305F\u30B0\u30EB\u30FC\u30D7: {groups}",erroredItemTemplate:"{group}: {reason}",listSeparator:" / ",oldestSyncedTemplate:"\u6700\u3082\u53E4\u3044\u540C\u671F\u6210\u529F: {at}",pendingTemplate:"{count} \u4EF6\u306E\u540C\u671F\u8981\u6C42\u304C\u672A\u51E6\u7406",nothingToLink:"\u3059\u3079\u3066\u306E\u30B0\u30EB\u30FC\u30D7\u304C\u65E2\u306B\u30C7\u30A3\u30EC\u30AF\u30C8\u30EA\u3068\u9023\u643A\u3057\u3066\u3044\u307E\u3059\u3002",noGroupsToLink:"\u30B0\u30EB\u30FC\u30D7\u304C\u307E\u3060 1 \u3064\u3082\u3042\u308A\u307E\u305B\u3093\u3002\u5148\u306B\u30B0\u30EB\u30FC\u30D7\u30BF\u30D6\u3067\u4F5C\u6210\u3057\u3066\u304F\u3060\u3055\u3044\u3002",notWiredNotice:"\u3053\u306E\u914D\u5099\u3067\u306F\u30C7\u30A3\u30EC\u30AF\u30C8\u30EA\u540C\u671F\u304C\u7D50\u7DDA\u3055\u308C\u3066\u3044\u306A\u3044\u305F\u3081\u3001\u3053\u3053\u304B\u3089\u9023\u643A\u306E\u4F5C\u6210\u30FB\u5909\u66F4\u306F\u3067\u304D\u307E\u305B\u3093\u3002",syncNowAria:"{group} \u3092\u4ECA\u3059\u3050\u540C\u671F",syncQueuedAria:"{group} \u306E\u540C\u671F\u3092\u8981\u6C42\u6E08\u307F",pauseAria:"{group} \u306E\u540C\u671F\u3092\u4E00\u6642\u505C\u6B62",resumeAria:"{group} \u306E\u540C\u671F\u3092\u518D\u958B",allowGroupAria:"{group} \u306E\u30E1\u30F3\u30D0\u30FC\u306E\u30B5\u30A4\u30F3\u30A4\u30F3\u3092\u8A31\u53EF",disallowGroupAria:"{group} \u306E\u30E1\u30F3\u30D0\u30FC\u306E\u30B5\u30A4\u30F3\u30A4\u30F3\u8A31\u53EF\u3092\u5916\u3059",unlinkAria:"{group} \u306E\u30C7\u30A3\u30EC\u30AF\u30C8\u30EA\u9023\u643A\u3092\u89E3\u9664",confirmDisallow:"{group} \u306E\u30B5\u30A4\u30F3\u30A4\u30F3\u8A31\u53EF\u3092\u5916\u3057\u307E\u3059\u304B\uFF1F \u3053\u308C\u3067\u3057\u304B\u30B5\u30A4\u30F3\u30A4\u30F3\u3067\u304D\u306A\u3044\u4EBA\u306F\u30ED\u30B0\u30A4\u30F3\u3067\u304D\u306A\u304F\u306A\u308A\u307E\u3059\u3002",link:"\u30C7\u30A3\u30EC\u30AF\u30C8\u30EA\u306E\u30B0\u30EB\u30FC\u30D7\u3068\u9023\u643A\u3059\u308B",unlink:"\u9023\u643A\u3092\u89E3\u9664",externalKey:"\u4E0A\u6D41\u30B0\u30EB\u30FC\u30D7",empty:"\u30C7\u30A3\u30EC\u30AF\u30C8\u30EA\u3068\u9023\u643A\u3057\u3066\u3044\u308B\u30B0\u30EB\u30FC\u30D7\u306F\u3042\u308A\u307E\u305B\u3093",selectGroup:"\u9023\u643A\u3059\u308B\u30B0\u30EB\u30FC\u30D7",pickUpstreamPlaceholder:"\u540D\u524D\u304B\u30A2\u30C9\u30EC\u30B9\u3067\u691C\u7D22...",pickerNoOptions:"\u4E00\u81F4\u3059\u308B\u30B0\u30EB\u30FC\u30D7\u304C\u3042\u308A\u307E\u305B\u3093",pickerClear:"\u9078\u629E\u3092\u89E3\u9664",pickerToggle:"\u30B0\u30EB\u30FC\u30D7\u4E00\u89A7\u3092\u958B\u304F",pickerSelected:"\u9078\u629E\u4E2D: {value}",pickerAvailable:"\u5019\u88DC {count} \u4EF6",externalKeyPlaceholder:"\u4F8B: dev-team@example.com",confirmLink:"{group} \u306E\u6240\u5C5E\u3092 {upstream} \u306B\u59D4\u306D\u307E\u3059\u304B\uFF1F \u4EE5\u5F8C\u3053\u306E\u753B\u9762\u304B\u3089\u540D\u79F0\u5909\u66F4\u30FB\u524A\u9664\u30FB\u30E1\u30F3\u30D0\u30FC\u7DE8\u96C6\u304C\u3067\u304D\u306A\u304F\u306A\u308A\u307E\u3059\u3002",confirmUnlink:"{group} \u3068 {upstream} \u306E\u9023\u643A\u3092\u89E3\u9664\u3057\u307E\u3059\u304B\uFF1F \u30E1\u30F3\u30D0\u30FC\u53F0\u5E33\u3068\u30B0\u30EB\u30FC\u30D7\u5358\u4F4D\u306E\u30B5\u30A4\u30F3\u30A4\u30F3\u8A31\u53EF\u304C\u5931\u308F\u308C\u307E\u3059\u3002",pause:"\u4E00\u6642\u505C\u6B62",resume:"\u518D\u958B",allowGroup:"\u30B5\u30A4\u30F3\u30A4\u30F3\u3092\u8A31\u53EF",disallowGroup:"\u30B5\u30A4\u30F3\u30A4\u30F3\u8A31\u53EF\u3092\u5916\u3059",groupOptionTemplate:"{name} ({key})"}};function je(e){if(e===void 0)return j.locale;try{return We(e)}catch(o){throw o instanceof RangeError?new RangeError(`[auth-react-router] labels.locale is the UI language, not a BCP 47 tag (dates and sorting read labels.formatLocale): ${o.message}`,{cause:o}):o}}function he(e){let o=j;return e?{title:e.title??o.title,locale:je(e.locale),formatLocale:e.formatLocale??o.formatLocale,timeZone:e.timeZone??o.timeZone,heading:e.heading??o.heading,common:{...o.common,...e.common},errors:{...o.errors,...e.errors},permissions:{...o.permissions,...e.permissions},tabs:{...o.tabs,...e.tabs},usersView:{...o.usersView,...e.usersView},groupsView:{...o.groupsView,...e.groupsView},groupMembersView:{...o.groupMembersView,...e.groupMembersView},allowlistView:{...o.allowlistView,...e.allowlistView},directoryView:{...o.directoryView,...e.directoryView}}:o}import{data as de}from"react-router";function v(e,o){return e.replace(/\{(\w+)\}/g,(n,p)=>Object.hasOwn(o,p)?String(o[p]):n)}function J(e,o){let n=/(?:Z|[+-]\d{2}:?\d{2})$/.test(e)?e:`${e}Z`;try{return new Intl.DateTimeFormat(o.formatLocale,{timeZone:o.timeZone,dateStyle:"medium",timeStyle:"short"}).format(new Date(n))}catch{return e}}function Tt(e){let o=e?.users??[{id:1,email:"admin@example.com",displayName:"\u30B7\u30B9\u30C6\u30E0\u7BA1\u7406\u8005",isActive:!0},{id:2,email:"user1@example.com",displayName:"\u958B\u767A \u592A\u90CE",isActive:!0},{id:3,email:"user2@example.com",displayName:"\u55B6\u696D \u82B1\u5B50",isActive:!0}],n=e?.groups??[{id:1,groupKey:"dev-team",name:"\u958B\u767A\u30C1\u30FC\u30E0",description:"\u30B7\u30B9\u30C6\u30E0\u958B\u767A\u62C5\u5F53\u30B0\u30EB\u30FC\u30D7",isActive:!0,readOnly:!1},{id:2,groupKey:"sales-dept",name:"\u55B6\u696D\u90E8",description:"\u55B6\u696D\u30BD\u30EA\u30E5\u30FC\u30B7\u30E7\u30F3\u62C5\u5F53",isActive:!0,readOnly:!1}],p=e?.groupMembers??[{id:1,groupId:1,userId:2},{id:2,groupId:2,userId:3}],c=e?.allowlist??[{id:1,pattern:"admin@example.com",type:"email",description:"\u521D\u671F\u7BA1\u7406\u8005",owner:{kind:"tenant",tenantId:"default"},readOnly:!1},{id:2,pattern:"@example.com",type:"domain",description:"\u793E\u5185\u30C9\u30E1\u30A4\u30F3",owner:{kind:"tenant",tenantId:"default"},readOnly:!1}];return{async listUsers(){return[...o]},async createUser(r){let i={id:Math.max(...o.map(y=>y.id),0)+1,email:r.email,displayName:r.displayName,isActive:!0};return o.push(i),i},async updateUser(r,i){let y=o.findIndex(w=>w.id===r);if(y===-1)throw new B(`User not found: ${r}`);return o[y]={...o[y],displayName:i.displayName,email:i.email},o[y]},async toggleUserActive(r,i){let y=o.findIndex(w=>w.id===r);if(y===-1)throw new B(`User not found: ${r}`);return o[y]={...o[y],isActive:i},o[y]},async listGroups(){return[...n]},async createGroup(r){let i={id:Math.max(...n.map(y=>y.id),0)+1,groupKey:r.groupKey,name:r.name,description:r.description,isActive:!0,readOnly:!1};return n.push(i),i},async updateGroup(r,i){let y=n.findIndex(w=>w.id===r);if(y===-1)throw new B(`Group not found: ${r}`);return n[y]={...n[y],name:i.name,description:i.description},n[y]},async deleteGroup(r){n=n.filter(i=>i.id!==r),p=p.filter(i=>i.groupId!==r)},async listGroupMembers(){return[...p]},async addGroupMember(r,i){let y=p.find(C=>C.groupId===r&&C.userId===i);if(y)return y;let w={id:Math.max(...p.map(C=>C.id),0)+1,groupId:r,userId:i};return p.push(w),w},async removeGroupMember(r,i){p=p.filter(y=>!(y.groupId===r&&y.userId===i))},async listAllowlist(){return[...c]},async addAllowlistEntry(r){let i={id:Math.max(...c.map(y=>y.id),0)+1,pattern:r.pattern,type:r.type,description:r.description,owner:{kind:"tenant",tenantId:"default"},readOnly:!1};return c.push(i),i},async removeAllowlistEntry(r){c=c.filter(i=>i.id!==r)},async addAllowlistGroup(r,i){let y=n.find(w=>w.id===r);if(!y)throw new B(`Group not found: ${r}`);c=[...c,{id:Math.max(...c.map(w=>w.id),0)+1,type:"group",groupId:r,groupKey:y.groupKey,groupName:y.name,description:i,owner:{kind:"tenant",tenantId:"default"},readOnly:!1}]},async removeAllowlistGroup(r){c=c.filter(i=>!(i.type==="group"&&i.id===r))},async linkDirectoryGroup(){throw new B("This in-memory store has no upstream directory; inject a real store to link groups.")},async createLinkedGroup(){throw new B("This in-memory store has no upstream directory; inject a real store to create a linked group.")},async unlinkDirectoryGroup(){throw new B("This in-memory store has no upstream directory; inject a real store to unlink groups.")},async setDirectorySyncEnabled(){throw new B("This in-memory store has no upstream directory; inject a real store to pause synchronization.")},async requestDirectorySync(){throw new B("This in-memory store has no upstream directory; inject a real store to request a sync.")},async getDirectoryStatus(){return{isEnabled:!1,provider:"",linkedGroupCount:0,isStale:!1,pausedGroupCount:0,stalenessThresholdSec:0,erroredGroupIds:[],pendingRequestCount:0}}}}function He(e,o){let n=Number.isFinite(o)&&o>0?o:_e;return(Date.now()-e.getTime())/1e3>n}var Qe=64*1024,_e=5400;async function we(e,o,n,p){if(!e)return{kind:"not-wired"};if(!o)return{kind:"not-wired"};try{let{groups:c,observedAt:r}=await e.listGroups(n);return r===null||!Number.isFinite(r.getTime())?{kind:"unavailable",reason:"neverObserved"}:{kind:"ready",groups:c,observedAt:r.toISOString(),isStale:He(r,p)}}catch(c){return console.error("[@aiquants/auth-react-router] directoryCatalog.listGroups failed; the picker falls back to manual entry:",c),{kind:"unavailable",reason:tt(c)}}}function F(e){return e.trim().toLowerCase()}var B=class extends Error{constructor(n){super(n);this.operatorFacing=!0;this.name="UserAdminOperatorError"}};function Ze(e){return e instanceof B||typeof e=="object"&&e!==null&&e.operatorFacing===!0&&e instanceof Error}var $=class extends Error{constructor(n,p={}){super(n);this.labelKey=n;this.values=p;this.name="UserAdminInputError"}};function Ye(e){return typeof e=="object"&&e!==null&&e.status===403}function Je(e){let o=String(e.get("type")??"");if(o==="email"||o==="domain")return o;throw new $("invalidAllowlistType")}var Xe=["users","groups","group_members","allowlist","directory"];function et(e){let o=e.replace(/\.data$/,"").split("/").filter(Boolean),n=o[o.length-1]??"";return Xe.includes(n)?n:"users"}var ue=new Map([["createUser",["create"]],["updateUser",["update"]],["toggleUserActive",["update"]],["createGroup",["create"]],["updateGroup",["update"]],["deleteGroup",["delete"]],["addGroupMember",["create"]],["removeGroupMember",["delete"]],["addAllowlistEntry",["create"]],["removeAllowlistEntry",["delete"]],["addAllowlistGroup",["create"]],["removeAllowlistGroup",["delete"]],["createLinkedGroup",["create","update","delete"]],["linkDirectoryGroup",["update","create","delete"]],["unlinkDirectoryGroup",["update","delete"]],["setDirectorySyncEnabled",["update"]],["requestDirectorySync",["update"]],["catalog",["update","create","delete"]]]);function Vt(){return[...ue.keys()]}function Et(e){return ue.get(e)??[]}function tt(e){let o=typeof e=="object"&&e!==null&&"status"in e?e.status:void 0;return typeof o!="number"?"unknown":o===401||o===403?"denied":o===429?"rateLimited":o>=500?"upstreamError":"unknown"}function z(e,o){let n=e.get(o),p=Number(n);if(n===null||String(n).trim()===""||!Number.isInteger(p)||p<=0)throw new $("invalidField",{field:o});return p}function K(e,o){let n=String(e.get(o)??"").trim();if(n==="")throw new $("invalidField",{field:o});return n}function rt(e,o){let n=String(e.get(o)??"");if(n!=="true"&&n!=="false")throw new $("invalidField",{field:o});return n==="true"}function xe(e){let o=String(e.get("membershipMode")??"");if(o!=="direct"&&o!=="transitive")throw new $("invalidField",{field:"membershipMode"});return o}function ie(e,o){let n=String(e.get(o)??"").trim();return n===""?void 0:n}function Pt(e){let o=he(e.labels);async function n(l){if(!e.resolveActor)return"user-admin";try{return await e.resolveActor(l)||"user-admin"}catch(s){return console.error("[@aiquants/auth-react-router] resolveActor failed; recording the request as an unnamed actor:",s),"user-admin"}}async function p(l,s){try{return await e.store.requestDirectorySync(l,await n(s))}catch(x){return console.error(`[@aiquants/auth-react-router] the link for group ${l} was created, but its sync request could not be queued:`,x),"not-queued"}}async function c(l){if(!e.directoryCatalog)return!1;let s=ue.get("catalog");if(s===void 0||s.length===0)return!1;try{for(let x of s)await e.guards.requireAccess(l,{action:x,intent:"catalog"});return!0}catch(x){try{e.guards.onDenied?.({intent:"catalog",actions:s,error:x})}catch(d){console.error("[@aiquants/auth-react-router] onDenied threw; the denial itself still stands:",d)}return!1}}async function r({request:l}){await e.guards.requireAccess(l,{action:"read",intent:"loader"});let s=et(new URL(l.url).pathname),x=(s==="groups"||s==="directory")&&await c(l),[d,b,S,h,f,G]=await Promise.all([e.store.listUsers(),e.store.listGroups(),e.store.listGroupMembers(),e.store.listAllowlist(),e.store.getDirectoryStatus(),e.getMyPermissions?e.getMyPermissions(l).catch(E=>(console.error("[@aiquants/auth-react-router] getMyPermissions failed; rendering the permission badge as unknown:",E),null)):Promise.resolve(null)]),U=await we(e.directoryCatalog,x,l,f.stalenessThresholdSec);return{resourceLabels:e.resourceLabels,segment:s,users:d,groups:b,groupMembers:S,allowlist:h,directoryStatus:f,myPermissions:G,catalog:U,labels:o}}async function i({request:l}){let s=Number(l.headers.get("content-length")??Number.NaN);if(Number.isFinite(s)&&s>Qe)return de({ok:!1,error:o.errors.requestTooLarge},{status:413});let x=await l.formData(),d=String(x.get("intent")??""),b=ue.get(d);if(!b)return de({ok:!1,error:o.errors.unknownIntent},{status:400});let S=f=>Ye(f),h=f=>{try{e.guards.onDenied?.({intent:d,actions:b,error:f})}catch{}return de({ok:!1,error:o.errors.forbidden},{status:403})};try{for(let f of b)await e.guards.requireAccess(l,{action:f,intent:d})}catch(f){if(!S(f))throw f;return h(f)}try{return await M(d,x,l)}catch(f){if(S(f))return h(f);if(f instanceof Response)throw f;if(f instanceof $){let G=f.values.field,U=typeof G=="string"?{...f.values,field:o.errors.fieldNames[G]??G}:f.values,E=o.errors[f.labelKey];return{ok:!1,error:v(typeof E=="string"?E:String(f.labelKey),U)}}return console.error(`[@aiquants/auth-react-router] intent "${d}" failed:`,f),{ok:!1,error:Ze(f)?f.message:o.errors.unexpected}}}function y(l,s,x){let d=String(l.get("externalId")??"").trim();if(x.kind==="ready"){if(d!==""&&x.groups.some(h=>h.externalId===d))return d;let b=F(s),S=x.groups.find(h=>F(h.externalKey)===b);if(S)return S.externalId}return d===""?s:d}function w(l){let s=l.provider.trim();if(!l.isEnabled||s==="")throw new $("directoryDisabled");return s}async function C(l,s){let x=F(l),d=F(s),S=(await e.store.listGroups()).find(h=>h.externalLink!==void 0&&(F(h.externalLink.externalId)===x||F(h.externalLink.externalKey)===d));if(S)throw new $("alreadyLinked",{key:s,group:S.name})}function k(l,s,x){if(x.kind!=="ready")return;let d=F(l),b=F(s);if(!x.groups.some(S=>F(S.externalId)===d&&F(S.externalKey)===b))throw new $("unknownUpstream",{key:s})}async function M(l,s,x){let d=null,b=async()=>(d??(d=await e.store.getDirectoryStatus()),d),S=async()=>we(e.directoryCatalog,!0,x,(await b()).stalenessThresholdSec);if(l==="createUser")return await e.store.createUser({displayName:K(s,"displayName"),email:K(s,"email")}),{ok:!0};if(l==="updateUser")return await e.store.updateUser(z(s,"userId"),{displayName:K(s,"displayName"),email:K(s,"email")}),{ok:!0};if(l==="toggleUserActive"){let h=String(s.get("isActive")??"");if(h!=="true"&&h!=="false")throw new $("invalidField",{field:"isActive"});return await e.store.toggleUserActive(z(s,"userId"),h==="true"),{ok:!0}}if(l==="createGroup")return await e.store.createGroup({groupKey:K(s,"groupKey"),name:K(s,"name"),description:ie(s,"description")}),{ok:!0};if(l==="updateGroup")return await e.store.updateGroup(z(s,"groupId"),{name:K(s,"name"),description:ie(s,"description")}),{ok:!0};if(l==="deleteGroup")return await e.store.deleteGroup(z(s,"groupId")),{ok:!0};if(l==="addGroupMember")return await e.store.addGroupMember(z(s,"groupId"),z(s,"userId")),{ok:!0};if(l==="removeGroupMember")return await e.store.removeGroupMember(z(s,"groupId"),z(s,"userId")),{ok:!0};if(l==="addAllowlistEntry"){let h=Je(s);return await e.store.addAllowlistEntry({pattern:K(s,"pattern"),type:h,description:ie(s,"description")}),{ok:!0}}if(l==="addAllowlistGroup")return await e.store.addAllowlistGroup(z(s,"groupId"),ie(s,"description")),{ok:!0};if(l==="removeAllowlistGroup")return await e.store.removeAllowlistGroup(z(s,"entryId")),{ok:!0};if(l==="createLinkedGroup"){let h=K(s,"externalKey"),f=w(await b()),G=await S(),U=y(s,h,G);await C(U,h),k(U,h,G);let E=await e.store.createLinkedGroup({groupKey:K(s,"groupKey"),name:K(s,"name"),description:ie(s,"description"),provider:f,externalId:U,externalKey:h,membershipMode:xe(s)});return{ok:!0,syncRequest:await p(E.id,x)}}if(l==="linkDirectoryGroup"){let h=K(s,"externalKey"),f=w(await b()),G=await S(),U=y(s,h,G);await C(U,h),k(U,h,G);let E=z(s,"groupId");return await e.store.linkDirectoryGroup(E,{provider:f,externalId:U,externalKey:h,membershipMode:xe(s)}),{ok:!0,syncRequest:await p(E,x)}}if(l==="unlinkDirectoryGroup")return await e.store.unlinkDirectoryGroup(z(s,"groupId")),{ok:!0};if(l==="setDirectorySyncEnabled")return await e.store.setDirectorySyncEnabled(z(s,"groupId"),rt(s,"isSyncEnabled")),{ok:!0};if(l==="requestDirectorySync"){let h=String(s.get("groupId")??"").trim();return{ok:!0,syncRequest:await e.store.requestDirectorySync(h===""?null:z(s,"groupId"),await n(x))}}return l==="removeAllowlistEntry"?(await e.store.removeAllowlistEntry(z(s,"entryId")),{ok:!0}):(console.error(`[@aiquants/auth-react-router] intent "${l}" is in the permission table but has no handler`),de({ok:!1,error:o.errors.unknownIntent},{status:400}))}return{loader:r,action:i}}import{useEffect as ot,useRef as it}from"react";import{Link as nt,useLoaderData as at,useRevalidator as st}from"react-router";import{jsx as O,jsxs as X}from"react/jsx-runtime";var lt={intervalMs:3e3,maxMs:3e5};function dt(e,o){let n=st(),p=it(n.state);p.current=n.state;let{revalidate:c}=n,{intervalMs:r,maxMs:i}=o;ot(()=>{if(e<=0)return;let y=Date.now(),w=setInterval(()=>{if(Date.now()-y>=i){clearInterval(w);return}p.current==="idle"&&c()},r);return()=>clearInterval(w)},[e,r,i,c])}function ve({label:e,summary:o}){return X("span",{style:{display:"inline-flex",alignItems:"center",gap:"0.18rem",fontSize:"0.65rem",padding:"0.08rem 0.35rem",borderRadius:"9999px",backgroundColor:o.bgColor,color:o.color,border:`1px solid ${o.borderColor}`,fontWeight:600,lineHeight:"1.2"},children:[X("span",{children:[e,":"]}),O("span",{children:o.text})]})}function ut({status:e,labels:o,groups:n}){if(!e||e.linkedGroupCount===0)return null;let p=o.directoryView,c=[];if(e.isEnabled||c.push({id:"disabled",text:p.disabledWarning}),e.pausedGroupCount>0&&c.push({id:"paused",text:v(p.pausedTemplate,{paused:e.pausedGroupCount,total:e.linkedGroupCount})}),e.isStale){let r=e.oldestSyncedAt?J(e.oldestSyncedAt,o):p.neverSynced;c.push({id:"stale",text:`${p.staleWarning} ${v(p.oldestSyncedTemplate,{at:r})}`})}if(e.erroredGroupIds.length>0){let r=e.erroredGroupIds.map(i=>{let y=n.find(C=>C.id===i);if(!y)return v(o.common.idTemplate,{id:i});let w=y.externalLink?.syncError;return w?v(p.erroredItemTemplate,{group:y.name,reason:w}):y.name});c.push({id:"errored",text:v(p.erroredTemplate,{groups:r.join(p.listSeparator)})})}return e.pendingRequestCount>0&&c.push({id:"pending",text:v(p.pendingTemplate,{count:e.pendingRequestCount})}),c.length===0?null:X("section",{"aria-labelledby":"directory-sync-heading","data-testid":"directory-sync-banner",style:{display:"flex",flexDirection:"column",gap:"0.35rem",padding:"0.7rem 1rem",marginBottom:"1rem",borderRadius:"6px",border:"1px solid #fde68a",backgroundColor:"#fffbeb",color:"#92400e",fontSize:"0.85rem"},children:[O("h2",{id:"directory-sync-heading",style:{margin:0,fontSize:"0.9rem",fontWeight:700},children:p.title}),c.map(r=>O("span",{"data-directory-warning":r.id,children:r.text},r.id))]})}function ke({children:e,renderHeader:o,pendingSyncPolling:n,basePath:p}){let c=at();dt(c?.directoryStatus?.pendingRequestCount??0,n??lt);let r=c?.segment??"users",i=c?.labels??j,y=c?.myPermissions??null,w=c?.resourceLabels??{},C=b=>Object.hasOwn(w,b)?w[b]:b,k=[{key:"users",label:i.tabs.users,href:p},{key:"groups",label:i.tabs.groups,href:`${p}/groups`},{key:"group_members",label:i.tabs.groupMembers,href:`${p}/group_members`},{key:"allowlist",label:i.tabs.allowlist,href:`${p}/allowlist`}],M=(c?.groups??[]).some(b=>b.externalLink);(c?.directoryStatus?.isEnabled||(c?.directoryStatus?.linkedGroupCount??0)>0||M)&&k.push({key:"directory",label:i.tabs.directory,href:`${p}/directory`});let l=Object.entries(y??{}),s={text:i.permissions.unknown,color:"#92400e",bgColor:"#fffbeb",borderColor:"#fde68a"},x=b=>b===void 0?s:b.canWrite?{text:i.permissions.canWrite,color:"#047857",bgColor:"#ecfdf5",borderColor:"#a7f3d0"}:b.canRead?{text:i.permissions.canRead,color:"#1d4ed8",bgColor:"#eff6ff",borderColor:"#bfdbfe"}:b.canDelete?{text:i.permissions.canDelete,color:"#b91c1c",bgColor:"#fef2f2",borderColor:"#fecaca"}:{text:i.permissions.none,color:"#475569",bgColor:"#f1f5f9",borderColor:"#cbd5e1"},d=X("div",{style:{display:"flex",alignItems:"center",gap:"0.4rem"},"data-testid":"user-admin-header-annotation",children:[O("span",{style:{fontSize:"0.75rem",backgroundColor:"#e0f2fe",color:"#0369a1",padding:"2px 8px",borderRadius:"12px",fontWeight:600},children:i.heading}),X("div",{style:{display:"inline-flex",alignItems:"center",gap:"0.25rem",fontSize:"0.68rem",color:"#475569"},"data-testid":"user-admin-permissions-badge",children:[O("span",{style:{fontWeight:600,color:"#334155"},children:i.permissions.label}),O("span",{style:{display:"inline-flex",alignItems:"center",gap:"0.18rem"},children:l.length===0?O("span",{"data-testid":"user-admin-permission-unavailable",children:O(ve,{label:i.heading,summary:s})}):l.map(([b,S])=>O(ve,{label:C(b),summary:x(S)},b))})]})]});return X("div",{"data-testid":"user-admin-shell",style:{width:"100%",minHeight:"100vh",backgroundColor:"#f8fafc",padding:"1.5rem",boxSizing:"border-box"},children:[o?o({title:i.title,annotation:d}):X("div",{style:{marginBottom:"1.5rem",display:"flex",justifyContent:"space-between",alignItems:"center"},children:[O("h1",{style:{margin:0,fontSize:"1.5rem",fontWeight:700,color:"#0f172a"},children:i.title}),d]}),O("nav",{"aria-label":i.title,style:{display:"flex",gap:"0.5rem",marginBottom:"1.2rem",borderBottom:"2px solid #e2e8f0",paddingBottom:"0.5rem"},children:k.map(b=>{let S=r===b.key;return O(nt,{to:b.href,"data-testid":`user-admin-tab-${b.key}`,"aria-current":S?"page":void 0,style:{padding:"0.5rem 1rem",borderRadius:"6px 6px 0 0",fontSize:"0.88rem",fontWeight:S?700:500,color:S?"#0284c7":"#64748b",backgroundColor:S?"#ffffff":"transparent",textDecoration:"none",borderBottom:S?"3px solid #0284c7":"3px solid transparent",transition:"all 0.15s ease"},children:b.label},b.key)})}),O(ut,{status:c?.directoryStatus,labels:i,groups:c?.groups??[]}),O("main",{children:e})]})}import{getHighlightSegments as pt,SelectBox as Ce}from"@aiquants/select-box";import Ue,{useEffect as Le,useMemo as te,useRef as ee,useState as T}from"react";import{Link as ct,useFetcher as ne,useLoaderData as oe,useSearchParams as mt}from"react-router";import{Fragment as ge,jsx as t,jsxs as m}from"react/jsx-runtime";function H({result:e,id:o}){let n=e;return n?.ok!==!1||!n.error?null:t("div",{id:o,"data-testid":"user-admin-action-error",role:"alert",style:{gridColumn:"1 / -1",padding:"0.7rem 1rem",borderRadius:"6px",border:"1px solid #fecaca",backgroundColor:"#fef2f2",color:"#b91c1c",fontSize:"0.85rem"},children:n.error})}function ae(e){let o=ee(null),[n,p]=T(void 0),c=e.data===n?void 0:e.data;return Le(()=>{if(e.state!=="idle"||e.data===void 0)return;let y=o.current;y&&(o.current=null,e.data.ok===!0&&y(e.data))},[e.state,e.data]),{submit:(y,w)=>{o.current=w??null,p(void 0),e.submit(y,{method:"post"})},resetResult:()=>p(e.data),result:c}}function ce(e,o,n){let p=ee(null),c=ee(o);return c.current=o,Le(()=>{if(!e)return;let r=p.current,i=n?.current??document.activeElement,y=()=>{let k=Array.from(r?.querySelectorAll('a[href],button:not([disabled]),input:not([disabled]),select:not([disabled]),textarea:not([disabled]),[tabindex]:not([tabindex="-1"])')??[]).filter(l=>!(l.disabled||l.hasAttribute("inert"))&&l.closest("[inert]")===null&&l.getAttribute("aria-hidden")!=="true"),M=new Set;return k.filter(l=>{let s=l instanceof HTMLInputElement&&l.type==="radio"?l:null;return!s||s.name===""?!0:!s.checked&&k.some(x=>x instanceof HTMLInputElement&&x.type==="radio"&&x.name===s.name&&x.checked)||M.has(s.name)?!1:(M.add(s.name),!0)})},w=y();(w.find(k=>!k.hasAttribute("data-aqar-visually-hidden"))??w[0])?.focus();let C=k=>{if(k.key==="Escape"){if(k.isComposing||k.keyCode===229||k.defaultPrevented)return;k.preventDefault(),c.current();return}if(k.key!=="Tab")return;let M=y();if(M.length===0)return;let l=M[0],s=M[M.length-1],x=document.activeElement,d=!r?.contains(x);k.shiftKey&&(x===l||d)?(k.preventDefault(),s.focus()):!k.shiftKey&&(x===s||d)&&(k.preventDefault(),l.focus())};return document.addEventListener("keydown",C),()=>{document.removeEventListener("keydown",C),i?.focus?.()}},[e,n]),p}function Me(e,o,n){return e.kind!=="ready"?[]:e.groups.map(p=>{let c=o.get(F(p.externalId))??o.get(F(p.externalKey)),r=c!==void 0,i=p.memberCount===void 0?"":v(n.groupsView.upstreamOptionMembers,{count:p.memberCount});return{label:v(n.directoryView.groupOptionTemplate,{name:p.name,key:p.externalKey}),value:p.externalId,note:r?v(n.groupsView.upstreamAlreadyLinked,{group:c}):i,...r?{disabled:!0}:{},entry:p}})}function Ge({observedAt:e,isStale:o,labels:n}){return t("p",{"data-testid":"catalog-freshness","data-stale":o?"":void 0,style:{margin:"0.35rem 0 0 0",fontSize:"0.72rem",color:o?"#92400e":"#64748b"},children:v(o?n.groupsView.catalogStale:n.groupsView.catalogObservedAt,{at:J(e,n)})})}function me(e){return typeof e=="object"&&e!==null&&e.ok===!1&&typeof e.error=="string"}var gt={exact:{backgroundColor:"#d1fae5",color:"#064e3b",borderRadius:"2px",fontWeight:600},fuzzy:{backgroundColor:"#fef3c7",color:"#78350f",borderRadius:"2px",fontWeight:600}};function Re(e,o){if(typeof e!="object"||e===null)return null;let n=e.syncRequest;return n==="already-pending"?o.directoryView.syncAlreadyPending:n==="not-queued"?o.directoryView.linkSyncNotQueued:null}function Te(e){let o=new Map;for(let n of e){let p=n.externalLink;p&&(o.set(F(p.externalId),n.name),o.set(F(p.externalKey),n.name))}return o}function Ve(e,o){let n=typeof e.note=="string"?e.note:"";return m("span",{"data-aqar-upstream-option":!0,title:n===""?e.label:`${e.label} \u2014 ${n}`,style:{display:"flex",justifyContent:"space-between",alignItems:"baseline",gap:"0.75rem",width:"100%",minWidth:0},children:[t("span",{"data-aqar-upstream-option-label":!0,style:{overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap"},children:pt(e.label,o.query).map((p,c)=>t("span",{"data-aqar-match":p.matchType==="none"?void 0:p.matchType,style:p.matchType==="none"?void 0:gt[p.matchType],children:p.text},c))}),n===""?null:t("span",{"data-aqar-upstream-option-note":!0,style:{flexShrink:0,fontSize:"0.72rem",opacity:.75},children:n})]})}function Ee(e){let o=e.directoryView;return{noOptions:o.pickerNoOptions,clear:o.pickerClear,toggle:o.pickerToggle,selection:n=>v(o.pickerSelected,{value:n.map(p=>p.label).join(", ")}),status:n=>v(o.pickerAvailable,{count:n.count})}}function yt(e){try{return new Intl.Collator(e).compare}catch{return new Intl.Collator().compare}}function bt(e){return(e.split("@")[0]??e).toLowerCase().replace(/[^a-z0-9._-]+/g,"-").replace(/^-+|-+$/g,"")}function Pe(){let e=oe(),o=ne(),{submit:n,resetResult:p,result:c}=ae(o),r=e.labels??j,[i,y]=T(""),[w,C]=T(null),k=w?.kind==="edit"?w.user:null,M=w?.kind==="create",l=ee(null),s=(g,I)=>{l.current=I.currentTarget,p(),g.kind==="create"&&(d(""),S("")),C(g)},[x,d]=T(""),[b,S]=T(""),h=ce(M,()=>C(null),l),f=ce(k!==null,()=>C(null),l),G=o.state!=="idle",[U,E]=T({column:"displayName",ascending:!0}),V=yt(r.formatLocale),q=i.trim().toLowerCase(),A=e.users.filter(g=>g.displayName.toLowerCase().includes(q)||g.email.toLowerCase().includes(q)).slice().sort((g,I)=>{let Q=U.ascending?1:-1;return U.column==="id"?(g.id-I.id)*Q:U.column==="isActive"?(Number(g.isActive)-Number(I.isActive))*Q:V(g[U.column],I[U.column])*Q}),P=g=>{E(I=>I.column===g?{column:g,ascending:!I.ascending}:{column:g,ascending:!0})},u=g=>{G||g.isActive&&!window.confirm(v(r.usersView.confirmDeactivate,{user:g.displayName}))||n({intent:"toggleUserActive",userId:String(g.id),isActive:String(!g.isActive)})},L=g=>{if(g.preventDefault(),!(x&&b))return;let I=x,Q=b;n({intent:"createUser",displayName:I,email:Q},()=>{d(_=>_===I?"":_),S(_=>_===Q?"":_),C(null)})},D=g=>{g.preventDefault(),k&&n({intent:"updateUser",userId:String(k.id),displayName:k.displayName,email:k.email},()=>C(null))};return m("section",{"data-testid":"users-view-section",style:{display:"flex",flexDirection:"column",gap:"1rem"},children:[t("h2",{style:se,children:r.usersView.title}),!w&&t(H,{result:c}),m("div",{style:{display:"flex",justifyContent:"space-between",alignItems:"center",backgroundColor:"#ffffff",padding:"1rem",borderRadius:"8px",border:"1px solid #e2e8f0"},children:[t("input",{type:"text","aria-label":r.usersView.searchLabel,placeholder:r.usersView.searchPlaceholder,value:i,onChange:g=>y(g.target.value),"data-testid":"users-search-input",style:{padding:"6px 12px",borderRadius:"6px",border:"1px solid #cbd5e1",fontSize:"0.85rem",width:"260px"}}),t("button",{type:"button",onClick:g=>s({kind:"create"},g),"data-testid":"users-add-button",style:{padding:"6px 14px",borderRadius:"6px",backgroundColor:"#0284c7",color:"#ffffff",border:"none",fontSize:"0.85rem",fontWeight:600,cursor:"pointer"},children:r.usersView.addUser})]}),t("p",{"data-testid":"users-summary",role:"status","aria-live":"polite",style:{margin:0,fontSize:"0.78rem",color:"#475569"},children:v(r.usersView.listSummary,{shown:A.length,total:e.users.length})}),t("div",{style:{backgroundColor:"#ffffff",borderRadius:"8px",border:"1px solid #e2e8f0",overflow:"hidden"},children:m("table",{style:{width:"100%",borderCollapse:"collapse",fontSize:"0.85rem",textAlign:"left"},children:[t("thead",{children:m("tr",{style:{backgroundColor:"#f8fafc",borderBottom:"1px solid #e2e8f0",color:"#475569"},children:[[["id",r.common.id],["displayName",r.usersView.displayName],["email",r.usersView.email],["isActive",r.common.status]].map(([g,I])=>t("th",{scope:"col",style:{padding:0},"aria-sort":U.column===g?U.ascending?"ascending":"descending":"none",children:m("button",{type:"button","data-testid":`users-sort-${g}`,onClick:()=>P(g),"aria-label":v(U.column===g?U.ascending?r.usersView.sortedAscending:r.usersView.sortedDescending:r.usersView.sortBy,{column:I}),style:{width:"100%",padding:"10px 14px",textAlign:"left",background:"transparent",border:"none",cursor:"pointer",font:"inherit",color:"inherit",fontWeight:U.column===g?700:500},children:[I,t("span",{"aria-hidden":"true",style:{marginLeft:"4px",opacity:U.column===g?1:.35},children:U.column===g?U.ascending?"\u25B2":"\u25BC":"\u21C5"})]})},g)),t("th",{scope:"col",style:{padding:"10px 14px",textAlign:"right"},children:r.common.actions})]})}),m("tbody",{children:[A.map(g=>m("tr",{style:{borderBottom:"1px solid #f1f5f9"},"data-testid":`user-row-${g.id}`,children:[t("td",{style:{padding:"10px 14px",color:"#475569"},children:v(r.common.idTemplate,{id:g.id})}),t("td",{style:{padding:"10px 14px",fontWeight:600,color:"#0f172a"},children:g.displayName}),t("td",{style:{padding:"10px 14px",color:"#475569"},children:g.email}),t("td",{style:{padding:"10px 14px"},children:t("span",{style:{fontSize:"0.75rem",padding:"2px 8px",borderRadius:"10px",backgroundColor:g.isActive?"#dcfce7":"#fee2e2",color:g.isActive?"#15803d":"#b91c1c",fontWeight:600},children:g.isActive?r.usersView.active:r.usersView.inactive})}),m("td",{style:{padding:"10px 14px",textAlign:"right"},children:[t("button",{type:"button",onClick:I=>s({kind:"edit",user:g},I),"aria-label":v(r.usersView.editUserAria,{user:g.displayName}),"data-testid":`edit-user-btn-${g.id}`,style:{padding:"3px 8px",borderRadius:"4px",border:"1px solid #cbd5e1",backgroundColor:"#ffffff",fontSize:"0.78rem",cursor:"pointer",marginRight:"6px"},children:r.common.edit}),t("button",{type:"button",onClick:()=>u(g),...Y(G),"aria-label":v(g.isActive?r.usersView.deactivateAria:r.usersView.activateAria,{user:g.displayName}),"data-testid":`toggle-user-btn-${g.id}`,style:{padding:"3px 8px",borderRadius:"4px",border:"1px solid #cbd5e1",backgroundColor:"#ffffff",fontSize:"0.78rem",cursor:G?"default":"pointer",color:g.isActive?"#b91c1c":"#15803d"},children:g.isActive?r.usersView.deactivate:r.usersView.activate})]})]},g.id)),A.length===0&&t("tr",{children:t("td",{colSpan:5,style:{padding:"2rem",textAlign:"center",color:"#475569"},children:q===""?r.usersView.empty:r.usersView.emptyFiltered})})]})]})}),M&&t("div",{style:{position:"fixed",inset:0,backgroundColor:"rgba(0,0,0,0.4)",display:"flex",justifyContent:"center",alignItems:"center",zIndex:100},children:m("form",{ref:h,onSubmit:L,role:"dialog","aria-modal":"true","aria-labelledby":"create-user-title",...me(c)?{"aria-describedby":"create-user-error"}:{},"data-testid":"user-create-modal",style:{backgroundColor:"#ffffff",padding:"1.5rem",borderRadius:"8px",width:"360px",boxShadow:"0 10px 25px rgba(0,0,0,0.15)"},children:[t("h3",{id:"create-user-title",style:{margin:"0 0 1rem 0",fontSize:"1.1rem"},children:r.usersView.addUser}),t(H,{result:c,id:"create-user-error"}),m("div",{style:{marginBottom:"1rem"},children:[t("label",{htmlFor:"create-user-display-name-input",style:{display:"block",fontSize:"0.8rem",color:"#475569",marginBottom:"4px"},children:r.usersView.displayName}),t("input",{id:"create-user-display-name-input",type:"text",value:x,onChange:g=>d(g.target.value),required:!0,"data-testid":"create-user-display-name",style:{width:"100%",padding:"6px",borderRadius:"4px",border:"1px solid #cbd5e1",boxSizing:"border-box"}})]}),m("div",{style:{marginBottom:"1.2rem"},children:[t("label",{htmlFor:"create-user-email-input",style:{display:"block",fontSize:"0.8rem",color:"#475569",marginBottom:"4px"},children:r.usersView.email}),t("input",{id:"create-user-email-input",type:"email",value:b,onChange:g=>S(g.target.value),required:!0,"data-testid":"create-user-email",style:{width:"100%",padding:"6px",borderRadius:"4px",border:"1px solid #cbd5e1",boxSizing:"border-box"}})]}),m("div",{style:{display:"flex",justifyContent:"flex-end",gap:"0.5rem"},children:[t("button",{type:"button",onClick:()=>C(null),"data-testid":"cancel-create-user",style:{padding:"6px 12px",borderRadius:"4px",border:"1px solid #cbd5e1",backgroundColor:"#ffffff",cursor:"pointer"},children:r.common.cancel}),t("button",{type:"submit","data-testid":"submit-create-user",disabled:G,"aria-busy":G,style:{padding:"6px 12px",borderRadius:"4px",backgroundColor:"#0284c7",color:"#ffffff",border:"none",cursor:"pointer"},children:r.common.create})]})]})}),k&&t("div",{style:{position:"fixed",inset:0,backgroundColor:"rgba(0,0,0,0.4)",display:"flex",justifyContent:"center",alignItems:"center",zIndex:100},children:m("form",{ref:f,onSubmit:D,role:"dialog","aria-modal":"true","aria-labelledby":"edit-user-title",...me(c)?{"aria-describedby":"edit-user-error"}:{},"data-testid":"user-edit-modal",style:{backgroundColor:"#ffffff",padding:"1.5rem",borderRadius:"8px",width:"360px",boxShadow:"0 10px 25px rgba(0,0,0,0.15)"},children:[t("h3",{id:"edit-user-title",style:{margin:"0 0 1rem 0",fontSize:"1.1rem"},children:r.usersView.editUser}),t(H,{result:c,id:"edit-user-error"}),m("div",{style:{marginBottom:"1rem"},children:[t("label",{htmlFor:"edit-user-display-name-input",style:{display:"block",fontSize:"0.8rem",color:"#475569",marginBottom:"4px"},children:r.usersView.displayName}),t("input",{id:"edit-user-display-name-input",type:"text",value:k.displayName,onChange:g=>C({kind:"edit",user:{...k,displayName:g.target.value}}),required:!0,"data-testid":"edit-user-display-name",style:{width:"100%",padding:"6px",borderRadius:"4px",border:"1px solid #cbd5e1",boxSizing:"border-box"}})]}),m("div",{style:{marginBottom:"1.2rem"},children:[t("label",{htmlFor:"edit-user-email-input",style:{display:"block",fontSize:"0.8rem",color:"#475569",marginBottom:"4px"},children:r.usersView.email}),t("input",{id:"edit-user-email-input",type:"email",value:k.email,onChange:g=>C({kind:"edit",user:{...k,email:g.target.value}}),required:!0,"data-testid":"edit-user-email",style:{width:"100%",padding:"6px",borderRadius:"4px",border:"1px solid #cbd5e1",boxSizing:"border-box"}})]}),m("div",{style:{display:"flex",justifyContent:"flex-end",gap:"0.5rem"},children:[t("button",{type:"button",onClick:()=>C(null),style:{padding:"6px 12px",borderRadius:"4px",border:"1px solid #cbd5e1",backgroundColor:"#ffffff",cursor:"pointer"},children:r.common.cancel}),t("button",{type:"submit","data-testid":"submit-edit-user",disabled:G,"aria-busy":G,style:{padding:"6px 12px",borderRadius:"4px",backgroundColor:"#0284c7",color:"#ffffff",border:"none",cursor:"pointer"},children:r.common.save})]})]})})]})}var Ie=Ue.createContext(null);function ft(){return Ue.useContext(Ie)??""}function ht(){let e=ft(),o=oe(),n=ne(),{submit:p,resetResult:c,result:r}=ae(n),i=o.labels??j,y=Re(r,i),[w,C]=T(""),[k,M]=T(null),l=k?.kind==="edit"?k.group:null,s=k?.kind==="create",x=ee(null),d=(a,R)=>{x.current=R.currentTarget,c(),a.kind==="create"&&Fe(),M(a)},b=n.state!=="idle",[S,h]=T(""),[f,G]=T(""),[U,E]=T(""),[V,q]=T("local"),[A,P]=T(null),[u,L]=T(null),[D,g]=T("direct"),I=ee(null),Q=te(()=>{let a=new Map;for(let R of o.groupMembers)a.set(R.groupId,(a.get(R.groupId)??0)+1);return a},[o.groupMembers]),_=te(()=>Te(o.groups),[o.groups]),le=te(()=>Me(o.catalog,_,i),[o.catalog,_,i]),De=te(()=>le.filter(a=>a.disabled!==!0).length,[le]),ye=o.catalog.kind==="ready"&&o.catalog.groups.length>0&&o.directoryStatus.provider!=="",Ne=ce(s,()=>M(null),x),ze=ce(l!==null,()=>M(null),x),be=w.trim().toLowerCase(),fe=o.groups.filter(a=>a.name.toLowerCase().includes(be)||a.groupKey.toLowerCase().includes(be)),Fe=()=>{h(""),G(""),E(""),q("local"),L(null),g("direct"),I.current=null},Oe=a=>{if(a.preventDefault(),!(S&&f)||V==="upstream"&&u===null||V==="upstream"&&u!==null&&!window.confirm(v(i.groupsView.confirmCreateLinked,{group:f,upstream:u.externalKey})))return;let R={key:S,name:f,description:U},N=()=>{h(Z=>Z===R.key?"":Z),G(Z=>Z===R.name?"":Z),E(Z=>Z===R.description?"":Z),L(null),M(null)};if(V==="upstream"&&u!==null){p({intent:"createLinkedGroup",groupKey:R.key,name:R.name,description:R.description,provider:o.directoryStatus.provider,externalKey:u.externalKey,membershipMode:D},N);return}p({intent:"createGroup",groupKey:R.key,name:R.name,description:R.description},N)},qe=a=>{if(L(a),!a)return;let R={key:bt(a.externalKey),name:a.name,description:a.description??""};G(R.name),h(R.key),E(R.description),I.current=R},Ke=a=>{if(q(a),a==="upstream")return;L(null);let R=I.current;R&&(h(N=>N===R.key?"":N),G(N=>N===R.name?"":N),E(N=>N===R.description?"":N),I.current=null)},Be=a=>{a.preventDefault(),l&&p({intent:"updateGroup",groupId:String(l.id),name:l.name,description:l.description??""},()=>M(null))},$e=a=>{if(b)return;let R=o.groupMembers.filter(N=>N.groupId===a.id).length;window.confirm(v(i.groupsView.confirmDelete,{group:a.name,count:R}))&&p({intent:"deleteGroup",groupId:String(a.id)})};return m("section",{"data-testid":"groups-view-section",style:{display:"flex",flexDirection:"column",gap:"1rem"},children:[t("h2",{style:se,children:i.groupsView.title}),!k&&t(H,{result:r}),t("p",{"data-testid":"groups-sync-request-notice",role:"status","aria-live":"polite",hidden:y===null,style:y===null?void 0:{margin:0,padding:"0.5rem 0.7rem",borderRadius:"6px",backgroundColor:"#fffbeb",border:"1px solid #fde68a",color:"#92400e",fontSize:"0.8rem"},children:y}),m("div",{style:{display:"flex",justifyContent:"space-between",alignItems:"center",backgroundColor:"#ffffff",padding:"1rem",borderRadius:"8px",border:"1px solid #e2e8f0"},children:[t("input",{type:"text","aria-label":i.groupsView.searchLabel,placeholder:i.groupsView.searchPlaceholder,value:w,onChange:a=>C(a.target.value),"data-testid":"groups-search-input",style:{padding:"6px 12px",borderRadius:"6px",border:"1px solid #cbd5e1",fontSize:"0.85rem",width:"260px"}}),t("button",{type:"button",onClick:a=>d({kind:"create"},a),"data-testid":"groups-add-button",style:{padding:"6px 14px",borderRadius:"6px",backgroundColor:"#4338ca",color:"#ffffff",border:"none",fontSize:"0.85rem",fontWeight:600,cursor:"pointer"},children:i.groupsView.addGroup})]}),t("div",{style:{display:"grid",gridTemplateColumns:"repeat(auto-fill, minmax(280px, 1fr))",gap:"1rem"},children:fe.map(a=>{let R=Q.get(a.id)??0;return m("div",{style:{backgroundColor:"#ffffff",borderRadius:"8px",border:"1px solid #e2e8f0",padding:"1rem",display:"flex",flexDirection:"column",justifyContent:"space-between"},"data-testid":`group-card-${a.id}`,"data-group-readonly":a.readOnly?"true":"false",children:[m("div",{children:[m("div",{style:{display:"flex",justifyContent:"space-between",alignItems:"center",marginBottom:"0.5rem"},children:[t("h3",{style:{margin:0,fontSize:"1rem",color:"#0f172a"},children:a.name}),t("span",{style:{fontSize:"0.72rem",backgroundColor:"#e0e7ff",color:"#4338ca",padding:"2px 6px",borderRadius:"4px",fontFamily:"monospace"},children:a.groupKey})]}),t("p",{style:{margin:"0 0 0.8rem 0",fontSize:"0.82rem",color:"#64748b",minHeight:"2.4em"},children:a.description||i.groupsView.noDescription}),a.externalLink&&m("div",{"data-testid":`group-source-${a.id}`,style:{display:"flex",alignItems:"center",gap:"6px",flexWrap:"wrap",marginBottom:"0.6rem"},children:[t("span",{style:{fontSize:"0.72rem",padding:"2px 8px",borderRadius:"10px",backgroundColor:"#ede9fe",color:"#6d28d9",fontWeight:600},children:i.common.managedUpstream}),t("span",{style:{fontSize:"0.72rem",fontFamily:"monospace",color:"#64748b"},children:a.externalLink.externalKey}),a.externalLink.unresolvedCount>0&&t("span",{"data-testid":`group-unresolved-${a.id}`,style:{fontSize:"0.72rem",color:"#b45309"},children:v(i.directoryView.unresolvedTemplate,{count:a.externalLink.unresolvedCount})})]})]}),m("div",{style:{display:"flex",justifyContent:"space-between",alignItems:"center",borderTop:"1px solid #f1f5f9",paddingTop:"0.6rem"},children:[t(ct,{to:`${e}/group_members?group=${a.id}`,"data-testid":`group-open-members-${a.id}`,"aria-label":v(i.groupsView.openMembersAria,{group:a.name}),style:{fontSize:"0.78rem",color:"#1d4ed8",textDecoration:"none"},children:v(i.groupsView.memberCountTemplate,{count:R})}),a.readOnly?t("span",{"data-testid":`readonly-group-${a.id}`,style:{fontSize:"0.75rem",color:"#475569"},children:i.common.readOnly}):m("div",{children:[t("button",{type:"button",onClick:N=>d({kind:"edit",group:a},N),...Y(b),"aria-label":v(i.groupsView.editGroupAria,{group:a.name}),"data-testid":`edit-group-btn-${a.id}`,style:{padding:"3px 8px",borderRadius:"4px",border:"1px solid #cbd5e1",backgroundColor:"#ffffff",fontSize:"0.75rem",cursor:"pointer",marginRight:"4px"},children:i.common.edit}),t("button",{type:"button",onClick:()=>$e(a),...Y(b),"aria-label":v(i.groupsView.deleteGroupAria,{group:a.name}),"data-testid":`delete-group-btn-${a.id}`,style:{padding:"3px 8px",borderRadius:"4px",border:"1px solid #fee2e2",backgroundColor:"#fff5f5",color:"#b91c1c",fontSize:"0.75rem",cursor:"pointer"},children:i.common.delete})]})]})]},a.id)})}),fe.length===0&&t("div",{"data-testid":"groups-empty",style:{padding:"2rem",textAlign:"center",color:"#475569",backgroundColor:"#ffffff",borderRadius:"8px",border:"1px solid #e2e8f0"},children:o.groups.length===0?i.groupsView.empty:i.groupsView.emptyFiltered}),s&&t("div",{style:{position:"fixed",inset:0,backgroundColor:"rgba(0,0,0,0.4)",display:"flex",justifyContent:"center",alignItems:"center",zIndex:100},children:m("form",{ref:Ne,onSubmit:Oe,role:"dialog","aria-modal":"true","aria-labelledby":"create-group-title",...me(r)?{"aria-describedby":"create-group-error"}:{},"data-testid":"group-create-modal",style:{backgroundColor:"#ffffff",padding:"1.5rem",borderRadius:"8px",width:"360px",boxShadow:"0 10px 25px rgba(0,0,0,0.15)"},children:[t("h3",{id:"create-group-title",style:{margin:"0 0 1rem 0",fontSize:"1.1rem"},children:i.groupsView.addGroup}),t(H,{result:r,id:"create-group-error"}),ye&&m("fieldset",{"data-testid":"create-group-mode",style:{display:"flex",gap:"0.25rem",marginBottom:"1rem",border:"none",padding:0,margin:"0 0 1rem 0"},children:[t("legend",{style:Ae,children:i.groupsView.createModeLabel}),["local","upstream"].map(a=>m("label",{"data-aqar-create-mode":a,"data-selected":V===a?"":void 0,"data-focused":A===a?"":void 0,style:{outline:A===a?"2px solid #4338ca":void 0,outlineOffset:"2px",flex:1,padding:"0.4rem 0.6rem",fontSize:"0.8rem",borderRadius:"6px",cursor:"pointer",textAlign:"center",border:V===a?"1px solid #4338ca":"1px solid #cbd5e1",backgroundColor:V===a?"#eef2ff":"#ffffff",color:V===a?"#3730a3":"#475569",fontWeight:V===a?700:500},children:[t("input",{type:"radio",name:"create-group-mode",value:a,checked:V===a,onChange:()=>Ke(a),"data-testid":`create-group-mode-${a}`,"data-aqar-visually-hidden":!0,onFocus:()=>P(a),onBlur:()=>P(R=>R===a?null:R),style:Ae}),a==="local"?i.groupsView.createModeLocal:i.groupsView.createModeUpstream]},a))]}),o.catalog.kind==="ready"&&o.catalog.groups.length===0&&t("p",{"data-testid":"create-group-catalog-empty",role:"note",style:{margin:"0 0 1rem 0",padding:"0.5rem 0.7rem",borderRadius:"6px",backgroundColor:"#f8fafc",border:"1px solid #e2e8f0",color:"#475569",fontSize:"0.78rem"},children:v(i.groupsView.catalogEmpty,{at:J(o.catalog.observedAt??"",i)})}),o.catalog.kind==="ready"&&o.catalog.groups.length>0&&o.directoryStatus.provider===""&&t("p",{"data-testid":"create-group-provider-unset",role:"note",style:{margin:"0 0 1rem 0",padding:"0.5rem 0.7rem",borderRadius:"6px",backgroundColor:"#fffbeb",border:"1px solid #fde68a",color:"#92400e",fontSize:"0.78rem"},children:i.groupsView.providerUnset}),o.catalog.kind==="unavailable"&&t("p",{"data-testid":"create-group-catalog-unavailable",role:"note",style:{margin:"0 0 1rem 0",padding:"0.5rem 0.7rem",borderRadius:"6px",backgroundColor:"#fffbeb",border:"1px solid #fde68a",color:"#92400e",fontSize:"0.78rem"},children:v(i.groupsView.catalogUnavailableHere,{reason:i.groupsView.catalogFailures[o.catalog.reason]})}),V==="upstream"&&ye&&o.catalog.kind==="ready"&&m("div",{style:{marginBottom:"1rem"},children:[t("p",{"data-testid":"create-group-upstream-notice",role:"note",style:{margin:"0 0 0.5rem 0",fontSize:"0.78rem",color:"#5b21b6"},children:i.groupsView.createUpstreamNotice}),t("div",{id:"create-group-upstream-label",style:re,children:i.groupsView.pickUpstream}),t("div",{"data-testid":"create-group-upstream-picker",onKeyDown:a=>{a.nativeEvent.isComposing||a.nativeEvent.keyCode===229||a.key==="Enter"&&a.preventDefault()},children:t(Ce,{options:le,value:u===null?null:le.find(a=>a.value===u.externalId)??null,onChange:a=>qe(a===null||Array.isArray(a)?null:a.entry??null),placeholder:i.groupsView.pickUpstreamPlaceholder,ariaLabelledBy:"create-group-upstream-label",renderOption:Ve,locale:i.locale,labels:Ee(i),clearable:!0})}),t(Ge,{observedAt:o.catalog.observedAt,isStale:o.catalog.isStale,labels:i}),m("div",{style:{marginTop:"0.6rem"},children:[t("label",{htmlFor:"create-group-membership-mode",style:re,children:i.directoryView.membershipMode}),m("select",{id:"create-group-membership-mode","data-testid":"create-group-membership-mode",value:D,onChange:a=>g(a.target.value),style:{width:"100%",padding:"6px",borderRadius:"4px",border:"1px solid #cbd5e1",boxSizing:"border-box"},children:[t("option",{value:"direct",children:i.directoryView.directMode}),t("option",{value:"transitive",children:i.directoryView.transitiveMode})]})]})]}),m("div",{style:{marginBottom:"1rem"},children:[t("label",{htmlFor:"create-group-key-input",style:{display:"block",fontSize:"0.8rem",color:"#475569",marginBottom:"4px"},children:i.groupsView.groupKey}),t("input",{id:"create-group-key-input",type:"text",value:S,onChange:a=>h(a.target.value),placeholder:i.groupsView.groupKeyPlaceholder,required:!0,"data-testid":"create-group-key",style:{width:"100%",padding:"6px",borderRadius:"4px",border:"1px solid #cbd5e1",boxSizing:"border-box"}})]}),m("div",{style:{marginBottom:"1rem"},children:[t("label",{htmlFor:"create-group-name-input",style:{display:"block",fontSize:"0.8rem",color:"#475569",marginBottom:"4px"},children:i.groupsView.name}),t("input",{id:"create-group-name-input",type:"text",value:f,onChange:a=>G(a.target.value),placeholder:i.groupsView.namePlaceholder,required:!0,"data-testid":"create-group-name",style:{width:"100%",padding:"6px",borderRadius:"4px",border:"1px solid #cbd5e1",boxSizing:"border-box"}})]}),m("div",{style:{marginBottom:"1.2rem"},children:[t("label",{htmlFor:"create-group-desc-input",style:{display:"block",fontSize:"0.8rem",color:"#475569",marginBottom:"4px"},children:i.groupsView.description}),t("textarea",{id:"create-group-desc-input",value:U,onChange:a=>E(a.target.value),"data-testid":"create-group-description",style:{width:"100%",padding:"6px",borderRadius:"4px",border:"1px solid #cbd5e1",boxSizing:"border-box",height:"60px"}})]}),V==="upstream"&&u===null&&t("p",{id:"create-group-submit-hint","data-testid":"create-group-submit-hint",style:{margin:"0 0 0.6rem 0",fontSize:"0.78rem",color:"#475569",textAlign:"right"},children:De>0?i.groupsView.pickUpstreamFirst:i.groupsView.allUpstreamLinked}),m("div",{style:{display:"flex",justifyContent:"flex-end",gap:"0.5rem"},children:[t("button",{type:"button",onClick:()=>M(null),"data-testid":"cancel-create-group",style:{padding:"6px 12px",borderRadius:"4px",border:"1px solid #cbd5e1",backgroundColor:"#ffffff",cursor:"pointer"},children:i.common.cancel}),t("button",{type:"submit","data-testid":"submit-create-group",disabled:b||V==="upstream"&&u===null,"aria-busy":b,...V==="upstream"&&u===null?{"aria-describedby":"create-group-submit-hint"}:{},style:{padding:"6px 12px",borderRadius:"4px",backgroundColor:b||V==="upstream"&&u===null?"#a5b4fc":"#4338ca",color:"#ffffff",border:"none",cursor:b||V==="upstream"&&u===null?"not-allowed":"pointer"},children:i.common.create})]})]})}),l&&t("div",{style:{position:"fixed",inset:0,backgroundColor:"rgba(0,0,0,0.4)",display:"flex",justifyContent:"center",alignItems:"center",zIndex:100},children:m("form",{ref:ze,onSubmit:Be,role:"dialog","aria-modal":"true","aria-labelledby":"edit-group-title",...me(r)?{"aria-describedby":"edit-group-error"}:{},"data-testid":"group-edit-modal",style:{backgroundColor:"#ffffff",padding:"1.5rem",borderRadius:"8px",width:"360px",boxShadow:"0 10px 25px rgba(0,0,0,0.15)"},children:[t("h3",{id:"edit-group-title",style:{margin:"0 0 1rem 0",fontSize:"1.1rem"},children:i.groupsView.editGroup}),t(H,{result:r,id:"edit-group-error"}),m("div",{style:{marginBottom:"1rem"},children:[t("label",{htmlFor:"edit-group-name-input",style:{display:"block",fontSize:"0.8rem",color:"#475569",marginBottom:"4px"},children:i.groupsView.name}),t("input",{id:"edit-group-name-input",type:"text",value:l.name,onChange:a=>M({kind:"edit",group:{...l,name:a.target.value}}),required:!0,"data-testid":"edit-group-name",style:{width:"100%",padding:"6px",borderRadius:"4px",border:"1px solid #cbd5e1",boxSizing:"border-box"}})]}),m("div",{style:{marginBottom:"1.2rem"},children:[t("label",{htmlFor:"edit-group-desc-input",style:{display:"block",fontSize:"0.8rem",color:"#475569",marginBottom:"4px"},children:i.groupsView.description}),t("textarea",{id:"edit-group-desc-input",value:l.description??"",onChange:a=>M({kind:"edit",group:{...l,description:a.target.value}}),"data-testid":"edit-group-description",style:{width:"100%",padding:"6px",borderRadius:"4px",border:"1px solid #cbd5e1",boxSizing:"border-box",height:"60px"}})]}),m("div",{style:{display:"flex",justifyContent:"flex-end",gap:"0.5rem"},children:[t("button",{type:"button",onClick:()=>M(null),style:{padding:"6px 12px",borderRadius:"4px",border:"1px solid #cbd5e1",backgroundColor:"#ffffff",cursor:"pointer"},children:i.common.cancel}),t("button",{type:"submit","data-testid":"submit-edit-group",disabled:b,"aria-busy":b,style:{padding:"6px 12px",borderRadius:"4px",backgroundColor:"#4338ca",color:"#ffffff",border:"none",cursor:"pointer"},children:i.common.save})]})]})})]})}function wt(){let e=oe(),o=ne(),{submit:n,result:p}=ae(o),c=o.state!=="idle",r=e.labels??j,[i]=mt(),y=Number(i.get("group")??""),w=Number.isInteger(y)&&y>0?y:null,[C,k]=T(null),[M,l]=T(new Set),s=ee(w);s.current!==w&&(s.current=w,w!==null&&(k(w),l(new Set)));let[x,d]=T(""),[b,S]=T(!1),h=C??w??e.groups[0]?.id??null,f=e.groups.find(A=>A.id===h)??e.groups[0],G=h!==null&&f!==void 0&&f.id!==h?h:null,U=new Set(e.groupMembers.filter(A=>A.groupId===f?.id).map(A=>A.userId)),E=x.trim().toLowerCase(),V=e.users.filter(A=>b&&!U.has(A.id)&&!M.has(A.id)?!1:E===""?!0:A.displayName.toLowerCase().includes(E)||A.email.toLowerCase().includes(E)),q=(A,P)=>{if(c||!f)return;let u=String(f.id);P?(l(L=>new Set(L).add(A)),n({intent:"removeGroupMember",groupId:u,userId:String(A)})):(l(L=>{if(!L.has(A))return L;let D=new Set(L);return D.delete(A),D}),n({intent:"addGroupMember",groupId:u,userId:String(A)}))};return m("section",{"data-testid":"group-members-view-section",style:{display:"grid",gridTemplateColumns:"240px 1fr",gap:"1.2rem"},children:[t("h2",{style:{...se,gridColumn:"1 / -1"},children:r.groupMembersView.title}),t(H,{result:p}),G!==null&&t("p",{"data-testid":"member-deep-link-missed",role:"note",style:{gridColumn:"1 / -1",margin:0,padding:"0.5rem 0.7rem",borderRadius:"6px",backgroundColor:"#fffbeb",border:"1px solid #fde68a",color:"#92400e",fontSize:"0.8rem"},children:v(r.groupMembersView.deepLinkMissed,{id:G,group:f?.name??""})}),m("div",{style:{backgroundColor:"#ffffff",padding:"1rem",borderRadius:"8px",border:"1px solid #e2e8f0"},children:[t("h3",{style:{margin:"0 0 0.8rem 0",fontSize:"0.9rem",color:"#475569"},children:r.groupMembersView.selectGroup}),t("div",{style:{display:"flex",flexDirection:"column",gap:"0.4rem"},children:e.groups.map(A=>{let P=A.id===f?.id;return m("button",{type:"button",onClick:()=>{k(A.id),l(new Set)},"data-testid":`select-group-btn-${A.id}`,style:{textAlign:"left",padding:"8px 10px",borderRadius:"6px",border:P?"1px solid #6366f1":"1px solid #e2e8f0",backgroundColor:P?"#e0e7ff":"#ffffff",color:P?"#3730a3":"#0f172a",cursor:"pointer",fontWeight:P?600:400,fontSize:"0.85rem"},children:[A.name,A.readOnly?t("span",{"data-testid":`group-upstream-marker-${A.id}`,style:{marginLeft:"6px",fontSize:"0.7rem",color:"#7c3aed"},children:r.common.managedUpstream}):null]},A.id)})})]}),t("div",{style:{backgroundColor:"#ffffff",padding:"1.2rem",borderRadius:"8px",border:"1px solid #e2e8f0"},children:f?m(ge,{children:[m("div",{style:{marginBottom:"1rem",borderBottom:"1px solid #e2e8f0",paddingBottom:"0.8rem"},children:[t("h3",{style:{margin:0,fontSize:"1.1rem",color:"#0f172a"},children:v(r.groupMembersView.membersOfTemplate,{group:f.name})}),m("span",{style:{fontSize:"0.8rem",color:"#64748b"},children:[r.groupMembersView.groupKeyLabel,": ",f.groupKey]}),f.readOnly?t("div",{"data-testid":"group-members-upstream-notice",role:"note",style:{marginTop:"0.5rem",padding:"0.5rem 0.7rem",borderRadius:"6px",backgroundColor:"#f5f3ff",border:"1px solid #ddd6fe",color:"#5b21b6",fontSize:"0.8rem"},children:r.groupMembersView.upstreamNotice}):null]}),m("div",{style:{display:"flex",gap:"0.75rem",alignItems:"center",flexWrap:"wrap",marginBottom:"0.8rem"},children:[t("input",{type:"search","aria-label":r.groupMembersView.searchLabel,placeholder:r.groupMembersView.searchPlaceholder,value:x,onChange:A=>d(A.target.value),"data-testid":"member-search-input",style:{flex:1,minWidth:"220px",padding:"6px 12px",borderRadius:"6px",border:"1px solid #cbd5e1",fontSize:"0.85rem"}}),m("label",{style:{display:"inline-flex",alignItems:"center",gap:"0.35rem",fontSize:"0.8rem",color:"#475569"},children:[t("input",{type:"checkbox","data-testid":"member-only-toggle",checked:b,onChange:A=>{S(A.target.checked),l(new Set)}}),v(r.groupMembersView.onlyMembers,{count:U.size})]})]}),t("p",{"data-testid":"member-summary",role:"status","aria-live":"polite",style:{margin:"0 0 0.6rem 0",fontSize:"0.78rem",color:"#475569"},children:v(r.groupMembersView.summary,{shown:V.length,total:e.users.length,members:U.size})}),V.length===0&&t("p",{"data-testid":"member-empty-filtered",style:{margin:"0 0 0.6rem 0",fontSize:"0.85rem",color:"#475569"},children:e.users.length===0?r.groupMembersView.noUsers:E===""&&b?r.groupMembersView.emptyNoMembers:r.groupMembersView.emptyFiltered}),t("div",{style:{display:"flex",flexDirection:"column",gap:"0.5rem"},children:V.map(A=>{let P=U.has(A.id);return m("div",{style:{display:"flex",justifyContent:"space-between",alignItems:"center",padding:"8px 12px",borderRadius:"6px",border:"1px solid #f1f5f9",backgroundColor:P?"#f0fdf4":"#ffffff"},"data-testid":`member-row-${A.id}`,children:[m("div",{children:[t("span",{style:{fontWeight:600,fontSize:"0.88rem",color:"#0f172a",marginRight:"8px"},children:A.displayName}),m("span",{style:{fontSize:"0.78rem",color:"#64748b"},children:["(",A.email,")"]})]}),f.readOnly?P?t("span",{"data-testid":`member-readonly-${A.id}`,style:{fontSize:"0.75rem",color:"#475569"},children:r.common.managedUpstream}):null:t("button",{type:"button",onClick:()=>q(A.id,P),...Y(c),"aria-label":v(P?r.groupMembersView.actionRemoveAria:r.groupMembersView.actionAddAria,{user:A.displayName}),"data-testid":`toggle-member-btn-${A.id}`,style:{padding:"4px 12px",borderRadius:"4px",border:P?"1px solid #b91c1c":"1px solid #0284c7",backgroundColor:P?"#ffffff":"#0284c7",color:P?"#b91c1c":"#ffffff",fontSize:"0.78rem",fontWeight:600,cursor:"pointer"},children:P?r.groupMembersView.actionRemove:r.groupMembersView.actionAdd})]},A.id)})})]}):t("div",{"data-testid":"member-no-groups",style:{color:"#475569",textAlign:"center",padding:"2rem"},children:e.groups.length===0?r.groupMembersView.noGroups:r.groupMembersView.selectPrompt})})]})}function xt(e){return e==="email"?{backgroundColor:"#e0f2fe",color:"#0369a1"}:e==="domain"?{backgroundColor:"#fef3c7",color:"#b45309"}:{backgroundColor:"#ede9fe",color:"#6d28d9"}}function vt(e,o){return e==="email"?o.allowlistView.emailTypeShort:e==="domain"?o.allowlistView.domainTypeShort:o.allowlistView.groupTypeShort}function kt(){let e=oe(),o=ne(),n=e.labels??j,{submit:p,result:c}=ae(o),r=o.state!=="idle",[i,y]=T(""),[w,C]=T("email"),[k,M]=T(""),l=d=>{if(d.preventDefault(),!i)return;let b={pattern:i,description:k};p({intent:"addAllowlistEntry",pattern:b.pattern,type:w,description:b.description},()=>{y(S=>S===b.pattern?"":S),M(S=>S===b.description?"":S)})},s=d=>{p({intent:"removeAllowlistEntry",entryId:String(d)})},x=d=>{p({intent:"removeAllowlistGroup",entryId:String(d)})};return m("section",{"data-testid":"allowlist-view-section",style:{display:"flex",flexDirection:"column",gap:"1.2rem"},children:[t("h2",{style:se,children:n.allowlistView.title}),t(H,{result:c}),m("form",{onSubmit:l,style:{backgroundColor:"#ffffff",padding:"1.2rem",borderRadius:"8px",border:"1px solid #e2e8f0",display:"flex",flexWrap:"wrap",gap:"0.8rem",alignItems:"flex-end"},children:[m("div",{style:{flex:2,minWidth:"220px"},children:[t("label",{htmlFor:"allowlist-pattern-input-field",style:{display:"block",fontSize:"0.78rem",color:"#475569",marginBottom:"4px"},children:n.allowlistView.pattern}),t("input",{id:"allowlist-pattern-input-field",type:"text",value:i,onChange:d=>y(d.target.value),required:!0,"data-testid":"allowlist-pattern-input",style:{width:"100%",padding:"6px 10px",borderRadius:"6px",border:"1px solid #cbd5e1",fontSize:"0.85rem",boxSizing:"border-box"}})]}),m("div",{style:{flex:1,minWidth:"140px"},children:[t("label",{htmlFor:"allowlist-type-select-field",style:{display:"block",fontSize:"0.78rem",color:"#475569",marginBottom:"4px"},children:n.allowlistView.type}),m("select",{id:"allowlist-type-select-field",value:w,onChange:d=>C(d.target.value),"data-testid":"allowlist-type-select",style:{width:"100%",padding:"6px 10px",borderRadius:"6px",border:"1px solid #cbd5e1",fontSize:"0.85rem",boxSizing:"border-box"},children:[t("option",{value:"email",children:n.allowlistView.emailType}),t("option",{value:"domain",children:n.allowlistView.domainType})]})]}),m("div",{style:{flex:2,minWidth:"200px"},children:[t("label",{htmlFor:"allowlist-desc-input-field",style:{display:"block",fontSize:"0.78rem",color:"#475569",marginBottom:"4px"},children:n.allowlistView.description}),t("input",{id:"allowlist-desc-input-field",type:"text",value:k,onChange:d=>M(d.target.value),"data-testid":"allowlist-desc-input",style:{width:"100%",padding:"6px 10px",borderRadius:"6px",border:"1px solid #cbd5e1",fontSize:"0.85rem",boxSizing:"border-box"}})]}),t("button",{type:"submit","data-testid":"submit-allowlist-add",disabled:r,"aria-busy":r,style:{padding:"7px 16px",borderRadius:"6px",backgroundColor:"#047857",color:"#ffffff",border:"none",fontSize:"0.85rem",fontWeight:600,cursor:"pointer"},children:n.allowlistView.addEntry})]}),t("div",{style:{backgroundColor:"#ffffff",borderRadius:"8px",border:"1px solid #e2e8f0",overflow:"hidden"},children:m("table",{style:{width:"100%",borderCollapse:"collapse",fontSize:"0.85rem",textAlign:"left"},children:[t("thead",{children:m("tr",{style:{backgroundColor:"#f8fafc",borderBottom:"1px solid #e2e8f0",color:"#475569"},children:[t("th",{scope:"col",style:{padding:"10px 14px"},children:n.common.id}),t("th",{scope:"col",style:{padding:"10px 14px"},children:n.allowlistView.target}),t("th",{scope:"col",style:{padding:"10px 14px"},children:n.allowlistView.type}),t("th",{scope:"col",style:{padding:"10px 14px"},children:n.allowlistView.description}),t("th",{scope:"col",style:{padding:"10px 14px",textAlign:"right"},children:n.common.actions})]})}),m("tbody",{children:[e.allowlist.map(d=>m("tr",{style:{borderBottom:"1px solid #f1f5f9"},"data-testid":`allowlist-row-${d.type}-${d.id}`,"data-allowlist-type":d.type,children:[t("td",{style:{padding:"10px 14px",color:"#475569"},children:v(n.common.idTemplate,{id:d.id})}),t("td",{style:{padding:"10px 14px",fontWeight:600,color:"#0f172a"},children:d.type==="group"?m("span",{"data-testid":`allowlist-group-${d.type}-${d.id}`,children:[d.groupName,t("span",{style:{marginLeft:"6px",fontFamily:"monospace",fontSize:"0.78rem",color:"#64748b"},children:d.groupKey})]}):t("span",{style:{fontFamily:"monospace"},children:d.pattern})}),t("td",{style:{padding:"10px 14px"},children:t("span",{style:{fontSize:"0.75rem",padding:"2px 8px",borderRadius:"10px",...xt(d.type),fontWeight:600},children:vt(d.type,n)})}),m("td",{style:{padding:"10px 14px",color:"#475569"},children:[d.description||n.common.none,d.owner.kind==="deployment"&&t("span",{"data-testid":`allowlist-owner-${d.type}-${d.id}`,style:{marginLeft:"8px",fontSize:"0.72rem",color:"#475569"},children:n.allowlistView.deploymentOwner})]}),t("td",{style:{padding:"10px 14px",textAlign:"right"},children:d.readOnly?t("span",{"data-testid":`readonly-allowlist-${d.type}-${d.id}`,style:{fontSize:"0.75rem",color:"#475569"},children:n.common.readOnly}):t("button",{type:"button",onClick:()=>{window.confirm(v(n.allowlistView.confirmDelete,{target:d.type==="group"?d.groupName:d.pattern}))&&(d.type==="group"?x(d.id):s(d.id))},disabled:r,"aria-busy":r,"aria-label":v(n.allowlistView.deleteAria,{target:d.type==="group"?d.groupName:d.pattern}),"data-testid":`remove-allowlist-btn-${d.type}-${d.id}`,style:{padding:"3px 8px",borderRadius:"4px",border:"1px solid #fee2e2",backgroundColor:"#fff5f5",color:"#b91c1c",fontSize:"0.78rem",cursor:"pointer"},children:n.common.delete})})]},`${d.type}-${d.id}`)),e.allowlist.length===0&&t("tr",{children:t("td",{colSpan:5,style:{padding:"2rem",textAlign:"center",color:"#475569"},children:n.allowlistView.empty})})]})]})})]})}function At(){let e=oe(),o=ne(),{submit:n,result:p}=ae(o),c=e.labels??j,r=c.directoryView,i=e.groups.filter(u=>!u.externalLink),[y,w]=T(""),[C,k]=T(""),[M,l]=T(""),[s,x]=T("direct"),d=e.groups.filter(u=>u.externalLink),b=new Set(e.allowlist.filter(u=>u.type==="group").map(u=>u.groupId)),S=u=>e.allowlist.find(L=>L.type==="group"&&L.groupId===u),h=o.state!=="idle",[f,G]=T(null),U=Re(p,c),E=f===null||(e.groups.find(D=>D.id===f.groupId)?.externalLink?.syncedAt??null)!==f.syncedAtAtPress?null:f.groupId,V=e.directoryStatus.isEnabled&&e.directoryStatus.provider!=="",q=te(()=>Me(e.catalog,Te(d),c),[e.catalog,d,c]),A=te(()=>q.filter(u=>u.disabled!==!0).length,[q]),P=u=>{if(u.preventDefault(),!(y&&C))return;let L=i.find(g=>String(g.id)===y);if(!window.confirm(v(r.confirmLink,{group:L?.name??y,upstream:C})))return;let D=C;n({intent:"linkDirectoryGroup",groupId:y,provider:e.directoryStatus.provider,externalKey:D,externalId:M,membershipMode:s},()=>{k(g=>g===D?"":g),l(g=>C===D?"":g),w("")})};return m("section",{"data-testid":"directory-view-section",style:{display:"flex",flexDirection:"column",gap:"1rem"},children:[t("h2",{style:se,children:r.title}),t(H,{result:p}),!V&&t("p",{"data-testid":"directory-not-wired",style:{margin:0,padding:"0.7rem 1rem",borderRadius:"6px",border:"1px solid #e2e8f0",backgroundColor:"#f8fafc",color:"#475569",fontSize:"0.85rem"},children:r.notWiredNotice}),V&&e.groups.length===0&&t("p",{"data-testid":"directory-no-groups",style:{margin:0,padding:"0.7rem 1rem",borderRadius:"6px",border:"1px solid #e2e8f0",backgroundColor:"#f8fafc",color:"#475569",fontSize:"0.85rem"},children:r.noGroupsToLink}),V&&e.groups.length>0&&i.length===0&&t("p",{"data-testid":"directory-nothing-to-link",style:{margin:0,padding:"0.7rem 1rem",borderRadius:"6px",border:"1px solid #e2e8f0",backgroundColor:"#f8fafc",color:"#475569",fontSize:"0.85rem"},children:r.nothingToLink}),t("p",{"data-testid":"directory-sync-already-pending",role:"status","aria-live":"polite",hidden:U===null,style:U===null?void 0:{margin:0,padding:"0.5rem 0.7rem",borderRadius:"6px",backgroundColor:"#fffbeb",border:"1px solid #fde68a",color:"#92400e",fontSize:"0.8rem"},children:U}),V&&i.length>0&&m("form",{onSubmit:P,"data-testid":"directory-link-form",style:{display:"flex",gap:"0.75rem",flexWrap:"wrap",alignItems:"flex-end",backgroundColor:"#ffffff",padding:"1rem",borderRadius:"8px",border:"1px solid #e2e8f0"},children:[m("div",{style:{display:"flex",flexDirection:"column",gap:"0.25rem"},children:[t("label",{htmlFor:"directory-group-select-input",style:re,children:r.selectGroup}),m("select",{id:"directory-group-select-input","data-testid":"directory-group-select",value:y,onChange:u=>w(u.target.value),style:{padding:"0.5rem",borderRadius:"6px",border:"1px solid #cbd5e1"},children:[t("option",{value:"",children:r.selectGroup}),i.map(u=>t("option",{value:String(u.id),children:v(r.groupOptionTemplate,{name:u.name,key:u.groupKey})},u.id))]})]}),t("div",{style:{display:"flex",flexDirection:"column",gap:"0.25rem",flex:1,minWidth:"260px"},children:e.catalog.kind==="ready"&&e.catalog.groups.length>0?m(ge,{children:[t("div",{id:"directory-external-key-label",style:re,children:r.externalKey}),t("div",{"data-testid":"directory-external-key-picker",onKeyDown:u=>{u.nativeEvent.isComposing||u.nativeEvent.keyCode===229||u.key==="Enter"&&u.preventDefault()},children:t(Ce,{options:q,value:M===""?null:q.find(u=>u.value===M)??null,onChange:u=>{if(u===null||Array.isArray(u)){l(""),k("");return}l(String(u.value)),k(u.entry.externalKey)},placeholder:r.pickUpstreamPlaceholder,ariaLabelledBy:"directory-external-key-label",renderOption:Ve,locale:c.locale,labels:Ee(c),clearable:!0})}),A===0&&t("span",{"data-testid":"directory-all-upstream-linked",style:{fontSize:"0.72rem",color:"#92400e"},children:c.groupsView.allUpstreamLinked}),t(Ge,{observedAt:e.catalog.observedAt,isStale:e.catalog.isStale,labels:c})]}):m(ge,{children:[t("label",{htmlFor:"directory-external-key-input",style:re,children:r.externalKey}),t("input",{id:"directory-external-key-input",type:"email",required:!0,"data-testid":"directory-external-key",placeholder:r.externalKeyPlaceholder,value:C,onChange:u=>{l(""),k(u.target.value)},style:{padding:"0.5rem",borderRadius:"6px",border:"1px solid #cbd5e1"}}),e.catalog.kind==="unavailable"&&t("span",{"data-testid":"directory-catalog-unavailable",style:{fontSize:"0.72rem",color:"#92400e"},children:v(c.groupsView.catalogUnavailable,{reason:c.groupsView.catalogFailures[e.catalog.reason]})}),e.catalog.kind==="ready"&&t("span",{"data-testid":"directory-catalog-empty",style:{fontSize:"0.72rem",color:"#475569"},children:v(c.groupsView.catalogEmpty,{at:J(e.catalog.observedAt,c)})})]})}),m("div",{style:{display:"flex",flexDirection:"column",gap:"0.25rem"},children:[t("label",{htmlFor:"directory-membership-mode-input",style:re,children:r.membershipMode}),m("select",{id:"directory-membership-mode-input","data-testid":"directory-membership-mode",value:s,onChange:u=>x(u.target.value),style:{padding:"0.5rem",borderRadius:"6px",border:"1px solid #cbd5e1"},children:[t("option",{value:"direct",children:r.directMode}),t("option",{value:"transitive",children:r.transitiveMode})]})]}),t("button",{type:"submit","data-testid":"directory-link-submit",disabled:!(y&&C)||h,"aria-busy":h,style:{padding:"0.5rem 1rem",borderRadius:"6px",border:"none",backgroundColor:y&&C&&!h?"#2563eb":"#94a3b8",color:"#fff",fontWeight:600},children:r.link})]}),d.length===0?t("div",{"data-testid":"directory-empty",style:{padding:"2rem",textAlign:"center",color:"#64748b",backgroundColor:"#ffffff",borderRadius:"8px",border:"1px solid #e2e8f0"},children:r.empty}):m("table",{"data-testid":"directory-table",style:{width:"100%",borderCollapse:"collapse",backgroundColor:"#ffffff",borderRadius:"8px",overflow:"hidden",border:"1px solid #e2e8f0"},children:[t("thead",{children:m("tr",{style:{backgroundColor:"#f8fafc",textAlign:"left"},children:[t("th",{scope:"col",style:W,children:c.groupsView.name}),t("th",{scope:"col",style:W,children:r.externalKey}),t("th",{scope:"col",style:W,children:r.membershipMode}),t("th",{scope:"col",style:W,children:r.lastSynced}),t("th",{scope:"col",style:W,children:c.common.status}),t("th",{scope:"col",style:W,children:c.common.actions})]})}),t("tbody",{children:d.map(u=>{let L=u.externalLink,D=b.has(u.id);return m("tr",{"data-testid":`directory-row-${u.id}`,"data-sync-enabled":String(L.isSyncEnabled),style:{borderTop:"1px solid #e2e8f0"},children:[m("td",{style:W,children:[u.name,t("div",{style:{fontSize:"0.75rem",color:"#64748b"},children:u.groupKey})]}),t("td",{style:W,"data-testid":`directory-external-${u.id}`,children:L.externalKey}),t("td",{style:W,children:L.membershipMode==="direct"?r.directMode:r.transitiveMode}),m("td",{style:W,"data-testid":`directory-synced-${u.id}`,children:[L.syncedAt?J(L.syncedAt,c):r.neverSynced,L.unresolvedCount>0?t("div",{style:{fontSize:"0.75rem",color:"#b45309"},"data-testid":`directory-unresolved-${u.id}`,children:v(r.unresolvedTemplate,{count:L.unresolvedCount})}):null]}),m("td",{style:W,children:[t("span",{"data-testid":`directory-status-${u.id}`,style:{fontSize:"0.75rem",padding:"2px 8px",borderRadius:"10px",backgroundColor:L.isSyncEnabled?"#dcfce7":"#fee2e2",color:L.isSyncEnabled?"#166534":"#b91c1c",fontWeight:600},children:L.isSyncEnabled?r.syncEnabled:r.syncPaused}),L.syncError?t("div",{style:{fontSize:"0.75rem",color:"#b91c1c",marginTop:"0.25rem"},"data-testid":`directory-error-${u.id}`,children:L.syncError}):null]}),t("td",{style:W,children:m("div",{style:{display:"flex",gap:"0.35rem",flexWrap:"wrap"},children:[t("button",{type:"button","data-testid":`directory-sync-now-${u.id}`,...Y(h),"aria-label":v(E===u.id?r.syncQueuedAria:r.syncNowAria,{group:u.name}),onClick:()=>n({intent:"requestDirectorySync",groupId:String(u.id)},g=>{g?.syncRequest==="queued"&&G({groupId:u.id,syncedAtAtPress:u.externalLink?.syncedAt??null})}),style:pe,children:E===u.id?r.syncQueued:r.syncNow}),t("button",{type:"button","data-testid":`directory-toggle-sync-${u.id}`,...Y(h),"aria-label":v(L.isSyncEnabled?r.pauseAria:r.resumeAria,{group:u.name}),onClick:()=>{G(null),n({intent:"setDirectorySyncEnabled",groupId:String(u.id),isSyncEnabled:String(!L.isSyncEnabled)})},style:pe,children:L.isSyncEnabled?r.pause:r.resume}),t("button",{type:"button","data-testid":`directory-allow-${u.id}`,...Y(h),"aria-label":v(D?r.disallowGroupAria:r.allowGroupAria,{group:u.name}),onClick:()=>{let g=S(u.id);if(D&&g){if(!window.confirm(v(r.confirmDisallow,{group:u.name})))return;n({intent:"removeAllowlistGroup",entryId:String(g.id)})}else n({intent:"addAllowlistGroup",groupId:String(u.id)})},style:pe,children:D?r.disallowGroup:r.allowGroup}),t("button",{type:"button","data-testid":`directory-unlink-${u.id}`,...Y(h),"aria-label":v(r.unlinkAria,{group:u.name}),onClick:()=>{window.confirm(v(r.confirmUnlink,{group:u.name,upstream:u.externalLink?.externalKey??""}))&&n({intent:"unlinkDirectoryGroup",groupId:String(u.id)})},style:{...pe,color:"#b91c1c",borderColor:"#fecaca"},children:r.unlink})]})})]},u.id)})})]})]})}var re={fontSize:"0.78rem",color:"#475569",fontWeight:600},Ae={position:"absolute",width:"1px",height:"1px",padding:0,margin:"-1px",overflow:"hidden",clipPath:"inset(50%)",whiteSpace:"nowrap",border:0},se={margin:0,fontSize:"1.05rem",fontWeight:700,color:"#0f172a"},W={padding:"0.6rem 0.75rem",fontSize:"0.85rem",verticalAlign:"top"};function Y(e){return{"aria-disabled":e,"aria-busy":e,"data-busy":e?"true":void 0}}var pe={padding:"0.25rem 0.6rem",fontSize:"0.75rem",borderRadius:"6px",border:"1px solid #cbd5e1",backgroundColor:"#fff",cursor:"pointer"},Se={users:Pe,groups:ht,group_members:wt,allowlist:kt,directory:At};function _t({renderHeader:e,pendingSyncPolling:o,basePath:n}){let c=oe()?.segment??"users",r=Object.hasOwn(Se,c)?Se[c]:Pe;return t(ke,{renderHeader:e,pendingSyncPolling:o,basePath:n,children:t(Ie.Provider,{value:n,children:t(r,{})})})}export{kt as AllowlistView,_t as AuthUserAdminAppView,lt as DEFAULT_PENDING_SYNC_POLLING,At as DirectoryView,wt as GroupMembersView,ht as GroupsView,$ as UserAdminInputError,B as UserAdminOperatorError,ke as UserAdminShell,Pe as UsersView,Tt as createInMemoryUserAdminStore,Pt as createUserAdminApp,j as defaultUserAdminLabels,Ct as jaUserAdminLabels,F as normalizeUpstreamKey,he as resolveUserAdminLabels,Et as userAdminAccessFor,Vt as userAdminIntents};
|
|
1
|
+
import{resolveVirtualScrollLocale as We}from"@aiquants/virtualscroll";var j={title:"Users & Groups",locale:"en",formatLocale:"en-US",timeZone:"UTC",heading:"\u{1F464} User administration",common:{create:"Create",edit:"Edit",delete:"Delete",save:"Save",cancel:"Cancel",actions:"Actions",status:"Status",id:"ID",readOnly:"Read-only",managedUpstream:"Managed upstream",idTemplate:"#{id}",none:"-"},errors:{unknownUpstream:"No group named {key} exists upstream. Check the spelling, or pick one from the list.",directoryDisabled:"This deployment has no directory configured, so groups cannot be linked.",invalidField:"\u201C{field}\u201D is missing or not a value this operation accepts.",unknownIntent:"This screen does not perform that operation.",fieldNames:{groupId:"Group",userId:"User",entryId:"Entry",displayName:"Display name",email:"Email",groupKey:"Group key",name:"Name",provider:"Directory provider",externalKey:"Directory group address",membershipMode:"Membership expansion",isActive:"Active",isSyncEnabled:"Synchronization",pattern:"Pattern",type:"Type"},invalidAllowlistType:"The allowlist type must be either an address or a domain.",unexpected:"The operation failed. The reason is in the server log.",alreadyLinked:"{key} is already linked to {group}. One upstream group can back only one local group.",forbidden:"You do not have permission for this operation. The badge in the header shows what you currently hold; ask an administrator for the rest.",requestTooLarge:"The request was too large to process."},permissions:{label:"Your permissions:",canWrite:"Editable",canRead:"Read only",canDelete:"Delete only",none:"No access",unknown:"Unknown"},tabs:{users:"\u{1F464} Users",groups:"\u{1F465} Groups",groupMembers:"\u{1F517} Members",allowlist:"\u2709\uFE0F Allowlist",directory:"\u{1F504} Directory"},usersView:{title:"Users",sortBy:"Sort by {column}",searchPlaceholder:"Search by name or email...",searchLabel:"Search users",addUser:"\uFF0B Add user",editUser:"Edit user",displayName:"Name",email:"Email",active:"Active",inactive:"Inactive",activate:"Activate",deactivate:"Deactivate",editUserAria:"Edit {user}",activateAria:"Activate {user}",deactivateAria:"Deactivate {user}",emptyFiltered:"No user matches this search.",listSummary:"Showing {shown} of {total} users.",sortedAscending:"{column}, sorted ascending. Activate to sort descending.",sortedDescending:"{column}, sorted descending. Activate to sort ascending.",confirmDeactivate:"Deactivate {user}? They will no longer be able to sign in.",empty:"No user is registered yet."},groupsView:{emptyFiltered:"No group matches this search",createModeLabel:"How to create the group",createModeLocal:"Create locally",createModeUpstream:"Create from a directory group",pickUpstream:"Directory group",pickUpstreamPlaceholder:"Search by name or address...",upstreamOptionMembers:"{count} members",upstreamAlreadyLinked:"already linked to {group}",providerUnset:"This deployment has no directory provider configured, so a directory group cannot be linked yet. Ask an administrator to set it.",pickUpstreamFirst:"Pick a directory group first.",allUpstreamLinked:"Every directory group is already linked to a local group. One upstream group can back only one local group, so unlink one first.",catalogEmpty:"The directory reported no groups as of {at}. Creating from a directory group is unavailable until one exists upstream.",catalogUnavailable:"The directory could not be reached, so the group list is unavailable. Enter the address by hand instead. ({reason})",catalogUnavailableHere:"The directory could not be reached, so creating from a directory group is unavailable. Create the group locally, then link it on the Directory tab. ({reason})",catalogObservedAt:"This list is the directory as of {at}.",catalogStale:"\u26A0 This list is the directory as of {at} and is overdue for a refresh \u2014 a group created since then will not appear.",catalogFailures:{denied:"the directory refused this deployment's credential",rateLimited:"the directory is rate-limiting this deployment",upstreamError:"the directory reported an internal error",neverObserved:"the directory has not been read yet \u2014 the synchronization job may not be running",unknown:"the reason is in the server log"},createUpstreamNotice:"Creates the group and links it in one step. The directory then owns its membership \u2014 and this screen can no longer rename, describe or delete the group. Unlinking is the only way back, and it removes the member ledger and the group-based sign-in permission.",openMembers:"Members",openMembersAria:"Show the members of {group}",title:"Groups",searchPlaceholder:"Search by group name or key...",searchLabel:"Search groups",addGroup:"\uFF0B Add group",editGroup:"Edit group",groupKey:"Group key",name:"Name",description:"Description",memberCountTemplate:"{count} members",confirmDelete:"Delete {group}? Its {count} membership record(s) go with it, and anyone who could sign in only through this group will be locked out.",confirmCreateLinked:"Create {group} and hand its membership to {upstream}? Renaming and deleting it here becomes impossible.",editGroupAria:"Edit {group}",deleteGroupAria:"Delete {group}",noDescription:"No description",groupKeyPlaceholder:"e.g. dev-team",namePlaceholder:"e.g. Development team",empty:"No groups registered"},groupMembersView:{title:"Group members",searchLabel:"Search users",searchPlaceholder:"Search by name or email...",onlyMembers:"Members only ({count})",emptyFiltered:"No user matches this search",summary:"Showing {shown} of {total} users. This group has {members} member(s).",selectGroup:"Select a group",selectPrompt:"Select a group to manage its members",noGroups:"No group exists yet. Create one on the Groups tab first.",emptyNoMembers:"This group has no members yet. Untick \u201CMembers only\u201D to add someone.",noUsers:"No user is registered yet. Add one on the Users tab first.",deepLinkMissed:"Group {id} was not found \u2014 it may have been deleted. Showing {group} instead.",actionAdd:"Add",actionRemove:"Remove",actionAddAria:"Add {user} to this group",actionRemoveAria:"Remove {user} from this group",upstreamNotice:"Membership of this group is owned by the upstream directory. Edit it there \u2014 a local change would be reverted at the next synchronization.",membersOfTemplate:"Members of {group}",groupKeyLabel:"Group key"},allowlistView:{title:"Sign-in allowlist",addEntry:"\uFF0B Add pattern",pattern:"Pattern (e.g. @example.com or user@example.com)",type:"Type",emailType:"Exact email match",domainType:"Domain match",emailTypeShort:"Email",domainTypeShort:"Domain",groupTypeShort:"Group",target:"Target",description:"Description",deploymentOwner:"Deployment-wide",confirmDelete:"Remove {target} from the sign-in allowlist? Anyone who could sign in only through it will be locked out.",deleteAria:"Remove the allowlist entry for {target}",empty:"No allowlist entries registered"},directoryView:{title:"Directory synchronization",membershipMode:"Membership",directMode:"Direct only",transitiveMode:"Nested expanded",lastSynced:"Last synced",neverSynced:"Never",unresolvedTemplate:"{count} unresolved",syncPaused:"Paused",syncEnabled:"Active",syncNow:"Sync now",syncQueued:"Queued",syncAlreadyPending:"A synchronization request for this scope is already waiting, so nothing was queued. If it never completes, the synchronization job may not be running.",linkSyncNotQueued:'The link was created, but a synchronization request could not be queued. Use "Sync now" on the Directory tab.',staleWarning:"Synchronization is overdue. Until it runs, people removed upstream keep their access.",disabledWarning:"Directory synchronization is not wired for this deployment. Existing memberships remain in force and are no longer being refreshed.",pausedTemplate:"{paused} of {total} links are paused",erroredTemplate:"Last synchronization failed for {groups}",erroredItemTemplate:"{group}: {reason}",listSeparator:", ",oldestSyncedTemplate:"oldest successful sync: {at}",pendingTemplate:"{count} sync requests are queued",nothingToLink:"Every group is already linked to a directory.",noGroupsToLink:"No group exists yet. Create one on the Groups tab first.",notWiredNotice:"Directory synchronization is not wired for this deployment, so links cannot be created or changed here.",syncNowAria:"Synchronize {group} now",syncQueuedAria:"A synchronization of {group} is queued",pauseAria:"Pause synchronization of {group}",resumeAria:"Resume synchronization of {group}",allowGroupAria:"Allow members of {group} to sign in",disallowGroupAria:"Stop allowing members of {group} to sign in",unlinkAria:"Unlink {group} from the directory",confirmDisallow:"Stop allowing {group} to sign in? Anyone who could sign in only through it will be locked out.",link:"Link to a directory group",unlink:"Unlink",externalKey:"Upstream group",empty:"No groups are linked to a directory",selectGroup:"Group to link",pickUpstreamPlaceholder:"Search by name or address...",pickerNoOptions:"No matching group",pickerClear:"Clear the selection",pickerToggle:"Show the group list",pickerSelected:"Selected: {value}",externalKeyPlaceholder:"e.g. dev-team@example.com",confirmLink:"Hand {group}'s membership to {upstream}? Renaming, deleting, and editing its members here becomes impossible.",confirmUnlink:"Unlink {group} from {upstream}? Its member ledger and group-based sign-in permission are removed.",pause:"Pause",resume:"Resume",allowGroup:"Allow sign-in",disallowGroup:"Stop allowing sign-in",groupOptionTemplate:"{name} ({key})"}},St={title:"\u30E6\u30FC\u30B6\u30FC\u30FB\u30B0\u30EB\u30FC\u30D7\u7BA1\u7406",locale:"ja",formatLocale:"ja-JP",timeZone:"Asia/Tokyo",heading:"\u{1F464} \u30E6\u30FC\u30B6\u30FC\u7BA1\u7406",common:{create:"\u4F5C\u6210",edit:"\u7DE8\u96C6",delete:"\u524A\u9664",save:"\u4FDD\u5B58",cancel:"\u30AD\u30E3\u30F3\u30BB\u30EB",actions:"\u64CD\u4F5C",status:"\u72B6\u614B",id:"ID",readOnly:"\u5909\u66F4\u4E0D\u53EF",managedUpstream:"\u4E0A\u6D41\u304C\u6240\u6709",idTemplate:"#{id}",none:"-"},errors:{unknownUpstream:"\u4E0A\u6D41\u306B {key} \u3068\u3044\u3046\u30B0\u30EB\u30FC\u30D7\u304C\u898B\u3064\u304B\u308A\u307E\u305B\u3093\u3002\u7DB4\u308A\u3092\u78BA\u8A8D\u3059\u308B\u304B\u3001\u4E00\u89A7\u304B\u3089\u9078\u3093\u3067\u304F\u3060\u3055\u3044\u3002",directoryDisabled:"\u3053\u306E\u914D\u5099\u306B\u306F\u30C7\u30A3\u30EC\u30AF\u30C8\u30EA\u304C\u8A2D\u5B9A\u3055\u308C\u3066\u3044\u306A\u3044\u305F\u3081\u3001\u30B0\u30EB\u30FC\u30D7\u3092\u9023\u643A\u3067\u304D\u307E\u305B\u3093\u3002",invalidField:"\u300C{field}\u300D\u304C\u672A\u6307\u5B9A\u304B\u3001\u3053\u306E\u64CD\u4F5C\u304C\u53D7\u3051\u4ED8\u3051\u3089\u308C\u306A\u3044\u5024\u3067\u3059\u3002",unknownIntent:"\u3053\u306E\u753B\u9762\u3067\u306F\u3001\u305D\u306E\u64CD\u4F5C\u3092\u884C\u3044\u307E\u305B\u3093\u3002",fieldNames:{groupId:"\u30B0\u30EB\u30FC\u30D7",userId:"\u30E6\u30FC\u30B6\u30FC",entryId:"\u9805\u76EE",displayName:"\u8868\u793A\u540D",email:"\u30E1\u30FC\u30EB\u30A2\u30C9\u30EC\u30B9",groupKey:"\u30B0\u30EB\u30FC\u30D7\u30AD\u30FC",name:"\u540D\u524D",provider:"\u9023\u643A\u30D7\u30ED\u30D0\u30A4\u30C0",externalKey:"\u30C7\u30A3\u30EC\u30AF\u30C8\u30EA\u306E\u30B0\u30EB\u30FC\u30D7\u30A2\u30C9\u30EC\u30B9",membershipMode:"\u6240\u5C5E\u306E\u5C55\u958B",isActive:"\u6709\u52B9",isSyncEnabled:"\u540C\u671F",pattern:"\u30D1\u30BF\u30FC\u30F3",type:"\u7A2E\u5225"},invalidAllowlistType:"\u8A31\u53EF\u30EA\u30B9\u30C8\u306E\u7A2E\u5225\u306F\u3001\u30A2\u30C9\u30EC\u30B9\u304B\u30C9\u30E1\u30A4\u30F3\u306E\u3044\u305A\u308C\u304B\u3067\u6307\u5B9A\u3057\u3066\u304F\u3060\u3055\u3044\u3002",unexpected:"\u64CD\u4F5C\u306B\u5931\u6557\u3057\u307E\u3057\u305F\u3002\u7406\u7531\u306F\u30B5\u30FC\u30D0\u30FC\u306E\u30ED\u30B0\u306B\u51FA\u3066\u3044\u307E\u3059\u3002",alreadyLinked:"{key} \u306F\u65E2\u306B {group} \u3068\u9023\u643A\u3057\u3066\u3044\u307E\u3059\u30021 \u3064\u306E\u4E0A\u6D41\u30B0\u30EB\u30FC\u30D7\u3092 2 \u3064\u306E\u30ED\u30FC\u30AB\u30EB\u30B0\u30EB\u30FC\u30D7\u3078\u7E4B\u3050\u3053\u3068\u306F\u3067\u304D\u307E\u305B\u3093\u3002",forbidden:"\u3053\u306E\u64CD\u4F5C\u3092\u884C\u3046\u6A29\u9650\u304C\u3042\u308A\u307E\u305B\u3093\u3002\u4ECA\u306E\u6A29\u9650\u306F\u30D8\u30C3\u30C0\u30FC\u306E\u30D0\u30C3\u30B8\u306B\u51FA\u3066\u3044\u307E\u3059\u3002\u5FC5\u8981\u3067\u3042\u308C\u3070\u7BA1\u7406\u8005\u306B\u4ED8\u4E0E\u3092\u4F9D\u983C\u3057\u3066\u304F\u3060\u3055\u3044\u3002",requestTooLarge:"\u9001\u4FE1\u3055\u308C\u305F\u5185\u5BB9\u304C\u5927\u304D\u3059\u304E\u308B\u305F\u3081\u51E6\u7406\u3067\u304D\u307E\u305B\u3093\u3067\u3057\u305F\u3002"},permissions:{label:"\u3042\u306A\u305F\u306E\u6A29\u9650:",canWrite:"\u7DE8\u96C6\u53EF",canRead:"\u95B2\u89A7\u306E\u307F",canDelete:"\u524A\u9664\u306E\u307F",none:"\u6A29\u9650\u306A\u3057",unknown:"\u6A29\u9650\u4E0D\u660E"},tabs:{users:"\u{1F464} \u30E6\u30FC\u30B6\u30FC\u4E00\u89A7",groups:"\u{1F465} \u30E6\u30FC\u30B6\u30FC\u30B0\u30EB\u30FC\u30D7",groupMembers:"\u{1F517} \u30B0\u30EB\u30FC\u30D7\u30E1\u30F3\u30D0\u30FC",allowlist:"\u2709\uFE0F \u30A2\u30AF\u30BB\u30B9\u8A31\u53EF\u30EA\u30B9\u30C8",directory:"\u{1F504} \u30C7\u30A3\u30EC\u30AF\u30C8\u30EA\u9023\u643A"},usersView:{title:"\u30E6\u30FC\u30B6\u30FC\u7BA1\u7406",sortBy:"{column} \u3067\u4E26\u3079\u66FF\u3048",searchPlaceholder:"\u8868\u793A\u540D\u3084 Email \u3067\u691C\u7D22...",searchLabel:"\u30E6\u30FC\u30B6\u30FC\u3092\u691C\u7D22",addUser:"\uFF0B \u30E6\u30FC\u30B6\u30FC\u8FFD\u52A0",editUser:"\u30E6\u30FC\u30B6\u30FC\u7DE8\u96C6",displayName:"\u8868\u793A\u540D",email:"Email",active:"\u6709\u52B9",inactive:"\u7121\u52B9",activate:"\u6709\u52B9\u5316",deactivate:"\u7121\u52B9\u5316",editUserAria:"{user} \u3092\u7DE8\u96C6",activateAria:"{user} \u3092\u6709\u52B9\u5316",deactivateAria:"{user} \u3092\u7121\u52B9\u5316",emptyFiltered:"\u691C\u7D22\u6761\u4EF6\u306B\u4E00\u81F4\u3059\u308B\u5229\u7528\u8005\u306F\u3044\u307E\u305B\u3093\u3002",listSummary:"{total} \u4EBA\u4E2D {shown} \u4EBA\u3092\u8868\u793A\u3057\u3066\u3044\u307E\u3059\u3002",sortedAscending:"{column} (\u6607\u9806\u3067\u4E26\u3079\u66FF\u3048\u4E2D)\u3002\u62BC\u3059\u3068\u964D\u9806\u306B\u306A\u308A\u307E\u3059\u3002",sortedDescending:"{column} (\u964D\u9806\u3067\u4E26\u3079\u66FF\u3048\u4E2D)\u3002\u62BC\u3059\u3068\u6607\u9806\u306B\u306A\u308A\u307E\u3059\u3002",confirmDeactivate:"{user} \u3092\u7121\u52B9\u5316\u3057\u307E\u3059\u304B\uFF1F \u4EE5\u5F8C\u30B5\u30A4\u30F3\u30A4\u30F3\u3067\u304D\u306A\u304F\u306A\u308A\u307E\u3059\u3002",empty:"\u30E6\u30FC\u30B6\u30FC\u304C\u767B\u9332\u3055\u308C\u3066\u3044\u307E\u305B\u3093\u3002"},groupsView:{emptyFiltered:"\u691C\u7D22\u6761\u4EF6\u306B\u4E00\u81F4\u3059\u308B\u30B0\u30EB\u30FC\u30D7\u306F\u3042\u308A\u307E\u305B\u3093",createModeLabel:"\u4F5C\u6210\u65B9\u6CD5",createModeLocal:"\u30ED\u30FC\u30AB\u30EB\u306B\u4F5C\u6210",createModeUpstream:"\u30C7\u30A3\u30EC\u30AF\u30C8\u30EA\u306E\u30B0\u30EB\u30FC\u30D7\u304B\u3089\u4F5C\u6210",pickUpstream:"\u30C7\u30A3\u30EC\u30AF\u30C8\u30EA\u306E\u30B0\u30EB\u30FC\u30D7",pickUpstreamPlaceholder:"\u540D\u524D\u304B\u30A2\u30C9\u30EC\u30B9\u3067\u691C\u7D22...",upstreamOptionMembers:"{count} \u540D",upstreamAlreadyLinked:"{group} \u3068\u9023\u643A\u6E08\u307F",providerUnset:"\u3053\u306E\u914D\u5099\u306B\u306F\u9023\u643A\u30D7\u30ED\u30D0\u30A4\u30C0\u540D\u304C\u8A2D\u5B9A\u3055\u308C\u3066\u3044\u306A\u3044\u305F\u3081\u3001\u30C7\u30A3\u30EC\u30AF\u30C8\u30EA\u306E\u30B0\u30EB\u30FC\u30D7\u3092\u9023\u643A\u3067\u304D\u307E\u305B\u3093\u3002\u7BA1\u7406\u8005\u306B\u8A2D\u5B9A\u3092\u4F9D\u983C\u3057\u3066\u304F\u3060\u3055\u3044\u3002",pickUpstreamFirst:"\u5148\u306B\u30C7\u30A3\u30EC\u30AF\u30C8\u30EA\u306E\u30B0\u30EB\u30FC\u30D7\u3092\u9078\u3093\u3067\u304F\u3060\u3055\u3044\u3002",allUpstreamLinked:"\u30C7\u30A3\u30EC\u30AF\u30C8\u30EA\u306E\u30B0\u30EB\u30FC\u30D7\u306F\u3059\u3079\u3066\u3001\u3044\u305A\u308C\u304B\u306E\u30ED\u30FC\u30AB\u30EB\u30B0\u30EB\u30FC\u30D7\u3068\u9023\u643A\u6E08\u307F\u3067\u3059\u30021 \u3064\u306E\u4E0A\u6D41\u30B0\u30EB\u30FC\u30D7\u3092\u7E4B\u3052\u308B\u5148\u306F 1 \u3064\u3060\u3051\u306A\u306E\u3067\u3001\u7E4B\u304E\u66FF\u3048\u308B\u306B\u306F\u3069\u308C\u304B\u306E\u9023\u643A\u3092\u89E3\u9664\u3057\u3066\u304F\u3060\u3055\u3044\u3002",catalogEmpty:"{at} \u6642\u70B9\u3067\u3001\u4E0A\u6D41\u306B\u30B0\u30EB\u30FC\u30D7\u304C 1 \u3064\u3082\u3042\u308A\u307E\u305B\u3093\u3067\u3057\u305F\u3002\u4E0A\u6D41\u306B\u30B0\u30EB\u30FC\u30D7\u304C\u3067\u304D\u308B\u307E\u3067\u3001\u30C7\u30A3\u30EC\u30AF\u30C8\u30EA\u304B\u3089\u306E\u4F5C\u6210\u306F\u3067\u304D\u307E\u305B\u3093\u3002",catalogUnavailable:"\u4E0A\u6D41\u3078\u5230\u9054\u3067\u304D\u306A\u3044\u305F\u3081\u3001\u30B0\u30EB\u30FC\u30D7\u4E00\u89A7\u3092\u51FA\u305B\u307E\u305B\u3093\u3002\u30A2\u30C9\u30EC\u30B9\u3092\u624B\u5165\u529B\u3057\u3066\u304F\u3060\u3055\u3044\u3002({reason})",catalogUnavailableHere:"\u4E0A\u6D41\u3078\u5230\u9054\u3067\u304D\u306A\u3044\u305F\u3081\u3001\u30C7\u30A3\u30EC\u30AF\u30C8\u30EA\u304B\u3089\u306E\u4F5C\u6210\u306F\u3067\u304D\u307E\u305B\u3093\u3002\u30ED\u30FC\u30AB\u30EB\u306B\u4F5C\u6210\u3057\u305F\u3046\u3048\u3067\u3001\u9023\u643A\u30BF\u30D6\u304B\u3089\u9023\u643A\u3057\u3066\u304F\u3060\u3055\u3044\u3002({reason})",catalogObservedAt:"\u3053\u306E\u4E00\u89A7\u306F {at} \u6642\u70B9\u306E\u30C7\u30A3\u30EC\u30AF\u30C8\u30EA\u3067\u3059\u3002",catalogStale:"\u26A0 \u3053\u306E\u4E00\u89A7\u306F {at} \u6642\u70B9\u306E\u3082\u306E\u3067\u3001\u66F4\u65B0\u304C\u6EDE\u3063\u3066\u3044\u307E\u3059\u3002\u305D\u308C\u4EE5\u964D\u306B\u4F5C\u3089\u308C\u305F\u30B0\u30EB\u30FC\u30D7\u306F\u51FA\u3066\u304D\u307E\u305B\u3093\u3002",catalogFailures:{denied:"\u3053\u306E\u914D\u5099\u306E\u8CC7\u683C\u60C5\u5831\u304C\u4E0A\u6D41\u306B\u62D2\u5426\u3055\u308C\u307E\u3057\u305F",rateLimited:"\u4E0A\u6D41\u304C\u3053\u306E\u914D\u5099\u306E\u547C\u3073\u51FA\u3057\u3092\u5236\u9650\u3057\u3066\u3044\u307E\u3059",upstreamError:"\u4E0A\u6D41\u304C\u5185\u90E8\u30A8\u30E9\u30FC\u3092\u8FD4\u3057\u307E\u3057\u305F",neverObserved:"\u4E0A\u6D41\u3092\u307E\u3060\u4E00\u5EA6\u3082\u8AAD\u3081\u3066\u3044\u307E\u305B\u3093 (\u540C\u671F\u30B8\u30E7\u30D6\u304C\u52D5\u3044\u3066\u3044\u306A\u3044\u53EF\u80FD\u6027\u304C\u3042\u308A\u307E\u3059)",unknown:"\u7406\u7531\u306F\u30B5\u30FC\u30D0\u30FC\u306E\u30ED\u30B0\u306B\u51FA\u3066\u3044\u307E\u3059"},createUpstreamNotice:"\u30B0\u30EB\u30FC\u30D7\u306E\u4F5C\u6210\u3068\u9023\u643A\u3092 1 \u624B\u3067\u884C\u3044\u307E\u3059\u3002\u4EE5\u5F8C\u3001\u6240\u5C5E\u306F\u4E0A\u6D41\u304C\u6240\u6709\u3057 \u2014 \u3053\u306E\u753B\u9762\u304B\u3089\u306F\u540D\u79F0\u30FB\u8AAC\u660E\u306E\u5909\u66F4\u3082\u524A\u9664\u3082\u3067\u304D\u306A\u304F\u306A\u308A\u307E\u3059\u3002\u623B\u3059\u624B\u6BB5\u306F\u9023\u643A\u89E3\u9664\u3060\u3051\u3067\u3001\u305D\u308C\u306F\u30E1\u30F3\u30D0\u30FC\u53F0\u5E33\u3068\u30B0\u30EB\u30FC\u30D7\u5358\u4F4D\u306E\u30B5\u30A4\u30F3\u30A4\u30F3\u8A31\u53EF\u3092\u6D88\u3057\u307E\u3059\u3002",openMembers:"\u30E1\u30F3\u30D0\u30FC",openMembersAria:"{group} \u306E\u30E1\u30F3\u30D0\u30FC\u3092\u8868\u793A",title:"\u30E6\u30FC\u30B6\u30FC\u30B0\u30EB\u30FC\u30D7\u7BA1\u7406",searchPlaceholder:"\u30B0\u30EB\u30FC\u30D7\u540D\u3084\u30AD\u30FC\u3067\u691C\u7D22...",searchLabel:"\u30B0\u30EB\u30FC\u30D7\u3092\u691C\u7D22",addGroup:"\uFF0B \u30B0\u30EB\u30FC\u30D7\u8FFD\u52A0",editGroup:"\u30B0\u30EB\u30FC\u30D7\u7DE8\u96C6",groupKey:"\u30B0\u30EB\u30FC\u30D7\u30AD\u30FC",name:"\u540D\u79F0",description:"\u8AAC\u660E",memberCountTemplate:"\u6240\u5C5E {count} \u540D",confirmDelete:"{group} \u3092\u524A\u9664\u3057\u307E\u3059\u304B\uFF1F \u6240\u5C5E {count} \u4EF6\u3082\u4E00\u7DD2\u306B\u6D88\u3048\u3001\u3053\u306E\u30B0\u30EB\u30FC\u30D7\u3067\u3057\u304B\u30B5\u30A4\u30F3\u30A4\u30F3\u3067\u304D\u306A\u3044\u4EBA\u306F\u30B5\u30A4\u30F3\u30A4\u30F3\u3067\u304D\u306A\u304F\u306A\u308A\u307E\u3059\u3002",confirmCreateLinked:"{group} \u3092\u4F5C\u6210\u3057\u3001\u305D\u306E\u6240\u5C5E\u3092 {upstream} \u306B\u59D4\u306D\u307E\u3059\u304B\uFF1F \u4EE5\u5F8C\u3053\u306E\u753B\u9762\u304B\u3089\u540D\u79F0\u5909\u66F4\u3068\u524A\u9664\u304C\u3067\u304D\u306A\u304F\u306A\u308A\u307E\u3059\u3002",editGroupAria:"{group} \u3092\u7DE8\u96C6",deleteGroupAria:"{group} \u3092\u524A\u9664",noDescription:"\u8AAC\u660E\u306A\u3057",groupKeyPlaceholder:"\u4F8B: dev-team",namePlaceholder:"\u4F8B: \u958B\u767A\u30C1\u30FC\u30E0",empty:"\u30E6\u30FC\u30B6\u30FC\u30B0\u30EB\u30FC\u30D7\u304C\u767B\u9332\u3055\u308C\u3066\u3044\u307E\u305B\u3093"},groupMembersView:{title:"\u30B0\u30EB\u30FC\u30D7\u30E1\u30F3\u30D0\u30FC\u7BA1\u7406",searchLabel:"\u5229\u7528\u8005\u3092\u691C\u7D22",searchPlaceholder:"\u8868\u793A\u540D\u3084 Email \u3067\u691C\u7D22...",onlyMembers:"\u6240\u5C5E\u306E\u307F\u8868\u793A ({count} \u540D)",emptyFiltered:"\u691C\u7D22\u6761\u4EF6\u306B\u4E00\u81F4\u3059\u308B\u5229\u7528\u8005\u306F\u3044\u307E\u305B\u3093",summary:"{total} \u540D\u306E\u3046\u3061 {shown} \u540D\u3092\u8868\u793A\u4E2D\u3002\u3053\u306E\u30B0\u30EB\u30FC\u30D7\u306E\u6240\u5C5E\u306F {members} \u540D\u3067\u3059\u3002",selectGroup:"\u30B0\u30EB\u30FC\u30D7\u9078\u629E",selectPrompt:"\u30B0\u30EB\u30FC\u30D7\u3092\u9078\u629E\u3057\u3066\u304F\u3060\u3055\u3044",noGroups:"\u30B0\u30EB\u30FC\u30D7\u304C\u307E\u3060 1 \u3064\u3082\u3042\u308A\u307E\u305B\u3093\u3002\u5148\u306B\u30B0\u30EB\u30FC\u30D7\u30BF\u30D6\u3067\u4F5C\u6210\u3057\u3066\u304F\u3060\u3055\u3044\u3002",emptyNoMembers:"\u3053\u306E\u30B0\u30EB\u30FC\u30D7\u306B\u306F\u307E\u3060\u30E1\u30F3\u30D0\u30FC\u304C\u3044\u307E\u305B\u3093\u3002\u300C\u6240\u5C5E\u306E\u307F\u8868\u793A\u300D\u306E\u30C1\u30A7\u30C3\u30AF\u3092\u5916\u3059\u3068\u8FFD\u52A0\u3067\u304D\u307E\u3059\u3002",noUsers:"\u5229\u7528\u8005\u304C\u307E\u3060 1 \u4EBA\u3082\u767B\u9332\u3055\u308C\u3066\u3044\u307E\u305B\u3093\u3002\u5148\u306B\u30E6\u30FC\u30B6\u30FC\u30BF\u30D6\u3067\u8FFD\u52A0\u3057\u3066\u304F\u3060\u3055\u3044\u3002",deepLinkMissed:"\u30B0\u30EB\u30FC\u30D7 {id} \u304C\u898B\u3064\u304B\u308A\u307E\u305B\u3093\u3067\u3057\u305F (\u524A\u9664\u3055\u308C\u305F\u53EF\u80FD\u6027\u304C\u3042\u308A\u307E\u3059)\u3002\u4EE3\u308F\u308A\u306B {group} \u3092\u8868\u793A\u3057\u3066\u3044\u307E\u3059\u3002",actionAdd:"\u8FFD\u52A0",actionRemove:"\u9664\u5916",actionAddAria:"{user} \u3092\u3053\u306E\u30B0\u30EB\u30FC\u30D7\u3078\u8FFD\u52A0",actionRemoveAria:"{user} \u3092\u3053\u306E\u30B0\u30EB\u30FC\u30D7\u304B\u3089\u9664\u5916",upstreamNotice:"\u3053\u306E\u30B0\u30EB\u30FC\u30D7\u306E\u6240\u5C5E\u306F\u4E0A\u6D41\u30C7\u30A3\u30EC\u30AF\u30C8\u30EA\u304C\u6240\u6709\u3057\u3066\u3044\u307E\u3059\u3002\u5909\u66F4\u306F\u4E0A\u6D41\u3067\u884C\u3063\u3066\u304F\u3060\u3055\u3044 (\u3053\u3053\u3067\u5909\u3048\u3066\u3082\u6B21\u306E\u540C\u671F\u3067\u5143\u306B\u623B\u308A\u307E\u3059)\u3002",membersOfTemplate:"{group} \u306E\u6240\u5C5E\u30E1\u30F3\u30D0\u30FC",groupKeyLabel:"\u30B0\u30EB\u30FC\u30D7\u30AD\u30FC"},allowlistView:{title:"\u30B5\u30A4\u30F3\u30A4\u30F3\u8A31\u53EF\u30EA\u30B9\u30C8",addEntry:"\uFF0B \u30D1\u30BF\u30FC\u30F3\u8FFD\u52A0",pattern:"\u30D1\u30BF\u30FC\u30F3 (\u4F8B: @example.com \u307E\u305F\u306F user@example.com)",type:"\u7A2E\u5225",emailType:"\u30E1\u30FC\u30EB\u30A2\u30C9\u30EC\u30B9\u5B8C\u5168\u4E00\u81F4",domainType:"\u30C9\u30E1\u30A4\u30F3\u4E00\u81F4",emailTypeShort:"\u30E1\u30FC\u30EB",domainTypeShort:"\u30C9\u30E1\u30A4\u30F3",groupTypeShort:"\u30B0\u30EB\u30FC\u30D7",target:"\u5BFE\u8C61",description:"\u8AAC\u660E / \u5099\u8003",deploymentOwner:"\u914D\u5099\u5171\u901A",confirmDelete:"{target} \u3092\u8A31\u53EF\u30EA\u30B9\u30C8\u304B\u3089\u524A\u9664\u3057\u307E\u3059\u304B\uFF1F \u3053\u308C\u3067\u3057\u304B\u30B5\u30A4\u30F3\u30A4\u30F3\u3067\u304D\u306A\u3044\u4EBA\u306F\u30ED\u30B0\u30A4\u30F3\u3067\u304D\u306A\u304F\u306A\u308A\u307E\u3059\u3002",deleteAria:"{target} \u306E\u8A31\u53EF\u3092\u524A\u9664",empty:"\u30B5\u30A4\u30F3\u30A4\u30F3\u8A31\u53EF\u30EA\u30B9\u30C8\u306B\u767B\u9332\u304C\u3042\u308A\u307E\u305B\u3093\u3002"},directoryView:{title:"\u30C7\u30A3\u30EC\u30AF\u30C8\u30EA\u540C\u671F",membershipMode:"\u6240\u5C5E\u306E\u5C55\u958B",directMode:"\u76F4\u63A5\u6240\u5C5E\u306E\u307F",transitiveMode:"\u5165\u308C\u5B50\u3092\u5C55\u958B",lastSynced:"\u6700\u7D42\u540C\u671F",neverSynced:"\u672A\u5B9F\u884C",unresolvedTemplate:"{count} \u4EF6\u304C\u672A\u89E3\u6C7A",syncPaused:"\u505C\u6B62\u4E2D",syncEnabled:"\u6709\u52B9",syncNow:"\u4ECA\u3059\u3050\u540C\u671F",syncQueued:"\u540C\u671F\u3092\u8981\u6C42\u3057\u307E\u3057\u305F",syncAlreadyPending:"\u3053\u306E\u7BC4\u56F2\u306E\u540C\u671F\u8981\u6C42\u306F\u65E2\u306B\u5F85\u6A5F\u4E2D\u306E\u305F\u3081\u3001\u65B0\u3057\u304F\u306F\u7A4D\u307F\u307E\u305B\u3093\u3067\u3057\u305F\u3002\u3044\u3064\u307E\u3067\u3082\u5B8C\u4E86\u3057\u306A\u3044\u5834\u5408\u3001\u540C\u671F\u30B8\u30E7\u30D6\u304C\u52D5\u3044\u3066\u3044\u306A\u3044\u53EF\u80FD\u6027\u304C\u3042\u308A\u307E\u3059\u3002",linkSyncNotQueued:"\u9023\u643A\u306F\u4F5C\u6210\u3057\u307E\u3057\u305F\u304C\u3001\u540C\u671F\u8981\u6C42\u3092\u7A4D\u3081\u307E\u305B\u3093\u3067\u3057\u305F\u3002\u30C7\u30A3\u30EC\u30AF\u30C8\u30EA\u9023\u643A\u30BF\u30D6\u306E\u300C\u4ECA\u3059\u3050\u540C\u671F\u300D\u3067\u8981\u6C42\u3057\u3066\u304F\u3060\u3055\u3044\u3002",staleWarning:"\u540C\u671F\u304C\u6EDE\u3063\u3066\u3044\u307E\u3059\u3002\u5B9F\u884C\u3055\u308C\u308B\u307E\u3067\u3001\u4E0A\u6D41\u304B\u3089\u5916\u308C\u305F\u4EBA\u306E\u30A2\u30AF\u30BB\u30B9\u306F\u6B8B\u308A\u7D9A\u3051\u307E\u3059\u3002",disabledWarning:"\u3053\u306E\u914D\u5099\u3067\u306F\u30C7\u30A3\u30EC\u30AF\u30C8\u30EA\u540C\u671F\u304C\u7D50\u7DDA\u3055\u308C\u3066\u3044\u307E\u305B\u3093\u3002\u65E2\u5B58\u306E\u6240\u5C5E\u306F\u305D\u306E\u307E\u307E\u6709\u52B9\u3067\u3001\u66F4\u65B0\u3060\u3051\u304C\u6B62\u307E\u3063\u3066\u3044\u307E\u3059\u3002",pausedTemplate:"\u9023\u643A {total} \u4EF6\u306E\u3046\u3061 {paused} \u4EF6\u304C\u505C\u6B62\u4E2D",erroredTemplate:"\u76F4\u8FD1\u306E\u540C\u671F\u306B\u5931\u6557\u3057\u305F\u30B0\u30EB\u30FC\u30D7: {groups}",erroredItemTemplate:"{group}: {reason}",listSeparator:" / ",oldestSyncedTemplate:"\u6700\u3082\u53E4\u3044\u540C\u671F\u6210\u529F: {at}",pendingTemplate:"{count} \u4EF6\u306E\u540C\u671F\u8981\u6C42\u304C\u672A\u51E6\u7406",nothingToLink:"\u3059\u3079\u3066\u306E\u30B0\u30EB\u30FC\u30D7\u304C\u65E2\u306B\u30C7\u30A3\u30EC\u30AF\u30C8\u30EA\u3068\u9023\u643A\u3057\u3066\u3044\u307E\u3059\u3002",noGroupsToLink:"\u30B0\u30EB\u30FC\u30D7\u304C\u307E\u3060 1 \u3064\u3082\u3042\u308A\u307E\u305B\u3093\u3002\u5148\u306B\u30B0\u30EB\u30FC\u30D7\u30BF\u30D6\u3067\u4F5C\u6210\u3057\u3066\u304F\u3060\u3055\u3044\u3002",notWiredNotice:"\u3053\u306E\u914D\u5099\u3067\u306F\u30C7\u30A3\u30EC\u30AF\u30C8\u30EA\u540C\u671F\u304C\u7D50\u7DDA\u3055\u308C\u3066\u3044\u306A\u3044\u305F\u3081\u3001\u3053\u3053\u304B\u3089\u9023\u643A\u306E\u4F5C\u6210\u30FB\u5909\u66F4\u306F\u3067\u304D\u307E\u305B\u3093\u3002",syncNowAria:"{group} \u3092\u4ECA\u3059\u3050\u540C\u671F",syncQueuedAria:"{group} \u306E\u540C\u671F\u3092\u8981\u6C42\u6E08\u307F",pauseAria:"{group} \u306E\u540C\u671F\u3092\u4E00\u6642\u505C\u6B62",resumeAria:"{group} \u306E\u540C\u671F\u3092\u518D\u958B",allowGroupAria:"{group} \u306E\u30E1\u30F3\u30D0\u30FC\u306E\u30B5\u30A4\u30F3\u30A4\u30F3\u3092\u8A31\u53EF",disallowGroupAria:"{group} \u306E\u30E1\u30F3\u30D0\u30FC\u306E\u30B5\u30A4\u30F3\u30A4\u30F3\u8A31\u53EF\u3092\u5916\u3059",unlinkAria:"{group} \u306E\u30C7\u30A3\u30EC\u30AF\u30C8\u30EA\u9023\u643A\u3092\u89E3\u9664",confirmDisallow:"{group} \u306E\u30B5\u30A4\u30F3\u30A4\u30F3\u8A31\u53EF\u3092\u5916\u3057\u307E\u3059\u304B\uFF1F \u3053\u308C\u3067\u3057\u304B\u30B5\u30A4\u30F3\u30A4\u30F3\u3067\u304D\u306A\u3044\u4EBA\u306F\u30ED\u30B0\u30A4\u30F3\u3067\u304D\u306A\u304F\u306A\u308A\u307E\u3059\u3002",link:"\u30C7\u30A3\u30EC\u30AF\u30C8\u30EA\u306E\u30B0\u30EB\u30FC\u30D7\u3068\u9023\u643A\u3059\u308B",unlink:"\u9023\u643A\u3092\u89E3\u9664",externalKey:"\u4E0A\u6D41\u30B0\u30EB\u30FC\u30D7",empty:"\u30C7\u30A3\u30EC\u30AF\u30C8\u30EA\u3068\u9023\u643A\u3057\u3066\u3044\u308B\u30B0\u30EB\u30FC\u30D7\u306F\u3042\u308A\u307E\u305B\u3093",selectGroup:"\u9023\u643A\u3059\u308B\u30B0\u30EB\u30FC\u30D7",pickUpstreamPlaceholder:"\u540D\u524D\u304B\u30A2\u30C9\u30EC\u30B9\u3067\u691C\u7D22...",pickerNoOptions:"\u4E00\u81F4\u3059\u308B\u30B0\u30EB\u30FC\u30D7\u304C\u3042\u308A\u307E\u305B\u3093",pickerClear:"\u9078\u629E\u3092\u89E3\u9664",pickerToggle:"\u30B0\u30EB\u30FC\u30D7\u4E00\u89A7\u3092\u958B\u304F",pickerSelected:"\u9078\u629E\u4E2D: {value}",externalKeyPlaceholder:"\u4F8B: dev-team@example.com",confirmLink:"{group} \u306E\u6240\u5C5E\u3092 {upstream} \u306B\u59D4\u306D\u307E\u3059\u304B\uFF1F \u4EE5\u5F8C\u3053\u306E\u753B\u9762\u304B\u3089\u540D\u79F0\u5909\u66F4\u30FB\u524A\u9664\u30FB\u30E1\u30F3\u30D0\u30FC\u7DE8\u96C6\u304C\u3067\u304D\u306A\u304F\u306A\u308A\u307E\u3059\u3002",confirmUnlink:"{group} \u3068 {upstream} \u306E\u9023\u643A\u3092\u89E3\u9664\u3057\u307E\u3059\u304B\uFF1F \u30E1\u30F3\u30D0\u30FC\u53F0\u5E33\u3068\u30B0\u30EB\u30FC\u30D7\u5358\u4F4D\u306E\u30B5\u30A4\u30F3\u30A4\u30F3\u8A31\u53EF\u304C\u5931\u308F\u308C\u307E\u3059\u3002",pause:"\u4E00\u6642\u505C\u6B62",resume:"\u518D\u958B",allowGroup:"\u30B5\u30A4\u30F3\u30A4\u30F3\u3092\u8A31\u53EF",disallowGroup:"\u30B5\u30A4\u30F3\u30A4\u30F3\u8A31\u53EF\u3092\u5916\u3059",groupOptionTemplate:"{name} ({key})"}};function je(e){if(e===void 0)return j.locale;try{return We(e)}catch(o){throw o instanceof RangeError?new RangeError(`[auth-react-router] labels.locale is the UI language, not a BCP 47 tag (dates and sorting read labels.formatLocale): ${o.message}`,{cause:o}):o}}function he(e){let o=j;return e?{title:e.title??o.title,locale:je(e.locale),formatLocale:e.formatLocale??o.formatLocale,timeZone:e.timeZone??o.timeZone,heading:e.heading??o.heading,common:{...o.common,...e.common},errors:{...o.errors,...e.errors},permissions:{...o.permissions,...e.permissions},tabs:{...o.tabs,...e.tabs},usersView:{...o.usersView,...e.usersView},groupsView:{...o.groupsView,...e.groupsView},groupMembersView:{...o.groupMembersView,...e.groupMembersView},allowlistView:{...o.allowlistView,...e.allowlistView},directoryView:{...o.directoryView,...e.directoryView}}:o}import{data as de}from"react-router";function v(e,o){return e.replace(/\{(\w+)\}/g,(n,c)=>Object.hasOwn(o,c)?String(o[c]):n)}function J(e,o){let n=/(?:Z|[+-]\d{2}:?\d{2})$/.test(e)?e:`${e}Z`;try{return new Intl.DateTimeFormat(o.formatLocale,{timeZone:o.timeZone,dateStyle:"medium",timeStyle:"short"}).format(new Date(n))}catch{return e}}function Rt(e){let o=e?.users??[{id:1,email:"admin@example.com",displayName:"\u30B7\u30B9\u30C6\u30E0\u7BA1\u7406\u8005",isActive:!0},{id:2,email:"user1@example.com",displayName:"\u958B\u767A \u592A\u90CE",isActive:!0},{id:3,email:"user2@example.com",displayName:"\u55B6\u696D \u82B1\u5B50",isActive:!0}],n=e?.groups??[{id:1,groupKey:"dev-team",name:"\u958B\u767A\u30C1\u30FC\u30E0",description:"\u30B7\u30B9\u30C6\u30E0\u958B\u767A\u62C5\u5F53\u30B0\u30EB\u30FC\u30D7",isActive:!0,readOnly:!1},{id:2,groupKey:"sales-dept",name:"\u55B6\u696D\u90E8",description:"\u55B6\u696D\u30BD\u30EA\u30E5\u30FC\u30B7\u30E7\u30F3\u62C5\u5F53",isActive:!0,readOnly:!1}],c=e?.groupMembers??[{id:1,groupId:1,userId:2},{id:2,groupId:2,userId:3}],u=e?.allowlist??[{id:1,pattern:"admin@example.com",type:"email",description:"\u521D\u671F\u7BA1\u7406\u8005",owner:{kind:"tenant",tenantId:"default"},readOnly:!1},{id:2,pattern:"@example.com",type:"domain",description:"\u793E\u5185\u30C9\u30E1\u30A4\u30F3",owner:{kind:"tenant",tenantId:"default"},readOnly:!1}];return{async listUsers(){return[...o]},async createUser(r){let i={id:Math.max(...o.map(y=>y.id),0)+1,email:r.email,displayName:r.displayName,isActive:!0};return o.push(i),i},async updateUser(r,i){let y=o.findIndex(w=>w.id===r);if(y===-1)throw new B(`User not found: ${r}`);return o[y]={...o[y],displayName:i.displayName,email:i.email},o[y]},async toggleUserActive(r,i){let y=o.findIndex(w=>w.id===r);if(y===-1)throw new B(`User not found: ${r}`);return o[y]={...o[y],isActive:i},o[y]},async listGroups(){return[...n]},async createGroup(r){let i={id:Math.max(...n.map(y=>y.id),0)+1,groupKey:r.groupKey,name:r.name,description:r.description,isActive:!0,readOnly:!1};return n.push(i),i},async updateGroup(r,i){let y=n.findIndex(w=>w.id===r);if(y===-1)throw new B(`Group not found: ${r}`);return n[y]={...n[y],name:i.name,description:i.description},n[y]},async deleteGroup(r){n=n.filter(i=>i.id!==r),c=c.filter(i=>i.groupId!==r)},async listGroupMembers(){return[...c]},async addGroupMember(r,i){let y=c.find(C=>C.groupId===r&&C.userId===i);if(y)return y;let w={id:Math.max(...c.map(C=>C.id),0)+1,groupId:r,userId:i};return c.push(w),w},async removeGroupMember(r,i){c=c.filter(y=>!(y.groupId===r&&y.userId===i))},async listAllowlist(){return[...u]},async addAllowlistEntry(r){let i={id:Math.max(...u.map(y=>y.id),0)+1,pattern:r.pattern,type:r.type,description:r.description,owner:{kind:"tenant",tenantId:"default"},readOnly:!1};return u.push(i),i},async removeAllowlistEntry(r){u=u.filter(i=>i.id!==r)},async addAllowlistGroup(r,i){let y=n.find(w=>w.id===r);if(!y)throw new B(`Group not found: ${r}`);u=[...u,{id:Math.max(...u.map(w=>w.id),0)+1,type:"group",groupId:r,groupKey:y.groupKey,groupName:y.name,description:i,owner:{kind:"tenant",tenantId:"default"},readOnly:!1}]},async removeAllowlistGroup(r){u=u.filter(i=>!(i.type==="group"&&i.id===r))},async linkDirectoryGroup(){throw new B("This in-memory store has no upstream directory; inject a real store to link groups.")},async createLinkedGroup(){throw new B("This in-memory store has no upstream directory; inject a real store to create a linked group.")},async unlinkDirectoryGroup(){throw new B("This in-memory store has no upstream directory; inject a real store to unlink groups.")},async setDirectorySyncEnabled(){throw new B("This in-memory store has no upstream directory; inject a real store to pause synchronization.")},async requestDirectorySync(){throw new B("This in-memory store has no upstream directory; inject a real store to request a sync.")},async getDirectoryStatus(){return{isEnabled:!1,provider:"",linkedGroupCount:0,isStale:!1,pausedGroupCount:0,stalenessThresholdSec:0,erroredGroupIds:[],pendingRequestCount:0}}}}function He(e,o){let n=Number.isFinite(o)&&o>0?o:_e;return(Date.now()-e.getTime())/1e3>n}var Qe=64*1024,_e=5400;async function we(e,o,n,c){if(!e)return{kind:"not-wired"};if(!o)return{kind:"not-wired"};try{let{groups:u,observedAt:r}=await e.listGroups(n);return r===null||!Number.isFinite(r.getTime())?{kind:"unavailable",reason:"neverObserved"}:{kind:"ready",groups:u,observedAt:r.toISOString(),isStale:He(r,c)}}catch(u){return console.error("[@aiquants/auth-react-router] directoryCatalog.listGroups failed; the picker falls back to manual entry:",u),{kind:"unavailable",reason:tt(u)}}}function F(e){return e.trim().toLowerCase()}var B=class extends Error{constructor(n){super(n);this.operatorFacing=!0;this.name="UserAdminOperatorError"}};function Ze(e){return e instanceof B||typeof e=="object"&&e!==null&&e.operatorFacing===!0&&e instanceof Error}var $=class extends Error{constructor(n,c={}){super(n);this.labelKey=n;this.values=c;this.name="UserAdminInputError"}};function Ye(e){return typeof e=="object"&&e!==null&&e.status===403}function Je(e){let o=String(e.get("type")??"");if(o==="email"||o==="domain")return o;throw new $("invalidAllowlistType")}var Xe=["users","groups","group_members","allowlist","directory"];function et(e){let o=e.replace(/\.data$/,"").split("/").filter(Boolean),n=o[o.length-1]??"";return Xe.includes(n)?n:"users"}var ue=new Map([["createUser",["create"]],["updateUser",["update"]],["toggleUserActive",["update"]],["createGroup",["create"]],["updateGroup",["update"]],["deleteGroup",["delete"]],["addGroupMember",["create"]],["removeGroupMember",["delete"]],["addAllowlistEntry",["create"]],["removeAllowlistEntry",["delete"]],["addAllowlistGroup",["create"]],["removeAllowlistGroup",["delete"]],["createLinkedGroup",["create","update","delete"]],["linkDirectoryGroup",["update","create","delete"]],["unlinkDirectoryGroup",["update","delete"]],["setDirectorySyncEnabled",["update"]],["requestDirectorySync",["update"]],["catalog",["update","create","delete"]]]);function Tt(){return[...ue.keys()]}function Vt(e){return ue.get(e)??[]}function tt(e){let o=typeof e=="object"&&e!==null&&"status"in e?e.status:void 0;return typeof o!="number"?"unknown":o===401||o===403?"denied":o===429?"rateLimited":o>=500?"upstreamError":"unknown"}function z(e,o){let n=e.get(o),c=Number(n);if(n===null||String(n).trim()===""||!Number.isInteger(c)||c<=0)throw new $("invalidField",{field:o});return c}function K(e,o){let n=String(e.get(o)??"").trim();if(n==="")throw new $("invalidField",{field:o});return n}function rt(e,o){let n=String(e.get(o)??"");if(n!=="true"&&n!=="false")throw new $("invalidField",{field:o});return n==="true"}function xe(e){let o=String(e.get("membershipMode")??"");if(o!=="direct"&&o!=="transitive")throw new $("invalidField",{field:"membershipMode"});return o}function ie(e,o){let n=String(e.get(o)??"").trim();return n===""?void 0:n}function Et(e){let o=he(e.labels);async function n(l){if(!e.resolveActor)return"user-admin";try{return await e.resolveActor(l)||"user-admin"}catch(s){return console.error("[@aiquants/auth-react-router] resolveActor failed; recording the request as an unnamed actor:",s),"user-admin"}}async function c(l,s){try{return await e.store.requestDirectorySync(l,await n(s))}catch(x){return console.error(`[@aiquants/auth-react-router] the link for group ${l} was created, but its sync request could not be queued:`,x),"not-queued"}}async function u(l){if(!e.directoryCatalog)return!1;let s=ue.get("catalog");if(s===void 0||s.length===0)return!1;try{for(let x of s)await e.guards.requireAccess(l,{action:x,intent:"catalog"});return!0}catch(x){try{e.guards.onDenied?.({intent:"catalog",actions:s,error:x})}catch(d){console.error("[@aiquants/auth-react-router] onDenied threw; the denial itself still stands:",d)}return!1}}async function r({request:l}){await e.guards.requireAccess(l,{action:"read",intent:"loader"});let s=et(new URL(l.url).pathname),x=(s==="groups"||s==="directory")&&await u(l),[d,b,S,h,f,G]=await Promise.all([e.store.listUsers(),e.store.listGroups(),e.store.listGroupMembers(),e.store.listAllowlist(),e.store.getDirectoryStatus(),e.getMyPermissions?e.getMyPermissions(l).catch(E=>(console.error("[@aiquants/auth-react-router] getMyPermissions failed; rendering the permission badge as unknown:",E),null)):Promise.resolve(null)]),U=await we(e.directoryCatalog,x,l,f.stalenessThresholdSec);return{resourceLabels:e.resourceLabels,segment:s,users:d,groups:b,groupMembers:S,allowlist:h,directoryStatus:f,myPermissions:G,catalog:U,labels:o}}async function i({request:l}){let s=Number(l.headers.get("content-length")??Number.NaN);if(Number.isFinite(s)&&s>Qe)return de({ok:!1,error:o.errors.requestTooLarge},{status:413});let x=await l.formData(),d=String(x.get("intent")??""),b=ue.get(d);if(!b)return de({ok:!1,error:o.errors.unknownIntent},{status:400});let S=f=>Ye(f),h=f=>{try{e.guards.onDenied?.({intent:d,actions:b,error:f})}catch{}return de({ok:!1,error:o.errors.forbidden},{status:403})};try{for(let f of b)await e.guards.requireAccess(l,{action:f,intent:d})}catch(f){if(!S(f))throw f;return h(f)}try{return await M(d,x,l)}catch(f){if(S(f))return h(f);if(f instanceof Response)throw f;if(f instanceof $){let G=f.values.field,U=typeof G=="string"?{...f.values,field:o.errors.fieldNames[G]??G}:f.values,E=o.errors[f.labelKey];return{ok:!1,error:v(typeof E=="string"?E:String(f.labelKey),U)}}return console.error(`[@aiquants/auth-react-router] intent "${d}" failed:`,f),{ok:!1,error:Ze(f)?f.message:o.errors.unexpected}}}function y(l,s,x){let d=String(l.get("externalId")??"").trim();if(x.kind==="ready"){if(d!==""&&x.groups.some(h=>h.externalId===d))return d;let b=F(s),S=x.groups.find(h=>F(h.externalKey)===b);if(S)return S.externalId}return d===""?s:d}function w(l){let s=l.provider.trim();if(!l.isEnabled||s==="")throw new $("directoryDisabled");return s}async function C(l,s){let x=F(l),d=F(s),S=(await e.store.listGroups()).find(h=>h.externalLink!==void 0&&(F(h.externalLink.externalId)===x||F(h.externalLink.externalKey)===d));if(S)throw new $("alreadyLinked",{key:s,group:S.name})}function k(l,s,x){if(x.kind!=="ready")return;let d=F(l),b=F(s);if(!x.groups.some(S=>F(S.externalId)===d&&F(S.externalKey)===b))throw new $("unknownUpstream",{key:s})}async function M(l,s,x){let d=null,b=async()=>(d??(d=await e.store.getDirectoryStatus()),d),S=async()=>we(e.directoryCatalog,!0,x,(await b()).stalenessThresholdSec);if(l==="createUser")return await e.store.createUser({displayName:K(s,"displayName"),email:K(s,"email")}),{ok:!0};if(l==="updateUser")return await e.store.updateUser(z(s,"userId"),{displayName:K(s,"displayName"),email:K(s,"email")}),{ok:!0};if(l==="toggleUserActive"){let h=String(s.get("isActive")??"");if(h!=="true"&&h!=="false")throw new $("invalidField",{field:"isActive"});return await e.store.toggleUserActive(z(s,"userId"),h==="true"),{ok:!0}}if(l==="createGroup")return await e.store.createGroup({groupKey:K(s,"groupKey"),name:K(s,"name"),description:ie(s,"description")}),{ok:!0};if(l==="updateGroup")return await e.store.updateGroup(z(s,"groupId"),{name:K(s,"name"),description:ie(s,"description")}),{ok:!0};if(l==="deleteGroup")return await e.store.deleteGroup(z(s,"groupId")),{ok:!0};if(l==="addGroupMember")return await e.store.addGroupMember(z(s,"groupId"),z(s,"userId")),{ok:!0};if(l==="removeGroupMember")return await e.store.removeGroupMember(z(s,"groupId"),z(s,"userId")),{ok:!0};if(l==="addAllowlistEntry"){let h=Je(s);return await e.store.addAllowlistEntry({pattern:K(s,"pattern"),type:h,description:ie(s,"description")}),{ok:!0}}if(l==="addAllowlistGroup")return await e.store.addAllowlistGroup(z(s,"groupId"),ie(s,"description")),{ok:!0};if(l==="removeAllowlistGroup")return await e.store.removeAllowlistGroup(z(s,"entryId")),{ok:!0};if(l==="createLinkedGroup"){let h=K(s,"externalKey"),f=w(await b()),G=await S(),U=y(s,h,G);await C(U,h),k(U,h,G);let E=await e.store.createLinkedGroup({groupKey:K(s,"groupKey"),name:K(s,"name"),description:ie(s,"description"),provider:f,externalId:U,externalKey:h,membershipMode:xe(s)});return{ok:!0,syncRequest:await c(E.id,x)}}if(l==="linkDirectoryGroup"){let h=K(s,"externalKey"),f=w(await b()),G=await S(),U=y(s,h,G);await C(U,h),k(U,h,G);let E=z(s,"groupId");return await e.store.linkDirectoryGroup(E,{provider:f,externalId:U,externalKey:h,membershipMode:xe(s)}),{ok:!0,syncRequest:await c(E,x)}}if(l==="unlinkDirectoryGroup")return await e.store.unlinkDirectoryGroup(z(s,"groupId")),{ok:!0};if(l==="setDirectorySyncEnabled")return await e.store.setDirectorySyncEnabled(z(s,"groupId"),rt(s,"isSyncEnabled")),{ok:!0};if(l==="requestDirectorySync"){let h=String(s.get("groupId")??"").trim();return{ok:!0,syncRequest:await e.store.requestDirectorySync(h===""?null:z(s,"groupId"),await n(x))}}return l==="removeAllowlistEntry"?(await e.store.removeAllowlistEntry(z(s,"entryId")),{ok:!0}):(console.error(`[@aiquants/auth-react-router] intent "${l}" is in the permission table but has no handler`),de({ok:!1,error:o.errors.unknownIntent},{status:400}))}return{loader:r,action:i}}import{useEffect as ot,useRef as it}from"react";import{Link as nt,useLoaderData as at,useRevalidator as st}from"react-router";import{jsx as q,jsxs as X}from"react/jsx-runtime";var lt={intervalMs:3e3,maxMs:3e5};function dt(e,o){let n=st(),c=it(n.state);c.current=n.state;let{revalidate:u}=n,{intervalMs:r,maxMs:i}=o;ot(()=>{if(e<=0)return;let y=Date.now(),w=setInterval(()=>{if(Date.now()-y>=i){clearInterval(w);return}c.current==="idle"&&u()},r);return()=>clearInterval(w)},[e,r,i,u])}function ve({label:e,summary:o}){return X("span",{style:{display:"inline-flex",alignItems:"center",gap:"0.18rem",fontSize:"0.65rem",padding:"0.08rem 0.35rem",borderRadius:"9999px",backgroundColor:o.bgColor,color:o.color,border:`1px solid ${o.borderColor}`,fontWeight:600,lineHeight:"1.2"},children:[X("span",{children:[e,":"]}),q("span",{children:o.text})]})}function ut({status:e,labels:o,groups:n}){if(!e||e.linkedGroupCount===0)return null;let c=o.directoryView,u=[];if(e.isEnabled||u.push({id:"disabled",text:c.disabledWarning}),e.pausedGroupCount>0&&u.push({id:"paused",text:v(c.pausedTemplate,{paused:e.pausedGroupCount,total:e.linkedGroupCount})}),e.isStale){let r=e.oldestSyncedAt?J(e.oldestSyncedAt,o):c.neverSynced;u.push({id:"stale",text:`${c.staleWarning} ${v(c.oldestSyncedTemplate,{at:r})}`})}if(e.erroredGroupIds.length>0){let r=e.erroredGroupIds.map(i=>{let y=n.find(C=>C.id===i);if(!y)return v(o.common.idTemplate,{id:i});let w=y.externalLink?.syncError;return w?v(c.erroredItemTemplate,{group:y.name,reason:w}):y.name});u.push({id:"errored",text:v(c.erroredTemplate,{groups:r.join(c.listSeparator)})})}return e.pendingRequestCount>0&&u.push({id:"pending",text:v(c.pendingTemplate,{count:e.pendingRequestCount})}),u.length===0?null:X("section",{"aria-labelledby":"directory-sync-heading","data-testid":"directory-sync-banner",style:{display:"flex",flexDirection:"column",gap:"0.35rem",padding:"0.7rem 1rem",marginBottom:"1rem",borderRadius:"6px",border:"1px solid #fde68a",backgroundColor:"#fffbeb",color:"#92400e",fontSize:"0.85rem"},children:[q("h2",{id:"directory-sync-heading",style:{margin:0,fontSize:"0.9rem",fontWeight:700},children:c.title}),u.map(r=>q("span",{"data-directory-warning":r.id,children:r.text},r.id))]})}function ke({children:e,renderHeader:o,pendingSyncPolling:n,basePath:c}){let u=at();dt(u?.directoryStatus?.pendingRequestCount??0,n??lt);let r=u?.segment??"users",i=u?.labels??j,y=u?.myPermissions??null,w=u?.resourceLabels??{},C=b=>Object.hasOwn(w,b)?w[b]:b,k=[{key:"users",label:i.tabs.users,href:c},{key:"groups",label:i.tabs.groups,href:`${c}/groups`},{key:"group_members",label:i.tabs.groupMembers,href:`${c}/group_members`},{key:"allowlist",label:i.tabs.allowlist,href:`${c}/allowlist`}],M=(u?.groups??[]).some(b=>b.externalLink);(u?.directoryStatus?.isEnabled||(u?.directoryStatus?.linkedGroupCount??0)>0||M)&&k.push({key:"directory",label:i.tabs.directory,href:`${c}/directory`});let l=Object.entries(y??{}),s={text:i.permissions.unknown,color:"#92400e",bgColor:"#fffbeb",borderColor:"#fde68a"},x=b=>b===void 0?s:b.canWrite?{text:i.permissions.canWrite,color:"#047857",bgColor:"#ecfdf5",borderColor:"#a7f3d0"}:b.canRead?{text:i.permissions.canRead,color:"#1d4ed8",bgColor:"#eff6ff",borderColor:"#bfdbfe"}:b.canDelete?{text:i.permissions.canDelete,color:"#b91c1c",bgColor:"#fef2f2",borderColor:"#fecaca"}:{text:i.permissions.none,color:"#475569",bgColor:"#f1f5f9",borderColor:"#cbd5e1"},d=X("div",{style:{display:"flex",alignItems:"center",gap:"0.4rem"},"data-testid":"user-admin-header-annotation",children:[q("span",{style:{fontSize:"0.75rem",backgroundColor:"#e0f2fe",color:"#0369a1",padding:"2px 8px",borderRadius:"12px",fontWeight:600},children:i.heading}),X("div",{style:{display:"inline-flex",alignItems:"center",gap:"0.25rem",fontSize:"0.68rem",color:"#475569"},"data-testid":"user-admin-permissions-badge",children:[q("span",{style:{fontWeight:600,color:"#334155"},children:i.permissions.label}),q("span",{style:{display:"inline-flex",alignItems:"center",gap:"0.18rem"},children:l.length===0?q("span",{"data-testid":"user-admin-permission-unavailable",children:q(ve,{label:i.heading,summary:s})}):l.map(([b,S])=>q(ve,{label:C(b),summary:x(S)},b))})]})]});return X("div",{"data-testid":"user-admin-shell",style:{width:"100%",minHeight:"100vh",backgroundColor:"#f8fafc",padding:"1.5rem",boxSizing:"border-box"},children:[o?o({title:i.title,annotation:d}):X("div",{style:{marginBottom:"1.5rem",display:"flex",justifyContent:"space-between",alignItems:"center"},children:[q("h1",{style:{margin:0,fontSize:"1.5rem",fontWeight:700,color:"#0f172a"},children:i.title}),d]}),q("nav",{"aria-label":i.title,style:{display:"flex",gap:"0.5rem",marginBottom:"1.2rem",borderBottom:"2px solid #e2e8f0",paddingBottom:"0.5rem"},children:k.map(b=>{let S=r===b.key;return q(nt,{to:b.href,"data-testid":`user-admin-tab-${b.key}`,"aria-current":S?"page":void 0,style:{padding:"0.5rem 1rem",borderRadius:"6px 6px 0 0",fontSize:"0.88rem",fontWeight:S?700:500,color:S?"#0284c7":"#64748b",backgroundColor:S?"#ffffff":"transparent",textDecoration:"none",borderBottom:S?"3px solid #0284c7":"3px solid transparent",transition:"all 0.15s ease"},children:b.label},b.key)})}),q(ut,{status:u?.directoryStatus,labels:i,groups:u?.groups??[]}),q("main",{children:e})]})}import{SelectBox as Ce}from"@aiquants/select-box";import Ue,{useEffect as Le,useMemo as te,useRef as ee,useState as T}from"react";import{Link as pt,useFetcher as ne,useLoaderData as oe,useSearchParams as ct}from"react-router";import{Fragment as ge,jsx as t,jsxs as m}from"react/jsx-runtime";function H({result:e,id:o}){let n=e;return n?.ok!==!1||!n.error?null:t("div",{id:o,"data-testid":"user-admin-action-error",role:"alert",style:{gridColumn:"1 / -1",padding:"0.7rem 1rem",borderRadius:"6px",border:"1px solid #fecaca",backgroundColor:"#fef2f2",color:"#b91c1c",fontSize:"0.85rem"},children:n.error})}function ae(e){let o=ee(null),[n,c]=T(void 0),u=e.data===n?void 0:e.data;return Le(()=>{if(e.state!=="idle"||e.data===void 0)return;let y=o.current;y&&(o.current=null,e.data.ok===!0&&y(e.data))},[e.state,e.data]),{submit:(y,w)=>{o.current=w??null,c(void 0),e.submit(y,{method:"post"})},resetResult:()=>c(e.data),result:u}}function ce(e,o,n){let c=ee(null),u=ee(o);return u.current=o,Le(()=>{if(!e)return;let r=c.current,i=n?.current??document.activeElement,y=()=>{let k=Array.from(r?.querySelectorAll('a[href],button:not([disabled]),input:not([disabled]),select:not([disabled]),textarea:not([disabled]),[tabindex]:not([tabindex="-1"])')??[]).filter(l=>!(l.disabled||l.hasAttribute("inert"))&&l.closest("[inert]")===null&&l.getAttribute("aria-hidden")!=="true"),M=new Set;return k.filter(l=>{let s=l instanceof HTMLInputElement&&l.type==="radio"?l:null;return!s||s.name===""?!0:!s.checked&&k.some(x=>x instanceof HTMLInputElement&&x.type==="radio"&&x.name===s.name&&x.checked)||M.has(s.name)?!1:(M.add(s.name),!0)})},w=y();(w.find(k=>!k.hasAttribute("data-aqar-visually-hidden"))??w[0])?.focus();let C=k=>{if(k.key==="Escape"){if(k.isComposing||k.keyCode===229||k.defaultPrevented)return;k.preventDefault(),u.current();return}if(k.key!=="Tab")return;let M=y();if(M.length===0)return;let l=M[0],s=M[M.length-1],x=document.activeElement,d=!r?.contains(x);k.shiftKey&&(x===l||d)?(k.preventDefault(),s.focus()):!k.shiftKey&&(x===s||d)&&(k.preventDefault(),l.focus())};return document.addEventListener("keydown",C),()=>{document.removeEventListener("keydown",C),i?.focus?.()}},[e,n]),c}function Me(e,o,n){return e.kind!=="ready"?[]:e.groups.map(c=>{let u=o.get(F(c.externalId))??o.get(F(c.externalKey)),r=u!==void 0,i=c.memberCount===void 0?"":v(n.groupsView.upstreamOptionMembers,{count:c.memberCount});return{label:v(n.directoryView.groupOptionTemplate,{name:c.name,key:c.externalKey}),value:c.externalId,note:r?v(n.groupsView.upstreamAlreadyLinked,{group:u}):i,...r?{disabled:!0}:{},entry:c}})}function Ge({observedAt:e,isStale:o,labels:n}){return t("p",{"data-testid":"catalog-freshness","data-stale":o?"":void 0,style:{margin:"0.35rem 0 0 0",fontSize:"0.72rem",color:o?"#92400e":"#64748b"},children:v(o?n.groupsView.catalogStale:n.groupsView.catalogObservedAt,{at:J(e,n)})})}function me(e){return typeof e=="object"&&e!==null&&e.ok===!1&&typeof e.error=="string"}var mt={exact:{backgroundColor:"#d1fae5",color:"#064e3b",borderRadius:"2px"},fuzzy:{backgroundColor:"#fef3c7",color:"#78350f",borderRadius:"2px"}};function Re(e,o){if(typeof e!="object"||e===null)return null;let n=e.syncRequest;return n==="already-pending"?o.directoryView.syncAlreadyPending:n==="not-queued"?o.directoryView.linkSyncNotQueued:null}function Te(e){let o=new Map;for(let n of e){let c=n.externalLink;c&&(o.set(F(c.externalId),n.name),o.set(F(c.externalKey),n.name))}return o}function Ve(e,o){let{label:n,note:c}=e;return m("span",{"data-aqar-upstream-option":!0,title:c===""?n:`${n} \u2014 ${c}`,style:{display:"flex",justifyContent:"space-between",alignItems:"baseline",gap:"0.75rem",width:"100%",minWidth:0},children:[t("span",{"data-aqar-upstream-option-label":!0,style:{overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap"},children:o.highlight(n).map((u,r)=>t("span",{"data-aqar-match":u.matchType==="none"?void 0:u.matchType,style:u.matchType==="none"?void 0:mt[u.matchType],children:u.text},r))}),c===""?null:t("span",{"data-aqar-upstream-option-note":!0,style:{flexShrink:0,fontSize:"0.72rem",opacity:.75},children:c})]})}function Ee(e){let o=e.directoryView;return{noOptions:o.pickerNoOptions,clear:o.pickerClear,toggle:o.pickerToggle,selection:n=>v(o.pickerSelected,{value:n.map(c=>c.label).join(", ")})}}function gt(e){try{return new Intl.Collator(e).compare}catch{return new Intl.Collator().compare}}function yt(e){return(e.split("@")[0]??e).toLowerCase().replace(/[^a-z0-9._-]+/g,"-").replace(/^-+|-+$/g,"")}function Pe(){let e=oe(),o=ne(),{submit:n,resetResult:c,result:u}=ae(o),r=e.labels??j,[i,y]=T(""),[w,C]=T(null),k=w?.kind==="edit"?w.user:null,M=w?.kind==="create",l=ee(null),s=(g,I)=>{l.current=I.currentTarget,c(),g.kind==="create"&&(d(""),S("")),C(g)},[x,d]=T(""),[b,S]=T(""),h=ce(M,()=>C(null),l),f=ce(k!==null,()=>C(null),l),G=o.state!=="idle",[U,E]=T({column:"displayName",ascending:!0}),V=gt(r.formatLocale),O=i.trim().toLowerCase(),A=e.users.filter(g=>g.displayName.toLowerCase().includes(O)||g.email.toLowerCase().includes(O)).slice().sort((g,I)=>{let Q=U.ascending?1:-1;return U.column==="id"?(g.id-I.id)*Q:U.column==="isActive"?(Number(g.isActive)-Number(I.isActive))*Q:V(g[U.column],I[U.column])*Q}),P=g=>{E(I=>I.column===g?{column:g,ascending:!I.ascending}:{column:g,ascending:!0})},p=g=>{G||g.isActive&&!window.confirm(v(r.usersView.confirmDeactivate,{user:g.displayName}))||n({intent:"toggleUserActive",userId:String(g.id),isActive:String(!g.isActive)})},L=g=>{if(g.preventDefault(),!(x&&b))return;let I=x,Q=b;n({intent:"createUser",displayName:I,email:Q},()=>{d(_=>_===I?"":_),S(_=>_===Q?"":_),C(null)})},D=g=>{g.preventDefault(),k&&n({intent:"updateUser",userId:String(k.id),displayName:k.displayName,email:k.email},()=>C(null))};return m("section",{"data-testid":"users-view-section",style:{display:"flex",flexDirection:"column",gap:"1rem"},children:[t("h2",{style:se,children:r.usersView.title}),!w&&t(H,{result:u}),m("div",{style:{display:"flex",justifyContent:"space-between",alignItems:"center",backgroundColor:"#ffffff",padding:"1rem",borderRadius:"8px",border:"1px solid #e2e8f0"},children:[t("input",{type:"text","aria-label":r.usersView.searchLabel,placeholder:r.usersView.searchPlaceholder,value:i,onChange:g=>y(g.target.value),"data-testid":"users-search-input",style:{padding:"6px 12px",borderRadius:"6px",border:"1px solid #cbd5e1",fontSize:"0.85rem",width:"260px"}}),t("button",{type:"button",onClick:g=>s({kind:"create"},g),"data-testid":"users-add-button",style:{padding:"6px 14px",borderRadius:"6px",backgroundColor:"#0284c7",color:"#ffffff",border:"none",fontSize:"0.85rem",fontWeight:600,cursor:"pointer"},children:r.usersView.addUser})]}),t("p",{"data-testid":"users-summary",role:"status","aria-live":"polite",style:{margin:0,fontSize:"0.78rem",color:"#475569"},children:v(r.usersView.listSummary,{shown:A.length,total:e.users.length})}),t("div",{style:{backgroundColor:"#ffffff",borderRadius:"8px",border:"1px solid #e2e8f0",overflow:"hidden"},children:m("table",{style:{width:"100%",borderCollapse:"collapse",fontSize:"0.85rem",textAlign:"left"},children:[t("thead",{children:m("tr",{style:{backgroundColor:"#f8fafc",borderBottom:"1px solid #e2e8f0",color:"#475569"},children:[[["id",r.common.id],["displayName",r.usersView.displayName],["email",r.usersView.email],["isActive",r.common.status]].map(([g,I])=>t("th",{scope:"col",style:{padding:0},"aria-sort":U.column===g?U.ascending?"ascending":"descending":"none",children:m("button",{type:"button","data-testid":`users-sort-${g}`,onClick:()=>P(g),"aria-label":v(U.column===g?U.ascending?r.usersView.sortedAscending:r.usersView.sortedDescending:r.usersView.sortBy,{column:I}),style:{width:"100%",padding:"10px 14px",textAlign:"left",background:"transparent",border:"none",cursor:"pointer",font:"inherit",color:"inherit",fontWeight:U.column===g?700:500},children:[I,t("span",{"aria-hidden":"true",style:{marginLeft:"4px",opacity:U.column===g?1:.35},children:U.column===g?U.ascending?"\u25B2":"\u25BC":"\u21C5"})]})},g)),t("th",{scope:"col",style:{padding:"10px 14px",textAlign:"right"},children:r.common.actions})]})}),m("tbody",{children:[A.map(g=>m("tr",{style:{borderBottom:"1px solid #f1f5f9"},"data-testid":`user-row-${g.id}`,children:[t("td",{style:{padding:"10px 14px",color:"#475569"},children:v(r.common.idTemplate,{id:g.id})}),t("td",{style:{padding:"10px 14px",fontWeight:600,color:"#0f172a"},children:g.displayName}),t("td",{style:{padding:"10px 14px",color:"#475569"},children:g.email}),t("td",{style:{padding:"10px 14px"},children:t("span",{style:{fontSize:"0.75rem",padding:"2px 8px",borderRadius:"10px",backgroundColor:g.isActive?"#dcfce7":"#fee2e2",color:g.isActive?"#15803d":"#b91c1c",fontWeight:600},children:g.isActive?r.usersView.active:r.usersView.inactive})}),m("td",{style:{padding:"10px 14px",textAlign:"right"},children:[t("button",{type:"button",onClick:I=>s({kind:"edit",user:g},I),"aria-label":v(r.usersView.editUserAria,{user:g.displayName}),"data-testid":`edit-user-btn-${g.id}`,style:{padding:"3px 8px",borderRadius:"4px",border:"1px solid #cbd5e1",backgroundColor:"#ffffff",fontSize:"0.78rem",cursor:"pointer",marginRight:"6px"},children:r.common.edit}),t("button",{type:"button",onClick:()=>p(g),...Y(G),"aria-label":v(g.isActive?r.usersView.deactivateAria:r.usersView.activateAria,{user:g.displayName}),"data-testid":`toggle-user-btn-${g.id}`,style:{padding:"3px 8px",borderRadius:"4px",border:"1px solid #cbd5e1",backgroundColor:"#ffffff",fontSize:"0.78rem",cursor:G?"default":"pointer",color:g.isActive?"#b91c1c":"#15803d"},children:g.isActive?r.usersView.deactivate:r.usersView.activate})]})]},g.id)),A.length===0&&t("tr",{children:t("td",{colSpan:5,style:{padding:"2rem",textAlign:"center",color:"#475569"},children:O===""?r.usersView.empty:r.usersView.emptyFiltered})})]})]})}),M&&t("div",{style:{position:"fixed",inset:0,backgroundColor:"rgba(0,0,0,0.4)",display:"flex",justifyContent:"center",alignItems:"center",zIndex:100},children:m("form",{ref:h,onSubmit:L,role:"dialog","aria-modal":"true","aria-labelledby":"create-user-title",...me(u)?{"aria-describedby":"create-user-error"}:{},"data-testid":"user-create-modal",style:{backgroundColor:"#ffffff",padding:"1.5rem",borderRadius:"8px",width:"360px",boxShadow:"0 10px 25px rgba(0,0,0,0.15)"},children:[t("h3",{id:"create-user-title",style:{margin:"0 0 1rem 0",fontSize:"1.1rem"},children:r.usersView.addUser}),t(H,{result:u,id:"create-user-error"}),m("div",{style:{marginBottom:"1rem"},children:[t("label",{htmlFor:"create-user-display-name-input",style:{display:"block",fontSize:"0.8rem",color:"#475569",marginBottom:"4px"},children:r.usersView.displayName}),t("input",{id:"create-user-display-name-input",type:"text",value:x,onChange:g=>d(g.target.value),required:!0,"data-testid":"create-user-display-name",style:{width:"100%",padding:"6px",borderRadius:"4px",border:"1px solid #cbd5e1",boxSizing:"border-box"}})]}),m("div",{style:{marginBottom:"1.2rem"},children:[t("label",{htmlFor:"create-user-email-input",style:{display:"block",fontSize:"0.8rem",color:"#475569",marginBottom:"4px"},children:r.usersView.email}),t("input",{id:"create-user-email-input",type:"email",value:b,onChange:g=>S(g.target.value),required:!0,"data-testid":"create-user-email",style:{width:"100%",padding:"6px",borderRadius:"4px",border:"1px solid #cbd5e1",boxSizing:"border-box"}})]}),m("div",{style:{display:"flex",justifyContent:"flex-end",gap:"0.5rem"},children:[t("button",{type:"button",onClick:()=>C(null),"data-testid":"cancel-create-user",style:{padding:"6px 12px",borderRadius:"4px",border:"1px solid #cbd5e1",backgroundColor:"#ffffff",cursor:"pointer"},children:r.common.cancel}),t("button",{type:"submit","data-testid":"submit-create-user",disabled:G,"aria-busy":G,style:{padding:"6px 12px",borderRadius:"4px",backgroundColor:"#0284c7",color:"#ffffff",border:"none",cursor:"pointer"},children:r.common.create})]})]})}),k&&t("div",{style:{position:"fixed",inset:0,backgroundColor:"rgba(0,0,0,0.4)",display:"flex",justifyContent:"center",alignItems:"center",zIndex:100},children:m("form",{ref:f,onSubmit:D,role:"dialog","aria-modal":"true","aria-labelledby":"edit-user-title",...me(u)?{"aria-describedby":"edit-user-error"}:{},"data-testid":"user-edit-modal",style:{backgroundColor:"#ffffff",padding:"1.5rem",borderRadius:"8px",width:"360px",boxShadow:"0 10px 25px rgba(0,0,0,0.15)"},children:[t("h3",{id:"edit-user-title",style:{margin:"0 0 1rem 0",fontSize:"1.1rem"},children:r.usersView.editUser}),t(H,{result:u,id:"edit-user-error"}),m("div",{style:{marginBottom:"1rem"},children:[t("label",{htmlFor:"edit-user-display-name-input",style:{display:"block",fontSize:"0.8rem",color:"#475569",marginBottom:"4px"},children:r.usersView.displayName}),t("input",{id:"edit-user-display-name-input",type:"text",value:k.displayName,onChange:g=>C({kind:"edit",user:{...k,displayName:g.target.value}}),required:!0,"data-testid":"edit-user-display-name",style:{width:"100%",padding:"6px",borderRadius:"4px",border:"1px solid #cbd5e1",boxSizing:"border-box"}})]}),m("div",{style:{marginBottom:"1.2rem"},children:[t("label",{htmlFor:"edit-user-email-input",style:{display:"block",fontSize:"0.8rem",color:"#475569",marginBottom:"4px"},children:r.usersView.email}),t("input",{id:"edit-user-email-input",type:"email",value:k.email,onChange:g=>C({kind:"edit",user:{...k,email:g.target.value}}),required:!0,"data-testid":"edit-user-email",style:{width:"100%",padding:"6px",borderRadius:"4px",border:"1px solid #cbd5e1",boxSizing:"border-box"}})]}),m("div",{style:{display:"flex",justifyContent:"flex-end",gap:"0.5rem"},children:[t("button",{type:"button",onClick:()=>C(null),style:{padding:"6px 12px",borderRadius:"4px",border:"1px solid #cbd5e1",backgroundColor:"#ffffff",cursor:"pointer"},children:r.common.cancel}),t("button",{type:"submit","data-testid":"submit-edit-user",disabled:G,"aria-busy":G,style:{padding:"6px 12px",borderRadius:"4px",backgroundColor:"#0284c7",color:"#ffffff",border:"none",cursor:"pointer"},children:r.common.save})]})]})})]})}var Ie=Ue.createContext(null);function bt(){return Ue.useContext(Ie)??""}function ft(){let e=bt(),o=oe(),n=ne(),{submit:c,resetResult:u,result:r}=ae(n),i=o.labels??j,y=Re(r,i),[w,C]=T(""),[k,M]=T(null),l=k?.kind==="edit"?k.group:null,s=k?.kind==="create",x=ee(null),d=(a,R)=>{x.current=R.currentTarget,u(),a.kind==="create"&&Fe(),M(a)},b=n.state!=="idle",[S,h]=T(""),[f,G]=T(""),[U,E]=T(""),[V,O]=T("local"),[A,P]=T(null),[p,L]=T(null),[D,g]=T("direct"),I=ee(null),Q=te(()=>{let a=new Map;for(let R of o.groupMembers)a.set(R.groupId,(a.get(R.groupId)??0)+1);return a},[o.groupMembers]),_=te(()=>Te(o.groups),[o.groups]),le=te(()=>Me(o.catalog,_,i),[o.catalog,_,i]),De=te(()=>le.filter(a=>a.disabled!==!0).length,[le]),ye=o.catalog.kind==="ready"&&o.catalog.groups.length>0&&o.directoryStatus.provider!=="",Ne=ce(s,()=>M(null),x),ze=ce(l!==null,()=>M(null),x),be=w.trim().toLowerCase(),fe=o.groups.filter(a=>a.name.toLowerCase().includes(be)||a.groupKey.toLowerCase().includes(be)),Fe=()=>{h(""),G(""),E(""),O("local"),L(null),g("direct"),I.current=null},qe=a=>{if(a.preventDefault(),!(S&&f)||V==="upstream"&&p===null||V==="upstream"&&p!==null&&!window.confirm(v(i.groupsView.confirmCreateLinked,{group:f,upstream:p.externalKey})))return;let R={key:S,name:f,description:U},N=()=>{h(Z=>Z===R.key?"":Z),G(Z=>Z===R.name?"":Z),E(Z=>Z===R.description?"":Z),L(null),M(null)};if(V==="upstream"&&p!==null){c({intent:"createLinkedGroup",groupKey:R.key,name:R.name,description:R.description,provider:o.directoryStatus.provider,externalKey:p.externalKey,membershipMode:D},N);return}c({intent:"createGroup",groupKey:R.key,name:R.name,description:R.description},N)},Oe=a=>{if(L(a),!a)return;let R={key:yt(a.externalKey),name:a.name,description:a.description??""};G(R.name),h(R.key),E(R.description),I.current=R},Ke=a=>{if(O(a),a==="upstream")return;L(null);let R=I.current;R&&(h(N=>N===R.key?"":N),G(N=>N===R.name?"":N),E(N=>N===R.description?"":N),I.current=null)},Be=a=>{a.preventDefault(),l&&c({intent:"updateGroup",groupId:String(l.id),name:l.name,description:l.description??""},()=>M(null))},$e=a=>{if(b)return;let R=o.groupMembers.filter(N=>N.groupId===a.id).length;window.confirm(v(i.groupsView.confirmDelete,{group:a.name,count:R}))&&c({intent:"deleteGroup",groupId:String(a.id)})};return m("section",{"data-testid":"groups-view-section",style:{display:"flex",flexDirection:"column",gap:"1rem"},children:[t("h2",{style:se,children:i.groupsView.title}),!k&&t(H,{result:r}),t("p",{"data-testid":"groups-sync-request-notice",role:"status","aria-live":"polite",hidden:y===null,style:y===null?void 0:{margin:0,padding:"0.5rem 0.7rem",borderRadius:"6px",backgroundColor:"#fffbeb",border:"1px solid #fde68a",color:"#92400e",fontSize:"0.8rem"},children:y}),m("div",{style:{display:"flex",justifyContent:"space-between",alignItems:"center",backgroundColor:"#ffffff",padding:"1rem",borderRadius:"8px",border:"1px solid #e2e8f0"},children:[t("input",{type:"text","aria-label":i.groupsView.searchLabel,placeholder:i.groupsView.searchPlaceholder,value:w,onChange:a=>C(a.target.value),"data-testid":"groups-search-input",style:{padding:"6px 12px",borderRadius:"6px",border:"1px solid #cbd5e1",fontSize:"0.85rem",width:"260px"}}),t("button",{type:"button",onClick:a=>d({kind:"create"},a),"data-testid":"groups-add-button",style:{padding:"6px 14px",borderRadius:"6px",backgroundColor:"#4338ca",color:"#ffffff",border:"none",fontSize:"0.85rem",fontWeight:600,cursor:"pointer"},children:i.groupsView.addGroup})]}),t("div",{style:{display:"grid",gridTemplateColumns:"repeat(auto-fill, minmax(280px, 1fr))",gap:"1rem"},children:fe.map(a=>{let R=Q.get(a.id)??0;return m("div",{style:{backgroundColor:"#ffffff",borderRadius:"8px",border:"1px solid #e2e8f0",padding:"1rem",display:"flex",flexDirection:"column",justifyContent:"space-between"},"data-testid":`group-card-${a.id}`,"data-group-readonly":a.readOnly?"true":"false",children:[m("div",{children:[m("div",{style:{display:"flex",justifyContent:"space-between",alignItems:"center",marginBottom:"0.5rem"},children:[t("h3",{style:{margin:0,fontSize:"1rem",color:"#0f172a"},children:a.name}),t("span",{style:{fontSize:"0.72rem",backgroundColor:"#e0e7ff",color:"#4338ca",padding:"2px 6px",borderRadius:"4px",fontFamily:"monospace"},children:a.groupKey})]}),t("p",{style:{margin:"0 0 0.8rem 0",fontSize:"0.82rem",color:"#64748b",minHeight:"2.4em"},children:a.description||i.groupsView.noDescription}),a.externalLink&&m("div",{"data-testid":`group-source-${a.id}`,style:{display:"flex",alignItems:"center",gap:"6px",flexWrap:"wrap",marginBottom:"0.6rem"},children:[t("span",{style:{fontSize:"0.72rem",padding:"2px 8px",borderRadius:"10px",backgroundColor:"#ede9fe",color:"#6d28d9",fontWeight:600},children:i.common.managedUpstream}),t("span",{style:{fontSize:"0.72rem",fontFamily:"monospace",color:"#64748b"},children:a.externalLink.externalKey}),a.externalLink.unresolvedCount>0&&t("span",{"data-testid":`group-unresolved-${a.id}`,style:{fontSize:"0.72rem",color:"#b45309"},children:v(i.directoryView.unresolvedTemplate,{count:a.externalLink.unresolvedCount})})]})]}),m("div",{style:{display:"flex",justifyContent:"space-between",alignItems:"center",borderTop:"1px solid #f1f5f9",paddingTop:"0.6rem"},children:[t(pt,{to:`${e}/group_members?group=${a.id}`,"data-testid":`group-open-members-${a.id}`,"aria-label":v(i.groupsView.openMembersAria,{group:a.name}),style:{fontSize:"0.78rem",color:"#1d4ed8",textDecoration:"none"},children:v(i.groupsView.memberCountTemplate,{count:R})}),a.readOnly?t("span",{"data-testid":`readonly-group-${a.id}`,style:{fontSize:"0.75rem",color:"#475569"},children:i.common.readOnly}):m("div",{children:[t("button",{type:"button",onClick:N=>d({kind:"edit",group:a},N),...Y(b),"aria-label":v(i.groupsView.editGroupAria,{group:a.name}),"data-testid":`edit-group-btn-${a.id}`,style:{padding:"3px 8px",borderRadius:"4px",border:"1px solid #cbd5e1",backgroundColor:"#ffffff",fontSize:"0.75rem",cursor:"pointer",marginRight:"4px"},children:i.common.edit}),t("button",{type:"button",onClick:()=>$e(a),...Y(b),"aria-label":v(i.groupsView.deleteGroupAria,{group:a.name}),"data-testid":`delete-group-btn-${a.id}`,style:{padding:"3px 8px",borderRadius:"4px",border:"1px solid #fee2e2",backgroundColor:"#fff5f5",color:"#b91c1c",fontSize:"0.75rem",cursor:"pointer"},children:i.common.delete})]})]})]},a.id)})}),fe.length===0&&t("div",{"data-testid":"groups-empty",style:{padding:"2rem",textAlign:"center",color:"#475569",backgroundColor:"#ffffff",borderRadius:"8px",border:"1px solid #e2e8f0"},children:o.groups.length===0?i.groupsView.empty:i.groupsView.emptyFiltered}),s&&t("div",{style:{position:"fixed",inset:0,backgroundColor:"rgba(0,0,0,0.4)",display:"flex",justifyContent:"center",alignItems:"center",zIndex:100},children:m("form",{ref:Ne,onSubmit:qe,role:"dialog","aria-modal":"true","aria-labelledby":"create-group-title",...me(r)?{"aria-describedby":"create-group-error"}:{},"data-testid":"group-create-modal",style:{backgroundColor:"#ffffff",padding:"1.5rem",borderRadius:"8px",width:"360px",boxShadow:"0 10px 25px rgba(0,0,0,0.15)"},children:[t("h3",{id:"create-group-title",style:{margin:"0 0 1rem 0",fontSize:"1.1rem"},children:i.groupsView.addGroup}),t(H,{result:r,id:"create-group-error"}),ye&&m("fieldset",{"data-testid":"create-group-mode",style:{display:"flex",gap:"0.25rem",marginBottom:"1rem",border:"none",padding:0,margin:"0 0 1rem 0"},children:[t("legend",{style:Ae,children:i.groupsView.createModeLabel}),["local","upstream"].map(a=>m("label",{"data-aqar-create-mode":a,"data-selected":V===a?"":void 0,"data-focused":A===a?"":void 0,style:{outline:A===a?"2px solid #4338ca":void 0,outlineOffset:"2px",flex:1,padding:"0.4rem 0.6rem",fontSize:"0.8rem",borderRadius:"6px",cursor:"pointer",textAlign:"center",border:V===a?"1px solid #4338ca":"1px solid #cbd5e1",backgroundColor:V===a?"#eef2ff":"#ffffff",color:V===a?"#3730a3":"#475569",fontWeight:V===a?700:500},children:[t("input",{type:"radio",name:"create-group-mode",value:a,checked:V===a,onChange:()=>Ke(a),"data-testid":`create-group-mode-${a}`,"data-aqar-visually-hidden":!0,onFocus:()=>P(a),onBlur:()=>P(R=>R===a?null:R),style:Ae}),a==="local"?i.groupsView.createModeLocal:i.groupsView.createModeUpstream]},a))]}),o.catalog.kind==="ready"&&o.catalog.groups.length===0&&t("p",{"data-testid":"create-group-catalog-empty",role:"note",style:{margin:"0 0 1rem 0",padding:"0.5rem 0.7rem",borderRadius:"6px",backgroundColor:"#f8fafc",border:"1px solid #e2e8f0",color:"#475569",fontSize:"0.78rem"},children:v(i.groupsView.catalogEmpty,{at:J(o.catalog.observedAt??"",i)})}),o.catalog.kind==="ready"&&o.catalog.groups.length>0&&o.directoryStatus.provider===""&&t("p",{"data-testid":"create-group-provider-unset",role:"note",style:{margin:"0 0 1rem 0",padding:"0.5rem 0.7rem",borderRadius:"6px",backgroundColor:"#fffbeb",border:"1px solid #fde68a",color:"#92400e",fontSize:"0.78rem"},children:i.groupsView.providerUnset}),o.catalog.kind==="unavailable"&&t("p",{"data-testid":"create-group-catalog-unavailable",role:"note",style:{margin:"0 0 1rem 0",padding:"0.5rem 0.7rem",borderRadius:"6px",backgroundColor:"#fffbeb",border:"1px solid #fde68a",color:"#92400e",fontSize:"0.78rem"},children:v(i.groupsView.catalogUnavailableHere,{reason:i.groupsView.catalogFailures[o.catalog.reason]})}),V==="upstream"&&ye&&o.catalog.kind==="ready"&&m("div",{style:{marginBottom:"1rem"},children:[t("p",{"data-testid":"create-group-upstream-notice",role:"note",style:{margin:"0 0 0.5rem 0",fontSize:"0.78rem",color:"#5b21b6"},children:i.groupsView.createUpstreamNotice}),t("div",{id:"create-group-upstream-label",style:re,children:i.groupsView.pickUpstream}),t("div",{"data-testid":"create-group-upstream-picker",onKeyDown:a=>{a.nativeEvent.isComposing||a.nativeEvent.keyCode===229||a.key==="Enter"&&a.preventDefault()},children:t(Ce,{options:le,value:p===null?null:le.find(a=>a.value===p.externalId)??null,onChange:a=>Oe(a===null?null:a.entry),placeholder:i.groupsView.pickUpstreamPlaceholder,ariaLabelledBy:"create-group-upstream-label",renderOption:Ve,locale:i.locale,labels:Ee(i),clearable:!0})}),t(Ge,{observedAt:o.catalog.observedAt,isStale:o.catalog.isStale,labels:i}),m("div",{style:{marginTop:"0.6rem"},children:[t("label",{htmlFor:"create-group-membership-mode",style:re,children:i.directoryView.membershipMode}),m("select",{id:"create-group-membership-mode","data-testid":"create-group-membership-mode",value:D,onChange:a=>g(a.target.value),style:{width:"100%",padding:"6px",borderRadius:"4px",border:"1px solid #cbd5e1",boxSizing:"border-box"},children:[t("option",{value:"direct",children:i.directoryView.directMode}),t("option",{value:"transitive",children:i.directoryView.transitiveMode})]})]})]}),m("div",{style:{marginBottom:"1rem"},children:[t("label",{htmlFor:"create-group-key-input",style:{display:"block",fontSize:"0.8rem",color:"#475569",marginBottom:"4px"},children:i.groupsView.groupKey}),t("input",{id:"create-group-key-input",type:"text",value:S,onChange:a=>h(a.target.value),placeholder:i.groupsView.groupKeyPlaceholder,required:!0,"data-testid":"create-group-key",style:{width:"100%",padding:"6px",borderRadius:"4px",border:"1px solid #cbd5e1",boxSizing:"border-box"}})]}),m("div",{style:{marginBottom:"1rem"},children:[t("label",{htmlFor:"create-group-name-input",style:{display:"block",fontSize:"0.8rem",color:"#475569",marginBottom:"4px"},children:i.groupsView.name}),t("input",{id:"create-group-name-input",type:"text",value:f,onChange:a=>G(a.target.value),placeholder:i.groupsView.namePlaceholder,required:!0,"data-testid":"create-group-name",style:{width:"100%",padding:"6px",borderRadius:"4px",border:"1px solid #cbd5e1",boxSizing:"border-box"}})]}),m("div",{style:{marginBottom:"1.2rem"},children:[t("label",{htmlFor:"create-group-desc-input",style:{display:"block",fontSize:"0.8rem",color:"#475569",marginBottom:"4px"},children:i.groupsView.description}),t("textarea",{id:"create-group-desc-input",value:U,onChange:a=>E(a.target.value),"data-testid":"create-group-description",style:{width:"100%",padding:"6px",borderRadius:"4px",border:"1px solid #cbd5e1",boxSizing:"border-box",height:"60px"}})]}),V==="upstream"&&p===null&&t("p",{id:"create-group-submit-hint","data-testid":"create-group-submit-hint",style:{margin:"0 0 0.6rem 0",fontSize:"0.78rem",color:"#475569",textAlign:"right"},children:De>0?i.groupsView.pickUpstreamFirst:i.groupsView.allUpstreamLinked}),m("div",{style:{display:"flex",justifyContent:"flex-end",gap:"0.5rem"},children:[t("button",{type:"button",onClick:()=>M(null),"data-testid":"cancel-create-group",style:{padding:"6px 12px",borderRadius:"4px",border:"1px solid #cbd5e1",backgroundColor:"#ffffff",cursor:"pointer"},children:i.common.cancel}),t("button",{type:"submit","data-testid":"submit-create-group",disabled:b||V==="upstream"&&p===null,"aria-busy":b,...V==="upstream"&&p===null?{"aria-describedby":"create-group-submit-hint"}:{},style:{padding:"6px 12px",borderRadius:"4px",backgroundColor:b||V==="upstream"&&p===null?"#a5b4fc":"#4338ca",color:"#ffffff",border:"none",cursor:b||V==="upstream"&&p===null?"not-allowed":"pointer"},children:i.common.create})]})]})}),l&&t("div",{style:{position:"fixed",inset:0,backgroundColor:"rgba(0,0,0,0.4)",display:"flex",justifyContent:"center",alignItems:"center",zIndex:100},children:m("form",{ref:ze,onSubmit:Be,role:"dialog","aria-modal":"true","aria-labelledby":"edit-group-title",...me(r)?{"aria-describedby":"edit-group-error"}:{},"data-testid":"group-edit-modal",style:{backgroundColor:"#ffffff",padding:"1.5rem",borderRadius:"8px",width:"360px",boxShadow:"0 10px 25px rgba(0,0,0,0.15)"},children:[t("h3",{id:"edit-group-title",style:{margin:"0 0 1rem 0",fontSize:"1.1rem"},children:i.groupsView.editGroup}),t(H,{result:r,id:"edit-group-error"}),m("div",{style:{marginBottom:"1rem"},children:[t("label",{htmlFor:"edit-group-name-input",style:{display:"block",fontSize:"0.8rem",color:"#475569",marginBottom:"4px"},children:i.groupsView.name}),t("input",{id:"edit-group-name-input",type:"text",value:l.name,onChange:a=>M({kind:"edit",group:{...l,name:a.target.value}}),required:!0,"data-testid":"edit-group-name",style:{width:"100%",padding:"6px",borderRadius:"4px",border:"1px solid #cbd5e1",boxSizing:"border-box"}})]}),m("div",{style:{marginBottom:"1.2rem"},children:[t("label",{htmlFor:"edit-group-desc-input",style:{display:"block",fontSize:"0.8rem",color:"#475569",marginBottom:"4px"},children:i.groupsView.description}),t("textarea",{id:"edit-group-desc-input",value:l.description??"",onChange:a=>M({kind:"edit",group:{...l,description:a.target.value}}),"data-testid":"edit-group-description",style:{width:"100%",padding:"6px",borderRadius:"4px",border:"1px solid #cbd5e1",boxSizing:"border-box",height:"60px"}})]}),m("div",{style:{display:"flex",justifyContent:"flex-end",gap:"0.5rem"},children:[t("button",{type:"button",onClick:()=>M(null),style:{padding:"6px 12px",borderRadius:"4px",border:"1px solid #cbd5e1",backgroundColor:"#ffffff",cursor:"pointer"},children:i.common.cancel}),t("button",{type:"submit","data-testid":"submit-edit-group",disabled:b,"aria-busy":b,style:{padding:"6px 12px",borderRadius:"4px",backgroundColor:"#4338ca",color:"#ffffff",border:"none",cursor:"pointer"},children:i.common.save})]})]})})]})}function ht(){let e=oe(),o=ne(),{submit:n,result:c}=ae(o),u=o.state!=="idle",r=e.labels??j,[i]=ct(),y=Number(i.get("group")??""),w=Number.isInteger(y)&&y>0?y:null,[C,k]=T(null),[M,l]=T(new Set),s=ee(w);s.current!==w&&(s.current=w,w!==null&&(k(w),l(new Set)));let[x,d]=T(""),[b,S]=T(!1),h=C??w??e.groups[0]?.id??null,f=e.groups.find(A=>A.id===h)??e.groups[0],G=h!==null&&f!==void 0&&f.id!==h?h:null,U=new Set(e.groupMembers.filter(A=>A.groupId===f?.id).map(A=>A.userId)),E=x.trim().toLowerCase(),V=e.users.filter(A=>b&&!U.has(A.id)&&!M.has(A.id)?!1:E===""?!0:A.displayName.toLowerCase().includes(E)||A.email.toLowerCase().includes(E)),O=(A,P)=>{if(u||!f)return;let p=String(f.id);P?(l(L=>new Set(L).add(A)),n({intent:"removeGroupMember",groupId:p,userId:String(A)})):(l(L=>{if(!L.has(A))return L;let D=new Set(L);return D.delete(A),D}),n({intent:"addGroupMember",groupId:p,userId:String(A)}))};return m("section",{"data-testid":"group-members-view-section",style:{display:"grid",gridTemplateColumns:"240px 1fr",gap:"1.2rem"},children:[t("h2",{style:{...se,gridColumn:"1 / -1"},children:r.groupMembersView.title}),t(H,{result:c}),G!==null&&t("p",{"data-testid":"member-deep-link-missed",role:"note",style:{gridColumn:"1 / -1",margin:0,padding:"0.5rem 0.7rem",borderRadius:"6px",backgroundColor:"#fffbeb",border:"1px solid #fde68a",color:"#92400e",fontSize:"0.8rem"},children:v(r.groupMembersView.deepLinkMissed,{id:G,group:f?.name??""})}),m("div",{style:{backgroundColor:"#ffffff",padding:"1rem",borderRadius:"8px",border:"1px solid #e2e8f0"},children:[t("h3",{style:{margin:"0 0 0.8rem 0",fontSize:"0.9rem",color:"#475569"},children:r.groupMembersView.selectGroup}),t("div",{style:{display:"flex",flexDirection:"column",gap:"0.4rem"},children:e.groups.map(A=>{let P=A.id===f?.id;return m("button",{type:"button",onClick:()=>{k(A.id),l(new Set)},"data-testid":`select-group-btn-${A.id}`,style:{textAlign:"left",padding:"8px 10px",borderRadius:"6px",border:P?"1px solid #6366f1":"1px solid #e2e8f0",backgroundColor:P?"#e0e7ff":"#ffffff",color:P?"#3730a3":"#0f172a",cursor:"pointer",fontWeight:P?600:400,fontSize:"0.85rem"},children:[A.name,A.readOnly?t("span",{"data-testid":`group-upstream-marker-${A.id}`,style:{marginLeft:"6px",fontSize:"0.7rem",color:"#7c3aed"},children:r.common.managedUpstream}):null]},A.id)})})]}),t("div",{style:{backgroundColor:"#ffffff",padding:"1.2rem",borderRadius:"8px",border:"1px solid #e2e8f0"},children:f?m(ge,{children:[m("div",{style:{marginBottom:"1rem",borderBottom:"1px solid #e2e8f0",paddingBottom:"0.8rem"},children:[t("h3",{style:{margin:0,fontSize:"1.1rem",color:"#0f172a"},children:v(r.groupMembersView.membersOfTemplate,{group:f.name})}),m("span",{style:{fontSize:"0.8rem",color:"#64748b"},children:[r.groupMembersView.groupKeyLabel,": ",f.groupKey]}),f.readOnly?t("div",{"data-testid":"group-members-upstream-notice",role:"note",style:{marginTop:"0.5rem",padding:"0.5rem 0.7rem",borderRadius:"6px",backgroundColor:"#f5f3ff",border:"1px solid #ddd6fe",color:"#5b21b6",fontSize:"0.8rem"},children:r.groupMembersView.upstreamNotice}):null]}),m("div",{style:{display:"flex",gap:"0.75rem",alignItems:"center",flexWrap:"wrap",marginBottom:"0.8rem"},children:[t("input",{type:"search","aria-label":r.groupMembersView.searchLabel,placeholder:r.groupMembersView.searchPlaceholder,value:x,onChange:A=>d(A.target.value),"data-testid":"member-search-input",style:{flex:1,minWidth:"220px",padding:"6px 12px",borderRadius:"6px",border:"1px solid #cbd5e1",fontSize:"0.85rem"}}),m("label",{style:{display:"inline-flex",alignItems:"center",gap:"0.35rem",fontSize:"0.8rem",color:"#475569"},children:[t("input",{type:"checkbox","data-testid":"member-only-toggle",checked:b,onChange:A=>{S(A.target.checked),l(new Set)}}),v(r.groupMembersView.onlyMembers,{count:U.size})]})]}),t("p",{"data-testid":"member-summary",role:"status","aria-live":"polite",style:{margin:"0 0 0.6rem 0",fontSize:"0.78rem",color:"#475569"},children:v(r.groupMembersView.summary,{shown:V.length,total:e.users.length,members:U.size})}),V.length===0&&t("p",{"data-testid":"member-empty-filtered",style:{margin:"0 0 0.6rem 0",fontSize:"0.85rem",color:"#475569"},children:e.users.length===0?r.groupMembersView.noUsers:E===""&&b?r.groupMembersView.emptyNoMembers:r.groupMembersView.emptyFiltered}),t("div",{style:{display:"flex",flexDirection:"column",gap:"0.5rem"},children:V.map(A=>{let P=U.has(A.id);return m("div",{style:{display:"flex",justifyContent:"space-between",alignItems:"center",padding:"8px 12px",borderRadius:"6px",border:"1px solid #f1f5f9",backgroundColor:P?"#f0fdf4":"#ffffff"},"data-testid":`member-row-${A.id}`,children:[m("div",{children:[t("span",{style:{fontWeight:600,fontSize:"0.88rem",color:"#0f172a",marginRight:"8px"},children:A.displayName}),m("span",{style:{fontSize:"0.78rem",color:"#64748b"},children:["(",A.email,")"]})]}),f.readOnly?P?t("span",{"data-testid":`member-readonly-${A.id}`,style:{fontSize:"0.75rem",color:"#475569"},children:r.common.managedUpstream}):null:t("button",{type:"button",onClick:()=>O(A.id,P),...Y(u),"aria-label":v(P?r.groupMembersView.actionRemoveAria:r.groupMembersView.actionAddAria,{user:A.displayName}),"data-testid":`toggle-member-btn-${A.id}`,style:{padding:"4px 12px",borderRadius:"4px",border:P?"1px solid #b91c1c":"1px solid #0284c7",backgroundColor:P?"#ffffff":"#0284c7",color:P?"#b91c1c":"#ffffff",fontSize:"0.78rem",fontWeight:600,cursor:"pointer"},children:P?r.groupMembersView.actionRemove:r.groupMembersView.actionAdd})]},A.id)})})]}):t("div",{"data-testid":"member-no-groups",style:{color:"#475569",textAlign:"center",padding:"2rem"},children:e.groups.length===0?r.groupMembersView.noGroups:r.groupMembersView.selectPrompt})})]})}function wt(e){return e==="email"?{backgroundColor:"#e0f2fe",color:"#0369a1"}:e==="domain"?{backgroundColor:"#fef3c7",color:"#b45309"}:{backgroundColor:"#ede9fe",color:"#6d28d9"}}function xt(e,o){return e==="email"?o.allowlistView.emailTypeShort:e==="domain"?o.allowlistView.domainTypeShort:o.allowlistView.groupTypeShort}function vt(){let e=oe(),o=ne(),n=e.labels??j,{submit:c,result:u}=ae(o),r=o.state!=="idle",[i,y]=T(""),[w,C]=T("email"),[k,M]=T(""),l=d=>{if(d.preventDefault(),!i)return;let b={pattern:i,description:k};c({intent:"addAllowlistEntry",pattern:b.pattern,type:w,description:b.description},()=>{y(S=>S===b.pattern?"":S),M(S=>S===b.description?"":S)})},s=d=>{c({intent:"removeAllowlistEntry",entryId:String(d)})},x=d=>{c({intent:"removeAllowlistGroup",entryId:String(d)})};return m("section",{"data-testid":"allowlist-view-section",style:{display:"flex",flexDirection:"column",gap:"1.2rem"},children:[t("h2",{style:se,children:n.allowlistView.title}),t(H,{result:u}),m("form",{onSubmit:l,style:{backgroundColor:"#ffffff",padding:"1.2rem",borderRadius:"8px",border:"1px solid #e2e8f0",display:"flex",flexWrap:"wrap",gap:"0.8rem",alignItems:"flex-end"},children:[m("div",{style:{flex:2,minWidth:"220px"},children:[t("label",{htmlFor:"allowlist-pattern-input-field",style:{display:"block",fontSize:"0.78rem",color:"#475569",marginBottom:"4px"},children:n.allowlistView.pattern}),t("input",{id:"allowlist-pattern-input-field",type:"text",value:i,onChange:d=>y(d.target.value),required:!0,"data-testid":"allowlist-pattern-input",style:{width:"100%",padding:"6px 10px",borderRadius:"6px",border:"1px solid #cbd5e1",fontSize:"0.85rem",boxSizing:"border-box"}})]}),m("div",{style:{flex:1,minWidth:"140px"},children:[t("label",{htmlFor:"allowlist-type-select-field",style:{display:"block",fontSize:"0.78rem",color:"#475569",marginBottom:"4px"},children:n.allowlistView.type}),m("select",{id:"allowlist-type-select-field",value:w,onChange:d=>C(d.target.value),"data-testid":"allowlist-type-select",style:{width:"100%",padding:"6px 10px",borderRadius:"6px",border:"1px solid #cbd5e1",fontSize:"0.85rem",boxSizing:"border-box"},children:[t("option",{value:"email",children:n.allowlistView.emailType}),t("option",{value:"domain",children:n.allowlistView.domainType})]})]}),m("div",{style:{flex:2,minWidth:"200px"},children:[t("label",{htmlFor:"allowlist-desc-input-field",style:{display:"block",fontSize:"0.78rem",color:"#475569",marginBottom:"4px"},children:n.allowlistView.description}),t("input",{id:"allowlist-desc-input-field",type:"text",value:k,onChange:d=>M(d.target.value),"data-testid":"allowlist-desc-input",style:{width:"100%",padding:"6px 10px",borderRadius:"6px",border:"1px solid #cbd5e1",fontSize:"0.85rem",boxSizing:"border-box"}})]}),t("button",{type:"submit","data-testid":"submit-allowlist-add",disabled:r,"aria-busy":r,style:{padding:"7px 16px",borderRadius:"6px",backgroundColor:"#047857",color:"#ffffff",border:"none",fontSize:"0.85rem",fontWeight:600,cursor:"pointer"},children:n.allowlistView.addEntry})]}),t("div",{style:{backgroundColor:"#ffffff",borderRadius:"8px",border:"1px solid #e2e8f0",overflow:"hidden"},children:m("table",{style:{width:"100%",borderCollapse:"collapse",fontSize:"0.85rem",textAlign:"left"},children:[t("thead",{children:m("tr",{style:{backgroundColor:"#f8fafc",borderBottom:"1px solid #e2e8f0",color:"#475569"},children:[t("th",{scope:"col",style:{padding:"10px 14px"},children:n.common.id}),t("th",{scope:"col",style:{padding:"10px 14px"},children:n.allowlistView.target}),t("th",{scope:"col",style:{padding:"10px 14px"},children:n.allowlistView.type}),t("th",{scope:"col",style:{padding:"10px 14px"},children:n.allowlistView.description}),t("th",{scope:"col",style:{padding:"10px 14px",textAlign:"right"},children:n.common.actions})]})}),m("tbody",{children:[e.allowlist.map(d=>m("tr",{style:{borderBottom:"1px solid #f1f5f9"},"data-testid":`allowlist-row-${d.type}-${d.id}`,"data-allowlist-type":d.type,children:[t("td",{style:{padding:"10px 14px",color:"#475569"},children:v(n.common.idTemplate,{id:d.id})}),t("td",{style:{padding:"10px 14px",fontWeight:600,color:"#0f172a"},children:d.type==="group"?m("span",{"data-testid":`allowlist-group-${d.type}-${d.id}`,children:[d.groupName,t("span",{style:{marginLeft:"6px",fontFamily:"monospace",fontSize:"0.78rem",color:"#64748b"},children:d.groupKey})]}):t("span",{style:{fontFamily:"monospace"},children:d.pattern})}),t("td",{style:{padding:"10px 14px"},children:t("span",{style:{fontSize:"0.75rem",padding:"2px 8px",borderRadius:"10px",...wt(d.type),fontWeight:600},children:xt(d.type,n)})}),m("td",{style:{padding:"10px 14px",color:"#475569"},children:[d.description||n.common.none,d.owner.kind==="deployment"&&t("span",{"data-testid":`allowlist-owner-${d.type}-${d.id}`,style:{marginLeft:"8px",fontSize:"0.72rem",color:"#475569"},children:n.allowlistView.deploymentOwner})]}),t("td",{style:{padding:"10px 14px",textAlign:"right"},children:d.readOnly?t("span",{"data-testid":`readonly-allowlist-${d.type}-${d.id}`,style:{fontSize:"0.75rem",color:"#475569"},children:n.common.readOnly}):t("button",{type:"button",onClick:()=>{window.confirm(v(n.allowlistView.confirmDelete,{target:d.type==="group"?d.groupName:d.pattern}))&&(d.type==="group"?x(d.id):s(d.id))},disabled:r,"aria-busy":r,"aria-label":v(n.allowlistView.deleteAria,{target:d.type==="group"?d.groupName:d.pattern}),"data-testid":`remove-allowlist-btn-${d.type}-${d.id}`,style:{padding:"3px 8px",borderRadius:"4px",border:"1px solid #fee2e2",backgroundColor:"#fff5f5",color:"#b91c1c",fontSize:"0.78rem",cursor:"pointer"},children:n.common.delete})})]},`${d.type}-${d.id}`)),e.allowlist.length===0&&t("tr",{children:t("td",{colSpan:5,style:{padding:"2rem",textAlign:"center",color:"#475569"},children:n.allowlistView.empty})})]})]})})]})}function kt(){let e=oe(),o=ne(),{submit:n,result:c}=ae(o),u=e.labels??j,r=u.directoryView,i=e.groups.filter(p=>!p.externalLink),[y,w]=T(""),[C,k]=T(""),[M,l]=T(""),[s,x]=T("direct"),d=e.groups.filter(p=>p.externalLink),b=new Set(e.allowlist.filter(p=>p.type==="group").map(p=>p.groupId)),S=p=>e.allowlist.find(L=>L.type==="group"&&L.groupId===p),h=o.state!=="idle",[f,G]=T(null),U=Re(c,u),E=f===null||(e.groups.find(D=>D.id===f.groupId)?.externalLink?.syncedAt??null)!==f.syncedAtAtPress?null:f.groupId,V=e.directoryStatus.isEnabled&&e.directoryStatus.provider!=="",O=te(()=>Me(e.catalog,Te(d),u),[e.catalog,d,u]),A=te(()=>O.filter(p=>p.disabled!==!0).length,[O]),P=p=>{if(p.preventDefault(),!(y&&C))return;let L=i.find(g=>String(g.id)===y);if(!window.confirm(v(r.confirmLink,{group:L?.name??y,upstream:C})))return;let D=C;n({intent:"linkDirectoryGroup",groupId:y,provider:e.directoryStatus.provider,externalKey:D,externalId:M,membershipMode:s},()=>{k(g=>g===D?"":g),l(g=>C===D?"":g),w("")})};return m("section",{"data-testid":"directory-view-section",style:{display:"flex",flexDirection:"column",gap:"1rem"},children:[t("h2",{style:se,children:r.title}),t(H,{result:c}),!V&&t("p",{"data-testid":"directory-not-wired",style:{margin:0,padding:"0.7rem 1rem",borderRadius:"6px",border:"1px solid #e2e8f0",backgroundColor:"#f8fafc",color:"#475569",fontSize:"0.85rem"},children:r.notWiredNotice}),V&&e.groups.length===0&&t("p",{"data-testid":"directory-no-groups",style:{margin:0,padding:"0.7rem 1rem",borderRadius:"6px",border:"1px solid #e2e8f0",backgroundColor:"#f8fafc",color:"#475569",fontSize:"0.85rem"},children:r.noGroupsToLink}),V&&e.groups.length>0&&i.length===0&&t("p",{"data-testid":"directory-nothing-to-link",style:{margin:0,padding:"0.7rem 1rem",borderRadius:"6px",border:"1px solid #e2e8f0",backgroundColor:"#f8fafc",color:"#475569",fontSize:"0.85rem"},children:r.nothingToLink}),t("p",{"data-testid":"directory-sync-already-pending",role:"status","aria-live":"polite",hidden:U===null,style:U===null?void 0:{margin:0,padding:"0.5rem 0.7rem",borderRadius:"6px",backgroundColor:"#fffbeb",border:"1px solid #fde68a",color:"#92400e",fontSize:"0.8rem"},children:U}),V&&i.length>0&&m("form",{onSubmit:P,"data-testid":"directory-link-form",style:{display:"flex",gap:"0.75rem",flexWrap:"wrap",alignItems:"flex-end",backgroundColor:"#ffffff",padding:"1rem",borderRadius:"8px",border:"1px solid #e2e8f0"},children:[m("div",{style:{display:"flex",flexDirection:"column",gap:"0.25rem"},children:[t("label",{htmlFor:"directory-group-select-input",style:re,children:r.selectGroup}),m("select",{id:"directory-group-select-input","data-testid":"directory-group-select",value:y,onChange:p=>w(p.target.value),style:{padding:"0.5rem",borderRadius:"6px",border:"1px solid #cbd5e1"},children:[t("option",{value:"",children:r.selectGroup}),i.map(p=>t("option",{value:String(p.id),children:v(r.groupOptionTemplate,{name:p.name,key:p.groupKey})},p.id))]})]}),t("div",{style:{display:"flex",flexDirection:"column",gap:"0.25rem",flex:1,minWidth:"260px"},children:e.catalog.kind==="ready"&&e.catalog.groups.length>0?m(ge,{children:[t("div",{id:"directory-external-key-label",style:re,children:r.externalKey}),t("div",{"data-testid":"directory-external-key-picker",onKeyDown:p=>{p.nativeEvent.isComposing||p.nativeEvent.keyCode===229||p.key==="Enter"&&p.preventDefault()},children:t(Ce,{options:O,value:M===""?null:O.find(p=>p.value===M)??null,onChange:p=>{if(p===null){l(""),k("");return}l(p.value),k(p.entry.externalKey)},placeholder:r.pickUpstreamPlaceholder,ariaLabelledBy:"directory-external-key-label",renderOption:Ve,locale:u.locale,labels:Ee(u),clearable:!0})}),A===0&&t("span",{"data-testid":"directory-all-upstream-linked",style:{fontSize:"0.72rem",color:"#92400e"},children:u.groupsView.allUpstreamLinked}),t(Ge,{observedAt:e.catalog.observedAt,isStale:e.catalog.isStale,labels:u})]}):m(ge,{children:[t("label",{htmlFor:"directory-external-key-input",style:re,children:r.externalKey}),t("input",{id:"directory-external-key-input",type:"email",required:!0,"data-testid":"directory-external-key",placeholder:r.externalKeyPlaceholder,value:C,onChange:p=>{l(""),k(p.target.value)},style:{padding:"0.5rem",borderRadius:"6px",border:"1px solid #cbd5e1"}}),e.catalog.kind==="unavailable"&&t("span",{"data-testid":"directory-catalog-unavailable",style:{fontSize:"0.72rem",color:"#92400e"},children:v(u.groupsView.catalogUnavailable,{reason:u.groupsView.catalogFailures[e.catalog.reason]})}),e.catalog.kind==="ready"&&t("span",{"data-testid":"directory-catalog-empty",style:{fontSize:"0.72rem",color:"#475569"},children:v(u.groupsView.catalogEmpty,{at:J(e.catalog.observedAt,u)})})]})}),m("div",{style:{display:"flex",flexDirection:"column",gap:"0.25rem"},children:[t("label",{htmlFor:"directory-membership-mode-input",style:re,children:r.membershipMode}),m("select",{id:"directory-membership-mode-input","data-testid":"directory-membership-mode",value:s,onChange:p=>x(p.target.value),style:{padding:"0.5rem",borderRadius:"6px",border:"1px solid #cbd5e1"},children:[t("option",{value:"direct",children:r.directMode}),t("option",{value:"transitive",children:r.transitiveMode})]})]}),t("button",{type:"submit","data-testid":"directory-link-submit",disabled:!(y&&C)||h,"aria-busy":h,style:{padding:"0.5rem 1rem",borderRadius:"6px",border:"none",backgroundColor:y&&C&&!h?"#2563eb":"#94a3b8",color:"#fff",fontWeight:600},children:r.link})]}),d.length===0?t("div",{"data-testid":"directory-empty",style:{padding:"2rem",textAlign:"center",color:"#64748b",backgroundColor:"#ffffff",borderRadius:"8px",border:"1px solid #e2e8f0"},children:r.empty}):m("table",{"data-testid":"directory-table",style:{width:"100%",borderCollapse:"collapse",backgroundColor:"#ffffff",borderRadius:"8px",overflow:"hidden",border:"1px solid #e2e8f0"},children:[t("thead",{children:m("tr",{style:{backgroundColor:"#f8fafc",textAlign:"left"},children:[t("th",{scope:"col",style:W,children:u.groupsView.name}),t("th",{scope:"col",style:W,children:r.externalKey}),t("th",{scope:"col",style:W,children:r.membershipMode}),t("th",{scope:"col",style:W,children:r.lastSynced}),t("th",{scope:"col",style:W,children:u.common.status}),t("th",{scope:"col",style:W,children:u.common.actions})]})}),t("tbody",{children:d.map(p=>{let L=p.externalLink,D=b.has(p.id);return m("tr",{"data-testid":`directory-row-${p.id}`,"data-sync-enabled":String(L.isSyncEnabled),style:{borderTop:"1px solid #e2e8f0"},children:[m("td",{style:W,children:[p.name,t("div",{style:{fontSize:"0.75rem",color:"#64748b"},children:p.groupKey})]}),t("td",{style:W,"data-testid":`directory-external-${p.id}`,children:L.externalKey}),t("td",{style:W,children:L.membershipMode==="direct"?r.directMode:r.transitiveMode}),m("td",{style:W,"data-testid":`directory-synced-${p.id}`,children:[L.syncedAt?J(L.syncedAt,u):r.neverSynced,L.unresolvedCount>0?t("div",{style:{fontSize:"0.75rem",color:"#b45309"},"data-testid":`directory-unresolved-${p.id}`,children:v(r.unresolvedTemplate,{count:L.unresolvedCount})}):null]}),m("td",{style:W,children:[t("span",{"data-testid":`directory-status-${p.id}`,style:{fontSize:"0.75rem",padding:"2px 8px",borderRadius:"10px",backgroundColor:L.isSyncEnabled?"#dcfce7":"#fee2e2",color:L.isSyncEnabled?"#166534":"#b91c1c",fontWeight:600},children:L.isSyncEnabled?r.syncEnabled:r.syncPaused}),L.syncError?t("div",{style:{fontSize:"0.75rem",color:"#b91c1c",marginTop:"0.25rem"},"data-testid":`directory-error-${p.id}`,children:L.syncError}):null]}),t("td",{style:W,children:m("div",{style:{display:"flex",gap:"0.35rem",flexWrap:"wrap"},children:[t("button",{type:"button","data-testid":`directory-sync-now-${p.id}`,...Y(h),"aria-label":v(E===p.id?r.syncQueuedAria:r.syncNowAria,{group:p.name}),onClick:()=>n({intent:"requestDirectorySync",groupId:String(p.id)},g=>{g?.syncRequest==="queued"&&G({groupId:p.id,syncedAtAtPress:p.externalLink?.syncedAt??null})}),style:pe,children:E===p.id?r.syncQueued:r.syncNow}),t("button",{type:"button","data-testid":`directory-toggle-sync-${p.id}`,...Y(h),"aria-label":v(L.isSyncEnabled?r.pauseAria:r.resumeAria,{group:p.name}),onClick:()=>{G(null),n({intent:"setDirectorySyncEnabled",groupId:String(p.id),isSyncEnabled:String(!L.isSyncEnabled)})},style:pe,children:L.isSyncEnabled?r.pause:r.resume}),t("button",{type:"button","data-testid":`directory-allow-${p.id}`,...Y(h),"aria-label":v(D?r.disallowGroupAria:r.allowGroupAria,{group:p.name}),onClick:()=>{let g=S(p.id);if(D&&g){if(!window.confirm(v(r.confirmDisallow,{group:p.name})))return;n({intent:"removeAllowlistGroup",entryId:String(g.id)})}else n({intent:"addAllowlistGroup",groupId:String(p.id)})},style:pe,children:D?r.disallowGroup:r.allowGroup}),t("button",{type:"button","data-testid":`directory-unlink-${p.id}`,...Y(h),"aria-label":v(r.unlinkAria,{group:p.name}),onClick:()=>{window.confirm(v(r.confirmUnlink,{group:p.name,upstream:p.externalLink?.externalKey??""}))&&n({intent:"unlinkDirectoryGroup",groupId:String(p.id)})},style:{...pe,color:"#b91c1c",borderColor:"#fecaca"},children:r.unlink})]})})]},p.id)})})]})]})}var re={fontSize:"0.78rem",color:"#475569",fontWeight:600},Ae={position:"absolute",width:"1px",height:"1px",padding:0,margin:"-1px",overflow:"hidden",clipPath:"inset(50%)",whiteSpace:"nowrap",border:0},se={margin:0,fontSize:"1.05rem",fontWeight:700,color:"#0f172a"},W={padding:"0.6rem 0.75rem",fontSize:"0.85rem",verticalAlign:"top"};function Y(e){return{"aria-disabled":e,"aria-busy":e,"data-busy":e?"true":void 0}}var pe={padding:"0.25rem 0.6rem",fontSize:"0.75rem",borderRadius:"6px",border:"1px solid #cbd5e1",backgroundColor:"#fff",cursor:"pointer"},Se={users:Pe,groups:ft,group_members:ht,allowlist:vt,directory:kt};function Qt({renderHeader:e,pendingSyncPolling:o,basePath:n}){let u=oe()?.segment??"users",r=Object.hasOwn(Se,u)?Se[u]:Pe;return t(ke,{renderHeader:e,pendingSyncPolling:o,basePath:n,children:t(Ie.Provider,{value:n,children:t(r,{})})})}export{vt as AllowlistView,Qt as AuthUserAdminAppView,lt as DEFAULT_PENDING_SYNC_POLLING,kt as DirectoryView,ht as GroupMembersView,ft as GroupsView,$ as UserAdminInputError,B as UserAdminOperatorError,ke as UserAdminShell,Pe as UsersView,Rt as createInMemoryUserAdminStore,Et as createUserAdminApp,j as defaultUserAdminLabels,St as jaUserAdminLabels,F as normalizeUpstreamKey,he as resolveUserAdminLabels,Vt as userAdminAccessFor,Tt as userAdminIntents};
|