cja-phoenix 1.0.11 → 1.0.12

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (31) hide show
  1. package/dist/module.json +1 -1
  2. package/dist/module.mjs +2 -1
  3. package/dist/runtime/components/StickyContainer.vue +1 -1
  4. package/dist/runtime/components/funnel/Header.vue +66 -0
  5. package/dist/runtime/components/funnel/Header.vue.d.ts +7 -0
  6. package/dist/runtime/components/funnel/Submit.vue +68 -0
  7. package/dist/runtime/components/funnel/Submit.vue.d.ts +21 -0
  8. package/dist/runtime/{utils/gtm.d.ts → composables/useCjaGtm.d.ts} +2 -3
  9. package/dist/runtime/{utils/gtm.js → composables/useCjaGtm.js} +47 -17
  10. package/dist/runtime/composables/useFunnelConfig.d.ts +10 -0
  11. package/dist/runtime/composables/useFunnelConfig.js +50 -0
  12. package/dist/runtime/composables/useJourneyConfig.d.ts +11 -0
  13. package/dist/runtime/composables/useJourneyConfig.js +13 -0
  14. package/dist/runtime/types/JourneyConfig.d.ts +9 -0
  15. package/dist/runtime/utils/applyProductData.d.ts +2 -2
  16. package/dist/runtime/utils/applyProductData.js +18 -14
  17. package/dist/runtime/utils/updateForm.d.ts +1 -1
  18. package/dist/runtime/utils/updateForm.js +25 -21
  19. package/dist/runtime/utils/updateMarketingConsent.d.ts +1 -1
  20. package/dist/runtime/utils/updateMarketingConsent.js +12 -8
  21. package/dist/runtime/utils/uploadFile.d.ts +0 -1
  22. package/dist/runtime/utils/uploadFile.js +3 -1
  23. package/package.json +3 -1
  24. package/dist/runtime/types/funnelConfig.d.ts +0 -12
  25. package/dist/runtime/utils/index.d.ts +0 -1
  26. package/dist/runtime/utils/index.js +0 -1
  27. /package/dist/runtime/{utils → composables}/useHeaderHeight.d.ts +0 -0
  28. /package/dist/runtime/{utils → composables}/useHeaderHeight.js +0 -0
  29. /package/dist/runtime/{utils → composables}/useValidateForm.d.ts +0 -0
  30. /package/dist/runtime/{utils → composables}/useValidateForm.js +0 -0
  31. /package/dist/runtime/types/{funnelConfig.js → JourneyConfig.js} +0 -0
package/dist/module.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "cja-phoenix",
3
3
  "configKey": "cja-phoenix",
4
- "version": "1.0.11",
4
+ "version": "1.0.12",
5
5
  "builder": {
6
6
  "@nuxt/module-builder": "1.0.2",
7
7
  "unbuild": "3.6.1"
package/dist/module.mjs CHANGED
@@ -5,7 +5,7 @@ const module = defineNuxtModule({
5
5
  name: "cja-phoenix",
6
6
  configKey: "cja-phoenix"
7
7
  },
8
- setup(_options, _nuxt) {
8
+ async setup(_options, _nuxt) {
9
9
  const { resolve } = createResolver(import.meta.url);
10
10
  const nuxtOptions = _nuxt.options;
11
11
  nuxtOptions.vite.css ||= {};
@@ -18,6 +18,7 @@ const module = defineNuxtModule({
18
18
  `;
19
19
  nuxtOptions.css.push(resolve("./runtime/assets/scss/tippy.scss"));
20
20
  nuxtOptions.css.push(resolve("./runtime/assets/iconia/style.css"));
21
+ addImportsDir(resolve("./runtime/composables"));
21
22
  addImportsDir(resolve("./runtime/utils"));
22
23
  addImportsDir(resolve("./runtime/types"));
23
24
  addComponentsDir({
@@ -15,7 +15,7 @@
15
15
  </template>
16
16
 
17
17
  <script setup>
18
- import { useHeaderHeight } from "../utils/useHeaderHeight";
18
+ import { useHeaderHeight } from "#imports";
19
19
  import { onMounted, ref } from "vue";
20
20
  const { top, bottom, left, right } = defineProps({
21
21
  top: { type: Number, required: false },
@@ -0,0 +1,66 @@
1
+ <template>
2
+ <div class="funnel-header">
3
+ <div class="header-container">
4
+ <h2>{{ title }}</h2>
5
+ <span
6
+ v-if="tooltip"
7
+ v-tippy="tooltip"
8
+ class="m-cgg-icon--question"
9
+ />
10
+ </div>
11
+ <p v-if="description">
12
+ {{ description }}
13
+ </p>
14
+ </div>
15
+ </template>
16
+
17
+ <script setup>
18
+ defineProps({
19
+ title: { type: String, required: true },
20
+ description: { type: String, required: false },
21
+ tooltip: { type: String, required: false }
22
+ });
23
+ </script>
24
+
25
+ <style lang="scss" scoped>
26
+ .funnel-header {
27
+ text-align: center;
28
+ margin: 0 0 32px;
29
+
30
+ .header-container {
31
+ display: flex;
32
+ gap: 12px;
33
+ justify-content: center;
34
+ align-items: center;
35
+
36
+ .m-cgg-icon--question {
37
+ color: $main-blue;
38
+ font-size: 24px;
39
+ }
40
+ }
41
+
42
+ h2 {
43
+ color: $main-blue;
44
+ font-size: 20px;
45
+ line-height: 26px;
46
+ font-weight: 700;
47
+ margin: 0;
48
+
49
+ @media screen and (min-width: $break-lg-min) {
50
+ font-size: 24px;
51
+ line-height: 30px;
52
+ }
53
+ }
54
+
55
+ p {
56
+ font-size: 14px;
57
+ line-height: 18px;
58
+ margin: 24px 0 0;
59
+
60
+ @media screen and (min-width: $break-lg-min) {
61
+ font-size: 16px;
62
+ line-height: 20px;
63
+ }
64
+ }
65
+ }
66
+ </style>
@@ -0,0 +1,7 @@
1
+ type __VLS_Props = {
2
+ title: string;
3
+ description?: string;
4
+ tooltip?: string;
5
+ };
6
+ declare const _default: import("vue").DefineComponent<__VLS_Props, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<__VLS_Props> & Readonly<{}>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
7
+ export default _default;
@@ -0,0 +1,68 @@
1
+ <template>
2
+ <Teleport
3
+ to="body"
4
+ :disabled="viewport.isGreaterOrEquals('lg')"
5
+ >
6
+ <div class="btn-container">
7
+ <CjaButton
8
+ color="orange"
9
+ :loading="loading"
10
+ :icon-right="icon"
11
+ @click="$emit('btn:click')"
12
+ >
13
+ <slot>{{ t("btn.submit") }}</slot>
14
+ </CjaButton>
15
+ </div>
16
+ </Teleport>
17
+ </template>
18
+
19
+ <script setup>
20
+ const { t } = useI18n();
21
+ const viewport = useViewport();
22
+ defineProps({
23
+ loading: { type: Boolean, required: false },
24
+ icon: { type: null, required: false }
25
+ });
26
+ defineEmits(["btn:click"]);
27
+ </script>
28
+
29
+ <style lang="scss" scoped>
30
+ .btn-container {
31
+ position: fixed;
32
+ bottom: 0;
33
+ left: 0;
34
+ width: 100%;
35
+ padding: 20px 15px;
36
+ background-color: $white;
37
+ display: flex;
38
+ flex-direction: row;
39
+ justify-content: center;
40
+ box-shadow: $box-shadow-m;
41
+ z-index: 2;
42
+
43
+ @media screen and (min-width: $break-lg-min) {
44
+ position: static;
45
+ margin: 32px 0 0;
46
+ padding: 0;
47
+ box-shadow: none;
48
+ }
49
+
50
+ .cja-btn {
51
+ width: 100%;
52
+
53
+ @media screen and (min-width: $break-xs-min) {
54
+ max-width: 200px;
55
+ }
56
+ }
57
+ }
58
+ </style>
59
+
60
+ <i18n lang="json">
61
+ {
62
+ "pt": {
63
+ "btn": {
64
+ "submit": "Continuar"
65
+ }
66
+ }
67
+ }
68
+ </i18n>
@@ -0,0 +1,21 @@
1
+ import type { Icon } from '#imports';
2
+ type __VLS_Props = {
3
+ loading?: boolean;
4
+ icon?: Icon;
5
+ };
6
+ declare var __VLS_14: {};
7
+ type __VLS_Slots = {} & {
8
+ default?: (props: typeof __VLS_14) => any;
9
+ };
10
+ declare const __VLS_component: import("vue").DefineComponent<__VLS_Props, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {
11
+ "btn:click": (...args: any[]) => void;
12
+ }, string, import("vue").PublicProps, Readonly<__VLS_Props> & Readonly<{
13
+ "onBtn:click"?: ((...args: any[]) => any) | undefined;
14
+ }>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
15
+ declare const _default: __VLS_WithSlots<typeof __VLS_component, __VLS_Slots>;
16
+ export default _default;
17
+ type __VLS_WithSlots<T, S> = T & {
18
+ new (): {
19
+ $slots: S;
20
+ };
21
+ };
@@ -1,6 +1,5 @@
1
- import type { GtmSupport } from '@gtm-support/vue-gtm';
2
- export declare const useCjaGtm: (gtm: GtmSupport | undefined, gtmOptions: {
3
- category: string;
1
+ import type { JourneyLocation, VerticalCode } from '../types/JourneyConfig.js';
2
+ export declare const useCjaGtm: (vertical: VerticalCode, source: JourneyLocation | {
4
3
  formType: string;
5
4
  location: string;
6
5
  }) => {
@@ -1,18 +1,48 @@
1
- export const useCjaGtm = (gtm, gtmOptions) => {
1
+ import { useGtm } from "@gtm-support/vue-gtm";
2
+ export const useCjaGtm = (vertical, source) => {
3
+ const gtm = useGtm();
4
+ const category = (() => {
5
+ switch (vertical) {
6
+ case "HL":
7
+ return "mortgage";
8
+ case "PL":
9
+ return "personal-loan new-funnel";
10
+ case "EN":
11
+ return "energy";
12
+ case "BB":
13
+ return "broadband";
14
+ case "CI":
15
+ return "car-insurance-funnel";
16
+ }
17
+ })();
18
+ const { formType, location } = (() => {
19
+ switch (source) {
20
+ case "funnel":
21
+ return { formType: "FUNNEL", location: "Funnel" };
22
+ case "results":
23
+ return { formType: "RESULTS", location: "Results" };
24
+ case "checkout":
25
+ return { formType: "CHECKOUT", location: "Checkout" };
26
+ case "contact":
27
+ return { formType: "CONTACT", location: "Contact" };
28
+ default:
29
+ return source;
30
+ }
31
+ })();
2
32
  const trackStepEvent = (options) => {
3
33
  gtm?.trackEvent({
4
- event: `${gtmOptions.location} Step`,
34
+ event: `${location} Step`,
5
35
  eventDetails: {
6
- category: gtmOptions.category,
36
+ category,
7
37
  value: options.stepName,
8
38
  noninteraction: false,
9
- location: gtmOptions.location,
39
+ location,
10
40
  action: options.action,
11
41
  properties: {
12
42
  stepName: options.stepName,
13
43
  stepNumber: options.stepNumber,
14
44
  stepDetails: options.stepDetails,
15
- formType: gtmOptions.formType
45
+ formType
16
46
  }
17
47
  }
18
48
  });
@@ -21,8 +51,8 @@ export const useCjaGtm = (gtm, gtmOptions) => {
21
51
  gtm?.trackEvent({
22
52
  event: "Impressions",
23
53
  eventDetails: {
24
- category: gtmOptions.category,
25
- location: gtmOptions.location,
54
+ category,
55
+ location,
26
56
  action: "Results Impressions",
27
57
  loadTime: options.time || 0,
28
58
  properties: {
@@ -34,7 +64,7 @@ export const useCjaGtm = (gtm, gtmOptions) => {
34
64
  id: p.productId,
35
65
  brand: p.provider,
36
66
  position: i + 1,
37
- category: gtmOptions.category,
67
+ category,
38
68
  list: options.listing,
39
69
  price: "5.00",
40
70
  quantity: 1
@@ -49,8 +79,8 @@ export const useCjaGtm = (gtm, gtmOptions) => {
49
79
  eventDetails: {
50
80
  label: options.product.cardTitle,
51
81
  source: `Conversion - ${options.source}`,
52
- category: gtmOptions.category,
53
- location: gtmOptions.location,
82
+ category,
83
+ location,
54
84
  action: "Results Purchase",
55
85
  properties: {
56
86
  list: options.listing
@@ -65,7 +95,7 @@ export const useCjaGtm = (gtm, gtmOptions) => {
65
95
  action: "purchase"
66
96
  },
67
97
  products: (() => {
68
- switch (gtmOptions.category) {
98
+ switch (category) {
69
99
  case "energy":
70
100
  return [
71
101
  {
@@ -74,7 +104,7 @@ export const useCjaGtm = (gtm, gtmOptions) => {
74
104
  brand: options.product.provider,
75
105
  position: options.product.index + 1,
76
106
  dimension3: options.source,
77
- category: gtmOptions.category,
107
+ category,
78
108
  list: options.listing,
79
109
  price: "5.00",
80
110
  quantity: 1
@@ -91,7 +121,7 @@ export const useCjaGtm = (gtm, gtmOptions) => {
91
121
  approvalRate: "unavailable",
92
122
  dimension3: options.source,
93
123
  dimension6: `apr:${options.product.attributes.taeg}, totalRepayment:${options.product.attributes.mtic}, monthlyRepayment:${options.product.attributes.installment}`,
94
- category: gtmOptions.category,
124
+ category,
95
125
  list: options.listing,
96
126
  price: "5.00",
97
127
  quantity: 1
@@ -99,7 +129,7 @@ export const useCjaGtm = (gtm, gtmOptions) => {
99
129
  ];
100
130
  default:
101
131
  console.error(
102
- `Unrecognized category ${gtmOptions.category}, implement vertical specific gtm product`
132
+ `Unrecognized category ${category}, implement vertical specific gtm product`
103
133
  );
104
134
  return [{}];
105
135
  }
@@ -113,8 +143,8 @@ export const useCjaGtm = (gtm, gtmOptions) => {
113
143
  gtm?.trackEvent({
114
144
  event: "productDetail",
115
145
  eventDetails: {
116
- category: gtmOptions.category,
117
- location: gtmOptions.location,
146
+ category,
147
+ location,
118
148
  action: "Results Detail",
119
149
  properties: {
120
150
  list: options.listing
@@ -131,7 +161,7 @@ export const useCjaGtm = (gtm, gtmOptions) => {
131
161
  id: options.product.productId,
132
162
  brand: options.product.provider,
133
163
  position: options.product.index + 1,
134
- category: gtmOptions.category,
164
+ category,
135
165
  list: options.listing,
136
166
  price: "5.00",
137
167
  quantity: 1
@@ -0,0 +1,10 @@
1
+ import { type ComputedRef } from 'vue';
2
+ import type { StepData } from '../types/JourneyConfig.js';
3
+ export declare const useFunnelConfig: (structure: ComputedRef<Map<string, string[]>>) => {
4
+ steps: ComputedRef<string[]>;
5
+ currentStep: ComputedRef<StepData>;
6
+ totalSteps: ComputedRef<number>;
7
+ getStep: (step: string | number | undefined) => StepData | undefined;
8
+ goNextStep: () => Promise<void>;
9
+ goPrevStep: () => Promise<void>;
10
+ };
@@ -0,0 +1,50 @@
1
+ import { navigateTo, useRoute, useRouter } from "#app";
2
+ import { computed } from "vue";
3
+ export const useFunnelConfig = (structure) => {
4
+ const route = useRouter().currentRoute;
5
+ const steps = computed(() => Array.from(structure.value.keys()));
6
+ const currentStep = computed(() => getStep(route.value.path.split("/").reverse()[0]) || currentStep.value);
7
+ const totalSteps = computed(() => structure.value.size);
8
+ const getStep = (step) => {
9
+ if (step === void 0) return;
10
+ const stepName = typeof step == "string" ? step : steps.value[step];
11
+ const stepFields = stepName && structure.value.get(stepName);
12
+ return stepName && stepFields ? {
13
+ index: steps.value.indexOf(stepName),
14
+ number: steps.value.indexOf(stepName) + 1,
15
+ name: stepName,
16
+ path: route.value.path.replace(/[^/]+(?=\/$|$)/g, stepName),
17
+ fields: stepFields
18
+ } : void 0;
19
+ };
20
+ const goNextStep = async () => {
21
+ if (currentStep.value) {
22
+ const nextStep = getStep(currentStep.value.index + 1);
23
+ if (nextStep) {
24
+ await navigateTo({
25
+ path: nextStep.path,
26
+ query: useRoute().query
27
+ });
28
+ }
29
+ }
30
+ };
31
+ const goPrevStep = async () => {
32
+ if (currentStep.value) {
33
+ const nextStep = getStep(currentStep.value.index - 1);
34
+ if (nextStep) {
35
+ await navigateTo({
36
+ path: nextStep.path,
37
+ query: useRoute().query
38
+ });
39
+ }
40
+ }
41
+ };
42
+ return {
43
+ steps,
44
+ currentStep,
45
+ totalSteps,
46
+ getStep,
47
+ goNextStep,
48
+ goPrevStep
49
+ };
50
+ };
@@ -0,0 +1,11 @@
1
+ import type { JourneyLocation } from '../types/JourneyConfig.js';
2
+ export declare const useJourneyConfig: (location: JourneyLocation, options: {
3
+ locations: JourneyLocation[];
4
+ initialStep: string;
5
+ lastUrls: Map<JourneyLocation, string>;
6
+ }) => {
7
+ locations: JourneyLocation[];
8
+ initialStep: string;
9
+ lastUrls: Map<JourneyLocation, string>;
10
+ previousUrl: string | undefined;
11
+ };
@@ -0,0 +1,13 @@
1
+ export const useJourneyConfig = (location, options) => {
2
+ const {
3
+ locations,
4
+ initialStep,
5
+ lastUrls
6
+ } = options;
7
+ return {
8
+ locations,
9
+ initialStep,
10
+ lastUrls,
11
+ previousUrl: lastUrls.get(locations[locations.indexOf(location) - 1])
12
+ };
13
+ };
@@ -0,0 +1,9 @@
1
+ export type VerticalCode = 'HL' | 'PL' | 'EN' | 'BB' | 'CI';
2
+ export type JourneyLocation = 'funnel' | 'results' | 'checkout' | 'contact';
3
+ export type StepData = {
4
+ index: number;
5
+ number: number;
6
+ name: string;
7
+ path: string;
8
+ fields: string[];
9
+ };
@@ -1,8 +1,8 @@
1
- export declare const applyProductData: (origin: string, options: {
1
+ export declare const applyProductData: (options: {
2
2
  journeyId: string | undefined;
3
3
  index: number;
4
4
  path: string;
5
5
  productName: string;
6
6
  productId: string;
7
7
  providerId: string;
8
- }) => Promise<Response>;
8
+ }) => void;
@@ -1,14 +1,18 @@
1
- export const applyProductData = (origin, options) => fetch(new URL("/core/apis/data/applyProductData", origin), {
2
- method: "POST",
3
- body: JSON.stringify({
4
- action: "OPEN_APPLICATION_FORM",
5
- intent: "apply",
6
- journeyId: options.journeyId,
7
- path: options.path,
8
- position: options.index,
9
- offerSelected: options.productName,
10
- cggId: options.productId,
11
- providerCggId: options.providerId,
12
- has_been_clicked: true
13
- })
14
- });
1
+ import { useRuntimeConfig } from "#imports";
2
+ export const applyProductData = (options) => {
3
+ const { apiURL } = useRuntimeConfig().public;
4
+ fetch(new URL("/core/apis/data/applyProductData", apiURL), {
5
+ method: "POST",
6
+ body: JSON.stringify({
7
+ action: "OPEN_APPLICATION_FORM",
8
+ intent: "apply",
9
+ journeyId: options.journeyId,
10
+ path: options.path,
11
+ position: options.index,
12
+ offerSelected: options.productName,
13
+ cggId: options.productId,
14
+ providerCggId: options.providerId,
15
+ has_been_clicked: true
16
+ })
17
+ });
18
+ };
@@ -1,4 +1,4 @@
1
- export declare const updateForm: (origin: string, options: {
1
+ export declare const updateForm: (options: {
2
2
  journeyId: string | undefined;
3
3
  step: number;
4
4
  payload: object;
@@ -1,22 +1,26 @@
1
- export const updateForm = (origin, options) => fetch(new URL("/core/apis/data/updateForm", origin), {
2
- method: "PUT",
3
- body: JSON.stringify(
4
- Object.fromEntries(
5
- Object.entries({
6
- eventType: options.eventType || "STEP_CHANGED",
7
- isActionEvent: true,
8
- journeyId: options.journeyId,
9
- stepName: options.stepName,
10
- isCompleted: options.isCompleted || false,
11
- sentToDialer: options.sentToDialer || true,
12
- lastStepNumber: options.step,
13
- lastStepType: options.formType,
14
- lastStepUrl: window.location.pathname + window.location.search + window.location.hash,
15
- data: JSON.stringify({
16
- ...options.payload,
17
- formType: options.formType
18
- })
19
- }).filter(([_, v]) => v != null)
1
+ import { useRuntimeConfig } from "#imports";
2
+ export const updateForm = (options) => {
3
+ const { apiURL } = useRuntimeConfig().public;
4
+ return fetch(new URL("/core/apis/data/updateForm", apiURL), {
5
+ method: "PUT",
6
+ body: JSON.stringify(
7
+ Object.fromEntries(
8
+ Object.entries({
9
+ eventType: options.eventType || "STEP_CHANGED",
10
+ isActionEvent: true,
11
+ journeyId: options.journeyId,
12
+ stepName: options.stepName,
13
+ isCompleted: options.isCompleted || false,
14
+ sentToDialer: options.sentToDialer || true,
15
+ lastStepNumber: options.step,
16
+ lastStepType: options.formType,
17
+ lastStepUrl: window.location.pathname + window.location.search + window.location.hash,
18
+ data: JSON.stringify({
19
+ ...options.payload,
20
+ formType: options.formType
21
+ })
22
+ }).filter(([_, v]) => v != null)
23
+ )
20
24
  )
21
- )
22
- });
25
+ });
26
+ };
@@ -1,4 +1,4 @@
1
- export declare const updateMarketingConsent: (apiUrl: string, options: {
1
+ export declare const updateMarketingConsent: (options: {
2
2
  email: string;
3
3
  journeyId?: string;
4
4
  }) => Promise<Response>;
@@ -1,8 +1,12 @@
1
- export const updateMarketingConsent = (apiUrl, options) => fetch(new URL("/core/apis/data/verifyConsent", apiUrl), {
2
- method: "POST",
3
- body: JSON.stringify({
4
- email: options.email,
5
- currentPageUrl: location.origin + location.pathname,
6
- journeyId: options.journeyId
7
- })
8
- });
1
+ import { useRuntimeConfig } from "#imports";
2
+ export const updateMarketingConsent = (options) => {
3
+ const { apiURL } = useRuntimeConfig().public;
4
+ return fetch(new URL("/core/apis/data/verifyConsent", apiURL), {
5
+ method: "POST",
6
+ body: JSON.stringify({
7
+ email: options.email,
8
+ currentPageUrl: location.origin + location.pathname,
9
+ journeyId: options.journeyId
10
+ })
11
+ });
12
+ };
@@ -5,5 +5,4 @@ export declare const uploadFile: (options: {
5
5
  fileName: string;
6
6
  extension: string;
7
7
  bucketName: string;
8
- apiUrl: string;
9
8
  }) => Promise<Response>;
@@ -1,4 +1,6 @@
1
+ import { useRuntimeConfig } from "#imports";
1
2
  export const uploadFile = (options) => {
3
+ const { apiURL } = useRuntimeConfig().public;
2
4
  const data = new FormData();
3
5
  data.append(
4
6
  "path",
@@ -6,7 +8,7 @@ export const uploadFile = (options) => {
6
8
  );
7
9
  data.append("file", options.file);
8
10
  data.append("bucketName", options.bucketName);
9
- return fetch(`${options.apiUrl}/core/apis/data/saveFileToS3`, {
11
+ return fetch(new URL("/core/apis/data/saveFileToS3", apiURL), {
10
12
  method: "POST",
11
13
  body: data
12
14
  });
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "cja-phoenix",
3
- "version": "1.0.11",
3
+ "version": "1.0.12",
4
4
  "description": "Phoenix utility",
5
5
  "repository": "comparaja/phoenix",
6
6
  "license": "MIT",
@@ -35,8 +35,10 @@
35
35
  },
36
36
  "dependencies": {
37
37
  "@nuxt/kit": "^4.0.3",
38
+ "@nuxtjs/i18n": "^9.5.6",
38
39
  "@popperjs/core": "^2.11.8",
39
40
  "maska": "^3.0.4",
41
+ "nuxt-viewport": "^2.3.1",
40
42
  "v-calendar": "^3.1.2",
41
43
  "vee-validate": "^4.14.7",
42
44
  "vue-tippy": "^6.5.0",
@@ -1,12 +0,0 @@
1
- export type FunnelStepBase = Record<string, {
2
- component: any;
3
- fields?: string[] | ((loanType: string) => string[]);
4
- }>;
5
- export type FunnelStepConfig = {
6
- step: {
7
- current: number;
8
- max: number;
9
- };
10
- component: any;
11
- fields: string[];
12
- };
@@ -1 +0,0 @@
1
- export * from './mediaBreakpoints.js';
@@ -1 +0,0 @@
1
- export * from "./mediaBreakpoints.js";