@stachelock/ui 0.6.1 → 0.6.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/composables/index.js +33 -30
- package/dist/index.js +2396 -1152
- package/dist/src/components/UiBanner.d.ts +1 -1
- package/dist/src/components/UiLoadingDots.d.ts +1 -1
- package/dist/src/components/UiMenu.d.ts +1 -1
- package/dist/src/components/UiModal.d.ts +1 -1
- package/dist/src/components/collection-editor/CollectionItemList.d.ts +42 -0
- package/dist/src/components/collection-editor/OrganizationsEditor.d.ts +29 -0
- package/dist/src/components/collection-editor/RelatedNamesEditor.d.ts +26 -0
- package/dist/src/components/collection-editor/SocialLinksEditor.d.ts +26 -0
- package/dist/src/components/collection-editor/index.d.ts +5 -0
- package/dist/src/components/forms/FormFieldWrapper.d.ts +1 -1
- package/dist/src/components/index.d.ts +2 -0
- package/dist/src/components/inputs/AddressInput.d.ts +1 -1
- package/dist/src/components/inputs/ComboboxInput.d.ts +2 -2
- package/dist/src/components/inputs/DatepickerInput.d.ts +12 -12
- package/dist/src/components/inputs/EmailInput.d.ts +2 -2
- package/dist/src/components/inputs/PhoneInput.d.ts +2 -2
- package/dist/src/components/inputs/RichTextInput.d.ts +2 -2
- package/dist/src/components/inputs/SelectInput.d.ts +2 -2
- package/dist/src/components/inputs/SelectTextInput.d.ts +4 -4
- package/dist/src/components/inputs/TagifyInput.d.ts +2 -2
- package/dist/src/components/inputs/TextInput.d.ts +3 -3
- package/dist/src/components/layouts/CardLayout.d.ts +1 -1
- package/dist/src/components/maps/UiInfoWindow.d.ts +2 -2
- package/dist/src/components/maps/UiMap.d.ts +1 -1
- package/dist/src/components/maps/UiMapAll.d.ts +6 -6
- package/dist/src/components/maps/UiMapMarker.d.ts +2 -2
- package/dist/src/components/modals/BaseModal.d.ts +1 -1
- package/dist/src/components/profiles/BentoProfileLayout.d.ts +9 -0
- package/dist/src/components/profiles/ProfileCard.d.ts +30 -0
- package/dist/src/components/profiles/ProfileContactCard.d.ts +12 -0
- package/dist/src/components/profiles/ProfileHeaderCard.d.ts +20 -0
- package/dist/src/components/profiles/ProfileLocationCard.d.ts +17 -0
- package/dist/src/components/profiles/ProfileOrganizationsCard.d.ts +11 -0
- package/dist/src/components/profiles/ProfilePersonalCard.d.ts +10 -0
- package/dist/src/components/profiles/ProfileProfessionalCard.d.ts +11 -0
- package/dist/src/components/profiles/ProfileRelatedNamesCard.d.ts +11 -0
- package/dist/src/components/profiles/index.d.ts +9 -0
- package/dist/src/composables/index.d.ts +1 -0
- package/dist/src/composables/useCollectionEditor.d.ts +64 -0
- package/dist/src/composables/useNotifications.d.ts +4 -4
- package/dist/src/types/collection-editor.d.ts +134 -0
- package/dist/src/types/index.d.ts +2 -0
- package/dist/src/types/profiles.d.ts +149 -0
- package/dist/style.css +1 -1
- package/dist/ui.css +1 -1
- package/dist/useCollectionEditor-BYyoAT0U.js +121 -0
- package/package.json +1 -1
|
@@ -197,11 +197,11 @@ declare const _default: __VLS_WithTemplateSlots<import('vue').DefineComponent<im
|
|
|
197
197
|
marker: MapMarker<unknown>;
|
|
198
198
|
}) => any) | undefined;
|
|
199
199
|
}>, {
|
|
200
|
+
id: string | number;
|
|
200
201
|
label: string | MapMarkerLabel;
|
|
201
202
|
icon: MapMarkerIcon;
|
|
202
|
-
id: string | number;
|
|
203
|
-
data: Record<string, any>;
|
|
204
203
|
title: string;
|
|
204
|
+
data: Record<string, any>;
|
|
205
205
|
color: string;
|
|
206
206
|
animation: "DROP" | "BOUNCE";
|
|
207
207
|
size: "sm" | "md" | "lg";
|
|
@@ -108,9 +108,9 @@ declare const _default: __VLS_WithTemplateSlots<import('vue').DefineComponent<im
|
|
|
108
108
|
cancelText: string;
|
|
109
109
|
confirmText: string;
|
|
110
110
|
confirmTheme: Theme;
|
|
111
|
+
showCloseButton: boolean;
|
|
111
112
|
showFooter: boolean;
|
|
112
113
|
closeOnBackdrop: boolean;
|
|
113
|
-
showCloseButton: boolean;
|
|
114
114
|
}, {}, {}, {}, string, import('vue').ComponentProvideOptions, true, {}, any>, {
|
|
115
115
|
icon?(_: {}): any;
|
|
116
116
|
header?(_: {}): any;
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { ProfileData, ProfilePreviewConfig } from '../../types/profiles';
|
|
2
|
+
interface Props {
|
|
3
|
+
profile: ProfileData;
|
|
4
|
+
config?: ProfilePreviewConfig;
|
|
5
|
+
}
|
|
6
|
+
declare const _default: import('vue').DefineComponent<Props, {}, {}, {}, {}, import('vue').ComponentOptionsMixin, import('vue').ComponentOptionsMixin, {}, string, import('vue').PublicProps, Readonly<Props> & Readonly<{}>, {
|
|
7
|
+
config: ProfilePreviewConfig;
|
|
8
|
+
}, {}, {}, {}, string, import('vue').ComponentProvideOptions, false, {}, HTMLDivElement>;
|
|
9
|
+
export default _default;
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import { Component } from 'vue';
|
|
2
|
+
interface Props {
|
|
3
|
+
/** Card header title */
|
|
4
|
+
title?: string;
|
|
5
|
+
/** Icon component for header */
|
|
6
|
+
icon?: Component;
|
|
7
|
+
/** Animation delay index */
|
|
8
|
+
animationIndex?: number;
|
|
9
|
+
/** Delay per animation index in ms */
|
|
10
|
+
animationDelay?: number;
|
|
11
|
+
/** Remove default padding */
|
|
12
|
+
noPadding?: boolean;
|
|
13
|
+
/** Enable animation */
|
|
14
|
+
animationEnabled?: boolean;
|
|
15
|
+
}
|
|
16
|
+
declare const _default: __VLS_WithTemplateSlots<import('vue').DefineComponent<Props, {}, {}, {}, {}, import('vue').ComponentOptionsMixin, import('vue').ComponentOptionsMixin, {}, string, import('vue').PublicProps, Readonly<Props> & Readonly<{}>, {
|
|
17
|
+
animationDelay: number;
|
|
18
|
+
noPadding: boolean;
|
|
19
|
+
animationIndex: number;
|
|
20
|
+
animationEnabled: boolean;
|
|
21
|
+
}, {}, {}, {}, string, import('vue').ComponentProvideOptions, false, {}, HTMLDivElement>, {
|
|
22
|
+
header?(_: {}): any;
|
|
23
|
+
default?(_: {}): any;
|
|
24
|
+
}>;
|
|
25
|
+
export default _default;
|
|
26
|
+
type __VLS_WithTemplateSlots<T, S> = T & {
|
|
27
|
+
new (): {
|
|
28
|
+
$slots: S;
|
|
29
|
+
};
|
|
30
|
+
};
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
interface Props {
|
|
2
|
+
email?: string;
|
|
3
|
+
phone?: string;
|
|
4
|
+
website?: string;
|
|
5
|
+
animationIndex?: number;
|
|
6
|
+
animationEnabled?: boolean;
|
|
7
|
+
}
|
|
8
|
+
declare const _default: import('vue').DefineComponent<Props, {}, {}, {}, {}, import('vue').ComponentOptionsMixin, import('vue').ComponentOptionsMixin, {}, string, import('vue').PublicProps, Readonly<Props> & Readonly<{}>, {
|
|
9
|
+
animationIndex: number;
|
|
10
|
+
animationEnabled: boolean;
|
|
11
|
+
}, {}, {}, {}, string, import('vue').ComponentProvideOptions, false, {}, HTMLDivElement>;
|
|
12
|
+
export default _default;
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { ProfileImage } from '../../types/profiles';
|
|
2
|
+
interface Props {
|
|
3
|
+
/** Display name */
|
|
4
|
+
name: string;
|
|
5
|
+
/** User's nickname */
|
|
6
|
+
nickname?: string;
|
|
7
|
+
/** Avatar image URL or Cloudinary asset object */
|
|
8
|
+
image?: string | ProfileImage;
|
|
9
|
+
/** User status */
|
|
10
|
+
status?: 'active' | 'inactive' | string;
|
|
11
|
+
/** Animation delay index */
|
|
12
|
+
animationIndex?: number;
|
|
13
|
+
/** Enable animation */
|
|
14
|
+
animationEnabled?: boolean;
|
|
15
|
+
}
|
|
16
|
+
declare const _default: import('vue').DefineComponent<Props, {}, {}, {}, {}, import('vue').ComponentOptionsMixin, import('vue').ComponentOptionsMixin, {}, string, import('vue').PublicProps, Readonly<Props> & Readonly<{}>, {
|
|
17
|
+
animationIndex: number;
|
|
18
|
+
animationEnabled: boolean;
|
|
19
|
+
}, {}, {}, {}, string, import('vue').ComponentProvideOptions, false, {}, HTMLDivElement>;
|
|
20
|
+
export default _default;
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { AddressInfo } from '../../types/profiles';
|
|
2
|
+
interface Props {
|
|
3
|
+
address?: AddressInfo | AddressInfo[];
|
|
4
|
+
latLng?: {
|
|
5
|
+
lat: number;
|
|
6
|
+
lng: number;
|
|
7
|
+
};
|
|
8
|
+
showMap?: boolean;
|
|
9
|
+
animationIndex?: number;
|
|
10
|
+
animationEnabled?: boolean;
|
|
11
|
+
}
|
|
12
|
+
declare const _default: import('vue').DefineComponent<Props, {}, {}, {}, {}, import('vue').ComponentOptionsMixin, import('vue').ComponentOptionsMixin, {}, string, import('vue').PublicProps, Readonly<Props> & Readonly<{}>, {
|
|
13
|
+
animationIndex: number;
|
|
14
|
+
animationEnabled: boolean;
|
|
15
|
+
showMap: boolean;
|
|
16
|
+
}, {}, {}, {}, string, import('vue').ComponentProvideOptions, false, {}, HTMLDivElement>;
|
|
17
|
+
export default _default;
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { OrganizationItem } from '../../types/profiles';
|
|
2
|
+
interface Props {
|
|
3
|
+
organizations?: OrganizationItem[];
|
|
4
|
+
animationIndex?: number;
|
|
5
|
+
animationEnabled?: boolean;
|
|
6
|
+
}
|
|
7
|
+
declare const _default: import('vue').DefineComponent<Props, {}, {}, {}, {}, import('vue').ComponentOptionsMixin, import('vue').ComponentOptionsMixin, {}, string, import('vue').PublicProps, Readonly<Props> & Readonly<{}>, {
|
|
8
|
+
animationIndex: number;
|
|
9
|
+
animationEnabled: boolean;
|
|
10
|
+
}, {}, {}, {}, string, import('vue').ComponentProvideOptions, false, {}, HTMLDivElement>;
|
|
11
|
+
export default _default;
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
interface Props {
|
|
2
|
+
birthday?: Date | string | null;
|
|
3
|
+
animationIndex?: number;
|
|
4
|
+
animationEnabled?: boolean;
|
|
5
|
+
}
|
|
6
|
+
declare const _default: import('vue').DefineComponent<Props, {}, {}, {}, {}, import('vue').ComponentOptionsMixin, import('vue').ComponentOptionsMixin, {}, string, import('vue').PublicProps, Readonly<Props> & Readonly<{}>, {
|
|
7
|
+
animationIndex: number;
|
|
8
|
+
animationEnabled: boolean;
|
|
9
|
+
}, {}, {}, {}, string, import('vue').ComponentProvideOptions, false, {}, HTMLDivElement>;
|
|
10
|
+
export default _default;
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { ProfessionalInfo } from '../../types/profiles';
|
|
2
|
+
interface Props {
|
|
3
|
+
professional?: ProfessionalInfo;
|
|
4
|
+
animationIndex?: number;
|
|
5
|
+
animationEnabled?: boolean;
|
|
6
|
+
}
|
|
7
|
+
declare const _default: import('vue').DefineComponent<Props, {}, {}, {}, {}, import('vue').ComponentOptionsMixin, import('vue').ComponentOptionsMixin, {}, string, import('vue').PublicProps, Readonly<Props> & Readonly<{}>, {
|
|
8
|
+
animationIndex: number;
|
|
9
|
+
animationEnabled: boolean;
|
|
10
|
+
}, {}, {}, {}, string, import('vue').ComponentProvideOptions, false, {}, HTMLDivElement>;
|
|
11
|
+
export default _default;
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { RelatedNameItem } from '../../types/profiles';
|
|
2
|
+
interface Props {
|
|
3
|
+
relatedNames?: RelatedNameItem[];
|
|
4
|
+
animationIndex?: number;
|
|
5
|
+
animationEnabled?: boolean;
|
|
6
|
+
}
|
|
7
|
+
declare const _default: import('vue').DefineComponent<Props, {}, {}, {}, {}, import('vue').ComponentOptionsMixin, import('vue').ComponentOptionsMixin, {}, string, import('vue').PublicProps, Readonly<Props> & Readonly<{}>, {
|
|
8
|
+
animationIndex: number;
|
|
9
|
+
animationEnabled: boolean;
|
|
10
|
+
}, {}, {}, {}, string, import('vue').ComponentProvideOptions, false, {}, HTMLDivElement>;
|
|
11
|
+
export default _default;
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
export { default as BentoProfileLayout } from './BentoProfileLayout';
|
|
2
|
+
export { default as ProfileCard } from './ProfileCard';
|
|
3
|
+
export { default as ProfileContactCard } from './ProfileContactCard';
|
|
4
|
+
export { default as ProfileHeaderCard } from './ProfileHeaderCard';
|
|
5
|
+
export { default as ProfileLocationCard } from './ProfileLocationCard';
|
|
6
|
+
export { default as ProfileOrganizationsCard } from './ProfileOrganizationsCard';
|
|
7
|
+
export { default as ProfilePersonalCard } from './ProfilePersonalCard';
|
|
8
|
+
export { default as ProfileProfessionalCard } from './ProfileProfessionalCard';
|
|
9
|
+
export { default as ProfileRelatedNamesCard } from './ProfileRelatedNamesCard';
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
import { Ref, ComputedRef } from 'vue';
|
|
2
|
+
import { CollectionItem, CollectionButtonAttributes } from '../types/collection-editor';
|
|
3
|
+
export { CollectionItemStatus } from '../types/collection-editor';
|
|
4
|
+
export interface CollectionEditorOptions<T extends CollectionItem> {
|
|
5
|
+
/** Initial items */
|
|
6
|
+
initialItems?: T[];
|
|
7
|
+
/** Empty form values template */
|
|
8
|
+
emptyFormValues: T;
|
|
9
|
+
/** Transform item before adding to list (explode) */
|
|
10
|
+
explodeItem?: (item: T) => T;
|
|
11
|
+
/** Transform item before emitting (implode) */
|
|
12
|
+
implodeItem?: (item: T) => T;
|
|
13
|
+
/** Status enum values */
|
|
14
|
+
statusEnum?: {
|
|
15
|
+
New: string;
|
|
16
|
+
Pending: string;
|
|
17
|
+
Saved: string;
|
|
18
|
+
};
|
|
19
|
+
}
|
|
20
|
+
export interface CollectionEditorReturn<T extends CollectionItem> {
|
|
21
|
+
/** Current items in the collection */
|
|
22
|
+
items: Ref<T[]>;
|
|
23
|
+
/** Currently active/selected item for editing */
|
|
24
|
+
activeItem: Ref<T | null>;
|
|
25
|
+
/** Current form values */
|
|
26
|
+
formValues: Ref<T>;
|
|
27
|
+
/** Reference to the form component */
|
|
28
|
+
formRef: Ref<any>;
|
|
29
|
+
/** Button attributes for add/save/delete */
|
|
30
|
+
buttonAttributes: ComputedRef<CollectionButtonAttributes>;
|
|
31
|
+
/** Whether delete confirmation modal should show */
|
|
32
|
+
showDeleteConfirm: Ref<boolean>;
|
|
33
|
+
/** Whether form is dirty */
|
|
34
|
+
isDirty: ComputedRef<boolean>;
|
|
35
|
+
/** Add a new item */
|
|
36
|
+
addItem: () => void;
|
|
37
|
+
/** Update current item */
|
|
38
|
+
updateItem: (values: Partial<T>) => void;
|
|
39
|
+
/** Delete current item */
|
|
40
|
+
deleteItem: () => void;
|
|
41
|
+
/** Select an item for editing */
|
|
42
|
+
selectItem: (item: T) => void;
|
|
43
|
+
/** Clear selection */
|
|
44
|
+
clearSelection: () => void;
|
|
45
|
+
/** Handle button click (add, save, delete) */
|
|
46
|
+
handleButtonClick: (action: 'add' | 'save' | 'delete') => void;
|
|
47
|
+
/** Handle form submit */
|
|
48
|
+
handleFormSubmit: (values: T) => void;
|
|
49
|
+
/** Handle form update */
|
|
50
|
+
handleFormUpdate: (values: Partial<T>) => void;
|
|
51
|
+
/** Confirm delete action */
|
|
52
|
+
confirmDelete: () => void;
|
|
53
|
+
/** Cancel delete action */
|
|
54
|
+
cancelDelete: () => void;
|
|
55
|
+
/** Reset form to empty state */
|
|
56
|
+
resetForm: () => void;
|
|
57
|
+
/** Get all items for saving */
|
|
58
|
+
getItems: () => T[];
|
|
59
|
+
}
|
|
60
|
+
/**
|
|
61
|
+
* Create a collection editor composable instance
|
|
62
|
+
*/
|
|
63
|
+
export declare function useCollectionEditor<T extends CollectionItem>(options: CollectionEditorOptions<T>, emit: (event: string, ...args: any[]) => void): CollectionEditorReturn<T>;
|
|
64
|
+
export default useCollectionEditor;
|
|
@@ -530,11 +530,11 @@ export declare function useNotifications(): {
|
|
|
530
530
|
readonly cardOffsetY?: number | undefined;
|
|
531
531
|
readonly zIndex?: number | undefined;
|
|
532
532
|
readonly id: string;
|
|
533
|
+
readonly position: NotificationPosition;
|
|
533
534
|
readonly title: string;
|
|
534
535
|
readonly message: string;
|
|
535
536
|
readonly theme: NotificationTheme;
|
|
536
537
|
readonly timeout: number;
|
|
537
|
-
readonly position: NotificationPosition;
|
|
538
538
|
readonly autoClose: boolean;
|
|
539
539
|
readonly variant: NotificationVariant;
|
|
540
540
|
readonly priority: NotificationPriority;
|
|
@@ -895,11 +895,11 @@ export declare function useNotifications(): {
|
|
|
895
895
|
readonly cardOffsetY?: number | undefined;
|
|
896
896
|
readonly zIndex?: number | undefined;
|
|
897
897
|
readonly id: string;
|
|
898
|
+
readonly position: NotificationPosition;
|
|
898
899
|
readonly title: string;
|
|
899
900
|
readonly message: string;
|
|
900
901
|
readonly theme: NotificationTheme;
|
|
901
902
|
readonly timeout: number;
|
|
902
|
-
readonly position: NotificationPosition;
|
|
903
903
|
readonly autoClose: boolean;
|
|
904
904
|
readonly variant: NotificationVariant;
|
|
905
905
|
readonly priority: NotificationPriority;
|
|
@@ -1050,11 +1050,11 @@ export declare function useNotifications(): {
|
|
|
1050
1050
|
cardOffsetY?: number | undefined;
|
|
1051
1051
|
zIndex?: number | undefined;
|
|
1052
1052
|
id: string;
|
|
1053
|
+
position: NotificationPosition;
|
|
1053
1054
|
title: string;
|
|
1054
1055
|
message: string;
|
|
1055
1056
|
theme: NotificationTheme;
|
|
1056
1057
|
timeout: number;
|
|
1057
|
-
position: NotificationPosition;
|
|
1058
1058
|
autoClose: boolean;
|
|
1059
1059
|
variant: NotificationVariant;
|
|
1060
1060
|
priority: NotificationPriority;
|
|
@@ -1205,11 +1205,11 @@ export declare function useNotifications(): {
|
|
|
1205
1205
|
cardOffsetY?: number | undefined;
|
|
1206
1206
|
zIndex?: number | undefined;
|
|
1207
1207
|
id: string;
|
|
1208
|
+
position: NotificationPosition;
|
|
1208
1209
|
title: string;
|
|
1209
1210
|
message: string;
|
|
1210
1211
|
theme: NotificationTheme;
|
|
1211
1212
|
timeout: number;
|
|
1212
|
-
position: NotificationPosition;
|
|
1213
1213
|
autoClose: boolean;
|
|
1214
1214
|
variant: NotificationVariant;
|
|
1215
1215
|
priority: NotificationPriority;
|
|
@@ -0,0 +1,134 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Collection Editor Types
|
|
3
|
+
*
|
|
4
|
+
* Generic types for collection-based editors (organizations, related names, etc.)
|
|
5
|
+
*/
|
|
6
|
+
/**
|
|
7
|
+
* Status enum for collection items
|
|
8
|
+
*/
|
|
9
|
+
export declare enum CollectionItemStatus {
|
|
10
|
+
New = "new",
|
|
11
|
+
Pending = "pending",
|
|
12
|
+
Saved = "saved",
|
|
13
|
+
Deleted = "deleted"
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
* Base interface for collection items
|
|
17
|
+
*/
|
|
18
|
+
export interface CollectionItem {
|
|
19
|
+
id: string;
|
|
20
|
+
status?: CollectionItemStatus;
|
|
21
|
+
[key: string]: unknown;
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* List item for autocomplete/combobox fields
|
|
25
|
+
*/
|
|
26
|
+
export interface ListItem {
|
|
27
|
+
id: string;
|
|
28
|
+
name: string;
|
|
29
|
+
aliases?: string[];
|
|
30
|
+
approved?: boolean;
|
|
31
|
+
[key: string]: unknown;
|
|
32
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
* Organization collection item
|
|
35
|
+
*/
|
|
36
|
+
export interface OrganizationCollectionItem extends CollectionItem {
|
|
37
|
+
organization: string | ListItem | null;
|
|
38
|
+
position: string | ListItem | null;
|
|
39
|
+
position_prefix?: string | null;
|
|
40
|
+
position_suffix?: string | null;
|
|
41
|
+
start_date?: Date | string | null;
|
|
42
|
+
end_date?: Date | string | null;
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* Related name collection item
|
|
46
|
+
*/
|
|
47
|
+
export interface RelatedNameCollectionItem extends CollectionItem {
|
|
48
|
+
name?: string;
|
|
49
|
+
first_name?: string;
|
|
50
|
+
last_name?: string;
|
|
51
|
+
label?: string | ListItem | null;
|
|
52
|
+
birthday?: Date | string | null;
|
|
53
|
+
relationship?: string;
|
|
54
|
+
}
|
|
55
|
+
/**
|
|
56
|
+
* Social link collection item
|
|
57
|
+
*/
|
|
58
|
+
export interface SocialLinkCollectionItem extends CollectionItem {
|
|
59
|
+
platform: string;
|
|
60
|
+
handle?: string;
|
|
61
|
+
url?: string;
|
|
62
|
+
}
|
|
63
|
+
/**
|
|
64
|
+
* Form field definition for dynamic forms
|
|
65
|
+
*/
|
|
66
|
+
export interface CollectionFormField {
|
|
67
|
+
name: string;
|
|
68
|
+
label: string;
|
|
69
|
+
as: string;
|
|
70
|
+
type?: string;
|
|
71
|
+
rules?: unknown;
|
|
72
|
+
items?: ListItem[];
|
|
73
|
+
itemKey?: string;
|
|
74
|
+
itemText?: string;
|
|
75
|
+
placeholder?: string;
|
|
76
|
+
hideLabel?: boolean;
|
|
77
|
+
innerLabel?: string;
|
|
78
|
+
tertiaryLabel?: string;
|
|
79
|
+
[key: string]: unknown;
|
|
80
|
+
}
|
|
81
|
+
/**
|
|
82
|
+
* Schema definition for collection forms
|
|
83
|
+
*/
|
|
84
|
+
export interface CollectionFormSchema {
|
|
85
|
+
fields: CollectionFormField[];
|
|
86
|
+
}
|
|
87
|
+
/**
|
|
88
|
+
* Button attributes for add/delete button group
|
|
89
|
+
*/
|
|
90
|
+
export interface CollectionButtonAttributes {
|
|
91
|
+
add: {
|
|
92
|
+
disabled: boolean;
|
|
93
|
+
label?: string;
|
|
94
|
+
};
|
|
95
|
+
save: {
|
|
96
|
+
disabled: boolean;
|
|
97
|
+
label?: string;
|
|
98
|
+
};
|
|
99
|
+
delete: {
|
|
100
|
+
disabled: boolean;
|
|
101
|
+
label?: string;
|
|
102
|
+
};
|
|
103
|
+
}
|
|
104
|
+
/**
|
|
105
|
+
* Props for CollectionEditor component
|
|
106
|
+
*/
|
|
107
|
+
export interface CollectionEditorProps<T extends CollectionItem> {
|
|
108
|
+
/** Field name for form binding */
|
|
109
|
+
name: string;
|
|
110
|
+
/** Display label */
|
|
111
|
+
label?: string;
|
|
112
|
+
/** Current value (array of items) */
|
|
113
|
+
modelValue?: T[];
|
|
114
|
+
/** Form schema for editing items */
|
|
115
|
+
schema: CollectionFormSchema;
|
|
116
|
+
/** Empty form values for new items */
|
|
117
|
+
emptyFormValues: T;
|
|
118
|
+
/** List display component */
|
|
119
|
+
listComponent?: unknown;
|
|
120
|
+
/** Transform item for display */
|
|
121
|
+
displayTransform?: (item: T) => T;
|
|
122
|
+
/** Transform item for storage */
|
|
123
|
+
storageTransform?: (item: T) => T;
|
|
124
|
+
}
|
|
125
|
+
/**
|
|
126
|
+
* Emits for CollectionEditor component
|
|
127
|
+
*/
|
|
128
|
+
export interface CollectionEditorEmits<T extends CollectionItem> {
|
|
129
|
+
'update:modelValue': [value: T[]];
|
|
130
|
+
'item-added': [item: T];
|
|
131
|
+
'item-updated': [item: T];
|
|
132
|
+
'item-deleted': [item: T];
|
|
133
|
+
'item-selected': [item: T | null];
|
|
134
|
+
}
|
|
@@ -2,6 +2,7 @@ export * from './address';
|
|
|
2
2
|
export * from './avatars';
|
|
3
3
|
export * from './badges';
|
|
4
4
|
export * from './calendars';
|
|
5
|
+
export * from './collection-editor';
|
|
5
6
|
export * from './core';
|
|
6
7
|
export * from './form';
|
|
7
8
|
export * from './forms';
|
|
@@ -10,6 +11,7 @@ export * from './layouts';
|
|
|
10
11
|
export * from './loading';
|
|
11
12
|
export * from './maps';
|
|
12
13
|
export * from './navigation';
|
|
14
|
+
export * from './profiles';
|
|
13
15
|
export * from './tables';
|
|
14
16
|
export * from './tabs';
|
|
15
17
|
export * from './transitions';
|
|
@@ -0,0 +1,149 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Profile component types
|
|
3
|
+
*
|
|
4
|
+
* Types for the Bento-style profile layout components
|
|
5
|
+
*/
|
|
6
|
+
/**
|
|
7
|
+
* Profile image/avatar information
|
|
8
|
+
*/
|
|
9
|
+
export interface ProfileImage {
|
|
10
|
+
url?: string;
|
|
11
|
+
public_id?: string;
|
|
12
|
+
secure_url?: string;
|
|
13
|
+
[key: string]: unknown;
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
* Professional information
|
|
17
|
+
*/
|
|
18
|
+
export interface ProfessionalInfo {
|
|
19
|
+
title?: string;
|
|
20
|
+
company?: string;
|
|
21
|
+
department?: string;
|
|
22
|
+
linkedin?: string;
|
|
23
|
+
[key: string]: unknown;
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* Address information
|
|
27
|
+
*/
|
|
28
|
+
export interface AddressInfo {
|
|
29
|
+
name?: string;
|
|
30
|
+
description?: string;
|
|
31
|
+
street?: string;
|
|
32
|
+
suite?: string;
|
|
33
|
+
city?: string;
|
|
34
|
+
state?: string;
|
|
35
|
+
zip?: string;
|
|
36
|
+
country?: string;
|
|
37
|
+
geocode?: {
|
|
38
|
+
location?: {
|
|
39
|
+
lat: number;
|
|
40
|
+
lng: number;
|
|
41
|
+
};
|
|
42
|
+
formatted_address?: string;
|
|
43
|
+
[key: string]: unknown;
|
|
44
|
+
};
|
|
45
|
+
[key: string]: unknown;
|
|
46
|
+
}
|
|
47
|
+
/**
|
|
48
|
+
* Social link item
|
|
49
|
+
*/
|
|
50
|
+
export interface SocialLinkItem {
|
|
51
|
+
id?: string;
|
|
52
|
+
platform: string;
|
|
53
|
+
handle?: string;
|
|
54
|
+
url?: string;
|
|
55
|
+
[key: string]: unknown;
|
|
56
|
+
}
|
|
57
|
+
/**
|
|
58
|
+
* Organization/position item
|
|
59
|
+
*/
|
|
60
|
+
export interface OrganizationItem {
|
|
61
|
+
id?: string;
|
|
62
|
+
organization?: string | {
|
|
63
|
+
name: string;
|
|
64
|
+
id?: string;
|
|
65
|
+
};
|
|
66
|
+
position?: string | {
|
|
67
|
+
name: string;
|
|
68
|
+
id?: string;
|
|
69
|
+
};
|
|
70
|
+
position_prefix?: string;
|
|
71
|
+
position_suffix?: string;
|
|
72
|
+
start_date?: Date | string | null;
|
|
73
|
+
end_date?: Date | string | null;
|
|
74
|
+
status?: string;
|
|
75
|
+
[key: string]: unknown;
|
|
76
|
+
}
|
|
77
|
+
/**
|
|
78
|
+
* Related name item
|
|
79
|
+
*/
|
|
80
|
+
export interface RelatedNameItem {
|
|
81
|
+
id?: string;
|
|
82
|
+
name?: string;
|
|
83
|
+
first_name?: string;
|
|
84
|
+
last_name?: string;
|
|
85
|
+
label?: string | {
|
|
86
|
+
name: string;
|
|
87
|
+
id?: string;
|
|
88
|
+
};
|
|
89
|
+
birthday?: Date | string | null;
|
|
90
|
+
relationship?: string;
|
|
91
|
+
[key: string]: unknown;
|
|
92
|
+
}
|
|
93
|
+
/**
|
|
94
|
+
* Profile data object
|
|
95
|
+
* Flexible structure to accommodate different data sources
|
|
96
|
+
*/
|
|
97
|
+
export interface ProfileData {
|
|
98
|
+
id?: string;
|
|
99
|
+
uid?: string;
|
|
100
|
+
name?: string;
|
|
101
|
+
first_name?: string;
|
|
102
|
+
last_name?: string;
|
|
103
|
+
nickname?: string;
|
|
104
|
+
prefix?: string;
|
|
105
|
+
suffix?: string;
|
|
106
|
+
email?: string;
|
|
107
|
+
phone?: string;
|
|
108
|
+
website?: string;
|
|
109
|
+
birthday?: Date | string | null;
|
|
110
|
+
profile_image?: ProfileImage | string;
|
|
111
|
+
image?: string;
|
|
112
|
+
professional?: ProfessionalInfo;
|
|
113
|
+
address?: AddressInfo | AddressInfo[];
|
|
114
|
+
latLng?: {
|
|
115
|
+
lat: number;
|
|
116
|
+
lng: number;
|
|
117
|
+
};
|
|
118
|
+
_geoloc?: {
|
|
119
|
+
lat: number;
|
|
120
|
+
lng: number;
|
|
121
|
+
};
|
|
122
|
+
social?: SocialLinkItem[];
|
|
123
|
+
organizations?: OrganizationItem[];
|
|
124
|
+
relatedNames?: RelatedNameItem[];
|
|
125
|
+
related_names?: RelatedNameItem[];
|
|
126
|
+
status?: 'active' | 'inactive' | string;
|
|
127
|
+
[key: string]: unknown;
|
|
128
|
+
}
|
|
129
|
+
/**
|
|
130
|
+
* Profile preview configuration
|
|
131
|
+
*/
|
|
132
|
+
export interface ProfilePreviewConfig {
|
|
133
|
+
showContact?: boolean;
|
|
134
|
+
showLocation?: boolean;
|
|
135
|
+
showProfessional?: boolean;
|
|
136
|
+
showPersonal?: boolean;
|
|
137
|
+
showOrganizations?: boolean;
|
|
138
|
+
showRelatedNames?: boolean;
|
|
139
|
+
showSocial?: boolean;
|
|
140
|
+
animationEnabled?: boolean;
|
|
141
|
+
animationDelay?: number;
|
|
142
|
+
}
|
|
143
|
+
/**
|
|
144
|
+
* Props for BentoProfileLayout
|
|
145
|
+
*/
|
|
146
|
+
export interface BentoProfileLayoutProps {
|
|
147
|
+
profile: ProfileData;
|
|
148
|
+
config?: ProfilePreviewConfig;
|
|
149
|
+
}
|