@enact/limestone 1.10.0 → 1.10.2

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 (133) hide show
  1. package/.github/PULL_REQUEST_TEMPLATE.md +1 -0
  2. package/ActionGuide/ActionGuide.d.ts +1 -1
  3. package/ActionGuide/ActionGuide.module.css +7 -0
  4. package/Alert/Alert.d.ts +9 -0
  5. package/Alert/Alert.js +63 -21
  6. package/Alert/Alert.module.css +41 -9
  7. package/Alert/AlertImage.module.css +5 -1
  8. package/Alert/tests/Alert-specs.js +6 -2
  9. package/BodyText/BodyText.d.ts +1 -1
  10. package/BodyText/BodyText.js +14 -9
  11. package/BodyText/BodyText.module.css +22 -1
  12. package/Button/Button.d.ts +3 -3
  13. package/Button/Button.module.css +81 -63
  14. package/CHANGELOG.md +87 -0
  15. package/Card/Card.d.ts +81 -9
  16. package/Card/Card.js +324 -84
  17. package/Card/Card.module.css +200 -25
  18. package/Card/tests/Card-specs.js +100 -0
  19. package/Checkbox/Checkbox.d.ts +2 -2
  20. package/Checkbox/Checkbox.module.css +2 -5
  21. package/CheckboxItem/CheckboxItem.d.ts +8 -1
  22. package/CheckboxItem/CheckboxItem.js +39 -12
  23. package/CheckboxItem/CheckboxItem.module.css +228 -4
  24. package/Chips/Chip.module.css +5 -2
  25. package/ContextualMenuDecorator/ContextualMenuDecorator.d.ts +2 -2
  26. package/ContextualPopupDecorator/ContextualPopup.module.css +1 -1
  27. package/ContextualPopupDecorator/ContextualPopupDecorator.js +2 -4
  28. package/ContextualPopupDecorator/tests/ContextualPopupDecorator-specs.js +39 -2
  29. package/Dropdown/Dropdown.d.ts +2 -2
  30. package/Dropdown/Dropdown.module.css +7 -7
  31. package/FixedPopupPanels/FixedPopupPanels.d.ts +2 -2
  32. package/FlexiblePopupPanels/FlexiblePopupPanels.module.css +15 -3
  33. package/FlexiblePopupPanels/index.d.ts +2 -2
  34. package/FormCheckboxItem/FormCheckboxItem.d.ts +1 -1
  35. package/FormCheckboxItem/FormCheckboxItem.js +1 -0
  36. package/FormCheckboxItem/FormCheckboxItem.module.css +1 -1
  37. package/Heading/Heading.d.ts +2 -2
  38. package/Heading/Heading.module.css +16 -0
  39. package/Icon/Icon.d.ts +22 -1
  40. package/Icon/Icon.js +21 -0
  41. package/Icon/Icon.module.css +12 -0
  42. package/Icon/IconList.js +43 -1
  43. package/IconItem/IconItem.d.ts +2 -2
  44. package/IconItem/IconItem.module.css +27 -14
  45. package/Image/Image.d.ts +1 -1
  46. package/Image/Image.module.css +1 -1
  47. package/ImageItem/ImageItem.d.ts +2 -2
  48. package/ImageItem/ImageItem.js +3 -16
  49. package/ImageItem/ImageItem.module.css +122 -97
  50. package/ImageItem/tests/ImageItem-specs.js +6 -5
  51. package/Input/Input.module.css +33 -16
  52. package/Input/InputField.module.css +22 -4
  53. package/Input/index.d.ts +1 -1
  54. package/Input/tests/Input-specs.js +2 -2
  55. package/Input/tests/InputField-specs.js +1 -1
  56. package/Item/Item.d.ts +2 -2
  57. package/Item/Item.module.css +29 -16
  58. package/KeyGuide/KeyGuide.d.ts +2 -2
  59. package/KeyGuide/KeyGuide.module.css +10 -0
  60. package/MediaOverlay/MediaOverlay.d.ts +2 -2
  61. package/MediaOverlay/MediaOverlay.module.css +18 -9
  62. package/MediaPlayer/MediaControls.module.css +3 -0
  63. package/MediaPlayer/MediaSlider.module.css +1 -0
  64. package/MediaPlayer/Times.module.css +5 -1
  65. package/MediaPlayer/index.d.ts +2 -2
  66. package/PageViews/PageViews.module.css +6 -1
  67. package/Panels/Header.module.css +74 -56
  68. package/Panels/Panel.module.css +1 -1
  69. package/Panels/index.d.ts +1 -1
  70. package/Picker/Picker.d.ts +1 -1
  71. package/Popup/Popup.module.css +4 -1
  72. package/PopupTabLayout/PopupTabLayout.d.ts +6 -6
  73. package/PopupTabLayout/PopupTabLayout.module.css +24 -6
  74. package/ProgressBar/ProgressBar.d.ts +1 -1
  75. package/ProgressBar/ProgressBar.module.css +12 -12
  76. package/ProgressBar/ProgressBarTooltip.module.css +7 -7
  77. package/ProgressButton/ProgressButton.d.ts +2 -2
  78. package/QuickGuidePanels/QuickGuidePanels.module.css +1 -1
  79. package/RadioItem/RadioItem.d.ts +1 -1
  80. package/RadioItem/RadioItem.module.css +21 -18
  81. package/Scroller/EditableWrapper.js +2 -1
  82. package/Scroller/Scroller.d.ts +12 -0
  83. package/Scroller/Scroller.js +15 -0
  84. package/Scroller/Scroller.module.css +10 -0
  85. package/Scroller/tests/Scroller-specs.js +120 -2
  86. package/Scroller/useThemeScroller.js +25 -2
  87. package/Slider/Slider.d.ts +1 -1
  88. package/Slider/Slider.module.css +539 -303
  89. package/Spinner/Spinner.d.ts +1 -1
  90. package/Spinner/Spinner.module.css +2 -2
  91. package/Steps/Steps.d.ts +1 -1
  92. package/Steps/Steps.js +12 -6
  93. package/Steps/Steps.module.css +19 -2
  94. package/Switch/Switch.module.css +17 -6
  95. package/SwitchItem/SwitchItem.d.ts +1 -1
  96. package/TabLayout/RefocusDecorator.js +1 -1
  97. package/TabLayout/TabGroup.module.css +13 -7
  98. package/TabLayout/TabLayout.js +4 -0
  99. package/ThemeDecorator/ThemeDecorator.d.ts +1 -1
  100. package/ThemeDecorator/ThemeDecorator.module.css +22 -1
  101. package/TimePicker/TimePicker.module.css +3 -0
  102. package/TooltipDecorator/Tooltip.js +68 -7
  103. package/TooltipDecorator/Tooltip.module.css +44 -23
  104. package/TooltipDecorator/TooltipDecorator.d.ts +52 -0
  105. package/TooltipDecorator/TooltipDecorator.js +42 -0
  106. package/TooltipDecorator/TooltipLabel.js +67 -14
  107. package/TooltipDecorator/tests/TooltipDecorator-specs.js +46 -0
  108. package/TooltipDecorator/useTooltip.js +14 -2
  109. package/VideoPlayer/Feedback.module.css +3 -0
  110. package/VideoPlayer/FeedbackTooltip.module.css +7 -0
  111. package/VideoPlayer/MediaTitle.module.css +9 -1
  112. package/VirtualList/VirtualList.d.ts +24 -0
  113. package/VirtualList/VirtualList.js +30 -0
  114. package/VirtualList/tests/stickTo-specs.js +115 -0
  115. package/VirtualList/tests/useEvent-specs.js +39 -0
  116. package/VirtualList/useEvent.js +45 -10
  117. package/VirtualList/useThemeVirtualList.js +20 -2
  118. package/WizardPanels/WizardPanels.module.css +1 -1
  119. package/fonts/Limestone_Icons.ttf +0 -0
  120. package/internal/DateComponentPicker/DateComponentPicker.module.css +3 -3
  121. package/internal/DateTime/DateTime.module.css +3 -0
  122. package/internal/Picker/Picker.js +8 -10
  123. package/internal/Picker/Picker.module.css +92 -137
  124. package/package.json +14 -17
  125. package/styles/color-mixins.less +4 -60
  126. package/styles/colors-game.less +5 -5
  127. package/styles/colors.less +9 -10
  128. package/styles/mixins.less +0 -46
  129. package/styles/motion-mixins.less +16 -7
  130. package/styles/motions.less +2 -2
  131. package/styles/variables.less +186 -69
  132. package/useScroll/ScrollbarPlaceholder.js +8 -3
  133. package/useScroll/useScroll.js +3 -1
@@ -34,8 +34,8 @@ Animations properties
34
34
  --lime-bounce-motion-easing-function: var(--lime-default-motion-easing-function);
35
35
  --lime-focus-in-motion-easing-function: var(--lime-EIO-motion-easing-function);
36
36
  --lime-focus-out-motion-easing-function: var(--lime-EO-motion-easing-function);
37
- --lime-press-motion-easing-function: var(--lime-EIO-motion-easing-function);
38
- --lime-release-motion-easing-function: var(--lime-EO-motion-easing-function);
37
+ --lime-press-motion-easing-function: var(--lime-EO-motion-easing-function);
38
+ --lime-release-motion-easing-function: var(--lime-EIO-motion-easing-function);
39
39
  /* ---------------------------------------
40
40
  Keyframes names
41
41
  ------------------------------------------ */
@@ -76,9 +76,6 @@ Keyframes
76
76
  }
77
77
  }
78
78
  /* ---------------------------------------
79
- Motion Variables
80
- ------------------------------------------ */
81
- /* ---------------------------------------
82
79
  Motion Mixins
83
80
  ------------------------------------------ */
84
81
  .card {
@@ -103,21 +100,26 @@ Motion Mixins
103
100
  border-style: solid;
104
101
  }
105
102
  .card .selectionContainer .selectionIcon {
106
- width: 1.875rem;
107
- height: 1.875rem;
103
+ --icon-size: 1rem;
104
+ width: 1.25rem;
105
+ height: 1.25rem;
108
106
  border-radius: 50%;
109
107
  margin: 0;
110
- line-height: 1.875rem;
108
+ line-height: 1.25rem;
111
109
  z-index: 3;
112
110
  }
113
111
  .card:not(.isCheckIcon) .selectionContainer .selectionIcon {
114
- --icon-size: 2.5rem;
115
- width: 3rem;
116
- height: 3rem;
117
- line-height: 3rem;
112
+ --icon-size: 3rem;
113
+ width: 3.75rem;
114
+ height: 3.75rem;
115
+ line-height: 3.75rem;
118
116
  }
119
117
  .card .primaryBadge,
120
118
  .card .secondaryBadge {
119
+ align-items: center;
120
+ display: flex;
121
+ justify-content: center;
122
+ text-align: center;
121
123
  position: absolute;
122
124
  width: 2.25rem;
123
125
  height: 2.25rem;
@@ -144,6 +146,27 @@ Motion Mixins
144
146
  line-height: 1.25rem;
145
147
  font-weight: var(--primitive-font-weight-regular);
146
148
  }
149
+ .card .labels {
150
+ height: fit-content;
151
+ }
152
+ .card .labels .labelContainer {
153
+ align-items: center;
154
+ gap: var(--primitive-spacing-12);
155
+ }
156
+ .card .labels .labelContainer:has(.labelIcon) {
157
+ margin-bottom: var(--primitive-spacing-6);
158
+ will-change: transform;
159
+ }
160
+ .card .labels .labelContainer:has(.labelIcon) .label {
161
+ margin-top: calc(72px - 60px);
162
+ }
163
+ .card .labels .labelContainer:has(.labelIcon) .labelIcon {
164
+ margin: 0;
165
+ }
166
+ .card .labels .labelContainer:has(.labelIcon):has(+ .captionImageIconsContainer),
167
+ .card .labels .labelContainer:has(.labelIcon):is(:last-child) {
168
+ margin-bottom: 0;
169
+ }
147
170
  .card.selected .image::after {
148
171
  content: '';
149
172
  position: absolute;
@@ -188,6 +211,15 @@ Motion Mixins
188
211
  height: auto;
189
212
  transition: transform var(--lime-focus-out-motion-duration) var(--lime-focus-out-motion-easing-function);
190
213
  }
214
+ .card.vertical .captionImageIconsContainer {
215
+ margin-top: var(--primitive-spacing-24);
216
+ gap: var(--primitive-spacing-24);
217
+ }
218
+ .card.vertical .captionImageIconsContainer .captionImageIcon {
219
+ height: var(--caption-image-height, 2rem);
220
+ width: var(--caption-image-width, 2rem);
221
+ margin: 0;
222
+ }
191
223
  .card.vertical .captions {
192
224
  padding: var(--primitive-spacing-36) 0;
193
225
  display: flex;
@@ -199,6 +231,8 @@ Motion Mixins
199
231
  height: var(--card-image-height);
200
232
  }
201
233
  .card.vertical .imageIcon {
234
+ font-size: 3.75rem;
235
+ line-height: 3.75rem;
202
236
  height: 3.75rem;
203
237
  width: 3.75rem;
204
238
  margin: 0;
@@ -206,6 +240,25 @@ Motion Mixins
206
240
  .card.vertical.captionOverlay .captions {
207
241
  padding: var(--primitive-spacing-36) var(--primitive-spacing-48);
208
242
  }
243
+ .card.vertical.captionOverlay.centeredTitle .captions {
244
+ gap: var(--primitive-spacing-24);
245
+ justify-content: center;
246
+ }
247
+ .card.vertical.captionOverlay.centeredTitle .captionCell {
248
+ max-height: fit-content;
249
+ }
250
+ .card.vertical.captionOverlay.centeredTitle .children {
251
+ height: 100%;
252
+ }
253
+ .card.vertical.captionOverlay.centeredTitle .labels {
254
+ display: none;
255
+ }
256
+ .card.vertical.captionOverlay.centeredTitle .imageIcon {
257
+ font-size: 3rem;
258
+ line-height: 3rem;
259
+ width: 3rem;
260
+ height: 3rem;
261
+ }
209
262
  .card.vertical.captionOverlay.splitCaption .caption {
210
263
  width: calc(var(--card-image-width) - (var(--primitive-spacing-48) + var(--primitive-spacing-48)));
211
264
  }
@@ -226,11 +279,18 @@ Motion Mixins
226
279
  .card.vertical:not(.hasContainer) .image {
227
280
  z-index: 1;
228
281
  }
282
+ .card.vertical:not(.hasContainer).captionOverflow .captions,
283
+ .card.vertical:not(.hasContainer).captionOverflowOnFocus .captions {
284
+ width: 23.75rem;
285
+ }
286
+ .card.vertical:not(.hasContainer).captionOverflowOnFocus .captions {
287
+ display: none;
288
+ }
229
289
  .card.vertical.selected:not(.hasContainer) .selectionContainer {
230
290
  z-index: 3;
231
291
  }
232
292
  .card.horizontal {
233
- width: 27.5rem;
293
+ width: 24.83333rem;
234
294
  height: 7rem;
235
295
  transition: transform var(--lime-focus-out-motion-duration) var(--lime-focus-out-motion-easing-function);
236
296
  }
@@ -240,6 +300,36 @@ Motion Mixins
240
300
  .card.horizontal .image {
241
301
  width: var(--card-image-width);
242
302
  }
303
+ .card.vertical .duration,
304
+ .card.horizontal .duration {
305
+ font-size: var(--primitive-font-size-48);
306
+ line-height: 1.25rem;
307
+ font-weight: var(--primitive-font-weight-semibold);
308
+ padding: var(--primitive-spacing-6) var(--primitive-spacing-12);
309
+ border-radius: var(--primitive-radius-12);
310
+ width: fit-content;
311
+ margin-left: auto;
312
+ margin-right: 0;
313
+ }
314
+ :global(.enact-locale-right-to-left) .card.vertical .duration,
315
+ :global(.enact-locale-right-to-left) .card.horizontal .duration {
316
+ margin-left: 0;
317
+ margin-right: auto;
318
+ }
319
+ .card.vertical.durationOverlay .duration,
320
+ .card.horizontal.durationOverlay .duration {
321
+ position: absolute;
322
+ bottom: var(--primitive-spacing-24);
323
+ right: var(--primitive-spacing-24);
324
+ }
325
+ .card.vertical.progressBarOverlay .progress,
326
+ .card.horizontal.progressBarOverlay .progress {
327
+ position: absolute;
328
+ bottom: 0;
329
+ left: 50%;
330
+ transform: translateX(-50%);
331
+ width: calc(100% - var(--primitive-spacing-48) * 2);
332
+ }
243
333
  :global(.spotlight-input-key) .card:global(.spottable):focus.hasContainer,
244
334
  :global(.spotlight-input-mouse) .card:global(.spottable):focus.hasContainer {
245
335
  transform: scale(1.1);
@@ -257,6 +347,10 @@ Motion Mixins
257
347
  :global(.spotlight-input-mouse) .card:global(.spottable):focus.vertical:not(.hasContainer) .selectionContainer {
258
348
  z-index: 5;
259
349
  }
350
+ :global(.spotlight-input-key) .card:global(.spottable):focus.vertical:not(.hasContainer).captionOverflowOnFocus .captions,
351
+ :global(.spotlight-input-mouse) .card:global(.spottable):focus.vertical:not(.hasContainer).captionOverflowOnFocus .captions {
352
+ display: flex;
353
+ }
260
354
  :global(.spotlight-input-touch) .card:global(.spottable):active.hasContainer {
261
355
  transform: scale(1.1);
262
356
  transition: transform var(--lime-focus-in-motion-duration) var(--lime-focus-in-motion-easing-function);
@@ -270,6 +364,9 @@ Motion Mixins
270
364
  :global(.spotlight-input-touch) .card:global(.spottable):active.vertical:not(.hasContainer) .selectionContainer {
271
365
  z-index: 5;
272
366
  }
367
+ :global(.spotlight-input-touch) .card:global(.spottable):active.vertical:not(.hasContainer).captionOverflowOnFocus .captions {
368
+ display: flex;
369
+ }
273
370
  :global(.spotlight-input-key) .card:not([disabled]):global(.spottable):focus.hasContainer.pressed,
274
371
  :global(.spotlight-input-mouse) .card:not([disabled]):global(.spottable):focus.hasContainer.pressed,
275
372
  :global(.spotlight-input-key) .card:not([disabled]):global(.spottable):focus.hasContainer:active,
@@ -342,6 +439,33 @@ Motion Mixins
342
439
  transform: scale(1.1);
343
440
  transition: transform var(--lime-release-motion-duration) var(--lime-release-motion-easing-function);
344
441
  }
442
+ .card:global(.largeText) .caption {
443
+ font-size: var(--primitive-font-size-72);
444
+ line-height: 2.08333rem;
445
+ }
446
+ .card:global(.largeText) .duration {
447
+ font-size: var(--primitive-font-size-58);
448
+ line-height: 1.45833rem;
449
+ }
450
+ .card:global(.largeText) .label {
451
+ font-size: var(--primitive-font-size-58);
452
+ line-height: 1.45833rem;
453
+ }
454
+ .card:global(.largeText).captionOverlay.splitCaption .label {
455
+ font-size: var(--primitive-font-size-72);
456
+ }
457
+ .card:global(.largeText) .selectionContainer .selectionIcon {
458
+ --icon-size: 3.6rem;
459
+ }
460
+ .card:global(.largeText):is(.isCheckIcon) .selectionContainer .selectionIcon {
461
+ --icon-size: 1.20833rem;
462
+ width: 1.5rem;
463
+ height: 1.5rem;
464
+ line-height: 1.45833rem;
465
+ }
466
+ .card:global(.neutral) .duration {
467
+ background-color: color(from var(--semantic-color-surface-overlay-default) srgb r g b / 0.5);
468
+ }
345
469
  .card:global(.neutral) .selectionContainer {
346
470
  border-color: transparent;
347
471
  }
@@ -381,6 +505,9 @@ Motion Mixins
381
505
  .card:global(.neutral).vertical.captionOverlay .captions {
382
506
  background: linear-gradient(180deg, transparent 0%, color(from var(--semantic-color-on-surface-black) srgb r g b / 0.7) 100%);
383
507
  }
508
+ .card:global(.neutral).vertical.captionOverlay.centeredTitle .captions {
509
+ background: transparent;
510
+ }
384
511
  .card:global(.neutral).vertical.captionOverlay.roundedImage .captions {
385
512
  border-bottom-left-radius: var(--semantic-radius-container);
386
513
  border-bottom-right-radius: var(--semantic-radius-container);
@@ -486,7 +613,9 @@ Motion Mixins
486
613
  color: var(--semantic-color-on-surface-main-focused);
487
614
  }
488
615
  :global(.spotlight-input-key) .card:global(.neutral):global(.spottable):focus.hasContainer .label,
489
- :global(.spotlight-input-mouse) .card:global(.neutral):global(.spottable):focus.hasContainer .label {
616
+ :global(.spotlight-input-mouse) .card:global(.neutral):global(.spottable):focus.hasContainer .label,
617
+ :global(.spotlight-input-key) .card:global(.neutral):global(.spottable):focus.hasContainer .labelIcon,
618
+ :global(.spotlight-input-mouse) .card:global(.neutral):global(.spottable):focus.hasContainer .labelIcon {
490
619
  color: var(--semantic-color-on-surface-sub-focused);
491
620
  }
492
621
  :global(.spotlight-input-key) .card:global(.neutral):global(.spottable):focus.vertical:not(.captionOverlay):not(.hasContainer):not(:global(.focusRing)) .selectionContainer,
@@ -529,12 +658,16 @@ Motion Mixins
529
658
  :global(.spotlight-input-touch) .card:global(.neutral):global(.spottable):active.hasContainer .caption {
530
659
  color: var(--semantic-color-on-surface-main-focused);
531
660
  }
532
- :global(.spotlight-input-touch) .card:global(.neutral):global(.spottable):active.hasContainer .label {
661
+ :global(.spotlight-input-touch) .card:global(.neutral):global(.spottable):active.hasContainer .label,
662
+ :global(.spotlight-input-touch) .card:global(.neutral):global(.spottable):active.hasContainer .labelIcon {
533
663
  color: var(--semantic-color-on-surface-sub-focused);
534
664
  }
535
665
  :global(.spotlight-input-touch) .card:global(.neutral):global(.spottable):active.vertical:not(.captionOverlay):not(.hasContainer):not(:global(.focusRing)) .selectionContainer {
536
666
  border-color: var(--semantic-color-stroke-main-focused);
537
667
  }
668
+ :global(.enact-a11y-high-contrast) .card:global(.neutral):global(.highContrast) .duration {
669
+ background-color: color(from var(--semantic-color-surface-overlay-default) srgb r g b / 0.5);
670
+ }
538
671
  :global(.enact-a11y-high-contrast) .card:global(.neutral):global(.highContrast) .selectionContainer {
539
672
  border-color: transparent;
540
673
  }
@@ -574,6 +707,9 @@ Motion Mixins
574
707
  :global(.enact-a11y-high-contrast) .card:global(.neutral):global(.highContrast).vertical.captionOverlay .captions {
575
708
  background: linear-gradient(180deg, transparent 0%, color(from var(--semantic-color-on-surface-black) srgb r g b / 0.7) 100%);
576
709
  }
710
+ :global(.enact-a11y-high-contrast) .card:global(.neutral):global(.highContrast).vertical.captionOverlay.centeredTitle .captions {
711
+ background: transparent;
712
+ }
577
713
  :global(.enact-a11y-high-contrast) .card:global(.neutral):global(.highContrast).vertical.captionOverlay.roundedImage .captions {
578
714
  border-bottom-left-radius: var(--semantic-radius-container);
579
715
  border-bottom-right-radius: var(--semantic-radius-container);
@@ -679,7 +815,9 @@ Motion Mixins
679
815
  color: var(--semantic-color-on-surface-main-focused);
680
816
  }
681
817
  :global(.spotlight-input-key) :global(.enact-a11y-high-contrast) .card:global(.neutral):global(.highContrast):global(.spottable):focus.hasContainer .label,
682
- :global(.spotlight-input-mouse) :global(.enact-a11y-high-contrast) .card:global(.neutral):global(.highContrast):global(.spottable):focus.hasContainer .label {
818
+ :global(.spotlight-input-mouse) :global(.enact-a11y-high-contrast) .card:global(.neutral):global(.highContrast):global(.spottable):focus.hasContainer .label,
819
+ :global(.spotlight-input-key) :global(.enact-a11y-high-contrast) .card:global(.neutral):global(.highContrast):global(.spottable):focus.hasContainer .labelIcon,
820
+ :global(.spotlight-input-mouse) :global(.enact-a11y-high-contrast) .card:global(.neutral):global(.highContrast):global(.spottable):focus.hasContainer .labelIcon {
683
821
  color: var(--semantic-color-on-surface-sub-focused);
684
822
  }
685
823
  :global(.spotlight-input-key) :global(.enact-a11y-high-contrast) .card:global(.neutral):global(.highContrast):global(.spottable):focus.vertical:not(.captionOverlay):not(.hasContainer):not(:global(.focusRing)) .selectionContainer,
@@ -722,12 +860,16 @@ Motion Mixins
722
860
  :global(.spotlight-input-touch) :global(.enact-a11y-high-contrast) .card:global(.neutral):global(.highContrast):global(.spottable):active.hasContainer .caption {
723
861
  color: var(--semantic-color-on-surface-main-focused);
724
862
  }
725
- :global(.spotlight-input-touch) :global(.enact-a11y-high-contrast) .card:global(.neutral):global(.highContrast):global(.spottable):active.hasContainer .label {
863
+ :global(.spotlight-input-touch) :global(.enact-a11y-high-contrast) .card:global(.neutral):global(.highContrast):global(.spottable):active.hasContainer .label,
864
+ :global(.spotlight-input-touch) :global(.enact-a11y-high-contrast) .card:global(.neutral):global(.highContrast):global(.spottable):active.hasContainer .labelIcon {
726
865
  color: var(--semantic-color-on-surface-sub-focused);
727
866
  }
728
867
  :global(.spotlight-input-touch) :global(.enact-a11y-high-contrast) .card:global(.neutral):global(.highContrast):global(.spottable):active.vertical:not(.captionOverlay):not(.hasContainer):not(:global(.focusRing)) .selectionContainer {
729
868
  border-color: var(--semantic-color-stroke-main-focused);
730
869
  }
870
+ .card:global(.light) .duration {
871
+ background-color: color(from var(--semantic-color-surface-overlay-default) srgb r g b / 0.5);
872
+ }
731
873
  .card:global(.light) .selectionContainer {
732
874
  border-color: transparent;
733
875
  }
@@ -767,6 +909,9 @@ Motion Mixins
767
909
  .card:global(.light).vertical.captionOverlay .captions {
768
910
  background: linear-gradient(180deg, transparent 0%, color(from var(--semantic-color-on-surface-black) srgb r g b / 0.7) 100%);
769
911
  }
912
+ .card:global(.light).vertical.captionOverlay.centeredTitle .captions {
913
+ background: transparent;
914
+ }
770
915
  .card:global(.light).vertical.captionOverlay.roundedImage .captions {
771
916
  border-bottom-left-radius: var(--semantic-radius-container);
772
917
  border-bottom-right-radius: var(--semantic-radius-container);
@@ -872,7 +1017,9 @@ Motion Mixins
872
1017
  color: var(--semantic-color-on-surface-main-focused);
873
1018
  }
874
1019
  :global(.spotlight-input-key) .card:global(.light):global(.spottable):focus.hasContainer .label,
875
- :global(.spotlight-input-mouse) .card:global(.light):global(.spottable):focus.hasContainer .label {
1020
+ :global(.spotlight-input-mouse) .card:global(.light):global(.spottable):focus.hasContainer .label,
1021
+ :global(.spotlight-input-key) .card:global(.light):global(.spottable):focus.hasContainer .labelIcon,
1022
+ :global(.spotlight-input-mouse) .card:global(.light):global(.spottable):focus.hasContainer .labelIcon {
876
1023
  color: var(--semantic-color-on-surface-sub-focused);
877
1024
  }
878
1025
  :global(.spotlight-input-key) .card:global(.light):global(.spottable):focus.vertical:not(.captionOverlay):not(.hasContainer):not(:global(.focusRing)) .selectionContainer,
@@ -915,7 +1062,8 @@ Motion Mixins
915
1062
  :global(.spotlight-input-touch) .card:global(.light):global(.spottable):active.hasContainer .caption {
916
1063
  color: var(--semantic-color-on-surface-main-focused);
917
1064
  }
918
- :global(.spotlight-input-touch) .card:global(.light):global(.spottable):active.hasContainer .label {
1065
+ :global(.spotlight-input-touch) .card:global(.light):global(.spottable):active.hasContainer .label,
1066
+ :global(.spotlight-input-touch) .card:global(.light):global(.spottable):active.hasContainer .labelIcon {
919
1067
  color: var(--semantic-color-on-surface-sub-focused);
920
1068
  }
921
1069
  :global(.spotlight-input-touch) .card:global(.light):global(.spottable):active.vertical:not(.captionOverlay):not(.hasContainer):not(:global(.focusRing)) .selectionContainer {
@@ -926,6 +1074,9 @@ Motion Mixins
926
1074
  --semantic-color-surface-default-focused: #6d2fa1;
927
1075
  --semantic-color-on-surface-main-focused: #e6e6e6;
928
1076
  }
1077
+ .card:global(.game) .duration {
1078
+ background-color: color(from var(--semantic-color-surface-overlay-default) srgb r g b / 0.5);
1079
+ }
929
1080
  .card:global(.game) .selectionContainer {
930
1081
  border-color: transparent;
931
1082
  }
@@ -965,6 +1116,9 @@ Motion Mixins
965
1116
  .card:global(.game).vertical.captionOverlay .captions {
966
1117
  background: linear-gradient(180deg, transparent 0%, color(from var(--semantic-color-on-surface-black) srgb r g b / 0.7) 100%);
967
1118
  }
1119
+ .card:global(.game).vertical.captionOverlay.centeredTitle .captions {
1120
+ background: transparent;
1121
+ }
968
1122
  .card:global(.game).vertical.captionOverlay.roundedImage .captions {
969
1123
  border-bottom-left-radius: var(--semantic-radius-container);
970
1124
  border-bottom-right-radius: var(--semantic-radius-container);
@@ -1070,7 +1224,9 @@ Motion Mixins
1070
1224
  color: var(--semantic-color-on-surface-main-focused);
1071
1225
  }
1072
1226
  :global(.spotlight-input-key) .card:global(.game):global(.spottable):focus.hasContainer .label,
1073
- :global(.spotlight-input-mouse) .card:global(.game):global(.spottable):focus.hasContainer .label {
1227
+ :global(.spotlight-input-mouse) .card:global(.game):global(.spottable):focus.hasContainer .label,
1228
+ :global(.spotlight-input-key) .card:global(.game):global(.spottable):focus.hasContainer .labelIcon,
1229
+ :global(.spotlight-input-mouse) .card:global(.game):global(.spottable):focus.hasContainer .labelIcon {
1074
1230
  color: var(--semantic-color-on-surface-sub-focused);
1075
1231
  }
1076
1232
  :global(.spotlight-input-key) .card:global(.game):global(.spottable):focus.vertical:not(.captionOverlay):not(.hasContainer):not(:global(.focusRing)) .selectionContainer,
@@ -1113,7 +1269,8 @@ Motion Mixins
1113
1269
  :global(.spotlight-input-touch) .card:global(.game):global(.spottable):active.hasContainer .caption {
1114
1270
  color: var(--semantic-color-on-surface-main-focused);
1115
1271
  }
1116
- :global(.spotlight-input-touch) .card:global(.game):global(.spottable):active.hasContainer .label {
1272
+ :global(.spotlight-input-touch) .card:global(.game):global(.spottable):active.hasContainer .label,
1273
+ :global(.spotlight-input-touch) .card:global(.game):global(.spottable):active.hasContainer .labelIcon {
1117
1274
  color: var(--semantic-color-on-surface-sub-focused);
1118
1275
  }
1119
1276
  :global(.spotlight-input-touch) .card:global(.game):global(.spottable):active.vertical:not(.captionOverlay):not(.hasContainer):not(:global(.focusRing)) .selectionContainer {
@@ -1123,6 +1280,9 @@ Motion Mixins
1123
1280
  --semantic-color-surface-default: #1F2C24;
1124
1281
  --semantic-color-surface-default-focused: #3ea07d;
1125
1282
  }
1283
+ :global(.green) .card:global(.game) .duration {
1284
+ background-color: color(from var(--semantic-color-surface-overlay-default) srgb r g b / 0.5);
1285
+ }
1126
1286
  :global(.green) .card:global(.game) .selectionContainer {
1127
1287
  border-color: transparent;
1128
1288
  }
@@ -1162,6 +1322,9 @@ Motion Mixins
1162
1322
  :global(.green) .card:global(.game).vertical.captionOverlay .captions {
1163
1323
  background: linear-gradient(180deg, transparent 0%, color(from var(--semantic-color-on-surface-black) srgb r g b / 0.7) 100%);
1164
1324
  }
1325
+ :global(.green) .card:global(.game).vertical.captionOverlay.centeredTitle .captions {
1326
+ background: transparent;
1327
+ }
1165
1328
  :global(.green) .card:global(.game).vertical.captionOverlay.roundedImage .captions {
1166
1329
  border-bottom-left-radius: var(--semantic-radius-container);
1167
1330
  border-bottom-right-radius: var(--semantic-radius-container);
@@ -1267,7 +1430,9 @@ Motion Mixins
1267
1430
  color: var(--semantic-color-on-surface-main-focused);
1268
1431
  }
1269
1432
  :global(.spotlight-input-key) :global(.green) .card:global(.game):global(.spottable):focus.hasContainer .label,
1270
- :global(.spotlight-input-mouse) :global(.green) .card:global(.game):global(.spottable):focus.hasContainer .label {
1433
+ :global(.spotlight-input-mouse) :global(.green) .card:global(.game):global(.spottable):focus.hasContainer .label,
1434
+ :global(.spotlight-input-key) :global(.green) .card:global(.game):global(.spottable):focus.hasContainer .labelIcon,
1435
+ :global(.spotlight-input-mouse) :global(.green) .card:global(.game):global(.spottable):focus.hasContainer .labelIcon {
1271
1436
  color: var(--semantic-color-on-surface-sub-focused);
1272
1437
  }
1273
1438
  :global(.spotlight-input-key) :global(.green) .card:global(.game):global(.spottable):focus.vertical:not(.captionOverlay):not(.hasContainer):not(:global(.focusRing)) .selectionContainer,
@@ -1310,7 +1475,8 @@ Motion Mixins
1310
1475
  :global(.spotlight-input-touch) :global(.green) .card:global(.game):global(.spottable):active.hasContainer .caption {
1311
1476
  color: var(--semantic-color-on-surface-main-focused);
1312
1477
  }
1313
- :global(.spotlight-input-touch) :global(.green) .card:global(.game):global(.spottable):active.hasContainer .label {
1478
+ :global(.spotlight-input-touch) :global(.green) .card:global(.game):global(.spottable):active.hasContainer .label,
1479
+ :global(.spotlight-input-touch) :global(.green) .card:global(.game):global(.spottable):active.hasContainer .labelIcon {
1314
1480
  color: var(--semantic-color-on-surface-sub-focused);
1315
1481
  }
1316
1482
  :global(.spotlight-input-touch) :global(.green) .card:global(.game):global(.spottable):active.vertical:not(.captionOverlay):not(.hasContainer):not(:global(.focusRing)) .selectionContainer {
@@ -1320,6 +1486,9 @@ Motion Mixins
1320
1486
  --semantic-color-surface-default: #422923;
1321
1487
  --semantic-color-surface-default-focused: #b85f23;
1322
1488
  }
1489
+ :global(.orange) .card:global(.game) .duration {
1490
+ background-color: color(from var(--semantic-color-surface-overlay-default) srgb r g b / 0.5);
1491
+ }
1323
1492
  :global(.orange) .card:global(.game) .selectionContainer {
1324
1493
  border-color: transparent;
1325
1494
  }
@@ -1359,6 +1528,9 @@ Motion Mixins
1359
1528
  :global(.orange) .card:global(.game).vertical.captionOverlay .captions {
1360
1529
  background: linear-gradient(180deg, transparent 0%, color(from var(--semantic-color-on-surface-black) srgb r g b / 0.7) 100%);
1361
1530
  }
1531
+ :global(.orange) .card:global(.game).vertical.captionOverlay.centeredTitle .captions {
1532
+ background: transparent;
1533
+ }
1362
1534
  :global(.orange) .card:global(.game).vertical.captionOverlay.roundedImage .captions {
1363
1535
  border-bottom-left-radius: var(--semantic-radius-container);
1364
1536
  border-bottom-right-radius: var(--semantic-radius-container);
@@ -1464,7 +1636,9 @@ Motion Mixins
1464
1636
  color: var(--semantic-color-on-surface-main-focused);
1465
1637
  }
1466
1638
  :global(.spotlight-input-key) :global(.orange) .card:global(.game):global(.spottable):focus.hasContainer .label,
1467
- :global(.spotlight-input-mouse) :global(.orange) .card:global(.game):global(.spottable):focus.hasContainer .label {
1639
+ :global(.spotlight-input-mouse) :global(.orange) .card:global(.game):global(.spottable):focus.hasContainer .label,
1640
+ :global(.spotlight-input-key) :global(.orange) .card:global(.game):global(.spottable):focus.hasContainer .labelIcon,
1641
+ :global(.spotlight-input-mouse) :global(.orange) .card:global(.game):global(.spottable):focus.hasContainer .labelIcon {
1468
1642
  color: var(--semantic-color-on-surface-sub-focused);
1469
1643
  }
1470
1644
  :global(.spotlight-input-key) :global(.orange) .card:global(.game):global(.spottable):focus.vertical:not(.captionOverlay):not(.hasContainer):not(:global(.focusRing)) .selectionContainer,
@@ -1507,7 +1681,8 @@ Motion Mixins
1507
1681
  :global(.spotlight-input-touch) :global(.orange) .card:global(.game):global(.spottable):active.hasContainer .caption {
1508
1682
  color: var(--semantic-color-on-surface-main-focused);
1509
1683
  }
1510
- :global(.spotlight-input-touch) :global(.orange) .card:global(.game):global(.spottable):active.hasContainer .label {
1684
+ :global(.spotlight-input-touch) :global(.orange) .card:global(.game):global(.spottable):active.hasContainer .label,
1685
+ :global(.spotlight-input-touch) :global(.orange) .card:global(.game):global(.spottable):active.hasContainer .labelIcon {
1511
1686
  color: var(--semantic-color-on-surface-sub-focused);
1512
1687
  }
1513
1688
  :global(.spotlight-input-touch) :global(.orange) .card:global(.game):global(.spottable):active.vertical:not(.captionOverlay):not(.hasContainer):not(:global(.focusRing)) .selectionContainer {
@@ -126,4 +126,104 @@ describe('Card', function () {
126
126
  _react.fireEvent.mouseUp(card);
127
127
  expect(card).not.toHaveClass('pressed');
128
128
  });
129
+ test('should format a negative duration as "00:00" in the image overlay', function () {
130
+ (0, _react.render)(/*#__PURE__*/(0, _jsxRuntime.jsx)(_Card.CardBase, {
131
+ src: src,
132
+ showDuration: true,
133
+ durationOverlay: true,
134
+ duration: -1
135
+ }));
136
+ expect(_react.screen.getByText('00:00')).toBeInTheDocument();
137
+ });
138
+ test('should format a duration of one hour or more as MM:SS in the captions', function () {
139
+ (0, _react.render)(/*#__PURE__*/(0, _jsxRuntime.jsx)(_Card.CardBase, {
140
+ src: src,
141
+ showDuration: true,
142
+ duration: 200
143
+ }));
144
+ expect(_react.screen.getByText('03:20')).toBeInTheDocument();
145
+ });
146
+ test('should format a duration of one hour or more as HH:MM:SS in the captions', function () {
147
+ (0, _react.render)(/*#__PURE__*/(0, _jsxRuntime.jsx)(_Card.CardBase, {
148
+ src: src,
149
+ showDuration: true,
150
+ duration: 3661
151
+ }));
152
+ expect(_react.screen.getByText('01:01:01')).toBeInTheDocument();
153
+ });
154
+ test('should render an array of `captionImageIconsSrc` as Images in the captions', function () {
155
+ (0, _react.render)(/*#__PURE__*/(0, _jsxRuntime.jsx)(_Card.CardBase, {
156
+ src: src,
157
+ captionImageIconsSrc: []
158
+ }));
159
+ expect(_react.screen.queryAllByRole('img')).toHaveLength(2);
160
+ });
161
+ test('should render a React element passed as `imageIconSrc`', function () {
162
+ (0, _react.render)(/*#__PURE__*/(0, _jsxRuntime.jsx)(_Card.CardBase, {
163
+ src: src,
164
+ imageIconSrc: /*#__PURE__*/(0, _jsxRuntime.jsx)("div", {
165
+ "data-testid": "custom-image-icon"
166
+ })
167
+ }));
168
+ expect(_react.screen.getByTestId('custom-image-icon')).toBeInTheDocument();
169
+ });
170
+ test('should render `label` without icons when `labelIcons` is not provided', function () {
171
+ (0, _react.render)(/*#__PURE__*/(0, _jsxRuntime.jsx)(_Card.CardBase, {
172
+ src: src,
173
+ label: "Label text"
174
+ }));
175
+ expect(_react.screen.getByText('Label text')).toBeInTheDocument();
176
+ });
177
+ test('should render `labelIcons` alongside the `label`', function () {
178
+ (0, _react.render)(/*#__PURE__*/(0, _jsxRuntime.jsx)(_Card.CardBase, {
179
+ src: src,
180
+ label: "Label text",
181
+ labelIcons: [/*#__PURE__*/(0, _jsxRuntime.jsx)("div", {
182
+ "data-testid": "label-icon-1"
183
+ }), /*#__PURE__*/(0, _jsxRuntime.jsx)("div", {
184
+ "data-testid": "label-icon-2"
185
+ })],
186
+ secondaryLabel: "Secondary label",
187
+ secondaryLabelIcons: [/*#__PURE__*/(0, _jsxRuntime.jsx)("div", {
188
+ "data-testid": "secondary-label-icon"
189
+ })]
190
+ }));
191
+ expect(_react.screen.getByTestId('label-icon-1')).toBeInTheDocument();
192
+ expect(_react.screen.getByTestId('label-icon-2')).toBeInTheDocument();
193
+ expect(_react.screen.getByTestId('secondary-label-icon')).toBeInTheDocument();
194
+ });
195
+ test('should render `labelIcons` alongside the `label` in `withoutMarquee` mode', function () {
196
+ (0, _react.render)(/*#__PURE__*/(0, _jsxRuntime.jsx)(_Card.CardBase, {
197
+ src: src,
198
+ withoutMarquee: true,
199
+ label: "Label",
200
+ labelIcons: [/*#__PURE__*/(0, _jsxRuntime.jsx)("div", {
201
+ "data-testid": "label-icon"
202
+ }, "icon1")]
203
+ }));
204
+ expect(_react.screen.getByTestId('label-icon')).toBeInTheDocument();
205
+ });
206
+ test('should render `primaryBadge` string in the image overlay', function () {
207
+ (0, _react.render)(/*#__PURE__*/(0, _jsxRuntime.jsx)(_Card.CardBase, {
208
+ src: src,
209
+ primaryBadge: "Primary Badge"
210
+ }));
211
+ expect(_react.screen.getByText('Primary Badge')).toBeInTheDocument();
212
+ });
213
+ test('should render `secondaryBadge` string in the image overlay', function () {
214
+ (0, _react.render)(/*#__PURE__*/(0, _jsxRuntime.jsx)(_Card.CardBase, {
215
+ src: src,
216
+ secondaryBadge: "Secondary Badge"
217
+ }));
218
+ expect(_react.screen.getByText('Secondary Badge')).toBeInTheDocument();
219
+ });
220
+ test('should render `ProgressBar` in the image overlay when `progressBarOverlay` is true', function () {
221
+ (0, _react.render)(/*#__PURE__*/(0, _jsxRuntime.jsx)(_Card.CardBase, {
222
+ src: src,
223
+ showProgressBar: true,
224
+ progressBarOverlay: true,
225
+ progress: 0.5
226
+ }));
227
+ expect(_react.screen.getByRole('progressbar')).toBeInTheDocument();
228
+ });
129
229
  });
@@ -1,9 +1,9 @@
1
1
  // Type definitions for limestone/Checkbox
2
2
 
3
3
  import { ToggleableProps as ui_Toggleable_ToggleableProps } from "@enact/ui/Toggleable";
4
- import { SkinnableProps as limestone_Skinnable_SkinnableProps } from "limestone/Skinnable";
4
+ import { SkinnableProps as limestone_Skinnable_SkinnableProps } from "@enact/limestone/Skinnable";
5
5
  import { SpottableProps as spotlight_Spottable_SpottableProps } from "@enact/spotlight/Spottable";
6
- import { IconProps as limestone_Icon_IconProps } from "limestone/Icon";
6
+ import { IconProps as limestone_Icon_IconProps } from "@enact/limestone/Icon";
7
7
  import * as React from "react";
8
8
 
9
9
  type Omit<T, K extends keyof T> = Pick<T, Exclude<keyof T, K>>;
@@ -34,8 +34,8 @@ Animations properties
34
34
  --lime-bounce-motion-easing-function: var(--lime-default-motion-easing-function);
35
35
  --lime-focus-in-motion-easing-function: var(--lime-EIO-motion-easing-function);
36
36
  --lime-focus-out-motion-easing-function: var(--lime-EO-motion-easing-function);
37
- --lime-press-motion-easing-function: var(--lime-EIO-motion-easing-function);
38
- --lime-release-motion-easing-function: var(--lime-EO-motion-easing-function);
37
+ --lime-press-motion-easing-function: var(--lime-EO-motion-easing-function);
38
+ --lime-release-motion-easing-function: var(--lime-EIO-motion-easing-function);
39
39
  /* ---------------------------------------
40
40
  Keyframes names
41
41
  ------------------------------------------ */
@@ -76,9 +76,6 @@ Keyframes
76
76
  }
77
77
  }
78
78
  /* ---------------------------------------
79
- Motion Variables
80
- ------------------------------------------ */
81
- /* ---------------------------------------
82
79
  Motion Mixins
83
80
  ------------------------------------------ */
84
81
  .checkbox {
@@ -2,7 +2,7 @@
2
2
 
3
3
  import { ToggleableProps as ui_Toggleable_ToggleableProps } from "@enact/ui/Toggleable";
4
4
  import * as React from "react";
5
- import { ItemProps as limestone_Item_ItemProps } from "limestone/Item";
5
+ import { ItemProps as limestone_Item_ItemProps } from "@enact/limestone/Item";
6
6
 
7
7
  type Omit<T, K extends keyof T> = Pick<T, Exclude<keyof T, K>>;
8
8
  type Merge<M, N> = Omit<M, Extract<keyof M, keyof N>> & N;
@@ -19,6 +19,13 @@ corresponding internal elements and states of this component.
19
19
  * * `checkboxItem` - The root class name
20
20
  */
21
21
  css?: object;
22
+ /**
23
+ * Enables the "formCheckbox" state.
24
+ *
25
+ * In "formCheckbox" mode, the spotlight is located on the Checkbox component and the Item does not receive
26
+ visual feedback on focus
27
+ */
28
+ formCheckbox?: boolean;
22
29
  /**
23
30
  * The icon content.
24
31
  *