@xy-planning-network/trees 0.9.6 → 0.9.8-rc1

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 CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@xy-planning-network/trees",
3
- "version": "0.9.6",
3
+ "version": "0.9.8-rc1",
4
4
  "description": "",
5
5
  "license": "MIT",
6
6
  "repository": "github:xy-planning-network/trees",
@@ -61,6 +61,10 @@ const onInput = (e: Event) => {
61
61
  val = looseToNumber(val)
62
62
  }
63
63
 
64
+ if (typeof val === "string") {
65
+ val = val.trim()
66
+ }
67
+
64
68
  modelState.value = val
65
69
 
66
70
  inputValidation(e)
@@ -26,8 +26,17 @@ const {
26
26
  } = useInputField(props)
27
27
 
28
28
  const onChange = (e: Event) => {
29
- modelState.value = (e.target as HTMLInputElement).value
30
- validate(e)
29
+ // NOTE(spk): The selectedIndex references the list of options in tree order
30
+ // https://html.spec.whatwg.org/multipage/form-elements.html#dom-select-selectedindex
31
+ const selectedIndex = (e.target as HTMLSelectElement).selectedIndex
32
+
33
+ // NOTE(spk): we disable the 0 index option in the list, so there's
34
+ // no expectation it will trigger a change event. Likewise, dynamic updates to
35
+ // a modelValue prop in a parent do not trigger the change event.
36
+ if (selectedIndex > 0) {
37
+ modelState.value = props.options[selectedIndex - 1].value
38
+ validate(e)
39
+ }
31
40
  }
32
41
  </script>
33
42
 
@@ -22,7 +22,7 @@ const {
22
22
  } = useInputField(props)
23
23
 
24
24
  const onInput = (e: Event) => {
25
- modelState.value = (e.target as HTMLInputElement).value
25
+ modelState.value = (e.target as HTMLInputElement).value.trim()
26
26
  inputValidation(e)
27
27
  }
28
28
  </script>
@@ -1,27 +1,27 @@
1
1
  <script setup lang="ts">
2
- import { DateRange } from "@/composables/date"
3
2
  import { ref } from "vue"
3
+ import { DateRange } from "@/composables/date"
4
+ import { SortDir } from "@/composables/list"
4
5
  import DateRangePicker from "../forms/DateRangePicker.vue"
5
6
  import Select from "@/lib-components/forms/Select.vue"
6
7
 
7
8
  const props = defineProps<{
8
9
  dateRange: DateRange
9
- sortDir: string
10
- title: string
10
+ sortDir: SortDir
11
11
  }>()
12
12
  const dateRange = ref<DateRange>(props.dateRange)
13
- const sortDir = ref<string>(props.sortDir)
14
- const sortOptions = [
15
- { label: "Newest-Oldest", value: "DESC" },
16
- { label: "Oldest-Newest", value: "ASC" },
13
+ const sortDir = ref<SortDir>(props.sortDir)
14
+ const sortOptions: { label: string; value: SortDir }[] = [
15
+ { label: "Newest-Oldest", value: "desc" },
16
+ { label: "Oldest-Newest", value: "asc" },
17
17
  ]
18
18
 
19
19
  const emits = defineEmits<{
20
- (e: "sort-dir-changed", val: string): void
20
+ (e: "sort-dir-changed", val: SortDir): void
21
21
  (e: "date-range-changed", val: DateRange): void
22
22
  }>()
23
23
 
24
- const sortDirChanged = (sortDir: string) => {
24
+ const sortDirChanged = (sortDir: SortDir) => {
25
25
  emits("sort-dir-changed", sortDir)
26
26
  }
27
27
 
@@ -30,25 +30,14 @@ const dateRangeChanged = (dateRange: DateRange) => {
30
30
  }
31
31
  </script>
32
32
  <template>
33
- <div
34
- class="md:flex md:items-center md:justify-between bg-white mx-auto py-4 border-t border-gray-100"
35
- >
36
- <div class="flex-1 min-w-0">
37
- <h1 class="text-lg leading-6 font-semibold text-gray-900">
38
- {{ title }}
39
- </h1>
40
- </div>
41
- <div class="mt-4 flex md:mt-0 md:ml-4">
42
- <Select
43
- v-model="sortDir"
44
- :options="sortOptions"
45
- @update:model-value="sortDirChanged"
46
- ></Select>
47
- <DateRangePicker
48
- v-model="dateRange"
49
- class="ml-3"
50
- @update:model-value="dateRangeChanged"
51
- />
52
- </div>
53
- </div>
33
+ <Select
34
+ v-model="sortDir"
35
+ :options="sortOptions"
36
+ @update:model-value="sortDirChanged"
37
+ ></Select>
38
+ <DateRangePicker
39
+ v-model="dateRange"
40
+ class="ml-3"
41
+ @update:model-value="dateRangeChanged"
42
+ />
54
43
  </template>
@@ -1,20 +1,58 @@
1
1
  <script setup lang="ts">
2
+ import { computed, ref, watch } from "vue"
2
3
  import { useAppFlasher } from "@/composables"
3
- import { ref, watch } from "vue"
4
+ import { SortDir, DetailListAPI } from "@/composables/list"
4
5
  import BaseAPI from "../../api/base"
5
6
  import DateFilter from "../layout/DateFilter.vue"
6
7
  import Paginator from "../navigation/Paginator.vue"
7
8
 
8
9
  const props = withDefaults(
9
10
  defineProps<{
10
- refreshTrigger?: number
11
- reloadTrigger?: number
12
- title: string
11
+ /**
12
+ * borderless removes the default border styling applied around list items.
13
+ * This is useful when filters or pagination navigation components show,
14
+ * but less helpful when this component is dialed back in functionality.
15
+ */
16
+ borderless?: boolean
17
+
18
+ /**
19
+ * defaultSort overrides the default field to sort items on.
20
+ */
21
+ defaultSort?: string
22
+
23
+ /**
24
+ * defaultSortDir overrides the default order to sort items with.
25
+ */
26
+ defaultSortDir?: SortDir
27
+
28
+ /**
29
+ * disableDate turns off the date-range filter input.
30
+ */
31
+ disableDate?: boolean
32
+
33
+ /**
34
+ * disableNavigation hides navigation components from displaying.
35
+ * This makes the List as a "single-page" limiting the number of results via perPage.
36
+ */
37
+ disableNavigation?: boolean
38
+
39
+ /**
40
+ * perPage overrides the default number of items per page to retrieve.
41
+ */
42
+ perPage?: number
43
+
44
+ /**
45
+ * url is the endpoint to retrieve list data from
46
+ */
13
47
  url: string
14
48
  }>(),
15
49
  {
16
- refreshTrigger: 0,
17
- reloadTrigger: 0,
50
+ borderless: false,
51
+ disableNavigation: false,
52
+ disableDate: false,
53
+ defaultSort: "created_at",
54
+ defaultSortDir: "desc",
55
+ perPage: 10,
18
56
  }
19
57
  )
20
58
 
@@ -22,24 +60,31 @@ const dateRange = ref<{ minDate: number; maxDate: number }>({
22
60
  minDate: 0,
23
61
  maxDate: 0,
24
62
  })
25
- const hasContent = ref(true)
63
+
26
64
  const items = ref<any[]>([])
65
+
27
66
  const pagination = ref({
28
67
  page: 1,
29
- perPage: 10,
68
+ perPage: props.perPage,
30
69
  totalItems: 0,
31
70
  totalPages: 0,
32
71
  })
33
- const sortDir = ref("DESC")
34
72
 
35
- const loadAndRender = (checkForContent: boolean): void => {
36
- const params = {
73
+ const sort = ref(props.defaultSort)
74
+ const sortDir = ref(props.defaultSortDir)
75
+
76
+ const loadAndRender = (): void => {
77
+ const params: Record<string, unknown> = {
78
+ maxDate: dateRange.value.maxDate,
79
+ minDate: dateRange.value.minDate,
37
80
  page: pagination.value.page,
38
81
  perPage: pagination.value.perPage,
82
+ q: "",
83
+ sort: sort.value,
39
84
  sortDir: sortDir.value,
40
85
  }
41
86
 
42
- BaseAPI.get(props.url, {}, Object.assign(params, dateRange.value)).then(
87
+ BaseAPI.get(props.url, {}, params).then(
43
88
  (success: any) => {
44
89
  pagination.value = {
45
90
  page: success.data.page,
@@ -48,7 +93,6 @@ const loadAndRender = (checkForContent: boolean): void => {
48
93
  totalPages: success.data.totalPages,
49
94
  }
50
95
  items.value = success.data.items
51
- if (checkForContent) hasContent.value = items.value.length != 0
52
96
  },
53
97
  () => {
54
98
  useAppFlasher.genericError()
@@ -56,39 +100,51 @@ const loadAndRender = (checkForContent: boolean): void => {
56
100
  )
57
101
  }
58
102
 
59
- watch([sortDir, dateRange], () => {
60
- loadAndRender(false)
103
+ const hasContent = computed((): boolean => {
104
+ return items.value.length ? true : false
61
105
  })
62
106
 
63
- watch(
64
- () => props.refreshTrigger,
65
- () => {
66
- loadAndRender(false)
67
- }
68
- )
107
+ const filtersAreConfigured = computed(() => {
108
+ return !props.disableDate
109
+ })
69
110
 
70
- watch(
71
- () => props.reloadTrigger,
72
- () => {
73
- // This lets parent components trigger a refresh of the current page depending on external actions.
74
- pagination.value.page = 1
75
- loadAndRender(true)
76
- }
77
- )
111
+ const showPaginator = computed(() => {
112
+ return !props.disableNavigation && hasContent
113
+ })
114
+
115
+ const reset = (): void => {
116
+ pagination.value.page = 1
117
+ loadAndRender()
118
+ }
78
119
 
79
- loadAndRender(true)
120
+ const publicMethods: DetailListAPI = {
121
+ refresh: loadAndRender,
122
+ reset: reset,
123
+ }
124
+
125
+ watch([sortDir, dateRange], () => {
126
+ loadAndRender()
127
+ })
128
+
129
+ defineExpose(publicMethods)
130
+ loadAndRender()
80
131
  </script>
81
132
  <template>
82
- <div>
83
- <DateFilter
84
- :date-range="dateRange"
85
- :sort-dir="sortDir"
86
- :title="title"
87
- @sort-dir-changed="sortDir = $event"
88
- @date-range-changed="dateRange = $event"
89
- />
133
+ <div :class="{ 'mt-4 space-y-2': filtersAreConfigured }">
134
+ <div v-if="!disableDate" class="flex">
135
+ <DateFilter
136
+ :date-range="dateRange"
137
+ :sort-dir="sortDir"
138
+ @sort-dir-changed="sortDir = $event"
139
+ @date-range-changed="dateRange = $event"
140
+ />
141
+ </div>
90
142
 
91
- <div v-if="hasContent" class="shadow overflow-hidden sm:rounded-md border">
143
+ <div
144
+ v-if="hasContent"
145
+ class="overflow-hidden"
146
+ :class="{ 'shadow sm:rounded-md border': !borderless }"
147
+ >
92
148
  <ul>
93
149
  <li
94
150
  v-for="(item, idx) in items"
@@ -100,12 +156,12 @@ loadAndRender(true)
100
156
  </ul>
101
157
  </div>
102
158
 
103
- <slot v-else name="empty"></slot>
159
+ <slot v-else name="empty"> No items were found! </slot>
104
160
 
105
161
  <Paginator
106
- v-if="hasContent"
162
+ v-if="showPaginator"
107
163
  v-model="pagination"
108
- @update:model-value="loadAndRender(false)"
164
+ @update:model-value="loadAndRender()"
109
165
  />
110
166
  </div>
111
167
  </template>
@@ -1,7 +1,8 @@
1
1
  import { default as useBaseAPI, useBaseAPIGet, useBaseAPIPatch, useBaseAPIPut, useBaseAPIPost, useBaseAPIDelete } from "./useBaseAPI";
2
2
  import type { UseBaseAPIOptions, UseBaseAPI } from "./useBaseAPI";
3
3
  import type { DynamicTableOptions, DynamicTableAPI, TableActionItem, TableColumn, TableActions, TableCellAlignment, TableRowData, TableColumns, TableRowsData } from "./table";
4
- export type { UseBaseAPIOptions, UseBaseAPI, DynamicTableOptions, DynamicTableAPI, TableActionItem, TableColumn, TableActions, TableCellAlignment, TableRowData, TableColumns, TableRowsData, };
4
+ import type { DetailListAPI, SortDir } from "./list";
5
+ export type { UseBaseAPIOptions, UseBaseAPI, DetailListAPI, DynamicTableOptions, DynamicTableAPI, SortDir, TableActionItem, TableColumn, TableActions, TableCellAlignment, TableRowData, TableColumns, TableRowsData, };
5
6
  export { useBaseAPI, useBaseAPIGet, useBaseAPIPatch, useBaseAPIPut, useBaseAPIPost, useBaseAPIDelete, };
6
7
  import { useFlashes, useAppFlashes, useAppFlasher } from "./useFlashes";
7
8
  import type { FlashMessage, FlashType, FlashStore, Flasher } from "./useFlashes";
@@ -0,0 +1,13 @@
1
+ export interface DetailListAPI {
2
+ /**
3
+ * Force refresh the list data with the current api params state
4
+ * @returns void
5
+ */
6
+ refresh: () => void;
7
+ /**
8
+ * Reset the list data back to page 1 and load
9
+ * @returns void
10
+ */
11
+ reset: () => void;
12
+ }
13
+ export type SortDir = "asc" | "desc";
@@ -0,0 +1,2 @@
1
+ import { Slot } from "vue";
2
+ export declare function hasSlotContent(slot: Slot | undefined, slotProps?: {}): boolean;
@@ -1,19 +1,16 @@
1
1
  import { DateRange } from "../../composables/date";
2
+ import { SortDir } from "../../composables/list";
2
3
  declare const _default: import("vue").DefineComponent<{
3
4
  dateRange: {
4
5
  type: import("vue").PropType<DateRange>;
5
6
  required: true;
6
7
  };
7
8
  sortDir: {
8
- type: import("vue").PropType<string>;
9
- required: true;
10
- };
11
- title: {
12
- type: import("vue").PropType<string>;
9
+ type: import("vue").PropType<SortDir>;
13
10
  required: true;
14
11
  };
15
12
  }, {}, unknown, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {
16
- "sort-dir-changed": (val: string) => void;
13
+ "sort-dir-changed": (val: SortDir) => void;
17
14
  "date-range-changed": (val: DateRange) => void;
18
15
  }, string, import("vue").VNodeProps & import("vue").AllowedComponentProps & import("vue").ComponentCustomProps, Readonly<import("vue").ExtractPropTypes<{
19
16
  dateRange: {
@@ -21,15 +18,11 @@ declare const _default: import("vue").DefineComponent<{
21
18
  required: true;
22
19
  };
23
20
  sortDir: {
24
- type: import("vue").PropType<string>;
25
- required: true;
26
- };
27
- title: {
28
- type: import("vue").PropType<string>;
21
+ type: import("vue").PropType<SortDir>;
29
22
  required: true;
30
23
  };
31
24
  }>> & {
32
- "onSort-dir-changed"?: ((val: string) => any) | undefined;
25
+ "onSort-dir-changed"?: ((val: SortDir) => any) | undefined;
33
26
  "onDate-range-changed"?: ((val: DateRange) => any) | undefined;
34
27
  }, {}, {}>;
35
28
  export default _default;
@@ -1,40 +1,72 @@
1
+ import { SortDir } from "../../composables/list";
1
2
  declare const _default: __VLS_WithTemplateSlots<import("vue").DefineComponent<{
2
- title: {
3
+ url: {
3
4
  type: import("vue").PropType<string>;
4
5
  required: true;
5
6
  };
6
- url: {
7
+ borderless: {
8
+ type: import("vue").PropType<boolean>;
9
+ default: boolean;
10
+ };
11
+ defaultSort: {
7
12
  type: import("vue").PropType<string>;
8
- required: true;
13
+ default: string;
9
14
  };
10
- refreshTrigger: {
11
- type: import("vue").PropType<number>;
12
- default: number;
15
+ defaultSortDir: {
16
+ type: import("vue").PropType<SortDir>;
17
+ default: string;
18
+ };
19
+ disableDate: {
20
+ type: import("vue").PropType<boolean>;
21
+ default: boolean;
22
+ };
23
+ disableNavigation: {
24
+ type: import("vue").PropType<boolean>;
25
+ default: boolean;
13
26
  };
14
- reloadTrigger: {
27
+ perPage: {
15
28
  type: import("vue").PropType<number>;
16
29
  default: number;
17
30
  };
18
- }, {}, unknown, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").VNodeProps & import("vue").AllowedComponentProps & import("vue").ComponentCustomProps, Readonly<import("vue").ExtractPropTypes<{
19
- title: {
31
+ }, {
32
+ refresh: () => void;
33
+ reset: () => void;
34
+ }, unknown, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").VNodeProps & import("vue").AllowedComponentProps & import("vue").ComponentCustomProps, Readonly<import("vue").ExtractPropTypes<{
35
+ url: {
20
36
  type: import("vue").PropType<string>;
21
37
  required: true;
22
38
  };
23
- url: {
39
+ borderless: {
40
+ type: import("vue").PropType<boolean>;
41
+ default: boolean;
42
+ };
43
+ defaultSort: {
24
44
  type: import("vue").PropType<string>;
25
- required: true;
45
+ default: string;
26
46
  };
27
- refreshTrigger: {
28
- type: import("vue").PropType<number>;
29
- default: number;
47
+ defaultSortDir: {
48
+ type: import("vue").PropType<SortDir>;
49
+ default: string;
50
+ };
51
+ disableDate: {
52
+ type: import("vue").PropType<boolean>;
53
+ default: boolean;
54
+ };
55
+ disableNavigation: {
56
+ type: import("vue").PropType<boolean>;
57
+ default: boolean;
30
58
  };
31
- reloadTrigger: {
59
+ perPage: {
32
60
  type: import("vue").PropType<number>;
33
61
  default: number;
34
62
  };
35
63
  }>>, {
36
- refreshTrigger: number;
37
- reloadTrigger: number;
64
+ borderless: boolean;
65
+ defaultSort: string;
66
+ defaultSortDir: SortDir;
67
+ disableDate: boolean;
68
+ disableNavigation: boolean;
69
+ perPage: number;
38
70
  }, {}>, {
39
71
  default?(_: {
40
72
  item: any;
@@ -0,0 +1,21 @@
1
+ import type { TableColumn, TableRow } from "../../composables/table";
2
+ declare const _default: import("vue").DefineComponent<__VLS_TypePropsToRuntimeProps<{
3
+ columns: TableColumn<TableRow>[];
4
+ rows: TableRow[];
5
+ }>, {}, unknown, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, Record<string, any>, string, import("vue").VNodeProps & import("vue").AllowedComponentProps & import("vue").ComponentCustomProps, Readonly<{
6
+ columns?: unknown;
7
+ rows?: unknown;
8
+ } & {
9
+ columns: TableColumn<TableRow>[];
10
+ rows: TableRow[];
11
+ } & {}>, {}>;
12
+ export default _default;
13
+ type __VLS_NonUndefinedable<T> = T extends undefined ? never : T;
14
+ type __VLS_TypePropsToRuntimeProps<T> = {
15
+ [K in keyof T]-?: {} extends Pick<T, K> ? {
16
+ type: import('vue').PropType<__VLS_NonUndefinedable<T[K]>>;
17
+ } : {
18
+ type: import('vue').PropType<T[K]>;
19
+ required: true;
20
+ };
21
+ };
@@ -0,0 +1,27 @@
1
+ import * as TableTypes from "../../composables/table";
2
+ declare const _default: __VLS_WithTemplateSlots<import("vue").DefineComponent<__VLS_TypePropsToRuntimeProps<{
3
+ tableData: Omit<TableTypes.Static, "currentUser">;
4
+ }>, {}, unknown, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, Record<string, any>, string, import("vue").VNodeProps & import("vue").AllowedComponentProps & import("vue").ComponentCustomProps, Readonly<{
5
+ tableData?: unknown;
6
+ } & {
7
+ tableData: Omit<TableTypes.Static, "currentUser">;
8
+ } & {}>, {}>, {
9
+ actions: (_: {
10
+ row: Record<string, unknown>;
11
+ }) => any;
12
+ }>;
13
+ export default _default;
14
+ type __VLS_NonUndefinedable<T> = T extends undefined ? never : T;
15
+ type __VLS_TypePropsToRuntimeProps<T> = {
16
+ [K in keyof T]-?: {} extends Pick<T, K> ? {
17
+ type: import('vue').PropType<__VLS_NonUndefinedable<T[K]>>;
18
+ } : {
19
+ type: import('vue').PropType<T[K]>;
20
+ required: true;
21
+ };
22
+ };
23
+ type __VLS_WithTemplateSlots<T, S> = T & {
24
+ new (): {
25
+ $slots: S;
26
+ };
27
+ };
@@ -0,0 +1,39 @@
1
+ import * as TableTypes from "../../composables/table";
2
+ declare const _default: import("vue").DefineComponent<__VLS_WithDefaults<__VLS_TypePropsToRuntimeProps<{
3
+ clickable?: boolean | undefined;
4
+ loader?: boolean | undefined;
5
+ tableData: TableTypes.Dynamic;
6
+ }>, {
7
+ clickable: boolean;
8
+ loader: boolean;
9
+ }>, {}, unknown, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {
10
+ handleClick: (v: any) => void;
11
+ }, string, import("vue").VNodeProps & import("vue").AllowedComponentProps & import("vue").ComponentCustomProps, Readonly<{
12
+ tableData?: unknown;
13
+ clickable?: unknown;
14
+ loader?: unknown;
15
+ } & {
16
+ tableData: TableTypes.Dynamic;
17
+ clickable: boolean;
18
+ loader: boolean;
19
+ } & {}> & {
20
+ onHandleClick?: ((v: any) => any) | undefined;
21
+ }, {
22
+ clickable: boolean;
23
+ loader: boolean;
24
+ }>;
25
+ export default _default;
26
+ type __VLS_NonUndefinedable<T> = T extends undefined ? never : T;
27
+ type __VLS_TypePropsToRuntimeProps<T> = {
28
+ [K in keyof T]-?: {} extends Pick<T, K> ? {
29
+ type: import('vue').PropType<__VLS_NonUndefinedable<T[K]>>;
30
+ } : {
31
+ type: import('vue').PropType<T[K]>;
32
+ required: true;
33
+ };
34
+ };
35
+ type __VLS_WithDefaults<P, D> = {
36
+ [K in keyof Pick<P, keyof P>]: K extends keyof D ? P[K] & {
37
+ default: D[K];
38
+ } : P[K];
39
+ };
@@ -0,0 +1,18 @@
1
+ import type { ActionMenuItemCallback } from "../../composables/nav";
2
+ declare const _default: import("vue").DefineComponent<__VLS_TypePropsToRuntimeProps<{
3
+ items: ActionMenuItemCallback[];
4
+ }>, {}, unknown, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, Record<string, any>, string, import("vue").VNodeProps & import("vue").AllowedComponentProps & import("vue").ComponentCustomProps, Readonly<{
5
+ items?: unknown;
6
+ } & {
7
+ items: ActionMenuItemCallback[];
8
+ } & {}>, {}>;
9
+ export default _default;
10
+ type __VLS_NonUndefinedable<T> = T extends undefined ? never : T;
11
+ type __VLS_TypePropsToRuntimeProps<T> = {
12
+ [K in keyof T]-?: {} extends Pick<T, K> ? {
13
+ type: import('vue').PropType<__VLS_NonUndefinedable<T[K]>>;
14
+ } : {
15
+ type: import('vue').PropType<T[K]>;
16
+ required: true;
17
+ };
18
+ };
@@ -0,0 +1,22 @@
1
+ import type { ActionMenuEmit } from "../../composables/nav";
2
+ declare const _default: import("vue").DefineComponent<__VLS_TypePropsToRuntimeProps<{
3
+ items: ActionMenuEmit[];
4
+ }>, {}, unknown, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {
5
+ click: (v: string) => void;
6
+ }, string, import("vue").VNodeProps & import("vue").AllowedComponentProps & import("vue").ComponentCustomProps, Readonly<{
7
+ items?: unknown;
8
+ } & {
9
+ items: ActionMenuEmit[];
10
+ } & {}> & {
11
+ onClick?: ((v: string) => any) | undefined;
12
+ }, {}>;
13
+ export default _default;
14
+ type __VLS_NonUndefinedable<T> = T extends undefined ? never : T;
15
+ type __VLS_TypePropsToRuntimeProps<T> = {
16
+ [K in keyof T]-?: {} extends Pick<T, K> ? {
17
+ type: import('vue').PropType<__VLS_NonUndefinedable<T[K]>>;
18
+ } : {
19
+ type: import('vue').PropType<T[K]>;
20
+ required: true;
21
+ };
22
+ };