@enact/limestone 1.3.0 → 1.9.3

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 (163) 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 +220 -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/WizardPanels/WizardPanels.module.css +2 -2
  143. package/WizardPanels/index.d.ts +4 -2
  144. package/fonts/Limestone_Icons.ttf +0 -0
  145. package/internal/$L/$L.js +3 -3
  146. package/internal/DateComponentPicker/DateComponentPicker.module.css +2 -2
  147. package/internal/DateTime/DateTime.module.css +1 -0
  148. package/internal/Panels/PanelsRouter.js +16 -5
  149. package/internal/Picker/Picker.module.css +2 -2
  150. package/internal/SharedStateDecorator/SharedStateDecorator.js +76 -99
  151. package/internal/validators/validators.js +21 -2
  152. package/package.json +14 -14
  153. package/styles/colors-highcontrast.less +9 -1
  154. package/styles/colors.less +11 -7
  155. package/styles/motion-mixins.less +66 -0
  156. package/styles/motions.less +78 -0
  157. package/styles/variables.less +176 -150
  158. package/useScroll/HoverToScroll.js +8 -5
  159. package/useScroll/ScrollbarTrack.module.css +8 -8
  160. package/useScroll/useEvent.js +7 -1
  161. package/useScroll/useScroll.js +2 -0
  162. package/useScroll/useScroll.module.css +6 -6
  163. package/.travis.yml +0 -40
package/CHANGELOG.md CHANGED
@@ -2,6 +2,226 @@
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.3] - 2026-04-20
6
+
7
+ ### Fixed
8
+
9
+ - `limestone/Popup` to not delay when closed with pointer
10
+
11
+ ## [1.9.2] - 2026-03-10
12
+
13
+ ### Fixed
14
+
15
+ - `limestone/Card` `captionOverlayOnFocus` prop to work in `focusRing` mode
16
+
17
+ ## [1.9.1] - 2026-02-26
18
+
19
+ ### Changed
20
+
21
+ - `limestone/Slider` styling to match the latest GUI
22
+
23
+ ### Fixed
24
+
25
+ - `limestone/Card` press motion to work with key press
26
+ - `limestone/IconItem` press motion to work with key press
27
+ - `limestone/MediaOverlay` press motion to work with key press
28
+ - `limestone/Popup` to avoid popup content blinking into existence after render
29
+ - `limestone/Slider` press motion to work with key press
30
+
31
+ ## [1.9.0] - 2026-01-28
32
+
33
+ ### Added
34
+
35
+ - `limestone/Button` `focusEffect` prop to set the visual effect applied to the button when focused.
36
+ - `limestone/Icon` supported icon list, adding new icons `btspeakermute`, `system`, `remotecontrolsetting`, `warning`, `filepdf`, `filedoc`, `filexls`, `subtitleru`, and `mypageru`
37
+
38
+ ### Changed
39
+
40
+ - `limestone/Button` styling to match the latest GUI
41
+ - `limestone/Card` styling to match the latest GUI
42
+ - `limestone/Chip` styling to match the latest GUI
43
+ - `limestone/IconItem` styling to match the latest GUI
44
+ - `limestone/MediaOverlay` styling to match the latest GUI
45
+ - `limestone/Slider` styling to match the latest GUI
46
+ - `limestone/Spinner` to match the latest GUI
47
+
48
+ ### Fixed
49
+
50
+ - `limestone/Card` to not overflow text when `withoutMarquee` is set
51
+ - `limestone/Input` `overlay` `Back` button to not overflow the `InputField` in case the `Title` or `Subtitle` is not set
52
+ - `limestone/PageViews` to properly navigate between multiple `PageViews`
53
+ - `limestone/PageViews` to resume spotlight on unmount
54
+
55
+ ## [1.8.0] - 2025-12-30
56
+
57
+ ### Added
58
+
59
+ - `limestone/MediaPlayer.MediaControls` `nextAriaLabel` prop to custom the aria-label of the next button
60
+ - `limestone/MediaPlayer.MediaControls` `nextButtonDisabled` prop to disable the next button
61
+ - `limestone/MediaPlayer.MediaControls` `nextIcon` prop to select the next button icon
62
+ - `limestone/MediaPlayer.MediaControls` `noNextButton` prop to remove the next button
63
+ - `limestone/MediaPlayer.MediaControls` `noPreviousButton` prop to remove the previous button
64
+ - `limestone/MediaPlayer.MediaControls` `onNextButtonClick` prop to custom the next button behavior when it is clicked
65
+ - `limestone/MediaPlayer.MediaControls` `onPreviousButtonClick` prop to custom the previous button behavior when it is clicked
66
+ - `limestone/MediaPlayer.MediaControls` `previousAriaLabel` prop to custom the aria-label of the previous button
67
+ - `limestone/MediaPlayer.MediaControls` `previousButtonDisabled` prop to disable the previous button
68
+ - `limestone/MediaPlayer.MediaControls` `previousIcon` prop to select the previous button icon
69
+ - `limestone/VideoPlayer` `onNext` prop to custom the next button behavior when it is clicked
70
+ - `limestone/VideoPlayer` `onPrevious` prop to custom the previous button behavior when it is clicked
71
+ - `limestone/VideoPlayer` `onWillNext` prop to custom the next button behavior before playing the next video when it is clicked
72
+ - `limestone/VideoPlayer` `onWillPrevious` prop to custom the previous button behavior before playing the previous video when it is clicked
73
+
74
+ ### Changed
75
+
76
+ - `limestone/TabLayout` styling to match the latest GUI
77
+ - `limestone/VirtualList` warning condition so the message will be shown only when `itemSizes.minSize` and `cbScrollTo` are set
78
+
79
+ ### Fixed
80
+
81
+ - `limestone/InputField` to not overflow the parent container.
82
+
83
+ ## [1.6.3] - 2025-12-26
84
+
85
+ ### Changed
86
+
87
+ - `limestone/VideoPlayer.FeedbackTooltip` to match the latest GUI
88
+
89
+ ## [1.7.0] - 2025-12-08
90
+
91
+ ### Added
92
+
93
+ - `limestone/Icon` supported icon list, adding new icons `link2` and `btspeakermute`
94
+ - `limestone/Card` `aria-label` prop to allow user to custom the aria-label
95
+ - `limestone/Card` `icon` prop to allow user to change the icon
96
+ - `limestone/Card` added option for progressBar
97
+ - `limestone/Card` `splitCaption` prop to allow user to split the content for the captions
98
+ - `limestone/Card` `withoutMarquee` prop to allow user to remove the text marquee effect
99
+ - `limestone/Chip` `checked` prop to allow user to mark `Chip` component as `checked`
100
+ - `limestone/Chip` `isImage` and `imageSize` props to allow user to use `Image` instead of `Icon`
101
+ - `limestone/PageViews` `bannerMode` prop to allow 5-way navigation between pages
102
+ - `limestone/ThemeDecorator/screenTypes` value `wuhd` to support WUHD displays
103
+
104
+ ### Changed
105
+
106
+ - `limestone/Card` to match the latest GUI
107
+ - `limestone/Checkbox` to match the latest GUI
108
+ - `limestone/ImageItem` to match the latest GUI
109
+ - `limestone/RadioItem` to match the latest GUI
110
+ - `limestone/useScroll.HoverToScroll` scroll animation speed
111
+ - `limestone/VideoPlayer.FeedbackTooltip` to match the latest GUI
112
+
113
+ ### Fixed
114
+
115
+ - `limetone/Card` voice control to select the Card
116
+ - `limestone/ContextualPopupDecorator` to be positioned appropriately on dynamic resolution changes
117
+ - `limestone/Panels.Header` to use correct positions for elements inside slotBefore and slotAfter
118
+ - `limestone/VideoPlayer.FeedbackTooltip` to use correct font family
119
+
120
+ ## [1.6.2] - 2025-11-05
121
+
122
+ ### Fixed
123
+
124
+ - `limestone/Panels.Header` to use same Header height with/without subtitle.
125
+
126
+ ## [1.6.1] - 2025-10-29
127
+
128
+ ### Added
129
+
130
+ - `limestone/Card` audio guidance for disabled
131
+ - `limestone/Icon` supported icon list, updating existing icons
132
+
133
+ ### Fixed
134
+
135
+ - `limestone/ImageItem` to get custom `aria-label`
136
+ - `limestone/Input` `fullscreen` to prevent the title in portrait mode from rendering over the close button
137
+ - `limestone/Input` `overlay` to prevent the invalid tooltip from overflowing
138
+ - `limestone/Panels.Header` to stop layout shifting on render
139
+ - `limestone/Panels.Header` to stop layout shifting when `noCloseButton` is active
140
+ - `limestone/TabLayout` automatic expand/collapse behavior on screen orientation changes
141
+ - `limestone/VideoPlayer` feedback style
142
+
143
+ ## [1.6.0] - 2025-10-14
144
+
145
+ ### Added
146
+
147
+ - `limestone/Dropdown` aria props for audio guidance
148
+ - `limestone/Scroller` `scrollToContentContainerOnFocus` prop to scrolls to the content container when descendants get focused
149
+ - `limestone/TabLayout` `blockExpandOnLandscape` prop to prevent the tab list from automatically expand when the screen orientation changes to landscape mode
150
+
151
+ ### Changed
152
+
153
+ - `limestone/Panels` to match the latest GUI
154
+ - `limestone/PopupTabLayout` to match the latest GUI
155
+ - `limestone/TabLayout` vertical to be expanded in landscape mode
156
+ - `limestone/VideoPlayer` to match the latest GUI
157
+
158
+ ### Fixed
159
+
160
+ - `limestone/ContextualPopupDecorator` to focus content with timeout when popup opens
161
+ - `limestone/Dropdown` audio guidance for DropdownList
162
+ - `limestone/Panels.Header` to stop layout shifting when `slotAfter` or `slotBefore` are modified
163
+ - `limestone/Scroller` with `editable` prop to have proper `aria-label` when item is selected
164
+ - `limestone/TabLayout` to correctly scroll on tab change, when it is wrapped in `ContentContainerDecorator`
165
+
166
+ ## [1.5.0] - 2025-09-24
167
+
168
+ ### Added
169
+
170
+ - `limestone/Card` `fitImage` prop to allow image to fit the container by height and be centered
171
+
172
+ ### Fixed
173
+
174
+ - `limestone/FlexiblePopupPanels` to match the latest GUI
175
+ - `limestone/Panels.Header` to match the latest GUI
176
+ - `limestone/VideoPlayer` position of feedback content
177
+ - `limestone/VirtualList.VirtualGridList` not to show overscroll effect when press down key
178
+
179
+ ## [1.4.0] - 2025-09-15
180
+
181
+ ### Added
182
+
183
+ - `limestone/CheckboxItem` `CheckboxItemGroup` to wrap multiple checkbox items as a list
184
+ - `limestone/Item` props `slotAfterAria` and `slotBeforeAria` for audio guidance of slotAfter and slotBefore
185
+ - `limestone/RadioItem` `RadioItemGroup` to wrap multiple radio items as a list
186
+ - `limestone/VirtualList` prop `continue5WayHold` to scroll continuously from in a VirtualList to the outer scroller.
187
+
188
+ ### Changed
189
+
190
+ - `limestone/Chip` audio guidance for chip button and delete button
191
+ - `limestone/ImageItem` audio guidance for selected
192
+
193
+ ### Fixed
194
+
195
+ - `limestone/Alert` buttons styles for overlay `type`.
196
+ - `limestone/Card` to block select on `keyDown` instead of `keyUp` when `disabled`
197
+ - `limestone/ContextualPopupDecorator` to focus content with timeout when popup opens
198
+ - `limestone/DatePicker` to match the latest GUI
199
+ - `limestone/Dropdown` by removing unnecessary aria props
200
+ - `limestone/Input` buttons styles for number `popupType`.
201
+ - `limestone/InputField` to not clip icons in webOS system.
202
+ - `limestone/MediaPlayer.MediaControls` enforced direction of buttons as `ltr` to prevent them from swapping in RTL locales
203
+ - `limestone/Panels.Header` to match the latest GUI
204
+ - `limestone/TimePicker` to match the latest GUI
205
+ - `limestone/VideoPlayer` to read out the timestamp properly
206
+
207
+ ## [1.3.2] - 2025-09-02
208
+
209
+ ### Fixed
210
+
211
+ - `limestone/Alert` to show the outline appropriately in high-contrast mode
212
+ - `limestone/Button` icon color to support style override
213
+ - `limestone/Card` audio guidance to translate
214
+ - `limestone/Card` `background` and `border` for `focusRing` mode
215
+ - `limestone/KeyGuide` to show the outline appropriately in high-contrast mode
216
+ - `limestone/Scroller` with `editable` prop to remain focused on the selected item when completing edit by down or enter key in pointer mode
217
+ - `limestone/PopupTabLayout` to show the background color appropriately in high-contrast mode
218
+
219
+ ## [1.3.1] - 2025-08-14
220
+
221
+ ### Changed
222
+
223
+ - Global variable from `ILIB_SANDSTONE_PATH` to `ILIB_LIMESTONE_PATH`
224
+
5
225
  ## [1.3.0] - 2025-08-08
6
226
 
7
227
  ### 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
  /**