sprintify-ui 0.0.204 → 0.1.0

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 (30) hide show
  1. package/dist/sprintify-ui.es.js +19691 -14695
  2. package/dist/types/src/components/BaseAddressForm.vue.d.ts +24 -3
  3. package/dist/types/src/components/BaseMediaGallery.vue.d.ts +64 -0
  4. package/dist/types/src/components/BaseMediaGalleryItem.vue.d.ts +45 -0
  5. package/dist/types/src/components/BaseMediaLibrary.vue.d.ts +37 -3
  6. package/dist/types/src/components/BaseMediaList.vue.d.ts +47 -0
  7. package/dist/types/src/components/BaseMediaListItem.vue.d.ts +47 -0
  8. package/dist/types/src/components/BaseMediaPictures.vue.d.ts +55 -0
  9. package/dist/types/src/components/BaseMediaPicturesItem.vue.d.ts +54 -0
  10. package/dist/types/src/index.d.ts +8 -0
  11. package/dist/types/src/types/Media.d.ts +1 -0
  12. package/dist/types/src/types/UploadedFile.d.ts +1 -0
  13. package/dist/types/src/types/index.d.ts +2 -4
  14. package/package.json +3 -2
  15. package/src/components/BaseAddressForm.vue +27 -6
  16. package/src/components/BaseMediaGallery.vue +95 -0
  17. package/src/components/BaseMediaGalleryItem.vue +92 -0
  18. package/src/components/BaseMediaItem.vue +1 -1
  19. package/src/components/BaseMediaLibrary.stories.js +181 -19
  20. package/src/components/BaseMediaLibrary.vue +94 -102
  21. package/src/components/BaseMediaList.vue +70 -0
  22. package/src/components/BaseMediaListItem.vue +171 -0
  23. package/src/components/BaseMediaPictures.vue +66 -0
  24. package/src/components/BaseMediaPicturesItem.vue +93 -0
  25. package/src/components/BaseMediaPreview.vue +16 -4
  26. package/src/lang/en.json +2 -0
  27. package/src/lang/fr.json +2 -0
  28. package/src/types/Media.ts +1 -0
  29. package/src/types/UploadedFile.ts +1 -0
  30. package/src/types/index.ts +2 -4
@@ -1,7 +1,14 @@
1
1
  import { Country } from '@/types/Country';
2
2
  import { Region } from '@/types/Region';
3
3
  declare const _default: import("vue").DefineComponent<__VLS_WithDefaults<__VLS_TypePropsToRuntimeProps<{
4
- modelValue: Record<string, string | number | null | undefined> | null | undefined;
4
+ modelValue: {
5
+ address_1?: string | null | undefined;
6
+ address_2?: string | null | undefined;
7
+ postal_code?: string | null | undefined;
8
+ city?: string | null | undefined;
9
+ region?: string | null | undefined;
10
+ country?: string | null | undefined;
11
+ } | null | undefined;
5
12
  prefix: string | null;
6
13
  countries?: Country[] | undefined;
7
14
  regions?: Region[] | undefined;
@@ -13,7 +20,14 @@ declare const _default: import("vue").DefineComponent<__VLS_WithDefaults<__VLS_T
13
20
  regions(): never[];
14
21
  restrictCountry: boolean;
15
22
  }>, {}, unknown, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, "update:model-value"[], "update:model-value", import("vue").VNodeProps & import("vue").AllowedComponentProps & import("vue").ComponentCustomProps, Readonly<import("vue").ExtractPropTypes<__VLS_WithDefaults<__VLS_TypePropsToRuntimeProps<{
16
- modelValue: Record<string, string | number | null | undefined> | null | undefined;
23
+ modelValue: {
24
+ address_1?: string | null | undefined;
25
+ address_2?: string | null | undefined;
26
+ postal_code?: string | null | undefined;
27
+ city?: string | null | undefined;
28
+ region?: string | null | undefined;
29
+ country?: string | null | undefined;
30
+ } | null | undefined;
17
31
  prefix: string | null;
18
32
  countries?: Country[] | undefined;
19
33
  regions?: Region[] | undefined;
@@ -29,7 +43,14 @@ declare const _default: import("vue").DefineComponent<__VLS_WithDefaults<__VLS_T
29
43
  }, {
30
44
  countries: Country[];
31
45
  regions: Region[];
32
- modelValue: Record<string, string | number | null | undefined> | null | undefined;
46
+ modelValue: {
47
+ address_1?: string | null | undefined;
48
+ address_2?: string | null | undefined;
49
+ postal_code?: string | null | undefined;
50
+ city?: string | null | undefined;
51
+ region?: string | null | undefined;
52
+ country?: string | null | undefined;
53
+ } | null | undefined;
33
54
  prefix: string | null;
34
55
  restrictCountry: boolean;
35
56
  }>;
@@ -0,0 +1,64 @@
1
+ import { Media } from '@/types/Media';
2
+ import { UploadedFile } from '@/types/UploadedFile';
3
+ import { PropType } from 'vue';
4
+ declare const _default: import("vue").DefineComponent<{
5
+ modelValue: {
6
+ required: true;
7
+ type: PropType<(UploadedFile | Media)[]>;
8
+ };
9
+ showRemove: {
10
+ default: boolean;
11
+ type: BooleanConstructor;
12
+ };
13
+ draggable: {
14
+ default: boolean;
15
+ type: BooleanConstructor;
16
+ };
17
+ size: {
18
+ default: number;
19
+ type: NumberConstructor;
20
+ };
21
+ disabled: {
22
+ default: boolean;
23
+ type: BooleanConstructor;
24
+ };
25
+ itemMaxWidth: {
26
+ default: number;
27
+ type: NumberConstructor;
28
+ };
29
+ }, {}, unknown, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, ("update:modelValue" | "remove")[], "update:modelValue" | "remove", import("vue").VNodeProps & import("vue").AllowedComponentProps & import("vue").ComponentCustomProps, Readonly<import("vue").ExtractPropTypes<{
30
+ modelValue: {
31
+ required: true;
32
+ type: PropType<(UploadedFile | Media)[]>;
33
+ };
34
+ showRemove: {
35
+ default: boolean;
36
+ type: BooleanConstructor;
37
+ };
38
+ draggable: {
39
+ default: boolean;
40
+ type: BooleanConstructor;
41
+ };
42
+ size: {
43
+ default: number;
44
+ type: NumberConstructor;
45
+ };
46
+ disabled: {
47
+ default: boolean;
48
+ type: BooleanConstructor;
49
+ };
50
+ itemMaxWidth: {
51
+ default: number;
52
+ type: NumberConstructor;
53
+ };
54
+ }>> & {
55
+ "onUpdate:modelValue"?: ((...args: any[]) => any) | undefined;
56
+ onRemove?: ((...args: any[]) => any) | undefined;
57
+ }, {
58
+ disabled: boolean;
59
+ size: number;
60
+ showRemove: boolean;
61
+ draggable: boolean;
62
+ itemMaxWidth: number;
63
+ }>;
64
+ export default _default;
@@ -0,0 +1,45 @@
1
+ import { Media } from '@/types/Media';
2
+ import { UploadedFile } from '@/types/UploadedFile';
3
+ import { PropType } from 'vue';
4
+ declare const _default: import("vue").DefineComponent<{
5
+ media: {
6
+ required: true;
7
+ type: PropType<UploadedFile | Media>;
8
+ };
9
+ showRemove: {
10
+ default: boolean;
11
+ type: BooleanConstructor;
12
+ };
13
+ draggable: {
14
+ default: boolean;
15
+ type: BooleanConstructor;
16
+ };
17
+ disabled: {
18
+ default: boolean;
19
+ type: BooleanConstructor;
20
+ };
21
+ }, {}, unknown, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, "remove"[], "remove", import("vue").VNodeProps & import("vue").AllowedComponentProps & import("vue").ComponentCustomProps, Readonly<import("vue").ExtractPropTypes<{
22
+ media: {
23
+ required: true;
24
+ type: PropType<UploadedFile | Media>;
25
+ };
26
+ showRemove: {
27
+ default: boolean;
28
+ type: BooleanConstructor;
29
+ };
30
+ draggable: {
31
+ default: boolean;
32
+ type: BooleanConstructor;
33
+ };
34
+ disabled: {
35
+ default: boolean;
36
+ type: BooleanConstructor;
37
+ };
38
+ }>> & {
39
+ onRemove?: ((...args: any[]) => any) | undefined;
40
+ }, {
41
+ disabled: boolean;
42
+ showRemove: boolean;
43
+ draggable: boolean;
44
+ }>;
45
+ export default _default;
@@ -4,7 +4,7 @@ import { BaseCropperConfig, MediaLibraryPayload } from '@/types';
4
4
  declare const _default: __VLS_WithTemplateSlots<import("vue").DefineComponent<{
5
5
  modelValue: {
6
6
  default: undefined;
7
- type: PropType<MediaLibraryPayload | null | undefined>;
7
+ type: PropType<MediaLibraryPayload>;
8
8
  };
9
9
  name: {
10
10
  default: undefined;
@@ -54,10 +54,22 @@ declare const _default: __VLS_WithTemplateSlots<import("vue").DefineComponent<{
54
54
  default: undefined;
55
55
  type: PropType<boolean | BaseCropperConfig | null>;
56
56
  };
57
+ draggable: {
58
+ default: boolean;
59
+ type: BooleanConstructor;
60
+ };
61
+ listProps: {
62
+ default: undefined;
63
+ type: PropType<Record<string, unknown>>;
64
+ };
65
+ layout: {
66
+ default: string;
67
+ type: PropType<"list" | "gallery" | "images">;
68
+ };
57
69
  }, {}, unknown, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, ("update:modelValue" | "upload:start" | "upload:success" | "upload:fail" | "upload:end")[], "update:modelValue" | "upload:start" | "upload:success" | "upload:fail" | "upload:end", import("vue").VNodeProps & import("vue").AllowedComponentProps & import("vue").ComponentCustomProps, Readonly<import("vue").ExtractPropTypes<{
58
70
  modelValue: {
59
71
  default: undefined;
60
- type: PropType<MediaLibraryPayload | null | undefined>;
72
+ type: PropType<MediaLibraryPayload>;
61
73
  };
62
74
  name: {
63
75
  default: undefined;
@@ -107,6 +119,18 @@ declare const _default: __VLS_WithTemplateSlots<import("vue").DefineComponent<{
107
119
  default: undefined;
108
120
  type: PropType<boolean | BaseCropperConfig | null>;
109
121
  };
122
+ draggable: {
123
+ default: boolean;
124
+ type: BooleanConstructor;
125
+ };
126
+ listProps: {
127
+ default: undefined;
128
+ type: PropType<Record<string, unknown>>;
129
+ };
130
+ layout: {
131
+ default: string;
132
+ type: PropType<"list" | "gallery" | "images">;
133
+ };
110
134
  }>> & {
111
135
  "onUpdate:modelValue"?: ((...args: any[]) => any) | undefined;
112
136
  "onUpload:start"?: ((...args: any[]) => any) | undefined;
@@ -120,15 +144,25 @@ declare const _default: __VLS_WithTemplateSlots<import("vue").DefineComponent<{
120
144
  disabled: boolean;
121
145
  max: number;
122
146
  min: number;
123
- modelValue: MediaLibraryPayload | null | undefined;
147
+ modelValue: MediaLibraryPayload;
124
148
  hasError: boolean;
149
+ layout: "list" | "gallery" | "images";
125
150
  maxSize: number;
126
151
  acceptedExtensions: string[];
152
+ draggable: boolean;
127
153
  currentMedia: Media[];
128
154
  uploadUrl: string;
129
155
  pickerComponent: "BaseFilePicker" | "BaseFilePickerCrop";
156
+ listProps: Record<string, unknown>;
130
157
  }>, {
131
158
  default: (_: any) => any;
159
+ list: (_: {
160
+ modelValue: MediaLibraryPayload;
161
+ disabled: boolean;
162
+ draggable: boolean;
163
+ remove: (index: number, length?: number) => void;
164
+ 'update:model-value': (modelValue: MediaLibraryPayload) => void;
165
+ }) => any;
132
166
  }>;
133
167
  export default _default;
134
168
  type __VLS_WithTemplateSlots<T, S> = T & {
@@ -0,0 +1,47 @@
1
+ import { Media } from '@/types/Media';
2
+ import { UploadedFile } from '@/types/UploadedFile';
3
+ import { PropType } from 'vue';
4
+ declare const _default: import("vue").DefineComponent<{
5
+ modelValue: {
6
+ required: true;
7
+ type: PropType<(UploadedFile | Media)[]>;
8
+ };
9
+ showRemove: {
10
+ default: boolean;
11
+ type: BooleanConstructor;
12
+ };
13
+ disabled: {
14
+ default: boolean;
15
+ type: BooleanConstructor;
16
+ };
17
+ draggable: {
18
+ default: boolean;
19
+ type: BooleanConstructor;
20
+ };
21
+ }, {}, unknown, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, ("update:modelValue" | "remove" | "save:name")[], "update:modelValue" | "remove" | "save:name", import("vue").VNodeProps & import("vue").AllowedComponentProps & import("vue").ComponentCustomProps, Readonly<import("vue").ExtractPropTypes<{
22
+ modelValue: {
23
+ required: true;
24
+ type: PropType<(UploadedFile | Media)[]>;
25
+ };
26
+ showRemove: {
27
+ default: boolean;
28
+ type: BooleanConstructor;
29
+ };
30
+ disabled: {
31
+ default: boolean;
32
+ type: BooleanConstructor;
33
+ };
34
+ draggable: {
35
+ default: boolean;
36
+ type: BooleanConstructor;
37
+ };
38
+ }>> & {
39
+ "onUpdate:modelValue"?: ((...args: any[]) => any) | undefined;
40
+ onRemove?: ((...args: any[]) => any) | undefined;
41
+ "onSave:name"?: ((...args: any[]) => any) | undefined;
42
+ }, {
43
+ disabled: boolean;
44
+ showRemove: boolean;
45
+ draggable: boolean;
46
+ }>;
47
+ export default _default;
@@ -0,0 +1,47 @@
1
+ import { Media } from '@/types/Media';
2
+ import { UploadedFile } from '@/types/UploadedFile';
3
+ import { PropType } from 'vue';
4
+ declare const _default: import("vue").DefineComponent<{
5
+ media: {
6
+ required: true;
7
+ type: PropType<UploadedFile | Media>;
8
+ };
9
+ disabled: {
10
+ default: boolean;
11
+ type: BooleanConstructor;
12
+ };
13
+ showRemove: {
14
+ default: boolean;
15
+ type: BooleanConstructor;
16
+ };
17
+ draggable: {
18
+ default: boolean;
19
+ type: BooleanConstructor;
20
+ };
21
+ }, {}, unknown, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, ("remove" | "update" | "save:name")[], "remove" | "update" | "save:name", import("vue").VNodeProps & import("vue").AllowedComponentProps & import("vue").ComponentCustomProps, Readonly<import("vue").ExtractPropTypes<{
22
+ media: {
23
+ required: true;
24
+ type: PropType<UploadedFile | Media>;
25
+ };
26
+ disabled: {
27
+ default: boolean;
28
+ type: BooleanConstructor;
29
+ };
30
+ showRemove: {
31
+ default: boolean;
32
+ type: BooleanConstructor;
33
+ };
34
+ draggable: {
35
+ default: boolean;
36
+ type: BooleanConstructor;
37
+ };
38
+ }>> & {
39
+ onUpdate?: ((...args: any[]) => any) | undefined;
40
+ onRemove?: ((...args: any[]) => any) | undefined;
41
+ "onSave:name"?: ((...args: any[]) => any) | undefined;
42
+ }, {
43
+ disabled: boolean;
44
+ showRemove: boolean;
45
+ draggable: boolean;
46
+ }>;
47
+ export default _default;
@@ -0,0 +1,55 @@
1
+ import { Media } from '@/types/Media';
2
+ import { UploadedFile } from '@/types/UploadedFile';
3
+ import { PropType } from 'vue';
4
+ declare const _default: import("vue").DefineComponent<{
5
+ modelValue: {
6
+ required: true;
7
+ type: PropType<(UploadedFile | Media)[]>;
8
+ };
9
+ showRemove: {
10
+ default: boolean;
11
+ type: BooleanConstructor;
12
+ };
13
+ disabled: {
14
+ default: boolean;
15
+ type: BooleanConstructor;
16
+ };
17
+ draggable: {
18
+ default: boolean;
19
+ type: BooleanConstructor;
20
+ };
21
+ size: {
22
+ default: number;
23
+ type: NumberConstructor;
24
+ };
25
+ }, {}, unknown, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, ("update:modelValue" | "remove")[], "update:modelValue" | "remove", import("vue").VNodeProps & import("vue").AllowedComponentProps & import("vue").ComponentCustomProps, Readonly<import("vue").ExtractPropTypes<{
26
+ modelValue: {
27
+ required: true;
28
+ type: PropType<(UploadedFile | Media)[]>;
29
+ };
30
+ showRemove: {
31
+ default: boolean;
32
+ type: BooleanConstructor;
33
+ };
34
+ disabled: {
35
+ default: boolean;
36
+ type: BooleanConstructor;
37
+ };
38
+ draggable: {
39
+ default: boolean;
40
+ type: BooleanConstructor;
41
+ };
42
+ size: {
43
+ default: number;
44
+ type: NumberConstructor;
45
+ };
46
+ }>> & {
47
+ "onUpdate:modelValue"?: ((...args: any[]) => any) | undefined;
48
+ onRemove?: ((...args: any[]) => any) | undefined;
49
+ }, {
50
+ disabled: boolean;
51
+ size: number;
52
+ showRemove: boolean;
53
+ draggable: boolean;
54
+ }>;
55
+ export default _default;
@@ -0,0 +1,54 @@
1
+ import { Media } from '@/types/Media';
2
+ import { UploadedFile } from '@/types/UploadedFile';
3
+ import { PropType } from 'vue';
4
+ declare const _default: import("vue").DefineComponent<{
5
+ media: {
6
+ required: true;
7
+ type: PropType<UploadedFile | Media>;
8
+ };
9
+ showRemove: {
10
+ default: boolean;
11
+ type: BooleanConstructor;
12
+ };
13
+ draggable: {
14
+ default: boolean;
15
+ type: BooleanConstructor;
16
+ };
17
+ size: {
18
+ default: number;
19
+ type: NumberConstructor;
20
+ };
21
+ disabled: {
22
+ default: boolean;
23
+ type: BooleanConstructor;
24
+ };
25
+ }, {}, unknown, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, "remove"[], "remove", import("vue").VNodeProps & import("vue").AllowedComponentProps & import("vue").ComponentCustomProps, Readonly<import("vue").ExtractPropTypes<{
26
+ media: {
27
+ required: true;
28
+ type: PropType<UploadedFile | Media>;
29
+ };
30
+ showRemove: {
31
+ default: boolean;
32
+ type: BooleanConstructor;
33
+ };
34
+ draggable: {
35
+ default: boolean;
36
+ type: BooleanConstructor;
37
+ };
38
+ size: {
39
+ default: number;
40
+ type: NumberConstructor;
41
+ };
42
+ disabled: {
43
+ default: boolean;
44
+ type: BooleanConstructor;
45
+ };
46
+ }>> & {
47
+ onRemove?: ((...args: any[]) => any) | undefined;
48
+ }, {
49
+ disabled: boolean;
50
+ size: number;
51
+ showRemove: boolean;
52
+ draggable: boolean;
53
+ }>;
54
+ export default _default;
@@ -35,6 +35,7 @@ declare const messages: {
35
35
  delete_record: string;
36
36
  delete_record_description: string;
37
37
  deselect_all: string;
38
+ download: string;
38
39
  drag_to_reposition: string;
39
40
  drop_or_click_to_upload: string;
40
41
  edit: string;
@@ -65,6 +66,7 @@ declare const messages: {
65
66
  remove: string;
66
67
  remove_file: string;
67
68
  remove_file_description: string;
69
+ save: string;
68
70
  search: string;
69
71
  see_all_notifications: string;
70
72
  select_an_item: string;
@@ -119,6 +121,7 @@ declare const messages: {
119
121
  delete_record: string;
120
122
  delete_record_description: string;
121
123
  deselect_all: string;
124
+ download: string;
122
125
  drag_to_reposition: string;
123
126
  drop_or_click_to_upload: string;
124
127
  edit: string;
@@ -149,6 +152,7 @@ declare const messages: {
149
152
  remove: string;
150
153
  remove_file: string;
151
154
  remove_file_description: string;
155
+ save: string;
152
156
  search: string;
153
157
  see_all_notifications: string;
154
158
  select_an_item: string;
@@ -220,6 +224,7 @@ declare const config: {
220
224
  delete_record: string;
221
225
  delete_record_description: string;
222
226
  deselect_all: string;
227
+ download: string;
223
228
  drag_to_reposition: string;
224
229
  drop_or_click_to_upload: string;
225
230
  edit: string;
@@ -250,6 +255,7 @@ declare const config: {
250
255
  remove: string;
251
256
  remove_file: string;
252
257
  remove_file_description: string;
258
+ save: string;
253
259
  search: string;
254
260
  see_all_notifications: string;
255
261
  select_an_item: string;
@@ -304,6 +310,7 @@ declare const config: {
304
310
  delete_record: string;
305
311
  delete_record_description: string;
306
312
  deselect_all: string;
313
+ download: string;
307
314
  drag_to_reposition: string;
308
315
  drop_or_click_to_upload: string;
309
316
  edit: string;
@@ -334,6 +341,7 @@ declare const config: {
334
341
  remove: string;
335
342
  remove_file: string;
336
343
  remove_file_description: string;
344
+ save: string;
337
345
  search: string;
338
346
  see_all_notifications: string;
339
347
  select_an_item: string;
@@ -1,5 +1,6 @@
1
1
  interface Media {
2
2
  id: string;
3
+ name: string;
3
4
  file_name: string;
4
5
  size: number;
5
6
  mime_type: string;
@@ -1,5 +1,6 @@
1
1
  interface UploadedFile {
2
2
  id: string;
3
+ name: string;
3
4
  file_name: string;
4
5
  size: number;
5
6
  mime_type: string;
@@ -2,6 +2,7 @@ import { RouteLocationRaw } from 'vue-router';
2
2
  import { UploadedFile } from './UploadedFile';
3
3
  import { Notification as AppNotification } from './Notification';
4
4
  import { CropType, ResultOptions } from 'croppie';
5
+ import { Media } from './Media';
5
6
  export type Locales = {
6
7
  [locale: string]: string;
7
8
  };
@@ -31,10 +32,7 @@ export type NormalizedOption = {
31
32
  value: OptionValue;
32
33
  label: string;
33
34
  };
34
- export type MediaLibraryPayload = {
35
- to_remove: string[];
36
- to_add: UploadedFile[];
37
- };
35
+ export type MediaLibraryPayload = (Media | UploadedFile)[];
38
36
  export interface PaginationMetadata {
39
37
  current_page: number;
40
38
  per_page: number;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "sprintify-ui",
3
- "version": "0.0.204",
3
+ "version": "0.1.0",
4
4
  "scripts": {
5
5
  "build": "rimraf dist && vue-tsc && vite build",
6
6
  "build-fast": "rimraf dist && vite build",
@@ -39,7 +39,8 @@
39
39
  },
40
40
  "dependencies": {
41
41
  "@headlessui/vue": "^1.7.9",
42
- "color2k": "^2.0.2"
42
+ "color2k": "^2.0.2",
43
+ "vuedraggable": "^4.1.0"
43
44
  },
44
45
  "devDependencies": {
45
46
  "@babel/core": "^7.20.12",
@@ -101,7 +101,16 @@ import BaseInput from './BaseInput.vue';
101
101
  import BaseSelect from './BaseSelect.vue';
102
102
  import { config } from '..';
103
103
 
104
- type Address = Record<string, string | number | null | undefined>;
104
+ const DEFAULT_COUNTRY = 'ca';
105
+
106
+ type Address = {
107
+ address_1?: string | null;
108
+ address_2?: string | null;
109
+ postal_code?: string | null;
110
+ city?: string | null;
111
+ region?: string | null;
112
+ country?: string | null;
113
+ };
105
114
 
106
115
  const props = withDefaults(
107
116
  defineProps<{
@@ -129,7 +138,7 @@ const props = withDefaults(
129
138
  const emit = defineEmits(['update:model-value']);
130
139
 
131
140
  const normalizedModelValue = computed((): Address => {
132
- const form = cloneDeep(props.modelValue ?? {});
141
+ const form = cloneDeep(props.modelValue ?? {}) as Address;
133
142
  form.address_1 = form.address_1 ?? '';
134
143
  form.address_2 = form.address_2 ?? '';
135
144
  form.city = form.city ?? '';
@@ -139,6 +148,16 @@ const normalizedModelValue = computed((): Address => {
139
148
  return form;
140
149
  });
141
150
 
151
+ const normalizedCountry = computed((): string | null => {
152
+ if (props.restrictCountry) {
153
+ if (normalizedModelValue.value.country) {
154
+ return normalizedModelValue.value.country;
155
+ }
156
+ return DEFAULT_COUNTRY;
157
+ }
158
+ return normalizedModelValue.value.country ?? null;
159
+ });
160
+
142
161
  const countries = computed((): Country[] => {
143
162
  if (props.countries && isArray(props.countries) && props.countries.length) {
144
163
  return props.countries;
@@ -166,7 +185,7 @@ const namePrefix = computed((): string => {
166
185
  return '';
167
186
  });
168
187
 
169
- function update(field: string, value: string) {
188
+ function update(field: keyof Address, value: string) {
170
189
  const newForm = cloneDeep(normalizedModelValue.value);
171
190
  newForm[field] = value;
172
191
  emit('update:model-value', newForm);
@@ -218,9 +237,11 @@ function setAutocompleteOptions() {
218
237
  } as any;
219
238
 
220
239
  if (props.restrictCountry) {
221
- options.componentRestrictions = {
222
- country: props.modelValue?.country ?? 'ca',
223
- };
240
+ if (normalizedCountry.value) {
241
+ options.componentRestrictions = {
242
+ country: normalizedCountry.value,
243
+ };
244
+ }
224
245
  }
225
246
 
226
247
  autocomplete.setOptions(options);