/// /// /// declare namespace GoogleAppsScript { namespace Card_Service { /** * An action that enables interactivity within UI elements. The action does not happen directly on * the client but rather invokes an Apps Script callback function with optional parameters. * * var image = CardService.newImage() * .setOnClickAction(CardService.newAction() * .setFunctionName("handleImageClick") * .setParameters({imageSrc: 'carImage'})); */ interface Action { setFunctionName(functionName: string): Action; setLoadIndicator(loadIndicator: LoadIndicator): Action; setParameters(parameters: { [key: string]: string }): Action; /** @deprecated DO NOT USE */ setMethodName(functionName: string): Action; setPersistValues(persistValues: boolean): Action; } /** * The response object that may be returned from a callback function (e.g., a form response handler) * to perform one or more actions on the client. Some combinations of actions are not supported. * * // An action that opens a link * var actionResponse = CardService.newActionResponseBuilder() * .setOpenLink(CardService.newOpenLink() * .setUrl("https://www.google.com")) * .build(); * * // An action that shows a notification. * var actionResponse = CardService.newActionResponseBuilder() * .setNotification(CardService.newNotification() * .setText("Some info to display to user")) * .build(); * * // An action that shows an additional card. It also sets a flag to indicate that the original * // state data has changed. * * var cardBuilder = CardService.newCardBuilder(); * // Build card ... * var actionResponse = CardService.newActionResponseBuilder() * .setNavigation(CardService.newNavigation() * .pushCard(cardBuilder.build())) * .setStateChanged(true) * .build(); */ interface ActionResponse { printJson(): string; } /** * A builder for ActionResponse objects. */ interface ActionResponseBuilder { build(): ActionResponse; setNavigation(navigation: Navigation): ActionResponseBuilder; setNotification(notification: Notification): ActionResponseBuilder; setOpenLink(openLink: OpenLink): ActionResponseBuilder; setStateChanged(stateChanged: boolean): ActionResponseBuilder; } /** * Represents an attachment created by an add-on. This can be used within the context of different * Google extensibility products to generate new attachments, such as for Calendar events. */ interface Attachment { setIconUrl(iconUrl: string): Attachment; setMimeType(mimeType: string): Attachment; setResourceUrl(resourceUrl: string): Attachment; setTitle(title: string): Attachment; } /** * An authorization action that will send the user to the AuthorizationUrl when clicked. * * CardService.newAuthorizationAction() * .setAuthorizationUrl("http://google.com/"); */ interface AuthorizationAction { setAuthorizationUrl(authorizationUrl: string): AuthorizationAction; } /** * An error that can be returned to trigger an authorization card to be shown to the user. * * CardService.newAuthorizationException() * .setAuthorizationUrl("http://auth.com/") * .setResourceDisplayName("Example Resource") * .throwException(); */ interface AuthorizationException { printJson(): string; setAuthorizationUrl(authUrl: string): AuthorizationException; setCustomUiCallback(callback: string): AuthorizationException; setResourceDisplayName(name: string): AuthorizationException; throwException(): void; } /** * A base class for all buttons. */ interface Button { setAuthorizationAction(action: AuthorizationAction): Button; setComposeAction(action: Action, composedEmailType: ComposedEmailType): Button; setOnClickAction(action: Action): Button; setOnClickOpenLinkAction(action: Action): Button; setOpenLink(openLink: OpenLink): Button; } /** * Holds a set of Button objects that are displayed in a row. * * var textButton = CardService.newTextButton(); * // Finish building the text button... * * var imageButton = CardService.newImageButton(); * // Finish building the image button... * * var buttonSet = CardService.newButtonSet() * .addButton(textButton) * .addButton(imageButton); */ interface ButtonSet { addButton(button: Button): ButtonSet; } /** * A context card that represents a single view in the * UI. * * var cardSection = CardService.newCardSection(); * // Finish building the card section ... * * var card = CardService.newCardBuilder() * .setName("Card name") * .setHeader(CardService.newCardHeader().setTitle("Card title")) * .addSection(cardSection) * .build(); */ interface Card { printJson(): string; } /** * A clickable menu item that is added to the card header menu. * * var action = CardService.newAction(); * // Finish building the action... * * var cardAction = CardService.newCardAction() * .setText("Card action") * .setOnClickAction(action); */ interface CardAction { setAuthorizationAction(action: AuthorizationAction): CardAction; setComposeAction(action: Action, composedEmailType: ComposedEmailType): CardAction; setOnClickAction(action: Action): CardAction; setOnClickOpenLinkAction(action: Action): CardAction; setOpenLink(openLink: OpenLink): CardAction; setText(text: string): CardAction; } /** * An enum that defines the display style of card. */ enum DisplayStyle { PEEK, REPLACE, } /** * A builder for Card objects. */ interface CardBuilder { addCardAction(cardAction: CardAction): CardBuilder; addSection(section: CardSection): CardBuilder; build(): Card; setHeader(cardHeader: CardHeader): CardBuilder; setName(name: string): CardBuilder; setFixedFooter(fixedFooter: FixedFooter): CardBuilder; setDisplayStyle(displayStyle: DisplayStyle): CardBuilder; setPeekCardHeader(peekCardHeader: CardHeader): CardBuilder; } /** * The header of a Card. * * var cardHeader = CardService.newCardHeader() * .setTitle("Card header title") * .setSubtitle("Card header subtitle") * .setImageStyle(CardService.ImageStyle.CIRCLE) * .setImageUrl("https://image.png"); */ interface CardHeader { setImageAltText(imageAltText: string): CardHeader; setImageStyle(imageStyle: ImageStyle): CardHeader; setImageUrl(imageUrl: string): CardHeader; setSubtitle(subtitle: string): CardHeader; setTitle(title: string): CardHeader; } /** * A card section holds groups of widgets and provides visual separation between them. * * var image = CardService.newImage(); * // Build image ... * var textParagraph = CardService.newTextParagraph(); * // Build text paragraph ... * * var cardSection = CardService.newCardSection() * .setHeader("Section header") * .addWidget(image) * .addWidget(textParagraph); */ interface CardSection { addWidget(widget: Widget): CardSection; setCollapsible(collapsible: boolean): CardSection; setHeader(header: string): CardSection; setNumUncollapsibleWidgets(numUncollapsibleWidgets: Integer): CardSection; } /** * CardService provides the ability to create generic cards used across different Google * extensibility products, such as Gmail add-ons. * * Currently you can only use this service to construct Gmail add-ons. * * return CardService.newCardBuilder() * .setHeader(CardService.newCardHeader().setTitle("CardTitle")) * .build(); * * Or you can return multiple Cards like so: * * return [ * CardService.newCardBuilder().build(), * CardService.newCardBuilder().build(), * CardService.newCardBuilder().build() * ] * * The following shows how you could define a card with a header, text, an image and a menu item: * * function createWidgetDemoCard() { * return CardService * .newCardBuilder() * .setHeader( * CardService.newCardHeader() * .setTitle('Widget demonstration') * .setSubtitle('Check out these widgets') * .setImageStyle(CardService.ImageStyle.SQUARE) * .setImageUrl( * 'https://www.example.com/images/headerImage.png')) * .addSection( * CardService.newCardSection() * .setHeader('Simple widgets') // optional * .addWidget(CardService.newTextParagraph().setText( * 'These widgets are display-only. ' + * 'A text paragraph can have multiple lines and ' + * 'formatting.')) * .addWidget(CardService.newImage().setImageUrl( * 'https://www.example.com/images/mapsImage.png'))) * .addCardAction(CardService.newCardAction().setText('Gmail').setOpenLink( * CardService.newOpenLink().setUrl('https://mail.google.com/mail'))) * .build(); * } */ interface CardService { BorderType: typeof BorderType; ComposedEmailType: typeof ComposedEmailType; ContentType: typeof ContentType; DisplayStyle: typeof DisplayStyle; GridItemLayout: typeof GridItemLayout; HorizontalAlignment: typeof HorizontalAlignment; Icon: typeof Icon; ImageCropType: typeof ImageCropType; ImageStyle: typeof ImageStyle; LoadIndicator: typeof LoadIndicator; OnClose: typeof OnClose; OpenAs: typeof OpenAs; SelectionInputType: typeof SelectionInputType; SwitchControlType: typeof SwitchControlType; TextButtonStyle: typeof TextButtonStyle; UpdateDraftBodyType: typeof UpdateDraftBodyType; newAction(): Action; newActionResponseBuilder(): ActionResponseBuilder; newAttachment(): Attachment; newAuthorizationAction(): AuthorizationAction; newAuthorizationException(): AuthorizationException; /** * Creates a new BorderStyle. */ newBorderStyle(): BorderStyle; newButtonSet(): ButtonSet; newCalendarEventActionResponseBuilder(): CalendarEventActionResponseBuilder; newCardAction(): CardAction; newCardBuilder(): CardBuilder; newCardHeader(): CardHeader; newCardSection(): CardSection; newComposeActionResponseBuilder(): ComposeActionResponseBuilder; newDatePicker(): DatePicker; newDateTimePicker(): DateTimePicker; newDecoratedText(): DecoratedText; newDivider(): Divider; newDriveItemsSelectedActionResponseBuilder(): DriveItemsSelectedActionResponseBuilder; /** * Creates a new EditorFileScopeActionResponseBuilder. */ newEditorFileScopeActionResponseBuilder(): EditorFileScopeActionResponseBuilder; newFixedFooter(): FixedFooter; newIconImage(): IconImage; /** * Creates a new Grid */ newGrid(): Grid; /** * Creates a new GridItem. */ newGridItem(): GridItem; newImage(): Image; newImageButton(): ImageButton; /** * Creates a new ImageComponent. */ newImageComponent(): ImageComponent; /** * Creates a new ImageCropStyle. */ newImageCropStyle(): ImageCropStyle; newKeyValue(): KeyValue; newLinkPreview(): LinkPreview; newNavigation(): Navigation; newNotification(): Notification; newOpenLink(): OpenLink; newSelectionInput(): SelectionInput; newSuggestions(): Suggestions; newSuggestionsResponseBuilder(): SuggestionsResponseBuilder; newSwitch(): Switch; newTextButton(): TextButton; newTextInput(): TextInput; newTextParagraph(): TextParagraph; newTimePicker(): TimePicker; newUniversalActionResponseBuilder(): UniversalActionResponseBuilder; newUpdateDraftActionResponseBuilder(): UpdateDraftActionResponseBuilder; newUpdateDraftBccRecipientsAction(): UpdateDraftBccRecipientsAction; newUpdateDraftBodyAction(): UpdateDraftBodyAction; newUpdateDraftCcRecipientsAction(): UpdateDraftCcRecipientsAction; newUpdateDraftSubjectAction(): UpdateDraftSubjectAction; newUpdateDraftToRecipientsAction(): UpdateDraftToRecipientsAction; } /** * The response object that may be returned from a callback method for compose action in a Gmail add-on. * * Note: This object isn't related to compose actions that are * used to extend the compose UI. Rather, * this object is a response to an Action that composes draft messages when a specific UI element is * selected. * * var composeActionResponse = CardService.newComposeActionResponseBuilder() * .setGmailDraft(GmailApp.createDraft("recipient", "subject", "body")) * .build(); */ interface ComposeActionResponse { printJson(): string; } /** * A builder for ComposeActionResponse objects. * * Note: This object isn't related to compose actions that are * used to extend the compose UI. Rather, * this builder creates responses to an Action that composes draft messages when a specific * UI element is selected. */ interface ComposeActionResponseBuilder { build(): ComposeActionResponse; setGmailDraft(draft: Gmail.GmailDraft): ComposeActionResponseBuilder; } /** * An enum value that specifies whether the composed email is a standalone or reply draft. */ enum ComposedEmailType { REPLY_AS_DRAFT, STANDALONE_DRAFT, } /** * An enum value that specifies the content type of the content generated by a UpdateDraftActionResponse. */ enum ContentType { TEXT, MUTABLE_HTML, IMMUTABLE_HTML, } /** * Predefined icons that can be used in various UI objects, such as ImageButton or KeyValue widgets. */ enum Icon { NONE, AIRPLANE, BOOKMARK, BUS, CAR, CLOCK, CONFIRMATION_NUMBER_ICON, DOLLAR, DESCRIPTION, EMAIL, EVENT_PERFORMER, EVENT_SEAT, FLIGHT_ARRIVAL, FLIGHT_DEPARTURE, HOTEL, HOTEL_ROOM_TYPE, INVITE, MAP_PIN, MEMBERSHIP, MULTIPLE_PEOPLE, OFFER, PERSON, PHONE, RESTAURANT_ICON, SHOPPING_CART, STAR, STORE, TICKET, TRAIN, VIDEO_CAMERA, VIDEO_PLAY, } /** * A widget that shows an icon image. * * var icon = CardService.newIconImage().setAltText("A nice icon").setIconUrl("https://example.com/icon.png"); */ interface IconImage { setAltText(altText: string): IconImage; setIcon(icon: Icon): IconImage; setIconUrl(url: string): IconImage; setImageCropType(imageCropType: ImageCropType): IconImage; } /** * A widget that shows a single image. * * var image = CardService.newImage().setAltText("A nice image").setImageUrl("https://image.png"); */ interface Image { setAltText(altText: string): Image; setAuthorizationAction(action: AuthorizationAction): Image; setComposeAction(action: Action, composedEmailType: ComposedEmailType): Image; setImageUrl(url: string): Image; setOnClickAction(action: Action): Image; setOnClickOpenLinkAction(action: Action): Image; setOpenLink(openLink: OpenLink): Image; } /** * A ImageButton with an image displayed on it. * * var imageButton = CardService.newImageButton() * .setAltText("An image button with an airplane icon.") * .setIcon(CardService.Icon.AIRPLANE) * .setOpenLink(CardService.newOpenLink() * .setUrl("https://airplane.com")); */ interface ImageButton { setAltText(altText: string): ImageButton; setAuthorizationAction(action: AuthorizationAction): ImageButton; setComposeAction(action: Action, composedEmailType: ComposedEmailType): ImageButton; setIcon(icon: Icon): ImageButton; setIconUrl(url: string): ImageButton; setOnClickAction(action: Action): ImageButton; setOnClickOpenLinkAction(action: Action): ImageButton; setOpenLink(openLink: OpenLink): ImageButton; } /** * An enum that defines an image cropping style. */ enum ImageStyle { SQUARE, CIRCLE, } /** * A widget that displays one or more "keys" around a text "value". The possible keys include an * icon, a label above and a label below. Setting the text content and one of the keys is required * using setContent(text) and one of setIcon(icon), setIconUrl(url), setTopLabel(text), * or setBottomLabel(text). * * var imageKeyValue = CardService.newKeyValue() * .setIconUrl("https://icon.png") * .setContent("KeyValue widget with an image on the left and text on the right"); * * var textKeyValue = CardService.newKeyValue() * .setTopLabel("Text key") * .setContent("KeyValue widget with text key on top and cotent below"); * * var multilineKeyValue = CardService.newKeyValue() * .setTopLabel("Top label - single line)") * .setContent("Content can be multiple lines") * .setMultiline(true) * .setBottomLabel("Bottom label - single line"); */ interface KeyValue { setAuthorizationAction(action: AuthorizationAction): KeyValue; setBottomLabel(text: string): KeyValue; setButton(button: Button): KeyValue; setComposeAction(action: Action, composedEmailType: ComposedEmailType): KeyValue; setContent(text: string): KeyValue; setIcon(icon: Icon): KeyValue; setIconAltText(altText: string): KeyValue; setIconUrl(url: string): KeyValue; setMultiline(multiline: boolean): KeyValue; setOnClickAction(action: Action): KeyValue; setOnClickOpenLinkAction(action: Action): KeyValue; setOpenLink(openLink: OpenLink): KeyValue; setSwitch(switchToSet: Switch): KeyValue; setTopLabel(text: string): KeyValue; } /** * Card action that displays a link preview card and smart chip in the host app. * * const decoratedText = CardService.newDecoratedText() * .setTopLabel('Hello') * .setText('Hi!'); * * const cardSection = CardService.newCardSection() * .addWidget(decoratedText); * * const card = CardService.newCardBuilder() * .addSection(cardSection) * .build(); * * const linkPreview = CardService.newLinkPreview() * .setPreviewCard(card) * .setTitle('Smart chip title'); */ interface LinkPreview { printJson(): string; setLinkPreviewTitle(title: string): LinkPreview; setPreviewCard(previewCard: Card): LinkPreview; setTitle(title: string): LinkPreview; } /** * An enum type that specifies the type of loading or progress indicator to display while an Action is being processed. */ enum LoadIndicator { SPINNER, NONE, } /** * A helper object that controls card navigation. See the card navigation guide for more details. */ interface Navigation { popCard(): Navigation; popToNamedCard(cardName: string): Navigation; popToRoot(): Navigation; printJson(): string; pushCard(card: Card): Navigation; updateCard(card: Card): Navigation; } /** * A notification shown to the user as a response to interacting with a UI element. * * var action = CardService.newAction().setFunctionName("notificationCallback"); * CardService.newTextButton().setText('Save').setOnClickAction(action); * * // ... * * function notificationCallback() { * return CardService.newActionResponseBuilder() * .setNotification(CardService.newNotification() * .setText("Some info to display to user")) * .build(); * } */ interface Notification { setText(text: string): Notification; } /** * An enum that specifies what to do when a URL opened through an OpenLink is closed. * * When a link is opened, the client either forgets about it or waits until the window is closed. * The implementation depends on the client platform capabilities. OnClose may cause OpenAs to be ignored; if the client platform cannot support both selected values together, * OnClose takes precedence. */ enum OnClose { NOTHING, RELOAD, RELOAD_ADD_ON, } /** * An enum that specifies how to open a URL. * * The client can open a URL as either a full size window (if that is the frame used by the * client), or an overlay (such as a pop-up). The implementation depends on the client platform * capabilities, and the value selected may be ignored if the client does not support it. FULL_SIZE is supported by all clients. * * Using OnClose may cause OpenAs to be ignored; if the client platform cannot * support both selected values together, OnClose takes precedence. */ enum OpenAs { FULL_SIZE, OVERLAY, } /** * Represents an action to open a link with some options. * * // A button that opens as a link in an overlay and * // requires a reload when closed. * var button = CardService.newTextButton() * .setText("This button opens a link in an overlay window") * .setOpenLink(CardService.newOpenLink() * .setUrl("https://www.google.com") * .setOpenAs(CardService.OpenAs.OVERLAY) * .setOnClose(CardService.OnClose.RELOAD_ADD_ON)); * * // An action response that opens a link in full screen and * // requires no action when closed. * var actionResponse = CardService.newActionResponseBuilder() * .setOpenLink(CardService.newOpenLink() * .setUrl("https://www.google.com") * .setOpenAs(CardService.OpenAs.FULL_SIZE) * .setOnClose(CardService.OnClose.NOTHING)); * .build(); */ interface OpenLink { setOnClose(onClose: OnClose): OpenLink; setOpenAs(openAs: OpenAs): OpenLink; setUrl(url: string): OpenLink; } /** * An input field that allows choosing between a set of predefined options. * * var checkboxGroup = CardService.newSelectionInput() * .setType(CardService.SelectionInputType.CHECK_BOX) * .setTitle("A group of checkboxes. Multiple selections are allowed.") * .setFieldName("checkbox_field") * .addItem("checkbox one title", "checkbox_one_value", false) * .addItem("checkbox two title", "checkbox_two_value", true) * .addItem("checkbox three title", "checkbox_three_value", false) * .setOnChangeAction(CardService.newAction() * .setFunctionName("handleCheckboxChange")); * * var radioGroup = CardService.newSelectionInput() * .setType(CardService.SelectionInputType.RADIO_BUTTON) * .setTitle("A group of radio buttons. Only a single selection is allowed.") * .setFieldName("checkbox_field") * .addItem("radio button one title", "radio_one_value", true) * .addItem("radio button two title", "radio_two_value", true) * .addItem("radio button three title", "radio_three_value", false); */ interface SelectionInput { addItem(text: any, value: any, selected: boolean): SelectionInput; setFieldName(fieldName: string): SelectionInput; setOnChangeAction(action: Action): SelectionInput; setTitle(title: string): SelectionInput; setType(type: SelectionInputType): SelectionInput; } /** * Type of selection input. */ enum SelectionInputType { CHECK_BOX, RADIO_BUTTON, DROPDOWN, } /** * Autocomplete suggestions to supplement a TextInput widget. * * var textInput = CardService.newTextInput() * .setSuggestions(CardService.newSuggestions() * .addSuggestion("First suggestion") * .addSuggestion("Second suggestion")) */ interface Suggestions { addSuggestion(suggestion: string): Suggestions; addSuggestions(suggestions: string[]): Suggestions; } /** * A response object that can be returned from a suggestions callback function. This is used with * TextInput widgets that implement autocomplete. * * var suggestionsResponse = CardService.newSuggestionsResponseBuilder() * .setSuggestions(CardService.newSuggestions() * .addSuggestion("First suggestion") * .addSuggestion("Second suggestion")) * .build(); */ interface SuggestionsResponse { printJson(): string; } /** * A builder for SuggestionsResponse objects. */ interface SuggestionsResponseBuilder { build(): SuggestionsResponse; setSuggestions(suggestions: Suggestions): SuggestionsResponseBuilder; } /** * A UI element that supports being toggled on or off. This can only be used within a KeyValue widget. * * var switchKeyValue = CardService.newKeyValue() * .setTopLabel("Switch key value widget label") * .setContent("This is a key value widget with a switch on the right") * .setSwitch(CardService.newSwitch() * .setFieldName("form_input_switch_key") * .setValue("form_input_switch_value") * .setControlType(CardService.SwitchControlType.SWITCH) * .setOnChangeAction(CardService.newAction() * .setFunctionName("handleSwitchChange"))); */ interface Switch { setFieldName(fieldName: string): Switch; setOnChangeAction(action: Action): Switch; setSelected(selected: boolean): Switch; setValue(value: string): Switch; setControlType(type: SwitchControlType): Switch; } /** * Type of switch. */ enum SwitchControlType { SWITCH, CHECK_BOX, } /** * A TextButton with a text label. You can set the background color and disable the button when * needed. * * var textButton = CardService.newTextButton() * .setText("Open Link") * .setOpenLink(CardService.newOpenLink() * .setUrl("https://www.google.com")); */ interface TextButton { setAltText(altText: string): TextButton; setAuthorizationAction(action: AuthorizationAction): TextButton; setBackgroundColor(backgroundColor: string): TextButton; setComposeAction(action: Action, composedEmailType: ComposedEmailType): TextButton; setDisabled(disabled: boolean): TextButton; setOnClickAction(action: Action): TextButton; setOnClickOpenLinkAction(action: Action): TextButton; setOpenLink(openLink: OpenLink): TextButton; setText(text: string): TextButton; setTextButtonStyle(textButtonStyle: TextButtonStyle): TextButton; } /** * An enum that specifies the style for TextButton. * * TEXT is the default; it renders a simple text button with clear background. * FILLED buttons have a background color you can set with * TextButton.setBackgroundColor(backgroundColor). */ enum TextButtonStyle { TEXT, FILLED, } /** * A input field widget that accepts text input. * * var textInput = CardService.newTextInput() * .setFieldName("text_input_form_input_key") * .setTitle("Text input title") * .setHint("Text input hint"); */ interface TextInput { setFieldName(fieldName: string): TextInput; setHint(hint: string): TextInput; setMultiline(multiline: boolean): TextInput; setOnChangeAction(action: Action): TextInput; setSuggestions(suggestions: Suggestions): TextInput; setSuggestionsAction(suggestionsAction: Action): TextInput; setTitle(title: string): TextInput; setValue(value: string): TextInput; } /** * A widget that displays text and supports basic HTML formatting. * * var textParagraph = CardService.newTextParagraph() * .setText("This is a text paragraph widget. Multiple lines are allowed if needed."); */ interface TextParagraph { setText(text: string): TextParagraph; } /** * The response object that may be returned from a method that creates universal action. * * // A universal action that opens a link. * var openLinkUniversalAction = CardService.newUniversalActionResponseBuilder() * .setOpenLink(CardService.newOpenLink() * .setUrl("https://www.google.com")) * .build(); * * var cardBuilder1 = CardService.newCardBuilder(); * var cardBuilder2 = CardService.newCardBuilder(); * // Finish building the cards ... * * // A universal action that shows two static cards. * var cardsUniversalAction = CardService.newUniversalActionResponseBuilder() * .displayAddOnCards([ * cardBuilder1.build(); * cardBuilder2.build(); * ]).build(); */ interface UniversalActionResponse { printJson(): string; } /** * An input field that allows users to input a time. * * // A time picker with default value of 3:30 PM. * var dateTimePicker = CardService.newTimePicker() * .setTitle("Enter the time.") * .setFieldName("time_field") * .setHours(15) * .setMinutes(30) * .setOnChangeAction(CardService.newAction() * .setFunctionName("handleTimeChange")); */ interface TimePicker { setFieldName(fieldName: string): TimePicker; setHours(hours: number): TimePicker; setMinutes(hours: number): TimePicker; setOnChangeAction(action: Action): TimePicker; setTitle(title: string): TimePicker; } /** * A builder for the UniversalActionResponse objects. */ interface UniversalActionResponseBuilder { build(): UniversalActionResponse; displayAddOnCards(cardObjects: Card[]): UniversalActionResponseBuilder; setOpenLink(openLink: OpenLink): UniversalActionResponseBuilder; } /** * Represents an action that updates the email draft that the user is currently editing. * * // A UpdateDraftActionResponse that inserts non-editable content (a link in this case) into an * // email draft. * var updateDraftActionResponse = CardService.newUpdateDraftActionResponseBuilder() * .setUpdateDraftBodyAction(CardService.newUpdateDraftBodyAction() * .addUpdateContent( * "Google", * ContentType.IMMUTABLE_HTML) * .setUpdateType(UpdateDraftBodyType.IN_PLACE_INSERT)) * .build(); * * // A UpdateDraftActionResponse that inserts a link into an email draft. The added content can be * // edited further. * var updateDraftActionResponse = CardService.newUpdateDraftActionResponseBuilder() * .setUpdateDraftBodyAction(CardService.newUpdateDraftBodyAction() * .addUpdateContent( * "Google", * ContentType.MUTABLE_HTML) * .setUpdateType(UpdateDraftBodyType.IN_PLACE_INSERT)) * .build(); * * // A UpdateDraftActionResponse that inserts multiple values of different types. * // The example action response inserts two lines next to each other in the email * // draft, at the cursor position. Each line contains the content added by * // {@link UpdateDraftActionResponseBuilder#addUpdateContent}. * var updateDraftActionResponse = CardService.newUpdateDraftActionResponseBuilder() * .setUpdateDraftBodyAction(CardService.newUpdateDraftBodyAction() * .addUpdateContent( * "Google", * ContentType.MUTABLE_HTML) * .addUpdateContent("Above is a google link.", ContentType.PLAIN_TEXT) * .setUpdateType(UpdateDraftBodyType.IN_PLACE_INSERT)) * .build(); */ interface UpdateDraftActionResponse { printJson(): string; } /** * A builder for UpdateDraftActionResponse objects. */ interface UpdateDraftActionResponseBuilder { build(): UpdateDraftActionResponse; setUpdateDraftBccRecipientsAction( updateDraftBccRecipientsAction: UpdateDraftBccRecipientsAction, ): UpdateDraftActionResponseBuilder; setUpdateDraftBodyAction(updateDraftBodyAction: UpdateDraftBodyAction): UpdateDraftActionResponseBuilder; setUpdateDraftCcRecipientsAction( updateDraftCcRecipientsAction: UpdateDraftCcRecipientsAction, ): UpdateDraftActionResponseBuilder; setUpdateDraftSubjectAction( updateDraftSubjectAction: UpdateDraftSubjectAction, ): UpdateDraftActionResponseBuilder; setUpdateDraftToRecipientsAction( updateDraftToRecipientsAction: UpdateDraftToRecipientsAction, ): UpdateDraftActionResponseBuilder; } /** * Represents an action that updates the email draft body. */ interface UpdateDraftBodyAction { addUpdateContent(content: string, contentType: ContentType): UpdateDraftBodyAction; setUpdateType(updateType: UpdateDraftBodyType): UpdateDraftBodyAction; } /** * Sets an action that updates the email Bcc recipients of a draft. */ interface UpdateDraftBccRecipientsAction { addUpdateBccRecipients(bccRecipientEmails: string[]): UpdateDraftBccRecipientsAction; } /** * Sets an action that updates the Cc recipients of a draft. */ interface UpdateDraftCcRecipientsAction { addUpdateCcRecipients(ccRecipientEmails: string[]): UpdateDraftCcRecipientsAction; } /** * Updates the subject line of an email draft. */ interface UpdateDraftSubjectAction { addUpdateSubject(subject: string): UpdateDraftSubjectAction; } /** * Updates the To recipients of an email draft. */ interface UpdateDraftToRecipientsAction { addUpdateToRecipients(toRecipientEmails: string[]): UpdateDraftToRecipientsAction; } /** * The fixed footer shown at the bottom of an add-on Card. */ interface FixedFooter { setPrimaryButton(button: TextButton): FixedFooter; setSecondaryButton(button: TextButton): FixedFooter; } /** * Represents a response that makes changes to the calendar event that the user is currently editing in reaction to an action taken in the UI, such as a button click. */ interface CalendarEventActionResponse { printJson(): string; } /** * A builder for CalendarEventActionResponse objects. */ interface CalendarEventActionResponseBuilder { addAttachments(attachments: Attachment[]): CalendarEventActionResponseBuilder; addAttendees(emails: string[]): CalendarEventActionResponseBuilder; build(): CalendarEventActionResponse; setConferenceData(conferenceData: Conference_Data.ConferenceData): CalendarEventActionResponseBuilder; } /** * An input field that allows inputing a date. */ interface DatePicker { setFieldName(fieldName: string): DatePicker; setOnChangeAction(action: Action): DatePicker; setTitle(title: string): DatePicker; setValueInMsSinceEpoch(valueMsEpoch: number): DatePicker; setValueInMsSinceEpoch(valueMsEpoch: string): DatePicker; } /** * An input field that allows inputing a date. */ interface DateTimePicker { setFieldName(fieldName: string): DateTimePicker; setOnChangeAction(action: Action): DateTimePicker; setTimeZoneOffsetInMins(timeZoneOffsetMins: Integer): DateTimePicker; setTitle(title: string): DateTimePicker; setValueInMsSinceEpoch(valueMsEpoch: number): DateTimePicker; setValueInMsSinceEpoch(valueMsEpoch: string): DateTimePicker; } /** * A widget that displays text with optional decorations. Possible keys include an icon, a label * above and a label below. Setting the text content and one of the keys is required using setText(text) * and one of setIcon(icon), setIconUrl(url), setTopLabel(text), or setBottomLabel(text). * This class is intended to replace KeyValue. */ interface DecoratedText { setAuthorizationAction(action: AuthorizationAction): DecoratedText; setBottomLabel(text: string): DecoratedText; setButton(button: Button): DecoratedText; setComposeAction(action: Action, composedEmailType: ComposedEmailType): DecoratedText; setEndIcon(endIcon: IconImage): DecoratedText; setIcon(icon: Icon): DecoratedText; setIconAltText(altText: string): DecoratedText; setIconUrl(url: string): DecoratedText; setOnClickAction(action: Action): DecoratedText; setOnClickOpenLinkAction(action: Action): DecoratedText; setOpenLink(openLink: OpenLink): DecoratedText; setStartIcon(startIcon: IconImage): DecoratedText; setSwitchControl(switchToSet: Switch): DecoratedText; setText(text: string): DecoratedText; setTopLabel(text: string): DecoratedText; setWrapText(wrapText: boolean): DecoratedText; } /** * A horizontal divider. */ // eslint-disable-next-line @typescript-eslint/no-empty-interface interface Divider { } /** * An enum that represents the border types that can be applied to widgets. */ enum BorderType { /** No border style. */ NO_BORDER, /** Stroke border style. */ STROKE, } /** * An enum that defines the image and text style of a GridItem. */ enum GridItemLayout { /** The title and subtitle are shown below the grid item's image. */ TEXT_BELOW, /** The title and subtitle are shown above the grid item's image. */ TEXT_ABOVE, } /** * An enum that specifies the horizontal alignment of a widget. */ enum HorizontalAlignment { /** Align the widget to the start of the sentence side. */ START, /** Align the widget to the center. */ CENTER, /** Align the widget to the end of the sentence side. */ END, } /** * An enum that represents the crop styles applied to image components. * If you want to apply a crop style to an IconImage, you can only use SQUARE or CIRCLE. */ enum ImageCropType { /** Square shape crop style. */ SQUARE, /** Circle shape crop style. */ CIRCLE, /** Rectangle shape crop style with custom ratio. */ RECTANGLE_CUSTOM, /** Rectangle shape crop style with 4:3 ratio. */ RECTANGLE_4_3, } /** * A class that represents a complete border style that can be applied to widgets. */ interface BorderStyle { /** * Sets the corner radius of the border, for example 8. */ setCornerRadius(radius: number): BorderStyle; /** * The color in #RGB format to be applied to the border. */ setStrokeColor(color: string): BorderStyle; /** * Sets the type of the border. */ setType(type: BorderType): BorderStyle; } /** * A class that represents a crop style that can be applied to image components. */ interface ImageCropStyle { /** * Sets the aspect ratio to use if the crop type is RECTANGLE_CUSTOM. The ratio must be a positive value. */ setAspectRatio(ratio: number): ImageCropStyle; /** * Sets the crop type for the image. */ setImageCropType(type: ImageCropType): ImageCropStyle; } /** * An image component that can be added to grid items. */ interface ImageComponent { /** * Sets the alternative text of the image. */ setAltText(altText: string): ImageComponent; /** * Sets the border style applied to the image. */ setBorderStyle(borderStyle: BorderStyle): ImageComponent; /** * Sets the crop style for the image. */ setCropStyle(imageCropStyle: ImageCropStyle): ImageComponent; /** * Sets the URL of the image. */ setImageUrl(url: string): ImageComponent; } /** * The items users interact with within a grid widget. */ interface GridItem { /** * Sets the identifier for the grid item. When a user clicks this grid item, * this ID is returned in the parent grid's on_click call back parameters. */ setIdentifier(id: string): GridItem; /** * Sets the image for this grid item. */ setImage(image: ImageComponent): GridItem; /** * Sets the layout of text and image for the grid item. Default is TEXT_BELOW */ setLayout(layout: GridItemLayout): GridItem; /** * Sets the subtitle of the grid item. */ setSubtitle(subtitle: string): GridItem; /** * Sets the horizontal alignment of the grid item. Default is START. */ setTextAlignment(alignment: HorizontalAlignment): GridItem; /** * Sets the title text of the grid item. */ setTitle(title: string): GridItem; } /** * An organized grid to display a collection of grid items. */ interface Grid { /** * Adds a new grid item to the grid. */ addItem(gridItem: GridItem): Grid; /** * Sets an authorization action that opens a URL to the authorization flow when the object is clicked. */ setAuthorizationAction(action: AuthorizationAction): Grid; /** * Sets the border style applied to each grid item. */ setBorderStyle(borderStyle: BorderStyle): Grid; /** * Sets an action that composes a draft email when the object is clicked. */ setComposeAction(action: Action, composedEmailType: ComposedEmailType): Grid; /** * The number of columns to display in the grid. */ setNumColumns(numColumns: number): Grid; /** * Sets an action that executes when the object is clicked. */ setOnClickAction(action: Action): Grid; /** * Sets an action that opens a URL in a tab when the object is clicked. */ setOnClickOpenLinkAction(action: Action): Grid; /** * Sets a URL to be opened when the object is clicked. */ setOpenLink(openLink: OpenLink): Grid; /** * Sets the title text of the grid. */ setTitle(title: string): Grid; } /** * A builder for DriveItemsSelectedActionResponse objects. */ interface DriveItemsSelectedActionResponseBuilder { build(): DriveItemsSelectedActionResponse; requestFileScope(itemId: string): DriveItemsSelectedActionResponseBuilder; } /** * Represents a response that makes changes to Drive while Drive items are selected and in reaction to an action taken in the UI, such as a button click. */ interface DriveItemsSelectedActionResponse { printJson(): string; } /** * Makes changes to an Editor, such as Google Docs, Sheets, or Slides in reaction to an action taken in the UI. */ interface EditorFileScopeActionResponse { /** * Prints the JSON representation of this object. */ printJson(): string; } /** * A builder for EditorFileScopeActionResponse objects. */ interface EditorFileScopeActionResponseBuilder { /** * Builds the current Editor action response. */ build(): EditorFileScopeActionResponse; /** * Requests the drive.file scope for the current active Editor document. */ requestFileScopeForActiveDocument(): EditorFileScopeActionResponseBuilder; } /** * An enum value that specifies the type of an UpdateDraftBodyAction. */ enum UpdateDraftBodyType { IN_PLACE_INSERT, } /** * Base class for all widgets that can be added to a Card. */ // eslint-disable-next-line @typescript-eslint/no-empty-interface interface Widget { } } } declare var CardService: GoogleAppsScript.Card_Service.CardService;