@wpmoo/ui 0.9.0 → 1.0.0-rc.10

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.
Files changed (99) hide show
  1. package/ASSET_LICENSE.md +4 -2
  2. package/LICENSE +28 -0
  3. package/README.md +105 -100
  4. package/certification.json +25 -3
  5. package/dist/assets/css/moo-ui.css +14005 -12457
  6. package/dist/assets/css/moo-ui.min.css +10 -28
  7. package/dist/assets/css/moo.css +2606 -902
  8. package/dist/assets/css/moo.min.css +10 -29
  9. package/dist/js/chart.js +15312 -0
  10. package/dist/js/chart.min.js +27 -0
  11. package/dist/js/combobox.js +129 -85
  12. package/dist/js/context-menu.js +35 -66
  13. package/dist/js/datatable.js +390 -188
  14. package/dist/js/datepicker.js +1197 -0
  15. package/dist/js/datepicker.min.js +7 -0
  16. package/dist/js/moo-ui.js +3947 -0
  17. package/dist/js/moo-ui.min.js +7 -0
  18. package/dist/js/sheet.js +46 -0
  19. package/dist/js/sidebar.js +190 -172
  20. package/dist/js/slider.js +289 -0
  21. package/dist/js/state.js +76 -0
  22. package/dist/release-manifest.json +24 -0
  23. package/package.json +39 -9
  24. package/scss/_components.scss +70 -0
  25. package/scss/_config.scss +18 -0
  26. package/scss/_settings.scss +5 -0
  27. package/scss/components/_accordion.scss +54 -0
  28. package/scss/components/_alert.scss +82 -0
  29. package/scss/components/_avatar.scss +139 -0
  30. package/scss/components/_badge.scss +34 -0
  31. package/scss/components/_breadcrumb.scss +119 -0
  32. package/scss/components/_button.scss +200 -0
  33. package/scss/components/_button_group.scss +57 -0
  34. package/scss/components/_card.scss +114 -0
  35. package/scss/components/_checkbox.scss +78 -0
  36. package/scss/components/_close_button.scss +56 -0
  37. package/scss/components/_collapsible.scss +44 -0
  38. package/scss/components/_combobox.scss +253 -0
  39. package/scss/components/_context-menu.scss +18 -0
  40. package/scss/components/_datatable.scss +1067 -0
  41. package/scss/components/_datepicker.scss +237 -0
  42. package/scss/components/_dialog.scss +69 -0
  43. package/scss/components/_dropdown.scss +201 -0
  44. package/scss/components/_field.scss +94 -0
  45. package/scss/components/_input.scss +31 -0
  46. package/scss/components/_input_group.scss +151 -0
  47. package/scss/components/_kbd.scss +11 -0
  48. package/scss/components/_menubar.scss +17 -0
  49. package/scss/components/_navigation.scss +36 -0
  50. package/scss/components/_pagination.scss +58 -0
  51. package/scss/components/_popover.scss +26 -0
  52. package/scss/components/_progress.scss +5 -0
  53. package/scss/components/_radio_group.scss +108 -0
  54. package/scss/components/_search_trigger.scss +61 -0
  55. package/scss/components/_select.scss +8 -0
  56. package/scss/components/_separator.scss +10 -0
  57. package/scss/components/_sheet.scss +16 -0
  58. package/scss/components/_sidebar.scss +5 -0
  59. package/scss/components/_skeleton.scss +10 -0
  60. package/scss/components/_slider.scss +213 -0
  61. package/scss/components/_spinner.scss +11 -0
  62. package/scss/components/_switch.scss +30 -0
  63. package/scss/components/_table.scss +12 -0
  64. package/scss/components/_tabs.scss +116 -0
  65. package/scss/components/_textarea.scss +8 -0
  66. package/scss/components/_toast.scss +116 -0
  67. package/scss/components/_toggle_group.scss +17 -0
  68. package/scss/components/_tooltip.scss +64 -0
  69. package/scss/components/sidebar/_base.scss +86 -0
  70. package/scss/components/sidebar/_collapsed.scss +112 -0
  71. package/scss/components/sidebar/_identity.scss +71 -0
  72. package/scss/components/sidebar/_menus.scss +219 -0
  73. package/scss/foundations/_backdrop.scss +102 -0
  74. package/scss/foundations/_focus.scss +83 -0
  75. package/scss/foundations/_globals.scss +5 -0
  76. package/scss/foundations/_scope.scss +26 -0
  77. package/scss/layouts/_app.scss +75 -0
  78. package/scss/layouts/_page_grid.scss +27 -0
  79. package/scss/layouts/app/sidebar/_base.scss +84 -0
  80. package/scss/layouts/app/sidebar/_default.scss +20 -0
  81. package/scss/layouts/app/sidebar/_floating.scss +36 -0
  82. package/scss/layouts/app/sidebar/_inset.scss +32 -0
  83. package/scss/mixins/_banner.scss +9 -0
  84. package/scss/moo-core.scss +16 -0
  85. package/scss/moo-ui.scss +54 -0
  86. package/scss/settings/_bootstrap_overrides.scss +7 -0
  87. package/scss/settings/_component_variables.scss +244 -0
  88. package/scss/settings/_forms.scss +28 -0
  89. package/scss/settings/_options.scss +2 -0
  90. package/scss/settings/_palette.scss +90 -0
  91. package/scss/themes/_forms.scss +15 -0
  92. package/scss/themes/_root.scss +20 -0
  93. package/scss/themes/_standalone.scss +3 -0
  94. package/scss/themes/_theme.scss +244 -0
  95. package/scss/utilities/_background_color.scss +18 -0
  96. package/scss/utilities/_scroll_fade.scss +193 -0
  97. package/scss/utilities/_scroll_fade_primitives.scss +43 -0
  98. package/scss/_facade-settings.scss +0 -51
  99. package/scss/settings/_facade_public.scss +0 -23
@@ -0,0 +1,82 @@
1
+ /* Alert */
2
+ $moo-alert-dismissible-close-space: $btn-close-width + ($btn-close-padding-x * 2) + 0.5rem !default;
3
+
4
+ .alert {
5
+ --bs-alert-border-color: var(--moo-border);
6
+ --bs-alert-color: var(--moo-foreground);
7
+ --bs-alert-padding-x: 0.625rem;
8
+ --bs-alert-padding-y: 0.5rem;
9
+
10
+ display: flex;
11
+ align-items: flex-start;
12
+ gap: 0.375rem;
13
+ }
14
+
15
+ .alert-dismissible {
16
+ padding-right: 0;
17
+ padding-left: 0;
18
+ padding-inline-start: var(--bs-alert-padding-x);
19
+ padding-inline-end: calc(var(--bs-alert-padding-x) + #{$moo-alert-dismissible-close-space});
20
+ }
21
+
22
+ .alert-dismissible .btn-close {
23
+ top: auto;
24
+ right: auto;
25
+ inset-block-start: var(--bs-alert-padding-y);
26
+ inset-inline-end: var(--bs-alert-padding-x);
27
+ padding: $btn-close-padding-y $btn-close-padding-x;
28
+ }
29
+
30
+ .alert-danger {
31
+ --bs-alert-bg: transparent;
32
+ --bs-alert-border-color: var(--moo-border);
33
+ --bs-alert-color: var(--moo-destructive);
34
+ }
35
+
36
+ .alert-warning {
37
+ --bs-alert-bg: var(--moo-warning-surface);
38
+ --bs-alert-border-color: var(--moo-border);
39
+ --bs-alert-color: var(--moo-warning);
40
+ }
41
+
42
+ .alert-success {
43
+ --bs-alert-bg: var(--moo-success-surface);
44
+ --bs-alert-border-color: var(--moo-border);
45
+ --bs-alert-color: var(--moo-success);
46
+ }
47
+
48
+ .alert-info {
49
+ --bs-alert-bg: var(--moo-info-surface);
50
+ --bs-alert-border-color: var(--moo-border);
51
+ --bs-alert-color: var(--moo-info);
52
+ }
53
+
54
+ .alert-icon {
55
+ display: flex;
56
+ flex: 0 0 auto;
57
+ margin-top: 0.125rem;
58
+ }
59
+
60
+ .alert-icon [data-icon] {
61
+ width: 1rem;
62
+ height: 1rem;
63
+ }
64
+
65
+ .alert-body {
66
+ flex: 1 1 auto;
67
+ min-width: 0;
68
+ }
69
+
70
+ .alert-body p {
71
+ color: color-mix(in srgb, var(--bs-alert-color) 60%, var(--bs-secondary-color));
72
+ }
73
+
74
+ .alert-heading {
75
+ margin-bottom: $spacer * 0.25;
76
+ font-size: $font-size-base;
77
+ font-weight: $headings-font-weight;
78
+ }
79
+
80
+ .alert-action {
81
+ flex: 0 0 auto;
82
+ }
@@ -0,0 +1,139 @@
1
+ /* Avatar */
2
+ .avatar {
3
+ position: relative;
4
+ display: inline-flex;
5
+ align-items: center;
6
+ justify-content: center;
7
+ width: $avatar-size;
8
+ height: $avatar-size;
9
+ flex: 0 0 auto;
10
+ overflow: visible;
11
+ border: 0;
12
+ border-radius: var(--bs-border-radius-pill);
13
+ background-color: var(--moo-muted-surface);
14
+ color: var(--moo-foreground);
15
+ font-size: $font-size-base;
16
+ font-weight: $font-weight-medium;
17
+ line-height: $avatar-line-height;
18
+ text-transform: uppercase;
19
+ }
20
+
21
+ .avatar::after {
22
+ content: "";
23
+ position: absolute;
24
+ inset: 0;
25
+ z-index: 1;
26
+ border: var(--bs-border-width) solid var(--moo-border);
27
+ border-radius: var(--bs-border-radius-pill);
28
+ pointer-events: none;
29
+ opacity: 0.8;
30
+ }
31
+
32
+ .avatar > img {
33
+ width: 100%;
34
+ height: 100%;
35
+ object-fit: cover;
36
+ border-radius: var(--bs-border-radius-pill);
37
+ }
38
+
39
+ .avatar-fallback {
40
+ position: absolute;
41
+ inset: 0;
42
+ display: grid;
43
+ place-items: center;
44
+ text-align: center;
45
+ padding: 0 0.15rem;
46
+ }
47
+
48
+ .avatar--has-image > .avatar-fallback {
49
+ display: none;
50
+ }
51
+
52
+ .avatar-badge {
53
+ position: absolute;
54
+ inset-block-end: 0;
55
+ inset-inline-end: 0;
56
+ z-index: 2;
57
+ display: inline-flex;
58
+ align-items: center;
59
+ justify-content: center;
60
+ height: 0.9375rem;
61
+ min-width: 0.9375rem;
62
+ padding-inline: 0.2rem;
63
+ border: 0;
64
+ border-radius: var(--bs-border-radius-pill);
65
+ box-shadow: $avatar-badge-ring-shadow;
66
+ background-color: var(--moo-muted-surface);
67
+ color: var(--moo-foreground);
68
+ font-size: 0.625rem;
69
+ font-weight: $font-weight-medium;
70
+ line-height: 1;
71
+ }
72
+
73
+ .avatar-badge [data-icon] {
74
+ width: 0.625rem;
75
+ height: 0.625rem;
76
+ }
77
+
78
+ .avatar-badge--dot {
79
+ height: $avatar-badge-dot-size;
80
+ min-width: $avatar-badge-dot-size;
81
+ padding-inline: 0;
82
+ }
83
+
84
+ .avatar-badge--icon {
85
+ width: $avatar-badge-icon-size;
86
+ height: $avatar-badge-icon-size;
87
+ min-width: $avatar-badge-icon-size;
88
+ padding-inline: 0;
89
+ }
90
+
91
+ .avatar-badge--icon [data-icon] {
92
+ width: $avatar-badge-icon-glyph-size;
93
+ height: $avatar-badge-icon-glyph-size;
94
+ }
95
+
96
+ .avatar-sm {
97
+ width: $avatar-size-sm;
98
+ height: $avatar-size-sm;
99
+ font-size: $avatar-font-size-sm;
100
+ }
101
+
102
+ .avatar-lg {
103
+ width: $avatar-size-lg;
104
+ height: $avatar-size-lg;
105
+ font-size: $avatar-font-size-lg;
106
+ }
107
+
108
+ .avatar-group {
109
+ display: inline-flex;
110
+ align-items: center;
111
+ }
112
+
113
+ .avatar-group > .avatar {
114
+ box-shadow: $avatar-group-ring-shadow;
115
+ z-index: 0;
116
+ }
117
+
118
+ .avatar-group .avatar + .avatar,
119
+ .avatar-group .avatar + .avatar-count,
120
+ .avatar-group .avatar-count + .avatar {
121
+ margin-inline-start: $avatar-group-overlap;
122
+ }
123
+
124
+ .avatar-count {
125
+ display: inline-flex;
126
+ align-items: center;
127
+ justify-content: center;
128
+ width: $avatar-size;
129
+ height: $avatar-size;
130
+ flex: 0 0 auto;
131
+ border-radius: var(--bs-border-radius-pill);
132
+ font-size: 0.75rem;
133
+ font-weight: $font-weight-medium;
134
+ }
135
+
136
+ .avatar-count::before {
137
+ content: "+";
138
+ margin-inline-end: -0.1rem;
139
+ }
@@ -0,0 +1,34 @@
1
+ /* Badge */
2
+ .badge {
3
+ display: inline-flex;
4
+ height: $moo-chip-height;
5
+ align-items: center;
6
+ justify-content: center;
7
+ border: var(--bs-border-width) solid var(--bs-border-color);
8
+ border-color: $badge-border-color;
9
+ gap: 0.25rem;
10
+ line-height: 1rem;
11
+ }
12
+
13
+ .badge[class~="border"] {
14
+ border-color: var(--moo-border) !important;
15
+ }
16
+
17
+ .badge[class~="text-bg-primary"] {
18
+ color: var(--moo-primary-foreground) !important;
19
+ background-color: var(--moo-primary) !important;
20
+ }
21
+
22
+ .badge[class~="text-bg-secondary"] {
23
+ color: var(--moo-foreground) !important;
24
+ background-color: var(--moo-muted-surface) !important;
25
+ }
26
+
27
+ .badge[class~="text-bg-danger"] {
28
+ color: var(--moo-destructive) !important;
29
+ background-color: var(--moo-destructive-surface) !important;
30
+ }
31
+
32
+ .badge[class~="text-body-secondary"] {
33
+ color: var(--moo-foreground) !important;
34
+ }
@@ -0,0 +1,119 @@
1
+ /* Breadcrumb */
2
+ .breadcrumb {
3
+ --bs-breadcrumb-item-active-color: var(--moo-foreground);
4
+ --bs-breadcrumb-item-padding-x: #{$spacer * 0.375};
5
+
6
+ column-gap: var(--bs-breadcrumb-item-padding-x);
7
+ line-height: 1.25rem;
8
+ }
9
+
10
+ .breadcrumb-item {
11
+ display: inline-flex;
12
+ align-items: center;
13
+ }
14
+
15
+ .breadcrumb-item + .breadcrumb-item::before {
16
+ float: none;
17
+ flex: 0 0 auto;
18
+ }
19
+
20
+ .breadcrumb-item + .breadcrumb-item {
21
+ padding-left: 0;
22
+ }
23
+
24
+ .breadcrumb:not(.breadcrumb--custom-divider) .breadcrumb-item + .breadcrumb-item::before {
25
+ width: 0.875rem;
26
+ height: 0.875rem;
27
+ padding-right: 0;
28
+ margin-inline-end: var(--bs-breadcrumb-item-padding-x);
29
+ background-color: var(--moo-muted-foreground);
30
+ content: "";
31
+ -webkit-mask: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='m9 18 6-6-6-6'/%3E%3C/svg%3E") center / 100% 100% no-repeat;
32
+ mask: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='m9 18 6-6-6-6'/%3E%3C/svg%3E") center / 100% 100% no-repeat;
33
+ }
34
+
35
+ .breadcrumb--custom-divider .breadcrumb-item + .breadcrumb-item::before {
36
+ display: inline-flex;
37
+ align-items: center;
38
+ justify-content: center;
39
+ width: 0.875rem;
40
+ height: 0.875rem;
41
+ padding-right: 0;
42
+ margin-inline-end: var(--bs-breadcrumb-item-padding-x);
43
+ line-height: 1;
44
+ }
45
+
46
+ :dir(rtl) .breadcrumb {
47
+ --bs-breadcrumb-divider: "#{$breadcrumb-divider-flipped}";
48
+ }
49
+
50
+ :dir(rtl) .breadcrumb-item + .breadcrumb-item {
51
+ padding-right: 0;
52
+ padding-left: 0;
53
+ }
54
+
55
+ :dir(rtl) .breadcrumb-item + .breadcrumb-item::before {
56
+ padding-right: 0;
57
+ padding-left: 0;
58
+ }
59
+
60
+ :dir(rtl) .breadcrumb:not(.breadcrumb--custom-divider) .breadcrumb-item + .breadcrumb-item::before {
61
+ padding-left: 0;
62
+ transform: scaleX(-1);
63
+ }
64
+
65
+ .breadcrumb-item a {
66
+ color: var(--moo-muted-foreground);
67
+ text-decoration: none;
68
+ transition: color 0.15s ease;
69
+ }
70
+
71
+ .breadcrumb-item a:hover {
72
+ color: var(--moo-foreground);
73
+ text-decoration: none;
74
+ }
75
+
76
+ .breadcrumb-ellipsis {
77
+ display: inline-flex;
78
+ align-items: center;
79
+ color: var(--moo-muted-foreground);
80
+ }
81
+
82
+ .breadcrumb-ellipsis [data-icon] {
83
+ width: 1rem;
84
+ height: 1rem;
85
+ }
86
+
87
+ .breadcrumb-dropdown-item,
88
+ .breadcrumb-dropdown-item .dropdown {
89
+ display: inline-flex;
90
+ align-items: center;
91
+ }
92
+
93
+ .breadcrumb-dropdown-trigger {
94
+ display: inline-flex;
95
+ align-items: center;
96
+ gap: $spacer * 0.25;
97
+ padding: 0;
98
+ border: 0;
99
+ background-color: transparent;
100
+ color: var(--moo-muted-foreground);
101
+ font: inherit;
102
+ line-height: 1.25rem;
103
+ text-decoration: none;
104
+ }
105
+
106
+ .breadcrumb-dropdown-trigger:hover,
107
+ .breadcrumb-dropdown-trigger:focus {
108
+ color: var(--moo-foreground);
109
+ }
110
+
111
+ .breadcrumb .breadcrumb-dropdown-trigger:focus-visible {
112
+ outline: 0;
113
+ box-shadow: 0 0 0 #{$moo-form-focus-ring-width} color-mix(in srgb, #{$moo-form-focus-ring-color} 50%, transparent);
114
+ }
115
+
116
+ .breadcrumb-dropdown-trigger > [data-icon] {
117
+ width: 0.875rem;
118
+ height: 0.875rem;
119
+ }
@@ -0,0 +1,200 @@
1
+ /* Buttons */
2
+ .btn {
3
+ display: inline-flex;
4
+ align-items: center;
5
+ justify-content: center;
6
+ flex-shrink: 0;
7
+ gap: $icon-link-gap;
8
+ white-space: nowrap;
9
+ }
10
+
11
+ .btn:not(.btn-icon, .btn-icon-xs, .btn-icon-sm, .btn-icon-lg):has(> [data-icon="inline-start"]) {
12
+ padding-inline-start: $spacer * 0.5;
13
+ }
14
+
15
+ .btn:not(.btn-icon, .btn-icon-xs, .btn-icon-sm, .btn-icon-lg):has(> [data-icon="inline-end"]) {
16
+ padding-inline-end: $spacer * 0.5;
17
+ }
18
+
19
+ button.btn:not(:disabled),
20
+ input.btn:not(:disabled),
21
+ label.btn {
22
+ cursor: default;
23
+ }
24
+
25
+ .btn-xs,
26
+ .btn-icon-xs {
27
+ --bs-btn-padding-y: #{$spacer * 0.1875};
28
+ --bs-btn-padding-x: #{$spacer * 0.5};
29
+ --bs-btn-font-size: #{$spacer * 0.75};
30
+ --bs-btn-line-height: #{$spacer};
31
+ --bs-btn-border-radius: var(--bs-border-radius-sm);
32
+ gap: #{$spacer * 0.25};
33
+ }
34
+
35
+ .btn-sm,
36
+ .btn-icon-sm,
37
+ .btn-group-sm > .btn,
38
+ .btn-group-sm > .btn-group > .btn {
39
+ --bs-btn-padding-y: #{$btn-padding-y-sm};
40
+ --bs-btn-padding-x: #{$btn-padding-x-sm};
41
+ --bs-btn-font-size: #{$btn-font-size-sm};
42
+ --bs-btn-line-height: #{$spacer};
43
+ --bs-btn-border-radius: var(--bs-border-radius-sm);
44
+ gap: #{$spacer * 0.25};
45
+ }
46
+
47
+ .btn-lg,
48
+ .btn-icon-lg,
49
+ .btn-group-lg > .btn,
50
+ .btn-group-lg > .btn-group > .btn {
51
+ --bs-btn-padding-y: #{$btn-padding-y-lg};
52
+ --bs-btn-padding-x: #{$btn-padding-x-lg};
53
+ --bs-btn-font-size: #{$btn-font-size-lg};
54
+ --bs-btn-line-height: #{$btn-line-height};
55
+ --bs-btn-border-radius: var(--bs-border-radius-lg);
56
+ }
57
+
58
+ :is(.btn-xs, .btn-sm, .btn-group-sm > .btn, .btn-group-sm > .btn-group > .btn):not(.btn-icon, .btn-icon-xs, .btn-icon-sm, .btn-icon-lg):has(> [data-icon="inline-start"]) {
59
+ padding-inline-start: $icon-link-gap;
60
+ }
61
+
62
+ :is(.btn-xs, .btn-sm, .btn-group-sm > .btn, .btn-group-sm > .btn-group > .btn):not(.btn-icon, .btn-icon-xs, .btn-icon-sm, .btn-icon-lg):has(> [data-icon="inline-end"]) {
63
+ padding-inline-end: $icon-link-gap;
64
+ }
65
+
66
+ .btn-icon {
67
+ --bs-btn-line-height: #{$btn-line-height};
68
+ --bs-btn-padding-y: #{$btn-padding-y};
69
+ }
70
+
71
+ .btn-icon,
72
+ .btn-icon-xs,
73
+ .btn-icon-sm,
74
+ .btn-icon-lg {
75
+ --moo-btn-icon-size: #{$moo-btn-icon-size};
76
+ padding-inline: 0;
77
+ inline-size: var(--moo-btn-icon-size);
78
+ block-size: var(--moo-btn-icon-size);
79
+ }
80
+
81
+ :is(.btn-icon, .btn-icon-xs, .btn-icon-sm, .btn-icon-lg)::after {
82
+ display: none;
83
+ }
84
+
85
+ .btn > [data-icon="inline-start"],
86
+ .btn > [data-icon="inline-end"] {
87
+ width: $spacer;
88
+ height: $spacer;
89
+ flex: 0 0 auto;
90
+ }
91
+
92
+ :is(.btn-xs, .btn-icon-xs) > [data-icon] {
93
+ width: $spacer * 0.75;
94
+ height: $spacer * 0.75;
95
+ }
96
+
97
+ :is(.btn-sm, .btn-icon-sm, .btn-group-sm > .btn, .btn-group-sm > .btn-group > .btn) > [data-icon] {
98
+ width: $font-size-base;
99
+ height: $font-size-base;
100
+ }
101
+
102
+ .btn[aria-busy="true"] > [data-icon="inline-start"] {
103
+ animation: $moo-spinner-animation-name $spinner-animation-speed linear infinite;
104
+ }
105
+
106
+ .btn:disabled,
107
+ .btn.disabled,
108
+ .btn[aria-disabled="true"] {
109
+ pointer-events: none;
110
+ opacity: var(--moo-disabled-control-opacity);
111
+ }
112
+
113
+ .btn-check:disabled + .btn {
114
+ pointer-events: none;
115
+ opacity: var(--moo-disabled-control-opacity);
116
+ }
117
+
118
+ .btn:not(:disabled):not(.disabled):not([aria-disabled="true"]):active {
119
+ transform: translateY($moo-control-active-translate-y);
120
+ }
121
+
122
+ :is(.btn-primary, .btn-secondary, .btn-outline-secondary, .btn-outline-primary, .btn-ghost, .btn-danger) {
123
+ --bs-btn-border-color: var(--bs-btn-bg);
124
+ --bs-btn-hover-color: var(--bs-btn-color);
125
+ --bs-btn-hover-border-color: var(--bs-btn-hover-bg);
126
+ --bs-btn-active-color: var(--bs-btn-hover-color);
127
+ --bs-btn-active-bg: var(--bs-btn-hover-bg);
128
+ --bs-btn-active-border-color: var(--bs-btn-active-bg);
129
+ --bs-btn-disabled-color: var(--bs-btn-color);
130
+ --bs-btn-disabled-border-color: var(--bs-btn-border-color);
131
+ }
132
+
133
+ :is(.btn-primary, .btn-secondary, .btn-danger) {
134
+ --bs-btn-disabled-bg: var(--bs-btn-bg);
135
+ }
136
+
137
+ :is(.btn-outline-secondary, .btn-outline-primary, .btn-ghost) {
138
+ --bs-btn-disabled-bg: transparent;
139
+ }
140
+
141
+ .btn-primary {
142
+ --bs-btn-color: var(--moo-primary-foreground);
143
+ --bs-btn-bg: var(--moo-primary);
144
+ --bs-btn-hover-bg: color-mix(in srgb, var(--moo-primary) 80%, var(--moo-surface));
145
+ --bs-btn-active-bg: color-mix(in srgb, var(--moo-primary) 72%, var(--moo-surface));
146
+ }
147
+
148
+ .btn-secondary {
149
+ --bs-btn-color: var(--moo-foreground);
150
+ --bs-btn-bg: var(--moo-surface);
151
+ --bs-btn-border-color: var(--moo-border);
152
+ --bs-btn-hover-bg: color-mix(in srgb, var(--moo-muted-surface) 95%, var(--moo-foreground));
153
+ --bs-btn-hover-border-color: color-mix(in srgb, var(--moo-border) 90%, var(--moo-foreground));
154
+ --bs-btn-active-bg: color-mix(in srgb, var(--moo-muted-surface) 88%, var(--moo-foreground));
155
+ --bs-btn-active-border-color: color-mix(in srgb, var(--moo-border) 82%, var(--moo-foreground));
156
+ }
157
+
158
+ .btn-outline-secondary {
159
+ --bs-btn-color: var(--moo-foreground);
160
+ --bs-btn-border-color: var(--moo-border);
161
+ --bs-btn-hover-bg: var(--moo-muted-surface);
162
+ --bs-btn-hover-border-color: var(--moo-border);
163
+ --bs-btn-active-border-color: var(--moo-border);
164
+ }
165
+
166
+ .btn-outline-primary {
167
+ --bs-btn-color: var(--moo-foreground);
168
+ --bs-btn-border-color: var(--moo-foreground);
169
+ --bs-btn-hover-color: var(--moo-surface);
170
+ --bs-btn-hover-bg: var(--moo-foreground);
171
+ }
172
+
173
+ .btn-ghost {
174
+ --bs-btn-color: var(--moo-foreground);
175
+ --bs-btn-bg: transparent;
176
+ --bs-btn-hover-bg: var(--moo-muted-surface);
177
+ --bs-btn-hover-border-color: transparent;
178
+ --bs-btn-active-bg: var(--bs-btn-hover-bg);
179
+ --bs-btn-active-color: var(--bs-btn-color);
180
+ --bs-btn-active-border-color: transparent;
181
+ --bs-btn-disabled-color: var(--moo-disabled-foreground);
182
+ }
183
+
184
+ .btn-danger {
185
+ --bs-btn-color: var(--moo-destructive-foreground);
186
+ --bs-btn-bg: var(--moo-destructive-surface);
187
+ --bs-btn-border-color: transparent;
188
+ --bs-btn-hover-color: var(--moo-destructive-foreground);
189
+ --bs-btn-hover-bg: var(--moo-destructive-surface-hover);
190
+ --bs-btn-hover-border-color: transparent;
191
+ --bs-btn-active-color: var(--moo-destructive-foreground);
192
+ --bs-btn-active-bg: var(--moo-destructive-surface-hover);
193
+ --bs-btn-active-border-color: transparent;
194
+ }
195
+
196
+ .btn-link {
197
+ --bs-btn-color: var(--moo-foreground);
198
+ --bs-btn-hover-color: var(--moo-muted-foreground);
199
+ text-underline-offset: $spacer * 0.25;
200
+ }
@@ -0,0 +1,57 @@
1
+ /* Button Group */
2
+ [dir="rtl"] .btn-group,
3
+ [dir="rtl"] .btn-toolbar {
4
+ direction: ltr;
5
+ }
6
+
7
+ [dir="rtl"] .btn-group > .btn,
8
+ [dir="rtl"] .btn-toolbar > .btn {
9
+ unicode-bidi: plaintext;
10
+ }
11
+
12
+ .btn-group > .btn:hover:not(:focus-visible):not(.active),
13
+ .btn-group > .btn:focus:not(:focus-visible):not(.active),
14
+ .btn-group > .btn:active:not(:focus-visible):not(.active),
15
+ .btn-group-vertical > .btn:hover:not(:focus-visible):not(.active),
16
+ .btn-group-vertical > .btn:focus:not(:focus-visible):not(.active),
17
+ .btn-group-vertical > .btn:active:not(:focus-visible):not(.active) {
18
+ z-index: auto;
19
+ }
20
+
21
+ .btn-group > .btn-check:checked + .btn:hover,
22
+ .btn-group > .btn-check:focus + .btn:hover,
23
+ .btn-group-vertical > .btn-check:checked + .btn:hover,
24
+ .btn-group-vertical > .btn-check:focus + .btn:hover {
25
+ z-index: 1;
26
+ }
27
+
28
+ .btn-group > .btn:not(:disabled):not(.disabled):not([aria-disabled="true"]):active,
29
+ .btn-group-vertical > .btn:not(:disabled):not(.disabled):not([aria-disabled="true"]):active {
30
+ transform: none;
31
+ }
32
+
33
+ .btn-group > .btn-icon,
34
+ .btn-group > .btn-icon-xs,
35
+ .btn-group > .btn-icon-sm,
36
+ .btn-group > .btn-icon-lg,
37
+ .btn-group-vertical > .btn-icon,
38
+ .btn-group-vertical > .btn-icon-xs,
39
+ .btn-group-vertical > .btn-icon-sm,
40
+ .btn-group-vertical > .btn-icon-lg {
41
+ flex: 0 0 auto;
42
+ }
43
+
44
+ .btn-group-vertical > .btn-icon,
45
+ .btn-group-vertical > .btn-icon-xs,
46
+ .btn-group-vertical > .btn-icon-sm,
47
+ .btn-group-vertical > .btn-icon-lg {
48
+ width: var(--moo-btn-icon-size);
49
+ }
50
+
51
+ .btn-group-select,
52
+ .input-group > .btn-group-select {
53
+ flex: 0 0 auto;
54
+ width: auto;
55
+ min-width: calc(#{$form-select-indicator-padding} + #{$spacer});
56
+ padding-inline-end: $form-select-indicator-padding;
57
+ }