kempo-ui 0.1.5 → 0.2.1

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 (122) hide show
  1. package/.github/skills/highlight-code/SKILL.md +22 -6
  2. package/.github/skills/new-component/SKILL.md +68 -4
  3. package/AGENTS.md +11 -0
  4. package/bin/highlight_code.js +7 -15
  5. package/dist/components/Aside.js +326 -0
  6. package/dist/components/Dialog.js +1 -1
  7. package/dist/components/Dropdown.js +1 -1
  8. package/dist/components/Main.js +2 -2
  9. package/dist/components/Nav.js +27 -0
  10. package/dist/components/PhotoViewer.js +1 -1
  11. package/dist/components/ShadowComponent.js +1 -1
  12. package/dist/components/ThemeSelect.js +5 -1
  13. package/dist/components/ThemeSwitcher.js +1 -0
  14. package/dist/components/Toast.js +1 -1
  15. package/docs/components/accordion.html +4 -3
  16. package/docs/components/aside-items.html +43 -0
  17. package/docs/components/aside-menu.html +43 -0
  18. package/docs/components/aside-push.html +26 -0
  19. package/docs/components/aside.html +567 -0
  20. package/docs/components/card.html +4 -3
  21. package/docs/components/color-picker.html +4 -3
  22. package/docs/components/content-slider.html +4 -3
  23. package/docs/components/dialog.html +4 -3
  24. package/docs/components/dropdown.html +4 -3
  25. package/docs/components/filter-list.html +4 -3
  26. package/docs/components/focus-capture.html +6 -5
  27. package/docs/components/html-editor.html +5 -4
  28. package/docs/components/hybrid-component.html +5 -4
  29. package/docs/components/icon.html +4 -3
  30. package/docs/components/import.html +5 -4
  31. package/docs/components/light-component.html +4 -3
  32. package/docs/components/nav.html +117 -0
  33. package/docs/components/photo-viewer.html +5 -4
  34. package/docs/components/resize.html +5 -4
  35. package/docs/components/shadow-component.html +4 -3
  36. package/docs/components/show-more.html +5 -4
  37. package/docs/components/sortable.html +4 -3
  38. package/docs/components/spinner.html +4 -3
  39. package/docs/components/split.html +5 -4
  40. package/docs/components/table.html +4 -3
  41. package/docs/components/tableControls.html +4 -3
  42. package/docs/components/tableCustomFields.html +4 -3
  43. package/docs/components/tableFetchRecords.html +5 -4
  44. package/docs/components/tableFieldSortHide.html +5 -4
  45. package/docs/components/tablePagination.html +4 -3
  46. package/docs/components/tableRecordEditing.html +4 -3
  47. package/docs/components/tableRecordFiltering.html +5 -4
  48. package/docs/components/tableRecordHiding.html +4 -3
  49. package/docs/components/tableRecordSearching.html +5 -4
  50. package/docs/components/tableRecordSelection.html +4 -3
  51. package/docs/components/tableRowControls.html +4 -3
  52. package/docs/components/tableServerSync.html +5 -4
  53. package/docs/components/tableSorting.html +5 -4
  54. package/docs/components/tabs.html +4 -3
  55. package/docs/components/tags.html +4 -3
  56. package/docs/components/theme-select.html +4 -3
  57. package/docs/components/theme-switcher.html +5 -4
  58. package/docs/components/timestamp.html +4 -3
  59. package/docs/components/toast.html +4 -3
  60. package/docs/components/toggle.html +5 -4
  61. package/docs/components/tree.html +5 -4
  62. package/docs/index.html +22 -21
  63. package/docs/nav-1.inc.html +18 -12
  64. package/docs/nav.inc.html +20 -13
  65. package/docs/nav.inc.js +1 -1
  66. package/docs/src/components/Aside.js +326 -0
  67. package/docs/src/components/Dialog.js +1 -1
  68. package/docs/src/components/Dropdown.js +1 -1
  69. package/docs/src/components/Main.js +2 -2
  70. package/docs/src/components/Nav.js +27 -0
  71. package/docs/src/components/PhotoViewer.js +1 -1
  72. package/docs/src/components/ShadowComponent.js +1 -1
  73. package/docs/src/components/ThemeSelect.js +5 -1
  74. package/docs/src/components/ThemeSwitcher.js +1 -0
  75. package/docs/src/components/Toast.js +1 -1
  76. package/docs/utils/context.html +4 -3
  77. package/docs/utils/cookie.html +4 -3
  78. package/docs/utils/debounce.html +4 -3
  79. package/docs/utils/drag.html +4 -3
  80. package/docs/utils/elevation.html +156 -0
  81. package/docs/utils/formatTimestamp.html +4 -3
  82. package/docs/utils/object.html +4 -3
  83. package/docs/utils/propConverters.html +4 -3
  84. package/docs/utils/string.html +4 -3
  85. package/docs/utils/theme.html +4 -3
  86. package/docs/utils/toTitleCase.html +4 -3
  87. package/docs/utils/type.html +4 -3
  88. package/docs/utils/wait.html +4 -3
  89. package/llm.txt.md +247 -0
  90. package/package.json +3 -4
  91. package/src/components/Aside.js +726 -0
  92. package/src/components/Dialog.js +1 -1
  93. package/src/components/Dropdown.js +1 -1
  94. package/src/components/Main.js +34 -30
  95. package/src/components/Nav.js +53 -0
  96. package/src/components/PhotoViewer.js +1 -1
  97. package/src/components/ShadowComponent.js +1 -1
  98. package/src/components/ThemeSelect.js +8 -0
  99. package/src/components/ThemeSwitcher.js +1 -0
  100. package/src/components/Toast.js +1 -1
  101. package/tests/bin/get_icon.node-test.js +26 -0
  102. package/tests/bin/highlight_code.node-test.js +108 -0
  103. package/tests/bin/list_icons.node-test.js +26 -0
  104. package/tests/components/Aside.browser-test.js +778 -0
  105. package/tests/components/Main.browser-test.js +115 -283
  106. package/dist/components/SideMenu.js +0 -97
  107. package/dist/components/SidePanel.js +0 -236
  108. package/docs/components/side-menu.html +0 -189
  109. package/docs/components/side-panel-basic.html +0 -44
  110. package/docs/components/side-panel-dual.html +0 -70
  111. package/docs/components/side-panel-menu.html +0 -50
  112. package/docs/components/side-panel-persistent.html +0 -90
  113. package/docs/components/side-panel-scroll.html +0 -176
  114. package/docs/components/side-panel.html +0 -245
  115. package/docs/src/components/SideMenu.js +0 -97
  116. package/docs/src/components/SidePanel.js +0 -236
  117. package/scripts/update-kempo-css.js +0 -53
  118. package/src/components/SideMenu.js +0 -178
  119. package/src/components/SidePanel.js +0 -513
  120. package/tests/components/SideMenu.browser-test.js +0 -667
  121. package/tests/components/SidePanel.browser-test.js +0 -520
  122. package/tools/highlight.js +0 -51
@@ -138,4 +138,4 @@ import{html,css}from"../lit-all.min.js";import ShadowComponent from"./ShadowComp
138
138
  <button id="close" class="no-style" @click="${this.handleCloseClick}">
139
139
  <slot name="close"></slot>
140
140
  </button>
141
- `}static create(t,o={}){let{position:e="auto",removeOnClose:n=!0,closeCallback:s=()=>{},action:a=!1,close:i=!1,icon:r=!1,timeout:c=5e3}=o;"auto"===e&&(e=window.innerWidth<=768?"bottom center":"top right");let l=document.querySelector(`k-toast-container[position="${e}"]`);l||(l=new ToastContainer(e),document.body.appendChild(l));const m=new Toast;m.position=e,m.timeout=c,m.innerHTML=t,m.actionCallback=o.actionCallback||(()=>{});const h=s;if(m.closeCallback=(...t)=>{n&&(m.remove(),0===l.children.length&&l.remove()),h(...t)},r){const t=document.createElement("span");t.slot="icon",r instanceof HTMLElement?t.appendChild(r):t.innerHTML=r,m.appendChild(t)}if(a){const t=document.createElement("span");t.slot="action",a instanceof HTMLElement?t.appendChild(a):t.innerHTML=a,m.appendChild(t)}if(i){const t=document.createElement("span");t.slot="close",i instanceof HTMLElement?t.appendChild(i):t.innerHTML=i,m.appendChild(t)}return l.appendChild(m),m.open(),m}static success(t,o={}){const e=Toast.create(t,{icon:'<k-icon name="check"></k-icon>',...o});return e.classList.add("bg-success"),e}static warning(t,o={}){const e=Toast.create(t,{icon:'<k-icon name="warning"></k-icon>',...o});return e.classList.add("bg-warning"),e}static error(t,o={}){const e=Toast.create(t,{icon:'<k-icon name="error"></k-icon>',...o});return e.classList.add("bg-danger"),e}}class ToastContainer extends HTMLElement{constructor(t="bottom center"){super(),this.position=t.toLowerCase(),this.setAttribute("position",this.position),this.applyStyles()}applyStyles(){this.style.cssText="\n position: fixed;\n display: flex;\n flex-direction: column;\n gap: 8px;\n z-index: 1000;\n pointer-events: auto;\n padding: 32px;\n box-sizing: border-box;\n max-width: 100%;\n max-height: 100%;\n overflow: visible;\n ";new MutationObserver(()=>{Array.from(this.children).forEach(t=>{"K-TOAST"===t.tagName&&(t.style.filter="drop-shadow(0 10px 15px rgba(0, 0, 0, 0.1)) drop-shadow(0 4px 6px rgba(0, 0, 0, 0.05))")})}).observe(this,{childList:!0}),Array.from(this.children).forEach(t=>{"K-TOAST"===t.tagName&&(t.style.filter="drop-shadow(0 10px 15px rgba(0, 0, 0, 0.1)) drop-shadow(0 4px 6px rgba(0, 0, 0, 0.05))")});const[t,o]=this.position.split(" ");"top"===t?this.style.top="0":this.style.bottom="0","left"===o?(this.style.left="0",this.style.alignItems="flex-start"):"right"===o?(this.style.right="0",this.style.alignItems="flex-end"):"center"===o&&("top"===t||"bottom"===t?(this.style.left="50%",this.style.transform="translateX(-50%)",this.style.alignItems="center"):(this.style.top="50%",this.style.left="50%",this.style.transform="translate(-50%, -50%)"))}static getContainer(t){let o=document.querySelector(`k-toast-container[position="${t}"]`);return o||(o=new ToastContainer(t),document.body.appendChild(o)),o}}window.customElements.define("k-toast",Toast),window.customElements.define("k-toast-container",ToastContainer);
141
+ `}static create(t,o={}){let{position:e="auto",removeOnClose:n=!0,closeCallback:s=()=>{},action:a=!1,close:i=!1,icon:r=!1,timeout:c=5e3}=o;"auto"===e&&(e=window.innerWidth<=768?"bottom center":"top right");let l=document.querySelector(`k-toast-container[position="${e}"]`);l||(l=new ToastContainer(e),document.body.appendChild(l));const m=new Toast;m.position=e,m.timeout=c,m.innerHTML=t,m.actionCallback=o.actionCallback||(()=>{});const h=s;if(m.closeCallback=(...t)=>{n&&(m.remove(),0===l.children.length&&l.remove()),h(...t)},r){const t=document.createElement("span");t.slot="icon",r instanceof HTMLElement?t.appendChild(r):t.innerHTML=r,m.appendChild(t)}if(a){const t=document.createElement("span");t.slot="action",a instanceof HTMLElement?t.appendChild(a):t.innerHTML=a,m.appendChild(t)}if(i){const t=document.createElement("span");t.slot="close",i instanceof HTMLElement?t.appendChild(i):t.innerHTML=i,m.appendChild(t)}return l.appendChild(m),m.open(),m}static success(t,o={}){const e=Toast.create(t,{icon:'<k-icon name="check"></k-icon>',...o});return e.classList.add("bg-success"),e}static warning(t,o={}){const e=Toast.create(t,{icon:'<k-icon name="warning"></k-icon>',...o});return e.classList.add("bg-warning"),e}static error(t,o={}){const e=Toast.create(t,{icon:'<k-icon name="error"></k-icon>',...o});return e.classList.add("bg-danger"),e}}class ToastContainer extends HTMLElement{constructor(t="bottom center"){super(),this.position=t.toLowerCase(),this.setAttribute("position",this.position),this.applyStyles()}applyStyles(){this.style.cssText="\n position: fixed;\n display: flex;\n flex-direction: column;\n gap: 8px;\n z-index: 90;\n pointer-events: auto;\n padding: 32px;\n box-sizing: border-box;\n max-width: 100%;\n max-height: 100%;\n overflow: visible;\n ";new MutationObserver(()=>{Array.from(this.children).forEach(t=>{"K-TOAST"===t.tagName&&(t.style.filter="drop-shadow(0 10px 15px rgba(0, 0, 0, 0.1)) drop-shadow(0 4px 6px rgba(0, 0, 0, 0.05))")})}).observe(this,{childList:!0}),Array.from(this.children).forEach(t=>{"K-TOAST"===t.tagName&&(t.style.filter="drop-shadow(0 10px 15px rgba(0, 0, 0, 0.1)) drop-shadow(0 4px 6px rgba(0, 0, 0, 0.05))")});const[t,o]=this.position.split(" ");"top"===t?this.style.top="0":this.style.bottom="0","left"===o?(this.style.left="0",this.style.alignItems="flex-start"):"right"===o?(this.style.right="0",this.style.alignItems="flex-end"):"center"===o&&("top"===t||"bottom"===t?(this.style.left="50%",this.style.transform="translateX(-50%)",this.style.alignItems="center"):(this.style.top="50%",this.style.left="50%",this.style.transform="translate(-50%, -50%)"))}static getContainer(t){let o=document.querySelector(`k-toast-container[position="${t}"]`);return o||(o=new ToastContainer(t),document.body.appendChild(o)),o}}window.customElements.define("k-toast",Toast),window.customElements.define("k-toast-container",ToastContainer);
@@ -7,7 +7,7 @@
7
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
- <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/kempo-css@1.3.11/dist/kempo.min.css" />
10
+ <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/kempo-css@2/dist/kempo.min.css" />
11
11
  <link rel="stylesheet" href="../kempo-hljs.css" />
12
12
  <link rel="stylesheet" href="../styles.css" />
13
13
  <script>window.litDisableBundleWarning = true;</script>
@@ -15,7 +15,7 @@
15
15
  <body>
16
16
  <k-import src="../nav-1.inc.html"></k-import>
17
17
  <h1 class="ta-center">Accordion</h1>
18
- <main>
18
+ <k-main>
19
19
  <k-accordion persistent-id="toc" class="b r mb">
20
20
  <k-accordion-header for-panel="toc-panel">Table of Contents</k-accordion-header>
21
21
  <k-accordion-panel name="toc-panel">
@@ -209,9 +209,10 @@
209
209
  <p>Fired when a panel is toggled. The event detail contains <code>{ panelName }</code>.</p>
210
210
  </k-card>
211
211
 
212
- </main>
212
+ </k-main>
213
213
  <div style="height:33vh"></div>
214
214
  <script type="module" src="../src/components/Import.js"></script>
215
+ <script type="module" src="../src/components/Main.js"></script>
215
216
  <script type="module" src="../src/components/Accordion.js"></script>
216
217
  <script type="module" src="../src/components/Card.js"></script>
217
218
  <script type="module" src="../src/components/Resize.js"></script>
@@ -0,0 +1,43 @@
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>Aside Items Example</title>
7
+ <link rel="stylesheet" href="../kempo-vars.css" />
8
+ <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/kempo-css@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/Aside.js"></script>
15
+ <script type="module" src="../src/components/Main.js"></script>
16
+ <style>
17
+ body {
18
+ margin: 0;
19
+ padding: 0;
20
+ height: 100vh;
21
+ overflow: hidden;
22
+ }
23
+ </style>
24
+ </head>
25
+ <body>
26
+ <k-aside main="push" state="expanded" style="--aside_padding: 0;">
27
+ <k-aside-toggle><h5 class="m0">Kempo</h5></k-aside-toggle>
28
+ <k-aside-item icon="cards" href="#" active>Dashboard</k-aside-item>
29
+ <k-aside-item icon="check" href="#">Tasks</k-aside-item>
30
+ <k-aside-item icon="label" href="#">Email</k-aside-item>
31
+ <k-aside-label>Projects</k-aside-label>
32
+ <k-aside-item icon="folder" href="#">Figma Design</k-aside-item>
33
+ <k-aside-item icon="folder" href="#">Static Mania</k-aside-item>
34
+ <k-aside-spacer></k-aside-spacer>
35
+ <k-aside-item icon="settings" href="#">Settings</k-aside-item>
36
+ <k-aside-item icon="account-circle" href="#">Profile</k-aside-item>
37
+ </k-aside>
38
+ <k-main>
39
+ <h2>Main Content</h2>
40
+ <p>Click the aside's collapse/expand to see items react.</p>
41
+ </k-main>
42
+ </body>
43
+ </html>
@@ -0,0 +1,43 @@
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>Aside Menu Example</title>
7
+ <link rel="stylesheet" href="../kempo-vars.css" />
8
+ <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/kempo-css@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/Aside.js"></script>
15
+ <script type="module" src="../src/components/Main.js"></script>
16
+ <style>
17
+ body {
18
+ margin: 0;
19
+ padding: 0;
20
+ height: 100vh;
21
+ overflow: hidden;
22
+ }
23
+ </style>
24
+ </head>
25
+ <body>
26
+ <k-aside main="push" state="expanded" style="--aside_padding: 0;">
27
+ <k-aside-toggle><h5 class="m0">Kempo</h5></k-aside-toggle>
28
+ <k-aside-item icon="cards" href="#">Dashboard</k-aside-item>
29
+ <k-aside-menu icon="folder" label="Projects">
30
+ <k-aside-item href="#">Website Redesign</k-aside-item>
31
+ <k-aside-item href="#">Mobile App</k-aside-item>
32
+ </k-aside-menu>
33
+ <k-aside-menu icon="settings" label="Settings">
34
+ <k-aside-item href="#">General</k-aside-item>
35
+ <k-aside-item href="#">Security</k-aside-item>
36
+ </k-aside-menu>
37
+ </k-aside>
38
+ <k-main>
39
+ <h2>Main Content</h2>
40
+ <p>Click menu headers to expand sub-items. Collapse the aside to see menus fold.</p>
41
+ </k-main>
42
+ </body>
43
+ </html>
@@ -0,0 +1,26 @@
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
+ <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/kempo-css@2/dist/kempo.min.css" />
7
+ <link rel="stylesheet" href="../kempo-vars.css" />
8
+ <script>window.litDisableBundleWarning = true;</script>
9
+ </head>
10
+ <body>
11
+ <k-aside id="aside4" state="offscreen">
12
+ <p>Push Sidebar Content</p>
13
+ </k-aside>
14
+ <k-main>
15
+ <button id="toggle4">Toggle Sidebar</button>
16
+ <p>This content shifts when the aside is visible.</p>
17
+ </k-main>
18
+ <script>
19
+ document.getElementById('toggle4').addEventListener('click',()=>{
20
+ document.getElementById('aside4').toggle();
21
+ });
22
+ </script>
23
+ <script type="module" src="../src/components/Aside.js"></script>
24
+ <script type="module" src="../src/components/Main.js"></script>
25
+ </body>
26
+ </html>