@cccarv82/freya 2.14.0 → 2.15.0
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/cli/web-ui.css +341 -25
- package/cli/web-ui.js +460 -156
- package/cli/web.js +713 -236
- package/package.json +3 -3
- package/scripts/lib/DataLayer.js +10 -1
- package/scripts/lib/DataManager.js +1 -0
- package/scripts/lib/Embedder.js +5 -1
- package/templates/base/scripts/lib/DataLayer.js +11 -2
- package/templates/base/scripts/lib/DataManager.js +15 -14
- package/templates/base/scripts/lib/Embedder.js +5 -1
package/cli/web-ui.css
CHANGED
|
@@ -371,7 +371,6 @@ body {
|
|
|
371
371
|
align-items: center;
|
|
372
372
|
padding: 16px 20px 10px;
|
|
373
373
|
background: transparent;
|
|
374
|
-
flex-shrink: 0;
|
|
375
374
|
}
|
|
376
375
|
|
|
377
376
|
.brandLine {
|
|
@@ -593,18 +592,26 @@ body {
|
|
|
593
592
|
gap: 18px;
|
|
594
593
|
flex: 1;
|
|
595
594
|
}
|
|
595
|
+
|
|
596
596
|
.centerBody > * {
|
|
597
597
|
flex-shrink: 0;
|
|
598
598
|
}
|
|
599
599
|
|
|
600
|
+
.topbar {
|
|
601
|
+
flex-shrink: 0;
|
|
602
|
+
}
|
|
603
|
+
|
|
600
604
|
.promptShell {
|
|
601
605
|
display: flex;
|
|
602
|
-
|
|
606
|
+
flex-direction: column;
|
|
607
|
+
align-items: stretch;
|
|
603
608
|
width: 100%;
|
|
609
|
+
/* Occupy ~90% of viewport height minus topbar */
|
|
610
|
+
min-height: calc(90vh - 60px);
|
|
604
611
|
}
|
|
605
612
|
|
|
606
613
|
.promptBar {
|
|
607
|
-
width:
|
|
614
|
+
width: 100%;
|
|
608
615
|
background: var(--paper);
|
|
609
616
|
backdrop-filter: blur(16px);
|
|
610
617
|
-webkit-backdrop-filter: blur(16px);
|
|
@@ -1501,69 +1508,78 @@ textarea:focus {
|
|
|
1501
1508
|
animation: fadeIn 0.2s ease-out;
|
|
1502
1509
|
}
|
|
1503
1510
|
|
|
1504
|
-
/* ── Companion Dashboard
|
|
1511
|
+
/* ── Companion Dashboard Styles ── */
|
|
1505
1512
|
.companionTabs {
|
|
1506
1513
|
display: flex;
|
|
1507
1514
|
gap: 8px;
|
|
1508
1515
|
margin: 16px 0;
|
|
1509
1516
|
border-bottom: 1px solid var(--border);
|
|
1510
|
-
padding-bottom: 8px;
|
|
1511
1517
|
}
|
|
1512
1518
|
|
|
1513
1519
|
.companionTabs .tab {
|
|
1514
1520
|
padding: 8px 12px;
|
|
1515
1521
|
background: transparent;
|
|
1516
1522
|
border: none;
|
|
1523
|
+
border-bottom: 2px solid transparent;
|
|
1517
1524
|
cursor: pointer;
|
|
1518
|
-
|
|
1519
|
-
|
|
1520
|
-
|
|
1521
|
-
transition: color 0.2s ease;
|
|
1525
|
+
font-size: 12px;
|
|
1526
|
+
color: var(--textMuted);
|
|
1527
|
+
transition: color 0.2s, border-color 0.2s;
|
|
1522
1528
|
}
|
|
1523
1529
|
|
|
1524
1530
|
.companionTabs .tab:hover {
|
|
1525
|
-
color: var(--
|
|
1531
|
+
color: var(--text);
|
|
1526
1532
|
}
|
|
1527
1533
|
|
|
1528
1534
|
.companionTabs .tab.active {
|
|
1529
1535
|
color: var(--accent);
|
|
1530
|
-
border-bottom:
|
|
1531
|
-
padding-bottom: 6px;
|
|
1532
|
-
margin-bottom: -10px;
|
|
1536
|
+
border-bottom-color: var(--accent);
|
|
1533
1537
|
}
|
|
1534
1538
|
|
|
1535
|
-
/* ── Consolidated View (4 KPI Cards) ── */
|
|
1536
1539
|
.consolidatedView {
|
|
1537
1540
|
display: grid;
|
|
1538
1541
|
grid-template-columns: repeat(4, 1fr);
|
|
1539
1542
|
gap: 16px;
|
|
1540
|
-
margin-bottom: 24px;
|
|
1541
1543
|
}
|
|
1542
1544
|
|
|
1543
1545
|
.kpiCard {
|
|
1544
1546
|
background: var(--paper);
|
|
1545
1547
|
padding: 16px;
|
|
1546
1548
|
border: 1px solid var(--border);
|
|
1549
|
+
display: flex;
|
|
1550
|
+
flex-direction: column;
|
|
1551
|
+
gap: 4px;
|
|
1547
1552
|
}
|
|
1548
1553
|
|
|
1549
|
-
/* ── Project Cards Grid ── */
|
|
1550
1554
|
.projectCardsGrid {
|
|
1551
1555
|
display: grid;
|
|
1552
1556
|
grid-template-columns: repeat(2, 1fr);
|
|
1553
1557
|
gap: 16px;
|
|
1554
|
-
margin
|
|
1558
|
+
margin: 16px 0;
|
|
1559
|
+
}
|
|
1560
|
+
|
|
1561
|
+
@media (max-width: 1200px) {
|
|
1562
|
+
.projectCardsGrid {
|
|
1563
|
+
grid-template-columns: 1fr;
|
|
1564
|
+
}
|
|
1565
|
+
.consolidatedView {
|
|
1566
|
+
grid-template-columns: repeat(2, 1fr);
|
|
1567
|
+
}
|
|
1555
1568
|
}
|
|
1556
1569
|
|
|
1557
1570
|
.projectCard {
|
|
1558
1571
|
background: var(--paper);
|
|
1559
1572
|
padding: 16px;
|
|
1560
1573
|
border-left: 3px solid #4ade80;
|
|
1574
|
+
border: 1px solid var(--border);
|
|
1575
|
+
border-left: 3px solid #4ade80;
|
|
1561
1576
|
cursor: pointer;
|
|
1562
|
-
transition:
|
|
1577
|
+
transition: background 0.2s, border-color 0.2s;
|
|
1563
1578
|
}
|
|
1564
1579
|
|
|
1565
1580
|
.projectCard:hover {
|
|
1566
|
-
|
|
1581
|
+
background: rgba(255, 255, 255, 0.02);
|
|
1582
|
+
border-color: var(--accent);
|
|
1567
1583
|
}
|
|
1568
1584
|
|
|
1569
1585
|
.projectCard.at_risk {
|
|
@@ -1574,27 +1590,327 @@ textarea:focus {
|
|
|
1574
1590
|
border-left-color: #666;
|
|
1575
1591
|
}
|
|
1576
1592
|
|
|
1577
|
-
/* ── Stream Item ── */
|
|
1578
1593
|
.streamItem {
|
|
1579
|
-
padding:
|
|
1594
|
+
padding: 12px;
|
|
1580
1595
|
margin: 4px 0;
|
|
1581
1596
|
border: 1px solid var(--border);
|
|
1582
|
-
|
|
1583
|
-
transition: background 0.2s
|
|
1597
|
+
background: transparent;
|
|
1598
|
+
transition: background 0.2s;
|
|
1599
|
+
font-size: 11px;
|
|
1584
1600
|
}
|
|
1585
1601
|
|
|
1586
1602
|
.streamItem:hover {
|
|
1587
|
-
background:
|
|
1603
|
+
background: rgba(255, 255, 255, 0.01);
|
|
1588
1604
|
}
|
|
1589
1605
|
|
|
1590
|
-
/* ── Alert Item ── */
|
|
1591
1606
|
.alertItem {
|
|
1592
1607
|
padding: 12px;
|
|
1593
1608
|
margin: 8px 0;
|
|
1594
1609
|
border-left: 3px solid #ef4444;
|
|
1595
1610
|
background: rgba(239, 68, 68, 0.05);
|
|
1611
|
+
border: 1px solid var(--border);
|
|
1612
|
+
border-left: 3px solid #ef4444;
|
|
1613
|
+
font-size: 11px;
|
|
1596
1614
|
}
|
|
1597
1615
|
|
|
1598
1616
|
* {
|
|
1599
1617
|
border-radius: 0 !important;
|
|
1618
|
+
}
|
|
1619
|
+
|
|
1620
|
+
/* ── Kanban Board ── */
|
|
1621
|
+
.kanban-board {
|
|
1622
|
+
display: grid;
|
|
1623
|
+
grid-template-columns: repeat(4, 1fr);
|
|
1624
|
+
gap: 12px;
|
|
1625
|
+
min-height: 400px;
|
|
1626
|
+
}
|
|
1627
|
+
|
|
1628
|
+
@media (max-width: 1100px) {
|
|
1629
|
+
.kanban-board { grid-template-columns: repeat(2, 1fr); }
|
|
1630
|
+
}
|
|
1631
|
+
@media (max-width: 600px) {
|
|
1632
|
+
.kanban-board { grid-template-columns: 1fr; }
|
|
1633
|
+
}
|
|
1634
|
+
|
|
1635
|
+
.kanban-col {
|
|
1636
|
+
display: flex;
|
|
1637
|
+
flex-direction: column;
|
|
1638
|
+
background: var(--bg);
|
|
1639
|
+
border: 1px solid var(--line2);
|
|
1640
|
+
min-height: 300px;
|
|
1641
|
+
}
|
|
1642
|
+
|
|
1643
|
+
.kanban-col-head {
|
|
1644
|
+
display: flex;
|
|
1645
|
+
justify-content: space-between;
|
|
1646
|
+
align-items: center;
|
|
1647
|
+
padding: 10px 14px;
|
|
1648
|
+
font-size: 11px;
|
|
1649
|
+
font-weight: 800;
|
|
1650
|
+
letter-spacing: 1px;
|
|
1651
|
+
text-transform: uppercase;
|
|
1652
|
+
border-bottom: 2px solid var(--line2);
|
|
1653
|
+
flex-shrink: 0;
|
|
1654
|
+
}
|
|
1655
|
+
|
|
1656
|
+
.kanban-col-head.do-now { border-bottom-color: #ef4444; color: #ef4444; }
|
|
1657
|
+
.kanban-col-head.schedule { border-bottom-color: #3b82f6; color: #3b82f6; }
|
|
1658
|
+
.kanban-col-head.delegate { border-bottom-color: #f97316; color: #f97316; }
|
|
1659
|
+
.kanban-col-head.done { border-bottom-color: #22c55e; color: #22c55e; }
|
|
1660
|
+
|
|
1661
|
+
.kanban-col-count {
|
|
1662
|
+
font-size: 12px;
|
|
1663
|
+
font-weight: 700;
|
|
1664
|
+
padding: 1px 8px;
|
|
1665
|
+
background: var(--paper2);
|
|
1666
|
+
border: 1px solid var(--line2);
|
|
1667
|
+
}
|
|
1668
|
+
|
|
1669
|
+
.kanban-col-body {
|
|
1670
|
+
flex: 1;
|
|
1671
|
+
padding: 8px;
|
|
1672
|
+
display: flex;
|
|
1673
|
+
flex-direction: column;
|
|
1674
|
+
gap: 8px;
|
|
1675
|
+
overflow-y: auto;
|
|
1676
|
+
max-height: 600px;
|
|
1677
|
+
min-height: 80px;
|
|
1678
|
+
transition: background 0.15s;
|
|
1679
|
+
}
|
|
1680
|
+
|
|
1681
|
+
.kanban-col-body.drag-over {
|
|
1682
|
+
background: var(--chip);
|
|
1683
|
+
}
|
|
1684
|
+
|
|
1685
|
+
.kanban-card {
|
|
1686
|
+
background: var(--paper);
|
|
1687
|
+
border: 1px solid var(--line2);
|
|
1688
|
+
padding: 10px 12px;
|
|
1689
|
+
cursor: grab;
|
|
1690
|
+
transition: box-shadow 0.15s, opacity 0.15s;
|
|
1691
|
+
display: flex;
|
|
1692
|
+
flex-direction: column;
|
|
1693
|
+
gap: 6px;
|
|
1694
|
+
}
|
|
1695
|
+
|
|
1696
|
+
.kanban-card:hover {
|
|
1697
|
+
box-shadow: var(--shadow2);
|
|
1698
|
+
}
|
|
1699
|
+
|
|
1700
|
+
.kanban-card.dragging {
|
|
1701
|
+
opacity: 0.4;
|
|
1702
|
+
}
|
|
1703
|
+
|
|
1704
|
+
.kanban-card-header {
|
|
1705
|
+
display: flex;
|
|
1706
|
+
align-items: flex-start;
|
|
1707
|
+
gap: 8px;
|
|
1708
|
+
}
|
|
1709
|
+
|
|
1710
|
+
.kanban-pri-dot {
|
|
1711
|
+
width: 8px;
|
|
1712
|
+
height: 8px;
|
|
1713
|
+
flex-shrink: 0;
|
|
1714
|
+
margin-top: 4px;
|
|
1715
|
+
}
|
|
1716
|
+
|
|
1717
|
+
.kanban-card-desc {
|
|
1718
|
+
font-size: 13px;
|
|
1719
|
+
font-weight: 600;
|
|
1720
|
+
color: var(--text);
|
|
1721
|
+
line-height: 1.3;
|
|
1722
|
+
word-break: break-word;
|
|
1723
|
+
}
|
|
1724
|
+
|
|
1725
|
+
.kanban-card-meta {
|
|
1726
|
+
display: flex;
|
|
1727
|
+
gap: 6px;
|
|
1728
|
+
flex-wrap: wrap;
|
|
1729
|
+
align-items: center;
|
|
1730
|
+
}
|
|
1731
|
+
|
|
1732
|
+
.kanban-tag {
|
|
1733
|
+
font-size: 10px;
|
|
1734
|
+
font-weight: 600;
|
|
1735
|
+
padding: 1px 6px;
|
|
1736
|
+
background: var(--chip);
|
|
1737
|
+
color: var(--primary);
|
|
1738
|
+
border: 1px solid var(--line2);
|
|
1739
|
+
font-family: var(--mono);
|
|
1740
|
+
}
|
|
1741
|
+
|
|
1742
|
+
.kanban-due {
|
|
1743
|
+
font-size: 10px;
|
|
1744
|
+
font-weight: 600;
|
|
1745
|
+
padding: 1px 6px;
|
|
1746
|
+
color: var(--muted);
|
|
1747
|
+
border: 1px solid var(--line2);
|
|
1748
|
+
}
|
|
1749
|
+
|
|
1750
|
+
.kanban-due.overdue {
|
|
1751
|
+
background: rgba(239, 68, 68, 0.1);
|
|
1752
|
+
color: #ef4444;
|
|
1753
|
+
border-color: rgba(239, 68, 68, 0.3);
|
|
1754
|
+
}
|
|
1755
|
+
|
|
1756
|
+
.kanban-card-actions {
|
|
1757
|
+
display: flex;
|
|
1758
|
+
gap: 4px;
|
|
1759
|
+
justify-content: flex-end;
|
|
1760
|
+
opacity: 0;
|
|
1761
|
+
transition: opacity 0.15s;
|
|
1762
|
+
}
|
|
1763
|
+
|
|
1764
|
+
.kanban-card:hover .kanban-card-actions {
|
|
1765
|
+
opacity: 1;
|
|
1766
|
+
}
|
|
1767
|
+
|
|
1768
|
+
.kanban-action-btn {
|
|
1769
|
+
background: var(--bg);
|
|
1770
|
+
border: 1px solid var(--line2);
|
|
1771
|
+
color: var(--muted);
|
|
1772
|
+
padding: 2px 8px;
|
|
1773
|
+
font-size: 12px;
|
|
1774
|
+
cursor: pointer;
|
|
1775
|
+
transition: var(--transition);
|
|
1776
|
+
}
|
|
1777
|
+
|
|
1778
|
+
.kanban-action-btn:hover {
|
|
1779
|
+
color: var(--text);
|
|
1780
|
+
background: var(--paper2);
|
|
1781
|
+
}
|
|
1782
|
+
|
|
1783
|
+
.kanban-action-btn.complete-btn:hover {
|
|
1784
|
+
color: #22c55e;
|
|
1785
|
+
border-color: #22c55e;
|
|
1786
|
+
}
|
|
1787
|
+
|
|
1788
|
+
.kanban-owner {
|
|
1789
|
+
font-size: 10px;
|
|
1790
|
+
color: var(--faint);
|
|
1791
|
+
font-style: italic;
|
|
1792
|
+
}
|
|
1793
|
+
|
|
1794
|
+
/* Kanban filter */
|
|
1795
|
+
.kanban-filter {
|
|
1796
|
+
background: var(--bg);
|
|
1797
|
+
border: 1px solid var(--line2);
|
|
1798
|
+
color: var(--text);
|
|
1799
|
+
padding: 5px 10px;
|
|
1800
|
+
font-size: 12px;
|
|
1801
|
+
font-family: var(--mono);
|
|
1802
|
+
min-width: 180px;
|
|
1803
|
+
}
|
|
1804
|
+
|
|
1805
|
+
/* Kanban blockers strip */
|
|
1806
|
+
.kanban-blockers-list {
|
|
1807
|
+
display: flex;
|
|
1808
|
+
flex-wrap: wrap;
|
|
1809
|
+
gap: 8px;
|
|
1810
|
+
}
|
|
1811
|
+
|
|
1812
|
+
.kanban-blocker-card {
|
|
1813
|
+
display: flex;
|
|
1814
|
+
align-items: center;
|
|
1815
|
+
gap: 8px;
|
|
1816
|
+
padding: 8px 12px;
|
|
1817
|
+
background: rgba(239, 68, 68, 0.04);
|
|
1818
|
+
border: 1px solid rgba(239, 68, 68, 0.15);
|
|
1819
|
+
border-left: 3px solid #ef4444;
|
|
1820
|
+
flex: 1 1 300px;
|
|
1821
|
+
max-width: 500px;
|
|
1822
|
+
}
|
|
1823
|
+
|
|
1824
|
+
.kanban-blocker-sev {
|
|
1825
|
+
font-size: 9px;
|
|
1826
|
+
font-weight: 800;
|
|
1827
|
+
letter-spacing: 0.5px;
|
|
1828
|
+
padding: 2px 6px;
|
|
1829
|
+
border: 1px solid;
|
|
1830
|
+
flex-shrink: 0;
|
|
1831
|
+
}
|
|
1832
|
+
|
|
1833
|
+
.kanban-blocker-title {
|
|
1834
|
+
font-size: 12px;
|
|
1835
|
+
font-weight: 600;
|
|
1836
|
+
color: var(--text);
|
|
1837
|
+
flex: 1;
|
|
1838
|
+
min-width: 0;
|
|
1839
|
+
overflow: hidden;
|
|
1840
|
+
text-overflow: ellipsis;
|
|
1841
|
+
white-space: nowrap;
|
|
1842
|
+
}
|
|
1843
|
+
|
|
1844
|
+
/* ── Quick-Add Modal ── */
|
|
1845
|
+
.qa-overlay {
|
|
1846
|
+
position: fixed;
|
|
1847
|
+
inset: 0;
|
|
1848
|
+
background: rgba(0, 0, 0, 0.5);
|
|
1849
|
+
z-index: 9999;
|
|
1850
|
+
display: flex;
|
|
1851
|
+
align-items: center;
|
|
1852
|
+
justify-content: center;
|
|
1853
|
+
}
|
|
1854
|
+
|
|
1855
|
+
.qa-modal {
|
|
1856
|
+
background: var(--bg);
|
|
1857
|
+
border: 1px solid var(--line2);
|
|
1858
|
+
box-shadow: var(--shadow);
|
|
1859
|
+
width: 440px;
|
|
1860
|
+
max-width: 95vw;
|
|
1861
|
+
padding: 16px;
|
|
1862
|
+
display: flex;
|
|
1863
|
+
flex-direction: column;
|
|
1864
|
+
gap: 10px;
|
|
1865
|
+
}
|
|
1866
|
+
|
|
1867
|
+
.qa-header {
|
|
1868
|
+
display: flex;
|
|
1869
|
+
justify-content: space-between;
|
|
1870
|
+
align-items: center;
|
|
1871
|
+
}
|
|
1872
|
+
|
|
1873
|
+
.qa-input {
|
|
1874
|
+
background: var(--paper);
|
|
1875
|
+
border: 1px solid var(--line2);
|
|
1876
|
+
color: var(--text);
|
|
1877
|
+
padding: 8px 10px;
|
|
1878
|
+
font-size: 13px;
|
|
1879
|
+
font-family: var(--sans);
|
|
1880
|
+
width: 100%;
|
|
1881
|
+
resize: none;
|
|
1882
|
+
}
|
|
1883
|
+
|
|
1884
|
+
.qa-input:focus {
|
|
1885
|
+
outline: none;
|
|
1886
|
+
border-color: var(--primary);
|
|
1887
|
+
}
|
|
1888
|
+
|
|
1889
|
+
.qa-select {
|
|
1890
|
+
background: var(--paper);
|
|
1891
|
+
border: 1px solid var(--line2);
|
|
1892
|
+
color: var(--text);
|
|
1893
|
+
padding: 6px 10px;
|
|
1894
|
+
font-size: 12px;
|
|
1895
|
+
flex: 1;
|
|
1896
|
+
}
|
|
1897
|
+
|
|
1898
|
+
.qa-row {
|
|
1899
|
+
display: flex;
|
|
1900
|
+
gap: 8px;
|
|
1901
|
+
align-items: center;
|
|
1902
|
+
}
|
|
1903
|
+
|
|
1904
|
+
/* ── Delta Banner ── */
|
|
1905
|
+
.delta-banner {
|
|
1906
|
+
display: flex;
|
|
1907
|
+
align-items: center;
|
|
1908
|
+
gap: 8px;
|
|
1909
|
+
padding: 8px 14px;
|
|
1910
|
+
margin-bottom: 12px;
|
|
1911
|
+
background: var(--chip);
|
|
1912
|
+
border: 1px solid var(--line2);
|
|
1913
|
+
font-size: 12px;
|
|
1914
|
+
color: var(--text);
|
|
1915
|
+
border-left: 3px solid var(--primary);
|
|
1600
1916
|
}
|