Making WordPress.org

Changeset 10924


Ignore:
Timestamp:
04/26/2021 05:12:15 PM (4 years ago)
Author:
ryelle
Message:

Pattern Directory: Sync with git WordPress/pattern-directory@1c878592553a9dcc8f4f2c8cde05952436fe3f46

Location:
sites/trunk/wordpress.org/public_html/wp-content/themes/pub/wporg-patterns
Files:
24 added
1 deleted
24 edited

Legend:

Unmodified
Added
Removed
  • sites/trunk/wordpress.org/public_html/wp-content/themes/pub/wporg-patterns/build/index.asset.php

    r10882 r10924  
    1 <?php return array('dependencies' => array('react', 'wp-block-editor', 'wp-components', 'wp-compose', 'wp-core-data', 'wp-data', 'wp-data-controls', 'wp-element', 'wp-i18n', 'wp-keycodes', 'wp-polyfill', 'wp-primitives', 'wp-url', 'wp-viewport'), 'version' => 'eda2ea80abd191600bd93201136beaf6');
     1<?php return array('dependencies' => array('react', 'wp-block-editor', 'wp-components', 'wp-compose', 'wp-data', 'wp-data-controls', 'wp-element', 'wp-i18n', 'wp-keycodes', 'wp-polyfill', 'wp-primitives', 'wp-url', 'wp-viewport'), 'version' => '47d0699f3951f1009351fbc4a9fef0da');
  • sites/trunk/wordpress.org/public_html/wp-content/themes/pub/wporg-patterns/build/index.js

    r10882 r10924  
    1059610596/***/ }),
    1059710597
     10598/***/ "./src/components/add-to-favorite-button/index.js":
     10599/*!********************************************************!*\
     10600  !*** ./src/components/add-to-favorite-button/index.js ***!
     10601  \********************************************************/
     10602/*! exports provided: default */
     10603/***/ (function(module, __webpack_exports__, __webpack_require__) {
     10604
     10605"use strict";
     10606__webpack_require__.r(__webpack_exports__);
     10607/* harmony import */ var _wordpress_element__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @wordpress/element */ "@wordpress/element");
     10608/* harmony import */ var _wordpress_element__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_wordpress_element__WEBPACK_IMPORTED_MODULE_0__);
     10609/* harmony import */ var _wordpress_i18n__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @wordpress/i18n */ "@wordpress/i18n");
     10610/* harmony import */ var _wordpress_i18n__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_wordpress_i18n__WEBPACK_IMPORTED_MODULE_1__);
     10611
     10612
     10613/**
     10614 * External dependencies
     10615 */
     10616
     10617
     10618var AddToFavoriteButton = function AddToFavoriteButton() {
     10619  return Object(_wordpress_element__WEBPACK_IMPORTED_MODULE_0__["createElement"])("button", {
     10620    className: "button"
     10621  }, Object(_wordpress_i18n__WEBPACK_IMPORTED_MODULE_1__["__"])('Add to favorites', 'wporg-patterns'));
     10622};
     10623
     10624/* harmony default export */ __webpack_exports__["default"] = (AddToFavoriteButton);
     10625
     10626/***/ }),
     10627
    1059810628/***/ "./src/components/category-context-bar/index.js":
    1059910629/*!******************************************************!*\
     
    1060910639/* harmony import */ var _wordpress_element__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @wordpress/element */ "@wordpress/element");
    1061010640/* harmony import */ var _wordpress_element__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_wordpress_element__WEBPACK_IMPORTED_MODULE_1__);
    10611 
    10612 
    10613 
    10614 /**
    10615  * External dependencies
    10616  */
    10617 
    10618 
    10619 function CategoryContextBar(_ref) {
    10620   var message = _ref.message,
    10621       title = _ref.title,
    10622       links = _ref.links;
     10641/* harmony import */ var _wordpress_data__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @wordpress/data */ "@wordpress/data");
     10642/* harmony import */ var _wordpress_data__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_wordpress_data__WEBPACK_IMPORTED_MODULE_2__);
     10643/* harmony import */ var _wordpress_url__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @wordpress/url */ "@wordpress/url");
     10644/* harmony import */ var _wordpress_url__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(_wordpress_url__WEBPACK_IMPORTED_MODULE_3__);
     10645/* harmony import */ var _hooks__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../../hooks */ "./src/hooks/index.js");
     10646/* harmony import */ var _utils__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../../utils */ "./src/utils/index.js");
     10647/* harmony import */ var _messaging__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./messaging */ "./src/components/category-context-bar/messaging.js");
     10648/* harmony import */ var _store__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../../store */ "./src/store/index.js");
     10649
     10650
     10651
     10652/**
     10653 * WordPress dependencies
     10654 */
     10655
     10656
     10657
     10658/**
     10659 * Internal dependencies
     10660 */
     10661
     10662
     10663
     10664
     10665
     10666
     10667function CategoryContextBar() {
     10668  var _useRoute = Object(_hooks__WEBPACK_IMPORTED_MODULE_4__["useRoute"])(),
     10669      path = _useRoute.path;
    1062310670
    1062410671  var _useState = Object(_wordpress_element__WEBPACK_IMPORTED_MODULE_1__["useState"])(0),
     
    1062710674      setHeight = _useState2[1];
    1062810675
     10676  var _useState3 = Object(_wordpress_element__WEBPACK_IMPORTED_MODULE_1__["useState"])({}),
     10677      _useState4 = _babel_runtime_helpers_slicedToArray__WEBPACK_IMPORTED_MODULE_0___default()(_useState3, 2),
     10678      context = _useState4[0],
     10679      setContext = _useState4[1];
     10680
    1062910681  var innerRef = Object(_wordpress_element__WEBPACK_IMPORTED_MODULE_1__["useRef"])(null);
     10682
     10683  var _useSelect = Object(_wordpress_data__WEBPACK_IMPORTED_MODULE_2__["useSelect"])(function (select) {
     10684    var _select = select(_store__WEBPACK_IMPORTED_MODULE_7__["store"]),
     10685        getCategoryBySlug = _select.getCategoryBySlug,
     10686        getPatternsByQuery = _select.getPatternsByQuery,
     10687        isLoadingPatternsByQuery = _select.isLoadingPatternsByQuery,
     10688        getCurrentQuery = _select.getCurrentQuery;
     10689
     10690    var categorySlug = Object(_utils__WEBPACK_IMPORTED_MODULE_5__["getCategoryFromPath"])(path);
     10691
     10692    var _category = getCategoryBySlug(categorySlug);
     10693
     10694    var query = getCurrentQuery();
     10695    return {
     10696      isAllCategory: _category && _category.id === -1,
     10697      isLoadingPatterns: isLoadingPatternsByQuery(query),
     10698      patterns: query ? getPatternsByQuery(query) : [],
     10699      category: _category
     10700    };
     10701  }, [path]),
     10702      isAllCategory = _useSelect.isAllCategory,
     10703      category = _useSelect.category,
     10704      isLoadingPatterns = _useSelect.isLoadingPatterns,
     10705      patterns = _useSelect.patterns;
     10706
    1063010707  Object(_wordpress_element__WEBPACK_IMPORTED_MODULE_1__["useEffect"])(function () {
    10631     if (message) {
    10632       setHeight(innerRef.current.offsetHeight);
    10633     } else {
    10634       setHeight(0);
     10708    if (!category || isLoadingPatterns) {
     10709      return;
    1063510710    }
    10636   }, [message]);
     10711
     10712    var searchTerm = Object(_wordpress_url__WEBPACK_IMPORTED_MODULE_3__["getQueryArg"])(path, 'search');
     10713    var _context = {}; // Use the category count as default since it has the count of all the associated patterns
     10714
     10715    var count = category.count; // If we have a search term use the pattern results length.
     10716    // Not: This is okay until we start using paging.
     10717
     10718    if (searchTerm) {
     10719      count = patterns.length;
     10720    }
     10721
     10722    if (!isAllCategory || searchTerm) {
     10723      _context = Object(_messaging__WEBPACK_IMPORTED_MODULE_6__["getContextMessage"])(count, category.name, searchTerm);
     10724    }
     10725
     10726    setContext(_context);
     10727  }, [category, isLoadingPatterns, patterns]);
     10728  Object(_wordpress_element__WEBPACK_IMPORTED_MODULE_1__["useEffect"])(function () {
     10729    var _height = context.message ? innerRef.current.offsetHeight : 0;
     10730
     10731    setHeight(_height);
     10732  }, [context.message]);
    1063710733  return Object(_wordpress_element__WEBPACK_IMPORTED_MODULE_1__["createElement"])("header", {
    1063810734    className: "category-context__bar",
     
    1064410740  }, Object(_wordpress_element__WEBPACK_IMPORTED_MODULE_1__["createElement"])("h2", {
    1064510741    className: "category-context__bar__copy"
    10646   }, message), links && links.length > 0 && Object(_wordpress_element__WEBPACK_IMPORTED_MODULE_1__["createElement"])("div", {
     10742  }, context.message), context.links && context.links.length > 0 && Object(_wordpress_element__WEBPACK_IMPORTED_MODULE_1__["createElement"])("div", {
    1064710743    className: "category-context__bar__links"
    1064810744  }, Object(_wordpress_element__WEBPACK_IMPORTED_MODULE_1__["createElement"])("h3", {
    1064910745    className: "category-context__bar__title"
    10650   }, title), Object(_wordpress_element__WEBPACK_IMPORTED_MODULE_1__["createElement"])("ul", null, links.map(function (i) {
     10746  }, context.title), Object(_wordpress_element__WEBPACK_IMPORTED_MODULE_1__["createElement"])("ul", null, context.links.map(function (i) {
    1065110747    return Object(_wordpress_element__WEBPACK_IMPORTED_MODULE_1__["createElement"])("li", {
    1065210748      key: i.href
     
    1066110757/***/ }),
    1066210758
     10759/***/ "./src/components/category-context-bar/messaging.js":
     10760/*!**********************************************************!*\
     10761  !*** ./src/components/category-context-bar/messaging.js ***!
     10762  \**********************************************************/
     10763/*! exports provided: getContextMessage */
     10764/***/ (function(module, __webpack_exports__, __webpack_require__) {
     10765
     10766"use strict";
     10767__webpack_require__.r(__webpack_exports__);
     10768/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "getContextMessage", function() { return getContextMessage; });
     10769/* harmony import */ var _wordpress_element__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @wordpress/element */ "@wordpress/element");
     10770/* harmony import */ var _wordpress_element__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_wordpress_element__WEBPACK_IMPORTED_MODULE_0__);
     10771/* harmony import */ var _wordpress_i18n__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @wordpress/i18n */ "@wordpress/i18n");
     10772/* harmony import */ var _wordpress_i18n__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_wordpress_i18n__WEBPACK_IMPORTED_MODULE_1__);
     10773
     10774
     10775/**
     10776 * WordPress dependencies
     10777 */
     10778
     10779
     10780/**
     10781 * Returns an object with extra information about the category.
     10782 *
     10783 * @param {number} count Number of patterns associated to the category.
     10784 * @param {string} categoryName The category name.
     10785 * @param {string|void} searchTerm The search term.
     10786 * @return {Object}
     10787 */
     10788
     10789var getContextMessage = function getContextMessage(count, categoryName, searchTerm) {
     10790  var message = Object(_wordpress_i18n__WEBPACK_IMPORTED_MODULE_1__["sprintf"])(
     10791  /* translators: %1$d: number of patterns. %2$s category name. */
     10792  Object(_wordpress_i18n__WEBPACK_IMPORTED_MODULE_1__["_n"])('%1$d <b>%2$s</b> pattern.', '%1$d <b>%2$s</b> patterns.', count, 'wporg-patterns'), count, categoryName.toLowerCase(), 'wporg-patterns');
     10793
     10794  if (searchTerm) {
     10795    if (categoryName !== 'All') {
     10796      message = Object(_wordpress_i18n__WEBPACK_IMPORTED_MODULE_1__["sprintf"])(
     10797      /* translators: %1$d: number of patterns. %2$s category name. %3$s search term  */
     10798      Object(_wordpress_i18n__WEBPACK_IMPORTED_MODULE_1__["_n"])('%1$d <b>%2$s</b> pattern matching "<b>%3$s</b>".', '%1$d <b>%2$s</b> patterns matching "<b>%3$s</b>".', count, 'wporg-patterns'), count, categoryName.toLowerCase(), searchTerm, 'wporg-patterns');
     10799    } else {
     10800      message = Object(_wordpress_i18n__WEBPACK_IMPORTED_MODULE_1__["sprintf"])(
     10801      /* translators: %1$d: number of patterns. %2$s search term.  */
     10802      Object(_wordpress_i18n__WEBPACK_IMPORTED_MODULE_1__["_n"])('%1$d pattern matching "<b>%2$s</b>".', '%1$d patterns matching "<b>%2$s</b>".', count, 'wporg-patterns'), count, searchTerm, 'wporg-patterns');
     10803    }
     10804  }
     10805
     10806  return {
     10807    message: Object(_wordpress_element__WEBPACK_IMPORTED_MODULE_0__["createInterpolateElement"])(message, {
     10808      b: Object(_wordpress_element__WEBPACK_IMPORTED_MODULE_0__["createElement"])("b", null)
     10809    }),
     10810    // TODO Fetch these from somewhere
     10811    title: '',
     10812    links: []
     10813  };
     10814};
     10815
     10816/***/ }),
     10817
    1066310818/***/ "./src/components/category-menu/default.js":
    1066410819/*!*************************************************!*\
     
    1069910854  var path = _ref2.path,
    1070010855      options = _ref2.options,
    10701       _onClick = _ref2.onClick,
     10856      onClick = _ref2.onClick,
    1070210857      isLoading = _ref2.isLoading;
    1070310858  var containerRef = Object(_wordpress_element__WEBPACK_IMPORTED_MODULE_0__["useRef"])(null);
     
    1071410869      height: activeRef.current.offsetHeight
    1071510870    });
    10716   }, [containerRef, activeRef, path]);
     10871  });
    1071710872
    1071810873  if (!isLoading && !options.length) {
     
    1072410879    ref: containerRef
    1072510880  }, options.map(function (i) {
     10881    var isActive = path === i.value;
    1072610882    return Object(_wordpress_element__WEBPACK_IMPORTED_MODULE_0__["createElement"])("li", {
    1072710883      key: i.value
    1072810884    }, Object(_wordpress_element__WEBPACK_IMPORTED_MODULE_0__["createElement"])("a", {
    10729       className: path === i.value ? 'category-menu--is-active' : '',
     10885      className: isActive ? 'category-menu--is-active' : '',
    1073010886      href: i.value,
    10731       ref: path === i.value ? activeRef : null,
    10732       onClick: function onClick(_ref3) {
    10733         var target = _ref3.target;
    10734         return _onClick(target.hash);
    10735       }
     10887      ref: isActive ? activeRef : null,
     10888      onClick: onClick
    1073610889    }, i.label));
    1073710890  }));
     
    1082410977    }, Object(_wordpress_element__WEBPACK_IMPORTED_MODULE_1__["createElement"])("a", {
    1082510978      href: i.value,
    10826       onClick: function onClick() {
     10979      onClick: function onClick(event) {
    1082710980        setIsOpen(false);
    1082810981
    10829         _onClick(i.value);
     10982        _onClick(event);
    1083010983      }
    1083110984    }, i.label));
     
    1086111014
    1086211015var CategorySearch = function CategorySearch(_ref) {
    10863   var isLoading = _ref.isLoading;
     11016  var defaultValue = _ref.defaultValue,
     11017      isLoading = _ref.isLoading,
     11018      isVisible = _ref.isVisible,
     11019      onUpdate = _ref.onUpdate,
     11020      onSubmit = _ref.onSubmit;
    1086411021
    1086511022  if (isLoading) {
     
    1086911026  }
    1087011027
     11028  if (!isVisible) {
     11029    return null;
     11030  }
     11031
    1087111032  return Object(_wordpress_element__WEBPACK_IMPORTED_MODULE_0__["createElement"])("form", {
    1087211033    method: "get",
    1087311034    action: "/",
    10874     className: "category-search"
     11035    className: "category-search",
     11036    onSubmit: onSubmit
    1087511037  }, Object(_wordpress_element__WEBPACK_IMPORTED_MODULE_0__["createElement"])("label", {
    1087611038    htmlFor: "pattern-search",
    1087711039    className: "screen-reader-text"
    1087811040  }, Object(_wordpress_i18n__WEBPACK_IMPORTED_MODULE_1__["__"])('Search for:', 'wporg-patterns')), Object(_wordpress_element__WEBPACK_IMPORTED_MODULE_0__["createElement"])("input", {
     11041    onChange: onUpdate,
     11042    defaultValue: defaultValue,
    1087911043    id: "pattern-search",
    1088011044    type: "search",
    1088111045    placeholder: Object(_wordpress_i18n__WEBPACK_IMPORTED_MODULE_1__["__"])('Search patterns', 'wporg-patterns')
    1088211046  }), Object(_wordpress_element__WEBPACK_IMPORTED_MODULE_0__["createElement"])("button", {
     11047    type: "submit",
    1088311048    className: "category-search__button"
    1088411049  }, Object(_wordpress_element__WEBPACK_IMPORTED_MODULE_0__["createElement"])("span", {
     
    1089011055
    1089111056/* harmony default export */ __webpack_exports__["default"] = (CategorySearch);
     11057
     11058/***/ }),
     11059
     11060/***/ "./src/components/copy-pattern-button/index.js":
     11061/*!*****************************************************!*\
     11062  !*** ./src/components/copy-pattern-button/index.js ***!
     11063  \*****************************************************/
     11064/*! exports provided: default */
     11065/***/ (function(module, __webpack_exports__, __webpack_require__) {
     11066
     11067"use strict";
     11068__webpack_require__.r(__webpack_exports__);
     11069/* harmony import */ var _wordpress_element__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @wordpress/element */ "@wordpress/element");
     11070/* harmony import */ var _wordpress_element__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_wordpress_element__WEBPACK_IMPORTED_MODULE_0__);
     11071/* harmony import */ var _wordpress_i18n__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @wordpress/i18n */ "@wordpress/i18n");
     11072/* harmony import */ var _wordpress_i18n__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_wordpress_i18n__WEBPACK_IMPORTED_MODULE_1__);
     11073/* harmony import */ var _wordpress_components__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @wordpress/components */ "@wordpress/components");
     11074/* harmony import */ var _wordpress_components__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_wordpress_components__WEBPACK_IMPORTED_MODULE_2__);
     11075
     11076
     11077/**
     11078 * External dependencies
     11079 */
     11080
     11081
     11082/**
     11083 * Uses a hidden textarea that is added and removed from the DOM in order to copy to clipboard via the Browser.
     11084 *
     11085 * @param {string} stringToCopy A string that will be copied to the clipboard
     11086 * @return {boolean} Whether the copy function succeeded
     11087 */
     11088
     11089var copyToClipboard = function copyToClipboard(stringToCopy) {
     11090  var element = document.createElement('textarea'); // We don't want the text area to be selected since it's temporary.
     11091
     11092  element.setAttribute('readonly', ''); // We don't want the text area to be visible since it's temporary.
     11093
     11094  element.style.position = 'absolute';
     11095  element.style.left = '-9999px';
     11096  element.value = stringToCopy;
     11097  document.body.appendChild(element);
     11098  element.select();
     11099  var success = document.execCommand('copy');
     11100  document.body.removeChild(element);
     11101  return success;
     11102};
     11103
     11104var CopyPatternButton = function CopyPatternButton(_ref) {
     11105  var onSuccess = _ref.onSuccess;
     11106
     11107  var handleClick = function handleClick(_ref2) {
     11108    var target = _ref2.target;
     11109    // Grab the pattern markup from hidden input
     11110    var blockData = document.getElementById('block-data');
     11111    var blockPattern = JSON.parse(decodeURIComponent(blockData.value));
     11112    var success = copyToClipboard(blockPattern); // Make sure we reset focus in case it was lost in the 'copy' command.
     11113
     11114    target.focus();
     11115
     11116    if (success) {
     11117      onSuccess();
     11118    } else {// TODO Handle error case
     11119    }
     11120  };
     11121
     11122  return Object(_wordpress_element__WEBPACK_IMPORTED_MODULE_0__["createElement"])(_wordpress_components__WEBPACK_IMPORTED_MODULE_2__["Button"], {
     11123    isPrimary: true,
     11124    onClick: handleClick
     11125  }, Object(_wordpress_i18n__WEBPACK_IMPORTED_MODULE_1__["__"])('Copy Pattern', 'wporg-patterns'));
     11126};
     11127
     11128/* harmony default export */ __webpack_exports__["default"] = (CopyPatternButton);
    1089211129
    1089311130/***/ }),
     
    1116611403"use strict";
    1116711404__webpack_require__.r(__webpack_exports__);
    11168 /* harmony import */ var _babel_runtime_helpers_slicedToArray__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/slicedToArray */ "../../../../node_modules/@babel/runtime/helpers/slicedToArray.js");
    11169 /* harmony import */ var _babel_runtime_helpers_slicedToArray__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_slicedToArray__WEBPACK_IMPORTED_MODULE_0__);
    11170 /* harmony import */ var _wordpress_element__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @wordpress/element */ "@wordpress/element");
    11171 /* harmony import */ var _wordpress_element__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_wordpress_element__WEBPACK_IMPORTED_MODULE_1__);
    11172 /* harmony import */ var _wordpress_core_data__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @wordpress/core-data */ "@wordpress/core-data");
    11173 /* harmony import */ var _wordpress_core_data__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_wordpress_core_data__WEBPACK_IMPORTED_MODULE_2__);
    11174 /* harmony import */ var _wordpress_data__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @wordpress/data */ "@wordpress/data");
    11175 /* harmony import */ var _wordpress_data__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(_wordpress_data__WEBPACK_IMPORTED_MODULE_3__);
    11176 /* harmony import */ var _wordpress_url__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @wordpress/url */ "@wordpress/url");
    11177 /* harmony import */ var _wordpress_url__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(_wordpress_url__WEBPACK_IMPORTED_MODULE_4__);
    11178 /* harmony import */ var _category_menu__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../category-menu */ "./src/components/category-menu/index.js");
    11179 /* harmony import */ var _category_search__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../category-search */ "./src/components/category-search/index.js");
    11180 /* harmony import */ var _category_context_bar__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../category-context-bar */ "./src/components/category-context-bar/index.js");
    11181 /* harmony import */ var _messaging__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./messaging */ "./src/components/pattern-grid-menu/messaging.js");
    11182 
    11183 
    11184 
    11185 /**
    11186  * External dependencies
    11187  */
    11188 
     11405/* harmony import */ var _wordpress_element__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @wordpress/element */ "@wordpress/element");
     11406/* harmony import */ var _wordpress_element__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_wordpress_element__WEBPACK_IMPORTED_MODULE_0__);
     11407/* harmony import */ var _wordpress_compose__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @wordpress/compose */ "@wordpress/compose");
     11408/* harmony import */ var _wordpress_compose__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_wordpress_compose__WEBPACK_IMPORTED_MODULE_1__);
     11409/* harmony import */ var _wordpress_data__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @wordpress/data */ "@wordpress/data");
     11410/* harmony import */ var _wordpress_data__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_wordpress_data__WEBPACK_IMPORTED_MODULE_2__);
     11411/* harmony import */ var _wordpress_url__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @wordpress/url */ "@wordpress/url");
     11412/* harmony import */ var _wordpress_url__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(_wordpress_url__WEBPACK_IMPORTED_MODULE_3__);
     11413/* harmony import */ var _category_menu__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../category-menu */ "./src/components/category-menu/index.js");
     11414/* harmony import */ var _category_search__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../category-search */ "./src/components/category-search/index.js");
     11415/* harmony import */ var _category_context_bar__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../category-context-bar */ "./src/components/category-context-bar/index.js");
     11416/* harmony import */ var _store__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../../store */ "./src/store/index.js");
     11417/* harmony import */ var _hooks__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ../../hooks */ "./src/hooks/index.js");
     11418/* harmony import */ var _utils__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ../../utils */ "./src/utils/index.js");
     11419
     11420
     11421/**
     11422 * WordPress dependencies
     11423 */
    1118911424
    1119011425
     
    1119811433
    1119911434
     11435
     11436
    1120011437/**
    1120111438 * Module constants
    1120211439 */
    1120311440
    11204 var PATTERN_TAXONOMY = 'wporg-pattern-category';
     11441var DEBOUNCE_MS = 300;
    1120511442
    1120611443var PatternGridMenu = function PatternGridMenu() {
    11207   // Show loading state
    11208   var _useState = Object(_wordpress_element__WEBPACK_IMPORTED_MODULE_1__["useState"])(true),
    11209       _useState2 = _babel_runtime_helpers_slicedToArray__WEBPACK_IMPORTED_MODULE_0___default()(_useState, 2),
    11210       showLoading = _useState2[0],
    11211       setShowLoading = _useState2[1];
    11212 
    11213   var _useState3 = Object(_wordpress_element__WEBPACK_IMPORTED_MODULE_1__["useState"])(false),
    11214       _useState4 = _babel_runtime_helpers_slicedToArray__WEBPACK_IMPORTED_MODULE_0___default()(_useState3, 2),
    11215       isFetching = _useState4[0],
    11216       setIsFetching = _useState4[1];
    11217 
    11218   var _useState5 = Object(_wordpress_element__WEBPACK_IMPORTED_MODULE_1__["useState"])(),
    11219       _useState6 = _babel_runtime_helpers_slicedToArray__WEBPACK_IMPORTED_MODULE_0___default()(_useState5, 2),
    11220       path = _useState6[0],
    11221       setPath = _useState6[1];
    11222 
    11223   var _useState7 = Object(_wordpress_element__WEBPACK_IMPORTED_MODULE_1__["useState"])(undefined),
    11224       _useState8 = _babel_runtime_helpers_slicedToArray__WEBPACK_IMPORTED_MODULE_0___default()(_useState7, 2),
    11225       categoryContext = _useState8[0],
    11226       setCategoryContext = _useState8[1];
    11227 
    11228   var categories = Object(_wordpress_data__WEBPACK_IMPORTED_MODULE_3__["useSelect"])(function (select) {
    11229     return select(_wordpress_core_data__WEBPACK_IMPORTED_MODULE_2__["store"]).getEntityRecords('taxonomy', PATTERN_TAXONOMY);
    11230   });
    11231   Object(_wordpress_element__WEBPACK_IMPORTED_MODULE_1__["useEffect"])(function () {
    11232     var pathOnLoad = Object(_wordpress_url__WEBPACK_IMPORTED_MODULE_4__["getPath"])(window.location.href);
    11233     setPath(pathOnLoad);
    11234   }, []);
    11235   Object(_wordpress_element__WEBPACK_IMPORTED_MODULE_1__["useEffect"])(function () {
    11236     // Since categories starts as an [] then switches to null
    11237     if (showLoading && categories === null) {
    11238       setIsFetching(true);
    11239     }
    11240 
    11241     if (isFetching && Array.isArray(categories)) {
    11242       setShowLoading(false);
    11243       setIsFetching(false);
    11244     }
    11245   }, [isFetching, categories]);
    11246   Object(_wordpress_element__WEBPACK_IMPORTED_MODULE_1__["useEffect"])(function () {
    11247     setCategoryContext(_messaging__WEBPACK_IMPORTED_MODULE_8__["default"][path]);
    11248   }, [path]);
    11249   return Object(_wordpress_element__WEBPACK_IMPORTED_MODULE_1__["createElement"])(_wordpress_element__WEBPACK_IMPORTED_MODULE_1__["Fragment"], null, Object(_wordpress_element__WEBPACK_IMPORTED_MODULE_1__["createElement"])("nav", {
     11444  var _useRoute = Object(_hooks__WEBPACK_IMPORTED_MODULE_8__["useRoute"])(),
     11445      path = _useRoute.path,
     11446      updatePath = _useRoute.update;
     11447
     11448  var _useSelect = Object(_wordpress_data__WEBPACK_IMPORTED_MODULE_2__["useSelect"])(function (select) {
     11449    var _select = select(_store__WEBPACK_IMPORTED_MODULE_7__["store"]),
     11450        getCategories = _select.getCategories,
     11451        isLoadingCategories = _select.isLoadingCategories,
     11452        hasLoadedCategories = _select.hasLoadedCategories;
     11453
     11454    return {
     11455      categories: getCategories(),
     11456      isLoading: isLoadingCategories(),
     11457      hasLoaded: hasLoadedCategories()
     11458    };
     11459  }),
     11460      categories = _useSelect.categories,
     11461      isLoading = _useSelect.isLoading,
     11462      hasLoaded = _useSelect.hasLoaded;
     11463
     11464  var handleUpdatePath = function handleUpdatePath(value) {
     11465    var updatedPath = Object(_wordpress_url__WEBPACK_IMPORTED_MODULE_3__["addQueryArgs"])(path, {
     11466      search: value
     11467    });
     11468    updatePath(updatedPath);
     11469  };
     11470
     11471  var debouncedHandleUpdate = Object(_wordpress_compose__WEBPACK_IMPORTED_MODULE_1__["useDebounce"])(handleUpdatePath, DEBOUNCE_MS);
     11472  return Object(_wordpress_element__WEBPACK_IMPORTED_MODULE_0__["createElement"])(_wordpress_element__WEBPACK_IMPORTED_MODULE_0__["Fragment"], null, Object(_wordpress_element__WEBPACK_IMPORTED_MODULE_0__["createElement"])("nav", {
    1125011473    className: "pattern-grid-menu"
    11251   }, Object(_wordpress_element__WEBPACK_IMPORTED_MODULE_1__["createElement"])(_category_menu__WEBPACK_IMPORTED_MODULE_5__["default"], {
    11252     path: path,
     11474  }, Object(_wordpress_element__WEBPACK_IMPORTED_MODULE_0__["createElement"])(_category_menu__WEBPACK_IMPORTED_MODULE_4__["default"], {
     11475    path: Object(_utils__WEBPACK_IMPORTED_MODULE_9__["removeQueryString"])(path),
    1125311476    options: categories ? categories.map(function (record) {
    1125411477      return {
    11255         // TODO: This url is temporary and won't use the # symbol
    11256         value: "#/pattern-categories/".concat(record.slug),
     11478        value: "/".concat(Object(_wordpress_url__WEBPACK_IMPORTED_MODULE_3__["getPath"])(record.link) || ''),
    1125711479        label: record.name
    1125811480      };
    1125911481    }) : [],
    11260     onClick: function onClick(_path) {
    11261       return setPath(_path);
     11482    onClick: function onClick(event) {
     11483      event.preventDefault();
     11484      updatePath(event.target.pathname);
    1126211485    },
    11263     isLoading: showLoading
    11264   }), Object(_wordpress_element__WEBPACK_IMPORTED_MODULE_1__["createElement"])(_category_search__WEBPACK_IMPORTED_MODULE_6__["default"], {
    11265     isLoading: showLoading
    11266   })), Object(_wordpress_element__WEBPACK_IMPORTED_MODULE_1__["createElement"])(_category_context_bar__WEBPACK_IMPORTED_MODULE_7__["default"], categoryContext));
     11486    isLoading: isLoading
     11487  }), Object(_wordpress_element__WEBPACK_IMPORTED_MODULE_0__["createElement"])(_category_search__WEBPACK_IMPORTED_MODULE_5__["default"], {
     11488    isLoading: isLoading,
     11489    isVisible: hasLoaded,
     11490    defaultValue: Object(_wordpress_url__WEBPACK_IMPORTED_MODULE_3__["getQueryArg"])(window.location.href, 'search'),
     11491    onUpdate: function onUpdate(event) {
     11492      event.preventDefault();
     11493      debouncedHandleUpdate(event.target.value);
     11494    },
     11495    onSubmit: function onSubmit(event) {
     11496      event.preventDefault();
     11497      debouncedHandleUpdate(event.target.elements[0].value);
     11498    }
     11499  })), Object(_wordpress_element__WEBPACK_IMPORTED_MODULE_0__["createElement"])(_category_context_bar__WEBPACK_IMPORTED_MODULE_6__["default"], null));
    1126711500};
    1126811501
    1126911502/* harmony default export */ __webpack_exports__["default"] = (PatternGridMenu);
    11270 
    11271 /***/ }),
    11272 
    11273 /***/ "./src/components/pattern-grid-menu/messaging.js":
    11274 /*!*******************************************************!*\
    11275   !*** ./src/components/pattern-grid-menu/messaging.js ***!
    11276   \*******************************************************/
    11277 /*! exports provided: default */
    11278 /***/ (function(module, __webpack_exports__, __webpack_require__) {
    11279 
    11280 "use strict";
    11281 __webpack_require__.r(__webpack_exports__);
    11282 /* harmony import */ var _wordpress_element__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @wordpress/element */ "@wordpress/element");
    11283 /* harmony import */ var _wordpress_element__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_wordpress_element__WEBPACK_IMPORTED_MODULE_0__);
    11284 
    11285 /* harmony default export */ __webpack_exports__["default"] = ({
    11286   '#/pattern-categories/header': {
    11287     message: Object(_wordpress_element__WEBPACK_IMPORTED_MODULE_0__["createElement"])(_wordpress_element__WEBPACK_IMPORTED_MODULE_0__["Fragment"], null, "45 ", Object(_wordpress_element__WEBPACK_IMPORTED_MODULE_0__["createElement"])("b", null, "Header"), " patterns"),
    11288     title: 'Related Categories',
    11289     links: [{
    11290       href: '/pattern-categories/media',
    11291       label: 'Media'
    11292     }, {
    11293       href: '/pattern-categories/blog',
    11294       label: 'blog'
    11295     }]
    11296   },
    11297   '#/pattern-categories/footer': {
    11298     message: Object(_wordpress_element__WEBPACK_IMPORTED_MODULE_0__["createElement"])(_wordpress_element__WEBPACK_IMPORTED_MODULE_0__["Fragment"], null, "23 ", Object(_wordpress_element__WEBPACK_IMPORTED_MODULE_0__["createElement"])("b", null, "Footer"), " patterns that is a very long sentence to check for something."),
    11299     title: 'Related Categories',
    11300     links: [{
    11301       href: '/pattern-categories/media',
    11302       label: 'Media'
    11303     }, {
    11304       href: '/pattern-categories/blog',
    11305       label: 'blog'
    11306     }]
    11307   }
    11308 });
    1130911503
    1131011504/***/ }),
     
    1132611520/* harmony import */ var _wordpress_data__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_wordpress_data__WEBPACK_IMPORTED_MODULE_2__);
    1132711521/* harmony import */ var _pattern_thumbnail__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../pattern-thumbnail */ "./src/components/pattern-thumbnail/index.js");
    11328 /* harmony import */ var _pattern_grid_menu__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../pattern-grid-menu */ "./src/components/pattern-grid-menu/index.js");
    11329 /* harmony import */ var _store__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../../store */ "./src/store/index.js");
     11522/* harmony import */ var _store__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../../store */ "./src/store/index.js");
    1133011523
    1133111524
     
    1134211535
    1134311536
    11344 
    1134511537function PatternGrid() {
    11346   var posts = Object(_wordpress_data__WEBPACK_IMPORTED_MODULE_2__["useSelect"])(function (select) {
    11347     var _select = select(_store__WEBPACK_IMPORTED_MODULE_5__["store"]),
    11348         getPatternsByQuery = _select.getPatternsByQuery;
    11349 
    11350     return getPatternsByQuery({});
    11351   }); // `posts` will be null while the fetch happens.
    11352 
    11353   var isLoading = !Array.isArray(posts);
    11354   return Object(_wordpress_element__WEBPACK_IMPORTED_MODULE_0__["createElement"])(_wordpress_element__WEBPACK_IMPORTED_MODULE_0__["Fragment"], null, Object(_wordpress_element__WEBPACK_IMPORTED_MODULE_0__["createElement"])(_pattern_grid_menu__WEBPACK_IMPORTED_MODULE_4__["default"], null), Object(_wordpress_element__WEBPACK_IMPORTED_MODULE_0__["createElement"])("div", {
     11538  var _useSelect = Object(_wordpress_data__WEBPACK_IMPORTED_MODULE_2__["useSelect"])(function (select) {
     11539    var _select = select(_store__WEBPACK_IMPORTED_MODULE_4__["store"]),
     11540        getPatternsByQuery = _select.getPatternsByQuery,
     11541        isLoadingPatternsByQuery = _select.isLoadingPatternsByQuery,
     11542        getCurrentQuery = _select.getCurrentQuery;
     11543
     11544    var query = getCurrentQuery();
     11545    return {
     11546      posts: query ? getPatternsByQuery(query) : [],
     11547      isLoading: query && isLoadingPatternsByQuery(query)
     11548    };
     11549  }),
     11550      posts = _useSelect.posts,
     11551      isLoading = _useSelect.isLoading;
     11552
     11553  return Object(_wordpress_element__WEBPACK_IMPORTED_MODULE_0__["createElement"])("div", {
    1135511554    className: "pattern-grid"
    1135611555  }, isLoading ? Object(_wordpress_element__WEBPACK_IMPORTED_MODULE_0__["createElement"])(_wordpress_components__WEBPACK_IMPORTED_MODULE_1__["Spinner"], null) : posts.map(function (post) {
     
    1135911558      pattern: post
    1136011559    });
    11361   })));
     11560  }));
    1136211561}
    1136311562
    1136411563/* harmony default export */ __webpack_exports__["default"] = (PatternGrid);
     11564
     11565/***/ }),
     11566
     11567/***/ "./src/components/pattern-preview-actions/copy-guide.js":
     11568/*!**************************************************************!*\
     11569  !*** ./src/components/pattern-preview-actions/copy-guide.js ***!
     11570  \**************************************************************/
     11571/*! exports provided: default */
     11572/***/ (function(module, __webpack_exports__, __webpack_require__) {
     11573
     11574"use strict";
     11575__webpack_require__.r(__webpack_exports__);
     11576/* harmony import */ var _wordpress_element__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @wordpress/element */ "@wordpress/element");
     11577/* harmony import */ var _wordpress_element__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_wordpress_element__WEBPACK_IMPORTED_MODULE_0__);
     11578/* harmony import */ var _wordpress_i18n__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @wordpress/i18n */ "@wordpress/i18n");
     11579/* harmony import */ var _wordpress_i18n__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_wordpress_i18n__WEBPACK_IMPORTED_MODULE_1__);
     11580/* harmony import */ var _wordpress_components__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @wordpress/components */ "@wordpress/components");
     11581/* harmony import */ var _wordpress_components__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_wordpress_components__WEBPACK_IMPORTED_MODULE_2__);
     11582
     11583
     11584/**
     11585 * External dependencies
     11586 */
     11587
     11588
     11589
     11590
     11591var CopyPasteImage = function CopyPasteImage() {
     11592  return (// Wrap the image to avoid the UI shift after the GIF loads
     11593    Object(_wordpress_element__WEBPACK_IMPORTED_MODULE_0__["createElement"])("div", {
     11594      style: {
     11595        height: '220px'
     11596      }
     11597    }, Object(_wordpress_element__WEBPACK_IMPORTED_MODULE_0__["createElement"])("img", {
     11598      src: "/wp-content/themes/pattern-directory/images/copy-paste-demo.gif",
     11599      alt: Object(_wordpress_i18n__WEBPACK_IMPORTED_MODULE_1__["__"])('GIF of copy and pasting.', 'wporg-patterns')
     11600    }))
     11601  );
     11602};
     11603
     11604var CopyGuide = function CopyGuide(_ref) {
     11605  var onFinish = _ref.onFinish;
     11606  return Object(_wordpress_element__WEBPACK_IMPORTED_MODULE_0__["createElement"])(_wordpress_components__WEBPACK_IMPORTED_MODULE_2__["Animate"], {
     11607    type: "appear",
     11608    options: {
     11609      origin: 'bottom'
     11610    }
     11611  }, function (_ref2) {
     11612    var className = _ref2.className;
     11613    return Object(_wordpress_element__WEBPACK_IMPORTED_MODULE_0__["createElement"])(_wordpress_components__WEBPACK_IMPORTED_MODULE_2__["Guide"], {
     11614      className: "pattern-actions__guide ".concat(className),
     11615      onFinish: onFinish,
     11616      finishButtonText: Object(_wordpress_i18n__WEBPACK_IMPORTED_MODULE_1__["__"])('Close', 'wporg-patterns'),
     11617      pages: [{
     11618        image: Object(_wordpress_element__WEBPACK_IMPORTED_MODULE_0__["createElement"])(CopyPasteImage, null),
     11619        content: Object(_wordpress_element__WEBPACK_IMPORTED_MODULE_0__["createElement"])("div", {
     11620          className: "pattern-actions__guide-content"
     11621        }, Object(_wordpress_element__WEBPACK_IMPORTED_MODULE_0__["createElement"])("h3", {
     11622          className: "pattern-actions__guide-title"
     11623        }, Object(_wordpress_i18n__WEBPACK_IMPORTED_MODULE_1__["__"])('How to use patterns on your WordPress site.', 'wporg-patterns')), Object(_wordpress_element__WEBPACK_IMPORTED_MODULE_0__["createElement"])("p", null, Object(_wordpress_i18n__WEBPACK_IMPORTED_MODULE_1__["__"])('Patterns are really just text. And, just like you can copy and paste text, you can copy and paste patterns. Its really easy!', 'wporg-patterns')), Object(_wordpress_element__WEBPACK_IMPORTED_MODULE_0__["createElement"])("ol", null, Object(_wordpress_element__WEBPACK_IMPORTED_MODULE_0__["createElement"])("li", null, Object(_wordpress_element__WEBPACK_IMPORTED_MODULE_0__["createElement"])("p", null, Object(_wordpress_i18n__WEBPACK_IMPORTED_MODULE_1__["__"])('Open any post or page in the WordPress block editor.', 'wporg-patterns'))), Object(_wordpress_element__WEBPACK_IMPORTED_MODULE_0__["createElement"])("li", null, Object(_wordpress_element__WEBPACK_IMPORTED_MODULE_0__["createElement"])("p", null, Object(_wordpress_i18n__WEBPACK_IMPORTED_MODULE_1__["__"])('Place your cursor where you want to add the pattern.', 'wporg-patterns'))), Object(_wordpress_element__WEBPACK_IMPORTED_MODULE_0__["createElement"])("li", null, Object(_wordpress_element__WEBPACK_IMPORTED_MODULE_0__["createElement"])("p", null, Object(_wordpress_element__WEBPACK_IMPORTED_MODULE_0__["createInterpolateElement"])(Object(_wordpress_i18n__WEBPACK_IMPORTED_MODULE_1__["__"])('Paste the contents of your clipboard by pressing both the <kbd>⌘</kbd> and <kbd>v</kbd> keys, or right-clicking and choose "Paste" from the menu.', 'wporg-patterns'), {
     11624          kbd: Object(_wordpress_element__WEBPACK_IMPORTED_MODULE_0__["createElement"])("kbd", {
     11625            className: "pattern-actions__guide-shortcut"
     11626          })
     11627        })))))
     11628      }]
     11629    });
     11630  });
     11631};
     11632
     11633/* harmony default export */ __webpack_exports__["default"] = (CopyGuide);
     11634
     11635/***/ }),
     11636
     11637/***/ "./src/components/pattern-preview-actions/copy-success-message.js":
     11638/*!************************************************************************!*\
     11639  !*** ./src/components/pattern-preview-actions/copy-success-message.js ***!
     11640  \************************************************************************/
     11641/*! exports provided: default */
     11642/***/ (function(module, __webpack_exports__, __webpack_require__) {
     11643
     11644"use strict";
     11645__webpack_require__.r(__webpack_exports__);
     11646/* harmony import */ var _wordpress_element__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @wordpress/element */ "@wordpress/element");
     11647/* harmony import */ var _wordpress_element__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_wordpress_element__WEBPACK_IMPORTED_MODULE_0__);
     11648/* harmony import */ var _wordpress_i18n__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @wordpress/i18n */ "@wordpress/i18n");
     11649/* harmony import */ var _wordpress_i18n__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_wordpress_i18n__WEBPACK_IMPORTED_MODULE_1__);
     11650/* harmony import */ var _wordpress_components__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @wordpress/components */ "@wordpress/components");
     11651/* harmony import */ var _wordpress_components__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_wordpress_components__WEBPACK_IMPORTED_MODULE_2__);
     11652
     11653
     11654/**
     11655 * External dependencies
     11656 */
     11657
     11658
     11659
     11660var CopySuccessMessage = function CopySuccessMessage(_ref) {
     11661  var onClick = _ref.onClick;
     11662  return Object(_wordpress_element__WEBPACK_IMPORTED_MODULE_0__["createElement"])(_wordpress_components__WEBPACK_IMPORTED_MODULE_2__["Notice"], {
     11663    className: "pattern-actions__notice",
     11664    status: "success",
     11665    isDismissible: false
     11666  }, Object(_wordpress_element__WEBPACK_IMPORTED_MODULE_0__["createElement"])("div", null, Object(_wordpress_element__WEBPACK_IMPORTED_MODULE_0__["createElement"])("b", null, Object(_wordpress_i18n__WEBPACK_IMPORTED_MODULE_1__["__"])('Pattern copied!', 'wporg-patterns')), Object(_wordpress_i18n__WEBPACK_IMPORTED_MODULE_1__["__"])(' Now you can paste it into any WordPress post or page.', 'wporg-patterns')), Object(_wordpress_element__WEBPACK_IMPORTED_MODULE_0__["createElement"])(_wordpress_components__WEBPACK_IMPORTED_MODULE_2__["Button"], {
     11667    onClick: onClick,
     11668    isSecondary: true
     11669  }, Object(_wordpress_i18n__WEBPACK_IMPORTED_MODULE_1__["__"])('Learn More', 'wporg-patterns')));
     11670};
     11671
     11672/* harmony default export */ __webpack_exports__["default"] = (CopySuccessMessage);
     11673
     11674/***/ }),
     11675
     11676/***/ "./src/components/pattern-preview-actions/index.js":
     11677/*!*********************************************************!*\
     11678  !*** ./src/components/pattern-preview-actions/index.js ***!
     11679  \*********************************************************/
     11680/*! exports provided: default */
     11681/***/ (function(module, __webpack_exports__, __webpack_require__) {
     11682
     11683"use strict";
     11684__webpack_require__.r(__webpack_exports__);
     11685/* harmony import */ var _babel_runtime_helpers_slicedToArray__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/slicedToArray */ "../../../../node_modules/@babel/runtime/helpers/slicedToArray.js");
     11686/* harmony import */ var _babel_runtime_helpers_slicedToArray__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_slicedToArray__WEBPACK_IMPORTED_MODULE_0__);
     11687/* harmony import */ var _wordpress_element__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @wordpress/element */ "@wordpress/element");
     11688/* harmony import */ var _wordpress_element__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_wordpress_element__WEBPACK_IMPORTED_MODULE_1__);
     11689/* harmony import */ var _copy_pattern_button__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../copy-pattern-button */ "./src/components/copy-pattern-button/index.js");
     11690/* harmony import */ var _add_to_favorite_button__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../add-to-favorite-button */ "./src/components/add-to-favorite-button/index.js");
     11691/* harmony import */ var _copy_success_message__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./copy-success-message */ "./src/components/pattern-preview-actions/copy-success-message.js");
     11692/* harmony import */ var _copy_guide__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./copy-guide */ "./src/components/pattern-preview-actions/copy-guide.js");
     11693
     11694
     11695
     11696/**
     11697 * External dependencies
     11698 */
     11699
     11700/**
     11701 * Internal dependencies
     11702 */
     11703
     11704
     11705
     11706
     11707
     11708
     11709var PatternPreviewActions = function PatternPreviewActions() {
     11710  var _useState = Object(_wordpress_element__WEBPACK_IMPORTED_MODULE_1__["useState"])(false),
     11711      _useState2 = _babel_runtime_helpers_slicedToArray__WEBPACK_IMPORTED_MODULE_0___default()(_useState, 2),
     11712      showSuccess = _useState2[0],
     11713      setShowSuccess = _useState2[1];
     11714
     11715  var _useState3 = Object(_wordpress_element__WEBPACK_IMPORTED_MODULE_1__["useState"])(false),
     11716      _useState4 = _babel_runtime_helpers_slicedToArray__WEBPACK_IMPORTED_MODULE_0___default()(_useState3, 2),
     11717      showGuide = _useState4[0],
     11718      setShowGuide = _useState4[1];
     11719
     11720  return Object(_wordpress_element__WEBPACK_IMPORTED_MODULE_1__["createElement"])(_wordpress_element__WEBPACK_IMPORTED_MODULE_1__["Fragment"], null, Object(_wordpress_element__WEBPACK_IMPORTED_MODULE_1__["createElement"])(_copy_pattern_button__WEBPACK_IMPORTED_MODULE_2__["default"], {
     11721    onSuccess: function onSuccess() {
     11722      return setShowSuccess(true);
     11723    }
     11724  }), Object(_wordpress_element__WEBPACK_IMPORTED_MODULE_1__["createElement"])(_add_to_favorite_button__WEBPACK_IMPORTED_MODULE_3__["default"], null), showSuccess && Object(_wordpress_element__WEBPACK_IMPORTED_MODULE_1__["createElement"])(_copy_success_message__WEBPACK_IMPORTED_MODULE_4__["default"], {
     11725    onClick: function onClick() {
     11726      return setShowGuide(true);
     11727    }
     11728  }), showGuide && Object(_wordpress_element__WEBPACK_IMPORTED_MODULE_1__["createElement"])(_copy_guide__WEBPACK_IMPORTED_MODULE_5__["default"], {
     11729    onFinish: function onFinish() {
     11730      return setShowGuide(false);
     11731    }
     11732  }));
     11733};
     11734
     11735/* harmony default export */ __webpack_exports__["default"] = (PatternPreviewActions);
    1136511736
    1136611737/***/ }),
     
    1173912110/***/ }),
    1174012111
     12112/***/ "./src/components/patterns/index.js":
     12113/*!******************************************!*\
     12114  !*** ./src/components/patterns/index.js ***!
     12115  \******************************************/
     12116/*! exports provided: default */
     12117/***/ (function(module, __webpack_exports__, __webpack_require__) {
     12118
     12119"use strict";
     12120__webpack_require__.r(__webpack_exports__);
     12121/* harmony import */ var _wordpress_element__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @wordpress/element */ "@wordpress/element");
     12122/* harmony import */ var _wordpress_element__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_wordpress_element__WEBPACK_IMPORTED_MODULE_0__);
     12123/* harmony import */ var _pattern_grid__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../pattern-grid */ "./src/components/pattern-grid/index.js");
     12124/* harmony import */ var _pattern_grid_menu__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../pattern-grid-menu */ "./src/components/pattern-grid-menu/index.js");
     12125/* harmony import */ var _query_monitor__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../query-monitor */ "./src/components/query-monitor/index.js");
     12126/* harmony import */ var _hooks__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../../hooks */ "./src/hooks/index.js");
     12127
     12128
     12129/**
     12130 * Internal dependencies
     12131 */
     12132
     12133
     12134
     12135
     12136
     12137var Patterns = function Patterns() {
     12138  return Object(_wordpress_element__WEBPACK_IMPORTED_MODULE_0__["createElement"])(_hooks__WEBPACK_IMPORTED_MODULE_4__["RouteProvider"], null, Object(_wordpress_element__WEBPACK_IMPORTED_MODULE_0__["createElement"])(_query_monitor__WEBPACK_IMPORTED_MODULE_3__["default"], null), Object(_wordpress_element__WEBPACK_IMPORTED_MODULE_0__["createElement"])(_pattern_grid_menu__WEBPACK_IMPORTED_MODULE_2__["default"], null), Object(_wordpress_element__WEBPACK_IMPORTED_MODULE_0__["createElement"])(_pattern_grid__WEBPACK_IMPORTED_MODULE_1__["default"], null));
     12139};
     12140
     12141/* harmony default export */ __webpack_exports__["default"] = (Patterns);
     12142
     12143/***/ }),
     12144
     12145/***/ "./src/components/query-monitor/index.js":
     12146/*!***********************************************!*\
     12147  !*** ./src/components/query-monitor/index.js ***!
     12148  \***********************************************/
     12149/*! exports provided: default */
     12150/***/ (function(module, __webpack_exports__, __webpack_require__) {
     12151
     12152"use strict";
     12153__webpack_require__.r(__webpack_exports__);
     12154/* harmony import */ var _babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/defineProperty */ "../../../../node_modules/@babel/runtime/helpers/defineProperty.js");
     12155/* harmony import */ var _babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_0__);
     12156/* harmony import */ var _wordpress_element__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @wordpress/element */ "@wordpress/element");
     12157/* harmony import */ var _wordpress_element__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_wordpress_element__WEBPACK_IMPORTED_MODULE_1__);
     12158/* harmony import */ var _wordpress_data__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @wordpress/data */ "@wordpress/data");
     12159/* harmony import */ var _wordpress_data__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_wordpress_data__WEBPACK_IMPORTED_MODULE_2__);
     12160/* harmony import */ var _wordpress_url__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @wordpress/url */ "@wordpress/url");
     12161/* harmony import */ var _wordpress_url__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(_wordpress_url__WEBPACK_IMPORTED_MODULE_3__);
     12162/* harmony import */ var _store__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../../store */ "./src/store/index.js");
     12163/* harmony import */ var _hooks__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../../hooks */ "./src/hooks/index.js");
     12164/* harmony import */ var _utils__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../../utils */ "./src/utils/index.js");
     12165
     12166
     12167function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; }
     12168
     12169function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_0___default()(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }
     12170
     12171/**
     12172 * WordPress dependencies
     12173 */
     12174
     12175
     12176
     12177/**
     12178 * Internal dependencies
     12179 */
     12180
     12181
     12182
     12183
     12184/**
     12185 * Listens for changes to the path and reconstructs the query object based on the path
     12186 */
     12187
     12188var QueryMonitor = function QueryMonitor() {
     12189  var _useRoute = Object(_hooks__WEBPACK_IMPORTED_MODULE_5__["useRoute"])(),
     12190      path = _useRoute.path;
     12191
     12192  var query = Object(_wordpress_data__WEBPACK_IMPORTED_MODULE_2__["useSelect"])(function (select) {
     12193    var _select = select(_store__WEBPACK_IMPORTED_MODULE_4__["store"]),
     12194        getCategoryBySlug = _select.getCategoryBySlug,
     12195        hasLoadedCategories = _select.hasLoadedCategories; // We need categories loaded before building the query
     12196
     12197
     12198    if (!hasLoadedCategories()) {
     12199      return;
     12200    }
     12201
     12202    var categorySlug = Object(_utils__WEBPACK_IMPORTED_MODULE_6__["getCategoryFromPath"])(path);
     12203    var category = getCategoryBySlug(categorySlug); // Default to {} if empty
     12204
     12205    var queryStrings = Object(_wordpress_url__WEBPACK_IMPORTED_MODULE_3__["getQueryArgs"])(path);
     12206    var _query = queryStrings; // If we have a category and it's not the default category
     12207
     12208    if (category && category.id !== -1) {
     12209      _query = _objectSpread(_objectSpread({}, _query), {}, {
     12210        'pattern-categories': category.id
     12211      });
     12212    }
     12213
     12214    return _query;
     12215  }, [path]);
     12216
     12217  var _useDispatch = Object(_wordpress_data__WEBPACK_IMPORTED_MODULE_2__["useDispatch"])(_store__WEBPACK_IMPORTED_MODULE_4__["store"]),
     12218      setCurrentQuery = _useDispatch.setCurrentQuery;
     12219
     12220  Object(_wordpress_element__WEBPACK_IMPORTED_MODULE_1__["useEffect"])(function () {
     12221    setCurrentQuery(query);
     12222  }, [query]);
     12223  return null;
     12224};
     12225
     12226/* harmony default export */ __webpack_exports__["default"] = (QueryMonitor);
     12227
     12228/***/ }),
     12229
     12230/***/ "./src/hooks/index.js":
     12231/*!****************************!*\
     12232  !*** ./src/hooks/index.js ***!
     12233  \****************************/
     12234/*! exports provided: RouteProvider, useRoute */
     12235/***/ (function(module, __webpack_exports__, __webpack_require__) {
     12236
     12237"use strict";
     12238__webpack_require__.r(__webpack_exports__);
     12239/* harmony import */ var _route__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./route */ "./src/hooks/route.js");
     12240/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "RouteProvider", function() { return _route__WEBPACK_IMPORTED_MODULE_0__["RouteProvider"]; });
     12241
     12242/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "useRoute", function() { return _route__WEBPACK_IMPORTED_MODULE_0__["useRoute"]; });
     12243
     12244
     12245
     12246/***/ }),
     12247
     12248/***/ "./src/hooks/route.js":
     12249/*!****************************!*\
     12250  !*** ./src/hooks/route.js ***!
     12251  \****************************/
     12252/*! exports provided: RouteProvider, useRoute */
     12253/***/ (function(module, __webpack_exports__, __webpack_require__) {
     12254
     12255"use strict";
     12256__webpack_require__.r(__webpack_exports__);
     12257/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "RouteProvider", function() { return RouteProvider; });
     12258/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "useRoute", function() { return useRoute; });
     12259/* harmony import */ var _babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/defineProperty */ "../../../../node_modules/@babel/runtime/helpers/defineProperty.js");
     12260/* harmony import */ var _babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_0__);
     12261/* harmony import */ var _babel_runtime_helpers_slicedToArray__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime/helpers/slicedToArray */ "../../../../node_modules/@babel/runtime/helpers/slicedToArray.js");
     12262/* harmony import */ var _babel_runtime_helpers_slicedToArray__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_slicedToArray__WEBPACK_IMPORTED_MODULE_1__);
     12263/* harmony import */ var _wordpress_element__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @wordpress/element */ "@wordpress/element");
     12264/* harmony import */ var _wordpress_element__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_wordpress_element__WEBPACK_IMPORTED_MODULE_2__);
     12265/* harmony import */ var _wordpress_url__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @wordpress/url */ "@wordpress/url");
     12266/* harmony import */ var _wordpress_url__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(_wordpress_url__WEBPACK_IMPORTED_MODULE_3__);
     12267/* harmony import */ var _utils__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../utils */ "./src/utils/index.js");
     12268
     12269
     12270
     12271
     12272function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; }
     12273
     12274function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_0___default()(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }
     12275
     12276/**
     12277 * WordPress dependencies
     12278 */
     12279
     12280
     12281/**
     12282 * Internal dependencies
     12283 */
     12284
     12285
     12286var StateContext = Object(_wordpress_element__WEBPACK_IMPORTED_MODULE_2__["createContext"])();
     12287function RouteProvider(_ref) {
     12288  var children = _ref.children;
     12289
     12290  var _useState = Object(_wordpress_element__WEBPACK_IMPORTED_MODULE_2__["useState"])(Object(_wordpress_url__WEBPACK_IMPORTED_MODULE_3__["getPathAndQueryString"])(window.location.href)),
     12291      _useState2 = _babel_runtime_helpers_slicedToArray__WEBPACK_IMPORTED_MODULE_1___default()(_useState, 2),
     12292      path = _useState2[0],
     12293      setPath = _useState2[1];
     12294  /**
     12295   * Combines query strings from the current path and the new path for arguments with values.
     12296   *
     12297   * @param {string} newPath Path including query strings
     12298   * @return {Object} Query strings as an object
     12299   */
     12300
     12301
     12302  var mergeQueryStrings = function mergeQueryStrings(newPath) {
     12303    var currentQueryStrings = Object(_wordpress_url__WEBPACK_IMPORTED_MODULE_3__["getQueryArgs"])(path);
     12304    var newQueryStrings = Object(_wordpress_url__WEBPACK_IMPORTED_MODULE_3__["getQueryArgs"])(newPath);
     12305
     12306    var combined = _objectSpread(_objectSpread({}, currentQueryStrings), newQueryStrings); // remove empty query strings
     12307
     12308
     12309    return Object(_utils__WEBPACK_IMPORTED_MODULE_4__["removeEmptyArgs"])(combined);
     12310  };
     12311  /**
     12312   * Combines the current and new path's query strings and updates the browser's url.
     12313   *
     12314   * @param {string} newPath
     12315   */
     12316
     12317
     12318  var _pushState = function _pushState(newPath) {
     12319    // Merge the existing and new query strings.
     12320    var newQueryStrings = mergeQueryStrings(newPath); // Remove the query strings from the path
     12321
     12322    var pathOnly = Object(_utils__WEBPACK_IMPORTED_MODULE_4__["removeQueryString"])(newPath); // Rebuild the full path
     12323
     12324    var rebuiltPath = Object(_wordpress_url__WEBPACK_IMPORTED_MODULE_3__["addQueryArgs"])(pathOnly, newQueryStrings);
     12325
     12326    _replaceState(rebuiltPath);
     12327  };
     12328  /**
     12329   * Calls `window.history.pushState` to update the browser's url.
     12330   *
     12331   * @param {string} newPath
     12332   */
     12333
     12334
     12335  var _replaceState = function _replaceState(newPath) {
     12336    window.history.pushState('', '', newPath);
     12337    setPath(newPath);
     12338  };
     12339
     12340  return Object(_wordpress_element__WEBPACK_IMPORTED_MODULE_2__["createElement"])(StateContext.Provider, {
     12341    value: {
     12342      path: path,
     12343      update: _pushState,
     12344      replace: _replaceState
     12345    }
     12346  }, children);
     12347}
     12348function useRoute() {
     12349  var context = Object(_wordpress_element__WEBPACK_IMPORTED_MODULE_2__["useContext"])(StateContext);
     12350
     12351  if (context === undefined) {
     12352    throw new Error('useRoute must be used within a Provider');
     12353  }
     12354
     12355  return context;
     12356}
     12357
     12358/***/ }),
     12359
    1174112360/***/ "./src/index.js":
    1174212361/*!**********************!*\
     
    1175112370/* harmony import */ var _wordpress_element__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_wordpress_element__WEBPACK_IMPORTED_MODULE_0__);
    1175212371/* harmony import */ var _components_pattern_preview__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./components/pattern-preview */ "./src/components/pattern-preview/index.js");
    11753 /* harmony import */ var _components_pattern_grid__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./components/pattern-grid */ "./src/components/pattern-grid/index.js");
     12372/* harmony import */ var _components_pattern_preview_actions__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./components/pattern-preview-actions */ "./src/components/pattern-preview-actions/index.js");
     12373/* harmony import */ var _components_patterns__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./components/patterns */ "./src/components/patterns/index.js");
    1175412374
    1175512375
     
    1176112381 * Internal dependencies
    1176212382 */
     12383
    1176312384
    1176412385
     
    1178412405
    1178512406
    11786 var gridContainer = document.getElementById('pattern-grid__container');
     12407var gridContainer = document.getElementById('patterns__container');
    1178712408
    1178812409if (gridContainer) {
    11789   Object(_wordpress_element__WEBPACK_IMPORTED_MODULE_0__["render"])(Object(_wordpress_element__WEBPACK_IMPORTED_MODULE_0__["createElement"])(_components_pattern_grid__WEBPACK_IMPORTED_MODULE_2__["default"], null), gridContainer);
     12410  Object(_wordpress_element__WEBPACK_IMPORTED_MODULE_0__["render"])(Object(_wordpress_element__WEBPACK_IMPORTED_MODULE_0__["createElement"])(_components_patterns__WEBPACK_IMPORTED_MODULE_3__["default"], null), gridContainer);
     12411} // Load the pattern preview actions
     12412
     12413
     12414var patternActionsContainer = document.getElementById('pattern-actions');
     12415
     12416if (patternActionsContainer) {
     12417  Object(_wordpress_element__WEBPACK_IMPORTED_MODULE_0__["render"])(Object(_wordpress_element__WEBPACK_IMPORTED_MODULE_0__["createElement"])(_components_pattern_preview_actions__WEBPACK_IMPORTED_MODULE_2__["default"], null), patternActionsContainer);
    1179012418}
    1179112419
     
    1179612424  !*** ./src/store/actions.js ***!
    1179712425  \******************************/
    11798 /*! exports provided: fetchPatterns, loadPatterns */
     12426/*! exports provided: fetchPatterns, loadPatterns, setCurrentQuery, fetchCategories, loadCategories */
    1179912427/***/ (function(module, __webpack_exports__, __webpack_require__) {
    1180012428
     
    1180312431/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "fetchPatterns", function() { return fetchPatterns; });
    1180412432/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "loadPatterns", function() { return loadPatterns; });
     12433/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "setCurrentQuery", function() { return setCurrentQuery; });
     12434/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "fetchCategories", function() { return fetchCategories; });
     12435/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "loadCategories", function() { return loadCategories; });
    1180512436/**
    1180612437 * Get the action object signalling that patterns have been requested.
     
    1183012461    query: query,
    1183112462    patterns: patterns
     12463  };
     12464}
     12465/**
     12466 * Get the action object signalling that the current view has been set.
     12467 *
     12468 * @param {string} query Query object.
     12469 * @return {Object} Action object.
     12470 */
     12471
     12472function setCurrentQuery(query) {
     12473  return {
     12474    type: 'SET_CURRENT_QUERY',
     12475    query: query
     12476  };
     12477}
     12478/**
     12479 * Get the action object signalling that categories have been requested.
     12480 *
     12481 * @return {Object} Action object.
     12482 */
     12483
     12484function fetchCategories() {
     12485  return {
     12486    type: 'FETCH_CATEGORIES'
     12487  };
     12488}
     12489/**
     12490 * Get the action object signalling that categories have been loaded.
     12491 *
     12492 * @param {Array} categories A list of categories.
     12493 * @return {Object} Action object.
     12494 */
     12495
     12496function loadCategories(categories) {
     12497  return {
     12498    type: 'LOAD_CATEGORIES',
     12499    categories: categories
    1183212500  };
    1183312501}
     
    1189412562  !*** ./src/store/reducer.js ***!
    1189512563  \******************************/
    11896 /*! exports provided: patterns, default */
     12564/*! exports provided: patterns, categories, currentQuery, default */
    1189712565/***/ (function(module, __webpack_exports__, __webpack_require__) {
    1189812566
     
    1190012568__webpack_require__.r(__webpack_exports__);
    1190112569/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "patterns", function() { return patterns; });
    11902 /* harmony import */ var _babel_runtime_helpers_toConsumableArray__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/toConsumableArray */ "../../../../node_modules/@babel/runtime/helpers/toConsumableArray.js");
    11903 /* harmony import */ var _babel_runtime_helpers_toConsumableArray__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_toConsumableArray__WEBPACK_IMPORTED_MODULE_0__);
    11904 /* harmony import */ var _babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime/helpers/defineProperty */ "../../../../node_modules/@babel/runtime/helpers/defineProperty.js");
    11905 /* harmony import */ var _babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_1__);
     12570/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "categories", function() { return categories; });
     12571/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "currentQuery", function() { return currentQuery; });
     12572/* harmony import */ var _babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/defineProperty */ "../../../../node_modules/@babel/runtime/helpers/defineProperty.js");
     12573/* harmony import */ var _babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_0__);
     12574/* harmony import */ var _babel_runtime_helpers_toConsumableArray__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime/helpers/toConsumableArray */ "../../../../node_modules/@babel/runtime/helpers/toConsumableArray.js");
     12575/* harmony import */ var _babel_runtime_helpers_toConsumableArray__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_toConsumableArray__WEBPACK_IMPORTED_MODULE_1__);
    1190612576/* harmony import */ var _wordpress_data__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @wordpress/data */ "@wordpress/data");
    1190712577/* harmony import */ var _wordpress_data__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_wordpress_data__WEBPACK_IMPORTED_MODULE_2__);
     12578/* harmony import */ var _utils__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./utils */ "./src/store/utils.js");
    1190812579
    1190912580
     
    1191112582function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; }
    1191212583
    11913 function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_1___default()(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }
    11914 
    11915 /**
    11916  * WordPress dependencies
    11917  */
     12584function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_0___default()(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }
     12585
     12586/**
     12587 * WordPress dependencies
     12588 */
     12589
     12590/**
     12591 * Internal dependencies
     12592 */
     12593
    1191812594
    1191912595/**
     
    1193312609  };
    1193412610}
     12611/**
     12612 * Reducer to track categories.
     12613 *
     12614 * @param {Object} state Current state.
     12615 * @param {Object} action Dispatched action.
     12616 * @return {Object} Updated state.
     12617 */
     12618
     12619function categories() {
     12620  var state = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : undefined;
     12621  var action = arguments.length > 1 ? arguments[1] : undefined;
     12622
     12623  switch (action.type) {
     12624    case 'FETCH_CATEGORIES':
     12625      return null;
     12626    // Indicates the query is in progress
     12627
     12628    case 'LOAD_CATEGORIES':
     12629      // Sort the categories alphabetically.
     12630      // See: https://github.com/WordPress/pattern-directory/pull/76#issuecomment-818330872
     12631      var sorted = (action.categories || []).sort(function (a, b) {
     12632        return a.name.localeCompare(b.name);
     12633      });
     12634      return [Object(_utils__WEBPACK_IMPORTED_MODULE_3__["getAllCategory"])()].concat(_babel_runtime_helpers_toConsumableArray__WEBPACK_IMPORTED_MODULE_1___default()(sorted));
     12635  }
     12636
     12637  return state;
     12638}
     12639/**
     12640 * Reducer to track the current query.
     12641 *
     12642 * @param {Object} state Current state.
     12643 * @param {Object} action Dispatched action.
     12644 * @return {Object} Updated state.
     12645 */
     12646
     12647function currentQuery() {
     12648  var state = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : undefined;
     12649  var action = arguments.length > 1 ? arguments[1] : undefined;
     12650
     12651  switch (action.type) {
     12652    case 'SET_CURRENT_QUERY':
     12653      return action.query;
     12654  }
     12655
     12656  return state;
     12657}
    1193512658
    1193612659function byId() {
     
    1193812661  var action = arguments.length > 1 ? arguments[1] : undefined;
    1193912662  var patternsById = (action.patterns || []).reduce(function (acc, cur) {
    11940     return _objectSpread(_objectSpread({}, acc), {}, _babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_1___default()({}, cur.id, cur));
     12663    return _objectSpread(_objectSpread({}, acc), {}, _babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_0___default()({}, cur.id, cur));
    1194112664  }, {});
    1194212665
     
    1196012683  switch (action.type) {
    1196112684    case 'LOAD_BLOCK_PATTERNS':
    11962       return _objectSpread(_objectSpread({}, state), {}, _babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_1___default()({}, action.query, [].concat(_babel_runtime_helpers_toConsumableArray__WEBPACK_IMPORTED_MODULE_0___default()(state[action.query] || []), _babel_runtime_helpers_toConsumableArray__WEBPACK_IMPORTED_MODULE_0___default()(patternIds))));
     12685      return _objectSpread(_objectSpread({}, state), {}, _babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_0___default()({}, action.query, [].concat(_babel_runtime_helpers_toConsumableArray__WEBPACK_IMPORTED_MODULE_1___default()(state[action.query] || []), _babel_runtime_helpers_toConsumableArray__WEBPACK_IMPORTED_MODULE_1___default()(patternIds))));
    1196312686
    1196412687    default:
     
    1196812691
    1196912692/* harmony default export */ __webpack_exports__["default"] = (Object(_wordpress_data__WEBPACK_IMPORTED_MODULE_2__["combineReducers"])({
    11970   patterns: patterns // taxonomy items,
    11971   // filter query,
    11972   // favorites,
     12693  patterns: patterns,
     12694  categories: categories,
     12695  currentQuery: currentQuery // favorites,
    1197312696
    1197412697}));
     
    1198012703  !*** ./src/store/resolvers.js ***!
    1198112704  \********************************/
    11982 /*! exports provided: getPatternsByQuery */
     12705/*! exports provided: getPatternsByQuery, getCategories */
    1198312706/***/ (function(module, __webpack_exports__, __webpack_require__) {
    1198412707
     
    1198612709__webpack_require__.r(__webpack_exports__);
    1198712710/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "getPatternsByQuery", function() { return getPatternsByQuery; });
     12711/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "getCategories", function() { return getCategories; });
    1198812712/* harmony import */ var _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/regenerator */ "@babel/runtime/regenerator");
    1198912713/* harmony import */ var _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_0__);
     
    1199612720
    1199712721
    11998 var _marked = /*#__PURE__*/_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_0___default.a.mark(getPatternsByQuery);
     12722var _marked = /*#__PURE__*/_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_0___default.a.mark(getPatternsByQuery),
     12723    _marked2 = /*#__PURE__*/_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_0___default.a.mark(getCategories);
    1199912724
    1200012725/**
     
    1204612771  }, _marked, null, [[1, 11]]);
    1204712772}
     12773function getCategories() {
     12774  var results;
     12775  return _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_0___default.a.wrap(function getCategories$(_context2) {
     12776    while (1) {
     12777      switch (_context2.prev = _context2.next) {
     12778        case 0:
     12779          _context2.prev = 0;
     12780          _context2.next = 3;
     12781          return Object(_actions__WEBPACK_IMPORTED_MODULE_3__["fetchCategories"])();
     12782
     12783        case 3:
     12784          _context2.next = 5;
     12785          return Object(_wordpress_data_controls__WEBPACK_IMPORTED_MODULE_2__["apiFetch"])({
     12786            path: Object(_wordpress_url__WEBPACK_IMPORTED_MODULE_1__["addQueryArgs"])('/wp/v2/pattern-categories')
     12787          });
     12788
     12789        case 5:
     12790          results = _context2.sent;
     12791          _context2.next = 8;
     12792          return Object(_actions__WEBPACK_IMPORTED_MODULE_3__["loadCategories"])(results);
     12793
     12794        case 8:
     12795          _context2.next = 12;
     12796          break;
     12797
     12798        case 10:
     12799          _context2.prev = 10;
     12800          _context2.t0 = _context2["catch"](0);
     12801
     12802        case 12:
     12803        case "end":
     12804          return _context2.stop();
     12805      }
     12806    }
     12807  }, _marked2, null, [[0, 10]]);
     12808}
    1204812809
    1204912810/***/ }),
     
    1205312814  !*** ./src/store/selectors.js ***!
    1205412815  \********************************/
    12055 /*! exports provided: isLoadingPatternsByQuery, getPatterns, getPatternsByQuery, getPattern */
     12816/*! exports provided: isLoadingPatternsByQuery, getPatterns, getPatternsByQuery, getPattern, getCurrentQuery, isLoadingCategories, hasLoadedCategories, getCategories, getCategoryBySlug */
    1205612817/***/ (function(module, __webpack_exports__, __webpack_require__) {
    1205712818
     
    1206212823/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "getPatternsByQuery", function() { return getPatternsByQuery; });
    1206312824/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "getPattern", function() { return getPattern; });
    12064 /* harmony import */ var _utils__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./utils */ "./src/store/utils.js");
     12825/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "getCurrentQuery", function() { return getCurrentQuery; });
     12826/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "isLoadingCategories", function() { return isLoadingCategories; });
     12827/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "hasLoadedCategories", function() { return hasLoadedCategories; });
     12828/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "getCategories", function() { return getCategories; });
     12829/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "getCategoryBySlug", function() { return getCategoryBySlug; });
     12830/* harmony import */ var _babel_runtime_helpers_slicedToArray__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/slicedToArray */ "../../../../node_modules/@babel/runtime/helpers/slicedToArray.js");
     12831/* harmony import */ var _babel_runtime_helpers_slicedToArray__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_slicedToArray__WEBPACK_IMPORTED_MODULE_0__);
     12832/* harmony import */ var _utils__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./utils */ "./src/store/utils.js");
     12833
     12834
    1206512835/**
    1206612836 * Internal dependencies
     
    1207712847
    1207812848function isLoadingPatternsByQuery(state, query) {
    12079   var queryString = Object(_utils__WEBPACK_IMPORTED_MODULE_0__["getQueryString"])(query);
     12849  var queryString = Object(_utils__WEBPACK_IMPORTED_MODULE_1__["getQueryString"])(query);
    1208012850  return !Array.isArray(state.patterns.queries[queryString]);
    1208112851}
     
    1210112871
    1210212872function getPatternsByQuery(state, query) {
    12103   var queryString = Object(_utils__WEBPACK_IMPORTED_MODULE_0__["getQueryString"])(query);
     12873  var queryString = Object(_utils__WEBPACK_IMPORTED_MODULE_1__["getQueryString"])(query);
    1210412874  return (state.patterns.queries[queryString] || []).map(function (id) {
    1210512875    return state.patterns.byId[id];
     
    1211812888  return state.patterns.byId[id] || null;
    1211912889}
     12890/**
     12891 * Get the current query.
     12892 *
     12893 * @param {Object} state Global application state.
     12894 *
     12895 * @return {Object} The current query.
     12896 */
     12897
     12898function getCurrentQuery(state) {
     12899  return state.currentQuery;
     12900}
     12901/**
     12902 * Check if there is a pending request for category query.
     12903 *
     12904 * @param {Object} state Global application state.
     12905 *
     12906 * @return {boolean} True if an API request is in progress for this query.
     12907 */
     12908
     12909function isLoadingCategories(state) {
     12910  return state.categories === null;
     12911}
     12912/**
     12913 * Check if the categories have been loaded.
     12914 *
     12915 * @param {Object} state Global application state.
     12916 *
     12917 * @return {boolean} True if categories is an array.
     12918 */
     12919
     12920function hasLoadedCategories(state) {
     12921  return Array.isArray(state.categories);
     12922}
     12923/**
     12924 * Get all loaded categories.
     12925 *
     12926 * @param {Object} state Global application state.
     12927 *
     12928 * @return {Array} A list of all categories.
     12929 */
     12930
     12931function getCategories(state) {
     12932  return state.categories;
     12933}
     12934/**
     12935 * Get category by its slug.
     12936 *
     12937 * @param {Object} state Global application state.
     12938 * @param {string} slug Category slug.
     12939 *
     12940 * @return {Array|undefined} The requested category.
     12941 */
     12942
     12943function getCategoryBySlug(state, slug) {
     12944  if (!hasLoadedCategories(state)) {
     12945    return;
     12946  }
     12947
     12948  var _state$categories$fil = state.categories.filter(function (i) {
     12949    return i.slug === slug;
     12950  }),
     12951      _state$categories$fil2 = _babel_runtime_helpers_slicedToArray__WEBPACK_IMPORTED_MODULE_0___default()(_state$categories$fil, 1),
     12952      cat = _state$categories$fil2[0];
     12953
     12954  return cat;
     12955}
    1212012956
    1212112957/***/ }),
     
    1212512961  !*** ./src/store/utils.js ***!
    1212612962  \****************************/
    12127 /*! exports provided: getQueryString */
     12963/*! exports provided: getQueryString, getAllCategory */
    1212812964/***/ (function(module, __webpack_exports__, __webpack_require__) {
    1212912965
     
    1213112967__webpack_require__.r(__webpack_exports__);
    1213212968/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "getQueryString", function() { return getQueryString; });
     12969/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "getAllCategory", function() { return getAllCategory; });
    1213312970/* harmony import */ var _babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/defineProperty */ "../../../../node_modules/@babel/runtime/helpers/defineProperty.js");
    1213412971/* harmony import */ var _babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_0__);
    1213512972/* harmony import */ var _wordpress_url__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @wordpress/url */ "@wordpress/url");
    1213612973/* harmony import */ var _wordpress_url__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_wordpress_url__WEBPACK_IMPORTED_MODULE_1__);
    12137 
    12138 
    12139 /**
    12140  * WordPress dependencies
    12141  */
     12974/* harmony import */ var _wordpress_i18n__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @wordpress/i18n */ "@wordpress/i18n");
     12975/* harmony import */ var _wordpress_i18n__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_wordpress_i18n__WEBPACK_IMPORTED_MODULE_2__);
     12976
     12977
     12978/**
     12979 * WordPress dependencies
     12980 */
     12981
    1214212982
    1214312983/**
     
    1217913019  return stableKey;
    1218013020}
     13021/**
     13022 * Get the first category used to display all patterns.
     13023 *
     13024 * See Schema:
     13025 * https://developer.wordpress.org/rest-api/reference/categories/
     13026 *
     13027 * @return {Object} A category object
     13028 */
     13029
     13030function getAllCategory() {
     13031  return {
     13032    id: -1,
     13033    slug: '',
     13034    // Slug matches url
     13035    name: Object(_wordpress_i18n__WEBPACK_IMPORTED_MODULE_2__["__"])('All', 'wporg-patterns'),
     13036    link: '/'
     13037  };
     13038}
     13039
     13040/***/ }),
     13041
     13042/***/ "./src/utils/category.js":
     13043/*!*******************************!*\
     13044  !*** ./src/utils/category.js ***!
     13045  \*******************************/
     13046/*! exports provided: removeEmptyArgs, removeQueryString, getCategoryFromPath */
     13047/***/ (function(module, __webpack_exports__, __webpack_require__) {
     13048
     13049"use strict";
     13050__webpack_require__.r(__webpack_exports__);
     13051/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "removeEmptyArgs", function() { return removeEmptyArgs; });
     13052/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "removeQueryString", function() { return removeQueryString; });
     13053/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "getCategoryFromPath", function() { return getCategoryFromPath; });
     13054/**
     13055 * Remove the last '/' from a string if it exists.
     13056 *
     13057 * @param {string} str Url or url part
     13058 * @return {string}
     13059 */
     13060var removeTrailingSlash = function removeTrailingSlash(str) {
     13061  return str.replace(/\/$/, '');
     13062};
     13063/**
     13064 * Removes any empty properties or empty strings.
     13065 *
     13066 * @param {Object} obj
     13067 * @return {Object} Object with keys that are defined and not empty
     13068 */
     13069
     13070
     13071var removeEmptyArgs = function removeEmptyArgs(obj) {
     13072  var cleaned = {};
     13073  Object.keys(obj).forEach(function (key) {
     13074    var arg = obj[key]; // If it's not undefined or null convert it to string and check that it is not empty.
     13075    // It's a bit of a "trick" to handle non-strings and strings without checking type explicitly.
     13076
     13077    if (arg !== undefined && arg !== null && arg.toString().length > 0) {
     13078      cleaned[key] = arg;
     13079    }
     13080  });
     13081  return cleaned;
     13082};
     13083/**
     13084 * Splits a string at ? and returns the first part.
     13085 *
     13086 * @param {string} path Url or url part
     13087 * @return {string} Returns string or string before ? character.
     13088 */
     13089
     13090var removeQueryString = function removeQueryString(path) {
     13091  return path.split('?')[0];
     13092};
     13093/**
     13094 * Retrieves the category from a url path without query string params.
     13095 *
     13096 * @param {string} path
     13097 * @return {string} The category slug.
     13098 */
     13099
     13100var getCategoryFromPath = function getCategoryFromPath(path) {
     13101  var _path = removeQueryString(path);
     13102
     13103  _path = removeTrailingSlash(_path);
     13104  return _path.substring(_path.lastIndexOf('/') + 1);
     13105};
     13106
     13107/***/ }),
     13108
     13109/***/ "./src/utils/index.js":
     13110/*!****************************!*\
     13111  !*** ./src/utils/index.js ***!
     13112  \****************************/
     13113/*! exports provided: getCategoryFromPath, removeQueryString, removeEmptyArgs */
     13114/***/ (function(module, __webpack_exports__, __webpack_require__) {
     13115
     13116"use strict";
     13117__webpack_require__.r(__webpack_exports__);
     13118/* harmony import */ var _category__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./category */ "./src/utils/category.js");
     13119/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "getCategoryFromPath", function() { return _category__WEBPACK_IMPORTED_MODULE_0__["getCategoryFromPath"]; });
     13120
     13121/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "removeQueryString", function() { return _category__WEBPACK_IMPORTED_MODULE_0__["removeQueryString"]; });
     13122
     13123/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "removeEmptyArgs", function() { return _category__WEBPACK_IMPORTED_MODULE_0__["removeEmptyArgs"]; });
     13124
     13125
    1218113126
    1218213127/***/ }),
     
    1222613171/***/ }),
    1222713172
    12228 /***/ "@wordpress/core-data":
    12229 /*!**********************************!*\
    12230   !*** external ["wp","coreData"] ***!
    12231   \**********************************/
    12232 /*! no static exports found */
    12233 /***/ (function(module, exports) {
    12234 
    12235 (function() { module.exports = window["wp"]["coreData"]; }());
    12236 
    12237 /***/ }),
    12238 
    1223913173/***/ "@wordpress/data":
    1224013174/*!******************************!*\
  • sites/trunk/wordpress.org/public_html/wp-content/themes/pub/wporg-patterns/css/components/_category-context-bar.scss

    r10882 r10924  
    55    font-size: 0.8125rem;
    66    overflow: auto;
    7     transition: all 50ms ease-out;
     7    transition: all 100ms ease-out;
     8    transition-delay: 100ms;
    89
    910    > div {
  • sites/trunk/wordpress.org/public_html/wp-content/themes/pub/wporg-patterns/css/components/_category-menu.scss

    r10882 r10924  
    77    background-repeat: no-repeat;
    88    background-size: 0;
    9     background-position-x: 20px;
     9    background-position-x: 0;
    1010    transition: all 75ms ease-out;
     11    min-height: 45px;
    1112
    1213    li {
     
    8182        height: 24px;
    8283        left: 0;
     84        top: calc(50% - 12px);
    8385        transition: none;
    8486    }
  • sites/trunk/wordpress.org/public_html/wp-content/themes/pub/wporg-patterns/css/components/_category-search.scss

    r10882 r10924  
    1313        box-shadow: none;
    1414        font-size: 0.8125rem;
     15
     16        &:focus {
     17            outline: $color__wp-blue auto 1px;
     18        }
    1519    }
    1620
     
    2024        border: none;
    2125        color: $color__text-lighter;
     26
     27        &:active {
     28            background: $color-gray-light-600;
     29        }
     30
     31        &:focus {
     32            outline: $color__wp-blue auto 1px;
     33        }
    2234    }
    2335
     
    3042
    3143        @media only screen and (min-width: $breakpoint-mobile) {
    32             width: 224px;
     44            width: 224px !important;
     45            min-width: auto !important;
    3346        }
    3447
  • sites/trunk/wordpress.org/public_html/wp-content/themes/pub/wporg-patterns/css/components/_pattern.scss

    r10841 r10924  
    1313    .entry-header {
    1414        max-width: $size__site-main;
    15         padding: 2rem 0;
     15        padding: 1.5rem;
    1616        margin-left: auto;
    1717        margin-right: auto;
     18
     19        @media only screen and (min-width: $breakpoint-large) {
     20            padding: 1.5rem 0;
     21        }
    1822
    1923        .entry-title {
     
    2630        display: flex;
    2731        align-items: stretch;
     32        flex-wrap: wrap;
    2833
    2934        button + button {
    3035            margin-left: 2em;
    3136        }
     37    }
     38
     39    .pattern-actions__notice {
     40        margin: 1.5rem 0 0;
     41        height: auto;
     42        flex-basis: 100%;
     43
     44        // @wordpress/components/notice wraps content
     45        > * {
     46            display: flex;
     47            flex-direction: column; // stack on mobile
     48            justify-content: space-between;
     49            align-items: flex-start;
     50            margin: 0;
     51
     52            button {
     53                margin-top: 0.75rem;
     54            }
     55
     56            @media only screen and (min-width: $breakpoint-small) {
     57                align-items: center;
     58                flex-direction: row;
     59
     60                button {
     61                    margin-top: 0;
     62                }
     63            }
     64        }
     65    }
     66
     67    .pattern-actions__guide {
     68        max-width: $breakpoint-mobile / 1.25;
     69
     70        // @wordpress/components/guide overrides
     71        height: auto;
     72        max-height: none;
     73    }
     74
     75    .pattern-actions__guide-content {
     76        padding: 1.5rem;
     77        line-height: 1.5;
     78    }
     79
     80    .pattern-actions__guide-title {
     81        margin: 0;
     82    }
     83
     84    .pattern-actions__guide-shortcut {
     85        background: $color-gray-light-300;
     86        box-shadow: 0 0 0 1px $color-gray-light-700;
     87        padding: 1px;
     88        font-weight: 600;
     89        min-width: 20px;
     90        display: inline-block;
     91        text-align: center;
     92        border-radius: 2px;
    3293    }
    3394
  • sites/trunk/wordpress.org/public_html/wp-content/themes/pub/wporg-patterns/css/style.css

    r10882 r10924  
    1 @charset "UTF-8";[class*=col-]{margin:inherit}.row{display:flex;flex-direction:row;flex-wrap:wrap}@media (max-width:768px){.row{flex-direction:column;flex-wrap:nowrap}}.row.gutters>.row{margin-left:-2%}@media (max-width:768px){.row.gutters>.row{margin-left:0}}.row.gutters>.row>[class*=col-]{margin-left:2%}@media (max-width:768px){.row.gutters>.row>[class*=col-]{margin-left:0}}.row.around{justify-content:space-around}.row.between{justify-content:space-between}.row.auto .col{flex-grow:1}.col-1{width:8.3333333333%}.offset-1{margin-left:8.3333333333%}.col-2{width:16.6666666667%}.offset-2{margin-left:16.6666666667%}.col-3{width:25%}.offset-3{margin-left:25%}.col-4{width:33.3333333333%}.offset-4{margin-left:33.3333333333%}.col-5{width:41.6666666667%}.offset-5{margin-left:41.6666666667%}.col-6{width:50%}.offset-6{margin-left:50%}.col-7{width:58.3333333333%}.offset-7{margin-left:58.3333333333%}.col-8{width:66.6666666667%}.offset-8{margin-left:66.6666666667%}.col-9{width:75%}.offset-9{margin-left:75%}.col-10{width:83.3333333333%}.offset-10{margin-left:83.3333333333%}.col-11{width:91.6666666667%}.offset-11{margin-left:91.6666666667%}.col-12{width:100%}.offset-12{margin-left:100%}.gutters>.col-1{width:6.33333%}.gutters>.col-1:nth-child(n+13){margin-top:2%}.gutters>.offset-1{margin-left:10.33333%!important}.gutters>.col-2{width:14.66667%}.gutters>.col-2:nth-child(n+7){margin-top:2%}.gutters>.offset-2{margin-left:18.66667%!important}.gutters>.col-3{width:23%}.gutters>.col-3:nth-child(n+5){margin-top:2%}.gutters>.offset-3{margin-left:27%!important}.gutters>.col-4{width:31.33333%}.gutters>.col-4:nth-child(n+4){margin-top:2%}.gutters>.offset-4{margin-left:35.33333%!important}.gutters>.col-5{width:39.66667%}.gutters>.offset-5{margin-left:43.66667%!important}.gutters>.col-6{width:48%}.gutters>.col-6:nth-child(n+3){margin-top:2%}.gutters>.offset-6{margin-left:52%!important}.gutters>.col-7{width:56.33333%}.gutters>.offset-7{margin-left:60.33333%!important}.gutters>.col-8{width:64.66667%}.gutters>.offset-8{margin-left:68.66667%!important}.gutters>.col-9{width:73%}.gutters>.offset-9{margin-left:77%!important}.gutters>.col-10{width:81.33333%}.gutters>.offset-10{margin-left:85.33333%!important}.gutters>.col-11{width:89.66667%}.gutters>.offset-11{margin-left:93.66667%!important}.gutters>.col-12{width:98%}.gutters>.offset-12{margin-left:102%!important}@media (max-width:768px){[class*=" offset-"],[class^=offset-]{margin-left:0}}.first{order:-1}.last{order:1}@media (max-width:768px){.row [class*=col-]{margin-left:0;width:100%}.row.gutters [class*=col-]{margin-bottom:16px}.first-sm{order:-1}.last-sm{order:1}}.gutters .column.push-left,.push-left{margin-right:auto}.gutters .column.push-right,.push-right{margin-left:auto}.gutters .column.push-center,.push-center{margin-left:auto;margin-right:auto}.gutters .column.push-middle,.push-middle{margin-top:auto;margin-bottom:auto}.push-bottom{margin-top:auto}@media (max-width:768px){.gutters .column.push-left-sm,.push-left-sm{margin-left:0}.gutters .column.push-center-sm,.push-center-sm{margin-left:auto;margin-right:auto}.push-top-sm{margin-top:0}}.align-middle{align-items:center}.align-right{justify-content:flex-end}.align-center{justify-content:center}@media (max-width:768px){.align-left-sm{justify-content:flex-start}}.float-right{float:right}.float-left{float:left}@media (max-width:768px){.float-left,.float-right{float:none}}.fixed{position:fixed;top:0;left:0;z-index:100;width:100%}html{font-family:sans-serif;-webkit-text-size-adjust:100%;-ms-text-size-adjust:100%}body{margin:0}article,aside,details,figcaption,figure,footer,header,main,menu,nav,section,summary{display:block}audio,canvas,progress,video{display:inline-block;vertical-align:baseline}audio:not([controls]){display:none;height:0}[hidden],template{display:none}a{background-color:transparent}abbr[title]{border-bottom:1px dotted}b,strong{font-weight:700}dfn{font-style:italic}h1{font-size:2em;margin:.67em 0}mark{background:#ff0;color:#000}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sup{top:-.5em}sub{bottom:-.25em}img{border:0}svg:not(:root){overflow:hidden}figure{margin:1em 40px}hr{box-sizing:content-box;height:0}code,kbd,pre,samp{font-family:monospace,monospace;font-size:1em}button,input,optgroup,select,textarea{color:inherit;font:inherit;margin:0}button{overflow:visible}button,select{text-transform:none}button,html input[type=button],input[type=reset],input[type=submit]{-webkit-appearance:button;cursor:pointer}button[disabled],html input[disabled]{cursor:default}button::-moz-focus-inner,input::-moz-focus-inner{border:0;padding:0}input{line-height:normal}input[type=checkbox],input[type=radio]{box-sizing:border-box;padding:0}input[type=number]::-webkit-inner-spin-button,input[type=number]::-webkit-outer-spin-button{height:auto}input[type=search]::-webkit-search-cancel-button,input[type=search]::-webkit-search-decoration{-webkit-appearance:none}fieldset{border:1px solid silver;margin:0 2px;padding:.35em .625em .75em}legend{border:0;padding:0}optgroup{font-weight:700}table{border-spacing:0}td,th{padding:0}p{margin:1rem 0}cite,dfn,em,i{font-style:italic}blockquote{margin:0 1.5rem}address{margin:0 0 1.5rem}pre{background:#eee;font-family:Courier\ 10 Pitch,Courier,monospace;font-size:.9375rem;line-height:1.6;margin-bottom:1.6rem;max-width:100%;overflow:auto;padding:1.6rem}code,kbd,tt,var{font-family:Monaco,Consolas,Andale Mono,DejaVu Sans Mono,monospace;font-size:.9375rem}abbr,acronym{border-bottom:1px dotted #666;cursor:help}ins,mark{background:#fff9c0;text-decoration:none}big{font-size:125%}html{box-sizing:border-box}*,:after,:before{box-sizing:inherit}body{background:#fff}blockquote,q{quotes:"" ""}blockquote:after,blockquote:before,q:after,q:before{content:""}blockquote{border-left:2px solid #767676;color:#767676;margin:1rem 0;padding-left:.8rem}blockquote cite{font-size:.8rem}figure{margin:0}hr{background-color:#eee;border:0;height:2px;margin:5rem auto}img{height:auto;max-width:100%}h1,h2,h3,h4,h5,h6{font-family:Open Sans,sans-serif;clear:both;line-height:1.5;margin:2rem 0 1rem}.h1,h1{font-size:2.44140625rem}.h1,.h2,h1,h2{font-weight:300}.h2,h2{font-size:1.953125rem}.h3,h3{font-size:1.5625rem;font-weight:400}.h4,h4{font-size:1.25rem;color:#32373c;font-weight:600;padding:0}.h5,h5{font-size:1rem;letter-spacing:.01rem}.h5,.h6,h5,h6{font-weight:600;text-transform:uppercase}.h6,h6{font-size:.8rem;letter-spacing:.8px}a{color:#0073aa;text-decoration:none}a:active,a:focus,a:hover{text-decoration:underline}a:focus{outline:thin dotted}a:active,a:hover{outline:0}li>a,p a{text-decoration:underline}li>a:hover,p a:hover{color:#d54e21}ol,ul{margin:0 0 1.5em 1.5em;padding:0}ul{list-style:square}ol{list-style:decimal}ol.unmarked-list,ul.unmarked-list{list-style:none;padding-left:0}li>ol,li>ul{margin-bottom:0}dt{font-weight:700}dd{margin:0 1.5em 1.5em}table{border:1px solid #eee;border-collapse:collapse;font-size:.8rem;margin:0 0 1rem;padding:0;width:100%}table thead{background:#32373c;color:#fff}table td,table th{border:1px solid #eee;font-weight:400;margin:0;padding:.4rem;text-align:left;vertical-align:top}table tbody tr:nth-child(2n){background:#f7f7f7}html{font-size:100%}body,button,input,select,textarea{color:#32373c;font-family:Open Sans,sans-serif;font-size:100%;line-height:1.5}@media screen and (min-width:737px){html{font-size:1.125rem}}.custom-select{display:inline-block;box-sizing:border-box;padding:.5rem 2rem .5rem .8rem;width:auto;font-size:1em;line-height:1.3;border:1px solid #6c7782;box-shadow:none;border-radius:.5em;-moz-appearance:none;-webkit-appearance:none;appearance:none;background-color:transparent;background-image:url('data:image/svg+xml;charset=US-ASCII,%3Csvg width="14" height="8" xmlns="http://www.w3.org/2000/svg"%3E%3Cpath d="M2 0L7 5L12 0L14 1L7 8L0 1L2 0Z" fill="%23555D66"/%3E%3C/svg%3E%0A');background-repeat:no-repeat;background-position:right .7em top 50%;background-size:.65em auto}.custom-select::-ms-expand{display:none}.custom-select:focus{box-shadow:0 0 1px 3px rgba(59,153,252,.7);box-shadow:0 0 0 3px -moz-mac-focusring;color:#222;outline:none}.custom-select option{font-weight:400}html{font-size:1rem}@media screen and (min-width:737px){html{font-size:1rem}}.screen-reader-text{clip:rect(1px,1px,1px,1px);height:1px;overflow:hidden;position:absolute!important;width:1px}.screen-reader-text:focus{background-color:#f1f1f1;border-radius:3px;box-shadow:0 0 2px 2px rgba(0,0,0,.6);clip:auto!important;color:#21759b;display:block;font-size:.875rem;font-weight:700;height:auto;left:5px;line-height:normal;padding:15px 23px 14px;text-decoration:none;top:5px;width:auto;z-index:100000}.site-content[tabindex="-1"]:focus{outline:0}.no-js .hide-if-no-js{display:none}.alignleft{display:inline;float:left;margin-right:1.5em}.alignright{display:inline;float:right;margin-left:1.5em}.aligncenter{clear:both;display:block;margin-left:auto;margin-right:auto}@media screen and (max-width:480px){.alignleft,.alignright{display:block;float:none;margin-left:auto;margin-right:auto}}.button,.button-primary,.button-secondary,.plugin-upload-form .button-primary{border:1px solid;border-radius:3px;box-sizing:border-box;cursor:pointer;display:inline-block;font-size:.8rem;height:1.5625rem;line-height:1;margin:0;padding:0 .8rem;text-decoration:none;white-space:nowrap;-webkit-appearance:none}button::-moz-focus-inner,input[type=button]::-moz-focus-inner,input[type=reset]::-moz-focus-inner,input[type=submit]::-moz-focus-inner{border:0;padding:0}.button-group.button-xl .button,.button.button-xl{font-size:1rem;height:2.44140625rem;line-height:1;padding:0 1.5rem}.button-group.button-large .button,.button.button-large{height:1.953125rem;line-height:1;padding:0 1rem}.button-group.button-small .button,.button.button-small{font-size:.64rem;height:1.25rem;line-height:1;padding:0 .5rem}a.button,a.button-primary,a.button-secondary{line-height:1.5625rem}.button-group.button-large a.button,a.button.button-large{line-height:1.953125rem}.button-group.button-xl a.button,a.button.button-xl{line-height:2.44140625rem}.button-group.button-small a.button,a.button.button-small{line-height:1.25rem}.button:active,.button:focus{outline:none}.button.hidden{display:none}input[type=reset],input[type=reset]:active,input[type=reset]:focus,input[type=reset]:hover{background:none;border:none;box-shadow:none;padding:0 2px 1px;width:auto}.button,.button-secondary,.button:visited{background:#f7f7f7;border-color:#ccc;box-shadow:0 1px 0 #ccc;color:#555;vertical-align:top}p .button{vertical-align:baseline}.button-secondary:focus,.button-secondary:hover,.button.focus,.button.hover,.button:focus,.button:hover{background:#fafafa;border-color:#999;color:#23282d}.button-link:focus,.button-secondary:focus,.button.focus,.button:focus{border-color:#5b9dd9;box-shadow:0 0 3px rgba(0,115,170,.8)}.button-secondary:active,.button.active,.button.active:hover,.button:active{background:#eee;border-color:#999;box-shadow:inset 0 2px 5px -3px rgba(0,0,0,.5);transform:translateY(1px)}.button.active:focus{border-color:#5b9dd9;box-shadow:inset 0 2px 5px -3px rgba(0,0,0,.5),0 0 3px rgba(0,115,170,.8)}.button-disabled,.button-secondary.disabled,.button-secondary:disabled,.button-secondary[disabled],.button.disabled,.button:disabled,.button[disabled]{background:#f7f7f7!important;border-color:#ddd!important;box-shadow:none!important;color:#a0a5aa!important;cursor:default;text-shadow:0 1px 0 #fff!important;transform:none!important}.button-link,input[type=submit].button-link{background:none;border:0;border-radius:0;box-shadow:none;cursor:pointer;margin:0;outline:none;padding:0}.button-link:focus{outline:1px solid #5b9dd9}.button-primary,.download-button,.plugin-upload-form .button-primary{text-decoration:none;text-shadow:0 -1px 1px #006799,1px 0 1px #006799,0 1px 1px #006799,-1px 0 1px #006799}.button-primary,.button-primary:visited,.download-button,.download-button:visited,.plugin-upload-form .button-primary,.plugin-upload-form .button-primary:visited{background:#0085ba;border-color:#0073aa #006799 #006799;box-shadow:0 1px 0 #006799;color:#fff}.button-primary.focus,.button-primary.hover,.button-primary:focus,.button-primary:hover,.download-button.focus,.download-button.hover,.download-button:focus,.download-button:hover,.plugin-upload-form .button-primary.focus,.plugin-upload-form .button-primary.hover,.plugin-upload-form .button-primary:focus,.plugin-upload-form .button-primary:hover{background:#008ec2;border-color:#006799;box-shadow:0 1px 0 #006799;color:#fff}.button-primary.focus,.button-primary:focus,.download-button.focus,.download-button:focus,.plugin-upload-form .button-primary.focus,.plugin-upload-form .button-primary:focus{box-shadow:0 1px 0 #0073aa,0 0 2px 1px #33b3db}.button-primary.active,.button-primary.active:focus,.button-primary.active:hover,.button-primary:active,.download-button.active,.download-button.active:focus,.download-button.active:hover,.download-button:active,.plugin-upload-form .button-primary.active,.plugin-upload-form .button-primary.active:focus,.plugin-upload-form .button-primary.active:hover,.plugin-upload-form .button-primary:active{background:#0073aa;border-color:#006799;box-shadow:inset 0 2px 0 #006799;vertical-align:top}.button-primary.disabled,.button-primary:disabled,.button-primary[disabled],.download-button.disabled,.download-button:disabled,.download-button[disabled],.plugin-upload-form .button-primary.disabled,.plugin-upload-form .button-primary:disabled,.plugin-upload-form .button-primary[disabled]{background:#008ec2!important;border-color:#007cb2!important;box-shadow:none!important;color:#66c6e4!important;cursor:default;text-shadow:0 -1px 0 rgba(0,0,0,.1)!important}.button-primary.button.button-hero,.download-button.button.button-hero,.plugin-upload-form .button-primary.button.button-hero{box-shadow:0 2px 0 #006799}.button-primary.button.button-hero.active,.button-primary.button.button-hero.active:focus,.button-primary.button.button-hero.active:hover,.button-primary.button.button-hero:active,.download-button.button.button-hero.active,.download-button.button.button-hero.active:focus,.download-button.button.button-hero.active:hover,.download-button.button.button-hero:active,.plugin-upload-form .button-primary.button.button-hero.active,.plugin-upload-form .button-primary.button.button-hero.active:focus,.plugin-upload-form .button-primary.button.button-hero.active:hover,.plugin-upload-form .button-primary.button.button-hero:active{box-shadow:inset 0 3px 0 #006799}.button-primary-disabled{background:#008ec2!important;border-color:#007cb2!important;box-shadow:none!important;color:#66c6e4!important;cursor:default;text-shadow:0 -1px 0 rgba(0,0,0,.1)!important}.button-group{display:inline-block;font-size:0;position:relative;vertical-align:middle;white-space:nowrap}.button-group>.button{border-radius:0;display:inline-block;margin-right:-1px;z-index:10}.button-group>.button-primary{z-index:100}.button-group>.button:hover{z-index:20}.button-group>.button:first-child{border-radius:3px 0 0 3px}.button-group>.button:last-child{border-radius:0 3px 3px 0}.button-group>.button:focus{position:relative;z-index:1}@media screen and (max-width:737px){.button,.button.button-large,.button.button-small,.plugin-upload-form .button-primary{font-size:14px;height:auto;line-height:normal;margin-bottom:4px;padding:6px 14px;vertical-align:middle}}.clear:after,.clear:before,.comment-content:after,.comment-content:before,.entry-content:after,.entry-content:before,.home-below:after,.home-below:before,.site-content:after,.site-content:before,.site-footer:after,.site-footer:before,.site-header:after,.site-header:before{content:"";display:table;table-layout:fixed}.clear:after,.comment-content:after,.entry-content:after,.home-below:after,.site-content:after,.site-footer:after,.site-header:after{clear:both}p.subheading{color:#82878c;font-weight:300;margin:-.4rem auto 2rem;text-align:center}p.intro,p.subheading{font-size:1.25rem}p.aside{font-size:.8rem}p.note{font-size:.64rem;letter-spacing:.01rem;max-width:18.1898940355rem}input,textarea{box-sizing:border-box}input[type=checkbox],input[type=color],input[type=date],input[type=datetime-local],input[type=datetime],input[type=email],input[type=month],input[type=number],input[type=password],input[type=radio],input[type=search],input[type=tel],input[type=text],input[type=time],input[type=url],input[type=week],select,textarea{background-color:#fff;border:1px solid #ddd;box-shadow:inset 0 1px 2px rgba(0,0,0,.07);color:#32373c;outline:none;transition:border-color .05s ease-in-out}input[type=checkbox]:focus,input[type=color]:focus,input[type=date]:focus,input[type=datetime-local]:focus,input[type=datetime]:focus,input[type=email]:focus,input[type=month]:focus,input[type=number]:focus,input[type=password]:focus,input[type=radio]:focus,input[type=search]:focus,input[type=tel]:focus,input[type=text]:focus,input[type=time]:focus,input[type=url]:focus,input[type=week]:focus,select:focus,textarea:focus{border-color:#5b9dd9;box-shadow:0 0 2px rgba(30,140,190,.8)}input[type=email],input[type=url]{direction:ltr}input[type=number]{height:28px;line-height:inherit}input[type=checkbox],input[type=radio]{background:#fff;border:1px solid #b4b9be;box-shadow:inset 0 1px 2px rgba(0,0,0,.1);clear:none;color:#555;cursor:pointer;display:inline-block;height:16px;line-height:0;margin:-4px 4px 0 0;min-width:16px;outline:0;padding:0!important;text-align:center;transition:border-color .05s ease-in-out;vertical-align:middle;width:16px;-webkit-appearance:none}input[type=checkbox]:checked:before,input[type=radio]:checked:before{display:inline-block;float:left;font:normal 21px/1 dashicons;vertical-align:middle;width:16px;speak:none;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}input[type=checkbox].disabled,input[type=checkbox].disabled:checked:before,input[type=checkbox]:disabled,input[type=checkbox]:disabled:checked:before,input[type=radio].disabled,input[type=radio].disabled:checked:before,input[type=radio]:disabled,input[type=radio]:disabled:checked:before{opacity:.7}input[type=checkbox]:checked:before{color:#1e8cbe;content:"";margin:-3px 0 0 -4px}input[type=radio]{border-radius:50%;line-height:10px;margin-right:4px}input[type=radio]:checked+label:before{color:#82878c}input[type=radio]:checked:before{background-color:#1e8cbe;border-radius:50px;content:"•";font-size:24px;height:6px;line-height:16px;margin:4px;text-indent:-9999px;width:6px}input[type=reset]:active,input[type=reset]:hover{color:#00a0d2}input[type=search]{-webkit-appearance:textfield}input[type=search]::-webkit-search-decoration{display:none}button,input,select,textarea{font-family:inherit;font-size:inherit;font-weight:inherit}input,select,textarea{border-radius:0;font-size:14px;padding:3px 5px}textarea{line-height:1.4;overflow:auto;padding:2px 6px;resize:vertical}textarea.code{line-height:1.4;padding:4px 6px 1px}label{cursor:pointer;vertical-align:middle}input,select{margin:1px;padding:3px 5px}input.code{padding-top:6px}input.readonly,input[readonly],textarea.readonly,textarea[readonly]{background-color:#eee}.wp-core-ui :-moz-placeholder,:-moz-placeholder{color:#a9a9a9}input.disabled,input:disabled,select.disabled,select:disabled,textarea.disabled,textarea:disabled{background:hsla(0,0%,100%,.5);border-color:hsla(0,0%,87.1%,.75);box-shadow:inset 0 1px 2px rgba(0,0,0,.04);color:rgba(51,51,51,.5)}input[type=file].disabled,input[type=file]:disabled,input[type=range].disabled,input[type=range]:disabled{background:none;box-shadow:none}input.large-text,textarea.large-text{width:99%}input.regular-text{width:25em}input.small-text{padding:1px 6px;width:50px}input[type=number].small-text{width:65px}input.tiny-text{width:35px}input[type=number].tiny-text{width:45px}@media screen and (max-width:782px){textarea{-webkit-appearance:none}input[type=email],input[type=number],input[type=password],input[type=search],input[type=text]{-webkit-appearance:none;padding:6px 10px}input[type=number]{height:40px}input.code{padding-bottom:5px;padding-top:10px}input[type=checkbox]{-webkit-appearance:none;padding:10px}input[type=checkbox]:checked:before{font:normal 30px/1 dashicons;margin:-3px -5px}input[type=checkbox],input[type=radio]{height:25px;width:25px}input[type=radio]:checked:before{vertical-align:middle;width:9px;height:9px;margin:7px;line-height:16px}input,textarea{font-size:16px}input[type=number].small-text,input[type=password].small-text,input[type=search].small-text,input[type=text].small-text{width:auto;max-width:55px;display:inline;padding:3px 6px;margin:0 3px}input.regular-text{width:100%}label{font-size:14px}fieldset label{display:block}}a.button:active,a.button:focus,a.button:hover{text-decoration:none}.notice{background:#fff;border-left:4px solid #fff;box-shadow:0 1px 1px 0 rgba(0,0,0,.1);margin:1em 0;padding:1px 12px}.notice p{font-size:.8rem;margin:.5em 0;padding:2px}.notice.notice-alt{box-shadow:none}.notice.notice-large{padding:10px 20px}.notice.notice-success{border-left-color:#46b450}.notice.notice-success.notice-alt{background-color:#ecf7ed}.notice.notice-warning{border-left-color:#ffb900}.notice.notice-warning.notice-alt{background-color:#fff8e5}.notice.notice-error{border-left-color:#dc3232}.notice.notice-error.notice-alt{background-color:#fbeaea}.notice.notice-info{border-left-color:#00a0d2}.notice.notice-info.notice-alt{background-color:#e5f5fa}.error-404 .page-content,.error-404 .page-title{text-align:center}.error-404 .page-content .logo-swing{height:10rem;margin:6rem auto;position:relative;text-align:center;width:10rem}.error-404 .page-content .logo-swing .wp-logo{left:0;max-width:none;position:absolute;top:0;width:10rem}@keyframes hinge{10%{width:180px;height:180px;transform:rotate(0deg)}15%{width:185px;height:185px;transform:rotate(0deg)}20%{width:180px;height:180px;transform:rotate(5deg)}40%{transform-origin:top left;animation-timing-function:ease-in-out}60%{transform:rotate(40deg);transform-origin:top left;animation-timing-function:ease-in-out}40%,80%{transform:rotate(60deg);transform-origin:top left;animation-timing-function:ease-in-out;opacity:1}to{transform:translate3d(0,700px,0);opacity:0}}.hinge{animation-duration:2s;animation-name:hinge}.comments-area{margin-top:5em}.comments-area>:last-child{margin-bottom:0}.comments-area .comment-list+.comment-respond{border-top:1px solid #eaeaea}.comments-area .comment-list+.comment-respond,.comments-area .comment-navigation+.comment-respond{padding-top:1.6em}.comments-area .comments-title{margin-bottom:1.3333em}.comments-area .comment-list{list-style:none;margin:0}.comments-area .comment-list .pingback,.comments-area .comment-list .trackback,.comments-area .comment-list article{border-top:1px solid #eaeaea;padding:1.6em 0}.comments-area .comment-list article:not(:only-child){padding-bottom:0}.comments-area .comment-list article+.comment-respond{padding-bottom:1.6em}.comments-area .comment-list .children{list-style:none;margin:0}.comments-area .comment-list .children>li{padding-left:.8em}.comments-area .comment-list .alt{background:none}.comments-area .comment-author{color:#999;margin-bottom:.4em}.comments-area .comment-author .avatar{float:left;height:24px;margin-right:.8em;width:24px}.comments-area .comment-metadata,.comments-area .pingback .edit-link{color:#999;line-height:1.5}.comments-area .comment-metadata a,.comments-area .pingback .edit-link a{color:#777}.comments-area .comment-metadata{font-size:.8rem;margin-bottom:1.6em}.comments-area .comment-metadata .edit-link,.comments-area .pingback .edit-link{margin-left:1em}.comments-area .pingback .edit-link:before{top:5px}.comments-area .comment-content ol,.comments-area .comment-content ul{margin:0 0 1.6em 1.3333em}.comments-area .comment-content>:last-child,.comments-area .comment-content li>ol,.comments-area .comment-content li>ul{margin-bottom:0}.comments-area .comment-content .reply{font-size:12px}.comments-area .comment-content .reply a{border:1px solid #eaeaea;color:#707070;display:inline-block;font-weight:700;line-height:1;margin-top:2em;padding:.4167em .8333em;text-transform:uppercase}.comments-area .comment-content .reply a:focus,.comments-area .comment-content .reply a:hover{border-color:#333;color:#333;outline:0}.comments-area .comment-reply-title a{font-weight:inherit}.comments-area .comment-form label{font-size:.8rem;font-weight:700;display:block;letter-spacing:.04em;line-height:1.5}.comments-area .comment-form input[type=email],.comments-area .comment-form input[type=text],.comments-area .comment-form input[type=url],.comments-area .comment-form textarea{width:100%}.comments-area .comment-awaiting-moderation,.comments-area .comment-notes,.comments-area .form-allowed-tags,.comments-area .logged-in-as{font-size:1rem;line-height:1.5;margin-bottom:2em}.comments-area .no-comments{border-top:1px solid #eaeaea;color:#999;font-weight:700;padding-top:1.6em}.comments-area .comment-navigation+.no-comments{border-top:0}.comments-area .form-allowed-tags code{font-family:Inconsolata,monospace}.comments-area .form-submit{margin-bottom:0}.comments-area .required{color:#c0392b}.entry-content{hyphens:auto;word-wrap:break-word}.entry-content>p:first-child{margin-top:0}.entry-content [class*=col-]~h1,.entry-content [class*=col-]~h2,.entry-content [class*=col-]~h3,.entry-content [class*=col-]~h4,.entry-content [class*=col-]~h5,.entry-content [class*=col-]~h6{clear:none}.entry-header{position:relative}.entry-header .sticky-post{color:#999;font-size:.8rem;font-style:italic;position:absolute;top:-.8rem}.entry-meta{color:#999;font-size:.8rem;margin-bottom:1rem}.entry-meta a{color:#777}.entry-meta>span{margin-right:1rem}.entry-meta>span :last-of-type{margin:0}.entry-meta .byline,.entry-meta .updated:not(.published),.sticky .entry-meta .posted-on{display:none}.group-blog .entry-meta .byline,.single .entry-meta .byline{display:inline}.entry-summary{hyphens:auto;word-wrap:break-word}body:not(.single):not(.search) .site-main .post{margin-bottom:3.0517578125rem;max-width:40em}.gallery{margin-bottom:1.5rem}.gallery .gallery-item{display:inline-block;margin:0;text-align:center;vertical-align:top;width:100%}.gallery.gallery-columns-2 .gallery-item{max-width:50%}.gallery.gallery-columns-3 .gallery-item{max-width:33.33%}.gallery.gallery-columns-4 .gallery-item{max-width:25%}.gallery.gallery-columns-5 .gallery-item{max-width:20%}.gallery.gallery-columns-6 .gallery-item{max-width:16.66%}.gallery.gallery-columns-7 .gallery-item{max-width:14.28%}.gallery.gallery-columns-8 .gallery-item{max-width:12.5%}.gallery.gallery-columns-9 .gallery-item{max-width:11.11%}.gallery .gallery-caption{display:block}.main-navigation{background:#0073aa;clear:both;left:0;position:absolute;top:60px;width:100%}.main-navigation ul{display:none;list-style:none;margin:0;padding-left:0}.main-navigation ul ul{box-shadow:0 3px 3px rgba(0,0,0,.2);float:left;left:-999em;position:absolute;top:1.5em;z-index:99999}.main-navigation ul ul ul{left:-999em;top:0}.main-navigation ul ul li.focus>ul,.main-navigation ul ul li:hover>ul{left:100%}.main-navigation ul ul a{width:200px}.main-navigation ul li.focus>ul,.main-navigation ul li:hover>ul{left:auto}.main-navigation li{border-top:1px solid hsla(0,0%,100%,.2);padding:1rem}.main-navigation a{color:hsla(0,0%,100%,.8);display:block;font-size:.8rem;text-decoration:none}.main-navigation a.active,.main-navigation a:hover{color:#fff}@media screen and (min-width:737px){.main-navigation a.active{border-bottom:1px solid}}.main-navigation.toggled{z-index:1}.main-navigation.toggled ul{display:block}.menu-toggle{background:transparent;border:none;color:#fff;height:3.5rem;position:absolute;right:1rem;top:-58px;width:3.5rem}.toggled .menu-toggle:before{content:""}@media screen and (min-width:737px){.menu-toggle{display:none}.main-navigation{float:right;position:static;width:auto}.main-navigation.toggled{padding:1px 0}.main-navigation ul{display:inline-block;font-size:0}.main-navigation ul li{border:0;display:inline-block;font-size:1rem;margin-right:1rem;padding:0}.main-navigation ul li:last-of-type{margin-right:0}}.comment-content .wp-smiley,.entry-content .wp-smiley,.page-content .wp-smiley{border:none;margin-bottom:0;margin-top:0;padding:0}embed,iframe,object{max-width:100%}body.page .gutters .col-12{width:100%}body.page .entry-header{background:#0073aa;padding:1rem 0}body.page .entry-header .entry-title{color:#fff;font-size:1.5625rem;font-weight:300;line-height:1;margin:0 auto;padding:0 1.5625rem}body.page .entry-header.home{padding:1.5625rem 1.143rem;text-align:center}@media screen and (min-width:737px){body.page .site-header+.site-main .entry-title{padding:initial}}body.page .entry-content,body.page .entry-footer{margin:0 auto;max-width:960px;padding:3.0517578125rem 1.5625rem}.post-navigation{margin:5em auto;padding:0}.post-navigation a{border-bottom:1px solid #eaeaea;color:#444;display:block;font-weight:600;padding:11px 0 12px;text-transform:none;width:100%}.post-navigation a:hover{color:#21759b}.post-navigation .nav-links{border-top:1px solid #eaeaea;hyphens:auto;word-wrap:break-word}.post-navigation .meta-nav{color:#777;display:block;font-size:13px;line-height:2;text-transform:uppercase}.post-navigation .nav-next{text-align:right}.pagination .nav-links{text-align:center}.pagination .nav-links .page-numbers{background-color:#f9f9f9;cursor:hand;display:inline-block;min-width:2em;padding:8px}.pagination .nav-links .page-numbers.dots,.pagination .nav-links .page-numbers.next,.pagination .nav-links .page-numbers.prev{background:none;font-size:.9em;width:auto}.pagination .nav-links .page-numbers.dots{cursor:inherit}@media screen and (max-width:737px){.pagination .nav-links .page-numbers.next,.pagination .nav-links .page-numbers.prev{font-size:0;min-width:0;padding:0}.pagination .nav-links .page-numbers.next:after,.pagination .nav-links .page-numbers.prev:before{background-color:#f9f9f9;display:inline-block;font-size:1rem;line-height:1.5;min-width:2em;padding:8px}.pagination .nav-links .page-numbers.prev:before{content:"‹"}.pagination .nav-links .page-numbers.next:after{content:"›"}}.pagination .nav-links span.page-numbers{background-color:#f7f7f7;font-weight:700}.search-form .search-field{line-height:normal;margin:0;padding:4px 5px;vertical-align:text-bottom}body.search .gutters .col-12{width:100%}body.search .site-main{margin:0 auto;max-width:960px;padding:0 1.5625rem 3.0517578125rem}.site-content{max-width:960px;padding:0 1.5625rem}@media screen and (min-width:737px){.site-content{padding:0 10px 3.0517578125rem}}@media screen and (max-width:737px){.site-content .site-main{float:none;margin:0;width:auto}}.home .site-content,.page .site-content,.site-content.page{margin:auto;max-width:none;padding:0}.site-content .page-title{font-size:1.25rem;font-weight:400}.site-content .no-results{margin:0 auto 3.0517578125rem;max-width:40em;padding:0 2rem}.site-description{color:hsla(0,0%,100%,.8);font-size:1.25rem;font-weight:300;margin:-.4rem auto 2rem;text-align:center}.site-header{background:#0073aa;padding:1rem 0;position:relative}.site-header .site-branding{margin:0 auto;max-width:960px;padding:0 1.5625rem}@media screen and (min-width:737px){.site-header .site-branding{padding:0 10px}}.site-header.home{padding:1.5625rem 1.143rem;text-align:center}.site-title{display:inline-block;font-size:1.5625rem;font-weight:300;line-height:1;margin:0 2rem 0 0;max-width:none}.site-title a{color:#fff;font-weight:300}.site-title a:active,.site-title a:focus,.site-title a:hover{text-decoration:none}.site-header.home .site-title{display:inherit;font-size:3.8146972656rem;margin:2rem 0 1rem}.widget-area{font-size:.8rem}@media screen and (min-width:480px) and (max-width:768px){.widget-area{display:flex}.widget-area .widget{width:48%}}#wporg-footer{background-color:#f7f7f7;border-top:1px solid #dfdfdf;padding:22px 14px 65px}#wporg-footer,#wporg-footer .wrapper{clear:both;margin:0 auto;overflow:auto}#wporg-footer .wrapper{max-width:930px}#wporg-footer ul{float:left;margin-bottom:20px;margin-left:24px;overflow:auto;padding-left:0;width:135px}@media screen and (min-width:960px){#wporg-footer ul:first-child{margin-left:0}}#wporg-footer ul li{color:#bbb;font-size:14px;list-style-type:none;margin-bottom:1px}#wporg-footer ul li a{text-decoration:none;text-decoration-skip-ink:none}#wporg-footer ul li a:hover{color:#0073aa;text-decoration:underline}#wporg-footer .cip{clear:both;color:#ccc;float:none;font-size:.8rem;letter-spacing:.3em;margin:35px auto 0;text-align:center;text-transform:uppercase}#wporg-footer .cip.cip-image{background:url(//s.w.org/style/images/codeispoetry.png?1=) 50% no-repeat;background-size:190px 15px;height:15px;text-indent:-9999px;width:190px}@media only screen and (-webkit-min-device-pixel-ratio:1.5),only screen and (min-resolution:1.5dppx),only screen and (min-resolution:144dpi){#wporg-footer .cip.cip-image{background-image:url(//s.w.org/style/images/codeispoetry-2x.png?1=)}}@media screen and (min-width:561px) and (max-width:959px){#wporg-footer .wrapper{max-width:600px}#wporg-footer ul{margin-left:2%;width:32%}#wporg-footer ul:nth-child(3n+1){margin-left:0}#wporg-footer ul:nth-child(4n){clear:both}}@media screen and (max-width:560px){#wporg-footer .wrapper{max-width:360px}#wporg-footer ul{margin-left:4%;width:48%}#wporg-footer ul:nth-child(odd){margin-left:0;clear:both}}#wporg-header{background:#23282d;height:140px;position:relative;text-align:center;width:100%}#wporg-header .wrapper{margin:0 auto;max-width:960px}#wporg-header h1{display:inline-block;margin:auto;width:303px}#wporg-header h1 a{background:url(//s.w.org/style/images/wporg-logo.svg?3=) 0 no-repeat;background-size:290px 46px;display:block;height:88px;text-indent:-9999px}#wporg-header h2.rosetta{clear:none;color:#dfdfdf;font-family:Georgia,Times New Roman,serif;font-size:30px;margin:0 0 0 60px}#wporg-header h2.rosetta a{border-bottom:none;color:#dfdfdf;display:block;height:52px;line-height:22px;padding:0}#wporg-header h2.rosetta a:hover{text-decoration:none}#wporg-header #wporg-header-menu{background:#23282d;left:-75%;list-style:none;margin:0;max-width:75%;min-width:200px;position:absolute;text-align:left;top:100%;transition:left .3s;z-index:100000}#wporg-header #wporg-header-menu.toggled{left:0}#wporg-header ul li{list-style-type:none;position:relative}#wporg-header ul li a{color:#eee;display:block;font-family:Open Sans,Helvetica,Arial,Liberation Sans,sans-serif;font-size:13px;font-weight:600;height:34px;line-height:34px;margin:0 4px;padding:10px 30px;text-decoration:none}#wporg-header ul li a.subcurrent{font-weight:700}@media (max-width:768px){#wporg-header ul li a{height:auto}}#wporg-header ul li.current-menu-item a,#wporg-header ul li.current_page_parent a,#wporg-header ul li a.current,#wporg-header ul li a:hover{color:#00a0d2}#wporg-header ul li#download,#wporg-header ul li.download{float:right;height:34px;margin-right:14px;overflow:hidden;padding:0 0 34px}@media screen and (max-width:767px){#wporg-header ul li#download,#wporg-header ul li.download{display:block;float:none;margin:10px 20px 20px;padding-bottom:0;height:auto}#wporg-header ul li#download a,#wporg-header ul li.download a{padding:4px 10px;text-align:center}}#wporg-header ul li#download a,#wporg-header ul li.download a{margin:0;padding:0 16px}#wporg-header ul li#download a:hover,#wporg-header ul li.download a:hover{color:#eee}#wporg-header ul li#download.current,#wporg-header ul li#download.current-menu-item,#wporg-header ul li#download .uparrow,#wporg-header ul li.download.current,#wporg-header ul li.download.current-menu-item,#wporg-header ul li.download .uparrow{display:none}#wporg-header ul li .nav-submenu{clip:rect(1px,1px,1px,1px);height:1px;left:-2px;margin:0;overflow:hidden;padding:0;position:absolute;width:1px;z-index:99999}#wporg-header ul li .nav-submenu li a{display:inline-block;height:24px;line-height:24px;margin:0;white-space:nowrap}@media screen and (min-width:768px){#wporg-header #head-search{float:right;margin-right:14px;padding-top:30px}}#wporg-header #head-search form{border-bottom:1px solid #3f3f3f;display:inline-block;margin-left:60px;width:288px}#wporg-header #head-search form input.text{background:#191e23;border:0;border-radius:0;box-sizing:content-box;color:#b4b9be;float:left;font-family:Open Sans,sans-serif;font-size:12px;height:24px;margin:0;outline:none;padding:3px;vertical-align:top;width:256px}#wporg-header #head-search form input.text::-moz-placeholder{color:#eee}@media screen and (max-width:480px){#wporg-header #head-search form input.text{width:216px}}#wporg-header #head-search form .button{background:#191e23 url(//s.w.org/wp-includes/images/admin-bar-sprite.png?d=20120831) no-repeat 2px 5px;border:none;border-radius:0;box-shadow:none;float:left;height:30px;margin:0;padding:0;text-shadow:none!important;width:26px}@media screen and (max-width:480px){#wporg-header #head-search form{width:248px}}@media screen and (min-width:480px){#wporg-header #head-search form{margin-left:0}}@media screen and (min-width:768px){#wporg-header{height:120px;text-align:inherit}#wporg-header h1{float:left;padding-left:10px}#wporg-header h2.rosetta{float:left;margin-left:0;padding:36px 27px 0}#wporg-header #headline h2{text-rendering:optimizeLegibility}#wporg-header #wporg-header-menu{float:left;height:46px;list-style:none;margin:-15px 0 0;max-width:inherit;min-width:0;padding:0;position:static;width:100%}#wporg-header ul li{float:left;position:relative}#wporg-header ul li a{height:46px;padding:0 6px}#wporg-header ul li a.current~.uparrow{border-bottom:9px solid #f7f7f7;border-left:9px solid transparent;border-right:9px solid transparent;height:0;margin:-8px auto 0;width:0}#wporg-header ul li.current-menu-item:after,#wporg-header ul li.current_page_parent:after{border-bottom:9px solid #f7f7f7;border-left:9px solid transparent;border-right:9px solid transparent;content:"";height:0;left:50%;margin:-8px 0 0 -9px;position:absolute;width:0}#wporg-header ul li .nav-submenu:hover~.uparrow,#wporg-header ul li:hover .nav-submenu~.uparrow{border-bottom:9px solid #32373c;border-left:9px solid transparent;border-right:9px solid transparent;height:0;margin:-10px auto 0;width:0}#wporg-header ul li .nav-submenu{background:#32373c;border:1px solid #32373c;border-top:0;margin-top:-1px;min-width:0}#wporg-header ul li .nav-submenu li{float:none}#wporg-header ul li .nav-submenu li a{height:34px;line-height:34px}#wporg-header .nav-menu .focus>ul,#wporg-header .nav-menu ul li:hover>ul,#wporg-header ul.nav-menu .focus>ul,#wporg-header ul.nav-menu li:hover>ul{clip:inherit;height:inherit;overflow:inherit;width:inherit}#wporg-header ul li.current-menu-item:after,#wporg-header ul li.current_page_parent:after,#wporg-header ul li a.current~.uparrow{border-bottom-color:#0073aa}}.page-download #wporg-header #download,.page-parent-download #wporg-header #download{display:none}#mobile-menu-button{background:none;border:none;box-shadow:none;display:block;float:left;font-family:dashicons;font-size:16px;font-style:normal;font-weight:400;left:10px;line-height:1;padding:1px;position:absolute;text-align:center;text-decoration:inherit;text-shadow:none;top:75px;transition:color .1s ease-in;vertical-align:top;-webkit-font-smoothing:antialiased}#mobile-menu-button:before{border:none;box-sizing:border-box;color:#888;content:"";display:inline-block;float:left;font:normal 50px/1 Dashicons;margin:0;outline:none;padding:3px;text-decoration:none;vertical-align:middle;-webkit-font-smoothing:antialiased}@media screen and (min-width:768px){#mobile-menu-button{display:none}}#download-mobile{background:#f7f7f7;border-bottom:1px solid #ddd}#download-mobile .wrapper{padding:20px 0;text-align:center}#download-mobile span.download-ready{font-size:1.6em;margin:0 .25em}#download-mobile a.download-button{font-size:1.6em;height:inherit;margin:10px .25em;padding:10px 15px}.category-context__bar{margin:0 1.5rem;background:#edeff0;border-radius:2px;font-size:.8125rem;overflow:auto;transition:all 50ms ease-out}.category-context__bar>div{display:flex;align-items:center;justify-content:space-between}@media only screen and (min-width:782px){.category-context__bar{margin:0 1.5rem}}@media only screen and (min-width:960px){.category-context__bar{margin:0 auto;max-width:960px}}.category-context__bar ul{margin:0;padding:0;display:flex;justify-content:space-between}.category-context__bar ul li{list-style:none;font-size:.8125rem}.category-context__bar ul li a{display:block;padding:1.125rem .75rem;text-decoration:none}.category-context__bar ul li:last-child a{padding-right:1.5rem}.category-context__bar__copy{margin:0;padding:1.125rem 1.5rem;font-size:.8125rem;font-weight:400}.category-context__bar__title{margin:0;padding-right:1.5rem;color:#555d66;font-size:.75rem;font-weight:400;text-transform:uppercase}.category-context__bar__links{display:flex;align-items:center}@media only screen and (max-width:782px){.category-context__bar__links{display:none}}.category-context__bar--is-hidden{height:0;overflow:hidden}.category-menu{margin:0;padding:0;position:relative;background:linear-gradient(180deg,hsla(0,0%,100%,0) 94%,#0073aa 0);background-repeat:no-repeat;background-size:0;background-position-x:20px;transition:all 75ms ease-out}.category-menu li{display:inline-block;margin:0;list-style:none}.category-menu a{display:block;padding:.75rem;color:#40464d;font-size:.875rem;text-decoration:none}.category-menu a:active,.category-menu a:focus,.category-menu a:hover,li .category-menu--is-active{color:#000}.category-menu__mobile{padding:0!important;border-top:none!important}.category-menu__mobile ul{margin:0;padding:0;background:#23282d}.category-menu__mobile li{list-style:none;border-top:1px solid #32373c}.category-menu__mobile li a{display:block;padding:1rem 1.5rem;font-size:.875rem;text-decoration:none;color:#ccd0d4}.category-menu__mobile>.components-panel__body-title{margin:0!important}.category-menu__mobile>.components-panel__body-title>button{padding:1.5rem}.category-menu--is-loading{height:24px;position:relative}.category-menu--is-loading:after{content:"";position:absolute;background:#f3f4f5;border-radius:4px;width:80%;height:24px;left:0;transition:none}.category-search{display:flex;align-items:center;background:#fff;border:1px solid #6c7782;border-radius:2px}.category-search input[type=search]{flex-grow:1;margin:0;padding:.25rem .5rem;border:none;box-shadow:none;font-size:.8125rem}.category-search__button{display:flex;background:transparent;border:none;color:#6c7782}.category-search--is-loading{display:block;height:24px;min-width:100%;background:#f3f4f5;border-radius:4px}@media only screen and (min-width:480px){.category-search--is-loading{width:224px}}.pattern__copy-button{transition:all 75ms ease-in-out}.pattern__copy-button.is-small{font-size:.75rem;padding:.75rem;height:auto}.pattern__favorite-button{position:relative;font-size:.875rem;height:2.25rem;width:2.25rem;border-radius:2px;color:#606a74}.pattern__favorite-button svg{position:absolute;top:calc(50% - .75rem);left:calc(50% - .75rem);height:1.5rem;width:1.5rem;transition:all .15s ease-out}.pattern__favorite-button svg path{fill:#6c7782}.pattern__favorite-button .pattern__favorite-filled{opacity:0}.pattern__favorite-button:hover{color:#555d66;background:transparent}.pattern__favorite-button:hover svg path{fill:#555d66}.pattern__favorite-button:active{background:transparent;box-shadow:none;transform:none}.pattern__favorite-button.is-favorited{color:#555d66}.pattern__favorite-button.is-favorited svg path{fill:#d94f4f}.pattern__favorite-button.is-favorited .pattern__favorite-outline{opacity:0;transform:scale(2.8)}.pattern__favorite-button.is-favorited .pattern__favorite-filled{opacity:1}.pattern__favorite-button.is-favorited:hover .pattern__favorite-filled{animation:HeartBeat .9s infinite}@media (prefers-reduced-motion){.pattern__favorite-button.is-favorited:hover .pattern__favorite-filled{animation:none}}.pattern__favorite-button.has-label{padding:12px 18px 12px 38px;height:auto;width:auto}.pattern__favorite-button.has-label svg{top:calc(50% - 12px);left:9px}@keyframes HeartBeat{0%{transform:scale(1)}25%{transform:scale(1.2)}40%{transform:scale(1)}60%{transform:scale(1.2)}to{transform:scale(1)}}.main-navigation{float:none;position:static;width:auto}.main-navigation a{font-size:.8125rem}.main-navigation.toggled div.menu{position:absolute;top:57px;right:0;width:100%;background:#0073aa}.menu-toggle{position:static;height:auto;width:auto;font-size:1.5625rem;overflow:hidden;-webkit-appearance:none}body.page .entry-header{background:none;padding:0}body.page .entry-header .entry-title{color:inherit;margin:2rem auto 1rem;max-width:960px}@media screen and (min-width:737px){body.page .entry-header .entry-title{padding:0 10px}}.pattern-grid-menu{margin:0 auto;max-width:960px;display:flex;flex-direction:column;justify-content:space-between;align-items:center}.pattern-grid-menu>:first-child,.pattern-grid-menu>:last-child{width:100%}.pattern-grid-menu>:last-child{margin:1.5rem;width:calc(100% - 3rem)}@media only screen and (min-width:782px){.pattern-grid-menu{margin:1.5rem;flex-direction:row}.pattern-grid-menu>:last-child{margin:0;width:auto}}@media only screen and (min-width:960px){.pattern-grid-menu{margin:1.5rem auto}}.pattern-grid{max-width:960px;margin:1.5rem}@media screen and (min-width:600px){.pattern-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(280px,1fr));gap:1.5rem}.pattern-grid>*{align-self:baseline}}@media screen and (min-width:960px){.pattern-grid{margin-left:auto;margin-right:auto}}.pattern-grid__pattern{position:relative;margin:0 0 1.5rem;border:1px solid #d7dade;border-radius:2px;transition:all 75ms ease-in-out}@media screen and (min-width:600px){.pattern-grid__pattern{display:inline-block;margin:0}}.pattern-grid__pattern .pattern-grid__preview{overflow:hidden}.pattern-grid__pattern .pattern-grid__actions{position:absolute;right:0;bottom:0;left:0;display:flex;align-items:center;padding:.375rem;background:hsla(0,0%,100%,.8);backdrop-filter:blur(3px);opacity:0;transform:translateY(6px);transition:all 75ms ease-in-out}.pattern-grid__pattern .pattern-grid__actions .pattern-grid__title{flex-grow:1;margin:0;padding:0 .375rem 0 .75rem;font-size:.75rem;pointer-events:none}.pattern-grid__pattern .pattern-grid__actions .pattern__copy-button,.pattern-grid__pattern .pattern-grid__actions .pattern__favorite-button{flex-shrink:0}.pattern-grid__pattern .pattern-grid__actions .button+.button{margin-left:.375rem}.pattern-grid__pattern:focus-within .pattern-grid__actions,.pattern-grid__pattern:hover .pattern-grid__actions{opacity:1;transform:translateY(0)}.pattern-preview__container{padding:2rem 0 0;background:#f3f4f5}.pattern-preview__viewport{position:relative;margin:0 auto;padding:0 20px;max-width:100vw;min-width:320px}.pattern-preview__viewport .pattern-preview__viewport-iframe{background:#fff;border:1px solid #e8eaeb;vertical-align:middle;max-width:100vw}.pattern-preview__viewport:focus-within .pattern-preview__resize-help{clip:auto;clip-path:none;height:auto;margin:initial;overflow:initial;width:auto;bottom:-1rem;left:20px;right:20px;padding:8px 16px;background:#fff;border-radius:2px;border:1px solid #d7dade;text-align:center}.pattern-preview__drag-handle{position:absolute;top:0;bottom:0;width:20px}.pattern-preview__drag-handle.is-left{left:0}.pattern-preview__drag-handle.is-right{right:0}.pattern-preview__drag-handle-button{position:absolute;top:calc(50% - 50px);left:6px;padding:0;width:8px;height:100px;appearance:none;cursor:grab;outline:none;background:#7e8993;border-radius:99999px;border:none}.pattern-preview__drag-handle-button:hover{background:#6c7782}.pattern-preview__drag-handle-button:active{cursor:grabbing;background:#606a74}.pattern-preview__drag-handle-button:focus{box-shadow:0 1px 0 #0073aa,0 0 2px 1px #33b3db}body.single-wporg-pattern{box-sizing:border-box;font-size:14px;font-weight:400;line-height:1.2}body.single-wporg-pattern .site-content{margin:auto;max-width:none;padding:0}body.single-wporg-pattern .entry-header{max-width:960px;padding:2rem 0;margin-left:auto;margin-right:auto}body.single-wporg-pattern .entry-header .entry-title{margin-top:0;line-height:1.2}body.single-wporg-pattern .pattern-actions{display:flex;align-items:stretch}body.single-wporg-pattern .pattern-actions button+button{margin-left:2em}body.single-wporg-pattern .entry-content{max-width:960px;margin-left:auto;margin-right:auto}body.single-wporg-pattern .pattern__meta{padding:2rem 0;background:#f3f4f5}body.single-wporg-pattern .pattern__meta>div{max-width:960px;margin-left:auto;margin-right:auto;display:flex;justify-content:space-between}body.single-wporg-pattern .pattern__meta .pattern-preview__report{text-align:right}.site-header:not(.home) .search-form{display:flex;align-items:center}.site-header:not(.home) .search-form>input{flex:1;border:0;border-radius:2px 0 0 2px;display:inline-block;font-size:12px;padding:5px 10px;position:relative;width:auto;height:100%}.site-header:not(.home) .search-form button{margin:0;border-radius:0 2px 2px 0;padding:3px 12px;height:unset}.search-form--is-inline .search-form{display:flex;justify-content:space-between;background:#fff}.search-form--is-inline .search-form>label{flex:1}.search-form--is-inline .search-form input{padding:.5rem;background:transparent;border:none;box-shadow:none;width:100%;font-size:14px}@media only screen and (min-width:768px){.search-form--is-inline .search-form input{font-size:16px}}.search-form--is-inline .search-form button{background:transparent;margin-bottom:0;border:0;box-shadow:none;height:inherit;text-shadow:none;color:#32373c}.search-form--is-inline .search-form button:focus{-webkit-box-shadow:0 0 2px 1px #0073aa;box-shadow:0 0 2px 1px #0073aa}.search-form--is-centered .search-form{margin:0 auto}.search-form--is-constrained .search-form{max-width:36rem}.search-form--is-muted .search-form{border-color:#d7dade!important}.search-form--is-muted .search-form button,.search-form--is-muted .search-form input{background:#f8f9f9;color:#7e8993}.search-form--has-medium-text .search-form input{font-size:14px}.search-form--has-border .search-form{border:1px solid #7e8993}.section-heading_link,.section-heading_title{margin-bottom:0}.section-heading_title{font-weight:300}.section-heading_title .archive-title-prefix{display:block;font-size:1rem}.section-heading_link{text-decoration:underline;font-weight:600;margin-top:1.5rem!important}@media only screen and (min-width:768px){.section-heading_link{margin-top:0!important}}.section-heading_description{margin:1rem 0 0}.section-heading_description :last-child{margin-bottom:0}.section-heading--with-space{padding-bottom:16px}.site-content{margin:0 auto;max-width:none;padding:0}body.home .site-header{padding:3.75rem 1rem;text-align:left}body.home .site-branding{display:grid;grid-template-rows:auto 1fr;grid-template-columns:1fr 22rem}body.home .site-branding>*{align-self:center}@media screen and (max-width:736px){body.home .site-branding{display:block}}body.home .site-title.site-title{grid-column-start:1;grid-row-start:1;margin-top:0;text-align:left;font-size:3rem;line-height:1.25}body.home .site-description{grid-column-start:1;grid-row-start:2;margin:0;font-size:1.25rem;line-height:1.6;text-align:left;color:#fff}body.home .site-callout{grid-column-start:2;grid-row-start:1;grid-row-end:span 2;margin-left:4rem;padding:1.125rem 1.5rem 1.5rem;font-size:.875rem;line-height:1.6;background:#fff;box-shadow:.75rem .75rem 0 rgba(0,0,0,.15)}body.home .site-callout h2{margin-top:0;font-size:1.125rem;line-height:1.25;font-weight:600}body.home .site-callout p:last-child{margin-bottom:0}@media screen and (max-width:736px){body.home .site-callout{margin:2rem auto 0;max-width:24rem}}body:not(.home) .site-branding{display:flex;align-items:center;justify-content:space-between;font-size:.8125rem;color:#fff}body:not(.home) .site-branding a{color:#fff}body:not(.home) .site-branding .sep{margin-left:.5rem;margin-right:.5rem}body:not(.home) .site-branding .is-current-page{font-weight:600}.site-title a{text-decoration:none}.site-title a:active,.site-title a:focus,.site-title a:hover{color:#fff}.has-wporg-blue-color{color:#1e8cbe}.has-wporg-blue-background-color{background-color:#1e8cbe}.has-wporg-purple-color{color:#826eb4}.has-wporg-purple-background-color{background-color:#826eb4}.has-wporg-white-color{color:#fff}.has-wporg-white-background-color{background-color:#fff}.home-page .shapes{position:relative;margin:0 auto}.home-page .shapes .parallelogram p:before{font-size:64px;height:64px;left:-16px;position:relative}.home-page .shapes .parallelogram{color:#fff;display:block;margin:0 auto;opacity:.9;padding:60px 40px;text-align:center;text-decoration:none}.home-page .shapes strong{display:block;font-size:28px;font-weight:300;padding-bottom:15px;padding-top:15px}.home-page .shapes p{color:#fff;font-size:16px;font-weight:300;margin:0}.home-page .shapes u{display:block;font-size:18px;padding-top:15px}@media only screen and (min-width:768px){.home-page .shapes{height:400px}.home-page .shapes .parallelogram{width:50%;position:absolute;padding:50px 90px}}@media only screen and (min-width:960px){.home-page .shapes .parallelogram{-webkit-transform:skew(-15deg);-ms-transform:skew(-15deg);transform:skew(-15deg)}.home-page .shapes .parallelogram:before,.home-page .shapes p{-webkit-transform:skew(15deg);-ms-transform:skew(15deg);transform:skew(15deg)}}@media only screen and (min-width:1200px){.home-page .shapes{margin:0 -60px}}.terms{font-style:italic;font-size:14px}
     1@charset "UTF-8";[class*=col-]{margin:inherit}.row{display:flex;flex-direction:row;flex-wrap:wrap}@media (max-width:768px){.row{flex-direction:column;flex-wrap:nowrap}}.row.gutters>.row{margin-left:-2%}@media (max-width:768px){.row.gutters>.row{margin-left:0}}.row.gutters>.row>[class*=col-]{margin-left:2%}@media (max-width:768px){.row.gutters>.row>[class*=col-]{margin-left:0}}.row.around{justify-content:space-around}.row.between{justify-content:space-between}.row.auto .col{flex-grow:1}.col-1{width:8.3333333333%}.offset-1{margin-left:8.3333333333%}.col-2{width:16.6666666667%}.offset-2{margin-left:16.6666666667%}.col-3{width:25%}.offset-3{margin-left:25%}.col-4{width:33.3333333333%}.offset-4{margin-left:33.3333333333%}.col-5{width:41.6666666667%}.offset-5{margin-left:41.6666666667%}.col-6{width:50%}.offset-6{margin-left:50%}.col-7{width:58.3333333333%}.offset-7{margin-left:58.3333333333%}.col-8{width:66.6666666667%}.offset-8{margin-left:66.6666666667%}.col-9{width:75%}.offset-9{margin-left:75%}.col-10{width:83.3333333333%}.offset-10{margin-left:83.3333333333%}.col-11{width:91.6666666667%}.offset-11{margin-left:91.6666666667%}.col-12{width:100%}.offset-12{margin-left:100%}.gutters>.col-1{width:6.33333%}.gutters>.col-1:nth-child(n+13){margin-top:2%}.gutters>.offset-1{margin-left:10.33333%!important}.gutters>.col-2{width:14.66667%}.gutters>.col-2:nth-child(n+7){margin-top:2%}.gutters>.offset-2{margin-left:18.66667%!important}.gutters>.col-3{width:23%}.gutters>.col-3:nth-child(n+5){margin-top:2%}.gutters>.offset-3{margin-left:27%!important}.gutters>.col-4{width:31.33333%}.gutters>.col-4:nth-child(n+4){margin-top:2%}.gutters>.offset-4{margin-left:35.33333%!important}.gutters>.col-5{width:39.66667%}.gutters>.offset-5{margin-left:43.66667%!important}.gutters>.col-6{width:48%}.gutters>.col-6:nth-child(n+3){margin-top:2%}.gutters>.offset-6{margin-left:52%!important}.gutters>.col-7{width:56.33333%}.gutters>.offset-7{margin-left:60.33333%!important}.gutters>.col-8{width:64.66667%}.gutters>.offset-8{margin-left:68.66667%!important}.gutters>.col-9{width:73%}.gutters>.offset-9{margin-left:77%!important}.gutters>.col-10{width:81.33333%}.gutters>.offset-10{margin-left:85.33333%!important}.gutters>.col-11{width:89.66667%}.gutters>.offset-11{margin-left:93.66667%!important}.gutters>.col-12{width:98%}.gutters>.offset-12{margin-left:102%!important}@media (max-width:768px){[class*=" offset-"],[class^=offset-]{margin-left:0}}.first{order:-1}.last{order:1}@media (max-width:768px){.row [class*=col-]{margin-left:0;width:100%}.row.gutters [class*=col-]{margin-bottom:16px}.first-sm{order:-1}.last-sm{order:1}}.gutters .column.push-left,.push-left{margin-right:auto}.gutters .column.push-right,.push-right{margin-left:auto}.gutters .column.push-center,.push-center{margin-left:auto;margin-right:auto}.gutters .column.push-middle,.push-middle{margin-top:auto;margin-bottom:auto}.push-bottom{margin-top:auto}@media (max-width:768px){.gutters .column.push-left-sm,.push-left-sm{margin-left:0}.gutters .column.push-center-sm,.push-center-sm{margin-left:auto;margin-right:auto}.push-top-sm{margin-top:0}}.align-middle{align-items:center}.align-right{justify-content:flex-end}.align-center{justify-content:center}@media (max-width:768px){.align-left-sm{justify-content:flex-start}}.float-right{float:right}.float-left{float:left}@media (max-width:768px){.float-left,.float-right{float:none}}.fixed{position:fixed;top:0;left:0;z-index:100;width:100%}html{font-family:sans-serif;-webkit-text-size-adjust:100%;-ms-text-size-adjust:100%}body{margin:0}article,aside,details,figcaption,figure,footer,header,main,menu,nav,section,summary{display:block}audio,canvas,progress,video{display:inline-block;vertical-align:baseline}audio:not([controls]){display:none;height:0}[hidden],template{display:none}a{background-color:transparent}abbr[title]{border-bottom:1px dotted}b,strong{font-weight:700}dfn{font-style:italic}h1{font-size:2em;margin:.67em 0}mark{background:#ff0;color:#000}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sup{top:-.5em}sub{bottom:-.25em}img{border:0}svg:not(:root){overflow:hidden}figure{margin:1em 40px}hr{box-sizing:content-box;height:0}code,kbd,pre,samp{font-family:monospace,monospace;font-size:1em}button,input,optgroup,select,textarea{color:inherit;font:inherit;margin:0}button{overflow:visible}button,select{text-transform:none}button,html input[type=button],input[type=reset],input[type=submit]{-webkit-appearance:button;cursor:pointer}button[disabled],html input[disabled]{cursor:default}button::-moz-focus-inner,input::-moz-focus-inner{border:0;padding:0}input{line-height:normal}input[type=checkbox],input[type=radio]{box-sizing:border-box;padding:0}input[type=number]::-webkit-inner-spin-button,input[type=number]::-webkit-outer-spin-button{height:auto}input[type=search]::-webkit-search-cancel-button,input[type=search]::-webkit-search-decoration{-webkit-appearance:none}fieldset{border:1px solid silver;margin:0 2px;padding:.35em .625em .75em}legend{border:0;padding:0}optgroup{font-weight:700}table{border-spacing:0}td,th{padding:0}p{margin:1rem 0}cite,dfn,em,i{font-style:italic}blockquote{margin:0 1.5rem}address{margin:0 0 1.5rem}pre{background:#eee;font-family:Courier\ 10 Pitch,Courier,monospace;font-size:.9375rem;line-height:1.6;margin-bottom:1.6rem;max-width:100%;overflow:auto;padding:1.6rem}code,kbd,tt,var{font-family:Monaco,Consolas,Andale Mono,DejaVu Sans Mono,monospace;font-size:.9375rem}abbr,acronym{border-bottom:1px dotted #666;cursor:help}ins,mark{background:#fff9c0;text-decoration:none}big{font-size:125%}html{box-sizing:border-box}*,:after,:before{box-sizing:inherit}body{background:#fff}blockquote,q{quotes:"" ""}blockquote:after,blockquote:before,q:after,q:before{content:""}blockquote{border-left:2px solid #767676;color:#767676;margin:1rem 0;padding-left:.8rem}blockquote cite{font-size:.8rem}figure{margin:0}hr{background-color:#eee;border:0;height:2px;margin:5rem auto}img{height:auto;max-width:100%}h1,h2,h3,h4,h5,h6{font-family:Open Sans,sans-serif;clear:both;line-height:1.5;margin:2rem 0 1rem}.h1,h1{font-size:2.44140625rem}.h1,.h2,h1,h2{font-weight:300}.h2,h2{font-size:1.953125rem}.h3,h3{font-size:1.5625rem;font-weight:400}.h4,h4{font-size:1.25rem;color:#32373c;font-weight:600;padding:0}.h5,h5{font-size:1rem;letter-spacing:.01rem}.h5,.h6,h5,h6{font-weight:600;text-transform:uppercase}.h6,h6{font-size:.8rem;letter-spacing:.8px}a{color:#0073aa;text-decoration:none}a:active,a:focus,a:hover{text-decoration:underline}a:focus{outline:thin dotted}a:active,a:hover{outline:0}li>a,p a{text-decoration:underline}li>a:hover,p a:hover{color:#d54e21}ol,ul{margin:0 0 1.5em 1.5em;padding:0}ul{list-style:square}ol{list-style:decimal}ol.unmarked-list,ul.unmarked-list{list-style:none;padding-left:0}li>ol,li>ul{margin-bottom:0}dt{font-weight:700}dd{margin:0 1.5em 1.5em}table{border:1px solid #eee;border-collapse:collapse;font-size:.8rem;margin:0 0 1rem;padding:0;width:100%}table thead{background:#32373c;color:#fff}table td,table th{border:1px solid #eee;font-weight:400;margin:0;padding:.4rem;text-align:left;vertical-align:top}table tbody tr:nth-child(2n){background:#f7f7f7}html{font-size:100%}body,button,input,select,textarea{color:#32373c;font-family:Open Sans,sans-serif;font-size:100%;line-height:1.5}@media screen and (min-width:737px){html{font-size:1.125rem}}.custom-select{display:inline-block;box-sizing:border-box;padding:.5rem 2rem .5rem .8rem;width:auto;font-size:1em;line-height:1.3;border:1px solid #6c7782;box-shadow:none;border-radius:.5em;-moz-appearance:none;-webkit-appearance:none;appearance:none;background-color:transparent;background-image:url('data:image/svg+xml;charset=US-ASCII,%3Csvg width="14" height="8" xmlns="http://www.w3.org/2000/svg"%3E%3Cpath d="M2 0L7 5L12 0L14 1L7 8L0 1L2 0Z" fill="%23555D66"/%3E%3C/svg%3E%0A');background-repeat:no-repeat;background-position:right .7em top 50%;background-size:.65em auto}.custom-select::-ms-expand{display:none}.custom-select:focus{box-shadow:0 0 1px 3px rgba(59,153,252,.7);box-shadow:0 0 0 3px -moz-mac-focusring;color:#222;outline:none}.custom-select option{font-weight:400}html{font-size:1rem}@media screen and (min-width:737px){html{font-size:1rem}}.screen-reader-text{clip:rect(1px,1px,1px,1px);height:1px;overflow:hidden;position:absolute!important;width:1px}.screen-reader-text:focus{background-color:#f1f1f1;border-radius:3px;box-shadow:0 0 2px 2px rgba(0,0,0,.6);clip:auto!important;color:#21759b;display:block;font-size:.875rem;font-weight:700;height:auto;left:5px;line-height:normal;padding:15px 23px 14px;text-decoration:none;top:5px;width:auto;z-index:100000}.site-content[tabindex="-1"]:focus{outline:0}.no-js .hide-if-no-js{display:none}.alignleft{display:inline;float:left;margin-right:1.5em}.alignright{display:inline;float:right;margin-left:1.5em}.aligncenter{clear:both;display:block;margin-left:auto;margin-right:auto}@media screen and (max-width:480px){.alignleft,.alignright{display:block;float:none;margin-left:auto;margin-right:auto}}.button,.button-primary,.button-secondary,.plugin-upload-form .button-primary{border:1px solid;border-radius:3px;box-sizing:border-box;cursor:pointer;display:inline-block;font-size:.8rem;height:1.5625rem;line-height:1;margin:0;padding:0 .8rem;text-decoration:none;white-space:nowrap;-webkit-appearance:none}button::-moz-focus-inner,input[type=button]::-moz-focus-inner,input[type=reset]::-moz-focus-inner,input[type=submit]::-moz-focus-inner{border:0;padding:0}.button-group.button-xl .button,.button.button-xl{font-size:1rem;height:2.44140625rem;line-height:1;padding:0 1.5rem}.button-group.button-large .button,.button.button-large{height:1.953125rem;line-height:1;padding:0 1rem}.button-group.button-small .button,.button.button-small{font-size:.64rem;height:1.25rem;line-height:1;padding:0 .5rem}a.button,a.button-primary,a.button-secondary{line-height:1.5625rem}.button-group.button-large a.button,a.button.button-large{line-height:1.953125rem}.button-group.button-xl a.button,a.button.button-xl{line-height:2.44140625rem}.button-group.button-small a.button,a.button.button-small{line-height:1.25rem}.button:active,.button:focus{outline:none}.button.hidden{display:none}input[type=reset],input[type=reset]:active,input[type=reset]:focus,input[type=reset]:hover{background:none;border:none;box-shadow:none;padding:0 2px 1px;width:auto}.button,.button-secondary,.button:visited{background:#f7f7f7;border-color:#ccc;box-shadow:0 1px 0 #ccc;color:#555;vertical-align:top}p .button{vertical-align:baseline}.button-secondary:focus,.button-secondary:hover,.button.focus,.button.hover,.button:focus,.button:hover{background:#fafafa;border-color:#999;color:#23282d}.button-link:focus,.button-secondary:focus,.button.focus,.button:focus{border-color:#5b9dd9;box-shadow:0 0 3px rgba(0,115,170,.8)}.button-secondary:active,.button.active,.button.active:hover,.button:active{background:#eee;border-color:#999;box-shadow:inset 0 2px 5px -3px rgba(0,0,0,.5);transform:translateY(1px)}.button.active:focus{border-color:#5b9dd9;box-shadow:inset 0 2px 5px -3px rgba(0,0,0,.5),0 0 3px rgba(0,115,170,.8)}.button-disabled,.button-secondary.disabled,.button-secondary:disabled,.button-secondary[disabled],.button.disabled,.button:disabled,.button[disabled]{background:#f7f7f7!important;border-color:#ddd!important;box-shadow:none!important;color:#a0a5aa!important;cursor:default;text-shadow:0 1px 0 #fff!important;transform:none!important}.button-link,input[type=submit].button-link{background:none;border:0;border-radius:0;box-shadow:none;cursor:pointer;margin:0;outline:none;padding:0}.button-link:focus{outline:1px solid #5b9dd9}.button-primary,.download-button,.plugin-upload-form .button-primary{text-decoration:none;text-shadow:0 -1px 1px #006799,1px 0 1px #006799,0 1px 1px #006799,-1px 0 1px #006799}.button-primary,.button-primary:visited,.download-button,.download-button:visited,.plugin-upload-form .button-primary,.plugin-upload-form .button-primary:visited{background:#0085ba;border-color:#0073aa #006799 #006799;box-shadow:0 1px 0 #006799;color:#fff}.button-primary.focus,.button-primary.hover,.button-primary:focus,.button-primary:hover,.download-button.focus,.download-button.hover,.download-button:focus,.download-button:hover,.plugin-upload-form .button-primary.focus,.plugin-upload-form .button-primary.hover,.plugin-upload-form .button-primary:focus,.plugin-upload-form .button-primary:hover{background:#008ec2;border-color:#006799;box-shadow:0 1px 0 #006799;color:#fff}.button-primary.focus,.button-primary:focus,.download-button.focus,.download-button:focus,.plugin-upload-form .button-primary.focus,.plugin-upload-form .button-primary:focus{box-shadow:0 1px 0 #0073aa,0 0 2px 1px #33b3db}.button-primary.active,.button-primary.active:focus,.button-primary.active:hover,.button-primary:active,.download-button.active,.download-button.active:focus,.download-button.active:hover,.download-button:active,.plugin-upload-form .button-primary.active,.plugin-upload-form .button-primary.active:focus,.plugin-upload-form .button-primary.active:hover,.plugin-upload-form .button-primary:active{background:#0073aa;border-color:#006799;box-shadow:inset 0 2px 0 #006799;vertical-align:top}.button-primary.disabled,.button-primary:disabled,.button-primary[disabled],.download-button.disabled,.download-button:disabled,.download-button[disabled],.plugin-upload-form .button-primary.disabled,.plugin-upload-form .button-primary:disabled,.plugin-upload-form .button-primary[disabled]{background:#008ec2!important;border-color:#007cb2!important;box-shadow:none!important;color:#66c6e4!important;cursor:default;text-shadow:0 -1px 0 rgba(0,0,0,.1)!important}.button-primary.button.button-hero,.download-button.button.button-hero,.plugin-upload-form .button-primary.button.button-hero{box-shadow:0 2px 0 #006799}.button-primary.button.button-hero.active,.button-primary.button.button-hero.active:focus,.button-primary.button.button-hero.active:hover,.button-primary.button.button-hero:active,.download-button.button.button-hero.active,.download-button.button.button-hero.active:focus,.download-button.button.button-hero.active:hover,.download-button.button.button-hero:active,.plugin-upload-form .button-primary.button.button-hero.active,.plugin-upload-form .button-primary.button.button-hero.active:focus,.plugin-upload-form .button-primary.button.button-hero.active:hover,.plugin-upload-form .button-primary.button.button-hero:active{box-shadow:inset 0 3px 0 #006799}.button-primary-disabled{background:#008ec2!important;border-color:#007cb2!important;box-shadow:none!important;color:#66c6e4!important;cursor:default;text-shadow:0 -1px 0 rgba(0,0,0,.1)!important}.button-group{display:inline-block;font-size:0;position:relative;vertical-align:middle;white-space:nowrap}.button-group>.button{border-radius:0;display:inline-block;margin-right:-1px;z-index:10}.button-group>.button-primary{z-index:100}.button-group>.button:hover{z-index:20}.button-group>.button:first-child{border-radius:3px 0 0 3px}.button-group>.button:last-child{border-radius:0 3px 3px 0}.button-group>.button:focus{position:relative;z-index:1}@media screen and (max-width:737px){.button,.button.button-large,.button.button-small,.plugin-upload-form .button-primary{font-size:14px;height:auto;line-height:normal;margin-bottom:4px;padding:6px 14px;vertical-align:middle}}.clear:after,.clear:before,.comment-content:after,.comment-content:before,.entry-content:after,.entry-content:before,.home-below:after,.home-below:before,.site-content:after,.site-content:before,.site-footer:after,.site-footer:before,.site-header:after,.site-header:before{content:"";display:table;table-layout:fixed}.clear:after,.comment-content:after,.entry-content:after,.home-below:after,.site-content:after,.site-footer:after,.site-header:after{clear:both}p.subheading{color:#82878c;font-weight:300;margin:-.4rem auto 2rem;text-align:center}p.intro,p.subheading{font-size:1.25rem}p.aside{font-size:.8rem}p.note{font-size:.64rem;letter-spacing:.01rem;max-width:18.1898940355rem}input,textarea{box-sizing:border-box}input[type=checkbox],input[type=color],input[type=date],input[type=datetime-local],input[type=datetime],input[type=email],input[type=month],input[type=number],input[type=password],input[type=radio],input[type=search],input[type=tel],input[type=text],input[type=time],input[type=url],input[type=week],select,textarea{background-color:#fff;border:1px solid #ddd;box-shadow:inset 0 1px 2px rgba(0,0,0,.07);color:#32373c;outline:none;transition:border-color .05s ease-in-out}input[type=checkbox]:focus,input[type=color]:focus,input[type=date]:focus,input[type=datetime-local]:focus,input[type=datetime]:focus,input[type=email]:focus,input[type=month]:focus,input[type=number]:focus,input[type=password]:focus,input[type=radio]:focus,input[type=search]:focus,input[type=tel]:focus,input[type=text]:focus,input[type=time]:focus,input[type=url]:focus,input[type=week]:focus,select:focus,textarea:focus{border-color:#5b9dd9;box-shadow:0 0 2px rgba(30,140,190,.8)}input[type=email],input[type=url]{direction:ltr}input[type=number]{height:28px;line-height:inherit}input[type=checkbox],input[type=radio]{background:#fff;border:1px solid #b4b9be;box-shadow:inset 0 1px 2px rgba(0,0,0,.1);clear:none;color:#555;cursor:pointer;display:inline-block;height:16px;line-height:0;margin:-4px 4px 0 0;min-width:16px;outline:0;padding:0!important;text-align:center;transition:border-color .05s ease-in-out;vertical-align:middle;width:16px;-webkit-appearance:none}input[type=checkbox]:checked:before,input[type=radio]:checked:before{display:inline-block;float:left;font:normal 21px/1 dashicons;vertical-align:middle;width:16px;speak:none;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}input[type=checkbox].disabled,input[type=checkbox].disabled:checked:before,input[type=checkbox]:disabled,input[type=checkbox]:disabled:checked:before,input[type=radio].disabled,input[type=radio].disabled:checked:before,input[type=radio]:disabled,input[type=radio]:disabled:checked:before{opacity:.7}input[type=checkbox]:checked:before{color:#1e8cbe;content:"";margin:-3px 0 0 -4px}input[type=radio]{border-radius:50%;line-height:10px;margin-right:4px}input[type=radio]:checked+label:before{color:#82878c}input[type=radio]:checked:before{background-color:#1e8cbe;border-radius:50px;content:"•";font-size:24px;height:6px;line-height:16px;margin:4px;text-indent:-9999px;width:6px}input[type=reset]:active,input[type=reset]:hover{color:#00a0d2}input[type=search]{-webkit-appearance:textfield}input[type=search]::-webkit-search-decoration{display:none}button,input,select,textarea{font-family:inherit;font-size:inherit;font-weight:inherit}input,select,textarea{border-radius:0;font-size:14px;padding:3px 5px}textarea{line-height:1.4;overflow:auto;padding:2px 6px;resize:vertical}textarea.code{line-height:1.4;padding:4px 6px 1px}label{cursor:pointer;vertical-align:middle}input,select{margin:1px;padding:3px 5px}input.code{padding-top:6px}input.readonly,input[readonly],textarea.readonly,textarea[readonly]{background-color:#eee}.wp-core-ui :-moz-placeholder,:-moz-placeholder{color:#a9a9a9}input.disabled,input:disabled,select.disabled,select:disabled,textarea.disabled,textarea:disabled{background:hsla(0,0%,100%,.5);border-color:hsla(0,0%,87.1%,.75);box-shadow:inset 0 1px 2px rgba(0,0,0,.04);color:rgba(51,51,51,.5)}input[type=file].disabled,input[type=file]:disabled,input[type=range].disabled,input[type=range]:disabled{background:none;box-shadow:none}input.large-text,textarea.large-text{width:99%}input.regular-text{width:25em}input.small-text{padding:1px 6px;width:50px}input[type=number].small-text{width:65px}input.tiny-text{width:35px}input[type=number].tiny-text{width:45px}@media screen and (max-width:782px){textarea{-webkit-appearance:none}input[type=email],input[type=number],input[type=password],input[type=search],input[type=text]{-webkit-appearance:none;padding:6px 10px}input[type=number]{height:40px}input.code{padding-bottom:5px;padding-top:10px}input[type=checkbox]{-webkit-appearance:none;padding:10px}input[type=checkbox]:checked:before{font:normal 30px/1 dashicons;margin:-3px -5px}input[type=checkbox],input[type=radio]{height:25px;width:25px}input[type=radio]:checked:before{vertical-align:middle;width:9px;height:9px;margin:7px;line-height:16px}input,textarea{font-size:16px}input[type=number].small-text,input[type=password].small-text,input[type=search].small-text,input[type=text].small-text{width:auto;max-width:55px;display:inline;padding:3px 6px;margin:0 3px}input.regular-text{width:100%}label{font-size:14px}fieldset label{display:block}}a.button:active,a.button:focus,a.button:hover{text-decoration:none}.notice{background:#fff;border-left:4px solid #fff;box-shadow:0 1px 1px 0 rgba(0,0,0,.1);margin:1em 0;padding:1px 12px}.notice p{font-size:.8rem;margin:.5em 0;padding:2px}.notice.notice-alt{box-shadow:none}.notice.notice-large{padding:10px 20px}.notice.notice-success{border-left-color:#46b450}.notice.notice-success.notice-alt{background-color:#ecf7ed}.notice.notice-warning{border-left-color:#ffb900}.notice.notice-warning.notice-alt{background-color:#fff8e5}.notice.notice-error{border-left-color:#dc3232}.notice.notice-error.notice-alt{background-color:#fbeaea}.notice.notice-info{border-left-color:#00a0d2}.notice.notice-info.notice-alt{background-color:#e5f5fa}.error-404 .page-content,.error-404 .page-title{text-align:center}.error-404 .page-content .logo-swing{height:10rem;margin:6rem auto;position:relative;text-align:center;width:10rem}.error-404 .page-content .logo-swing .wp-logo{left:0;max-width:none;position:absolute;top:0;width:10rem}@keyframes hinge{10%{width:180px;height:180px;transform:rotate(0deg)}15%{width:185px;height:185px;transform:rotate(0deg)}20%{width:180px;height:180px;transform:rotate(5deg)}40%{transform-origin:top left;animation-timing-function:ease-in-out}60%{transform:rotate(40deg);transform-origin:top left;animation-timing-function:ease-in-out}40%,80%{transform:rotate(60deg);transform-origin:top left;animation-timing-function:ease-in-out;opacity:1}to{transform:translate3d(0,700px,0);opacity:0}}.hinge{animation-duration:2s;animation-name:hinge}.comments-area{margin-top:5em}.comments-area>:last-child{margin-bottom:0}.comments-area .comment-list+.comment-respond{border-top:1px solid #eaeaea}.comments-area .comment-list+.comment-respond,.comments-area .comment-navigation+.comment-respond{padding-top:1.6em}.comments-area .comments-title{margin-bottom:1.3333em}.comments-area .comment-list{list-style:none;margin:0}.comments-area .comment-list .pingback,.comments-area .comment-list .trackback,.comments-area .comment-list article{border-top:1px solid #eaeaea;padding:1.6em 0}.comments-area .comment-list article:not(:only-child){padding-bottom:0}.comments-area .comment-list article+.comment-respond{padding-bottom:1.6em}.comments-area .comment-list .children{list-style:none;margin:0}.comments-area .comment-list .children>li{padding-left:.8em}.comments-area .comment-list .alt{background:none}.comments-area .comment-author{color:#999;margin-bottom:.4em}.comments-area .comment-author .avatar{float:left;height:24px;margin-right:.8em;width:24px}.comments-area .comment-metadata,.comments-area .pingback .edit-link{color:#999;line-height:1.5}.comments-area .comment-metadata a,.comments-area .pingback .edit-link a{color:#777}.comments-area .comment-metadata{font-size:.8rem;margin-bottom:1.6em}.comments-area .comment-metadata .edit-link,.comments-area .pingback .edit-link{margin-left:1em}.comments-area .pingback .edit-link:before{top:5px}.comments-area .comment-content ol,.comments-area .comment-content ul{margin:0 0 1.6em 1.3333em}.comments-area .comment-content>:last-child,.comments-area .comment-content li>ol,.comments-area .comment-content li>ul{margin-bottom:0}.comments-area .comment-content .reply{font-size:12px}.comments-area .comment-content .reply a{border:1px solid #eaeaea;color:#707070;display:inline-block;font-weight:700;line-height:1;margin-top:2em;padding:.4167em .8333em;text-transform:uppercase}.comments-area .comment-content .reply a:focus,.comments-area .comment-content .reply a:hover{border-color:#333;color:#333;outline:0}.comments-area .comment-reply-title a{font-weight:inherit}.comments-area .comment-form label{font-size:.8rem;font-weight:700;display:block;letter-spacing:.04em;line-height:1.5}.comments-area .comment-form input[type=email],.comments-area .comment-form input[type=text],.comments-area .comment-form input[type=url],.comments-area .comment-form textarea{width:100%}.comments-area .comment-awaiting-moderation,.comments-area .comment-notes,.comments-area .form-allowed-tags,.comments-area .logged-in-as{font-size:1rem;line-height:1.5;margin-bottom:2em}.comments-area .no-comments{border-top:1px solid #eaeaea;color:#999;font-weight:700;padding-top:1.6em}.comments-area .comment-navigation+.no-comments{border-top:0}.comments-area .form-allowed-tags code{font-family:Inconsolata,monospace}.comments-area .form-submit{margin-bottom:0}.comments-area .required{color:#c0392b}.entry-content{hyphens:auto;word-wrap:break-word}.entry-content>p:first-child{margin-top:0}.entry-content [class*=col-]~h1,.entry-content [class*=col-]~h2,.entry-content [class*=col-]~h3,.entry-content [class*=col-]~h4,.entry-content [class*=col-]~h5,.entry-content [class*=col-]~h6{clear:none}.entry-header{position:relative}.entry-header .sticky-post{color:#999;font-size:.8rem;font-style:italic;position:absolute;top:-.8rem}.entry-meta{color:#999;font-size:.8rem;margin-bottom:1rem}.entry-meta a{color:#777}.entry-meta>span{margin-right:1rem}.entry-meta>span :last-of-type{margin:0}.entry-meta .byline,.entry-meta .updated:not(.published),.sticky .entry-meta .posted-on{display:none}.group-blog .entry-meta .byline,.single .entry-meta .byline{display:inline}.entry-summary{hyphens:auto;word-wrap:break-word}body:not(.single):not(.search) .site-main .post{margin-bottom:3.0517578125rem;max-width:40em}.gallery{margin-bottom:1.5rem}.gallery .gallery-item{display:inline-block;margin:0;text-align:center;vertical-align:top;width:100%}.gallery.gallery-columns-2 .gallery-item{max-width:50%}.gallery.gallery-columns-3 .gallery-item{max-width:33.33%}.gallery.gallery-columns-4 .gallery-item{max-width:25%}.gallery.gallery-columns-5 .gallery-item{max-width:20%}.gallery.gallery-columns-6 .gallery-item{max-width:16.66%}.gallery.gallery-columns-7 .gallery-item{max-width:14.28%}.gallery.gallery-columns-8 .gallery-item{max-width:12.5%}.gallery.gallery-columns-9 .gallery-item{max-width:11.11%}.gallery .gallery-caption{display:block}.main-navigation{background:#0073aa;clear:both;left:0;position:absolute;top:60px;width:100%}.main-navigation ul{display:none;list-style:none;margin:0;padding-left:0}.main-navigation ul ul{box-shadow:0 3px 3px rgba(0,0,0,.2);float:left;left:-999em;position:absolute;top:1.5em;z-index:99999}.main-navigation ul ul ul{left:-999em;top:0}.main-navigation ul ul li.focus>ul,.main-navigation ul ul li:hover>ul{left:100%}.main-navigation ul ul a{width:200px}.main-navigation ul li.focus>ul,.main-navigation ul li:hover>ul{left:auto}.main-navigation li{border-top:1px solid hsla(0,0%,100%,.2);padding:1rem}.main-navigation a{color:hsla(0,0%,100%,.8);display:block;font-size:.8rem;text-decoration:none}.main-navigation a.active,.main-navigation a:hover{color:#fff}@media screen and (min-width:737px){.main-navigation a.active{border-bottom:1px solid}}.main-navigation.toggled{z-index:1}.main-navigation.toggled ul{display:block}.menu-toggle{background:transparent;border:none;color:#fff;height:3.5rem;position:absolute;right:1rem;top:-58px;width:3.5rem}.toggled .menu-toggle:before{content:""}@media screen and (min-width:737px){.menu-toggle{display:none}.main-navigation{float:right;position:static;width:auto}.main-navigation.toggled{padding:1px 0}.main-navigation ul{display:inline-block;font-size:0}.main-navigation ul li{border:0;display:inline-block;font-size:1rem;margin-right:1rem;padding:0}.main-navigation ul li:last-of-type{margin-right:0}}.comment-content .wp-smiley,.entry-content .wp-smiley,.page-content .wp-smiley{border:none;margin-bottom:0;margin-top:0;padding:0}embed,iframe,object{max-width:100%}body.page .gutters .col-12{width:100%}body.page .entry-header{background:#0073aa;padding:1rem 0}body.page .entry-header .entry-title{color:#fff;font-size:1.5625rem;font-weight:300;line-height:1;margin:0 auto;padding:0 1.5625rem}body.page .entry-header.home{padding:1.5625rem 1.143rem;text-align:center}@media screen and (min-width:737px){body.page .site-header+.site-main .entry-title{padding:initial}}body.page .entry-content,body.page .entry-footer{margin:0 auto;max-width:960px;padding:3.0517578125rem 1.5625rem}.post-navigation{margin:5em auto;padding:0}.post-navigation a{border-bottom:1px solid #eaeaea;color:#444;display:block;font-weight:600;padding:11px 0 12px;text-transform:none;width:100%}.post-navigation a:hover{color:#21759b}.post-navigation .nav-links{border-top:1px solid #eaeaea;hyphens:auto;word-wrap:break-word}.post-navigation .meta-nav{color:#777;display:block;font-size:13px;line-height:2;text-transform:uppercase}.post-navigation .nav-next{text-align:right}.pagination .nav-links{text-align:center}.pagination .nav-links .page-numbers{background-color:#f9f9f9;cursor:hand;display:inline-block;min-width:2em;padding:8px}.pagination .nav-links .page-numbers.dots,.pagination .nav-links .page-numbers.next,.pagination .nav-links .page-numbers.prev{background:none;font-size:.9em;width:auto}.pagination .nav-links .page-numbers.dots{cursor:inherit}@media screen and (max-width:737px){.pagination .nav-links .page-numbers.next,.pagination .nav-links .page-numbers.prev{font-size:0;min-width:0;padding:0}.pagination .nav-links .page-numbers.next:after,.pagination .nav-links .page-numbers.prev:before{background-color:#f9f9f9;display:inline-block;font-size:1rem;line-height:1.5;min-width:2em;padding:8px}.pagination .nav-links .page-numbers.prev:before{content:"‹"}.pagination .nav-links .page-numbers.next:after{content:"›"}}.pagination .nav-links span.page-numbers{background-color:#f7f7f7;font-weight:700}.search-form .search-field{line-height:normal;margin:0;padding:4px 5px;vertical-align:text-bottom}body.search .gutters .col-12{width:100%}body.search .site-main{margin:0 auto;max-width:960px;padding:0 1.5625rem 3.0517578125rem}.site-content{max-width:960px;padding:0 1.5625rem}@media screen and (min-width:737px){.site-content{padding:0 10px 3.0517578125rem}}@media screen and (max-width:737px){.site-content .site-main{float:none;margin:0;width:auto}}.home .site-content,.page .site-content,.site-content.page{margin:auto;max-width:none;padding:0}.site-content .page-title{font-size:1.25rem;font-weight:400}.site-content .no-results{margin:0 auto 3.0517578125rem;max-width:40em;padding:0 2rem}.site-description{color:hsla(0,0%,100%,.8);font-size:1.25rem;font-weight:300;margin:-.4rem auto 2rem;text-align:center}.site-header{background:#0073aa;padding:1rem 0;position:relative}.site-header .site-branding{margin:0 auto;max-width:960px;padding:0 1.5625rem}@media screen and (min-width:737px){.site-header .site-branding{padding:0 10px}}.site-header.home{padding:1.5625rem 1.143rem;text-align:center}.site-title{display:inline-block;font-size:1.5625rem;font-weight:300;line-height:1;margin:0 2rem 0 0;max-width:none}.site-title a{color:#fff;font-weight:300}.site-title a:active,.site-title a:focus,.site-title a:hover{text-decoration:none}.site-header.home .site-title{display:inherit;font-size:3.8146972656rem;margin:2rem 0 1rem}.widget-area{font-size:.8rem}@media screen and (min-width:480px) and (max-width:768px){.widget-area{display:flex}.widget-area .widget{width:48%}}#wporg-footer{background-color:#f7f7f7;border-top:1px solid #dfdfdf;padding:22px 14px 65px}#wporg-footer,#wporg-footer .wrapper{clear:both;margin:0 auto;overflow:auto}#wporg-footer .wrapper{max-width:930px}#wporg-footer ul{float:left;margin-bottom:20px;margin-left:24px;overflow:auto;padding-left:0;width:135px}@media screen and (min-width:960px){#wporg-footer ul:first-child{margin-left:0}}#wporg-footer ul li{color:#bbb;font-size:14px;list-style-type:none;margin-bottom:1px}#wporg-footer ul li a{text-decoration:none;text-decoration-skip-ink:none}#wporg-footer ul li a:hover{color:#0073aa;text-decoration:underline}#wporg-footer .cip{clear:both;color:#ccc;float:none;font-size:.8rem;letter-spacing:.3em;margin:35px auto 0;text-align:center;text-transform:uppercase}#wporg-footer .cip.cip-image{background:url(//s.w.org/style/images/codeispoetry.png?1=) 50% no-repeat;background-size:190px 15px;height:15px;text-indent:-9999px;width:190px}@media only screen and (-webkit-min-device-pixel-ratio:1.5),only screen and (min-resolution:1.5dppx),only screen and (min-resolution:144dpi){#wporg-footer .cip.cip-image{background-image:url(//s.w.org/style/images/codeispoetry-2x.png?1=)}}@media screen and (min-width:561px) and (max-width:959px){#wporg-footer .wrapper{max-width:600px}#wporg-footer ul{margin-left:2%;width:32%}#wporg-footer ul:nth-child(3n+1){margin-left:0}#wporg-footer ul:nth-child(4n){clear:both}}@media screen and (max-width:560px){#wporg-footer .wrapper{max-width:360px}#wporg-footer ul{margin-left:4%;width:48%}#wporg-footer ul:nth-child(odd){margin-left:0;clear:both}}#wporg-header{background:#23282d;height:140px;position:relative;text-align:center;width:100%}#wporg-header .wrapper{margin:0 auto;max-width:960px}#wporg-header h1{display:inline-block;margin:auto;width:303px}#wporg-header h1 a{background:url(//s.w.org/style/images/wporg-logo.svg?3=) 0 no-repeat;background-size:290px 46px;display:block;height:88px;text-indent:-9999px}#wporg-header h2.rosetta{clear:none;color:#dfdfdf;font-family:Georgia,Times New Roman,serif;font-size:30px;margin:0 0 0 60px}#wporg-header h2.rosetta a{border-bottom:none;color:#dfdfdf;display:block;height:52px;line-height:22px;padding:0}#wporg-header h2.rosetta a:hover{text-decoration:none}#wporg-header #wporg-header-menu{background:#23282d;left:-75%;list-style:none;margin:0;max-width:75%;min-width:200px;position:absolute;text-align:left;top:100%;transition:left .3s;z-index:100000}#wporg-header #wporg-header-menu.toggled{left:0}#wporg-header ul li{list-style-type:none;position:relative}#wporg-header ul li a{color:#eee;display:block;font-family:Open Sans,Helvetica,Arial,Liberation Sans,sans-serif;font-size:13px;font-weight:600;height:34px;line-height:34px;margin:0 4px;padding:10px 30px;text-decoration:none}#wporg-header ul li a.subcurrent{font-weight:700}@media (max-width:768px){#wporg-header ul li a{height:auto}}#wporg-header ul li.current-menu-item a,#wporg-header ul li.current_page_parent a,#wporg-header ul li a.current,#wporg-header ul li a:hover{color:#00a0d2}#wporg-header ul li#download,#wporg-header ul li.download{float:right;height:34px;margin-right:14px;overflow:hidden;padding:0 0 34px}@media screen and (max-width:767px){#wporg-header ul li#download,#wporg-header ul li.download{display:block;float:none;margin:10px 20px 20px;padding-bottom:0;height:auto}#wporg-header ul li#download a,#wporg-header ul li.download a{padding:4px 10px;text-align:center}}#wporg-header ul li#download a,#wporg-header ul li.download a{margin:0;padding:0 16px}#wporg-header ul li#download a:hover,#wporg-header ul li.download a:hover{color:#eee}#wporg-header ul li#download.current,#wporg-header ul li#download.current-menu-item,#wporg-header ul li#download .uparrow,#wporg-header ul li.download.current,#wporg-header ul li.download.current-menu-item,#wporg-header ul li.download .uparrow{display:none}#wporg-header ul li .nav-submenu{clip:rect(1px,1px,1px,1px);height:1px;left:-2px;margin:0;overflow:hidden;padding:0;position:absolute;width:1px;z-index:99999}#wporg-header ul li .nav-submenu li a{display:inline-block;height:24px;line-height:24px;margin:0;white-space:nowrap}@media screen and (min-width:768px){#wporg-header #head-search{float:right;margin-right:14px;padding-top:30px}}#wporg-header #head-search form{border-bottom:1px solid #3f3f3f;display:inline-block;margin-left:60px;width:288px}#wporg-header #head-search form input.text{background:#191e23;border:0;border-radius:0;box-sizing:content-box;color:#b4b9be;float:left;font-family:Open Sans,sans-serif;font-size:12px;height:24px;margin:0;outline:none;padding:3px;vertical-align:top;width:256px}#wporg-header #head-search form input.text::-moz-placeholder{color:#eee}@media screen and (max-width:480px){#wporg-header #head-search form input.text{width:216px}}#wporg-header #head-search form .button{background:#191e23 url(//s.w.org/wp-includes/images/admin-bar-sprite.png?d=20120831) no-repeat 2px 5px;border:none;border-radius:0;box-shadow:none;float:left;height:30px;margin:0;padding:0;text-shadow:none!important;width:26px}@media screen and (max-width:480px){#wporg-header #head-search form{width:248px}}@media screen and (min-width:480px){#wporg-header #head-search form{margin-left:0}}@media screen and (min-width:768px){#wporg-header{height:120px;text-align:inherit}#wporg-header h1{float:left;padding-left:10px}#wporg-header h2.rosetta{float:left;margin-left:0;padding:36px 27px 0}#wporg-header #headline h2{text-rendering:optimizeLegibility}#wporg-header #wporg-header-menu{float:left;height:46px;list-style:none;margin:-15px 0 0;max-width:inherit;min-width:0;padding:0;position:static;width:100%}#wporg-header ul li{float:left;position:relative}#wporg-header ul li a{height:46px;padding:0 6px}#wporg-header ul li a.current~.uparrow{border-bottom:9px solid #f7f7f7;border-left:9px solid transparent;border-right:9px solid transparent;height:0;margin:-8px auto 0;width:0}#wporg-header ul li.current-menu-item:after,#wporg-header ul li.current_page_parent:after{border-bottom:9px solid #f7f7f7;border-left:9px solid transparent;border-right:9px solid transparent;content:"";height:0;left:50%;margin:-8px 0 0 -9px;position:absolute;width:0}#wporg-header ul li .nav-submenu:hover~.uparrow,#wporg-header ul li:hover .nav-submenu~.uparrow{border-bottom:9px solid #32373c;border-left:9px solid transparent;border-right:9px solid transparent;height:0;margin:-10px auto 0;width:0}#wporg-header ul li .nav-submenu{background:#32373c;border:1px solid #32373c;border-top:0;margin-top:-1px;min-width:0}#wporg-header ul li .nav-submenu li{float:none}#wporg-header ul li .nav-submenu li a{height:34px;line-height:34px}#wporg-header .nav-menu .focus>ul,#wporg-header .nav-menu ul li:hover>ul,#wporg-header ul.nav-menu .focus>ul,#wporg-header ul.nav-menu li:hover>ul{clip:inherit;height:inherit;overflow:inherit;width:inherit}#wporg-header ul li.current-menu-item:after,#wporg-header ul li.current_page_parent:after,#wporg-header ul li a.current~.uparrow{border-bottom-color:#0073aa}}.page-download #wporg-header #download,.page-parent-download #wporg-header #download{display:none}#mobile-menu-button{background:none;border:none;box-shadow:none;display:block;float:left;font-family:dashicons;font-size:16px;font-style:normal;font-weight:400;left:10px;line-height:1;padding:1px;position:absolute;text-align:center;text-decoration:inherit;text-shadow:none;top:75px;transition:color .1s ease-in;vertical-align:top;-webkit-font-smoothing:antialiased}#mobile-menu-button:before{border:none;box-sizing:border-box;color:#888;content:"";display:inline-block;float:left;font:normal 50px/1 Dashicons;margin:0;outline:none;padding:3px;text-decoration:none;vertical-align:middle;-webkit-font-smoothing:antialiased}@media screen and (min-width:768px){#mobile-menu-button{display:none}}#download-mobile{background:#f7f7f7;border-bottom:1px solid #ddd}#download-mobile .wrapper{padding:20px 0;text-align:center}#download-mobile span.download-ready{font-size:1.6em;margin:0 .25em}#download-mobile a.download-button{font-size:1.6em;height:inherit;margin:10px .25em;padding:10px 15px}.category-context__bar{margin:0 1.5rem;background:#edeff0;border-radius:2px;font-size:.8125rem;overflow:auto;transition:all .1s ease-out;transition-delay:.1s}.category-context__bar>div{display:flex;align-items:center;justify-content:space-between}@media only screen and (min-width:782px){.category-context__bar{margin:0 1.5rem}}@media only screen and (min-width:960px){.category-context__bar{margin:0 auto;max-width:960px}}.category-context__bar ul{margin:0;padding:0;display:flex;justify-content:space-between}.category-context__bar ul li{list-style:none;font-size:.8125rem}.category-context__bar ul li a{display:block;padding:1.125rem .75rem;text-decoration:none}.category-context__bar ul li:last-child a{padding-right:1.5rem}.category-context__bar__copy{margin:0;padding:1.125rem 1.5rem;font-size:.8125rem;font-weight:400}.category-context__bar__title{margin:0;padding-right:1.5rem;color:#555d66;font-size:.75rem;font-weight:400;text-transform:uppercase}.category-context__bar__links{display:flex;align-items:center}@media only screen and (max-width:782px){.category-context__bar__links{display:none}}.category-context__bar--is-hidden{height:0;overflow:hidden}.category-menu{margin:0;padding:0;position:relative;background:linear-gradient(180deg,hsla(0,0%,100%,0) 94%,#0073aa 0);background-repeat:no-repeat;background-size:0;background-position-x:0;transition:all 75ms ease-out;min-height:45px}.category-menu li{display:inline-block;margin:0;list-style:none}.category-menu a{display:block;padding:.75rem;color:#40464d;font-size:.875rem;text-decoration:none}.category-menu a:active,.category-menu a:focus,.category-menu a:hover,li .category-menu--is-active{color:#000}.category-menu__mobile{padding:0!important;border-top:none!important}.category-menu__mobile ul{margin:0;padding:0;background:#23282d}.category-menu__mobile li{list-style:none;border-top:1px solid #32373c}.category-menu__mobile li a{display:block;padding:1rem 1.5rem;font-size:.875rem;text-decoration:none;color:#ccd0d4}.category-menu__mobile>.components-panel__body-title{margin:0!important}.category-menu__mobile>.components-panel__body-title>button{padding:1.5rem}.category-menu--is-loading{height:24px;position:relative}.category-menu--is-loading:after{content:"";position:absolute;background:#f3f4f5;border-radius:4px;width:80%;height:24px;left:0;top:calc(50% - 12px);transition:none}.category-search{display:flex;align-items:center;background:#fff;border:1px solid #6c7782;border-radius:2px}.category-search input[type=search]{flex-grow:1;margin:0;padding:.25rem .5rem;border:none;box-shadow:none;font-size:.8125rem}.category-search input[type=search]:focus{outline:1px auto #0073aa}.category-search__button{display:flex;background:transparent;border:none;color:#6c7782}.category-search__button:active{background:#d7dade}.category-search__button:focus{outline:1px auto #0073aa}.category-search--is-loading{display:block;height:24px;min-width:100%;background:#f3f4f5;border-radius:4px}@media only screen and (min-width:480px){.category-search--is-loading{width:224px!important;min-width:auto!important}}.pattern__copy-button{transition:all 75ms ease-in-out}.pattern__copy-button.is-small{font-size:.75rem;padding:.75rem;height:auto}.pattern__favorite-button{position:relative;font-size:.875rem;height:2.25rem;width:2.25rem;border-radius:2px;color:#606a74}.pattern__favorite-button svg{position:absolute;top:calc(50% - .75rem);left:calc(50% - .75rem);height:1.5rem;width:1.5rem;transition:all .15s ease-out}.pattern__favorite-button svg path{fill:#6c7782}.pattern__favorite-button .pattern__favorite-filled{opacity:0}.pattern__favorite-button:hover{color:#555d66;background:transparent}.pattern__favorite-button:hover svg path{fill:#555d66}.pattern__favorite-button:active{background:transparent;box-shadow:none;transform:none}.pattern__favorite-button.is-favorited{color:#555d66}.pattern__favorite-button.is-favorited svg path{fill:#d94f4f}.pattern__favorite-button.is-favorited .pattern__favorite-outline{opacity:0;transform:scale(2.8)}.pattern__favorite-button.is-favorited .pattern__favorite-filled{opacity:1}.pattern__favorite-button.is-favorited:hover .pattern__favorite-filled{animation:HeartBeat .9s infinite}@media (prefers-reduced-motion){.pattern__favorite-button.is-favorited:hover .pattern__favorite-filled{animation:none}}.pattern__favorite-button.has-label{padding:12px 18px 12px 38px;height:auto;width:auto}.pattern__favorite-button.has-label svg{top:calc(50% - 12px);left:9px}@keyframes HeartBeat{0%{transform:scale(1)}25%{transform:scale(1.2)}40%{transform:scale(1)}60%{transform:scale(1.2)}to{transform:scale(1)}}.main-navigation{float:none;position:static;width:auto}.main-navigation a{font-size:.8125rem}.main-navigation.toggled div.menu{position:absolute;top:57px;right:0;width:100%;background:#0073aa}.menu-toggle{position:static;height:auto;width:auto;font-size:1.5625rem;overflow:hidden;-webkit-appearance:none}body.page .entry-header{background:none;padding:0}body.page .entry-header .entry-title{color:inherit;margin:2rem auto 1rem;max-width:960px}@media screen and (min-width:737px){body.page .entry-header .entry-title{padding:0 10px}}.pattern-grid-menu{margin:0 auto;max-width:960px;display:flex;flex-direction:column;justify-content:space-between;align-items:center}.pattern-grid-menu>:first-child,.pattern-grid-menu>:last-child{width:100%}.pattern-grid-menu>:last-child{margin:1.5rem;width:calc(100% - 3rem)}@media only screen and (min-width:782px){.pattern-grid-menu{margin:1.5rem;flex-direction:row}.pattern-grid-menu>:last-child{margin:0;width:auto}}@media only screen and (min-width:960px){.pattern-grid-menu{margin:1.5rem auto}}.pattern-grid{max-width:960px;margin:1.5rem}@media screen and (min-width:600px){.pattern-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(280px,1fr));gap:1.5rem}.pattern-grid>*{align-self:baseline}}@media screen and (min-width:960px){.pattern-grid{margin-left:auto;margin-right:auto}}.pattern-grid__pattern{position:relative;margin:0 0 1.5rem;border:1px solid #d7dade;border-radius:2px;transition:all 75ms ease-in-out}@media screen and (min-width:600px){.pattern-grid__pattern{display:inline-block;margin:0}}.pattern-grid__pattern .pattern-grid__preview{overflow:hidden}.pattern-grid__pattern .pattern-grid__actions{position:absolute;right:0;bottom:0;left:0;display:flex;align-items:center;padding:.375rem;background:hsla(0,0%,100%,.8);backdrop-filter:blur(3px);opacity:0;transform:translateY(6px);transition:all 75ms ease-in-out}.pattern-grid__pattern .pattern-grid__actions .pattern-grid__title{flex-grow:1;margin:0;padding:0 .375rem 0 .75rem;font-size:.75rem;pointer-events:none}.pattern-grid__pattern .pattern-grid__actions .pattern__copy-button,.pattern-grid__pattern .pattern-grid__actions .pattern__favorite-button{flex-shrink:0}.pattern-grid__pattern .pattern-grid__actions .button+.button{margin-left:.375rem}.pattern-grid__pattern:focus-within .pattern-grid__actions,.pattern-grid__pattern:hover .pattern-grid__actions{opacity:1;transform:translateY(0)}.pattern-preview__container{padding:2rem 0 0;background:#f3f4f5}.pattern-preview__viewport{position:relative;margin:0 auto;padding:0 20px;max-width:100vw;min-width:320px}.pattern-preview__viewport .pattern-preview__viewport-iframe{background:#fff;border:1px solid #e8eaeb;vertical-align:middle;max-width:100vw}.pattern-preview__viewport:focus-within .pattern-preview__resize-help{clip:auto;clip-path:none;height:auto;margin:initial;overflow:initial;width:auto;bottom:-1rem;left:20px;right:20px;padding:8px 16px;background:#fff;border-radius:2px;border:1px solid #d7dade;text-align:center}.pattern-preview__drag-handle{position:absolute;top:0;bottom:0;width:20px}.pattern-preview__drag-handle.is-left{left:0}.pattern-preview__drag-handle.is-right{right:0}.pattern-preview__drag-handle-button{position:absolute;top:calc(50% - 50px);left:6px;padding:0;width:8px;height:100px;appearance:none;cursor:grab;outline:none;background:#7e8993;border-radius:99999px;border:none}.pattern-preview__drag-handle-button:hover{background:#6c7782}.pattern-preview__drag-handle-button:active{cursor:grabbing;background:#606a74}.pattern-preview__drag-handle-button:focus{box-shadow:0 1px 0 #0073aa,0 0 2px 1px #33b3db}body.single-wporg-pattern{box-sizing:border-box;font-size:14px;font-weight:400;line-height:1.2}body.single-wporg-pattern .site-content{margin:auto;max-width:none;padding:0}body.single-wporg-pattern .entry-header{max-width:960px;padding:1.5rem;margin-left:auto;margin-right:auto}@media only screen and (min-width:960px){body.single-wporg-pattern .entry-header{padding:1.5rem 0}}body.single-wporg-pattern .entry-header .entry-title{margin-top:0;line-height:1.2}body.single-wporg-pattern .pattern-actions{display:flex;align-items:stretch;flex-wrap:wrap}body.single-wporg-pattern .pattern-actions button+button{margin-left:2em}body.single-wporg-pattern .pattern-actions__notice{margin:1.5rem 0 0;height:auto;flex-basis:100%}body.single-wporg-pattern .pattern-actions__notice>*{display:flex;flex-direction:column;justify-content:space-between;align-items:flex-start;margin:0}body.single-wporg-pattern .pattern-actions__notice>* button{margin-top:.75rem}@media only screen and (min-width:600px){body.single-wporg-pattern .pattern-actions__notice>*{align-items:center;flex-direction:row}body.single-wporg-pattern .pattern-actions__notice>* button{margin-top:0}}body.single-wporg-pattern .pattern-actions__guide{max-width:384px;height:auto;max-height:none}body.single-wporg-pattern .pattern-actions__guide-content{padding:1.5rem;line-height:1.5}body.single-wporg-pattern .pattern-actions__guide-title{margin:0}body.single-wporg-pattern .pattern-actions__guide-shortcut{background:#edeff0;box-shadow:0 0 0 1px #ccd0d4;padding:1px;font-weight:600;min-width:20px;display:inline-block;text-align:center;border-radius:2px}body.single-wporg-pattern .entry-content{max-width:960px;margin-left:auto;margin-right:auto}body.single-wporg-pattern .pattern__meta{padding:2rem 0;background:#f3f4f5}body.single-wporg-pattern .pattern__meta>div{max-width:960px;margin-left:auto;margin-right:auto;display:flex;justify-content:space-between}body.single-wporg-pattern .pattern__meta .pattern-preview__report{text-align:right}.site-header:not(.home) .search-form{display:flex;align-items:center}.site-header:not(.home) .search-form>input{flex:1;border:0;border-radius:2px 0 0 2px;display:inline-block;font-size:12px;padding:5px 10px;position:relative;width:auto;height:100%}.site-header:not(.home) .search-form button{margin:0;border-radius:0 2px 2px 0;padding:3px 12px;height:unset}.search-form--is-inline .search-form{display:flex;justify-content:space-between;background:#fff}.search-form--is-inline .search-form>label{flex:1}.search-form--is-inline .search-form input{padding:.5rem;background:transparent;border:none;box-shadow:none;width:100%;font-size:14px}@media only screen and (min-width:768px){.search-form--is-inline .search-form input{font-size:16px}}.search-form--is-inline .search-form button{background:transparent;margin-bottom:0;border:0;box-shadow:none;height:inherit;text-shadow:none;color:#32373c}.search-form--is-inline .search-form button:focus{-webkit-box-shadow:0 0 2px 1px #0073aa;box-shadow:0 0 2px 1px #0073aa}.search-form--is-centered .search-form{margin:0 auto}.search-form--is-constrained .search-form{max-width:36rem}.search-form--is-muted .search-form{border-color:#d7dade!important}.search-form--is-muted .search-form button,.search-form--is-muted .search-form input{background:#f8f9f9;color:#7e8993}.search-form--has-medium-text .search-form input{font-size:14px}.search-form--has-border .search-form{border:1px solid #7e8993}.section-heading_link,.section-heading_title{margin-bottom:0}.section-heading_title{font-weight:300}.section-heading_title .archive-title-prefix{display:block;font-size:1rem}.section-heading_link{text-decoration:underline;font-weight:600;margin-top:1.5rem!important}@media only screen and (min-width:768px){.section-heading_link{margin-top:0!important}}.section-heading_description{margin:1rem 0 0}.section-heading_description :last-child{margin-bottom:0}.section-heading--with-space{padding-bottom:16px}.site-content{margin:0 auto;max-width:none;padding:0}body.home .site-header{padding:3.75rem 1rem;text-align:left}body.home .site-branding{display:grid;grid-template-rows:auto 1fr;grid-template-columns:1fr 22rem}body.home .site-branding>*{align-self:center}@media screen and (max-width:736px){body.home .site-branding{display:block}}body.home .site-title.site-title{grid-column-start:1;grid-row-start:1;margin-top:0;text-align:left;font-size:3rem;line-height:1.25}body.home .site-description{grid-column-start:1;grid-row-start:2;margin:0;font-size:1.25rem;line-height:1.6;text-align:left;color:#fff}body.home .site-callout{grid-column-start:2;grid-row-start:1;grid-row-end:span 2;margin-left:4rem;padding:1.125rem 1.5rem 1.5rem;font-size:.875rem;line-height:1.6;background:#fff;box-shadow:.75rem .75rem 0 rgba(0,0,0,.15)}body.home .site-callout h2{margin-top:0;font-size:1.125rem;line-height:1.25;font-weight:600}body.home .site-callout p:last-child{margin-bottom:0}@media screen and (max-width:736px){body.home .site-callout{margin:2rem auto 0;max-width:24rem}}body:not(.home) .site-branding{display:flex;align-items:center;justify-content:space-between;font-size:.8125rem;color:#fff}body:not(.home) .site-branding a{color:#fff}body:not(.home) .site-branding .sep{margin-left:.5rem;margin-right:.5rem}body:not(.home) .site-branding .is-current-page{font-weight:600}.site-title a{text-decoration:none}.site-title a:active,.site-title a:focus,.site-title a:hover{color:#fff}.has-wporg-blue-color{color:#1e8cbe}.has-wporg-blue-background-color{background-color:#1e8cbe}.has-wporg-purple-color{color:#826eb4}.has-wporg-purple-background-color{background-color:#826eb4}.has-wporg-white-color{color:#fff}.has-wporg-white-background-color{background-color:#fff}.home-page .shapes{position:relative;margin:0 auto}.home-page .shapes .parallelogram p:before{font-size:64px;height:64px;left:-16px;position:relative}.home-page .shapes .parallelogram{color:#fff;display:block;margin:0 auto;opacity:.9;padding:60px 40px;text-align:center;text-decoration:none}.home-page .shapes strong{display:block;font-size:28px;font-weight:300;padding-bottom:15px;padding-top:15px}.home-page .shapes p{color:#fff;font-size:16px;font-weight:300;margin:0}.home-page .shapes u{display:block;font-size:18px;padding-top:15px}@media only screen and (min-width:768px){.home-page .shapes{height:400px}.home-page .shapes .parallelogram{width:50%;position:absolute;padding:50px 90px}}@media only screen and (min-width:960px){.home-page .shapes .parallelogram{-webkit-transform:skew(-15deg);-ms-transform:skew(-15deg);transform:skew(-15deg)}.home-page .shapes .parallelogram:before,.home-page .shapes p{-webkit-transform:skew(15deg);-ms-transform:skew(15deg);transform:skew(15deg)}}@media only screen and (min-width:1200px){.home-page .shapes{margin:0 -60px}}.terms{font-style:italic;font-size:14px}
  • sites/trunk/wordpress.org/public_html/wp-content/themes/pub/wporg-patterns/index.php

    r10882 r10924  
    2020    <main id="main" class="site-main" role="main">
    2121
    22         <div id="pattern-grid__container">
     22        <div id="patterns__container">
    2323            <!-- Filter placeholder -->
    2424
  • sites/trunk/wordpress.org/public_html/wp-content/themes/pub/wporg-patterns/single-wporg-pattern.php

    r10841 r10924  
    1212get_header();
    1313?>
    14 
     14    <input id="block-data" type="hidden" value="<?php echo rawurlencode( wp_json_encode( get_the_content() ) ); ?>" />
    1515    <main id="main" class="site-main col-12" role="main">
    1616
     
    2424                    <?php the_title( '<h1 class="entry-title">', '</h1>' ); ?>
    2525                    <p>A large hero section with an example background image and a heading in the center.</p>
    26                     <div class="pattern-actions">
     26                    <div id="pattern-actions" class="pattern-actions">
    2727                        <button class="button button-primary">Copy Pattern</button>
    2828                        <button class="button">Add to favorites</button>
  • sites/trunk/wordpress.org/public_html/wp-content/themes/pub/wporg-patterns/src/components/category-context-bar/index.js

    r10882 r10924  
    11/**
    2  * External dependencies
     2 * WordPress dependencies
    33 */
    44import { useEffect, useRef, useState } from '@wordpress/element';
     5import { useSelect } from '@wordpress/data';
     6import { getQueryArg } from '@wordpress/url';
    57
    6 function CategoryContextBar( { message, title, links } ) {
     8/**
     9 * Internal dependencies
     10 */
     11import { useRoute } from '../../hooks';
     12import { getCategoryFromPath } from '../../utils';
     13import { getContextMessage } from './messaging';
     14import { store as patternStore } from '../../store';
     15
     16function CategoryContextBar() {
     17    const { path } = useRoute();
    718    const [ height, setHeight ] = useState( 0 );
     19    const [ context, setContext ] = useState( {} );
    820    const innerRef = useRef( null );
    921
     22    const { isAllCategory, category, isLoadingPatterns, patterns } = useSelect(
     23        ( select ) => {
     24            const { getCategoryBySlug, getPatternsByQuery, isLoadingPatternsByQuery, getCurrentQuery } = select(
     25                patternStore
     26            );
     27            const categorySlug = getCategoryFromPath( path );
     28            const _category = getCategoryBySlug( categorySlug );
     29            const query = getCurrentQuery();
     30
     31            return {
     32                isAllCategory: _category && _category.id === -1,
     33                isLoadingPatterns: isLoadingPatternsByQuery( query ),
     34                patterns: query ? getPatternsByQuery( query ) : [],
     35                category: _category,
     36            };
     37        },
     38        [ path ]
     39    );
     40
    1041    useEffect( () => {
    11         if ( message ) {
    12             setHeight( innerRef.current.offsetHeight );
    13         } else {
    14             setHeight( 0 );
     42        if ( ! category || isLoadingPatterns ) {
     43            return;
    1544        }
    16     }, [ message ] );
     45
     46        const searchTerm = getQueryArg( path, 'search' );
     47
     48        let _context = {};
     49
     50        // Use the category count as default since it has the count of all the associated patterns
     51        let count = category.count;
     52
     53        // If we have a search term use the pattern results length.
     54        // Not: This is okay until we start using paging.
     55        if ( searchTerm ) {
     56            count = patterns.length;
     57        }
     58
     59        if ( ! isAllCategory || searchTerm ) {
     60            _context = getContextMessage( count, category.name, searchTerm );
     61        }
     62
     63        setContext( _context );
     64    }, [ category, isLoadingPatterns, patterns ] );
     65
     66    useEffect( () => {
     67        const _height = context.message ? innerRef.current.offsetHeight : 0;
     68        setHeight( _height );
     69    }, [ context.message ] );
    1770
    1871    return (
    1972        <header className="category-context__bar" style={ { height: `${ height }px` } }>
    2073            <div ref={ innerRef }>
    21                 <h2 className="category-context__bar__copy">{ message }</h2>
    22                 { links && links.length > 0 && (
     74                <h2 className="category-context__bar__copy">{ context.message }</h2>
     75                { context.links && context.links.length > 0 && (
    2376                    <div className="category-context__bar__links">
    24                         <h3 className="category-context__bar__title">{ title }</h3>
     77                        <h3 className="category-context__bar__title">{ context.title }</h3>
    2578
    2679                        <ul>
    27                             { links.map( ( i ) => (
     80                            { context.links.map( ( i ) => (
    2881                                <li key={ i.href }>
    2982                                    <a href={ i.href }>{ i.label }</a>
  • sites/trunk/wordpress.org/public_html/wp-content/themes/pub/wporg-patterns/src/components/category-menu/default.js

    r10882 r10924  
    2929            height: activeRef.current.offsetHeight,
    3030        } );
    31     }, [ containerRef, activeRef, path ] );
     31    } );
    3232
    3333    if ( ! isLoading && ! options.length ) {
     
    3737    return (
    3838        <ul className={ `category-menu ${ isLoading ? 'category-menu--is-loading' : '' } ` } ref={ containerRef }>
    39             { options.map( ( i ) => (
    40                 <li key={ i.value }>
    41                     <a
    42                         className={ path === i.value ? 'category-menu--is-active' : '' }
    43                         href={ i.value }
    44                         ref={ path === i.value ? activeRef : null }
    45                         onClick={ ( { target } ) => onClick( target.hash ) }
    46                     >
    47                         { i.label }
    48                     </a>
    49                 </li>
    50             ) ) }
     39            { options.map( ( i ) => {
     40                const isActive = path === i.value;
     41
     42                return (
     43                    <li key={ i.value }>
     44                        <a
     45                            className={ isActive ? 'category-menu--is-active' : '' }
     46                            href={ i.value }
     47                            ref={ isActive ? activeRef : null }
     48                            onClick={ onClick }
     49                        >
     50                            { i.label }
     51                        </a>
     52                    </li>
     53                );
     54            } ) }
    5155        </ul>
    5256    );
  • sites/trunk/wordpress.org/public_html/wp-content/themes/pub/wporg-patterns/src/components/category-menu/mobile.js

    r10882 r10924  
    2121                { options.map( ( i ) => (
    2222                    <li key={ i.value }>
    23                         <a href={ i.value } onClick={ () => {
    24                             setIsOpen( false );
    25                             onClick( i.value );
    26                         } }>
     23                        <a
     24                            href={ i.value }
     25                            onClick={ ( event ) => {
     26                                setIsOpen( false );
     27                                onClick( event );
     28                            } }
     29                        >
    2730                            { i.label }
    2831                        </a>
  • sites/trunk/wordpress.org/public_html/wp-content/themes/pub/wporg-patterns/src/components/category-search/index.js

    r10882 r10924  
    55import { Icon, search } from '@wordpress/icons';
    66
    7 const CategorySearch = ( { isLoading } ) => {
     7const CategorySearch = ( { defaultValue, isLoading, isVisible, onUpdate, onSubmit } ) => {
    88    if ( isLoading ) {
    99        return <span className="category-search--is-loading" />;
    1010    }
    1111
     12    if ( ! isVisible ) {
     13        return null;
     14    }
     15
    1216    return (
    13         <form method="get" action="/" className="category-search">
     17        <form method="get" action="/" className="category-search" onSubmit={ onSubmit }>
    1418            <label htmlFor="pattern-search" className="screen-reader-text">
    1519                { __( 'Search for:', 'wporg-patterns' ) }
    1620            </label>
    17             <input id="pattern-search" type="search" placeholder={ __( 'Search patterns', 'wporg-patterns' ) } />
    18             <button className="category-search__button">
     21            <input
     22                onChange={ onUpdate }
     23                defaultValue={ defaultValue }
     24                id="pattern-search"
     25                type="search"
     26                placeholder={ __( 'Search patterns', 'wporg-patterns' ) }
     27            />
     28            <button type="submit" className="category-search__button">
    1929                <span className="screen-reader-text"> { __( 'Search patterns', 'wporg-patterns' ) }</span>
    2030                <Icon icon={ search } />
  • sites/trunk/wordpress.org/public_html/wp-content/themes/pub/wporg-patterns/src/components/pattern-grid-menu/index.js

    r10882 r10924  
    11/**
    2  * External dependencies
     2 * WordPress dependencies
    33 */
    4 import { store as coreStore } from '@wordpress/core-data';
     4import { useDebounce } from '@wordpress/compose';
    55import { useSelect } from '@wordpress/data';
    6 import { useEffect, useState } from '@wordpress/element';
    7 import { getPath } from '@wordpress/url';
     6import { addQueryArgs, getPath, getQueryArg } from '@wordpress/url';
    87
    98/**
     
    1312import CategorySearch from '../category-search';
    1413import CategoryContextBar from '../category-context-bar';
    15 import contextMessaging from './messaging';
     14import { store as patternStore } from '../../store';
     15import { useRoute } from '../../hooks';
     16import { removeQueryString } from '../../utils';
    1617
    1718/**
    1819 * Module constants
    1920 */
    20 const PATTERN_TAXONOMY = 'wporg-pattern-category';
     21const DEBOUNCE_MS = 300;
    2122
    2223const PatternGridMenu = () => {
    23     // Show loading state
    24     const [ showLoading, setShowLoading ] = useState( true );
    25     const [ isFetching, setIsFetching ] = useState( false );
    26     const [ path, setPath ] = useState();
    27     const [ categoryContext, setCategoryContext ] = useState( undefined );
     24    const { path, update: updatePath } = useRoute();
    2825
    29     const categories = useSelect( ( select ) =>
    30         select( coreStore ).getEntityRecords( 'taxonomy', PATTERN_TAXONOMY )
    31     );
     26    const { categories, isLoading, hasLoaded } = useSelect( ( select ) => {
     27        const { getCategories, isLoadingCategories, hasLoadedCategories } = select( patternStore );
     28        return {
     29            categories: getCategories(),
     30            isLoading: isLoadingCategories(),
     31            hasLoaded: hasLoadedCategories(),
     32        };
     33    } );
    3234
    33     useEffect( () => {
    34         const pathOnLoad = getPath( window.location.href );
    35         setPath( pathOnLoad );
    36     }, [] );
     35    const handleUpdatePath = ( value ) => {
     36        const updatedPath = addQueryArgs( path, {
     37            search: value,
     38        } );
    3739
    38     useEffect( () => {
    39         // Since categories starts as an [] then switches to null
    40         if ( showLoading && categories === null ) {
    41             setIsFetching( true );
    42         }
     40        updatePath( updatedPath );
     41    };
    4342
    44         if ( isFetching && Array.isArray( categories ) ) {
    45             setShowLoading( false );
    46             setIsFetching( false );
    47         }
    48     }, [ isFetching, categories ] );
    49 
    50     useEffect( () => {
    51         setCategoryContext( contextMessaging[ path ] );
    52     }, [ path ] );
     43    const debouncedHandleUpdate = useDebounce( handleUpdatePath, DEBOUNCE_MS );
    5344
    5445    return (
     
    5647            <nav className="pattern-grid-menu">
    5748                <CategoryMenu
    58                     path={ path }
     49                    path={ removeQueryString( path ) }
    5950                    options={
    6051                        categories
    6152                            ? categories.map( ( record ) => {
    6253                                return {
    63                                     // TODO: This url is temporary and won't use the # symbol
    64                                     value: `#/pattern-categories/${ record.slug }`,
     54                                    value: `/${ getPath( record.link ) || '' }`,
    6555                                    label: record.name,
    6656                                };
     
    6858                            : []
    6959                    }
    70                     onClick={ ( _path ) => setPath( _path ) }
    71                     isLoading={ showLoading }
     60                    onClick={ ( event ) => {
     61                        event.preventDefault();
     62                        updatePath( event.target.pathname );
     63                    } }
     64                    isLoading={ isLoading }
    7265                />
    73                 <CategorySearch isLoading={ showLoading } />
     66                <CategorySearch
     67                    isLoading={ isLoading }
     68                    isVisible={ hasLoaded }
     69                    defaultValue={ getQueryArg( window.location.href, 'search' ) }
     70                    onUpdate={ ( event ) => {
     71                        event.preventDefault();
     72                        debouncedHandleUpdate( event.target.value );
     73                    } }
     74                    onSubmit={ ( event ) => {
     75                        event.preventDefault();
     76                        debouncedHandleUpdate( event.target.elements[ 0 ].value );
     77                    } }
     78                />
    7479            </nav>
    75             <CategoryContextBar { ...categoryContext } />
     80            <CategoryContextBar />
    7681        </>
    7782    );
  • sites/trunk/wordpress.org/public_html/wp-content/themes/pub/wporg-patterns/src/components/pattern-grid/index.js

    r10882 r10924  
    99 */
    1010import PatternThumbnail from '../pattern-thumbnail';
    11 import PatternGridMenu from '../pattern-grid-menu';
    1211import { store as patternStore } from '../../store';
    1312
    1413function PatternGrid() {
    15     const posts = useSelect( ( select ) => {
    16         const { getPatternsByQuery } = select( patternStore );
    17         return getPatternsByQuery( {} );
     14    const { posts, isLoading } = useSelect( ( select ) => {
     15        const { getPatternsByQuery, isLoadingPatternsByQuery, getCurrentQuery } = select( patternStore );
     16        const query = getCurrentQuery();
     17
     18        return {
     19            posts: query ? getPatternsByQuery( query ) : [],
     20            isLoading: query && isLoadingPatternsByQuery( query ),
     21        };
    1822    } );
    19     // `posts` will be null while the fetch happens.
    20     const isLoading = ! Array.isArray( posts );
    2123
    2224    return (
    23         <>
    24             <PatternGridMenu />
    25 
    26             <div className="pattern-grid">
    27                 { isLoading ? (
    28                     <Spinner />
    29                 ) : (
    30                     posts.map( ( post ) => <PatternThumbnail key={ post.id } pattern={ post } /> )
    31                 ) }
    32             </div>
    33         </>
     25        <div className="pattern-grid">
     26            { isLoading ? (
     27                <Spinner />
     28            ) : (
     29                posts.map( ( post ) => <PatternThumbnail key={ post.id } pattern={ post } /> )
     30            ) }
     31        </div>
    3432    );
    3533}
  • sites/trunk/wordpress.org/public_html/wp-content/themes/pub/wporg-patterns/src/index.js

    r10882 r10924  
    88 */
    99import PatternPreview from './components/pattern-preview';
    10 import PatternGrid from './components/pattern-grid';
     10import PatternPreviewActions from './components/pattern-preview-actions';
     11import Patterns from './components/patterns';
    1112
    1213// Load the preview into any awaiting preview container.
     
    2425
    2526// Load the preview into any awaiting preview container.
    26 const gridContainer = document.getElementById( 'pattern-grid__container' );
     27const gridContainer = document.getElementById( 'patterns__container' );
    2728if ( gridContainer ) {
    28     render( <PatternGrid />, gridContainer );
     29    render( <Patterns />, gridContainer );
    2930}
     31
     32// Load the pattern preview actions
     33const patternActionsContainer = document.getElementById( 'pattern-actions' );
     34if ( patternActionsContainer ) {
     35    render( <PatternPreviewActions />, patternActionsContainer );
     36}
  • sites/trunk/wordpress.org/public_html/wp-content/themes/pub/wporg-patterns/src/store/actions.js

    r10882 r10924  
    2121    return { type: 'LOAD_BLOCK_PATTERNS', query: query, patterns: patterns };
    2222}
     23
     24/**
     25 * Get the action object signalling that the current view has been set.
     26 *
     27 * @param {string} query Query object.
     28 * @return {Object} Action object.
     29 */
     30export function setCurrentQuery( query ) {
     31    return { type: 'SET_CURRENT_QUERY', query: query };
     32}
     33
     34/**
     35 * Get the action object signalling that categories have been requested.
     36 *
     37 * @return {Object} Action object.
     38 */
     39export function fetchCategories() {
     40    return { type: 'FETCH_CATEGORIES' };
     41}
     42
     43/**
     44 * Get the action object signalling that categories have been loaded.
     45 *
     46 * @param {Array} categories A list of categories.
     47 * @return {Object} Action object.
     48 */
     49export function loadCategories( categories ) {
     50    return { type: 'LOAD_CATEGORIES', categories: categories };
     51}
  • sites/trunk/wordpress.org/public_html/wp-content/themes/pub/wporg-patterns/src/store/reducer.js

    r10882 r10924  
    33 */
    44import { combineReducers } from '@wordpress/data';
     5
     6/**
     7 * Internal dependencies
     8 */
     9import { getAllCategory } from './utils';
    510
    611/**
     
    1621        queries: queries( state.queries, action ),
    1722    };
     23}
     24
     25/**
     26 * Reducer to track categories.
     27 *
     28 * @param {Object} state Current state.
     29 * @param {Object} action Dispatched action.
     30 * @return {Object} Updated state.
     31 */
     32export function categories( state = undefined, action ) {
     33    switch ( action.type ) {
     34        case 'FETCH_CATEGORIES':
     35            return null; // Indicates the query is in progress
     36        case 'LOAD_CATEGORIES':
     37            // Sort the categories alphabetically.
     38            // See: https://github.com/WordPress/pattern-directory/pull/76#issuecomment-818330872
     39            const sorted = ( action.categories || [] ).sort( ( a, b ) => a.name.localeCompare( b.name ) );
     40
     41            return [ getAllCategory(), ...sorted ];
     42    }
     43
     44    return state;
     45}
     46
     47/**
     48 * Reducer to track the current query.
     49 *
     50 * @param {Object} state Current state.
     51 * @param {Object} action Dispatched action.
     52 * @return {Object} Updated state.
     53 */
     54export function currentQuery( state = undefined, action ) {
     55    switch ( action.type ) {
     56        case 'SET_CURRENT_QUERY':
     57            return action.query;
     58    }
     59
     60    return state;
    1861}
    1962
     
    4083export default combineReducers( {
    4184    patterns,
    42     // taxonomy items,
    43     // filter query,
     85    categories,
     86    currentQuery,
    4487    // favorites,
    4588} );
  • sites/trunk/wordpress.org/public_html/wp-content/themes/pub/wporg-patterns/src/store/resolvers.js

    r10882 r10924  
    88 * Internal dependencies
    99 */
    10 import { fetchPatterns, loadPatterns } from './actions';
     10import { fetchCategories, fetchPatterns, loadCategories, loadPatterns } from './actions';
    1111import { getQueryString } from './utils';
    1212
     
    2121    } catch ( error ) {}
    2222}
     23
     24export function* getCategories() {
     25    try {
     26        yield fetchCategories();
     27        const results = yield apiFetch( {
     28            path: addQueryArgs( '/wp/v2/pattern-categories' ),
     29        } );
     30        yield loadCategories( results );
     31    } catch ( error ) {}
     32}
  • sites/trunk/wordpress.org/public_html/wp-content/themes/pub/wporg-patterns/src/store/selectors.js

    r10882 r10924  
    5252    return state.patterns.byId[ id ] || null;
    5353}
     54
     55/**
     56 * Get the current query.
     57 *
     58 * @param {Object} state Global application state.
     59 *
     60 * @return {Object} The current query.
     61 */
     62export function getCurrentQuery( state ) {
     63    return state.currentQuery;
     64}
     65
     66/**
     67 * Check if there is a pending request for category query.
     68 *
     69 * @param {Object} state Global application state.
     70 *
     71 * @return {boolean} True if an API request is in progress for this query.
     72 */
     73export function isLoadingCategories( state ) {
     74    return state.categories === null;
     75}
     76
     77/**
     78 * Check if the categories have been loaded.
     79 *
     80 * @param {Object} state Global application state.
     81 *
     82 * @return {boolean} True if categories is an array.
     83 */
     84export function hasLoadedCategories( state ) {
     85    return Array.isArray( state.categories );
     86}
     87
     88/**
     89 * Get all loaded categories.
     90 *
     91 * @param {Object} state Global application state.
     92 *
     93 * @return {Array} A list of all categories.
     94 */
     95export function getCategories( state ) {
     96    return state.categories;
     97}
     98
     99/**
     100 * Get category by its slug.
     101 *
     102 * @param {Object} state Global application state.
     103 * @param {string} slug Category slug.
     104 *
     105 * @return {Array|undefined} The requested category.
     106 */
     107export function getCategoryBySlug( state, slug ) {
     108    if ( ! hasLoadedCategories( state ) ) {
     109        return;
     110    }
     111
     112    const [ cat ] = state.categories.filter( ( i ) => i.slug === slug );
     113    return cat;
     114}
  • sites/trunk/wordpress.org/public_html/wp-content/themes/pub/wporg-patterns/src/store/test/reducer.js

    r10882 r10924  
    44import apiPatterns from './fixtures/patterns';
    55import apiPatternsPage2 from './fixtures/patterns-page-2';
    6 import { patterns } from '../reducer';
     6import apiCategories from './fixtures/categories';
     7import { categories, patterns } from '../reducer';
    78
    89describe( 'state', () => {
     
    5960        } );
    6061    } );
     62
     63    describe( 'categories', () => {
     64        it( 'should return null when fetching categories', () => {
     65            const state = categories(
     66                {},
     67                {
     68                    type: 'FETCH_CATEGORIES',
     69                }
     70            );
     71
     72            expect( state ).toBeNull();
     73        } );
     74
     75        it( 'should store categories in the state with the "all" category', () => {
     76            const state = categories(
     77                {},
     78                {
     79                    type: 'LOAD_CATEGORIES',
     80                    categories: apiCategories,
     81                }
     82            );
     83
     84            const lengthWithAll = apiCategories.length + 1;
     85
     86            expect( state ).toHaveLength( lengthWithAll );
     87        } );
     88    } );
    6189} );
  • sites/trunk/wordpress.org/public_html/wp-content/themes/pub/wporg-patterns/src/store/test/resolvers.js

    r10882 r10924  
    33 */
    44import apiPatterns from './fixtures/patterns';
    5 import { getPatternsByQuery } from '../resolvers';
     5import apiCategories from './fixtures/categories';
     6import { getCategories, getPatternsByQuery } from '../resolvers';
    67
    78describe( 'getPatternsByQuery', () => {
     
    3031} );
    3132
     33describe( 'getCategories', () => {
     34    it( 'yields with the requested patterns', async () => {
     35        const generator = getCategories();
     36
     37        expect( generator.next().value ).toEqual( {
     38            type: 'FETCH_CATEGORIES',
     39        } );
     40
     41        // trigger apiFetch
     42        const { value: apiFetchAction } = generator.next();
     43        expect( apiFetchAction.request ).toEqual( {
     44            path: '/wp/v2/pattern-categories',
     45        } );
     46
     47        // Provide response and trigger action
     48        const { value: received } = generator.next( apiCategories );
     49        expect( received ).toEqual( {
     50            type: 'LOAD_CATEGORIES',
     51            categories: apiCategories,
     52        } );
     53    } );
     54} );
  • sites/trunk/wordpress.org/public_html/wp-content/themes/pub/wporg-patterns/src/store/test/selectors.js

    r10882 r10924  
    33 */
    44import apiPatterns from './fixtures/patterns';
    5 import { getPattern, getPatterns, getPatternsByQuery, isLoadingPatternsByQuery } from '../selectors';
     5import apiCategories from './fixtures/categories';
     6import {
     7    getCategories,
     8    getCategoryBySlug,
     9    getCurrentQuery,
     10    getPattern,
     11    getPatterns,
     12    getPatternsByQuery,
     13    hasLoadedCategories,
     14    isLoadingCategories,
     15    isLoadingPatternsByQuery,
     16} from '../selectors';
    617
    718describe( 'selectors', () => {
     
    91102        } );
    92103    } );
     104
     105    describe( 'getCurrentQuery', () => {
     106        it( 'should get an empty object if there is no query', () => {
     107            const initialQueryState = {
     108                currentQuery: {},
     109            };
     110
     111            expect( getCurrentQuery( initialQueryState ) ).toMatchObject( {} );
     112        } );
     113
     114        it( 'should get an the correct query object', () => {
     115            const initialQueryState = {
     116                currentQuery: {
     117                    'pattern-categories': [ 1 ],
     118                },
     119            };
     120
     121            expect( getCurrentQuery( initialQueryState ) ).toMatchObject( initialQueryState.currentQuery );
     122        } );
     123    } );
     124
     125    describe( 'isLoadingCategories', () => {
     126        it( 'should get true when state is null', () => {
     127            const categoryState = {
     128                categories: null,
     129            };
     130
     131            expect( isLoadingCategories( categoryState ) ).toBe( true );
     132        } );
     133
     134        it( 'should get false when state is an array', () => {
     135            const categoryState = {
     136                categories: apiCategories,
     137            };
     138            expect( isLoadingCategories( categoryState ) ).toBe( false );
     139        } );
     140    } );
     141
     142    describe( 'hasLoadedCategories', () => {
     143        it( 'should get false when state is undefined', () => {
     144            const categoryState = {
     145                categories: undefined,
     146            };
     147            expect( hasLoadedCategories( categoryState ) ).toBe( false );
     148        } );
     149
     150        it( 'should get true when state is an array', () => {
     151            const categoryState = {
     152                categories: apiCategories,
     153            };
     154            expect( hasLoadedCategories( categoryState ) ).toBe( true );
     155        } );
     156    } );
     157
     158    describe( 'getCategories', () => {
     159        it( 'should get a list of categories', () => {
     160            const categoryState = {
     161                categories: apiCategories,
     162            };
     163
     164            expect( getCategories( categoryState ) ).toHaveLength( apiCategories.length );
     165        } );
     166    } );
     167
     168    describe( 'getCategoryBySlug', () => {
     169        it( 'should get undefined if categories have not loaded', () => {
     170            expect(
     171                getCategoryBySlug(
     172                    {
     173                        categories: undefined,
     174                    },
     175                    'header'
     176                )
     177            ).toBeUndefined();
     178
     179            expect(
     180                getCategoryBySlug(
     181                    {
     182                        categories: null,
     183                    },
     184                    'header'
     185                )
     186            ).toBeUndefined();
     187        } );
     188
     189        it( 'should get undefined if there are no categories', () => {
     190            const categoryState = {
     191                categories: [],
     192            };
     193
     194            expect( getCategoryBySlug( categoryState, apiCategories[ 0 ].slug ) ).toBeUndefined();
     195        } );
     196
     197        it( 'should get undefined if no category exist', () => {
     198            const categoryState = {
     199                categories: apiCategories,
     200            };
     201
     202            expect( getCategoryBySlug( categoryState, 'missing-category-slug' ) ).toBeUndefined();
     203        } );
     204
     205        it( 'should get the correct category', () => {
     206            const categoryState = {
     207                categories: apiCategories,
     208            };
     209
     210            expect( getCategoryBySlug( categoryState, apiCategories[ 0 ].slug ) ).toHaveProperty(
     211                'id',
     212                apiCategories[ 0 ].id
     213            );
     214        } );
     215    } );
    93216} );
  • sites/trunk/wordpress.org/public_html/wp-content/themes/pub/wporg-patterns/src/store/utils.js

    r10882 r10924  
    33 */
    44import { addQueryArgs } from '@wordpress/url';
     5import { __ } from '@wordpress/i18n';
    56
    67/**
     
    3940    return stableKey;
    4041}
     42
     43/**
     44 * Get the first category used to display all patterns.
     45 *
     46 * See Schema:
     47 * https://developer.wordpress.org/rest-api/reference/categories/
     48 *
     49 * @return {Object} A category object
     50 */
     51export function getAllCategory() {
     52    return {
     53        id: -1,
     54        slug: '', // Slug matches url
     55        name: __( 'All', 'wporg-patterns' ),
     56        link: '/',
     57    };
     58}
Note: See TracChangeset for help on using the changeset viewer.