Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
35 changes: 35 additions & 0 deletions block-kit/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -20,3 +20,38 @@ Read the [docs](https://docs.slack.dev/block-kit/) to learn concepts behind thes
- **[Section](https://docs.slack.dev/reference/block-kit/blocks/section-block)**: Displays text, possibly alongside elements. [Implementation](./src/main/java/blocks/Section.java).
- **[Video](https://docs.slack.dev/reference/block-kit/blocks/video-block)**: Displays an embedded video player. [Implementation](./src/main/java/blocks/Video.java).

### Block elements

- **[Broadcast](https://docs.slack.dev/reference/block-kit/block-elements/broadcast-element)**: Displays a broadcast mention such as here, channel, or everyone. [Implementation](./src/main/java/elements/Broadcast.java).
- **[Button](https://docs.slack.dev/reference/block-kit/block-elements/button-element)**: Allows users a direct path to performing basic actions. [Implementation](./src/main/java/elements/Button.java).
- **[Channel](https://docs.slack.dev/reference/block-kit/block-elements/channel-element)**: Renders as a mention of a channel. [Implementation](./src/main/java/elements/Channel.java).
- **[Color](https://docs.slack.dev/reference/block-kit/block-elements/color-element)**: Displays a color swatch from a hex value. [Implementation](./src/main/java/elements/Color.java).
- **[Date](https://docs.slack.dev/reference/block-kit/block-elements/date-element)**: Displays a formatted, localized date. [Implementation](./src/main/java/elements/Date.java).
- **[Date picker](https://docs.slack.dev/reference/block-kit/block-elements/date-picker-element)**: Allows users to select a date from a calendar style UI. [Implementation](./src/main/java/elements/DatePicker.java).
- **[Datetime picker](https://docs.slack.dev/reference/block-kit/block-elements/datetime-picker-element)**: Allows users to select both a date and a time of day. [Implementation](./src/main/java/elements/DatetimePicker.java).
- **[Email input](https://docs.slack.dev/reference/block-kit/block-elements/email-input-element)**: Allows user to enter an email into a single-line field. [Implementation](./src/main/java/elements/EmailInput.java).
- **[Emoji](https://docs.slack.dev/reference/block-kit/block-elements/emoji-element)**: Displays an emoji. [Implementation](./src/main/java/elements/Emoji.java).
- **[Feedback buttons](https://docs.slack.dev/reference/block-kit/block-elements/feedback-buttons-element)**: Buttons to indicate positive or negative feedback. [Implementation](./src/main/java/elements/FeedbackButtons.java).
- **[File input](https://docs.slack.dev/reference/block-kit/block-elements/file-input-element)**: Allows user to upload files. [Implementation](./src/main/java/elements/FileInput.java).
- **[Icon button](https://docs.slack.dev/reference/block-kit/block-elements/icon-button-element)**: An icon button to perform actions. [Implementation](./src/main/java/elements/IconButton.java).
- **[Image](https://docs.slack.dev/reference/block-kit/block-elements/image-element)**: Displays an image as part of a larger block of content. [Implementation](./src/main/java/elements/Image.java).
- **[Link](https://docs.slack.dev/reference/block-kit/block-elements/link-element)**: Displays a hyperlink. [Implementation](./src/main/java/elements/Link.java).
- **[Multi-select menu](https://docs.slack.dev/reference/block-kit/block-elements/multi-select-menu-element)**: Allows users to select multiple items from a list of options. [Implementation](./src/main/java/elements/MultiSelectMenu.java).
- **[Number input](https://docs.slack.dev/reference/block-kit/block-elements/number-input-element)**: Allows user to enter a number into a single-line field. [Implementation](./src/main/java/elements/NumberInput.java).
- **[Overflow menu](https://docs.slack.dev/reference/block-kit/block-elements/overflow-menu-element)**: Allows users to press a button to view a list of options. [Implementation](./src/main/java/elements/OverflowMenu.java).
- **[Plain-text input](https://docs.slack.dev/reference/block-kit/block-elements/plain-text-input-element)**: Allows users to enter freeform text data into a single-line or multi-line field. [Implementation](./src/main/java/elements/PlainTextInput.java).
- **[Radio button group](https://docs.slack.dev/reference/block-kit/block-elements/radio-button-group-element)**: Allows users to choose one item from a list of possible options. [Implementation](./src/main/java/elements/RadioButtons.java).
- **[Rich text input](https://docs.slack.dev/reference/block-kit/block-elements/rich-text-input-element)**: Allows users to enter formatted text in a WYSIWYG composer, offering the same messaging writing experience as in Slack. [Implementation](./src/main/java/elements/RichTextInput.java).
- **[Rich text list](https://docs.slack.dev/reference/block-kit/block-elements/rich-text-list-element)**: Displays a list of rich text items. [Implementation](./src/main/java/elements/RichTextList.java).
- **[Rich text preformatted](https://docs.slack.dev/reference/block-kit/block-elements/rich-text-preformatted-element)**: Displays a preformatted rich text element. [Implementation](./src/main/java/elements/RichTextPreformatted.java).
- **[Rich text quote](https://docs.slack.dev/reference/block-kit/block-elements/rich-text-quote-element)**: Displays a rich text quote block. [Implementation](./src/main/java/elements/RichTextQuote.java).
- **[Rich text section](https://docs.slack.dev/reference/block-kit/block-elements/rich-text-section-element)**: A section element that holds rich text elements. [Implementation](./src/main/java/elements/RichTextSection.java).
- **[Select menu](https://docs.slack.dev/reference/block-kit/block-elements/select-menu-element)**: Allows users to choose an option from a drop down menu. [Implementation](./src/main/java/elements/SelectMenu.java).
- **[Team](https://docs.slack.dev/reference/block-kit/block-elements/team-element)**: Renders as a mention of a workspace or team. [Implementation](./src/main/java/elements/Team.java).
- **[Text](https://docs.slack.dev/reference/block-kit/block-elements/text-element)**: Displays text, optionally with styling. [Implementation](./src/main/java/elements/Text.java).
- **[Time picker](https://docs.slack.dev/reference/block-kit/block-elements/time-picker-element)**: Allows users to enter numerical data into a single-line field. [Implementation](./src/main/java/elements/TimePicker.java).
- **[URL input](https://docs.slack.dev/reference/block-kit/block-elements/url-input-element)**: Allows user to enter a URL into a single-line field. [Implementation](./src/main/java/elements/UrlInput.java).
- **[User](https://docs.slack.dev/reference/block-kit/block-elements/user-element)**: Renders as a mention of a user. [Implementation](./src/main/java/elements/User.java).
- **[Usergroup](https://docs.slack.dev/reference/block-kit/block-elements/usergroup-element)**: Renders as a mention of a user group. [Implementation](./src/main/java/elements/UserGroup.java).
- **[Workflow button](https://docs.slack.dev/reference/block-kit/block-elements/workflow-button-element)**: Allows users to run a link trigger with customizable inputs. [Implementation](./src/main/java/elements/WorkflowButton.java).

24 changes: 24 additions & 0 deletions block-kit/src/main/java/elements/Broadcast.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
package elements;

import com.slack.api.model.block.Blocks;
import com.slack.api.model.block.RichTextBlock;
import com.slack.api.model.block.element.RichTextSectionElement;
import java.util.List;

/**
* Displays a broadcast mention such as here, channel, or everyone.
* {@link https://docs.slack.dev/reference/block-kit/block-elements/broadcast-element/}
*/
public class Broadcast {
/**
* A rich text block with a broadcast mention in a section.
*/
public static RichTextBlock example01() {
RichTextBlock block = Blocks.richText(rt -> rt.elements(List.of(RichTextSectionElement.builder()
.elements(List.of(RichTextSectionElement.Broadcast.builder()
.range("everyone")
.build()))
.build())));
return block;
}
}
62 changes: 62 additions & 0 deletions block-kit/src/main/java/elements/Button.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,62 @@
package elements;

import static com.slack.api.model.block.composition.BlockCompositions.markdownText;
import static com.slack.api.model.block.composition.BlockCompositions.plainText;

import com.slack.api.model.block.Blocks;
import com.slack.api.model.block.LayoutBlock;
import com.slack.api.model.block.element.BlockElements;
import com.slack.api.model.block.element.ButtonElement;
import java.util.List;

/**
* Allows users a direct path to performing basic actions.
* {@link https://docs.slack.dev/reference/block-kit/block-elements/button-element/}
*/
public class Button {
/**
* A regular interactive button.
*/
public static ButtonElement example01() {
ButtonElement element = BlockElements.button(
b -> b.text(plainText("Click Me")).value("click_me_123").actionId("button"));
return element;
}

/**
* A button with a primary style attribute.
*/
public static ButtonElement example02() {
ButtonElement element = BlockElements.button(b ->
b.text(plainText("Save")).style("primary").value("click_me_123").actionId("button"));
return element;
}

/**
* A link button.
*/
public static ButtonElement example03() {
ButtonElement element =
BlockElements.button(b -> b.text(plainText("Link Button")).url("https://docs.slack.dev/block-kit"));
return element;
}

/**
* The button element used inside either the section or actions block.
*/
public static List<LayoutBlock> example05() {
List<LayoutBlock> blocks = List.of(
Blocks.section(s -> s.text(markdownText("This is a section block with a button."))
.accessory(BlockElements.button(b -> b.text(plainText("Click Me"))
.value("click_me_123")
.actionId("button")))),
Blocks.actions(a -> a.blockId("actionblock789")
.elements(List.of(
BlockElements.button(b -> b.text(plainText("Primary Button"))
.style("primary")
.value("click_me_456")),
BlockElements.button(b ->
b.text(plainText("Link Button")).url("https://api.slack.com/block-kit"))))));
return blocks;
}
}
24 changes: 24 additions & 0 deletions block-kit/src/main/java/elements/Channel.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
package elements;

import com.slack.api.model.block.Blocks;
import com.slack.api.model.block.RichTextBlock;
import com.slack.api.model.block.element.RichTextSectionElement;
import java.util.List;

/**
* Renders as a mention of a channel.
* {@link https://docs.slack.dev/reference/block-kit/block-elements/channel-element/}
*/
public class Channel {
/**
* A rich text block with a channel mention in a section.
*/
public static RichTextBlock example01() {
RichTextBlock block = Blocks.richText(rt -> rt.elements(List.of(RichTextSectionElement.builder()
.elements(List.of(RichTextSectionElement.Channel.builder()
.channelId("C123ABC456")
.build()))
.build())));
return block;
}
}
23 changes: 23 additions & 0 deletions block-kit/src/main/java/elements/Color.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
package elements;

import com.slack.api.model.block.Blocks;
import com.slack.api.model.block.RichTextBlock;
import com.slack.api.model.block.element.RichTextSectionElement;
import java.util.List;

/**
* Displays a color swatch from a hex value.
* {@link https://docs.slack.dev/reference/block-kit/block-elements/color-element/}
*/
public class Color {
/**
* A rich text block with a color element in a section.
*/
public static RichTextBlock example01() {
RichTextBlock block = Blocks.richText(rt -> rt.elements(List.of(RichTextSectionElement.builder()
.elements(List.of(
RichTextSectionElement.Color.builder().value("#F405B3").build()))
.build())));
return block;
}
}
26 changes: 26 additions & 0 deletions block-kit/src/main/java/elements/Date.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
package elements;

import com.slack.api.model.block.Blocks;
import com.slack.api.model.block.RichTextBlock;
import com.slack.api.model.block.element.RichTextSectionElement;
import java.util.List;

/**
* Displays a formatted, localized date.
* {@link https://docs.slack.dev/reference/block-kit/block-elements/date-element/}
*/
public class Date {
/**
* A rich text block with a date element in a section.
*/
public static RichTextBlock example01() {
RichTextBlock block = Blocks.richText(rt -> rt.elements(List.of(RichTextSectionElement.builder()
.elements(List.of(RichTextSectionElement.Date.builder()
.timestamp(1720710212)
.format("{date_num} at {time}")
.fallback("timey")
.build()))
.build())));
return block;
}
}
26 changes: 26 additions & 0 deletions block-kit/src/main/java/elements/DatePicker.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
package elements;

import static com.slack.api.model.block.composition.BlockCompositions.markdownText;
import static com.slack.api.model.block.composition.BlockCompositions.plainText;

import com.slack.api.model.block.Blocks;
import com.slack.api.model.block.SectionBlock;
import com.slack.api.model.block.element.BlockElements;

/**
* Allows users to select a date from a calendar style UI.
* {@link https://docs.slack.dev/reference/block-kit/block-elements/date-picker-element/}
*/
public class DatePicker {
/**
* A section block with a date picker accessory.
*/
public static SectionBlock example01() {
SectionBlock block = Blocks.section(s -> s.blockId("section1234")
.text(markdownText("Pick a date for the deadline."))
.accessory(BlockElements.datePicker(d -> d.actionId("datepicker123")
.initialDate("1990-04-28")
.placeholder(plainText("Select a date")))));
return block;
}
}
24 changes: 24 additions & 0 deletions block-kit/src/main/java/elements/DatetimePicker.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
package elements;

import static com.slack.api.model.block.composition.BlockCompositions.plainText;

import com.slack.api.model.block.Blocks;
import com.slack.api.model.block.InputBlock;
import com.slack.api.model.block.element.BlockElements;

/**
* Allows users to select both a date and a time of day.
* {@link https://docs.slack.dev/reference/block-kit/block-elements/datetime-picker-element/}
*/
public class DatetimePicker {
/**
* An input block with a datetime picker element.
*/
public static InputBlock example01() {
InputBlock block =
Blocks.input(i -> i.element(BlockElements.datetimePicker(d -> d.actionId("datetimepicker-action")))
.hint(plainText(pt -> pt.text("This is some hint text").emoji(true)))
.label(plainText(pt -> pt.text("Start date").emoji(true))));
return block;
}
}
24 changes: 24 additions & 0 deletions block-kit/src/main/java/elements/EmailInput.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
package elements;

import static com.slack.api.model.block.composition.BlockCompositions.plainText;

import com.slack.api.model.block.Blocks;
import com.slack.api.model.block.InputBlock;
import com.slack.api.model.block.element.BlockElements;

/**
* Allows user to enter an email into a single-line field.
* {@link https://docs.slack.dev/reference/block-kit/block-elements/email-input-element/}
*/
public class EmailInput {
/**
* An input block with an email input element.
*/
public static InputBlock example01() {
InputBlock block = Blocks.input(i -> i.blockId("input123")
.label(plainText("Email Address"))
.element(BlockElements.emailTextInput(
e -> e.actionId("email_text_input-action").placeholder(plainText("Enter an email")))));
return block;
}
}
33 changes: 33 additions & 0 deletions block-kit/src/main/java/elements/Emoji.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
package elements;

import com.slack.api.model.block.Blocks;
import com.slack.api.model.block.RichTextBlock;
import com.slack.api.model.block.element.RichTextSectionElement;
import java.util.List;

/**
* Displays an emoji.
* {@link https://docs.slack.dev/reference/block-kit/block-elements/emoji-element/}
*/
public class Emoji {
/**
* A rich text block with emoji elements in a section.
*/
public static RichTextBlock example01() {
RichTextBlock block = Blocks.richText(rt -> rt.elements(List.of(RichTextSectionElement.builder()
.elements(List.of(
RichTextSectionElement.Emoji.builder()
.name("basketball")
.build(),
RichTextSectionElement.Text.builder().text(" ").build(),
RichTextSectionElement.Emoji.builder()
.name("snowboarder")
.build(),
RichTextSectionElement.Text.builder().text(" ").build(),
RichTextSectionElement.Emoji.builder()
.name("checkered_flag")
.build()))
.build())));
return block;
}
}
34 changes: 34 additions & 0 deletions block-kit/src/main/java/elements/FeedbackButtons.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
package elements;

import static com.slack.api.model.block.composition.BlockCompositions.plainText;

import com.slack.api.model.block.Blocks;
import com.slack.api.model.block.ContextActionsBlock;
import com.slack.api.model.block.composition.FeedbackButtonObject;
import com.slack.api.model.block.element.BlockElements;
import java.util.List;

/**
* Buttons to indicate positive or negative feedback.
* {@link https://docs.slack.dev/reference/block-kit/block-elements/feedback-buttons-element/}
*/
public class FeedbackButtons {
/**
* A context actions block with feedback buttons.
*/
public static ContextActionsBlock example01() {
ContextActionsBlock block =
Blocks.contextActions(List.of(BlockElements.feedbackButtons(fb -> fb.actionId("feedback_buttons_1")
.positiveButton(FeedbackButtonObject.builder()
.text(plainText("Good"))
.value("positive_feedback")
.accessibilityLabel("Mark this response as good")
.build())
.negativeButton(FeedbackButtonObject.builder()
.text(plainText("Bad"))
.value("negative_feedback")
.accessibilityLabel("Mark this response as bad")
.build()))));
return block;
}
}
32 changes: 32 additions & 0 deletions block-kit/src/main/java/elements/FileInput.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
package elements;

import static com.slack.api.model.block.composition.BlockCompositions.plainText;

import com.slack.api.model.block.Blocks;
import com.slack.api.model.block.element.BlockElements;
import com.slack.api.model.view.View;
import com.slack.api.model.view.Views;
import java.util.List;

/**
* Allows user to upload files.
* {@link https://docs.slack.dev/reference/block-kit/block-elements/file-input-element/}
*/
public class FileInput {
/**
* A modal view with a file input element hosted in an input block.
*/
public static View example01() {
View view = Views.view(v -> v.type("modal")
.title(Views.viewTitle(t -> t.type("plain_text").text("My App").emoji(true)))
.submit(Views.viewSubmit(
s -> s.type("plain_text").text("Submit").emoji(true)))
.close(Views.viewClose(c -> c.type("plain_text").text("Cancel").emoji(true)))
.blocks(List.of(Blocks.input(i -> i.blockId("input_block_id")
.label(plainText("Upload Files"))
.element(BlockElements.fileInput(f -> f.actionId("file_input_action_id_1")
.filetypes(List.of("jpg", "png"))
.maxFiles(5)))))));
return view;
}
}
Loading