Skip to content

Arkkitehtuuri

pantokenilla on yksi tehtävä: ratkaista Instructuren design-tokens ja ikonit kerran ja sitten muokata tuota mallia jokaiselle kohteelle. Alla olevat kerrokset pitävät tämän muokkauksen rehellisenä ja pitävät julkaistut paketit vapaina minkään GitHubille tarkoitetusta upstreamista.

Kerrokset

flowchart TD upstream["@instructure/instructure-design-tokens<br/>(upstream, GitHub-only)"] core["@pantoken/core<br/>buildTokens() / toCss() - resolves upstream into the IR"] tokens["@pantoken/tokens<br/>the IR, vendored as static JSON per theme<br/>(the decoupling point)"] formats["formats/<br/>(css, scss, ...)"] renderers["renderers/<br/>(react, vue, web-components, ...)"] platforms["platforms/<br/>(swift, wordpress, ...)"] design["design/<br/>(figma, swatches)"] bundlers["bundlers/<br/>(vite, tailwind, ...)"] upstream --> core --> tokens tokens --> formats tokens --> renderers tokens --> platforms tokens --> design tokens --> bundlers
  • @pantoken/model pitää tyypin sopimukset, eikä mitään muuta. Se on totuuden lähde Token-muodolle ja plugin-sopimukselle, täysin ilman riippuvuuksia, joten mikä tahansa paketti voi riippua siitä vapaasti.
  • @pantoken/core on ainoa paketti, joka koskettaa upstream-lähdettä. Se ratkaisee tokenit ja ikonit kanoniseen IR:ään ja renderöi CSS:n.
  • @pantoken/tokens toimittaa tuon IR:n staattisena JSON:ina build-aikana. Tämä on irtikytkentäpiste: downstream-paketit lukevat @pantoken/tokens, eivät koskaan @pantoken/core, joten npm i pantoken ei koskaan yletä GitHubille tarkoitetulle upstreamille.
  • @pantoken/utils kantaa jaetut apurutiinit — var(--x)-resolverin, viittaus-regexit, tapa- ja värimuunnokset sekä drift-tarkistukset, jotka pitävät generoiden ulostulon uskollisena IR:lle.

Miksi tokenit on toimittajakoottu (vendoroitu)

Upstream-token-paketti sijaitsee GitHubissa, ei npm:ssä. Jos jokainen downstream-paketti riippuisi siitä, npm i pantoken epäonnistuisi kenellä tahansa ilman pääsyä. Sen sijaan @pantoken/tokens ratkaisee upstreamin kerran build-aikana ja kirjoittaa tuloksen staattiseen JSON:iin. Julkaistut paketit kantavat tuota JSON:ia, joten ne asentuvat puhtaasti npm:stä, pinnaavat semveriin ja toimivat offline-tilassa.

Buckets

Jokainen downstream-bucket on tapa hyödyntää IR:ää:

  • formats/ — muuntaa tokenit tiedostoksi (CSS, SCSS, Less, Stylus, DTCG).
  • renderers/ — framework- ja työkalukytkennät (React, Vue, Svelte, MUI, Pendo ja lisää).
  • bundlers/ — build-työkalujen plugin- ja preset-integraatiot (Vite, Next, Tailwind, Panda, PostCSS, webpack).
  • platforms/ — natiivi- ja sivugeneraattorikohteet (Swift, Kotlin, Rust, WordPress, Drupal).
  • design/ — payloadit suunnittelutyökaluille (Figma, värinäytteet).
  • plugins/ — valinnaiset transformaatiot, jotka laajentavat token- tai CSS-ulostuloa. Katso Plugins.

Generoitu ulostulo

Jokainen paketti, joka tuottaa tiedoston, kirjoittaa sen per-paketin generated/-hakemistoon, jonka build uudelleenluo, joten mitään generoituja tiedostoja ei ole commitoitu. Workspace-tehtävä validoi kaiken sen. Katso Generated output.