import { type ExistingManifestContextOptions } from "./existing-manifest-context.mjs"; import type { ManifestComponentDeletion, ManifestScope } from "./manifest-builder.mjs"; import { SduiPage } from "./sdui-page.mjs"; /** * A single page entry in an {@link App}. * * Apps host SDUI page tabs. To show custom-object records, create an * {@link SduiPage} that renders an SDUI `ObjectListView` for that object. */ export type AppPage = SduiPage; /** * S3 icon reference for an {@link App}. */ export interface AppIcon { /** S3 bucket holding the icon asset. */ s3Bucket: string; /** S3 key (path) within `s3Bucket`. */ s3Key: string; } /** * Initialization properties for {@link App}. */ export interface AppProps { /** * Unique identifier for this app (e.g. `'gym_membership_management_app'`). * * Required. */ apiName: string; /** * Display name shown as the app title in the Rippling UI. * * Required. */ name: string; /** * Human-readable description of what this app does. * * Required. */ description: string; /** * App type discriminator. * * Optional. @default `'custom'` */ appType?: string; /** * S3 icon for this app. * * Optional. @default null */ icon?: AppIcon; /** * SDUI pages shown as tabs in the app. Tab order matches the array order. * * Required. Must include at least one page. */ pages: AppPage[]; } /** * Defines a Rippling app and registers it with the manifest. * * An app is the top-level navigation container. It groups one or more SDUI pages * as tabs visible to users. You would normally define the app last in your * manifest file, after all objects, functions, and SDUI pages have been declared. * * @example * ```ts * new App(manifest, { * apiName: 'gym_membership_management_app', * name: 'Gym Membership Management', * description: 'Members, trainers, schedules, and check-in', * appType: 'custom', * pages: [memberListPage, trainerListPage, todaySchedulePage, checkInDeskPage], * }); * ``` * * @see {@link SduiPage} — SDUI surface tab source. */ export declare class App { static readonly componentType: "CUSTOM_APP"; static toDeletionIdentifier(apiName: string): ManifestComponentDeletion; private readonly _apiName; private readonly _name; private readonly _description; private readonly _appType; private readonly _icon; /** Wire-format pages, resolved eagerly at construction. */ private readonly _pages; /** * @param scope - The manifest to register this app with. * @param props - Initialization properties. */ constructor(scope: ManifestScope, props: AppProps); /** * Loads this app from the active existing-manifest JSON context. */ static loadFromExisting(apiName: string, options?: ExistingManifestContextOptions): App; /** @internal Hydrates an app from existing manifest wire JSON. */ static _fromExistingComponent(scope: ManifestScope, component: Record): App; private static appIconFromExistingComponent; /** * Returns the api_name of this app (e.g. `'gym_membership_management_app'`). */ getApiName(): string; /** * Returns the display name of this app. */ getName(): string; /** * Serializes this app to the wire format consumed by the manifest install endpoint. * * @returns A plain object with `type: 'CUSTOM_APP'`. Optional fields are omitted when unset. */ toDict(): Record; } //# sourceMappingURL=app.d.mts.map