@meloniwastaken/prri-jira-viewer 1.0.6 → 1.0.8

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -1,16 +1,85 @@
1
- # React + Vite
1
+ # PRRI Jira Sprint Viewer
2
2
 
3
- This template provides a minimal setup to get React working in Vite with HMR and some ESLint rules.
3
+ Sprint board viewer per il progetto PRRI su Jira Cloud. Mostra epiche, story, bug e sottotask in una vista gerarchica con possibilita di creare issue direttamente dalla board.
4
4
 
5
- Currently, two official plugins are available:
5
+ ## Requisiti
6
6
 
7
- - [@vitejs/plugin-react](https://github.com/vitejs/vite-plugin-react/blob/main/packages/plugin-react) uses [Babel](https://babeljs.io/) (or [oxc](https://oxc.rs) when used in [rolldown-vite](https://vite.dev/guide/rolldown)) for Fast Refresh
8
- - [@vitejs/plugin-react-swc](https://github.com/vitejs/vite-plugin-react/blob/main/packages/plugin-react-swc) uses [SWC](https://swc.rs/) for Fast Refresh
7
+ - **Node.js** >= 18
8
+ - **Jira API Token** ([genera qui](https://id.atlassian.com/manage-profile/security/api-tokens))
9
9
 
10
- ## React Compiler
10
+ ## Installazione e avvio rapido
11
11
 
12
- The React Compiler is not enabled on this template because of its impact on dev & build performances. To add it, see [this documentation](https://react.dev/learn/react-compiler/installation).
12
+ Un solo comando, non serve installare nulla:
13
13
 
14
- ## Expanding the ESLint configuration
14
+ ```bash
15
+ npx @meloniwastaken/prri-jira-viewer
16
+ ```
15
17
 
16
- If you are developing a production application, we recommend using TypeScript with type-aware lint rules enabled. Check out the [TS template](https://github.com/vitejs/vite/tree/main/packages/create-vite/template-react-ts) for information on how to integrate TypeScript and [`typescript-eslint`](https://typescript-eslint.io) in your project.
18
+ Si apre il browser su `http://localhost:3000`. Inserisci le credenziali Jira nel form di login:
19
+
20
+ | Campo | Valore |
21
+ |-------|--------|
22
+ | **Email** | La tua email Jira (es. `nome.cognome@vmway.it`) |
23
+ | **API Token** | Il token generato da Atlassian |
24
+
25
+ ## Configurazione avanzata
26
+
27
+ ### Porta personalizzata
28
+
29
+ ```bash
30
+ PORT=4000 npx @meloniwastaken/prri-jira-viewer
31
+ ```
32
+
33
+ ### Credenziali via variabili d'ambiente
34
+
35
+ Se preferisci non usare il form di login, puoi passare le credenziali direttamente:
36
+
37
+ ```bash
38
+ JIRA_EMAIL=nome@email.com JIRA_TOKEN=il-tuo-token npx @meloniwastaken/prri-jira-viewer
39
+ ```
40
+
41
+ Con le variabili d'ambiente impostate, il login viene saltato automaticamente.
42
+
43
+ ### URL Jira personalizzato
44
+
45
+ Se l'istanza Jira non e quella di default:
46
+
47
+ ```bash
48
+ JIRA_URL=https://la-tua-istanza.atlassian.net npx @meloniwastaken/prri-jira-viewer
49
+ ```
50
+
51
+ ## Funzionalita
52
+
53
+ - **Vista gerarchica**: Epiche > Story/Sottotask > Bug con struttura ad albero
54
+ - **Creazione issue**: Clicca il pulsante **+** su un'epica per creare una Story, o su una Story/Sottotask per creare un Bug. L'issue viene creata via API con il parent gia assegnato
55
+ - **Dettaglio issue**: Clicca su qualsiasi issue per vedere descrizione, stato, assegnatario e commenti
56
+ - **Barra di progresso**: Avanzamento completamento per ogni epica
57
+ - **Filtro completate**: Toggle per nascondere le issue completate
58
+ - **Refresh**: Aggiorna i dati dalla board Jira con un click
59
+
60
+ ## Sviluppo locale
61
+
62
+ ```bash
63
+ # Clona il repo e installa le dipendenze
64
+ cd lda-jira-viewer
65
+ npm install
66
+
67
+ # Crea un file .env con le credenziali
68
+ cat > .env << EOF
69
+ JIRA_URL=https://regcam-projectmgm.atlassian.net
70
+ JIRA_EMAIL=nome@email.com
71
+ JIRA_TOKEN=il-tuo-token
72
+ EOF
73
+
74
+ # Avvia server Express + Vite in dev mode
75
+ npm run dev:all
76
+ ```
77
+
78
+ Il frontend e disponibile su `http://localhost:5173` con hot-reload.
79
+
80
+ ## Pubblicazione
81
+
82
+ ```bash
83
+ # Bumpa la versione in package.json, poi:
84
+ npm publish --access public
85
+ ```
@@ -0,0 +1 @@
1
+ :root{font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen,sans-serif;line-height:1.5;font-weight:400;color:#172b4d;background-color:#f4f5f7;font-synthesis:none;text-rendering:optimizeLegibility;-webkit-font-smoothing:antialiased}*{box-sizing:border-box;margin:0;padding:0}body{min-height:100vh}a{color:#0052cc;text-decoration:none}a:hover{text-decoration:underline}.app{max-width:960px;margin:0 auto;padding:24px 16px}.sprint-header{margin-bottom:24px}.sprint-title-row{display:flex;align-items:center;gap:12px;margin-bottom:16px}.sprint-title-row h1{font-size:1.6rem;font-weight:600;color:#172b4d}.create-epic-btn{background:#0052cc;color:#fff;border:none;border-radius:4px;padding:6px 14px;font-size:.85rem;font-weight:600;cursor:pointer;transition:background .15s}.create-epic-btn:hover{background:#0065ff}.refresh-btn{background:none;border:1px solid #dfe1e5;border-radius:4px;padding:4px 10px;font-size:1.2rem;cursor:pointer;color:#6b778c;transition:all .15s}.refresh-btn:hover{background:#ebecf0;color:#172b4d}.sprint-stats{display:flex;gap:16px;flex-wrap:wrap}.stat{background:#fff;border:1px solid #dfe1e5;border-radius:8px;padding:12px 20px;text-align:center;min-width:80px}.stat-value{display:block;font-size:1.5rem;font-weight:700;color:#172b4d}.stat-done .stat-value{color:#064}.stat-progress .stat-value{color:#0052cc}.stat-todo .stat-value{color:#6b778c}.stat-label{display:block;font-size:.75rem;color:#6b778c;text-transform:uppercase;letter-spacing:.5px;margin-top:2px}.hide-completed-toggle{display:flex;align-items:center;gap:6px;font-size:.85rem;color:#6b778c;cursor:pointer;-webkit-user-select:none;user-select:none;margin-top:12px}.hide-completed-toggle input{cursor:pointer;accent-color:#0052cc}.epic-card{background:#fff;border:1px solid #dfe1e5;border-radius:8px;margin-bottom:12px;overflow:hidden}.epic-header{padding:16px 20px;cursor:pointer;-webkit-user-select:none;user-select:none;transition:background .15s}.epic-header:hover{background:#fafbfc}.epic-title-row{display:flex;align-items:center;gap:10px;margin-bottom:8px}.epic-chevron{font-size:.7rem;color:#6b778c;transition:transform .2s;display:inline-block}.epic-chevron.expanded{transform:rotate(90deg)}.epic-key{font-size:.8rem;font-weight:600;color:#0052cc;white-space:nowrap}.epic-name{font-size:1rem;font-weight:600;color:#172b4d;flex:1}.epic-count{font-size:.8rem;color:#6b778c;white-space:nowrap}.epic-progress{display:flex;align-items:center;gap:12px}.progress-bar{flex:1;height:6px;background:#dfe1e5;border-radius:3px;overflow:hidden}.progress-fill{height:100%;background:#36b37e;border-radius:3px;transition:width .3s ease}.progress-text{font-size:.75rem;color:#6b778c;white-space:nowrap}.epic-issues{border-top:1px solid #ebecf0}.no-issues{padding:16px 20px;color:#6b778c;font-style:italic;font-size:.9rem}.issue-row{display:flex;align-items:center;gap:10px;padding:10px 20px;border-bottom:1px solid #f4f5f7;cursor:pointer;transition:background .1s}.issue-row:last-child{border-bottom:none}.issue-row:hover{background:#f4f5f7}.issue-row-child{background:#fafbfc}.issue-row-child:hover{background:#f0f1f4}.issue-indent{color:#a5adba;font-size:1rem;flex-shrink:0}.issue-type{font-size:1rem;flex-shrink:0}.issue-key{font-size:.8rem;font-weight:600;color:#0052cc;white-space:nowrap;flex-shrink:0}.issue-summary{flex:1;font-size:.9rem;color:#172b4d;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.issue-assignee{display:flex;align-items:center;gap:4px;font-size:.8rem;color:#6b778c;white-space:nowrap;flex-shrink:0}.avatar{width:20px;height:20px;border-radius:50%}.status-badge{display:inline-block;font-size:.7rem;font-weight:700;text-transform:uppercase;padding:2px 8px;border-radius:3px;white-space:nowrap;flex-shrink:0;letter-spacing:.3px}.dialog-overlay{position:fixed;inset:0;background:#091e428a;display:flex;align-items:center;justify-content:center;z-index:1000;padding:24px}.dialog{background:#fff;border-radius:8px;width:100%;max-width:640px;max-height:80vh;overflow-y:auto;box-shadow:0 8px 16px #091e4240}.dialog-header{display:flex;align-items:center;justify-content:space-between;padding:20px 24px 0}.dialog-title-row{display:flex;align-items:center;gap:12px}.dialog-key{font-size:.9rem;font-weight:700;color:#0052cc}.dialog-close{background:none;border:none;font-size:1.5rem;color:#6b778c;cursor:pointer;padding:0 4px;line-height:1}.dialog-close:hover{color:#172b4d}.dialog-summary{font-size:1.2rem;font-weight:600;color:#172b4d;padding:12px 24px 16px}.dialog-loading{padding:24px;text-align:center;color:#6b778c}.dialog-body{padding:0 24px 24px}.dialog-meta{display:grid;grid-template-columns:1fr 1fr;gap:8px 24px;margin-bottom:20px;padding:12px 16px;background:#f4f5f7;border-radius:6px}.meta-item{display:flex;flex-direction:column;gap:2px}.meta-label{font-size:.7rem;font-weight:600;text-transform:uppercase;color:#6b778c;letter-spacing:.5px}.meta-item>span:last-child{font-size:.9rem;color:#172b4d}.dialog-description h3,.dialog-comments h3{font-size:.85rem;font-weight:600;color:#6b778c;text-transform:uppercase;letter-spacing:.5px;margin-bottom:8px}.dialog-description p{font-size:.9rem;color:#172b4d;line-height:1.6;margin-bottom:8px}.no-description{color:#6b778c;font-style:italic}.dialog-comments{margin-top:20px;border-top:1px solid #ebecf0;padding-top:16px}.comment{margin-bottom:12px;padding:10px 12px;background:#f4f5f7;border-radius:6px}.comment-header{display:flex;justify-content:space-between;align-items:center;margin-bottom:6px;font-size:.8rem}.comment-header strong{color:#172b4d}.comment-header span{color:#6b778c}.comment-body p{font-size:.85rem;color:#172b4d;line-height:1.5}.login-container{display:flex;align-items:center;justify-content:center;min-height:80vh}.login-form{background:#fff;border:1px solid #dfe1e5;border-radius:8px;padding:40px 36px;width:100%;max-width:400px;box-shadow:0 2px 8px #091e4214}.login-title{font-size:1.4rem;font-weight:700;color:#172b4d;margin-bottom:4px}.login-subtitle{font-size:.85rem;color:#6b778c;margin-bottom:24px}.login-label{display:block;font-size:.8rem;font-weight:600;color:#6b778c;text-transform:uppercase;letter-spacing:.5px;margin-bottom:16px}.login-input{display:block;width:100%;margin-top:6px;padding:8px 12px;font-size:.9rem;border:1px solid #dfe1e5;border-radius:4px;outline:none;transition:border-color .15s;box-sizing:border-box}.login-input:focus{border-color:#0052cc}.login-error{background:#ffebe6;color:#de350b;padding:8px 12px;border-radius:4px;font-size:.85rem;margin-bottom:16px}.login-btn{width:100%;background:#0052cc;color:#fff;border:none;border-radius:4px;padding:10px;font-size:.95rem;font-weight:600;cursor:pointer;transition:background .15s}.login-btn:hover{background:#0065ff}.login-btn:disabled{background:#a5adba;cursor:not-allowed}.login-help{display:block;text-align:center;margin-top:16px;font-size:.8rem;color:#0052cc;text-decoration:none}.login-help:hover{text-decoration:underline}.create-btn{display:inline-flex;align-items:center;justify-content:center;width:22px;height:22px;border-radius:4px;background:#0052cc;color:#fff;font-size:.9rem;font-weight:700;line-height:1;text-decoration:none;flex-shrink:0;transition:background .15s;border:none;cursor:pointer}.create-btn:hover{background:#0065ff}.create-btn-sm{width:18px;height:18px;font-size:.75rem}.create-dialog{max-width:480px}.create-form{padding:16px 24px 24px}.create-label{display:block;font-size:.8rem;font-weight:600;color:#6b778c;text-transform:uppercase;letter-spacing:.5px;margin-bottom:16px}.create-input{display:block;width:100%;margin-top:6px;padding:8px 12px;font-size:.9rem;border:1px solid #dfe1e5;border-radius:4px;outline:none;transition:border-color .15s;box-sizing:border-box}.create-input:focus{border-color:#0052cc}.create-textarea{resize:vertical;font-family:inherit;min-height:80px}.create-actions{display:flex;justify-content:flex-end;gap:8px}.create-actions .login-btn{width:auto;padding:8px 20px;font-size:.85rem}.create-cancel{background:none;border:1px solid #dfe1e5;border-radius:4px;padding:8px 20px;font-size:.85rem;color:#6b778c;cursor:pointer;transition:all .15s}.create-cancel:hover{background:#f4f5f7;color:#172b4d}.dialog-transition{margin-bottom:20px;padding:14px 16px;background:#f4f5f7;border-radius:6px}.dialog-transition h3{font-size:.85rem;font-weight:600;color:#6b778c;text-transform:uppercase;letter-spacing:.5px;margin-bottom:10px}.transition-row{display:flex;gap:10px;align-items:center}.transition-select{flex:1;padding:8px 12px;font-size:.9rem;border:1px solid #dfe1e5;border-radius:4px;outline:none;background:#fff;transition:border-color .15s}.transition-select:focus{border-color:#0052cc}.transition-save-btn{background:#0052cc;color:#fff;border:none;border-radius:4px;padding:8px 20px;font-size:.85rem;font-weight:600;cursor:pointer;transition:background .15s;white-space:nowrap}.transition-save-btn:hover:not(:disabled){background:#0065ff}.transition-save-btn:disabled{background:#a5adba;cursor:not-allowed}.transition-error{margin-top:8px;background:#ffebe6;color:#de350b;padding:6px 10px;border-radius:4px;font-size:.8rem}.loading{text-align:center;padding:60px 24px;color:#6b778c;font-size:1.1rem}.error{text-align:center;padding:60px 24px;color:#de350b}.error button{margin-top:12px;background:#0052cc;color:#fff;border:none;border-radius:4px;padding:8px 20px;font-size:.9rem;cursor:pointer}.error button:hover{background:#0065ff}