@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,1067 @@
1
+ /* Data Table */
2
+
3
+ .datatable {
4
+ --moo-datatable-min-width: #{$moo-datatable-min-width};
5
+ --moo-datatable-actions-cell-bg: #{$moo-datatable-actions-cell-bg};
6
+ --moo-datatable-actions-cell-fade-width: #{$moo-datatable-actions-cell-fade-width};
7
+ --moo-datatable-card-label-width: #{$moo-datatable-card-label-width};
8
+ --moo-datatable-frame-header-min-height: #{$moo-datatable-frame-header-min-height};
9
+ --moo-datatable-select-cell-inset: #{$moo-datatable-select-cell-inset};
10
+ --moo-datatable-table-select-all-offset-y: #{$moo-datatable-table-select-all-offset-y};
11
+ --moo-datatable-toolbar-control-height: #{$moo-datatable-toolbar-control-height};
12
+ --moo-datatable-search-filter-menu-width: #{$moo-datatable-search-filter-menu-width};
13
+ --moo-datatable-search-filter-options-menu-width: #{$moo-datatable-search-filter-options-menu-width};
14
+ --moo-datatable-scrollbar-size: #{$moo-datatable-scrollbar-size};
15
+ --moo-datatable-bulk-actions-bottom: #{$moo-datatable-bulk-actions-bottom};
16
+ }
17
+
18
+ .card .datatable {
19
+ --moo-datatable-actions-cell-bg: var(--bs-card-bg);
20
+ }
21
+
22
+ .datatable-table {
23
+ table-layout: fixed;
24
+ }
25
+
26
+ .datatable--responsive-scroll .datatable-table,
27
+ .datatable--responsive-toggle .datatable-table,
28
+ .datatable--responsive-auto .datatable-table {
29
+ min-width: var(--moo-datatable-min-width);
30
+ }
31
+
32
+ .datatable--responsive-toggle[data-datatable-view="table"] .datatable-card-frame,
33
+ .datatable--responsive-auto[data-datatable-view="table"] .datatable-card-frame {
34
+ display: none;
35
+ }
36
+
37
+ .datatable--responsive-toggle[data-datatable-view="cards"] .datatable-frame,
38
+ .datatable--responsive-auto[data-datatable-view="cards"] .datatable-frame {
39
+ display: none;
40
+ }
41
+
42
+ @each $name, $value in map-merge($grid-breakpoints, $moo-datatable-responsive-breakpoint) {
43
+ @if $value != 0 {
44
+ .datatable--responsive-auto[data-datatable-responsive-breakpoint="#{$name}"] {
45
+ --moo-datatable-responsive-breakpoint: #{$value};
46
+
47
+ &[data-datatable-view="auto"] .datatable-card-frame {
48
+ display: none;
49
+ }
50
+
51
+ @include media-breakpoint-down($name, map-merge($grid-breakpoints, $moo-datatable-responsive-breakpoint)) {
52
+ &[data-datatable-view="auto"] .datatable-frame {
53
+ display: none;
54
+ }
55
+ &[data-datatable-view="auto"] .datatable-card-frame {
56
+ display: block;
57
+ }
58
+ }
59
+ }
60
+ }
61
+ }
62
+
63
+ .datatable-frame {
64
+ border: var(--bs-border-width) solid var(--bs-border-color);
65
+ border-radius: var(--bs-border-radius);
66
+ overflow: hidden;
67
+ }
68
+
69
+ .datatable-card-frame {
70
+ border: var(--bs-border-width) solid var(--bs-border-color);
71
+ border-radius: var(--bs-border-radius);
72
+ overflow: hidden;
73
+ }
74
+
75
+ .datatable-frame [data-datatable-column="actions"] {
76
+ position: sticky;
77
+ inset-inline-end: 0;
78
+ z-index: 2;
79
+ background: linear-gradient(
80
+ 90deg,
81
+ transparent 0,
82
+ var(--moo-datatable-actions-cell-bg) var(--moo-datatable-actions-cell-fade-width)
83
+ );
84
+ }
85
+
86
+ [dir="rtl"] .datatable-frame [data-datatable-column="actions"],
87
+ .datatable-frame [dir="rtl"] [data-datatable-column="actions"] {
88
+ background: linear-gradient(
89
+ 270deg,
90
+ transparent 0,
91
+ var(--moo-datatable-actions-cell-bg) var(--moo-datatable-actions-cell-fade-width)
92
+ );
93
+ }
94
+
95
+ .datatable-card-frame:has(.datatable-card .dropdown-menu.show) {
96
+ position: relative;
97
+ z-index: $zindex-dropdown;
98
+ overflow: visible;
99
+ }
100
+
101
+ .datatable-frame-header {
102
+ display: flex;
103
+ align-items: center;
104
+ justify-content: space-between;
105
+ gap: 0.625rem;
106
+ min-block-size: var(--moo-datatable-frame-header-min-height);
107
+ padding-block: 0.375rem;
108
+ padding-inline-start: var(--moo-datatable-select-cell-inset);
109
+ padding-inline-end: 0.5rem;
110
+ border-bottom: var(--bs-border-width) solid var(--bs-border-color);
111
+ background-color: var(--bs-body-bg);
112
+ }
113
+
114
+ .datatable-frame .table-responsive {
115
+ position: relative;
116
+ margin-bottom: 0;
117
+ }
118
+
119
+ .datatable-frame .datatable-table {
120
+ margin-bottom: 0;
121
+ }
122
+
123
+ .datatable-table > :not(caption) > * > * {
124
+ vertical-align: middle;
125
+ }
126
+
127
+ .datatable-col > .btn-link,
128
+ .datatable-card-title > .btn-link {
129
+ max-inline-size: 100%;
130
+ white-space: normal;
131
+ overflow-wrap: anywhere;
132
+ text-align: inherit;
133
+ }
134
+
135
+ .datatable-table > :not(caption) > * > .datatable-col:nth-child(1 of :not(.datatable-col-hidden)) {
136
+ padding-inline-start: $spacer;
137
+ }
138
+
139
+ .datatable-toolbar {
140
+ display: flex;
141
+ flex-wrap: wrap;
142
+ align-items: center;
143
+ gap: 0.5rem;
144
+ margin-bottom: 0.5rem;
145
+ }
146
+
147
+ .datatable-toolbar-actions {
148
+ display: flex;
149
+ align-items: center;
150
+ gap: 0.5rem;
151
+ margin-inline-start: auto;
152
+ }
153
+
154
+ .datatable-toolbar-query {
155
+ display: flex;
156
+ flex: 0 1 22rem;
157
+ gap: 0.5rem;
158
+ align-items: center;
159
+ min-width: 20rem;
160
+ max-width: 100%;
161
+ }
162
+
163
+ .datatable-search-filter {
164
+ position: relative;
165
+ flex: 1 1 auto;
166
+ min-width: 0;
167
+ }
168
+
169
+ .datatable-searchbar {
170
+ position: relative;
171
+ display: flex;
172
+ flex: 1 1 auto;
173
+ flex-wrap: nowrap;
174
+ align-items: center;
175
+ min-block-size: var(--moo-datatable-toolbar-control-height);
176
+ width: 100%;
177
+ }
178
+
179
+ .datatable-searchbar:not(:has(> .dropdown-menu.show)) {
180
+ overflow: hidden;
181
+ }
182
+
183
+ .datatable-searchbar .datatable-search {
184
+ flex: 1 1 auto;
185
+ max-width: none;
186
+ min-width: 0;
187
+ width: 1%;
188
+ padding-inline-start: 2rem;
189
+ }
190
+
191
+ .datatable-search-icon {
192
+ position: absolute;
193
+ inset-block-start: 50%;
194
+ inset-inline-start: 0.625rem;
195
+ z-index: 6;
196
+ display: inline-flex;
197
+ align-items: center;
198
+ justify-content: center;
199
+ color: var(--bs-secondary-color);
200
+ pointer-events: none;
201
+ transform: translateY(-50%);
202
+ }
203
+
204
+ .datatable-search-icon > [data-icon] {
205
+ width: 0.875rem;
206
+ height: 0.875rem;
207
+ }
208
+
209
+ .datatable-filter-picker-trigger {
210
+ display: inline-flex;
211
+ flex: 0 0 auto;
212
+ align-items: center;
213
+ justify-content: center;
214
+ inline-size: 2rem;
215
+ block-size: 2rem;
216
+ padding: 0;
217
+ margin-inline-end: 0;
218
+ border-radius: var(--bs-border-radius-sm);
219
+ gap: 0;
220
+ }
221
+
222
+ .btn.datatable-filter-picker-trigger:focus:not(:focus-visible) {
223
+ outline: 0;
224
+ box-shadow: none;
225
+ }
226
+
227
+ .btn.datatable-filter-picker-trigger:focus-visible {
228
+ z-index: 3;
229
+ outline: var(--bs-focus-ring-width) solid var(--moo-ring);
230
+ outline-offset: 0;
231
+ box-shadow: none;
232
+ }
233
+
234
+ .input-group > .btn-ghost.datatable-filter-picker-trigger:focus-visible::before {
235
+ opacity: 1;
236
+ }
237
+
238
+ .datatable-filter-picker-trigger > [data-icon] {
239
+ width: 0.875rem;
240
+ height: 0.875rem;
241
+ margin: 0;
242
+ }
243
+
244
+ .datatable-search-filter-menu {
245
+ --bs-dropdown-border-radius: var(--bs-border-radius);
246
+
247
+ width: var(--moo-datatable-search-filter-menu-width);
248
+ max-width: calc(100vw - 1.5rem);
249
+ max-height: calc(100vh - 8rem);
250
+ overflow-y: auto;
251
+ overscroll-behavior: contain;
252
+ }
253
+
254
+ .datatable-search-filter-menu[data-datatable-filter-menu-panel="options"] {
255
+ width: var(--moo-datatable-search-filter-options-menu-width);
256
+ }
257
+
258
+ .datatable-facet-menu {
259
+ --bs-dropdown-border-radius: var(--bs-border-radius);
260
+
261
+ min-width: $moo-datatable-facet-menu-min-width;
262
+ }
263
+
264
+ .datatable-filter-panel {
265
+ min-width: 0;
266
+ }
267
+
268
+ .datatable-facet-options,
269
+ .datatable-filter-options {
270
+ max-height: $moo-datatable-facet-options-max-height;
271
+ margin: 0;
272
+ padding: 0;
273
+ overflow-y: auto;
274
+ overscroll-behavior: contain;
275
+ list-style: none;
276
+ }
277
+
278
+ .datatable-search-filter-menu .dropdown-header {
279
+ padding-block: 0.125rem 0.375rem;
280
+ padding-inline: 0.5rem;
281
+ color: var(--bs-secondary-color);
282
+ font-size: $font-size-sm;
283
+ font-weight: 600;
284
+ line-height: 1.25rem;
285
+ }
286
+
287
+ .datatable-search-filter-menu .dropdown-item,
288
+ .datatable-facet-menu .dropdown-item {
289
+ min-height: $moo-datatable-facet-item-height;
290
+ padding-block: 0.375rem;
291
+ padding-inline: 0.5rem;
292
+ border-radius: var(--bs-border-radius-sm);
293
+ gap: 0.5rem;
294
+ cursor: default;
295
+ line-height: 1.25rem;
296
+ }
297
+
298
+ .datatable-search-filter-menu .dropdown-item.active,
299
+ .datatable-facet-menu .dropdown-item.active {
300
+ color: var(--bs-dropdown-link-color);
301
+ background-color: transparent;
302
+ }
303
+
304
+ .datatable-search-filter-menu .dropdown-item:hover,
305
+ .datatable-search-filter-menu .dropdown-item:focus-visible,
306
+ .datatable-facet-menu .dropdown-item:hover,
307
+ .datatable-facet-menu .dropdown-item:focus-visible {
308
+ color: var(--bs-dropdown-link-hover-color);
309
+ background-color: var(--bs-dropdown-link-hover-bg);
310
+ outline: 0;
311
+ box-shadow: none;
312
+ }
313
+
314
+ .datatable-search-filter-menu .dropdown-item:focus:not(:focus-visible, :hover),
315
+ .datatable-facet-menu .dropdown-item:focus:not(:focus-visible, :hover) {
316
+ color: var(--bs-dropdown-link-color);
317
+ background-color: transparent;
318
+ outline: 0;
319
+ box-shadow: none;
320
+ }
321
+
322
+ .datatable-filter-group,
323
+ .datatable-filter-panel-back {
324
+ gap: 0.5rem;
325
+ }
326
+
327
+ .datatable-filter-group {
328
+ justify-content: flex-start;
329
+ }
330
+
331
+ .datatable-filter-group-summary {
332
+ color: var(--bs-secondary-color);
333
+ font-size: $font-size-sm;
334
+ font-weight: var(--bs-body-font-weight);
335
+ font-variant-numeric: tabular-nums;
336
+ }
337
+
338
+ .datatable-filter-group > [data-icon],
339
+ .datatable-filter-panel-back > [data-icon] {
340
+ width: 0.875rem;
341
+ height: 0.875rem;
342
+ color: var(--bs-secondary-color);
343
+ }
344
+
345
+ .datatable-filter-panel-back {
346
+ color: var(--bs-secondary-color);
347
+ font-weight: var(--bs-body-font-weight);
348
+ }
349
+
350
+ .datatable-filter-panel-back span {
351
+ color: var(--bs-body-color);
352
+ }
353
+
354
+ .datatable-filter-picker-item .text-body-secondary,
355
+ .datatable-facet-item .text-body-secondary {
356
+ flex: 0 0 auto;
357
+ font-variant-numeric: tabular-nums;
358
+ }
359
+
360
+ .datatable-filter-picker-item > [data-datatable-filter-option-label],
361
+ .datatable-facet-item > [data-datatable-facet-option-label] {
362
+ min-width: 0;
363
+ overflow: hidden;
364
+ text-overflow: ellipsis;
365
+ white-space: nowrap;
366
+ }
367
+
368
+ .datatable-filter-option-search-wrap,
369
+ .datatable-facet-search-wrap {
370
+ position: relative;
371
+ display: flex;
372
+ min-height: 2.25rem;
373
+ align-items: center;
374
+ gap: 0.5rem;
375
+ padding: 0 0.75rem;
376
+ }
377
+
378
+ .datatable-filter-option-search-wrap::after,
379
+ .datatable-facet-search-wrap::after {
380
+ position: absolute;
381
+ inset-inline: calc(-1 * var(--bs-dropdown-padding-x, 0));
382
+ inset-block-end: 0;
383
+ border-bottom: var(--bs-border-width) solid var(--bs-border-color);
384
+ content: "";
385
+ }
386
+
387
+ .datatable-dropdown-search-icon {
388
+ display: inline-flex;
389
+ flex: 0 0 auto;
390
+ align-items: center;
391
+ justify-content: center;
392
+ color: var(--bs-secondary-color);
393
+ }
394
+
395
+ .datatable-dropdown-search-icon > [data-icon] {
396
+ width: 0.875rem;
397
+ height: 0.875rem;
398
+ }
399
+
400
+ .datatable-filter-option-search,
401
+ .datatable-facet-search {
402
+ flex: 1 1 auto;
403
+ min-width: 0;
404
+ height: 2.25rem;
405
+ min-height: 2.25rem;
406
+ padding: 0;
407
+ border: 0;
408
+ border-radius: 0;
409
+ background-color: transparent;
410
+ box-shadow: none;
411
+ color: var(--bs-body-color);
412
+ font-size: 0.875rem;
413
+ line-height: 1.25rem;
414
+ }
415
+
416
+ .datatable-filter-option-search::placeholder,
417
+ .datatable-facet-search::placeholder {
418
+ color: var(--bs-secondary-color);
419
+ }
420
+
421
+ .datatable-filter-option-search:focus,
422
+ .datatable-facet-search:focus {
423
+ border-color: transparent;
424
+ background-color: transparent;
425
+ box-shadow: none;
426
+ outline: 0;
427
+ }
428
+
429
+ .datatable-filter-option-search-hidden,
430
+ .datatable-facet-search-hidden {
431
+ display: none;
432
+ }
433
+
434
+ .datatable-toolbar-filters {
435
+ display: flex;
436
+ flex: 0 1 auto;
437
+ flex-wrap: wrap;
438
+ gap: 0.5rem;
439
+ align-items: center;
440
+ }
441
+
442
+ .datatable-layout-switch {
443
+ display: flex;
444
+ flex: 0 0 auto;
445
+ align-items: center;
446
+ justify-content: flex-end;
447
+ }
448
+
449
+ .datatable-view-option {
450
+ display: inline-flex;
451
+ align-items: center;
452
+ justify-content: center;
453
+ gap: 0.375rem;
454
+ min-block-size: var(--moo-datatable-toolbar-control-height);
455
+ min-width: 2rem;
456
+ padding-inline: 0.5rem;
457
+ }
458
+
459
+ .datatable .datatable-layout-switch .btn-group-sm > .btn.datatable-view-option:has(> [data-icon="inline-start"]) {
460
+ padding-inline: 0.5rem;
461
+ }
462
+
463
+ .datatable-view-option > [data-icon] {
464
+ width: 1rem;
465
+ height: 1rem;
466
+ }
467
+
468
+ .datatable-view-toggle .btn-check:checked + .datatable-view-option {
469
+ border-color: var(--moo-border);
470
+ color: var(--bs-body-color);
471
+ background-color: var(--moo-muted-surface);
472
+ }
473
+
474
+ .datatable-view-toggle .btn-check:focus-visible + .datatable-view-option {
475
+ z-index: 3;
476
+ border-color: var(--moo-ring);
477
+ box-shadow: 0 0 0 #{$moo-form-focus-ring-width} color-mix(in srgb, #{$moo-form-focus-ring-color} 50%, transparent);
478
+ }
479
+
480
+ .datatable-view-trigger {
481
+ min-block-size: var(--moo-datatable-toolbar-control-height);
482
+ }
483
+
484
+ .datatable .datatable-toolbar-actions .btn.btn-sm.datatable-view-trigger:has(> [data-icon="inline-start"]) {
485
+ padding-inline: $btn-padding-x-sm;
486
+ }
487
+
488
+ .datatable-select-all {
489
+ display: inline-flex;
490
+ align-items: center;
491
+ gap: 0.625rem;
492
+ margin: 0;
493
+ padding-inline-start: 0;
494
+ color: var(--bs-secondary-color);
495
+ white-space: nowrap;
496
+ }
497
+
498
+ .datatable-select-all .form-check-input {
499
+ float: none;
500
+ margin: 0;
501
+ }
502
+
503
+ .datatable-select-all-table {
504
+ transform: translateY(var(--moo-datatable-table-select-all-offset-y));
505
+ }
506
+
507
+ .datatable-checkbox-target {
508
+ position: relative;
509
+ display: grid;
510
+ width: 1rem;
511
+ height: 1rem;
512
+ min-height: 1rem;
513
+ padding-inline-start: 0;
514
+ margin: 0;
515
+ place-items: center;
516
+ cursor: pointer;
517
+ }
518
+
519
+ .datatable-checkbox-target::before {
520
+ position: absolute;
521
+ inset: -0.5625rem;
522
+ border-radius: var(--bs-border-radius);
523
+ content: "";
524
+ }
525
+
526
+ .datatable-checkbox-target .form-check-input {
527
+ position: relative;
528
+ z-index: 1;
529
+ float: none;
530
+ margin: 0;
531
+ }
532
+
533
+ @media (pointer: coarse) {
534
+ .datatable-checkbox-target::before {
535
+ inset: -0.8125rem;
536
+ }
537
+ }
538
+
539
+ .datatable-table > :not(caption) > * > .datatable-col-select {
540
+ width: 2.75rem;
541
+ padding-inline-start: var(--moo-datatable-select-cell-inset);
542
+ padding-inline-end: $table-cell-padding-x;
543
+ white-space: nowrap;
544
+ }
545
+
546
+ .datatable-col-hidden {
547
+ display: none;
548
+ }
549
+
550
+ .datatable-item-cell {
551
+ display: flex;
552
+ min-width: 0;
553
+ align-items: center;
554
+ gap: 0.5rem;
555
+ }
556
+
557
+ .datatable-item-cell > .text-truncate {
558
+ flex: 1 1 auto;
559
+ min-width: 0;
560
+ }
561
+
562
+ .datatable-item-cell > .badge {
563
+ flex: 0 0 auto;
564
+ }
565
+
566
+ .datatable-icon-label {
567
+ display: inline-flex;
568
+ align-items: center;
569
+ gap: $moo-datatable-icon-label-gap;
570
+ }
571
+
572
+ .datatable-sort-trigger {
573
+ margin-inline-start: calc(-1 * var(--bs-btn-padding-x, 0.5rem));
574
+ gap: 0.5rem;
575
+ }
576
+
577
+ .datatable-sort-icon {
578
+ display: inline-flex;
579
+ align-items: center;
580
+ justify-content: center;
581
+ }
582
+
583
+ .datatable-sort-icon-asc,
584
+ .datatable-sort-icon-desc {
585
+ display: none;
586
+ }
587
+
588
+ .datatable-sort-icon > [data-icon],
589
+ .datatable-icon-label > [data-icon] {
590
+ width: 1rem;
591
+ height: 1rem;
592
+ flex: 0 0 auto;
593
+ margin: 0;
594
+ }
595
+
596
+ [data-datatable-sort-direction="asc"] .datatable-sort-icon-none,
597
+ [data-datatable-sort-direction="desc"] .datatable-sort-icon-none {
598
+ display: none;
599
+ }
600
+
601
+ [data-datatable-sort-direction="asc"] .datatable-sort-icon-asc {
602
+ display: inline-flex;
603
+ }
604
+
605
+ [data-datatable-sort-direction="desc"] .datatable-sort-icon-desc {
606
+ display: inline-flex;
607
+ }
608
+
609
+ .datatable-cards {
610
+ --moo-datatable-card-min-width: #{$moo-datatable-card-min-width};
611
+
612
+ display: grid;
613
+ gap: 0.625rem;
614
+ grid-template-columns: repeat(auto-fill, minmax(var(--moo-datatable-card-min-width), 1fr));
615
+ padding: 0.625rem;
616
+ }
617
+
618
+ .datatable-card {
619
+ position: relative;
620
+ overflow: hidden;
621
+ border: var(--bs-border-width) solid var(--bs-border-color);
622
+ border-radius: var(--bs-border-radius);
623
+ background-color: var(--bs-body-bg);
624
+ }
625
+
626
+ .datatable-card-header {
627
+ display: grid;
628
+ grid-template-columns: auto minmax(0, 1fr) auto;
629
+ gap: 0.75rem;
630
+ align-items: center;
631
+ padding: 0.5rem 0.75rem;
632
+ border-bottom: var(--bs-border-width) solid var(--bs-border-color);
633
+ background-color: color-mix(in srgb, var(--moo-surface) 50%, var(--moo-muted-surface));
634
+ }
635
+
636
+ .datatable-card-header:not(:has(> .datatable-card-select)) {
637
+ grid-template-columns: minmax(0, 1fr) auto;
638
+ }
639
+
640
+ .datatable-card-select {
641
+ display: inline-flex;
642
+ align-items: center;
643
+ justify-content: center;
644
+ }
645
+
646
+ .datatable-card-select .form-check-input {
647
+ margin: 0;
648
+ }
649
+
650
+ .datatable-card-heading {
651
+ min-width: 0;
652
+ }
653
+
654
+ .datatable-card-title {
655
+ overflow: hidden;
656
+ font-weight: 600;
657
+ text-overflow: ellipsis;
658
+ white-space: nowrap;
659
+ }
660
+
661
+ .datatable-card-code {
662
+ overflow: hidden;
663
+ color: var(--bs-secondary-color);
664
+ font-family: var(--bs-font-monospace);
665
+ font-size: var(--bs-body-font-size);
666
+ text-overflow: ellipsis;
667
+ white-space: nowrap;
668
+ }
669
+
670
+ .datatable-card-actions {
671
+ display: inline-flex;
672
+ align-items: center;
673
+ justify-content: flex-end;
674
+ }
675
+
676
+ .datatable-card-actions .btn {
677
+ min-width: 2rem;
678
+ min-height: 2rem;
679
+ padding: 0.25rem;
680
+ }
681
+
682
+ .datatable-card-list {
683
+ margin: 0;
684
+ }
685
+
686
+ .datatable-card-row {
687
+ display: grid;
688
+ grid-template-columns: minmax(var(--moo-datatable-card-label-width), 30%) minmax(0, 1fr);
689
+ gap: 0.75rem;
690
+ align-items: center;
691
+ padding: 0.375rem 0.875rem;
692
+ }
693
+
694
+ .datatable-card-row.datatable-col-hidden {
695
+ display: none;
696
+ }
697
+
698
+ .datatable-card-row:first-child {
699
+ padding-top: 0.875rem;
700
+ }
701
+
702
+ .datatable-card-row:last-child {
703
+ padding-bottom: 0.875rem;
704
+ }
705
+
706
+ .datatable-card-row dt,
707
+ .datatable-card-row dd {
708
+ min-width: 0;
709
+ margin: 0;
710
+ }
711
+
712
+ .datatable-card-row dt {
713
+ font-weight: var(--bs-body-font-weight);
714
+ color: var(--bs-secondary-color);
715
+ }
716
+
717
+ .datatable-card-value {
718
+ display: flex;
719
+ min-width: 0;
720
+ justify-content: flex-start;
721
+ text-align: start;
722
+ }
723
+
724
+ .datatable-card-value .datatable-item-cell {
725
+ justify-content: flex-start;
726
+ }
727
+
728
+ .datatable-card-value .datatable-item-cell > .text-truncate {
729
+ flex: 0 1 auto;
730
+ }
731
+
732
+ .datatable-row-selected > td {
733
+ background-color: var(--moo-muted-surface);
734
+ }
735
+
736
+ .datatable-row-selected > [data-datatable-column="actions"] {
737
+ --moo-datatable-actions-cell-bg: var(--moo-muted-surface);
738
+ background: var(--moo-muted-surface);
739
+ }
740
+
741
+ .datatable-card.datatable-row-selected {
742
+ border-color: var(--moo-border);
743
+ background-color: var(--moo-muted-surface);
744
+ }
745
+
746
+ .datatable-empty {
747
+ padding: 2rem 1rem;
748
+ border-width: var(--bs-border-width);
749
+ border-style: dashed;
750
+ border-color: var(--bs-border-color);
751
+ border-radius: var(--bs-border-radius);
752
+ text-align: center;
753
+ }
754
+
755
+ .datatable-empty-title {
756
+ font-weight: var(--bs-font-weight-semibold, 600);
757
+ }
758
+
759
+ .datatable-pagination {
760
+ display: grid;
761
+ grid-template-columns: minmax(0, 1fr) auto minmax(0, 1fr);
762
+ align-items: center;
763
+ gap: 0.75rem 1rem;
764
+ }
765
+
766
+ .datatable-page-size {
767
+ justify-self: start;
768
+ }
769
+
770
+ .datatable-page-size-trigger {
771
+ min-width: $moo-datatable-page-size-trigger-min-width;
772
+ justify-content: space-between;
773
+ }
774
+
775
+ .datatable-page-size-menu {
776
+ min-width: $moo-datatable-page-size-menu-min-width;
777
+ }
778
+
779
+ .datatable-results-summary {
780
+ justify-self: center;
781
+ text-align: center;
782
+ white-space: nowrap;
783
+ }
784
+
785
+ .datatable-page-nav {
786
+ max-width: 100%;
787
+ justify-self: end;
788
+ overflow-x: auto;
789
+ overflow-y: hidden;
790
+ -webkit-overflow-scrolling: touch;
791
+ }
792
+
793
+ .datatable-page-nav .pagination {
794
+ flex-wrap: nowrap;
795
+ justify-content: flex-end;
796
+ min-width: max-content;
797
+ }
798
+
799
+ .datatable-card-row--selection .form-check-input {
800
+ margin: 0;
801
+ }
802
+
803
+ .datatable-facet-item__indicator {
804
+ --moo-datatable-facet-item-border-radius: #{$moo-datatable-facet-item-border-radius};
805
+
806
+ display: inline-flex;
807
+ flex: 0 0 auto;
808
+ align-items: center;
809
+ justify-content: center;
810
+ width: $form-check-input-width;
811
+ height: $form-check-input-width;
812
+ border: var(--bs-border-width) solid var(--bs-border-color);
813
+ border-radius: var(--moo-datatable-facet-item-border-radius);
814
+ color: transparent;
815
+ }
816
+
817
+ .datatable-facet-item.active .datatable-facet-item__indicator {
818
+ background-color: var(--moo-foreground);
819
+ border-color: var(--moo-foreground);
820
+ color: var(--moo-surface);
821
+ }
822
+
823
+ .datatable-facet-item__indicator > [data-icon] {
824
+ width: 0.75rem;
825
+ height: 0.75rem;
826
+ }
827
+
828
+ .datatable-facet-trigger {
829
+ --bs-btn-active-bg: var(--bs-body-bg);
830
+ --bs-btn-active-border-color: var(--bs-border-color);
831
+ --bs-btn-active-color: var(--bs-body-color);
832
+ --bs-btn-border-color: var(--bs-border-color);
833
+ --bs-btn-border-radius: var(--bs-border-radius);
834
+ --bs-btn-border-width: var(--bs-border-width);
835
+ --bs-btn-font-size: #{$moo-datatable-facet-trigger-font-size};
836
+ --bs-btn-hover-bg: var(--moo-muted-surface);
837
+ --bs-btn-hover-border-color: var(--bs-border-color);
838
+ --bs-btn-hover-color: var(--bs-body-color);
839
+ --bs-btn-line-height: 1.25rem;
840
+ --bs-btn-padding-x: #{$spacer * 0.625};
841
+ --bs-btn-padding-y: 0;
842
+
843
+ display: inline-flex;
844
+ align-items: center;
845
+ gap: 0.375rem;
846
+ min-height: $moo-datatable-facet-trigger-min-height;
847
+ border-style: dashed;
848
+ color: var(--bs-secondary-color);
849
+ }
850
+
851
+ .datatable-facet-trigger:hover,
852
+ .datatable-facet-trigger:focus,
853
+ .datatable-facet-trigger:focus-visible,
854
+ .datatable-facet-trigger:active,
855
+ .datatable-facet-trigger.show {
856
+ border-color: var(--bs-border-color);
857
+ color: var(--bs-body-color);
858
+ }
859
+
860
+ .btn.datatable-facet-trigger:focus:not(:focus-visible) {
861
+ outline: 0;
862
+ box-shadow: none;
863
+ }
864
+
865
+ .btn.datatable-facet-trigger:focus-visible,
866
+ .btn.datatable-facet-trigger.show:focus-visible,
867
+ .btn.datatable-facet-trigger-active:focus-visible {
868
+ box-shadow: none;
869
+ }
870
+
871
+ .datatable-facet-trigger-active {
872
+ border-style: dashed;
873
+ border-color: var(--bs-border-color);
874
+ color: var(--bs-body-color);
875
+ }
876
+
877
+ .datatable-facet-summary {
878
+ display: inline-flex;
879
+ align-items: center;
880
+ gap: 0.25rem;
881
+ padding-inline-start: 0.5rem;
882
+ margin-inline-start: 0.5rem;
883
+ border-inline-start: var(--bs-border-width) solid var(--bs-border-color);
884
+ }
885
+
886
+ .datatable-facet-badge {
887
+ display: inline-flex;
888
+ align-items: center;
889
+ justify-content: center;
890
+ min-height: $spacer * 1.5;
891
+ padding-block: 0;
892
+ padding-inline: 0.5rem;
893
+ border: 0;
894
+ border-radius: var(--bs-border-radius-sm);
895
+ background-color: var(--moo-muted-surface);
896
+ color: var(--bs-body-color);
897
+ font-size: $font-size-base * 0.857;
898
+ font-weight: var(--bs-body-font-weight);
899
+ line-height: $spacer;
900
+ white-space: nowrap;
901
+ }
902
+
903
+ .datatable-bulk-actions {
904
+ --moo-datatable-bulk-actions-hover-scale: #{$moo-datatable-bulk-actions-hover-scale};
905
+ --moo-datatable-bulk-actions-backdrop-blur: #{$moo-datatable-bulk-actions-backdrop-blur};
906
+
907
+ position: fixed;
908
+ inset-inline-start: 50%;
909
+ inset-block-end: var(--moo-datatable-bulk-actions-bottom);
910
+ transform: translateX(-50%) scale(1);
911
+ @include transition(transform 0.15s ease-out);
912
+ z-index: var(--bs-zindex-fixed, 1030);
913
+ display: flex;
914
+ align-items: center;
915
+ gap: 0.5rem;
916
+ padding: 0.5rem;
917
+ border: var(--bs-border-width) solid var(--bs-border-color);
918
+ border-radius: var(--bs-border-radius-xl);
919
+ background-color: var(--bs-body-bg);
920
+ background-color: color-mix(in srgb, var(--bs-body-bg) 95%, transparent);
921
+ backdrop-filter: blur(var(--moo-datatable-bulk-actions-backdrop-blur));
922
+ box-shadow: var(--bs-box-shadow-lg);
923
+ }
924
+
925
+ .datatable-bulk-actions:hover,
926
+ .datatable-bulk-actions:focus-within {
927
+ transform: translateX(-50%) scale(var(--moo-datatable-bulk-actions-hover-scale));
928
+ }
929
+
930
+ .datatable-bulk-summary {
931
+ display: inline-flex;
932
+ align-items: center;
933
+ gap: 0.5rem;
934
+ white-space: nowrap;
935
+ }
936
+
937
+ .datatable-preview-shell {
938
+ max-width: $moo-datatable-preview-shell-max-width;
939
+ }
940
+
941
+ @media (max-width: 991.98px) {
942
+ .datatable-pagination {
943
+ grid-template-columns: minmax(0, 1fr) auto;
944
+ }
945
+
946
+ .datatable-results-summary {
947
+ justify-self: end;
948
+ text-align: end;
949
+ }
950
+
951
+ .datatable-page-nav {
952
+ grid-column: 1 / -1;
953
+ justify-self: start;
954
+ margin-block-start: 0.25rem;
955
+ }
956
+
957
+ .datatable-page-nav .pagination {
958
+ justify-content: flex-start;
959
+ }
960
+ }
961
+
962
+ @media (max-width: 575.98px) {
963
+ .datatable-toolbar {
964
+ display: grid;
965
+ grid-template-columns: minmax(0, 1fr) auto;
966
+ align-items: start;
967
+ }
968
+
969
+ .datatable-search-filter {
970
+ grid-column: 1 / -1;
971
+ min-width: 0;
972
+ }
973
+
974
+ .datatable-toolbar-query {
975
+ grid-column: 1 / -1;
976
+ min-width: 0;
977
+ }
978
+
979
+ .datatable-toolbar-query .datatable-search-filter {
980
+ flex: 1 1 auto;
981
+ }
982
+
983
+ .datatable-searchbar .datatable-search {
984
+ max-width: none;
985
+ }
986
+
987
+ .datatable-search-filter-menu {
988
+ max-width: calc(100vw - 2rem);
989
+ }
990
+
991
+ .datatable-search-filter-menu .dropdown-header {
992
+ padding-block-end: 0.25rem;
993
+ font-size: $font-size-sm;
994
+ }
995
+
996
+ .datatable-search-filter-menu .dropdown-item {
997
+ min-height: 1.875rem;
998
+ padding-block: 0.3125rem;
999
+ font-size: $font-size-sm;
1000
+ }
1001
+
1002
+ .datatable-toolbar-filters {
1003
+ display: flex;
1004
+ grid-column: 1 / -1;
1005
+ flex-direction: column;
1006
+ align-items: flex-start;
1007
+ min-width: 0;
1008
+ }
1009
+
1010
+ .datatable-layout-switch {
1011
+ grid-column: 2;
1012
+ justify-self: end;
1013
+ }
1014
+
1015
+ .datatable-select-all {
1016
+ grid-column: 1;
1017
+ }
1018
+
1019
+ .datatable-toolbar-actions {
1020
+ grid-column: 1 / -1;
1021
+ margin-inline-start: 0;
1022
+ justify-self: end;
1023
+ }
1024
+
1025
+ .datatable-toolbar-actions .datatable-view-trigger {
1026
+ display: inline-flex;
1027
+ align-items: center;
1028
+ justify-content: center;
1029
+ gap: 0.375rem;
1030
+ flex: 0 0 auto;
1031
+ min-width: 0;
1032
+ min-height: var(--moo-datatable-toolbar-control-height);
1033
+ inline-size: auto;
1034
+ block-size: var(--moo-datatable-toolbar-control-height);
1035
+ padding-inline: $btn-padding-x-sm;
1036
+ }
1037
+
1038
+ .datatable-toolbar-actions .btn.btn-sm.datatable-view-trigger:has(> [data-icon="inline-start"]) {
1039
+ padding-inline: $btn-padding-x-sm;
1040
+ }
1041
+
1042
+ .datatable-toolbar-actions .datatable-view-trigger > [data-icon] {
1043
+ width: 0.875rem;
1044
+ height: 0.875rem;
1045
+ }
1046
+
1047
+ .datatable-view-trigger-label {
1048
+ display: inline;
1049
+ }
1050
+
1051
+ .datatable-pagination {
1052
+ grid-template-columns: minmax(0, 1fr) auto;
1053
+ }
1054
+
1055
+ .datatable-page-nav {
1056
+ grid-column: 1 / -1;
1057
+ justify-self: start;
1058
+ }
1059
+
1060
+ .datatable-page-nav .pagination {
1061
+ justify-content: flex-start;
1062
+ }
1063
+ }
1064
+
1065
+ .datatable--release-review {
1066
+ --moo-datatable-min-width: #{$moo-datatable-release-review-min-width};
1067
+ }