@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.
- package/dist/custom-elements.json +847 -214
- package/dist/dts/base-components.d.ts +11 -0
- package/dist/dts/base-components.d.ts.map +1 -1
- package/dist/dts/index.d.ts +1 -0
- package/dist/dts/index.d.ts.map +1 -1
- package/dist/dts/section-navigator/index.d.ts +4 -0
- package/dist/dts/section-navigator/index.d.ts.map +1 -0
- package/dist/dts/section-navigator/section-navigator.d.ts +120 -0
- package/dist/dts/section-navigator/section-navigator.d.ts.map +1 -0
- package/dist/dts/section-navigator/section-navigator.styles.d.ts +3 -0
- package/dist/dts/section-navigator/section-navigator.styles.d.ts.map +1 -0
- package/dist/dts/section-navigator/section-navigator.template.d.ts +4 -0
- package/dist/dts/section-navigator/section-navigator.template.d.ts.map +1 -0
- package/dist/esm/base-components.js +2 -0
- package/dist/esm/index.js +1 -0
- package/dist/esm/section-navigator/index.js +3 -0
- package/dist/esm/section-navigator/section-navigator.js +289 -0
- package/dist/esm/section-navigator/section-navigator.styles.js +179 -0
- package/dist/esm/section-navigator/section-navigator.template.js +37 -0
- package/package.json +18 -18
|
@@ -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;
|
|
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"}
|
package/dist/dts/index.d.ts
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';
|
package/dist/dts/index.d.ts.map
CHANGED
|
@@ -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":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AACnD,OAAO,EAAE,uBAAuB,EAAE,mBAAmB,EAAE,MAAM,yBAAyB,CAAC;AAEvF,OAAO,EAAE,cAAc,EAAE,uBAAuB,EAAE,mBAAmB,EAAE,CAAC;AAExE,eAAO,MAAM,8BAA8B,yDAAuD,CAAC;AAEnG,cAAc,WAAW,CAAC;AAC1B,cAAc,WAAW,CAAC;AAC1B,cAAc,aAAa,CAAC;AAC5B,cAAc,kBAAkB,CAAC;AACjC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,UAAU,CAAC;AACzB,cAAc,mBAAmB,CAAC;AAClC,cAAc,UAAU,CAAC;AACzB,cAAc,SAAS,CAAC;AACxB,cAAc,UAAU,CAAC;AACzB,cAAc,cAAc,CAAC;AAC7B,cAAc,mBAAmB,CAAC;AAClC,cAAc,UAAU,CAAC;AACzB,cAAc,YAAY,CAAC;AAC3B,cAAc,QAAQ,CAAC;AACvB,cAAc,2BAA2B,CAAC;AAC1C,cAAc,YAAY,CAAC;AAC3B,cAAc,YAAY,CAAC;AAC3B,cAAc,wBAAwB,CAAC;AACvC,cAAc,WAAW,CAAC;AAC1B,cAAc,aAAa,CAAC;AAC5B,cAAc,kBAAkB,CAAC;AACjC,cAAc,wBAAwB,CAAC;AACvC,cAAc,iBAAiB,CAAC;AAChC,cAAc,eAAe,CAAC;AAC9B,cAAc,0BAA0B,CAAC;AACzC,cAAc,UAAU,CAAC;AACzB,cAAc,cAAc,CAAC;AAC7B,cAAc,WAAW,CAAC;AAC1B,cAAc,iBAAiB,CAAC;AAChC,cAAc,yBAAyB,CAAC;AACxC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,kBAAkB,CAAC;AACjC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,sBAAsB,CAAC;AACrC,cAAc,eAAe,CAAC;AAC9B,cAAc,eAAe,CAAC;AAC9B,cAAc,UAAU,CAAC;AACzB,cAAc,cAAc,CAAC;AAC7B,cAAc,eAAe,CAAC;AAC9B,cAAc,WAAW,CAAC;AAC1B,cAAc,UAAU,CAAC;AACzB,cAAc,eAAe,CAAC;AAC9B,cAAc,oBAAoB,CAAC;AACnC,cAAc,qBAAqB,CAAC;AACpC,cAAc,QAAQ,CAAC;AACvB,cAAc,WAAW,CAAC;AAC1B,cAAc,kBAAkB,CAAC;AACjC,cAAc,QAAQ,CAAC;AACvB,cAAc,aAAa,CAAC;AAC5B,cAAc,SAAS,CAAC;AACxB,cAAc,eAAe,CAAC;AAC9B,cAAc,yBAAyB,CAAC;AACxC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,sBAAsB,CAAC;AACrC,cAAc,YAAY,CAAC;AAC3B,cAAc,YAAY,CAAC;AAC3B,cAAc,UAAU,CAAC;AACzB,cAAc,YAAY,CAAC;AAC3B,cAAc,iBAAiB,CAAC;AAChC,cAAc,SAAS,CAAC;AACxB,cAAc,eAAe,CAAC;AAC9B,cAAc,UAAU,CAAC;AACzB,cAAc,aAAa,CAAC;AAC5B,cAAc,0BAA0B,CAAC;AACzC,cAAc,sBAAsB,CAAC;AACrC,cAAc,cAAc,CAAC;AAC7B,cAAc,qBAAqB,CAAC;AACpC,cAAc,qBAAqB,CAAC;AACpC,cAAc,kBAAkB,CAAC;AACjC,cAAc,UAAU,CAAC;AACzB,cAAc,YAAY,CAAC;AAC3B,cAAc,UAAU,CAAC;AACzB,cAAc,gBAAgB,CAAC;AAC/B,cAAc,YAAY,CAAC;AAC3B,cAAc,kBAAkB,CAAC;AACjC,cAAc,eAAe,CAAC;AAC9B,cAAc,WAAW,CAAC;AAC1B,cAAc,eAAe,CAAC;AAC9B,cAAc,qBAAqB,CAAC;AACpC,cAAc,UAAU,CAAC;AACzB,cAAc,OAAO,CAAC;AACtB,cAAc,aAAa,CAAC;AAC5B,cAAc,QAAQ,CAAC;AACvB,cAAc,aAAa,CAAC;AAC5B,cAAc,cAAc,CAAC;AAC7B,cAAc,SAAS,CAAC;AACxB,cAAc,WAAW,CAAC;AAC1B,cAAc,WAAW,CAAC;AAC1B,cAAc,aAAa,CAAC;AAC5B,cAAc,aAAa,CAAC;AAC5B,cAAc,aAAa,CAAC;AAC5B,cAAc,yBAAyB,CAAC;AACxC,OAAO,EAAE,SAAS,IAAI,qBAAqB,EAAE,MAAM,aAAa,CAAC"}
|
|
@@ -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 @@
|
|
|
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 @@
|
|
|
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,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));
|