kempo-ui 0.3.5 → 0.3.7

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 (146) hide show
  1. package/AGENTS.md +2 -1
  2. package/dist/components/Aside.js +1 -1
  3. package/dist/components/Main.js +1 -1
  4. package/docs/components/accordion.html +240 -8
  5. package/docs/components/aside-items.html +13 -9
  6. package/docs/components/aside-menu.html +13 -9
  7. package/docs/components/aside-push.html +11 -6
  8. package/docs/components/aside.html +289 -115
  9. package/docs/components/card.html +238 -7
  10. package/docs/components/color-picker.html +245 -14
  11. package/docs/components/content-slider.html +240 -8
  12. package/docs/components/context.html +241 -7
  13. package/docs/components/dialog.html +238 -7
  14. package/docs/components/dropdown.html +238 -7
  15. package/docs/components/filter-list.html +239 -10
  16. package/docs/components/focus-capture.html +241 -10
  17. package/docs/components/html-editor.html +266 -35
  18. package/docs/components/hybrid-component.html +238 -6
  19. package/docs/components/icon.html +239 -9
  20. package/docs/components/import.html +239 -8
  21. package/docs/components/light-component.html +239 -7
  22. package/docs/components/nav.html +240 -8
  23. package/docs/components/photo-viewer.html +239 -9
  24. package/docs/components/resize.html +240 -9
  25. package/docs/components/shadow-component.html +239 -7
  26. package/docs/components/show-more.html +237 -8
  27. package/docs/components/sortable.html +239 -8
  28. package/docs/components/spinner.html +237 -6
  29. package/docs/components/split.html +241 -10
  30. package/docs/components/table.html +241 -11
  31. package/docs/components/tableControls.html +240 -7
  32. package/docs/components/tableCustomFields.html +241 -8
  33. package/docs/components/tableFetchRecords.html +239 -7
  34. package/docs/components/tableFieldSortHide.html +239 -7
  35. package/docs/components/tablePagination.html +246 -13
  36. package/docs/components/tablePlaceholder.html +241 -8
  37. package/docs/components/tableRecordEditing.html +241 -8
  38. package/docs/components/tableRecordFiltering.html +239 -7
  39. package/docs/components/tableRecordHiding.html +241 -9
  40. package/docs/components/tableRecordSearching.html +239 -7
  41. package/docs/components/tableRecordSelection.html +240 -7
  42. package/docs/components/tableRowControls.html +241 -8
  43. package/docs/components/tableServerSync.html +245 -11
  44. package/docs/components/tableSorting.html +239 -7
  45. package/docs/components/tabs.html +240 -7
  46. package/docs/components/tags.html +239 -7
  47. package/docs/components/theme-select.html +239 -7
  48. package/docs/components/theme-switcher.html +240 -8
  49. package/docs/components/timestamp.html +239 -8
  50. package/docs/components/toast.html +240 -8
  51. package/docs/components/toggle.html +240 -9
  52. package/docs/components/tree.html +239 -8
  53. package/docs/index.html +244 -6
  54. package/docs/prod.config.json +0 -4
  55. package/docs/src/components/Aside.js +1 -1
  56. package/docs/src/components/Main.js +1 -1
  57. package/docs/utils/context.html +237 -6
  58. package/docs/utils/cookie.html +251 -21
  59. package/docs/utils/debounce.html +236 -5
  60. package/docs/utils/drag.html +236 -5
  61. package/docs/utils/elevation.html +238 -6
  62. package/docs/utils/formatTimestamp.html +239 -9
  63. package/docs/utils/object.html +236 -5
  64. package/docs/utils/propConverters.html +233 -3
  65. package/docs/utils/string.html +236 -5
  66. package/docs/utils/theme.html +237 -6
  67. package/docs/utils/toTitleCase.html +239 -9
  68. package/docs/utils/type.html +236 -5
  69. package/docs/utils/wait.html +236 -5
  70. package/docs-src/.config.js +16 -0
  71. package/docs-src/bare.template.html +16 -0
  72. package/docs-src/components/accordion.page.html +201 -0
  73. package/docs-src/components/aside-items.page.html +36 -0
  74. package/docs-src/components/aside-menu.page.html +36 -0
  75. package/docs-src/components/aside-push.page.html +20 -0
  76. package/docs-src/components/aside.page.html +494 -0
  77. package/docs-src/components/card.page.html +78 -0
  78. package/docs-src/components/color-picker.page.html +559 -0
  79. package/docs-src/components/content-slider.page.html +266 -0
  80. package/docs-src/components/context.page.html +214 -0
  81. package/docs-src/components/dialog.page.html +365 -0
  82. package/docs-src/components/dropdown.page.html +300 -0
  83. package/docs-src/components/filter-list.page.html +117 -0
  84. package/docs-src/components/focus-capture.page.html +97 -0
  85. package/docs-src/components/html-editor.page.html +423 -0
  86. package/docs-src/components/hybrid-component.page.html +96 -0
  87. package/docs-src/components/icon.page.html +208 -0
  88. package/docs-src/components/import.page.html +76 -0
  89. package/docs-src/components/light-component.page.html +99 -0
  90. package/docs-src/components/nav.page.html +106 -0
  91. package/docs-src/components/photo-viewer.page.html +253 -0
  92. package/docs-src/components/resize.page.html +161 -0
  93. package/docs-src/components/shadow-component.page.html +84 -0
  94. package/docs-src/components/show-more.page.html +113 -0
  95. package/docs-src/components/sortable.page.html +117 -0
  96. package/docs-src/components/spinner.page.html +197 -0
  97. package/docs-src/components/split.page.html +195 -0
  98. package/docs-src/components/table.page.html +283 -0
  99. package/docs-src/components/tableControls.page.html +64 -0
  100. package/docs-src/components/tableCustomFields.page.html +124 -0
  101. package/docs-src/components/tableFetchRecords.page.html +95 -0
  102. package/docs-src/components/tableFieldSortHide.page.html +56 -0
  103. package/docs-src/components/tablePagination.page.html +85 -0
  104. package/docs-src/components/tablePlaceholder.page.html +73 -0
  105. package/docs-src/components/tableRecordEditing.page.html +161 -0
  106. package/docs-src/components/tableRecordFiltering.page.html +69 -0
  107. package/docs-src/components/tableRecordHiding.page.html +65 -0
  108. package/docs-src/components/tableRecordSearching.page.html +56 -0
  109. package/docs-src/components/tableRecordSelection.page.html +60 -0
  110. package/docs-src/components/tableRowControls.page.html +62 -0
  111. package/docs-src/components/tableServerSync.page.html +129 -0
  112. package/docs-src/components/tableSorting.page.html +54 -0
  113. package/docs-src/components/tabs.page.html +201 -0
  114. package/docs-src/components/tags.page.html +157 -0
  115. package/docs-src/components/theme-select.page.html +106 -0
  116. package/docs-src/components/theme-switcher.page.html +122 -0
  117. package/docs-src/components/timestamp.page.html +109 -0
  118. package/docs-src/components/toast.page.html +338 -0
  119. package/docs-src/components/toggle.page.html +177 -0
  120. package/docs-src/components/tree.page.html +356 -0
  121. package/docs-src/default.template.html +28 -0
  122. package/docs-src/index.page.html +312 -0
  123. package/docs-src/nav.fragment.html +228 -0
  124. package/docs-src/utils/context.page.html +143 -0
  125. package/docs-src/utils/cookie.page.html +128 -0
  126. package/docs-src/utils/debounce.page.html +42 -0
  127. package/docs-src/utils/drag.page.html +64 -0
  128. package/docs-src/utils/elevation.page.html +144 -0
  129. package/docs-src/utils/formatTimestamp.page.html +76 -0
  130. package/docs-src/utils/object.page.html +76 -0
  131. package/docs-src/utils/propConverters.page.html +73 -0
  132. package/docs-src/utils/string.page.html +66 -0
  133. package/docs-src/utils/theme.page.html +136 -0
  134. package/docs-src/utils/toTitleCase.page.html +52 -0
  135. package/docs-src/utils/type.page.html +31 -0
  136. package/docs-src/utils/wait.page.html +31 -0
  137. package/package.json +4 -4
  138. package/scripts/build.js +5 -0
  139. package/scripts/docs.js +5 -52
  140. package/src/components/Aside.js +12 -1
  141. package/src/components/Main.js +1 -1
  142. package/tests/components/Aside.browser-test.js +75 -0
  143. package/docs/dev.config.json +0 -20
  144. package/docs/nav-1.inc.html +0 -168
  145. package/docs/nav.inc.html +0 -168
  146. package/docs/nav.inc.js +0 -70
@@ -11,15 +11,246 @@
11
11
  <link rel="stylesheet" href="../kempo-hljs.css" />
12
12
  <link rel="stylesheet" href="../styles.css" />
13
13
  <script>window.litDisableBundleWarning = true;</script>
14
- <style>.navbar-spacer { height: 55px; }</style>
14
+
15
15
  </head>
16
16
  <body>
17
- <k-import src="../nav-1.inc.html"></k-import>
18
- <h1 class="ta-center">Aside</h1>
17
+
18
+ <k-nav fixed class="bg-primary">
19
+ <button id="toggleNavSideMenu" class="link">
20
+ <k-icon name="menu"></k-icon>
21
+ </button>
22
+ <a href="../" class="d-if ph" style="align-items: center">
23
+ <img src="../media/icon32.png" alt="Kempo UI Icon" class="pr" />
24
+ Kempo UI
25
+ </a>
26
+ <div style="position:relative;margin:0 .25rem;align-self:center;" theme="light">
27
+ <input id="navSearchInput" type="search" placeholder="Search docs..." autocomplete="off" style="width:11rem;" />
28
+ <div id="navSearchDropdown" hidden theme="light" style="position:absolute;top:calc(100% + 4px);left:0;width:min(480px,90vw);max-height:70vh;background:var(--c_bg);border:1px solid var(--c_border);border-radius:var(--radius);overflow:auto;z-index:9999;box-shadow:0 4px 12px rgba(0,0,0,.3);">
29
+ <k-filter-list id="navSearchList" style="display:block;padding:.25rem 0;">
30
+ <k-filter-item filter-keywords="accordion components"><a href="../components/accordion.html">Accordion<br><small>Component</small></a></k-filter-item>
31
+ <k-filter-item filter-keywords="aside sidebar components"><a href="../components/aside.html">Aside<br><small>Component</small></a></k-filter-item>
32
+ <k-filter-item filter-keywords="card components"><a href="../components/card.html">Card<br><small>Component</small></a></k-filter-item>
33
+ <k-filter-item filter-keywords="color picker colorpicker components"><a href="../components/color-picker.html">Color Picker<br><small>Component</small></a></k-filter-item>
34
+ <k-filter-item filter-keywords="content slider components"><a href="../components/content-slider.html">Content Slider<br><small>Component</small></a></k-filter-item>
35
+ <k-filter-item filter-keywords="context state global components"><a href="../components/context.html">Context<br><small>Component</small></a></k-filter-item>
36
+ <k-filter-item filter-keywords="dialog modal popup components"><a href="../components/dialog.html">Dialog<br><small>Component</small></a></k-filter-item>
37
+ <k-filter-item filter-keywords="dropdown select components"><a href="../components/dropdown.html">Dropdown<br><small>Component</small></a></k-filter-item>
38
+ <k-filter-item filter-keywords="filter list filterlist components"><a href="../components/filter-list.html">Filter List<br><small>Component</small></a></k-filter-item>
39
+ <k-filter-item filter-keywords="focus capture focuscapture components"><a href="../components/focus-capture.html">Focus Capture<br><small>Component</small></a></k-filter-item>
40
+ <k-filter-item filter-keywords="html editor components"><a href="../components/html-editor.html">HTML Editor<br><small>Component</small></a></k-filter-item>
41
+ <k-filter-item filter-keywords="icon components"><a href="../components/icon.html">Icon<br><small>Component</small></a></k-filter-item>
42
+ <k-filter-item filter-keywords="import components"><a href="../components/import.html">Import<br><small>Component</small></a></k-filter-item>
43
+ <k-filter-item filter-keywords="nav navbar navigation components"><a href="../components/nav.html">Nav<br><small>Component</small></a></k-filter-item>
44
+ <k-filter-item filter-keywords="photo viewer photoviewer components"><a href="../components/photo-viewer.html">Photo Viewer<br><small>Component</small></a></k-filter-item>
45
+ <k-filter-item filter-keywords="resize components"><a href="../components/resize.html">Resize<br><small>Component</small></a></k-filter-item>
46
+ <k-filter-item filter-keywords="show more showmore components"><a href="../components/show-more.html">Show More<br><small>Component</small></a></k-filter-item>
47
+ <k-filter-item filter-keywords="sortable drag drop sort components"><a href="../components/sortable.html">Sortable<br><small>Component</small></a></k-filter-item>
48
+ <k-filter-item filter-keywords="spinner loading components"><a href="../components/spinner.html">Spinner<br><small>Component</small></a></k-filter-item>
49
+ <k-filter-item filter-keywords="split pane components"><a href="../components/split.html">Split<br><small>Component</small></a></k-filter-item>
50
+ <k-filter-item filter-keywords="table data grid components"><a href="../components/table.html">Table<br><small>Component</small></a></k-filter-item>
51
+ <k-filter-item filter-keywords="table controls advanced example"><a href="../components/tableControls.html">Table &mdash; Controls<br><small>Advanced Example</small></a></k-filter-item>
52
+ <k-filter-item filter-keywords="table custom fields advanced example"><a href="../components/tableCustomFields.html">Table &mdash; Custom Fields<br><small>Advanced Example</small></a></k-filter-item>
53
+ <k-filter-item filter-keywords="table fetch records advanced example"><a href="../components/tableFetchRecords.html">Table &mdash; Fetch Records<br><small>Advanced Example</small></a></k-filter-item>
54
+ <k-filter-item filter-keywords="table field sort hide advanced example"><a href="../components/tableFieldSortHide.html">Table &mdash; Field Sort &amp; Hide<br><small>Advanced Example</small></a></k-filter-item>
55
+ <k-filter-item filter-keywords="table pagination advanced example"><a href="../components/tablePagination.html">Table &mdash; Pagination<br><small>Advanced Example</small></a></k-filter-item>
56
+ <k-filter-item filter-keywords="table record editing advanced example"><a href="../components/tableRecordEditing.html">Table &mdash; Record Editing<br><small>Advanced Example</small></a></k-filter-item>
57
+ <k-filter-item filter-keywords="table record filtering advanced example"><a href="../components/tableRecordFiltering.html">Table &mdash; Record Filtering<br><small>Advanced Example</small></a></k-filter-item>
58
+ <k-filter-item filter-keywords="table record hiding advanced example"><a href="../components/tableRecordHiding.html">Table &mdash; Record Hiding<br><small>Advanced Example</small></a></k-filter-item>
59
+ <k-filter-item filter-keywords="table record searching advanced example"><a href="../components/tableRecordSearching.html">Table &mdash; Record Searching<br><small>Advanced Example</small></a></k-filter-item>
60
+ <k-filter-item filter-keywords="table record selection advanced example"><a href="../components/tableRecordSelection.html">Table &mdash; Record Selection<br><small>Advanced Example</small></a></k-filter-item>
61
+ <k-filter-item filter-keywords="table row controls advanced example"><a href="../components/tableRowControls.html">Table &mdash; Row Controls<br><small>Advanced Example</small></a></k-filter-item>
62
+ <k-filter-item filter-keywords="table server sync advanced example"><a href="../components/tableServerSync.html">Table &mdash; Server Sync<br><small>Advanced Example</small></a></k-filter-item>
63
+ <k-filter-item filter-keywords="table sorting advanced example"><a href="../components/tableSorting.html">Table &mdash; Sorting<br><small>Advanced Example</small></a></k-filter-item>
64
+ <k-filter-item filter-keywords="table placeholder advanced example"><a href="../components/tablePlaceholder.html">Table &mdash; Placeholder<br><small>Advanced Example</small></a></k-filter-item>
65
+ <k-filter-item filter-keywords="tabs tab panel components"><a href="../components/tabs.html">Tabs<br><small>Component</small></a></k-filter-item>
66
+ <k-filter-item filter-keywords="tags tag input components"><a href="../components/tags.html">Tags<br><small>Component</small></a></k-filter-item>
67
+ <k-filter-item filter-keywords="theme select dropdown dark light components"><a href="../components/theme-select.html">Theme Select<br><small>Component</small></a></k-filter-item>
68
+ <k-filter-item filter-keywords="theme switcher dark light components"><a href="../components/theme-switcher.html">Theme Switcher<br><small>Component</small></a></k-filter-item>
69
+ <k-filter-item filter-keywords="timestamp date time components"><a href="../components/timestamp.html">Timestamp<br><small>Component</small></a></k-filter-item>
70
+ <k-filter-item filter-keywords="toast notification alert components"><a href="../components/toast.html">Toast<br><small>Component</small></a></k-filter-item>
71
+ <k-filter-item filter-keywords="toggle switch checkbox components"><a href="../components/toggle.html">Toggle<br><small>Component</small></a></k-filter-item>
72
+ <k-filter-item filter-keywords="tree treeview components"><a href="../components/tree.html">Tree<br><small>Component</small></a></k-filter-item>
73
+ <k-filter-item filter-keywords="shadow component base"><a href="../components/shadow-component.html">Shadow Component<br><small>Base Component</small></a></k-filter-item>
74
+ <k-filter-item filter-keywords="light component base"><a href="../components/light-component.html">Light Component<br><small>Base Component</small></a></k-filter-item>
75
+ <k-filter-item filter-keywords="hybrid component base"><a href="../components/hybrid-component.html">Hybrid Component<br><small>Base Component</small></a></k-filter-item>
76
+ <k-filter-item filter-keywords="cookie utils utility"><a href="../utils/cookie.html">cookie<br><small>Utility</small></a></k-filter-item>
77
+ <k-filter-item filter-keywords="context utils utility"><a href="../utils/context.html">context<br><small>Utility</small></a></k-filter-item>
78
+ <k-filter-item filter-keywords="debounce utils utility"><a href="../utils/debounce.html">debounce<br><small>Utility</small></a></k-filter-item>
79
+ <k-filter-item filter-keywords="drag utils utility"><a href="../utils/drag.html">drag<br><small>Utility</small></a></k-filter-item>
80
+ <k-filter-item filter-keywords="elevation z-index stacking utils"><a href="../utils/elevation.html">elevation<br><small>Utility</small></a></k-filter-item>
81
+ <k-filter-item filter-keywords="formattimestamp timestamp format date time utils utility"><a href="../utils/formatTimestamp.html">formatTimestamp<br><small>Utility</small></a></k-filter-item>
82
+ <k-filter-item filter-keywords="object utils utility"><a href="../utils/object.html">object<br><small>Utility</small></a></k-filter-item>
83
+ <k-filter-item filter-keywords="propconverters prop converters utils utility"><a href="../utils/propConverters.html">propConverters<br><small>Utility</small></a></k-filter-item>
84
+ <k-filter-item filter-keywords="string utils utility"><a href="../utils/string.html">string<br><small>Utility</small></a></k-filter-item>
85
+ <k-filter-item filter-keywords="theme utils utility"><a href="../utils/theme.html">theme<br><small>Utility</small></a></k-filter-item>
86
+ <k-filter-item filter-keywords="type utils utility"><a href="../utils/type.html">type<br><small>Utility</small></a></k-filter-item>
87
+ <k-filter-item filter-keywords="wait async utils utility"><a href="../utils/wait.html">wait<br><small>Utility</small></a></k-filter-item>
88
+ </k-filter-list>
89
+ </div>
90
+ </div>
91
+ <div class="flex"></div>
92
+ <a href="https://github.com/dustinpoissant/kempo-ui?tab=License-1-ov-file#creative-commons-attribution-noncommercial-sharealike-20" target="_blank"><k-icon name="license"></k-icon></a>
93
+ <a href="https://www.npmjs.com/package/kempo-ui" target="_blank"><k-icon name="npm"></k-icon></a>
94
+ <a href="https://github.com/dustinpoissant/kempo-ui" target="_blank"><k-icon name="github-mark"></k-icon></a>
95
+ <k-theme-switcher></k-theme-switcher>
96
+ </k-nav>
97
+ <div style="width: 100%; height: 4rem;"></div>
98
+ <k-aside id="navSideMenu" main="overlay" state="offscreen">
99
+ <menu>
100
+ <a href="../" class="ta-center bb mb r0">
101
+ <h1 class="tc-primary">Kempo UI</h1>
102
+ <img src="../media/icon128.png" alt="Kempo UI Icon" />
103
+ </a>
104
+
105
+ <div class="pl mb">
106
+ <h3>Components</h3>
107
+ <a href="../components/accordion.html">Accordion</a>
108
+ <a href="../components/aside.html">Aside</a>
109
+ <a href="../components/card.html">Card</a>
110
+ <a href="../components/color-picker.html">ColorPicker</a>
111
+ <a href="../components/content-slider.html">Content Slider</a>
112
+ <a href="../components/context.html">Context</a>
113
+ <a href="../components/dialog.html">Dialog</a>
114
+ <a href="../components/dropdown.html">Dropdown</a>
115
+ <a href="../components/filter-list.html">Filter List</a>
116
+ <a href="../components/focus-capture.html">FocusCapture</a>
117
+ <a href="../components/html-editor.html">HTML Editor</a>
118
+ <a href="../components/icon.html">Icon</a>
119
+ <a href="../components/import.html">Import</a>
120
+ <a href="../components/nav.html">Nav</a>
121
+ <a href="../components/photo-viewer.html">Photo Viewer</a>
122
+ <a href="../components/resize.html">Resize</a>
123
+ <a href="../components/show-more.html">Show More</a>
124
+ <a href="../components/sortable.html">Sortable</a>
125
+ <a href="../components/spinner.html">Spinner</a>
126
+ <a href="../components/split.html">Split</a>
127
+ <a href="../components/table.html">Table</a>
128
+ <a href="../components/tabs.html">Tabs</a>
129
+ <a href="../components/tags.html">Tags</a>
130
+ <a href="../components/theme-select.html">Theme Select</a>
131
+ <a href="../components/theme-switcher.html">Theme Switcher</a>
132
+ <a href="../components/timestamp.html">Timestamp</a>
133
+ <a href="../components/toast.html">Toast</a>
134
+ <a href="../components/toggle.html">Toggle</a>
135
+ <a href="../components/tree.html">Tree</a>
136
+ </div>
137
+
138
+ <h5 class="mb0">Base Components</h5>
139
+ <div class="pl mb">
140
+ <a href="../components/shadow-component.html">Shadow Component</a>
141
+ <a href="../components/light-component.html">Light Component</a>
142
+ <a href="../components/hybrid-component.html">Hybrid Component</a>
143
+ </div>
144
+
145
+ <h5 class="mb0">Utils</h5>
146
+ <div class="pl mb">
147
+ <a href="../utils/cookie.html">cookie</a>
148
+ <a href="../utils/context.html">context</a>
149
+ <a href="../utils/debounce.html">debounce</a>
150
+ <a href="../utils/drag.html">drag</a>
151
+ <a href="../utils/elevation.html">elevation</a>
152
+ <a href="../utils/formatTimestamp.html">formatTimestamp</a>
153
+ <a href="../utils/object.html">object</a>
154
+ <a href="../utils/propConverters.html">propConverters</a>
155
+ <a href="../utils/string.html">string</a>
156
+ <a href="../utils/theme.html">theme</a>
157
+ <a href="../utils/type.html">type</a>
158
+ <a href="../utils/wait.html">wait</a>
159
+ </div>
160
+ </menu>
161
+ </k-aside>
162
+ <style>
163
+ #navSearchList a{display:block;padding:.25rem .5rem;border-radius:var(--radius);text-decoration:none;color:var(--tc);}
164
+ #navSearchList a:hover{background:rgba(128,128,128,.15);}
165
+ #navSearchList a small{display:block;color:var(--tc_muted);}
166
+ </style>
167
+ <script src="../src/components/Nav.js" type="module"></script>
168
+ <script src="../src/components/FilterList.js" type="module"></script>
169
+ <script src="../src/components/FilterItem.js" type="module"></script>
170
+ <script src="../src/components/Aside.js" type="module"></script>
171
+ <script src="../src/components/Icon.js" type="module"></script>
172
+ <script src="../src/components/ThemeSwitcher.js" type="module"></script>
173
+ <script type="module">
174
+ import debounce from '../src/utils/debounce.js';
175
+
176
+ document.getElementById('toggleNavSideMenu').addEventListener('click', async () => {
177
+ await window.customElements.whenDefined('k-aside');
178
+ document.getElementById('navSideMenu').toggle();
179
+ });
180
+
181
+ document.addEventListener('click', function(e) {
182
+ if(e.target.matches('a[href^="#"]')) {
183
+ e.preventDefault();
184
+ const targetId = e.target.getAttribute('href').replace('#', '');
185
+ const target = document.getElementById(targetId);
186
+ if(target) {
187
+ target.scrollIntoView({ behavior: 'smooth' });
188
+ const url = window.location.pathname + window.location.search + '#' + targetId;
189
+ history.replaceState(null, '', url);
190
+ }
191
+ }
192
+ });
193
+
194
+ /*
195
+ Nav Search
196
+ */
197
+ const searchInput = document.getElementById('navSearchInput');
198
+ const searchDropdown = document.getElementById('navSearchDropdown');
199
+ let navSearchList = null;
200
+
201
+ const openSearch = async () => {
202
+ await customElements.whenDefined('k-filter-list');
203
+ if(!navSearchList) navSearchList = document.getElementById('navSearchList');
204
+ navSearchList.filter(searchInput.value);
205
+ searchDropdown.hidden = false;
206
+ };
207
+
208
+ const closeSearch = () => {
209
+ searchDropdown.hidden = true;
210
+ navSearchList?.clearFocus();
211
+ };
212
+
213
+ searchInput.addEventListener('focus', openSearch);
214
+
215
+ searchInput.addEventListener('input', debounce(e => {
216
+ navSearchList?.filter(e.target.value);
217
+ }, 150));
218
+
219
+ searchInput.addEventListener('keydown', e => {
220
+ if(e.key === 'Escape') {
221
+ searchInput.value = '';
222
+ searchInput.blur();
223
+ closeSearch();
224
+ } else if(e.key === 'ArrowDown' || e.key === 'ArrowUp' || e.key === 'Enter') {
225
+ navSearchList?.handleKeydown(e);
226
+ }
227
+ });
228
+
229
+ searchInput.addEventListener('blur', () => {
230
+ setTimeout(closeSearch, 150);
231
+ });
232
+
233
+ document.addEventListener('keydown', e => {
234
+ let active = document.activeElement;
235
+ while(active?.shadowRoot?.activeElement) active = active.shadowRoot.activeElement;
236
+ const tag = active?.tagName;
237
+ if(tag === 'INPUT' || tag === 'TEXTAREA' || active?.isContentEditable) return;
238
+ if(e.metaKey || e.ctrlKey || e.altKey) return;
239
+ if(e.key.length === 1) {
240
+ searchInput.focus();
241
+ }
242
+ });
243
+ </script>
244
+
245
+
246
+ <h1 class="ta-center">Aside</h1>
247
+
19
248
  <k-main>
20
- <details class="b r mb">
21
- <summary class="p">Table of Contents</summary>
22
- <div class="m mt0 pl">
249
+
250
+ <k-accordion persistent-id="toc" class="b r mb">
251
+ <k-accordion-header for-panel="toc-panel">Table of Contents</k-accordion-header>
252
+ <k-accordion-panel name="toc-panel">
253
+ <div class="m">
23
254
  <h6>Overlay Mode</h6>
24
255
  <a href="#overlayBasic">Basic Usage</a><br />
25
256
  <a href="#overlayClose">Closing Options</a><br />
@@ -34,6 +265,7 @@
34
265
  <a href="#customWidth">Custom Width</a><br />
35
266
  <a href="#customBg">Custom Background</a><br />
36
267
  <a href="#customCollapsed">Custom Collapsed Width</a><br />
268
+ <a href="#persistentState">Persistent State</a><br />
37
269
 
38
270
  <h6 class="mt">Sub-Components</h6>
39
271
  <a href="#subItems">Items &amp; Labels</a><br />
@@ -56,7 +288,8 @@
56
288
  <a href="#asideSpacer">k-aside-spacer</a><br />
57
289
  <a href="#asideToggle">k-aside-toggle</a><br />
58
290
  </div>
59
- </details>
291
+ </k-accordion-panel>
292
+ </k-accordion>
60
293
 
61
294
  <h2>Overlay Mode</h2>
62
295
  <p>The default mode. Use <code>state="offscreen"</code> as the starting state; call <code>expand()</code> to open. Clicking the backdrop or pressing ESC closes it by default.</p>
@@ -66,12 +299,7 @@
66
299
  <div class="row -mx">
67
300
  <div class="col m-span-12 px">
68
301
  <k-card label="HTML">
69
- <pre><code class="hljs html">&lt;k-aside state="offscreen"&gt;
70
- &lt;p&gt;Overlay Menu Content&lt;/p&gt;
71
- &lt;/k-aside&gt;
72
- &lt;button onclick="this.previousElementSibling.expand()"&gt;
73
- Open Menu
74
- &lt;/button&gt;</code></pre>
302
+ <pre><code class="hljs xml"><span class="hljs-tag">&lt;<span class="hljs-name">k-aside</span> <span class="hljs-attr">state</span>=<span class="hljs-string">&#x27;offscreen&#x27;</span>&gt;</span><br> <span class="hljs-tag">&lt;<span class="hljs-name">p</span>&gt;</span>Overlay Menu Content<span class="hljs-tag">&lt;/<span class="hljs-name">p</span>&gt;</span><br><span class="hljs-tag">&lt;/<span class="hljs-name">k-aside</span>&gt;</span><br><span class="hljs-tag">&lt;<span class="hljs-name">button</span> <span class="hljs-attr">onclick</span>=<span class="hljs-string">&#x27;this.previousElementSibling.expand()&#x27;</span>&gt;</span> Open Menu <span class="hljs-tag">&lt;/<span class="hljs-name">button</span>&gt;</span></code></pre>
75
303
  </k-card>
76
304
  </div>
77
305
  <div class="col m-span-12 px">
@@ -95,16 +323,7 @@
95
323
  <div class="row -mx">
96
324
  <div class="col m-span-12 px">
97
325
  <k-card label="HTML">
98
- <pre><code class="hljs html">&lt;k-aside state="offscreen"
99
- overlay-close="false"&gt;
100
- &lt;p&gt;Overlay Menu&lt;/p&gt;
101
- &lt;button onclick="this.closest('k-aside').hide()"&gt;
102
- Close
103
- &lt;/button&gt;
104
- &lt;/k-aside&gt;
105
- &lt;button onclick="this.previousElementSibling.expand()"&gt;
106
- Open Menu
107
- &lt;/button&gt;</code></pre>
326
+ <pre><code class="hljs xml"><span class="hljs-tag">&lt;<span class="hljs-name">k-aside</span> <span class="hljs-attr">state</span>=<span class="hljs-string">&#x27;offscreen&#x27;</span> <span class="hljs-attr">overlay-close</span>=<span class="hljs-string">&#x27;false&#x27;</span>&gt;</span><br> <span class="hljs-tag">&lt;<span class="hljs-name">p</span>&gt;</span>Overlay Menu<span class="hljs-tag">&lt;/<span class="hljs-name">p</span>&gt;</span><br> <span class="hljs-tag">&lt;<span class="hljs-name">button</span> <span class="hljs-attr">onclick</span>=<span class="hljs-string">&#x27;this.closest(&quot;k-aside&quot;).hide()&#x27;</span>&gt;</span> Close <span class="hljs-tag">&lt;/<span class="hljs-name">button</span>&gt;</span><br><span class="hljs-tag">&lt;/<span class="hljs-name">k-aside</span>&gt;</span><br><span class="hljs-tag">&lt;<span class="hljs-name">button</span> <span class="hljs-attr">onclick</span>=<span class="hljs-string">&#x27;this.previousElementSibling.expand()&#x27;</span>&gt;</span> Open Menu <span class="hljs-tag">&lt;/<span class="hljs-name">button</span>&gt;</span></code></pre>
108
327
  </k-card>
109
328
  </div>
110
329
  <div class="col m-span-12 px">
@@ -132,13 +351,7 @@
132
351
  <div class="row -mx">
133
352
  <div class="col m-span-12 px">
134
353
  <k-card label="HTML">
135
- <pre><code class="hljs html">&lt;k-aside state="offscreen"
136
- side="right"&gt;
137
- &lt;p&gt;Right Side Menu&lt;/p&gt;
138
- &lt;/k-aside&gt;
139
- &lt;button onclick="this.previousElementSibling.expand()"&gt;
140
- Open Right Menu
141
- &lt;/button&gt;</code></pre>
354
+ <pre><code class="hljs xml"><span class="hljs-tag">&lt;<span class="hljs-name">k-aside</span> <span class="hljs-attr">state</span>=<span class="hljs-string">&#x27;offscreen&#x27;</span> <span class="hljs-attr">side</span>=<span class="hljs-string">&#x27;right&#x27;</span>&gt;</span><br> <span class="hljs-tag">&lt;<span class="hljs-name">p</span>&gt;</span>Right Side Menu<span class="hljs-tag">&lt;/<span class="hljs-name">p</span>&gt;</span><br><span class="hljs-tag">&lt;/<span class="hljs-name">k-aside</span>&gt;</span><br><span class="hljs-tag">&lt;<span class="hljs-name">button</span> <span class="hljs-attr">onclick</span>=<span class="hljs-string">&#x27;this.previousElementSibling.expand()&#x27;</span>&gt;</span> Open Right Menu <span class="hljs-tag">&lt;/<span class="hljs-name">button</span>&gt;</span></code></pre>
142
355
  </k-card>
143
356
  </div>
144
357
  <div class="col m-span-12 px">
@@ -164,17 +377,7 @@
164
377
  <div class="row -mx">
165
378
  <div class="col m-span-12 px">
166
379
  <k-card label="HTML">
167
- <pre><code class="hljs html">&lt;k-aside main="push" state="offscreen"&gt;
168
- &lt;nav&gt;
169
- &lt;h3&gt;Sidebar&lt;/h3&gt;
170
- &lt;a href="#"&gt;Home&lt;/a&gt;
171
- &lt;a href="#"&gt;About&lt;/a&gt;
172
- &lt;a href="#"&gt;Contact&lt;/a&gt;
173
- &lt;/nav&gt;
174
- &lt;/k-aside&gt;
175
- &lt;button onclick="this.previousElementSibling.toggle()"&gt;
176
- Toggle Sidebar
177
- &lt;/button&gt;</code></pre>
380
+ <pre><code class="hljs xml"><span class="hljs-tag">&lt;<span class="hljs-name">k-aside</span> <span class="hljs-attr">main</span>=<span class="hljs-string">&#x27;push&#x27;</span> <span class="hljs-attr">state</span>=<span class="hljs-string">&#x27;offscreen&#x27;</span>&gt;</span><br> <span class="hljs-tag">&lt;<span class="hljs-name">nav</span>&gt;</span><br> <span class="hljs-tag">&lt;<span class="hljs-name">h3</span>&gt;</span>Sidebar<span class="hljs-tag">&lt;/<span class="hljs-name">h3</span>&gt;</span><br> <span class="hljs-tag">&lt;<span class="hljs-name">a</span> <span class="hljs-attr">href</span>=<span class="hljs-string">&#x27;#&#x27;</span>&gt;</span>Home<span class="hljs-tag">&lt;/<span class="hljs-name">a</span>&gt;</span><br> <span class="hljs-tag">&lt;<span class="hljs-name">a</span> <span class="hljs-attr">href</span>=<span class="hljs-string">&#x27;#&#x27;</span>&gt;</span>About<span class="hljs-tag">&lt;/<span class="hljs-name">a</span>&gt;</span><br> <span class="hljs-tag">&lt;<span class="hljs-name">a</span> <span class="hljs-attr">href</span>=<span class="hljs-string">&#x27;#&#x27;</span>&gt;</span>Contact<span class="hljs-tag">&lt;/<span class="hljs-name">a</span>&gt;</span><br> <span class="hljs-tag">&lt;/<span class="hljs-name">nav</span>&gt;</span><br><span class="hljs-tag">&lt;/<span class="hljs-name">k-aside</span>&gt;</span><br><span class="hljs-tag">&lt;<span class="hljs-name">button</span> <span class="hljs-attr">onclick</span>=<span class="hljs-string">&#x27;this.previousElementSibling.toggle()&#x27;</span>&gt;</span> Toggle Sidebar <span class="hljs-tag">&lt;/<span class="hljs-name">button</span>&gt;</span></code></pre>
178
381
  </k-card>
179
382
  </div>
180
383
  <div class="col m-span-12 px">
@@ -203,17 +406,7 @@
203
406
  <div class="row -mx">
204
407
  <div class="col m-span-12 px">
205
408
  <k-card label="HTML">
206
- <pre><code class="hljs html">&lt;k-aside main="push" state="offscreen"&gt;
207
- &lt;nav&gt;
208
- &lt;h3&gt;Menu&lt;/h3&gt;
209
- &lt;a href="#"&gt;Dashboard&lt;/a&gt;
210
- &lt;a href="#"&gt;Settings&lt;/a&gt;
211
- &lt;/nav&gt;
212
- &lt;/k-aside&gt;
213
-
214
- &lt;button onclick="aside.expand()"&gt;Expand&lt;/button&gt;
215
- &lt;button onclick="aside.collapse()"&gt;Collapse&lt;/button&gt;
216
- &lt;button onclick="aside.hide()"&gt;Hide&lt;/button&gt;</code></pre>
409
+ <pre><code class="hljs xml"><span class="hljs-tag">&lt;<span class="hljs-name">k-aside</span> <span class="hljs-attr">main</span>=<span class="hljs-string">&#x27;push&#x27;</span> <span class="hljs-attr">state</span>=<span class="hljs-string">&#x27;offscreen&#x27;</span>&gt;</span><br> <span class="hljs-tag">&lt;<span class="hljs-name">nav</span>&gt;</span><br> <span class="hljs-tag">&lt;<span class="hljs-name">h3</span>&gt;</span>Menu<span class="hljs-tag">&lt;/<span class="hljs-name">h3</span>&gt;</span><br> <span class="hljs-tag">&lt;<span class="hljs-name">a</span> <span class="hljs-attr">href</span>=<span class="hljs-string">&#x27;#&#x27;</span>&gt;</span>Dashboard<span class="hljs-tag">&lt;/<span class="hljs-name">a</span>&gt;</span><br> <span class="hljs-tag">&lt;<span class="hljs-name">a</span> <span class="hljs-attr">href</span>=<span class="hljs-string">&#x27;#&#x27;</span>&gt;</span>Settings<span class="hljs-tag">&lt;/<span class="hljs-name">a</span>&gt;</span><br> <span class="hljs-tag">&lt;/<span class="hljs-name">nav</span>&gt;</span><br><span class="hljs-tag">&lt;/<span class="hljs-name">k-aside</span>&gt;</span><br><span class="hljs-tag">&lt;<span class="hljs-name">button</span> <span class="hljs-attr">onclick</span>=<span class="hljs-string">&#x27;aside.expand()&#x27;</span>&gt;</span>Expand<span class="hljs-tag">&lt;/<span class="hljs-name">button</span>&gt;</span><br><span class="hljs-tag">&lt;<span class="hljs-name">button</span> <span class="hljs-attr">onclick</span>=<span class="hljs-string">&#x27;aside.collapse()&#x27;</span>&gt;</span>Collapse<span class="hljs-tag">&lt;/<span class="hljs-name">button</span>&gt;</span><br><span class="hljs-tag">&lt;<span class="hljs-name">button</span> <span class="hljs-attr">onclick</span>=<span class="hljs-string">&#x27;aside.hide()&#x27;</span>&gt;</span>Hide<span class="hljs-tag">&lt;/<span class="hljs-name">button</span>&gt;</span></code></pre>
217
410
  </k-card>
218
411
  </div>
219
412
  <div class="col m-span-12 px">
@@ -244,16 +437,7 @@
244
437
  <div class="row -mx">
245
438
  <div class="col m-span-12 px">
246
439
  <k-card label="HTML">
247
- <pre><code class="hljs html">&lt;k-aside main="push" side="right" state="offscreen"&gt;
248
- &lt;nav&gt;
249
- &lt;h3&gt;Right Panel&lt;/h3&gt;
250
- &lt;a href="#"&gt;Item 1&lt;/a&gt;
251
- &lt;a href="#"&gt;Item 2&lt;/a&gt;
252
- &lt;/nav&gt;
253
- &lt;/k-aside&gt;
254
- &lt;button onclick="this.previousElementSibling.toggle()"&gt;
255
- Toggle Right Sidebar
256
- &lt;/button&gt;</code></pre>
440
+ <pre><code class="hljs xml"><span class="hljs-tag">&lt;<span class="hljs-name">k-aside</span> <span class="hljs-attr">main</span>=<span class="hljs-string">&#x27;push&#x27;</span> <span class="hljs-attr">side</span>=<span class="hljs-string">&#x27;right&#x27;</span> <span class="hljs-attr">state</span>=<span class="hljs-string">&#x27;offscreen&#x27;</span>&gt;</span><br> <span class="hljs-tag">&lt;<span class="hljs-name">nav</span>&gt;</span><br> <span class="hljs-tag">&lt;<span class="hljs-name">h3</span>&gt;</span>Right Panel<span class="hljs-tag">&lt;/<span class="hljs-name">h3</span>&gt;</span><br> <span class="hljs-tag">&lt;<span class="hljs-name">a</span> <span class="hljs-attr">href</span>=<span class="hljs-string">&#x27;#&#x27;</span>&gt;</span>Item 1<span class="hljs-tag">&lt;/<span class="hljs-name">a</span>&gt;</span><br> <span class="hljs-tag">&lt;<span class="hljs-name">a</span> <span class="hljs-attr">href</span>=<span class="hljs-string">&#x27;#&#x27;</span>&gt;</span>Item 2<span class="hljs-tag">&lt;/<span class="hljs-name">a</span>&gt;</span><br> <span class="hljs-tag">&lt;/<span class="hljs-name">nav</span>&gt;</span><br><span class="hljs-tag">&lt;/<span class="hljs-name">k-aside</span>&gt;</span><br><span class="hljs-tag">&lt;<span class="hljs-name">button</span> <span class="hljs-attr">onclick</span>=<span class="hljs-string">&#x27;this.previousElementSibling.toggle()&#x27;</span>&gt;</span> Toggle Right Sidebar <span class="hljs-tag">&lt;/<span class="hljs-name">button</span>&gt;</span></code></pre>
257
441
  </k-card>
258
442
  </div>
259
443
  <div class="col m-span-12 px">
@@ -283,15 +467,7 @@
283
467
  <div class="row -mx">
284
468
  <div class="col m-span-12 px">
285
469
  <k-card label="HTML">
286
- <pre><code class="hljs html">&lt;style&gt;
287
- k-aside { --width: 30rem; }
288
- &lt;/style&gt;
289
- &lt;k-aside state="offscreen"&gt;
290
- &lt;p&gt;This menu is 30rem wide.&lt;/p&gt;
291
- &lt;/k-aside&gt;
292
- &lt;button onclick="this.previousElementSibling.expand()"&gt;
293
- Open Wide Menu
294
- &lt;/button&gt;</code></pre>
470
+ <pre><code class="hljs xml"><span class="hljs-tag">&lt;<span class="hljs-name">style</span>&gt;</span><span class="language-css"><br> k-<span class="hljs-selector-tag">aside</span> {<br> <span class="hljs-attr">--width</span>: <span class="hljs-number">30rem</span>;<br> }<br></span><span class="hljs-tag">&lt;/<span class="hljs-name">style</span>&gt;</span><br><span class="hljs-tag">&lt;<span class="hljs-name">k-aside</span> <span class="hljs-attr">state</span>=<span class="hljs-string">&#x27;offscreen&#x27;</span>&gt;</span><br> <span class="hljs-tag">&lt;<span class="hljs-name">p</span>&gt;</span>This menu is 30rem wide.<span class="hljs-tag">&lt;/<span class="hljs-name">p</span>&gt;</span><br><span class="hljs-tag">&lt;/<span class="hljs-name">k-aside</span>&gt;</span><br><span class="hljs-tag">&lt;<span class="hljs-name">button</span> <span class="hljs-attr">onclick</span>=<span class="hljs-string">&#x27;this.previousElementSibling.expand()&#x27;</span>&gt;</span> Open Wide Menu <span class="hljs-tag">&lt;/<span class="hljs-name">button</span>&gt;</span></code></pre>
295
471
  </k-card>
296
472
  </div>
297
473
  <div class="col m-span-12 px">
@@ -315,19 +491,7 @@
315
491
  <div class="row -mx">
316
492
  <div class="col m-span-12 px">
317
493
  <k-card label="HTML">
318
- <pre><code class="hljs html">&lt;style&gt;
319
- k-aside { --bg: var(--c_primary); }
320
- &lt;/style&gt;
321
- &lt;k-aside state="offscreen"&gt;
322
- &lt;nav class="p tc-light"&gt;
323
- &lt;h3&gt;Branded Menu&lt;/h3&gt;
324
- &lt;a href="#" class="tc-light"&gt;Home&lt;/a&gt;
325
- &lt;a href="#" class="tc-light"&gt;About&lt;/a&gt;
326
- &lt;/nav&gt;
327
- &lt;/k-aside&gt;
328
- &lt;button onclick="this.previousElementSibling.expand()"&gt;
329
- Open Branded Menu
330
- &lt;/button&gt;</code></pre>
494
+ <pre><code class="hljs xml"><span class="hljs-tag">&lt;<span class="hljs-name">style</span>&gt;</span><span class="language-css"><br> k-<span class="hljs-selector-tag">aside</span> {<br> <span class="hljs-attr">--bg</span>: <span class="hljs-built_in">var</span>(--c_primary);<br> }<br></span><span class="hljs-tag">&lt;/<span class="hljs-name">style</span>&gt;</span><br><span class="hljs-tag">&lt;<span class="hljs-name">k-aside</span> <span class="hljs-attr">state</span>=<span class="hljs-string">&#x27;offscreen&#x27;</span>&gt;</span><br> <span class="hljs-tag">&lt;<span class="hljs-name">nav</span> <span class="hljs-attr">class</span>=<span class="hljs-string">&#x27;p tc-light&#x27;</span>&gt;</span><br> <span class="hljs-tag">&lt;<span class="hljs-name">h3</span>&gt;</span>Branded Menu<span class="hljs-tag">&lt;/<span class="hljs-name">h3</span>&gt;</span><br> <span class="hljs-tag">&lt;<span class="hljs-name">a</span> <span class="hljs-attr">href</span>=<span class="hljs-string">&#x27;#&#x27;</span> <span class="hljs-attr">class</span>=<span class="hljs-string">&#x27;tc-light&#x27;</span>&gt;</span>Home<span class="hljs-tag">&lt;/<span class="hljs-name">a</span>&gt;</span><br> <span class="hljs-tag">&lt;<span class="hljs-name">a</span> <span class="hljs-attr">href</span>=<span class="hljs-string">&#x27;#&#x27;</span> <span class="hljs-attr">class</span>=<span class="hljs-string">&#x27;tc-light&#x27;</span>&gt;</span>About<span class="hljs-tag">&lt;/<span class="hljs-name">a</span>&gt;</span><br> <span class="hljs-tag">&lt;/<span class="hljs-name">nav</span>&gt;</span><br><span class="hljs-tag">&lt;/<span class="hljs-name">k-aside</span>&gt;</span><br><span class="hljs-tag">&lt;<span class="hljs-name">button</span> <span class="hljs-attr">onclick</span>=<span class="hljs-string">&#x27;this.previousElementSibling.expand()&#x27;</span>&gt;</span> Open Branded Menu <span class="hljs-tag">&lt;/<span class="hljs-name">button</span>&gt;</span></code></pre>
331
495
  </k-card>
332
496
  </div>
333
497
  <div class="col m-span-12 px">
@@ -355,21 +519,7 @@
355
519
  <div class="row -mx">
356
520
  <div class="col m-span-12 px">
357
521
  <k-card label="HTML">
358
- <pre><code class="hljs html">&lt;style&gt;
359
- k-aside { --collapsed-width: 5rem; }
360
- &lt;/style&gt;
361
- &lt;k-aside main="push" state="offscreen"&gt;
362
- &lt;nav&gt;
363
- &lt;h3&gt;Sidebar&lt;/h3&gt;
364
- &lt;a href="#"&gt;Dashboard&lt;/a&gt;
365
- &lt;a href="#"&gt;Reports&lt;/a&gt;
366
- &lt;a href="#"&gt;Settings&lt;/a&gt;
367
- &lt;/nav&gt;
368
- &lt;/k-aside&gt;
369
-
370
- &lt;button onclick="aside.expand()"&gt;Expand&lt;/button&gt;
371
- &lt;button onclick="aside.collapse()"&gt;Collapse&lt;/button&gt;
372
- &lt;button onclick="aside.hide()"&gt;Hide&lt;/button&gt;</code></pre>
522
+ <pre><code class="hljs xml"><span class="hljs-tag">&lt;<span class="hljs-name">style</span>&gt;</span><span class="language-css"><br> k-<span class="hljs-selector-tag">aside</span> {<br> <span class="hljs-attr">--collapsed-width</span>: <span class="hljs-number">5rem</span>;<br> }<br></span><span class="hljs-tag">&lt;/<span class="hljs-name">style</span>&gt;</span><br><span class="hljs-tag">&lt;<span class="hljs-name">k-aside</span> <span class="hljs-attr">main</span>=<span class="hljs-string">&#x27;push&#x27;</span> <span class="hljs-attr">state</span>=<span class="hljs-string">&#x27;offscreen&#x27;</span>&gt;</span><br> <span class="hljs-tag">&lt;<span class="hljs-name">nav</span>&gt;</span><br> <span class="hljs-tag">&lt;<span class="hljs-name">h3</span>&gt;</span>Sidebar<span class="hljs-tag">&lt;/<span class="hljs-name">h3</span>&gt;</span><br> <span class="hljs-tag">&lt;<span class="hljs-name">a</span> <span class="hljs-attr">href</span>=<span class="hljs-string">&#x27;#&#x27;</span>&gt;</span>Dashboard<span class="hljs-tag">&lt;/<span class="hljs-name">a</span>&gt;</span><br> <span class="hljs-tag">&lt;<span class="hljs-name">a</span> <span class="hljs-attr">href</span>=<span class="hljs-string">&#x27;#&#x27;</span>&gt;</span>Reports<span class="hljs-tag">&lt;/<span class="hljs-name">a</span>&gt;</span><br> <span class="hljs-tag">&lt;<span class="hljs-name">a</span> <span class="hljs-attr">href</span>=<span class="hljs-string">&#x27;#&#x27;</span>&gt;</span>Settings<span class="hljs-tag">&lt;/<span class="hljs-name">a</span>&gt;</span><br> <span class="hljs-tag">&lt;/<span class="hljs-name">nav</span>&gt;</span><br><span class="hljs-tag">&lt;/<span class="hljs-name">k-aside</span>&gt;</span><br><span class="hljs-tag">&lt;<span class="hljs-name">button</span> <span class="hljs-attr">onclick</span>=<span class="hljs-string">&#x27;aside.expand()&#x27;</span>&gt;</span>Expand<span class="hljs-tag">&lt;/<span class="hljs-name">button</span>&gt;</span><br><span class="hljs-tag">&lt;<span class="hljs-name">button</span> <span class="hljs-attr">onclick</span>=<span class="hljs-string">&#x27;aside.collapse()&#x27;</span>&gt;</span>Collapse<span class="hljs-tag">&lt;/<span class="hljs-name">button</span>&gt;</span><br><span class="hljs-tag">&lt;<span class="hljs-name">button</span> <span class="hljs-attr">onclick</span>=<span class="hljs-string">&#x27;aside.hide()&#x27;</span>&gt;</span>Hide<span class="hljs-tag">&lt;/<span class="hljs-name">button</span>&gt;</span></code></pre>
373
523
  </k-card>
374
524
  </div>
375
525
  <div class="col m-span-12 px">
@@ -397,6 +547,36 @@
397
547
  </div>
398
548
  </div>
399
549
 
550
+ <h3 id="persistentState"><a href="#persistentState" class="no-link">Persistent State</a></h3>
551
+ <p>Use <code>persistent-id</code> to remember the aside's state across page loads. The state is saved to <code>localStorage</code> under the key <code>aside-persistent-id-{id}</code> and restored when the element is connected. Works with <code>"expanded"</code>, <code>"collapsed"</code>, and <code>"offscreen"</code> states.</p>
552
+ <div class="row -mx">
553
+ <div class="col m-span-12 px">
554
+ <k-card label="HTML">
555
+ <pre><code class="hljs xml"><span class="hljs-tag">&lt;<span class="hljs-name">k-aside</span> <span class="hljs-attr">main</span>=<span class="hljs-string">&#x27;push&#x27;</span> <span class="hljs-attr">state</span>=<span class="hljs-string">&#x27;offscreen&#x27;</span> <span class="hljs-attr">persistent-id</span>=<span class="hljs-string">&#x27;my-nav&#x27;</span>&gt;</span><br> <span class="hljs-tag">&lt;<span class="hljs-name">nav</span>&gt;</span><br> <span class="hljs-tag">&lt;<span class="hljs-name">p</span>&gt;</span>Sidebar Content<span class="hljs-tag">&lt;/<span class="hljs-name">p</span>&gt;</span><br> <span class="hljs-tag">&lt;/<span class="hljs-name">nav</span>&gt;</span><br><span class="hljs-tag">&lt;/<span class="hljs-name">k-aside</span>&gt;</span><br><span class="hljs-tag">&lt;<span class="hljs-name">button</span> <span class="hljs-attr">onclick</span>=<span class="hljs-string">&#x27;this.previousElementSibling.expand()&#x27;</span>&gt;</span>Expand<span class="hljs-tag">&lt;/<span class="hljs-name">button</span>&gt;</span><br><span class="hljs-tag">&lt;<span class="hljs-name">button</span> <span class="hljs-attr">onclick</span>=<span class="hljs-string">&#x27;this.previousElementSibling.collapse()&#x27;</span>&gt;</span>Collapse<span class="hljs-tag">&lt;/<span class="hljs-name">button</span>&gt;</span><br><span class="hljs-tag">&lt;<span class="hljs-name">button</span> <span class="hljs-attr">onclick</span>=<span class="hljs-string">&#x27;this.previousElementSibling.hide()&#x27;</span>&gt;</span>Hide<span class="hljs-tag">&lt;/<span class="hljs-name">button</span>&gt;</span></code></pre>
556
+ </k-card>
557
+ </div>
558
+ <div class="col m-span-12 px">
559
+ <k-card label="Output">
560
+ <k-aside id="aside-persist" main="push" state="offscreen" persistent-id="docs-aside-persist-demo">
561
+ <div class="navbar-spacer"></div>
562
+ <nav>
563
+ <p>Sidebar Content</p>
564
+ </nav>
565
+ </k-aside>
566
+ <button id="btn-persist-expand">Expand</button>
567
+ <button id="btn-persist-collapse">Collapse</button>
568
+ <button id="btn-persist-hide">Hide</button>
569
+ <p class="mt"><small>Toggle the state and reload the page — it will be restored.</small></p>
570
+ <script>
571
+ const aPersist = document.getElementById('aside-persist');
572
+ document.getElementById('btn-persist-expand').addEventListener('click',()=> aPersist.expand());
573
+ document.getElementById('btn-persist-collapse').addEventListener('click',()=> aPersist.collapse());
574
+ document.getElementById('btn-persist-hide').addEventListener('click',()=> aPersist.hide());
575
+ </script>
576
+ </k-card>
577
+ </div>
578
+ </div>
579
+
400
580
  <h2 id="subItems"><a href="#subItems" class="no-link">Items &amp; Labels</a></h2>
401
581
  <p>Use <code>k-aside-item</code>, <code>k-aside-label</code>, and <code>k-aside-spacer</code> inside a push-mode aside for a navigation panel with icons and text. Set <code>--aside_padding: 0;</code> on the aside so the sub-components control their own spacing.</p>
402
582
  <p>Items and labels automatically react to the aside's collapsed/expanded state.</p>
@@ -433,17 +613,7 @@
433
613
  <div class="row -mx">
434
614
  <div class="col m-span-12 px">
435
615
  <k-card label="HTML">
436
- <pre><code class="hljs html">&lt;k-aside id="myAside" state="offscreen"&gt;
437
- &lt;p&gt;Open and close me to see events.&lt;/p&gt;
438
- &lt;/k-aside&gt;
439
- &lt;button onclick="myAside.expand()"&gt;Open Menu&lt;/button&gt;
440
- &lt;div id="log"&gt;&lt;/div&gt;
441
-
442
- &lt;script&gt;
443
- myAside.addEventListener('aside_state_change', e =&gt; {
444
- log.textContent = 'state: ' + e.detail.state;
445
- });
446
- &lt;/script&gt;</code></pre>
616
+ <pre><code class="hljs xml"><span class="hljs-tag">&lt;<span class="hljs-name">k-aside</span> <span class="hljs-attr">id</span>=<span class="hljs-string">&#x27;myAside&#x27;</span> <span class="hljs-attr">state</span>=<span class="hljs-string">&#x27;offscreen&#x27;</span>&gt;</span><br> <span class="hljs-tag">&lt;<span class="hljs-name">p</span>&gt;</span>Open and close me to see events.<span class="hljs-tag">&lt;/<span class="hljs-name">p</span>&gt;</span><br><span class="hljs-tag">&lt;/<span class="hljs-name">k-aside</span>&gt;</span><br><span class="hljs-tag">&lt;<span class="hljs-name">button</span> <span class="hljs-attr">onclick</span>=<span class="hljs-string">&#x27;myAside.expand()&#x27;</span>&gt;</span>Open Menu<span class="hljs-tag">&lt;/<span class="hljs-name">button</span>&gt;</span><br><span class="hljs-tag">&lt;<span class="hljs-name">div</span> <span class="hljs-attr">id</span>=<span class="hljs-string">&#x27;log&#x27;</span>&gt;</span><span class="hljs-tag">&lt;/<span class="hljs-name">div</span>&gt;</span><br><span class="hljs-tag">&lt;<span class="hljs-name">script</span>&gt;</span><span class="language-javascript"><br> myAside.<span class="hljs-title function_">addEventListener</span>(<span class="hljs-string">&#x27;aside_state_change&#x27;</span>, <span class="hljs-function"><span class="hljs-params">e</span> =&gt;</span> {<br> log.<span class="hljs-property">textContent</span> = <span class="hljs-string">&#x27;state: &#x27;</span> + e.<span class="hljs-property">detail</span>.<span class="hljs-property">state</span>;<br> });<br></span><span class="hljs-tag">&lt;/<span class="hljs-name">script</span>&gt;</span></code></pre>
447
617
  </k-card>
448
618
  </div>
449
619
  <div class="col m-span-12 px">
@@ -492,6 +662,8 @@
492
662
  <p>Whether clicking the overlay backdrop closes the aside. Defaults to <code>true</code>. Syncs to <code>overlay-close</code> attribute.</p>
493
663
  <h5><code>escClose<i>: boolean</i></code></h5>
494
664
  <p>Whether pressing the ESC key closes the aside. Defaults to <code>true</code>. Syncs to <code>esc-close</code> attribute.</p>
665
+ <h5><code>persistentId<i>: string | null</i></code></h5>
666
+ <p>When set, the aside's <code>state</code> is saved to <code>localStorage</code> under <code>aside-persistent-id-{id}</code> on every change, and restored when the element connects. Defaults to <code>null</code>. Syncs to <code>persistent-id</code> attribute.</p>
495
667
 
496
668
  <h3 id="eventRef"><a href="#eventRef" class="no-link">Events</a></h3>
497
669
  <h5><code>aside_state_change</code></h5>
@@ -560,12 +732,14 @@
560
732
  <h3 id="asideToggle"><a href="#asideToggle" class="no-link">k-aside-toggle</a></h3>
561
733
  <p>A header with a collapse/expand toggle button. Renders an arrow icon that flips direction based on state. Place content (e.g. a logo) in the default slot; it hides when collapsed.</p>
562
734
  <p>No additional attributes. Automatically syncs with the parent aside's state.</p>
563
-
735
+
564
736
  </k-main>
565
737
  <div style="height:33vh"></div>
566
- <script type="module" src="../src/components/Import.js"></script>
567
738
  <script type="module" src="../src/components/Main.js"></script>
568
- <script type="module" src="../src/components/Aside.js"></script>
569
- <script type="module" src="../src/components/Card.js"></script>
739
+
740
+ <script type="module" src="../src/components/Accordion.js"></script>
741
+ <script type="module" src="../src/components/Aside.js"></script>
742
+ <script type="module" src="../src/components/Card.js"></script>
743
+
570
744
  </body>
571
- </html>
745
+ </html>