diff --git a/.eslintignore b/.eslintignore index c50c1e227f..fdc2532e08 100644 --- a/.eslintignore +++ b/.eslintignore @@ -1,6 +1 @@ -build/*.js -config/*.js -config/env/*.js -server/index.template.html -test/unit/karma.conf.js src/lib/**/*.js diff --git a/.eslintrc.js b/.eslintrc.cjs similarity index 79% rename from .eslintrc.js rename to .eslintrc.cjs index 04da38b10d..4af00f7b84 100644 --- a/.eslintrc.js +++ b/.eslintrc.cjs @@ -4,11 +4,14 @@ const fs = require('fs'); const isProd = process.env.NODE_ENV === 'production'; +// resolve path +const resolve = dir => path.resolve(__dirname, dir); + let schema; // Use build/schema.graphql as the schema definition. That file only exists after running node build/fetch-schema.js try { - schema = fs.readFileSync(path.join(__dirname, 'build/schema.graphql')).toString(); + schema = fs.readFileSync(resolve('build/schema.graphql')).toString(); } catch (e) { console.warn(e); schema = 'type Query { hello: String }'; @@ -21,12 +24,15 @@ const graphqlOptions = { module.exports = { root: true, + reportUnusedDisableDirectives: true, parserOptions: { - parser: '@babel/eslint-parser', - sourceType: 'module' + ecmaVersion: 2022, + sourceType: 'module', }, env: { + node: true, browser: true, + es2022: true, }, extends: ['plugin:vue/strongly-recommended', 'airbnb-base', 'plugin:storybook/recommended'], // required to lint *.vue files @@ -38,12 +44,15 @@ module.exports = { // check if imports actually resolve settings: { 'import/resolver': { - webpack: { - config: './build/webpack.base.conf.js' - }, node: { extensions: ['.js', '.mjs'] - } + }, + alias: { + map: [ + ['#src', resolve('src')], + ], + extensions: ['.js', '.mjs', '.vue'], + }, } }, // add your custom rules here @@ -64,6 +73,8 @@ module.exports = { 'import/no-extraneous-dependencies': ['error', { optionalDependencies: ['test/unit/index.js'] }], + // allow files with only one named export + 'import/prefer-default-export': 'off', // allow debugger during development 'no-debugger': isProd ? 'error' : 'off', // allow console during development @@ -93,13 +104,17 @@ module.exports = { 'graphql/required-fields': ['error', { ...graphqlOptions, requiredFields: ['id', 'key'] }], // require component names that match the file name - "vue/require-name-property": "error", - "vue/match-component-file-name": [ - "error", + 'vue/require-name-property': 'error', + 'vue/match-component-file-name': [ + 'error', { - extensions: ["vue"], + extensions: ['vue'], shouldMatchCase: true, }, ], + + // require v-for keys on template root + 'vue/no-v-for-template-key': 'off', + 'vue/no-v-for-template-key-on-child': 'error', } }; diff --git a/.gitignore b/.gitignore index c05a491218..e27077dd23 100644 --- a/.gitignore +++ b/.gitignore @@ -1,7 +1,8 @@ .DS_Store node_modules/ + +# Temporary files dist/ -npm-debug.log* coverage/ test/e2e/screenshots test/e2e/results @@ -10,6 +11,11 @@ build/schema.graphql .nyc_output/ .lighthouseci/ lhci/ +vite.config.js.* + +# Logs +npm-debug.log* +*storybook.log # Editor directories and files .idea diff --git a/.nvmrc b/.nvmrc index 7fd023741b..9de2256827 100644 --- a/.nvmrc +++ b/.nvmrc @@ -1 +1 @@ -v16.15.0 +lts/iron diff --git a/.storybook/main.js b/.storybook/main.js index c812937de8..2b8fd156ba 100644 --- a/.storybook/main.js +++ b/.storybook/main.js @@ -1,39 +1,18 @@ -const path = require('path'); - -module.exports = { - stories: [ - './stories/**/*.stories.@(js|mdx)' - ], - addons: [ - '@storybook/addon-essentials', - '@storybook/addon-links', - '@storybook/addon-a11y', - '@storybook/addon-postcss', - '@storybook/addon-storysource' - ], - webpackFinal: async (config) => { - config.module.rules.push({ - test: /\,css&/, - exclude: [/\.module\.css$/, /@storybook/], - use: [ - "style-loader", - { - loader: "css-loader", - options: { importLoaders: 1, sourceMap: false }, - }, - { - loader: 'postcss-loader', - options: { - ident: 'postcss', - plugins: [ - require('tailwindcss'), - require('autoprefixer') - ] - } - } - ], - include: path.resolve(__dirname, '../'), - }) - return config - } -} +/** @type { import('@storybook/vue3-vite').StorybookConfig } */ +const config = { + stories: ["./stories/**/*.stories.@(js|jsx|mjs|ts|tsx)"], + addons: [ + "@storybook/addon-links", + "@storybook/addon-essentials", + "@chromatic-com/storybook", + "@storybook/addon-interactions", + ], + framework: { + name: "@storybook/vue3-vite", + options: {}, + }, + docs: { + autodocs: "tag", + }, +}; +export default config; diff --git a/.storybook/manager.js b/.storybook/manager.js index 9d95268ff6..1aecaed23c 100644 --- a/.storybook/manager.js +++ b/.storybook/manager.js @@ -1,4 +1,4 @@ -import { addons } from '@storybook/addons'; +import { addons } from '@storybook/manager-api'; import { create } from '@storybook/theming/create'; const theme = create({ diff --git a/.storybook/mixins/kv-auth0-story-mixin.js b/.storybook/mixins/kv-auth0-story-mixin.js index e45bf32f98..3de450b2b6 100644 --- a/.storybook/mixins/kv-auth0-story-mixin.js +++ b/.storybook/mixins/kv-auth0-story-mixin.js @@ -1,4 +1,4 @@ -import { MockKvAuth0 } from '@/util/KvAuth0'; +import { MockKvAuth0 } from '#src/util/KvAuth0'; export default { provide: { diff --git a/.storybook/preview.js b/.storybook/preview.js index eb676bef30..d26b073b79 100644 --- a/.storybook/preview.js +++ b/.storybook/preview.js @@ -1,13 +1,9 @@ -import { addParameters } from '@storybook/vue'; import { MINIMAL_VIEWPORTS} from '@storybook/addon-viewport'; -import Vue from 'vue'; -import Meta from 'vue-meta'; +// import Vue from 'vue'; +// import Meta from 'vue-meta'; // vue-meta has been replaced with unhead (@unhead/vue) import VueRouter from 'vue-router' -import KvThemeProvider from '~/@kiva/kv-components/vue/KvThemeProvider'; -import { defaultTheme } from '@kiva/kv-tokens/configs/kivaColors'; - -//load all the svg icon sprites -import '@/assets/iconLoader'; +import KvThemeProvider from '@kiva/kv-components/vue/KvThemeProvider.vue'; +import { defaultTheme } from '@kiva/kv-tokens/configs/kivaColors.cjs'; // same styles that are in App.vue import '../src/assets/scss/app.scss'; @@ -20,21 +16,21 @@ import './tailwind.css'; import './storybookStyles.scss'; // import config file for storybook environment -import config from '../config/local'; +// import config from '../config/local'; // initialize vue-meta -Vue.use(Meta); +// Vue.use(Meta); // Mock the analytics Vue plugin -Vue.use({ install: Vue => { - Vue.directive('kv-track-event', () => {}); - Vue.prototype.$kvTrackEvent = () => {}; -}}); +// Vue.use({ install: Vue => { +// Vue.directive('kv-track-event', () => {}); +// Vue.prototype.$kvTrackEvent = () => {}; +// }}); -Vue.use(VueRouter) +// Vue.use(VueRouter) // provide global application config -Vue.prototype.$appConfig = config.app; +// Vue.prototype.$appConfig = config.app; // add custom viewports const customViewports = { @@ -62,10 +58,10 @@ const customViewports = { }; -addParameters({ +export const parameters = { options: { storySort: (a, b) => { // sort the categories alphabetically. - return a[1].kind === b[1].kind ? 0 : a[1].id.localeCompare(b[1].id, undefined, { numeric: true }); + return a.id === b.id ? 0 : a.id.localeCompare(b.id, undefined, { numeric: true }); }, showRoots: true, enableShortcuts: false, @@ -96,7 +92,7 @@ addParameters({ ...customViewports, }, }, -}); +}; // Wrap all stories with the kv-theme-provider component export const decorators = [(story) => ({ diff --git a/.storybook/stories/15years.stories.js b/.storybook/stories/15years.stories.js index 5e265c48a3..26a12656bd 100644 --- a/.storybook/stories/15years.stories.js +++ b/.storybook/stories/15years.stories.js @@ -1,17 +1,17 @@ import Vue from 'vue'; // import plugins -import kivaPlugins from '@/plugins'; +import kivaPlugins from '#src/plugins'; Vue.use(kivaPlugins); -import AppealBanner15 from '@/components/WwwFrame/PromotionalBanner/Banners/AppealBanner/AppealBanner15'; -import FifteenYears from '@/pages/15Years/15Years'; -import FifteenYearsHeader from '@/components/15Years/15YearsHeader'; -import FifteenYearsHowKivaWorks from '@/components/15Years/15YearsHowKivaWorks'; -import FifteenYearsIndividuals from '@/components/15Years/15YearsIndividuals'; -import FifteenYearsPartners from '@/components/15Years/15YearsPartners'; -import FifteenYearsStyles from '@/components/15Years/15YearsStyles'; -import FifteenYearsTimeline from '@/components/15Years/15YearsTimeline'; +import AppealBanner15 from '#src/components/WwwFrame/PromotionalBanner/Banners/AppealBanner/AppealBanner15'; +import FifteenYears from '#src/pages/15Years/15Years'; +import FifteenYearsHeader from '#src/components/15Years/15YearsHeader'; +import FifteenYearsHowKivaWorks from '#src/components/15Years/15YearsHowKivaWorks'; +import FifteenYearsIndividuals from '#src/components/15Years/15YearsIndividuals'; +import FifteenYearsPartners from '#src/components/15Years/15YearsPartners'; +import FifteenYearsStyles from '#src/components/15Years/15YearsStyles'; +import FifteenYearsTimeline from '#src/components/15Years/15YearsTimeline'; import apolloStoryMixin from '../mixins/apollo-story-mixin'; import kvAuth0StoryMixin from '../mixins/kv-auth0-story-mixin'; diff --git a/.storybook/stories/AppealBannerCircular.stories.js b/.storybook/stories/AppealBannerCircular.stories.js index 51fcf8ad64..0c1bff0b9b 100644 --- a/.storybook/stories/AppealBannerCircular.stories.js +++ b/.storybook/stories/AppealBannerCircular.stories.js @@ -1,8 +1,8 @@ import Vue from 'vue' -import AppealBannerCircular from '@/components/WwwFrame/PromotionalBanner/Banners/AppealBanner/AppealBannerCircular.vue'; +import AppealBannerCircular from '#src/components/WwwFrame/PromotionalBanner/Banners/AppealBanner/AppealBannerCircular.vue'; // import plugins -import kivaPlugins from '@/plugins'; +import kivaPlugins from '#src/plugins'; Vue.use(kivaPlugins) export default { diff --git a/.storybook/stories/BorrowerProfile.stories.js b/.storybook/stories/BorrowerProfile.stories.js index 6e03af1657..869da42260 100644 --- a/.storybook/stories/BorrowerProfile.stories.js +++ b/.storybook/stories/BorrowerProfile.stories.js @@ -1,11 +1,11 @@ import Vue from 'vue' // import plugins -import kivaPlugins from '@/plugins'; +import kivaPlugins from '#src/plugins'; Vue.use(kivaPlugins) -import BorrowerProfile from '@/pages/BorrowerProfile/BorrowerProfile' -import FundedBorrowerProfile from '@/components/BorrowerProfile/FundedBorrowerProfile' +import BorrowerProfile from '#src/pages/BorrowerProfile/BorrowerProfile' +import FundedBorrowerProfile from '#src/components/BorrowerProfile/FundedBorrowerProfile' import apolloStoryMixin from '../mixins/apollo-story-mixin'; import cookieStoreStoryMixin from '../mixins/cookie-store-story-mixin'; diff --git a/.storybook/stories/ChallengeCallout.stories.js b/.storybook/stories/ChallengeCallout.stories.js index 7d6e8a4614..43adc5367b 100644 --- a/.storybook/stories/ChallengeCallout.stories.js +++ b/.storybook/stories/ChallengeCallout.stories.js @@ -1,4 +1,4 @@ -import ChallengeCallout from '@/components/Lend/LoanSearch/ChallengeCallout'; +import ChallengeCallout from '#src/components/Lend/LoanSearch/ChallengeCallout'; import apolloStoryMixin from "../mixins/apollo-story-mixin"; export default { diff --git a/.storybook/stories/ChallengeHeader.stories.js b/.storybook/stories/ChallengeHeader.stories.js index 1ad3a0ef86..e3c1493296 100644 --- a/.storybook/stories/ChallengeHeader.stories.js +++ b/.storybook/stories/ChallengeHeader.stories.js @@ -1,4 +1,4 @@ -import ChallengeHeader from '@/components/Thanks/ChallengeHeader'; +import ChallengeHeader from '#src/components/Thanks/ChallengeHeader'; import apolloStoryMixin from "../mixins/apollo-story-mixin"; export default { diff --git a/.storybook/stories/CheckoutReceipt.stories.js b/.storybook/stories/CheckoutReceipt.stories.js index 24b9a1f594..685f4fd4ad 100644 --- a/.storybook/stories/CheckoutReceipt.stories.js +++ b/.storybook/stories/CheckoutReceipt.stories.js @@ -1,4 +1,4 @@ -import CheckoutReceipt from '@/components/Checkout/CheckoutReceipt'; +import CheckoutReceipt from '#src/components/Checkout/CheckoutReceipt'; import mockedReceiptData from '../mock-data/receipt-data-mock'; // https://api-vm.kiva.org/graphqlgraphql?user_id=1003394&app_id=org.kiva.www&query=query%20checkoutReceipt%20%7B%20%0A%09shop%20%7B%0A%09%09receipt(checkoutId%3A%2038663432)%20%7B%0A%09%09%09credits%20%7B%0A%09%09%09%09values%20%7B%0A%09%09%09%09%09creditType%0A%09%09%09%09%09amount%0A%09%09%09%09%7D%0A%09%09%09%7D%0A%09%09%09totals%20%7B%0A%20%20%20%20%20%20%20%20bonusAppliedTotal%0A%09%09%09%09itemTotal%0A%09%09%09%09donationTotal%0A%09%09%09%09kivaCardTotal%0A%09%09%09%09depositTotals%20%7B%0A%09%09%09%09%09depositTotal%0A%09%09%09%09%09kivaCreditAdded%0A%09%09%09%09%09kivaCreditUsed%0A%09%09%09%09%7D%0A%20%20%20%20%20%20%20%20freeTrialAppliedTotal%0A%09%09%09%09kivaCreditAppliedTotal%0A%20%20%20%20%20%20%20%20redemptionCodeAppliedTotal%0A%20%20%20%20%20%20%20%20universalCodeAppliedTotal%0A%09%09%09%7D%0A%09%09%09hasFreeCredits%0A%09%09%09items%20%7B%0A%09%09%09%09totalCount%0A%09%09%09%09values%20%7B%0A%09%09%09%09%09id%0A%09%09%09%09%09price%0A%09%09%09%09%09basketItemType%0A%09%09%09%09%09...%20on%20KivaCard%20%7B%0A%09%09%09%09%09%09individualPrice%0A%09%09%09%09%09%09basketItemType%0A%09%09%09%09%09%09kivaCardObject%20%7B%0A%09%09%09%09%09%09%09deliveryType%0A%09%09%09%09%09%09%09mailingInfo%20%7B%0A%09%09%09%09%09%09%09%09firstName%0A%09%09%09%09%09%09%09%09lastName%0A%09%09%09%09%09%09%09%09address%0A%09%09%09%09%09%09%09%09address2%0A%09%09%09%09%09%09%09%09city%0A%09%09%09%09%09%09%09%09state%0A%09%09%09%09%09%09%09%09zip%0A%09%09%09%09%09%09%09%7D%0A%09%09%09%09%09%09%09recipient%20%7B%0A%09%09%09%09%09%09%09%09name%0A%09%09%09%09%09%09%09%09email%0A%09%09%09%09%09%09%09%7D%0A%09%09%09%09%09%09%7D%0A%09%09%09%09%09%7D%0A%09%09%09%09%09...%20on%20LoanReservation%20%7B%0A%09%09%09%09%09%09loan%20%7B%0A%09%09%09%09%09%09%09name%0A%09%09%09%09%09%09%09id%0A%09%09%09%09%09%09%09image%20%7B%0A%09%09%09%09%09%09%09%09url%0A%09%09%09%09%09%09%09%7D%0A%09%09%09%09%09%09%09use%0A%09%09%09%09%09%09%09geocode%20%7B%0A%09%09%09%09%09%09%09%09city%0A%09%09%09%09%09%09%09%09country%20%7B%0A%09%09%09%09%09%09%09%09%09name%0A%09%09%09%09%09%09%09%09%7D%0A%09%09%09%09%09%09%09%7D%0A%09%09%09%09%09%09%7D%0A%09%09%09%09%09%7D%0A%09%09%09%09%7D%0A%09%09%09%7D%0A%09%09%7D%0A%09%7D%0A%09my%20%7B%0A%09%09userAccount%20%7B%0A%09%09%09firstName%0A%09%09%09lastName%0A%09%09%09email%0A%09%09%7D%0A%09%7D%0A%7D%0A&operationName=checkoutReceipt diff --git a/.storybook/stories/CorporateCampaign.stories.js b/.storybook/stories/CorporateCampaign.stories.js index 1876b650ff..73e9f58193 100644 --- a/.storybook/stories/CorporateCampaign.stories.js +++ b/.storybook/stories/CorporateCampaign.stories.js @@ -1,13 +1,13 @@ import Vue from 'vue'; // import plugins -import kivaPlugins from '@/plugins'; +import kivaPlugins from '#src/plugins'; Vue.use(kivaPlugins); import apolloStoryMixin from '../mixins/apollo-story-mixin'; -import CorporateCampaignLanding from '@/pages/LandingPages/CorporateCampaign/CCLandingPage'; -import CampaignHero from '@/components/CorporateCampaign/CampaignHero'; -import CampaignStatus from '@/components/CorporateCampaign/CampaignStatus'; +import CorporateCampaignLanding from '#src/pages/LandingPages/CorporateCampaign/CCLandingPage'; +import CampaignHero from '#src/components/CorporateCampaign/CampaignHero'; +import CampaignStatus from '#src/components/CorporateCampaign/CampaignStatus'; import cookieStoreStoryMixin from '../mixins/cookie-store-story-mixin'; export default { diff --git a/.storybook/stories/DepositIncentiveBanner.stories.js b/.storybook/stories/DepositIncentiveBanner.stories.js index fea7dbe95a..5df10d2ea7 100644 --- a/.storybook/stories/DepositIncentiveBanner.stories.js +++ b/.storybook/stories/DepositIncentiveBanner.stories.js @@ -1,9 +1,9 @@ import Vue from 'vue' -import DepositIncentiveBanner from '@/components/WwwFrame/PromotionalBanner/Banners/DepositIncentiveBanner.vue'; +import DepositIncentiveBanner from '#src/components/WwwFrame/PromotionalBanner/Banners/DepositIncentiveBanner.vue'; import cookieStoreStoryMixin from '../mixins/cookie-store-story-mixin'; // import plugins -import kivaPlugins from '@/plugins'; +import kivaPlugins from '#src/plugins'; Vue.use(kivaPlugins); export default { diff --git a/.storybook/stories/DepositIncentiveUpsell.stories.js b/.storybook/stories/DepositIncentiveUpsell.stories.js index 77d6af3fe6..f4c4b04c93 100644 --- a/.storybook/stories/DepositIncentiveUpsell.stories.js +++ b/.storybook/stories/DepositIncentiveUpsell.stories.js @@ -1,4 +1,4 @@ -import DepositIncentiveUpsell from '@/components/Checkout/DepositIncentiveUpsell.vue'; +import DepositIncentiveUpsell from '#src/components/Checkout/DepositIncentiveUpsell.vue'; import apolloStoryMixin from '../mixins/apollo-story-mixin'; import { mockLoansArray } from '../utils'; diff --git a/.storybook/stories/DonationBanner.stories.js b/.storybook/stories/DonationBanner.stories.js index 5a454bedde..9d20950ee0 100644 --- a/.storybook/stories/DonationBanner.stories.js +++ b/.storybook/stories/DonationBanner.stories.js @@ -1,8 +1,8 @@ import Vue from "vue"; -import DonationBanner from "@/components/WwwFrame/PromotionalBanner/Banners/Donation/DonationBanner.vue"; +import DonationBanner from "#src/components/WwwFrame/PromotionalBanner/Banners/Donation/DonationBanner.vue"; // import plugins -import kivaPlugins from "@/plugins"; +import kivaPlugins from "#src/plugins"; Vue.use(kivaPlugins); export default { diff --git a/.storybook/stories/DonationNudgeLightbox.stories.js b/.storybook/stories/DonationNudgeLightbox.stories.js index 27d428339e..af05d895a1 100644 --- a/.storybook/stories/DonationNudgeLightbox.stories.js +++ b/.storybook/stories/DonationNudgeLightbox.stories.js @@ -1,4 +1,4 @@ -import DonationNudgeLightbox from '@/components/Checkout/DonationNudge/DonationNudgeLightbox.vue'; +import DonationNudgeLightbox from '#src/components/Checkout/DonationNudge/DonationNudgeLightbox.vue'; import cookieStoreStoryMixin from '../mixins/cookie-store-story-mixin'; import apolloStoryMixin from '../mixins/apollo-story-mixin'; diff --git a/.storybook/stories/DynamicHeroClassic.stories.js b/.storybook/stories/DynamicHeroClassic.stories.js index 71b4b432e0..ece12d1dda 100644 --- a/.storybook/stories/DynamicHeroClassic.stories.js +++ b/.storybook/stories/DynamicHeroClassic.stories.js @@ -1,4 +1,4 @@ -import DynamicHeroClassic from '@/components/Contentful/DynamicHeroClassic'; +import DynamicHeroClassic from '#src/components/Contentful/DynamicHeroClassic'; import apolloStoryMixin from '../mixins/apollo-story-mixin'; export default { diff --git a/.storybook/stories/EcoChallengeLightbox.stories.js b/.storybook/stories/EcoChallengeLightbox.stories.js index 5bd33e4454..fc240f1c39 100644 --- a/.storybook/stories/EcoChallengeLightbox.stories.js +++ b/.storybook/stories/EcoChallengeLightbox.stories.js @@ -1,4 +1,4 @@ -import EcoChallengeLightbox from '@/components/Lightboxes/EcoChallengeLightbox.vue'; +import EcoChallengeLightbox from '#src/components/Lightboxes/EcoChallengeLightbox.vue'; import cookieStoreStoryMixin from '../mixins/cookie-store-story-mixin'; import apolloStoryMixin from '../mixins/apollo-story-mixin'; diff --git a/.storybook/stories/GenericPromoBanner.stories.js b/.storybook/stories/GenericPromoBanner.stories.js index 6b0e8f3984..34a93a88c4 100644 --- a/.storybook/stories/GenericPromoBanner.stories.js +++ b/.storybook/stories/GenericPromoBanner.stories.js @@ -1,8 +1,8 @@ import Vue from 'vue' -import GenericPromoBanner from '@/components/WwwFrame/PromotionalBanner/Banners/GenericPromoBanner'; +import GenericPromoBanner from '#src/components/WwwFrame/PromotionalBanner/Banners/GenericPromoBanner'; // import plugins -import kivaPlugins from '@/plugins'; +import kivaPlugins from '#src/plugins'; Vue.use(kivaPlugins) const decodeHTML = function(html) { var txt = document.createElement('textarea'); diff --git a/.storybook/stories/GetStarted.stories.js b/.storybook/stories/GetStarted.stories.js index f7016aa0c9..27257bb3b4 100644 --- a/.storybook/stories/GetStarted.stories.js +++ b/.storybook/stories/GetStarted.stories.js @@ -1,12 +1,12 @@ import Vue from 'vue' // import plugins -import kivaPlugins from '@/plugins'; +import kivaPlugins from '#src/plugins'; Vue.use(kivaPlugins) -import GetStartedCauses from '@/pages/GetStarted/GetStartedCauses'; -import GetStartedPlaces from '@/pages/GetStarted/GetStartedPlaces'; -import GetStartedResults from '@/pages/GetStarted/GetStartedResults'; +import GetStartedCauses from '#src/pages/GetStarted/GetStartedCauses'; +import GetStartedPlaces from '#src/pages/GetStarted/GetStartedPlaces'; +import GetStartedResults from '#src/pages/GetStarted/GetStartedResults'; import apolloStoryMixin from '../mixins/apollo-story-mixin'; import cookieStoreStoryMixin from '../mixins/cookie-store-story-mixin'; diff --git a/.storybook/stories/GridLoanCard.stories.js b/.storybook/stories/GridLoanCard.stories.js index 7151ec8946..2c9c67290e 100644 --- a/.storybook/stories/GridLoanCard.stories.js +++ b/.storybook/stories/GridLoanCard.stories.js @@ -1,9 +1,9 @@ import Vue from 'vue' import apolloStoryMixin from '../mixins/apollo-story-mixin'; -import GridLoanCard from '@/components/LoanCards/GridLoanCard'; +import GridLoanCard from '#src/components/LoanCards/GridLoanCard'; // import plugins -import kivaPlugins from '@/plugins'; +import kivaPlugins from '#src/plugins'; Vue.use(kivaPlugins) export default { diff --git a/.storybook/stories/IwdActivityAvatar.stories.js b/.storybook/stories/IwdActivityAvatar.stories.js index 83082d5f43..f65604bde8 100644 --- a/.storybook/stories/IwdActivityAvatar.stories.js +++ b/.storybook/stories/IwdActivityAvatar.stories.js @@ -1,4 +1,4 @@ -import ActivityAvatar from '@/components/Iwd/ActivityAvatar'; +import ActivityAvatar from '#src/components/Iwd/ActivityAvatar'; export default { title: 'IWD/ActivityAvatar', diff --git a/.storybook/stories/IwdActivityCard.stories.js b/.storybook/stories/IwdActivityCard.stories.js index 284eda60bc..e2e97838be 100644 --- a/.storybook/stories/IwdActivityCard.stories.js +++ b/.storybook/stories/IwdActivityCard.stories.js @@ -1,4 +1,4 @@ -import ActivityCard from '@/components/Iwd/ActivityCard'; +import ActivityCard from '#src/components/Iwd/ActivityCard'; export default { title: 'IWD/ActivityCard', diff --git a/.storybook/stories/IwdActivityFeed.stories.js b/.storybook/stories/IwdActivityFeed.stories.js index aa27080159..b32ee05c93 100644 --- a/.storybook/stories/IwdActivityFeed.stories.js +++ b/.storybook/stories/IwdActivityFeed.stories.js @@ -1,4 +1,4 @@ -import ActivityFeed from '@/components/Iwd/ActivityFeed'; +import ActivityFeed from '#src/components/Iwd/ActivityFeed'; import apolloStoryMixin from '../mixins/apollo-story-mixin'; const queryResult = { diff --git a/.storybook/stories/KivaClassicBasicLoanCard.stories.js b/.storybook/stories/KivaClassicBasicLoanCard.stories.js index 3364d6498e..cb82cf60de 100644 --- a/.storybook/stories/KivaClassicBasicLoanCard.stories.js +++ b/.storybook/stories/KivaClassicBasicLoanCard.stories.js @@ -1,4 +1,4 @@ -import KivaClassicBasicLoanCard from '@/components/LoanCards/KivaClassicBasicLoanCard'; +import KivaClassicBasicLoanCard from '#src/components/LoanCards/KivaClassicBasicLoanCard'; import apolloStoryMixin from '../mixins/apollo-story-mixin'; import cookieStoreStoryMixin from '../mixins/cookie-store-story-mixin'; diff --git a/.storybook/stories/KivaClassicSingleCategoryCarousel.stories.js b/.storybook/stories/KivaClassicSingleCategoryCarousel.stories.js index d6f22db295..6eadca4e2a 100644 --- a/.storybook/stories/KivaClassicSingleCategoryCarousel.stories.js +++ b/.storybook/stories/KivaClassicSingleCategoryCarousel.stories.js @@ -1,8 +1,8 @@ -import KivaClassicSingleCategoryCarousel from '@/components/LoanCollections/KivaClassicSingleCategoryCarousel.vue'; +import KivaClassicSingleCategoryCarousel from '#src/components/LoanCollections/KivaClassicSingleCategoryCarousel.vue'; import apolloStoryMixin from '../mixins/apollo-story-mixin'; import cookieStoreStoryMixin from '../mixins/cookie-store-story-mixin'; -import KvGrid from '~/@kiva/kv-components/vue/KvGrid'; -import KvPageContainer from '~/@kiva/kv-components/vue/KvPageContainer'; +import KvGrid from '@kiva/kv-components/vue/KvGrid'; +import KvPageContainer from '@kiva/kv-components/vue/KvPageContainer'; const queryResult = { "data": { diff --git a/.storybook/stories/KivaMultiCategoryGrid.stories.js b/.storybook/stories/KivaMultiCategoryGrid.stories.js index 9d919a3edc..29a60eb255 100644 --- a/.storybook/stories/KivaMultiCategoryGrid.stories.js +++ b/.storybook/stories/KivaMultiCategoryGrid.stories.js @@ -1,8 +1,8 @@ -import KivaLoanCardCategory from '@/components/LoanCollections/HomeExp/KivaLoanCardCategory'; +import KivaLoanCardCategory from '#src/components/LoanCollections/HomeExp/KivaLoanCardCategory'; import apolloStoryMixin from '../mixins/apollo-story-mixin'; import cookieStoreStoryMixin from '../mixins/cookie-store-story-mixin'; -import LoanCategorySelectorHomeExp from '@/components/LoanCollections/HomeExp/LoanCategorySelectorHomeExp'; -import KvGrid from '~/@kiva/kv-components/vue/KvGrid'; +import LoanCategorySelectorHomeExp from '#src/components/LoanCollections/HomeExp/LoanCategorySelectorHomeExp'; +import KvGrid from '@kiva/kv-components/vue/KvGrid'; export default { title: 'New Home Page/Kiva Multi Category Grid', diff --git a/.storybook/stories/KvAccordionItem.stories.js b/.storybook/stories/KvAccordionItem.stories.js index 5fcf96cda0..3a28f4b96f 100644 --- a/.storybook/stories/KvAccordionItem.stories.js +++ b/.storybook/stories/KvAccordionItem.stories.js @@ -1,4 +1,4 @@ -import KvAccordionItem from '@/components/Kv/KvAccordionItem'; +import KvAccordionItem from '#src/components/Kv/KvAccordionItem'; export default { title: 'Kv/KvAccordionItem', diff --git a/.storybook/stories/KvActivityRow.stories.js b/.storybook/stories/KvActivityRow.stories.js index a3d72b1f18..2a0fd7cee3 100644 --- a/.storybook/stories/KvActivityRow.stories.js +++ b/.storybook/stories/KvActivityRow.stories.js @@ -1,4 +1,4 @@ -import KvActivityRow from '@/components/Kv/KvActivityRow.vue'; +import KvActivityRow from '#src/components/Kv/KvActivityRow.vue'; export default { title: 'Kv/KvActivityRow', @@ -22,4 +22,4 @@ const story = (args) => { return template; }; -export const Default = story({ activity }); \ No newline at end of file +export const Default = story({ activity }); diff --git a/.storybook/stories/KvAlert.stories.js b/.storybook/stories/KvAlert.stories.js index 88c629e020..29c43137fc 100644 --- a/.storybook/stories/KvAlert.stories.js +++ b/.storybook/stories/KvAlert.stories.js @@ -1,4 +1,4 @@ -import KvAlert from '@/components/Kv/KvAlert'; +import KvAlert from '#src/components/Kv/KvAlert'; export default { title: 'Kv/KvAlert', diff --git a/.storybook/stories/KvBaseInput.stories.js b/.storybook/stories/KvBaseInput.stories.js index 5e5e4f1bbc..9deff9c6cd 100644 --- a/.storybook/stories/KvBaseInput.stories.js +++ b/.storybook/stories/KvBaseInput.stories.js @@ -1,4 +1,4 @@ -import KvBaseInput from '@/components/Kv/KvBaseInput'; +import KvBaseInput from '#src/components/Kv/KvBaseInput'; const commonData = { vuelidateObject: { diff --git a/.storybook/stories/KvButton.stories.js b/.storybook/stories/KvButton.stories.js index 755525a5be..0102de4f7f 100644 --- a/.storybook/stories/KvButton.stories.js +++ b/.storybook/stories/KvButton.stories.js @@ -1,4 +1,4 @@ -import KvButton from '@/components/Kv/KvButton'; +import KvButton from '#src/components/Kv/KvButton'; export default { title: 'KV/KvButton', diff --git a/.storybook/stories/KvCarousel.stories.js b/.storybook/stories/KvCarousel.stories.js index 92106003e1..5d8ef0f984 100644 --- a/.storybook/stories/KvCarousel.stories.js +++ b/.storybook/stories/KvCarousel.stories.js @@ -1,8 +1,8 @@ -import KvCarousel from '@/components/Kv/KvCarousel'; -import KvCarouselSlide from '@/components/Kv/KvCarouselSlide'; -import KvCauseSelector from '@/components/Kv/KvCauseSelector'; -import KvLoadingSpinner from '@/components/Kv/KvLoadingSpinner'; -import KvResponsiveImage from '@/components/Kv/KvResponsiveImage'; +import KvCarousel from '#src/components/Kv/KvCarousel'; +import KvCarouselSlide from '#src/components/Kv/KvCarouselSlide'; +import KvCauseSelector from '#src/components/Kv/KvCauseSelector'; +import KvLoadingSpinner from '#src/components/Kv/KvLoadingSpinner'; +import KvResponsiveImage from '#src/components/Kv/KvResponsiveImage'; import causeList from '../mock-data/cause-selector-data-mock'; @@ -316,7 +316,7 @@ export const loanCardExample = () => ({ } }); -const slidesImageRequire = require.context('@/assets/images/possibilities-banners/kivan-slider', true); +const slidesImageRequire = require.context('#src/assets/images/possibilities-banners/kivan-slider', true); export const KivanSlider = () => ({ components: { KvCarousel, @@ -386,7 +386,7 @@ export const KivanSlider = () => ({ `, }); -const imageRequire = require.context('@/assets/images/hero-slideshow/', true); +const imageRequire = require.context('#src/assets/images/hero-slideshow/', true); export const ImagesOnlyLazyLoadLikeHomepage = () => ({ components: { KvCarousel, diff --git a/.storybook/stories/KvCauseSelector.stories.js b/.storybook/stories/KvCauseSelector.stories.js index 7201174d7d..e86abc3776 100644 --- a/.storybook/stories/KvCauseSelector.stories.js +++ b/.storybook/stories/KvCauseSelector.stories.js @@ -1,4 +1,4 @@ -import KvCauseSelector from '@/components/Kv/KvCauseSelector'; +import KvCauseSelector from '#src/components/Kv/KvCauseSelector'; import causeList from '../mock-data/cause-selector-data-mock'; diff --git a/.storybook/stories/KvCheckbox.stories.js b/.storybook/stories/KvCheckbox.stories.js index 25f2f5f7da..9765087800 100644 --- a/.storybook/stories/KvCheckbox.stories.js +++ b/.storybook/stories/KvCheckbox.stories.js @@ -1,4 +1,4 @@ -import KvCheckbox from '@/components/Kv/KvCheckbox'; +import KvCheckbox from '#src/components/Kv/KvCheckbox'; export default { title: 'Kv/Form Elements/KvCheckbox', diff --git a/.storybook/stories/KvCheckboxList.stories.js b/.storybook/stories/KvCheckboxList.stories.js index db616138d6..45cbc1f5d6 100644 --- a/.storybook/stories/KvCheckboxList.stories.js +++ b/.storybook/stories/KvCheckboxList.stories.js @@ -1,4 +1,4 @@ -import KvCheckboxList from '@/components/Kv/KvCheckboxList'; +import KvCheckboxList from '#src/components/Kv/KvCheckboxList'; export default { title: 'Kv/Form Elements/KvCheckboxList', diff --git a/.storybook/stories/KvChip.stories.js b/.storybook/stories/KvChip.stories.js index 8ff0121bcc..44d27806a1 100644 --- a/.storybook/stories/KvChip.stories.js +++ b/.storybook/stories/KvChip.stories.js @@ -1,4 +1,4 @@ -import KvChip from '@/components/Kv/KvChip'; +import KvChip from '#src/components/Kv/KvChip'; export default { title: 'Kv/KvChip', diff --git a/.storybook/stories/KvContentfulImg.stories.js b/.storybook/stories/KvContentfulImg.stories.js index eaad98444c..fec3080dab 100644 --- a/.storybook/stories/KvContentfulImg.stories.js +++ b/.storybook/stories/KvContentfulImg.stories.js @@ -1,4 +1,4 @@ -import KvContentfulImg from '@/components/Kv/KvContentfulImg'; +import KvContentfulImg from '#src/components/Kv/KvContentfulImg'; export default { title: 'Kv/KvContentfulImg', diff --git a/.storybook/stories/KvCurrencyInput.stories.js b/.storybook/stories/KvCurrencyInput.stories.js index 6af2d70fcd..c7cd13efc6 100644 --- a/.storybook/stories/KvCurrencyInput.stories.js +++ b/.storybook/stories/KvCurrencyInput.stories.js @@ -1,4 +1,4 @@ -import KvCurrencyInput from '@/components/Kv/KvCurrencyInput'; +import KvCurrencyInput from '#src/components/Kv/KvCurrencyInput'; import { validationMixin } from 'vuelidate'; import { required, minValue, maxValue } from 'vuelidate/lib/validators'; diff --git a/.storybook/stories/KvExpandableQuestion.stories.js b/.storybook/stories/KvExpandableQuestion.stories.js index d64cea3b24..8f2aa349c3 100644 --- a/.storybook/stories/KvExpandableQuestion.stories.js +++ b/.storybook/stories/KvExpandableQuestion.stories.js @@ -1,8 +1,8 @@ import Vue from 'vue' -import KvExpandableQuestion from '@/components/Kv/KvExpandableQuestion'; +import KvExpandableQuestion from '#src/components/Kv/KvExpandableQuestion'; // import plugins -import kivaPlugins from '@/plugins'; +import kivaPlugins from '#src/plugins'; Vue.use(kivaPlugins) export default { @@ -24,7 +24,7 @@ export const Default = (args, { argTypes }) => ({ diff --git a/.storybook/stories/KvFlag.stories.js b/.storybook/stories/KvFlag.stories.js index 80de3b291d..75e6bdfaf9 100644 --- a/.storybook/stories/KvFlag.stories.js +++ b/.storybook/stories/KvFlag.stories.js @@ -1,4 +1,4 @@ -import KvFlag from '@/components/Kv/KvFlag'; +import KvFlag from '#src/components/Kv/KvFlag'; import { getCountryList } from 'flag-icon-css'; diff --git a/.storybook/stories/KvFormKitchenSink.stories.js b/.storybook/stories/KvFormKitchenSink.stories.js index 7c5c661ec7..088876ac2f 100644 --- a/.storybook/stories/KvFormKitchenSink.stories.js +++ b/.storybook/stories/KvFormKitchenSink.stories.js @@ -1,13 +1,13 @@ -import KvBaseInput from '@/components/Kv/KvBaseInput'; -import KvCheckbox from '@/components/Kv/KvCheckbox'; -import KvCurrencyInput from '@/components/Kv/KvCurrencyInput'; -import KvSelect from '@/components/Kv/KvSelect'; -import KvPhoneInput from '@/components/Kv/KvPhoneInput'; -import KvPillToggle from '@/components/Kv/KvPillToggle'; -import KvRadio from '@/components/Kv/KvRadio'; -import KvRangeSlider from '@/components/Kv/KvRangeSlider'; -import KvToggle from '@/components/Kv/KvToggle'; -import KvVerificationCodeInput from '@/components/Kv/KvVerificationCodeInput'; +import KvBaseInput from '#src/components/Kv/KvBaseInput'; +import KvCheckbox from '#src/components/Kv/KvCheckbox'; +import KvCurrencyInput from '#src/components/Kv/KvCurrencyInput'; +import KvSelect from '#src/components/Kv/KvSelect'; +import KvPhoneInput from '#src/components/Kv/KvPhoneInput'; +import KvPillToggle from '#src/components/Kv/KvPillToggle'; +import KvRadio from '#src/components/Kv/KvRadio'; +import KvRangeSlider from '#src/components/Kv/KvRangeSlider'; +import KvToggle from '#src/components/Kv/KvToggle'; +import KvVerificationCodeInput from '#src/components/Kv/KvVerificationCodeInput'; export default { title: 'Kv/Form Elements', diff --git a/.storybook/stories/KvFrequentlyAskedQuestions.stories.js b/.storybook/stories/KvFrequentlyAskedQuestions.stories.js index 7e3b8c696e..6f6e7339f2 100644 --- a/.storybook/stories/KvFrequentlyAskedQuestions.stories.js +++ b/.storybook/stories/KvFrequentlyAskedQuestions.stories.js @@ -1,6 +1,6 @@ -import SectionWithBackgroundClassic from '@/components/Contentful/SectionWithBackgroundClassic'; -import KvFrequentlyAskedQuestions from '@/components/Kv/KvFrequentlyAskedQuestions'; -import KvPageContainer from '~/@kiva/kv-components/vue/KvPageContainer'; +import SectionWithBackgroundClassic from '#src/components/Contentful/SectionWithBackgroundClassic'; +import KvFrequentlyAskedQuestions from '#src/components/Kv/KvFrequentlyAskedQuestions'; +import KvPageContainer from '@kiva/kv-components/vue/KvPageContainer'; export default { title: 'Kv/KvFrequentlyAskedQuestions', diff --git a/.storybook/stories/KvHero.stories.js b/.storybook/stories/KvHero.stories.js index 3e5019596a..2ce1e3d469 100644 --- a/.storybook/stories/KvHero.stories.js +++ b/.storybook/stories/KvHero.stories.js @@ -1,8 +1,8 @@ -import KvHero from '@/components/Kv/KvHero'; -import KvButton from '@/components/Kv/KvButton'; -import KvResponsiveImage from '@/components/Kv/KvResponsiveImage'; +import KvHero from '#src/components/Kv/KvHero'; +import KvButton from '#src/components/Kv/KvButton'; +import KvResponsiveImage from '#src/components/Kv/KvResponsiveImage'; -const imagesRequire = require.context('@/assets/images/mg-hero-slideshow', true); +const imagesRequire = require.context('#src/assets/images/mg-hero-slideshow', true); const sampleResponsiveImageSet = [ ['small', imagesRequire('./mg-hppromo-1-sm-std.jpg')], ['small retina', imagesRequire('./mg-hppromo-1-sm-retina.jpg')], diff --git a/.storybook/stories/KvIcon.stories.js b/.storybook/stories/KvIcon.stories.js index e656f5ee65..af286f78d6 100644 --- a/.storybook/stories/KvIcon.stories.js +++ b/.storybook/stories/KvIcon.stories.js @@ -1,4 +1,4 @@ -import KvIcon from '@/components/Kv/KvIcon'; +import KvIcon from '#src/components/Kv/KvIcon'; function getFilenames(r) { return r.keys().map((filename) => { @@ -31,7 +31,7 @@ export const inlined = () => ({ }, data() { return { - iconNames: getFilenames(require.context('@/assets/icons/inline/', true, /\.svg$/)) + iconNames: getFilenames(require.context('#src/assets/icons/inline/', true, /\.svg$/)) } }, template: ` @@ -65,7 +65,7 @@ export const fromSprite = () => ({ }, data() { return { - iconNames: getFilenames(require.context('@/assets/icons/sprite/', true, /\.svg$/)) + iconNames: getFilenames(require.context('#src/assets/icons/sprite/', true, /\.svg$/)) } }, template: ` diff --git a/.storybook/stories/KvIconButton.stories.js b/.storybook/stories/KvIconButton.stories.js index 6c2106bf86..19639b5095 100644 --- a/.storybook/stories/KvIconButton.stories.js +++ b/.storybook/stories/KvIconButton.stories.js @@ -1,5 +1,5 @@ -import KvIcon from '@/components/Kv/KvIcon'; -import KvIconButton from '@/components/Kv/KvIconButton'; +import KvIcon from '#src/components/Kv/KvIcon'; +import KvIconButton from '#src/components/Kv/KvIconButton'; export default { title: 'KV/KvIconButton', diff --git a/.storybook/stories/KvLightbox.stories.js b/.storybook/stories/KvLightbox.stories.js index edbf6a4de4..89bbbe2234 100644 --- a/.storybook/stories/KvLightbox.stories.js +++ b/.storybook/stories/KvLightbox.stories.js @@ -1,5 +1,5 @@ -import KvLightbox from '@/components/Kv/KvLightbox'; -import KvButton from '@/components/Kv/KvButton'; +import KvLightbox from '#src/components/Kv/KvLightbox'; +import KvButton from '#src/components/Kv/KvButton'; const loremIpsum = `

diff --git a/.storybook/stories/KvLoadingParagraph.stories.js b/.storybook/stories/KvLoadingParagraph.stories.js index 6a9f209b98..9cdfeae37b 100644 --- a/.storybook/stories/KvLoadingParagraph.stories.js +++ b/.storybook/stories/KvLoadingParagraph.stories.js @@ -1,4 +1,4 @@ -import KvLoadingParagraph from '@/components/Kv/KvLoadingParagraph'; +import KvLoadingParagraph from '#src/components/Kv/KvLoadingParagraph'; export default { title: 'Kv/KvLoadingParagraph', diff --git a/.storybook/stories/KvLoadingSpinner.stories.js b/.storybook/stories/KvLoadingSpinner.stories.js index 1c08d9b8b1..e978890f82 100644 --- a/.storybook/stories/KvLoadingSpinner.stories.js +++ b/.storybook/stories/KvLoadingSpinner.stories.js @@ -1,4 +1,4 @@ -import KvLoadingSpinner from '@/components/Kv/KvLoadingSpinner'; +import KvLoadingSpinner from '#src/components/Kv/KvLoadingSpinner'; export default { title: 'Kv/KvLoadingSpinner', diff --git a/.storybook/stories/KvLoanActivities.stories.js b/.storybook/stories/KvLoanActivities.stories.js index b0c24d1bd2..ead44531cc 100644 --- a/.storybook/stories/KvLoanActivities.stories.js +++ b/.storybook/stories/KvLoanActivities.stories.js @@ -1,4 +1,4 @@ -import KvLoanActivities from '@/components/Kv/KvLoanActivities.vue'; +import KvLoanActivities from '#src/components/Kv/KvLoanActivities.vue'; import cookieStoreStoryMixin from '../mixins/cookie-store-story-mixin'; import activities from '../mock-data/activity-feed-data-mock'; diff --git a/.storybook/stories/KvLoanCards.stories.js b/.storybook/stories/KvLoanCards.stories.js index ad9b216c57..df5802ae30 100644 --- a/.storybook/stories/KvLoanCards.stories.js +++ b/.storybook/stories/KvLoanCards.stories.js @@ -1,4 +1,4 @@ -import NewHomePageLoanCard from '@/components/LoanCards/NewHomePageLoanCard'; +import NewHomePageLoanCard from '#src/components/LoanCards/NewHomePageLoanCard'; import apolloStoryMixin from '../mixins/apollo-story-mixin'; import cookieStoreStoryMixin from '../mixins/cookie-store-story-mixin'; diff --git a/.storybook/stories/KvMap.stories.js b/.storybook/stories/KvMap.stories.js index 6d5f81cb04..d47aff6c43 100644 --- a/.storybook/stories/KvMap.stories.js +++ b/.storybook/stories/KvMap.stories.js @@ -1,4 +1,4 @@ -import KvMap from '@/components/Kv/KvMap'; +import KvMap from '#src/components/Kv/KvMap'; export default { title: 'Kv/KvMap', diff --git a/.storybook/stories/KvPagination.stories.js b/.storybook/stories/KvPagination.stories.js index de13f15560..fafdc0775d 100644 --- a/.storybook/stories/KvPagination.stories.js +++ b/.storybook/stories/KvPagination.stories.js @@ -1,4 +1,4 @@ -import KvPagination from '@/components/Kv/KvPagination'; +import KvPagination from '#src/components/Kv/KvPagination'; export default { title: 'Kv/KvPagination', diff --git a/.storybook/stories/KvPhoneInput.stories.js b/.storybook/stories/KvPhoneInput.stories.js index 194d02238a..ca8f496a60 100644 --- a/.storybook/stories/KvPhoneInput.stories.js +++ b/.storybook/stories/KvPhoneInput.stories.js @@ -1,4 +1,4 @@ -import KvPhoneInput from '@/components/Kv/KvPhoneInput'; +import KvPhoneInput from '#src/components/Kv/KvPhoneInput'; export default { title: 'Kv/Form Elements/KvPhoneInput', diff --git a/.storybook/stories/KvPillToggle.stories.js b/.storybook/stories/KvPillToggle.stories.js index 86d69d89e4..c7d7a6e64d 100644 --- a/.storybook/stories/KvPillToggle.stories.js +++ b/.storybook/stories/KvPillToggle.stories.js @@ -1,4 +1,4 @@ -import KvPillToggle from '@/components/Kv/KvPillToggle'; +import KvPillToggle from '#src/components/Kv/KvPillToggle'; export default { title: 'Kv/Form Elements/KvPillToggle', diff --git a/.storybook/stories/KvProgressBar.stories.js b/.storybook/stories/KvProgressBar.stories.js index b1cd8e0b2a..e1b8c726c1 100644 --- a/.storybook/stories/KvProgressBar.stories.js +++ b/.storybook/stories/KvProgressBar.stories.js @@ -1,4 +1,4 @@ -import KvProgressBar from '@/components/Kv/KvProgressBar'; +import KvProgressBar from '#src/components/Kv/KvProgressBar'; export default { title: 'Kv/KvProgressBar', diff --git a/.storybook/stories/KvProgressCampaign.stories.js b/.storybook/stories/KvProgressCampaign.stories.js index 3166c8a50d..51863ecca6 100644 --- a/.storybook/stories/KvProgressCampaign.stories.js +++ b/.storybook/stories/KvProgressCampaign.stories.js @@ -1,4 +1,4 @@ -import KvProgressCampaign from '@/components/Kv/KvProgressCampaign'; +import KvProgressCampaign from '#src/components/Kv/KvProgressCampaign'; export default { title: 'Kv/KvProgressCampaign', diff --git a/.storybook/stories/KvProgressCircle.stories.js b/.storybook/stories/KvProgressCircle.stories.js index 4987bf81b5..29a808fba1 100644 --- a/.storybook/stories/KvProgressCircle.stories.js +++ b/.storybook/stories/KvProgressCircle.stories.js @@ -1,4 +1,4 @@ -import KvProgressCircle from '@/components/Kv/KvProgressCircle'; +import KvProgressCircle from '#src/components/Kv/KvProgressCircle'; export default { title: 'Kv/KvProgressCircle', diff --git a/.storybook/stories/KvRadio.stories.js b/.storybook/stories/KvRadio.stories.js index fad03a6087..0ad7e18e82 100644 --- a/.storybook/stories/KvRadio.stories.js +++ b/.storybook/stories/KvRadio.stories.js @@ -1,4 +1,4 @@ -import KvRadio from '@/components/Kv/KvRadio'; +import KvRadio from '#src/components/Kv/KvRadio'; export default { title: 'Kv/Form Elements/KvRadio', diff --git a/.storybook/stories/KvRangeMinMaxSlider.stories.js b/.storybook/stories/KvRangeMinMaxSlider.stories.js index 85773b2023..f9f4500201 100644 --- a/.storybook/stories/KvRangeMinMaxSlider.stories.js +++ b/.storybook/stories/KvRangeMinMaxSlider.stories.js @@ -1,4 +1,4 @@ -import KvRangeMinMaxSlider from '@/components/Kv/KvRangeMinMaxSlider'; +import KvRangeMinMaxSlider from '#src/components/Kv/KvRangeMinMaxSlider'; export default { title: 'Kv/Form Elements/KvRangeMinMaxSlider', diff --git a/.storybook/stories/KvRangeSlider.stories.js b/.storybook/stories/KvRangeSlider.stories.js index 56ef69d49e..595c0a2070 100644 --- a/.storybook/stories/KvRangeSlider.stories.js +++ b/.storybook/stories/KvRangeSlider.stories.js @@ -1,4 +1,4 @@ -import KvRangeSlider from '@/components/Kv/KvRangeSlider'; +import KvRangeSlider from '#src/components/Kv/KvRangeSlider'; export default { title: 'Kv/Form Elements/KvRangeSlider', diff --git a/.storybook/stories/KvResponsiveImage.stories.js b/.storybook/stories/KvResponsiveImage.stories.js index 0270ec8bbb..ac69d21b6a 100644 --- a/.storybook/stories/KvResponsiveImage.stories.js +++ b/.storybook/stories/KvResponsiveImage.stories.js @@ -1,4 +1,4 @@ -import KvResponsiveImage from '@/components/Kv/KvResponsiveImage'; +import KvResponsiveImage from '#src/components/Kv/KvResponsiveImage'; export default { title: 'Kv/KvResponsiveImage', diff --git a/.storybook/stories/KvResultsPerPage.stories.js b/.storybook/stories/KvResultsPerPage.stories.js index c644b0d944..8da9738966 100644 --- a/.storybook/stories/KvResultsPerPage.stories.js +++ b/.storybook/stories/KvResultsPerPage.stories.js @@ -1,4 +1,4 @@ -import KvResultsPerPage from '@/components/Kv/KvResultsPerPage'; +import KvResultsPerPage from '#src/components/Kv/KvResultsPerPage'; export default { title: 'Kv/KvResultsPerPage', diff --git a/.storybook/stories/KvSectionModalLoader.stories.js b/.storybook/stories/KvSectionModalLoader.stories.js index 33916b7adf..6ec0bb38fd 100644 --- a/.storybook/stories/KvSectionModalLoader.stories.js +++ b/.storybook/stories/KvSectionModalLoader.stories.js @@ -1,4 +1,4 @@ -import KvSectionModalLoader from '@/components/Kv/KvSectionModalLoader'; +import KvSectionModalLoader from '#src/components/Kv/KvSectionModalLoader'; export default { title: 'Kv/KvSectionModalLoader', diff --git a/.storybook/stories/KvSelect.stories.js b/.storybook/stories/KvSelect.stories.js index f8f4a40494..847c445500 100644 --- a/.storybook/stories/KvSelect.stories.js +++ b/.storybook/stories/KvSelect.stories.js @@ -1,4 +1,4 @@ -import KvSelect from '@/components/Kv/KvSelect'; +import KvSelect from '#src/components/Kv/KvSelect'; export default { title: 'Kv/Form Elements/KvSelect', diff --git a/.storybook/stories/KvSelectBox.stories.js b/.storybook/stories/KvSelectBox.stories.js index 0207764359..1d53c5acf4 100644 --- a/.storybook/stories/KvSelectBox.stories.js +++ b/.storybook/stories/KvSelectBox.stories.js @@ -1,4 +1,4 @@ -import KvSelectBox from '@/components/Kv/KvSelectBox'; +import KvSelectBox from '#src/components/Kv/KvSelectBox'; export default { title: 'Kv/Form Elements/KvSelectBox', diff --git a/.storybook/stories/KvSettingsCard.stories.js b/.storybook/stories/KvSettingsCard.stories.js index 77e74c9863..38ee57bb7a 100644 --- a/.storybook/stories/KvSettingsCard.stories.js +++ b/.storybook/stories/KvSettingsCard.stories.js @@ -1,4 +1,4 @@ -import KvSettingsCard from '@/components/Kv/KvSettingsCard'; +import KvSettingsCard from '#src/components/Kv/KvSettingsCard'; export default { title: 'Kv/KvSettingsCard', diff --git a/.storybook/stories/KvSocialShareButton.stories.js b/.storybook/stories/KvSocialShareButton.stories.js index fa2b402d7d..892958a9be 100644 --- a/.storybook/stories/KvSocialShareButton.stories.js +++ b/.storybook/stories/KvSocialShareButton.stories.js @@ -1,4 +1,4 @@ -import KvSocialShareButton from '@/components/Kv/KvSocialShareButton'; +import KvSocialShareButton from '#src/components/Kv/KvSocialShareButton'; import apolloStoryMixin from '../mixins/apollo-story-mixin'; export default { diff --git a/.storybook/stories/KvToggle.stories.js b/.storybook/stories/KvToggle.stories.js index 894feac7a8..39545a8bf8 100644 --- a/.storybook/stories/KvToggle.stories.js +++ b/.storybook/stories/KvToggle.stories.js @@ -1,4 +1,4 @@ -import KvToggle from '@/components/Kv/KvToggle'; +import KvToggle from '#src/components/Kv/KvToggle'; export default { title: 'Kv/Form Elements/KvToggle', diff --git a/.storybook/stories/KvTooltip.stories.js b/.storybook/stories/KvTooltip.stories.js index f1007dafb5..d1c3ab6e2e 100644 --- a/.storybook/stories/KvTooltip.stories.js +++ b/.storybook/stories/KvTooltip.stories.js @@ -1,5 +1,5 @@ -import KvTooltip from '@/components/Kv/KvTooltip'; -import KvIcon from '@/components/Kv/KvIcon'; +import KvTooltip from '#src/components/Kv/KvTooltip'; +import KvIcon from '#src/components/Kv/KvIcon'; export default { title: 'Kv/KvTooltip', diff --git a/.storybook/stories/KvVerificationCodeInput.stories.js b/.storybook/stories/KvVerificationCodeInput.stories.js index 310feb9b74..a1587a3f2b 100644 --- a/.storybook/stories/KvVerificationCodeInput.stories.js +++ b/.storybook/stories/KvVerificationCodeInput.stories.js @@ -1,4 +1,4 @@ -import KvVerificationCodeInput from '@/components/Kv/KvVerificationCodeInput'; +import KvVerificationCodeInput from '#src/components/Kv/KvVerificationCodeInput'; export default { title: 'Kv/Form Elements/KvVerificationCodeInput', diff --git a/.storybook/stories/ListLoanCard.stories.js b/.storybook/stories/ListLoanCard.stories.js index b27e703e73..6057512251 100644 --- a/.storybook/stories/ListLoanCard.stories.js +++ b/.storybook/stories/ListLoanCard.stories.js @@ -1,5 +1,5 @@ import apolloStoryMixin from '../mixins/apollo-story-mixin'; -import ListLoanCard from '@/components/LoanCards/ListLoanCard'; +import ListLoanCard from '#src/components/LoanCards/ListLoanCard'; import { mockLoansArray } from '../utils'; import cookieStoreStoryMixin from '../mixins/cookie-store-story-mixin'; diff --git a/.storybook/stories/LoanSearchChallengeHeader.stories.js b/.storybook/stories/LoanSearchChallengeHeader.stories.js index e861fa5d86..cc05032a0b 100644 --- a/.storybook/stories/LoanSearchChallengeHeader.stories.js +++ b/.storybook/stories/LoanSearchChallengeHeader.stories.js @@ -1,4 +1,4 @@ -import ChallengeHeader from '@/components/Lend/LoanSearch/ChallengeHeader'; +import ChallengeHeader from '#src/components/Lend/LoanSearch/ChallengeHeader'; export default { title: 'Loan Search/Challenge Header', @@ -12,7 +12,7 @@ const story = (args = {}) => { template: `

`, - + }); template.args = args; return template; diff --git a/.storybook/stories/LoanSearchCheckboxListFilter.stories.js b/.storybook/stories/LoanSearchCheckboxListFilter.stories.js index 1663beeedc..3dbe3c9c7f 100644 --- a/.storybook/stories/LoanSearchCheckboxListFilter.stories.js +++ b/.storybook/stories/LoanSearchCheckboxListFilter.stories.js @@ -1,4 +1,4 @@ -import LoanSearchCheckboxListFilter from '@/components/Lend/LoanSearch/LoanSearchCheckboxListFilter'; +import LoanSearchCheckboxListFilter from '#src/components/Lend/LoanSearch/LoanSearchCheckboxListFilter'; export default { title: 'Loan Search/Loan Search Checkbox List Filter', diff --git a/.storybook/stories/LoanSearchFilterChips.stories.js b/.storybook/stories/LoanSearchFilterChips.stories.js index 6687fea46c..54c045b3bc 100644 --- a/.storybook/stories/LoanSearchFilterChips.stories.js +++ b/.storybook/stories/LoanSearchFilterChips.stories.js @@ -1,4 +1,4 @@ -import LoanSearchFilterChips from '@/components/Lend/LoanSearch/LoanSearchFilterChips'; +import LoanSearchFilterChips from '#src/components/Lend/LoanSearch/LoanSearchFilterChips'; import { mockState, mockAllFacets } from '../../test/unit/fixtures/mockLoanSearchData'; export default { diff --git a/.storybook/stories/LoanSearchLocationFilter.stories.js b/.storybook/stories/LoanSearchLocationFilter.stories.js index 4b242f2ec5..a393a7b4b1 100644 --- a/.storybook/stories/LoanSearchLocationFilter.stories.js +++ b/.storybook/stories/LoanSearchLocationFilter.stories.js @@ -1,4 +1,4 @@ -import LoanSearchLocationFilter from '@/components/Lend/LoanSearch/LoanSearchLocationFilter'; +import LoanSearchLocationFilter from '#src/components/Lend/LoanSearch/LoanSearchLocationFilter'; export default { title: 'Loan Search/Loan Search Location Filter', diff --git a/.storybook/stories/LoanSearchRadioGroupFilter.stories.js b/.storybook/stories/LoanSearchRadioGroupFilter.stories.js index b638879f88..db49eef96b 100644 --- a/.storybook/stories/LoanSearchRadioGroupFilter.stories.js +++ b/.storybook/stories/LoanSearchRadioGroupFilter.stories.js @@ -1,4 +1,4 @@ -import LoanSearchRadioGroupFilter from '@/components/Lend/LoanSearch/LoanSearchRadioGroupFilter'; +import LoanSearchRadioGroupFilter from '#src/components/Lend/LoanSearch/LoanSearchRadioGroupFilter'; export default { title: 'Loan Search/Loan Search Radio Group Filter', diff --git a/.storybook/stories/LoanSearchSortBy.stories.js b/.storybook/stories/LoanSearchSortBy.stories.js index 8aeead0871..73a4914c55 100644 --- a/.storybook/stories/LoanSearchSortBy.stories.js +++ b/.storybook/stories/LoanSearchSortBy.stories.js @@ -1,5 +1,5 @@ -import LoanSearchSortBy from '@/components/Lend/LoanSearch/LoanSearchSortBy'; -import { FLSS_QUERY_TYPE, STANDARD_QUERY_TYPE } from '@/util/loanSearch/filterUtils'; +import LoanSearchSortBy from '#src/components/Lend/LoanSearch/LoanSearchSortBy'; +import { FLSS_QUERY_TYPE, STANDARD_QUERY_TYPE } from '#src/util/loanSearch/filterUtils'; export default { title: 'Loan Search/Loan Search Sort Order', diff --git a/.storybook/stories/LoanSpotlight.stories.js b/.storybook/stories/LoanSpotlight.stories.js index ab44bcb449..0cbe1b51b2 100644 --- a/.storybook/stories/LoanSpotlight.stories.js +++ b/.storybook/stories/LoanSpotlight.stories.js @@ -1,8 +1,8 @@ -import LoanSpotlight from '@/components/Categories/LoanSpotlight'; +import LoanSpotlight from '#src/components/Categories/LoanSpotlight'; import apolloStoryMixin from '../mixins/apollo-story-mixin'; import cookieStoreStoryMixin from '../mixins/cookie-store-story-mixin'; -import KvGrid from '~/@kiva/kv-components/vue/KvGrid'; -import KvPageContainer from '~/@kiva/kv-components/vue/KvPageContainer'; +import KvGrid from '@kiva/kv-components/vue/KvGrid'; +import KvPageContainer from '@kiva/kv-components/vue/KvPageContainer'; const loanHorizontal = { id: 2389631, diff --git a/.storybook/stories/MainCategoryTile.stories.js b/.storybook/stories/MainCategoryTile.stories.js index cf56a4b695..79e75876d8 100644 --- a/.storybook/stories/MainCategoryTile.stories.js +++ b/.storybook/stories/MainCategoryTile.stories.js @@ -1,6 +1,6 @@ -import MainCategoryTile from '@/components/Categories/MainCategoryTile'; -import KvGrid from '~/@kiva/kv-components/vue/KvGrid'; -import KvPageContainer from '~/@kiva/kv-components/vue/KvPageContainer'; +import MainCategoryTile from '#src/components/Categories/MainCategoryTile'; +import KvGrid from '@kiva/kv-components/vue/KvGrid'; +import KvPageContainer from '@kiva/kv-components/vue/KvPageContainer'; export default { title: 'Components/Main Category Tile', diff --git a/.storybook/stories/MonthlyGoodSelector.stories.js b/.storybook/stories/MonthlyGoodSelector.stories.js index 13ef123438..36ad8cf5d6 100644 --- a/.storybook/stories/MonthlyGoodSelector.stories.js +++ b/.storybook/stories/MonthlyGoodSelector.stories.js @@ -1,6 +1,6 @@ -import MonthlyGoodSelectorDesktop from '@/components/MonthlyGood/MonthlyGoodSelectorDesktop'; -import MonthlyGoodSelectorMobile from '@/components/MonthlyGood/MonthlyGoodSelectorMobile'; -import loanGroupCategoriesMixin from '@/plugins/loan-group-categories'; +import MonthlyGoodSelectorDesktop from '#src/components/MonthlyGood/MonthlyGoodSelectorDesktop'; +import MonthlyGoodSelectorMobile from '#src/components/MonthlyGood/MonthlyGoodSelectorMobile'; +import loanGroupCategoriesMixin from '#src/plugins/loan-group-categories'; const lendingCategories = loanGroupCategoriesMixin.data().lendingCategories; diff --git a/.storybook/stories/MonthlyGoodUpdateForm.stories.js b/.storybook/stories/MonthlyGoodUpdateForm.stories.js index ffb2e91b60..d4094bec18 100644 --- a/.storybook/stories/MonthlyGoodUpdateForm.stories.js +++ b/.storybook/stories/MonthlyGoodUpdateForm.stories.js @@ -1,4 +1,4 @@ -import MonthlyGoodUpdateForm from '@/components/Forms/MonthlyGoodUpdateForm'; +import MonthlyGoodUpdateForm from '#src/components/Forms/MonthlyGoodUpdateForm'; export default { title: 'Forms/MonthlyGoodUpdateForm', diff --git a/.storybook/stories/MultiAmountSelector.stories.js b/.storybook/stories/MultiAmountSelector.stories.js index 8faf1e1cc5..88c92c2141 100644 --- a/.storybook/stories/MultiAmountSelector.stories.js +++ b/.storybook/stories/MultiAmountSelector.stories.js @@ -1,4 +1,4 @@ -import MultiAmountSelector from '@/components/Forms/MultiAmountSelector'; +import MultiAmountSelector from '#src/components/Forms/MultiAmountSelector'; export default { title: 'Forms/MultiAmountSelector', diff --git a/.storybook/stories/PortfolioKivaCreditStats.stories.js b/.storybook/stories/PortfolioKivaCreditStats.stories.js index 5273e2ce26..fc5e320398 100644 --- a/.storybook/stories/PortfolioKivaCreditStats.stories.js +++ b/.storybook/stories/PortfolioKivaCreditStats.stories.js @@ -1,6 +1,6 @@ -import KvGrid from '~/@kiva/kv-components/vue/KvGrid'; -import KvPageContainer from '~/@kiva/kv-components/vue/KvPageContainer'; -import KivaCreditStats from '@/pages/Portfolio/ImpactDashboard/KivaCreditStats'; +import KvGrid from '@kiva/kv-components/vue/KvGrid'; +import KvPageContainer from '@kiva/kv-components/vue/KvPageContainer'; +import KivaCreditStats from '#src/pages/Portfolio/ImpactDashboard/KivaCreditStats'; import apolloStoryMixin from '../mixins/apollo-story-mixin'; import cookieStoreStoryMixin from '../mixins/cookie-store-story-mixin'; diff --git a/.storybook/stories/PromoCreditBanner.stories.js b/.storybook/stories/PromoCreditBanner.stories.js index ae2eace784..ca04a57167 100644 --- a/.storybook/stories/PromoCreditBanner.stories.js +++ b/.storybook/stories/PromoCreditBanner.stories.js @@ -1,8 +1,8 @@ import Vue from 'vue' -import PromoCreditBanner from '@/components/WwwFrame/PromotionalBanner/Banners/PromoCreditBanner.vue'; +import PromoCreditBanner from '#src/components/WwwFrame/PromotionalBanner/Banners/PromoCreditBanner.vue'; // import plugins -import kivaPlugins from '@/plugins'; +import kivaPlugins from '#src/plugins'; Vue.use(kivaPlugins); export default { diff --git a/.storybook/stories/PromoGridLoanCard.stories.js b/.storybook/stories/PromoGridLoanCard.stories.js index 9022797dc9..0e7c4c4508 100644 --- a/.storybook/stories/PromoGridLoanCard.stories.js +++ b/.storybook/stories/PromoGridLoanCard.stories.js @@ -1,4 +1,4 @@ -import PromoGridLoanCard from '@/components/LoanCards/PromoGridLoanCard'; +import PromoGridLoanCard from '#src/components/LoanCards/PromoGridLoanCard'; const promoCategories = { Women: { url: '/monthlygood?category=women', label: 'women' }, diff --git a/.storybook/stories/RecommendedLoanCard.stories.js b/.storybook/stories/RecommendedLoanCard.stories.js index 9271ac8097..d105691482 100644 --- a/.storybook/stories/RecommendedLoanCard.stories.js +++ b/.storybook/stories/RecommendedLoanCard.stories.js @@ -1,4 +1,4 @@ -import RecommendedLoanCard from '@/components/LoanCards/RecommendedLoanCard'; +import RecommendedLoanCard from '#src/components/LoanCards/RecommendedLoanCard'; import apolloStoryMixin from '../mixins/apollo-story-mixin'; import cookieStoreStoryMixin from '../mixins/cookie-store-story-mixin'; diff --git a/.storybook/stories/SecuritySettings.stories.js b/.storybook/stories/SecuritySettings.stories.js index 2f697415a1..23aa252035 100644 --- a/.storybook/stories/SecuritySettings.stories.js +++ b/.storybook/stories/SecuritySettings.stories.js @@ -1,15 +1,15 @@ import Vue from 'vue' // import plugins -import kivaPlugins from '@/plugins'; +import kivaPlugins from '#src/plugins'; Vue.use(kivaPlugins) import apolloStoryMixin from '../mixins/apollo-story-mixin'; import cookieStoreStoryMixin from '../mixins/cookie-store-story-mixin'; import kvAuth0StoryMixin from '../mixins/kv-auth0-story-mixin'; -import SecuritySettingsPage from '@/pages/Settings/SecuritySettings'; -import TwoStepVerificationPage from '@/pages/Settings/TwoStepVerificationPage'; +import SecuritySettingsPage from '#src/pages/Settings/SecuritySettings'; +import TwoStepVerificationPage from '#src/pages/Settings/TwoStepVerificationPage'; export default { title: 'Page/Security Settings', diff --git a/.storybook/stories/ShareChallenge.stories.js b/.storybook/stories/ShareChallenge.stories.js index 5a660052f8..d45be47aa7 100644 --- a/.storybook/stories/ShareChallenge.stories.js +++ b/.storybook/stories/ShareChallenge.stories.js @@ -1,4 +1,4 @@ -import ShareChallenge from '@/components/Thanks/ShareChallenge'; +import ShareChallenge from '#src/components/Thanks/ShareChallenge'; import apolloStoryMixin from "../mixins/apollo-story-mixin"; export default { diff --git a/.storybook/stories/SocialShare.stories.js b/.storybook/stories/SocialShare.stories.js index 56e9a002f9..948627a01d 100644 --- a/.storybook/stories/SocialShare.stories.js +++ b/.storybook/stories/SocialShare.stories.js @@ -1,4 +1,4 @@ -import SocialShareV2 from '@/components/Checkout/SocialShareV2'; +import SocialShareV2 from '#src/components/Checkout/SocialShareV2'; import mockedReceiptData from '../mock-data/receipt-data-mock'; import apolloStoryMixin from '../mixins/apollo-story-mixin'; diff --git a/.storybook/stories/SupportedByLenders.stories.js b/.storybook/stories/SupportedByLenders.stories.js index 3177a9bdae..ce42e60f86 100644 --- a/.storybook/stories/SupportedByLenders.stories.js +++ b/.storybook/stories/SupportedByLenders.stories.js @@ -1,6 +1,6 @@ -import SupportedByLenders from '@/components/BorrowerProfile/SupportedByLenders'; +import SupportedByLenders from '#src/components/BorrowerProfile/SupportedByLenders'; import activities from '../mock-data/activity-feed-data-mock'; -import KvUserAvatar from '~/@kiva/kv-components/vue/KvUserAvatar'; +import KvUserAvatar from '@kiva/kv-components/vue/KvUserAvatar'; export default { title: 'Components/SupportedByLenders', diff --git a/.storybook/stories/SwashieFace.stories.js b/.storybook/stories/SwashieFace.stories.js index 5def801f0b..e0342b0ca1 100644 --- a/.storybook/stories/SwashieFace.stories.js +++ b/.storybook/stories/SwashieFace.stories.js @@ -1,5 +1,5 @@ -import SwashieFace from '@/components/15Years/SwashieFace'; -import KvProgressCircle from '@/components/Kv/KvProgressCircle' +import SwashieFace from '#src/components/15Years/SwashieFace'; +import KvProgressCircle from '#src/components/Kv/KvProgressCircle' export default { title: 'components/SwashieFace', diff --git a/.storybook/stories/SystemPage.stories.js b/.storybook/stories/SystemPage.stories.js index 3f690db098..81e1be6bc9 100644 --- a/.storybook/stories/SystemPage.stories.js +++ b/.storybook/stories/SystemPage.stories.js @@ -1,4 +1,4 @@ -import SystemPage from '@/components/SystemFrame/SystemPage'; +import SystemPage from '#src/components/SystemFrame/SystemPage'; export default { title: 'SystemFrame/SystemPage', diff --git a/.storybook/stories/ThanksPage.stories.js b/.storybook/stories/ThanksPage.stories.js index ead9b3b6a5..009db0a1c5 100644 --- a/.storybook/stories/ThanksPage.stories.js +++ b/.storybook/stories/ThanksPage.stories.js @@ -1,4 +1,4 @@ -import ThanksPage from '@/pages/Thanks/ThanksPage'; +import ThanksPage from '#src/pages/Thanks/ThanksPage'; import apolloStoryMixin from '../mixins/apollo-story-mixin'; import cookieStoreStoryMixin from '../mixins/cookie-store-story-mixin'; import kvAuth0StoryMixin from '../mixins/kv-auth0-story-mixin'; diff --git a/.storybook/stories/TheFooter.stories.js b/.storybook/stories/TheFooter.stories.js index 988ae1e1b4..9d3c7b8102 100644 --- a/.storybook/stories/TheFooter.stories.js +++ b/.storybook/stories/TheFooter.stories.js @@ -4,10 +4,10 @@ import { wrdFooterTheme, fifteenYearFooterTheme, blueFooter -} from '@/util/siteThemes'; +} from '#src/util/siteThemes'; import apolloStoryMixin from '../mixins/apollo-story-mixin'; import cookieStoreStoryMixin from '../mixins/cookie-store-story-mixin'; -import TheFooter from '@/components/WwwFrame/TheFooter'; +import TheFooter from '#src/components/WwwFrame/TheFooter'; export default { title: 'WwwFrame/TheFooter', diff --git a/.storybook/stories/TheFooterCorporate.stories.js b/.storybook/stories/TheFooterCorporate.stories.js index f3e660f883..23eb0ccf09 100644 --- a/.storybook/stories/TheFooterCorporate.stories.js +++ b/.storybook/stories/TheFooterCorporate.stories.js @@ -4,15 +4,15 @@ import { wrdFooterTheme, fifteenYearFooterTheme, blueFooter -} from '@/util/siteThemes'; -import TheFooterCorporate from '@/components/WwwFrame/TheFooterCorporate'; +} from '#src/util/siteThemes'; +import TheFooterCorporate from '#src/components/WwwFrame/TheFooterCorporate'; export default { title: 'WwwFrame/TheFooterCorporate', component: TheFooterCorporate, args: { theme: null, - corporateLogoUrl: require('@/assets/images/logos/visa.svg'), + corporateLogoUrl: require('#src/assets/images/logos/visa.svg'), }, argTypes: { theme: { diff --git a/.storybook/stories/TheHeader.stories.js b/.storybook/stories/TheHeader.stories.js index 49facb5a41..7182b48319 100644 --- a/.storybook/stories/TheHeader.stories.js +++ b/.storybook/stories/TheHeader.stories.js @@ -3,10 +3,10 @@ import apolloStoryMixin from "../mixins/apollo-story-mixin"; import cookieStoreStoryMixin from "../mixins/cookie-store-story-mixin"; import kvAuth0StoryMixin from "../mixins/kv-auth0-story-mixin"; -import TheHeader from "@/components/WwwFrame/TheHeader"; +import TheHeader from "#src/components/WwwFrame/TheHeader"; // import plugins -import kivaPlugins from "@/plugins"; +import kivaPlugins from "#src/plugins"; Vue.use(kivaPlugins); const loggedIn = { @@ -95,7 +95,7 @@ export default { hideSearchInHeader: false, minimal: false, corporate: false, - corporateLogoUrl: require("@/assets/images/logos/visa.svg"), + corporateLogoUrl: require("#src/assets/images/logos/visa.svg"), }, }; diff --git a/.storybook/stories/TwelveDaysCalendar.stories.js b/.storybook/stories/TwelveDaysCalendar.stories.js index a1023fc1f0..b3c2883d60 100644 --- a/.storybook/stories/TwelveDaysCalendar.stories.js +++ b/.storybook/stories/TwelveDaysCalendar.stories.js @@ -1,4 +1,4 @@ -import TwelveDaysCalendar from '@/pages/Possibility/TwelveDaysCalendar'; +import TwelveDaysCalendar from '#src/pages/Possibility/TwelveDaysCalendar'; export default { title: 'Page/12Days', diff --git a/.storybook/stories/WwwPage.stories.js b/.storybook/stories/WwwPage.stories.js index 5be62aaef4..de71ad21b9 100644 --- a/.storybook/stories/WwwPage.stories.js +++ b/.storybook/stories/WwwPage.stories.js @@ -13,9 +13,9 @@ import { fifteenYearFooterTheme, blueHeader, blueFooter -} from '@/util/siteThemes'; +} from '#src/util/siteThemes'; -import WwwPage from '@/components/WwwFrame/WwwPage'; +import WwwPage from '#src/components/WwwFrame/WwwPage'; export default { title: 'WwwFrame/WwwPage', diff --git a/.storybook/stories/WwwPageCorporate.stories.js b/.storybook/stories/WwwPageCorporate.stories.js index fb3b5f42a1..f80daf4e7c 100644 --- a/.storybook/stories/WwwPageCorporate.stories.js +++ b/.storybook/stories/WwwPageCorporate.stories.js @@ -8,15 +8,15 @@ import { wrdFooterTheme, fifteenYearFooterTheme, blueFooter -} from '@/util/siteThemes'; -import WwwPageCorporate from '@/components/WwwFrame/WwwPageCorporate'; +} from '#src/util/siteThemes'; +import WwwPageCorporate from '#src/components/WwwFrame/WwwPageCorporate'; export default { title: 'WwwFrame/WwwPageCorporate', component: WwwPageCorporate, args: { footerTheme: null, - corporateLogoUrl: require('@/assets/images/logos/visa.svg') + corporateLogoUrl: require('#src/assets/images/logos/visa.svg') }, argTypes: { footerTheme: { diff --git a/.storybook/stories/WwwPageMinimal.stories.js b/.storybook/stories/WwwPageMinimal.stories.js index a948cfa713..aa1f6aa648 100644 --- a/.storybook/stories/WwwPageMinimal.stories.js +++ b/.storybook/stories/WwwPageMinimal.stories.js @@ -12,9 +12,9 @@ import { fifteenYearFooterTheme, blueHeader, blueFooter -} from '@/util/siteThemes'; +} from '#src/util/siteThemes'; -import WwwPageMinimal from '@/components/WwwFrame/WwwPageMinimal'; +import WwwPageMinimal from '#src/components/WwwFrame/WwwPageMinimal'; export default { title: 'WwwFrame/WwwPageMinimal', diff --git a/.storybook/webpack.config.js b/.storybook/webpack.config.js deleted file mode 100644 index df0d76d143..0000000000 --- a/.storybook/webpack.config.js +++ /dev/null @@ -1,54 +0,0 @@ -const kvWebpackConfig = require('../build/webpack.base.conf'); -var SvgStorePlugin = require('webpack-svgstore-plugin'); - -module.exports = async ({ config, mode }) => { - - const newConfig = { - ...config, - devtool: false, - optimization: { - minimize: false, - minimizer: [], - }, - resolve: { - ...config.resolve, - alias: { - ...config.resolve.alias, - ...kvWebpackConfig.resolve.alias - } - }, - module: { - ...config.module, - rules: [ - { - test: /\.stories\.jsx?$/, - loaders: [require.resolve('@storybook/source-loader')], - enforce: 'pre', - }, - { - test: /\.vue$/, - loader: 'vue-docgen-loader', // necessary for storybook prop tables - enforce: 'post', - }, - ...kvWebpackConfig.module.rules, - ] - }, - plugins: [ - ...config.plugins, - // minify and combine svg icons - new SvgStorePlugin({ - svg: { - 'xmlns': 'http://www.w3.org/2000/svg', - 'xmlns:xlink': 'http://www.w3.org/1999/xlink', - 'style': 'display:none;', - }, - svgoOptions: { - floatPrecision: 3, - }, - prefix: 'icon-', - }), - ] - }; - - return newConfig; -}; diff --git a/.stylelintrc b/.stylelintrc index 2bc3f11328..3012f4ded0 100644 --- a/.stylelintrc +++ b/.stylelintrc @@ -1,27 +1,35 @@ { - "plugins": [ "stylelint-scss" ], - "extends": "stylelint-config-standard", - "rules": { - "color-hex-case": null, - "indentation": "tab", - "at-rule-no-unknown": null, - "scss/at-rule-no-unknown": [ - true, - { - "ignoreAtRules": [ - "tailwind", - "apply", - "variants", - "responsive", - "screen" - ] - } + "extends": [ + "stylelint-config-standard-scss", + "stylelint-config-standard-vue/scss" ], - "at-rule-empty-line-before": null, - "no-empty-source": null, - "unit-allowed-list": ["em", "rem", "%", "px", "deg", "vh", "vw", "ms", "s", "fr"], - "selector-pseudo-element-no-unknown": [true, { - "ignorePseudoElements": ["v-deep"] - }] - } + "rules": { + "at-rule-no-unknown": null, + "scss/at-rule-no-unknown": [ + true, + { + "ignoreAtRules": [ + "tailwind", + "apply", + "variants", + "responsive", + "screen" + ] + } + ], + "at-rule-empty-line-before": null, + "no-empty-source": null, + "unit-allowed-list": ["em", "rem", "%", "px", "deg", "vh", "vw", "ms", "s", "fr"], + "keyframes-name-pattern": null, + "scss/dollar-variable-pattern": null, + "selector-class-pattern": null, + "selector-id-pattern": null, + "selector-attribute-quotes": "never", + "scss/at-mixin-argumentless-call-parentheses": "always", + "number-max-precision": null, + "scss/comment-no-empty": null, + "scss/at-extend-no-missing-placeholder": null, + "scss/operator-no-newline-after": null, + "scss/operator-no-unspaced": null + } } diff --git a/babel.config.js b/babel.config.cjs similarity index 100% rename from babel.config.js rename to babel.config.cjs diff --git a/server/.eslintrc.js b/build/.eslintrc.cjs similarity index 52% rename from server/.eslintrc.js rename to build/.eslintrc.cjs index ce922cdd53..40b2f6f113 100644 --- a/server/.eslintrc.js +++ b/build/.eslintrc.cjs @@ -1,5 +1,6 @@ module.exports = { rules: { 'no-console': 'off', + 'import/extensions': [2, 'ignorePackages'], } -} +}; diff --git a/build/assets-path.js b/build/assets-path.js index e3bec88295..108fa145a9 100644 --- a/build/assets-path.js +++ b/build/assets-path.js @@ -1,6 +1,6 @@ -var path = require('path'); -var config = require('../config'); +import path from 'path'; +import { build } from '../config/index.js'; -module.exports = function (_path) { - return path.posix.join(config.build.assetsSubDirectory, _path) -}; +export default function assetsPath(_path) { + return path.posix.join(build.assetsSubDirectory, _path); +} diff --git a/build/build.js b/build/build.js deleted file mode 100644 index e3d6b16ac1..0000000000 --- a/build/build.js +++ /dev/null @@ -1,33 +0,0 @@ -require('./check-versions')() - -process.env.NODE_ENV = 'production' - -var ora = require('ora') -var rm = require('rimraf') -// var path = require('path') -var chalk = require('chalk') -var webpack = require('webpack') -var config = require('../config') -var webpackClientConfig = require('./webpack.client.prod.conf') -var webpackServerConfig = require('./webpack.server.conf') - -var spinner = ora('building for production...') -spinner.start() - -//path.join(config.build.assetsRoot, config.build.assetsSubDirectory) -rm(config.build.assetsRoot, err => { - if (err) throw err - webpack([webpackClientConfig, webpackServerConfig], function (err, stats) { - spinner.stop() - if (err) throw err - process.stdout.write(stats.toString({ - colors: true, - modules: false, - children: false, - chunks: false, - chunkModules: false - }) + '\n\n') - - console.log(chalk.cyan(' Build complete.\n')) - }) -}) diff --git a/build/build.report.js b/build/build.report.js deleted file mode 100644 index 0325fde640..0000000000 --- a/build/build.report.js +++ /dev/null @@ -1,27 +0,0 @@ -require('./check-versions')() - -process.env.NODE_ENV = 'production' - -var ora = require('ora') -var rm = require('rimraf') -var chalk = require('chalk') -var webpack = require('webpack') -var config = require('../config') -var webpackClientConfig = require('./webpack.client.report.conf') - -var spinner = ora('building for production...') -spinner.start() - -rm(config.build.assetsRoot, err => { - if (err) throw err - // NOTE this only runs on the client config - webpack([webpackClientConfig], function (err, stats) { - spinner.stop() - if (err) throw err - process.stdout.write(stats.toString({ - colors: true - }) + '\n\n') - - console.log(chalk.cyan(' Build complete.\n')) - }) -}) diff --git a/build/check-versions.js b/build/check-versions.js deleted file mode 100644 index 49a3119bc1..0000000000 --- a/build/check-versions.js +++ /dev/null @@ -1,48 +0,0 @@ -var chalk = require('chalk') -var semver = require('semver') -var packageConfig = require('../package.json') -var shell = require('shelljs') -function exec (cmd) { - return require('child_process').execSync(cmd).toString().trim() -} - -var versionRequirements = [ - { - name: 'node', - currentVersion: semver.clean(process.version), - versionRequirement: packageConfig.engines.node - }, -] - -if (shell.which('npm')) { - versionRequirements.push({ - name: 'npm', - currentVersion: exec('npm --version'), - versionRequirement: packageConfig.engines.npm - }) -} - -module.exports = function () { - var warnings = [] - for (var i = 0; i < versionRequirements.length; i++) { - var mod = versionRequirements[i] - if (!semver.satisfies(mod.currentVersion, mod.versionRequirement)) { - warnings.push(mod.name + ': ' + - chalk.red(mod.currentVersion) + ' should be ' + - chalk.green(mod.versionRequirement) - ) - } - } - - if (warnings.length) { - console.log('') - console.log(chalk.yellow('To use this template, you must update following to modules:')) - console.log() - for (var i = 0; i < warnings.length; i++) { - var warning = warnings[i] - console.log(' ' + warning) - } - console.log() - process.exit(1) - } -} diff --git a/build/fetch-schema.js b/build/fetch-schema.js index 6ff348d9ff..fb8a8ea97f 100644 --- a/build/fetch-schema.js +++ b/build/fetch-schema.js @@ -1,9 +1,16 @@ -const { join } = require('path'); -const { readFile, writeFile } = require('fs'); -const { extendSchema, parse, printSchema } = require('graphql'); -const getRemoteGqlSchema = require('../server/util/getRemoteGqlSchema'); -const argv = require('minimist')(process.argv.slice(2)); -const config = require('../config/selectConfig')(argv.config); +import { join, dirname } from 'path'; +import { fileURLToPath } from 'url'; +import { readFile, writeFile } from 'fs'; +import { extendSchema, parse, printSchema } from 'graphql'; +import minimist from 'minimist'; +import getRemoteGqlSchema from '../server/util/getRemoteGqlSchema.js'; +import selectConfig from '../config/selectConfig.js'; + +const argv = minimist(process.argv.slice(2)); +const config = await selectConfig(argv.config); + +// eslint-disable-next-line no-underscore-dangle +const __dirname = dirname(fileURLToPath(import.meta.url)); // Return an AST made from local schema function getLocalAST(schemaPath) { diff --git a/build/no-op.js b/build/no-op.js index 37d7332f73..2d1ec23827 100644 --- a/build/no-op.js +++ b/build/no-op.js @@ -1 +1 @@ -module.exports = function () {} +export default () => {}; diff --git a/build/promise.js b/build/promise.js index 11cfee0700..4b598d2709 100644 --- a/build/promise.js +++ b/build/promise.js @@ -1,2 +1 @@ -// Export native Promise -module.exports = typeof window !== 'undefined' && window.Promise || Promise; +export default (typeof window !== 'undefined' && window.Promise) ?? Promise; diff --git a/build/template-string-loader.js b/build/template-string-loader.js index e489de1d8f..00ab646734 100644 --- a/build/template-string-loader.js +++ b/build/template-string-loader.js @@ -3,11 +3,13 @@ * Based on https://github.com/bradbenvenuti/template-string-loader * TODO: switch to using html-loader once v1 is released */ -var htmlMinifier = require('html-minifier'); +import * as htmlMinifier from 'html-minifier'; -module.exports = function(content) { - this.cacheable && this.cacheable(); - content = htmlMinifier.minify(content, { +export default function templateStringLoader(content) { + if (typeof this.cacheable === 'function') { + this.cacheable(); + } + const minifiedContent = htmlMinifier.minify(content, { removeComments: true, removeCommentsFromCDATA: true, removeCDATASectionsFromCDATA: true, @@ -18,5 +20,5 @@ module.exports = function(content) { removeScriptTypeAttributes: true, removeStyleTypeAttributes: true, }); - return 'module.exports = function (context) { with(context) { return `' + content + '`; } };'; + return `module.exports = function (context) { with(context) { return \`${minifiedContent}\`; } };`; } diff --git a/build/webpack.base.conf.js b/build/webpack.base.conf.js deleted file mode 100644 index 340bdd39df..0000000000 --- a/build/webpack.base.conf.js +++ /dev/null @@ -1,335 +0,0 @@ -const path = require('path'); -const assetsPath = require('./assets-path'); -const config = require('../config'); -const VueLoaderPlugin = require('vue-loader').VueLoaderPlugin; -const MiniCssExtractPlugin = require('mini-css-extract-plugin'); -const FilterWarningsPlugin = require('webpack-filter-warnings-plugin'); -const webpack = require('webpack'); -const GitRevisionPlugin = require('git-revision-webpack-plugin'); -const HardSourceWebpackPlugin = require('hard-source-webpack-plugin-fixed-hashbug'); -const gitRevisionPlugin = new GitRevisionPlugin({ - branch: true, - lightweightTags: true, -}); - -const isProd = process.env.NODE_ENV === 'production'; -const isNode = typeof document === 'undefined'; - -function resolve (dir) { - return path.join(__dirname, '..', dir); -} - -// When webpack encounters an .SVG in one of these directories, it will inline it as a vue component using vue-svg-loader -const inlineSvgDirs = [ - resolve('src/assets/icons/inline/'), - resolve('src/assets/inline-svgs/'), - resolve('node_modules/flag-icon-css/flags/4x3/'), - resolve('node_modules/flag-icon-css/flags/1x1/') -]; - -module.exports = { - mode: 'none', - output: { - path: config.build.assetsRoot, - // This Pushes JS Files to the /js sub-folder inside /static - filename: assetsPath('js/[name].[hash].js'), - chunkFilename: assetsPath('js/[name].[chunkhash].js'), - publicPath: '/', - }, - resolve: { - extensions: ['.mjs', '.js', '.vue', '.json'], - alias: { - '~': resolve('node_modules'), - '@': resolve('src'), - 'foundation': 'foundation-sites/js', - // alias promise module to handle timesync calling require('promise') - 'promise': resolve('build/promise.js'), - // required for src/components/Contentful/DynamicRichText.vue - 'vue$': 'vue/dist/vue.esm.js' - } - }, - module: { - rules: [ - { - test: /\.vue$/, - loader: 'vue-loader', - options: { - transformAssetUrls: { - video: 'src', - source: 'src', - img: 'src', - image: 'xlink:href' - } - } - }, - { - test: /(manifest\.webmanifest|manifest\.json|browserconfig\.xml)$/, - use: [ - { - loader: "file-loader", - options: { - name: assetsPath('manifest/[name].[hash:7].[ext]'), - } - }, - { - loader: "app-manifest-loader", - } - ], - }, - { - test: /\.css$/, - exclude: [resolve('src/assets/scss/tailwind')], - use: [ - { loader: 'thread-loader' }, - { loader: 'vue-style-loader' }, // Inject styles as diff --git a/src/api/Auth0Link.js b/src/api/Auth0Link.js index a72594bddd..28764de555 100644 --- a/src/api/Auth0Link.js +++ b/src/api/Auth0Link.js @@ -1,4 +1,4 @@ -import { setContext } from '@apollo/client/link/context'; +import { setContext } from '@apollo/client/link/context/index'; // Add the user info to the context and add the access token to the authorization header function getAuthContext(context, user, token) { diff --git a/src/api/BasketLink.js b/src/api/BasketLink.js index e2966d0efc..c015331582 100644 --- a/src/api/BasketLink.js +++ b/src/api/BasketLink.js @@ -1,6 +1,6 @@ import _get from 'lodash/get'; import _set from 'lodash/set'; -import { ApolloLink } from '@apollo/client/core'; +import { ApolloLink } from '@apollo/client/core/index'; export default ({ cookieStore }) => { return new ApolloLink((operation, forward) => { diff --git a/src/api/ContentfulPreviewLink.js b/src/api/ContentfulPreviewLink.js index 329023bc71..1ad3c218cd 100644 --- a/src/api/ContentfulPreviewLink.js +++ b/src/api/ContentfulPreviewLink.js @@ -1,4 +1,4 @@ -import { ApolloLink } from '@apollo/client/core'; +import { ApolloLink } from '@apollo/client/core/index'; export default ({ cookieStore }) => { return new ApolloLink((operation, forward) => { diff --git a/src/api/ExperimentIdLink.js b/src/api/ExperimentIdLink.js index 7589472827..1e78e0ed24 100644 --- a/src/api/ExperimentIdLink.js +++ b/src/api/ExperimentIdLink.js @@ -1,6 +1,6 @@ -import { setContext } from '@apollo/client/link/context'; -import experimentVersionFragment from '@/graphql/fragments/experimentVersion.graphql'; -// import { UIAB_COOKIE_NAME } from '@/util/experiment/experimentUtils'; +import { setContext } from '@apollo/client/link/context/index'; +import experimentVersionFragment from '#src/graphql/fragments/experimentVersion.graphql'; +// import { UIAB_COOKIE_NAME } from '#src/util/experiment/experimentUtils'; // Experiment assignments that will be passed in the X-Experiment Header const targetIds = [ diff --git a/src/api/HttpLink.js b/src/api/HttpLink.js index 897b2b47ce..202a2d6a37 100644 --- a/src/api/HttpLink.js +++ b/src/api/HttpLink.js @@ -1,5 +1,5 @@ -import { BatchHttpLink } from '@apollo/client/link/batch-http'; -import { HttpLink } from '@apollo/client/link/http'; +import { BatchHttpLink } from '@apollo/client/link/batch-http/index'; +import { HttpLink } from '@apollo/client/link/http/index'; export default ({ uri = '', diff --git a/src/api/NetworkErrorLoggingLink.js b/src/api/NetworkErrorLoggingLink.js index 73889d1a6b..3b421b1f24 100644 --- a/src/api/NetworkErrorLoggingLink.js +++ b/src/api/NetworkErrorLoggingLink.js @@ -1,5 +1,5 @@ -import { onError } from '@apollo/client/link/error'; -import logFormatter from '@/util/logFormatter'; +import { onError } from '@apollo/client/link/error/index'; +import logFormatter from '#src/util/logFormatter'; export default () => { return onError(({ diff --git a/src/api/NetworkErrorRetryLink.js b/src/api/NetworkErrorRetryLink.js index 18b8c4f69f..afe656fdf3 100644 --- a/src/api/NetworkErrorRetryLink.js +++ b/src/api/NetworkErrorRetryLink.js @@ -1,4 +1,4 @@ -import { RetryLink } from '@apollo/client/link/retry'; +import { RetryLink } from '@apollo/client/link/retry/index'; export default ({ activateRetry = false, diff --git a/src/api/SnowplowSessionLink.js b/src/api/SnowplowSessionLink.js index 6ca4367399..d7d525ac21 100644 --- a/src/api/SnowplowSessionLink.js +++ b/src/api/SnowplowSessionLink.js @@ -1,4 +1,4 @@ -import { setContext } from '@apollo/client/link/context'; +import { setContext } from '@apollo/client/link/context/index'; import _set from 'lodash/set'; function getSPCookieSession(cookieStore) { diff --git a/src/api/apollo.js b/src/api/apollo.js index 7c723742ef..ffbaba6d33 100644 --- a/src/api/apollo.js +++ b/src/api/apollo.js @@ -1,4 +1,4 @@ -import { ApolloLink, ApolloClient, InMemoryCache } from '@apollo/client/core'; +import { ApolloLink, ApolloClient, InMemoryCache } from '@apollo/client/core/index'; import Auth0LinkCreator from './Auth0Link'; import BasketLinkCreator from './BasketLink'; import ContentfulPreviewLink from './ContentfulPreviewLink'; diff --git a/src/api/localResolvers/activeLoan.js b/src/api/localResolvers/activeLoan.js index 342761987d..d0810da863 100644 --- a/src/api/localResolvers/activeLoan.js +++ b/src/api/localResolvers/activeLoan.js @@ -1,4 +1,4 @@ -import query from '@/graphql/query/activeLoanClient.graphql'; +import query from '#src/graphql/query/activeLoanClient.graphql'; /* * Active loan resolvers diff --git a/src/api/localResolvers/addToBasketInterstitial.js b/src/api/localResolvers/addToBasketInterstitial.js index 78e3cfaaa5..91c1546fc6 100644 --- a/src/api/localResolvers/addToBasketInterstitial.js +++ b/src/api/localResolvers/addToBasketInterstitial.js @@ -1,4 +1,4 @@ -import query from '@/graphql/query/basketAddInterstitialClient.graphql'; +import query from '#src/graphql/query/basketAddInterstitialClient.graphql'; /* * Add to Basket Interstitial resolvers */ diff --git a/src/api/localResolvers/autolending.js b/src/api/localResolvers/autolending.js index 283fc6e36e..c0195fd89a 100644 --- a/src/api/localResolvers/autolending.js +++ b/src/api/localResolvers/autolending.js @@ -1,20 +1,19 @@ -/* eslint-disable no-underscore-dangle */ import _get from 'lodash/get'; import _mergeWith from 'lodash/mergeWith'; -import logFormatter from '@/util/logFormatter'; -import bothProfilesQuery from '@/graphql/query/autolending/bothProfiles.graphql'; -import loanCountQuery from '@/graphql/query/loanCount.graphql'; -import serverProfileQuery from '@/graphql/query/autolending/profileFromServer.graphql'; -import updateServerProfile from '@/graphql/mutation/autolending/updateServerProfile.graphql'; +import logFormatter from '#src/util/logFormatter'; +import bothProfilesQuery from '#src/graphql/query/autolending/bothProfiles.graphql'; +import loanCountQuery from '#src/graphql/query/loanCount.graphql'; +import serverProfileQuery from '#src/graphql/query/autolending/profileFromServer.graphql'; +import updateServerProfile from '#src/graphql/mutation/autolending/updateServerProfile.graphql'; import AutolendProfile, { getCacheableProfile, getInputProfile, profilesAreEqual, -} from '@/api/fixtures/AutolendProfile'; +} from '#src/api/fixtures/AutolendProfile'; import LoanSearchCriteria, { criteriaAreEqual, getSearchableCriteria, -} from '@/api/fixtures/LoanSearchCriteria'; +} from '#src/api/fixtures/LoanSearchCriteria'; // Helper function for writing autolending data to the cache function writeAutolendingData(cache, { currentProfile, savedProfile, ...fields }) { diff --git a/src/api/localResolvers/experiment.js b/src/api/localResolvers/experiment.js index 4930e91594..b625d04151 100644 --- a/src/api/localResolvers/experiment.js +++ b/src/api/localResolvers/experiment.js @@ -7,9 +7,9 @@ import { getLoginId, getCookieAssignments, setCookieAssignments, -} from '@/util/experiment/experimentUtils'; -import Experiment from '@/api/fixtures/Experiment'; -import logFormatter from '@/util/logFormatter'; +} from '#src/util/experiment/experimentUtils'; +import Experiment from '#src/api/fixtures/Experiment'; +import logFormatter from '#src/util/logFormatter'; /** * Local resolvers for experiment assignment diff --git a/src/api/localResolvers/loan.js b/src/api/localResolvers/loan.js index 096d8b1c9d..c7a033875e 100644 --- a/src/api/localResolvers/loan.js +++ b/src/api/localResolvers/loan.js @@ -6,8 +6,8 @@ import { differenceInMilliseconds, } from 'date-fns'; import numeral from 'numeral'; -import logFormatter from '@/util/logFormatter'; -import getLoanUse from '@/util/loanUse'; +import logFormatter from '#src/util/logFormatter'; +import getLoanUse from '#src/util/loanUse'; // Return true if the given loan object is missing the given field. // Logs an error to the console if the field is missing. diff --git a/src/api/localResolvers/loanSearch.js b/src/api/localResolvers/loanSearch.js index 374710528e..6258cee3d2 100644 --- a/src/api/localResolvers/loanSearch.js +++ b/src/api/localResolvers/loanSearch.js @@ -1,4 +1,4 @@ -import loanSearchStateQuery from '@/graphql/query/loanSearchState.graphql'; +import loanSearchStateQuery from '#src/graphql/query/loanSearchState.graphql'; // eslint-disable-next-line no-underscore-dangle const __typename = 'LoanSearchState'; diff --git a/src/api/localResolvers/my.js b/src/api/localResolvers/my.js index 04b8edc5d6..a61cae4c9e 100644 --- a/src/api/localResolvers/my.js +++ b/src/api/localResolvers/my.js @@ -1,4 +1,4 @@ -import hasEverLoggedInQuery from '@/graphql/query/shared/hasEverLoggedIn.graphql'; +import hasEverLoggedInQuery from '#src/graphql/query/shared/hasEverLoggedIn.graphql'; export default ({ cookieStore, kvAuth0 }) => { return { diff --git a/src/api/localResolvers/tipMessage.js b/src/api/localResolvers/tipMessage.js index dd5327e471..9c12601f7f 100644 --- a/src/api/localResolvers/tipMessage.js +++ b/src/api/localResolvers/tipMessage.js @@ -1,4 +1,4 @@ -import tipMessageDataQuery from '@/graphql/query/tipMessage/tipMessageData.graphql'; +import tipMessageDataQuery from '#src/graphql/query/tipMessage/tipMessageData.graphql'; /* * TipMessage resolvers diff --git a/src/api/localResolvers/usingTouch.js b/src/api/localResolvers/usingTouch.js index 9c87e56e23..67c65ff477 100644 --- a/src/api/localResolvers/usingTouch.js +++ b/src/api/localResolvers/usingTouch.js @@ -1,4 +1,4 @@ -import query from '@/graphql/query/shared/usingTouchClient.graphql'; +import query from '#src/graphql/query/shared/usingTouchClient.graphql'; /* * UsingTouch resolvers */ diff --git a/src/api/localResolvers/verificationLightbox.js b/src/api/localResolvers/verificationLightbox.js index bd955b6217..df12a76144 100644 --- a/src/api/localResolvers/verificationLightbox.js +++ b/src/api/localResolvers/verificationLightbox.js @@ -1,4 +1,4 @@ -import { gql } from '@apollo/client'; +import { gql } from '@apollo/client/index'; /* * VerificationLightbox resolvers diff --git a/src/api/localState.js b/src/api/localState.js index 063a6f3cb4..f833f4ffcc 100644 --- a/src/api/localState.js +++ b/src/api/localState.js @@ -1,20 +1,20 @@ import _merge from 'lodash/merge'; // require each local state resolver -const requireLocalResolver = require.context('./localResolvers', true, /\.js$/); +const requireLocalResolver = import.meta.glob('./localResolvers/*.js', { eager: true }); const initState = options => { // init each resolver with the given options and merge all the results together - return requireLocalResolver.keys().reduce((result, key) => { - const module = requireLocalResolver(key).default; + return Object.keys(requireLocalResolver).reduce((result, key) => { + const module = requireLocalResolver[key].default; return _merge(result, module(options)); }, {}); }; const setLocalState = (options, cache) => { // Call defaults function for each local resolver - return requireLocalResolver.keys().forEach(value => { - const module = requireLocalResolver(value).default; + return Object.keys(requireLocalResolver).forEach(key => { + const module = requireLocalResolver[key].default; const { defaults } = module(options); if (defaults) { defaults(cache); diff --git a/src/assets/iconLoader.js b/src/assets/iconLoader.js deleted file mode 100644 index 16a43a226b..0000000000 --- a/src/assets/iconLoader.js +++ /dev/null @@ -1,6 +0,0 @@ -import svgXhr from 'webpack-svgstore-plugin/src/helpers/svgxhr'; - -// inject svg icons as a sprite sheet -// eslint-disable-next-line no-underscore-dangle -const __svgsprite__ = { path: './icons/sprite/*.svg', name: './static/icons.[hash].svg' }; -svgXhr(__svgsprite__); diff --git a/src/assets/scss/_math.scss b/src/assets/scss/_math.scss index f244f20849..8c95d845b0 100644 --- a/src/assets/scss/_math.scss +++ b/src/assets/scss/_math.scss @@ -2,6 +2,7 @@ Numerical methods for Power, Factorial, Pi, Sine, Cosine and Tangent from "TRIGONOMETRY IN SASS" by Daniel Perez Alvarez (https://unindented.org/articles/trigonometry-in-sass/) */ +@use 'sass:math'; @function pow($number, $exp) { $value: 1; @@ -9,8 +10,7 @@ @for $i from 1 through $exp { $value: $value * $number; } - } - @else if $exp < 0 { + } @else if $exp < 0 { @for $i from 1 through -$exp { $value: $value / $number; } @@ -33,8 +33,9 @@ } @function rad($angle) { - $unit: unit($angle); + $unit: math.unit($angle); $unitless: $angle / ($angle * 0 + 1); + // If the angle has 'deg' as unit, convert to radians. @if $unit == deg { $unitless: $unitless / 180 * pi(); @@ -45,6 +46,7 @@ @function sin($angle) { $sin: 0; $angle: rad($angle); + // Iterate a bunch of times. @for $i from 0 through 10 { $sin: $sin + pow(-1, $i) * pow($angle, (2 * $i + 1)) / fact(2 * $i + 1); @@ -55,6 +57,7 @@ @function cos($angle) { $cos: 0; $angle: rad($angle); + // Iterate a bunch of times. @for $i from 0 through 10 { $cos: $cos + pow(-1, $i) * pow($angle, 2 * $i) / fact(2 * $i); diff --git a/src/assets/scss/_settings.scss b/src/assets/scss/_settings.scss index 919797d405..489f70e544 100644 --- a/src/assets/scss/_settings.scss +++ b/src/assets/scss/_settings.scss @@ -61,7 +61,9 @@ // 56. Xy Grid // 57. Navbar -@import 'node_modules/foundation-sites/scss/util/util.scss'; +@use 'sass:color'; +@use 'sass:math'; +@import 'node_modules/foundation-sites/scss/util/util'; // 1. Global // --------- @@ -134,14 +136,13 @@ $kiva-glyph-grey-primary: $magnemite; $kiva-glyph-primary-black: $umbreon; // social media icon colors -$facebook-hover-color: #3b5998; -$pinterest-hover-color: #bd081c; -$twitter-hover-color: #55acee; -$yelp-hover-color: #bd081c; -$youtube-hover-color: #cd201f; -$linkedin-hover-color: #0077b5; -$instagram-hover-color: #0a0b09; - +$facebook-hover-color: #3b5998; +$pinterest-hover-color: #bd081c; +$twitter-hover-color: #55acee; +$yelp-hover-color: #bd081c; +$youtube-hover-color: #cd201f; +$linkedin-hover-color: #0077b5; +$instagram-hover-color: #0a0b09; $foundation-palette: ( primary: $blue, secondary: $white, @@ -149,9 +150,9 @@ $foundation-palette: ( warning: $vivid-yellow, alert: $red, ); -@include add-foundation-colors; -$print-hrefs: true; +@include add-foundation-colors (); +$print-hrefs: true; $body-background: $white; $body-font-color: $kiva-text-dark; $body-font-family: 'PostGrotesk', 'Arial', 'Helvetica', sans-serif; @@ -211,30 +212,30 @@ $header-lineheight: 1.4; $header-margin-bottom: 0.5rem; $header-styles: ( small: ( - 'h1': ('font-size': rem-calc(28), 'line-height': rem-calc(36) / rem-calc(28)), - 'h2': ('font-size': rem-calc(22), 'line-height': rem-calc(30) / rem-calc(22)), + 'h1': ('font-size': rem-calc(28), 'line-height': math.div(rem-calc(36), rem-calc(28))), + 'h2': ('font-size': rem-calc(22), 'line-height': math.div(rem-calc(30), rem-calc(22))), 'h3': ('font-size': rem-calc(18)), 'h4': ('font-size': rem-calc(16)), ), medium: ( - 'h1': ('font-size': rem-calc(30), 'line-height': rem-calc(38) / rem-calc(30)), - 'h2': ('font-size': rem-calc(28), 'line-height': rem-calc(36) / rem-calc(28)), + 'h1': ('font-size': rem-calc(30), 'line-height': math.div(rem-calc(38), rem-calc(30))), + 'h2': ('font-size': rem-calc(28), 'line-height': math.div(rem-calc(36), rem-calc(28))), 'h3': ('font-size': rem-calc(18)), 'h4': ('font-size': rem-calc(16)), ), large: ( - 'h1': ('font-size': rem-calc(36), 'line-height': rem-calc(44) / rem-calc(36)), - 'h2': ('font-size': rem-calc(28), 'line-height': rem-calc(36) / rem-calc(28)), + 'h1': ('font-size': rem-calc(36), 'line-height': math.div(rem-calc(44), rem-calc(36))), + 'h2': ('font-size': rem-calc(28), 'line-height': math.div(rem-calc(36), rem-calc(28))), 'h3': ('font-size': rem-calc(18)), 'h4': ('font-size': rem-calc(16)), ), ); -$header-text-rendering: optimizeLegibility; +$header-text-rendering: optimizelegibility; $small-font-size: 80%; $header-small-font-color: $medium-gray; $paragraph-lineheight: 1.75; // 1.75rem; $paragraph-margin-bottom: 1rem; -$paragraph-text-rendering: optimizeLegibility; +$paragraph-text-rendering: optimizelegibility; $anchor-color: $kiva-textlink; $anchor-color-hover: $kiva-textlink-hover; $anchor-text-decoration: none; @@ -259,24 +260,18 @@ $normal-text-font-size: 1rem; // because the global "100% isn't useful for all $small-text-font-size: 0.875rem; $small-text-line-height: 1.357rem; - $medium-text-font-size: 1.25rem; $medium-text-line-height: 1.35; - $featured-text-font-size: 1.5rem; $featured-text-line-height: 2.25rem; - $large-text-font-size: 2.25rem; $large-text-line-height: 1.222222; - $big-text-font-size: rem-calc(28); $big-text-line-height: rem-calc(36); - $impact-text-font-size: rem-calc(32); $impact-text-line-height: rem-calc(40); $impact-text-font-size-medium: rem-calc(44); $impact-text-line-height-medium: rem-calc(50); - $huge-headline-font-size: rem-calc(52); $huge-headline-line-height: rem-calc(58); $huge-headline-font-size-medium: rem-calc(64); @@ -445,6 +440,7 @@ $breadcrumbs-item-uppercase: true; $breadcrumbs-item-separator: true; $breadcrumbs-item-separator-item: '\002F'; $breadcrumbs-item-separator-item-rtl: '\005C'; + // The following values are from the 6.5.1 release of foundation-sites we may want a different divider... // $breadcrumbs-item-separator-item: '/'; // $breadcrumbs-item-separator-item-rtl: '\\'; @@ -699,7 +695,7 @@ $input-background-focus: $white; $input-background-disabled: $light-gray; $input-border: 1px solid $light-gray; $input-border-focus: 1px solid $gray; -$input-padding: $form-spacing / 2; +$input-padding: math.div($form-spacing, 2); $input-shadow: inset 0 1px 2px rgba($black, 0.1); $input-shadow-focus: 0 0 5px $medium-gray; $input-cursor-disabled: not-allowed; @@ -927,8 +923,8 @@ $prototype-separator-margin-top: $global-margin; // -------------------- $prototype-shadow-breakpoints: $global-prototype-breakpoints; -$prototype-box-shadow: 0 2px 5px 0 rgba(0, 0, 0, 0.16), - 0 2px 10px 0 rgba(0, 0, 0, 0.12); +$prototype-box-shadow: 0 2px 5px 0 rgb(0 0 0 / 16%), + 0 2px 10px 0 rgb(0 0 0 / 12%); // 41. Prototype Sizing // -------------------- @@ -1036,15 +1032,15 @@ $table-color-scale: 5%; $table-border: 1px solid smart-scale($table-background, $table-color-scale); $table-padding: rem-calc(8 10 10); $table-hover-scale: 2%; -$table-row-hover: darken($table-background, $table-hover-scale); -$table-row-stripe-hover: darken($table-background, $table-color-scale + $table-hover-scale); +$table-row-hover: color.adjust($table-background, $lightness: -$table-hover-scale); +$table-row-stripe-hover: color.adjust($table-background, $lightness: -($table-color-scale + $table-hover-scale)); $table-is-striped: true; $table-striped-background: smart-scale($table-background, $table-color-scale); $table-stripe: even; -$table-head-background: smart-scale($table-background, $table-color-scale / 2); -$table-head-row-hover: darken($table-head-background, $table-hover-scale); +$table-head-background: smart-scale($table-background, math.div($table-color-scale, 2)); +$table-head-row-hover: color.adjust($table-head-background, $lightness: -$table-hover-scale); $table-foot-background: smart-scale($table-background, $table-color-scale); -$table-foot-row-hover: darken($table-foot-background, $table-hover-scale); +$table-foot-row-hover: color.adjust($table-foot-background, $lightness: -$table-hover-scale); $table-head-font-color: $body-font-color; $table-foot-font-color: $body-font-color; $show-header-for-stacked: false; @@ -1131,4 +1127,4 @@ $xy-block-grid-max: 8; // 57. Xy Grid // ----------- -$navbar-shadow: 0 0 0.5rem 0 rgba(0, 0, 0, 0.15); +$navbar-shadow: 0 0 0.5rem 0 rgb(0 0 0 / 15%); diff --git a/src/assets/scss/app.scss b/src/assets/scss/app.scss index 625a684a13..97b7ecca57 100644 --- a/src/assets/scss/app.scss +++ b/src/assets/scss/app.scss @@ -1,13 +1,14 @@ // import all the variables @import 'settings'; -@import 'foundation'; +@import 'node_modules/foundation-sites/scss/foundation'; // import global foundation components -@include foundation-flex-classes; -@include foundation-flex-grid; -@include foundation-visibility-classes; +@include foundation-flex-classes (); +@include foundation-flex-grid (); +@include foundation-visibility-classes (); // import global styles +/* stylelint-disable no-invalid-position-at-import-rule */ @import 'global/fonts'; @import 'global/page-layout'; @import 'global/line-breaks'; diff --git a/src/assets/scss/components/15-years/15-years.scss b/src/assets/scss/components/15-years/15-years.scss index ffaba4048a..1241760bfd 100644 --- a/src/assets/scss/components/15-years/15-years.scss +++ b/src/assets/scss/components/15-years/15-years.scss @@ -84,10 +84,12 @@ $offwhite: #F8F8F8; text-decoration: underline; color: $twilight; + // white-space: nowrap; &:hover { text-decoration: none; + // background-color: $twilight; // color: $offwhite; cursor: pointer; diff --git a/src/assets/scss/components/loan-cards/hover-loan-card.scss b/src/assets/scss/components/loan-cards/hover-loan-card.scss index e5d03abef6..29115213e3 100644 --- a/src/assets/scss/components/loan-cards/hover-loan-card.scss +++ b/src/assets/scss/components/loan-cards/hover-loan-card.scss @@ -1,4 +1,4 @@ -@import 'settings'; +@import '#src/assets/scss/settings'; // Reference $small-default-hover-image-width: rem-calc(480); diff --git a/src/assets/scss/global/drop-in.scss b/src/assets/scss/global/drop-in.scss index 4f6fce102c..cb1f92f3a6 100644 --- a/src/assets/scss/global/drop-in.scss +++ b/src/assets/scss/global/drop-in.scss @@ -1,4 +1,4 @@ -@import 'settings'; +@import '#src/assets/scss/settings'; // Global styles related to the braintree drop-in payment wrappers. diff --git a/src/assets/scss/global/fonts.scss b/src/assets/scss/global/fonts.scss index 2d43aeac92..a02d442760 100644 --- a/src/assets/scss/global/fonts.scss +++ b/src/assets/scss/global/fonts.scss @@ -1,31 +1,31 @@ @font-face { - font-family: "PostGrotesk"; + font-family: PostGrotesk; font-weight: 400; font-style: normal; font-display: swap; - src: url("~@/assets/fonts/PostGrotesk-Medium.woff2") format('woff2'); + src: url("#src/assets/fonts/PostGrotesk-Medium.woff2") format('woff2'); } @font-face { - font-family: "PostGrotesk"; + font-family: PostGrotesk; font-weight: 400; font-style: italic; font-display: swap; - src: url("~@/assets/fonts/PostGrotesk-MediumItalic.woff2") format('woff2'); + src: url("#src/assets/fonts/PostGrotesk-MediumItalic.woff2") format('woff2'); } @font-face { - font-family: "PostGrotesk"; + font-family: PostGrotesk; font-weight: 300; font-style: normal; font-display: swap; - src: url("~@/assets/fonts/PostGrotesk-Book.woff2") format('woff2'); + src: url("#src/assets/fonts/PostGrotesk-Book.woff2") format('woff2'); } @font-face { - font-family: "PostGrotesk"; + font-family: PostGrotesk; font-weight: 300; font-style: italic; font-display: swap; - src: url("~@/assets/fonts/PostGrotesk-BookItalic.woff2") format('woff2'); + src: url("#src/assets/fonts/PostGrotesk-BookItalic.woff2") format('woff2'); } diff --git a/src/assets/scss/global/forms.scss b/src/assets/scss/global/forms.scss index f39ef66dcc..3fa69e16e9 100644 --- a/src/assets/scss/global/forms.scss +++ b/src/assets/scss/global/forms.scss @@ -1,4 +1,4 @@ -@import "settings"; +@import "#src/assets/scss/settings"; // Form validation label.error { diff --git a/src/assets/scss/global/line-breaks.scss b/src/assets/scss/global/line-breaks.scss index 46a144257c..c16493407d 100644 --- a/src/assets/scss/global/line-breaks.scss +++ b/src/assets/scss/global/line-breaks.scss @@ -1,4 +1,4 @@ -@import 'settings'; +@import '#src/assets/scss/settings'; // screen-width-specific line breaks br.so, diff --git a/src/assets/scss/global/print.scss b/src/assets/scss/global/print.scss index 5f16503881..19671565ae 100644 --- a/src/assets/scss/global/print.scss +++ b/src/assets/scss/global/print.scss @@ -1,7 +1,6 @@ @media print { * { // Remove all css transitions - -webkit-transition: none !important; transition: none !important; } diff --git a/src/client-entry.js b/src/client-entry.js old mode 100755 new mode 100644 index 2a76d211c1..bac9aa8c75 --- a/src/client-entry.js +++ b/src/client-entry.js @@ -1,183 +1,188 @@ -/* eslint-disable no-underscore-dangle, vue/multi-word-component-names */ -import '@babel/polyfill'; -import { getUserLocale } from 'get-user-locale'; -import _dropWhile from 'lodash/dropWhile'; -import _get from 'lodash/get'; -import Bowser from 'bowser'; -import CookieStore from '@/util/cookieStore'; -import KvAuth0, { MockKvAuth0 } from '@/util/KvAuth0'; -import userIdQuery from '@/graphql/query/userId.graphql'; -import usingTouchMutation from '@/graphql/mutation/updateUsingTouch.graphql'; -import showTipMessage from '@/graphql/mutation/tipMessage/showTipMessage.graphql'; - -import { preFetchAll } from '@/util/apolloPreFetch'; -import { authenticationGuard } from '@/util/authenticationGuard'; -import { contentfulPreviewCookie } from '@/util/contentfulPreviewCookie'; -import collectWebVitals from '@/util/webVitals'; - -import createApp from '@/main'; -import '@/assets/iconLoader'; - -import { fetch } from 'whatwg-fetch'; +/* global UI_TAG */ +/* eslint-disable no-underscore-dangle, vue/require-name-property */ +import '#src/assets/scss/tailwind/tailwind.css'; +import '#src/assets/scss/app.scss'; const config = window.__KV_CONFIG__ || {}; // Set webpack public asset path based on configuration -__webpack_public_path__ = config.publicPath || '/'; // eslint-disable-line - -// Create cookie store instance -const cookieStore = new CookieStore(); - -// Create auth instance -let kvAuth0; -if (config.auth0.enable) { - kvAuth0 = new KvAuth0({ - audience: config.auth0.apiAudience, - checkFakeAuth: config.auth0.checkFakeAuth, - clientID: config.auth0.browserClientID, - cookieStore, - domain: config.auth0.domain, - mfaAudience: config.auth0.mfaAudience, - redirectUri: config.auth0.browserCallbackUri, - scope: config.auth0.scope, - }); -} else { - kvAuth0 = MockKvAuth0; +// __webpack_public_path__ = config.publicPath || '/'; // eslint-disable-line + +async function getCookieStore() { + const { default: CookieStore } = await import('#src/util/cookieStore'); + return new CookieStore(); } -// Get device information -const { userAgent } = window.navigator; -const device = userAgent ? Bowser.getParser(userAgent).parse().parsedResult : null; - -// Create the App instance -const { - app, - router, - apolloClient, -} = createApp({ - name: '', - appConfig: config, - apollo: { - uri: config.graphqlUri, - types: config.graphqlPossibleTypes, - }, - cookieStore, - device, - kvAuth0, - locale: getUserLocale(), - fetch, - url: window?.location?.href, -}); - -// Show a tip message when there is an unhandled auth0 error -kvAuth0.onError(({ eventId, user }) => { - let message = 'We\'re sorry, something went wrong.'; - if (user) { - message = `${message} Please log out and try again.`; - } else { - message = `${message} Please clear your cookies and try again.`; +async function getKvAuth0(cookieStore) { + const { default: KvAuth0, MockKvAuth0 } = await import('#src/util/KvAuth0'); + if (config.auth0.enable) { + return new KvAuth0({ + audience: config.auth0.apiAudience, + checkFakeAuth: config.auth0.checkFakeAuth, + clientID: config.auth0.browserClientID, + cookieStore, + domain: config.auth0.domain, + mfaAudience: config.auth0.mfaAudience, + redirectUri: config.auth0.browserCallbackUri, + scope: config.auth0.scope, + }); } - if (eventId) { - message = `${message} (event id: ${eventId})`; + return MockKvAuth0; +} + +async function getDevice() { + const { userAgent } = window.navigator; + if (!userAgent) { + return null; } - apolloClient.mutate({ - mutation: showTipMessage, - variables: { - message, - type: 'error', - persist: true, - }, - }); -}); + const { default: Bowser } = await import('bowser'); + return Bowser.getParser(userAgent).parse().parsedResult; +} -// Apply Server state to Client Store -if (window.__APOLLO_STATE__) { - apolloClient.cache.restore(window.__APOLLO_STATE__); +async function getLocale() { + const { getUserLocale } = await import('get-user-locale'); + return getUserLocale(); } -// Extract user id from apollo cache -let userId = null; -try { - const data = apolloClient.readQuery({ - query: userIdQuery, - variables: { - basketId: cookieStore.get('kvbskt'), - }, +async function getFetch() { + const { fetch } = await import('whatwg-fetch'); + return fetch; +} + +async function getUserId(apolloClient) { + const { default: userIdQuery } = await import('#src/graphql/query/userId.graphql'); + const result = await apolloClient.query({ query: userIdQuery }); + return result?.data?.my?.userAccount?.id ?? null; +} + +async function setupAuthErrorHandling(kvAuth0, apolloClient) { + const { default: showTipMessage } = await import('#src/graphql/mutation/tipMessage/showTipMessage.graphql'); + // Show a tip message when there is an unhandled auth0 error + kvAuth0.onError(({ eventId, user }) => { + let message = 'We\'re sorry, something went wrong.'; + if (user) { + message = `${message} Please log out and try again.`; + } else { + message = `${message} Please clear your cookies and try again.`; + } + if (eventId) { + message = `${message} (event id: ${eventId})`; + } + apolloClient.mutate({ + mutation: showTipMessage, + variables: { + message, + type: 'error', + persist: true, + }, + }); }); - userId = _get(data, 'my.userAccount.id'); -} catch (e) { - // do nothing (leave user id as null) } -// setup global analytics configuration + data -app.$setKvAnalyticsData(userId).then(() => { - let latestUserId = userId; - // Use Apollo cached userid or check for user id from Auth0 - latestUserId = userId || (kvAuth0?.user?.['https://www.kiva.org/kiva_id'] ?? ''); - // Check for cookie next - if (latestUserId === '') { - const kvls = cookieStore.get('kvls'); - latestUserId = kvls === 'o' || kvls === 'deleted' ? null : kvls; - } - // Update Snowplow user id - if (typeof snowplow !== 'undefined' && latestUserId && latestUserId !== '') { - window.snowplow('setUserId', latestUserId); - } - // fire server rendered pageview +async function setupTouchDetection(apolloClient) { + const { default: usingTouchMutation } = await import('#src/graphql/mutation/updateUsingTouch.graphql'); + // Setup adding touch info to the state + window.addEventListener('touchstart', function onFirstTouch() { + apolloClient.mutate({ + mutation: usingTouchMutation, + variables: { usingTouch: true } + }); + window.removeEventListener('touchstart', onFirstTouch); + }); +} + +async function setupAnalytics(app, apolloClient) { + const userId = await getUserId(apolloClient); + await app.$setKvAnalyticsData(userId); app.$fireServerPageView(); app.$fireQueuedEvents(); + const { default: collectWebVitals } = await import('#src/util/webVitals'); collectWebVitals(app.$kvTrackEvent); -}); +} -// Setup adding touch info to the state -window.addEventListener('touchstart', function onFirstTouch() { - apolloClient.mutate({ - mutation: usingTouchMutation, - variables: { usingTouch: true } +async function setupSentry(app, router) { + const Sentry = await import('@sentry/vue'); + Sentry.init({ + app, + trackComponents: true, + dsn: config.sentryURI, + integrations: [ + new Sentry.BrowserTracing({ + routingInstrumentation: Sentry.vueRouterInstrumentation(router), + tracingOrigins: [config.host], + }), + ], + release: UI_TAG, + // Set tracesSampleRate to 1.0 to capture 100% + // of transactions for performance monitoring. + // We recommend adjusting this value in production + tracesSampleRate: config?.sentryTraceSampleRate, + beforeSend(event) { + // make sentry colleted event easy to compare to + const eventAsString = JSON.stringify(event); + // match specific 3rd party events for exclusion + // Skip sending failed to fetch error caused by unhandled promise rejection in google ads + // Sentry Event Link: https://kiva.sentry.io/issues/4413252219/events/726c65f507684f43b748e913d4793518/ + // This url is unreachable: https://pagead2.googlesyndication.com/pagead/buyside_topics/set/ + if (eventAsString.indexOf('Failed to fetch') !== -1 + && eventAsString.indexOf('pagead') !== -1) { + return false; + } + // Skip sending failed loads of pX + if (eventAsString.indexOf("Cannot set property 'PX1065' of undefined") !== -1) { + return false; + } + // Skip sending errors from CefSharp + // https://forum.sentry.io/t/unhandledrejection-non-error-promise-rejection-captured-with-value/14062/20 + if (eventAsString.indexOf('Object Not Found Matching Id') !== -1) { + return false; + } + // return event otherwise + return event; + }, }); - window.removeEventListener('touchstart', onFirstTouch); -}); +} -// Wait until router has resolved all async before hooks and async components -router.onReady(() => { +function setupClientRouting({ + app, apolloClient, cookieStore, kvAuth0, router +}) { // Add router hook for handling asyncData. // Doing it after initial route is resolved so that we don't double-fetch // the data that we already have. Using router.beforeResolve() so that all // async components are resolved. - router.beforeResolve((to, from, next) => { + router.beforeResolve(async (to, from, next) => { + const [{ contentfulPreviewCookie }, { authenticationGuard }, { preFetchAll }] = await Promise.all([ + import('#src/util/contentfulPreviewCookie'), + import('#src/util/authenticationGuard'), + import('#src/util/apolloPreFetch'), + ]); + // get newly activated components - const matched = router.getMatchedComponents(to); - const prevMatched = router.getMatchedComponents(from); - const areRoutesTheSame = JSON.stringify(to?.matched?.[0]?.path) === JSON.stringify(from?.matched?.[0]?.path); - const areParamsTheSame = JSON.stringify(to?.params) === JSON.stringify(from?.params); - let activated; - /** if route is the same but params are different, do not drop matched components this prevents buggy - * navigation when client side navigating from route to same route with different params - */ - if (areRoutesTheSame && !areParamsTheSame) { - activated = matched; - } else { - activated = _dropWhile(matched, (c, i) => prevMatched[i] === c); - } + console.log('to', to); + console.log('from', from); + // const matched = router.getMatchedComponents(to); + // const prevMatched = router.getMatchedComponents(from); + const { matched } = to; + const prevMatched = from.matched; + const activated = matched.filter((c, i) => prevMatched[i] !== c); contentfulPreviewCookie({ route: to, cookieStore }); authenticationGuard({ route: to, apolloClient, kvAuth0 }) .then(() => { - // Pre-fetch graphql queries from activated components + // Pre-fetch graphql queries from activated components return preFetchAll(activated, apolloClient, { cookieStore, kvAuth0, route: to, - device }); }).then(next).catch(next); }); router.beforeEach((to, from, next) => { - app.$Progress.start(6500); + app.config.globalProperties.$Progress.start(6500); // if no routes match our path, force a page refresh to that path - const matched = router.getMatchedComponents(to); + const { matched } = to; if (!matched.length) { window.location = to.fullPath; } else { @@ -187,7 +192,7 @@ router.onReady(() => { router.afterEach((to, from) => { // finish loading - app.$Progress.finish(); + app.config.globalProperties.$Progress.finish(); if (!to?.params?.noAnalytics) { // fire pageview @@ -195,8 +200,66 @@ router.onReady(() => { } }); - router.onError(() => app.$Progress.fail()); + router.onError(() => app.config.globalProperties.$Progress.fail()); +} + +async function initApp() { + const [{ default: createApp }, cookieStore, device, locale, fetch] = await Promise.all([ + import('#src/main'), + getCookieStore(), + getDevice(), + getLocale(), + getFetch(), + ]); + const kvAuth0 = await getKvAuth0(cookieStore); + + // Create the App instance + const { + app, + router, + apolloClient, + } = createApp({ + appConfig: config, + apollo: { + uri: config.graphqlUri, + types: config.graphqlPossibleTypes, + }, + cookieStore, + device, + kvAuth0, + locale, + fetch, + }); + + // Apply Server state to Client Store + if (window.__APOLLO_STATE__) { + apolloClient.cache.restore(window.__APOLLO_STATE__); + } + + setupAuthErrorHandling(kvAuth0, apolloClient); + setupTouchDetection(apolloClient); + + if (config.enableSentry) { + setupSentry(app, router); + } + + if (config.enableAnalytics) { + setupAnalytics(app, apolloClient); + } + + // Wait until router has resolved all async before hooks and async components + await router.isReady(); + setupClientRouting({ + app, apolloClient, cookieStore, kvAuth0, router + }); // Mount app in DOM - app.$mount('#app'); -}); + app.mount('#app'); +} + +// Start application once browser is idle +if ('requestIdleCallback' in window) { + requestIdleCallback(initApp, { timeout: 2000 }); +} else { + setTimeout(initApp, 500); +} diff --git a/src/components/15Years/15YearsButton.vue b/src/components/15Years/15YearsButton.vue index b97828f78c..b9052da05e 100644 --- a/src/components/15Years/15YearsButton.vue +++ b/src/components/15Years/15YearsButton.vue @@ -56,8 +56,8 @@ export default { diff --git a/src/components/BorrowerProfile/SupporterDetails.vue b/src/components/BorrowerProfile/SupporterDetails.vue index ccc12ea08d..440eecf6d8 100644 --- a/src/components/BorrowerProfile/SupporterDetails.vue +++ b/src/components/BorrowerProfile/SupporterDetails.vue @@ -65,7 +65,7 @@ > @@ -103,7 +103,7 @@ diff --git a/src/components/Checkout/BasketItem.vue b/src/components/Checkout/BasketItem.vue index da3c6e0a83..2768032660 100644 --- a/src/components/Checkout/BasketItem.vue +++ b/src/components/Checkout/BasketItem.vue @@ -116,15 +116,15 @@ diff --git a/src/components/Checkout/DonationItem.vue b/src/components/Checkout/DonationItem.vue index d17b23817b..8f6b1c8ff9 100644 --- a/src/components/Checkout/DonationItem.vue +++ b/src/components/Checkout/DonationItem.vue @@ -7,7 +7,7 @@
donation line item image @@ -77,7 +77,7 @@
donation line item image @@ -219,16 +219,14 @@ diff --git a/src/components/Checkout/InContext/InContextCheckout.vue b/src/components/Checkout/InContext/InContextCheckout.vue index 86c247032b..14ef8c5943 100644 --- a/src/components/Checkout/InContext/InContextCheckout.vue +++ b/src/components/Checkout/InContext/InContextCheckout.vue @@ -19,10 +19,10 @@ name="piggy-bank" /> - {{ promoName }} has given you ${{ promoFund.promoPrice | numeral }} in credit. + {{ promoName }} has given you {{ $filters.numeral(promoFund.promoPrice, '$0,0[.]00') }} in credit. - You have been given ${{ promoFund.promoPrice | numeral }} in credit. + You have been given {{ $filters.numeral(promoFund.promoPrice, '$0,0[.]00') }} in credit.   We've suggested a borrower to lend your remaining ${{ lcaLoanPrice }} credit to. @@ -152,18 +152,18 @@ diff --git a/src/components/Contentful/DynamicRichText.vue b/src/components/Contentful/DynamicRichText.vue index 139f2b09ae..92c0e68446 100644 --- a/src/components/Contentful/DynamicRichText.vue +++ b/src/components/Contentful/DynamicRichText.vue @@ -1,4 +1,5 @@ @@ -88,6 +88,7 @@ export default { .story-card { // Remove background set in StoryCard background: none; + // Remove extra padding between bottom of story card and the carousel controls padding-bottom: 0; @@ -99,7 +100,7 @@ export default { } // When a slide is not active, hide every element that isn't an image in the DynamicRichText blocks in the slide - [role="group"][aria-current="false"] { + [role=group][aria-current=false] { .story-card .dynamic-rich-text { & > * { opacity: 0; diff --git a/src/components/Contentful/TestimonialCards.vue b/src/components/Contentful/TestimonialCards.vue index ae25ff05ec..941f15930b 100644 --- a/src/components/Contentful/TestimonialCards.vue +++ b/src/components/Contentful/TestimonialCards.vue @@ -61,11 +61,11 @@ diff --git a/src/components/CorporateCampaign/LoanSearch/AttributeFilter.vue b/src/components/CorporateCampaign/LoanSearch/AttributeFilter.vue index 7305d3fb0a..9b6aa4e22a 100644 --- a/src/components/CorporateCampaign/LoanSearch/AttributeFilter.vue +++ b/src/components/CorporateCampaign/LoanSearch/AttributeFilter.vue @@ -14,8 +14,8 @@ diff --git a/src/components/CorporateCampaign/LoanSearch/GenderFilter.vue b/src/components/CorporateCampaign/LoanSearch/GenderFilter.vue index 08bcd509de..4fea4b5371 100644 --- a/src/components/CorporateCampaign/LoanSearch/GenderFilter.vue +++ b/src/components/CorporateCampaign/LoanSearch/GenderFilter.vue @@ -18,7 +18,7 @@ diff --git a/src/components/CorporateCampaign/LoanSearch/SortOrder.vue b/src/components/CorporateCampaign/LoanSearch/SortOrder.vue index b9b6856997..e1610ce729 100644 --- a/src/components/CorporateCampaign/LoanSearch/SortOrder.vue +++ b/src/components/CorporateCampaign/LoanSearch/SortOrder.vue @@ -20,7 +20,7 @@ diff --git a/src/components/Forms/GuestAccountCreation.vue b/src/components/Forms/GuestAccountCreation.vue index 4dcedbebd0..46757d3784 100644 --- a/src/components/Forms/GuestAccountCreation.vue +++ b/src/components/Forms/GuestAccountCreation.vue @@ -40,12 +40,12 @@ diff --git a/src/components/Homepage/HomeExp/KivaMultiCategoryGrid.vue b/src/components/Homepage/HomeExp/KivaMultiCategoryGrid.vue index 4168e06b94..4aa443ca42 100644 --- a/src/components/Homepage/HomeExp/KivaMultiCategoryGrid.vue +++ b/src/components/Homepage/HomeExp/KivaMultiCategoryGrid.vue @@ -25,10 +25,10 @@ diff --git a/src/components/Kv/KvMap.vue b/src/components/Kv/KvMap.vue index bc19a014bc..be92c0c053 100644 --- a/src/components/Kv/KvMap.vue +++ b/src/components/Kv/KvMap.vue @@ -10,12 +10,12 @@ diff --git a/src/components/Kv/KvRadio.vue b/src/components/Kv/KvRadio.vue index f83f64e905..8ef13f9ffc 100644 --- a/src/components/Kv/KvRadio.vue +++ b/src/components/Kv/KvRadio.vue @@ -22,7 +22,7 @@ diff --git a/src/components/Lend/LoanSearch/ChallengeHeader.vue b/src/components/Lend/LoanSearch/ChallengeHeader.vue index 2cf5e7f9f0..c8d9b12bb9 100644 --- a/src/components/Lend/LoanSearch/ChallengeHeader.vue +++ b/src/components/Lend/LoanSearch/ChallengeHeader.vue @@ -70,11 +70,11 @@ diff --git a/src/components/LoanCards/RecommendedLoanCard.vue b/src/components/LoanCards/RecommendedLoanCard.vue index 61afe59728..91147a03f6 100644 --- a/src/components/LoanCards/RecommendedLoanCard.vue +++ b/src/components/LoanCards/RecommendedLoanCard.vue @@ -34,7 +34,7 @@ {{ timeLeftMessage }} - {{ amountLeftWithoutReservation | numeral('$0,0') }} to go + {{ $filters.numeral(amountLeftWithoutReservation, '$0,0') }} to go
@@ -89,16 +89,16 @@ diff --git a/src/components/LoanFinding/QuickFiltersSection.vue b/src/components/LoanFinding/QuickFiltersSection.vue index eef508da97..6699deaf8a 100644 --- a/src/components/LoanFinding/QuickFiltersSection.vue +++ b/src/components/LoanFinding/QuickFiltersSection.vue @@ -70,13 +70,13 @@ diff --git a/src/components/LoansByCategory/ViewToggle.vue b/src/components/LoansByCategory/ViewToggle.vue index 047c64dbf8..0dbb50d8af 100644 --- a/src/components/LoansByCategory/ViewToggle.vue +++ b/src/components/LoansByCategory/ViewToggle.vue @@ -30,9 +30,9 @@ diff --git a/src/components/WwwFrame/PromotionalBanner/Banners/Donation/DonationBannerContainer.vue b/src/components/WwwFrame/PromotionalBanner/Banners/Donation/DonationBannerContainer.vue index 42db000966..f4d4d4ef05 100644 --- a/src/components/WwwFrame/PromotionalBanner/Banners/Donation/DonationBannerContainer.vue +++ b/src/components/WwwFrame/PromotionalBanner/Banners/Donation/DonationBannerContainer.vue @@ -15,7 +15,7 @@ diff --git a/src/pages/Autolending/AutolendingWho.vue b/src/pages/Autolending/AutolendingWho.vue index 3ad0763815..9452614752 100644 --- a/src/pages/Autolending/AutolendingWho.vue +++ b/src/pages/Autolending/AutolendingWho.vue @@ -128,12 +128,12 @@ diff --git a/src/pages/Checkout/PostPurchase.vue b/src/pages/Checkout/PostPurchase.vue index 93720a7b1f..b91d856b5d 100644 --- a/src/pages/Checkout/PostPurchase.vue +++ b/src/pages/Checkout/PostPurchase.vue @@ -1,8 +1,8 @@ diff --git a/src/pages/Lend/AlgoliaPaginationHitsPerPage.vue b/src/pages/Lend/AlgoliaPaginationHitsPerPage.vue deleted file mode 100644 index 8509039cf8..0000000000 --- a/src/pages/Lend/AlgoliaPaginationHitsPerPage.vue +++ /dev/null @@ -1,35 +0,0 @@ - - - - - diff --git a/src/pages/Lend/AlgoliaPaginationStats.vue b/src/pages/Lend/AlgoliaPaginationStats.vue deleted file mode 100644 index 587834c868..0000000000 --- a/src/pages/Lend/AlgoliaPaginationStats.vue +++ /dev/null @@ -1,48 +0,0 @@ - - - - - diff --git a/src/pages/Lend/AlgoliaPaginationWrapper.vue b/src/pages/Lend/AlgoliaPaginationWrapper.vue deleted file mode 100644 index 123f1dc271..0000000000 --- a/src/pages/Lend/AlgoliaPaginationWrapper.vue +++ /dev/null @@ -1,44 +0,0 @@ - - - diff --git a/src/pages/Lend/AlgoliaSearchBox.vue b/src/pages/Lend/AlgoliaSearchBox.vue deleted file mode 100644 index b444c7179a..0000000000 --- a/src/pages/Lend/AlgoliaSearchBox.vue +++ /dev/null @@ -1,87 +0,0 @@ - - - - - diff --git a/src/pages/Lend/Filter/FilterComponents/AlgoliaState.vue b/src/pages/Lend/Filter/FilterComponents/AlgoliaState.vue deleted file mode 100644 index 023c825dc9..0000000000 --- a/src/pages/Lend/Filter/FilterComponents/AlgoliaState.vue +++ /dev/null @@ -1,24 +0,0 @@ - - - diff --git a/src/pages/Lend/Filter/FilterComponents/AlgoliaTrackState.vue b/src/pages/Lend/Filter/FilterComponents/AlgoliaTrackState.vue deleted file mode 100644 index 6b37a2fd4d..0000000000 --- a/src/pages/Lend/Filter/FilterComponents/AlgoliaTrackState.vue +++ /dev/null @@ -1,55 +0,0 @@ - - - diff --git a/src/pages/Lend/Filter/FilterComponents/ClearAllRefinements.vue b/src/pages/Lend/Filter/FilterComponents/ClearAllRefinements.vue deleted file mode 100644 index dc4e499328..0000000000 --- a/src/pages/Lend/Filter/FilterComponents/ClearAllRefinements.vue +++ /dev/null @@ -1,20 +0,0 @@ - - - diff --git a/src/pages/Lend/Filter/FilterComponents/FilterMenuSection.vue b/src/pages/Lend/Filter/FilterComponents/FilterMenuSection.vue deleted file mode 100644 index ea6e190ac2..0000000000 --- a/src/pages/Lend/Filter/FilterComponents/FilterMenuSection.vue +++ /dev/null @@ -1,126 +0,0 @@ - - - - - diff --git a/src/pages/Lend/Filter/FilterComponents/FilterRangeSlider.vue b/src/pages/Lend/Filter/FilterComponents/FilterRangeSlider.vue deleted file mode 100644 index 9f3c9664c5..0000000000 --- a/src/pages/Lend/Filter/FilterComponents/FilterRangeSlider.vue +++ /dev/null @@ -1,160 +0,0 @@ - - - - - diff --git a/src/pages/Lend/Filter/FilterComponents/HierarchicalMenuList.vue b/src/pages/Lend/Filter/FilterComponents/HierarchicalMenuList.vue deleted file mode 100644 index 6badb0bd3e..0000000000 --- a/src/pages/Lend/Filter/FilterComponents/HierarchicalMenuList.vue +++ /dev/null @@ -1,82 +0,0 @@ - - - - - diff --git a/src/pages/Lend/Filter/FilterComponents/LendFilterMenu.vue b/src/pages/Lend/Filter/FilterComponents/LendFilterMenu.vue deleted file mode 100644 index daa6fb481c..0000000000 --- a/src/pages/Lend/Filter/FilterComponents/LendFilterMenu.vue +++ /dev/null @@ -1,412 +0,0 @@ - - - - - diff --git a/src/pages/Lend/Filter/FilterComponents/SelectedRefinements.vue b/src/pages/Lend/Filter/FilterComponents/SelectedRefinements.vue deleted file mode 100644 index 8a5c192cd6..0000000000 --- a/src/pages/Lend/Filter/FilterComponents/SelectedRefinements.vue +++ /dev/null @@ -1,279 +0,0 @@ - - - - - diff --git a/src/pages/Lend/Filter/FilterSections/FilterSectionAttributes.vue b/src/pages/Lend/Filter/FilterSections/FilterSectionAttributes.vue deleted file mode 100644 index bf2ffb3689..0000000000 --- a/src/pages/Lend/Filter/FilterSections/FilterSectionAttributes.vue +++ /dev/null @@ -1,82 +0,0 @@ - - - diff --git a/src/pages/Lend/Filter/FilterSections/FilterSectionCategories.vue b/src/pages/Lend/Filter/FilterSections/FilterSectionCategories.vue deleted file mode 100644 index 2916634277..0000000000 --- a/src/pages/Lend/Filter/FilterSections/FilterSectionCategories.vue +++ /dev/null @@ -1,67 +0,0 @@ - - - diff --git a/src/pages/Lend/Filter/FilterSections/FilterSectionLocation.vue b/src/pages/Lend/Filter/FilterSections/FilterSectionLocation.vue deleted file mode 100644 index ecf61de386..0000000000 --- a/src/pages/Lend/Filter/FilterSections/FilterSectionLocation.vue +++ /dev/null @@ -1,59 +0,0 @@ - - - diff --git a/src/pages/Lend/Filter/FilterSections/FilterSectionSectors.vue b/src/pages/Lend/Filter/FilterSections/FilterSectionSectors.vue deleted file mode 100644 index 6724a867ad..0000000000 --- a/src/pages/Lend/Filter/FilterSections/FilterSectionSectors.vue +++ /dev/null @@ -1,73 +0,0 @@ - - - diff --git a/src/pages/Lend/Filter/FilterSections/FilterSectionSort.vue b/src/pages/Lend/Filter/FilterSections/FilterSectionSort.vue deleted file mode 100644 index c7babe16cf..0000000000 --- a/src/pages/Lend/Filter/FilterSections/FilterSectionSort.vue +++ /dev/null @@ -1,44 +0,0 @@ - - - diff --git a/src/pages/Lend/Filter/FilterSections/FilterSectionTags.vue b/src/pages/Lend/Filter/FilterSections/FilterSectionTags.vue deleted file mode 100644 index 7453e7e534..0000000000 --- a/src/pages/Lend/Filter/FilterSections/FilterSectionTags.vue +++ /dev/null @@ -1,73 +0,0 @@ - - - diff --git a/src/pages/Lend/Filter/FilterSections/Gender/FilterSectionGender.vue b/src/pages/Lend/Filter/FilterSections/Gender/FilterSectionGender.vue deleted file mode 100644 index 27bf87e856..0000000000 --- a/src/pages/Lend/Filter/FilterSections/Gender/FilterSectionGender.vue +++ /dev/null @@ -1,40 +0,0 @@ - - - diff --git a/src/pages/Lend/Filter/FilterSections/Gender/PillToggleWrapper.vue b/src/pages/Lend/Filter/FilterSections/Gender/PillToggleWrapper.vue deleted file mode 100644 index b64bea1008..0000000000 --- a/src/pages/Lend/Filter/FilterSections/Gender/PillToggleWrapper.vue +++ /dev/null @@ -1,61 +0,0 @@ - - - diff --git a/src/pages/Lend/Filter/FilterSections/LoanDetails/FilterSectionLoanDetails.vue b/src/pages/Lend/Filter/FilterSections/LoanDetails/FilterSectionLoanDetails.vue deleted file mode 100644 index 103a05f32d..0000000000 --- a/src/pages/Lend/Filter/FilterSections/LoanDetails/FilterSectionLoanDetails.vue +++ /dev/null @@ -1,54 +0,0 @@ - - - diff --git a/src/pages/Lend/Filter/FilterSections/LoanDetails/RangeSliderWrapper.vue b/src/pages/Lend/Filter/FilterSections/LoanDetails/RangeSliderWrapper.vue deleted file mode 100644 index 96990c54ea..0000000000 --- a/src/pages/Lend/Filter/FilterSections/LoanDetails/RangeSliderWrapper.vue +++ /dev/null @@ -1,90 +0,0 @@ - - - diff --git a/src/pages/Lend/Filter/FilterSections/LocationMulti/FilterSectionLocationMulti.vue b/src/pages/Lend/Filter/FilterSections/LocationMulti/FilterSectionLocationMulti.vue deleted file mode 100644 index cd6abf6854..0000000000 --- a/src/pages/Lend/Filter/FilterSections/LocationMulti/FilterSectionLocationMulti.vue +++ /dev/null @@ -1,134 +0,0 @@ - - - diff --git a/src/pages/Lend/Filter/FilterSections/LocationMulti/FindNewCountry.vue b/src/pages/Lend/Filter/FilterSections/LocationMulti/FindNewCountry.vue deleted file mode 100644 index 37c438dab0..0000000000 --- a/src/pages/Lend/Filter/FilterSections/LocationMulti/FindNewCountry.vue +++ /dev/null @@ -1,151 +0,0 @@ - - - diff --git a/src/pages/Lend/Filter/FilterSections/LocationMulti/LocationMultiRefinements.vue b/src/pages/Lend/Filter/FilterSections/LocationMulti/LocationMultiRefinements.vue deleted file mode 100644 index 18f59b9d63..0000000000 --- a/src/pages/Lend/Filter/FilterSections/LocationMulti/LocationMultiRefinements.vue +++ /dev/null @@ -1,234 +0,0 @@ - - - - - diff --git a/src/pages/Lend/Filter/LendFilterPage.vue b/src/pages/Lend/Filter/LendFilterPage.vue deleted file mode 100644 index 1ff65ab139..0000000000 --- a/src/pages/Lend/Filter/LendFilterPage.vue +++ /dev/null @@ -1,446 +0,0 @@ - - - - - diff --git a/src/pages/Lend/LendHeader.vue b/src/pages/Lend/LendHeader.vue deleted file mode 100644 index a37c0dde8c..0000000000 --- a/src/pages/Lend/LendHeader.vue +++ /dev/null @@ -1,117 +0,0 @@ - - - - - diff --git a/src/pages/Lend/LendPage.vue b/src/pages/Lend/LendPage.vue index 0da1103038..0c2583025a 100644 --- a/src/pages/Lend/LendPage.vue +++ b/src/pages/Lend/LendPage.vue @@ -43,11 +43,11 @@ import _map from 'lodash/map'; import _mapValues from 'lodash/mapValues'; import _merge from 'lodash/merge'; import numeral from 'numeral'; -import loanCardQuery from '@/graphql/query/loanCardData.graphql'; -import WwwPage from '@/components/WwwFrame/WwwPage'; -import LoanCardController from '@/components/LoanCards/LoanCardController'; -import KvPagination from '@/components/Kv/KvPagination'; -import KvLoadingOverlay from '@/components/Kv/KvLoadingOverlay'; +import loanCardQuery from '#src/graphql/query/loanCardData.graphql'; +import WwwPage from '#src/components/WwwFrame/WwwPage'; +import LoanCardController from '#src/components/LoanCards/LoanCardController'; +import KvPagination from '#src/components/Kv/KvPagination'; +import KvLoadingOverlay from '#src/components/Kv/KvLoadingOverlay'; const loansPerPage = 12; diff --git a/src/pages/Lend/LoanChannelCategoryControl.vue b/src/pages/Lend/LoanChannelCategoryControl.vue index 539d658bd2..a1ad9fdb6d 100644 --- a/src/pages/Lend/LoanChannelCategoryControl.vue +++ b/src/pages/Lend/LoanChannelCategoryControl.vue @@ -12,7 +12,7 @@ class="tw-text-action tw-flex tw-items-center tw-float-right" @click.native="trackAdvancedFilters" > - + Advanced filters

@@ -164,29 +164,29 @@ import _isEqual from 'lodash/isEqual'; import _map from 'lodash/map'; import _filter from 'lodash/filter'; import numeral from 'numeral'; -import logReadQueryError from '@/util/logReadQueryError'; -import loanChannelPageQuery from '@/graphql/query/loanChannelPage.graphql'; -import loanChannelQueryMapMixin from '@/plugins/loan-channel-query-map'; -import KvPagination from '@/components/Kv/KvPagination'; -import PromoGridLoanCardExp from '@/components/LoanCards/PromoGridLoanCardExp'; -import KvLoadingOverlay from '@/components/Kv/KvLoadingOverlay'; -import updateLoanReservation from '@/graphql/mutation/updateLoanReservation.graphql'; +import logReadQueryError from '#src/util/logReadQueryError'; +import loanChannelPageQuery from '#src/graphql/query/loanChannelPage.graphql'; +import loanChannelQueryMapMixin from '#src/plugins/loan-channel-query-map'; +import KvPagination from '#src/components/Kv/KvPagination'; +import PromoGridLoanCardExp from '#src/components/LoanCards/PromoGridLoanCardExp'; +import KvLoadingOverlay from '#src/components/Kv/KvLoadingOverlay'; +import updateLoanReservation from '#src/graphql/mutation/updateLoanReservation.graphql'; import { preFetchChannel, getCachedChannel, watchChannelQuery, getLoanChannel, getFLSSQueryMap, -} from '@/util/loanChannelUtils'; -import { runFacetsQueries, fetchLoanFacets } from '@/util/loanSearch/dataUtils'; -import { transformIsoCodes } from '@/util/loanSearch/filters/regions'; -import { FLSS_ORIGIN_CATEGORY } from '@/util/flssUtils'; -import QuickFilters from '@/components/LoansByCategory/QuickFilters/QuickFilters'; -import HelpmeChooseWrapper from '@/components/LoansByCategory/HelpmeChoose/HelpmeChooseWrapper'; -import KvClassicLoanCardContainer from '@/components/LoanCards/KvClassicLoanCardContainer'; -import EmptyState from '@/components/LoanFinding/EmptyState'; -import experimentAssignmentQuery from '@/graphql/query/experimentAssignment.graphql'; -import { trackExperimentVersion } from '@/util/experiment/experimentUtils'; +} from '#src/util/loanChannelUtils'; +import { runFacetsQueries, fetchLoanFacets } from '#src/util/loanSearch/dataUtils'; +import { transformIsoCodes } from '#src/util/loanSearch/filters/regions'; +import { FLSS_ORIGIN_CATEGORY } from '#src/util/flssUtils'; +import QuickFilters from '#src/components/LoansByCategory/QuickFilters/QuickFilters'; +import HelpmeChooseWrapper from '#src/components/LoansByCategory/HelpmeChoose/HelpmeChooseWrapper'; +import KvClassicLoanCardContainer from '#src/components/LoanCards/KvClassicLoanCardContainer'; +import EmptyState from '#src/components/LoanFinding/EmptyState'; +import experimentAssignmentQuery from '#src/graphql/query/experimentAssignment.graphql'; +import { trackExperimentVersion } from '#src/util/experiment/experimentUtils'; const defaultLoansPerPage = 12; @@ -230,7 +230,7 @@ function getPageOffset(query, limit) { export default { name: 'LoanChannelCategoryControl', - metaInfo() { + head() { return { title: this.metaTitle, link: [ @@ -846,7 +846,7 @@ export default { diff --git a/src/pages/Lend/LoanSearchPage.vue b/src/pages/Lend/LoanSearchPage.vue index 96bc497091..6cccdd57cc 100644 --- a/src/pages/Lend/LoanSearchPage.vue +++ b/src/pages/Lend/LoanSearchPage.vue @@ -64,25 +64,25 @@ diff --git a/src/pages/LendingTeams/TeamListing.vue b/src/pages/LendingTeams/TeamListing.vue index a59f270b7c..5bb9a7bd22 100644 --- a/src/pages/LendingTeams/TeamListing.vue +++ b/src/pages/LendingTeams/TeamListing.vue @@ -247,14 +247,14 @@ import { format } from 'date-fns'; import numeral from 'numeral'; import _mapValues from 'lodash/mapValues'; -import teamNoImage from '@/assets/images/team_s135.png'; -import { gql } from '@apollo/client'; -import KvPagination from '~/@kiva/kv-components/vue/KvPagination'; -import KvSelect from '~/@kiva/kv-components/vue/KvSelect'; +import teamNoImage from '#src/assets/images/team_s135.png'; +import { gql } from '@apollo/client/index'; +import KvPagination from '@kiva/kv-components/vue/KvPagination'; +import KvSelect from '@kiva/kv-components/vue/KvSelect'; +import KvButton from '@kiva/kv-components/vue/KvButton'; +import KvLoadingPlaceholder from '@kiva/kv-components/vue/KvLoadingPlaceholder'; import { fetchTeams, teamCategories, teamCategoryFriendlyName } from '../../util/teamsUtil'; import TeamSearchBar from './TeamSearchBar'; -import KvButton from '~/@kiva/kv-components/vue/KvButton'; -import KvLoadingPlaceholder from '~/@kiva/kv-components/vue/KvLoadingPlaceholder'; const teamsPerPage = 10; @@ -432,8 +432,15 @@ export default { teamSort, teamCategory, teamOption, queryString, offset }) { this.loading = true; - await fetchTeams(this.apollo, teamSort, teamCategory, teamOption, - queryString, offset, this.limit).then(teams => { + await fetchTeams( + this.apollo, + teamSort, + teamCategory, + teamOption, + queryString, + offset, + this.limit + ).then(teams => { this.teams = teams.values; this.totalCount = teams.totalCount; if (this.teams.length === 0 && this.totalCount > 0) { diff --git a/src/pages/LendingTeams/TeamSearchBar.vue b/src/pages/LendingTeams/TeamSearchBar.vue index c6424d2943..43930da088 100644 --- a/src/pages/LendingTeams/TeamSearchBar.vue +++ b/src/pages/LendingTeams/TeamSearchBar.vue @@ -23,8 +23,8 @@ diff --git a/src/pages/LoginAndRegister/GuestAccountClaim.vue b/src/pages/LoginAndRegister/GuestAccountClaim.vue index 73c17c511c..8707712d14 100644 --- a/src/pages/LoginAndRegister/GuestAccountClaim.vue +++ b/src/pages/LoginAndRegister/GuestAccountClaim.vue @@ -46,13 +46,13 @@ diff --git a/src/pages/MonthlyGood/MonthlyGoodSetupPage.vue b/src/pages/MonthlyGood/MonthlyGoodSetupPage.vue index b2c0d03dd3..8190371475 100644 --- a/src/pages/MonthlyGood/MonthlyGoodSetupPage.vue +++ b/src/pages/MonthlyGood/MonthlyGoodSetupPage.vue @@ -7,7 +7,7 @@ >

- Heads up! You have {{ balance | numeral('$0') }} available to lend. + Heads up! You have {{ $filters.numeral(balance, '$0') }} available to lend.

@@ -73,7 +73,7 @@ @click="isDayInputShown = true" v-if="!isDayInputShown" > - {{ dayOfMonth | numeral('Oo') }} + {{ $filters.numeral(dayOfMonth, 'Oo') }}