@benev/web 0.1.0-10
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/LICENSE +22 -0
- package/README.md +67 -0
- package/package.json +52 -0
- package/s/assets/b.png +0 -0
- package/s/assets/b.png.ts +3 -0
- package/s/bconfig.ts +9 -0
- package/s/css/benev.csstext.ts +41 -0
- package/s/css/demo.css +19 -0
- package/s/css/parts/common.csstext.ts +210 -0
- package/s/css/parts/core.csstext.ts +56 -0
- package/s/css/parts/page.csstext.ts +24 -0
- package/s/css/parts/vars.csstext.ts +40 -0
- package/s/css/theme.css.ts +9 -0
- package/s/dom/account/account.ts +7 -0
- package/s/dom/account/style.css.ts +6 -0
- package/s/dom/account/view.ts +16 -0
- package/s/dom/footer/style.css.ts +6 -0
- package/s/dom/footer/view.ts +13 -0
- package/s/dom/header/style.css.ts +40 -0
- package/s/dom/header/view.ts +25 -0
- package/s/dom/loader/loader.ts +77 -0
- package/s/dom/loader/style.css.ts +54 -0
- package/s/dom/loader/view.ts +23 -0
- package/s/dom/menu/style.css.ts +90 -0
- package/s/dom/menu/utils/click-backdrop.ts +8 -0
- package/s/dom/menu/utils/on-keypress.ts +22 -0
- package/s/dom/menu/utils/use-after-first-render.ts +9 -0
- package/s/dom/menu/view.ts +32 -0
- package/s/dom/tools/shadow-duplex.ts +17 -0
- package/s/index-ssg.ts +7 -0
- package/s/index.html.ts +48 -0
- package/s/index.ts +15 -0
- package/s/main.bundle.ts +19 -0
- package/s/ssg/top-nav.ts +18 -0
- package/s/test.ts +5 -0
- package/s/types.ts +5 -0
- package/s/vitals/setup.ts +29 -0
- package/s/vitals/shell.ts +67 -0
- package/x/assets/b.png +0 -0
- package/x/assets/b.png.d.ts +1 -0
- package/x/assets/b.png.js +2 -0
- package/x/assets/b.png.js.map +1 -0
- package/x/bconfig.d.ts +11 -0
- package/x/bconfig.js +8 -0
- package/x/bconfig.js.map +1 -0
- package/x/css/benev.csstext.d.ts +1 -0
- package/x/css/benev.csstext.js +39 -0
- package/x/css/benev.csstext.js.map +1 -0
- package/x/css/demo.css +19 -0
- package/x/css/parts/common.csstext.d.ts +2 -0
- package/x/css/parts/common.csstext.js +209 -0
- package/x/css/parts/common.csstext.js.map +1 -0
- package/x/css/parts/core.csstext.d.ts +2 -0
- package/x/css/parts/core.csstext.js +55 -0
- package/x/css/parts/core.csstext.js.map +1 -0
- package/x/css/parts/page.csstext.d.ts +2 -0
- package/x/css/parts/page.csstext.js +23 -0
- package/x/css/parts/page.csstext.js.map +1 -0
- package/x/css/parts/vars.csstext.d.ts +2 -0
- package/x/css/parts/vars.csstext.js +39 -0
- package/x/css/parts/vars.csstext.js.map +1 -0
- package/x/css/theme.css.d.ts +1 -0
- package/x/css/theme.css.js +7 -0
- package/x/css/theme.css.js.map +1 -0
- package/x/dom/account/account.d.ts +5 -0
- package/x/dom/account/account.js +7 -0
- package/x/dom/account/account.js.map +1 -0
- package/x/dom/account/style.css.d.ts +2 -0
- package/x/dom/account/style.css.js +5 -0
- package/x/dom/account/style.css.js.map +1 -0
- package/x/dom/account/view.d.ts +2 -0
- package/x/dom/account/view.js +11 -0
- package/x/dom/account/view.js.map +1 -0
- package/x/dom/footer/style.css.d.ts +2 -0
- package/x/dom/footer/style.css.js +5 -0
- package/x/dom/footer/style.css.js.map +1 -0
- package/x/dom/footer/view.d.ts +1 -0
- package/x/dom/footer/view.js +10 -0
- package/x/dom/footer/view.js.map +1 -0
- package/x/dom/header/style.css.d.ts +2 -0
- package/x/dom/header/style.css.js +39 -0
- package/x/dom/header/style.css.js.map +1 -0
- package/x/dom/header/view.d.ts +2 -0
- package/x/dom/header/view.js +19 -0
- package/x/dom/header/view.js.map +1 -0
- package/x/dom/loader/loader.d.ts +10 -0
- package/x/dom/loader/loader.js +56 -0
- package/x/dom/loader/loader.js.map +1 -0
- package/x/dom/loader/style.css.d.ts +2 -0
- package/x/dom/loader/style.css.js +53 -0
- package/x/dom/loader/style.css.js.map +1 -0
- package/x/dom/loader/view.d.ts +1 -0
- package/x/dom/loader/view.js +19 -0
- package/x/dom/loader/view.js.map +1 -0
- package/x/dom/menu/style.css.d.ts +2 -0
- package/x/dom/menu/style.css.js +89 -0
- package/x/dom/menu/style.css.js.map +1 -0
- package/x/dom/menu/utils/click-backdrop.d.ts +1 -0
- package/x/dom/menu/utils/click-backdrop.js +7 -0
- package/x/dom/menu/utils/click-backdrop.js.map +1 -0
- package/x/dom/menu/utils/on-keypress.d.ts +1 -0
- package/x/dom/menu/utils/on-keypress.js +18 -0
- package/x/dom/menu/utils/on-keypress.js.map +1 -0
- package/x/dom/menu/utils/use-after-first-render.d.ts +1 -0
- package/x/dom/menu/utils/use-after-first-render.js +7 -0
- package/x/dom/menu/utils/use-after-first-render.js.map +1 -0
- package/x/dom/menu/view.d.ts +2 -0
- package/x/dom/menu/view.js +27 -0
- package/x/dom/menu/view.js.map +1 -0
- package/x/dom/tools/shadow-duplex.d.ts +2 -0
- package/x/dom/tools/shadow-duplex.js +10 -0
- package/x/dom/tools/shadow-duplex.js.map +1 -0
- package/x/index-ssg.d.ts +4 -0
- package/x/index-ssg.js +5 -0
- package/x/index-ssg.js.map +1 -0
- package/x/index.d.ts +10 -0
- package/x/index.html +410 -0
- package/x/index.html.d.ts +2 -0
- package/x/index.html.js +46 -0
- package/x/index.html.js.map +1 -0
- package/x/index.js +11 -0
- package/x/index.js.map +1 -0
- package/x/main.bundle.d.ts +1 -0
- package/x/main.bundle.js +12 -0
- package/x/main.bundle.js.map +1 -0
- package/x/main.bundle.min.js +847 -0
- package/x/main.bundle.min.js.LEGAL.txt +40 -0
- package/x/main.bundle.min.js.map +7 -0
- package/x/ssg/top-nav.d.ts +2 -0
- package/x/ssg/top-nav.js +12 -0
- package/x/ssg/top-nav.js.map +1 -0
- package/x/test.d.ts +1 -0
- package/x/test.js +3 -0
- package/x/test.js.map +1 -0
- package/x/types.d.ts +2 -0
- package/x/types.js +2 -0
- package/x/types.js.map +1 -0
- package/x/vitals/setup.d.ts +14 -0
- package/x/vitals/setup.js +24 -0
- package/x/vitals/setup.js.map +1 -0
- package/x/vitals/shell.d.ts +7 -0
- package/x/vitals/shell.js +52 -0
- package/x/vitals/shell.js.map +1 -0
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
|
|
2
|
+
import {html} from "lit"
|
|
3
|
+
import {useCss} from "@e280/sly"
|
|
4
|
+
|
|
5
|
+
import styleCss from "./style.css.js"
|
|
6
|
+
import {Shell} from "../../vitals/shell.js"
|
|
7
|
+
import {bDataPng} from "../../assets/b.png.js"
|
|
8
|
+
import {themeCss} from "../../css/theme.css.js"
|
|
9
|
+
import {shadowDuplex} from "../tools/shadow-duplex.js"
|
|
10
|
+
|
|
11
|
+
export const [HeaderView, makeBenevHeader] = shadowDuplex("benev-header", (shell: Shell) => {
|
|
12
|
+
useCss(themeCss, styleCss)
|
|
13
|
+
|
|
14
|
+
const click = () => shell.toggle()
|
|
15
|
+
|
|
16
|
+
return html`
|
|
17
|
+
<nav part=nav ?data-opened=${shell.open} ?data-closed=${!shell.open}>
|
|
18
|
+
<button benev-button=naked title="b menu" @click=${click}>
|
|
19
|
+
<img part=img src="${bDataPng}" alt=""/>
|
|
20
|
+
</button>
|
|
21
|
+
<slot></slot>
|
|
22
|
+
</nav>
|
|
23
|
+
`
|
|
24
|
+
})
|
|
25
|
+
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
|
|
2
|
+
import {nap} from "@e280/stz"
|
|
3
|
+
import {Content, dom} from "@e280/sly"
|
|
4
|
+
import {bconfig} from "../../bconfig.js"
|
|
5
|
+
|
|
6
|
+
export class Loader {
|
|
7
|
+
original
|
|
8
|
+
|
|
9
|
+
#loading
|
|
10
|
+
#content
|
|
11
|
+
#operation = 0
|
|
12
|
+
|
|
13
|
+
constructor(
|
|
14
|
+
public element: HTMLElement,
|
|
15
|
+
public anim = bconfig.anim,
|
|
16
|
+
) {
|
|
17
|
+
|
|
18
|
+
this.original = document.createElement("template")
|
|
19
|
+
this.original.innerHTML = element.innerHTML
|
|
20
|
+
|
|
21
|
+
this.#loading = document.createElement("div")
|
|
22
|
+
this.#loading.style.display = "contents"
|
|
23
|
+
this.#loading.slot = "loading"
|
|
24
|
+
|
|
25
|
+
this.#content = document.createElement("div")
|
|
26
|
+
this.#content.style.display = "contents"
|
|
27
|
+
dom.render(this.#content, Array.from(element.childNodes))
|
|
28
|
+
|
|
29
|
+
this.element.replaceChildren()
|
|
30
|
+
this.element.append(
|
|
31
|
+
this.#loading,
|
|
32
|
+
this.#content,
|
|
33
|
+
)
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
async reset(getLoading: () => Content) {
|
|
37
|
+
return this.load(
|
|
38
|
+
getLoading,
|
|
39
|
+
async() => Array.from(this.original.content.cloneNode(true).childNodes),
|
|
40
|
+
)
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
async load(
|
|
44
|
+
getLoading: () => Content,
|
|
45
|
+
getContent: () => Promise<Content>,
|
|
46
|
+
) {
|
|
47
|
+
|
|
48
|
+
this.#operation += 1
|
|
49
|
+
const operation = this.#operation
|
|
50
|
+
const isLatest = () => (this.#operation === operation)
|
|
51
|
+
this.element.inert = true
|
|
52
|
+
this.element.toggleAttribute("loading", true)
|
|
53
|
+
dom.render(this.#loading, getLoading())
|
|
54
|
+
|
|
55
|
+
try {
|
|
56
|
+
const [content] = await Promise.all([
|
|
57
|
+
getContent(),
|
|
58
|
+
nap(this.anim * 2),
|
|
59
|
+
])
|
|
60
|
+
|
|
61
|
+
if (isLatest()) {
|
|
62
|
+
this.element.toggleAttribute("loading", false)
|
|
63
|
+
this.element.inert = false
|
|
64
|
+
dom.render(this.#content, content)
|
|
65
|
+
await nap(this.anim)
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
finally {
|
|
69
|
+
if (isLatest()) {
|
|
70
|
+
this.element.toggleAttribute("loading", false)
|
|
71
|
+
this.element.inert = false
|
|
72
|
+
dom.render(this.#loading, null)
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
|
|
2
|
+
import {css} from "lit"
|
|
3
|
+
export default css`@layer benev.view {
|
|
4
|
+
|
|
5
|
+
:host {
|
|
6
|
+
display: block;
|
|
7
|
+
position: relative;
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
.veil, .scalar {
|
|
11
|
+
position: absolute;
|
|
12
|
+
inset: 0;
|
|
13
|
+
transition:
|
|
14
|
+
opacity var(--benev-anim) linear,
|
|
15
|
+
transform var(--benev-anim) ease,
|
|
16
|
+
visiblity 0ms linear allow-discrete;
|
|
17
|
+
|
|
18
|
+
display: flex;
|
|
19
|
+
flex-direction: column;
|
|
20
|
+
justify-content: center;
|
|
21
|
+
align-items: center;
|
|
22
|
+
gap: var(--benev-space);
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
.veil {
|
|
26
|
+
pointer-events: all;
|
|
27
|
+
background: var(--benev-bg);
|
|
28
|
+
|
|
29
|
+
opacity: 1;
|
|
30
|
+
visibility: visible;
|
|
31
|
+
|
|
32
|
+
.scalar {
|
|
33
|
+
transform: scale(100%);
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
.logo {
|
|
37
|
+
width: 100%;
|
|
38
|
+
max-width: 10em;
|
|
39
|
+
aspect-ratio: 1 / 1;
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
:host(:not([loading])) .veil {
|
|
44
|
+
pointer-events: none;
|
|
45
|
+
opacity: 0;
|
|
46
|
+
visiblity: hidden;
|
|
47
|
+
|
|
48
|
+
.scalar {
|
|
49
|
+
transform: scale(0%);
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
}`
|
|
54
|
+
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
|
|
2
|
+
import {html} from "lit"
|
|
3
|
+
import {shadowElement, useCss} from "@e280/sly"
|
|
4
|
+
|
|
5
|
+
import styleCss from "./style.css.js"
|
|
6
|
+
import {themeCss} from "../../css/theme.css.js"
|
|
7
|
+
import {bDataPng} from "../../assets/b.png.js"
|
|
8
|
+
|
|
9
|
+
export const BenevLoader = shadowElement(() => {
|
|
10
|
+
useCss(themeCss, styleCss)
|
|
11
|
+
|
|
12
|
+
return html`
|
|
13
|
+
<slot></slot>
|
|
14
|
+
|
|
15
|
+
<div class=veil>
|
|
16
|
+
<div class=scalar>
|
|
17
|
+
<img class=logo src="${bDataPng}" alt="" draggable="false"/>
|
|
18
|
+
<slot name=loading></slot>
|
|
19
|
+
</div>
|
|
20
|
+
</div>
|
|
21
|
+
`
|
|
22
|
+
})
|
|
23
|
+
|
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
|
|
2
|
+
import {css} from "lit"
|
|
3
|
+
export default css`@layer benev.view {
|
|
4
|
+
|
|
5
|
+
dialog {
|
|
6
|
+
border: 0;
|
|
7
|
+
padding: 0;
|
|
8
|
+
background: transparent;
|
|
9
|
+
overflow: visible;
|
|
10
|
+
max-height: unset;
|
|
11
|
+
font: inherit;
|
|
12
|
+
color: inherit;
|
|
13
|
+
|
|
14
|
+
position: fixed;
|
|
15
|
+
inset: 0 0 auto 0;
|
|
16
|
+
width: 100%;
|
|
17
|
+
max-width: var(--benev-site-width);
|
|
18
|
+
margin: auto;
|
|
19
|
+
|
|
20
|
+
transition: all var(--benev-anim) ease allow-discrete;
|
|
21
|
+
opacity: 0;
|
|
22
|
+
transform: translateY(-100%);
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
dialog > section:focus {
|
|
26
|
+
outline: none;
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
dialog > section {
|
|
30
|
+
--theight: min(20em, calc(100dvh - var(--benev-headroom)));
|
|
31
|
+
width: 100%;
|
|
32
|
+
height: var(--theight);
|
|
33
|
+
|
|
34
|
+
display: flex;
|
|
35
|
+
flex-direction: column;
|
|
36
|
+
justify-content: center;
|
|
37
|
+
align-items: center;
|
|
38
|
+
|
|
39
|
+
background: linear-gradient(
|
|
40
|
+
to bottom right,
|
|
41
|
+
var(--benev-tray),
|
|
42
|
+
oklch(from var(--benev-tray) calc(l * 0.6) calc(c * 1.2) h / alpha)
|
|
43
|
+
);
|
|
44
|
+
box-shadow: var(--benev-box-shadow);
|
|
45
|
+
box-shadow: 0 0 4em oklch(from var(--benev-tray) l c h / 60%);
|
|
46
|
+
border-radius: 0 0 var(--benev-round) var(--benev-round);
|
|
47
|
+
border: var(--benev-thick) solid oklch(from var(--benev-tray) calc(l * 1.2) calc(c * 1.2) h / alpha);
|
|
48
|
+
border-top: 0;
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
dialog[open] {
|
|
52
|
+
opacity: 1;
|
|
53
|
+
transform: translateY(0);
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
dialog[open][data-closing] {
|
|
57
|
+
opacity: 0;
|
|
58
|
+
transform: translateY(-100%);
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
dialog::backdrop {
|
|
62
|
+
background: rgb(0 0 0 / 0%);
|
|
63
|
+
backdrop-filter: blur(0);
|
|
64
|
+
transition: all var(--benev-anim) ease allow-discrete;
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
dialog[open]::backdrop {
|
|
68
|
+
background: var(--benev-backdrop);
|
|
69
|
+
backdrop-filter: var(--benev-blur);
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
dialog[open][data-closing]::backdrop {
|
|
73
|
+
background: rgb(0 0 0 / 0%);
|
|
74
|
+
backdrop-filter: blur(0);
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
@starting-style {
|
|
78
|
+
dialog[open] {
|
|
79
|
+
opacity: 0;
|
|
80
|
+
transform: translateY(-100%);
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
dialog[open]::backdrop {
|
|
84
|
+
background: rgb(0 0 0 / 0%);
|
|
85
|
+
backdrop-filter: blur(0);
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
}`
|
|
90
|
+
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
|
|
2
|
+
import {ev} from "@e280/stz"
|
|
3
|
+
|
|
4
|
+
export function onKeypress(keys: string[], fn: () => void) {
|
|
5
|
+
return () => ev(window, {
|
|
6
|
+
keydown: (event: KeyboardEvent) => {
|
|
7
|
+
const target = event.target as HTMLElement
|
|
8
|
+
const typing = (
|
|
9
|
+
target instanceof HTMLInputElement ||
|
|
10
|
+
target instanceof HTMLTextAreaElement ||
|
|
11
|
+
target.isContentEditable
|
|
12
|
+
)
|
|
13
|
+
if (typing)
|
|
14
|
+
return
|
|
15
|
+
if (keys.includes(event.code)) {
|
|
16
|
+
event.preventDefault()
|
|
17
|
+
fn()
|
|
18
|
+
}
|
|
19
|
+
},
|
|
20
|
+
})
|
|
21
|
+
}
|
|
22
|
+
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
|
|
2
|
+
import {html} from "lit"
|
|
3
|
+
import {dom, shadowElement, useCss, useMount} from "@e280/sly"
|
|
4
|
+
import styleCss from "./style.css.js"
|
|
5
|
+
import {Shell} from "../../vitals/shell.js"
|
|
6
|
+
import {HeaderView} from "../header/view.js"
|
|
7
|
+
import {themeCss} from "../../css/theme.css.js"
|
|
8
|
+
import {onKeypress} from "./utils/on-keypress.js"
|
|
9
|
+
import {clickBackdrop} from "./utils/click-backdrop.js"
|
|
10
|
+
import {useAfterFirstRender} from "./utils/use-after-first-render.js"
|
|
11
|
+
|
|
12
|
+
export const makeBenevMenu = (shell: Shell) => shadowElement(() => {
|
|
13
|
+
useCss(themeCss, styleCss)
|
|
14
|
+
useAfterFirstRender(shadow => shell.attach(dom("dialog", shadow)))
|
|
15
|
+
useMount(onKeypress(["KeyB", "Escape"], () => shell.toggle()))
|
|
16
|
+
|
|
17
|
+
const click = clickBackdrop(() => shell.toggle(false))
|
|
18
|
+
const renderMenuContent = () => html`<slot></slot>`
|
|
19
|
+
|
|
20
|
+
return html`
|
|
21
|
+
<dialog @click=${click}>
|
|
22
|
+
<section class=plate autofocus tabindex="-1">
|
|
23
|
+
${shell.dialog?.open
|
|
24
|
+
? renderMenuContent()
|
|
25
|
+
: null}
|
|
26
|
+
</section>
|
|
27
|
+
|
|
28
|
+
${HeaderView(shell)}
|
|
29
|
+
</dialog>
|
|
30
|
+
`
|
|
31
|
+
})
|
|
32
|
+
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
|
|
2
|
+
import {Content, shadow, shadowElement, useName} from "@e280/sly"
|
|
3
|
+
|
|
4
|
+
export function shadowDuplex<P extends any[]>(name: string, render: (...p: P) => Content) {
|
|
5
|
+
const view = shadow((...p: P) => {
|
|
6
|
+
useName(name)
|
|
7
|
+
return render(...p)
|
|
8
|
+
})
|
|
9
|
+
|
|
10
|
+
const makeElement = (...p: P) => shadowElement(() => render(...p))
|
|
11
|
+
|
|
12
|
+
return [view, makeElement] as [
|
|
13
|
+
view: typeof view,
|
|
14
|
+
makeElement: typeof makeElement,
|
|
15
|
+
]
|
|
16
|
+
}
|
|
17
|
+
|
package/s/index-ssg.ts
ADDED
package/s/index.html.ts
ADDED
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
|
|
2
|
+
import {template, html, socialCard, dataSvgEmoji} from "@e280/scute"
|
|
3
|
+
import {topNav} from "./ssg/top-nav.js"
|
|
4
|
+
import {benevCssText} from "./css/benev.csstext.js"
|
|
5
|
+
|
|
6
|
+
export default template(import.meta.url, async orb => html`
|
|
7
|
+
<!doctype html>
|
|
8
|
+
<html benev>
|
|
9
|
+
<head>
|
|
10
|
+
<meta charset="utf-8"/>
|
|
11
|
+
<meta name="viewport" content="width=device-width,initial-scale=1"/>
|
|
12
|
+
<meta name="darkreader-lock"/>
|
|
13
|
+
|
|
14
|
+
<title>@benev/web</title>
|
|
15
|
+
<link rel="icon" href="${dataSvgEmoji("😇")}"/>
|
|
16
|
+
<script type="module" src="${orb.hashurl("main.bundle.min.js")}"></script>
|
|
17
|
+
<style>
|
|
18
|
+
@layer benev, demo;
|
|
19
|
+
${html.raw(benevCssText)}
|
|
20
|
+
${orb.inject("css/demo.css")}
|
|
21
|
+
</style>
|
|
22
|
+
|
|
23
|
+
${socialCard({
|
|
24
|
+
themeColor: "#ffdd22",
|
|
25
|
+
siteName: "@benev/web",
|
|
26
|
+
title: "@benev/web",
|
|
27
|
+
description: "benev web ui library",
|
|
28
|
+
})}
|
|
29
|
+
</head>
|
|
30
|
+
<body>
|
|
31
|
+
<benev-menu>
|
|
32
|
+
<benev-account></benev-account>
|
|
33
|
+
</benev-menu>
|
|
34
|
+
|
|
35
|
+
<benev-header>
|
|
36
|
+
${topNav("games")}
|
|
37
|
+
</benev-header>
|
|
38
|
+
|
|
39
|
+
<benev-loader>
|
|
40
|
+
<main benev-slice>
|
|
41
|
+
<h1>benev</h1>
|
|
42
|
+
<button class=testloader>test loader</button>
|
|
43
|
+
</main>
|
|
44
|
+
</benev-loader>
|
|
45
|
+
</body>
|
|
46
|
+
</html>
|
|
47
|
+
`)
|
|
48
|
+
|
package/s/index.ts
ADDED
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
|
|
2
|
+
export * from "./vitals/shell.js"
|
|
3
|
+
export * from "./vitals/setup.js"
|
|
4
|
+
|
|
5
|
+
export * from "./css/benev.csstext.js"
|
|
6
|
+
export * from "./css/theme.css.js"
|
|
7
|
+
|
|
8
|
+
export * from "./dom/header/view.js"
|
|
9
|
+
export * from "./dom/loader/view.js"
|
|
10
|
+
export * from "./dom/loader/loader.js"
|
|
11
|
+
export * from "./dom/menu/view.js"
|
|
12
|
+
|
|
13
|
+
export * from "./bconfig.js"
|
|
14
|
+
export * from "./types.js"
|
|
15
|
+
|
package/s/main.bundle.ts
ADDED
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
|
|
2
|
+
import {html} from "lit"
|
|
3
|
+
import {dom} from "@e280/sly"
|
|
4
|
+
import {nap} from "@e280/stz"
|
|
5
|
+
import {setupBenev} from "./vitals/setup.js"
|
|
6
|
+
import {Loader} from "./dom/loader/loader.js"
|
|
7
|
+
|
|
8
|
+
const {elements} = await setupBenev()
|
|
9
|
+
dom.register(elements)
|
|
10
|
+
|
|
11
|
+
const loader = new Loader(dom("benev-loader"))
|
|
12
|
+
|
|
13
|
+
dom(".testloader").onclick = async() => {
|
|
14
|
+
await loader.load(
|
|
15
|
+
() => "loading...",
|
|
16
|
+
async() => nap(1000).then(() => html`<main benev-slice>new content</main>`),
|
|
17
|
+
)
|
|
18
|
+
}
|
|
19
|
+
|
package/s/ssg/top-nav.ts
ADDED
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
|
|
2
|
+
import {html} from "@e280/scute"
|
|
3
|
+
import {Zone} from "../types.js"
|
|
4
|
+
import {bconfig} from "../bconfig.js"
|
|
5
|
+
|
|
6
|
+
export function topNav(currentZone: Zone) {
|
|
7
|
+
return html`
|
|
8
|
+
${navlink(currentZone, "games")}
|
|
9
|
+
${navlink(currentZone, "devlog")}
|
|
10
|
+
`
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
const navlink = (currentZone: string, zone: Zone) => (
|
|
14
|
+
(zone === currentZone)
|
|
15
|
+
? html`<a href="${bconfig.zones[zone].path}" data-active>${zone}</a>`
|
|
16
|
+
: html`<a href="${bconfig.zones[zone].path}">${zone}</a>`
|
|
17
|
+
)
|
|
18
|
+
|
package/s/test.ts
ADDED
package/s/types.ts
ADDED
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
|
|
2
|
+
import {Auth, makeAuthWidget} from "@e280/authlocal"
|
|
3
|
+
import {Shell} from "./shell.js"
|
|
4
|
+
import {Account} from "../dom/account/account.js"
|
|
5
|
+
import {BenevLoader} from "../dom/loader/view.js"
|
|
6
|
+
import {makeBenevMenu} from "../dom/menu/view.js"
|
|
7
|
+
import {makeBenevFooter} from "../dom/footer/view.js"
|
|
8
|
+
import {makeBenevHeader} from "../dom/header/view.js"
|
|
9
|
+
import {makeBenevAccount} from "../dom/account/view.js"
|
|
10
|
+
|
|
11
|
+
export async function setupBenev() {
|
|
12
|
+
const shell = new Shell()
|
|
13
|
+
const auth = new Auth()
|
|
14
|
+
const account = new Account(auth)
|
|
15
|
+
|
|
16
|
+
const elements = {
|
|
17
|
+
BenevLoader,
|
|
18
|
+
BenevFooter: makeBenevFooter(),
|
|
19
|
+
BenevMenu: makeBenevMenu(shell),
|
|
20
|
+
BenevHeader: makeBenevHeader(shell),
|
|
21
|
+
BenevAccount: makeBenevAccount(account),
|
|
22
|
+
BenevAuth: makeAuthWidget(account.auth),
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
await auth.remember()
|
|
26
|
+
|
|
27
|
+
return {account, shell, elements}
|
|
28
|
+
}
|
|
29
|
+
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
|
|
2
|
+
import {got, nap} from "@e280/stz"
|
|
3
|
+
import {tracker} from "@e280/strata"
|
|
4
|
+
import {bconfig} from "../bconfig.js"
|
|
5
|
+
|
|
6
|
+
export class Shell {
|
|
7
|
+
#dialog?: HTMLDialogElement
|
|
8
|
+
#closeToken = 0
|
|
9
|
+
|
|
10
|
+
get dialog() {
|
|
11
|
+
tracker.read(this)
|
|
12
|
+
return this.#dialog
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
get open() {
|
|
16
|
+
const dialog = this.dialog
|
|
17
|
+
return !!dialog?.open && !dialog.hasAttribute("data-closing")
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
attach(dialog: HTMLDialogElement) {
|
|
21
|
+
this.#dialog = dialog
|
|
22
|
+
dialog.onclose = () => tracker.write(this)
|
|
23
|
+
dialog.oncancel = event => {
|
|
24
|
+
event.preventDefault()
|
|
25
|
+
this.toggle(false)
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
toggle = (please = !this.open) => {
|
|
30
|
+
const dialog = got(this.dialog)
|
|
31
|
+
|
|
32
|
+
if (please)
|
|
33
|
+
this.#open(dialog)
|
|
34
|
+
else
|
|
35
|
+
this.#close(dialog)
|
|
36
|
+
|
|
37
|
+
tracker.write(this)
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
#open(dialog: HTMLDialogElement) {
|
|
41
|
+
this.#closeToken++
|
|
42
|
+
dialog.removeAttribute("data-closing")
|
|
43
|
+
|
|
44
|
+
if (!dialog.open)
|
|
45
|
+
dialog.showModal()
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
#close(dialog: HTMLDialogElement) {
|
|
49
|
+
if (!dialog.open)
|
|
50
|
+
return
|
|
51
|
+
|
|
52
|
+
const token = ++this.#closeToken
|
|
53
|
+
dialog.setAttribute("data-closing", "")
|
|
54
|
+
|
|
55
|
+
nap(bconfig.anim).then(() => {
|
|
56
|
+
if (token !== this.#closeToken)
|
|
57
|
+
return
|
|
58
|
+
|
|
59
|
+
if (dialog.hasAttribute("data-closing"))
|
|
60
|
+
dialog.close()
|
|
61
|
+
|
|
62
|
+
dialog.removeAttribute("data-closing")
|
|
63
|
+
tracker.write(this)
|
|
64
|
+
})
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
|
package/x/assets/b.png
ADDED
|
Binary file
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare const bDataPng = "data:image/png;base64,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";
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
export const bDataPng = `data:image/png;base64,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`;
|
|
2
|
+
//# sourceMappingURL=b.png.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"b.png.js","sourceRoot":"","sources":["../../s/assets/b.png.ts"],"names":[],"mappings":"AACA,MAAM,CAAC,MAAM,QAAQ,GAAG,wjWAAwjW,CAAA"}
|