Sorgente: assets/css/main.css — importa i layer Tailwind (base, components, utilities) intervallati da CSS custom: assets/css/custom-properties.css e base.css nel layer base, il CSS di ogni componente (incluso automaticamente via @import-glob su tutte le cartelle components/**/*.css — nessuna registrazione manuale richiesta per i nuovi componenti) nel layer components, le utility colore semantiche nel layer utilities.
assets/css/custom-properties.css non è il file dei token del design system (colori, tipografia, spaziature) — quello è public/css/custom-properties.css, unica fonte di verità, consumato da tailwind.config.js (vedi sotto). L’omonimo file in assets/css/ è un file distinto e a scopo ristretto: definisce solo --adminbar-height/--header-height/--header-top-position, gli offset usati dall’header sticky quando la libreria è embeddata sotto una admin bar di CMS (es. WordPress, Liferay).
Build: npm run build:webpack (o npm run start/start:all in sviluppo, con watch) compila assets/css/main.css → public/css/main.css; npm run minify-css genera public/css/main.min.css via PostCSS + cssnano. Vedi Installazione e sviluppo per l’elenco comandi e Bundle CSS per come questo output confluisce nei bundle core.css/servizi.css/font.css distribuiti.
Configurazione in tailwind.config.js (root del repository): prefisso utility rtds- (ogni classe Tailwind generata è rtds-*) e valori (colori, spaziature, font-size…) letti da public/css/custom-properties.css via var(--…) — mai hardcodati.
File sorgente/spazio di lavoro nella cartella components/, organizzata in categorie numerate:
| Prefisso | Cartella | Contenuto |
|---|---|---|
| 01 | 01-design-system/ |
Token CSS — colori, tipografia, spaziature, border-radius |
| 02 | 02-atoms/ |
Componenti base — button, icon, input, chip… |
| 03 | 03-molecules/ |
Composizioni di atoms — card, accordion, input-field… |
| 04 | 04-organisms/ |
Componenti complessi generici — header, footer, carousel… |
| 05 | 05-templates/ |
Layout riusabili — sidebar, single-column, ricerca… |
| 06 | 06-pages/ |
Layout base NJK interni usati dalle pagine |
| 07 | 07-widgets/ |
Widget servizi digitali (istanza Fractal Servizi) |
| 08 | 08-servizi/ |
Componenti applicativi servizi (istanza Fractal Servizi) |
| 09 | 09-others/ |
Componenti speciali non categorizzabili |
| 10 | 10-portale-istituzionale/ |
Componenti specifici del Portale Istituzionale RT |
Struttura della cartella di un componente — esempio component-example/:
component-example.njk — template, sintassi Nunjucks (Fractal Nunjucks adapter); può contenere anche solo HTML semplice, senza markup Nunjucks, se il componente non ha logica condizionalecomponent-example.css — stili del componente (Tailwind + custom properties)component-example.js — script del componente, se necessariocomponent-example.config.yml — configurazione Fractal: contesto dati, varianti, metadatiREADME.md — documentazione: markup, classi, parametri di configurazione, esempi d’uso. Template di riferimento: components/TEMPLATE_README.mdAsset statici serviti/distribuiti così come sono, in public/:
| Cartella/file | Contenuto |
|---|---|
public/css/ |
Output compilato Tailwind + bundle CSS (main.css, custom-properties.css, core.css, servizi.css, font.css…) — vedi Bundle CSS |
public/js/ |
componentsJs.js, bundle compilato dai file .js parziali dei singoli componenti — vedi Risorse JS |
public/fonts/ |
Font distribuiti: open-sans/ (font di default, regole in font.css) e fontawesome-pro/ (icone Font Awesome Pro, licenza commerciale) |
public/images/ |
Immagini statiche del design system — vedi Immagini |
public/svgs/ |
Sorgenti SVG delle icone, input dello sprite — vedi Sprite SVG |
public/icons.svg |
Sprite SVG compilato — generato, non modificare a mano |
Altre sottocartelle di public/ (illustrations/, logos/, media/) contengono asset di esempio usati solo negli esempi di alcuni componenti in Fractal — non fanno parte del bundle distribuito.
Il progetto ha due istanze Fractal separate, ognuna con il proprio build:
| Istanza | Sorgente config | Avvio dev | Build dest | Componenti mostrati |
|---|---|---|---|---|
| Core | fractal.config.js |
npm run start (port 3000) |
dist/core/ |
tutti tranne 07-widgets/, 08-servizi/ |
| Servizi | fractal.servizi.config.js |
npm run start:servizi (port 3010) |
dist/servizi/ |
01-design-system/, 07-widgets/, 08-servizi/ |
Le due istanze condividono la stessa cartella components/ — ogni componente è disponibile in entrambe via @handle.
Per avviarle entrambe con un solo comando: npm run start:all (vedi Installazione e sviluppo).
Output build nella cartella dist/, committata in git:
dist/
├── index.html ← Homepage hub (link a Core e Servizi)
├── core/ ← Build statica Fractal Core
│ ├── index.html
│ ├── components/ ← Componenti statici (raw + render)
│ ├── docs/ ← Documentazione fondamenta/core/servizi
│ ├── css/
│ │ ├── main.min.css ← CSS bundle Tailwind compilato
│ │ ├── custom-properties.css
│ │ ├── core.css ← Bundle componenti core
│ │ ├── servizi.css ← Bundle componenti servizi
│ │ ├── font.css
│ │ └── liferay/ ← Integrazione legacy multi-CMS (non toccare)
│ ├── js/
│ ├── fonts/
│ └── icons.svg
├── servizi/ ← Build statica Fractal Servizi
│ └── (stessa struttura di core/)
├── temp/ ← Staging: Storybook Core + Servizi + homepage hub
│ ├── index.html ← Hub di staging
│ ├── core/ ← Build Storybook Core
│ └── servizi/ ← Build Storybook Servizi
└── css/
├── components/ ← CSS per componente (standalone)
└── servizi/ ← CSS bundle servizi (standalone)I build vengono generati dai comandi:
| Percorso | Comando di build |
|---|---|
dist/core/ |
npm run build:fractal |
dist/servizi/ |
node scripts/fractal-servizi-build.js (incluso in npm run build) |
dist/temp/ |
npm run build:staging |
La sezione Public sopra copre dove si trova ogni tipo di risorsa; qui il come aggiornarla.
public/images/ seguendo le convenzioni di naming descritte in Immagini. Nessun passaggio di build richiesto: sono servite/distribuite as-is.@font-face sono già presenti in font.css; per aggiungerne uno nuovo o capire il meccanismo di inclusione (font.css non è importato in core.css/servizi.css, va sempre linkato a parte) vedi Font.public/svgs/{eventuale-sottocartella}, poi rigenerare lo sprite con npm run build-svgs (compila icons.svg e aggiorna la config Fractal così la nuova icona sia selezionabile nel componente icon) — vedi Sprite SVG..js nella cartella del componente viene incluso automaticamente nel bundle componentsJs.js alla build — vedi Risorse JS.