@webority/theme 0.17.3 → 0.17.4
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/purge-safelist.json +6 -0
- package/dist/webority-theme.css +1 -1
- package/package.json +1 -1
- package/scss/wui/_data.scss +168 -0
- package/scss/wui/_flow.scss +3 -0
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@webority/theme",
|
|
3
|
-
"version": "0.17.
|
|
3
|
+
"version": "0.17.4",
|
|
4
4
|
"description": "Webority shared design system — Bootstrap 5.3 SCSS overrides, --wui-* tokens, and shared component CSS. The single source of brand chrome for React portals and Razor sites.",
|
|
5
5
|
"license": "SEE LICENSE IN LICENSE",
|
|
6
6
|
"publishConfig": {
|
package/scss/wui/_data.scss
CHANGED
|
@@ -470,6 +470,14 @@
|
|
|
470
470
|
margin-left: auto;
|
|
471
471
|
gap: 8px;
|
|
472
472
|
}
|
|
473
|
+
// A filter control wider than a phone (a four-option segmented strip) scrolls inside the toolbar
|
|
474
|
+
// instead of widening the page.
|
|
475
|
+
.wui-table-toolbar-filters {
|
|
476
|
+
min-width: 0;
|
|
477
|
+
max-width: 100%;
|
|
478
|
+
overflow-x: auto;
|
|
479
|
+
scrollbar-width: none;
|
|
480
|
+
}
|
|
473
481
|
// The search box is full-width on its own; in a toolbar it is one control among several.
|
|
474
482
|
.wui-table-toolbar .search-wrap {
|
|
475
483
|
width: min(320px, 100%);
|
|
@@ -722,6 +730,166 @@
|
|
|
722
730
|
inset 0 0 0 9999px var(--bs-table-bg-state, var(--bs-table-bg-type, var(--bs-table-accent-bg)));
|
|
723
731
|
}
|
|
724
732
|
|
|
733
|
+
// Columns menu (AppColumnMenu / <app-column-menu>) and the column it hides on Razor.
|
|
734
|
+
.table-ledger .wui-col-hidden {
|
|
735
|
+
display: none;
|
|
736
|
+
}
|
|
737
|
+
.wui-column-menu {
|
|
738
|
+
min-width: 200px;
|
|
739
|
+
padding: 8px 0;
|
|
740
|
+
}
|
|
741
|
+
.wui-column-menu-title {
|
|
742
|
+
padding: 4px 14px 8px;
|
|
743
|
+
font-size: 12px;
|
|
744
|
+
font-weight: 600;
|
|
745
|
+
letter-spacing: 0.04em;
|
|
746
|
+
text-transform: uppercase;
|
|
747
|
+
color: var(--color-text-subtle);
|
|
748
|
+
}
|
|
749
|
+
.wui-column-menu-item {
|
|
750
|
+
display: flex;
|
|
751
|
+
align-items: center;
|
|
752
|
+
gap: 10px;
|
|
753
|
+
padding: 6px 14px;
|
|
754
|
+
font-size: 14px;
|
|
755
|
+
color: var(--color-text);
|
|
756
|
+
cursor: pointer;
|
|
757
|
+
}
|
|
758
|
+
.wui-column-menu-item:hover {
|
|
759
|
+
background: var(--color-bg-subtle);
|
|
760
|
+
}
|
|
761
|
+
|
|
762
|
+
// A row that opens its record (AppDataTable rowHref / onRowClick, Razor data-href).
|
|
763
|
+
.table-ledger tbody tr.wui-row-link {
|
|
764
|
+
cursor: pointer;
|
|
765
|
+
}
|
|
766
|
+
.table-ledger tbody tr.wui-row-link:focus-visible {
|
|
767
|
+
outline: 2px solid var(--color-primary);
|
|
768
|
+
outline-offset: -2px;
|
|
769
|
+
}
|
|
770
|
+
|
|
771
|
+
// Stacked on phones (AppDataTable `stackOnMobile`, Razor `stack-on-mobile`): below sm each row is a
|
|
772
|
+
// card. The first column (after the library's select/expand cells) leads the card at full width,
|
|
773
|
+
// every other cell is a "label: value" line from its data-label, the select checkbox sits in the
|
|
774
|
+
// card's top corner and the row actions close the card. The header row is visually hidden, not
|
|
775
|
+
// removed, so the column names stay available to assistive technology.
|
|
776
|
+
@include media-breakpoint-down(sm) {
|
|
777
|
+
// Cards flow with the page: no sideways scroll, and no maxHeight scroll box (an inline
|
|
778
|
+
// max-height from `maxHeight` has to be overridden, hence !important).
|
|
779
|
+
.table-wrap:has(> .table-ledger.wui-table-stack) {
|
|
780
|
+
overflow: visible;
|
|
781
|
+
max-height: none !important;
|
|
782
|
+
}
|
|
783
|
+
.table-wrap:has(> .table-ledger.wui-table-stack) .table-ledger thead th {
|
|
784
|
+
position: static;
|
|
785
|
+
}
|
|
786
|
+
.table-ledger.wui-table-stack,
|
|
787
|
+
.table-ledger.wui-table-stack > tbody,
|
|
788
|
+
.table-ledger.wui-table-stack > tfoot,
|
|
789
|
+
.table-ledger.wui-table-stack > tbody > tr,
|
|
790
|
+
.table-ledger.wui-table-stack > tfoot > tr {
|
|
791
|
+
display: block;
|
|
792
|
+
width: 100%;
|
|
793
|
+
}
|
|
794
|
+
.table-ledger.wui-table-stack > thead {
|
|
795
|
+
// Block, so overflow:hidden applies; a table-header-group ignores it and its row still
|
|
796
|
+
// widened the page.
|
|
797
|
+
display: block;
|
|
798
|
+
position: absolute;
|
|
799
|
+
width: 1px;
|
|
800
|
+
height: 1px;
|
|
801
|
+
overflow: hidden;
|
|
802
|
+
clip-path: inset(50%);
|
|
803
|
+
white-space: nowrap;
|
|
804
|
+
}
|
|
805
|
+
.table-ledger.wui-table-stack > tbody > tr,
|
|
806
|
+
.table-ledger.wui-table-stack > tfoot > tr {
|
|
807
|
+
position: relative;
|
|
808
|
+
margin-bottom: 12px;
|
|
809
|
+
padding: 12px 16px;
|
|
810
|
+
border: 1px solid var(--color-border);
|
|
811
|
+
border-radius: var(--radius-lg, 12px);
|
|
812
|
+
}
|
|
813
|
+
.table-ledger.wui-table-stack > tbody > tr > td,
|
|
814
|
+
.table-ledger.wui-table-stack > tfoot > tr > td {
|
|
815
|
+
display: flex;
|
|
816
|
+
align-items: center;
|
|
817
|
+
justify-content: space-between;
|
|
818
|
+
gap: 12px;
|
|
819
|
+
height: auto;
|
|
820
|
+
min-height: 0;
|
|
821
|
+
padding: 6px 0;
|
|
822
|
+
border: 0;
|
|
823
|
+
text-align: right;
|
|
824
|
+
// A pinned column has nothing to pin to in a card. The pinned-column selectors outrank this
|
|
825
|
+
// one by design (they must beat every table rule), so the card layout overrides them here.
|
|
826
|
+
position: static !important;
|
|
827
|
+
}
|
|
828
|
+
.table-ledger.wui-table-stack > tbody > tr > td::before,
|
|
829
|
+
.table-ledger.wui-table-stack > tfoot > tr > td::before {
|
|
830
|
+
content: attr(data-label);
|
|
831
|
+
flex: none;
|
|
832
|
+
font-size: 12px;
|
|
833
|
+
font-weight: 500;
|
|
834
|
+
color: var(--color-text-subtle);
|
|
835
|
+
text-align: left;
|
|
836
|
+
}
|
|
837
|
+
// A value takes the space beside its label and wraps inside the card rather than running past
|
|
838
|
+
// its edge (a long email under an avatar did).
|
|
839
|
+
.table-ledger.wui-table-stack > * > tr > td > * {
|
|
840
|
+
min-width: 0;
|
|
841
|
+
overflow-wrap: anywhere;
|
|
842
|
+
}
|
|
843
|
+
.table-ledger.wui-table-stack > tbody > tr > td .u-meta {
|
|
844
|
+
align-items: flex-end;
|
|
845
|
+
}
|
|
846
|
+
// The leading cell is the card's title line: full width, no label.
|
|
847
|
+
.table-ledger.wui-table-stack > * > tr > td:not(.wui-select-cell, .wui-expand-cell):is(:first-child, .wui-select-cell + td, .wui-expand-cell + td) {
|
|
848
|
+
justify-content: flex-start;
|
|
849
|
+
padding: 0 32px 6px 0;
|
|
850
|
+
text-align: left;
|
|
851
|
+
}
|
|
852
|
+
.table-ledger.wui-table-stack > * > tr > td:not(.wui-select-cell, .wui-expand-cell):is(:first-child, .wui-select-cell + td, .wui-expand-cell + td) .u-meta {
|
|
853
|
+
align-items: flex-start;
|
|
854
|
+
}
|
|
855
|
+
.table-ledger.wui-table-stack > * > tr > td:not(.wui-select-cell, .wui-expand-cell):is(:first-child, .wui-select-cell + td, .wui-expand-cell + td)::before {
|
|
856
|
+
content: none;
|
|
857
|
+
}
|
|
858
|
+
// Empty cells (a footer's blank columns) take no line.
|
|
859
|
+
.table-ledger.wui-table-stack > * > tr > td:empty {
|
|
860
|
+
display: none;
|
|
861
|
+
}
|
|
862
|
+
.table-ledger.wui-table-stack > tbody > tr > td.wui-select-cell,
|
|
863
|
+
.table-ledger.wui-table-stack > tbody > tr > td.wui-expand-cell {
|
|
864
|
+
// !important for the same reason as the static rule above: a pinned-column `left` with this
|
|
865
|
+
// `right` would stretch the cell across the card.
|
|
866
|
+
position: absolute !important;
|
|
867
|
+
top: 12px;
|
|
868
|
+
left: auto !important;
|
|
869
|
+
right: 12px;
|
|
870
|
+
width: auto;
|
|
871
|
+
min-width: 0;
|
|
872
|
+
max-width: none;
|
|
873
|
+
padding: 0;
|
|
874
|
+
}
|
|
875
|
+
.table-ledger.wui-table-stack > tbody > tr > td:has(> .u-row-actions) {
|
|
876
|
+
justify-content: flex-end;
|
|
877
|
+
margin-top: 6px;
|
|
878
|
+
padding-top: 10px;
|
|
879
|
+
border-top: 1px solid var(--color-border);
|
|
880
|
+
}
|
|
881
|
+
.table-ledger.wui-table-stack > tbody > tr > td:has(> .u-row-actions)::before {
|
|
882
|
+
content: none;
|
|
883
|
+
}
|
|
884
|
+
// The status bar becomes the card's left edge.
|
|
885
|
+
.table-ledger.wui-table-stack > tbody > tr[data-status] {
|
|
886
|
+
border-left: 3px solid var(--wui-row-status);
|
|
887
|
+
}
|
|
888
|
+
.table-ledger.wui-table-stack > tbody > tr[data-status] > td:first-child {
|
|
889
|
+
box-shadow: none;
|
|
890
|
+
}
|
|
891
|
+
}
|
|
892
|
+
|
|
725
893
|
// Totals row (AppDataTable column `footer`, or an author <tfoot> on Razor).
|
|
726
894
|
.table-ledger tfoot td {
|
|
727
895
|
height: 48px;
|
package/scss/wui/_flow.scss
CHANGED
|
@@ -805,6 +805,9 @@ button.step:focus-visible .step-circle {
|
|
|
805
805
|
grid-template-columns: repeat(var(--form-cols, 2), minmax(0, 1fr));
|
|
806
806
|
gap: 16px;
|
|
807
807
|
align-items: start;
|
|
808
|
+
// In a form row every field fills its column, so a date picker drops its compact standalone
|
|
809
|
+
// width here and lines up with the fields beside it. A .date-w-* class on the field still wins.
|
|
810
|
+
--wui-datepicker-width: 100%;
|
|
808
811
|
}
|
|
809
812
|
// Below md, collapse to 1 column.
|
|
810
813
|
@include media-breakpoint-down(md) {
|