{"version":3,"file":"makerequest.js","sources":["../frontend/javascript/components/makerequest/similar-request-search-result.vue","../frontend/javascript/components/makerequest/similar-request-search.vue","../frontend/javascript/store/multi_settings.js","../node_modules/.pnpm/lodash.sortby@4.7.0/node_modules/lodash.sortby/index.js","../frontend/javascript/components/publicbody/pb-table-row.vue","../frontend/javascript/components/publicbody/pb-table.vue","../frontend/javascript/components/publicbody/pb-summary.vue","../frontend/javascript/components/publicbody/pb-multi-review.vue","../frontend/javascript/components/publicbody/pb-pagination.vue","../frontend/javascript/components/publicbody/publicbody-multichooser.vue","../frontend/javascript/components/makerequest/lib/letter-mixin.js","../frontend/javascript/components/proofupload/proof-form.vue","../frontend/javascript/components/makerequest/user-address.vue","../frontend/javascript/components/makerequest/user-confirm.vue","../frontend/javascript/components/publicbody/pb-truncated-list.vue","../frontend/javascript/components/makerequest/request-form.vue","../frontend/javascript/components/makerequest/request-public.vue","../frontend/javascript/components/makerequest/review-publicbody.vue","../frontend/javascript/components/makerequest/review-request-line.vue","../frontend/javascript/components/makerequest/user-confirmation.vue","../frontend/javascript/components/makerequest/review-request.vue","../frontend/images/make-request/step-intro.avif","../frontend/javascript/components/makerequest/request-intro.vue","../frontend/javascript/components/makerequest/intro-skip-preference.vue","../frontend/javascript/components/makerequest/lib/store-values-mixin.js","../frontend/javascript/components/makerequest/user-registration.vue","../frontend/javascript/components/makerequest/user-terms.vue","../frontend/javascript/components/makerequest/user-public.vue","../frontend/javascript/components/makerequest/user-claims-vip.vue","../frontend/javascript/components/makerequest/user-create-account.vue","../frontend/images/make-request/step-find-similar.avif","../frontend/images/make-request/step-find-publicbody.avif","../frontend/javascript/components/makerequest/request-page.vue","../frontend/javascript/makerequest.js"],"sourcesContent":["<template>\n  <!-- adapted from request_item.html -->\n  <div class=\"d-flex\">\n    <div class=\"flex-grow-1\">\n      <!-- cf. foirequest/snippets/request_item_inner.html;\n         following comments indicate differences to there -->\n      <div>\n        <h3 class=\"mt-0 mb-1 h5\">\n          <a :href=\"object.url\" target=\"_blank\">\n            {{ object.title }}\n            <i class=\"fa fa-external-link\" aria-hidden=\"true\" />\n          </a>\n          <!-- diff.: object.follower_count omitted -->\n        </h3>\n        <small>\n          <span v-if=\"object.project\">\n            {{\n              i18n._('searchToProject', {\n                name: object.public_body.name,\n                count: object.project_request_count\n              })\n            }}\n          </span>\n          <span v-else-if=\"object.public_body_name\">{{\n            i18n._('searchToPbName', { name: object.public_body_name })\n          }}</span>\n          <span v-else-if=\"object.public_body\">\n            {{ object.public_body.name }}\n            <template v-if=\"showJurisdiction\"\n              >– {{ object.jurisdiction_name }}</template\n            >\n          </span>\n          <span v-else>\n            {{ i18n.notYetSet }}\n          </span>\n          <button\n            v-if=\"object.public_body.id\"\n            type=\"button\"\n            class=\"btn btn-sm btn-link align-baseline text-start\"\n            @click=\"selectPublicBody(object.public_body.id)\"\n          >\n            {{ i18n.searchSelectThisPb }}\n          </button>\n        </small>\n        <div>\n          <span class=\"badge rounded-pill\" :class=\"[statusColorClass]\">{{\n            object.readable_status\n          }}</span>\n          <!-- diff.: not timesince/\"ago\", instead \"Month YYYY\" -->\n          <time :datetime=\"object.last_message\" class=\"ms-2 small\">\n            {{ formatDate(object.last_message) }}\n          </time>\n          <!-- diff.: costs omitted -->\n          <!-- diff.: same_as_count/identical hint omitted -->\n        </div>\n        <div class=\"small text-secondary mt-1\">\n          {{ object.description.substring(0, 200) }}\n          {{ object.description.length > 200 ? '…' : '' }}\n        </div>\n      </div>\n    </div>\n  </div>\n</template>\n\n<script setup>\nimport { computed, inject } from 'vue'\nimport { useStore } from 'vuex'\nimport { SET_STEP, STEPS } from '../../store/mutation_types'\n\nconst store = useStore()\n\nconst pbScope = inject('pbScope')\n\nconst i18n = inject('i18n')\n\nconst props = defineProps({\n  object: {\n    type: Object,\n    required: true\n  }\n})\n\nconst statusColors = {\n  awaiting_response: 'text-bg-yellow-200',\n  successful: 'text-bg-success',\n  partially_successful: 'text-bg-success',\n  refused: 'text-bg-danger',\n  user_withdrew_costs: 'text-bg-danger'\n}\n\nconst { object } = props\n\nconst selectPublicBody = (id) => {\n  store\n    .dispatch('setPublicBodyById', { id, scope: pbScope })\n    .then(() => {\n      if (store.getters.userValid) {\n        store.commit(SET_STEP, STEPS.WRITE_REQUEST)\n      } else {\n        store.commit(SET_STEP, STEPS.LOGIN_CREATE)\n      }\n    })\n    .catch((err) => {\n      console.error('publicbody not found', err)\n    })\n}\n\nconst formatDate = (date) =>\n  new Date(date).toLocaleDateString(document.documentElement.lang, {\n    year: 'numeric',\n    month: 'long'\n  })\n\nconst showJurisdiction = computed(() => {\n  return !props.object.public_body.name.includes(props.object.jurisdiction_name)\n})\n\nconst statusColorClass = computed(\n  () => statusColors[props.object.status_representation] ?? 'text-bg-gray-300'\n)\n</script>\n","<template>\n  <div class=\"row\">\n    <div class=\"col col-md-9\">\n      <div\n        class=\"border border-2 border-gray-300 p-3 text-bg-body bg-opacity-90 mb-3\"\n      >\n        <slot name=\"header\" />\n\n        <fieldset>\n          <div class=\"row mb-3\">\n            <!-- Text query input -->\n            <div class=\"\">\n              <div class=\"input-group\">\n                <input\n                  class=\"form-control\"\n                  type=\"search\"\n                  v-model=\"textQuery\"\n                  :placeholder=\"i18n.searchRequests\"\n                />\n                <button\n                  type=\"button\"\n                  class=\"btn btn-secondary\"\n                  @click=\"search\"\n                  :disabled=\"isSearching\"\n                >\n                  <span class=\"fa fa-search\" aria-hidden=\"true\" />\n                  {{ i18n.search }}\n                </button>\n              </div>\n            </div>\n          </div>\n          <div class=\"row\">\n            <!-- Dropdown Jurisdiction -->\n            <div class=\"col-sm-4\">\n              <div class=\"dropdown my-1 my-sm-0\">\n                <button\n                  type=\"button\"\n                  class=\"btn btn-secondary dropdown-toggle d-block w-100\"\n                  data-bs-toggle=\"dropdown\"\n                >\n                  {{ i18n.level }}\n                </button>\n                <div class=\"dropdown-menu p-3\">\n                  <ul class=\"list-unstyled mb-0\">\n                    <li\n                      v-for=\"(\n                        jurisdictions, regionKind\n                      ) in jurisdictionsByRegionKind\"\n                      :key=\"regionKind\"\n                    >\n                      {{ jurisdicitions }}\n                      <div class=\"form-check\">\n                        <input\n                          type=\"radio\"\n                          :id=\"regionKind\"\n                          class=\"form-check-input\"\n                          name=\"regionkind\"\n                          v-model=\"jurisdictionRegionKind\"\n                          :value=\"regionKind\"\n                        />\n                        <label :for=\"regionKind\" class=\"form-check-label\">{{\n                          jurisdictions.name\n                        }}</label>\n                      </div>\n                      <ul\n                        v-if=\"jurisdictions.items.length > 1\"\n                        class=\"list-unstyled ms-3\"\n                      >\n                        <li\n                          v-for=\"jurisdiction in jurisdictions.items\"\n                          :key=\"jurisdiction.id\"\n                        >\n                          <div class=\"form-check\">\n                            <input\n                              type=\"radio\"\n                              :id=\"'j' + jurisdiction.id\"\n                              class=\"form-check-input\"\n                              name=\"jurisdiction\"\n                              :value=\"jurisdiction\"\n                              v-model=\"selectedJurisdiction\"\n                            />\n                            <label\n                              :for=\"'j' + jurisdiction.id\"\n                              class=\"form-check-label\"\n                              >{{ jurisdiction.name }}</label\n                            >\n                          </div>\n                        </li>\n                      </ul>\n                    </li>\n                  </ul>\n                </div>\n              </div>\n            </div>\n            <!-- Dropdown time range -->\n            <div class=\"col-sm-4\">\n              <div class=\"dropdown my-1 my-sm-0\">\n                <button\n                  type=\"button\"\n                  class=\"btn btn-secondary dropdown-toggle d-block w-100\"\n                  data-bs-toggle=\"dropdown\"\n                  data-bs-auto-close=\"outside\"\n                >\n                  {{ i18n.dateRange }}\n                </button>\n                <div class=\"dropdown-menu p-3\">\n                  <div\n                    class=\"d-flex flex-column flex-md-row align-items-center\"\n                  >\n                    <!-- alt: label, date input\n                    <label for=\"date_start\" class=\"form-label g-col-sm-4\">From</label>\n                    <input id=\"date_start\" type=\"date\" class=\"form-control g-col-sm-8\" v-model=\"dateStart\" />\n                    -->\n                    <select\n                      class=\"form-select\"\n                      :aria-label=\"i18n.dateRangeFrom\"\n                      v-model=\"dateStart\"\n                      style=\"min-width: 10ch\"\n                    >\n                      <option :value=\"null\"></option>\n                      <option\n                        v-for=\"year in dateYearsStart\"\n                        :key=\"year\"\n                        :value=\"year\"\n                      >\n                        {{ year }}\n                      </option>\n                    </select>\n                    <span class=\"px-1\" aria-hidden=\"true\">&mdash;</span>\n                    <!-- alt: label, date input\n                    <label for=\"date_end\" class=\"form-label g-col-sm-4\">To</label>\n                    <input id=\"date_end\" type=\"date\" class=\"form-control g-col-sm-8\" v-model=\"dateEnd\" />\n                    -->\n                    <select\n                      class=\"form-select\"\n                      :aria-label=\"i18n.dateRangeTo\"\n                      v-model=\"dateEnd\"\n                      style=\"min-width: 10ch\"\n                    >\n                      <option :value=\"null\"></option>\n                      <option\n                        v-for=\"year in dateYearsEnd\"\n                        :key=\"year\"\n                        :value=\"year\"\n                      >\n                        {{ year }}\n                      </option>\n                    </select>\n                  </div>\n                </div>\n              </div>\n            </div>\n            <!-- Dropdown Campaign -->\n            <div class=\"col-sm-4\">\n              <div class=\"dropdown my-1 my-sm-0\">\n                <button\n                  type=\"button\"\n                  class=\"btn btn-secondary dropdown-toggle d-block w-100\"\n                  data-bs-toggle=\"dropdown\"\n                >\n                  {{ i18n.campaign }}\n                </button>\n                <div class=\"dropdown-menu p-3\">\n                  <ul class=\"list-unstyled mb-0\">\n                    <li>\n                      <div class=\"form-check\">\n                        <input\n                          type=\"radio\"\n                          id=\"campaign_none\"\n                          class=\"form-check-input\"\n                          name=\"campaign\"\n                          :value=\"null\"\n                          v-model=\"selectedCampaign\"\n                        />\n                        <label for=\"campaign_none\" class=\"form-check-label\">\n                          {{ i18n.noCampaign }}\n                        </label>\n                      </div>\n                    </li>\n                    <li v-for=\"campaign in campaigns\" :key=\"campaign.id\">\n                      <div class=\"form-check\">\n                        <input\n                          type=\"radio\"\n                          :id=\"'campaign_' + campaign.id\"\n                          class=\"form-check-input\"\n                          name=\"campaign\"\n                          :value=\"campaign\"\n                          v-model=\"selectedCampaign\"\n                        />\n                        <label\n                          :for=\"'campaign_' + campaign.id\"\n                          class=\"form-check-label\"\n                          >{{ campaign.name }}</label\n                        >\n                      </div>\n                    </li>\n                  </ul>\n                </div>\n              </div>\n            </div>\n          </div>\n          <!-- Active filter badges -->\n          <div class=\"mt-3 d-flex flex-wrap gap-2\">\n            <!-- Badges: Jurisdiction/kind + sub-jurisdiction -->\n            <PbFilterBadge\n              v-if=\"\n                jurisdictionsByRegionKind[jurisdictionRegionKind]?.items\n                  .length === 1 ||\n                (jurisdictionRegionKind &&\n                  jurisdictionsByRegionKind[jurisdictionRegionKind] &&\n                  !selectedJurisdiction)\n              \"\n              class=\"mb-1\"\n              @remove-click=\"jurisdictionRegionKind = null\"\n              :label=\"i18n.level\"\n              :value=\"jurisdictionsByRegionKind[jurisdictionRegionKind].name\"\n            />\n            <!-- alt\n              <PbFilterBadge\n                v-if=\"selectedJurisdictions.size > 0\"\n                v-for=\"jurisdiction in selectedJurisdictions\"\n                :key=\"jurisdiction.id\"\n                @remove-click=\"selectedJurisdictions.delete(jurisdiction)\"\n                :value=\"jurisdiction.name\"\n                :label=\"'TODO'\"\n                />\n            -->\n            <PbFilterBadge\n              v-if=\"selectedJurisdiction\"\n              class=\"mb-1\"\n              @remove-click=\"selectedJurisdiction = null\"\n              :label=\"i18n['groupBy_' + selectedJurisdiction.region_kind]\"\n              :value=\"selectedJurisdiction.name\"\n            />\n            <!-- Badges: from/to year -->\n            <PbFilterBadge\n              v-if=\"dateStart\"\n              class=\"mb-1\"\n              @remove-click=\"dateStart = null\"\n              :label=\"i18n.dateRangeFrom\"\n              :value=\"dateStart\"\n            />\n            <PbFilterBadge\n              v-if=\"dateEnd\"\n              class=\"mb-1\"\n              @remove-click=\"dateEnd = null\"\n              :label=\"i18n.dateRangeTo\"\n              :value=\"dateEnd\"\n            />\n            <!-- Badge: campaign -->\n            <PbFilterBadge\n              v-if=\"selectedCampaign\"\n              @remove-click=\"selectedCampaign = null\"\n              class=\"mb-1\"\n              :label=\"i18n.campaign\"\n              :value=\"selectedCampaign.name\"\n            />\n          </div>\n        </fieldset>\n      </div>\n    </div>\n\n    <!-- API errors -->\n\n    <div v-if=\"apiError\" class=\"alert alert-danger alert-dismissible\">\n      <strong>{{ i18n.error }}</strong\n      ><br />\n      <!-- ugly, but better than nothing? -->\n      <small>{{ apiError }}</small>\n      <button\n        type=\"button\"\n        class=\"btn-close\"\n        :aria-label=\"i18n.close\"\n        @click=\"apiError = null\"\n      ></button>\n    </div>\n\n    <!-- Results with count + pagination -->\n\n    <div v-if=\"showResults\">\n      <p>{{ i18n._('results', { count: resultsCount }) }}</p>\n\n      <ResultsPagination :response-meta=\"resultsMeta\" v-model=\"pagination\" />\n\n      <div class=\"row\">\n        <div class=\"col-lg-9\">\n          <ul class=\"list-unstyled vstack gap-5\">\n            <li v-for=\"object in results\" :key=\"object.id\">\n              <SimilarRequestSearchResult :object=\"object\" />\n            </li>\n          </ul>\n        </div>\n      </div>\n\n      <ResultsPagination :response-meta=\"resultsMeta\" v-model=\"pagination\" />\n    </div>\n  </div>\n</template>\n\n<script setup>\nimport { computed, inject, ref, reactive, watch } from 'vue'\nimport { useStore } from 'vuex'\nimport debounce from 'lodash.debounce'\nimport {\n  jurisdictionList,\n  campaignList,\n  requestSearchRetrieve\n} from '../../api'\nimport SimilarRequestSearchResult from './similar-request-search-result.vue'\nimport ResultsPagination from './results-pagination.vue'\nimport { UPDATE_SIMILAR_REQUEST_SEARCH } from '../../store/mutation_types'\nimport PbFilterBadge from '../publicbody/pb-filter-badge.vue'\n\nconst props = defineProps({\n  config: {\n    type: Object,\n    required: true\n  }\n})\n\nconst i18n = inject('i18n')\n\nconst searchResultPageSize = 10\n\nconst store = useStore()\nconst initialState = store.state.similarRequestSearch\n\nconst pagination = reactive({\n  offset: initialState?.pagination?.offset || 0,\n  limit: searchResultPageSize\n})\n\n// hide empty results list on load\nconst showResults = ref(false)\n\nconst textQuery = ref(initialState.textQuery || '')\n\nconst jurisdictionRegionKind = ref(initialState.jurisdictionRegionKind)\n\nconst jurisdictionsByRegionKind = ref({})\n\nconst selectedJurisdiction = ref(initialState.selectedJurisdiction)\n\n// n.b. new Set! alt: multiple selectable, currently unused\n// const selectedJurisdictions = ref(new Set(initialState.selectedJurisdictions))\n\nwatch(jurisdictionRegionKind, (value) => {\n  // selectedJurisdictions.value.clear()\n  if (value) selectedJurisdiction.value = null\n})\n\nwatch(selectedJurisdiction, (value) => {\n  if (value) jurisdictionRegionKind.value = null\n})\n\n// populate by fetching from API...\njurisdictionList().then((resp) => {\n  const regionKinds = new Set(resp.data.objects.map((j) => j.region_kind))\n  regionKinds.forEach((regionKind) => {\n    const items = resp.data.objects.filter((j) => j.region_kind === regionKind)\n    regionKind = regionKind || 'root'\n    jurisdictionsByRegionKind.value[regionKind] = {\n      label: regionKind,\n      rank: items[0]?.rank,\n      items,\n      slug: items[0]?.slug,\n      name:\n        items.length === 1\n          ? items[0].name\n          : // TODO works out because of alphabetical implicit sorting,\n            //   but might end up weird: Land vs Bundesland vs Freistaat...\n            items[0].region_kind_detail\n    }\n  })\n})\n\nconst campaigns = ref([])\nconst selectedCampaign = ref(initialState.selectedCampaign ?? null)\n\ncampaignList().then((resp) => {\n  campaigns.value = resp.data.objects\n})\n\nconst dateStart = ref(initialState.dateStart)\nconst dateEnd = ref(initialState.dateEnd)\n\n// create ranges for the select-options\nconst dateYearsStart = computed(() =>\n  Array.from(\n    { length: new Date().getFullYear() - props.config.settings.min_year + 1 },\n    (_, y) => y + props.config.settings.min_year\n  )\n)\nconst dateYearsEnd = computed(() =>\n  dateStart.value\n    ? dateYearsStart.value.filter((y) => y >= dateStart.value)\n    : dateYearsStart.value\n)\n\n// avoid impossible time ranges, push dateEnd after dateStart if necessary\nwatch(dateStart, () => {\n  if (dateEnd.value === null) return\n  if (dateStart.value > dateEnd.value) {\n    dateEnd.value = dateStart.value\n  }\n})\n\nconst query = computed(() => {\n  const query = { ...pagination }\n  if (textQuery.value) {\n    query.q = textQuery.value\n  }\n  // if (selectedJurisdictions.value.size > 0) {\n  //  query.jurisdiction = [...selectedJurisdictions.value].map((j) => j.slug)\n  // } else\n  if (selectedJurisdiction.value) {\n    query.jurisdiction = selectedJurisdiction.value.slug\n  } else if (\n    jurisdictionRegionKind.value &&\n    jurisdictionsByRegionKind.value[jurisdictionRegionKind.value]?.items\n      .length === 1\n  ) {\n    // optionally chaining here because jurisdictionList might be still loading (when loaded from storage)\n    query.jurisdiction =\n      jurisdictionsByRegionKind.value[\n        jurisdictionRegionKind.value\n      ]?.items[0].slug\n  } else if (jurisdictionRegionKind.value && !selectedJurisdiction.value) {\n    query.jurisdiction_rank =\n      jurisdictionsByRegionKind.value[jurisdictionRegionKind.value]?.rank\n  }\n  if (selectedCampaign.value) {\n    query.campaign = selectedCampaign.value.slug\n  }\n  if (dateStart.value) {\n    query.last_after = dateStart.value + '-01-01'\n  }\n  if (dateEnd.value) {\n    query.first_before = dateEnd.value + '-12-31'\n  }\n  return query\n})\n\nconst resultsCount = ref(0)\nconst resultsMeta = ref({})\nconst results = ref([])\n\nconst isSearching = ref(false)\nconst apiError = ref(null)\n\nconst search = () => {\n  isSearching.value = true\n  requestSearchRetrieve({\n    query: query.value,\n    throwOnError: true\n  })\n    .then((resp) => {\n      showResults.value = true\n      resultsCount.value = resp.data.meta.total_count\n      resultsMeta.value = resp.data.meta\n      results.value = resp.data.objects\n    })\n    .catch((err) => {\n      apiError.value = err\n    })\n    .finally(() => {\n      isSearching.value = false\n    })\n}\n\nif (initialState.initialSearch) search()\n\n// on query change, rewind pagination\nwatch(\n  [\n    textQuery,\n    // selectedJurisdictions,\n    selectedJurisdiction,\n    jurisdictionRegionKind,\n    selectedCampaign,\n    dateStart,\n    dateEnd\n  ],\n  () => {\n    pagination.offset = 0\n  }\n)\n// on query change, including pagination but excluding text, trigger search\nwatch(\n  [\n    pagination,\n    // selectedJurisdictions,\n    selectedJurisdiction,\n    jurisdictionRegionKind,\n    selectedCampaign,\n    dateStart,\n    dateEnd\n  ],\n  () => search()\n)\n// on text query change, trigger debounced\nconst debouncedSearch = debounce(search, 1000)\nwatch(textQuery, () => debouncedSearch())\n// on query change, persist to storage\nwatch(query, () => {\n  store.commit(UPDATE_SIMILAR_REQUEST_SEARCH, {\n    pagination,\n    textQuery: textQuery.value,\n    // n.b. serializing a Set here!\n    // selectedJurisdictions: [...selectedJurisdictions.value],\n    selectedJurisdiction: selectedJurisdiction.value,\n    jurisdictionRegionKind: jurisdictionRegionKind.value,\n    selectedCampaign: selectedCampaign.value,\n    dateStart: dateStart.value,\n    dateEnd: dateEnd.value,\n    initialSearch: true\n  })\n})\n</script>\n","const summaryDimensions = [\n  {\n    id: 'jurisdiction',\n    i18nLabel: 'jurisdictionPlural',\n    key: (x) => x.jurisdiction.name\n  },\n  {\n    id: 'classification',\n    i18nLabel: 'classificationPlural',\n    key: (x) => x.classification && x.classification.name\n  },\n  {\n    id: 'categories',\n    i18nLabel: 'topicPlural',\n    multi: true,\n    key: (x) => x.categories.map((x) => x.name)\n  }\n]\n\nexport { summaryDimensions }\n","/**\n * lodash (Custom Build) <https://lodash.com/>\n * Build: `lodash modularize exports=\"npm\" -o ./`\n * Copyright jQuery Foundation and other contributors <https://jquery.org/>\n * Released under MIT license <https://lodash.com/license>\n * Based on Underscore.js 1.8.3 <http://underscorejs.org/LICENSE>\n * Copyright Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors\n */\n\n/** Used as the size to enable large array optimizations. */\nvar LARGE_ARRAY_SIZE = 200;\n\n/** Used as the `TypeError` message for \"Functions\" methods. */\nvar FUNC_ERROR_TEXT = 'Expected a function';\n\n/** Used to stand-in for `undefined` hash values. */\nvar HASH_UNDEFINED = '__lodash_hash_undefined__';\n\n/** Used to compose bitmasks for comparison styles. */\nvar UNORDERED_COMPARE_FLAG = 1,\n    PARTIAL_COMPARE_FLAG = 2;\n\n/** Used as references for various `Number` constants. */\nvar INFINITY = 1 / 0,\n    MAX_SAFE_INTEGER = 9007199254740991;\n\n/** `Object#toString` result references. */\nvar argsTag = '[object Arguments]',\n    arrayTag = '[object Array]',\n    boolTag = '[object Boolean]',\n    dateTag = '[object Date]',\n    errorTag = '[object Error]',\n    funcTag = '[object Function]',\n    genTag = '[object GeneratorFunction]',\n    mapTag = '[object Map]',\n    numberTag = '[object Number]',\n    objectTag = '[object Object]',\n    promiseTag = '[object Promise]',\n    regexpTag = '[object RegExp]',\n    setTag = '[object Set]',\n    stringTag = '[object String]',\n    symbolTag = '[object Symbol]',\n    weakMapTag = '[object WeakMap]';\n\nvar arrayBufferTag = '[object ArrayBuffer]',\n    dataViewTag = '[object DataView]',\n    float32Tag = '[object Float32Array]',\n    float64Tag = '[object Float64Array]',\n    int8Tag = '[object Int8Array]',\n    int16Tag = '[object Int16Array]',\n    int32Tag = '[object Int32Array]',\n    uint8Tag = '[object Uint8Array]',\n    uint8ClampedTag = '[object Uint8ClampedArray]',\n    uint16Tag = '[object Uint16Array]',\n    uint32Tag = '[object Uint32Array]';\n\n/** Used to match property names within property paths. */\nvar reIsDeepProp = /\\.|\\[(?:[^[\\]]*|([\"'])(?:(?!\\1)[^\\\\]|\\\\.)*?\\1)\\]/,\n    reIsPlainProp = /^\\w*$/,\n    reLeadingDot = /^\\./,\n    rePropName = /[^.[\\]]+|\\[(?:(-?\\d+(?:\\.\\d+)?)|([\"'])((?:(?!\\2)[^\\\\]|\\\\.)*?)\\2)\\]|(?=(?:\\.|\\[\\])(?:\\.|\\[\\]|$))/g;\n\n/**\n * Used to match `RegExp`\n * [syntax characters](http://ecma-international.org/ecma-262/7.0/#sec-patterns).\n */\nvar reRegExpChar = /[\\\\^$.*+?()[\\]{}|]/g;\n\n/** Used to match backslashes in property paths. */\nvar reEscapeChar = /\\\\(\\\\)?/g;\n\n/** Used to detect host constructors (Safari). */\nvar reIsHostCtor = /^\\[object .+?Constructor\\]$/;\n\n/** Used to detect unsigned integer values. */\nvar reIsUint = /^(?:0|[1-9]\\d*)$/;\n\n/** Used to identify `toStringTag` values of typed arrays. */\nvar typedArrayTags = {};\ntypedArrayTags[float32Tag] = typedArrayTags[float64Tag] =\ntypedArrayTags[int8Tag] = typedArrayTags[int16Tag] =\ntypedArrayTags[int32Tag] = typedArrayTags[uint8Tag] =\ntypedArrayTags[uint8ClampedTag] = typedArrayTags[uint16Tag] =\ntypedArrayTags[uint32Tag] = true;\ntypedArrayTags[argsTag] = typedArrayTags[arrayTag] =\ntypedArrayTags[arrayBufferTag] = typedArrayTags[boolTag] =\ntypedArrayTags[dataViewTag] = typedArrayTags[dateTag] =\ntypedArrayTags[errorTag] = typedArrayTags[funcTag] =\ntypedArrayTags[mapTag] = typedArrayTags[numberTag] =\ntypedArrayTags[objectTag] = typedArrayTags[regexpTag] =\ntypedArrayTags[setTag] = typedArrayTags[stringTag] =\ntypedArrayTags[weakMapTag] = false;\n\n/** Detect free variable `global` from Node.js. */\nvar freeGlobal = typeof global == 'object' && global && global.Object === Object && global;\n\n/** Detect free variable `self`. */\nvar freeSelf = typeof self == 'object' && self && self.Object === Object && self;\n\n/** Used as a reference to the global object. */\nvar root = freeGlobal || freeSelf || Function('return this')();\n\n/** Detect free variable `exports`. */\nvar freeExports = typeof exports == 'object' && exports && !exports.nodeType && exports;\n\n/** Detect free variable `module`. */\nvar freeModule = freeExports && typeof module == 'object' && module && !module.nodeType && module;\n\n/** Detect the popular CommonJS extension `module.exports`. */\nvar moduleExports = freeModule && freeModule.exports === freeExports;\n\n/** Detect free variable `process` from Node.js. */\nvar freeProcess = moduleExports && freeGlobal.process;\n\n/** Used to access faster Node.js helpers. */\nvar nodeUtil = (function() {\n  try {\n    return freeProcess && freeProcess.binding('util');\n  } catch (e) {}\n}());\n\n/* Node.js helper references. */\nvar nodeIsTypedArray = nodeUtil && nodeUtil.isTypedArray;\n\n/**\n * A faster alternative to `Function#apply`, this function invokes `func`\n * with the `this` binding of `thisArg` and the arguments of `args`.\n *\n * @private\n * @param {Function} func The function to invoke.\n * @param {*} thisArg The `this` binding of `func`.\n * @param {Array} args The arguments to invoke `func` with.\n * @returns {*} Returns the result of `func`.\n */\nfunction apply(func, thisArg, args) {\n  switch (args.length) {\n    case 0: return func.call(thisArg);\n    case 1: return func.call(thisArg, args[0]);\n    case 2: return func.call(thisArg, args[0], args[1]);\n    case 3: return func.call(thisArg, args[0], args[1], args[2]);\n  }\n  return func.apply(thisArg, args);\n}\n\n/**\n * A specialized version of `_.map` for arrays without support for iteratee\n * shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array} Returns the new mapped array.\n */\nfunction arrayMap(array, iteratee) {\n  var index = -1,\n      length = array ? array.length : 0,\n      result = Array(length);\n\n  while (++index < length) {\n    result[index] = iteratee(array[index], index, array);\n  }\n  return result;\n}\n\n/**\n * Appends the elements of `values` to `array`.\n *\n * @private\n * @param {Array} array The array to modify.\n * @param {Array} values The values to append.\n * @returns {Array} Returns `array`.\n */\nfunction arrayPush(array, values) {\n  var index = -1,\n      length = values.length,\n      offset = array.length;\n\n  while (++index < length) {\n    array[offset + index] = values[index];\n  }\n  return array;\n}\n\n/**\n * A specialized version of `_.some` for arrays without support for iteratee\n * shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} predicate The function invoked per iteration.\n * @returns {boolean} Returns `true` if any element passes the predicate check,\n *  else `false`.\n */\nfunction arraySome(array, predicate) {\n  var index = -1,\n      length = array ? array.length : 0;\n\n  while (++index < length) {\n    if (predicate(array[index], index, array)) {\n      return true;\n    }\n  }\n  return false;\n}\n\n/**\n * The base implementation of `_.property` without support for deep paths.\n *\n * @private\n * @param {string} key The key of the property to get.\n * @returns {Function} Returns the new accessor function.\n */\nfunction baseProperty(key) {\n  return function(object) {\n    return object == null ? undefined : object[key];\n  };\n}\n\n/**\n * The base implementation of `_.sortBy` which uses `comparer` to define the\n * sort order of `array` and replaces criteria objects with their corresponding\n * values.\n *\n * @private\n * @param {Array} array The array to sort.\n * @param {Function} comparer The function to define sort order.\n * @returns {Array} Returns `array`.\n */\nfunction baseSortBy(array, comparer) {\n  var length = array.length;\n\n  array.sort(comparer);\n  while (length--) {\n    array[length] = array[length].value;\n  }\n  return array;\n}\n\n/**\n * The base implementation of `_.times` without support for iteratee shorthands\n * or max array length checks.\n *\n * @private\n * @param {number} n The number of times to invoke `iteratee`.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array} Returns the array of results.\n */\nfunction baseTimes(n, iteratee) {\n  var index = -1,\n      result = Array(n);\n\n  while (++index < n) {\n    result[index] = iteratee(index);\n  }\n  return result;\n}\n\n/**\n * The base implementation of `_.unary` without support for storing metadata.\n *\n * @private\n * @param {Function} func The function to cap arguments for.\n * @returns {Function} Returns the new capped function.\n */\nfunction baseUnary(func) {\n  return function(value) {\n    return func(value);\n  };\n}\n\n/**\n * Gets the value at `key` of `object`.\n *\n * @private\n * @param {Object} [object] The object to query.\n * @param {string} key The key of the property to get.\n * @returns {*} Returns the property value.\n */\nfunction getValue(object, key) {\n  return object == null ? undefined : object[key];\n}\n\n/**\n * Checks if `value` is a host object in IE < 9.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a host object, else `false`.\n */\nfunction isHostObject(value) {\n  // Many host objects are `Object` objects that can coerce to strings\n  // despite having improperly defined `toString` methods.\n  var result = false;\n  if (value != null && typeof value.toString != 'function') {\n    try {\n      result = !!(value + '');\n    } catch (e) {}\n  }\n  return result;\n}\n\n/**\n * Converts `map` to its key-value pairs.\n *\n * @private\n * @param {Object} map The map to convert.\n * @returns {Array} Returns the key-value pairs.\n */\nfunction mapToArray(map) {\n  var index = -1,\n      result = Array(map.size);\n\n  map.forEach(function(value, key) {\n    result[++index] = [key, value];\n  });\n  return result;\n}\n\n/**\n * Creates a unary function that invokes `func` with its argument transformed.\n *\n * @private\n * @param {Function} func The function to wrap.\n * @param {Function} transform The argument transform.\n * @returns {Function} Returns the new function.\n */\nfunction overArg(func, transform) {\n  return function(arg) {\n    return func(transform(arg));\n  };\n}\n\n/**\n * Converts `set` to an array of its values.\n *\n * @private\n * @param {Object} set The set to convert.\n * @returns {Array} Returns the values.\n */\nfunction setToArray(set) {\n  var index = -1,\n      result = Array(set.size);\n\n  set.forEach(function(value) {\n    result[++index] = value;\n  });\n  return result;\n}\n\n/** Used for built-in method references. */\nvar arrayProto = Array.prototype,\n    funcProto = Function.prototype,\n    objectProto = Object.prototype;\n\n/** Used to detect overreaching core-js shims. */\nvar coreJsData = root['__core-js_shared__'];\n\n/** Used to detect methods masquerading as native. */\nvar maskSrcKey = (function() {\n  var uid = /[^.]+$/.exec(coreJsData && coreJsData.keys && coreJsData.keys.IE_PROTO || '');\n  return uid ? ('Symbol(src)_1.' + uid) : '';\n}());\n\n/** Used to resolve the decompiled source of functions. */\nvar funcToString = funcProto.toString;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar objectToString = objectProto.toString;\n\n/** Used to detect if a method is native. */\nvar reIsNative = RegExp('^' +\n  funcToString.call(hasOwnProperty).replace(reRegExpChar, '\\\\$&')\n  .replace(/hasOwnProperty|(function).*?(?=\\\\\\()| for .+?(?=\\\\\\])/g, '$1.*?') + '$'\n);\n\n/** Built-in value references. */\nvar Symbol = root.Symbol,\n    Uint8Array = root.Uint8Array,\n    propertyIsEnumerable = objectProto.propertyIsEnumerable,\n    splice = arrayProto.splice,\n    spreadableSymbol = Symbol ? Symbol.isConcatSpreadable : undefined;\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeKeys = overArg(Object.keys, Object),\n    nativeMax = Math.max;\n\n/* Built-in method references that are verified to be native. */\nvar DataView = getNative(root, 'DataView'),\n    Map = getNative(root, 'Map'),\n    Promise = getNative(root, 'Promise'),\n    Set = getNative(root, 'Set'),\n    WeakMap = getNative(root, 'WeakMap'),\n    nativeCreate = getNative(Object, 'create');\n\n/** Used to detect maps, sets, and weakmaps. */\nvar dataViewCtorString = toSource(DataView),\n    mapCtorString = toSource(Map),\n    promiseCtorString = toSource(Promise),\n    setCtorString = toSource(Set),\n    weakMapCtorString = toSource(WeakMap);\n\n/** Used to convert symbols to primitives and strings. */\nvar symbolProto = Symbol ? Symbol.prototype : undefined,\n    symbolValueOf = symbolProto ? symbolProto.valueOf : undefined,\n    symbolToString = symbolProto ? symbolProto.toString : undefined;\n\n/**\n * Creates a hash object.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction Hash(entries) {\n  var index = -1,\n      length = entries ? entries.length : 0;\n\n  this.clear();\n  while (++index < length) {\n    var entry = entries[index];\n    this.set(entry[0], entry[1]);\n  }\n}\n\n/**\n * Removes all key-value entries from the hash.\n *\n * @private\n * @name clear\n * @memberOf Hash\n */\nfunction hashClear() {\n  this.__data__ = nativeCreate ? nativeCreate(null) : {};\n}\n\n/**\n * Removes `key` and its value from the hash.\n *\n * @private\n * @name delete\n * @memberOf Hash\n * @param {Object} hash The hash to modify.\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction hashDelete(key) {\n  return this.has(key) && delete this.__data__[key];\n}\n\n/**\n * Gets the hash value for `key`.\n *\n * @private\n * @name get\n * @memberOf Hash\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction hashGet(key) {\n  var data = this.__data__;\n  if (nativeCreate) {\n    var result = data[key];\n    return result === HASH_UNDEFINED ? undefined : result;\n  }\n  return hasOwnProperty.call(data, key) ? data[key] : undefined;\n}\n\n/**\n * Checks if a hash value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf Hash\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction hashHas(key) {\n  var data = this.__data__;\n  return nativeCreate ? data[key] !== undefined : hasOwnProperty.call(data, key);\n}\n\n/**\n * Sets the hash `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf Hash\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the hash instance.\n */\nfunction hashSet(key, value) {\n  var data = this.__data__;\n  data[key] = (nativeCreate && value === undefined) ? HASH_UNDEFINED : value;\n  return this;\n}\n\n// Add methods to `Hash`.\nHash.prototype.clear = hashClear;\nHash.prototype['delete'] = hashDelete;\nHash.prototype.get = hashGet;\nHash.prototype.has = hashHas;\nHash.prototype.set = hashSet;\n\n/**\n * Creates an list cache object.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction ListCache(entries) {\n  var index = -1,\n      length = entries ? entries.length : 0;\n\n  this.clear();\n  while (++index < length) {\n    var entry = entries[index];\n    this.set(entry[0], entry[1]);\n  }\n}\n\n/**\n * Removes all key-value entries from the list cache.\n *\n * @private\n * @name clear\n * @memberOf ListCache\n */\nfunction listCacheClear() {\n  this.__data__ = [];\n}\n\n/**\n * Removes `key` and its value from the list cache.\n *\n * @private\n * @name delete\n * @memberOf ListCache\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction listCacheDelete(key) {\n  var data = this.__data__,\n      index = assocIndexOf(data, key);\n\n  if (index < 0) {\n    return false;\n  }\n  var lastIndex = data.length - 1;\n  if (index == lastIndex) {\n    data.pop();\n  } else {\n    splice.call(data, index, 1);\n  }\n  return true;\n}\n\n/**\n * Gets the list cache value for `key`.\n *\n * @private\n * @name get\n * @memberOf ListCache\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction listCacheGet(key) {\n  var data = this.__data__,\n      index = assocIndexOf(data, key);\n\n  return index < 0 ? undefined : data[index][1];\n}\n\n/**\n * Checks if a list cache value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf ListCache\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction listCacheHas(key) {\n  return assocIndexOf(this.__data__, key) > -1;\n}\n\n/**\n * Sets the list cache `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf ListCache\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the list cache instance.\n */\nfunction listCacheSet(key, value) {\n  var data = this.__data__,\n      index = assocIndexOf(data, key);\n\n  if (index < 0) {\n    data.push([key, value]);\n  } else {\n    data[index][1] = value;\n  }\n  return this;\n}\n\n// Add methods to `ListCache`.\nListCache.prototype.clear = listCacheClear;\nListCache.prototype['delete'] = listCacheDelete;\nListCache.prototype.get = listCacheGet;\nListCache.prototype.has = listCacheHas;\nListCache.prototype.set = listCacheSet;\n\n/**\n * Creates a map cache object to store key-value pairs.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction MapCache(entries) {\n  var index = -1,\n      length = entries ? entries.length : 0;\n\n  this.clear();\n  while (++index < length) {\n    var entry = entries[index];\n    this.set(entry[0], entry[1]);\n  }\n}\n\n/**\n * Removes all key-value entries from the map.\n *\n * @private\n * @name clear\n * @memberOf MapCache\n */\nfunction mapCacheClear() {\n  this.__data__ = {\n    'hash': new Hash,\n    'map': new (Map || ListCache),\n    'string': new Hash\n  };\n}\n\n/**\n * Removes `key` and its value from the map.\n *\n * @private\n * @name delete\n * @memberOf MapCache\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction mapCacheDelete(key) {\n  return getMapData(this, key)['delete'](key);\n}\n\n/**\n * Gets the map value for `key`.\n *\n * @private\n * @name get\n * @memberOf MapCache\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction mapCacheGet(key) {\n  return getMapData(this, key).get(key);\n}\n\n/**\n * Checks if a map value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf MapCache\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction mapCacheHas(key) {\n  return getMapData(this, key).has(key);\n}\n\n/**\n * Sets the map `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf MapCache\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the map cache instance.\n */\nfunction mapCacheSet(key, value) {\n  getMapData(this, key).set(key, value);\n  return this;\n}\n\n// Add methods to `MapCache`.\nMapCache.prototype.clear = mapCacheClear;\nMapCache.prototype['delete'] = mapCacheDelete;\nMapCache.prototype.get = mapCacheGet;\nMapCache.prototype.has = mapCacheHas;\nMapCache.prototype.set = mapCacheSet;\n\n/**\n *\n * Creates an array cache object to store unique values.\n *\n * @private\n * @constructor\n * @param {Array} [values] The values to cache.\n */\nfunction SetCache(values) {\n  var index = -1,\n      length = values ? values.length : 0;\n\n  this.__data__ = new MapCache;\n  while (++index < length) {\n    this.add(values[index]);\n  }\n}\n\n/**\n * Adds `value` to the array cache.\n *\n * @private\n * @name add\n * @memberOf SetCache\n * @alias push\n * @param {*} value The value to cache.\n * @returns {Object} Returns the cache instance.\n */\nfunction setCacheAdd(value) {\n  this.__data__.set(value, HASH_UNDEFINED);\n  return this;\n}\n\n/**\n * Checks if `value` is in the array cache.\n *\n * @private\n * @name has\n * @memberOf SetCache\n * @param {*} value The value to search for.\n * @returns {number} Returns `true` if `value` is found, else `false`.\n */\nfunction setCacheHas(value) {\n  return this.__data__.has(value);\n}\n\n// Add methods to `SetCache`.\nSetCache.prototype.add = SetCache.prototype.push = setCacheAdd;\nSetCache.prototype.has = setCacheHas;\n\n/**\n * Creates a stack cache object to store key-value pairs.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction Stack(entries) {\n  this.__data__ = new ListCache(entries);\n}\n\n/**\n * Removes all key-value entries from the stack.\n *\n * @private\n * @name clear\n * @memberOf Stack\n */\nfunction stackClear() {\n  this.__data__ = new ListCache;\n}\n\n/**\n * Removes `key` and its value from the stack.\n *\n * @private\n * @name delete\n * @memberOf Stack\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction stackDelete(key) {\n  return this.__data__['delete'](key);\n}\n\n/**\n * Gets the stack value for `key`.\n *\n * @private\n * @name get\n * @memberOf Stack\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction stackGet(key) {\n  return this.__data__.get(key);\n}\n\n/**\n * Checks if a stack value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf Stack\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction stackHas(key) {\n  return this.__data__.has(key);\n}\n\n/**\n * Sets the stack `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf Stack\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the stack cache instance.\n */\nfunction stackSet(key, value) {\n  var cache = this.__data__;\n  if (cache instanceof ListCache) {\n    var pairs = cache.__data__;\n    if (!Map || (pairs.length < LARGE_ARRAY_SIZE - 1)) {\n      pairs.push([key, value]);\n      return this;\n    }\n    cache = this.__data__ = new MapCache(pairs);\n  }\n  cache.set(key, value);\n  return this;\n}\n\n// Add methods to `Stack`.\nStack.prototype.clear = stackClear;\nStack.prototype['delete'] = stackDelete;\nStack.prototype.get = stackGet;\nStack.prototype.has = stackHas;\nStack.prototype.set = stackSet;\n\n/**\n * Creates an array of the enumerable property names of the array-like `value`.\n *\n * @private\n * @param {*} value The value to query.\n * @param {boolean} inherited Specify returning inherited property names.\n * @returns {Array} Returns the array of property names.\n */\nfunction arrayLikeKeys(value, inherited) {\n  // Safari 8.1 makes `arguments.callee` enumerable in strict mode.\n  // Safari 9 makes `arguments.length` enumerable in strict mode.\n  var result = (isArray(value) || isArguments(value))\n    ? baseTimes(value.length, String)\n    : [];\n\n  var length = result.length,\n      skipIndexes = !!length;\n\n  for (var key in value) {\n    if ((inherited || hasOwnProperty.call(value, key)) &&\n        !(skipIndexes && (key == 'length' || isIndex(key, length)))) {\n      result.push(key);\n    }\n  }\n  return result;\n}\n\n/**\n * Gets the index at which the `key` is found in `array` of key-value pairs.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {*} key The key to search for.\n * @returns {number} Returns the index of the matched value, else `-1`.\n */\nfunction assocIndexOf(array, key) {\n  var length = array.length;\n  while (length--) {\n    if (eq(array[length][0], key)) {\n      return length;\n    }\n  }\n  return -1;\n}\n\n/**\n * The base implementation of `_.forEach` without support for iteratee shorthands.\n *\n * @private\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array|Object} Returns `collection`.\n */\nvar baseEach = createBaseEach(baseForOwn);\n\n/**\n * The base implementation of `_.flatten` with support for restricting flattening.\n *\n * @private\n * @param {Array} array The array to flatten.\n * @param {number} depth The maximum recursion depth.\n * @param {boolean} [predicate=isFlattenable] The function invoked per iteration.\n * @param {boolean} [isStrict] Restrict to values that pass `predicate` checks.\n * @param {Array} [result=[]] The initial result value.\n * @returns {Array} Returns the new flattened array.\n */\nfunction baseFlatten(array, depth, predicate, isStrict, result) {\n  var index = -1,\n      length = array.length;\n\n  predicate || (predicate = isFlattenable);\n  result || (result = []);\n\n  while (++index < length) {\n    var value = array[index];\n    if (depth > 0 && predicate(value)) {\n      if (depth > 1) {\n        // Recursively flatten arrays (susceptible to call stack limits).\n        baseFlatten(value, depth - 1, predicate, isStrict, result);\n      } else {\n        arrayPush(result, value);\n      }\n    } else if (!isStrict) {\n      result[result.length] = value;\n    }\n  }\n  return result;\n}\n\n/**\n * The base implementation of `baseForOwn` which iterates over `object`\n * properties returned by `keysFunc` and invokes `iteratee` for each property.\n * Iteratee functions may exit iteration early by explicitly returning `false`.\n *\n * @private\n * @param {Object} object The object to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @param {Function} keysFunc The function to get the keys of `object`.\n * @returns {Object} Returns `object`.\n */\nvar baseFor = createBaseFor();\n\n/**\n * The base implementation of `_.forOwn` without support for iteratee shorthands.\n *\n * @private\n * @param {Object} object The object to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Object} Returns `object`.\n */\nfunction baseForOwn(object, iteratee) {\n  return object && baseFor(object, iteratee, keys);\n}\n\n/**\n * The base implementation of `_.get` without support for default values.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {Array|string} path The path of the property to get.\n * @returns {*} Returns the resolved value.\n */\nfunction baseGet(object, path) {\n  path = isKey(path, object) ? [path] : castPath(path);\n\n  var index = 0,\n      length = path.length;\n\n  while (object != null && index < length) {\n    object = object[toKey(path[index++])];\n  }\n  return (index && index == length) ? object : undefined;\n}\n\n/**\n * The base implementation of `getTag`.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the `toStringTag`.\n */\nfunction baseGetTag(value) {\n  return objectToString.call(value);\n}\n\n/**\n * The base implementation of `_.hasIn` without support for deep paths.\n *\n * @private\n * @param {Object} [object] The object to query.\n * @param {Array|string} key The key to check.\n * @returns {boolean} Returns `true` if `key` exists, else `false`.\n */\nfunction baseHasIn(object, key) {\n  return object != null && key in Object(object);\n}\n\n/**\n * The base implementation of `_.isEqual` which supports partial comparisons\n * and tracks traversed objects.\n *\n * @private\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @param {Function} [customizer] The function to customize comparisons.\n * @param {boolean} [bitmask] The bitmask of comparison flags.\n *  The bitmask may be composed of the following flags:\n *     1 - Unordered comparison\n *     2 - Partial comparison\n * @param {Object} [stack] Tracks traversed `value` and `other` objects.\n * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n */\nfunction baseIsEqual(value, other, customizer, bitmask, stack) {\n  if (value === other) {\n    return true;\n  }\n  if (value == null || other == null || (!isObject(value) && !isObjectLike(other))) {\n    return value !== value && other !== other;\n  }\n  return baseIsEqualDeep(value, other, baseIsEqual, customizer, bitmask, stack);\n}\n\n/**\n * A specialized version of `baseIsEqual` for arrays and objects which performs\n * deep comparisons and tracks traversed objects enabling objects with circular\n * references to be compared.\n *\n * @private\n * @param {Object} object The object to compare.\n * @param {Object} other The other object to compare.\n * @param {Function} equalFunc The function to determine equivalents of values.\n * @param {Function} [customizer] The function to customize comparisons.\n * @param {number} [bitmask] The bitmask of comparison flags. See `baseIsEqual`\n *  for more details.\n * @param {Object} [stack] Tracks traversed `object` and `other` objects.\n * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.\n */\nfunction baseIsEqualDeep(object, other, equalFunc, customizer, bitmask, stack) {\n  var objIsArr = isArray(object),\n      othIsArr = isArray(other),\n      objTag = arrayTag,\n      othTag = arrayTag;\n\n  if (!objIsArr) {\n    objTag = getTag(object);\n    objTag = objTag == argsTag ? objectTag : objTag;\n  }\n  if (!othIsArr) {\n    othTag = getTag(other);\n    othTag = othTag == argsTag ? objectTag : othTag;\n  }\n  var objIsObj = objTag == objectTag && !isHostObject(object),\n      othIsObj = othTag == objectTag && !isHostObject(other),\n      isSameTag = objTag == othTag;\n\n  if (isSameTag && !objIsObj) {\n    stack || (stack = new Stack);\n    return (objIsArr || isTypedArray(object))\n      ? equalArrays(object, other, equalFunc, customizer, bitmask, stack)\n      : equalByTag(object, other, objTag, equalFunc, customizer, bitmask, stack);\n  }\n  if (!(bitmask & PARTIAL_COMPARE_FLAG)) {\n    var objIsWrapped = objIsObj && hasOwnProperty.call(object, '__wrapped__'),\n        othIsWrapped = othIsObj && hasOwnProperty.call(other, '__wrapped__');\n\n    if (objIsWrapped || othIsWrapped) {\n      var objUnwrapped = objIsWrapped ? object.value() : object,\n          othUnwrapped = othIsWrapped ? other.value() : other;\n\n      stack || (stack = new Stack);\n      return equalFunc(objUnwrapped, othUnwrapped, customizer, bitmask, stack);\n    }\n  }\n  if (!isSameTag) {\n    return false;\n  }\n  stack || (stack = new Stack);\n  return equalObjects(object, other, equalFunc, customizer, bitmask, stack);\n}\n\n/**\n * The base implementation of `_.isMatch` without support for iteratee shorthands.\n *\n * @private\n * @param {Object} object The object to inspect.\n * @param {Object} source The object of property values to match.\n * @param {Array} matchData The property names, values, and compare flags to match.\n * @param {Function} [customizer] The function to customize comparisons.\n * @returns {boolean} Returns `true` if `object` is a match, else `false`.\n */\nfunction baseIsMatch(object, source, matchData, customizer) {\n  var index = matchData.length,\n      length = index,\n      noCustomizer = !customizer;\n\n  if (object == null) {\n    return !length;\n  }\n  object = Object(object);\n  while (index--) {\n    var data = matchData[index];\n    if ((noCustomizer && data[2])\n          ? data[1] !== object[data[0]]\n          : !(data[0] in object)\n        ) {\n      return false;\n    }\n  }\n  while (++index < length) {\n    data = matchData[index];\n    var key = data[0],\n        objValue = object[key],\n        srcValue = data[1];\n\n    if (noCustomizer && data[2]) {\n      if (objValue === undefined && !(key in object)) {\n        return false;\n      }\n    } else {\n      var stack = new Stack;\n      if (customizer) {\n        var result = customizer(objValue, srcValue, key, object, source, stack);\n      }\n      if (!(result === undefined\n            ? baseIsEqual(srcValue, objValue, customizer, UNORDERED_COMPARE_FLAG | PARTIAL_COMPARE_FLAG, stack)\n            : result\n          )) {\n        return false;\n      }\n    }\n  }\n  return true;\n}\n\n/**\n * The base implementation of `_.isNative` without bad shim checks.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a native function,\n *  else `false`.\n */\nfunction baseIsNative(value) {\n  if (!isObject(value) || isMasked(value)) {\n    return false;\n  }\n  var pattern = (isFunction(value) || isHostObject(value)) ? reIsNative : reIsHostCtor;\n  return pattern.test(toSource(value));\n}\n\n/**\n * The base implementation of `_.isTypedArray` without Node.js optimizations.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a typed array, else `false`.\n */\nfunction baseIsTypedArray(value) {\n  return isObjectLike(value) &&\n    isLength(value.length) && !!typedArrayTags[objectToString.call(value)];\n}\n\n/**\n * The base implementation of `_.iteratee`.\n *\n * @private\n * @param {*} [value=_.identity] The value to convert to an iteratee.\n * @returns {Function} Returns the iteratee.\n */\nfunction baseIteratee(value) {\n  // Don't store the `typeof` result in a variable to avoid a JIT bug in Safari 9.\n  // See https://bugs.webkit.org/show_bug.cgi?id=156034 for more details.\n  if (typeof value == 'function') {\n    return value;\n  }\n  if (value == null) {\n    return identity;\n  }\n  if (typeof value == 'object') {\n    return isArray(value)\n      ? baseMatchesProperty(value[0], value[1])\n      : baseMatches(value);\n  }\n  return property(value);\n}\n\n/**\n * The base implementation of `_.keys` which doesn't treat sparse arrays as dense.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n */\nfunction baseKeys(object) {\n  if (!isPrototype(object)) {\n    return nativeKeys(object);\n  }\n  var result = [];\n  for (var key in Object(object)) {\n    if (hasOwnProperty.call(object, key) && key != 'constructor') {\n      result.push(key);\n    }\n  }\n  return result;\n}\n\n/**\n * The base implementation of `_.map` without support for iteratee shorthands.\n *\n * @private\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array} Returns the new mapped array.\n */\nfunction baseMap(collection, iteratee) {\n  var index = -1,\n      result = isArrayLike(collection) ? Array(collection.length) : [];\n\n  baseEach(collection, function(value, key, collection) {\n    result[++index] = iteratee(value, key, collection);\n  });\n  return result;\n}\n\n/**\n * The base implementation of `_.matches` which doesn't clone `source`.\n *\n * @private\n * @param {Object} source The object of property values to match.\n * @returns {Function} Returns the new spec function.\n */\nfunction baseMatches(source) {\n  var matchData = getMatchData(source);\n  if (matchData.length == 1 && matchData[0][2]) {\n    return matchesStrictComparable(matchData[0][0], matchData[0][1]);\n  }\n  return function(object) {\n    return object === source || baseIsMatch(object, source, matchData);\n  };\n}\n\n/**\n * The base implementation of `_.matchesProperty` which doesn't clone `srcValue`.\n *\n * @private\n * @param {string} path The path of the property to get.\n * @param {*} srcValue The value to match.\n * @returns {Function} Returns the new spec function.\n */\nfunction baseMatchesProperty(path, srcValue) {\n  if (isKey(path) && isStrictComparable(srcValue)) {\n    return matchesStrictComparable(toKey(path), srcValue);\n  }\n  return function(object) {\n    var objValue = get(object, path);\n    return (objValue === undefined && objValue === srcValue)\n      ? hasIn(object, path)\n      : baseIsEqual(srcValue, objValue, undefined, UNORDERED_COMPARE_FLAG | PARTIAL_COMPARE_FLAG);\n  };\n}\n\n/**\n * The base implementation of `_.orderBy` without param guards.\n *\n * @private\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function[]|Object[]|string[]} iteratees The iteratees to sort by.\n * @param {string[]} orders The sort orders of `iteratees`.\n * @returns {Array} Returns the new sorted array.\n */\nfunction baseOrderBy(collection, iteratees, orders) {\n  var index = -1;\n  iteratees = arrayMap(iteratees.length ? iteratees : [identity], baseUnary(baseIteratee));\n\n  var result = baseMap(collection, function(value, key, collection) {\n    var criteria = arrayMap(iteratees, function(iteratee) {\n      return iteratee(value);\n    });\n    return { 'criteria': criteria, 'index': ++index, 'value': value };\n  });\n\n  return baseSortBy(result, function(object, other) {\n    return compareMultiple(object, other, orders);\n  });\n}\n\n/**\n * A specialized version of `baseProperty` which supports deep paths.\n *\n * @private\n * @param {Array|string} path The path of the property to get.\n * @returns {Function} Returns the new accessor function.\n */\nfunction basePropertyDeep(path) {\n  return function(object) {\n    return baseGet(object, path);\n  };\n}\n\n/**\n * The base implementation of `_.rest` which doesn't validate or coerce arguments.\n *\n * @private\n * @param {Function} func The function to apply a rest parameter to.\n * @param {number} [start=func.length-1] The start position of the rest parameter.\n * @returns {Function} Returns the new function.\n */\nfunction baseRest(func, start) {\n  start = nativeMax(start === undefined ? (func.length - 1) : start, 0);\n  return function() {\n    var args = arguments,\n        index = -1,\n        length = nativeMax(args.length - start, 0),\n        array = Array(length);\n\n    while (++index < length) {\n      array[index] = args[start + index];\n    }\n    index = -1;\n    var otherArgs = Array(start + 1);\n    while (++index < start) {\n      otherArgs[index] = args[index];\n    }\n    otherArgs[start] = array;\n    return apply(func, this, otherArgs);\n  };\n}\n\n/**\n * The base implementation of `_.toString` which doesn't convert nullish\n * values to empty strings.\n *\n * @private\n * @param {*} value The value to process.\n * @returns {string} Returns the string.\n */\nfunction baseToString(value) {\n  // Exit early for strings to avoid a performance hit in some environments.\n  if (typeof value == 'string') {\n    return value;\n  }\n  if (isSymbol(value)) {\n    return symbolToString ? symbolToString.call(value) : '';\n  }\n  var result = (value + '');\n  return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result;\n}\n\n/**\n * Casts `value` to a path array if it's not one.\n *\n * @private\n * @param {*} value The value to inspect.\n * @returns {Array} Returns the cast property path array.\n */\nfunction castPath(value) {\n  return isArray(value) ? value : stringToPath(value);\n}\n\n/**\n * Compares values to sort them in ascending order.\n *\n * @private\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {number} Returns the sort order indicator for `value`.\n */\nfunction compareAscending(value, other) {\n  if (value !== other) {\n    var valIsDefined = value !== undefined,\n        valIsNull = value === null,\n        valIsReflexive = value === value,\n        valIsSymbol = isSymbol(value);\n\n    var othIsDefined = other !== undefined,\n        othIsNull = other === null,\n        othIsReflexive = other === other,\n        othIsSymbol = isSymbol(other);\n\n    if ((!othIsNull && !othIsSymbol && !valIsSymbol && value > other) ||\n        (valIsSymbol && othIsDefined && othIsReflexive && !othIsNull && !othIsSymbol) ||\n        (valIsNull && othIsDefined && othIsReflexive) ||\n        (!valIsDefined && othIsReflexive) ||\n        !valIsReflexive) {\n      return 1;\n    }\n    if ((!valIsNull && !valIsSymbol && !othIsSymbol && value < other) ||\n        (othIsSymbol && valIsDefined && valIsReflexive && !valIsNull && !valIsSymbol) ||\n        (othIsNull && valIsDefined && valIsReflexive) ||\n        (!othIsDefined && valIsReflexive) ||\n        !othIsReflexive) {\n      return -1;\n    }\n  }\n  return 0;\n}\n\n/**\n * Used by `_.orderBy` to compare multiple properties of a value to another\n * and stable sort them.\n *\n * If `orders` is unspecified, all values are sorted in ascending order. Otherwise,\n * specify an order of \"desc\" for descending or \"asc\" for ascending sort order\n * of corresponding values.\n *\n * @private\n * @param {Object} object The object to compare.\n * @param {Object} other The other object to compare.\n * @param {boolean[]|string[]} orders The order to sort by for each property.\n * @returns {number} Returns the sort order indicator for `object`.\n */\nfunction compareMultiple(object, other, orders) {\n  var index = -1,\n      objCriteria = object.criteria,\n      othCriteria = other.criteria,\n      length = objCriteria.length,\n      ordersLength = orders.length;\n\n  while (++index < length) {\n    var result = compareAscending(objCriteria[index], othCriteria[index]);\n    if (result) {\n      if (index >= ordersLength) {\n        return result;\n      }\n      var order = orders[index];\n      return result * (order == 'desc' ? -1 : 1);\n    }\n  }\n  // Fixes an `Array#sort` bug in the JS engine embedded in Adobe applications\n  // that causes it, under certain circumstances, to provide the same value for\n  // `object` and `other`. See https://github.com/jashkenas/underscore/pull/1247\n  // for more details.\n  //\n  // This also ensures a stable sort in V8 and other engines.\n  // See https://bugs.chromium.org/p/v8/issues/detail?id=90 for more details.\n  return object.index - other.index;\n}\n\n/**\n * Creates a `baseEach` or `baseEachRight` function.\n *\n * @private\n * @param {Function} eachFunc The function to iterate over a collection.\n * @param {boolean} [fromRight] Specify iterating from right to left.\n * @returns {Function} Returns the new base function.\n */\nfunction createBaseEach(eachFunc, fromRight) {\n  return function(collection, iteratee) {\n    if (collection == null) {\n      return collection;\n    }\n    if (!isArrayLike(collection)) {\n      return eachFunc(collection, iteratee);\n    }\n    var length = collection.length,\n        index = fromRight ? length : -1,\n        iterable = Object(collection);\n\n    while ((fromRight ? index-- : ++index < length)) {\n      if (iteratee(iterable[index], index, iterable) === false) {\n        break;\n      }\n    }\n    return collection;\n  };\n}\n\n/**\n * Creates a base function for methods like `_.forIn` and `_.forOwn`.\n *\n * @private\n * @param {boolean} [fromRight] Specify iterating from right to left.\n * @returns {Function} Returns the new base function.\n */\nfunction createBaseFor(fromRight) {\n  return function(object, iteratee, keysFunc) {\n    var index = -1,\n        iterable = Object(object),\n        props = keysFunc(object),\n        length = props.length;\n\n    while (length--) {\n      var key = props[fromRight ? length : ++index];\n      if (iteratee(iterable[key], key, iterable) === false) {\n        break;\n      }\n    }\n    return object;\n  };\n}\n\n/**\n * A specialized version of `baseIsEqualDeep` for arrays with support for\n * partial deep comparisons.\n *\n * @private\n * @param {Array} array The array to compare.\n * @param {Array} other The other array to compare.\n * @param {Function} equalFunc The function to determine equivalents of values.\n * @param {Function} customizer The function to customize comparisons.\n * @param {number} bitmask The bitmask of comparison flags. See `baseIsEqual`\n *  for more details.\n * @param {Object} stack Tracks traversed `array` and `other` objects.\n * @returns {boolean} Returns `true` if the arrays are equivalent, else `false`.\n */\nfunction equalArrays(array, other, equalFunc, customizer, bitmask, stack) {\n  var isPartial = bitmask & PARTIAL_COMPARE_FLAG,\n      arrLength = array.length,\n      othLength = other.length;\n\n  if (arrLength != othLength && !(isPartial && othLength > arrLength)) {\n    return false;\n  }\n  // Assume cyclic values are equal.\n  var stacked = stack.get(array);\n  if (stacked && stack.get(other)) {\n    return stacked == other;\n  }\n  var index = -1,\n      result = true,\n      seen = (bitmask & UNORDERED_COMPARE_FLAG) ? new SetCache : undefined;\n\n  stack.set(array, other);\n  stack.set(other, array);\n\n  // Ignore non-index properties.\n  while (++index < arrLength) {\n    var arrValue = array[index],\n        othValue = other[index];\n\n    if (customizer) {\n      var compared = isPartial\n        ? customizer(othValue, arrValue, index, other, array, stack)\n        : customizer(arrValue, othValue, index, array, other, stack);\n    }\n    if (compared !== undefined) {\n      if (compared) {\n        continue;\n      }\n      result = false;\n      break;\n    }\n    // Recursively compare arrays (susceptible to call stack limits).\n    if (seen) {\n      if (!arraySome(other, function(othValue, othIndex) {\n            if (!seen.has(othIndex) &&\n                (arrValue === othValue || equalFunc(arrValue, othValue, customizer, bitmask, stack))) {\n              return seen.add(othIndex);\n            }\n          })) {\n        result = false;\n        break;\n      }\n    } else if (!(\n          arrValue === othValue ||\n            equalFunc(arrValue, othValue, customizer, bitmask, stack)\n        )) {\n      result = false;\n      break;\n    }\n  }\n  stack['delete'](array);\n  stack['delete'](other);\n  return result;\n}\n\n/**\n * A specialized version of `baseIsEqualDeep` for comparing objects of\n * the same `toStringTag`.\n *\n * **Note:** This function only supports comparing values with tags of\n * `Boolean`, `Date`, `Error`, `Number`, `RegExp`, or `String`.\n *\n * @private\n * @param {Object} object The object to compare.\n * @param {Object} other The other object to compare.\n * @param {string} tag The `toStringTag` of the objects to compare.\n * @param {Function} equalFunc The function to determine equivalents of values.\n * @param {Function} customizer The function to customize comparisons.\n * @param {number} bitmask The bitmask of comparison flags. See `baseIsEqual`\n *  for more details.\n * @param {Object} stack Tracks traversed `object` and `other` objects.\n * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.\n */\nfunction equalByTag(object, other, tag, equalFunc, customizer, bitmask, stack) {\n  switch (tag) {\n    case dataViewTag:\n      if ((object.byteLength != other.byteLength) ||\n          (object.byteOffset != other.byteOffset)) {\n        return false;\n      }\n      object = object.buffer;\n      other = other.buffer;\n\n    case arrayBufferTag:\n      if ((object.byteLength != other.byteLength) ||\n          !equalFunc(new Uint8Array(object), new Uint8Array(other))) {\n        return false;\n      }\n      return true;\n\n    case boolTag:\n    case dateTag:\n    case numberTag:\n      // Coerce booleans to `1` or `0` and dates to milliseconds.\n      // Invalid dates are coerced to `NaN`.\n      return eq(+object, +other);\n\n    case errorTag:\n      return object.name == other.name && object.message == other.message;\n\n    case regexpTag:\n    case stringTag:\n      // Coerce regexes to strings and treat strings, primitives and objects,\n      // as equal. See http://www.ecma-international.org/ecma-262/7.0/#sec-regexp.prototype.tostring\n      // for more details.\n      return object == (other + '');\n\n    case mapTag:\n      var convert = mapToArray;\n\n    case setTag:\n      var isPartial = bitmask & PARTIAL_COMPARE_FLAG;\n      convert || (convert = setToArray);\n\n      if (object.size != other.size && !isPartial) {\n        return false;\n      }\n      // Assume cyclic values are equal.\n      var stacked = stack.get(object);\n      if (stacked) {\n        return stacked == other;\n      }\n      bitmask |= UNORDERED_COMPARE_FLAG;\n\n      // Recursively compare objects (susceptible to call stack limits).\n      stack.set(object, other);\n      var result = equalArrays(convert(object), convert(other), equalFunc, customizer, bitmask, stack);\n      stack['delete'](object);\n      return result;\n\n    case symbolTag:\n      if (symbolValueOf) {\n        return symbolValueOf.call(object) == symbolValueOf.call(other);\n      }\n  }\n  return false;\n}\n\n/**\n * A specialized version of `baseIsEqualDeep` for objects with support for\n * partial deep comparisons.\n *\n * @private\n * @param {Object} object The object to compare.\n * @param {Object} other The other object to compare.\n * @param {Function} equalFunc The function to determine equivalents of values.\n * @param {Function} customizer The function to customize comparisons.\n * @param {number} bitmask The bitmask of comparison flags. See `baseIsEqual`\n *  for more details.\n * @param {Object} stack Tracks traversed `object` and `other` objects.\n * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.\n */\nfunction equalObjects(object, other, equalFunc, customizer, bitmask, stack) {\n  var isPartial = bitmask & PARTIAL_COMPARE_FLAG,\n      objProps = keys(object),\n      objLength = objProps.length,\n      othProps = keys(other),\n      othLength = othProps.length;\n\n  if (objLength != othLength && !isPartial) {\n    return false;\n  }\n  var index = objLength;\n  while (index--) {\n    var key = objProps[index];\n    if (!(isPartial ? key in other : hasOwnProperty.call(other, key))) {\n      return false;\n    }\n  }\n  // Assume cyclic values are equal.\n  var stacked = stack.get(object);\n  if (stacked && stack.get(other)) {\n    return stacked == other;\n  }\n  var result = true;\n  stack.set(object, other);\n  stack.set(other, object);\n\n  var skipCtor = isPartial;\n  while (++index < objLength) {\n    key = objProps[index];\n    var objValue = object[key],\n        othValue = other[key];\n\n    if (customizer) {\n      var compared = isPartial\n        ? customizer(othValue, objValue, key, other, object, stack)\n        : customizer(objValue, othValue, key, object, other, stack);\n    }\n    // Recursively compare objects (susceptible to call stack limits).\n    if (!(compared === undefined\n          ? (objValue === othValue || equalFunc(objValue, othValue, customizer, bitmask, stack))\n          : compared\n        )) {\n      result = false;\n      break;\n    }\n    skipCtor || (skipCtor = key == 'constructor');\n  }\n  if (result && !skipCtor) {\n    var objCtor = object.constructor,\n        othCtor = other.constructor;\n\n    // Non `Object` object instances with different constructors are not equal.\n    if (objCtor != othCtor &&\n        ('constructor' in object && 'constructor' in other) &&\n        !(typeof objCtor == 'function' && objCtor instanceof objCtor &&\n          typeof othCtor == 'function' && othCtor instanceof othCtor)) {\n      result = false;\n    }\n  }\n  stack['delete'](object);\n  stack['delete'](other);\n  return result;\n}\n\n/**\n * Gets the data for `map`.\n *\n * @private\n * @param {Object} map The map to query.\n * @param {string} key The reference key.\n * @returns {*} Returns the map data.\n */\nfunction getMapData(map, key) {\n  var data = map.__data__;\n  return isKeyable(key)\n    ? data[typeof key == 'string' ? 'string' : 'hash']\n    : data.map;\n}\n\n/**\n * Gets the property names, values, and compare flags of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the match data of `object`.\n */\nfunction getMatchData(object) {\n  var result = keys(object),\n      length = result.length;\n\n  while (length--) {\n    var key = result[length],\n        value = object[key];\n\n    result[length] = [key, value, isStrictComparable(value)];\n  }\n  return result;\n}\n\n/**\n * Gets the native function at `key` of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {string} key The key of the method to get.\n * @returns {*} Returns the function if it's native, else `undefined`.\n */\nfunction getNative(object, key) {\n  var value = getValue(object, key);\n  return baseIsNative(value) ? value : undefined;\n}\n\n/**\n * Gets the `toStringTag` of `value`.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the `toStringTag`.\n */\nvar getTag = baseGetTag;\n\n// Fallback for data views, maps, sets, and weak maps in IE 11,\n// for data views in Edge < 14, and promises in Node.js.\nif ((DataView && getTag(new DataView(new ArrayBuffer(1))) != dataViewTag) ||\n    (Map && getTag(new Map) != mapTag) ||\n    (Promise && getTag(Promise.resolve()) != promiseTag) ||\n    (Set && getTag(new Set) != setTag) ||\n    (WeakMap && getTag(new WeakMap) != weakMapTag)) {\n  getTag = function(value) {\n    var result = objectToString.call(value),\n        Ctor = result == objectTag ? value.constructor : undefined,\n        ctorString = Ctor ? toSource(Ctor) : undefined;\n\n    if (ctorString) {\n      switch (ctorString) {\n        case dataViewCtorString: return dataViewTag;\n        case mapCtorString: return mapTag;\n        case promiseCtorString: return promiseTag;\n        case setCtorString: return setTag;\n        case weakMapCtorString: return weakMapTag;\n      }\n    }\n    return result;\n  };\n}\n\n/**\n * Checks if `path` exists on `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {Array|string} path The path to check.\n * @param {Function} hasFunc The function to check properties.\n * @returns {boolean} Returns `true` if `path` exists, else `false`.\n */\nfunction hasPath(object, path, hasFunc) {\n  path = isKey(path, object) ? [path] : castPath(path);\n\n  var result,\n      index = -1,\n      length = path.length;\n\n  while (++index < length) {\n    var key = toKey(path[index]);\n    if (!(result = object != null && hasFunc(object, key))) {\n      break;\n    }\n    object = object[key];\n  }\n  if (result) {\n    return result;\n  }\n  var length = object ? object.length : 0;\n  return !!length && isLength(length) && isIndex(key, length) &&\n    (isArray(object) || isArguments(object));\n}\n\n/**\n * Checks if `value` is a flattenable `arguments` object or array.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is flattenable, else `false`.\n */\nfunction isFlattenable(value) {\n  return isArray(value) || isArguments(value) ||\n    !!(spreadableSymbol && value && value[spreadableSymbol]);\n}\n\n/**\n * Checks if `value` is a valid array-like index.\n *\n * @private\n * @param {*} value The value to check.\n * @param {number} [length=MAX_SAFE_INTEGER] The upper bounds of a valid index.\n * @returns {boolean} Returns `true` if `value` is a valid index, else `false`.\n */\nfunction isIndex(value, length) {\n  length = length == null ? MAX_SAFE_INTEGER : length;\n  return !!length &&\n    (typeof value == 'number' || reIsUint.test(value)) &&\n    (value > -1 && value % 1 == 0 && value < length);\n}\n\n/**\n * Checks if the given arguments are from an iteratee call.\n *\n * @private\n * @param {*} value The potential iteratee value argument.\n * @param {*} index The potential iteratee index or key argument.\n * @param {*} object The potential iteratee object argument.\n * @returns {boolean} Returns `true` if the arguments are from an iteratee call,\n *  else `false`.\n */\nfunction isIterateeCall(value, index, object) {\n  if (!isObject(object)) {\n    return false;\n  }\n  var type = typeof index;\n  if (type == 'number'\n        ? (isArrayLike(object) && isIndex(index, object.length))\n        : (type == 'string' && index in object)\n      ) {\n    return eq(object[index], value);\n  }\n  return false;\n}\n\n/**\n * Checks if `value` is a property name and not a property path.\n *\n * @private\n * @param {*} value The value to check.\n * @param {Object} [object] The object to query keys on.\n * @returns {boolean} Returns `true` if `value` is a property name, else `false`.\n */\nfunction isKey(value, object) {\n  if (isArray(value)) {\n    return false;\n  }\n  var type = typeof value;\n  if (type == 'number' || type == 'symbol' || type == 'boolean' ||\n      value == null || isSymbol(value)) {\n    return true;\n  }\n  return reIsPlainProp.test(value) || !reIsDeepProp.test(value) ||\n    (object != null && value in Object(object));\n}\n\n/**\n * Checks if `value` is suitable for use as unique object key.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is suitable, else `false`.\n */\nfunction isKeyable(value) {\n  var type = typeof value;\n  return (type == 'string' || type == 'number' || type == 'symbol' || type == 'boolean')\n    ? (value !== '__proto__')\n    : (value === null);\n}\n\n/**\n * Checks if `func` has its source masked.\n *\n * @private\n * @param {Function} func The function to check.\n * @returns {boolean} Returns `true` if `func` is masked, else `false`.\n */\nfunction isMasked(func) {\n  return !!maskSrcKey && (maskSrcKey in func);\n}\n\n/**\n * Checks if `value` is likely a prototype object.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a prototype, else `false`.\n */\nfunction isPrototype(value) {\n  var Ctor = value && value.constructor,\n      proto = (typeof Ctor == 'function' && Ctor.prototype) || objectProto;\n\n  return value === proto;\n}\n\n/**\n * Checks if `value` is suitable for strict equality comparisons, i.e. `===`.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` if suitable for strict\n *  equality comparisons, else `false`.\n */\nfunction isStrictComparable(value) {\n  return value === value && !isObject(value);\n}\n\n/**\n * A specialized version of `matchesProperty` for source values suitable\n * for strict equality comparisons, i.e. `===`.\n *\n * @private\n * @param {string} key The key of the property to get.\n * @param {*} srcValue The value to match.\n * @returns {Function} Returns the new spec function.\n */\nfunction matchesStrictComparable(key, srcValue) {\n  return function(object) {\n    if (object == null) {\n      return false;\n    }\n    return object[key] === srcValue &&\n      (srcValue !== undefined || (key in Object(object)));\n  };\n}\n\n/**\n * Converts `string` to a property path array.\n *\n * @private\n * @param {string} string The string to convert.\n * @returns {Array} Returns the property path array.\n */\nvar stringToPath = memoize(function(string) {\n  string = toString(string);\n\n  var result = [];\n  if (reLeadingDot.test(string)) {\n    result.push('');\n  }\n  string.replace(rePropName, function(match, number, quote, string) {\n    result.push(quote ? string.replace(reEscapeChar, '$1') : (number || match));\n  });\n  return result;\n});\n\n/**\n * Converts `value` to a string key if it's not a string or symbol.\n *\n * @private\n * @param {*} value The value to inspect.\n * @returns {string|symbol} Returns the key.\n */\nfunction toKey(value) {\n  if (typeof value == 'string' || isSymbol(value)) {\n    return value;\n  }\n  var result = (value + '');\n  return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result;\n}\n\n/**\n * Converts `func` to its source code.\n *\n * @private\n * @param {Function} func The function to process.\n * @returns {string} Returns the source code.\n */\nfunction toSource(func) {\n  if (func != null) {\n    try {\n      return funcToString.call(func);\n    } catch (e) {}\n    try {\n      return (func + '');\n    } catch (e) {}\n  }\n  return '';\n}\n\n/**\n * Creates an array of elements, sorted in ascending order by the results of\n * running each element in a collection thru each iteratee. This method\n * performs a stable sort, that is, it preserves the original sort order of\n * equal elements. The iteratees are invoked with one argument: (value).\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {...(Function|Function[])} [iteratees=[_.identity]]\n *  The iteratees to sort by.\n * @returns {Array} Returns the new sorted array.\n * @example\n *\n * var users = [\n *   { 'user': 'fred',   'age': 48 },\n *   { 'user': 'barney', 'age': 36 },\n *   { 'user': 'fred',   'age': 40 },\n *   { 'user': 'barney', 'age': 34 }\n * ];\n *\n * _.sortBy(users, function(o) { return o.user; });\n * // => objects for [['barney', 36], ['barney', 34], ['fred', 48], ['fred', 40]]\n *\n * _.sortBy(users, ['user', 'age']);\n * // => objects for [['barney', 34], ['barney', 36], ['fred', 40], ['fred', 48]]\n *\n * _.sortBy(users, 'user', function(o) {\n *   return Math.floor(o.age / 10);\n * });\n * // => objects for [['barney', 36], ['barney', 34], ['fred', 48], ['fred', 40]]\n */\nvar sortBy = baseRest(function(collection, iteratees) {\n  if (collection == null) {\n    return [];\n  }\n  var length = iteratees.length;\n  if (length > 1 && isIterateeCall(collection, iteratees[0], iteratees[1])) {\n    iteratees = [];\n  } else if (length > 2 && isIterateeCall(iteratees[0], iteratees[1], iteratees[2])) {\n    iteratees = [iteratees[0]];\n  }\n  return baseOrderBy(collection, baseFlatten(iteratees, 1), []);\n});\n\n/**\n * Creates a function that memoizes the result of `func`. If `resolver` is\n * provided, it determines the cache key for storing the result based on the\n * arguments provided to the memoized function. By default, the first argument\n * provided to the memoized function is used as the map cache key. The `func`\n * is invoked with the `this` binding of the memoized function.\n *\n * **Note:** The cache is exposed as the `cache` property on the memoized\n * function. Its creation may be customized by replacing the `_.memoize.Cache`\n * constructor with one whose instances implement the\n * [`Map`](http://ecma-international.org/ecma-262/7.0/#sec-properties-of-the-map-prototype-object)\n * method interface of `delete`, `get`, `has`, and `set`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {Function} func The function to have its output memoized.\n * @param {Function} [resolver] The function to resolve the cache key.\n * @returns {Function} Returns the new memoized function.\n * @example\n *\n * var object = { 'a': 1, 'b': 2 };\n * var other = { 'c': 3, 'd': 4 };\n *\n * var values = _.memoize(_.values);\n * values(object);\n * // => [1, 2]\n *\n * values(other);\n * // => [3, 4]\n *\n * object.a = 2;\n * values(object);\n * // => [1, 2]\n *\n * // Modify the result cache.\n * values.cache.set(object, ['a', 'b']);\n * values(object);\n * // => ['a', 'b']\n *\n * // Replace `_.memoize.Cache`.\n * _.memoize.Cache = WeakMap;\n */\nfunction memoize(func, resolver) {\n  if (typeof func != 'function' || (resolver && typeof resolver != 'function')) {\n    throw new TypeError(FUNC_ERROR_TEXT);\n  }\n  var memoized = function() {\n    var args = arguments,\n        key = resolver ? resolver.apply(this, args) : args[0],\n        cache = memoized.cache;\n\n    if (cache.has(key)) {\n      return cache.get(key);\n    }\n    var result = func.apply(this, args);\n    memoized.cache = cache.set(key, result);\n    return result;\n  };\n  memoized.cache = new (memoize.Cache || MapCache);\n  return memoized;\n}\n\n// Assign cache to `_.memoize`.\nmemoize.Cache = MapCache;\n\n/**\n * Performs a\n * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * comparison between two values to determine if they are equivalent.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n * @example\n *\n * var object = { 'a': 1 };\n * var other = { 'a': 1 };\n *\n * _.eq(object, object);\n * // => true\n *\n * _.eq(object, other);\n * // => false\n *\n * _.eq('a', 'a');\n * // => true\n *\n * _.eq('a', Object('a'));\n * // => false\n *\n * _.eq(NaN, NaN);\n * // => true\n */\nfunction eq(value, other) {\n  return value === other || (value !== value && other !== other);\n}\n\n/**\n * Checks if `value` is likely an `arguments` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an `arguments` object,\n *  else `false`.\n * @example\n *\n * _.isArguments(function() { return arguments; }());\n * // => true\n *\n * _.isArguments([1, 2, 3]);\n * // => false\n */\nfunction isArguments(value) {\n  // Safari 8.1 makes `arguments.callee` enumerable in strict mode.\n  return isArrayLikeObject(value) && hasOwnProperty.call(value, 'callee') &&\n    (!propertyIsEnumerable.call(value, 'callee') || objectToString.call(value) == argsTag);\n}\n\n/**\n * Checks if `value` is classified as an `Array` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an array, else `false`.\n * @example\n *\n * _.isArray([1, 2, 3]);\n * // => true\n *\n * _.isArray(document.body.children);\n * // => false\n *\n * _.isArray('abc');\n * // => false\n *\n * _.isArray(_.noop);\n * // => false\n */\nvar isArray = Array.isArray;\n\n/**\n * Checks if `value` is array-like. A value is considered array-like if it's\n * not a function and has a `value.length` that's an integer greater than or\n * equal to `0` and less than or equal to `Number.MAX_SAFE_INTEGER`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is array-like, else `false`.\n * @example\n *\n * _.isArrayLike([1, 2, 3]);\n * // => true\n *\n * _.isArrayLike(document.body.children);\n * // => true\n *\n * _.isArrayLike('abc');\n * // => true\n *\n * _.isArrayLike(_.noop);\n * // => false\n */\nfunction isArrayLike(value) {\n  return value != null && isLength(value.length) && !isFunction(value);\n}\n\n/**\n * This method is like `_.isArrayLike` except that it also checks if `value`\n * is an object.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an array-like object,\n *  else `false`.\n * @example\n *\n * _.isArrayLikeObject([1, 2, 3]);\n * // => true\n *\n * _.isArrayLikeObject(document.body.children);\n * // => true\n *\n * _.isArrayLikeObject('abc');\n * // => false\n *\n * _.isArrayLikeObject(_.noop);\n * // => false\n */\nfunction isArrayLikeObject(value) {\n  return isObjectLike(value) && isArrayLike(value);\n}\n\n/**\n * Checks if `value` is classified as a `Function` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a function, else `false`.\n * @example\n *\n * _.isFunction(_);\n * // => true\n *\n * _.isFunction(/abc/);\n * // => false\n */\nfunction isFunction(value) {\n  // The use of `Object#toString` avoids issues with the `typeof` operator\n  // in Safari 8-9 which returns 'object' for typed array and other constructors.\n  var tag = isObject(value) ? objectToString.call(value) : '';\n  return tag == funcTag || tag == genTag;\n}\n\n/**\n * Checks if `value` is a valid array-like length.\n *\n * **Note:** This method is loosely based on\n * [`ToLength`](http://ecma-international.org/ecma-262/7.0/#sec-tolength).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a valid length, else `false`.\n * @example\n *\n * _.isLength(3);\n * // => true\n *\n * _.isLength(Number.MIN_VALUE);\n * // => false\n *\n * _.isLength(Infinity);\n * // => false\n *\n * _.isLength('3');\n * // => false\n */\nfunction isLength(value) {\n  return typeof value == 'number' &&\n    value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER;\n}\n\n/**\n * Checks if `value` is the\n * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types)\n * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an object, else `false`.\n * @example\n *\n * _.isObject({});\n * // => true\n *\n * _.isObject([1, 2, 3]);\n * // => true\n *\n * _.isObject(_.noop);\n * // => true\n *\n * _.isObject(null);\n * // => false\n */\nfunction isObject(value) {\n  var type = typeof value;\n  return !!value && (type == 'object' || type == 'function');\n}\n\n/**\n * Checks if `value` is object-like. A value is object-like if it's not `null`\n * and has a `typeof` result of \"object\".\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is object-like, else `false`.\n * @example\n *\n * _.isObjectLike({});\n * // => true\n *\n * _.isObjectLike([1, 2, 3]);\n * // => true\n *\n * _.isObjectLike(_.noop);\n * // => false\n *\n * _.isObjectLike(null);\n * // => false\n */\nfunction isObjectLike(value) {\n  return !!value && typeof value == 'object';\n}\n\n/**\n * Checks if `value` is classified as a `Symbol` primitive or object.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a symbol, else `false`.\n * @example\n *\n * _.isSymbol(Symbol.iterator);\n * // => true\n *\n * _.isSymbol('abc');\n * // => false\n */\nfunction isSymbol(value) {\n  return typeof value == 'symbol' ||\n    (isObjectLike(value) && objectToString.call(value) == symbolTag);\n}\n\n/**\n * Checks if `value` is classified as a typed array.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a typed array, else `false`.\n * @example\n *\n * _.isTypedArray(new Uint8Array);\n * // => true\n *\n * _.isTypedArray([]);\n * // => false\n */\nvar isTypedArray = nodeIsTypedArray ? baseUnary(nodeIsTypedArray) : baseIsTypedArray;\n\n/**\n * Converts `value` to a string. An empty string is returned for `null`\n * and `undefined` values. The sign of `-0` is preserved.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to process.\n * @returns {string} Returns the string.\n * @example\n *\n * _.toString(null);\n * // => ''\n *\n * _.toString(-0);\n * // => '-0'\n *\n * _.toString([1, 2, 3]);\n * // => '1,2,3'\n */\nfunction toString(value) {\n  return value == null ? '' : baseToString(value);\n}\n\n/**\n * Gets the value at `path` of `object`. If the resolved value is\n * `undefined`, the `defaultValue` is returned in its place.\n *\n * @static\n * @memberOf _\n * @since 3.7.0\n * @category Object\n * @param {Object} object The object to query.\n * @param {Array|string} path The path of the property to get.\n * @param {*} [defaultValue] The value returned for `undefined` resolved values.\n * @returns {*} Returns the resolved value.\n * @example\n *\n * var object = { 'a': [{ 'b': { 'c': 3 } }] };\n *\n * _.get(object, 'a[0].b.c');\n * // => 3\n *\n * _.get(object, ['a', '0', 'b', 'c']);\n * // => 3\n *\n * _.get(object, 'a.b.c', 'default');\n * // => 'default'\n */\nfunction get(object, path, defaultValue) {\n  var result = object == null ? undefined : baseGet(object, path);\n  return result === undefined ? defaultValue : result;\n}\n\n/**\n * Checks if `path` is a direct or inherited property of `object`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Object\n * @param {Object} object The object to query.\n * @param {Array|string} path The path to check.\n * @returns {boolean} Returns `true` if `path` exists, else `false`.\n * @example\n *\n * var object = _.create({ 'a': _.create({ 'b': 2 }) });\n *\n * _.hasIn(object, 'a');\n * // => true\n *\n * _.hasIn(object, 'a.b');\n * // => true\n *\n * _.hasIn(object, ['a', 'b']);\n * // => true\n *\n * _.hasIn(object, 'b');\n * // => false\n */\nfunction hasIn(object, path) {\n  return object != null && hasPath(object, path, baseHasIn);\n}\n\n/**\n * Creates an array of the own enumerable property names of `object`.\n *\n * **Note:** Non-object values are coerced to objects. See the\n * [ES spec](http://ecma-international.org/ecma-262/7.0/#sec-object.keys)\n * for more details.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Object\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n * @example\n *\n * function Foo() {\n *   this.a = 1;\n *   this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.keys(new Foo);\n * // => ['a', 'b'] (iteration order is not guaranteed)\n *\n * _.keys('hi');\n * // => ['0', '1']\n */\nfunction keys(object) {\n  return isArrayLike(object) ? arrayLikeKeys(object) : baseKeys(object);\n}\n\n/**\n * This method returns the first argument it receives.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Util\n * @param {*} value Any value.\n * @returns {*} Returns `value`.\n * @example\n *\n * var object = { 'a': 1 };\n *\n * console.log(_.identity(object) === object);\n * // => true\n */\nfunction identity(value) {\n  return value;\n}\n\n/**\n * Creates a function that returns the value at `path` of a given object.\n *\n * @static\n * @memberOf _\n * @since 2.4.0\n * @category Util\n * @param {Array|string} path The path of the property to get.\n * @returns {Function} Returns the new accessor function.\n * @example\n *\n * var objects = [\n *   { 'a': { 'b': 2 } },\n *   { 'a': { 'b': 1 } }\n * ];\n *\n * _.map(objects, _.property('a.b'));\n * // => [2, 1]\n *\n * _.map(_.sortBy(objects, _.property(['a', 'b'])), 'a.b');\n * // => [1, 2]\n */\nfunction property(path) {\n  return isKey(path) ? baseProperty(toKey(path)) : basePropertyDeep(path);\n}\n\nmodule.exports = sortBy;\n","<template>\n  <tr @click=\"toggleRow\" class=\"row-data\" :class=\"{ 'row-active': value }\">\n    <td>\n      <input\n        type=\"checkbox\"\n        :data-label=\"row.name\"\n        :value=\"row.id\"\n        v-model=\"value\"\n      />\n    </td>\n    <td>\n      {{ row.name }}\n      <a :href=\"row.site_url\" @click.stop class=\"info-link\" target=\"_blank\">\n        <span class=\"visually-hidden\">Details</span\n        ><i class=\"fa fa-info-circle\" aria-hidden=\"true\"></i>\n      </a>\n    </td>\n    <td v-if=\"hasJurisdiction\">\n      {{ row.jurisdiction.name }}\n    </td>\n    <td v-if=\"hasClassification\">\n      {{ (row.classification && row.classification.name) || '-' }}\n    </td>\n    <td v-if=\"hasCategories\">\n      {{ rowCategories }}\n    </td>\n  </tr>\n</template>\n\n<script>\nexport default {\n  name: 'PbTableRow',\n  props: ['name', 'row', 'selected', 'headers'],\n  computed: {\n    rowCategories() {\n      return this.row.categories.map((x) => x.name).join(', ')\n    },\n    value: {\n      get() {\n        return this.selected\n      },\n      set(value) {\n        this.$emit('update:row', { id: this.row.id, value })\n      }\n    },\n    hasJurisdiction() {\n      return this.headers.filter((x) => x.key === 'jurisdiction').length > 0\n    },\n    hasClassification() {\n      return this.headers.filter((x) => x.key === 'classification').length > 0\n    },\n    hasCategories() {\n      return this.headers.filter((x) => x.key === 'categories').length > 0\n    }\n  },\n  methods: {\n    toggleRow() {\n      this.value = !this.value\n    }\n  }\n}\n</script>\n\n<style lang=\"scss\" scoped>\n@import '../../../styles/variables';\n\n.row-data {\n  cursor: pointer;\n}\n\n.row-active {\n  background-color: lighten($success, 50%);\n}\n\n.info-link {\n  color: $gray-500;\n  &:hover {\n    color: $link-color;\n  }\n}\n</style>\n","<template>\n  <table class=\"table table-hover table-responsive\">\n    <thead>\n      <tr>\n        <th>\n          <!-- <input v-if=\"options.selectAllCheckbox\" type=\"checkbox\" v-model=\"selectAllRows\"/> -->\n        </th>\n        <th v-for=\"header in headers\" :key=\"header.label\" :class=\"header.class\">\n          {{ header.label }}\n          <i\n            v-if=\"options.sortableHeader && header.sortKey\"\n            class=\"sort-control fa\"\n            :class=\"{\n              'fa-sort-alpha-asc': sortOrder > 0,\n              'fa-sort-alpha-desc': sortOrder < 0,\n              'sort-control--active': sortHeader === header.label\n            }\"\n            @click=\"changeSort(header.label)\"\n          ></i>\n        </th>\n      </tr>\n    </thead>\n    <transition-group name=\"table\" tag=\"tbody\">\n      <PbTableRow\n        v-for=\"row in sortedRows\"\n        :key=\"row.id\"\n        :name=\"name\"\n        :row=\"row\"\n        :headers=\"headers\"\n        :selected=\"row.isSelected\"\n        @update:row=\"updateRow\"\n      ></PbTableRow>\n    </transition-group>\n  </table>\n</template>\n\n<script>\nimport { mapMutations } from 'vuex'\nimport sortBy from 'lodash.sortby'\n\nimport {\n  SET_STEP_REQUEST,\n  ADD_PUBLICBODY_ID,\n  REMOVE_PUBLICBODY_ID\n} from '../../store/mutation_types'\n\nimport PbTableRow from './pb-table-row'\n\nexport default {\n  name: 'PbTable',\n  props: ['name', 'headers', 'options', 'scope', 'i18n', 'rows'],\n  data() {\n    return {\n      sortHeader: null,\n      sortOrder: 1,\n      allRowsSelected: false\n    }\n  },\n  computed: {\n    sortedRows() {\n      let sortedRows = this.rows.slice()\n      if (this.sortHeader === null) {\n        return sortedRows\n      }\n      const header = this.headers.find((x) => x.label === this.sortHeader)\n      sortedRows = sortBy(sortedRows, header.sortKey)\n      if (this.sortOrder === -1) {\n        sortedRows = sortedRows.reverse()\n      }\n      return sortedRows\n    },\n    selectAllRows: {\n      get() {\n        return this.allRowsSelected\n      },\n      set() {\n        this.allRowsSelected = !this.allRowsSelected\n        this.$emit('selectAllRows', this.allRowsSelected)\n      }\n    }\n  },\n  methods: {\n    changeSort(sortHeader) {\n      if (sortHeader === this.sortHeader) {\n        this.sortOrder *= -1\n      }\n      this.sortHeader = sortHeader\n    },\n    updateRow({ id, value }) {\n      if (value) {\n        this.addPublicBodyId({\n          publicBodyId: id,\n          scope: this.scope\n        })\n      } else {\n        this.removePublicBodyId({\n          publicBodyId: id,\n          scope: this.scope\n        })\n      }\n    },\n    ...mapMutations({\n      setStepRequest: SET_STEP_REQUEST,\n      addPublicBodyId: ADD_PUBLICBODY_ID,\n      removePublicBodyId: REMOVE_PUBLICBODY_ID\n    })\n  },\n  components: {\n    PbTableRow\n  }\n}\n</script>\n\n<style lang=\"scss\" scoped>\n@import '../../../styles/variables';\n\n.sort-control {\n  cursor: pointer;\n  opacity: 0.3;\n}\n.sort-control--active {\n  opacity: 1;\n}\n\n@include media-breakpoint-up(lg) {\n  .table-responsive {\n    display: table;\n  }\n}\n\n.transition {\n  .table-move {\n    transition: transform 0.5s;\n  }\n\n  .table-enter-active,\n  .table-leave-active {\n    transition: opacity 0.8s;\n  }\n  .table-enter, .table-leave-to /* .fade-leave-active below version 2.1.8 */ {\n    opacity: 0;\n  }\n  .table-leave-active {\n    position: absolute;\n  }\n}\n</style>\n","<template>\n  <div class=\"bg-body-secondary p-3 mt-5 mb-5\">\n    <div class=\"row\">\n      <div v-for=\"item in summary\" :key=\"item.label\" class=\"col-sm-6 col-md-4\">\n        <strong>\n          {{ item.count }} {{ i18n._(item.i18nLabel, { count: item.count }) }}\n          <span v-if=\"item.multi\">multi</span>\n        </strong>\n        <ul class=\"summary-subitem-list\">\n          <li v-for=\"subitem in item.sorted\" :key=\"subitem.label\">\n            {{ subitem.count }} {{ subitem.label }}\n          </li>\n        </ul>\n      </div>\n    </div>\n  </div>\n</template>\n\n<script>\nimport { mapGetters } from 'vuex'\n\nexport default {\n  name: 'PbSummary',\n  props: ['scope', 'dimensions', 'i18n'],\n  computed: {\n    summary() {\n      const summary = {}\n      for (const pb of this.publicBodies) {\n        for (const dimension of this.dimensions) {\n          let val = dimension.key(pb) || ''\n          const dim = dimension.id\n          summary[dim] = summary[dim] || {\n            count: 0,\n            items: {},\n            i18nLabel: dimension.i18nLabel,\n            multi: dim.multi\n          }\n          if (!Array.isArray(val)) {\n            val = [val]\n          }\n          val.forEach((v) => {\n            summary[dim].items[v] = summary[dim].items[v] || 0\n            summary[dim].items[v] += 1\n          })\n        }\n      }\n      for (const dimension of this.dimensions) {\n        const dim = dimension.id\n        if (summary[dim] === undefined) {\n          continue\n        }\n        summary[dim].count = Object.keys(summary[dim].items).length\n        summary[dim].sorted = []\n        for (const key in summary[dim].items) {\n          summary[dim].sorted.push({\n            label: key === '' ? '-' : key,\n            count: summary[dim].items[key]\n          })\n        }\n        summary[dim].sorted.sort((a, b) => {\n          if (a.count === b.count) {\n            if (a.label > b.label) return 1\n            if (a.label < b.label) return -1\n            return 0\n          }\n          // sort highest count up\n          if (a.count > b.count) return -1\n          return 1\n        })\n      }\n      return summary\n    },\n    publicBodies() {\n      return this.getPublicBodiesByScope(this.scope)\n    },\n    ...mapGetters(['getPublicBodiesByScope'])\n  }\n}\n</script>\n\n<style lang=\"scss\" scoped>\n.summary-subitem-list {\n  max-height: 200px;\n  overflow-y: scroll;\n}\n</style>\n","<template>\n  <div class=\"review\">\n    <div class=\"row mt-3 mb-3\">\n      <div class=\"col-auto\">\n        <h2>\n          {{ i18n._('publicBodiesCount', { count: publicBodies.length }) }}\n        </h2>\n      </div>\n    </div>\n\n    <PbSummary\n      :scope=\"scope\"\n      :i18n=\"i18n\"\n      :dimensions=\"summaryDimensions\"\n    ></PbSummary>\n\n    <div class=\"row mb-2\">\n      <div class=\"col-auto ms-auto\">\n        <button\n          v-if=\"publicBodies.length > 0\"\n          @click.prevent=\"clearSelection\"\n          class=\"btn btn-sm hover-btn-danger\"\n        >\n          <i class=\"fa fa-ban\" aria-hidden=\"true\"></i>\n          {{ i18n.clearSelection }}\n        </button>\n      </div>\n    </div>\n\n    <PbTable\n      :name=\"name\"\n      :scope=\"scope\"\n      :i18n=\"i18n\"\n      :headers=\"headers\"\n      :options=\"chosenOptions\"\n      :rows=\"publicBodies\"\n      @select-all-rows=\"selectAllRows\"\n      class=\"transition\"\n    ></PbTable>\n\n    <div class=\"row\">\n      <div class=\"col-auto ms-auto\">\n        <button\n          type=\"button\"\n          class=\"btn btn-primary\"\n          :disabled=\"!stepCanContinue(scope)\"\n          @click=\"$emit('stepNext')\"\n        >\n          {{ i18n.stepNext || i18n.continue }}\n        </button>\n      </div>\n    </div>\n  </div>\n</template>\n\n<script>\nimport { mapGetters, mapMutations } from 'vuex'\nimport { SET_STEP_SELECT_PUBLICBODY } from '../../store/mutation_types'\n\nimport PBChooserMixin from './lib/pb-chooser-mixin'\nimport PBListMixin from './lib/pb-list-mixin'\nimport { summaryDimensions } from '../../store/multi_settings'\n\nimport PbTable from './pb-table'\nimport PbSummary from './pb-summary'\n\nexport default {\n  name: 'PbMultiReview',\n  mixins: [PBChooserMixin, PBListMixin],\n  emits: ['stepNext'],\n  props: ['name', 'scope', 'i18n'],\n  components: {\n    PbTable,\n    PbSummary\n  },\n  data() {\n    return {\n      chosenOptions: {\n        sortableHeader: true\n      }\n    }\n  },\n  computed: {\n    summaryDimensions() {\n      return summaryDimensions\n    },\n    ...mapGetters(['stepCanContinue'])\n  },\n  methods: {\n    ...mapMutations({\n      setStepSelectPublicBody: SET_STEP_SELECT_PUBLICBODY\n    })\n  }\n}\n</script>\n","<template>\n  <ul class=\"pagination\" v-if=\"hasSearchResults\">\n    <li v-if=\"hasPreviousSearchResults\" class=\"page-item\">\n      <a href=\"#\" class=\"page-link prev\" @click.prevent=\"getPrevious\">\n        <span aria-hidden=\"true\">&laquo;</span>\n        <span class=\"visually-hidden\">{{ i18n.previous }}</span>\n      </a>\n    </li>\n    <li v-else class=\"page-item disabled\">\n      <a class=\"page-link\" href=\"#\" tabindex=\"-1\">\n        <span aria-hidden=\"true\">&laquo;</span>\n        <span class=\"visually-hidden\">{{ i18n.previous }}</span>\n      </a>\n    </li>\n    <li class=\"page-item disabled\">\n      <span class=\"page-link\">\n        {{ currentResultPage }} / {{ maxResultPage }}\n      </span>\n    </li>\n    <li v-if=\"hasNextSearchResults\" class=\"page-item\">\n      <a href=\"#\" class=\"page-link next\" @click.prevent=\"getNext\">\n        <span aria-hidden=\"true\">&raquo;</span>\n        <span class=\"visually-hidden\">{{ i18n.next }}</span>\n      </a>\n    </li>\n    <li v-else class=\"page-item disabled\">\n      <a class=\"page-link\" href=\"#\" tabindex=\"-1\">\n        <span class=\"visually-hidden\">{{ i18n.next }}</span>\n        <span aria-hidden=\"true\">&raquo;</span>\n      </a>\n    </li>\n  </ul>\n</template>\n\n<script>\nimport { mapGetters, mapActions } from 'vuex'\n\nexport default {\n  name: 'PbPagination',\n  props: ['scope', 'i18n'],\n  computed: {\n    searchResults() {\n      return this.getScopedSearchResults(this.scope)\n    },\n    hasSearchResults() {\n      return this.searchResults.length > 0\n    },\n    hasNextSearchResults() {\n      const meta = this.getScopedSearchMeta(this.scope)\n      if (!meta) {\n        return false\n      }\n      return meta.next\n    },\n    hasPreviousSearchResults() {\n      const meta = this.getScopedSearchMeta(this.scope)\n      if (!meta) {\n        return false\n      }\n      return meta.previous\n    },\n    currentResultPage() {\n      const meta = this.getScopedSearchMeta(this.scope)\n      if (!meta) {\n        return 0\n      }\n      return meta.offset / meta.limit + 1\n    },\n    maxResultPage() {\n      const meta = this.getScopedSearchMeta(this.scope)\n      if (!meta) {\n        return 0\n      }\n      return Math.ceil(meta.total_count / meta.limit)\n    },\n    currentResultsLength() {\n      const sr = this.searchResults\n      if (sr) {\n        return sr.length\n      }\n      return null\n    },\n    searchResultsLength() {\n      const meta = this.getScopedSearchMeta(this.scope)\n      if (meta) {\n        return meta.total_count\n      }\n      return null\n    },\n    ...mapGetters([\n      'getPublicBody',\n      'getPublicBodyByScope',\n      'getPublicBodiesByScope',\n      'getScopedSearchResults',\n      'getScopedSearchMeta'\n    ])\n  },\n  methods: {\n    getNext() {\n      this.getNextSearchResults(this.scope)\n    },\n    getPrevious() {\n      this.getPreviousSearchResults(this.scope)\n    },\n    ...mapActions(['getNextSearchResults', 'getPreviousSearchResults'])\n  }\n}\n</script>\n","<template>\n  <div class=\"publicbody-chooser mb-3\">\n    <div v-if=\"blockUI\" class=\"mt-5 text-center\">\n      <h4>\n        {{ blockMessage }}\n      </h4>\n      <div\n        class=\"progress\"\n        role=\"progressbar\"\n        :aria-valuenow=\"blockProgress\"\n        aria-valuemin=\"0\"\n        aria-valuemax=\"100\"\n      >\n        <div class=\"progress-bar\" :style=\"blockProgressWidth\"></div>\n      </div>\n    </div>\n    <template v-else>\n      <div class=\"row\">\n        <div class=\"form-search col-md-8 mt-3\">\n          <label for=\"publicbody-multi-search-input\">{{\n            i18n.searchPublicBodyLabel\n          }}</label>\n          <div class=\"input-group\">\n            <input\n              id=\"publicbody-multi-search-input\"\n              type=\"search\"\n              class=\"search-public_bodies form-control form-control-lg\"\n              v-model=\"search\"\n              :placeholder=\"i18n.publicBodySearchPlaceholder\"\n              @keyup=\"triggerAutocomplete\"\n              @keydown.enter.prevent=\"triggerAutocomplete\"\n            />\n            <button\n              type=\"button\"\n              class=\"btn btn-primary search-public_bodies-submit\"\n              @click=\"triggerAutocomplete\"\n            >\n              <i class=\"fa fa-search\"></i>\n              {{ i18n.search }}\n            </button>\n          </div>\n        </div>\n      </div>\n      <div\n        class=\"mb-4 mt-5 d-flex flex-wrap gap-3 align-items-center justify-content-between\"\n      >\n        <h3 class=\"mb-0\">\n          <span\n            v-if=\"searching\"\n            class=\"spinner-border spinner-border-sm fs-3 text-secondary\"\n            role=\"status\"\n          >\n            <span class=\"visually-hidden\">{{ i18n.loading }}</span>\n          </span>\n          {{\n            searching\n              ? '…'\n              : i18n._('publicBodiesFound', { count: searchResultsLength })\n          }}\n        </h3>\n        <div class=\"btn-group\" role=\"group\">\n          <button\n            @click.prevent=\"selectAll\"\n            class=\"btn btn-sm btn-outline-secondary\"\n            :disabled=\"selectAllButtonDisabled\"\n          >\n            {{ i18n._('selectAll', { count: searchResultsLength }) }}\n          </button>\n          <button\n            :disabled=\"!hasSearchResults\"\n            @click.prevent=\"clearSearch\"\n            class=\"btn-sm btn btn-outline-secondary\"\n          >\n            {{ i18n.clearSearchResults }}\n          </button>\n        </div>\n      </div>\n      <div class=\"row\">\n        <div class=\"col-md-8 col-lg-9 order-2\">\n          <PbTable\n            :name=\"name\"\n            :scope=\"scope\"\n            :i18n=\"i18n\"\n            :headers=\"currentHeaders\"\n            :options=\"selectOptions\"\n            :rows=\"searchResults\"\n            @select-all-rows=\"selectAllRows\"\n          ></PbTable>\n          <div\n            v-show=\"searching\"\n            class=\"spinner-border text-secondary\"\n            role=\"status\"\n          >\n            <span class=\"visually-hidden\">{{ i18n.loading }}</span>\n          </div>\n          <slot name=\"publicbody-missing\" v-if=\"!searching\"></slot>\n          <PbPagination :scope=\"scope\" :i18n=\"i18n\"></PbPagination>\n        </div>\n        <div class=\"col-md-4 col-lg-3 order-md-1\">\n          <div class=\"d-flex flex-wrap flex-md-column gap-2\">\n            <PbFilterSelected\n              v-for=\"filterKey in filterOrder\"\n              :key=\"filterKey\"\n              :config=\"filterConfig[filterKey]\"\n              @update=\"updateFilter\"\n              :value=\"filters[filterKey]\"\n            />\n          </div>\n          <div\n            class=\"d-flex flex-column flex-sm-row flex-md-column flex-wrap gap-2 mt-3\"\n          >\n            <div\n              v-for=\"filterKey in filterOrder\"\n              :key=\"filterKey\"\n              class=\"position-relative\"\n            >\n              <PbFilter\n                :global-config=\"config\"\n                :expanded=\"filterExpanded[filterKey]\"\n                :config=\"filterConfig[filterKey]\"\n                :i18n=\"i18n\"\n                :scope=\"scope\"\n                :value=\"filters[filterKey]\"\n                @update=\"updateFilter\"\n                @set-filter-expand=\"setFilterExpand\"\n              ></PbFilter>\n            </div>\n          </div>\n        </div>\n      </div>\n    </template>\n  </div>\n</template>\n\n<script>\nimport { mapGetters, mapMutations, mapActions } from 'vuex'\nimport {\n  SET_STEP_REQUEST,\n  SET_STEP_REVIEW_PUBLICBODY,\n  ADD_PUBLICBODY_ID,\n  REMOVE_PUBLICBODY_ID,\n  CLEAR_PUBLICBODIES\n} from '../../store/mutation_types'\n\nimport { FroideAPI } from '../../lib/api'\nimport I18nMixin from '../../lib/i18n-mixin'\n\nimport PBChooserMixin from './lib/pb-chooser-mixin'\nimport PBListMixin from './lib/pb-list-mixin'\n\nimport PbTable from './pb-table'\nimport PbPagination from './pb-pagination'\nimport PbFilter from './pb-filter'\nimport PbFilterSelected from './pb-filter-selected'\n\nconst MAX_PUBLICBODIES = 800\n\nexport default {\n  name: 'PublicbodyMultiChooser',\n  mixins: [PBChooserMixin, PBListMixin, I18nMixin],\n  props: {\n    name: {\n      type: String,\n      required: true\n    },\n    scope: {\n      type: String,\n      required: true\n    },\n    defaultsearch: {\n      type: String,\n      default: ''\n    },\n    formJson: {\n      type: Object,\n      default: () => ({})\n    },\n    config: {\n      type: Object,\n      default: () => ({})\n    }\n  },\n  components: {\n    PbTable,\n    PbPagination,\n    PbFilter,\n    PbFilterSelected\n  },\n  allowEmptySearch: true,\n  mounted() {\n    if (!this.hasSearchResults) {\n      this.triggerAutocomplete()\n    }\n  },\n  data() {\n    return {\n      search: '',\n      blockUI: false,\n      blockMessage: null,\n      blockProgress: 0,\n      lastQuery: null,\n      searching: false,\n      selectOptions: {\n        selectAllCheckbox: true\n      },\n      filters: this.getEmptyFilters(),\n      filterExpanded: {\n        classification: true\n      },\n      filterOrder: [\n        'classification',\n        'jurisdiction',\n        'categories',\n        'regions_kind',\n        'regions'\n      ]\n    }\n  },\n  computed: {\n    getListView() {\n      if (!this.listView) {\n        return 'resultList'\n      }\n      return this.listView\n    },\n    filterConfig() {\n      const searcher = new FroideAPI(this.config)\n      return {\n        classification: {\n          label: this.i18n.classificationPlural[1],\n          key: 'classification',\n          expanded: this.filterExpanded.classification,\n          initialFilters: { depth: 1 },\n          getItems: (q, filters) => searcher.listClassifications(q, filters),\n          hasSearch: true,\n          itemMap: (item) => {\n            return {\n              label: item.name,\n              id: item.id,\n              children: item.children\n            }\n          }\n        },\n        jurisdiction: {\n          label: this.i18n.jurisdictionPlural[1],\n          key: 'jurisdiction',\n          expanded: this.filterExpanded.jurisdiction,\n          getItems: () => searcher.listJurisdictions(),\n          // itemFilter: (item) => item.rank < 3,\n          itemMap: (item) => {\n            return { label: item.name, id: item.id }\n          }\n        },\n        categories: {\n          label: this.i18n.topicPlural[1],\n          key: 'categories',\n          initialFilters: { depth: 1 },\n          getItems: (q, filters) => searcher.listCategories(q, filters),\n          hasSearch: true,\n          multi: true,\n          itemMap: (item) => {\n            return {\n              label: item.name,\n              id: item.id,\n              children: item.children\n            }\n          }\n        },\n        regions: {\n          label: this.i18n.containingGeoregionsPlural[0],\n          key: 'regions',\n          expanded: this.filterExpanded.georegion,\n          getItems: (q, filters) => searcher.listGeoregions(q, filters),\n          hasSearch: true,\n          choices: ['kind', this.config.fixtures.georegion_kind],\n          itemMap: (item) => {\n            return {\n              label: item.name,\n              id: item.id\n            }\n          }\n        },\n        regions_kind: {\n          label: this.i18n.administrativeUnitKind,\n          key: 'regions_kind',\n          getItems: () =>\n            Promise.resolve({\n              meta: { next: null },\n              objects: this.config.fixtures.georegion_kind\n            }),\n          itemMap: (item) => {\n            return { label: item[1], id: item[0] }\n          }\n        }\n      }\n    },\n    currentHeaders() {\n      return this.headers.filter((x) => !this.hasFilter(x.key))\n    },\n    publicBodies() {\n      return this.getPublicBodiesByScope(this.scope)\n    },\n    hasNextSearchResults() {\n      const meta = this.getScopedSearchMeta(this.scope)\n      if (!meta) {\n        return false\n      }\n      return meta.next\n    },\n    selectAllButtonDisabled() {\n      return !(this.hasSearchResults && this.canSelectAll)\n    },\n    canSelectAll() {\n      let searchCount = 0\n      const meta = this.getScopedSearchMeta(this.scope)\n      if (meta) {\n        searchCount = meta.total_count\n      }\n      return this.publicBodies.length + searchCount <= MAX_PUBLICBODIES\n    },\n    maxResultPage() {\n      const meta = this.getScopedSearchMeta(this.scope)\n      if (!meta) {\n        return 0\n      }\n      return Math.ceil(meta.total_count / meta.limit)\n    },\n    blockProgressWidth() {\n      return `width: ${this.blockProgress}%`\n    },\n    ...mapGetters([\n      'getPublicBodiesByScope',\n      'getScopedSearchMeta',\n      'stepCanContinue'\n    ])\n  },\n  methods: {\n    togglePane(e) {\n      this.tabPane = e.target.dataset.pane\n    },\n    getEmptyFilters() {\n      return {\n        classification: null,\n        jurisdiction: null,\n        categories: [],\n        regions: null,\n        regions_kind: null\n      }\n    },\n    hasFilter(key) {\n      const v = this.filters[key]\n      if (v === undefined) {\n        return false\n      }\n      if (v === null) {\n        return false\n      }\n      if (Array.isArray(v) && v.length === 0) {\n        return false\n      }\n      return true\n    },\n    selectAll() {\n      this.blockUI = true\n      this.blockMessage = this.i18n.selectingAll\n      if (this.currentResultPage !== 1) {\n        this.runAutocomplete().then(() => this.selectAll())\n      } else {\n        this.selectAllRows(true)\n        this.selectAllNext(1)\n      }\n    },\n    selectAllNext(num) {\n      this.blockProgress = (num / this.maxResultPage) * 100\n      if (this.hasNextSearchResults) {\n        this.getNextSearchResults(this.scope).then(() => {\n          this.selectAllRows(true)\n          if (this.hasNextSearchResults) {\n            this.selectAllNext(num + 1)\n          } else {\n            this.blockUI = false\n            this.tabPane = 'chosen'\n          }\n        })\n      } else {\n        this.blockUI = false\n      }\n    },\n    clearSearch() {\n      this.clearResults()\n      this.filters = this.getEmptyFilters()\n      this.search = ''\n      this.triggerAutocomplete()\n    },\n    setFilterExpand(filter, expand) {\n      const expanded = {\n        [filter.key]: expand\n      }\n      if (expand) {\n        for (const key in this.filterExpanded) {\n          if (key !== filter.key) {\n            expanded[key] = false\n          }\n        }\n      }\n      this.filterExpanded = expanded\n    },\n    updateFilter(filter, value) {\n      this.filters[filter.key] = value\n      this.triggerAutocomplete()\n    },\n    ...mapMutations({\n      setStepRequest: SET_STEP_REQUEST,\n      setStepReviewPublicbody: SET_STEP_REVIEW_PUBLICBODY,\n      addPublicBodyId: ADD_PUBLICBODY_ID,\n      removePublicBodyId: REMOVE_PUBLICBODY_ID,\n      clearPublicBodies: CLEAR_PUBLICBODIES\n    }),\n    ...mapActions(['getNextSearchResults'])\n  },\n  watch: {\n    defaultsearch: function () {\n      this.triggerAutocomplete()\n    }\n  }\n}\n</script>\n\n<style lang=\"scss\" scoped>\nbutton[disabled] {\n  cursor: not-allowed;\n}\n</style>\n","const LetterMixin = {\n  computed: {\n    letterStart() {\n      if (this.defaultLaw) {\n        return this.defaultLaw.letter_start + '\\n'\n      } else {\n        return this.i18n.greeting + '\\n\\n' + this.i18n.defaultLetterStart + '\\n'\n      }\n    },\n    letterSignatureName() {\n      let name = ''\n      if (this.user && (this.user.first_name || this.user.last_name)) {\n        name = `${this.user.first_name || ''} ${this.user.last_name || ''}`\n      }\n      return name.trim()\n    },\n    letterEndShort() {\n      const name = this.letterSignatureName\n      return `\\n${this.i18n.kindRegards}\\n${name}`\n    },\n    letterEnd() {\n      const name = this.letterSignatureName\n      if (!this.defaultLaw) {\n        return `${this.i18n.kindRegards}\\n${name}`\n      }\n      return `${this.defaultLaw.letter_end}\\n${name}`\n    },\n    letterEndNoName() {\n      if (!this.defaultLaw) {\n        return `${this.i18n.kindRegards}`\n      }\n      return `${this.defaultLaw.letter_end}`\n    },\n    letterSignature() {\n      if (!this.user || (!this.user.first_name && !this.user.last_name)) {\n        return this.i18n.giveName\n      }\n      return false\n    }\n  }\n}\n\nexport default LetterMixin\n","<template>\n  <div>\n    <p>{{ i18n.whenToAddProof }}</p>\n    <template v-if=\"formFields.proof?.choices.length\">\n      <div class=\"mb-3 mt-3\">\n        <label\n          class=\"fw-bold form-label\"\n          :class=\"{\n            'field-required': proofRequired\n          }\"\n          for=\"id_proof\"\n          >{{ formFields.proof.label }}</label\n        >\n        <select\n          name=\"proof\"\n          class=\"form-select\"\n          id=\"id_proof\"\n          v-model=\"proof\"\n          :disabled=\"!!proofImage\"\n          :required=\"proofRequired\"\n        >\n          <option\n            v-for=\"option in formFields.proof.choices\"\n            :key=\"option.value\"\n            :value=\"option.value\"\n          >\n            {{ option.label }}\n          </option>\n        </select>\n      </div>\n      <div class=\"text-center fw-bold\">\n        {{ i18n.orUploadNewProof }}\n      </div>\n    </template>\n\n    <div class=\"mb-3 mt-3\">\n      <label\n        class=\"fw-bold form-label\"\n        :class=\"{\n          'field-required': proofImageRequired\n        }\"\n        for=\"id_proof_name\"\n        >{{ formFields.proof_name.label }}</label\n      >\n      <input\n        type=\"text\"\n        name=\"proof_name\"\n        class=\"form-control\"\n        maxlength=\"255\"\n        id=\"id_proof_name\"\n        :disabled=\"!!proof\"\n        :required=\"proofImageRequired\"\n      />\n\n      <div class=\"form-text\">{{ formFields.proof_name.help_text }}</div>\n    </div>\n\n    <div class=\"mb-3\">\n      <label\n        class=\"fw-bold form-label\"\n        :class=\"{\n          'field-required': proofImageRequired\n        }\"\n        for=\"id_proof_image\"\n        >{{ formFields.proof_image.label }}</label\n      >\n      <ProofUpload\n        name=\"proof_image\"\n        :disabled=\"!!proof\"\n        :config=\"config\"\n        :required=\"proofImageRequired\"\n        @input=\"(image) => (proofImage = image)\"\n      />\n    </div>\n\n    <div class=\"mb-3\">\n      <div class=\"form-check\">\n        <input\n          type=\"checkbox\"\n          name=\"proof_store\"\n          class=\"form-check-input\"\n          :disabled=\"!!proof\"\n          id=\"id_proof_store\"\n        />\n        <label class=\"form-check-label fw-bold\" for=\"id_proof_store\">\n          {{ formFields.proof_store.label }}\n        </label>\n      </div>\n    </div>\n  </div>\n</template>\n\n<script>\nimport I18nMixin from '../../lib/i18n-mixin'\n\nimport ProofUpload from './proof-upload.vue'\n\nexport default {\n  name: 'ProofForm',\n  components: {\n    ProofUpload\n  },\n  mixins: [I18nMixin],\n  props: {\n    config: {\n      type: Object,\n      required: true\n    },\n    form: {\n      type: Object,\n      required: true\n    },\n    required: {\n      type: Boolean,\n      default: false\n    }\n  },\n  emits: ['update'],\n  data() {\n    return {\n      proof:\n        this.form.fields.proof?.value ||\n        this.form.fields.proof?.initial ||\n        null,\n      proofImage: null\n    }\n  },\n  computed: {\n    proofRequired() {\n      return this.required && !this.proofImage\n    },\n    proofImageRequired() {\n      return this.required && !this.proof\n    },\n    formFields() {\n      return this.form.fields\n    }\n  },\n  methods: {\n    update() {\n      if (this.proof) {\n        this.$emit('update', { proof: this.proof, image: null })\n      } else if (this.proofImage) {\n        this.$emit('update', { proof: null, image: this.proofImage })\n      } else {\n        this.$emit('update', null)\n      }\n    }\n  },\n  watch: {\n    proof() {\n      this.update()\n    },\n    proofImage() {\n      this.update()\n    }\n  }\n}\n</script>\n","<template>\n  <div class=\"row\">\n    <label\n      for=\"id_address\"\n      class=\"col-sm-4 col-md-3 col-form-label\"\n      :class=\"{\n        'text-danger':\n          (errors.address && !addressChanged) || addressValid === false,\n        'field-required': requiresPostalAddress\n      }\"\n    >\n      {{ i18n.yourAddress }}\n    </label>\n    <div class=\"col-sm-8 col-md-5\">\n      <div>\n        <textarea\n          v-model=\"address\"\n          ref=\"address\"\n          name=\"address\"\n          class=\"form-control\"\n          :class=\"{\n            'is-invalid':\n              (errors.address && !addressChanged) || addressValid === false\n          }\"\n          :placeholder=\"formFields.address.placeholder\"\n          :required=\"requiresPostalAddress\"\n          @change=\"addressUpdated(true)\"\n          @keyup=\"addressUpdated()\"\n        />\n        <p class=\"help-block\">\n          <span v-html=\"addressHelpText\" />\n        </p>\n        <div\n          v-if=\"!clearFormErrors && errors.address\"\n          class=\"alert mb-2\"\n          :class=\"{\n            'alert-danger': !addressChanged,\n            'alert-warning': addressChanged\n          }\"\n        >\n          <ul class=\"list-unstyled my-0\">\n            <li v-for=\"e in errors.address\" :key=\"e.message\">\n              {{ e.message }}\n            </li>\n          </ul>\n        </div>\n        <div\n          v-else-if=\"addressValidationErrors.length > 0\"\n          class=\"alert mb-2\"\n          :class=\"{\n            'alert-danger': !addressChanged,\n            'alert-warning': addressChanged\n          }\"\n        >\n          <ul class=\"list-unstyled my-0\">\n            <li\n              v-for=\"error in addressValidationErrors\"\n              :key=\"error\"\n              style=\"white-space: pre-line\"\n            >\n              {{ error }}\n            </li>\n          </ul>\n        </div>\n      </div>\n    </div>\n  </div>\n</template>\n\n<script>\nimport { mapGetters, mapMutations } from 'vuex'\n\nimport {\n  UPDATE_ADDRESS,\n  UPDATE_ADDRESS_VALIDITY,\n  UPDATE_ADDRESS_CHANGED\n} from '../../store/mutation_types'\n\nlet addressRegex\n\n// if false, a failing regex will only nag, and not disable continue\nconst addressRegexBlockValidity = false\n\nexport default {\n  name: 'UserAddress',\n  props: {\n    i18n: {\n      type: Object,\n      required: true\n    },\n    config: {\n      type: Object,\n      required: true\n    },\n    form: {\n      type: Object,\n      required: true\n    },\n    addressHelpText: {\n      type: String,\n      default: null\n    },\n    addressRequired: {\n      type: Boolean,\n      default: false\n    },\n    defaultLaw: {\n      type: Object,\n      default: null\n    }\n  },\n  data() {\n    return {\n      validateLive: false,\n      clearFormErrors: false,\n      addressValidationErrors: []\n    }\n  },\n  created() {\n    if (this.config.settings.address_regex) {\n      addressRegex = new RegExp(this.config.settings.address_regex)\n    }\n  },\n  methods: {\n    addressUpdated(enableValidateLive) {\n      if (!this.validateLive && !enableValidateLive) return\n      this.validateLive = true\n      this.updateAddressChanged(true)\n      this.validate()\n    },\n    validate() {\n      this.addressValidationErrors = []\n      if (!this.$refs.address.reportValidity()) {\n        this.updateAddressValidity(false)\n        return\n      }\n      let valid = true\n      if (this.address && addressRegex && !addressRegex.test(this.address)) {\n        if (addressRegexBlockValidity) {\n          valid = false\n        }\n        this.addressValidationErrors.push(this.i18n.pleaseFollowAddressFormat)\n      }\n      if (valid) {\n        this.clearFormErrors = true\n      }\n      this.updateAddressValidity(valid)\n    },\n    ...mapMutations({\n      updateAddress: UPDATE_ADDRESS,\n      updateAddressChanged: UPDATE_ADDRESS_CHANGED,\n      updateAddressValidity: UPDATE_ADDRESS_VALIDITY\n    })\n  },\n  computed: {\n    formFields() {\n      return this.form.fields\n    },\n    errors() {\n      if (this.form) {\n        return this.form.errors\n      }\n      return {}\n    },\n    addressHelpTextValue() {\n      if (this.addressHelpText !== null) {\n        return this.addressHelpText\n      }\n      return this.formFields.address.help_text\n    },\n    address: {\n      get() {\n        return this.$store.state.user.address\n      },\n      set(value) {\n        this.updateAddress(value)\n      }\n    },\n    requiresPostalAddress() {\n      if (this.addressRequired) {\n        return true\n      }\n      if (this.defaultLaw) {\n        return !this.defaultLaw.email_only\n      }\n      return true\n    },\n    isAllowedAddress() {\n      if (!this.address || !this.config.settings.address_regex) {\n        return true\n      }\n      return new RegExp(this.config.settings.address_regex).test(this.address)\n    },\n    ...mapGetters(['addressValid', 'addressChanged'])\n  }\n}\n</script>\n","<template>\n  <div class=\"form-check form-check-emphasized\">\n    <input\n      type=\"checkbox\"\n      v-model=\"confirm\"\n      ref=\"confirm\"\n      name=\"confirm\"\n      class=\"form-check-input\"\n      required=\"\"\n      id=\"id_confirm\"\n    />\n    <label for=\"id_confirm\" class=\"form-check-label field-required\">\n      <slot />\n    </label>\n  </div>\n</template>\n\n<script>\nimport { mapMutations } from 'vuex'\n\nimport {\n  UPDATE_CONFIRM,\n  UPDATE_CONFIRM_VALIDITY\n} from '../../store/mutation_types'\n\nexport default {\n  name: 'UserConfirm',\n  computed: {\n    confirm: {\n      get() {\n        return this.$store.state.user.confirm\n      },\n      set(value) {\n        this.updateConfirm(value)\n      }\n    }\n  },\n  methods: {\n    validate() {\n      this.updateConfirmValidity(this.$refs.confirm.reportValidity())\n    },\n    ...mapMutations({\n      updateConfirm: UPDATE_CONFIRM,\n      updateConfirmValidity: UPDATE_CONFIRM_VALIDITY\n    })\n  }\n}\n</script>\n\n<style scoped>\n/* hide required indicator (a red asterisk) for labels that contain block markup */\n\nlabel:has(p)::after,\nlabel:has(div)::after,\nlabel:has(ul)::after {\n  display: none;\n}\n</style>\n","<template>\n  <slot\n    v-for=\"(pb, index) in shownPublicBodies\"\n    :key=\"pb.id\"\n    :pb=\"pb\"\n    :index=\"index\"\n  />\n  <slot v-if=\"truncated\" name=\"truncation\" :count=\"publicBodies.length\">\n    {{ i18n._('publicBodiesCount', { count: publicBodies.length }) }}\n  </slot>\n</template>\n\n<script>\nexport default {\n  name: 'PbTruncatedList',\n  props: {\n    publicBodies: {\n      type: Array,\n      required: true\n    },\n    i18n: {\n      type: Object,\n      required: true\n    },\n    // Truncate once there are more than `threshold` public bodies...\n    threshold: {\n      type: Number,\n      default: 5\n    },\n    // ...and then only show the first `showCount` of them.\n    showCount: {\n      type: Number,\n      default: 3\n    }\n  },\n  computed: {\n    truncated() {\n      return this.publicBodies.length > this.threshold\n    },\n    shownPublicBodies() {\n      if (!this.truncated) {\n        return this.publicBodies\n      }\n      return this.publicBodies.slice(0, this.showCount)\n    }\n  }\n}\n</script>\n","<template>\n  <div>\n    <input\n      v-for=\"pb in publicBodies\"\n      :key=\"pb.id\"\n      type=\"hidden\"\n      name=\"publicbody\"\n      :value=\"pb.id\"\n    />\n    <input type=\"hidden\" name=\"law_type\" :value=\"lawType\" />\n\n    <div class=\"border border-2 border-gray-300 p-3 mb-3\">\n      <div class=\"row mb-3\" v-if=\"!hidePublicbodyChooser\">\n        <div class=\"col-sm-3 d-flex align-items-center\">\n          {{ i18n.recipientPb }}\n        </div>\n        <div class=\"col-sm-9 d-flex align-items-center\">\n          <strong v-if=\"publicBodies.length === 0\" class=\"text-danger\">{{\n            i18n.none\n          }}</strong>\n          <strong v-else>\n            <PbTruncatedList :public-bodies=\"publicBodies\" :i18n=\"i18n\">\n              <template #default=\"{ pb, index }\">\n                <template v-if=\"index > 0\">, </template>\n                <a v-if=\"pb\" :href=\"pb.site_url\" target=\"_blank\">{{\n                  pb.name\n                }}</a>\n              </template>\n              <template #truncation=\"{ count }\">\n                , … ({{ i18n._('publicBodiesCount', { count }) }})\n              </template>\n            </PbTruncatedList>\n          </strong>\n          <!-- setStep won't work in froide-campaign, but hidePublicbodyChooser always applies there;\n              and Pb choosing is handled by <CampaignChoosePublicbody> -->\n          <button\n            type=\"button\"\n            class=\"btn btn-secondary btn-sm ms-auto text-nowrap\"\n            @click=\"setStepChangePublicbody\"\n          >\n            {{ i18n.change }}\n          </button>\n        </div>\n      </div>\n\n      <div class=\"row mb-3\">\n        <div class=\"col-sm-3 d-flex align-items-center\">\n          <label\n            class=\"form-check-label\"\n            for=\"id_subject\"\n            :class=\"{\n              'text-danger': errors.subject && !subjectChanged\n            }\"\n          >\n            {{ i18n.subject }}:\n          </label>\n        </div>\n        <div class=\"col-sm-9 d-flex flex-wrap align-items-center\">\n          <template\n            v-if=\"\n              editingDisabled && !(errors.subject && errors.subject.length > 0)\n            \"\n          >\n            <!-- editingDisabled e.g. when ?hide_editing=1 -->\n            <input type=\"hidden\" name=\"subject\" :value=\"subject\" />\n            <strong>{{ subject }}</strong>\n            <button\n              type=\"button\"\n              class=\"btn btn-secondary btn-sm ms-auto text-nowrap\"\n              @click=\"enableEditing\"\n            >\n              {{ i18n.reviewEdit }}\n            </button>\n          </template>\n          <template v-else>\n            <div\n              v-if=\"\n                !clearFormErrors && errors.subject && errors.subject.length > 0\n              \"\n              class=\"alert my-2 w-100\"\n              :class=\"{\n                'alert-danger': !subjectChanged,\n                'alert-warning': subjectChanged\n              }\"\n            >\n              <ul class=\"list-unstyled my-0\">\n                <li v-for=\"error in errors.subject\" :key=\"error.message\">\n                  {{ error.message }}\n                </li>\n              </ul>\n            </div>\n            <div\n              v-else-if=\"subjectValidationErrors.length > 0\"\n              class=\"alert my-2 w-100\"\n              :class=\"{\n                'alert-danger': !subjectChanged,\n                'alert-warning': subjectChanged\n              }\"\n            >\n              <ul class=\"list-unstyled my-0\">\n                <li v-for=\"error in subjectValidationErrors\" :key=\"error\">\n                  {{ error }}\n                </li>\n              </ul>\n            </div>\n            <input\n              v-model=\"subject\"\n              ref=\"subject\"\n              id=\"id_subject\"\n              type=\"text\"\n              name=\"subject\"\n              class=\"form-control\"\n              :minlength=\"formFields.subject.min_length\"\n              :maxlength=\"formFields.subject.max_length\"\n              :class=\"{\n                'is-invalid':\n                  (errors.subject || subjectValid === false) && !subjectChanged\n              }\"\n              :placeholder=\"formFields.subject.placeholder\"\n              @change=\"updateSubjectChanged(true)\"\n              @keyup=\"resetSubjectCustomValidity\"\n              @keydown.enter.prevent\n            />\n          </template>\n        </div>\n      </div>\n\n      <div v-if=\"fullText && warnFullText\" class=\"alert alert-warning\">\n        <p>\n          {{ i18n.warnFullText }}\n        </p>\n      </div>\n\n      <div\n        v-if=\"!clearFormErrors && errors.body && errors.body.length > 0\"\n        class=\"alert mb-2\"\n        :class=\"{\n          'alert-danger': !bodyChanged,\n          'alert-warning': bodyChanged\n        }\"\n      >\n        <ul class=\"list-unstyled my-0\">\n          <li v-for=\"error in errors.body\" :key=\"error.message\">\n            {{ error.message }}\n          </li>\n        </ul>\n        <div v-if=\"showPlaceholderReplacer\">\n          <button\n            type=\"button\"\n            class=\"btn btn-secondary\"\n            @click=\"fixBodyPlaceholders\"\n          >\n            {{ i18n.fixPlaceholder }}\n          </button>\n        </div>\n      </div>\n      <div\n        v-else-if=\"bodyValidationErrors.length > 0\"\n        class=\"alert mt-2\"\n        :class=\"{\n          'alert-danger': !bodyChanged,\n          'alert-warning': bodyChanged\n        }\"\n      >\n        <ul class=\"list-unstyled my-0\">\n          <li v-for=\"error in bodyValidationErrors\" :key=\"error\">\n            {{ error }}\n          </li>\n        </ul>\n        <div v-if=\"showPlaceholderReplacer\" class=\"mt-2\">\n          <button\n            type=\"button\"\n            class=\"btn btn-secondary btn-sm\"\n            @click=\"fixBodyPlaceholders\"\n          >\n            {{ i18n.fixPlaceholder }}\n          </button>\n        </div>\n      </div>\n\n      <div class=\"row\">\n        <div\n          :class=\"\n            savedFullTextBody && savedFullTextBodySidebyside\n              ? 'col-md-8 order-md-1'\n              : 'col'\n          \"\n        >\n          <div class=\"mb-4\">\n            <label for=\"id_body\"> {{ i18n.requestBody }}: </label>\n          </div>\n          <div v-if=\"!fullText\" class=\"body-text\" v-text=\"letterStart\" />\n          <div v-if=\"editingDisabled\" class=\"body-text-em mb-3\" v-text=\"body\" />\n          <textarea\n            v-show=\"!editingDisabled\"\n            v-model=\"body\"\n            ref=\"body\"\n            id=\"id_body\"\n            name=\"body\"\n            required\n            class=\"form-control body-textarea\"\n            :class=\"{\n              'is-invalid':\n                (errors.body || bodyValid === false) && !bodyChanged,\n              attention: !hasBody\n            }\"\n            :rows=\"bodyRows\"\n            :placeholder=\"formFields.body.placeholder\"\n            :minlength=\"formFields.body.min_length\"\n            :maxlength=\"formFields.body.max_length\"\n            @keydown=\"updateBody\"\n            @keyup=\"resetBodyCustomValidity\"\n            @change=\"updateBodyChanged(true)\"\n          />\n\n          <div class=\"bg-secondary-subtle px-2 py-1 mb-4 mt-1 border\">\n            <div class=\"d-sm-flex justify-content-end gap-2\">\n              <div class=\"form-check\">\n                <input\n                  v-if=\"!fullText\"\n                  id=\"full_letter_checkbox\"\n                  type=\"checkbox\"\n                  class=\"form-check-input\"\n                  v-model=\"fullLetter\"\n                />\n                <input\n                  v-else\n                  id=\"full_letter_checkbox\"\n                  type=\"checkbox\"\n                  class=\"form-check-input\"\n                  disabled\n                  :checked=\"true\"\n                />\n                <label class=\"form-check-label\" for=\"full_letter_checkbox\">\n                  {{ i18n.showEntireMessage }}\n                </label>\n              </div>\n              <input v-model=\"fullText\" type=\"hidden\" name=\"full_text\" />\n              <div v-if=\"allowFullText && !editingDisabled\" class=\"form-check\">\n                <input\n                  id=\"full_text_checkbox\"\n                  class=\"form-check-input\"\n                  v-model=\"fullText\"\n                  type=\"checkbox\"\n                  name=\"full_text_checkbox\"\n                  :disabled=\"fullTextDisabled\"\n                />\n                <label for=\"full_text_checkbox\" class=\"form-check-label\">\n                  <i\n                    v-if=\"warnFullText\"\n                    class=\"fa fa-exclamation-triangle\"\n                    aria-hidden=\"true\"\n                  />\n                  {{ formFields.full_text.label }}\n                </label>\n              </div>\n            </div>\n            <div\n              class=\"d-flex justify-content-end mt-2\"\n              v-if=\"fullTextDisabled\"\n            >\n              <button\n                class=\"btn btn-outline-secondary btn-sm\"\n                @click.prevent=\"resetFullText\"\n              >\n                {{ i18n.resetFullText }}\n              </button>\n            </div>\n            <details\n              v-if=\"savedFullTextBody && !savedFullTextBodySidebyside\"\n              class=\"text-end mt-2\"\n            >\n              <summary>\n                {{ i18n.savedFullTextChanges }}\n              </summary>\n              <textarea\n                v-model=\"savedFullTextBody\"\n                class=\"saved-body\"\n                readonly\n              />\n            </details>\n          </div>\n\n          <div v-if=\"!fullText && !fullLetter\" class=\"body-text\">\n            […]<br />{{ letterEndShort }}\n          </div>\n\n          <div v-if=\"!fullText && fullLetter\" class=\"body-text\">\n            {{ letterEnd }}\n          </div>\n\n          <div v-if=\"letterSignature\" class=\"body-text\">\n            <em>{{ letterSignature }}</em>\n          </div>\n          <div\n            v-if=\"!letterSignature && fullText\"\n            class=\"body-text\"\n            v-text=\"letterSignatureName\"\n          />\n          <div v-if=\"needles.length > 0\" class=\"alert alert-warning mb-2\">\n            <ul class=\"list-unstyled my-0\">\n              <li v-for=\"needle in needles\" :key=\"needle\">\n                {{ needle }}\n              </li>\n            </ul>\n          </div>\n        </div>\n        <div\n          v-if=\"savedFullTextBody && savedFullTextBodySidebyside\"\n          class=\"col-md-4 order-md-2\"\n        >\n          <h6>\n            {{ i18n.savedFullTextChanges }}\n          </h6>\n          <textarea v-model=\"savedFullTextBody\" class=\"saved-body\" readonly />\n        </div>\n      </div>\n    </div>\n\n    <div\n      v-if=\"hasUser && proofForm\"\n      class=\"border border-2 border-gray-300 p-3 mb-3\"\n    >\n      <template v-if=\"proofRequired\">\n        <h5>{{ i18n.includeProof }}</h5>\n        <ProofForm\n          :form=\"proofForm\"\n          :required=\"proofRequired\"\n          :config=\"config.proof_config\"\n          @update=\"updateProof\"\n        ></ProofForm>\n      </template>\n      <details v-else>\n        <summary>{{ i18n.includeProof }}</summary>\n        <ProofForm\n          :form=\"proofForm\"\n          :required=\"proofRequired\"\n          :config=\"config.proof_config\"\n          @update=\"updateProof\"\n          class=\"pt-3\"\n        ></ProofForm>\n      </details>\n    </div>\n\n    <div v-if=\"hasUser\" class=\"border border-2 border-gray-300 p-3 mb-3\">\n      <details\n        :open=\"\n          userForm?.errors?.address ||\n          addressValid === false ||\n          addressChanged === true ||\n          user?.address === ''\n        \"\n      >\n        <summary>{{ i18n.updatePostalAddress }}</summary>\n        <UserAddress\n          :i18n=\"i18n\"\n          :form=\"userForm\"\n          :config=\"config\"\n          :address-help-text=\"userForm.fields.address.help_text\"\n          :default-law=\"defaultLaw\"\n          class=\"mt-3\"\n        />\n      </details>\n    </div>\n\n    <UserConfirm\n      v-if=\"hasUserConfirmContent && confirmRequired\"\n      ref=\"userConfirm\"\n    >\n      <slot name=\"request-user-confirm\" />\n    </UserConfirm>\n\n    <div class=\"my-4\" v-if=\"showNextButton\">\n      <button\n        type=\"button\"\n        class=\"btn btn-primary\"\n        @click=\"validateAllNextStep\"\n      >\n        {{ i18n.stepNext }}\n      </button>\n    </div>\n  </div>\n</template>\n\n<script>\nimport LetterMixin from './lib/letter-mixin'\nimport I18nMixin from '../../lib/i18n-mixin'\n\nimport { mapGetters, mapMutations } from 'vuex'\n\nimport {\n  UPDATE_BODY_VALIDITY,\n  UPDATE_BODY_CHANGED,\n  UPDATE_SUBJECT_VALIDITY,\n  UPDATE_SUBJECT_CHANGED,\n  SET_STEP,\n  STEPS,\n  UPDATE_PROOF\n} from '../../store/mutation_types'\n\nimport ProofForm from '../proofupload/proof-form.vue'\nimport UserAddress from './user-address.vue'\nimport UserConfirm from './user-confirm.vue'\nimport PbTruncatedList from '../publicbody/pb-truncated-list.vue'\n\nfunction erx(text) {\n  return text.replace(/[-[\\]{}()*+?.,\\\\^$|#\\s]/g, '\\\\$&')\n}\n\nconst PLACEHOLDER_MARKER = '…'\nconst PLACEHOLDER_REPLACEMENT = '...'\nconst MAX_BODY_ROWS = 12\nconst MIN_BODY_ROWS = 3\n\n// show savedFullTextBody next to the textarea (true), or below in <details> in the \"tool bar\" (false)\nconst savedFullTextBodySidebyside = false\n\nexport default {\n  name: 'RequestForm',\n  mixins: [I18nMixin, LetterMixin],\n  components: {\n    ProofForm,\n    UserAddress,\n    UserConfirm,\n    PbTruncatedList\n  },\n  emits: [\n    'stepNext',\n    'enableEditing',\n    'update:initialSubject',\n    'update:initialBody'\n  ],\n  props: {\n    config: {\n      type: Object,\n      default: null\n    },\n    publicbodies: {\n      type: Array,\n      default: null\n    },\n    user: {\n      type: Object,\n      default: null\n    },\n    requestForm: {\n      required: true,\n      type: Object\n    },\n    userForm: {\n      required: true,\n      type: Object\n    },\n    proofForm: {\n      type: Object,\n      default: null\n    },\n    lawType: {\n      type: String,\n      default: ''\n    },\n    defaultLaw: {\n      type: Object,\n      default: null\n    },\n    showDraft: {\n      type: Boolean,\n      default: false\n    },\n    hidePublicbodyChooser: {\n      type: Boolean,\n      default: false\n    },\n    hideFullText: {\n      type: Boolean,\n      default: true\n    },\n    hideEditing: {\n      type: Boolean,\n      default: false\n    },\n    showNextButton: {\n      type: Boolean,\n      default: false\n    },\n    initialSubject: {\n      type: String,\n      default: ''\n    },\n    initialBody: {\n      type: String,\n      default: ''\n    },\n    initialFullText: {\n      type: Boolean,\n      default: false\n    },\n    proofRequired: {\n      type: Boolean,\n      default: false\n    },\n    confirmRequired: {\n      type: Boolean,\n      default: false\n    },\n    submitting: {\n      type: Boolean,\n      default: false\n    }\n  },\n  data() {\n    return {\n      bodyRows: MIN_BODY_ROWS,\n      bodyBeforeChange: '',\n      bodyValidationErrors: [],\n      subjectValidationErrors: [],\n      savedFullTextBody: '',\n      savedFullTextBodySidebyside,\n      fullTextDisabled: false,\n      editingDisabled: this.hideEditing,\n      fullLetter: false,\n      subjectValue: this.initialSubject || '',\n      bodyValue: this.initialBody || '',\n      fullTextValue: this.initialFullText,\n      clearFormErrors: false,\n      showPlaceholderReplacer: false\n    }\n  },\n  computed: {\n    formFields() {\n      return this.requestForm.fields\n    },\n    errors() {\n      return this.requestForm.errors\n    },\n    userformFields() {\n      return this.userForm.fields\n    },\n    nonMeaningfulSubjects() {\n      return this.config.settings.non_meaningful_subject_regex.map(\n        (x) => new RegExp(x, 'i')\n      )\n    },\n    hasUser() {\n      return this.user && this.user.id\n    },\n    subject: {\n      get() {\n        return this.subjectValue\n      },\n      set(value) {\n        this.subjectValue = value\n        this.$emit('update:initialSubject', value)\n      }\n    },\n    hasBody() {\n      return this.body && this.body.length > 0\n    },\n    body: {\n      get() {\n        return this.bodyValue\n      },\n      set(value) {\n        this.bodyValue = value\n        this.$emit('update:initialBody', value)\n      }\n    },\n    allowFullText() {\n      return this.hasUser && !this.hideFullText\n    },\n    warnFullText() {\n      return this.allowFullText && this.multipleLaws\n    },\n    multipleLaws() {\n      return this.defaultLaw === null\n    },\n    fullText: {\n      get() {\n        return this.fullTextValue\n      },\n      set(value) {\n        this.fullTextValue = value\n        this.$emit('update:initialFullText', value)\n        if (value) {\n          this.bodyBeforeChange = this.body\n          this.body = `${this.letterStart}\\n${this.body}\\n\\n${this.letterEndNoName}`\n        } else {\n          if (!this.fullTextDisabled) {\n            this.body = this.bodyBeforeChange\n          }\n        }\n        const newLineCount = (this.body.match(/\\n/g) || []).length\n        this.bodyRows = Math.max(\n          MIN_BODY_ROWS,\n          Math.min(newLineCount + 1, MAX_BODY_ROWS)\n        )\n      }\n    },\n    hasPublicBodies() {\n      return this.publicBodies.length > 0\n    },\n    publicBody() {\n      return this.publicbodies[0]\n    },\n    publicBodies() {\n      // FIXME\n      return this.publicbodies\n    },\n    needles() {\n      let checks = []\n      const positives = []\n      if (!this.fullText) {\n        checks = [\n          ...checks,\n          [\n            new RegExp(erx(this.i18n.greeting), 'gi'),\n            this.i18n.dontAddGreeting\n          ],\n          [\n            new RegExp(erx(this.i18n.kindRegards), 'gi'),\n            this.i18n.dontAddClosing\n          ]\n        ]\n      }\n      if (this.userRegex) {\n        checks.push([this.userRegex, this.i18n.dontInsertName])\n      }\n      checks.forEach((params) => {\n        if (params[0].test(this.body)) {\n          positives.push(params[1])\n        }\n      })\n      return positives\n    },\n    userRegex() {\n      const regex = []\n      if (!this.user) return null\n      if (this.user.first_name && this.user.last_name) {\n        regex.push(erx(`${this.user.first_name} ${this.user.last_name}`))\n      }\n      if (this.user.first_name) {\n        regex.push(erx(this.user.first_name))\n      }\n      if (this.user.first_name) {\n        regex.push(erx(this.user.first_name))\n      }\n      if (regex.length === 0) {\n        return null\n      }\n      return new RegExp(`\\\\b${regex.join('\\\\b|\\\\b')}\\\\b`, 'gi')\n    },\n    hasUserConfirmContent() {\n      if (!this.$parent['django-slots']) return false\n      return (\n        this.$parent['django-slots'][\n          'request-user-confirm'\n        ].textContent.trim() !== ''\n      )\n    },\n    ...mapGetters([\n      'subjectValid',\n      'subjectChanged',\n      'bodyValid',\n      'bodyChanged',\n      'confirmValid',\n      'addressValid',\n      'addressChanged'\n    ])\n  },\n  mounted() {\n    this.updateBody()\n  },\n  methods: {\n    resetFullText() {\n      this.savedFullTextBody = this.body\n      this.fullTextDisabled = false\n      this.fullText = false\n    },\n    updateBody() {\n      if (this.fullText) {\n        this.fullTextDisabled = true\n      }\n      const ta = this.$refs.body\n      while (ta.scrollHeight > ta.clientHeight && ta.rows < MAX_BODY_ROWS) {\n        ta.style.overflow = 'hidden'\n        ta.rows += 1\n      }\n      if (ta.scrollHeight > ta.clientHeight) {\n        ta.style.overflow = 'auto'\n      }\n      this.bodyRows = ta.rows\n    },\n    fixBodyPlaceholders() {\n      this.body = this.body.replaceAll(\n        PLACEHOLDER_MARKER,\n        PLACEHOLDER_REPLACEMENT\n      )\n      this.validateBody()\n    },\n    enableEditing() {\n      this.editingDisabled = false\n      this.$emit('enableEditing')\n    },\n    showFullLetter() {\n      this.fullLetter = true\n    },\n    validateSubject() {\n      this.subjectValidationErrors = []\n      let valid = true\n      if (this.nonMeaningfulSubjects.some((re) => re.test(this.subject))) {\n        this.subjectValidationErrors.push(this.i18n.subjectMeaningful)\n        this.$refs.subject.setCustomValidity(this.i18n.subjectMeaningful)\n        valid = false\n      }\n      // from model via form_utils\n      const minLength = this.$refs.subject.minLength\n      const checkValidity = this.$refs.subject.checkValidity()\n      // unfortunately checkValidity is not enough, it won't kick in until a user interaction\n      // there is a workaround with pattern=\".{min,max}\" but it still won't work for textarea,\n      // so let's keep it consistent. cf. https://stackoverflow.com/a/10294291/629238 */\n      if (!checkValidity || this.subject.length < minLength) {\n        valid = false\n        const minLengthMessage = this.i18n._('valueMinLength', {\n          count: minLength\n        })\n        if (checkValidity) {\n          // if browser wrong, force our message\n          this.$refs.subject.setCustomValidity(minLengthMessage)\n        } else {\n          // let browser's native message take over\n          this.resetSubjectCustomValidity()\n        }\n        if (this.subject.length < minLength) {\n          this.subjectValidationErrors.push(minLengthMessage)\n        }\n      }\n      if (!valid) {\n        // note: reportValidity might only work from a click, but not keyboard event?\n        this.$refs.subject.reportValidity()\n      }\n      this.updateSubjectValidity(valid)\n    },\n    resetSubjectCustomValidity() {\n      this.$refs.subject.setCustomValidity('')\n    },\n    validateBody() {\n      this.bodyValidationErrors = []\n      let valid = true\n      this.showPlaceholderReplacer = false\n      if (this.body.includes(PLACEHOLDER_MARKER)) {\n        const placeholderMessage = this.i18n._('containsPlaceholderMarker', {\n          placeholder: PLACEHOLDER_MARKER\n        })\n        this.bodyValidationErrors.push(placeholderMessage)\n        this.showPlaceholderReplacer = true\n        this.$refs.body.setCustomValidity(placeholderMessage)\n        valid = false\n      }\n      // see validateSubject above for comments, esp. re: textarea\n      const minLength = this.$refs.body.minLength\n      const checkValidity = this.$refs.body.checkValidity()\n      if (!checkValidity || this.body.length < minLength) {\n        valid = false\n        const minLengthMessage = this.i18n._('valueMinLength', {\n          count: minLength\n        })\n        if (checkValidity) {\n          this.$refs.body.setCustomValidity(minLengthMessage)\n        } else {\n          this.resetBodyCustomValidity()\n        }\n        if (this.body.length < minLength) {\n          this.bodyValidationErrors.push(minLengthMessage)\n        }\n      }\n      if (!valid) {\n        this.$refs.body.reportValidity()\n      }\n      this.updateBodyValidity(valid)\n    },\n    resetBodyCustomValidity() {\n      this.$refs.body.setCustomValidity('')\n    },\n    validateConfirm() {\n      this.$refs.userConfirm.validate()\n    },\n    validateAllNextStep() {\n      this.clearFormErrors = true\n      if (!this.editingDisabled) {\n        // only one reportValidity will be visible, but the order/precedence seems a bit unpredictable\n        this.validateBody()\n        this.validateSubject()\n      }\n      const editingPassed =\n        (this.bodyValid && this.subjectValid) || this.editingDisabled\n      if (this.hasUserConfirmContent && this.confirmRequired)\n        this.validateConfirm()\n      const confirmPassed =\n        this.confirmValid ||\n        !this.confirmRequired ||\n        !this.hasUserConfirmContent\n      if (editingPassed && confirmPassed) {\n        this.$emit('stepNext')\n      }\n    },\n    setStepChangePublicbody() {\n      this.setStep(STEPS.SELECT_PUBLICBODY)\n    },\n    ...mapMutations({\n      setStep: SET_STEP,\n      updateBodyValidity: UPDATE_BODY_VALIDITY,\n      updateBodyChanged: UPDATE_BODY_CHANGED,\n      updateSubjectValidity: UPDATE_SUBJECT_VALIDITY,\n      updateSubjectChanged: UPDATE_SUBJECT_CHANGED,\n      updateProof: UPDATE_PROOF\n    })\n  }\n}\n</script>\n\n<style lang=\"scss\" scoped>\n@import '../../../styles/variables';\n\n.make-request-container {\n  padding-bottom: 1rem;\n}\n\n.container-multi {\n  /* Allow container to wider than normal to allow for more space */\n  width: 100%;\n  padding-right: 15px;\n  padding-left: 15px;\n  margin-right: auto;\n  margin-left: auto;\n  max-width: 1400px;\n}\n\nlegend {\n  padding: 2rem 0 2rem;\n  font-size: 2rem;\n}\n\n.small a {\n  color: $blue;\n}\n\n.publicbody-summary-container {\n  margin: 0 0 $spacer * 2;\n}\n\n.publicbody-summary {\n  font-size: $font-size-lg;\n}\n\n.publicbody-summary-list {\n  max-height: 5rem;\n  border: 1px solid #aaa;\n  overflow: auto;\n}\n\n.pb-change-link {\n  font-weight: normal;\n  font-size: $font-size-sm;\n}\n\n.body-text,\n.body-text-em {\n  hyphens: none;\n  white-space: pre-wrap;\n  word-wrap: break-word;\n  color: #666;\n}\n\n.body-text-em {\n  color: #222;\n}\n\n.body-textarea {\n  width: 100%;\n}\n\n.body-textarea {\n  padding-left: 0;\n  padding: 5px;\n}\n.body-textarea.attention {\n  border-left: 3px solid #faa;\n}\n\n.saved-body {\n  width: 100%;\n  height: 5em;\n}\n\n.saved-full-text-enter-active,\n.saved-full-text-leave-active {\n  transition: opacity 0.5s;\n}\n.saved-full-text-enter,\n.saved-full-text-leave-to {\n  opacity: 0;\n}\n\n.show-full-letter {\n  color: #999;\n  text-decoration: underline;\n}\n</style>\n","<template>\n  <div class=\"row\">\n    <div class=\"col-md-12\">\n      <input\n        type=\"hidden\"\n        name=\"hide_public\"\n        :value=\"hidePublic\"\n        id=\"id_hide_public\"\n      />\n      <div class=\"mb-3\" v-if=\"!hidePublic\">\n        <div class=\"card-body\">\n          <div\n            v-for=\"(choice, choiceIndex) in form.fields.public.choices\"\n            :key=\"choice.value\"\n            class=\"form-check form-check-emphasized\"\n          >\n            <input\n              type=\"radio\"\n              name=\"public\"\n              class=\"form-check-input\"\n              :id=\"'id_public_choice' + choiceIndex\"\n              :value=\"choice.value\"\n              v-model=\"publicValue\"\n            />\n            <label\n              class=\"form-check-label\"\n              :for=\"'id_public_choice' + choiceIndex\"\n              v-html=\"choice.label\"\n            />\n          </div>\n        </div>\n      </div>\n      <div v-else style=\"display: none\">\n        <input\n          type=\"hidden\"\n          name=\"public\"\n          id=\"id_public\"\n          v-model=\"publicValue\"\n        />\n      </div>\n    </div>\n  </div>\n</template>\n\n<script>\nexport default {\n  name: 'RequestPublic',\n  props: {\n    form: {\n      type: Object\n    },\n    hidePublic: {\n      type: Boolean,\n      default: false\n    },\n    initialPublic: {\n      type: String,\n      required: true\n    }\n  },\n  data() {\n    return {\n      public: this.initialPublic\n    }\n  },\n  computed: {\n    publicValue: {\n      get() {\n        return this.public\n      },\n      set(value) {\n        this.public = value\n        this.$emit('update:initialPublic', value)\n      }\n    }\n  }\n}\n</script>\n","<template>\n  <div\n    v-if=\"multiRequest && canBatchRequest\"\n    class=\"publicbody-summary-container\"\n  >\n    <div class=\"publicbody-summary\">\n      <ul class=\"list\">\n        <PbTruncatedList\n          :public-bodies=\"publicBodies\"\n          :i18n=\"i18n\"\n          :threshold=\"20\"\n          :show-count=\"20\"\n        >\n          <template #default=\"{ pb }\">\n            <li>\n              <a v-if=\"pb\" :href=\"pb.site_url\" target=\"_blank\">\n                {{ pb.name }}\n              </a>\n\n              <div\n                v-if=\"pb.request_note_html\"\n                class=\"col-lg-8 alert alert-warning pb-0\"\n                v-html=\"pb.request_note_html\"\n              />\n            </li>\n          </template>\n          <template #truncation=\"{ count }\">\n            <li>… ({{ i18n._('publicBodiesCount', { count }) }})</li>\n          </template>\n        </PbTruncatedList>\n      </ul>\n    </div>\n  </div>\n  <div v-if=\"multiRequest && !canBatchRequest\" class=\"mb-5 mt-5\">\n    <p>{{ i18n._('toMultiPublicBodies', { count: publicBodies.length }) }}</p>\n    <div class=\"publicbody-summary-list\">\n      <ul>\n        <li v-for=\"pb in publicBodies\" :key=\"pb.id\">\n          {{ pb.name }}\n        </li>\n      </ul>\n    </div>\n    <small>{{ i18n.batchRequestDraftOnly }}</small>\n  </div>\n\n  <div v-if=\"!multiRequest\" class=\"publicbody-summary-container\">\n    <div class=\"row\">\n      <div class=\"col-lg-12 publicbody-summary\">\n        <p v-if=\"publicBody\">\n          <a :href=\"publicBody.site_url\" target=\"_blank\">\n            {{ publicBody.name }}\n          </a>\n        </p>\n      </div>\n    </div>\n    <div v-if=\"hasLawNotes\" class=\"row\">\n      <div class=\"col-lg-8\">\n        <div class=\"alert alert-warning\" v-html=\"lawNotes\" />\n      </div>\n    </div>\n    <div v-if=\"hasPublicBodyNotes\" class=\"row\">\n      <div class=\"col-lg-8\">\n        <div class=\"alert alert-warning\" v-html=\"publicBodyNotes\" />\n      </div>\n    </div>\n  </div>\n</template>\n\n<script>\nimport I18nMixin from '../../lib/i18n-mixin'\n\nimport { mapGetters } from 'vuex'\n\nimport PbTruncatedList from '../publicbody/pb-truncated-list.vue'\n\nexport default {\n  name: 'ReviewPublicbody',\n  mixins: [I18nMixin],\n  components: {\n    PbTruncatedList\n  },\n  props: {\n    config: {\n      type: Object,\n      required: true\n    },\n    multiRequest: {\n      type: Boolean,\n      default: false\n    },\n    pbScope: {\n      type: String,\n      required: true\n    }\n  },\n  computed: {\n    canBatchRequest() {\n      return this.config.settings.user_can_create_batch\n    },\n    publicBody() {\n      return this.getPublicBodyByScope(this.pbScope)\n    },\n    publicBodies() {\n      return this.getPublicBodiesByScope(this.pbScope)\n    },\n    hasLawNotes() {\n      if (this.defaultLaw) {\n        return !!this.defaultLaw.request_note_html\n      }\n      // FIXME: find all notes of all public body default laws?\n      return false\n    },\n    hasPublicBodyNotes() {\n      if (this.publicBody) {\n        return !!this.publicBody.request_note_html\n      }\n      // FIXME: find all notes of all public body default laws?\n      return false\n    },\n    lawNotes() {\n      if (this.hasLawNotes) {\n        return this.defaultLaw.request_note_html\n      }\n      return ''\n    },\n    publicBodyNotes() {\n      if (this.hasPublicBodyNotes) {\n        return this.publicBody.request_note_html\n      }\n      return ''\n    },\n    ...mapGetters([\n      'getPublicBodyByScope',\n      'getPublicBodiesByScope',\n      'defaultLaw'\n    ])\n  }\n}\n</script>\n\n<style lang=\"scss\" scoped>\n.list {\n  list-style-type: none;\n  margin: 0;\n  padding: 0;\n}\n</style>\n","<template>\n  <div class=\"row border-top py-1\">\n    <div class=\"col-sm-12 col-md-2 py-1\">\n      <h3 class=\"fs-6 lh-base m-0\" style=\"hyphens: auto\">{{ title }}</h3>\n    </div>\n    <div class=\"col-sm-8 col-md-8 py-1\">\n      <slot name=\"contents\">\n        <div :class=\"{ 'text-danger': invalid }\">{{ contents }}</div>\n      </slot>\n    </div>\n    <div class=\"col-sm-4 col-md-2 text-sm-end\">\n      <button\n        type=\"button\"\n        class=\"btn btn-sm\"\n        :class=\"{\n          'btn-link': !invalid,\n          'btn-primary': invalid\n        }\"\n        @click=\"setStep(step)\"\n      >\n        {{ invalid ? i18n.correct : i18n.change }}\n      </button>\n    </div>\n  </div>\n</template>\n\n<script>\nimport { mapMutations } from 'vuex'\nimport { SET_STEP } from '../../store/mutation_types'\n\nexport default {\n  name: 'ReviewRequestLine',\n  props: {\n    i18n: {\n      type: Object,\n      required: true\n    },\n    title: {\n      type: String,\n      default: ''\n    },\n    contents: {\n      type: String,\n      default: ''\n    },\n    invalid: {\n      type: Boolean,\n      default: false\n    },\n    step: {\n      type: Number,\n      required: true\n    }\n  },\n  methods: {\n    ...mapMutations({\n      setStep: SET_STEP\n    })\n  }\n}\n</script>\n","<template>\n  <div class=\"my-4\">\n    <template v-if=\"formFields.time\">\n      <input type=\"hidden\" name=\"time\" :value=\"formFields.time.initial\" />\n    </template>\n    <template v-if=\"formFields.phone\">\n      <div class=\"mb-3 row d-none honigtopf\">\n        <label class=\"col-lg-3 col-form-label\" for=\"id_phone\">\n          {{ formFields.phone.label }}\n        </label>\n        <div class=\"col-lg-9\">\n          <input id=\"id_phone\" class=\"form-control\" type=\"text\" name=\"phone\" />\n        </div>\n      </div>\n    </template>\n    <template v-if=\"formFields.test\">\n      <div class=\"mb-3 row\">\n        <label\n          class=\"col-lg-3 col-form-label\"\n          :class=\"{\n            'text-danger': errors.test,\n            'field-required': formFields.test.required\n          }\"\n          for=\"id_test\"\n        >\n          {{ formFields.test.label }}\n        </label>\n        <div class=\"col-lg-9\">\n          <input class=\"form-control\" type=\"text\" required name=\"test\" />\n          <p class=\"help-block\">\n            <span>{{ formFields.test.help_text }}</span>\n          </p>\n        </div>\n      </div>\n    </template>\n  </div>\n</template>\n\n<script>\nexport default {\n  name: 'UserConfirmation',\n  props: {\n    form: {\n      type: Object\n    }\n  },\n  computed: {\n    formFields() {\n      return this.form.fields\n    },\n    errors() {\n      if (this.form) {\n        return this.form.errors\n      }\n      return {}\n    }\n  }\n}\n</script>\n","<template>\n  <div class=\"my-4\">\n    <!-- TODO empty publicbody causes a nondescript form error (in messages), but does not show up as form error,\n      and does not show up as invalid here, either -->\n    <ReviewRequestLine\n      v-if=\"!hidePublicbodyChooser\"\n      :step=\"STEPS.SELECT_PUBLICBODY\"\n      :i18n=\"i18n\"\n      :title=\"i18n.publicbody\"\n      :invalid=\"needCorrectionPublicbody\"\n    >\n      <template #contents>\n        <span v-if=\"!hasPublicbodies\" class=\"text-danger\">{{ i18n.none }}</span>\n        <ReviewPublicbody\n          v-else\n          :config=\"config\"\n          :pb-scope=\"pbScope\"\n          :multi-request=\"multiRequest\"\n        />\n      </template>\n    </ReviewRequestLine>\n\n    <ReviewRequestLine\n      :i18n=\"i18n\"\n      :title=\"i18n.subject\"\n      :invalid=\"needCorrectionSubject\"\n      :step=\"STEPS.WRITE_REQUEST\"\n      :contents=\"subject || i18n.subject\"\n    />\n\n    <ReviewRequestLine\n      :i18n=\"i18n\"\n      :title=\"i18n.requestBody\"\n      :invalid=\"needCorrectionBody\"\n      :step=\"STEPS.WRITE_REQUEST\"\n    >\n      <template #contents>\n        <div>\n          <div v-if=\"fullText\">\n            <div\n              class=\"body-text review-body-text\"\n              :class=\"{ 'text-danger': needCorrectionBody }\"\n            >\n              <span v-text=\"body\" /><br />\n              <span v-text=\"letterSignatureName\" />\n            </div>\n          </div>\n          <div v-else>\n            <div\n              class=\"body-text review-body-text\"\n              :class=\"{ 'text-danger': needCorrectionBody }\"\n            >\n              <span>{{ letterStart }}</span>\n              <span class=\"highlight\"><br />{{ body }}</span>\n              <span><br /><br />{{ letterEnd }}</span>\n            </div>\n          </div>\n        </div>\n      </template>\n    </ReviewRequestLine>\n\n    <ReviewRequestLine\n      v-if=\"needCorrectionConfirm\"\n      :i18n=\"i18n\"\n      :title=\"i18n.request\"\n      :invalid=\"needCorrectionConfirm\"\n      :contents=\"i18n.notConfirmed\"\n      :step=\"STEPS.WRITE_REQUEST\"\n    />\n\n    <ReviewRequestLine\n      v-if=\"!hidePublic\"\n      :i18n=\"i18n\"\n      :title=\"i18n.visibility\"\n      :step=\"STEPS.REQUEST_PUBLIC\"\n    >\n      <template #contents>\n        {{ requestPublic === 'True' ? i18n.publishNow : i18n.publishLater }}\n        <a\n          v-if=\"config.url.helpRequestPublic\"\n          :href=\"config.url.helpRequestPublic\"\n          @click.prevent=\"\n            $emit('onlinehelpClick', config.url.helpRequestPublic)\n          \"\n          >{{ i18n.help }}</a\n        >\n      </template>\n    </ReviewRequestLine>\n\n    <ReviewRequestLine\n      v-if=\"!user.id\"\n      :i18n=\"i18n\"\n      :title=\"i18n.privacy\"\n      :step=\"STEPS.CREATE_ACCOUNT\"\n    >\n      <template #contents>\n        <span\n          v-html=\"\n            user.private === 'True' ? i18n.nameRedact : i18n.namePlainText\n          \"\n        />\n        <!-- TODO\n        <a\n          href=\"#\"\n          @click.prevent=\"$emit('onlinehelpClick', { content: i18n.TODO })\"\n          >{{ i18n.help }}</a>\n        -->\n      </template>\n    </ReviewRequestLine>\n\n    <ReviewRequestLine\n      v-if=\"!user.id\"\n      :i18n=\"i18n\"\n      :title=\"i18n.name\"\n      :invalid=\"needCorrectionUser\"\n      :step=\"STEPS.CREATE_ACCOUNT\"\n    >\n      <template #contents>\n        <span :class=\"{ 'text-danger': !user.first_name }\">\n          {{ user.first_name || i18n.yourFirstName }}\n        </span>\n        <span\n          :class=\"{ 'text-danger': !user.last_name }\"\n          style=\"margin-left: 1ch\"\n        >\n          {{ user.last_name || i18n.yourLastName }}\n        </span>\n      </template>\n    </ReviewRequestLine>\n\n    <ReviewRequestLine\n      v-if=\"!user.id\"\n      :i18n=\"i18n\"\n      :title=\"i18n.email\"\n      :invalid=\"needCorrectionEmail\"\n      :step=\"STEPS.CREATE_ACCOUNT\"\n    >\n      <template #contents>\n        <span :class=\"{ 'text-danger': needCorrectionEmail }\">\n          {{ user.email || i18n.email }}\n        </span>\n        {{ i18n.notSentToPb }}\n      </template>\n    </ReviewRequestLine>\n\n    <ReviewRequestLine\n      :i18n=\"i18n\"\n      :title=\"i18n.address\"\n      :invalid=\"needCorrectionAddress\"\n      :step=\"user.id ? STEPS.WRITE_REQUEST : STEPS.CREATE_ACCOUNT\"\n    >\n      <template #contents>\n        <div\n          style=\"white-space: pre-line\"\n          :class=\"{ 'text-danger': needCorrectionAddress }\"\n        >\n          {{ user.address || '—' }}\n        </div>\n      </template>\n    </ReviewRequestLine>\n\n    <ReviewRequestLine\n      :i18n=\"i18n\"\n      :title=\"i18n.proof\"\n      :step=\"STEPS.WRITE_REQUEST\"\n      v-if=\"user && proofForm\"\n    >\n      <template #contents>\n        {{ hasProofs ? i18n.hasProofs : i18n.hasNoProofs }}\n      </template>\n    </ReviewRequestLine>\n\n    <ReviewRequestLine\n      v-if=\"needCorrectionTerms\"\n      :i18n=\"i18n\"\n      :title=\"i18n.terms\"\n      :invalid=\"needCorrectionTerms\"\n      :contents=\"i18n.notAgreed\"\n      :step=\"STEPS.CREATE_ACCOUNT\"\n    />\n\n    <UserConfirmation :i18n=\"i18n\" :form=\"userForm\" />\n\n    <div class=\"mt-4\">\n      <button\n        id=\"send-request-button\"\n        type=\"submit\"\n        class=\"btn btn-primary me-2 mb-3\"\n        :disabled=\"needCorrection\"\n        @click.prevent=\"$emit('submit')\"\n      >\n        <i class=\"fa fa-send\" aria-hidden=\"true\" />\n        {{ i18n.submitRequest }}\n      </button>\n      <button\n        v-if=\"user.id && showDraft\"\n        type=\"submit\"\n        class=\"btn btn-secondary mb-3\"\n        name=\"save_draft\"\n        value=\"true\"\n        :disabled=\"needCorrection\"\n        @click=\"$emit('savedraft')\"\n      >\n        <i class=\"fa fa-save\" aria-hidden=\"true\" />\n        {{ i18n.saveAsDraft }}\n      </button>\n    </div>\n  </div>\n</template>\n\n<script>\nimport LetterMixin from './lib/letter-mixin'\n\nimport ReviewPublicbody from './review-publicbody.vue'\nimport ReviewRequestLine from './review-request-line.vue'\nimport UserConfirmation from './user-confirmation'\n\nimport { mapGetters, mapMutations } from 'vuex'\n\nimport { SET_STEP, STEPS } from '../../store/mutation_types'\n\nexport default {\n  name: 'ReviewRequest',\n  mixins: [LetterMixin],\n  components: {\n    ReviewRequestLine,\n    ReviewPublicbody,\n    UserConfirmation\n  },\n  emits: ['submit', 'onlinehelpClick', 'savedraft'],\n  props: {\n    i18n: {\n      type: Object,\n      required: true\n    },\n    config: {\n      type: Object,\n      required: true\n    },\n    pbScope: {\n      type: String,\n      required: true\n    },\n    userForm: {\n      type: Object,\n      required: true\n    },\n    requestForm: {\n      type: Object,\n      required: true\n    },\n    proofForm: {\n      type: Object,\n      required: true\n    },\n    defaultLaw: {\n      type: Object,\n      default: null\n    },\n    multiRequest: {\n      type: Boolean,\n      required: true\n    },\n    fullText: {\n      type: Boolean,\n      required: true\n    },\n    hidePublic: {\n      type: Boolean,\n      required: true\n    },\n    hidePublicbodyChooser: {\n      type: Boolean,\n      required: true\n    },\n    showDraft: {\n      type: Boolean,\n      default: false\n    },\n    hasProof: {\n      type: Boolean,\n      required: true\n    }\n  },\n  data() {\n    return {\n      STEPS\n    }\n  },\n  computed: {\n    needCorrection() {\n      return (\n        this.needCorrectionUser ||\n        this.needCorrectionEmail ||\n        this.needCorrectionPublicbody ||\n        this.needCorrectionSubject ||\n        this.needCorrectionBody ||\n        this.needCorrectionAddress\n      )\n    },\n    needCorrectionUser() {\n      return this.hasFormErrorsUser || this.userValid === false\n    },\n    needCorrectionTerms() {\n      return this.hasFormErrorsUserTerms || this.termsValid === false\n    },\n    hasFormErrorsUser() {\n      // note UserTerms here\n      return (\n        this.hasFormErrorsFirstName ||\n        this.hasFormErrorsLastName ||\n        this.hasFormErrorsUserTerms\n      )\n    },\n    hasFormErrorsFirstName() {\n      if (this.userForm?.fields.first_name?.value !== this.user.first_name)\n        return\n      return 'first_name' in this.userForm.errors\n    },\n    hasFormErrorsLastName() {\n      if (this.userForm?.fields.last_name?.value !== this.user.last_name) return\n      return 'last_name' in this.userForm.errors\n    },\n    hasFormErrorsUserTerms() {\n      if (this.userForm?.fields.terms?.value !== this.user.terms) return\n      return 'terms' in this.userForm.errors\n    },\n    needCorrectionPublicbody() {\n      // TODO are pb-less requests allowed? drafts?\n      // return !this.hasPublicbodies?\n      return false\n    },\n    needCorrectionEmail() {\n      return this.hasFormErrorsEmail || this.emailValid === false\n    },\n    hasFormErrorsEmail() {\n      if (this.userForm?.fields.user_email?.value !== this.user.email) return\n      return 'email' in this.userForm.errors\n    },\n    needCorrectionSubject() {\n      return this.hasFormErrorsSubject || this.subjectValid === false\n    },\n    hasFormErrorsSubject() {\n      // ignore form errors if value changed\n      if (this.requestForm?.fields.subject.value !== this.subject) return\n      return 'subject' in this.requestForm.errors\n    },\n    needCorrectionBody() {\n      return this.hasFormErrorsBody || this.bodyValid === false\n    },\n    hasFormErrorsBody() {\n      // TODO\n      // TODO? the calculation is different than the validation in RequestForm,\n      //   where *any* change explicitly allows re-submitting -- even an effectively unchanged value\n      //   (which is made impossible here, contradictingly)\n      //   maybe need to move was...changed into store...\n      if (this.requestForm?.fields.body.value !== this.body) return\n      return 'body' in this.requestForm.errors\n    },\n    needCorrectionConfirm() {\n      return this.confirmValid === false\n    },\n    needCorrectionAddress() {\n      return this.hasFormErrorsAddress || this.addressValid === false\n    },\n    hasFormErrorsAddress() {\n      if (this.userForm?.fields.address.value !== this.user.address) return\n      return 'address' in this.userForm.errors\n    },\n    publicBody() {\n      return this.getPublicBodyByScope(this.pbScope)\n    },\n    publicBodies() {\n      return this.getPublicBodiesByScope(this.pbScope)\n    },\n    hasPublicbodies() {\n      return this.publicBodies.length > 0\n    },\n    ...mapGetters([\n      'user',\n      'userValid',\n      'subject',\n      'subjectValid',\n      'body',\n      'bodyValid',\n      'emailValid',\n      'addressValid',\n      'termsValid',\n      'confirmValid',\n      'getPublicBodyByScope',\n      'getPublicBodiesByScope',\n      'requestPublic',\n      'hasProofs'\n    ])\n  },\n  methods: {\n    ...mapMutations({\n      setStep: SET_STEP\n    })\n  }\n}\n</script>\n\n<style lang=\"scss\" scoped>\n@import '../../../styles/variables';\n\n.review-body-text {\n  color: var(--#{$prefix}body-color);\n  background-color: var(--#{$prefix}body-bg);\n  border: 1px dashed #777;\n  padding: 0.25em;\n  height: 14em;\n  max-height: 14em;\n  overflow: auto;\n  white-space: pre-wrap;\n  word-wrap: break-word;\n}\n.review-hints {\n  margin-top: 1rem;\n  .error {\n    color: $red;\n  }\n}\n</style>\n","export default \"__VITE_ASSET__SoxZss$Y__\"","<template>\n  <div>\n    <div class=\"row pb-5\">\n      <div class=\"col col-12 col-md-3 text-center text-md-end mb-3 mb-md-0\">\n        <img\n          src=\"../../../images/make-request/step-intro.avif\"\n          alt=\"\"\n          class=\"img-lg mb-3 mb-md-0\"\n        />\n      </div>\n      <div class=\"col col-12 col-md-9 order-md-first\">\n        <h1>{{ i18n.makeRequest }}</h1>\n        <p class=\"lead\">{{ i18n.introText }}</p>\n        <button class=\"btn btn-primary arrow-end\" @click=\"emit('stepNext')\">\n          {{ i18n.letsGo }}\n        </button>\n      </div>\n    </div>\n    <div class=\"border-top border-2 border-light pt-5 mt-3\">\n      <p>{{ i18n.orCampaign }}</p>\n      <div class=\"mt-4\">\n        <DjangoSlot name=\"campaigns\" />\n      </div>\n    </div>\n  </div>\n</template>\n\n<script setup>\nimport { inject } from 'vue'\nimport DjangoSlot from '../../lib/django-slot.vue'\n\nconst i18n = inject('i18n')\n\ndefineProps({\n  config: {\n    type: Object,\n    required: true\n  }\n})\n\nconst emit = defineEmits(['stepNext'])\n</script>\n","<template>\n  <div\n    class=\"form-check my-3\"\n    v-if=\"config.settings.show_skip_intro_howto_preference\"\n  >\n    <input\n      type=\"checkbox\"\n      id=\"skip_intro_howto\"\n      class=\"form-check-input\"\n      v-model=\"preferenceSkipIntroHowto\"\n      @change=\"togglePreference\"\n    />\n    <label for=\"skip_intro_howto\" class=\"form-check-label\">\n      {{ i18n.skipIntroHowto }}\n    </label>\n  </div>\n  <BsToast v-if=\"error\" color=\"danger\" @dismiss=\"error = null\">\n    <template #body>\n      {{ error }}\n    </template>\n  </BsToast>\n</template>\n\n<script setup>\nimport { inject, ref } from 'vue'\n\nimport { userpreferenceUpdate } from '../../api'\n\nimport BsToast from '../bs-toast.vue'\n\nconst i18n = inject('i18n')\n\nconst props = defineProps({\n  config: {\n    type: Object,\n    required: true\n  }\n})\n\nconst preferenceSkipIntroHowto = ref(props.config.settings.skip_intro_howto)\nconst error = ref()\n\nconst togglePreference = () => {\n  const toValue = preferenceSkipIntroHowto.value\n  const fromValue = !toValue\n  preferenceSkipIntroHowto.value = toValue\n  userpreferenceUpdate({\n    path: { key: props.config.settings.skip_intro_howto_preference_key },\n    body: { value: toValue ? '1' : '0' },\n    throwOnError: true\n  }).catch((err) => {\n    console.error('toggle preference error', err)\n    preferenceSkipIntroHowto.value = fromValue\n    error.value = `${i18n.error} ${err?.message || ''}`\n  })\n}\n</script>\n","import { mapMutations, mapActions } from 'vuex'\nimport {\n  UPDATE_FIRST_NAME,\n  UPDATE_LAST_NAME,\n  SET_USER,\n  UPDATE_SUBJECT,\n  UPDATE_BODY,\n  UPDATE_FULL_TEXT,\n  UPDATE_ADDRESS,\n  UPDATE_EMAIL,\n  UPDATE_PRIVATE,\n  UPDATE_SIMILAR_REQUEST_SEARCH,\n  UPDATE_REQUEST_PUBLIC,\n  UPDATE_LAW_TYPE,\n  UPDATE_TERMS,\n  SET_CONFIG,\n  UPDATE_CONFIRM,\n  UPDATE_CLAIMS_VIP\n} from '../../../store/mutation_types'\n\n// for TypedChoiceFields (essentialy BooleanFields, but radio),\n// we never handle or store (actual JS) Booleans, but strings\n// (the alternative would be to avoid TypedChoiceFields,\n//  and provide the two choice labels on the Vue side)\nconst coerceDjangoBool = (booleanOrString) => {\n  return booleanOrString === true || booleanOrString === 'True'\n    ? 'True'\n    : 'False'\n}\n\nconst StoreValueMixin = {\n  methods: {\n    initAllStoreValues() {\n      // from props\n      this.setConfig(this.config)\n\n      // the following initStoreValues intertwine several sources,\n      // where \"onload values\" can come from:\n      // - form: via formFields, e.g. after a POST, but also via the ?param=value preset \"API\"\n      // - props: <request-page :param=\"value\">, e.g. publicbodies expanded by make_request\n      // - storage: sessionStorage \"remembered\" values (so they survive an account creation)\n      //   explicitly saved on step transition by writeToStorage.\n      // the precedence rules are complex, so we make several calls to initStoreValues,\n      // with different configurations\n      // (instead of supporting several Values, probably a singular initStoreValue\n      // would be more readable...)\n\n      // init \"regular form values\" from storage if not POSTed\n      // (not form-submitted, but refreshed, or returned from login)\n      // in the case of \"preset by GET\", e.g. ?subject=foo\n      // we still do not ignoreStorage to allow changes (of the presets) to persist\n      // -- within the session. In the (unlikely) case of \"session reuse\"\n      // (e.g. abandon draft, open the page with different GETs in the same tab)\n      // this could lead to the GET parameters be ignored.\n      // We prevent this by tying the storage to a URL-scoped key.\n      this.initStoreValues({\n        ignoreStorage: this.config.wasPost,\n        formFields: this.requestForm.fields,\n        formCoerce: {\n          public: coerceDjangoBool\n        },\n        mutationMap: {\n          subject: UPDATE_SUBJECT,\n          body: UPDATE_BODY,\n          full_text: UPDATE_FULL_TEXT, // TODO\n          public: UPDATE_REQUEST_PUBLIC\n        }\n      })\n\n      // law_type only passed by query string, e.g. ?law_type=IFG, so never storage, always form\n      this.initStoreValues({\n        ignoreStorage: true,\n        formFields: this.requestForm.fields,\n        mutationMap: {\n          law_type: UPDATE_LAW_TYPE\n        }\n      })\n\n      if (this.userInfo !== null) {\n        // user is authenticated...\n        // authenticated user fields always set by prop, never form, never storage\n        this.initStoreValues({\n          ignoreStorage: true,\n          // no formFields, always from prop\n          propMap: {\n            user: this.userInfo\n          },\n          mutationMap: {\n            user: SET_USER\n          }\n        })\n      } else {\n        // for anonymous/logged-out users we use storage, or forms if POSTed.\n        // note that the \"fields\" here are stored flatly, not in a .user object,\n        // and hence we need individual, per-field mutations.\n        // see writeToStorage, reduced, where they are flattened/plucked\n        this.initStoreValues({\n          ignoreStorage: this.config.wasPost,\n          formFields: this.userForm.fields,\n          formCoerce: {\n            private: coerceDjangoBool,\n            claims_vip: coerceDjangoBool\n          },\n          mutationMap: {\n            user_email: UPDATE_EMAIL,\n            first_name: UPDATE_FIRST_NAME,\n            last_name: UPDATE_LAST_NAME,\n            private: UPDATE_PRIVATE,\n            address: UPDATE_ADDRESS,\n            terms: UPDATE_TERMS,\n            claims_vip: UPDATE_CLAIMS_VIP\n          }\n        })\n      }\n\n      // confirm is not a form field, always from storage\n      this.initStoreValues({\n        mutationMap: {\n          confirm: UPDATE_CONFIRM\n        }\n      })\n\n      // address provided via formField.initial when logged in\n      this.initStoreValues({\n        ignoreStorage: this.config.wasPost,\n        formFields: this.userForm.fields,\n        mutationMap: {\n          address: UPDATE_ADDRESS\n        }\n      })\n\n      // search form config (jurisdiction/-kind, year range, campaign) is ephemeral, so always in storage only\n      this.initStoreValues({\n        mutationMap: {\n          similarRequestSearch: UPDATE_SIMILAR_REQUEST_SEARCH\n        }\n      })\n    },\n    ...mapMutations({\n      setConfig: SET_CONFIG\n    }),\n    ...mapActions(['initStoreValues'])\n  }\n}\n\nexport default StoreValueMixin\n","<template>\n  <div>\n    <div class=\"row mb-3\">\n      <!-- FIXME? the linter complained about vue/no-duplicate-attributes re class + :class,\n       which should have allowCoexistClass:true by default.\n       Adding that explicitly to eslint.config didn't help,\n       eslint-disable for this file didn't either. -->\n      <label\n        class=\"form-label field-required\"\n        for=\"id_first_name\"\n        :class=\"[\n          { 'text-danger': userformErrors.first_name },\n          'col-sm-4',\n          'col-md-3',\n          'col-form-label'\n        ]\"\n        >{{ i18n.yourFirstName }}\n      </label>\n      <div class=\"col-sm-8 col-md-5\">\n        <input\n          id=\"id_first_name\"\n          v-model=\"first_name\"\n          ref=\"first_name\"\n          type=\"text\"\n          name=\"first_name\"\n          class=\"form-control\"\n          :class=\"{\n            'is-invalid': userformErrors.first_name && !updateFirstNameChanged\n          }\"\n          :placeholder=\"userformFields.first_name.placeholder\"\n          required\n          :maxlength=\"userformFields.first_name.max_length\"\n          @change=\"updateFirstNameChanged(true)\"\n        />\n        <p\n          v-for=\"e in userformErrors.first_name\"\n          :key=\"e.message\"\n          class=\"text-danger\"\n        >\n          {{ e.message }}\n        </p>\n      </div>\n    </div>\n    <div class=\"row mb-3\">\n      <label\n        class=\"form-label field-required\"\n        for=\"id_last_name\"\n        :class=\"[\n          { 'text-danger': userformErrors.last_name },\n          'col-sm-4',\n          'col-md-3',\n          'col-form-label'\n        ]\"\n        >{{ i18n.yourLastName }}\n      </label>\n      <div class=\"col-sm-8 col-md-5\">\n        <input\n          id=\"id_last_name\"\n          v-model=\"last_name\"\n          ref=\"last_name\"\n          type=\"text\"\n          name=\"last_name\"\n          class=\"form-control\"\n          :class=\"{\n            'is-invalid': userformErrors.last_name && !lastNameChanged\n          }\"\n          :placeholder=\"userformFields.last_name.placeholder\"\n          required\n          :maxlength=\"userformFields.last_name.max_length\"\n          @change=\"updateLastNameChanged(true)\"\n        />\n        <div v-if=\"usePseudonym\">\n          <small\n            v-if=\"userformFields.last_name.help_text\"\n            v-html=\"userformFields.last_name.help_text\"\n          />\n        </div>\n        <p v-for=\"e in userformErrors.last_name\" :key=\"e.message\">\n          {{ e.message }}\n        </p>\n      </div>\n    </div>\n    <div class=\"mb-3 row\">\n      <label\n        for=\"id_user_email\"\n        class=\"col-sm-4 col-md-3 col-form-label\"\n        :class=\"{\n          'text-danger': userformErrors.user_email,\n          'field-required': !user\n        }\"\n      >\n        {{ i18n.yourEmail }}\n      </label>\n      <div class=\"col-sm-8 col-md-5\">\n        <input\n          v-model=\"email\"\n          ref=\"email\"\n          type=\"email\"\n          name=\"user_email\"\n          class=\"form-control\"\n          :class=\"{ 'is-invalid': userformErrors.user_email && !emailChanged }\"\n          :placeholder=\"userformFields.user_email.placeholder\"\n          required\n          :maxlength=\"userformFields.user_email.max_length\"\n          @change=\"updateEmailChanged(true)\"\n        />\n        <p\n          v-for=\"e in userformErrors.user_email\"\n          :key=\"e.message\"\n          class=\"text-danger\"\n        >\n          {{ e.message }}\n        </p>\n      </div>\n    </div>\n\n    <!--\n          TODO: does not work a.t.m. without changes\n            1. change MakeRequestView.get_user_form\n              form_klass = NewUserForm → NewUserWithPasswordForm\n            2. account.forms.NewUserWithPasswordForm.clean\n              super().clean() returns None\n              should compare self.data[\"passwordN\"] ?\n                and return self.cleaned_data ?\n            3. on form errors, password fields remain empty, have to be re-filled\n            4. /account/confirmed/ has a set password prompt\n\n        <template v-if=\"formFields.password\">\n          <div class=\"mb-3 row\">\n            <label\n              for=\"id_password\"\n              class=\"col-sm-3 col-form-label\"\n              >\n              {{ i18n.password }}\n            </label>\n            <div\n              class=\"col-sm-9\"\n              >\n              <input\n                name=\"password\"\n                type=\"password\"\n                class=\"form-control\"\n                />\n            </div>\n          </div>\n          <div class=\"mb-3 row\">\n            <label\n              for=\"id_password2\"\n              class=\"col-sm-3 col-form-label\"\n              >\n              {{ i18n.passwordRepeated }}\n            </label>\n            <div\n              class=\"col-sm-9\"\n              >\n              <input\n                name=\"password2\"\n                type=\"password\"\n                class=\"form-control\"\n                />\n            </div>\n          </div>\n        </template>\n      -->\n  </div>\n</template>\n\n<script>\nimport I18nMixin from '../../lib/i18n-mixin'\n\nimport { mapGetters, mapMutations } from 'vuex'\n\nimport {\n  UPDATE_FIRST_NAME_VALIDITY,\n  UPDATE_FIRST_NAME_CHANGED,\n  UPDATE_LAST_NAME_VALIDITY,\n  UPDATE_LAST_NAME_CHANGED,\n  UPDATE_EMAIL_VALIDITY,\n  UPDATE_EMAIL_CHANGED\n} from '../../store/mutation_types'\n\nexport default {\n  name: 'UserRegistration',\n  mixins: [I18nMixin],\n  props: {\n    config: {\n      type: Object\n    },\n    form: {\n      type: Object\n    },\n    user: {\n      type: Object,\n      default: null\n    },\n    userForm: {\n      type: Object\n    },\n    initialFirstName: {\n      type: String,\n      default: ''\n    },\n    initialLastName: {\n      type: String,\n      default: ''\n    },\n    initialEmail: {\n      type: String,\n      default: ''\n    },\n    usePseudonym: {\n      type: Boolean,\n      default: false\n    }\n  },\n  data() {\n    return {\n      emailValue: this.initialEmail,\n      firstNameValue:\n        this.initialFirstName || (this.user && this.user.first_name) || '',\n      lastNameValue:\n        this.initialLastName || (this.user && this.user.last_name) || ''\n    }\n  },\n  computed: {\n    userformFields() {\n      return this.userForm.fields\n    },\n    userformErrors() {\n      return this.userForm.errors\n    },\n    first_name: {\n      get() {\n        return this.firstNameValue\n      },\n      set(value) {\n        this.firstNameValue = value\n        this.$emit('update:initialFirstName', value)\n      }\n    },\n    last_name: {\n      get() {\n        return this.lastNameValue\n      },\n      set(value) {\n        this.lastNameValue = value\n        this.$emit('update:initialLastName', value)\n      }\n    },\n    email: {\n      get() {\n        return this.emailValue\n      },\n      set(value) {\n        this.emailValue = value\n        this.$emit('update:initialEmail', value)\n      }\n    },\n    ...mapGetters(['firstNameChanged', 'lastNameChanged', 'emailChanged'])\n  },\n  methods: {\n    validateAll() {\n      // validate in \"reverse document order\" since the last (negative) report triggers popup and lingers\n      // note that we're impurely committing side-effectful reportValidity (instead of checkValidity)\n      this.updateEmailValidity(this.$refs.email.reportValidity())\n      this.updateLastNameValidity(this.$refs.last_name.reportValidity())\n      this.updateFirstNameValidity(this.$refs.first_name.reportValidity())\n    },\n    ...mapMutations({\n      updateFirstNameValidity: UPDATE_FIRST_NAME_VALIDITY,\n      updateFirstNameChanged: UPDATE_FIRST_NAME_CHANGED,\n      updateLastNameValidity: UPDATE_LAST_NAME_VALIDITY,\n      updateLastNameChanged: UPDATE_LAST_NAME_CHANGED,\n      updateEmailValidity: UPDATE_EMAIL_VALIDITY,\n      updateEmailChanged: UPDATE_EMAIL_CHANGED\n    })\n  }\n}\n</script>\n","<template>\n  <div class=\"row\">\n    <div class=\"col-md-8\">\n      <div class=\"form-check form-check-emphasized\">\n        <input\n          type=\"checkbox\"\n          v-model=\"terms\"\n          ref=\"terms\"\n          name=\"terms\"\n          class=\"form-check-input\"\n          :class=\"{ 'is-invalid': errors.terms && !termsChanged }\"\n          required=\"\"\n          id=\"id_terms\"\n          @change=\"updateTermsChanged(true)\"\n        />\n        <label\n          for=\"id_terms\"\n          class=\"form-check-label field-required\"\n          :class=\"{ 'text-danger': errors.terms && !termsChanged }\"\n        >\n          <span v-html=\"form.fields.terms.label\"></span>\n        </label>\n      </div>\n    </div>\n  </div>\n</template>\n\n<script>\nimport { mapGetters, mapMutations } from 'vuex'\n\nimport {\n  UPDATE_TERMS,\n  UPDATE_TERMS_VALIDITY,\n  UPDATE_TERMS_CHANGED\n} from '../../store/mutation_types'\n\nexport default {\n  name: 'UserTerms',\n  props: {\n    form: {\n      type: Object\n    },\n    initialTerms: {\n      type: Boolean,\n      default: false\n    }\n  },\n  data() {\n    return {\n      termsValue: this.initialTerms\n    }\n  },\n  computed: {\n    formFields() {\n      return this.form.fields\n    },\n    errors() {\n      if (this.form) {\n        return this.form.errors\n      }\n      return {}\n    },\n    terms: {\n      get() {\n        return this.$store.state.user.terms\n      },\n      set(value) {\n        this.updateTerms(value)\n      }\n    },\n    ...mapGetters(['termsChanged'])\n  },\n  methods: {\n    validate() {\n      this.updateTermsValidity(this.$refs.terms.reportValidity())\n    },\n    ...mapMutations({\n      updateTerms: UPDATE_TERMS,\n      updateTermsValidity: UPDATE_TERMS_VALIDITY,\n      updateTermsChanged: UPDATE_TERMS_CHANGED\n    })\n  }\n}\n</script>\n","<template>\n  <div class=\"row mt-2\">\n    <div class=\"col-md-8\">\n      <slot></slot>\n    </div>\n  </div>\n  <div class=\"row\">\n    <div class=\"col-md-8\">\n      <div\n        v-for=\"(choice, choiceIndex) in userformFields.private.choices\"\n        :key=\"choice.value\"\n        class=\"form-check form-check-emphasized\"\n      >\n        <input\n          :id=\"'id_private_choice' + choiceIndex\"\n          class=\"form-check-input\"\n          v-model=\"userPrivate\"\n          type=\"radio\"\n          name=\"private\"\n          :value=\"choice.value\"\n        />\n        <label\n          :for=\"'id_private_choice' + choiceIndex\"\n          class=\"form-check-label\"\n          v-html=\"choice.label\"\n        />\n      </div>\n      <!-- <p class=\"help-block\" v-html=\"userformFields.private.help_text\" /> -->\n      <p>\n        <a\n          v-if=\"config.url.helpRequestPrivacy\"\n          :href=\"config.url.helpRequestPrivacy\"\n          target=\"_blank\"\n          >{{ i18n.privacyMoreInfo }}</a\n        >\n      </p>\n    </div>\n  </div>\n</template>\n\n<script>\nexport default {\n  name: 'UserPublic',\n  props: {\n    config: {\n      type: Object\n    },\n    userForm: {\n      type: Object\n    },\n    initialPrivate: {\n      type: String,\n      required: true\n    }\n  },\n  inject: ['i18n'],\n  data() {\n    return {\n      privateValue: this.initialPrivate\n    }\n  },\n  computed: {\n    userformFields() {\n      return this.userForm.fields\n    },\n    userPrivate: {\n      get() {\n        return this.privateValue\n      },\n      set(value) {\n        this.privateValue = value\n        this.$emit('update:initialPrivate', value)\n      }\n    }\n  }\n}\n</script>\n","<template>\n  <div class=\"row mt-2\">\n    <div class=\"col-md-8\">\n      <p>{{ field.help_text }}</p>\n    </div>\n  </div>\n  <div class=\"row\">\n    <div class=\"col-md-8\">\n      <div\n        v-for=\"(choice, choiceIndex) in field.choices\"\n        :key=\"choice.value\"\n        class=\"form-check form-check-emphasized\"\n      >\n        <input\n          :id=\"'id_claims_vip_choice' + choiceIndex\"\n          class=\"form-check-input\"\n          v-model=\"value\"\n          type=\"radio\"\n          name=\"claims_vip\"\n          :value=\"choice.value\"\n        />\n        <label\n          :for=\"'id_claims_vip_choice' + choiceIndex\"\n          class=\"form-check-label\"\n          v-html=\"choice.label\"\n        />\n      </div>\n    </div>\n  </div>\n</template>\n\n<script>\nexport default {\n  name: 'UserClaimsVip',\n  props: {\n    config: {\n      type: Object\n    },\n    userForm: {\n      type: Object\n    },\n    initialValue: {\n      type: String,\n      required: true\n    }\n  },\n  data() {\n    return {\n      internalValue: this.initialValue\n    }\n  },\n  computed: {\n    field() {\n      return this.userForm.fields.claims_vip\n    },\n    value: {\n      get() {\n        return this.internalValue\n      },\n      set(newValue) {\n        this.internalValue = newValue\n        this.$emit('update:initialValue', newValue)\n      }\n    }\n  }\n}\n</script>\n","<template>\n  <div>\n    <UserRegistration\n      ref=\"userRegistration\"\n      :form=\"userForm\"\n      :user-form=\"userForm\"\n      :config=\"config\"\n      :use-pseudonym=\"usePseudonym\"\n      v-model:initial-first-name=\"firstName\"\n      v-model:initial-last-name=\"lastName\"\n      v-model:initial-email=\"email\"\n    />\n\n    <!-- TODO: password, see UserRegistration stub -->\n\n    <UserAddress\n      ref=\"userAddress\"\n      :i18n=\"i18n\"\n      :form=\"userForm\"\n      :config=\"config\"\n      :default-law=\"defaultLaw\"\n      :address-help-text=\"addressHelpText\"\n      :address-required=\"addressRequired\"\n    />\n\n    <template v-if=\"config.settings.user_can_hide_web\">\n      <h3 class=\"fs-6\">{{ i18n.privacy }}</h3>\n      <UserPublic\n        :user-form=\"userForm\"\n        :config=\"config\"\n        v-model:initial-private=\"userPrivate\"\n      >\n        <slot name=\"userPublicPreamble\"></slot>\n      </UserPublic>\n    </template>\n\n    <template v-if=\"config.settings.user_can_claim_vip && showUserClaimsVip\">\n      <h3 class=\"fs-6\">{{ userForm.fields.claims_vip.label }}</h3>\n      <UserClaimsVip\n        :user-form=\"userForm\"\n        v-model:initial-value=\"userClaimsVip\"\n      />\n    </template>\n\n    <h3 class=\"fs-6\">{{ i18n.terms }}</h3>\n    <UserTerms\n      ref=\"userTerms\"\n      :form=\"userForm\"\n      v-model:initial-terms=\"userTerms\"\n    />\n\n    <div class=\"my-4\" v-if=\"showNextButton\">\n      <button\n        type=\"button\"\n        class=\"btn btn-primary\"\n        @click=\"validateAllNextStep\"\n      >\n        {{ i18n.stepNext }}\n      </button>\n    </div>\n  </div>\n</template>\n\n<script>\nimport UserRegistration from './user-registration'\nimport UserTerms from './user-terms'\nimport UserPublic from './user-public.vue'\nimport UserAddress from './user-address.vue'\nimport UserClaimsVip from './user-claims-vip.vue'\n\nimport { mapGetters, mapMutations } from 'vuex'\n\nimport {\n  UPDATE_FIRST_NAME,\n  UPDATE_LAST_NAME,\n  UPDATE_EMAIL,\n  UPDATE_PRIVATE,\n  UPDATE_CLAIMS_VIP,\n  UPDATE_TERMS\n} from '../../store/mutation_types'\n\nimport I18nMixin from '../../lib/i18n-mixin'\n\nexport default {\n  name: 'UserCreateAccount',\n  components: {\n    UserRegistration,\n    UserTerms,\n    UserPublic,\n    UserAddress,\n    UserClaimsVip\n  },\n  mixins: [I18nMixin],\n  emits: ['stepNext'],\n  props: {\n    config: {\n      type: Object\n    },\n    userForm: {\n      type: Object\n    },\n    showNextButton: {\n      type: Boolean\n    },\n    showUserClaimsVip: {\n      type: Boolean\n    },\n    addressHelpText: {\n      type: String,\n      default: null\n    },\n    addressRequired: {\n      type: Boolean,\n      default: false\n    },\n    defaultLaw: {\n      type: Object\n    },\n    // TODO: this used to be true, hint should be added to privacy help page?\n    usePseudonym: {\n      type: Boolean,\n      default: false\n    }\n  },\n  computed: {\n    email: {\n      get() {\n        return this.$store.state.user.email\n      },\n      set(value) {\n        this.updateEmail(value)\n      }\n    },\n    firstName: {\n      get() {\n        return this.$store.state.user.first_name\n      },\n      set(value) {\n        this.updateFirstName(value)\n      }\n    },\n    lastName: {\n      get() {\n        return this.$store.state.user.last_name\n      },\n      set(value) {\n        this.updateLastName(value)\n      }\n    },\n    userPrivate: {\n      get() {\n        return this.$store.state.user.private\n      },\n      set(value) {\n        this.updatePrivate(value)\n      }\n    },\n    userClaimsVip: {\n      get() {\n        return this.$store.state.user.claims_vip\n      },\n      set(value) {\n        this.updateClaimsVip(value)\n      }\n    },\n    userTerms: {\n      get() {\n        return this.$store.state.user.terms\n      },\n      set(value) {\n        this.updateTerms(value)\n      }\n    },\n    ...mapGetters([\n      'firstNameValid',\n      'lastNameValid',\n      'emailValid',\n      'addressValid',\n      'termsValid',\n      'stepCanContinue'\n    ])\n  },\n  methods: {\n    validateAllNextStep() {\n      // child components don't `expose` explicitly, but this still works\n      this.$refs.userTerms.validate()\n      this.$refs.userAddress.validate()\n      this.$refs.userRegistration.validateAll()\n      if (\n        this.firstNameValid &&\n        this.lastNameValid &&\n        this.emailValid &&\n        this.addressValid &&\n        this.termsValid\n      ) {\n        this.$emit('stepNext')\n      }\n    },\n    ...mapMutations({\n      updateFirstName: UPDATE_FIRST_NAME,\n      updateLastName: UPDATE_LAST_NAME,\n      updateEmail: UPDATE_EMAIL,\n      updatePrivate: UPDATE_PRIVATE,\n      updateClaimsVip: UPDATE_CLAIMS_VIP,\n      updateTerms: UPDATE_TERMS\n    })\n  }\n}\n</script>\n","export default \"__VITE_ASSET__MFEpNUdg__\"","export default \"__VITE_ASSET__Cd2yLN2d__\"","<template>\n  <div class=\"make-request-container\">\n    <SimpleStepper\n      class=\"bg-body-tertiary\"\n      :step=\"stepperStepCurrent\"\n      :steps=\"stepperSteps.map((step) => step.label)\"\n      clickable\n      keep-visited-clickable\n      @step-click=\"stepperClick\"\n    >\n      {{ i18n.step }}\n      <!-- avoid 0 -->\n      <strong\n        >{{ this.stepperStepCurrent + 1 }}/{{\n          this.stepperSteps.length\n        }}</strong\n      >:\n      {{ this.stepperSteps[this.stepperStepCurrent]?.label }}\n    </SimpleStepper>\n\n    <div class=\"container position-relative\">\n      <div class=\"row\">\n        <div class=\"col\">\n          <!-- v-show=\"step === STEPS.PREVIEW_SUBMIT\"\n       ...would be less naggy here, but also more confusing in certain cases,\n       e.g. submit from froide-campaign with target _blank -->\n          <div class=\"my-2\">\n            <DjangoSlot name=\"messages\" />\n          </div>\n\n          <div class=\"row justify-content-lg-center\">\n            <div class=\"col-lg-12\">\n              <div\n                v-if=\"stepBack\"\n                class=\"my-3 d-flex justify-content-between align-items-center\"\n              >\n                <a\n                  class=\"action-link arrow-back text-decoration-none ps-0\"\n                  :href=\"'#step-' + stepBack\"\n                  @click=\"setStep(stepBack)\"\n                >\n                  {{ i18n.back }}\n                </a>\n                <button\n                  v-if=\"topNextLabel\"\n                  type=\"button\"\n                  class=\"btn btn-primary\"\n                  :disabled=\"!stepCanContinue(pbScope)\"\n                  @click=\"setStep(stepNext)\"\n                >\n                  {{ topNextLabel }}\n                </button>\n              </div>\n\n              <!-- keep visible for all steps -->\n              <div\n                v-if=\"requestForm.nonFieldErrors.length > 0\"\n                class=\"alert alert-danger\"\n              >\n                <p\n                  v-for=\"error in requestForm.nonFieldErrors\"\n                  :key=\"error\"\n                  v-html=\"error\"\n                />\n              </div>\n              <div v-if=\"fetchError\" class=\"alert alert-danger\">\n                <strong>{{ i18n.error }}</strong>\n                {{ fetchError }}\n              </div>\n\n              <h1\n                v-if=\"hidePublicbodyChooser && hasPublicBodies\"\n                class=\"my-3 fs-5\"\n              >\n                {{ i18n.requestTo }}\n                <PbTruncatedList :public-bodies=\"publicBodies\" :i18n=\"i18n\">\n                  <template #default=\"{ pb, index }\">\n                    <template v-if=\"index > 0\">, </template>{{ pb.name }}\n                  </template>\n                  <template #truncation=\"{ count }\">\n                    , … ({{ i18n._('publicBodiesCount', { count }) }})\n                  </template>\n                </PbTruncatedList>\n              </h1>\n\n              <!-- STEP: INTRO / CAMPAIGNS -->\n\n              <RequestIntro\n                v-if=\"step === STEPS.INTRO\"\n                class=\"mt-3 mt-md-5\"\n                id=\"step_intro\"\n                :config=\"config\"\n                @step-next=\"setStep(stepNext)\"\n              />\n\n              <!-- STEP: INTRO / HOWTO -->\n\n              <div\n                v-if=\"step === STEPS.INTRO_HOWTO\"\n                class=\"mt-5\"\n                id=\"step_intro_howto\"\n              >\n                <DjangoSlot\n                  name=\"intro_howto\"\n                  has-onlinehelp-links\n                  @onlinehelp-click=\"onlineHelpShow($event)\"\n                />\n                <div>\n                  <button\n                    type=\"button\"\n                    class=\"btn btn-primary\"\n                    @click=\"setStep(stepNext)\"\n                  >\n                    {{ i18n.stepNext }}\n                  </button>\n                </div>\n                <IntroSkipPreference :config=\"config\" />\n              </div>\n\n              <!-- STEP: FIND SIMILAR REQUESTS -->\n\n              <div\n                v-show=\"step === STEPS.FIND_SIMILAR\"\n                class=\"mt-3\"\n                id=\"step_find_similar\"\n              >\n                <img\n                  src=\"../../../images/make-request/step-find-similar.avif\"\n                  class=\"step-graphic\"\n                  alt=\"\"\n                />\n\n                <SimilarRequestSearch :config=\"config\">\n                  <template #header>\n                    <h2>{{ i18n.findSimilarRequests }}</h2>\n                    <div class=\"row\">\n                      <div class=\"col-lg-9\">\n                        <DjangoSlot name=\"find-similar-requests-preamble\" />\n                      </div>\n                    </div>\n                  </template>\n                </SimilarRequestSearch>\n                <div>\n                  <button\n                    type=\"button\"\n                    class=\"btn btn-primary\"\n                    @click=\"setStep(stepNext)\"\n                  >\n                    {{ i18n.stepSkip }}\n                  </button>\n                </div>\n                <IntroSkipPreference :config=\"config\" />\n              </div>\n\n              <!-- STEP: SELECT PUBLIC BODY -->\n\n              <div\n                v-if=\"step === STEPS.SELECT_PUBLICBODY\"\n                id=\"step_select_publicbody\"\n              >\n                <img\n                  src=\"../../../images/make-request/step-find-publicbody.avif\"\n                  class=\"step-graphic\"\n                  alt=\"\"\n                  v-if=\"!multiRequest\"\n                />\n\n                <p v-if=\"publicBodies.length > 0\">\n                  {{ i18n.currentlyChosen }}\n                  <PbTruncatedList :public-bodies=\"publicBodies\" :i18n=\"i18n\">\n                    <template #default=\"{ pb, index }\">\n                      <template v-if=\"index > 0\">, </template>{{ pb.name }}\n                    </template>\n                    <template #truncation=\"{ count }\">\n                      , … ({{ i18n._('publicBodiesCount', { count }) }})\n                    </template>\n                  </PbTruncatedList>\n                </p>\n\n                <div v-if=\"multiRequest\">\n                  <!-- PublicBodyChoosers advance step by mutations like SET_STEP_REQUEST (mapped to setStepRequest) -->\n                  <PublicbodyMultiChooser\n                    name=\"publicbody\"\n                    :defaultsearch=\"publicBodySearch\"\n                    :scope=\"pbScope\"\n                    :config=\"config\"\n                  >\n                    <template #publicbody-missing>\n                      <DjangoSlot name=\"publicbody-missing\" />\n                    </template>\n                  </PublicbodyMultiChooser>\n                </div>\n                <div v-else>\n                  <div class=\"row\">\n                    <div class=\"col-lg-9\">\n                      <PublicbodyBetaChooser\n                        name=\"publicbody\"\n                        :defaultsearch=\"publicBodySearch\"\n                        :scope=\"pbScope\"\n                        :form=\"publicbodyForm\"\n                        :config=\"config\"\n                        @step-next=\"setStep(stepNext)\"\n                      >\n                        <template #search-hint>\n                          <DjangoSlot\n                            name=\"publicbody-search-hint\"\n                            has-onlinehelp-links\n                            @onlinehelp-click=\"onlineHelpShow($event)\"\n                          />\n                        </template>\n                        <template #header>\n                          <DjangoSlot name=\"publicbody-legend-title\" />\n                          <DjangoSlot\n                            name=\"publicbody-help-text\"\n                            has-onlinehelp-links\n                            @onlinehelp-click=\"onlineHelpShow($event)\"\n                          />\n                        </template>\n                      </PublicbodyBetaChooser>\n                      <DjangoSlot name=\"publicbody-missing\" />\n                    </div>\n                  </div>\n                </div>\n              </div>\n\n              <!-- STEP: REVIEW PUBLIC BODIES -->\n\n              <div\n                v-if=\"step === STEPS.REVIEW_PUBLICBODY\"\n                id=\"step_review_publicbody\"\n              >\n                <PbMultiReview\n                  name=\"publicbody\"\n                  :i18n=\"i18n\"\n                  :scope=\"pbScope\"\n                  @step-next=\"setStep(stepNext)\"\n                />\n              </div>\n\n              <!-- STEPS: LOGIN or CREATE ? -->\n\n              <div v-show=\"step === STEPS.LOGIN_CREATE\" id=\"step_login_create\">\n                <h2>{{ i18n.account }}</h2>\n                <div class=\"row\">\n                  <div class=\"col-md-6 mb-4\">\n                    <p class=\"mb-auto\">\n                      {{ i18n.createAccountPreamble }}\n                    </p>\n                    <div class=\"mt-3\">\n                      <button\n                        type=\"button\"\n                        class=\"btn btn-primary\"\n                        @click=\"setStep(stepNext)\"\n                      >\n                        {{ i18n.createAccount }}\n                      </button>\n                    </div>\n                  </div>\n                  <div class=\"col-md-6 mb-4\">\n                    <p class=\"mb-auto\">\n                      {{ i18n.doYouAlreadyHaveAccount }}<br />\n                      <small>{{ i18n.thisFormRemembers }}</small>\n                    </p>\n                    <div class=\"mt-3\">\n                      <a\n                        :href=\"config.url.login\"\n                        class=\"btn btn-primary\"\n                        @click=\"writeToStorage\"\n                        >{{ i18n.login }}</a\n                      >\n                    </div>\n                  </div>\n                </div>\n              </div>\n\n              <!-- STEP: CREATE ACCOUNT -->\n\n              <!-- need v-show over v-if so <input>s are in DOM while submitting -->\n              <div\n                v-show=\"step === STEPS.CREATE_ACCOUNT\"\n                id=\"step_create_account\"\n              >\n                <h2>{{ i18n.createAccount }}</h2>\n                <UserCreateAccount\n                  v-if=\"!user.id\"\n                  :config=\"config\"\n                  :user=\"user\"\n                  :request-form=\"requestForm\"\n                  :user-form=\"userForm\"\n                  :default-law=\"defaultLaw\"\n                  show-next-button\n                  show-user-claims-vip\n                  @step-next=\"setStep(stepNext)\"\n                  @onlinehelp-click=\"onlineHelpShow($event)\"\n                >\n                  <template #userPublicPreamble>\n                    <DjangoSlot name=\"user-public-preamble\"></DjangoSlot>\n                  </template>\n                </UserCreateAccount>\n              </div>\n\n              <!-- STEP: WRITE REQUEST -->\n\n              <div\n                v-show=\"step === STEPS.WRITE_REQUEST\"\n                id=\"step_write_request\"\n                class=\"mt-3\"\n              >\n                <h2>{{ i18n.writeRequest }}</h2>\n                <div class=\"row\">\n                  <div class=\"col-lg-3 order-lg-2\">\n                    <div\n                      v-if=\"!editingDisabled\"\n                      class=\"border border-2 border-yellow-200 p-3 tight-margin mb-3 request-hints\"\n                    >\n                      <DjangoSlot\n                        name=\"request-hints\"\n                        has-onlinehelp-links\n                        @onlinehelp-click=\"onlineHelpShow($event)\"\n                      />\n                    </div>\n                  </div>\n                  <div class=\"col-lg-9\">\n                    <RequestForm\n                      :config=\"config\"\n                      :publicbodies=\"publicBodies\"\n                      :user=\"user\"\n                      :request-form=\"requestForm\"\n                      :user-form=\"userForm\"\n                      :proof-form=\"proofForm\"\n                      :hide-publicbody-chooser=\"hidePublicbodyChooser\"\n                      :hide-full-text=\"hideFullText\"\n                      :hide-editing=\"hideEditing\"\n                      show-next-button\n                      :multi-request=\"multiRequest\"\n                      :confirm-required=\"confirmRequired\"\n                      :default-law=\"defaultLaw\"\n                      :law-type=\"lawType\"\n                      v-model:initial-subject=\"subject\"\n                      v-model:initial-body=\"body\"\n                      v-model:initial-full-text=\"fullText\"\n                      :submitting=\"submitting\"\n                      @step-next=\"setStep(stepNext)\"\n                      @step-back=\"setStep(stepBack)\"\n                      @enable-editing=\"editingDisabled = false\"\n                    >\n                      <template #request-legend-title>\n                        <DjangoSlot name=\"request-legend-title\" />\n                      </template>\n                      <template #request-user-confirm>\n                        <DjangoSlot name=\"request-user-confirm\" />\n                      </template>\n                    </RequestForm>\n                  </div>\n                </div>\n              </div>\n\n              <!-- STEP: VISIBILITY -->\n\n              <div\n                v-show=\"step == STEPS.REQUEST_PUBLIC\"\n                id=\"step_request_public\"\n              >\n                <h2>{{ i18n.requestVisibility }}</h2>\n                <DjangoSlot name=\"request-public-preamble\" />\n                <RequestPublic\n                  :form=\"requestForm\"\n                  :hide-public=\"hidePublic\"\n                  v-model:initial-public=\"requestPublic\"\n                />\n                <DjangoSlot name=\"request-public-postamble\" />\n                <div class=\"my-4\">\n                  <button\n                    type=\"button\"\n                    class=\"btn btn-primary\"\n                    @click=\"setStep(stepNext)\"\n                  >\n                    {{ i18n.stepNext }}\n                  </button>\n                </div>\n              </div>\n\n              <!-- STEP: PREVIEW -->\n\n              <div\n                v-if=\"step === STEPS.PREVIEW_SUBMIT\"\n                id=\"step_preview_submit\"\n              >\n                <h2>{{ i18n.previewAndSubmit }}</h2>\n                <ReviewRequest\n                  :i18n=\"i18n\"\n                  :config=\"config\"\n                  :pb-scope=\"pbScope\"\n                  :publicbodies=\"publicBodies\"\n                  :user-form=\"userForm\"\n                  :request-form=\"requestForm\"\n                  :proof-form=\"proofForm\"\n                  :default-law=\"defaultLaw\"\n                  :multi-request=\"multiRequest\"\n                  :full-text=\"fullText\"\n                  :hide-public=\"hidePublic\"\n                  :hide-publicbody-chooser=\"hidePublicbodyChooser\"\n                  :show-draft=\"showDraft\"\n                  @submit=\"submit\"\n                  @savedraft=\"saveDraft\"\n                  @onlinehelp-click=\"onlineHelpShow($event)\"\n                />\n              </div>\n\n              <!-- No STEP: OUTRO here, because it is handled by the form success page -->\n            </div>\n          </div>\n        </div>\n      </div>\n\n      <Transition name=\"fade\">\n        <div\n          class=\"position-absolute top-0 bottom-0 start-0 end-0 d-flex align-items-center justify-content-center text-bg-body bg-opacity-90 fs-1\"\n          aria-live=\"polite\"\n          role=\"status\"\n          v-if=\"submitting\"\n        >\n          <i class=\"fa fa-spinner fa-pulse me-3\" aria-hidden=\"true\" />\n          {{ i18n.loading }}\n        </div>\n      </Transition>\n    </div>\n    <!-- /.container -->\n    <OnlineHelp ref=\"onlineHelp\" />\n  </div>\n</template>\n\n<script>\nimport SimilarRequestSearch from './similar-request-search'\n// TODO: rename, un-beta, remove old?\nimport DjangoSlot from '../../lib/django-slot.vue'\nimport OnlineHelp from '../online-help.vue'\nimport SimpleStepper from '../postupload/simple-stepper.vue'\nimport PbMultiReview from '../publicbody/pb-multi-review'\nimport PublicbodyBetaChooser from '../publicbody/publicbody-beta-chooser.vue'\nimport PublicbodyMultiChooser from '../publicbody/publicbody-multichooser'\nimport RequestForm from './request-form'\nimport RequestPublic from './request-public'\nimport ReviewRequest from './review-request'\nimport PbTruncatedList from '../publicbody/pb-truncated-list.vue'\n\nimport { mapActions, mapGetters, mapMutations } from 'vuex'\n\nimport {\n  CACHE_PUBLICBODIES,\n  SET_PUBLICBODIES,\n  SET_STEP,\n  SET_STEP_NO_HISTORY,\n  STEPS,\n  UPDATE_BODY,\n  UPDATE_FULL_TEXT,\n  UPDATE_REQUEST_PUBLIC,\n  UPDATE_SUBJECT,\n  UPDATE_TERMS\n} from '../../store/mutation_types'\n\nimport I18nMixin from '../../lib/i18n-mixin'\nimport RequestIntro from './request-intro.vue'\nimport IntroSkipPreference from './intro-skip-preference.vue'\nimport LetterMixin from './lib/letter-mixin'\nimport StoreValueMixin from './lib/store-values-mixin'\nimport UserCreateAccount from './user-create-account.vue'\n\nexport default {\n  name: 'RequestPage',\n  components: {\n    IntroSkipPreference,\n    RequestIntro,\n    PublicbodyBetaChooser,\n    PublicbodyMultiChooser,\n    SimilarRequestSearch,\n    ReviewRequest,\n    PbMultiReview,\n    RequestForm,\n    RequestPublic,\n    UserCreateAccount,\n    DjangoSlot,\n    SimpleStepper,\n    OnlineHelp,\n    PbTruncatedList\n  },\n  mixins: [I18nMixin, LetterMixin, StoreValueMixin],\n  props: {\n    slots: {\n      type: Object,\n      default: () => ({})\n    },\n    config: {\n      type: Object\n    },\n    publicbodyDefaultSearch: {\n      type: String\n    },\n    publicbodyForm: {\n      type: Object,\n      default: null\n    },\n    publicbodies: {\n      type: Array,\n      default: null\n    },\n    userInfo: {\n      type: Object,\n      default: null\n    },\n    requestFormInitial: {\n      type: Object\n    },\n    userFormInitial: {\n      type: Object\n    },\n    proofFormInitial: {\n      type: Object,\n      default: null\n    },\n    showSimilar: {\n      type: Boolean,\n      default: false\n    },\n    showDraft: {\n      type: Boolean,\n      default: false\n    },\n    hidePublicbodyChooser: {\n      type: Boolean,\n      default: false\n    },\n    hideFullText: {\n      type: Boolean,\n      default: false\n    },\n    hideEditing: {\n      type: Boolean,\n      default: false\n    },\n    hidePublic: {\n      type: Boolean,\n      default: false\n    },\n    multiRequest: {\n      type: Boolean,\n      default: false\n    },\n    confirmRequired: {\n      type: Boolean,\n      default: false\n    }\n  },\n  inject: ['django-slots'],\n  data() {\n    return {\n      pbScope: this.config.draftId\n        ? 'make-request-draft-' + this.config.draftId\n        : 'make-request',\n      fullTextDisabled: false,\n      editingDisabled: this.hideEditing,\n      fullLetter: false,\n      showReview: false,\n      submitting: false,\n      STEPS,\n      similarSubject: '',\n      fetchedForms: null,\n      fetchError: null\n    }\n  },\n  provide() {\n    return {\n      pbScope: this.pbScope\n    }\n  },\n  computed: {\n    requestForm() {\n      return this.fetchedForms?.request_form || this.requestFormInitial\n    },\n    userForm() {\n      return this.fetchedForms?.user_form || this.userFormInitial\n    },\n    proofForm() {\n      if (\n        !(\n          this.proofFormInitial?.fields?.proof ||\n          this.proofFormInitial?.fields?.proof_name\n        )\n      ) {\n        return null\n      }\n      return this.fetchedForms?.proof_form || this.proofFormInitial\n    },\n    steps() {\n      // TODO needs discussion:\n      // hide vs. jump over INTRO+SIMILAR when hidePbChooser et al are set\n      const steps = []\n      if (this.hasCampaigns && !this.hidePublicbodyChooser) {\n        steps.push(STEPS.INTRO)\n      }\n      // assume we don't need a generic intro for API-specified usage\n      if (!(this.hidePublicbodyChooser || !this.hasIntroHowtoContent)) {\n        steps.push(STEPS.INTRO_HOWTO)\n      }\n      if (this.showSimilar && !this.hidePublicbodyChooser) {\n        steps.push(STEPS.FIND_SIMILAR)\n      }\n      if (!this.hidePublicbodyChooser) {\n        steps.push(STEPS.SELECT_PUBLICBODY)\n        if (this.multiRequest) {\n          steps.push(STEPS.REVIEW_PUBLICBODY)\n        }\n      }\n      // for /make-request/to/foo we want to land on WRITE_REQUEST...\n      if (this.hasPublicBodiesByParam) {\n        steps.push(STEPS.WRITE_REQUEST)\n        if (!this.hidePublic) {\n          steps.push(STEPS.REQUEST_PUBLIC)\n        }\n      }\n      // ...and sign up afterwards...\n      if (!this.userInfo) {\n        steps.push(STEPS.LOGIN_CREATE)\n        steps.push(STEPS.CREATE_ACCOUNT)\n      }\n      // ...but usually we sign up first and then write:\n      if (!this.hasPublicBodiesByParam) {\n        steps.push(STEPS.WRITE_REQUEST)\n        if (!this.hidePublic) {\n          steps.push(STEPS.REQUEST_PUBLIC)\n        }\n      }\n      steps.push(STEPS.PREVIEW_SUBMIT)\n      steps.push(STEPS.OUTRO)\n      return steps\n    },\n    stepLabels() {\n      return {\n        [STEPS.INTRO]: this.i18n.introduction,\n        [STEPS.INTRO_HOWTO]: this.i18n.introduction,\n        [STEPS.FIND_SIMILAR]: this.i18n.similarRequests,\n        [STEPS.SELECT_PUBLICBODY]: this.i18n.choosePublicBody,\n        [STEPS.REVIEW_PUBLICBODY]: this.i18n.choosePublicBody,\n        [STEPS.LOGIN_CREATE]: this.i18n.account,\n        [STEPS.CREATE_ACCOUNT]: this.i18n.account,\n        [STEPS.WRITE_REQUEST]: this.i18n.writeMessage,\n        [STEPS.REQUEST_PUBLIC]: this.i18n.writeMessage,\n        [STEPS.PREVIEW_SUBMIT]: this.i18n.submitRequest,\n        [STEPS.OUTRO]: this.i18n.submitRequest\n      }\n    },\n    stepperSteps() {\n      const remap = {\n        // \"display INTRO_HOWTO as INTRO\"\n        [STEPS.INTRO]: STEPS.INTRO_HOWTO,\n        [STEPS.SELECT_PUBLICBODY]: STEPS.REVIEW_PUBLICBODY,\n        [STEPS.LOGIN_CREATE]: STEPS.CREATE_ACCOUNT,\n        [STEPS.WRITE_REQUEST]: STEPS.REQUEST_PUBLIC,\n        [STEPS.PREVIEW_SUBMIT]: STEPS.OUTRO\n      }\n      return this.steps\n        .filter((stepId) => !Object.values(remap).includes(stepId))\n        .map((stepId) => ({\n          stepId,\n          altStepId: remap[stepId],\n          label: this.stepLabels[stepId]\n        }))\n    },\n    stepperStepCurrent() {\n      return this.stepperSteps.findIndex(\n        (_) => _.stepId === this.step || _.altStepId === this.step\n      )\n    },\n    stepIndex() {\n      return this.steps.findIndex((_) => _ === this.step)\n    },\n    stepBack() {\n      if (this.stepIndex <= 0) return false\n      return this.steps[this.stepIndex - 1]\n    },\n    stepNext() {\n      if (this.stepIndex === -1 || this.stepIndex > this.steps.length - 1)\n        return false\n      return this.steps[this.stepIndex + 1]\n    },\n    topNextLabel() {\n      if (\n        [\n          STEPS.LOGIN_CREATE,\n          STEPS.CREATE_ACCOUNT,\n          STEPS.WRITE_REQUEST,\n          STEPS.PREVIEW_SUBMIT,\n          STEPS.OUTRO\n        ].includes(this.step)\n      ) {\n        return false\n      }\n      if (this.step === STEPS.FIND_SIMILAR) {\n        return this.i18n.stepSkip\n      }\n      return this.i18n.stepNext\n    },\n    preventUnload() {\n      // notably, not STEPS.LOGIN_CREATE\n      return [\n        STEPS.SELECT_PUBLICBODY,\n        STEPS.REVIEW_PUBLICBODY,\n        STEPS.CREATE_ACCOUNT,\n        STEPS.WRITE_REQUEST,\n        STEPS.REQUEST_PUBLIC,\n        STEPS.PREVIEW_SUBMIT\n      ].includes(this.step)\n    },\n    publicBodySearch() {\n      if (this.publicBody) {\n        return this.publicBody.name\n      }\n      return this.publicbodyDefaultSearch\n    },\n    publicBodyListView() {\n      if (this.multiRequest) {\n        return 'multi'\n      }\n      return 'actionList'\n    },\n    hasCampaigns() {\n      return this['django-slots'].campaigns?.textContent.trim() !== ''\n    },\n    skipIntroHowtoPreference() {\n      return this.config.settings.skip_intro_howto\n    },\n    hasIntroHowtoContent() {\n      return this['django-slots'].intro_howto?.textContent.trim() !== ''\n    },\n    subject: {\n      get() {\n        return this.$store.state.subject\n      },\n      set(value) {\n        this.updateSubject(value)\n      }\n    },\n    hasBody() {\n      return this.body && this.body.length > 0\n    },\n    body: {\n      get() {\n        return this.$store.state.body\n      },\n      set(value) {\n        this.updateBody(value)\n      }\n    },\n    multipleLaws() {\n      return this.defaultLaw === null\n    },\n    fullText: {\n      get() {\n        return this.$store.state.fullText\n      },\n      set(value) {\n        this.updateFullText(value)\n      }\n    },\n    requestPublic: {\n      get() {\n        return this.$store.state.requestPublic\n      },\n      set(value) {\n        this.updateRequestPublic(value)\n      }\n    },\n    terms: {\n      get() {\n        return this.$store.state.user.terms\n      },\n      set(value) {\n        this.updateTerms(value)\n      }\n    },\n    hasPublicBodies() {\n      return this.publicBodies.length > 0\n    },\n    // e.g. /make-request/to/foo/\n    // note the lowercase b\n    hasPublicBodiesByParam() {\n      return this.publicbodies.length > 0\n    },\n    publicBody() {\n      return this.getPublicBodyByScope(this.pbScope)\n    },\n    publicBodies() {\n      return this.getPublicBodiesByScope(this.pbScope)\n    },\n    ...mapGetters([\n      'user',\n      'getPublicBodyByScope',\n      'getPublicBodiesByScope',\n      'stepWriteRequest',\n      'step',\n      'lawType',\n      'defaultLaw',\n      'stepCanContinue'\n    ])\n  },\n  watch: {\n    step() {\n      this.writeToStorage()\n      window.scrollTo(0, 0)\n    }\n  },\n  created() {\n    this.initAllStoreValues()\n\n    // init step value, always from storage (formFields & propMap omitted)\n    this.initStoreValues({\n      mutationMap: {\n        step: SET_STEP\n      }\n    })\n\n    // PBs from prop, which is expanded in make_request context\n    // (formFields would have IDs only)\n    // prop has precedence over storage, so a reloaded /make-request/to/123/ URL\n    //   will always default back to PB 123\n    this.initStoreValues({\n      scope: this.pbScope,\n      ignoreStorage: this.config.wasPost,\n      mutationMap: {\n        publicBodies: SET_PUBLICBODIES\n      },\n      propMap: {\n        // we want an empty array to fall through to storage\n        publicBodies: this.publicbodies?.length > 0 ? this.publicbodies : null\n      }\n    })\n\n    this.cachePublicBodies(this.publicBodies)\n    // \"cache\" laws for the PBs we just retrieved\n    this.getLawsForPublicBodies(this.publicBodies)\n\n    // setFirstStep depends on state (publicbodies, subject...) so has to come after initStoreValues\n    this.setFirstStep()\n  },\n  mounted() {\n    document.forms.make_request.addEventListener('submit', () => {\n      // invalidate storage, will load from form fields next time\n      this.purgeStorage({ keepNonForm: true })\n    })\n    window.addEventListener('beforeunload', (e) => {\n      if (this.submitting) {\n        return\n      }\n      if (!this.preventUnload) {\n        return\n      }\n      // If you prevent default behavior in Mozilla Firefox prompt will always be shown\n      e.preventDefault()\n      // Chrome requires returnValue to be set\n      e.returnValue = this.i18n.sureCancel\n      return e.returnValue\n    })\n    window.addEventListener('popstate', (e) => {\n      if (!e.state) return\n      if (e.state.step) {\n        this.setStepNoHistory(e.state.step)\n      } else {\n        console.log('popstate, but no step')\n      }\n    })\n  },\n  methods: {\n    saveDraft() {\n      this.submitting = true\n    },\n    submit() {\n      if (this.submitting) return\n\n      this.fetchError = null\n      this.submitting = true\n      const form = document.forms.make_request\n      const fd = new FormData(form)\n      fetch(form.action, {\n        method: 'POST',\n        body: fd,\n        headers: { 'x-requested-with': 'fetch' }\n      })\n        .then((resp) => {\n          if (resp.ok) {\n            if (resp.redirected && resp.url) {\n              // success: purge & redirect\n              this.purgeStorage()\n              document.location.href = resp.url\n              return\n            }\n            console.error(resp)\n            throw new Error('unexpected success response')\n          }\n          if (resp.status === 400) {\n            // resp not ok, assume forms have errors...\n            return resp.json()\n          }\n          console.error(resp)\n          throw new Error(`${resp.status} ${resp.statusText}`)\n        })\n        .then((resp) => {\n          // ...frontend will display/handle them\n          this.fetchedForms = resp\n          this.submitting = false\n        })\n        .catch((e) => {\n          console.error(e)\n          this.fetchError = e.message || this.i18n.error\n          this.submitting = false\n        })\n    },\n    setFirstStep() {\n      // this step may at this point be \"remembered\" from Storage\n      // but this case is the \"default\"\n      if (!this.step || this.step === this.steps[0]) {\n        // if \"editing draft\" skip forward\n        if (this.requestForm.fields.draft.initial) {\n          console.log('request is draft, skipping intro etc.')\n          this.setStep(STEPS.WRITE_REQUEST)\n        } else if (this.hasPublicBodies) {\n          // skip directly to wrting\n          // might theoretically also apply to \"if state.subject || state.body\"\n          // but that combination seems unrealistic\n          this.setStep(STEPS.WRITE_REQUEST)\n        } else if (this.skipIntroHowtoPreference) {\n          this.setStep(STEPS.SELECT_PUBLICBODY)\n        }\n      } else if (\n        [STEPS.LOGIN_CREATE, STEPS.CREATE_ACCOUNT].includes(this.step) &&\n        this.userInfo\n      ) {\n        // returning from login\n        this.setStep(STEPS.WRITE_REQUEST)\n      }\n      // fall back to first viable (non-excluded) step\n      if (!this.steps.includes(this.step)) {\n        this.setStep(this.steps[0])\n      }\n    },\n    stepperClick(stepperIndex) {\n      this.setStep(this.stepperSteps[stepperIndex].stepId)\n    },\n    onlineHelpShow(urlOrContent) {\n      this.$refs.onlineHelp.show(urlOrContent)\n    },\n    writeToStorage() {\n      this.$store.dispatch('writeToStorage', { scope: this.pbScope })\n    },\n    ...mapMutations({\n      setStep: SET_STEP,\n      setStepNoHistory: SET_STEP_NO_HISTORY,\n      updateSubject: UPDATE_SUBJECT,\n      updateBody: UPDATE_BODY,\n      updateFullText: UPDATE_FULL_TEXT,\n      cachePublicBodies: CACHE_PUBLICBODIES,\n      updateRequestPublic: UPDATE_REQUEST_PUBLIC,\n      updateTerms: UPDATE_TERMS\n    }),\n    ...mapActions(['getLawsForPublicBodies', 'initStoreValues', 'purgeStorage'])\n  }\n}\n</script>\n\n<style lang=\"scss\" scoped>\n@import '../../../styles/variables';\n@import 'bootstrap/scss/mixins';\n\n.make-request-container {\n  padding-bottom: 1rem;\n}\n\n.container-multi {\n  /* Allow container to wider than normal to allow for more space */\n  width: 100%;\n  padding-right: 15px;\n  padding-left: 15px;\n  margin-right: auto;\n  margin-left: auto;\n  max-width: 1400px;\n}\n\nlegend {\n  padding: 2rem 0 2rem;\n  font-size: 2rem;\n}\n\n.small a {\n  color: $blue;\n}\n\n.request-hints :deep(ul) {\n  padding-left: $spacer;\n}\n\n.publicbody-summary-container {\n  margin: 0 0 $spacer * 2;\n}\n\n.publicbody-summary {\n  font-size: $font-size-lg;\n}\n\n.pb-change-link {\n  font-weight: normal;\n  font-size: $font-size-sm;\n}\n\n.body-text {\n  white-space: pre-wrap;\n  word-wrap: break-word;\n  color: #999;\n}\n\n.body-textarea {\n  width: 100%;\n}\n\n.body-textarea {\n  padding-left: 0;\n  margin-left: -5px;\n  padding: 5px;\n}\n.body-textarea.attention {\n  border-left: 3px solid #faa;\n}\n\n.saved-body {\n  width: 100%;\n  height: 5em;\n}\n\n.saved-full-text-enter-active,\n.saved-full-text-leave-active {\n  transition: opacity 0.5s;\n}\n.saved-full-text-enter,\n.saved-full-text-leave-to {\n  opacity: 0;\n}\n\n.show-full-letter {\n  color: #999;\n  text-decoration: underline;\n}\n\n.step-graphic {\n  width: 100%;\n  display: block;\n  margin-bottom: $spacer;\n\n  @include media-breakpoint-up(md) {\n    position: relative;\n    height: 12rem;\n    width: auto;\n    max-width: 100%;\n    margin-bottom: -6rem;\n    margin-left: auto;\n    z-index: -1;\n  }\n}\n\n.fade-enter-active,\n.fade-leave-active {\n  transition: opacity 0.5s ease;\n}\n\n.fade-enter-from,\n.fade-leave-to {\n  opacity: 0;\n}\n</style>\n","import { createAppWithProps } from './lib/vue-helper'\n\nimport store from './store'\n\nimport RequestPage from './components/makerequest/request-page'\n\nfunction createRequestPage(selector) {\n  createAppWithProps(selector, RequestPage).use(store).mount(selector)\n}\n\ndocument.addEventListener('DOMContentLoaded', function () {\n  if (document.getElementById('make-request')) {\n    createRequestPage('#make-request')\n  }\n})\n\nexport default {\n  createRequestPage\n}\n"],"names":["store","useStore","pbScope","inject","i18n","props","__props","statusColors","object","selectPublicBody","id","SET_STEP","STEPS","err","formatDate","date","showJurisdiction","computed","statusColorClass","_openBlock","_createElementBlock","_hoisted_1","_createElementVNode","_hoisted_2","_hoisted_3","_unref","_hoisted_5","_toDisplayString","_hoisted_7","_createTextVNode","_Fragment","_hoisted_8","_normalizeClass","_hoisted_9","_hoisted_10","searchResultPageSize","initialState","pagination","reactive","showResults","ref","textQuery","jurisdictionRegionKind","jurisdictionsByRegionKind","selectedJurisdiction","watch","value","jurisdictionList","resp","j","regionKind","items","campaigns","selectedCampaign","campaignList","dateStart","dateEnd","dateYearsStart","_","y","dateYearsEnd","query","resultsCount","resultsMeta","results","isSearching","apiError","search","requestSearchRetrieve","debouncedSearch","debounce","UPDATE_SIMILAR_REQUEST_SEARCH","_renderSlot","_ctx","_hoisted_4","_hoisted_6","$event","_hoisted_11","_hoisted_12","_hoisted_13","_hoisted_14","_renderList","jurisdictions","jurisdicitions","_hoisted_15","_hoisted_17","_hoisted_18","jurisdiction","_hoisted_19","_hoisted_21","_hoisted_22","_hoisted_23","_hoisted_24","_hoisted_25","_hoisted_26","year","_hoisted_28","_hoisted_30","_hoisted_31","_hoisted_32","_hoisted_33","_hoisted_34","_hoisted_35","_hoisted_36","_hoisted_37","campaign","_hoisted_38","_hoisted_40","_hoisted_41","_createBlock","PbFilterBadge","_hoisted_42","_hoisted_44","_createVNode","ResultsPagination","_hoisted_45","_hoisted_46","_hoisted_47","SimilarRequestSearchResult","summaryDimensions","x","LARGE_ARRAY_SIZE","FUNC_ERROR_TEXT","HASH_UNDEFINED","UNORDERED_COMPARE_FLAG","PARTIAL_COMPARE_FLAG","MAX_SAFE_INTEGER","argsTag","arrayTag","boolTag","dateTag","errorTag","funcTag","genTag","mapTag","numberTag","objectTag","promiseTag","regexpTag","setTag","stringTag","symbolTag","weakMapTag","arrayBufferTag","dataViewTag","float32Tag","float64Tag","int8Tag","int16Tag","int32Tag","uint8Tag","uint8ClampedTag","uint16Tag","uint32Tag","reIsDeepProp","reIsPlainProp","reLeadingDot","rePropName","reRegExpChar","reEscapeChar","reIsHostCtor","reIsUint","typedArrayTags","freeGlobal","global","freeSelf","root","freeExports","exports","freeModule","module","moduleExports","freeProcess","nodeUtil","nodeIsTypedArray","apply","func","thisArg","args","arrayMap","array","iteratee","index","length","result","arrayPush","values","offset","arraySome","predicate","baseProperty","key","baseSortBy","comparer","baseTimes","n","baseUnary","getValue","isHostObject","mapToArray","map","overArg","transform","arg","setToArray","set","arrayProto","funcProto","objectProto","coreJsData","maskSrcKey","uid","funcToString","hasOwnProperty","objectToString","reIsNative","Symbol","Uint8Array","propertyIsEnumerable","splice","spreadableSymbol","nativeKeys","nativeMax","DataView","getNative","Map","Promise","Set","WeakMap","nativeCreate","dataViewCtorString","toSource","mapCtorString","promiseCtorString","setCtorString","weakMapCtorString","symbolProto","symbolValueOf","symbolToString","Hash","entries","entry","hashClear","hashDelete","hashGet","data","hashHas","hashSet","ListCache","listCacheClear","listCacheDelete","assocIndexOf","lastIndex","listCacheGet","listCacheHas","listCacheSet","MapCache","mapCacheClear","mapCacheDelete","getMapData","mapCacheGet","mapCacheHas","mapCacheSet","SetCache","setCacheAdd","setCacheHas","Stack","stackClear","stackDelete","stackGet","stackHas","stackSet","cache","pairs","arrayLikeKeys","inherited","isArray","isArguments","skipIndexes","isIndex","eq","baseEach","createBaseEach","baseForOwn","baseFlatten","depth","isStrict","isFlattenable","baseFor","createBaseFor","keys","baseGet","path","isKey","castPath","toKey","baseGetTag","baseHasIn","baseIsEqual","other","customizer","bitmask","stack","isObject","isObjectLike","baseIsEqualDeep","equalFunc","objIsArr","othIsArr","objTag","othTag","getTag","objIsObj","othIsObj","isSameTag","isTypedArray","equalArrays","equalByTag","objIsWrapped","othIsWrapped","objUnwrapped","othUnwrapped","equalObjects","baseIsMatch","source","matchData","objValue","srcValue","baseIsNative","isMasked","pattern","isFunction","baseIsTypedArray","isLength","baseIteratee","identity","baseMatchesProperty","baseMatches","property","baseKeys","isPrototype","baseMap","collection","isArrayLike","getMatchData","matchesStrictComparable","isStrictComparable","get","hasIn","baseOrderBy","iteratees","orders","criteria","compareMultiple","basePropertyDeep","baseRest","start","otherArgs","baseToString","isSymbol","stringToPath","compareAscending","valIsDefined","valIsNull","valIsReflexive","valIsSymbol","othIsDefined","othIsNull","othIsReflexive","othIsSymbol","objCriteria","othCriteria","ordersLength","order","eachFunc","fromRight","iterable","keysFunc","isPartial","arrLength","othLength","stacked","seen","arrValue","othValue","compared","othIndex","tag","convert","objProps","objLength","othProps","skipCtor","objCtor","othCtor","isKeyable","Ctor","ctorString","hasPath","hasFunc","isIterateeCall","type","proto","memoize","string","toString","match","number","quote","sortBy","resolver","memoized","isArrayLikeObject","defaultValue","_sfc_main","$options","$props","sortedRows","header","sortHeader","mapMutations","SET_STEP_REQUEST","ADD_PUBLICBODY_ID","REMOVE_PUBLICBODY_ID","PbTableRow","$data","_TransitionGroup","row","_component_PbTableRow","summary","pb","dimension","val","dim","v","a","b","mapGetters","item","subitem","PBChooserMixin","PBListMixin","PbTable","PbSummary","SET_STEP_SELECT_PUBLICBODY","_component_PbSummary","_component_PbTable","meta","sr","mapActions","_cache","MAX_PUBLICBODIES","I18nMixin","PbPagination","PbFilter","PbFilterSelected","searcher","FroideAPI","q","filters","searchCount","num","filter","expand","expanded","SET_STEP_REVIEW_PUBLICBODY","CLEAR_PUBLICBODIES","_hoisted_16","_hoisted_20","_withDirectives","_component_PbPagination","filterKey","_component_PbFilterSelected","_component_PbFilter","LetterMixin","name","ProofUpload","option","_component_ProofUpload","image","addressRegex","enableValidateLive","valid","UPDATE_ADDRESS","UPDATE_ADDRESS_CHANGED","UPDATE_ADDRESS_VALIDITY","e","error","UPDATE_CONFIRM","UPDATE_CONFIRM_VALIDITY","erx","text","PLACEHOLDER_MARKER","PLACEHOLDER_REPLACEMENT","MAX_BODY_ROWS","MIN_BODY_ROWS","savedFullTextBodySidebyside","ProofForm","UserAddress","UserConfirm","PbTruncatedList","newLineCount","checks","positives","params","regex","ta","re","minLength","checkValidity","minLengthMessage","placeholderMessage","editingPassed","confirmPassed","UPDATE_BODY_VALIDITY","UPDATE_BODY_CHANGED","UPDATE_SUBJECT_VALIDITY","UPDATE_SUBJECT_CHANGED","UPDATE_PROOF","_hoisted_29","_component_PbTruncatedList","_withCtx","count","_hoisted_39","_hoisted_43","needle","_component_ProofForm","_hoisted_48","_component_UserAddress","_component_UserConfirm","_hoisted_50","choice","choiceIndex","ReviewRequestLine","ReviewPublicbody","UserConfirmation","_component_ReviewRequestLine","_component_ReviewPublicbody","_withModifiers","_component_UserConfirmation","_imports_0$1","emit","__emit","_imports_0","DjangoSlot","preferenceSkipIntroHowto","togglePreference","toValue","fromValue","userpreferenceUpdate","BsToast","coerceDjangoBool","booleanOrString","StoreValueMixin","UPDATE_SUBJECT","UPDATE_BODY","UPDATE_FULL_TEXT","UPDATE_REQUEST_PUBLIC","UPDATE_LAW_TYPE","SET_USER","UPDATE_EMAIL","UPDATE_FIRST_NAME","UPDATE_LAST_NAME","UPDATE_PRIVATE","UPDATE_TERMS","UPDATE_CLAIMS_VIP","SET_CONFIG","UPDATE_FIRST_NAME_VALIDITY","UPDATE_FIRST_NAME_CHANGED","UPDATE_LAST_NAME_VALIDITY","UPDATE_LAST_NAME_CHANGED","UPDATE_EMAIL_VALIDITY","UPDATE_EMAIL_CHANGED","UPDATE_TERMS_VALIDITY","UPDATE_TERMS_CHANGED","newValue","UserRegistration","UserTerms","UserPublic","UserClaimsVip","_component_UserRegistration","_component_UserPublic","_component_UserClaimsVip","_component_UserTerms","_imports_1","IntroSkipPreference","RequestIntro","PublicbodyBetaChooser","PublicbodyMultiChooser","SimilarRequestSearch","ReviewRequest","PbMultiReview","RequestForm","RequestPublic","UserCreateAccount","SimpleStepper","OnlineHelp","steps","remap","stepId","SET_PUBLICBODIES","form","fd","stepperIndex","urlOrContent","SET_STEP_NO_HISTORY","CACHE_PUBLICBODIES","_hoisted_27","_component_SimpleStepper","step","_component_DjangoSlot","_component_RequestIntro","_component_IntroSkipPreference","_component_SimilarRequestSearch","_component_PublicbodyMultiChooser","_component_PublicbodyBetaChooser","_component_PbMultiReview","_component_UserCreateAccount","_component_RequestForm","_component_RequestPublic","_component_ReviewRequest","_Transition","_component_OnlineHelp","createRequestPage","selector","createAppWithProps","RequestPage"],"mappings":"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","x_google_ignoreList":[3]}