@ulu/frontend 0.2.1 → 0.3.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.
Files changed (41) hide show
  1. package/README.dev.md +16 -0
  2. package/dist/es/index.js +18 -16
  3. package/dist/es/ui/dialog.d.ts +3 -1
  4. package/dist/es/ui/dialog.d.ts.map +1 -1
  5. package/dist/es/ui/dialog.js +57 -51
  6. package/dist/es/ui/modal-builder.d.ts +6 -0
  7. package/dist/es/ui/modal-builder.d.ts.map +1 -1
  8. package/dist/es/ui/modal-builder.js +53 -45
  9. package/dist/es/utils/dialog.d.ts +14 -0
  10. package/dist/es/utils/dialog.d.ts.map +1 -0
  11. package/dist/es/utils/dialog.js +16 -0
  12. package/dist/es/utils/iframe.d.ts +15 -0
  13. package/dist/es/utils/iframe.d.ts.map +1 -0
  14. package/dist/es/utils/iframe.js +33 -0
  15. package/dist/es/utils/index.d.ts +1 -0
  16. package/dist/umd/frontend.css +1 -1
  17. package/dist/umd/ulu-frontend.umd.js +12 -12
  18. package/lib/js/exports.md +1 -0
  19. package/lib/js/ui/dialog.js +23 -3
  20. package/lib/js/ui/modal-builder.js +21 -0
  21. package/lib/js/utils/dialog.js +29 -0
  22. package/lib/js/utils/iframe.js +59 -0
  23. package/lib/js/utils/index.js +4 -1
  24. package/lib/scss/_color.scss +1 -1
  25. package/lib/scss/_element.scss +15 -0
  26. package/lib/scss/_utils.scss +22 -0
  27. package/lib/scss/base/_elements.scss +3 -0
  28. package/lib/scss/components/_accordion.scss +7 -2
  29. package/lib/scss/components/_badge.scss +1 -1
  30. package/lib/scss/components/_button-group.scss +8 -3
  31. package/lib/scss/components/_card-grid.scss +8 -14
  32. package/lib/scss/components/_card.scss +15 -13
  33. package/lib/scss/components/_data-list.scss +270 -0
  34. package/lib/scss/components/_data-table.scss +3 -1
  35. package/lib/scss/components/_index.scss +12 -0
  36. package/lib/scss/components/_menu-stack.scss +1 -1
  37. package/lib/scss/components/_modal.scss +97 -19
  38. package/lib/scss/components/_ratio-box.scss +11 -10
  39. package/lib/scss/components/_table-scroller.scss +63 -0
  40. package/lib/scss/helpers/_utilities.scss +23 -1
  41. package/package.json +4 -1
@@ -430,3 +430,18 @@ $rule-margins: (
430
430
  content: "";
431
431
  }
432
432
  }
433
+
434
+ /// Helper function to construct a border using the color module
435
+ /// Returns null if the required parameters are missing or zero, preventing output
436
+ /// @param {Dimension} $width The border width
437
+ /// @param {String|Color} $color The color value/key to resolve through color.get()
438
+ /// @param {String} $style [solid] The border style
439
+ /// @return {List|Null} The combined border shorthand, or null
440
+
441
+ @function optional-border($width, $color, $style: solid) {
442
+ // Not using () breaks syntax highlighting
443
+ @if $width and $width != 0 and $width != none and $color {
444
+ @return $width $style color.get($color);
445
+ }
446
+ @return null;
447
+ }
@@ -889,4 +889,26 @@ $config: (
889
889
 
890
890
  @function is-side($edge) {
891
891
  @return not is-end($edge);
892
+ }
893
+
894
+ /// For legacy aspect ratio conversion
895
+ /// - For a given value if it's a percentage number convert to css aspect ratio like 16/9
896
+ /// @param {String|Number} $value The ratio value to normalize.
897
+ /// @return {String} Either the original value or a converted value depending on if it was a percentage number
898
+
899
+ @function normalize-aspect-ratio($value) {
900
+ @if is-number($value) and not math.is-unitless($value) {
901
+ $info: number-info($value);
902
+ @if ($info) {
903
+ $u: map.get($info, "unit");
904
+ $v: map.get($info, "value");
905
+ @if $u == "%" {
906
+ @return string.unquote("100 / #{ $v }");
907
+ }
908
+ }
909
+ }
910
+ @if is-string($value) {
911
+ @return string.unquote($value);
912
+ }
913
+ @return $value;
892
914
  }
@@ -180,6 +180,9 @@ $config: (
180
180
  blockquote {
181
181
  margin: 0;
182
182
  }
183
+ summary {
184
+ cursor: pointer;
185
+ }
183
186
  @if get("details-animation") {
184
187
  details {
185
188
  &[open] {
@@ -163,7 +163,7 @@ $config: (
163
163
  border-bottom-left-radius: 0;
164
164
  border-bottom-right-radius: 0;
165
165
 
166
- @if (get("summary-border-enabled")) {
166
+ @if (get("summary-border-enabled")) {
167
167
  &::after {
168
168
  content: "";
169
169
  position: absolute;
@@ -191,7 +191,7 @@ $config: (
191
191
  align-items: center;
192
192
 
193
193
  @include typography.optional-size(get("summary-type-size"), $only-font-size: true);
194
- @include element.summary-remove-marker;
194
+ @include element.summary-remove-marker();
195
195
  &:hover,
196
196
  &:focus {
197
197
  background-color: color.get(get("summary-background-color-hover"));
@@ -262,6 +262,11 @@ $config: (
262
262
  & > #{ $prefix }__summary {
263
263
  border-radius: get("border-radius");
264
264
  border-bottom: none;
265
+ @if (get("summary-border-enabled")) {
266
+ &::after {
267
+ content: none;
268
+ }
269
+ }
265
270
  }
266
271
  }
267
272
  }
@@ -42,7 +42,7 @@ $config: (
42
42
  "sizes" : (
43
43
  "small" : (
44
44
  "font-size" : 1.2rem,
45
- "width" : 5rem
45
+ "width" : 4rem
46
46
  ),
47
47
  "large" : (
48
48
  "font-size" : 2.75rem,
@@ -13,11 +13,13 @@
13
13
 
14
14
  /// Module Settings
15
15
  /// @type Map
16
- /// @prop {Dimension} gap [0.45em] Gap between buttons
16
+ /// @prop {Dimension} gap [0.45em] Gap between buttons
17
+ /// @prop {Dimension} gap-joined [0] When using --joined modifier optional gap, if 0 the buttons borders will overlap, joined-gap is useful if your buttons don't have borders
17
18
  /// @prop {Boolean} no-min-width [true] Buttons within the button group should have no min width
18
19
 
19
20
  $config: (
20
21
  "gap": 0.45em,
22
+ "gap-joined" : 0,
21
23
  "no-min-width" : true
22
24
  ) !default;
23
25
 
@@ -61,13 +63,16 @@ $config: (
61
63
  #{ $prefix }--joined {
62
64
  flex-wrap: nowrap;
63
65
  overflow-x: auto;
64
- gap: 0;
66
+ gap: get("gap-joined");
65
67
  // border-radius: button.get("border-radius");
66
68
  #{ $prefix-button } {
67
69
  position: relative; // To move to front when hover/active
68
70
  border-radius: 0;
69
71
  min-width: 0;
70
- margin-left: -(button.get("border-width"));
72
+ @if (get("gap-joined") == 0) {
73
+ margin-left: -(button.get("border-width"));
74
+ }
75
+
71
76
  &:first-child {
72
77
  border-top-left-radius: $button-radius;
73
78
  border-bottom-left-radius: $button-radius;
@@ -11,16 +11,16 @@
11
11
 
12
12
  /// Module Settings
13
13
  /// @type Map
14
- /// @prop {CssValue} compact-template-columns [1fr 1fr 1fr] The template-columns of the card-grid--compact.
15
- /// @prop {Dimension} compact-gap [1rem] The grid gap of the card-grid--compact.
16
- /// @prop {Dimension} gap [2rem] The grid gap of the card-grid.
17
- /// @prop {CssValue} template-columns [1fr 1fr] The template-columns of the card-grid.
14
+ /// @prop {Dimension} gap [1.5rem] The grid gap of the card-grid.
15
+ /// @prop {Dimension} min-width [20rem] The min-width for the implicit grid columns.
16
+ /// @prop {Dimension} compact-gap [0.75rem] The grid gap of the card-grid--compact.
17
+ /// @prop {Dimension} compact-min-width [14rem] The min-width for the implicit grid columns of the card-grid--compact.
18
18
 
19
19
  $config: (
20
20
  "gap" : 1.5rem,
21
- "template-columns" : 1fr 1fr,
21
+ "min-width" : 20rem,
22
22
  "compact-gap" : 0.75rem,
23
- "compact-template-columns" : 1fr 1fr 1fr,
23
+ "compact-min-width" : 14rem,
24
24
  ) !default;
25
25
 
26
26
  /// Change modules $config
@@ -51,12 +51,11 @@ $config: (
51
51
 
52
52
  #{ $prefix } {
53
53
  display: grid;
54
- grid-template-columns: get("template-columns");
54
+ grid-template-columns: repeat(auto-fill, minmax(min(100%, get("min-width")), 1fr));
55
55
  grid-auto-rows: 1fr;
56
56
  gap: get("gap");
57
57
  margin: get("gap") 0;
58
58
  #{ $prefix-card } {
59
- max-width: none;
60
59
  margin: 0;
61
60
  &:not(#{ $prefix-card }--overlay) {
62
61
  height: 100%;
@@ -64,7 +63,7 @@ $config: (
64
63
  }
65
64
  }
66
65
  #{ $prefix }--compact {
67
- grid-template-columns: get("compact-template-columns");
66
+ grid-template-columns: repeat(auto-fill, minmax(min(100%, get("compact-min-width")), 1fr));
68
67
  gap: get("compact-gap");
69
68
  }
70
69
  #{ $prefix }--one-column {
@@ -73,9 +72,4 @@ $config: (
73
72
  #{ $prefix }--rows-fit {
74
73
  grid-auto-rows: auto;
75
74
  }
76
- @include breakpoint.max("small") {
77
- #{ $prefix } {
78
- grid-template-columns: 1fr;
79
- }
80
- }
81
75
  }
@@ -235,9 +235,6 @@ $config: (
235
235
  flex-direction: column;
236
236
  min-height: get("body-min-height");
237
237
  }
238
- #{ $prefix }__main {
239
- flex-grow: 1;
240
- }
241
238
  #{ $prefix }__footer {
242
239
  grid-column: 1;
243
240
  display: flex;
@@ -509,19 +506,23 @@ $config: (
509
506
  }
510
507
  }
511
508
  }
512
- @include when-clickable($hover: true, $extra-selector: "#{ $prefix }--overlay") {
513
- #{ $prefix }__body,
514
- #{ $prefix }__footer {
515
- background-color: color.get(get("overlay-background-color-hover"));
516
- }
517
- @if (get("overlay-shading")) {
518
- #{ $prefix }__body {
519
- @include -overlay-shading-gradient(
520
- color.get(get("overlay-background-color-hover"))
521
- );
509
+
510
+ @include when-clickable($hover: true) {
511
+ &#{ $prefix }--overlay {
512
+ #{ $prefix }__body,
513
+ #{ $prefix }__footer {
514
+ background-color: color.get(get("overlay-background-color-hover"));
515
+ }
516
+ @if (get("overlay-shading")) {
517
+ #{ $prefix }__body {
518
+ @include -overlay-shading-gradient(
519
+ color.get(get("overlay-background-color-hover"))
520
+ );
521
+ }
522
522
  }
523
523
  }
524
524
  }
525
+
525
526
  #{ $prefix }--overlay#{ $prefix }--footer-inline {
526
527
  grid-template-columns: 1fr auto;
527
528
  #{ $prefix }__footer {
@@ -561,6 +562,7 @@ $config: (
561
562
  justify-content: space-between;
562
563
  }
563
564
  #{ $prefix }__main {
565
+ flex-grow: 1;
564
566
  max-width: get("horizontal-main-max-width");
565
567
  }
566
568
  #{ $prefix }__aside {
@@ -0,0 +1,270 @@
1
+ ////
2
+ /// @group data-list
3
+ /// A highly flexible, responsive list layout designed for displaying self-explanatory
4
+ /// or loosely structured data without relying on rigid table markup. On large screens,
5
+ /// it perfectly aligns item content into distinct columns using CSS Subgrid, while
6
+ /// seamlessly adapting to a clean, stacked flex view on smaller devices. Because it
7
+ /// is fundamentally a list and not a data table, content within should be comprehensible
8
+ /// when stacked without relying on explicit column headers. It handles complex structures
9
+ /// through nested groupings, supports optional visual headers, and provides interactive
10
+ /// states for clickable rows using simple presets or custom grids.
11
+ ////
12
+
13
+ /// Benchmarks:
14
+ /// - size: 3kb (gzip 0.7 KB)
15
+
16
+ @use "sass:map";
17
+ @use "sass:math";
18
+ @use "sass:meta";
19
+
20
+ @use "../selector";
21
+ @use "../utils";
22
+ @use "../color";
23
+ @use "../breakpoint";
24
+ @use "../element";
25
+
26
+ // Used for function fallback
27
+ $-fallbacks: (
28
+ "stacked-breakpoint" : (
29
+ "function" : meta.get-function("get", false, "breakpoint"),
30
+ "property" : "default"
31
+ )
32
+ );
33
+
34
+ /// Module Settings
35
+ /// @type Map
36
+ /// @prop {String} grid-template-columns [1fr] The default master grid columns.
37
+ /// @prop {String} grid-template-columns-stacked [100%] The stacked grid columns (default is single column stack).
38
+ /// @prop {Dimension} row-gap [0] The space between list items (rows). Forced to 0 if overlap-borders is true.
39
+ /// @prop {Dimension} column-gap [1rem] The space between columns.
40
+ /// @prop {Dimension} column-gap-stacked [0.5rem] The space between stacked elements when stacked within an item.
41
+ /// @prop {Dimension} group-gap-stacked [0.25rem] The space between stacked elements inside a nested column when stacked.
42
+ /// @prop {Dimension} padding [1rem clamp(0.65rem, 3vw, 1.5rem),] The padding inside list items.
43
+ /// @prop {Boolean} overlap-borders [true] If true, applies a negative top margin to items to prevent double-thick borders between touching rows, and forces row-gap to 0.
44
+ /// @prop {Dimension} border-width [1px] The border width for the list items.
45
+ /// @prop {String} border-color ["rule-light"] The border color key for the list items.
46
+ /// @prop {Dimension} border-radius [null] The border radius for the list items.
47
+ /// @prop {CssValue} box-shadow [null] The box shadow for the list items.
48
+ /// @prop {Color} background-color [transparent] The default background color for items.
49
+ /// @prop {Color} background-color-even [null] The background color for even-numbered items (for striping).
50
+ /// @prop {Color} background-color-hover [null] The background color for items on hover.
51
+ /// @prop {Color} clickable-background-color-hover [#e8e8e8] The background color for clickable items on hover.
52
+ /// @prop {String} clickable-border-color-hover ["control-border-hover"] The border color for interactive (clickable) items on hover/focus.
53
+ /// @prop {String} stacked-breakpoint [true] The breakpoint below which groups stack. Defaults to the global default breakpoint via function fallback.
54
+ /// @prop {Number} span-count [4] The number of span modifiers to create, increase if needed, (ie. data-list__column--span-2, --span-3, ...)
55
+ /// @prop {CssValue} header-font-weight [bold] The font weight for the header row text.
56
+ /// @prop {Dimension} header-border-bottom-width [2px] The width for the bottom border of the header row.
57
+ /// @prop {String} header-border-bottom-color ["rule"] The color key for the bottom border of the header row.
58
+
59
+ $config: (
60
+ "grid-template-columns": 1fr,
61
+ "grid-template-columns-stacked": 100%,
62
+ "row-gap": 0,
63
+ "column-gap": 1rem,
64
+ "column-gap-stacked": 0.5rem,
65
+ "group-gap-stacked": 0.25rem,
66
+ "padding": 1rem clamp(0.65rem, 3vw, 1.5rem),
67
+ "overlap-borders": true,
68
+ "border-width": 1px,
69
+ "border-color": "rule-light",
70
+ "border-radius": null,
71
+ "box-shadow": null,
72
+ "background-color": transparent,
73
+ "background-color-even": #f9f9f9,
74
+ "background-color-hover": #f0f0f0,
75
+ "clickable-background-color-hover": #e8e8e8, // Slightly darker for interactive indication
76
+ "clickable-border-color-hover": "control-border-hover",
77
+ "stacked-breakpoint": true,
78
+ "span-count" : 6,
79
+ "header-font-weight": bold,
80
+ "header-border-bottom-width": 2px,
81
+ "header-border-bottom-color": "rule",
82
+ ) !default;
83
+
84
+ /// Change modules $config
85
+ /// @param {Map} $changes Map of changes
86
+ @mixin set($changes) {
87
+ $config: map.merge($config, $changes) !global;
88
+ }
89
+
90
+ /// Get a config option
91
+ /// @param {Map} $name Name of property
92
+ @function get($name) {
93
+ $value: utils.require-map-get($config, $name, "data-list [config]");
94
+ @return utils.function-fallback($name, $value, $-fallbacks);
95
+ }
96
+
97
+ /// Prints component styles
98
+ /// @demo data-list
99
+ @mixin styles {
100
+ @include utils.file-header('component', 'data-list');
101
+
102
+ $prefix: selector.class("data-list");
103
+ $stacked-bp: get("stacked-breakpoint");
104
+ $overlap: get("overlap-borders");
105
+ $border-width: get("border-width");
106
+
107
+ #{ $prefix } {
108
+ display: grid;
109
+
110
+ @if $overlap {
111
+ gap: 0; // Forced to 0 when borders overlap to prevent disjointed negative margins
112
+ } @else {
113
+ gap: var(--ulu-data-list-row-gap, get("row-gap"));
114
+ }
115
+
116
+ // Allows inline override via custom property, falls back to config default
117
+ grid-template-columns: var(--ulu-data-list-columns, get("grid-template-columns"));
118
+ list-style: none;
119
+ margin: 0;
120
+ padding: 0;
121
+
122
+ @include breakpoint.max($stacked-bp) {
123
+ // Switch to stacked grid template (defaults to 100% stack, but can be overridden for persistent cols)
124
+ grid-template-columns: var(--ulu-data-list-columns-stacked, get("grid-template-columns-stacked"));
125
+ }
126
+ }
127
+
128
+ // Row Item (Passes the grid down)
129
+ #{ $prefix }__item {
130
+ display: grid;
131
+ grid-template-columns: subgrid;
132
+ grid-column: 1 / -1;
133
+ gap: var(--ulu-data-list-column-gap, get("column-gap"));
134
+ padding: get("padding");
135
+ background-color: color.get(get("background-color"));
136
+ border: element.optional-border($border-width, get("border-color"));
137
+ border-radius: get("border-radius");
138
+ box-shadow: get("box-shadow");
139
+
140
+ @if $overlap {
141
+ margin-top: calc(-1 * #{ $border-width });
142
+ &:first-child {
143
+ margin-top: 0;
144
+ }
145
+ }
146
+
147
+
148
+
149
+ @include breakpoint.max($stacked-bp) {
150
+ // We keep display: grid/subgrid here to respect the stacked parent grid
151
+ gap: var(--ulu-data-list-column-gap-stacked, get("column-gap-stacked"));
152
+ }
153
+
154
+ @if (get("background-color-hover")) {
155
+ &:hover {
156
+ background-color: color.get(get("background-color-hover"));
157
+ }
158
+ }
159
+ }
160
+
161
+ // Interactive z-index management for borders/shadows
162
+ #{ $prefix }__item:hover,
163
+ #{ $prefix }__item:focus-within,
164
+ #{ $prefix }__header #{ $prefix }__item {
165
+ position: relative;
166
+ z-index: 2;
167
+ }
168
+
169
+ // Columns (The cells / wrappers)
170
+ #{ $prefix }__column {
171
+ display: flex;
172
+ align-items: center;
173
+ gap: var(--ulu-data-list-column-gap, get("column-gap"));
174
+ // Defensive Layout: Prevents flexbox/grid from refusing to shrink below intrinsic content size.
175
+ // Without this, a long unbroken word or URL could force the column to expand, blowing out the grid.
176
+ // It allows text-overflow: ellipsis to work safely within a column without breaking the layout.
177
+ min-width: 0;
178
+ }
179
+
180
+ // Automatic Groups (Subgrid on desktop, stack on smaller screens)
181
+ #{ $prefix }__column:has(> #{ $prefix }__column) {
182
+ display: grid;
183
+ grid-template-columns: subgrid;
184
+ // Default span is 1, use modifiers below for larger spans
185
+
186
+ @include breakpoint.max($stacked-bp) {
187
+ display: flex;
188
+ flex-direction: column;
189
+ justify-content: center;
190
+ align-items: stretch;
191
+ gap: var(--ulu-data-list-group-gap-stacked, get("group-gap-stacked")); // Tighter vertical gap when stacked
192
+ }
193
+ }
194
+
195
+ // Header Row (Optional)
196
+ #{ $prefix }__header {
197
+ display: contents; // Removes wrapper so children participate in grid
198
+
199
+ // Hide headers when stacked since columns stack
200
+ @include breakpoint.max($stacked-bp) {
201
+ display: none;
202
+ }
203
+
204
+ #{ $prefix }__item {
205
+ font-weight: get("header-font-weight");
206
+ background-color: transparent;
207
+ border-bottom: element.optional-border(get("header-border-bottom-width"), get("header-border-bottom-color"));
208
+ border-radius: 0; // Prevent rounding on headers
209
+ &:hover {
210
+ background-color: transparent; // No hover effect on headers
211
+ }
212
+ }
213
+ }
214
+
215
+ // Modifiers
216
+
217
+ // Structural Edge Modifiers (Decorating the default 1fr track)
218
+ #{ $prefix }--prefixed {
219
+ grid-template-columns: var(--ulu-data-list-columns, auto 1fr);
220
+ @include breakpoint.max($stacked-bp) {
221
+ grid-template-columns: var(--ulu-data-list-columns-stacked, auto 1fr);
222
+ }
223
+ }
224
+ #{ $prefix }--suffixed {
225
+ grid-template-columns: var(--ulu-data-list-columns, 1fr auto);
226
+ @include breakpoint.max($stacked-bp) {
227
+ grid-template-columns: var(--ulu-data-list-columns-stacked, 1fr auto);
228
+ }
229
+ }
230
+ #{ $prefix }--prefixed#{ $prefix }--suffixed {
231
+ grid-template-columns: var(--ulu-data-list-columns, auto 1fr auto);
232
+ @include breakpoint.max($stacked-bp) {
233
+ grid-template-columns: var(--ulu-data-list-columns-stacked, auto 1fr auto);
234
+ }
235
+ }
236
+
237
+ // Striped Rows
238
+ #{ $prefix }--striped {
239
+ @if (get("background-color-even")) {
240
+ #{ $prefix }__item:nth-child(even) {
241
+ background-color: color.get(get("background-color-even"));
242
+ }
243
+ }
244
+ }
245
+
246
+ // Interactive Rows (Proxy Click Support)
247
+ // Applied to parent to indicate all rows are interactive
248
+ #{ $prefix }--clickable {
249
+ #{ $prefix }__item {
250
+ cursor: pointer;
251
+ &:hover,
252
+ &:focus-within {
253
+ background-color: color.get(get("clickable-background-color-hover"));
254
+ border-color: color.get(get("clickable-border-color-hover"));
255
+ }
256
+ }
257
+ }
258
+
259
+ // Spanning (Required when a subgrid contains multiple child columns)
260
+ @for $i from 2 through get("span-count") {
261
+ #{ $prefix }__column--span-#{$i} {
262
+ grid-column: span #{$i};
263
+
264
+ // Reset span when stacked so it fits the simplified grid
265
+ @include breakpoint.max($stacked-bp) {
266
+ grid-column: auto;
267
+ }
268
+ }
269
+ }
270
+ }
@@ -27,6 +27,7 @@ $-fallbacks: (
27
27
  /// @prop {Dimension} cell-padding [(0.5em,)] Padding of the th and td elements.
28
28
  /// @prop {CssValue} text-align [left] Text align of the table.
29
29
  /// @prop {String} type-size ["small"] Font size of the table.
30
+ /// @prop {CssValue} vertical-align [top] Vertical align for td/th
30
31
  /// @prop {Color} background-color [white] Background color of table container.
31
32
  /// @prop {Color} header-background-color [#f5f4f4] Background color of the the table header.
32
33
  /// @prop {Color} body-background-color [white] Background color of table body.
@@ -58,6 +59,7 @@ $config: (
58
59
  "cell-padding" : (0.5em,),
59
60
  "text-align" : left,
60
61
  "type-size" : "small",
62
+ "vertical-align" : top,
61
63
  "background-color" : white,
62
64
  "header-background-color" : #f5f4f4,
63
65
  "body-background-color" : white,
@@ -148,9 +150,9 @@ $config: (
148
150
  border-bottom: get("caption-border-bottom");
149
151
  }
150
152
  th,
151
- tr,
152
153
  td {
153
154
  text-align: get("text-align");
155
+ vertical-align: get("vertical-align");
154
156
  }
155
157
  th {
156
158
  min-width: get("column-min-width");
@@ -19,6 +19,7 @@
19
19
  @forward "css-icon" as css-icon-*;
20
20
  @forward "data-grid" as data-grid-*;
21
21
  @forward "data-table" as data-table-*;
22
+ @forward "data-list" as data-list-*;
22
23
  @forward "definition-list" as definition-list-*;
23
24
  @forward "fill-context" as fill-context-*;
24
25
  @forward "flipcard" as flipcard-*;
@@ -52,6 +53,7 @@
52
53
  @forward "sticky-list" as sticky-list-*;
53
54
  @forward "slider" as slider-*;
54
55
  @forward "hero" as hero-*;
56
+ @forward "table-scroller" as table-scroller-*;
55
57
  @forward "tabs" as tabs-*;
56
58
  @forward "tag" as tag-*;
57
59
  @forward "tagged" as tagged-*;
@@ -82,6 +84,7 @@
82
84
  @use "css-icon";
83
85
  @use "data-grid";
84
86
  @use "data-table";
87
+ @use "data-list";
85
88
  @use "definition-list";
86
89
  @use "fill-context";
87
90
  @use "flipcard";
@@ -116,6 +119,7 @@
116
119
  @use "slider";
117
120
  @use "hero";
118
121
  @use "tabs";
122
+ @use "table-scroller";
119
123
  @use "tag";
120
124
  @use "tagged";
121
125
  @use "tile-grid";
@@ -146,6 +150,7 @@ $all-includes: (
146
150
  "css-icon",
147
151
  "data-grid",
148
152
  "data-table",
153
+ "data-list",
149
154
  "definition-list",
150
155
  "fill-context",
151
156
  "flipcard",
@@ -179,6 +184,7 @@ $all-includes: (
179
184
  "slider",
180
185
  "hero",
181
186
  "tabs",
187
+ "table-scroller",
182
188
  "tag",
183
189
  "tagged",
184
190
  "tile-grid",
@@ -281,6 +287,9 @@ $current-includes: $all-includes;
281
287
  @if (list.index($includes, "data-table")) {
282
288
  @include data-table.styles;
283
289
  }
290
+ @if (list.index($includes, "data-list")) {
291
+ @include data-list.styles;
292
+ }
284
293
  @if (list.index($includes, "definition-list")) {
285
294
  @include definition-list.styles;
286
295
  }
@@ -380,6 +389,9 @@ $current-includes: $all-includes;
380
389
  @if (list.index($includes, "tabs")) {
381
390
  @include tabs.styles;
382
391
  }
392
+ @if (list.index($includes, "table-scroller")) {
393
+ @include table-scroller.styles;
394
+ }
383
395
  @if (list.index($includes, "tile-grid")) {
384
396
  @include tile-grid.styles;
385
397
  }
@@ -296,7 +296,7 @@ $styles: (
296
296
  justify-content: space-between;
297
297
  align-items: center;
298
298
  cursor: pointer;
299
- @include element.summary-remove-marker;
299
+ @include element.summary-remove-marker();
300
300
  }
301
301
 
302
302
  // Modifiers