mtrl 0.2.7 → 0.2.9
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/index.ts +2 -0
- package/package.json +14 -3
- package/src/components/badge/api.ts +23 -14
- package/src/components/badge/badge.ts +2 -2
- package/src/components/badge/config.ts +10 -11
- package/src/components/badge/features.ts +15 -10
- package/src/components/badge/index.ts +27 -2
- package/src/components/badge/types.ts +28 -8
- package/src/components/bottom-app-bar/bottom-app-bar.ts +2 -44
- package/src/components/bottom-app-bar/config.ts +1 -45
- package/src/components/bottom-app-bar/index.ts +7 -1
- package/src/components/bottom-app-bar/types.ts +7 -1
- package/src/components/button/button.ts +0 -1
- package/src/components/button/config.ts +1 -2
- package/src/components/button/index.ts +10 -2
- package/src/components/button/types.ts +14 -2
- package/src/components/card/config.ts +17 -9
- package/src/components/card/content.ts +8 -10
- package/src/components/card/features.ts +4 -6
- package/src/components/card/index.ts +29 -2
- package/src/components/card/types.ts +6 -23
- package/src/components/checkbox/config.ts +3 -4
- package/src/components/checkbox/index.ts +1 -2
- package/src/components/checkbox/types.ts +12 -3
- package/src/components/chip/api.ts +170 -221
- package/src/components/chip/chip.ts +34 -302
- package/src/components/chip/config.ts +1 -2
- package/src/components/chip/index.ts +10 -2
- package/src/components/chip/types.ts +224 -35
- package/src/components/datepicker/api.ts +18 -25
- package/src/components/datepicker/config.ts +9 -12
- package/src/components/datepicker/datepicker.ts +7 -12
- package/src/components/datepicker/index.ts +10 -7
- package/src/components/datepicker/render.ts +16 -18
- package/src/components/datepicker/types.ts +164 -35
- package/src/components/datepicker/utils.ts +1 -2
- package/src/components/dialog/api.ts +7 -8
- package/src/components/dialog/config.ts +3 -4
- package/src/components/dialog/features.ts +56 -22
- package/src/components/dialog/index.ts +38 -8
- package/src/components/dialog/types.ts +33 -10
- package/src/components/divider/index.ts +5 -1
- package/src/components/extended-fab/config.ts +6 -2
- package/src/components/extended-fab/index.ts +7 -2
- package/src/components/extended-fab/types.ts +21 -4
- package/src/components/fab/config.ts +3 -4
- package/src/components/fab/fab.ts +1 -1
- package/src/components/fab/index.ts +7 -2
- package/src/components/fab/types.ts +21 -4
- package/src/components/list/config.ts +4 -5
- package/src/components/list/features.ts +6 -7
- package/src/components/list/index.ts +7 -9
- package/src/components/list/list-item.ts +12 -13
- package/src/components/list/types.ts +50 -5
- package/src/components/list/utils.ts +30 -3
- package/src/components/menu/features/items-manager.ts +9 -9
- package/src/components/menu/features/positioning.ts +7 -7
- package/src/components/menu/features/visibility.ts +7 -7
- package/src/components/menu/index.ts +7 -9
- package/src/components/menu/menu-item.ts +6 -6
- package/src/components/menu/menu.ts +22 -0
- package/src/components/menu/types.ts +29 -10
- package/src/components/menu/utils.ts +67 -0
- package/src/components/navigation/api.ts +131 -96
- package/src/components/navigation/config.ts +22 -10
- package/src/components/navigation/features/controller.ts +273 -0
- package/src/components/navigation/features/items.ts +160 -87
- package/src/components/navigation/index.ts +0 -6
- package/src/components/navigation/nav-item.ts +12 -24
- package/src/components/navigation/navigation.ts +21 -8
- package/src/components/navigation/system-types.ts +124 -0
- package/src/components/navigation/system.ts +776 -0
- package/src/components/navigation/types.ts +228 -203
- package/src/components/progress/api.ts +2 -3
- package/src/components/progress/config.ts +2 -3
- package/src/components/progress/index.ts +0 -1
- package/src/components/progress/progress.ts +1 -2
- package/src/components/progress/types.ts +186 -33
- package/src/components/radios/config.ts +1 -1
- package/src/components/radios/index.ts +0 -1
- package/src/components/radios/types.ts +0 -7
- package/src/components/search/config.ts +1 -2
- package/src/components/search/features/search.ts +14 -15
- package/src/components/search/features/states.ts +5 -1
- package/src/components/search/features/structure.ts +3 -4
- package/src/components/search/index.ts +0 -3
- package/src/components/search/types.ts +18 -6
- package/src/components/segmented-button/config.ts +20 -7
- package/src/components/segmented-button/segment.ts +6 -7
- package/src/components/segmented-button/segmented-button.ts +4 -5
- package/src/components/segmented-button/types.ts +37 -2
- package/src/components/slider/config.ts +20 -2
- package/src/components/slider/features/controller.ts +761 -0
- package/src/components/slider/features/handlers.ts +18 -15
- package/src/components/slider/features/index.ts +3 -2
- package/src/components/slider/features/range.ts +104 -0
- package/src/components/slider/slider.ts +34 -14
- package/src/components/slider/structure.ts +152 -0
- package/src/components/slider/types.ts +34 -8
- package/src/components/snackbar/config.ts +2 -3
- package/src/components/snackbar/constants.ts +0 -32
- package/src/components/snackbar/index.ts +0 -1
- package/src/components/snackbar/position.ts +9 -1
- package/src/components/snackbar/types.ts +122 -46
- package/src/components/switch/config.ts +2 -3
- package/src/components/switch/index.ts +0 -1
- package/src/components/switch/types.ts +3 -2
- package/src/components/tabs/config.ts +3 -4
- package/src/components/tabs/index.ts +0 -15
- package/src/components/tabs/tab-api.ts +12 -4
- package/src/components/tabs/tab.ts +18 -6
- package/src/components/tabs/types.ts +13 -3
- package/src/components/textfield/api.ts +53 -0
- package/src/components/textfield/config.ts +2 -3
- package/src/components/textfield/features.ts +322 -0
- package/src/components/textfield/index.ts +0 -1
- package/src/components/textfield/textfield.ts +8 -0
- package/src/components/textfield/types.ts +29 -6
- package/src/components/timepicker/api.ts +1 -1
- package/src/components/timepicker/clockdial.ts +2 -5
- package/src/components/timepicker/config.ts +102 -4
- package/src/components/timepicker/index.ts +1 -6
- package/src/components/timepicker/render.ts +1 -1
- package/src/components/timepicker/timepicker.ts +1 -1
- package/src/components/tooltip/api.ts +1 -1
- package/src/components/tooltip/config.ts +27 -6
- package/src/components/tooltip/index.ts +0 -1
- package/src/components/tooltip/types.ts +13 -3
- package/src/core/compose/features/textinput.ts +15 -2
- package/src/core/compose/features/textlabel.ts +0 -3
- package/src/core/composition/features/dom.ts +33 -0
- package/src/core/composition/features/icon.ts +131 -0
- package/src/core/composition/features/index.ts +11 -0
- package/src/core/composition/features/label.ts +156 -0
- package/src/core/composition/features/structure.ts +22 -0
- package/src/core/composition/index.ts +26 -0
- package/src/core/index.ts +1 -1
- package/src/core/structure.ts +288 -0
- package/src/index.ts +1 -0
- package/src/styles/components/_navigation-mobile.scss +244 -0
- package/src/styles/components/_navigation-system.scss +151 -0
- package/src/{components/tabs/_styles.scss → styles/components/_tabs.scss} +1 -1
- package/src/{components/textfield/_styles.scss → styles/components/_textfield.scss} +314 -72
- package/src/styles/main.scss +98 -49
- package/src/components/badge/constants.ts +0 -40
- package/src/components/button/constants.ts +0 -11
- package/src/components/card/constants.ts +0 -84
- package/src/components/datepicker/constants.ts +0 -98
- package/src/components/dialog/constants.ts +0 -32
- package/src/components/extended-fab/constants.ts +0 -36
- package/src/components/fab/constants.ts +0 -41
- package/src/components/menu/constants.ts +0 -154
- package/src/components/navigation/constants.ts +0 -200
- package/src/components/progress/constants.ts +0 -29
- package/src/components/search/constants.ts +0 -21
- package/src/components/segmented-button/constants.ts +0 -42
- package/src/components/slider/features/slider.ts +0 -318
- package/src/components/slider/features/structure.ts +0 -181
- package/src/components/slider/features/ui.ts +0 -388
- package/src/components/switch/constants.ts +0 -80
- package/src/components/tabs/constants.ts +0 -89
- package/src/components/textfield/constants.ts +0 -100
- package/src/components/timepicker/constants.ts +0 -138
- /package/src/{components/badge/_styles.scss → styles/components/_badge.scss} +0 -0
- /package/src/{components/bottom-app-bar/_styles.scss → styles/components/_bottom-app-bar.scss} +0 -0
- /package/src/{components/button/_styles.scss → styles/components/_button.scss} +0 -0
- /package/src/{components/card/_styles.scss → styles/components/_card.scss} +0 -0
- /package/src/{components/carousel/_styles.scss → styles/components/_carousel.scss} +0 -0
- /package/src/{components/checkbox/_styles.scss → styles/components/_checkbox.scss} +0 -0
- /package/src/{components/chip/_styles.scss → styles/components/_chip.scss} +0 -0
- /package/src/{components/datepicker/_styles.scss → styles/components/_datepicker.scss} +0 -0
- /package/src/{components/dialog/_styles.scss → styles/components/_dialog.scss} +0 -0
- /package/src/{components/divider/_styles.scss → styles/components/_divider.scss} +0 -0
- /package/src/{components/extended-fab/_styles.scss → styles/components/_extended-fab.scss} +0 -0
- /package/src/{components/fab/_styles.scss → styles/components/_fab.scss} +0 -0
- /package/src/{components/list/_styles.scss → styles/components/_list.scss} +0 -0
- /package/src/{components/menu/_styles.scss → styles/components/_menu.scss} +0 -0
- /package/src/{components/navigation/_styles.scss → styles/components/_navigation.scss} +0 -0
- /package/src/{components/progress/_styles.scss → styles/components/_progress.scss} +0 -0
- /package/src/{components/radios/_styles.scss → styles/components/_radios.scss} +0 -0
- /package/src/{components/search/_styles.scss → styles/components/_search.scss} +0 -0
- /package/src/{components/segmented-button/_styles.scss → styles/components/_segmented-button.scss} +0 -0
- /package/src/{components/sheet/_styles.scss → styles/components/_sheet.scss} +0 -0
- /package/src/{components/slider/_styles.scss → styles/components/_slider.scss} +0 -0
- /package/src/{components/snackbar/_styles.scss → styles/components/_snackbar.scss} +0 -0
- /package/src/{components/switch/_styles.scss → styles/components/_switch.scss} +0 -0
- /package/src/{components/timepicker/_styles.scss → styles/components/_timepicker.scss} +0 -0
- /package/src/{components/tooltip/_styles.scss → styles/components/_tooltip.scss} +0 -0
- /package/src/{components/top-app-bar/_styles.scss → styles/components/_top-app-bar.scss} +0 -0
- /package/src/styles/utilities/{_color.scss → _colors.scss} +0 -0
|
@@ -1,17 +1,5 @@
|
|
|
1
1
|
// src/components/navigation/nav-item.ts
|
|
2
|
-
|
|
3
|
-
// Simple interface for NavItemConfig if not imported
|
|
4
|
-
interface NavItemConfig {
|
|
5
|
-
id: string;
|
|
6
|
-
icon?: string;
|
|
7
|
-
label?: string;
|
|
8
|
-
badge?: string;
|
|
9
|
-
disabled?: boolean;
|
|
10
|
-
active?: boolean;
|
|
11
|
-
expanded?: boolean;
|
|
12
|
-
items?: NavItemConfig[];
|
|
13
|
-
[key: string]: any;
|
|
14
|
-
}
|
|
2
|
+
import { NavItemConfig, NavClass } from './types';
|
|
15
3
|
|
|
16
4
|
/**
|
|
17
5
|
* Creates an expand/collapse icon element
|
|
@@ -20,7 +8,7 @@ interface NavItemConfig {
|
|
|
20
8
|
*/
|
|
21
9
|
export const createExpandIcon = (prefix: string): HTMLElement => {
|
|
22
10
|
const icon = document.createElement('span');
|
|
23
|
-
icon.className = `${prefix}
|
|
11
|
+
icon.className = `${prefix}-${NavClass.EXPAND_ICON}`;
|
|
24
12
|
icon.innerHTML = `
|
|
25
13
|
<svg width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor">
|
|
26
14
|
<polyline points="9 18 15 12 9 6"></polyline>
|
|
@@ -42,7 +30,7 @@ export const createNestedContainer = (
|
|
|
42
30
|
createItem: (config: NavItemConfig, container: HTMLElement, prefix: string) => HTMLElement
|
|
43
31
|
): HTMLElement => {
|
|
44
32
|
const container = document.createElement('div');
|
|
45
|
-
container.className = `${prefix}
|
|
33
|
+
container.className = `${prefix}-${NavClass.NESTED_CONTAINER}`;
|
|
46
34
|
|
|
47
35
|
// Use appropriate role for nested menu
|
|
48
36
|
container.setAttribute('role', 'menu');
|
|
@@ -68,7 +56,7 @@ export const createNavItem = (
|
|
|
68
56
|
prefix: string
|
|
69
57
|
): HTMLElement => {
|
|
70
58
|
const itemContainer = document.createElement('div');
|
|
71
|
-
itemContainer.className = `${prefix}
|
|
59
|
+
itemContainer.className = `${prefix}-${NavClass.ITEM_CONTAINER}`;
|
|
72
60
|
|
|
73
61
|
// Determine if parent container uses tabs or menu role pattern
|
|
74
62
|
const isMenuContext = container.getAttribute('role') === 'menu';
|
|
@@ -77,7 +65,7 @@ export const createNavItem = (
|
|
|
77
65
|
|
|
78
66
|
// Create the item element
|
|
79
67
|
const itemElement = document.createElement('button');
|
|
80
|
-
itemElement.className = `${prefix}
|
|
68
|
+
itemElement.className = `${prefix}-${NavClass.ITEM}`;
|
|
81
69
|
itemElement.type = 'button'; // Ensure it's a button type for proper behavior
|
|
82
70
|
|
|
83
71
|
// Set appropriate role based on context and items
|
|
@@ -114,7 +102,7 @@ export const createNavItem = (
|
|
|
114
102
|
// Add icon if provided
|
|
115
103
|
if (config.icon) {
|
|
116
104
|
const icon = document.createElement('span');
|
|
117
|
-
icon.className = `${prefix}
|
|
105
|
+
icon.className = `${prefix}-${NavClass.ICON}`;
|
|
118
106
|
icon.innerHTML = config.icon;
|
|
119
107
|
itemElement.appendChild(icon);
|
|
120
108
|
}
|
|
@@ -122,7 +110,7 @@ export const createNavItem = (
|
|
|
122
110
|
// Add label if provided
|
|
123
111
|
if (config.label) {
|
|
124
112
|
const label = document.createElement('span');
|
|
125
|
-
label.className = `${prefix}
|
|
113
|
+
label.className = `${prefix}-${NavClass.LABEL}`;
|
|
126
114
|
label.textContent = config.label;
|
|
127
115
|
itemElement.appendChild(label);
|
|
128
116
|
itemElement.setAttribute('aria-label', config.label);
|
|
@@ -131,7 +119,7 @@ export const createNavItem = (
|
|
|
131
119
|
// Add badge if provided
|
|
132
120
|
if (config.badge) {
|
|
133
121
|
const badge = document.createElement('span');
|
|
134
|
-
badge.className = `${prefix}
|
|
122
|
+
badge.className = `${prefix}-${NavClass.BADGE}`;
|
|
135
123
|
badge.textContent = config.badge;
|
|
136
124
|
// Use appropriate aria labeling
|
|
137
125
|
badge.setAttribute('aria-label', `${config.badge} notifications`);
|
|
@@ -140,7 +128,7 @@ export const createNavItem = (
|
|
|
140
128
|
|
|
141
129
|
// Mark active state with appropriate semantics
|
|
142
130
|
if (config.active && !config.items?.length) {
|
|
143
|
-
itemElement.classList.add(`${prefix}
|
|
131
|
+
itemElement.classList.add(`${prefix}-${NavClass.ITEM}--active`);
|
|
144
132
|
|
|
145
133
|
// Use aria-current for standard navigation
|
|
146
134
|
if (!isTabContext) {
|
|
@@ -184,13 +172,13 @@ export const createNavItem = (
|
|
|
184
172
|
* @returns {Array<HTMLElement>} Array of all nested items
|
|
185
173
|
*/
|
|
186
174
|
export const getAllNestedItems = (item: HTMLElement, prefix: string): HTMLElement[] => {
|
|
187
|
-
const container = item.closest(`.${prefix}
|
|
175
|
+
const container = item.closest(`.${prefix}-${NavClass.ITEM_CONTAINER}`);
|
|
188
176
|
if (!container) return [];
|
|
189
177
|
|
|
190
|
-
const nestedContainer = container.querySelector(`.${prefix}
|
|
178
|
+
const nestedContainer = container.querySelector(`.${prefix}-${NavClass.NESTED_CONTAINER}`);
|
|
191
179
|
if (!nestedContainer) return [];
|
|
192
180
|
|
|
193
|
-
const items = Array.from(nestedContainer.querySelectorAll(`.${prefix}
|
|
181
|
+
const items = Array.from(nestedContainer.querySelectorAll(`.${prefix}-${NavClass.ITEM}`)) as HTMLElement[];
|
|
194
182
|
return items.reduce((acc: HTMLElement[], nestedItem: HTMLElement) => {
|
|
195
183
|
return [...acc, nestedItem, ...getAllNestedItems(nestedItem, prefix)];
|
|
196
184
|
}, []);
|
|
@@ -10,13 +10,13 @@ import {
|
|
|
10
10
|
} from '../../core/compose/features';
|
|
11
11
|
import { withAPI } from './api';
|
|
12
12
|
import { withNavItems } from './features/items';
|
|
13
|
-
import {
|
|
13
|
+
import { withController } from './features/controller';
|
|
14
|
+
import { NavigationConfig, NavigationComponent, NavVariant } from './types';
|
|
14
15
|
import {
|
|
15
16
|
createBaseConfig,
|
|
16
17
|
getElementConfig,
|
|
17
18
|
getApiConfig
|
|
18
19
|
} from './config';
|
|
19
|
-
import { NAV_VARIANTS } from './constants';
|
|
20
20
|
|
|
21
21
|
/**
|
|
22
22
|
* Sets up proper ARIA roles based on navigation variant
|
|
@@ -32,7 +32,7 @@ const setupAccessibility = (nav: NavigationComponent, config: NavigationConfig):
|
|
|
32
32
|
element.setAttribute('aria-label', config.ariaLabel || 'Main Navigation');
|
|
33
33
|
|
|
34
34
|
// For bar navigation (bottom or top nav)
|
|
35
|
-
if (variant ===
|
|
35
|
+
if (variant === 'bar') {
|
|
36
36
|
// If bar navigation is acting as tabs
|
|
37
37
|
const hasNestedItems = config.items?.some(item => item.items?.length) || false;
|
|
38
38
|
|
|
@@ -51,9 +51,8 @@ const setupAccessibility = (nav: NavigationComponent, config: NavigationConfig):
|
|
|
51
51
|
}
|
|
52
52
|
|
|
53
53
|
// Set hidden state for modal drawers if needed
|
|
54
|
-
if ((variant ===
|
|
55
|
-
variant === '
|
|
56
|
-
(variant === NAV_VARIANTS.DRAWER && config.behavior === 'dismissible')) &&
|
|
54
|
+
if ((variant === 'modal' ||
|
|
55
|
+
(variant === 'drawer' && config.behavior === 'dismissible')) &&
|
|
57
56
|
!config.expanded) {
|
|
58
57
|
element.classList.add(`${prefix}-nav--hidden`);
|
|
59
58
|
}
|
|
@@ -70,15 +69,21 @@ const createNavigation = (config: NavigationConfig = {}): NavigationComponent =>
|
|
|
70
69
|
try {
|
|
71
70
|
const navigation = pipe(
|
|
72
71
|
createBase,
|
|
73
|
-
// First add events system
|
|
72
|
+
// First add events system - MUST be before other features that use events
|
|
74
73
|
withEvents(),
|
|
75
74
|
// Then add the element and other features
|
|
76
75
|
withElement(getElementConfig(baseConfig)),
|
|
76
|
+
// Add core features
|
|
77
77
|
withVariant(baseConfig),
|
|
78
78
|
withPosition(baseConfig),
|
|
79
|
+
// Add navigation-specific features
|
|
79
80
|
withNavItems(baseConfig),
|
|
81
|
+
// Add controller for event delegation AFTER items are set up
|
|
82
|
+
withController(baseConfig),
|
|
83
|
+
// Add standard component features
|
|
80
84
|
withDisabled(baseConfig),
|
|
81
85
|
withLifecycle(),
|
|
86
|
+
// Finally add the API - this must be last to include all features
|
|
82
87
|
comp => withAPI(getApiConfig(comp))(comp)
|
|
83
88
|
)(baseConfig);
|
|
84
89
|
|
|
@@ -91,10 +96,18 @@ const createNavigation = (config: NavigationConfig = {}): NavigationComponent =>
|
|
|
91
96
|
if (baseConfig.disabled) {
|
|
92
97
|
nav.disable();
|
|
93
98
|
}
|
|
99
|
+
|
|
100
|
+
// Set component variant property for component identification
|
|
101
|
+
nav.variant = baseConfig.variant;
|
|
102
|
+
|
|
103
|
+
// Add explicit component identifier for debugging
|
|
104
|
+
nav.element.dataset.componentType = 'navigation';
|
|
105
|
+
if (baseConfig.variant) {
|
|
106
|
+
nav.element.dataset.variant = baseConfig.variant;
|
|
107
|
+
}
|
|
94
108
|
|
|
95
109
|
return nav;
|
|
96
110
|
} catch (error) {
|
|
97
|
-
console.error('Navigation creation error:', error instanceof Error ? error.message : String(error));
|
|
98
111
|
throw new Error(`Failed to create navigation: ${error instanceof Error ? error.message : String(error)}`);
|
|
99
112
|
}
|
|
100
113
|
};
|
|
@@ -0,0 +1,124 @@
|
|
|
1
|
+
// src/components/navigation/system-types.ts
|
|
2
|
+
|
|
3
|
+
import { NavigationComponent, NavItemConfig } from './types';
|
|
4
|
+
|
|
5
|
+
/**
|
|
6
|
+
* Structure for navigation section with its items
|
|
7
|
+
*/
|
|
8
|
+
export interface NavigationSection {
|
|
9
|
+
/** Section label */
|
|
10
|
+
label: string;
|
|
11
|
+
|
|
12
|
+
/** Section icon HTML */
|
|
13
|
+
icon?: string;
|
|
14
|
+
|
|
15
|
+
/** Navigation items within this section */
|
|
16
|
+
items: NavItemConfig[];
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
/**
|
|
20
|
+
* Configuration for the navigation system
|
|
21
|
+
*/
|
|
22
|
+
export interface NavigationSystemConfig {
|
|
23
|
+
/** Item structure by section ID */
|
|
24
|
+
items: Record<string, NavigationSection>;
|
|
25
|
+
|
|
26
|
+
/** Initial active section */
|
|
27
|
+
activeSection?: string;
|
|
28
|
+
|
|
29
|
+
/** Initial active subsection */
|
|
30
|
+
activeSubsection?: string;
|
|
31
|
+
|
|
32
|
+
/** Whether to animate drawer opening/closing */
|
|
33
|
+
animateDrawer?: boolean;
|
|
34
|
+
|
|
35
|
+
/** Whether to show labels on rail */
|
|
36
|
+
showLabelsOnRail?: boolean;
|
|
37
|
+
|
|
38
|
+
/** Whether to hide drawer when an item is clicked */
|
|
39
|
+
hideDrawerOnClick?: boolean;
|
|
40
|
+
|
|
41
|
+
/** Delay before showing drawer on hover (ms) */
|
|
42
|
+
hoverDelay?: number;
|
|
43
|
+
|
|
44
|
+
/** Delay before hiding drawer on mouse leave (ms) */
|
|
45
|
+
closeDelay?: number;
|
|
46
|
+
|
|
47
|
+
/** Configuration options passed to rail component */
|
|
48
|
+
railOptions?: Record<string, any>;
|
|
49
|
+
|
|
50
|
+
/** Configuration options passed to drawer component */
|
|
51
|
+
drawerOptions?: Record<string, any>;
|
|
52
|
+
|
|
53
|
+
/** Enable debug logging */
|
|
54
|
+
debug?: boolean;
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
/**
|
|
58
|
+
* Event data for section change events
|
|
59
|
+
*/
|
|
60
|
+
export interface SectionChangeEvent {
|
|
61
|
+
/** ID of the selected section */
|
|
62
|
+
section: string;
|
|
63
|
+
|
|
64
|
+
/** Section data */
|
|
65
|
+
sectionData: NavigationSection;
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
/**
|
|
69
|
+
* Event data for item selection events
|
|
70
|
+
*/
|
|
71
|
+
export interface ItemSelectEvent {
|
|
72
|
+
/** ID of the parent section */
|
|
73
|
+
section: string;
|
|
74
|
+
|
|
75
|
+
/** ID of the selected subsection */
|
|
76
|
+
subsection: string;
|
|
77
|
+
|
|
78
|
+
/** Selected item data */
|
|
79
|
+
item: any;
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
/**
|
|
83
|
+
* Navigation system API
|
|
84
|
+
*/
|
|
85
|
+
export interface NavigationSystem {
|
|
86
|
+
/** Initialize the navigation system */
|
|
87
|
+
initialize(): NavigationSystem;
|
|
88
|
+
|
|
89
|
+
/** Clean up resources */
|
|
90
|
+
cleanup(): void;
|
|
91
|
+
|
|
92
|
+
/** Navigate to a specific section and subsection */
|
|
93
|
+
navigateTo(section: string, subsection?: string): void;
|
|
94
|
+
|
|
95
|
+
/** Get the rail component */
|
|
96
|
+
getRail(): NavigationComponent | null;
|
|
97
|
+
|
|
98
|
+
/** Get the drawer component */
|
|
99
|
+
getDrawer(): NavigationComponent | null;
|
|
100
|
+
|
|
101
|
+
/** Get the active section */
|
|
102
|
+
getActiveSection(): string | null;
|
|
103
|
+
|
|
104
|
+
/** Get the active subsection */
|
|
105
|
+
getActiveSubsection(): string | null;
|
|
106
|
+
|
|
107
|
+
/** Show the drawer */
|
|
108
|
+
showDrawer(): void;
|
|
109
|
+
|
|
110
|
+
/** Hide the drawer */
|
|
111
|
+
hideDrawer(): void;
|
|
112
|
+
|
|
113
|
+
/** Check if drawer is visible */
|
|
114
|
+
isDrawerVisible(): boolean;
|
|
115
|
+
|
|
116
|
+
/** Configure the navigation system */
|
|
117
|
+
configure(config: Partial<NavigationSystemConfig>): NavigationSystem;
|
|
118
|
+
|
|
119
|
+
/** Event handler for section changes */
|
|
120
|
+
onSectionChange: ((section: string, subsection?: string) => void) | null;
|
|
121
|
+
|
|
122
|
+
/** Event handler for item selection */
|
|
123
|
+
onItemSelect: ((event: ItemSelectEvent) => void) | null;
|
|
124
|
+
}
|