flipbook
flipbook copied to clipboard
[WIP] Allow flipbook to be required as a Wally package
The idea is all of our storybook and story-related functionality and types to be exposed off of a public API that creators could import via Wally.
One of the primary benefits would be to allow type-checking within storybook and story files. For example:
-- Foo.storybook.lua
local flipbook = require(Path.To.Packages.flipbook)
local storybook: flipbook.Storybook = {
storyRoots = true -- analysis error
}
return storybook
-- Bar.story.lua
local flipbook = require(Path.To.Packages.flipbook)
local story: flipbook.Story = {
-- TODO: show analysis error
}
return story
Proposed API
Types
export type Controls = {
[string]: string | number | boolean,
}
export type StoryProps = {
controls: Controls,
}
export type Storybook = {
storyRoots: { Instance },
name: string?,
roact: Roact?,
react: React?,
reactRoblox: ReactRoblox?,
}
export type StoryMeta = {
name: string,
summary: string?,
controls: Controls?,
roact: Roact?,
react: React?,
reactRoblox: ReactRoblox?,
}
export type RoactStory = StoryMeta & {
story: RoactElement | (props: StoryProps) -> RoactElement,
roact: Roact,
}
export type ReactStory = StoryMeta & {
story: ReactElement | (props: StoryProps) -> ReactElement,
react: React,
reactRoblox: ReactRoblox,
}
export type FunctionalStory = StoryMeta & {
story: (target: GuiObject, props: StoryProps) -> (() -> ())?,
}
export type Story = FunctionalStory | RoactStory | ReactStory
Functions
isStoryModule(instance: Instance): boolean
isStorybookModule(instance Instance boolean
useStorybooks(): { Storybook }