@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,213 @@
1
+ /* Slider */
2
+ $slider-thumb-size: $form-range-thumb-width * 0.75;
3
+ $slider-thumb-margin-top: ($progress-height - $slider-thumb-size) * 0.5;
4
+
5
+ .slider {
6
+ display: grid;
7
+ gap: $form-text-margin-top;
8
+ width: 100%;
9
+ }
10
+
11
+ .slider-track {
12
+ position: relative;
13
+ display: flex;
14
+ align-items: center;
15
+ width: $form-range-track-width;
16
+ height: $slider-thumb-size;
17
+ cursor: $form-range-track-cursor;
18
+ touch-action: none;
19
+ }
20
+
21
+ .slider-track::before,
22
+ .slider-range {
23
+ position: absolute;
24
+ inset-block-start: 50%;
25
+ height: $progress-height;
26
+ border-radius: var(--bs-border-radius-pill);
27
+ transform: translateY(-50%);
28
+ pointer-events: none;
29
+ }
30
+
31
+ .slider-track::before {
32
+ content: "";
33
+ inset-inline: 0;
34
+ background-color: $form-range-track-bg;
35
+ box-shadow: var(--bs-box-shadow-inset);
36
+ }
37
+
38
+ .slider-range {
39
+ inset-inline-start: var(--moo-slider-start, 0%);
40
+ inset-inline-end: calc(100% - var(--moo-slider-end, 0%));
41
+ background-color: var(--moo-primary);
42
+ }
43
+
44
+ .slider-input {
45
+ position: absolute;
46
+ inset: 0;
47
+ margin: 0;
48
+ width: 100%;
49
+ height: 100%;
50
+ pointer-events: none;
51
+ }
52
+
53
+ .slider-input::-webkit-slider-runnable-track {
54
+ height: $progress-height;
55
+ background-color: transparent;
56
+ box-shadow: none;
57
+ }
58
+
59
+ .slider-input::-moz-range-track {
60
+ height: $progress-height;
61
+ background-color: transparent;
62
+ box-shadow: none;
63
+ }
64
+
65
+ .slider-input::-webkit-slider-thumb {
66
+ position: relative;
67
+ z-index: 1;
68
+ width: $slider-thumb-size;
69
+ height: $slider-thumb-size;
70
+ margin-top: $slider-thumb-margin-top;
71
+ background-color: var(--bs-body-bg);
72
+ border-width: var(--bs-border-width);
73
+ border-style: solid;
74
+ border-color: var(--moo-primary);
75
+ box-shadow: var(--bs-box-shadow-sm);
76
+ pointer-events: auto;
77
+ }
78
+
79
+ .slider-input::-moz-range-thumb {
80
+ position: relative;
81
+ z-index: 1;
82
+ width: $slider-thumb-size;
83
+ height: $slider-thumb-size;
84
+ background-color: var(--bs-body-bg);
85
+ border-width: var(--bs-border-width);
86
+ border-style: solid;
87
+ border-color: var(--moo-primary);
88
+ box-shadow: var(--bs-box-shadow-sm);
89
+ pointer-events: auto;
90
+ }
91
+
92
+ .slider-input::-webkit-slider-thumb:active {
93
+ background-color: var(--bs-body-bg);
94
+ border-color: var(--moo-primary);
95
+ }
96
+
97
+ .slider-input::-moz-range-thumb:active {
98
+ background-color: var(--bs-body-bg);
99
+ border-color: var(--moo-primary);
100
+ }
101
+
102
+ .slider-input:focus-visible::-webkit-slider-thumb {
103
+ box-shadow: 0 0 0 #{$moo-form-focus-ring-width} color-mix(in srgb, #{$moo-form-focus-ring-color} 50%, transparent);
104
+ }
105
+
106
+ .slider-input:focus-visible::-moz-range-thumb {
107
+ box-shadow: 0 0 0 #{$moo-form-focus-ring-width} color-mix(in srgb, #{$moo-form-focus-ring-color} 50%, transparent);
108
+ }
109
+
110
+ .slider[data-slider-dragging] .slider-input::-webkit-slider-thumb {
111
+ box-shadow: 0 0 0 #{$moo-form-focus-ring-width} color-mix(in srgb, #{$moo-form-focus-ring-color} 50%, transparent);
112
+ }
113
+
114
+ .slider[data-slider-dragging] .slider-input::-moz-range-thumb {
115
+ box-shadow: 0 0 0 #{$moo-form-focus-ring-width} color-mix(in srgb, #{$moo-form-focus-ring-color} 50%, transparent);
116
+ }
117
+
118
+ .slider[data-slider-pointer-focus]:not([data-slider-dragging]) .slider-input:focus::-webkit-slider-thumb {
119
+ box-shadow: var(--bs-box-shadow-sm);
120
+ }
121
+
122
+ .slider[data-slider-pointer-focus]:not([data-slider-dragging]) .slider-input:focus::-moz-range-thumb {
123
+ box-shadow: var(--bs-box-shadow-sm);
124
+ }
125
+
126
+ .slider-input:disabled {
127
+ opacity: 1;
128
+ }
129
+
130
+ .slider-input:disabled::-webkit-slider-thumb {
131
+ background-color: var(--moo-muted-surface);
132
+ border-color: var(--moo-disabled-foreground);
133
+ box-shadow: none;
134
+ cursor: default;
135
+ }
136
+
137
+ .slider-input:disabled::-moz-range-thumb {
138
+ background-color: var(--moo-muted-surface);
139
+ border-color: var(--moo-disabled-foreground);
140
+ box-shadow: none;
141
+ cursor: default;
142
+ }
143
+
144
+ .slider-input:disabled:focus-visible::-webkit-slider-thumb,
145
+ .slider[data-slider-dragging] .slider-input:disabled::-webkit-slider-thumb,
146
+ .slider[data-slider-pointer-focus] .slider-input:disabled:focus-visible::-webkit-slider-thumb {
147
+ background-color: var(--moo-muted-surface);
148
+ border-color: var(--moo-disabled-foreground);
149
+ box-shadow: none;
150
+ }
151
+
152
+ .slider-input:disabled:focus-visible::-moz-range-thumb,
153
+ .slider[data-slider-dragging] .slider-input:disabled::-moz-range-thumb,
154
+ .slider[data-slider-pointer-focus] .slider-input:disabled:focus-visible::-moz-range-thumb {
155
+ background-color: var(--moo-muted-surface);
156
+ border-color: var(--moo-disabled-foreground);
157
+ box-shadow: none;
158
+ }
159
+
160
+ .slider:has(.slider-input:disabled) .slider-track {
161
+ cursor: default;
162
+ }
163
+
164
+ .slider:has(.slider-input:disabled) .slider-range {
165
+ background-color: var(--moo-disabled-foreground);
166
+ }
167
+
168
+ .slider--range .slider-input--upper {
169
+ z-index: 2;
170
+ }
171
+
172
+ .slider--vertical {
173
+ width: max-content;
174
+ }
175
+
176
+ .slider--vertical [data-slider-output] {
177
+ display: inline-block;
178
+ min-width: 3ch;
179
+ text-align: end;
180
+ font-variant-numeric: tabular-nums;
181
+ }
182
+
183
+ .slider--vertical .slider-track {
184
+ justify-content: center;
185
+ justify-self: center;
186
+ width: $slider-thumb-size;
187
+ height: $input-height * 4;
188
+ }
189
+
190
+ .slider--vertical .slider-track::before {
191
+ inset-block: 0;
192
+ inset-inline: auto;
193
+ width: $progress-height;
194
+ height: auto;
195
+ transform: none;
196
+ }
197
+
198
+ .slider--vertical .slider-range {
199
+ inset-block-start: calc(100% - var(--moo-slider-end, 0%));
200
+ inset-block-end: var(--moo-slider-start, 0%);
201
+ inset-inline-start: 50%;
202
+ inset-inline-end: auto;
203
+ width: $progress-height;
204
+ height: auto;
205
+ transform: translateX(-50%);
206
+ }
207
+
208
+ .slider--vertical .slider-input {
209
+ width: 100%;
210
+ height: 100%;
211
+ writing-mode: vertical-lr;
212
+ direction: rtl;
213
+ }
@@ -0,0 +1,11 @@
1
+ /* Spinner */
2
+ .spinner [data-icon] {
3
+ width: $spacer;
4
+ height: $spacer;
5
+ animation: $moo-spinner-animation-name $spinner-animation-speed linear infinite;
6
+ }
7
+
8
+ .spinner-sm [data-icon] {
9
+ width: $spacer * 0.75;
10
+ height: $spacer * 0.75;
11
+ }
@@ -0,0 +1,30 @@
1
+ /* Switch */
2
+ .form-switch .form-check-input {
3
+ height: $moo-switch-height;
4
+ }
5
+
6
+ :scope[data-bs-theme="light"] .form-switch .form-check-input:checked {
7
+ --#{$prefix}form-switch-bg: #{escape-svg($form-switch-checked-bg-image)};
8
+
9
+ background-color: var(--moo-primary);
10
+ border-color: var(--moo-primary);
11
+ filter: none;
12
+ }
13
+
14
+ :scope[data-bs-theme="dark"] .form-switch .form-check-input:checked {
15
+ --#{$prefix}form-switch-bg: #{escape-svg($moo-switch-checked-bg-image-dark)};
16
+
17
+ background-color: var(--moo-primary);
18
+ border-color: var(--moo-primary);
19
+ filter: none;
20
+ }
21
+
22
+ :scope[data-bs-theme="light"] .form-switch .form-check-input:focus:active:not(:checked),
23
+ :scope[data-bs-theme="light"] .form-switch .form-check-input:focus:not(:focus-visible):not(:checked) {
24
+ --#{$prefix}form-switch-bg: #{escape-svg($form-switch-bg-image)};
25
+ }
26
+
27
+ :scope[data-bs-theme="dark"] .form-switch .form-check-input:focus:active:not(:checked),
28
+ :scope[data-bs-theme="dark"] .form-switch .form-check-input:focus:not(:focus-visible):not(:checked) {
29
+ --#{$prefix}form-switch-bg: #{escape-svg($form-switch-bg-image-dark)};
30
+ }
@@ -0,0 +1,12 @@
1
+ /* Table */
2
+ .card .table {
3
+ --bs-table-bg: #{$moo-table-contained-bg};
4
+ }
5
+
6
+ .table-responsive:not(.scroll-fade-x):has(.table-row-actions > [aria-expanded="true"]) {
7
+ overflow: visible;
8
+ }
9
+
10
+ .table-row-actions:has(> [aria-expanded="true"]) {
11
+ z-index: $zindex-dropdown;
12
+ }
@@ -0,0 +1,116 @@
1
+ /* Tabs */
2
+ .tabs-list {
3
+ display: inline-flex;
4
+ gap: $moo-tabs-list-gap;
5
+ padding: $moo-tabs-list-padding;
6
+ background-color: var(--moo-muted-surface);
7
+ border-radius: var(--bs-border-radius-lg);
8
+ }
9
+
10
+ .tabs-list .nav-link {
11
+ padding: $moo-tabs-trigger-padding-y $moo-tabs-trigger-padding-x;
12
+ font-size: $font-size-base;
13
+ font-weight: 500;
14
+ color: var(--bs-secondary-text-emphasis);
15
+ border-radius: var(--bs-border-radius);
16
+ cursor: default;
17
+ @include transition($transition-base);
18
+ }
19
+
20
+ .tabs-list .nav-link:hover {
21
+ color: var(--moo-foreground);
22
+ }
23
+
24
+ .tabs-list .nav-link:not(.active, .disabled):hover {
25
+ background-color: transparent;
26
+ box-shadow: none;
27
+ }
28
+
29
+ .tabs-list .nav-link:focus:not(:focus-visible) {
30
+ outline: 0;
31
+ box-shadow: none;
32
+ }
33
+
34
+ .tabs-list .nav-link.active {
35
+ color: var(--moo-foreground);
36
+ background-color: var(--moo-surface);
37
+ box-shadow: var(--bs-box-shadow-sm);
38
+ }
39
+
40
+ .tabs-list .nav-link.active:focus-visible {
41
+ border-color: var(--moo-ring);
42
+ outline: 0;
43
+ box-shadow: 0 0 0 #{$moo-form-focus-ring-width} color-mix(in srgb, #{$moo-form-focus-ring-color} 50%, transparent);
44
+ }
45
+
46
+ .tabs-list:has(.nav-link:hover) .nav-link.active:not(:hover) {
47
+ background-color: var(--moo-surface);
48
+ box-shadow: var(--bs-box-shadow-sm);
49
+ }
50
+
51
+ .tabs--vertical {
52
+ display: flex;
53
+ align-items: flex-start;
54
+ gap: $spacer;
55
+ width: 100%;
56
+ max-width: 100%;
57
+ }
58
+
59
+ .tabs--vertical .tabs-list {
60
+ flex: 0 0 auto;
61
+ }
62
+
63
+ .tabs--vertical .nav-link {
64
+ justify-content: flex-start;
65
+ text-align: start;
66
+ }
67
+
68
+ .tabs--vertical .tab-content {
69
+ flex: 1 1 auto;
70
+ min-width: 0;
71
+ margin-top: 0;
72
+ }
73
+
74
+ @include media-breakpoint-down(sm) {
75
+ .tabs--vertical {
76
+ flex-direction: column;
77
+ }
78
+
79
+ .tabs--vertical .tabs-list {
80
+ flex-direction: row !important;
81
+ }
82
+ }
83
+
84
+ .tabs-list .nav-link:disabled,
85
+ .tabs-list .nav-link.disabled {
86
+ color: var(--moo-disabled-foreground);
87
+ opacity: var(--moo-disabled-control-opacity);
88
+ pointer-events: none;
89
+ }
90
+
91
+ .tab-content {
92
+ display: grid;
93
+ width: 100%;
94
+ max-width: 100%;
95
+ min-width: 0;
96
+ margin-top: $moo-tabs-content-gap;
97
+ }
98
+
99
+ .tab-content > .tab-pane {
100
+ grid-area: 1 / 1;
101
+ display: block;
102
+ width: 100%;
103
+ max-width: 100%;
104
+ min-width: 0;
105
+ opacity: 0;
106
+ visibility: hidden;
107
+ pointer-events: none;
108
+ transition: opacity 0.16s ease, visibility 0s linear 0.16s;
109
+ }
110
+
111
+ .tab-content > .active {
112
+ opacity: 1;
113
+ visibility: visible;
114
+ pointer-events: auto;
115
+ transition-delay: 0s;
116
+ }
@@ -0,0 +1,8 @@
1
+ /* Textarea */
2
+ textarea.form-control:not(.form-control-sm, .form-control-lg) {
3
+ padding: $input-btn-padding-y-lg $input-btn-padding-x;
4
+ }
5
+
6
+ textarea.form-control:disabled {
7
+ resize: none;
8
+ }
@@ -0,0 +1,116 @@
1
+ /* Toast */
2
+ .toast {
3
+ --bs-toast-border-radius: var(--bs-border-radius-lg);
4
+ --bs-toast-border-color: var(--moo-border);
5
+ --bs-toast-bg: var(--bs-body-bg);
6
+ --bs-toast-box-shadow: var(--bs-box-shadow-lg);
7
+ --bs-toast-header-bg: var(--bs-body-bg);
8
+ --bs-toast-padding-x: #{$spacer};
9
+ }
10
+
11
+ .toast-container {
12
+ z-index: var(--bs-toast-zindex, #{$zindex-toast});
13
+ }
14
+
15
+ .toast-header strong {
16
+ font-weight: $font-weight-medium;
17
+ }
18
+
19
+ .toast-status-icon {
20
+ display: inline-flex;
21
+ flex: 0 0 auto;
22
+ margin-inline-end: $moo-toast-status-icon-gap;
23
+ color: var(--bs-secondary-color);
24
+ }
25
+
26
+ .toast-status-icon [data-icon] {
27
+ width: $moo-toast-status-icon-size;
28
+ height: $moo-toast-status-icon-size;
29
+ }
30
+
31
+ .toast[data-toast-variant="success"] .toast-status-icon {
32
+ color: var(--moo-success);
33
+ }
34
+
35
+ .toast[data-toast-variant="info"] .toast-status-icon {
36
+ color: var(--moo-info);
37
+ }
38
+
39
+ .toast[data-toast-variant="warning"] .toast-status-icon {
40
+ color: var(--moo-warning);
41
+ }
42
+
43
+ .toast[data-toast-variant="destructive"] .toast-status-icon {
44
+ color: var(--moo-destructive);
45
+ }
46
+
47
+ .toast[data-toast-variant="loading"] .toast-status-icon [data-icon] {
48
+ animation: $moo-spinner-animation-name $spinner-animation-speed linear infinite;
49
+ }
50
+
51
+ .toast-container--stacked[data-toast-stack="deck"] {
52
+ --moo-toast-stack-gap: #{$moo-toast-stack-gap};
53
+ --moo-toast-stack-peek: #{$moo-toast-stack-peek};
54
+ --moo-toast-stack-scale-step: #{$moo-toast-stack-scale-step};
55
+ --moo-toast-stack-min-scale: #{$moo-toast-stack-min-scale};
56
+ --moo-toast-stack-enter-y: #{$moo-toast-stack-enter-y};
57
+ }
58
+
59
+ .toast-container--stacked[data-toast-stack="deck"][data-toast-stack-active] {
60
+ bottom: 1rem !important;
61
+ inset-inline-end: 1rem !important;
62
+ height: 0;
63
+ max-width: calc(100vw - 2rem);
64
+ padding: 0 !important;
65
+ width: unquote("min(24rem, calc(100vw - 2rem))");
66
+ }
67
+
68
+ .toast-container--stacked[data-toast-stack="deck"][data-toast-stack-active] > .toast[data-toast-stack-index] {
69
+ inset-block-end: 0;
70
+ inset-inline-end: 0;
71
+ max-width: none;
72
+ margin-bottom: 0;
73
+ position: absolute;
74
+ width: 100%;
75
+ transform: translateY(var(--moo-toast-stack-collapsed-y, 0px))
76
+ scale(var(--moo-toast-stack-scale, 1));
77
+ transform-origin: bottom center;
78
+ z-index: var(--moo-toast-stack-z, 1);
79
+ transition:
80
+ transform $moo-toast-stack-transition-duration $moo-toast-stack-transition-timing-function,
81
+ opacity $moo-toast-stack-transition-duration ease,
82
+ height $moo-toast-stack-height-transition-duration ease;
83
+ }
84
+
85
+ .toast-container--stacked[data-toast-stack="deck"][data-toast-stack-active] > .toast[data-toast-stack-entering] {
86
+ transform: translateY(calc(var(--moo-toast-stack-collapsed-y, 0px) + var(--moo-toast-stack-enter-y, 150%)))
87
+ scale(var(--moo-toast-stack-scale, 1));
88
+ }
89
+
90
+ .toast-container--stacked[data-toast-stack="deck"][data-toast-stack-active] > .toast[data-toast-stack-limited] {
91
+ opacity: 0;
92
+ pointer-events: none;
93
+ }
94
+
95
+ .toast-container--stacked[data-toast-stack="deck"][data-toast-stack-active]:hover > .toast[data-toast-stack-index],
96
+ .toast-container--stacked[data-toast-stack="deck"][data-toast-stack-active]:focus-within > .toast[data-toast-stack-index],
97
+ .toast-container--stacked[data-toast-stack="deck"][data-toast-stack-active][data-toast-stack-hovering] > .toast[data-toast-stack-index] {
98
+ transform: translateY(var(--moo-toast-stack-expanded-y, 0px)) scale(1);
99
+ }
100
+
101
+ .toast-container--stacked[data-toast-stack="deck"][data-toast-stack-active]:hover > .toast[data-toast-stack-entering],
102
+ .toast-container--stacked[data-toast-stack="deck"][data-toast-stack-active]:focus-within > .toast[data-toast-stack-entering],
103
+ .toast-container--stacked[data-toast-stack="deck"][data-toast-stack-active][data-toast-stack-hovering] > .toast[data-toast-stack-entering] {
104
+ transform: translateY(calc(var(--moo-toast-stack-collapsed-y, 0px) + var(--moo-toast-stack-enter-y, 150%)))
105
+ scale(var(--moo-toast-stack-scale, 1));
106
+ }
107
+
108
+ @media (prefers-reduced-motion: reduce) {
109
+ .toast[data-toast-variant="loading"] .toast-status-icon [data-icon] {
110
+ animation: none;
111
+ }
112
+
113
+ .toast-container--stacked[data-toast-stack="deck"][data-toast-stack-active] > .toast[data-toast-stack-index] {
114
+ transition: none;
115
+ }
116
+ }
@@ -0,0 +1,17 @@
1
+ /* Toggle Group */
2
+ .toggle-group > .btn:not(:disabled):not(.disabled):not([aria-disabled="true"]):active {
3
+ transform: none;
4
+ }
5
+
6
+ .toggle-group > .btn-check:checked + .btn {
7
+ --bs-btn-active-color: var(--moo-primary-foreground);
8
+ --bs-btn-active-bg: var(--moo-primary);
9
+ --bs-btn-active-border-color: var(--moo-primary);
10
+ }
11
+
12
+ .toggle-group > .btn-check:focus-visible + .btn,
13
+ .toggle-group > .btn-check:checked:focus-visible + .btn {
14
+ border-color: var(--moo-ring);
15
+ outline: 0;
16
+ box-shadow: 0 0 0 #{$moo-form-focus-ring-width} color-mix(in srgb, #{$moo-form-focus-ring-color} 50%, transparent);
17
+ }
@@ -0,0 +1,64 @@
1
+ /* Tooltip */
2
+ .tooltip {
3
+ --bs-tooltip-max-width: 20rem;
4
+ --bs-tooltip-padding-x: 0.75rem;
5
+ --bs-tooltip-padding-y: 0.375rem;
6
+ --bs-tooltip-font-size: 0.75rem;
7
+ --bs-tooltip-opacity: 1;
8
+ --moo-tooltip-motion-duration: #{$moo-tooltip-motion-duration};
9
+ --moo-tooltip-motion-easing: #{$moo-tooltip-motion-easing};
10
+ --moo-tooltip-motion-scale: #{$moo-tooltip-motion-scale};
11
+ --moo-tooltip-motion-translate: #{$moo-tooltip-motion-translate};
12
+ line-height: 1.333;
13
+ }
14
+
15
+ .tooltip.fade .tooltip-inner {
16
+ transition: transform var(--moo-tooltip-motion-duration) var(--moo-tooltip-motion-easing);
17
+ transform: scale(var(--moo-tooltip-motion-scale));
18
+ transform-origin: center;
19
+ will-change: transform;
20
+ }
21
+
22
+ .tooltip.show .tooltip-inner {
23
+ transform: translate3d(0, 0, 0) scale(1);
24
+ }
25
+
26
+ .bs-tooltip-top.fade:not(.show) .tooltip-inner,
27
+ .bs-tooltip-auto[data-popper-placement^="top"].fade:not(.show) .tooltip-inner {
28
+ transform: translate3d(0, var(--moo-tooltip-motion-translate), 0) scale(var(--moo-tooltip-motion-scale));
29
+ }
30
+
31
+ .bs-tooltip-bottom.fade:not(.show) .tooltip-inner,
32
+ .bs-tooltip-auto[data-popper-placement^="bottom"].fade:not(.show) .tooltip-inner {
33
+ transform: translate3d(0, calc(var(--moo-tooltip-motion-translate) * -1), 0) scale(var(--moo-tooltip-motion-scale));
34
+ }
35
+
36
+ .bs-tooltip-start.fade:not(.show) .tooltip-inner,
37
+ .bs-tooltip-auto[data-popper-placement^="left"].fade:not(.show) .tooltip-inner {
38
+ transform: translate3d(var(--moo-tooltip-motion-translate), 0, 0) scale(var(--moo-tooltip-motion-scale));
39
+ }
40
+
41
+ .bs-tooltip-end.fade:not(.show) .tooltip-inner,
42
+ .bs-tooltip-auto[data-popper-placement^="right"].fade:not(.show) .tooltip-inner {
43
+ transform: translate3d(calc(var(--moo-tooltip-motion-translate) * -1), 0, 0) scale(var(--moo-tooltip-motion-scale));
44
+ }
45
+
46
+ @media (prefers-reduced-motion: reduce) {
47
+ .tooltip.fade .tooltip-inner {
48
+ transition: none;
49
+ transform: none;
50
+ will-change: auto;
51
+ }
52
+ }
53
+
54
+ .tooltip-trigger {
55
+ color: var(--moo-foreground);
56
+ text-decoration-line: underline;
57
+ text-decoration-style: dotted;
58
+ text-decoration-color: var(--moo-muted-foreground);
59
+ text-underline-offset: 0.2em;
60
+ }
61
+
62
+ .tooltip-inner kbd {
63
+ margin-inline-start: $kbd-padding-x;
64
+ }
@@ -0,0 +1,86 @@
1
+
2
+ .sidebar-inner {
3
+ position: sticky;
4
+ top: 0;
5
+ display: flex;
6
+ flex-direction: column;
7
+ width: 100%;
8
+ height: 100svh;
9
+ max-height: 100svh;
10
+ background: var(--moo-sidebar);
11
+ }
12
+
13
+ .sidebar-header,
14
+ .sidebar-footer {
15
+ display: flex;
16
+ flex-direction: column;
17
+ gap: $spacer * 0.25;
18
+ padding: $spacer * 0.5;
19
+ }
20
+
21
+ .sidebar-content {
22
+ display: flex;
23
+ flex: 1 1 auto;
24
+ flex-direction: column;
25
+ gap: $spacer * 0.5;
26
+ min-height: 0;
27
+ overflow-y: auto;
28
+ }
29
+
30
+ .sidebar-input {
31
+ width: 100%;
32
+ padding: $spacer * 0.25;
33
+ }
34
+
35
+ .sidebar-separator {
36
+ display: flex;
37
+ }
38
+
39
+ .sidebar-menu-skeleton {
40
+ display: flex;
41
+ align-items: center;
42
+ gap: $spacer * 0.25;
43
+ min-height: $spacer * 2;
44
+ padding-inline: $spacer * 0.5;
45
+ }
46
+
47
+ .sidebar-menu-skeleton__icon {
48
+ width: $spacer;
49
+ height: $spacer;
50
+ }
51
+
52
+ .sidebar-menu-skeleton__line {
53
+ flex: 1 1 auto;
54
+ }
55
+
56
+ .sidebar-group {
57
+ position: relative;
58
+ display: flex;
59
+ flex-direction: column;
60
+ padding: $spacer * 0.5;
61
+ }
62
+
63
+ .sidebar-group-content {
64
+ display: block;
65
+ }
66
+
67
+ .sidebar-group-content--inline {
68
+ display: flex;
69
+ align-items: center;
70
+ flex-wrap: wrap;
71
+ gap: $spacer * 0.25;
72
+ }
73
+
74
+ .sidebar-group-label {
75
+ display: flex;
76
+ align-items: center;
77
+ height: $spacer * 2;
78
+ padding-inline: $spacer * 0.5;
79
+ color: var(--moo-muted-foreground);
80
+ font-size: $font-size-base * 0.857;
81
+ font-weight: $font-weight-medium;
82
+ }
83
+
84
+ .sidebar-group:has(.sidebar-group-action) .sidebar-group-label {
85
+ padding-inline-end: $spacer * 2.5;
86
+ }