@igstack/app-catalog-frontend-core 0.2.0 → 0.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (192) hide show
  1. package/dist/esm/api/infra/trpc.d.ts +0 -1491
  2. package/dist/esm/modules/appCatalog/context/AppCatalogContext.js +1 -0
  3. package/dist/esm/modules/appCatalog/context/AppCatalogContext.js.map +1 -1
  4. package/dist/esm/modules/appCatalog/ui/filters/FilterBar.js +23 -11
  5. package/dist/esm/modules/appCatalog/ui/filters/FilterBar.js.map +1 -1
  6. package/dist/esm/modules/appCatalog/ui/grid/AppCatalogGrid.d.ts +5 -1
  7. package/dist/esm/modules/appCatalog/ui/grid/AppCatalogGrid.js +146 -56
  8. package/dist/esm/modules/appCatalog/ui/grid/AppCatalogGrid.js.map +1 -1
  9. package/dist/esm/modules/appCatalog/ui/pages/AppCatalogPage.js +20 -1
  10. package/dist/esm/modules/appCatalog/ui/pages/AppCatalogPage.js.map +1 -1
  11. package/dist/esm/modules/auth/AuthContext.js +1 -1
  12. package/dist/esm/modules/auth/AuthModalContext.js +1 -1
  13. package/dist/esm/modules/auth/authClient.d.ts +2 -2
  14. package/dist/esm/node_modules/.pnpm/zod@4.3.5/node_modules/zod/v4/classic/schemas.js +4 -37
  15. package/dist/esm/node_modules/.pnpm/zod@4.3.5/node_modules/zod/v4/classic/schemas.js.map +1 -1
  16. package/dist/esm/node_modules/.pnpm/zod@4.3.5/node_modules/zod/v4/core/api.js +2 -10
  17. package/dist/esm/node_modules/.pnpm/zod@4.3.5/node_modules/zod/v4/core/api.js.map +1 -1
  18. package/dist/esm/node_modules/.pnpm/zod@4.3.5/node_modules/zod/v4/core/checks.js +1 -1
  19. package/dist/esm/node_modules/.pnpm/zod@4.3.5/node_modules/zod/v4/core/json-schema-processors.js +0 -44
  20. package/dist/esm/node_modules/.pnpm/zod@4.3.5/node_modules/zod/v4/core/json-schema-processors.js.map +1 -1
  21. package/dist/esm/node_modules/.pnpm/zod@4.3.5/node_modules/zod/v4/core/parse.js +0 -4
  22. package/dist/esm/node_modules/.pnpm/zod@4.3.5/node_modules/zod/v4/core/parse.js.map +1 -1
  23. package/dist/esm/node_modules/.pnpm/zod@4.3.5/node_modules/zod/v4/core/regexes.js +0 -2
  24. package/dist/esm/node_modules/.pnpm/zod@4.3.5/node_modules/zod/v4/core/regexes.js.map +1 -1
  25. package/dist/esm/node_modules/.pnpm/zod@4.3.5/node_modules/zod/v4/core/schemas.js +4 -49
  26. package/dist/esm/node_modules/.pnpm/zod@4.3.5/node_modules/zod/v4/core/schemas.js.map +1 -1
  27. package/dist/esm/routeTree.gen.d.ts +3 -164
  28. package/dist/esm/routeTree.gen.js +8 -80
  29. package/dist/esm/routeTree.gen.js.map +1 -1
  30. package/dist/esm/ui/button.d.ts +1 -1
  31. package/dist/esm/ui/card.js +1 -48
  32. package/dist/esm/ui/card.js.map +1 -1
  33. package/dist/esm/ui/command.js +1 -15
  34. package/dist/esm/ui/command.js.map +1 -1
  35. package/dist/esm/ui/components/header/Header.js +2 -11
  36. package/dist/esm/ui/components/header/Header.js.map +1 -1
  37. package/dist/esm/ui/input-group.js +125 -0
  38. package/dist/esm/ui/input-group.js.map +1 -0
  39. package/package.json +3 -3
  40. package/src/modules/appCatalog/ui/components/AppDetailModal.tsx +2 -21
  41. package/src/routeTree.gen.ts +2 -220
  42. package/src/ui/components/header/Header.tsx +2 -12
  43. package/dist/esm/components/IconPickerDialog.d.ts +0 -8
  44. package/dist/esm/components/IconPickerDialog.js +0 -98
  45. package/dist/esm/components/IconPickerDialog.js.map +0 -1
  46. package/dist/esm/components/IconPickerField.d.ts +0 -9
  47. package/dist/esm/components/IconPickerField.js +0 -76
  48. package/dist/esm/components/IconPickerField.js.map +0 -1
  49. package/dist/esm/modules/admin-base/components/AdminChat.d.ts +0 -1
  50. package/dist/esm/modules/admin-base/components/AdminChat.js +0 -82
  51. package/dist/esm/modules/admin-base/components/AdminChat.js.map +0 -1
  52. package/dist/esm/modules/admin-base/components/AdminLayout.d.ts +0 -5
  53. package/dist/esm/modules/admin-base/components/AdminLayout.js +0 -83
  54. package/dist/esm/modules/admin-base/components/AdminLayout.js.map +0 -1
  55. package/dist/esm/modules/admin-base/components/AdminWelcome.d.ts +0 -1
  56. package/dist/esm/modules/admin-base/components/AdminWelcome.js +0 -37
  57. package/dist/esm/modules/admin-base/components/AdminWelcome.js.map +0 -1
  58. package/dist/esm/modules/admin-base/context/AdminConfigContext.d.ts +0 -8
  59. package/dist/esm/modules/admin-base/context/AdminConfigContext.js +0 -27
  60. package/dist/esm/modules/admin-base/context/AdminConfigContext.js.map +0 -1
  61. package/dist/esm/modules/admin-base/index.d.ts +0 -5
  62. package/dist/esm/modules/admin-base/types/adminTypes.d.ts +0 -10
  63. package/dist/esm/modules/appCatalog/AppCatalogAdminPage.d.ts +0 -1
  64. package/dist/esm/modules/appCatalog/AppCatalogAdminPage.js +0 -196
  65. package/dist/esm/modules/appCatalog/AppCatalogAdminPage.js.map +0 -1
  66. package/dist/esm/modules/appCatalog/ScreenshotItem.js +0 -57
  67. package/dist/esm/modules/appCatalog/ScreenshotItem.js.map +0 -1
  68. package/dist/esm/modules/appCatalog/ScreenshotManager.js +0 -155
  69. package/dist/esm/modules/appCatalog/ScreenshotManager.js.map +0 -1
  70. package/dist/esm/modules/approvalMethod/AccessRequestFormFields.d.ts +0 -7
  71. package/dist/esm/modules/approvalMethod/AccessRequestFormFields.js +0 -323
  72. package/dist/esm/modules/approvalMethod/AccessRequestFormFields.js.map +0 -1
  73. package/dist/esm/modules/approvalMethod/ApprovalMethodForm.d.ts +0 -14
  74. package/dist/esm/modules/approvalMethod/ApprovalMethodForm.js +0 -227
  75. package/dist/esm/modules/approvalMethod/ApprovalMethodForm.js.map +0 -1
  76. package/dist/esm/modules/approvalMethod/ApprovalMethodSelector.d.ts +0 -7
  77. package/dist/esm/modules/approvalMethod/ApprovalMethodSelector.js +0 -124
  78. package/dist/esm/modules/approvalMethod/ApprovalMethodSelector.js.map +0 -1
  79. package/dist/esm/modules/approvalMethod/api/ApiQueryMagazineApprovalMethod.d.ts +0 -381
  80. package/dist/esm/modules/approvalMethod/api/ApiQueryMagazineApprovalMethod.js +0 -26
  81. package/dist/esm/modules/approvalMethod/api/ApiQueryMagazineApprovalMethod.js.map +0 -1
  82. package/dist/esm/modules/auth/authUtils.js +0 -25
  83. package/dist/esm/modules/auth/authUtils.js.map +0 -1
  84. package/dist/esm/modules/icons/IconManagementPage.d.ts +0 -1
  85. package/dist/esm/modules/icons/IconManagementPage.js +0 -177
  86. package/dist/esm/modules/icons/IconManagementPage.js.map +0 -1
  87. package/dist/esm/node_modules/.pnpm/@dnd-kit_accessibility@3.1.1_react@19.1.2/node_modules/@dnd-kit/accessibility/dist/accessibility.esm.js +0 -60
  88. package/dist/esm/node_modules/.pnpm/@dnd-kit_accessibility@3.1.1_react@19.1.2/node_modules/@dnd-kit/accessibility/dist/accessibility.esm.js.map +0 -1
  89. package/dist/esm/node_modules/.pnpm/@dnd-kit_core@6.3.1_react-dom@19.1.2_react@19.1.2__react@19.1.2/node_modules/@dnd-kit/core/dist/core.esm.js +0 -3055
  90. package/dist/esm/node_modules/.pnpm/@dnd-kit_core@6.3.1_react-dom@19.1.2_react@19.1.2__react@19.1.2/node_modules/@dnd-kit/core/dist/core.esm.js.map +0 -1
  91. package/dist/esm/node_modules/.pnpm/@dnd-kit_sortable@10.0.0_@dnd-kit_core@6.3.1_react-dom@19.1.2_react@19.1.2__react@19.1.2__react@19.1.2/node_modules/@dnd-kit/sortable/dist/sortable.esm.js +0 -593
  92. package/dist/esm/node_modules/.pnpm/@dnd-kit_sortable@10.0.0_@dnd-kit_core@6.3.1_react-dom@19.1.2_react@19.1.2__react@19.1.2__react@19.1.2/node_modules/@dnd-kit/sortable/dist/sortable.esm.js.map +0 -1
  93. package/dist/esm/node_modules/.pnpm/@dnd-kit_utilities@3.2.2_react@19.1.2/node_modules/@dnd-kit/utilities/dist/utilities.esm.js +0 -302
  94. package/dist/esm/node_modules/.pnpm/@dnd-kit_utilities@3.2.2_react@19.1.2/node_modules/@dnd-kit/utilities/dist/utilities.esm.js.map +0 -1
  95. package/dist/esm/node_modules/.pnpm/@hookform_resolvers@5.2.2_react-hook-form@7.71.1_react@19.1.2_/node_modules/@hookform/resolvers/dist/resolvers.js +0 -34
  96. package/dist/esm/node_modules/.pnpm/@hookform_resolvers@5.2.2_react-hook-form@7.71.1_react@19.1.2_/node_modules/@hookform/resolvers/dist/resolvers.js.map +0 -1
  97. package/dist/esm/node_modules/.pnpm/@hookform_resolvers@5.2.2_react-hook-form@7.71.1_react@19.1.2_/node_modules/@hookform/resolvers/zod/dist/zod.js +0 -94
  98. package/dist/esm/node_modules/.pnpm/@hookform_resolvers@5.2.2_react-hook-form@7.71.1_react@19.1.2_/node_modules/@hookform/resolvers/zod/dist/zod.js.map +0 -1
  99. package/dist/esm/node_modules/.pnpm/react-hook-form@7.71.1_react@19.1.2/node_modules/react-hook-form/dist/index.esm.js +0 -1894
  100. package/dist/esm/node_modules/.pnpm/react-hook-form@7.71.1_react@19.1.2/node_modules/react-hook-form/dist/index.esm.js.map +0 -1
  101. package/dist/esm/routes/admin/app-for-catalog/$id.d.ts +0 -5
  102. package/dist/esm/routes/admin/app-for-catalog/_id.js +0 -67
  103. package/dist/esm/routes/admin/app-for-catalog/_id.js.map +0 -1
  104. package/dist/esm/routes/admin/app-for-catalog/_id2.js +0 -321
  105. package/dist/esm/routes/admin/app-for-catalog/_id2.js.map +0 -1
  106. package/dist/esm/routes/admin/app-for-catalog/index.d.ts +0 -1
  107. package/dist/esm/routes/admin/app-for-catalog/index.js +0 -9
  108. package/dist/esm/routes/admin/app-for-catalog/index.js.map +0 -1
  109. package/dist/esm/routes/admin/app-for-catalog/index2.js +0 -12
  110. package/dist/esm/routes/admin/app-for-catalog/index2.js.map +0 -1
  111. package/dist/esm/routes/admin/app-for-catalog.d.ts +0 -1
  112. package/dist/esm/routes/admin/app-for-catalog.js +0 -14
  113. package/dist/esm/routes/admin/app-for-catalog.js.map +0 -1
  114. package/dist/esm/routes/admin/app-for-catalog2.js +0 -9
  115. package/dist/esm/routes/admin/app-for-catalog2.js.map +0 -1
  116. package/dist/esm/routes/admin/approval-methods/index.d.ts +0 -32
  117. package/dist/esm/routes/admin/approval-methods/index.js +0 -24
  118. package/dist/esm/routes/admin/approval-methods/index.js.map +0 -1
  119. package/dist/esm/routes/admin/approval-methods/index2.js +0 -100
  120. package/dist/esm/routes/admin/approval-methods/index2.js.map +0 -1
  121. package/dist/esm/routes/admin/approval-methods.d.ts +0 -1
  122. package/dist/esm/routes/admin/approval-methods.js +0 -14
  123. package/dist/esm/routes/admin/approval-methods.js.map +0 -1
  124. package/dist/esm/routes/admin/approval-methods2.js +0 -7
  125. package/dist/esm/routes/admin/approval-methods2.js.map +0 -1
  126. package/dist/esm/routes/admin/chat.d.ts +0 -1
  127. package/dist/esm/routes/admin/chat.js +0 -14
  128. package/dist/esm/routes/admin/chat.js.map +0 -1
  129. package/dist/esm/routes/admin/chat2.js +0 -9
  130. package/dist/esm/routes/admin/chat2.js.map +0 -1
  131. package/dist/esm/routes/admin/icons.d.ts +0 -1
  132. package/dist/esm/routes/admin/icons.js +0 -14
  133. package/dist/esm/routes/admin/icons.js.map +0 -1
  134. package/dist/esm/routes/admin/icons2.js +0 -12
  135. package/dist/esm/routes/admin/icons2.js.map +0 -1
  136. package/dist/esm/routes/admin/index.d.ts +0 -1
  137. package/dist/esm/routes/admin/index.js +0 -9
  138. package/dist/esm/routes/admin/index.js.map +0 -1
  139. package/dist/esm/routes/admin/index2.js +0 -9
  140. package/dist/esm/routes/admin/index2.js.map +0 -1
  141. package/dist/esm/routes/admin.d.ts +0 -1
  142. package/dist/esm/routes/admin.js +0 -37
  143. package/dist/esm/routes/admin.js.map +0 -1
  144. package/dist/esm/routes/admin2.js +0 -18
  145. package/dist/esm/routes/admin2.js.map +0 -1
  146. package/dist/esm/ui/alert-dialog.js +0 -141
  147. package/dist/esm/ui/alert-dialog.js.map +0 -1
  148. package/dist/esm/ui/breadcrumb.js +0 -84
  149. package/dist/esm/ui/breadcrumb.js.map +0 -1
  150. package/dist/esm/ui/components/Breadcrumbs.js +0 -36
  151. package/dist/esm/ui/components/Breadcrumbs.js.map +0 -1
  152. package/dist/esm/ui/crud-list/CrudList.js +0 -189
  153. package/dist/esm/ui/crud-list/CrudList.js.map +0 -1
  154. package/dist/esm/ui/editable-list/EditableListField.js +0 -130
  155. package/dist/esm/ui/editable-list/EditableListField.js.map +0 -1
  156. package/dist/esm/ui/form.js +0 -134
  157. package/dist/esm/ui/form.js.map +0 -1
  158. package/dist/esm/ui/linkExternal.js +0 -26
  159. package/dist/esm/ui/linkExternal.js.map +0 -1
  160. package/dist/esm/ui/markdown-editor/MarkdownEditor.js +0 -116
  161. package/dist/esm/ui/markdown-editor/MarkdownEditor.js.map +0 -1
  162. package/dist/esm/ui/markdown-editor/MarkdownToolbar.js +0 -99
  163. package/dist/esm/ui/markdown-editor/MarkdownToolbar.js.map +0 -1
  164. package/dist/esm/ui/scroll-area.js +0 -62
  165. package/dist/esm/ui/scroll-area.js.map +0 -1
  166. package/dist/esm/ui/select.js +0 -138
  167. package/dist/esm/ui/select.js.map +0 -1
  168. package/dist/esm/ui/textarea.js +0 -19
  169. package/dist/esm/ui/textarea.js.map +0 -1
  170. package/src/components/IconPickerDialog.tsx +0 -136
  171. package/src/components/IconPickerField.tsx +0 -88
  172. package/src/modules/admin-base/components/AdminChat.tsx +0 -122
  173. package/src/modules/admin-base/components/AdminLayout.tsx +0 -111
  174. package/src/modules/admin-base/components/AdminWelcome.tsx +0 -52
  175. package/src/modules/admin-base/context/AdminConfigContext.tsx +0 -36
  176. package/src/modules/admin-base/index.ts +0 -16
  177. package/src/modules/admin-base/types/adminTypes.ts +0 -11
  178. package/src/modules/appCatalog/AppCatalogAdminPage.tsx +0 -274
  179. package/src/modules/approvalMethod/AccessRequestFormFields.tsx +0 -393
  180. package/src/modules/approvalMethod/ApprovalMethodForm.tsx +0 -323
  181. package/src/modules/approvalMethod/ApprovalMethodSelector.tsx +0 -150
  182. package/src/modules/approvalMethod/api/ApiQueryMagazineApprovalMethod.ts +0 -34
  183. package/src/modules/icons/IconManagementPage.tsx +0 -245
  184. package/src/routes/admin/app-for-catalog/$id.tsx +0 -571
  185. package/src/routes/admin/app-for-catalog/index.tsx +0 -19
  186. package/src/routes/admin/app-for-catalog.tsx +0 -12
  187. package/src/routes/admin/approval-methods/index.tsx +0 -161
  188. package/src/routes/admin/approval-methods.tsx +0 -10
  189. package/src/routes/admin/chat.tsx +0 -13
  190. package/src/routes/admin/icons.tsx +0 -22
  191. package/src/routes/admin/index.tsx +0 -9
  192. package/src/routes/admin.tsx +0 -60
@@ -1,88 +0,0 @@
1
- import { Image, X } from 'lucide-react'
2
- import { useState } from 'react'
3
- import { Button } from '~/ui/button'
4
- import { Label } from '~/ui/label'
5
- import { IconPickerDialog } from './IconPickerDialog'
6
-
7
- interface IconPickerFieldProps {
8
- label?: string
9
- value?: string
10
- onChange: (iconName: string | undefined) => void
11
- placeholder?: string
12
- required?: boolean
13
- }
14
-
15
- export function IconPickerField({
16
- label = 'Icon',
17
- value,
18
- onChange,
19
- placeholder = 'No icon selected',
20
- required = false,
21
- }: IconPickerFieldProps) {
22
- const [dialogOpen, setDialogOpen] = useState(false)
23
-
24
- const handleClear = () => {
25
- onChange(undefined)
26
- }
27
-
28
- return (
29
- <div className="space-y-2">
30
- {label && (
31
- <Label>
32
- {label}
33
- {required && <span className="text-destructive ml-1">*</span>}
34
- </Label>
35
- )}
36
-
37
- <div className="flex items-center gap-2">
38
- <Button
39
- type="button"
40
- variant="outline"
41
- onClick={() => setDialogOpen(true)}
42
- className="flex-1 justify-start"
43
- >
44
- {value ? (
45
- <div className="flex items-center gap-2">
46
- <div className="w-6 h-6 flex items-center justify-center">
47
- <img
48
- src={`/api/icons/${value}`}
49
- alt={value}
50
- className="max-w-full max-h-full object-contain"
51
- onError={(e) => {
52
- // Fallback if icon not found
53
- e.currentTarget.style.display = 'none'
54
- }}
55
- />
56
- </div>
57
- <span className="truncate">{value}</span>
58
- </div>
59
- ) : (
60
- <div className="flex items-center gap-2 text-muted-foreground">
61
- <Image className="h-4 w-4" />
62
- <span>{placeholder}</span>
63
- </div>
64
- )}
65
- </Button>
66
-
67
- {value && (
68
- <Button
69
- type="button"
70
- variant="ghost"
71
- size="icon"
72
- onClick={handleClear}
73
- title="Clear icon"
74
- >
75
- <X className="h-4 w-4" />
76
- </Button>
77
- )}
78
- </div>
79
-
80
- <IconPickerDialog
81
- open={dialogOpen}
82
- onOpenChange={setDialogOpen}
83
- onSelect={onChange}
84
- selectedIconName={value}
85
- />
86
- </div>
87
- )
88
- }
@@ -1,122 +0,0 @@
1
- import { useChat } from '@ai-sdk/react'
2
- import { DefaultChatTransport } from 'ai'
3
- import { Send } from 'lucide-react'
4
- import type { FormEvent } from 'react'
5
- import { useEffect, useMemo, useRef, useState } from 'react'
6
-
7
- import { Button } from '~/ui/button'
8
- import { Input } from '~/ui/input'
9
-
10
- import { useAdminConfig } from '../context/AdminConfigContext'
11
- import { AdminWelcome } from './AdminWelcome'
12
-
13
- export function AdminChat() {
14
- const config = useAdminConfig()
15
- const messagesEndRef = useRef<HTMLDivElement>(null)
16
- const [input, setInput] = useState('')
17
-
18
- // Use DefaultChatTransport which handles UI message stream format (tool calls, etc.)
19
- const transport = useMemo(
20
- () => new DefaultChatTransport({ api: config.chatApiUrl }),
21
- [config.chatApiUrl],
22
- )
23
-
24
- const { messages, sendMessage, status, error } = useChat({
25
- transport,
26
- })
27
-
28
- const isLoading = status === 'streaming' || status === 'submitted'
29
-
30
- // Auto-scroll to bottom when new messages arrive
31
- useEffect(() => {
32
- messagesEndRef.current?.scrollIntoView({ behavior: 'smooth' })
33
- }, [messages])
34
-
35
- const handleSubmit = (e: FormEvent) => {
36
- e.preventDefault()
37
- if (!input.trim() || isLoading) {
38
- return
39
- }
40
- sendMessage({ text: input })
41
- setInput('')
42
- }
43
-
44
- // Extract text content from message parts
45
- const getMessageContent = (message: (typeof messages)[0]): string => {
46
- return message.parts
47
- .filter((part) => part.type === 'text')
48
- .map((part) => part.text)
49
- .join('')
50
- }
51
-
52
- return (
53
- <div className="flex flex-col flex-1">
54
- {/* Messages area */}
55
- <div className="flex-1 overflow-y-auto">
56
- {messages.length === 0 ? (
57
- <AdminWelcome />
58
- ) : (
59
- <div className="max-w-3xl mx-auto space-y-4 py-4">
60
- {messages.map((message) => (
61
- <div
62
- key={message.id}
63
- className={`flex ${
64
- message.role === 'user' ? 'justify-end' : 'justify-start'
65
- }`}
66
- >
67
- <div
68
- className={`max-w-[80%] rounded-lg px-4 py-2 ${
69
- message.role === 'user'
70
- ? 'bg-primary text-primary-foreground'
71
- : 'bg-muted text-foreground'
72
- }`}
73
- >
74
- <pre className="whitespace-pre-wrap font-sans text-sm">
75
- {getMessageContent(message)}
76
- </pre>
77
- </div>
78
- </div>
79
- ))}
80
- {isLoading && (
81
- <div className="flex justify-start">
82
- <div className="bg-muted rounded-lg px-4 py-2">
83
- <span className="text-muted-foreground text-sm">
84
- Thinking...
85
- </span>
86
- </div>
87
- </div>
88
- )}
89
- <div ref={messagesEndRef} />
90
- </div>
91
- )}
92
- </div>
93
-
94
- {/* Error display */}
95
- {error && (
96
- <div className="px-4 py-2 bg-destructive/10 border-t border-destructive/20">
97
- <p className="text-destructive text-sm">Error: {error.message}</p>
98
- </div>
99
- )}
100
-
101
- {/* Input area */}
102
- <div className="border-t border-border p-4">
103
- <form onSubmit={handleSubmit} className="max-w-3xl mx-auto">
104
- <div className="flex gap-2">
105
- <Input
106
- type="text"
107
- value={input}
108
- onChange={(e) => setInput(e.target.value)}
109
- placeholder="Type your message..."
110
- disabled={isLoading}
111
- className="flex-1"
112
- />
113
- <Button type="submit" disabled={isLoading || !input.trim()}>
114
- <Send className="h-4 w-4" />
115
- <span className="sr-only">Send</span>
116
- </Button>
117
- </div>
118
- </form>
119
- </div>
120
- </div>
121
- )
122
- }
@@ -1,111 +0,0 @@
1
- import { Link } from '@tanstack/react-router'
2
- import {
3
- CheckSquare,
4
- ChevronLeft,
5
- ChevronRight,
6
- ImageIcon,
7
- LayoutDashboard,
8
- MessageSquare,
9
- } from 'lucide-react'
10
- import type { ReactNode } from 'react'
11
- import { useState } from 'react'
12
- import { cn } from '~/lib/utils'
13
- import { Button } from '~/ui/button'
14
- import { Breadcrumbs } from '~/ui/components/Breadcrumbs'
15
- import { MainLayout } from '~/ui/layout/MainLayout'
16
-
17
- export interface AdminLayoutProps {
18
- children: ReactNode
19
- }
20
-
21
- interface NavItem {
22
- name: string
23
- path: string
24
- icon: typeof MessageSquare
25
- }
26
-
27
- const navItems: Array<NavItem> = [
28
- {
29
- name: 'Chat',
30
- path: '/admin/chat',
31
- icon: MessageSquare,
32
- },
33
- {
34
- name: 'Icons',
35
- path: '/admin/icons',
36
- icon: ImageIcon,
37
- },
38
- {
39
- name: 'App For Catalog',
40
- path: '/admin/app-for-catalog',
41
- icon: LayoutDashboard,
42
- },
43
- {
44
- name: 'Approval Methods',
45
- path: '/admin/approval-methods',
46
- icon: CheckSquare,
47
- },
48
- ]
49
-
50
- export function AdminLayout({ children }: AdminLayoutProps) {
51
- const [isCollapsed, setIsCollapsed] = useState(false)
52
-
53
- return (
54
- <MainLayout breadcrumbs={<Breadcrumbs />}>
55
- <div className="flex gap-6 -mx-6 -my-6 flex-1">
56
- {/* Left sidebar */}
57
- <aside
58
- className={cn(
59
- 'flex flex-col transition-all duration-300',
60
- isCollapsed ? 'w-16' : 'w-64',
61
- )}
62
- >
63
- <div className="p-4 flex items-center justify-between">
64
- {!isCollapsed && <h1 className="text-2xl font-bold">Admin</h1>}
65
- <Button
66
- variant="ghost"
67
- size="icon"
68
- onClick={() => setIsCollapsed(!isCollapsed)}
69
- className={cn('h-8 w-8', isCollapsed && 'mx-auto')}
70
- >
71
- {isCollapsed ? (
72
- <ChevronRight className="h-4 w-4" />
73
- ) : (
74
- <ChevronLeft className="h-4 w-4" />
75
- )}
76
- </Button>
77
- </div>
78
- <nav className="flex-1 p-4 space-y-2">
79
- {navItems.map((item) => {
80
- const Icon = item.icon
81
- return (
82
- <Link key={item.path} to={item.path} className="block">
83
- {({ isActive }: { isActive: boolean }) => (
84
- <Button
85
- variant="ghost"
86
- className={cn(
87
- 'w-full',
88
- isCollapsed ? 'justify-center px-2' : 'justify-start',
89
- isActive &&
90
- 'bg-primary text-primary-foreground hover:bg-primary/90',
91
- )}
92
- title={isCollapsed ? item.name : undefined}
93
- >
94
- <Icon className={cn('w-4 h-4', !isCollapsed && 'mr-2')} />
95
- {!isCollapsed && <span>{item.name}</span>}
96
- </Button>
97
- )}
98
- </Link>
99
- )
100
- })}
101
- </nav>
102
- </aside>
103
-
104
- {/* Main content */}
105
- <main className="flex-1 flex flex-col overflow-hidden min-w-0">
106
- {children}
107
- </main>
108
- </div>
109
- </MainLayout>
110
- )
111
- }
@@ -1,52 +0,0 @@
1
- import {
2
- Card,
3
- CardContent,
4
- CardDescription,
5
- CardHeader,
6
- CardTitle,
7
- } from '~/ui/card'
8
-
9
- export function AdminWelcome() {
10
- return (
11
- <div className="p-6 max-w-2xl mx-auto">
12
- <h1 className="text-2xl font-bold mb-4">Admin Assistant</h1>
13
- <p className="text-muted-foreground mb-6">
14
- Welcome to the AI-powered admin interface. You can use natural language
15
- to manage your application.
16
- </p>
17
-
18
- <Card className="mb-6">
19
- <CardHeader>
20
- <CardTitle>What you can do</CardTitle>
21
- <CardDescription>
22
- Try these example commands to get started
23
- </CardDescription>
24
- </CardHeader>
25
- <CardContent>
26
- <ul className="space-y-2 text-sm">
27
- <li className="flex items-start gap-2">
28
- <span className="text-primary">•</span>
29
- <span>Show me contents of the Apps table in DB</span>
30
- </li>
31
- <li className="flex items-start gap-2">
32
- <span className="text-primary">•</span>
33
- <span>Add a new app called "Portal" with icon "portal"</span>
34
- </li>
35
- <li className="flex items-start gap-2">
36
- <span className="text-primary">•</span>
37
- <span>List all configured data sources</span>
38
- </li>
39
- <li className="flex items-start gap-2">
40
- <span className="text-primary">•</span>
41
- <span>Configure a new MCP server</span>
42
- </li>
43
- </ul>
44
- </CardContent>
45
- </Card>
46
-
47
- <p className="text-sm text-muted-foreground">
48
- Type your request in the chat below to get started.
49
- </p>
50
- </div>
51
- )
52
- }
@@ -1,36 +0,0 @@
1
- import type { ReactNode } from 'react'
2
- import { createContext, use, useMemo } from 'react'
3
-
4
- import type { AdminConfig } from '../types/adminTypes'
5
-
6
- const defaultConfig: AdminConfig = {
7
- chatApiUrl: '/api/admin/chat',
8
- }
9
-
10
- const AdminConfigContext = createContext<AdminConfig>(defaultConfig)
11
-
12
- export interface AdminConfigProviderProps {
13
- config?: Partial<AdminConfig>
14
- children: ReactNode
15
- }
16
-
17
- export function AdminConfigProvider({
18
- config,
19
- children,
20
- }: AdminConfigProviderProps) {
21
- const mergedConfig: AdminConfig = useMemo(
22
- () => ({
23
- ...defaultConfig,
24
- ...config,
25
- }),
26
- [config],
27
- )
28
-
29
- return (
30
- <AdminConfigContext value={mergedConfig}>{children}</AdminConfigContext>
31
- )
32
- }
33
-
34
- export function useAdminConfig(): AdminConfig {
35
- return use(AdminConfigContext)
36
- }
@@ -1,16 +0,0 @@
1
- // Components
2
- export { AdminChat } from './components/AdminChat'
3
- export { AdminLayout } from './components/AdminLayout'
4
- export { AdminWelcome } from './components/AdminWelcome'
5
-
6
- // Context
7
- export {
8
- AdminConfigProvider,
9
- useAdminConfig,
10
- type AdminConfigProviderProps
11
- } from './context/AdminConfigContext'
12
-
13
- // Types
14
- export type { AdminChatMessage, AdminConfig } from './types/adminTypes'
15
-
16
-
@@ -1,11 +0,0 @@
1
- export interface AdminConfig {
2
- /** API endpoint for chat - defaults to /api/admin/chat */
3
- chatApiUrl?: string
4
- }
5
-
6
- export interface AdminChatMessage {
7
- id: string
8
- role: 'user' | 'assistant'
9
- content: string
10
- createdAt?: Date
11
- }