@illinois-grad/grad-vue 2.3.4 → 2.4.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/README.md +20 -5
- package/dist/components/GAlertDialog.vue.d.ts +43 -12
- package/dist/components/GAppHeader.vue.d.ts +30 -18
- package/dist/components/GButton.vue.d.ts +77 -12
- package/dist/components/GClipboard.vue.d.ts +30 -5
- package/dist/components/GCurrencyInput.vue.d.ts +53 -10
- package/dist/components/GDateInput.vue.d.ts +53 -10
- package/dist/components/GDateRangeInput.vue.d.ts +74 -17
- package/dist/components/GDetailList.vue.d.ts +14 -11
- package/dist/components/GEmailInput.vue.d.ts +53 -10
- package/dist/components/GForm.vue.d.ts +54 -21
- package/dist/components/GHamburgerMenu.vue.d.ts +40 -6
- package/dist/components/GHistoryScroller.vue.d.ts +34 -2
- package/dist/components/GModal.vue.d.ts +78 -12
- package/dist/components/GOverlay.vue.d.ts +4 -1
- package/dist/components/GPopover.vue.d.ts +46 -21
- package/dist/components/GProgress.vue.d.ts +38 -5
- package/dist/components/GSearch.vue.d.ts +73 -2
- package/dist/components/GSelect.vue.d.ts +103 -26
- package/dist/components/GSelectButton.vue.d.ts +65 -16
- package/dist/components/GSidebar.vue.d.ts +62 -11
- package/dist/components/GSidebarMenu.vue.d.ts +125 -16
- package/dist/components/GSubmitButton.vue.d.ts +39 -11
- package/dist/components/GTable.vue.d.ts +86 -3
- package/dist/components/GTermSelector.vue.d.ts +48 -10
- package/dist/components/GTextInput.vue.d.ts +80 -18
- package/dist/components/GThreeWayToggle.vue.d.ts +54 -17
- package/dist/components/GUserMenu.vue.d.ts +61 -10
- package/dist/components/form/GFormErrorMessages.vue.d.ts +13 -5
- package/dist/components/table/GTableBody.vue.d.ts +5 -2
- package/dist/components/table/GTablePagination.vue.d.ts +43 -11
- package/dist/components/term/GTermSelectorControl.vue.d.ts +32 -10
- package/dist/compose/useOverlayStack.d.ts +10 -0
- package/dist/grad-vue.css +1 -1
- package/dist/grad-vue.js +1 -1
- package/dist/{main-DEKKtASV.js → main-BtQAK04Y.js} +1060 -1010
- package/dist/main-BtQAK04Y.js.map +1 -0
- package/dist/plugin.js +1 -1
- package/package.json +1 -1
- package/dist/main-DEKKtASV.js.map +0 -1
|
@@ -3,6 +3,75 @@ export interface GSearchGroup<R> {
|
|
|
3
3
|
label: string;
|
|
4
4
|
items: R[];
|
|
5
5
|
}
|
|
6
|
+
/**
|
|
7
|
+
* A combobox-style search that shows a list of results as an auto
|
|
8
|
+
* complete dropdown.
|
|
9
|
+
*
|
|
10
|
+
* The component doesn't perform any real searching. It emits events
|
|
11
|
+
* that can be used to trigger searches, and then the results are
|
|
12
|
+
* passed back to the component.
|
|
13
|
+
*
|
|
14
|
+
* **Events**:
|
|
15
|
+
*
|
|
16
|
+
* - `submit` event is emitted when a search should be performed.
|
|
17
|
+
* - `select` event is submitted when a user makes a selection
|
|
18
|
+
* in the dropdown.
|
|
19
|
+
*
|
|
20
|
+
* > [!NOTE]
|
|
21
|
+
* > The `v-model` value should *not* be used to trigger a search,
|
|
22
|
+
* > but it can be used to get the current user input.
|
|
23
|
+
*
|
|
24
|
+
* **Props**:
|
|
25
|
+
*
|
|
26
|
+
* - `results` will be rendered in the dropdown. There are two options:
|
|
27
|
+
* - Pass an array of objects that extend `{ id: string | number; title: string; }`.
|
|
28
|
+
* - Pass an array of `GSearchGroup<T>` objects, where the `items` property extends the above type.
|
|
29
|
+
* In this case the results are grouped.
|
|
30
|
+
* - `auto` makes search submit on user input. Defaults to `true`.
|
|
31
|
+
* if `false`, submission happens on Enter or clicking the search button.
|
|
32
|
+
* - `loading` shows a loading indicator. Use if the search may take longer.
|
|
33
|
+
*
|
|
34
|
+
* **Slot**: `option` customizes how an option is rendered.
|
|
35
|
+
* It receives the current item as `option`.
|
|
36
|
+
*
|
|
37
|
+
* **Slot**: `group` customizes the group label for each group.
|
|
38
|
+
*
|
|
39
|
+
* Here is a minimal implementation:
|
|
40
|
+
*
|
|
41
|
+
* ```vue
|
|
42
|
+
* <script setup lang="ts">
|
|
43
|
+
* interface SearchResult {
|
|
44
|
+
* id: string;
|
|
45
|
+
* title: string;
|
|
46
|
+
* }
|
|
47
|
+
*
|
|
48
|
+
* const searchData = ref<SearchResult[]>([
|
|
49
|
+
* { id: "1", title: "The Quick Fox" },
|
|
50
|
+
* { id: "2", title: "The Lazy Dog" },
|
|
51
|
+
* { id: "3", title: "The Brown Bear" },
|
|
52
|
+
* ]);
|
|
53
|
+
* const searchResults = ref<SearchResult[]>([]);
|
|
54
|
+
*
|
|
55
|
+
* function submit(query: string) {
|
|
56
|
+
* searchResults.value = searchData.value.filter((result) =>
|
|
57
|
+
* result.title.toLowerCase().includes(query.toLowerCase()),
|
|
58
|
+
* );
|
|
59
|
+
* }
|
|
60
|
+
* function selected(item: SearchResult) {
|
|
61
|
+
* console.log("Selected:", item);
|
|
62
|
+
* }
|
|
63
|
+
* </script>
|
|
64
|
+
* <template>
|
|
65
|
+
* <GSearch
|
|
66
|
+
* :results="searchResults"
|
|
67
|
+
* @submit="submit"
|
|
68
|
+
* @select="selected">
|
|
69
|
+
* </GSearch>
|
|
70
|
+
* </template>
|
|
71
|
+
* ```
|
|
72
|
+
*/
|
|
73
|
+
declare const _default: typeof __VLS_export;
|
|
74
|
+
export default _default;
|
|
6
75
|
declare const __VLS_export: <T extends {
|
|
7
76
|
id: string | number;
|
|
8
77
|
title: string;
|
|
@@ -11,18 +80,22 @@ declare const __VLS_export: <T extends {
|
|
|
11
80
|
results: GSearchGroup<T>[] | T[];
|
|
12
81
|
/**
|
|
13
82
|
* Placeholder
|
|
83
|
+
* @demo
|
|
14
84
|
*/
|
|
15
85
|
placeholder?: string;
|
|
16
86
|
/**
|
|
17
87
|
* Accessible label
|
|
88
|
+
* @demo
|
|
18
89
|
*/
|
|
19
90
|
label?: string;
|
|
20
91
|
/**
|
|
21
92
|
* Automatic search
|
|
93
|
+
* @demo
|
|
22
94
|
*/
|
|
23
95
|
auto?: boolean;
|
|
24
96
|
/**
|
|
25
97
|
* Show search loading indicator
|
|
98
|
+
* @demo
|
|
26
99
|
*/
|
|
27
100
|
loading?: boolean;
|
|
28
101
|
} & {
|
|
@@ -53,8 +126,6 @@ declare const __VLS_export: <T extends {
|
|
|
53
126
|
}>) => import("vue").VNode & {
|
|
54
127
|
__ctx?: Awaited<typeof __VLS_setup>;
|
|
55
128
|
};
|
|
56
|
-
declare const _default: typeof __VLS_export;
|
|
57
|
-
export default _default;
|
|
58
129
|
type __VLS_PrettifyLocal<T> = (T extends any ? {
|
|
59
130
|
[K in keyof T]: T[K];
|
|
60
131
|
} : {
|
|
@@ -1,71 +1,148 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
1
|
+
/**
|
|
2
|
+
* By default, this component behaves like a normal select element with
|
|
3
|
+
* custom styling.
|
|
4
|
+
*
|
|
5
|
+
* The component can be marked `searchable` to enable search functionality.
|
|
6
|
+
* This turns it into a text input that filters the options. Filtering is
|
|
7
|
+
* done with a simple lower-case string search.
|
|
8
|
+
*
|
|
9
|
+
* The `options` prop can be an array of strings or objects with `label`
|
|
10
|
+
* and `value` properties.
|
|
11
|
+
*/
|
|
12
|
+
declare const _default: typeof __VLS_export;
|
|
13
|
+
export default _default;
|
|
14
|
+
declare const __VLS_export: __VLS_WithSlots<import("vue").DefineComponent<{
|
|
15
|
+
/**
|
|
16
|
+
* List of options to choose from
|
|
17
|
+
*/
|
|
18
|
+
options: Array<string | {
|
|
19
|
+
label: string;
|
|
20
|
+
value: string | number;
|
|
21
|
+
}>;
|
|
7
22
|
/**
|
|
8
23
|
* Accessible label
|
|
24
|
+
* @demo Select Option
|
|
9
25
|
*/
|
|
10
26
|
label: string;
|
|
11
27
|
/**
|
|
12
28
|
* Hide the label visually
|
|
29
|
+
* @demo
|
|
13
30
|
*/
|
|
14
31
|
hiddenLabel?: boolean;
|
|
15
32
|
/**
|
|
16
33
|
* Placeholder
|
|
17
34
|
*
|
|
18
35
|
* Only used if the component is searchable.
|
|
36
|
+
* @demo
|
|
19
37
|
*/
|
|
20
38
|
placeholder?: string;
|
|
21
39
|
/**
|
|
22
40
|
* Disabled
|
|
41
|
+
* @demo
|
|
23
42
|
*/
|
|
24
43
|
disabled?: boolean;
|
|
44
|
+
/**
|
|
45
|
+
* Name for form registration
|
|
46
|
+
*/
|
|
25
47
|
name?: string;
|
|
26
48
|
/**
|
|
27
49
|
* Searchable
|
|
50
|
+
* @demo
|
|
28
51
|
*/
|
|
29
52
|
searchable?: boolean;
|
|
30
53
|
/**
|
|
31
54
|
* Show clear button
|
|
55
|
+
* @demo
|
|
32
56
|
*/
|
|
33
57
|
clearButton?: boolean;
|
|
34
58
|
/**
|
|
35
59
|
* Compact
|
|
60
|
+
* @demo
|
|
36
61
|
*/
|
|
37
62
|
compact?: boolean;
|
|
63
|
+
/**
|
|
64
|
+
* Error messages array (supports multiple validation errors)
|
|
65
|
+
*/
|
|
38
66
|
errors?: string[];
|
|
39
|
-
}
|
|
40
|
-
type __VLS_Props = Props;
|
|
41
|
-
type __VLS_ModelProps = {
|
|
67
|
+
} & {
|
|
42
68
|
modelValue?: string | number | null;
|
|
43
|
-
}
|
|
44
|
-
type __VLS_PublicProps = __VLS_Props & __VLS_ModelProps;
|
|
45
|
-
declare var __VLS_1: {
|
|
46
|
-
option: OptionType;
|
|
47
|
-
selected: boolean;
|
|
48
|
-
index: number;
|
|
49
|
-
};
|
|
50
|
-
type __VLS_Slots = {} & {
|
|
51
|
-
option?: (props: typeof __VLS_1) => any;
|
|
52
|
-
};
|
|
53
|
-
declare const __VLS_base: import("vue").DefineComponent<__VLS_PublicProps, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {
|
|
69
|
+
}, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {
|
|
54
70
|
change: (...args: any[]) => void;
|
|
55
71
|
"update:modelValue": (value: string | number | null | undefined) => void;
|
|
56
|
-
}, string, import("vue").PublicProps, Readonly<
|
|
57
|
-
|
|
72
|
+
}, string, import("vue").PublicProps, Readonly<{
|
|
73
|
+
/**
|
|
74
|
+
* List of options to choose from
|
|
75
|
+
*/
|
|
76
|
+
options: Array<string | {
|
|
77
|
+
label: string;
|
|
78
|
+
value: string | number;
|
|
79
|
+
}>;
|
|
80
|
+
/**
|
|
81
|
+
* Accessible label
|
|
82
|
+
* @demo Select Option
|
|
83
|
+
*/
|
|
84
|
+
label: string;
|
|
85
|
+
/**
|
|
86
|
+
* Hide the label visually
|
|
87
|
+
* @demo
|
|
88
|
+
*/
|
|
89
|
+
hiddenLabel?: boolean;
|
|
90
|
+
/**
|
|
91
|
+
* Placeholder
|
|
92
|
+
*
|
|
93
|
+
* Only used if the component is searchable.
|
|
94
|
+
* @demo
|
|
95
|
+
*/
|
|
96
|
+
placeholder?: string;
|
|
97
|
+
/**
|
|
98
|
+
* Disabled
|
|
99
|
+
* @demo
|
|
100
|
+
*/
|
|
101
|
+
disabled?: boolean;
|
|
102
|
+
/**
|
|
103
|
+
* Name for form registration
|
|
104
|
+
*/
|
|
105
|
+
name?: string;
|
|
106
|
+
/**
|
|
107
|
+
* Searchable
|
|
108
|
+
* @demo
|
|
109
|
+
*/
|
|
110
|
+
searchable?: boolean;
|
|
111
|
+
/**
|
|
112
|
+
* Show clear button
|
|
113
|
+
* @demo
|
|
114
|
+
*/
|
|
115
|
+
clearButton?: boolean;
|
|
116
|
+
/**
|
|
117
|
+
* Compact
|
|
118
|
+
* @demo
|
|
119
|
+
*/
|
|
120
|
+
compact?: boolean;
|
|
121
|
+
/**
|
|
122
|
+
* Error messages array (supports multiple validation errors)
|
|
123
|
+
*/
|
|
124
|
+
errors?: string[];
|
|
125
|
+
} & {
|
|
126
|
+
modelValue?: string | number | null;
|
|
127
|
+
}> & Readonly<{
|
|
58
128
|
"onUpdate:modelValue"?: ((value: string | number | null | undefined) => any) | undefined;
|
|
129
|
+
onChange?: ((...args: any[]) => any) | undefined;
|
|
59
130
|
}>, {
|
|
60
131
|
name: string;
|
|
61
132
|
errors: string[];
|
|
62
133
|
disabled: boolean;
|
|
63
134
|
searchable: boolean;
|
|
64
135
|
compact: boolean;
|
|
65
|
-
}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
136
|
+
}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>, {
|
|
137
|
+
option?: (props: {
|
|
138
|
+
option: {
|
|
139
|
+
label: string;
|
|
140
|
+
value: string | number;
|
|
141
|
+
};
|
|
142
|
+
selected: boolean;
|
|
143
|
+
index: number;
|
|
144
|
+
}) => any;
|
|
145
|
+
}>;
|
|
69
146
|
type __VLS_WithSlots<T, S> = T & {
|
|
70
147
|
new (): {
|
|
71
148
|
$slots: S;
|
|
@@ -1,40 +1,89 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
1
|
+
/**
|
|
2
|
+
* This component is just a radio button group with special styling.
|
|
3
|
+
*
|
|
4
|
+
* Use the `options` prop to provide a list of choices. Each option can
|
|
5
|
+
* be a string or an object with `label` and `value` properties.
|
|
6
|
+
*
|
|
7
|
+
* In addition to `v-model`, a `change` event is emitted when the
|
|
8
|
+
* option changes from user interaction.
|
|
9
|
+
*/
|
|
10
|
+
declare const _default: typeof __VLS_export;
|
|
11
|
+
export default _default;
|
|
12
|
+
declare const __VLS_export: import("vue").DefineComponent<{
|
|
13
|
+
/**
|
|
14
|
+
* List of options to select from
|
|
15
|
+
*/
|
|
16
|
+
options: Array<string | {
|
|
17
|
+
label: string;
|
|
18
|
+
value: string | number;
|
|
19
|
+
}>;
|
|
7
20
|
/**
|
|
8
21
|
* Accessible label
|
|
22
|
+
* @demo Select Option
|
|
9
23
|
*/
|
|
10
24
|
label: string;
|
|
11
25
|
/**
|
|
12
26
|
* Size
|
|
27
|
+
* @demo
|
|
13
28
|
*/
|
|
14
29
|
size?: "small" | "medium" | "large";
|
|
30
|
+
/**
|
|
31
|
+
* Name for form registration
|
|
32
|
+
*/
|
|
15
33
|
name?: string;
|
|
16
34
|
/**
|
|
17
35
|
* Disabled
|
|
36
|
+
* @demo
|
|
18
37
|
*/
|
|
19
38
|
disabled?: boolean;
|
|
39
|
+
/**
|
|
40
|
+
* Error messages array (supports multiple validation errors)
|
|
41
|
+
*/
|
|
20
42
|
errors?: string[];
|
|
21
|
-
}
|
|
22
|
-
type __VLS_Props = Props;
|
|
23
|
-
type __VLS_ModelProps = {
|
|
43
|
+
} & {
|
|
24
44
|
modelValue?: string | number;
|
|
25
|
-
}
|
|
26
|
-
type __VLS_PublicProps = __VLS_Props & __VLS_ModelProps;
|
|
27
|
-
declare const __VLS_export: import("vue").DefineComponent<__VLS_PublicProps, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {
|
|
45
|
+
}, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {
|
|
28
46
|
change: (...args: any[]) => void;
|
|
29
47
|
"update:modelValue": (value: string | number) => void;
|
|
30
|
-
}, string, import("vue").PublicProps, Readonly<
|
|
31
|
-
|
|
48
|
+
}, string, import("vue").PublicProps, Readonly<{
|
|
49
|
+
/**
|
|
50
|
+
* List of options to select from
|
|
51
|
+
*/
|
|
52
|
+
options: Array<string | {
|
|
53
|
+
label: string;
|
|
54
|
+
value: string | number;
|
|
55
|
+
}>;
|
|
56
|
+
/**
|
|
57
|
+
* Accessible label
|
|
58
|
+
* @demo Select Option
|
|
59
|
+
*/
|
|
60
|
+
label: string;
|
|
61
|
+
/**
|
|
62
|
+
* Size
|
|
63
|
+
* @demo
|
|
64
|
+
*/
|
|
65
|
+
size?: "small" | "medium" | "large";
|
|
66
|
+
/**
|
|
67
|
+
* Name for form registration
|
|
68
|
+
*/
|
|
69
|
+
name?: string;
|
|
70
|
+
/**
|
|
71
|
+
* Disabled
|
|
72
|
+
* @demo
|
|
73
|
+
*/
|
|
74
|
+
disabled?: boolean;
|
|
75
|
+
/**
|
|
76
|
+
* Error messages array (supports multiple validation errors)
|
|
77
|
+
*/
|
|
78
|
+
errors?: string[];
|
|
79
|
+
} & {
|
|
80
|
+
modelValue?: string | number;
|
|
81
|
+
}> & Readonly<{
|
|
32
82
|
"onUpdate:modelValue"?: ((value: string | number) => any) | undefined;
|
|
83
|
+
onChange?: ((...args: any[]) => any) | undefined;
|
|
33
84
|
}>, {
|
|
34
85
|
size: "small" | "medium" | "large";
|
|
35
86
|
name: string;
|
|
36
87
|
errors: string[];
|
|
37
88
|
disabled: boolean;
|
|
38
89
|
}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
|
|
39
|
-
declare const _default: typeof __VLS_export;
|
|
40
|
-
export default _default;
|
|
@@ -1,40 +1,91 @@
|
|
|
1
|
-
|
|
1
|
+
/**
|
|
2
|
+
* A simple sidebar that's fixed to the left side of the viewport.
|
|
3
|
+
*
|
|
4
|
+
* This includes the CSS for the `fixed` position and sizing, so the element
|
|
5
|
+
* should be fairly high in the DOM tree.
|
|
6
|
+
*
|
|
7
|
+
* If neither `top-offset` nor `top-offset-var` are defined, the sidebar will be
|
|
8
|
+
* offset by `var(--g-toolbar-height)`. If there is no toolbar, just pass
|
|
9
|
+
* `0` as the `top-offset`.
|
|
10
|
+
*
|
|
11
|
+
* The sidebar can be made collapsible by providing the `sidebar` injected
|
|
12
|
+
* object from `useSidebar`. See the [Hamburger Menu Documentation](#use-sidebar)
|
|
13
|
+
* for details.
|
|
14
|
+
*/
|
|
15
|
+
declare const _default: typeof __VLS_export;
|
|
16
|
+
export default _default;
|
|
17
|
+
declare const __VLS_export: __VLS_WithSlots<import("vue").DefineComponent<{
|
|
2
18
|
/**
|
|
3
19
|
* Custom background color
|
|
20
|
+
* @demo
|
|
4
21
|
*/
|
|
5
22
|
backgroundColor?: string;
|
|
6
23
|
/**
|
|
7
24
|
* Custom background image
|
|
25
|
+
* @demo none
|
|
8
26
|
*/
|
|
9
27
|
backgroundImage?: string;
|
|
10
28
|
/**
|
|
11
29
|
* Sidebar theme
|
|
30
|
+
* @demo
|
|
12
31
|
*/
|
|
13
32
|
theme?: "light" | "dark";
|
|
33
|
+
/**
|
|
34
|
+
* Offset from the top of the viewport
|
|
35
|
+
*/
|
|
14
36
|
topOffset?: string;
|
|
37
|
+
/**
|
|
38
|
+
* Top offset variable to use instead of topOffset
|
|
39
|
+
*/
|
|
15
40
|
topOffsetVar?: string;
|
|
16
41
|
/**
|
|
17
42
|
* Width
|
|
18
43
|
*
|
|
19
44
|
* Width of the sidebar
|
|
45
|
+
* @demo
|
|
20
46
|
*/
|
|
21
47
|
width?: string;
|
|
22
|
-
}
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
48
|
+
}, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<{
|
|
49
|
+
/**
|
|
50
|
+
* Custom background color
|
|
51
|
+
* @demo
|
|
52
|
+
*/
|
|
53
|
+
backgroundColor?: string;
|
|
54
|
+
/**
|
|
55
|
+
* Custom background image
|
|
56
|
+
* @demo none
|
|
57
|
+
*/
|
|
58
|
+
backgroundImage?: string;
|
|
59
|
+
/**
|
|
60
|
+
* Sidebar theme
|
|
61
|
+
* @demo
|
|
62
|
+
*/
|
|
63
|
+
theme?: "light" | "dark";
|
|
64
|
+
/**
|
|
65
|
+
* Offset from the top of the viewport
|
|
66
|
+
*/
|
|
67
|
+
topOffset?: string;
|
|
68
|
+
/**
|
|
69
|
+
* Top offset variable to use instead of topOffset
|
|
70
|
+
*/
|
|
71
|
+
topOffsetVar?: string;
|
|
72
|
+
/**
|
|
73
|
+
* Width
|
|
74
|
+
*
|
|
75
|
+
* Width of the sidebar
|
|
76
|
+
* @demo
|
|
77
|
+
*/
|
|
78
|
+
width?: string;
|
|
79
|
+
}> & Readonly<{}>, {
|
|
28
80
|
theme: "light" | "dark";
|
|
29
81
|
width: string;
|
|
30
82
|
backgroundColor: string;
|
|
31
83
|
backgroundImage: string;
|
|
32
84
|
topOffset: string;
|
|
33
85
|
topOffsetVar: string;
|
|
34
|
-
}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
export default _default;
|
|
86
|
+
}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>, {
|
|
87
|
+
default?: (props: {}) => any;
|
|
88
|
+
}>;
|
|
38
89
|
type __VLS_WithSlots<T, S> = T & {
|
|
39
90
|
new (): {
|
|
40
91
|
$slots: S;
|
|
@@ -1,33 +1,144 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
1
|
+
/**
|
|
2
|
+
* A sidebar menu component for use with `GSidebar`. Displays a title and
|
|
3
|
+
* a list of links.
|
|
4
|
+
*
|
|
5
|
+
* This component also supports showing active links for in-page navigation.
|
|
6
|
+
*
|
|
7
|
+
* **Props**:
|
|
8
|
+
*
|
|
9
|
+
* - `items` with a list of `MenuItem` objects. The objects should have:
|
|
10
|
+
* - `label` for the link text
|
|
11
|
+
* - `href` or `to` for the destination. If `to` is used, the links will
|
|
12
|
+
* be rendered as `router-link` for vue-router.
|
|
13
|
+
* - `spy` to enable tracking active links for in-page navigation
|
|
14
|
+
* - `offset` to adjust the active link tracking position
|
|
15
|
+
* - `theme` to set the menu theme
|
|
16
|
+
*
|
|
17
|
+
* For tracking the active link, the `spy` prop must be set to `true` and
|
|
18
|
+
* a `v-model` must be provided that has the ID of the target element (without #).
|
|
19
|
+
*
|
|
20
|
+
* The composable function `useActiveLinkContent` can be used to track active links.
|
|
21
|
+
* It takes the following parameters:
|
|
22
|
+
*
|
|
23
|
+
* - `Ref<HTMLElement>` Children of this element will be observed
|
|
24
|
+
* - `number` Offset from the top of the window to consider not visible
|
|
25
|
+
* - `Ref<string>` Ref to store the active element ID
|
|
26
|
+
*
|
|
27
|
+
* The direct children of the element must all have an ID to properly work with
|
|
28
|
+
* in-page navigation, and the matching menu item's `href` should be set to
|
|
29
|
+
* `#<id>`.
|
|
30
|
+
*
|
|
31
|
+
* Here's a minimal example of a page using `useActiveLinkContent`:
|
|
32
|
+
*
|
|
33
|
+
* ```vue
|
|
34
|
+
* <script setup lang="ts">
|
|
35
|
+
* import { computed, onMounted, ref, useTemplateRef } from "vue";
|
|
36
|
+
* import { useActiveLinkContent } from "@illinois-grad/grad-vue";
|
|
37
|
+
*
|
|
38
|
+
* const activeId = ref<string>("");
|
|
39
|
+
* const main = useTemplateRef("main");
|
|
40
|
+
* // onMounted is for Nuxt compatibility
|
|
41
|
+
* onMounted(() => {
|
|
42
|
+
* useActiveLinkContent(main, 70, activeId);
|
|
43
|
+
* });
|
|
44
|
+
* </script>
|
|
45
|
+
*
|
|
46
|
+
* <template>
|
|
47
|
+
* <GSidebar>
|
|
48
|
+
* <GSidebarMenu
|
|
49
|
+
* :items="[
|
|
50
|
+
* { label: 'Buttons', href: '#buttons' },
|
|
51
|
+
* { label: 'More Buttons', href: '#more-buttons' }
|
|
52
|
+
* ]"
|
|
53
|
+
* v-model="activeId"
|
|
54
|
+
* />
|
|
55
|
+
* </GSidebar>
|
|
56
|
+
* <main class="main" ref="main">
|
|
57
|
+
* <section id="buttons">
|
|
58
|
+
* <h2>Buttons</h2>
|
|
59
|
+
* <p>Some buttons</p>
|
|
60
|
+
* </section>
|
|
61
|
+
* <section id="more-buttons">
|
|
62
|
+
* <h2>More Buttons</h2>
|
|
63
|
+
* <p>Some more buttons</p>
|
|
64
|
+
* </section>
|
|
65
|
+
* </main>
|
|
66
|
+
* </template>
|
|
67
|
+
* ```
|
|
68
|
+
*/
|
|
69
|
+
declare const _default: typeof __VLS_export;
|
|
70
|
+
export default _default;
|
|
71
|
+
declare const __VLS_export: import("vue").DefineComponent<{
|
|
7
72
|
/**
|
|
8
73
|
* Title and accessible name
|
|
74
|
+
* @demo Sidebar Menu
|
|
9
75
|
*/
|
|
10
76
|
title?: string;
|
|
11
|
-
|
|
77
|
+
/**
|
|
78
|
+
* Items for the menu
|
|
79
|
+
*/
|
|
80
|
+
items: {
|
|
81
|
+
label: string;
|
|
82
|
+
href?: string;
|
|
83
|
+
to?: string;
|
|
84
|
+
}[];
|
|
85
|
+
/**
|
|
86
|
+
* Offset for tracking active position to account for toolbars
|
|
87
|
+
*/
|
|
12
88
|
offset?: number;
|
|
89
|
+
/**
|
|
90
|
+
* Track active position for in-page links
|
|
91
|
+
*/
|
|
13
92
|
spy?: boolean;
|
|
14
93
|
/**
|
|
15
94
|
* Sidebar theme
|
|
95
|
+
* @demo
|
|
16
96
|
*/
|
|
17
97
|
theme?: "light" | "dark";
|
|
18
98
|
/**
|
|
19
99
|
* Use compact layout
|
|
100
|
+
* @demo
|
|
20
101
|
*/
|
|
21
102
|
compact?: boolean;
|
|
22
|
-
}
|
|
23
|
-
type __VLS_Props = Props;
|
|
24
|
-
type __VLS_ModelProps = {
|
|
103
|
+
} & {
|
|
25
104
|
modelValue?: string | null;
|
|
26
|
-
}
|
|
27
|
-
type __VLS_PublicProps = __VLS_Props & __VLS_ModelProps;
|
|
28
|
-
declare const __VLS_export: import("vue").DefineComponent<__VLS_PublicProps, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {
|
|
105
|
+
}, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {
|
|
29
106
|
"update:modelValue": (value: string | null) => any;
|
|
30
|
-
}, string, import("vue").PublicProps, Readonly<
|
|
107
|
+
}, string, import("vue").PublicProps, Readonly<{
|
|
108
|
+
/**
|
|
109
|
+
* Title and accessible name
|
|
110
|
+
* @demo Sidebar Menu
|
|
111
|
+
*/
|
|
112
|
+
title?: string;
|
|
113
|
+
/**
|
|
114
|
+
* Items for the menu
|
|
115
|
+
*/
|
|
116
|
+
items: {
|
|
117
|
+
label: string;
|
|
118
|
+
href?: string;
|
|
119
|
+
to?: string;
|
|
120
|
+
}[];
|
|
121
|
+
/**
|
|
122
|
+
* Offset for tracking active position to account for toolbars
|
|
123
|
+
*/
|
|
124
|
+
offset?: number;
|
|
125
|
+
/**
|
|
126
|
+
* Track active position for in-page links
|
|
127
|
+
*/
|
|
128
|
+
spy?: boolean;
|
|
129
|
+
/**
|
|
130
|
+
* Sidebar theme
|
|
131
|
+
* @demo
|
|
132
|
+
*/
|
|
133
|
+
theme?: "light" | "dark";
|
|
134
|
+
/**
|
|
135
|
+
* Use compact layout
|
|
136
|
+
* @demo
|
|
137
|
+
*/
|
|
138
|
+
compact?: boolean;
|
|
139
|
+
} & {
|
|
140
|
+
modelValue?: string | null;
|
|
141
|
+
}> & Readonly<{
|
|
31
142
|
"onUpdate:modelValue"?: ((value: string | null) => any) | undefined;
|
|
32
143
|
}>, {
|
|
33
144
|
theme: "light" | "dark";
|
|
@@ -35,5 +146,3 @@ declare const __VLS_export: import("vue").DefineComponent<__VLS_PublicProps, {},
|
|
|
35
146
|
offset: number;
|
|
36
147
|
spy: boolean;
|
|
37
148
|
}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
|
|
38
|
-
declare const _default: typeof __VLS_export;
|
|
39
|
-
export default _default;
|