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