@utahdts/utah-design-system 1.17.0 → 2.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (70) hide show
  1. package/css/1-settings/_settings-index.scss +1 -0
  2. package/css/4-elements/_elements-index.scss +0 -1
  3. package/css/6-components/_components-index.scss +1 -0
  4. package/css/6-components/base-components/buttons/_tag.scss +45 -2
  5. package/css/6-components/base-components/forms/_combo-box-input.scss +1 -0
  6. package/css/6-components/base-components/forms/_info-box.scss +35 -2
  7. package/css/6-components/base-components/forms/_switch.scss +3 -58
  8. package/css/6-components/base-components/tablesAndLists/_table.scss +79 -2
  9. package/css/6-components/base-components/widgetsIndicators/_skeleton.scss +28 -0
  10. package/css/7-utilities/_animation.scss +14 -0
  11. package/css/7-utilities/_utilities-index.scss +15 -0
  12. package/dist/index.d.ts +195 -134
  13. package/dist/style.css +230 -64
  14. package/dist/utah-design-system.es.js +2251 -2531
  15. package/dist/utah-design-system.umd.js +2147 -2426
  16. package/index.js +3 -1
  17. package/package.json +18 -19
  18. package/react/components/PROPTYPES.MD +1 -4
  19. package/react/components/buttons/ConfirmationButton/ConfirmationButton.jsx +6 -6
  20. package/react/components/forms/CalendarInput/CalendarInput.jsx +4 -2
  21. package/react/components/forms/Checkbox.jsx +0 -3
  22. package/react/components/forms/ComboBox/ComboBox.jsx +0 -3
  23. package/react/components/forms/ComboBox/ComboBoxOption.jsx +2 -2
  24. package/react/components/forms/ComboBox/context/ComboBoxContextProvider.jsx +0 -3
  25. package/react/components/forms/ComboBox/functions/selectComboBoxSelection.js +1 -3
  26. package/react/components/forms/ComboBox/internal/ComboBoxTextInput.jsx +13 -7
  27. package/react/components/forms/DateInput.jsx +19 -3
  28. package/react/components/forms/Form.jsx +2 -6
  29. package/react/components/forms/FormContext/FormContext.jsx +0 -1
  30. package/react/components/forms/FormContext/FormContextProvider.jsx +1 -4
  31. package/react/components/forms/FormContext/useFormContextInput.js +0 -13
  32. package/react/components/forms/MultiSelect/MultiSelectComboBox.jsx +45 -2
  33. package/react/components/forms/MultiSelect/MultiSelectTags.jsx +6 -1
  34. package/react/components/forms/RadioButton/RadioButton.jsx +2 -2
  35. package/react/components/forms/RadioButton/RadioButtonGroup.jsx +1 -1
  36. package/react/components/forms/RadioButton/context/RadioButtonGroupContextProvider.jsx +17 -1
  37. package/react/components/forms/Select.jsx +1 -4
  38. package/react/components/forms/TextArea.jsx +1 -4
  39. package/react/components/forms/TextInput.jsx +1 -4
  40. package/react/components/forms/TimeInput.jsx +1 -1
  41. package/react/components/navigation/items/MenuItemFlyout.jsx +9 -16
  42. package/react/components/navigation/items/MenuItemInline.jsx +11 -17
  43. package/react/components/navigation/items/MenuItemNavLink.jsx +51 -0
  44. package/react/components/navigation/items/MenuItemPlain.jsx +25 -34
  45. package/react/components/popups/Popup.jsx +3 -1
  46. package/react/components/table/TableFilterComboBox.jsx +8 -5
  47. package/react/components/table/TableFilterComboBoxAllOptions.jsx +7 -4
  48. package/react/components/table/TableFilterCustom.jsx +0 -1
  49. package/react/components/table/TableFilterDate.jsx +5 -2
  50. package/react/components/table/TableFilterDateRange.jsx +150 -0
  51. package/react/components/table/TableFilterDateRangeButtonTitle.jsx +32 -0
  52. package/react/components/table/TableFilterDateRangePopup.jsx +169 -0
  53. package/react/components/table/TableFilterSelect.jsx +7 -4
  54. package/react/components/table/TableFilterSelectAllOptions.jsx +5 -2
  55. package/react/components/table/TableFilterTextInput.jsx +7 -4
  56. package/react/components/table/TableFilters.jsx +1 -1
  57. package/react/components/table/TableHead.jsx +1 -1
  58. package/react/components/table/TableHeadCell.jsx +2 -2
  59. package/react/components/table/TableSortingRule.jsx +2 -2
  60. package/react/components/table/TableWrapper.jsx +1 -4
  61. package/react/components/table/hooks/useTableFilterRegistration.js +10 -11
  62. package/react/components/table/tableConstants.js +3 -0
  63. package/react/components/table/useCurrentValuesFromStateContext.js +6 -5
  64. package/react/components/table/util/TableContext.jsx +1 -4
  65. package/react/components/table/util/convertRecordsToFilterValue.js +2 -2
  66. package/react/components/table/util/createTableFilterFunctions.js +40 -11
  67. package/react/components/widgetsIndicators/Skeleton.jsx +22 -0
  68. package/react/contexts/UtahDesignSystemContext/UtahDesignSystemContextProvider.jsx +2 -2
  69. package/react/enums/skeletonTypes.js +8 -0
  70. package/react/hooks/debug/useDebugDidIChanges.js +18 -0
@@ -39,6 +39,7 @@ variables and settings
39
39
  --form-ele-color: #{color-swatches.$azul-05};
40
40
  --form-ele-color-light: #{color-swatches.$azul-12};
41
41
  --form-ele-disabled-color: #{color-swatches.$neutral-gray-10};
42
+ --form-ele-placeholder-color: #757575;
42
43
 
43
44
  /* ######## --------------------------------------------- ######## */
44
45
 
@@ -11,7 +11,6 @@ elemental html: h1, h2, h3, ul, li, etc.
11
11
  line-height: 1.4;
12
12
  -webkit-font-smoothing: antialiased;
13
13
  -moz-osx-font-smoothing: grayscale;
14
- background: white;
15
14
  color: var(--gray-color);
16
15
 
17
16
  h1 {
@@ -49,6 +49,7 @@ component specific, BEM (Block, Element, Modifier)
49
49
  @use "base-components/text/pre-code";
50
50
  @use "base-components/forms/input";
51
51
  @use "base-components/widgetsIndicators/badge";
52
+ @use "base-components/widgetsIndicators/skeleton";
52
53
  @use "base-components/widgetsIndicators/spinner";
53
54
  @use "base-components/tablesAndLists/table";
54
55
  @use "base-components/templates/on-this-page";
@@ -9,16 +9,59 @@
9
9
  min-height: var(--form-ele-small);
10
10
  line-height: 1;
11
11
 
12
+ &--primary-color {
13
+ background-color: var(--primary-color);
14
+ color: white;
15
+ fill: white;
16
+ }
17
+ &--primary-color-light {
18
+ background-color: var(--primary-color-light);
19
+ }
20
+ &--secondary-color {
21
+ background-color: var(--secondary-color);
22
+ color: white;
23
+ fill: white;
24
+ }
25
+ &--secondary-color-light {
26
+ background-color: var(--secondary-color-light);
27
+ }
28
+ &--accent-color {
29
+ background-color: var(--accent-color);
30
+ color: white;
31
+ fill: white;
32
+ }
33
+ &--accent-color-light {
34
+ background-color: var(--accent-color-light);
35
+ }
36
+
37
+ &--selected {
38
+ background-color: var(--gray-color);
39
+ color: white;
40
+ fill: white;
41
+
42
+ &.tag--primary-color {
43
+ background-color: var(--primary-color);
44
+ border: none;
45
+ }
46
+ &.tag--secondary-color {
47
+ background-color: var(--secondary-color);
48
+ border: none;
49
+ }
50
+ &.tag--accent-color {
51
+ background-color: var(--accent-color);
52
+ border: none;
53
+ }
54
+ }
55
+
12
56
  &__button[type="button"] {
13
57
  border: 1px solid var(--gray-medium-color);
14
58
  padding: var(--spacing-2xs) var(--spacing-xs);
15
59
  border-radius: var(--radius-small);
16
- background-color: var(--gray-light-color);
17
60
  height: 100%;
18
61
  line-height: 1.4;
19
62
 
20
63
  &.tag--selected {
21
- background-color: var(--gray-color);
64
+ background-color: var(--form-ele-color);
22
65
  color: white;
23
66
  fill: white;
24
67
  }
@@ -48,6 +48,7 @@
48
48
  z-index: 2000;
49
49
  max-height: clamp(300px, 40vh, 40vh);
50
50
  overflow: auto;
51
+ width: max-content;
51
52
  }
52
53
  &__option {
53
54
  padding: var(--spacing-2xs) var(--spacing-s);
@@ -4,7 +4,6 @@
4
4
  .info-box {
5
5
  display: flex;
6
6
  align-items: center;
7
- min-height: var(--form-ele-medium);
8
7
  background: white;
9
8
  position: relative;
10
9
  border-radius: var(--radius-small);
@@ -25,7 +24,17 @@
25
24
  &__content {
26
25
  display: flex;
27
26
  align-items: center;
28
- padding: 0 var(--spacing-s);
27
+ padding: var(--spacing-xs) var(--spacing-s);
28
+ }
29
+
30
+ &__gray {
31
+ background-color: var(--gray-light-color);
32
+ }
33
+
34
+ &__primary {
35
+ &::before {
36
+ background-color: var(--primary-color);
37
+ }
29
38
  }
30
39
 
31
40
  &__secondary {
@@ -33,5 +42,29 @@
33
42
  background-color: var(--secondary-color);
34
43
  }
35
44
  }
45
+
46
+ &__info {
47
+ &::before {
48
+ background-color: var(--info-color);
49
+ }
50
+ }
51
+
52
+ &__danger {
53
+ &::before {
54
+ background-color: var(--danger-color);
55
+ }
56
+ }
57
+
58
+ &__warning {
59
+ &::before {
60
+ background-color: var(--warning-color);
61
+ }
62
+ }
63
+
64
+ &__success {
65
+ &::before {
66
+ background-color: var(--success-color);
67
+ }
68
+ }
36
69
  }
37
70
  }
@@ -50,17 +50,15 @@
50
50
  min-height: var(--form-ele-small4x);
51
51
  }
52
52
 
53
- .switch__slider {
54
- height: var(--form-ele-small4x);
55
- width: var(--form-ele-small4x);
56
- }
57
-
58
53
  .switch__inner-label {
59
54
  font-size: var(--font-size-xs);
60
55
  height: var(--form-ele-small4x);
61
56
  line-height: var(--form-ele-small4x);
62
57
  }
63
58
  .switch__slider {
59
+ height: var(--form-ele-small4x);
60
+ width: var(--form-ele-small4x);
61
+
64
62
  [class*="utds-icon-after-"]::after,
65
63
  [class*="utds-icon-before-"]::before {
66
64
  font-size: 0.5rem;
@@ -75,9 +73,7 @@
75
73
  .switch__slider {
76
74
  height: var(--form-ele-small1x);
77
75
  width: var(--form-ele-small1x);
78
- }
79
76
 
80
- .switch__slider {
81
77
  [class*="utds-icon-after-"]::after,
82
78
  [class*="utds-icon-before-"]::before {
83
79
  font-size: 1rem;
@@ -161,55 +157,4 @@
161
157
  }
162
158
  }
163
159
  }
164
-
165
- .switch-old {
166
- display: block;
167
- box-sizing: border-box;
168
- border: none;
169
- background: none;
170
- padding: 0;
171
- position: relative;
172
- min-height: 20px;
173
- }
174
-
175
- .switch-old:focus,
176
- .switch-old:hover {
177
- outline: none;
178
- }
179
-
180
- .switch-old:focus::before,
181
- .switch-old:hover::before {
182
- box-shadow: 0 0 0.5em color-swatches.$warm-gray-02;
183
- }
184
-
185
- .switch-old::before,
186
- .switch-old::after {
187
- content: "";
188
- position: absolute;
189
- height: 16px;
190
- transition: all 0.25s ease;
191
- }
192
-
193
- .switch-old::before {
194
- left: 0;
195
- top: 0.2em;
196
- width: 32px;
197
- border: 1px solid color-swatches.$warm-gray-08;
198
- background: color-swatches.$warm-gray-08;
199
- border-radius: 16px;
200
- background-color: color-swatches.$aspen-green-08;
201
- border-color: color-swatches.$aspen-green-08;
202
- }
203
-
204
- .switch-old::after {
205
- top: 4px;
206
- background-color: #ffffff;
207
- border-radius: 50%;
208
- width: 14px;
209
- height: 14px;
210
- border: 1px solid color-swatches.$warm-gray-08;
211
- left: 16px;
212
- border-color: color-swatches.$aspen-green-08;
213
- color: color-swatches.$aspen-green-08;
214
- }
215
160
  }
@@ -224,6 +224,73 @@
224
224
  th {
225
225
  background-color: var(--gray-light-color);
226
226
  padding: var(--spacing-s) var(--spacing-2xs);
227
+ &.table-header__cell--filter-date {
228
+ & > div:not(.table-filter-date__popup) {
229
+ button{
230
+ &:not(.text-input__clear-button) {
231
+ border-width: 1px;
232
+ box-shadow: var(--hover-gray-color) 0 0 0 0;
233
+ transition: box-shadow var(--timing-xquick) ease-in-out;
234
+ white-space: nowrap;
235
+ padding-left: var(--spacing-2xs);
236
+ width: 100%;
237
+ &:hover {
238
+ box-shadow: var(--hover-gray-color) 0 0 0 5px;
239
+ border-color: black;
240
+ background: white;
241
+ color: var(--gray-color);
242
+ }
243
+
244
+ & + .date-input__calendar-icon {
245
+ pointer-events: none;
246
+ margin-right: var(--spacing-2xs);
247
+ }
248
+
249
+ &.table-header__cell--filter-date--is-empty {
250
+ color: var(--form-ele-placeholder-color);
251
+ justify-content: flex-start;
252
+ padding-left: var(--spacing-xs);
253
+ &:hover {
254
+ color: var(--form-ele-placeholder-color);
255
+ }
256
+ }
257
+ }
258
+ &.text-input__clear-button {
259
+ margin-top: var(--spacing-3xs);
260
+ }
261
+
262
+ .date-input__icon-static {
263
+ &::before {
264
+ font-size: .75rem;
265
+ margin: 0;
266
+ }
267
+ }
268
+ }
269
+ }
270
+
271
+ .table-filter-date__popup {
272
+ .popup__close-button {
273
+ position: absolute;
274
+ right: 0;
275
+ top: 0;
276
+ }
277
+ }
278
+
279
+ .table-filter-date-popup__selected-date-chiclets {
280
+ display: flex;
281
+ flex-direction: row;
282
+ margin: 0.5rem 0 -0.5rem;
283
+ padding: 0 0.25rem;
284
+ .table-filter-date-popup__selected-date-chiclet {
285
+ flex: 1;
286
+ &--selected {
287
+ height: 0.25rem;
288
+ background-color: var(--primary-color);
289
+ border-radius: 13px 13px 0 0;
290
+ }
291
+ }
292
+ }
293
+ }
227
294
  }
228
295
  th:first-child {
229
296
  border-top-left-radius: var(--radius-medium);
@@ -234,9 +301,16 @@
234
301
  border-top-right-radius: var(--radius-medium);
235
302
  border-bottom-right-radius: var(--radius-medium);
236
303
  padding: var(--spacing-s) var(--spacing-s) var(--spacing-s) var(--spacing-2xs);
304
+
305
+ & > div:not(.table-filter-date__popup) button:not(.text-input__clear-button) + .date-input__calendar-icon,
306
+ & > div:not(.table-filter-date__popup) button.text-input__clear-button {
307
+ margin-top: 0;
308
+ margin-right: calc(var(--spacing-s) + var(--spacing-2xs));
309
+ }
237
310
  }
238
- .input-wrapper {
239
- margin: 0;
311
+
312
+ // target just the filter inputs in the `th`; nested popups (like date range filter) still show their labels
313
+ th > .input-wrapper {
240
314
  label {
241
315
  /* visually hidden */
242
316
  border: 0;
@@ -248,6 +322,9 @@
248
322
  position: absolute;
249
323
  width: 1px;
250
324
  }
325
+ }
326
+ .input-wrapper {
327
+ margin: 0;
251
328
  input[type="text"] {
252
329
  border-radius: var(--radius-circle);
253
330
  }
@@ -0,0 +1,28 @@
1
+ @use "../../../1-settings/color-swatches";
2
+ @use "../../../1-settings/class-vars";
3
+ @use "../../../1-settings/font-stuff";
4
+ @use "../../../7-utilities/animation";
5
+
6
+ #{class-vars.$base-class} {
7
+ .skeleton {
8
+ animation: skeleton 2s ease-in-out .5s infinite;
9
+ background-color: var(--gray-3-1-contrast);
10
+ border-radius: var(--radius-small1x);
11
+
12
+ &--rectangle {
13
+ min-width: calc(2 * var(--spacing-6xl));
14
+ min-height: var(--spacing-4xl);
15
+ }
16
+
17
+ &--circle {
18
+ min-height: var(--spacing-4xl);
19
+ min-width: var(--spacing-4xl);
20
+ border-radius: var(--radius-circle);
21
+ }
22
+
23
+ &--line {
24
+ min-width: calc(2 * var(--spacing-6xl));
25
+ min-height: var(--spacing-l);
26
+ }
27
+ }
28
+ }
@@ -64,4 +64,18 @@
64
64
  transform: translate(0, 0);
65
65
  }
66
66
  }
67
+
68
+ @keyframes skeleton {
69
+ 0% {
70
+ opacity: 1;
71
+ }
72
+
73
+ 50% {
74
+ opacity: 0.4;
75
+ }
76
+
77
+ 100% {
78
+ opacity: 1;
79
+ }
80
+ }
67
81
  }
@@ -18,6 +18,14 @@ utility classes, atomic css
18
18
  height: 100%;
19
19
  }
20
20
 
21
+ .auto-width {
22
+ min-width: auto;
23
+ }
24
+
25
+ .auto-height {
26
+ min-height: auto;
27
+ }
28
+
21
29
  .visually-hidden, &.visually-hidden {
22
30
  border: 0;
23
31
  clip: rect(0 0 0 0);
@@ -139,4 +147,11 @@ utility classes, atomic css
139
147
  .whitespace-no-wrap {
140
148
  white-space: nowrap;
141
149
  }
150
+
151
+ /* ----- Radius ---- */
152
+ .radius-xs { border-radius: var(--radius-small1x); }
153
+ .radius-s { border-radius: var(--radius-small); }
154
+ .radius { border-radius: var(--radius-medium); }
155
+ .radius-l { border-radius: var(--radius-large); }
156
+ .radius-circle { border-radius: var(--radius-circle); }
142
157
  }