@enact/limestone 1.3.0 → 1.9.4

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 (166) hide show
  1. package/.github/workflows/ci-branch.yml +21 -0
  2. package/.github/workflows/ci-pull-request.yml +16 -0
  3. package/.github/workflows/ci-reusable.yml +73 -0
  4. package/ActionGuide/ActionGuide.d.ts +5 -4
  5. package/ActionGuide/ActionGuide.module.css +1 -1
  6. package/Alert/Alert.d.ts +4 -2
  7. package/Alert/Alert.js +4 -1
  8. package/Alert/Alert.module.css +36 -0
  9. package/BodyText/BodyText.d.ts +5 -4
  10. package/BodyText/BodyText.module.css +7 -7
  11. package/Button/Button.d.ts +17 -12
  12. package/Button/Button.js +1 -1
  13. package/Button/Button.module.css +195 -268
  14. package/CHANGELOG.md +226 -0
  15. package/Card/Card.d.ts +36 -8
  16. package/Card/Card.js +157 -20
  17. package/Card/Card.module.css +277 -58
  18. package/Card/tests/Card-specs.js +30 -0
  19. package/Checkbox/Checkbox.d.ts +8 -7
  20. package/Checkbox/Checkbox.js +3 -1
  21. package/Checkbox/Checkbox.module.css +213 -120
  22. package/Checkbox/tests/Checkbox-specs.js +1 -1
  23. package/CheckboxItem/CheckboxItem.d.ts +22 -7
  24. package/CheckboxItem/CheckboxItem.js +69 -4
  25. package/Chips/Chip.js +60 -7
  26. package/Chips/Chip.module.css +3 -3
  27. package/Chips/Chips.js +26 -12
  28. package/Chips/Chips.module.css +1 -1
  29. package/Chips/tests/Chip-specs.js +19 -9
  30. package/Chips/tests/Chips-specs.js +19 -19
  31. package/ContextualMenuDecorator/ContextualMenuDecorator.d.ts +4 -5
  32. package/ContextualPopupDecorator/ContextualPopup.module.css +34 -34
  33. package/ContextualPopupDecorator/ContextualPopupDecorator.js +557 -549
  34. package/DatePicker/DatePicker.d.ts +4 -5
  35. package/DayPicker/DayPicker.d.ts +8 -7
  36. package/Dropdown/Dropdown.d.ts +11 -13
  37. package/Dropdown/Dropdown.module.css +9 -9
  38. package/Dropdown/DropdownList.js +16 -11
  39. package/FixedPopupPanels/FixedPopupPanels.d.ts +4 -2
  40. package/FixedPopupPanels/FixedPopupPanels.module.css +18 -18
  41. package/FlexiblePopupPanels/FlexiblePopupPanels.module.css +23 -23
  42. package/FormCheckboxItem/FormCheckboxItem.d.ts +5 -4
  43. package/Heading/Heading.d.ts +8 -7
  44. package/Heading/Heading.module.css +5 -5
  45. package/Icon/Icon.d.ts +14 -4
  46. package/Icon/Icon.js +48 -2
  47. package/Icon/Icon.module.css +1 -1
  48. package/Icon/IconList.js +25 -1
  49. package/IconItem/IconItem.d.ts +13 -12
  50. package/IconItem/IconItem.js +15 -0
  51. package/IconItem/IconItem.module.css +107 -1
  52. package/Image/Image.d.ts +5 -4
  53. package/ImageItem/ImageItem.d.ts +11 -10
  54. package/ImageItem/ImageItem.js +37 -31
  55. package/ImageItem/ImageItem.module.css +30 -30
  56. package/ImageItem/tests/ImageItem-specs.js +3 -10
  57. package/Input/Input.js +9 -2
  58. package/Input/Input.module.css +37 -8
  59. package/Input/InputField.js +5 -1
  60. package/Input/InputField.module.css +17 -2
  61. package/Input/InputFieldSpotlightDecorator.js +213 -229
  62. package/Input/index.d.ts +15 -18
  63. package/Input/tests/InputField-specs.js +21 -0
  64. package/Item/Item.d.ts +16 -9
  65. package/Item/Item.js +20 -2
  66. package/Item/Item.module.css +1 -1
  67. package/KeyGuide/KeyGuide.d.ts +8 -7
  68. package/KeyGuide/KeyGuide.module.css +25 -1
  69. package/Marquee/Marquee.d.ts +2 -4
  70. package/MediaOverlay/MediaOverlay.d.ts +12 -11
  71. package/MediaOverlay/MediaOverlay.js +43 -21
  72. package/MediaOverlay/MediaOverlay.module.css +114 -15
  73. package/MediaPlayer/MediaControls.js +195 -13
  74. package/MediaPlayer/MediaControls.module.css +3 -2
  75. package/MediaPlayer/MediaSlider.module.css +7 -20
  76. package/MediaPlayer/index.d.ts +59 -7
  77. package/PageViews/PageViews.js +165 -80
  78. package/PageViews/PageViewsRouter.js +9 -0
  79. package/PageViews/tests/PageViews-specs.js +84 -0
  80. package/Panels/Header.js +48 -30
  81. package/Panels/Header.module.css +83 -31
  82. package/Panels/Panel.module.css +1 -1
  83. package/Panels/index.d.ts +7 -8
  84. package/Picker/Picker.d.ts +4 -5
  85. package/Picker/Picker.module.css +2 -2
  86. package/Popup/Popup.js +242 -240
  87. package/Popup/Popup.module.css +24 -24
  88. package/PopupTabLayout/PopupTabLayout.d.ts +5 -7
  89. package/PopupTabLayout/PopupTabLayout.js +15 -9
  90. package/PopupTabLayout/PopupTabLayout.module.css +53 -16
  91. package/PopupTabLayout/PopupTabLayoutStateContext.js +8 -0
  92. package/ProgressBar/ProgressBar.d.ts +5 -4
  93. package/ProgressBar/ProgressBarTooltip.module.css +12 -12
  94. package/ProgressButton/ProgressButton.d.ts +4 -5
  95. package/QuickGuidePanels/QuickGuidePanels.module.css +2 -2
  96. package/RadioItem/RadioItem.d.ts +18 -5
  97. package/RadioItem/RadioItem.js +67 -2
  98. package/RadioItem/RadioItem.module.css +36 -36
  99. package/RangePicker/RangePicker.module.css +2 -2
  100. package/Scroller/EditableWrapper.js +11 -4
  101. package/Scroller/Scroller.d.ts +20 -16
  102. package/Scroller/Scroller.js +9 -3
  103. package/Scroller/Scroller.module.css +4 -4
  104. package/Slider/Slider.d.ts +16 -14
  105. package/Slider/Slider.js +37 -4
  106. package/Slider/Slider.module.css +314 -91
  107. package/Slider/tests/Slider-specs.js +2 -1
  108. package/Spinner/Spinner.d.ts +5 -4
  109. package/Spinner/Spinner.module.css +9 -9
  110. package/Steps/Steps.d.ts +5 -4
  111. package/Steps/Steps.js +9 -5
  112. package/Switch/Switch.d.ts +8 -7
  113. package/Switch/Switch.module.css +100 -13
  114. package/SwitchItem/SwitchItem.d.ts +9 -6
  115. package/TabLayout/RefocusDecorator.js +15 -9
  116. package/TabLayout/TabGroup.js +3 -2
  117. package/TabLayout/TabGroup.module.css +2 -2
  118. package/TabLayout/TabLayout.d.ts +6 -0
  119. package/TabLayout/TabLayout.js +11 -1
  120. package/TabLayout/TabLayout.module.css +18 -0
  121. package/TabLayout/tests/TabLayout-specs.js +52 -0
  122. package/ThemeDecorator/ThemeDecorator.d.ts +9 -10
  123. package/ThemeDecorator/fontGenerator.js +1 -1
  124. package/ThemeDecorator/screenTypes.json +1 -0
  125. package/TimePicker/TimePicker.module.css +1 -1
  126. package/TooltipDecorator/Tooltip.module.css +1 -2
  127. package/TooltipDecorator/tests/util-specs.js +12 -0
  128. package/TooltipDecorator/useTooltip.js +1 -1
  129. package/TooltipDecorator/util.js +18 -11
  130. package/VideoPlayer/Feedback.js +3 -0
  131. package/VideoPlayer/Feedback.module.css +5 -9
  132. package/VideoPlayer/FeedbackIcons.js +1 -1
  133. package/VideoPlayer/FeedbackTooltip.module.css +55 -11
  134. package/VideoPlayer/VideoPlayer.d.ts +44 -18
  135. package/VideoPlayer/VideoPlayer.js +128 -23
  136. package/VideoPlayer/VideoPlayer.module.css +28 -11
  137. package/VirtualList/VirtualList.d.ts +9 -2
  138. package/VirtualList/VirtualList.js +31 -6
  139. package/VirtualList/tests/VirtualGridList-translate-specs.js +3 -0
  140. package/VirtualList/tests/VirtualList-specs.js +28 -1
  141. package/VirtualList/tests/VirtualList-translate-specs.js +4 -1
  142. package/VirtualList/tests/useEvent-specs.js +39 -0
  143. package/VirtualList/useEvent.js +45 -10
  144. package/VirtualList/useThemeVirtualList.js +3 -0
  145. package/WizardPanels/WizardPanels.module.css +2 -2
  146. package/WizardPanels/index.d.ts +4 -2
  147. package/fonts/Limestone_Icons.ttf +0 -0
  148. package/internal/$L/$L.js +3 -3
  149. package/internal/DateComponentPicker/DateComponentPicker.module.css +2 -2
  150. package/internal/DateTime/DateTime.module.css +1 -0
  151. package/internal/Panels/PanelsRouter.js +16 -5
  152. package/internal/Picker/Picker.module.css +2 -2
  153. package/internal/SharedStateDecorator/SharedStateDecorator.js +76 -99
  154. package/internal/validators/validators.js +21 -2
  155. package/package.json +14 -14
  156. package/styles/colors-highcontrast.less +9 -1
  157. package/styles/colors.less +11 -7
  158. package/styles/motion-mixins.less +66 -0
  159. package/styles/motions.less +78 -0
  160. package/styles/variables.less +176 -150
  161. package/useScroll/HoverToScroll.js +8 -5
  162. package/useScroll/ScrollbarTrack.module.css +8 -8
  163. package/useScroll/useEvent.js +7 -1
  164. package/useScroll/useScroll.js +2 -0
  165. package/useScroll/useScroll.module.css +6 -6
  166. package/.travis.yml +0 -40
package/CHANGELOG.md CHANGED
@@ -2,6 +2,232 @@
2
2
 
3
3
  The following is a curated list of changes in the Enact limestone module, newest changes on the top.
4
4
 
5
+ ## [1.9.4] - 2026-06-18
6
+
7
+ ### Fixed
8
+
9
+ - `limestone/VirtualList` focus jump and scroll freeze when scrolled by long press
10
+
11
+ ## [1.9.3] - 2026-04-20
12
+
13
+ ### Fixed
14
+
15
+ - `limestone/Popup` to not delay when closed with pointer
16
+
17
+ ## [1.9.2] - 2026-03-10
18
+
19
+ ### Fixed
20
+
21
+ - `limestone/Card` `captionOverlayOnFocus` prop to work in `focusRing` mode
22
+
23
+ ## [1.9.1] - 2026-02-26
24
+
25
+ ### Changed
26
+
27
+ - `limestone/Slider` styling to match the latest GUI
28
+
29
+ ### Fixed
30
+
31
+ - `limestone/Card` press motion to work with key press
32
+ - `limestone/IconItem` press motion to work with key press
33
+ - `limestone/MediaOverlay` press motion to work with key press
34
+ - `limestone/Popup` to avoid popup content blinking into existence after render
35
+ - `limestone/Slider` press motion to work with key press
36
+
37
+ ## [1.9.0] - 2026-01-28
38
+
39
+ ### Added
40
+
41
+ - `limestone/Button` `focusEffect` prop to set the visual effect applied to the button when focused.
42
+ - `limestone/Icon` supported icon list, adding new icons `btspeakermute`, `system`, `remotecontrolsetting`, `warning`, `filepdf`, `filedoc`, `filexls`, `subtitleru`, and `mypageru`
43
+
44
+ ### Changed
45
+
46
+ - `limestone/Button` styling to match the latest GUI
47
+ - `limestone/Card` styling to match the latest GUI
48
+ - `limestone/Chip` styling to match the latest GUI
49
+ - `limestone/IconItem` styling to match the latest GUI
50
+ - `limestone/MediaOverlay` styling to match the latest GUI
51
+ - `limestone/Slider` styling to match the latest GUI
52
+ - `limestone/Spinner` to match the latest GUI
53
+
54
+ ### Fixed
55
+
56
+ - `limestone/Card` to not overflow text when `withoutMarquee` is set
57
+ - `limestone/Input` `overlay` `Back` button to not overflow the `InputField` in case the `Title` or `Subtitle` is not set
58
+ - `limestone/PageViews` to properly navigate between multiple `PageViews`
59
+ - `limestone/PageViews` to resume spotlight on unmount
60
+
61
+ ## [1.8.0] - 2025-12-30
62
+
63
+ ### Added
64
+
65
+ - `limestone/MediaPlayer.MediaControls` `nextAriaLabel` prop to custom the aria-label of the next button
66
+ - `limestone/MediaPlayer.MediaControls` `nextButtonDisabled` prop to disable the next button
67
+ - `limestone/MediaPlayer.MediaControls` `nextIcon` prop to select the next button icon
68
+ - `limestone/MediaPlayer.MediaControls` `noNextButton` prop to remove the next button
69
+ - `limestone/MediaPlayer.MediaControls` `noPreviousButton` prop to remove the previous button
70
+ - `limestone/MediaPlayer.MediaControls` `onNextButtonClick` prop to custom the next button behavior when it is clicked
71
+ - `limestone/MediaPlayer.MediaControls` `onPreviousButtonClick` prop to custom the previous button behavior when it is clicked
72
+ - `limestone/MediaPlayer.MediaControls` `previousAriaLabel` prop to custom the aria-label of the previous button
73
+ - `limestone/MediaPlayer.MediaControls` `previousButtonDisabled` prop to disable the previous button
74
+ - `limestone/MediaPlayer.MediaControls` `previousIcon` prop to select the previous button icon
75
+ - `limestone/VideoPlayer` `onNext` prop to custom the next button behavior when it is clicked
76
+ - `limestone/VideoPlayer` `onPrevious` prop to custom the previous button behavior when it is clicked
77
+ - `limestone/VideoPlayer` `onWillNext` prop to custom the next button behavior before playing the next video when it is clicked
78
+ - `limestone/VideoPlayer` `onWillPrevious` prop to custom the previous button behavior before playing the previous video when it is clicked
79
+
80
+ ### Changed
81
+
82
+ - `limestone/TabLayout` styling to match the latest GUI
83
+ - `limestone/VirtualList` warning condition so the message will be shown only when `itemSizes.minSize` and `cbScrollTo` are set
84
+
85
+ ### Fixed
86
+
87
+ - `limestone/InputField` to not overflow the parent container.
88
+
89
+ ## [1.6.3] - 2025-12-26
90
+
91
+ ### Changed
92
+
93
+ - `limestone/VideoPlayer.FeedbackTooltip` to match the latest GUI
94
+
95
+ ## [1.7.0] - 2025-12-08
96
+
97
+ ### Added
98
+
99
+ - `limestone/Icon` supported icon list, adding new icons `link2` and `btspeakermute`
100
+ - `limestone/Card` `aria-label` prop to allow user to custom the aria-label
101
+ - `limestone/Card` `icon` prop to allow user to change the icon
102
+ - `limestone/Card` added option for progressBar
103
+ - `limestone/Card` `splitCaption` prop to allow user to split the content for the captions
104
+ - `limestone/Card` `withoutMarquee` prop to allow user to remove the text marquee effect
105
+ - `limestone/Chip` `checked` prop to allow user to mark `Chip` component as `checked`
106
+ - `limestone/Chip` `isImage` and `imageSize` props to allow user to use `Image` instead of `Icon`
107
+ - `limestone/PageViews` `bannerMode` prop to allow 5-way navigation between pages
108
+ - `limestone/ThemeDecorator/screenTypes` value `wuhd` to support WUHD displays
109
+
110
+ ### Changed
111
+
112
+ - `limestone/Card` to match the latest GUI
113
+ - `limestone/Checkbox` to match the latest GUI
114
+ - `limestone/ImageItem` to match the latest GUI
115
+ - `limestone/RadioItem` to match the latest GUI
116
+ - `limestone/useScroll.HoverToScroll` scroll animation speed
117
+ - `limestone/VideoPlayer.FeedbackTooltip` to match the latest GUI
118
+
119
+ ### Fixed
120
+
121
+ - `limetone/Card` voice control to select the Card
122
+ - `limestone/ContextualPopupDecorator` to be positioned appropriately on dynamic resolution changes
123
+ - `limestone/Panels.Header` to use correct positions for elements inside slotBefore and slotAfter
124
+ - `limestone/VideoPlayer.FeedbackTooltip` to use correct font family
125
+
126
+ ## [1.6.2] - 2025-11-05
127
+
128
+ ### Fixed
129
+
130
+ - `limestone/Panels.Header` to use same Header height with/without subtitle.
131
+
132
+ ## [1.6.1] - 2025-10-29
133
+
134
+ ### Added
135
+
136
+ - `limestone/Card` audio guidance for disabled
137
+ - `limestone/Icon` supported icon list, updating existing icons
138
+
139
+ ### Fixed
140
+
141
+ - `limestone/ImageItem` to get custom `aria-label`
142
+ - `limestone/Input` `fullscreen` to prevent the title in portrait mode from rendering over the close button
143
+ - `limestone/Input` `overlay` to prevent the invalid tooltip from overflowing
144
+ - `limestone/Panels.Header` to stop layout shifting on render
145
+ - `limestone/Panels.Header` to stop layout shifting when `noCloseButton` is active
146
+ - `limestone/TabLayout` automatic expand/collapse behavior on screen orientation changes
147
+ - `limestone/VideoPlayer` feedback style
148
+
149
+ ## [1.6.0] - 2025-10-14
150
+
151
+ ### Added
152
+
153
+ - `limestone/Dropdown` aria props for audio guidance
154
+ - `limestone/Scroller` `scrollToContentContainerOnFocus` prop to scrolls to the content container when descendants get focused
155
+ - `limestone/TabLayout` `blockExpandOnLandscape` prop to prevent the tab list from automatically expand when the screen orientation changes to landscape mode
156
+
157
+ ### Changed
158
+
159
+ - `limestone/Panels` to match the latest GUI
160
+ - `limestone/PopupTabLayout` to match the latest GUI
161
+ - `limestone/TabLayout` vertical to be expanded in landscape mode
162
+ - `limestone/VideoPlayer` to match the latest GUI
163
+
164
+ ### Fixed
165
+
166
+ - `limestone/ContextualPopupDecorator` to focus content with timeout when popup opens
167
+ - `limestone/Dropdown` audio guidance for DropdownList
168
+ - `limestone/Panels.Header` to stop layout shifting when `slotAfter` or `slotBefore` are modified
169
+ - `limestone/Scroller` with `editable` prop to have proper `aria-label` when item is selected
170
+ - `limestone/TabLayout` to correctly scroll on tab change, when it is wrapped in `ContentContainerDecorator`
171
+
172
+ ## [1.5.0] - 2025-09-24
173
+
174
+ ### Added
175
+
176
+ - `limestone/Card` `fitImage` prop to allow image to fit the container by height and be centered
177
+
178
+ ### Fixed
179
+
180
+ - `limestone/FlexiblePopupPanels` to match the latest GUI
181
+ - `limestone/Panels.Header` to match the latest GUI
182
+ - `limestone/VideoPlayer` position of feedback content
183
+ - `limestone/VirtualList.VirtualGridList` not to show overscroll effect when press down key
184
+
185
+ ## [1.4.0] - 2025-09-15
186
+
187
+ ### Added
188
+
189
+ - `limestone/CheckboxItem` `CheckboxItemGroup` to wrap multiple checkbox items as a list
190
+ - `limestone/Item` props `slotAfterAria` and `slotBeforeAria` for audio guidance of slotAfter and slotBefore
191
+ - `limestone/RadioItem` `RadioItemGroup` to wrap multiple radio items as a list
192
+ - `limestone/VirtualList` prop `continue5WayHold` to scroll continuously from in a VirtualList to the outer scroller.
193
+
194
+ ### Changed
195
+
196
+ - `limestone/Chip` audio guidance for chip button and delete button
197
+ - `limestone/ImageItem` audio guidance for selected
198
+
199
+ ### Fixed
200
+
201
+ - `limestone/Alert` buttons styles for overlay `type`.
202
+ - `limestone/Card` to block select on `keyDown` instead of `keyUp` when `disabled`
203
+ - `limestone/ContextualPopupDecorator` to focus content with timeout when popup opens
204
+ - `limestone/DatePicker` to match the latest GUI
205
+ - `limestone/Dropdown` by removing unnecessary aria props
206
+ - `limestone/Input` buttons styles for number `popupType`.
207
+ - `limestone/InputField` to not clip icons in webOS system.
208
+ - `limestone/MediaPlayer.MediaControls` enforced direction of buttons as `ltr` to prevent them from swapping in RTL locales
209
+ - `limestone/Panels.Header` to match the latest GUI
210
+ - `limestone/TimePicker` to match the latest GUI
211
+ - `limestone/VideoPlayer` to read out the timestamp properly
212
+
213
+ ## [1.3.2] - 2025-09-02
214
+
215
+ ### Fixed
216
+
217
+ - `limestone/Alert` to show the outline appropriately in high-contrast mode
218
+ - `limestone/Button` icon color to support style override
219
+ - `limestone/Card` audio guidance to translate
220
+ - `limestone/Card` `background` and `border` for `focusRing` mode
221
+ - `limestone/KeyGuide` to show the outline appropriately in high-contrast mode
222
+ - `limestone/Scroller` with `editable` prop to remain focused on the selected item when completing edit by down or enter key in pointer mode
223
+ - `limestone/PopupTabLayout` to show the background color appropriately in high-contrast mode
224
+
225
+ ## [1.3.1] - 2025-08-14
226
+
227
+ ### Changed
228
+
229
+ - Global variable from `ILIB_SANDSTONE_PATH` to `ILIB_LIMESTONE_PATH`
230
+
5
231
  ## [1.3.0] - 2025-08-08
6
232
 
7
233
  ### Added
package/Card/Card.d.ts CHANGED
@@ -20,6 +20,10 @@ String value or Object of values used to determine which image will appear on
20
20
  a specific screenSize.
21
21
  */
22
22
  src: string | object;
23
+ /**
24
+ * The "aria-label" for the Card.
25
+ */
26
+ "aria-label"?: string;
23
27
  /**
24
28
  * Determines whether the caption will be placed over the image or not.
25
29
  It only applies when `orientation` is `'vertical'` .
@@ -43,11 +47,19 @@ corresponding internal elements and states of this component.
43
47
  * Disables Card and becomes non-interactive.
44
48
  */
45
49
  disabled?: boolean;
50
+ /**
51
+ * Fits the image to its height and width and positions it on the center of the Card.
52
+ */
53
+ fitImage?: boolean;
46
54
  /**
47
55
  * Set to `true` to display a container with background color.
48
56
  When `orientation` is `'horizontal'` , this prop is always `true` and provided value will be ignored.
49
57
  */
50
58
  hasContainer?: boolean;
59
+ /**
60
+ * Icon used when `selected` is `true`
61
+ */
62
+ icon?: string;
51
63
  /**
52
64
  * Source for the image icon.
53
65
  *
@@ -79,6 +91,10 @@ a specific screenSize. This prop is only used when `orientation` is `'vertica
79
91
  * The primary badge image source.
80
92
  */
81
93
  primaryBadgeSrc?: string | object;
94
+ /**
95
+ * The progress displayed inside the ProgressBar
96
+ */
97
+ progress?: number;
82
98
  /**
83
99
  * Set to `true` to display the image with rounded corners.
84
100
  */
@@ -95,6 +111,19 @@ a specific screenSize. This prop is only used when `orientation` is `'vertica
95
111
  * Applies a selected visual effect to the image.
96
112
  */
97
113
  selected?: boolean;
114
+ /**
115
+ * Activates the 'ProgressBar'.
116
+ */
117
+ showProgressBar?: boolean;
118
+ /**
119
+ * Splits the captions in two sections. This prop is only used when
120
+ `captionOverlayOnFocus` or `captionOverlay` is `true` and `orientation` is `'vertical'` .
121
+ */
122
+ splitCaption?: boolean;
123
+ /**
124
+ * Removes the marquee effect of caption and label text.
125
+ */
126
+ withoutMarquee?: boolean;
98
127
  }
99
128
  /**
100
129
  * A Limestone styled base component for .
@@ -104,14 +133,13 @@ export class CardBase extends React.Component<
104
133
  Merge<React.HTMLProps<HTMLElement>, CardBaseProps>
105
134
  > {}
106
135
 
107
- export interface CardDecoratorProps
108
- extends Merge<
109
- Merge<
110
- limestone_Marquee_MarqueeControllerProps,
111
- spotlight_Spottable_SpottableProps
112
- >,
113
- limestone_Skinnable_SkinnableProps
114
- > {}
136
+ export interface CardDecoratorProps extends Merge<
137
+ Merge<
138
+ limestone_Marquee_MarqueeControllerProps,
139
+ spotlight_Spottable_SpottableProps
140
+ >,
141
+ limestone_Skinnable_SkinnableProps
142
+ > {}
115
143
  export function CardDecorator<P>(
116
144
  Component: React.ComponentType<P> | string,
117
145
  ): React.ComponentType<P & CardDecoratorProps>;
package/Card/Card.js CHANGED
@@ -9,17 +9,20 @@ var _kind = _interopRequireDefault(require("@enact/core/kind"));
9
9
  var _Spottable = _interopRequireDefault(require("@enact/spotlight/Spottable"));
10
10
  var _Card = require("@enact/ui/Card");
11
11
  var _Layout = require("@enact/ui/Layout");
12
+ var _Touchable = _interopRequireDefault(require("@enact/ui/Touchable"));
12
13
  var _resolution = _interopRequireDefault(require("@enact/ui/resolution"));
13
14
  var _propTypes = _interopRequireDefault(require("prop-types"));
14
15
  var _compose = _interopRequireDefault(require("ramda/src/compose"));
15
16
  var _Icon = _interopRequireDefault(require("../Icon"));
16
17
  var _Image = _interopRequireDefault(require("../Image"));
18
+ var _$L = _interopRequireDefault(require("../internal/$L"));
17
19
  var _AsyncRenderChildren = _interopRequireDefault(require("../internal/AsyncRenderChildren"));
18
20
  var _Marquee = require("../Marquee");
21
+ var _ProgressBar = _interopRequireDefault(require("../ProgressBar"));
19
22
  var _Skinnable = _interopRequireDefault(require("../Skinnable"));
20
23
  var _CardModule = _interopRequireDefault(require("./Card.module.css"));
21
24
  var _jsxRuntime = require("react/jsx-runtime");
22
- var _excluded = ["css", "imageSize", "primaryBadgeSrc", "secondaryBadgeSrc", "style"];
25
+ var _excluded = ["css", "disabled", "icon", "imageSize", "primaryBadgeSrc", "secondaryBadgeSrc", "style"];
23
26
  function _interopRequireDefault(e) { return e && e.__esModule ? e : { "default": e }; }
24
27
  function _objectWithoutProperties(e, t) { if (null == e) return {}; var o, r, i = _objectWithoutPropertiesLoose(e, t); if (Object.getOwnPropertySymbols) { var n = Object.getOwnPropertySymbols(e); for (r = 0; r < n.length; r++) o = n[r], -1 === t.indexOf(o) && {}.propertyIsEnumerable.call(e, o) && (i[o] = e[o]); } return i; }
25
28
  function _objectWithoutPropertiesLoose(r, e) { if (null == r) return {}; var t = {}; for (var n in r) if ({}.hasOwnProperty.call(r, n)) { if (-1 !== e.indexOf(n)) continue; t[n] = r[n]; } return t; }
@@ -87,6 +90,13 @@ var CardBase = exports.CardBase = (0, _kind["default"])({
87
90
  * @public
88
91
  */
89
92
  src: _propTypes["default"].oneOfType([_propTypes["default"].string, _propTypes["default"].object]).isRequired,
93
+ /**
94
+ * The "aria-label" for the Card.
95
+ *
96
+ * @type {String}
97
+ * @public
98
+ */
99
+ 'aria-label': _propTypes["default"].string,
90
100
  /**
91
101
  * Determines whether the caption will be placed over the image or not.
92
102
  * It only applies when `orientation` is `'vertical'`.
@@ -132,6 +142,13 @@ var CardBase = exports.CardBase = (0, _kind["default"])({
132
142
  * @public
133
143
  */
134
144
  disabled: _propTypes["default"].bool,
145
+ /**
146
+ * Fits the image to its height and width and positions it on the center of the Card.
147
+ *
148
+ * @type {Boolean}
149
+ * @public
150
+ */
151
+ fitImage: _propTypes["default"].bool,
135
152
  /**
136
153
  * Set to `true` to display a container with background color.
137
154
  * When `orientation` is `'horizontal'`, this prop is always `true` and provided value will be ignored.
@@ -140,6 +157,14 @@ var CardBase = exports.CardBase = (0, _kind["default"])({
140
157
  * @public
141
158
  */
142
159
  hasContainer: _propTypes["default"].bool,
160
+ /**
161
+ * Icon used when `selected` is `true`
162
+ *
163
+ * @type {String}
164
+ * @default 'check'
165
+ * @public
166
+ */
167
+ icon: _propTypes["default"].string,
143
168
  /**
144
169
  * Source for the image icon.
145
170
  *
@@ -186,6 +211,14 @@ var CardBase = exports.CardBase = (0, _kind["default"])({
186
211
  * @public
187
212
  */
188
213
  placeholder: _propTypes["default"].string,
214
+ /**
215
+ * Indicates if the component is pressed.
216
+ *
217
+ * @type {Boolean}
218
+ * @default false
219
+ * @private
220
+ */
221
+ pressed: _propTypes["default"].bool,
189
222
  /**
190
223
  * The primary badge image source.
191
224
  *
@@ -193,6 +226,13 @@ var CardBase = exports.CardBase = (0, _kind["default"])({
193
226
  * @public
194
227
  */
195
228
  primaryBadgeSrc: _propTypes["default"].oneOfType([_propTypes["default"].string, _propTypes["default"].object]),
229
+ /**
230
+ * The progress displayed inside the ProgressBar
231
+ *
232
+ * @type {Number}
233
+ * @public
234
+ */
235
+ progress: _propTypes["default"].number,
196
236
  /**
197
237
  * Set to `true` to display the image with rounded corners.
198
238
  *
@@ -220,10 +260,34 @@ var CardBase = exports.CardBase = (0, _kind["default"])({
220
260
  * @type {Boolean}
221
261
  * @public
222
262
  */
223
- selected: _propTypes["default"].bool
263
+ selected: _propTypes["default"].bool,
264
+ /**
265
+ * Activates the 'ProgressBar'.
266
+ *
267
+ * @type {Boolean}
268
+ * @public
269
+ */
270
+ showProgressBar: _propTypes["default"].bool,
271
+ /**
272
+ * Splits the captions in two sections. This prop is only used when
273
+ * `captionOverlayOnFocus` or `captionOverlay` is `true` and `orientation` is `'vertical'`.
274
+ *
275
+ * @type {Boolean}
276
+ * @public
277
+ */
278
+ splitCaption: _propTypes["default"].bool,
279
+ /**
280
+ * Removes the marquee effect of caption and label text.
281
+ * @type {Boolean}
282
+ * @public
283
+ */
284
+ withoutMarquee: _propTypes["default"].bool
224
285
  },
225
286
  defaultProps: {
226
- orientation: 'vertical'
287
+ icon: 'check',
288
+ orientation: 'vertical',
289
+ pressed: false,
290
+ withoutMarquee: false
227
291
  },
228
292
  styles: {
229
293
  css: _CardModule["default"],
@@ -231,15 +295,16 @@ var CardBase = exports.CardBase = (0, _kind["default"])({
231
295
  },
232
296
  handlers: {
233
297
  onClick: (0, _handle.handle)((0, _handle.not)((0, _handle.forProp)('disabled', true)), (0, _handle.forward)('onClick')),
234
- onKeyUp: (0, _handle.handle)((0, _handle.not)((0, _handle.forProp)('disabled', true)), (0, _handle.forward)('onKeyUp'))
298
+ onKeyDown: (0, _handle.handle)((0, _handle.not)((0, _handle.forProp)('disabled', true)), (0, _handle.forward)('onKeyDown'))
235
299
  },
236
300
  computed: {
237
301
  'aria-label': function ariaLabel(_ref) {
238
- var children = _ref.children,
302
+ var _ariaLabel = _ref['aria-label'],
303
+ children = _ref.children,
239
304
  label = _ref.label,
240
305
  secondaryLabel = _ref.secondaryLabel,
241
306
  selected = _ref.selected;
242
- return "".concat(children || '').concat(label ? " ".concat(label) : '').concat(secondaryLabel ? " ".concat(secondaryLabel) : '').concat(selected ? ' selected' : '');
307
+ return _ariaLabel || "".concat(children || '').concat(label ? " ".concat(label) : '').concat(secondaryLabel ? " ".concat(secondaryLabel) : '').concat(selected ? ' ' + (0, _$L["default"])('Selected') : '');
243
308
  },
244
309
  captionOverlay: function captionOverlay(_ref2) {
245
310
  var _captionOverlay = _ref2.captionOverlay,
@@ -247,14 +312,20 @@ var CardBase = exports.CardBase = (0, _kind["default"])({
247
312
  return _captionOverlay || captionOverlayOnFocus;
248
313
  },
249
314
  children: function children(_ref3) {
250
- var centered = _ref3.centered,
315
+ var captionOverlay = _ref3.captionOverlay,
316
+ captionOverlayOnFocus = _ref3.captionOverlayOnFocus,
317
+ centered = _ref3.centered,
251
318
  _children = _ref3.children,
252
319
  css = _ref3.css,
253
320
  index = _ref3['data-index'],
254
321
  imageIconSrc = _ref3.imageIconSrc,
255
322
  label = _ref3.label,
256
323
  orientation = _ref3.orientation,
257
- secondaryLabel = _ref3.secondaryLabel;
324
+ progress = _ref3.progress,
325
+ secondaryLabel = _ref3.secondaryLabel,
326
+ showProgressBar = _ref3.showProgressBar,
327
+ splitCaption = _ref3.splitCaption,
328
+ withoutMarquee = _ref3.withoutMarquee;
258
329
  var hasImageIcon = imageIconSrc && orientation === 'vertical';
259
330
  var alignment = centered && !imageIconSrc ? {
260
331
  alignment: 'center'
@@ -266,7 +337,29 @@ var CardBase = exports.CardBase = (0, _kind["default"])({
266
337
  component: _Image["default"],
267
338
  shrink: true,
268
339
  src: imageIconSrc
269
- }) : null, /*#__PURE__*/(0, _jsxRuntime.jsxs)(_Layout.Cell, {
340
+ }) : null, withoutMarquee ? /*#__PURE__*/(0, _jsxRuntime.jsxs)(_Layout.Cell, {
341
+ children: [/*#__PURE__*/(0, _jsxRuntime.jsx)("div", {
342
+ style: {
343
+ textAlign: alignment === null || alignment === void 0 ? void 0 : alignment.alignment
344
+ },
345
+ className: css.caption,
346
+ children: _children
347
+ }), typeof label !== 'undefined' ? /*#__PURE__*/(0, _jsxRuntime.jsx)("div", {
348
+ style: {
349
+ textAlign: alignment === null || alignment === void 0 ? void 0 : alignment.alignment
350
+ },
351
+ className: css.label,
352
+ children: label
353
+ }) : null, typeof secondaryLabel !== 'undefined' ? /*#__PURE__*/(0, _jsxRuntime.jsx)("div", {
354
+ style: {
355
+ textAlign: alignment === null || alignment === void 0 ? void 0 : alignment.alignment
356
+ },
357
+ className: css.label,
358
+ children: secondaryLabel
359
+ }) : null, showProgressBar ? /*#__PURE__*/(0, _jsxRuntime.jsx)(_ProgressBar["default"], {
360
+ progress: progress
361
+ }) : null]
362
+ }) : /*#__PURE__*/(0, _jsxRuntime.jsxs)(_Layout.Cell, {
270
363
  children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_Marquee.Marquee, _objectSpread(_objectSpread({}, alignment), {}, {
271
364
  className: css.caption,
272
365
  marqueeOn: "hover",
@@ -279,9 +372,32 @@ var CardBase = exports.CardBase = (0, _kind["default"])({
279
372
  className: css.label,
280
373
  marqueeOn: "hover",
281
374
  children: secondaryLabel
375
+ })) : null, showProgressBar ? /*#__PURE__*/(0, _jsxRuntime.jsx)(_ProgressBar["default"], {
376
+ progress: progress
377
+ }) : null]
378
+ })]
379
+ });
380
+ var splitCaptions = /*#__PURE__*/(0, _jsxRuntime.jsxs)(_jsxRuntime.Fragment, {
381
+ children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_Layout.Cell, {
382
+ className: css.captions,
383
+ children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_Marquee.Marquee, _objectSpread(_objectSpread({}, alignment), {}, {
384
+ className: css.caption,
385
+ marqueeOn: "hover",
386
+ children: _children
387
+ }))
388
+ }), /*#__PURE__*/(0, _jsxRuntime.jsxs)(_Layout.Cell, {
389
+ children: [typeof label !== 'undefined' ? /*#__PURE__*/(0, _jsxRuntime.jsx)(_Marquee.Marquee, _objectSpread(_objectSpread({}, alignment), {}, {
390
+ className: css.label,
391
+ marqueeOn: "hover",
392
+ children: label
393
+ })) : null, typeof secondaryLabel !== 'undefined' ? /*#__PURE__*/(0, _jsxRuntime.jsx)(_Marquee.Marquee, _objectSpread(_objectSpread({}, alignment), {}, {
394
+ className: css.label,
395
+ marqueeOn: "hover",
396
+ children: secondaryLabel
282
397
  })) : null]
283
398
  })]
284
399
  });
400
+ var selectedCaptions = (captionOverlay || captionOverlayOnFocus) && splitCaption && orientation === 'vertical' ? splitCaptions : captions;
285
401
  return typeof index !== 'undefined' ? /*#__PURE__*/(0, _jsxRuntime.jsx)(_AsyncRenderChildren["default"], {
286
402
  fallback: /*#__PURE__*/(0, _jsxRuntime.jsxs)(_Layout.Row, {
287
403
  className: css.captions,
@@ -296,12 +412,14 @@ var CardBase = exports.CardBase = (0, _kind["default"])({
296
412
  })]
297
413
  }),
298
414
  index: index,
299
- children: captions
300
- }) : captions;
415
+ children: selectedCaptions
416
+ }) : selectedCaptions;
301
417
  },
302
418
  className: function className(_ref4) {
303
419
  var captionOverlay = _ref4.captionOverlay,
304
420
  captionOverlayOnFocus = _ref4.captionOverlayOnFocus,
421
+ icon = _ref4.icon,
422
+ pressed = _ref4.pressed,
305
423
  roundedImage = _ref4.roundedImage,
306
424
  hasContainer = _ref4.hasContainer,
307
425
  orientation = _ref4.orientation,
@@ -309,29 +427,46 @@ var CardBase = exports.CardBase = (0, _kind["default"])({
309
427
  return styler.append({
310
428
  captionOverlay: captionOverlay && orientation === 'vertical',
311
429
  captionOverlayOnFocus: !captionOverlay && captionOverlayOnFocus && orientation === 'vertical',
430
+ pressed: pressed,
312
431
  roundedImage: roundedImage,
313
- hasContainer: orientation === 'horizontal' || hasContainer && !captionOverlay
432
+ hasContainer: orientation === 'horizontal' || hasContainer && !captionOverlay,
433
+ isCheckIcon: icon === 'check'
314
434
  });
435
+ },
436
+ splitCaption: function splitCaption(_ref5) {
437
+ var captionOverlay = _ref5.captionOverlay,
438
+ captionOverlayOnFocus = _ref5.captionOverlayOnFocus,
439
+ _splitCaption = _ref5.splitCaption;
440
+ return (captionOverlay || captionOverlayOnFocus) && _splitCaption;
315
441
  }
316
442
  },
317
- render: function render(_ref5) {
443
+ render: function render(_ref6) {
318
444
  var _imageSize$height, _imageSize$width;
319
- var css = _ref5.css,
320
- imageSize = _ref5.imageSize,
321
- primaryBadgeSrc = _ref5.primaryBadgeSrc,
322
- secondaryBadgeSrc = _ref5.secondaryBadgeSrc,
323
- style = _ref5.style,
324
- rest = _objectWithoutProperties(_ref5, _excluded);
445
+ var css = _ref6.css,
446
+ disabled = _ref6.disabled,
447
+ icon = _ref6.icon,
448
+ imageSize = _ref6.imageSize,
449
+ primaryBadgeSrc = _ref6.primaryBadgeSrc,
450
+ secondaryBadgeSrc = _ref6.secondaryBadgeSrc,
451
+ style = _ref6.style,
452
+ rest = _objectWithoutProperties(_ref6, _excluded);
325
453
  delete rest.captionOverlayOnFocus;
326
454
  delete rest.centered;
327
455
  delete rest.label;
456
+ delete rest.progress;
328
457
  delete rest.secondaryLabel;
458
+ delete rest.showProgressBar;
329
459
  delete rest.imageIconSrc;
330
460
  delete rest.hasContainer;
461
+ delete rest.pressed;
331
462
  delete rest.roundedImage;
463
+ delete rest.withoutMarquee;
332
464
  var defaultImageSize = getDefaultImageSize(rest.orientation);
333
465
  return /*#__PURE__*/(0, _jsxRuntime.jsx)(_Card.Card, _objectSpread(_objectSpread({}, rest), {}, {
466
+ "aria-disabled": disabled,
334
467
  css: css,
468
+ "data-webos-voice-intent": "Select",
469
+ disabled: disabled,
335
470
  imageComponent: /*#__PURE__*/(0, _jsxRuntime.jsxs)(_Image["default"], {
336
471
  children: [primaryBadgeSrc ? /*#__PURE__*/(0, _jsxRuntime.jsx)(_Image["default"], {
337
472
  className: css.primaryBadge,
@@ -343,7 +478,7 @@ var CardBase = exports.CardBase = (0, _kind["default"])({
343
478
  className: css.selectionContainer,
344
479
  children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_Icon["default"], {
345
480
  className: css.selectionIcon,
346
- children: "check"
481
+ children: icon
347
482
  })
348
483
  })]
349
484
  }),
@@ -368,6 +503,8 @@ var CardBase = exports.CardBase = (0, _kind["default"])({
368
503
  */
369
504
  var CardDecorator = exports.CardDecorator = (0, _compose["default"])((0, _Marquee.MarqueeController)({
370
505
  marqueeOnFocus: true
506
+ }), (0, _Touchable["default"])({
507
+ activeProp: 'pressed'
371
508
  }), _Spottable["default"], _Skinnable["default"]);
372
509
 
373
510
  /**