diff --git a/CHANGELOG.md b/CHANGELOG.md index 30b97d7c..f4607e88 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,6 +5,21 @@ The format is based on [Keep a Changelog](http://keepachangelog.com/) and this p --- +## [3.0.0](https://github.com/FortAwesome/vue-fontawesome/releases/tag/3.0.0) - 2022-06-07 + +### Added + +* New animations for bounce and shake +* Feature to call icons using a string format + +### Fixed + +* Animations for beat, fade, beat-fade, flash, spin-pulse, and spin-reverse +* Tee-shirt sizes to include 2xs, lg, xl, and 2xl +* Flip animation when used by itself + +--- + ## [3.0.0-5](https://github.com/FortAwesome/vue-fontawesome/releases/tag/3.0.0-5) - 2021-10-18 ### Fixed diff --git a/index.es.js b/index.es.js index 402baf03..30fa3825 100644 --- a/index.es.js +++ b/index.es.js @@ -1,153 +1,43 @@ -import { h, defineComponent, computed, watch } from 'vue'; import { parse, icon, config, text } from '@fortawesome/fontawesome-svg-core'; +import { h, defineComponent, computed, watch } from 'vue'; -var commonjsGlobal = typeof window !== 'undefined' ? window : typeof global !== 'undefined' ? global : typeof self !== 'undefined' ? self : {}; - -function createCommonjsModule(fn, module) { - return module = { exports: {} }, fn(module, module.exports), module.exports; -} - -var humps = createCommonjsModule(function (module) { -(function(global) { - - var _processKeys = function(convert, obj, options) { - if(!_isObject(obj) || _isDate(obj) || _isRegExp(obj) || _isBoolean(obj) || _isFunction(obj)) { - return obj; - } - - var output, - i = 0, - l = 0; - - if(_isArray(obj)) { - output = []; - for(l=obj.length; i= 0) continue; + target[key] = source[key]; } return target; -}; +} -var objectWithoutProperties = function (obj, keys) { - var target = {}; +function _objectWithoutProperties(source, excluded) { + if (source == null) return {}; + + var target = _objectWithoutPropertiesLoose(source, excluded); - for (var i in obj) { - if (keys.indexOf(i) >= 0) continue; - if (!Object.prototype.hasOwnProperty.call(obj, i)) continue; - target[i] = obj[i]; + var key, i; + + if (Object.getOwnPropertySymbols) { + var sourceSymbolKeys = Object.getOwnPropertySymbols(source); + + for (i = 0; i < sourceSymbolKeys.length; i++) { + key = sourceSymbolKeys[i]; + if (excluded.indexOf(key) >= 0) continue; + if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; + target[key] = source[key]; + } } return target; -}; +} -var toConsumableArray = function (arr) { - if (Array.isArray(arr)) { - for (var i = 0, arr2 = Array(arr.length); i < arr.length; i++) arr2[i] = arr[i]; +function _toConsumableArray(arr) { + return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread(); +} - return arr2; - } else { - return Array.from(arr); - } -}; +function _arrayWithoutHoles(arr) { + if (Array.isArray(arr)) return _arrayLikeToArray(arr); +} +function _iterableToArray(iter) { + if (typeof Symbol !== "undefined" && iter[Symbol.iterator] != null || iter["@@iterator"] != null) return Array.from(iter); +} + +function _unsupportedIterableToArray(o, minLen) { + if (!o) return; + if (typeof o === "string") return _arrayLikeToArray(o, minLen); + var n = Object.prototype.toString.call(o).slice(8, -1); + if (n === "Object" && o.constructor) n = o.constructor.name; + if (n === "Map" || n === "Set") return Array.from(o); + if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); +} + +function _arrayLikeToArray(arr, len) { + if (len == null || len > arr.length) len = arr.length; + + for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i]; + + return arr2; +} + +function _nonIterableSpread() { + throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); +} + +var commonjsGlobal = typeof globalThis !== 'undefined' ? globalThis : typeof window !== 'undefined' ? window : typeof global !== 'undefined' ? global : typeof self !== 'undefined' ? self : {}; + +var humps$1 = {exports: {}}; + +(function (module) { +(function(global) { + + var _processKeys = function(convert, obj, options) { + if(!_isObject(obj) || _isDate(obj) || _isRegExp(obj) || _isBoolean(obj) || _isFunction(obj)) { + return obj; + } + + var output, + i = 0, + l = 0; + + if(_isArray(obj)) { + output = []; + for(l=obj.length; i} classes The class list to convert. * @returns {Object} */ + + function classToObject(classes) { return classes.split(/\s+/).reduce(function (output, className) { output[className] = true; return output; }, {}); } - /** * Converts a FontAwesome abstract element of an icon into a Vue VNode. * @param {AbstractElement | String} abstractElement The element to convert. @@ -237,6 +299,8 @@ function classToObject(classes) { * @param {Object} attrs The user-defined native HTML attributes. * @returns {VNode} */ + + function convert(abstractElement) { var props = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; var attrs = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {}; @@ -244,14 +308,13 @@ function convert(abstractElement) { // If the abstract element is a string, we'll just return a string render function if (typeof abstractElement === 'string') { return abstractElement; - } + } // Converting abstract element children into Vue VNodes + - // Converting abstract element children into Vue VNodes var children = (abstractElement.children || []).map(function (child) { return convert(child); - }); + }); // Converting abstract element attributes into valid Vue format - // Converting abstract element attributes into valid Vue format var mixins = Object.keys(abstractElement.attributes || {}).reduce(function (mixins, key) { var value = abstractElement.attributes[key]; @@ -259,9 +322,11 @@ function convert(abstractElement) { case 'class': mixins.class = classToObject(value); break; + case 'style': mixins.style = styleToObject(value); break; + default: mixins.attrs[key] = value; } @@ -271,19 +336,17 @@ function convert(abstractElement) { attrs: {}, class: {}, style: {} - }); - - // Now, we'll return the VNode + }); // Now, we'll return the VNode - var _attrs$class = attrs.class, - _attrs$style = attrs.style, - aStyle = _attrs$style === undefined ? {} : _attrs$style, - otherAttrs = objectWithoutProperties(attrs, ['class', 'style']); + attrs.class; + var _attrs$style = attrs.style, + aStyle = _attrs$style === void 0 ? {} : _attrs$style, + otherAttrs = _objectWithoutProperties(attrs, _excluded); - return h(abstractElement.tag, _extends({}, props, { + return h(abstractElement.tag, _objectSpread2(_objectSpread2(_objectSpread2({}, props), {}, { class: mixins.class, - style: _extends({}, mixins.style, aStyle) - }, mixins.attrs, otherAttrs), children); + style: _objectSpread2(_objectSpread2({}, mixins.style), aStyle) + }, mixins.attrs), otherAttrs), children); } var PRODUCTION = false; @@ -301,9 +364,8 @@ function log () { } function objectWithKey(key, value) { - return Array.isArray(value) && value.length > 0 || !Array.isArray(value) && value ? defineProperty({}, key, value) : {}; + return Array.isArray(value) && value.length > 0 || !Array.isArray(value) && value ? _defineProperty({}, key, value) : {}; } - function classList(props) { var _classes; @@ -314,10 +376,10 @@ function classList(props) { 'fa-border': props.border, 'fa-li': props.listItem, 'fa-inverse': props.inverse, + 'fa-flip': props.flip === true, 'fa-flip-horizontal': props.flip === 'horizontal' || props.flip === 'both', 'fa-flip-vertical': props.flip === 'vertical' || props.flip === 'both' - }, defineProperty(_classes, 'fa-' + props.size, props.size !== null), defineProperty(_classes, 'fa-rotate-' + props.rotation, props.rotation !== null), defineProperty(_classes, 'fa-pull-' + props.pull, props.pull !== null), defineProperty(_classes, 'fa-swap-opacity', props.swapOpacity), _classes); - + }, _defineProperty(_classes, "fa-".concat(props.size), props.size !== null), _defineProperty(_classes, "fa-rotate-".concat(props.rotation), props.rotation !== null), _defineProperty(_classes, "fa-pull-".concat(props.pull), props.pull !== null), _defineProperty(_classes, 'fa-swap-opacity', props.swapOpacity), _defineProperty(_classes, 'fa-bounce', props.bounce), _defineProperty(_classes, 'fa-shake', props.shake), _defineProperty(_classes, 'fa-beat', props.beat), _defineProperty(_classes, 'fa-fade', props.fade), _defineProperty(_classes, 'fa-beat-fade', props.beatFade), _defineProperty(_classes, 'fa-flash', props.flash), _defineProperty(_classes, 'fa-spin-pulse', props.spinPulse), _defineProperty(_classes, 'fa-spin-reverse', props.spinReverse), _classes); return Object.keys(classes).map(function (key) { return classes[key] ? key : null; }).filter(function (key) { @@ -325,27 +387,40 @@ function classList(props) { }); } -function normalizeIconArgs(icon$$1) { - if (icon$$1 === null) { +function normalizeIconArgs(icon) { + if (icon && _typeof(icon) === 'object' && icon.prefix && icon.iconName && icon.icon) { + return icon; + } + + if (parse.icon) { + return parse.icon(icon); + } + + if (icon === null) { return null; } - if ((typeof icon$$1 === 'undefined' ? 'undefined' : _typeof(icon$$1)) === 'object' && icon$$1.prefix && icon$$1.iconName) { - return icon$$1; + if (_typeof(icon) === 'object' && icon.prefix && icon.iconName) { + return icon; } - if (Array.isArray(icon$$1) && icon$$1.length === 2) { - return { prefix: icon$$1[0], iconName: icon$$1[1] }; + if (Array.isArray(icon) && icon.length === 2) { + return { + prefix: icon[0], + iconName: icon[1] + }; } - if (typeof icon$$1 === 'string') { - return { prefix: 'fas', iconName: icon$$1 }; + if (typeof icon === 'string') { + return { + prefix: 'fas', + iconName: icon + }; } } var FontAwesomeIcon = defineComponent({ name: 'FontAwesomeIcon', - props: { border: { type: Boolean, @@ -356,10 +431,10 @@ var FontAwesomeIcon = defineComponent({ default: false }, flip: { - type: String, - default: null, + type: [Boolean, String], + default: false, validator: function validator(value) { - return ['horizontal', 'vertical', 'both'].indexOf(value) > -1; + return [true, false, 'horizontal', 'vertical', 'both'].indexOf(value) > -1; } }, icon: { @@ -400,7 +475,7 @@ var FontAwesomeIcon = defineComponent({ type: String, default: null, validator: function validator(value) { - return ['lg', 'xs', 'sm', '1x', '2x', '3x', '4x', '5x', '6x', '7x', '8x', '9x', '10x'].indexOf(value) > -1; + return ['2xs', 'xs', 'sm', 'lg', 'xl', '2xl', '1x', '2x', '3x', '4x', '5x', '6x', '7x', '8x', '9x', '10x'].indexOf(value) > -1; } }, spin: { @@ -422,13 +497,43 @@ var FontAwesomeIcon = defineComponent({ inverse: { type: Boolean, default: false + }, + bounce: { + type: Boolean, + default: false + }, + shake: { + type: Boolean, + default: false + }, + beat: { + type: Boolean, + default: false + }, + fade: { + type: Boolean, + default: false + }, + beatFade: { + type: Boolean, + default: false + }, + flash: { + type: Boolean, + default: false + }, + spinPulse: { + type: Boolean, + default: false + }, + spinReverse: { + type: Boolean, + default: false } }, - setup: function setup(props, _ref) { var attrs = _ref.attrs; - - var icon$$1 = computed(function () { + var icon$1 = computed(function () { return normalizeIconArgs(props.icon); }); var classes = computed(function () { @@ -440,20 +545,19 @@ var FontAwesomeIcon = defineComponent({ var mask = computed(function () { return objectWithKey('mask', normalizeIconArgs(props.mask)); }); - var renderedIcon = computed(function () { - return icon(icon$$1.value, _extends({}, classes.value, transform.value, mask.value, { + return icon(icon$1.value, _objectSpread2(_objectSpread2(_objectSpread2(_objectSpread2({}, classes.value), transform.value), mask.value), {}, { symbol: props.symbol, title: props.title })); }); - watch(renderedIcon, function (value) { if (!value) { - return log('Could not find one or more icon(s)', icon$$1.value, mask.value); + return log('Could not find one or more icon(s)', icon$1.value, mask.value); } - }, { immediate: true }); - + }, { + immediate: true + }); var vnode = computed(function () { return renderedIcon.value ? convert(renderedIcon.value.abstract[0], {}, attrs) : null; }); @@ -465,32 +569,28 @@ var FontAwesomeIcon = defineComponent({ var FontAwesomeLayers = defineComponent({ name: 'FontAwesomeLayers', - props: { fixedWidth: { type: Boolean, default: false } }, - setup: function setup(props, _ref) { var slots = _ref.slots; var familyPrefix = config.familyPrefix; - - var className = computed(function () { - return [familyPrefix + '-layers'].concat(toConsumableArray(props.fixedWidth ? [familyPrefix + '-fw'] : [])); + return ["".concat(familyPrefix, "-layers")].concat(_toConsumableArray(props.fixedWidth ? ["".concat(familyPrefix, "-fw")] : [])); }); - return function () { - return h('div', { class: className.value }, slots.default ? slots.default() : []); + return h('div', { + class: className.value + }, slots.default ? slots.default() : []); }; } }); var FontAwesomeLayersText = defineComponent({ name: 'FontAwesomeLayersText', - props: { value: { type: [String, Number], @@ -512,28 +612,25 @@ var FontAwesomeLayersText = defineComponent({ } } }, - setup: function setup(props, _ref) { var attrs = _ref.attrs; var familyPrefix = config.familyPrefix; - - var classes = computed(function () { - return objectWithKey('classes', [].concat(toConsumableArray(props.counter ? [familyPrefix + '-layers-counter'] : []), toConsumableArray(props.position ? [familyPrefix + '-layers-' + props.position] : []))); + return objectWithKey('classes', [].concat(_toConsumableArray(props.counter ? ["".concat(familyPrefix, "-layers-counter")] : []), _toConsumableArray(props.position ? ["".concat(familyPrefix, "-layers-").concat(props.position)] : []))); }); var transform = computed(function () { return objectWithKey('transform', typeof props.transform === 'string' ? parse.transform(props.transform) : props.transform); }); var abstractElement = computed(function () { - var _text = text(props.value.toString(), _extends({}, transform.value, classes.value)), + var _text = text(props.value.toString(), _objectSpread2(_objectSpread2({}, transform.value), classes.value)), abstract = _text.abstract; if (props.counter) { abstract[0].attributes.class = abstract[0].attributes.class.replace('fa-layers-text', ''); } + return abstract[0]; }); - var vnode = computed(function () { return convert(abstractElement.value, {}, attrs); }); diff --git a/index.js b/index.js index 39a1a08f..34356587 100644 --- a/index.js +++ b/index.js @@ -1,555 +1,652 @@ (function (global, factory) { - typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports, require('vue'), require('@fortawesome/fontawesome-svg-core')) : - typeof define === 'function' && define.amd ? define(['exports', 'vue', '@fortawesome/fontawesome-svg-core'], factory) : - (factory((global['vue-fontawesome'] = {}),global.vue,global.FontAwesome)); -}(this, (function (exports,vue,fontawesomeSvgCore) { 'use strict'; - - var commonjsGlobal = typeof window !== 'undefined' ? window : typeof global !== 'undefined' ? global : typeof self !== 'undefined' ? self : {}; - - function createCommonjsModule(fn, module) { - return module = { exports: {} }, fn(module, module.exports), module.exports; - } - - var humps = createCommonjsModule(function (module) { - (function(global) { - - var _processKeys = function(convert, obj, options) { - if(!_isObject(obj) || _isDate(obj) || _isRegExp(obj) || _isBoolean(obj) || _isFunction(obj)) { - return obj; - } - - var output, - i = 0, - l = 0; - - if(_isArray(obj)) { - output = []; - for(l=obj.length; i= 0) continue; - if (!Object.prototype.hasOwnProperty.call(obj, i)) continue; - target[i] = obj[i]; - } - - return target; - }; - - var toConsumableArray = function (arr) { - if (Array.isArray(arr)) { - for (var i = 0, arr2 = Array(arr.length); i < arr.length; i++) arr2[i] = arr[i]; - - return arr2; - } else { - return Array.from(arr); - } - }; - - /** - * Converts a CSS style into a plain Javascript object. - * @param {String} style The style to converts into a plain Javascript object. - * @returns {Object} - */ - function styleToObject(style) { - return style.split(';').map(function (s) { - return s.trim(); - }).filter(function (s) { - return s; - }).reduce(function (output, pair) { - var idx = pair.indexOf(':'); - var prop = humps.camelize(pair.slice(0, idx)); - var value = pair.slice(idx + 1).trim(); - - output[prop] = value; - return output; - }, {}); - } - - /** - * Converts a CSS class list into a plain Javascript object. - * @param {Array} classes The class list to convert. - * @returns {Object} - */ - function classToObject(classes) { - return classes.split(/\s+/).reduce(function (output, className) { - output[className] = true; - return output; - }, {}); - } - - /** - * Converts a FontAwesome abstract element of an icon into a Vue VNode. - * @param {AbstractElement | String} abstractElement The element to convert. - * @param {Object} props The user-defined props. - * @param {Object} attrs The user-defined native HTML attributes. - * @returns {VNode} - */ - function convert(abstractElement) { - var props = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; - var attrs = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {}; - - // If the abstract element is a string, we'll just return a string render function - if (typeof abstractElement === 'string') { - return abstractElement; - } - - // Converting abstract element children into Vue VNodes - var children = (abstractElement.children || []).map(function (child) { - return convert(child); - }); - - // Converting abstract element attributes into valid Vue format - var mixins = Object.keys(abstractElement.attributes || {}).reduce(function (mixins, key) { - var value = abstractElement.attributes[key]; - - switch (key) { - case 'class': - mixins.class = classToObject(value); - break; - case 'style': - mixins.style = styleToObject(value); - break; - default: - mixins.attrs[key] = value; - } - - return mixins; - }, { - attrs: {}, - class: {}, - style: {} - }); - - // Now, we'll return the VNode - - var _attrs$class = attrs.class, - _attrs$style = attrs.style, - aStyle = _attrs$style === undefined ? {} : _attrs$style, - otherAttrs = objectWithoutProperties(attrs, ['class', 'style']); - - return vue.h(abstractElement.tag, _extends({}, props, { - class: mixins.class, - style: _extends({}, mixins.style, aStyle) - }, mixins.attrs, otherAttrs), children); - } - - var PRODUCTION = false; - - try { - PRODUCTION = process.env.NODE_ENV === 'production'; - } catch (e) {} - - function log () { - if (!PRODUCTION && console && typeof console.error === 'function') { - var _console; - - (_console = console).error.apply(_console, arguments); - } - } - - function objectWithKey(key, value) { - return Array.isArray(value) && value.length > 0 || !Array.isArray(value) && value ? defineProperty({}, key, value) : {}; - } - - function classList(props) { - var _classes; - - var classes = (_classes = { - 'fa-spin': props.spin, - 'fa-pulse': props.pulse, - 'fa-fw': props.fixedWidth, - 'fa-border': props.border, - 'fa-li': props.listItem, - 'fa-inverse': props.inverse, - 'fa-flip-horizontal': props.flip === 'horizontal' || props.flip === 'both', - 'fa-flip-vertical': props.flip === 'vertical' || props.flip === 'both' - }, defineProperty(_classes, 'fa-' + props.size, props.size !== null), defineProperty(_classes, 'fa-rotate-' + props.rotation, props.rotation !== null), defineProperty(_classes, 'fa-pull-' + props.pull, props.pull !== null), defineProperty(_classes, 'fa-swap-opacity', props.swapOpacity), _classes); - - return Object.keys(classes).map(function (key) { - return classes[key] ? key : null; - }).filter(function (key) { - return key; - }); - } - - function normalizeIconArgs(icon) { - if (icon === null) { - return null; - } - - if ((typeof icon === 'undefined' ? 'undefined' : _typeof(icon)) === 'object' && icon.prefix && icon.iconName) { - return icon; - } - - if (Array.isArray(icon) && icon.length === 2) { - return { prefix: icon[0], iconName: icon[1] }; - } - - if (typeof icon === 'string') { - return { prefix: 'fas', iconName: icon }; - } - } - - var FontAwesomeIcon = vue.defineComponent({ - name: 'FontAwesomeIcon', - - props: { - border: { - type: Boolean, - default: false - }, - fixedWidth: { - type: Boolean, - default: false - }, - flip: { - type: String, - default: null, - validator: function validator(value) { - return ['horizontal', 'vertical', 'both'].indexOf(value) > -1; - } - }, - icon: { - type: [Object, Array, String], - required: true - }, - mask: { - type: [Object, Array, String], - default: null - }, - listItem: { - type: Boolean, - default: false - }, - pull: { - type: String, - default: null, - validator: function validator(value) { - return ['right', 'left'].indexOf(value) > -1; - } - }, - pulse: { - type: Boolean, - default: false - }, - rotation: { - type: [String, Number], - default: null, - validator: function validator(value) { - return [90, 180, 270].indexOf(Number.parseInt(value, 10)) > -1; - } - }, - swapOpacity: { - type: Boolean, - default: false - }, - size: { - type: String, - default: null, - validator: function validator(value) { - return ['lg', 'xs', 'sm', '1x', '2x', '3x', '4x', '5x', '6x', '7x', '8x', '9x', '10x'].indexOf(value) > -1; - } - }, - spin: { - type: Boolean, - default: false - }, - transform: { - type: [String, Object], - default: null - }, - symbol: { - type: [Boolean, String], - default: false - }, - title: { - type: String, - default: null - }, - inverse: { - type: Boolean, - default: false - } - }, - - setup: function setup(props, _ref) { - var attrs = _ref.attrs; - - var icon = vue.computed(function () { - return normalizeIconArgs(props.icon); - }); - var classes = vue.computed(function () { - return objectWithKey('classes', classList(props)); - }); - var transform = vue.computed(function () { - return objectWithKey('transform', typeof props.transform === 'string' ? fontawesomeSvgCore.parse.transform(props.transform) : props.transform); - }); - var mask = vue.computed(function () { - return objectWithKey('mask', normalizeIconArgs(props.mask)); - }); - - var renderedIcon = vue.computed(function () { - return fontawesomeSvgCore.icon(icon.value, _extends({}, classes.value, transform.value, mask.value, { - symbol: props.symbol, - title: props.title - })); - }); - - vue.watch(renderedIcon, function (value) { - if (!value) { - return log('Could not find one or more icon(s)', icon.value, mask.value); - } - }, { immediate: true }); - - var vnode = vue.computed(function () { - return renderedIcon.value ? convert(renderedIcon.value.abstract[0], {}, attrs) : null; - }); - return function () { - return vnode.value; - }; - } - }); - - var FontAwesomeLayers = vue.defineComponent({ - name: 'FontAwesomeLayers', - - props: { - fixedWidth: { - type: Boolean, - default: false - } - }, - - setup: function setup(props, _ref) { - var slots = _ref.slots; - var familyPrefix = fontawesomeSvgCore.config.familyPrefix; - - - var className = vue.computed(function () { - return [familyPrefix + '-layers'].concat(toConsumableArray(props.fixedWidth ? [familyPrefix + '-fw'] : [])); - }); - - return function () { - return vue.h('div', { class: className.value }, slots.default ? slots.default() : []); - }; - } - }); - - var FontAwesomeLayersText = vue.defineComponent({ - name: 'FontAwesomeLayersText', - - props: { - value: { - type: [String, Number], - default: '' - }, - transform: { - type: [String, Object], - default: null - }, - counter: { - type: Boolean, - default: false - }, - position: { - type: String, - default: null, - validator: function validator(value) { - return ['bottom-left', 'bottom-right', 'top-left', 'top-right'].indexOf(value) > -1; - } - } - }, - - setup: function setup(props, _ref) { - var attrs = _ref.attrs; - var familyPrefix = fontawesomeSvgCore.config.familyPrefix; - - - var classes = vue.computed(function () { - return objectWithKey('classes', [].concat(toConsumableArray(props.counter ? [familyPrefix + '-layers-counter'] : []), toConsumableArray(props.position ? [familyPrefix + '-layers-' + props.position] : []))); - }); - var transform = vue.computed(function () { - return objectWithKey('transform', typeof props.transform === 'string' ? fontawesomeSvgCore.parse.transform(props.transform) : props.transform); - }); - var abstractElement = vue.computed(function () { - var _text = fontawesomeSvgCore.text(props.value.toString(), _extends({}, transform.value, classes.value)), - abstract = _text.abstract; - - if (props.counter) { - abstract[0].attributes.class = abstract[0].attributes.class.replace('fa-layers-text', ''); - } - return abstract[0]; - }); - - var vnode = vue.computed(function () { - return convert(abstractElement.value, {}, attrs); - }); - return function () { - return vnode.value; - }; - } - }); - - exports.FontAwesomeIcon = FontAwesomeIcon; - exports.FontAwesomeLayers = FontAwesomeLayers; - exports.FontAwesomeLayersText = FontAwesomeLayersText; - - Object.defineProperty(exports, '__esModule', { value: true }); - -}))); + typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports, require('@fortawesome/fontawesome-svg-core'), require('vue')) : + typeof define === 'function' && define.amd ? define(['exports', '@fortawesome/fontawesome-svg-core', 'vue'], factory) : + (global = typeof globalThis !== 'undefined' ? globalThis : global || self, factory(global["vue-fontawesome"] = {}, global.FontAwesome, global.vue)); +})(this, (function (exports, fontawesomeSvgCore, vue) { 'use strict'; + + function ownKeys(object, enumerableOnly) { + var keys = Object.keys(object); + + if (Object.getOwnPropertySymbols) { + var symbols = Object.getOwnPropertySymbols(object); + enumerableOnly && (symbols = symbols.filter(function (sym) { + return Object.getOwnPropertyDescriptor(object, sym).enumerable; + })), keys.push.apply(keys, symbols); + } + + return keys; + } + + function _objectSpread2(target) { + for (var i = 1; i < arguments.length; i++) { + var source = null != arguments[i] ? arguments[i] : {}; + i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { + _defineProperty(target, key, source[key]); + }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { + Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); + }); + } + + return target; + } + + function _typeof(obj) { + "@babel/helpers - typeof"; + + return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (obj) { + return typeof obj; + } : function (obj) { + return obj && "function" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; + }, _typeof(obj); + } + + function _defineProperty(obj, key, value) { + if (key in obj) { + Object.defineProperty(obj, key, { + value: value, + enumerable: true, + configurable: true, + writable: true + }); + } else { + obj[key] = value; + } + + return obj; + } + + function _objectWithoutPropertiesLoose(source, excluded) { + if (source == null) return {}; + var target = {}; + var sourceKeys = Object.keys(source); + var key, i; + + for (i = 0; i < sourceKeys.length; i++) { + key = sourceKeys[i]; + if (excluded.indexOf(key) >= 0) continue; + target[key] = source[key]; + } + + return target; + } + + function _objectWithoutProperties(source, excluded) { + if (source == null) return {}; + + var target = _objectWithoutPropertiesLoose(source, excluded); + + var key, i; + + if (Object.getOwnPropertySymbols) { + var sourceSymbolKeys = Object.getOwnPropertySymbols(source); + + for (i = 0; i < sourceSymbolKeys.length; i++) { + key = sourceSymbolKeys[i]; + if (excluded.indexOf(key) >= 0) continue; + if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; + target[key] = source[key]; + } + } + + return target; + } + + function _toConsumableArray(arr) { + return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread(); + } + + function _arrayWithoutHoles(arr) { + if (Array.isArray(arr)) return _arrayLikeToArray(arr); + } + + function _iterableToArray(iter) { + if (typeof Symbol !== "undefined" && iter[Symbol.iterator] != null || iter["@@iterator"] != null) return Array.from(iter); + } + + function _unsupportedIterableToArray(o, minLen) { + if (!o) return; + if (typeof o === "string") return _arrayLikeToArray(o, minLen); + var n = Object.prototype.toString.call(o).slice(8, -1); + if (n === "Object" && o.constructor) n = o.constructor.name; + if (n === "Map" || n === "Set") return Array.from(o); + if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); + } + + function _arrayLikeToArray(arr, len) { + if (len == null || len > arr.length) len = arr.length; + + for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i]; + + return arr2; + } + + function _nonIterableSpread() { + throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); + } + + var commonjsGlobal = typeof globalThis !== 'undefined' ? globalThis : typeof window !== 'undefined' ? window : typeof global !== 'undefined' ? global : typeof self !== 'undefined' ? self : {}; + + var humps$1 = {exports: {}}; + + (function (module) { + (function(global) { + + var _processKeys = function(convert, obj, options) { + if(!_isObject(obj) || _isDate(obj) || _isRegExp(obj) || _isBoolean(obj) || _isFunction(obj)) { + return obj; + } + + var output, + i = 0, + l = 0; + + if(_isArray(obj)) { + output = []; + for(l=obj.length; i} classes The class list to convert. + * @returns {Object} + */ + + + function classToObject(classes) { + return classes.split(/\s+/).reduce(function (output, className) { + output[className] = true; + return output; + }, {}); + } + /** + * Converts a FontAwesome abstract element of an icon into a Vue VNode. + * @param {AbstractElement | String} abstractElement The element to convert. + * @param {Object} props The user-defined props. + * @param {Object} attrs The user-defined native HTML attributes. + * @returns {VNode} + */ + + + function convert(abstractElement) { + var props = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; + var attrs = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {}; + + // If the abstract element is a string, we'll just return a string render function + if (typeof abstractElement === 'string') { + return abstractElement; + } // Converting abstract element children into Vue VNodes + + + var children = (abstractElement.children || []).map(function (child) { + return convert(child); + }); // Converting abstract element attributes into valid Vue format + + var mixins = Object.keys(abstractElement.attributes || {}).reduce(function (mixins, key) { + var value = abstractElement.attributes[key]; + + switch (key) { + case 'class': + mixins.class = classToObject(value); + break; + + case 'style': + mixins.style = styleToObject(value); + break; + + default: + mixins.attrs[key] = value; + } + + return mixins; + }, { + attrs: {}, + class: {}, + style: {} + }); // Now, we'll return the VNode + + attrs.class; + var _attrs$style = attrs.style, + aStyle = _attrs$style === void 0 ? {} : _attrs$style, + otherAttrs = _objectWithoutProperties(attrs, _excluded); + + return vue.h(abstractElement.tag, _objectSpread2(_objectSpread2(_objectSpread2({}, props), {}, { + class: mixins.class, + style: _objectSpread2(_objectSpread2({}, mixins.style), aStyle) + }, mixins.attrs), otherAttrs), children); + } + + var PRODUCTION = false; + + try { + PRODUCTION = process.env.NODE_ENV === 'production'; + } catch (e) {} + + function log () { + if (!PRODUCTION && console && typeof console.error === 'function') { + var _console; + + (_console = console).error.apply(_console, arguments); + } + } + + function objectWithKey(key, value) { + return Array.isArray(value) && value.length > 0 || !Array.isArray(value) && value ? _defineProperty({}, key, value) : {}; + } + function classList(props) { + var _classes; + + var classes = (_classes = { + 'fa-spin': props.spin, + 'fa-pulse': props.pulse, + 'fa-fw': props.fixedWidth, + 'fa-border': props.border, + 'fa-li': props.listItem, + 'fa-inverse': props.inverse, + 'fa-flip': props.flip === true, + 'fa-flip-horizontal': props.flip === 'horizontal' || props.flip === 'both', + 'fa-flip-vertical': props.flip === 'vertical' || props.flip === 'both' + }, _defineProperty(_classes, "fa-".concat(props.size), props.size !== null), _defineProperty(_classes, "fa-rotate-".concat(props.rotation), props.rotation !== null), _defineProperty(_classes, "fa-pull-".concat(props.pull), props.pull !== null), _defineProperty(_classes, 'fa-swap-opacity', props.swapOpacity), _defineProperty(_classes, 'fa-bounce', props.bounce), _defineProperty(_classes, 'fa-shake', props.shake), _defineProperty(_classes, 'fa-beat', props.beat), _defineProperty(_classes, 'fa-fade', props.fade), _defineProperty(_classes, 'fa-beat-fade', props.beatFade), _defineProperty(_classes, 'fa-flash', props.flash), _defineProperty(_classes, 'fa-spin-pulse', props.spinPulse), _defineProperty(_classes, 'fa-spin-reverse', props.spinReverse), _classes); + return Object.keys(classes).map(function (key) { + return classes[key] ? key : null; + }).filter(function (key) { + return key; + }); + } + + function normalizeIconArgs(icon) { + if (icon && _typeof(icon) === 'object' && icon.prefix && icon.iconName && icon.icon) { + return icon; + } + + if (fontawesomeSvgCore.parse.icon) { + return fontawesomeSvgCore.parse.icon(icon); + } + + if (icon === null) { + return null; + } + + if (_typeof(icon) === 'object' && icon.prefix && icon.iconName) { + return icon; + } + + if (Array.isArray(icon) && icon.length === 2) { + return { + prefix: icon[0], + iconName: icon[1] + }; + } + + if (typeof icon === 'string') { + return { + prefix: 'fas', + iconName: icon + }; + } + } + + var FontAwesomeIcon = vue.defineComponent({ + name: 'FontAwesomeIcon', + props: { + border: { + type: Boolean, + default: false + }, + fixedWidth: { + type: Boolean, + default: false + }, + flip: { + type: [Boolean, String], + default: false, + validator: function validator(value) { + return [true, false, 'horizontal', 'vertical', 'both'].indexOf(value) > -1; + } + }, + icon: { + type: [Object, Array, String], + required: true + }, + mask: { + type: [Object, Array, String], + default: null + }, + listItem: { + type: Boolean, + default: false + }, + pull: { + type: String, + default: null, + validator: function validator(value) { + return ['right', 'left'].indexOf(value) > -1; + } + }, + pulse: { + type: Boolean, + default: false + }, + rotation: { + type: [String, Number], + default: null, + validator: function validator(value) { + return [90, 180, 270].indexOf(Number.parseInt(value, 10)) > -1; + } + }, + swapOpacity: { + type: Boolean, + default: false + }, + size: { + type: String, + default: null, + validator: function validator(value) { + return ['2xs', 'xs', 'sm', 'lg', 'xl', '2xl', '1x', '2x', '3x', '4x', '5x', '6x', '7x', '8x', '9x', '10x'].indexOf(value) > -1; + } + }, + spin: { + type: Boolean, + default: false + }, + transform: { + type: [String, Object], + default: null + }, + symbol: { + type: [Boolean, String], + default: false + }, + title: { + type: String, + default: null + }, + inverse: { + type: Boolean, + default: false + }, + bounce: { + type: Boolean, + default: false + }, + shake: { + type: Boolean, + default: false + }, + beat: { + type: Boolean, + default: false + }, + fade: { + type: Boolean, + default: false + }, + beatFade: { + type: Boolean, + default: false + }, + flash: { + type: Boolean, + default: false + }, + spinPulse: { + type: Boolean, + default: false + }, + spinReverse: { + type: Boolean, + default: false + } + }, + setup: function setup(props, _ref) { + var attrs = _ref.attrs; + var icon = vue.computed(function () { + return normalizeIconArgs(props.icon); + }); + var classes = vue.computed(function () { + return objectWithKey('classes', classList(props)); + }); + var transform = vue.computed(function () { + return objectWithKey('transform', typeof props.transform === 'string' ? fontawesomeSvgCore.parse.transform(props.transform) : props.transform); + }); + var mask = vue.computed(function () { + return objectWithKey('mask', normalizeIconArgs(props.mask)); + }); + var renderedIcon = vue.computed(function () { + return fontawesomeSvgCore.icon(icon.value, _objectSpread2(_objectSpread2(_objectSpread2(_objectSpread2({}, classes.value), transform.value), mask.value), {}, { + symbol: props.symbol, + title: props.title + })); + }); + vue.watch(renderedIcon, function (value) { + if (!value) { + return log('Could not find one or more icon(s)', icon.value, mask.value); + } + }, { + immediate: true + }); + var vnode = vue.computed(function () { + return renderedIcon.value ? convert(renderedIcon.value.abstract[0], {}, attrs) : null; + }); + return function () { + return vnode.value; + }; + } + }); + + var FontAwesomeLayers = vue.defineComponent({ + name: 'FontAwesomeLayers', + props: { + fixedWidth: { + type: Boolean, + default: false + } + }, + setup: function setup(props, _ref) { + var slots = _ref.slots; + var familyPrefix = fontawesomeSvgCore.config.familyPrefix; + var className = vue.computed(function () { + return ["".concat(familyPrefix, "-layers")].concat(_toConsumableArray(props.fixedWidth ? ["".concat(familyPrefix, "-fw")] : [])); + }); + return function () { + return vue.h('div', { + class: className.value + }, slots.default ? slots.default() : []); + }; + } + }); + + var FontAwesomeLayersText = vue.defineComponent({ + name: 'FontAwesomeLayersText', + props: { + value: { + type: [String, Number], + default: '' + }, + transform: { + type: [String, Object], + default: null + }, + counter: { + type: Boolean, + default: false + }, + position: { + type: String, + default: null, + validator: function validator(value) { + return ['bottom-left', 'bottom-right', 'top-left', 'top-right'].indexOf(value) > -1; + } + } + }, + setup: function setup(props, _ref) { + var attrs = _ref.attrs; + var familyPrefix = fontawesomeSvgCore.config.familyPrefix; + var classes = vue.computed(function () { + return objectWithKey('classes', [].concat(_toConsumableArray(props.counter ? ["".concat(familyPrefix, "-layers-counter")] : []), _toConsumableArray(props.position ? ["".concat(familyPrefix, "-layers-").concat(props.position)] : []))); + }); + var transform = vue.computed(function () { + return objectWithKey('transform', typeof props.transform === 'string' ? fontawesomeSvgCore.parse.transform(props.transform) : props.transform); + }); + var abstractElement = vue.computed(function () { + var _text = fontawesomeSvgCore.text(props.value.toString(), _objectSpread2(_objectSpread2({}, transform.value), classes.value)), + abstract = _text.abstract; + + if (props.counter) { + abstract[0].attributes.class = abstract[0].attributes.class.replace('fa-layers-text', ''); + } + + return abstract[0]; + }); + var vnode = vue.computed(function () { + return convert(abstractElement.value, {}, attrs); + }); + return function () { + return vnode.value; + }; + } + }); + + exports.FontAwesomeIcon = FontAwesomeIcon; + exports.FontAwesomeLayers = FontAwesomeLayers; + exports.FontAwesomeLayersText = FontAwesomeLayersText; + + Object.defineProperty(exports, '__esModule', { value: true }); + +})); diff --git a/package.json b/package.json index 8fc00d9b..6ece9968 100644 --- a/package.json +++ b/package.json @@ -1,8 +1,19 @@ { "name": "@fortawesome/vue-fontawesome", "description": "Official Vue component for Font Awesome 6", - "version": "3.0.0-6", + "version": "3.0.0", "main": "index.js", + "files": [ + "README.md", + "LICENSE.txt", + "UPGRADING.md", + "CHANGELOG.md", + "index.d.ts", + "index.es.js", + "index.js", + "src/components/**.js", + "src/**.js" + ], "jest": { "verbose": true }, @@ -47,31 +58,31 @@ "vue": ">= 3.0.0 < 4" }, "devDependencies": { - "@babel/core": "^7.0.0", - "@babel/plugin-external-helpers": "^7.0.0", - "@babel/plugin-proposal-class-properties": "^7.0.0", - "@babel/plugin-proposal-json-strings": "^7.0.0", - "@babel/plugin-syntax-dynamic-import": "^7.0.0", - "@babel/plugin-syntax-import-meta": "^7.0.0", - "@babel/preset-env": "^7.0.0", - "@fortawesome/fontawesome-svg-core": "^6", + "@babel/core": "^7.18.2", + "@babel/plugin-external-helpers": "^7.17.12", + "@babel/plugin-proposal-class-properties": "^7.17.12", + "@babel/plugin-proposal-json-strings": "^7.17.12", + "@babel/plugin-syntax-dynamic-import": "^7.8.3", + "@babel/plugin-syntax-import-meta": "^7.10.4", + "@babel/preset-env": "^7.18.2", + "@fortawesome/fontawesome-svg-core": "~6", "@fortawesome/free-solid-svg-icons": "^6", "babel-core": "^7.0.0-bridge.0", - "babel-jest": "^28.0.0", - "concurrently": "^7.1.0", - "cross-env": "^5.1.1", + "babel-jest": "^28.1.1", + "concurrently": "^7.2.1", + "cross-env": "^7.0.3", "humps": "^2.0.1", - "husky": "^1.1.2", - "jest": "^28.0.0", - "jest-environment-jsdom": "^28.0.1", - "lint-staged": "^12.4.1", + "husky": "^8.0.1", + "jest": "^28.1.1", + "jest-environment-jsdom": "^28.1.1", + "lint-staged": "^13.0.0", "markdown-toc": "^1.2.0", - "rollup": "^2.70.0", + "rollup": "^2.75.6", "@rollup/plugin-babel": "^5.3.1", "@rollup/plugin-commonjs": "^22.0.0", - "@rollup/plugin-node-resolve": "^13.0.0", + "@rollup/plugin-node-resolve": "^13.3.0", "@vue/test-utils": "^2.0.0-beta.2", - "vue": "^3.0.0" + "vue": "^3" }, "dependencies": {}, "husky": {