@proulr/sdui-components 0.1.18 → 0.1.19

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.
@@ -1312,6 +1312,543 @@ export function AppChromeVisibilityOffGlyph({ color = m3Colors.onSurfaceVariant,
1312
1312
  );
1313
1313
  }
1314
1314
 
1315
+ export function AppChromeCheckGlyph({ color = m3Colors.primary, size = 24 }: AppChromeGlyphProps) {
1316
+ const stroke = strokeFor(size) + 0.2;
1317
+ return (
1318
+ <View style={{ width: size, height: size, alignItems: 'center', justifyContent: 'center' }}>
1319
+ <View
1320
+ style={{
1321
+ width: size * 0.42,
1322
+ height: size * 0.22,
1323
+ borderLeftWidth: stroke,
1324
+ borderBottomWidth: stroke,
1325
+ borderColor: color,
1326
+ transform: [{ rotate: '-45deg' }],
1327
+ marginTop: -size * 0.06,
1328
+ }}
1329
+ />
1330
+ </View>
1331
+ );
1332
+ }
1333
+
1334
+ export function AppChromeArrowRightGlyph({ color = m3Colors.onSurface, size = 24 }: AppChromeGlyphProps) {
1335
+ const stroke = strokeFor(size);
1336
+ const shaft = size * 0.5;
1337
+ return (
1338
+ <View style={{ width: size, height: size, alignItems: 'center', justifyContent: 'center' }}>
1339
+ <View style={{ width: shaft, height: stroke, backgroundColor: color, borderRadius: 1, marginRight: size * 0.08 }} />
1340
+ <View
1341
+ style={{
1342
+ position: 'absolute',
1343
+ width: size * 0.28,
1344
+ height: size * 0.28,
1345
+ borderTopWidth: stroke,
1346
+ borderRightWidth: stroke,
1347
+ borderColor: color,
1348
+ transform: [{ rotate: '45deg' }],
1349
+ right: size * 0.18,
1350
+ }}
1351
+ />
1352
+ </View>
1353
+ );
1354
+ }
1355
+
1356
+ export function AppChromeArrowUpRightGlyph({ color = m3Colors.onSurfaceVariant, size = 16 }: AppChromeGlyphProps) {
1357
+ const stroke = strokeFor(size);
1358
+ return (
1359
+ <View style={{ width: size, height: size, alignItems: 'center', justifyContent: 'center' }}>
1360
+ <View style={{ position: 'absolute', width: size * 0.55, height: stroke, backgroundColor: color, transform: [{ rotate: '-45deg' }] }} />
1361
+ <View
1362
+ style={{
1363
+ position: 'absolute',
1364
+ top: size * 0.18,
1365
+ right: size * 0.18,
1366
+ width: size * 0.32,
1367
+ height: size * 0.32,
1368
+ borderTopWidth: stroke,
1369
+ borderRightWidth: stroke,
1370
+ borderColor: color,
1371
+ }}
1372
+ />
1373
+ </View>
1374
+ );
1375
+ }
1376
+
1377
+ export function AppChromeArrowDownRightGlyph({ color = m3Colors.onSurfaceVariant, size = 16 }: AppChromeGlyphProps) {
1378
+ const stroke = strokeFor(size);
1379
+ return (
1380
+ <View style={{ width: size, height: size, alignItems: 'center', justifyContent: 'center' }}>
1381
+ <View style={{ position: 'absolute', width: size * 0.55, height: stroke, backgroundColor: color, transform: [{ rotate: '45deg' }] }} />
1382
+ <View
1383
+ style={{
1384
+ position: 'absolute',
1385
+ bottom: size * 0.18,
1386
+ right: size * 0.18,
1387
+ width: size * 0.32,
1388
+ height: size * 0.32,
1389
+ borderBottomWidth: stroke,
1390
+ borderRightWidth: stroke,
1391
+ borderColor: color,
1392
+ }}
1393
+ />
1394
+ </View>
1395
+ );
1396
+ }
1397
+
1398
+ export function AppChromeReplyGlyph({ color = m3Colors.onSurface, size = 24 }: AppChromeGlyphProps) {
1399
+ const stroke = strokeFor(size);
1400
+ return (
1401
+ <View style={{ width: size, height: size, alignItems: 'center', justifyContent: 'center' }}>
1402
+ <View
1403
+ style={{
1404
+ width: size * 0.28,
1405
+ height: size * 0.28,
1406
+ borderLeftWidth: stroke,
1407
+ borderBottomWidth: stroke,
1408
+ borderColor: color,
1409
+ transform: [{ rotate: '45deg' }],
1410
+ marginRight: size * 0.2,
1411
+ marginTop: -size * 0.08,
1412
+ }}
1413
+ />
1414
+ <View
1415
+ style={{
1416
+ position: 'absolute',
1417
+ width: size * 0.42,
1418
+ height: size * 0.36,
1419
+ borderRightWidth: stroke,
1420
+ borderBottomWidth: stroke,
1421
+ borderColor: color,
1422
+ borderBottomRightRadius: size * 0.2,
1423
+ right: size * 0.16,
1424
+ top: size * 0.28,
1425
+ }}
1426
+ />
1427
+ </View>
1428
+ );
1429
+ }
1430
+
1431
+ export function AppChromePendingGlyph({ color = m3Colors.onSurfaceVariant, size = 16 }: AppChromeGlyphProps) {
1432
+ const stroke = strokeFor(size);
1433
+ const dial = size * 0.72;
1434
+ return (
1435
+ <View style={{ width: size, height: size, alignItems: 'center', justifyContent: 'center' }}>
1436
+ <View
1437
+ style={{
1438
+ width: dial,
1439
+ height: dial,
1440
+ borderRadius: dial / 2,
1441
+ borderWidth: stroke,
1442
+ borderColor: color,
1443
+ alignItems: 'center',
1444
+ justifyContent: 'center',
1445
+ }}
1446
+ >
1447
+ <View style={{ position: 'absolute', width: stroke, height: dial * 0.28, backgroundColor: color, top: dial * 0.14, borderRadius: 1 }} />
1448
+ <View
1449
+ style={{
1450
+ position: 'absolute',
1451
+ width: dial * 0.22,
1452
+ height: stroke,
1453
+ backgroundColor: color,
1454
+ borderRadius: 1,
1455
+ transform: [{ rotate: '45deg' }],
1456
+ top: dial * 0.36,
1457
+ left: dial * 0.4,
1458
+ }}
1459
+ />
1460
+ </View>
1461
+ </View>
1462
+ );
1463
+ }
1464
+
1465
+ export function AppChromeDownloadGlyph({ color = m3Colors.primary, size = 24 }: AppChromeGlyphProps) {
1466
+ const stroke = strokeFor(size);
1467
+ return (
1468
+ <View style={{ width: size, height: size, alignItems: 'center', justifyContent: 'center' }}>
1469
+ <View style={{ width: stroke, height: size * 0.42, backgroundColor: color, borderRadius: 1, marginBottom: size * 0.08 }} />
1470
+ <View
1471
+ style={{
1472
+ position: 'absolute',
1473
+ width: size * 0.28,
1474
+ height: size * 0.28,
1475
+ borderRightWidth: stroke,
1476
+ borderBottomWidth: stroke,
1477
+ borderColor: color,
1478
+ transform: [{ rotate: '45deg' }],
1479
+ top: size * 0.34,
1480
+ }}
1481
+ />
1482
+ <View
1483
+ style={{
1484
+ position: 'absolute',
1485
+ bottom: size * 0.14,
1486
+ width: size * 0.5,
1487
+ height: stroke,
1488
+ backgroundColor: color,
1489
+ borderRadius: 1,
1490
+ }}
1491
+ />
1492
+ </View>
1493
+ );
1494
+ }
1495
+
1496
+ export function AppChromeRadioUncheckedGlyph({ color = m3Colors.onSurfaceVariant, size = 20 }: AppChromeGlyphProps) {
1497
+ const stroke = strokeFor(size);
1498
+ const ring = size * 0.72;
1499
+ return (
1500
+ <View style={{ width: size, height: size, alignItems: 'center', justifyContent: 'center' }}>
1501
+ <View
1502
+ style={{
1503
+ width: ring,
1504
+ height: ring,
1505
+ borderRadius: ring / 2,
1506
+ borderWidth: stroke,
1507
+ borderColor: color,
1508
+ }}
1509
+ />
1510
+ </View>
1511
+ );
1512
+ }
1513
+
1514
+ export function AppChromeCopyGlyph({ color = m3Colors.onSurface, size = 24 }: AppChromeGlyphProps) {
1515
+ const stroke = strokeFor(size);
1516
+ const sheet = size * 0.46;
1517
+ return (
1518
+ <View style={{ width: size, height: size, alignItems: 'center', justifyContent: 'center' }}>
1519
+ <View
1520
+ style={{
1521
+ position: 'absolute',
1522
+ top: size * 0.14,
1523
+ left: size * 0.18,
1524
+ width: sheet,
1525
+ height: sheet * 1.15,
1526
+ borderRadius: size * 0.06,
1527
+ borderWidth: stroke,
1528
+ borderColor: color,
1529
+ }}
1530
+ />
1531
+ <View
1532
+ style={{
1533
+ position: 'absolute',
1534
+ top: size * 0.26,
1535
+ left: size * 0.32,
1536
+ width: sheet,
1537
+ height: sheet * 1.15,
1538
+ borderRadius: size * 0.06,
1539
+ borderWidth: stroke,
1540
+ borderColor: color,
1541
+ backgroundColor: 'transparent',
1542
+ }}
1543
+ />
1544
+ </View>
1545
+ );
1546
+ }
1547
+
1548
+ export function AppChromeAttachmentGlyph({ color = m3Colors.onSurfaceVariant, size = 16 }: AppChromeGlyphProps) {
1549
+ const stroke = strokeFor(size);
1550
+ return (
1551
+ <View style={{ width: size, height: size, alignItems: 'center', justifyContent: 'center' }}>
1552
+ <View
1553
+ style={{
1554
+ width: size * 0.28,
1555
+ height: size * 0.62,
1556
+ borderRadius: size * 0.14,
1557
+ borderWidth: stroke,
1558
+ borderColor: color,
1559
+ transform: [{ rotate: '35deg' }],
1560
+ }}
1561
+ />
1562
+ </View>
1563
+ );
1564
+ }
1565
+
1566
+ export function AppChromePollGlyph({ color = m3Colors.primary, size = 24 }: AppChromeGlyphProps) {
1567
+ const barW = Math.max(2.2, size * 0.12);
1568
+ const gap = size * 0.1;
1569
+ return (
1570
+ <View
1571
+ style={{
1572
+ width: size,
1573
+ height: size,
1574
+ flexDirection: 'row',
1575
+ alignItems: 'flex-end',
1576
+ justifyContent: 'center',
1577
+ gap,
1578
+ paddingBottom: size * 0.14,
1579
+ }}
1580
+ >
1581
+ <View style={{ width: barW, height: size * 0.28, borderRadius: 1, backgroundColor: color }} />
1582
+ <View style={{ width: barW, height: size * 0.48, borderRadius: 1, backgroundColor: color }} />
1583
+ <View style={{ width: barW, height: size * 0.36, borderRadius: 1, backgroundColor: color }} />
1584
+ </View>
1585
+ );
1586
+ }
1587
+
1588
+ export function AppChromeLockGlyph({ color = m3Colors.onSurface, size = 24 }: AppChromeGlyphProps) {
1589
+ const stroke = strokeFor(size);
1590
+ const body = size * 0.5;
1591
+ const shackle = size * 0.34;
1592
+ return (
1593
+ <View style={{ width: size, height: size, alignItems: 'center', justifyContent: 'center' }}>
1594
+ <View
1595
+ style={{
1596
+ width: shackle,
1597
+ height: shackle * 0.7,
1598
+ borderTopLeftRadius: shackle / 2,
1599
+ borderTopRightRadius: shackle / 2,
1600
+ borderWidth: stroke,
1601
+ borderBottomWidth: 0,
1602
+ borderColor: color,
1603
+ marginBottom: -stroke,
1604
+ }}
1605
+ />
1606
+ <View
1607
+ style={{
1608
+ width: body,
1609
+ height: body * 0.72,
1610
+ borderRadius: size * 0.08,
1611
+ borderWidth: stroke,
1612
+ borderColor: color,
1613
+ alignItems: 'center',
1614
+ justifyContent: 'center',
1615
+ }}
1616
+ >
1617
+ <View style={{ width: size * 0.1, height: size * 0.14, borderRadius: 1, backgroundColor: color }} />
1618
+ </View>
1619
+ </View>
1620
+ );
1621
+ }
1622
+
1623
+ export function AppChromeVolumeOnGlyph({ color = m3Colors.onSurface, size = 24 }: AppChromeGlyphProps) {
1624
+ const stroke = strokeFor(size);
1625
+ return (
1626
+ <View style={{ width: size, height: size, alignItems: 'center', justifyContent: 'center' }}>
1627
+ <View
1628
+ style={{
1629
+ width: size * 0.22,
1630
+ height: size * 0.28,
1631
+ backgroundColor: color,
1632
+ borderRadius: 2,
1633
+ marginRight: size * 0.22,
1634
+ }}
1635
+ />
1636
+ <View
1637
+ style={{
1638
+ position: 'absolute',
1639
+ left: size * 0.28,
1640
+ width: 0,
1641
+ height: 0,
1642
+ borderTopWidth: size * 0.22,
1643
+ borderBottomWidth: size * 0.22,
1644
+ borderRightWidth: size * 0.2,
1645
+ borderTopColor: 'transparent',
1646
+ borderBottomColor: 'transparent',
1647
+ borderRightColor: color,
1648
+ }}
1649
+ />
1650
+ <View
1651
+ style={{
1652
+ position: 'absolute',
1653
+ right: size * 0.12,
1654
+ width: size * 0.28,
1655
+ height: size * 0.28,
1656
+ borderRadius: size * 0.14,
1657
+ borderWidth: stroke,
1658
+ borderColor: color,
1659
+ borderLeftWidth: 0,
1660
+ }}
1661
+ />
1662
+ </View>
1663
+ );
1664
+ }
1665
+
1666
+ export function AppChromeVolumeOffGlyph({ color = m3Colors.onSurface, size = 24 }: AppChromeGlyphProps) {
1667
+ const stroke = strokeFor(size);
1668
+ return (
1669
+ <View style={{ width: size, height: size, alignItems: 'center', justifyContent: 'center' }}>
1670
+ <AppChromeVolumeOnGlyph color={color} size={size} />
1671
+ <View
1672
+ style={{
1673
+ position: 'absolute',
1674
+ width: size * 0.72,
1675
+ height: stroke,
1676
+ backgroundColor: color,
1677
+ borderRadius: 1,
1678
+ transform: [{ rotate: '-35deg' }],
1679
+ }}
1680
+ />
1681
+ </View>
1682
+ );
1683
+ }
1684
+
1685
+ export function AppChromeInfoGlyph({ color = m3Colors.onSurface, size = 24 }: AppChromeGlyphProps) {
1686
+ const stroke = strokeFor(size);
1687
+ const ring = size * 0.78;
1688
+ const dot = Math.max(2, size * 0.1);
1689
+ return (
1690
+ <View style={{ width: size, height: size, alignItems: 'center', justifyContent: 'center' }}>
1691
+ <View
1692
+ style={{
1693
+ width: ring,
1694
+ height: ring,
1695
+ borderRadius: ring / 2,
1696
+ borderWidth: stroke,
1697
+ borderColor: color,
1698
+ alignItems: 'center',
1699
+ justifyContent: 'center',
1700
+ }}
1701
+ >
1702
+ <View style={{ width: dot, height: dot, borderRadius: dot / 2, backgroundColor: color, marginBottom: size * 0.06 }} />
1703
+ <View style={{ width: stroke, height: size * 0.22, borderRadius: 1, backgroundColor: color }} />
1704
+ </View>
1705
+ </View>
1706
+ );
1707
+ }
1708
+
1709
+ export function AppChromeWarningGlyph({ color = m3Colors.error, size = 24 }: AppChromeGlyphProps) {
1710
+ const stroke = strokeFor(size);
1711
+ const dot = Math.max(2, size * 0.1);
1712
+ return (
1713
+ <View style={{ width: size, height: size, alignItems: 'center', justifyContent: 'center' }}>
1714
+ <View
1715
+ style={{
1716
+ width: 0,
1717
+ height: 0,
1718
+ borderLeftWidth: size * 0.38,
1719
+ borderRightWidth: size * 0.38,
1720
+ borderBottomWidth: size * 0.66,
1721
+ borderLeftColor: 'transparent',
1722
+ borderRightColor: 'transparent',
1723
+ borderBottomColor: color,
1724
+ opacity: 0.2,
1725
+ }}
1726
+ />
1727
+ <View style={{ position: 'absolute', width: stroke, height: size * 0.22, backgroundColor: color, top: size * 0.28, borderRadius: 1 }} />
1728
+ <View style={{ position: 'absolute', width: dot, height: dot, borderRadius: dot / 2, backgroundColor: color, bottom: size * 0.22 }} />
1729
+ </View>
1730
+ );
1731
+ }
1732
+
1733
+ export function AppChromeSignalGlyph({ color = m3Colors.onSurfaceVariant, size = 24 }: AppChromeGlyphProps) {
1734
+ const stroke = strokeFor(size);
1735
+ return (
1736
+ <View style={{ width: size, height: size, alignItems: 'center', justifyContent: 'center' }}>
1737
+ <View
1738
+ style={{
1739
+ width: size * 0.55,
1740
+ height: size * 0.55,
1741
+ borderRadius: size * 0.28,
1742
+ borderWidth: stroke,
1743
+ borderColor: color,
1744
+ borderBottomWidth: 0,
1745
+ borderLeftWidth: 0,
1746
+ transform: [{ rotate: '-45deg' }],
1747
+ marginTop: size * 0.1,
1748
+ }}
1749
+ />
1750
+ <View
1751
+ style={{
1752
+ position: 'absolute',
1753
+ width: size * 0.32,
1754
+ height: size * 0.32,
1755
+ borderRadius: size * 0.16,
1756
+ borderWidth: stroke,
1757
+ borderColor: color,
1758
+ borderBottomWidth: 0,
1759
+ borderLeftWidth: 0,
1760
+ transform: [{ rotate: '-45deg' }],
1761
+ top: size * 0.34,
1762
+ }}
1763
+ />
1764
+ <View
1765
+ style={{
1766
+ position: 'absolute',
1767
+ width: size * 0.12,
1768
+ height: size * 0.12,
1769
+ borderRadius: size * 0.06,
1770
+ backgroundColor: color,
1771
+ bottom: size * 0.22,
1772
+ }}
1773
+ />
1774
+ </View>
1775
+ );
1776
+ }
1777
+
1778
+ export function AppChromeHourglassGlyph({ color = m3Colors.onSurfaceVariant, size = 24 }: AppChromeGlyphProps) {
1779
+ const stroke = strokeFor(size);
1780
+ const frame = size * 0.5;
1781
+ return (
1782
+ <View style={{ width: size, height: size, alignItems: 'center', justifyContent: 'center' }}>
1783
+ <View style={{ width: frame, height: stroke, backgroundColor: color, borderRadius: 1 }} />
1784
+ <View
1785
+ style={{
1786
+ width: frame * 0.7,
1787
+ height: size * 0.22,
1788
+ borderLeftWidth: stroke,
1789
+ borderRightWidth: stroke,
1790
+ borderColor: color,
1791
+ marginVertical: 1,
1792
+ }}
1793
+ />
1794
+ <View style={{ width: frame * 0.35, height: stroke, backgroundColor: color, borderRadius: 1 }} />
1795
+ <View
1796
+ style={{
1797
+ width: frame * 0.7,
1798
+ height: size * 0.22,
1799
+ borderLeftWidth: stroke,
1800
+ borderRightWidth: stroke,
1801
+ borderColor: color,
1802
+ marginVertical: 1,
1803
+ }}
1804
+ />
1805
+ <View style={{ width: frame, height: stroke, backgroundColor: color, borderRadius: 1 }} />
1806
+ </View>
1807
+ );
1808
+ }
1809
+
1810
+ export function AppChromeBellGlyph({ color = m3Colors.primary, size = 24 }: AppChromeGlyphProps) {
1811
+ const stroke = strokeFor(size);
1812
+ const body = size * 0.52;
1813
+ return (
1814
+ <View style={{ width: size, height: size, alignItems: 'center', justifyContent: 'center' }}>
1815
+ <View
1816
+ style={{
1817
+ width: body * 0.28,
1818
+ height: body * 0.18,
1819
+ borderTopLeftRadius: body * 0.14,
1820
+ borderTopRightRadius: body * 0.14,
1821
+ borderWidth: stroke,
1822
+ borderBottomWidth: 0,
1823
+ borderColor: color,
1824
+ marginBottom: -1,
1825
+ }}
1826
+ />
1827
+ <View
1828
+ style={{
1829
+ width: body,
1830
+ height: body * 0.7,
1831
+ borderTopLeftRadius: body * 0.5,
1832
+ borderTopRightRadius: body * 0.5,
1833
+ borderWidth: stroke,
1834
+ borderColor: color,
1835
+ }}
1836
+ />
1837
+ <View style={{ width: body * 1.15, height: stroke, backgroundColor: color, borderRadius: 1, marginTop: 1 }} />
1838
+ <View
1839
+ style={{
1840
+ width: body * 0.22,
1841
+ height: body * 0.14,
1842
+ borderBottomLeftRadius: body * 0.11,
1843
+ borderBottomRightRadius: body * 0.11,
1844
+ backgroundColor: color,
1845
+ marginTop: 1,
1846
+ }}
1847
+ />
1848
+ </View>
1849
+ );
1850
+ }
1851
+
1315
1852
  const styles = StyleSheet.create({
1316
1853
  crosshair: {
1317
1854
  position: 'absolute',
@@ -1,14 +1,23 @@
1
1
  import type { ComponentType } from 'react';
2
+ import { isAppIconName, type AppIconName } from '../../catalog/app-icon-names';
2
3
  import { APP_ICON_SIZE } from './app-icon-size-catalog';
3
4
  import {
5
+ AppChromeArrowDownRightGlyph,
6
+ AppChromeArrowRightGlyph,
7
+ AppChromeArrowUpRightGlyph,
8
+ AppChromeAttachmentGlyph,
4
9
  AppChromeBackGlyph,
10
+ AppChromeBellGlyph,
5
11
  AppChromeBookmarkGlyph,
6
12
  AppChromeBoostGlyph,
7
13
  AppChromeChatGlyph,
14
+ AppChromeCheckGlyph,
8
15
  AppChromeChevronDownGlyph,
9
16
  AppChromeChevronRightGlyph,
10
17
  AppChromeCloseGlyph,
11
18
  AppChromeCommunitiesGlyph,
19
+ AppChromeCopyGlyph,
20
+ AppChromeDownloadGlyph,
12
21
  AppChromeEditGlyph,
13
22
  AppChromeEventsGlyph,
14
23
  AppChromeFireGlyph,
@@ -16,24 +25,30 @@ import {
16
25
  AppChromeFlipCameraGlyph,
17
26
  AppChromeHeartFilledGlyph,
18
27
  AppChromeHeartGlyph,
19
- AppChromeThumbsUpFilledGlyph,
20
- AppChromeThumbsUpGlyph,
28
+ AppChromeHourglassGlyph,
21
29
  AppChromeHuntGlyph,
22
30
  AppChromeIncognitoGlyph,
31
+ AppChromeInfoGlyph,
23
32
  AppChromeListGlyph,
24
33
  AppChromeLocationGlyph,
34
+ AppChromeLockGlyph,
25
35
  AppChromeMicGlyph,
26
36
  AppChromeOverflowGlyph,
27
37
  AppChromePauseGlyph,
38
+ AppChromePendingGlyph,
28
39
  AppChromePlayGlyph,
29
40
  AppChromePlusGlyph,
41
+ AppChromePollGlyph,
30
42
  AppChromeProfileGlyph,
31
43
  AppChromePublishGlyph,
44
+ AppChromeRadioUncheckedGlyph,
45
+ AppChromeReplyGlyph,
32
46
  AppChromeRepostGlyph,
33
47
  AppChromeSearchGlyph,
34
48
  AppChromeSendGlyph,
35
49
  AppChromeSettingsGlyph,
36
50
  AppChromeShieldGlyph,
51
+ AppChromeSignalGlyph,
37
52
  AppChromeSignOutGlyph,
38
53
  AppChromeStarGlyph,
39
54
  AppChromeStoryEffectsGlyph,
@@ -46,8 +61,13 @@ import {
46
61
  AppChromeTabDiscoverGlyph,
47
62
  AppChromeTabFlashGlyph,
48
63
  AppChromeTabVibesGlyph,
64
+ AppChromeThumbsUpFilledGlyph,
65
+ AppChromeThumbsUpGlyph,
49
66
  AppChromeVisibilityGlyph,
50
67
  AppChromeVisibilityOffGlyph,
68
+ AppChromeVolumeOffGlyph,
69
+ AppChromeVolumeOnGlyph,
70
+ AppChromeWarningGlyph,
51
71
  type AppChromeGlyphProps,
52
72
  } from './app-glyphs';
53
73
  import {
@@ -60,61 +80,8 @@ import {
60
80
  ComposeVideoGlyph,
61
81
  } from './compose-glyphs';
62
82
 
63
- export type AppIconName =
64
- | 'search'
65
- | 'hunt'
66
- | 'back'
67
- | 'overflow'
68
- | 'location'
69
- | 'mic'
70
- | 'send'
71
- | 'chat'
72
- | 'close'
73
- | 'chevron-down'
74
- | 'chevron-right'
75
- | 'flip-camera'
76
- | 'flash'
77
- | 'gallery'
78
- | 'video'
79
- | 'camera'
80
- | 'trash'
81
- | 'globe'
82
- | 'tab-discover'
83
- | 'tab-vibes'
84
- | 'tab-flash'
85
- | 'tab-chat'
86
- | 'boost'
87
- | 'fire'
88
- | 'settings'
89
- | 'edit'
90
- | 'incognito'
91
- | 'events'
92
- | 'shield'
93
- | 'profile'
94
- | 'bookmark'
95
- | 'list'
96
- | 'communities'
97
- | 'star'
98
- | 'sign-out'
99
- | 'publish'
100
- | 'story'
101
- | 'story-music'
102
- | 'story-sticker'
103
- | 'story-text'
104
- | 'story-effects'
105
- | 'story-mention'
106
- | 'repost'
107
- | 'heart'
108
- | 'heart-filled'
109
- | 'thumbs-up'
110
- | 'thumbs-up-filled'
111
- | 'play'
112
- | 'pause'
113
- | 'plus'
114
- | 'followers'
115
- | 'mention'
116
- | 'visibility'
117
- | 'visibility-off';
83
+ export type { AppIconName };
84
+ export { isAppIconName };
118
85
 
119
86
  const ICON_REGISTRY: Record<AppIconName, ComponentType<AppChromeGlyphProps>> = {
120
87
  search: AppChromeSearchGlyph,
@@ -171,6 +138,25 @@ const ICON_REGISTRY: Record<AppIconName, ComponentType<AppChromeGlyphProps>> = {
171
138
  mention: ComposeMentionGlyph,
172
139
  visibility: AppChromeVisibilityGlyph,
173
140
  'visibility-off': AppChromeVisibilityOffGlyph,
141
+ check: AppChromeCheckGlyph,
142
+ 'arrow-right': AppChromeArrowRightGlyph,
143
+ 'arrow-up-right': AppChromeArrowUpRightGlyph,
144
+ 'arrow-down-right': AppChromeArrowDownRightGlyph,
145
+ reply: AppChromeReplyGlyph,
146
+ pending: AppChromePendingGlyph,
147
+ download: AppChromeDownloadGlyph,
148
+ 'radio-unchecked': AppChromeRadioUncheckedGlyph,
149
+ copy: AppChromeCopyGlyph,
150
+ attachment: AppChromeAttachmentGlyph,
151
+ poll: AppChromePollGlyph,
152
+ lock: AppChromeLockGlyph,
153
+ 'volume-on': AppChromeVolumeOnGlyph,
154
+ 'volume-off': AppChromeVolumeOffGlyph,
155
+ info: AppChromeInfoGlyph,
156
+ warning: AppChromeWarningGlyph,
157
+ signal: AppChromeSignalGlyph,
158
+ hourglass: AppChromeHourglassGlyph,
159
+ bell: AppChromeBellGlyph,
174
160
  };
175
161
 
176
162
  export type AppIconProps = {
@@ -181,6 +167,12 @@ export type AppIconProps = {
181
167
 
182
168
  export function AppIcon({ name, color, size = APP_ICON_SIZE.composer }: AppIconProps) {
183
169
  const Glyph = ICON_REGISTRY[name];
170
+ if (!Glyph) {
171
+ if (__DEV__) {
172
+ console.warn(`[AppIcon] unknown icon name: ${name}`);
173
+ }
174
+ return null;
175
+ }
184
176
  return <Glyph color={color} size={size} />;
185
177
  }
186
178