UNPKG

lucid-ui

Version:

A UI component library from Xandr.

76 lines 4.54 kB
"use strict"; var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { if (k2 === undefined) k2 = k; Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } }); }) : (function(o, m, k, k2) { if (k2 === undefined) k2 = k; o[k2] = m[k]; })); var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) { Object.defineProperty(o, "default", { enumerable: true, value: v }); }) : function(o, v) { o["default"] = v; }); var __importStar = (this && this.__importStar) || function (mod) { if (mod && mod.__esModule) return mod; var result = {}; if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k); __setModuleDefault(result, mod); return result; }; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.MeridiemType = void 0; var react_1 = __importStar(require("react")); var style_helpers_1 = require("../../util/style-helpers"); var ClockIcon_1 = __importDefault(require("../Icon/ClockIcon/ClockIcon")); var TimeSelectHour_1 = __importDefault(require("./TimeSelectHour")); var TimeSelectMeridiem_1 = __importDefault(require("./TimeSelectMeridiem")); var TimeSelectMinute_1 = __importDefault(require("./TimeSelectMinute")); var cx = style_helpers_1.lucidClassNames.bind('&-TimeSelect'); var MeridiemType; (function (MeridiemType) { MeridiemType["AM"] = "AM"; MeridiemType["PM"] = "PM"; })(MeridiemType || (MeridiemType = {})); exports.MeridiemType = MeridiemType; var TimeSelect = function (_a) { var time = _a.time, is24HourClock = _a.is24HourClock, onChange = _a.onChange, isDisabled = _a.isDisabled; var _b = (0, react_1.useState)(false), inputFocus = _b[0], setInputFocus = _b[1]; var minute = (0, react_1.useMemo)(function () { return time.getMinutes(); }, [time]); var _c = (0, react_1.useMemo)(function () { var hour = time.getHours(); if (is24HourClock) { return { hour: hour }; } var cleanedHour = hour === 0 || hour === 12 ? 12 : hour < 12 ? hour : hour - 12; var cleanedMeridiem = hour < 12 ? MeridiemType.AM : MeridiemType.PM; return { hour: cleanedHour, meridiem: cleanedMeridiem }; }, [time, is24HourClock]), hour = _c.hour, _d = _c.meridiem, meridiem = _d === void 0 ? MeridiemType.AM : _d; var isAM = (0, react_1.useMemo)(function () { return meridiem === MeridiemType.AM; }, [meridiem]); var isDisabledClass = isDisabled ? '&-time-disabled' : ''; var timeSelectorClass = isDisabled ? '&-isDisabled' : ''; var toggleInputFocus = function () { return setInputFocus(!inputFocus); }; return (react_1.default.createElement("div", { className: cx('&', timeSelectorClass), onFocus: toggleInputFocus, onBlur: toggleInputFocus }, react_1.default.createElement(TimeSelectHour_1.default, { hour: hour, time: time, is24HourClock: is24HourClock, isAM: isAM, isDisabled: isDisabled, onChange: onChange }), react_1.default.createElement("span", { className: cx(isDisabledClass) }, ":"), react_1.default.createElement(TimeSelectMinute_1.default, { minute: minute, time: time, isDisabled: isDisabled, onChange: onChange }), !is24HourClock && (react_1.default.createElement(TimeSelectMeridiem_1.default, { hour: hour, meridiem: meridiem, time: time, isDisabled: isDisabled, onChange: onChange })), react_1.default.createElement(ClockIcon_1.default, { className: cx('&-clock', { active: !isDisabled && inputFocus }), disabled: isDisabled }))); }; TimeSelect.peek = { description: "A time selector that is tab-able.", notes: { overview: "\n\t\t\tA time selector that is tab-able. Hour/Minute/Meridiem are tied together. As a user scrolls\n\t\t\tup or down, the hours or minutes and meridiem will corresponding scroll.\n\t\t", technicalRecommendations: "\n\t\t\tUser must provide value. This component will process and return the next values.\n\t\t\tFor use as a pluggable pure functional component.\n\t\t", intendedUse: "\n\t\t\tHelp users select a time with less risk of typing incorrect data.\n\t\t", }, categories: ['controls', 'selectors'], }; TimeSelect.defaultProps = { time: new Date(), }; exports.default = TimeSelect; //# sourceMappingURL=TimeSelect.js.map