@vectoriox/iox-ui 5.43.0 → 5.45.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/design-core/index.d.ts +766 -3
- package/fesm2022/vectoriox-iox-ui-design-core.mjs +1033 -3
- package/fesm2022/vectoriox-iox-ui-design-core.mjs.map +1 -1
- package/fesm2022/vectoriox-iox-ui-generation-core.mjs +7 -1
- package/fesm2022/vectoriox-iox-ui-generation-core.mjs.map +1 -1
- package/fesm2022/vectoriox-iox-ui.mjs +177 -52
- package/fesm2022/vectoriox-iox-ui.mjs.map +1 -1
- package/generation-core/index.d.ts +3 -0
- package/index.d.ts +111 -23
- package/package.json +1 -1
- package/src/design-core/design-settings.ts +32 -3
- package/src/design-core/design-token.model.ts +23 -0
- package/src/design-core/flavor-spec.generated.ts +971 -0
- package/src/design-core/flavor-tokens.ts +2 -1
- package/src/design-core/public-api.ts +1 -0
- package/src/design-core/style-presets.ts +71 -0
- package/src/generation-core/site-spec.generated.ts +4 -1
- package/src/generation-core/validate-site-plan.ts +3 -0
|
@@ -1425,6 +1425,208 @@ const SPEC_AXES = {
|
|
|
1425
1425
|
"inverse-line": 0.03
|
|
1426
1426
|
}
|
|
1427
1427
|
}
|
|
1428
|
+
},
|
|
1429
|
+
"scrolls": {
|
|
1430
|
+
"normal": {
|
|
1431
|
+
"label": "Normal",
|
|
1432
|
+
"he": "רגילה",
|
|
1433
|
+
"hint": "The browser's own scrolling.",
|
|
1434
|
+
"lenis": null
|
|
1435
|
+
},
|
|
1436
|
+
"smooth": {
|
|
1437
|
+
"label": "Smooth",
|
|
1438
|
+
"he": "חלקה",
|
|
1439
|
+
"hint": "A short glide after each wheel turn — what every IOX site does today.",
|
|
1440
|
+
"lenis": {
|
|
1441
|
+
"duration": 1.2,
|
|
1442
|
+
"easing": "expo-out",
|
|
1443
|
+
"wheelMultiplier": 1,
|
|
1444
|
+
"syncTouch": false
|
|
1445
|
+
}
|
|
1446
|
+
},
|
|
1447
|
+
"extra": {
|
|
1448
|
+
"label": "Extra smooth",
|
|
1449
|
+
"he": "חלקה מאוד",
|
|
1450
|
+
"hint": "A longer, softer glide; each wheel turn moves a little less.",
|
|
1451
|
+
"lenis": {
|
|
1452
|
+
"duration": 1.8,
|
|
1453
|
+
"easing": "expo-out",
|
|
1454
|
+
"wheelMultiplier": 0.9,
|
|
1455
|
+
"syncTouch": false
|
|
1456
|
+
}
|
|
1457
|
+
}
|
|
1458
|
+
},
|
|
1459
|
+
"animations": {
|
|
1460
|
+
"still": {
|
|
1461
|
+
"label": "Still",
|
|
1462
|
+
"he": "ללא",
|
|
1463
|
+
"hint": "Nothing moves in as you scroll. Buttons and cards still respond to the pointer (Speed).",
|
|
1464
|
+
"parts": {}
|
|
1465
|
+
},
|
|
1466
|
+
"subtle": {
|
|
1467
|
+
"label": "Subtle",
|
|
1468
|
+
"he": "עדינה",
|
|
1469
|
+
"hint": "Each section's content fades in once, together.",
|
|
1470
|
+
"parts": {
|
|
1471
|
+
"content": {
|
|
1472
|
+
"type": "fadeIn",
|
|
1473
|
+
"duration": 500
|
|
1474
|
+
}
|
|
1475
|
+
}
|
|
1476
|
+
},
|
|
1477
|
+
"standard": {
|
|
1478
|
+
"label": "Standard",
|
|
1479
|
+
"he": "רגילה",
|
|
1480
|
+
"hint": "Headings rise in; cards, prices and steps follow one after another.",
|
|
1481
|
+
"parts": {
|
|
1482
|
+
"heading": {
|
|
1483
|
+
"type": "moveUp",
|
|
1484
|
+
"distance": 16,
|
|
1485
|
+
"duration": 500
|
|
1486
|
+
},
|
|
1487
|
+
"items": {
|
|
1488
|
+
"type": "moveUp",
|
|
1489
|
+
"distance": 16,
|
|
1490
|
+
"duration": 450,
|
|
1491
|
+
"stagger": 80,
|
|
1492
|
+
"cap": 6
|
|
1493
|
+
},
|
|
1494
|
+
"media": {
|
|
1495
|
+
"type": "fadeIn",
|
|
1496
|
+
"duration": 600
|
|
1497
|
+
}
|
|
1498
|
+
}
|
|
1499
|
+
},
|
|
1500
|
+
"lively": {
|
|
1501
|
+
"label": "Lively",
|
|
1502
|
+
"he": "תוססת",
|
|
1503
|
+
"hint": "Bigger, longer entrances; side-by-side rows slide in from their side; the hero's words fade in.",
|
|
1504
|
+
"parts": {
|
|
1505
|
+
"heroText": {
|
|
1506
|
+
"type": "fadeIn",
|
|
1507
|
+
"duration": 400
|
|
1508
|
+
},
|
|
1509
|
+
"heading": {
|
|
1510
|
+
"type": "moveUp",
|
|
1511
|
+
"distance": 24,
|
|
1512
|
+
"duration": 600
|
|
1513
|
+
},
|
|
1514
|
+
"items": {
|
|
1515
|
+
"type": "moveUp",
|
|
1516
|
+
"distance": 24,
|
|
1517
|
+
"duration": 600,
|
|
1518
|
+
"stagger": 100,
|
|
1519
|
+
"cap": 8
|
|
1520
|
+
},
|
|
1521
|
+
"media": {
|
|
1522
|
+
"type": "fadeIn",
|
|
1523
|
+
"duration": 700
|
|
1524
|
+
},
|
|
1525
|
+
"rowMedia": {
|
|
1526
|
+
"type": "moveLeft",
|
|
1527
|
+
"mirror": "moveRight",
|
|
1528
|
+
"distance": 24,
|
|
1529
|
+
"duration": 600
|
|
1530
|
+
}
|
|
1531
|
+
}
|
|
1532
|
+
}
|
|
1533
|
+
},
|
|
1534
|
+
"animationFamilies": {
|
|
1535
|
+
"nav": [],
|
|
1536
|
+
"footer": [],
|
|
1537
|
+
"hero": [
|
|
1538
|
+
"heroText"
|
|
1539
|
+
],
|
|
1540
|
+
"header": [
|
|
1541
|
+
"heading"
|
|
1542
|
+
],
|
|
1543
|
+
"detail": [
|
|
1544
|
+
"heading",
|
|
1545
|
+
"media"
|
|
1546
|
+
],
|
|
1547
|
+
"proof": [
|
|
1548
|
+
"content",
|
|
1549
|
+
"heading",
|
|
1550
|
+
"items"
|
|
1551
|
+
],
|
|
1552
|
+
"feature": [
|
|
1553
|
+
"content",
|
|
1554
|
+
"heading",
|
|
1555
|
+
"items",
|
|
1556
|
+
"media",
|
|
1557
|
+
"rowMedia"
|
|
1558
|
+
],
|
|
1559
|
+
"collection": [
|
|
1560
|
+
"content",
|
|
1561
|
+
"heading",
|
|
1562
|
+
"items"
|
|
1563
|
+
],
|
|
1564
|
+
"story": [
|
|
1565
|
+
"content",
|
|
1566
|
+
"heading",
|
|
1567
|
+
"media"
|
|
1568
|
+
],
|
|
1569
|
+
"cta": [
|
|
1570
|
+
"content",
|
|
1571
|
+
"heading"
|
|
1572
|
+
],
|
|
1573
|
+
"contact": [
|
|
1574
|
+
"content",
|
|
1575
|
+
"heading"
|
|
1576
|
+
],
|
|
1577
|
+
"faq": [
|
|
1578
|
+
"content",
|
|
1579
|
+
"heading"
|
|
1580
|
+
],
|
|
1581
|
+
"pricing": [
|
|
1582
|
+
"content",
|
|
1583
|
+
"heading",
|
|
1584
|
+
"items"
|
|
1585
|
+
]
|
|
1586
|
+
},
|
|
1587
|
+
"betweens": {
|
|
1588
|
+
"none": {
|
|
1589
|
+
"label": "None",
|
|
1590
|
+
"he": "ללא",
|
|
1591
|
+
"hint": "The next page simply appears.",
|
|
1592
|
+
"transition": "none"
|
|
1593
|
+
},
|
|
1594
|
+
"fade": {
|
|
1595
|
+
"label": "Fade",
|
|
1596
|
+
"he": "דהייה",
|
|
1597
|
+
"hint": "The page fades into the next.",
|
|
1598
|
+
"transition": "fade",
|
|
1599
|
+
"feel": "snappy"
|
|
1600
|
+
},
|
|
1601
|
+
"slide": {
|
|
1602
|
+
"label": "Slide",
|
|
1603
|
+
"he": "החלקה",
|
|
1604
|
+
"hint": "The next page pushes this one aside (from the left on a Hebrew site). On phones: Fade.",
|
|
1605
|
+
"transition": "move-left",
|
|
1606
|
+
"rtl": "move-right",
|
|
1607
|
+
"feel": "smooth",
|
|
1608
|
+
"phone": "fade"
|
|
1609
|
+
},
|
|
1610
|
+
"cinematic": {
|
|
1611
|
+
"label": "Cinematic",
|
|
1612
|
+
"he": "קולנועית",
|
|
1613
|
+
"hint": "This page sinks back while the next rises over it. On phones: Fade.",
|
|
1614
|
+
"transition": "parallax-up",
|
|
1615
|
+
"feel": "cinematic",
|
|
1616
|
+
"phone": "fade"
|
|
1617
|
+
}
|
|
1618
|
+
},
|
|
1619
|
+
"motionChoices": {
|
|
1620
|
+
"pre": {
|
|
1621
|
+
"scroll": "smooth",
|
|
1622
|
+
"animate": "still",
|
|
1623
|
+
"between": "cinematic"
|
|
1624
|
+
},
|
|
1625
|
+
"reduced": {
|
|
1626
|
+
"scroll": "normal",
|
|
1627
|
+
"animate": "still",
|
|
1628
|
+
"between": "none"
|
|
1629
|
+
}
|
|
1428
1630
|
}
|
|
1429
1631
|
};
|
|
1430
1632
|
const SPEC_SPRINGS = {
|
|
@@ -1437,6 +1639,773 @@ const SPEC_SPRINGS = {
|
|
|
1437
1639
|
}
|
|
1438
1640
|
}
|
|
1439
1641
|
};
|
|
1642
|
+
const SPEC_MOODS = {
|
|
1643
|
+
"calm": "Calm",
|
|
1644
|
+
"warm": "Warm",
|
|
1645
|
+
"natural": "Natural",
|
|
1646
|
+
"elegant": "Elegant",
|
|
1647
|
+
"luxurious": "Luxurious",
|
|
1648
|
+
"minimal": "Minimal",
|
|
1649
|
+
"professional": "Professional",
|
|
1650
|
+
"trustworthy": "Trustworthy",
|
|
1651
|
+
"friendly": "Friendly",
|
|
1652
|
+
"playful": "Playful",
|
|
1653
|
+
"bold": "Bold",
|
|
1654
|
+
"energetic": "Energetic",
|
|
1655
|
+
"dark": "Dark",
|
|
1656
|
+
"editorial": "Editorial",
|
|
1657
|
+
"technical": "Technical",
|
|
1658
|
+
"romantic": "Romantic",
|
|
1659
|
+
"crafted": "Hand-made"
|
|
1660
|
+
};
|
|
1661
|
+
const SPEC_STYLE_PRESETS = [
|
|
1662
|
+
{
|
|
1663
|
+
"id": "clear-care",
|
|
1664
|
+
"name": "Clear care",
|
|
1665
|
+
"flavorId": "crisp",
|
|
1666
|
+
"seed": "#0E7490",
|
|
1667
|
+
"tint": "subtle",
|
|
1668
|
+
"pairId": "manrope",
|
|
1669
|
+
"shape": "soft",
|
|
1670
|
+
"density": "regular",
|
|
1671
|
+
"motion": "standard",
|
|
1672
|
+
"pillButtons": false,
|
|
1673
|
+
"moves": {
|
|
1674
|
+
"scroll": "smooth",
|
|
1675
|
+
"animate": "standard",
|
|
1676
|
+
"between": "fade"
|
|
1677
|
+
},
|
|
1678
|
+
"modes": [
|
|
1679
|
+
"light"
|
|
1680
|
+
],
|
|
1681
|
+
"moods": [
|
|
1682
|
+
"trustworthy",
|
|
1683
|
+
"calm",
|
|
1684
|
+
"professional"
|
|
1685
|
+
],
|
|
1686
|
+
"uupm": [
|
|
1687
|
+
"Accessible & Ethical",
|
|
1688
|
+
"Minimalism & Swiss Style"
|
|
1689
|
+
],
|
|
1690
|
+
"blurb": "Clean, light and easy to read. Says \"you are in good hands\".",
|
|
1691
|
+
"slice": true
|
|
1692
|
+
},
|
|
1693
|
+
{
|
|
1694
|
+
"id": "swiss-grid",
|
|
1695
|
+
"name": "Swiss grid",
|
|
1696
|
+
"flavorId": "crisp",
|
|
1697
|
+
"seed": "#111827",
|
|
1698
|
+
"tint": "neutral",
|
|
1699
|
+
"pairId": "inter-tight",
|
|
1700
|
+
"shape": "sharp",
|
|
1701
|
+
"density": "compact",
|
|
1702
|
+
"motion": "snappy",
|
|
1703
|
+
"pillButtons": false,
|
|
1704
|
+
"moves": {
|
|
1705
|
+
"scroll": "normal",
|
|
1706
|
+
"animate": "standard",
|
|
1707
|
+
"between": "none"
|
|
1708
|
+
},
|
|
1709
|
+
"modes": [
|
|
1710
|
+
"light",
|
|
1711
|
+
"dark"
|
|
1712
|
+
],
|
|
1713
|
+
"moods": [
|
|
1714
|
+
"minimal",
|
|
1715
|
+
"professional",
|
|
1716
|
+
"technical"
|
|
1717
|
+
],
|
|
1718
|
+
"uupm": [
|
|
1719
|
+
"Minimalism & Swiss Style",
|
|
1720
|
+
"Swiss Modernism 2.0"
|
|
1721
|
+
],
|
|
1722
|
+
"blurb": "Black on white, a strict grid, nothing extra.",
|
|
1723
|
+
"slice": true
|
|
1724
|
+
},
|
|
1725
|
+
{
|
|
1726
|
+
"id": "trusted-advisor",
|
|
1727
|
+
"name": "Trusted advisor",
|
|
1728
|
+
"flavorId": "crisp",
|
|
1729
|
+
"seed": "#1E3A8A",
|
|
1730
|
+
"tint": "subtle",
|
|
1731
|
+
"pairId": "plex",
|
|
1732
|
+
"shape": "subtle",
|
|
1733
|
+
"density": "regular",
|
|
1734
|
+
"motion": "standard",
|
|
1735
|
+
"pillButtons": false,
|
|
1736
|
+
"moves": {
|
|
1737
|
+
"scroll": "normal",
|
|
1738
|
+
"animate": "standard",
|
|
1739
|
+
"between": "fade"
|
|
1740
|
+
},
|
|
1741
|
+
"modes": [
|
|
1742
|
+
"light"
|
|
1743
|
+
],
|
|
1744
|
+
"moods": [
|
|
1745
|
+
"trustworthy",
|
|
1746
|
+
"professional"
|
|
1747
|
+
],
|
|
1748
|
+
"uupm": [
|
|
1749
|
+
"Accessible & Ethical",
|
|
1750
|
+
"Trust & Authority (landing)"
|
|
1751
|
+
],
|
|
1752
|
+
"blurb": "Navy, plain type, firm edges. Serious without being cold.",
|
|
1753
|
+
"slice": true
|
|
1754
|
+
},
|
|
1755
|
+
{
|
|
1756
|
+
"id": "fresh-practice",
|
|
1757
|
+
"name": "Fresh practice",
|
|
1758
|
+
"flavorId": "crisp",
|
|
1759
|
+
"seed": "#0284C7",
|
|
1760
|
+
"tint": "rich",
|
|
1761
|
+
"pairId": "inter-tight",
|
|
1762
|
+
"shape": "round",
|
|
1763
|
+
"density": "airy",
|
|
1764
|
+
"motion": "calm",
|
|
1765
|
+
"pillButtons": true,
|
|
1766
|
+
"moves": {
|
|
1767
|
+
"scroll": "smooth",
|
|
1768
|
+
"animate": "subtle",
|
|
1769
|
+
"between": "fade"
|
|
1770
|
+
},
|
|
1771
|
+
"modes": [
|
|
1772
|
+
"light"
|
|
1773
|
+
],
|
|
1774
|
+
"moods": [
|
|
1775
|
+
"friendly",
|
|
1776
|
+
"calm",
|
|
1777
|
+
"trustworthy"
|
|
1778
|
+
],
|
|
1779
|
+
"uupm": [
|
|
1780
|
+
"Soft UI Evolution",
|
|
1781
|
+
"Accessible & Ethical"
|
|
1782
|
+
],
|
|
1783
|
+
"blurb": "Bright, soft and reassuring, with rounded buttons.",
|
|
1784
|
+
"slice": false
|
|
1785
|
+
},
|
|
1786
|
+
{
|
|
1787
|
+
"id": "gallery-minimal",
|
|
1788
|
+
"name": "Gallery minimal",
|
|
1789
|
+
"flavorId": "linen",
|
|
1790
|
+
"seed": "#3F4A5A",
|
|
1791
|
+
"tint": "neutral",
|
|
1792
|
+
"pairId": "instrument",
|
|
1793
|
+
"shape": "sharp",
|
|
1794
|
+
"density": "airy",
|
|
1795
|
+
"motion": "calm",
|
|
1796
|
+
"pillButtons": false,
|
|
1797
|
+
"moves": {
|
|
1798
|
+
"scroll": "extra",
|
|
1799
|
+
"animate": "subtle",
|
|
1800
|
+
"between": "fade"
|
|
1801
|
+
},
|
|
1802
|
+
"modes": [
|
|
1803
|
+
"light",
|
|
1804
|
+
"dark"
|
|
1805
|
+
],
|
|
1806
|
+
"moods": [
|
|
1807
|
+
"minimal",
|
|
1808
|
+
"elegant",
|
|
1809
|
+
"editorial"
|
|
1810
|
+
],
|
|
1811
|
+
"uupm": [
|
|
1812
|
+
"Exaggerated Minimalism",
|
|
1813
|
+
"Editorial Grid / Magazine"
|
|
1814
|
+
],
|
|
1815
|
+
"blurb": "White walls and a quiet serif. The work does the talking.",
|
|
1816
|
+
"slice": true
|
|
1817
|
+
},
|
|
1818
|
+
{
|
|
1819
|
+
"id": "warm-editorial",
|
|
1820
|
+
"name": "Warm editorial",
|
|
1821
|
+
"flavorId": "linen",
|
|
1822
|
+
"seed": "#9A4F2B",
|
|
1823
|
+
"tint": "subtle",
|
|
1824
|
+
"pairId": "fraunces",
|
|
1825
|
+
"shape": "sharp",
|
|
1826
|
+
"density": "airy",
|
|
1827
|
+
"motion": "calm",
|
|
1828
|
+
"pillButtons": false,
|
|
1829
|
+
"moves": {
|
|
1830
|
+
"scroll": "smooth",
|
|
1831
|
+
"animate": "subtle",
|
|
1832
|
+
"between": "fade"
|
|
1833
|
+
},
|
|
1834
|
+
"modes": [
|
|
1835
|
+
"light"
|
|
1836
|
+
],
|
|
1837
|
+
"moods": [
|
|
1838
|
+
"warm",
|
|
1839
|
+
"editorial",
|
|
1840
|
+
"crafted"
|
|
1841
|
+
],
|
|
1842
|
+
"uupm": [
|
|
1843
|
+
"Editorial Grid / Magazine",
|
|
1844
|
+
"Nature Distilled"
|
|
1845
|
+
],
|
|
1846
|
+
"blurb": "Cream paper, terracotta and a soft serif, like a good magazine.",
|
|
1847
|
+
"slice": true
|
|
1848
|
+
},
|
|
1849
|
+
{
|
|
1850
|
+
"id": "soft-spa",
|
|
1851
|
+
"name": "Soft spa",
|
|
1852
|
+
"flavorId": "linen",
|
|
1853
|
+
"seed": "#7D4E5E",
|
|
1854
|
+
"tint": "rich",
|
|
1855
|
+
"pairId": "cormorant",
|
|
1856
|
+
"shape": "soft",
|
|
1857
|
+
"density": "airy",
|
|
1858
|
+
"motion": "calm",
|
|
1859
|
+
"pillButtons": false,
|
|
1860
|
+
"moves": {
|
|
1861
|
+
"scroll": "extra",
|
|
1862
|
+
"animate": "subtle",
|
|
1863
|
+
"between": "fade"
|
|
1864
|
+
},
|
|
1865
|
+
"modes": [
|
|
1866
|
+
"light"
|
|
1867
|
+
],
|
|
1868
|
+
"moods": [
|
|
1869
|
+
"calm",
|
|
1870
|
+
"elegant",
|
|
1871
|
+
"natural"
|
|
1872
|
+
],
|
|
1873
|
+
"uupm": [
|
|
1874
|
+
"Soft UI Evolution",
|
|
1875
|
+
"Nature Distilled"
|
|
1876
|
+
],
|
|
1877
|
+
"blurb": "Rose-tinted cream, a fine serif and slow, gentle motion.",
|
|
1878
|
+
"slice": true
|
|
1879
|
+
},
|
|
1880
|
+
{
|
|
1881
|
+
"id": "quiet-luxury",
|
|
1882
|
+
"name": "Quiet luxury",
|
|
1883
|
+
"flavorId": "linen",
|
|
1884
|
+
"seed": "#7A5B36",
|
|
1885
|
+
"tint": "subtle",
|
|
1886
|
+
"pairId": "cormorant",
|
|
1887
|
+
"shape": "sharp",
|
|
1888
|
+
"density": "airy",
|
|
1889
|
+
"motion": "calm",
|
|
1890
|
+
"pillButtons": false,
|
|
1891
|
+
"moves": {
|
|
1892
|
+
"scroll": "extra",
|
|
1893
|
+
"animate": "subtle",
|
|
1894
|
+
"between": "cinematic"
|
|
1895
|
+
},
|
|
1896
|
+
"modes": [
|
|
1897
|
+
"light",
|
|
1898
|
+
"dark"
|
|
1899
|
+
],
|
|
1900
|
+
"moods": [
|
|
1901
|
+
"luxurious",
|
|
1902
|
+
"elegant",
|
|
1903
|
+
"calm"
|
|
1904
|
+
],
|
|
1905
|
+
"uupm": [
|
|
1906
|
+
"Exaggerated Minimalism",
|
|
1907
|
+
"Liquid Glass (luxury rows, without the glass)"
|
|
1908
|
+
],
|
|
1909
|
+
"blurb": "Bronze on warm white. Expensive, never loud.",
|
|
1910
|
+
"slice": false
|
|
1911
|
+
},
|
|
1912
|
+
{
|
|
1913
|
+
"id": "after-dark",
|
|
1914
|
+
"name": "After dark",
|
|
1915
|
+
"flavorId": "midnight",
|
|
1916
|
+
"seed": "#DB2777",
|
|
1917
|
+
"tint": "subtle",
|
|
1918
|
+
"pairId": "grotesk",
|
|
1919
|
+
"shape": "soft",
|
|
1920
|
+
"density": "regular",
|
|
1921
|
+
"motion": "lively",
|
|
1922
|
+
"pillButtons": false,
|
|
1923
|
+
"moves": {
|
|
1924
|
+
"scroll": "smooth",
|
|
1925
|
+
"animate": "lively",
|
|
1926
|
+
"between": "slide"
|
|
1927
|
+
},
|
|
1928
|
+
"modes": [
|
|
1929
|
+
"dark"
|
|
1930
|
+
],
|
|
1931
|
+
"moods": [
|
|
1932
|
+
"bold",
|
|
1933
|
+
"energetic",
|
|
1934
|
+
"dark"
|
|
1935
|
+
],
|
|
1936
|
+
"uupm": [
|
|
1937
|
+
"Dark Mode (OLED)",
|
|
1938
|
+
"Vibrant & Block-based"
|
|
1939
|
+
],
|
|
1940
|
+
"blurb": "A night out: dark rooms, one bright colour, lively motion.",
|
|
1941
|
+
"slice": false
|
|
1942
|
+
},
|
|
1943
|
+
{
|
|
1944
|
+
"id": "ink-studio",
|
|
1945
|
+
"name": "Ink studio",
|
|
1946
|
+
"flavorId": "midnight",
|
|
1947
|
+
"seed": "#EA580C",
|
|
1948
|
+
"tint": "neutral",
|
|
1949
|
+
"pairId": "inter-tight",
|
|
1950
|
+
"shape": "sharp",
|
|
1951
|
+
"density": "compact",
|
|
1952
|
+
"motion": "snappy",
|
|
1953
|
+
"pillButtons": false,
|
|
1954
|
+
"moves": {
|
|
1955
|
+
"scroll": "normal",
|
|
1956
|
+
"animate": "standard",
|
|
1957
|
+
"between": "slide"
|
|
1958
|
+
},
|
|
1959
|
+
"modes": [
|
|
1960
|
+
"dark"
|
|
1961
|
+
],
|
|
1962
|
+
"moods": [
|
|
1963
|
+
"bold",
|
|
1964
|
+
"dark",
|
|
1965
|
+
"crafted"
|
|
1966
|
+
],
|
|
1967
|
+
"uupm": [
|
|
1968
|
+
"Dark Mode (OLED)",
|
|
1969
|
+
"Brutalism"
|
|
1970
|
+
],
|
|
1971
|
+
"blurb": "Black, sharp and orange. A shop with attitude.",
|
|
1972
|
+
"slice": false
|
|
1973
|
+
},
|
|
1974
|
+
{
|
|
1975
|
+
"id": "night-gallery",
|
|
1976
|
+
"name": "Night gallery",
|
|
1977
|
+
"flavorId": "midnight",
|
|
1978
|
+
"seed": "#8B9BB4",
|
|
1979
|
+
"tint": "neutral",
|
|
1980
|
+
"pairId": "geist",
|
|
1981
|
+
"shape": "sharp",
|
|
1982
|
+
"density": "airy",
|
|
1983
|
+
"motion": "calm",
|
|
1984
|
+
"pillButtons": false,
|
|
1985
|
+
"moves": {
|
|
1986
|
+
"scroll": "extra",
|
|
1987
|
+
"animate": "subtle",
|
|
1988
|
+
"between": "cinematic"
|
|
1989
|
+
},
|
|
1990
|
+
"modes": [
|
|
1991
|
+
"dark",
|
|
1992
|
+
"light"
|
|
1993
|
+
],
|
|
1994
|
+
"moods": [
|
|
1995
|
+
"minimal",
|
|
1996
|
+
"dark",
|
|
1997
|
+
"editorial"
|
|
1998
|
+
],
|
|
1999
|
+
"uupm": [
|
|
2000
|
+
"Dark Mode (OLED)",
|
|
2001
|
+
"Minimalism & Swiss Style"
|
|
2002
|
+
],
|
|
2003
|
+
"blurb": "Pictures on black, like a darkened gallery.",
|
|
2004
|
+
"slice": true
|
|
2005
|
+
},
|
|
2006
|
+
{
|
|
2007
|
+
"id": "tech-studio",
|
|
2008
|
+
"name": "Tech studio",
|
|
2009
|
+
"flavorId": "midnight",
|
|
2010
|
+
"seed": "#059669",
|
|
2011
|
+
"tint": "subtle",
|
|
2012
|
+
"pairId": "geist",
|
|
2013
|
+
"shape": "soft",
|
|
2014
|
+
"density": "regular",
|
|
2015
|
+
"motion": "standard",
|
|
2016
|
+
"pillButtons": false,
|
|
2017
|
+
"moves": {
|
|
2018
|
+
"scroll": "normal",
|
|
2019
|
+
"animate": "standard",
|
|
2020
|
+
"between": "fade"
|
|
2021
|
+
},
|
|
2022
|
+
"modes": [
|
|
2023
|
+
"dark",
|
|
2024
|
+
"light"
|
|
2025
|
+
],
|
|
2026
|
+
"moods": [
|
|
2027
|
+
"technical",
|
|
2028
|
+
"bold",
|
|
2029
|
+
"professional"
|
|
2030
|
+
],
|
|
2031
|
+
"uupm": [
|
|
2032
|
+
"Dark Mode (OLED)",
|
|
2033
|
+
"Minimalism & Swiss Style"
|
|
2034
|
+
],
|
|
2035
|
+
"blurb": "Dark, precise and modern, for people who build things.",
|
|
2036
|
+
"slice": false
|
|
2037
|
+
},
|
|
2038
|
+
{
|
|
2039
|
+
"id": "morning-glass",
|
|
2040
|
+
"name": "Morning glass",
|
|
2041
|
+
"flavorId": "glass",
|
|
2042
|
+
"seed": "#0E8A89",
|
|
2043
|
+
"tint": "subtle",
|
|
2044
|
+
"pairId": "figtree",
|
|
2045
|
+
"shape": "round",
|
|
2046
|
+
"density": "regular",
|
|
2047
|
+
"motion": "calm",
|
|
2048
|
+
"pillButtons": true,
|
|
2049
|
+
"moves": {
|
|
2050
|
+
"scroll": "smooth",
|
|
2051
|
+
"animate": "subtle",
|
|
2052
|
+
"between": "fade"
|
|
2053
|
+
},
|
|
2054
|
+
"modes": [
|
|
2055
|
+
"light"
|
|
2056
|
+
],
|
|
2057
|
+
"moods": [
|
|
2058
|
+
"calm",
|
|
2059
|
+
"friendly",
|
|
2060
|
+
"natural"
|
|
2061
|
+
],
|
|
2062
|
+
"uupm": [
|
|
2063
|
+
"Glassmorphism",
|
|
2064
|
+
"Soft UI Evolution"
|
|
2065
|
+
],
|
|
2066
|
+
"blurb": "Frosted panels over a soft teal light. Fresh and calm.",
|
|
2067
|
+
"slice": true
|
|
2068
|
+
},
|
|
2069
|
+
{
|
|
2070
|
+
"id": "holiday-light",
|
|
2071
|
+
"name": "Holiday light",
|
|
2072
|
+
"flavorId": "glass",
|
|
2073
|
+
"seed": "#0A66E8",
|
|
2074
|
+
"tint": "rich",
|
|
2075
|
+
"pairId": "jakarta",
|
|
2076
|
+
"shape": "round",
|
|
2077
|
+
"density": "regular",
|
|
2078
|
+
"motion": "lively",
|
|
2079
|
+
"pillButtons": true,
|
|
2080
|
+
"moves": {
|
|
2081
|
+
"scroll": "smooth",
|
|
2082
|
+
"animate": "lively",
|
|
2083
|
+
"between": "slide"
|
|
2084
|
+
},
|
|
2085
|
+
"modes": [
|
|
2086
|
+
"light"
|
|
2087
|
+
],
|
|
2088
|
+
"moods": [
|
|
2089
|
+
"friendly",
|
|
2090
|
+
"energetic"
|
|
2091
|
+
],
|
|
2092
|
+
"uupm": [
|
|
2093
|
+
"Liquid Glass",
|
|
2094
|
+
"Glassmorphism"
|
|
2095
|
+
],
|
|
2096
|
+
"blurb": "Sea-blue glass and big photos. Makes people want to go.",
|
|
2097
|
+
"slice": false
|
|
2098
|
+
},
|
|
2099
|
+
{
|
|
2100
|
+
"id": "frosted-portfolio",
|
|
2101
|
+
"name": "Frosted portfolio",
|
|
2102
|
+
"flavorId": "glass",
|
|
2103
|
+
"seed": "#1F2937",
|
|
2104
|
+
"tint": "neutral",
|
|
2105
|
+
"pairId": "manrope",
|
|
2106
|
+
"shape": "round",
|
|
2107
|
+
"density": "airy",
|
|
2108
|
+
"motion": "calm",
|
|
2109
|
+
"pillButtons": true,
|
|
2110
|
+
"moves": {
|
|
2111
|
+
"scroll": "extra",
|
|
2112
|
+
"animate": "subtle",
|
|
2113
|
+
"between": "cinematic"
|
|
2114
|
+
},
|
|
2115
|
+
"modes": [
|
|
2116
|
+
"light",
|
|
2117
|
+
"dark"
|
|
2118
|
+
],
|
|
2119
|
+
"moods": [
|
|
2120
|
+
"minimal",
|
|
2121
|
+
"elegant"
|
|
2122
|
+
],
|
|
2123
|
+
"uupm": [
|
|
2124
|
+
"Glassmorphism",
|
|
2125
|
+
"Spatial UI (VisionOS)"
|
|
2126
|
+
],
|
|
2127
|
+
"blurb": "Grey glass and lots of space around your pictures.",
|
|
2128
|
+
"slice": true
|
|
2129
|
+
},
|
|
2130
|
+
{
|
|
2131
|
+
"id": "coral-studio",
|
|
2132
|
+
"name": "Coral studio",
|
|
2133
|
+
"flavorId": "glass",
|
|
2134
|
+
"seed": "#E5484D",
|
|
2135
|
+
"tint": "subtle",
|
|
2136
|
+
"pairId": "figtree",
|
|
2137
|
+
"shape": "round",
|
|
2138
|
+
"density": "regular",
|
|
2139
|
+
"motion": "lively",
|
|
2140
|
+
"pillButtons": true,
|
|
2141
|
+
"moves": {
|
|
2142
|
+
"scroll": "smooth",
|
|
2143
|
+
"animate": "lively",
|
|
2144
|
+
"between": "slide"
|
|
2145
|
+
},
|
|
2146
|
+
"modes": [
|
|
2147
|
+
"light"
|
|
2148
|
+
],
|
|
2149
|
+
"moods": [
|
|
2150
|
+
"energetic",
|
|
2151
|
+
"friendly"
|
|
2152
|
+
],
|
|
2153
|
+
"uupm": [
|
|
2154
|
+
"Glassmorphism",
|
|
2155
|
+
"Vibrant & Block-based"
|
|
2156
|
+
],
|
|
2157
|
+
"blurb": "Warm coral and bouncy buttons. Full of energy.",
|
|
2158
|
+
"slice": false
|
|
2159
|
+
},
|
|
2160
|
+
{
|
|
2161
|
+
"id": "corner-cafe",
|
|
2162
|
+
"name": "Corner café",
|
|
2163
|
+
"flavorId": "bloom",
|
|
2164
|
+
"seed": "#9C4146",
|
|
2165
|
+
"tint": "subtle",
|
|
2166
|
+
"pairId": "bricolage",
|
|
2167
|
+
"shape": "bubbly",
|
|
2168
|
+
"density": "regular",
|
|
2169
|
+
"motion": "lively",
|
|
2170
|
+
"pillButtons": true,
|
|
2171
|
+
"moves": {
|
|
2172
|
+
"scroll": "smooth",
|
|
2173
|
+
"animate": "lively",
|
|
2174
|
+
"between": "slide"
|
|
2175
|
+
},
|
|
2176
|
+
"modes": [
|
|
2177
|
+
"light"
|
|
2178
|
+
],
|
|
2179
|
+
"moods": [
|
|
2180
|
+
"warm",
|
|
2181
|
+
"friendly",
|
|
2182
|
+
"playful"
|
|
2183
|
+
],
|
|
2184
|
+
"uupm": [
|
|
2185
|
+
"Vibrant & Block-based",
|
|
2186
|
+
"Soft UI Evolution"
|
|
2187
|
+
],
|
|
2188
|
+
"blurb": "Berry red, round shapes, a cheerful headline face.",
|
|
2189
|
+
"slice": true
|
|
2190
|
+
},
|
|
2191
|
+
{
|
|
2192
|
+
"id": "kind-community",
|
|
2193
|
+
"name": "Kind community",
|
|
2194
|
+
"flavorId": "bloom",
|
|
2195
|
+
"seed": "#3B6939",
|
|
2196
|
+
"tint": "subtle",
|
|
2197
|
+
"pairId": "nunito",
|
|
2198
|
+
"shape": "bubbly",
|
|
2199
|
+
"density": "regular",
|
|
2200
|
+
"motion": "standard",
|
|
2201
|
+
"pillButtons": true,
|
|
2202
|
+
"moves": {
|
|
2203
|
+
"scroll": "normal",
|
|
2204
|
+
"animate": "standard",
|
|
2205
|
+
"between": "fade"
|
|
2206
|
+
},
|
|
2207
|
+
"modes": [
|
|
2208
|
+
"light"
|
|
2209
|
+
],
|
|
2210
|
+
"moods": [
|
|
2211
|
+
"friendly",
|
|
2212
|
+
"natural",
|
|
2213
|
+
"trustworthy"
|
|
2214
|
+
],
|
|
2215
|
+
"uupm": [
|
|
2216
|
+
"Accessible & Ethical",
|
|
2217
|
+
"Organic Biophilic"
|
|
2218
|
+
],
|
|
2219
|
+
"blurb": "Leaf green and soft, open shapes. Welcoming to everyone.",
|
|
2220
|
+
"slice": false
|
|
2221
|
+
},
|
|
2222
|
+
{
|
|
2223
|
+
"id": "little-ones",
|
|
2224
|
+
"name": "Little ones",
|
|
2225
|
+
"flavorId": "bloom",
|
|
2226
|
+
"seed": "#006A6A",
|
|
2227
|
+
"tint": "rich",
|
|
2228
|
+
"pairId": "sans-flex",
|
|
2229
|
+
"shape": "bubbly",
|
|
2230
|
+
"density": "regular",
|
|
2231
|
+
"motion": "lively",
|
|
2232
|
+
"pillButtons": true,
|
|
2233
|
+
"moves": {
|
|
2234
|
+
"scroll": "normal",
|
|
2235
|
+
"animate": "lively",
|
|
2236
|
+
"between": "slide"
|
|
2237
|
+
},
|
|
2238
|
+
"modes": [
|
|
2239
|
+
"light"
|
|
2240
|
+
],
|
|
2241
|
+
"moods": [
|
|
2242
|
+
"playful",
|
|
2243
|
+
"friendly"
|
|
2244
|
+
],
|
|
2245
|
+
"uupm": [
|
|
2246
|
+
"Claymorphism",
|
|
2247
|
+
"Vibrant & Block-based"
|
|
2248
|
+
],
|
|
2249
|
+
"blurb": "Teal, chunky and playful. Made for families.",
|
|
2250
|
+
"slice": false
|
|
2251
|
+
},
|
|
2252
|
+
{
|
|
2253
|
+
"id": "garden-party",
|
|
2254
|
+
"name": "Garden party",
|
|
2255
|
+
"flavorId": "bloom",
|
|
2256
|
+
"seed": "#7D5260",
|
|
2257
|
+
"tint": "subtle",
|
|
2258
|
+
"pairId": "bricolage",
|
|
2259
|
+
"shape": "bubbly",
|
|
2260
|
+
"density": "airy",
|
|
2261
|
+
"motion": "standard",
|
|
2262
|
+
"pillButtons": true,
|
|
2263
|
+
"moves": {
|
|
2264
|
+
"scroll": "smooth",
|
|
2265
|
+
"animate": "standard",
|
|
2266
|
+
"between": "fade"
|
|
2267
|
+
},
|
|
2268
|
+
"modes": [
|
|
2269
|
+
"light"
|
|
2270
|
+
],
|
|
2271
|
+
"moods": [
|
|
2272
|
+
"romantic",
|
|
2273
|
+
"warm",
|
|
2274
|
+
"friendly"
|
|
2275
|
+
],
|
|
2276
|
+
"uupm": [
|
|
2277
|
+
"Soft UI Evolution",
|
|
2278
|
+
"Organic Biophilic"
|
|
2279
|
+
],
|
|
2280
|
+
"blurb": "Dusty rose and soft lavender light. A celebration.",
|
|
2281
|
+
"slice": true
|
|
2282
|
+
},
|
|
2283
|
+
{
|
|
2284
|
+
"id": "bold-maker",
|
|
2285
|
+
"name": "Bold maker",
|
|
2286
|
+
"flavorId": "pop",
|
|
2287
|
+
"seed": "#FF5C39",
|
|
2288
|
+
"tint": "subtle",
|
|
2289
|
+
"pairId": "grotesk",
|
|
2290
|
+
"shape": "subtle",
|
|
2291
|
+
"density": "compact",
|
|
2292
|
+
"motion": "snappy",
|
|
2293
|
+
"pillButtons": false,
|
|
2294
|
+
"moves": {
|
|
2295
|
+
"scroll": "normal",
|
|
2296
|
+
"animate": "lively",
|
|
2297
|
+
"between": "slide"
|
|
2298
|
+
},
|
|
2299
|
+
"modes": [
|
|
2300
|
+
"light"
|
|
2301
|
+
],
|
|
2302
|
+
"moods": [
|
|
2303
|
+
"bold",
|
|
2304
|
+
"playful",
|
|
2305
|
+
"crafted"
|
|
2306
|
+
],
|
|
2307
|
+
"uupm": [
|
|
2308
|
+
"Neubrutalism",
|
|
2309
|
+
"Vibrant & Block-based"
|
|
2310
|
+
],
|
|
2311
|
+
"blurb": "Thick outlines and orange. Proud of what you make.",
|
|
2312
|
+
"slice": true
|
|
2313
|
+
},
|
|
2314
|
+
{
|
|
2315
|
+
"id": "festival",
|
|
2316
|
+
"name": "Festival",
|
|
2317
|
+
"flavorId": "pop",
|
|
2318
|
+
"seed": "#FF4FA3",
|
|
2319
|
+
"tint": "subtle",
|
|
2320
|
+
"pairId": "archivo",
|
|
2321
|
+
"shape": "subtle",
|
|
2322
|
+
"density": "compact",
|
|
2323
|
+
"motion": "snappy",
|
|
2324
|
+
"pillButtons": false,
|
|
2325
|
+
"moves": {
|
|
2326
|
+
"scroll": "normal",
|
|
2327
|
+
"animate": "lively",
|
|
2328
|
+
"between": "slide"
|
|
2329
|
+
},
|
|
2330
|
+
"modes": [
|
|
2331
|
+
"light",
|
|
2332
|
+
"dark"
|
|
2333
|
+
],
|
|
2334
|
+
"moods": [
|
|
2335
|
+
"energetic",
|
|
2336
|
+
"bold",
|
|
2337
|
+
"playful"
|
|
2338
|
+
],
|
|
2339
|
+
"uupm": [
|
|
2340
|
+
"Memphis Design",
|
|
2341
|
+
"Vibrant & Block-based"
|
|
2342
|
+
],
|
|
2343
|
+
"blurb": "Pink, heavy type, poster energy.",
|
|
2344
|
+
"slice": false
|
|
2345
|
+
},
|
|
2346
|
+
{
|
|
2347
|
+
"id": "zine",
|
|
2348
|
+
"name": "Zine",
|
|
2349
|
+
"flavorId": "pop",
|
|
2350
|
+
"seed": "#3D5AFE",
|
|
2351
|
+
"tint": "neutral",
|
|
2352
|
+
"pairId": "syne",
|
|
2353
|
+
"shape": "sharp",
|
|
2354
|
+
"density": "regular",
|
|
2355
|
+
"motion": "snappy",
|
|
2356
|
+
"pillButtons": false,
|
|
2357
|
+
"moves": {
|
|
2358
|
+
"scroll": "normal",
|
|
2359
|
+
"animate": "standard",
|
|
2360
|
+
"between": "slide"
|
|
2361
|
+
},
|
|
2362
|
+
"modes": [
|
|
2363
|
+
"light"
|
|
2364
|
+
],
|
|
2365
|
+
"moods": [
|
|
2366
|
+
"bold",
|
|
2367
|
+
"editorial",
|
|
2368
|
+
"playful"
|
|
2369
|
+
],
|
|
2370
|
+
"uupm": [
|
|
2371
|
+
"Brutalism",
|
|
2372
|
+
"Anti-Polish / Raw Aesthetic"
|
|
2373
|
+
],
|
|
2374
|
+
"blurb": "Electric blue and an odd, wide face. Made by hand, on purpose.",
|
|
2375
|
+
"slice": false
|
|
2376
|
+
},
|
|
2377
|
+
{
|
|
2378
|
+
"id": "fresh-market",
|
|
2379
|
+
"name": "Fresh market",
|
|
2380
|
+
"flavorId": "pop",
|
|
2381
|
+
"seed": "#00B86B",
|
|
2382
|
+
"tint": "subtle",
|
|
2383
|
+
"pairId": "grotesk",
|
|
2384
|
+
"shape": "subtle",
|
|
2385
|
+
"density": "regular",
|
|
2386
|
+
"motion": "snappy",
|
|
2387
|
+
"pillButtons": false,
|
|
2388
|
+
"moves": {
|
|
2389
|
+
"scroll": "normal",
|
|
2390
|
+
"animate": "standard",
|
|
2391
|
+
"between": "slide"
|
|
2392
|
+
},
|
|
2393
|
+
"modes": [
|
|
2394
|
+
"light"
|
|
2395
|
+
],
|
|
2396
|
+
"moods": [
|
|
2397
|
+
"energetic",
|
|
2398
|
+
"friendly",
|
|
2399
|
+
"natural"
|
|
2400
|
+
],
|
|
2401
|
+
"uupm": [
|
|
2402
|
+
"Vibrant & Block-based",
|
|
2403
|
+
"Flat Design"
|
|
2404
|
+
],
|
|
2405
|
+
"blurb": "Green and bright, like a market stall in the morning.",
|
|
2406
|
+
"slice": false
|
|
2407
|
+
}
|
|
2408
|
+
];
|
|
1440
2409
|
const SPEC_FONTS = {
|
|
1441
2410
|
"Inter": "Inter:wght@300;400;500;600;700",
|
|
1442
2411
|
"Inter Tight": "Inter+Tight:wght@500;600;700",
|
|
@@ -14016,6 +14985,13 @@ const DESIGN_TOKEN_GROUPS = ['colour', 'type', 'shape', 'depth', 'space', 'motio
|
|
|
14016
14985
|
const TINT_IDS = Object.keys(SPEC_AXES.tints);
|
|
14017
14986
|
/** What a studio that stored its look BEFORE the tint existed wears: exactly the look's own palette. */
|
|
14018
14987
|
const PRE_TINT_DEFAULT = 'neutral';
|
|
14988
|
+
const SCROLL_IDS = Object.keys(SPEC_AXES.scrolls);
|
|
14989
|
+
const ANIMATE_IDS = Object.keys(SPEC_AXES.animations);
|
|
14990
|
+
const BETWEEN_IDS = Object.keys(SPEC_AXES.betweens);
|
|
14991
|
+
/** What a look stored BEFORE rev 3.1 wears: exactly what every live site did (Smooth · Still · Cinematic). */
|
|
14992
|
+
const PRE_MOTION = SPEC_AXES.motionChoices.pre;
|
|
14993
|
+
/** What a visitor who asks for reduced motion always gets, whatever the look chose. */
|
|
14994
|
+
const REDUCED_DESIGN_MOTION = SPEC_AXES.motionChoices.reduced;
|
|
14019
14995
|
/** The spec's flavors, typed. Assignment here is the compile-time proof that the generated
|
|
14020
14996
|
* data fits `FlavorPackV2`. */
|
|
14021
14997
|
const SPEC_FLAVORS = SPEC_FLAVOR_PACKS;
|
|
@@ -16503,6 +17479,7 @@ function defaultDesignChoices(pack) {
|
|
|
16503
17479
|
seed: pack.seed,
|
|
16504
17480
|
pairId: pack.pairs[0]?.id ?? '',
|
|
16505
17481
|
...pack.defaults,
|
|
17482
|
+
...PRE_MOTION,
|
|
16506
17483
|
};
|
|
16507
17484
|
}
|
|
16508
17485
|
/**
|
|
@@ -16830,6 +17807,9 @@ var DesignConfigKey;
|
|
|
16830
17807
|
DesignConfigKey["Mode"] = "mode";
|
|
16831
17808
|
DesignConfigKey["Tint"] = "tint";
|
|
16832
17809
|
DesignConfigKey["Fonts"] = "fonts";
|
|
17810
|
+
DesignConfigKey["Scroll"] = "scroll";
|
|
17811
|
+
DesignConfigKey["Animate"] = "animate";
|
|
17812
|
+
DesignConfigKey["Between"] = "between";
|
|
16833
17813
|
DesignConfigKey["Revert"] = "revert";
|
|
16834
17814
|
})(DesignConfigKey || (DesignConfigKey = {}));
|
|
16835
17815
|
const MODES = SPEC_AXES.modes;
|
|
@@ -16907,6 +17887,15 @@ function resolveDesignChoices(partial) {
|
|
|
16907
17887
|
mode: (MODES.includes(asString(partial?.mode) ?? '') ? asString(partial?.mode) : pack.defaults.mode),
|
|
16908
17888
|
tint: keyOf(SPEC_AXES.tints, asString(partial?.tint)) ?? pack.defaults.tint,
|
|
16909
17889
|
...(fonts ? { fonts } : {}),
|
|
17890
|
+
...resolveDesignMotion(partial),
|
|
17891
|
+
};
|
|
17892
|
+
}
|
|
17893
|
+
/** The look's motion, completed: an absent or unknown choice reads `PRE_MOTION` — what the site already does. */
|
|
17894
|
+
function resolveDesignMotion(partial) {
|
|
17895
|
+
return {
|
|
17896
|
+
scroll: keyOf(SPEC_AXES.scrolls, asString(partial?.scroll)) ?? PRE_MOTION.scroll,
|
|
17897
|
+
animate: keyOf(SPEC_AXES.animations, asString(partial?.animate)) ?? PRE_MOTION.animate,
|
|
17898
|
+
between: keyOf(SPEC_AXES.betweens, asString(partial?.between)) ?? PRE_MOTION.between,
|
|
16910
17899
|
};
|
|
16911
17900
|
}
|
|
16912
17901
|
/** The pack's own defaults for `flavorId` — what picking a card means before anything is tuned. */
|
|
@@ -16916,13 +17905,14 @@ function packDesignChoices(flavorId) {
|
|
|
16916
17905
|
/**
|
|
16917
17906
|
* What picking a pack card means, given the design the studio wears: the applied pack → the applied
|
|
16918
17907
|
* choices; another pack → that pack's defaults, CARRYING the author's chosen fonts (§5b — a font the
|
|
16919
|
-
* author chose survives a pack switch unless the author changes it)
|
|
17908
|
+
* author chose survives a pack switch unless the author changes it) and the site's motion (rev 3.1 MO-D3 —
|
|
17909
|
+
* how it scrolls and changes page is not a pack's, so a Look pick never resets it). Both picker homes call this.
|
|
16920
17910
|
*/
|
|
16921
17911
|
function choicesForPack(flavorId, applied) {
|
|
16922
17912
|
const pack = flavorPackById(flavorId) ?? defaultPack();
|
|
16923
17913
|
if (applied && resolveDesignChoices(applied).flavorId === pack.id)
|
|
16924
17914
|
return resolveDesignChoices(applied);
|
|
16925
|
-
return resolveDesignChoices({ flavorId: pack.id, fonts: applied?.fonts });
|
|
17915
|
+
return resolveDesignChoices({ flavorId: pack.id, fonts: applied?.fonts, ...resolveDesignMotion(applied) });
|
|
16926
17916
|
}
|
|
16927
17917
|
/**
|
|
16928
17918
|
* A stored `settings.design` config → the resolved design. No row (or no config) → Crisp's defaults. A
|
|
@@ -16945,6 +17935,9 @@ function readDesignConfig(config, hasRow = !!config) {
|
|
|
16945
17935
|
mode: map.get(DesignConfigKey.Mode),
|
|
16946
17936
|
tint: (storedTint ?? undefined),
|
|
16947
17937
|
fonts: map.get(DesignConfigKey.Fonts),
|
|
17938
|
+
scroll: map.get(DesignConfigKey.Scroll),
|
|
17939
|
+
animate: map.get(DesignConfigKey.Animate),
|
|
17940
|
+
between: map.get(DesignConfigKey.Between),
|
|
16948
17941
|
});
|
|
16949
17942
|
return {
|
|
16950
17943
|
choices,
|
|
@@ -16959,6 +17952,10 @@ function readDesignConfig(config, hasRow = !!config) {
|
|
|
16959
17952
|
function designModeOf(config) {
|
|
16960
17953
|
return readDesignConfig(config).choices.mode;
|
|
16961
17954
|
}
|
|
17955
|
+
/** The look's motion of a stored config — what the public page read hands the engine (`designMotion`). */
|
|
17956
|
+
function designMotionOf(config) {
|
|
17957
|
+
return resolveDesignMotion(readDesignConfig(config).choices);
|
|
17958
|
+
}
|
|
16962
17959
|
/** Resolved choices (+ the revert snapshot) → the config array a settings row stores. */
|
|
16963
17960
|
function designConfigEntries(choices, flavorVersion, revert) {
|
|
16964
17961
|
const c = resolveDesignChoices(choices);
|
|
@@ -16973,6 +17970,9 @@ function designConfigEntries(choices, flavorVersion, revert) {
|
|
|
16973
17970
|
{ key: DesignConfigKey.PillButtons, value: String(c.pillButtons) },
|
|
16974
17971
|
{ key: DesignConfigKey.Mode, value: c.mode },
|
|
16975
17972
|
{ key: DesignConfigKey.Tint, value: c.tint },
|
|
17973
|
+
{ key: DesignConfigKey.Scroll, value: c.scroll },
|
|
17974
|
+
{ key: DesignConfigKey.Animate, value: c.animate },
|
|
17975
|
+
{ key: DesignConfigKey.Between, value: c.between },
|
|
16976
17976
|
...(c.fonts ? [{ key: DesignConfigKey.Fonts, value: JSON.stringify(c.fonts) }] : []),
|
|
16977
17977
|
...(revert ? [{ key: DesignConfigKey.Revert, value: JSON.stringify(revert) }] : []),
|
|
16978
17978
|
];
|
|
@@ -16984,6 +17984,7 @@ function sameDesignChoices(a, b) {
|
|
|
16984
17984
|
return x.flavorId === y.flavorId && x.seed.toLowerCase() === y.seed.toLowerCase() && x.pairId === y.pairId
|
|
16985
17985
|
&& x.shape === y.shape && x.density === y.density && x.motion === y.motion
|
|
16986
17986
|
&& x.pillButtons === y.pillButtons && x.mode === y.mode && x.tint === y.tint
|
|
17987
|
+
&& x.scroll === y.scroll && x.animate === y.animate && x.between === y.between
|
|
16987
17988
|
&& JSON.stringify(x.fonts ?? {}) === JSON.stringify(y.fonts ?? {});
|
|
16988
17989
|
}
|
|
16989
17990
|
|
|
@@ -17241,6 +18242,35 @@ function planFontFamilyRemoval(existing, previous, family) {
|
|
|
17241
18242
|
return { roles, choices, plan, fallbacks };
|
|
17242
18243
|
}
|
|
17243
18244
|
|
|
18245
|
+
const MOOD_IDS = Object.keys(SPEC_MOODS);
|
|
18246
|
+
const MOOD_LABELS = SPEC_MOODS;
|
|
18247
|
+
/** The 24, catalogue order (four per flavor). Assignment here proves the generated data fits the type. */
|
|
18248
|
+
const STYLE_PRESETS = SPEC_STYLE_PRESETS;
|
|
18249
|
+
function stylePresetById(id) {
|
|
18250
|
+
return id ? STYLE_PRESETS.find(p => p.id === id) : undefined;
|
|
18251
|
+
}
|
|
18252
|
+
const FOLLOW_VISITOR = 'auto';
|
|
18253
|
+
/** The modes Design offers for a preset: the audited ones, then "Follow visitor" when it passed both (H-D3). */
|
|
18254
|
+
function presetModes(preset) {
|
|
18255
|
+
return preset.modes.length > 1 ? [...preset.modes, FOLLOW_VISITOR] : [...preset.modes];
|
|
18256
|
+
}
|
|
18257
|
+
/**
|
|
18258
|
+
* What picking a preset means — the complete `DesignChoices`, its motion included — in `mode` (default:
|
|
18259
|
+
* its first). A mode it was not audited in is REFUSED (null): a light-only preset is never worn dark.
|
|
18260
|
+
*/
|
|
18261
|
+
function presetChoices(id, mode) {
|
|
18262
|
+
const preset = stylePresetById(id);
|
|
18263
|
+
if (!preset)
|
|
18264
|
+
return null;
|
|
18265
|
+
const wear = mode ?? preset.modes[0];
|
|
18266
|
+
if (!presetModes(preset).includes(wear))
|
|
18267
|
+
return null;
|
|
18268
|
+
return resolveDesignChoices({
|
|
18269
|
+
flavorId: preset.flavorId, seed: preset.seed, pairId: preset.pairId, shape: preset.shape, density: preset.density,
|
|
18270
|
+
motion: preset.motion, pillButtons: preset.pillButtons, mode: wear, tint: preset.tint, ...preset.moves,
|
|
18271
|
+
});
|
|
18272
|
+
}
|
|
18273
|
+
|
|
17244
18274
|
/**
|
|
17245
18275
|
* @vectoriox/iox-ui/design-core — the shared, FRAMEWORK-FREE core of the design system
|
|
17246
18276
|
* (design-system plan §3e): the token vocabulary, the flavor contract (generated 1:1 from
|
|
@@ -17256,5 +18286,5 @@ function planFontFamilyRemoval(existing, previous, family) {
|
|
|
17256
18286
|
* Generated bundle index. Do not edit.
|
|
17257
18287
|
*/
|
|
17258
18288
|
|
|
17259
|
-
export { ACCENT_TOKEN_NAMES, AdoptOutcome, AdoptSkipReason, BAR_RESERVE_BREAKPOINTS, BAR_RESERVE_CLASS, BOTTOM_BAR_STYLE, BUTTON_VARIANT_TO_STYLE, CANVAS_LINK_ATTRIBUTE, CARD_LINK_CLASS, COLOR_SCHEMES, COLOR_SCHEME_TRAIT, COLOR_SCHEME_TYPES, ColorScheme, ColourCheckId, DEFAULT_FLAVOR_ID, DESIGN_TOKEN_GROUPS, DESIGN_TOKEN_TIERS, DESIGN_TOKEN_TYPES, DesignConfigKey, ELEMENT_STYLES, ELEMENT_STYLE_MARKER_CLASS, ELEMENT_STYLE_STATES, EMPTY_IMAGE_ATTRIBUTE, EMPTY_IMAGE_SRC, ElementStyleState, FLAVOR_SPEC_VERSION, FONT_CATALOG, FONT_FAMILY_TOKENS, FONT_FILE_ACCEPT, FONT_FILE_EXTENSIONS, FONT_FILE_FORMATS, FONT_STYLES, FONT_WEIGHTS, FontUploadError, GOOGLE_FONTS_CSS_ORIGIN, GOOGLE_FONTS_FILE_ORIGIN, HELD_CONTRAST, INHERITED_TEXT, LinkType, MAX_FONT_FILE_BYTES, NEW_NODE_STYLE_DEFAULTS, OwnedTraitLink, PALETTE_PRESETS, PRE_DS2_FLAVOR_DEFAULTS, PRE_TINT_DEFAULT, REDUCED_MOTION_OVERRIDES, REDUCED_TRANSPARENCY_OVERRIDES, REVERT_WINDOW_MS, SCHEME_INK, SPEC_A11Y, SPEC_AXES, SPEC_BUTTON_VARIANT_TO_STYLE, SPEC_CONTRAST, SPEC_CONTRAST_AUDIT, SPEC_DEFAULT_ELEMENT_STYLE, SPEC_ELEMENT_STYLES, SPEC_FIELD_CLASS_BASELINE, SPEC_FLAVORS, SPEC_FLAVOR_PACKS, SPEC_FONTS, SPEC_FONT_ROLES, SPEC_INK_SCOPES, SPEC_LEGACY_ALIASES, SPEC_PALETTE_PRESETS, SPEC_SCHEMES, SPEC_SCHEME_INK, SPEC_SPRINGS, SPEC_TIERS, SPEC_TIER_IDS, SPEC_TOKEN_TYPES, SUPERSEDED_STYLE_VALUES, SWISS_FLAVOR, TINT_FULL_CHROMA, TINT_IDS, TINT_LEVELS, TINT_OWN_HUE_CHROMA, TINT_TURN_CHROMA, USER_TOKEN_SOURCE, WCAG_AA_TEXT, WCAG_AA_UI, adoptElementStyles, adoptionStyleFor, apcaLc, applyElementStyle, applyHeadingLevelRule, atLightness, atLightnessMaxChroma, auditDesignContrast, barReserveClass, buildFlavorTokens, buildFontFaceCss, buttonBlockHref, catalogFontId, checkFontWeight, choicesForPack, colorSchemeClass, colorSchemeOf, colourTabChecks, compareFontWeights, compileSchemeCss, compileTokenCss, compileTokenCssBlocks, compositeOver, cssString, defaultDesignChoices, defaultElementStyleFor, deriveAccentTokens, deriveBrandTokens, designApplySnapshot, designBaseline, designConfigEntries, designModeOf, designRevertConfig, designTokenRepairs, designTokenRows, elementStyleById, elementStyleClass, elementStylesFor, emptyImageLabelSrc, emptyImagePlaceholder, emptyImageSrc, ensureAlpha, ensureContrast, flavorColours, flavorPackById, flavorSeedWrites, flavorSourceStamp, fontFamilyKey, fontFileName, fontFileStem, fontFormatOf, fontPreloads, fontRoleReferences, fontStackWithout, fontWeightCovers, fontWeightRange, fontWeightValue, fontsForTokens, formatFontFamilies, formatFontFamily, formatFontWeight, googleFontHref, groupFontFamilies, hasElementStyleMarker, headingHref, inSrgbGamut, isDesignTokenGroup, isDesignTokenTier, isDesignTokenType, isFontWeightRange, isRetiredFlavorId, legacyDesignTokenRows, legacyFlavorTokens, legacyRuleTokenReferences, matchFontWeight, missingDesignRows, missingFontRoles, nodeDesignClasses, normalizeFontStyle, normalizeFontWeight, normalizeFontWeightValue, oklabToRgb, ownedTraitStatus, ownedTraitsOf, packDesignChoices, paintColours, parseCssColour, parseFontFamilies, parseFontWeight, parseHexColor, planDesignApply, planDesignRevert, planFlavorRevert, planFlavorSeed, planFontFamilyRemoval, planSwissMigration, preTintAccentGrounds, previewElementStyleAdoption, previewFontWeight, quantizeRgb, readDesignConfig, readOwnedTrait, relativeLuminance, releaseElementStyle, resolveDesignChoices, resolveSchemeTokenValues, resolveTokenReferences, resolveTokenValues, revertAvailable, rgbToOklab, ringColour, roleClass, sameDesignChoices, setColorScheme, specTokenNames, splitTopLevel, springToLinear, stackNamesFamily, styleKeyToKebab, switchElementStyle, syncNodeDesignClasses, toHexColor, tokenReferences, tokensToDarkVarMap, tokensToVarMap, unknownTokenReferences, untouchedSeedRow, userFontStack, validateFlavorPack, wcagContrastRatio, withSchemeInk, writeOwnedTrait };
|
|
18289
|
+
export { ACCENT_TOKEN_NAMES, ANIMATE_IDS, AdoptOutcome, AdoptSkipReason, BAR_RESERVE_BREAKPOINTS, BAR_RESERVE_CLASS, BETWEEN_IDS, BOTTOM_BAR_STYLE, BUTTON_VARIANT_TO_STYLE, CANVAS_LINK_ATTRIBUTE, CARD_LINK_CLASS, COLOR_SCHEMES, COLOR_SCHEME_TRAIT, COLOR_SCHEME_TYPES, ColorScheme, ColourCheckId, DEFAULT_FLAVOR_ID, DESIGN_TOKEN_GROUPS, DESIGN_TOKEN_TIERS, DESIGN_TOKEN_TYPES, DesignConfigKey, ELEMENT_STYLES, ELEMENT_STYLE_MARKER_CLASS, ELEMENT_STYLE_STATES, EMPTY_IMAGE_ATTRIBUTE, EMPTY_IMAGE_SRC, ElementStyleState, FLAVOR_SPEC_VERSION, FONT_CATALOG, FONT_FAMILY_TOKENS, FONT_FILE_ACCEPT, FONT_FILE_EXTENSIONS, FONT_FILE_FORMATS, FONT_STYLES, FONT_WEIGHTS, FontUploadError, GOOGLE_FONTS_CSS_ORIGIN, GOOGLE_FONTS_FILE_ORIGIN, HELD_CONTRAST, INHERITED_TEXT, LinkType, MAX_FONT_FILE_BYTES, MOOD_IDS, MOOD_LABELS, NEW_NODE_STYLE_DEFAULTS, OwnedTraitLink, PALETTE_PRESETS, PRE_DS2_FLAVOR_DEFAULTS, PRE_MOTION, PRE_TINT_DEFAULT, REDUCED_DESIGN_MOTION, REDUCED_MOTION_OVERRIDES, REDUCED_TRANSPARENCY_OVERRIDES, REVERT_WINDOW_MS, SCHEME_INK, SCROLL_IDS, SPEC_A11Y, SPEC_AXES, SPEC_BUTTON_VARIANT_TO_STYLE, SPEC_CONTRAST, SPEC_CONTRAST_AUDIT, SPEC_DEFAULT_ELEMENT_STYLE, SPEC_ELEMENT_STYLES, SPEC_FIELD_CLASS_BASELINE, SPEC_FLAVORS, SPEC_FLAVOR_PACKS, SPEC_FONTS, SPEC_FONT_ROLES, SPEC_INK_SCOPES, SPEC_LEGACY_ALIASES, SPEC_MOODS, SPEC_PALETTE_PRESETS, SPEC_SCHEMES, SPEC_SCHEME_INK, SPEC_SPRINGS, SPEC_STYLE_PRESETS, SPEC_TIERS, SPEC_TIER_IDS, SPEC_TOKEN_TYPES, STYLE_PRESETS, SUPERSEDED_STYLE_VALUES, SWISS_FLAVOR, TINT_FULL_CHROMA, TINT_IDS, TINT_LEVELS, TINT_OWN_HUE_CHROMA, TINT_TURN_CHROMA, USER_TOKEN_SOURCE, WCAG_AA_TEXT, WCAG_AA_UI, adoptElementStyles, adoptionStyleFor, apcaLc, applyElementStyle, applyHeadingLevelRule, atLightness, atLightnessMaxChroma, auditDesignContrast, barReserveClass, buildFlavorTokens, buildFontFaceCss, buttonBlockHref, catalogFontId, checkFontWeight, choicesForPack, colorSchemeClass, colorSchemeOf, colourTabChecks, compareFontWeights, compileSchemeCss, compileTokenCss, compileTokenCssBlocks, compositeOver, cssString, defaultDesignChoices, defaultElementStyleFor, deriveAccentTokens, deriveBrandTokens, designApplySnapshot, designBaseline, designConfigEntries, designModeOf, designMotionOf, designRevertConfig, designTokenRepairs, designTokenRows, elementStyleById, elementStyleClass, elementStylesFor, emptyImageLabelSrc, emptyImagePlaceholder, emptyImageSrc, ensureAlpha, ensureContrast, flavorColours, flavorPackById, flavorSeedWrites, flavorSourceStamp, fontFamilyKey, fontFileName, fontFileStem, fontFormatOf, fontPreloads, fontRoleReferences, fontStackWithout, fontWeightCovers, fontWeightRange, fontWeightValue, fontsForTokens, formatFontFamilies, formatFontFamily, formatFontWeight, googleFontHref, groupFontFamilies, hasElementStyleMarker, headingHref, inSrgbGamut, isDesignTokenGroup, isDesignTokenTier, isDesignTokenType, isFontWeightRange, isRetiredFlavorId, legacyDesignTokenRows, legacyFlavorTokens, legacyRuleTokenReferences, matchFontWeight, missingDesignRows, missingFontRoles, nodeDesignClasses, normalizeFontStyle, normalizeFontWeight, normalizeFontWeightValue, oklabToRgb, ownedTraitStatus, ownedTraitsOf, packDesignChoices, paintColours, parseCssColour, parseFontFamilies, parseFontWeight, parseHexColor, planDesignApply, planDesignRevert, planFlavorRevert, planFlavorSeed, planFontFamilyRemoval, planSwissMigration, preTintAccentGrounds, presetChoices, presetModes, previewElementStyleAdoption, previewFontWeight, quantizeRgb, readDesignConfig, readOwnedTrait, relativeLuminance, releaseElementStyle, resolveDesignChoices, resolveDesignMotion, resolveSchemeTokenValues, resolveTokenReferences, resolveTokenValues, revertAvailable, rgbToOklab, ringColour, roleClass, sameDesignChoices, setColorScheme, specTokenNames, splitTopLevel, springToLinear, stackNamesFamily, styleKeyToKebab, stylePresetById, switchElementStyle, syncNodeDesignClasses, toHexColor, tokenReferences, tokensToDarkVarMap, tokensToVarMap, unknownTokenReferences, untouchedSeedRow, userFontStack, validateFlavorPack, wcagContrastRatio, withSchemeInk, writeOwnedTrait };
|
|
17260
18290
|
//# sourceMappingURL=vectoriox-iox-ui-design-core.mjs.map
|