@enact/limestone 1.10.1 → 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 (122) 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 +3 -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 +1 -1
  12. package/Button/Button.d.ts +3 -3
  13. package/Button/Button.module.css +14 -28
  14. package/CHANGELOG.md +48 -1
  15. package/Card/Card.d.ts +81 -9
  16. package/Card/Card.js +321 -84
  17. package/Card/Card.module.css +171 -20
  18. package/Card/tests/Card-specs.js +100 -0
  19. package/Checkbox/Checkbox.d.ts +2 -2
  20. package/Checkbox/Checkbox.module.css +2 -9
  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 +2 -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/Icon/Icon.d.ts +22 -1
  39. package/Icon/Icon.js +21 -0
  40. package/Icon/IconList.js +43 -1
  41. package/IconItem/IconItem.d.ts +2 -2
  42. package/IconItem/IconItem.module.css +11 -14
  43. package/Image/Image.d.ts +1 -1
  44. package/Image/Image.module.css +1 -1
  45. package/ImageItem/ImageItem.d.ts +2 -2
  46. package/ImageItem/ImageItem.js +3 -16
  47. package/ImageItem/ImageItem.module.css +105 -97
  48. package/ImageItem/tests/ImageItem-specs.js +6 -5
  49. package/Input/Input.module.css +8 -7
  50. package/Input/InputField.module.css +4 -4
  51. package/Input/index.d.ts +1 -1
  52. package/Input/tests/Input-specs.js +2 -2
  53. package/Input/tests/InputField-specs.js +1 -1
  54. package/Item/Item.d.ts +2 -2
  55. package/Item/Item.module.css +27 -15
  56. package/KeyGuide/KeyGuide.d.ts +2 -2
  57. package/MediaOverlay/MediaOverlay.d.ts +2 -2
  58. package/MediaOverlay/MediaOverlay.module.css +2 -5
  59. package/MediaPlayer/MediaSlider.module.css +1 -0
  60. package/MediaPlayer/Times.module.css +1 -1
  61. package/MediaPlayer/index.d.ts +2 -2
  62. package/PageViews/PageViews.module.css +2 -1
  63. package/Panels/Header.module.css +40 -28
  64. package/Panels/Panel.module.css +1 -1
  65. package/Panels/index.d.ts +1 -1
  66. package/Picker/Picker.d.ts +1 -1
  67. package/Popup/Popup.module.css +4 -1
  68. package/PopupTabLayout/PopupTabLayout.d.ts +6 -6
  69. package/PopupTabLayout/PopupTabLayout.module.css +6 -6
  70. package/ProgressBar/ProgressBar.d.ts +1 -1
  71. package/ProgressBar/ProgressBar.module.css +12 -12
  72. package/ProgressBar/ProgressBarTooltip.module.css +7 -7
  73. package/ProgressButton/ProgressButton.d.ts +2 -2
  74. package/QuickGuidePanels/QuickGuidePanels.module.css +1 -1
  75. package/RadioItem/RadioItem.d.ts +1 -1
  76. package/RadioItem/RadioItem.module.css +18 -20
  77. package/Scroller/Scroller.d.ts +12 -0
  78. package/Scroller/Scroller.js +15 -0
  79. package/Scroller/tests/Scroller-specs.js +29 -0
  80. package/Scroller/useThemeScroller.js +22 -2
  81. package/Slider/Slider.d.ts +1 -1
  82. package/Slider/Slider.module.css +539 -300
  83. package/Spinner/Spinner.d.ts +1 -1
  84. package/Spinner/Spinner.module.css +2 -2
  85. package/Steps/Steps.d.ts +1 -1
  86. package/Steps/Steps.js +12 -6
  87. package/Steps/Steps.module.css +16 -2
  88. package/Switch/Switch.module.css +2 -5
  89. package/SwitchItem/SwitchItem.d.ts +1 -1
  90. package/TabLayout/RefocusDecorator.js +1 -1
  91. package/TabLayout/TabGroup.module.css +12 -6
  92. package/TabLayout/TabLayout.js +4 -0
  93. package/ThemeDecorator/ThemeDecorator.d.ts +1 -1
  94. package/ThemeDecorator/ThemeDecorator.module.css +22 -1
  95. package/TooltipDecorator/Tooltip.js +68 -7
  96. package/TooltipDecorator/Tooltip.module.css +40 -23
  97. package/TooltipDecorator/TooltipDecorator.d.ts +52 -0
  98. package/TooltipDecorator/TooltipDecorator.js +42 -0
  99. package/TooltipDecorator/TooltipLabel.js +67 -14
  100. package/TooltipDecorator/tests/TooltipDecorator-specs.js +46 -0
  101. package/TooltipDecorator/useTooltip.js +14 -2
  102. package/VideoPlayer/MediaTitle.module.css +1 -1
  103. package/VirtualList/VirtualList.d.ts +24 -0
  104. package/VirtualList/VirtualList.js +30 -0
  105. package/VirtualList/tests/stickTo-specs.js +115 -0
  106. package/VirtualList/tests/useEvent-specs.js +39 -0
  107. package/VirtualList/useEvent.js +45 -10
  108. package/VirtualList/useThemeVirtualList.js +20 -2
  109. package/WizardPanels/WizardPanels.module.css +1 -1
  110. package/fonts/Limestone_Icons.ttf +0 -0
  111. package/internal/DateComponentPicker/DateComponentPicker.module.css +3 -3
  112. package/internal/Picker/Picker.js +8 -10
  113. package/internal/Picker/Picker.module.css +74 -141
  114. package/package.json +11 -14
  115. package/styles/color-mixins.less +4 -60
  116. package/styles/colors-game.less +5 -5
  117. package/styles/colors.less +9 -10
  118. package/styles/mixins.less +0 -46
  119. package/styles/motion-mixins.less +16 -7
  120. package/styles/motions.less +2 -2
  121. package/styles/variables.less +71 -46
  122. 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 {
@@ -119,6 +116,10 @@ Motion Mixins
119
116
  }
120
117
  .card .primaryBadge,
121
118
  .card .secondaryBadge {
119
+ align-items: center;
120
+ display: flex;
121
+ justify-content: center;
122
+ text-align: center;
122
123
  position: absolute;
123
124
  width: 2.25rem;
124
125
  height: 2.25rem;
@@ -145,6 +146,27 @@ Motion Mixins
145
146
  line-height: 1.25rem;
146
147
  font-weight: var(--primitive-font-weight-regular);
147
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
+ }
148
170
  .card.selected .image::after {
149
171
  content: '';
150
172
  position: absolute;
@@ -189,6 +211,15 @@ Motion Mixins
189
211
  height: auto;
190
212
  transition: transform var(--lime-focus-out-motion-duration) var(--lime-focus-out-motion-easing-function);
191
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
+ }
192
223
  .card.vertical .captions {
193
224
  padding: var(--primitive-spacing-36) 0;
194
225
  display: flex;
@@ -200,6 +231,8 @@ Motion Mixins
200
231
  height: var(--card-image-height);
201
232
  }
202
233
  .card.vertical .imageIcon {
234
+ font-size: 3.75rem;
235
+ line-height: 3.75rem;
203
236
  height: 3.75rem;
204
237
  width: 3.75rem;
205
238
  margin: 0;
@@ -207,6 +240,25 @@ Motion Mixins
207
240
  .card.vertical.captionOverlay .captions {
208
241
  padding: var(--primitive-spacing-36) var(--primitive-spacing-48);
209
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
+ }
210
262
  .card.vertical.captionOverlay.splitCaption .caption {
211
263
  width: calc(var(--card-image-width) - (var(--primitive-spacing-48) + var(--primitive-spacing-48)));
212
264
  }
@@ -227,11 +279,18 @@ Motion Mixins
227
279
  .card.vertical:not(.hasContainer) .image {
228
280
  z-index: 1;
229
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
+ }
230
289
  .card.vertical.selected:not(.hasContainer) .selectionContainer {
231
290
  z-index: 3;
232
291
  }
233
292
  .card.horizontal {
234
- width: 27.5rem;
293
+ width: 24.83333rem;
235
294
  height: 7rem;
236
295
  transition: transform var(--lime-focus-out-motion-duration) var(--lime-focus-out-motion-easing-function);
237
296
  }
@@ -241,6 +300,36 @@ Motion Mixins
241
300
  .card.horizontal .image {
242
301
  width: var(--card-image-width);
243
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
+ }
244
333
  :global(.spotlight-input-key) .card:global(.spottable):focus.hasContainer,
245
334
  :global(.spotlight-input-mouse) .card:global(.spottable):focus.hasContainer {
246
335
  transform: scale(1.1);
@@ -258,6 +347,10 @@ Motion Mixins
258
347
  :global(.spotlight-input-mouse) .card:global(.spottable):focus.vertical:not(.hasContainer) .selectionContainer {
259
348
  z-index: 5;
260
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
+ }
261
354
  :global(.spotlight-input-touch) .card:global(.spottable):active.hasContainer {
262
355
  transform: scale(1.1);
263
356
  transition: transform var(--lime-focus-in-motion-duration) var(--lime-focus-in-motion-easing-function);
@@ -271,6 +364,9 @@ Motion Mixins
271
364
  :global(.spotlight-input-touch) .card:global(.spottable):active.vertical:not(.hasContainer) .selectionContainer {
272
365
  z-index: 5;
273
366
  }
367
+ :global(.spotlight-input-touch) .card:global(.spottable):active.vertical:not(.hasContainer).captionOverflowOnFocus .captions {
368
+ display: flex;
369
+ }
274
370
  :global(.spotlight-input-key) .card:not([disabled]):global(.spottable):focus.hasContainer.pressed,
275
371
  :global(.spotlight-input-mouse) .card:not([disabled]):global(.spottable):focus.hasContainer.pressed,
276
372
  :global(.spotlight-input-key) .card:not([disabled]):global(.spottable):focus.hasContainer:active,
@@ -347,6 +443,10 @@ Motion Mixins
347
443
  font-size: var(--primitive-font-size-72);
348
444
  line-height: 2.08333rem;
349
445
  }
446
+ .card:global(.largeText) .duration {
447
+ font-size: var(--primitive-font-size-58);
448
+ line-height: 1.45833rem;
449
+ }
350
450
  .card:global(.largeText) .label {
351
451
  font-size: var(--primitive-font-size-58);
352
452
  line-height: 1.45833rem;
@@ -363,8 +463,8 @@ Motion Mixins
363
463
  height: 1.5rem;
364
464
  line-height: 1.45833rem;
365
465
  }
366
- .card:global(.largeText).vertical:not(.captionOverlay):not(.captionOverlayOnFocus):is(.hasLabel) .image {
367
- height: calc(var(--card-image-height) - 36px);
466
+ .card:global(.neutral) .duration {
467
+ background-color: color(from var(--semantic-color-surface-overlay-default) srgb r g b / 0.5);
368
468
  }
369
469
  .card:global(.neutral) .selectionContainer {
370
470
  border-color: transparent;
@@ -405,6 +505,9 @@ Motion Mixins
405
505
  .card:global(.neutral).vertical.captionOverlay .captions {
406
506
  background: linear-gradient(180deg, transparent 0%, color(from var(--semantic-color-on-surface-black) srgb r g b / 0.7) 100%);
407
507
  }
508
+ .card:global(.neutral).vertical.captionOverlay.centeredTitle .captions {
509
+ background: transparent;
510
+ }
408
511
  .card:global(.neutral).vertical.captionOverlay.roundedImage .captions {
409
512
  border-bottom-left-radius: var(--semantic-radius-container);
410
513
  border-bottom-right-radius: var(--semantic-radius-container);
@@ -510,7 +613,9 @@ Motion Mixins
510
613
  color: var(--semantic-color-on-surface-main-focused);
511
614
  }
512
615
  :global(.spotlight-input-key) .card:global(.neutral):global(.spottable):focus.hasContainer .label,
513
- :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 {
514
619
  color: var(--semantic-color-on-surface-sub-focused);
515
620
  }
516
621
  :global(.spotlight-input-key) .card:global(.neutral):global(.spottable):focus.vertical:not(.captionOverlay):not(.hasContainer):not(:global(.focusRing)) .selectionContainer,
@@ -553,12 +658,16 @@ Motion Mixins
553
658
  :global(.spotlight-input-touch) .card:global(.neutral):global(.spottable):active.hasContainer .caption {
554
659
  color: var(--semantic-color-on-surface-main-focused);
555
660
  }
556
- :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 {
557
663
  color: var(--semantic-color-on-surface-sub-focused);
558
664
  }
559
665
  :global(.spotlight-input-touch) .card:global(.neutral):global(.spottable):active.vertical:not(.captionOverlay):not(.hasContainer):not(:global(.focusRing)) .selectionContainer {
560
666
  border-color: var(--semantic-color-stroke-main-focused);
561
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
+ }
562
671
  :global(.enact-a11y-high-contrast) .card:global(.neutral):global(.highContrast) .selectionContainer {
563
672
  border-color: transparent;
564
673
  }
@@ -598,6 +707,9 @@ Motion Mixins
598
707
  :global(.enact-a11y-high-contrast) .card:global(.neutral):global(.highContrast).vertical.captionOverlay .captions {
599
708
  background: linear-gradient(180deg, transparent 0%, color(from var(--semantic-color-on-surface-black) srgb r g b / 0.7) 100%);
600
709
  }
710
+ :global(.enact-a11y-high-contrast) .card:global(.neutral):global(.highContrast).vertical.captionOverlay.centeredTitle .captions {
711
+ background: transparent;
712
+ }
601
713
  :global(.enact-a11y-high-contrast) .card:global(.neutral):global(.highContrast).vertical.captionOverlay.roundedImage .captions {
602
714
  border-bottom-left-radius: var(--semantic-radius-container);
603
715
  border-bottom-right-radius: var(--semantic-radius-container);
@@ -703,7 +815,9 @@ Motion Mixins
703
815
  color: var(--semantic-color-on-surface-main-focused);
704
816
  }
705
817
  :global(.spotlight-input-key) :global(.enact-a11y-high-contrast) .card:global(.neutral):global(.highContrast):global(.spottable):focus.hasContainer .label,
706
- :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 {
707
821
  color: var(--semantic-color-on-surface-sub-focused);
708
822
  }
709
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,
@@ -746,12 +860,16 @@ Motion Mixins
746
860
  :global(.spotlight-input-touch) :global(.enact-a11y-high-contrast) .card:global(.neutral):global(.highContrast):global(.spottable):active.hasContainer .caption {
747
861
  color: var(--semantic-color-on-surface-main-focused);
748
862
  }
749
- :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 {
750
865
  color: var(--semantic-color-on-surface-sub-focused);
751
866
  }
752
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 {
753
868
  border-color: var(--semantic-color-stroke-main-focused);
754
869
  }
870
+ .card:global(.light) .duration {
871
+ background-color: color(from var(--semantic-color-surface-overlay-default) srgb r g b / 0.5);
872
+ }
755
873
  .card:global(.light) .selectionContainer {
756
874
  border-color: transparent;
757
875
  }
@@ -791,6 +909,9 @@ Motion Mixins
791
909
  .card:global(.light).vertical.captionOverlay .captions {
792
910
  background: linear-gradient(180deg, transparent 0%, color(from var(--semantic-color-on-surface-black) srgb r g b / 0.7) 100%);
793
911
  }
912
+ .card:global(.light).vertical.captionOverlay.centeredTitle .captions {
913
+ background: transparent;
914
+ }
794
915
  .card:global(.light).vertical.captionOverlay.roundedImage .captions {
795
916
  border-bottom-left-radius: var(--semantic-radius-container);
796
917
  border-bottom-right-radius: var(--semantic-radius-container);
@@ -896,7 +1017,9 @@ Motion Mixins
896
1017
  color: var(--semantic-color-on-surface-main-focused);
897
1018
  }
898
1019
  :global(.spotlight-input-key) .card:global(.light):global(.spottable):focus.hasContainer .label,
899
- :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 {
900
1023
  color: var(--semantic-color-on-surface-sub-focused);
901
1024
  }
902
1025
  :global(.spotlight-input-key) .card:global(.light):global(.spottable):focus.vertical:not(.captionOverlay):not(.hasContainer):not(:global(.focusRing)) .selectionContainer,
@@ -939,7 +1062,8 @@ Motion Mixins
939
1062
  :global(.spotlight-input-touch) .card:global(.light):global(.spottable):active.hasContainer .caption {
940
1063
  color: var(--semantic-color-on-surface-main-focused);
941
1064
  }
942
- :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 {
943
1067
  color: var(--semantic-color-on-surface-sub-focused);
944
1068
  }
945
1069
  :global(.spotlight-input-touch) .card:global(.light):global(.spottable):active.vertical:not(.captionOverlay):not(.hasContainer):not(:global(.focusRing)) .selectionContainer {
@@ -950,6 +1074,9 @@ Motion Mixins
950
1074
  --semantic-color-surface-default-focused: #6d2fa1;
951
1075
  --semantic-color-on-surface-main-focused: #e6e6e6;
952
1076
  }
1077
+ .card:global(.game) .duration {
1078
+ background-color: color(from var(--semantic-color-surface-overlay-default) srgb r g b / 0.5);
1079
+ }
953
1080
  .card:global(.game) .selectionContainer {
954
1081
  border-color: transparent;
955
1082
  }
@@ -989,6 +1116,9 @@ Motion Mixins
989
1116
  .card:global(.game).vertical.captionOverlay .captions {
990
1117
  background: linear-gradient(180deg, transparent 0%, color(from var(--semantic-color-on-surface-black) srgb r g b / 0.7) 100%);
991
1118
  }
1119
+ .card:global(.game).vertical.captionOverlay.centeredTitle .captions {
1120
+ background: transparent;
1121
+ }
992
1122
  .card:global(.game).vertical.captionOverlay.roundedImage .captions {
993
1123
  border-bottom-left-radius: var(--semantic-radius-container);
994
1124
  border-bottom-right-radius: var(--semantic-radius-container);
@@ -1094,7 +1224,9 @@ Motion Mixins
1094
1224
  color: var(--semantic-color-on-surface-main-focused);
1095
1225
  }
1096
1226
  :global(.spotlight-input-key) .card:global(.game):global(.spottable):focus.hasContainer .label,
1097
- :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 {
1098
1230
  color: var(--semantic-color-on-surface-sub-focused);
1099
1231
  }
1100
1232
  :global(.spotlight-input-key) .card:global(.game):global(.spottable):focus.vertical:not(.captionOverlay):not(.hasContainer):not(:global(.focusRing)) .selectionContainer,
@@ -1137,7 +1269,8 @@ Motion Mixins
1137
1269
  :global(.spotlight-input-touch) .card:global(.game):global(.spottable):active.hasContainer .caption {
1138
1270
  color: var(--semantic-color-on-surface-main-focused);
1139
1271
  }
1140
- :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 {
1141
1274
  color: var(--semantic-color-on-surface-sub-focused);
1142
1275
  }
1143
1276
  :global(.spotlight-input-touch) .card:global(.game):global(.spottable):active.vertical:not(.captionOverlay):not(.hasContainer):not(:global(.focusRing)) .selectionContainer {
@@ -1147,6 +1280,9 @@ Motion Mixins
1147
1280
  --semantic-color-surface-default: #1F2C24;
1148
1281
  --semantic-color-surface-default-focused: #3ea07d;
1149
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
+ }
1150
1286
  :global(.green) .card:global(.game) .selectionContainer {
1151
1287
  border-color: transparent;
1152
1288
  }
@@ -1186,6 +1322,9 @@ Motion Mixins
1186
1322
  :global(.green) .card:global(.game).vertical.captionOverlay .captions {
1187
1323
  background: linear-gradient(180deg, transparent 0%, color(from var(--semantic-color-on-surface-black) srgb r g b / 0.7) 100%);
1188
1324
  }
1325
+ :global(.green) .card:global(.game).vertical.captionOverlay.centeredTitle .captions {
1326
+ background: transparent;
1327
+ }
1189
1328
  :global(.green) .card:global(.game).vertical.captionOverlay.roundedImage .captions {
1190
1329
  border-bottom-left-radius: var(--semantic-radius-container);
1191
1330
  border-bottom-right-radius: var(--semantic-radius-container);
@@ -1291,7 +1430,9 @@ Motion Mixins
1291
1430
  color: var(--semantic-color-on-surface-main-focused);
1292
1431
  }
1293
1432
  :global(.spotlight-input-key) :global(.green) .card:global(.game):global(.spottable):focus.hasContainer .label,
1294
- :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 {
1295
1436
  color: var(--semantic-color-on-surface-sub-focused);
1296
1437
  }
1297
1438
  :global(.spotlight-input-key) :global(.green) .card:global(.game):global(.spottable):focus.vertical:not(.captionOverlay):not(.hasContainer):not(:global(.focusRing)) .selectionContainer,
@@ -1334,7 +1475,8 @@ Motion Mixins
1334
1475
  :global(.spotlight-input-touch) :global(.green) .card:global(.game):global(.spottable):active.hasContainer .caption {
1335
1476
  color: var(--semantic-color-on-surface-main-focused);
1336
1477
  }
1337
- :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 {
1338
1480
  color: var(--semantic-color-on-surface-sub-focused);
1339
1481
  }
1340
1482
  :global(.spotlight-input-touch) :global(.green) .card:global(.game):global(.spottable):active.vertical:not(.captionOverlay):not(.hasContainer):not(:global(.focusRing)) .selectionContainer {
@@ -1344,6 +1486,9 @@ Motion Mixins
1344
1486
  --semantic-color-surface-default: #422923;
1345
1487
  --semantic-color-surface-default-focused: #b85f23;
1346
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
+ }
1347
1492
  :global(.orange) .card:global(.game) .selectionContainer {
1348
1493
  border-color: transparent;
1349
1494
  }
@@ -1383,6 +1528,9 @@ Motion Mixins
1383
1528
  :global(.orange) .card:global(.game).vertical.captionOverlay .captions {
1384
1529
  background: linear-gradient(180deg, transparent 0%, color(from var(--semantic-color-on-surface-black) srgb r g b / 0.7) 100%);
1385
1530
  }
1531
+ :global(.orange) .card:global(.game).vertical.captionOverlay.centeredTitle .captions {
1532
+ background: transparent;
1533
+ }
1386
1534
  :global(.orange) .card:global(.game).vertical.captionOverlay.roundedImage .captions {
1387
1535
  border-bottom-left-radius: var(--semantic-radius-container);
1388
1536
  border-bottom-right-radius: var(--semantic-radius-container);
@@ -1488,7 +1636,9 @@ Motion Mixins
1488
1636
  color: var(--semantic-color-on-surface-main-focused);
1489
1637
  }
1490
1638
  :global(.spotlight-input-key) :global(.orange) .card:global(.game):global(.spottable):focus.hasContainer .label,
1491
- :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 {
1492
1642
  color: var(--semantic-color-on-surface-sub-focused);
1493
1643
  }
1494
1644
  :global(.spotlight-input-key) :global(.orange) .card:global(.game):global(.spottable):focus.vertical:not(.captionOverlay):not(.hasContainer):not(:global(.focusRing)) .selectionContainer,
@@ -1531,7 +1681,8 @@ Motion Mixins
1531
1681
  :global(.spotlight-input-touch) :global(.orange) .card:global(.game):global(.spottable):active.hasContainer .caption {
1532
1682
  color: var(--semantic-color-on-surface-main-focused);
1533
1683
  }
1534
- :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 {
1535
1686
  color: var(--semantic-color-on-surface-sub-focused);
1536
1687
  }
1537
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 {
@@ -91,10 +88,6 @@ Motion Mixins
91
88
  border-radius: var(--semantic-radius-full);
92
89
  position: relative;
93
90
  text-align: center;
94
- --icon-size: 1.25rem;
95
- }
96
- .checkbox .icon:global(.largeText) {
97
- --icon-size: 1.5rem;
98
91
  }
99
92
  .checkbox.selected.checkmark .icon::after {
100
93
  content: '';
@@ -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
  *