From 8196ea64e3604b8d230f1e799a29b8b2fb9169df Mon Sep 17 00:00:00 2001 From: Eden Zimbelman Date: Fri, 26 Jun 2026 17:08:54 -0700 Subject: [PATCH 1/4] feat(block-kit): add context actions block example Add a Context Actions block example mirroring the official Block Kit docs, demonstrating feedback buttons (example01) and an icon button (example02), with a matching deep-equality test and README entry. Co-Authored-By: Claude --- block-kit/README.md | 1 + .../src/main/java/blocks/ContextActions.java | 43 ++++++++++++ .../test/java/blocks/ContextActionsTest.java | 66 +++++++++++++++++++ 3 files changed, 110 insertions(+) create mode 100644 block-kit/src/main/java/blocks/ContextActions.java create mode 100644 block-kit/src/test/java/blocks/ContextActionsTest.java diff --git a/block-kit/README.md b/block-kit/README.md index 3cd3768..7da7bd5 100644 --- a/block-kit/README.md +++ b/block-kit/README.md @@ -10,6 +10,7 @@ Read the [docs](https://docs.slack.dev/block-kit/) to learn concepts behind thes - **[Actions](https://docs.slack.dev/reference/block-kit/blocks/actions-block)**: Holds multiple interactive elements. [Implementation](./src/main/java/blocks/Actions.java). - **[Context](https://docs.slack.dev/reference/block-kit/blocks/context-block)**: Provides contextual info, which can include both images and text. [Implementation](./src/main/java/blocks/Context.java). +- **[Context actions](https://docs.slack.dev/reference/block-kit/blocks/context-actions-block)**: Displays interactive elements at the message level. [Implementation](./src/main/java/blocks/ContextActions.java). - **[Divider](https://docs.slack.dev/reference/block-kit/blocks/divider-block)**: Visually separates pieces of info inside of a message. [Implementation](./src/main/java/blocks/Divider.java). - **[File](https://docs.slack.dev/reference/block-kit/blocks/file-block)**: Displays info about remote files. [Implementation](./src/main/java/blocks/File.java). - **[Header](https://docs.slack.dev/reference/block-kit/blocks/header-block)**: Displays a larger-sized text. [Implementation](./src/main/java/blocks/Header.java). diff --git a/block-kit/src/main/java/blocks/ContextActions.java b/block-kit/src/main/java/blocks/ContextActions.java new file mode 100644 index 0000000..84001e6 --- /dev/null +++ b/block-kit/src/main/java/blocks/ContextActions.java @@ -0,0 +1,43 @@ +package blocks; + +import com.slack.api.model.block.Blocks; +import com.slack.api.model.block.ContextActionsBlock; +import com.slack.api.model.block.composition.BlockCompositions; +import com.slack.api.model.block.composition.FeedbackButtonObject; +import com.slack.api.model.block.element.BlockElements; +import java.util.List; + +/** + * Displays interactive elements at the message level. + * {@link https://docs.slack.dev/reference/block-kit/blocks/context-actions-block/} + */ +public class ContextActions { + /** + * A context actions block with feedback buttons. + */ + public static ContextActionsBlock example01() { + ContextActionsBlock block = Blocks.contextActions( + c -> c.elements(List.of(BlockElements.feedbackButtons(f -> f.actionId("feedback_buttons_1") + .positiveButton(FeedbackButtonObject.builder() + .text(BlockCompositions.plainText("👍")) + .value("positive_feedback") + .build()) + .negativeButton(FeedbackButtonObject.builder() + .text(BlockCompositions.plainText("👎")) + .value("negative_feedback") + .build()))))); + return block; + } + + /** + * A context actions block with an icon button. + */ + public static ContextActionsBlock example02() { + ContextActionsBlock block = + Blocks.contextActions(c -> c.elements(List.of(BlockElements.iconButton(i -> i.icon("trash") + .text(BlockCompositions.plainText("Delete")) + .actionId("delete_button_1") + .value("delete_item"))))); + return block; + } +} diff --git a/block-kit/src/test/java/blocks/ContextActionsTest.java b/block-kit/src/test/java/blocks/ContextActionsTest.java new file mode 100644 index 0000000..8a723eb --- /dev/null +++ b/block-kit/src/test/java/blocks/ContextActionsTest.java @@ -0,0 +1,66 @@ +package blocks; + +import static org.junit.jupiter.api.Assertions.assertEquals; + +import com.google.gson.JsonParser; +import com.slack.api.model.block.ContextActionsBlock; +import com.slack.api.util.json.GsonFactory; +import org.junit.jupiter.api.Test; + +public class ContextActionsTest { + @Test + public void testExample01() { + ContextActionsBlock block = ContextActions.example01(); + String actual = GsonFactory.createSnakeCase().toJson(block); + String expected = """ + { + "type": "context_actions", + "elements": [ + { + "type": "feedback_buttons", + "action_id": "feedback_buttons_1", + "positive_button": { + "text": { + "type": "plain_text", + "text": "👍" + }, + "value": "positive_feedback" + }, + "negative_button": { + "text": { + "type": "plain_text", + "text": "👎" + }, + "value": "negative_feedback" + } + } + ] + } + """; + assertEquals(JsonParser.parseString(expected), JsonParser.parseString(actual)); + } + + @Test + public void testExample02() { + ContextActionsBlock block = ContextActions.example02(); + String actual = GsonFactory.createSnakeCase().toJson(block); + String expected = """ + { + "type": "context_actions", + "elements": [ + { + "type": "icon_button", + "icon": "trash", + "text": { + "type": "plain_text", + "text": "Delete" + }, + "action_id": "delete_button_1", + "value": "delete_item" + } + ] + } + """; + assertEquals(JsonParser.parseString(expected), JsonParser.parseString(actual)); + } +} From d6a77bd341b808186031bdd47b7b294cedc4000b Mon Sep 17 00:00:00 2001 From: Eden Zimbelman Date: Wed, 4 Nov 2026 18:04:33 -0800 Subject: [PATCH 2/4] fix: sync context actions example with docs Match the docs block summary and example descriptions, and apply the current spotless formatting. Co-Authored-By: Claude Co-Authored-By: Claude Opus 5.5 (1M context) --- block-kit/README.md | 2 +- block-kit/src/main/java/blocks/ContextActions.java | 10 +++++----- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/block-kit/README.md b/block-kit/README.md index df68824..cdb4f22 100644 --- a/block-kit/README.md +++ b/block-kit/README.md @@ -14,7 +14,7 @@ Read the [docs](https://docs.slack.dev/block-kit/) to learn concepts behind thes - **[Carousel](https://docs.slack.dev/reference/block-kit/blocks/carousel-block)**: Displays related card blocks in a horizontally-scrolling container. [Implementation](./src/main/java/blocks/Carousel.java). - **[Card](https://docs.slack.dev/reference/block-kit/blocks/card-block)**: Displays content in a card. [Implementation](./src/main/java/blocks/Card.java). - **[Context](https://docs.slack.dev/reference/block-kit/blocks/context-block)**: Provides contextual info, which can include both images and text. [Implementation](./src/main/java/blocks/Context.java). -- **[Context actions](https://docs.slack.dev/reference/block-kit/blocks/context-actions-block)**: Displays interactive elements at the message level. [Implementation](./src/main/java/blocks/ContextActions.java). +- **[Context actions](https://docs.slack.dev/reference/block-kit/blocks/context-actions-block)**: Displays actions as contextual info, which can include both feedback buttons and icon buttons. [Implementation](./src/main/java/blocks/ContextActions.java). - **[Divider](https://docs.slack.dev/reference/block-kit/blocks/divider-block)**: Visually separates pieces of info inside of a message. [Implementation](./src/main/java/blocks/Divider.java). - **[File](https://docs.slack.dev/reference/block-kit/blocks/file-block)**: Displays info about remote files. [Implementation](./src/main/java/blocks/File.java). - **[Header](https://docs.slack.dev/reference/block-kit/blocks/header-block)**: Displays a larger-sized text. [Implementation](./src/main/java/blocks/Header.java). diff --git a/block-kit/src/main/java/blocks/ContextActions.java b/block-kit/src/main/java/blocks/ContextActions.java index 84001e6..679a1f0 100644 --- a/block-kit/src/main/java/blocks/ContextActions.java +++ b/block-kit/src/main/java/blocks/ContextActions.java @@ -8,16 +8,16 @@ import java.util.List; /** - * Displays interactive elements at the message level. + * Holds interactive elements like feedback buttons and icon buttons. * {@link https://docs.slack.dev/reference/block-kit/blocks/context-actions-block/} */ public class ContextActions { /** - * A context actions block with feedback buttons. + * Context actions block with feedback buttons. */ public static ContextActionsBlock example01() { - ContextActionsBlock block = Blocks.contextActions( - c -> c.elements(List.of(BlockElements.feedbackButtons(f -> f.actionId("feedback_buttons_1") + ContextActionsBlock block = Blocks.contextActions(c -> + c.elements(List.of(BlockElements.feedbackButtons(f -> f.actionId("feedback_buttons_1") .positiveButton(FeedbackButtonObject.builder() .text(BlockCompositions.plainText("👍")) .value("positive_feedback") @@ -30,7 +30,7 @@ public static ContextActionsBlock example01() { } /** - * A context actions block with an icon button. + * Context actions block with an icon button. */ public static ContextActionsBlock example02() { ContextActionsBlock block = From 9a19964202d44826e8cba3ec1494f565fffbed70 Mon Sep 17 00:00:00 2001 From: Eden Zimbelman Date: Wed, 4 Nov 2026 19:46:04 -0800 Subject: [PATCH 3/4] docs: match the context actions description to the docs Co-Authored-By: Claude Co-Authored-By: Claude Opus 5.5 (1M context) --- block-kit/src/main/java/blocks/ContextActions.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/block-kit/src/main/java/blocks/ContextActions.java b/block-kit/src/main/java/blocks/ContextActions.java index 679a1f0..67a5532 100644 --- a/block-kit/src/main/java/blocks/ContextActions.java +++ b/block-kit/src/main/java/blocks/ContextActions.java @@ -8,7 +8,7 @@ import java.util.List; /** - * Holds interactive elements like feedback buttons and icon buttons. + * Displays actions as contextual info, which can include both feedback buttons and icon buttons. * {@link https://docs.slack.dev/reference/block-kit/blocks/context-actions-block/} */ public class ContextActions { From 66902e925396d49f7949503d3613cf724608b166 Mon Sep 17 00:00:00 2001 From: Eden Zimbelman Date: Thu, 5 Nov 2026 11:41:24 -0800 Subject: [PATCH 4/4] docs: list context actions before context to match the docs sidebar --- block-kit/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/block-kit/README.md b/block-kit/README.md index cdb4f22..bcb125c 100644 --- a/block-kit/README.md +++ b/block-kit/README.md @@ -13,8 +13,8 @@ Read the [docs](https://docs.slack.dev/block-kit/) to learn concepts behind thes - **[Container](https://docs.slack.dev/reference/block-kit/blocks/container-block)**: A general-purpose wrapper for grouping child blocks together, with a configurable size. [Implementation](./src/main/java/blocks/Container.java). - **[Carousel](https://docs.slack.dev/reference/block-kit/blocks/carousel-block)**: Displays related card blocks in a horizontally-scrolling container. [Implementation](./src/main/java/blocks/Carousel.java). - **[Card](https://docs.slack.dev/reference/block-kit/blocks/card-block)**: Displays content in a card. [Implementation](./src/main/java/blocks/Card.java). -- **[Context](https://docs.slack.dev/reference/block-kit/blocks/context-block)**: Provides contextual info, which can include both images and text. [Implementation](./src/main/java/blocks/Context.java). - **[Context actions](https://docs.slack.dev/reference/block-kit/blocks/context-actions-block)**: Displays actions as contextual info, which can include both feedback buttons and icon buttons. [Implementation](./src/main/java/blocks/ContextActions.java). +- **[Context](https://docs.slack.dev/reference/block-kit/blocks/context-block)**: Provides contextual info, which can include both images and text. [Implementation](./src/main/java/blocks/Context.java). - **[Divider](https://docs.slack.dev/reference/block-kit/blocks/divider-block)**: Visually separates pieces of info inside of a message. [Implementation](./src/main/java/blocks/Divider.java). - **[File](https://docs.slack.dev/reference/block-kit/blocks/file-block)**: Displays info about remote files. [Implementation](./src/main/java/blocks/File.java). - **[Header](https://docs.slack.dev/reference/block-kit/blocks/header-block)**: Displays a larger-sized text. [Implementation](./src/main/java/blocks/Header.java).