blue-web 1.20.0 → 1.21.1

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.20.0 (https://bruegmann.github.io/blue-web)
2
+ * Blue Web v1.21.1 (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
@@ -3757,6 +3758,7 @@ $corner-shape: #{round} !default;
3757
3758
  --blue-sidebar-bg: #{$sidebar-bg};
3758
3759
  --blue-header-bg: #{$header-bg};
3759
3760
 
3761
+ --blue-header-height: 3.429rem;
3760
3762
  --blue-header-color: #{$header-color};
3761
3763
  --blue-action-link-bg-color: var(--blue-theme);
3762
3764
  --blue-menu-item-indicator-bg: #{$sidebar-indicator-color};
@@ -10727,12 +10729,11 @@ textarea {
10727
10729
 
10728
10730
 
10729
10731
 
10730
- // Custom added utilities for Blue Web
10732
+ // Enable responsive for position
10731
10733
  $utilities: map-merge(
10732
10734
  $utilities,
10733
10735
  (
10734
- "position":
10735
- map-merge(
10736
+ "position": map-merge(
10736
10737
  map-get($utilities, "position"),
10737
10738
  (
10738
10739
  responsive: true
@@ -10863,37 +10864,18 @@ body {
10863
10864
  }
10864
10865
  }
10865
10866
 
10866
- .sign-in-screen {
10867
- padding-top: $normal-size;
10868
-
10869
- .sign-in-container {
10870
- animation: enabledBlueAppPage 0.5s;
10871
-
10872
- @media (prefers-reduced-motion) {
10873
- animation-duration: 0s;
10874
- }
10875
- }
10876
-
10877
- @media screen and (min-width: 768px) {
10878
- .sign-in-container {
10879
- padding: var(--blue-sign-in-container-md-padding, 0 calc(50% - 18rem));
10880
- width: var(--blue-sign-in-container-md-width, auto);
10881
- }
10882
- }
10883
- }
10867
+ // .blue-header-title.sidebar {
10868
+ // width: $bla-sidebar-width;
10869
+ // padding-left: calc(#{$normal-size} + #{$spacer});
10870
+ // transform: translateX(-100%);
10871
+ // transition: transform 0.4s;
10872
+ // background: var(--blue-sidebar-bg);
10873
+ // color: $sidebar-color;
10884
10874
 
10885
- .blue-header-title.sidebar {
10886
- width: $bla-sidebar-width;
10887
- padding-left: calc(#{$normal-size} + #{$spacer});
10888
- transform: translateX(-100%);
10889
- transition: transform 0.4s;
10890
- background: var(--blue-sidebar-bg);
10891
- color: $sidebar-color;
10892
-
10893
- @media (prefers-reduced-motion) {
10894
- transition: none;
10895
- }
10896
- }
10875
+ // @media (prefers-reduced-motion) {
10876
+ // transition: none;
10877
+ // }
10878
+ // }
10897
10879
 
10898
10880
  .blue-scroll-shadow {
10899
10881
  @include scroll-shadow(var(--bs-body-bg));
@@ -10906,6 +10888,20 @@ body {
10906
10888
  margin: 0 !important;
10907
10889
  }
10908
10890
 
10891
+ // Shows empty message if the element has no children.
10892
+ // Can be used for lists and such.
10893
+ // For localization you should override CSS variable `--message` dynamically.
10894
+ .blue-empty-message {
10895
+ --message: "No items found.";
10896
+ &:empty::before {
10897
+ content: var(--message);
10898
+ color: var(--bs-secondary-color);
10899
+ display: flex;
10900
+ padding: 1rem;
10901
+ justify-content: center;
10902
+ }
10903
+ }
10904
+
10909
10905
  .blue-loading {
10910
10906
  background-color: $primary;
10911
10907
  }
@@ -11064,14 +11060,16 @@ body {
11064
11060
  }
11065
11061
 
11066
11062
  &::before {
11063
+ --visual-padding: 0.125rem;
11064
+
11067
11065
  content: "";
11068
11066
  position: absolute;
11069
- top: 0.125rem;
11070
- right: 0.125rem;
11071
- bottom: 0.125rem;
11072
- left: 0.125rem;
11067
+ top: var(--visual-padding);
11068
+ right: var(--visual-padding);
11069
+ bottom: var(--visual-padding);
11070
+ left: var(--visual-padding);
11073
11071
  background-color: currentColor;
11074
- border-radius: $border-radius;
11072
+ border-radius: var(--bs-btn-border-radius);
11075
11073
  transform: scale(0.9);
11076
11074
  opacity: 0;
11077
11075
  transition: all 0.2s;
@@ -11123,177 +11121,6 @@ body {
11123
11121
  }
11124
11122
  }
11125
11123
 
11126
- // @keyframes blue-menu-item-indicator-in-from-side {
11127
- // from {
11128
- // transform: translateX(-100%);
11129
- // }
11130
- // to {
11131
- // transform: translateX(1);
11132
- // }
11133
- // }
11134
-
11135
- // @keyframes blue-menu-item-indicator-in-from-below {
11136
- // from {
11137
- // transform: translateY(100%);
11138
- // }
11139
- // to {
11140
- // transform: translateY(1);
11141
- // }
11142
- // }
11143
-
11144
- // .blue-menu-item {
11145
- // transition:
11146
- // width 0.5s,
11147
- // background-color 0.3s,
11148
- // color 0.15s,
11149
- // box-shadow 0.3s,
11150
- // opacity 0.3s !important;
11151
-
11152
- // @media (prefers-reduced-motion) {
11153
- // transition: none !important;
11154
- // }
11155
-
11156
- // & {
11157
- // border: none;
11158
- // box-shadow: none;
11159
- // background-image: none;
11160
- // }
11161
-
11162
- // &:focus {
11163
- // box-shadow: none;
11164
- // }
11165
-
11166
- // &:focus-visible {
11167
- // &,
11168
- // &.active {
11169
- // box-shadow: inset 0 0 0 0.25rem color-mix(in srgb, currentColor 15%, transparent);
11170
- // }
11171
- // }
11172
- // }
11173
-
11174
- // .blue-menu-item-icon {
11175
- // display: inline-block;
11176
-
11177
- // & > * {
11178
- // display: block;
11179
- // width: 1.5rem;
11180
- // }
11181
- // }
11182
-
11183
- // .blue-menu-item-icon.iconForActive {
11184
- // display: none;
11185
- // }
11186
-
11187
- // .blue-menu-item.active {
11188
- // .blue-menu-item-icon.hasIconForActive {
11189
- // display: none;
11190
- // }
11191
- // .blue-menu-item-icon.iconForActive {
11192
- // display: inline-block;
11193
- // }
11194
- // }
11195
-
11196
- // .blue-menu-item-dropdown {
11197
- // margin-left: 1rem;
11198
- // animation: blue-menu-item-dropdown 0.15s;
11199
- // position: relative;
11200
-
11201
- // @media (prefers-reduced-motion) {
11202
- // animation-duration: 0s;
11203
- // }
11204
-
11205
- // &::before {
11206
- // content: "";
11207
- // position: absolute;
11208
- // top: 0.125rem;
11209
- // right: 0.125rem;
11210
- // bottom: 0.125rem;
11211
- // left: 0.125rem;
11212
- // border-radius: $border-radius;
11213
- // box-shadow: $box-shadow;
11214
- // border: 1px solid color-mix(in srgb, currentColor 15%, transparent);
11215
- // background-color: var(--blue-menu-item-dropdown-bg);
11216
- // }
11217
-
11218
- // &[popover] {
11219
- // position: fixed;
11220
- // margin: 0;
11221
- // padding: 0;
11222
- // z-index: 1000;
11223
- // border: none;
11224
- // background: transparent;
11225
- // border-radius: calc(#{$border-radius} + 0.1rem);
11226
- // box-shadow: $box-shadow;
11227
- // }
11228
- // }
11229
-
11230
- // .blue-menu-item {
11231
- // color: inherit;
11232
- // width: auto;
11233
- // height: $normal-size;
11234
- // font-size: $bla-btn-font-size;
11235
- // display: flex;
11236
- // align-items: center;
11237
- // border-color: transparent;
11238
- // --bs-btn-padding-x: 0.437rem;
11239
-
11240
- // &::before {
11241
- // @include blue-menu-item-background();
11242
- // }
11243
-
11244
- // &[draggable] {
11245
- // cursor: grab;
11246
-
11247
- // &:active {
11248
- // box-shadow: inset 0 0 0.25rem;
11249
- // }
11250
- // }
11251
-
11252
- // &:hover,
11253
- // &:active,
11254
- // &.highlighted,
11255
- // &:has(+ :popover-open) {
11256
- // color: inherit;
11257
- // border-color: transparent;
11258
-
11259
- // &::before {
11260
- // transform: scale(1);
11261
- // opacity: 0.25;
11262
- // }
11263
- // }
11264
-
11265
- // &.highlighted,
11266
- // &:has(+ :popover-open) {
11267
- // &::before {
11268
- // opacity: 0.16;
11269
- // }
11270
- // }
11271
-
11272
- // &:hover,
11273
- // &:active {
11274
- // &::before {
11275
- // opacity: 0.25;
11276
- // }
11277
- // }
11278
-
11279
- // &.active::after {
11280
- // @include blue-menu-item-indicator();
11281
- // }
11282
-
11283
- // & > * + .blue-menu-item-label {
11284
- // margin-left: 0.5rem;
11285
- // }
11286
- // }
11287
-
11288
- // .blue-menu-item-wrapper {
11289
- // display: contents;
11290
- // }
11291
-
11292
- // .blue-menu-item-dropdown > .blue-menu-item-wrapper > .blue-menu-item,
11293
- // .blue-menu-item-dropdown > .blue-menu-item {
11294
- // width: 100%;
11295
- // }
11296
-
11297
11124
  .blue-header-title {
11298
11125
  a {
11299
11126
  color: inherit;
@@ -11345,7 +11172,7 @@ body {
11345
11172
  var(--bs-btn-padding-x, 0.75rem) + var(--bs-btn-border-width, 1px)
11346
11173
  );
11347
11174
 
11348
- max-height: $normal-size;
11175
+ max-height: var(--blue-header-height);
11349
11176
  overflow: hidden;
11350
11177
 
11351
11178
  .blue-actions-menu {
@@ -11687,6 +11514,11 @@ body {
11687
11514
  $text-color: color-contrast($value);
11688
11515
  }
11689
11516
 
11517
+ // More contrast for secondary plain button
11518
+ @if $color == "secondary" {
11519
+ $text-color: shade-color($value, 60%);
11520
+ }
11521
+
11690
11522
  @include button-variant(
11691
11523
  transparent,
11692
11524
  transparent,
@@ -11713,6 +11545,11 @@ body {
11713
11545
  $text-color: color-contrast($value);
11714
11546
  }
11715
11547
 
11548
+ // More contrast for secondary plain button
11549
+ @if $color == "secondary" {
11550
+ $text-color: tint-color($value, 60%);
11551
+ }
11552
+
11716
11553
  @include button-variant(
11717
11554
  transparent,
11718
11555
  transparent,
@@ -11997,17 +11834,13 @@ dialog.blue-modal:has(.offcanvas-start) {
11997
11834
  --drawer-side-shadow:
11998
11835
  rgba(0, 0, 0, 0) 0px 0px 0px 0px, rgba(0, 0, 0, 0) 0px 0px 0px 0px, rgba(0, 0, 0, 0) 0px 0px 0px 0px,
11999
11836
  rgba(0, 0, 0, 0) 0px 0px 0px 0px, rgba(0, 0, 0, 0.25) 0px 25px 50px -12px;
12000
- --toggler-size: calc(
12001
- var(--bs-btn-border-width, 1px) + var(--bs-btn-padding-y, 0.375rem) +
12002
- (var(--bs-btn-font-size, 1rem) * var(--bs-btn-line-height, 1.5)) + var(--bs-btn-padding-y, 0.375rem) +
12003
- var(--bs-btn-border-width, 1px)
12004
- );
12005
11837
  --side-width: 18rem;
12006
11838
  --base-z-index: 0;
12007
11839
 
12008
11840
  --base-z-index: 500;
12009
11841
  --side-width: var(--blue-sidebar-width);
12010
- --toggler-size: var(--blue-menu-item-height);
11842
+ --toggler-width: 2.714rem;
11843
+ --toggler-height: var(--blue-header-height);
12011
11844
 
12012
11845
  --blue-menu-item-indicator-bg: #{color-contrast($sidebar-bg, $sidebar-indicator-color)};
12013
11846
  --bs-link-hover-color: #{color-contrast($sidebar-bg, $link-hover-color)};
@@ -12016,15 +11849,15 @@ dialog.blue-modal:has(.offcanvas-start) {
12016
11849
  position: relative;
12017
11850
  display: grid;
12018
11851
 
12019
- grid-template-rows: var(--toggler-size) auto;
11852
+ grid-template-rows: var(--toggler-height) auto;
12020
11853
  grid-template-areas: "header" "main";
12021
11854
 
12022
11855
  color: var(--blue-sidebar-color);
12023
11856
  background-color: var(--blue-sidebar-bg);
12024
11857
 
12025
11858
  &:has(> .blue-layout-toggle) {
12026
- grid-template-columns: 0 0 var(--toggler-size) calc(var(--side-width) - var(--toggler-size)) 1fr;
12027
- grid-template-rows: var(--toggler-size) auto;
11859
+ grid-template-columns: 0 0 var(--toggler-width) calc(var(--side-width) - var(--toggler-width)) 1fr;
11860
+ grid-template-rows: var(--toggler-height) auto;
12028
11861
  grid-template-areas:
12029
11862
  "state . toggle header header"
12030
11863
  ". side main main main";
@@ -12088,6 +11921,7 @@ dialog.blue-modal:has(.offcanvas-start) {
12088
11921
 
12089
11922
  display: flex;
12090
11923
  justify-content: space-between;
11924
+ align-items: center;
12091
11925
  position: relative;
12092
11926
  z-index: var(--blue-layout-header-z-index, 4);
12093
11927
  --blue-menu-item-dropdown-bg: var(--blue-sidebar-bg);
@@ -12097,6 +11931,12 @@ dialog.blue-modal:has(.offcanvas-start) {
12097
11931
  grid-area: side;
12098
11932
  overflow: auto;
12099
11933
  background: inherit;
11934
+ scrollbar-color: transparent transparent;
11935
+
11936
+ &:hover,
11937
+ &:focus-within {
11938
+ scrollbar-color: color-mix(in srgb, currentColor 50%, transparent) transparent;
11939
+ }
12100
11940
  }
12101
11941
 
12102
11942
  @media (width < 64rem) {
@@ -12132,6 +11972,7 @@ dialog.blue-modal:has(.offcanvas-start) {
12132
11972
  margin-left: auto;
12133
11973
  margin-right: auto;
12134
11974
  overflow: auto;
11975
+ scrollbar-color: color-mix(in srgb, currentColor 50%, transparent) transparent;
12135
11976
  background-color: rgba(var(--bs-body-bg-rgb), var(--bs-bg-opacity, 1));
12136
11977
  color: rgba(var(--bs-body-color-rgb), var(--bs-text-opacity, 1));
12137
11978
  box-shadow: var(--bs-box-shadow-sm);
@@ -12307,6 +12148,12 @@ dialog.blue-modal:has(.offcanvas-start) {
12307
12148
  }
12308
12149
  }
12309
12150
 
12151
+ .btn:has(+ :popover-open):not(:focus-visible):not(.blue-menu-item) {
12152
+ --bs-focus-ring-color: rgba(var(--bs-secondary-rgb), 0.25);
12153
+ box-shadow: var(--bs-focus-ring-x, 0) var(--bs-focus-ring-y, 0) var(--bs-focus-ring-blur, 0)
12154
+ var(--bs-focus-ring-width) var(--bs-focus-ring-color);
12155
+ }
12156
+
12310
12157
  .blue-scrollspy {
12311
12158
  --#{$prefix}nav-link-padding-x: #{$nav-link-padding-x * 0.5};
12312
12159
  --#{$prefix}nav-link-padding-y: #{$nav-link-padding-y * 0.5};
@@ -12336,16 +12183,23 @@ dialog.blue-modal:has(.offcanvas-start) {
12336
12183
 
12337
12184
  &::scroll-marker-group {
12338
12185
  display: flex;
12186
+ overflow-x: auto;
12187
+ overflow-y: hidden;
12188
+ -ms-overflow-style: none;
12189
+ scrollbar-width: none;
12339
12190
  min-height: calc(
12340
12191
  (var(--#{$prefix}nav-link-padding-y) + var(--#{$prefix}nav-tabs-border-width)) * 2 +
12341
12192
  (var(--#{$prefix}nav-link-font-size) * var(--#{$prefix}body-line-height))
12342
12193
  );
12343
12194
  margin-bottom: 0.25rem;
12195
+ padding-inline: var(--blue-scrollspy-marker-group-padding-inline);
12196
+ gap: var(--blue-scrollspy-marker-group-gap);
12344
12197
  }
12345
12198
 
12346
- & > section {
12199
+ & > :is(section, .blue-scrollspy-group) {
12347
12200
  &::scroll-marker {
12348
12201
  content: attr(aria-label);
12202
+ white-space: nowrap;
12349
12203
 
12350
12204
  font-size: var(--#{$prefix}nav-link-font-size);
12351
12205
  box-sizing: border-box;
@@ -12379,6 +12233,29 @@ dialog.blue-modal:has(.offcanvas-start) {
12379
12233
  }
12380
12234
  }
12381
12235
 
12236
+ .sign-in-screen {
12237
+ padding-top: var(--blue-header-height);
12238
+
12239
+ &:last-child {
12240
+ padding-bottom: var(--blue-header-height);
12241
+ }
12242
+
12243
+ .sign-in-container {
12244
+ animation: enabledBlueAppPage 0.5s;
12245
+
12246
+ @media (prefers-reduced-motion) {
12247
+ animation-duration: 0s;
12248
+ }
12249
+ }
12250
+
12251
+ @media screen and (min-width: 768px) {
12252
+ .sign-in-container {
12253
+ padding: var(--blue-sign-in-container-md-padding, 0 calc(50% - 18rem));
12254
+ width: var(--blue-sign-in-container-md-width, auto);
12255
+ }
12256
+ }
12257
+ }
12258
+
12382
12259
 
12383
12260
  /* Make DevExpress components look more like Bootstrap/Blue */
12384
12261
  [class^="dxbl-"] {
@@ -12386,7 +12263,7 @@ dialog.blue-modal:has(.offcanvas-start) {
12386
12263
  --dxbl-text-edit-padding-x: 0.75rem !important;
12387
12264
  --dxbl-text-edit-padding-y: 0.375rem !important;
12388
12265
  --dxbl-text-edit-line-height: 1.5 !important;
12389
- --dxbl-text-edit-focus-shadow-spread: 0.25rem !important;
12266
+ --dxbl-text-edit-focus-shadow-spread: #{$focus-ring-width} !important;
12390
12267
  --dxbl-listbox-border-radius: var(--bs-border-radius) !important;
12391
12268
  --dxbl-toolbar-font-size: var(--bs-body-font-size) !important;
12392
12269
  --dxbl-toolbar-btn-border-radius: var(--bs-border-radius) !important;