npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

@if-framework/framework

v0.1.0

Published

A modular framework for developing interactive fiction with modern Typescript.

Downloads

5

Readme

IF Framework

A modular framework for developing interactive fiction with modern Typescript and Svelte.

Documentation for the Typescript files of the main package.

Roadmap

  • [ ] Choice-based games
    • [x] Default UI with a closable sidebar and custom sidebar elements, headers and footers.
    • [x] Passage generator from Markdown files.
    • [x] Passage aggregator, collecting all passages from a folder for easy adding to the engine.
    • [ ] Save/Load UI
    • [ ] Yeoman project template
  • [ ] Common Functionality
    • [x] Installable as PWAs
    • [x] Offline capable
    • [x] Extensible save system
    • [x] Update notifications
    • [ ] Packaging as a native app via Tauri
  • [ ] Parser games: If I find the time and motivation to learn about & make them.

Tutorial

For a commented example, see the example project.

Concepts

Choice-Based

Passages and History

If you're coming from Twine, the passage and history system should feel familiar.

If you're coming from a Web developer perspective, the history system is essentially an emulation of the Browser history for your story, with the addition that local variables are saved and restored, too, when you load from storage. Passages are the engines routing system, because a story is essentially a single page application. That also means you can abuse the system as much as you like and theoretically render all your content dynamically yourself in one "passage", or save the current Moment while going to another passage and restore it when going back, e.g. for games where the history size is normally 1 (and the last passage would have been lost).

Service Worker

A simple service worker template is included in the service.ts module. It works together with the Updater to check for story updates and provides offline capability.
For that to work you have to include a config.json file in the directory of the output HTML file, as well as the service.js file built from the service.
The version field is a number and should start at 0. Each time you make a new release, you'll have to increment it to make the service worker pick up on the update.
The cacheFiles field contains the paths of files to cache relative to the config.json. You have to add all your build outputs, so they'll be available offline.

Saves

There are currently 2 save locations:

  • Session Storage: A temporary save is placed here after every history change, so that reloading the page doesn't lose progress.
  • IndexedDB: Here are the persistent save slots starting at 0, and the autosave slot with number -1.

UI

There is currently no auto-generated documentation for the Svelte components, so you'll have to look at the component source for the doc comments.
Some components like the sidebar export variables from the module via a context="module" script tag, those variables can be imported like normal.
Exports in the main script tag are props you have to give to the component.

Fonts

A default font for consistency is included and can be used by including default-font.scss. In addition you'll have to copy the fonts folder to the HTML output, the the stylesheet can find the fonts.

More fonts to choose may be available in the future.