@apps-megafy/ui 0.1.22

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 (103) hide show
  1. package/components.json +17 -0
  2. package/dist/components/AttachmentViewer/index.d.ts +7 -0
  3. package/dist/components/AttachmentViewer/index.d.ts.map +1 -0
  4. package/dist/components/AttachmentViewer/index.js +15 -0
  5. package/dist/components/AttachmentViewer/index.js.map +1 -0
  6. package/dist/components/CameraCapture/index.d.ts +7 -0
  7. package/dist/components/CameraCapture/index.d.ts.map +1 -0
  8. package/dist/components/CameraCapture/index.js +153 -0
  9. package/dist/components/CameraCapture/index.js.map +1 -0
  10. package/dist/components/ChatInput/index.d.ts +19 -0
  11. package/dist/components/ChatInput/index.d.ts.map +1 -0
  12. package/dist/components/ChatInput/index.js +124 -0
  13. package/dist/components/ChatInput/index.js.map +1 -0
  14. package/dist/components/ChoiceCardPanel/index.d.ts +11 -0
  15. package/dist/components/ChoiceCardPanel/index.d.ts.map +1 -0
  16. package/dist/components/ChoiceCardPanel/index.js +101 -0
  17. package/dist/components/ChoiceCardPanel/index.js.map +1 -0
  18. package/dist/components/ConfirmationSummaryCard/index.d.ts +7 -0
  19. package/dist/components/ConfirmationSummaryCard/index.d.ts.map +1 -0
  20. package/dist/components/ConfirmationSummaryCard/index.js +7 -0
  21. package/dist/components/ConfirmationSummaryCard/index.js.map +1 -0
  22. package/dist/components/ConsentViewer/index.d.ts +9 -0
  23. package/dist/components/ConsentViewer/index.d.ts.map +1 -0
  24. package/dist/components/ConsentViewer/index.js +8 -0
  25. package/dist/components/ConsentViewer/index.js.map +1 -0
  26. package/dist/components/FrontendWidgetsArea/index.d.ts +17 -0
  27. package/dist/components/FrontendWidgetsArea/index.d.ts.map +1 -0
  28. package/dist/components/FrontendWidgetsArea/index.js +329 -0
  29. package/dist/components/FrontendWidgetsArea/index.js.map +1 -0
  30. package/dist/components/MessageArea/index.d.ts +14 -0
  31. package/dist/components/MessageArea/index.d.ts.map +1 -0
  32. package/dist/components/MessageArea/index.js +17 -0
  33. package/dist/components/MessageArea/index.js.map +1 -0
  34. package/dist/components/MessageBubble/index.d.ts +11 -0
  35. package/dist/components/MessageBubble/index.d.ts.map +1 -0
  36. package/dist/components/MessageBubble/index.js +17 -0
  37. package/dist/components/MessageBubble/index.js.map +1 -0
  38. package/dist/components/ProgressSteps/index.d.ts +23 -0
  39. package/dist/components/ProgressSteps/index.d.ts.map +1 -0
  40. package/dist/components/ProgressSteps/index.js +50 -0
  41. package/dist/components/ProgressSteps/index.js.map +1 -0
  42. package/dist/components/QuestionCardPanel/CardShell.d.ts +14 -0
  43. package/dist/components/QuestionCardPanel/CardShell.d.ts.map +1 -0
  44. package/dist/components/QuestionCardPanel/CardShell.js +8 -0
  45. package/dist/components/QuestionCardPanel/CardShell.js.map +1 -0
  46. package/dist/components/QuestionCardPanel/index.d.ts +11 -0
  47. package/dist/components/QuestionCardPanel/index.d.ts.map +1 -0
  48. package/dist/components/QuestionCardPanel/index.js +17 -0
  49. package/dist/components/QuestionCardPanel/index.js.map +1 -0
  50. package/dist/components/QuickActionButton/index.d.ts +6 -0
  51. package/dist/components/QuickActionButton/index.d.ts.map +1 -0
  52. package/dist/components/QuickActionButton/index.js +7 -0
  53. package/dist/components/QuickActionButton/index.js.map +1 -0
  54. package/dist/components/QuickActionsArea/index.d.ts +8 -0
  55. package/dist/components/QuickActionsArea/index.d.ts.map +1 -0
  56. package/dist/components/QuickActionsArea/index.js +10 -0
  57. package/dist/components/QuickActionsArea/index.js.map +1 -0
  58. package/dist/components/RegenerateMessageButton/index.d.ts +3 -0
  59. package/dist/components/RegenerateMessageButton/index.d.ts.map +1 -0
  60. package/dist/components/RegenerateMessageButton/index.js +7 -0
  61. package/dist/components/RegenerateMessageButton/index.js.map +1 -0
  62. package/dist/components/RichText/index.d.ts +6 -0
  63. package/dist/components/RichText/index.d.ts.map +1 -0
  64. package/dist/components/RichText/index.js +113 -0
  65. package/dist/components/RichText/index.js.map +1 -0
  66. package/dist/components/TimeEstimateCard/index.d.ts +7 -0
  67. package/dist/components/TimeEstimateCard/index.d.ts.map +1 -0
  68. package/dist/components/TimeEstimateCard/index.js +14 -0
  69. package/dist/components/TimeEstimateCard/index.js.map +1 -0
  70. package/dist/components/UploadDocumentButton/index.d.ts +3 -0
  71. package/dist/components/UploadDocumentButton/index.d.ts.map +1 -0
  72. package/dist/components/UploadDocumentButton/index.js +7 -0
  73. package/dist/components/UploadDocumentButton/index.js.map +1 -0
  74. package/dist/components/primitives/Avatar.d.ts +8 -0
  75. package/dist/components/primitives/Avatar.d.ts.map +1 -0
  76. package/dist/components/primitives/Avatar.js +6 -0
  77. package/dist/components/primitives/Avatar.js.map +1 -0
  78. package/dist/components/primitives/Button.d.ts +12 -0
  79. package/dist/components/primitives/Button.d.ts.map +1 -0
  80. package/dist/components/primitives/Button.js +34 -0
  81. package/dist/components/primitives/Button.js.map +1 -0
  82. package/dist/components/primitives/Dialog.d.ts +11 -0
  83. package/dist/components/primitives/Dialog.d.ts.map +1 -0
  84. package/dist/components/primitives/Dialog.js +16 -0
  85. package/dist/components/primitives/Dialog.js.map +1 -0
  86. package/dist/components/primitives/index.d.ts +4 -0
  87. package/dist/components/primitives/index.d.ts.map +1 -0
  88. package/dist/components/primitives/index.js +4 -0
  89. package/dist/components/primitives/index.js.map +1 -0
  90. package/dist/index.d.ts +20 -0
  91. package/dist/index.d.ts.map +1 -0
  92. package/dist/index.js +20 -0
  93. package/dist/index.js.map +1 -0
  94. package/dist/lib/utils.d.ts +3 -0
  95. package/dist/lib/utils.d.ts.map +1 -0
  96. package/dist/lib/utils.js +6 -0
  97. package/dist/lib/utils.js.map +1 -0
  98. package/dist/types.d.ts +126 -0
  99. package/dist/types.d.ts.map +1 -0
  100. package/dist/types.js +2 -0
  101. package/dist/types.js.map +1 -0
  102. package/package.json +52 -0
  103. package/src/styles.css +107 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utils.js","sourceRoot":"","sources":["../../src/lib/utils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAmB,MAAM,MAAM,CAAC;AAC7C,OAAO,EAAE,OAAO,EAAE,MAAM,gBAAgB,CAAC;AAEzC,MAAM,UAAU,EAAE,CAAC,GAAG,MAAoB;IACxC,OAAO,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC;AAC/B,CAAC"}
@@ -0,0 +1,126 @@
1
+ import type { ReactNode } from "react";
2
+ export type AgentRole = "agent" | "assistant" | "user" | "system";
3
+ export type AgentAttachmentKind = "image" | "document";
4
+ export interface AgentAttachment {
5
+ id: string;
6
+ name: string;
7
+ url: string;
8
+ kind: AgentAttachmentKind;
9
+ mimeType?: string;
10
+ sizeLabel?: string;
11
+ sizeBytes?: number;
12
+ downloadUrl?: string;
13
+ previewUrl?: string;
14
+ }
15
+ export interface ConfirmationSummaryItem {
16
+ id: string;
17
+ label: string;
18
+ value: string;
19
+ }
20
+ export interface ConfirmationSummarySection {
21
+ id: string;
22
+ title: string;
23
+ items: ConfirmationSummaryItem[];
24
+ }
25
+ export interface ConfirmationSummary {
26
+ id: string;
27
+ title: string;
28
+ description?: string;
29
+ sections: ConfirmationSummarySection[];
30
+ }
31
+ export interface AgentMessage {
32
+ id: string;
33
+ role: AgentRole;
34
+ content: string;
35
+ createdAt?: Date | string;
36
+ isStreaming?: boolean;
37
+ status?: "sending" | "sent" | "failed";
38
+ attachments?: AgentAttachment[];
39
+ confirmation?: ConfirmationSummary;
40
+ }
41
+ export interface DatePickerWidget {
42
+ id: string;
43
+ type: "date_picker";
44
+ fieldId: string;
45
+ label: string;
46
+ description?: string;
47
+ required?: boolean;
48
+ valueFormat?: "DD/MM/YYYY";
49
+ minDate?: string;
50
+ maxDate?: string;
51
+ initialMonth?: string;
52
+ }
53
+ export interface LocationCandidate {
54
+ id: string;
55
+ label: string;
56
+ formatted_address?: string;
57
+ street?: string;
58
+ country?: string;
59
+ comuna?: string;
60
+ city?: string;
61
+ region?: string;
62
+ lat: number;
63
+ lng: number;
64
+ }
65
+ export interface LocationPickerWidget {
66
+ id: string;
67
+ type: "location_picker";
68
+ fieldId: string;
69
+ label: string;
70
+ description?: string;
71
+ center: {
72
+ lat: number;
73
+ lng: number;
74
+ };
75
+ zoom?: number;
76
+ candidates?: LocationCandidate[];
77
+ }
78
+ export interface QuestionCardField {
79
+ fieldId: string;
80
+ label: string;
81
+ options?: string[];
82
+ }
83
+ export interface QuestionCardWidget {
84
+ id: string;
85
+ type: "question_card";
86
+ label: string;
87
+ description?: string;
88
+ fields: QuestionCardField[];
89
+ partial_answers?: Record<string, string>;
90
+ }
91
+ export interface ChoiceOption {
92
+ label: string;
93
+ freeText?: boolean;
94
+ exclusive?: boolean;
95
+ }
96
+ export interface ChoiceCardField {
97
+ fieldId: string;
98
+ label: string;
99
+ options: ChoiceOption[];
100
+ multiSelect: boolean;
101
+ }
102
+ export interface ChoiceCardWidget {
103
+ id: string;
104
+ type: "choice_card";
105
+ label: string;
106
+ description?: string;
107
+ fields: ChoiceCardField[];
108
+ partial_answers?: Record<string, string>;
109
+ }
110
+ export type FrontendWidget = DatePickerWidget | LocationPickerWidget | QuestionCardWidget | ChoiceCardWidget;
111
+ export interface QuickAction {
112
+ id: string;
113
+ label: string;
114
+ value?: string;
115
+ icon?: ReactNode;
116
+ disabled?: boolean;
117
+ }
118
+ export interface AgentVisualConfig {
119
+ agentName?: string;
120
+ agentAvatarUrl?: string;
121
+ userAvatarUrl?: string;
122
+ logoUrl?: string;
123
+ primaryColor?: string;
124
+ organizationName?: string;
125
+ }
126
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
package/dist/types.js ADDED
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":""}
package/package.json ADDED
@@ -0,0 +1,52 @@
1
+ {
2
+ "name": "@apps-megafy/ui",
3
+ "version": "0.1.22",
4
+ "license": "MIT",
5
+ "description": "Reusable React UI components for admission agents.",
6
+ "type": "module",
7
+ "sideEffects": [
8
+ "./src/styles.css"
9
+ ],
10
+ "main": "./dist/index.js",
11
+ "module": "./dist/index.js",
12
+ "types": "./dist/index.d.ts",
13
+ "files": [
14
+ "dist",
15
+ "src/styles.css",
16
+ "components.json"
17
+ ],
18
+ "publishConfig": {
19
+ "access": "public"
20
+ },
21
+ "exports": {
22
+ ".": {
23
+ "types": "./dist/index.d.ts",
24
+ "import": "./dist/index.js"
25
+ },
26
+ "./styles.css": "./src/styles.css"
27
+ },
28
+ "dependencies": {
29
+ "@radix-ui/react-dialog": "^1.1.4",
30
+ "@radix-ui/react-slot": "^1.1.1",
31
+ "@types/leaflet": "^1.9.21",
32
+ "class-variance-authority": "^0.7.1",
33
+ "clsx": "^2.1.1",
34
+ "leaflet": "^1.9.4",
35
+ "lucide-react": "^0.468.0",
36
+ "tailwind-merge": "^2.5.5"
37
+ },
38
+ "peerDependencies": {
39
+ "react": ">=18.2.0",
40
+ "react-dom": ">=18.2.0"
41
+ },
42
+ "devDependencies": {
43
+ "@types/react": "^19.2.15",
44
+ "@types/react-dom": "^19.2.3",
45
+ "typescript": "^5.7.2"
46
+ },
47
+ "scripts": {
48
+ "build": "tsc -p tsconfig.json",
49
+ "typecheck": "tsc -p tsconfig.json --noEmit",
50
+ "lint": "tsc -p tsconfig.json --noEmit"
51
+ }
52
+ }
package/src/styles.css ADDED
@@ -0,0 +1,107 @@
1
+ @import "leaflet/dist/leaflet.css";
2
+ @layer base {
3
+ :root {
4
+ --background: 0 0% 100%;
5
+ --foreground: 222 47% 11%;
6
+ --card: 0 0% 100%;
7
+ --card-foreground: 222 47% 11%;
8
+ --primary: 221 83% 53%;
9
+ --primary-foreground: 0 0% 100%;
10
+ --muted: 210 40% 96%;
11
+ --muted-foreground: 215 16% 47%;
12
+ --accent: 168 76% 42%;
13
+ --accent-foreground: 0 0% 100%;
14
+ --destructive: 0 84% 60%;
15
+ --destructive-foreground: 0 0% 100%;
16
+ --border: 214 32% 91%;
17
+ --input: 214 32% 91%;
18
+ --ring: 221 83% 53%;
19
+ }
20
+
21
+ .dark {
22
+ --background: 222 47% 7%;
23
+ --foreground: 210 40% 98%;
24
+ --card: 222 47% 10%;
25
+ --card-foreground: 210 40% 98%;
26
+ --primary: 217 91% 60%;
27
+ --primary-foreground: 222 47% 7%;
28
+ --muted: 217 33% 18%;
29
+ --muted-foreground: 215 20% 72%;
30
+ --accent: 173 80% 42%;
31
+ --accent-foreground: 222 47% 7%;
32
+ --destructive: 0 72% 51%;
33
+ --destructive-foreground: 210 40% 98%;
34
+ --border: 217 33% 18%;
35
+ --input: 217 33% 18%;
36
+ --ring: 217 91% 60%;
37
+ }
38
+ }
39
+
40
+ @layer components {
41
+ .admission-scrollbar {
42
+ scrollbar-width: thin;
43
+ scrollbar-color: hsl(var(--primary) / 0.35) transparent;
44
+ }
45
+
46
+ .admission-scrollbar::-webkit-scrollbar {
47
+ width: 10px;
48
+ }
49
+
50
+ .admission-scrollbar::-webkit-scrollbar-thumb {
51
+ background: hsl(var(--primary) / 0.28);
52
+ border-radius: 999px;
53
+ border: 3px solid transparent;
54
+ background-clip: content-box;
55
+ }
56
+
57
+ .admission-mobile-widget-offset {
58
+ bottom: calc(var(--admission-chat-input-height, 6rem) + env(safe-area-inset-bottom));
59
+ }
60
+
61
+ .admission-mobile-widget-content {
62
+ max-height: min(calc(100dvh - var(--admission-chat-input-height, 6rem) - 6.5rem), 34rem);
63
+ }
64
+ }
65
+
66
+ @layer utilities {
67
+ .animate-breathe {
68
+ animation: admission-breathe 2.4s ease-in-out infinite;
69
+ }
70
+
71
+ .animate-typing-dot {
72
+ animation: admission-typing-dot 1.1s ease-in-out infinite;
73
+ }
74
+
75
+ .animate-status-ping {
76
+ animation: admission-status-ping 1.8s cubic-bezier(0, 0, 0.2, 1) infinite;
77
+ }
78
+ }
79
+
80
+ @keyframes admission-breathe {
81
+ 0%, 100% {
82
+ transform: scale(0.86);
83
+ opacity: 0.42;
84
+ }
85
+ 50% {
86
+ transform: scale(1.08);
87
+ opacity: 0.85;
88
+ }
89
+ }
90
+
91
+ @keyframes admission-typing-dot {
92
+ 0%, 80%, 100% {
93
+ transform: translateY(0);
94
+ opacity: 0.35;
95
+ }
96
+ 40% {
97
+ transform: translateY(-4px);
98
+ opacity: 1;
99
+ }
100
+ }
101
+
102
+ @keyframes admission-status-ping {
103
+ 75%, 100% {
104
+ transform: scale(2.4);
105
+ opacity: 0;
106
+ }
107
+ }