@benev/web 0.1.0-2

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 (111) hide show
  1. package/LICENSE +22 -0
  2. package/README.md +67 -0
  3. package/package.json +49 -0
  4. package/s/assets/b.png +0 -0
  5. package/s/assets/b.png.ts +3 -0
  6. package/s/consts.ts +5 -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 +173 -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/header/style.css.ts +40 -0
  15. package/s/dom/header/view.ts +31 -0
  16. package/s/dom/loader/loader.ts +70 -0
  17. package/s/dom/loader/style.css.ts +44 -0
  18. package/s/dom/loader/view.ts +20 -0
  19. package/s/dom/menu/style.css.ts +90 -0
  20. package/s/dom/menu/utils/click-backdrop.ts +8 -0
  21. package/s/dom/menu/utils/on-keypress.ts +22 -0
  22. package/s/dom/menu/utils/use-after-first-render.ts +9 -0
  23. package/s/dom/menu/view.ts +32 -0
  24. package/s/index-ssg.ts +3 -0
  25. package/s/index.html.ts +45 -0
  26. package/s/index.ts +14 -0
  27. package/s/main.bundle.ts +19 -0
  28. package/s/test.ts +5 -0
  29. package/s/vitals/setup.ts +21 -0
  30. package/s/vitals/shell.ts +67 -0
  31. package/x/assets/b.png +0 -0
  32. package/x/assets/b.png.d.ts +1 -0
  33. package/x/assets/b.png.js +2 -0
  34. package/x/assets/b.png.js.map +1 -0
  35. package/x/consts.d.ts +3 -0
  36. package/x/consts.js +4 -0
  37. package/x/consts.js.map +1 -0
  38. package/x/css/benev.csstext.d.ts +1 -0
  39. package/x/css/benev.csstext.js +39 -0
  40. package/x/css/benev.csstext.js.map +1 -0
  41. package/x/css/demo.css +19 -0
  42. package/x/css/parts/common.csstext.d.ts +2 -0
  43. package/x/css/parts/common.csstext.js +172 -0
  44. package/x/css/parts/common.csstext.js.map +1 -0
  45. package/x/css/parts/core.csstext.d.ts +2 -0
  46. package/x/css/parts/core.csstext.js +55 -0
  47. package/x/css/parts/core.csstext.js.map +1 -0
  48. package/x/css/parts/page.csstext.d.ts +2 -0
  49. package/x/css/parts/page.csstext.js +23 -0
  50. package/x/css/parts/page.csstext.js.map +1 -0
  51. package/x/css/parts/vars.csstext.d.ts +2 -0
  52. package/x/css/parts/vars.csstext.js +39 -0
  53. package/x/css/parts/vars.csstext.js.map +1 -0
  54. package/x/css/theme.css.d.ts +1 -0
  55. package/x/css/theme.css.js +7 -0
  56. package/x/css/theme.css.js.map +1 -0
  57. package/x/dom/header/style.css.d.ts +2 -0
  58. package/x/dom/header/style.css.js +39 -0
  59. package/x/dom/header/style.css.js.map +1 -0
  60. package/x/dom/header/view.d.ts +3 -0
  61. package/x/dom/header/view.js +26 -0
  62. package/x/dom/header/view.js.map +1 -0
  63. package/x/dom/loader/loader.d.ts +9 -0
  64. package/x/dom/loader/loader.js +53 -0
  65. package/x/dom/loader/loader.js.map +1 -0
  66. package/x/dom/loader/style.css.d.ts +2 -0
  67. package/x/dom/loader/style.css.js +43 -0
  68. package/x/dom/loader/style.css.js.map +1 -0
  69. package/x/dom/loader/view.d.ts +1 -0
  70. package/x/dom/loader/view.js +17 -0
  71. package/x/dom/loader/view.js.map +1 -0
  72. package/x/dom/menu/style.css.d.ts +2 -0
  73. package/x/dom/menu/style.css.js +89 -0
  74. package/x/dom/menu/style.css.js.map +1 -0
  75. package/x/dom/menu/utils/click-backdrop.d.ts +1 -0
  76. package/x/dom/menu/utils/click-backdrop.js +7 -0
  77. package/x/dom/menu/utils/click-backdrop.js.map +1 -0
  78. package/x/dom/menu/utils/on-keypress.d.ts +1 -0
  79. package/x/dom/menu/utils/on-keypress.js +18 -0
  80. package/x/dom/menu/utils/on-keypress.js.map +1 -0
  81. package/x/dom/menu/utils/use-after-first-render.d.ts +1 -0
  82. package/x/dom/menu/utils/use-after-first-render.js +7 -0
  83. package/x/dom/menu/utils/use-after-first-render.js.map +1 -0
  84. package/x/dom/menu/view.d.ts +2 -0
  85. package/x/dom/menu/view.js +27 -0
  86. package/x/dom/menu/view.js.map +1 -0
  87. package/x/index-ssg.d.ts +1 -0
  88. package/x/index-ssg.js +2 -0
  89. package/x/index-ssg.js.map +1 -0
  90. package/x/index.d.ts +9 -0
  91. package/x/index.html +368 -0
  92. package/x/index.html.d.ts +2 -0
  93. package/x/index.html.js +43 -0
  94. package/x/index.html.js.map +1 -0
  95. package/x/index.js +10 -0
  96. package/x/index.js.map +1 -0
  97. package/x/main.bundle.d.ts +1 -0
  98. package/x/main.bundle.js +12 -0
  99. package/x/main.bundle.js.map +1 -0
  100. package/x/main.bundle.min.js +522 -0
  101. package/x/main.bundle.min.js.LEGAL.txt +33 -0
  102. package/x/main.bundle.min.js.map +7 -0
  103. package/x/test.d.ts +1 -0
  104. package/x/test.js +3 -0
  105. package/x/test.js.map +1 -0
  106. package/x/vitals/setup.d.ts +9 -0
  107. package/x/vitals/setup.js +17 -0
  108. package/x/vitals/setup.js.map +1 -0
  109. package/x/vitals/shell.d.ts +7 -0
  110. package/x/vitals/shell.js +52 -0
  111. package/x/vitals/shell.js.map +1 -0
@@ -0,0 +1,172 @@
1
+ import { templateString as css } from "@e280/stz";
2
+ export default css `
3
+
4
+ button, [benev-button] {
5
+ font: inherit;
6
+ text-decoration: none;
7
+
8
+ display: inline-flex;
9
+ align-items: center;
10
+ flex-wrap: wrap;
11
+ padding: var(--benev-pad) var(--benev-space);
12
+
13
+ font-weight: bold;
14
+ text-transform: uppercase;
15
+ color: var(--benev-prime);
16
+ background: oklch(from var(--benev-bg) l c h / 50%);
17
+ backdrop-filter: var(--benev-blur);
18
+ box-shadow: var(--benev-box-shadow);
19
+ border: var(--benev-thick) solid currentColor;
20
+ border-radius: var(--benev-round);
21
+
22
+ &[disabled] {
23
+ opacity: 0.3;
24
+ }
25
+
26
+ &:not([disabled]) {
27
+ cursor: pointer;
28
+ transform: scale(100%);
29
+ transition: all var(--benev-anim) ease;
30
+ &:hover, &:focus-visible { transform: scale(105%); filter: brightness(120%); }
31
+ &:active { transform: scale(100%); filter: brightness(100%); }
32
+ }
33
+
34
+ &[benev-button="naked"] {
35
+ color: inherit;
36
+ background: transparent;
37
+ backdrop-filter: none;
38
+ box-shadow: none;
39
+ padding: 0;
40
+ border-radius: 0;
41
+ border: none;
42
+ text-transform: unset;
43
+ font-weight: inherit;
44
+ text-transform: inherit;
45
+ }
46
+
47
+ &[benev-button="juicy"] {
48
+ opacity: 1;
49
+ color: black;
50
+ border: var(--benev-thick) solid var(--benev-prime);
51
+ background: linear-gradient(
52
+ to bottom,
53
+ oklch(from var(--benev-prime) calc(l * 1.5) c h),
54
+ oklch(from var(--benev-prime) l calc(c * 1.5) h)
55
+ );
56
+ &:is(:hover, :focus-visible) {
57
+ box-shadow: 0 0 2em color-mix(in oklch, transparent, var(--benev-prime));
58
+ }
59
+ }
60
+ }
61
+
62
+ [benev-slice] {
63
+ width: 100%;
64
+ max-width: var(--benev-site-width);
65
+ margin-left: auto;
66
+ margin-right: auto;
67
+ }
68
+
69
+ benev-menu:not(:defined) {
70
+ display: none;
71
+ }
72
+
73
+ benev-header {
74
+ display: flex;
75
+ justify-content: end;
76
+ align-items: center;
77
+ width: 100%;
78
+ max-width: var(--benev-site-width);
79
+ margin: 0 auto;
80
+
81
+ &:not(:defined) {
82
+ padding: var(--benev-pad);
83
+ gap: var(--benev-space);
84
+
85
+ &::before {
86
+ content: "";
87
+ display: inline-block;
88
+ margin-right: auto;
89
+ width: var(--benev-b-size);
90
+ height: var(--benev-b-size);
91
+ }
92
+ }
93
+ }
94
+
95
+ [benev-prose] {
96
+ display: flex;
97
+ flex-direction: column;
98
+ gap: var(--benev-pad);
99
+
100
+ h1 {
101
+ font-size: 2.5em;
102
+ color: var(--benev-intense);
103
+ a { color: inherit; }
104
+ }
105
+
106
+ h2 {
107
+ font-size: 1.5em;
108
+ color: var(--benev-prime);
109
+ }
110
+
111
+ h3, h4, h5, h6 {
112
+ color: var(--benev-prime);
113
+ }
114
+
115
+ h1, h2, h3, h4, h5, h6 {
116
+ margin-top: var(--benev-space);
117
+ }
118
+
119
+ p {
120
+ max-width: var(--benev-copy-width);
121
+ }
122
+
123
+ p:has(> img) {
124
+ max-width: 100%;
125
+ }
126
+
127
+ ul, ol {
128
+ padding-left: 1.5em;
129
+ }
130
+
131
+ img {
132
+ max-width: 100%;
133
+ background: #0004;
134
+ border-radius: var(--benev-round);
135
+ box-shadow: var(--benev-box-shadow);
136
+ }
137
+
138
+ blockquote {
139
+ color: oklch(from currentColor l 0 h / 50%);
140
+ padding-left: var(--benev-pad);
141
+ margin-left: var(--benev-pad);
142
+ font-style: italic;
143
+ border-left: var(--benev-thick) solid currentColor;
144
+ }
145
+
146
+ hr {
147
+ border: none;
148
+ display: block;
149
+ height: var(--benev-thick);
150
+ background: oklch(from var(--benev-text) l c h / 25%);
151
+ margin: var(--benev-space) 0;
152
+ }
153
+
154
+ code {
155
+ font-size: 0.8em;
156
+
157
+ display: block;
158
+ width: 100%;
159
+ overflow: auto;
160
+
161
+ padding: var(--benev-space);
162
+ color: var(--benev-code);
163
+ background: var(--benev-backdrop);
164
+ border-radius: var(--benev-round);
165
+ border: var(--benev-border);
166
+ border-color: oklch(from var(--benev-code) l c h / 33%);
167
+ box-shadow: var(--benev-box-shadow);
168
+ }
169
+ }
170
+
171
+ `;
172
+ //# sourceMappingURL=common.csstext.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"common.csstext.js","sourceRoot":"","sources":["../../../s/css/parts/common.csstext.ts"],"names":[],"mappings":"AACA,OAAO,EAAC,cAAc,IAAI,GAAG,EAAC,MAAM,WAAW,CAAA;AAC/C,eAAe,GAAG,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAyKjB,CAAA"}
@@ -0,0 +1,2 @@
1
+ declare const _default: string;
2
+ export default _default;
@@ -0,0 +1,55 @@
1
+ import { templateString as css } from "@e280/stz";
2
+ export default css `
3
+
4
+ &, *, ::before, ::after {
5
+ margin: 0;
6
+ padding: 0;
7
+ box-sizing: border-box;
8
+ scrollbar-width: thin;
9
+ }
10
+
11
+ :focus-visible {
12
+ outline: var(--benev-focus);
13
+ outline-offset: 0.2em;
14
+ }
15
+
16
+ ::selection {
17
+ color: var(--benev-select-color);
18
+ background: var(--benev-select-bg);
19
+ }
20
+
21
+ a {
22
+ color: var(--benev-link);
23
+ text-decoration: none;
24
+
25
+ &:visited {
26
+ color: var(--benev-link);
27
+ }
28
+
29
+ &:hover, &:focus-visible {
30
+ color: color-mix(in srgb, var(--benev-link), white 15%);
31
+ text-decoration: underline;
32
+ }
33
+
34
+ &:active {
35
+ color: color-mix(in srgb, var(--benev-link), white 50%);
36
+ }
37
+
38
+ &[benev-cardlink] {
39
+ color: inherit;
40
+
41
+ &:hover, &:focus-visible {
42
+ color: inherit;
43
+ text-decoration: none;
44
+ filter: brightness(105%);
45
+ }
46
+
47
+ &:active {
48
+ color: inherit;
49
+ filter: brightness(95%);
50
+ }
51
+ }
52
+ }
53
+
54
+ `;
55
+ //# sourceMappingURL=core.csstext.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"core.csstext.js","sourceRoot":"","sources":["../../../s/css/parts/core.csstext.ts"],"names":[],"mappings":"AACA,OAAO,EAAC,cAAc,IAAI,GAAG,EAAC,MAAM,WAAW,CAAA;AAC/C,eAAe,GAAG,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAoDjB,CAAA"}
@@ -0,0 +1,2 @@
1
+ declare const _default: string;
2
+ export default _default;
@@ -0,0 +1,23 @@
1
+ import { templateString as css } from "@e280/stz";
2
+ export default css `
3
+
4
+ color-scheme: dark;
5
+
6
+ &:is(html) {
7
+ font-family: sans-serif;
8
+ font-size: var(--benev-font-size);
9
+
10
+ scrollbar-gutter: stable;
11
+ scrollbar-width: thin;
12
+
13
+ color: var(--benev-text);
14
+ background: var(--benev-bg);
15
+ text-shadow: var(--benev-text-shadow);
16
+ }
17
+
18
+ body {
19
+ min-height: 100dvh;
20
+ }
21
+
22
+ `;
23
+ //# sourceMappingURL=page.csstext.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"page.csstext.js","sourceRoot":"","sources":["../../../s/css/parts/page.csstext.ts"],"names":[],"mappings":"AACA,OAAO,EAAC,cAAc,IAAI,GAAG,EAAC,MAAM,WAAW,CAAA;AAC/C,eAAe,GAAG,CAAA;;;;;;;;;;;;;;;;;;;;CAoBjB,CAAA"}
@@ -0,0 +1,2 @@
1
+ declare const _default: string;
2
+ export default _default;
@@ -0,0 +1,39 @@
1
+ import { templateString as css } from "@e280/stz";
2
+ import { consts } from "../../consts.js";
3
+ export default css `
4
+
5
+ --benev-font-size: 18px;
6
+ --benev-site-width: 62em;
7
+ --benev-copy-width: 70ch;
8
+ --benev-headroom: 2.5em;
9
+
10
+ --benev-bg: #111;
11
+ --benev-prime: #ebb935;
12
+ --benev-tray: #453e2ca8;
13
+ --benev-text: color-mix(in oklch, var(--benev-prime), #fffc 90%);
14
+ --benev-intense: white;
15
+ --benev-focus: 2px solid cyan;
16
+ --benev-link: aqua;
17
+ --benev-b-size: 1.5em;
18
+ --benev-code: #0f0;
19
+
20
+ --benev-select-bg: #f60;
21
+ --benev-select-color: #ff8;
22
+
23
+ --benev-line: #ebb93588;
24
+ --benev-thin: 1px;
25
+ --benev-thick: 3px;
26
+ --benev-border: var(--benev-thin) solid color-mix(in oklch, transparent, var(--benev-line) 50%);
27
+
28
+ --benev-pad: 0.5em;
29
+ --benev-space: 1em;
30
+ --benev-anim: ${consts.anim}ms;
31
+ --benev-round: 0.5em;
32
+ --benev-blur: blur(1em);
33
+ --benev-backdrop: #0008;
34
+
35
+ --benev-box-shadow: 0 0.5em 2em #0008;
36
+ --benev-text-shadow: 0.04em 0.08em 0.1em #0008;
37
+
38
+ `;
39
+ //# sourceMappingURL=vars.csstext.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"vars.csstext.js","sourceRoot":"","sources":["../../../s/css/parts/vars.csstext.ts"],"names":[],"mappings":"AACA,OAAO,EAAC,cAAc,IAAI,GAAG,EAAC,MAAM,WAAW,CAAA;AAC/C,OAAO,EAAC,MAAM,EAAC,MAAM,iBAAiB,CAAA;AACtC,eAAe,GAAG,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;gBA2BF,MAAM,CAAC,IAAI;;;;;;;;CAQ1B,CAAA"}
@@ -0,0 +1 @@
1
+ export declare const themeCss: CSSStyleSheet[];
@@ -0,0 +1,7 @@
1
+ import { benevCssText } from "./benev.csstext.js";
2
+ export const themeCss = [benevCssText].map(text => {
3
+ const sheet = new CSSStyleSheet();
4
+ sheet.replaceSync(text);
5
+ return sheet;
6
+ });
7
+ //# sourceMappingURL=theme.css.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"theme.css.js","sourceRoot":"","sources":["../../s/css/theme.css.ts"],"names":[],"mappings":"AACA,OAAO,EAAC,YAAY,EAAC,MAAM,oBAAoB,CAAA;AAE/C,MAAM,CAAC,MAAM,QAAQ,GAAG,CAAC,YAAY,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE;IACjD,MAAM,KAAK,GAAG,IAAI,aAAa,EAAE,CAAA;IACjC,KAAK,CAAC,WAAW,CAAC,IAAI,CAAC,CAAA;IACvB,OAAO,KAAK,CAAA;AACb,CAAC,CAAC,CAAA"}
@@ -0,0 +1,2 @@
1
+ declare const _default: import("lit").CSSResult;
2
+ export default _default;
@@ -0,0 +1,39 @@
1
+ import { css } from "lit";
2
+ export default css `@layer benev.view {
3
+
4
+ :host {
5
+ width: 100%;
6
+ pointer-events: none;
7
+ }
8
+
9
+ nav > *, ::slotted(*) {
10
+ pointer-events: all;
11
+ }
12
+
13
+ nav {
14
+ width: 100%;
15
+ display: flex;
16
+ flex-wrap: wrap;
17
+ justify-content: end;
18
+ align-items: center;
19
+ gap: var(--benev-space);
20
+ padding: var(--benev-pad);
21
+ }
22
+
23
+ button {
24
+ display: block;
25
+ margin-right: auto;
26
+
27
+ img {
28
+ display: block;
29
+ width: var(--benev-b-size);
30
+ height: var(--benev-b-size);
31
+ }
32
+ }
33
+
34
+ slot {
35
+ display: contents;
36
+ }
37
+
38
+ }`;
39
+ //# sourceMappingURL=style.css.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"style.css.js","sourceRoot":"","sources":["../../../s/dom/header/style.css.ts"],"names":[],"mappings":"AACA,OAAO,EAAC,GAAG,EAAC,MAAM,KAAK,CAAA;AACvB,eAAe,GAAG,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAoChB,CAAA"}
@@ -0,0 +1,3 @@
1
+ import { Shell } from "../../vitals/shell.js";
2
+ export declare const HeaderView: import("@e280/sly").ShadowView<[shell: Shell]>;
3
+ export declare const headerElement: (shell: Shell) => new () => HTMLElement;
@@ -0,0 +1,26 @@
1
+ import { html } from "lit";
2
+ import { shadow, shadowElement, useCss, useName } from "@e280/sly";
3
+ import { bDataPng } from "../../assets/b.png.js";
4
+ import { themeCss } from "../../css/theme.css.js";
5
+ import styleCss from "./style.css.js";
6
+ const Header = (shell) => {
7
+ const click = () => shell.toggle();
8
+ return html `
9
+ <nav part=nav ?data-opened=${shell.open} ?data-closed=${!shell.open}>
10
+ <button benev-button=naked title="b menu" @click=${click}>
11
+ <img part=img src="${bDataPng}" alt=""/>
12
+ </button>
13
+ <slot></slot>
14
+ </nav>
15
+ `;
16
+ };
17
+ export const HeaderView = shadow((shell) => {
18
+ useName("header");
19
+ useCss(themeCss, styleCss);
20
+ return Header(shell);
21
+ });
22
+ export const headerElement = (shell) => shadowElement(() => {
23
+ useCss(themeCss, styleCss);
24
+ return Header(shell);
25
+ });
26
+ //# sourceMappingURL=view.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"view.js","sourceRoot":"","sources":["../../../s/dom/header/view.ts"],"names":[],"mappings":"AACA,OAAO,EAAC,IAAI,EAAC,MAAM,KAAK,CAAA;AACxB,OAAO,EAAC,MAAM,EAAE,aAAa,EAAE,MAAM,EAAE,OAAO,EAAC,MAAM,WAAW,CAAA;AAEhE,OAAO,EAAC,QAAQ,EAAC,MAAM,uBAAuB,CAAA;AAC9C,OAAO,EAAC,QAAQ,EAAC,MAAM,wBAAwB,CAAA;AAC/C,OAAO,QAAQ,MAAM,gBAAgB,CAAA;AAErC,MAAM,MAAM,GAAG,CAAC,KAAY,EAAE,EAAE;IAC/B,MAAM,KAAK,GAAG,GAAG,EAAE,CAAC,KAAK,CAAC,MAAM,EAAE,CAAA;IAClC,OAAO,IAAI,CAAA;+BACmB,KAAK,CAAC,IAAI,iBAAiB,CAAC,KAAK,CAAC,IAAI;sDACf,KAAK;yBAClC,QAAQ;;;;EAI/B,CAAA;AACF,CAAC,CAAA;AAED,MAAM,CAAC,MAAM,UAAU,GAAG,MAAM,CAAC,CAAC,KAAY,EAAE,EAAE;IACjD,OAAO,CAAC,QAAQ,CAAC,CAAA;IACjB,MAAM,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAA;IAC1B,OAAO,MAAM,CAAC,KAAK,CAAC,CAAA;AACrB,CAAC,CAAC,CAAA;AAEF,MAAM,CAAC,MAAM,aAAa,GAAG,CAAC,KAAY,EAAE,EAAE,CAAC,aAAa,CAAC,GAAG,EAAE;IACjE,MAAM,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAA;IAC1B,OAAO,MAAM,CAAC,KAAK,CAAC,CAAA;AACrB,CAAC,CAAC,CAAA"}
@@ -0,0 +1,9 @@
1
+ import { Content } from "@e280/sly";
2
+ export declare class Loader {
3
+ #private;
4
+ element: HTMLElement;
5
+ anim: number;
6
+ original: HTMLTemplateElement;
7
+ constructor(element: HTMLElement, anim?: number);
8
+ load(getLoading: () => Content, getContent: () => Promise<Content>): Promise<void>;
9
+ }
@@ -0,0 +1,53 @@
1
+ import { nap } from "@e280/stz";
2
+ import { dom } from "@e280/sly";
3
+ import { consts } from "../../consts.js";
4
+ export class Loader {
5
+ element;
6
+ anim;
7
+ original;
8
+ #loading;
9
+ #content;
10
+ #operation = 0;
11
+ constructor(element, anim = consts.anim) {
12
+ this.element = element;
13
+ this.anim = anim;
14
+ this.original = document.createElement("template");
15
+ this.original.innerHTML = element.innerHTML;
16
+ this.#loading = document.createElement("div");
17
+ this.#loading.style.display = "contents";
18
+ this.#loading.slot = "loading";
19
+ this.#content = document.createElement("div");
20
+ this.#content.style.display = "contents";
21
+ dom.render(this.#content, Array.from(element.childNodes));
22
+ this.element.replaceChildren();
23
+ this.element.append(this.#loading, this.#content);
24
+ }
25
+ async load(getLoading, getContent) {
26
+ this.#operation += 1;
27
+ const operation = this.#operation;
28
+ const isLatest = () => (this.#operation === operation);
29
+ this.element.inert = true;
30
+ this.element.toggleAttribute("loading", true);
31
+ dom.render(this.#loading, getLoading());
32
+ try {
33
+ const [content] = await Promise.all([
34
+ getContent(),
35
+ nap(this.anim * 2),
36
+ ]);
37
+ if (isLatest()) {
38
+ this.element.toggleAttribute("loading", false);
39
+ this.element.inert = false;
40
+ dom.render(this.#content, content);
41
+ await nap(this.anim);
42
+ }
43
+ }
44
+ finally {
45
+ if (isLatest()) {
46
+ this.element.toggleAttribute("loading", false);
47
+ this.element.inert = false;
48
+ dom.render(this.#loading, null);
49
+ }
50
+ }
51
+ }
52
+ }
53
+ //# sourceMappingURL=loader.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"loader.js","sourceRoot":"","sources":["../../../s/dom/loader/loader.ts"],"names":[],"mappings":"AACA,OAAO,EAAC,GAAG,EAAC,MAAM,WAAW,CAAA;AAC7B,OAAO,EAAU,GAAG,EAAC,MAAM,WAAW,CAAA;AACtC,OAAO,EAAC,MAAM,EAAC,MAAM,iBAAiB,CAAA;AAEtC,MAAM,OAAO,MAAM;IAQT,OAAO;IACP,IAAI;IARb,QAAQ,CAAA;IAER,QAAQ,CAAA;IACR,QAAQ,CAAA;IACR,UAAU,GAAG,CAAC,CAAA;IAEd,YACS,OAAoB,EACpB,IAAI,GAAG,MAAM,CAAC,IAAI;uBADlB,OAAO;oBACP,IAAI;QAGZ,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC,aAAa,CAAC,UAAU,CAAC,CAAA;QAClD,IAAI,CAAC,QAAQ,CAAC,SAAS,GAAG,OAAO,CAAC,SAAS,CAAA;QAE3C,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC,CAAA;QAC7C,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,OAAO,GAAG,UAAU,CAAA;QACxC,IAAI,CAAC,QAAQ,CAAC,IAAI,GAAG,SAAS,CAAA;QAE9B,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC,CAAA;QAC7C,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,OAAO,GAAG,UAAU,CAAA;QACxC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,QAAQ,EAAE,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,CAAA;QAEzD,IAAI,CAAC,OAAO,CAAC,eAAe,EAAE,CAAA;QAC9B,IAAI,CAAC,OAAO,CAAC,MAAM,CAClB,IAAI,CAAC,QAAQ,EACb,IAAI,CAAC,QAAQ,CACb,CAAA;IACF,CAAC;IAED,KAAK,CAAC,IAAI,CACR,UAAyB,EACzB,UAAkC;QAGnC,IAAI,CAAC,UAAU,IAAI,CAAC,CAAA;QACpB,MAAM,SAAS,GAAG,IAAI,CAAC,UAAU,CAAA;QACjC,MAAM,QAAQ,GAAG,GAAG,EAAE,CAAC,CAAC,IAAI,CAAC,UAAU,KAAK,SAAS,CAAC,CAAA;QACtD,IAAI,CAAC,OAAO,CAAC,KAAK,GAAG,IAAI,CAAA;QACzB,IAAI,CAAC,OAAO,CAAC,eAAe,CAAC,SAAS,EAAE,IAAI,CAAC,CAAA;QAC7C,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,QAAQ,EAAE,UAAU,EAAE,CAAC,CAAA;QAEvC,IAAI,CAAC;YACJ,MAAM,CAAC,OAAO,CAAC,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC;gBACnC,UAAU,EAAE;gBACZ,GAAG,CAAC,IAAI,CAAC,IAAI,GAAG,CAAC,CAAC;aAClB,CAAC,CAAA;YAEF,IAAI,QAAQ,EAAE,EAAE,CAAC;gBAChB,IAAI,CAAC,OAAO,CAAC,eAAe,CAAC,SAAS,EAAE,KAAK,CAAC,CAAA;gBAC9C,IAAI,CAAC,OAAO,CAAC,KAAK,GAAG,KAAK,CAAA;gBAC1B,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAA;gBAClC,MAAM,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;YACrB,CAAC;QACF,CAAC;gBACO,CAAC;YACR,IAAI,QAAQ,EAAE,EAAE,CAAC;gBAChB,IAAI,CAAC,OAAO,CAAC,eAAe,CAAC,SAAS,EAAE,KAAK,CAAC,CAAA;gBAC9C,IAAI,CAAC,OAAO,CAAC,KAAK,GAAG,KAAK,CAAA;gBAC1B,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAA;YAChC,CAAC;QACF,CAAC;IACF,CAAC;CACD"}
@@ -0,0 +1,2 @@
1
+ declare const _default: import("lit").CSSResult;
2
+ export default _default;
@@ -0,0 +1,43 @@
1
+ import { css } from "lit";
2
+ export default css `@layer benev.view {
3
+
4
+ :host {
5
+ display: block;
6
+ position: relative;
7
+ }
8
+
9
+ .veil {
10
+ position: absolute;
11
+ inset: 0;
12
+ background: var(--benev-bg);
13
+ pointer-events: none;
14
+
15
+ opacity: 1;
16
+ visibility: visible;
17
+
18
+ transition:
19
+ opacity var(--benev-anim) linear,
20
+ visiblity 0ms linear allow-discrete;
21
+ }
22
+
23
+ :host(:not([loading])) .veil {
24
+ opacity: 0;
25
+ visiblity: hidden;
26
+ }
27
+
28
+ .veil {
29
+ display: flex;
30
+ flex-direction: column;
31
+ justify-content: center;
32
+ align-items: center;
33
+ gap: var(--benev-space);
34
+
35
+ > img {
36
+ width: 100%;
37
+ max-width: 10em;
38
+ aspect-ratio: 1 / 1;
39
+ }
40
+ }
41
+
42
+ }`;
43
+ //# sourceMappingURL=style.css.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"style.css.js","sourceRoot":"","sources":["../../../s/dom/loader/style.css.ts"],"names":[],"mappings":"AACA,OAAO,EAAC,GAAG,EAAC,MAAM,KAAK,CAAA;AACvB,eAAe,GAAG,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAwChB,CAAA"}
@@ -0,0 +1 @@
1
+ export declare const BenevLoader: new () => HTMLElement;
@@ -0,0 +1,17 @@
1
+ import { html } from "lit";
2
+ import { shadowElement, useCss } from "@e280/sly";
3
+ import { themeCss } from "../../css/theme.css.js";
4
+ import { bDataPng } from "../../assets/b.png.js";
5
+ import styleCss from "./style.css.js";
6
+ export const BenevLoader = shadowElement(() => {
7
+ useCss(themeCss, styleCss);
8
+ return html `
9
+ <slot></slot>
10
+
11
+ <div class=veil>
12
+ <img src="${bDataPng}" alt="" draggable="false"/>
13
+ <slot name=loading></slot>
14
+ </div>
15
+ `;
16
+ });
17
+ //# sourceMappingURL=view.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"view.js","sourceRoot":"","sources":["../../../s/dom/loader/view.ts"],"names":[],"mappings":"AACA,OAAO,EAAC,IAAI,EAAC,MAAM,KAAK,CAAA;AACxB,OAAO,EAAC,aAAa,EAAE,MAAM,EAAC,MAAM,WAAW,CAAA;AAC/C,OAAO,EAAC,QAAQ,EAAC,MAAM,wBAAwB,CAAA;AAC/C,OAAO,EAAC,QAAQ,EAAC,MAAM,uBAAuB,CAAA;AAC9C,OAAO,QAAQ,MAAM,gBAAgB,CAAA;AAErC,MAAM,CAAC,MAAM,WAAW,GAAG,aAAa,CAAC,GAAG,EAAE;IAC7C,MAAM,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAA;IAE1B,OAAO,IAAI,CAAA;;;;eAIG,QAAQ;;;EAGrB,CAAA;AACF,CAAC,CAAC,CAAA"}
@@ -0,0 +1,2 @@
1
+ declare const _default: import("lit").CSSResult;
2
+ export default _default;
@@ -0,0 +1,89 @@
1
+ import { css } from "lit";
2
+ export default css `@layer benev.view {
3
+
4
+ dialog {
5
+ border: 0;
6
+ padding: 0;
7
+ background: transparent;
8
+ overflow: visible;
9
+ max-height: unset;
10
+ font: inherit;
11
+ color: inherit;
12
+
13
+ position: fixed;
14
+ inset: 0 0 auto 0;
15
+ width: 100%;
16
+ max-width: var(--benev-site-width);
17
+ margin: auto;
18
+
19
+ transition: all var(--benev-anim) ease allow-discrete;
20
+ opacity: 0;
21
+ transform: translateY(-100%);
22
+ }
23
+
24
+ dialog > section:focus {
25
+ outline: none;
26
+ }
27
+
28
+ dialog > section {
29
+ --theight: min(20em, calc(100dvh - var(--benev-headroom)));
30
+ width: 100%;
31
+ height: var(--theight);
32
+
33
+ display: flex;
34
+ flex-direction: column;
35
+ justify-content: center;
36
+ align-items: center;
37
+
38
+ background: linear-gradient(
39
+ to bottom right,
40
+ var(--benev-tray),
41
+ oklch(from var(--benev-tray) calc(l * 0.6) calc(c * 1.2) h / alpha)
42
+ );
43
+ box-shadow: var(--benev-box-shadow);
44
+ box-shadow: 0 0 4em oklch(from var(--benev-tray) l c h / 60%);
45
+ border-radius: 0 0 var(--benev-round) var(--benev-round);
46
+ border: var(--benev-thick) solid oklch(from var(--benev-tray) calc(l * 1.2) calc(c * 1.2) h / alpha);
47
+ border-top: 0;
48
+ }
49
+
50
+ dialog[open] {
51
+ opacity: 1;
52
+ transform: translateY(0);
53
+ }
54
+
55
+ dialog[open][data-closing] {
56
+ opacity: 0;
57
+ transform: translateY(-100%);
58
+ }
59
+
60
+ dialog::backdrop {
61
+ background: rgb(0 0 0 / 0%);
62
+ backdrop-filter: blur(0);
63
+ transition: all var(--benev-anim) ease allow-discrete;
64
+ }
65
+
66
+ dialog[open]::backdrop {
67
+ background: var(--benev-backdrop);
68
+ backdrop-filter: var(--benev-blur);
69
+ }
70
+
71
+ dialog[open][data-closing]::backdrop {
72
+ background: rgb(0 0 0 / 0%);
73
+ backdrop-filter: blur(0);
74
+ }
75
+
76
+ @starting-style {
77
+ dialog[open] {
78
+ opacity: 0;
79
+ transform: translateY(-100%);
80
+ }
81
+
82
+ dialog[open]::backdrop {
83
+ background: rgb(0 0 0 / 0%);
84
+ backdrop-filter: blur(0);
85
+ }
86
+ }
87
+
88
+ }`;
89
+ //# sourceMappingURL=style.css.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"style.css.js","sourceRoot":"","sources":["../../../s/dom/menu/style.css.ts"],"names":[],"mappings":"AACA,OAAO,EAAC,GAAG,EAAC,MAAM,KAAK,CAAA;AACvB,eAAe,GAAG,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAsFhB,CAAA"}
@@ -0,0 +1 @@
1
+ export declare function clickBackdrop(fn: (event: Event) => void): (event: Event) => void;
@@ -0,0 +1,7 @@
1
+ export function clickBackdrop(fn) {
2
+ return (event) => {
3
+ if (event.target === event.currentTarget)
4
+ fn(event);
5
+ };
6
+ }
7
+ //# sourceMappingURL=click-backdrop.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"click-backdrop.js","sourceRoot":"","sources":["../../../../s/dom/menu/utils/click-backdrop.ts"],"names":[],"mappings":"AACA,MAAM,UAAU,aAAa,CAAC,EAA0B;IACvD,OAAO,CAAC,KAAY,EAAE,EAAE;QACvB,IAAI,KAAK,CAAC,MAAM,KAAK,KAAK,CAAC,aAAa;YACvC,EAAE,CAAC,KAAK,CAAC,CAAA;IACX,CAAC,CAAA;AACF,CAAC"}