@drax/ai-vue 3.16.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.
package/package.json ADDED
@@ -0,0 +1,54 @@
1
+ {
2
+ "name": "@drax/ai-vue",
3
+ "publishConfig": {
4
+ "access": "public"
5
+ },
6
+ "version": "3.16.0",
7
+ "type": "module",
8
+ "main": "./src/index.ts",
9
+ "module": "./src/index.ts",
10
+ "types": "./src/index.ts",
11
+ "files": [
12
+ "src"
13
+ ],
14
+ "scripts": {
15
+ "dev": "vite",
16
+ "build": "run-p type-check \"build-only {@}\" --",
17
+ "preview": "vite preview",
18
+ "test:unit": "vitest",
19
+ "test:e2e": "start-server-and-test preview http://localhost:4173 'cypress run --e2e'",
20
+ "test:e2e:dev": "start-server-and-test 'vite dev --port 4173' http://localhost:4173 'cypress open --e2e'",
21
+ "build-only": "vite build",
22
+ "type-check": "vue-tsc --build --force",
23
+ "lint": "eslint . --ext .vue,.js,.jsx,.cjs,.mjs,.ts,.tsx,.cts,.mts --fix --ignore-path .gitignore",
24
+ "format": "prettier --write src/"
25
+ },
26
+ "dependencies": {
27
+ "@drax/ai-front": "^3.16.0",
28
+ "@drax/crud-vue": "^3.15.0"
29
+ },
30
+ "peerDependencies": {
31
+ "pinia": "^3.0.4",
32
+ "vue": "^3.5.28",
33
+ "vue-i18n": "^11.2.8",
34
+ "vuetify": "^3.11.8"
35
+ },
36
+ "devDependencies": {
37
+ "@tsconfig/node20": "^20.1.4",
38
+ "@types/node": "^25.2.3",
39
+ "@vitejs/plugin-vue": "^6.0.4",
40
+ "@vue/test-utils": "^2.4.6",
41
+ "@vue/tsconfig": "^0.8.1",
42
+ "pinia": "^3.0.4",
43
+ "pinia-plugin-persistedstate": "^4.7.1",
44
+ "typescript": "5.9.3",
45
+ "vite": "^7.3.1",
46
+ "vite-plugin-css-injected-by-js": "^3.5.1",
47
+ "vite-plugin-dts": "^3.9.1",
48
+ "vitest": "^3.2.4",
49
+ "vue": "^3.5.28",
50
+ "vue-tsc": "^3.2.4",
51
+ "vuetify": "^3.11.8"
52
+ },
53
+ "gitHead": "5254c8b1b2b59de46654f135122f38bd29ae5452"
54
+ }
@@ -0,0 +1,79 @@
1
+
2
+ <script setup lang="ts">
3
+ import AILogCrud from '../cruds/AILogCrud'
4
+ import {CrudAutocomplete} from "@drax/crud-vue";
5
+ import {IEntityCrudField} from "@drax/crud-share";
6
+ import {defineProps} from "vue";
7
+ import type {PropType} from "vue";
8
+
9
+
10
+ const valueModel = defineModel<any>({type: String})
11
+
12
+ const entityName = AILogCrud.instance.name
13
+
14
+ const {name, label} = defineProps({
15
+ name: {type: String as PropType<string>, required: false},
16
+ label: {type: String as PropType<string>, required: false},
17
+ itemTitle: {type: [String], default: 'name'},
18
+ itemValue: {type: [String], default: '_id'},
19
+ prependIcon: {type: String},
20
+ prependInnerIcon: {type: String},
21
+ appendIcon: {type: String},
22
+ appendInnerIcon: {type: String},
23
+ multiple: {type: Boolean, default: false},
24
+ chips: {type: Boolean, default: false},
25
+ closableChips: {type: Boolean, default: true},
26
+ readonly: {type: Boolean, default: false},
27
+ clearable: {type: Boolean, default: true},
28
+ hint: {type: String},
29
+ persistentHint: {type: Boolean, default: false},
30
+ rules: {type: Array as PropType<any>, default: () => []},
31
+ errorMessages: {type: Array as PropType<string[]>, default: () => []},
32
+ hideDetails: {type: Boolean, default: false},
33
+ singleLine: {type: Boolean, default: false},
34
+ addOnTheFly: {type: Boolean, default: false},
35
+ density: {type: String as PropType<'comfortable' | 'compact' | 'default'>, default: 'default'},
36
+ variant: {type: String as PropType<'underlined' | 'outlined' | 'filled' | 'solo' | 'solo-inverted' | 'solo-filled' | 'plain'>, default: 'filled'},
37
+ })
38
+
39
+
40
+ const field: IEntityCrudField = {
41
+ default: undefined,
42
+ label: label || entityName,
43
+ name: name || entityName,
44
+ type: 'ref'
45
+ }
46
+
47
+
48
+ </script>
49
+
50
+ <template>
51
+
52
+ <crud-autocomplete
53
+ v-model="valueModel"
54
+ :field="field"
55
+ :entity="AILogCrud.instance"
56
+ :hint="hint"
57
+ :persistent-hint="persistentHint"
58
+ :error-messages="errorMessages"
59
+ :rules="rules"
60
+ :density="density"
61
+ :variant="variant"
62
+ :readonly="readonly"
63
+ :clearable="clearable"
64
+ :hide-details="hideDetails"
65
+ :single-line="singleLine"
66
+ :prepend-icon="prependIcon"
67
+ :append-icon="appendIcon"
68
+ :prepend-inner-icon="prependInnerIcon"
69
+ :append-inner-icon="appendInnerIcon"
70
+ :add-on-the-fly="addOnTheFly"
71
+ ></crud-autocomplete>
72
+
73
+ </template>
74
+
75
+ <style scoped>
76
+
77
+ </style>
78
+
79
+
@@ -0,0 +1,21 @@
1
+
2
+ <script setup lang="ts">
3
+ import AILogCrud from '../../cruds/AILogCrud'
4
+ import {Crud} from "@drax/crud-vue";
5
+ import {formatDate} from "@drax/common-front"
6
+
7
+ </script>
8
+
9
+ <template>
10
+ <crud :entity="AILogCrud.instance">
11
+ <template v-slot:item.startedAt="{value}">{{formatDate(value)}}</template>
12
+ <template v-slot:item.endedAt="{value}">{{formatDate(value)}}</template>
13
+ <template v-slot:item.tenant="{value}">{{value?.name}}</template>
14
+ <template v-slot:item.user="{value}">{{value?.username}}</template>
15
+ </crud>
16
+ </template>
17
+
18
+ <style scoped>
19
+
20
+ </style>
21
+
@@ -0,0 +1,215 @@
1
+
2
+ import {EntityCrud} from "@drax/crud-vue";
3
+ import type{
4
+ IDraxCrudProvider,
5
+ IEntityCrud,
6
+ IEntityCrudField,
7
+ IEntityCrudFilter,
8
+ IEntityCrudHeader,
9
+ IEntityCrudPermissions,
10
+ IEntityCrudRefs,
11
+ IEntityCrudRules
12
+ } from "@drax/crud-share";
13
+ import {AILogProvider} from "@drax/ai-front";
14
+
15
+ //Import EntityCrud Refs
16
+ import {TenantCrud} from "@drax/identity-vue"
17
+ import {UserCrud} from "@drax/identity-vue"
18
+
19
+ class AILogCrud extends EntityCrud implements IEntityCrud {
20
+
21
+ static singleton: AILogCrud
22
+
23
+ constructor() {
24
+ super();
25
+ this.name = 'AILog'
26
+ }
27
+
28
+ static get instance(): AILogCrud {
29
+ if(!AILogCrud.singleton){
30
+ AILogCrud.singleton = new AILogCrud()
31
+ }
32
+ return AILogCrud.singleton
33
+ }
34
+
35
+ get permissions(): IEntityCrudPermissions{
36
+ return {
37
+ manage: 'ailog:manage',
38
+ view: 'ailog:view',
39
+ create: 'ailog:create',
40
+ update: 'ailog:update',
41
+ delete: 'ailog:delete'
42
+ }
43
+ }
44
+
45
+ get headers(): IEntityCrudHeader[] {
46
+ return [
47
+ {title: 'provider',key:'provider', align: 'start'},
48
+ {title: 'model',key:'model', align: 'start'},
49
+ {title: 'operationTitle',key:'operationTitle', align: 'start'},
50
+ {title: 'operationGroup',key:'operationGroup', align: 'start'},
51
+ {title: 'inputTokens',key:'inputTokens', align: 'start'},
52
+ {title: 'outputTokens',key:'outputTokens', align: 'start'},
53
+ {title: 'tokens',key:'tokens', align: 'start'},
54
+ {title: 'startedAt',key:'startedAt', align: 'start'},
55
+ {title: 'endedAt',key:'endedAt', align: 'start'},
56
+ {title: 'responseTime',key:'responseTime', align: 'start'},
57
+ {title: 'success',key:'success', align: 'start'},
58
+ {title: 'statusCode',key:'statusCode', align: 'start'},
59
+ {title: 'tenant',key:'tenant', align: 'start'},
60
+ {title: 'user',key:'user', align: 'start'}
61
+ ]
62
+ }
63
+
64
+ get selectedHeaders(): string[] {
65
+ return this.headers.map(header => header.key)
66
+ }
67
+
68
+ get actionHeaders():IEntityCrudHeader[]{
69
+ return [
70
+ {
71
+ title: 'action.actions',
72
+ key: 'actions',
73
+ sortable: false,
74
+ align: 'center',
75
+ minWidth: '190px',
76
+ fixed: 'end'
77
+ },
78
+ ]
79
+ }
80
+
81
+ get provider(): IDraxCrudProvider<any, any, any>{
82
+ return AILogProvider.instance
83
+ }
84
+
85
+ get refs(): IEntityCrudRefs{
86
+ return {
87
+ Tenant: TenantCrud.instance ,
88
+ User: UserCrud.instance
89
+ }
90
+ }
91
+
92
+ get rules():IEntityCrudRules{
93
+ return {
94
+ inputImages: [],
95
+ inputFiles: []
96
+ }
97
+ }
98
+
99
+ get fields(): IEntityCrudField[]{
100
+ return [
101
+ {name:'provider',type:'string',label:'provider',default:'',groupTab: 'REQUEST'},
102
+ {name:'model',type:'string',label:'model',default:'',groupTab: 'REQUEST'},
103
+ {name:'operationTitle',type:'string',label:'operationTitle',default:'',groupTab: 'REQUEST'},
104
+ {name:'operationGroup',type:'string',label:'operationGroup',default:'',groupTab: 'REQUEST'},
105
+ {name:'ip',type:'string',label:'ip',default:'',groupTab: 'REQUEST'},
106
+ {name:'userAgent',type:'longString',label:'userAgent',default:'',groupTab: 'REQUEST'},
107
+ {name:'input',type:'longString',label:'input',default:'',groupTab: 'REQUEST'},
108
+ {name:'inputImages',type:'array.object',label:'inputImages',default:[],groupTab: 'FILES',objectFields: [{name:'filename',type:'string',label:'filename',default:''},
109
+ {name:'filepath',type:'string',label:'filepath',default:''},
110
+ {name:'size',type:'number',label:'size',default:null},
111
+ {name:'mimetype',type:'string',label:'mimetype',default:''},
112
+ {name:'url',type:'string',label:'url',default:''}]},
113
+ {name:'inputFiles',type:'array.object',label:'inputFiles',default:[],groupTab: 'FILES',objectFields: [{name:'filename',type:'string',label:'filename',default:''},
114
+ {name:'filepath',type:'string',label:'filepath',default:''},
115
+ {name:'size',type:'number',label:'size',default:null},
116
+ {name:'mimetype',type:'string',label:'mimetype',default:''},
117
+ {name:'url',type:'string',label:'url',default:''}]},
118
+ {name:'inputTokens',type:'number',label:'inputTokens',default:null,groupTab: 'USAGE'},
119
+ {name:'outputTokens',type:'number',label:'outputTokens',default:null,groupTab: 'USAGE'},
120
+ {name:'tokens',type:'number',label:'tokens',default:null,groupTab: 'USAGE'},
121
+ {name:'startedAt',type:'date',label:'startedAt',default:null,groupTab: 'USAGE'},
122
+ {name:'endedAt',type:'date',label:'endedAt',default:null,groupTab: 'USAGE'},
123
+ {name:'responseTime',type:'string',label:'responseTime',default:'',groupTab: 'USAGE'},
124
+ {name:'output',type:'longString',label:'output',default:'',groupTab: 'RESULT'},
125
+ {name:'success',type:'boolean',label:'success',default:false,groupTab: 'RESULT'},
126
+ {name:'statusCode',type:'number',label:'statusCode',default:null,groupTab: 'RESULT'},
127
+ {name:'errorMessage',type:'longString',label:'errorMessage',default:'',groupTab: 'RESULT'},
128
+ {name:'tenant',type:'ref',label:'tenant',default:null,groupTab: 'MANAGE',ref: 'Tenant',refDisplay: 'name'},
129
+ {name:'user',type:'ref',label:'user',default:null,groupTab: 'MANAGE',ref: 'User',refDisplay: 'username'}
130
+ ]
131
+ }
132
+
133
+ get filters():IEntityCrudFilter[]{
134
+ return [
135
+ //{name: '_id', type: 'string', label: 'ID', default: '', operator: 'eq' },
136
+ ]
137
+ }
138
+
139
+ get isViewable(){
140
+ return true
141
+ }
142
+
143
+ get isEditable(){
144
+ return true
145
+ }
146
+
147
+ get isCreatable(){
148
+ return true
149
+ }
150
+
151
+ get isDeletable(){
152
+ return true
153
+ }
154
+
155
+ get isExportable(){
156
+ return true
157
+ }
158
+
159
+ get exportFormats(){
160
+ return ['CSV', 'JSON']
161
+ }
162
+
163
+ get exportHeaders(){
164
+ return ['_id']
165
+ }
166
+
167
+ get isImportable(){
168
+ return false
169
+ }
170
+
171
+ get isColumnSelectable() {
172
+ return true
173
+ }
174
+
175
+ get isGroupable() {
176
+ return true
177
+ }
178
+
179
+ get importFormats(){
180
+ return ['CSV', 'JSON']
181
+ }
182
+
183
+ get dialogFullscreen(){
184
+ return false
185
+ }
186
+
187
+ get tabs() {
188
+ return [
189
+ 'REQUEST', 'FILES', 'USAGE', 'RESULT', 'MANAGE'
190
+ ]
191
+ }
192
+
193
+ get menus() {
194
+ return [
195
+
196
+ ]
197
+ }
198
+
199
+ get searchEnable() {
200
+ return true
201
+ }
202
+
203
+ get filtersEnable(){
204
+ return true
205
+ }
206
+
207
+ get dynamicFiltersEnable(){
208
+ return true
209
+ }
210
+
211
+
212
+ }
213
+
214
+ export default AILogCrud
215
+
package/src/index.ts ADDED
@@ -0,0 +1,16 @@
1
+ import AiRoutes from './routes/index'
2
+ import AILogCrudPage from './pages/crud/AILogCrudPage.vue'
3
+ import AILogCrud from './components/cruds/AILogCrud.vue'
4
+ import AILogEntityCrud from './cruds/AILogCrud'
5
+
6
+
7
+ export {
8
+ //ROUTES
9
+ AiRoutes,
10
+ //PAGES
11
+ AILogCrudPage,
12
+ //COMPONENTS
13
+ AILogCrud,
14
+ //CRUD
15
+ AILogEntityCrud,
16
+ }
@@ -0,0 +1,82 @@
1
+
2
+ interface IAILogBase {
3
+ provider?: string
4
+ model?: string
5
+ operationTitle?: string
6
+ operationGroup?: string
7
+ ip?: string
8
+ userAgent?: string
9
+ input?: string
10
+ inputImages?: Array<{
11
+ filename?: string
12
+ filepath?: string
13
+ size?: number
14
+ mimetype?: string
15
+ url?: string
16
+ }>
17
+ inputFiles?: Array<{
18
+ filename?: string
19
+ filepath?: string
20
+ size?: number
21
+ mimetype?: string
22
+ url?: string
23
+ }>
24
+ inputTokens?: number
25
+ outputTokens?: number
26
+ tokens?: number
27
+ startedAt?: Date
28
+ endedAt?: Date
29
+ responseTime?: string
30
+ output?: string
31
+ success?: boolean
32
+ statusCode?: number
33
+ errorMessage?: string
34
+ tenant?: any
35
+ user?: any
36
+ createdAt?: Date
37
+ updatedAt?: Date
38
+ }
39
+
40
+ interface IAILog {
41
+ _id: string
42
+ provider?: string
43
+ model?: string
44
+ operationTitle?: string
45
+ operationGroup?: string
46
+ ip?: string
47
+ userAgent?: string
48
+ input?: string
49
+ inputImages?: Array<{
50
+ filename?: string
51
+ filepath?: string
52
+ size?: number
53
+ mimetype?: string
54
+ url?: string
55
+ }>
56
+ inputFiles?: Array<{
57
+ filename?: string
58
+ filepath?: string
59
+ size?: number
60
+ mimetype?: string
61
+ url?: string
62
+ }>
63
+ inputTokens?: number
64
+ outputTokens?: number
65
+ tokens?: number
66
+ startedAt?: Date
67
+ endedAt?: Date
68
+ responseTime?: string
69
+ output?: string
70
+ success?: boolean
71
+ statusCode?: number
72
+ errorMessage?: string
73
+ tenant?: any
74
+ user?: any
75
+ createdAt?: Date
76
+ updatedAt?: Date
77
+ }
78
+
79
+ export type {
80
+ IAILogBase,
81
+ IAILog
82
+ }
@@ -0,0 +1,14 @@
1
+
2
+ <script setup lang="ts">
3
+ import AILogCrud from '../../components/cruds/AILogCrud.vue'
4
+
5
+ </script>
6
+
7
+ <template>
8
+ <AILogCrud />
9
+ </template>
10
+
11
+ <style scoped>
12
+
13
+ </style>
14
+
@@ -0,0 +1,18 @@
1
+
2
+ import AILogCrudPage from "../pages/crud/AILogCrudPage.vue";
3
+
4
+
5
+ const AILogCrudRoute = [
6
+ {
7
+ name: 'AILogCrudPage',
8
+ path: '/crud/ailog',
9
+ component: AILogCrudPage,
10
+ meta: {
11
+ auth: true,
12
+ permission: 'ailog:manage',
13
+ }
14
+ },
15
+ ]
16
+
17
+ export default AILogCrudRoute
18
+ export { AILogCrudRoute }
@@ -0,0 +1,8 @@
1
+
2
+ import AILogCrudRoute from "./AILogCrudRoute"
3
+
4
+ export const routes = [
5
+ ...AILogCrudRoute
6
+ ]
7
+
8
+ export default routes