odt-ui-rails 2.2.4 → 2.2.5
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.
- checksums.yaml +4 -4
- data/README.md +21 -2
- data/app/assets/stylesheets/odt_ui/styles.css +489 -109
- data/app/assets/stylesheets/odt_ui.css +489 -109
- data/lib/generators/odt/install_generator.rb +2 -3
- data/lib/generators/odt/templates/odt_dropdown_controller.js +137 -0
- data/lib/generators/odt/templates/odt_modal_controller.js +24 -0
- data/lib/generators/odt/templates/odt_toast_controller.js +12 -0
- data/lib/generators/odt/templates/odt_toaster_controller.js +114 -0
- data/lib/generators/odt/templates/odt_ui.rbs +119 -61
- data/lib/odt_ui/engine.rb +0 -1
- data/lib/odt_ui/helper.rb +324 -282
- data/lib/odt_ui/version.rb +1 -1
- data/lib/odt_ui.rb +6 -1
- data/sig/odt_ui.rbs +119 -61
- metadata +3 -4
- data/app/assets/stylesheets/odt_ui/theme.css +0 -126
- data/app/javascript/controllers/odt_modal_controller.js +0 -61
- data/app/javascript/controllers/odt_toast_controller.js +0 -40
|
@@ -590,91 +590,120 @@
|
|
|
590
590
|
.odt-btn--filled {
|
|
591
591
|
box-shadow: var(--shadow-card);
|
|
592
592
|
}
|
|
593
|
-
.odt-btn--filled-primary
|
|
593
|
+
.odt-btn--filled-primary,
|
|
594
|
+
.odt-btn--capsule-primary {
|
|
594
595
|
background-color: var(--color-primary-500);
|
|
595
596
|
color: var(--color-btn-primary-fg, #ffffff);
|
|
596
597
|
}
|
|
597
|
-
.odt-btn--filled-primary:hover:not(:disabled)
|
|
598
|
+
.odt-btn--filled-primary:hover:not(:disabled),
|
|
599
|
+
.odt-btn--capsule-primary:hover:not(:disabled) {
|
|
598
600
|
background-color: var(--color-primary-600);
|
|
599
601
|
}
|
|
600
|
-
.odt-btn--filled-primary:active:not(:disabled)
|
|
602
|
+
.odt-btn--filled-primary:active:not(:disabled),
|
|
603
|
+
.odt-btn--capsule-primary:active:not(:disabled) {
|
|
601
604
|
background-color: var(--color-primary-700);
|
|
602
605
|
}
|
|
603
606
|
|
|
604
|
-
.odt-btn--filled-secondary
|
|
607
|
+
.odt-btn--filled-secondary,
|
|
608
|
+
.odt-btn--capsule-secondary {
|
|
605
609
|
background-color: var(--color-secondary-500);
|
|
606
610
|
color: var(--color-btn-secondary-fg, hsl(224 25% 6%));
|
|
607
611
|
}
|
|
608
|
-
.odt-btn--filled-secondary:hover:not(:disabled)
|
|
612
|
+
.odt-btn--filled-secondary:hover:not(:disabled),
|
|
613
|
+
.odt-btn--capsule-secondary:hover:not(:disabled) {
|
|
609
614
|
background-color: var(--color-secondary-400);
|
|
610
615
|
}
|
|
611
|
-
.odt-btn--filled-secondary:active:not(:disabled)
|
|
616
|
+
.odt-btn--filled-secondary:active:not(:disabled),
|
|
617
|
+
.odt-btn--capsule-secondary:active:not(:disabled) {
|
|
612
618
|
background-color: var(--color-secondary-600);
|
|
613
619
|
}
|
|
614
620
|
|
|
615
|
-
.odt-btn--filled-surface
|
|
621
|
+
.odt-btn--filled-surface,
|
|
622
|
+
.odt-btn--capsule-surface {
|
|
616
623
|
background-color: var(--color-surface);
|
|
617
624
|
color: var(--color-btn-surface-fg, var(--color-fg-strong));
|
|
618
625
|
}
|
|
619
|
-
.odt-btn--filled-surface:hover:not(:disabled)
|
|
626
|
+
.odt-btn--filled-surface:hover:not(:disabled),
|
|
627
|
+
.odt-btn--capsule-surface:hover:not(:disabled) {
|
|
620
628
|
background-color: var(--color-surface-muted);
|
|
621
629
|
}
|
|
622
|
-
.odt-btn--filled-surface:active:not(:disabled)
|
|
630
|
+
.odt-btn--filled-surface:active:not(:disabled),
|
|
631
|
+
.odt-btn--capsule-surface:active:not(:disabled) {
|
|
623
632
|
background-color: var(--color-surface-subtle);
|
|
624
633
|
}
|
|
625
634
|
|
|
626
|
-
.odt-btn--filled-muted
|
|
635
|
+
.odt-btn--filled-muted,
|
|
636
|
+
.odt-btn--capsule-muted {
|
|
627
637
|
background-color: var(--color-surface-muted);
|
|
628
638
|
color: var(--color-btn-muted-fg, var(--color-fg));
|
|
629
639
|
}
|
|
630
|
-
.odt-btn--filled-muted:hover:not(:disabled)
|
|
640
|
+
.odt-btn--filled-muted:hover:not(:disabled),
|
|
641
|
+
.odt-btn--capsule-muted:hover:not(:disabled) {
|
|
631
642
|
background-color: var(--color-surface-subtle);
|
|
632
643
|
color: var(--color-fg-strong);
|
|
633
644
|
}
|
|
634
|
-
.odt-btn--filled-muted:active:not(:disabled)
|
|
645
|
+
.odt-btn--filled-muted:active:not(:disabled),
|
|
646
|
+
.odt-btn--capsule-muted:active:not(:disabled) {
|
|
635
647
|
background-color: var(--color-surface);
|
|
636
648
|
}
|
|
637
649
|
|
|
638
|
-
.odt-btn--filled-inverse
|
|
650
|
+
.odt-btn--filled-inverse,
|
|
651
|
+
.odt-btn--capsule-inverse {
|
|
639
652
|
background-color: var(--color-fg-strong);
|
|
640
653
|
color: var(--color-btn-inverse-fg, var(--color-surface));
|
|
641
654
|
}
|
|
642
|
-
.odt-btn--filled-inverse:hover:not(:disabled)
|
|
643
|
-
.odt-btn--
|
|
655
|
+
.odt-btn--filled-inverse:hover:not(:disabled),
|
|
656
|
+
.odt-btn--capsule-inverse:hover:not(:disabled) { opacity: 0.9; }
|
|
657
|
+
.odt-btn--filled-inverse:active:not(:disabled),
|
|
658
|
+
.odt-btn--capsule-inverse:active:not(:disabled) { opacity: 0.8; }
|
|
644
659
|
|
|
645
|
-
.odt-btn--filled-success
|
|
660
|
+
.odt-btn--filled-success,
|
|
661
|
+
.odt-btn--capsule-success {
|
|
646
662
|
background-color: var(--color-success);
|
|
647
663
|
color: var(--color-btn-success-fg, #ffffff);
|
|
648
664
|
}
|
|
649
|
-
.odt-btn--filled-success:hover:not(:disabled)
|
|
650
|
-
.odt-btn--
|
|
665
|
+
.odt-btn--filled-success:hover:not(:disabled),
|
|
666
|
+
.odt-btn--capsule-success:hover:not(:disabled) { opacity: 0.9; }
|
|
667
|
+
.odt-btn--filled-success:active:not(:disabled),
|
|
668
|
+
.odt-btn--capsule-success:active:not(:disabled) { opacity: 0.8; }
|
|
651
669
|
|
|
652
|
-
.odt-btn--filled-warning
|
|
670
|
+
.odt-btn--filled-warning,
|
|
671
|
+
.odt-btn--capsule-warning {
|
|
653
672
|
background-color: var(--color-warning);
|
|
654
673
|
color: var(--color-btn-warning-fg, var(--color-fg-strong));
|
|
655
674
|
}
|
|
656
|
-
.odt-btn--filled-warning:hover:not(:disabled)
|
|
657
|
-
.odt-btn--
|
|
675
|
+
.odt-btn--filled-warning:hover:not(:disabled),
|
|
676
|
+
.odt-btn--capsule-warning:hover:not(:disabled) { opacity: 0.9; }
|
|
677
|
+
.odt-btn--filled-warning:active:not(:disabled),
|
|
678
|
+
.odt-btn--capsule-warning:active:not(:disabled) { opacity: 0.8; }
|
|
658
679
|
|
|
659
|
-
.odt-btn--filled-danger
|
|
680
|
+
.odt-btn--filled-danger,
|
|
681
|
+
.odt-btn--capsule-danger {
|
|
660
682
|
background-color: var(--color-danger);
|
|
661
683
|
color: var(--color-btn-danger-fg, #ffffff);
|
|
662
684
|
}
|
|
663
|
-
.odt-btn--filled-danger:hover:not(:disabled)
|
|
664
|
-
.odt-btn--
|
|
685
|
+
.odt-btn--filled-danger:hover:not(:disabled),
|
|
686
|
+
.odt-btn--capsule-danger:hover:not(:disabled) { opacity: 0.9; }
|
|
687
|
+
.odt-btn--filled-danger:active:not(:disabled),
|
|
688
|
+
.odt-btn--capsule-danger:active:not(:disabled) { opacity: 0.8; }
|
|
665
689
|
|
|
666
|
-
.odt-btn--filled-info
|
|
690
|
+
.odt-btn--filled-info,
|
|
691
|
+
.odt-btn--capsule-info {
|
|
667
692
|
background-color: var(--color-info);
|
|
668
693
|
color: var(--color-btn-info-fg, #ffffff);
|
|
669
694
|
}
|
|
670
|
-
.odt-btn--filled-info:hover:not(:disabled)
|
|
671
|
-
.odt-btn--
|
|
695
|
+
.odt-btn--filled-info:hover:not(:disabled),
|
|
696
|
+
.odt-btn--capsule-info:hover:not(:disabled) { opacity: 0.9; }
|
|
697
|
+
.odt-btn--filled-info:active:not(:disabled),
|
|
698
|
+
.odt-btn--capsule-info:active:not(:disabled) { opacity: 0.8; }
|
|
672
699
|
|
|
673
|
-
.odt-btn--filled-neutral
|
|
700
|
+
.odt-btn--filled-neutral,
|
|
701
|
+
.odt-btn--capsule-neutral {
|
|
674
702
|
background-color: var(--color-neutral-800);
|
|
675
703
|
color: #ffffff;
|
|
676
704
|
}
|
|
677
|
-
.odt-btn--filled-neutral:hover:not(:disabled)
|
|
705
|
+
.odt-btn--filled-neutral:hover:not(:disabled),
|
|
706
|
+
.odt-btn--capsule-neutral:hover:not(:disabled) {
|
|
678
707
|
background-color: var(--color-neutral-900);
|
|
679
708
|
}
|
|
680
709
|
|
|
@@ -1101,6 +1130,11 @@
|
|
|
1101
1130
|
.odt-color-muted { color: var(--color-fg-muted); }
|
|
1102
1131
|
.odt-color-subtle { color: var(--color-fg-subtle); }
|
|
1103
1132
|
.odt-color-disabled { color: var(--color-fg-disabled); }
|
|
1133
|
+
.odt-color-inverse-strong { color: var(--color-fg-inverse-strong); }
|
|
1134
|
+
.odt-color-inverse { color: var(--color-fg-inverse); }
|
|
1135
|
+
.odt-color-inverse-muted { color: var(--color-fg-inverse-muted); }
|
|
1136
|
+
.odt-color-inverse-subtle { color: var(--color-fg-inverse-subtle); }
|
|
1137
|
+
.odt-color-inverse-disabled { color: var(--color-fg-inverse-disabled); }
|
|
1104
1138
|
.odt-color-primary { color: var(--color-fg-primary); }
|
|
1105
1139
|
.odt-color-secondary { color: var(--color-fg-secondary); }
|
|
1106
1140
|
.odt-color-success { color: var(--color-fg-success); }
|
|
@@ -1254,6 +1288,14 @@
|
|
|
1254
1288
|
border-color: var(--color-ring);
|
|
1255
1289
|
}
|
|
1256
1290
|
|
|
1291
|
+
.odt-input--unstyled,
|
|
1292
|
+
.odt-textarea--unstyled {
|
|
1293
|
+
background: transparent;
|
|
1294
|
+
border: none;
|
|
1295
|
+
padding: 0;
|
|
1296
|
+
box-shadow: none;
|
|
1297
|
+
}
|
|
1298
|
+
|
|
1257
1299
|
/* Form Sizes */
|
|
1258
1300
|
.odt-input--sm, .odt-select--sm {
|
|
1259
1301
|
height: 2rem;
|
|
@@ -1661,134 +1703,135 @@
|
|
|
1661
1703
|
left: 0;
|
|
1662
1704
|
}
|
|
1663
1705
|
|
|
1706
|
+
.odt-toaster {
|
|
1707
|
+
position: fixed;
|
|
1708
|
+
z-index: 9999;
|
|
1709
|
+
box-sizing: border-box;
|
|
1710
|
+
font-family: inherit;
|
|
1711
|
+
width: 100%;
|
|
1712
|
+
max-width: 24rem; /* 384px */
|
|
1713
|
+
padding: var(--spacing-4, 1rem);
|
|
1714
|
+
pointer-events: none;
|
|
1715
|
+
min-height: 5rem;
|
|
1716
|
+
}
|
|
1717
|
+
|
|
1718
|
+
/* Positions */
|
|
1719
|
+
.odt-toaster--top-right {
|
|
1720
|
+
top: 0;
|
|
1721
|
+
right: 0;
|
|
1722
|
+
}
|
|
1723
|
+
|
|
1724
|
+
.odt-toaster--top-center {
|
|
1725
|
+
top: 0;
|
|
1726
|
+
left: 50%;
|
|
1727
|
+
transform: translateX(-50%);
|
|
1728
|
+
}
|
|
1729
|
+
|
|
1730
|
+
.odt-toaster--top-left {
|
|
1731
|
+
top: 0;
|
|
1732
|
+
left: 0;
|
|
1733
|
+
}
|
|
1734
|
+
|
|
1664
1735
|
.odt-toaster--bottom-right {
|
|
1665
1736
|
bottom: 0;
|
|
1666
1737
|
right: 0;
|
|
1667
|
-
flex-direction: column-reverse;
|
|
1668
1738
|
}
|
|
1669
1739
|
|
|
1670
1740
|
.odt-toaster--bottom-center {
|
|
1671
1741
|
bottom: 0;
|
|
1672
1742
|
left: 50%;
|
|
1673
1743
|
transform: translateX(-50%);
|
|
1674
|
-
flex-direction: column-reverse;
|
|
1675
1744
|
}
|
|
1676
1745
|
|
|
1677
1746
|
.odt-toaster--bottom-left {
|
|
1678
1747
|
bottom: 0;
|
|
1679
1748
|
left: 0;
|
|
1680
|
-
flex-direction: column-reverse;
|
|
1681
1749
|
}
|
|
1682
1750
|
|
|
1683
|
-
/* Toast Item */
|
|
1751
|
+
/* Toast Item Card (Absolute within Toaster for 3D stacking) */
|
|
1684
1752
|
.odt-toast {
|
|
1685
|
-
position:
|
|
1686
|
-
|
|
1753
|
+
position: absolute;
|
|
1754
|
+
left: var(--spacing-4, 1rem);
|
|
1755
|
+
right: var(--spacing-4, 1rem);
|
|
1687
1756
|
box-sizing: border-box;
|
|
1688
1757
|
display: flex;
|
|
1689
1758
|
align-items: flex-start;
|
|
1690
1759
|
gap: var(--spacing-3, 0.75rem);
|
|
1691
|
-
padding: var(--spacing-
|
|
1760
|
+
padding: var(--spacing-4, 1rem) var(--spacing-4-5, 1.125rem);
|
|
1692
1761
|
background-color: var(--color-surface-elevated, #ffffff);
|
|
1693
1762
|
color: var(--color-fg);
|
|
1694
1763
|
border-radius: var(--radius-2xl, 1rem);
|
|
1695
|
-
box-shadow: 0
|
|
1696
|
-
border: 1px solid var(--color-line-muted, #f4f4f5);
|
|
1764
|
+
box-shadow: 0 10px 25px -5px rgba(0, 0, 0, 0.08), 0 8px 10px -6px rgba(0, 0, 0, 0.04);
|
|
1697
1765
|
pointer-events: auto;
|
|
1698
1766
|
user-select: none;
|
|
1699
1767
|
font-family: inherit;
|
|
1700
1768
|
overflow: hidden;
|
|
1701
|
-
|
|
1702
|
-
|
|
1703
|
-
|
|
1704
|
-
|
|
1705
|
-
.odt-toast--exiting {
|
|
1706
|
-
animation: odt-toast-exit 0.25s cubic-bezier(0.16, 1, 0.3, 1) forwards;
|
|
1707
|
-
}
|
|
1708
|
-
|
|
1709
|
-
@keyframes odt-toast-enter {
|
|
1710
|
-
0% {
|
|
1711
|
-
opacity: 0;
|
|
1712
|
-
transform: translateY(-12px) scale(0.96);
|
|
1713
|
-
}
|
|
1714
|
-
100% {
|
|
1715
|
-
opacity: 1;
|
|
1716
|
-
transform: translateY(0) scale(1);
|
|
1717
|
-
}
|
|
1769
|
+
transition: transform 0.32s cubic-bezier(0.16, 1, 0.3, 1),
|
|
1770
|
+
opacity 0.28s cubic-bezier(0.16, 1, 0.3, 1),
|
|
1771
|
+
box-shadow 0.25s ease;
|
|
1772
|
+
will-change: transform, opacity;
|
|
1718
1773
|
}
|
|
1719
1774
|
|
|
1720
|
-
|
|
1721
|
-
|
|
1722
|
-
|
|
1723
|
-
|
|
1724
|
-
|
|
1725
|
-
|
|
1726
|
-
opacity: 0;
|
|
1727
|
-
transform: translateY(-8px) scale(0.94);
|
|
1728
|
-
}
|
|
1775
|
+
.odt-toaster--top-right .odt-toast,
|
|
1776
|
+
.odt-toaster--top-center .odt-toast,
|
|
1777
|
+
.odt-toaster--top-left .odt-toast {
|
|
1778
|
+
top: var(--spacing-4, 1rem);
|
|
1779
|
+
bottom: auto;
|
|
1780
|
+
transform-origin: top center;
|
|
1729
1781
|
}
|
|
1730
1782
|
|
|
1731
1783
|
.odt-toaster--bottom-right .odt-toast,
|
|
1732
1784
|
.odt-toaster--bottom-center .odt-toast,
|
|
1733
1785
|
.odt-toaster--bottom-left .odt-toast {
|
|
1734
|
-
|
|
1786
|
+
bottom: var(--spacing-4, 1rem);
|
|
1787
|
+
top: auto;
|
|
1788
|
+
transform-origin: bottom center;
|
|
1789
|
+
}
|
|
1790
|
+
|
|
1791
|
+
.odt-toast--exiting {
|
|
1792
|
+
opacity: 0 !important;
|
|
1793
|
+
transform: scale(0.92) translateY(-12px) !important;
|
|
1794
|
+
pointer-events: none !important;
|
|
1795
|
+
transition: transform 0.24s cubic-bezier(0.16, 1, 0.3, 1), opacity 0.24s ease !important;
|
|
1735
1796
|
}
|
|
1736
1797
|
|
|
1737
1798
|
.odt-toaster--bottom-right .odt-toast--exiting,
|
|
1738
1799
|
.odt-toaster--bottom-center .odt-toast--exiting,
|
|
1739
1800
|
.odt-toaster--bottom-left .odt-toast--exiting {
|
|
1740
|
-
|
|
1801
|
+
transform: scale(0.92) translateY(12px) !important;
|
|
1741
1802
|
}
|
|
1742
1803
|
|
|
1743
|
-
|
|
1744
|
-
|
|
1745
|
-
|
|
1746
|
-
|
|
1747
|
-
|
|
1748
|
-
100% {
|
|
1749
|
-
opacity: 1;
|
|
1750
|
-
transform: translateY(0) scale(1);
|
|
1751
|
-
}
|
|
1804
|
+
/* Surface Variants */
|
|
1805
|
+
.odt-toast--variant-frosted {
|
|
1806
|
+
background-color: var(--frosted-surface-bg, rgba(255, 255, 255, 0.70));
|
|
1807
|
+
backdrop-filter: blur(16px);
|
|
1808
|
+
-webkit-backdrop-filter: blur(16px);
|
|
1752
1809
|
}
|
|
1753
1810
|
|
|
1754
|
-
|
|
1755
|
-
|
|
1756
|
-
|
|
1757
|
-
|
|
1758
|
-
|
|
1759
|
-
|
|
1760
|
-
opacity: 0;
|
|
1761
|
-
transform: translateY(8px) scale(0.94);
|
|
1762
|
-
}
|
|
1811
|
+
.odt-toast--variant-subtle {
|
|
1812
|
+
background-color: var(--color-surface-subtle);
|
|
1813
|
+
}
|
|
1814
|
+
|
|
1815
|
+
.odt-toast--variant-outlined {
|
|
1816
|
+
background-color: var(--color-surface);
|
|
1763
1817
|
}
|
|
1764
1818
|
|
|
1765
|
-
/*
|
|
1766
|
-
.odt-toast--success {
|
|
1819
|
+
/* Rich Color Tints (Optional) */
|
|
1820
|
+
.odt-toast--rich-success {
|
|
1767
1821
|
background-color: var(--color-surface-success, hsl(142 71% 96%));
|
|
1768
|
-
border-color: var(--color-line-success, hsl(142 71% 85%));
|
|
1769
1822
|
}
|
|
1770
1823
|
|
|
1771
|
-
.odt-toast--warning {
|
|
1824
|
+
.odt-toast--rich-warning {
|
|
1772
1825
|
background-color: var(--color-surface-warning, hsl(38 92% 96%));
|
|
1773
|
-
border-color: var(--color-line-warning, hsl(38 92% 85%));
|
|
1774
1826
|
}
|
|
1775
1827
|
|
|
1776
|
-
.odt-toast--danger,
|
|
1777
|
-
.odt-toast--error {
|
|
1828
|
+
.odt-toast--rich-danger,
|
|
1829
|
+
.odt-toast--rich-error {
|
|
1778
1830
|
background-color: var(--color-surface-danger, hsl(0 84% 97%));
|
|
1779
|
-
border-color: var(--color-line-danger, hsl(0 84% 88%));
|
|
1780
1831
|
}
|
|
1781
1832
|
|
|
1782
|
-
.odt-toast--info {
|
|
1833
|
+
.odt-toast--rich-info {
|
|
1783
1834
|
background-color: var(--color-surface-info, hsl(217 91% 97%));
|
|
1784
|
-
border-color: var(--color-info, hsl(217 91% 88%));
|
|
1785
|
-
}
|
|
1786
|
-
|
|
1787
|
-
.odt-toast--frosted {
|
|
1788
|
-
background-color: var(--frosted-surface-bg, rgba(255, 255, 255, 0.70));
|
|
1789
|
-
backdrop-filter: blur(16px);
|
|
1790
|
-
-webkit-backdrop-filter: blur(16px);
|
|
1791
|
-
border: 1px solid var(--frosted-surface-border, rgba(255, 255, 255, 0.80));
|
|
1792
1835
|
}
|
|
1793
1836
|
|
|
1794
1837
|
/* Toast Sub-elements */
|
|
@@ -1799,10 +1842,13 @@
|
|
|
1799
1842
|
width: 1.375rem;
|
|
1800
1843
|
height: 1.375rem;
|
|
1801
1844
|
flex-shrink: 0;
|
|
1802
|
-
font-size: 1.125rem;
|
|
1803
1845
|
margin-top: 0.0625rem;
|
|
1804
1846
|
}
|
|
1805
1847
|
|
|
1848
|
+
.odt-toast__icon svg {
|
|
1849
|
+
display: block;
|
|
1850
|
+
}
|
|
1851
|
+
|
|
1806
1852
|
.odt-toast__icon--success { color: var(--color-success, #16a34a); }
|
|
1807
1853
|
.odt-toast__icon--warning { color: var(--color-warning, #d97706); }
|
|
1808
1854
|
.odt-toast__icon--danger,
|
|
@@ -1822,18 +1868,18 @@
|
|
|
1822
1868
|
}
|
|
1823
1869
|
|
|
1824
1870
|
.odt-toast__title {
|
|
1825
|
-
font-size: var(--font-size-
|
|
1871
|
+
font-size: var(--font-size-base, 0.9375rem);
|
|
1826
1872
|
font-weight: var(--font-weight-semibold, 600);
|
|
1827
1873
|
color: var(--color-fg-strong);
|
|
1828
1874
|
line-height: 1.35;
|
|
1829
1875
|
margin: 0;
|
|
1830
1876
|
}
|
|
1831
1877
|
|
|
1832
|
-
.odt-
|
|
1833
|
-
.odt-
|
|
1834
|
-
font-size: var(--font-size-
|
|
1878
|
+
.odt-toast__description,
|
|
1879
|
+
.odt-toast__message {
|
|
1880
|
+
font-size: var(--font-size-sm, 0.8125rem);
|
|
1835
1881
|
color: var(--color-fg-muted);
|
|
1836
|
-
line-height: 1.
|
|
1882
|
+
line-height: 1.45;
|
|
1837
1883
|
margin: 0;
|
|
1838
1884
|
}
|
|
1839
1885
|
|
|
@@ -1851,9 +1897,8 @@
|
|
|
1851
1897
|
cursor: pointer;
|
|
1852
1898
|
flex-shrink: 0;
|
|
1853
1899
|
margin-left: auto;
|
|
1900
|
+
margin-top: -0.125rem;
|
|
1854
1901
|
transition: background-color 0.15s ease, color 0.15s ease;
|
|
1855
|
-
font-size: 1.125rem;
|
|
1856
|
-
line-height: 1;
|
|
1857
1902
|
}
|
|
1858
1903
|
|
|
1859
1904
|
.odt-toast__close:hover {
|
|
@@ -1861,6 +1906,10 @@
|
|
|
1861
1906
|
color: var(--color-fg-strong);
|
|
1862
1907
|
}
|
|
1863
1908
|
|
|
1909
|
+
.odt-toast__close svg {
|
|
1910
|
+
display: block;
|
|
1911
|
+
}
|
|
1912
|
+
|
|
1864
1913
|
/* ==========================================================================
|
|
1865
1914
|
* 11. Modal Component (.odt-modal-overlay, .odt-modal)
|
|
1866
1915
|
* ========================================================================== */
|
|
@@ -2045,4 +2094,335 @@
|
|
|
2045
2094
|
transform: scale(0.94);
|
|
2046
2095
|
}
|
|
2047
2096
|
|
|
2097
|
+
/* ==========================================================================
|
|
2098
|
+
* 12. DropdownMenu Component (.odt-dropdown)
|
|
2099
|
+
* ========================================================================== */
|
|
2100
|
+
.odt-dropdown {
|
|
2101
|
+
position: relative;
|
|
2102
|
+
display: inline-block;
|
|
2103
|
+
}
|
|
2104
|
+
|
|
2105
|
+
.odt-dropdown--full-width {
|
|
2106
|
+
width: 100%;
|
|
2107
|
+
}
|
|
2108
|
+
|
|
2109
|
+
.odt-dropdown__container {
|
|
2110
|
+
display: inline-flex;
|
|
2111
|
+
flex-direction: column;
|
|
2112
|
+
gap: var(--spacing-1-5, 0.375rem);
|
|
2113
|
+
box-sizing: border-box;
|
|
2114
|
+
font-family: inherit;
|
|
2115
|
+
}
|
|
2116
|
+
|
|
2117
|
+
.odt-dropdown__container--full-width {
|
|
2118
|
+
width: 100%;
|
|
2119
|
+
}
|
|
2120
|
+
|
|
2121
|
+
.odt-dropdown__label {
|
|
2122
|
+
font-size: var(--font-size-sm, 0.875rem);
|
|
2123
|
+
font-weight: 500;
|
|
2124
|
+
color: var(--color-fg-strong);
|
|
2125
|
+
line-height: 1.25rem;
|
|
2126
|
+
user-select: none;
|
|
2127
|
+
cursor: default;
|
|
2128
|
+
}
|
|
2129
|
+
|
|
2130
|
+
.odt-dropdown__trigger {
|
|
2131
|
+
display: inline-flex;
|
|
2132
|
+
align-items: center;
|
|
2133
|
+
justify-content: space-between;
|
|
2134
|
+
box-sizing: border-box;
|
|
2135
|
+
background-color: var(--color-surface, #ffffff);
|
|
2136
|
+
color: var(--color-fg);
|
|
2137
|
+
font-family: inherit;
|
|
2138
|
+
font-weight: 500;
|
|
2139
|
+
outline: none;
|
|
2140
|
+
border: 1px solid transparent;
|
|
2141
|
+
cursor: pointer;
|
|
2142
|
+
user-select: none;
|
|
2143
|
+
gap: 0.5rem;
|
|
2144
|
+
transition: border-color 140ms ease, box-shadow 140ms ease, background-color 140ms ease;
|
|
2145
|
+
}
|
|
2146
|
+
|
|
2147
|
+
.odt-dropdown__trigger--outlined {
|
|
2148
|
+
background-color: var(--color-surface, #ffffff);
|
|
2149
|
+
border: 1px solid var(--color-line, #e4e4e9);
|
|
2150
|
+
}
|
|
2151
|
+
.odt-dropdown__trigger--outlined:hover:not(:disabled):not(:focus):not(.odt-dropdown__trigger--open) {
|
|
2152
|
+
border-color: var(--color-line-strong, #d4d4db);
|
|
2153
|
+
}
|
|
2154
|
+
.odt-dropdown__trigger--outlined:focus,
|
|
2155
|
+
.odt-dropdown__trigger--outlined.odt-dropdown__trigger--open {
|
|
2156
|
+
border-color: var(--color-ring);
|
|
2157
|
+
}
|
|
2158
|
+
|
|
2159
|
+
.odt-dropdown__trigger--filled {
|
|
2160
|
+
background-color: var(--color-surface, #ffffff);
|
|
2161
|
+
border: 1px solid transparent;
|
|
2162
|
+
}
|
|
2163
|
+
.odt-dropdown__trigger--filled:focus,
|
|
2164
|
+
.odt-dropdown__trigger--filled.odt-dropdown__trigger--open {
|
|
2165
|
+
border-color: var(--color-ring);
|
|
2166
|
+
}
|
|
2167
|
+
|
|
2168
|
+
.odt-dropdown__trigger--frosted {
|
|
2169
|
+
background-color: hsl(from var(--color-surface) h s l / 0.85);
|
|
2170
|
+
backdrop-filter: blur(16px);
|
|
2171
|
+
-webkit-backdrop-filter: blur(16px);
|
|
2172
|
+
border: 1px solid transparent;
|
|
2173
|
+
box-shadow: var(--shadow-card);
|
|
2174
|
+
}
|
|
2175
|
+
.odt-dropdown__trigger--frosted:focus,
|
|
2176
|
+
.odt-dropdown__trigger--frosted.odt-dropdown__trigger--open {
|
|
2177
|
+
border-color: var(--color-ring);
|
|
2178
|
+
}
|
|
2179
|
+
|
|
2180
|
+
.odt-dropdown__trigger--sm {
|
|
2181
|
+
height: 2rem;
|
|
2182
|
+
padding: 0 var(--spacing-3, 0.75rem);
|
|
2183
|
+
font-size: var(--font-size-xs, 0.75rem);
|
|
2184
|
+
}
|
|
2185
|
+
.odt-dropdown__trigger--md {
|
|
2186
|
+
height: 2.625rem;
|
|
2187
|
+
padding: 0 var(--spacing-4, 1rem);
|
|
2188
|
+
font-size: var(--font-size-sm, 0.875rem);
|
|
2189
|
+
}
|
|
2190
|
+
.odt-dropdown__trigger--lg {
|
|
2191
|
+
height: 3.125rem;
|
|
2192
|
+
padding: 0 var(--spacing-5, 1.25rem);
|
|
2193
|
+
font-size: var(--font-size-base, 1rem);
|
|
2194
|
+
}
|
|
2195
|
+
|
|
2196
|
+
.odt-dropdown__trigger-text {
|
|
2197
|
+
flex: 1 1 auto;
|
|
2198
|
+
text-align: left;
|
|
2199
|
+
overflow: hidden;
|
|
2200
|
+
text-overflow: ellipsis;
|
|
2201
|
+
white-space: nowrap;
|
|
2202
|
+
}
|
|
2203
|
+
|
|
2204
|
+
.odt-dropdown__placeholder {
|
|
2205
|
+
color: var(--color-fg-subtle);
|
|
2206
|
+
font-weight: 400;
|
|
2207
|
+
}
|
|
2208
|
+
|
|
2209
|
+
.odt-dropdown__chevron {
|
|
2210
|
+
display: inline-flex;
|
|
2211
|
+
align-items: center;
|
|
2212
|
+
justify-content: center;
|
|
2213
|
+
color: var(--color-fg-muted);
|
|
2214
|
+
flex-shrink: 0;
|
|
2215
|
+
transition: transform 180ms cubic-bezier(0.16, 1, 0.3, 1), color 140ms ease;
|
|
2216
|
+
}
|
|
2217
|
+
|
|
2218
|
+
.odt-dropdown__chevron--open {
|
|
2219
|
+
transform: rotate(180deg);
|
|
2220
|
+
color: var(--color-fg-strong);
|
|
2221
|
+
}
|
|
2222
|
+
|
|
2223
|
+
.odt-dropdown__trigger--error {
|
|
2224
|
+
border-color: var(--color-danger) !important;
|
|
2225
|
+
}
|
|
2226
|
+
|
|
2227
|
+
.odt-dropdown__trigger:disabled {
|
|
2228
|
+
background-color: var(--color-surface-subtle);
|
|
2229
|
+
color: var(--color-fg-disabled);
|
|
2230
|
+
cursor: not-allowed;
|
|
2231
|
+
opacity: 0.7;
|
|
2232
|
+
}
|
|
2233
|
+
|
|
2234
|
+
.odt-dropdown__content {
|
|
2235
|
+
position: absolute;
|
|
2236
|
+
z-index: 1000;
|
|
2237
|
+
display: flex;
|
|
2238
|
+
flex-direction: column;
|
|
2239
|
+
box-sizing: border-box;
|
|
2240
|
+
padding: 0.3125rem;
|
|
2241
|
+
background-color: var(--color-surface, #ffffff);
|
|
2242
|
+
border: 1px solid var(--color-line-muted, rgba(226, 232, 240, 0.8));
|
|
2243
|
+
border-radius: var(--radius-xl, 0.75rem);
|
|
2244
|
+
color: var(--color-neutral-900);
|
|
2245
|
+
outline: none;
|
|
2246
|
+
min-width: 12rem;
|
|
2247
|
+
box-shadow: 0 10px 28px -4px rgba(0, 0, 0, 0.08), 0 4px 10px -2px rgba(0, 0, 0, 0.03);
|
|
2248
|
+
transform-origin: top center;
|
|
2249
|
+
animation: odt-dropdown-enter 150ms cubic-bezier(0.16, 1, 0.3, 1) forwards;
|
|
2250
|
+
}
|
|
2251
|
+
|
|
2252
|
+
.odt-dropdown__content.hidden {
|
|
2253
|
+
display: none !important;
|
|
2254
|
+
}
|
|
2255
|
+
|
|
2256
|
+
.odt-dropdown__content--align-start { left: 0; }
|
|
2257
|
+
.odt-dropdown__content--align-end { right: 0; }
|
|
2258
|
+
.odt-dropdown__content--align-center { left: 50%; transform: translateX(-50%); }
|
|
2259
|
+
|
|
2260
|
+
.odt-dropdown__content--side-bottom { top: calc(100% + 6px); }
|
|
2261
|
+
.odt-dropdown__content--side-top { bottom: calc(100% + 6px); }
|
|
2262
|
+
|
|
2263
|
+
.odt-dropdown__content--exiting {
|
|
2264
|
+
animation: odt-dropdown-exit 110ms cubic-bezier(0.4, 0, 1, 1) forwards;
|
|
2265
|
+
pointer-events: none;
|
|
2266
|
+
}
|
|
2267
|
+
|
|
2268
|
+
@keyframes odt-dropdown-enter {
|
|
2269
|
+
from {
|
|
2270
|
+
opacity: 0;
|
|
2271
|
+
transform: scale(0.97) translateY(-4px);
|
|
2272
|
+
}
|
|
2273
|
+
to {
|
|
2274
|
+
opacity: 1;
|
|
2275
|
+
transform: scale(1) translateY(0);
|
|
2276
|
+
}
|
|
2277
|
+
}
|
|
2278
|
+
|
|
2279
|
+
@keyframes odt-dropdown-exit {
|
|
2280
|
+
from {
|
|
2281
|
+
opacity: 1;
|
|
2282
|
+
transform: scale(1) translateY(0);
|
|
2283
|
+
}
|
|
2284
|
+
to {
|
|
2285
|
+
opacity: 0;
|
|
2286
|
+
transform: scale(0.97) translateY(-4px);
|
|
2287
|
+
}
|
|
2288
|
+
}
|
|
2289
|
+
|
|
2290
|
+
.odt-dropdown__item {
|
|
2291
|
+
position: relative;
|
|
2292
|
+
display: flex;
|
|
2293
|
+
align-items: center;
|
|
2294
|
+
width: 100%;
|
|
2295
|
+
box-sizing: border-box;
|
|
2296
|
+
padding: 0.4375rem 0.625rem;
|
|
2297
|
+
border-radius: var(--radius-lg, 0.5rem);
|
|
2298
|
+
font-size: 0.8125rem;
|
|
2299
|
+
font-weight: 500;
|
|
2300
|
+
line-height: 1.25rem;
|
|
2301
|
+
letter-spacing: -0.01em;
|
|
2302
|
+
color: var(--color-neutral-700);
|
|
2303
|
+
background: transparent;
|
|
2304
|
+
border: none;
|
|
2305
|
+
cursor: pointer;
|
|
2306
|
+
user-select: none;
|
|
2307
|
+
text-decoration: none;
|
|
2308
|
+
transition: background-color 120ms ease, color 120ms ease, transform 100ms ease;
|
|
2309
|
+
outline: none;
|
|
2310
|
+
gap: 0.5rem;
|
|
2311
|
+
}
|
|
2312
|
+
|
|
2313
|
+
.odt-dropdown__item:hover,
|
|
2314
|
+
.odt-dropdown__item:focus-visible,
|
|
2315
|
+
.odt-dropdown__item[data-highlighted="true"] {
|
|
2316
|
+
background-color: var(--color-surface-subtle);
|
|
2317
|
+
color: var(--color-neutral-950);
|
|
2318
|
+
}
|
|
2319
|
+
|
|
2320
|
+
.odt-dropdown__item:active {
|
|
2321
|
+
background-color: var(--color-neutral-200);
|
|
2322
|
+
transform: scale(0.99);
|
|
2323
|
+
}
|
|
2324
|
+
|
|
2325
|
+
.odt-dropdown__item--inset {
|
|
2326
|
+
padding-left: 2.125rem;
|
|
2327
|
+
}
|
|
2328
|
+
|
|
2329
|
+
.odt-dropdown__item:disabled,
|
|
2330
|
+
.odt-dropdown__item--disabled {
|
|
2331
|
+
opacity: 0.4;
|
|
2332
|
+
cursor: not-allowed;
|
|
2333
|
+
pointer-events: none;
|
|
2334
|
+
}
|
|
2335
|
+
|
|
2336
|
+
.odt-dropdown__item--destructive {
|
|
2337
|
+
color: var(--color-danger);
|
|
2338
|
+
}
|
|
2339
|
+
|
|
2340
|
+
.odt-dropdown__item--destructive:hover,
|
|
2341
|
+
.odt-dropdown__item--destructive:focus-visible,
|
|
2342
|
+
.odt-dropdown__item--destructive[data-highlighted="true"] {
|
|
2343
|
+
background-color: var(--color-surface-danger);
|
|
2344
|
+
color: var(--color-danger);
|
|
2345
|
+
}
|
|
2346
|
+
|
|
2347
|
+
.odt-dropdown__item-content {
|
|
2348
|
+
flex: 1 1 auto;
|
|
2349
|
+
display: flex;
|
|
2350
|
+
align-items: center;
|
|
2351
|
+
overflow: hidden;
|
|
2352
|
+
text-overflow: ellipsis;
|
|
2353
|
+
white-space: nowrap;
|
|
2354
|
+
}
|
|
2355
|
+
|
|
2356
|
+
.odt-dropdown__item-icon {
|
|
2357
|
+
display: inline-flex;
|
|
2358
|
+
align-items: center;
|
|
2359
|
+
justify-content: center;
|
|
2360
|
+
flex-shrink: 0;
|
|
2361
|
+
width: 1rem;
|
|
2362
|
+
height: 1rem;
|
|
2363
|
+
color: var(--color-neutral-400);
|
|
2364
|
+
transition: color 120ms ease;
|
|
2365
|
+
}
|
|
2366
|
+
|
|
2367
|
+
.odt-dropdown__item:hover .odt-dropdown__item-icon,
|
|
2368
|
+
.odt-dropdown__item:focus-visible .odt-dropdown__item-icon {
|
|
2369
|
+
color: var(--color-neutral-800);
|
|
2370
|
+
}
|
|
2371
|
+
|
|
2372
|
+
.odt-dropdown__item--destructive .odt-dropdown__item-icon {
|
|
2373
|
+
color: var(--color-danger);
|
|
2374
|
+
}
|
|
2375
|
+
|
|
2376
|
+
.odt-dropdown__item-right-icon {
|
|
2377
|
+
display: inline-flex;
|
|
2378
|
+
align-items: center;
|
|
2379
|
+
justify-content: center;
|
|
2380
|
+
flex-shrink: 0;
|
|
2381
|
+
margin-left: auto;
|
|
2382
|
+
color: var(--color-neutral-400);
|
|
2383
|
+
}
|
|
2384
|
+
|
|
2385
|
+
.odt-dropdown__shortcut {
|
|
2386
|
+
margin-left: auto;
|
|
2387
|
+
font-size: 0.6875rem;
|
|
2388
|
+
font-weight: 500;
|
|
2389
|
+
letter-spacing: 0.04em;
|
|
2390
|
+
font-family: var(--font-family-mono, ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, monospace);
|
|
2391
|
+
color: var(--color-neutral-400);
|
|
2392
|
+
background: none;
|
|
2393
|
+
border: none;
|
|
2394
|
+
padding: 0;
|
|
2395
|
+
line-height: 1rem;
|
|
2396
|
+
display: inline-flex;
|
|
2397
|
+
align-items: center;
|
|
2398
|
+
}
|
|
2399
|
+
|
|
2400
|
+
.odt-dropdown__label-heading {
|
|
2401
|
+
padding: 0.375rem 0.625rem 0.25rem;
|
|
2402
|
+
font-size: 0.6875rem;
|
|
2403
|
+
font-weight: 600;
|
|
2404
|
+
text-transform: uppercase;
|
|
2405
|
+
letter-spacing: 0.05em;
|
|
2406
|
+
color: var(--color-neutral-400);
|
|
2407
|
+
user-select: none;
|
|
2408
|
+
}
|
|
2409
|
+
|
|
2410
|
+
.odt-dropdown__label-heading--inset {
|
|
2411
|
+
padding-left: 2.125rem;
|
|
2412
|
+
}
|
|
2413
|
+
|
|
2414
|
+
.odt-dropdown__separator {
|
|
2415
|
+
height: 1px;
|
|
2416
|
+
margin: 0.25rem 0.25rem;
|
|
2417
|
+
background-color: var(--color-line-muted, rgba(226, 232, 240, 0.8));
|
|
2418
|
+
border: none;
|
|
2419
|
+
}
|
|
2420
|
+
|
|
2421
|
+
.odt-dropdown__group {
|
|
2422
|
+
display: flex;
|
|
2423
|
+
flex-direction: column;
|
|
2424
|
+
width: 100%;
|
|
2425
|
+
}
|
|
2426
|
+
|
|
2427
|
+
|
|
2048
2428
|
|