blue-web 1.19.1 → 1.21.0

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/merged.scss CHANGED
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * Blue Web v1.19.1 (https://bruegmann.github.io/blue-web)
2
+ * Blue Web v1.21.0 (https://bruegmann.github.io/blue-web)
3
3
  * Licensed under GNU General Public License v3.0 (https://github.com/bruegmann/blue-web/blob/master/LICENSE).
4
4
  */
5
5
 
@@ -48,6 +48,7 @@ $focus-ring-color: #{rgba(var(--bs-primary-rgb), 25%)} !default;
48
48
  $input-focus-border-color: #{rgba(var(--bs-primary-rgb), 50%)} !default;
49
49
 
50
50
  $enable-button-pointers: false !default;
51
+ $focus-ring-width: 0.125rem !default;
51
52
 
52
53
 
53
54
  // Bootstrap functions
@@ -3742,6 +3743,8 @@ $sidebar-shrink-breakpoint: 600px !default;
3742
3743
  // Breakpoint for sidebar fully expanded
3743
3744
  $sidebar-expanded-breakpoint: 1400px !default;
3744
3745
 
3746
+ $corner-shape: #{round} !default;
3747
+
3745
3748
  :root {
3746
3749
  --blue-app-bg: #{$app-bg};
3747
3750
 
@@ -3759,6 +3762,8 @@ $sidebar-expanded-breakpoint: 1400px !default;
3759
3762
  --blue-action-link-bg-color: var(--blue-theme);
3760
3763
  --blue-menu-item-indicator-bg: #{$sidebar-indicator-color};
3761
3764
  --blue-menu-item-height: #{$normal-size};
3765
+
3766
+ --blue-corner-shape: #{$corner-shape};
3762
3767
  }
3763
3768
 
3764
3769
  @include color-mode(dark, true) {
@@ -3775,163 +3780,150 @@ $sidebar-expanded-breakpoint: 1400px !default;
3775
3780
  }
3776
3781
 
3777
3782
 
3778
- @mixin slide-transition() {
3779
- $slide-transition: width 0.5s;
3780
- transition: $slide-transition;
3783
+ @mixin header-bg() {
3784
+ background-image: linear-gradient(
3785
+ var(--blue-header-bg, $header-bg),
3786
+ rgba(var(--blue-header-bg-rgb, var(--bs-theme-rgb)), var(--blue-shimmering, $shimmering))
3787
+ );
3788
+ backdrop-filter: blur(3px) saturate(125%);
3789
+ }
3790
+
3791
+ @mixin blue-menu-item-background() {
3792
+ content: "";
3793
+ position: absolute;
3794
+ top: 0.125rem;
3795
+ right: 0.125rem;
3796
+ bottom: 0.125rem;
3797
+ left: 0.125rem;
3798
+ background-color: currentColor;
3799
+ border-radius: $border-radius;
3800
+ transform: scale(0.9);
3801
+ opacity: 0;
3802
+ transition: all 0.2s;
3781
3803
 
3782
3804
  @media (prefers-reduced-motion) {
3783
3805
  transition: none;
3784
3806
  }
3807
+ }
3808
+
3809
+ @mixin blue-menu-item-indicator() {
3810
+ content: "";
3811
+ position: absolute;
3812
+ top: 0.625rem;
3813
+ bottom: 0.625rem;
3814
+ left: 0.125rem;
3815
+ right: initial;
3816
+ width: 3px;
3817
+ height: auto;
3818
+ background-color: var(--blue-menu-item-indicator-bg);
3819
+ border-radius: 1rem;
3820
+ animation: blue-menu-item-indicator-in-from-side 0.2s ease-in-out;
3785
3821
 
3786
3822
  @media (prefers-reduced-motion) {
3787
- transition: none;
3823
+ animation-duration: 0s;
3788
3824
  }
3789
3825
  }
3790
3826
 
3791
- @mixin header-bg() {
3792
- background-image: linear-gradient(
3793
- var(--blue-header-bg, $header-bg),
3794
- rgba(var(--blue-header-bg-rgb, var(--bs-theme-rgb)), var(--blue-shimmering, $shimmering))
3795
- );
3796
- backdrop-filter: blur(3px) saturate(125%);
3827
+ @mixin blue-menu-item-indicator-horizontal() {
3828
+ top: initial;
3829
+ bottom: 0.125rem;
3830
+ left: 50%;
3831
+ transform: translateX(-50%);
3832
+ width: 2em;
3833
+ height: 3px;
3834
+ animation: blue-menu-item-indicator-in-from-below 0.2s ease-in-out;
3835
+
3836
+ @media (prefers-reduced-motion) {
3837
+ animation-duration: 0s;
3838
+ }
3797
3839
  }
3798
3840
 
3799
- @mixin blue-menu-item-background() {
3800
- content: "";
3801
- position: absolute;
3802
- top: 0.125rem;
3803
- right: 0.125rem;
3804
- bottom: 0.125rem;
3805
- left: 0.125rem;
3806
- background-color: currentColor;
3807
- border-radius: $border-radius;
3808
- transform: scale(0.9);
3809
- opacity: 0;
3810
- transition: all 0.2s;
3811
-
3812
- @media (prefers-reduced-motion) {
3813
- transition: none;
3814
- }
3815
- }
3816
-
3817
- @mixin blue-menu-item-indicator() {
3818
- content: "";
3819
- position: absolute;
3820
- top: 0.625rem;
3821
- bottom: 0.625rem;
3822
- left: 0.125rem;
3823
- right: initial;
3824
- width: 0.25rem;
3825
- height: auto;
3826
- background-color: var(--blue-menu-item-indicator-bg);
3827
- border-radius: 1rem;
3828
- animation: blue-menu-item-indicator-in-from-side 0.2s ease-in-out;
3829
-
3830
- @media (prefers-reduced-motion) {
3831
- animation-duration: 0s;
3832
- }
3833
- }
3834
-
3835
- @mixin blue-menu-item-indicator-horizontal() {
3836
- top: initial;
3837
- bottom: 0.125rem;
3838
- left: 0.625rem;
3839
- right: 0.625rem;
3840
- width: auto;
3841
- height: 0.25rem;
3842
- animation: blue-menu-item-indicator-in-from-below 0.2s ease-in-out;
3843
-
3844
- @media (prefers-reduced-motion) {
3845
- animation-duration: 0s;
3846
- }
3847
- }
3848
-
3849
- @mixin blue-menu-item-dropdown-for-shrunk-sidebar() {
3850
- & > .blue-menu-item-wrapper {
3851
- display: block;
3852
- position: relative;
3853
-
3854
- &:not(:has(.blue-menu-item-dropdown)) > .blue-menu-item:hover {
3855
- .blue-menu-item-label {
3856
- &::before,
3857
- & {
3858
- animation: tips-horz 150ms cubic-bezier(0.5, 0, 0.6, 1.3) 1ms forwards;
3859
-
3860
- @media (prefers-reduced-motion) {
3861
- animation-duration: 0s;
3862
- }
3863
- }
3864
-
3865
- &::before {
3866
- content: "";
3867
- display: block;
3868
- position: absolute;
3869
- border: 5px solid transparent;
3870
- z-index: 1001;
3871
-
3872
- top: 50%;
3873
- border-left-width: 0;
3874
- border-right-color: var(--bs-tooltip-bg, #353539);
3875
- left: calc(0em - 5px);
3876
- transform: translate(0.5em, -50%);
3877
- opacity: 0;
3878
- }
3879
-
3880
- display: block;
3881
- text-transform: none;
3882
- line-height: 1;
3883
- font-size: 0.9em;
3884
- -webkit-user-select: none;
3885
- user-select: none;
3886
- pointer-events: none;
3887
- position: absolute;
3888
- font-family: var(--bs-font-sans-serif);
3889
- text-align: center;
3890
- min-width: 3em;
3891
- max-width: var(--bs-tooltip-max-width, 21em);
3892
- padding: var(--bs-tooltip-padding-y, 1ch) var(--bs-tooltip-padding-x, 1.5ch);
3893
- border-radius: var(--bs-tooltip-border-radius, 0.3em);
3894
- box-shadow: 0 1em 2em -0.5em rgba(0, 0, 0, 0.35);
3895
- background: var(--bs-tooltip-bg, #353539);
3896
- color: var(--bs-tooltip-color, #fff);
3897
- z-index: 1000;
3898
- width: auto;
3899
- top: 50%;
3900
- left: calc(100% + 5px);
3901
- transform: translate(-0.5em, -50%);
3902
- overflow: visible;
3903
- opacity: 0;
3904
- }
3905
- }
3906
-
3907
- & > .blue-menu-item-dropdown,
3908
- & > .blue-outside > .blue-menu-item-dropdown {
3909
- @extend .ms-1;
3910
- @extend .rounded;
3911
- @extend .shadow;
3912
- @extend .blue-menu-item-dropdown-from-start;
3913
-
3914
- position: absolute;
3915
- top: 0;
3916
- width: $bla-sidebar-width;
3917
- left: $normal-size;
3918
- max-height: calc(100vh - (var(--offset-top, 0px) + 1rem));
3919
- overflow-y: auto;
3920
- overflow-x: hidden;
3921
- background-color: var(--blue-sidebar-bg);
3922
-
3923
- &::before {
3924
- content: none;
3925
- }
3926
- }
3927
-
3928
- &:has(.blue-menu-item-dropdown) {
3929
- & > .blue-menu-item {
3930
- @extend .highlighted;
3931
- }
3932
- }
3933
- }
3934
- }
3841
+ @mixin blue-menu-item-dropdown-for-shrunk-sidebar() {
3842
+ & > .blue-menu-item-wrapper {
3843
+ display: block;
3844
+ position: relative;
3845
+
3846
+ &:not(:has(.blue-menu-item-dropdown)) > .blue-menu-item:hover {
3847
+ .blue-menu-item-label {
3848
+ &::before,
3849
+ & {
3850
+ animation: tips-horz 150ms cubic-bezier(0.5, 0, 0.6, 1.3) 1ms forwards;
3851
+
3852
+ @media (prefers-reduced-motion) {
3853
+ animation-duration: 0s;
3854
+ }
3855
+ }
3856
+
3857
+ &::before {
3858
+ content: "";
3859
+ display: block;
3860
+ position: absolute;
3861
+ border: 5px solid transparent;
3862
+ z-index: 1001;
3863
+
3864
+ top: 50%;
3865
+ border-left-width: 0;
3866
+ border-right-color: var(--bs-tooltip-bg, #353539);
3867
+ left: calc(0em - 5px);
3868
+ transform: translate(0.5em, -50%);
3869
+ opacity: 0;
3870
+ }
3871
+
3872
+ display: block;
3873
+ text-transform: none;
3874
+ line-height: 1;
3875
+ font-size: 0.9em;
3876
+ -webkit-user-select: none;
3877
+ user-select: none;
3878
+ pointer-events: none;
3879
+ position: absolute;
3880
+ font-family: var(--bs-font-sans-serif);
3881
+ text-align: center;
3882
+ min-width: 3em;
3883
+ max-width: var(--bs-tooltip-max-width, 21em);
3884
+ padding: var(--bs-tooltip-padding-y, 1ch) var(--bs-tooltip-padding-x, 1.5ch);
3885
+ border-radius: var(--bs-tooltip-border-radius, 0.3em);
3886
+ box-shadow: 0 1em 2em -0.5em rgba(0, 0, 0, 0.35);
3887
+ background: var(--bs-tooltip-bg, #353539);
3888
+ color: var(--bs-tooltip-color, #fff);
3889
+ z-index: 1000;
3890
+ width: auto;
3891
+ top: 50%;
3892
+ left: calc(100% + 5px);
3893
+ transform: translate(-0.5em, -50%);
3894
+ overflow: visible;
3895
+ opacity: 0;
3896
+ }
3897
+ }
3898
+
3899
+ & > .blue-menu-item-dropdown,
3900
+ & > .blue-outside > .blue-menu-item-dropdown {
3901
+ @extend .ms-1;
3902
+ @extend .rounded;
3903
+ @extend .shadow;
3904
+ @extend .blue-menu-item-dropdown-from-start;
3905
+
3906
+ position: absolute;
3907
+ top: 0;
3908
+ width: $bla-sidebar-width;
3909
+ left: $normal-size;
3910
+ max-height: calc(100vh - (var(--offset-top, 0px) + 1rem));
3911
+ overflow-y: auto;
3912
+ overflow-x: hidden;
3913
+ background-color: var(--blue-sidebar-bg);
3914
+
3915
+ &::before {
3916
+ content: none;
3917
+ }
3918
+ }
3919
+
3920
+ &:has(.blue-menu-item-dropdown) {
3921
+ & > .blue-menu-item {
3922
+ @extend .highlighted;
3923
+ }
3924
+ }
3925
+ }
3926
+ }
3935
3927
 
3936
3928
  @mixin show-action-menu-again() {
3937
3929
  max-height: initial;
@@ -10915,6 +10907,20 @@ body {
10915
10907
  margin: 0 !important;
10916
10908
  }
10917
10909
 
10910
+ // Shows empty message if the element has no children.
10911
+ // Can be used for lists and such.
10912
+ // For localization you should override CSS variable `--message` dynamically.
10913
+ .blue-empty-message {
10914
+ --message: "No items found.";
10915
+ &:empty::before {
10916
+ content: var(--message);
10917
+ color: var(--bs-secondary-color);
10918
+ display: flex;
10919
+ padding: 1rem;
10920
+ justify-content: center;
10921
+ }
10922
+ }
10923
+
10918
10924
  .blue-loading {
10919
10925
  background-color: $primary;
10920
10926
  }
@@ -11047,84 +11053,30 @@ body {
11047
11053
  animation-delay: -1s;
11048
11054
  }
11049
11055
 
11050
- @keyframes blue-menu-item-indicator-in-from-side {
11051
- from {
11052
- transform: translateX(-100%);
11053
- }
11054
- to {
11055
- transform: translateX(1);
11056
- }
11057
- }
11058
-
11059
- @keyframes blue-menu-item-indicator-in-from-below {
11060
- from {
11061
- transform: translateY(100%);
11062
- }
11063
- to {
11064
- transform: translateY(1);
11065
- }
11066
- }
11067
-
11068
11056
  .blue-menu-item {
11057
+ display: inline-flex;
11058
+ align-items: center;
11069
11059
  transition:
11070
11060
  width 0.5s,
11071
11061
  background-color 0.3s,
11072
11062
  color 0.15s,
11073
11063
  box-shadow 0.3s,
11074
11064
  opacity 0.3s !important;
11065
+ color: inherit;
11066
+ border-color: transparent;
11067
+ --bs-btn-active-border-color: transparent;
11068
+ --bs-btn-disabled-border-color: transparent;
11075
11069
 
11076
11070
  @media (prefers-reduced-motion) {
11077
11071
  transition: none !important;
11078
11072
  }
11079
11073
 
11080
- & {
11081
- border: none;
11082
- box-shadow: none;
11083
- background-image: none;
11084
- }
11085
-
11086
- &:focus {
11087
- box-shadow: none;
11088
- }
11089
-
11090
11074
  &:focus-visible {
11091
11075
  &,
11092
11076
  &.active {
11093
11077
  box-shadow: inset 0 0 0 0.25rem color-mix(in srgb, currentColor 15%, transparent);
11094
11078
  }
11095
11079
  }
11096
- }
11097
-
11098
- .blue-menu-item-icon {
11099
- display: inline-block;
11100
-
11101
- & > * {
11102
- display: block;
11103
- width: 1.5rem;
11104
- }
11105
- }
11106
-
11107
- .blue-menu-item-icon.iconForActive {
11108
- display: none;
11109
- }
11110
-
11111
- .blue-menu-item.active {
11112
- .blue-menu-item-icon.hasIconForActive {
11113
- display: none;
11114
- }
11115
- .blue-menu-item-icon.iconForActive {
11116
- display: inline-block;
11117
- }
11118
- }
11119
-
11120
- .blue-menu-item-dropdown {
11121
- margin-left: 1rem;
11122
- animation: blue-menu-item-dropdown 0.15s;
11123
- position: relative;
11124
-
11125
- @media (prefers-reduced-motion) {
11126
- animation-duration: 0s;
11127
- }
11128
11080
 
11129
11081
  &::before {
11130
11082
  content: "";
@@ -11133,91 +11085,229 @@ body {
11133
11085
  right: 0.125rem;
11134
11086
  bottom: 0.125rem;
11135
11087
  left: 0.125rem;
11088
+ background-color: currentColor;
11136
11089
  border-radius: $border-radius;
11137
- box-shadow: $box-shadow;
11138
- border: 1px solid color-mix(in srgb, currentColor 15%, transparent);
11139
- background-color: var(--blue-menu-item-dropdown-bg);
11140
- }
11141
-
11142
- &[popover] {
11143
- position: fixed;
11144
- margin: 0;
11145
- padding: 0;
11146
- z-index: 1000;
11147
- border: none;
11148
- background: transparent;
11149
- border-radius: calc(#{$border-radius} + 0.1rem);
11150
- box-shadow: $box-shadow;
11151
- }
11152
- }
11153
-
11154
- .blue-menu-item {
11155
- color: inherit;
11156
- width: auto;
11157
- height: $normal-size;
11158
- font-size: $bla-btn-font-size;
11159
- display: flex;
11160
- align-items: center;
11161
- border-color: transparent;
11162
- --bs-btn-padding-x: 0.437rem;
11163
- @include slide-transition();
11164
-
11165
- &::before {
11166
- @include blue-menu-item-background();
11167
- }
11168
-
11169
- &[draggable] {
11170
- cursor: grab;
11090
+ transform: scale(0.9);
11091
+ opacity: 0;
11092
+ transition: all 0.2s;
11171
11093
 
11172
- &:active {
11173
- box-shadow: inset 0 0 0.25rem;
11094
+ @media (prefers-reduced-motion) {
11095
+ transition: none;
11174
11096
  }
11175
11097
  }
11176
11098
 
11177
11099
  &:hover,
11178
11100
  &:active,
11179
- &.highlighted,
11101
+ &.active,
11180
11102
  &:has(+ :popover-open) {
11181
- color: inherit;
11182
- border-color: transparent;
11183
-
11184
11103
  &::before {
11185
11104
  transform: scale(1);
11186
11105
  opacity: 0.25;
11187
11106
  }
11188
11107
  }
11189
11108
 
11190
- &.highlighted,
11109
+ &.active,
11191
11110
  &:has(+ :popover-open) {
11192
11111
  &::before {
11193
11112
  opacity: 0.16;
11194
11113
  }
11195
11114
  }
11196
11115
 
11197
- &:hover,
11198
- &:active {
11199
- &::before {
11200
- opacity: 0.25;
11116
+ &.current {
11117
+ position: relative;
11118
+ &::after {
11119
+ @include blue-menu-item-indicator();
11201
11120
  }
11202
11121
  }
11122
+ }
11203
11123
 
11204
- &.active::after {
11205
- @include blue-menu-item-indicator();
11124
+ .blue-horizontal {
11125
+ .blue-menu-item.current::after {
11126
+ @include blue-menu-item-indicator-horizontal();
11206
11127
  }
11128
+ }
11207
11129
 
11208
- & > * + .blue-menu-item-label {
11209
- margin-left: 0.5rem;
11130
+ .blue-menu-item-current-hidden {
11131
+ &:is(:where(.blue-menu-item):is(.current) *) {
11132
+ display: none !important;
11210
11133
  }
11211
11134
  }
11212
-
11213
- .blue-menu-item-wrapper {
11214
- display: contents;
11135
+ .blue-menu-item-default-hidden {
11136
+ &:is(:where(.blue-menu-item):is(:not(.current)) *) {
11137
+ display: none !important;
11138
+ }
11215
11139
  }
11216
11140
 
11217
- .blue-menu-item-dropdown > .blue-menu-item-wrapper > .blue-menu-item,
11218
- .blue-menu-item-dropdown > .blue-menu-item {
11219
- width: 100%;
11220
- }
11141
+ // @keyframes blue-menu-item-indicator-in-from-side {
11142
+ // from {
11143
+ // transform: translateX(-100%);
11144
+ // }
11145
+ // to {
11146
+ // transform: translateX(1);
11147
+ // }
11148
+ // }
11149
+
11150
+ // @keyframes blue-menu-item-indicator-in-from-below {
11151
+ // from {
11152
+ // transform: translateY(100%);
11153
+ // }
11154
+ // to {
11155
+ // transform: translateY(1);
11156
+ // }
11157
+ // }
11158
+
11159
+ // .blue-menu-item {
11160
+ // transition:
11161
+ // width 0.5s,
11162
+ // background-color 0.3s,
11163
+ // color 0.15s,
11164
+ // box-shadow 0.3s,
11165
+ // opacity 0.3s !important;
11166
+
11167
+ // @media (prefers-reduced-motion) {
11168
+ // transition: none !important;
11169
+ // }
11170
+
11171
+ // & {
11172
+ // border: none;
11173
+ // box-shadow: none;
11174
+ // background-image: none;
11175
+ // }
11176
+
11177
+ // &:focus {
11178
+ // box-shadow: none;
11179
+ // }
11180
+
11181
+ // &:focus-visible {
11182
+ // &,
11183
+ // &.active {
11184
+ // box-shadow: inset 0 0 0 0.25rem color-mix(in srgb, currentColor 15%, transparent);
11185
+ // }
11186
+ // }
11187
+ // }
11188
+
11189
+ // .blue-menu-item-icon {
11190
+ // display: inline-block;
11191
+
11192
+ // & > * {
11193
+ // display: block;
11194
+ // width: 1.5rem;
11195
+ // }
11196
+ // }
11197
+
11198
+ // .blue-menu-item-icon.iconForActive {
11199
+ // display: none;
11200
+ // }
11201
+
11202
+ // .blue-menu-item.active {
11203
+ // .blue-menu-item-icon.hasIconForActive {
11204
+ // display: none;
11205
+ // }
11206
+ // .blue-menu-item-icon.iconForActive {
11207
+ // display: inline-block;
11208
+ // }
11209
+ // }
11210
+
11211
+ // .blue-menu-item-dropdown {
11212
+ // margin-left: 1rem;
11213
+ // animation: blue-menu-item-dropdown 0.15s;
11214
+ // position: relative;
11215
+
11216
+ // @media (prefers-reduced-motion) {
11217
+ // animation-duration: 0s;
11218
+ // }
11219
+
11220
+ // &::before {
11221
+ // content: "";
11222
+ // position: absolute;
11223
+ // top: 0.125rem;
11224
+ // right: 0.125rem;
11225
+ // bottom: 0.125rem;
11226
+ // left: 0.125rem;
11227
+ // border-radius: $border-radius;
11228
+ // box-shadow: $box-shadow;
11229
+ // border: 1px solid color-mix(in srgb, currentColor 15%, transparent);
11230
+ // background-color: var(--blue-menu-item-dropdown-bg);
11231
+ // }
11232
+
11233
+ // &[popover] {
11234
+ // position: fixed;
11235
+ // margin: 0;
11236
+ // padding: 0;
11237
+ // z-index: 1000;
11238
+ // border: none;
11239
+ // background: transparent;
11240
+ // border-radius: calc(#{$border-radius} + 0.1rem);
11241
+ // box-shadow: $box-shadow;
11242
+ // }
11243
+ // }
11244
+
11245
+ // .blue-menu-item {
11246
+ // color: inherit;
11247
+ // width: auto;
11248
+ // height: $normal-size;
11249
+ // font-size: $bla-btn-font-size;
11250
+ // display: flex;
11251
+ // align-items: center;
11252
+ // border-color: transparent;
11253
+ // --bs-btn-padding-x: 0.437rem;
11254
+
11255
+ // &::before {
11256
+ // @include blue-menu-item-background();
11257
+ // }
11258
+
11259
+ // &[draggable] {
11260
+ // cursor: grab;
11261
+
11262
+ // &:active {
11263
+ // box-shadow: inset 0 0 0.25rem;
11264
+ // }
11265
+ // }
11266
+
11267
+ // &:hover,
11268
+ // &:active,
11269
+ // &.highlighted,
11270
+ // &:has(+ :popover-open) {
11271
+ // color: inherit;
11272
+ // border-color: transparent;
11273
+
11274
+ // &::before {
11275
+ // transform: scale(1);
11276
+ // opacity: 0.25;
11277
+ // }
11278
+ // }
11279
+
11280
+ // &.highlighted,
11281
+ // &:has(+ :popover-open) {
11282
+ // &::before {
11283
+ // opacity: 0.16;
11284
+ // }
11285
+ // }
11286
+
11287
+ // &:hover,
11288
+ // &:active {
11289
+ // &::before {
11290
+ // opacity: 0.25;
11291
+ // }
11292
+ // }
11293
+
11294
+ // &.active::after {
11295
+ // @include blue-menu-item-indicator();
11296
+ // }
11297
+
11298
+ // & > * + .blue-menu-item-label {
11299
+ // margin-left: 0.5rem;
11300
+ // }
11301
+ // }
11302
+
11303
+ // .blue-menu-item-wrapper {
11304
+ // display: contents;
11305
+ // }
11306
+
11307
+ // .blue-menu-item-dropdown > .blue-menu-item-wrapper > .blue-menu-item,
11308
+ // .blue-menu-item-dropdown > .blue-menu-item {
11309
+ // width: 100%;
11310
+ // }
11221
11311
 
11222
11312
  .blue-header-title {
11223
11313
  a {
@@ -11536,6 +11626,10 @@ body {
11536
11626
  }
11537
11627
  }
11538
11628
 
11629
+ .blue-btn-square {
11630
+ padding: calc(var(--bs-btn-padding-y) + #{$icon-link-underline-offset});
11631
+ }
11632
+
11539
11633
  // Inspired by Bootstrap's button system but extended with more variants
11540
11634
 
11541
11635
  // Soft buttons
@@ -12018,6 +12112,12 @@ dialog.blue-modal:has(.offcanvas-start) {
12018
12112
  grid-area: side;
12019
12113
  overflow: auto;
12020
12114
  background: inherit;
12115
+ scrollbar-color: transparent transparent;
12116
+
12117
+ &:hover,
12118
+ &:focus-within {
12119
+ scrollbar-color: color-mix(in srgb, currentColor 50%, transparent) transparent;
12120
+ }
12021
12121
  }
12022
12122
 
12023
12123
  @media (width < 64rem) {
@@ -12053,6 +12153,7 @@ dialog.blue-modal:has(.offcanvas-start) {
12053
12153
  margin-left: auto;
12054
12154
  margin-right: auto;
12055
12155
  overflow: auto;
12156
+ scrollbar-color: color-mix(in srgb, currentColor 50%, transparent) transparent;
12056
12157
  background-color: rgba(var(--bs-body-bg-rgb), var(--bs-bg-opacity, 1));
12057
12158
  color: rgba(var(--bs-body-color-rgb), var(--bs-text-opacity, 1));
12058
12159
  box-shadow: var(--bs-box-shadow-sm);
@@ -12096,8 +12197,7 @@ dialog.blue-modal:has(.offcanvas-start) {
12096
12197
  transition: transform 0.2s;
12097
12198
  }
12098
12199
 
12099
- &[open] > summary > .blue-collapse-header > .blue-collapse-chevron,
12100
- &[open] > summary > .blue-collapse-chevron {
12200
+ &[open] > summary .blue-collapse-chevron {
12101
12201
  --blue-collapse-chevron-rotate: 90deg;
12102
12202
  transform: rotate(var(--blue-collapse-chevron-rotate));
12103
12203
  }
@@ -12128,6 +12228,12 @@ dialog.blue-modal:has(.offcanvas-start) {
12128
12228
  }
12129
12229
  }
12130
12230
 
12231
+ .blue-collapse-indent {
12232
+ // 0.5em is half of icon width
12233
+ --margin-inline-start: calc(#{$input-btn-padding-x} + 0.5em + #{$input-btn-border-width});
12234
+ margin-inline-start: var(--margin-inline-start);
12235
+ }
12236
+
12131
12237
  // Let's you group a collapse together with another UI element like a button that should come before the collapse summary.
12132
12238
  .blue-collapse-group {
12133
12239
  display: grid;
@@ -12142,7 +12248,7 @@ dialog.blue-modal:has(.offcanvas-start) {
12142
12248
  grid-column: 2;
12143
12249
 
12144
12250
  & + * {
12145
- width: calc(100% + 1rem - 2px);
12251
+ width: calc(100% + var(--margin-inline-start) - 3px);
12146
12252
  }
12147
12253
  }
12148
12254
  }
@@ -12186,39 +12292,28 @@ dialog.blue-modal:has(.offcanvas-start) {
12186
12292
  position: absolute;
12187
12293
  }
12188
12294
 
12189
- .blue-anchor {
12190
- anchor-name: var(--blue-anchor-name, --anchor-1);
12191
- }
12192
-
12193
- @position-try --blue-anchored-below {
12194
- top: anchor(var(--blue-anchor-name, --anchor-1) bottom);
12195
- bottom: unset;
12196
- }
12197
-
12198
- @position-try --blue-anchored-above {
12199
- bottom: anchor(var(--blue-anchor-name, --anchor-1) top);
12200
- top: unset;
12201
- }
12202
-
12203
12295
  .blue-anchored {
12204
- top: anchor(var(--blue-anchor-name, --anchor-1) bottom);
12205
- position-try: --blue-anchored-below, --blue-anchored-above;
12296
+ position-try: flip-inline;
12297
+ position-area: bottom span-right;
12298
+ position: fixed;
12299
+
12300
+ // Normalize popover
12301
+ &[popover] {
12302
+ margin: 0;
12303
+ padding: 0;
12304
+ border: 0;
12305
+ }
12206
12306
  }
12207
12307
 
12208
12308
  .blue-anchored-start {
12209
- left: anchor(var(--blue-anchor-name, --anchor-1) left);
12309
+ position-area: bottom span-right;
12210
12310
  }
12211
12311
 
12212
12312
  .blue-anchored-end {
12213
- left: anchor(var(--blue-anchor-name, --anchor-1) right);
12214
- translate: -100%;
12313
+ position-area: bottom span-left;
12215
12314
  }
12216
12315
 
12217
12316
  @supports not (anchor-name: --anchor-1) {
12218
- .blue-anchored-end {
12219
- translate: none;
12220
- }
12221
-
12222
12317
  .blue-anchored-fallback {
12223
12318
  left: 50%;
12224
12319
  top: 50%;
@@ -12234,6 +12329,12 @@ dialog.blue-modal:has(.offcanvas-start) {
12234
12329
  }
12235
12330
  }
12236
12331
 
12332
+ .btn:has(+ :popover-open):not(:focus-visible):not(.blue-menu-item) {
12333
+ --bs-focus-ring-color: rgba(var(--bs-secondary-rgb), 0.25);
12334
+ box-shadow: var(--bs-focus-ring-x, 0) var(--bs-focus-ring-y, 0) var(--bs-focus-ring-blur, 0)
12335
+ var(--bs-focus-ring-width) var(--bs-focus-ring-color);
12336
+ }
12337
+
12237
12338
  .blue-scrollspy {
12238
12339
  --#{$prefix}nav-link-padding-x: #{$nav-link-padding-x * 0.5};
12239
12340
  --#{$prefix}nav-link-padding-y: #{$nav-link-padding-y * 0.5};
@@ -12268,9 +12369,11 @@ dialog.blue-modal:has(.offcanvas-start) {
12268
12369
  (var(--#{$prefix}nav-link-font-size) * var(--#{$prefix}body-line-height))
12269
12370
  );
12270
12371
  margin-bottom: 0.25rem;
12372
+ padding-inline: var(--blue-scrollspy-marker-group-padding-inline);
12373
+ gap: var(--blue-scrollspy-marker-group-gap);
12271
12374
  }
12272
12375
 
12273
- & > section {
12376
+ & > :is(section, .blue-scrollspy-group) {
12274
12377
  &::scroll-marker {
12275
12378
  content: attr(aria-label);
12276
12379
 
@@ -12414,13 +12517,8 @@ body.modal-open .dxbl-popup-cell[style="z-index: 1050;"] {
12414
12517
 
12415
12518
  :root {
12416
12519
  --bs-font-sans-serif: Inter, #{$font-family-sans-serif};
12417
- font-feature-settings:
12418
- "liga" 1,
12419
- "calt" 1,
12420
- "cv05" 1,
12421
- "cv07" 1,
12422
- "tnum" 1,
12423
- "zero" 1;
12520
+ --blue-font-feature-settings: "liga" 1, "calt" 1, "cv05" 1, "cv07" 1, "tnum" 1, "zero" 1;
12521
+ font-feature-settings: var(--blue-font-feature-settings);
12424
12522
  font-size: 14px;
12425
12523
  }
12426
12524
  @supports (font-variation-settings: normal) {
@@ -12437,3 +12535,9 @@ textarea {
12437
12535
  font-feature-settings: inherit;
12438
12536
  }
12439
12537
 
12538
+
12539
+ *,
12540
+ *:before,
12541
+ *:after {
12542
+ corner-shape: var(--blue-corner-shape);
12543
+ }