import type { MemberAllowanceDefault, MemberAllowanceRule, MemberAllowanceUsage, WorkspaceUsageResponse } from "@opengeni/sdk/usage-allowances"; import { type OpenGeniText } from "../messages/runtime.js"; /** How a member is named in the list. Usage rows carry only a subject id. */ export type UsageMemberIdentity = { name: string; /** A second line: an email, a role, or "You". */ detail?: string | null | undefined; }; /** * Opt in to fixed-amount limits. Amounts are USD micros on the wire; your * format/parse decide the unit people type ("$50.00", "500 credits"). */ export type UsageAmountFormat = { format: (micros: number) => string; /** Returns micros, or null when the text is not a valid amount. */ parse: (text: string) => number | null; /** Shown before the input, for example "$". */ prefix?: string | undefined; /** The amount input's step in the person's unit. */ step?: number | undefined; }; export type UsageMemberListLabels = { listLabel: string; used: (percent: string) => string; noLimitUsed: string; amounts: (used: string, limit: string) => string; nearLimit: string; limitReached: string; limit: string; defaultEqualShare: (percent: string) => string; defaultNone: string; defaultShare: (percent: string) => string; defaultAmount: (amount: string) => string; share: (percent: string) => string; amount: (amount: string) => string; fixedAmountHidden: string; edit: (name: string) => string; editorTitle: (name: string) => string; optionDefault: string; optionShare: string; optionAmount: string; fixedAmountHint: string; shareSlider: string; shareInput: string; amountInput: string; equalShareMultiple: (multiple: string) => string; sameAsEqualShare: string; atBudget: (amount: string) => string; save: string; saving: string; cancel: string; saveFailed: string; invalidAmount: string; totalWithin: (percent: string) => string; totalOver: (percent: string) => string; oversubscribedHelp: string; unlimitedMembers: (count: number) => string; empty: string; }; export declare const DEFAULT_USAGE_MEMBER_LIST_LABELS: (t: OpenGeniText) => UsageMemberListLabels; export type UsageMemberListProps = { /** The full roster for one period (`getAllUsage` / every `getUsage` page). */ usage: WorkspaceUsageResponse; /** The workspace's `memberDefault`, to name what "default" means. */ memberDefault?: MemberAllowanceDefault | null | undefined; /** Name a member. Defaults to the external id, then the subject id. */ describe?: ((member: MemberAllowanceUsage) => UsageMemberIdentity) | undefined; /** * Save a member's rule (`null` restores the default). Omit for a read-only * list. Run it on your backend: member limits need workspace admin authority. */ onChangeRule?: ((member: MemberAllowanceUsage, rule: MemberAllowanceRule) => Promise) | undefined; /** Opt in to amounts and fixed-amount limits. Shares only without it. */ amounts?: UsageAmountFormat | undefined; labels?: Partial | undefined; /** Draw the list's own border. Turn off inside a card that already has one. */ framed?: boolean | undefined; className?: string | undefined; }; /** Words for a member's current limit, from their override or the default. */ export declare function describeMemberLimit(t: OpenGeniText, member: Pick, context: { memberDefault: MemberAllowanceDefault | null | undefined; shareBase: number; amounts?: UsageAmountFormat | undefined; labels?: Partial | undefined; }): string; /** * Every member's usage against their own limit, with an optional editor: * a share-of-budget slider (default), a fixed amount, or the workspace * default. Oversubscription is shown, never blocked. */ export declare function UsageMemberList({ usage, memberDefault, describe, onChangeRule, amounts, labels: overrides, framed, className, }: UsageMemberListProps): import("react").JSX.Element;