@sekiui/elements 0.0.56 → 0.0.59
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-Cpa2leXN.js +111 -0
- package/dist/cdn/{p-bMBhrs0a.js → p-DxUZSKfL.js} +467 -9
- package/dist/cdn/seki-badge.d.ts +11 -0
- package/dist/cdn/seki-badge.js +109 -0
- package/dist/cdn/seki-button.js +1 -1
- package/dist/cdn/seki-card-action.js +1 -1
- package/dist/cdn/seki-card-content.js +1 -1
- package/dist/cdn/seki-card-description.js +1 -1
- package/dist/cdn/seki-card-footer.js +1 -1
- package/dist/cdn/seki-card-header.js +1 -1
- package/dist/cdn/seki-card-title.js +1 -1
- package/dist/cdn/seki-card.js +1 -1
- package/dist/cdn/seki-field-description.js +1 -1
- package/dist/cdn/seki-field-error.js +1 -1
- package/dist/cdn/seki-field-group.js +1 -1
- package/dist/cdn/seki-field-label.js +1 -1
- package/dist/cdn/seki-field-legend.js +1 -1
- package/dist/cdn/seki-field.js +1 -1
- package/dist/cdn/seki-fieldset.js +1 -1
- package/dist/cdn/seki-input.js +1 -1
- package/dist/cdn/seki-select-content.js +1 -1
- package/dist/cdn/seki-select-group.js +1 -1
- package/dist/cdn/seki-select-option.js +1 -1
- package/dist/cdn/seki-select-trigger.js +1 -1
- package/dist/cdn/seki-select.js +1 -1
- 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-D4RM3EID.js} +466 -8
- 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-badge.cjs.entry.js +85 -0
- package/dist/cjs/seki-button.cjs.entry.js +1 -1
- package/dist/cjs/seki-card-action.cjs.entry.js +1 -1
- package/dist/cjs/seki-card-content.cjs.entry.js +1 -1
- package/dist/cjs/seki-card-description.cjs.entry.js +1 -1
- package/dist/cjs/seki-card-footer.cjs.entry.js +1 -1
- package/dist/cjs/seki-card-header.cjs.entry.js +1 -1
- package/dist/cjs/seki-card-title.cjs.entry.js +1 -1
- package/dist/cjs/seki-card.cjs.entry.js +1 -1
- package/dist/cjs/seki-field-description.cjs.entry.js +1 -1
- package/dist/cjs/seki-field-error.cjs.entry.js +1 -1
- package/dist/cjs/seki-field-group.cjs.entry.js +1 -1
- package/dist/cjs/seki-field-label.cjs.entry.js +1 -1
- package/dist/cjs/seki-field-legend.cjs.entry.js +1 -1
- package/dist/cjs/seki-field.cjs.entry.js +1 -1
- package/dist/cjs/seki-fieldset.cjs.entry.js +1 -1
- package/dist/cjs/seki-input.cjs.entry.js +1 -1
- package/dist/cjs/seki-select-content.cjs.entry.js +1 -1
- package/dist/cjs/seki-select-group.cjs.entry.js +1 -1
- package/dist/cjs/seki-select-option.cjs.entry.js +1 -1
- package/dist/cjs/seki-select-trigger.cjs.entry.js +1 -1
- package/dist/cjs/seki-select.cjs.entry.js +1 -1
- 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 +3 -3
- package/dist/collection/collection-manifest.json +12 -2
- package/dist/collection/components/badge/seki-badge.css +140 -0
- package/dist/collection/components/badge/seki-badge.interface.js +1 -0
- package/dist/collection/components/badge/seki-badge.js +199 -0
- 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-BU1kuAZS.js} +467 -9
- package/dist/components/p-wQy1sEm6.js +111 -0
- package/dist/components/seki-badge.d.ts +11 -0
- package/dist/components/seki-badge.js +109 -0
- package/dist/components/seki-button.js +1 -1
- package/dist/components/seki-card-action.js +1 -1
- package/dist/components/seki-card-content.js +1 -1
- package/dist/components/seki-card-description.js +1 -1
- package/dist/components/seki-card-footer.js +1 -1
- package/dist/components/seki-card-header.js +1 -1
- package/dist/components/seki-card-title.js +1 -1
- package/dist/components/seki-card.js +1 -1
- package/dist/components/seki-field-description.js +1 -1
- package/dist/components/seki-field-error.js +1 -1
- package/dist/components/seki-field-group.js +1 -1
- package/dist/components/seki-field-label.js +1 -1
- package/dist/components/seki-field-legend.js +1 -1
- package/dist/components/seki-field.js +1 -1
- package/dist/components/seki-fieldset.js +1 -1
- package/dist/components/seki-input.js +1 -1
- package/dist/components/seki-select-content.js +1 -1
- package/dist/components/seki-select-group.js +1 -1
- package/dist/components/seki-select-option.js +1 -1
- package/dist/components/seki-select-trigger.js +1 -1
- package/dist/components/seki-select.js +1 -1
- 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-DI_YjzRi.js} +466 -8
- 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-badge.entry.js +83 -0
- package/dist/esm/seki-button.entry.js +1 -1
- package/dist/esm/seki-card-action.entry.js +1 -1
- package/dist/esm/seki-card-content.entry.js +1 -1
- package/dist/esm/seki-card-description.entry.js +1 -1
- package/dist/esm/seki-card-footer.entry.js +1 -1
- package/dist/esm/seki-card-header.entry.js +1 -1
- package/dist/esm/seki-card-title.entry.js +1 -1
- package/dist/esm/seki-card.entry.js +1 -1
- package/dist/esm/seki-field-description.entry.js +1 -1
- package/dist/esm/seki-field-error.entry.js +1 -1
- package/dist/esm/seki-field-group.entry.js +1 -1
- package/dist/esm/seki-field-label.entry.js +1 -1
- package/dist/esm/seki-field-legend.entry.js +1 -1
- package/dist/esm/seki-field.entry.js +1 -1
- package/dist/esm/seki-fieldset.entry.js +1 -1
- package/dist/esm/seki-input.entry.js +1 -1
- package/dist/esm/seki-select-content.entry.js +1 -1
- package/dist/esm/seki-select-group.entry.js +1 -1
- package/dist/esm/seki-select-option.entry.js +1 -1
- package/dist/esm/seki-select-trigger.entry.js +1 -1
- package/dist/esm/seki-select.entry.js +1 -1
- 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 +4 -4
- package/dist/sekiui/index.esm.js +1 -1
- package/dist/sekiui/p-0af1b81a.entry.js +1 -0
- package/dist/sekiui/p-0ca6b9f0.entry.js +1 -0
- package/dist/sekiui/{p-cf11115c.entry.js → p-1480b41a.entry.js} +1 -1
- package/dist/sekiui/{p-dd1e3e87.entry.js → p-161be4d4.entry.js} +1 -1
- package/dist/sekiui/{p-e71ad432.entry.js → p-1685e673.entry.js} +1 -1
- package/dist/sekiui/p-26b629bc.entry.js +1 -0
- package/dist/sekiui/{p-0544d787.entry.js → p-27deb555.entry.js} +1 -1
- package/dist/sekiui/p-37fa684c.entry.js +1 -0
- package/dist/sekiui/{p-1607dc4d.entry.js → p-402a5db6.entry.js} +1 -1
- package/dist/sekiui/{p-6bde807e.entry.js → p-40ba3ad6.entry.js} +1 -1
- package/dist/sekiui/{p-d4c92041.entry.js → p-4867d02d.entry.js} +1 -1
- package/dist/sekiui/p-4b29dbda.entry.js +1 -0
- package/dist/sekiui/{p-b10d81a6.entry.js → p-587fd313.entry.js} +1 -1
- package/dist/sekiui/{p-3e088b5a.entry.js → p-58ab95eb.entry.js} +1 -1
- package/dist/sekiui/p-60ff3543.entry.js +1 -0
- package/dist/sekiui/{p-9af5286b.entry.js → p-68b1fa1a.entry.js} +1 -1
- package/dist/sekiui/{p-43f7c542.entry.js → p-6a922121.entry.js} +1 -1
- package/dist/sekiui/{p-4d57c6ea.entry.js → p-6f5bf5af.entry.js} +1 -1
- package/dist/sekiui/{p-88f91658.entry.js → p-84d47cab.entry.js} +1 -1
- package/dist/sekiui/p-9dcd07b2.entry.js +1 -0
- package/dist/sekiui/p-BJCq8m2o.js +1 -0
- package/dist/sekiui/p-DI_YjzRi.js +2 -0
- package/dist/sekiui/p-ab9d1ba5.entry.js +1 -0
- package/dist/sekiui/p-b525d85a.entry.js +1 -0
- package/dist/sekiui/{p-ed440425.entry.js → p-b64e7007.entry.js} +1 -1
- package/dist/sekiui/{p-6e238adf.entry.js → p-b7f2b568.entry.js} +1 -1
- package/dist/sekiui/{p-009183ab.entry.js → p-c642ab55.entry.js} +1 -1
- package/dist/sekiui/{p-eefbc037.entry.js → p-c74bd925.entry.js} +1 -1
- package/dist/sekiui/p-c83d94c4.entry.js +1 -0
- package/dist/sekiui/p-ce1bbe04.entry.js +1 -0
- package/dist/sekiui/{p-b22df79e.entry.js → p-cf552ff9.entry.js} +1 -1
- package/dist/sekiui/{p-81709fc2.entry.js → p-d194caf1.entry.js} +1 -1
- package/dist/sekiui/{p-b479935d.entry.js → p-dfa2f8cd.entry.js} +1 -1
- package/dist/sekiui/{p-eedf44b5.entry.js → p-e6d5f56e.entry.js} +1 -1
- package/dist/sekiui/{p-97e6e5ce.entry.js → p-f1ffc3fa.entry.js} +1 -1
- package/dist/sekiui/{p-35f8f9c4.entry.js → p-f863f36b.entry.js} +1 -1
- package/dist/sekiui/sekiui.esm.js +1 -1
- package/dist/types/components/badge/seki-badge.d.ts +43 -0
- package/dist/types/components/badge/seki-badge.interface.d.ts +88 -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 +599 -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/stencil-public-runtime.d.ts +19 -9
- 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 +10 -2
- package/dist/sekiui/p-9fe07f6e.entry.js +0 -1
- package/dist/sekiui/p-CuXbV_yz.js +0 -2
|
@@ -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
|
+
}
|
|
@@ -0,0 +1,245 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Sidebar Component Type Definitions
|
|
3
|
+
* @module sidebar/types
|
|
4
|
+
*
|
|
5
|
+
* Complete TypeScript interfaces and types for the sidebar component system.
|
|
6
|
+
* These types are used throughout the component implementation, tests, and exported
|
|
7
|
+
* to the npm package for consumer IDE autocomplete support.
|
|
8
|
+
*/
|
|
9
|
+
/**
|
|
10
|
+
* SidebarState - Core state object managed by the sidebar provider
|
|
11
|
+
* Defines the complete state of the sidebar including collapse state, layout variant,
|
|
12
|
+
* and responsive configuration.
|
|
13
|
+
*/
|
|
14
|
+
export interface SidebarState {
|
|
15
|
+
/** Whether sidebar is open/expanded (true) or closed/collapsed (false) */
|
|
16
|
+
isOpen: boolean;
|
|
17
|
+
/** Collapse mechanism: 'offcanvas' (slides), 'icon' (shrinks to icons), 'none' (fixed) */
|
|
18
|
+
collapseMode: 'offcanvas' | 'icon' | 'none';
|
|
19
|
+
/** Layout variant: 'sidebar' (standard), 'floating' (detached), 'inset' (integrated) */
|
|
20
|
+
variant: 'sidebar' | 'floating' | 'inset';
|
|
21
|
+
/** Whether viewport is mobile (<mobileBreakpoint) */
|
|
22
|
+
isMobile: boolean;
|
|
23
|
+
/** localStorage key for state persistence */
|
|
24
|
+
persistenceKey: string;
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* Default sidebar state values
|
|
28
|
+
*/
|
|
29
|
+
export declare const DEFAULT_SIDEBAR_STATE: SidebarState;
|
|
30
|
+
/**
|
|
31
|
+
* SidebarProps - Properties for the main seki-sidebar component
|
|
32
|
+
*/
|
|
33
|
+
export interface SidebarProps {
|
|
34
|
+
/** Layout variant: standard, floating (detached), or inset */
|
|
35
|
+
variant?: 'sidebar' | 'floating' | 'inset';
|
|
36
|
+
/** Collapse mechanism: offcanvas (slides), icon (shrinks), or none (fixed) */
|
|
37
|
+
collapseMode?: 'offcanvas' | 'icon' | 'none';
|
|
38
|
+
/** Initial open/closed state */
|
|
39
|
+
defaultOpen?: boolean;
|
|
40
|
+
/** Persist state to localStorage */
|
|
41
|
+
persistent?: boolean;
|
|
42
|
+
/** Viewport width for mobile detection (px) */
|
|
43
|
+
mobileBreakpoint?: number;
|
|
44
|
+
/** Position: left or right side of viewport */
|
|
45
|
+
side?: 'left' | 'right';
|
|
46
|
+
/** Storage key for persisted state */
|
|
47
|
+
persistenceKey?: string;
|
|
48
|
+
/** Callback fired when open state changes */
|
|
49
|
+
onOpenChange?: (isOpen: boolean) => void;
|
|
50
|
+
}
|
|
51
|
+
/**
|
|
52
|
+
* SidebarTriggerProps - Properties for the seki-sidebar-trigger component
|
|
53
|
+
*/
|
|
54
|
+
export interface SidebarTriggerProps {
|
|
55
|
+
/** Accessibility label for the button */
|
|
56
|
+
ariaLabel?: string;
|
|
57
|
+
/** Icon name or SVG path (optional) */
|
|
58
|
+
icon?: string;
|
|
59
|
+
}
|
|
60
|
+
/**
|
|
61
|
+
* SidebarGroupProps - Properties for the seki-sidebar-group component
|
|
62
|
+
*/
|
|
63
|
+
export interface SidebarGroupProps {
|
|
64
|
+
/** Section header text (optional) */
|
|
65
|
+
title?: string;
|
|
66
|
+
/** Allow collapsing this group */
|
|
67
|
+
collapsible?: boolean;
|
|
68
|
+
/** Initial collapsed state */
|
|
69
|
+
defaultCollapsed?: boolean;
|
|
70
|
+
/** Optional action button configuration */
|
|
71
|
+
action?: {
|
|
72
|
+
icon: string;
|
|
73
|
+
label: string;
|
|
74
|
+
onClick: () => void;
|
|
75
|
+
};
|
|
76
|
+
}
|
|
77
|
+
/**
|
|
78
|
+
* SidebarMenuItemProps - Properties for the seki-sidebar-menu-item component
|
|
79
|
+
*/
|
|
80
|
+
export interface SidebarMenuItemProps {
|
|
81
|
+
/** Navigation URL (optional) */
|
|
82
|
+
href?: string;
|
|
83
|
+
/** Link target: _blank, _self, etc. */
|
|
84
|
+
target?: string;
|
|
85
|
+
/** Disable interaction */
|
|
86
|
+
disabled?: boolean;
|
|
87
|
+
/** Highlight as current page */
|
|
88
|
+
isActive?: boolean;
|
|
89
|
+
/** Badge indicator for the item */
|
|
90
|
+
badge?: {
|
|
91
|
+
text: string;
|
|
92
|
+
variant?: 'default' | 'secondary' | 'destructive';
|
|
93
|
+
};
|
|
94
|
+
/** Accessibility label override */
|
|
95
|
+
ariaLabel?: string;
|
|
96
|
+
/** ARIA current value for active items */
|
|
97
|
+
ariaCurrentValue?: 'page' | 'step' | 'location' | 'date' | 'time' | 'true' | 'false';
|
|
98
|
+
/** Callback fired on click */
|
|
99
|
+
onClick?: (event: MouseEvent) => void;
|
|
100
|
+
}
|
|
101
|
+
/**
|
|
102
|
+
* SidebarMenuSubProps - Properties for the seki-sidebar-menu-sub component
|
|
103
|
+
*/
|
|
104
|
+
export interface SidebarMenuSubProps {
|
|
105
|
+
/** Label for the submenu (shown when expanded) */
|
|
106
|
+
label?: string;
|
|
107
|
+
/** Initial collapsed state */
|
|
108
|
+
defaultCollapsed?: boolean;
|
|
109
|
+
}
|
|
110
|
+
/**
|
|
111
|
+
* MenuItem - Individual navigation item with optional nesting
|
|
112
|
+
*/
|
|
113
|
+
export interface MenuItem {
|
|
114
|
+
/** Unique identifier */
|
|
115
|
+
id: string;
|
|
116
|
+
/** Display text */
|
|
117
|
+
label: string;
|
|
118
|
+
/** Navigation URL (optional) */
|
|
119
|
+
href?: string;
|
|
120
|
+
/** Icon name or SVG path (optional) */
|
|
121
|
+
icon?: string;
|
|
122
|
+
/** Badge indicator (optional) */
|
|
123
|
+
badge?: {
|
|
124
|
+
text: string;
|
|
125
|
+
variant?: 'default' | 'secondary' | 'destructive';
|
|
126
|
+
};
|
|
127
|
+
/** Highlight as current page */
|
|
128
|
+
isActive?: boolean;
|
|
129
|
+
/** Prevent interaction */
|
|
130
|
+
disabled?: boolean;
|
|
131
|
+
/** Nested menu items */
|
|
132
|
+
children?: MenuItem[];
|
|
133
|
+
/** Custom click handler */
|
|
134
|
+
onClick?: (item: MenuItem) => void;
|
|
135
|
+
/** Accessibility label (optional) */
|
|
136
|
+
ariaLabel?: string;
|
|
137
|
+
}
|
|
138
|
+
/**
|
|
139
|
+
* MenuGroup - Container for related menu items with optional header
|
|
140
|
+
*/
|
|
141
|
+
export interface MenuGroup {
|
|
142
|
+
/** Unique identifier */
|
|
143
|
+
id: string;
|
|
144
|
+
/** Section header text (optional) */
|
|
145
|
+
title?: string;
|
|
146
|
+
/** List of menu items in this group */
|
|
147
|
+
items: MenuItem[];
|
|
148
|
+
/** Allow collapsing this group */
|
|
149
|
+
collapsible?: boolean;
|
|
150
|
+
/** Current collapsed state */
|
|
151
|
+
isCollapsed?: boolean;
|
|
152
|
+
/** Optional action button */
|
|
153
|
+
action?: {
|
|
154
|
+
icon: string;
|
|
155
|
+
onClick: () => void;
|
|
156
|
+
ariaLabel: string;
|
|
157
|
+
};
|
|
158
|
+
}
|
|
159
|
+
/**
|
|
160
|
+
* Event detail payloads for sidebar custom events
|
|
161
|
+
*/
|
|
162
|
+
/** Detail payload for openChange event */
|
|
163
|
+
export interface OpenChangeDetail {
|
|
164
|
+
isOpen: boolean;
|
|
165
|
+
}
|
|
166
|
+
/** Detail payload for variantChange event */
|
|
167
|
+
export interface VariantChangeDetail {
|
|
168
|
+
variant: 'sidebar' | 'floating' | 'inset';
|
|
169
|
+
}
|
|
170
|
+
/** Detail payload for collapseModeChange event */
|
|
171
|
+
export interface CollapseModeChangeDetail {
|
|
172
|
+
collapseMode: 'offcanvas' | 'icon' | 'none';
|
|
173
|
+
}
|
|
174
|
+
/** Detail payload for mobileStateChange event */
|
|
175
|
+
export interface MobileStateChangeDetail {
|
|
176
|
+
isMobile: boolean;
|
|
177
|
+
}
|
|
178
|
+
/** Detail payload for collapsedChange event (on groups) */
|
|
179
|
+
export interface CollapsedChangeDetail {
|
|
180
|
+
isCollapsed: boolean;
|
|
181
|
+
}
|
|
182
|
+
/** Detail payload for navigate event (on menu items) */
|
|
183
|
+
export interface NavigateDetail {
|
|
184
|
+
href: string;
|
|
185
|
+
target?: string;
|
|
186
|
+
}
|
|
187
|
+
/**
|
|
188
|
+
* Component instance types for TypeScript consumers
|
|
189
|
+
*/
|
|
190
|
+
export interface SidebarElement extends HTMLElement {
|
|
191
|
+
/** Current sidebar state */
|
|
192
|
+
getState(): SidebarState;
|
|
193
|
+
/** Update sidebar state */
|
|
194
|
+
setState(state: Partial<SidebarState>): Promise<void>;
|
|
195
|
+
/** Open the sidebar (set isOpen=true) */
|
|
196
|
+
open(): Promise<void>;
|
|
197
|
+
/** Close the sidebar (set isOpen=false) */
|
|
198
|
+
close(): Promise<void>;
|
|
199
|
+
/** Toggle the sidebar open/closed state */
|
|
200
|
+
toggle(): Promise<void>;
|
|
201
|
+
}
|
|
202
|
+
export interface SidebarTriggerElement extends HTMLElement {
|
|
203
|
+
readonly ariaExpanded: string | null;
|
|
204
|
+
}
|
|
205
|
+
export interface SidebarGroupElement extends HTMLElement {
|
|
206
|
+
/** Get current collapsed state */
|
|
207
|
+
isCollapsed(): boolean;
|
|
208
|
+
/** Set collapsed state */
|
|
209
|
+
setCollapsed(collapsed: boolean): Promise<void>;
|
|
210
|
+
}
|
|
211
|
+
export interface SidebarMenuItemElement extends HTMLElement {
|
|
212
|
+
readonly ariaCurrent: string | null;
|
|
213
|
+
}
|
|
214
|
+
export interface SidebarMenuSubElement extends HTMLElement {
|
|
215
|
+
readonly ariaExpanded: string | null;
|
|
216
|
+
}
|
|
217
|
+
/**
|
|
218
|
+
* Event handler type for media query changes
|
|
219
|
+
*/
|
|
220
|
+
export type MediaQueryChangeHandler = (mq: {
|
|
221
|
+
matches: boolean;
|
|
222
|
+
}) => void;
|
|
223
|
+
/**
|
|
224
|
+
* MediaQueryList-like interface for browser compatibility
|
|
225
|
+
*/
|
|
226
|
+
export interface MediaQueryListCompat {
|
|
227
|
+
matches: boolean;
|
|
228
|
+
addEventListener: (event: string, handler: MediaQueryChangeHandler) => void;
|
|
229
|
+
removeListener: (handler: MediaQueryChangeHandler) => void;
|
|
230
|
+
addListener: (handler: MediaQueryChangeHandler) => void;
|
|
231
|
+
}
|
|
232
|
+
/**
|
|
233
|
+
* ResizeObserver-like interface for browser compatibility
|
|
234
|
+
*/
|
|
235
|
+
export interface ResizeObserverCompat {
|
|
236
|
+
disconnect: () => void;
|
|
237
|
+
observe: (element: HTMLElement) => void;
|
|
238
|
+
}
|
|
239
|
+
/**
|
|
240
|
+
* Stencil Context type for sidebar state distribution
|
|
241
|
+
*/
|
|
242
|
+
export interface SidebarContextValue {
|
|
243
|
+
state: SidebarState;
|
|
244
|
+
setState: (partial: Partial<SidebarState>) => Promise<void>;
|
|
245
|
+
}
|