@wpmoo/ui 1.0.0-rc.9 → 1.0.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.
Files changed (93) hide show
  1. package/ASSET_LICENSE.md +1 -1
  2. package/LICENSE +28 -0
  3. package/README.md +31 -3
  4. package/certification.json +2 -1
  5. package/dist/assets/css/moo-ui.css +381 -22
  6. package/dist/assets/css/moo-ui.min.css +10 -31
  7. package/dist/assets/css/moo.css +373 -21
  8. package/dist/assets/css/moo.min.css +10 -32
  9. package/dist/js/chart.js +23 -21
  10. package/dist/js/chart.min.js +5 -5
  11. package/dist/js/combobox.js +18 -65
  12. package/dist/js/context-menu.js +16 -68
  13. package/dist/js/datatable.js +38 -21
  14. package/dist/js/datepicker.js +3 -2
  15. package/dist/js/datepicker.min.js +4 -3
  16. package/dist/js/moo-ui.js +158 -15400
  17. package/dist/js/moo-ui.min.js +3 -23
  18. package/dist/js/sheet.js +46 -0
  19. package/dist/js/sidebar.js +3 -2
  20. package/dist/js/slider.js +12 -47
  21. package/dist/js/state.js +15 -41
  22. package/dist/release-manifest.json +4 -4
  23. package/package.json +3 -1
  24. package/scss/_components.scss +2 -2
  25. package/scss/_config.scss +15 -21
  26. package/scss/_settings.scss +0 -3
  27. package/scss/components/_accordion.scss +1 -12
  28. package/scss/components/_alert.scss +1 -12
  29. package/scss/components/_avatar.scss +1 -16
  30. package/scss/components/_badge.scss +1 -0
  31. package/scss/components/_breadcrumb.scss +1 -12
  32. package/scss/components/_button.scss +1 -29
  33. package/scss/components/_button_group.scss +1 -25
  34. package/scss/components/_card.scss +1 -29
  35. package/scss/components/_checkbox.scss +1 -38
  36. package/scss/components/_close_button.scss +1 -9
  37. package/scss/components/_collapsible.scss +1 -0
  38. package/scss/components/_combobox.scss +1 -6
  39. package/scss/components/_context-menu.scss +1 -11
  40. package/scss/components/_datatable.scss +46 -85
  41. package/scss/components/_datepicker.scss +1 -0
  42. package/scss/components/_dialog.scss +1 -14
  43. package/scss/components/_dropdown.scss +5 -51
  44. package/scss/components/_field.scss +1 -40
  45. package/scss/components/_input.scss +1 -5
  46. package/scss/components/_input_group.scss +1 -51
  47. package/scss/components/_kbd.scss +1 -0
  48. package/scss/components/_menubar.scss +1 -0
  49. package/scss/components/_navigation.scss +76 -6
  50. package/scss/components/_pagination.scss +1 -13
  51. package/scss/components/_popover.scss +1 -22
  52. package/scss/components/_progress.scss +1 -3
  53. package/scss/components/_radio_group.scss +105 -6
  54. package/scss/components/_search_trigger.scss +1 -2
  55. package/scss/components/_select.scss +1 -0
  56. package/scss/components/_separator.scss +1 -6
  57. package/scss/components/_sheet.scss +1 -17
  58. package/scss/components/_sidebar.scss +1 -2
  59. package/scss/components/_skeleton.scss +1 -8
  60. package/scss/components/_slider.scss +1 -2
  61. package/scss/components/_spinner.scss +1 -7
  62. package/scss/components/_switch.scss +1 -4
  63. package/scss/components/_table.scss +1 -2
  64. package/scss/components/_tabs.scss +1 -24
  65. package/scss/components/_textarea.scss +1 -0
  66. package/scss/components/_toast.scss +1 -4
  67. package/scss/components/_toggle_group.scss +1 -3
  68. package/scss/components/_tooltip.scss +1 -20
  69. package/scss/components/sidebar/_base.scss +0 -7
  70. package/scss/components/sidebar/_collapsed.scss +0 -6
  71. package/scss/components/sidebar/_identity.scss +0 -1
  72. package/scss/components/sidebar/_menus.scss +0 -17
  73. package/scss/foundations/_backdrop.scss +0 -26
  74. package/scss/foundations/_focus.scss +0 -56
  75. package/scss/foundations/_scope.scss +14 -0
  76. package/scss/layouts/_app.scss +0 -6
  77. package/scss/layouts/_page_grid.scss +0 -3
  78. package/scss/layouts/app/sidebar/_base.scss +0 -33
  79. package/scss/layouts/app/sidebar/_default.scss +0 -6
  80. package/scss/layouts/app/sidebar/_floating.scss +0 -11
  81. package/scss/layouts/app/sidebar/_inset.scss +0 -2
  82. package/scss/mixins/_banner.scss +9 -3
  83. package/scss/moo-core.scss +3 -6
  84. package/scss/moo-ui.scss +9 -5
  85. package/scss/settings/_bootstrap_overrides.scss +0 -8
  86. package/scss/settings/_component_variables.scss +4 -266
  87. package/scss/settings/_forms.scss +0 -37
  88. package/scss/settings/_palette.scss +0 -42
  89. package/scss/themes/_root.scss +3 -0
  90. package/scss/themes/_standalone.scss +0 -2
  91. package/scss/themes/_theme.scss +3 -2
  92. package/scss/utilities/_background_color.scss +18 -0
  93. package/scss/utilities/_border.scss +4 -0
@@ -1,8 +1,16 @@
1
1
  /*!
2
- * Bootstrap v5.3.3 (https://getbootstrap.com/)
3
- * Copyright 2011-2024 The Bootstrap Authors
4
- * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
5
- */
2
+ * Moo UI v1.0.0 (https://wpmoo.org/)
3
+ * Copyright 2026 WPMoo Authors
4
+ * Licensed under MIT (https://github.com/wpmoo-org/ui/blob/main/LICENSE)
5
+ *
6
+ * Bootstrap v5.3.3 (https://getbootstrap.com/)
7
+ * Copyright 2011-2024 The Bootstrap Authors
8
+ * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
9
+ */
10
+
11
+ /* Bootstrap configuration */
12
+
13
+ /* Bootstrap layout and standalone-only components */
6
14
  :root,
7
15
  [data-bs-theme="light"] {
8
16
  --bs-blue: #0d6efd;
@@ -180,6 +188,7 @@
180
188
  --bs-form-invalid-border-color: #ea868f;
181
189
  }
182
190
 
191
+ /* Theme tokens */
183
192
  .moo-ui[data-bs-theme] {
184
193
  --bs-blue: #0d6efd;
185
194
  --bs-indigo: #6610f2;
@@ -261,7 +270,13 @@
261
270
  --moo-chart-4: #3f3f46;
262
271
  --moo-chart-5: #27272a;
263
272
  --moo-heading-font-family: var(--bs-body-font-family);
273
+ --moo-small-font-size: 0.75rem;
274
+ --moo-paragraph-margin-top: 0;
275
+ --moo-paragraph-margin-bottom: 1rem;
264
276
  font-family: var(--bs-body-font-family);
277
+ font-size: var(--bs-body-font-size);
278
+ font-weight: var(--bs-body-font-weight);
279
+ line-height: var(--bs-body-line-height);
265
280
  }
266
281
 
267
282
  .moo-ui[data-bs-theme="light"] {
@@ -442,6 +457,7 @@ body > .moo-ui[data-bs-theme]:not([data-moo-overlay-host]) {
442
457
  min-block-size: 100dvh;
443
458
  }
444
459
 
460
+ /* Base styles and typography */
445
461
  *,
446
462
  *::before,
447
463
  *::after {
@@ -1010,6 +1026,7 @@ progress {
1010
1026
  color: var(--bs-secondary-color);
1011
1027
  }
1012
1028
 
1029
+ /* Containers and grid */
1013
1030
  .container,
1014
1031
  .container-fluid,
1015
1032
  .container-xxl,
@@ -4056,6 +4073,7 @@ progress {
4056
4073
  }
4057
4074
  }
4058
4075
 
4076
+ /* Bootstrap helpers */
4059
4077
  .clearfix::after {
4060
4078
  display: block;
4061
4079
  clear: both;
@@ -4368,6 +4386,7 @@ progress {
4368
4386
  opacity: 0.25;
4369
4387
  }
4370
4388
 
4389
+ /* Bootstrap utilities */
4371
4390
  .align-baseline {
4372
4391
  vertical-align: baseline !important;
4373
4392
  }
@@ -6012,7 +6031,7 @@ progress {
6012
6031
 
6013
6032
  .bg-body-secondary {
6014
6033
  --bs-bg-opacity: 1;
6015
- background-color: rgba(var(--bs-secondary-bg-rgb), var(--bs-bg-opacity)) !important;
6034
+ background-color: rgb(from var(--bs-secondary-bg) r g b / var(--bs-bg-opacity)) !important;
6016
6035
  }
6017
6036
 
6018
6037
  .bg-body-tertiary {
@@ -9286,6 +9305,8 @@ progress {
9286
9305
  }
9287
9306
 
9288
9307
  @scope (.moo-ui) to (:where(.moo-ui[data-bs-theme="light"], .moo-ui[data-bs-theme="dark"])) {
9308
+
9309
+ /* Bootstrap Components */
9289
9310
  .table {
9290
9311
  --bs-table-color-type: initial;
9291
9312
  --bs-table-bg-type: initial;
@@ -11950,6 +11971,7 @@ progress {
11950
11971
  border-width: var(--bs-tooltip-arrow-height) calc(var(--bs-tooltip-arrow-width) * .5) 0;
11951
11972
  border-top-color: var(--bs-tooltip-bg);
11952
11973
  }
11974
+
11953
11975
  /* rtl:begin:ignore */
11954
11976
  .bs-tooltip-end .tooltip-arrow, .bs-tooltip-auto[data-popper-placement^="right"] .tooltip-arrow {
11955
11977
  left: calc(-1 * var(--bs-tooltip-arrow-height));
@@ -11961,6 +11983,7 @@ progress {
11961
11983
  border-width: calc(var(--bs-tooltip-arrow-width) * .5) var(--bs-tooltip-arrow-height) calc(var(--bs-tooltip-arrow-width) * .5) 0;
11962
11984
  border-right-color: var(--bs-tooltip-bg);
11963
11985
  }
11986
+
11964
11987
  /* rtl:end:ignore */
11965
11988
  .bs-tooltip-bottom .tooltip-arrow, .bs-tooltip-auto[data-popper-placement^="bottom"] .tooltip-arrow {
11966
11989
  top: calc(-1 * var(--bs-tooltip-arrow-height));
@@ -11970,6 +11993,7 @@ progress {
11970
11993
  border-width: 0 calc(var(--bs-tooltip-arrow-width) * .5) var(--bs-tooltip-arrow-height);
11971
11994
  border-bottom-color: var(--bs-tooltip-bg);
11972
11995
  }
11996
+
11973
11997
  /* rtl:begin:ignore */
11974
11998
  .bs-tooltip-start .tooltip-arrow, .bs-tooltip-auto[data-popper-placement^="left"] .tooltip-arrow {
11975
11999
  right: calc(-1 * var(--bs-tooltip-arrow-height));
@@ -11981,6 +12005,7 @@ progress {
11981
12005
  border-width: calc(var(--bs-tooltip-arrow-width) * .5) 0 calc(var(--bs-tooltip-arrow-width) * .5) var(--bs-tooltip-arrow-height);
11982
12006
  border-left-color: var(--bs-tooltip-bg);
11983
12007
  }
12008
+
11984
12009
  /* rtl:end:ignore */
11985
12010
  .tooltip-inner {
11986
12011
  max-width: var(--bs-tooltip-max-width);
@@ -12067,6 +12092,7 @@ progress {
12067
12092
  bottom: var(--bs-popover-border-width);
12068
12093
  border-top-color: var(--bs-popover-bg);
12069
12094
  }
12095
+
12070
12096
  /* rtl:begin:ignore */
12071
12097
  .bs-popover-end > .popover-arrow, .bs-popover-auto[data-popper-placement^="right"] > .popover-arrow {
12072
12098
  left: calc(-1 * (var(--bs-popover-arrow-height)) - var(--bs-popover-border-width));
@@ -12084,6 +12110,7 @@ progress {
12084
12110
  left: var(--bs-popover-border-width);
12085
12111
  border-right-color: var(--bs-popover-bg);
12086
12112
  }
12113
+
12087
12114
  /* rtl:end:ignore */
12088
12115
  .bs-popover-bottom > .popover-arrow, .bs-popover-auto[data-popper-placement^="bottom"] > .popover-arrow {
12089
12116
  top: calc(-1 * (var(--bs-popover-arrow-height)) - var(--bs-popover-border-width));
@@ -12109,6 +12136,7 @@ progress {
12109
12136
  content: "";
12110
12137
  border-bottom: var(--bs-popover-border-width) solid var(--bs-popover-header-bg);
12111
12138
  }
12139
+
12112
12140
  /* rtl:begin:ignore */
12113
12141
  .bs-popover-start > .popover-arrow, .bs-popover-auto[data-popper-placement^="left"] > .popover-arrow {
12114
12142
  right: calc(-1 * (var(--bs-popover-arrow-height)) - var(--bs-popover-border-width));
@@ -12126,6 +12154,7 @@ progress {
12126
12154
  right: var(--bs-popover-border-width);
12127
12155
  border-left-color: var(--bs-popover-bg);
12128
12156
  }
12157
+
12129
12158
  /* rtl:end:ignore */
12130
12159
  .popover-header {
12131
12160
  padding: var(--bs-popover-header-padding-y) var(--bs-popover-header-padding-x);
@@ -12664,6 +12693,10 @@ progress {
12664
12693
  color: #fff !important;
12665
12694
  background-color: RGBA(var(--bs-dark-rgb), var(--bs-bg-opacity, 1)) !important;
12666
12695
  }
12696
+
12697
+ /* Moo Components */
12698
+
12699
+ /* Keyboard keys */
12667
12700
  kbd {
12668
12701
  display: inline-flex;
12669
12702
  height: 1.25rem;
@@ -12674,6 +12707,8 @@ progress {
12674
12707
  line-height: 1rem;
12675
12708
  font-weight: 500;
12676
12709
  }
12710
+
12711
+ /* Input */
12677
12712
  .form-control {
12678
12713
  min-height: 2rem;
12679
12714
  }
@@ -12699,17 +12734,23 @@ progress {
12699
12734
  .form-select:disabled {
12700
12735
  opacity: var(--moo-disabled-control-opacity);
12701
12736
  }
12737
+
12738
+ /* Textarea */
12702
12739
  textarea.form-control:not(.form-control-sm, .form-control-lg) {
12703
12740
  padding: 0.5rem 0.75rem;
12704
12741
  }
12705
12742
  textarea.form-control:disabled {
12706
12743
  resize: none;
12707
12744
  }
12745
+
12746
+ /* Select */
12708
12747
  .form-select option,
12709
12748
  .form-select optgroup {
12710
12749
  color: var(--bs-body-color);
12711
12750
  background-color: var(--bs-body-bg);
12712
12751
  }
12752
+
12753
+ /* Input Group */
12713
12754
  .input-group:not(:has(> .form-control[type="file"])) {
12714
12755
  border: var(--bs-border-width) solid var(--moo-border);
12715
12756
  border-radius: var(--moo-input-group-border-radius);
@@ -12830,6 +12871,8 @@ progress {
12830
12871
  outline: 0;
12831
12872
  box-shadow: none;
12832
12873
  }
12874
+
12875
+ /* Buttons */
12833
12876
  .btn {
12834
12877
  display: inline-flex;
12835
12878
  align-items: center;
@@ -13004,6 +13047,8 @@ label.btn {
13004
13047
  --bs-btn-hover-color: var(--moo-muted-foreground);
13005
13048
  text-underline-offset: 0.25rem;
13006
13049
  }
13050
+
13051
+ /* Search Trigger */
13007
13052
  .search-trigger {
13008
13053
  width: 10rem;
13009
13054
  max-width: 100%;
@@ -13058,6 +13103,8 @@ label.btn {
13058
13103
  flex-basis: 16rem;
13059
13104
  }
13060
13105
  }
13106
+
13107
+ /* Close Button */
13061
13108
  .btn-close {
13062
13109
  --bs-btn-close-color: var(--moo-foreground);
13063
13110
  --bs-btn-hover-color: var(--bs-btn-close-color);
@@ -13106,6 +13153,8 @@ label.btn {
13106
13153
  pointer-events: none;
13107
13154
  opacity: var(--moo-disabled-control-opacity);
13108
13155
  }
13156
+
13157
+ /* Button Group */
13109
13158
  [dir="rtl"] .btn-group,
13110
13159
  [dir="rtl"] .btn-toolbar {
13111
13160
  direction: ltr;
@@ -13155,6 +13204,8 @@ label.btn {
13155
13204
  min-width: calc(1.875rem + 1rem);
13156
13205
  padding-inline-end: 1.875rem;
13157
13206
  }
13207
+
13208
+ /* Toggle Group */
13158
13209
  .toggle-group > .btn:not(:disabled):not(.disabled):not([aria-disabled="true"]):active {
13159
13210
  transform: none;
13160
13211
  }
@@ -13169,6 +13220,8 @@ label.btn {
13169
13220
  outline: 0;
13170
13221
  box-shadow: 0 0 0 3px color-mix(in srgb, var(--moo-ring) 50%, transparent);
13171
13222
  }
13223
+
13224
+ /* Card */
13172
13225
  .card {
13173
13226
  --bs-card-bg: color-mix(in srgb, var(--bs-secondary-bg) 5%, var(--bs-body-bg));
13174
13227
  --bs-card-color: var(--moo-foreground);
@@ -13264,6 +13317,8 @@ label.btn {
13264
13317
  font-size: 0.875rem;
13265
13318
  color: var(--moo-muted-foreground);
13266
13319
  }
13320
+
13321
+ /* Table */
13267
13322
  .card .table {
13268
13323
  --bs-table-bg: transparent;
13269
13324
  }
@@ -13273,6 +13328,8 @@ label.btn {
13273
13328
  .table-row-actions:has(> [aria-expanded="true"]) {
13274
13329
  z-index: 1000;
13275
13330
  }
13331
+
13332
+ /* Dropdown */
13276
13333
  .dropdown-menu {
13277
13334
  --bs-dropdown-bg: var(--moo-surface);
13278
13335
  --bs-dropdown-border-color: var(--moo-border);
@@ -13297,6 +13354,9 @@ label.btn {
13297
13354
  color: var(--bs-dropdown-link-color);
13298
13355
  background-color: transparent;
13299
13356
  }
13357
+ .dropdown-menu:has(.dropdown-item:hover) .dropdown-item.active:not(:hover) {
13358
+ background-color: transparent;
13359
+ }
13300
13360
  .dropdown-item > [data-icon] {
13301
13361
  width: 1rem;
13302
13362
  height: 1rem;
@@ -13436,6 +13496,8 @@ label.btn {
13436
13496
  inset-block-end: var(--moo-sidebar-dropdown-block-end) !important;
13437
13497
  }
13438
13498
  }
13499
+
13500
+ /* Menubar */
13439
13501
  .menubar {
13440
13502
  gap: 0.125rem;
13441
13503
  padding: 0.1875rem;
@@ -13449,6 +13511,8 @@ label.btn {
13449
13511
  color: var(--bs-btn-color);
13450
13512
  font-weight: 500;
13451
13513
  }
13514
+
13515
+ /* Avatar */
13452
13516
  .avatar {
13453
13517
  position: relative;
13454
13518
  display: inline-flex;
@@ -13571,10 +13635,19 @@ label.btn {
13571
13635
  content: "+";
13572
13636
  margin-inline-end: -0.1rem;
13573
13637
  }
13638
+
13639
+ /* Navigation */
13574
13640
  .nav {
13575
13641
  --bs-nav-link-color: var(--moo-foreground);
13576
13642
  --bs-nav-link-hover-color: var(--moo-foreground);
13577
13643
  --bs-nav-link-disabled-color: var(--moo-disabled-foreground);
13644
+ --bs-nav-link-description-color: color-mix(in srgb, var(--moo-muted-foreground) 95%, var(--moo-foreground));
13645
+ }
13646
+ .nav-link-description {
13647
+ color: var(--bs-nav-link-description-color);
13648
+ }
13649
+ .nav-link.disabled .nav-link-description {
13650
+ color: var(--bs-nav-link-disabled-color);
13578
13651
  }
13579
13652
  .nav-pills {
13580
13653
  --bs-nav-pills-border-radius: var(--bs-border-radius);
@@ -13600,6 +13673,58 @@ label.btn {
13600
13673
  height: 1rem;
13601
13674
  flex: 0 0 auto;
13602
13675
  }
13676
+ .nav-link-icon {
13677
+ display: inline-flex;
13678
+ align-items: center;
13679
+ flex: 0 0 auto;
13680
+ }
13681
+ .nav-steps {
13682
+ --bs-nav-step-icon-size: 2rem;
13683
+ --bs-nav-step-gap: 0.25rem;
13684
+ gap: var(--bs-nav-step-gap);
13685
+ }
13686
+ .nav-steps .nav-item {
13687
+ position: relative;
13688
+ }
13689
+ .nav-steps .nav-item:not(:only-child)::before {
13690
+ position: absolute;
13691
+ z-index: 1;
13692
+ inset-inline-start: calc(var(--bs-nav-link-padding-x) + var(--bs-nav-step-icon-size) / 2);
13693
+ inset-block: calc(var(--bs-nav-step-gap) / -2);
13694
+ border-inline-start: var(--bs-border-width) solid var(--bs-border-color);
13695
+ content: "";
13696
+ pointer-events: none;
13697
+ }
13698
+ .nav-steps .nav-item:first-child::before {
13699
+ inset-block-start: 50%;
13700
+ }
13701
+ .nav-steps .nav-item:last-child::before {
13702
+ inset-block-end: 50%;
13703
+ }
13704
+ .nav-steps .nav-link-icon {
13705
+ position: relative;
13706
+ z-index: 2;
13707
+ display: inline-flex;
13708
+ align-items: center;
13709
+ justify-content: center;
13710
+ flex: 0 0 var(--bs-nav-step-icon-size);
13711
+ inline-size: var(--bs-nav-step-icon-size);
13712
+ block-size: var(--bs-nav-step-icon-size);
13713
+ color: var(--moo-foreground);
13714
+ background-color: var(--moo-muted-surface);
13715
+ border: var(--bs-border-width) solid var(--bs-border-color);
13716
+ border-radius: var(--bs-border-radius);
13717
+ }
13718
+ .nav-steps .nav-link.disabled .nav-link-icon {
13719
+ color: var(--moo-disabled-foreground);
13720
+ }
13721
+ .nav-steps .nav-item[data-nav-completed="true"] .nav-link-icon {
13722
+ color: var(--moo-primary-foreground);
13723
+ background-color: var(--moo-primary);
13724
+ border-color: var(--moo-primary);
13725
+ }
13726
+
13727
+ /* Skeleton */
13603
13728
  .skeleton {
13604
13729
  color: var(--moo-border);
13605
13730
  border-radius: var(--bs-border-radius);
@@ -13608,6 +13733,8 @@ label.btn {
13608
13733
  .skeleton > .placeholder {
13609
13734
  display: block;
13610
13735
  }
13736
+
13737
+ /* Sidebar */
13611
13738
  .sidebar-inner {
13612
13739
  position: sticky;
13613
13740
  top: 0;
@@ -14017,6 +14144,8 @@ label.btn {
14017
14144
  display: none;
14018
14145
  }
14019
14146
  }
14147
+
14148
+ /* Alert */
14020
14149
  .alert {
14021
14150
  --bs-alert-border-color: var(--moo-border);
14022
14151
  --bs-alert-color: var(--moo-foreground);
@@ -14083,6 +14212,8 @@ label.btn {
14083
14212
  .alert-action {
14084
14213
  flex: 0 0 auto;
14085
14214
  }
14215
+
14216
+ /* Breadcrumb */
14086
14217
  .breadcrumb {
14087
14218
  --bs-breadcrumb-item-active-color: var(--moo-foreground);
14088
14219
  --bs-breadcrumb-item-padding-x: 0.375rem;
@@ -14182,6 +14313,8 @@ label.btn {
14182
14313
  width: 0.875rem;
14183
14314
  height: 0.875rem;
14184
14315
  }
14316
+
14317
+ /* Pagination */
14185
14318
  .page-link {
14186
14319
  display: inline-flex;
14187
14320
  align-items: center;
@@ -14227,6 +14360,8 @@ label.btn {
14227
14360
  .page-item.disabled {
14228
14361
  opacity: var(--moo-disabled-control-opacity);
14229
14362
  }
14363
+
14364
+ /* Badge */
14230
14365
  .badge {
14231
14366
  display: inline-flex;
14232
14367
  height: 1.25rem;
@@ -14255,10 +14390,14 @@ label.btn {
14255
14390
  .badge[class~="text-body-secondary"] {
14256
14391
  color: var(--moo-foreground) !important;
14257
14392
  }
14393
+
14394
+ /* Progress */
14258
14395
  .progress {
14259
14396
  --bs-progress-bar-color: var(--moo-primary-foreground);
14260
14397
  --bs-progress-bar-bg: var(--moo-primary);
14261
14398
  }
14399
+
14400
+ /* Slider */
14262
14401
  .slider {
14263
14402
  display: grid;
14264
14403
  gap: 0.5rem;
@@ -14437,6 +14576,8 @@ label.btn {
14437
14576
  writing-mode: vertical-lr;
14438
14577
  direction: rtl;
14439
14578
  }
14579
+
14580
+ /* Separator */
14440
14581
  hr {
14441
14582
  opacity: 1;
14442
14583
  border-top: var(--bs-border-width) solid var(--moo-border);
@@ -14445,6 +14586,8 @@ label.btn {
14445
14586
  opacity: 1;
14446
14587
  background-color: var(--moo-border);
14447
14588
  }
14589
+
14590
+ /* Checkbox */
14448
14591
  .form-check-input {
14449
14592
  margin-top: 0.125rem;
14450
14593
  }
@@ -14508,9 +14651,100 @@ label.btn {
14508
14651
  border-color: var(--moo-primary);
14509
14652
  background-color: var(--moo-primary);
14510
14653
  }
14654
+
14655
+ /* Radio Group */
14511
14656
  .radio-group legend.form-label {
14512
14657
  font-size: inherit;
14513
14658
  }
14659
+ .form-check-card {
14660
+ position: relative;
14661
+ padding: 0;
14662
+ margin-bottom: 0;
14663
+ }
14664
+ .form-check-card + .form-check-card {
14665
+ margin-block-start: 0.5rem;
14666
+ }
14667
+ .form-check-card > .form-check-input:not(.visually-hidden) {
14668
+ position: absolute;
14669
+ inset-block-start: 0.75rem;
14670
+ inset-inline-end: 0.75rem;
14671
+ float: none;
14672
+ margin: 0;
14673
+ }
14674
+ .form-check-card > .form-check-label {
14675
+ display: flex;
14676
+ align-items: center;
14677
+ gap: 0.75rem;
14678
+ padding: 0.75rem;
14679
+ padding-inline-end: 2.5rem;
14680
+ border: var(--bs-border-width) solid var(--moo-border);
14681
+ border-radius: var(--bs-border-radius);
14682
+ color: var(--moo-foreground);
14683
+ cursor: pointer;
14684
+ }
14685
+ .form-check-card.form-check-card--no-control > .form-check-label {
14686
+ padding-inline-end: 0.75rem;
14687
+ }
14688
+ .form-check-card > .form-check-input:not(:disabled) ~ .form-check-label:hover,
14689
+ .form-check-card > .form-check-input:checked ~ .form-check-label {
14690
+ background-color: var(--moo-muted-surface);
14691
+ }
14692
+ .form-check-card > .form-check-input:checked ~ .form-check-label {
14693
+ border-color: var(--moo-foreground);
14694
+ }
14695
+ .form-check-card > .form-check-input:checked ~ .form-check-label .form-check-card-media {
14696
+ border-color: var(--moo-primary);
14697
+ background-color: var(--moo-primary);
14698
+ color: var(--moo-primary-foreground);
14699
+ }
14700
+ .form-check-card > .form-check-input:focus-visible ~ .form-check-label {
14701
+ border-color: var(--moo-ring);
14702
+ box-shadow: 0 0 0 var(--bs-focus-ring-width) color-mix(in srgb, var(--moo-ring) 50%, transparent);
14703
+ }
14704
+ .form-check-card > .form-check-input.is-invalid ~ .form-check-label {
14705
+ border-color: var(--bs-form-invalid-border-color);
14706
+ }
14707
+ .form-check-card > .form-check-input.is-invalid:focus-visible ~ .form-check-label {
14708
+ box-shadow: 0 0 0 var(--bs-focus-ring-width) var(--moo-form-invalid-ring-color);
14709
+ }
14710
+ .form-check-card-content {
14711
+ display: flex;
14712
+ flex-direction: column;
14713
+ gap: 0.25rem;
14714
+ min-width: 0;
14715
+ line-height: 1.25;
14716
+ overflow-wrap: anywhere;
14717
+ }
14718
+ .form-check-card-content > .form-text {
14719
+ margin: 0;
14720
+ font-size: 0.76562rem;
14721
+ line-height: inherit;
14722
+ color: color-mix(in srgb, var(--moo-muted-foreground) 95%, var(--moo-foreground));
14723
+ }
14724
+ .form-check-card-title {
14725
+ font-weight: 500;
14726
+ }
14727
+ .form-check-card-media {
14728
+ display: grid;
14729
+ place-items: center;
14730
+ flex: 0 0 auto;
14731
+ inline-size: 2.30078rem;
14732
+ aspect-ratio: 1;
14733
+ border: var(--bs-border-width) solid var(--moo-border);
14734
+ border-radius: var(--bs-border-radius-sm);
14735
+ background-color: var(--moo-muted-surface);
14736
+ color: var(--moo-foreground);
14737
+ }
14738
+ .form-check-card-media > span {
14739
+ font-size: 0.76562rem;
14740
+ font-weight: 600;
14741
+ }
14742
+ .form-check-card-media > [data-icon] {
14743
+ width: 0.875rem;
14744
+ height: 0.875rem;
14745
+ }
14746
+
14747
+ /* Switch */
14514
14748
  .form-switch .form-check-input {
14515
14749
  height: 1.15rem;
14516
14750
  }
@@ -14534,6 +14768,8 @@ label.btn {
14534
14768
  :scope[data-bs-theme="dark"] .form-switch .form-check-input:focus:not(:focus-visible):not(:checked) {
14535
14769
  --bs-form-switch-bg: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='3' fill='rgba%28255, 255, 255, 0.25%29'/%3e%3c/svg%3e");
14536
14770
  }
14771
+
14772
+ /* Spinner */
14537
14773
  .spinner [data-icon] {
14538
14774
  width: 1rem;
14539
14775
  height: 1rem;
@@ -14543,6 +14779,8 @@ label.btn {
14543
14779
  width: 0.75rem;
14544
14780
  height: 0.75rem;
14545
14781
  }
14782
+
14783
+ /* Accordion */
14546
14784
  .accordion-button::after {
14547
14785
  content: none;
14548
14786
  }
@@ -14587,6 +14825,8 @@ label.btn {
14587
14825
  .card .accordion {
14588
14826
  --bs-accordion-bg: transparent;
14589
14827
  }
14828
+
14829
+ /* Tabs */
14590
14830
  .tabs-list {
14591
14831
  display: inline-flex;
14592
14832
  gap: 0.125rem;
@@ -14690,6 +14930,8 @@ label.btn {
14690
14930
  pointer-events: auto;
14691
14931
  transition-delay: 0s;
14692
14932
  }
14933
+
14934
+ /* Collapsible */
14693
14935
  .collapsible {
14694
14936
  display: flex;
14695
14937
  flex-direction: column;
@@ -14727,6 +14969,8 @@ label.btn {
14727
14969
  color: var(--moo-muted-foreground);
14728
14970
  width: 100%;
14729
14971
  }
14972
+
14973
+ /* Tooltip */
14730
14974
  .tooltip {
14731
14975
  --bs-tooltip-max-width: 20rem;
14732
14976
  --bs-tooltip-padding-x: 0.75rem;
@@ -14781,6 +15025,8 @@ label.btn {
14781
15025
  .tooltip-inner kbd {
14782
15026
  margin-inline-start: 0.25rem;
14783
15027
  }
15028
+
15029
+ /* Popover */
14784
15030
  .popover {
14785
15031
  --bs-popover-border-radius: var(--bs-border-radius-lg);
14786
15032
  --bs-popover-border-color: var(--moo-border);
@@ -14804,6 +15050,8 @@ label.btn {
14804
15050
  .popover .popover-arrow {
14805
15051
  display: none;
14806
15052
  }
15053
+
15054
+ /* Dialog */
14807
15055
  .modal {
14808
15056
  --bs-modal-border-radius: var(--bs-border-radius-xl);
14809
15057
  --bs-modal-border-color: var(--moo-border);
@@ -14858,6 +15106,8 @@ label.btn {
14858
15106
  .modal-footer {
14859
15107
  padding: 1rem;
14860
15108
  }
15109
+
15110
+ /* Sheet */
14861
15111
  .offcanvas.sheet {
14862
15112
  --bs-offcanvas-width: 24rem;
14863
15113
  --bs-offcanvas-border-color: var(--moo-border);
@@ -14871,6 +15121,8 @@ label.btn {
14871
15121
  font-size: 1rem;
14872
15122
  font-weight: 500;
14873
15123
  }
15124
+
15125
+ /* Toast */
14874
15126
  .toast {
14875
15127
  --bs-toast-border-radius: var(--bs-border-radius-lg);
14876
15128
  --bs-toast-border-color: var(--moo-border);
@@ -14962,6 +15214,8 @@ label.btn {
14962
15214
  transition: none;
14963
15215
  }
14964
15216
  }
15217
+
15218
+ /* Field */
14965
15219
  .field {
14966
15220
  display: flex;
14967
15221
  flex-direction: column;
@@ -15037,6 +15291,8 @@ label.btn {
15037
15291
  .field-fieldset + hr {
15038
15292
  opacity: 0.1;
15039
15293
  }
15294
+
15295
+ /* Date Picker */
15040
15296
  .moo-datepicker {
15041
15297
  --moo-datepicker-width: 17.5rem;
15042
15298
  --moo-datepicker-popover-offset: 0.375rem;
@@ -15236,6 +15492,8 @@ label.btn {
15236
15492
  .moo-calendar__preset {
15237
15493
  flex: 0 0 auto;
15238
15494
  }
15495
+
15496
+ /* Combobox */
15239
15497
  .combobox {
15240
15498
  --moo-combobox-width: 12.5rem;
15241
15499
  --moo-combobox-multiple-width: 20rem;
@@ -15451,6 +15709,8 @@ label.btn {
15451
15709
  color: var(--bs-secondary-color);
15452
15710
  text-align: center;
15453
15711
  }
15712
+
15713
+ /* Context Menu */
15454
15714
  .context-menu {
15455
15715
  position: relative;
15456
15716
  }
@@ -15465,6 +15725,8 @@ label.btn {
15465
15725
  ul.context-menu-menu:focus-visible {
15466
15726
  outline: 0;
15467
15727
  }
15728
+
15729
+ /* Data Table */
15468
15730
  .datatable {
15469
15731
  --moo-datatable-min-width: 48rem;
15470
15732
  --moo-datatable-actions-cell-bg: var(--bs-body-bg);
@@ -15486,15 +15748,88 @@ label.btn {
15486
15748
  table-layout: fixed;
15487
15749
  }
15488
15750
  .datatable--responsive-scroll .datatable-table,
15489
- .datatable--responsive-toggle .datatable-table {
15751
+ .datatable--responsive-toggle .datatable-table,
15752
+ .datatable--responsive-auto .datatable-table {
15490
15753
  min-width: var(--moo-datatable-min-width);
15491
15754
  }
15492
- .datatable--responsive-toggle[data-datatable-view="table"] .datatable-card-frame {
15755
+ .datatable--responsive-toggle[data-datatable-view="table"] .datatable-card-frame,
15756
+ .datatable--responsive-auto[data-datatable-view="table"] .datatable-card-frame {
15757
+ display: none;
15758
+ }
15759
+ .datatable--responsive-toggle[data-datatable-view="cards"] .datatable-frame,
15760
+ .datatable--responsive-auto[data-datatable-view="cards"] .datatable-frame {
15761
+ display: none;
15762
+ }
15763
+ .datatable--responsive-auto[data-datatable-responsive-breakpoint="sm"] {
15764
+ --moo-datatable-responsive-breakpoint: 576px;
15765
+ }
15766
+ .datatable--responsive-auto[data-datatable-responsive-breakpoint="sm"][data-datatable-view="auto"] .datatable-card-frame {
15767
+ display: none;
15768
+ }
15769
+ @media (max-width: 575.98px) {
15770
+ .datatable--responsive-auto[data-datatable-responsive-breakpoint="sm"][data-datatable-view="auto"] .datatable-frame {
15771
+ display: none;
15772
+ }
15773
+ .datatable--responsive-auto[data-datatable-responsive-breakpoint="sm"][data-datatable-view="auto"] .datatable-card-frame {
15774
+ display: block;
15775
+ }
15776
+ }
15777
+ .datatable--responsive-auto[data-datatable-responsive-breakpoint="md"] {
15778
+ --moo-datatable-responsive-breakpoint: 768px;
15779
+ }
15780
+ .datatable--responsive-auto[data-datatable-responsive-breakpoint="md"][data-datatable-view="auto"] .datatable-card-frame {
15493
15781
  display: none;
15494
15782
  }
15495
- .datatable--responsive-toggle[data-datatable-view="cards"] .datatable-frame {
15783
+ @media (max-width: 767.98px) {
15784
+ .datatable--responsive-auto[data-datatable-responsive-breakpoint="md"][data-datatable-view="auto"] .datatable-frame {
15785
+ display: none;
15786
+ }
15787
+ .datatable--responsive-auto[data-datatable-responsive-breakpoint="md"][data-datatable-view="auto"] .datatable-card-frame {
15788
+ display: block;
15789
+ }
15790
+ }
15791
+ .datatable--responsive-auto[data-datatable-responsive-breakpoint="lg"] {
15792
+ --moo-datatable-responsive-breakpoint: 992px;
15793
+ }
15794
+ .datatable--responsive-auto[data-datatable-responsive-breakpoint="lg"][data-datatable-view="auto"] .datatable-card-frame {
15496
15795
  display: none;
15497
15796
  }
15797
+ @media (max-width: 991.98px) {
15798
+ .datatable--responsive-auto[data-datatable-responsive-breakpoint="lg"][data-datatable-view="auto"] .datatable-frame {
15799
+ display: none;
15800
+ }
15801
+ .datatable--responsive-auto[data-datatable-responsive-breakpoint="lg"][data-datatable-view="auto"] .datatable-card-frame {
15802
+ display: block;
15803
+ }
15804
+ }
15805
+ .datatable--responsive-auto[data-datatable-responsive-breakpoint="xl"] {
15806
+ --moo-datatable-responsive-breakpoint: 1200px;
15807
+ }
15808
+ .datatable--responsive-auto[data-datatable-responsive-breakpoint="xl"][data-datatable-view="auto"] .datatable-card-frame {
15809
+ display: none;
15810
+ }
15811
+ @media (max-width: 1199.98px) {
15812
+ .datatable--responsive-auto[data-datatable-responsive-breakpoint="xl"][data-datatable-view="auto"] .datatable-frame {
15813
+ display: none;
15814
+ }
15815
+ .datatable--responsive-auto[data-datatable-responsive-breakpoint="xl"][data-datatable-view="auto"] .datatable-card-frame {
15816
+ display: block;
15817
+ }
15818
+ }
15819
+ .datatable--responsive-auto[data-datatable-responsive-breakpoint="xxl"] {
15820
+ --moo-datatable-responsive-breakpoint: 1400px;
15821
+ }
15822
+ .datatable--responsive-auto[data-datatable-responsive-breakpoint="xxl"][data-datatable-view="auto"] .datatable-card-frame {
15823
+ display: none;
15824
+ }
15825
+ @media (max-width: 1399.98px) {
15826
+ .datatable--responsive-auto[data-datatable-responsive-breakpoint="xxl"][data-datatable-view="auto"] .datatable-frame {
15827
+ display: none;
15828
+ }
15829
+ .datatable--responsive-auto[data-datatable-responsive-breakpoint="xxl"][data-datatable-view="auto"] .datatable-card-frame {
15830
+ display: block;
15831
+ }
15832
+ }
15498
15833
  .datatable-frame {
15499
15834
  border: var(--bs-border-width) solid var(--bs-border-color);
15500
15835
  border-radius: var(--bs-border-radius);
@@ -15542,6 +15877,16 @@ label.btn {
15542
15877
  .datatable-table > :not(caption) > * > * {
15543
15878
  vertical-align: middle;
15544
15879
  }
15880
+ .datatable-col > .btn-link,
15881
+ .datatable-card-title > .btn-link {
15882
+ max-inline-size: 100%;
15883
+ white-space: normal;
15884
+ overflow-wrap: anywhere;
15885
+ text-align: inherit;
15886
+ }
15887
+ .datatable-table > :not(caption) > * > .datatable-col:nth-child(1 of :not(.datatable-col-hidden)) {
15888
+ padding-inline-start: 1rem;
15889
+ }
15545
15890
  .datatable-toolbar {
15546
15891
  display: flex;
15547
15892
  flex-wrap: wrap;
@@ -15962,7 +16307,10 @@ label.btn {
15962
16307
  align-items: center;
15963
16308
  padding: 0.5rem 0.75rem;
15964
16309
  border-bottom: var(--bs-border-width) solid var(--bs-border-color);
15965
- background-color: var(--bs-tertiary-bg);
16310
+ background-color: color-mix(in srgb, var(--moo-surface) 50%, var(--moo-muted-surface));
16311
+ }
16312
+ .datatable-card-header:not(:has(> .datatable-card-select)) {
16313
+ grid-template-columns: minmax(0, 1fr) auto;
15966
16314
  }
15967
16315
  .datatable-card-select {
15968
16316
  display: inline-flex;
@@ -16327,6 +16675,8 @@ label.btn {
16327
16675
  .datatable--release-review {
16328
16676
  --moo-datatable-min-width: 64rem;
16329
16677
  }
16678
+
16679
+ /* Focus and keyboard navigation */
16330
16680
  .form-label,
16331
16681
  .form-check-label {
16332
16682
  user-select: none;
@@ -16397,6 +16747,13 @@ label.btn {
16397
16747
  .was-validated .input-group.has-validation:not(:has(> :is(.valid-feedback, .invalid-feedback, .valid-tooltip, .invalid-tooltip))) > :is(.form-control, .form-select):invalid {
16398
16748
  box-shadow: none;
16399
16749
  }
16750
+
16751
+ /* Utilities */
16752
+
16753
+ /* Border utilities */
16754
+ .border-dashed {
16755
+ border-style: dashed !important;
16756
+ }
16400
16757
  :where( .scroll-fade, .scroll-fade-y, .scroll-fade-x, .scroll-fade-t, .scroll-fade-b, .scroll-fade-l, .scroll-fade-r, .scroll-fade-s, .scroll-fade-e ) {
16401
16758
  --scroll-fade-size: min(12%, 2.5rem);
16402
16759
  --scroll-fade-reveal: 6rem;
@@ -16565,6 +16922,8 @@ label.btn {
16565
16922
  --moo-scroll-fade-e: var(--moo-scroll-fade-e-size);
16566
16923
  }
16567
16924
  }
16925
+
16926
+ /* Application layout */
16568
16927
  .sidebar {
16569
16928
  --moo-sidebar-width: 16rem;
16570
16929
  --moo-sidebar-width-icon: 3rem;
@@ -16635,19 +16994,6 @@ label.btn {
16635
16994
  .sidebar-rail {
16636
16995
  display: none;
16637
16996
  }
16638
- .wrapper[data-layout="app"][data-shell-mode="contained"] .sidebar {
16639
- position: relative;
16640
- inset: auto;
16641
- flex: 0 0 auto;
16642
- width: 100%;
16643
- height: auto;
16644
- visibility: visible;
16645
- transform: none;
16646
- }
16647
- .wrapper[data-layout="app"][data-shell-mode="contained"] .sidebar-inner {
16648
- height: auto;
16649
- max-height: none;
16650
- }
16651
16997
  }
16652
16998
  .sidebar[data-side="left"]:not([data-variant="inset"]) .sidebar-inner {
16653
16999
  border-right: var(--bs-border-width) solid var(--moo-sidebar-border);
@@ -16999,6 +17345,8 @@ label.btn {
16999
17345
  display: none !important;
17000
17346
  }
17001
17347
  }
17348
+
17349
+ /* Form themes */
17002
17350
  :scope[data-bs-theme="light"] .form-select {
17003
17351
  --bs-form-select-bg-img: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3cpath fill='none' stroke='%23343a40' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='m2 5 6 6 6-6'/%3e%3c/svg%3e");
17004
17352
  }
@@ -17011,6 +17359,8 @@ label.btn {
17011
17359
  :scope[data-bs-theme="dark"] .form-switch .form-check-input:not(:checked):not(:focus) {
17012
17360
  --bs-form-switch-bg: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='3' fill='rgba%28255, 255, 255, 0.25%29'/%3e%3c/svg%3e");
17013
17361
  }
17362
+
17363
+ /* Overlay backdrops */
17014
17364
  .modal-backdrop,
17015
17365
  .offcanvas-backdrop {
17016
17366
  --bs-backdrop-opacity: var(--moo-overlay-backdrop-opacity, 1);
@@ -17047,7 +17397,16 @@ label.btn {
17047
17397
  .offcanvas-backdrop.show::before {
17048
17398
  animation: moo-overlay-backdrop-enter var(--moo-overlay-motion-duration, 0.3s) ease-out both;
17049
17399
  }
17400
+
17401
+ /* Typography */
17050
17402
  :where(h1, h2, h3, h4, h5, h6, .h1, .h2, .h3, .h4, .h5, .h6, .display-1, .display-2, .display-3, .display-4, .display-5, .display-6) {
17051
17403
  font-family: var(--moo-heading-font-family, var(--bs-body-font-family));
17052
17404
  }
17405
+ :is(small, .small) {
17406
+ font-size: var(--moo-small-font-size);
17407
+ }
17408
+ p {
17409
+ margin-top: var(--moo-paragraph-margin-top);
17410
+ margin-bottom: var(--moo-paragraph-margin-bottom);
17411
+ }
17053
17412
  }