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.
Files changed (190) hide show
  1. package/index.ts +2 -0
  2. package/package.json +14 -3
  3. package/src/components/badge/api.ts +23 -14
  4. package/src/components/badge/badge.ts +2 -2
  5. package/src/components/badge/config.ts +10 -11
  6. package/src/components/badge/features.ts +15 -10
  7. package/src/components/badge/index.ts +27 -2
  8. package/src/components/badge/types.ts +28 -8
  9. package/src/components/bottom-app-bar/bottom-app-bar.ts +2 -44
  10. package/src/components/bottom-app-bar/config.ts +1 -45
  11. package/src/components/bottom-app-bar/index.ts +7 -1
  12. package/src/components/bottom-app-bar/types.ts +7 -1
  13. package/src/components/button/button.ts +0 -1
  14. package/src/components/button/config.ts +1 -2
  15. package/src/components/button/index.ts +10 -2
  16. package/src/components/button/types.ts +14 -2
  17. package/src/components/card/config.ts +17 -9
  18. package/src/components/card/content.ts +8 -10
  19. package/src/components/card/features.ts +4 -6
  20. package/src/components/card/index.ts +29 -2
  21. package/src/components/card/types.ts +6 -23
  22. package/src/components/checkbox/config.ts +3 -4
  23. package/src/components/checkbox/index.ts +1 -2
  24. package/src/components/checkbox/types.ts +12 -3
  25. package/src/components/chip/api.ts +170 -221
  26. package/src/components/chip/chip.ts +34 -302
  27. package/src/components/chip/config.ts +1 -2
  28. package/src/components/chip/index.ts +10 -2
  29. package/src/components/chip/types.ts +224 -35
  30. package/src/components/datepicker/api.ts +18 -25
  31. package/src/components/datepicker/config.ts +9 -12
  32. package/src/components/datepicker/datepicker.ts +7 -12
  33. package/src/components/datepicker/index.ts +10 -7
  34. package/src/components/datepicker/render.ts +16 -18
  35. package/src/components/datepicker/types.ts +164 -35
  36. package/src/components/datepicker/utils.ts +1 -2
  37. package/src/components/dialog/api.ts +7 -8
  38. package/src/components/dialog/config.ts +3 -4
  39. package/src/components/dialog/features.ts +56 -22
  40. package/src/components/dialog/index.ts +38 -8
  41. package/src/components/dialog/types.ts +33 -10
  42. package/src/components/divider/index.ts +5 -1
  43. package/src/components/extended-fab/config.ts +6 -2
  44. package/src/components/extended-fab/index.ts +7 -2
  45. package/src/components/extended-fab/types.ts +21 -4
  46. package/src/components/fab/config.ts +3 -4
  47. package/src/components/fab/fab.ts +1 -1
  48. package/src/components/fab/index.ts +7 -2
  49. package/src/components/fab/types.ts +21 -4
  50. package/src/components/list/config.ts +4 -5
  51. package/src/components/list/features.ts +6 -7
  52. package/src/components/list/index.ts +7 -9
  53. package/src/components/list/list-item.ts +12 -13
  54. package/src/components/list/types.ts +50 -5
  55. package/src/components/list/utils.ts +30 -3
  56. package/src/components/menu/features/items-manager.ts +9 -9
  57. package/src/components/menu/features/positioning.ts +7 -7
  58. package/src/components/menu/features/visibility.ts +7 -7
  59. package/src/components/menu/index.ts +7 -9
  60. package/src/components/menu/menu-item.ts +6 -6
  61. package/src/components/menu/menu.ts +22 -0
  62. package/src/components/menu/types.ts +29 -10
  63. package/src/components/menu/utils.ts +67 -0
  64. package/src/components/navigation/api.ts +131 -96
  65. package/src/components/navigation/config.ts +22 -10
  66. package/src/components/navigation/features/controller.ts +273 -0
  67. package/src/components/navigation/features/items.ts +160 -87
  68. package/src/components/navigation/index.ts +0 -6
  69. package/src/components/navigation/nav-item.ts +12 -24
  70. package/src/components/navigation/navigation.ts +21 -8
  71. package/src/components/navigation/system-types.ts +124 -0
  72. package/src/components/navigation/system.ts +776 -0
  73. package/src/components/navigation/types.ts +228 -203
  74. package/src/components/progress/api.ts +2 -3
  75. package/src/components/progress/config.ts +2 -3
  76. package/src/components/progress/index.ts +0 -1
  77. package/src/components/progress/progress.ts +1 -2
  78. package/src/components/progress/types.ts +186 -33
  79. package/src/components/radios/config.ts +1 -1
  80. package/src/components/radios/index.ts +0 -1
  81. package/src/components/radios/types.ts +0 -7
  82. package/src/components/search/config.ts +1 -2
  83. package/src/components/search/features/search.ts +14 -15
  84. package/src/components/search/features/states.ts +5 -1
  85. package/src/components/search/features/structure.ts +3 -4
  86. package/src/components/search/index.ts +0 -3
  87. package/src/components/search/types.ts +18 -6
  88. package/src/components/segmented-button/config.ts +20 -7
  89. package/src/components/segmented-button/segment.ts +6 -7
  90. package/src/components/segmented-button/segmented-button.ts +4 -5
  91. package/src/components/segmented-button/types.ts +37 -2
  92. package/src/components/slider/config.ts +20 -2
  93. package/src/components/slider/features/controller.ts +761 -0
  94. package/src/components/slider/features/handlers.ts +18 -15
  95. package/src/components/slider/features/index.ts +3 -2
  96. package/src/components/slider/features/range.ts +104 -0
  97. package/src/components/slider/slider.ts +34 -14
  98. package/src/components/slider/structure.ts +152 -0
  99. package/src/components/slider/types.ts +34 -8
  100. package/src/components/snackbar/config.ts +2 -3
  101. package/src/components/snackbar/constants.ts +0 -32
  102. package/src/components/snackbar/index.ts +0 -1
  103. package/src/components/snackbar/position.ts +9 -1
  104. package/src/components/snackbar/types.ts +122 -46
  105. package/src/components/switch/config.ts +2 -3
  106. package/src/components/switch/index.ts +0 -1
  107. package/src/components/switch/types.ts +3 -2
  108. package/src/components/tabs/config.ts +3 -4
  109. package/src/components/tabs/index.ts +0 -15
  110. package/src/components/tabs/tab-api.ts +12 -4
  111. package/src/components/tabs/tab.ts +18 -6
  112. package/src/components/tabs/types.ts +13 -3
  113. package/src/components/textfield/api.ts +53 -0
  114. package/src/components/textfield/config.ts +2 -3
  115. package/src/components/textfield/features.ts +322 -0
  116. package/src/components/textfield/index.ts +0 -1
  117. package/src/components/textfield/textfield.ts +8 -0
  118. package/src/components/textfield/types.ts +29 -6
  119. package/src/components/timepicker/api.ts +1 -1
  120. package/src/components/timepicker/clockdial.ts +2 -5
  121. package/src/components/timepicker/config.ts +102 -4
  122. package/src/components/timepicker/index.ts +1 -6
  123. package/src/components/timepicker/render.ts +1 -1
  124. package/src/components/timepicker/timepicker.ts +1 -1
  125. package/src/components/tooltip/api.ts +1 -1
  126. package/src/components/tooltip/config.ts +27 -6
  127. package/src/components/tooltip/index.ts +0 -1
  128. package/src/components/tooltip/types.ts +13 -3
  129. package/src/core/compose/features/textinput.ts +15 -2
  130. package/src/core/compose/features/textlabel.ts +0 -3
  131. package/src/core/composition/features/dom.ts +33 -0
  132. package/src/core/composition/features/icon.ts +131 -0
  133. package/src/core/composition/features/index.ts +11 -0
  134. package/src/core/composition/features/label.ts +156 -0
  135. package/src/core/composition/features/structure.ts +22 -0
  136. package/src/core/composition/index.ts +26 -0
  137. package/src/core/index.ts +1 -1
  138. package/src/core/structure.ts +288 -0
  139. package/src/index.ts +1 -0
  140. package/src/styles/components/_navigation-mobile.scss +244 -0
  141. package/src/styles/components/_navigation-system.scss +151 -0
  142. package/src/{components/tabs/_styles.scss → styles/components/_tabs.scss} +1 -1
  143. package/src/{components/textfield/_styles.scss → styles/components/_textfield.scss} +314 -72
  144. package/src/styles/main.scss +98 -49
  145. package/src/components/badge/constants.ts +0 -40
  146. package/src/components/button/constants.ts +0 -11
  147. package/src/components/card/constants.ts +0 -84
  148. package/src/components/datepicker/constants.ts +0 -98
  149. package/src/components/dialog/constants.ts +0 -32
  150. package/src/components/extended-fab/constants.ts +0 -36
  151. package/src/components/fab/constants.ts +0 -41
  152. package/src/components/menu/constants.ts +0 -154
  153. package/src/components/navigation/constants.ts +0 -200
  154. package/src/components/progress/constants.ts +0 -29
  155. package/src/components/search/constants.ts +0 -21
  156. package/src/components/segmented-button/constants.ts +0 -42
  157. package/src/components/slider/features/slider.ts +0 -318
  158. package/src/components/slider/features/structure.ts +0 -181
  159. package/src/components/slider/features/ui.ts +0 -388
  160. package/src/components/switch/constants.ts +0 -80
  161. package/src/components/tabs/constants.ts +0 -89
  162. package/src/components/textfield/constants.ts +0 -100
  163. package/src/components/timepicker/constants.ts +0 -138
  164. /package/src/{components/badge/_styles.scss → styles/components/_badge.scss} +0 -0
  165. /package/src/{components/bottom-app-bar/_styles.scss → styles/components/_bottom-app-bar.scss} +0 -0
  166. /package/src/{components/button/_styles.scss → styles/components/_button.scss} +0 -0
  167. /package/src/{components/card/_styles.scss → styles/components/_card.scss} +0 -0
  168. /package/src/{components/carousel/_styles.scss → styles/components/_carousel.scss} +0 -0
  169. /package/src/{components/checkbox/_styles.scss → styles/components/_checkbox.scss} +0 -0
  170. /package/src/{components/chip/_styles.scss → styles/components/_chip.scss} +0 -0
  171. /package/src/{components/datepicker/_styles.scss → styles/components/_datepicker.scss} +0 -0
  172. /package/src/{components/dialog/_styles.scss → styles/components/_dialog.scss} +0 -0
  173. /package/src/{components/divider/_styles.scss → styles/components/_divider.scss} +0 -0
  174. /package/src/{components/extended-fab/_styles.scss → styles/components/_extended-fab.scss} +0 -0
  175. /package/src/{components/fab/_styles.scss → styles/components/_fab.scss} +0 -0
  176. /package/src/{components/list/_styles.scss → styles/components/_list.scss} +0 -0
  177. /package/src/{components/menu/_styles.scss → styles/components/_menu.scss} +0 -0
  178. /package/src/{components/navigation/_styles.scss → styles/components/_navigation.scss} +0 -0
  179. /package/src/{components/progress/_styles.scss → styles/components/_progress.scss} +0 -0
  180. /package/src/{components/radios/_styles.scss → styles/components/_radios.scss} +0 -0
  181. /package/src/{components/search/_styles.scss → styles/components/_search.scss} +0 -0
  182. /package/src/{components/segmented-button/_styles.scss → styles/components/_segmented-button.scss} +0 -0
  183. /package/src/{components/sheet/_styles.scss → styles/components/_sheet.scss} +0 -0
  184. /package/src/{components/slider/_styles.scss → styles/components/_slider.scss} +0 -0
  185. /package/src/{components/snackbar/_styles.scss → styles/components/_snackbar.scss} +0 -0
  186. /package/src/{components/switch/_styles.scss → styles/components/_switch.scss} +0 -0
  187. /package/src/{components/timepicker/_styles.scss → styles/components/_timepicker.scss} +0 -0
  188. /package/src/{components/tooltip/_styles.scss → styles/components/_tooltip.scss} +0 -0
  189. /package/src/{components/top-app-bar/_styles.scss → styles/components/_top-app-bar.scss} +0 -0
  190. /package/src/styles/utilities/{_color.scss → _colors.scss} +0 -0
@@ -1,11 +1,5 @@
1
1
  // src/components/navigation/index.ts
2
2
  export { default } from './navigation'
3
- export {
4
- NAV_VARIANTS,
5
- NAV_POSITIONS,
6
- NAV_BEHAVIORS,
7
- NAV_STATES
8
- } from './constants'
9
3
  export {
10
4
  NavigationConfig,
11
5
  NavigationComponent,
@@ -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}-nav-expand-icon`;
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}-nav-nested-container`;
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}-nav-item-container`;
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}-nav-item`;
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}-nav-item-icon`;
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}-nav-item-label`;
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}-nav-item-badge`;
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}-nav-item--active`);
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}-nav-item-container`);
175
+ const container = item.closest(`.${prefix}-${NavClass.ITEM_CONTAINER}`);
188
176
  if (!container) return [];
189
177
 
190
- const nestedContainer = container.querySelector(`.${prefix}-nav-nested-container`);
178
+ const nestedContainer = container.querySelector(`.${prefix}-${NavClass.NESTED_CONTAINER}`);
191
179
  if (!nestedContainer) return [];
192
180
 
193
- const items = Array.from(nestedContainer.querySelectorAll(`.${prefix}-nav-item`)) as HTMLElement[];
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 { NavigationConfig, NavigationComponent } from './types';
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 === NAV_VARIANTS.BAR) {
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 === NAV_VARIANTS.DRAWER_MODAL ||
55
- variant === 'modal' ||
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
+ }