\r\n \r\n );\r\n }\r\n}\r\n\r\nexport default SectionTitleLeft;","module.exports = __webpack_public_path__ + \"static/media/p1.00b870ba.png\";","/*!\n Copyright (c) 2017 Jed Watson.\n Licensed under the MIT License (MIT), see\n http://jedwatson.github.io/classnames\n*/\n/* global define */\n\n(function () {\n\t'use strict';\n\n\tvar hasOwn = {}.hasOwnProperty;\n\n\tfunction classNames () {\n\t\tvar classes = [];\n\n\t\tfor (var i = 0; i < arguments.length; i++) {\n\t\t\tvar arg = arguments[i];\n\t\t\tif (!arg) continue;\n\n\t\t\tvar argType = typeof arg;\n\n\t\t\tif (argType === 'string' || argType === 'number') {\n\t\t\t\tclasses.push(arg);\n\t\t\t} else if (Array.isArray(arg) && arg.length) {\n\t\t\t\tvar inner = classNames.apply(null, arg);\n\t\t\t\tif (inner) {\n\t\t\t\t\tclasses.push(inner);\n\t\t\t\t}\n\t\t\t} else if (argType === 'object') {\n\t\t\t\tfor (var key in arg) {\n\t\t\t\t\tif (hasOwn.call(arg, key) && arg[key]) {\n\t\t\t\t\t\tclasses.push(key);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn classes.join(' ');\n\t}\n\n\tif (typeof module !== 'undefined' && module.exports) {\n\t\tclassNames.default = classNames;\n\t\tmodule.exports = classNames;\n\t} else if (typeof define === 'function' && typeof define.amd === 'object' && define.amd) {\n\t\t// register as 'classnames', consistent with npm package name\n\t\tdefine('classnames', [], function () {\n\t\t\treturn classNames;\n\t\t});\n\t} else {\n\t\twindow.classNames = classNames;\n\t}\n}());\n","module.exports = __webpack_public_path__ + \"static/media/trainingMarketing.d21d4bb0.png\";","module.exports = __webpack_public_path__ + \"static/media/swimBooking1.aa86dd44.png\";","import PropTypes from 'prop-types'; // https://github.com/twbs/bootstrap/blob/v4.0.0-alpha.4/js/src/modal.js#L436-L443\n\nexport function getScrollbarWidth() {\n var scrollDiv = document.createElement('div'); // .modal-scrollbar-measure styles // https://github.com/twbs/bootstrap/blob/v4.0.0-alpha.4/scss/_modal.scss#L106-L113\n\n scrollDiv.style.position = 'absolute';\n scrollDiv.style.top = '-9999px';\n scrollDiv.style.width = '50px';\n scrollDiv.style.height = '50px';\n scrollDiv.style.overflow = 'scroll';\n document.body.appendChild(scrollDiv);\n var scrollbarWidth = scrollDiv.offsetWidth - scrollDiv.clientWidth;\n document.body.removeChild(scrollDiv);\n return scrollbarWidth;\n}\nexport function setScrollbarWidth(padding) {\n document.body.style.paddingRight = padding > 0 ? padding + \"px\" : null;\n}\nexport function isBodyOverflowing() {\n return document.body.clientWidth < window.innerWidth;\n}\nexport function getOriginalBodyPadding() {\n var style = window.getComputedStyle(document.body, null);\n return parseInt(style && style.getPropertyValue('padding-right') || 0, 10);\n}\nexport function conditionallyUpdateScrollbar() {\n var scrollbarWidth = getScrollbarWidth(); // https://github.com/twbs/bootstrap/blob/v4.0.0-alpha.6/js/src/modal.js#L433\n\n var fixedContent = document.querySelectorAll('.fixed-top, .fixed-bottom, .is-fixed, .sticky-top')[0];\n var bodyPadding = fixedContent ? parseInt(fixedContent.style.paddingRight || 0, 10) : 0;\n\n if (isBodyOverflowing()) {\n setScrollbarWidth(bodyPadding + scrollbarWidth);\n }\n}\nvar globalCssModule;\nexport function setGlobalCssModule(cssModule) {\n globalCssModule = cssModule;\n}\nexport function mapToCssModules(className, cssModule) {\n if (className === void 0) {\n className = '';\n }\n\n if (cssModule === void 0) {\n cssModule = globalCssModule;\n }\n\n if (!cssModule) return className;\n return className.split(' ').map(function (c) {\n return cssModule[c] || c;\n }).join(' ');\n}\n/**\n * Returns a new object with the key/value pairs from `obj` that are not in the array `omitKeys`.\n */\n\nexport function omit(obj, omitKeys) {\n var result = {};\n Object.keys(obj).forEach(function (key) {\n if (omitKeys.indexOf(key) === -1) {\n result[key] = obj[key];\n }\n });\n return result;\n}\n/**\n * Returns a filtered copy of an object with only the specified keys.\n */\n\nexport function pick(obj, keys) {\n var pickKeys = Array.isArray(keys) ? keys : [keys];\n var length = pickKeys.length;\n var key;\n var result = {};\n\n while (length > 0) {\n length -= 1;\n key = pickKeys[length];\n result[key] = obj[key];\n }\n\n return result;\n}\nvar warned = {};\nexport function warnOnce(message) {\n if (!warned[message]) {\n /* istanbul ignore else */\n if (typeof console !== 'undefined') {\n console.error(message); // eslint-disable-line no-console\n }\n\n warned[message] = true;\n }\n}\nexport function deprecated(propType, explanation) {\n return function validate(props, propName, componentName) {\n if (props[propName] !== null && typeof props[propName] !== 'undefined') {\n warnOnce(\"\\\"\" + propName + \"\\\" property of \\\"\" + componentName + \"\\\" has been deprecated.\\n\" + explanation);\n }\n\n for (var _len = arguments.length, rest = new Array(_len > 3 ? _len - 3 : 0), _key = 3; _key < _len; _key++) {\n rest[_key - 3] = arguments[_key];\n }\n\n return propType.apply(void 0, [props, propName, componentName].concat(rest));\n };\n} // Shim Element if needed (e.g. in Node environment)\n\nvar Element = typeof window === 'object' && window.Element || function () {};\n\nexport function DOMElement(props, propName, componentName) {\n if (!(props[propName] instanceof Element)) {\n return new Error('Invalid prop `' + propName + '` supplied to `' + componentName + '`. Expected prop to be an instance of Element. Validation failed.');\n }\n}\nexport var targetPropType = PropTypes.oneOfType([PropTypes.string, PropTypes.func, DOMElement, PropTypes.shape({\n current: PropTypes.any\n})]);\nexport var tagPropType = PropTypes.oneOfType([PropTypes.func, PropTypes.string, PropTypes.shape({\n $$typeof: PropTypes.symbol,\n render: PropTypes.func\n}), PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.func, PropTypes.string, PropTypes.shape({\n $$typeof: PropTypes.symbol,\n render: PropTypes.func\n})]))]);\n/* eslint key-spacing: [\"error\", { afterColon: true, align: \"value\" }] */\n// These are all setup to match what is in the bootstrap _variables.scss\n// https://github.com/twbs/bootstrap/blob/v4-dev/scss/_variables.scss\n\nexport var TransitionTimeouts = {\n Fade: 150,\n // $transition-fade\n Collapse: 350,\n // $transition-collapse\n Modal: 300,\n // $modal-transition\n Carousel: 600 // $carousel-transition\n\n}; // Duplicated Transition.propType keys to ensure that Reactstrap builds\n// for distribution properly exclude these keys for nested child HTML attributes\n// since `react-transition-group` removes propTypes in production builds.\n\nexport var TransitionPropTypeKeys = ['in', 'mountOnEnter', 'unmountOnExit', 'appear', 'enter', 'exit', 'timeout', 'onEnter', 'onEntering', 'onEntered', 'onExit', 'onExiting', 'onExited'];\nexport var TransitionStatuses = {\n ENTERING: 'entering',\n ENTERED: 'entered',\n EXITING: 'exiting',\n EXITED: 'exited'\n};\nexport var keyCodes = {\n esc: 27,\n space: 32,\n enter: 13,\n tab: 9,\n up: 38,\n down: 40,\n home: 36,\n end: 35,\n n: 78,\n p: 80\n};\nexport var PopperPlacements = ['auto-start', 'auto', 'auto-end', 'top-start', 'top', 'top-end', 'right-start', 'right', 'right-end', 'bottom-end', 'bottom', 'bottom-start', 'left-end', 'left', 'left-start'];\nexport var canUseDOM = !!(typeof window !== 'undefined' && window.document && window.document.createElement);\nexport function isReactRefObj(target) {\n if (target && typeof target === 'object') {\n return 'current' in target;\n }\n\n return false;\n}\n\nfunction getTag(value) {\n if (value == null) {\n return value === undefined ? '[object Undefined]' : '[object Null]';\n }\n\n return Object.prototype.toString.call(value);\n}\n\nexport function toNumber(value) {\n var type = typeof value;\n var NAN = 0 / 0;\n\n if (type === 'number') {\n return value;\n }\n\n if (type === 'symbol' || type === 'object' && getTag(value) === '[object Symbol]') {\n return NAN;\n }\n\n if (isObject(value)) {\n var other = typeof value.valueOf === 'function' ? value.valueOf() : value;\n value = isObject(other) ? \"\" + other : other;\n }\n\n if (type !== 'string') {\n return value === 0 ? value : +value;\n }\n\n value = value.replace(/^\\s+|\\s+$/g, '');\n var isBinary = /^0b[01]+$/i.test(value);\n return isBinary || /^0o[0-7]+$/i.test(value) ? parseInt(value.slice(2), isBinary ? 2 : 8) : /^[-+]0x[0-9a-f]+$/i.test(value) ? NAN : +value;\n}\nexport function isObject(value) {\n var type = typeof value;\n return value != null && (type === 'object' || type === 'function');\n}\nexport function isFunction(value) {\n if (!isObject(value)) {\n return false;\n }\n\n var tag = getTag(value);\n return tag === '[object Function]' || tag === '[object AsyncFunction]' || tag === '[object GeneratorFunction]' || tag === '[object Proxy]';\n}\nexport function findDOMElements(target) {\n if (isReactRefObj(target)) {\n return target.current;\n }\n\n if (isFunction(target)) {\n return target();\n }\n\n if (typeof target === 'string' && canUseDOM) {\n var selection = document.querySelectorAll(target);\n\n if (!selection.length) {\n selection = document.querySelectorAll(\"#\" + target);\n }\n\n if (!selection.length) {\n throw new Error(\"The target '\" + target + \"' could not be identified in the dom, tip: check spelling\");\n }\n\n return selection;\n }\n\n return target;\n}\nexport function isArrayOrNodeList(els) {\n if (els === null) {\n return false;\n }\n\n return Array.isArray(els) || canUseDOM && typeof els.length === 'number';\n}\nexport function getTarget(target, allElements) {\n var els = findDOMElements(target);\n\n if (allElements) {\n if (isArrayOrNodeList(els)) {\n return els;\n }\n\n if (els === null) {\n return [];\n }\n\n return [els];\n } else {\n if (isArrayOrNodeList(els)) {\n return els[0];\n }\n\n return els;\n }\n}\nexport var defaultToggleEvents = ['touchstart', 'click'];\nexport function addMultipleEventListeners(_els, handler, _events, useCapture) {\n var els = _els;\n\n if (!isArrayOrNodeList(els)) {\n els = [els];\n }\n\n var events = _events;\n\n if (typeof events === 'string') {\n events = events.split(/\\s+/);\n }\n\n if (!isArrayOrNodeList(els) || typeof handler !== 'function' || !Array.isArray(events)) {\n throw new Error(\"\\n The first argument of this function must be DOM node or an array on DOM nodes or NodeList.\\n The second must be a function.\\n The third is a string or an array of strings that represents DOM events\\n \");\n }\n\n Array.prototype.forEach.call(events, function (event) {\n Array.prototype.forEach.call(els, function (el) {\n el.addEventListener(event, handler, useCapture);\n });\n });\n return function removeEvents() {\n Array.prototype.forEach.call(events, function (event) {\n Array.prototype.forEach.call(els, function (el) {\n el.removeEventListener(event, handler, useCapture);\n });\n });\n };\n}\nexport var focusableElements = ['a[href]', 'area[href]', 'input:not([disabled]):not([type=hidden])', 'select:not([disabled])', 'textarea:not([disabled])', 'button:not([disabled])', 'object', 'embed', '[tabindex]:not(.modal)', 'audio[controls]', 'video[controls]', '[contenteditable]:not([contenteditable=\"false\"])'];","export default function _assertThisInitialized(self) {\n if (self === void 0) {\n throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");\n }\n\n return self;\n}","module.exports = __webpack_public_path__ + \"static/media/waiver.7a4b8ed7.png\";","module.exports = __webpack_public_path__ + \"static/media/boarding2.f51804ff.png\";","module.exports = __webpack_public_path__ + \"static/media/daycareCheckin1.5f2d355c.png\";","module.exports = __webpack_public_path__ + \"static/media/retailReport.27b09154.png\";","module.exports = __webpack_public_path__ + \"static/media/trainingClass.eee0ac73.png\";","// React Basic and Bootstrap\r\nimport React, { Component } from 'react';\r\nimport { Link } from 'react-router-dom';\r\nimport { Container, TabContent, TabPane, Nav, NavItem, NavLink, Row, Col } from 'reactstrap';\r\nimport classnames from 'classnames';\r\n\r\n//Import Components\r\nimport SectionTitle from \"../../components/Shared/SectionTitle\";\r\nimport SectionTitleLeft from \"../../components/Shared/SectionTitleLeft\";\r\n\r\n//import images\r\nimport grooming from '../../assets/images/digital/p1.png';\r\n\r\nimport boarding from '../../assets/images/services/boarding2.png';\r\nimport daycare from '../../assets/images/services/daycareCheckin1.png';\r\nimport training from '../../assets/images/services/trainingClass.png';\r\nimport swimming from '../../assets/images/services/swimBooking1.png';\r\nimport walking from '../../assets/images/services/trainingMarketing.png';\r\nimport more from '../../assets/images/services/waiver.png';\r\nimport retail from '../../assets/images/services/retailReport.png';\r\n\r\nclass ShowCase extends Component {\r\n\r\n constructor(props) {\r\n super(props);\r\n this.state = {\r\n features1 : [\r\n { title : \"Multiple ways to configure color-coded grooming schedules, services, and add-ons\" },\r\n { title : \"Seamlessly integrated grooming notes\" },\r\n { title : \"Integrated online booking and payments through the Customer Portal. Saved cards to never miss another payment\" },\r\n { title : \"Automated SMS & Email reminders and marketing campaigns to reduce no-shows and increase returned customers\" },\r\n { title : \"Fully customizable pet and customer profile, breed list, and waiver signing\" },\r\n \t\t\t\t{ title : \"Staff accounts to view and manage their schedule, add notes, empowering your team with customizable permission control\" },\r\n { title : \"Compatible on all devices across mobile, tablet, and desktop\" },\r\n ],\r\n features2 : [\r\n { title : \"Instantly book multiple family pets. We will remember the pet preference for you\" },\r\n { title : \"Automated feeding, medication, and to-do reports, keeping your busy days organized\" },\r\n { title : \"Automated SMS and Email reminders and communications, including automated vaccination reminders, report cards, and birthday messages\" },\r\n { title : \"Integrated payments, bookkeeping, payroll, and financial insight reports\" },\r\n { title : \"Smart marketing to get more traffic through the door\" },\r\n { title : \"Fully customizable pet and customer profiles, breeds, reminders, and report card templates\" },\r\n\t\t\t\t{ title : \"Automated waiver signing and client onboarding in the client portal \" }, \r\n\t\t\t],\r\n features3 : [\r\n { title : \"Instantly book multiple daycare appointments. Fast check-ins of booked pets or walk-ins. Multiple calendar views\" },\r\n { title : \"Automatically track daycare packages and generate invoices. Clients can download receipts, upload vaccination records, sign waivers, and make payments on their client portal\" },\r\n { title : \"Automated waiver sign-ing, alerts, vaccination reminders, marketing campaigns\" },\r\n { title : \"Staff clock in and clock out. Staff and store accounts\" },\r\n { title : \"Integrated payments, bookkeeping, payroll, reports\" },\r\n { title : \"Fully customizable pet and customer profile, and breed list\" },\r\n { title : \"Smart marketing to get more traffic through the door, including business campaigns, automated birthday messages, and more\" },\r\n \t\t\t],\r\n features4 : [\r\n { title : \"Multiple ways to configure color-coded private and group training schedules with multiple calendar views\" },\r\n { title : \"Effortlessly track training packages and automatically generate invoices\" },\r\n { title : \"Staff accounts to view and manage their schedule, add notes, empowering your team with customizable permission control\" },\r\n { title : \"Automated waivers, invoices, vaccination reminders, and marketing campaigns\" },\r\n { title : \"Integrated payments, bookkeeping, payroll, reports\" },\r\n { title : \"Fully customizable pet and customer profiles, breeds, reminders, and report card templates\" },\r\n { title : \"Smart marketing to get new and repeat customers, including automated campaigns, birthday wishes, and vaccination reminders\" },\r\n { title : \"Automated SMS and Email reminders and communications\" },\r\n { title : \"Clients have the option to download receipts, upload vaccination records, sign waivers, and make payments on their client portal\" },\r\n ],\r\n features5 : [\r\n { title : \"Hydrotherapy and recreational swims\" },\r\n { title : \"Multiple ways to configure your schedule, types of service, and add-ons to ensure your program is set up just right\" },\r\n { title : \"Effortlessly track packages and automatically generate invoices\" },\r\n\t\t\t\t{ title : \"Fast booking and check-ins with multiple calendar views\" },\r\n { title : \"Smart pet notes and pool water management\" },\r\n { title : \"Staff accounts to view and manage their schedule, add notes, empowering your team with customizable permission control\" },\r\n { title : \"Integrated payments, bookkeeping, payroll, reports\" },\r\n { title : \"Fully customizable pet and customer profiles, breeds, reminders, and report card templates\" },\r\n { title : \"Smart marketing to get new and repeat customers, including automated campaigns, birthday wishes, and vaccination reminders\" },\r\n { title : \"Automated SMS and Email reminders and communications\" },\r\n { title : \"Clients have the option to download receipts, upload vaccination records, sign waivers, and make payments on their client portal\" },\r\n ],\r\n features6 : [\r\n { title : \"Efficiently manage and update product inventory \" },\r\n { title : \"Access retail trends to gain intelligence\" },\r\n { title : \"Integrated payment made easy with one-time or saved payment information\" },\r\n { title : \"Efficiently manage and update product inventory \" },\r\n { title : \"Smart marketing to get new and repeat customers, including a customizable loyalty program and automated birthday wishes\" },\r\n { title : \"Staff clock in and clock out. Staff and store accounts\" },\r\n\t\t\t\t{ title : \"Fully customizable pet and customer profiles and breeds\" },\r\n ],\r\n features7 : [\r\n { title : \"Fast booking and check-ins with multiple calendar views. Staff accounts to send updates in real-time\" },\r\n { title : \"Easy key and invoice management \" },\r\n { title : \"Automated SMS and Email reminders and communications\" },\r\n { title : \"Staff accounts to view and manage their schedule, add notes, empowering your team with customizable permission control\" },\r\n { title : \"Automated waivers, invoices, vaccination reminders, and marketing campaigns\" },\r\n { title : \"Automated SMS and Email reminders and communications\" },\r\n { title : \"Smart marketing to get more traffic through the door, including automated campaigns, birthday wishes, and vaccination reminders\" },\r\n { title : \"Clients have the option to make bookings, download receipts, upload vaccination records, sign waivers, and pay for open invoices or buy pre-paid packages on their client portal\" },\r\n ],\r\n features8 : [\r\n { title : \"Configurable time, staff, and capacity settings\" },\r\n { title : \"Fast booking and check-ins with multiple calendar views\" },\r\n { title : \"Automated waivers, invoices, vaccination reminders, and marketing campaigns\" },\r\n { title : \"Integrated payments, bookkeeping, payroll, reports\" },\r\n { title : \"Fully customizable pet and customer profile, breeds, reminders, report card templates\" },\r\n { title : \"Smart marketing to get new and repeat customers\" },\r\n { title : \"Smart marketing to get more traffic through the door, including automated campaigns, birthday wishes, and vaccination reminders\" },\r\n ],\r\n activeTab: \"1\",\r\n }\r\n this.toggle = this.toggle.bind(this);\r\n }\r\n\r\n toggle(tab) {\r\n this.setState({ activeTab: tab });\r\n }\r\n\r\n render() {\r\n return (\r\n \r\n \r\n \r\n\r\n \r\n \r\n
\r\n
\r\n
Reliable and Scalable Solutions
\r\n
One or multiple services, small shops or large franchises - it's easy to grow with PawsAdmin.\r\n