@sekiui/elements 0.0.55 → 0.0.57
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/cdn/index.js +1053 -91
- package/dist/cdn/p-BJCq8m2o.js +138 -0
- package/dist/cdn/p-BfRJQMIU.js +111 -0
- package/dist/cdn/{p-bMBhrs0a.js → p-Bp7tjKwQ.js} +427 -7
- package/dist/cdn/seki-button.js +1 -1
- package/dist/cdn/seki-card-action.d.ts +11 -0
- package/dist/cdn/seki-card-action.js +38 -0
- package/dist/cdn/seki-card-content.d.ts +11 -0
- package/dist/cdn/seki-card-content.js +38 -0
- package/dist/cdn/seki-card-description.d.ts +11 -0
- package/dist/cdn/seki-card-description.js +38 -0
- package/dist/cdn/seki-card-footer.d.ts +11 -0
- package/dist/cdn/seki-card-footer.js +44 -0
- package/dist/cdn/seki-card-header.d.ts +11 -0
- package/dist/cdn/seki-card-header.js +38 -0
- package/dist/cdn/seki-card-title.d.ts +11 -0
- package/dist/cdn/seki-card-title.js +59 -0
- package/dist/cdn/seki-card.d.ts +11 -0
- package/dist/cdn/seki-card.js +39 -0
- package/dist/cdn/seki-field-description.js +2 -2
- package/dist/cdn/seki-field-error.js +2 -2
- package/dist/cdn/seki-field-group.js +2 -2
- package/dist/cdn/seki-field-label.js +2 -2
- package/dist/cdn/seki-field-legend.js +2 -2
- package/dist/cdn/seki-field.js +2 -2
- package/dist/cdn/seki-fieldset.js +2 -2
- package/dist/cdn/seki-input.js +2 -2
- package/dist/cdn/seki-select-content.js +1 -1
- package/dist/cdn/seki-select-group.js +2 -2
- package/dist/cdn/seki-select-option.js +2 -2
- package/dist/cdn/seki-select-trigger.js +1 -1
- package/dist/cdn/seki-select.js +2 -2
- package/dist/cdn/seki-sidebar-content.d.ts +11 -0
- package/dist/cdn/seki-sidebar-content.js +38 -0
- package/dist/cdn/seki-sidebar-footer.d.ts +11 -0
- package/dist/cdn/seki-sidebar-footer.js +38 -0
- package/dist/cdn/seki-sidebar-group.d.ts +11 -0
- package/dist/cdn/seki-sidebar-group.js +131 -0
- package/dist/cdn/seki-sidebar-header.d.ts +11 -0
- package/dist/cdn/seki-sidebar-header.js +38 -0
- package/dist/cdn/seki-sidebar-menu-item.d.ts +11 -0
- package/dist/cdn/seki-sidebar-menu-item.js +200 -0
- package/dist/cdn/seki-sidebar-menu-sub.d.ts +11 -0
- package/dist/cdn/seki-sidebar-menu-sub.js +123 -0
- package/dist/cdn/seki-sidebar-menu.d.ts +11 -0
- package/dist/cdn/seki-sidebar-menu.js +38 -0
- package/dist/cdn/seki-sidebar-trigger.d.ts +11 -0
- package/dist/cdn/seki-sidebar-trigger.js +109 -0
- package/dist/cdn/seki-sidebar.d.ts +11 -0
- package/dist/cdn/seki-sidebar.js +380 -0
- package/dist/cdn/seki-skeleton.js +2 -2
- package/dist/cdn/seki-switch.js +1 -1
- package/dist/cdn/seki-tooltip.js +1 -1
- package/dist/cjs/{index-Dd6_-KaR.js → index-tQYksITZ.js} +426 -6
- package/dist/cjs/index.cjs.js +1115 -63
- package/dist/cjs/keyboard-Cjl5HYES.js +142 -0
- package/dist/cjs/loader.cjs.js +2 -2
- package/dist/cjs/seki-button.cjs.entry.js +1 -1
- package/dist/cjs/seki-card-action.cjs.entry.js +17 -0
- package/dist/cjs/seki-card-content.cjs.entry.js +17 -0
- package/dist/cjs/seki-card-description.cjs.entry.js +17 -0
- package/dist/cjs/seki-card-footer.cjs.entry.js +22 -0
- package/dist/cjs/seki-card-header.cjs.entry.js +17 -0
- package/dist/cjs/seki-card-title.cjs.entry.js +37 -0
- package/dist/cjs/seki-card.cjs.entry.js +17 -0
- package/dist/cjs/seki-field-description.cjs.entry.js +2 -2
- package/dist/cjs/seki-field-error.cjs.entry.js +2 -2
- package/dist/cjs/seki-field-group.cjs.entry.js +2 -2
- package/dist/cjs/seki-field-label.cjs.entry.js +2 -2
- package/dist/cjs/seki-field-legend.cjs.entry.js +2 -2
- package/dist/cjs/seki-field.cjs.entry.js +2 -2
- package/dist/cjs/seki-fieldset.cjs.entry.js +2 -2
- package/dist/cjs/seki-input.cjs.entry.js +2 -2
- package/dist/cjs/seki-select-content.cjs.entry.js +1 -1
- package/dist/cjs/seki-select-group.cjs.entry.js +2 -2
- package/dist/cjs/seki-select-option.cjs.entry.js +2 -2
- package/dist/cjs/seki-select-trigger.cjs.entry.js +1 -1
- package/dist/cjs/seki-select.cjs.entry.js +2 -2
- package/dist/cjs/seki-sidebar-content.cjs.entry.js +20 -0
- package/dist/cjs/seki-sidebar-footer.cjs.entry.js +20 -0
- package/dist/cjs/seki-sidebar-group.cjs.entry.js +105 -0
- package/dist/cjs/seki-sidebar-header.cjs.entry.js +20 -0
- package/dist/cjs/seki-sidebar-menu-item.cjs.entry.js +174 -0
- package/dist/cjs/seki-sidebar-menu-sub.cjs.entry.js +99 -0
- package/dist/cjs/seki-sidebar-menu.cjs.entry.js +20 -0
- package/dist/cjs/seki-sidebar-trigger.cjs.entry.js +86 -0
- package/dist/cjs/seki-sidebar.cjs.entry.js +342 -0
- package/dist/cjs/seki-skeleton.cjs.entry.js +2 -2
- package/dist/cjs/seki-switch.cjs.entry.js +81 -3
- package/dist/cjs/seki-tooltip.cjs.entry.js +1 -1
- package/dist/cjs/sekiui.cjs.js +2 -2
- package/dist/collection/collection-manifest.json +16 -0
- package/dist/collection/components/card/seki-card-action.js +50 -0
- package/dist/collection/components/card/seki-card-content.js +51 -0
- package/dist/collection/components/card/seki-card-description.js +48 -0
- package/dist/collection/components/card/seki-card-footer.js +83 -0
- package/dist/collection/components/card/seki-card-header.js +54 -0
- package/dist/collection/components/card/seki-card-title.js +95 -0
- package/dist/collection/components/card/seki-card.a11y.js +363 -0
- package/dist/collection/components/card/seki-card.css +608 -0
- package/dist/collection/components/card/seki-card.js +72 -0
- package/dist/collection/components/field/seki-field.js +1 -1
- package/dist/collection/components/field-description/seki-field-description.js +1 -1
- package/dist/collection/components/field-error/seki-field-error.js +1 -1
- package/dist/collection/components/field-group/seki-field-group.js +1 -1
- package/dist/collection/components/field-label/seki-field-label.js +1 -1
- package/dist/collection/components/field-legend/seki-field-legend.js +1 -1
- package/dist/collection/components/fieldset/seki-fieldset.js +1 -1
- package/dist/collection/components/input/seki-input.js +1 -1
- package/dist/collection/components/select/seki-select.js +1 -1
- package/dist/collection/components/select-group/seki-select-group.js +1 -1
- package/dist/collection/components/select-option/seki-select-option.js +1 -1
- package/dist/collection/components/sidebar/seki-sidebar-content.css +82 -0
- package/dist/collection/components/sidebar/seki-sidebar-content.js +33 -0
- package/dist/collection/components/sidebar/seki-sidebar-footer.css +44 -0
- package/dist/collection/components/sidebar/seki-sidebar-footer.js +31 -0
- package/dist/collection/components/sidebar/seki-sidebar-group.css +158 -0
- package/dist/collection/components/sidebar/seki-sidebar-group.js +300 -0
- package/dist/collection/components/sidebar/seki-sidebar-header.css +44 -0
- package/dist/collection/components/sidebar/seki-sidebar-header.js +32 -0
- package/dist/collection/components/sidebar/seki-sidebar-menu-item.css +196 -0
- package/dist/collection/components/sidebar/seki-sidebar-menu-item.js +403 -0
- package/dist/collection/components/sidebar/seki-sidebar-menu-sub.css +357 -0
- package/dist/collection/components/sidebar/seki-sidebar-menu-sub.js +256 -0
- package/dist/collection/components/sidebar/seki-sidebar-menu.css +25 -0
- package/dist/collection/components/sidebar/seki-sidebar-menu.js +32 -0
- package/dist/collection/components/sidebar/seki-sidebar-trigger.css +68 -0
- package/dist/collection/components/sidebar/seki-sidebar-trigger.js +175 -0
- package/dist/collection/components/sidebar/seki-sidebar.css +352 -0
- package/dist/collection/components/sidebar/seki-sidebar.js +812 -0
- package/dist/collection/components/sidebar/types.js +18 -0
- package/dist/collection/components/skeleton/seki-skeleton.js +1 -1
- package/dist/collection/index.js +7 -0
- package/dist/collection/services/focus.js +192 -0
- package/dist/collection/services/index.js +7 -0
- package/dist/collection/services/keyboard.js +136 -0
- package/dist/collection/services/media-query.js +254 -0
- package/dist/collection/types.js +41 -0
- package/dist/collection/utils/a11y.js +291 -0
- package/dist/collection/utils/common.js +286 -0
- package/dist/components/index.js +1053 -91
- package/dist/components/p-BJCq8m2o.js +138 -0
- package/dist/components/{p-QhPshhKB.js → p-BzYKy7d3.js} +427 -7
- package/dist/components/p-DwTISp-i.js +111 -0
- package/dist/components/seki-button.js +1 -1
- package/dist/components/seki-card-action.d.ts +11 -0
- package/dist/components/seki-card-action.js +38 -0
- package/dist/components/seki-card-content.d.ts +11 -0
- package/dist/components/seki-card-content.js +38 -0
- package/dist/components/seki-card-description.d.ts +11 -0
- package/dist/components/seki-card-description.js +38 -0
- package/dist/components/seki-card-footer.d.ts +11 -0
- package/dist/components/seki-card-footer.js +44 -0
- package/dist/components/seki-card-header.d.ts +11 -0
- package/dist/components/seki-card-header.js +38 -0
- package/dist/components/seki-card-title.d.ts +11 -0
- package/dist/components/seki-card-title.js +59 -0
- package/dist/components/seki-card.d.ts +11 -0
- package/dist/components/seki-card.js +39 -0
- package/dist/components/seki-field-description.js +2 -2
- package/dist/components/seki-field-error.js +2 -2
- package/dist/components/seki-field-group.js +2 -2
- package/dist/components/seki-field-label.js +2 -2
- package/dist/components/seki-field-legend.js +2 -2
- package/dist/components/seki-field.js +2 -2
- package/dist/components/seki-fieldset.js +2 -2
- package/dist/components/seki-input.js +2 -2
- package/dist/components/seki-select-content.js +1 -1
- package/dist/components/seki-select-group.js +2 -2
- package/dist/components/seki-select-option.js +2 -2
- package/dist/components/seki-select-trigger.js +1 -1
- package/dist/components/seki-select.js +2 -2
- package/dist/components/seki-sidebar-content.d.ts +11 -0
- package/dist/components/seki-sidebar-content.js +38 -0
- package/dist/components/seki-sidebar-footer.d.ts +11 -0
- package/dist/components/seki-sidebar-footer.js +38 -0
- package/dist/components/seki-sidebar-group.d.ts +11 -0
- package/dist/components/seki-sidebar-group.js +131 -0
- package/dist/components/seki-sidebar-header.d.ts +11 -0
- package/dist/components/seki-sidebar-header.js +38 -0
- package/dist/components/seki-sidebar-menu-item.d.ts +11 -0
- package/dist/components/seki-sidebar-menu-item.js +200 -0
- package/dist/components/seki-sidebar-menu-sub.d.ts +11 -0
- package/dist/components/seki-sidebar-menu-sub.js +123 -0
- package/dist/components/seki-sidebar-menu.d.ts +11 -0
- package/dist/components/seki-sidebar-menu.js +38 -0
- package/dist/components/seki-sidebar-trigger.d.ts +11 -0
- package/dist/components/seki-sidebar-trigger.js +109 -0
- package/dist/components/seki-sidebar.d.ts +11 -0
- package/dist/components/seki-sidebar.js +380 -0
- package/dist/components/seki-skeleton.js +2 -2
- package/dist/components/seki-switch.js +1 -1
- package/dist/components/seki-tooltip.js +1 -1
- package/dist/esm/{index-CuXbV_yz.js → index-Dfzpqq0a.js} +426 -6
- package/dist/esm/index.js +1053 -63
- package/dist/esm/keyboard-BJCq8m2o.js +138 -0
- package/dist/esm/loader.js +3 -3
- package/dist/esm/seki-button.entry.js +1 -1
- package/dist/esm/seki-card-action.entry.js +15 -0
- package/dist/esm/seki-card-content.entry.js +15 -0
- package/dist/esm/seki-card-description.entry.js +15 -0
- package/dist/esm/seki-card-footer.entry.js +20 -0
- package/dist/esm/seki-card-header.entry.js +15 -0
- package/dist/esm/seki-card-title.entry.js +35 -0
- package/dist/esm/seki-card.entry.js +15 -0
- package/dist/esm/seki-field-description.entry.js +2 -2
- package/dist/esm/seki-field-error.entry.js +2 -2
- package/dist/esm/seki-field-group.entry.js +2 -2
- package/dist/esm/seki-field-label.entry.js +2 -2
- package/dist/esm/seki-field-legend.entry.js +2 -2
- package/dist/esm/seki-field.entry.js +2 -2
- package/dist/esm/seki-fieldset.entry.js +2 -2
- package/dist/esm/seki-input.entry.js +2 -2
- package/dist/esm/seki-select-content.entry.js +1 -1
- package/dist/esm/seki-select-group.entry.js +2 -2
- package/dist/esm/seki-select-option.entry.js +2 -2
- package/dist/esm/seki-select-trigger.entry.js +1 -1
- package/dist/esm/seki-select.entry.js +2 -2
- package/dist/esm/seki-sidebar-content.entry.js +18 -0
- package/dist/esm/seki-sidebar-footer.entry.js +18 -0
- package/dist/esm/seki-sidebar-group.entry.js +103 -0
- package/dist/esm/seki-sidebar-header.entry.js +18 -0
- package/dist/esm/seki-sidebar-menu-item.entry.js +172 -0
- package/dist/esm/seki-sidebar-menu-sub.entry.js +97 -0
- package/dist/esm/seki-sidebar-menu.entry.js +18 -0
- package/dist/esm/seki-sidebar-trigger.entry.js +84 -0
- package/dist/esm/seki-sidebar.entry.js +340 -0
- package/dist/esm/seki-skeleton.entry.js +2 -2
- package/dist/esm/seki-switch.entry.js +84 -2
- package/dist/esm/seki-tooltip.entry.js +1 -1
- package/dist/esm/sekiui.js +3 -3
- package/dist/sekiui/index.esm.js +1 -1
- package/dist/sekiui/p-01cfb4e7.entry.js +1 -0
- package/dist/sekiui/{p-431f46a1.entry.js → p-042ec460.entry.js} +1 -1
- package/dist/sekiui/{p-a36f1ac4.entry.js → p-10c008fc.entry.js} +1 -1
- package/dist/sekiui/p-352bd295.entry.js +1 -0
- package/dist/sekiui/p-37c5f4d9.entry.js +1 -0
- package/dist/sekiui/p-40fb71d6.entry.js +1 -0
- package/dist/sekiui/{p-eefbc037.entry.js → p-44191aed.entry.js} +1 -1
- package/dist/sekiui/{p-81709fc2.entry.js → p-4423d621.entry.js} +1 -1
- package/dist/sekiui/{p-e679d501.entry.js → p-4636588f.entry.js} +1 -1
- package/dist/sekiui/p-471b97a5.entry.js +1 -0
- package/dist/sekiui/{p-de4735fb.entry.js → p-56f0d754.entry.js} +1 -1
- package/dist/sekiui/p-5bc0f5aa.entry.js +1 -0
- package/dist/sekiui/p-6164cd8a.entry.js +1 -0
- package/dist/sekiui/{p-0fba4e2d.entry.js → p-635f4098.entry.js} +1 -1
- package/dist/sekiui/{p-434be19f.entry.js → p-743fc6d9.entry.js} +1 -1
- package/dist/sekiui/p-83e65cbe.entry.js +1 -0
- package/dist/sekiui/p-8b7bd061.entry.js +1 -0
- package/dist/sekiui/p-8d9a4878.entry.js +1 -0
- package/dist/sekiui/p-9cb9cdfe.entry.js +1 -0
- package/dist/sekiui/p-9f2d95d7.entry.js +1 -0
- package/dist/sekiui/p-BJCq8m2o.js +1 -0
- package/dist/sekiui/p-Dfzpqq0a.js +2 -0
- package/dist/sekiui/p-a1a71958.entry.js +1 -0
- package/dist/sekiui/{p-bf942ad5.entry.js → p-a71e0c55.entry.js} +1 -1
- package/dist/sekiui/{p-6ff91f7f.entry.js → p-ae227955.entry.js} +1 -1
- package/dist/sekiui/{p-80a41058.entry.js → p-b365f5fb.entry.js} +1 -1
- package/dist/sekiui/{p-6bde807e.entry.js → p-b387a2a5.entry.js} +1 -1
- package/dist/sekiui/p-b8590f4d.entry.js +1 -0
- package/dist/sekiui/p-c98b6d6a.entry.js +1 -0
- package/dist/sekiui/{p-7c2245be.entry.js → p-d73cdb9a.entry.js} +1 -1
- package/dist/sekiui/{p-a56602b3.entry.js → p-d96e770e.entry.js} +1 -1
- package/dist/sekiui/p-e62dd89b.entry.js +1 -0
- package/dist/sekiui/{p-386c00ac.entry.js → p-e7bb140c.entry.js} +1 -1
- package/dist/sekiui/{p-6e238adf.entry.js → p-eecc18f3.entry.js} +1 -1
- package/dist/sekiui/p-ff636955.entry.js +1 -0
- package/dist/sekiui/sekiui.esm.js +1 -1
- package/dist/types/components/card/seki-card-action.d.ts +16 -0
- package/dist/types/components/card/seki-card-content.d.ts +17 -0
- package/dist/types/components/card/seki-card-description.d.ts +14 -0
- package/dist/types/components/card/seki-card-footer.d.ts +24 -0
- package/dist/types/components/card/seki-card-header.d.ts +20 -0
- package/dist/types/components/card/seki-card-title.d.ts +20 -0
- package/dist/types/components/card/seki-card.a11y.d.ts +1 -0
- package/dist/types/components/card/seki-card.d.ts +23 -0
- package/dist/types/components/sidebar/seki-sidebar-content.d.ts +18 -0
- package/dist/types/components/sidebar/seki-sidebar-footer.d.ts +16 -0
- package/dist/types/components/sidebar/seki-sidebar-group.d.ts +81 -0
- package/dist/types/components/sidebar/seki-sidebar-header.d.ts +17 -0
- package/dist/types/components/sidebar/seki-sidebar-menu-item.d.ts +104 -0
- package/dist/types/components/sidebar/seki-sidebar-menu-sub.d.ts +81 -0
- package/dist/types/components/sidebar/seki-sidebar-menu.d.ts +17 -0
- package/dist/types/components/sidebar/seki-sidebar-trigger.d.ts +53 -0
- package/dist/types/components/sidebar/seki-sidebar.d.ts +185 -0
- package/dist/types/components/sidebar/types.d.ts +245 -0
- package/dist/types/components.d.ts +899 -0
- package/dist/types/index.d.ts +4 -0
- package/dist/types/services/focus.d.ts +74 -0
- package/dist/types/services/index.d.ts +7 -0
- package/dist/types/services/keyboard.d.ts +74 -0
- package/dist/types/services/media-query.d.ts +121 -0
- package/dist/types/types.d.ts +105 -0
- package/dist/types/utils/a11y.d.ts +130 -0
- package/dist/types/utils/common.d.ts +142 -0
- package/package.json +2 -1
- package/dist/sekiui/p-9fe07f6e.entry.js +0 -1
- package/dist/sekiui/p-CuXbV_yz.js +0 -2
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* SekiSidebarGroup Component
|
|
3
|
+
* @description Group container for organizing sidebar menu items
|
|
4
|
+
* Optionally provides a collapsible section with title and action button
|
|
5
|
+
* @component
|
|
6
|
+
* @example
|
|
7
|
+
* <seki-sidebar-group title="Navigation" collapsible>
|
|
8
|
+
* <seki-sidebar-menu>
|
|
9
|
+
* <seki-sidebar-menu-item href="/">Home</seki-sidebar-menu-item>
|
|
10
|
+
* </seki-sidebar-menu>
|
|
11
|
+
* </seki-sidebar-group>
|
|
12
|
+
*/
|
|
13
|
+
import { EventEmitter } from '../../stencil-public-runtime';
|
|
14
|
+
import { SidebarGroupProps, CollapsedChangeDetail } from './types';
|
|
15
|
+
export declare class SekiSidebarGroup {
|
|
16
|
+
/**
|
|
17
|
+
* Reference to the element
|
|
18
|
+
*/
|
|
19
|
+
el: HTMLElement;
|
|
20
|
+
/**
|
|
21
|
+
* Section header text (optional)
|
|
22
|
+
* @type {string}
|
|
23
|
+
*/
|
|
24
|
+
title?: SidebarGroupProps['title'];
|
|
25
|
+
/**
|
|
26
|
+
* Allow collapsing this group
|
|
27
|
+
* @type {boolean}
|
|
28
|
+
* @default false
|
|
29
|
+
*/
|
|
30
|
+
collapsible: boolean;
|
|
31
|
+
/**
|
|
32
|
+
* Initial collapsed state
|
|
33
|
+
* @type {boolean}
|
|
34
|
+
* @default false
|
|
35
|
+
*/
|
|
36
|
+
defaultCollapsed: boolean;
|
|
37
|
+
/**
|
|
38
|
+
* Optional action button configuration
|
|
39
|
+
* @type {object}
|
|
40
|
+
*/
|
|
41
|
+
action?: SidebarGroupProps['action'];
|
|
42
|
+
/**
|
|
43
|
+
* Internal state: whether group is collapsed
|
|
44
|
+
*/
|
|
45
|
+
isCollapsed: boolean;
|
|
46
|
+
/**
|
|
47
|
+
* Event fired when collapsed state changes
|
|
48
|
+
*/
|
|
49
|
+
collapsedChange: EventEmitter<CollapsedChangeDetail>;
|
|
50
|
+
/**
|
|
51
|
+
* Component lifecycle: initialize state
|
|
52
|
+
*/
|
|
53
|
+
componentWillLoad(): void;
|
|
54
|
+
/**
|
|
55
|
+
* Get current collapsed state
|
|
56
|
+
*/
|
|
57
|
+
isCollapsedState(): Promise<boolean>;
|
|
58
|
+
/**
|
|
59
|
+
* Set collapsed state
|
|
60
|
+
*/
|
|
61
|
+
setCollapsed(collapsed: boolean): Promise<void>;
|
|
62
|
+
/**
|
|
63
|
+
* Toggle collapsed state
|
|
64
|
+
*/
|
|
65
|
+
private handleToggle;
|
|
66
|
+
/**
|
|
67
|
+
* Handle keyboard navigation on toggle button
|
|
68
|
+
* - Enter/Space: toggle group
|
|
69
|
+
* - ArrowLeft: collapse group
|
|
70
|
+
* - ArrowRight: expand group
|
|
71
|
+
*/
|
|
72
|
+
private handleToggleKeyDown;
|
|
73
|
+
/**
|
|
74
|
+
* Handle action button click
|
|
75
|
+
*/
|
|
76
|
+
private handleAction;
|
|
77
|
+
/**
|
|
78
|
+
* Render the component
|
|
79
|
+
*/
|
|
80
|
+
render(): any;
|
|
81
|
+
}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* SekiSidebarHeader Component
|
|
3
|
+
* @description Sticky header section at the top of the sidebar
|
|
4
|
+
* Provides a slot for header content (logo, title, trigger button)
|
|
5
|
+
* @component
|
|
6
|
+
* @example
|
|
7
|
+
* <seki-sidebar-header>
|
|
8
|
+
* <div class="sidebar-header-content">Logo</div>
|
|
9
|
+
* <seki-sidebar-trigger></seki-sidebar-trigger>
|
|
10
|
+
* </seki-sidebar-header>
|
|
11
|
+
*/
|
|
12
|
+
export declare class SekiSidebarHeader {
|
|
13
|
+
/**
|
|
14
|
+
* Render the component
|
|
15
|
+
*/
|
|
16
|
+
render(): any;
|
|
17
|
+
}
|
|
@@ -0,0 +1,104 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* SekiSidebarMenuItem Component
|
|
3
|
+
* @description Navigation menu item within the sidebar menu
|
|
4
|
+
* Supports icons, badges, active states, and keyboard navigation
|
|
5
|
+
* @component
|
|
6
|
+
* @example
|
|
7
|
+
* <seki-sidebar-menu-item href="/dashboard" is-active>Dashboard</seki-sidebar-menu-item>
|
|
8
|
+
*/
|
|
9
|
+
import { EventEmitter } from '../../stencil-public-runtime';
|
|
10
|
+
import { SidebarMenuItemProps, NavigateDetail } from './types';
|
|
11
|
+
export declare class SekiSidebarMenuItem {
|
|
12
|
+
/**
|
|
13
|
+
* Reference to the element
|
|
14
|
+
*/
|
|
15
|
+
el: HTMLElement;
|
|
16
|
+
/**
|
|
17
|
+
* Navigation URL (optional)
|
|
18
|
+
* @type {string}
|
|
19
|
+
*/
|
|
20
|
+
href?: SidebarMenuItemProps['href'];
|
|
21
|
+
/**
|
|
22
|
+
* Link target: _blank, _self, etc.
|
|
23
|
+
* @type {string}
|
|
24
|
+
*/
|
|
25
|
+
target?: SidebarMenuItemProps['target'];
|
|
26
|
+
/**
|
|
27
|
+
* Disable interaction
|
|
28
|
+
* @type {boolean}
|
|
29
|
+
* @default false
|
|
30
|
+
*/
|
|
31
|
+
disabled: boolean;
|
|
32
|
+
/**
|
|
33
|
+
* Highlight as current page
|
|
34
|
+
* @type {boolean}
|
|
35
|
+
* @default false
|
|
36
|
+
*/
|
|
37
|
+
isActive: boolean;
|
|
38
|
+
/**
|
|
39
|
+
* Badge indicator for the item
|
|
40
|
+
* @type {object}
|
|
41
|
+
*/
|
|
42
|
+
badge?: SidebarMenuItemProps['badge'];
|
|
43
|
+
/**
|
|
44
|
+
* Accessibility label override
|
|
45
|
+
* @type {string}
|
|
46
|
+
*/
|
|
47
|
+
ariaLabel?: SidebarMenuItemProps['ariaLabel'];
|
|
48
|
+
/**
|
|
49
|
+
* ARIA current value for active items
|
|
50
|
+
* @type {string}
|
|
51
|
+
*/
|
|
52
|
+
ariaCurrentValue: SidebarMenuItemProps['ariaCurrentValue'];
|
|
53
|
+
/**
|
|
54
|
+
* Event fired on item click
|
|
55
|
+
*/
|
|
56
|
+
navigate: EventEmitter<NavigateDetail>;
|
|
57
|
+
/**
|
|
58
|
+
* Handle item click
|
|
59
|
+
*/
|
|
60
|
+
private handleClick;
|
|
61
|
+
/**
|
|
62
|
+
* Handle keyboard navigation
|
|
63
|
+
* - Enter/Space: activate item
|
|
64
|
+
* - ArrowDown: focus next menu item
|
|
65
|
+
* - ArrowUp: focus previous menu item
|
|
66
|
+
* - ArrowRight: expand parent submenu (if collapsed)
|
|
67
|
+
* - ArrowLeft: collapse parent submenu (if expanded)
|
|
68
|
+
* - Home: focus first menu item
|
|
69
|
+
* - End: focus last menu item
|
|
70
|
+
*/
|
|
71
|
+
private handleKeyDown;
|
|
72
|
+
/**
|
|
73
|
+
* Get all enabled menu items
|
|
74
|
+
*/
|
|
75
|
+
private getEnabledItems;
|
|
76
|
+
/**
|
|
77
|
+
* Focus next menu item in the menu
|
|
78
|
+
*/
|
|
79
|
+
private focusNextItem;
|
|
80
|
+
/**
|
|
81
|
+
* Focus previous menu item in the menu
|
|
82
|
+
*/
|
|
83
|
+
private focusPreviousItem;
|
|
84
|
+
/**
|
|
85
|
+
* Focus first menu item in the menu
|
|
86
|
+
*/
|
|
87
|
+
private focusFirstItem;
|
|
88
|
+
/**
|
|
89
|
+
* Focus last menu item in the menu
|
|
90
|
+
*/
|
|
91
|
+
private focusLastItem;
|
|
92
|
+
/**
|
|
93
|
+
* Expand parent submenu if collapsed
|
|
94
|
+
*/
|
|
95
|
+
private expandParentSubmenu;
|
|
96
|
+
/**
|
|
97
|
+
* Collapse parent submenu if expanded
|
|
98
|
+
*/
|
|
99
|
+
private collapseParentSubmenu;
|
|
100
|
+
/**
|
|
101
|
+
* Render the component
|
|
102
|
+
*/
|
|
103
|
+
render(): any;
|
|
104
|
+
}
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* SekiSidebarMenuSub Component
|
|
3
|
+
* @description Nested submenu container for collapsible menu items
|
|
4
|
+
* Provides expandable/collapsible sub-navigation structure with support for:
|
|
5
|
+
* - Multi-level nesting (unlimited depth)
|
|
6
|
+
* - Smooth animations (200ms transitions)
|
|
7
|
+
* - Icon-only display when parent sidebar is collapsed
|
|
8
|
+
* - Tooltip support for collapsed state
|
|
9
|
+
* - Full keyboard navigation and accessibility
|
|
10
|
+
* @component
|
|
11
|
+
* @example
|
|
12
|
+
* <seki-sidebar-menu-item>
|
|
13
|
+
* <span slot="icon">⚙️</span>
|
|
14
|
+
* Settings
|
|
15
|
+
* <seki-sidebar-menu-sub slot="submenu">
|
|
16
|
+
* <seki-sidebar-menu-item href="/settings/profile">
|
|
17
|
+
* <span slot="icon">👤</span>
|
|
18
|
+
* Profile
|
|
19
|
+
* </seki-sidebar-menu-item>
|
|
20
|
+
* <seki-sidebar-menu-item href="/settings/security">
|
|
21
|
+
* <span slot="icon">🔒</span>
|
|
22
|
+
* Security
|
|
23
|
+
* </seki-sidebar-menu-item>
|
|
24
|
+
* </seki-sidebar-menu-sub>
|
|
25
|
+
* </seki-sidebar-menu-item>
|
|
26
|
+
*/
|
|
27
|
+
import { EventEmitter } from '../../stencil-public-runtime';
|
|
28
|
+
import { SidebarMenuSubProps, CollapsedChangeDetail } from './types';
|
|
29
|
+
export declare class SekiSidebarMenuSub {
|
|
30
|
+
/**
|
|
31
|
+
* Reference to the element
|
|
32
|
+
*/
|
|
33
|
+
el: HTMLElement;
|
|
34
|
+
/**
|
|
35
|
+
* Label for the submenu (shown when expanded)
|
|
36
|
+
* @type {string}
|
|
37
|
+
*/
|
|
38
|
+
label?: SidebarMenuSubProps['label'];
|
|
39
|
+
/**
|
|
40
|
+
* Initial collapsed state
|
|
41
|
+
* @type {boolean}
|
|
42
|
+
* @default false
|
|
43
|
+
*/
|
|
44
|
+
defaultCollapsed: boolean;
|
|
45
|
+
/**
|
|
46
|
+
* Internal state: whether submenu is collapsed
|
|
47
|
+
*/
|
|
48
|
+
isCollapsed: boolean;
|
|
49
|
+
/**
|
|
50
|
+
* Event fired when collapsed state changes
|
|
51
|
+
*/
|
|
52
|
+
collapsedChange: EventEmitter<CollapsedChangeDetail>;
|
|
53
|
+
/**
|
|
54
|
+
* Component lifecycle: initialize state
|
|
55
|
+
*/
|
|
56
|
+
componentWillLoad(): void;
|
|
57
|
+
/**
|
|
58
|
+
* Get current collapsed state
|
|
59
|
+
*/
|
|
60
|
+
isCollapsedState(): Promise<boolean>;
|
|
61
|
+
/**
|
|
62
|
+
* Set collapsed state
|
|
63
|
+
*/
|
|
64
|
+
setCollapsed(collapsed: boolean): Promise<void>;
|
|
65
|
+
/**
|
|
66
|
+
* Toggle collapsed state
|
|
67
|
+
*/
|
|
68
|
+
private handleToggle;
|
|
69
|
+
/**
|
|
70
|
+
* Handle keyboard navigation
|
|
71
|
+
* - Enter: toggle submenu
|
|
72
|
+
* - ArrowDown: focus next submenu item
|
|
73
|
+
* - ArrowUp: focus previous submenu item
|
|
74
|
+
* - Escape: close submenu
|
|
75
|
+
*/
|
|
76
|
+
private handleKeyDown;
|
|
77
|
+
/**
|
|
78
|
+
* Render the component
|
|
79
|
+
*/
|
|
80
|
+
render(): any;
|
|
81
|
+
}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* SekiSidebarMenu Component
|
|
3
|
+
* @description List container for menu items within a sidebar
|
|
4
|
+
* Provides semantic menu structure with proper ARIA attributes
|
|
5
|
+
* @component
|
|
6
|
+
* @example
|
|
7
|
+
* <seki-sidebar-menu>
|
|
8
|
+
* <seki-sidebar-menu-item href="/dashboard">Dashboard</seki-sidebar-menu-item>
|
|
9
|
+
* <seki-sidebar-menu-item href="/settings">Settings</seki-sidebar-menu-item>
|
|
10
|
+
* </seki-sidebar-menu>
|
|
11
|
+
*/
|
|
12
|
+
export declare class SekiSidebarMenu {
|
|
13
|
+
/**
|
|
14
|
+
* Render the component
|
|
15
|
+
*/
|
|
16
|
+
render(): any;
|
|
17
|
+
}
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* SekiSidebarTrigger Component
|
|
3
|
+
* @description Toggle button for opening/closing the sidebar
|
|
4
|
+
* Manages focus, keyboard activation (Space, Enter), and ARIA attributes
|
|
5
|
+
* @component
|
|
6
|
+
* @example
|
|
7
|
+
* <seki-sidebar-trigger aria-label="Toggle sidebar"></seki-sidebar-trigger>
|
|
8
|
+
*/
|
|
9
|
+
import { SidebarTriggerProps } from './types';
|
|
10
|
+
export declare class SekiSidebarTrigger {
|
|
11
|
+
/**
|
|
12
|
+
* Accessibility label for the button
|
|
13
|
+
* @type {string}
|
|
14
|
+
* @default 'Toggle sidebar'
|
|
15
|
+
*/
|
|
16
|
+
ariaLabel: SidebarTriggerProps['ariaLabel'];
|
|
17
|
+
/**
|
|
18
|
+
* Icon name or SVG path (optional)
|
|
19
|
+
* @type {string}
|
|
20
|
+
*/
|
|
21
|
+
icon: SidebarTriggerProps['icon'];
|
|
22
|
+
el: HTMLElement;
|
|
23
|
+
/**
|
|
24
|
+
* Track the sidebar's open state for aria-expanded attribute
|
|
25
|
+
*/
|
|
26
|
+
isOpen: boolean;
|
|
27
|
+
/**
|
|
28
|
+
* Reference to parent sidebar
|
|
29
|
+
*/
|
|
30
|
+
private parentSidebar;
|
|
31
|
+
/**
|
|
32
|
+
* Initialize - find parent sidebar and listen to state changes
|
|
33
|
+
*/
|
|
34
|
+
connectedCallback(): void;
|
|
35
|
+
/**
|
|
36
|
+
* Listen to openChange event from parent sidebar
|
|
37
|
+
*/
|
|
38
|
+
handleOpenChange(event: CustomEvent<{
|
|
39
|
+
isOpen: boolean;
|
|
40
|
+
}>): void;
|
|
41
|
+
/**
|
|
42
|
+
* Handle button click - finds parent seki-sidebar or nearest sidebar in document
|
|
43
|
+
*/
|
|
44
|
+
private handleClick;
|
|
45
|
+
/**
|
|
46
|
+
* Handle keyboard activation (Space, Enter)
|
|
47
|
+
*/
|
|
48
|
+
private handleKeyDown;
|
|
49
|
+
/**
|
|
50
|
+
* Render the component
|
|
51
|
+
*/
|
|
52
|
+
render(): any;
|
|
53
|
+
}
|
|
@@ -0,0 +1,185 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* SekiSidebar Component
|
|
3
|
+
* @description Main sidebar container component managing collapse state, layout variant,
|
|
4
|
+
* and responsive configuration. Provides context to child components.
|
|
5
|
+
* @component
|
|
6
|
+
* @example
|
|
7
|
+
* <seki-sidebar variant="sidebar" collapse-mode="icon" persistent>
|
|
8
|
+
* <seki-sidebar-header>Header Content</seki-sidebar-header>
|
|
9
|
+
* <seki-sidebar-content>Menu content</seki-sidebar-content>
|
|
10
|
+
* <seki-sidebar-footer>Footer content</seki-sidebar-footer>
|
|
11
|
+
* </seki-sidebar>
|
|
12
|
+
*/
|
|
13
|
+
import { EventEmitter } from '../../stencil-public-runtime';
|
|
14
|
+
import { SidebarProps, SidebarState, OpenChangeDetail, VariantChangeDetail, CollapseModeChangeDetail, MobileStateChangeDetail } from './types';
|
|
15
|
+
export declare class SekiSidebar {
|
|
16
|
+
/**
|
|
17
|
+
* Layout variant: standard, floating (detached), or inset
|
|
18
|
+
* @type {'sidebar' | 'floating' | 'inset'}
|
|
19
|
+
* @default 'sidebar'
|
|
20
|
+
*/
|
|
21
|
+
variant: SidebarProps['variant'];
|
|
22
|
+
/**
|
|
23
|
+
* Collapse mechanism: offcanvas (slides), icon (shrinks), or none (fixed)
|
|
24
|
+
* @type {'offcanvas' | 'icon' | 'none'}
|
|
25
|
+
* @default 'offcanvas'
|
|
26
|
+
*/
|
|
27
|
+
collapseMode: SidebarProps['collapseMode'];
|
|
28
|
+
/**
|
|
29
|
+
* Initial open/closed state
|
|
30
|
+
* @type {boolean}
|
|
31
|
+
* @default true
|
|
32
|
+
*/
|
|
33
|
+
defaultOpen: boolean;
|
|
34
|
+
/**
|
|
35
|
+
* Persist state to localStorage
|
|
36
|
+
* @type {boolean}
|
|
37
|
+
* @default false
|
|
38
|
+
*/
|
|
39
|
+
persistent: boolean;
|
|
40
|
+
/**
|
|
41
|
+
* Viewport width for mobile detection (px)
|
|
42
|
+
* @type {number}
|
|
43
|
+
* @default 768
|
|
44
|
+
*/
|
|
45
|
+
mobileBreakpoint: number;
|
|
46
|
+
/**
|
|
47
|
+
* Position: left or right side of viewport
|
|
48
|
+
* @type {'left' | 'right'}
|
|
49
|
+
* @default 'left'
|
|
50
|
+
*/
|
|
51
|
+
side: SidebarProps['side'];
|
|
52
|
+
/**
|
|
53
|
+
* Storage key for persisted state
|
|
54
|
+
* @type {string}
|
|
55
|
+
* @default 'seki-sidebar-state'
|
|
56
|
+
*/
|
|
57
|
+
persistenceKey: string;
|
|
58
|
+
/**
|
|
59
|
+
* Callback fired when open state changes
|
|
60
|
+
*/
|
|
61
|
+
onOpenChange?: (isOpen: boolean) => void;
|
|
62
|
+
el: HTMLElement;
|
|
63
|
+
/**
|
|
64
|
+
* Internal state: whether sidebar is open/expanded
|
|
65
|
+
*/
|
|
66
|
+
isOpen: boolean;
|
|
67
|
+
/**
|
|
68
|
+
* Internal state: whether viewport is mobile
|
|
69
|
+
*/
|
|
70
|
+
isMobile: boolean;
|
|
71
|
+
/**
|
|
72
|
+
* Event fired when sidebar opens/closes
|
|
73
|
+
*/
|
|
74
|
+
openChange: EventEmitter<OpenChangeDetail>;
|
|
75
|
+
/**
|
|
76
|
+
* Event fired when variant changes
|
|
77
|
+
*/
|
|
78
|
+
variantChange: EventEmitter<VariantChangeDetail>;
|
|
79
|
+
/**
|
|
80
|
+
* Event fired when collapse mode changes
|
|
81
|
+
*/
|
|
82
|
+
collapseModeChange: EventEmitter<CollapseModeChangeDetail>;
|
|
83
|
+
/**
|
|
84
|
+
* Event fired when mobile state changes
|
|
85
|
+
*/
|
|
86
|
+
mobileStateChange: EventEmitter<MobileStateChangeDetail>;
|
|
87
|
+
/**
|
|
88
|
+
* Note: Context distribution to child components via parent-child DOM hierarchy
|
|
89
|
+
* Child components use closest('seki-sidebar') to access parent methods
|
|
90
|
+
*/
|
|
91
|
+
private resizeObserver;
|
|
92
|
+
private mediaQueryList;
|
|
93
|
+
private keyboardShortcutId;
|
|
94
|
+
/**
|
|
95
|
+
* Component lifecycle: initialize state
|
|
96
|
+
*/
|
|
97
|
+
componentWillLoad(): void;
|
|
98
|
+
/**
|
|
99
|
+
* Watch for variant changes
|
|
100
|
+
*/
|
|
101
|
+
watchVariant(newValue: SidebarProps['variant'] | undefined): void;
|
|
102
|
+
/**
|
|
103
|
+
* Watch for collapse mode changes
|
|
104
|
+
*/
|
|
105
|
+
watchCollapseMode(newValue: SidebarProps['collapseMode'] | undefined): void;
|
|
106
|
+
/**
|
|
107
|
+
* Component lifecycle: after render
|
|
108
|
+
*/
|
|
109
|
+
componentDidLoad(): void;
|
|
110
|
+
/**
|
|
111
|
+
* Component lifecycle: on prop changes
|
|
112
|
+
*/
|
|
113
|
+
componentWillUpdate(): void;
|
|
114
|
+
/**
|
|
115
|
+
* Component lifecycle: cleanup
|
|
116
|
+
*/
|
|
117
|
+
disconnectedCallback(): void;
|
|
118
|
+
/**
|
|
119
|
+
* Listen for variant prop changes
|
|
120
|
+
*/
|
|
121
|
+
onVariantChange(newVariant: string): void;
|
|
122
|
+
/**
|
|
123
|
+
* Listen for collapseMode prop changes
|
|
124
|
+
*/
|
|
125
|
+
onCollapseModeChange(newMode: string): void;
|
|
126
|
+
/**
|
|
127
|
+
* Handle media query changes for mobile detection
|
|
128
|
+
*/
|
|
129
|
+
private handleMediaQueryChange;
|
|
130
|
+
/**
|
|
131
|
+
* Detect if viewport is mobile
|
|
132
|
+
*/
|
|
133
|
+
private detectMobileState;
|
|
134
|
+
/**
|
|
135
|
+
* Setup resize detection using ResizeObserver
|
|
136
|
+
*/
|
|
137
|
+
private setupResizeDetection;
|
|
138
|
+
/**
|
|
139
|
+
* Setup keyboard shortcut for toggling sidebar (Ctrl+B or Cmd+B)
|
|
140
|
+
* Uses the KeyboardService for centralized event handling
|
|
141
|
+
*/
|
|
142
|
+
private setupKeyboardShortcut;
|
|
143
|
+
/**
|
|
144
|
+
* Note: Context updates handled via event emissions and state changes
|
|
145
|
+
*/
|
|
146
|
+
private updateContext;
|
|
147
|
+
/**
|
|
148
|
+
* Get current state synchronously
|
|
149
|
+
*/
|
|
150
|
+
private getStateSync;
|
|
151
|
+
/**
|
|
152
|
+
* Open the sidebar (set isOpen=true)
|
|
153
|
+
* @returns {Promise<void>}
|
|
154
|
+
*/
|
|
155
|
+
open(): Promise<void>;
|
|
156
|
+
/**
|
|
157
|
+
* Close the sidebar (set isOpen=false)
|
|
158
|
+
* @returns {Promise<void>}
|
|
159
|
+
*/
|
|
160
|
+
close(): Promise<void>;
|
|
161
|
+
/**
|
|
162
|
+
* Toggle the sidebar open/closed state
|
|
163
|
+
* @returns {Promise<void>}
|
|
164
|
+
*/
|
|
165
|
+
toggle(): Promise<void>;
|
|
166
|
+
/**
|
|
167
|
+
* Get current sidebar state
|
|
168
|
+
* @returns {Promise<SidebarState>}
|
|
169
|
+
*/
|
|
170
|
+
getState(): Promise<SidebarState>;
|
|
171
|
+
/**
|
|
172
|
+
* Update sidebar state
|
|
173
|
+
* @param {Partial<SidebarState>} state - Partial state object
|
|
174
|
+
* @returns {Promise<void>}
|
|
175
|
+
*/
|
|
176
|
+
setState(state: Partial<SidebarState>): Promise<void>;
|
|
177
|
+
/**
|
|
178
|
+
* Persist state to localStorage if persistent=true
|
|
179
|
+
*/
|
|
180
|
+
private persistState;
|
|
181
|
+
/**
|
|
182
|
+
* Render the component
|
|
183
|
+
*/
|
|
184
|
+
render(): any;
|
|
185
|
+
}
|