Skip to content

Commit ddf1774

Browse files
committed
Major refactor to export TypeScript Definitions of Vue Components
1 parent 2696afd commit ddf1774

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

57 files changed

+1943
-1134
lines changed

env.d.ts

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1 +1,7 @@
11
/// <reference types="vite/client" />
2+
3+
declare module '*.vue' {
4+
import type { DefineComponent } from 'vue'
5+
const component: DefineComponent<{}, {}, any>
6+
export default component
7+
}

package-lock.json

Lines changed: 1070 additions & 573 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -53,7 +53,7 @@
5353
"typescript": "~4.9.5",
5454
"uglify-js": "^3.19.3",
5555
"vite": "^4.1.5",
56-
"vite-plugin-dts": "^1.7.2",
56+
"vite-plugin-dts": "^4.5.4",
5757
"vitest": "^0.34.6",
5858
"vue-tsc": "^1.0.24",
5959
"webdriverio": "^8.35.1"

src/components/Alert.vue

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -26,11 +26,9 @@
2626

2727
<script setup lang="ts">
2828
import { computed } from 'vue'
29+
import type { AlertProps } from '@/components/types'
2930
30-
const props = withDefaults(defineProps<{
31-
type?: "warn" | "info" | "error" | "success",
32-
hideIcon?: boolean
33-
}>(), {
31+
const props = withDefaults(defineProps<AlertProps>(), {
3432
type: "warn"
3533
})
3634

src/components/AlertSuccess.vue

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -27,10 +27,9 @@
2727

2828
<script setup lang="ts">
2929
import { ref } from 'vue'
30+
import type { AlertSuccessProps } from '@/components/types'
3031
3132
const dismissed = ref(false)
3233
33-
defineProps<{
34-
message?: string
35-
}>()
34+
defineProps<AlertSuccessProps>()
3635
</script>

src/components/AutoCreateForm.vue

Lines changed: 4 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -85,7 +85,8 @@
8585
</template>
8686

8787
<script setup lang="ts">
88-
import type { ApiRequest, ApiResponse, ResponseStatus, ModalProvider, InputProp } from '@/types'
88+
import type { ApiRequest, ApiResponse, ModalProvider } from '@/types'
89+
import type { AutoCreateFormProps, AutoCreateFormEmits } from '@/components/types'
8990
import { useClient } from '@/use/client'
9091
import { useMetadata } from '@/use/metadata'
9192
import { form } from './css'
@@ -94,33 +95,14 @@ import { getTypeName, transition } from '@/use/utils'
9495
import { Sole } from '@/use/config'
9596
import { ApiResult, HttpMethods, humanize, map } from '@servicestack/client'
9697
97-
const props = withDefaults(defineProps<{
98-
type: string|InstanceType<any>|Function
99-
formStyle?: "slideOver" | "card"
100-
panelClass?: string
101-
formClass?: string
102-
headingClass?: string
103-
subHeadingClass?: string
104-
buttonsClass?: string,
105-
heading?: string
106-
subHeading?: string
107-
autosave?: boolean
108-
showLoading?: boolean,
109-
showCancel?: boolean
110-
configureField?: (field:InputProp) => void
111-
configureFormLayout?: (field:InputProp[]) => void
112-
}>(), {
98+
const props = withDefaults(defineProps<AutoCreateFormProps>(), {
11399
formStyle: "slideOver",
114100
autosave: true,
115101
showLoading: true,
116102
showCancel: true
117103
})
118104
119-
const emit = defineEmits<{
120-
(e:'done'): void
121-
(e:'save', response:any): () => void
122-
(e:'error', status:ResponseStatus): void
123-
}>()
105+
const emit = defineEmits<AutoCreateFormEmits>()
124106
125107
const formFields = ref()
126108
const formFieldsKey = ref(1)

src/components/AutoEditForm.vue

Lines changed: 10 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -20,15 +20,15 @@
2020
<slot name="footer" :formInstance="getCurrentInstance()?.exposed" :model="model"></slot>
2121

2222
</div>
23-
<div :class="form.buttonsClass">
23+
<div :class="buttonsClass">
2424
<div>
2525
<ConfirmDelete v-if="deleteType" @delete="onDelete" />
2626
</div>
2727
<div>
2828
<FormLoading v-if="showLoading && loading" />
2929
</div>
3030
<div class="flex justify-end">
31-
<SecondaryButton @click="close" :disabled="loading">Cancel</SecondaryButton>
31+
<SecondaryButton v-if="showCancel" @click="close" :disabled="loading">Cancel</SecondaryButton>
3232
<PrimaryButton type="submit" class="ml-4" :disabled="loading">Save</PrimaryButton>
3333
</div>
3434
</div>
@@ -66,15 +66,15 @@
6666

6767
</div>
6868
</div>
69-
<div :class="form.buttonsClass">
69+
<div :class="buttonsClass">
7070
<div>
7171
<ConfirmDelete v-if="deleteType" @delete="onDelete" />
7272
</div>
7373
<div>
7474
<FormLoading v-if="showLoading && loading" />
7575
</div>
7676
<div class="flex justify-end">
77-
<SecondaryButton @click="close" :disabled="loading">Cancel</SecondaryButton>
77+
<SecondaryButton v-if="showCancel" @click="close" :disabled="loading">Cancel</SecondaryButton>
7878
<PrimaryButton type="submit" class="ml-4" :disabled="loading">Save</PrimaryButton>
7979
</div>
8080
</div>
@@ -91,42 +91,23 @@
9191
</template>
9292

9393
<script setup lang="ts">
94-
import type { ApiRequest, ApiResponse, ResponseStatus, ModalProvider, InputProp } from '@/types'
95-
import { computed, getCurrentInstance, nextTick, onMounted, onUnmounted, provide, ref, watch } from 'vue'
94+
import type { ApiRequest, ApiResponse, ModalProvider, InputProp } from '@/types'
95+
import type { AutoEditFormProps, AutoEditFormEmits } from '@/components/types'
96+
import { computed, getCurrentInstance, onMounted, onUnmounted, provide, ref, watch } from 'vue'
9697
import { useClient } from '@/use/client'
9798
import { toFormValues, useMetadata } from '@/use/metadata'
9899
import { form } from './css'
99100
import { getTypeName, transition } from '@/use/utils'
100101
import { Sole } from '@/use/config'
101102
import { ApiResult, HttpMethods, humanize, map, mapGet } from '@servicestack/client'
102103
103-
const props = withDefaults(defineProps<{
104-
modelValue: any
105-
type: string|InstanceType<any>|Function
106-
deleteType?: string|InstanceType<any>|Function
107-
formStyle?: "slideOver" | "card"
108-
panelClass?: string
109-
formClass?: string
110-
headingClass?: string
111-
subHeadingClass?: string
112-
heading?: string
113-
subHeading?: string
114-
autosave?: boolean
115-
showLoading?: boolean
116-
configureField?: (field:InputProp) => void
117-
configureFormLayout?: (field:InputProp[]) => void
118-
}>(), {
104+
const props = withDefaults(defineProps<AutoEditFormProps>(), {
119105
formStyle: "slideOver",
120106
autosave: true,
121107
showLoading: true,
122108
})
123109
124-
const emit = defineEmits<{
125-
(e:'done'): void
126-
(e:'save', response:any): () => void
127-
(e:'delete', response:any): () => void
128-
(e:'error', status:ResponseStatus): void
129-
}>()
110+
const emit = defineEmits<AutoEditFormEmits>()
130111
131112
const formFields = ref()
132113
const formFieldsKey = ref(1)
@@ -179,6 +160,7 @@ const panelClass = computed(() => props.panelClass || form.panelClass(props.form
179160
const formClass = computed(() => props.formClass || form.formClass(props.formStyle))
180161
const headingClass = computed(() => props.headingClass || form.headingClass(props.formStyle))
181162
const subHeadingClass = computed(() => props.subHeadingClass || form.subHeadingClass(props.formStyle))
163+
const buttonsClass = computed(() => props.buttonsClass || form.buttonsClass)
182164
183165
const dataModel = computed(() => Crud.model(metaType.value))
184166
const title = computed(() => props.heading || typeOf(typeName.value)?.description ||

src/components/AutoForm.vue

Lines changed: 3 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -97,49 +97,23 @@
9797

9898
<script setup lang="ts">
9999
import type { MetadataType, ApiRequest, ResponseStatus, ModalProvider, InputProp } from '@/types'
100+
import type { AutoFormProps, AutoFormEmits } from '@/components/types'
100101
import { computed, provide, ref, getCurrentInstance, watch, onMounted, onUnmounted, nextTick } from 'vue'
101102
import { ApiResult, HttpMethods, humanize, map, omitEmpty } from '@servicestack/client'
102103
import { useClient } from '@/use/client'
103104
import { transition, useUtils } from '@/use/utils'
104105
import { useMetadata } from '@/use/metadata'
105106
import { form, card, slideOver } from './css'
106107
107-
const props = withDefaults(defineProps<{
108-
type: string|InstanceType<any>|Function
109-
modelValue?: ApiRequest|any
110-
heading?: string
111-
subHeading?: string
112-
showLoading?: boolean
113-
jsconfig?: string
114-
formStyle?: "slideOver" | "card"
115-
metaType?: MetadataType
116-
configureField?: (field:InputProp) => void
117-
configureFormLayout?: (field:InputProp[]) => void
118-
119-
panelClass?: string
120-
bodyClass?: string
121-
formClass?: string
122-
innerFormClass?: string
123-
headerClass?: string
124-
buttonsClass?: string
125-
headingClass?: string
126-
subHeadingClass?: string
127-
submitLabel?: string
128-
allowSubmit?: (model:any) => boolean
129-
}>(), {
108+
const props = withDefaults(defineProps<AutoFormProps>(), {
130109
formStyle: "card",
131110
headerClass: 'p-6',
132111
submitLabel: 'Submit',
133112
jsconfig: 'eccn,edv',
134113
showLoading: true,
135114
})
136115
137-
const emit = defineEmits<{
138-
(e:'success', response:any): void
139-
(e:'error', error:ResponseStatus): void
140-
(e:'update:modelValue', model:any): void
141-
(e:'done'): void
142-
}>()
116+
const emit = defineEmits<AutoFormEmits>()
143117
144118
const formFields = ref()
145119
const formFieldsKey = ref(1)

src/components/AutoFormFields.vue

Lines changed: 4 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -20,35 +20,21 @@
2020
</template>
2121

2222
<script setup lang="ts">
23-
import type { MetadataType, InputInfo, ApiRequest, ResponseStatus, InputProp } from '@/types'
23+
import type { InputInfo, InputProp } from '@/types'
24+
import type { AutoFormFieldsProps, AutoFormFieldsEmits } from '@/components/types'
2425
import { computed, getCurrentInstance } from 'vue'
2526
import { typeForInput, typeProperties, useMetadata } from '@/use/metadata'
2627
import { getTypeName } from '@/use/utils'
2728
import { mapGet } from "@servicestack/client"
2829
29-
const props = withDefaults(defineProps<{
30-
modelValue: ApiRequest
31-
type?: string
32-
metaType?: MetadataType
33-
api: {error?:ResponseStatus}|null
34-
formLayout?: InputInfo[]
35-
configureField?: (field:InputProp) => void
36-
configureFormLayout?: (field:InputProp[]) => void
37-
hideSummary?: boolean
38-
flexClass?: string
39-
divideClass?: string
40-
spaceClass?: string
41-
fieldsetClass?: string
42-
}>(), {
30+
const props = withDefaults(defineProps<AutoFormFieldsProps>(), {
4331
flexClass: "flex flex-1 flex-col justify-between",
4432
divideClass: "divide-y divide-gray-200 px-4 sm:px-6",
4533
spaceClass: "space-y-6 pt-6 pb-5",
4634
fieldsetClass: "grid grid-cols-12 gap-6"
4735
})
4836
49-
const emit = defineEmits<{
50-
(e: "update:modelValue", o:any): void
51-
}>()
37+
const emit = defineEmits<AutoFormFieldsEmits>()
5238
5339
defineExpose({ forceUpdate, props, updateValue })
5440
function forceUpdate() {

src/components/AutoQueryGrid.vue

Lines changed: 4 additions & 47 deletions
Original file line numberDiff line numberDiff line change
@@ -174,8 +174,8 @@
174174
</template>
175175

176176
<script setup lang="ts">
177-
import type { ApiPrefs, ApiResponse, AutoQueryConvention, Column, ColumnSettings, TableStyleOptions, MetadataPropertyType, GridAllowOptions, GridShowOptions, InputProp, Breakpoint } from '@/types'
178-
import type { StyleValue } from 'vue'
177+
import type { ApiPrefs, ApiResponse, Column, ColumnSettings, MetadataPropertyType, GridAllowOptions, GridShowOptions } from '@/types'
178+
import type { AutoQueryGridProps, AutoQueryGridEmits } from '@/components/types'
179179
import { computed, inject, nextTick, onMounted, ref, useSlots, getCurrentInstance } from 'vue'
180180
import { ApiResult, appendQueryString, combinePaths, delaySet, JsonServiceClient, leftPart, mapGet, queryString, rightPart } from '@servicestack/client'
181181
import { Apis, createDto, getPrimaryKey, isComplexProp, typeProperties, useMetadata } from '@/use/metadata'
@@ -196,55 +196,12 @@ const { config, autoQueryGridDefaults } = useConfig()
196196
const aqd = autoQueryGridDefaults
197197
const storage = config.value.storage!
198198
199-
const props = withDefaults(defineProps<{
200-
filterDefinitions?: AutoQueryConvention[]
201-
id?: string
202-
apis?: string|string[]
203-
type?: string|InstanceType<any>|Function
204-
prefs?: ApiPrefs
205-
206-
deny?: string|GridAllowOptions|GridAllowOptions[]
207-
hide?: string|GridShowOptions|GridShowOptions[]
208-
209-
selectedColumns?:string[]|string
210-
toolbarButtonClass?: string
211-
tableStyle?: TableStyleOptions
212-
gridClass?: string
213-
grid2Class?: string
214-
grid3Class?: string
215-
grid4Class?: string
216-
tableClass?: string
217-
theadClass?: string
218-
tbodyClass?: string
219-
theadRowClass?: string
220-
theadCellClass?: string
221-
222-
headerTitle?:(name:string) => string
223-
headerTitles?: {[name:string]:string}
224-
visibleFrom?: {[name:string]:Breakpoint|"never"}
225-
rowClass?:(model:any,i:number) => string
226-
rowStyle?:(model:any,i:number) => StyleValue | undefined
227-
modelTitle?: string
228-
newButtonLabel?: string
229-
230-
apiPrefs?: ApiPrefs
231-
canFilter?:(column:string) => boolean
232-
disableKeyBindings?:(column:string) => boolean
233-
configureField?: (field:InputProp) => void
234-
skip?: number
235-
create?: boolean
236-
edit?: string|number
237-
filters?: any
238-
}>(), {
199+
const props = withDefaults(defineProps<AutoQueryGridProps>(), {
239200
id: 'AutoQueryGrid',
240201
skip: 0
241202
})
242203
243-
const emit = defineEmits<{
244-
(e: "headerSelected", name:string, ev:Event): void
245-
(e: "rowSelected", item:any, ev:Event): void
246-
(e: "nav", args:any): void
247-
}>()
204+
const emit = defineEmits<AutoQueryGridEmits>()
248205
249206
const client = inject<JsonServiceClient>('client')!
250207

src/components/AutoViewForm.vue

Lines changed: 4 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -63,7 +63,8 @@
6363
</template>
6464

6565
<script setup lang="ts">
66-
import type { ApiResponse, ResponseStatus } from '@/types'
66+
import type { ApiResponse } from '@/types'
67+
import type { AutoViewFormProps, AutoViewFormEmits } from '@/components/types'
6768
import { useMetadata, toFormValues, Apis } from '@/use/metadata'
6869
import { form } from './css'
6970
import { computed, onMounted, onUnmounted, ref, watch } from 'vue'
@@ -72,30 +73,11 @@ import { Sole } from '@/use/config'
7273
import { useClient } from '@/use/client'
7374
import { ApiResult, humanize, map, mapGet } from '@servicestack/client'
7475
75-
const props = withDefaults(defineProps<{
76-
model: any
77-
apis?: Apis,
78-
typeName?: string,
79-
done?: Function,
80-
formStyle?: "slideOver" | "card"
81-
panelClass?: string
82-
formClass?: string
83-
headingClass?: string
84-
subHeadingClass?: string
85-
heading?: string
86-
subHeading?: string
87-
showLoading?: boolean
88-
deleteType?: string|InstanceType<any>|Function
89-
}>(), {
76+
const props = withDefaults(defineProps<AutoViewFormProps>(), {
9077
formStyle: "slideOver",
9178
})
9279
93-
const emit = defineEmits<{
94-
(e:'done'): void
95-
(e:'save', response:any): () => void
96-
(e:'delete', response:any): () => void
97-
(e:'error', status:ResponseStatus): void
98-
}>()
80+
const emit = defineEmits<AutoViewFormEmits>()
9981
10082
const { typeOf, getPrimaryKey, Crud, createDto } = useMetadata()
10183

0 commit comments

Comments
 (0)