@digitransit-component/digitransit-component-favourite-editing-modal 10.0.2 → 10.0.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/index.cjs.map +1 -1
- package/lib/index.development.cjs +1 -1
- package/lib/index.js.map +1 -1
- package/package.json +4 -4
package/lib/index.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.cjs","sources":["../../../digitransit-search-util/uniq-by-label/index.js","../../../../node_modules/style-inject/dist/style-inject.es.js","../src/helpers/translations.js","../src/helpers/i18n.js","../src/helpers/FavouriteListItem.jsx","../src/index.jsx"],"sourcesContent":["import uniqWith from 'lodash/uniqWith';\nimport isEqual from 'lodash/isEqual';\nimport memoize from 'lodash/memoize';\nimport escapeRegExp from 'lodash/escapeRegExp';\nimport cloneDeep from 'lodash/cloneDeep';\n\n/**\n * Location properties.\n * @typedef {LocationProperties}\n * @property {string} layer Suggestion layer.\n * @property {lat} [number]\n * @property {lon} [number]\n * @property {string} address Address.\n */\n\n/**\n * Returns localadmin (city name) for suggestions\n *\n * @name getLocaladmin\n * @param {Object} suggestion suggestion's properties from geocoding or a favourite stop/station.\n * Expects last part of an address (after ',') to contain the city name of the suggestion location.\n * @returns {String} City name or empty string\n */\nconst getLocaladmin = suggestion =>\n suggestion.localadmin ||\n suggestion.localadmin ||\n (suggestion.address &&\n suggestion.address.lastIndexOf(',') < suggestion.address.length - 2 &&\n suggestion.address.substring(suggestion.address.lastIndexOf(',') + 2)) ||\n '';\n\nexport const getStopCode = ({ id, code }) => {\n if (code) {\n return code;\n }\n if (\n id === undefined ||\n typeof id.indexOf === 'undefined' ||\n id.indexOf('#') === -1\n ) {\n return undefined;\n }\n // id from pelias\n return id.substring(id.indexOf('#') + 1);\n};\n\nexport const formatFavouritePlaceLabel = (name, address) => [\n name || (address && address.split(',')[0]),\n typeof address === 'string'\n ? address.replace(new RegExp(`${escapeRegExp(name)}([ ,]|$)+`), '')\n : '',\n];\n\n/**\n * Format suggestion-pair [name, address] by `suggestion.layer`.\n *\n * @name getNameLabel\n * @param {LocationProperties} suggestion\n * @param {boolean} [plain]\n *\n * @returns {Array.<string>} Formatted label.\n */\nexport const getNameLabel = memoize(\n (suggestion, plain = false) => {\n switch (suggestion.layer) {\n case 'currentPosition':\n return [suggestion.labelId, suggestion.address];\n case 'selectFromMap':\n case 'ownLocations':\n case 'back':\n return [suggestion.labelId];\n case 'favouritePlace':\n return formatFavouritePlaceLabel(suggestion.name, suggestion.address);\n case 'favouriteVehicleRentalStation':\n case 'bikestation':\n return [suggestion.name];\n case 'favouriteRoute':\n case 'route-BUS':\n case 'route-TRAM':\n case 'route-RAIL':\n case 'route-SUBWAY':\n case 'route-FERRY':\n case 'route-FUNICULAR':\n case 'route-AIRPLANE':\n return !plain && suggestion.shortName\n ? [\n suggestion.gtfsId,\n suggestion.mode.toLowerCase(),\n suggestion.longName,\n ]\n : [\n suggestion.shortName,\n suggestion.longName,\n suggestion.agency ? suggestion.agency.name : undefined,\n ];\n case 'venue':\n case 'address':\n case 'street':\n return [\n suggestion.name,\n suggestion.label.replace(\n new RegExp(`${escapeRegExp(suggestion.name)}(,)?( )?`),\n '',\n ),\n ];\n case 'favouriteStop':\n case 'stop':\n return plain\n ? [\n suggestion.name ||\n suggestion.label ||\n (suggestion.address && suggestion.address.split(',')[0]),\n getLocaladmin(suggestion),\n ]\n : [\n suggestion.name,\n suggestion.id,\n getStopCode(suggestion),\n getLocaladmin(suggestion),\n ];\n case 'favouriteStation':\n case 'station':\n default:\n return [\n suggestion.name ||\n suggestion.label ||\n (suggestion.address && suggestion.address.split(',')[0]),\n getLocaladmin(suggestion),\n ];\n }\n },\n (item, plain) => {\n const i = cloneDeep(item);\n i.plain = plain;\n return i;\n },\n);\n\n/**\n * Checks that features are unique by label\n *\n * @name uniqByLabel\n * @param {Array} features Array of features\n * @returns {Array} Array of unique features\n * @example\n * digitransit-search-util.uniqByLabel(features);\n * //= Array(2)\n */\nexport default function uniqByLabel(features) {\n return uniqWith(features, (feat1, feat2) => {\n if (feat1.type === 'FutureRoute' || feat2.type === 'FutureRoute') {\n return false;\n }\n return (\n isEqual(getNameLabel(feat1.properties), getNameLabel(feat2.properties)) &&\n feat1.properties.layer === feat2.properties.layer\n );\n });\n}\n","function styleInject(css, ref) {\n if ( ref === void 0 ) ref = {};\n var insertAt = ref.insertAt;\n\n if (!css || typeof document === 'undefined') { return; }\n\n var head = document.head || document.getElementsByTagName('head')[0];\n var style = document.createElement('style');\n style.type = 'text/css';\n\n if (insertAt === 'top') {\n if (head.firstChild) {\n head.insertBefore(style, head.firstChild);\n } else {\n head.appendChild(style);\n }\n } else {\n head.appendChild(style);\n }\n\n if (style.styleSheet) {\n style.styleSheet.cssText = css;\n } else {\n style.appendChild(document.createTextNode(css));\n }\n}\n\nexport default styleInject;\n","/* eslint sort-keys: \"error\" */\nconst translations = {\n de: {\n translation: {\n cancel: 'Abbrechen',\n delete: 'Löschen',\n 'delete-place-header': 'Wollen Sie den Favoriten löschen?',\n 'delete-place-name': 'Lösche Favorit: {{favourite.name}}',\n 'edit-place-name': 'Bearbeite Favorit: {{favourite.name}}',\n 'edit-places': 'Bearbeite Favoriten',\n },\n },\n en: {\n translation: {\n cancel: 'Cancel',\n delete: 'Delete',\n 'delete-place-header': 'Do you want to delete the place?',\n 'delete-place-name': 'Delete place: {{favourite.name}}',\n down: 'Move favourite down',\n 'edit-place-name': 'Edit place: {{favourite.name}}',\n 'edit-places': 'Edit places',\n up: 'Move favourite up',\n },\n },\n fi: {\n translation: {\n cancel: 'Peruuta',\n delete: 'Poista',\n 'delete-place-header': 'Haluatko poistaa paikan?',\n 'delete-place-name': 'Poista paikka: {{favourite.name}}',\n down: 'Siirrä suosikkisijaintia alaspäin',\n 'edit-place-name': 'Muokkaa paikkaa: {{favourite.name}}',\n 'edit-places': 'Muokkaa paikkoja',\n up: 'Siirrä suosikkisijaintia ylöpäin',\n },\n },\n pl: {\n translation: {\n cancel: 'Anuluj',\n delete: 'Usuń',\n 'delete-place-header': 'Czy na pewno chcesz usunąć to miejsce?',\n 'delete-place-name': 'Usuń miejsce: {{favourite.name}}',\n down: 'Przenieś ulubione niżej',\n 'edit-place-name': 'Edytuj miejsce: {{favourite.name}}',\n 'edit-places': 'Edytuj miejsca',\n up: 'Przenieś ulubione wyżej',\n },\n },\n sv: {\n translation: {\n cancel: 'Avbryt',\n delete: 'Ta bort',\n 'delete-place-header': 'Vill du ta bort platsen?',\n 'delete-place-name': 'Ta bort platsen: {{favourite.name}}',\n down: 'Flytta favoriten nedåt',\n 'edit-place-name': 'Edit place: {{favourite.name}}',\n 'edit-places': 'Redigera platser',\n up: 'Flytta favoriten uppåt',\n },\n },\n};\n\nexport default translations;\n","import { createInstance } from 'i18next';\nimport translations from './translations';\n\nconst i18n = createInstance({\n fallbackLng: 'fi',\n // debug: true,\n resources: translations,\n defaultNS: 'translation',\n react: {\n useSuspense: true,\n },\n});\n\ni18n.init();\n\nexport default i18n;\n","import PropTypes from 'prop-types';\nimport { useTranslation } from 'react-i18next';\nimport { FlexColumn, FlexRow, Text } from '@hsl-fi/layout-primitives';\nimport { useSortable } from '@dnd-kit/react/sortable';\nimport Icon from '@digitransit-component/digitransit-component-icon';\nimport { formatFavouritePlaceLabel } from '@digitransit-search-util/digitransit-search-util-uniq-by-label';\nimport styles from './styles.scss';\nimport i18n from './i18n';\n\nconst getIconId = selectedIconId => {\n const prefixPos = selectedIconId ? selectedIconId.indexOf('icon_') : -1;\n return prefixPos > 0 ? selectedIconId.substring(prefixPos + 5) : 'place';\n};\n\n/**\n * One row of the favourites list. The visually hidden arrow buttons are a\n * keyboard alternative to dragging.\n */\nfunction FavouriteListItem({\n favourite,\n lang,\n onMoveUp = null,\n onMoveDown = null,\n onEdit,\n onDelete,\n index,\n}) {\n const { t } = useTranslation('translation', { i18n });\n const { ref } = useSortable({ id: favourite.favouriteId, index });\n const iconId = getIconId(favourite.selectedIconId);\n const [name, address] = formatFavouritePlaceLabel(\n favourite.name,\n favourite.address,\n );\n\n return (\n <li ref={ref} className={styles.item}>\n <div className={styles.dragHandle}>\n {onMoveUp && (\n <button\n type=\"button\"\n className={styles.arrow}\n aria-label={t('up', { lng: lang })}\n onClick={onMoveUp}\n >\n ↑\n </button>\n )}\n {onMoveDown && (\n <button\n type=\"button\"\n className={styles.arrow}\n aria-label={t('down', { lng: lang })}\n onClick={onMoveDown}\n >\n ↓\n </button>\n )}\n <span className={styles.ellipsis}>\n <Icon img=\"ellipsis\" color=\"currentColor\" />\n </span>\n <span className={styles.placeIcon}>\n <Icon img={iconId} color=\"currentColor\" />\n </span>\n </div>\n <FlexColumn className={styles.text}>\n <Text variant=\"text-xs-bold\" as=\"p\" className={styles.name}>\n {name}\n </Text>\n <Text variant=\"text-xs\" as=\"p\" color=\"weak\" className={styles.address}>\n {address}\n </Text>\n </FlexColumn>\n <FlexRow alignItems=\"center\" flexShrink={0}>\n <button\n type=\"button\"\n className={styles.actionButton}\n aria-label={t('edit-place-name', { lng: lang, favourite })}\n onClick={onEdit}\n >\n <Icon img=\"edit\" color=\"currentColor\" />\n </button>\n <button\n type=\"button\"\n className={styles.actionButton}\n aria-label={t('delete-place-name', { lng: lang, favourite })}\n onClick={onDelete}\n >\n <Icon img=\"trash\" color=\"currentColor\" />\n </button>\n </FlexRow>\n </li>\n );\n}\n\nFavouriteListItem.propTypes = {\n favourite: PropTypes.shape({\n favouriteId: PropTypes.string,\n name: PropTypes.string,\n address: PropTypes.string,\n selectedIconId: PropTypes.string,\n }).isRequired,\n lang: PropTypes.string.isRequired,\n onEdit: PropTypes.func.isRequired,\n onDelete: PropTypes.func.isRequired,\n onMoveUp: PropTypes.func,\n onMoveDown: PropTypes.func,\n index: PropTypes.number.isRequired,\n};\n\nexport default FavouriteListItem;\n","import { useEffect, useRef, useState } from 'react';\nimport PropTypes from 'prop-types';\nimport { useTranslation } from 'react-i18next';\nimport { DragDropProvider } from '@dnd-kit/react';\nimport isEmpty from 'lodash/isEmpty';\nimport isEqual from 'lodash/isEqual';\nimport omit from 'lodash/omit';\nimport { Spinner } from '@hsl-fi/loading-indicators';\nimport { Modal, ModalContent } from '@hsl-fi/dialog';\nimport DialogModal from '@digitransit-component/digitransit-component-dialog-modal';\nimport FavouriteListItem from './helpers/FavouriteListItem';\nimport i18n from './helpers/i18n';\nimport styles from './helpers/styles.scss';\n\n/**\n * A dialog for reordering, editing and deleting favourite places, built on\n * the HSL design system's Modal. Colors, typography and the mobile/desktop\n * layout are handled by the design system, so the dialog follows the active\n * deployment's theme.\n *\n * @example\n * <FavouriteEditingModal\n * isModalOpen={modalOpen}\n * handleClose={handleClose}\n * favourites={favourites}\n * updateFavourites={onUpdateFavourites}\n * deleteFavourite={onDeleteFavourite}\n * onEditSelected={onEditSelected}\n * isLoading={false}\n * lang=\"fi\"\n * />\n */\nfunction FavouriteEditingModal({\n isModalOpen,\n handleClose,\n updateFavourites,\n deleteFavourite,\n onEditSelected,\n favourites,\n isLoading,\n lang = 'fi',\n}) {\n const { t } = useTranslation('translation', { i18n });\n const [source, setSource] = useState(favourites);\n const [reordered, setReordered] = useState(null);\n const [selectedFavourite, setSelectedFavourite] = useState(null);\n const previousFavourites = useRef(favourites);\n\n // Drop the local order when the favourites change from outside\n if (!isEqual(source, favourites)) {\n setSource(favourites);\n setReordered(null);\n }\n const items = reordered || favourites;\n\n useEffect(() => {\n if (\n previousFavourites.current !== favourites &&\n !isEqual(previousFavourites.current, favourites) &&\n isEmpty(favourites)\n ) {\n handleClose();\n }\n previousFavourites.current = favourites;\n }, [favourites, handleClose]);\n\n const move = (index, direction) => {\n const copy = [...items];\n [copy[index], copy[index + direction]] = [\n copy[index + direction],\n copy[index],\n ];\n setReordered(copy);\n };\n\n const onDragEnd = event => {\n if (event.canceled) {\n return;\n }\n const { initialIndex, index } = event.operation.source?.sortable || {};\n if (initialIndex === undefined || initialIndex === index) {\n return;\n }\n const copy = [...items];\n const [moved] = copy.splice(initialIndex, 1);\n copy.splice(index, 0, moved);\n setReordered(copy);\n };\n\n const closeModal = () => {\n handleClose();\n const omitted = items.map(item => omit(item, ['chosen', 'selected']));\n if (!isEqual(omitted, favourites)) {\n updateFavourites(omitted);\n }\n };\n\n const closeDeleteDialog = () => setSelectedFavourite(null);\n\n return (\n <>\n <DialogModal\n headerText={t('delete-place-header', { lng: lang })}\n handleClose={() => {\n closeDeleteDialog();\n handleClose();\n }}\n isModalOpen={selectedFavourite !== null}\n dialogContent={\n selectedFavourite\n ? `${selectedFavourite.name}: ${selectedFavourite.address}`\n : ''\n }\n primaryButtonText={t('delete', { lng: lang })}\n primaryButtonOnClick={() => {\n deleteFavourite(selectedFavourite);\n closeDeleteDialog();\n }}\n secondaryButtonText={t('cancel', { lng: lang })}\n secondaryButtonOnClick={closeDeleteDialog}\n lang={lang}\n />\n <Modal\n open={isModalOpen && selectedFavourite === null}\n onOpenChange={open => {\n if (!open) {\n closeModal();\n }\n }}\n >\n <ModalContent\n lang={lang}\n title={t('edit-places', { lng: lang })}\n className={styles.modalContent}\n aria-describedby={undefined}\n >\n <div className={styles.listContainer}>\n <DragDropProvider onDragEnd={onDragEnd}>\n <ul className={styles.list}>\n {items.map((favourite, index) => (\n <FavouriteListItem\n key={favourite.favouriteId}\n index={index}\n favourite={favourite}\n lang={lang}\n onMoveUp={index > 0 ? () => move(index, -1) : null}\n onMoveDown={\n index < items.length - 1 ? () => move(index, 1) : null\n }\n onEdit={() => onEditSelected(favourite)}\n onDelete={() => setSelectedFavourite(favourite)}\n />\n ))}\n </ul>\n </DragDropProvider>\n {isLoading && (\n <div className={styles.overlay}>\n <Spinner />\n </div>\n )}\n </div>\n </ModalContent>\n </Modal>\n </>\n );\n}\n\nFavouriteEditingModal.propTypes = {\n /** Required. Whether the dialog is open.\n * @type {boolean} */\n isModalOpen: PropTypes.bool.isRequired,\n /** Required. Close modal.\n * @type {function} */\n handleClose: PropTypes.func.isRequired,\n /** Required. Called with the reordered favourites when the dialog is closed.\n * @type {function} */\n updateFavourites: PropTypes.func.isRequired,\n /** Required. Called with the favourite the user confirmed deleting.\n * @type {function} */\n deleteFavourite: PropTypes.func.isRequired,\n /** Required. Function that takes selected favourite object as parameter.\n * @type {function} */\n onEditSelected: PropTypes.func.isRequired,\n /** Required. Whether a save is in progress; shows a spinner over the list.\n * @type {boolean} */\n isLoading: PropTypes.bool.isRequired,\n /** Required.\n * @type {array<object>}\n * @property {string} type\n * @property {string} address\n * @property {string} gtfsId\n * @property {string} gid\n * @property {number} lat\n * @property {number} lon\n * @property {string} name\n * @property {string} selectedIconId\n * @property {string} favouriteId\n * @property {string} layer\n */\n favourites: PropTypes.arrayOf(\n PropTypes.shape({\n type: PropTypes.string,\n address: PropTypes.string,\n gtfsId: PropTypes.string,\n gid: PropTypes.string,\n lat: PropTypes.number,\n lon: PropTypes.number,\n name: PropTypes.string,\n selectedIconId: PropTypes.string,\n favouriteId: PropTypes.string,\n layer: PropTypes.string,\n }),\n ).isRequired,\n /** Optional. Language, fi, en or sv. Defaults to fi.\n * @type {string} */\n lang: PropTypes.string,\n};\n\nexport default FavouriteEditingModal;\n"],"names":["getLocaladmin","suggestion","localadmin","address","lastIndexOf","length","substring","getStopCode","id","code","undefined","indexOf","formatFavouritePlaceLabel","name","split","replace","RegExp","escapeRegExp","memoize","plain","layer","labelId","shortName","gtfsId","mode","toLowerCase","longName","agency","label","item","i","cloneDeep","css","ref","insertAt","document","head","getElementsByTagName","style","createElement","type","firstChild","insertBefore","appendChild","styleSheet","cssText","createTextNode","i18n","createInstance","fallbackLng","resources","de","translation","cancel","delete","en","down","up","fi","pl","sv","defaultNS","react","useSuspense","init","FavouriteListItem","favourite","lang","onMoveUp","onMoveDown","onEdit","onDelete","index","t","useTranslation","useSortable","favouriteId","iconId","selectedIconId","prefixPos","getIconId","_jsxs","className","styles","children","_jsx","lng","onClick","Icon","img","color","FlexColumn","Text","variant","as","FlexRow","alignItems","flexShrink","FavouriteEditingModal","isModalOpen","handleClose","updateFavourites","deleteFavourite","onEditSelected","favourites","isLoading","source","setSource","useState","reordered","setReordered","selectedFavourite","setSelectedFavourite","previousFavourites","useRef","isEqual","items","useEffect","current","isEmpty","move","direction","copy","closeDeleteDialog","_Fragment","DialogModal","headerText","dialogContent","primaryButtonText","primaryButtonOnClick","secondaryButtonText","secondaryButtonOnClick","Modal","open","onOpenChange","closeModal","omitted","map","omit","ModalContent","title","DragDropProvider","onDragEnd","event","canceled","initialIndex","operation","sortable","moved","splice","Spinner","process","env","NODE_ENV","propTypes","PropTypes","shape","string","isRequired","func","number","bool","arrayOf","gid","lat","lon"],"mappings":"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","x_google_ignoreList":[1]}
|
|
1
|
+
{"version":3,"file":"index.cjs","sources":["../../../digitransit-search-util/uniq-by-label/index.js","../../../../node_modules/style-inject/dist/style-inject.es.js","../src/helpers/translations.js","../src/helpers/i18n.js","../src/helpers/FavouriteListItem.jsx","../src/index.jsx"],"sourcesContent":["import uniqWith from 'lodash/uniqWith';\nimport isEqual from 'lodash/isEqual';\nimport memoize from 'lodash/memoize';\nimport escapeRegExp from 'lodash/escapeRegExp';\nimport cloneDeep from 'lodash/cloneDeep';\n\n/**\n * Location properties.\n * @typedef {LocationProperties}\n * @property {string} layer Suggestion layer.\n * @property {lat} [number]\n * @property {lon} [number]\n * @property {string} address Address.\n */\n\n/**\n * Returns localadmin (city name) for suggestions\n *\n * @name getLocaladmin\n * @param {Object} suggestion suggestion's properties from geocoding or a favourite stop/station.\n * Expects last part of an address (after ',') to contain the city name of the suggestion location.\n * @returns {String} City name or empty string\n */\nconst getLocaladmin = suggestion =>\n suggestion.localadmin ||\n suggestion.localadmin ||\n (suggestion.address &&\n suggestion.address.lastIndexOf(',') < suggestion.address.length - 2 &&\n suggestion.address.substring(suggestion.address.lastIndexOf(',') + 2)) ||\n '';\n\nexport const getStopCode = ({ id, code }) => {\n if (code) {\n return code;\n }\n if (\n id === undefined ||\n typeof id.indexOf === 'undefined' ||\n id.indexOf('#') === -1\n ) {\n return undefined;\n }\n // id from pelias\n return id.substring(id.indexOf('#') + 1);\n};\n\nexport const formatFavouritePlaceLabel = (name, address) => [\n name || (address && address.split(',')[0]),\n typeof address === 'string'\n ? address.replace(new RegExp(`${escapeRegExp(name)}([ ,]|$)+`), '')\n : '',\n];\n\n/**\n * Format suggestion-pair [name, address] by `suggestion.layer`.\n *\n * @name getNameLabel\n * @param {LocationProperties} suggestion\n * @param {boolean} [plain]\n *\n * @returns {Array.<string>} Formatted label.\n */\nexport const getNameLabel = memoize(\n (suggestion, plain = false) => {\n switch (suggestion.layer) {\n case 'currentPosition':\n return [suggestion.labelId, suggestion.address];\n case 'selectFromMap':\n case 'ownLocations':\n case 'back':\n return [suggestion.labelId];\n case 'favouritePlace':\n return formatFavouritePlaceLabel(suggestion.name, suggestion.address);\n case 'favouriteVehicleRentalStation':\n case 'bikestation':\n return [suggestion.name];\n case 'favouriteRoute':\n case 'route-BUS':\n case 'route-TRAM':\n case 'route-RAIL':\n case 'route-SUBWAY':\n case 'route-FERRY':\n case 'route-FUNICULAR':\n case 'route-AIRPLANE':\n return !plain && suggestion.shortName\n ? [\n suggestion.gtfsId,\n suggestion.mode.toLowerCase(),\n suggestion.longName,\n ]\n : [\n suggestion.shortName,\n suggestion.longName,\n suggestion.agency ? suggestion.agency.name : undefined,\n ];\n case 'venue':\n case 'address':\n case 'street':\n return [\n suggestion.name,\n suggestion.label.replace(\n new RegExp(`${escapeRegExp(suggestion.name)}(,)?( )?`),\n '',\n ),\n ];\n case 'favouriteStop':\n case 'stop':\n return plain\n ? [\n suggestion.name ||\n suggestion.label ||\n (suggestion.address && suggestion.address.split(',')[0]),\n getLocaladmin(suggestion),\n ]\n : [\n suggestion.name,\n suggestion.id,\n getStopCode(suggestion),\n getLocaladmin(suggestion),\n ];\n case 'favouriteStation':\n case 'station':\n default:\n return [\n suggestion.name ||\n suggestion.label ||\n (suggestion.address && suggestion.address.split(',')[0]),\n getLocaladmin(suggestion),\n ];\n }\n },\n (item, plain) => {\n const i = cloneDeep(item);\n i.plain = plain;\n return i;\n },\n);\n\n/**\n * Checks that features are unique by label\n *\n * @name uniqByLabel\n * @param {Array} features Array of features\n * @returns {Array} Array of unique features\n * @example\n * digitransit-search-util.uniqByLabel(features);\n * //= Array(2)\n */\nexport default function uniqByLabel(features) {\n return uniqWith(features, (feat1, feat2) => {\n if (feat1.type === 'FutureRoute' || feat2.type === 'FutureRoute') {\n return false;\n }\n return (\n isEqual(getNameLabel(feat1.properties), getNameLabel(feat2.properties)) &&\n feat1.properties.layer === feat2.properties.layer\n );\n });\n}\n","function styleInject(css, ref) {\n if ( ref === void 0 ) ref = {};\n var insertAt = ref.insertAt;\n\n if (!css || typeof document === 'undefined') { return; }\n\n var head = document.head || document.getElementsByTagName('head')[0];\n var style = document.createElement('style');\n style.type = 'text/css';\n\n if (insertAt === 'top') {\n if (head.firstChild) {\n head.insertBefore(style, head.firstChild);\n } else {\n head.appendChild(style);\n }\n } else {\n head.appendChild(style);\n }\n\n if (style.styleSheet) {\n style.styleSheet.cssText = css;\n } else {\n style.appendChild(document.createTextNode(css));\n }\n}\n\nexport default styleInject;\n","/* eslint sort-keys: \"error\" */\nconst translations = {\n de: {\n translation: {\n cancel: 'Abbrechen',\n delete: 'Löschen',\n 'delete-place-header': 'Wollen Sie den Favoriten löschen?',\n 'delete-place-name': 'Lösche Favorit: {{favourite.name}}',\n 'edit-place-name': 'Bearbeite Favorit: {{favourite.name}}',\n 'edit-places': 'Bearbeite Favoriten',\n },\n },\n en: {\n translation: {\n cancel: 'Cancel',\n delete: 'Delete',\n 'delete-place-header': 'Do you want to delete the place?',\n 'delete-place-name': 'Delete place: {{favourite.name}}',\n down: 'Move favourite down',\n 'edit-place-name': 'Edit place: {{favourite.name}}',\n 'edit-places': 'Edit places',\n up: 'Move favourite up',\n },\n },\n fi: {\n translation: {\n cancel: 'Peruuta',\n delete: 'Poista',\n 'delete-place-header': 'Haluatko poistaa paikan?',\n 'delete-place-name': 'Poista paikka: {{favourite.name}}',\n down: 'Siirrä suosikkisijaintia alaspäin',\n 'edit-place-name': 'Muokkaa paikkaa: {{favourite.name}}',\n 'edit-places': 'Muokkaa paikkoja',\n up: 'Siirrä suosikkisijaintia ylöpäin',\n },\n },\n pl: {\n translation: {\n cancel: 'Anuluj',\n delete: 'Usuń',\n 'delete-place-header': 'Czy na pewno chcesz usunąć to miejsce?',\n 'delete-place-name': 'Usuń miejsce: {{favourite.name}}',\n down: 'Przenieś ulubione niżej',\n 'edit-place-name': 'Edytuj miejsce: {{favourite.name}}',\n 'edit-places': 'Edytuj miejsca',\n up: 'Przenieś ulubione wyżej',\n },\n },\n sv: {\n translation: {\n cancel: 'Avbryt',\n delete: 'Ta bort',\n 'delete-place-header': 'Vill du ta bort platsen?',\n 'delete-place-name': 'Ta bort platsen: {{favourite.name}}',\n down: 'Flytta favoriten nedåt',\n 'edit-place-name': 'Edit place: {{favourite.name}}',\n 'edit-places': 'Redigera platser',\n up: 'Flytta favoriten uppåt',\n },\n },\n};\n\nexport default translations;\n","import { createInstance } from 'i18next';\nimport translations from './translations';\n\nconst i18n = createInstance({\n fallbackLng: 'fi',\n // debug: true,\n resources: translations,\n defaultNS: 'translation',\n react: {\n useSuspense: true,\n },\n});\n\ni18n.init();\n\nexport default i18n;\n","import PropTypes from 'prop-types';\nimport { useTranslation } from 'react-i18next';\nimport { FlexColumn, FlexRow, Text } from '@hsl-fi/layout-primitives';\nimport { useSortable } from '@dnd-kit/react/sortable';\nimport Icon from '@digitransit-component/digitransit-component-icon';\nimport { formatFavouritePlaceLabel } from '@digitransit-search-util/digitransit-search-util-uniq-by-label';\nimport styles from './styles.scss';\nimport i18n from './i18n';\n\nconst getIconId = selectedIconId => {\n const prefixPos = selectedIconId ? selectedIconId.indexOf('icon_') : -1;\n return prefixPos > 0 ? selectedIconId.substring(prefixPos + 5) : 'place';\n};\n\n/**\n * One row of the favourites list. The visually hidden arrow buttons are a\n * keyboard alternative to dragging.\n */\nexport default function FavouriteListItem({\n favourite,\n lang,\n onMoveUp = null,\n onMoveDown = null,\n onEdit,\n onDelete,\n index,\n}) {\n const { t } = useTranslation('translation', { i18n });\n const { ref } = useSortable({ id: favourite.favouriteId, index });\n const iconId = getIconId(favourite.selectedIconId);\n const [name, address] = formatFavouritePlaceLabel(\n favourite.name,\n favourite.address,\n );\n\n return (\n <li ref={ref} className={styles.item}>\n <div className={styles.dragHandle}>\n {onMoveUp && (\n <button\n type=\"button\"\n className={styles.arrow}\n aria-label={t('up', { lng: lang })}\n onClick={onMoveUp}\n >\n ↑\n </button>\n )}\n {onMoveDown && (\n <button\n type=\"button\"\n className={styles.arrow}\n aria-label={t('down', { lng: lang })}\n onClick={onMoveDown}\n >\n ↓\n </button>\n )}\n <span className={styles.ellipsis}>\n <Icon img=\"ellipsis\" color=\"currentColor\" />\n </span>\n <span className={styles.placeIcon}>\n <Icon img={iconId} color=\"currentColor\" />\n </span>\n </div>\n <FlexColumn className={styles.text}>\n <Text variant=\"text-xs-bold\" as=\"p\" className={styles.name}>\n {name}\n </Text>\n <Text variant=\"text-xs\" as=\"p\" color=\"weak\" className={styles.address}>\n {address}\n </Text>\n </FlexColumn>\n <FlexRow alignItems=\"center\" flexShrink={0}>\n <button\n type=\"button\"\n className={styles.actionButton}\n aria-label={t('edit-place-name', { lng: lang, favourite })}\n onClick={onEdit}\n >\n <Icon img=\"edit\" color=\"currentColor\" />\n </button>\n <button\n type=\"button\"\n className={styles.actionButton}\n aria-label={t('delete-place-name', { lng: lang, favourite })}\n onClick={onDelete}\n >\n <Icon img=\"trash\" color=\"currentColor\" />\n </button>\n </FlexRow>\n </li>\n );\n}\n\nFavouriteListItem.propTypes = {\n favourite: PropTypes.shape({\n favouriteId: PropTypes.string,\n name: PropTypes.string,\n address: PropTypes.string,\n selectedIconId: PropTypes.string,\n }).isRequired,\n lang: PropTypes.string.isRequired,\n onEdit: PropTypes.func.isRequired,\n onDelete: PropTypes.func.isRequired,\n onMoveUp: PropTypes.func,\n onMoveDown: PropTypes.func,\n index: PropTypes.number.isRequired,\n};\n","import { useEffect, useRef, useState } from 'react';\nimport PropTypes from 'prop-types';\nimport { useTranslation } from 'react-i18next';\nimport { DragDropProvider } from '@dnd-kit/react';\nimport isEmpty from 'lodash/isEmpty';\nimport isEqual from 'lodash/isEqual';\nimport omit from 'lodash/omit';\nimport { Spinner } from '@hsl-fi/loading-indicators';\nimport { Modal, ModalContent } from '@hsl-fi/dialog';\nimport DialogModal from '@digitransit-component/digitransit-component-dialog-modal';\nimport FavouriteListItem from './helpers/FavouriteListItem';\nimport i18n from './helpers/i18n';\nimport styles from './helpers/styles.scss';\n\n/**\n * A dialog for reordering, editing and deleting favourite places, built on\n * the HSL design system's Modal. Colors, typography and the mobile/desktop\n * layout are handled by the design system, so the dialog follows the active\n * deployment's theme.\n *\n * @example\n * <FavouriteEditingModal\n * isModalOpen={modalOpen}\n * handleClose={handleClose}\n * favourites={favourites}\n * updateFavourites={onUpdateFavourites}\n * deleteFavourite={onDeleteFavourite}\n * onEditSelected={onEditSelected}\n * isLoading={false}\n * lang=\"fi\"\n * />\n */\nexport default function FavouriteEditingModal({\n isModalOpen,\n handleClose,\n updateFavourites,\n deleteFavourite,\n onEditSelected,\n favourites,\n isLoading,\n lang = 'fi',\n}) {\n const { t } = useTranslation('translation', { i18n });\n const [source, setSource] = useState(favourites);\n const [reordered, setReordered] = useState(null);\n const [selectedFavourite, setSelectedFavourite] = useState(null);\n const previousFavourites = useRef(favourites);\n\n // Drop the local order when the favourites change from outside\n if (!isEqual(source, favourites)) {\n setSource(favourites);\n setReordered(null);\n }\n const items = reordered || favourites;\n\n useEffect(() => {\n if (\n previousFavourites.current !== favourites &&\n !isEqual(previousFavourites.current, favourites) &&\n isEmpty(favourites)\n ) {\n handleClose();\n }\n previousFavourites.current = favourites;\n }, [favourites, handleClose]);\n\n const move = (index, direction) => {\n const copy = [...items];\n [copy[index], copy[index + direction]] = [\n copy[index + direction],\n copy[index],\n ];\n setReordered(copy);\n };\n\n const onDragEnd = event => {\n if (event.canceled) {\n return;\n }\n const { initialIndex, index } = event.operation.source?.sortable || {};\n if (initialIndex === undefined || initialIndex === index) {\n return;\n }\n const copy = [...items];\n const [moved] = copy.splice(initialIndex, 1);\n copy.splice(index, 0, moved);\n setReordered(copy);\n };\n\n const closeModal = () => {\n handleClose();\n const omitted = items.map(item => omit(item, ['chosen', 'selected']));\n if (!isEqual(omitted, favourites)) {\n updateFavourites(omitted);\n }\n };\n\n const closeDeleteDialog = () => setSelectedFavourite(null);\n\n return (\n <>\n <DialogModal\n headerText={t('delete-place-header', { lng: lang })}\n handleClose={() => {\n closeDeleteDialog();\n handleClose();\n }}\n isModalOpen={selectedFavourite !== null}\n dialogContent={\n selectedFavourite\n ? `${selectedFavourite.name}: ${selectedFavourite.address}`\n : ''\n }\n primaryButtonText={t('delete', { lng: lang })}\n primaryButtonOnClick={() => {\n deleteFavourite(selectedFavourite);\n closeDeleteDialog();\n }}\n secondaryButtonText={t('cancel', { lng: lang })}\n secondaryButtonOnClick={closeDeleteDialog}\n lang={lang}\n />\n <Modal\n open={isModalOpen && selectedFavourite === null}\n onOpenChange={open => {\n if (!open) {\n closeModal();\n }\n }}\n >\n <ModalContent\n lang={lang}\n title={t('edit-places', { lng: lang })}\n className={styles.modalContent}\n aria-describedby={undefined}\n >\n <div className={styles.listContainer}>\n <DragDropProvider onDragEnd={onDragEnd}>\n <ul className={styles.list}>\n {items.map((favourite, index) => (\n <FavouriteListItem\n key={favourite.favouriteId}\n index={index}\n favourite={favourite}\n lang={lang}\n onMoveUp={index > 0 ? () => move(index, -1) : null}\n onMoveDown={\n index < items.length - 1 ? () => move(index, 1) : null\n }\n onEdit={() => onEditSelected(favourite)}\n onDelete={() => setSelectedFavourite(favourite)}\n />\n ))}\n </ul>\n </DragDropProvider>\n {isLoading && (\n <div className={styles.overlay}>\n <Spinner />\n </div>\n )}\n </div>\n </ModalContent>\n </Modal>\n </>\n );\n}\n\nFavouriteEditingModal.propTypes = {\n /** Required. Whether the dialog is open.\n * @type {boolean} */\n isModalOpen: PropTypes.bool.isRequired,\n /** Required. Close modal.\n * @type {function} */\n handleClose: PropTypes.func.isRequired,\n /** Required. Called with the reordered favourites when the dialog is closed.\n * @type {function} */\n updateFavourites: PropTypes.func.isRequired,\n /** Required. Called with the favourite the user confirmed deleting.\n * @type {function} */\n deleteFavourite: PropTypes.func.isRequired,\n /** Required. Function that takes selected favourite object as parameter.\n * @type {function} */\n onEditSelected: PropTypes.func.isRequired,\n /** Required. Whether a save is in progress; shows a spinner over the list.\n * @type {boolean} */\n isLoading: PropTypes.bool.isRequired,\n /** Required.\n * @type {array<object>}\n * @property {string} type\n * @property {string} address\n * @property {string} gtfsId\n * @property {string} gid\n * @property {number} lat\n * @property {number} lon\n * @property {string} name\n * @property {string} selectedIconId\n * @property {string} favouriteId\n * @property {string} layer\n */\n favourites: PropTypes.arrayOf(\n PropTypes.shape({\n type: PropTypes.string,\n address: PropTypes.string,\n gtfsId: PropTypes.string,\n gid: PropTypes.string,\n lat: PropTypes.number,\n lon: PropTypes.number,\n name: PropTypes.string,\n selectedIconId: PropTypes.string,\n favouriteId: PropTypes.string,\n layer: PropTypes.string,\n }),\n ).isRequired,\n /** Optional. Language, fi, en or sv. Defaults to fi.\n * @type {string} */\n lang: PropTypes.string,\n};\n"],"names":["getLocaladmin","suggestion","localadmin","address","lastIndexOf","length","substring","getStopCode","id","code","undefined","indexOf","formatFavouritePlaceLabel","name","split","replace","RegExp","escapeRegExp","memoize","plain","layer","labelId","shortName","gtfsId","mode","toLowerCase","longName","agency","label","item","i","cloneDeep","css","ref","insertAt","document","head","getElementsByTagName","style","createElement","type","firstChild","insertBefore","appendChild","styleSheet","cssText","createTextNode","i18n","createInstance","fallbackLng","resources","de","translation","cancel","delete","en","down","up","fi","pl","sv","defaultNS","react","useSuspense","init","FavouriteListItem","favourite","lang","onMoveUp","onMoveDown","onEdit","onDelete","index","t","useTranslation","useSortable","favouriteId","iconId","selectedIconId","prefixPos","getIconId","_jsxs","className","styles","children","_jsx","lng","onClick","Icon","img","color","FlexColumn","Text","variant","as","FlexRow","alignItems","flexShrink","FavouriteEditingModal","isModalOpen","handleClose","updateFavourites","deleteFavourite","onEditSelected","favourites","isLoading","source","setSource","useState","reordered","setReordered","selectedFavourite","setSelectedFavourite","previousFavourites","useRef","isEqual","items","useEffect","current","isEmpty","move","direction","copy","closeDeleteDialog","_Fragment","DialogModal","headerText","dialogContent","primaryButtonText","primaryButtonOnClick","secondaryButtonText","secondaryButtonOnClick","Modal","open","onOpenChange","closeModal","omitted","map","omit","ModalContent","title","DragDropProvider","onDragEnd","event","canceled","initialIndex","operation","sortable","moved","splice","Spinner","process","env","NODE_ENV","propTypes","PropTypes","shape","string","isRequired","func","number","bool","arrayOf","gid","lat","lon"],"mappings":"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","x_google_ignoreList":[1]}
|
|
@@ -504,4 +504,4 @@
|
|
|
504
504
|
Object.defineProperty(exports, '__esModule', { value: true });
|
|
505
505
|
|
|
506
506
|
}));
|
|
507
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguZGV2ZWxvcG1lbnQuY2pzIiwic291cmNlcyI6WyIuLi8uLi8uLi9kaWdpdHJhbnNpdC1zZWFyY2gtdXRpbC91bmlxLWJ5LWxhYmVsL2luZGV4LmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3N0eWxlLWluamVjdC9kaXN0L3N0eWxlLWluamVjdC5lcy5qcyIsIi4uL3NyYy9oZWxwZXJzL3RyYW5zbGF0aW9ucy5qcyIsIi4uL3NyYy9oZWxwZXJzL2kxOG4uanMiLCIuLi9zcmMvaGVscGVycy9GYXZvdXJpdGVMaXN0SXRlbS5qc3giLCIuLi9zcmMvaW5kZXguanN4Il0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB1bmlxV2l0aCBmcm9tICdsb2Rhc2gvdW5pcVdpdGgnO1xuaW1wb3J0IGlzRXF1YWwgZnJvbSAnbG9kYXNoL2lzRXF1YWwnO1xuaW1wb3J0IG1lbW9pemUgZnJvbSAnbG9kYXNoL21lbW9pemUnO1xuaW1wb3J0IGVzY2FwZVJlZ0V4cCBmcm9tICdsb2Rhc2gvZXNjYXBlUmVnRXhwJztcbmltcG9ydCBjbG9uZURlZXAgZnJvbSAnbG9kYXNoL2Nsb25lRGVlcCc7XG5cbi8qKlxuICogTG9jYXRpb24gcHJvcGVydGllcy5cbiAqIEB0eXBlZGVmIHtMb2NhdGlvblByb3BlcnRpZXN9XG4gKiBAcHJvcGVydHkge3N0cmluZ30gbGF5ZXIgU3VnZ2VzdGlvbiBsYXllci5cbiAqIEBwcm9wZXJ0eSB7bGF0fSBbbnVtYmVyXVxuICogQHByb3BlcnR5IHtsb259IFtudW1iZXJdXG4gKiBAcHJvcGVydHkge3N0cmluZ30gYWRkcmVzcyBBZGRyZXNzLlxuICovXG5cbi8qKlxuICogUmV0dXJucyBsb2NhbGFkbWluIChjaXR5IG5hbWUpIGZvciBzdWdnZXN0aW9uc1xuICpcbiAqIEBuYW1lIGdldExvY2FsYWRtaW5cbiAqIEBwYXJhbSB7T2JqZWN0fSBzdWdnZXN0aW9uIHN1Z2dlc3Rpb24ncyBwcm9wZXJ0aWVzIGZyb20gZ2VvY29kaW5nIG9yIGEgZmF2b3VyaXRlIHN0b3Avc3RhdGlvbi5cbiAqIEV4cGVjdHMgbGFzdCBwYXJ0IG9mIGFuIGFkZHJlc3MgKGFmdGVyICcsJykgdG8gY29udGFpbiB0aGUgY2l0eSBuYW1lIG9mIHRoZSBzdWdnZXN0aW9uIGxvY2F0aW9uLlxuICogQHJldHVybnMge1N0cmluZ30gIENpdHkgbmFtZSBvciBlbXB0eSBzdHJpbmdcbiAqL1xuY29uc3QgZ2V0TG9jYWxhZG1pbiA9IHN1Z2dlc3Rpb24gPT5cbiAgc3VnZ2VzdGlvbi5sb2NhbGFkbWluIHx8XG4gIHN1Z2dlc3Rpb24ubG9jYWxhZG1pbiB8fFxuICAoc3VnZ2VzdGlvbi5hZGRyZXNzICYmXG4gICAgc3VnZ2VzdGlvbi5hZGRyZXNzLmxhc3RJbmRleE9mKCcsJykgPCBzdWdnZXN0aW9uLmFkZHJlc3MubGVuZ3RoIC0gMiAmJlxuICAgIHN1Z2dlc3Rpb24uYWRkcmVzcy5zdWJzdHJpbmcoc3VnZ2VzdGlvbi5hZGRyZXNzLmxhc3RJbmRleE9mKCcsJykgKyAyKSkgfHxcbiAgJyc7XG5cbmV4cG9ydCBjb25zdCBnZXRTdG9wQ29kZSA9ICh7IGlkLCBjb2RlIH0pID0+IHtcbiAgaWYgKGNvZGUpIHtcbiAgICByZXR1cm4gY29kZTtcbiAgfVxuICBpZiAoXG4gICAgaWQgPT09IHVuZGVmaW5lZCB8fFxuICAgIHR5cGVvZiBpZC5pbmRleE9mID09PSAndW5kZWZpbmVkJyB8fFxuICAgIGlkLmluZGV4T2YoJyMnKSA9PT0gLTFcbiAgKSB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuICAvLyBpZCBmcm9tIHBlbGlhc1xuICByZXR1cm4gaWQuc3Vic3RyaW5nKGlkLmluZGV4T2YoJyMnKSArIDEpO1xufTtcblxuZXhwb3J0IGNvbnN0IGZvcm1hdEZhdm91cml0ZVBsYWNlTGFiZWwgPSAobmFtZSwgYWRkcmVzcykgPT4gW1xuICBuYW1lIHx8IChhZGRyZXNzICYmIGFkZHJlc3Muc3BsaXQoJywnKVswXSksXG4gIHR5cGVvZiBhZGRyZXNzID09PSAnc3RyaW5nJ1xuICAgID8gYWRkcmVzcy5yZXBsYWNlKG5ldyBSZWdFeHAoYCR7ZXNjYXBlUmVnRXhwKG5hbWUpfShbICxdfCQpK2ApLCAnJylcbiAgICA6ICcnLFxuXTtcblxuLyoqXG4gKiBGb3JtYXQgc3VnZ2VzdGlvbi1wYWlyIFtuYW1lLCBhZGRyZXNzXSBieSBgc3VnZ2VzdGlvbi5sYXllcmAuXG4gKlxuICogQG5hbWUgZ2V0TmFtZUxhYmVsXG4gKiBAcGFyYW0ge0xvY2F0aW9uUHJvcGVydGllc30gc3VnZ2VzdGlvblxuICogQHBhcmFtIHtib29sZWFufSBbcGxhaW5dXG4gKlxuICogQHJldHVybnMge0FycmF5LjxzdHJpbmc+fSBGb3JtYXR0ZWQgbGFiZWwuXG4gKi9cbmV4cG9ydCBjb25zdCBnZXROYW1lTGFiZWwgPSBtZW1vaXplKFxuICAoc3VnZ2VzdGlvbiwgcGxhaW4gPSBmYWxzZSkgPT4ge1xuICAgIHN3aXRjaCAoc3VnZ2VzdGlvbi5sYXllcikge1xuICAgICAgY2FzZSAnY3VycmVudFBvc2l0aW9uJzpcbiAgICAgICAgcmV0dXJuIFtzdWdnZXN0aW9uLmxhYmVsSWQsIHN1Z2dlc3Rpb24uYWRkcmVzc107XG4gICAgICBjYXNlICdzZWxlY3RGcm9tTWFwJzpcbiAgICAgIGNhc2UgJ293bkxvY2F0aW9ucyc6XG4gICAgICBjYXNlICdiYWNrJzpcbiAgICAgICAgcmV0dXJuIFtzdWdnZXN0aW9uLmxhYmVsSWRdO1xuICAgICAgY2FzZSAnZmF2b3VyaXRlUGxhY2UnOlxuICAgICAgICByZXR1cm4gZm9ybWF0RmF2b3VyaXRlUGxhY2VMYWJlbChzdWdnZXN0aW9uLm5hbWUsIHN1Z2dlc3Rpb24uYWRkcmVzcyk7XG4gICAgICBjYXNlICdmYXZvdXJpdGVWZWhpY2xlUmVudGFsU3RhdGlvbic6XG4gICAgICBjYXNlICdiaWtlc3RhdGlvbic6XG4gICAgICAgIHJldHVybiBbc3VnZ2VzdGlvbi5uYW1lXTtcbiAgICAgIGNhc2UgJ2Zhdm91cml0ZVJvdXRlJzpcbiAgICAgIGNhc2UgJ3JvdXRlLUJVUyc6XG4gICAgICBjYXNlICdyb3V0ZS1UUkFNJzpcbiAgICAgIGNhc2UgJ3JvdXRlLVJBSUwnOlxuICAgICAgY2FzZSAncm91dGUtU1VCV0FZJzpcbiAgICAgIGNhc2UgJ3JvdXRlLUZFUlJZJzpcbiAgICAgIGNhc2UgJ3JvdXRlLUZVTklDVUxBUic6XG4gICAgICBjYXNlICdyb3V0ZS1BSVJQTEFORSc6XG4gICAgICAgIHJldHVybiAhcGxhaW4gJiYgc3VnZ2VzdGlvbi5zaG9ydE5hbWVcbiAgICAgICAgICA/IFtcbiAgICAgICAgICAgICAgc3VnZ2VzdGlvbi5ndGZzSWQsXG4gICAgICAgICAgICAgIHN1Z2dlc3Rpb24ubW9kZS50b0xvd2VyQ2FzZSgpLFxuICAgICAgICAgICAgICBzdWdnZXN0aW9uLmxvbmdOYW1lLFxuICAgICAgICAgICAgXVxuICAgICAgICAgIDogW1xuICAgICAgICAgICAgICBzdWdnZXN0aW9uLnNob3J0TmFtZSxcbiAgICAgICAgICAgICAgc3VnZ2VzdGlvbi5sb25nTmFtZSxcbiAgICAgICAgICAgICAgc3VnZ2VzdGlvbi5hZ2VuY3kgPyBzdWdnZXN0aW9uLmFnZW5jeS5uYW1lIDogdW5kZWZpbmVkLFxuICAgICAgICAgICAgXTtcbiAgICAgIGNhc2UgJ3ZlbnVlJzpcbiAgICAgIGNhc2UgJ2FkZHJlc3MnOlxuICAgICAgY2FzZSAnc3RyZWV0JzpcbiAgICAgICAgcmV0dXJuIFtcbiAgICAgICAgICBzdWdnZXN0aW9uLm5hbWUsXG4gICAgICAgICAgc3VnZ2VzdGlvbi5sYWJlbC5yZXBsYWNlKFxuICAgICAgICAgICAgbmV3IFJlZ0V4cChgJHtlc2NhcGVSZWdFeHAoc3VnZ2VzdGlvbi5uYW1lKX0oLCk/KCApP2ApLFxuICAgICAgICAgICAgJycsXG4gICAgICAgICAgKSxcbiAgICAgICAgXTtcbiAgICAgIGNhc2UgJ2Zhdm91cml0ZVN0b3AnOlxuICAgICAgY2FzZSAnc3RvcCc6XG4gICAgICAgIHJldHVybiBwbGFpblxuICAgICAgICAgID8gW1xuICAgICAgICAgICAgICBzdWdnZXN0aW9uLm5hbWUgfHxcbiAgICAgICAgICAgICAgICBzdWdnZXN0aW9uLmxhYmVsIHx8XG4gICAgICAgICAgICAgICAgKHN1Z2dlc3Rpb24uYWRkcmVzcyAmJiBzdWdnZXN0aW9uLmFkZHJlc3Muc3BsaXQoJywnKVswXSksXG4gICAgICAgICAgICAgIGdldExvY2FsYWRtaW4oc3VnZ2VzdGlvbiksXG4gICAgICAgICAgICBdXG4gICAgICAgICAgOiBbXG4gICAgICAgICAgICAgIHN1Z2dlc3Rpb24ubmFtZSxcbiAgICAgICAgICAgICAgc3VnZ2VzdGlvbi5pZCxcbiAgICAgICAgICAgICAgZ2V0U3RvcENvZGUoc3VnZ2VzdGlvbiksXG4gICAgICAgICAgICAgIGdldExvY2FsYWRtaW4oc3VnZ2VzdGlvbiksXG4gICAgICAgICAgICBdO1xuICAgICAgY2FzZSAnZmF2b3VyaXRlU3RhdGlvbic6XG4gICAgICBjYXNlICdzdGF0aW9uJzpcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiBbXG4gICAgICAgICAgc3VnZ2VzdGlvbi5uYW1lIHx8XG4gICAgICAgICAgICBzdWdnZXN0aW9uLmxhYmVsIHx8XG4gICAgICAgICAgICAoc3VnZ2VzdGlvbi5hZGRyZXNzICYmIHN1Z2dlc3Rpb24uYWRkcmVzcy5zcGxpdCgnLCcpWzBdKSxcbiAgICAgICAgICBnZXRMb2NhbGFkbWluKHN1Z2dlc3Rpb24pLFxuICAgICAgICBdO1xuICAgIH1cbiAgfSxcbiAgKGl0ZW0sIHBsYWluKSA9PiB7XG4gICAgY29uc3QgaSA9IGNsb25lRGVlcChpdGVtKTtcbiAgICBpLnBsYWluID0gcGxhaW47XG4gICAgcmV0dXJuIGk7XG4gIH0sXG4pO1xuXG4vKipcbiAqIENoZWNrcyB0aGF0IGZlYXR1cmVzIGFyZSB1bmlxdWUgYnkgbGFiZWxcbiAqXG4gKiBAbmFtZSB1bmlxQnlMYWJlbFxuICogQHBhcmFtIHtBcnJheX0gZmVhdHVyZXMgQXJyYXkgb2YgZmVhdHVyZXNcbiAqIEByZXR1cm5zIHtBcnJheX0gIEFycmF5IG9mIHVuaXF1ZSBmZWF0dXJlc1xuICogQGV4YW1wbGVcbiAqIGRpZ2l0cmFuc2l0LXNlYXJjaC11dGlsLnVuaXFCeUxhYmVsKGZlYXR1cmVzKTtcbiAqIC8vPSBBcnJheSgyKVxuICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiB1bmlxQnlMYWJlbChmZWF0dXJlcykge1xuICByZXR1cm4gdW5pcVdpdGgoZmVhdHVyZXMsIChmZWF0MSwgZmVhdDIpID0+IHtcbiAgICBpZiAoZmVhdDEudHlwZSA9PT0gJ0Z1dHVyZVJvdXRlJyB8fCBmZWF0Mi50eXBlID09PSAnRnV0dXJlUm91dGUnKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHJldHVybiAoXG4gICAgICBpc0VxdWFsKGdldE5hbWVMYWJlbChmZWF0MS5wcm9wZXJ0aWVzKSwgZ2V0TmFtZUxhYmVsKGZlYXQyLnByb3BlcnRpZXMpKSAmJlxuICAgICAgZmVhdDEucHJvcGVydGllcy5sYXllciA9PT0gZmVhdDIucHJvcGVydGllcy5sYXllclxuICAgICk7XG4gIH0pO1xufVxuIiwiZnVuY3Rpb24gc3R5bGVJbmplY3QoY3NzLCByZWYpIHtcbiAgaWYgKCByZWYgPT09IHZvaWQgMCApIHJlZiA9IHt9O1xuICB2YXIgaW5zZXJ0QXQgPSByZWYuaW5zZXJ0QXQ7XG5cbiAgaWYgKCFjc3MgfHwgdHlwZW9mIGRvY3VtZW50ID09PSAndW5kZWZpbmVkJykgeyByZXR1cm47IH1cblxuICB2YXIgaGVhZCA9IGRvY3VtZW50LmhlYWQgfHwgZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ2hlYWQnKVswXTtcbiAgdmFyIHN0eWxlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc3R5bGUnKTtcbiAgc3R5bGUudHlwZSA9ICd0ZXh0L2Nzcyc7XG5cbiAgaWYgKGluc2VydEF0ID09PSAndG9wJykge1xuICAgIGlmIChoZWFkLmZpcnN0Q2hpbGQpIHtcbiAgICAgIGhlYWQuaW5zZXJ0QmVmb3JlKHN0eWxlLCBoZWFkLmZpcnN0Q2hpbGQpO1xuICAgIH0gZWxzZSB7XG4gICAgICBoZWFkLmFwcGVuZENoaWxkKHN0eWxlKTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgaGVhZC5hcHBlbmRDaGlsZChzdHlsZSk7XG4gIH1cblxuICBpZiAoc3R5bGUuc3R5bGVTaGVldCkge1xuICAgIHN0eWxlLnN0eWxlU2hlZXQuY3NzVGV4dCA9IGNzcztcbiAgfSBlbHNlIHtcbiAgICBzdHlsZS5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShjc3MpKTtcbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBzdHlsZUluamVjdDtcbiIsIi8qIGVzbGludCBzb3J0LWtleXM6IFwiZXJyb3JcIiAqL1xuY29uc3QgdHJhbnNsYXRpb25zID0ge1xuICBkZToge1xuICAgIHRyYW5zbGF0aW9uOiB7XG4gICAgICBjYW5jZWw6ICdBYmJyZWNoZW4nLFxuICAgICAgZGVsZXRlOiAnTMO2c2NoZW4nLFxuICAgICAgJ2RlbGV0ZS1wbGFjZS1oZWFkZXInOiAnV29sbGVuIFNpZSBkZW4gRmF2b3JpdGVuIGzDtnNjaGVuPycsXG4gICAgICAnZGVsZXRlLXBsYWNlLW5hbWUnOiAnTMO2c2NoZSBGYXZvcml0OiB7e2Zhdm91cml0ZS5uYW1lfX0nLFxuICAgICAgJ2VkaXQtcGxhY2UtbmFtZSc6ICdCZWFyYmVpdGUgRmF2b3JpdDoge3tmYXZvdXJpdGUubmFtZX19JyxcbiAgICAgICdlZGl0LXBsYWNlcyc6ICdCZWFyYmVpdGUgRmF2b3JpdGVuJyxcbiAgICB9LFxuICB9LFxuICBlbjoge1xuICAgIHRyYW5zbGF0aW9uOiB7XG4gICAgICBjYW5jZWw6ICdDYW5jZWwnLFxuICAgICAgZGVsZXRlOiAnRGVsZXRlJyxcbiAgICAgICdkZWxldGUtcGxhY2UtaGVhZGVyJzogJ0RvIHlvdSB3YW50IHRvIGRlbGV0ZSB0aGUgcGxhY2U/JyxcbiAgICAgICdkZWxldGUtcGxhY2UtbmFtZSc6ICdEZWxldGUgcGxhY2U6IHt7ZmF2b3VyaXRlLm5hbWV9fScsXG4gICAgICBkb3duOiAnTW92ZSBmYXZvdXJpdGUgZG93bicsXG4gICAgICAnZWRpdC1wbGFjZS1uYW1lJzogJ0VkaXQgcGxhY2U6IHt7ZmF2b3VyaXRlLm5hbWV9fScsXG4gICAgICAnZWRpdC1wbGFjZXMnOiAnRWRpdCBwbGFjZXMnLFxuICAgICAgdXA6ICdNb3ZlIGZhdm91cml0ZSB1cCcsXG4gICAgfSxcbiAgfSxcbiAgZmk6IHtcbiAgICB0cmFuc2xhdGlvbjoge1xuICAgICAgY2FuY2VsOiAnUGVydXV0YScsXG4gICAgICBkZWxldGU6ICdQb2lzdGEnLFxuICAgICAgJ2RlbGV0ZS1wbGFjZS1oZWFkZXInOiAnSGFsdWF0a28gcG9pc3RhYSBwYWlrYW4/JyxcbiAgICAgICdkZWxldGUtcGxhY2UtbmFtZSc6ICdQb2lzdGEgcGFpa2thOiB7e2Zhdm91cml0ZS5uYW1lfX0nLFxuICAgICAgZG93bjogJ1NpaXJyw6Qgc3Vvc2lra2lzaWphaW50aWEgYWxhc3DDpGluJyxcbiAgICAgICdlZGl0LXBsYWNlLW5hbWUnOiAnTXVva2thYSBwYWlra2FhOiB7e2Zhdm91cml0ZS5uYW1lfX0nLFxuICAgICAgJ2VkaXQtcGxhY2VzJzogJ011b2trYWEgcGFpa2tvamEnLFxuICAgICAgdXA6ICdTaWlycsOkIHN1b3Npa2tpc2lqYWludGlhIHlsw7Zww6RpbicsXG4gICAgfSxcbiAgfSxcbiAgcGw6IHtcbiAgICB0cmFuc2xhdGlvbjoge1xuICAgICAgY2FuY2VsOiAnQW51bHVqJyxcbiAgICAgIGRlbGV0ZTogJ1VzdcWEJyxcbiAgICAgICdkZWxldGUtcGxhY2UtaGVhZGVyJzogJ0N6eSBuYSBwZXdubyBjaGNlc3ogdXN1bsSFxIcgdG8gbWllanNjZT8nLFxuICAgICAgJ2RlbGV0ZS1wbGFjZS1uYW1lJzogJ1VzdcWEIG1pZWpzY2U6IHt7ZmF2b3VyaXRlLm5hbWV9fScsXG4gICAgICBkb3duOiAnUHJ6ZW5pZcWbIHVsdWJpb25lIG5pxbxlaicsXG4gICAgICAnZWRpdC1wbGFjZS1uYW1lJzogJ0VkeXR1aiBtaWVqc2NlOiB7e2Zhdm91cml0ZS5uYW1lfX0nLFxuICAgICAgJ2VkaXQtcGxhY2VzJzogJ0VkeXR1aiBtaWVqc2NhJyxcbiAgICAgIHVwOiAnUHJ6ZW5pZcWbIHVsdWJpb25lIHd5xbxlaicsXG4gICAgfSxcbiAgfSxcbiAgc3Y6IHtcbiAgICB0cmFuc2xhdGlvbjoge1xuICAgICAgY2FuY2VsOiAnQXZicnl0JyxcbiAgICAgIGRlbGV0ZTogJ1RhIGJvcnQnLFxuICAgICAgJ2RlbGV0ZS1wbGFjZS1oZWFkZXInOiAnVmlsbCBkdSB0YSBib3J0IHBsYXRzZW4/JyxcbiAgICAgICdkZWxldGUtcGxhY2UtbmFtZSc6ICdUYSBib3J0IHBsYXRzZW46IHt7ZmF2b3VyaXRlLm5hbWV9fScsXG4gICAgICBkb3duOiAnRmx5dHRhIGZhdm9yaXRlbiBuZWTDpXQnLFxuICAgICAgJ2VkaXQtcGxhY2UtbmFtZSc6ICdFZGl0IHBsYWNlOiB7e2Zhdm91cml0ZS5uYW1lfX0nLFxuICAgICAgJ2VkaXQtcGxhY2VzJzogJ1JlZGlnZXJhIHBsYXRzZXInLFxuICAgICAgdXA6ICdGbHl0dGEgZmF2b3JpdGVuIHVwcMOldCcsXG4gICAgfSxcbiAgfSxcbn07XG5cbmV4cG9ydCBkZWZhdWx0IHRyYW5zbGF0aW9ucztcbiIsImltcG9ydCB7IGNyZWF0ZUluc3RhbmNlIH0gZnJvbSAnaTE4bmV4dCc7XG5pbXBvcnQgdHJhbnNsYXRpb25zIGZyb20gJy4vdHJhbnNsYXRpb25zJztcblxuY29uc3QgaTE4biA9IGNyZWF0ZUluc3RhbmNlKHtcbiAgZmFsbGJhY2tMbmc6ICdmaScsXG4gIC8vIGRlYnVnOiB0cnVlLFxuICByZXNvdXJjZXM6IHRyYW5zbGF0aW9ucyxcbiAgZGVmYXVsdE5TOiAndHJhbnNsYXRpb24nLFxuICByZWFjdDoge1xuICAgIHVzZVN1c3BlbnNlOiB0cnVlLFxuICB9LFxufSk7XG5cbmkxOG4uaW5pdCgpO1xuXG5leHBvcnQgZGVmYXVsdCBpMThuO1xuIiwiaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbmltcG9ydCB7IHVzZVRyYW5zbGF0aW9uIH0gZnJvbSAncmVhY3QtaTE4bmV4dCc7XG5pbXBvcnQgeyBGbGV4Q29sdW1uLCBGbGV4Um93LCBUZXh0IH0gZnJvbSAnQGhzbC1maS9sYXlvdXQtcHJpbWl0aXZlcyc7XG5pbXBvcnQgeyB1c2VTb3J0YWJsZSB9IGZyb20gJ0BkbmQta2l0L3JlYWN0L3NvcnRhYmxlJztcbmltcG9ydCBJY29uIGZyb20gJ0BkaWdpdHJhbnNpdC1jb21wb25lbnQvZGlnaXRyYW5zaXQtY29tcG9uZW50LWljb24nO1xuaW1wb3J0IHsgZm9ybWF0RmF2b3VyaXRlUGxhY2VMYWJlbCB9IGZyb20gJ0BkaWdpdHJhbnNpdC1zZWFyY2gtdXRpbC9kaWdpdHJhbnNpdC1zZWFyY2gtdXRpbC11bmlxLWJ5LWxhYmVsJztcbmltcG9ydCBzdHlsZXMgZnJvbSAnLi9zdHlsZXMuc2Nzcyc7XG5pbXBvcnQgaTE4biBmcm9tICcuL2kxOG4nO1xuXG5jb25zdCBnZXRJY29uSWQgPSBzZWxlY3RlZEljb25JZCA9PiB7XG4gIGNvbnN0IHByZWZpeFBvcyA9IHNlbGVjdGVkSWNvbklkID8gc2VsZWN0ZWRJY29uSWQuaW5kZXhPZignaWNvbl8nKSA6IC0xO1xuICByZXR1cm4gcHJlZml4UG9zID4gMCA/IHNlbGVjdGVkSWNvbklkLnN1YnN0cmluZyhwcmVmaXhQb3MgKyA1KSA6ICdwbGFjZSc7XG59O1xuXG4vKipcbiAqIE9uZSByb3cgb2YgdGhlIGZhdm91cml0ZXMgbGlzdC4gVGhlIHZpc3VhbGx5IGhpZGRlbiBhcnJvdyBidXR0b25zIGFyZSBhXG4gKiBrZXlib2FyZCBhbHRlcm5hdGl2ZSB0byBkcmFnZ2luZy5cbiAqL1xuZnVuY3Rpb24gRmF2b3VyaXRlTGlzdEl0ZW0oe1xuICBmYXZvdXJpdGUsXG4gIGxhbmcsXG4gIG9uTW92ZVVwID0gbnVsbCxcbiAgb25Nb3ZlRG93biA9IG51bGwsXG4gIG9uRWRpdCxcbiAgb25EZWxldGUsXG4gIGluZGV4LFxufSkge1xuICBjb25zdCB7IHQgfSA9IHVzZVRyYW5zbGF0aW9uKCd0cmFuc2xhdGlvbicsIHsgaTE4biB9KTtcbiAgY29uc3QgeyByZWYgfSA9IHVzZVNvcnRhYmxlKHsgaWQ6IGZhdm91cml0ZS5mYXZvdXJpdGVJZCwgaW5kZXggfSk7XG4gIGNvbnN0IGljb25JZCA9IGdldEljb25JZChmYXZvdXJpdGUuc2VsZWN0ZWRJY29uSWQpO1xuICBjb25zdCBbbmFtZSwgYWRkcmVzc10gPSBmb3JtYXRGYXZvdXJpdGVQbGFjZUxhYmVsKFxuICAgIGZhdm91cml0ZS5uYW1lLFxuICAgIGZhdm91cml0ZS5hZGRyZXNzLFxuICApO1xuXG4gIHJldHVybiAoXG4gICAgPGxpIHJlZj17cmVmfSBjbGFzc05hbWU9e3N0eWxlcy5pdGVtfT5cbiAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMuZHJhZ0hhbmRsZX0+XG4gICAgICAgIHtvbk1vdmVVcCAmJiAoXG4gICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICBjbGFzc05hbWU9e3N0eWxlcy5hcnJvd31cbiAgICAgICAgICAgIGFyaWEtbGFiZWw9e3QoJ3VwJywgeyBsbmc6IGxhbmcgfSl9XG4gICAgICAgICAgICBvbkNsaWNrPXtvbk1vdmVVcH1cbiAgICAgICAgICA+XG4gICAgICAgICAgICAmdWFycjtcbiAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgKX1cbiAgICAgICAge29uTW92ZURvd24gJiYgKFxuICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgY2xhc3NOYW1lPXtzdHlsZXMuYXJyb3d9XG4gICAgICAgICAgICBhcmlhLWxhYmVsPXt0KCdkb3duJywgeyBsbmc6IGxhbmcgfSl9XG4gICAgICAgICAgICBvbkNsaWNrPXtvbk1vdmVEb3dufVxuICAgICAgICAgID5cbiAgICAgICAgICAgICZkYXJyO1xuICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICApfVxuICAgICAgICA8c3BhbiBjbGFzc05hbWU9e3N0eWxlcy5lbGxpcHNpc30+XG4gICAgICAgICAgPEljb24gaW1nPVwiZWxsaXBzaXNcIiBjb2xvcj1cImN1cnJlbnRDb2xvclwiIC8+XG4gICAgICAgIDwvc3Bhbj5cbiAgICAgICAgPHNwYW4gY2xhc3NOYW1lPXtzdHlsZXMucGxhY2VJY29ufT5cbiAgICAgICAgICA8SWNvbiBpbWc9e2ljb25JZH0gY29sb3I9XCJjdXJyZW50Q29sb3JcIiAvPlxuICAgICAgICA8L3NwYW4+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxGbGV4Q29sdW1uIGNsYXNzTmFtZT17c3R5bGVzLnRleHR9PlxuICAgICAgICA8VGV4dCB2YXJpYW50PVwidGV4dC14cy1ib2xkXCIgYXM9XCJwXCIgY2xhc3NOYW1lPXtzdHlsZXMubmFtZX0+XG4gICAgICAgICAge25hbWV9XG4gICAgICAgIDwvVGV4dD5cbiAgICAgICAgPFRleHQgdmFyaWFudD1cInRleHQteHNcIiBhcz1cInBcIiBjb2xvcj1cIndlYWtcIiBjbGFzc05hbWU9e3N0eWxlcy5hZGRyZXNzfT5cbiAgICAgICAgICB7YWRkcmVzc31cbiAgICAgICAgPC9UZXh0PlxuICAgICAgPC9GbGV4Q29sdW1uPlxuICAgICAgPEZsZXhSb3cgYWxpZ25JdGVtcz1cImNlbnRlclwiIGZsZXhTaHJpbms9ezB9PlxuICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgY2xhc3NOYW1lPXtzdHlsZXMuYWN0aW9uQnV0dG9ufVxuICAgICAgICAgIGFyaWEtbGFiZWw9e3QoJ2VkaXQtcGxhY2UtbmFtZScsIHsgbG5nOiBsYW5nLCBmYXZvdXJpdGUgfSl9XG4gICAgICAgICAgb25DbGljaz17b25FZGl0fVxuICAgICAgICA+XG4gICAgICAgICAgPEljb24gaW1nPVwiZWRpdFwiIGNvbG9yPVwiY3VycmVudENvbG9yXCIgLz5cbiAgICAgICAgPC9idXR0b24+XG4gICAgICAgIDxidXR0b25cbiAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICBjbGFzc05hbWU9e3N0eWxlcy5hY3Rpb25CdXR0b259XG4gICAgICAgICAgYXJpYS1sYWJlbD17dCgnZGVsZXRlLXBsYWNlLW5hbWUnLCB7IGxuZzogbGFuZywgZmF2b3VyaXRlIH0pfVxuICAgICAgICAgIG9uQ2xpY2s9e29uRGVsZXRlfVxuICAgICAgICA+XG4gICAgICAgICAgPEljb24gaW1nPVwidHJhc2hcIiBjb2xvcj1cImN1cnJlbnRDb2xvclwiIC8+XG4gICAgICAgIDwvYnV0dG9uPlxuICAgICAgPC9GbGV4Um93PlxuICAgIDwvbGk+XG4gICk7XG59XG5cbkZhdm91cml0ZUxpc3RJdGVtLnByb3BUeXBlcyA9IHtcbiAgZmF2b3VyaXRlOiBQcm9wVHlwZXMuc2hhcGUoe1xuICAgIGZhdm91cml0ZUlkOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgIG5hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgYWRkcmVzczogUHJvcFR5cGVzLnN0cmluZyxcbiAgICBzZWxlY3RlZEljb25JZDogUHJvcFR5cGVzLnN0cmluZyxcbiAgfSkuaXNSZXF1aXJlZCxcbiAgbGFuZzogUHJvcFR5cGVzLnN0cmluZy5pc1JlcXVpcmVkLFxuICBvbkVkaXQ6IFByb3BUeXBlcy5mdW5jLmlzUmVxdWlyZWQsXG4gIG9uRGVsZXRlOiBQcm9wVHlwZXMuZnVuYy5pc1JlcXVpcmVkLFxuICBvbk1vdmVVcDogUHJvcFR5cGVzLmZ1bmMsXG4gIG9uTW92ZURvd246IFByb3BUeXBlcy5mdW5jLFxuICBpbmRleDogUHJvcFR5cGVzLm51bWJlci5pc1JlcXVpcmVkLFxufTtcblxuZXhwb3J0IGRlZmF1bHQgRmF2b3VyaXRlTGlzdEl0ZW07XG4iLCJpbXBvcnQgeyB1c2VFZmZlY3QsIHVzZVJlZiwgdXNlU3RhdGUgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xuaW1wb3J0IHsgdXNlVHJhbnNsYXRpb24gfSBmcm9tICdyZWFjdC1pMThuZXh0JztcbmltcG9ydCB7IERyYWdEcm9wUHJvdmlkZXIgfSBmcm9tICdAZG5kLWtpdC9yZWFjdCc7XG5pbXBvcnQgaXNFbXB0eSBmcm9tICdsb2Rhc2gvaXNFbXB0eSc7XG5pbXBvcnQgaXNFcXVhbCBmcm9tICdsb2Rhc2gvaXNFcXVhbCc7XG5pbXBvcnQgb21pdCBmcm9tICdsb2Rhc2gvb21pdCc7XG5pbXBvcnQgeyBTcGlubmVyIH0gZnJvbSAnQGhzbC1maS9sb2FkaW5nLWluZGljYXRvcnMnO1xuaW1wb3J0IHsgTW9kYWwsIE1vZGFsQ29udGVudCB9IGZyb20gJ0Boc2wtZmkvZGlhbG9nJztcbmltcG9ydCBEaWFsb2dNb2RhbCBmcm9tICdAZGlnaXRyYW5zaXQtY29tcG9uZW50L2RpZ2l0cmFuc2l0LWNvbXBvbmVudC1kaWFsb2ctbW9kYWwnO1xuaW1wb3J0IEZhdm91cml0ZUxpc3RJdGVtIGZyb20gJy4vaGVscGVycy9GYXZvdXJpdGVMaXN0SXRlbSc7XG5pbXBvcnQgaTE4biBmcm9tICcuL2hlbHBlcnMvaTE4bic7XG5pbXBvcnQgc3R5bGVzIGZyb20gJy4vaGVscGVycy9zdHlsZXMuc2Nzcyc7XG5cbi8qKlxuICogQSBkaWFsb2cgZm9yIHJlb3JkZXJpbmcsIGVkaXRpbmcgYW5kIGRlbGV0aW5nIGZhdm91cml0ZSBwbGFjZXMsIGJ1aWx0IG9uXG4gKiB0aGUgSFNMIGRlc2lnbiBzeXN0ZW0ncyBNb2RhbC4gQ29sb3JzLCB0eXBvZ3JhcGh5IGFuZCB0aGUgbW9iaWxlL2Rlc2t0b3BcbiAqIGxheW91dCBhcmUgaGFuZGxlZCBieSB0aGUgZGVzaWduIHN5c3RlbSwgc28gdGhlIGRpYWxvZyBmb2xsb3dzIHRoZSBhY3RpdmVcbiAqIGRlcGxveW1lbnQncyB0aGVtZS5cbiAqXG4gKiBAZXhhbXBsZVxuICogPEZhdm91cml0ZUVkaXRpbmdNb2RhbFxuICogICBpc01vZGFsT3Blbj17bW9kYWxPcGVufVxuICogICBoYW5kbGVDbG9zZT17aGFuZGxlQ2xvc2V9XG4gKiAgIGZhdm91cml0ZXM9e2Zhdm91cml0ZXN9XG4gKiAgIHVwZGF0ZUZhdm91cml0ZXM9e29uVXBkYXRlRmF2b3VyaXRlc31cbiAqICAgZGVsZXRlRmF2b3VyaXRlPXtvbkRlbGV0ZUZhdm91cml0ZX1cbiAqICAgb25FZGl0U2VsZWN0ZWQ9e29uRWRpdFNlbGVjdGVkfVxuICogICBpc0xvYWRpbmc9e2ZhbHNlfVxuICogICBsYW5nPVwiZmlcIlxuICogLz5cbiAqL1xuZnVuY3Rpb24gRmF2b3VyaXRlRWRpdGluZ01vZGFsKHtcbiAgaXNNb2RhbE9wZW4sXG4gIGhhbmRsZUNsb3NlLFxuICB1cGRhdGVGYXZvdXJpdGVzLFxuICBkZWxldGVGYXZvdXJpdGUsXG4gIG9uRWRpdFNlbGVjdGVkLFxuICBmYXZvdXJpdGVzLFxuICBpc0xvYWRpbmcsXG4gIGxhbmcgPSAnZmknLFxufSkge1xuICBjb25zdCB7IHQgfSA9IHVzZVRyYW5zbGF0aW9uKCd0cmFuc2xhdGlvbicsIHsgaTE4biB9KTtcbiAgY29uc3QgW3NvdXJjZSwgc2V0U291cmNlXSA9IHVzZVN0YXRlKGZhdm91cml0ZXMpO1xuICBjb25zdCBbcmVvcmRlcmVkLCBzZXRSZW9yZGVyZWRdID0gdXNlU3RhdGUobnVsbCk7XG4gIGNvbnN0IFtzZWxlY3RlZEZhdm91cml0ZSwgc2V0U2VsZWN0ZWRGYXZvdXJpdGVdID0gdXNlU3RhdGUobnVsbCk7XG4gIGNvbnN0IHByZXZpb3VzRmF2b3VyaXRlcyA9IHVzZVJlZihmYXZvdXJpdGVzKTtcblxuICAvLyBEcm9wIHRoZSBsb2NhbCBvcmRlciB3aGVuIHRoZSBmYXZvdXJpdGVzIGNoYW5nZSBmcm9tIG91dHNpZGVcbiAgaWYgKCFpc0VxdWFsKHNvdXJjZSwgZmF2b3VyaXRlcykpIHtcbiAgICBzZXRTb3VyY2UoZmF2b3VyaXRlcyk7XG4gICAgc2V0UmVvcmRlcmVkKG51bGwpO1xuICB9XG4gIGNvbnN0IGl0ZW1zID0gcmVvcmRlcmVkIHx8IGZhdm91cml0ZXM7XG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAoXG4gICAgICBwcmV2aW91c0Zhdm91cml0ZXMuY3VycmVudCAhPT0gZmF2b3VyaXRlcyAmJlxuICAgICAgIWlzRXF1YWwocHJldmlvdXNGYXZvdXJpdGVzLmN1cnJlbnQsIGZhdm91cml0ZXMpICYmXG4gICAgICBpc0VtcHR5KGZhdm91cml0ZXMpXG4gICAgKSB7XG4gICAgICBoYW5kbGVDbG9zZSgpO1xuICAgIH1cbiAgICBwcmV2aW91c0Zhdm91cml0ZXMuY3VycmVudCA9IGZhdm91cml0ZXM7XG4gIH0sIFtmYXZvdXJpdGVzLCBoYW5kbGVDbG9zZV0pO1xuXG4gIGNvbnN0IG1vdmUgPSAoaW5kZXgsIGRpcmVjdGlvbikgPT4ge1xuICAgIGNvbnN0IGNvcHkgPSBbLi4uaXRlbXNdO1xuICAgIFtjb3B5W2luZGV4XSwgY29weVtpbmRleCArIGRpcmVjdGlvbl1dID0gW1xuICAgICAgY29weVtpbmRleCArIGRpcmVjdGlvbl0sXG4gICAgICBjb3B5W2luZGV4XSxcbiAgICBdO1xuICAgIHNldFJlb3JkZXJlZChjb3B5KTtcbiAgfTtcblxuICBjb25zdCBvbkRyYWdFbmQgPSBldmVudCA9PiB7XG4gICAgaWYgKGV2ZW50LmNhbmNlbGVkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IHsgaW5pdGlhbEluZGV4LCBpbmRleCB9ID0gZXZlbnQub3BlcmF0aW9uLnNvdXJjZT8uc29ydGFibGUgfHwge307XG4gICAgaWYgKGluaXRpYWxJbmRleCA9PT0gdW5kZWZpbmVkIHx8IGluaXRpYWxJbmRleCA9PT0gaW5kZXgpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgY29weSA9IFsuLi5pdGVtc107XG4gICAgY29uc3QgW21vdmVkXSA9IGNvcHkuc3BsaWNlKGluaXRpYWxJbmRleCwgMSk7XG4gICAgY29weS5zcGxpY2UoaW5kZXgsIDAsIG1vdmVkKTtcbiAgICBzZXRSZW9yZGVyZWQoY29weSk7XG4gIH07XG5cbiAgY29uc3QgY2xvc2VNb2RhbCA9ICgpID0+IHtcbiAgICBoYW5kbGVDbG9zZSgpO1xuICAgIGNvbnN0IG9taXR0ZWQgPSBpdGVtcy5tYXAoaXRlbSA9PiBvbWl0KGl0ZW0sIFsnY2hvc2VuJywgJ3NlbGVjdGVkJ10pKTtcbiAgICBpZiAoIWlzRXF1YWwob21pdHRlZCwgZmF2b3VyaXRlcykpIHtcbiAgICAgIHVwZGF0ZUZhdm91cml0ZXMob21pdHRlZCk7XG4gICAgfVxuICB9O1xuXG4gIGNvbnN0IGNsb3NlRGVsZXRlRGlhbG9nID0gKCkgPT4gc2V0U2VsZWN0ZWRGYXZvdXJpdGUobnVsbCk7XG5cbiAgcmV0dXJuIChcbiAgICA8PlxuICAgICAgPERpYWxvZ01vZGFsXG4gICAgICAgIGhlYWRlclRleHQ9e3QoJ2RlbGV0ZS1wbGFjZS1oZWFkZXInLCB7IGxuZzogbGFuZyB9KX1cbiAgICAgICAgaGFuZGxlQ2xvc2U9eygpID0+IHtcbiAgICAgICAgICBjbG9zZURlbGV0ZURpYWxvZygpO1xuICAgICAgICAgIGhhbmRsZUNsb3NlKCk7XG4gICAgICAgIH19XG4gICAgICAgIGlzTW9kYWxPcGVuPXtzZWxlY3RlZEZhdm91cml0ZSAhPT0gbnVsbH1cbiAgICAgICAgZGlhbG9nQ29udGVudD17XG4gICAgICAgICAgc2VsZWN0ZWRGYXZvdXJpdGVcbiAgICAgICAgICAgID8gYCR7c2VsZWN0ZWRGYXZvdXJpdGUubmFtZX06ICR7c2VsZWN0ZWRGYXZvdXJpdGUuYWRkcmVzc31gXG4gICAgICAgICAgICA6ICcnXG4gICAgICAgIH1cbiAgICAgICAgcHJpbWFyeUJ1dHRvblRleHQ9e3QoJ2RlbGV0ZScsIHsgbG5nOiBsYW5nIH0pfVxuICAgICAgICBwcmltYXJ5QnV0dG9uT25DbGljaz17KCkgPT4ge1xuICAgICAgICAgIGRlbGV0ZUZhdm91cml0ZShzZWxlY3RlZEZhdm91cml0ZSk7XG4gICAgICAgICAgY2xvc2VEZWxldGVEaWFsb2coKTtcbiAgICAgICAgfX1cbiAgICAgICAgc2Vjb25kYXJ5QnV0dG9uVGV4dD17dCgnY2FuY2VsJywgeyBsbmc6IGxhbmcgfSl9XG4gICAgICAgIHNlY29uZGFyeUJ1dHRvbk9uQ2xpY2s9e2Nsb3NlRGVsZXRlRGlhbG9nfVxuICAgICAgICBsYW5nPXtsYW5nfVxuICAgICAgLz5cbiAgICAgIDxNb2RhbFxuICAgICAgICBvcGVuPXtpc01vZGFsT3BlbiAmJiBzZWxlY3RlZEZhdm91cml0ZSA9PT0gbnVsbH1cbiAgICAgICAgb25PcGVuQ2hhbmdlPXtvcGVuID0+IHtcbiAgICAgICAgICBpZiAoIW9wZW4pIHtcbiAgICAgICAgICAgIGNsb3NlTW9kYWwoKTtcbiAgICAgICAgICB9XG4gICAgICAgIH19XG4gICAgICA+XG4gICAgICAgIDxNb2RhbENvbnRlbnRcbiAgICAgICAgICBsYW5nPXtsYW5nfVxuICAgICAgICAgIHRpdGxlPXt0KCdlZGl0LXBsYWNlcycsIHsgbG5nOiBsYW5nIH0pfVxuICAgICAgICAgIGNsYXNzTmFtZT17c3R5bGVzLm1vZGFsQ29udGVudH1cbiAgICAgICAgICBhcmlhLWRlc2NyaWJlZGJ5PXt1bmRlZmluZWR9XG4gICAgICAgID5cbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLmxpc3RDb250YWluZXJ9PlxuICAgICAgICAgICAgPERyYWdEcm9wUHJvdmlkZXIgb25EcmFnRW5kPXtvbkRyYWdFbmR9PlxuICAgICAgICAgICAgICA8dWwgY2xhc3NOYW1lPXtzdHlsZXMubGlzdH0+XG4gICAgICAgICAgICAgICAge2l0ZW1zLm1hcCgoZmF2b3VyaXRlLCBpbmRleCkgPT4gKFxuICAgICAgICAgICAgICAgICAgPEZhdm91cml0ZUxpc3RJdGVtXG4gICAgICAgICAgICAgICAgICAgIGtleT17ZmF2b3VyaXRlLmZhdm91cml0ZUlkfVxuICAgICAgICAgICAgICAgICAgICBpbmRleD17aW5kZXh9XG4gICAgICAgICAgICAgICAgICAgIGZhdm91cml0ZT17ZmF2b3VyaXRlfVxuICAgICAgICAgICAgICAgICAgICBsYW5nPXtsYW5nfVxuICAgICAgICAgICAgICAgICAgICBvbk1vdmVVcD17aW5kZXggPiAwID8gKCkgPT4gbW92ZShpbmRleCwgLTEpIDogbnVsbH1cbiAgICAgICAgICAgICAgICAgICAgb25Nb3ZlRG93bj17XG4gICAgICAgICAgICAgICAgICAgICAgaW5kZXggPCBpdGVtcy5sZW5ndGggLSAxID8gKCkgPT4gbW92ZShpbmRleCwgMSkgOiBudWxsXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgb25FZGl0PXsoKSA9PiBvbkVkaXRTZWxlY3RlZChmYXZvdXJpdGUpfVxuICAgICAgICAgICAgICAgICAgICBvbkRlbGV0ZT17KCkgPT4gc2V0U2VsZWN0ZWRGYXZvdXJpdGUoZmF2b3VyaXRlKX1cbiAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgKSl9XG4gICAgICAgICAgICAgIDwvdWw+XG4gICAgICAgICAgICA8L0RyYWdEcm9wUHJvdmlkZXI+XG4gICAgICAgICAgICB7aXNMb2FkaW5nICYmIChcbiAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy5vdmVybGF5fT5cbiAgICAgICAgICAgICAgICA8U3Bpbm5lciAvPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICl9XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvTW9kYWxDb250ZW50PlxuICAgICAgPC9Nb2RhbD5cbiAgICA8Lz5cbiAgKTtcbn1cblxuRmF2b3VyaXRlRWRpdGluZ01vZGFsLnByb3BUeXBlcyA9IHtcbiAgLyoqIFJlcXVpcmVkLiBXaGV0aGVyIHRoZSBkaWFsb2cgaXMgb3Blbi5cbiAgICogQHR5cGUge2Jvb2xlYW59ICovXG4gIGlzTW9kYWxPcGVuOiBQcm9wVHlwZXMuYm9vbC5pc1JlcXVpcmVkLFxuICAvKiogUmVxdWlyZWQuIENsb3NlIG1vZGFsLlxuICAgKiBAdHlwZSB7ZnVuY3Rpb259ICovXG4gIGhhbmRsZUNsb3NlOiBQcm9wVHlwZXMuZnVuYy5pc1JlcXVpcmVkLFxuICAvKiogUmVxdWlyZWQuIENhbGxlZCB3aXRoIHRoZSByZW9yZGVyZWQgZmF2b3VyaXRlcyB3aGVuIHRoZSBkaWFsb2cgaXMgY2xvc2VkLlxuICAgKiBAdHlwZSB7ZnVuY3Rpb259ICovXG4gIHVwZGF0ZUZhdm91cml0ZXM6IFByb3BUeXBlcy5mdW5jLmlzUmVxdWlyZWQsXG4gIC8qKiBSZXF1aXJlZC4gQ2FsbGVkIHdpdGggdGhlIGZhdm91cml0ZSB0aGUgdXNlciBjb25maXJtZWQgZGVsZXRpbmcuXG4gICAqIEB0eXBlIHtmdW5jdGlvbn0gKi9cbiAgZGVsZXRlRmF2b3VyaXRlOiBQcm9wVHlwZXMuZnVuYy5pc1JlcXVpcmVkLFxuICAvKiogUmVxdWlyZWQuIEZ1bmN0aW9uIHRoYXQgdGFrZXMgc2VsZWN0ZWQgZmF2b3VyaXRlIG9iamVjdCBhcyBwYXJhbWV0ZXIuXG4gICAqIEB0eXBlIHtmdW5jdGlvbn0gKi9cbiAgb25FZGl0U2VsZWN0ZWQ6IFByb3BUeXBlcy5mdW5jLmlzUmVxdWlyZWQsXG4gIC8qKiBSZXF1aXJlZC4gV2hldGhlciBhIHNhdmUgaXMgaW4gcHJvZ3Jlc3M7IHNob3dzIGEgc3Bpbm5lciBvdmVyIHRoZSBsaXN0LlxuICAgKiBAdHlwZSB7Ym9vbGVhbn0gKi9cbiAgaXNMb2FkaW5nOiBQcm9wVHlwZXMuYm9vbC5pc1JlcXVpcmVkLFxuICAvKiogUmVxdWlyZWQuXG4gICAqIEB0eXBlIHthcnJheTxvYmplY3Q+fVxuICAgKiBAcHJvcGVydHkge3N0cmluZ30gdHlwZVxuICAgKiBAcHJvcGVydHkge3N0cmluZ30gYWRkcmVzc1xuICAgKiBAcHJvcGVydHkge3N0cmluZ30gZ3Rmc0lkXG4gICAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBnaWRcbiAgICogQHByb3BlcnR5IHtudW1iZXJ9IGxhdFxuICAgKiBAcHJvcGVydHkge251bWJlcn0gbG9uXG4gICAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBuYW1lXG4gICAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBzZWxlY3RlZEljb25JZFxuICAgKiBAcHJvcGVydHkge3N0cmluZ30gZmF2b3VyaXRlSWRcbiAgICogQHByb3BlcnR5IHtzdHJpbmd9IGxheWVyXG4gICAqL1xuICBmYXZvdXJpdGVzOiBQcm9wVHlwZXMuYXJyYXlPZihcbiAgICBQcm9wVHlwZXMuc2hhcGUoe1xuICAgICAgdHlwZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgICAgIGFkZHJlc3M6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgICBndGZzSWQ6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgICBnaWQ6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgICBsYXQ6IFByb3BUeXBlcy5udW1iZXIsXG4gICAgICBsb246IFByb3BUeXBlcy5udW1iZXIsXG4gICAgICBuYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgICAgc2VsZWN0ZWRJY29uSWQ6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgICBmYXZvdXJpdGVJZDogUHJvcFR5cGVzLnN0cmluZyxcbiAgICAgIGxheWVyOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgIH0pLFxuICApLmlzUmVxdWlyZWQsXG4gIC8qKiBPcHRpb25hbC4gTGFuZ3VhZ2UsIGZpLCBlbiBvciBzdi4gRGVmYXVsdHMgdG8gZmkuXG4gICAqIEB0eXBlIHtzdHJpbmd9ICovXG4gIGxhbmc6IFByb3BUeXBlcy5zdHJpbmcsXG59O1xuXG5leHBvcnQgZGVmYXVsdCBGYXZvdXJpdGVFZGl0aW5nTW9kYWw7XG4iXSwibmFtZXMiOlsiZ2V0TG9jYWxhZG1pbiIsInN1Z2dlc3Rpb24iLCJsb2NhbGFkbWluIiwiYWRkcmVzcyIsImxhc3RJbmRleE9mIiwibGVuZ3RoIiwic3Vic3RyaW5nIiwiZ2V0U3RvcENvZGUiLCJpZCIsImNvZGUiLCJ1bmRlZmluZWQiLCJpbmRleE9mIiwiZm9ybWF0RmF2b3VyaXRlUGxhY2VMYWJlbCIsIm5hbWUiLCJzcGxpdCIsInJlcGxhY2UiLCJSZWdFeHAiLCJlc2NhcGVSZWdFeHAiLCJtZW1vaXplIiwicGxhaW4iLCJsYXllciIsImxhYmVsSWQiLCJzaG9ydE5hbWUiLCJndGZzSWQiLCJtb2RlIiwidG9Mb3dlckNhc2UiLCJsb25nTmFtZSIsImFnZW5jeSIsImxhYmVsIiwiaXRlbSIsImkiLCJjbG9uZURlZXAiLCJ0cmFuc2xhdGlvbnMiLCJkZSIsInRyYW5zbGF0aW9uIiwiY2FuY2VsIiwiZGVsZXRlIiwiZW4iLCJkb3duIiwidXAiLCJmaSIsInBsIiwic3YiLCJpMThuIiwiY3JlYXRlSW5zdGFuY2UiLCJmYWxsYmFja0xuZyIsInJlc291cmNlcyIsImRlZmF1bHROUyIsInJlYWN0IiwidXNlU3VzcGVuc2UiLCJpbml0IiwiZ2V0SWNvbklkIiwic2VsZWN0ZWRJY29uSWQiLCJwcmVmaXhQb3MiLCJGYXZvdXJpdGVMaXN0SXRlbSIsImZhdm91cml0ZSIsImxhbmciLCJvbk1vdmVVcCIsIm9uTW92ZURvd24iLCJvbkVkaXQiLCJvbkRlbGV0ZSIsImluZGV4IiwidCIsInVzZVRyYW5zbGF0aW9uIiwicmVmIiwidXNlU29ydGFibGUiLCJmYXZvdXJpdGVJZCIsImljb25JZCIsIl9qc3hzIiwiY2xhc3NOYW1lIiwic3R5bGVzIiwiY2hpbGRyZW4iLCJkcmFnSGFuZGxlIiwiX2pzeCIsInR5cGUiLCJhcnJvdyIsImxuZyIsIm9uQ2xpY2siLCJlbGxpcHNpcyIsIkljb24iLCJpbWciLCJjb2xvciIsInBsYWNlSWNvbiIsIkZsZXhDb2x1bW4iLCJ0ZXh0IiwiVGV4dCIsInZhcmlhbnQiLCJhcyIsIkZsZXhSb3ciLCJhbGlnbkl0ZW1zIiwiZmxleFNocmluayIsImFjdGlvbkJ1dHRvbiIsInByb2Nlc3MiLCJlbnYiLCJOT0RFX0VOViIsInByb3BUeXBlcyIsIlByb3BUeXBlcyIsInNoYXBlIiwic3RyaW5nIiwiaXNSZXF1aXJlZCIsImZ1bmMiLCJudW1iZXIiLCJGYXZvdXJpdGVFZGl0aW5nTW9kYWwiLCJpc01vZGFsT3BlbiIsImhhbmRsZUNsb3NlIiwidXBkYXRlRmF2b3VyaXRlcyIsImRlbGV0ZUZhdm91cml0ZSIsIm9uRWRpdFNlbGVjdGVkIiwiZmF2b3VyaXRlcyIsImlzTG9hZGluZyIsInNvdXJjZSIsInNldFNvdXJjZSIsInVzZVN0YXRlIiwicmVvcmRlcmVkIiwic2V0UmVvcmRlcmVkIiwic2VsZWN0ZWRGYXZvdXJpdGUiLCJzZXRTZWxlY3RlZEZhdm91cml0ZSIsInByZXZpb3VzRmF2b3VyaXRlcyIsInVzZVJlZiIsImlzRXF1YWwiLCJpdGVtcyIsInVzZUVmZmVjdCIsImN1cnJlbnQiLCJpc0VtcHR5IiwibW92ZSIsImRpcmVjdGlvbiIsImNvcHkiLCJvbkRyYWdFbmQiLCJldmVudCIsImNhbmNlbGVkIiwiaW5pdGlhbEluZGV4Iiwib3BlcmF0aW9uIiwic29ydGFibGUiLCJtb3ZlZCIsInNwbGljZSIsImNsb3NlTW9kYWwiLCJvbWl0dGVkIiwibWFwIiwib21pdCIsImNsb3NlRGVsZXRlRGlhbG9nIiwiX0ZyYWdtZW50IiwiRGlhbG9nTW9kYWwiLCJoZWFkZXJUZXh0IiwiZGlhbG9nQ29udGVudCIsInByaW1hcnlCdXR0b25UZXh0IiwicHJpbWFyeUJ1dHRvbk9uQ2xpY2siLCJzZWNvbmRhcnlCdXR0b25UZXh0Iiwic2Vjb25kYXJ5QnV0dG9uT25DbGljayIsIk1vZGFsIiwib3BlbiIsIm9uT3BlbkNoYW5nZSIsIk1vZGFsQ29udGVudCIsInRpdGxlIiwibW9kYWxDb250ZW50IiwibGlzdENvbnRhaW5lciIsIkRyYWdEcm9wUHJvdmlkZXIiLCJsaXN0Iiwib3ZlcmxheSIsIlNwaW5uZXIiLCJib29sIiwiYXJyYXlPZiIsImdpZCIsImxhdCIsImxvbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7O0VBTUE7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTs7RUFFQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0EsTUFBTUEsYUFBYSxHQUFHQyxVQUFVLElBQzlCQSxVQUFVLENBQUNDLFVBQVUsSUFDckJELFVBQVUsQ0FBQ0MsVUFBVSxJQUNwQkQsVUFBVSxDQUFDRSxPQUFPLElBQ2pCRixVQUFVLENBQUNFLE9BQU8sQ0FBQ0MsV0FBVyxDQUFDLEdBQUcsQ0FBQyxHQUFHSCxVQUFVLENBQUNFLE9BQU8sQ0FBQ0Us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
|
|
507
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguZGV2ZWxvcG1lbnQuY2pzIiwic291cmNlcyI6WyIuLi8uLi8uLi9kaWdpdHJhbnNpdC1zZWFyY2gtdXRpbC91bmlxLWJ5LWxhYmVsL2luZGV4LmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3N0eWxlLWluamVjdC9kaXN0L3N0eWxlLWluamVjdC5lcy5qcyIsIi4uL3NyYy9oZWxwZXJzL3RyYW5zbGF0aW9ucy5qcyIsIi4uL3NyYy9oZWxwZXJzL2kxOG4uanMiLCIuLi9zcmMvaGVscGVycy9GYXZvdXJpdGVMaXN0SXRlbS5qc3giLCIuLi9zcmMvaW5kZXguanN4Il0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB1bmlxV2l0aCBmcm9tICdsb2Rhc2gvdW5pcVdpdGgnO1xuaW1wb3J0IGlzRXF1YWwgZnJvbSAnbG9kYXNoL2lzRXF1YWwnO1xuaW1wb3J0IG1lbW9pemUgZnJvbSAnbG9kYXNoL21lbW9pemUnO1xuaW1wb3J0IGVzY2FwZVJlZ0V4cCBmcm9tICdsb2Rhc2gvZXNjYXBlUmVnRXhwJztcbmltcG9ydCBjbG9uZURlZXAgZnJvbSAnbG9kYXNoL2Nsb25lRGVlcCc7XG5cbi8qKlxuICogTG9jYXRpb24gcHJvcGVydGllcy5cbiAqIEB0eXBlZGVmIHtMb2NhdGlvblByb3BlcnRpZXN9XG4gKiBAcHJvcGVydHkge3N0cmluZ30gbGF5ZXIgU3VnZ2VzdGlvbiBsYXllci5cbiAqIEBwcm9wZXJ0eSB7bGF0fSBbbnVtYmVyXVxuICogQHByb3BlcnR5IHtsb259IFtudW1iZXJdXG4gKiBAcHJvcGVydHkge3N0cmluZ30gYWRkcmVzcyBBZGRyZXNzLlxuICovXG5cbi8qKlxuICogUmV0dXJucyBsb2NhbGFkbWluIChjaXR5IG5hbWUpIGZvciBzdWdnZXN0aW9uc1xuICpcbiAqIEBuYW1lIGdldExvY2FsYWRtaW5cbiAqIEBwYXJhbSB7T2JqZWN0fSBzdWdnZXN0aW9uIHN1Z2dlc3Rpb24ncyBwcm9wZXJ0aWVzIGZyb20gZ2VvY29kaW5nIG9yIGEgZmF2b3VyaXRlIHN0b3Avc3RhdGlvbi5cbiAqIEV4cGVjdHMgbGFzdCBwYXJ0IG9mIGFuIGFkZHJlc3MgKGFmdGVyICcsJykgdG8gY29udGFpbiB0aGUgY2l0eSBuYW1lIG9mIHRoZSBzdWdnZXN0aW9uIGxvY2F0aW9uLlxuICogQHJldHVybnMge1N0cmluZ30gIENpdHkgbmFtZSBvciBlbXB0eSBzdHJpbmdcbiAqL1xuY29uc3QgZ2V0TG9jYWxhZG1pbiA9IHN1Z2dlc3Rpb24gPT5cbiAgc3VnZ2VzdGlvbi5sb2NhbGFkbWluIHx8XG4gIHN1Z2dlc3Rpb24ubG9jYWxhZG1pbiB8fFxuICAoc3VnZ2VzdGlvbi5hZGRyZXNzICYmXG4gICAgc3VnZ2VzdGlvbi5hZGRyZXNzLmxhc3RJbmRleE9mKCcsJykgPCBzdWdnZXN0aW9uLmFkZHJlc3MubGVuZ3RoIC0gMiAmJlxuICAgIHN1Z2dlc3Rpb24uYWRkcmVzcy5zdWJzdHJpbmcoc3VnZ2VzdGlvbi5hZGRyZXNzLmxhc3RJbmRleE9mKCcsJykgKyAyKSkgfHxcbiAgJyc7XG5cbmV4cG9ydCBjb25zdCBnZXRTdG9wQ29kZSA9ICh7IGlkLCBjb2RlIH0pID0+IHtcbiAgaWYgKGNvZGUpIHtcbiAgICByZXR1cm4gY29kZTtcbiAgfVxuICBpZiAoXG4gICAgaWQgPT09IHVuZGVmaW5lZCB8fFxuICAgIHR5cGVvZiBpZC5pbmRleE9mID09PSAndW5kZWZpbmVkJyB8fFxuICAgIGlkLmluZGV4T2YoJyMnKSA9PT0gLTFcbiAgKSB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuICAvLyBpZCBmcm9tIHBlbGlhc1xuICByZXR1cm4gaWQuc3Vic3RyaW5nKGlkLmluZGV4T2YoJyMnKSArIDEpO1xufTtcblxuZXhwb3J0IGNvbnN0IGZvcm1hdEZhdm91cml0ZVBsYWNlTGFiZWwgPSAobmFtZSwgYWRkcmVzcykgPT4gW1xuICBuYW1lIHx8IChhZGRyZXNzICYmIGFkZHJlc3Muc3BsaXQoJywnKVswXSksXG4gIHR5cGVvZiBhZGRyZXNzID09PSAnc3RyaW5nJ1xuICAgID8gYWRkcmVzcy5yZXBsYWNlKG5ldyBSZWdFeHAoYCR7ZXNjYXBlUmVnRXhwKG5hbWUpfShbICxdfCQpK2ApLCAnJylcbiAgICA6ICcnLFxuXTtcblxuLyoqXG4gKiBGb3JtYXQgc3VnZ2VzdGlvbi1wYWlyIFtuYW1lLCBhZGRyZXNzXSBieSBgc3VnZ2VzdGlvbi5sYXllcmAuXG4gKlxuICogQG5hbWUgZ2V0TmFtZUxhYmVsXG4gKiBAcGFyYW0ge0xvY2F0aW9uUHJvcGVydGllc30gc3VnZ2VzdGlvblxuICogQHBhcmFtIHtib29sZWFufSBbcGxhaW5dXG4gKlxuICogQHJldHVybnMge0FycmF5LjxzdHJpbmc+fSBGb3JtYXR0ZWQgbGFiZWwuXG4gKi9cbmV4cG9ydCBjb25zdCBnZXROYW1lTGFiZWwgPSBtZW1vaXplKFxuICAoc3VnZ2VzdGlvbiwgcGxhaW4gPSBmYWxzZSkgPT4ge1xuICAgIHN3aXRjaCAoc3VnZ2VzdGlvbi5sYXllcikge1xuICAgICAgY2FzZSAnY3VycmVudFBvc2l0aW9uJzpcbiAgICAgICAgcmV0dXJuIFtzdWdnZXN0aW9uLmxhYmVsSWQsIHN1Z2dlc3Rpb24uYWRkcmVzc107XG4gICAgICBjYXNlICdzZWxlY3RGcm9tTWFwJzpcbiAgICAgIGNhc2UgJ293bkxvY2F0aW9ucyc6XG4gICAgICBjYXNlICdiYWNrJzpcbiAgICAgICAgcmV0dXJuIFtzdWdnZXN0aW9uLmxhYmVsSWRdO1xuICAgICAgY2FzZSAnZmF2b3VyaXRlUGxhY2UnOlxuICAgICAgICByZXR1cm4gZm9ybWF0RmF2b3VyaXRlUGxhY2VMYWJlbChzdWdnZXN0aW9uLm5hbWUsIHN1Z2dlc3Rpb24uYWRkcmVzcyk7XG4gICAgICBjYXNlICdmYXZvdXJpdGVWZWhpY2xlUmVudGFsU3RhdGlvbic6XG4gICAgICBjYXNlICdiaWtlc3RhdGlvbic6XG4gICAgICAgIHJldHVybiBbc3VnZ2VzdGlvbi5uYW1lXTtcbiAgICAgIGNhc2UgJ2Zhdm91cml0ZVJvdXRlJzpcbiAgICAgIGNhc2UgJ3JvdXRlLUJVUyc6XG4gICAgICBjYXNlICdyb3V0ZS1UUkFNJzpcbiAgICAgIGNhc2UgJ3JvdXRlLVJBSUwnOlxuICAgICAgY2FzZSAncm91dGUtU1VCV0FZJzpcbiAgICAgIGNhc2UgJ3JvdXRlLUZFUlJZJzpcbiAgICAgIGNhc2UgJ3JvdXRlLUZVTklDVUxBUic6XG4gICAgICBjYXNlICdyb3V0ZS1BSVJQTEFORSc6XG4gICAgICAgIHJldHVybiAhcGxhaW4gJiYgc3VnZ2VzdGlvbi5zaG9ydE5hbWVcbiAgICAgICAgICA/IFtcbiAgICAgICAgICAgICAgc3VnZ2VzdGlvbi5ndGZzSWQsXG4gICAgICAgICAgICAgIHN1Z2dlc3Rpb24ubW9kZS50b0xvd2VyQ2FzZSgpLFxuICAgICAgICAgICAgICBzdWdnZXN0aW9uLmxvbmdOYW1lLFxuICAgICAgICAgICAgXVxuICAgICAgICAgIDogW1xuICAgICAgICAgICAgICBzdWdnZXN0aW9uLnNob3J0TmFtZSxcbiAgICAgICAgICAgICAgc3VnZ2VzdGlvbi5sb25nTmFtZSxcbiAgICAgICAgICAgICAgc3VnZ2VzdGlvbi5hZ2VuY3kgPyBzdWdnZXN0aW9uLmFnZW5jeS5uYW1lIDogdW5kZWZpbmVkLFxuICAgICAgICAgICAgXTtcbiAgICAgIGNhc2UgJ3ZlbnVlJzpcbiAgICAgIGNhc2UgJ2FkZHJlc3MnOlxuICAgICAgY2FzZSAnc3RyZWV0JzpcbiAgICAgICAgcmV0dXJuIFtcbiAgICAgICAgICBzdWdnZXN0aW9uLm5hbWUsXG4gICAgICAgICAgc3VnZ2VzdGlvbi5sYWJlbC5yZXBsYWNlKFxuICAgICAgICAgICAgbmV3IFJlZ0V4cChgJHtlc2NhcGVSZWdFeHAoc3VnZ2VzdGlvbi5uYW1lKX0oLCk/KCApP2ApLFxuICAgICAgICAgICAgJycsXG4gICAgICAgICAgKSxcbiAgICAgICAgXTtcbiAgICAgIGNhc2UgJ2Zhdm91cml0ZVN0b3AnOlxuICAgICAgY2FzZSAnc3RvcCc6XG4gICAgICAgIHJldHVybiBwbGFpblxuICAgICAgICAgID8gW1xuICAgICAgICAgICAgICBzdWdnZXN0aW9uLm5hbWUgfHxcbiAgICAgICAgICAgICAgICBzdWdnZXN0aW9uLmxhYmVsIHx8XG4gICAgICAgICAgICAgICAgKHN1Z2dlc3Rpb24uYWRkcmVzcyAmJiBzdWdnZXN0aW9uLmFkZHJlc3Muc3BsaXQoJywnKVswXSksXG4gICAgICAgICAgICAgIGdldExvY2FsYWRtaW4oc3VnZ2VzdGlvbiksXG4gICAgICAgICAgICBdXG4gICAgICAgICAgOiBbXG4gICAgICAgICAgICAgIHN1Z2dlc3Rpb24ubmFtZSxcbiAgICAgICAgICAgICAgc3VnZ2VzdGlvbi5pZCxcbiAgICAgICAgICAgICAgZ2V0U3RvcENvZGUoc3VnZ2VzdGlvbiksXG4gICAgICAgICAgICAgIGdldExvY2FsYWRtaW4oc3VnZ2VzdGlvbiksXG4gICAgICAgICAgICBdO1xuICAgICAgY2FzZSAnZmF2b3VyaXRlU3RhdGlvbic6XG4gICAgICBjYXNlICdzdGF0aW9uJzpcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiBbXG4gICAgICAgICAgc3VnZ2VzdGlvbi5uYW1lIHx8XG4gICAgICAgICAgICBzdWdnZXN0aW9uLmxhYmVsIHx8XG4gICAgICAgICAgICAoc3VnZ2VzdGlvbi5hZGRyZXNzICYmIHN1Z2dlc3Rpb24uYWRkcmVzcy5zcGxpdCgnLCcpWzBdKSxcbiAgICAgICAgICBnZXRMb2NhbGFkbWluKHN1Z2dlc3Rpb24pLFxuICAgICAgICBdO1xuICAgIH1cbiAgfSxcbiAgKGl0ZW0sIHBsYWluKSA9PiB7XG4gICAgY29uc3QgaSA9IGNsb25lRGVlcChpdGVtKTtcbiAgICBpLnBsYWluID0gcGxhaW47XG4gICAgcmV0dXJuIGk7XG4gIH0sXG4pO1xuXG4vKipcbiAqIENoZWNrcyB0aGF0IGZlYXR1cmVzIGFyZSB1bmlxdWUgYnkgbGFiZWxcbiAqXG4gKiBAbmFtZSB1bmlxQnlMYWJlbFxuICogQHBhcmFtIHtBcnJheX0gZmVhdHVyZXMgQXJyYXkgb2YgZmVhdHVyZXNcbiAqIEByZXR1cm5zIHtBcnJheX0gIEFycmF5IG9mIHVuaXF1ZSBmZWF0dXJlc1xuICogQGV4YW1wbGVcbiAqIGRpZ2l0cmFuc2l0LXNlYXJjaC11dGlsLnVuaXFCeUxhYmVsKGZlYXR1cmVzKTtcbiAqIC8vPSBBcnJheSgyKVxuICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiB1bmlxQnlMYWJlbChmZWF0dXJlcykge1xuICByZXR1cm4gdW5pcVdpdGgoZmVhdHVyZXMsIChmZWF0MSwgZmVhdDIpID0+IHtcbiAgICBpZiAoZmVhdDEudHlwZSA9PT0gJ0Z1dHVyZVJvdXRlJyB8fCBmZWF0Mi50eXBlID09PSAnRnV0dXJlUm91dGUnKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHJldHVybiAoXG4gICAgICBpc0VxdWFsKGdldE5hbWVMYWJlbChmZWF0MS5wcm9wZXJ0aWVzKSwgZ2V0TmFtZUxhYmVsKGZlYXQyLnByb3BlcnRpZXMpKSAmJlxuICAgICAgZmVhdDEucHJvcGVydGllcy5sYXllciA9PT0gZmVhdDIucHJvcGVydGllcy5sYXllclxuICAgICk7XG4gIH0pO1xufVxuIiwiZnVuY3Rpb24gc3R5bGVJbmplY3QoY3NzLCByZWYpIHtcbiAgaWYgKCByZWYgPT09IHZvaWQgMCApIHJlZiA9IHt9O1xuICB2YXIgaW5zZXJ0QXQgPSByZWYuaW5zZXJ0QXQ7XG5cbiAgaWYgKCFjc3MgfHwgdHlwZW9mIGRvY3VtZW50ID09PSAndW5kZWZpbmVkJykgeyByZXR1cm47IH1cblxuICB2YXIgaGVhZCA9IGRvY3VtZW50LmhlYWQgfHwgZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ2hlYWQnKVswXTtcbiAgdmFyIHN0eWxlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc3R5bGUnKTtcbiAgc3R5bGUudHlwZSA9ICd0ZXh0L2Nzcyc7XG5cbiAgaWYgKGluc2VydEF0ID09PSAndG9wJykge1xuICAgIGlmIChoZWFkLmZpcnN0Q2hpbGQpIHtcbiAgICAgIGhlYWQuaW5zZXJ0QmVmb3JlKHN0eWxlLCBoZWFkLmZpcnN0Q2hpbGQpO1xuICAgIH0gZWxzZSB7XG4gICAgICBoZWFkLmFwcGVuZENoaWxkKHN0eWxlKTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgaGVhZC5hcHBlbmRDaGlsZChzdHlsZSk7XG4gIH1cblxuICBpZiAoc3R5bGUuc3R5bGVTaGVldCkge1xuICAgIHN0eWxlLnN0eWxlU2hlZXQuY3NzVGV4dCA9IGNzcztcbiAgfSBlbHNlIHtcbiAgICBzdHlsZS5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShjc3MpKTtcbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBzdHlsZUluamVjdDtcbiIsIi8qIGVzbGludCBzb3J0LWtleXM6IFwiZXJyb3JcIiAqL1xuY29uc3QgdHJhbnNsYXRpb25zID0ge1xuICBkZToge1xuICAgIHRyYW5zbGF0aW9uOiB7XG4gICAgICBjYW5jZWw6ICdBYmJyZWNoZW4nLFxuICAgICAgZGVsZXRlOiAnTMO2c2NoZW4nLFxuICAgICAgJ2RlbGV0ZS1wbGFjZS1oZWFkZXInOiAnV29sbGVuIFNpZSBkZW4gRmF2b3JpdGVuIGzDtnNjaGVuPycsXG4gICAgICAnZGVsZXRlLXBsYWNlLW5hbWUnOiAnTMO2c2NoZSBGYXZvcml0OiB7e2Zhdm91cml0ZS5uYW1lfX0nLFxuICAgICAgJ2VkaXQtcGxhY2UtbmFtZSc6ICdCZWFyYmVpdGUgRmF2b3JpdDoge3tmYXZvdXJpdGUubmFtZX19JyxcbiAgICAgICdlZGl0LXBsYWNlcyc6ICdCZWFyYmVpdGUgRmF2b3JpdGVuJyxcbiAgICB9LFxuICB9LFxuICBlbjoge1xuICAgIHRyYW5zbGF0aW9uOiB7XG4gICAgICBjYW5jZWw6ICdDYW5jZWwnLFxuICAgICAgZGVsZXRlOiAnRGVsZXRlJyxcbiAgICAgICdkZWxldGUtcGxhY2UtaGVhZGVyJzogJ0RvIHlvdSB3YW50IHRvIGRlbGV0ZSB0aGUgcGxhY2U/JyxcbiAgICAgICdkZWxldGUtcGxhY2UtbmFtZSc6ICdEZWxldGUgcGxhY2U6IHt7ZmF2b3VyaXRlLm5hbWV9fScsXG4gICAgICBkb3duOiAnTW92ZSBmYXZvdXJpdGUgZG93bicsXG4gICAgICAnZWRpdC1wbGFjZS1uYW1lJzogJ0VkaXQgcGxhY2U6IHt7ZmF2b3VyaXRlLm5hbWV9fScsXG4gICAgICAnZWRpdC1wbGFjZXMnOiAnRWRpdCBwbGFjZXMnLFxuICAgICAgdXA6ICdNb3ZlIGZhdm91cml0ZSB1cCcsXG4gICAgfSxcbiAgfSxcbiAgZmk6IHtcbiAgICB0cmFuc2xhdGlvbjoge1xuICAgICAgY2FuY2VsOiAnUGVydXV0YScsXG4gICAgICBkZWxldGU6ICdQb2lzdGEnLFxuICAgICAgJ2RlbGV0ZS1wbGFjZS1oZWFkZXInOiAnSGFsdWF0a28gcG9pc3RhYSBwYWlrYW4/JyxcbiAgICAgICdkZWxldGUtcGxhY2UtbmFtZSc6ICdQb2lzdGEgcGFpa2thOiB7e2Zhdm91cml0ZS5uYW1lfX0nLFxuICAgICAgZG93bjogJ1NpaXJyw6Qgc3Vvc2lra2lzaWphaW50aWEgYWxhc3DDpGluJyxcbiAgICAgICdlZGl0LXBsYWNlLW5hbWUnOiAnTXVva2thYSBwYWlra2FhOiB7e2Zhdm91cml0ZS5uYW1lfX0nLFxuICAgICAgJ2VkaXQtcGxhY2VzJzogJ011b2trYWEgcGFpa2tvamEnLFxuICAgICAgdXA6ICdTaWlycsOkIHN1b3Npa2tpc2lqYWludGlhIHlsw7Zww6RpbicsXG4gICAgfSxcbiAgfSxcbiAgcGw6IHtcbiAgICB0cmFuc2xhdGlvbjoge1xuICAgICAgY2FuY2VsOiAnQW51bHVqJyxcbiAgICAgIGRlbGV0ZTogJ1VzdcWEJyxcbiAgICAgICdkZWxldGUtcGxhY2UtaGVhZGVyJzogJ0N6eSBuYSBwZXdubyBjaGNlc3ogdXN1bsSFxIcgdG8gbWllanNjZT8nLFxuICAgICAgJ2RlbGV0ZS1wbGFjZS1uYW1lJzogJ1VzdcWEIG1pZWpzY2U6IHt7ZmF2b3VyaXRlLm5hbWV9fScsXG4gICAgICBkb3duOiAnUHJ6ZW5pZcWbIHVsdWJpb25lIG5pxbxlaicsXG4gICAgICAnZWRpdC1wbGFjZS1uYW1lJzogJ0VkeXR1aiBtaWVqc2NlOiB7e2Zhdm91cml0ZS5uYW1lfX0nLFxuICAgICAgJ2VkaXQtcGxhY2VzJzogJ0VkeXR1aiBtaWVqc2NhJyxcbiAgICAgIHVwOiAnUHJ6ZW5pZcWbIHVsdWJpb25lIHd5xbxlaicsXG4gICAgfSxcbiAgfSxcbiAgc3Y6IHtcbiAgICB0cmFuc2xhdGlvbjoge1xuICAgICAgY2FuY2VsOiAnQXZicnl0JyxcbiAgICAgIGRlbGV0ZTogJ1RhIGJvcnQnLFxuICAgICAgJ2RlbGV0ZS1wbGFjZS1oZWFkZXInOiAnVmlsbCBkdSB0YSBib3J0IHBsYXRzZW4/JyxcbiAgICAgICdkZWxldGUtcGxhY2UtbmFtZSc6ICdUYSBib3J0IHBsYXRzZW46IHt7ZmF2b3VyaXRlLm5hbWV9fScsXG4gICAgICBkb3duOiAnRmx5dHRhIGZhdm9yaXRlbiBuZWTDpXQnLFxuICAgICAgJ2VkaXQtcGxhY2UtbmFtZSc6ICdFZGl0IHBsYWNlOiB7e2Zhdm91cml0ZS5uYW1lfX0nLFxuICAgICAgJ2VkaXQtcGxhY2VzJzogJ1JlZGlnZXJhIHBsYXRzZXInLFxuICAgICAgdXA6ICdGbHl0dGEgZmF2b3JpdGVuIHVwcMOldCcsXG4gICAgfSxcbiAgfSxcbn07XG5cbmV4cG9ydCBkZWZhdWx0IHRyYW5zbGF0aW9ucztcbiIsImltcG9ydCB7IGNyZWF0ZUluc3RhbmNlIH0gZnJvbSAnaTE4bmV4dCc7XG5pbXBvcnQgdHJhbnNsYXRpb25zIGZyb20gJy4vdHJhbnNsYXRpb25zJztcblxuY29uc3QgaTE4biA9IGNyZWF0ZUluc3RhbmNlKHtcbiAgZmFsbGJhY2tMbmc6ICdmaScsXG4gIC8vIGRlYnVnOiB0cnVlLFxuICByZXNvdXJjZXM6IHRyYW5zbGF0aW9ucyxcbiAgZGVmYXVsdE5TOiAndHJhbnNsYXRpb24nLFxuICByZWFjdDoge1xuICAgIHVzZVN1c3BlbnNlOiB0cnVlLFxuICB9LFxufSk7XG5cbmkxOG4uaW5pdCgpO1xuXG5leHBvcnQgZGVmYXVsdCBpMThuO1xuIiwiaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbmltcG9ydCB7IHVzZVRyYW5zbGF0aW9uIH0gZnJvbSAncmVhY3QtaTE4bmV4dCc7XG5pbXBvcnQgeyBGbGV4Q29sdW1uLCBGbGV4Um93LCBUZXh0IH0gZnJvbSAnQGhzbC1maS9sYXlvdXQtcHJpbWl0aXZlcyc7XG5pbXBvcnQgeyB1c2VTb3J0YWJsZSB9IGZyb20gJ0BkbmQta2l0L3JlYWN0L3NvcnRhYmxlJztcbmltcG9ydCBJY29uIGZyb20gJ0BkaWdpdHJhbnNpdC1jb21wb25lbnQvZGlnaXRyYW5zaXQtY29tcG9uZW50LWljb24nO1xuaW1wb3J0IHsgZm9ybWF0RmF2b3VyaXRlUGxhY2VMYWJlbCB9IGZyb20gJ0BkaWdpdHJhbnNpdC1zZWFyY2gtdXRpbC9kaWdpdHJhbnNpdC1zZWFyY2gtdXRpbC11bmlxLWJ5LWxhYmVsJztcbmltcG9ydCBzdHlsZXMgZnJvbSAnLi9zdHlsZXMuc2Nzcyc7XG5pbXBvcnQgaTE4biBmcm9tICcuL2kxOG4nO1xuXG5jb25zdCBnZXRJY29uSWQgPSBzZWxlY3RlZEljb25JZCA9PiB7XG4gIGNvbnN0IHByZWZpeFBvcyA9IHNlbGVjdGVkSWNvbklkID8gc2VsZWN0ZWRJY29uSWQuaW5kZXhPZignaWNvbl8nKSA6IC0xO1xuICByZXR1cm4gcHJlZml4UG9zID4gMCA/IHNlbGVjdGVkSWNvbklkLnN1YnN0cmluZyhwcmVmaXhQb3MgKyA1KSA6ICdwbGFjZSc7XG59O1xuXG4vKipcbiAqIE9uZSByb3cgb2YgdGhlIGZhdm91cml0ZXMgbGlzdC4gVGhlIHZpc3VhbGx5IGhpZGRlbiBhcnJvdyBidXR0b25zIGFyZSBhXG4gKiBrZXlib2FyZCBhbHRlcm5hdGl2ZSB0byBkcmFnZ2luZy5cbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gRmF2b3VyaXRlTGlzdEl0ZW0oe1xuICBmYXZvdXJpdGUsXG4gIGxhbmcsXG4gIG9uTW92ZVVwID0gbnVsbCxcbiAgb25Nb3ZlRG93biA9IG51bGwsXG4gIG9uRWRpdCxcbiAgb25EZWxldGUsXG4gIGluZGV4LFxufSkge1xuICBjb25zdCB7IHQgfSA9IHVzZVRyYW5zbGF0aW9uKCd0cmFuc2xhdGlvbicsIHsgaTE4biB9KTtcbiAgY29uc3QgeyByZWYgfSA9IHVzZVNvcnRhYmxlKHsgaWQ6IGZhdm91cml0ZS5mYXZvdXJpdGVJZCwgaW5kZXggfSk7XG4gIGNvbnN0IGljb25JZCA9IGdldEljb25JZChmYXZvdXJpdGUuc2VsZWN0ZWRJY29uSWQpO1xuICBjb25zdCBbbmFtZSwgYWRkcmVzc10gPSBmb3JtYXRGYXZvdXJpdGVQbGFjZUxhYmVsKFxuICAgIGZhdm91cml0ZS5uYW1lLFxuICAgIGZhdm91cml0ZS5hZGRyZXNzLFxuICApO1xuXG4gIHJldHVybiAoXG4gICAgPGxpIHJlZj17cmVmfSBjbGFzc05hbWU9e3N0eWxlcy5pdGVtfT5cbiAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMuZHJhZ0hhbmRsZX0+XG4gICAgICAgIHtvbk1vdmVVcCAmJiAoXG4gICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICBjbGFzc05hbWU9e3N0eWxlcy5hcnJvd31cbiAgICAgICAgICAgIGFyaWEtbGFiZWw9e3QoJ3VwJywgeyBsbmc6IGxhbmcgfSl9XG4gICAgICAgICAgICBvbkNsaWNrPXtvbk1vdmVVcH1cbiAgICAgICAgICA+XG4gICAgICAgICAgICAmdWFycjtcbiAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgKX1cbiAgICAgICAge29uTW92ZURvd24gJiYgKFxuICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgY2xhc3NOYW1lPXtzdHlsZXMuYXJyb3d9XG4gICAgICAgICAgICBhcmlhLWxhYmVsPXt0KCdkb3duJywgeyBsbmc6IGxhbmcgfSl9XG4gICAgICAgICAgICBvbkNsaWNrPXtvbk1vdmVEb3dufVxuICAgICAgICAgID5cbiAgICAgICAgICAgICZkYXJyO1xuICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICApfVxuICAgICAgICA8c3BhbiBjbGFzc05hbWU9e3N0eWxlcy5lbGxpcHNpc30+XG4gICAgICAgICAgPEljb24gaW1nPVwiZWxsaXBzaXNcIiBjb2xvcj1cImN1cnJlbnRDb2xvclwiIC8+XG4gICAgICAgIDwvc3Bhbj5cbiAgICAgICAgPHNwYW4gY2xhc3NOYW1lPXtzdHlsZXMucGxhY2VJY29ufT5cbiAgICAgICAgICA8SWNvbiBpbWc9e2ljb25JZH0gY29sb3I9XCJjdXJyZW50Q29sb3JcIiAvPlxuICAgICAgICA8L3NwYW4+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxGbGV4Q29sdW1uIGNsYXNzTmFtZT17c3R5bGVzLnRleHR9PlxuICAgICAgICA8VGV4dCB2YXJpYW50PVwidGV4dC14cy1ib2xkXCIgYXM9XCJwXCIgY2xhc3NOYW1lPXtzdHlsZXMubmFtZX0+XG4gICAgICAgICAge25hbWV9XG4gICAgICAgIDwvVGV4dD5cbiAgICAgICAgPFRleHQgdmFyaWFudD1cInRleHQteHNcIiBhcz1cInBcIiBjb2xvcj1cIndlYWtcIiBjbGFzc05hbWU9e3N0eWxlcy5hZGRyZXNzfT5cbiAgICAgICAgICB7YWRkcmVzc31cbiAgICAgICAgPC9UZXh0PlxuICAgICAgPC9GbGV4Q29sdW1uPlxuICAgICAgPEZsZXhSb3cgYWxpZ25JdGVtcz1cImNlbnRlclwiIGZsZXhTaHJpbms9ezB9PlxuICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgY2xhc3NOYW1lPXtzdHlsZXMuYWN0aW9uQnV0dG9ufVxuICAgICAgICAgIGFyaWEtbGFiZWw9e3QoJ2VkaXQtcGxhY2UtbmFtZScsIHsgbG5nOiBsYW5nLCBmYXZvdXJpdGUgfSl9XG4gICAgICAgICAgb25DbGljaz17b25FZGl0fVxuICAgICAgICA+XG4gICAgICAgICAgPEljb24gaW1nPVwiZWRpdFwiIGNvbG9yPVwiY3VycmVudENvbG9yXCIgLz5cbiAgICAgICAgPC9idXR0b24+XG4gICAgICAgIDxidXR0b25cbiAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICBjbGFzc05hbWU9e3N0eWxlcy5hY3Rpb25CdXR0b259XG4gICAgICAgICAgYXJpYS1sYWJlbD17dCgnZGVsZXRlLXBsYWNlLW5hbWUnLCB7IGxuZzogbGFuZywgZmF2b3VyaXRlIH0pfVxuICAgICAgICAgIG9uQ2xpY2s9e29uRGVsZXRlfVxuICAgICAgICA+XG4gICAgICAgICAgPEljb24gaW1nPVwidHJhc2hcIiBjb2xvcj1cImN1cnJlbnRDb2xvclwiIC8+XG4gICAgICAgIDwvYnV0dG9uPlxuICAgICAgPC9GbGV4Um93PlxuICAgIDwvbGk+XG4gICk7XG59XG5cbkZhdm91cml0ZUxpc3RJdGVtLnByb3BUeXBlcyA9IHtcbiAgZmF2b3VyaXRlOiBQcm9wVHlwZXMuc2hhcGUoe1xuICAgIGZhdm91cml0ZUlkOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgIG5hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgYWRkcmVzczogUHJvcFR5cGVzLnN0cmluZyxcbiAgICBzZWxlY3RlZEljb25JZDogUHJvcFR5cGVzLnN0cmluZyxcbiAgfSkuaXNSZXF1aXJlZCxcbiAgbGFuZzogUHJvcFR5cGVzLnN0cmluZy5pc1JlcXVpcmVkLFxuICBvbkVkaXQ6IFByb3BUeXBlcy5mdW5jLmlzUmVxdWlyZWQsXG4gIG9uRGVsZXRlOiBQcm9wVHlwZXMuZnVuYy5pc1JlcXVpcmVkLFxuICBvbk1vdmVVcDogUHJvcFR5cGVzLmZ1bmMsXG4gIG9uTW92ZURvd246IFByb3BUeXBlcy5mdW5jLFxuICBpbmRleDogUHJvcFR5cGVzLm51bWJlci5pc1JlcXVpcmVkLFxufTtcbiIsImltcG9ydCB7IHVzZUVmZmVjdCwgdXNlUmVmLCB1c2VTdGF0ZSB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG5pbXBvcnQgeyB1c2VUcmFuc2xhdGlvbiB9IGZyb20gJ3JlYWN0LWkxOG5leHQnO1xuaW1wb3J0IHsgRHJhZ0Ryb3BQcm92aWRlciB9IGZyb20gJ0BkbmQta2l0L3JlYWN0JztcbmltcG9ydCBpc0VtcHR5IGZyb20gJ2xvZGFzaC9pc0VtcHR5JztcbmltcG9ydCBpc0VxdWFsIGZyb20gJ2xvZGFzaC9pc0VxdWFsJztcbmltcG9ydCBvbWl0IGZyb20gJ2xvZGFzaC9vbWl0JztcbmltcG9ydCB7IFNwaW5uZXIgfSBmcm9tICdAaHNsLWZpL2xvYWRpbmctaW5kaWNhdG9ycyc7XG5pbXBvcnQgeyBNb2RhbCwgTW9kYWxDb250ZW50IH0gZnJvbSAnQGhzbC1maS9kaWFsb2cnO1xuaW1wb3J0IERpYWxvZ01vZGFsIGZyb20gJ0BkaWdpdHJhbnNpdC1jb21wb25lbnQvZGlnaXRyYW5zaXQtY29tcG9uZW50LWRpYWxvZy1tb2RhbCc7XG5pbXBvcnQgRmF2b3VyaXRlTGlzdEl0ZW0gZnJvbSAnLi9oZWxwZXJzL0Zhdm91cml0ZUxpc3RJdGVtJztcbmltcG9ydCBpMThuIGZyb20gJy4vaGVscGVycy9pMThuJztcbmltcG9ydCBzdHlsZXMgZnJvbSAnLi9oZWxwZXJzL3N0eWxlcy5zY3NzJztcblxuLyoqXG4gKiBBIGRpYWxvZyBmb3IgcmVvcmRlcmluZywgZWRpdGluZyBhbmQgZGVsZXRpbmcgZmF2b3VyaXRlIHBsYWNlcywgYnVpbHQgb25cbiAqIHRoZSBIU0wgZGVzaWduIHN5c3RlbSdzIE1vZGFsLiBDb2xvcnMsIHR5cG9ncmFwaHkgYW5kIHRoZSBtb2JpbGUvZGVza3RvcFxuICogbGF5b3V0IGFyZSBoYW5kbGVkIGJ5IHRoZSBkZXNpZ24gc3lzdGVtLCBzbyB0aGUgZGlhbG9nIGZvbGxvd3MgdGhlIGFjdGl2ZVxuICogZGVwbG95bWVudCdzIHRoZW1lLlxuICpcbiAqIEBleGFtcGxlXG4gKiA8RmF2b3VyaXRlRWRpdGluZ01vZGFsXG4gKiAgIGlzTW9kYWxPcGVuPXttb2RhbE9wZW59XG4gKiAgIGhhbmRsZUNsb3NlPXtoYW5kbGVDbG9zZX1cbiAqICAgZmF2b3VyaXRlcz17ZmF2b3VyaXRlc31cbiAqICAgdXBkYXRlRmF2b3VyaXRlcz17b25VcGRhdGVGYXZvdXJpdGVzfVxuICogICBkZWxldGVGYXZvdXJpdGU9e29uRGVsZXRlRmF2b3VyaXRlfVxuICogICBvbkVkaXRTZWxlY3RlZD17b25FZGl0U2VsZWN0ZWR9XG4gKiAgIGlzTG9hZGluZz17ZmFsc2V9XG4gKiAgIGxhbmc9XCJmaVwiXG4gKiAvPlxuICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBGYXZvdXJpdGVFZGl0aW5nTW9kYWwoe1xuICBpc01vZGFsT3BlbixcbiAgaGFuZGxlQ2xvc2UsXG4gIHVwZGF0ZUZhdm91cml0ZXMsXG4gIGRlbGV0ZUZhdm91cml0ZSxcbiAgb25FZGl0U2VsZWN0ZWQsXG4gIGZhdm91cml0ZXMsXG4gIGlzTG9hZGluZyxcbiAgbGFuZyA9ICdmaScsXG59KSB7XG4gIGNvbnN0IHsgdCB9ID0gdXNlVHJhbnNsYXRpb24oJ3RyYW5zbGF0aW9uJywgeyBpMThuIH0pO1xuICBjb25zdCBbc291cmNlLCBzZXRTb3VyY2VdID0gdXNlU3RhdGUoZmF2b3VyaXRlcyk7XG4gIGNvbnN0IFtyZW9yZGVyZWQsIHNldFJlb3JkZXJlZF0gPSB1c2VTdGF0ZShudWxsKTtcbiAgY29uc3QgW3NlbGVjdGVkRmF2b3VyaXRlLCBzZXRTZWxlY3RlZEZhdm91cml0ZV0gPSB1c2VTdGF0ZShudWxsKTtcbiAgY29uc3QgcHJldmlvdXNGYXZvdXJpdGVzID0gdXNlUmVmKGZhdm91cml0ZXMpO1xuXG4gIC8vIERyb3AgdGhlIGxvY2FsIG9yZGVyIHdoZW4gdGhlIGZhdm91cml0ZXMgY2hhbmdlIGZyb20gb3V0c2lkZVxuICBpZiAoIWlzRXF1YWwoc291cmNlLCBmYXZvdXJpdGVzKSkge1xuICAgIHNldFNvdXJjZShmYXZvdXJpdGVzKTtcbiAgICBzZXRSZW9yZGVyZWQobnVsbCk7XG4gIH1cbiAgY29uc3QgaXRlbXMgPSByZW9yZGVyZWQgfHwgZmF2b3VyaXRlcztcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmIChcbiAgICAgIHByZXZpb3VzRmF2b3VyaXRlcy5jdXJyZW50ICE9PSBmYXZvdXJpdGVzICYmXG4gICAgICAhaXNFcXVhbChwcmV2aW91c0Zhdm91cml0ZXMuY3VycmVudCwgZmF2b3VyaXRlcykgJiZcbiAgICAgIGlzRW1wdHkoZmF2b3VyaXRlcylcbiAgICApIHtcbiAgICAgIGhhbmRsZUNsb3NlKCk7XG4gICAgfVxuICAgIHByZXZpb3VzRmF2b3VyaXRlcy5jdXJyZW50ID0gZmF2b3VyaXRlcztcbiAgfSwgW2Zhdm91cml0ZXMsIGhhbmRsZUNsb3NlXSk7XG5cbiAgY29uc3QgbW92ZSA9IChpbmRleCwgZGlyZWN0aW9uKSA9PiB7XG4gICAgY29uc3QgY29weSA9IFsuLi5pdGVtc107XG4gICAgW2NvcHlbaW5kZXhdLCBjb3B5W2luZGV4ICsgZGlyZWN0aW9uXV0gPSBbXG4gICAgICBjb3B5W2luZGV4ICsgZGlyZWN0aW9uXSxcbiAgICAgIGNvcHlbaW5kZXhdLFxuICAgIF07XG4gICAgc2V0UmVvcmRlcmVkKGNvcHkpO1xuICB9O1xuXG4gIGNvbnN0IG9uRHJhZ0VuZCA9IGV2ZW50ID0+IHtcbiAgICBpZiAoZXZlbnQuY2FuY2VsZWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgeyBpbml0aWFsSW5kZXgsIGluZGV4IH0gPSBldmVudC5vcGVyYXRpb24uc291cmNlPy5zb3J0YWJsZSB8fCB7fTtcbiAgICBpZiAoaW5pdGlhbEluZGV4ID09PSB1bmRlZmluZWQgfHwgaW5pdGlhbEluZGV4ID09PSBpbmRleCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBjb3B5ID0gWy4uLml0ZW1zXTtcbiAgICBjb25zdCBbbW92ZWRdID0gY29weS5zcGxpY2UoaW5pdGlhbEluZGV4LCAxKTtcbiAgICBjb3B5LnNwbGljZShpbmRleCwgMCwgbW92ZWQpO1xuICAgIHNldFJlb3JkZXJlZChjb3B5KTtcbiAgfTtcblxuICBjb25zdCBjbG9zZU1vZGFsID0gKCkgPT4ge1xuICAgIGhhbmRsZUNsb3NlKCk7XG4gICAgY29uc3Qgb21pdHRlZCA9IGl0ZW1zLm1hcChpdGVtID0+IG9taXQoaXRlbSwgWydjaG9zZW4nLCAnc2VsZWN0ZWQnXSkpO1xuICAgIGlmICghaXNFcXVhbChvbWl0dGVkLCBmYXZvdXJpdGVzKSkge1xuICAgICAgdXBkYXRlRmF2b3VyaXRlcyhvbWl0dGVkKTtcbiAgICB9XG4gIH07XG5cbiAgY29uc3QgY2xvc2VEZWxldGVEaWFsb2cgPSAoKSA9PiBzZXRTZWxlY3RlZEZhdm91cml0ZShudWxsKTtcblxuICByZXR1cm4gKFxuICAgIDw+XG4gICAgICA8RGlhbG9nTW9kYWxcbiAgICAgICAgaGVhZGVyVGV4dD17dCgnZGVsZXRlLXBsYWNlLWhlYWRlcicsIHsgbG5nOiBsYW5nIH0pfVxuICAgICAgICBoYW5kbGVDbG9zZT17KCkgPT4ge1xuICAgICAgICAgIGNsb3NlRGVsZXRlRGlhbG9nKCk7XG4gICAgICAgICAgaGFuZGxlQ2xvc2UoKTtcbiAgICAgICAgfX1cbiAgICAgICAgaXNNb2RhbE9wZW49e3NlbGVjdGVkRmF2b3VyaXRlICE9PSBudWxsfVxuICAgICAgICBkaWFsb2dDb250ZW50PXtcbiAgICAgICAgICBzZWxlY3RlZEZhdm91cml0ZVxuICAgICAgICAgICAgPyBgJHtzZWxlY3RlZEZhdm91cml0ZS5uYW1lfTogJHtzZWxlY3RlZEZhdm91cml0ZS5hZGRyZXNzfWBcbiAgICAgICAgICAgIDogJydcbiAgICAgICAgfVxuICAgICAgICBwcmltYXJ5QnV0dG9uVGV4dD17dCgnZGVsZXRlJywgeyBsbmc6IGxhbmcgfSl9XG4gICAgICAgIHByaW1hcnlCdXR0b25PbkNsaWNrPXsoKSA9PiB7XG4gICAgICAgICAgZGVsZXRlRmF2b3VyaXRlKHNlbGVjdGVkRmF2b3VyaXRlKTtcbiAgICAgICAgICBjbG9zZURlbGV0ZURpYWxvZygpO1xuICAgICAgICB9fVxuICAgICAgICBzZWNvbmRhcnlCdXR0b25UZXh0PXt0KCdjYW5jZWwnLCB7IGxuZzogbGFuZyB9KX1cbiAgICAgICAgc2Vjb25kYXJ5QnV0dG9uT25DbGljaz17Y2xvc2VEZWxldGVEaWFsb2d9XG4gICAgICAgIGxhbmc9e2xhbmd9XG4gICAgICAvPlxuICAgICAgPE1vZGFsXG4gICAgICAgIG9wZW49e2lzTW9kYWxPcGVuICYmIHNlbGVjdGVkRmF2b3VyaXRlID09PSBudWxsfVxuICAgICAgICBvbk9wZW5DaGFuZ2U9e29wZW4gPT4ge1xuICAgICAgICAgIGlmICghb3Blbikge1xuICAgICAgICAgICAgY2xvc2VNb2RhbCgpO1xuICAgICAgICAgIH1cbiAgICAgICAgfX1cbiAgICAgID5cbiAgICAgICAgPE1vZGFsQ29udGVudFxuICAgICAgICAgIGxhbmc9e2xhbmd9XG4gICAgICAgICAgdGl0bGU9e3QoJ2VkaXQtcGxhY2VzJywgeyBsbmc6IGxhbmcgfSl9XG4gICAgICAgICAgY2xhc3NOYW1lPXtzdHlsZXMubW9kYWxDb250ZW50fVxuICAgICAgICAgIGFyaWEtZGVzY3JpYmVkYnk9e3VuZGVmaW5lZH1cbiAgICAgICAgPlxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMubGlzdENvbnRhaW5lcn0+XG4gICAgICAgICAgICA8RHJhZ0Ryb3BQcm92aWRlciBvbkRyYWdFbmQ9e29uRHJhZ0VuZH0+XG4gICAgICAgICAgICAgIDx1bCBjbGFzc05hbWU9e3N0eWxlcy5saXN0fT5cbiAgICAgICAgICAgICAgICB7aXRlbXMubWFwKChmYXZvdXJpdGUsIGluZGV4KSA9PiAoXG4gICAgICAgICAgICAgICAgICA8RmF2b3VyaXRlTGlzdEl0ZW1cbiAgICAgICAgICAgICAgICAgICAga2V5PXtmYXZvdXJpdGUuZmF2b3VyaXRlSWR9XG4gICAgICAgICAgICAgICAgICAgIGluZGV4PXtpbmRleH1cbiAgICAgICAgICAgICAgICAgICAgZmF2b3VyaXRlPXtmYXZvdXJpdGV9XG4gICAgICAgICAgICAgICAgICAgIGxhbmc9e2xhbmd9XG4gICAgICAgICAgICAgICAgICAgIG9uTW92ZVVwPXtpbmRleCA+IDAgPyAoKSA9PiBtb3ZlKGluZGV4LCAtMSkgOiBudWxsfVxuICAgICAgICAgICAgICAgICAgICBvbk1vdmVEb3duPXtcbiAgICAgICAgICAgICAgICAgICAgICBpbmRleCA8IGl0ZW1zLmxlbmd0aCAtIDEgPyAoKSA9PiBtb3ZlKGluZGV4LCAxKSA6IG51bGxcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBvbkVkaXQ9eygpID0+IG9uRWRpdFNlbGVjdGVkKGZhdm91cml0ZSl9XG4gICAgICAgICAgICAgICAgICAgIG9uRGVsZXRlPXsoKSA9PiBzZXRTZWxlY3RlZEZhdm91cml0ZShmYXZvdXJpdGUpfVxuICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICApKX1cbiAgICAgICAgICAgICAgPC91bD5cbiAgICAgICAgICAgIDwvRHJhZ0Ryb3BQcm92aWRlcj5cbiAgICAgICAgICAgIHtpc0xvYWRpbmcgJiYgKFxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLm92ZXJsYXl9PlxuICAgICAgICAgICAgICAgIDxTcGlubmVyIC8+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgKX1cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9Nb2RhbENvbnRlbnQ+XG4gICAgICA8L01vZGFsPlxuICAgIDwvPlxuICApO1xufVxuXG5GYXZvdXJpdGVFZGl0aW5nTW9kYWwucHJvcFR5cGVzID0ge1xuICAvKiogUmVxdWlyZWQuIFdoZXRoZXIgdGhlIGRpYWxvZyBpcyBvcGVuLlxuICAgKiBAdHlwZSB7Ym9vbGVhbn0gKi9cbiAgaXNNb2RhbE9wZW46IFByb3BUeXBlcy5ib29sLmlzUmVxdWlyZWQsXG4gIC8qKiBSZXF1aXJlZC4gQ2xvc2UgbW9kYWwuXG4gICAqIEB0eXBlIHtmdW5jdGlvbn0gKi9cbiAgaGFuZGxlQ2xvc2U6IFByb3BUeXBlcy5mdW5jLmlzUmVxdWlyZWQsXG4gIC8qKiBSZXF1aXJlZC4gQ2FsbGVkIHdpdGggdGhlIHJlb3JkZXJlZCBmYXZvdXJpdGVzIHdoZW4gdGhlIGRpYWxvZyBpcyBjbG9zZWQuXG4gICAqIEB0eXBlIHtmdW5jdGlvbn0gKi9cbiAgdXBkYXRlRmF2b3VyaXRlczogUHJvcFR5cGVzLmZ1bmMuaXNSZXF1aXJlZCxcbiAgLyoqIFJlcXVpcmVkLiBDYWxsZWQgd2l0aCB0aGUgZmF2b3VyaXRlIHRoZSB1c2VyIGNvbmZpcm1lZCBkZWxldGluZy5cbiAgICogQHR5cGUge2Z1bmN0aW9ufSAqL1xuICBkZWxldGVGYXZvdXJpdGU6IFByb3BUeXBlcy5mdW5jLmlzUmVxdWlyZWQsXG4gIC8qKiBSZXF1aXJlZC4gRnVuY3Rpb24gdGhhdCB0YWtlcyBzZWxlY3RlZCBmYXZvdXJpdGUgb2JqZWN0IGFzIHBhcmFtZXRlci5cbiAgICogQHR5cGUge2Z1bmN0aW9ufSAqL1xuICBvbkVkaXRTZWxlY3RlZDogUHJvcFR5cGVzLmZ1bmMuaXNSZXF1aXJlZCxcbiAgLyoqIFJlcXVpcmVkLiBXaGV0aGVyIGEgc2F2ZSBpcyBpbiBwcm9ncmVzczsgc2hvd3MgYSBzcGlubmVyIG92ZXIgdGhlIGxpc3QuXG4gICAqIEB0eXBlIHtib29sZWFufSAqL1xuICBpc0xvYWRpbmc6IFByb3BUeXBlcy5ib29sLmlzUmVxdWlyZWQsXG4gIC8qKiBSZXF1aXJlZC5cbiAgICogQHR5cGUge2FycmF5PG9iamVjdD59XG4gICAqIEBwcm9wZXJ0eSB7c3RyaW5nfSB0eXBlXG4gICAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBhZGRyZXNzXG4gICAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBndGZzSWRcbiAgICogQHByb3BlcnR5IHtzdHJpbmd9IGdpZFxuICAgKiBAcHJvcGVydHkge251bWJlcn0gbGF0XG4gICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBsb25cbiAgICogQHByb3BlcnR5IHtzdHJpbmd9IG5hbWVcbiAgICogQHByb3BlcnR5IHtzdHJpbmd9IHNlbGVjdGVkSWNvbklkXG4gICAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBmYXZvdXJpdGVJZFxuICAgKiBAcHJvcGVydHkge3N0cmluZ30gbGF5ZXJcbiAgICovXG4gIGZhdm91cml0ZXM6IFByb3BUeXBlcy5hcnJheU9mKFxuICAgIFByb3BUeXBlcy5zaGFwZSh7XG4gICAgICB0eXBlOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgICAgYWRkcmVzczogUHJvcFR5cGVzLnN0cmluZyxcbiAgICAgIGd0ZnNJZDogUHJvcFR5cGVzLnN0cmluZyxcbiAgICAgIGdpZDogUHJvcFR5cGVzLnN0cmluZyxcbiAgICAgIGxhdDogUHJvcFR5cGVzLm51bWJlcixcbiAgICAgIGxvbjogUHJvcFR5cGVzLm51bWJlcixcbiAgICAgIG5hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgICBzZWxlY3RlZEljb25JZDogUHJvcFR5cGVzLnN0cmluZyxcbiAgICAgIGZhdm91cml0ZUlkOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgICAgbGF5ZXI6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgfSksXG4gICkuaXNSZXF1aXJlZCxcbiAgLyoqIE9wdGlvbmFsLiBMYW5ndWFnZSwgZmksIGVuIG9yIHN2LiBEZWZhdWx0cyB0byBmaS5cbiAgICogQHR5cGUge3N0cmluZ30gKi9cbiAgbGFuZzogUHJvcFR5cGVzLnN0cmluZyxcbn07XG4iXSwibmFtZXMiOlsiZ2V0TG9jYWxhZG1pbiIsInN1Z2dlc3Rpb24iLCJsb2NhbGFkbWluIiwiYWRkcmVzcyIsImxhc3RJbmRleE9mIiwibGVuZ3RoIiwic3Vic3RyaW5nIiwiZ2V0U3RvcENvZGUiLCJpZCIsImNvZGUiLCJ1bmRlZmluZWQiLCJpbmRleE9mIiwiZm9ybWF0RmF2b3VyaXRlUGxhY2VMYWJlbCIsIm5hbWUiLCJzcGxpdCIsInJlcGxhY2UiLCJSZWdFeHAiLCJlc2NhcGVSZWdFeHAiLCJtZW1vaXplIiwicGxhaW4iLCJsYXllciIsImxhYmVsSWQiLCJzaG9ydE5hbWUiLCJndGZzSWQiLCJtb2RlIiwidG9Mb3dlckNhc2UiLCJsb25nTmFtZSIsImFnZW5jeSIsImxhYmVsIiwiaXRlbSIsImkiLCJjbG9uZURlZXAiLCJ0cmFuc2xhdGlvbnMiLCJkZSIsInRyYW5zbGF0aW9uIiwiY2FuY2VsIiwiZGVsZXRlIiwiZW4iLCJkb3duIiwidXAiLCJmaSIsInBsIiwic3YiLCJpMThuIiwiY3JlYXRlSW5zdGFuY2UiLCJmYWxsYmFja0xuZyIsInJlc291cmNlcyIsImRlZmF1bHROUyIsInJlYWN0IiwidXNlU3VzcGVuc2UiLCJpbml0IiwiZ2V0SWNvbklkIiwic2VsZWN0ZWRJY29uSWQiLCJwcmVmaXhQb3MiLCJGYXZvdXJpdGVMaXN0SXRlbSIsImZhdm91cml0ZSIsImxhbmciLCJvbk1vdmVVcCIsIm9uTW92ZURvd24iLCJvbkVkaXQiLCJvbkRlbGV0ZSIsImluZGV4IiwidCIsInVzZVRyYW5zbGF0aW9uIiwicmVmIiwidXNlU29ydGFibGUiLCJmYXZvdXJpdGVJZCIsImljb25JZCIsIl9qc3hzIiwiY2xhc3NOYW1lIiwic3R5bGVzIiwiY2hpbGRyZW4iLCJkcmFnSGFuZGxlIiwiX2pzeCIsInR5cGUiLCJhcnJvdyIsImxuZyIsIm9uQ2xpY2siLCJlbGxpcHNpcyIsIkljb24iLCJpbWciLCJjb2xvciIsInBsYWNlSWNvbiIsIkZsZXhDb2x1bW4iLCJ0ZXh0IiwiVGV4dCIsInZhcmlhbnQiLCJhcyIsIkZsZXhSb3ciLCJhbGlnbkl0ZW1zIiwiZmxleFNocmluayIsImFjdGlvbkJ1dHRvbiIsInByb2Nlc3MiLCJlbnYiLCJOT0RFX0VOViIsInByb3BUeXBlcyIsIlByb3BUeXBlcyIsInNoYXBlIiwic3RyaW5nIiwiaXNSZXF1aXJlZCIsImZ1bmMiLCJudW1iZXIiLCJGYXZvdXJpdGVFZGl0aW5nTW9kYWwiLCJpc01vZGFsT3BlbiIsImhhbmRsZUNsb3NlIiwidXBkYXRlRmF2b3VyaXRlcyIsImRlbGV0ZUZhdm91cml0ZSIsIm9uRWRpdFNlbGVjdGVkIiwiZmF2b3VyaXRlcyIsImlzTG9hZGluZyIsInNvdXJjZSIsInNldFNvdXJjZSIsInVzZVN0YXRlIiwicmVvcmRlcmVkIiwic2V0UmVvcmRlcmVkIiwic2VsZWN0ZWRGYXZvdXJpdGUiLCJzZXRTZWxlY3RlZEZhdm91cml0ZSIsInByZXZpb3VzRmF2b3VyaXRlcyIsInVzZVJlZiIsImlzRXF1YWwiLCJpdGVtcyIsInVzZUVmZmVjdCIsImN1cnJlbnQiLCJpc0VtcHR5IiwibW92ZSIsImRpcmVjdGlvbiIsImNvcHkiLCJvbkRyYWdFbmQiLCJldmVudCIsImNhbmNlbGVkIiwiaW5pdGlhbEluZGV4Iiwib3BlcmF0aW9uIiwic29ydGFibGUiLCJtb3ZlZCIsInNwbGljZSIsImNsb3NlTW9kYWwiLCJvbWl0dGVkIiwibWFwIiwib21pdCIsImNsb3NlRGVsZXRlRGlhbG9nIiwiX0ZyYWdtZW50IiwiRGlhbG9nTW9kYWwiLCJoZWFkZXJUZXh0IiwiZGlhbG9nQ29udGVudCIsInByaW1hcnlCdXR0b25UZXh0IiwicHJpbWFyeUJ1dHRvbk9uQ2xpY2siLCJzZWNvbmRhcnlCdXR0b25UZXh0Iiwic2Vjb25kYXJ5QnV0dG9uT25DbGljayIsIk1vZGFsIiwib3BlbiIsIm9uT3BlbkNoYW5nZSIsIk1vZGFsQ29udGVudCIsInRpdGxlIiwibW9kYWxDb250ZW50IiwibGlzdENvbnRhaW5lciIsIkRyYWdEcm9wUHJvdmlkZXIiLCJsaXN0Iiwib3ZlcmxheSIsIlNwaW5uZXIiLCJib29sIiwiYXJyYXlPZiIsImdpZCIsImxhdCIsImxvbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7O0VBTUE7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTs7RUFFQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0EsTUFBTUEsYUFBYSxHQUFHQyxVQUFVLElBQzlCQSxVQUFVLENBQUNDLFVBQVUsSUFDckJELFVBQVUsQ0FBQ0MsVUFBVSxJQUNwQkQsVUFBVSxDQUFDRSxPQUFPLElBQ2pCRixVQUFVLENBQUNFLE9BQU8sQ0FBQ0MsV0FBVyxDQUFDLEdBQUcsQ0FBQyxHQUFHSCxVQUFVLENBQUNFLE9BQU8sQ0FBQ0UsTUFBTSxHQUFHLENBQUMsSUFDbkVKLFVBQVUsQ0FBQ0UsT0FBTyxDQUFDRyxTQUFT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
|
package/lib/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":["../../../digitransit-search-util/uniq-by-label/index.js","../../../../node_modules/style-inject/dist/style-inject.es.js","../src/helpers/translations.js","../src/helpers/i18n.js","../src/helpers/FavouriteListItem.jsx","../src/index.jsx"],"sourcesContent":["import uniqWith from 'lodash/uniqWith';\nimport isEqual from 'lodash/isEqual';\nimport memoize from 'lodash/memoize';\nimport escapeRegExp from 'lodash/escapeRegExp';\nimport cloneDeep from 'lodash/cloneDeep';\n\n/**\n * Location properties.\n * @typedef {LocationProperties}\n * @property {string} layer Suggestion layer.\n * @property {lat} [number]\n * @property {lon} [number]\n * @property {string} address Address.\n */\n\n/**\n * Returns localadmin (city name) for suggestions\n *\n * @name getLocaladmin\n * @param {Object} suggestion suggestion's properties from geocoding or a favourite stop/station.\n * Expects last part of an address (after ',') to contain the city name of the suggestion location.\n * @returns {String} City name or empty string\n */\nconst getLocaladmin = suggestion =>\n suggestion.localadmin ||\n suggestion.localadmin ||\n (suggestion.address &&\n suggestion.address.lastIndexOf(',') < suggestion.address.length - 2 &&\n suggestion.address.substring(suggestion.address.lastIndexOf(',') + 2)) ||\n '';\n\nexport const getStopCode = ({ id, code }) => {\n if (code) {\n return code;\n }\n if (\n id === undefined ||\n typeof id.indexOf === 'undefined' ||\n id.indexOf('#') === -1\n ) {\n return undefined;\n }\n // id from pelias\n return id.substring(id.indexOf('#') + 1);\n};\n\nexport const formatFavouritePlaceLabel = (name, address) => [\n name || (address && address.split(',')[0]),\n typeof address === 'string'\n ? address.replace(new RegExp(`${escapeRegExp(name)}([ ,]|$)+`), '')\n : '',\n];\n\n/**\n * Format suggestion-pair [name, address] by `suggestion.layer`.\n *\n * @name getNameLabel\n * @param {LocationProperties} suggestion\n * @param {boolean} [plain]\n *\n * @returns {Array.<string>} Formatted label.\n */\nexport const getNameLabel = memoize(\n (suggestion, plain = false) => {\n switch (suggestion.layer) {\n case 'currentPosition':\n return [suggestion.labelId, suggestion.address];\n case 'selectFromMap':\n case 'ownLocations':\n case 'back':\n return [suggestion.labelId];\n case 'favouritePlace':\n return formatFavouritePlaceLabel(suggestion.name, suggestion.address);\n case 'favouriteVehicleRentalStation':\n case 'bikestation':\n return [suggestion.name];\n case 'favouriteRoute':\n case 'route-BUS':\n case 'route-TRAM':\n case 'route-RAIL':\n case 'route-SUBWAY':\n case 'route-FERRY':\n case 'route-FUNICULAR':\n case 'route-AIRPLANE':\n return !plain && suggestion.shortName\n ? [\n suggestion.gtfsId,\n suggestion.mode.toLowerCase(),\n suggestion.longName,\n ]\n : [\n suggestion.shortName,\n suggestion.longName,\n suggestion.agency ? suggestion.agency.name : undefined,\n ];\n case 'venue':\n case 'address':\n case 'street':\n return [\n suggestion.name,\n suggestion.label.replace(\n new RegExp(`${escapeRegExp(suggestion.name)}(,)?( )?`),\n '',\n ),\n ];\n case 'favouriteStop':\n case 'stop':\n return plain\n ? [\n suggestion.name ||\n suggestion.label ||\n (suggestion.address && suggestion.address.split(',')[0]),\n getLocaladmin(suggestion),\n ]\n : [\n suggestion.name,\n suggestion.id,\n getStopCode(suggestion),\n getLocaladmin(suggestion),\n ];\n case 'favouriteStation':\n case 'station':\n default:\n return [\n suggestion.name ||\n suggestion.label ||\n (suggestion.address && suggestion.address.split(',')[0]),\n getLocaladmin(suggestion),\n ];\n }\n },\n (item, plain) => {\n const i = cloneDeep(item);\n i.plain = plain;\n return i;\n },\n);\n\n/**\n * Checks that features are unique by label\n *\n * @name uniqByLabel\n * @param {Array} features Array of features\n * @returns {Array} Array of unique features\n * @example\n * digitransit-search-util.uniqByLabel(features);\n * //= Array(2)\n */\nexport default function uniqByLabel(features) {\n return uniqWith(features, (feat1, feat2) => {\n if (feat1.type === 'FutureRoute' || feat2.type === 'FutureRoute') {\n return false;\n }\n return (\n isEqual(getNameLabel(feat1.properties), getNameLabel(feat2.properties)) &&\n feat1.properties.layer === feat2.properties.layer\n );\n });\n}\n","function styleInject(css, ref) {\n if ( ref === void 0 ) ref = {};\n var insertAt = ref.insertAt;\n\n if (!css || typeof document === 'undefined') { return; }\n\n var head = document.head || document.getElementsByTagName('head')[0];\n var style = document.createElement('style');\n style.type = 'text/css';\n\n if (insertAt === 'top') {\n if (head.firstChild) {\n head.insertBefore(style, head.firstChild);\n } else {\n head.appendChild(style);\n }\n } else {\n head.appendChild(style);\n }\n\n if (style.styleSheet) {\n style.styleSheet.cssText = css;\n } else {\n style.appendChild(document.createTextNode(css));\n }\n}\n\nexport default styleInject;\n","/* eslint sort-keys: \"error\" */\nconst translations = {\n de: {\n translation: {\n cancel: 'Abbrechen',\n delete: 'Löschen',\n 'delete-place-header': 'Wollen Sie den Favoriten löschen?',\n 'delete-place-name': 'Lösche Favorit: {{favourite.name}}',\n 'edit-place-name': 'Bearbeite Favorit: {{favourite.name}}',\n 'edit-places': 'Bearbeite Favoriten',\n },\n },\n en: {\n translation: {\n cancel: 'Cancel',\n delete: 'Delete',\n 'delete-place-header': 'Do you want to delete the place?',\n 'delete-place-name': 'Delete place: {{favourite.name}}',\n down: 'Move favourite down',\n 'edit-place-name': 'Edit place: {{favourite.name}}',\n 'edit-places': 'Edit places',\n up: 'Move favourite up',\n },\n },\n fi: {\n translation: {\n cancel: 'Peruuta',\n delete: 'Poista',\n 'delete-place-header': 'Haluatko poistaa paikan?',\n 'delete-place-name': 'Poista paikka: {{favourite.name}}',\n down: 'Siirrä suosikkisijaintia alaspäin',\n 'edit-place-name': 'Muokkaa paikkaa: {{favourite.name}}',\n 'edit-places': 'Muokkaa paikkoja',\n up: 'Siirrä suosikkisijaintia ylöpäin',\n },\n },\n pl: {\n translation: {\n cancel: 'Anuluj',\n delete: 'Usuń',\n 'delete-place-header': 'Czy na pewno chcesz usunąć to miejsce?',\n 'delete-place-name': 'Usuń miejsce: {{favourite.name}}',\n down: 'Przenieś ulubione niżej',\n 'edit-place-name': 'Edytuj miejsce: {{favourite.name}}',\n 'edit-places': 'Edytuj miejsca',\n up: 'Przenieś ulubione wyżej',\n },\n },\n sv: {\n translation: {\n cancel: 'Avbryt',\n delete: 'Ta bort',\n 'delete-place-header': 'Vill du ta bort platsen?',\n 'delete-place-name': 'Ta bort platsen: {{favourite.name}}',\n down: 'Flytta favoriten nedåt',\n 'edit-place-name': 'Edit place: {{favourite.name}}',\n 'edit-places': 'Redigera platser',\n up: 'Flytta favoriten uppåt',\n },\n },\n};\n\nexport default translations;\n","import { createInstance } from 'i18next';\nimport translations from './translations';\n\nconst i18n = createInstance({\n fallbackLng: 'fi',\n // debug: true,\n resources: translations,\n defaultNS: 'translation',\n react: {\n useSuspense: true,\n },\n});\n\ni18n.init();\n\nexport default i18n;\n","import PropTypes from 'prop-types';\nimport { useTranslation } from 'react-i18next';\nimport { FlexColumn, FlexRow, Text } from '@hsl-fi/layout-primitives';\nimport { useSortable } from '@dnd-kit/react/sortable';\nimport Icon from '@digitransit-component/digitransit-component-icon';\nimport { formatFavouritePlaceLabel } from '@digitransit-search-util/digitransit-search-util-uniq-by-label';\nimport styles from './styles.scss';\nimport i18n from './i18n';\n\nconst getIconId = selectedIconId => {\n const prefixPos = selectedIconId ? selectedIconId.indexOf('icon_') : -1;\n return prefixPos > 0 ? selectedIconId.substring(prefixPos + 5) : 'place';\n};\n\n/**\n * One row of the favourites list. The visually hidden arrow buttons are a\n * keyboard alternative to dragging.\n */\nfunction FavouriteListItem({\n favourite,\n lang,\n onMoveUp = null,\n onMoveDown = null,\n onEdit,\n onDelete,\n index,\n}) {\n const { t } = useTranslation('translation', { i18n });\n const { ref } = useSortable({ id: favourite.favouriteId, index });\n const iconId = getIconId(favourite.selectedIconId);\n const [name, address] = formatFavouritePlaceLabel(\n favourite.name,\n favourite.address,\n );\n\n return (\n <li ref={ref} className={styles.item}>\n <div className={styles.dragHandle}>\n {onMoveUp && (\n <button\n type=\"button\"\n className={styles.arrow}\n aria-label={t('up', { lng: lang })}\n onClick={onMoveUp}\n >\n ↑\n </button>\n )}\n {onMoveDown && (\n <button\n type=\"button\"\n className={styles.arrow}\n aria-label={t('down', { lng: lang })}\n onClick={onMoveDown}\n >\n ↓\n </button>\n )}\n <span className={styles.ellipsis}>\n <Icon img=\"ellipsis\" color=\"currentColor\" />\n </span>\n <span className={styles.placeIcon}>\n <Icon img={iconId} color=\"currentColor\" />\n </span>\n </div>\n <FlexColumn className={styles.text}>\n <Text variant=\"text-xs-bold\" as=\"p\" className={styles.name}>\n {name}\n </Text>\n <Text variant=\"text-xs\" as=\"p\" color=\"weak\" className={styles.address}>\n {address}\n </Text>\n </FlexColumn>\n <FlexRow alignItems=\"center\" flexShrink={0}>\n <button\n type=\"button\"\n className={styles.actionButton}\n aria-label={t('edit-place-name', { lng: lang, favourite })}\n onClick={onEdit}\n >\n <Icon img=\"edit\" color=\"currentColor\" />\n </button>\n <button\n type=\"button\"\n className={styles.actionButton}\n aria-label={t('delete-place-name', { lng: lang, favourite })}\n onClick={onDelete}\n >\n <Icon img=\"trash\" color=\"currentColor\" />\n </button>\n </FlexRow>\n </li>\n );\n}\n\nFavouriteListItem.propTypes = {\n favourite: PropTypes.shape({\n favouriteId: PropTypes.string,\n name: PropTypes.string,\n address: PropTypes.string,\n selectedIconId: PropTypes.string,\n }).isRequired,\n lang: PropTypes.string.isRequired,\n onEdit: PropTypes.func.isRequired,\n onDelete: PropTypes.func.isRequired,\n onMoveUp: PropTypes.func,\n onMoveDown: PropTypes.func,\n index: PropTypes.number.isRequired,\n};\n\nexport default FavouriteListItem;\n","import { useEffect, useRef, useState } from 'react';\nimport PropTypes from 'prop-types';\nimport { useTranslation } from 'react-i18next';\nimport { DragDropProvider } from '@dnd-kit/react';\nimport isEmpty from 'lodash/isEmpty';\nimport isEqual from 'lodash/isEqual';\nimport omit from 'lodash/omit';\nimport { Spinner } from '@hsl-fi/loading-indicators';\nimport { Modal, ModalContent } from '@hsl-fi/dialog';\nimport DialogModal from '@digitransit-component/digitransit-component-dialog-modal';\nimport FavouriteListItem from './helpers/FavouriteListItem';\nimport i18n from './helpers/i18n';\nimport styles from './helpers/styles.scss';\n\n/**\n * A dialog for reordering, editing and deleting favourite places, built on\n * the HSL design system's Modal. Colors, typography and the mobile/desktop\n * layout are handled by the design system, so the dialog follows the active\n * deployment's theme.\n *\n * @example\n * <FavouriteEditingModal\n * isModalOpen={modalOpen}\n * handleClose={handleClose}\n * favourites={favourites}\n * updateFavourites={onUpdateFavourites}\n * deleteFavourite={onDeleteFavourite}\n * onEditSelected={onEditSelected}\n * isLoading={false}\n * lang=\"fi\"\n * />\n */\nfunction FavouriteEditingModal({\n isModalOpen,\n handleClose,\n updateFavourites,\n deleteFavourite,\n onEditSelected,\n favourites,\n isLoading,\n lang = 'fi',\n}) {\n const { t } = useTranslation('translation', { i18n });\n const [source, setSource] = useState(favourites);\n const [reordered, setReordered] = useState(null);\n const [selectedFavourite, setSelectedFavourite] = useState(null);\n const previousFavourites = useRef(favourites);\n\n // Drop the local order when the favourites change from outside\n if (!isEqual(source, favourites)) {\n setSource(favourites);\n setReordered(null);\n }\n const items = reordered || favourites;\n\n useEffect(() => {\n if (\n previousFavourites.current !== favourites &&\n !isEqual(previousFavourites.current, favourites) &&\n isEmpty(favourites)\n ) {\n handleClose();\n }\n previousFavourites.current = favourites;\n }, [favourites, handleClose]);\n\n const move = (index, direction) => {\n const copy = [...items];\n [copy[index], copy[index + direction]] = [\n copy[index + direction],\n copy[index],\n ];\n setReordered(copy);\n };\n\n const onDragEnd = event => {\n if (event.canceled) {\n return;\n }\n const { initialIndex, index } = event.operation.source?.sortable || {};\n if (initialIndex === undefined || initialIndex === index) {\n return;\n }\n const copy = [...items];\n const [moved] = copy.splice(initialIndex, 1);\n copy.splice(index, 0, moved);\n setReordered(copy);\n };\n\n const closeModal = () => {\n handleClose();\n const omitted = items.map(item => omit(item, ['chosen', 'selected']));\n if (!isEqual(omitted, favourites)) {\n updateFavourites(omitted);\n }\n };\n\n const closeDeleteDialog = () => setSelectedFavourite(null);\n\n return (\n <>\n <DialogModal\n headerText={t('delete-place-header', { lng: lang })}\n handleClose={() => {\n closeDeleteDialog();\n handleClose();\n }}\n isModalOpen={selectedFavourite !== null}\n dialogContent={\n selectedFavourite\n ? `${selectedFavourite.name}: ${selectedFavourite.address}`\n : ''\n }\n primaryButtonText={t('delete', { lng: lang })}\n primaryButtonOnClick={() => {\n deleteFavourite(selectedFavourite);\n closeDeleteDialog();\n }}\n secondaryButtonText={t('cancel', { lng: lang })}\n secondaryButtonOnClick={closeDeleteDialog}\n lang={lang}\n />\n <Modal\n open={isModalOpen && selectedFavourite === null}\n onOpenChange={open => {\n if (!open) {\n closeModal();\n }\n }}\n >\n <ModalContent\n lang={lang}\n title={t('edit-places', { lng: lang })}\n className={styles.modalContent}\n aria-describedby={undefined}\n >\n <div className={styles.listContainer}>\n <DragDropProvider onDragEnd={onDragEnd}>\n <ul className={styles.list}>\n {items.map((favourite, index) => (\n <FavouriteListItem\n key={favourite.favouriteId}\n index={index}\n favourite={favourite}\n lang={lang}\n onMoveUp={index > 0 ? () => move(index, -1) : null}\n onMoveDown={\n index < items.length - 1 ? () => move(index, 1) : null\n }\n onEdit={() => onEditSelected(favourite)}\n onDelete={() => setSelectedFavourite(favourite)}\n />\n ))}\n </ul>\n </DragDropProvider>\n {isLoading && (\n <div className={styles.overlay}>\n <Spinner />\n </div>\n )}\n </div>\n </ModalContent>\n </Modal>\n </>\n );\n}\n\nFavouriteEditingModal.propTypes = {\n /** Required. Whether the dialog is open.\n * @type {boolean} */\n isModalOpen: PropTypes.bool.isRequired,\n /** Required. Close modal.\n * @type {function} */\n handleClose: PropTypes.func.isRequired,\n /** Required. Called with the reordered favourites when the dialog is closed.\n * @type {function} */\n updateFavourites: PropTypes.func.isRequired,\n /** Required. Called with the favourite the user confirmed deleting.\n * @type {function} */\n deleteFavourite: PropTypes.func.isRequired,\n /** Required. Function that takes selected favourite object as parameter.\n * @type {function} */\n onEditSelected: PropTypes.func.isRequired,\n /** Required. Whether a save is in progress; shows a spinner over the list.\n * @type {boolean} */\n isLoading: PropTypes.bool.isRequired,\n /** Required.\n * @type {array<object>}\n * @property {string} type\n * @property {string} address\n * @property {string} gtfsId\n * @property {string} gid\n * @property {number} lat\n * @property {number} lon\n * @property {string} name\n * @property {string} selectedIconId\n * @property {string} favouriteId\n * @property {string} layer\n */\n favourites: PropTypes.arrayOf(\n PropTypes.shape({\n type: PropTypes.string,\n address: PropTypes.string,\n gtfsId: PropTypes.string,\n gid: PropTypes.string,\n lat: PropTypes.number,\n lon: PropTypes.number,\n name: PropTypes.string,\n selectedIconId: PropTypes.string,\n favouriteId: PropTypes.string,\n layer: PropTypes.string,\n }),\n ).isRequired,\n /** Optional. Language, fi, en or sv. Defaults to fi.\n * @type {string} */\n lang: PropTypes.string,\n};\n\nexport default FavouriteEditingModal;\n"],"names":["getLocaladmin","suggestion","localadmin","address","lastIndexOf","length","substring","getStopCode","id","code","undefined","indexOf","formatFavouritePlaceLabel","name","split","replace","RegExp","escapeRegExp","memoize","plain","layer","labelId","shortName","gtfsId","mode","toLowerCase","longName","agency","label","item","i","cloneDeep","translations","de","translation","cancel","delete","en","down","up","fi","pl","sv","i18n","createInstance","fallbackLng","resources","defaultNS","react","useSuspense","init","getIconId","selectedIconId","prefixPos","FavouriteListItem","favourite","lang","onMoveUp","onMoveDown","onEdit","onDelete","index","t","useTranslation","ref","useSortable","favouriteId","iconId","_jsxs","className","styles","children","dragHandle","_jsx","type","arrow","lng","onClick","ellipsis","Icon","img","color","placeIcon","FlexColumn","text","Text","variant","as","FlexRow","alignItems","flexShrink","actionButton","process","env","NODE_ENV","propTypes","PropTypes","shape","string","isRequired","func","number","FavouriteEditingModal","isModalOpen","handleClose","updateFavourites","deleteFavourite","onEditSelected","favourites","isLoading","source","setSource","useState","reordered","setReordered","selectedFavourite","setSelectedFavourite","previousFavourites","useRef","isEqual","items","useEffect","current","isEmpty","move","direction","copy","onDragEnd","event","canceled","initialIndex","operation","sortable","moved","splice","closeModal","omitted","map","omit","closeDeleteDialog","_Fragment","DialogModal","headerText","dialogContent","primaryButtonText","primaryButtonOnClick","secondaryButtonText","secondaryButtonOnClick","Modal","open","onOpenChange","ModalContent","title","modalContent","listContainer","DragDropProvider","list","overlay","Spinner","bool","arrayOf","gid","lat","lon"],"mappings":"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","x_google_ignoreList":[1]}
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../../../digitransit-search-util/uniq-by-label/index.js","../../../../node_modules/style-inject/dist/style-inject.es.js","../src/helpers/translations.js","../src/helpers/i18n.js","../src/helpers/FavouriteListItem.jsx","../src/index.jsx"],"sourcesContent":["import uniqWith from 'lodash/uniqWith';\nimport isEqual from 'lodash/isEqual';\nimport memoize from 'lodash/memoize';\nimport escapeRegExp from 'lodash/escapeRegExp';\nimport cloneDeep from 'lodash/cloneDeep';\n\n/**\n * Location properties.\n * @typedef {LocationProperties}\n * @property {string} layer Suggestion layer.\n * @property {lat} [number]\n * @property {lon} [number]\n * @property {string} address Address.\n */\n\n/**\n * Returns localadmin (city name) for suggestions\n *\n * @name getLocaladmin\n * @param {Object} suggestion suggestion's properties from geocoding or a favourite stop/station.\n * Expects last part of an address (after ',') to contain the city name of the suggestion location.\n * @returns {String} City name or empty string\n */\nconst getLocaladmin = suggestion =>\n suggestion.localadmin ||\n suggestion.localadmin ||\n (suggestion.address &&\n suggestion.address.lastIndexOf(',') < suggestion.address.length - 2 &&\n suggestion.address.substring(suggestion.address.lastIndexOf(',') + 2)) ||\n '';\n\nexport const getStopCode = ({ id, code }) => {\n if (code) {\n return code;\n }\n if (\n id === undefined ||\n typeof id.indexOf === 'undefined' ||\n id.indexOf('#') === -1\n ) {\n return undefined;\n }\n // id from pelias\n return id.substring(id.indexOf('#') + 1);\n};\n\nexport const formatFavouritePlaceLabel = (name, address) => [\n name || (address && address.split(',')[0]),\n typeof address === 'string'\n ? address.replace(new RegExp(`${escapeRegExp(name)}([ ,]|$)+`), '')\n : '',\n];\n\n/**\n * Format suggestion-pair [name, address] by `suggestion.layer`.\n *\n * @name getNameLabel\n * @param {LocationProperties} suggestion\n * @param {boolean} [plain]\n *\n * @returns {Array.<string>} Formatted label.\n */\nexport const getNameLabel = memoize(\n (suggestion, plain = false) => {\n switch (suggestion.layer) {\n case 'currentPosition':\n return [suggestion.labelId, suggestion.address];\n case 'selectFromMap':\n case 'ownLocations':\n case 'back':\n return [suggestion.labelId];\n case 'favouritePlace':\n return formatFavouritePlaceLabel(suggestion.name, suggestion.address);\n case 'favouriteVehicleRentalStation':\n case 'bikestation':\n return [suggestion.name];\n case 'favouriteRoute':\n case 'route-BUS':\n case 'route-TRAM':\n case 'route-RAIL':\n case 'route-SUBWAY':\n case 'route-FERRY':\n case 'route-FUNICULAR':\n case 'route-AIRPLANE':\n return !plain && suggestion.shortName\n ? [\n suggestion.gtfsId,\n suggestion.mode.toLowerCase(),\n suggestion.longName,\n ]\n : [\n suggestion.shortName,\n suggestion.longName,\n suggestion.agency ? suggestion.agency.name : undefined,\n ];\n case 'venue':\n case 'address':\n case 'street':\n return [\n suggestion.name,\n suggestion.label.replace(\n new RegExp(`${escapeRegExp(suggestion.name)}(,)?( )?`),\n '',\n ),\n ];\n case 'favouriteStop':\n case 'stop':\n return plain\n ? [\n suggestion.name ||\n suggestion.label ||\n (suggestion.address && suggestion.address.split(',')[0]),\n getLocaladmin(suggestion),\n ]\n : [\n suggestion.name,\n suggestion.id,\n getStopCode(suggestion),\n getLocaladmin(suggestion),\n ];\n case 'favouriteStation':\n case 'station':\n default:\n return [\n suggestion.name ||\n suggestion.label ||\n (suggestion.address && suggestion.address.split(',')[0]),\n getLocaladmin(suggestion),\n ];\n }\n },\n (item, plain) => {\n const i = cloneDeep(item);\n i.plain = plain;\n return i;\n },\n);\n\n/**\n * Checks that features are unique by label\n *\n * @name uniqByLabel\n * @param {Array} features Array of features\n * @returns {Array} Array of unique features\n * @example\n * digitransit-search-util.uniqByLabel(features);\n * //= Array(2)\n */\nexport default function uniqByLabel(features) {\n return uniqWith(features, (feat1, feat2) => {\n if (feat1.type === 'FutureRoute' || feat2.type === 'FutureRoute') {\n return false;\n }\n return (\n isEqual(getNameLabel(feat1.properties), getNameLabel(feat2.properties)) &&\n feat1.properties.layer === feat2.properties.layer\n );\n });\n}\n","function styleInject(css, ref) {\n if ( ref === void 0 ) ref = {};\n var insertAt = ref.insertAt;\n\n if (!css || typeof document === 'undefined') { return; }\n\n var head = document.head || document.getElementsByTagName('head')[0];\n var style = document.createElement('style');\n style.type = 'text/css';\n\n if (insertAt === 'top') {\n if (head.firstChild) {\n head.insertBefore(style, head.firstChild);\n } else {\n head.appendChild(style);\n }\n } else {\n head.appendChild(style);\n }\n\n if (style.styleSheet) {\n style.styleSheet.cssText = css;\n } else {\n style.appendChild(document.createTextNode(css));\n }\n}\n\nexport default styleInject;\n","/* eslint sort-keys: \"error\" */\nconst translations = {\n de: {\n translation: {\n cancel: 'Abbrechen',\n delete: 'Löschen',\n 'delete-place-header': 'Wollen Sie den Favoriten löschen?',\n 'delete-place-name': 'Lösche Favorit: {{favourite.name}}',\n 'edit-place-name': 'Bearbeite Favorit: {{favourite.name}}',\n 'edit-places': 'Bearbeite Favoriten',\n },\n },\n en: {\n translation: {\n cancel: 'Cancel',\n delete: 'Delete',\n 'delete-place-header': 'Do you want to delete the place?',\n 'delete-place-name': 'Delete place: {{favourite.name}}',\n down: 'Move favourite down',\n 'edit-place-name': 'Edit place: {{favourite.name}}',\n 'edit-places': 'Edit places',\n up: 'Move favourite up',\n },\n },\n fi: {\n translation: {\n cancel: 'Peruuta',\n delete: 'Poista',\n 'delete-place-header': 'Haluatko poistaa paikan?',\n 'delete-place-name': 'Poista paikka: {{favourite.name}}',\n down: 'Siirrä suosikkisijaintia alaspäin',\n 'edit-place-name': 'Muokkaa paikkaa: {{favourite.name}}',\n 'edit-places': 'Muokkaa paikkoja',\n up: 'Siirrä suosikkisijaintia ylöpäin',\n },\n },\n pl: {\n translation: {\n cancel: 'Anuluj',\n delete: 'Usuń',\n 'delete-place-header': 'Czy na pewno chcesz usunąć to miejsce?',\n 'delete-place-name': 'Usuń miejsce: {{favourite.name}}',\n down: 'Przenieś ulubione niżej',\n 'edit-place-name': 'Edytuj miejsce: {{favourite.name}}',\n 'edit-places': 'Edytuj miejsca',\n up: 'Przenieś ulubione wyżej',\n },\n },\n sv: {\n translation: {\n cancel: 'Avbryt',\n delete: 'Ta bort',\n 'delete-place-header': 'Vill du ta bort platsen?',\n 'delete-place-name': 'Ta bort platsen: {{favourite.name}}',\n down: 'Flytta favoriten nedåt',\n 'edit-place-name': 'Edit place: {{favourite.name}}',\n 'edit-places': 'Redigera platser',\n up: 'Flytta favoriten uppåt',\n },\n },\n};\n\nexport default translations;\n","import { createInstance } from 'i18next';\nimport translations from './translations';\n\nconst i18n = createInstance({\n fallbackLng: 'fi',\n // debug: true,\n resources: translations,\n defaultNS: 'translation',\n react: {\n useSuspense: true,\n },\n});\n\ni18n.init();\n\nexport default i18n;\n","import PropTypes from 'prop-types';\nimport { useTranslation } from 'react-i18next';\nimport { FlexColumn, FlexRow, Text } from '@hsl-fi/layout-primitives';\nimport { useSortable } from '@dnd-kit/react/sortable';\nimport Icon from '@digitransit-component/digitransit-component-icon';\nimport { formatFavouritePlaceLabel } from '@digitransit-search-util/digitransit-search-util-uniq-by-label';\nimport styles from './styles.scss';\nimport i18n from './i18n';\n\nconst getIconId = selectedIconId => {\n const prefixPos = selectedIconId ? selectedIconId.indexOf('icon_') : -1;\n return prefixPos > 0 ? selectedIconId.substring(prefixPos + 5) : 'place';\n};\n\n/**\n * One row of the favourites list. The visually hidden arrow buttons are a\n * keyboard alternative to dragging.\n */\nexport default function FavouriteListItem({\n favourite,\n lang,\n onMoveUp = null,\n onMoveDown = null,\n onEdit,\n onDelete,\n index,\n}) {\n const { t } = useTranslation('translation', { i18n });\n const { ref } = useSortable({ id: favourite.favouriteId, index });\n const iconId = getIconId(favourite.selectedIconId);\n const [name, address] = formatFavouritePlaceLabel(\n favourite.name,\n favourite.address,\n );\n\n return (\n <li ref={ref} className={styles.item}>\n <div className={styles.dragHandle}>\n {onMoveUp && (\n <button\n type=\"button\"\n className={styles.arrow}\n aria-label={t('up', { lng: lang })}\n onClick={onMoveUp}\n >\n ↑\n </button>\n )}\n {onMoveDown && (\n <button\n type=\"button\"\n className={styles.arrow}\n aria-label={t('down', { lng: lang })}\n onClick={onMoveDown}\n >\n ↓\n </button>\n )}\n <span className={styles.ellipsis}>\n <Icon img=\"ellipsis\" color=\"currentColor\" />\n </span>\n <span className={styles.placeIcon}>\n <Icon img={iconId} color=\"currentColor\" />\n </span>\n </div>\n <FlexColumn className={styles.text}>\n <Text variant=\"text-xs-bold\" as=\"p\" className={styles.name}>\n {name}\n </Text>\n <Text variant=\"text-xs\" as=\"p\" color=\"weak\" className={styles.address}>\n {address}\n </Text>\n </FlexColumn>\n <FlexRow alignItems=\"center\" flexShrink={0}>\n <button\n type=\"button\"\n className={styles.actionButton}\n aria-label={t('edit-place-name', { lng: lang, favourite })}\n onClick={onEdit}\n >\n <Icon img=\"edit\" color=\"currentColor\" />\n </button>\n <button\n type=\"button\"\n className={styles.actionButton}\n aria-label={t('delete-place-name', { lng: lang, favourite })}\n onClick={onDelete}\n >\n <Icon img=\"trash\" color=\"currentColor\" />\n </button>\n </FlexRow>\n </li>\n );\n}\n\nFavouriteListItem.propTypes = {\n favourite: PropTypes.shape({\n favouriteId: PropTypes.string,\n name: PropTypes.string,\n address: PropTypes.string,\n selectedIconId: PropTypes.string,\n }).isRequired,\n lang: PropTypes.string.isRequired,\n onEdit: PropTypes.func.isRequired,\n onDelete: PropTypes.func.isRequired,\n onMoveUp: PropTypes.func,\n onMoveDown: PropTypes.func,\n index: PropTypes.number.isRequired,\n};\n","import { useEffect, useRef, useState } from 'react';\nimport PropTypes from 'prop-types';\nimport { useTranslation } from 'react-i18next';\nimport { DragDropProvider } from '@dnd-kit/react';\nimport isEmpty from 'lodash/isEmpty';\nimport isEqual from 'lodash/isEqual';\nimport omit from 'lodash/omit';\nimport { Spinner } from '@hsl-fi/loading-indicators';\nimport { Modal, ModalContent } from '@hsl-fi/dialog';\nimport DialogModal from '@digitransit-component/digitransit-component-dialog-modal';\nimport FavouriteListItem from './helpers/FavouriteListItem';\nimport i18n from './helpers/i18n';\nimport styles from './helpers/styles.scss';\n\n/**\n * A dialog for reordering, editing and deleting favourite places, built on\n * the HSL design system's Modal. Colors, typography and the mobile/desktop\n * layout are handled by the design system, so the dialog follows the active\n * deployment's theme.\n *\n * @example\n * <FavouriteEditingModal\n * isModalOpen={modalOpen}\n * handleClose={handleClose}\n * favourites={favourites}\n * updateFavourites={onUpdateFavourites}\n * deleteFavourite={onDeleteFavourite}\n * onEditSelected={onEditSelected}\n * isLoading={false}\n * lang=\"fi\"\n * />\n */\nexport default function FavouriteEditingModal({\n isModalOpen,\n handleClose,\n updateFavourites,\n deleteFavourite,\n onEditSelected,\n favourites,\n isLoading,\n lang = 'fi',\n}) {\n const { t } = useTranslation('translation', { i18n });\n const [source, setSource] = useState(favourites);\n const [reordered, setReordered] = useState(null);\n const [selectedFavourite, setSelectedFavourite] = useState(null);\n const previousFavourites = useRef(favourites);\n\n // Drop the local order when the favourites change from outside\n if (!isEqual(source, favourites)) {\n setSource(favourites);\n setReordered(null);\n }\n const items = reordered || favourites;\n\n useEffect(() => {\n if (\n previousFavourites.current !== favourites &&\n !isEqual(previousFavourites.current, favourites) &&\n isEmpty(favourites)\n ) {\n handleClose();\n }\n previousFavourites.current = favourites;\n }, [favourites, handleClose]);\n\n const move = (index, direction) => {\n const copy = [...items];\n [copy[index], copy[index + direction]] = [\n copy[index + direction],\n copy[index],\n ];\n setReordered(copy);\n };\n\n const onDragEnd = event => {\n if (event.canceled) {\n return;\n }\n const { initialIndex, index } = event.operation.source?.sortable || {};\n if (initialIndex === undefined || initialIndex === index) {\n return;\n }\n const copy = [...items];\n const [moved] = copy.splice(initialIndex, 1);\n copy.splice(index, 0, moved);\n setReordered(copy);\n };\n\n const closeModal = () => {\n handleClose();\n const omitted = items.map(item => omit(item, ['chosen', 'selected']));\n if (!isEqual(omitted, favourites)) {\n updateFavourites(omitted);\n }\n };\n\n const closeDeleteDialog = () => setSelectedFavourite(null);\n\n return (\n <>\n <DialogModal\n headerText={t('delete-place-header', { lng: lang })}\n handleClose={() => {\n closeDeleteDialog();\n handleClose();\n }}\n isModalOpen={selectedFavourite !== null}\n dialogContent={\n selectedFavourite\n ? `${selectedFavourite.name}: ${selectedFavourite.address}`\n : ''\n }\n primaryButtonText={t('delete', { lng: lang })}\n primaryButtonOnClick={() => {\n deleteFavourite(selectedFavourite);\n closeDeleteDialog();\n }}\n secondaryButtonText={t('cancel', { lng: lang })}\n secondaryButtonOnClick={closeDeleteDialog}\n lang={lang}\n />\n <Modal\n open={isModalOpen && selectedFavourite === null}\n onOpenChange={open => {\n if (!open) {\n closeModal();\n }\n }}\n >\n <ModalContent\n lang={lang}\n title={t('edit-places', { lng: lang })}\n className={styles.modalContent}\n aria-describedby={undefined}\n >\n <div className={styles.listContainer}>\n <DragDropProvider onDragEnd={onDragEnd}>\n <ul className={styles.list}>\n {items.map((favourite, index) => (\n <FavouriteListItem\n key={favourite.favouriteId}\n index={index}\n favourite={favourite}\n lang={lang}\n onMoveUp={index > 0 ? () => move(index, -1) : null}\n onMoveDown={\n index < items.length - 1 ? () => move(index, 1) : null\n }\n onEdit={() => onEditSelected(favourite)}\n onDelete={() => setSelectedFavourite(favourite)}\n />\n ))}\n </ul>\n </DragDropProvider>\n {isLoading && (\n <div className={styles.overlay}>\n <Spinner />\n </div>\n )}\n </div>\n </ModalContent>\n </Modal>\n </>\n );\n}\n\nFavouriteEditingModal.propTypes = {\n /** Required. Whether the dialog is open.\n * @type {boolean} */\n isModalOpen: PropTypes.bool.isRequired,\n /** Required. Close modal.\n * @type {function} */\n handleClose: PropTypes.func.isRequired,\n /** Required. Called with the reordered favourites when the dialog is closed.\n * @type {function} */\n updateFavourites: PropTypes.func.isRequired,\n /** Required. Called with the favourite the user confirmed deleting.\n * @type {function} */\n deleteFavourite: PropTypes.func.isRequired,\n /** Required. Function that takes selected favourite object as parameter.\n * @type {function} */\n onEditSelected: PropTypes.func.isRequired,\n /** Required. Whether a save is in progress; shows a spinner over the list.\n * @type {boolean} */\n isLoading: PropTypes.bool.isRequired,\n /** Required.\n * @type {array<object>}\n * @property {string} type\n * @property {string} address\n * @property {string} gtfsId\n * @property {string} gid\n * @property {number} lat\n * @property {number} lon\n * @property {string} name\n * @property {string} selectedIconId\n * @property {string} favouriteId\n * @property {string} layer\n */\n favourites: PropTypes.arrayOf(\n PropTypes.shape({\n type: PropTypes.string,\n address: PropTypes.string,\n gtfsId: PropTypes.string,\n gid: PropTypes.string,\n lat: PropTypes.number,\n lon: PropTypes.number,\n name: PropTypes.string,\n selectedIconId: PropTypes.string,\n favouriteId: PropTypes.string,\n layer: PropTypes.string,\n }),\n ).isRequired,\n /** Optional. Language, fi, en or sv. Defaults to fi.\n * @type {string} */\n lang: PropTypes.string,\n};\n"],"names":["getLocaladmin","suggestion","localadmin","address","lastIndexOf","length","substring","getStopCode","id","code","undefined","indexOf","formatFavouritePlaceLabel","name","split","replace","RegExp","escapeRegExp","memoize","plain","layer","labelId","shortName","gtfsId","mode","toLowerCase","longName","agency","label","item","i","cloneDeep","translations","de","translation","cancel","delete","en","down","up","fi","pl","sv","i18n","createInstance","fallbackLng","resources","defaultNS","react","useSuspense","init","getIconId","selectedIconId","prefixPos","FavouriteListItem","favourite","lang","onMoveUp","onMoveDown","onEdit","onDelete","index","t","useTranslation","ref","useSortable","favouriteId","iconId","_jsxs","className","styles","children","dragHandle","_jsx","type","arrow","lng","onClick","ellipsis","Icon","img","color","placeIcon","FlexColumn","text","Text","variant","as","FlexRow","alignItems","flexShrink","actionButton","process","env","NODE_ENV","propTypes","PropTypes","shape","string","isRequired","func","number","FavouriteEditingModal","isModalOpen","handleClose","updateFavourites","deleteFavourite","onEditSelected","favourites","isLoading","source","setSource","useState","reordered","setReordered","selectedFavourite","setSelectedFavourite","previousFavourites","useRef","isEqual","items","useEffect","current","isEmpty","move","direction","copy","onDragEnd","event","canceled","initialIndex","operation","sortable","moved","splice","closeModal","omitted","map","omit","closeDeleteDialog","_Fragment","DialogModal","headerText","dialogContent","primaryButtonText","primaryButtonOnClick","secondaryButtonText","secondaryButtonOnClick","Modal","open","onOpenChange","ModalContent","title","modalContent","listContainer","DragDropProvider","list","overlay","Spinner","bool","arrayOf","gid","lat","lon"],"mappings":"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","x_google_ignoreList":[1]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@digitransit-component/digitransit-component-favourite-editing-modal",
|
|
3
|
-
"version": "10.0.
|
|
3
|
+
"version": "10.0.3",
|
|
4
4
|
"description": "digitransit-component favourite-editing-modal module",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "index.cjs",
|
|
@@ -46,8 +46,8 @@
|
|
|
46
46
|
"@digitransit-ui/rollup-config": "^1.0.1"
|
|
47
47
|
},
|
|
48
48
|
"peerDependencies": {
|
|
49
|
-
"@digitransit-component/digitransit-component-dialog-modal": "^7.0.
|
|
50
|
-
"@digitransit-component/digitransit-component-icon": "^5.0.
|
|
49
|
+
"@digitransit-component/digitransit-component-dialog-modal": "^7.0.4",
|
|
50
|
+
"@digitransit-component/digitransit-component-icon": "^5.0.4",
|
|
51
51
|
"@dnd-kit/react": "^0.5.1",
|
|
52
52
|
"@hsl-fi/dialog": "^3.1.3",
|
|
53
53
|
"@hsl-fi/layout-primitives": "^4.9.0",
|
|
@@ -58,5 +58,5 @@
|
|
|
58
58
|
"react": "^18.3.1",
|
|
59
59
|
"react-i18next": "^12.3.1"
|
|
60
60
|
},
|
|
61
|
-
"gitHead": "
|
|
61
|
+
"gitHead": "33587048f401b17745487f95411b362bb950d8c6"
|
|
62
62
|
}
|