pxengine 0.1.12 → 0.1.14
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/index.cjs +227 -291
- package/dist/index.d.cts +15 -11
- package/dist/index.d.ts +15 -11
- package/dist/index.js +225 -287
- package/dist/registry.json +20 -22
- package/package.json +2 -4
- package/config/tailwind-preset.js +0 -106
- package/src/atoms/AccordionAtom.tsx +0 -44
- package/src/atoms/AlertAtom.tsx +0 -48
- package/src/atoms/AlertDialogAtom.tsx +0 -66
- package/src/atoms/AspectRatioAtom.tsx +0 -27
- package/src/atoms/AvatarAtom.tsx +0 -21
- package/src/atoms/BadgeAtom.tsx +0 -35
- package/src/atoms/BreadcrumbAtom.tsx +0 -36
- package/src/atoms/ButtonAtom.tsx +0 -65
- package/src/atoms/CalendarAtom.tsx +0 -24
- package/src/atoms/CardAtom.tsx +0 -66
- package/src/atoms/CarouselAtom.tsx +0 -40
- package/src/atoms/ChartAtom.tsx +0 -192
- package/src/atoms/CheckboxAtom.tsx +0 -33
- package/src/atoms/CollapsibleAtom.tsx +0 -44
- package/src/atoms/CommandAtom.tsx +0 -46
- package/src/atoms/ContextMenuAtom.tsx +0 -49
- package/src/atoms/DialogAtom.tsx +0 -68
- package/src/atoms/DrawerAtom.tsx +0 -49
- package/src/atoms/DropdownMenuAtom.tsx +0 -49
- package/src/atoms/FormInputAtom.tsx +0 -101
- package/src/atoms/FormSelectAtom.tsx +0 -110
- package/src/atoms/FormTextareaAtom.tsx +0 -93
- package/src/atoms/InputAtom.tsx +0 -216
- package/src/atoms/InputOTPAtom.tsx +0 -49
- package/src/atoms/KbdAtom.tsx +0 -25
- package/src/atoms/LabelAtom.tsx +0 -23
- package/src/atoms/LayoutAtom.tsx +0 -45
- package/src/atoms/PaginationAtom.tsx +0 -49
- package/src/atoms/PopoverAtom.tsx +0 -40
- package/src/atoms/ProgressAtom.tsx +0 -15
- package/src/atoms/RadioGroupAtom.tsx +0 -31
- package/src/atoms/RatingAtom.tsx +0 -37
- package/src/atoms/ResizableAtom.tsx +0 -51
- package/src/atoms/ScrollAreaAtom.tsx +0 -31
- package/src/atoms/SeparatorAtom.tsx +0 -16
- package/src/atoms/SheetAtom.tsx +0 -72
- package/src/atoms/SkeletonAtom.tsx +0 -22
- package/src/atoms/SliderAtom.tsx +0 -32
- package/src/atoms/SpinnerAtom.tsx +0 -26
- package/src/atoms/SwitchAtom.tsx +0 -32
- package/src/atoms/TableAtom.tsx +0 -60
- package/src/atoms/TabsAtom.tsx +0 -40
- package/src/atoms/TextAtom.tsx +0 -36
- package/src/atoms/TextareaAtom.tsx +0 -42
- package/src/atoms/TimelineAtom.tsx +0 -77
- package/src/atoms/ToggleAtom.tsx +0 -36
- package/src/atoms/TooltipAtom.tsx +0 -39
- package/src/atoms/VideoAtom.tsx +0 -34
- package/src/atoms/index.ts +0 -49
- package/src/components/index.ts +0 -178
- package/src/components/ui/accordion.tsx +0 -56
- package/src/components/ui/alert-dialog.tsx +0 -139
- package/src/components/ui/alert.tsx +0 -59
- package/src/components/ui/aspect-ratio.tsx +0 -5
- package/src/components/ui/avatar.tsx +0 -50
- package/src/components/ui/badge.tsx +0 -36
- package/src/components/ui/breadcrumb.tsx +0 -115
- package/src/components/ui/button-group.tsx +0 -83
- package/src/components/ui/button.tsx +0 -56
- package/src/components/ui/calendar.tsx +0 -213
- package/src/components/ui/card.tsx +0 -79
- package/src/components/ui/carousel.tsx +0 -260
- package/src/components/ui/chart.tsx +0 -367
- package/src/components/ui/checkbox.tsx +0 -28
- package/src/components/ui/collapsible.tsx +0 -11
- package/src/components/ui/command.tsx +0 -153
- package/src/components/ui/context-menu.tsx +0 -198
- package/src/components/ui/dialog.tsx +0 -122
- package/src/components/ui/drawer.tsx +0 -116
- package/src/components/ui/dropdown-menu.tsx +0 -200
- package/src/components/ui/empty.tsx +0 -104
- package/src/components/ui/field.tsx +0 -244
- package/src/components/ui/form.tsx +0 -176
- package/src/components/ui/hover-card.tsx +0 -27
- package/src/components/ui/index.ts +0 -54
- package/src/components/ui/input-group.tsx +0 -168
- package/src/components/ui/input-otp.tsx +0 -69
- package/src/components/ui/input.tsx +0 -22
- package/src/components/ui/item.tsx +0 -193
- package/src/components/ui/kbd.tsx +0 -28
- package/src/components/ui/label.tsx +0 -26
- package/src/components/ui/menubar.tsx +0 -254
- package/src/components/ui/navigation-menu.tsx +0 -128
- package/src/components/ui/pagination.tsx +0 -117
- package/src/components/ui/popover.tsx +0 -29
- package/src/components/ui/progress.tsx +0 -28
- package/src/components/ui/radio-group.tsx +0 -42
- package/src/components/ui/resizable.tsx +0 -44
- package/src/components/ui/scroll-area.tsx +0 -46
- package/src/components/ui/select.tsx +0 -160
- package/src/components/ui/separator.tsx +0 -29
- package/src/components/ui/sheet.tsx +0 -140
- package/src/components/ui/sidebar.tsx +0 -771
- package/src/components/ui/skeleton.tsx +0 -15
- package/src/components/ui/slider.tsx +0 -26
- package/src/components/ui/sonner.tsx +0 -45
- package/src/components/ui/spinner.tsx +0 -16
- package/src/components/ui/switch.tsx +0 -27
- package/src/components/ui/table.tsx +0 -117
- package/src/components/ui/tabs.tsx +0 -53
- package/src/components/ui/textarea.tsx +0 -22
- package/src/components/ui/toggle-group.tsx +0 -61
- package/src/components/ui/toggle.tsx +0 -43
- package/src/components/ui/tooltip.tsx +0 -30
- package/src/hooks/use-mobile.tsx +0 -19
- package/src/index.ts +0 -24
- package/src/lib/countries.ts +0 -203
- package/src/lib/index.ts +0 -2
- package/src/lib/utils.ts +0 -15
- package/src/lib/validators/index.ts +0 -1
- package/src/lib/validators/theme.ts +0 -148
- package/src/molecules/creator-discovery/AudienceDemographicsCard/AudienceDemographicsCard.tsx +0 -44
- package/src/molecules/creator-discovery/AudienceDemographicsCard/index.ts +0 -1
- package/src/molecules/creator-discovery/AudienceMetricCard/AudienceMetricCard.tsx +0 -50
- package/src/molecules/creator-discovery/AudienceMetricCard/index.ts +0 -1
- package/src/molecules/creator-discovery/BrandAffinityGroup/BrandAffinityGroup.tsx +0 -36
- package/src/molecules/creator-discovery/BrandAffinityGroup/index.ts +0 -1
- package/src/molecules/creator-discovery/CampaignSeedCard/CampaignSeedCard.tsx +0 -123
- package/src/molecules/creator-discovery/CampaignSeedCard/CampaignSeedCard.types.ts +0 -13
- package/src/molecules/creator-discovery/CampaignSeedCard/index.ts +0 -2
- package/src/molecules/creator-discovery/ContentPreviewGallery/ContentPreviewGallery.tsx +0 -41
- package/src/molecules/creator-discovery/ContentPreviewGallery/index.ts +0 -1
- package/src/molecules/creator-discovery/CreatorActionHeader/CreatorActionHeader.tsx +0 -77
- package/src/molecules/creator-discovery/CreatorActionHeader/index.ts +0 -1
- package/src/molecules/creator-discovery/CreatorGridCard/CreatorGridCard.tsx +0 -104
- package/src/molecules/creator-discovery/CreatorGridCard/index.ts +0 -1
- package/src/molecules/creator-discovery/CreatorProfileSummary/CreatorProfileSummary.tsx +0 -65
- package/src/molecules/creator-discovery/CreatorProfileSummary/index.ts +0 -1
- package/src/molecules/creator-discovery/GrowthChartCard/GrowthChartCard.tsx +0 -58
- package/src/molecules/creator-discovery/GrowthChartCard/index.ts +0 -1
- package/src/molecules/creator-discovery/MCQCard/MCQCard.tsx +0 -165
- package/src/molecules/creator-discovery/MCQCard/MCQCard.types.ts +0 -71
- package/src/molecules/creator-discovery/MCQCard/index.ts +0 -2
- package/src/molecules/creator-discovery/PlatformIconGroup/PlatformIconGroup.tsx +0 -72
- package/src/molecules/creator-discovery/PlatformIconGroup/index.ts +0 -1
- package/src/molecules/creator-discovery/SearchSpecCard/CustomFieldRenderers.tsx +0 -334
- package/src/molecules/creator-discovery/SearchSpecCard/SearchSpecCard.tsx +0 -111
- package/src/molecules/creator-discovery/SearchSpecCard/SearchSpecCard.types.ts +0 -18
- package/src/molecules/creator-discovery/SearchSpecCard/index.ts +0 -3
- package/src/molecules/creator-discovery/TopPostsGrid/TopPostsGrid.tsx +0 -49
- package/src/molecules/creator-discovery/TopPostsGrid/index.ts +0 -1
- package/src/molecules/creator-discovery/index.ts +0 -13
- package/src/molecules/generic/ActionButton/ActionButton.tsx +0 -137
- package/src/molecules/generic/ActionButton/ActionButton.types.ts +0 -68
- package/src/molecules/generic/ActionButton/index.ts +0 -2
- package/src/molecules/generic/DataGrid/DataGrid.tsx +0 -102
- package/src/molecules/generic/DataGrid/index.ts +0 -1
- package/src/molecules/generic/EditableField/EditableField.tsx +0 -229
- package/src/molecules/generic/EditableField/EditableField.types.ts +0 -73
- package/src/molecules/generic/EditableField/index.ts +0 -2
- package/src/molecules/generic/EmptyState/EmptyState.tsx +0 -61
- package/src/molecules/generic/EmptyState/index.ts +0 -1
- package/src/molecules/generic/FileUpload/FileUpload.tsx +0 -62
- package/src/molecules/generic/FileUpload/index.ts +0 -1
- package/src/molecules/generic/FilterBar/FilterBar.tsx +0 -54
- package/src/molecules/generic/FilterBar/index.ts +0 -1
- package/src/molecules/generic/FormCard/FormCard.tsx +0 -136
- package/src/molecules/generic/FormCard/FormCard.types.ts +0 -93
- package/src/molecules/generic/FormCard/index.ts +0 -2
- package/src/molecules/generic/LoadingOverlay/LoadingOverlay.tsx +0 -39
- package/src/molecules/generic/LoadingOverlay/index.ts +0 -1
- package/src/molecules/generic/NotificationList/NotificationList.tsx +0 -80
- package/src/molecules/generic/NotificationList/index.ts +0 -1
- package/src/molecules/generic/StatsGrid/StatsGrid.tsx +0 -80
- package/src/molecules/generic/StatsGrid/index.ts +0 -1
- package/src/molecules/generic/StepWizard/StepWizard.tsx +0 -67
- package/src/molecules/generic/StepWizard/index.ts +0 -1
- package/src/molecules/generic/TagCloud/TagCloud.tsx +0 -32
- package/src/molecules/generic/TagCloud/index.ts +0 -1
- package/src/molecules/generic/index.ts +0 -12
- package/src/molecules/index.ts +0 -2
- package/src/render/PXEngineRenderer.tsx +0 -458
- package/src/render/index.ts +0 -1
- package/src/styles/globals.css +0 -146
- package/src/types/atoms.ts +0 -450
- package/src/types/common.ts +0 -116
- package/src/types/index.ts +0 -3
- package/src/types/molecules.ts +0 -279
- package/src/types/schema.ts +0 -12
package/src/lib/countries.ts
DELETED
|
@@ -1,203 +0,0 @@
|
|
|
1
|
-
export const countries = [
|
|
2
|
-
{ code: "AF", name: "Afghanistan", flag: "🇦🇫" },
|
|
3
|
-
{ code: "AL", name: "Albania", flag: "🇦🇱" },
|
|
4
|
-
{ code: "DZ", name: "Algeria", flag: "🇩🇿" },
|
|
5
|
-
{ code: "AD", name: "Andorra", flag: "🇦🇩" },
|
|
6
|
-
{ code: "AO", name: "Angola", flag: "🇦🇴" },
|
|
7
|
-
{ code: "AG", name: "Antigua and Barbuda", flag: "🇦🇬" },
|
|
8
|
-
{ code: "AR", name: "Argentina", flag: "🇦🇷" },
|
|
9
|
-
{ code: "AM", name: "Armenia", flag: "🇦🇲" },
|
|
10
|
-
{ code: "AU", name: "Australia", flag: "🇦🇺" },
|
|
11
|
-
{ code: "AT", name: "Austria", flag: "🇦🇹" },
|
|
12
|
-
{ code: "AZ", name: "Azerbaijan", flag: "🇦🇿" },
|
|
13
|
-
{ code: "BS", name: "Bahamas", flag: "🇧🇸" },
|
|
14
|
-
{ code: "BH", name: "Bahrain", flag: "🇧🇭" },
|
|
15
|
-
{ code: "BD", name: "Bangladesh", flag: "🇧🇩" },
|
|
16
|
-
{ code: "BB", name: "Barbados", flag: "🇧🇧" },
|
|
17
|
-
{ code: "BY", name: "Belarus", flag: "🇧🇾" },
|
|
18
|
-
{ code: "BE", name: "Belgium", flag: "🇧🇪" },
|
|
19
|
-
{ code: "BZ", name: "Belize", flag: "🇧🇿" },
|
|
20
|
-
{ code: "BJ", name: "Benin", flag: "🇧🇯" },
|
|
21
|
-
{ code: "BT", name: "Bhutan", flag: "🇧🇹" },
|
|
22
|
-
{ code: "BO", name: "Bolivia", flag: "🇧🇴" },
|
|
23
|
-
{ code: "BA", name: "Bosnia and Herzegovina", flag: "🇧🇦" },
|
|
24
|
-
{ code: "BW", name: "Botswana", flag: "🇧🇼" },
|
|
25
|
-
{ code: "BR", name: "Brazil", flag: "🇧🇷" },
|
|
26
|
-
{ code: "BN", name: "Brunei", flag: "🇧🇳" },
|
|
27
|
-
{ code: "BG", name: "Bulgaria", flag: "🇧🇬" },
|
|
28
|
-
{ code: "BF", name: "Burkina Faso", flag: "🇧🇫" },
|
|
29
|
-
{ code: "BI", name: "Burundi", flag: "🇧🇮" },
|
|
30
|
-
{ code: "CV", name: "Cabo Verde", flag: "🇨🇻" },
|
|
31
|
-
{ code: "KH", name: "Cambodia", flag: "🇰🇭" },
|
|
32
|
-
{ code: "CM", name: "Cameroon", flag: "🇨🇲" },
|
|
33
|
-
{ code: "CA", name: "Canada", flag: "🇨🇦" },
|
|
34
|
-
{ code: "CF", name: "Central African Republic", flag: "🇨🇫" },
|
|
35
|
-
{ code: "TD", name: "Chad", flag: "🇹🇩" },
|
|
36
|
-
{ code: "CL", name: "Chile", flag: "🇨🇱" },
|
|
37
|
-
{ code: "CN", name: "China", flag: "🇨🇳" },
|
|
38
|
-
{ code: "CO", name: "Colombia", flag: "🇨🇴" },
|
|
39
|
-
{ code: "KM", name: "Comoros", flag: "🇰🇲" },
|
|
40
|
-
{ code: "CG", name: "Congo", flag: "🇨🇬" },
|
|
41
|
-
{ code: "CD", name: "Democratic Republic of the Congo", flag: "🇨🇩" },
|
|
42
|
-
{ code: "CR", name: "Costa Rica", flag: "🇨🇷" },
|
|
43
|
-
{ code: "HR", name: "Croatia", flag: "🇭🇷" },
|
|
44
|
-
{ code: "CU", name: "Cuba", flag: "🇨🇺" },
|
|
45
|
-
{ code: "CY", name: "Cyprus", flag: "🇨🇾" },
|
|
46
|
-
{ code: "CZ", name: "Czech Republic", flag: "🇨🇿" },
|
|
47
|
-
{ code: "CI", name: "Ivory Coast", flag: "🇨🇮" },
|
|
48
|
-
{ code: "DK", name: "Denmark", flag: "🇩🇰" },
|
|
49
|
-
{ code: "DJ", name: "Djibouti", flag: "🇩🇯" },
|
|
50
|
-
{ code: "DM", name: "Dominica", flag: "🇩🇲" },
|
|
51
|
-
{ code: "DO", name: "Dominican Republic", flag: "🇩🇴" },
|
|
52
|
-
{ code: "EC", name: "Ecuador", flag: "🇪🇨" },
|
|
53
|
-
{ code: "EG", name: "Egypt", flag: "🇪🇬" },
|
|
54
|
-
{ code: "SV", name: "El Salvador", flag: "🇸🇻" },
|
|
55
|
-
{ code: "GQ", name: "Equatorial Guinea", flag: "🇬🇶" },
|
|
56
|
-
{ code: "ER", name: "Eritrea", flag: "🇪🇷" },
|
|
57
|
-
{ code: "EE", name: "Estonia", flag: "🇪🇪" },
|
|
58
|
-
{ code: "SZ", name: "Eswatini", flag: "🇸🇿" },
|
|
59
|
-
{ code: "ET", name: "Ethiopia", flag: "🇪🇹" },
|
|
60
|
-
{ code: "FJ", name: "Fiji", flag: "🇫🇯" },
|
|
61
|
-
{ code: "FI", name: "Finland", flag: "🇫🇮" },
|
|
62
|
-
{ code: "FR", name: "France", flag: "🇫🇷" },
|
|
63
|
-
{ code: "GA", name: "Gabon", flag: "🇬🇦" },
|
|
64
|
-
{ code: "GM", name: "Gambia", flag: "🇬🇲" },
|
|
65
|
-
{ code: "GE", name: "Georgia", flag: "🇬🇪" },
|
|
66
|
-
{ code: "DE", name: "Germany", flag: "🇩🇪" },
|
|
67
|
-
{ code: "GH", name: "Ghana", flag: "🇬🇭" },
|
|
68
|
-
{ code: "GR", name: "Greece", flag: "🇬🇷" },
|
|
69
|
-
{ code: "GD", name: "Grenada", flag: "🇬🇩" },
|
|
70
|
-
{ code: "GT", name: "Guatemala", flag: "🇬🇹" },
|
|
71
|
-
{ code: "GN", name: "Guinea", flag: "🇬🇳" },
|
|
72
|
-
{ code: "GW", name: "Guinea-Bissau", flag: "🇬🇼" },
|
|
73
|
-
{ code: "GY", name: "Guyana", flag: "🇬🇾" },
|
|
74
|
-
{ code: "HT", name: "Haiti", flag: "🇭🇹" },
|
|
75
|
-
{ code: "HN", name: "Honduras", flag: "🇭🇳" },
|
|
76
|
-
{ code: "HU", name: "Hungary", flag: "🇭🇺" },
|
|
77
|
-
{ code: "HK", name: "Hong Kong", flag: "🇭🇰" },
|
|
78
|
-
{ code: "IS", name: "Iceland", flag: "🇮🇸" },
|
|
79
|
-
{ code: "IN", name: "India", flag: "🇮🇳" },
|
|
80
|
-
{ code: "ID", name: "Indonesia", flag: "🇮🇩" },
|
|
81
|
-
{ code: "IR", name: "Iran", flag: "🇮🇷" },
|
|
82
|
-
{ code: "IQ", name: "Iraq", flag: "🇮🇶" },
|
|
83
|
-
{ code: "IE", name: "Ireland", flag: "🇮🇪" },
|
|
84
|
-
{ code: "IL", name: "Israel", flag: "🇮🇱" },
|
|
85
|
-
{ code: "IT", name: "Italy", flag: "🇮🇹" },
|
|
86
|
-
{ code: "JM", name: "Jamaica", flag: "🇯🇲" },
|
|
87
|
-
{ code: "JP", name: "Japan", flag: "🇯🇵" },
|
|
88
|
-
{ code: "JO", name: "Jordan", flag: "🇯🇴" },
|
|
89
|
-
{ code: "KZ", name: "Kazakhstan", flag: "🇰🇿" },
|
|
90
|
-
{ code: "KE", name: "Kenya", flag: "🇰🇪" },
|
|
91
|
-
{ code: "KI", name: "Kiribati", flag: "🇰🇮" },
|
|
92
|
-
{ code: "KP", name: "North Korea", flag: "🇰🇵" },
|
|
93
|
-
{ code: "KR", name: "South Korea", flag: "🇰🇷" },
|
|
94
|
-
{ code: "KW", name: "Kuwait", flag: "🇰🇼" },
|
|
95
|
-
{ code: "KG", name: "Kyrgyzstan", flag: "🇰🇬" },
|
|
96
|
-
{ code: "LA", name: "Laos", flag: "🇱🇦" },
|
|
97
|
-
{ code: "LV", name: "Latvia", flag: "🇱🇻" },
|
|
98
|
-
{ code: "LB", name: "Lebanon", flag: "🇱🇧" },
|
|
99
|
-
{ code: "LS", name: "Lesotho", flag: "🇱🇸" },
|
|
100
|
-
{ code: "LR", name: "Liberia", flag: "🇱🇷" },
|
|
101
|
-
{ code: "LY", name: "Libya", flag: "🇱🇾" },
|
|
102
|
-
{ code: "LI", name: "Liechtenstein", flag: "🇱🇮" },
|
|
103
|
-
{ code: "LT", name: "Lithuania", flag: "🇱🇹" },
|
|
104
|
-
{ code: "LU", name: "Luxembourg", flag: "🇱🇺" },
|
|
105
|
-
{ code: "MG", name: "Madagascar", flag: "🇲🇬" },
|
|
106
|
-
{ code: "MW", name: "Malawi", flag: "🇲🇼" },
|
|
107
|
-
{ code: "MY", name: "Malaysia", flag: "🇲🇾" },
|
|
108
|
-
{ code: "MV", name: "Maldives", flag: "🇲🇻" },
|
|
109
|
-
{ code: "ML", name: "Mali", flag: "🇲🇱" },
|
|
110
|
-
{ code: "MT", name: "Malta", flag: "🇲🇹" },
|
|
111
|
-
{ code: "MH", name: "Marshall Islands", flag: "🇲🇭" },
|
|
112
|
-
{ code: "MR", name: "Mauritania", flag: "🇲🇷" },
|
|
113
|
-
{ code: "MU", name: "Mauritius", flag: "🇲🇺" },
|
|
114
|
-
{ code: "MX", name: "Mexico", flag: "🇲🇽" },
|
|
115
|
-
{ code: "FM", name: "Micronesia", flag: "🇫🇲" },
|
|
116
|
-
{ code: "MD", name: "Moldova", flag: "🇲🇩" },
|
|
117
|
-
{ code: "MC", name: "Monaco", flag: "🇲🇨" },
|
|
118
|
-
{ code: "MN", name: "Mongolia", flag: "🇲🇳" },
|
|
119
|
-
{ code: "ME", name: "Montenegro", flag: "🇲🇪" },
|
|
120
|
-
{ code: "MA", name: "Morocco", flag: "🇲🇦" },
|
|
121
|
-
{ code: "MZ", name: "Mozambique", flag: "🇲🇿" },
|
|
122
|
-
{ code: "MM", name: "Myanmar", flag: "🇲🇲" },
|
|
123
|
-
{ code: "NA", name: "Namibia", flag: "🇳🇦" },
|
|
124
|
-
{ code: "NR", name: "Nauru", flag: "🇳🇷" },
|
|
125
|
-
{ code: "NP", name: "Nepal", flag: "🇳🇵" },
|
|
126
|
-
{ code: "NL", name: "Netherlands", flag: "🇳🇱" },
|
|
127
|
-
{ code: "NZ", name: "New Zealand", flag: "🇳🇿" },
|
|
128
|
-
{ code: "NI", name: "Nicaragua", flag: "🇳🇮" },
|
|
129
|
-
{ code: "NE", name: "Niger", flag: "🇳🇪" },
|
|
130
|
-
{ code: "NG", name: "Nigeria", flag: "🇳🇬" },
|
|
131
|
-
{ code: "MK", name: "North Macedonia", flag: "🇲🇰" },
|
|
132
|
-
{ code: "NO", name: "Norway", flag: "🇳🇴" },
|
|
133
|
-
{ code: "OM", name: "Oman", flag: "🇴🇲" },
|
|
134
|
-
{ code: "PK", name: "Pakistan", flag: "🇵🇰" },
|
|
135
|
-
{ code: "PW", name: "Palau", flag: "🇵🇼" },
|
|
136
|
-
{ code: "PS", name: "Palestine", flag: "🇵🇸" },
|
|
137
|
-
{ code: "PA", name: "Panama", flag: "🇵🇦" },
|
|
138
|
-
{ code: "PG", name: "Papua New Guinea", flag: "🇵🇬" },
|
|
139
|
-
{ code: "PY", name: "Paraguay", flag: "🇵🇾" },
|
|
140
|
-
{ code: "PE", name: "Peru", flag: "🇵🇪" },
|
|
141
|
-
{ code: "PH", name: "Philippines", flag: "🇵🇭" },
|
|
142
|
-
{ code: "PL", name: "Poland", flag: "🇵🇱" },
|
|
143
|
-
{ code: "PT", name: "Portugal", flag: "🇵🇹" },
|
|
144
|
-
{ code: "QA", name: "Qatar", flag: "🇶🇦" },
|
|
145
|
-
{ code: "RO", name: "Romania", flag: "🇷🇴" },
|
|
146
|
-
{ code: "RU", name: "Russia", flag: "🇷🇺" },
|
|
147
|
-
{ code: "RW", name: "Rwanda", flag: "🇷🇼" },
|
|
148
|
-
{ code: "KN", name: "Saint Kitts and Nevis", flag: "🇰🇳" },
|
|
149
|
-
{ code: "LC", name: "Saint Lucia", flag: "🇱🇨" },
|
|
150
|
-
{ code: "VC", name: "Saint Vincent and the Grenadines", flag: "🇻🇨" },
|
|
151
|
-
{ code: "WS", name: "Samoa", flag: "🇼🇸" },
|
|
152
|
-
{ code: "SM", name: "San Marino", flag: "🇸🇲" },
|
|
153
|
-
{ code: "ST", name: "Sao Tome and Principe", flag: "🇸🇹" },
|
|
154
|
-
{ code: "SA", name: "Saudi Arabia", flag: "🇸🇦" },
|
|
155
|
-
{ code: "SN", name: "Senegal", flag: "🇸🇳" },
|
|
156
|
-
{ code: "RS", name: "Serbia", flag: "🇷🇸" },
|
|
157
|
-
{ code: "SC", name: "Seychelles", flag: "🇸🇨" },
|
|
158
|
-
{ code: "SL", name: "Sierra Leone", flag: "🇸🇱" },
|
|
159
|
-
{ code: "SG", name: "Singapore", flag: "🇸🇬" },
|
|
160
|
-
{ code: "SK", name: "Slovakia", flag: "🇸🇰" },
|
|
161
|
-
{ code: "SI", name: "Slovenia", flag: "🇸🇮" },
|
|
162
|
-
{ code: "SB", name: "Solomon Islands", flag: "🇸🇧" },
|
|
163
|
-
{ code: "SO", name: "Somalia", flag: "🇸🇴" },
|
|
164
|
-
{ code: "ZA", name: "South Africa", flag: "🇿🇦" },
|
|
165
|
-
{ code: "SS", name: "South Sudan", flag: "🇸🇸" },
|
|
166
|
-
{ code: "ES", name: "Spain", flag: "🇪🇸" },
|
|
167
|
-
{ code: "LK", name: "Sri Lanka", flag: "🇱🇰" },
|
|
168
|
-
{ code: "SD", name: "Sudan", flag: "🇸🇩" },
|
|
169
|
-
{ code: "SR", name: "Suriname", flag: "🇸🇷" },
|
|
170
|
-
{ code: "SE", name: "Sweden", flag: "🇸🇪" },
|
|
171
|
-
{ code: "CH", name: "Switzerland", flag: "🇨🇭" },
|
|
172
|
-
{ code: "SY", name: "Syria", flag: "🇸🇾" },
|
|
173
|
-
{ code: "TW", name: "Taiwan", flag: "🇹🇼" },
|
|
174
|
-
{ code: "TJ", name: "Tajikistan", flag: "🇹🇯" },
|
|
175
|
-
{ code: "TZ", name: "Tanzania", flag: "🇹🇿" },
|
|
176
|
-
{ code: "TH", name: "Thailand", flag: "🇹🇭" },
|
|
177
|
-
{ code: "TL", name: "Timor-Leste", flag: "🇹🇱" },
|
|
178
|
-
{ code: "TG", name: "Togo", flag: "🇹🇬" },
|
|
179
|
-
{ code: "TO", name: "Tonga", flag: "🇹🇴" },
|
|
180
|
-
{ code: "TT", name: "Trinidad and Tobago", flag: "🇹🇹" },
|
|
181
|
-
{ code: "TN", name: "Tunisia", flag: "🇹🇳" },
|
|
182
|
-
{ code: "TR", name: "Turkey", flag: "🇹🇷" },
|
|
183
|
-
{ code: "TM", name: "Turkmenistan", flag: "🇹🇲" },
|
|
184
|
-
{ code: "TV", name: "Tuvalu", flag: "🇹🇻" },
|
|
185
|
-
{ code: "UG", name: "Uganda", flag: "🇺🇬" },
|
|
186
|
-
{ code: "UA", name: "Ukraine", flag: "🇺🇦" },
|
|
187
|
-
{ code: "AE", name: "United Arab Emirates", flag: "🇦🇪" },
|
|
188
|
-
{ code: "GB", name: "United Kingdom", flag: "🇬🇧" },
|
|
189
|
-
{ code: "US", name: "United States", flag: "🇺🇸" },
|
|
190
|
-
{ code: "UY", name: "Uruguay", flag: "🇺🇾" },
|
|
191
|
-
{ code: "UZ", name: "Uzbekistan", flag: "🇺🇿" },
|
|
192
|
-
{ code: "VU", name: "Vanuatu", flag: "🇻🇺" },
|
|
193
|
-
{ code: "VA", name: "Vatican City", flag: "🇻🇦" },
|
|
194
|
-
{ code: "VE", name: "Venezuela", flag: "🇻🇪" },
|
|
195
|
-
{ code: "VN", name: "Vietnam", flag: "🇻🇳" },
|
|
196
|
-
{ code: "YE", name: "Yemen", flag: "🇾🇪" },
|
|
197
|
-
{ code: "ZM", name: "Zambia", flag: "🇿🇲" },
|
|
198
|
-
{ code: "ZW", name: "Zimbabwe", flag: "🇿🇼" }
|
|
199
|
-
];
|
|
200
|
-
|
|
201
|
-
export const countriesWithFlags = Object.fromEntries(
|
|
202
|
-
countries.map((c) => [c.code, { name: c.name, flag: c.flag }])
|
|
203
|
-
);
|
package/src/lib/index.ts
DELETED
package/src/lib/utils.ts
DELETED
|
@@ -1,15 +0,0 @@
|
|
|
1
|
-
import { type ClassValue, clsx } from "clsx";
|
|
2
|
-
import { twMerge } from "tailwind-merge";
|
|
3
|
-
|
|
4
|
-
/**
|
|
5
|
-
* Utility function to merge Tailwind CSS classes
|
|
6
|
-
* Combines clsx for conditional classes and tailwind-merge for deduplication
|
|
7
|
-
*
|
|
8
|
-
* @example
|
|
9
|
-
* ```tsx
|
|
10
|
-
* cn("px-4 py-2", isActive && "bg-purple500", className)
|
|
11
|
-
* ```
|
|
12
|
-
*/
|
|
13
|
-
export function cn(...inputs: ClassValue[]) {
|
|
14
|
-
return twMerge(clsx(inputs));
|
|
15
|
-
}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export * from "./theme";
|
|
@@ -1,148 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Theme Validator
|
|
3
|
-
* Validates that required CSS variables are defined in the theme
|
|
4
|
-
*/
|
|
5
|
-
|
|
6
|
-
const requiredCSSVariables = [
|
|
7
|
-
// Shadcn default variables
|
|
8
|
-
"--background",
|
|
9
|
-
"--foreground",
|
|
10
|
-
"--card",
|
|
11
|
-
"--card-foreground",
|
|
12
|
-
"--popover",
|
|
13
|
-
"--popover-foreground",
|
|
14
|
-
"--primary",
|
|
15
|
-
"--primary-foreground",
|
|
16
|
-
"--secondary",
|
|
17
|
-
"--secondary-foreground",
|
|
18
|
-
"--muted",
|
|
19
|
-
"--muted-foreground",
|
|
20
|
-
"--accent",
|
|
21
|
-
"--accent-foreground",
|
|
22
|
-
"--destructive",
|
|
23
|
-
"--destructive-foreground",
|
|
24
|
-
"--border",
|
|
25
|
-
"--input",
|
|
26
|
-
"--ring",
|
|
27
|
-
"--radius",
|
|
28
|
-
|
|
29
|
-
// Custom theme variables (from client)
|
|
30
|
-
"--gray25",
|
|
31
|
-
"--gray50",
|
|
32
|
-
"--gray100",
|
|
33
|
-
"--gray200",
|
|
34
|
-
"--gray300",
|
|
35
|
-
"--gray400",
|
|
36
|
-
"--gray500",
|
|
37
|
-
"--gray600",
|
|
38
|
-
"--gray700",
|
|
39
|
-
"--gray800",
|
|
40
|
-
"--gray900",
|
|
41
|
-
"--purple100",
|
|
42
|
-
"--purple200",
|
|
43
|
-
"--purple500",
|
|
44
|
-
"--purple-text",
|
|
45
|
-
"--purple50",
|
|
46
|
-
"--purple20",
|
|
47
|
-
"--purple-border",
|
|
48
|
-
"--purpleLight",
|
|
49
|
-
"--purple-text-1",
|
|
50
|
-
"--purple-text-2",
|
|
51
|
-
] as const;
|
|
52
|
-
|
|
53
|
-
/**
|
|
54
|
-
* Get computed CSS variable value
|
|
55
|
-
*/
|
|
56
|
-
export function getCSSVariable(variable: string, element: HTMLElement = document.documentElement): string {
|
|
57
|
-
return getComputedStyle(element).getPropertyValue(variable).trim();
|
|
58
|
-
}
|
|
59
|
-
|
|
60
|
-
/**
|
|
61
|
-
* Check if a CSS variable is defined
|
|
62
|
-
*/
|
|
63
|
-
export function isCSSVariableDefined(variable: string, element: HTMLElement = document.documentElement): boolean {
|
|
64
|
-
const value = getCSSVariable(variable, element);
|
|
65
|
-
return value !== "";
|
|
66
|
-
}
|
|
67
|
-
|
|
68
|
-
/**
|
|
69
|
-
* Validate that all required CSS variables are defined
|
|
70
|
-
* @returns Object with validation result and missing variables
|
|
71
|
-
*/
|
|
72
|
-
export function validateTheme(element: HTMLElement = document.documentElement): {
|
|
73
|
-
isValid: boolean;
|
|
74
|
-
missingVariables: string[];
|
|
75
|
-
warnings: string[];
|
|
76
|
-
} {
|
|
77
|
-
const missingVariables: string[] = [];
|
|
78
|
-
const warnings: string[] = [];
|
|
79
|
-
|
|
80
|
-
for (const variable of requiredCSSVariables) {
|
|
81
|
-
if (!isCSSVariableDefined(variable, element)) {
|
|
82
|
-
missingVariables.push(variable);
|
|
83
|
-
}
|
|
84
|
-
}
|
|
85
|
-
|
|
86
|
-
// Check for dark mode variables
|
|
87
|
-
const darkElement = document.querySelector(".dark");
|
|
88
|
-
if (!darkElement) {
|
|
89
|
-
warnings.push("Dark mode class '.dark' not found. Dark mode may not work correctly.");
|
|
90
|
-
}
|
|
91
|
-
|
|
92
|
-
return {
|
|
93
|
-
isValid: missingVariables.length === 0,
|
|
94
|
-
missingVariables,
|
|
95
|
-
warnings,
|
|
96
|
-
};
|
|
97
|
-
}
|
|
98
|
-
|
|
99
|
-
/**
|
|
100
|
-
* Log theme validation results to console
|
|
101
|
-
*/
|
|
102
|
-
export function logThemeValidation(): void {
|
|
103
|
-
const result = validateTheme();
|
|
104
|
-
|
|
105
|
-
if (result.isValid) {
|
|
106
|
-
console.log("✅ Theme validation passed! All required CSS variables are defined.");
|
|
107
|
-
} else {
|
|
108
|
-
console.error("❌ Theme validation failed! Missing CSS variables:");
|
|
109
|
-
result.missingVariables.forEach((variable) => {
|
|
110
|
-
console.error(` - ${variable}`);
|
|
111
|
-
});
|
|
112
|
-
}
|
|
113
|
-
|
|
114
|
-
if (result.warnings.length > 0) {
|
|
115
|
-
console.warn("⚠️ Theme warnings:");
|
|
116
|
-
result.warnings.forEach((warning) => {
|
|
117
|
-
console.warn(` - ${warning}`);
|
|
118
|
-
});
|
|
119
|
-
}
|
|
120
|
-
}
|
|
121
|
-
|
|
122
|
-
/**
|
|
123
|
-
* Assert that theme is valid (throws error if not)
|
|
124
|
-
* Use this in development to catch theme issues early
|
|
125
|
-
*/
|
|
126
|
-
export function assertThemeValid(): void {
|
|
127
|
-
const result = validateTheme();
|
|
128
|
-
|
|
129
|
-
if (!result.isValid) {
|
|
130
|
-
throw new Error(
|
|
131
|
-
`Theme validation failed! Missing CSS variables: ${result.missingVariables.join(", ")}`
|
|
132
|
-
);
|
|
133
|
-
}
|
|
134
|
-
}
|
|
135
|
-
|
|
136
|
-
/**
|
|
137
|
-
* Get all CSS variables as an object
|
|
138
|
-
* Useful for debugging
|
|
139
|
-
*/
|
|
140
|
-
export function getAllCSSVariables(element: HTMLElement = document.documentElement): Record<string, string> {
|
|
141
|
-
const variables: Record<string, string> = {};
|
|
142
|
-
|
|
143
|
-
for (const variable of requiredCSSVariables) {
|
|
144
|
-
variables[variable] = getCSSVariable(variable, element);
|
|
145
|
-
}
|
|
146
|
-
|
|
147
|
-
return variables;
|
|
148
|
-
}
|
package/src/molecules/creator-discovery/AudienceDemographicsCard/AudienceDemographicsCard.tsx
DELETED
|
@@ -1,44 +0,0 @@
|
|
|
1
|
-
import React from "react";
|
|
2
|
-
import { Card, CardHeader, CardTitle, CardContent } from "@/components/ui/card";
|
|
3
|
-
import { ChartAtom } from "../../../atoms/ChartAtom";
|
|
4
|
-
import { AudienceDemographicsCardMolecule } from "../../../types/molecules";
|
|
5
|
-
import { cn } from "@/lib/utils";
|
|
6
|
-
|
|
7
|
-
/**
|
|
8
|
-
* AudienceDemographicsCard
|
|
9
|
-
* Visualizes audience data using appropriate chart types.
|
|
10
|
-
*/
|
|
11
|
-
export const AudienceDemographicsCard: React.FC<
|
|
12
|
-
AudienceDemographicsCardMolecule
|
|
13
|
-
> = ({ title, data, config, demographicType, className }) => {
|
|
14
|
-
const chartType = demographicType === "location" ? "bar" : "pie";
|
|
15
|
-
|
|
16
|
-
return (
|
|
17
|
-
<Card
|
|
18
|
-
className={cn(
|
|
19
|
-
"rounded-[32px] border-purple-50 shadow-sm overflow-hidden",
|
|
20
|
-
className,
|
|
21
|
-
)}
|
|
22
|
-
>
|
|
23
|
-
<CardHeader className="pb-2">
|
|
24
|
-
<CardTitle className="text-lg font-bold text-gray-900">
|
|
25
|
-
{title}
|
|
26
|
-
</CardTitle>
|
|
27
|
-
</CardHeader>
|
|
28
|
-
<CardContent>
|
|
29
|
-
<div className="h-[250px] w-full">
|
|
30
|
-
<ChartAtom
|
|
31
|
-
type="chart"
|
|
32
|
-
id="audience-demographics"
|
|
33
|
-
chartType={chartType}
|
|
34
|
-
data={data}
|
|
35
|
-
config={config}
|
|
36
|
-
XAxisKey="name"
|
|
37
|
-
YAxisKey="value"
|
|
38
|
-
showLegend={true}
|
|
39
|
-
/>
|
|
40
|
-
</div>
|
|
41
|
-
</CardContent>
|
|
42
|
-
</Card>
|
|
43
|
-
);
|
|
44
|
-
};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export * from "./AudienceDemographicsCard";
|
|
@@ -1,50 +0,0 @@
|
|
|
1
|
-
import React from "react";
|
|
2
|
-
import { Card, CardHeader, CardTitle, CardContent } from "@/components";
|
|
3
|
-
import { ProgressAtom } from "../../../atoms/ProgressAtom";
|
|
4
|
-
import { AudienceMetricCardMolecule } from "../../../types/molecules";
|
|
5
|
-
import { cn } from "@/lib/utils";
|
|
6
|
-
|
|
7
|
-
/**
|
|
8
|
-
* AudienceMetricCard
|
|
9
|
-
* A card displaying specific audience metrics with progress bars.
|
|
10
|
-
*/
|
|
11
|
-
export const AudienceMetricCard: React.FC<AudienceMetricCardMolecule> = ({
|
|
12
|
-
title,
|
|
13
|
-
metrics,
|
|
14
|
-
className,
|
|
15
|
-
}) => {
|
|
16
|
-
return (
|
|
17
|
-
<Card
|
|
18
|
-
className={cn(
|
|
19
|
-
"bg-white border-purple-50 rounded-3xl overflow-hidden",
|
|
20
|
-
className,
|
|
21
|
-
)}
|
|
22
|
-
>
|
|
23
|
-
<CardHeader className="pb-2">
|
|
24
|
-
<CardTitle className="text-lg font-bold text-gray-900">
|
|
25
|
-
{title}
|
|
26
|
-
</CardTitle>
|
|
27
|
-
</CardHeader>
|
|
28
|
-
<CardContent className="space-y-4">
|
|
29
|
-
{metrics.map((metric, i) => (
|
|
30
|
-
<div key={i} className="space-y-1.5">
|
|
31
|
-
<div className="flex justify-between items-center text-sm">
|
|
32
|
-
<span className="font-medium text-gray-700">{metric.label}</span>
|
|
33
|
-
<span className="font-bold text-gray-900">{metric.value}</span>
|
|
34
|
-
</div>
|
|
35
|
-
{metric.percentage !== undefined && (
|
|
36
|
-
<ProgressAtom
|
|
37
|
-
id={`progress-${i}`}
|
|
38
|
-
type="progress"
|
|
39
|
-
value={metric.percentage}
|
|
40
|
-
className="h-1.5 bg-purple-50"
|
|
41
|
-
/* @ts-ignore - custom className for progress indicator */
|
|
42
|
-
indicatorClassName="bg-gradient-to-r from-purple-500 to-indigo-500"
|
|
43
|
-
/>
|
|
44
|
-
)}
|
|
45
|
-
</div>
|
|
46
|
-
))}
|
|
47
|
-
</CardContent>
|
|
48
|
-
</Card>
|
|
49
|
-
);
|
|
50
|
-
};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export * from "./AudienceMetricCard";
|
|
@@ -1,36 +0,0 @@
|
|
|
1
|
-
import React from "react";
|
|
2
|
-
import { BrandAffinityGroupMolecule } from "../../../types/molecules";
|
|
3
|
-
import { cn } from "@/lib/utils";
|
|
4
|
-
|
|
5
|
-
/**
|
|
6
|
-
* BrandAffinityGroup
|
|
7
|
-
* Visual group of associated brand logos.
|
|
8
|
-
*/
|
|
9
|
-
export const BrandAffinityGroup: React.FC<BrandAffinityGroupMolecule> = ({
|
|
10
|
-
brands,
|
|
11
|
-
className,
|
|
12
|
-
}) => {
|
|
13
|
-
return (
|
|
14
|
-
<div className={cn("flex flex-col gap-3", className)}>
|
|
15
|
-
<h5 className="text-[10px] font-bold uppercase tracking-widest text-muted-foreground">
|
|
16
|
-
Recent Collaborations
|
|
17
|
-
</h5>
|
|
18
|
-
<div className="flex flex-wrap gap-4 items-center">
|
|
19
|
-
{brands.map((brand, i) => (
|
|
20
|
-
<div key={i} className="group relative">
|
|
21
|
-
<div className="h-10 w-10 overflow-hidden rounded-xl bg-white border border-gray-100 p-1.5 flex items-center justify-center grayscale hover:grayscale-0 transition-all duration-300 hover:scale-110 shadow-sm hover:shadow-md">
|
|
22
|
-
<img
|
|
23
|
-
src={brand.logoSrc}
|
|
24
|
-
alt={brand.name}
|
|
25
|
-
className="max-h-full max-w-full object-contain"
|
|
26
|
-
/>
|
|
27
|
-
</div>
|
|
28
|
-
<div className="absolute -bottom-6 left-1/2 -translate-x-1/2 px-2 py-0.5 bg-gray-900 text-white text-[10px] rounded opacity-0 group-hover:opacity-100 transition-opacity whitespace-nowrap z-50 pointer-events-none">
|
|
29
|
-
{brand.name}
|
|
30
|
-
</div>
|
|
31
|
-
</div>
|
|
32
|
-
))}
|
|
33
|
-
</div>
|
|
34
|
-
</div>
|
|
35
|
-
);
|
|
36
|
-
};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export * from "./BrandAffinityGroup";
|
|
@@ -1,123 +0,0 @@
|
|
|
1
|
-
import React from "react";
|
|
2
|
-
import { CampaignSeedCardProps } from "./CampaignSeedCard.types";
|
|
3
|
-
import { FormCard } from "../../generic/FormCard";
|
|
4
|
-
import { FieldConfig } from "@/types/common";
|
|
5
|
-
import { CheckCircle2 } from "lucide-react";
|
|
6
|
-
|
|
7
|
-
/**
|
|
8
|
-
* Default field configuration for Campaign Seed
|
|
9
|
-
*/
|
|
10
|
-
export const CAMPAIGN_SEED_FIELDS: FieldConfig[] = [
|
|
11
|
-
{
|
|
12
|
-
key: "brand",
|
|
13
|
-
label: "Brand / Campaign",
|
|
14
|
-
type: "text",
|
|
15
|
-
placeholder: "Not specified",
|
|
16
|
-
},
|
|
17
|
-
{
|
|
18
|
-
key: "objective",
|
|
19
|
-
label: "Objective",
|
|
20
|
-
type: "text",
|
|
21
|
-
placeholder: "Not specified",
|
|
22
|
-
},
|
|
23
|
-
{
|
|
24
|
-
key: "budget_hint",
|
|
25
|
-
label: "Budget Hint",
|
|
26
|
-
type: "slider",
|
|
27
|
-
placeholder: "Not specified",
|
|
28
|
-
sliderConfig: {
|
|
29
|
-
min: 0,
|
|
30
|
-
max: 1000000,
|
|
31
|
-
step: 1000,
|
|
32
|
-
formatValue: (value: any) => {
|
|
33
|
-
if (!value) return "$0 - $100K";
|
|
34
|
-
|
|
35
|
-
const formatCurrency = (amount: number) => {
|
|
36
|
-
if (amount >= 1000000) return `$${(amount / 1000000).toFixed(1)}M`;
|
|
37
|
-
if (amount >= 1000) return `$${(amount / 1000).toFixed(0)}K`;
|
|
38
|
-
return `$${amount.toLocaleString()}`;
|
|
39
|
-
};
|
|
40
|
-
|
|
41
|
-
let normalized;
|
|
42
|
-
if (typeof value === "object" && value?.min !== undefined) {
|
|
43
|
-
normalized = value;
|
|
44
|
-
} else if (typeof value === "string" && value.includes("-")) {
|
|
45
|
-
const [minStr, maxStr] = value.split("-");
|
|
46
|
-
normalized = {
|
|
47
|
-
min: Number(minStr) || 0,
|
|
48
|
-
max: Number(maxStr) || 100000,
|
|
49
|
-
};
|
|
50
|
-
} else {
|
|
51
|
-
const val = Number(String(value).replace(/[^0-9.]/g, "")) || 0;
|
|
52
|
-
normalized =
|
|
53
|
-
val > 0 ? { min: val, max: val } : { min: 0, max: 100000 };
|
|
54
|
-
}
|
|
55
|
-
|
|
56
|
-
if (normalized.min === normalized.max)
|
|
57
|
-
return formatCurrency(normalized.min);
|
|
58
|
-
return `${formatCurrency(normalized.min)} - ${formatCurrency(normalized.max)}`;
|
|
59
|
-
},
|
|
60
|
-
},
|
|
61
|
-
},
|
|
62
|
-
{
|
|
63
|
-
key: "geo_or_audience",
|
|
64
|
-
label: "Geography or Audience",
|
|
65
|
-
type: "text",
|
|
66
|
-
placeholder: "Not specified",
|
|
67
|
-
},
|
|
68
|
-
{
|
|
69
|
-
key: "timeline_opt",
|
|
70
|
-
label: "Timeline Option",
|
|
71
|
-
type: "text",
|
|
72
|
-
placeholder: "Not specified",
|
|
73
|
-
},
|
|
74
|
-
{
|
|
75
|
-
key: "notes",
|
|
76
|
-
label: "Notes",
|
|
77
|
-
type: "textarea",
|
|
78
|
-
placeholder: "No notes",
|
|
79
|
-
rows: 4,
|
|
80
|
-
},
|
|
81
|
-
];
|
|
82
|
-
|
|
83
|
-
/**
|
|
84
|
-
* CampaignSeedCard
|
|
85
|
-
*
|
|
86
|
-
* A domain-specific molecule for the Creator Discovery workflow.
|
|
87
|
-
* Encapsulates the specific brand info fields and selection status.
|
|
88
|
-
*/
|
|
89
|
-
export const CampaignSeedCard = React.memo<CampaignSeedCardProps>(
|
|
90
|
-
({
|
|
91
|
-
selectionStatus,
|
|
92
|
-
isLatestMessage = true,
|
|
93
|
-
className,
|
|
94
|
-
...formCardProps
|
|
95
|
-
}) => {
|
|
96
|
-
return (
|
|
97
|
-
<div className="flex flex-col gap-2">
|
|
98
|
-
<FormCard
|
|
99
|
-
{...formCardProps}
|
|
100
|
-
title={formCardProps.title || "Brand Information"}
|
|
101
|
-
fields={CAMPAIGN_SEED_FIELDS}
|
|
102
|
-
className={className}
|
|
103
|
-
footer={
|
|
104
|
-
!isLatestMessage && selectionStatus ? (
|
|
105
|
-
<div className="flex justify-end items-center gap-1.5 text-green-600 text-xs font-semibold py-1">
|
|
106
|
-
<CheckCircle2 className="h-4 w-4" />
|
|
107
|
-
<span>
|
|
108
|
-
{selectionStatus === "agent"
|
|
109
|
-
? "Selected by Agent"
|
|
110
|
-
: "Selected by User"}
|
|
111
|
-
</span>
|
|
112
|
-
</div>
|
|
113
|
-
) : (
|
|
114
|
-
formCardProps.footer
|
|
115
|
-
)
|
|
116
|
-
}
|
|
117
|
-
/>
|
|
118
|
-
</div>
|
|
119
|
-
);
|
|
120
|
-
},
|
|
121
|
-
);
|
|
122
|
-
|
|
123
|
-
CampaignSeedCard.displayName = "CampaignSeedCard";
|
|
@@ -1,13 +0,0 @@
|
|
|
1
|
-
import { FormCardProps } from "../../generic/FormCard";
|
|
2
|
-
|
|
3
|
-
export interface CampaignSeedCardProps extends Omit<FormCardProps, "fields"> {
|
|
4
|
-
/**
|
|
5
|
-
* Status of the selection (done by user or agent)
|
|
6
|
-
*/
|
|
7
|
-
selectionStatus?: "user" | "agent";
|
|
8
|
-
|
|
9
|
-
/**
|
|
10
|
-
* Whether the message is the latest (to show countdown/actions)
|
|
11
|
-
*/
|
|
12
|
-
isLatestMessage?: boolean;
|
|
13
|
-
}
|