@aiquants/auth-react-router 0.15.0 → 0.16.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/dist/admin.mjs CHANGED
@@ -1,2 +1 @@
1
- var Q={title:"Users & Groups",locale:"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})"}},ht={title:"\u30E6\u30FC\u30B6\u30FC\u30FB\u30B0\u30EB\u30FC\u30D7\u7BA1\u7406",locale:"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 fe(e){let o=Q;return e?{title:e.title??o.title,locale:e.locale??o.locale,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 le}from"react-router";function x(e,o){return e.replace(/\{(\w+)\}/g,(i,l)=>Object.hasOwn(o,l)?String(o[l]):i)}function J(e,o){let i=/(?:Z|[+-]\d{2}:?\d{2})$/.test(e)?e:`${e}Z`;try{return new Intl.DateTimeFormat(o.locale,{timeZone:o.timeZone,dateStyle:"medium",timeStyle:"short"}).format(new Date(i))}catch{return e}}function St(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}],i=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}],l=e?.groupMembers??[{id:1,groupId:1,userId:2},{id:2,groupId:2,userId:3}],m=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(t){let y={id:Math.max(...o.map(g=>g.id),0)+1,email:t.email,displayName:t.displayName,isActive:!0};return o.push(y),y},async updateUser(t,y){let g=o.findIndex(v=>v.id===t);if(g===-1)throw new B(`User not found: ${t}`);return o[g]={...o[g],displayName:y.displayName,email:y.email},o[g]},async toggleUserActive(t,y){let g=o.findIndex(v=>v.id===t);if(g===-1)throw new B(`User not found: ${t}`);return o[g]={...o[g],isActive:y},o[g]},async listGroups(){return[...i]},async createGroup(t){let y={id:Math.max(...i.map(g=>g.id),0)+1,groupKey:t.groupKey,name:t.name,description:t.description,isActive:!0,readOnly:!1};return i.push(y),y},async updateGroup(t,y){let g=i.findIndex(v=>v.id===t);if(g===-1)throw new B(`Group not found: ${t}`);return i[g]={...i[g],name:y.name,description:y.description},i[g]},async deleteGroup(t){i=i.filter(y=>y.id!==t),l=l.filter(y=>y.groupId!==t)},async listGroupMembers(){return[...l]},async addGroupMember(t,y){let g=l.find(A=>A.groupId===t&&A.userId===y);if(g)return g;let v={id:Math.max(...l.map(A=>A.id),0)+1,groupId:t,userId:y};return l.push(v),v},async removeGroupMember(t,y){l=l.filter(g=>!(g.groupId===t&&g.userId===y))},async listAllowlist(){return[...m]},async addAllowlistEntry(t){let y={id:Math.max(...m.map(g=>g.id),0)+1,pattern:t.pattern,type:t.type,description:t.description,owner:{kind:"tenant",tenantId:"default"},readOnly:!1};return m.push(y),y},async removeAllowlistEntry(t){m=m.filter(y=>y.id!==t)},async addAllowlistGroup(t,y){let g=i.find(v=>v.id===t);if(!g)throw new B(`Group not found: ${t}`);m=[...m,{id:Math.max(...m.map(v=>v.id),0)+1,type:"group",groupId:t,groupKey:g.groupKey,groupName:g.name,description:y,owner:{kind:"tenant",tenantId:"default"},readOnly:!1}]},async removeAllowlistGroup(t){m=m.filter(y=>!(y.type==="group"&&y.id===t))},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 Ke(e,o){let i=Number.isFinite(o)&&o>0?o:$e;return(Date.now()-e.getTime())/1e3>i}var Be=64*1024,$e=5400;async function he(e,o,i,l){if(!e)return{kind:"not-wired"};if(!o)return{kind:"not-wired"};try{let{groups:m,observedAt:t}=await e.listGroups(i);return t===null||!Number.isFinite(t.getTime())?{kind:"unavailable",reason:"neverObserved"}:{kind:"ready",groups:m,observedAt:t.toISOString(),isStale:Ke(t,l)}}catch(m){return console.error("[@aiquants/auth-react-router] directoryCatalog.listGroups failed; the picker falls back to manual entry:",m),{kind:"unavailable",reason:Ze(m)}}}function z(e){return e.trim().toLowerCase()}var B=class extends Error{constructor(i){super(i);this.operatorFacing=!0;this.name="UserAdminOperatorError"}};function We(e){return e instanceof B||typeof e=="object"&&e!==null&&e.operatorFacing===!0&&e instanceof Error}var $=class extends Error{constructor(i,l={}){super(i);this.labelKey=i;this.values=l;this.name="UserAdminInputError"}};function je(e){return typeof e=="object"&&e!==null&&e.status===403}function He(e){let o=String(e.get("type")??"");if(o==="email"||o==="domain")return o;throw new $("invalidAllowlistType")}var Qe=["users","groups","group_members","allowlist","directory"];function _e(e){let o=e.replace(/\.data$/,"").split("/").filter(Boolean),i=o[o.length-1]??"";return Qe.includes(i)?i:"users"}var de=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 Ct(){return[...de.keys()]}function Ut(e){return de.get(e)??[]}function Ze(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 N(e,o){let i=e.get(o),l=Number(i);if(i===null||String(i).trim()===""||!Number.isInteger(l)||l<=0)throw new $("invalidField",{field:o});return l}function K(e,o){let i=String(e.get(o)??"").trim();if(i==="")throw new $("invalidField",{field:o});return i}function Ye(e,o){let i=String(e.get(o)??"");if(i!=="true"&&i!=="false")throw new $("invalidField",{field:o});return i==="true"}function we(e){let o=String(e.get("membershipMode")??"");if(o!=="direct"&&o!=="transitive")throw new $("invalidField",{field:"membershipMode"});return o}function ie(e,o){let i=String(e.get(o)??"").trim();return i===""?void 0:i}function Mt(e){let o=fe(e.labels);async function i(d){if(!e.resolveActor)return"user-admin";try{return await e.resolveActor(d)||"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 l(d,s){try{return await e.store.requestDirectorySync(d,await i(s))}catch(h){return console.error(`[@aiquants/auth-react-router] the link for group ${d} was created, but its sync request could not be queued:`,h),"not-queued"}}async function m(d){if(!e.directoryCatalog)return!1;let s=de.get("catalog");if(s===void 0||s.length===0)return!1;try{for(let h of s)await e.guards.requireAccess(d,{action:h,intent:"catalog"});return!0}catch(h){try{e.guards.onDenied?.({intent:"catalog",actions:s,error:h})}catch(n){console.error("[@aiquants/auth-react-router] onDenied threw; the denial itself still stands:",n)}return!1}}async function t({request:d}){await e.guards.requireAccess(d,{action:"read",intent:"loader"});let s=_e(new URL(d.url).pathname),h=(s==="groups"||s==="directory")&&await m(d),[n,S,U,w,b,V]=await Promise.all([e.store.listUsers(),e.store.listGroups(),e.store.listGroupMembers(),e.store.listAllowlist(),e.store.getDirectoryStatus(),e.getMyPermissions?e.getMyPermissions(d).catch(G=>(console.error("[@aiquants/auth-react-router] getMyPermissions failed; rendering the permission badge as unknown:",G),null)):Promise.resolve(null)]),C=await he(e.directoryCatalog,h,d,b.stalenessThresholdSec);return{resourceLabels:e.resourceLabels,segment:s,users:n,groups:S,groupMembers:U,allowlist:w,directoryStatus:b,myPermissions:V,catalog:C,labels:o}}async function y({request:d}){let s=Number(d.headers.get("content-length")??Number.NaN);if(Number.isFinite(s)&&s>Be)return le({ok:!1,error:o.errors.requestTooLarge},{status:413});let h=await d.formData(),n=String(h.get("intent")??""),S=de.get(n);if(!S)return le({ok:!1,error:o.errors.unknownIntent},{status:400});let U=b=>je(b),w=b=>{try{e.guards.onDenied?.({intent:n,actions:S,error:b})}catch{}return le({ok:!1,error:o.errors.forbidden},{status:403})};try{for(let b of S)await e.guards.requireAccess(d,{action:b,intent:n})}catch(b){if(!U(b))throw b;return w(b)}try{return await M(n,h,d)}catch(b){if(U(b))return w(b);if(b instanceof Response)throw b;if(b instanceof $){let V=b.values.field,C=typeof V=="string"?{...b.values,field:o.errors.fieldNames[V]??V}:b.values,G=o.errors[b.labelKey];return{ok:!1,error:x(typeof G=="string"?G:String(b.labelKey),C)}}return console.error(`[@aiquants/auth-react-router] intent "${n}" failed:`,b),{ok:!1,error:We(b)?b.message:o.errors.unexpected}}}function g(d,s,h){let n=String(d.get("externalId")??"").trim();if(h.kind==="ready"){if(n!==""&&h.groups.some(w=>w.externalId===n))return n;let S=z(s),U=h.groups.find(w=>z(w.externalKey)===S);if(U)return U.externalId}return n===""?s:n}function v(d){let s=d.provider.trim();if(!d.isEnabled||s==="")throw new $("directoryDisabled");return s}async function A(d,s){let h=z(d),n=z(s),U=(await e.store.listGroups()).find(w=>w.externalLink!==void 0&&(z(w.externalLink.externalId)===h||z(w.externalLink.externalKey)===n));if(U)throw new $("alreadyLinked",{key:s,group:U.name})}function f(d,s,h){if(h.kind!=="ready")return;let n=z(d),S=z(s);if(!h.groups.some(U=>z(U.externalId)===n&&z(U.externalKey)===S))throw new $("unknownUpstream",{key:s})}async function M(d,s,h){let n=null,S=async()=>(n??(n=await e.store.getDirectoryStatus()),n),U=async()=>he(e.directoryCatalog,!0,h,(await S()).stalenessThresholdSec);if(d==="createUser")return await e.store.createUser({displayName:K(s,"displayName"),email:K(s,"email")}),{ok:!0};if(d==="updateUser")return await e.store.updateUser(N(s,"userId"),{displayName:K(s,"displayName"),email:K(s,"email")}),{ok:!0};if(d==="toggleUserActive"){let w=String(s.get("isActive")??"");if(w!=="true"&&w!=="false")throw new $("invalidField",{field:"isActive"});return await e.store.toggleUserActive(N(s,"userId"),w==="true"),{ok:!0}}if(d==="createGroup")return await e.store.createGroup({groupKey:K(s,"groupKey"),name:K(s,"name"),description:ie(s,"description")}),{ok:!0};if(d==="updateGroup")return await e.store.updateGroup(N(s,"groupId"),{name:K(s,"name"),description:ie(s,"description")}),{ok:!0};if(d==="deleteGroup")return await e.store.deleteGroup(N(s,"groupId")),{ok:!0};if(d==="addGroupMember")return await e.store.addGroupMember(N(s,"groupId"),N(s,"userId")),{ok:!0};if(d==="removeGroupMember")return await e.store.removeGroupMember(N(s,"groupId"),N(s,"userId")),{ok:!0};if(d==="addAllowlistEntry"){let w=He(s);return await e.store.addAllowlistEntry({pattern:K(s,"pattern"),type:w,description:ie(s,"description")}),{ok:!0}}if(d==="addAllowlistGroup")return await e.store.addAllowlistGroup(N(s,"groupId"),ie(s,"description")),{ok:!0};if(d==="removeAllowlistGroup")return await e.store.removeAllowlistGroup(N(s,"entryId")),{ok:!0};if(d==="createLinkedGroup"){let w=K(s,"externalKey"),b=v(await S()),V=await U(),C=g(s,w,V);await A(C,w),f(C,w,V);let G=await e.store.createLinkedGroup({groupKey:K(s,"groupKey"),name:K(s,"name"),description:ie(s,"description"),provider:b,externalId:C,externalKey:w,membershipMode:we(s)});return{ok:!0,syncRequest:await l(G.id,h)}}if(d==="linkDirectoryGroup"){let w=K(s,"externalKey"),b=v(await S()),V=await U(),C=g(s,w,V);await A(C,w),f(C,w,V);let G=N(s,"groupId");return await e.store.linkDirectoryGroup(G,{provider:b,externalId:C,externalKey:w,membershipMode:we(s)}),{ok:!0,syncRequest:await l(G,h)}}if(d==="unlinkDirectoryGroup")return await e.store.unlinkDirectoryGroup(N(s,"groupId")),{ok:!0};if(d==="setDirectorySyncEnabled")return await e.store.setDirectorySyncEnabled(N(s,"groupId"),Ye(s,"isSyncEnabled")),{ok:!0};if(d==="requestDirectorySync"){let w=String(s.get("groupId")??"").trim();return{ok:!0,syncRequest:await e.store.requestDirectorySync(w===""?null:N(s,"groupId"),await i(h))}}return d==="removeAllowlistEntry"?(await e.store.removeAllowlistEntry(N(s,"entryId")),{ok:!0}):(console.error(`[@aiquants/auth-react-router] intent "${d}" is in the permission table but has no handler`),le({ok:!1,error:o.errors.unknownIntent},{status:400}))}return{loader:t,action:y}}import{useEffect as Je,useRef as Xe}from"react";import{Link as et,useLoaderData as tt,useRevalidator as rt}from"react-router";import{jsx as F,jsxs as X}from"react/jsx-runtime";var ot={intervalMs:3e3,maxMs:3e5};function it(e,o){let i=rt(),l=Xe(i.state);l.current=i.state;let{revalidate:m}=i,{intervalMs:t,maxMs:y}=o;Je(()=>{if(e<=0)return;let g=Date.now(),v=setInterval(()=>{if(Date.now()-g>=y){clearInterval(v);return}l.current==="idle"&&m()},t);return()=>clearInterval(v)},[e,t,y,m])}function xe({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,":"]}),F("span",{children:o.text})]})}function nt({status:e,labels:o,groups:i}){if(!e||e.linkedGroupCount===0)return null;let l=o.directoryView,m=[];if(e.isEnabled||m.push({id:"disabled",text:l.disabledWarning}),e.pausedGroupCount>0&&m.push({id:"paused",text:x(l.pausedTemplate,{paused:e.pausedGroupCount,total:e.linkedGroupCount})}),e.isStale){let t=e.oldestSyncedAt?J(e.oldestSyncedAt,o):l.neverSynced;m.push({id:"stale",text:`${l.staleWarning} ${x(l.oldestSyncedTemplate,{at:t})}`})}if(e.erroredGroupIds.length>0){let t=e.erroredGroupIds.map(y=>{let g=i.find(A=>A.id===y);if(!g)return x(o.common.idTemplate,{id:y});let v=g.externalLink?.syncError;return v?x(l.erroredItemTemplate,{group:g.name,reason:v}):g.name});m.push({id:"errored",text:x(l.erroredTemplate,{groups:t.join(l.listSeparator)})})}return e.pendingRequestCount>0&&m.push({id:"pending",text:x(l.pendingTemplate,{count:e.pendingRequestCount})}),m.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:[F("h2",{id:"directory-sync-heading",style:{margin:0,fontSize:"0.9rem",fontWeight:700},children:l.title}),m.map(t=>F("span",{"data-directory-warning":t.id,children:t.text},t.id))]})}function ve({children:e,renderHeader:o,pendingSyncPolling:i}){let l=tt();it(l?.directoryStatus?.pendingRequestCount??0,i??ot);let m=l?.segment??"users",t=l?.labels??Q,y=l?.myPermissions??null,g=l?.resourceLabels??{},v=n=>Object.hasOwn(g,n)?g[n]:n,A=[{key:"users",label:t.tabs.users,href:"/users"},{key:"groups",label:t.tabs.groups,href:"/users/groups"},{key:"group_members",label:t.tabs.groupMembers,href:"/users/group_members"},{key:"allowlist",label:t.tabs.allowlist,href:"/users/allowlist"}],f=(l?.groups??[]).some(n=>n.externalLink);(l?.directoryStatus?.isEnabled||(l?.directoryStatus?.linkedGroupCount??0)>0||f)&&A.push({key:"directory",label:t.tabs.directory,href:"/users/directory"});let M=Object.entries(y??{}),d={text:t.permissions.unknown,color:"#92400e",bgColor:"#fffbeb",borderColor:"#fde68a"},s=n=>n===void 0?d:n.canWrite?{text:t.permissions.canWrite,color:"#047857",bgColor:"#ecfdf5",borderColor:"#a7f3d0"}:n.canRead?{text:t.permissions.canRead,color:"#1d4ed8",bgColor:"#eff6ff",borderColor:"#bfdbfe"}:n.canDelete?{text:t.permissions.canDelete,color:"#b91c1c",bgColor:"#fef2f2",borderColor:"#fecaca"}:{text:t.permissions.none,color:"#475569",bgColor:"#f1f5f9",borderColor:"#cbd5e1"},h=X("div",{style:{display:"flex",alignItems:"center",gap:"0.4rem"},"data-testid":"user-admin-header-annotation",children:[F("span",{style:{fontSize:"0.75rem",backgroundColor:"#e0f2fe",color:"#0369a1",padding:"2px 8px",borderRadius:"12px",fontWeight:600},children:t.heading}),X("div",{style:{display:"inline-flex",alignItems:"center",gap:"0.25rem",fontSize:"0.68rem",color:"#475569"},"data-testid":"user-admin-permissions-badge",children:[F("span",{style:{fontWeight:600,color:"#334155"},children:t.permissions.label}),F("span",{style:{display:"inline-flex",alignItems:"center",gap:"0.18rem"},children:M.length===0?F("span",{"data-testid":"user-admin-permission-unavailable",children:F(xe,{label:t.heading,summary:d})}):M.map(([n,S])=>F(xe,{label:v(n),summary:s(S)},n))})]})]});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:t.title,annotation:h}):X("div",{style:{marginBottom:"1.5rem",display:"flex",justifyContent:"space-between",alignItems:"center"},children:[F("h1",{style:{margin:0,fontSize:"1.5rem",fontWeight:700,color:"#0f172a"},children:t.title}),h]}),F("nav",{"aria-label":t.title,style:{display:"flex",gap:"0.5rem",marginBottom:"1.2rem",borderBottom:"2px solid #e2e8f0",paddingBottom:"0.5rem"},children:A.map(n=>{let S=m===n.key;return F(et,{to:n.href,"data-testid":`user-admin-tab-${n.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:n.label},n.key)})}),F(nt,{status:l?.directoryStatus,labels:t,groups:l?.groups??[]}),F("main",{children:e})]})}import{getHighlightSegments as at,SelectBox as Se}from"@aiquants/select-box";import{useEffect as Ce,useMemo as te,useRef as ee,useState as E}from"react";import{Link as st,useFetcher as ne,useLoaderData as oe,useSearchParams as lt}from"react-router";import{Fragment as me,jsx as r,jsxs as c}from"react/jsx-runtime";function _({result:e,id:o}){let i=e;return i?.ok!==!1||!i.error?null:r("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:i.error})}function ae(e){let o=ee(null),[i,l]=E(void 0),m=e.data===i?void 0:e.data;return Ce(()=>{if(e.state!=="idle"||e.data===void 0)return;let g=o.current;g&&(o.current=null,e.data.ok===!0&&g(e.data))},[e.state,e.data]),{submit:(g,v)=>{o.current=v??null,l(void 0),e.submit(g,{method:"post"})},resetResult:()=>l(e.data),result:m}}function pe(e,o,i){let l=ee(null),m=ee(o);return m.current=o,Ce(()=>{if(!e)return;let t=l.current,y=i?.current??document.activeElement,g=()=>{let f=Array.from(t?.querySelectorAll('a[href],button:not([disabled]),input:not([disabled]),select:not([disabled]),textarea:not([disabled]),[tabindex]:not([tabindex="-1"])')??[]).filter(d=>!(d.disabled||d.hasAttribute("inert"))&&d.closest("[inert]")===null&&d.getAttribute("aria-hidden")!=="true"),M=new Set;return f.filter(d=>{let s=d instanceof HTMLInputElement&&d.type==="radio"?d:null;return!s||s.name===""?!0:!s.checked&&f.some(h=>h instanceof HTMLInputElement&&h.type==="radio"&&h.name===s.name&&h.checked)||M.has(s.name)?!1:(M.add(s.name),!0)})},v=g();(v.find(f=>!f.hasAttribute("data-aqar-visually-hidden"))??v[0])?.focus();let A=f=>{if(f.key==="Escape"){if(f.isComposing||f.keyCode===229||f.defaultPrevented)return;f.preventDefault(),m.current();return}if(f.key!=="Tab")return;let M=g();if(M.length===0)return;let d=M[0],s=M[M.length-1],h=document.activeElement,n=!t?.contains(h);f.shiftKey&&(h===d||n)?(f.preventDefault(),s.focus()):!f.shiftKey&&(h===s||n)&&(f.preventDefault(),d.focus())};return document.addEventListener("keydown",A),()=>{document.removeEventListener("keydown",A),y?.focus?.()}},[e,i]),l}function Ue(e,o,i){return e.kind!=="ready"?[]:e.groups.map(l=>{let m=o.get(z(l.externalId))??o.get(z(l.externalKey)),t=m!==void 0,y=l.memberCount===void 0?"":x(i.groupsView.upstreamOptionMembers,{count:l.memberCount});return{label:x(i.directoryView.groupOptionTemplate,{name:l.name,key:l.externalKey}),value:l.externalId,note:t?x(i.groupsView.upstreamAlreadyLinked,{group:m}):y,...t?{disabled:!0}:{},entry:l}})}function Me({observedAt:e,isStale:o,labels:i}){return r("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:x(o?i.groupsView.catalogStale:i.groupsView.catalogObservedAt,{at:J(e,i)})})}function ce(e){return typeof e=="object"&&e!==null&&e.ok===!1&&typeof e.error=="string"}var dt={exact:{backgroundColor:"#d1fae5",color:"#064e3b",borderRadius:"2px",fontWeight:600},fuzzy:{backgroundColor:"#fef3c7",color:"#78350f",borderRadius:"2px",fontWeight:600}};function Ge(e,o){if(typeof e!="object"||e===null)return null;let i=e.syncRequest;return i==="already-pending"?o.directoryView.syncAlreadyPending:i==="not-queued"?o.directoryView.linkSyncNotQueued:null}function Re(e){let o=new Map;for(let i of e){let l=i.externalLink;l&&(o.set(z(l.externalId),i.name),o.set(z(l.externalKey),i.name))}return o}function Le(e,o){let i=typeof e.note=="string"?e.note:"";return c("span",{"data-aqar-upstream-option":!0,title:i===""?e.label:`${e.label} \u2014 ${i}`,style:{display:"flex",justifyContent:"space-between",alignItems:"baseline",gap:"0.75rem",width:"100%",minWidth:0},children:[r("span",{"data-aqar-upstream-option-label":!0,style:{overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap"},children:at(e.label,o.query).map((l,m)=>r("span",{"data-aqar-match":l.matchType==="none"?void 0:l.matchType,style:l.matchType==="none"?void 0:dt[l.matchType],children:l.text},m))}),i===""?null:r("span",{"data-aqar-upstream-option-note":!0,style:{flexShrink:0,fontSize:"0.72rem",opacity:.75},children:i})]})}function Te(e){let o=e.directoryView;return{noOptions:o.pickerNoOptions,clear:o.pickerClear,toggle:o.pickerToggle,selection:i=>x(o.pickerSelected,{value:i.map(l=>l.label).join(", ")}),status:i=>x(o.pickerAvailable,{count:i.count})}}function ut(e){try{return new Intl.Collator(e).compare}catch{return new Intl.Collator().compare}}function pt(e){return(e.split("@")[0]??e).toLowerCase().replace(/[^a-z0-9._-]+/g,"-").replace(/^-+|-+$/g,"")}function Ve(){let e=oe(),o=ne(),{submit:i,resetResult:l,result:m}=ae(o),t=e.labels??Q,[y,g]=E(""),[v,A]=E(null),f=v?.kind==="edit"?v.user:null,M=v?.kind==="create",d=ee(null),s=(p,I)=>{d.current=I.currentTarget,l(),p.kind==="create"&&(n(""),U("")),A(p)},[h,n]=E(""),[S,U]=E(""),w=pe(M,()=>A(null),d),b=pe(f!==null,()=>A(null),d),V=o.state!=="idle",[C,G]=E({column:"displayName",ascending:!0}),q=ut(t.locale),O=y.trim().toLowerCase(),k=e.users.filter(p=>p.displayName.toLowerCase().includes(O)||p.email.toLowerCase().includes(O)).slice().sort((p,I)=>{let H=C.ascending?1:-1;return C.column==="id"?(p.id-I.id)*H:C.column==="isActive"?(Number(p.isActive)-Number(I.isActive))*H:q(p[C.column],I[C.column])*H}),R=p=>{G(I=>I.column===p?{column:p,ascending:!I.ascending}:{column:p,ascending:!0})},u=p=>{V||p.isActive&&!window.confirm(x(t.usersView.confirmDeactivate,{user:p.displayName}))||i({intent:"toggleUserActive",userId:String(p.id),isActive:String(!p.isActive)})},L=p=>{if(p.preventDefault(),!(h&&S))return;let I=h,H=S;i({intent:"createUser",displayName:I,email:H},()=>{n(j=>j===I?"":j),U(j=>j===H?"":j),A(null)})},P=p=>{p.preventDefault(),f&&i({intent:"updateUser",userId:String(f.id),displayName:f.displayName,email:f.email},()=>A(null))};return c("section",{"data-testid":"users-view-section",style:{display:"flex",flexDirection:"column",gap:"1rem"},children:[r("h2",{style:se,children:t.usersView.title}),!v&&r(_,{result:m}),c("div",{style:{display:"flex",justifyContent:"space-between",alignItems:"center",backgroundColor:"#ffffff",padding:"1rem",borderRadius:"8px",border:"1px solid #e2e8f0"},children:[r("input",{type:"text","aria-label":t.usersView.searchLabel,placeholder:t.usersView.searchPlaceholder,value:y,onChange:p=>g(p.target.value),"data-testid":"users-search-input",style:{padding:"6px 12px",borderRadius:"6px",border:"1px solid #cbd5e1",fontSize:"0.85rem",width:"260px"}}),r("button",{type:"button",onClick:p=>s({kind:"create"},p),"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:t.usersView.addUser})]}),r("p",{"data-testid":"users-summary",role:"status","aria-live":"polite",style:{margin:0,fontSize:"0.78rem",color:"#475569"},children:x(t.usersView.listSummary,{shown:k.length,total:e.users.length})}),r("div",{style:{backgroundColor:"#ffffff",borderRadius:"8px",border:"1px solid #e2e8f0",overflow:"hidden"},children:c("table",{style:{width:"100%",borderCollapse:"collapse",fontSize:"0.85rem",textAlign:"left"},children:[r("thead",{children:c("tr",{style:{backgroundColor:"#f8fafc",borderBottom:"1px solid #e2e8f0",color:"#475569"},children:[[["id",t.common.id],["displayName",t.usersView.displayName],["email",t.usersView.email],["isActive",t.common.status]].map(([p,I])=>r("th",{scope:"col",style:{padding:0},"aria-sort":C.column===p?C.ascending?"ascending":"descending":"none",children:c("button",{type:"button","data-testid":`users-sort-${p}`,onClick:()=>R(p),"aria-label":x(C.column===p?C.ascending?t.usersView.sortedAscending:t.usersView.sortedDescending:t.usersView.sortBy,{column:I}),style:{width:"100%",padding:"10px 14px",textAlign:"left",background:"transparent",border:"none",cursor:"pointer",font:"inherit",color:"inherit",fontWeight:C.column===p?700:500},children:[I,r("span",{"aria-hidden":"true",style:{marginLeft:"4px",opacity:C.column===p?1:.35},children:C.column===p?C.ascending?"\u25B2":"\u25BC":"\u21C5"})]})},p)),r("th",{scope:"col",style:{padding:"10px 14px",textAlign:"right"},children:t.common.actions})]})}),c("tbody",{children:[k.map(p=>c("tr",{style:{borderBottom:"1px solid #f1f5f9"},"data-testid":`user-row-${p.id}`,children:[r("td",{style:{padding:"10px 14px",color:"#475569"},children:x(t.common.idTemplate,{id:p.id})}),r("td",{style:{padding:"10px 14px",fontWeight:600,color:"#0f172a"},children:p.displayName}),r("td",{style:{padding:"10px 14px",color:"#475569"},children:p.email}),r("td",{style:{padding:"10px 14px"},children:r("span",{style:{fontSize:"0.75rem",padding:"2px 8px",borderRadius:"10px",backgroundColor:p.isActive?"#dcfce7":"#fee2e2",color:p.isActive?"#15803d":"#b91c1c",fontWeight:600},children:p.isActive?t.usersView.active:t.usersView.inactive})}),c("td",{style:{padding:"10px 14px",textAlign:"right"},children:[r("button",{type:"button",onClick:I=>s({kind:"edit",user:p},I),"aria-label":x(t.usersView.editUserAria,{user:p.displayName}),"data-testid":`edit-user-btn-${p.id}`,style:{padding:"3px 8px",borderRadius:"4px",border:"1px solid #cbd5e1",backgroundColor:"#ffffff",fontSize:"0.78rem",cursor:"pointer",marginRight:"6px"},children:t.common.edit}),r("button",{type:"button",onClick:()=>u(p),...Y(V),"aria-label":x(p.isActive?t.usersView.deactivateAria:t.usersView.activateAria,{user:p.displayName}),"data-testid":`toggle-user-btn-${p.id}`,style:{padding:"3px 8px",borderRadius:"4px",border:"1px solid #cbd5e1",backgroundColor:"#ffffff",fontSize:"0.78rem",cursor:V?"default":"pointer",color:p.isActive?"#b91c1c":"#15803d"},children:p.isActive?t.usersView.deactivate:t.usersView.activate})]})]},p.id)),k.length===0&&r("tr",{children:r("td",{colSpan:5,style:{padding:"2rem",textAlign:"center",color:"#475569"},children:O===""?t.usersView.empty:t.usersView.emptyFiltered})})]})]})}),M&&r("div",{style:{position:"fixed",inset:0,backgroundColor:"rgba(0,0,0,0.4)",display:"flex",justifyContent:"center",alignItems:"center",zIndex:100},children:c("form",{ref:w,onSubmit:L,role:"dialog","aria-modal":"true","aria-labelledby":"create-user-title",...ce(m)?{"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:[r("h3",{id:"create-user-title",style:{margin:"0 0 1rem 0",fontSize:"1.1rem"},children:t.usersView.addUser}),r(_,{result:m,id:"create-user-error"}),c("div",{style:{marginBottom:"1rem"},children:[r("label",{htmlFor:"create-user-display-name-input",style:{display:"block",fontSize:"0.8rem",color:"#475569",marginBottom:"4px"},children:t.usersView.displayName}),r("input",{id:"create-user-display-name-input",type:"text",value:h,onChange:p=>n(p.target.value),required:!0,"data-testid":"create-user-display-name",style:{width:"100%",padding:"6px",borderRadius:"4px",border:"1px solid #cbd5e1",boxSizing:"border-box"}})]}),c("div",{style:{marginBottom:"1.2rem"},children:[r("label",{htmlFor:"create-user-email-input",style:{display:"block",fontSize:"0.8rem",color:"#475569",marginBottom:"4px"},children:t.usersView.email}),r("input",{id:"create-user-email-input",type:"email",value:S,onChange:p=>U(p.target.value),required:!0,"data-testid":"create-user-email",style:{width:"100%",padding:"6px",borderRadius:"4px",border:"1px solid #cbd5e1",boxSizing:"border-box"}})]}),c("div",{style:{display:"flex",justifyContent:"flex-end",gap:"0.5rem"},children:[r("button",{type:"button",onClick:()=>A(null),"data-testid":"cancel-create-user",style:{padding:"6px 12px",borderRadius:"4px",border:"1px solid #cbd5e1",backgroundColor:"#ffffff",cursor:"pointer"},children:t.common.cancel}),r("button",{type:"submit","data-testid":"submit-create-user",disabled:V,"aria-busy":V,style:{padding:"6px 12px",borderRadius:"4px",backgroundColor:"#0284c7",color:"#ffffff",border:"none",cursor:"pointer"},children:t.common.create})]})]})}),f&&r("div",{style:{position:"fixed",inset:0,backgroundColor:"rgba(0,0,0,0.4)",display:"flex",justifyContent:"center",alignItems:"center",zIndex:100},children:c("form",{ref:b,onSubmit:P,role:"dialog","aria-modal":"true","aria-labelledby":"edit-user-title",...ce(m)?{"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:[r("h3",{id:"edit-user-title",style:{margin:"0 0 1rem 0",fontSize:"1.1rem"},children:t.usersView.editUser}),r(_,{result:m,id:"edit-user-error"}),c("div",{style:{marginBottom:"1rem"},children:[r("label",{htmlFor:"edit-user-display-name-input",style:{display:"block",fontSize:"0.8rem",color:"#475569",marginBottom:"4px"},children:t.usersView.displayName}),r("input",{id:"edit-user-display-name-input",type:"text",value:f.displayName,onChange:p=>A({kind:"edit",user:{...f,displayName:p.target.value}}),required:!0,"data-testid":"edit-user-display-name",style:{width:"100%",padding:"6px",borderRadius:"4px",border:"1px solid #cbd5e1",boxSizing:"border-box"}})]}),c("div",{style:{marginBottom:"1.2rem"},children:[r("label",{htmlFor:"edit-user-email-input",style:{display:"block",fontSize:"0.8rem",color:"#475569",marginBottom:"4px"},children:t.usersView.email}),r("input",{id:"edit-user-email-input",type:"email",value:f.email,onChange:p=>A({kind:"edit",user:{...f,email:p.target.value}}),required:!0,"data-testid":"edit-user-email",style:{width:"100%",padding:"6px",borderRadius:"4px",border:"1px solid #cbd5e1",boxSizing:"border-box"}})]}),c("div",{style:{display:"flex",justifyContent:"flex-end",gap:"0.5rem"},children:[r("button",{type:"button",onClick:()=>A(null),style:{padding:"6px 12px",borderRadius:"4px",border:"1px solid #cbd5e1",backgroundColor:"#ffffff",cursor:"pointer"},children:t.common.cancel}),r("button",{type:"submit","data-testid":"submit-edit-user",disabled:V,"aria-busy":V,style:{padding:"6px 12px",borderRadius:"4px",backgroundColor:"#0284c7",color:"#ffffff",border:"none",cursor:"pointer"},children:t.common.save})]})]})})]})}function ct(){let e=oe(),o=ne(),{submit:i,resetResult:l,result:m}=ae(o),t=e.labels??Q,y=Ge(m,t),[g,v]=E(""),[A,f]=E(null),M=A?.kind==="edit"?A.group:null,d=A?.kind==="create",s=ee(null),h=(a,T)=>{s.current=T.currentTarget,l(),a.kind==="create"&&De(),f(a)},n=o.state!=="idle",[S,U]=E(""),[w,b]=E(""),[V,C]=E(""),[G,q]=E("local"),[O,k]=E(null),[R,u]=E(null),[L,P]=E("direct"),p=ee(null),I=te(()=>{let a=new Map;for(let T of e.groupMembers)a.set(T.groupId,(a.get(T.groupId)??0)+1);return a},[e.groupMembers]),H=te(()=>Re(e.groups),[e.groups]),j=te(()=>Ue(e.catalog,H,t),[e.catalog,H,t]),Ee=te(()=>j.filter(a=>a.disabled!==!0).length,[j]),ge=e.catalog.kind==="ready"&&e.catalog.groups.length>0&&e.directoryStatus.provider!=="",Ie=pe(d,()=>f(null),s),Pe=pe(M!==null,()=>f(null),s),ye=g.trim().toLowerCase(),be=e.groups.filter(a=>a.name.toLowerCase().includes(ye)||a.groupKey.toLowerCase().includes(ye)),De=()=>{U(""),b(""),C(""),q("local"),u(null),P("direct"),p.current=null},Ne=a=>{if(a.preventDefault(),!(S&&w)||G==="upstream"&&R===null||G==="upstream"&&R!==null&&!window.confirm(x(t.groupsView.confirmCreateLinked,{group:w,upstream:R.externalKey})))return;let T={key:S,name:w,description:V},D=()=>{U(Z=>Z===T.key?"":Z),b(Z=>Z===T.name?"":Z),C(Z=>Z===T.description?"":Z),u(null),f(null)};if(G==="upstream"&&R!==null){i({intent:"createLinkedGroup",groupKey:T.key,name:T.name,description:T.description,provider:e.directoryStatus.provider,externalKey:R.externalKey,membershipMode:L},D);return}i({intent:"createGroup",groupKey:T.key,name:T.name,description:T.description},D)},ze=a=>{if(u(a),!a)return;let T={key:pt(a.externalKey),name:a.name,description:a.description??""};b(T.name),U(T.key),C(T.description),p.current=T},Fe=a=>{if(q(a),a==="upstream")return;u(null);let T=p.current;T&&(U(D=>D===T.key?"":D),b(D=>D===T.name?"":D),C(D=>D===T.description?"":D),p.current=null)},qe=a=>{a.preventDefault(),M&&i({intent:"updateGroup",groupId:String(M.id),name:M.name,description:M.description??""},()=>f(null))},Oe=a=>{if(n)return;let T=e.groupMembers.filter(D=>D.groupId===a.id).length;window.confirm(x(t.groupsView.confirmDelete,{group:a.name,count:T}))&&i({intent:"deleteGroup",groupId:String(a.id)})};return c("section",{"data-testid":"groups-view-section",style:{display:"flex",flexDirection:"column",gap:"1rem"},children:[r("h2",{style:se,children:t.groupsView.title}),!A&&r(_,{result:m}),r("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}),c("div",{style:{display:"flex",justifyContent:"space-between",alignItems:"center",backgroundColor:"#ffffff",padding:"1rem",borderRadius:"8px",border:"1px solid #e2e8f0"},children:[r("input",{type:"text","aria-label":t.groupsView.searchLabel,placeholder:t.groupsView.searchPlaceholder,value:g,onChange:a=>v(a.target.value),"data-testid":"groups-search-input",style:{padding:"6px 12px",borderRadius:"6px",border:"1px solid #cbd5e1",fontSize:"0.85rem",width:"260px"}}),r("button",{type:"button",onClick:a=>h({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:t.groupsView.addGroup})]}),r("div",{style:{display:"grid",gridTemplateColumns:"repeat(auto-fill, minmax(280px, 1fr))",gap:"1rem"},children:be.map(a=>{let T=I.get(a.id)??0;return c("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:[c("div",{children:[c("div",{style:{display:"flex",justifyContent:"space-between",alignItems:"center",marginBottom:"0.5rem"},children:[r("h3",{style:{margin:0,fontSize:"1rem",color:"#0f172a"},children:a.name}),r("span",{style:{fontSize:"0.72rem",backgroundColor:"#e0e7ff",color:"#4338ca",padding:"2px 6px",borderRadius:"4px",fontFamily:"monospace"},children:a.groupKey})]}),r("p",{style:{margin:"0 0 0.8rem 0",fontSize:"0.82rem",color:"#64748b",minHeight:"2.4em"},children:a.description||t.groupsView.noDescription}),a.externalLink&&c("div",{"data-testid":`group-source-${a.id}`,style:{display:"flex",alignItems:"center",gap:"6px",flexWrap:"wrap",marginBottom:"0.6rem"},children:[r("span",{style:{fontSize:"0.72rem",padding:"2px 8px",borderRadius:"10px",backgroundColor:"#ede9fe",color:"#6d28d9",fontWeight:600},children:t.common.managedUpstream}),r("span",{style:{fontSize:"0.72rem",fontFamily:"monospace",color:"#64748b"},children:a.externalLink.externalKey}),a.externalLink.unresolvedCount>0&&r("span",{"data-testid":`group-unresolved-${a.id}`,style:{fontSize:"0.72rem",color:"#b45309"},children:x(t.directoryView.unresolvedTemplate,{count:a.externalLink.unresolvedCount})})]})]}),c("div",{style:{display:"flex",justifyContent:"space-between",alignItems:"center",borderTop:"1px solid #f1f5f9",paddingTop:"0.6rem"},children:[r(st,{to:`/users/group_members?group=${a.id}`,"data-testid":`group-open-members-${a.id}`,"aria-label":x(t.groupsView.openMembersAria,{group:a.name}),style:{fontSize:"0.78rem",color:"#1d4ed8",textDecoration:"none"},children:x(t.groupsView.memberCountTemplate,{count:T})}),a.readOnly?r("span",{"data-testid":`readonly-group-${a.id}`,style:{fontSize:"0.75rem",color:"#475569"},children:t.common.readOnly}):c("div",{children:[r("button",{type:"button",onClick:D=>h({kind:"edit",group:a},D),...Y(n),"aria-label":x(t.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:t.common.edit}),r("button",{type:"button",onClick:()=>Oe(a),...Y(n),"aria-label":x(t.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:t.common.delete})]})]})]},a.id)})}),be.length===0&&r("div",{"data-testid":"groups-empty",style:{padding:"2rem",textAlign:"center",color:"#475569",backgroundColor:"#ffffff",borderRadius:"8px",border:"1px solid #e2e8f0"},children:e.groups.length===0?t.groupsView.empty:t.groupsView.emptyFiltered}),d&&r("div",{style:{position:"fixed",inset:0,backgroundColor:"rgba(0,0,0,0.4)",display:"flex",justifyContent:"center",alignItems:"center",zIndex:100},children:c("form",{ref:Ie,onSubmit:Ne,role:"dialog","aria-modal":"true","aria-labelledby":"create-group-title",...ce(m)?{"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:[r("h3",{id:"create-group-title",style:{margin:"0 0 1rem 0",fontSize:"1.1rem"},children:t.groupsView.addGroup}),r(_,{result:m,id:"create-group-error"}),ge&&c("fieldset",{"data-testid":"create-group-mode",style:{display:"flex",gap:"0.25rem",marginBottom:"1rem",border:"none",padding:0,margin:"0 0 1rem 0"},children:[r("legend",{style:ke,children:t.groupsView.createModeLabel}),["local","upstream"].map(a=>c("label",{"data-aqar-create-mode":a,"data-selected":G===a?"":void 0,"data-focused":O===a?"":void 0,style:{outline:O===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:G===a?"1px solid #4338ca":"1px solid #cbd5e1",backgroundColor:G===a?"#eef2ff":"#ffffff",color:G===a?"#3730a3":"#475569",fontWeight:G===a?700:500},children:[r("input",{type:"radio",name:"create-group-mode",value:a,checked:G===a,onChange:()=>Fe(a),"data-testid":`create-group-mode-${a}`,"data-aqar-visually-hidden":!0,onFocus:()=>k(a),onBlur:()=>k(T=>T===a?null:T),style:ke}),a==="local"?t.groupsView.createModeLocal:t.groupsView.createModeUpstream]},a))]}),e.catalog.kind==="ready"&&e.catalog.groups.length===0&&r("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:x(t.groupsView.catalogEmpty,{at:J(e.catalog.observedAt??"",t)})}),e.catalog.kind==="ready"&&e.catalog.groups.length>0&&e.directoryStatus.provider===""&&r("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:t.groupsView.providerUnset}),e.catalog.kind==="unavailable"&&r("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:x(t.groupsView.catalogUnavailableHere,{reason:t.groupsView.catalogFailures[e.catalog.reason]})}),G==="upstream"&&ge&&e.catalog.kind==="ready"&&c("div",{style:{marginBottom:"1rem"},children:[r("p",{"data-testid":"create-group-upstream-notice",role:"note",style:{margin:"0 0 0.5rem 0",fontSize:"0.78rem",color:"#5b21b6"},children:t.groupsView.createUpstreamNotice}),r("div",{id:"create-group-upstream-label",style:re,children:t.groupsView.pickUpstream}),r("div",{"data-testid":"create-group-upstream-picker",onKeyDown:a=>{a.nativeEvent.isComposing||a.nativeEvent.keyCode===229||a.key==="Enter"&&a.preventDefault()},children:r(Se,{options:j,value:R===null?null:j.find(a=>a.value===R.externalId)??null,onChange:a=>ze(a===null||Array.isArray(a)?null:a.entry??null),placeholder:t.groupsView.pickUpstreamPlaceholder,ariaLabelledBy:"create-group-upstream-label",renderOption:Le,texts:Te(t),clearable:!0})}),r(Me,{observedAt:e.catalog.observedAt,isStale:e.catalog.isStale,labels:t}),c("div",{style:{marginTop:"0.6rem"},children:[r("label",{htmlFor:"create-group-membership-mode",style:re,children:t.directoryView.membershipMode}),c("select",{id:"create-group-membership-mode","data-testid":"create-group-membership-mode",value:L,onChange:a=>P(a.target.value),style:{width:"100%",padding:"6px",borderRadius:"4px",border:"1px solid #cbd5e1",boxSizing:"border-box"},children:[r("option",{value:"direct",children:t.directoryView.directMode}),r("option",{value:"transitive",children:t.directoryView.transitiveMode})]})]})]}),c("div",{style:{marginBottom:"1rem"},children:[r("label",{htmlFor:"create-group-key-input",style:{display:"block",fontSize:"0.8rem",color:"#475569",marginBottom:"4px"},children:t.groupsView.groupKey}),r("input",{id:"create-group-key-input",type:"text",value:S,onChange:a=>U(a.target.value),placeholder:t.groupsView.groupKeyPlaceholder,required:!0,"data-testid":"create-group-key",style:{width:"100%",padding:"6px",borderRadius:"4px",border:"1px solid #cbd5e1",boxSizing:"border-box"}})]}),c("div",{style:{marginBottom:"1rem"},children:[r("label",{htmlFor:"create-group-name-input",style:{display:"block",fontSize:"0.8rem",color:"#475569",marginBottom:"4px"},children:t.groupsView.name}),r("input",{id:"create-group-name-input",type:"text",value:w,onChange:a=>b(a.target.value),placeholder:t.groupsView.namePlaceholder,required:!0,"data-testid":"create-group-name",style:{width:"100%",padding:"6px",borderRadius:"4px",border:"1px solid #cbd5e1",boxSizing:"border-box"}})]}),c("div",{style:{marginBottom:"1.2rem"},children:[r("label",{htmlFor:"create-group-desc-input",style:{display:"block",fontSize:"0.8rem",color:"#475569",marginBottom:"4px"},children:t.groupsView.description}),r("textarea",{id:"create-group-desc-input",value:V,onChange:a=>C(a.target.value),"data-testid":"create-group-description",style:{width:"100%",padding:"6px",borderRadius:"4px",border:"1px solid #cbd5e1",boxSizing:"border-box",height:"60px"}})]}),G==="upstream"&&R===null&&r("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:Ee>0?t.groupsView.pickUpstreamFirst:t.groupsView.allUpstreamLinked}),c("div",{style:{display:"flex",justifyContent:"flex-end",gap:"0.5rem"},children:[r("button",{type:"button",onClick:()=>f(null),"data-testid":"cancel-create-group",style:{padding:"6px 12px",borderRadius:"4px",border:"1px solid #cbd5e1",backgroundColor:"#ffffff",cursor:"pointer"},children:t.common.cancel}),r("button",{type:"submit","data-testid":"submit-create-group",disabled:n||G==="upstream"&&R===null,"aria-busy":n,...G==="upstream"&&R===null?{"aria-describedby":"create-group-submit-hint"}:{},style:{padding:"6px 12px",borderRadius:"4px",backgroundColor:n||G==="upstream"&&R===null?"#a5b4fc":"#4338ca",color:"#ffffff",border:"none",cursor:n||G==="upstream"&&R===null?"not-allowed":"pointer"},children:t.common.create})]})]})}),M&&r("div",{style:{position:"fixed",inset:0,backgroundColor:"rgba(0,0,0,0.4)",display:"flex",justifyContent:"center",alignItems:"center",zIndex:100},children:c("form",{ref:Pe,onSubmit:qe,role:"dialog","aria-modal":"true","aria-labelledby":"edit-group-title",...ce(m)?{"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:[r("h3",{id:"edit-group-title",style:{margin:"0 0 1rem 0",fontSize:"1.1rem"},children:t.groupsView.editGroup}),r(_,{result:m,id:"edit-group-error"}),c("div",{style:{marginBottom:"1rem"},children:[r("label",{htmlFor:"edit-group-name-input",style:{display:"block",fontSize:"0.8rem",color:"#475569",marginBottom:"4px"},children:t.groupsView.name}),r("input",{id:"edit-group-name-input",type:"text",value:M.name,onChange:a=>f({kind:"edit",group:{...M,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"}})]}),c("div",{style:{marginBottom:"1.2rem"},children:[r("label",{htmlFor:"edit-group-desc-input",style:{display:"block",fontSize:"0.8rem",color:"#475569",marginBottom:"4px"},children:t.groupsView.description}),r("textarea",{id:"edit-group-desc-input",value:M.description??"",onChange:a=>f({kind:"edit",group:{...M,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"}})]}),c("div",{style:{display:"flex",justifyContent:"flex-end",gap:"0.5rem"},children:[r("button",{type:"button",onClick:()=>f(null),style:{padding:"6px 12px",borderRadius:"4px",border:"1px solid #cbd5e1",backgroundColor:"#ffffff",cursor:"pointer"},children:t.common.cancel}),r("button",{type:"submit","data-testid":"submit-edit-group",disabled:n,"aria-busy":n,style:{padding:"6px 12px",borderRadius:"4px",backgroundColor:"#4338ca",color:"#ffffff",border:"none",cursor:"pointer"},children:t.common.save})]})]})})]})}function mt(){let e=oe(),o=ne(),{submit:i,result:l}=ae(o),m=o.state!=="idle",t=e.labels??Q,[y]=lt(),g=Number(y.get("group")??""),v=Number.isInteger(g)&&g>0?g:null,[A,f]=E(null),[M,d]=E(new Set),s=ee(v);s.current!==v&&(s.current=v,v!==null&&(f(v),d(new Set)));let[h,n]=E(""),[S,U]=E(!1),w=A??v??e.groups[0]?.id??null,b=e.groups.find(k=>k.id===w)??e.groups[0],V=w!==null&&b!==void 0&&b.id!==w?w:null,C=new Set(e.groupMembers.filter(k=>k.groupId===b?.id).map(k=>k.userId)),G=h.trim().toLowerCase(),q=e.users.filter(k=>S&&!C.has(k.id)&&!M.has(k.id)?!1:G===""?!0:k.displayName.toLowerCase().includes(G)||k.email.toLowerCase().includes(G)),O=(k,R)=>{if(m||!b)return;let u=String(b.id);R?(d(L=>new Set(L).add(k)),i({intent:"removeGroupMember",groupId:u,userId:String(k)})):(d(L=>{if(!L.has(k))return L;let P=new Set(L);return P.delete(k),P}),i({intent:"addGroupMember",groupId:u,userId:String(k)}))};return c("section",{"data-testid":"group-members-view-section",style:{display:"grid",gridTemplateColumns:"240px 1fr",gap:"1.2rem"},children:[r("h2",{style:{...se,gridColumn:"1 / -1"},children:t.groupMembersView.title}),r(_,{result:l}),V!==null&&r("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:x(t.groupMembersView.deepLinkMissed,{id:V,group:b?.name??""})}),c("div",{style:{backgroundColor:"#ffffff",padding:"1rem",borderRadius:"8px",border:"1px solid #e2e8f0"},children:[r("h3",{style:{margin:"0 0 0.8rem 0",fontSize:"0.9rem",color:"#475569"},children:t.groupMembersView.selectGroup}),r("div",{style:{display:"flex",flexDirection:"column",gap:"0.4rem"},children:e.groups.map(k=>{let R=k.id===b?.id;return c("button",{type:"button",onClick:()=>{f(k.id),d(new Set)},"data-testid":`select-group-btn-${k.id}`,style:{textAlign:"left",padding:"8px 10px",borderRadius:"6px",border:R?"1px solid #6366f1":"1px solid #e2e8f0",backgroundColor:R?"#e0e7ff":"#ffffff",color:R?"#3730a3":"#0f172a",cursor:"pointer",fontWeight:R?600:400,fontSize:"0.85rem"},children:[k.name,k.readOnly?r("span",{"data-testid":`group-upstream-marker-${k.id}`,style:{marginLeft:"6px",fontSize:"0.7rem",color:"#7c3aed"},children:t.common.managedUpstream}):null]},k.id)})})]}),r("div",{style:{backgroundColor:"#ffffff",padding:"1.2rem",borderRadius:"8px",border:"1px solid #e2e8f0"},children:b?c(me,{children:[c("div",{style:{marginBottom:"1rem",borderBottom:"1px solid #e2e8f0",paddingBottom:"0.8rem"},children:[r("h3",{style:{margin:0,fontSize:"1.1rem",color:"#0f172a"},children:x(t.groupMembersView.membersOfTemplate,{group:b.name})}),c("span",{style:{fontSize:"0.8rem",color:"#64748b"},children:[t.groupMembersView.groupKeyLabel,": ",b.groupKey]}),b.readOnly?r("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:t.groupMembersView.upstreamNotice}):null]}),c("div",{style:{display:"flex",gap:"0.75rem",alignItems:"center",flexWrap:"wrap",marginBottom:"0.8rem"},children:[r("input",{type:"search","aria-label":t.groupMembersView.searchLabel,placeholder:t.groupMembersView.searchPlaceholder,value:h,onChange:k=>n(k.target.value),"data-testid":"member-search-input",style:{flex:1,minWidth:"220px",padding:"6px 12px",borderRadius:"6px",border:"1px solid #cbd5e1",fontSize:"0.85rem"}}),c("label",{style:{display:"inline-flex",alignItems:"center",gap:"0.35rem",fontSize:"0.8rem",color:"#475569"},children:[r("input",{type:"checkbox","data-testid":"member-only-toggle",checked:S,onChange:k=>{U(k.target.checked),d(new Set)}}),x(t.groupMembersView.onlyMembers,{count:C.size})]})]}),r("p",{"data-testid":"member-summary",role:"status","aria-live":"polite",style:{margin:"0 0 0.6rem 0",fontSize:"0.78rem",color:"#475569"},children:x(t.groupMembersView.summary,{shown:q.length,total:e.users.length,members:C.size})}),q.length===0&&r("p",{"data-testid":"member-empty-filtered",style:{margin:"0 0 0.6rem 0",fontSize:"0.85rem",color:"#475569"},children:e.users.length===0?t.groupMembersView.noUsers:G===""&&S?t.groupMembersView.emptyNoMembers:t.groupMembersView.emptyFiltered}),r("div",{style:{display:"flex",flexDirection:"column",gap:"0.5rem"},children:q.map(k=>{let R=C.has(k.id);return c("div",{style:{display:"flex",justifyContent:"space-between",alignItems:"center",padding:"8px 12px",borderRadius:"6px",border:"1px solid #f1f5f9",backgroundColor:R?"#f0fdf4":"#ffffff"},"data-testid":`member-row-${k.id}`,children:[c("div",{children:[r("span",{style:{fontWeight:600,fontSize:"0.88rem",color:"#0f172a",marginRight:"8px"},children:k.displayName}),c("span",{style:{fontSize:"0.78rem",color:"#64748b"},children:["(",k.email,")"]})]}),b.readOnly?R?r("span",{"data-testid":`member-readonly-${k.id}`,style:{fontSize:"0.75rem",color:"#475569"},children:t.common.managedUpstream}):null:r("button",{type:"button",onClick:()=>O(k.id,R),...Y(m),"aria-label":x(R?t.groupMembersView.actionRemoveAria:t.groupMembersView.actionAddAria,{user:k.displayName}),"data-testid":`toggle-member-btn-${k.id}`,style:{padding:"4px 12px",borderRadius:"4px",border:R?"1px solid #b91c1c":"1px solid #0284c7",backgroundColor:R?"#ffffff":"#0284c7",color:R?"#b91c1c":"#ffffff",fontSize:"0.78rem",fontWeight:600,cursor:"pointer"},children:R?t.groupMembersView.actionRemove:t.groupMembersView.actionAdd})]},k.id)})})]}):r("div",{"data-testid":"member-no-groups",style:{color:"#475569",textAlign:"center",padding:"2rem"},children:e.groups.length===0?t.groupMembersView.noGroups:t.groupMembersView.selectPrompt})})]})}function gt(e){return e==="email"?{backgroundColor:"#e0f2fe",color:"#0369a1"}:e==="domain"?{backgroundColor:"#fef3c7",color:"#b45309"}:{backgroundColor:"#ede9fe",color:"#6d28d9"}}function yt(e,o){return e==="email"?o.allowlistView.emailTypeShort:e==="domain"?o.allowlistView.domainTypeShort:o.allowlistView.groupTypeShort}function bt(){let e=oe(),o=ne(),i=e.labels??Q,{submit:l,result:m}=ae(o),t=o.state!=="idle",[y,g]=E(""),[v,A]=E("email"),[f,M]=E(""),d=n=>{if(n.preventDefault(),!y)return;let S={pattern:y,description:f};l({intent:"addAllowlistEntry",pattern:S.pattern,type:v,description:S.description},()=>{g(U=>U===S.pattern?"":U),M(U=>U===S.description?"":U)})},s=n=>{l({intent:"removeAllowlistEntry",entryId:String(n)})},h=n=>{l({intent:"removeAllowlistGroup",entryId:String(n)})};return c("section",{"data-testid":"allowlist-view-section",style:{display:"flex",flexDirection:"column",gap:"1.2rem"},children:[r("h2",{style:se,children:i.allowlistView.title}),r(_,{result:m}),c("form",{onSubmit:d,style:{backgroundColor:"#ffffff",padding:"1.2rem",borderRadius:"8px",border:"1px solid #e2e8f0",display:"flex",flexWrap:"wrap",gap:"0.8rem",alignItems:"flex-end"},children:[c("div",{style:{flex:2,minWidth:"220px"},children:[r("label",{htmlFor:"allowlist-pattern-input-field",style:{display:"block",fontSize:"0.78rem",color:"#475569",marginBottom:"4px"},children:i.allowlistView.pattern}),r("input",{id:"allowlist-pattern-input-field",type:"text",value:y,onChange:n=>g(n.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"}})]}),c("div",{style:{flex:1,minWidth:"140px"},children:[r("label",{htmlFor:"allowlist-type-select-field",style:{display:"block",fontSize:"0.78rem",color:"#475569",marginBottom:"4px"},children:i.allowlistView.type}),c("select",{id:"allowlist-type-select-field",value:v,onChange:n=>A(n.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:[r("option",{value:"email",children:i.allowlistView.emailType}),r("option",{value:"domain",children:i.allowlistView.domainType})]})]}),c("div",{style:{flex:2,minWidth:"200px"},children:[r("label",{htmlFor:"allowlist-desc-input-field",style:{display:"block",fontSize:"0.78rem",color:"#475569",marginBottom:"4px"},children:i.allowlistView.description}),r("input",{id:"allowlist-desc-input-field",type:"text",value:f,onChange:n=>M(n.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"}})]}),r("button",{type:"submit","data-testid":"submit-allowlist-add",disabled:t,"aria-busy":t,style:{padding:"7px 16px",borderRadius:"6px",backgroundColor:"#047857",color:"#ffffff",border:"none",fontSize:"0.85rem",fontWeight:600,cursor:"pointer"},children:i.allowlistView.addEntry})]}),r("div",{style:{backgroundColor:"#ffffff",borderRadius:"8px",border:"1px solid #e2e8f0",overflow:"hidden"},children:c("table",{style:{width:"100%",borderCollapse:"collapse",fontSize:"0.85rem",textAlign:"left"},children:[r("thead",{children:c("tr",{style:{backgroundColor:"#f8fafc",borderBottom:"1px solid #e2e8f0",color:"#475569"},children:[r("th",{scope:"col",style:{padding:"10px 14px"},children:i.common.id}),r("th",{scope:"col",style:{padding:"10px 14px"},children:i.allowlistView.target}),r("th",{scope:"col",style:{padding:"10px 14px"},children:i.allowlistView.type}),r("th",{scope:"col",style:{padding:"10px 14px"},children:i.allowlistView.description}),r("th",{scope:"col",style:{padding:"10px 14px",textAlign:"right"},children:i.common.actions})]})}),c("tbody",{children:[e.allowlist.map(n=>c("tr",{style:{borderBottom:"1px solid #f1f5f9"},"data-testid":`allowlist-row-${n.type}-${n.id}`,"data-allowlist-type":n.type,children:[r("td",{style:{padding:"10px 14px",color:"#475569"},children:x(i.common.idTemplate,{id:n.id})}),r("td",{style:{padding:"10px 14px",fontWeight:600,color:"#0f172a"},children:n.type==="group"?c("span",{"data-testid":`allowlist-group-${n.type}-${n.id}`,children:[n.groupName,r("span",{style:{marginLeft:"6px",fontFamily:"monospace",fontSize:"0.78rem",color:"#64748b"},children:n.groupKey})]}):r("span",{style:{fontFamily:"monospace"},children:n.pattern})}),r("td",{style:{padding:"10px 14px"},children:r("span",{style:{fontSize:"0.75rem",padding:"2px 8px",borderRadius:"10px",...gt(n.type),fontWeight:600},children:yt(n.type,i)})}),c("td",{style:{padding:"10px 14px",color:"#475569"},children:[n.description||i.common.none,n.owner.kind==="deployment"&&r("span",{"data-testid":`allowlist-owner-${n.type}-${n.id}`,style:{marginLeft:"8px",fontSize:"0.72rem",color:"#475569"},children:i.allowlistView.deploymentOwner})]}),r("td",{style:{padding:"10px 14px",textAlign:"right"},children:n.readOnly?r("span",{"data-testid":`readonly-allowlist-${n.type}-${n.id}`,style:{fontSize:"0.75rem",color:"#475569"},children:i.common.readOnly}):r("button",{type:"button",onClick:()=>{window.confirm(x(i.allowlistView.confirmDelete,{target:n.type==="group"?n.groupName:n.pattern}))&&(n.type==="group"?h(n.id):s(n.id))},disabled:t,"aria-busy":t,"aria-label":x(i.allowlistView.deleteAria,{target:n.type==="group"?n.groupName:n.pattern}),"data-testid":`remove-allowlist-btn-${n.type}-${n.id}`,style:{padding:"3px 8px",borderRadius:"4px",border:"1px solid #fee2e2",backgroundColor:"#fff5f5",color:"#b91c1c",fontSize:"0.78rem",cursor:"pointer"},children:i.common.delete})})]},`${n.type}-${n.id}`)),e.allowlist.length===0&&r("tr",{children:r("td",{colSpan:5,style:{padding:"2rem",textAlign:"center",color:"#475569"},children:i.allowlistView.empty})})]})]})})]})}function ft(){let e=oe(),o=ne(),{submit:i,result:l}=ae(o),m=e.labels??Q,t=m.directoryView,y=e.groups.filter(u=>!u.externalLink),[g,v]=E(""),[A,f]=E(""),[M,d]=E(""),[s,h]=E("direct"),n=e.groups.filter(u=>u.externalLink),S=new Set(e.allowlist.filter(u=>u.type==="group").map(u=>u.groupId)),U=u=>e.allowlist.find(L=>L.type==="group"&&L.groupId===u),w=o.state!=="idle",[b,V]=E(null),C=Ge(l,m),G=b===null||(e.groups.find(P=>P.id===b.groupId)?.externalLink?.syncedAt??null)!==b.syncedAtAtPress?null:b.groupId,q=e.directoryStatus.isEnabled&&e.directoryStatus.provider!=="",O=te(()=>Ue(e.catalog,Re(n),m),[e.catalog,n,m]),k=te(()=>O.filter(u=>u.disabled!==!0).length,[O]),R=u=>{if(u.preventDefault(),!(g&&A))return;let L=y.find(p=>String(p.id)===g);if(!window.confirm(x(t.confirmLink,{group:L?.name??g,upstream:A})))return;let P=A;i({intent:"linkDirectoryGroup",groupId:g,provider:e.directoryStatus.provider,externalKey:P,externalId:M,membershipMode:s},()=>{f(p=>p===P?"":p),d(p=>A===P?"":p),v("")})};return c("section",{"data-testid":"directory-view-section",style:{display:"flex",flexDirection:"column",gap:"1rem"},children:[r("h2",{style:se,children:t.title}),r(_,{result:l}),!q&&r("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:t.notWiredNotice}),q&&e.groups.length===0&&r("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:t.noGroupsToLink}),q&&e.groups.length>0&&y.length===0&&r("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:t.nothingToLink}),r("p",{"data-testid":"directory-sync-already-pending",role:"status","aria-live":"polite",hidden:C===null,style:C===null?void 0:{margin:0,padding:"0.5rem 0.7rem",borderRadius:"6px",backgroundColor:"#fffbeb",border:"1px solid #fde68a",color:"#92400e",fontSize:"0.8rem"},children:C}),q&&y.length>0&&c("form",{onSubmit:R,"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:[c("div",{style:{display:"flex",flexDirection:"column",gap:"0.25rem"},children:[r("label",{htmlFor:"directory-group-select-input",style:re,children:t.selectGroup}),c("select",{id:"directory-group-select-input","data-testid":"directory-group-select",value:g,onChange:u=>v(u.target.value),style:{padding:"0.5rem",borderRadius:"6px",border:"1px solid #cbd5e1"},children:[r("option",{value:"",children:t.selectGroup}),y.map(u=>r("option",{value:String(u.id),children:x(t.groupOptionTemplate,{name:u.name,key:u.groupKey})},u.id))]})]}),r("div",{style:{display:"flex",flexDirection:"column",gap:"0.25rem",flex:1,minWidth:"260px"},children:e.catalog.kind==="ready"&&e.catalog.groups.length>0?c(me,{children:[r("div",{id:"directory-external-key-label",style:re,children:t.externalKey}),r("div",{"data-testid":"directory-external-key-picker",onKeyDown:u=>{u.nativeEvent.isComposing||u.nativeEvent.keyCode===229||u.key==="Enter"&&u.preventDefault()},children:r(Se,{options:O,value:M===""?null:O.find(u=>u.value===M)??null,onChange:u=>{if(u===null||Array.isArray(u)){d(""),f("");return}d(String(u.value)),f(u.entry.externalKey)},placeholder:t.pickUpstreamPlaceholder,ariaLabelledBy:"directory-external-key-label",renderOption:Le,texts:Te(m),clearable:!0})}),k===0&&r("span",{"data-testid":"directory-all-upstream-linked",style:{fontSize:"0.72rem",color:"#92400e"},children:m.groupsView.allUpstreamLinked}),r(Me,{observedAt:e.catalog.observedAt,isStale:e.catalog.isStale,labels:m})]}):c(me,{children:[r("label",{htmlFor:"directory-external-key-input",style:re,children:t.externalKey}),r("input",{id:"directory-external-key-input",type:"email",required:!0,"data-testid":"directory-external-key",placeholder:t.externalKeyPlaceholder,value:A,onChange:u=>{d(""),f(u.target.value)},style:{padding:"0.5rem",borderRadius:"6px",border:"1px solid #cbd5e1"}}),e.catalog.kind==="unavailable"&&r("span",{"data-testid":"directory-catalog-unavailable",style:{fontSize:"0.72rem",color:"#92400e"},children:x(m.groupsView.catalogUnavailable,{reason:m.groupsView.catalogFailures[e.catalog.reason]})}),e.catalog.kind==="ready"&&r("span",{"data-testid":"directory-catalog-empty",style:{fontSize:"0.72rem",color:"#475569"},children:x(m.groupsView.catalogEmpty,{at:J(e.catalog.observedAt,m)})})]})}),c("div",{style:{display:"flex",flexDirection:"column",gap:"0.25rem"},children:[r("label",{htmlFor:"directory-membership-mode-input",style:re,children:t.membershipMode}),c("select",{id:"directory-membership-mode-input","data-testid":"directory-membership-mode",value:s,onChange:u=>h(u.target.value),style:{padding:"0.5rem",borderRadius:"6px",border:"1px solid #cbd5e1"},children:[r("option",{value:"direct",children:t.directMode}),r("option",{value:"transitive",children:t.transitiveMode})]})]}),r("button",{type:"submit","data-testid":"directory-link-submit",disabled:!(g&&A)||w,"aria-busy":w,style:{padding:"0.5rem 1rem",borderRadius:"6px",border:"none",backgroundColor:g&&A&&!w?"#2563eb":"#94a3b8",color:"#fff",fontWeight:600},children:t.link})]}),n.length===0?r("div",{"data-testid":"directory-empty",style:{padding:"2rem",textAlign:"center",color:"#64748b",backgroundColor:"#ffffff",borderRadius:"8px",border:"1px solid #e2e8f0"},children:t.empty}):c("table",{"data-testid":"directory-table",style:{width:"100%",borderCollapse:"collapse",backgroundColor:"#ffffff",borderRadius:"8px",overflow:"hidden",border:"1px solid #e2e8f0"},children:[r("thead",{children:c("tr",{style:{backgroundColor:"#f8fafc",textAlign:"left"},children:[r("th",{scope:"col",style:W,children:m.groupsView.name}),r("th",{scope:"col",style:W,children:t.externalKey}),r("th",{scope:"col",style:W,children:t.membershipMode}),r("th",{scope:"col",style:W,children:t.lastSynced}),r("th",{scope:"col",style:W,children:m.common.status}),r("th",{scope:"col",style:W,children:m.common.actions})]})}),r("tbody",{children:n.map(u=>{let L=u.externalLink,P=S.has(u.id);return c("tr",{"data-testid":`directory-row-${u.id}`,"data-sync-enabled":String(L.isSyncEnabled),style:{borderTop:"1px solid #e2e8f0"},children:[c("td",{style:W,children:[u.name,r("div",{style:{fontSize:"0.75rem",color:"#64748b"},children:u.groupKey})]}),r("td",{style:W,"data-testid":`directory-external-${u.id}`,children:L.externalKey}),r("td",{style:W,children:L.membershipMode==="direct"?t.directMode:t.transitiveMode}),c("td",{style:W,"data-testid":`directory-synced-${u.id}`,children:[L.syncedAt?J(L.syncedAt,m):t.neverSynced,L.unresolvedCount>0?r("div",{style:{fontSize:"0.75rem",color:"#b45309"},"data-testid":`directory-unresolved-${u.id}`,children:x(t.unresolvedTemplate,{count:L.unresolvedCount})}):null]}),c("td",{style:W,children:[r("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?t.syncEnabled:t.syncPaused}),L.syncError?r("div",{style:{fontSize:"0.75rem",color:"#b91c1c",marginTop:"0.25rem"},"data-testid":`directory-error-${u.id}`,children:L.syncError}):null]}),r("td",{style:W,children:c("div",{style:{display:"flex",gap:"0.35rem",flexWrap:"wrap"},children:[r("button",{type:"button","data-testid":`directory-sync-now-${u.id}`,...Y(w),"aria-label":x(G===u.id?t.syncQueuedAria:t.syncNowAria,{group:u.name}),onClick:()=>i({intent:"requestDirectorySync",groupId:String(u.id)},p=>{p?.syncRequest==="queued"&&V({groupId:u.id,syncedAtAtPress:u.externalLink?.syncedAt??null})}),style:ue,children:G===u.id?t.syncQueued:t.syncNow}),r("button",{type:"button","data-testid":`directory-toggle-sync-${u.id}`,...Y(w),"aria-label":x(L.isSyncEnabled?t.pauseAria:t.resumeAria,{group:u.name}),onClick:()=>{V(null),i({intent:"setDirectorySyncEnabled",groupId:String(u.id),isSyncEnabled:String(!L.isSyncEnabled)})},style:ue,children:L.isSyncEnabled?t.pause:t.resume}),r("button",{type:"button","data-testid":`directory-allow-${u.id}`,...Y(w),"aria-label":x(P?t.disallowGroupAria:t.allowGroupAria,{group:u.name}),onClick:()=>{let p=U(u.id);if(P&&p){if(!window.confirm(x(t.confirmDisallow,{group:u.name})))return;i({intent:"removeAllowlistGroup",entryId:String(p.id)})}else i({intent:"addAllowlistGroup",groupId:String(u.id)})},style:ue,children:P?t.disallowGroup:t.allowGroup}),r("button",{type:"button","data-testid":`directory-unlink-${u.id}`,...Y(w),"aria-label":x(t.unlinkAria,{group:u.name}),onClick:()=>{window.confirm(x(t.confirmUnlink,{group:u.name,upstream:u.externalLink?.externalKey??""}))&&i({intent:"unlinkDirectoryGroup",groupId:String(u.id)})},style:{...ue,color:"#b91c1c",borderColor:"#fecaca"},children:t.unlink})]})})]},u.id)})})]})]})}var re={fontSize:"0.78rem",color:"#475569",fontWeight:600},ke={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 ue={padding:"0.25rem 0.6rem",fontSize:"0.75rem",borderRadius:"6px",border:"1px solid #cbd5e1",backgroundColor:"#fff",cursor:"pointer"},Ae={users:Ve,groups:ct,group_members:mt,allowlist:bt,directory:ft};function Kt({renderHeader:e,pendingSyncPolling:o}={}){let l=oe()?.segment??"users",m=Object.hasOwn(Ae,l)?Ae[l]:Ve;return r(ve,{renderHeader:e,pendingSyncPolling:o,children:r(m,{})})}export{bt as AllowlistView,Kt as AuthUserAdminAppView,ot as DEFAULT_PENDING_SYNC_POLLING,ft as DirectoryView,mt as GroupMembersView,ct as GroupsView,$ as UserAdminInputError,B as UserAdminOperatorError,ve as UserAdminShell,Ve as UsersView,St as createInMemoryUserAdminStore,Mt as createUserAdminApp,Q as defaultUserAdminLabels,ht as jaUserAdminLabels,z as normalizeUpstreamKey,fe as resolveUserAdminLabels,Ut as userAdminAccessFor,Ct as userAdminIntents};
2
- //# sourceMappingURL=admin.mjs.map
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};
package/dist/client.d.mts CHANGED
@@ -1,16 +1,7 @@
1
- import * as React from 'react';
2
-
3
- /** GoogleForm のプロパティ。 */
1
+ import * as React from "react";
4
2
  type GoogleFormProps = {
5
- /** フォーム action の値 (loginAction の switch と一致させる)。既定 "Sign In with Google"。 */
6
3
  actionValue?: string;
7
- /** ボタンの表示ラベル。既定 "Sign in with Google"。 */
8
4
  label?: string;
9
5
  };
10
- /**
11
- * Renders the Google sign-in form (POST with `_action`).
12
- * Google サインインフォーム (`_action` 付き POST) を描画する。
13
- */
14
6
  declare const GoogleForm: ({ actionValue, label }?: GoogleFormProps) => React.JSX.Element;
15
-
16
7
  export { GoogleForm, type GoogleFormProps };