@ulu/frontend 0.1.0-beta.83 → 0.1.0-beta.85

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 (177) hide show
  1. package/CHANGELOG.md +25 -0
  2. package/dist/ulu-frontend.min.css +1 -1
  3. package/docs-dev/changelog/index.html +345 -3
  4. package/docs-dev/demos/accordion/index.html +270 -0
  5. package/docs-dev/demos/badge/index.html +270 -0
  6. package/docs-dev/demos/breakpoints-manager/index.html +270 -0
  7. package/docs-dev/demos/button/index.html +270 -0
  8. package/docs-dev/demos/button-group/index.html +5532 -0
  9. package/docs-dev/demos/button-verbose/index.html +270 -0
  10. package/docs-dev/demos/callout/index.html +270 -0
  11. package/docs-dev/demos/captioned-figure/index.html +270 -0
  12. package/docs-dev/demos/card/index.html +286 -16
  13. package/docs-dev/demos/card-grid/index.html +270 -0
  14. package/docs-dev/demos/counter-list/index.html +270 -0
  15. package/docs-dev/demos/css-icons/index.html +270 -0
  16. package/docs-dev/demos/data-grid/index.html +270 -0
  17. package/docs-dev/demos/data-table/index.html +370 -100
  18. package/docs-dev/demos/details-group/index.html +270 -0
  19. package/docs-dev/demos/file-save/index.html +270 -0
  20. package/docs-dev/demos/flipcard/index.html +270 -0
  21. package/docs-dev/demos/form-theme/index.html +270 -0
  22. package/docs-dev/demos/headline-label/index.html +5502 -0
  23. package/docs-dev/demos/index.html +270 -0
  24. package/docs-dev/demos/list-inline/index.html +270 -0
  25. package/docs-dev/demos/list-lines/index.html +270 -0
  26. package/docs-dev/demos/menu-stack/index.html +270 -0
  27. package/docs-dev/demos/modals/index.html +270 -0
  28. package/docs-dev/demos/nav-strip/index.html +270 -0
  29. package/docs-dev/demos/overlay-section/index.html +270 -0
  30. package/docs-dev/demos/panel/index.html +5562 -0
  31. package/docs-dev/demos/popovers/index.html +270 -0
  32. package/docs-dev/demos/print/index.html +270 -0
  33. package/docs-dev/demos/pull-quote/index.html +270 -0
  34. package/docs-dev/demos/rail/index.html +5598 -0
  35. package/docs-dev/demos/rule/index.html +270 -0
  36. package/docs-dev/demos/scrollpoints/index.html +270 -0
  37. package/docs-dev/demos/spoke-spinner/index.html +270 -0
  38. package/docs-dev/demos/sticky-list/index.html +270 -0
  39. package/docs-dev/demos/tabs/index.html +270 -0
  40. package/docs-dev/demos/tag/index.html +270 -0
  41. package/docs-dev/demos/theme-toggle/index.html +270 -0
  42. package/docs-dev/demos/tiles/index.html +270 -0
  43. package/docs-dev/demos/tooltip/index.html +270 -0
  44. package/docs-dev/guide/building-stylesheet/index.html +270 -0
  45. package/docs-dev/guide/developing-ulu-scss-module/index.html +270 -0
  46. package/docs-dev/guide/index.html +270 -0
  47. package/docs-dev/index.html +270 -0
  48. package/docs-dev/javascript/events/index.html +270 -0
  49. package/docs-dev/javascript/index.html +270 -0
  50. package/docs-dev/javascript/settings/index.html +270 -0
  51. package/docs-dev/javascript/ui-breakpoints/index.html +270 -0
  52. package/docs-dev/javascript/ui-collapsible/index.html +270 -0
  53. package/docs-dev/javascript/ui-details-group/index.html +270 -0
  54. package/docs-dev/javascript/ui-dialog/index.html +270 -0
  55. package/docs-dev/javascript/ui-flipcard/index.html +270 -0
  56. package/docs-dev/javascript/ui-grid/index.html +270 -0
  57. package/docs-dev/javascript/ui-modal-builder/index.html +270 -0
  58. package/docs-dev/javascript/ui-overflow-scroller/index.html +270 -0
  59. package/docs-dev/javascript/ui-overflow-scroller-pager/index.html +270 -0
  60. package/docs-dev/javascript/ui-page/index.html +270 -0
  61. package/docs-dev/javascript/ui-popover/index.html +270 -0
  62. package/docs-dev/javascript/ui-print/index.html +270 -0
  63. package/docs-dev/javascript/ui-print-details/index.html +270 -0
  64. package/docs-dev/javascript/ui-programmatic-modal/index.html +270 -0
  65. package/docs-dev/javascript/ui-proxy-click/index.html +270 -0
  66. package/docs-dev/javascript/ui-resizer/index.html +270 -0
  67. package/docs-dev/javascript/ui-scroll-slider/index.html +270 -0
  68. package/docs-dev/javascript/ui-scrollpoint/index.html +270 -0
  69. package/docs-dev/javascript/ui-slider/index.html +270 -0
  70. package/docs-dev/javascript/ui-tabs/index.html +270 -0
  71. package/docs-dev/javascript/ui-theme-toggle/index.html +270 -0
  72. package/docs-dev/javascript/ui-tooltip/index.html +270 -0
  73. package/docs-dev/javascript/utils-class-logger/index.html +270 -0
  74. package/docs-dev/javascript/utils-css/index.html +270 -0
  75. package/docs-dev/javascript/utils-dom/index.html +270 -0
  76. package/docs-dev/javascript/utils-file-save/index.html +270 -0
  77. package/docs-dev/javascript/utils-floating-ui/index.html +270 -0
  78. package/docs-dev/javascript/utils-id/index.html +270 -0
  79. package/docs-dev/javascript/utils-pause-youtube-video/index.html +270 -0
  80. package/docs-dev/javascript/utils-system/index.html +270 -0
  81. package/docs-dev/sass/base/color/index.html +270 -0
  82. package/docs-dev/sass/base/elements/index.html +270 -0
  83. package/docs-dev/sass/base/index/index.html +270 -0
  84. package/docs-dev/sass/base/index.html +270 -0
  85. package/docs-dev/sass/base/keyframes/index.html +270 -0
  86. package/docs-dev/sass/base/layout/index.html +270 -0
  87. package/docs-dev/sass/base/normalize/index.html +270 -0
  88. package/docs-dev/sass/base/print/index.html +270 -0
  89. package/docs-dev/sass/base/root/index.html +270 -0
  90. package/docs-dev/sass/base/typography/index.html +270 -0
  91. package/docs-dev/sass/components/accordion/index.html +270 -0
  92. package/docs-dev/sass/components/adaptive-spacing/index.html +270 -0
  93. package/docs-dev/sass/components/badge/index.html +270 -0
  94. package/docs-dev/sass/components/basic-hero/index.html +270 -0
  95. package/docs-dev/sass/components/button/index.html +270 -0
  96. package/docs-dev/sass/components/button-group/index.html +5683 -0
  97. package/docs-dev/sass/components/button-verbose/index.html +270 -0
  98. package/docs-dev/sass/components/callout/index.html +270 -0
  99. package/docs-dev/sass/components/captioned-figure/index.html +270 -0
  100. package/docs-dev/sass/components/card/index.html +270 -0
  101. package/docs-dev/sass/components/card-grid/index.html +270 -0
  102. package/docs-dev/sass/components/counter-list/index.html +270 -0
  103. package/docs-dev/sass/components/css-icon/index.html +270 -0
  104. package/docs-dev/sass/components/data-grid/index.html +284 -14
  105. package/docs-dev/sass/components/data-table/index.html +270 -0
  106. package/docs-dev/sass/components/fill-context/index.html +270 -0
  107. package/docs-dev/sass/components/flipcard/index.html +270 -0
  108. package/docs-dev/sass/components/flipcard-grid/index.html +270 -0
  109. package/docs-dev/sass/components/form-theme/index.html +270 -0
  110. package/docs-dev/sass/components/headline-label/index.html +5713 -0
  111. package/docs-dev/sass/components/hero/index.html +270 -0
  112. package/docs-dev/sass/components/horizontal-rule/index.html +270 -0
  113. package/docs-dev/sass/components/image-grid/index.html +270 -0
  114. package/docs-dev/sass/components/index/index.html +285 -10
  115. package/docs-dev/sass/components/index.html +270 -0
  116. package/docs-dev/sass/components/links/index.html +270 -0
  117. package/docs-dev/sass/components/list-inline/index.html +270 -0
  118. package/docs-dev/sass/components/list-lines/index.html +270 -0
  119. package/docs-dev/sass/components/list-ordered/index.html +270 -0
  120. package/docs-dev/sass/components/list-unordered/index.html +270 -0
  121. package/docs-dev/sass/components/menu-stack/index.html +270 -0
  122. package/docs-dev/sass/components/modal/index.html +270 -0
  123. package/docs-dev/sass/components/nav-strip/index.html +270 -0
  124. package/docs-dev/sass/components/overlay-section/index.html +270 -0
  125. package/docs-dev/sass/components/pager/index.html +270 -0
  126. package/docs-dev/sass/components/panel/index.html +5913 -0
  127. package/docs-dev/sass/components/placeholder-block/index.html +270 -0
  128. package/docs-dev/sass/components/popover/index.html +270 -0
  129. package/docs-dev/sass/components/pull-quote/index.html +270 -0
  130. package/docs-dev/sass/components/rail/index.html +5700 -0
  131. package/docs-dev/sass/components/ratio-box/index.html +270 -0
  132. package/docs-dev/sass/components/rule/index.html +270 -0
  133. package/docs-dev/sass/components/scroll-slider/index.html +270 -0
  134. package/docs-dev/sass/components/skip-link/index.html +270 -0
  135. package/docs-dev/sass/components/slider/index.html +270 -0
  136. package/docs-dev/sass/components/spoke-spinner/index.html +270 -0
  137. package/docs-dev/sass/components/sticky-list/index.html +270 -0
  138. package/docs-dev/sass/components/table-sticky/index.html +5677 -0
  139. package/docs-dev/sass/components/tabs/index.html +270 -0
  140. package/docs-dev/sass/components/tag/index.html +270 -0
  141. package/docs-dev/sass/components/tile-button/index.html +270 -0
  142. package/docs-dev/sass/components/tile-grid/index.html +270 -0
  143. package/docs-dev/sass/components/tile-grid-overlay/index.html +270 -0
  144. package/docs-dev/sass/components/vignette/index.html +270 -0
  145. package/docs-dev/sass/components/wysiwyg/index.html +270 -0
  146. package/docs-dev/sass/core/breakpoint/index.html +271 -1
  147. package/docs-dev/sass/core/button/index.html +302 -30
  148. package/docs-dev/sass/core/color/index.html +270 -0
  149. package/docs-dev/sass/core/cssvar/index.html +270 -0
  150. package/docs-dev/sass/core/element/index.html +376 -30
  151. package/docs-dev/sass/core/index.html +270 -0
  152. package/docs-dev/sass/core/layout/index.html +270 -0
  153. package/docs-dev/sass/core/path/index.html +270 -0
  154. package/docs-dev/sass/core/selector/index.html +270 -0
  155. package/docs-dev/sass/core/typography/index.html +270 -0
  156. package/docs-dev/sass/core/units/index.html +270 -0
  157. package/docs-dev/sass/core/utils/index.html +388 -76
  158. package/docs-dev/sass/helpers/color/index.html +270 -0
  159. package/docs-dev/sass/helpers/display/index.html +270 -0
  160. package/docs-dev/sass/helpers/index/index.html +270 -0
  161. package/docs-dev/sass/helpers/index.html +270 -0
  162. package/docs-dev/sass/helpers/typography/index.html +270 -0
  163. package/docs-dev/sass/helpers/units/index.html +270 -0
  164. package/docs-dev/sass/helpers/utilities/index.html +270 -0
  165. package/docs-dev/sass/index.html +270 -0
  166. package/package.json +1 -1
  167. package/scss/_breakpoint.scss +1 -1
  168. package/scss/_button.scss +7 -5
  169. package/scss/_element.scss +16 -0
  170. package/scss/_utils.scss +7 -0
  171. package/scss/components/_button-group.scss +90 -0
  172. package/scss/components/_data-grid.scss +0 -3
  173. package/scss/components/_headline-label.scss +83 -0
  174. package/scss/components/_index.scss +30 -0
  175. package/scss/components/_panel.scss +246 -0
  176. package/scss/components/_rail.scss +120 -0
  177. package/scss/components/_table-sticky.scss +185 -0
@@ -8,6 +8,7 @@
8
8
  @forward "badge" as badge-*;
9
9
  @forward "basic-hero" as basic-hero-*;
10
10
  @forward "button" as button-*;
11
+ @forward "button-group" as button-group-*;
11
12
  @forward "button-verbose" as button-verbose-*;
12
13
  @forward "callout" as callout-*;
13
14
  @forward "card" as card-*;
@@ -20,6 +21,7 @@
20
21
  @forward "flipcard" as flipcard-*;
21
22
  @forward "flipcard-grid" as flipcard-grid-*;
22
23
  @forward "form-theme" as form-theme-*;
24
+ @forward "headline-label" as headline-label-*;
23
25
  @forward "horizontal-rule" as horizontal-rule-*;
24
26
  @forward "image-grid" as image-grid-*;
25
27
  @forward "links" as links-*;
@@ -32,9 +34,11 @@
32
34
  @forward "nav-strip" as nav-strip-*;
33
35
  @forward "overlay-section" as overlay-section-*;
34
36
  @forward "pager" as pager-*;
37
+ @forward "panel" as panel-*;
35
38
  @forward "placeholder-block" as placeholder-block-*;
36
39
  @forward "pull-quote" as pull-quote-*;
37
40
  @forward "popover" as popover-*;
41
+ @forward "rail" as rail-*;
38
42
  @forward "ratio-box" as ratio-box-*;
39
43
  @forward "rule" as rule-*;
40
44
  @forward "scroll-slider" as scroll-slider-*;
@@ -44,6 +48,7 @@
44
48
  @forward "hero" as hero-*;
45
49
  @forward "tabs" as tabs-*;
46
50
  @forward "tag" as tag-*;
51
+ @forward "table-sticky" as table-sticky-*;
47
52
  @forward "tile-grid" as tile-grid-*;
48
53
  @forward "tile-button" as tile-button-*;
49
54
  @forward "tile-grid-overlay" as tile-grid-overlay-*;
@@ -60,6 +65,7 @@
60
65
  @use "badge";
61
66
  @use "basic-hero";
62
67
  @use "button";
68
+ @use "button-group";
63
69
  @use "button-verbose";
64
70
  @use "callout";
65
71
  @use "card";
@@ -72,6 +78,7 @@
72
78
  @use "flipcard";
73
79
  @use "flipcard-grid";
74
80
  @use "form-theme";
81
+ @use "headline-label";
75
82
  @use "horizontal-rule";
76
83
  @use "image-grid";
77
84
  @use "list-lines";
@@ -84,9 +91,11 @@
84
91
  @use "nav-strip";
85
92
  @use "overlay-section";
86
93
  @use "pager";
94
+ @use "panel";
87
95
  @use "placeholder-block";
88
96
  @use "popover";
89
97
  @use "pull-quote";
98
+ @use "rail";
90
99
  @use "ratio-box";
91
100
  @use "rule";
92
101
  @use "scroll-slider";
@@ -97,6 +106,7 @@
97
106
  @use "tabs";
98
107
  @use "tag";
99
108
  @use "tile-grid";
109
+ @use "table-sticky";
100
110
  @use "tile-button";
101
111
  @use "tile-grid-overlay";
102
112
  @use "vignette";
@@ -113,6 +123,7 @@ $all-includes: (
113
123
  "badge",
114
124
  "basic-hero",
115
125
  "button",
126
+ "button-group",
116
127
  "button-verbose",
117
128
  "callout",
118
129
  "card",
@@ -125,6 +136,7 @@ $all-includes: (
125
136
  "flipcard",
126
137
  "flipcard-grid",
127
138
  "form-theme",
139
+ "headline-label",
128
140
  "horizontal-rule",
129
141
  "image-grid",
130
142
  "links",
@@ -137,7 +149,9 @@ $all-includes: (
137
149
  "nav-strip",
138
150
  "overlay-section",
139
151
  "pager",
152
+ "panel",
140
153
  "popover",
154
+ "rail",
141
155
  "ratio-box",
142
156
  "rule",
143
157
  "scroll-slider",
@@ -147,6 +161,7 @@ $all-includes: (
147
161
  "hero",
148
162
  "tabs",
149
163
  "tag",
164
+ // "table-sticky", // Has to be included (for vue plugin)
150
165
  "tile-grid",
151
166
  "tile-button",
152
167
  "tile-grid-overlay",
@@ -202,6 +217,9 @@ $current-includes: $all-includes;
202
217
  @if (list.index($includes, "button")) {
203
218
  @include button.styles;
204
219
  }
220
+ @if (list.index($includes, "button-group")) {
221
+ @include button-group.styles;
222
+ }
205
223
  @if (list.index($includes, "button-verbose")) {
206
224
  @include button-verbose.styles;
207
225
  }
@@ -247,6 +265,9 @@ $current-includes: $all-includes;
247
265
  @if (list.index($includes, "form-theme")) {
248
266
  @include form-theme.styles;
249
267
  }
268
+ @if (list.index($includes, "headline-label")) {
269
+ @include headline-label.styles;
270
+ }
250
271
  @if (list.index($includes, "horizontal-rule")) {
251
272
  @include horizontal-rule.styles;
252
273
  }
@@ -283,6 +304,9 @@ $current-includes: $all-includes;
283
304
  @if (list.index($includes, "pager")) {
284
305
  @include pager.styles;
285
306
  }
307
+ @if (list.index($includes, "panel")) {
308
+ @include panel.styles;
309
+ }
286
310
  @if (list.index($includes, "placeholder-block")) {
287
311
  @include placeholder-block.styles;
288
312
  }
@@ -292,6 +316,9 @@ $current-includes: $all-includes;
292
316
  @if (list.index($includes, "pull-quote")) {
293
317
  @include pull-quote.styles;
294
318
  }
319
+ @if (list.index($includes, "rail")) {
320
+ @include rail.styles;
321
+ }
295
322
  @if (list.index($includes, "ratio-box")) {
296
323
  @include ratio-box.styles;
297
324
  }
@@ -313,6 +340,9 @@ $current-includes: $all-includes;
313
340
  @if (list.index($includes, "tabs")) {
314
341
  @include tabs.styles;
315
342
  }
343
+ @if (list.index($includes, "table-sticky")) {
344
+ @include table-sticky.styles;
345
+ }
316
346
  @if (list.index($includes, "tile-grid")) {
317
347
  @include tile-grid.styles;
318
348
  }
@@ -0,0 +1,246 @@
1
+ ////
2
+ /// @group panel
3
+ /// A structured container for content with distinct header, body, and footer sections that can bleed to the edges.
4
+ ////
5
+
6
+ @use "sass:map";
7
+ @use "sass:list";
8
+ @use "sass:meta";
9
+
10
+ @use "../utils";
11
+ @use "../selector";
12
+ @use "../color";
13
+ @use "../element";
14
+ @use "../breakpoint";
15
+
16
+ // Used for function fallback
17
+ $-fallbacks: (
18
+ "box-shadow" : (
19
+ "function" : meta.get-function("get", false, "element"),
20
+ "property" : "box-shadow"
21
+ ),
22
+ "border-radius" : (
23
+ "function" : meta.get-function("get", false, "element"),
24
+ "property" : "border-radius"
25
+ ),
26
+ );
27
+
28
+ /// Module Settings
29
+ /// @type Map
30
+ /// @prop {Color} background-color [rgb(255, 255, 255)] The background color of the panel
31
+ /// @prop {Color} border [null] Set border to panel
32
+ /// @prop {Dimension} border-radius [element.$config.border-radius] The border radius of the panel
33
+ /// @prop {CssValue} box-shadow [element.$config.box-shadow] The box-shadow of the panel
34
+ /// @prop {Dimension} margin-bottom [1.5rem] The bottom margin of the panel
35
+ /// @prop {CssValue} overflow [null] Value for overflow, not included by default as it interferes with position sticky, but could be useful for cropping if that's needed (can be set on rows too)
36
+
37
+ $config: (
38
+ "background-color" : rgb(255, 255, 255),
39
+ "border" : null,
40
+ "border-radius" : true,
41
+ "box-shadow" : true,
42
+ "margin-bottom" : 1.5em,
43
+ "overflow" : null,
44
+ ) !default;
45
+
46
+ /// Styles Map (for unique variations/modifiers)
47
+ /// - Use this map to define distinct visual styles for the panel
48
+ /// - This map is two levels the first level is the name of the modifier (see default below).
49
+ /// This will become the modifier for the pane; so ("transparent" : (...)) = .panel--transparent.
50
+ /// The second level is that modifier row modifiers (ie. panel__row--header) (see row options below)
51
+ /// - Keyword "default" means without modifier for both parent and row configs
52
+ /// - For example "default" as panel container modifier name will mean
53
+ /// styles for this without any modifiers
54
+ /// - In a panels row config (second level) "default" will refer to the non-modified row (ie .panel__row)
55
+ /// - Order matters, default should be first
56
+ /// - Row Options
57
+ /// - Each row can have the following options:
58
+ /// overflow: Set overflow property if needed,
59
+ /// aspect-ratio,
60
+ /// height,
61
+ /// min-height,
62
+ /// padding,
63
+ /// margin: Can be used to create gap between container and row
64
+ /// background-color,
65
+ /// font-weight,
66
+ /// font-family,
67
+ /// color,
68
+ /// box-shadow,
69
+ /// grow: Default the panel will grow to fill the containers height, passing false disables this
70
+ /// border-top: If a string is passed it will resolved as an element rule style
71
+ /// border-bottom: If a string is passed it will resolved as an element rule style
72
+ /// @type Map
73
+
74
+ $styles: (
75
+ "default" : (
76
+ "default" : (
77
+ "padding": 1em,
78
+ ),
79
+ "header" : (
80
+ "padding" : (0.75em 1em),
81
+ "background-color" : #e7e7e7,
82
+ "border-bottom" : "default",
83
+ "font-weight" : bold,
84
+ "grow" : false,
85
+ "breakpoints" : (
86
+ "small" : (
87
+ "direction" : "max",
88
+ "padding" : (0.25em 0.5em)
89
+ )
90
+ )
91
+ ),
92
+ "footer" : (
93
+ "padding" : (0.5em 1em),
94
+ "background-color" : #f4f4f4,
95
+ "border-top" : "default",
96
+ "grow" : false
97
+ ),
98
+ "separator-top" : (
99
+ "border-top" : "light",
100
+ ),
101
+ "separator-bottom" : (
102
+ "border-bottom" : "light",
103
+ )
104
+ ),
105
+ "transparent" : (
106
+ "default" : (
107
+ "padding" : (1em 0),
108
+ "margin" : (0 1em),
109
+ ),
110
+ "header" : (
111
+ "padding" : (1em 0),
112
+ "margin" : (0 1em),
113
+ "background-color" : transparent,
114
+ "grow" : false
115
+ ),
116
+ "footer" : (
117
+ "padding" : (1em 0),
118
+ "margin" : (0 1em),
119
+ "background-color" : transparent,
120
+ "grow" : false
121
+ )
122
+ ),
123
+ "compact" : (
124
+ "default" : (
125
+ "padding" : (0.25em 0.5em)
126
+ ),
127
+ "header" : (
128
+ "padding" : (0.25em 0.5em)
129
+ ),
130
+ "body" : (
131
+ "padding" : (0.5em 1em)
132
+ )
133
+ )
134
+ ) !default;
135
+
136
+ /// Change modules $config
137
+ /// @param {Map} $changes Map of changes
138
+ /// @example scss
139
+ /// @include ulu.component-panel-set(( "property" : value ));
140
+ @mixin set($changes) {
141
+ $config: map.merge($config, $changes) !global;
142
+ }
143
+
144
+ /// Get a config option
145
+ /// @param {Map} $name Name of property
146
+ /// @example scss
147
+ /// @include ulu.component-panel-get("property");
148
+ @function get($name) {
149
+ $value: utils.require-map-get($config, $name, "panel [config]");
150
+ @return utils.function-fallback($name, $value, $-fallbacks);
151
+ }
152
+
153
+ /// Set style variations
154
+ /// - See $styles for more information on map properties/structure
155
+ /// @param {Map} $changes Map of changes (options for style include all config properties)
156
+ /// @param {String} $merge-mode Merge mode see utils.map-merge() [null|"deep"|"overwrite"]
157
+ @mixin set-styles($changes, $merge-mode: null) {
158
+ $styles: utils.map-merge($styles, $changes, $merge-mode) !global;
159
+ }
160
+
161
+ /// Output component styles
162
+ /// @example scss
163
+ /// @include ulu.component-panel-styles();
164
+ @mixin styles {
165
+ $prefix: selector.class("panel");
166
+
167
+ #{ $prefix } {
168
+ display: flex;
169
+ flex-direction: column;
170
+ overflow: get("overflow");
171
+ background-color: get("background-color");
172
+ box-shadow: get("box-shadow");
173
+ border: get("border");
174
+ border-radius: get("border-radius");
175
+ }
176
+ #{ $prefix }__row {
177
+ &:first-child {
178
+ border-top-left-radius: get("border-radius");
179
+ border-top-right-radius: get("border-radius");
180
+ }
181
+ &:last-child {
182
+ border-bottom-left-radius: get("border-radius");
183
+ border-bottom-right-radius: get("border-radius");
184
+ }
185
+ }
186
+
187
+ @each $modifier, $rows in $styles {
188
+ @if ($modifier == "default") {
189
+ @each $row-name, $props in $rows {
190
+ @if ($row-name == "default") {
191
+ #{ $prefix }__row {
192
+ @include create-row-style($props);
193
+ }
194
+ } @else {
195
+ #{ $prefix }__row--#{ $row-name } {
196
+ @include create-row-style($props);
197
+ }
198
+ }
199
+ }
200
+ } @else {
201
+ #{ $prefix }--#{ $modifier } {
202
+ @each $row-name, $props in $rows {
203
+ @if ($row-name == "default") {
204
+ #{ $prefix }__row {
205
+ @include create-row-style($props);
206
+ }
207
+ } @else {
208
+ #{ $prefix }__row--#{ $row-name } {
209
+ @include create-row-style($props);
210
+ }
211
+ }
212
+ }
213
+ }
214
+ }
215
+ }
216
+ }
217
+
218
+ /// Create row styles
219
+ /// @param {Map} $props - Row Options
220
+ @mixin create-row-style($props) {
221
+ overflow: map.get($props, "overflow");
222
+ aspect-ratio: map.get($props, "aspect-ratio");
223
+ height: map.get($props, "height");
224
+ min-height: map.get($props, "min-height");
225
+ padding: map.get($props, "padding");
226
+ margin: map.get($props, "margin");
227
+ background-color: color.get(map.get($props, "background-color"));
228
+ font-weight: map.get($props, "font-weight");
229
+ font-family: map.get($props, "font-family");
230
+ color: color.get(map.get($props, "color"));
231
+ box-shadow: map.get($props, "box-shadow");
232
+ flex-grow: if(map.get($props, "grow") == false, 0, 1); // Default is grow
233
+ border-top: element.get-optional-rule-style(map.get($props, "border-top"));
234
+ border-bottom: element.get-optional-rule-style(map.get($props, "border-bottom"));
235
+
236
+
237
+ // Allow passing breakpoint maps
238
+ $breakpoints: map.get($props, "breakpoints");
239
+ $b-options: ( "directionRequired" : true );
240
+
241
+ @if ($breakpoints and list.length($breakpoints)) {
242
+ @include breakpoint.from-each($breakpoints, $b-options) using ($b-props) {
243
+ @include create-row-style($b-props);
244
+ }
245
+ }
246
+ }
@@ -0,0 +1,120 @@
1
+ ////
2
+ /// @group rail
3
+ ////
4
+ /// A horizontal, flexible container for arranging diverse inline elements.
5
+ /// It provides a consistent layout for icons, labels, buttons, or other
6
+ /// modular components, aligning content to either end or centering it.
7
+ /// Item spacing is controlled via margins, allowing for individual item gap adjustments.
8
+
9
+ @use "sass:map";
10
+ @use "sass:meta";
11
+ @use "sass:math";
12
+
13
+ @use "../utils";
14
+ @use "../color";
15
+ @use "../selector";
16
+ @use "../layout";
17
+ @use "../element";
18
+
19
+ // Used for function fallback
20
+ $-fallbacks: (
21
+ "separator" : (
22
+ "function" : meta.get-function("get-rule-style", false, "element"),
23
+ "arguments" : ("light",)
24
+ ),
25
+ );
26
+
27
+
28
+ /// Module Settings
29
+ /// @type Map
30
+ /// @prop {Dimension} gap [1em] The default space between items in the rail
31
+ /// @prop {Map} gap-modifiers [("small" : 0.5em, "large" : 2em )] Alternate gaps (use child modifiers .rail__item--gap-[name], these apply gap changes between the item and the item before it
32
+ /// @prop {Dimension} margin-bottom [1em] The default space after rail
33
+ /// @prop {CssValue} separator [true] Pass border property for separator, defaults to element rule style light
34
+
35
+ $config: (
36
+ "gap" : 1em,
37
+ "margin-bottom" : 1em,
38
+ "separator" : true,
39
+ "gap-modifiers": (
40
+ "small" : 0.5em,
41
+ "none" : 0,
42
+ "large" : 2em
43
+ ),
44
+ ) !default;
45
+
46
+ /// Change modules $config
47
+ /// @param {Map} $changes Map of changes
48
+ /// @example scss
49
+ /// @include ulu.component-rail-set(( "gap" : 1.5em ));
50
+
51
+ @mixin set($changes) {
52
+ $config: map.merge($config, $changes) !global;
53
+ }
54
+
55
+ /// Get a config option
56
+ /// @param {Map} $name Name of property
57
+ /// @example scss
58
+ /// @include ulu.component-rail-get("gap");
59
+
60
+ @function get($name) {
61
+ $value: utils.require-map-get($config, $name, "rail [config]");
62
+ @return utils.function-fallback($name, $value, $-fallbacks);
63
+ }
64
+
65
+ /// Prints component styles
66
+ /// @example scss
67
+ /// @include ulu.component-rail-styles();
68
+
69
+ @mixin styles {
70
+ $prefix: selector.class("rail");
71
+ $gap: get("gap");
72
+
73
+ #{ $prefix } {
74
+ display: flex;
75
+ align-items: center;
76
+ flex-wrap: wrap;
77
+ gap: $gap;
78
+ margin-bottom: get("margin-bottom");
79
+ max-width: 100%;
80
+ }
81
+
82
+ // Modifiers
83
+ // - Note: Originally had mods for each type of flexbox layout
84
+ // simplified to just agnostic naming and only what is currently needed
85
+ // can update this in the future to add more alignment options if
86
+ // use cases come up
87
+
88
+ #{ $prefix }--justified {
89
+ justify-content: space-between;
90
+ }
91
+ #{ $prefix }--baseline {
92
+ align-items: baseline;
93
+ }
94
+ #{ $prefix }--nowrap {
95
+ flex-wrap: nowrap;
96
+ overflow-x: auto;
97
+ }
98
+
99
+ // Item level modifiers
100
+ #{ $prefix }__item--pull {
101
+ margin-inline-start: auto;
102
+ }
103
+ #{ $prefix }__item--separator {
104
+ border-inline-start: get("separator");
105
+ padding-inline-start: $gap;
106
+ }
107
+
108
+ @each $name, $value in get("gap-modifiers") {
109
+
110
+ $calc-gap: $value - $gap;
111
+
112
+ #{ $prefix }__item--gap-#{ $name } {
113
+ margin-inline-start: $calc-gap;
114
+
115
+ &#{ $prefix }__item--separator {
116
+ padding-inline-start: $value;
117
+ }
118
+ }
119
+ }
120
+ }
@@ -0,0 +1,185 @@
1
+ ////
2
+ /// @group table-sticky
3
+ /// For use with table-sticky plugin (vue) or other framework implementations, not output by default must be enabled.
4
+ ////
5
+
6
+ @use "sass:map";
7
+ @use "sass:meta";
8
+
9
+ @use "../selector";
10
+ @use "../utils";
11
+ @use "../color";
12
+ @use "../element";
13
+
14
+
15
+ // Used for function fallback
16
+ $-fallbacks: (
17
+ "box-shadow" : (
18
+ "function" : meta.get-function("get", false, "element"),
19
+ "property" : "box-shadow"
20
+ ),
21
+ );
22
+
23
+ /// Module Settings
24
+ /// @type Map
25
+ /// @prop {CssValue} box-shadow [true] Box shadow for controls, defaults to element box-shadow
26
+
27
+ $config: (
28
+ "box-shadow": true,
29
+ "ui-color-disabled": #6490af,
30
+ ) !default;
31
+
32
+ /// Change modules $config
33
+ /// @param {Map} $changes Map of changes
34
+ /// @example scss
35
+ /// @include ulu.component-table-sticky-set(( "property" : value ));
36
+
37
+ @mixin set($changes) {
38
+ $config: map.merge($config, $changes) !global;
39
+ }
40
+
41
+ /// Get a config option
42
+ /// @param {Map} $name Name of property
43
+ /// @example scss
44
+ /// @include ulu.component-table-sticky-get("property");
45
+
46
+ @function get($name) {
47
+ $value: utils.require-map-get($config, $name, "table-sticky [config]");
48
+ @return utils.function-fallback($name, $value, $-fallbacks);
49
+ }
50
+ /// Prints component styles
51
+ /// @demo table-sticky
52
+ /// @example scss
53
+ /// @include ulu.component-table-sticky-styles();
54
+
55
+ @mixin styles {
56
+ $prefix: selector.class("table-sticky");
57
+
58
+ #{ $prefix } {
59
+ position: relative; // For controls
60
+ width: 100%;
61
+ * {
62
+ box-sizing: border-box;
63
+ }
64
+ }
65
+ #{ $prefix }__display {
66
+ overflow-x: auto;
67
+ overflow-y: hidden;
68
+ // scroll-behavior: smooth;
69
+ }
70
+ #{ $prefix }__table {
71
+ // border-collapse: collapse;
72
+ margin: 0;
73
+ padding: 0;
74
+ width: 100%;
75
+ }
76
+ #{ $prefix }__sticky-wrap {
77
+ position: sticky;
78
+ top: -1px;
79
+ left: 0;
80
+ width: 100%;
81
+ z-index: 2;
82
+ margin-bottom: 200px; // Distance from bottom of table to disable
83
+ margin-top: -200px; // Distance from bottom of table to disable
84
+ }
85
+ #{ $prefix }__sticky-wrap--first-column-header {
86
+ z-index: 4;
87
+ }
88
+ #{ $prefix }__sticky-wrap--controls {
89
+ margin-top: -52vh;
90
+ margin-bottom: 52vh;
91
+ }
92
+ #{ $prefix }__header-wrap {
93
+ position: absolute;
94
+ top: 0;
95
+ left: 0;
96
+ right: 0;
97
+ overflow: hidden;
98
+ }
99
+ #{ $prefix }__table--first-column-header,
100
+ #{ $prefix }__table--first-column {
101
+ position: absolute;
102
+ top: 0;
103
+ left: 0;
104
+ width: auto !important;
105
+ }
106
+ #{ $prefix }__table--first-column {
107
+ z-index: 3;
108
+ }
109
+ #{ $prefix }__table--header {
110
+ will-change: transform;
111
+ }
112
+ #{ $prefix }__hidden-visually {
113
+ position: absolute;
114
+ left: -10000px;
115
+ top: auto;
116
+ width: 1px;
117
+ height: 1px;
118
+ overflow: hidden;
119
+ }
120
+ // NOTE: The table caption needs to be positioned normally
121
+ // as display table-cell. Making absolute for hidden-visually
122
+ // is causing chrome to add an anonymous cell to the table resulting in a 1px
123
+ // cell under the header. Which is messing up alignments. The only solution
124
+ // without removing the <caption> (not good for WCAG) is to position it at the
125
+ // of the table so it doesn't affect the header alignments. Then cropping it to
126
+ // a pixel and using negative margin to remove it's pixel from the flow beneath
127
+ #{ $prefix }__caption {
128
+ margin-bottom: -1px;
129
+ height: 1px;
130
+ padding: 0 !important;
131
+ margin: 0 !important;
132
+ overflow: hidden;
133
+ display: none;
134
+ }
135
+ // Allow initiating scrolling by dragging first column
136
+ #{ $prefix }--can-scroll-right:not(#{ $prefix }--can-scroll-left) {
137
+ #{ $prefix }__table--first-column-header,
138
+ #{ $prefix }__table--first-column {
139
+ // pointer-events: none;
140
+ visibility: hidden;
141
+ // opacity: 0 !important;
142
+ }
143
+ }
144
+ #{ $prefix }__controls {
145
+ position: absolute;
146
+ top: 50vh;
147
+ right: 20px;
148
+ }
149
+ #{ $prefix }__controls-inner {
150
+ display: flex;
151
+ }
152
+ #{ $prefix }__control {
153
+ box-shadow: get("box-shadow");
154
+ }
155
+ #{ $prefix }__sort-button {
156
+ display: flex;
157
+ align-items: center;
158
+ font-weight: inherit;
159
+ font-style: inherit;
160
+ font-size: inherit;
161
+ }
162
+ #{ $prefix }__sort-button--focused {
163
+ outline: 2px auto Highlight;
164
+ outline: 2px auto -webkit-focus-ring-color;
165
+ }
166
+ #{ $prefix }__sort-icon {
167
+ margin-left: auto;
168
+ padding-left: 1em;
169
+ display: block;
170
+ opacity: 0.5;
171
+ .sort-active & {
172
+ opacity: 1;
173
+ }
174
+ .sort-ascending & {
175
+ #{ $prefix }__sort-icon-inner {
176
+ transform: rotate(180deg);
177
+ }
178
+ }
179
+ }
180
+ #{ $prefix }__sort-icon-inner {
181
+ display: block;
182
+ }
183
+ }
184
+
185
+