Important: This documentation covers Yarn 1 (Classic).
For Yarn 2+ docs and migration guide, see yarnpkg.com.

Package detail

jsx-slack

yhatt42.2kMIT6.1.2TypeScript support: included

Build JSON object for Slack Block Kit surfaces from JSX

slack, block-kit, jsx, notification, bot, modal

readme


jsx-slack

CircleCI Codecov npm LICENSE

Build JSON object for Slack block kit surfaces from JSX.


:point_right: Try our REPL demo in https://jsx-slack.netlify.app/.

Features

See references to dive into jsx-slack deeply.

Motivation

When developing Slack-integrated app, continuous maintenance of the rich contents is a difficult task. A team member must read and write JSON with deep knowledge about specifications of payload for Slack API.

We believe JSX-based template well-known in front-end development would enhance a developer experience of Slack app.

Project goal

A project goal is creating an interface to compose contents for Slack with keeping code maintainability by using JSX.

jsx-slack would allow composing contents with simple and predictable HTML-like markup. It helps in understanding the structure of complex contents and interactions.

Install

Node.js

We require Node.js >= 14. If you are using TypeScript, we also require TS >= 3.7.

# npm
npm install --save jsx-slack
# yarn
yarn add jsx-slack

Now you can begin to write the code with jsxslack template literal tag. Furthermore, setting up JSX transpiler would make the best development experience.

Deno (Slack CLI)

We also have Deno support. If you are using Deno v1.28 and later, you can import jsx-slack through npm directly.

// `jsxslack` template literal tag
import { jsxslack } from 'npm:jsx-slack@6'
// JSX transpilation
/** @jsxImportSource npm:jsx-slack@6 */
import { Blocks, Section } from 'npm:jsx-slack@6'

Note Alternatively you also can import jsx-slack through esm.sh CDN: https://esm.sh/jsx-slack@6

Usage

Quick start: Template literal

Do you hate troublesome setting up for JSX? All right. We provide jsxslack tagged template literal to build blocks right out of the box.

It allows the template syntax almost same as JSX, powered by HTM (Hyperscript Tagged Markup). Setting for transpiler and importing built-in components are not required.

This is a simple example of the template function just to say hello to someone.

import { jsxslack } from 'jsx-slack'

export const exampleBlock = ({ name }) => jsxslack`
  <Blocks>
    <Section>
      Hello, <b>${name}</b>!
    </Section>
  </Blocks>
`

JSX Transpiler

When you want to use jsx-slack with JSX transpiler, you have to set up to use our runtime for JSX.

▶︎ How to setup JSX transpiler (Babel / TypeScript / Deno)

/** @jsxImportSource jsx-slack */
import { Blocks, Section } from 'jsx-slack'

export const exampleBlock = ({ name }) => (
  <Blocks>
    <Section>
      Hello, <b>{name}</b>!
    </Section>
  </Blocks>
)

Use template in Slack API

After than, just use created template in Slack API. We are using the official Node SDK @slack/web-api in this example. See also Slack guide.

import { WebClient } from '@slack/web-api'
import { exampleBlock } from './example.jsx'

const web = new WebClient(process.env.SLACK_TOKEN)

web.chat
  .postMessage({
    channel: 'C1234567890',
    blocks: exampleBlock({ name: 'Yuki Hattori' }),
  })
  .then((res) => console.log('Message sent: ', res.ts))
  .catch(console.error)

It would post a simple Slack message like this:

Block Kit as components

Slack has recommended to use Block Kit for building tempting messages and modals.

By using jsx-slack, you can build a template with piling up Block Kit blocks by JSX. It is feeling like using components in React or Vue.

For messaging

<Blocks>
  <Section>
    <p>Enjoy building blocks!</p>
    <blockquote>
      <b>
        <a href="https://github.com/yhatt/jsx-slack">jsx-slack</a>
      </b>
      <br />
      <i>Build JSON for Slack Block Kit from JSX</i>
    </blockquote>
    <img src="https://github.com/yhatt.png" alt="yhatt" />
  </Section>
  <Context>
    Maintained by <a href="https://github.com/yhatt">Yuki Hattori</a>
    <img src="https://github.com/yhatt.png" alt="yhatt" />
  </Context>
  <Divider />
  <Actions>
    <Button url="https://github.com/yhatt/jsx-slack">GitHub</Button>
    <Button url="https://npm.im/jsx-slack">npm</Button>
  </Actions>
</Blocks>

For modal

<Modal title="My first modal" close="Cancel">
  <Section>
    <p>
      <strong>It's my first modal!</strong> :sunglasses:
    </p>
    <p>jsx-slack also has supported Slack Modals.</p>
  </Section>
  <Divider />

  <Input type="text" name="subject" label="Subject" required />
  <Textarea name="message" label="Message" maxLength={500} />

  <ConversationsSelect
    name="shareWith"
    label="Share with..."
    required
    include={['public', 'im']}
    excludeBotUsers
    responseUrlEnabled
  />

  <Input type="hidden" name="postId" value="xxxx" />
  <Input type="submit" value="Send" />
</Modal>

For home tab

<Home>
  <Image src="https://source.unsplash.com/random/960x240?home" alt="home" />
  <Header>Welcome back to my home! :house_with_garden:</Header>
  <Divider />
  <Section>What's next?</Section>
  <Actions>
    <RadioButtonGroup actionId="next">
      <RadioButton value="tickets" checked>
        <b>See assigned tickets</b> :ticket:
        <small>
          <i>Check your tickets to start your work.</i>
        </small>
      </RadioButton>
      <RadioButton value="reminder">
        <b>Remind a task later</b> :memo:
        <small>
          <i>I'll remember a task for you.</i>
        </small>
      </RadioButton>
      <RadioButton value="pomodoro">
        <b>Start pomodoro timer</b> :tomato:
        <small>
          <i>Get focused on your time, with tomato!</i>
        </small>
      </RadioButton>
    </RadioButtonGroup>
    <Button actionId="start" style="primary">
      Start working
    </Button>
  </Actions>
</Home>

References

Examples by use cases

Ported from templates for Block Kit Builder.

Message

App Home

Fragments

As like as React, jsx-slack provides <Fragment> (<JSXSlack.Fragment>) component for higher-order component (HOC) consited of multiple blocks or elements.

For example, you can define the custom block by grouping some blocks with <Fragment> if you were using JSX transpiler.

Let's say about defining <Heading> custom block that is consisted by <Section> and <Divider>.

import { Fragment, Section, Divider } from 'jsx-slack'

const Heading = ({ children }) => (
  <Fragment>
    <Section>
      <b>{children}</b>
    </Section>
    <Divider />
  </Fragment>
)

Now the defined block can use in <Blocks> as like as the other blocks:

<Blocks>
  <Heading>
    <i>jsx-slack custom block</i> :sunglasses:
  </Heading>
  <Section>Let's build your block.</Section>
</Blocks>

Short syntax for fragments

Babel transpiler and TypeScript 4 can use the short syntax <></> for fragments. See how to setup JSX transpiler.

import { Section, Divider } from 'jsx-slack'

const Heading = ({ children }) => (
  <>
    <Section>
      <b>{children}</b>
    </Section>
    <Divider />
  </>
)

In the case of template literal tag

jsxslack template literal tag has built-in fragments support so <Fragment> does not have to use.

// Heading.js
import { jsxslack } from 'jsx-slack'

export const Heading = ({ children }) => jsxslack`
  <Section>
    <b>${children}</b>
  </Section>
  <Divider />
`

A defined component may use in jsxslack tag as below:

import { jsxslack } from 'jsx-slack'
import { Heading } from './Heading'

console.log(jsxslack`
  <Blocks>
    <${Heading}>
      <i>jsx-slack custom block</i> :sunglasses:
    <//>
    <Section>Let's build your block.</Section>
  </Blocks>
`)

Please notice to a usage of component that has a bit different syntax from JSX.

Frequently questions

Is jsx-slack the state of production-ready?

Of course! In our workspace, we are developing Slack custom app for internal with providing great UX powered by jsx-slack. And some apps published in Slack app directory are also using jsx-slack in production.

Do you have an app with jsx-slack in public? Please let us know your great app!

Can I develop Slack app only using jsx-slack?

No. jsx-slack just generates JSON for Slack API. You have to send generated message and control interaction with Slack by yourself.

Don't worry; you can use jsx-slack together with helpful libraries: Bolt framework for JavaScript (recommended), Slack Node SDK, and third-party library (e.g. BotKit, Bottender).

Is this working based on React?

No, jsx-slack has very similar API to React but is not based on React, because our library doesn't need to use some features provided by React: incremental updates, event handling, reference to the rendered JSON, and component class.

Nevertheless, jsx-slack can use React's methodology (composition of components) through JSX and the basic JavaScript function. In addition, we can follow up rapidly-evolving Slack Block Kit by keeping the smallest requirements without depending on React.

FYI there are some projects based on React (react-reconciler) to generate or manage Slack interactions: phelia framework, react-chat-renderer (< v0.1.0), and rebot. You should use them if you want to use React ecosystem.

How do you spell this library?

"jsx-slack" with all in lowercase. It is neither of "JSX-Slack" nor "JSX Slack".

Similar projects

  • phelia - :zap: A reactive Slack application framework.
  • react-chat-renderer - React renderer implementation for building rich Slack messages using JSX
  • slack-blockx - jsx for Slack block-kit

Author

  • @yhatt Yuki Hattori (@yhatt) - Maintainer

License

MIT License

changelog

Change Log

[Unreleased]

v6.1.2 - 2024-10-31

Fixed

  • JSXSlackTemplateTag type now accepts pure readonly string array (#312)
  • Fix JSXSlack.Children.toArray to make flatten children correctly even if caused dual import of <Fragment> (#319, #320)

Changed

  • Upgrade Node.js and dependent packages (#313)

v6.1.1 - 2023-12-14

Fixed

v6.1.0 - 2023-12-14

Added

Changed

  • Upgrade Node.js and dependent packages (#303)

Fixed

  • Avoid using node_modules directory for pre-bundled external modules in ESM output (#308 by @nihalgonsalves)

Removed

  • Test against Node.js 14 (#303)

v6.0.0 - 2023-02-22

Breaking

  • URLs in <a> tags have no longer been encoded by encodeURI() implicitly, excluding some characters that have conflicted with Slack's mrkdwn format (#288, #289 by @nholden)

For keeping to get the compatible output with v5, wrap the value of href attribute with encodeURI() explicitly.

 <Mrkdwn>
-  <a href={'https://example.com/?regex=<([^/]+?)>'}>Link</a>
+  <a href={encodeURI('https://example.com/?regex=<([^/]+?)>')}>Link</a>
 </Mrkdwn>

Changed

Removed

  • Removed deprecated types: VoidFunctionComponent, VFC, JSXSlack.FunctionalComponent, JSXSlack.VoidFunctionalComponent, and JSXSlack.Props (#293)

v5.3.1 - 2023-02-19

Fixed

  • Define types field of conditional exports (#290 by @odanado)

Changed

  • Upgrade Node.js and dependent packages (#291)

v5.3.0 - 2022-12-11

Added

  • Add description prop support to <Option> component (#284, #285)

v5.2.1 - 2022-11-23

Fixed

  • Improve compatibility with npm support for Deno (#283)

v5.2.0 - 2022-10-29

Added

Changed

  • Upgrade dependent packages to the latest version (#281)

v5.1.0 - 2022-07-16

Added

Fixed

  • Make stable documentation anchor links (#274)

v5.0.0 - 2022-06-19

Breaking

  • Dropped EoL Node.js 12 support (#271)
  • Removed implicit children prop from FunctionComponent to make compatible types with React 18 (Use PropsWithChildren<P> to include children prop) (#270)

    -JSXSlack.FunctionComponent<P>
    +JSXSlack.FunctionComponent<JSXSlack.PropsWithChildren<P>>
    -JSXSlack.FunctionComponent
    +JSXSlack.FunctionComponent<JSXSlack.PropsWithChildren<{}>>

Deprecated

  • VoidFunctionComponent, VFC, FunctionalComponent, VoidFunctionalComponent, and Props type (#270)

    | Depreacted | Replace to | | :-----------------------------: | :------------------------: | | VoidFunctionComponent / VFC | FunctionComponent / FC | | FunctionalComponent | FunctionComponent / FC | | VoidFunctionalComponent | FunctionComponent / FC | | Props<P> | P |

Changed

  • Upgrade Node and dependent packages to the latest version (#271)

v4.6.1 - 2022-03-28

Fixed

  • Export Fragment in JSX runtime to match to React's runtime (#267, #269)

Changed

  • Upgrade development Node and dependent packages to the latest version (#268)

v4.6.0 - 2022-02-01

Added

  • accessibilityLabel / aria-label prop for <Button> component (#262, #265)

Changed

  • Upgrade dependent packages to the latest version (#263)
  • Make build size of JSX runtime smaller (#264)

v4.5.4 - 2022-01-02

Fixed

  • Fix esm.sh resolution error by adding JSX runtimes with .mjs extension (#260)

v4.5.3 - 2021-12-28

Fixed

  • Fix TypeError while rendering lists and hyperlinks with JSX runtime (#258, #259)

v4.5.2 - 2021-12-18

Added

  • Add documentation of Deno import maps (#257)

Security

  • CVE-2021-43843: Prevent catastrophic backtracking in blockquote escape replacers (GHSA-hp68-xhvj-x6j6)

v4.5.1 - 2021-12-17

Security

v4.5.0 - 2021-12-02

Added

  • autoFocus prop for supported interactive elements (#253, #254)
  • Guide for setting up jsx-slack in Deno (Slack CLI) and esbuild (#245, #252)

Changed

  • Upgrade dependent packages to the latest version (#255)

v4.4.3 - 2021-11-18

Fixed

  • Fix Deno's type error by adding manual type assertion for <Blocks> (#245, #251)

v4.4.2 - 2021-11-17

Fixed

  • Fix internal type of <Blocks> for making better type support for ESM CDN (#245, #250)

v4.4.1 - 2021-11-17

Fixed

  • Avoid using namespace alias and use isomorphic namespace in JSX runtime (#249)

v4.4.0 - 2021-11-17

Removed

  • Direct dependencies to hast-util-to-mdast and he (#247)

Changed

  • Upgrade development Node version to v16 LTS (#246)
  • Upgrade dependent packages to the latest version (#246)
  • Setup esbuild transpile and prebundling (#247)

v4.3.0 - 2021-06-25

Added

Fixed

  • Broken JSDoc links in some IDEs (#235)

Changed

  • Upgrade dependent packages to the latest version (#236)

v4.2.1 - 2021-06-18

Fixed

  • Fixed resolution error when using JSX runtime script through ES modules (#231, #232)

v4.2.0 - 2021-06-16

Added

  • ES modules support (#227)
  • CI test against Node 16 (#228)

Changed

  • Upgrade Node and dependent packages to the latest version (#228)
  • Rename master branch to main (#229)

v4.1.0 - 2021-06-14

Added

  • Added type exports that are similar to @types/react (#226)
    • FunctionCompnent / FC (Alias to same types in JSXSlack namespace)
    • VoidFunctionComponent / VFC (Alias to same types in JSXSlack namespace)
    • Node (Similar to ReactNode but for jsx-slack. Alias to JSXSlack.ChildElements)

Changed

  • Upgrade dependent packages to the latest version (#225)

v4.0.0 - 2021-04-25

Breaking

  • Dropped Node 10 support (#219)

Changed

  • Allow containing <Input> and input components in <Blocks> (#218, #220)
  • Upgrade dependent packages to the latest version (#219)

Removed

  • Remove deprecated jsxslack.raw (#221)

v3.0.0 - 2021-02-25

Breaking

The package name has renamed from @speee-js/jsx-slack to jsx-slack.

Added

  • JSX automatic runtime support for TypeScript 4.1 (#214, #194)

Changed

v2.6.0 - 2020-10-20

Added

Fixed

  • Escaped underscores within Korean emoji shorthand have broken (#203, #206)

Changed

  • Upgrade dependent packages to the latest version (#208)

v2.5.1 - 2020-10-08

Added

Fixed

  • Update demo schema for dispatchAction prop (#201)

v2.5.0 - 2020-10-07

Changed

  • <Input> and input components are available in home tab container <Home> (#195, #200)
  • Allow using <RadioButtonGroup> and <CheckboxGroup> in message container <Blocks> (#196, #197)
  • Upgrade dependent packages to the latest version (#191, #198)

Added

v2.4.0 - 2020-07-30

Added

Fixed

  • Fix typos in how-to-setup-jsx-transpiler.md (#183 by @mashabow)

v2.3.0 - 2020-07-22

Added

Changed

  • datetime prop for <time> is now aliasing into added camelCased prop (#179, #182)
  • Upgrade dependent packages to the latest version (#178)

v2.2.1 - 2020-07-17

Fixed

  • Fix wrong extension for the path of type definition: .js -> .d.ts (#171)
  • Update how to generate Block Kit Builder URL in demo page (#168, #172)

Changed

  • Upgrade Node and dependent packages to the latest version (#175)

v2.2.0 - 2020-05-21

Added

Changed

  • Upgrade dependent packages to the latest version (#166)

v2.1.0 - 2020-05-01

Added

Changed

  • Upgrade Node and dependent packages to the latest version (#158)
  • Refactor special link detection (#159)
  • Update demo REPL (#157)
    • Move template examples on README into REPL demo
    • Use Web fonts to get better rendering
    • Disable preview button if Slack may return 414 error due to too long URL

v2.0.0 - 2020-04-23

jsx-slack v2 has improved JSX structure and built-in components to output the real JSON from JSX!

▶︎ See highlight of v2 updates

Breaking

  • Checked states defined in <CheckboxGroup values> and <Checkbox checked> do no longer merge

  • Breaking for TypeScript

    • Require TypeScript >= 3.7 when using jsx-slack through TypeScript
    • Container components have strict type checking for its children
    • Exported type JSXSlack.Child and JSXSlack.Children have been renamed into JSXSlack.ChildElement and JSXSlack.ChildElements and no longer provided generics

Changed

  • Fully rewrote JSX structure to render from JSX to JSON directly (#128)
  • All built-in components can render the partial JSON of Block Kit
  • <Home> container now accepts <Input type="hidden" /> and custom transformer to store private metadata
  • value prop for <Option> has made optional to follow HTML specification
  • confirm prop for interactive block elements accepts the raw confirm composition object
  • <a> tag renders short syntax for hyperlink if possible
  • Throws error with more helpful message and stacktrace when there is invalid JSX structure (#143)
  • Bundle modules through rollup (#144)

Added

  • React-compatible public APIs: JSXSlack.createElement, JSXSlack.isValidElement, and JSXSlack.Children helpers
  • HTML-compatible <Option selected> and <RadioButton checked>
  • value prop as an alias into initialXXX prop in some interactive components
  • Added JSDoc to many public APIs and components
  • Support new JSX transpile via automatic runtime in Babel >= 7.9 (experimental) (#142)
  • REPL demo now generates the permalink to specific JSX (#149)
  • Dark mode for REPL demo (#150)
  • New logo and logo type (#152)

Fixed

  • Suggest string literals on IDE when typing the kind of conversation in <ConversationsSelect include> (#145)
  • Fix typo in README.md (#146 by @BLNCinema)

Removed

  • Deprecated features in v1: JSXSlack.legacyParser() and jsxslack.fragment

Deprecated

  • jsxslack.raw template literal tag (It has become just an alias to jsxslack in v2)

v1.7.0 - 2020-04-07

Added

  • style prop for <Confirm> composition object component (#114, #139)
  • <Button> inherits its style to assigned confirm composition object if <Confirm> has not defined style (#139)

Changed

  • All props of <Confirm> component have made optional (#138, #139)
  • Upgrade dependent packages to the latest version (#137, #140)

v1.6.0 - 2020-03-20

Added

  • responseUrlEnabled property for modal's input component to <ConversationsSelect> and <ChannelsSelect> (#134, #135)
  • Experimental filter properties to <ConversationsSelect>: include, excludeExternalSharedChannels, and excludeBotUsers (#133, #136)

v1.5.1 - 2020-03-16

Added

  • value attribute for <li> element (#130)

Fixed

  • Fix mention detection to match to longer Slack ID (#129)

Changed

  • Upgrade deep dependencies (#131)

v1.5.0 - 2020-03-12

Changed

  • Improve escaping special characters to keep original character as possible (#124, #125)
  • Make JSX element for passing to Slack API serializable to JSON directly (#126)
  • jsxslack template literal tag now returns raw JSX element, or JSON if serializable (#127)

Added

  • jsxslack.raw template literal tag to generate JSX element always (#127)

Deprecated

  • Confusable jsxslack.fragment template literal tag has deprecated (Use jsxslack or jsxslack.raw instead) (#127)

v1.4.0 - 2020-03-06

Added

  • Support type attribute for <ol> element (#117)

Changed

  • Allow text formatting through mrkdwn and HTML-like elements in <RadioButton> (#119, #122)
  • Change spaces for indenting lists into unicode spaces that were based on measured width in Slack's font (#117)
  • Upgrade development Node and dependent packages to the latest version (#123)

Fixed

  • Prevent over-escaping for link and time formatting (#118, #120)

Deprecated

  • Mark the legacy parser as deprecated (#121)

v1.3.1 - 2020-02-14

Fixed

  • Fix regression about not rendered special spaces around the content (#113)

v1.3.0 - 2020-02-14

Changed

Added

v1.2.0 - 2020-02-10

Added

Changed

  • Upgrade dependent packages to the latest version (#107)
  • Upgrade development Node to 12.15.0

v1.1.0 - 2020-01-20

Added

Changed

  • Mark <Home> container as stable (#105)

v1.0.0 - 2020-01-10

Breaking

Added

Fixed

  • Prevent over-escaping in valid emoji shorthand (#98, #101)

Changed

  • Upgrade dependent packages to the latest version (#92, #104)
  • Upgrade development Node to 12.14.1 (#104)

Removed

  • Remove deprecated dialog support (#84, #99)
  • Get rid of lodash.flattendeep dependency (#102)

v0.12.0 - 2019-11-22

Added

  • Radio buttons for modal (#88, #91)
    • <RadioButtonGroup> now can use in <Modal> container and acts as input component for modal

Changed

  • Upgrade dependent packages to the latest version (#90)

v0.11.1 - 2019-11-13

Fixed

  • Don't throw error even if <Overflow> has only one <OverflowItem> (#85, #86)
  • Fix 413 error from Block Kit Builder when translated huge JSON on REPL demo (#82)
  • Improve internal type definitions for overloaded props (#83)

Changed

  • Upgrade dependent packages to the latest version (#87)

v0.11.0 - 2019-10-24

Added

Changed

  • Upgrade Node for development to v12 LTS (#79)

Fixed

  • Throw an error when using <File> in <Modal> (#76)
  • REPL demo can transfer the complete modal JSON to Block Kit Builder (#77)

Deprecated

  • Output warning about deprecated dialog components (#72)

v0.10.2 - 2019-10-11

Fixed

  • Make interpolated fragments in template literal work correctly (#71)

v0.10.1 - 2019-10-10

Fixed

  • Fix invalid array children in template literal (#69)

Changed

  • Upgrade Node and dependent packages to the latest version (#70)

v0.10.0 - 2019-10-02

Added

  • Multi-select menus (#56, #58)
  • Modals support (#57)
    • <Modal> container component (#60)
    • <Input> layout block and component (#61)
    • <Textarea> component (#62)
    • Input-compatible props to select-like elements and <DatePicker> (#63)
    • Intrinsic HTML elements of input components (#65)
    • Add extra types for <Input> component (#66)
    • Update REPL demo to support Modals (#68)

Changed

  • Bump dependent packages to the latest version (#59)
  • Check invalid elements in <Blocks> and <Input> strictly (#64)
  • Split test cases for Block Kit components into multiple files (#66)
  • Organize documentation (#20, #67)

Deprecated

  • Mark <Dialog> as soft-deprecated in favor of Slack Modals (#60)

v0.9.2 - 2019-08-29

Fixed

  • Nested fragments fail (#53, #54)

Changed

  • Update dependent packages to the latest version (#52)

v0.9.1 - 2019-08-15

Fixed

  • Fix regression of not preserved <pre> whitespaces (#48, #49)

Changed

  • Update dependent packages to the latest version (#50)

v0.9.0 - 2019-08-15

Breaking

  • Disabled heuristic detection for HTML entities (Escaping works just as same as React JSX) (#33)
  • Some raw characters for mrkdwn link, <, >, and & will always escape to entities (#45)

Changed

  • Improve html entity decoding in JSX and template literal tag (#33, #45, #47)
  • Allow links in the inside of <code> and <pre> element (#16, #46)

v0.8.1 - 2019-08-07

Added

  • Better dialog support for jsxslack template literal (#42, #43)
  • Update REPL demo to add dialog example (#43)

Fixed

  • Coerce number-expected prop to integer (#44)

v0.8.0 - 2019-08-06

Added

Fixed

  • Don't prevent generating <SelectFragment> with no options (#41)

Changed

v0.7.0 - 2019-07-29

Added

  • <File> block component (#34, #35)
  • jsxslack.fragment template literal tag (#32)
  • Codecov integration and coverage badge (#36)

Changed

  • Update dependent packages to the latest version (#37)

v0.6.0 - 2019-07-20

Added

  • Convert <span> in <Context> into mrkdwn element (#26, #31)
  • <Fragment> built-in component (#29)

v0.5.1 - 2019-07-14

Added

  • Support mention to global user ID for Enterprise Grid (#25)

Changed

  • Update dependent packages to the latest version (#28)

v0.5.0 - 2019-06-28

Added

  • Support Node.js 12 (#23)

Changed

  • Make interchangeable with <Image> component and intrinsic <img> tag (#21)
  • Upgrade dependent packages to the latest version (#24)

Removed

  • Remove deprecated <Block> component (#22)

v0.4.3 - 2019-05-15

Fixed

  • Fix vanishing styled channel links and mentions (#15, #17)

Changed

  • Upgrade dependent packages to the latest version (#18)

v0.4.2 - 2019-04-13

Added

  • Add style prop for <Button> component (#13, #14)

v0.4.1 - 2019-03-13

Added

  • <Blocks> container component (#12)

Deprecated

  • Mark a confusable <Block> fragment component as deprecated in favor of added <Blocks> (#11, #12)

v0.4.0 - 2019-03-12

Added

  • Support nested list (#10)

v0.3.0 - 2019-03-11

Added

  • Add <SelectFragment> component (#9)

Changed

  • Right-aligned number in ordered list (#8)

v0.2.0 - 2019-03-07

Added

  • jsxslack template literal tag for using jsx-slack without transpiler, powered by htm (#6, #7)

Fixed

  • Improve README.md with some minor fixes (#4)
  • Revert ignored audit (#5)

v0.1.0 - 2019-03-01

  • Initial release.