@enact/moonstone
Version:
Large-screen/TV support library for Enact, containing a variety of UI components.
185 lines (180 loc) • 7.64 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports["default"] = exports.ToggleItemDecorator = exports.ToggleItemBase = exports.ToggleItem = void 0;
var _hoc = _interopRequireDefault(require("@enact/core/hoc"));
var _kind = _interopRequireDefault(require("@enact/core/kind"));
var _propTypes = _interopRequireDefault(require("@enact/core/internal/prop-types"));
var _ForwardRef = _interopRequireDefault(require("@enact/ui/ForwardRef"));
var _Pure = _interopRequireDefault(require("@enact/ui/internal/Pure"));
var _propTypes2 = _interopRequireDefault(require("prop-types"));
var _Toggleable = _interopRequireDefault(require("@enact/ui/Toggleable"));
var _Touchable = _interopRequireDefault(require("@enact/ui/Touchable"));
var _Spottable = _interopRequireDefault(require("@enact/spotlight/Spottable"));
var _compose = _interopRequireDefault(require("ramda/src/compose"));
var _Marquee = require("../Marquee");
var _Skinnable = _interopRequireDefault(require("../Skinnable"));
var _SlotItem = require("../SlotItem");
var _UiToggleItem = require("../UiToggleItem");
var _ToggleItemModule = _interopRequireDefault(require("./ToggleItem.module.css"));
var _jsxRuntime = require("react/jsx-runtime");
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }
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; }
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; }
function _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == typeof i ? i : String(i); }
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); } /**
* A Moonstone-themed {@link moonstone/Item|Item} used as the basis for other stylized toggle item
* components.
*
* Note: This is not intended to be used directly, but should be extended by a component that will
* customize this component's appearance by supplying an
* {@link moonstone/ToggleItem.ToggleItemBase#iconComponent|iconComponent prop}.
*
* @example
* <ToggleItem
* iconComponent={Checkbox}
* iconPosition='before'>
* Toggle me
* </ToggleItem>
*
* @module moonstone/ToggleItem
* @exports ToggleItem
* @exports ToggleItemBase
* @exports ToggleItemDecorator
*/ /**
* A Moonstone-styled toggle {@link moonstone/Item|Item} without any behavior.
*
* @class ToggleItemBase
* @memberof moonstone/ToggleItem
* @ui
* @public
*/
var ToggleItemBase = exports.ToggleItemBase = (0, _kind["default"])({
name: 'ToggleItem',
propTypes: /** @lends moonstone/ToggleItem.ToggleItemBase.prototype */{
/**
* The content to be displayed as the main content of the toggle item.
*
* @type {Node}
* @required
* @public
*/
children: _propTypes2["default"].node.isRequired,
/**
* The icon component to render in this item.
*
* This component receives the `selected` prop and value, and must therefore respond to it in some
* way. It is recommended to use {@link moonstone/ToggleIcon|ToggleIcon} for this.
*
* @type {Component|Element}
* @required
* @public
*/
iconComponent: _propTypes["default"].componentOverride.isRequired,
/**
* Customizes the component by mapping the supplied collection of CSS class names to the
* corresponding internal elements and states of this component.
*
* The following classes are supported:
*
* * `toggleItem` - The root class name
*
* @type {Object}
* @public
*/
css: _propTypes2["default"].object,
/**
* Overrides the icon of the `iconComponent` component.
*
* This accepts any string that the {@link moonstone/Icon.Icon|Icon} component supports,
* provided the recommendations of `iconComponent` are followed.
*
* @type {String}
* @public
*/
icon: _propTypes2["default"].string
},
styles: {
css: _ToggleItemModule["default"],
publicClassNames: ['toggleItem', 'slot']
},
render: function render(props) {
return /*#__PURE__*/(0, _jsxRuntime.jsx)(_UiToggleItem.ToggleItemBase, _objectSpread(_objectSpread({
role: "checkbox"
}, props), {}, {
component: _SlotItem.SlotItemBase,
css: props.css
}));
}
});
/**
* Default config for {@link moonstone/ToggleItem.ToggleItemDecorator}.
*
* @memberof moonstone/ToggleItem.ToggleItemDecorator
* @hocconfig
*/
var defaultConfig = {
/**
* Invalidate the distance of marquee text if any property (like 'inline') changes.
* Expects an array of props which on change trigger invalidateMetrics.
*
* @type {String[]}
* @default ['inline']
* @memberof moonstone/ToggleItem.ToggleItemDecorator.defaultConfig
*/
invalidateProps: ['inline']
};
/**
* Adds interactive functionality to `ToggleItemBase`.
*
* @class ToggleItemDecorator
* @memberof moonstone/ToggleItem
* @mixes moonstone/UiToggleItem.ToggleItemDecorator
* @mixes spotlight/Spottable.Spottable
* @mixes moonstone/Marquee.MarqueeDecorator
* @mixes moonstone/Skinnable.Skinnable
* @hoc
* @public
*/
var ToggleItemDecorator = exports.ToggleItemDecorator = (0, _hoc["default"])(defaultConfig, function (_ref, Wrapped) {
var invalidateProps = _ref.invalidateProps;
return (0, _compose["default"])(_Pure["default"], (0, _ForwardRef["default"])({
prop: 'componentRef'
}), (0, _Toggleable["default"])({
toggleProp: 'onClick',
eventProps: ['value']
}), _Touchable["default"], _Spottable["default"], (0, _Marquee.MarqueeDecorator)({
css: _ToggleItemModule["default"],
invalidateProps: invalidateProps
}), _Skinnable["default"])(Wrapped);
});
/**
* A Moonstone-styled item with built-in support for toggling, marqueed text, and `Spotlight` focus.
*
* This is not intended to be used directly, but should be extended by a component that will
* customize this component's appearance by supplying an `iconComponent` prop.
*
* @class ToggleItem
* @memberof moonstone/ToggleItem
* @extends moonstone/ToggleItem.ToggleItemBase
* @mixes moonstone/ToggleItem.ToggleItemDecorator
* @ui
* @public
*/
var ToggleItem = exports.ToggleItem = ToggleItemDecorator(ToggleItemBase);
/**
* The Icon to render in this item.
*
* This component receives the `selected` prop and value, and must therefore respond to it in some
* way. It is recommended to use {@link moonstone/ToggleIcon|ToggleIcon} for this.
*
* @name iconComponent
* @memberof moonstone/ToggleItem.ToggleItem.prototype
* @type {Component|Element}
* @default null
* @required
* @public
*/
var _default = exports["default"] = ToggleItem;