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.
- package/.github/skills/highlight-code/SKILL.md +22 -6
- package/.github/skills/new-component/SKILL.md +68 -4
- package/AGENTS.md +11 -0
- package/bin/highlight_code.js +7 -15
- package/dist/components/Aside.js +326 -0
- package/dist/components/Dialog.js +1 -1
- package/dist/components/Dropdown.js +1 -1
- package/dist/components/Main.js +2 -2
- package/dist/components/Nav.js +27 -0
- package/dist/components/PhotoViewer.js +1 -1
- package/dist/components/ShadowComponent.js +1 -1
- package/dist/components/ThemeSelect.js +5 -1
- package/dist/components/ThemeSwitcher.js +1 -0
- package/dist/components/Toast.js +1 -1
- package/docs/components/accordion.html +4 -3
- package/docs/components/aside-items.html +43 -0
- package/docs/components/aside-menu.html +43 -0
- package/docs/components/aside-push.html +26 -0
- package/docs/components/aside.html +567 -0
- package/docs/components/card.html +4 -3
- package/docs/components/color-picker.html +4 -3
- package/docs/components/content-slider.html +4 -3
- package/docs/components/dialog.html +4 -3
- package/docs/components/dropdown.html +4 -3
- package/docs/components/filter-list.html +4 -3
- package/docs/components/focus-capture.html +6 -5
- package/docs/components/html-editor.html +5 -4
- package/docs/components/hybrid-component.html +5 -4
- package/docs/components/icon.html +4 -3
- package/docs/components/import.html +5 -4
- package/docs/components/light-component.html +4 -3
- package/docs/components/nav.html +117 -0
- package/docs/components/photo-viewer.html +5 -4
- package/docs/components/resize.html +5 -4
- package/docs/components/shadow-component.html +4 -3
- package/docs/components/show-more.html +5 -4
- package/docs/components/sortable.html +4 -3
- package/docs/components/spinner.html +4 -3
- package/docs/components/split.html +5 -4
- package/docs/components/table.html +4 -3
- package/docs/components/tableControls.html +4 -3
- package/docs/components/tableCustomFields.html +4 -3
- package/docs/components/tableFetchRecords.html +5 -4
- package/docs/components/tableFieldSortHide.html +5 -4
- package/docs/components/tablePagination.html +4 -3
- package/docs/components/tableRecordEditing.html +4 -3
- package/docs/components/tableRecordFiltering.html +5 -4
- package/docs/components/tableRecordHiding.html +4 -3
- package/docs/components/tableRecordSearching.html +5 -4
- package/docs/components/tableRecordSelection.html +4 -3
- package/docs/components/tableRowControls.html +4 -3
- package/docs/components/tableServerSync.html +5 -4
- package/docs/components/tableSorting.html +5 -4
- package/docs/components/tabs.html +4 -3
- package/docs/components/tags.html +4 -3
- package/docs/components/theme-select.html +4 -3
- package/docs/components/theme-switcher.html +5 -4
- package/docs/components/timestamp.html +4 -3
- package/docs/components/toast.html +4 -3
- package/docs/components/toggle.html +5 -4
- package/docs/components/tree.html +5 -4
- package/docs/index.html +22 -21
- package/docs/nav-1.inc.html +18 -12
- package/docs/nav.inc.html +20 -13
- package/docs/nav.inc.js +1 -1
- package/docs/src/components/Aside.js +326 -0
- package/docs/src/components/Dialog.js +1 -1
- package/docs/src/components/Dropdown.js +1 -1
- package/docs/src/components/Main.js +2 -2
- package/docs/src/components/Nav.js +27 -0
- package/docs/src/components/PhotoViewer.js +1 -1
- package/docs/src/components/ShadowComponent.js +1 -1
- package/docs/src/components/ThemeSelect.js +5 -1
- package/docs/src/components/ThemeSwitcher.js +1 -0
- package/docs/src/components/Toast.js +1 -1
- package/docs/utils/context.html +4 -3
- package/docs/utils/cookie.html +4 -3
- package/docs/utils/debounce.html +4 -3
- package/docs/utils/drag.html +4 -3
- package/docs/utils/elevation.html +156 -0
- package/docs/utils/formatTimestamp.html +4 -3
- package/docs/utils/object.html +4 -3
- package/docs/utils/propConverters.html +4 -3
- package/docs/utils/string.html +4 -3
- package/docs/utils/theme.html +4 -3
- package/docs/utils/toTitleCase.html +4 -3
- package/docs/utils/type.html +4 -3
- package/docs/utils/wait.html +4 -3
- package/llm.txt.md +247 -0
- package/package.json +3 -4
- package/src/components/Aside.js +726 -0
- package/src/components/Dialog.js +1 -1
- package/src/components/Dropdown.js +1 -1
- package/src/components/Main.js +34 -30
- package/src/components/Nav.js +53 -0
- package/src/components/PhotoViewer.js +1 -1
- package/src/components/ShadowComponent.js +1 -1
- package/src/components/ThemeSelect.js +8 -0
- package/src/components/ThemeSwitcher.js +1 -0
- package/src/components/Toast.js +1 -1
- package/tests/bin/get_icon.node-test.js +26 -0
- package/tests/bin/highlight_code.node-test.js +108 -0
- package/tests/bin/list_icons.node-test.js +26 -0
- package/tests/components/Aside.browser-test.js +778 -0
- package/tests/components/Main.browser-test.js +115 -283
- package/dist/components/SideMenu.js +0 -97
- package/dist/components/SidePanel.js +0 -236
- package/docs/components/side-menu.html +0 -189
- package/docs/components/side-panel-basic.html +0 -44
- package/docs/components/side-panel-dual.html +0 -70
- package/docs/components/side-panel-menu.html +0 -50
- package/docs/components/side-panel-persistent.html +0 -90
- package/docs/components/side-panel-scroll.html +0 -176
- package/docs/components/side-panel.html +0 -245
- package/docs/src/components/SideMenu.js +0 -97
- package/docs/src/components/SidePanel.js +0 -236
- package/scripts/update-kempo-css.js +0 -53
- package/src/components/SideMenu.js +0 -178
- package/src/components/SidePanel.js +0 -513
- package/tests/components/SideMenu.browser-test.js +0 -667
- package/tests/components/SidePanel.browser-test.js +0 -520
- package/tools/highlight.js +0 -51
|
@@ -0,0 +1,326 @@
|
|
|
1
|
+
import ShadowComponent from"./ShadowComponent.js";import{html,css,nothing}from"../lit-all.min.js";import{boolTrueFalse}from"../utils/propConverters.js";import"./FocusCapture.js";import"./Icon.js";export default class Aside extends ShadowComponent{static properties={state:{type:String,reflect:!0},side:{type:String,reflect:!0},main:{type:String,reflect:!0},overlayClose:{type:Boolean,reflect:!0,attribute:"overlay-close",converter:boolTrueFalse},escClose:{type:Boolean,reflect:!0,attribute:"esc-close",converter:boolTrueFalse}};constructor(){super(),this.state="offscreen",this.side="left",this.main="overlay",this.overlayClose=!0,this.escClose=!0}overlayClick=()=>{this.overlayClose&&this.hide()};handleKeyDown=e=>{this.escClose&&"Escape"===e.key&&this.hide()};updated(e){if(super.updated(e),e.has("state")){const t=e.get("state");"offscreen"===this.state||"offscreen"!==t&&void 0!==t?"offscreen"===this.state&&void 0!==t&&"offscreen"!==t&&document.removeEventListener("keydown",this.handleKeyDown):document.addEventListener("keydown",this.handleKeyDown),"overlay"===this.main&&("expanded"===this.state?document.body.classList.add("no-scroll"):document.body.classList.remove("no-scroll"));const s="offscreen"===this.state?0:this.getTargetWidth(this.state),a={aside:this,state:this.state,main:this.main,width:s};this.dispatchEvent(new CustomEvent("aside_state_change",{detail:a})),window.dispatchEvent(new CustomEvent("aside_state_change",{detail:a})),this.inert="offscreen"===this.state}}disconnectedCallback(){super.disconnectedCallback(),document.removeEventListener("keydown",this.handleKeyDown),document.body.classList.remove("no-scroll");const e={aside:this,state:"offscreen",main:this.main,width:0};this.dispatchEvent(new CustomEvent("aside_state_change",{detail:e})),window.dispatchEvent(new CustomEvent("aside_state_change",{detail:e}))}expand=()=>this.state="expanded";collapse=()=>this.state="collapsed";hide=()=>this.state="offscreen";toggle=()=>{this.state="expanded"===this.state?"offscreen":"expanded"};getTargetWidth(e){const t=parseFloat(getComputedStyle(document.documentElement).fontSize),s="collapsed"===e?"--collapsed-width":"--width",a=getComputedStyle(this).getPropertyValue(s).trim();return(a?parseFloat(a):"collapsed"===e?3.5:20)*t}render(){const e=html`<aside><slot></slot></aside>`;return"overlay"===this.main?html`
|
|
2
|
+
<k-focus-capture>
|
|
3
|
+
<div id="container">
|
|
4
|
+
<button id="overlay-btn" @click=${this.overlayClick}>
|
|
5
|
+
<div id="overlay-x"><k-icon name="close"></k-icon></div>
|
|
6
|
+
</button>
|
|
7
|
+
${e}
|
|
8
|
+
</div>
|
|
9
|
+
</k-focus-capture>
|
|
10
|
+
`:e}static styles=css`
|
|
11
|
+
:host {
|
|
12
|
+
--bg: var(--c_bg);
|
|
13
|
+
--border: var(--c_border);
|
|
14
|
+
--width: 20rem;
|
|
15
|
+
--collapsed-width: 3.5rem;
|
|
16
|
+
position: fixed;
|
|
17
|
+
top: 0;
|
|
18
|
+
height: 100vh;
|
|
19
|
+
pointer-events: none;
|
|
20
|
+
}
|
|
21
|
+
:host([main="push"]) {
|
|
22
|
+
left: 0;
|
|
23
|
+
z-index: 30;
|
|
24
|
+
transition: width var(--animation_ms, 256ms);
|
|
25
|
+
}
|
|
26
|
+
:host([main="push"][side="right"]) {
|
|
27
|
+
left: auto;
|
|
28
|
+
right: 0;
|
|
29
|
+
}
|
|
30
|
+
:host([main="push"][state="collapsed"]) {
|
|
31
|
+
width: var(--collapsed-width);
|
|
32
|
+
pointer-events: auto;
|
|
33
|
+
}
|
|
34
|
+
:host([main="push"][state="expanded"]) {
|
|
35
|
+
width: var(--width);
|
|
36
|
+
pointer-events: auto;
|
|
37
|
+
}
|
|
38
|
+
:host([main="overlay"]) {
|
|
39
|
+
left: 0;
|
|
40
|
+
width: 100vw;
|
|
41
|
+
max-width: 100%;
|
|
42
|
+
z-index: 60;
|
|
43
|
+
overflow: hidden;
|
|
44
|
+
}
|
|
45
|
+
:host([main="overlay"][state="expanded"]) {
|
|
46
|
+
pointer-events: auto;
|
|
47
|
+
}
|
|
48
|
+
k-focus-capture {
|
|
49
|
+
width: 100%;
|
|
50
|
+
height: 100%;
|
|
51
|
+
}
|
|
52
|
+
#container {
|
|
53
|
+
position: relative;
|
|
54
|
+
width: 100%;
|
|
55
|
+
height: 100%;
|
|
56
|
+
}
|
|
57
|
+
#overlay-btn {
|
|
58
|
+
position: absolute;
|
|
59
|
+
width: 100%;
|
|
60
|
+
height: 100%;
|
|
61
|
+
left: 0;
|
|
62
|
+
top: 0;
|
|
63
|
+
background: var(--overlay, rgba(0, 0, 0, 0.5));
|
|
64
|
+
border: none;
|
|
65
|
+
padding: 0;
|
|
66
|
+
cursor: pointer;
|
|
67
|
+
z-index: 1;
|
|
68
|
+
opacity: 0;
|
|
69
|
+
transition: opacity var(--animation_ms, 256ms);
|
|
70
|
+
}
|
|
71
|
+
:host([state="expanded"]) #overlay-btn {
|
|
72
|
+
opacity: 1;
|
|
73
|
+
}
|
|
74
|
+
#overlay-x {
|
|
75
|
+
position: absolute;
|
|
76
|
+
top: var(--spacer_h);
|
|
77
|
+
right: var(--spacer_h);
|
|
78
|
+
font-size: 1.75rem;
|
|
79
|
+
cursor: pointer;
|
|
80
|
+
color: var(--tc_light);
|
|
81
|
+
}
|
|
82
|
+
:host([overlay-close="false"]) #overlay-x {
|
|
83
|
+
display: none;
|
|
84
|
+
}
|
|
85
|
+
:host([overlay-close="false"]) #overlay-btn {
|
|
86
|
+
cursor: default;
|
|
87
|
+
}
|
|
88
|
+
:host([side="right"]) #overlay-x {
|
|
89
|
+
right: auto;
|
|
90
|
+
left: var(--spacer_h);
|
|
91
|
+
}
|
|
92
|
+
aside {
|
|
93
|
+
position: fixed;
|
|
94
|
+
top: 0;
|
|
95
|
+
left: 0;
|
|
96
|
+
height: 100vh;
|
|
97
|
+
overflow-y: auto;
|
|
98
|
+
overflow-x: hidden;
|
|
99
|
+
background: var(--bg);
|
|
100
|
+
padding: var(--aside_padding, var(--spacer));
|
|
101
|
+
z-index: 2;
|
|
102
|
+
box-sizing: border-box;
|
|
103
|
+
border-right: 1px solid var(--border);
|
|
104
|
+
transition: width var(--animation_ms, 256ms), transform var(--animation_ms, 256ms);
|
|
105
|
+
}
|
|
106
|
+
:host([side="right"]) aside {
|
|
107
|
+
left: auto;
|
|
108
|
+
right: 0;
|
|
109
|
+
border-right: none;
|
|
110
|
+
border-left: 1px solid var(--border);
|
|
111
|
+
}
|
|
112
|
+
:host([main="push"]) aside {
|
|
113
|
+
position: absolute;
|
|
114
|
+
width: var(--width);
|
|
115
|
+
transform: translateX(-100%);
|
|
116
|
+
}
|
|
117
|
+
:host([main="push"][side="right"]) aside {
|
|
118
|
+
transform: translateX(100%);
|
|
119
|
+
}
|
|
120
|
+
:host([main="push"][state="collapsed"]) aside {
|
|
121
|
+
width: var(--collapsed-width);
|
|
122
|
+
transform: translateX(0);
|
|
123
|
+
}
|
|
124
|
+
:host([main="push"][state="expanded"]) aside {
|
|
125
|
+
transform: translateX(0);
|
|
126
|
+
}
|
|
127
|
+
:host([main="overlay"]) aside {
|
|
128
|
+
width: var(--width);
|
|
129
|
+
max-width: calc(100vw - 6rem);
|
|
130
|
+
border: none;
|
|
131
|
+
transform: translateX(-100%);
|
|
132
|
+
}
|
|
133
|
+
:host([main="overlay"][state="expanded"]) aside {
|
|
134
|
+
transform: translateX(0);
|
|
135
|
+
}
|
|
136
|
+
:host([main="overlay"][side="right"]) aside {
|
|
137
|
+
transform: translateX(100%);
|
|
138
|
+
}
|
|
139
|
+
:host([main="overlay"][side="right"][state="expanded"]) aside {
|
|
140
|
+
transform: translateX(0);
|
|
141
|
+
}
|
|
142
|
+
`}customElements.define("k-aside",Aside);class AsideItem extends ShadowComponent{static properties={icon:{type:String},href:{type:String},active:{type:Boolean,reflect:!0},collapsed:{type:Boolean,reflect:!0},"no-expand":{type:Boolean,attribute:"no-expand"},"hide-when-collapsed":{type:Boolean,attribute:"hide-when-collapsed"}};constructor(){super(),this.icon="",this.href="#",this.active=!1,this.collapsed=!1,this["no-expand"]=!1,this["hide-when-collapsed"]=!1}connectedCallback(){super.connectedCallback(),this.aside=this.closest("k-aside"),this.aside&&(this.collapsed="collapsed"===this.aside.state,this.aside.addEventListener("aside_state_change",this.handleStateChange))}disconnectedCallback(){super.disconnectedCallback(),this.aside&&this.aside.removeEventListener("aside_state_change",this.handleStateChange)}handleStateChange=e=>{const{state:t}=e.detail;"collapsed"===t?this.collapsed=!0:"expanded"===t&&(this.collapsed=!1)};handleClick=e=>{this.collapsed&&!this["no-expand"]&&this.aside&&(e.preventDefault(),this.aside.expand())};render(){return html`
|
|
143
|
+
<a href="${this.href}" class="item ${this.active?"active bg-primary":""}" @click=${this.handleClick}>
|
|
144
|
+
${this.icon?html`<k-icon name="${this.icon}"></k-icon>`:this.collapsed?html`<k-icon name="dot"></k-icon>`:nothing}
|
|
145
|
+
${this.collapsed?nothing:html`<span class="label"><slot></slot></span>`}
|
|
146
|
+
</a>
|
|
147
|
+
`}static styles=css`
|
|
148
|
+
:host {
|
|
149
|
+
display: block;
|
|
150
|
+
}
|
|
151
|
+
:host([collapsed][hide-when-collapsed]) {
|
|
152
|
+
display: none;
|
|
153
|
+
}
|
|
154
|
+
.item {
|
|
155
|
+
display: flex;
|
|
156
|
+
align-items: center;
|
|
157
|
+
gap: var(--spacer_h);
|
|
158
|
+
padding: var(--spacer_h);
|
|
159
|
+
color: var(--tc);
|
|
160
|
+
text-decoration: none;
|
|
161
|
+
border-radius: var(--radius);
|
|
162
|
+
margin: 0 var(--spacer_h);
|
|
163
|
+
transition: background var(--animation_ms), color var(--animation_ms);
|
|
164
|
+
white-space: nowrap;
|
|
165
|
+
}
|
|
166
|
+
.item:hover {
|
|
167
|
+
background: var(--c_bg_hover);
|
|
168
|
+
}
|
|
169
|
+
.item.active {
|
|
170
|
+
color: var(--tc_on_primary);
|
|
171
|
+
}
|
|
172
|
+
.item.active:hover {
|
|
173
|
+
background: var(--c_primary);
|
|
174
|
+
filter: brightness(1.1);
|
|
175
|
+
}
|
|
176
|
+
k-icon {
|
|
177
|
+
flex-shrink: 0;
|
|
178
|
+
}
|
|
179
|
+
.label {
|
|
180
|
+
min-width: 0;
|
|
181
|
+
overflow: hidden;
|
|
182
|
+
text-overflow: ellipsis;
|
|
183
|
+
}
|
|
184
|
+
`}class AsideLabel extends ShadowComponent{static properties={collapsed:{type:Boolean,reflect:!0}};constructor(){super(),this.collapsed=!1}connectedCallback(){super.connectedCallback(),this.aside=this.closest("k-aside"),this.aside&&(this.collapsed="collapsed"===this.aside.state,this.aside.addEventListener("aside_state_change",this.handleStateChange))}disconnectedCallback(){super.disconnectedCallback(),this.aside&&this.aside.removeEventListener("aside_state_change",this.handleStateChange)}handleStateChange=e=>{const{state:t}=e.detail;"collapsed"===t?this.collapsed=!0:"expanded"===t&&(this.collapsed=!1)};render(){return this.collapsed?html`<hr>`:html`<div class="label"><slot></slot></div>`}static styles=css`
|
|
185
|
+
:host {
|
|
186
|
+
display: block;
|
|
187
|
+
margin: var(--spacer_h) 0;
|
|
188
|
+
}
|
|
189
|
+
:host([collapsed]) {
|
|
190
|
+
margin: 0 var(--spacer_h);
|
|
191
|
+
align-self: stretch;
|
|
192
|
+
}
|
|
193
|
+
.label {
|
|
194
|
+
padding: 0 var(--spacer);
|
|
195
|
+
font-size: 0.75rem;
|
|
196
|
+
font-weight: 600;
|
|
197
|
+
text-transform: uppercase;
|
|
198
|
+
color: var(--c_text_muted);
|
|
199
|
+
letter-spacing: 0.05em;
|
|
200
|
+
}
|
|
201
|
+
hr {
|
|
202
|
+
border: none;
|
|
203
|
+
border-top: 1px solid var(--c_border);
|
|
204
|
+
margin: var(--spacer_h) var(--spacer);
|
|
205
|
+
}
|
|
206
|
+
:host([collapsed]) hr {
|
|
207
|
+
margin: var(--spacer_h) 0;
|
|
208
|
+
}
|
|
209
|
+
`}class AsideMenu extends ShadowComponent{static properties={icon:{type:String},label:{type:String},open:{type:Boolean,reflect:!0},collapsed:{type:Boolean,reflect:!0},"no-expand":{type:Boolean,attribute:"no-expand"},"hide-when-collapsed":{type:Boolean,attribute:"hide-when-collapsed"}};constructor(){super(),this.icon="",this.label="",this.open=!1,this.collapsed=!1,this["no-expand"]=!1,this["hide-when-collapsed"]=!1}connectedCallback(){super.connectedCallback(),this.aside=this.closest("k-aside"),this.aside&&(this.collapsed="collapsed"===this.aside.state,this.aside.addEventListener("aside_state_change",this.handleStateChange))}disconnectedCallback(){super.disconnectedCallback(),this.aside&&this.aside.removeEventListener("aside_state_change",this.handleStateChange)}handleStateChange=e=>{const{state:t}=e.detail;"collapsed"===t?(this.collapsed=!0,this.open=!1):"expanded"===t&&(this.collapsed=!1)};toggleMenu=()=>{this.collapsed&&!this["no-expand"]&&this.aside?this.aside.expand():this.collapsed||(this.open=!this.open)};render(){return html`
|
|
210
|
+
<div class="menu-container">
|
|
211
|
+
<button class="no-btn menu-header ${this.open?"open":""}" @click=${this.toggleMenu}>
|
|
212
|
+
${this.icon?html`<k-icon name="${this.icon}"></k-icon>`:this.collapsed?html`<k-icon name="dot"></k-icon>`:nothing}
|
|
213
|
+
${this.collapsed?nothing:html`<span class="label">${this.label}</span>`}
|
|
214
|
+
${this.collapsed?nothing:html`<k-icon class="chevron" name="chevron" direction="${this.open?"down":"right"}"></k-icon>`}
|
|
215
|
+
</button>
|
|
216
|
+
<div class="menu-content ${this.open&&!this.collapsed?"open":""}">
|
|
217
|
+
<slot></slot>
|
|
218
|
+
</div>
|
|
219
|
+
</div>
|
|
220
|
+
`}static styles=css`
|
|
221
|
+
:host {
|
|
222
|
+
display: block;
|
|
223
|
+
}
|
|
224
|
+
:host([collapsed][hide-when-collapsed]) {
|
|
225
|
+
display: none;
|
|
226
|
+
}
|
|
227
|
+
.menu-header {
|
|
228
|
+
display: flex !important;
|
|
229
|
+
align-items: center;
|
|
230
|
+
gap: var(--spacer_h);
|
|
231
|
+
padding: var(--spacer_h) !important;
|
|
232
|
+
color: var(--tc);
|
|
233
|
+
background: transparent;
|
|
234
|
+
border: none;
|
|
235
|
+
border-radius: var(--radius);
|
|
236
|
+
margin: 0 var(--spacer_h);
|
|
237
|
+
width: calc(100% - var(--spacer));
|
|
238
|
+
cursor: pointer;
|
|
239
|
+
text-align: left;
|
|
240
|
+
white-space: nowrap;
|
|
241
|
+
transition: background var(--animation_ms);
|
|
242
|
+
}
|
|
243
|
+
:host([collapsed]) .menu-header {
|
|
244
|
+
width: auto;
|
|
245
|
+
}
|
|
246
|
+
.menu-header:hover {
|
|
247
|
+
background: var(--c_bg_hover);
|
|
248
|
+
}
|
|
249
|
+
k-icon {
|
|
250
|
+
flex-shrink: 0;
|
|
251
|
+
}
|
|
252
|
+
.label {
|
|
253
|
+
flex: 1;
|
|
254
|
+
min-width: 0;
|
|
255
|
+
overflow: hidden;
|
|
256
|
+
text-overflow: ellipsis;
|
|
257
|
+
}
|
|
258
|
+
.chevron {
|
|
259
|
+
transition: transform var(--animation_ms);
|
|
260
|
+
}
|
|
261
|
+
.menu-content {
|
|
262
|
+
max-height: 0;
|
|
263
|
+
overflow: hidden;
|
|
264
|
+
transition: max-height var(--animation_ms);
|
|
265
|
+
padding-left: calc(var(--spacer_h) * 2);
|
|
266
|
+
}
|
|
267
|
+
:host([collapsed]) .menu-content {
|
|
268
|
+
padding-left: 0;
|
|
269
|
+
}
|
|
270
|
+
.menu-content.open {
|
|
271
|
+
max-height: 500px;
|
|
272
|
+
}
|
|
273
|
+
::slotted(*) {
|
|
274
|
+
margin: 0.25rem 0;
|
|
275
|
+
}
|
|
276
|
+
`}class AsideSpacer extends ShadowComponent{render(){return html`<div></div>`}static styles=css`
|
|
277
|
+
:host {
|
|
278
|
+
display: block;
|
|
279
|
+
flex: 1;
|
|
280
|
+
}
|
|
281
|
+
`}class AsideToggle extends ShadowComponent{static properties={collapsed:{type:Boolean,reflect:!0},direction:{type:String}};constructor(){super(),this.collapsed=!1,this.direction="left"}connectedCallback(){super.connectedCallback(),this.aside=this.closest("k-aside"),this.aside&&(this.collapsed="collapsed"===this.aside.state,this.updateDirection(),this.aside.addEventListener("aside_state_change",this.handleStateChange))}disconnectedCallback(){super.disconnectedCallback(),this.aside&&this.aside.removeEventListener("aside_state_change",this.handleStateChange)}handleStateChange=e=>{const{state:t}=e.detail;"collapsed"===t?this.collapsed=!0:"expanded"===t&&(this.collapsed=!1),this.updateDirection()};handleClick=()=>{this.aside&&(this.aside.state="collapsed"===this.aside.state?"expanded":"collapsed")};updateDirection=()=>{const e="right"===this.aside?.side;this.direction=this.collapsed!==e?"right":"left"};render(){return html`
|
|
282
|
+
<div id="header">
|
|
283
|
+
<slot></slot>
|
|
284
|
+
<button id="toggle" @click=${this.handleClick}>
|
|
285
|
+
<k-icon name="arrow-line" direction=${this.direction}></k-icon>
|
|
286
|
+
</button>
|
|
287
|
+
</div>
|
|
288
|
+
`}static styles=css`
|
|
289
|
+
:host {
|
|
290
|
+
display: block;
|
|
291
|
+
}
|
|
292
|
+
#header {
|
|
293
|
+
display: flex;
|
|
294
|
+
align-items: center;
|
|
295
|
+
justify-content: flex-end;
|
|
296
|
+
gap: var(--spacer_h);
|
|
297
|
+
padding: var(--spacer_h);
|
|
298
|
+
border-bottom: 1px solid var(--c_border);
|
|
299
|
+
flex-shrink: 0;
|
|
300
|
+
}
|
|
301
|
+
::slotted(*) {
|
|
302
|
+
margin-right: auto;
|
|
303
|
+
flex: 1;
|
|
304
|
+
min-width: 0;
|
|
305
|
+
}
|
|
306
|
+
:host([collapsed]) ::slotted(*) {
|
|
307
|
+
display: none;
|
|
308
|
+
}
|
|
309
|
+
#toggle {
|
|
310
|
+
flex-shrink: 0;
|
|
311
|
+
width: 2rem;
|
|
312
|
+
height: 2rem;
|
|
313
|
+
border: none;
|
|
314
|
+
background: transparent;
|
|
315
|
+
color: var(--c_text);
|
|
316
|
+
cursor: pointer;
|
|
317
|
+
display: flex;
|
|
318
|
+
align-items: center;
|
|
319
|
+
justify-content: center;
|
|
320
|
+
border-radius: var(--radius);
|
|
321
|
+
padding: 0;
|
|
322
|
+
}
|
|
323
|
+
#toggle:hover {
|
|
324
|
+
background: var(--c_bg_hover);
|
|
325
|
+
}
|
|
326
|
+
`}customElements.define("k-aside-item",AsideItem),customElements.define("k-aside-label",AsideLabel),customElements.define("k-aside-menu",AsideMenu),customElements.define("k-aside-spacer",AsideSpacer),customElements.define("k-aside-toggle",AsideToggle);
|
|
@@ -11,7 +11,7 @@ import{html,css}from"../lit-all.min.js";import ShadowComponent from"./ShadowComp
|
|
|
11
11
|
display: none;
|
|
12
12
|
position: fixed;
|
|
13
13
|
position-anchor: --dropdown-trigger;
|
|
14
|
-
z-index:
|
|
14
|
+
z-index: 70;
|
|
15
15
|
min-width: anchor-size(width);
|
|
16
16
|
background: var(--c_bg);
|
|
17
17
|
border: 1px solid var(--c_border);
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import ShadowComponent from"./ShadowComponent.js";import{html,css}from"../lit-all.min.js";export default class Main extends ShadowComponent{
|
|
1
|
+
import ShadowComponent from"./ShadowComponent.js";import{html,css}from"../lit-all.min.js";export default class Main extends ShadowComponent{constructor(){super(),this.widthMap=new Map}connectedCallback(){super.connectedCallback(),window.addEventListener("aside_state_change",this.handleAsideChange),document.querySelectorAll('k-aside[main="push"]').forEach(t=>{if("offscreen"!==t.state){const e=t.getTargetWidth(t.state);e>0&&this.widthMap.set(t,{side:t.side||"left",width:e})}}),this.recalculate()}disconnectedCallback(){super.disconnectedCallback(),window.removeEventListener("aside_state_change",this.handleAsideChange)}handleAsideChange=t=>{const{aside:e,state:a,main:i,width:s}=t.detail;"overlay"===i||"offscreen"===a?this.widthMap.delete(e):this.widthMap.set(e,{side:e.side||"left",width:s}),this.recalculate()};recalculate=()=>{let t=0,e=0;for(const[,{side:a,width:i}]of this.widthMap)"right"===a?e=Math.max(e,i):t=Math.max(t,i);this.style.setProperty("--left-panel-width",`${t}px`),this.style.setProperty("--right-panel-width",`${e}px`)};render(){return html`
|
|
2
2
|
<main>
|
|
3
3
|
<slot></slot>
|
|
4
4
|
</main>
|
|
@@ -17,4 +17,4 @@ import ShadowComponent from"./ShadowComponent.js";import{html,css}from"../lit-al
|
|
|
17
17
|
padding-left: var(--spacer);
|
|
18
18
|
padding-right: var(--spacer);
|
|
19
19
|
}
|
|
20
|
-
|
|
20
|
+
`}window.customElements.define("k-main",Main);
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import{html,css}from"../lit-all.min.js";import ShadowComponent from"./ShadowComponent.js";export default class Nav extends ShadowComponent{static properties={fixed:{type:Boolean,reflect:!0}};constructor(){super(),this.fixed=!1}render(){return html`<nav><slot></slot></nav>`}static styles=css`
|
|
2
|
+
:host {
|
|
3
|
+
display: block;
|
|
4
|
+
}
|
|
5
|
+
:host([fixed]) {
|
|
6
|
+
position: fixed;
|
|
7
|
+
top: 0;
|
|
8
|
+
left: 0;
|
|
9
|
+
right: 0;
|
|
10
|
+
z-index: 50;
|
|
11
|
+
}
|
|
12
|
+
nav {
|
|
13
|
+
display: flex;
|
|
14
|
+
align-items: center;
|
|
15
|
+
width: 100%;
|
|
16
|
+
}
|
|
17
|
+
::slotted(a) {
|
|
18
|
+
display: inline-block;
|
|
19
|
+
padding: var(--spacer);
|
|
20
|
+
text-decoration: none !important;
|
|
21
|
+
}
|
|
22
|
+
::slotted(.link) {
|
|
23
|
+
display: inline-block;
|
|
24
|
+
padding: var(--spacer) !important;
|
|
25
|
+
text-decoration: none !important;
|
|
26
|
+
}
|
|
27
|
+
`}customElements.define("k-nav",Nav);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{LitElement}from"../lit-all.min.js";export default class ShadowComponent extends LitElement{#e;connectedCallback(){super.connectedCallback(),this.#e=new MutationObserver(()=>{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
|
+
import{LitElement}from"../lit-all.min.js";export default class ShadowComponent extends LitElement{#e;connectedCallback(){super.connectedCallback(),this.#e=new MutationObserver(()=>{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@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}}
|
|
@@ -5,4 +5,8 @@ import ShadowComponent from"./ShadowComponent.js";import{html,css}from"../lit-al
|
|
|
5
5
|
<option value="dark">Dark</option>
|
|
6
6
|
<option value="auto">System Default</option>
|
|
7
7
|
</select>
|
|
8
|
-
`}static
|
|
8
|
+
`}static styles=css`
|
|
9
|
+
:host {
|
|
10
|
+
display: block;
|
|
11
|
+
}
|
|
12
|
+
`;static setTheme(e){theme.set(e)}static getCurrentTheme(){return theme.get()}static getCalculatedCurrentTheme(){return theme.getCalculated()}}customElements.define("k-theme-select",ThemeSelect);
|
|
@@ -19,5 +19,6 @@ import ShadowComponent from"./ShadowComponent.js";import{html,css}from"../lit-al
|
|
|
19
19
|
}
|
|
20
20
|
button.no-btn {
|
|
21
21
|
padding: var(--padding);
|
|
22
|
+
border-radius: var(--radius);
|
|
22
23
|
}
|
|
23
24
|
`;static setTheme(e){theme.set(e)}static getCurrentTheme(){return theme.get()}static getCalculatedCurrentTheme(){return theme.getCalculated()}}customElements.define("k-theme-switcher",ThemeSwitcher);
|
|
@@ -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:
|
|
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);
|
package/docs/utils/context.html
CHANGED
|
@@ -7,14 +7,14 @@
|
|
|
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@
|
|
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>
|
|
14
14
|
</head>
|
|
15
15
|
<body>
|
|
16
16
|
<k-import src="../nav-1.inc.html"></k-import>
|
|
17
|
-
<main>
|
|
17
|
+
<k-main>
|
|
18
18
|
<h1>Context Utility</h1>
|
|
19
19
|
|
|
20
20
|
<k-accordion persistent-id="toc" class="b r mb">
|
|
@@ -129,9 +129,10 @@ counterContext.subscribe(<span class="hljs-function">(<span class="hljs-params">
|
|
|
129
129
|
</div>
|
|
130
130
|
</div>
|
|
131
131
|
|
|
132
|
-
</main>
|
|
132
|
+
</k-main>
|
|
133
133
|
<div style="height:33vh"></div>
|
|
134
134
|
<script type="module" src="../src/components/Import.js"></script>
|
|
135
|
+
<script type="module" src="../src/components/Main.js"></script>
|
|
135
136
|
<script type="module" src="../src/components/Accordion.js"></script>
|
|
136
137
|
<script type="module" src="../src/components/Card.js"></script>
|
|
137
138
|
<script type="module">
|
package/docs/utils/cookie.html
CHANGED
|
@@ -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@
|
|
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
|
</head>
|
|
16
16
|
<body>
|
|
17
17
|
<k-import src="../nav-1.inc.html"></k-import>
|
|
18
|
-
<main>
|
|
18
|
+
<k-main>
|
|
19
19
|
<h1>Cookie Utilities</h1>
|
|
20
20
|
|
|
21
21
|
<k-accordion persistent-id="toc" class="b r mb">
|
|
@@ -105,9 +105,10 @@ document.getElementById(<span class="hljs-string">'delete-btn'</span>).addEventL
|
|
|
105
105
|
<p>Deletes a cookie by setting its expiration to a past date.</p>
|
|
106
106
|
<pre><code class="hljs javascript"><span class="hljs-keyword">import</span> { deleteCookie } <span class="hljs-keyword">from</span> <span class="hljs-string">'../src/utils/cookie.js'</span>;<br /><br />deleteCookie(<span class="hljs-string">'userId'</span>);</code></pre>
|
|
107
107
|
|
|
108
|
-
</main>
|
|
108
|
+
</k-main>
|
|
109
109
|
<div style="height:33vh"></div>
|
|
110
110
|
<script type="module" src="../src/components/Import.js"></script>
|
|
111
|
+
<script type="module" src="../src/components/Main.js"></script>
|
|
111
112
|
<script type="module" src="../src/components/Accordion.js"></script>
|
|
112
113
|
<script type="module" src="../src/components/Card.js"></script>
|
|
113
114
|
<script type="module">
|
package/docs/utils/debounce.html
CHANGED
|
@@ -7,14 +7,14 @@
|
|
|
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@
|
|
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>
|
|
14
14
|
</head>
|
|
15
15
|
<body>
|
|
16
16
|
<k-import src="../nav-1.inc.html"></k-import>
|
|
17
|
-
<main>
|
|
17
|
+
<k-main>
|
|
18
18
|
<h1>debounce</h1>
|
|
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>
|
|
@@ -50,9 +50,10 @@
|
|
|
50
50
|
<h4>Window Resize Handler</h4>
|
|
51
51
|
<pre><code class="hljs javascript"><span class="hljs-keyword">const</span> debouncedResize = debounce(<span class="hljs-function"><span class="hljs-params">()</span> =></span> {<br /> <span class="hljs-comment">// Expensive layout calculations</span><br /> recalculateLayout();<br />}, <span class="hljs-number">250</span>);<br /><br /><span class="hljs-built_in">window</span>.addEventListener(<span class="hljs-string">'resize'</span>, debouncedResize);</code></pre>
|
|
52
52
|
|
|
53
|
-
</main>
|
|
53
|
+
</k-main>
|
|
54
54
|
<div style="height:33vh"></div>
|
|
55
55
|
<script type="module" src="../src/components/Import.js"></script>
|
|
56
|
+
<script type="module" src="../src/components/Main.js"></script>
|
|
56
57
|
<script type="module" src="../src/components/Accordion.js"></script>
|
|
57
58
|
</body>
|
|
58
59
|
</html>
|
package/docs/utils/drag.html
CHANGED
|
@@ -7,14 +7,14 @@
|
|
|
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@
|
|
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>
|
|
14
14
|
</head>
|
|
15
15
|
<body>
|
|
16
16
|
<k-import src="../nav-1.inc.html"></k-import>
|
|
17
|
-
<main>
|
|
17
|
+
<k-main>
|
|
18
18
|
<h1>drag</h1>
|
|
19
19
|
|
|
20
20
|
<k-accordion persistent-id="toc" class="b r mb">
|
|
@@ -72,9 +72,10 @@
|
|
|
72
72
|
<h4>Component with Cleanup</h4>
|
|
73
73
|
<pre><code class="hljs javascript"><span class="hljs-keyword">import</span> ShadowComponent <span class="hljs-keyword">from</span> <span class="hljs-string">'./ShadowComponent.js'</span>;<br /><span class="hljs-keyword">import</span> drag <span class="hljs-keyword">from</span> <span class="hljs-string">'./utils/drag.js'</span>;<br /><br /><span class="hljs-keyword">class</span> <span class="hljs-title class_">DraggableComponent</span> <span class="hljs-keyword">extends</span> <span class="hljs-title class_">ShadowComponent</span> {<br /> <span class="hljs-title function_">constructor</span>() {<br /> <span class="hljs-variable language_">super</span>();<br /> <span class="hljs-variable language_">this</span>.cleanupDrag = <span class="hljs-literal">null</span>;<br /> }<br /><br /> <span class="hljs-title function_">firstUpdated</span>() {<br /> <span class="hljs-keyword">const</span> handle = <span class="hljs-variable language_">this</span>.shadowRoot.<span class="hljs-title function_">querySelector</span>(<span class="hljs-string">'.drag-handle'</span>);<br /> <span class="hljs-variable language_">this</span>.cleanupDrag = <span class="hljs-title function_">drag</span>({<br /> <span class="hljs-attr">element</span>: handle,<br /> <span class="hljs-attr">moveCallback</span>: <span class="hljs-function">(<span class="hljs-params">diff</span>) =></span> {<br /> <span class="hljs-variable language_">this</span>.style.transform = <span class="hljs-string">`translate(<span class="hljs-subst">${diff.x}</span>px, <span class="hljs-subst">${diff.y}</span>px)`</span>;<br /> }<br /> });<br /> }<br /><br /> <span class="hljs-title function_">disconnectedCallback</span>() {<br /> <span class="hljs-variable language_">super</span>.<span class="hljs-title function_">disconnectedCallback</span>();<br /> <span class="hljs-keyword">if</span>(<span class="hljs-variable language_">this</span>.cleanupDrag) {<br /> <span class="hljs-variable language_">this</span>.<span class="hljs-title function_">cleanupDrag</span>();<br /> <span class="hljs-variable language_">this</span>.cleanupDrag = <span class="hljs-literal">null</span>;<br /> }<br /> }<br />}</code></pre>
|
|
74
74
|
|
|
75
|
-
</main>
|
|
75
|
+
</k-main>
|
|
76
76
|
<div style="height:33vh"></div>
|
|
77
77
|
<script type="module" src="../src/components/Import.js"></script>
|
|
78
|
+
<script type="module" src="../src/components/Main.js"></script>
|
|
78
79
|
<script type="module" src="../src/components/Accordion.js"></script>
|
|
79
80
|
</body>
|
|
80
81
|
</html>
|