kempo-ui 0.0.40 → 0.0.42

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 (69) hide show
  1. package/dist/components/Dropdown.js +123 -0
  2. package/dist/components/Icon.js +1 -1
  3. package/dist/components/ShadowComponent.js +1 -1
  4. package/dist/components/Spinner.js +113 -0
  5. package/docs/components/accordion.html +0 -1
  6. package/docs/components/card.html +0 -1
  7. package/docs/components/content-slider.html +0 -1
  8. package/docs/components/dialog.html +0 -1
  9. package/docs/components/dropdown.html +281 -0
  10. package/docs/components/focus-capture.html +0 -1
  11. package/docs/components/hybrid-component.html +0 -1
  12. package/docs/components/import.html +0 -1
  13. package/docs/components/light-component.html +0 -1
  14. package/docs/components/photo-viewer.html +0 -1
  15. package/docs/components/resize.html +0 -1
  16. package/docs/components/shadow-component.html +0 -1
  17. package/docs/components/show-more.html +0 -1
  18. package/docs/components/side-menu.html +0 -1
  19. package/docs/components/sortable.html +0 -1
  20. package/docs/components/spinner.html +213 -0
  21. package/docs/components/split.html +0 -1
  22. package/docs/components/table.html +0 -1
  23. package/docs/components/tableControls.html +0 -1
  24. package/docs/components/tableCustomFields.html +0 -1
  25. package/docs/components/tableFetchRecords.html +0 -1
  26. package/docs/components/tableFieldSortHide.html +0 -1
  27. package/docs/components/tablePagination.html +0 -1
  28. package/docs/components/tableRecordEditing.html +0 -1
  29. package/docs/components/tableRecordFiltering.html +0 -1
  30. package/docs/components/tableRecordHiding.html +0 -1
  31. package/docs/components/tableRecordSearching.html +0 -1
  32. package/docs/components/tableRecordSelection.html +0 -1
  33. package/docs/components/tableRowControls.html +0 -1
  34. package/docs/components/tableSorting.html +0 -1
  35. package/docs/components/tabs.html +0 -1
  36. package/docs/components/tags.html +0 -1
  37. package/docs/components/theme-switcher.html +0 -1
  38. package/docs/components/timestamp.html +0 -1
  39. package/docs/components/toast.html +0 -1
  40. package/docs/components/toggle.html +0 -1
  41. package/docs/components/tree.html +0 -1
  42. package/docs/dev.config.json +0 -1
  43. package/docs/index.html +12 -1
  44. package/docs/nav-1.inc.html +2 -0
  45. package/docs/src/components/Dropdown.js +123 -0
  46. package/docs/src/components/Icon.js +1 -1
  47. package/docs/src/components/ShadowComponent.js +1 -1
  48. package/docs/src/components/Spinner.js +113 -0
  49. package/docs/utils/context.html +0 -1
  50. package/docs/utils/debounce.html +0 -1
  51. package/docs/utils/drag.html +0 -1
  52. package/docs/utils/formatTimestamp.html +0 -1
  53. package/docs/utils/object.html +0 -1
  54. package/docs/utils/propConverters.html +0 -1
  55. package/docs/utils/string.html +0 -1
  56. package/docs/utils/theme.html +0 -1
  57. package/docs/utils/toTitleCase.html +0 -1
  58. package/docs/utils/type.html +0 -1
  59. package/docs/utils/wait.html +0 -1
  60. package/package.json +1 -1
  61. package/src/components/Dropdown.js +358 -0
  62. package/src/components/Icon.js +6 -2
  63. package/src/components/Spinner.js +152 -0
  64. package/tests/components/Dropdown.browser-test.js +557 -0
  65. package/tests/components/HybridComponent.browser-test.js +8 -2
  66. package/tests/components/ShadowComponent.browser-test.js +6 -6
  67. package/tests/components/Spinner.browser-test.js +335 -0
  68. package/docs/init-1.js +0 -4
  69. package/docs/init.js +0 -4
@@ -0,0 +1,123 @@
1
+ import{html,css}from"../lit-all.min.js";import ShadowComponent from"./ShadowComponent.js";import{boolTrueFalse}from"../utils/propConverters.js";const openDropdowns=new Set;export default class Dropdown extends ShadowComponent{static properties={opened:{type:Boolean,reflect:!0},openDirection:{type:String,reflect:!0,attribute:"open-direction"},closeOnSelect:{type:Boolean,reflect:!0,attribute:"close-on-select",converter:boolTrueFalse},closeOnClickOutside:{type:Boolean,reflect:!0,attribute:"close-on-click-outside",converter:boolTrueFalse}};anchorId=`dropdown-anchor-${Math.random().toString(36).slice(2,11)}`;constructor(){super(),this.opened=!1,this.openDirection="down left",this.closeOnSelect=!0,this.closeOnClickOutside=!0}connectedCallback(){super.connectedCallback(),document.addEventListener("click",this.handleDocumentClick),document.addEventListener("keydown",this.handleKeydown)}disconnectedCallback(){super.disconnectedCallback(),document.removeEventListener("click",this.handleDocumentClick),document.removeEventListener("keydown",this.handleKeydown),openDropdowns.delete(this)}updated(t){super.updated(t),t.has("opened")&&(this.opened?openDropdowns.add(this):openDropdowns.delete(this),this.dispatchEvent(new CustomEvent(this.opened?"opened":"closed",{bubbles:!0})))}handleDocumentClick=t=>{const e=t.target.closest("k-dropdown"),o=t.target.closest('[slot="trigger"]');if(e&&e!==this&&o)return void(this.opened&&this.close());if(!this.opened)return;if(e!==this)return void(this.closeOnClickOutside&&this.close());if(o)return;t.target.closest("a, button")&&this.closeOnSelect&&this.close()};handleTriggerClick=t=>{t.stopPropagation(),this.opened||openDropdowns.forEach(t=>{t!==this&&t.close()}),this.toggle()};handleMenuClick=t=>{const e=t.target.closest("a, button");if(e&&!e.hasAttribute("disabled")){const t=e.dataset?.value||e.textContent.trim();this.dispatchEvent(new CustomEvent("select",{detail:{value:t,item:e},bubbles:!0}))}};handleKeydown=t=>{if(this.opened)if("Escape"===t.key)t.preventDefault(),this.close(),this.focusTrigger();else if("ArrowDown"===t.key)t.preventDefault(),this.focusNextItem();else if("ArrowUp"===t.key)t.preventDefault(),this.focusPreviousItem();else if("Enter"===t.key||" "===t.key){const e=this.querySelector("a:focus, button:focus");e&&(t.preventDefault(),e.click())}};open(){return openDropdowns.forEach(t=>{t!==this&&t.close()}),this.opened=!0,requestAnimationFrame(()=>this.focusFirstItem()),this}close(){return this.opened=!1,this}toggle(){return this.opened?this.close():this.open()}focusTrigger(){const t=this.querySelector('[slot="trigger"]');t&&t.focus()}getMenuItems(){return[...this.querySelectorAll("a, button")].filter(t=>!t.hasAttribute("disabled")&&!t.closest('[slot="trigger"]'))}focusFirstItem(){const t=this.getMenuItems();t.length>0&&t[0].focus()}focusNextItem(){const t=this.getMenuItems(),e=document.activeElement,o=t.indexOf(e),n=t[o+1]||t[0];n&&n.focus()}focusPreviousItem(){const t=this.getMenuItems(),e=document.activeElement,o=t.indexOf(e),n=t[o-1]||t[t.length-1];n&&n.focus()}getPositionArea(){const t=this.openDirection.toLowerCase().trim().split(/\s+/),e={down:"bottom",up:"top",left:"left",right:"right",center:"center"};return t.map(t=>e[t]||t).join(" ")}getFallbacks(){this.getPositionArea().split(" ");const t=[];return t.push("flip-block"),t.push("flip-inline"),t.push("flip-block flip-inline"),t.join(", ")}static styles=css`
2
+ :host {
3
+ display: inline-block;
4
+ position: relative;
5
+ }
6
+ #trigger {
7
+ cursor: pointer;
8
+ anchor-name: --dropdown-trigger;
9
+ }
10
+ #menu {
11
+ display: none;
12
+ position: fixed;
13
+ position-anchor: --dropdown-trigger;
14
+ z-index: 1000;
15
+ min-width: anchor-size(width);
16
+ background: var(--c_bg);
17
+ border: 1px solid var(--c_border);
18
+ box-shadow: var(--drop_shadow);
19
+ margin: 0.25rem;
20
+ }
21
+ :host([opened]) #menu {
22
+ display: block;
23
+ }
24
+ /* Default: down left */
25
+ #menu {
26
+ position-area: bottom span-right;
27
+ position-try-fallbacks: flip-block, flip-inline, flip-block flip-inline;
28
+ }
29
+ /* down right */
30
+ :host([open-direction="down right"]) #menu {
31
+ position-area: bottom span-left;
32
+ }
33
+ /* down center */
34
+ :host([open-direction="down center"]) #menu,
35
+ :host([open-direction="down"]) #menu {
36
+ position-area: bottom center;
37
+ }
38
+ /* up left */
39
+ :host([open-direction="up left"]) #menu {
40
+ position-area: top span-right;
41
+ }
42
+ /* up right */
43
+ :host([open-direction="up right"]) #menu {
44
+ position-area: top span-left;
45
+ }
46
+ /* up center */
47
+ :host([open-direction="up center"]) #menu,
48
+ :host([open-direction="up"]) #menu {
49
+ position-area: top center;
50
+ }
51
+ /* left up */
52
+ :host([open-direction="left up"]) #menu {
53
+ position-area: left span-top;
54
+ }
55
+ /* left down */
56
+ :host([open-direction="left down"]) #menu {
57
+ position-area: left span-bottom;
58
+ }
59
+ /* left center */
60
+ :host([open-direction="left center"]) #menu,
61
+ :host([open-direction="left"]) #menu {
62
+ position-area: left center;
63
+ }
64
+ /* right up */
65
+ :host([open-direction="right up"]) #menu {
66
+ position-area: right span-top;
67
+ }
68
+ /* right down */
69
+ :host([open-direction="right down"]) #menu {
70
+ position-area: right span-bottom;
71
+ }
72
+ /* right center */
73
+ :host([open-direction="right center"]) #menu,
74
+ :host([open-direction="right"]) #menu {
75
+ position-area: right center;
76
+ }
77
+ /* Slotted menu item styles (not trigger) */
78
+ ::slotted(a:not([slot="trigger"])),
79
+ ::slotted(button:not([slot="trigger"])) {
80
+ all: unset !important;
81
+ display: block !important;
82
+ box-sizing: border-box !important;
83
+ width: 100% !important;
84
+ padding: var(--spacer_h) var(--spacer) !important;
85
+ color: var(--tc) !important;
86
+ background: transparent !important;
87
+ border: none !important;
88
+ border-top: 1px solid var(--c_border) !important;
89
+ border-radius: 0 !important;
90
+ font: inherit !important;
91
+ text-align: left !important;
92
+ cursor: pointer !important;
93
+ white-space: nowrap !important;
94
+ transition: background var(--animation_ms) !important;
95
+ }
96
+ ::slotted(a.k-dropdown-first),
97
+ ::slotted(button.k-dropdown-first) {
98
+ border-top: none !important;
99
+ }
100
+ ::slotted(a:not([slot="trigger"]):hover),
101
+ ::slotted(a:not([slot="trigger"]):focus-visible),
102
+ ::slotted(button:not([slot="trigger"]):hover),
103
+ ::slotted(button:not([slot="trigger"]):focus-visible) {
104
+ background: var(--c_bg__alt) !important;
105
+ outline: none !important;
106
+ }
107
+ ::slotted(a:not([slot="trigger"])[disabled]),
108
+ ::slotted(button:not([slot="trigger"])[disabled]) {
109
+ opacity: 0.5 !important;
110
+ cursor: not-allowed !important;
111
+ pointer-events: none !important;
112
+ }
113
+ ::slotted(hr) {
114
+ display: none !important;
115
+ }
116
+ `;handleSlotChange=t=>{t.target.assignedElements().filter(t=>t.matches("a, button")).forEach((t,e)=>t.classList.toggle("k-dropdown-first",0===e))};render(){return html`
117
+ <div id="trigger" @click=${this.handleTriggerClick}>
118
+ <slot name="trigger"></slot>
119
+ </div>
120
+ <div id="menu" role="menu" @click=${this.handleMenuClick}>
121
+ <slot @slotchange=${this.handleSlotChange}></slot>
122
+ </div>
123
+ `}}customElements.define("k-dropdown",Dropdown);
@@ -1,4 +1,4 @@
1
- import ShadowComponent from"./ShadowComponent.js";import{html,css,unsafeHTML}from"../lit-all.min.js";const cache={},getIconByPath=async t=>(cache[t]||(cache[t]=new Promise(async(e,n)=>{const o=(new AbortController).signal;try{const n=await fetch(t,{signal:o});200===n.status?e(await n.text()):404===n.status&&e(null)}catch(t){"AbortError"!==t.name&&n(t)}}).catch(()=>null)),await cache[t]),getIconByName=t=>{const e=async e=>getIconByPath(`${e}/${t}.svg`);return new Promise(async(t,n)=>{let o;const s=window.kempo?.pathsToIcons||["/icons"];for(let t=0;t<s.length&&!o;t++)try{o=await e(s[t])}catch(t){}t(o||null)})};export default class Icon extends ShadowComponent{static properties={src:{type:String,reflect:!0},name:{type:String,reflect:!0},iconContent:{type:String}};constructor(t=""){super(),this.src="",this.name=t,this.iconContent=""}updated(t){super.updated(),(t.has("src")||t.has("name"))&&this.loadIcon()}async loadIcon(){let t;if(this.src?t=await getIconByPath(this.src):this.name&&(t=await getIconByName(this.name)),t)this.iconContent=this.fixSVG(t);else{const t=this.innerHTML.trim();this.iconContent=t?this.fixSVG(t):window.kempo?.fallbackIcon||'<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 -960 960 960"><path fill="currentColor" d="M480-79q-16 0-30.5-6T423-102L102-423q-11-12-17-26.5T79-480q0-16 6-31t17-26l321-321q12-12 26.5-17.5T480-881q16 0 31 5.5t26 17.5l321 321q12 11 17.5 26t5.5 31q0 16-5.5 30.5T858-423L537-102q-11 11-26 17t-31 6Zm0-80 321-321-321-321-321 321 321 321Zm-40-281h80v-240h-80v240Zm40 120q17 0 28.5-11.5T520-360q0-17-11.5-28.5T480-400q-17 0-28.5 11.5T440-360q0 17 11.5 28.5T480-320Zm0-160Z"/></svg>'}}fixSVG(t){if(!t)return t;const e=(new DOMParser).parseFromString(t,"image/svg+xml").querySelector("svg");return e?(e.removeAttribute("width"),e.removeAttribute("height"),e.querySelectorAll("path, rect, circle").forEach(t=>{t.setAttribute("fill","currentColor")}),(new XMLSerializer).serializeToString(e)):t}static styles=css`
1
+ import ShadowComponent from"./ShadowComponent.js";import{html,css,unsafeHTML}from"../lit-all.min.js";const cache={},getIconByPath=async t=>(cache[t]||(cache[t]=new Promise(async(e,n)=>{const s=(new AbortController).signal;try{const n=await fetch(t,{signal:s});200===n.status?e(await n.text()):404===n.status&&e(null)}catch(t){"AbortError"!==t.name&&n(t)}}).catch(()=>null)),await cache[t]),getIconByName=t=>{const e=async e=>{const n=e.endsWith("/")?e.slice(0,-1):e;return getIconByPath(`${n}/${t}.svg`)};return new Promise(async(t,n)=>{let s;const o=window.kempo?.pathsToIcons||["/icons","../../icons","https://cdn.jsdelivr.net/npm/kempo-ui@0.0.32/icons/"];for(let t=0;t<o.length&&!s;t++)try{s=await e(o[t])}catch(t){}t(s||null)})};export default class Icon extends ShadowComponent{static properties={src:{type:String,reflect:!0},name:{type:String,reflect:!0},iconContent:{type:String}};constructor(t=""){super(),this.src="",this.name=t,this.iconContent=""}updated(t){super.updated(),(t.has("src")||t.has("name"))&&this.loadIcon()}async loadIcon(){let t;if(this.src?t=await getIconByPath(this.src):this.name&&(t=await getIconByName(this.name)),t)this.iconContent=this.fixSVG(t);else{const t=this.innerHTML.trim();this.iconContent=t?this.fixSVG(t):window.kempo?.fallbackIcon||'<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 -960 960 960"><path fill="currentColor" d="M480-79q-16 0-30.5-6T423-102L102-423q-11-12-17-26.5T79-480q0-16 6-31t17-26l321-321q12-12 26.5-17.5T480-881q16 0 31 5.5t26 17.5l321 321q12 11 17.5 26t5.5 31q0 16-5.5 30.5T858-423L537-102q-11 11-26 17t-31 6Zm0-80 321-321-321-321-321 321 321 321Zm-40-281h80v-240h-80v240Zm40 120q17 0 28.5-11.5T520-360q0-17-11.5-28.5T480-400q-17 0-28.5 11.5T440-360q0 17 11.5 28.5T480-320Zm0-160Z"/></svg>'}}fixSVG(t){if(!t)return t;const e=(new DOMParser).parseFromString(t,"image/svg+xml").querySelector("svg");return e?(e.removeAttribute("width"),e.removeAttribute("height"),e.querySelectorAll("path, rect, circle").forEach(t=>{t.setAttribute("fill","currentColor")}),(new XMLSerializer).serializeToString(e)):t}static styles=css`
2
2
  :host {
3
3
  display: inline-block;
4
4
  vertical-align: bottom;
@@ -1 +1 @@
1
- import{LitElement}from"../lit-all.min.js";export default class ShadowComponent extends LitElement{#e;connectedCallback(){super.connectedCallback(),this.#e=new MutationObserver(()=>{console.log("MutationObserver fired for",this.constructor.name),this.childrenUpdated(),this.requestUpdate()}),this.#e.observe(this,{childList:!0})}disconnectedCallback(){super.disconnectedCallback(),this.#e?.disconnect()}childrenUpdated(){}createRenderRoot(){const e=this.attachShadow({mode:"open"}),t=document.createElement("link");t.rel="stylesheet",t.href=window.kempo?.pathToStylesheet||"https://cdn.jsdelivr.net/npm/kempo-css@1.3.1/dist/kempo.min.css",e.appendChild(t);const n=this.constructor.styles;if(n){const t=document.createElement("style");Array.isArray(n)?t.textContent=n.map(e=>e.cssText||e).join("\n"):t.textContent=n.cssText||n,e.appendChild(t)}const s=document.createElement("div");return s.style.display="contents",e.appendChild(s),s}}
1
+ import{LitElement}from"../lit-all.min.js";export default class ShadowComponent extends LitElement{#e;connectedCallback(){super.connectedCallback(),this.#e=new MutationObserver(()=>{console.log("MutationObserver fired for",this.constructor.name),this.childrenUpdated(),this.requestUpdate()}),this.#e.observe(this,{childList:!0})}disconnectedCallback(){super.disconnectedCallback(),this.#e?.disconnect()}childrenUpdated(){}createRenderRoot(){const e=this.attachShadow({mode:"open"}),t=document.createElement("link");t.rel="stylesheet",t.href=window.kempo?.pathToStylesheet||"https://cdn.jsdelivr.net/npm/kempo-css@1.3.2/dist/kempo.min.css",e.appendChild(t);const n=this.constructor.styles;if(n){const t=document.createElement("style");Array.isArray(n)?t.textContent=n.map(e=>e.cssText||e).join("\n"):t.textContent=n.cssText||n,e.appendChild(t)}const s=document.createElement("div");return s.style.display="contents",e.appendChild(s),s}}
@@ -0,0 +1,113 @@
1
+ import{html,css}from"../lit-all.min.js";import ShadowComponent from"./ShadowComponent.js";export default class Spinner extends ShadowComponent{static properties={size:{type:String,reflect:!0},variant:{type:String,reflect:!0}};constructor(){super(),this.size="md",this.variant="spinner"}static styles=css`
2
+ :host {
3
+ --spinner-size: 2rem;
4
+ --spinner-border-width: 3px;
5
+ --spinner-color: var(--c_primary);
6
+ --spinner-track-color: var(--c_border);
7
+ display: inline-flex;
8
+ align-items: center;
9
+ justify-content: center;
10
+ }
11
+ /* Sizes */
12
+ :host([size="xs"]) {
13
+ --spinner-size: 1rem;
14
+ --spinner-border-width: 2px;
15
+ }
16
+ :host([size="sm"]) {
17
+ --spinner-size: 1.5rem;
18
+ --spinner-border-width: 2px;
19
+ }
20
+ :host([size="md"]) {
21
+ --spinner-size: 2rem;
22
+ --spinner-border-width: 3px;
23
+ }
24
+ :host([size="lg"]) {
25
+ --spinner-size: 3rem;
26
+ --spinner-border-width: 4px;
27
+ }
28
+ :host([size="xl"]) {
29
+ --spinner-size: 4rem;
30
+ --spinner-border-width: 5px;
31
+ }
32
+ /* Spinner variant */
33
+ .spinner {
34
+ width: var(--spinner-size);
35
+ height: var(--spinner-size);
36
+ border: var(--spinner-border-width) solid var(--spinner-track-color);
37
+ border-top-color: var(--spinner-color);
38
+ border-radius: 50%;
39
+ animation: spin 0.8s linear infinite;
40
+ }
41
+ @keyframes spin {
42
+ to { transform: rotate(360deg); }
43
+ }
44
+ /* Dots variant */
45
+ .dots {
46
+ display: flex;
47
+ gap: calc(var(--spinner-size) * 0.2);
48
+ }
49
+ .dots span {
50
+ width: calc(var(--spinner-size) * 0.3);
51
+ height: calc(var(--spinner-size) * 0.3);
52
+ background: var(--spinner-color);
53
+ border-radius: 50%;
54
+ animation: bounce 1.4s ease-in-out infinite both;
55
+ }
56
+ .dots span:nth-child(1) { animation-delay: -0.32s; }
57
+ .dots span:nth-child(2) { animation-delay: -0.16s; }
58
+ .dots span:nth-child(3) { animation-delay: 0s; }
59
+ @keyframes bounce {
60
+ 0%, 80%, 100% { transform: scale(0.6); opacity: 0.5; }
61
+ 40% { transform: scale(1); opacity: 1; }
62
+ }
63
+ /* Bars variant */
64
+ .bars {
65
+ display: flex;
66
+ align-items: center;
67
+ gap: calc(var(--spinner-size) * 0.1);
68
+ height: var(--spinner-size);
69
+ }
70
+ .bars span {
71
+ width: calc(var(--spinner-size) * 0.15);
72
+ height: 60%;
73
+ background: var(--spinner-color);
74
+ border-radius: calc(var(--spinner-size) * 0.05);
75
+ animation: bars 1.2s ease-in-out infinite;
76
+ }
77
+ .bars span:nth-child(1) { animation-delay: -0.24s; }
78
+ .bars span:nth-child(2) { animation-delay: -0.12s; }
79
+ .bars span:nth-child(3) { animation-delay: 0s; }
80
+ .bars span:nth-child(4) { animation-delay: 0.12s; }
81
+ @keyframes bars {
82
+ 0%, 40%, 100% { height: 40%; }
83
+ 20% { height: 100%; }
84
+ }
85
+ /* Pulse variant */
86
+ .pulse {
87
+ width: var(--spinner-size);
88
+ height: var(--spinner-size);
89
+ background: var(--spinner-color);
90
+ border-radius: 50%;
91
+ animation: pulse 1.5s ease-in-out infinite;
92
+ }
93
+ @keyframes pulse {
94
+ 0% { transform: scale(0.8); opacity: 0.5; }
95
+ 50% { transform: scale(1); opacity: 1; }
96
+ 100% { transform: scale(0.8); opacity: 0.5; }
97
+ }
98
+ /* Ring variant */
99
+ .ring {
100
+ width: var(--spinner-size);
101
+ height: var(--spinner-size);
102
+ border: var(--spinner-border-width) solid var(--spinner-color);
103
+ border-radius: 50%;
104
+ animation: ring 1.2s cubic-bezier(0.5, 0, 0.5, 1) infinite;
105
+ }
106
+ @keyframes ring {
107
+ 0% { transform: rotate(0deg); border-color: var(--spinner-color) transparent transparent transparent; }
108
+ 25% { border-color: transparent var(--spinner-color) transparent transparent; }
109
+ 50% { border-color: transparent transparent var(--spinner-color) transparent; }
110
+ 75% { border-color: transparent transparent transparent var(--spinner-color); }
111
+ 100% { transform: rotate(360deg); border-color: var(--spinner-color) transparent transparent transparent; }
112
+ }
113
+ `;render(){switch(this.variant){case"dots":return html`<div class="dots"><span></span><span></span><span></span></div>`;case"bars":return html`<div class="bars"><span></span><span></span><span></span><span></span></div>`;case"pulse":return html`<div class="pulse"></div>`;case"ring":return html`<div class="ring"></div>`;default:return html`<div class="spinner"></div>`}}}customElements.define("k-spinner",Spinner);
@@ -11,7 +11,6 @@
11
11
  <link rel="stylesheet" href="../kempo-hljs.css" />
12
12
  <link rel="stylesheet" href="../styles.css" />
13
13
  <script>window.litDisableBundleWarning = true;</script>
14
- <script src="../init-1.js" type="module"></script>
15
14
  </head>
16
15
  <body>
17
16
  <k-import src="../nav-1.inc.html"></k-import>
@@ -11,7 +11,6 @@
11
11
  <link rel="stylesheet" href="../kempo-hljs.css" />
12
12
  <link rel="stylesheet" href="../styles.css" />
13
13
  <script>window.litDisableBundleWarning = true;</script>
14
- <script src="../init-1.js" type="module"></script>
15
14
  </head>
16
15
  <body>
17
16
  <k-import src="../nav-1.inc.html"></k-import>
@@ -11,7 +11,6 @@
11
11
  <link rel="stylesheet" href="../kempo-hljs.css" />
12
12
  <link rel="stylesheet" href="../styles.css" />
13
13
  <script>window.litDisableBundleWarning = true;</script>
14
- <script src="../init-1.js" type="module"></script>
15
14
  </head>
16
15
  <body>
17
16
  <k-import src="../nav-1.inc.html"></k-import>
@@ -11,7 +11,6 @@
11
11
  <link rel="stylesheet" href="../kempo-hljs.css" />
12
12
  <link rel="stylesheet" href="../styles.css" />
13
13
  <script>window.litDisableBundleWarning = true;</script>
14
- <script src="../init-1.js" type="module"></script>
15
14
  </head>
16
15
  <body>
17
16
  <k-import src="../nav-1.inc.html"></k-import>
@@ -11,7 +11,6 @@
11
11
  <link rel="stylesheet" href="../kempo-hljs.css" />
12
12
  <link rel="stylesheet" href="../styles.css" />
13
13
  <script>window.litDisableBundleWarning = true;</script>
14
- <script src="../init-1.js" type="module"></script>
15
14
  </head>
16
15
  <body>
17
16
  <k-import src="../nav-1.inc.html"></k-import>
@@ -11,7 +11,6 @@
11
11
  <link rel="stylesheet" href="../kempo-hljs.css" />
12
12
  <link rel="stylesheet" href="../styles.css" />
13
13
  <script>window.litDisableBundleWarning = true;</script>
14
- <script src="../init-1.js" type="module"></script>
15
14
  </head>
16
15
  <body>
17
16
  <k-import src="../nav-1.inc.html"></k-import>
@@ -11,7 +11,6 @@
11
11
  <link rel="stylesheet" href="../kempo-hljs.css" />
12
12
  <link rel="stylesheet" href="../styles.css" />
13
13
  <script>window.litDisableBundleWarning = true;</script>
14
- <script src="../init-1.js" type="module"></script>
15
14
  </head>
16
15
  <body>
17
16
  <k-import src="../nav-1.inc.html"></k-import>
@@ -11,7 +11,6 @@
11
11
  <link rel="stylesheet" href="../kempo-hljs.css" />
12
12
  <link rel="stylesheet" href="../styles.css" />
13
13
  <script>window.litDisableBundleWarning = true;</script>
14
- <script src="../init-1.js" type="module"></script>
15
14
  </head>
16
15
  <body>
17
16
  <k-import src="../nav-1.inc.html"></k-import>
@@ -11,7 +11,6 @@
11
11
  <link rel="stylesheet" href="../kempo-hljs.css" />
12
12
  <link rel="stylesheet" href="../styles.css" />
13
13
  <script>window.litDisableBundleWarning = true;</script>
14
- <script src="../init-1.js" type="module"></script>
15
14
  </head>
16
15
  <body>
17
16
  <k-import src="../nav-1.inc.html"></k-import>
@@ -11,7 +11,6 @@
11
11
  <link rel="stylesheet" href="../kempo-hljs.css" />
12
12
  <link rel="stylesheet" href="../styles.css" />
13
13
  <script>window.litDisableBundleWarning = true;</script>
14
- <script src="../init-1.js" type="module"></script>
15
14
  </head>
16
15
  <body>
17
16
  <k-import src="../nav-1.inc.html"></k-import>
@@ -11,7 +11,6 @@
11
11
  <link rel="stylesheet" href="../kempo-hljs.css" />
12
12
  <link rel="stylesheet" href="../styles.css" />
13
13
  <script>window.litDisableBundleWarning = true;</script>
14
- <script src="../init-1.js" type="module"></script>
15
14
  </head>
16
15
  <body>
17
16
  <k-import src="../nav-1.inc.html"></k-import>
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "kempo-ui",
3
- "version": "0.0.40",
3
+ "version": "0.0.42",
4
4
  "type": "module",
5
5
  "description": "A Lit based web-component library",
6
6
  "main": "index.js",