Git Product home page Git Product logo

presa's Introduction

Present with joy in React. Minimal and self-contained framework for presentations built with styled-components. Presa aims to be:

  • Lightweight. No external css needed and as minimal dependencies as possible.
  • Extendable. Presa uses styled-components so almost all of its internal components can be extended and themized.
  • Modular. Core barebone and building blocks are separated and may be optionally excluded from the presentation.
  • Aestetically pleasing. Simple but functional UI, typography included.

Here is how Presa UI looks like:

Presa UI

List of currently supported features:

  • Slideshow mode with optinonal table of the contents in a sidebar.
  • Fullscreen API.
  • Supports clicker and keyboard navigation.
  • Bird's eye view mode.
  • Slides are components. They are not rendered until the slide is active.

Getting started

Let's add a simple slide with a background.

import { Presentation, Slide } from 'presa'

// No need to pass indexes here
const Deck = () => (
  <Presentation>
    <Slide background="wat.jpg">
      Let talk about JavaScript!
    </Slide>
  </Presentation>
)

// Make sure you render into a full-page container
ReactDOM.render(<Deck />, container)

If you do that in your app, Presa will run automatically.

Contributing

Feel free to open issues and PRs! If you want to develop Presa locally you can test your features by adding them to the demo deck inside the demo/ folder. To open the development server run yarn dev.

The project uses Prettier which runs automatically before every commit making the code base consistent. See also text editor integrations.

presa's People

Contributors

htarasenko avatar koretskiyav avatar molefrog avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar

presa's Issues

Add support for Fragments

A fragment is a piece of the slide that's only visible via an additional click on the slide. For example:

import { Fragment } from 'presa'
import { H1, H2 } from 'presa/blocks'

<Slide>
   <H1>This appears by default...</H1>
   <Fragment index={0}><H2>This appears next...</H2></Fragment>
   <Fragment index={1}><H2>This appears afterwards.</H2></Fragment>
</Slide>

Fragments are indexed in the order of appearance by default (is it possible in React?). If hard to implement โ€” make index prop mandatory.

Demo is coming...

Add Prettier pre-commit hook

This one is to increase the DX (development experience). We use Prettier in the project, so would be nice to run it against all the files in the project automatically on commit.

Not everyone has Prettier integrated in their IDEs so implementing this would increase the code consistency a lot.

Make a pitch deck for the project

Would be super cool to make the deck in 5-10 slides about the Presa itself and use it as a project page. Check out how others do that:

Possible structure:

  • What is Presa? Why do you need it for?
  • A quick start with code example.
  • Using blocks: typography, code etc.
  • Additional features: clicker support, fullscreen mode.
  • Spread the world: star on github widget.

We can try using Parcel (pros: no config needed, already supports everything needed) to build the deck inside demo/ (or deck or pitch you choose it) folder.

Implement Zoomable block

Zoomable block allows to zoom a piece of DOM on click. It can be used in order to wrap images and other blocks. We can later connect it to fragments (see #1), but for now zoom on click is fine too.

The possible interface:

import { Zoomable } from 'presa/blocks'

<Slide>
  <Zoomable>
    <img src="..." />
  </Zoomable>
</Slide>

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.