@mirror-physics/fractal-ui 0.2.0-next.27 → 0.2.0-next.29

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/dist/index.css CHANGED
@@ -401,9 +401,11 @@
401
401
  height: 18px;
402
402
  font-size: 0.75rem;
403
403
  font-weight: 600;
404
- border-radius: 50%;
405
404
  margin-top: 1px;
406
405
  }
406
+ .fractal-alert-icon svg {
407
+ display: block;
408
+ }
407
409
  .fractal-alert-content {
408
410
  flex: 1;
409
411
  min-width: 0;
@@ -415,53 +417,49 @@
415
417
  line-height: 1.4;
416
418
  }
417
419
  .fractal-alert-description {
420
+ color: var(--fg-secondary);
418
421
  font-size: 0.875rem;
419
422
  line-height: 1.5;
420
423
  }
421
424
  .fractal-alert--default {
422
425
  background-color: var(--bg-canvas);
423
- border-color: var(--border-default);
426
+ border-color: var(--border-subtle);
424
427
  color: var(--fg-primary);
425
428
  }
426
429
  .fractal-alert--default .fractal-alert-icon {
427
- background: var(--bg-surface-2);
428
430
  color: var(--fg-secondary);
429
431
  }
430
432
  .fractal-alert--info {
431
433
  background-color: var(--accent-surface);
432
- border-color: var(--accent-default);
434
+ border-color: var(--accent-surface-stroke);
433
435
  color: var(--fg-primary);
434
436
  }
435
437
  .fractal-alert--info .fractal-alert-icon {
436
- background: var(--accent-default);
437
- color: var(--fg-inverse);
438
+ color: var(--accent-default);
438
439
  }
439
440
  .fractal-alert--success {
440
441
  background-color: var(--success-surface);
441
- border-color: var(--success-default);
442
+ border-color: var(--success-surface-stroke);
442
443
  color: var(--fg-primary);
443
444
  }
444
445
  .fractal-alert--success .fractal-alert-icon {
445
- background: var(--success-default);
446
- color: var(--fg-inverse);
446
+ color: var(--success-default);
447
447
  }
448
448
  .fractal-alert--warning {
449
449
  background-color: var(--warning-surface);
450
- border-color: var(--warning-default);
450
+ border-color: var(--warning-surface-stroke);
451
451
  color: var(--fg-primary);
452
452
  }
453
453
  .fractal-alert--warning .fractal-alert-icon {
454
- background: var(--warning-default);
455
- color: var(--fg-inverse);
454
+ color: var(--warning-default);
456
455
  }
457
456
  .fractal-alert--error {
458
457
  background-color: var(--error-surface);
459
- border-color: var(--error-default);
458
+ border-color: var(--error-surface-stroke);
460
459
  color: var(--fg-primary);
461
460
  }
462
461
  .fractal-alert--error .fractal-alert-icon {
463
- background: var(--error-default);
464
- color: var(--fg-inverse);
462
+ color: var(--error-default);
465
463
  }
466
464
 
467
465
  /* src/components/Toggle/Toggle.css */
@@ -506,6 +504,60 @@
506
504
  user-select: none;
507
505
  }
508
506
 
507
+ /* src/components/UILoader/UILoader.css */
508
+ .fractal-ui-loader {
509
+ display: inline-flex;
510
+ line-height: 0;
511
+ }
512
+ .fractal-ui-loader svg {
513
+ display: block;
514
+ overflow: visible;
515
+ }
516
+ .fractal-ui-loader__stop-start {
517
+ stop-color: var(--grey-200);
518
+ }
519
+ .fractal-ui-loader__stop-end {
520
+ stop-color: var(--grey-100);
521
+ }
522
+ .fractal-ui-loader--blue .fractal-ui-loader__stop-start {
523
+ stop-color: var(--blue-500);
524
+ }
525
+ .fractal-ui-loader--blue .fractal-ui-loader__stop-end {
526
+ stop-color: var(--blue-300);
527
+ }
528
+ .fractal-ui-loader--green .fractal-ui-loader__stop-start {
529
+ stop-color: var(--green-500);
530
+ }
531
+ .fractal-ui-loader--green .fractal-ui-loader__stop-end {
532
+ stop-color: var(--green-300);
533
+ }
534
+ .fractal-ui-loader__shine-axis {
535
+ transform-box: view-box;
536
+ transform-origin: 0 0;
537
+ }
538
+ .fractal-ui-loader__shine {
539
+ animation: fractal-ui-loader-shine 2500ms var(--ease-in-out) infinite;
540
+ transform-box: view-box;
541
+ transform-origin: 0 0;
542
+ }
543
+ @keyframes fractal-ui-loader-shine {
544
+ 0%, 12% {
545
+ transform: translateX(-120px);
546
+ }
547
+ 48% {
548
+ transform: translateX(120px);
549
+ }
550
+ 49%, 100% {
551
+ transform: translateX(-120px);
552
+ }
553
+ }
554
+ @media (prefers-reduced-motion: reduce) {
555
+ .fractal-ui-loader__shine {
556
+ animation: none;
557
+ transform: translateX(0);
558
+ }
559
+ }
560
+
509
561
  /* src/components/Modal/Modal.css */
510
562
  .fractal-modal-overlay {
511
563
  position: fixed;
@@ -576,10 +628,23 @@
576
628
  color: var(--fg-primary);
577
629
  background: var(--bg-surface-1);
578
630
  }
631
+ .fractal-modal-close:disabled {
632
+ cursor: not-allowed;
633
+ opacity: 0.4;
634
+ }
635
+ .fractal-modal-close:disabled:hover {
636
+ color: var(--fg-secondary);
637
+ background: none;
638
+ }
579
639
  .fractal-modal-body {
580
640
  font-size: 0.875rem;
581
641
  color: var(--fg-secondary);
582
642
  }
643
+ .fractal-modal-body--loading {
644
+ display: grid;
645
+ min-height: 168px;
646
+ place-items: center;
647
+ }
583
648
  .fractal-modal-body--lg {
584
649
  flex: 1;
585
650
  min-height: 0;
@@ -1192,45 +1257,65 @@
1192
1257
 
1193
1258
  /* src/components/ContentSwitcher/ContentSwitcher.css */
1194
1259
  .fractal-content-switcher {
1260
+ position: relative;
1195
1261
  display: inline-flex;
1196
1262
  gap: 2px;
1197
1263
  padding: 2px;
1198
- border: 1px solid var(--border-strong);
1264
+ border: 1px solid var(--border-subtle);
1199
1265
  border-radius: var(--radius-md);
1200
- background: var(--bg-inverse);
1266
+ background: var(--bg-surface-subtle);
1201
1267
  font-family: var(--font-sans);
1202
1268
  }
1269
+ .fractal-content-switcher__indicator {
1270
+ position: absolute;
1271
+ top: 0;
1272
+ left: 0;
1273
+ width: var(--fractal-content-switcher-indicator-width, 0);
1274
+ height: var(--fractal-content-switcher-indicator-height, 0);
1275
+ border-radius: var(--radius-sm);
1276
+ background: var(--bg-canvas);
1277
+ opacity: 0;
1278
+ pointer-events: none;
1279
+ transform: translate3d(var(--fractal-content-switcher-indicator-x, 0), var(--fractal-content-switcher-indicator-y, 0), 0);
1280
+ }
1281
+ .fractal-content-switcher[data-indicator-ready=true] .fractal-content-switcher__indicator {
1282
+ opacity: 1;
1283
+ transition:
1284
+ transform var(--duration-normal) var(--ease-in-out),
1285
+ width var(--duration-normal) var(--ease-in-out),
1286
+ height var(--duration-normal) var(--ease-in-out),
1287
+ opacity var(--duration-fast) var(--ease-out);
1288
+ }
1203
1289
  .fractal-content-switcher--full-width {
1204
1290
  display: flex;
1205
1291
  width: 100%;
1206
1292
  }
1207
1293
  .fractal-content-switcher__item {
1294
+ position: relative;
1295
+ z-index: 1;
1208
1296
  min-width: 128px;
1209
1297
  min-height: 40px;
1210
1298
  padding: 0 var(--space-4);
1211
1299
  border: 0;
1300
+ border-radius: var(--radius-sm);
1212
1301
  background: transparent;
1213
- color: var(--fg-inverse-secondary);
1302
+ color: var(--fg-secondary);
1214
1303
  cursor: pointer;
1215
1304
  font: inherit;
1216
1305
  font-size: 0.875rem;
1217
1306
  line-height: 1.25;
1218
1307
  text-align: center;
1219
- transition:
1220
- background-color var(--duration-fast) var(--ease-out),
1221
- color var(--duration-fast) var(--ease-out),
1222
- border-radius var(--duration-fast) var(--ease-out);
1308
+ transition: background-color var(--duration-fast) var(--ease-out), color var(--duration-fast) var(--ease-out);
1223
1309
  }
1224
1310
  .fractal-content-switcher--full-width .fractal-content-switcher__item {
1225
1311
  flex: 1;
1226
1312
  }
1227
1313
  .fractal-content-switcher__item:hover:not(:disabled):not(.fractal-content-switcher__item--active) {
1228
- background: var(--bg-inverse-subtle);
1229
- color: var(--fg-inverse);
1314
+ background: var(--hover-surface);
1315
+ color: var(--fg-primary);
1230
1316
  }
1231
1317
  .fractal-content-switcher__item--active {
1232
- border-radius: var(--radius-sm);
1233
- background: var(--bg-canvas);
1318
+ background: transparent;
1234
1319
  color: var(--fg-primary);
1235
1320
  }
1236
1321
  .fractal-content-switcher__item:focus-visible {
@@ -1241,9 +1326,14 @@
1241
1326
  }
1242
1327
  .fractal-content-switcher__item:disabled {
1243
1328
  cursor: not-allowed;
1244
- color: var(--fg-inverse-secondary);
1329
+ color: var(--fg-disabled);
1245
1330
  opacity: 0.5;
1246
1331
  }
1332
+ @media (prefers-reduced-motion: reduce) {
1333
+ .fractal-content-switcher[data-indicator-ready=true] .fractal-content-switcher__indicator {
1334
+ transition: none;
1335
+ }
1336
+ }
1247
1337
 
1248
1338
  /* src/components/Disclosure/Disclosure.css */
1249
1339
  .fractal-disclosure {
@@ -1371,6 +1461,305 @@
1371
1461
  }
1372
1462
  }
1373
1463
 
1464
+ /* src/components/Ghost/Ghost.css */
1465
+ .fractal-ghost {
1466
+ --fractal-ghost-base: var(--bg-surface-1);
1467
+ --fractal-ghost-shine: color-mix(in srgb, var(--bg-canvas) 82%, transparent);
1468
+ display: block;
1469
+ min-width: 0;
1470
+ min-height: 1px;
1471
+ background:
1472
+ linear-gradient(
1473
+ 105deg,
1474
+ var(--fractal-ghost-base) 20%,
1475
+ var(--fractal-ghost-shine) 44%,
1476
+ var(--fractal-ghost-base) 68%);
1477
+ background-size: 220% 100%;
1478
+ border-radius: var(--radius-sm);
1479
+ animation: fractal-ghost-shine var(--duration-ambient) var(--ease-in-out) infinite;
1480
+ }
1481
+ .fractal-ghost-line {
1482
+ height: 0.875rem;
1483
+ }
1484
+ .fractal-ghost-line--sm {
1485
+ height: 0.6875rem;
1486
+ }
1487
+ .fractal-ghost-line--lg {
1488
+ height: 1.125rem;
1489
+ }
1490
+ .fractal-ghost-stack {
1491
+ display: grid;
1492
+ gap: var(--space-2);
1493
+ }
1494
+ .fractal-ghost-button {
1495
+ border-radius: var(--radius-full);
1496
+ }
1497
+ .fractal-ghost-button--xs {
1498
+ width: 72px;
1499
+ height: 28px;
1500
+ }
1501
+ .fractal-ghost-button--sm {
1502
+ width: 84px;
1503
+ height: 32px;
1504
+ }
1505
+ .fractal-ghost-button--md {
1506
+ width: 96px;
1507
+ height: 40px;
1508
+ }
1509
+ .fractal-ghost-button--lg {
1510
+ width: 108px;
1511
+ height: 44px;
1512
+ }
1513
+ .fractal-ghost-button--xl {
1514
+ width: 128px;
1515
+ height: 56px;
1516
+ }
1517
+ .fractal-ghost-button--icon-only {
1518
+ width: var(--fractal-ghost-icon-size, 40px);
1519
+ }
1520
+ .fractal-ghost-button--xs.fractal-ghost-button--icon-only {
1521
+ --fractal-ghost-icon-size: 28px;
1522
+ }
1523
+ .fractal-ghost-button--sm.fractal-ghost-button--icon-only {
1524
+ --fractal-ghost-icon-size: 32px;
1525
+ }
1526
+ .fractal-ghost-button--lg.fractal-ghost-button--icon-only {
1527
+ --fractal-ghost-icon-size: 44px;
1528
+ }
1529
+ .fractal-ghost-button--xl.fractal-ghost-button--icon-only {
1530
+ --fractal-ghost-icon-size: 56px;
1531
+ }
1532
+ .fractal-ghost-card {
1533
+ display: grid;
1534
+ gap: var(--space-4);
1535
+ padding: var(--space-5);
1536
+ border: 1px solid var(--border-subtle);
1537
+ border-radius: var(--radius-md);
1538
+ background: var(--bg-canvas);
1539
+ }
1540
+ .fractal-ghost-table {
1541
+ overflow: hidden;
1542
+ border: 1px solid var(--border-subtle);
1543
+ border-radius: var(--radius-md);
1544
+ background: var(--bg-canvas);
1545
+ }
1546
+ .fractal-ghost-table__table {
1547
+ width: 100%;
1548
+ border-collapse: separate;
1549
+ border-spacing: 0;
1550
+ }
1551
+ .fractal-ghost-table__head-row {
1552
+ background: var(--bg-surface-1);
1553
+ }
1554
+ .fractal-ghost-table th {
1555
+ padding: 12px 16px;
1556
+ border-bottom: 1px solid var(--border-subtle);
1557
+ color: var(--fg-secondary);
1558
+ font-size: 0.75rem;
1559
+ font-weight: 500;
1560
+ text-align: left;
1561
+ }
1562
+ .fractal-ghost-table th + th,
1563
+ .fractal-ghost-table td + td {
1564
+ border-left: 1px solid var(--border-subtle);
1565
+ }
1566
+ .fractal-ghost-table td {
1567
+ padding: 14px 16px;
1568
+ }
1569
+ .fractal-ghost-table__row + .fractal-ghost-table__row td {
1570
+ border-top: 1px solid var(--border-subtle);
1571
+ }
1572
+ .fractal-ghost-table--sm th {
1573
+ padding: 8px 12px;
1574
+ }
1575
+ .fractal-ghost-table--sm td {
1576
+ padding: 10px 12px;
1577
+ }
1578
+ .fractal-ghost-table--lg th {
1579
+ padding: 18px 24px;
1580
+ }
1581
+ .fractal-ghost-table--lg td {
1582
+ padding: 22px 24px;
1583
+ }
1584
+ .fractal-ghost-field {
1585
+ display: grid;
1586
+ gap: var(--space-2);
1587
+ }
1588
+ .fractal-ghost-field__control {
1589
+ width: 100%;
1590
+ height: 40px;
1591
+ border: 1px solid var(--border-subtle);
1592
+ border-radius: var(--radius-md);
1593
+ }
1594
+ .fractal-ghost-field__control--multiline {
1595
+ height: 112px;
1596
+ }
1597
+ .fractal-ghost-label {
1598
+ border-radius: var(--radius-sm);
1599
+ }
1600
+ .fractal-ghost-alert {
1601
+ display: grid;
1602
+ gap: var(--space-2);
1603
+ padding: var(--space-4);
1604
+ border: 1px solid var(--border-subtle);
1605
+ border-radius: var(--radius-md);
1606
+ }
1607
+ .fractal-ghost-choice {
1608
+ display: flex;
1609
+ align-items: center;
1610
+ gap: var(--space-2);
1611
+ }
1612
+ .fractal-ghost-choice__control {
1613
+ width: 16px;
1614
+ height: 16px;
1615
+ border-radius: var(--radius-sm);
1616
+ }
1617
+ .fractal-ghost-chip {
1618
+ border-radius: var(--radius-full);
1619
+ }
1620
+ .fractal-ghost-link {
1621
+ display: inline-block;
1622
+ }
1623
+ .fractal-ghost-dropdown {
1624
+ display: flex;
1625
+ align-items: center;
1626
+ justify-content: space-between;
1627
+ width: 220px;
1628
+ height: 40px;
1629
+ padding: 0 var(--space-3);
1630
+ border: 1px solid var(--border-subtle);
1631
+ border-radius: var(--radius-md);
1632
+ }
1633
+ .fractal-ghost-dropdown__chevron {
1634
+ width: 14px;
1635
+ height: 14px;
1636
+ border-radius: var(--radius-full);
1637
+ }
1638
+ .fractal-ghost-switcher {
1639
+ display: flex;
1640
+ width: fit-content;
1641
+ gap: 2px;
1642
+ padding: 3px;
1643
+ border-radius: var(--radius-md);
1644
+ background: var(--bg-surface-1);
1645
+ }
1646
+ .fractal-ghost-switcher > .fractal-ghost {
1647
+ width: 76px;
1648
+ height: 32px;
1649
+ border-radius: calc(var(--radius-md) - 2px);
1650
+ }
1651
+ .fractal-ghost-disclosure {
1652
+ display: flex;
1653
+ align-items: center;
1654
+ gap: var(--space-3);
1655
+ padding: var(--space-3) 0;
1656
+ border-bottom: 1px solid var(--border-subtle);
1657
+ }
1658
+ .fractal-ghost-disclosure__icon {
1659
+ width: 16px;
1660
+ height: 16px;
1661
+ border-radius: var(--radius-full);
1662
+ }
1663
+ .fractal-ghost-pagination {
1664
+ display: flex;
1665
+ gap: var(--space-2);
1666
+ }
1667
+ .fractal-ghost-pagination > .fractal-ghost {
1668
+ width: 32px;
1669
+ height: 32px;
1670
+ border-radius: var(--radius-md);
1671
+ }
1672
+ .fractal-ghost-dropzone {
1673
+ display: grid;
1674
+ place-items: center;
1675
+ gap: var(--space-3);
1676
+ min-height: 184px;
1677
+ padding: var(--space-6);
1678
+ border: 1px dashed var(--border-default);
1679
+ border-radius: var(--radius-md);
1680
+ }
1681
+ .fractal-ghost-dropzone__icon {
1682
+ width: 32px;
1683
+ height: 32px;
1684
+ border-radius: var(--radius-full);
1685
+ }
1686
+ .fractal-ghost-prompt-card {
1687
+ min-height: 176px;
1688
+ }
1689
+ .fractal-ghost-sidebar {
1690
+ display: grid;
1691
+ align-content: start;
1692
+ gap: var(--space-7);
1693
+ width: 248px;
1694
+ min-height: 100%;
1695
+ padding: var(--space-5);
1696
+ border-right: 1px solid var(--border-subtle);
1697
+ background: var(--bg-canvas);
1698
+ }
1699
+ .fractal-ghost-sidebar__brand {
1700
+ width: 112px;
1701
+ height: 24px;
1702
+ }
1703
+ .fractal-ghost-sidebar__items {
1704
+ display: grid;
1705
+ gap: var(--space-2);
1706
+ }
1707
+ .fractal-ghost-sidebar__item {
1708
+ display: flex;
1709
+ align-items: center;
1710
+ gap: var(--space-3);
1711
+ height: 36px;
1712
+ padding: 0 var(--space-2);
1713
+ }
1714
+ .fractal-ghost-sidebar__item > .fractal-ghost {
1715
+ width: 16px;
1716
+ height: 16px;
1717
+ border-radius: var(--radius-sm);
1718
+ }
1719
+ .fractal-ghost-surface {
1720
+ display: grid;
1721
+ gap: var(--space-5);
1722
+ padding: var(--space-6);
1723
+ border: 1px solid var(--border-subtle);
1724
+ border-radius: var(--radius-lg);
1725
+ background: var(--bg-canvas);
1726
+ }
1727
+ .fractal-ghost-modal {
1728
+ width: min(100%, 420px);
1729
+ }
1730
+ .fractal-ghost-side-panel {
1731
+ width: min(100%, 540px);
1732
+ min-height: 480px;
1733
+ }
1734
+ .fractal-ghost-surface__header {
1735
+ display: flex;
1736
+ align-items: center;
1737
+ justify-content: space-between;
1738
+ }
1739
+ .fractal-ghost-surface__close {
1740
+ width: 28px;
1741
+ height: 28px;
1742
+ border-radius: var(--radius-md);
1743
+ }
1744
+ .fractal-ghost-surface__title {
1745
+ color: var(--fg-secondary);
1746
+ font-size: 0.75rem;
1747
+ }
1748
+ @keyframes fractal-ghost-shine {
1749
+ from {
1750
+ background-position: 110% 0;
1751
+ }
1752
+ to {
1753
+ background-position: -110% 0;
1754
+ }
1755
+ }
1756
+ @media (prefers-reduced-motion: reduce) {
1757
+ .fractal-ghost {
1758
+ animation: none;
1759
+ background: var(--fractal-ghost-base);
1760
+ }
1761
+ }
1762
+
1374
1763
  /* src/components/Sidebar/Sidebar.css */
1375
1764
  .fractal-sidebar {
1376
1765
  --fractal-sidebar-width: 232px;
@@ -1551,7 +1940,6 @@
1551
1940
  }
1552
1941
  .fractal-side-panel__header {
1553
1942
  display: flex;
1554
- min-height: 72px;
1555
1943
  align-items: flex-start;
1556
1944
  justify-content: space-between;
1557
1945
  gap: var(--space-4);
@@ -1598,6 +1986,10 @@
1598
1986
  overflow: auto;
1599
1987
  padding: var(--space-2) var(--space-6) var(--space-6);
1600
1988
  }
1989
+ .fractal-side-panel__body--loading {
1990
+ display: grid;
1991
+ place-items: center;
1992
+ }
1601
1993
  .fractal-side-panel__footer {
1602
1994
  display: flex;
1603
1995
  justify-content: flex-end;