@sekiui/elements 0.0.56 → 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.
Files changed (256) hide show
  1. package/dist/cdn/index.js +1053 -91
  2. package/dist/cdn/p-BJCq8m2o.js +138 -0
  3. package/dist/cdn/p-BfRJQMIU.js +111 -0
  4. package/dist/cdn/{p-bMBhrs0a.js → p-Bp7tjKwQ.js} +427 -7
  5. package/dist/cdn/seki-button.js +1 -1
  6. package/dist/cdn/seki-card-action.js +1 -1
  7. package/dist/cdn/seki-card-content.js +1 -1
  8. package/dist/cdn/seki-card-description.js +1 -1
  9. package/dist/cdn/seki-card-footer.js +1 -1
  10. package/dist/cdn/seki-card-header.js +1 -1
  11. package/dist/cdn/seki-card-title.js +1 -1
  12. package/dist/cdn/seki-card.js +1 -1
  13. package/dist/cdn/seki-field-description.js +1 -1
  14. package/dist/cdn/seki-field-error.js +1 -1
  15. package/dist/cdn/seki-field-group.js +1 -1
  16. package/dist/cdn/seki-field-label.js +1 -1
  17. package/dist/cdn/seki-field-legend.js +1 -1
  18. package/dist/cdn/seki-field.js +1 -1
  19. package/dist/cdn/seki-fieldset.js +1 -1
  20. package/dist/cdn/seki-input.js +1 -1
  21. package/dist/cdn/seki-select-content.js +1 -1
  22. package/dist/cdn/seki-select-group.js +1 -1
  23. package/dist/cdn/seki-select-option.js +1 -1
  24. package/dist/cdn/seki-select-trigger.js +1 -1
  25. package/dist/cdn/seki-select.js +1 -1
  26. package/dist/cdn/seki-sidebar-content.d.ts +11 -0
  27. package/dist/cdn/seki-sidebar-content.js +38 -0
  28. package/dist/cdn/seki-sidebar-footer.d.ts +11 -0
  29. package/dist/cdn/seki-sidebar-footer.js +38 -0
  30. package/dist/cdn/seki-sidebar-group.d.ts +11 -0
  31. package/dist/cdn/seki-sidebar-group.js +131 -0
  32. package/dist/cdn/seki-sidebar-header.d.ts +11 -0
  33. package/dist/cdn/seki-sidebar-header.js +38 -0
  34. package/dist/cdn/seki-sidebar-menu-item.d.ts +11 -0
  35. package/dist/cdn/seki-sidebar-menu-item.js +200 -0
  36. package/dist/cdn/seki-sidebar-menu-sub.d.ts +11 -0
  37. package/dist/cdn/seki-sidebar-menu-sub.js +123 -0
  38. package/dist/cdn/seki-sidebar-menu.d.ts +11 -0
  39. package/dist/cdn/seki-sidebar-menu.js +38 -0
  40. package/dist/cdn/seki-sidebar-trigger.d.ts +11 -0
  41. package/dist/cdn/seki-sidebar-trigger.js +109 -0
  42. package/dist/cdn/seki-sidebar.d.ts +11 -0
  43. package/dist/cdn/seki-sidebar.js +380 -0
  44. package/dist/cdn/seki-skeleton.js +2 -2
  45. package/dist/cdn/seki-switch.js +1 -1
  46. package/dist/cdn/seki-tooltip.js +1 -1
  47. package/dist/cjs/{index-Dd6_-KaR.js → index-tQYksITZ.js} +426 -6
  48. package/dist/cjs/index.cjs.js +1115 -63
  49. package/dist/cjs/keyboard-Cjl5HYES.js +142 -0
  50. package/dist/cjs/loader.cjs.js +2 -2
  51. package/dist/cjs/seki-button.cjs.entry.js +1 -1
  52. package/dist/cjs/seki-card-action.cjs.entry.js +1 -1
  53. package/dist/cjs/seki-card-content.cjs.entry.js +1 -1
  54. package/dist/cjs/seki-card-description.cjs.entry.js +1 -1
  55. package/dist/cjs/seki-card-footer.cjs.entry.js +1 -1
  56. package/dist/cjs/seki-card-header.cjs.entry.js +1 -1
  57. package/dist/cjs/seki-card-title.cjs.entry.js +1 -1
  58. package/dist/cjs/seki-card.cjs.entry.js +1 -1
  59. package/dist/cjs/seki-field-description.cjs.entry.js +1 -1
  60. package/dist/cjs/seki-field-error.cjs.entry.js +1 -1
  61. package/dist/cjs/seki-field-group.cjs.entry.js +1 -1
  62. package/dist/cjs/seki-field-label.cjs.entry.js +1 -1
  63. package/dist/cjs/seki-field-legend.cjs.entry.js +1 -1
  64. package/dist/cjs/seki-field.cjs.entry.js +1 -1
  65. package/dist/cjs/seki-fieldset.cjs.entry.js +1 -1
  66. package/dist/cjs/seki-input.cjs.entry.js +1 -1
  67. package/dist/cjs/seki-select-content.cjs.entry.js +1 -1
  68. package/dist/cjs/seki-select-group.cjs.entry.js +1 -1
  69. package/dist/cjs/seki-select-option.cjs.entry.js +1 -1
  70. package/dist/cjs/seki-select-trigger.cjs.entry.js +1 -1
  71. package/dist/cjs/seki-select.cjs.entry.js +1 -1
  72. package/dist/cjs/seki-sidebar-content.cjs.entry.js +20 -0
  73. package/dist/cjs/seki-sidebar-footer.cjs.entry.js +20 -0
  74. package/dist/cjs/seki-sidebar-group.cjs.entry.js +105 -0
  75. package/dist/cjs/seki-sidebar-header.cjs.entry.js +20 -0
  76. package/dist/cjs/seki-sidebar-menu-item.cjs.entry.js +174 -0
  77. package/dist/cjs/seki-sidebar-menu-sub.cjs.entry.js +99 -0
  78. package/dist/cjs/seki-sidebar-menu.cjs.entry.js +20 -0
  79. package/dist/cjs/seki-sidebar-trigger.cjs.entry.js +86 -0
  80. package/dist/cjs/seki-sidebar.cjs.entry.js +342 -0
  81. package/dist/cjs/seki-skeleton.cjs.entry.js +2 -2
  82. package/dist/cjs/seki-switch.cjs.entry.js +81 -3
  83. package/dist/cjs/seki-tooltip.cjs.entry.js +1 -1
  84. package/dist/cjs/sekiui.cjs.js +2 -2
  85. package/dist/collection/collection-manifest.json +9 -0
  86. package/dist/collection/components/sidebar/seki-sidebar-content.css +82 -0
  87. package/dist/collection/components/sidebar/seki-sidebar-content.js +33 -0
  88. package/dist/collection/components/sidebar/seki-sidebar-footer.css +44 -0
  89. package/dist/collection/components/sidebar/seki-sidebar-footer.js +31 -0
  90. package/dist/collection/components/sidebar/seki-sidebar-group.css +158 -0
  91. package/dist/collection/components/sidebar/seki-sidebar-group.js +300 -0
  92. package/dist/collection/components/sidebar/seki-sidebar-header.css +44 -0
  93. package/dist/collection/components/sidebar/seki-sidebar-header.js +32 -0
  94. package/dist/collection/components/sidebar/seki-sidebar-menu-item.css +196 -0
  95. package/dist/collection/components/sidebar/seki-sidebar-menu-item.js +403 -0
  96. package/dist/collection/components/sidebar/seki-sidebar-menu-sub.css +357 -0
  97. package/dist/collection/components/sidebar/seki-sidebar-menu-sub.js +256 -0
  98. package/dist/collection/components/sidebar/seki-sidebar-menu.css +25 -0
  99. package/dist/collection/components/sidebar/seki-sidebar-menu.js +32 -0
  100. package/dist/collection/components/sidebar/seki-sidebar-trigger.css +68 -0
  101. package/dist/collection/components/sidebar/seki-sidebar-trigger.js +175 -0
  102. package/dist/collection/components/sidebar/seki-sidebar.css +352 -0
  103. package/dist/collection/components/sidebar/seki-sidebar.js +812 -0
  104. package/dist/collection/components/sidebar/types.js +18 -0
  105. package/dist/collection/components/skeleton/seki-skeleton.js +1 -1
  106. package/dist/collection/index.js +7 -0
  107. package/dist/collection/services/focus.js +192 -0
  108. package/dist/collection/services/index.js +7 -0
  109. package/dist/collection/services/keyboard.js +136 -0
  110. package/dist/collection/services/media-query.js +254 -0
  111. package/dist/collection/types.js +41 -0
  112. package/dist/collection/utils/a11y.js +291 -0
  113. package/dist/collection/utils/common.js +286 -0
  114. package/dist/components/index.js +1053 -91
  115. package/dist/components/p-BJCq8m2o.js +138 -0
  116. package/dist/components/{p-QhPshhKB.js → p-BzYKy7d3.js} +427 -7
  117. package/dist/components/p-DwTISp-i.js +111 -0
  118. package/dist/components/seki-button.js +1 -1
  119. package/dist/components/seki-card-action.js +1 -1
  120. package/dist/components/seki-card-content.js +1 -1
  121. package/dist/components/seki-card-description.js +1 -1
  122. package/dist/components/seki-card-footer.js +1 -1
  123. package/dist/components/seki-card-header.js +1 -1
  124. package/dist/components/seki-card-title.js +1 -1
  125. package/dist/components/seki-card.js +1 -1
  126. package/dist/components/seki-field-description.js +1 -1
  127. package/dist/components/seki-field-error.js +1 -1
  128. package/dist/components/seki-field-group.js +1 -1
  129. package/dist/components/seki-field-label.js +1 -1
  130. package/dist/components/seki-field-legend.js +1 -1
  131. package/dist/components/seki-field.js +1 -1
  132. package/dist/components/seki-fieldset.js +1 -1
  133. package/dist/components/seki-input.js +1 -1
  134. package/dist/components/seki-select-content.js +1 -1
  135. package/dist/components/seki-select-group.js +1 -1
  136. package/dist/components/seki-select-option.js +1 -1
  137. package/dist/components/seki-select-trigger.js +1 -1
  138. package/dist/components/seki-select.js +1 -1
  139. package/dist/components/seki-sidebar-content.d.ts +11 -0
  140. package/dist/components/seki-sidebar-content.js +38 -0
  141. package/dist/components/seki-sidebar-footer.d.ts +11 -0
  142. package/dist/components/seki-sidebar-footer.js +38 -0
  143. package/dist/components/seki-sidebar-group.d.ts +11 -0
  144. package/dist/components/seki-sidebar-group.js +131 -0
  145. package/dist/components/seki-sidebar-header.d.ts +11 -0
  146. package/dist/components/seki-sidebar-header.js +38 -0
  147. package/dist/components/seki-sidebar-menu-item.d.ts +11 -0
  148. package/dist/components/seki-sidebar-menu-item.js +200 -0
  149. package/dist/components/seki-sidebar-menu-sub.d.ts +11 -0
  150. package/dist/components/seki-sidebar-menu-sub.js +123 -0
  151. package/dist/components/seki-sidebar-menu.d.ts +11 -0
  152. package/dist/components/seki-sidebar-menu.js +38 -0
  153. package/dist/components/seki-sidebar-trigger.d.ts +11 -0
  154. package/dist/components/seki-sidebar-trigger.js +109 -0
  155. package/dist/components/seki-sidebar.d.ts +11 -0
  156. package/dist/components/seki-sidebar.js +380 -0
  157. package/dist/components/seki-skeleton.js +2 -2
  158. package/dist/components/seki-switch.js +1 -1
  159. package/dist/components/seki-tooltip.js +1 -1
  160. package/dist/esm/{index-CuXbV_yz.js → index-Dfzpqq0a.js} +426 -6
  161. package/dist/esm/index.js +1053 -63
  162. package/dist/esm/keyboard-BJCq8m2o.js +138 -0
  163. package/dist/esm/loader.js +3 -3
  164. package/dist/esm/seki-button.entry.js +1 -1
  165. package/dist/esm/seki-card-action.entry.js +1 -1
  166. package/dist/esm/seki-card-content.entry.js +1 -1
  167. package/dist/esm/seki-card-description.entry.js +1 -1
  168. package/dist/esm/seki-card-footer.entry.js +1 -1
  169. package/dist/esm/seki-card-header.entry.js +1 -1
  170. package/dist/esm/seki-card-title.entry.js +1 -1
  171. package/dist/esm/seki-card.entry.js +1 -1
  172. package/dist/esm/seki-field-description.entry.js +1 -1
  173. package/dist/esm/seki-field-error.entry.js +1 -1
  174. package/dist/esm/seki-field-group.entry.js +1 -1
  175. package/dist/esm/seki-field-label.entry.js +1 -1
  176. package/dist/esm/seki-field-legend.entry.js +1 -1
  177. package/dist/esm/seki-field.entry.js +1 -1
  178. package/dist/esm/seki-fieldset.entry.js +1 -1
  179. package/dist/esm/seki-input.entry.js +1 -1
  180. package/dist/esm/seki-select-content.entry.js +1 -1
  181. package/dist/esm/seki-select-group.entry.js +1 -1
  182. package/dist/esm/seki-select-option.entry.js +1 -1
  183. package/dist/esm/seki-select-trigger.entry.js +1 -1
  184. package/dist/esm/seki-select.entry.js +1 -1
  185. package/dist/esm/seki-sidebar-content.entry.js +18 -0
  186. package/dist/esm/seki-sidebar-footer.entry.js +18 -0
  187. package/dist/esm/seki-sidebar-group.entry.js +103 -0
  188. package/dist/esm/seki-sidebar-header.entry.js +18 -0
  189. package/dist/esm/seki-sidebar-menu-item.entry.js +172 -0
  190. package/dist/esm/seki-sidebar-menu-sub.entry.js +97 -0
  191. package/dist/esm/seki-sidebar-menu.entry.js +18 -0
  192. package/dist/esm/seki-sidebar-trigger.entry.js +84 -0
  193. package/dist/esm/seki-sidebar.entry.js +340 -0
  194. package/dist/esm/seki-skeleton.entry.js +2 -2
  195. package/dist/esm/seki-switch.entry.js +84 -2
  196. package/dist/esm/seki-tooltip.entry.js +1 -1
  197. package/dist/esm/sekiui.js +3 -3
  198. package/dist/sekiui/index.esm.js +1 -1
  199. package/dist/sekiui/p-01cfb4e7.entry.js +1 -0
  200. package/dist/sekiui/{p-97e6e5ce.entry.js → p-042ec460.entry.js} +1 -1
  201. package/dist/sekiui/{p-3e088b5a.entry.js → p-10c008fc.entry.js} +1 -1
  202. package/dist/sekiui/{p-ed440425.entry.js → p-352bd295.entry.js} +1 -1
  203. package/dist/sekiui/p-37c5f4d9.entry.js +1 -0
  204. package/dist/sekiui/p-40fb71d6.entry.js +1 -0
  205. package/dist/sekiui/{p-eefbc037.entry.js → p-44191aed.entry.js} +1 -1
  206. package/dist/sekiui/{p-81709fc2.entry.js → p-4423d621.entry.js} +1 -1
  207. package/dist/sekiui/{p-9af5286b.entry.js → p-4636588f.entry.js} +1 -1
  208. package/dist/sekiui/p-471b97a5.entry.js +1 -0
  209. package/dist/sekiui/{p-0544d787.entry.js → p-56f0d754.entry.js} +1 -1
  210. package/dist/sekiui/{p-43f7c542.entry.js → p-5bc0f5aa.entry.js} +1 -1
  211. package/dist/sekiui/{p-eedf44b5.entry.js → p-6164cd8a.entry.js} +1 -1
  212. package/dist/sekiui/{p-b479935d.entry.js → p-635f4098.entry.js} +1 -1
  213. package/dist/sekiui/{p-35f8f9c4.entry.js → p-743fc6d9.entry.js} +1 -1
  214. package/dist/sekiui/p-83e65cbe.entry.js +1 -0
  215. package/dist/sekiui/p-8b7bd061.entry.js +1 -0
  216. package/dist/sekiui/{p-009183ab.entry.js → p-8d9a4878.entry.js} +1 -1
  217. package/dist/sekiui/p-9cb9cdfe.entry.js +1 -0
  218. package/dist/sekiui/p-9f2d95d7.entry.js +1 -0
  219. package/dist/sekiui/p-BJCq8m2o.js +1 -0
  220. package/dist/sekiui/p-Dfzpqq0a.js +2 -0
  221. package/dist/sekiui/{p-b22df79e.entry.js → p-a1a71958.entry.js} +1 -1
  222. package/dist/sekiui/{p-dd1e3e87.entry.js → p-a71e0c55.entry.js} +1 -1
  223. package/dist/sekiui/{p-1607dc4d.entry.js → p-ae227955.entry.js} +1 -1
  224. package/dist/sekiui/{p-cf11115c.entry.js → p-b365f5fb.entry.js} +1 -1
  225. package/dist/sekiui/{p-6bde807e.entry.js → p-b387a2a5.entry.js} +1 -1
  226. package/dist/sekiui/p-b8590f4d.entry.js +1 -0
  227. package/dist/sekiui/{p-88f91658.entry.js → p-c98b6d6a.entry.js} +1 -1
  228. package/dist/sekiui/{p-e71ad432.entry.js → p-d73cdb9a.entry.js} +1 -1
  229. package/dist/sekiui/{p-b10d81a6.entry.js → p-d96e770e.entry.js} +1 -1
  230. package/dist/sekiui/p-e62dd89b.entry.js +1 -0
  231. package/dist/sekiui/{p-d4c92041.entry.js → p-e7bb140c.entry.js} +1 -1
  232. package/dist/sekiui/{p-6e238adf.entry.js → p-eecc18f3.entry.js} +1 -1
  233. package/dist/sekiui/{p-4d57c6ea.entry.js → p-ff636955.entry.js} +1 -1
  234. package/dist/sekiui/sekiui.esm.js +1 -1
  235. package/dist/types/components/sidebar/seki-sidebar-content.d.ts +18 -0
  236. package/dist/types/components/sidebar/seki-sidebar-footer.d.ts +16 -0
  237. package/dist/types/components/sidebar/seki-sidebar-group.d.ts +81 -0
  238. package/dist/types/components/sidebar/seki-sidebar-header.d.ts +17 -0
  239. package/dist/types/components/sidebar/seki-sidebar-menu-item.d.ts +104 -0
  240. package/dist/types/components/sidebar/seki-sidebar-menu-sub.d.ts +81 -0
  241. package/dist/types/components/sidebar/seki-sidebar-menu.d.ts +17 -0
  242. package/dist/types/components/sidebar/seki-sidebar-trigger.d.ts +53 -0
  243. package/dist/types/components/sidebar/seki-sidebar.d.ts +185 -0
  244. package/dist/types/components/sidebar/types.d.ts +245 -0
  245. package/dist/types/components.d.ts +508 -0
  246. package/dist/types/index.d.ts +4 -0
  247. package/dist/types/services/focus.d.ts +74 -0
  248. package/dist/types/services/index.d.ts +7 -0
  249. package/dist/types/services/keyboard.d.ts +74 -0
  250. package/dist/types/services/media-query.d.ts +121 -0
  251. package/dist/types/types.d.ts +105 -0
  252. package/dist/types/utils/a11y.d.ts +130 -0
  253. package/dist/types/utils/common.d.ts +142 -0
  254. package/package.json +2 -1
  255. package/dist/sekiui/p-9fe07f6e.entry.js +0 -1
  256. package/dist/sekiui/p-CuXbV_yz.js +0 -2
@@ -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
+ }
@@ -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
+ }