@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.
Files changed (143) hide show
  1. package/LICENSE +22 -0
  2. package/README.md +67 -0
  3. package/package.json +52 -0
  4. package/s/assets/b.png +0 -0
  5. package/s/assets/b.png.ts +3 -0
  6. package/s/bconfig.ts +9 -0
  7. package/s/css/benev.csstext.ts +41 -0
  8. package/s/css/demo.css +19 -0
  9. package/s/css/parts/common.csstext.ts +210 -0
  10. package/s/css/parts/core.csstext.ts +56 -0
  11. package/s/css/parts/page.csstext.ts +24 -0
  12. package/s/css/parts/vars.csstext.ts +40 -0
  13. package/s/css/theme.css.ts +9 -0
  14. package/s/dom/account/account.ts +7 -0
  15. package/s/dom/account/style.css.ts +6 -0
  16. package/s/dom/account/view.ts +16 -0
  17. package/s/dom/footer/style.css.ts +6 -0
  18. package/s/dom/footer/view.ts +13 -0
  19. package/s/dom/header/style.css.ts +40 -0
  20. package/s/dom/header/view.ts +25 -0
  21. package/s/dom/loader/loader.ts +77 -0
  22. package/s/dom/loader/style.css.ts +54 -0
  23. package/s/dom/loader/view.ts +23 -0
  24. package/s/dom/menu/style.css.ts +90 -0
  25. package/s/dom/menu/utils/click-backdrop.ts +8 -0
  26. package/s/dom/menu/utils/on-keypress.ts +22 -0
  27. package/s/dom/menu/utils/use-after-first-render.ts +9 -0
  28. package/s/dom/menu/view.ts +32 -0
  29. package/s/dom/tools/shadow-duplex.ts +17 -0
  30. package/s/index-ssg.ts +7 -0
  31. package/s/index.html.ts +48 -0
  32. package/s/index.ts +15 -0
  33. package/s/main.bundle.ts +19 -0
  34. package/s/ssg/top-nav.ts +18 -0
  35. package/s/test.ts +5 -0
  36. package/s/types.ts +5 -0
  37. package/s/vitals/setup.ts +29 -0
  38. package/s/vitals/shell.ts +67 -0
  39. package/x/assets/b.png +0 -0
  40. package/x/assets/b.png.d.ts +1 -0
  41. package/x/assets/b.png.js +2 -0
  42. package/x/assets/b.png.js.map +1 -0
  43. package/x/bconfig.d.ts +11 -0
  44. package/x/bconfig.js +8 -0
  45. package/x/bconfig.js.map +1 -0
  46. package/x/css/benev.csstext.d.ts +1 -0
  47. package/x/css/benev.csstext.js +39 -0
  48. package/x/css/benev.csstext.js.map +1 -0
  49. package/x/css/demo.css +19 -0
  50. package/x/css/parts/common.csstext.d.ts +2 -0
  51. package/x/css/parts/common.csstext.js +209 -0
  52. package/x/css/parts/common.csstext.js.map +1 -0
  53. package/x/css/parts/core.csstext.d.ts +2 -0
  54. package/x/css/parts/core.csstext.js +55 -0
  55. package/x/css/parts/core.csstext.js.map +1 -0
  56. package/x/css/parts/page.csstext.d.ts +2 -0
  57. package/x/css/parts/page.csstext.js +23 -0
  58. package/x/css/parts/page.csstext.js.map +1 -0
  59. package/x/css/parts/vars.csstext.d.ts +2 -0
  60. package/x/css/parts/vars.csstext.js +39 -0
  61. package/x/css/parts/vars.csstext.js.map +1 -0
  62. package/x/css/theme.css.d.ts +1 -0
  63. package/x/css/theme.css.js +7 -0
  64. package/x/css/theme.css.js.map +1 -0
  65. package/x/dom/account/account.d.ts +5 -0
  66. package/x/dom/account/account.js +7 -0
  67. package/x/dom/account/account.js.map +1 -0
  68. package/x/dom/account/style.css.d.ts +2 -0
  69. package/x/dom/account/style.css.js +5 -0
  70. package/x/dom/account/style.css.js.map +1 -0
  71. package/x/dom/account/view.d.ts +2 -0
  72. package/x/dom/account/view.js +11 -0
  73. package/x/dom/account/view.js.map +1 -0
  74. package/x/dom/footer/style.css.d.ts +2 -0
  75. package/x/dom/footer/style.css.js +5 -0
  76. package/x/dom/footer/style.css.js.map +1 -0
  77. package/x/dom/footer/view.d.ts +1 -0
  78. package/x/dom/footer/view.js +10 -0
  79. package/x/dom/footer/view.js.map +1 -0
  80. package/x/dom/header/style.css.d.ts +2 -0
  81. package/x/dom/header/style.css.js +39 -0
  82. package/x/dom/header/style.css.js.map +1 -0
  83. package/x/dom/header/view.d.ts +2 -0
  84. package/x/dom/header/view.js +19 -0
  85. package/x/dom/header/view.js.map +1 -0
  86. package/x/dom/loader/loader.d.ts +10 -0
  87. package/x/dom/loader/loader.js +56 -0
  88. package/x/dom/loader/loader.js.map +1 -0
  89. package/x/dom/loader/style.css.d.ts +2 -0
  90. package/x/dom/loader/style.css.js +53 -0
  91. package/x/dom/loader/style.css.js.map +1 -0
  92. package/x/dom/loader/view.d.ts +1 -0
  93. package/x/dom/loader/view.js +19 -0
  94. package/x/dom/loader/view.js.map +1 -0
  95. package/x/dom/menu/style.css.d.ts +2 -0
  96. package/x/dom/menu/style.css.js +89 -0
  97. package/x/dom/menu/style.css.js.map +1 -0
  98. package/x/dom/menu/utils/click-backdrop.d.ts +1 -0
  99. package/x/dom/menu/utils/click-backdrop.js +7 -0
  100. package/x/dom/menu/utils/click-backdrop.js.map +1 -0
  101. package/x/dom/menu/utils/on-keypress.d.ts +1 -0
  102. package/x/dom/menu/utils/on-keypress.js +18 -0
  103. package/x/dom/menu/utils/on-keypress.js.map +1 -0
  104. package/x/dom/menu/utils/use-after-first-render.d.ts +1 -0
  105. package/x/dom/menu/utils/use-after-first-render.js +7 -0
  106. package/x/dom/menu/utils/use-after-first-render.js.map +1 -0
  107. package/x/dom/menu/view.d.ts +2 -0
  108. package/x/dom/menu/view.js +27 -0
  109. package/x/dom/menu/view.js.map +1 -0
  110. package/x/dom/tools/shadow-duplex.d.ts +2 -0
  111. package/x/dom/tools/shadow-duplex.js +10 -0
  112. package/x/dom/tools/shadow-duplex.js.map +1 -0
  113. package/x/index-ssg.d.ts +4 -0
  114. package/x/index-ssg.js +5 -0
  115. package/x/index-ssg.js.map +1 -0
  116. package/x/index.d.ts +10 -0
  117. package/x/index.html +410 -0
  118. package/x/index.html.d.ts +2 -0
  119. package/x/index.html.js +46 -0
  120. package/x/index.html.js.map +1 -0
  121. package/x/index.js +11 -0
  122. package/x/index.js.map +1 -0
  123. package/x/main.bundle.d.ts +1 -0
  124. package/x/main.bundle.js +12 -0
  125. package/x/main.bundle.js.map +1 -0
  126. package/x/main.bundle.min.js +847 -0
  127. package/x/main.bundle.min.js.LEGAL.txt +40 -0
  128. package/x/main.bundle.min.js.map +7 -0
  129. package/x/ssg/top-nav.d.ts +2 -0
  130. package/x/ssg/top-nav.js +12 -0
  131. package/x/ssg/top-nav.js.map +1 -0
  132. package/x/test.d.ts +1 -0
  133. package/x/test.js +3 -0
  134. package/x/test.js.map +1 -0
  135. package/x/types.d.ts +2 -0
  136. package/x/types.js +2 -0
  137. package/x/types.js.map +1 -0
  138. package/x/vitals/setup.d.ts +14 -0
  139. package/x/vitals/setup.js +24 -0
  140. package/x/vitals/setup.js.map +1 -0
  141. package/x/vitals/shell.d.ts +7 -0
  142. package/x/vitals/shell.js +52 -0
  143. 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,8 @@
1
+
2
+ export function clickBackdrop(fn: (event: Event) => void) {
3
+ return (event: Event) => {
4
+ if (event.target === event.currentTarget)
5
+ fn(event)
6
+ }
7
+ }
8
+
@@ -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,9 @@
1
+
2
+ import {useRendered, useShadow, useWake} from "@e280/sly"
3
+
4
+ export function useAfterFirstRender(fn: (shadow: ShadowRoot) => void) {
5
+ const shadow = useShadow()
6
+ const rendered = useRendered()
7
+ useWake(() => rendered.then(() => fn(shadow)))
8
+ }
9
+
@@ -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
@@ -0,0 +1,7 @@
1
+
2
+ export * from "./css/benev.csstext.js"
3
+ export * from "./ssg/top-nav.js"
4
+
5
+ export * from "./bconfig.js"
6
+ export * from "./types.js"
7
+
@@ -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
+
@@ -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
+
@@ -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
@@ -0,0 +1,5 @@
1
+
2
+ import {run} from "@e280/science"
3
+
4
+ await run({})
5
+
package/s/types.ts ADDED
@@ -0,0 +1,5 @@
1
+
2
+ import type {bconfig} from "./bconfig.js"
3
+
4
+ export type Zone = keyof (typeof bconfig)["zones"]
5
+
@@ -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"}
package/x/bconfig.d.ts ADDED
@@ -0,0 +1,11 @@
1
+ export declare const bconfig: {
2
+ anim: number;
3
+ zones: {
4
+ games: {
5
+ path: string;
6
+ };
7
+ devlog: {
8
+ path: string;
9
+ };
10
+ };
11
+ };