kempo-ui 0.0.14 → 0.0.16

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 (186) hide show
  1. package/dist/kempo-vars.css +1 -0
  2. package/dist/src/components/Accordion.js +40 -9
  3. package/dist/src/components/Tabs.js +9 -8
  4. package/docs/dev.config.json +5 -9
  5. package/docs/kempo-ui/components/accordion.html +236 -0
  6. package/docs/{components → kempo-ui/components}/card.html +8 -8
  7. package/docs/{components → kempo-ui/components}/content-slider.html +8 -8
  8. package/docs/kempo-ui/components/dialog.html +339 -0
  9. package/docs/{components → kempo-ui/components}/focus-capture.html +9 -9
  10. package/docs/{components → kempo-ui/components}/hybrid-component.html +7 -7
  11. package/docs/{components → kempo-ui/components}/icon.html +9 -8
  12. package/docs/{components → kempo-ui/components}/import.html +8 -8
  13. package/docs/{components → kempo-ui/components}/light-component.html +7 -7
  14. package/docs/{components → kempo-ui/components}/photo-viewer.html +8 -8
  15. package/docs/{components → kempo-ui/components}/resize.html +8 -8
  16. package/docs/{components → kempo-ui/components}/shadow-component.html +7 -7
  17. package/docs/{components → kempo-ui/components}/show-more.html +8 -8
  18. package/docs/{components → kempo-ui/components}/side-menu.html +8 -8
  19. package/docs/{components → kempo-ui/components}/sortable.html +8 -8
  20. package/docs/{components → kempo-ui/components}/split.html +9 -9
  21. package/docs/{components → kempo-ui/components}/table.html +32 -32
  22. package/docs/{components → kempo-ui/components}/tableControls.html +12 -12
  23. package/docs/{components → kempo-ui/components}/tableCustomFields.html +9 -9
  24. package/docs/{components → kempo-ui/components}/tableFetchRecords.html +16 -16
  25. package/docs/{components → kempo-ui/components}/tableFieldSortHide.html +11 -11
  26. package/docs/{components → kempo-ui/components}/tablePagination.html +17 -17
  27. package/docs/{components → kempo-ui/components}/tableRecordEditing.html +12 -12
  28. package/docs/{components → kempo-ui/components}/tableRecordFiltering.html +11 -11
  29. package/docs/{components → kempo-ui/components}/tableRecordHiding.html +13 -13
  30. package/docs/{components → kempo-ui/components}/tableRecordSearching.html +11 -11
  31. package/docs/{components → kempo-ui/components}/tableRecordSelection.html +11 -11
  32. package/docs/{components → kempo-ui/components}/tableRowControls.html +12 -12
  33. package/docs/{components → kempo-ui/components}/tableSorting.html +9 -9
  34. package/docs/{components → kempo-ui/components}/tabs.html +8 -8
  35. package/docs/{components → kempo-ui/components}/tags.html +8 -8
  36. package/docs/{components → kempo-ui/components}/theme-switcher.html +8 -8
  37. package/docs/{components → kempo-ui/components}/timestamp.html +8 -8
  38. package/docs/kempo-ui/components/toast.html +315 -0
  39. package/docs/{components → kempo-ui/components}/toggle.html +8 -8
  40. package/docs/{components → kempo-ui/components}/tree.html +16 -14
  41. package/docs/{index.html → kempo-ui/index.html} +7 -18
  42. package/docs/kempo-ui/kempo-vars.css +1 -0
  43. package/docs/kempo-ui/nav.inc.html +67 -0
  44. package/docs/kempo-ui/src/components/Accordion.js +67 -0
  45. package/docs/{src → kempo-ui/src}/components/Tabs.js +9 -8
  46. package/docs/kempo-ui/utils/debounce.html +56 -0
  47. package/docs/{utils → kempo-ui/utils}/drag.html +8 -17
  48. package/docs/{utils → kempo-ui/utils}/formatTimestamp.html +12 -29
  49. package/docs/kempo-ui/utils/propConverters.html +90 -0
  50. package/docs/{utils → kempo-ui/utils}/toTitleCase.html +7 -6
  51. package/docs/kempo-ui/utils/watchWindowSize.html +72 -0
  52. package/docs/prod.config.json +0 -8
  53. package/package.json +2 -2
  54. package/scripts/build.js +8 -8
  55. package/scripts/docs.js +3 -0
  56. package/src/components/Accordion.js +145 -57
  57. package/src/components/Tabs.js +14 -23
  58. package/src/kempo-vars.css +1 -0
  59. package/dist/src/components/Collapsible.js +0 -41
  60. package/dist/src/components/PersistantCollapsible.js +0 -1
  61. package/docs/components/accordion.html +0 -162
  62. package/docs/components/collapsible.html +0 -194
  63. package/docs/components/dialog.html +0 -106
  64. package/docs/components/init.js +0 -7
  65. package/docs/components/persistant-collapsible.html +0 -118
  66. package/docs/components/toast.html +0 -53
  67. package/docs/init.js +0 -7
  68. package/docs/kempo-vars.css +0 -0
  69. package/docs/kempo.css +0 -1
  70. package/docs/nav.inc.html +0 -69
  71. package/docs/src/components/Accordion.js +0 -36
  72. package/docs/src/components/Collapsible.js +0 -41
  73. package/docs/src/components/PersistantCollapsible.js +0 -1
  74. package/docs/utils/debounce.html +0 -74
  75. package/docs/utils/init.js +0 -8
  76. package/docs/utils/propConverters.html +0 -128
  77. package/docs/utils/watchWindowSize.html +0 -162
  78. package/src/components/Collapsible.js +0 -109
  79. package/src/components/PersistantCollapsible.js +0 -69
  80. /package/docs/{icons → kempo-ui/icons}/add.svg +0 -0
  81. /package/docs/{icons → kempo-ui/icons}/arrow-back.svg +0 -0
  82. /package/docs/{icons → kempo-ui/icons}/arrow-down-double.svg +0 -0
  83. /package/docs/{icons → kempo-ui/icons}/arrow-down.svg +0 -0
  84. /package/docs/{icons → kempo-ui/icons}/arrow-forward.svg +0 -0
  85. /package/docs/{icons → kempo-ui/icons}/arrow-up-double.svg +0 -0
  86. /package/docs/{icons → kempo-ui/icons}/arrow-up.svg +0 -0
  87. /package/docs/{icons → kempo-ui/icons}/cards.svg +0 -0
  88. /package/docs/{icons → kempo-ui/icons}/check.svg +0 -0
  89. /package/docs/{icons → kempo-ui/icons}/chevron-left.svg +0 -0
  90. /package/docs/{icons → kempo-ui/icons}/chevron-right.svg +0 -0
  91. /package/docs/{icons → kempo-ui/icons}/close.svg +0 -0
  92. /package/docs/{icons → kempo-ui/icons}/compare.svg +0 -0
  93. /package/docs/{icons → kempo-ui/icons}/delete.svg +0 -0
  94. /package/docs/{icons → kempo-ui/icons}/drag-handle.svg +0 -0
  95. /package/docs/{icons → kempo-ui/icons}/drawing2.svg +0 -0
  96. /package/docs/{icons → kempo-ui/icons}/edit.svg +0 -0
  97. /package/docs/{icons → kempo-ui/icons}/error.svg +0 -0
  98. /package/docs/{icons → kempo-ui/icons}/export-file.svg +0 -0
  99. /package/docs/{icons → kempo-ui/icons}/file-text.svg +0 -0
  100. /package/docs/{icons → kempo-ui/icons}/file.svg +0 -0
  101. /package/docs/{icons → kempo-ui/icons}/filter-off.svg +0 -0
  102. /package/docs/{icons → kempo-ui/icons}/filter.svg +0 -0
  103. /package/docs/{icons → kempo-ui/icons}/first.svg +0 -0
  104. /package/docs/{icons → kempo-ui/icons}/folder-clear.svg +0 -0
  105. /package/docs/{icons → kempo-ui/icons}/folder-create.svg +0 -0
  106. /package/docs/{icons → kempo-ui/icons}/folder-open.svg +0 -0
  107. /package/docs/{icons → kempo-ui/icons}/folder.svg +0 -0
  108. /package/docs/{icons → kempo-ui/icons}/hide.svg +0 -0
  109. /package/docs/{icons → kempo-ui/icons}/image.svg +0 -0
  110. /package/docs/{icons → kempo-ui/icons}/label-add.svg +0 -0
  111. /package/docs/{icons → kempo-ui/icons}/label.svg +0 -0
  112. /package/docs/{icons → kempo-ui/icons}/last.svg +0 -0
  113. /package/docs/{icons → kempo-ui/icons}/menu.svg +0 -0
  114. /package/docs/{icons → kempo-ui/icons}/mode-auto.svg +0 -0
  115. /package/docs/{icons → kempo-ui/icons}/mode-dark.svg +0 -0
  116. /package/docs/{icons → kempo-ui/icons}/mode-light.svg +0 -0
  117. /package/docs/{icons → kempo-ui/icons}/open-in-browser.svg +0 -0
  118. /package/docs/{icons → kempo-ui/icons}/pause.svg +0 -0
  119. /package/docs/{icons → kempo-ui/icons}/play.svg +0 -0
  120. /package/docs/{icons → kempo-ui/icons}/refresh.svg +0 -0
  121. /package/docs/{icons → kempo-ui/icons}/remove.svg +0 -0
  122. /package/docs/{icons → kempo-ui/icons}/save.svg +0 -0
  123. /package/docs/{icons → kempo-ui/icons}/search.svg +0 -0
  124. /package/docs/{icons → kempo-ui/icons}/settings.svg +0 -0
  125. /package/docs/{icons → kempo-ui/icons}/show.svg +0 -0
  126. /package/docs/{icons → kempo-ui/icons}/storage.svg +0 -0
  127. /package/docs/{icons → kempo-ui/icons}/table-visibility.svg +0 -0
  128. /package/docs/{icons → kempo-ui/icons}/tag.svg +0 -0
  129. /package/docs/{icons → kempo-ui/icons}/tools.svg +0 -0
  130. /package/docs/{icons → kempo-ui/icons}/trash-x.svg +0 -0
  131. /package/docs/{icons → kempo-ui/icons}/warning.svg +0 -0
  132. /package/docs/{kempo-hljs.css → kempo-ui/kempo-hljs.css} +0 -0
  133. /package/docs/{kempo.min.css → kempo-ui/kempo.min.css} +0 -0
  134. /package/docs/{media → kempo-ui/media}/civic.jpg +0 -0
  135. /package/docs/{media → kempo-ui/media}/corvette.jpg +0 -0
  136. /package/docs/{media → kempo-ui/media}/evo.jpg +0 -0
  137. /package/docs/{media → kempo-ui/media}/gtr.jpg +0 -0
  138. /package/docs/{media → kempo-ui/media}/nsx.jpg +0 -0
  139. /package/docs/{nav.inc.js → kempo-ui/nav.inc.js} +0 -0
  140. /package/docs/{src → kempo-ui/src}/components/Card.js +0 -0
  141. /package/docs/{src → kempo-ui/src}/components/ContentSlider.js +0 -0
  142. /package/docs/{src → kempo-ui/src}/components/Dialog.js +0 -0
  143. /package/docs/{src → kempo-ui/src}/components/FocusCapture.js +0 -0
  144. /package/docs/{src → kempo-ui/src}/components/HybridComponent.js +0 -0
  145. /package/docs/{src → kempo-ui/src}/components/Icon.js +0 -0
  146. /package/docs/{src → kempo-ui/src}/components/Import.js +0 -0
  147. /package/docs/{src → kempo-ui/src}/components/LightComponent.js +0 -0
  148. /package/docs/{src → kempo-ui/src}/components/PhotoViewer.js +0 -0
  149. /package/docs/{src → kempo-ui/src}/components/Resize.js +0 -0
  150. /package/docs/{src → kempo-ui/src}/components/ShadowComponent.js +0 -0
  151. /package/docs/{src → kempo-ui/src}/components/ShowMore.js +0 -0
  152. /package/docs/{src → kempo-ui/src}/components/SideMenu.js +0 -0
  153. /package/docs/{src → kempo-ui/src}/components/Sortable.js +0 -0
  154. /package/docs/{src → kempo-ui/src}/components/Split.js +0 -0
  155. /package/docs/{src → kempo-ui/src}/components/Table.js +0 -0
  156. /package/docs/{src → kempo-ui/src}/components/Tags.js +0 -0
  157. /package/docs/{src → kempo-ui/src}/components/ThemeSwitcher.js +0 -0
  158. /package/docs/{src → kempo-ui/src}/components/Timestamp.js +0 -0
  159. /package/docs/{src → kempo-ui/src}/components/Toast.js +0 -0
  160. /package/docs/{src → kempo-ui/src}/components/Toggle.js +0 -0
  161. /package/docs/{src → kempo-ui/src}/components/Tree.js +0 -0
  162. /package/docs/{src → kempo-ui/src}/components/tableControls/DeleteRecord.js +0 -0
  163. /package/docs/{src → kempo-ui/src}/components/tableControls/Edit.js +0 -0
  164. /package/docs/{src → kempo-ui/src}/components/tableControls/ExportCSV.js +0 -0
  165. /package/docs/{src → kempo-ui/src}/components/tableControls/ExportJson.js +0 -0
  166. /package/docs/{src → kempo-ui/src}/components/tableControls/FieldSortHide.js +0 -0
  167. /package/docs/{src → kempo-ui/src}/components/tableControls/Filters.js +0 -0
  168. /package/docs/{src → kempo-ui/src}/components/tableControls/FirstPage.js +0 -0
  169. /package/docs/{src → kempo-ui/src}/components/tableControls/HiddenCount.js +0 -0
  170. /package/docs/{src → kempo-ui/src}/components/tableControls/Hide.js +0 -0
  171. /package/docs/{src → kempo-ui/src}/components/tableControls/LastPage.js +0 -0
  172. /package/docs/{src → kempo-ui/src}/components/tableControls/NextPage.js +0 -0
  173. /package/docs/{src → kempo-ui/src}/components/tableControls/PageSelect.js +0 -0
  174. /package/docs/{src → kempo-ui/src}/components/tableControls/PageSize.js +0 -0
  175. /package/docs/{src → kempo-ui/src}/components/tableControls/PrevPage.js +0 -0
  176. /package/docs/{src → kempo-ui/src}/components/tableControls/Search.js +0 -0
  177. /package/docs/{src → kempo-ui/src}/components/tableControls/ShowAll.js +0 -0
  178. /package/docs/{src → kempo-ui/src}/components/tableControls/TableControl.js +0 -0
  179. /package/docs/{src → kempo-ui/src}/lit-all.min.js +0 -0
  180. /package/docs/{src → kempo-ui/src}/utils/debounce.js +0 -0
  181. /package/docs/{src → kempo-ui/src}/utils/drag.js +0 -0
  182. /package/docs/{src → kempo-ui/src}/utils/formatTimestamp.js +0 -0
  183. /package/docs/{src → kempo-ui/src}/utils/propConverters.js +0 -0
  184. /package/docs/{src → kempo-ui/src}/utils/toTitleCase.js +0 -0
  185. /package/docs/{src → kempo-ui/src}/utils/watchWindowSize.js +0 -0
  186. /package/docs/{styles.css → kempo-ui/styles.css} +0 -0
@@ -0,0 +1 @@
1
+ /* Define Kempo Vars Here */
@@ -1,28 +1,59 @@
1
- import ShadowComponent from"./ShadowComponent.js";import{html,css}from"../lit-all.min.js";import{boolTrueFalse}from"../utils/propConverters.js";export default class Accordion extends ShadowComponent{static properties={};getHeader(e){return this.querySelector(`k-accordion-header[for-panel="${e}"]`)}getPanel(e){return this.querySelector(`k-accordion-panel[name="${e}"]`)}openPanel(e){const t=this.querySelector('k-accordion-panel[active="true"]');if(t&&t.name!==e){t.active=!1;const e=this.getHeader(t.name);e&&(e.active=!1)}const o=this.getPanel(e);if(o){o.active=!0,o.transitioning=!0,setTimeout(()=>{o.transitioning=!1},parseInt(getComputedStyle(this).getPropertyValue("--animation_ms")||256));const t=this.getHeader(e);t&&(t.active=!0),this.dispatchEvent(new CustomEvent("openpanel",{detail:{panelName:e}}))}}closePanel(e){const t=this.getPanel(e);if(t){t.active=!1,t.transitioning=!0,setTimeout(()=>{t.transitioning=!1},parseInt(getComputedStyle(this).getPropertyValue("--animation_ms")||256));const o=this.getHeader(e);o&&(o.active=!1),this.dispatchEvent(new CustomEvent("closepanel",{detail:{panelName:e}}))}}togglePanel(e){const t=this.getPanel(e);t&&(t.active?this.closePanel(e):this.openPanel(e),this.dispatchEvent(new CustomEvent("togglepanel",{detail:{panelName:e}})))}get activeHeader(){return this.querySelector('k-accordion-header[active="true"]')}get activePanel(){return this.querySelector('k-accordion-panel[active="true"]')}static styles=css`
1
+ import ShadowComponent from"./ShadowComponent.js";import{html,css}from"../lit-all.min.js";import{boolExists,boolTrueFalse}from"../utils/propConverters.js";export default class Accordion extends ShadowComponent{static properties={multiple:{type:Boolean,reflect:!0,converter:boolExists},persistentId:{type:String,reflect:!0,attribute:"persistent-id"}};constructor(){super(),this.multiple=!1,this.persistentId=null}connectedCallback(){super.connectedCallback?.()}updated(e){if(super.updated?.(e),e.has("persistentId")&&this.persistentId&&window?.localStorage){const e=`accordion-persistent-id-${this.persistentId}`,t=window.localStorage.getItem(e);if(t){const e=t.split(",");this.querySelectorAll("k-accordion-panel").forEach(t=>{t.active=e.includes(t.name);const o=this.getHeader(t.name);o&&(o.active=e.includes(t.name))})}}}getHeader(e){return this.querySelector(`k-accordion-header[for-panel="${e}"]`)}getPanel(e){return this.querySelector(`k-accordion-panel[name="${e}"]`)}openPanel(e){this.multiple||this.querySelectorAll("k-accordion-panel[active]").forEach(t=>{if(t.name!==e){t.active=!1;const e=this.getHeader(t.name);e&&(e.active=!1)}});const t=this.getPanel(e);if(t){t.active=!0,t.transitioning=!0,setTimeout(()=>{t.transitioning=!1},parseInt(getComputedStyle(this).getPropertyValue("--animation_ms")||256));const o=this.getHeader(e);o&&(o.active=!0),this.dispatchEvent(new CustomEvent("openpanel",{detail:{panelName:e}})),setTimeout(()=>{if(this.persistentId&&window?.localStorage){const e=`accordion-persistent-id-${this.persistentId}`,t=Array.from(this.querySelectorAll("k-accordion-panel[active]")).map(e=>e.name);window.localStorage.setItem(e,t.join(","))}},parseInt(getComputedStyle(this).getPropertyValue("--animation_ms")||256))}}closePanel(e){const t=this.getPanel(e);if(t){t.active=!1,t.transitioning=!0,setTimeout(()=>{t.transitioning=!1},parseInt(getComputedStyle(this).getPropertyValue("--animation_ms")||256));const o=this.getHeader(e);o&&(o.active=!1),this.dispatchEvent(new CustomEvent("closepanel",{detail:{panelName:e}})),setTimeout(()=>{if(this.persistentId&&window?.localStorage){const e=`accordion-persistent-id-${this.persistentId}`,t=Array.from(this.querySelectorAll("k-accordion-panel[active]")).map(e=>e.name);window.localStorage.setItem(e,t.join(","))}},parseInt(getComputedStyle(this).getPropertyValue("--animation_ms")||256))}}togglePanel(e){const t=this.getPanel(e);t&&(t.active?this.closePanel(e):this.openPanel(e),this.dispatchEvent(new CustomEvent("togglepanel",{detail:{panelName:e}})))}get activeHeader(){return this.querySelector('k-accordion-header[active="true"]')}get activePanel(){return this.querySelector('k-accordion-panel[active="true"]')}static styles=css`
2
2
  :host {
3
3
  display: block;
4
- border: 1px solid var(--c_border);
4
+ border: 1px solid var(--c_border, #ccc);
5
5
  border-radius: var(--radius);
6
6
  }
7
7
  ::slotted(k-accordion-header) {
8
- border-top: 1px solid var(--c_border);
8
+ border-top: 1px solid var(--c_border, #ccc);
9
9
  }
10
- ::slotted(k-accordion-header[active="true"]) {
11
- border-bottom: 1px solid var(--c_border);
10
+ ::slotted(k-accordion-header) {
11
+ position: relative;
12
+ }
13
+ ::slotted(k-accordion-header)::after {
14
+ content: '';
15
+ display: block;
16
+ position: absolute;
17
+ left: var(--spacer_h, 0.5rem);
18
+ right: var(--spacer_h, 0.5rem);
19
+ bottom: 0;
20
+ height: 0;
21
+ width: calc(100% - var(--spacer, 1rem));
22
+ border-bottom: 1px solid var(--c_border, #ccc);
23
+ opacity: 0;
24
+ transition: opacity var(--animation_ms, 256ms);
25
+ pointer-events: none;
26
+ }
27
+ ::slotted(k-accordion-header[active])::after {
28
+ opacity: 0.4;
12
29
  }
13
30
  ::slotted(k-accordion-header:first-of-type) {
14
31
  border-top: 0;
15
32
  }
16
- ::slotted(k-accordion-header:last-of-type:not([active="true"])) {
33
+ ::slotted(k-accordion-header:last-of-type:not([active])) {
17
34
  border-bottom: 0;
18
35
  }
19
- `;render(){return html`<slot></slot>`}}export class AccordionHeader extends ShadowComponent{static properties={forPanel:{type:String,reflect:!0,attribute:"for-panel"},active:{type:Boolean,reflect:!0,converter:boolTrueFalse}};constructor(){super(),this.forPanel="",this.active=!1}handleClick=()=>{this.accordion?.togglePanel(this.forPanel)};connectedCallback(){super.connectedCallback(),this.addEventListener("click",this.handleClick)}disconnectedCallback(){super.disconnectedCallback(),this.removeEventListener("click",this.handleClick)}get accordion(){return this.closest("k-accordion")}static styles=css`
36
+ `;render(){return html`<slot></slot>`}}export class AccordionHeader extends ShadowComponent{static properties={forPanel:{type:String,reflect:!0,attribute:"for-panel"},active:{type:Boolean,reflect:!0,converter:boolExists}};constructor(){super(),this.forPanel="",this.active=!1}handleClick=()=>{this.accordion?.togglePanel(this.forPanel)};connectedCallback(){super.connectedCallback(),this.addEventListener("click",this.handleClick)}disconnectedCallback(){super.disconnectedCallback(),this.removeEventListener("click",this.handleClick)}get accordion(){return this.closest("k-accordion")}render(){return html`
37
+ <slot name="left-icon">
38
+ <k-icon id="icon" name="chevron-right"></k-icon>
39
+ </slot>
40
+ <slot></slot>
41
+ <slot name="right-icon"></slot>
42
+ `}static styles=css`
20
43
  :host {
21
44
  display: block;
22
45
  padding: 1rem;
23
46
  cursor: pointer;
24
47
  }
25
- `;render(){return html`<slot></slot>`}}export class AccordionPanel extends ShadowComponent{static properties={name:{type:String,reflect:!0},active:{type:Boolean,reflect:!0,converter:boolTrueFalse},transitioning:{type:Boolean,reflect:!0,converter:boolTrueFalse}};constructor(){super(),this.name="",this.active=!1,this.transitioning=!1}get accordion(){return this.closest("k-accordion")}static styles=css`
48
+ #icon {
49
+ will-change: trnasform;
50
+ transition: transform var(--animation_ms, 256ms);
51
+ transform: rotate(0deg);
52
+ }
53
+ :host([active]) #icon {
54
+ transform: rotate(90deg);
55
+ }
56
+ `}export class AccordionPanel extends ShadowComponent{static properties={name:{type:String,reflect:!0},active:{type:Boolean,reflect:!0,converter:boolExists},transitioning:{type:Boolean,reflect:!0,converter:boolExists}};constructor(){super(),this.name="",this.active=!1,this.transitioning=!1}get accordion(){return this.closest("k-accordion")}static styles=css`
26
57
  :host {
27
58
  display: block;
28
59
  interpolate-size: allow-keywords;
@@ -30,7 +61,7 @@ import ShadowComponent from"./ShadowComponent.js";import{html,css}from"../lit-al
30
61
  overflow: hidden;
31
62
  transition: height var(--animation_ms, 256ms) ease-in-out;
32
63
  }
33
- :host([active="true"]) {
64
+ :host([active]) {
34
65
  height: max-content;
35
66
  }
36
67
  `;render(){return html`<slot></slot>`}}customElements.define("k-accordion",Accordion),customElements.define("k-accordion-header",AccordionHeader),customElements.define("k-accordion-panel",AccordionPanel);
@@ -99,7 +99,11 @@ import{html,css}from"../lit-all.min.js";import ShadowComponent from"./ShadowComp
99
99
  <slot></slot>
100
100
  </div>
101
101
  </div>
102
- `}}export class Tab extends ShadowComponent{static properties={active:{type:Boolean,reflect:!0,converter:boolExists},for:{type:String,reflect:!0}};constructor(){super(),this.active=!1,this.for="",this.slot="tabs"}handleClick=()=>{if(!this.active){const t=this.parentElement;t&&"K-TABS"===t.tagName&&(t.active=this.for||t.tabs.indexOf(this).toString())}};get tabs(){return"K-TABS"===this.parentElement?.tagName?this.parentElement:null}static styles=css`
102
+ `}}export class Tab extends ShadowComponent{static properties={active:{type:Boolean,reflect:!0,converter:boolExists},for:{type:String,reflect:!0}};constructor(){super(),this.active=!1,this.for="",this.slot="tabs"}handleClick=()=>{if(!this.active){const t=this.parentElement;t&&"K-TABS"===t.tagName&&(t.active=this.for||t.tabs.indexOf(this).toString())}};get tabs(){return"K-TABS"===this.parentElement?.tagName?this.parentElement:null}render(){return html`
103
+ <button id="button" @click=${this.handleClick}>
104
+ <slot></slot>
105
+ </button>
106
+ `}static styles=css`
103
107
  :host {
104
108
  margin-bottom: -1px;
105
109
  flex: 0 0 auto;
@@ -120,24 +124,21 @@ import{html,css}from"../lit-all.min.js";import ShadowComponent from"./ShadowComp
120
124
  }
121
125
 
122
126
  :host([active]) {
123
- border-bottom: 2px solid var(--c_primary);
127
+ border-bottom: 3px solid var(--c_primary);
124
128
  margin-bottom: -1px;
125
129
  }
126
130
 
127
131
  :host([active]) #button {
128
132
  color: var(--tc_primary);
129
133
  }
130
- `;render(){return html`
131
- <button id="button" @click=${this.handleClick}>
132
- <slot></slot>
133
- </button>
134
- `}}export class TabContent extends ShadowComponent{static properties={active:{type:Boolean,reflect:!0,converter:boolExists},name:{type:String,reflect:!0}};constructor(){super(),this.active=!1,this.name=""}get tabs(){return"K-TABS"===this.parentElement?.tagName?this.parentElement:null}static styles=css`
134
+ `}export class TabContent extends ShadowComponent{static properties={active:{type:Boolean,reflect:!0,converter:boolExists},name:{type:String,reflect:!0}};constructor(){super(),this.active=!1,this.name=""}get tabs(){return"K-TABS"===this.parentElement?.tagName?this.parentElement:null}render(){return html`<slot></slot>`}static styles=css`
135
135
  :host {
136
136
  display: block;
137
137
  height: 100%;
138
138
  max-height: 100%;
139
139
  flex: 1 1 auto;
140
140
  overflow: auto;
141
+ padding-top: var(--spacer, 1rem);
141
142
  }
142
143
 
143
144
  :host([active]) {
@@ -147,7 +148,7 @@ import{html,css}from"../lit-all.min.js";import ShadowComponent from"./ShadowComp
147
148
  :host(:not([active])) {
148
149
  display: none;
149
150
  }
150
- `;render(){return html`<slot></slot>`}}export class TabSpacer extends ShadowComponent{constructor(){super(),this.slot="tabs"}static styles=css`
151
+ `}export class TabSpacer extends ShadowComponent{constructor(){super(),this.slot="tabs"}static styles=css`
151
152
  :host {
152
153
  flex: 1 1 auto !important;
153
154
  height: 1px;
@@ -1,15 +1,11 @@
1
1
  {
2
2
  "customRoutes": {
3
- "/": "./index.html",
4
- "/kempo.min.css": "../node_modules/kempo-css/dist/kempo.min.css",
5
- "/kempo-vars.css": "../kempo-vars.css",
6
- "/kempo-hljs.css": "../src/kempo-hljs.css",
3
+ "/kempo.min.css": "../node_modules/kempo-css/dist/kempo.min.css",
4
+ "/kempo-ui/kempo.min.css": "../node_modules/kempo-css/dist/kempo.min.css",
5
+ "/kempo-ui/kempo-vars.css": "../src/kempo-vars.css",
6
+ "/kempo-ui/kempo-hljs.css": "../src/kempo-hljs.css",
7
7
  "/icons/**": "../icons/**",
8
- "/src/**": "../src/**"
9
- },
10
- "mimeTypes": {
11
- ".js": "application/javascript",
12
- ".mjs": "application/javascript"
8
+ "/kempo-ui/src/**": "../src/**"
13
9
  },
14
10
  "middleware": {
15
11
  "logging": {
@@ -0,0 +1,236 @@
1
+ <!DOCTYPE html>
2
+ <html lang="en">
3
+
4
+ <head>
5
+ <base href="/kempo-ui/">
6
+ <meta charset="UTF-8">
7
+ <meta name="viewport" content="width=device-width, initial-scale=1.0">
8
+ <title>Accordion - Components - Kempo Docs - A Web Components Solution</title>
9
+ <link rel="stylesheet" href="kempo-vars.css" />
10
+ <link rel="stylesheet" href="kempo.min.css" />
11
+ <link rel="stylesheet" href="kempo-hljs.css" />
12
+ <link rel="stylesheet" href="styles.css" />
13
+ <script>window.litDisableBundleWarning = true;</script>
14
+ </head>
15
+
16
+ <body>
17
+ <k-import src="/kempo-ui/nav.inc.html"></k-import>
18
+ <h1 class="ta-center">Accordion</h1>
19
+ <main>
20
+ <k-accordion persistent-id="toc" class="b r mb">
21
+ <k-accordion-header for-panel="toc-panel">Table of Contents</k-accordion-header>
22
+ <k-accordion-panel name="toc-panel">
23
+ <div class="m pl">
24
+ <h6>Examples</h6>
25
+ <a href="#basicUsage" class="scroll-link">Basic Usage</a><br />
26
+ <a href="#defaultOpen" class="scroll-link">Default Open Panel</a><br />
27
+ <a href="#multiple" class="scroll-link">Multiple Panels Mode</a><br />
28
+ <a href="#persistent" class="scroll-link">Persistent State Example</a><br />
29
+ <h6 class="mt"><a href="#jsRef" class="no-link scroll-link">JavaScript Reference</a></h6>
30
+ <a href="#accordion-ref" class="scroll-link">Accordion</a><br />
31
+ <a href="#accordion-header-ref" class="scroll-link">AccordionHeader</a><br />
32
+ <a href="#accordion-panel-ref" class="scroll-link">AccordionPanel</a><br />
33
+ <a href="#events" class="scroll-link">Events</a><br />
34
+ </div>
35
+ </k-accordion-panel>
36
+ </k-accordion>
37
+
38
+ <h3>Description</h3>
39
+ <p>A widget that allows a single panel of content to be opened and closed.</p>
40
+
41
+ <h3 id="basicUsage"><a href="#basicUsage" class="no-link scroll-link">Basic Usage</a></h3>
42
+ <div class="row -mx mb">
43
+ <div class="col d-span-6 m-span-12 px">
44
+ <k-card label="HTML">
45
+ <pre><code class="hljs xml"><span class="hljs-tag">&lt;<span class="hljs-name">k-accordion</span>&gt;</span><br /><span class="hljs-tag">&lt;<span class="hljs-name">k-accordion-header</span> <span class="hljs-attr">for-panel</span>=<span class="hljs-string">"panel1"</span>&gt;</span>Panel 1<span class="hljs-tag">&lt;/<span class="hljs-name">k-accordion-header</span>&gt;</span><br /><span class="hljs-tag">&lt;<span class="hljs-name">k-accordion-panel</span> <span class="hljs-attr">name</span>=<span class="hljs-string">"panel1"</span>&gt;</span><br /> <span class="hljs-tag">&lt;<span class="hljs-name">p</span> <span class="hljs-attr">class</span>=<span class="hljs-string">"m"</span>&gt;</span>Panel 1 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-accordion-panel</span>&gt;</span><br /><span class="hljs-tag">&lt;<span class="hljs-name">k-accordion-header</span> <span class="hljs-attr">for-panel</span>=<span class="hljs-string">"panel2"</span>&gt;</span>Panel 2<span class="hljs-tag">&lt;/<span class="hljs-name">k-accordion-header</span>&gt;</span><br /><span class="hljs-tag">&lt;<span class="hljs-name">k-accordion-panel</span> <span class="hljs-attr">name</span>=<span class="hljs-string">"panel2"</span>&gt;</span><br /> <span class="hljs-tag">&lt;<span class="hljs-name">p</span> <span class="hljs-attr">class</span>=<span class="hljs-string">"m"</span>&gt;</span>Panel 2 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-accordion-panel</span>&gt;</span><br /><span class="hljs-tag">&lt;<span class="hljs-name">k-accordion-header</span> <span class="hljs-attr">for-panel</span>=<span class="hljs-string">"panel3"</span>&gt;</span>Panel 3<span class="hljs-tag">&lt;/<span class="hljs-name">k-accordion-header</span>&gt;</span><br /><span class="hljs-tag">&lt;<span class="hljs-name">k-accordion-panel</span> <span class="hljs-attr">name</span>=<span class="hljs-string">"panel3"</span>&gt;</span><br /> <span class="hljs-tag">&lt;<span class="hljs-name">p</span> <span class="hljs-attr">class</span>=<span class="hljs-string">"m"</span>&gt;</span>Panel 3 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-accordion-panel</span>&gt;</span><br /><span class="hljs-tag">&lt;/<span class="hljs-name">k-accordion</span>&gt;</span></code></pre>
46
+ </k-card>
47
+ </div>
48
+ <div class="col d-span-6 m-span-12 px">
49
+ <k-card label="Results">
50
+ <k-accordion class="mb">
51
+ <k-accordion-header for-panel="panel1">Panel 1</k-accordion-header>
52
+ <k-accordion-panel name="panel1">
53
+ <p class="m">Panel 1 content</p>
54
+ </k-accordion-panel>
55
+ <k-accordion-header for-panel="panel2">Panel 2</k-accordion-header>
56
+ <k-accordion-panel name="panel2">
57
+ <p class="m">Panel 2 content</p>
58
+ </k-accordion-panel>
59
+ <k-accordion-header for-panel="panel3">Panel 3</k-accordion-header>
60
+ <k-accordion-panel name="panel3">
61
+ <p class="m">Panel 3 content</p>
62
+ </k-accordion-panel>
63
+ </k-accordion>
64
+ </k-card>
65
+ </div>
66
+ </div>
67
+
68
+
69
+
70
+ <h3 id="defaultOpen"><a href="#defaultOpen" class="no-link scroll-link">Default Open Panel</a></h3>
71
+ <p>You can have a panel open by default by setting the <code>active</code> attribute to <code>true</code> on both
72
+ <p>You can have a panel open by default by adding the <code>active</code> attribute to both the header and the
73
+ panel. The presence of the attribute means <code>true</code>.</p>
74
+ <div class="row -mx mb">
75
+ <div class="col d-span-6 m-span-12 px">
76
+ <k-card label="HTML">
77
+ <pre><code class="hljs xml"><span class="hljs-tag">&lt;<span class="hljs-name">k-accordion</span>&gt;</span><br /> <span class="hljs-tag">&lt;<span class="hljs-name">k-accordion-header</span> <span class="hljs-attr">for-panel</span>=<span class="hljs-string">"panel1"</span> <span class="hljs-attr">active</span>=<span class="hljs-string">"true"</span>&gt;</span>Panel 1<span class="hljs-tag">&lt;/<span class="hljs-name">k-accordion-header</span>&gt;</span><br /> <span class="hljs-tag">&lt;<span class="hljs-name">k-accordion-panel</span> <span class="hljs-attr">name</span>=<span class="hljs-string">"panel1"</span> <span class="hljs-attr">active</span>=<span class="hljs-string">"true"</span>&gt;</span><br /> <span class="hljs-tag">&lt;<span class="hljs-name">p</span> <span class="hljs-attr">class</span>=<span class="hljs-string">"m"</span>&gt;</span>Panel 1 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-accordion-panel</span>&gt;</span><br /> <span class="hljs-tag">&lt;<span class="hljs-name">k-accordion-header</span> <span class="hljs-attr">for-panel</span>=<span class="hljs-string">"panel2"</span>&gt;</span>Panel 2<span class="hljs-tag">&lt;/<span class="hljs-name">k-accordion-header</span>&gt;</span><br /> <span class="hljs-tag">&lt;<span class="hljs-name">k-accordion-panel</span> <span class="hljs-attr">name</span>=<span class="hljs-string">"panel2"</span>&gt;</span><br /> <span class="hljs-tag">&lt;<span class="hljs-name">p</span> <span class="hljs-attr">class</span>=<span class="hljs-string">"m"</span>&gt;</span>Panel 2 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-accordion-panel</span>&gt;</span><br /> <span class="hljs-tag">&lt;<span class="hljs-name">k-accordion-header</span> <span class="hljs-attr">for-panel</span>=<span class="hljs-string">"panel3"</span>&gt;</span>Panel 3<span class="hljs-tag">&lt;/<span class="hljs-name">k-accordion-header</span>&gt;</span><br /> <span class="hljs-tag">&lt;<span class="hljs-name">k-accordion-panel</span> <span class="hljs-attr">name</span>=<span class="hljs-string">"panel3"</span>&gt;</span><br /> <span class="hljs-tag">&lt;<span class="hljs-name">p</span> <span class="hljs-attr">class</span>=<span class="hljs-string">"m"</span>&gt;</span>Panel 3 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-accordion-panel</span>&gt;</span><br /><span class="hljs-tag">&lt;/<span class="hljs-name">k-accordion</span>&gt;</span></code></pre>
78
+ </k-card>
79
+ </div>
80
+ <div class="col d-span-6 m-span-12 px">
81
+ <k-card label="Results">
82
+ <k-accordion class="mb">
83
+ <k-accordion-header for-panel="panel1" active>Panel 1</k-accordion-header>
84
+ <k-accordion-panel name="panel1" active>
85
+ <p class="m">Panel 1 content</p>
86
+ </k-accordion-panel>
87
+ <k-accordion-header for-panel="panel2">Panel 2</k-accordion-header>
88
+ <k-accordion-panel name="panel2">
89
+ <p class="m">Panel 2 content</p>
90
+ </k-accordion-panel>
91
+ <k-accordion-header for-panel="panel3">Panel 3</k-accordion-header>
92
+ <k-accordion-panel name="panel3">
93
+ <p class="m">Panel 3 content</p>
94
+ </k-accordion-panel>
95
+ </k-accordion>
96
+ </k-card>
97
+ </div>
98
+ </div>
99
+
100
+ <h3 id="multiple"><a href="#multiple" class="no-link scroll-link">Multiple Panels Mode</a></h3>
101
+ <p>Add the <code>multiple</code> attribute to <code>k-accordion</code> to allow more than one panel to be open at a
102
+ time.</p>
103
+ <div class="row -mx mb">
104
+ <div class="col d-span-6 m-span-12 px">
105
+ <k-card label="HTML">
106
+ <pre><code class="hljs xml"><span class="hljs-tag">&lt;<span class="hljs-name">k-accordion</span> <span class="hljs-attr">multiple</span>&gt;</span><br /> <span class="hljs-tag">&lt;<span class="hljs-name">k-accordion-header</span> <span class="hljs-attr">for-panel</span>=<span class="hljs-string">"panel1"</span> <span class="hljs-attr">active</span>&gt;</span>Panel 1<span class="hljs-tag">&lt;/<span class="hljs-name">k-accordion-header</span>&gt;</span><br /> <span class="hljs-tag">&lt;<span class="hljs-name">k-accordion-panel</span> <span class="hljs-attr">name</span>=<span class="hljs-string">"panel1"</span> <span class="hljs-attr">active</span>&gt;</span><br /> <span class="hljs-tag">&lt;<span class="hljs-name">p</span> <span class="hljs-attr">class</span>=<span class="hljs-string">"m"</span>&gt;</span>Panel 1 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-accordion-panel</span>&gt;</span><br /> <span class="hljs-tag">&lt;<span class="hljs-name">k-accordion-header</span> <span class="hljs-attr">for-panel</span>=<span class="hljs-string">"panel2"</span>&gt;</span>Panel 2<span class="hljs-tag">&lt;/<span class="hljs-name">k-accordion-header</span>&gt;</span><br /> <span class="hljs-tag">&lt;<span class="hljs-name">k-accordion-panel</span> <span class="hljs-attr">name</span>=<span class="hljs-string">"panel2"</span>&gt;</span><br /> <span class="hljs-tag">&lt;<span class="hljs-name">p</span> <span class="hljs-attr">class</span>=<span class="hljs-string">"m"</span>&gt;</span>Panel 2 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-accordion-panel</span>&gt;</span><br /> <span class="hljs-tag">&lt;<span class="hljs-name">k-accordion-header</span> <span class="hljs-attr">for-panel</span>=<span class="hljs-string">"panel3"</span>&gt;</span>Panel 3<span class="hljs-tag">&lt;/<span class="hljs-name">k-accordion-header</span>&gt;</span><br /> <span class="hljs-tag">&lt;<span class="hljs-name">k-accordion-panel</span> <span class="hljs-attr">name</span>=<span class="hljs-string">"panel3"</span>&gt;</span><br /> <span class="hljs-tag">&lt;<span class="hljs-name">p</span> <span class="hljs-attr">class</span>=<span class="hljs-string">"m"</span>&gt;</span>Panel 3 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-accordion-panel</span>&gt;</span><br /><span class="hljs-tag">&lt;/<span class="hljs-name">k-accordion</span>&gt;</span></code></pre>
107
+ </k-card>
108
+ </div>
109
+ <div class="col d-span-6 m-span-12 px">
110
+ <k-card label="Results">
111
+ <k-accordion class="mb" multiple>
112
+ <k-accordion-header for-panel="panel1" active>Panel 1</k-accordion-header>
113
+ <k-accordion-panel name="panel1" active>
114
+ <p class="m">Panel 1 content</p>
115
+ </k-accordion-panel>
116
+ <k-accordion-header for-panel="panel2">Panel 2</k-accordion-header>
117
+ <k-accordion-panel name="panel2">
118
+ <p class="m">Panel 2 content</p>
119
+ </k-accordion-panel>
120
+ <k-accordion-header for-panel="panel3">Panel 3</k-accordion-header>
121
+ <k-accordion-panel name="panel3">
122
+ <p class="m">Panel 3 content</p>
123
+ </k-accordion-panel>
124
+ </k-accordion>
125
+ </k-card>
126
+ </div>
127
+ </div>
128
+
129
+ <h3 id="persistent"><a href="#persistent" class="no-link scroll-link">Persistent State Example</a></h3>
130
+ <p>Add the <code>persistent-id</code> attribute to <code>k-accordion</code> to save and restore open panels across
131
+ page reloads. The state is stored in <code>localStorage</code> (if available) using the provided ID.</p>
132
+ <div class="row -mx mb">
133
+ <div class="col d-span-6 m-span-12 px">
134
+ <k-card label="HTML">
135
+ <pre><code class="hljs xml"><span class="hljs-tag">&lt;<span class="hljs-name">k-accordion</span> <span class="hljs-attr">persistent-id</span>=<span class="hljs-string">"demo-accordion"</span>&gt;</span><br /> <span class="hljs-tag">&lt;<span class="hljs-name">k-accordion-header</span> <span class="hljs-attr">for-panel</span>=<span class="hljs-string">"panel1"</span>&gt;</span>Panel 1<span class="hljs-tag">&lt;/<span class="hljs-name">k-accordion-header</span>&gt;</span><br /> <span class="hljs-tag">&lt;<span class="hljs-name">k-accordion-panel</span> <span class="hljs-attr">name</span>=<span class="hljs-string">"panel1"</span>&gt;</span><br /> <span class="hljs-tag">&lt;<span class="hljs-name">p</span> <span class="hljs-attr">class</span>=<span class="hljs-string">"m"</span>&gt;</span>Panel 1 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-accordion-panel</span>&gt;</span><br /> <span class="hljs-tag">&lt;<span class="hljs-name">k-accordion-header</span> <span class="hljs-attr">for-panel</span>=<span class="hljs-string">"panel2"</span>&gt;</span>Panel 2<span class="hljs-tag">&lt;/<span class="hljs-name">k-accordion-header</span>&gt;</span><br /> <span class="hljs-tag">&lt;<span class="hljs-name">k-accordion-panel</span> <span class="hljs-attr">name</span>=<span class="hljs-string">"panel2"</span>&gt;</span><br /> <span class="hljs-tag">&lt;<span class="hljs-name">p</span> <span class="hljs-attr">class</span>=<span class="hljs-string">"m"</span>&gt;</span>Panel 2 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-accordion-panel</span>&gt;</span><br /> <span class="hljs-tag">&lt;<span class="hljs-name">k-accordion-header</span> <span class="hljs-attr">for-panel</span>=<span class="hljs-string">"panel3"</span>&gt;</span>Panel 3<span class="hljs-tag">&lt;/<span class="hljs-name">k-accordion-header</span>&gt;</span><br /> <span class="hljs-tag">&lt;<span class="hljs-name">k-accordion-panel</span> <span class="hljs-attr">name</span>=<span class="hljs-string">"panel3"</span>&gt;</span><br /> <span class="hljs-tag">&lt;<span class="hljs-name">p</span> <span class="hljs-attr">class</span>=<span class="hljs-string">"m"</span>&gt;</span>Panel 3 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-accordion-panel</span>&gt;</span><br /><span class="hljs-tag">&lt;/<span class="hljs-name">k-accordion</span>&gt;</span></code></pre>
136
+ </k-card>
137
+ </div>
138
+ <div class="col d-span-6 m-span-12 px">
139
+ <k-card label="Results">
140
+ <k-accordion class="mb" persistent-id="demo-accordion">
141
+ <k-accordion-header for-panel="panel1">Panel 1</k-accordion-header>
142
+ <k-accordion-panel name="panel1">
143
+ <p class="m">Panel 1 content</p>
144
+ </k-accordion-panel>
145
+ <k-accordion-header for-panel="panel2">Panel 2</k-accordion-header>
146
+ <k-accordion-panel name="panel2">
147
+ <p class="m">Panel 2 content</p>
148
+ </k-accordion-panel>
149
+ <k-accordion-header for-panel="panel3">Panel 3</k-accordion-header>
150
+ <k-accordion-panel name="panel3">
151
+ <p class="m">Panel 3 content</p>
152
+ </k-accordion-panel>
153
+ </k-accordion>
154
+ </k-card>
155
+ </div>
156
+ </div>
157
+
158
+ <h2 id="jsRef"><a href="#jsRef" class="no-link scroll-link">JavaScript Reference</a></h2>
159
+ <k-card>
160
+ <h3 id="accordion-ref" class="bb pb">Accordion</h3>
161
+ <h4>Properties</h4>
162
+ <ul>
163
+ <li><code>multiple: boolean</code> — If present, allows multiple panels to be open.</li>
164
+ <li><code>persistentId: string</code> — If set, open panel state is saved/restored via localStorage.</li>
165
+ </ul>
166
+ <h4>Methods</h4>
167
+ <ul>
168
+ <li><code>getHeader(panelName): HTMLElement | null</code></li>
169
+ <li><code>getPanel(panelName): HTMLElement | null</code></li>
170
+ <li><code>openPanel(panelName): void</code></li>
171
+ <li><code>closePanel(panelName): void</code></li>
172
+ <li><code>togglePanel(panelName): void</code></li>
173
+ </ul>
174
+ <h4>Lifecycle</h4>
175
+ <ul>
176
+ <li>State is restored in <code>updated()</code> when <code>persistentId</code> changes.</li>
177
+ </ul>
178
+ </k-card>
179
+
180
+ <k-card>
181
+ <h3 id="accordion-header-ref" class="bb pb">AccordionHeader</h3>
182
+ <h4>Properties</h4>
183
+ <ul>
184
+ <li><code>forPanel: string</code> — The panel name this header controls.</li>
185
+ <li><code>active: boolean</code> — Whether this header is active.</li>
186
+ <li><code>accordion: Accordion | null</code> <i>(read only)</i> — Parent accordion.</li>
187
+ </ul>
188
+ <h4>Event Handlers</h4>
189
+ <ul>
190
+ <li>Click: toggles associated panel.</li>
191
+ </ul>
192
+ </k-card>
193
+
194
+ <k-card>
195
+ <h3 id="accordion-panel-ref" class="bb pb">AccordionPanel</h3>
196
+ <h4>Properties</h4>
197
+ <ul>
198
+ <li><code>name: string</code> — Unique panel identifier.</li>
199
+ <li><code>active: boolean</code> — Whether this panel is open.</li>
200
+ <li><code>transitioning: boolean</code> — Whether this panel is animating.</li>
201
+ </ul>
202
+ <h4>Methods</h4>
203
+ <ul>
204
+ <li><code>accordion: Accordion | null</code> (getter) — Returns parent accordion.</li>
205
+ </ul>
206
+
207
+ <h3 id="events"><a href="#events" class="no-link scroll-link">Events</a></h3>
208
+ <h5><code>openpanel</code></h5>
209
+ <p>Fired when a panel is opened. The event detail contains <code>{ panelName }</code>.</p>
210
+ <h5><code>closepanel</code></h5>
211
+ <p>Fired when a panel is closed. The event detail contains <code>{ panelName }</code>.</p>
212
+ <h5><code>togglepanel</code></h5>
213
+ <p>Fired when a panel is toggled. The event detail contains <code>{ panelName }</code>.</p>
214
+ </k-card>
215
+
216
+ </main>
217
+ <div style="height:33vh"></div>
218
+ <script type="module" src="/kempo-ui/src/components/Import.js"></script>
219
+ <script type="module" src="/kempo-ui/src/components/Accordion.js"></script>
220
+ <script type="module" src="/kempo-ui/src/components/Card.js"></script>
221
+ <script>
222
+ document.querySelectorAll('.scroll-link').forEach(link => {
223
+ link.addEventListener('click', function (e) {
224
+ e.preventDefault();
225
+ const targetId = this.getAttribute('href').replace('#', '');
226
+ const target = document.getElementById(targetId);
227
+ if (target) {
228
+ target.scrollIntoView({ behavior: 'smooth' });
229
+ const url = window.location.pathname + window.location.search + '#' + targetId;
230
+ history.replaceState(null, '', url);
231
+ }
232
+ });
233
+ });
234
+ </script>
235
+ </body>
236
+ </html>
@@ -1,18 +1,18 @@
1
1
  <!DOCTYPE html>
2
2
  <html lang="en">
3
3
  <head>
4
+ <base href="/kempo-ui/">
4
5
  <meta charset="UTF-8">
5
6
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
6
7
  <title>Card - Components - Kempo Docs - A Web Components Solution</title>
7
- <link rel="stylesheet" href="../kempo-vars.css" />
8
- <link rel="stylesheet" href="../kempo.min.css" />
9
- <link rel="stylesheet" href="../kempo-hljs.css" />
10
- <link rel="stylesheet" href="../styles.css" />
8
+ <link rel="stylesheet" href="kempo-vars.css" />
9
+ <link rel="stylesheet" href="kempo.min.css" />
10
+ <link rel="stylesheet" href="kempo-hljs.css" />
11
+ <link rel="stylesheet" href="styles.css" />
11
12
  <script>window.litDisableBundleWarning = true;</script>
12
- <script type="module" src="./init.js"></script>
13
13
  </head>
14
14
  <body>
15
- <k-import src="../nav.inc.html"></k-import>
15
+ <k-import src="/kempo-ui/nav.inc.html"></k-import>
16
16
  <h1 class="ta-center">Card</h1>
17
17
  <main>
18
18
  <details class="b r mb">
@@ -82,7 +82,7 @@
82
82
 
83
83
  </main>
84
84
  <div style="height:33vh"></div>
85
- <script type="module" src="../src/components/Import.js"></script>
86
- <script type="module" src="../src/components/Card.js"></script>
85
+ <script type="module" src="/kempo-ui/src/components/Import.js"></script>
86
+ <script type="module" src="/kempo-ui/src/components/Card.js"></script>
87
87
  </body>
88
88
  </html>
@@ -1,18 +1,18 @@
1
1
  <!DOCTYPE html>
2
2
  <html lang="en">
3
3
  <head>
4
+ <base href="/kempo-ui/">
4
5
  <meta charset="UTF-8">
5
6
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
6
7
  <title>Content Slider - Components - Kempo Docs - A Web Components Solution</title>
7
- <link rel="stylesheet" href="../kempo-vars.css" />
8
- <link rel="stylesheet" href="../kempo.min.css" />
9
- <link rel="stylesheet" href="../kempo-hljs.css" />
10
- <link rel="stylesheet" href="../styles.css" />
8
+ <link rel="stylesheet" href="kempo-vars.css" />
9
+ <link rel="stylesheet" href="kempo.min.css" />
10
+ <link rel="stylesheet" href="kempo-hljs.css" />
11
+ <link rel="stylesheet" href="styles.css" />
11
12
  <script>window.litDisableBundleWarning = true;</script>
12
- <script type="module" src="./init.js"></script>
13
13
  </head>
14
14
  <body>
15
- <k-import src="../nav.inc.html"></k-import>
15
+ <k-import src="/kempo-ui/nav.inc.html"></k-import>
16
16
  <h1 class="ta-center">Content Slider</h1>
17
17
  <main>
18
18
  <details
@@ -213,7 +213,7 @@
213
213
  <p>Custom content for the next button. Defaults to a right chevron icon if not provided.</p>
214
214
 
215
215
  </main>
216
- <script type="module" src="../src/components/Import.js"></script>
217
- <script type="module" src="../src/components/ContentSlider.js"></script>
216
+ <script type="module" src="/kempo-ui/src/components/Import.js"></script>
217
+ <script type="module" src="/kempo-ui/src/components/ContentSlider.js"></script>
218
218
  </body>
219
219
  </html>