Mockup

Serve a mostrare un prodotto su una landing page o una schermata nella documentazione. La cornice è decorazione: i pallini, la barra degli indirizzi e la tacca sono tutti aria-hidden, così uno screen reader riceve ciò che c’è dentro e non la descrizione di una cornice.

Browser

sitelo.dev
Ciao mondo

Renderizzato in fase di build, servito come file statico.

mockup({ variant: 'browser', url: 'sitelo.dev' },
  div({ style: 'padding: 1.5rem; background: var(--su-surface-2)' },
    stack({ gap: 'sm' },
      text({ variant: 'h5', as: 'div' }, 'Ciao mondo'),
      text({ variant: 'small', tone: 'muted' }, 'Renderizzato in fase di build, servito come file statico.'),
    ),
  ),
)

Finestra

La stessa cornice senza barra degli indirizzi, per tutto ciò che non è una pagina web.

Una finestra senza URL.

mockup({ variant: 'window' },
  div({ style: 'padding: 1.5rem' },
    text({ variant: 'small' }, 'Una finestra senza URL.'),
  ),
)

Semafori

Per impostazione predefinita i pulsanti seguono il tema. dots: 'mac' li dipinge invece del rosso, giallo e verde di macOS — gli stessi tre in entrambi i temi, visto che il loro scopo è essere riconoscibili.

sitelo.dev

Una finestra che hai già visto.

mockup({ variant: 'browser', url: 'sitelo.dev', dots: 'mac' },
  div({ style: 'padding: 1.5rem' },
    text({ variant: 'small' }, 'Una finestra che hai già visto.'),
  ),
)

Terminale

La variante code è scura in entrambi i temi, come è un terminale.

$ npm install -D sitelo
$ npx sitelo build
✓ costruito in 1,09s
204 pagine · 9,7 MB
mockup({ variant: 'code' },
  '<div>$ npm install -D sitelo</div>' +
  '<div>$ npx sitelo build</div>' +
  '<div style="opacity: .7">✓ costruito in 1,09s</div>' +
  '<div style="opacity: .7">  204 pagine · 9,7 MB</div>',
)

Telefono

Un apparecchio attuale: una Dynamic Island che galleggia staccata dalla cornice, invece di una tacca ritagliata dentro. Lasciale spazio in cima allo schermo.

sitelo
Siti statici, senza framework.
mockup({ variant: 'phone' },
  div({ style: 'padding: 3rem 1rem 1rem' },
    stack({ gap: 'md' },
      text({ variant: 'h6', as: 'div' }, 'sitelo'),
      text({ variant: 'caption', tone: 'muted' }, 'Siti statici, senza framework.'),
      button({ size: 'sm', block: true }, 'Inizia'),
    ),
  ),
)

Cornice e island

frame tinge il bordo esterno — qualunque colore CSS, così una finitura da dispositivo è un esadecimale invece che un nome di cui questa libreria dovrebbe tenere un elenco. notch: false lascia fuori l’island per tutto ciò che non ne ha.

stack({ direction: 'row', gap: 'md', wrap: true },
  mockup({ variant: 'phone', size: 'sm', frame: '#a8674a' }, ''),
  mockup({ variant: 'phone', size: 'sm', frame: '#2c3644' }, ''),
  mockup({ variant: 'phone', size: 'sm', frame: '#c9ced4', notch: false }, ''),
)

Con una schermata

Un <img> dentro il corpo riempie la larghezza della cornice. Abbinalo ad aspectRatio() se l’immagine si carica tardi e la pagina non deve saltare.

sitelo.dev/ui
La galleria di sitelo UI
mockup({ variant: 'browser', url: 'sitelo.dev/ui' },
  aspectRatio({ ratio: '16 / 9', style: 'background: var(--su-surface-2)' },
    '<img src="/logo.svg" alt="La galleria di sitelo UI" style="object-fit: contain; padding: 3rem">',
  ),
)

Dimensioni

Per impostazione predefinita un mockup riempie il proprio contenitore. size lo fissa invece a una larghezza precisa. Il telefono ha le sue tre — 22rem di telefono sarebbero un tablet — e mantiene le proporzioni in tutte: gli angoli, il bordo e l’island sono frazioni della larghezza invece che lunghezze fisse.

size: sm

predefinito — piena larghezza

stack({ gap: 'md', align: 'flex-start' },
  mockup({ variant: 'window', size: 'sm' }, div({ style: 'padding: 1rem' }, text({ variant: 'small' }, 'size: sm'))),
  mockup({ variant: 'window' }, div({ style: 'padding: 1rem' }, text({ variant: 'small' }, 'predefinito — piena larghezza'))),
)

In un hero

L’abbinamento per cui questo esiste: passa un mockup come media di un hero.

Guardalo in funzione

HTML statico nel momento in cui raggiunge il browser.

example.com

Una pagina, incorniciata.

hero({
  level: 2,
  align: 'start',
  title: 'Guardalo in funzione',
  description: 'HTML statico nel momento in cui raggiunge il browser.',
  media: mockup({ variant: 'browser', url: 'example.com' },
    div({ style: 'padding: 1.25rem; background: var(--su-surface-2)' },
      text({ variant: 'small' }, 'Una pagina, incorniciata.'),
    ),
  ),
}, button('Inizia'))

Props

PropTipoPredefinitoDescrizione
variant'browser' | 'window' | 'phone' | 'code''browser'Quale cornice disegnare.
urlstring—Mostrato nella barra degli indirizzi. Solo per la variante browser.
dots'mono' | 'mac''mono'Che aspetto hanno i tre pulsanti.
framestring—Tinge il bordo esterno. Qualunque colore CSS. Solo telefono.
notchbooleantrueDisegna la Dynamic Island. Solo telefono.
size'sm' | 'md' | 'lg''md'Larghezza fissa. Medium riempie il contenitore.