UNPKG

@10up/block-components

Version:

10up Components built for the WordPress Block Editor.

1,034 lines (919 loc) 39.8 kB
/******/ (function() { // webpackBootstrap /******/ "use strict"; /******/ var __webpack_modules__ = ({ /***/ "./components/icon-picker/icon-picker-toolbar-button.tsx": /*!***************************************************************!*\ !*** ./components/icon-picker/icon-picker-toolbar-button.tsx ***! \***************************************************************/ /***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) { __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ IconPickerToolbarButton: function() { return /* binding */ IconPickerToolbarButton; } /* harmony export */ }); /* harmony import */ var _wordpress_element__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @wordpress/element */ "@wordpress/element"); /* harmony import */ var _wordpress_element__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_wordpress_element__WEBPACK_IMPORTED_MODULE_0__); /* harmony import */ var _wordpress_i18n__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @wordpress/i18n */ "@wordpress/i18n"); /* harmony import */ var _wordpress_i18n__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_wordpress_i18n__WEBPACK_IMPORTED_MODULE_1__); /* harmony import */ var _wordpress_components__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @wordpress/components */ "@wordpress/components"); /* harmony import */ var _wordpress_components__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_wordpress_components__WEBPACK_IMPORTED_MODULE_2__); /* harmony import */ var _emotion_styled__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @emotion/styled */ "@emotion/styled"); /* harmony import */ var _emotion_styled__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(_emotion_styled__WEBPACK_IMPORTED_MODULE_3__); /* harmony import */ var _icon_picker__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./icon-picker */ "./components/icon-picker/icon-picker.tsx"); /* harmony import */ var _icon__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./icon */ "./components/icon-picker/icon.tsx"); var _jsxFileName = "/Users/fabiankaegy/Developer/10up/block-components/components/icon-picker/icon-picker-toolbar-button.tsx"; function _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); } const StyledIconPickerDropdown = _emotion_styled__WEBPACK_IMPORTED_MODULE_3___default()((0,_icon_picker__WEBPACK_IMPORTED_MODULE_4__.IconPicker))` margin: 6px; width: 248px; height: 248px; `; const IconPickerToolbarButton = props => { const { value, buttonLabel = (0,_wordpress_i18n__WEBPACK_IMPORTED_MODULE_1__.__)('Select Icon') } = props; const buttonIcon = value?.name && value?.iconSet ? (0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.createElement)(_icon__WEBPACK_IMPORTED_MODULE_5__.Icon, { name: value?.name, iconSet: value?.iconSet, __self: undefined, __source: { fileName: _jsxFileName, lineNumber: 30, columnNumber: 35 } }) : null; return (0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.createElement)(_wordpress_components__WEBPACK_IMPORTED_MODULE_2__.Dropdown, { className: "component-icon-picker-toolbar-button", contentClassName: "component-icon-picker-toolbar-button__content", popoverProps: { placement: 'bottom-start' }, renderToggle: ({ isOpen, onToggle }) => (0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.createElement)(_wordpress_components__WEBPACK_IMPORTED_MODULE_2__.ToolbarButton, { onClick: onToggle, "aria-expanded": isOpen, icon: buttonIcon, __self: undefined, __source: { fileName: _jsxFileName, lineNumber: 40, columnNumber: 5 } }, buttonLabel), renderContent: () => (0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.createElement)(StyledIconPickerDropdown, _extends({}, props, { __self: undefined, __source: { fileName: _jsxFileName, lineNumber: 44, columnNumber: 25 } })), __self: undefined, __source: { fileName: _jsxFileName, lineNumber: 33, columnNumber: 3 } }); }; /***/ }), /***/ "./components/icon-picker/icon-picker.tsx": /*!************************************************!*\ !*** ./components/icon-picker/icon-picker.tsx ***! \************************************************/ /***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) { __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ IconPicker: function() { return /* binding */ IconPicker; } /* harmony export */ }); /* harmony import */ var _wordpress_element__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @wordpress/element */ "@wordpress/element"); /* harmony import */ var _wordpress_element__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_wordpress_element__WEBPACK_IMPORTED_MODULE_0__); /* harmony import */ var _emotion_styled__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @emotion/styled */ "@emotion/styled"); /* harmony import */ var _emotion_styled__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_emotion_styled__WEBPACK_IMPORTED_MODULE_1__); /* harmony import */ var _wordpress_i18n__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @wordpress/i18n */ "@wordpress/i18n"); /* harmony import */ var _wordpress_i18n__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_wordpress_i18n__WEBPACK_IMPORTED_MODULE_2__); /* harmony import */ var _wordpress_components__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @wordpress/components */ "@wordpress/components"); /* harmony import */ var _wordpress_components__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(_wordpress_components__WEBPACK_IMPORTED_MODULE_3__); /* harmony import */ var _wordpress_compose__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @wordpress/compose */ "@wordpress/compose"); /* harmony import */ var _wordpress_compose__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(_wordpress_compose__WEBPACK_IMPORTED_MODULE_4__); /* harmony import */ var react_window__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! react-window */ "react-window"); /* harmony import */ var react_window__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(react_window__WEBPACK_IMPORTED_MODULE_5__); /* harmony import */ var _hooks_use_icons__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../../hooks/use-icons */ "./hooks/use-icons/index.ts"); /* harmony import */ var _hooks_use_filtered_list__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../../hooks/use-filtered-list */ "./hooks/use-filtered-list/index.ts"); /* harmony import */ var _icon__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./icon */ "./components/icon-picker/icon.tsx"); var _jsxFileName = "/Users/fabiankaegy/Developer/10up/block-components/components/icon-picker/icon-picker.tsx"; function _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); } /** * TooltipContent * * The `@wordpress/components` Tooltip component tries to clone the child element * passed into it. This child will get some additional children passed in. In some cases * this clashes with elements that use dangerouslySetInnerHTML. This component is a * workaround for that. It will just wrap the children in a div and pass that to the * Tooltip component. */ const TooltipContent = (0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.forwardRef)(function TooltipContent(props, ref) { const { children } = props; return (0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.createElement)("div", _extends({ ref: ref, className: "component-icon-picker__tooltip-content" }, props, { __self: this, __source: { fileName: _jsxFileName, lineNumber: 33, columnNumber: 4 } }), children); }); const StyledIconButton = _emotion_styled__WEBPACK_IMPORTED_MODULE_1___default()((0,_icon__WEBPACK_IMPORTED_MODULE_8__.Icon))` background-color: ${({ selected }) => selected ? 'black' : 'white'}; color: ${({ selected }) => selected ? 'white' : 'black'}; fill: ${({ selected }) => selected ? 'white' : 'black'}; padding: 5px; border: none; border-radius: 4px; height: 34px; width: 34px; display: flex; align-items: center; justify-content: center; &:hover { background-color: ${({ selected }) => selected ? '#555D66' : '#f3f4f5'}; } & svg { max-height: 100%; max-width: 100%; height: auto; width: 100%; object-fit: contain; } `; const IconLabel = props => { const { icon, isChecked } = props; return (0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.createElement)(_wordpress_components__WEBPACK_IMPORTED_MODULE_3__.Tooltip, { text: icon.label, __self: undefined, __source: { fileName: _jsxFileName, lineNumber: 80, columnNumber: 3 } }, (0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.createElement)(TooltipContent, { __self: undefined, __source: { fileName: _jsxFileName, lineNumber: 81, columnNumber: 4 } }, (0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.createElement)(StyledIconButton, { selected: isChecked, key: icon.name, name: icon.name, iconSet: icon.iconSet, __self: undefined, __source: { fileName: _jsxFileName, lineNumber: 82, columnNumber: 5 } }))); }; const IconGridItem = (0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.memo)(props => { const { columnIndex, rowIndex, style, data } = props; const { icons, selectedIcon, onChange } = data; const index = rowIndex * 5 + columnIndex; const icon = icons[index]; const isChecked = selectedIcon?.name === icon?.name && selectedIcon?.iconSet === icon?.iconSet; if (!icon) { return null; } // We need to cast the IconLabel to a string because types in WP are not correct const label = (0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.createElement)(IconLabel, { isChecked: isChecked, icon: icon, __self: undefined, __source: { fileName: _jsxFileName, lineNumber: 128, columnNumber: 17 } }); return (0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.createElement)("div", { style: style, __self: undefined, __source: { fileName: _jsxFileName, lineNumber: 131, columnNumber: 3 } }, (0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.createElement)(_wordpress_components__WEBPACK_IMPORTED_MODULE_3__.CheckboxControl, { key: icon.name, label: label, checked: isChecked, onChange: () => onChange(icon), className: "component-icon-picker__checkbox-control", __self: undefined, __source: { fileName: _jsxFileName, lineNumber: 132, columnNumber: 4 } })); }, react_window__WEBPACK_IMPORTED_MODULE_5__.areEqual); const StyledIconGrid = _emotion_styled__WEBPACK_IMPORTED_MODULE_1___default()((0,react_window__WEBPACK_IMPORTED_MODULE_5__.FixedSizeGrid))` .component-icon-picker__checkbox-control { margin-bottom: 0; } .components-checkbox-control__input, .components-checkbox-control__input-container { display: none; } `; const IconGrid = props => { const { icons, selectedIcon, onChange } = props; const itemData = (0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.useMemo)(() => ({ icons, selectedIcon, onChange }), [icons, selectedIcon, onChange]); return (0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.createElement)(_wordpress_components__WEBPACK_IMPORTED_MODULE_3__.NavigableMenu, { orientation: "vertical", className: "component-icon-picker__list", __self: undefined, __source: { fileName: _jsxFileName, lineNumber: 178, columnNumber: 3 } }, (0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.createElement)(StyledIconGrid, { columnCount: 5, columnWidth: 248 / 5, rowCount: Math.ceil(icons.length / 5), rowHeight: 248 / 5, itemData: itemData, height: 200, width: 248, __self: undefined, __source: { fileName: _jsxFileName, lineNumber: 179, columnNumber: 4 } }, IconGridItem)); }; const IconPicker = props => { const { value, onChange, iconSet, label = '', ...rest } = props; const icons = (0,_hooks_use_icons__WEBPACK_IMPORTED_MODULE_6__.useIcons)(iconSet ? iconSet : ''); const instanceId = (0,_wordpress_compose__WEBPACK_IMPORTED_MODULE_4__.useInstanceId)(IconPicker); const id = `icon-picker-${instanceId}`; const [searchTerm, setSearchTerm] = (0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.useState)(''); const [filteredIcons] = (0,_hooks_use_filtered_list__WEBPACK_IMPORTED_MODULE_7__.useFilteredList)(icons, searchTerm); const hasIcons = !!filteredIcons.length; return (0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.createElement)(_wordpress_components__WEBPACK_IMPORTED_MODULE_3__.BaseControl, _extends({ label: label, id: id, className: "component-icon-picker" }, rest, { __self: undefined, __source: { fileName: _jsxFileName, lineNumber: 224, columnNumber: 3 } }), (0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.createElement)(_wordpress_components__WEBPACK_IMPORTED_MODULE_3__.SearchControl, { value: searchTerm, onChange: setSearchTerm, id: id, __self: undefined, __source: { fileName: _jsxFileName, lineNumber: 225, columnNumber: 4 } }), hasIcons ? (0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.createElement)(IconGrid, { icons: filteredIcons, selectedIcon: value, onChange: onChange, __self: undefined, __source: { fileName: _jsxFileName, lineNumber: 227, columnNumber: 5 } }) : (0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.createElement)("p", { __self: undefined, __source: { fileName: _jsxFileName, lineNumber: 229, columnNumber: 5 } }, (0,_wordpress_i18n__WEBPACK_IMPORTED_MODULE_2__.__)('No icons were found...'))); }; /***/ }), /***/ "./components/icon-picker/icon.tsx": /*!*****************************************!*\ !*** ./components/icon-picker/icon.tsx ***! \*****************************************/ /***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) { __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ Icon: function() { return /* binding */ Icon; } /* harmony export */ }); /* harmony import */ var _wordpress_element__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @wordpress/element */ "@wordpress/element"); /* harmony import */ var _wordpress_element__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_wordpress_element__WEBPACK_IMPORTED_MODULE_0__); /* harmony import */ var _wordpress_components__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @wordpress/components */ "@wordpress/components"); /* harmony import */ var _wordpress_components__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_wordpress_components__WEBPACK_IMPORTED_MODULE_1__); /* harmony import */ var _hooks_use_icons__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../hooks/use-icons */ "./hooks/use-icons/index.ts"); var _jsxFileName = "/Users/fabiankaegy/Developer/10up/block-components/components/icon-picker/icon.tsx"; function _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); } const Icon = (0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.forwardRef)(function Icon(props, ref) { const { name, iconSet, onClick, ...rest } = props; const icon = (0,_hooks_use_icons__WEBPACK_IMPORTED_MODULE_2__.useIcon)(iconSet, name); if (!icon || Array.isArray(icon)) { return (0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.createElement)(_wordpress_components__WEBPACK_IMPORTED_MODULE_1__.Spinner, { __self: this, __source: { fileName: _jsxFileName, lineNumber: 26, columnNumber: 11 } }); } // only add interactive props to component if a onClick handler was provided const iconProps = {}; if (typeof onClick === 'function') { iconProps.role = 'button'; iconProps.tabIndex = 0; iconProps['aria-label'] = 'Change Icon'; iconProps.onClick = onClick; } return (0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.createElement)("div", _extends({}, iconProps, { // eslint-disable-next-line react/no-danger dangerouslySetInnerHTML: { __html: icon.source } }, rest, { ref: ref, __self: this, __source: { fileName: _jsxFileName, lineNumber: 39, columnNumber: 4 } })); }); /***/ }), /***/ "./components/icon-picker/inline-icon-picker.tsx": /*!*******************************************************!*\ !*** ./components/icon-picker/inline-icon-picker.tsx ***! \*******************************************************/ /***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) { __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ IconPickerDropdown: function() { return /* binding */ IconPickerDropdown; }, /* harmony export */ InlineIconPicker: function() { return /* binding */ InlineIconPicker; } /* harmony export */ }); /* harmony import */ var _wordpress_element__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @wordpress/element */ "@wordpress/element"); /* harmony import */ var _wordpress_element__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_wordpress_element__WEBPACK_IMPORTED_MODULE_0__); /* harmony import */ var _emotion_styled__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @emotion/styled */ "@emotion/styled"); /* harmony import */ var _emotion_styled__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_emotion_styled__WEBPACK_IMPORTED_MODULE_1__); /* harmony import */ var _wordpress_components__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @wordpress/components */ "@wordpress/components"); /* harmony import */ var _wordpress_components__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_wordpress_components__WEBPACK_IMPORTED_MODULE_2__); /* harmony import */ var _icon_picker__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./icon-picker */ "./components/icon-picker/icon-picker.tsx"); /* harmony import */ var _icon__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./icon */ "./components/icon-picker/icon.tsx"); var _jsxFileName = "/Users/fabiankaegy/Developer/10up/block-components/components/icon-picker/inline-icon-picker.tsx"; function _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); } const StyledIconPickerDropdown = _emotion_styled__WEBPACK_IMPORTED_MODULE_1___default()((0,_icon_picker__WEBPACK_IMPORTED_MODULE_3__.IconPicker))` margin: 6px; width: 248px; height: 248px; `; const IconPickerDropdown = props => { const { renderToggle, ...iconPickerProps } = props; return (0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.createElement)(_wordpress_components__WEBPACK_IMPORTED_MODULE_2__.Dropdown, { className: "component-icon-picker-inline-button", contentClassName: "component-icon-picker-inline__content", popoverProps: { placement: 'bottom-start' }, renderToggle: renderToggle, renderContent: () => (0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.createElement)(StyledIconPickerDropdown, _extends({}, iconPickerProps, { __self: undefined, __source: { fileName: _jsxFileName, lineNumber: 35, columnNumber: 25 } })), __self: undefined, __source: { fileName: _jsxFileName, lineNumber: 30, columnNumber: 3 } }); }; const InlineIconPicker = props => { const { value, ...rest } = props; const IconButton = (0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.useCallback)(({ onToggle }) => (0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.createElement)(_icon__WEBPACK_IMPORTED_MODULE_4__.Icon, _extends({ name: value?.name, iconSet: value?.iconSet, onClick: onToggle }, rest, { __self: undefined, __source: { fileName: _jsxFileName, lineNumber: 44, columnNumber: 4 } })), [value, rest]); return (0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.createElement)(IconPickerDropdown, _extends({ renderToggle: IconButton }, props, { __self: undefined, __source: { fileName: _jsxFileName, lineNumber: 49, columnNumber: 9 } })); }; /***/ }), /***/ "./hooks/use-filtered-list/index.ts": /*!******************************************!*\ !*** ./hooks/use-filtered-list/index.ts ***! \******************************************/ /***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) { __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ useFilteredList: function() { return /* binding */ useFilteredList; } /* harmony export */ }); /* harmony import */ var _wordpress_element__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @wordpress/element */ "@wordpress/element"); /* harmony import */ var _wordpress_element__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_wordpress_element__WEBPACK_IMPORTED_MODULE_0__); /* harmony import */ var _leeoniya_ufuzzy__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @leeoniya/ufuzzy */ "@leeoniya/ufuzzy"); /* harmony import */ var _leeoniya_ufuzzy__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_leeoniya_ufuzzy__WEBPACK_IMPORTED_MODULE_1__); // eslint-disable-next-line new-cap const fuzzy = new (_leeoniya_ufuzzy__WEBPACK_IMPORTED_MODULE_1___default())(); /** * useFilteredList * * @param {Array} list list of items to filter * @param {string} searchTerm search term string * @param {string?} property name of the prop * @returns {Array} filtered list */ function useFilteredList(list = [], searchTerm = '', property = 'name') { const [filteredList, setFilteredList] = (0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.useState)(list); const propertyList = (0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.useMemo)(() => list.map(item => item[property]), [list, property]); const filterList = (0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.useCallback)(searchTerm => { const matchedNames = fuzzy.filter(propertyList, searchTerm); const results = matchedNames?.map(index => list[index]) || []; return results; }, [propertyList, list]); (0,_wordpress_element__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => { const hasListItems = !!list?.length; const hasSearchTerm = searchTerm !== ''; const canFilter = hasSearchTerm && hasListItems; const newFilteredList = canFilter ? filterList(searchTerm) : list; setFilteredList(newFilteredList); }, [searchTerm, filterList, list]); return [filteredList]; } /***/ }), /***/ "./hooks/use-icons/index.ts": /*!**********************************!*\ !*** ./hooks/use-icons/index.ts ***! \**********************************/ /***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) { __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ useIcon: function() { return /* binding */ useIcon; }, /* harmony export */ useIcons: function() { return /* binding */ useIcons; } /* harmony export */ }); /* harmony import */ var _wordpress_data__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @wordpress/data */ "@wordpress/data"); /* harmony import */ var _wordpress_data__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_wordpress_data__WEBPACK_IMPORTED_MODULE_0__); /* harmony import */ var _wordpress_element__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @wordpress/element */ "@wordpress/element"); /* harmony import */ var _wordpress_element__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_wordpress_element__WEBPACK_IMPORTED_MODULE_1__); /* harmony import */ var _stores__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../stores */ "./stores/index.ts"); function transformIcons(iconSet) { return iconSet.icons.map(icon => ({ ...icon, iconSet: iconSet.name })); } const useIcons = (iconSet = '') => { const [icons, setIcons] = (0,_wordpress_element__WEBPACK_IMPORTED_MODULE_1__.useState)([]); const rawIcons = (0,_wordpress_data__WEBPACK_IMPORTED_MODULE_0__.useSelect)(select => { const { getIconSet, getIconSets } = select(_stores__WEBPACK_IMPORTED_MODULE_2__.iconStore); if (iconSet) { return getIconSet(iconSet); } return getIconSets(); }, [iconSet]); (0,_wordpress_element__WEBPACK_IMPORTED_MODULE_1__.useEffect)(() => { if (iconSet) { setIcons(transformIcons(rawIcons)); } else { setIcons(Object.values(rawIcons).reduce((rawIcons, iconSet) => [...rawIcons, ...transformIcons(iconSet)], [])); } }, [rawIcons, iconSet]); return icons; }; const useIcon = (iconSet, name) => { return (0,_wordpress_data__WEBPACK_IMPORTED_MODULE_0__.useSelect)(select => { return select(_stores__WEBPACK_IMPORTED_MODULE_2__.iconStore).getIcon(iconSet, name); }, [iconSet, name]); }; /***/ }), /***/ "./stores/icons/actions.ts": /*!*********************************!*\ !*** ./stores/icons/actions.ts ***! \*********************************/ /***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) { __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ registerIconSet: function() { return /* binding */ registerIconSet; }, /* harmony export */ removeIconSet: function() { return /* binding */ removeIconSet; } /* harmony export */ }); /** * Returns an action object used in signalling that new block styles have been added. * * @param {object} iconSet icon set. * * @returns {object} Action object. */ function registerIconSet(iconSet) { return { type: 'REGISTER_ICON_SET', iconSet }; } /** * Returns an action object used in signalling that block styles have been removed. * * @param {string} name Icon Set name. * * @returns {object} Action object. */ function removeIconSet(name) { return { type: 'REMOVE_ICON_SET', name }; } /***/ }), /***/ "./stores/icons/index.ts": /*!*******************************!*\ !*** ./stores/icons/index.ts ***! \*******************************/ /***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) { __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ store: function() { return /* binding */ store; } /* harmony export */ }); /* harmony import */ var _wordpress_data__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @wordpress/data */ "@wordpress/data"); /* harmony import */ var _wordpress_data__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_wordpress_data__WEBPACK_IMPORTED_MODULE_0__); /* harmony import */ var _reducer__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./reducer */ "./stores/icons/reducer.ts"); /* harmony import */ var _selectors__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./selectors */ "./stores/icons/selectors.ts"); /* harmony import */ var _actions__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./actions */ "./stores/icons/actions.ts"); /** * WordPress dependencies */ /** * Internal dependencies */ const STORE_NAME = 'tenup/icons'; /** * Store definition for the icons namespace. * * @type {object} */ const store = (0,_wordpress_data__WEBPACK_IMPORTED_MODULE_0__.createReduxStore)(STORE_NAME, { reducer: _reducer__WEBPACK_IMPORTED_MODULE_1__["default"], selectors: _selectors__WEBPACK_IMPORTED_MODULE_2__, actions: _actions__WEBPACK_IMPORTED_MODULE_3__ }); const hasStore = !!(0,_wordpress_data__WEBPACK_IMPORTED_MODULE_0__.select)(STORE_NAME); if (!hasStore) { (0,_wordpress_data__WEBPACK_IMPORTED_MODULE_0__.register)(store); } /***/ }), /***/ "./stores/icons/reducer.ts": /*!*********************************!*\ !*** ./stores/icons/reducer.ts ***! \*********************************/ /***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) { __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ "default": function() { return /* binding */ reducer; } /* harmony export */ }); /* eslint-disable default-param-last */ /* * Reducer managing the block style variations. */ function reducer(state = { iconSets: {} }, action) { switch (action.type) { case 'REGISTER_ICON_SET': return { ...state, iconSets: { ...state.iconSets, [action.iconSet.name]: action.iconSet } }; case 'REMOVE_ICON_SET': // eslint-disable-next-line no-prototype-builtins if (state.iconSets.hasOwnProperty(action.name)) { const newState = { ...state }; delete newState.iconSets[action.name]; return newState; } return state; default: return state; } } /***/ }), /***/ "./stores/icons/selectors.ts": /*!***********************************!*\ !*** ./stores/icons/selectors.ts ***! \***********************************/ /***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) { __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ getIcon: function() { return /* binding */ getIcon; }, /* harmony export */ getIconSet: function() { return /* binding */ getIconSet; }, /* harmony export */ getIconSets: function() { return /* binding */ getIconSets; }, /* harmony export */ getIcons: function() { return /* binding */ getIcons; } /* harmony export */ }); /* eslint-disable no-prototype-builtins */ /** * Returns all icons sets * * @param {object} state Data state. * * @returns {Array?} Icon Sets. */ function getIconSets(state) { const { iconSets } = state; return Object.values(iconSets); } /** * Returns an Icon Set by its name * * @param {object} state Data state. * @param {string} name Name of the Icon Set. * * @returns {object?} Icon Set. */ function getIconSet(state, name) { const { iconSets } = state; const iconSet = iconSets[name] ?? []; return iconSet; } /** * Returns an icon of an icon set by its name * * @param {object} state Data state. * @param {string} name Name of the Icon Set. * * @returns {Array?} List of Icons. */ function getIcons(state, name) { const { iconSets } = state; return iconSets?.hasOwnProperty(name) ? iconSets[name]?.icons ?? [] : []; } /** * Returns an icon of an icon set by its name * * @param {object} state Data state. * @param {string} name Name of the Icon Set. * @param {string} iconName Name of the iconName. * * @returns {object?} Icon. */ function getIcon(state, name, iconName) { const { iconSets } = state; return iconSets?.hasOwnProperty(name) ? iconSets[name]?.icons?.find(item => item.name === iconName) ?? [] : undefined; } /***/ }), /***/ "./stores/index.ts": /*!*************************!*\ !*** ./stores/index.ts ***! \*************************/ /***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) { __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ iconStore: function() { return /* reexport safe */ _icons__WEBPACK_IMPORTED_MODULE_0__.store; } /* harmony export */ }); /* harmony import */ var _icons__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./icons */ "./stores/icons/index.ts"); /***/ }), /***/ "@emotion/styled": /*!**********************************!*\ !*** external "@emotion/styled" ***! \**********************************/ /***/ (function(module) { module.exports = require("@emotion/styled"); /***/ }), /***/ "@leeoniya/ufuzzy": /*!***********************************!*\ !*** external "@leeoniya/ufuzzy" ***! \***********************************/ /***/ (function(module) { module.exports = require("@leeoniya/ufuzzy"); /***/ }), /***/ "@wordpress/components": /*!****************************************!*\ !*** external "@wordpress/components" ***! \****************************************/ /***/ (function(module) { module.exports = require("@wordpress/components"); /***/ }), /***/ "@wordpress/compose": /*!*************************************!*\ !*** external "@wordpress/compose" ***! \*************************************/ /***/ (function(module) { module.exports = require("@wordpress/compose"); /***/ }), /***/ "@wordpress/data": /*!**********************************!*\ !*** external "@wordpress/data" ***! \**********************************/ /***/ (function(module) { module.exports = require("@wordpress/data"); /***/ }), /***/ "@wordpress/element": /*!*************************************!*\ !*** external "@wordpress/element" ***! \*************************************/ /***/ (function(module) { module.exports = require("@wordpress/element"); /***/ }), /***/ "@wordpress/i18n": /*!**********************************!*\ !*** external "@wordpress/i18n" ***! \**********************************/ /***/ (function(module) { module.exports = require("@wordpress/i18n"); /***/ }), /***/ "react-window": /*!*******************************!*\ !*** external "react-window" ***! \*******************************/ /***/ (function(module) { module.exports = require("react-window"); /***/ }) /******/ }); /************************************************************************/ /******/ // The module cache /******/ var __webpack_module_cache__ = {}; /******/ /******/ // The require function /******/ function __webpack_require__(moduleId) { /******/ // Check if module is in cache /******/ var cachedModule = __webpack_module_cache__[moduleId]; /******/ if (cachedModule !== undefined) { /******/ return cachedModule.exports; /******/ } /******/ // Create a new module (and put it into the cache) /******/ var module = __webpack_module_cache__[moduleId] = { /******/ // no module.id needed /******/ // no module.loaded needed /******/ exports: {} /******/ }; /******/ /******/ // Execute the module function /******/ __webpack_modules__[moduleId](module, module.exports, __webpack_require__); /******/ /******/ // Return the exports of the module /******/ return module.exports; /******/ } /******/ /************************************************************************/ /******/ /* webpack/runtime/compat get default export */ /******/ !function() { /******/ // getDefaultExport function for compatibility with non-harmony modules /******/ __webpack_require__.n = function(module) { /******/ var getter = module && module.__esModule ? /******/ function() { return module['default']; } : /******/ function() { return module; }; /******/ __webpack_require__.d(getter, { a: getter }); /******/ return getter; /******/ }; /******/ }(); /******/ /******/ /* webpack/runtime/define property getters */ /******/ !function() { /******/ // define getter functions for harmony exports /******/ __webpack_require__.d = function(exports, definition) { /******/ for(var key in definition) { /******/ if(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) { /******/ Object.defineProperty(exports, key, { enumerable: true, get: definition[key] }); /******/ } /******/ } /******/ }; /******/ }(); /******/ /******/ /* webpack/runtime/hasOwnProperty shorthand */ /******/ !function() { /******/ __webpack_require__.o = function(obj, prop) { return Object.prototype.hasOwnProperty.call(obj, prop); } /******/ }(); /******/ /******/ /* webpack/runtime/make namespace object */ /******/ !function() { /******/ // define __esModule on exports /******/ __webpack_require__.r = function(exports) { /******/ if(typeof Symbol !== 'undefined' && Symbol.toStringTag) { /******/ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' }); /******/ } /******/ Object.defineProperty(exports, '__esModule', { value: true }); /******/ }; /******/ }(); /******/ /************************************************************************/ var __webpack_exports__ = {}; // This entry needs to be wrapped in an IIFE because it needs to be isolated against other modules in the chunk. !function() { /*!******************************************!*\ !*** ./components/icon-picker/index.tsx ***! \******************************************/ __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ Icon: function() { return /* reexport safe */ _icon__WEBPACK_IMPORTED_MODULE_0__.Icon; }, /* harmony export */ IconPicker: function() { return /* reexport safe */ _icon_picker__WEBPACK_IMPORTED_MODULE_1__.IconPicker; }, /* harmony export */ IconPickerToolbarButton: function() { return /* reexport safe */ _icon_picker_toolbar_button__WEBPACK_IMPORTED_MODULE_2__.IconPickerToolbarButton; }, /* harmony export */ InlineIconPicker: function() { return /* reexport safe */ _inline_icon_picker__WEBPACK_IMPORTED_MODULE_3__.InlineIconPicker; } /* harmony export */ }); /* harmony import */ var _icon__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./icon */ "./components/icon-picker/icon.tsx"); /* harmony import */ var _icon_picker__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./icon-picker */ "./components/icon-picker/icon-picker.tsx"); /* harmony import */ var _icon_picker_toolbar_button__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./icon-picker-toolbar-button */ "./components/icon-picker/icon-picker-toolbar-button.tsx"); /* harmony import */ var _inline_icon_picker__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./inline-icon-picker */ "./components/icon-picker/inline-icon-picker.tsx"); }(); module.exports = __webpack_exports__; /******/ })() ; //# sourceMappingURL=index.js.map