kempo-ui 0.0.43 → 0.0.63

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 (194) hide show
  1. package/.github/copilot-instructions.md +11 -0
  2. package/.github/workflows/publish.yml +66 -0
  3. package/CONTRIBUTING.md +70 -0
  4. package/dist/components/Dialog.js +9 -8
  5. package/dist/components/HtmlEditor.js +91 -0
  6. package/dist/components/Icon.js +2 -2
  7. package/dist/components/Main.js +5 -9
  8. package/dist/components/ShadowComponent.js +1 -1
  9. package/dist/components/SideMenu.js +1 -1
  10. package/dist/components/SidePanel.js +46 -35
  11. package/dist/components/htmlEditorControls/AlignCenter.js +12 -0
  12. package/dist/components/htmlEditorControls/AlignJustify.js +12 -0
  13. package/dist/components/htmlEditorControls/AlignLeft.js +12 -0
  14. package/dist/components/htmlEditorControls/AlignRight.js +12 -0
  15. package/dist/components/htmlEditorControls/Bold.js +12 -0
  16. package/dist/components/htmlEditorControls/BulletList.js +12 -0
  17. package/dist/components/htmlEditorControls/CharacterCount.js +18 -0
  18. package/dist/components/htmlEditorControls/ClearFormatting.js +12 -0
  19. package/dist/components/htmlEditorControls/CodeBlock.js +12 -0
  20. package/dist/components/htmlEditorControls/ControlGroup.js +14 -0
  21. package/dist/components/htmlEditorControls/ControlSpacer.js +6 -0
  22. package/dist/components/htmlEditorControls/CreateLink.js +15 -0
  23. package/dist/components/htmlEditorControls/DropdownControl.js +57 -0
  24. package/dist/components/htmlEditorControls/FormatBlock.js +12 -0
  25. package/dist/components/htmlEditorControls/HtmlEditorControl.js +44 -0
  26. package/dist/components/htmlEditorControls/InlineCode.js +12 -0
  27. package/dist/components/htmlEditorControls/InsertTable.js +15 -0
  28. package/dist/components/htmlEditorControls/Italic.js +12 -0
  29. package/dist/components/htmlEditorControls/Mode.js +9 -0
  30. package/dist/components/htmlEditorControls/NumberList.js +12 -0
  31. package/dist/components/htmlEditorControls/Strikethrough.js +12 -0
  32. package/dist/components/htmlEditorControls/TextBackgroundColor.js +97 -0
  33. package/dist/components/htmlEditorControls/TextColor.js +97 -0
  34. package/dist/components/htmlEditorControls/Underline.js +12 -0
  35. package/dist/components/htmlEditorControls/WordCount.js +18 -0
  36. package/dist/utils/formatCode.js +1 -0
  37. package/docs/components/dropdown.html +2 -2
  38. package/docs/components/html-editor.html +442 -0
  39. package/docs/components/icon.html +2 -7
  40. package/docs/components/photo-viewer.html +14 -14
  41. package/docs/components/side-menu.html +32 -0
  42. package/docs/components/side-panel-dual.html +70 -0
  43. package/docs/components/side-panel-scroll.html +176 -0
  44. package/docs/components/side-panel.html +41 -1
  45. package/docs/icons/arrow_drop_down.svg +1 -0
  46. package/docs/icons/circle.svg +1 -0
  47. package/docs/icons/code.svg +1 -0
  48. package/docs/icons/code_blocks.svg +1 -0
  49. package/docs/icons/copy.svg +1 -0
  50. package/docs/icons/dot.svg +1 -0
  51. package/docs/icons/format_align_center.svg +1 -0
  52. package/docs/icons/format_align_justify.svg +1 -0
  53. package/docs/icons/format_align_left.svg +1 -0
  54. package/docs/icons/format_align_right.svg +1 -0
  55. package/docs/icons/format_bold.svg +1 -0
  56. package/docs/icons/format_clear.svg +1 -0
  57. package/docs/icons/format_color_fill.svg +1 -0
  58. package/docs/icons/format_color_text.svg +1 -0
  59. package/docs/icons/format_h1.svg +1 -0
  60. package/docs/icons/format_h2.svg +1 -0
  61. package/docs/icons/format_h3.svg +1 -0
  62. package/docs/icons/format_h4.svg +1 -0
  63. package/docs/icons/format_h5.svg +1 -0
  64. package/docs/icons/format_h6.svg +1 -0
  65. package/docs/icons/format_italic.svg +1 -0
  66. package/docs/icons/format_list_bulleted.svg +1 -0
  67. package/docs/icons/format_list_numbered.svg +1 -0
  68. package/docs/icons/format_paragraph.svg +1 -0
  69. package/docs/icons/format_underlined.svg +1 -0
  70. package/docs/icons/help.svg +1 -0
  71. package/docs/icons/link.svg +1 -0
  72. package/docs/icons/more_vert.svg +1 -0
  73. package/docs/icons/strikethrough_s.svg +1 -0
  74. package/docs/icons/table.svg +1 -0
  75. package/docs/icons/wysiwyg.svg +1 -0
  76. package/docs/index.html +6 -0
  77. package/docs/nav-1.inc.html +1 -0
  78. package/docs/nav.inc.html +1 -0
  79. package/docs/src/components/Dialog.js +9 -8
  80. package/docs/src/components/HtmlEditor.js +91 -0
  81. package/docs/src/components/Icon.js +2 -2
  82. package/docs/src/components/Main.js +5 -9
  83. package/docs/src/components/ShadowComponent.js +1 -1
  84. package/docs/src/components/SideMenu.js +1 -1
  85. package/docs/src/components/SidePanel.js +46 -35
  86. package/docs/src/components/htmlEditorControls/AlignCenter.js +12 -0
  87. package/docs/src/components/htmlEditorControls/AlignJustify.js +12 -0
  88. package/docs/src/components/htmlEditorControls/AlignLeft.js +12 -0
  89. package/docs/src/components/htmlEditorControls/AlignRight.js +12 -0
  90. package/docs/src/components/htmlEditorControls/Bold.js +12 -0
  91. package/docs/src/components/htmlEditorControls/BulletList.js +12 -0
  92. package/docs/src/components/htmlEditorControls/CharacterCount.js +18 -0
  93. package/docs/src/components/htmlEditorControls/ClearFormatting.js +12 -0
  94. package/docs/src/components/htmlEditorControls/CodeBlock.js +12 -0
  95. package/docs/src/components/htmlEditorControls/ControlGroup.js +14 -0
  96. package/docs/src/components/htmlEditorControls/ControlSpacer.js +6 -0
  97. package/docs/src/components/htmlEditorControls/CreateLink.js +15 -0
  98. package/docs/src/components/htmlEditorControls/DropdownControl.js +57 -0
  99. package/docs/src/components/htmlEditorControls/FormatBlock.js +12 -0
  100. package/docs/src/components/htmlEditorControls/HtmlEditorControl.js +44 -0
  101. package/docs/src/components/htmlEditorControls/InlineCode.js +12 -0
  102. package/docs/src/components/htmlEditorControls/InsertTable.js +15 -0
  103. package/docs/src/components/htmlEditorControls/Italic.js +12 -0
  104. package/docs/src/components/htmlEditorControls/Mode.js +9 -0
  105. package/docs/src/components/htmlEditorControls/NumberList.js +12 -0
  106. package/docs/src/components/htmlEditorControls/Strikethrough.js +12 -0
  107. package/docs/src/components/htmlEditorControls/TextBackgroundColor.js +97 -0
  108. package/docs/src/components/htmlEditorControls/TextColor.js +97 -0
  109. package/docs/src/components/htmlEditorControls/Underline.js +12 -0
  110. package/docs/src/components/htmlEditorControls/WordCount.js +18 -0
  111. package/docs/src/utils/formatCode.js +1 -0
  112. package/icons/arrow_drop_down.svg +1 -0
  113. package/icons/circle.svg +1 -0
  114. package/icons/code.svg +1 -0
  115. package/icons/code_blocks.svg +1 -0
  116. package/icons/copy.svg +1 -0
  117. package/icons/dot.svg +1 -0
  118. package/icons/format_align_center.svg +1 -0
  119. package/icons/format_align_justify.svg +1 -0
  120. package/icons/format_align_left.svg +1 -0
  121. package/icons/format_align_right.svg +1 -0
  122. package/icons/format_bold.svg +1 -0
  123. package/icons/format_clear.svg +1 -0
  124. package/icons/format_color_fill.svg +1 -0
  125. package/icons/format_color_text.svg +1 -0
  126. package/icons/format_h1.svg +1 -0
  127. package/icons/format_h2.svg +1 -0
  128. package/icons/format_h3.svg +1 -0
  129. package/icons/format_h4.svg +1 -0
  130. package/icons/format_h5.svg +1 -0
  131. package/icons/format_h6.svg +1 -0
  132. package/icons/format_italic.svg +1 -0
  133. package/icons/format_list_bulleted.svg +1 -0
  134. package/icons/format_list_numbered.svg +1 -0
  135. package/icons/format_paragraph.svg +1 -0
  136. package/icons/format_underlined.svg +1 -0
  137. package/icons/help.svg +1 -0
  138. package/icons/link.svg +1 -0
  139. package/icons/more_vert.svg +1 -0
  140. package/icons/strikethrough_s.svg +1 -0
  141. package/icons/table.svg +1 -0
  142. package/icons/wysiwyg.svg +1 -0
  143. package/package.json +6 -5
  144. package/scripts/getIcon.js +52 -0
  145. package/src/components/Dialog.js +25 -10
  146. package/src/components/HtmlEditor.js +1548 -0
  147. package/src/components/Icon.js +6 -3
  148. package/src/components/Main.js +22 -23
  149. package/src/components/ShadowComponent.js +0 -1
  150. package/src/components/SideMenu.js +10 -0
  151. package/src/components/SidePanel.js +78 -37
  152. package/src/components/htmlEditorControls/AlignCenter.js +65 -0
  153. package/src/components/htmlEditorControls/AlignJustify.js +65 -0
  154. package/src/components/htmlEditorControls/AlignLeft.js +65 -0
  155. package/src/components/htmlEditorControls/AlignRight.js +65 -0
  156. package/src/components/htmlEditorControls/Bold.js +65 -0
  157. package/src/components/htmlEditorControls/BulletList.js +65 -0
  158. package/src/components/htmlEditorControls/CharacterCount.js +75 -0
  159. package/src/components/htmlEditorControls/ClearFormatting.js +65 -0
  160. package/src/components/htmlEditorControls/CodeBlock.js +72 -0
  161. package/src/components/htmlEditorControls/ControlGroup.js +95 -0
  162. package/src/components/htmlEditorControls/ControlSpacer.js +23 -0
  163. package/src/components/htmlEditorControls/CreateLink.js +121 -0
  164. package/src/components/htmlEditorControls/DropdownControl.js +149 -0
  165. package/src/components/htmlEditorControls/FormatBlock.js +108 -0
  166. package/src/components/htmlEditorControls/HtmlEditorControl.js +126 -0
  167. package/src/components/htmlEditorControls/InlineCode.js +77 -0
  168. package/src/components/htmlEditorControls/InsertTable.js +171 -0
  169. package/src/components/htmlEditorControls/Italic.js +65 -0
  170. package/src/components/htmlEditorControls/Mode.js +66 -0
  171. package/src/components/htmlEditorControls/NumberList.js +65 -0
  172. package/src/components/htmlEditorControls/Strikethrough.js +65 -0
  173. package/src/components/htmlEditorControls/TextBackgroundColor.js +195 -0
  174. package/src/components/htmlEditorControls/TextColor.js +195 -0
  175. package/src/components/htmlEditorControls/Underline.js +65 -0
  176. package/src/components/htmlEditorControls/WordCount.js +76 -0
  177. package/src/utils/formatCode.js +87 -0
  178. package/tests/components/Main.browser-test.js +166 -105
  179. package/tests/components/SidePanel.browser-test.js +62 -8
  180. package/.github/workflows/publish-major.yml +0 -39
  181. package/.github/workflows/publish-minor.yml +0 -39
  182. package/.github/workflows/publish-patch.yml +0 -45
  183. package/docs/icons/arrow-back.svg +0 -1
  184. package/docs/icons/arrow-down-double.svg +0 -1
  185. package/docs/icons/arrow-down.svg +0 -1
  186. package/docs/icons/arrow-forward.svg +0 -1
  187. package/docs/icons/arrow-menu-close.svg +0 -1
  188. package/docs/icons/arrow-menu-open.svg +0 -1
  189. package/docs/icons/arrow-right.svg +0 -1
  190. package/docs/icons/arrow-up-double.svg +0 -1
  191. package/docs/icons/arrow-up.svg +0 -1
  192. package/docs/icons/chevron-left.svg +0 -1
  193. package/docs/icons/chevron-right.svg +0 -1
  194. package/docs/icons/chevron-up.svg +0 -1
@@ -4,7 +4,7 @@
4
4
  <meta charset="UTF-8">
5
5
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
6
6
  <title>PhotoViewer - Components - Kempo Docs - A Web Components Solution</title>
7
- <link rel="icon" type="image/png" sizes="48x48" href="../media/icon48.png">
7
+ <link rel="icon" type="image/png" sizes="48x48" href=".../media/icon48.png">
8
8
  <link rel="manifest" href="../manifest.json" />
9
9
  <link rel="stylesheet" href="../kempo-vars.css" />
10
10
  <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/kempo-css@1.3.2/dist/kempo.min.css" />
@@ -45,14 +45,14 @@
45
45
  <div class="row -mx mb">
46
46
  <div class="col d-span-6 m-span-12 px">
47
47
  <k-card label="HTML">
48
- <pre><code class="hljs xml"><span class="hljs-tag">&lt;<span class="hljs-name">k-photo-viewer</span><br /> <span class="hljs-attr">src</span>=<span class="hljs-string">"./media/civic.jpg"</span><br /> <span class="hljs-attr">alt</span>=<span class="hljs-string">"Honda Civic Type R"</span><br />&gt;</span><br /> <span class="hljs-tag">&lt;<span class="hljs-name">p</span>&gt;</span>Honda Civic Type R - Track-focused hot hatch<span class="hljs-tag">&lt;/<span class="hljs-name">p</span>&gt;</span><br /><span class="hljs-tag">&lt;/<span class="hljs-name">k-photo-viewer</span>&gt;</span></code></pre>
48
+ <pre><code class="hljs xml"><span class="hljs-tag">&lt;<span class="hljs-name">k-photo-viewer</span><br /> <span class="hljs-attr">src</span>=<span class="hljs-string">"../media/civic.jpg"</span><br /> <span class="hljs-attr">alt</span>=<span class="hljs-string">"Honda Civic Type R"</span><br />&gt;</span><br /> <span class="hljs-tag">&lt;<span class="hljs-name">p</span>&gt;</span>Honda Civic Type R - Track-focused hot hatch<span class="hljs-tag">&lt;/<span class="hljs-name">p</span>&gt;</span><br /><span class="hljs-tag">&lt;/<span class="hljs-name">k-photo-viewer</span>&gt;</span></code></pre>
49
49
  </k-card>
50
50
  </div>
51
51
  <div class="col d-span-6 m-span-12 px">
52
52
  <k-card label="Results">
53
53
  <div class="mb" style="max-width: 400px;">
54
54
  <k-photo-viewer
55
- src="./media/civic.jpg"
55
+ src="../media/civic.jpg"
56
56
  alt="Honda Civic Type R"
57
57
  >
58
58
  <p>Honda Civic Type R - Track-focused hot hatch</p>
@@ -68,26 +68,26 @@
68
68
  <div class="row -mx mb">
69
69
  <div class="col d-span-6 m-span-12 px">
70
70
  <k-card label="HTML">
71
- <pre><code class="hljs xml"><span class="hljs-tag">&lt;<span class="hljs-name">div</span> <span class="hljs-attr">class</span>=<span class="hljs-string">"gallery"</span>&gt;</span><br /> <span class="hljs-tag">&lt;<span class="hljs-name">k-photo-viewer</span> <span class="hljs-attr">src</span>=<span class="hljs-string">"./media/civic.jpg"</span> <span class="hljs-attr">alt</span>=<span class="hljs-string">"Honda Civic Type R"</span>&gt;</span><br /> <span class="hljs-tag">&lt;<span class="hljs-name">h6</span>&gt;</span>Honda Civic Type R<span class="hljs-tag">&lt;/<span class="hljs-name">h6</span>&gt;</span><br /> <span class="hljs-tag">&lt;/<span class="hljs-name">k-photo-viewer</span>&gt;</span><br /> <span class="hljs-tag">&lt;<span class="hljs-name">k-photo-viewer</span> <span class="hljs-attr">src</span>=<span class="hljs-string">"./media/corvette.jpg"</span> <span class="hljs-attr">alt</span>=<span class="hljs-string">"Chevrolet Corvette C8"</span>&gt;</span><br /> <span class="hljs-tag">&lt;<span class="hljs-name">h6</span>&gt;</span>Chevrolet Corvette C8<span class="hljs-tag">&lt;/<span class="hljs-name">h6</span>&gt;</span><br /> <span class="hljs-tag">&lt;/<span class="hljs-name">k-photo-viewer</span>&gt;</span><br /> <span class="hljs-tag">&lt;<span class="hljs-name">k-photo-viewer</span> <span class="hljs-attr">src</span>=<span class="hljs-string">"./media/evo.jpg"</span> <span class="hljs-attr">alt</span>=<span class="hljs-string">"Mitsubishi Lancer Evolution"</span>&gt;</span><br /> <span class="hljs-tag">&lt;<span class="hljs-name">h6</span>&gt;</span>Mitsubishi Lancer Evolution<span class="hljs-tag">&lt;/<span class="hljs-name">h6</span>&gt;</span><br /> <span class="hljs-tag">&lt;/<span class="hljs-name">k-photo-viewer</span>&gt;</span><br /><span class="hljs-tag">&lt;/<span class="hljs-name">div</span>&gt;</span></code></pre>
71
+ <pre><code class="hljs xml"><span class="hljs-tag">&lt;<span class="hljs-name">div</span> <span class="hljs-attr">class</span>=<span class="hljs-string">"gallery"</span>&gt;</span><br /> <span class="hljs-tag">&lt;<span class="hljs-name">k-photo-viewer</span> <span class="hljs-attr">src</span>=<span class="hljs-string">"../media/civic.jpg"</span> <span class="hljs-attr">alt</span>=<span class="hljs-string">"Honda Civic Type R"</span>&gt;</span><br /> <span class="hljs-tag">&lt;<span class="hljs-name">h6</span>&gt;</span>Honda Civic Type R<span class="hljs-tag">&lt;/<span class="hljs-name">h6</span>&gt;</span><br /> <span class="hljs-tag">&lt;/<span class="hljs-name">k-photo-viewer</span>&gt;</span><br /> <span class="hljs-tag">&lt;<span class="hljs-name">k-photo-viewer</span> <span class="hljs-attr">src</span>=<span class="hljs-string">"../media/corvette.jpg"</span> <span class="hljs-attr">alt</span>=<span class="hljs-string">"Chevrolet Corvette C8"</span>&gt;</span><br /> <span class="hljs-tag">&lt;<span class="hljs-name">h6</span>&gt;</span>Chevrolet Corvette C8<span class="hljs-tag">&lt;/<span class="hljs-name">h6</span>&gt;</span><br /> <span class="hljs-tag">&lt;/<span class="hljs-name">k-photo-viewer</span>&gt;</span><br /> <span class="hljs-tag">&lt;<span class="hljs-name">k-photo-viewer</span> <span class="hljs-attr">src</span>=<span class="hljs-string">"../media/evo.jpg"</span> <span class="hljs-attr">alt</span>=<span class="hljs-string">"Mitsubishi Lancer Evolution"</span>&gt;</span><br /> <span class="hljs-tag">&lt;<span class="hljs-name">h6</span>&gt;</span>Mitsubishi Lancer Evolution<span class="hljs-tag">&lt;/<span class="hljs-name">h6</span>&gt;</span><br /> <span class="hljs-tag">&lt;/<span class="hljs-name">k-photo-viewer</span>&gt;</span><br /><span class="hljs-tag">&lt;/<span class="hljs-name">div</span>&gt;</span></code></pre>
72
72
  </k-card>
73
73
  </div>
74
74
  <div class="col d-span-6 m-span-12 px">
75
75
  <k-card label="Results">
76
76
  <div class="gallery mb" style="display: grid; grid-template-columns: repeat(auto-fit, minmax(200px, 1fr)); gap: 1rem; max-width: 800px;">
77
77
  <k-photo-viewer
78
- src="./media/civic.jpg"
78
+ src="../media/civic.jpg"
79
79
  alt="Honda Civic Type R"
80
80
  >
81
81
  <h6 class="m0">Honda Civic Type R</h6>
82
82
  </k-photo-viewer>
83
83
  <k-photo-viewer
84
- src="./media/corvette.jpg"
84
+ src="../media/corvette.jpg"
85
85
  alt="Chevrolet Corvette C8"
86
86
  >
87
87
  <h6 class="m0">Chevrolet Corvette C8</h6>
88
88
  </k-photo-viewer>
89
89
  <k-photo-viewer
90
- src="./media/evo.jpg"
90
+ src="../media/evo.jpg"
91
91
  alt="Mitsubishi Lancer Evolution"
92
92
  >
93
93
  <h6 class="m0">Mitsubishi Lancer Evolution</h6>
@@ -102,14 +102,14 @@
102
102
  <div class="row -mx mb">
103
103
  <div class="col d-span-6 m-span-12 px">
104
104
  <k-card label="HTML">
105
- <pre><code class="hljs xml"><span class="hljs-tag">&lt;<span class="hljs-name">k-photo-viewer</span><br /> <span class="hljs-attr">src</span>=<span class="hljs-string">"./media/gtr.jpg"</span><br /> <span class="hljs-attr">alt</span>=<span class="hljs-string">"Nissan GT-R"</span><br /> <span class="hljs-attr">global</span><br />&gt;</span><br /> <span class="hljs-tag">&lt;<span class="hljs-name">h6</span>&gt;</span>Nissan GT-R (Global Navigation)<span class="hljs-tag">&lt;/<span class="hljs-name">h6</span>&gt;</span><br /><span class="hljs-tag">&lt;/<span class="hljs-name">k-photo-viewer</span>&gt;</span></code></pre>
105
+ <pre><code class="hljs xml"><span class="hljs-tag">&lt;<span class="hljs-name">k-photo-viewer</span><br /> <span class="hljs-attr">src</span>=<span class="hljs-string">"../media/gtr.jpg"</span><br /> <span class="hljs-attr">alt</span>=<span class="hljs-string">"Nissan GT-R"</span><br /> <span class="hljs-attr">global</span><br />&gt;</span><br /> <span class="hljs-tag">&lt;<span class="hljs-name">h6</span>&gt;</span>Nissan GT-R (Global Navigation)<span class="hljs-tag">&lt;/<span class="hljs-name">h6</span>&gt;</span><br /><span class="hljs-tag">&lt;/<span class="hljs-name">k-photo-viewer</span>&gt;</span></code></pre>
106
106
  </k-card>
107
107
  </div>
108
108
  <div class="col d-span-6 m-span-12 px">
109
109
  <k-card label="Results">
110
110
  <div class="mb" style="max-width: 300px;">
111
111
  <k-photo-viewer
112
- src="./media/gtr.jpg"
112
+ src="../media/gtr.jpg"
113
113
  alt="Nissan GT-R"
114
114
  global
115
115
  >
@@ -126,14 +126,14 @@
126
126
  <div class="row -mx mb">
127
127
  <div class="col d-span-6 m-span-12 px">
128
128
  <k-card label="HTML">
129
- <pre><code class="hljs xml"><span class="hljs-tag">&lt;<span class="hljs-name">k-photo-viewer</span><br /> <span class="hljs-attr">src</span>=<span class="hljs-string">"./media/nsx.jpg"</span><br /> <span class="hljs-attr">alt</span>=<span class="hljs-string">"Honda NSX"</span><br /> <span class="hljs-attr">keyboard-controls</span>=<span class="hljs-string">"false"</span><br />&gt;</span><br /> <span class="hljs-tag">&lt;<span class="hljs-name">span</span> <span class="hljs-attr">slot</span>=<span class="hljs-string">"close"</span>&gt;</span>✕<span class="hljs-tag">&lt;/<span class="hljs-name">span</span>&gt;</span><br /> <span class="hljs-tag">&lt;<span class="hljs-name">span</span> <span class="hljs-attr">slot</span>=<span class="hljs-string">"prev"</span>&gt;</span>◀<span class="hljs-tag">&lt;/<span class="hljs-name">span</span>&gt;</span><br /> <span class="hljs-tag">&lt;<span class="hljs-name">span</span> <span class="hljs-attr">slot</span>=<span class="hljs-string">"next"</span>&gt;</span>▶<span class="hljs-tag">&lt;/<span class="hljs-name">span</span>&gt;</span><br /> <span class="hljs-tag">&lt;<span class="hljs-name">h6</span>&gt;</span>Honda NSX<span class="hljs-tag">&lt;/<span class="hljs-name">h6</span>&gt;</span><br /> <span class="hljs-tag">&lt;<span class="hljs-name">p</span>&gt;</span>Custom controls, keyboard disabled<span class="hljs-tag">&lt;/<span class="hljs-name">p</span>&gt;</span><br /><span class="hljs-tag">&lt;/<span class="hljs-name">k-photo-viewer</span>&gt;</span><br /><span class="hljs-tag">&lt;<span class="hljs-name">k-photo-viewer</span><br /> <span class="hljs-attr">src</span>=<span class="hljs-string">"./media/evo.jpg"</span><br /> <span class="hljs-attr">alt</span>=<span class="hljs-string">"Mitsubishi Lancer Evolution"</span><br /> <span class="hljs-attr">keyboard-controls</span>=<span class="hljs-string">"false"</span><br />&gt;</span><br /> <span class="hljs-tag">&lt;<span class="hljs-name">span</span> <span class="hljs-attr">slot</span>=<span class="hljs-string">"close"</span>&gt;</span>✕<span class="hljs-tag">&lt;/<span class="hljs-name">span</span>&gt;</span><br /> <span class="hljs-tag">&lt;<span class="hljs-name">span</span> <span class="hljs-attr">slot</span>=<span class="hljs-string">"prev"</span>&gt;</span>◀<span class="hljs-tag">&lt;/<span class="hljs-name">span</span>&gt;</span><br /> <span class="hljs-tag">&lt;<span class="hljs-name">span</span> <span class="hljs-attr">slot</span>=<span class="hljs-string">"next"</span>&gt;</span>▶<span class="hljs-tag">&lt;/<span class="hljs-name">span</span>&gt;</span><br /> <span class="hljs-tag">&lt;<span class="hljs-name">h6</span>&gt;</span>Mitsubishi Lancer Evolution<span class="hljs-tag">&lt;/<span class="hljs-name">h6</span>&gt;</span><br /> <span class="hljs-tag">&lt;<span class="hljs-name">p</span>&gt;</span>Custom controls, keyboard disabled<span class="hljs-tag">&lt;/<span class="hljs-name">p</span>&gt;</span><br /><span class="hljs-tag">&lt;/<span class="hljs-name">k-photo-viewer</span>&gt;</span></code></pre>
129
+ <pre><code class="hljs xml"><span class="hljs-tag">&lt;<span class="hljs-name">k-photo-viewer</span><br /> <span class="hljs-attr">src</span>=<span class="hljs-string">"../media/nsx.jpg"</span><br /> <span class="hljs-attr">alt</span>=<span class="hljs-string">"Honda NSX"</span><br /> <span class="hljs-attr">keyboard-controls</span>=<span class="hljs-string">"false"</span><br />&gt;</span><br /> <span class="hljs-tag">&lt;<span class="hljs-name">span</span> <span class="hljs-attr">slot</span>=<span class="hljs-string">"close"</span>&gt;</span>✕<span class="hljs-tag">&lt;/<span class="hljs-name">span</span>&gt;</span><br /> <span class="hljs-tag">&lt;<span class="hljs-name">span</span> <span class="hljs-attr">slot</span>=<span class="hljs-string">"prev"</span>&gt;</span>◀<span class="hljs-tag">&lt;/<span class="hljs-name">span</span>&gt;</span><br /> <span class="hljs-tag">&lt;<span class="hljs-name">span</span> <span class="hljs-attr">slot</span>=<span class="hljs-string">"next"</span>&gt;</span>▶<span class="hljs-tag">&lt;/<span class="hljs-name">span</span>&gt;</span><br /> <span class="hljs-tag">&lt;<span class="hljs-name">h6</span>&gt;</span>Honda NSX<span class="hljs-tag">&lt;/<span class="hljs-name">h6</span>&gt;</span><br /> <span class="hljs-tag">&lt;<span class="hljs-name">p</span>&gt;</span>Custom controls, keyboard disabled<span class="hljs-tag">&lt;/<span class="hljs-name">p</span>&gt;</span><br /><span class="hljs-tag">&lt;/<span class="hljs-name">k-photo-viewer</span>&gt;</span><br /><span class="hljs-tag">&lt;<span class="hljs-name">k-photo-viewer</span><br /> <span class="hljs-attr">src</span>=<span class="hljs-string">"../media/evo.jpg"</span><br /> <span class="hljs-attr">alt</span>=<span class="hljs-string">"Mitsubishi Lancer Evolution"</span><br /> <span class="hljs-attr">keyboard-controls</span>=<span class="hljs-string">"false"</span><br />&gt;</span><br /> <span class="hljs-tag">&lt;<span class="hljs-name">span</span> <span class="hljs-attr">slot</span>=<span class="hljs-string">"close"</span>&gt;</span>✕<span class="hljs-tag">&lt;/<span class="hljs-name">span</span>&gt;</span><br /> <span class="hljs-tag">&lt;<span class="hljs-name">span</span> <span class="hljs-attr">slot</span>=<span class="hljs-string">"prev"</span>&gt;</span>◀<span class="hljs-tag">&lt;/<span class="hljs-name">span</span>&gt;</span><br /> <span class="hljs-tag">&lt;<span class="hljs-name">span</span> <span class="hljs-attr">slot</span>=<span class="hljs-string">"next"</span>&gt;</span>▶<span class="hljs-tag">&lt;/<span class="hljs-name">span</span>&gt;</span><br /> <span class="hljs-tag">&lt;<span class="hljs-name">h6</span>&gt;</span>Mitsubishi Lancer Evolution<span class="hljs-tag">&lt;/<span class="hljs-name">h6</span>&gt;</span><br /> <span class="hljs-tag">&lt;<span class="hljs-name">p</span>&gt;</span>Custom controls, keyboard disabled<span class="hljs-tag">&lt;/<span class="hljs-name">p</span>&gt;</span><br /><span class="hljs-tag">&lt;/<span class="hljs-name">k-photo-viewer</span>&gt;</span></code></pre>
130
130
  </k-card>
131
131
  </div>
132
132
  <div class="col d-span-6 m-span-12 px">
133
133
  <k-card label="Results">
134
134
  <div class="gallery mb" style="display: grid; grid-template-columns: repeat(auto-fit, minmax(200px, 1fr)); gap: 1rem; max-width: 800px;">
135
135
  <k-photo-viewer
136
- src="./media/nsx.jpg"
136
+ src="../media/nsx.jpg"
137
137
  alt="Honda NSX"
138
138
  keyboard-controls="false"
139
139
  >
@@ -144,7 +144,7 @@
144
144
  <p class="m0">Custom controls, keyboard disabled</p>
145
145
  </k-photo-viewer>
146
146
  <k-photo-viewer
147
- src="./media/evo.jpg"
147
+ src="../media/evo.jpg"
148
148
  alt="Mitsubishi Lancer Evolution"
149
149
  keyboard-controls="false"
150
150
  >
@@ -165,14 +165,14 @@
165
165
  <div class="row -mx mb">
166
166
  <div class="col d-span-6 m-span-12 px">
167
167
  <k-card label="HTML">
168
- <pre><code class="hljs xml"><span class="hljs-tag">&lt;<span class="hljs-name">k-photo-viewer</span><br /> <span class="hljs-attr">src</span>=<span class="hljs-string">"./media/corvette.jpg"</span><br /> <span class="hljs-attr">alt</span>=<span class="hljs-string">"Chevrolet Corvette C8"</span><br />&gt;</span><br /> <span class="hljs-comment">&lt;!-- Default caption (thumbnail view) --&gt;</span><br /> <span class="hljs-tag">&lt;<span class="hljs-name">h6</span>&gt;</span>Corvette C8<span class="hljs-tag">&lt;/<span class="hljs-name">h6</span>&gt;</span><br /> <br /> <span class="hljs-comment">&lt;!-- Fullscreen caption --&gt;</span><br /> <span class="hljs-tag">&lt;<span class="hljs-name">div</span> <span class="hljs-attr">slot</span>=<span class="hljs-string">"fullscreen-caption"</span>&gt;</span><br /> <span class="hljs-tag">&lt;<span class="hljs-name">h4</span>&gt;</span>2020 Chevrolet Corvette C8 Stingray<span class="hljs-tag">&lt;/<span class="hljs-name">h4</span>&gt;</span><br /> <span class="hljs-tag">&lt;<span class="hljs-name">p</span>&gt;</span>The first mid-engine Corvette featuring a 6.2L V8 engine<span class="hljs-tag">&lt;/<span class="hljs-name">p</span>&gt;</span><br /> <span class="hljs-tag">&lt;/<span class="hljs-name">div</span>&gt;</span><br /><span class="hljs-tag">&lt;/<span class="hljs-name">k-photo-viewer</span>&gt;</span></code></pre>
168
+ <pre><code class="hljs xml"><span class="hljs-tag">&lt;<span class="hljs-name">k-photo-viewer</span><br /> <span class="hljs-attr">src</span>=<span class="hljs-string">"../media/corvette.jpg"</span><br /> <span class="hljs-attr">alt</span>=<span class="hljs-string">"Chevrolet Corvette C8"</span><br />&gt;</span><br /> <span class="hljs-comment">&lt;!-- Default caption (thumbnail view) --&gt;</span><br /> <span class="hljs-tag">&lt;<span class="hljs-name">h6</span>&gt;</span>Corvette C8<span class="hljs-tag">&lt;/<span class="hljs-name">h6</span>&gt;</span><br /> <br /> <span class="hljs-comment">&lt;!-- Fullscreen caption --&gt;</span><br /> <span class="hljs-tag">&lt;<span class="hljs-name">div</span> <span class="hljs-attr">slot</span>=<span class="hljs-string">"fullscreen-caption"</span>&gt;</span><br /> <span class="hljs-tag">&lt;<span class="hljs-name">h4</span>&gt;</span>2020 Chevrolet Corvette C8 Stingray<span class="hljs-tag">&lt;/<span class="hljs-name">h4</span>&gt;</span><br /> <span class="hljs-tag">&lt;<span class="hljs-name">p</span>&gt;</span>The first mid-engine Corvette featuring a 6.2L V8 engine<span class="hljs-tag">&lt;/<span class="hljs-name">p</span>&gt;</span><br /> <span class="hljs-tag">&lt;/<span class="hljs-name">div</span>&gt;</span><br /><span class="hljs-tag">&lt;/<span class="hljs-name">k-photo-viewer</span>&gt;</span></code></pre>
169
169
  </k-card>
170
170
  </div>
171
171
  <div class="col d-span-6 m-span-12 px">
172
172
  <k-card label="Results">
173
173
  <div class="mb" style="max-width: 400px;">
174
174
  <k-photo-viewer
175
- src="./media/corvette.jpg"
175
+ src="../media/corvette.jpg"
176
176
  alt="Chevrolet Corvette C8"
177
177
  >
178
178
  <h6 class="m0">Corvette C8</h6>
@@ -22,6 +22,7 @@
22
22
  <h6>Examples</h6>
23
23
  <a href="#basicUsage">Basic Usage</a><br />
24
24
  <a href="#closing">Closing</a><br />
25
+ <a href="#escClose">ESC Key Close</a><br />
25
26
  <a href="#rightSideMenu">Right Side Menu</a><br />
26
27
 
27
28
  <h6 class="mt">JavaScript Reference</h6>
@@ -58,6 +59,7 @@
58
59
 
59
60
  <h3 id="closing"><a href="#closing" class="no-link">Closing</a></h3>
60
61
  <p>By default clicking on the overlay (the part that covers the page while the Side Menu is open) will close the Side Menu. Use the <code>overlay-close="false"</code> attribute/value to disable this.</p>
62
+ <p>By default pressing the ESC key will also close the Side Menu. Use the <code>esc-close="false"</code> attribute/value to disable this.</p>
61
63
  <p>Use the <code>close()</code> method to close the Side Menu, alternately you can use the <code>toggle()</code> method which can be used to open or close the Side Menu.</p>
62
64
  <div class="row -mx">
63
65
  <div class="col m-span-12 px">
@@ -85,6 +87,34 @@
85
87
  </div>
86
88
  </div>
87
89
 
90
+ <h3 id="escClose"><a href="#escClose" class="no-link">ESC Key Close</a></h3>
91
+ <p>By default pressing the ESC key will close the Side Menu. Use the <code>esc-close="false"</code> attribute/value to disable this behavior.</p>
92
+ <div class="row -mx">
93
+ <div class="col m-span-12 px">
94
+ <k-card label="HTML">
95
+ <pre><code class="hljs xml"><span class="hljs-tag">&lt;<span class="hljs-name">k-side-menu</span> <span class="hljs-attr">id</span>=<span class="hljs-string">"sm4"</span> <span class="hljs-attr">esc-close</span>=<span class="hljs-string">"false"</span>&gt;</span><br /> <span class="hljs-tag">&lt;<span class="hljs-name">p</span>&gt;</span>Side Menu 4 - ESC won't close this<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">id</span>=<span class="hljs-string">"close-sm4"</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-side-menu</span>&gt;</span><br /><span class="hljs-tag">&lt;<span class="hljs-name">button</span> <span class="hljs-attr">id</span>=<span class="hljs-string">"open-sm4"</span>&gt;</span>Open Side Menu 4<span class="hljs-tag">&lt;/<span class="hljs-name">button</span>&gt;</span><br /><span class="hljs-tag">&lt;<span class="hljs-name">script</span>&gt;</span><span class="javascript"><br /> <span class="hljs-keyword">const</span> $sm4 = <span class="hljs-built_in">document</span>.getElementById(<span class="hljs-string">'sm4'</span>);<br /> <span class="hljs-built_in">document</span>.getElementById(<span class="hljs-string">'open-sm4'</span>).addEventListener(<span class="hljs-string">'click'</span>,()=&gt;{<br /> $sm4.open();<br /> });<br /> <span class="hljs-built_in">document</span>.getElementById(<span class="hljs-string">'close-sm4'</span>).addEventListener(<span class="hljs-string">'click'</span>,()=&gt;{<br /> $sm4.close();<br /> });<br /></span><span class="hljs-tag">&lt;/<span class="hljs-name">script</span>&gt;</span></code></pre>
96
+ </k-card>
97
+ </div>
98
+ <div class="col m-span-12 px">
99
+ <k-card label="Output">
100
+ <k-side-menu id="sm4" esc-close="false">
101
+ <p>Side Menu 4 - ESC won't close this</p>
102
+ <button id="close-sm4">Close</button>
103
+ </k-side-menu>
104
+ <button id="open-sm4">Open Side Menu 4</button>
105
+ <script>
106
+ const $sm4 = document.getElementById('sm4');
107
+ document.getElementById('open-sm4').addEventListener('click',()=>{
108
+ $sm4.open();
109
+ });
110
+ document.getElementById('close-sm4').addEventListener('click',()=>{
111
+ $sm4.close();
112
+ });
113
+ </script>
114
+ </k-card>
115
+ </div>
116
+ </div>
117
+
88
118
  <h3 id="rightSideMenu"><a href="#rightSideMenu" class="no-link">Right Side Menu</a></h3>
89
119
  <p>Give the menu the <code>side="right"</code> attribute/value to make it open from the right side.</p>
90
120
  <div class="row -mx">
@@ -128,6 +158,8 @@
128
158
  <p>Whether the side menu is opened. Defaults to <code>false</code>. Syncs to <code>opened</code> attribute.</p>
129
159
  <h5><code>overlayClose<i>: boolean</i></code></h5>
130
160
  <p>Whether clicking the overlay closes the side menu. Defaults to <code>true</code>. Syncs to <code>overlay-close</code> attribute.</p>
161
+ <h5><code>escClose<i>: boolean</i></code></h5>
162
+ <p>Whether pressing the ESC key closes the side menu. Defaults to <code>true</code>. Syncs to <code>esc-close</code> attribute.</p>
131
163
  <h5><code>side<i>: string</i></code></h5>
132
164
  <p>The side from which the menu opens. Can be <code>"left"</code> or <code>"right"</code>. Defaults to <code>"left"</code>. Syncs to <code>side</code> attribute.</p>
133
165
 
@@ -0,0 +1,70 @@
1
+ <!DOCTYPE html>
2
+ <html lang="en">
3
+ <head>
4
+ <meta charset="UTF-8">
5
+ <meta name="viewport" content="width=device-width, initial-scale=1.0">
6
+ <title>SidePanel Dual - Components - Kempo Docs</title>
7
+ <link rel="stylesheet" href="../kempo-vars.css" />
8
+ <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/kempo-css@1.3.2/dist/kempo.min.css" />
9
+ <script>window.litDisableBundleWarning = true;</script>
10
+ <script type="module">
11
+ import theme from '../src/utils/theme.js';
12
+ theme.init();
13
+ </script>
14
+ <script type="module" src="../src/components/SidePanel.js"></script>
15
+ <script type="module" src="../src/components/Main.js"></script>
16
+ <style>
17
+ body {
18
+ margin: 0;
19
+ padding: 0;
20
+ }
21
+ </style>
22
+ </head>
23
+ <body>
24
+ <!-- Left Side Panel -->
25
+ <k-side-panel>
26
+ <h3 slot="logo" class="m0">Kempo</h3>
27
+ <k-side-panel-item icon="cards" href="#" active>Dashboard</k-side-panel-item>
28
+ <k-side-panel-item icon="check" href="#">Tasks</k-side-panel-item>
29
+ <k-side-panel-item icon="label" href="#">Email</k-side-panel-item>
30
+ <k-side-panel-label>Projects</k-side-panel-label>
31
+ <k-side-panel-item icon="folder" href="#">Figma Design</k-side-panel-item>
32
+ <k-side-panel-item icon="folder" href="#">Static Mania</k-side-panel-item>
33
+ <k-side-panel-spacer></k-side-panel-spacer>
34
+ <k-side-panel-item icon="settings" href="#">Settings</k-side-panel-item>
35
+ <k-side-panel-item icon="account-circle" href="#">Profile</k-side-panel-item>
36
+ </k-side-panel>
37
+
38
+ <!-- Right Side Panel -->
39
+ <k-side-panel side="right">
40
+ <h3 slot="logo" class="m0">Tools</h3>
41
+ <k-side-panel-item icon="notification" href="#">Notifications</k-side-panel-item>
42
+ <k-side-panel-item icon="chat" href="#">Messages</k-side-panel-item>
43
+ <k-side-panel-label>Recent</k-side-panel-label>
44
+ <k-side-panel-item icon="document" href="#">Document 1</k-side-panel-item>
45
+ <k-side-panel-item icon="document" href="#">Document 2</k-side-panel-item>
46
+ <k-side-panel-spacer></k-side-panel-spacer>
47
+ <k-side-panel-item icon="help" href="#">Help</k-side-panel-item>
48
+ </k-side-panel>
49
+
50
+ <!-- Main Content -->
51
+ <k-main>
52
+ <h1>Dual Side Panels</h1>
53
+ <p>This page demonstrates two side panels working simultaneously - one on the left and one on the right.</p>
54
+ <p>Try toggling each panel independently using the arrow buttons.</p>
55
+
56
+ <h2>Features</h2>
57
+ <ul>
58
+ <li>Left panel defaults to left side</li>
59
+ <li>Right panel uses <code>side="right"</code> attribute</li>
60
+ <li>Both panels can be collapsed/expanded independently</li>
61
+ <li>Main content automatically adjusts margins for both panels</li>
62
+ <li>Toggle arrows point correctly for each side</li>
63
+ </ul>
64
+
65
+ <h2>Lorem Ipsum</h2>
66
+ <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.</p>
67
+ <p>Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.</p>
68
+ </k-main>
69
+ </body>
70
+ </html>
@@ -0,0 +1,176 @@
1
+ <!DOCTYPE html>
2
+ <html lang="en">
3
+ <head>
4
+ <meta charset="UTF-8">
5
+ <meta name="viewport" content="width=device-width, initial-scale=1.0">
6
+ <title>SidePanel Scroll Example</title>
7
+ <link rel="stylesheet" href="../kempo-vars.css" />
8
+ <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/kempo-css@1.3.2/dist/kempo.min.css" />
9
+ <script>window.litDisableBundleWarning = true;</script>
10
+ <script type="module">
11
+ import theme from '../src/utils/theme.js';
12
+ theme.init();
13
+ </script>
14
+ <script type="module" src="../src/components/SidePanel.js"></script>
15
+ <script type="module" src="../src/components/Main.js"></script>
16
+ <style>
17
+ body {
18
+ margin: 0;
19
+ padding: 0;
20
+ }
21
+ </style>
22
+ </head>
23
+ <body>
24
+ <k-side-panel>
25
+ <h5 slot="logo" class="m0">Application</h5>
26
+
27
+ <k-side-panel-item icon="cards" href="#" active>Dashboard</k-side-panel-item>
28
+ <k-side-panel-item href="#">Analytics</k-side-panel-item>
29
+ <k-side-panel-item href="#">Reports</k-side-panel-item>
30
+
31
+ <k-side-panel-label>Communication</k-side-panel-label>
32
+ <k-side-panel-item icon="label" href="#">Email</k-side-panel-item>
33
+ <k-side-panel-item href="#">Messages</k-side-panel-item>
34
+ <k-side-panel-item href="#">Notifications</k-side-panel-item>
35
+
36
+ <k-side-panel-label>Projects</k-side-panel-label>
37
+ <k-side-panel-menu icon="folder" label="Active Projects">
38
+ <k-side-panel-item href="#">Website Redesign</k-side-panel-item>
39
+ <k-side-panel-item href="#">Mobile App</k-side-panel-item>
40
+ <k-side-panel-item href="#">API Integration</k-side-panel-item>
41
+ <k-side-panel-item href="#">Documentation</k-side-panel-item>
42
+ </k-side-panel-menu>
43
+ <k-side-panel-menu icon="folder" label="Archived Projects">
44
+ <k-side-panel-item href="#">Old Website</k-side-panel-item>
45
+ <k-side-panel-item href="#">Legacy System</k-side-panel-item>
46
+ <k-side-panel-item href="#">Beta App</k-side-panel-item>
47
+ </k-side-panel-menu>
48
+ <k-side-panel-item icon="add" href="#">New Project</k-side-panel-item>
49
+
50
+ <k-side-panel-label>Tasks</k-side-panel-label>
51
+ <k-side-panel-item icon="check" href="#">My Tasks</k-side-panel-item>
52
+ <k-side-panel-item href="#">Assigned to Me</k-side-panel-item>
53
+ <k-side-panel-item href="#">Due Today</k-side-panel-item>
54
+ <k-side-panel-item href="#">This Week</k-side-panel-item>
55
+
56
+ <k-side-panel-label>Team</k-side-panel-label>
57
+ <k-side-panel-menu label="Team Members">
58
+ <k-side-panel-item href="#">Development</k-side-panel-item>
59
+ <k-side-panel-item href="#">Design</k-side-panel-item>
60
+ <k-side-panel-item href="#">Marketing</k-side-panel-item>
61
+ <k-side-panel-item href="#">Sales</k-side-panel-item>
62
+ </k-side-panel-menu>
63
+ <k-side-panel-item href="#">All Teams</k-side-panel-item>
64
+
65
+ <k-side-panel-label>Examples</k-side-panel-label>
66
+ <k-side-panel-item href="#">Item without icon</k-side-panel-item>
67
+ <k-side-panel-menu label="Menu without icon">
68
+ <k-side-panel-item href="#">Sub-item 1</k-side-panel-item>
69
+ <k-side-panel-item href="#">Sub-item 2</k-side-panel-item>
70
+ </k-side-panel-menu>
71
+
72
+ <k-side-panel-item icon="lock" href="#" no-expand>No Auto-Expand</k-side-panel-item>
73
+ <k-side-panel-menu icon="settings" label="Config (no expand)" no-expand>
74
+ <k-side-panel-item href="#">Option 1</k-side-panel-item>
75
+ <k-side-panel-item href="#">Option 2</k-side-panel-item>
76
+ </k-side-panel-menu>
77
+
78
+ <k-side-panel-label>Resources</k-side-panel-label>
79
+ <k-side-panel-item icon="folder" href="#">Documents</k-side-panel-item>
80
+ <k-side-panel-item icon="image" href="#">Media Files</k-side-panel-item>
81
+ <k-side-panel-item icon="link" href="#">Links</k-side-panel-item>
82
+ <k-side-panel-item href="#">Bookmarks</k-side-panel-item>
83
+
84
+ <k-side-panel-label>Tools</k-side-panel-label>
85
+ <k-side-panel-item icon="edit" href="#">Editor</k-side-panel-item>
86
+ <k-side-panel-item icon="code" href="#">Code Review</k-side-panel-item>
87
+ <k-side-panel-item href="#">Bug Tracker</k-side-panel-item>
88
+ <k-side-panel-item href="#">Terminal</k-side-panel-item>
89
+
90
+ <k-side-panel-spacer></k-side-panel-spacer>
91
+
92
+ <k-side-panel-item icon="help" href="#">Help & Support</k-side-panel-item>
93
+ <k-side-panel-item icon="settings" href="#">Settings</k-side-panel-item>
94
+ <k-side-panel-item icon="account-circle" href="#">Profile</k-side-panel-item>
95
+ </k-side-panel>
96
+
97
+ <k-main>
98
+ <h1>Independent Scrolling Demo</h1>
99
+ <p>This example demonstrates that the SidePanel and main content area scroll independently. Try scrolling in the sidebar and notice how it doesn't affect the main content area, and vice versa.</p>
100
+
101
+ <h2>Section 1: Introduction</h2>
102
+ <p>The SidePanel component uses <code>overflow-y: auto</code> on its content area, making it scrollable independently from the page. This is essential for applications with lots of navigation options or when you want the navigation to remain accessible while scrolling through long content.</p>
103
+ <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.</p>
104
+
105
+ <h2>Section 2: Features</h2>
106
+ <p>The sidebar includes many different types of navigation items:</p>
107
+ <ul>
108
+ <li>Simple navigation items with icons</li>
109
+ <li>Labels to organize sections</li>
110
+ <li>Expandable menus with sub-items</li>
111
+ <li>Spacers to push items to the bottom</li>
112
+ <li>Active state indicators</li>
113
+ </ul>
114
+ <p>Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.</p>
115
+
116
+ <h2>Section 3: Benefits</h2>
117
+ <p>Independent scrolling provides several benefits:</p>
118
+ <ol>
119
+ <li><strong>Improved Navigation:</strong> Users can always access any navigation item without losing their place in the content</li>
120
+ <li><strong>Better UX:</strong> Natural scrolling behavior that users expect from modern applications</li>
121
+ <li><strong>Space Efficiency:</strong> You can have extensive navigation without cluttering the viewport</li>
122
+ <li><strong>Flexible Layout:</strong> Works with both short and long content areas</li>
123
+ </ol>
124
+ <p>Sed ut perspiciatis unde omnis iste natus error sit voluptatem accusantium doloremque laudantium, totam rem aperiam, eaque ipsa quae ab illo inventore veritatis et quasi architecto beatae vitae dicta sunt explicabo.</p>
125
+
126
+ <h2>Section 4: Implementation Details</h2>
127
+ <p>The SidePanel uses the following CSS properties to achieve independent scrolling:</p>
128
+ <pre><code>#content {
129
+ height: calc(100% - 3rem);
130
+ overflow-y: auto;
131
+ overflow-x: hidden;
132
+ display: flex;
133
+ flex-direction: column;
134
+ }</code></pre>
135
+ <p>This ensures that the panel's content area takes up all available height minus the header, and enables vertical scrolling when needed.</p>
136
+
137
+ <h2>Section 5: Responsive Behavior</h2>
138
+ <p>The SidePanel can be collapsed to save space while keeping all navigation accessible. When collapsed, only icons are shown, and the panel takes up minimal width. Try clicking the toggle button in the header to see this in action.</p>
139
+ <p>Nemo enim ipsam voluptatem quia voluptas sit aspernatur aut odit aut fugit, sed quia consequuntur magni dolores eos qui ratione voluptatem sequi nesciunt. Neque porro quisquam est, qui dolorem ipsum quia dolor sit amet, consectetur, adipisci velit.</p>
140
+
141
+ <h2>Section 6: Customization</h2>
142
+ <p>The SidePanel supports extensive customization through CSS variables:</p>
143
+ <ul>
144
+ <li><code>--bg</code>: Background color of the panel</li>
145
+ <li><code>--width-expanded</code>: Width when expanded (default: 16rem)</li>
146
+ <li><code>--width-collapsed</code>: Width when collapsed (default: 3.5rem)</li>
147
+ <li><code>--transition-duration</code>: Animation duration for expand/collapse</li>
148
+ </ul>
149
+ <p>At vero eos et accusamus et iusto odio dignissimos ducimus qui blanditiis praesentium voluptatum deleniti atque corrupti quos dolores et quas molestias excepturi sint occaecati cupiditate non provident.</p>
150
+
151
+ <h2>Section 7: Accessibility</h2>
152
+ <p>The SidePanel includes proper ARIA labels and keyboard navigation support. The toggle button has descriptive aria-labels that change based on the panel's state ("Expand panel" or "Collapse panel").</p>
153
+ <p>Similique sunt in culpa qui officia deserunt mollitia animi, id est laborum et dolorum fuga. Et harum quidem rerum facilis est et expedita distinctio. Nam libero tempore, cum soluta nobis est eligendi optio cumque nihil impedit quo minus.</p>
154
+
155
+ <h2>Section 8: Integration</h2>
156
+ <p>The SidePanel works seamlessly with the <code>&lt;k-main&gt;</code> component, which automatically adjusts its margins when the panel expands or collapses. This creates a smooth, coordinated experience.</p>
157
+ <p>The components communicate through custom events dispatched on the window object, making them loosely coupled but highly coordinated.</p>
158
+ <p>Temporibus autem quibusdam et aut officiis debitis aut rerum necessitatibus saepe eveniet ut et voluptates repudiandae sint et molestiae non recusandae. Itaque earum rerum hic tenetur a sapiente delectus.</p>
159
+
160
+ <h2>Section 9: Performance</h2>
161
+ <p>The SidePanel is built with Lit and uses Shadow DOM for style encapsulation. This ensures excellent performance even with many navigation items, and prevents style conflicts with the rest of your application.</p>
162
+ <p>Transitions are hardware-accelerated using CSS transforms and opacity changes, providing smooth animations even on lower-end devices.</p>
163
+ <p>Ut aut reiciendis voluptatibus maiores alias consequatur aut perferendis doloribus asperiores repellat. Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.</p>
164
+
165
+ <h2>Section 10: Conclusion</h2>
166
+ <p>The SidePanel component provides a robust, flexible navigation solution with independent scrolling, smooth animations, and excellent accessibility. It's perfect for applications that need persistent navigation with many options.</p>
167
+ <p>Try scrolling both the sidebar and this main content area to experience the independent scrolling behavior. Notice how smooth and natural it feels, and how you can always access any navigation item while browsing through the content.</p>
168
+ <p>Ut enim ad minima veniam, quis nostrum exercitationem ullam corporis suscipit laboriosam, nisi ut aliquid ex ea commodi consequatur? Quis autem vel eum iure reprehenderit qui in ea voluptate velit esse quam nihil molestiae consequatur, vel illum qui dolorem eum fugiat quo voluptas nulla pariatur?</p>
169
+
170
+ <div style="margin-top: 4rem; padding: 2rem; background: var(--c_bg__alt); border-radius: var(--radius);">
171
+ <h3>End of Content</h3>
172
+ <p>You've reached the bottom of the page! Now try scrolling in the sidebar to see all the navigation options.</p>
173
+ </div>
174
+ </k-main>
175
+ </body>
176
+ </html>
@@ -23,8 +23,10 @@
23
23
  <h6>Examples</h6>
24
24
  <a href="#basicUsage">Basic Usage</a><br />
25
25
  <a href="#withMenu">With Menu</a><br />
26
+ <a href="#independentScrolling">Independent Scrolling</a><br />
26
27
  <a href="#collapsedDefault">Collapsed by Default</a><br />
27
28
  <a href="#rightSidePanel">Right Side Panel</a><br />
29
+ <a href="#dualPanels">Dual Side Panels</a><br />
28
30
  <a href="#customStyling">Custom Styling</a><br />
29
31
 
30
32
  <h6 class="mt"><a href="#jsRef" class="no-link">JavaScript Reference</a></h6>
@@ -70,6 +72,43 @@
70
72
  </div>
71
73
  </div>
72
74
 
75
+ <h3 id="independentScrolling"><a href="#independentScrolling" class="no-link">Independent Scrolling</a></h3>
76
+ <p>The SidePanel scrolls independently from the main content area, allowing users to navigate extensive menus without losing their place in the content.</p>
77
+ <div class="row -mx">
78
+ <div class="col m-span-12 px">
79
+ <k-card label="Output">
80
+ <iframe src="./side-panel-scroll.html" style="width: 100%; height: 600px; border: 1px solid var(--c_border); border-radius: var(--radius);"></iframe>
81
+ </k-card>
82
+ </div>
83
+ </div>
84
+
85
+ <h3 id="rightSidePanel"><a href="#rightSidePanel" class="no-link">Right Side Panel</a></h3>
86
+ <p>Set the <code>side</code> attribute to <code>"right"</code> to position the panel on the right side of the page.</p>
87
+ <div class="row -mx">
88
+ <div class="col m-span-12 px">
89
+ <k-card label="HTML">
90
+ <pre><code class="hljs xml"><span class="hljs-tag">&lt;<span class="hljs-name">k-side-panel</span> <span class="hljs-attr">side</span>=<span class="hljs-string">"right"</span>&gt;</span><br /> <span class="hljs-tag">&lt;<span class="hljs-name">h3</span> <span class="hljs-attr">slot</span>=<span class="hljs-string">"logo"</span>&gt;</span>Tools<span class="hljs-tag">&lt;/<span class="hljs-name">h3</span>&gt;</span><br /> <span class="hljs-tag">&lt;<span class="hljs-name">k-side-panel-item</span> <span class="hljs-attr">icon</span>=<span class="hljs-string">"notification"</span> <span class="hljs-attr">href</span>=<span class="hljs-string">"#"</span>&gt;</span>Notifications<span class="hljs-tag">&lt;/<span class="hljs-name">k-side-panel-item</span>&gt;</span><br /> <span class="hljs-tag">&lt;<span class="hljs-name">k-side-panel-item</span> <span class="hljs-attr">icon</span>=<span class="hljs-string">"chat"</span> <span class="hljs-attr">href</span>=<span class="hljs-string">"#"</span>&gt;</span>Messages<span class="hljs-tag">&lt;/<span class="hljs-name">k-side-panel-item</span>&gt;</span><br /><span class="hljs-tag">&lt;/<span class="hljs-name">k-side-panel</span>&gt;</span><br /><span class="hljs-tag">&lt;<span class="hljs-name">k-main</span>&gt;</span><br /> <span class="hljs-comment">&lt;!-- Content --&gt;</span><br /><span class="hljs-tag">&lt;/<span class="hljs-name">k-main</span>&gt;</span></code></pre>
91
+ </k-card>
92
+ </div>
93
+ </div>
94
+
95
+ <h3 id="dualPanels"><a href="#dualPanels" class="no-link">Dual Side Panels</a></h3>
96
+ <p>You can have two side panels on a page simultaneously - one on the left and one on the right. The <code>&lt;k-main&gt;</code> component will automatically adjust margins for both panels.</p>
97
+ <div class="row -mx">
98
+ <div class="col m-span-12 px">
99
+ <k-card label="HTML">
100
+ <pre><code class="hljs xml"><span class="hljs-tag">&lt;<span class="hljs-name">k-side-panel</span>&gt;</span><br /> <span class="hljs-comment">&lt;!-- Left panel content --&gt;</span><br /><span class="hljs-tag">&lt;/<span class="hljs-name">k-side-panel</span>&gt;</span><br /><br /><span class="hljs-tag">&lt;<span class="hljs-name">k-side-panel</span> <span class="hljs-attr">side</span>=<span class="hljs-string">"right"</span>&gt;</span><br /> <span class="hljs-comment">&lt;!-- Right panel content --&gt;</span><br /><span class="hljs-tag">&lt;/<span class="hljs-name">k-side-panel</span>&gt;</span><br /><br /><span class="hljs-tag">&lt;<span class="hljs-name">k-main</span>&gt;</span><br /> <span class="hljs-comment">&lt;!-- Content centered between both panels --&gt;</span><br /><span class="hljs-tag">&lt;/<span class="hljs-name">k-main</span>&gt;</span></code></pre>
101
+ </k-card>
102
+ </div>
103
+ </div>
104
+ <div class="row -mx">
105
+ <div class="col span-12 px">
106
+ <k-card label="Output">
107
+ <iframe src="./side-panel-dual.html" style="width: 100%; height: 600px; border: 1px solid var(--c_border); border-radius: var(--radius);"></iframe>
108
+ </k-card>
109
+ </div>
110
+ </div>
111
+
73
112
  <h2 id="jsRef">JavaScript Reference</h2>
74
113
 
75
114
  <h3 id="constructor"><a href="#constructor" class="no-link">Constructor</a></h3>
@@ -84,10 +123,11 @@
84
123
  <h4>How It Works</h4>
85
124
  <ul>
86
125
  <li>Listens for <code>side-panel-change</code> events on <code>window</code></li>
87
- <li>Automatically detects existing panel on mount</li>
126
+ <li>Automatically detects existing panels on mount</li>
88
127
  <li>Adjusts margin with smooth transitions</li>
89
128
  <li>Provides standard <code>&lt;main&gt;</code> centering and max-width behavior</li>
90
129
  <li>Works with both left and right side panels</li>
130
+ <li>Supports dual panels (one on each side) simultaneously</li>
91
131
  </ul>
92
132
 
93
133
  <h4>Usage</h4>
@@ -0,0 +1 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 -960 960 960"><path fill="currentColor" d="M480-360 280-560h400L480-360Z"/></svg>
@@ -0,0 +1 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 -960 960 960"><path fill="currentColor" d="M480-80q-83 0-156-31.5T197-197q-54-54-85.5-127T80-480q0-83 31.5-156T197-763q54-54 127-85.5T480-880q83 0 156 31.5T763-763q54 54 85.5 127T880-480q0 83-31.5 156T763-197q-54 54-127 85.5T480-80Zm0-80q134 0 227-93t93-227q0-134-93-227t-227-93q-134 0-227 93t-93 227q0 134 93 227t227 93Zm0-320Z"/></svg>
@@ -0,0 +1 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 -960 960 960"><path fill="currentColor" d="M320-240 80-480l240-240 57 57-184 184 183 183-56 56Zm320 0-57-57 184-184-183-183 56-56 240 240-240 240Z"/></svg>
@@ -0,0 +1 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 -960 960 960"><path fill="currentColor" d="m384-336 56-57-87-87 87-87-56-57-144 144 144 144Zm192 0 144-144-144-144-56 57 87 87-87 87 56 57ZM200-120q-33 0-56.5-23.5T120-200v-560q0-33 23.5-56.5T200-840h560q33 0 56.5 23.5T840-760v560q0 33-23.5 56.5T760-120H200Zm0-80h560v-560H200v560Zm0-560v560-560Z"/></svg>
@@ -0,0 +1 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 -960 960 960"><path fill="currentColor" d="M360-240q-33 0-56.5-23.5T280-320v-480q0-33 23.5-56.5T360-880h360q33 0 56.5 23.5T800-800v480q0 33-23.5 56.5T720-240H360Zm0-80h360v-480H360v480ZM200-80q-33 0-56.5-23.5T120-160v-560h80v560h440v80H200Zm160-240v-480 480Z"/></svg>
@@ -0,0 +1 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 100 100"><circle fill="currentColor" cx="50" cy="50" r="20"/></svg>
@@ -0,0 +1 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 -960 960 960"><path fill="currentColor" d="M120-120v-80h720v80H120Zm160-160v-80h400v80H280ZM120-440v-80h720v80H120Zm160-160v-80h400v80H280ZM120-760v-80h720v80H120Z"/></svg>
@@ -0,0 +1 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 -960 960 960"><path fill="currentColor" d="M120-120v-80h720v80H120Zm0-160v-80h720v80H120Zm0-160v-80h720v80H120Zm0-160v-80h720v80H120Zm0-160v-80h720v80H120Z"/></svg>
@@ -0,0 +1 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 -960 960 960"><path fill="currentColor" d="M120-120v-80h720v80H120Zm0-160v-80h480v80H120Zm0-160v-80h720v80H120Zm0-160v-80h480v80H120Zm0-160v-80h720v80H120Z"/></svg>
@@ -0,0 +1 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 -960 960 960"><path fill="currentColor" d="M120-760v-80h720v80H120Zm240 160v-80h480v80H360ZM120-440v-80h720v80H120Zm240 160v-80h480v80H360ZM120-120v-80h720v80H120Z"/></svg>
@@ -0,0 +1 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 -960 960 960"><path fill="currentColor" d="M272-200v-560h221q65 0 120 40t55 111q0 51-23 78.5T602-491q25 11 55.5 41t30.5 90q0 89-65 124.5T501-200H272Zm121-112h104q48 0 58.5-24.5T566-372q0-11-10.5-35.5T494-432H393v120Zm0-228h93q33 0 48-17t15-38q0-24-17-39t-44-15h-95v109Z"/></svg>
@@ -0,0 +1 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 -960 960 960"><path fill="currentColor" d="m528-546-93-93-121-121h486v120H568l-40 94ZM792-56 460-388l-80 188H249l119-280L56-792l56-56 736 736-56 56Z"/></svg>
@@ -0,0 +1 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 -960 960 960"><path fill="currentColor" d="m247-904 57-56 343 343q23 23 23 57t-23 57L457-313q-23 23-57 23t-57-23L153-503q-23-23-23-57t23-57l190-191-96-96Zm153 153L209-560h382L400-751Zm360 471q-33 0-56.5-23.5T680-360q0-21 12.5-45t27.5-45q9-12 19-25t21-25q11 12 21 25t19 25q15 21 27.5 45t12.5 45q0 33-23.5 56.5T760-280ZM80 0v-160h800V0H80Z"/></svg>
@@ -0,0 +1 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 -960 960 960"><path fill="currentColor" d="M80 0v-160h800V0H80Zm140-280 210-560h100l210 560h-96l-50-144H368l-52 144h-96Zm176-224h168l-82-232h-4l-82 232Z"/></svg>
@@ -0,0 +1 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 -960 960 960"><path fill="currentColor" d="M200-280v-400h80v160h160v-160h80v400h-80v-160H280v160h-80Zm480 0v-320h-80v-80h160v400h-80Z"/></svg>