@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.
Files changed (49) hide show
  1. package/dist/composables/index.js +33 -30
  2. package/dist/index.js +2396 -1152
  3. package/dist/src/components/UiBanner.d.ts +1 -1
  4. package/dist/src/components/UiLoadingDots.d.ts +1 -1
  5. package/dist/src/components/UiMenu.d.ts +1 -1
  6. package/dist/src/components/UiModal.d.ts +1 -1
  7. package/dist/src/components/collection-editor/CollectionItemList.d.ts +42 -0
  8. package/dist/src/components/collection-editor/OrganizationsEditor.d.ts +29 -0
  9. package/dist/src/components/collection-editor/RelatedNamesEditor.d.ts +26 -0
  10. package/dist/src/components/collection-editor/SocialLinksEditor.d.ts +26 -0
  11. package/dist/src/components/collection-editor/index.d.ts +5 -0
  12. package/dist/src/components/forms/FormFieldWrapper.d.ts +1 -1
  13. package/dist/src/components/index.d.ts +2 -0
  14. package/dist/src/components/inputs/AddressInput.d.ts +1 -1
  15. package/dist/src/components/inputs/ComboboxInput.d.ts +2 -2
  16. package/dist/src/components/inputs/DatepickerInput.d.ts +12 -12
  17. package/dist/src/components/inputs/EmailInput.d.ts +2 -2
  18. package/dist/src/components/inputs/PhoneInput.d.ts +2 -2
  19. package/dist/src/components/inputs/RichTextInput.d.ts +2 -2
  20. package/dist/src/components/inputs/SelectInput.d.ts +2 -2
  21. package/dist/src/components/inputs/SelectTextInput.d.ts +4 -4
  22. package/dist/src/components/inputs/TagifyInput.d.ts +2 -2
  23. package/dist/src/components/inputs/TextInput.d.ts +3 -3
  24. package/dist/src/components/layouts/CardLayout.d.ts +1 -1
  25. package/dist/src/components/maps/UiInfoWindow.d.ts +2 -2
  26. package/dist/src/components/maps/UiMap.d.ts +1 -1
  27. package/dist/src/components/maps/UiMapAll.d.ts +6 -6
  28. package/dist/src/components/maps/UiMapMarker.d.ts +2 -2
  29. package/dist/src/components/modals/BaseModal.d.ts +1 -1
  30. package/dist/src/components/profiles/BentoProfileLayout.d.ts +9 -0
  31. package/dist/src/components/profiles/ProfileCard.d.ts +30 -0
  32. package/dist/src/components/profiles/ProfileContactCard.d.ts +12 -0
  33. package/dist/src/components/profiles/ProfileHeaderCard.d.ts +20 -0
  34. package/dist/src/components/profiles/ProfileLocationCard.d.ts +17 -0
  35. package/dist/src/components/profiles/ProfileOrganizationsCard.d.ts +11 -0
  36. package/dist/src/components/profiles/ProfilePersonalCard.d.ts +10 -0
  37. package/dist/src/components/profiles/ProfileProfessionalCard.d.ts +11 -0
  38. package/dist/src/components/profiles/ProfileRelatedNamesCard.d.ts +11 -0
  39. package/dist/src/components/profiles/index.d.ts +9 -0
  40. package/dist/src/composables/index.d.ts +1 -0
  41. package/dist/src/composables/useCollectionEditor.d.ts +64 -0
  42. package/dist/src/composables/useNotifications.d.ts +4 -4
  43. package/dist/src/types/collection-editor.d.ts +134 -0
  44. package/dist/src/types/index.d.ts +2 -0
  45. package/dist/src/types/profiles.d.ts +149 -0
  46. package/dist/style.css +1 -1
  47. package/dist/ui.css +1 -1
  48. package/dist/useCollectionEditor-BYyoAT0U.js +121 -0
  49. 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';
@@ -1,4 +1,5 @@
1
1
  export * from './useCalendar';
2
+ export * from './useCollectionEditor';
2
3
  export * from './useEventSegments';
3
4
  export * from './useFormValidation';
4
5
  export * from './useMap';
@@ -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
+ }