@enact/limestone 1.9.3 → 1.10.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (90) hide show
  1. package/.github/workflows/ci-reusable.yml +2 -2
  2. package/Alert/Alert.d.ts +9 -0
  3. package/Alert/Alert.js +35 -4
  4. package/Alert/Alert.module.css +12 -1
  5. package/Alert/tests/Alert-specs.js +91 -0
  6. package/Button/tests/Button-specs.js +26 -0
  7. package/CHANGELOG.md +34 -0
  8. package/Card/Card.d.ts +4 -4
  9. package/Card/Card.js +7 -8
  10. package/Card/tests/Card-specs.js +39 -5
  11. package/CheckboxItem/CheckboxItem.js +6 -4
  12. package/Chips/Chip.js +12 -6
  13. package/Chips/Chips.js +12 -6
  14. package/Chips/tests/Chip-specs.js +25 -5
  15. package/Chips/tests/Chips-specs.js +12 -2
  16. package/ColorPicker/ColorPicker.js +27 -25
  17. package/ContextualPopupDecorator/ContextualPopupDecorator.js +32 -22
  18. package/DayPicker/DaySelectorDecorator.js +12 -7
  19. package/Dropdown/Dropdown.module.css +4 -0
  20. package/Dropdown/DropdownList.js +74 -53
  21. package/FlexiblePopupPanels/useNavButtonFocus.js +7 -10
  22. package/Heading/Heading.d.ts +1 -1
  23. package/Heading/Heading.js +2 -2
  24. package/Icon/Icon.d.ts +1 -0
  25. package/Icon/Icon.js +1 -0
  26. package/Icon/IconList.js +2 -0
  27. package/IconItem/IconItem.module.css +3 -3
  28. package/IconItem/tests/IconItem-specs.js +30 -1
  29. package/Image/Image.js +6 -4
  30. package/Input/Input.js +12 -1
  31. package/Input/InputField.js +75 -24
  32. package/Input/InputField.module.css +262 -45
  33. package/Input/InputFieldDecoratorIcon.js +1 -0
  34. package/Input/InputFieldSpotlightDecorator.js +53 -8
  35. package/Input/index.d.ts +105 -93
  36. package/Input/tests/Input-specs.js +26 -0
  37. package/Input/tests/InputField-specs.js +149 -3
  38. package/Input/tests/InputPopup-specs.js +1 -1
  39. package/KeyGuide/KeyGuide.js +29 -27
  40. package/MediaOverlay/tests/MediaOverlay-specs.js +29 -0
  41. package/MediaPlayer/tests/util-specs.js +4 -1
  42. package/PageViews/PageViews.js +134 -69
  43. package/PageViews/PageViews.module.css +3 -0
  44. package/PageViews/PageViewsRouter.js +91 -42
  45. package/PageViews/tests/PageViews-specs.js +87 -0
  46. package/Panels/Header.js +6 -4
  47. package/Popup/Popup.js +5 -4
  48. package/PopupTabLayout/PopupTabLayout.js +11 -9
  49. package/RadioItem/RadioItem.js +7 -5
  50. package/Scroller/EditableWrapper.js +17 -14
  51. package/Scroller/Scroller.js +11 -10
  52. package/Scroller/useThemeScroller.js +3 -3
  53. package/Slider/Slider.d.ts +4 -0
  54. package/Slider/Slider.js +40 -16
  55. package/Slider/Slider.module.css +150 -0
  56. package/Slider/SliderBehaviorDecorator.js +16 -14
  57. package/Slider/tests/Slider-specs.js +51 -0
  58. package/Slider/utils.js +23 -7
  59. package/Spinner/Spinner.js +10 -8
  60. package/TabLayout/RefocusDecorator.js +14 -12
  61. package/TabLayout/tests/TabGroup-specs.js +1 -1
  62. package/ThemeDecorator/AccessibilityDecorator.js +12 -11
  63. package/ThemeDecorator/I18nFontDecorator.js +6 -4
  64. package/ThemeDecorator/ThemeDecorator.d.ts +7 -0
  65. package/ThemeDecorator/ThemeDecorator.js +24 -9
  66. package/TimePicker/TimePickerBase.js +5 -3
  67. package/TooltipDecorator/TooltipDecorator.js +12 -7
  68. package/TooltipDecorator/tests/useTooltip-specs.js +5 -2
  69. package/VideoPlayer/VideoPlayer.js +25 -24
  70. package/VirtualList/VirtualList.js +20 -18
  71. package/VirtualList/useSpotlight.js +1 -1
  72. package/fonts/Limestone_Icons.ttf +0 -0
  73. package/internal/AsyncRenderChildren/AsyncRenderChildren.js +9 -5
  74. package/internal/AsyncRenderChildren/tests/AsyncRenderChildren-specs.js +4 -1
  75. package/internal/DateTime/DateTimeDecorator.js +5 -4
  76. package/internal/Panels/PanelsRouter.js +35 -29
  77. package/internal/Panels/useAutoFocus.js +10 -6
  78. package/internal/Panels/useFocusOnTransition.js +4 -3
  79. package/internal/Picker/Picker.js +7 -5
  80. package/internal/Picker/SpottablePicker.js +15 -13
  81. package/internal/SharedStateDecorator/SharedStateDecorator.js +6 -4
  82. package/package.json +14 -11
  83. package/styles/colors.less +1 -0
  84. package/styles/variables.less +1 -1
  85. package/useScroll/HoverToScroll.js +15 -12
  86. package/useScroll/Scrollbar.js +14 -10
  87. package/useScroll/ScrollbarPlaceholder.js +3 -5
  88. package/useScroll/ScrollbarTrack.js +7 -5
  89. package/useScroll/useEvent.js +7 -2
  90. package/useScroll/useScroll.js +10 -2
@@ -13,11 +13,12 @@ var _AnnounceDecorator = require("@enact/ui/AnnounceDecorator");
13
13
  var _Changeable = _interopRequireDefault(require("@enact/ui/Changeable"));
14
14
  var _Pure = _interopRequireDefault(require("@enact/ui/internal/Pure"));
15
15
  var _speech = require("@enact/webos/speech");
16
- var _classnames2 = _interopRequireDefault(require("classnames"));
16
+ var _classnames3 = _interopRequireDefault(require("classnames"));
17
17
  var _propTypes = _interopRequireDefault(require("prop-types"));
18
18
  var _compose = _interopRequireDefault(require("ramda/src/compose"));
19
19
  var _react = require("react");
20
20
  var _$L = _interopRequireDefault(require("../internal/$L"));
21
+ var _Marquee = require("../Marquee");
21
22
  var _Skinnable = _interopRequireDefault(require("../Skinnable"));
22
23
  var _Tooltip = _interopRequireDefault(require("../TooltipDecorator/Tooltip"));
23
24
  var _util2 = require("../internal/util");
@@ -26,7 +27,23 @@ var _InputFieldSpotlightDecorator = _interopRequireDefault(require("./InputField
26
27
  var _util3 = require("./util");
27
28
  var _InputFieldModule = _interopRequireDefault(require("./InputField.module.css"));
28
29
  var _jsxRuntime = require("react/jsx-runtime");
29
- var _excluded = ["css", "dir", "disabled", "iconAfter", "iconBefore", "invalidTooltip", "onChange", "placeholder", "type", "value"];
30
+ var _excluded = ["css", "dir", "disabled", "iconAfter", "iconBefore", "invalidTooltip", "marqueeContent", "onChange", "placeholder", "type", "value"];
31
+ function _interopRequireDefault(e) { return e && e.__esModule ? e : { "default": e }; }
32
+ function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
33
+ function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
34
+ function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }
35
+ function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == typeof i ? i : i + ""; }
36
+ function _toPrimitive(t, r) { if ("object" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != typeof i) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
37
+ 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; }
38
+ 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; }
39
+ var MarqueeText = (0, _Marquee.MarqueeDecorator)({
40
+ css: {
41
+ text: _InputFieldModule["default"].marqueeTextInner,
42
+ animate: _InputFieldModule["default"].marqueeTextAnimate,
43
+ willAnimate: _InputFieldModule["default"].marqueeTextWillAnimate
44
+ }
45
+ }, 'div');
46
+
30
47
  /**
31
48
  * A Limestone styled input component.
32
49
  *
@@ -38,17 +55,16 @@ var _excluded = ["css", "dir", "disabled", "iconAfter", "iconBefore", "invalidTo
38
55
  * @ui
39
56
  * @public
40
57
  */
41
- function _interopRequireDefault(e) { return e && e.__esModule ? e : { "default": e }; }
42
- function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
43
- function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
44
- function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }
45
- function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == typeof i ? i : i + ""; }
46
- function _toPrimitive(t, r) { if ("object" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != typeof i) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
47
- 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; }
48
- 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; }
49
58
  var InputFieldBase = exports.InputFieldBase = (0, _kind["default"])({
50
59
  name: 'InputField',
51
60
  propTypes: /** @lends limestone/Input.InputFieldBase.prototype */{
61
+ /**
62
+ * Indicates the input is currently active/focused for editing
63
+ *
64
+ * @type {Boolean}
65
+ * @private
66
+ */
67
+ active: _propTypes["default"].bool,
52
68
  /**
53
69
  * Passed by AnnounceDecorator for accessibility.
54
70
  *
@@ -56,6 +72,14 @@ var InputFieldBase = exports.InputFieldBase = (0, _kind["default"])({
56
72
  * @public
57
73
  */
58
74
  announce: _propTypes["default"].func,
75
+ /**
76
+ * Moves the caret to the end of the text when the input receives focus.
77
+ *
78
+ * @type {Boolean}
79
+ * @default false
80
+ * @public
81
+ */
82
+ caretToEndOnFocus: _propTypes["default"].bool,
59
83
  /**
60
84
  * Customizes the component by mapping the supplied collection of CSS class names to the
61
85
  * corresponding internal elements and states of this component.
@@ -128,6 +152,14 @@ var InputFieldBase = exports.InputFieldBase = (0, _kind["default"])({
128
152
  * @public
129
153
  */
130
154
  invalidMessage: _propTypes["default"].string,
155
+ /**
156
+ * Wraps the input's value/placeholder display in a marquee.
157
+ *
158
+ * @type {Boolean}
159
+ * @default false
160
+ * @public
161
+ */
162
+ marqueeContent: _propTypes["default"].bool,
131
163
  /**
132
164
  * Called before the input value is changed.
133
165
  *
@@ -224,9 +256,12 @@ var InputFieldBase = exports.InputFieldBase = (0, _kind["default"])({
224
256
  value: _propTypes["default"].oneOfType([_propTypes["default"].string, _propTypes["default"].number])
225
257
  },
226
258
  defaultProps: {
259
+ active: false,
260
+ caretToEndOnFocus: false,
227
261
  disabled: false,
228
262
  dismissOnEnter: false,
229
263
  invalid: false,
264
+ marqueeContent: false,
230
265
  placeholder: '',
231
266
  size: 'small',
232
267
  type: 'text'
@@ -234,7 +269,7 @@ var InputFieldBase = exports.InputFieldBase = (0, _kind["default"])({
234
269
  styles: {
235
270
  css: _InputFieldModule["default"],
236
271
  className: 'inputField',
237
- publicClassNames: ['bg', 'inputField', 'input', 'inputHighlight', 'tooltip', 'tooltipLabel']
272
+ publicClassNames: ['bg', 'inputField', 'input', 'inputHighlight', 'inputWrapper', 'marqueeText', 'placeholderText', 'tooltip', 'tooltipLabel']
238
273
  },
239
274
  handlers: {
240
275
  onChange: (0, _handle.handle)((0, _handle.forwardCustomWithPrevent)('onBeforeChange', function (ev) {
@@ -266,14 +301,18 @@ var InputFieldBase = exports.InputFieldBase = (0, _kind["default"])({
266
301
  return (0, _util3.calcAriaLabel)(title, type, value);
267
302
  },
268
303
  className: function className(_ref3) {
269
- var iconAfter = _ref3.iconAfter,
304
+ var active = _ref3.active,
305
+ iconAfter = _ref3.iconAfter,
270
306
  iconBefore = _ref3.iconBefore,
271
307
  invalid = _ref3.invalid,
308
+ marqueeContent = _ref3.marqueeContent,
272
309
  size = _ref3.size,
273
310
  styler = _ref3.styler;
274
311
  return styler.append({
312
+ active: active,
275
313
  hasIconAfter: iconAfter,
276
314
  hasIconBefore: iconBefore,
315
+ hasMarquee: marqueeContent,
277
316
  invalid: invalid
278
317
  }, size);
279
318
  },
@@ -310,6 +349,7 @@ var InputFieldBase = exports.InputFieldBase = (0, _kind["default"])({
310
349
  iconAfter = _ref7.iconAfter,
311
350
  iconBefore = _ref7.iconBefore,
312
351
  invalidTooltip = _ref7.invalidTooltip,
352
+ marqueeContent = _ref7.marqueeContent,
313
353
  onChange = _ref7.onChange,
314
354
  placeholder = _ref7.placeholder,
315
355
  type = _ref7.type,
@@ -321,7 +361,9 @@ var InputFieldBase = exports.InputFieldBase = (0, _kind["default"])({
321
361
  if (type === 'password' || type === 'passwordtel') {
322
362
  inputProps.spellCheck = false;
323
363
  }
364
+ delete rest.active;
324
365
  delete rest.announce;
366
+ delete rest.caretToEndOnFocus;
325
367
  delete rest.dismissOnEnter;
326
368
  delete rest.invalid;
327
369
  delete rest.invalidMessage;
@@ -341,17 +383,24 @@ var InputFieldBase = exports.InputFieldBase = (0, _kind["default"])({
341
383
  }), /*#__PURE__*/(0, _jsxRuntime.jsx)("span", {
342
384
  className: css.inputHighlight,
343
385
  children: value ? value : placeholder
344
- }), /*#__PURE__*/(0, _jsxRuntime.jsx)("input", _objectSpread(_objectSpread(_objectSpread({}, inputProps), voiceProps), {}, {
345
- "aria-hidden": isPasswordtel,
346
- className: (0, _classnames2["default"])(css.input, _defineProperty({}, css.passwordtel, isPasswordtel)),
347
- dir: dir,
348
- disabled: disabled,
349
- onChange: onChange,
350
- placeholder: placeholder,
351
- tabIndex: -1,
352
- type: isPasswordtel ? 'tel' : type,
353
- value: value
354
- })), /*#__PURE__*/(0, _jsxRuntime.jsx)(_InputFieldDecoratorIcon["default"], {
386
+ }), /*#__PURE__*/(0, _jsxRuntime.jsxs)("span", {
387
+ className: css.inputWrapper,
388
+ children: [/*#__PURE__*/(0, _jsxRuntime.jsx)("input", _objectSpread(_objectSpread(_objectSpread({}, inputProps), voiceProps), {}, {
389
+ "aria-hidden": isPasswordtel,
390
+ className: (0, _classnames3["default"])(css.input, _defineProperty({}, css.passwordtel, isPasswordtel)),
391
+ dir: dir,
392
+ disabled: disabled,
393
+ onChange: onChange,
394
+ placeholder: placeholder,
395
+ tabIndex: -1,
396
+ type: isPasswordtel ? 'tel' : type,
397
+ value: value
398
+ })), marqueeContent ? /*#__PURE__*/(0, _jsxRuntime.jsx)(MarqueeText, {
399
+ className: (0, _classnames3["default"])(css.marqueeText, _defineProperty(_defineProperty({}, css.passwordtel, isPasswordtel || type === 'password'), css.placeholderText, value === '')),
400
+ disabled: disabled,
401
+ children: value !== '' ? value : placeholder
402
+ }) : null]
403
+ }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_InputFieldDecoratorIcon["default"], {
355
404
  className: css.iconAfter,
356
405
  position: "after",
357
406
  size: "large",
@@ -387,7 +436,9 @@ var AnnounceDecorator = function AnnounceDecorator(Wrapped) {
387
436
  */
388
437
  var InputFieldDecorator = exports.InputFieldDecorator = (0, _compose["default"])(_Pure["default"], (0, _I18nDecorator.I18nContextDecorator)({
389
438
  rtlProp: 'rtl'
390
- }), _Changeable["default"], _InputFieldSpotlightDecorator["default"], AnnounceDecorator, _Skinnable["default"]);
439
+ }), _Changeable["default"], _InputFieldSpotlightDecorator["default"], AnnounceDecorator, (0, _Marquee.MarqueeController)({
440
+ marqueeOnFocus: true
441
+ }), _Skinnable["default"]);
391
442
 
392
443
  /**
393
444
  * A Spottable, Limestone styled input component with embedded icon support.