@genesislcap/foundation-ui 14.336.0 → 14.336.2-alpha-7eb86ca.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.
@@ -324,6 +324,17 @@ export declare const baseComponents: {
324
324
  foundationTreeItem: (overrideDefinition?: import("@microsoft/fast-foundation").OverrideFoundationElementDefinition<import("@microsoft/fast-foundation").TreeItemOptions>) => import("@microsoft/fast-foundation").FoundationElementRegistry<import("@microsoft/fast-foundation").TreeItemOptions, import("@microsoft/fast-element").Constructable<import("@microsoft/fast-foundation").FoundationElement>>;
325
325
  foundationTreeView: (overrideDefinition?: import("@microsoft/fast-foundation").OverrideFoundationElementDefinition<import("@microsoft/fast-foundation").FoundationElementDefinition>) => import("@microsoft/fast-foundation").FoundationElementRegistry<import("@microsoft/fast-foundation").FoundationElementDefinition, typeof import("./tree-view").TreeView>;
326
326
  foundationUrlInput: (overrideDefinition?: import("@microsoft/fast-foundation").OverrideFoundationElementDefinition<import("@microsoft/fast-foundation").FoundationElementDefinition>) => import("@microsoft/fast-foundation").FoundationElementRegistry<import("@microsoft/fast-foundation").FoundationElementDefinition, typeof import("./url-input").UrlInput>;
327
+ foundationSectionNavigator: (overrideDefinition?: import("@microsoft/fast-foundation").OverrideFoundationElementDefinition<{
328
+ baseName: string;
329
+ template: import("@microsoft/fast-element").ViewTemplate<import("./section-navigator").SectionNavigator, any>;
330
+ styles: import("@microsoft/fast-element").ElementStyles;
331
+ shadowOptions: ShadowRootInit;
332
+ }>) => import("@microsoft/fast-foundation").FoundationElementRegistry<{
333
+ baseName: string;
334
+ template: import("@microsoft/fast-element").ViewTemplate<import("./section-navigator").SectionNavigator, any>;
335
+ styles: import("@microsoft/fast-element").ElementStyles;
336
+ shadowOptions: ShadowRootInit;
337
+ }, typeof import("./section-navigator").SectionNavigator>;
327
338
  register(container?: Container, ...rest: any[]): void;
328
339
  };
329
340
  //# sourceMappingURL=base-components.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"base-components.d.ts","sourceRoot":"","sources":["../../src/base-components.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,4BAA4B,CAAC;AAmF5D,eAAO,MAAM,cAAc;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;yBAmFJ,SAAS,WAAW,GAAG,EAAE;CAe/C,CAAC"}
1
+ {"version":3,"file":"base-components.d.ts","sourceRoot":"","sources":["../../src/base-components.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,4BAA4B,CAAC;AAoF5D,eAAO,MAAM,cAAc;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;yBAoFJ,SAAS,WAAW,GAAG,EAAE;CAe/C,CAAC"}
@@ -69,6 +69,7 @@ export * from './scheduler';
69
69
  export * from './scheduler-cron-builder';
70
70
  export * from './scheduler-timezone';
71
71
  export * from './search-bar';
72
+ export * from './section-navigator';
72
73
  export * from './segmented-control';
73
74
  export * from './segmented-item';
74
75
  export * from './select';
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ export * from './section-navigator';
2
+ export * from './section-navigator.styles';
3
+ export * from './section-navigator.template';
4
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/section-navigator/index.ts"],"names":[],"mappings":"AAAA,cAAc,qBAAqB,CAAC;AACpC,cAAc,4BAA4B,CAAC;AAC3C,cAAc,8BAA8B,CAAC"}
@@ -0,0 +1,120 @@
1
+ import { FoundationElement } from '@microsoft/fast-foundation';
2
+ export type SectionItemStateName = 'active' | 'inactive' | 'pending' | 'disabled' | 'error' | 'completed';
3
+ export type SectionItemStateIcon = {
4
+ name: string;
5
+ variant: 'solid' | 'regular' | 'light' | 'thin';
6
+ };
7
+ export type SectionItemState = {
8
+ name: SectionItemStateName;
9
+ tooltip?: string;
10
+ };
11
+ export interface SectionItem {
12
+ name: string;
13
+ label: string;
14
+ states: SectionItemStateName[];
15
+ }
16
+ export interface SetStateEventDetail {
17
+ sectionName: string;
18
+ stateName: SectionItemStateName;
19
+ }
20
+ export interface SetStatesEventDetail {
21
+ sectionName: string;
22
+ stateNames: SectionItemStateName[];
23
+ }
24
+ export interface ClearStateEventDetail {
25
+ sectionName: string;
26
+ stateName: SectionItemStateName;
27
+ }
28
+ export interface ClearAllStatesEventDetail {
29
+ sectionName?: string;
30
+ }
31
+ /**
32
+ * Section Navigator Component
33
+ *
34
+ * A component that provides navigation between different sections with support for state management.
35
+ * Each section can have multiple states that are displayed as icons next to the section label.
36
+ *
37
+ * @tagname %%prefix%%-section-navigator
38
+ *
39
+ * @attr sections - Array of section items to display
40
+ * @attr scroll-behavior - Scroll behavior: 'view' or 'top' (default: 'top')
41
+ * @attr state-tooltips - Custom tooltips for state icons
42
+ * @attr state-icons - Custom icons for state types
43
+ *
44
+ * @listens set-state - Adds a single state to a section
45
+ * Detail: { sectionName: string, stateName: SectionItemStateName }
46
+ *
47
+ * @listens set-states - Adds multiple states to a section
48
+ * Detail: { sectionName: string, stateNames: SectionItemStateName[] }
49
+ *
50
+ * @listens clear-state - Removes a specific state from a section
51
+ * Detail: { sectionName: string, stateName: SectionItemStateName }
52
+ *
53
+ * @listens clear-all-states - Clears all states from a section or all sections
54
+ * Detail: { sectionName?: string } - If sectionName not provided, clears all sections
55
+ *
56
+ * @slot {sectionName} - Content for each section (slot name matches section name)
57
+ *
58
+ * @example
59
+ * ```html
60
+ * <foundation-section-navigator .sections=${sections}>
61
+ * <div slot="section1">Section 1 content</div>
62
+ * <div slot="section2">Section 2 content</div>
63
+ * </foundation-section-navigator>
64
+ * ```
65
+ */
66
+ export declare class SectionNavigator extends FoundationElement {
67
+ sections: SectionItem[];
68
+ scrollBehavior: 'view' | 'top';
69
+ stateTooltips: Record<SectionItemStateName, string>;
70
+ stateIcons: Record<SectionItemStateName, SectionItemStateIcon>;
71
+ private handleSetStateRef?;
72
+ private handleSetStatesRef?;
73
+ private handleClearStateRef?;
74
+ private handleClearAllStatesRef?;
75
+ sectionsChanged(): void;
76
+ scrollBehaviorChanged(): void;
77
+ sectionItems: SectionItem[];
78
+ activeSection: string;
79
+ sectionNavigatorContainer: HTMLElement;
80
+ sectionContent: HTMLElement;
81
+ spacerElement: HTMLElement;
82
+ connectedCallback(): void;
83
+ private setSectionItems;
84
+ private setActiveSection;
85
+ handleSectionClick(sectionName: string): void;
86
+ private updateSpacer;
87
+ private scrollToSection;
88
+ private setupStateEventListeners;
89
+ private updateSectionStates;
90
+ private addState;
91
+ private addStates;
92
+ private clearState;
93
+ private clearAllStates;
94
+ private clearAllStatesInAllSections;
95
+ getStateTooltip(stateName: SectionItemStateName): string;
96
+ getSectionStateClass(section: SectionItem): string;
97
+ getStateIcon(stateName: SectionItemStateName): SectionItemStateIcon;
98
+ disconnectedCallback(): void;
99
+ }
100
+ export declare const foundationSectionNavigatorShadowOptions: ShadowRootInit;
101
+ export declare const defaultSectionNavigatorConfig: {};
102
+ /**
103
+ * The Foundation SectionNavigator
104
+ *
105
+ * @public
106
+ * @remarks
107
+ * HTML Element: \<foundation-section-navigator\>
108
+ */
109
+ export declare const foundationSectionNavigator: (overrideDefinition?: import("@microsoft/fast-foundation").OverrideFoundationElementDefinition<{
110
+ baseName: string;
111
+ template: import("@microsoft/fast-element").ViewTemplate<SectionNavigator, any>;
112
+ styles: import("@microsoft/fast-element").ElementStyles;
113
+ shadowOptions: ShadowRootInit;
114
+ }>) => import("@microsoft/fast-foundation").FoundationElementRegistry<{
115
+ baseName: string;
116
+ template: import("@microsoft/fast-element").ViewTemplate<SectionNavigator, any>;
117
+ styles: import("@microsoft/fast-element").ElementStyles;
118
+ shadowOptions: ShadowRootInit;
119
+ }, typeof SectionNavigator>;
120
+ //# sourceMappingURL=section-navigator.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"section-navigator.d.ts","sourceRoot":"","sources":["../../../src/section-navigator/section-navigator.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,iBAAiB,EAAE,MAAM,4BAA4B,CAAC;AAI/D,MAAM,MAAM,oBAAoB,GAC5B,QAAQ,GACR,UAAU,GACV,SAAS,GACT,UAAU,GACV,OAAO,GACP,WAAW,CAAC;AAEhB,MAAM,MAAM,oBAAoB,GAAG;IACjC,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,OAAO,GAAG,SAAS,GAAG,OAAO,GAAG,MAAM,CAAC;CACjD,CAAC;AAEF,MAAM,MAAM,gBAAgB,GAAG;IAC7B,IAAI,EAAE,oBAAoB,CAAC;IAC3B,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB,CAAC;AAEF,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,oBAAoB,EAAE,CAAC;CAChC;AAGD,MAAM,WAAW,mBAAmB;IAClC,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,oBAAoB,CAAC;CACjC;AAED,MAAM,WAAW,oBAAoB;IACnC,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,oBAAoB,EAAE,CAAC;CACpC;AAED,MAAM,WAAW,qBAAqB;IACpC,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,oBAAoB,CAAC;CACjC;AAED,MAAM,WAAW,yBAAyB;IACxC,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAsCD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAkCG;AACH,qBAAa,gBAAiB,SAAQ,iBAAiB;IAErD,QAAQ,EAAE,WAAW,EAAE,CAAM;IAG7B,cAAc,EAAE,MAAM,GAAG,KAAK,CAAS;IAGvC,aAAa,EAAE,MAAM,CAAC,oBAAoB,EAAE,MAAM,CAAC,CAAmC;IAGtF,UAAU,EAAE,MAAM,CAAC,oBAAoB,EAAE,oBAAoB,CAAC,CAAgC;IAG9F,OAAO,CAAC,iBAAiB,CAAC,CAAoD;IAC9E,OAAO,CAAC,kBAAkB,CAAC,CAAqD;IAChF,OAAO,CAAC,mBAAmB,CAAC,CAAsD;IAClF,OAAO,CAAC,uBAAuB,CAAC,CAA0D;IAE1F,eAAe;IAKf,qBAAqB;IAKrB,YAAY,EAAE,WAAW,EAAE,CAAM;IAGjC,aAAa,EAAE,MAAM,CAAM;IAE3B,yBAAyB,EAAG,WAAW,CAAC;IACxC,cAAc,EAAG,WAAW,CAAC;IAC7B,aAAa,EAAG,WAAW,CAAC;IAE5B,iBAAiB;IAQjB,OAAO,CAAC,eAAe;IAIvB,OAAO,CAAC,gBAAgB;IAMjB,kBAAkB,CAAC,WAAW,EAAE,MAAM;IAK7C,OAAO,CAAC,YAAY;IA4BpB,OAAO,CAAC,eAAe;IAgBvB,OAAO,CAAC,wBAAwB;IAiChC,OAAO,CAAC,mBAAmB;IAiB3B,OAAO,CAAC,QAAQ;IAQhB,OAAO,CAAC,SAAS;IAgBjB,OAAO,CAAC,UAAU;IAYlB,OAAO,CAAC,cAAc;IAItB,OAAO,CAAC,2BAA2B;IAQ5B,eAAe,CAAC,SAAS,EAAE,oBAAoB,GAAG,MAAM;IAIxD,oBAAoB,CAAC,OAAO,EAAE,WAAW,GAAG,MAAM;IAalD,YAAY,CAAC,SAAS,EAAE,oBAAoB,GAAG,oBAAoB;IAI1E,oBAAoB;CAgBrB;AAED,eAAO,MAAM,uCAAuC,EAAE,cAErD,CAAC;AAEF,eAAO,MAAM,6BAA6B,IAAK,CAAC;AAEhD;;;;;;GAMG;AACH,eAAO,MAAM,0BAA0B;;;;;;;;;;2BAMrC,CAAC"}
@@ -0,0 +1,3 @@
1
+ import { ElementStyles } from '@microsoft/fast-element';
2
+ export declare const foundationSectionNavigatorStyles: ElementStyles;
3
+ //# sourceMappingURL=section-navigator.styles.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"section-navigator.styles.d.ts","sourceRoot":"","sources":["../../../src/section-navigator/section-navigator.styles.ts"],"names":[],"mappings":"AAAA,OAAO,EAAO,aAAa,EAAE,MAAM,yBAAyB,CAAC;AAE7D,eAAO,MAAM,gCAAgC,EAAE,aAiL9C,CAAC"}
@@ -0,0 +1,4 @@
1
+ import type { ViewTemplate } from '@microsoft/fast-element';
2
+ import type { SectionNavigator } from './section-navigator';
3
+ export declare const foundationSectionNavigatorTemplate: ViewTemplate<SectionNavigator>;
4
+ //# sourceMappingURL=section-navigator.template.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"section-navigator.template.d.ts","sourceRoot":"","sources":["../../../src/section-navigator/section-navigator.template.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AAE5D,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AAE5D,eAAO,MAAM,kCAAkC,EAAE,YAAY,CAAC,gBAAgB,CAiD7E,CAAC"}
@@ -57,6 +57,7 @@ import { foundationScheduler } from './scheduler';
57
57
  import { foundationSchedulerCronBuilder } from './scheduler-cron-builder';
58
58
  import { foundationSchedulerTimezone } from './scheduler-timezone';
59
59
  import { foundationSearchBar, foundationSearchBarCombobox } from './search-bar';
60
+ import { foundationSectionNavigator } from './section-navigator';
60
61
  import { foundationSegmentedControl } from './segmented-control';
61
62
  import { foundationSegmentedItem } from './segmented-item';
62
63
  import { foundationSelect } from './select';
@@ -163,6 +164,7 @@ export const baseComponents = {
163
164
  foundationTreeItem,
164
165
  foundationTreeView,
165
166
  foundationUrlInput,
167
+ foundationSectionNavigator,
166
168
  register(container, ...rest) {
167
169
  if (!container) {
168
170
  // preserve backward compatibility with code that loops through
package/dist/esm/index.js CHANGED
@@ -69,6 +69,7 @@ export * from './scheduler';
69
69
  export * from './scheduler-cron-builder';
70
70
  export * from './scheduler-timezone';
71
71
  export * from './search-bar';
72
+ export * from './section-navigator';
72
73
  export * from './segmented-control';
73
74
  export * from './segmented-item';
74
75
  export * from './select';
@@ -0,0 +1,3 @@
1
+ export * from './section-navigator';
2
+ export * from './section-navigator.styles';
3
+ export * from './section-navigator.template';
@@ -0,0 +1,289 @@
1
+ import { __decorate } from "tslib";
2
+ import { attr, observable } from '@microsoft/fast-element';
3
+ import { FoundationElement } from '@microsoft/fast-foundation';
4
+ import { foundationSectionNavigatorStyles as styles } from './section-navigator.styles';
5
+ import { foundationSectionNavigatorTemplate as template } from './section-navigator.template';
6
+ const DEFAULT_SECTION_STATES_TOOLTIPS = {
7
+ active: 'Active',
8
+ inactive: 'Inactive',
9
+ pending: 'Pending',
10
+ disabled: 'Disabled',
11
+ error: 'Error',
12
+ completed: 'Completed',
13
+ };
14
+ const DEFAULT_SECTION_STATES_ICONS = {
15
+ active: {
16
+ name: 'circle-dot',
17
+ variant: 'solid',
18
+ },
19
+ inactive: {
20
+ name: 'times-circle',
21
+ variant: 'regular',
22
+ },
23
+ pending: {
24
+ name: 'clock',
25
+ variant: 'solid',
26
+ },
27
+ disabled: {
28
+ name: 'ban',
29
+ variant: 'solid',
30
+ },
31
+ error: {
32
+ name: 'times',
33
+ variant: 'solid',
34
+ },
35
+ completed: {
36
+ name: 'check',
37
+ variant: 'solid',
38
+ },
39
+ };
40
+ /**
41
+ * Section Navigator Component
42
+ *
43
+ * A component that provides navigation between different sections with support for state management.
44
+ * Each section can have multiple states that are displayed as icons next to the section label.
45
+ *
46
+ * @tagname %%prefix%%-section-navigator
47
+ *
48
+ * @attr sections - Array of section items to display
49
+ * @attr scroll-behavior - Scroll behavior: 'view' or 'top' (default: 'top')
50
+ * @attr state-tooltips - Custom tooltips for state icons
51
+ * @attr state-icons - Custom icons for state types
52
+ *
53
+ * @listens set-state - Adds a single state to a section
54
+ * Detail: { sectionName: string, stateName: SectionItemStateName }
55
+ *
56
+ * @listens set-states - Adds multiple states to a section
57
+ * Detail: { sectionName: string, stateNames: SectionItemStateName[] }
58
+ *
59
+ * @listens clear-state - Removes a specific state from a section
60
+ * Detail: { sectionName: string, stateName: SectionItemStateName }
61
+ *
62
+ * @listens clear-all-states - Clears all states from a section or all sections
63
+ * Detail: { sectionName?: string } - If sectionName not provided, clears all sections
64
+ *
65
+ * @slot {sectionName} - Content for each section (slot name matches section name)
66
+ *
67
+ * @example
68
+ * ```html
69
+ * <foundation-section-navigator .sections=${sections}>
70
+ * <div slot="section1">Section 1 content</div>
71
+ * <div slot="section2">Section 2 content</div>
72
+ * </foundation-section-navigator>
73
+ * ```
74
+ */
75
+ export class SectionNavigator extends FoundationElement {
76
+ constructor() {
77
+ super(...arguments);
78
+ this.sections = [];
79
+ this.scrollBehavior = 'top';
80
+ this.stateTooltips = DEFAULT_SECTION_STATES_TOOLTIPS;
81
+ this.stateIcons = DEFAULT_SECTION_STATES_ICONS;
82
+ this.sectionItems = [];
83
+ this.activeSection = '';
84
+ }
85
+ sectionsChanged() {
86
+ this.setSectionItems();
87
+ this.setActiveSection();
88
+ }
89
+ scrollBehaviorChanged() {
90
+ this.updateSpacer();
91
+ }
92
+ connectedCallback() {
93
+ super.connectedCallback();
94
+ this.setSectionItems();
95
+ this.setActiveSection();
96
+ this.updateSpacer();
97
+ this.setupStateEventListeners();
98
+ }
99
+ setSectionItems() {
100
+ this.sectionItems = this.sections || [];
101
+ }
102
+ setActiveSection() {
103
+ if (this.sectionItems.length > 0 && !this.activeSection) {
104
+ this.activeSection = this.sectionItems[0].name;
105
+ }
106
+ }
107
+ handleSectionClick(sectionName) {
108
+ this.activeSection = sectionName;
109
+ this.scrollToSection(sectionName);
110
+ }
111
+ updateSpacer() {
112
+ if (!this.sectionContent)
113
+ return;
114
+ const existingSpacer = this.sectionContent.querySelector('.scroll-spacer');
115
+ if (existingSpacer) {
116
+ existingSpacer.remove();
117
+ }
118
+ if (this.scrollBehavior === 'top') {
119
+ const containerHeight = this.sectionContent.clientHeight;
120
+ const lastSection = this.sectionContent.querySelector('.content-section:last-child');
121
+ if (lastSection) {
122
+ const lastSectionHeight = lastSection.offsetHeight;
123
+ const spacerPadding = 20;
124
+ const spacerHeight = Math.max(0, containerHeight - lastSectionHeight - spacerPadding);
125
+ const spacer = document.createElement('div');
126
+ spacer.className = 'scroll-spacer';
127
+ spacer.style.height = `${spacerHeight}px`;
128
+ spacer.style.pointerEvents = 'none';
129
+ this.sectionContent.appendChild(spacer);
130
+ }
131
+ }
132
+ }
133
+ scrollToSection(sectionName) {
134
+ if (!this.sectionContent)
135
+ return;
136
+ const targetElement = this.sectionContent.querySelector(`[data-section="${sectionName}"]`);
137
+ if (targetElement) {
138
+ // Always use internal scrolling to prevent parent container from scrolling
139
+ const scrollTop = targetElement.offsetTop - this.sectionContent.offsetTop;
140
+ this.sectionContent.scrollTo({
141
+ top: scrollTop,
142
+ behavior: 'smooth',
143
+ });
144
+ }
145
+ }
146
+ setupStateEventListeners() {
147
+ // Create event handler references for proper cleanup
148
+ this.handleSetStateRef = (event) => {
149
+ const { sectionName, stateName } = event.detail;
150
+ this.addState(sectionName, stateName);
151
+ };
152
+ this.handleSetStatesRef = (event) => {
153
+ const { sectionName, stateNames } = event.detail;
154
+ this.addStates(sectionName, stateNames);
155
+ };
156
+ this.handleClearStateRef = (event) => {
157
+ const { sectionName, stateName } = event.detail;
158
+ this.clearState(sectionName, stateName);
159
+ };
160
+ this.handleClearAllStatesRef = (event) => {
161
+ const { sectionName } = event.detail;
162
+ if (sectionName) {
163
+ this.clearAllStates(sectionName);
164
+ }
165
+ else {
166
+ this.clearAllStatesInAllSections();
167
+ }
168
+ };
169
+ // Add event listeners with the stored references
170
+ this.addEventListener('set-state', this.handleSetStateRef);
171
+ this.addEventListener('set-states', this.handleSetStatesRef);
172
+ this.addEventListener('clear-state', this.handleClearStateRef);
173
+ this.addEventListener('clear-all-states', this.handleClearAllStatesRef);
174
+ }
175
+ updateSectionStates(sectionName, newStates) {
176
+ const sectionIndex = this.sectionItems.findIndex((item) => item.name === sectionName);
177
+ if (sectionIndex !== -1) {
178
+ // Create new section object with updated states
179
+ const updatedSection = Object.assign(Object.assign({}, this.sectionItems[sectionIndex]), { states: newStates });
180
+ // Replace the section in the array
181
+ this.sectionItems = [
182
+ ...this.sectionItems.slice(0, sectionIndex),
183
+ updatedSection,
184
+ ...this.sectionItems.slice(sectionIndex + 1),
185
+ ];
186
+ }
187
+ }
188
+ addState(sectionName, stateName) {
189
+ const sectionIndex = this.sectionItems.findIndex((item) => item.name === sectionName);
190
+ if (sectionIndex !== -1 && !this.sectionItems[sectionIndex].states.includes(stateName)) {
191
+ const newStates = [...this.sectionItems[sectionIndex].states, stateName];
192
+ this.updateSectionStates(sectionName, newStates);
193
+ }
194
+ }
195
+ addStates(sectionName, stateNames) {
196
+ const sectionIndex = this.sectionItems.findIndex((item) => item.name === sectionName);
197
+ if (sectionIndex !== -1) {
198
+ const currentStates = this.sectionItems[sectionIndex].states;
199
+ const newStates = [...currentStates];
200
+ stateNames.forEach((stateName) => {
201
+ if (!newStates.includes(stateName)) {
202
+ newStates.push(stateName);
203
+ }
204
+ });
205
+ this.updateSectionStates(sectionName, newStates);
206
+ }
207
+ }
208
+ clearState(sectionName, stateName) {
209
+ const sectionIndex = this.sectionItems.findIndex((item) => item.name === sectionName);
210
+ if (sectionIndex !== -1) {
211
+ const currentStates = this.sectionItems[sectionIndex].states;
212
+ const stateIndex = currentStates.indexOf(stateName);
213
+ if (stateIndex > -1) {
214
+ const newStates = currentStates.filter((_, index) => index !== stateIndex);
215
+ this.updateSectionStates(sectionName, newStates);
216
+ }
217
+ }
218
+ }
219
+ clearAllStates(sectionName) {
220
+ this.updateSectionStates(sectionName, []);
221
+ }
222
+ clearAllStatesInAllSections() {
223
+ // Create new sectionItems array with all sections having empty states
224
+ this.sectionItems = this.sectionItems.map((section) => (Object.assign(Object.assign({}, section), { states: [] })));
225
+ }
226
+ getStateTooltip(stateName) {
227
+ return this.stateTooltips[stateName];
228
+ }
229
+ getSectionStateClass(section) {
230
+ if (section.states.length === 0) {
231
+ return 'state-none';
232
+ }
233
+ if (section.states.length > 1) {
234
+ return 'state-multiple';
235
+ }
236
+ const state = section.states[0];
237
+ return `state-${state}`;
238
+ }
239
+ getStateIcon(stateName) {
240
+ return this.stateIcons[stateName] || DEFAULT_SECTION_STATES_ICONS[stateName];
241
+ }
242
+ disconnectedCallback() {
243
+ super.disconnectedCallback();
244
+ // Clean up event listeners using stored references
245
+ if (this.handleSetStateRef) {
246
+ this.removeEventListener('set-state', this.handleSetStateRef);
247
+ }
248
+ if (this.handleSetStatesRef) {
249
+ this.removeEventListener('set-states', this.handleSetStatesRef);
250
+ }
251
+ if (this.handleClearStateRef) {
252
+ this.removeEventListener('clear-state', this.handleClearStateRef);
253
+ }
254
+ if (this.handleClearAllStatesRef) {
255
+ this.removeEventListener('clear-all-states', this.handleClearAllStatesRef);
256
+ }
257
+ }
258
+ }
259
+ __decorate([
260
+ observable
261
+ ], SectionNavigator.prototype, "sections", void 0);
262
+ __decorate([
263
+ attr({ attribute: 'scroll-behavior' })
264
+ ], SectionNavigator.prototype, "scrollBehavior", void 0);
265
+ __decorate([
266
+ attr({ attribute: 'state-tooltips' })
267
+ ], SectionNavigator.prototype, "stateTooltips", void 0);
268
+ __decorate([
269
+ attr({ attribute: 'state-icons' })
270
+ ], SectionNavigator.prototype, "stateIcons", void 0);
271
+ __decorate([
272
+ observable
273
+ ], SectionNavigator.prototype, "sectionItems", void 0);
274
+ __decorate([
275
+ observable
276
+ ], SectionNavigator.prototype, "activeSection", void 0);
277
+ export const foundationSectionNavigatorShadowOptions = {
278
+ mode: 'open',
279
+ };
280
+ export const defaultSectionNavigatorConfig = {};
281
+ /**
282
+ * The Foundation SectionNavigator
283
+ *
284
+ * @public
285
+ * @remarks
286
+ * HTML Element: \<foundation-section-navigator\>
287
+ */
288
+ export const foundationSectionNavigator = SectionNavigator.compose(Object.assign({ baseName: 'foundation-section-navigator', template,
289
+ styles, shadowOptions: foundationSectionNavigatorShadowOptions }, defaultSectionNavigatorConfig));