UNPKG

primevue

Version:

PrimeVue is an open source UI library for Vue featuring a rich set of 80+ components, a theme designer, various theme alternatives such as Material, Bootstrap, Tailwind, premium templates and professional support. In addition, it integrates with PrimeBloc

518 lines (512 loc) 18.6 kB
import { cn } from '@primeuix/utils'; import { isTouchDevice, relativePosition, getOuterWidth, absolutePosition, addStyle } from '@primeuix/utils/dom'; import { ZIndex } from '@primeuix/utils/zindex'; import { ConnectedOverlayScrollHandler } from '@primevue/core/utils'; import EyeIcon from '@primevue/icons/eye'; import EyeSlashIcon from '@primevue/icons/eyeslash'; import InputText from 'primevue/inputtext'; import OverlayEventBus from 'primevue/overlayeventbus'; import Portal from 'primevue/portal'; import BaseInput from '@primevue/core/baseinput'; import PasswordStyle from 'primevue/password/style'; import { resolveComponent, createElementBlock, openBlock, mergeProps, createVNode, renderSlot, createCommentVNode, createElementVNode, createBlock, resolveDynamicComponent, toDisplayString, withCtx, Transition } from 'vue'; var script$1 = { name: 'BasePassword', "extends": BaseInput, props: { promptLabel: { type: String, "default": null }, mediumRegex: { type: [String, RegExp], "default": '^(((?=.*[a-z])(?=.*[A-Z]))|((?=.*[a-z])(?=.*[0-9]))|((?=.*[A-Z])(?=.*[0-9])))(?=.{6,})' // eslint-disable-line }, strongRegex: { type: [String, RegExp], "default": '^(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.{8,})' // eslint-disable-line }, weakLabel: { type: String, "default": null }, mediumLabel: { type: String, "default": null }, strongLabel: { type: String, "default": null }, feedback: { type: Boolean, "default": true }, appendTo: { type: [String, Object], "default": 'body' }, toggleMask: { type: Boolean, "default": false }, hideIcon: { type: String, "default": undefined }, maskIcon: { type: String, "default": undefined }, showIcon: { type: String, "default": undefined }, unmaskIcon: { type: String, "default": undefined }, disabled: { type: Boolean, "default": false }, placeholder: { type: String, "default": null }, required: { type: Boolean, "default": false }, inputId: { type: String, "default": null }, inputClass: { type: [String, Object], "default": null }, inputStyle: { type: Object, "default": null }, inputProps: { type: null, "default": null }, panelId: { type: String, "default": null }, panelClass: { type: [String, Object], "default": null }, panelStyle: { type: Object, "default": null }, panelProps: { type: null, "default": null }, overlayId: { type: String, "default": null }, overlayClass: { type: [String, Object], "default": null }, overlayStyle: { type: Object, "default": null }, overlayProps: { type: null, "default": null }, ariaLabelledby: { type: String, "default": null }, ariaLabel: { type: String, "default": null }, autofocus: { type: Boolean, "default": null } }, style: PasswordStyle, provide: function provide() { return { $pcPassword: this, $parentInstance: this }; } }; function _typeof$1(o) { "@babel/helpers - typeof"; return _typeof$1 = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof$1(o); } function _defineProperty$1(e, r, t) { return (r = _toPropertyKey$1(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: true, configurable: true, writable: true }) : e[r] = t, e; } function _toPropertyKey$1(t) { var i = _toPrimitive$1(t, "string"); return "symbol" == _typeof$1(i) ? i : i + ""; } function _toPrimitive$1(t, r) { if ("object" != _typeof$1(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r); if ("object" != _typeof$1(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); } var script = { name: 'Password', "extends": script$1, inheritAttrs: false, emits: ['change', 'focus', 'blur', 'invalid'], inject: { $pcFluid: { "default": null } }, data: function data() { return { overlayVisible: false, meter: null, infoText: null, focused: false, unmasked: false }; }, mediumCheckRegExp: null, strongCheckRegExp: null, resizeListener: null, scrollHandler: null, overlay: null, mounted: function mounted() { this.infoText = this.promptText; this.mediumCheckRegExp = new RegExp(this.mediumRegex); this.strongCheckRegExp = new RegExp(this.strongRegex); }, beforeUnmount: function beforeUnmount() { this.unbindResizeListener(); if (this.scrollHandler) { this.scrollHandler.destroy(); this.scrollHandler = null; } if (this.overlay) { ZIndex.clear(this.overlay); this.overlay = null; } }, methods: { onOverlayEnter: function onOverlayEnter(el) { ZIndex.set('overlay', el, this.$primevue.config.zIndex.overlay); addStyle(el, { position: 'absolute', top: '0' }); this.alignOverlay(); this.bindScrollListener(); this.bindResizeListener(); }, onOverlayLeave: function onOverlayLeave() { this.unbindScrollListener(); this.unbindResizeListener(); this.overlay = null; }, onOverlayAfterLeave: function onOverlayAfterLeave(el) { ZIndex.clear(el); }, alignOverlay: function alignOverlay() { if (this.appendTo === 'self') { relativePosition(this.overlay, this.$refs.input.$el); } else { this.overlay.style.minWidth = getOuterWidth(this.$refs.input.$el) + 'px'; absolutePosition(this.overlay, this.$refs.input.$el); } }, testStrength: function testStrength(str) { var level = 0; if (this.strongCheckRegExp.test(str)) level = 3;else if (this.mediumCheckRegExp.test(str)) level = 2;else if (str.length) level = 1; return level; }, onInput: function onInput(event) { this.writeValue(event.target.value, event); this.$emit('change', event); }, onFocus: function onFocus(event) { this.focused = true; if (this.feedback) { this.setPasswordMeter(this.d_value); this.overlayVisible = true; } this.$emit('focus', event); }, onBlur: function onBlur(event) { this.focused = false; if (this.feedback) { this.overlayVisible = false; } this.$emit('blur', event); }, onKeyUp: function onKeyUp(event) { if (this.feedback) { var value = event.target.value; var _this$checkPasswordSt = this.checkPasswordStrength(value), meter = _this$checkPasswordSt.meter, label = _this$checkPasswordSt.label; this.meter = meter; this.infoText = label; if (event.code === 'Escape') { this.overlayVisible && (this.overlayVisible = false); return; } if (!this.overlayVisible) { this.overlayVisible = true; } } }, setPasswordMeter: function setPasswordMeter() { if (!this.d_value) { this.meter = null; this.infoText = this.promptText; return; } var _this$checkPasswordSt2 = this.checkPasswordStrength(this.d_value), meter = _this$checkPasswordSt2.meter, label = _this$checkPasswordSt2.label; this.meter = meter; this.infoText = label; if (!this.overlayVisible) { this.overlayVisible = true; } }, checkPasswordStrength: function checkPasswordStrength(value) { var label = null; var meter = null; switch (this.testStrength(value)) { case 1: label = this.weakText; meter = { strength: 'weak', width: '33.33%' }; break; case 2: label = this.mediumText; meter = { strength: 'medium', width: '66.66%' }; break; case 3: label = this.strongText; meter = { strength: 'strong', width: '100%' }; break; default: label = this.promptText; meter = null; break; } return { label: label, meter: meter }; }, onInvalid: function onInvalid(event) { this.$emit('invalid', event); }, bindScrollListener: function bindScrollListener() { var _this = this; if (!this.scrollHandler) { this.scrollHandler = new ConnectedOverlayScrollHandler(this.$refs.input.$el, function () { if (_this.overlayVisible) { _this.overlayVisible = false; } }); } this.scrollHandler.bindScrollListener(); }, unbindScrollListener: function unbindScrollListener() { if (this.scrollHandler) { this.scrollHandler.unbindScrollListener(); } }, bindResizeListener: function bindResizeListener() { var _this2 = this; if (!this.resizeListener) { this.resizeListener = function () { if (_this2.overlayVisible && !isTouchDevice()) { _this2.overlayVisible = false; } }; window.addEventListener('resize', this.resizeListener); } }, unbindResizeListener: function unbindResizeListener() { if (this.resizeListener) { window.removeEventListener('resize', this.resizeListener); this.resizeListener = null; } }, overlayRef: function overlayRef(el) { this.overlay = el; }, onMaskToggle: function onMaskToggle() { this.unmasked = !this.unmasked; }, onOverlayClick: function onOverlayClick(event) { OverlayEventBus.emit('overlay-click', { originalEvent: event, target: this.$el }); } }, computed: { inputType: function inputType() { return this.unmasked ? 'text' : 'password'; }, weakText: function weakText() { return this.weakLabel || this.$primevue.config.locale.weak; }, mediumText: function mediumText() { return this.mediumLabel || this.$primevue.config.locale.medium; }, strongText: function strongText() { return this.strongLabel || this.$primevue.config.locale.strong; }, promptText: function promptText() { return this.promptLabel || this.$primevue.config.locale.passwordPrompt; }, overlayUniqueId: function overlayUniqueId() { return this.$id + '_overlay'; }, containerDataP: function containerDataP() { return cn({ fluid: this.$fluid }); }, meterDataP: function meterDataP() { var _this$meter, _this$meter2; return cn(_defineProperty$1({}, (_this$meter = this.meter) === null || _this$meter === void 0 ? void 0 : _this$meter.strength, (_this$meter2 = this.meter) === null || _this$meter2 === void 0 ? void 0 : _this$meter2.strength)); }, overlayDataP: function overlayDataP() { return cn(_defineProperty$1({}, 'portal-' + this.appendTo, 'portal-' + this.appendTo)); } }, components: { InputText: InputText, Portal: Portal, EyeSlashIcon: EyeSlashIcon, EyeIcon: EyeIcon } }; function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); } 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), true).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(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: true, configurable: true, writable: true }) : e[r] = t, e; } function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : 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); if ("object" != _typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); } var _hoisted_1 = ["data-p"]; var _hoisted_2 = ["id", "data-p"]; var _hoisted_3 = ["data-p"]; function render(_ctx, _cache, $props, $setup, $data, $options) { var _component_InputText = resolveComponent("InputText"); var _component_Portal = resolveComponent("Portal"); return openBlock(), createElementBlock("div", mergeProps({ "class": _ctx.cx('root'), style: _ctx.sx('root'), "data-p": $options.containerDataP }, _ctx.ptmi('root')), [createVNode(_component_InputText, mergeProps({ ref: "input", id: _ctx.inputId, type: $options.inputType, "class": [_ctx.cx('pcInputText'), _ctx.inputClass], style: _ctx.inputStyle, defaultValue: _ctx.d_value, name: _ctx.$formName, "aria-labelledby": _ctx.ariaLabelledby, "aria-label": _ctx.ariaLabel, "aria-controls": _ctx.overlayProps && _ctx.overlayProps.id || _ctx.overlayId || _ctx.panelProps && _ctx.panelProps.id || _ctx.panelId || $options.overlayUniqueId, "aria-expanded": $data.overlayVisible, "aria-haspopup": true, placeholder: _ctx.placeholder, required: _ctx.required, fluid: _ctx.fluid, disabled: _ctx.disabled, variant: _ctx.variant, invalid: _ctx.invalid, size: _ctx.size, autofocus: _ctx.autofocus, onInput: $options.onInput, onFocus: $options.onFocus, onBlur: $options.onBlur, onKeyup: $options.onKeyUp, onInvalid: $options.onInvalid }, _ctx.inputProps, { "data-p-has-e-icon": _ctx.toggleMask, pt: _ctx.ptm('pcInputText'), unstyled: _ctx.unstyled }), null, 16, ["id", "type", "class", "style", "defaultValue", "name", "aria-labelledby", "aria-label", "aria-controls", "aria-expanded", "placeholder", "required", "fluid", "disabled", "variant", "invalid", "size", "autofocus", "onInput", "onFocus", "onBlur", "onKeyup", "onInvalid", "data-p-has-e-icon", "pt", "unstyled"]), _ctx.toggleMask && $data.unmasked ? renderSlot(_ctx.$slots, _ctx.$slots.maskicon ? 'maskicon' : 'hideicon', { key: 0, toggleCallback: $options.onMaskToggle }, function () { return [(openBlock(), createBlock(resolveDynamicComponent(_ctx.maskIcon ? 'i' : 'EyeSlashIcon'), mergeProps({ "class": [_ctx.cx('maskIcon'), _ctx.maskIcon], onClick: $options.onMaskToggle }, _ctx.ptm('maskIcon')), null, 16, ["class", "onClick"]))]; }) : createCommentVNode("", true), _ctx.toggleMask && !$data.unmasked ? renderSlot(_ctx.$slots, _ctx.$slots.unmaskicon ? 'unmaskicon' : 'showicon', { key: 1, toggleCallback: $options.onMaskToggle }, function () { return [(openBlock(), createBlock(resolveDynamicComponent(_ctx.unmaskIcon ? 'i' : 'EyeIcon'), mergeProps({ "class": [_ctx.cx('unmaskIcon'), _ctx.unmaskIcon], onClick: $options.onMaskToggle }, _ctx.ptm('unmaskIcon')), null, 16, ["class", "onClick"]))]; }) : createCommentVNode("", true), createElementVNode("span", mergeProps({ "class": "p-hidden-accessible", "aria-live": "polite" }, _ctx.ptm('hiddenAccesible'), { "data-p-hidden-accessible": true }), toDisplayString($data.infoText), 17), createVNode(_component_Portal, { appendTo: _ctx.appendTo }, { "default": withCtx(function () { return [createVNode(Transition, mergeProps({ name: "p-connected-overlay", onEnter: $options.onOverlayEnter, onLeave: $options.onOverlayLeave, onAfterLeave: $options.onOverlayAfterLeave }, _ctx.ptm('transition')), { "default": withCtx(function () { return [$data.overlayVisible ? (openBlock(), createElementBlock("div", mergeProps({ key: 0, ref: $options.overlayRef, id: _ctx.overlayId || _ctx.panelId || $options.overlayUniqueId, "class": [_ctx.cx('overlay'), _ctx.panelClass, _ctx.overlayClass], style: [_ctx.overlayStyle, _ctx.panelStyle], onClick: _cache[0] || (_cache[0] = function () { return $options.onOverlayClick && $options.onOverlayClick.apply($options, arguments); }), "data-p": $options.overlayDataP }, _objectSpread(_objectSpread(_objectSpread({}, _ctx.panelProps), _ctx.overlayProps), _ctx.ptm('overlay'))), [renderSlot(_ctx.$slots, "header"), renderSlot(_ctx.$slots, "content", {}, function () { return [createElementVNode("div", mergeProps({ "class": _ctx.cx('content') }, _ctx.ptm('content')), [createElementVNode("div", mergeProps({ "class": _ctx.cx('meter') }, _ctx.ptm('meter')), [createElementVNode("div", mergeProps({ "class": _ctx.cx('meterLabel'), style: { width: $data.meter ? $data.meter.width : '' }, "data-p": $options.meterDataP }, _ctx.ptm('meterLabel')), null, 16, _hoisted_3)], 16), createElementVNode("div", mergeProps({ "class": _ctx.cx('meterText') }, _ctx.ptm('meterText')), toDisplayString($data.infoText), 17)], 16)]; }), renderSlot(_ctx.$slots, "footer")], 16, _hoisted_2)) : createCommentVNode("", true)]; }), _: 3 }, 16, ["onEnter", "onLeave", "onAfterLeave"])]; }), _: 3 }, 8, ["appendTo"])], 16, _hoisted_1); } script.render = render; export { script as default }; //# sourceMappingURL=index.mjs.map