@mirror-physics/fractal-ui 0.2.0-next.26 → 0.2.0-next.28

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;
@@ -580,6 +632,11 @@
580
632
  font-size: 0.875rem;
581
633
  color: var(--fg-secondary);
582
634
  }
635
+ .fractal-modal-body--loading {
636
+ display: grid;
637
+ min-height: 168px;
638
+ place-items: center;
639
+ }
583
640
  .fractal-modal-body--lg {
584
641
  flex: 1;
585
642
  min-height: 0;
@@ -708,6 +765,17 @@
708
765
  .fractal-dropdown-trigger--tertiary:hover {
709
766
  background: var(--bg-surface-1);
710
767
  }
768
+ .fractal-dropdown-trigger:disabled,
769
+ .fractal-dropdown-trigger:disabled:hover {
770
+ color: var(--fg-disabled);
771
+ cursor: not-allowed;
772
+ background: var(--bg-surface-1);
773
+ }
774
+ .fractal-dropdown-trigger:disabled .fractal-dropdown-selected-text,
775
+ .fractal-dropdown-trigger:disabled .fractal-dropdown-chevron,
776
+ .fractal-dropdown-trigger:disabled .fractal-dropdown-icon {
777
+ color: var(--fg-disabled);
778
+ }
711
779
  .fractal-dropdown-trigger:focus-visible {
712
780
  outline: none;
713
781
  box-shadow: 0 0 0 2px var(--bg-canvas), 0 0 0 4px var(--border-focus);
@@ -1181,45 +1249,65 @@
1181
1249
 
1182
1250
  /* src/components/ContentSwitcher/ContentSwitcher.css */
1183
1251
  .fractal-content-switcher {
1252
+ position: relative;
1184
1253
  display: inline-flex;
1185
1254
  gap: 2px;
1186
1255
  padding: 2px;
1187
- border: 1px solid var(--border-strong);
1256
+ border: 1px solid var(--border-subtle);
1188
1257
  border-radius: var(--radius-md);
1189
- background: var(--bg-inverse);
1258
+ background: var(--bg-surface-subtle);
1190
1259
  font-family: var(--font-sans);
1191
1260
  }
1261
+ .fractal-content-switcher__indicator {
1262
+ position: absolute;
1263
+ top: 0;
1264
+ left: 0;
1265
+ width: var(--fractal-content-switcher-indicator-width, 0);
1266
+ height: var(--fractal-content-switcher-indicator-height, 0);
1267
+ border-radius: var(--radius-sm);
1268
+ background: var(--bg-canvas);
1269
+ opacity: 0;
1270
+ pointer-events: none;
1271
+ transform: translate3d(var(--fractal-content-switcher-indicator-x, 0), var(--fractal-content-switcher-indicator-y, 0), 0);
1272
+ }
1273
+ .fractal-content-switcher[data-indicator-ready=true] .fractal-content-switcher__indicator {
1274
+ opacity: 1;
1275
+ transition:
1276
+ transform var(--duration-normal) var(--ease-in-out),
1277
+ width var(--duration-normal) var(--ease-in-out),
1278
+ height var(--duration-normal) var(--ease-in-out),
1279
+ opacity var(--duration-fast) var(--ease-out);
1280
+ }
1192
1281
  .fractal-content-switcher--full-width {
1193
1282
  display: flex;
1194
1283
  width: 100%;
1195
1284
  }
1196
1285
  .fractal-content-switcher__item {
1286
+ position: relative;
1287
+ z-index: 1;
1197
1288
  min-width: 128px;
1198
1289
  min-height: 40px;
1199
1290
  padding: 0 var(--space-4);
1200
1291
  border: 0;
1292
+ border-radius: var(--radius-sm);
1201
1293
  background: transparent;
1202
- color: var(--fg-inverse-secondary);
1294
+ color: var(--fg-secondary);
1203
1295
  cursor: pointer;
1204
1296
  font: inherit;
1205
1297
  font-size: 0.875rem;
1206
1298
  line-height: 1.25;
1207
1299
  text-align: center;
1208
- transition:
1209
- background-color var(--duration-fast) var(--ease-out),
1210
- color var(--duration-fast) var(--ease-out),
1211
- border-radius var(--duration-fast) var(--ease-out);
1300
+ transition: background-color var(--duration-fast) var(--ease-out), color var(--duration-fast) var(--ease-out);
1212
1301
  }
1213
1302
  .fractal-content-switcher--full-width .fractal-content-switcher__item {
1214
1303
  flex: 1;
1215
1304
  }
1216
1305
  .fractal-content-switcher__item:hover:not(:disabled):not(.fractal-content-switcher__item--active) {
1217
- background: var(--bg-inverse-subtle);
1218
- color: var(--fg-inverse);
1306
+ background: var(--hover-surface);
1307
+ color: var(--fg-primary);
1219
1308
  }
1220
1309
  .fractal-content-switcher__item--active {
1221
- border-radius: var(--radius-sm);
1222
- background: var(--bg-canvas);
1310
+ background: transparent;
1223
1311
  color: var(--fg-primary);
1224
1312
  }
1225
1313
  .fractal-content-switcher__item:focus-visible {
@@ -1230,9 +1318,14 @@
1230
1318
  }
1231
1319
  .fractal-content-switcher__item:disabled {
1232
1320
  cursor: not-allowed;
1233
- color: var(--fg-inverse-secondary);
1321
+ color: var(--fg-disabled);
1234
1322
  opacity: 0.5;
1235
1323
  }
1324
+ @media (prefers-reduced-motion: reduce) {
1325
+ .fractal-content-switcher[data-indicator-ready=true] .fractal-content-switcher__indicator {
1326
+ transition: none;
1327
+ }
1328
+ }
1236
1329
 
1237
1330
  /* src/components/Disclosure/Disclosure.css */
1238
1331
  .fractal-disclosure {
@@ -1360,6 +1453,305 @@
1360
1453
  }
1361
1454
  }
1362
1455
 
1456
+ /* src/components/Ghost/Ghost.css */
1457
+ .fractal-ghost {
1458
+ --fractal-ghost-base: var(--bg-surface-1);
1459
+ --fractal-ghost-shine: color-mix(in srgb, var(--bg-canvas) 82%, transparent);
1460
+ display: block;
1461
+ min-width: 0;
1462
+ min-height: 1px;
1463
+ background:
1464
+ linear-gradient(
1465
+ 105deg,
1466
+ var(--fractal-ghost-base) 20%,
1467
+ var(--fractal-ghost-shine) 44%,
1468
+ var(--fractal-ghost-base) 68%);
1469
+ background-size: 220% 100%;
1470
+ border-radius: var(--radius-sm);
1471
+ animation: fractal-ghost-shine var(--duration-ambient) var(--ease-in-out) infinite;
1472
+ }
1473
+ .fractal-ghost-line {
1474
+ height: 0.875rem;
1475
+ }
1476
+ .fractal-ghost-line--sm {
1477
+ height: 0.6875rem;
1478
+ }
1479
+ .fractal-ghost-line--lg {
1480
+ height: 1.125rem;
1481
+ }
1482
+ .fractal-ghost-stack {
1483
+ display: grid;
1484
+ gap: var(--space-2);
1485
+ }
1486
+ .fractal-ghost-button {
1487
+ border-radius: var(--radius-full);
1488
+ }
1489
+ .fractal-ghost-button--xs {
1490
+ width: 72px;
1491
+ height: 28px;
1492
+ }
1493
+ .fractal-ghost-button--sm {
1494
+ width: 84px;
1495
+ height: 32px;
1496
+ }
1497
+ .fractal-ghost-button--md {
1498
+ width: 96px;
1499
+ height: 40px;
1500
+ }
1501
+ .fractal-ghost-button--lg {
1502
+ width: 108px;
1503
+ height: 44px;
1504
+ }
1505
+ .fractal-ghost-button--xl {
1506
+ width: 128px;
1507
+ height: 56px;
1508
+ }
1509
+ .fractal-ghost-button--icon-only {
1510
+ width: var(--fractal-ghost-icon-size, 40px);
1511
+ }
1512
+ .fractal-ghost-button--xs.fractal-ghost-button--icon-only {
1513
+ --fractal-ghost-icon-size: 28px;
1514
+ }
1515
+ .fractal-ghost-button--sm.fractal-ghost-button--icon-only {
1516
+ --fractal-ghost-icon-size: 32px;
1517
+ }
1518
+ .fractal-ghost-button--lg.fractal-ghost-button--icon-only {
1519
+ --fractal-ghost-icon-size: 44px;
1520
+ }
1521
+ .fractal-ghost-button--xl.fractal-ghost-button--icon-only {
1522
+ --fractal-ghost-icon-size: 56px;
1523
+ }
1524
+ .fractal-ghost-card {
1525
+ display: grid;
1526
+ gap: var(--space-4);
1527
+ padding: var(--space-5);
1528
+ border: 1px solid var(--border-subtle);
1529
+ border-radius: var(--radius-md);
1530
+ background: var(--bg-canvas);
1531
+ }
1532
+ .fractal-ghost-table {
1533
+ overflow: hidden;
1534
+ border: 1px solid var(--border-subtle);
1535
+ border-radius: var(--radius-md);
1536
+ background: var(--bg-canvas);
1537
+ }
1538
+ .fractal-ghost-table__table {
1539
+ width: 100%;
1540
+ border-collapse: separate;
1541
+ border-spacing: 0;
1542
+ }
1543
+ .fractal-ghost-table__head-row {
1544
+ background: var(--bg-surface-1);
1545
+ }
1546
+ .fractal-ghost-table th {
1547
+ padding: 12px 16px;
1548
+ border-bottom: 1px solid var(--border-subtle);
1549
+ color: var(--fg-secondary);
1550
+ font-size: 0.75rem;
1551
+ font-weight: 500;
1552
+ text-align: left;
1553
+ }
1554
+ .fractal-ghost-table th + th,
1555
+ .fractal-ghost-table td + td {
1556
+ border-left: 1px solid var(--border-subtle);
1557
+ }
1558
+ .fractal-ghost-table td {
1559
+ padding: 14px 16px;
1560
+ }
1561
+ .fractal-ghost-table__row + .fractal-ghost-table__row td {
1562
+ border-top: 1px solid var(--border-subtle);
1563
+ }
1564
+ .fractal-ghost-table--sm th {
1565
+ padding: 8px 12px;
1566
+ }
1567
+ .fractal-ghost-table--sm td {
1568
+ padding: 10px 12px;
1569
+ }
1570
+ .fractal-ghost-table--lg th {
1571
+ padding: 18px 24px;
1572
+ }
1573
+ .fractal-ghost-table--lg td {
1574
+ padding: 22px 24px;
1575
+ }
1576
+ .fractal-ghost-field {
1577
+ display: grid;
1578
+ gap: var(--space-2);
1579
+ }
1580
+ .fractal-ghost-field__control {
1581
+ width: 100%;
1582
+ height: 40px;
1583
+ border: 1px solid var(--border-subtle);
1584
+ border-radius: var(--radius-md);
1585
+ }
1586
+ .fractal-ghost-field__control--multiline {
1587
+ height: 112px;
1588
+ }
1589
+ .fractal-ghost-label {
1590
+ border-radius: var(--radius-sm);
1591
+ }
1592
+ .fractal-ghost-alert {
1593
+ display: grid;
1594
+ gap: var(--space-2);
1595
+ padding: var(--space-4);
1596
+ border: 1px solid var(--border-subtle);
1597
+ border-radius: var(--radius-md);
1598
+ }
1599
+ .fractal-ghost-choice {
1600
+ display: flex;
1601
+ align-items: center;
1602
+ gap: var(--space-2);
1603
+ }
1604
+ .fractal-ghost-choice__control {
1605
+ width: 16px;
1606
+ height: 16px;
1607
+ border-radius: var(--radius-sm);
1608
+ }
1609
+ .fractal-ghost-chip {
1610
+ border-radius: var(--radius-full);
1611
+ }
1612
+ .fractal-ghost-link {
1613
+ display: inline-block;
1614
+ }
1615
+ .fractal-ghost-dropdown {
1616
+ display: flex;
1617
+ align-items: center;
1618
+ justify-content: space-between;
1619
+ width: 220px;
1620
+ height: 40px;
1621
+ padding: 0 var(--space-3);
1622
+ border: 1px solid var(--border-subtle);
1623
+ border-radius: var(--radius-md);
1624
+ }
1625
+ .fractal-ghost-dropdown__chevron {
1626
+ width: 14px;
1627
+ height: 14px;
1628
+ border-radius: var(--radius-full);
1629
+ }
1630
+ .fractal-ghost-switcher {
1631
+ display: flex;
1632
+ width: fit-content;
1633
+ gap: 2px;
1634
+ padding: 3px;
1635
+ border-radius: var(--radius-md);
1636
+ background: var(--bg-surface-1);
1637
+ }
1638
+ .fractal-ghost-switcher > .fractal-ghost {
1639
+ width: 76px;
1640
+ height: 32px;
1641
+ border-radius: calc(var(--radius-md) - 2px);
1642
+ }
1643
+ .fractal-ghost-disclosure {
1644
+ display: flex;
1645
+ align-items: center;
1646
+ gap: var(--space-3);
1647
+ padding: var(--space-3) 0;
1648
+ border-bottom: 1px solid var(--border-subtle);
1649
+ }
1650
+ .fractal-ghost-disclosure__icon {
1651
+ width: 16px;
1652
+ height: 16px;
1653
+ border-radius: var(--radius-full);
1654
+ }
1655
+ .fractal-ghost-pagination {
1656
+ display: flex;
1657
+ gap: var(--space-2);
1658
+ }
1659
+ .fractal-ghost-pagination > .fractal-ghost {
1660
+ width: 32px;
1661
+ height: 32px;
1662
+ border-radius: var(--radius-md);
1663
+ }
1664
+ .fractal-ghost-dropzone {
1665
+ display: grid;
1666
+ place-items: center;
1667
+ gap: var(--space-3);
1668
+ min-height: 184px;
1669
+ padding: var(--space-6);
1670
+ border: 1px dashed var(--border-default);
1671
+ border-radius: var(--radius-md);
1672
+ }
1673
+ .fractal-ghost-dropzone__icon {
1674
+ width: 32px;
1675
+ height: 32px;
1676
+ border-radius: var(--radius-full);
1677
+ }
1678
+ .fractal-ghost-prompt-card {
1679
+ min-height: 176px;
1680
+ }
1681
+ .fractal-ghost-sidebar {
1682
+ display: grid;
1683
+ align-content: start;
1684
+ gap: var(--space-7);
1685
+ width: 248px;
1686
+ min-height: 100%;
1687
+ padding: var(--space-5);
1688
+ border-right: 1px solid var(--border-subtle);
1689
+ background: var(--bg-canvas);
1690
+ }
1691
+ .fractal-ghost-sidebar__brand {
1692
+ width: 112px;
1693
+ height: 24px;
1694
+ }
1695
+ .fractal-ghost-sidebar__items {
1696
+ display: grid;
1697
+ gap: var(--space-2);
1698
+ }
1699
+ .fractal-ghost-sidebar__item {
1700
+ display: flex;
1701
+ align-items: center;
1702
+ gap: var(--space-3);
1703
+ height: 36px;
1704
+ padding: 0 var(--space-2);
1705
+ }
1706
+ .fractal-ghost-sidebar__item > .fractal-ghost {
1707
+ width: 16px;
1708
+ height: 16px;
1709
+ border-radius: var(--radius-sm);
1710
+ }
1711
+ .fractal-ghost-surface {
1712
+ display: grid;
1713
+ gap: var(--space-5);
1714
+ padding: var(--space-6);
1715
+ border: 1px solid var(--border-subtle);
1716
+ border-radius: var(--radius-lg);
1717
+ background: var(--bg-canvas);
1718
+ }
1719
+ .fractal-ghost-modal {
1720
+ width: min(100%, 420px);
1721
+ }
1722
+ .fractal-ghost-side-panel {
1723
+ width: min(100%, 540px);
1724
+ min-height: 480px;
1725
+ }
1726
+ .fractal-ghost-surface__header {
1727
+ display: flex;
1728
+ align-items: center;
1729
+ justify-content: space-between;
1730
+ }
1731
+ .fractal-ghost-surface__close {
1732
+ width: 28px;
1733
+ height: 28px;
1734
+ border-radius: var(--radius-md);
1735
+ }
1736
+ .fractal-ghost-surface__title {
1737
+ color: var(--fg-secondary);
1738
+ font-size: 0.75rem;
1739
+ }
1740
+ @keyframes fractal-ghost-shine {
1741
+ from {
1742
+ background-position: 110% 0;
1743
+ }
1744
+ to {
1745
+ background-position: -110% 0;
1746
+ }
1747
+ }
1748
+ @media (prefers-reduced-motion: reduce) {
1749
+ .fractal-ghost {
1750
+ animation: none;
1751
+ background: var(--fractal-ghost-base);
1752
+ }
1753
+ }
1754
+
1363
1755
  /* src/components/Sidebar/Sidebar.css */
1364
1756
  .fractal-sidebar {
1365
1757
  --fractal-sidebar-width: 232px;
@@ -1540,7 +1932,6 @@
1540
1932
  }
1541
1933
  .fractal-side-panel__header {
1542
1934
  display: flex;
1543
- min-height: 72px;
1544
1935
  align-items: flex-start;
1545
1936
  justify-content: space-between;
1546
1937
  gap: var(--space-4);
@@ -1587,6 +1978,10 @@
1587
1978
  overflow: auto;
1588
1979
  padding: var(--space-2) var(--space-6) var(--space-6);
1589
1980
  }
1981
+ .fractal-side-panel__body--loading {
1982
+ display: grid;
1983
+ place-items: center;
1984
+ }
1590
1985
  .fractal-side-panel__footer {
1591
1986
  display: flex;
1592
1987
  justify-content: flex-end;