the-pudding / lenna

17 stars 1 forks source link

Svelte Starter

This starter template aims for fast and easy web development speficially for data-driven and visual stories. It is an opinionated template built on top of SvelteKit.

Please Note: do not use or reproduce The Pudding logos or fonts without written permission.

Prettier Formatting: Disable any text editor Prettier extensions to take advantage of the built-in rules.

Features

Quickstart

New school: just click the Use this template button above.

Old school:

npx degit the-pudding/svelte-starter my-project

Then in your local repo:

npm install

Development

To start the dev server:

npm run dev

Modify content in src and static/assets.

Deploy

npm run build

This generates a directory called build with the server-side rendered static-hostable app.

If deploying to github pages:

make github

Style

There are a few stylesheets included by default in src/styles. Put anything global in app.css. For variable parity in both CSS and JS, modify files in the properties folder using the Style Dictionary API.

You can use SCSS or another CSS preprocessor by installing the module (eg. node-sass) and including the property in the svelte-preprocess in svelte.config.cjs.

Google Docs and Sheets

Running npm run gdoc at any point (even in new tab while server is running) will fetch the latest from all Docs and Sheets.

Pre-loaded helpers

Components

Located in src/lib/components.

Helper Components

Located in src/lib/components/helpers.

Actions

Located in src/lib/actions.

Utils

Located in src/lib/utils/.

Stores

These are located in src/lib/stores. You can put custom ones in src/lib/stores/misc.js or create unique files for more complex ones. To include them do this (replacing name):

import name from "$stores/name.js";

Utils

transformSvg.js: this custom transition lets you apply an svg transform property with the in/out svelte transition. Parameters (with defaults):

{
    target: "", // string: transform properties [required]
    delay: 0, // number: ms
    duration: 250, // number: in ms
    easing: linear, // function: svelte easing function
    relative: false, // boolean: adds target onto pre-existing transform
    opacity: false // boolean: to fade in/out as well
}

Usage

<g out:transformSvg={{ target: "translate(50, 50)" }}>

Notes

Any @html tags, e.g., {@html user} must be the child of a dom element so they can be properly hydrated.