{"version":3,"file":"application-DTYGov6i.js","sources":["../../../node_modules/react-redux/es/hooks/useReduxContext.js","../../../node_modules/react-redux/es/hooks/useStore.js","../../../node_modules/react-redux/es/hooks/useDispatch.js","../../../node_modules/react-redux/es/hooks/useSelector.js","../../../client/stripe-loader.ts","../../../client/components/core/select.tsx","../../../client/components/core/address-country-state.tsx","../../../client/modules/product-images/action-creators.ts","../../../client/components/core/carousel/context.tsx","../../../client/components/core/carousel/container.tsx","../../../node_modules/react-motion/lib/mapToZero.js","../../../node_modules/react-motion/lib/stripStyle.js","../../../node_modules/react-motion/lib/stepper.js","../../../node_modules/react-motion/node_modules/performance-now/lib/performance-now.js","../../../node_modules/performance-now/lib/performance-now.js","../../../node_modules/raf/index.js","../../../node_modules/react-motion/lib/shouldStopAnimation.js","../../../node_modules/react-motion/lib/Motion.js","../../../node_modules/react-motion/lib/StaggeredMotion.js","../../../node_modules/react-motion/lib/mergeDiff.js","../../../node_modules/react-motion/lib/TransitionMotion.js","../../../node_modules/react-motion/lib/presets.js","../../../node_modules/react-motion/lib/spring.js","../../../node_modules/react-motion/lib/reorderKeys.js","../../../node_modules/react-motion/lib/react-motion.js","../../../client/components/core/carousel/item-map.tsx","../../../client/components/core/carousel/items.tsx","../../../client/components/core/carousel/item-thumbnails.tsx","../../../client/components/core/responsive-image.tsx","../../../client/components/core/centered-responsive-image.tsx","../../../node_modules/@vimeo/player/dist/player.es.js","../../../client/components/core/vimeo-embed.tsx","../../../client/components/product/media.tsx","../../../client/components/product/images-modal.tsx","../../../node_modules/chain-function/index.js","../../../node_modules/warning/browser.js","../../../node_modules/react-transition-group/utils/ChildMapping.js","../../../node_modules/react-transition-group/TransitionGroup.js","../../../node_modules/@babel/runtime/helpers/interopRequireDefault.js","../../../node_modules/dom-helpers/class/hasClass.js","../../../node_modules/dom-helpers/class/addClass.js","../../../node_modules/dom-helpers/class/removeClass.js","../../../node_modules/dom-helpers/util/inDOM.js","../../../node_modules/dom-helpers/util/requestAnimationFrame.js","../../../node_modules/dom-helpers/transition/properties.js","../../../node_modules/react-transition-group/utils/PropTypes.js","../../../node_modules/react-transition-group/CSSTransitionGroupChild.js","../../../node_modules/react-transition-group/CSSTransitionGroup.js","../../../node_modules/react-addons-css-transition-group/index.js","../../../client/components/flash-message.tsx","../../../client/components/flash-messages.tsx","../../../client/components/social-media-links.tsx","../../../client/modules/options/action-creators.ts","../../../client/components/navigation-button.tsx","../../../client/components/search-button.tsx","../../../client/modules/current-order/getters.ts","../../../client/components/cart-link.tsx","../../../client/components/search-form-input.tsx","../../../client/components/search-form-result.tsx","../../../client/components/search-form-results.tsx","../../../client/components/search-form.tsx","../../../client/components/mobile-header.tsx","../../../client/utils/location.ts","../../../client/components/products/taxon-navigation-item.tsx","../../../client/components/products/taxon-navigation-group.tsx","../../../client/components/products/taxon-navigation.tsx","../../../node_modules/ev-emitter/ev-emitter.js","../../../node_modules/get-size/get-size.js","../../../node_modules/desandro-matches-selector/matches-selector.js","../../../node_modules/fizzy-ui-utils/utils.js","../../../node_modules/outlayer/item.js","../../../node_modules/outlayer/outlayer.js","../../../node_modules/masonry-layout/masonry.js","../../../node_modules/imagesloaded/imagesloaded.js","../../../client/components/products/store-item.tsx","../../../client/components/products/store-items.tsx","../../../client/components/products/paginated-store-items.tsx","../../../client/components/products/search-results-group.tsx","../../../client/components/products/search-results.tsx","../../../node_modules/numeral/numeral.js","../../../client/modules/product/getters.ts","../../../client/components/product/price.tsx","../../../client/components/product/option-value.tsx","../../../client/components/product/option.tsx","../../../client/components/product/options.tsx","../../../client/components/product/restock-notification-form.tsx","../../../client/components/product/cart.tsx","../../../client/types.ts","../../../client/components/product/cart-popover.tsx","../../../client/components/product/image.tsx","../../../client/components/cart/line-item.tsx","../../../client/components/cart/line-items-section.tsx","../../../client/components/cart/empty-state.tsx","../../../client/components/cart/subtotal.tsx","../../../client/components/cart/actions.tsx","../../../client/components/cart/line-items.tsx","../../../client/components/cart/static-line-item.tsx","../../../client/components/core/form/rails-hidden-inputs.tsx","../../../client/components/checkout/payment-form.tsx","../../../client/components/checkout/use-billing-checkbox.tsx","../../../client/components/font-licensing/licenses.tsx","../../../client/components/checkout/license-agreement.tsx","../../../node_modules/jquery-smooth-scroll/jquery.smooth-scroll.js","../../../client/components/font-family/page-nav.tsx","../../../client/modules/font-declarations/index.ts","../../../client/components/font-family/type-tester.tsx","../../../client/components/font-family/type-testers-section.tsx","../../../client/components/font-family/specimens.tsx","../../../client/components/font-family/specimens-section.tsx","../../../client/components/font-family/about-section.tsx","../../../client/components/font-family/extras-section.tsx","../../../node_modules/tether/dist/js/tether.js","../../../node_modules/react-tether/lib/TetherComponent.js","../../../node_modules/react-tether/lib/react-tether.js","../../../client/components/core/tooltip.tsx","../../../client/components/font-family/glyphs-item.tsx","../../../client/components/font-family/glyphs.tsx","../../../client/components/font-family/glyphs-section.tsx","../../../client/components/font-family/features.tsx","../../../client/components/font-family/features-section.tsx","../../../client/components/font-licensing/add-to-bag-button.tsx","../../../client/utils/money.ts","../../../client/components/font-licensing/total-price.tsx","../../../client/components/font-licensing/section-header.tsx","../../../client/components/font-licensing/context.tsx","../../../client/components/font-licensing/type-container.tsx","../../../client/components/font-licensing/options.tsx","../../../client/components/font-licensing/style-select-all.tsx","../../../client/components/font-licensing/style-list.tsx","../../../client/components/font-licensing/type-container/desktop.tsx","../../../client/components/font-licensing/type-container/web.tsx","../../../client/components/core/modal.tsx","../../../client/components/font-licensing/modal.tsx","../../../client/components/font-licensing/section.tsx","../../../client/components/font-family/declarations.tsx","../../../client/components/font-family/page.tsx","../../../client/components/font-download-button.tsx","../../../client/components/home-page-features/item.tsx","../../../client/components/home-page-features/section.tsx","../../../node_modules/scriptjs/dist/script.js","../../../client/utils/useScript.ts","../../../client/components/klaviyo-form.tsx","../../../client/components/home-page-features.tsx","../../../client/initializers/ajax.ts","../../../client/initializers/body-classes.ts","../../../client/initializers/form-recaptcha.ts","../../../client/entrypoints/application.js"],"sourcesContent":["import { useContext } from 'react';\nimport { ReactReduxContext } from '../components/Context';\n/**\r\n * A hook to access the value of the `ReactReduxContext`. This is a low-level\r\n * hook that you should usually not need to call directly.\r\n *\r\n * @returns {any} the value of the `ReactReduxContext`\r\n *\r\n * @example\r\n *\r\n * import React from 'react'\r\n * import { useReduxContext } from 'react-redux'\r\n *\r\n * export const CounterComponent = ({ value }) => {\r\n * const { store } = useReduxContext()\r\n * return
{store.getState()}
\r\n * }\r\n */\n\nexport function useReduxContext() {\n var contextValue = useContext(ReactReduxContext);\n\n if (process.env.NODE_ENV !== 'production' && !contextValue) {\n throw new Error('could not find react-redux context value; please ensure the component is wrapped in a ');\n }\n\n return contextValue;\n}","import { useContext } from 'react';\nimport { ReactReduxContext } from '../components/Context';\nimport { useReduxContext as useDefaultReduxContext } from './useReduxContext';\n/**\r\n * Hook factory, which creates a `useStore` hook bound to a given context.\r\n *\r\n * @param {React.Context} [context=ReactReduxContext] Context passed to your ``.\r\n * @returns {Function} A `useStore` hook bound to the specified context.\r\n */\n\nexport function createStoreHook(context) {\n if (context === void 0) {\n context = ReactReduxContext;\n }\n\n var useReduxContext = context === ReactReduxContext ? useDefaultReduxContext : function () {\n return useContext(context);\n };\n return function useStore() {\n var _useReduxContext = useReduxContext(),\n store = _useReduxContext.store;\n\n return store;\n };\n}\n/**\r\n * A hook to access the redux store.\r\n *\r\n * @returns {any} the redux store\r\n *\r\n * @example\r\n *\r\n * import React from 'react'\r\n * import { useStore } from 'react-redux'\r\n *\r\n * export const ExampleComponent = () => {\r\n * const store = useStore()\r\n * return
{store.getState()}
\r\n * }\r\n */\n\nexport var useStore = /*#__PURE__*/createStoreHook();","import { ReactReduxContext } from '../components/Context';\nimport { useStore as useDefaultStore, createStoreHook } from './useStore';\n/**\r\n * Hook factory, which creates a `useDispatch` hook bound to a given context.\r\n *\r\n * @param {React.Context} [context=ReactReduxContext] Context passed to your ``.\r\n * @returns {Function} A `useDispatch` hook bound to the specified context.\r\n */\n\nexport function createDispatchHook(context) {\n if (context === void 0) {\n context = ReactReduxContext;\n }\n\n var useStore = context === ReactReduxContext ? useDefaultStore : createStoreHook(context);\n return function useDispatch() {\n var store = useStore();\n return store.dispatch;\n };\n}\n/**\r\n * A hook to access the redux `dispatch` function.\r\n *\r\n * @returns {any|function} redux store's `dispatch` function\r\n *\r\n * @example\r\n *\r\n * import React, { useCallback } from 'react'\r\n * import { useDispatch } from 'react-redux'\r\n *\r\n * export const CounterComponent = ({ value }) => {\r\n * const dispatch = useDispatch()\r\n * const increaseCounter = useCallback(() => dispatch({ type: 'increase-counter' }), [])\r\n * return (\r\n *
\r\n * {value}\r\n * \r\n *
\r\n * )\r\n * }\r\n */\n\nexport var useDispatch = /*#__PURE__*/createDispatchHook();","import { useReducer, useRef, useMemo, useContext, useDebugValue } from 'react';\nimport { useReduxContext as useDefaultReduxContext } from './useReduxContext';\nimport { createSubscription } from '../utils/Subscription';\nimport { useIsomorphicLayoutEffect } from '../utils/useIsomorphicLayoutEffect';\nimport { ReactReduxContext } from '../components/Context';\n\nvar refEquality = function refEquality(a, b) {\n return a === b;\n};\n\nfunction useSelectorWithStoreAndSubscription(selector, equalityFn, store, contextSub) {\n var _useReducer = useReducer(function (s) {\n return s + 1;\n }, 0),\n forceRender = _useReducer[1];\n\n var subscription = useMemo(function () {\n return createSubscription(store, contextSub);\n }, [store, contextSub]);\n var latestSubscriptionCallbackError = useRef();\n var latestSelector = useRef();\n var latestStoreState = useRef();\n var latestSelectedState = useRef();\n var storeState = store.getState();\n var selectedState;\n\n try {\n if (selector !== latestSelector.current || storeState !== latestStoreState.current || latestSubscriptionCallbackError.current) {\n var newSelectedState = selector(storeState); // ensure latest selected state is reused so that a custom equality function can result in identical references\n\n if (latestSelectedState.current === undefined || !equalityFn(newSelectedState, latestSelectedState.current)) {\n selectedState = newSelectedState;\n } else {\n selectedState = latestSelectedState.current;\n }\n } else {\n selectedState = latestSelectedState.current;\n }\n } catch (err) {\n if (latestSubscriptionCallbackError.current) {\n err.message += \"\\nThe error may be correlated with this previous error:\\n\" + latestSubscriptionCallbackError.current.stack + \"\\n\\n\";\n }\n\n throw err;\n }\n\n useIsomorphicLayoutEffect(function () {\n latestSelector.current = selector;\n latestStoreState.current = storeState;\n latestSelectedState.current = selectedState;\n latestSubscriptionCallbackError.current = undefined;\n });\n useIsomorphicLayoutEffect(function () {\n function checkForUpdates() {\n try {\n var newStoreState = store.getState(); // Avoid calling selector multiple times if the store's state has not changed\n\n if (newStoreState === latestStoreState.current) {\n return;\n }\n\n var _newSelectedState = latestSelector.current(newStoreState);\n\n if (equalityFn(_newSelectedState, latestSelectedState.current)) {\n return;\n }\n\n latestSelectedState.current = _newSelectedState;\n latestStoreState.current = newStoreState;\n } catch (err) {\n // we ignore all errors here, since when the component\n // is re-rendered, the selectors are called again, and\n // will throw again, if neither props nor store state\n // changed\n latestSubscriptionCallbackError.current = err;\n }\n\n forceRender();\n }\n\n subscription.onStateChange = checkForUpdates;\n subscription.trySubscribe();\n checkForUpdates();\n return function () {\n return subscription.tryUnsubscribe();\n };\n }, [store, subscription]);\n return selectedState;\n}\n/**\r\n * Hook factory, which creates a `useSelector` hook bound to a given context.\r\n *\r\n * @param {React.Context} [context=ReactReduxContext] Context passed to your ``.\r\n * @returns {Function} A `useSelector` hook bound to the specified context.\r\n */\n\n\nexport function createSelectorHook(context) {\n if (context === void 0) {\n context = ReactReduxContext;\n }\n\n var useReduxContext = context === ReactReduxContext ? useDefaultReduxContext : function () {\n return useContext(context);\n };\n return function useSelector(selector, equalityFn) {\n if (equalityFn === void 0) {\n equalityFn = refEquality;\n }\n\n if (process.env.NODE_ENV !== 'production') {\n if (!selector) {\n throw new Error(\"You must pass a selector to useSelector\");\n }\n\n if (typeof selector !== 'function') {\n throw new Error(\"You must pass a function as a selector to useSelector\");\n }\n\n if (typeof equalityFn !== 'function') {\n throw new Error(\"You must pass a function as an equality function to useSelector\");\n }\n }\n\n var _useReduxContext = useReduxContext(),\n store = _useReduxContext.store,\n contextSub = _useReduxContext.subscription;\n\n var selectedState = useSelectorWithStoreAndSubscription(selector, equalityFn, store, contextSub);\n useDebugValue(selectedState);\n return selectedState;\n };\n}\n/**\r\n * A hook to access the redux store's state. This hook takes a selector function\r\n * as an argument. The selector is called with the store state.\r\n *\r\n * This hook takes an optional equality comparison function as the second parameter\r\n * that allows you to customize the way the selected state is compared to determine\r\n * whether the component needs to be re-rendered.\r\n *\r\n * @param {Function} selector the selector function\r\n * @param {Function=} equalityFn the function that will be used to determine equality\r\n *\r\n * @returns {any} the selected state\r\n *\r\n * @example\r\n *\r\n * import React from 'react'\r\n * import { useSelector } from 'react-redux'\r\n *\r\n * export const CounterComponent = () => {\r\n * const counter = useSelector(state => state.counter)\r\n * return
{counter}
\r\n * }\r\n */\n\nexport var useSelector = /*#__PURE__*/createSelectorHook();","import { remove } from 'lodash';\n\nconst StripeLoader = {\n handlers: [] as (() => void)[],\n isLoaded: false,\n\n didLoad() {\n if (!this.isLoaded) {\n this.isLoaded = true;\n\n while (this.handlers.length > 0) {\n const callback = this.handlers.pop();\n\n if (callback != null) {\n setTimeout(callback, 0);\n }\n }\n }\n },\n\n onLoad(callback: () => void) {\n const handlers = this.handlers;\n\n if (this.isLoaded) {\n callback();\n } else {\n handlers.push(callback);\n }\n\n return function () {\n remove(handlers, callback);\n };\n }\n};\n\nif ('Stripe' in window) {\n StripeLoader.didLoad();\n}\n\nexport default StripeLoader;\n","import React, { createRef } from 'react';\nimport $ from 'jquery';\nimport classNames from 'classnames';\nimport { get } from 'lodash';\n\ntype HTMLSelectElementProps = React.DetailedHTMLProps<\n React.SelectHTMLAttributes,\n HTMLSelectElement\n>;\n\ninterface Props extends HTMLSelectElementProps {\n includeBlank?: boolean;\n}\n\ninterface State {\n focused: boolean;\n selectedLabel: string | null;\n}\n\nclass Select extends React.Component {\n static defaultProps = {\n includeBlank: false\n };\n\n state = {\n focused: false,\n selectedLabel: null\n };\n\n private selectNode = createRef();\n\n componentDidMount() {\n this.updateSelectedLabel();\n }\n\n componentDidUpdate() {\n this.updateSelectedLabel();\n }\n\n updateSelectedLabel() {\n if (this.selectNode.current == null) {\n return;\n }\n\n const selectedLabel = $(this.selectNode.current)\n .find('option:selected')\n .text();\n\n if (selectedLabel !== this.state.selectedLabel) {\n this.setState({ selectedLabel });\n }\n }\n\n handleChange = (event: React.ChangeEvent) => {\n this.updateSelectedLabel();\n\n const { onChange } = this.props;\n\n if (onChange != null) {\n onChange(event);\n }\n };\n\n handleFocus = (event: React.FocusEvent) => {\n this.setState({\n focused: true\n });\n\n const { onFocus } = this.props;\n\n if (onFocus != null) {\n onFocus(event);\n }\n };\n\n handleBlur = (event: React.FocusEvent) => {\n this.setState({\n focused: false\n });\n\n const { onBlur } = this.props;\n\n if (onBlur != null) {\n onBlur(event);\n }\n };\n\n renderBlankOption() {\n if (this.props.includeBlank) {\n return