@e280/shiny 0.1.0-15 → 0.1.0-17

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 (277) hide show
  1. package/README.md +34 -80
  2. package/package.json +18 -25
  3. package/s/_archive/demo/utils/lipsum.ts +19 -0
  4. package/s/_archive/demo/views/showcase/style.css.ts +53 -0
  5. package/s/_archive/demo/views/showcase/view.ts +54 -0
  6. package/s/_archive/index.html.ts +34 -0
  7. package/s/_archive/index.ts +19 -0
  8. package/s/_archive/utils/states.ts +15 -0
  9. package/s/demo/main.bundle.ts +16 -0
  10. package/s/demo/main.css +71 -0
  11. package/s/demo/parts/exhibit.ts +15 -0
  12. package/s/demo/utils/lipsum.ts +1 -1
  13. package/s/demo/views/codebox/style.css.ts +43 -0
  14. package/s/demo/views/codebox/use-prism-styles.ts +13 -0
  15. package/s/demo/views/codebox/view.ts +39 -0
  16. package/s/demo/views/showcase/style.css.ts +42 -11
  17. package/s/demo/views/showcase/view.ts +41 -45
  18. package/s/demo/views/stylebox/view.ts +21 -0
  19. package/s/index.html.ts +42 -29
  20. package/s/index.ts +1 -17
  21. package/s/test.ts +5 -0
  22. package/s/theme/parts/core.ts +34 -0
  23. package/s/theme/parts/reset.ts +20 -0
  24. package/s/theme/parts/vars.ts +41 -0
  25. package/s/theme/theme-string.ts +15 -0
  26. package/s/theme/theme.css.ts +7 -0
  27. package/s/views/button/showcase.ts +43 -0
  28. package/s/views/button/style.css.ts +110 -0
  29. package/s/views/button/view.ts +30 -0
  30. package/s/views/copy/parts/copy-status.ts +3 -0
  31. package/s/views/copy/parts/determine-base-status.ts +7 -0
  32. package/s/views/copy/parts/use-copier.ts +20 -0
  33. package/s/views/copy/showcase.ts +54 -0
  34. package/s/views/copy/style.css.ts +46 -0
  35. package/s/views/copy/view.ts +58 -0
  36. package/s/views/drawer/control.ts +31 -0
  37. package/s/views/drawer/showcase.ts +83 -0
  38. package/s/views/drawer/style.css.ts +128 -0
  39. package/s/views/drawer/view.ts +76 -0
  40. package/s/views/tabs/control.ts +31 -0
  41. package/s/views/tabs/showcase.ts +89 -0
  42. package/s/views/tabs/style.css.ts +46 -0
  43. package/s/views/tabs/view.ts +66 -0
  44. package/x/demo/main.bundle.js +13 -0
  45. package/x/demo/main.bundle.js.map +1 -0
  46. package/x/demo/main.bundle.min.js +794 -0
  47. package/x/demo/main.bundle.min.js.map +7 -0
  48. package/x/demo/main.css +71 -0
  49. package/x/demo/parts/exhibit.d.ts +11 -0
  50. package/x/demo/parts/exhibit.js +2 -0
  51. package/x/demo/parts/exhibit.js.map +1 -0
  52. package/x/demo/utils/lipsum.d.ts +1 -1
  53. package/x/demo/utils/lipsum.js +1 -1
  54. package/x/demo/utils/lipsum.js.map +1 -1
  55. package/x/demo/views/codebox/style.css.js +42 -0
  56. package/x/demo/views/codebox/style.css.js.map +1 -0
  57. package/x/demo/views/codebox/use-prism-styles.d.ts +1 -0
  58. package/x/demo/views/codebox/use-prism-styles.js +12 -0
  59. package/x/demo/views/codebox/use-prism-styles.js.map +1 -0
  60. package/x/demo/views/codebox/view.d.ts +2 -0
  61. package/x/demo/views/codebox/view.js +29 -0
  62. package/x/demo/views/codebox/view.js.map +1 -0
  63. package/x/demo/views/showcase/style.css.js +42 -11
  64. package/x/demo/views/showcase/style.css.js.map +1 -1
  65. package/x/demo/views/showcase/view.d.ts +2 -7
  66. package/x/demo/views/showcase/view.js +39 -35
  67. package/x/demo/views/showcase/view.js.map +1 -1
  68. package/x/demo/views/stylebox/view.d.ts +3 -0
  69. package/x/demo/views/stylebox/view.js +13 -0
  70. package/x/demo/views/stylebox/view.js.map +1 -0
  71. package/x/index.d.ts +1 -11
  72. package/x/index.html +212 -62
  73. package/x/index.html.js +40 -26
  74. package/x/index.html.js.map +1 -1
  75. package/x/index.js +1 -11
  76. package/x/index.js.map +1 -1
  77. package/x/test.js +3 -0
  78. package/x/test.js.map +1 -0
  79. package/x/theme/parts/core.d.ts +1 -0
  80. package/x/theme/parts/core.js +33 -0
  81. package/x/theme/parts/core.js.map +1 -0
  82. package/x/theme/parts/reset.d.ts +1 -0
  83. package/x/theme/parts/reset.js +19 -0
  84. package/x/theme/parts/reset.js.map +1 -0
  85. package/x/theme/parts/vars.d.ts +1 -0
  86. package/x/theme/parts/vars.js +34 -0
  87. package/x/theme/parts/vars.js.map +1 -0
  88. package/x/theme/theme-string.d.ts +1 -0
  89. package/x/theme/theme-string.js +14 -0
  90. package/x/theme/theme-string.js.map +1 -0
  91. package/x/theme/theme.css.d.ts +1 -0
  92. package/x/theme/theme.css.js +4 -0
  93. package/x/theme/theme.css.js.map +1 -0
  94. package/x/views/button/showcase.d.ts +1 -0
  95. package/x/views/button/showcase.js +41 -0
  96. package/x/views/button/showcase.js.map +1 -0
  97. package/x/views/button/style.css.js +109 -0
  98. package/x/views/button/style.css.js.map +1 -0
  99. package/x/views/button/view.d.ts +4 -0
  100. package/x/views/button/view.js +22 -0
  101. package/x/views/button/view.js.map +1 -0
  102. package/x/views/copy/parts/copy-status.d.ts +1 -0
  103. package/x/views/copy/parts/copy-status.js +2 -0
  104. package/x/views/copy/parts/copy-status.js.map +1 -0
  105. package/x/views/copy/parts/determine-base-status.d.ts +1 -0
  106. package/x/views/copy/parts/determine-base-status.js +6 -0
  107. package/x/views/copy/parts/determine-base-status.js.map +1 -0
  108. package/x/views/copy/parts/use-copier.d.ts +6 -0
  109. package/x/views/copy/parts/use-copier.js +13 -0
  110. package/x/views/copy/parts/use-copier.js.map +1 -0
  111. package/x/views/copy/showcase.d.ts +1 -0
  112. package/x/views/copy/showcase.js +51 -0
  113. package/x/views/copy/showcase.js.map +1 -0
  114. package/x/views/copy/style.css.js.map +1 -0
  115. package/x/views/copy/view.d.ts +4 -0
  116. package/x/views/copy/view.js +47 -0
  117. package/x/views/copy/view.js.map +1 -0
  118. package/x/{components → views}/drawer/control.d.ts +1 -1
  119. package/x/views/drawer/control.js.map +1 -0
  120. package/x/views/drawer/showcase.d.ts +1 -0
  121. package/x/views/drawer/showcase.js +75 -0
  122. package/x/views/drawer/showcase.js.map +1 -0
  123. package/x/{components → views}/drawer/style.css.js +1 -0
  124. package/x/views/drawer/style.css.js.map +1 -0
  125. package/x/views/drawer/view.d.ts +6 -0
  126. package/x/views/drawer/view.js +60 -0
  127. package/x/views/drawer/view.js.map +1 -0
  128. package/x/{components → views}/tabs/control.d.ts +2 -2
  129. package/x/{components → views}/tabs/control.js +3 -3
  130. package/x/views/tabs/control.js.map +1 -0
  131. package/x/views/tabs/showcase.d.ts +1 -0
  132. package/x/views/tabs/showcase.js +86 -0
  133. package/x/views/tabs/showcase.js.map +1 -0
  134. package/x/{components → views}/tabs/style.css.js +5 -5
  135. package/x/views/tabs/style.css.js.map +1 -0
  136. package/x/views/tabs/view.d.ts +5 -0
  137. package/x/views/tabs/view.js +52 -0
  138. package/x/views/tabs/view.js.map +1 -0
  139. package/x/components/button/component.d.ts +0 -6
  140. package/x/components/button/component.js +0 -25
  141. package/x/components/button/component.js.map +0 -1
  142. package/x/components/button/showcase.d.ts +0 -1
  143. package/x/components/button/showcase.js +0 -116
  144. package/x/components/button/showcase.js.map +0 -1
  145. package/x/components/button/style.css.js +0 -62
  146. package/x/components/button/style.css.js.map +0 -1
  147. package/x/components/copy/component.d.ts +0 -376
  148. package/x/components/copy/component.js +0 -63
  149. package/x/components/copy/component.js.map +0 -1
  150. package/x/components/copy/showcase.d.ts +0 -1
  151. package/x/components/copy/showcase.js +0 -48
  152. package/x/components/copy/showcase.js.map +0 -1
  153. package/x/components/copy/style.css.js.map +0 -1
  154. package/x/components/drawer/component.d.ts +0 -387
  155. package/x/components/drawer/component.js +0 -73
  156. package/x/components/drawer/component.js.map +0 -1
  157. package/x/components/drawer/control.js.map +0 -1
  158. package/x/components/drawer/showcase.d.ts +0 -1
  159. package/x/components/drawer/showcase.js +0 -105
  160. package/x/components/drawer/showcase.js.map +0 -1
  161. package/x/components/drawer/style.css.js.map +0 -1
  162. package/x/components/example/component.d.ts +0 -371
  163. package/x/components/example/component.js +0 -22
  164. package/x/components/example/component.js.map +0 -1
  165. package/x/components/example/showcase.d.ts +0 -1
  166. package/x/components/example/showcase.js +0 -30
  167. package/x/components/example/showcase.js.map +0 -1
  168. package/x/components/example/style.css.js +0 -10
  169. package/x/components/example/style.css.js.map +0 -1
  170. package/x/components/foundation.css.d.ts +0 -1
  171. package/x/components/foundation.css.js +0 -14
  172. package/x/components/foundation.css.js.map +0 -1
  173. package/x/components/framework.d.ts +0 -8
  174. package/x/components/framework.js +0 -5
  175. package/x/components/framework.js.map +0 -1
  176. package/x/components/raw-components.d.ts +0 -12
  177. package/x/components/raw-components.js +0 -13
  178. package/x/components/raw-components.js.map +0 -1
  179. package/x/components/tabs/component.d.ts +0 -374
  180. package/x/components/tabs/component.js +0 -60
  181. package/x/components/tabs/component.js.map +0 -1
  182. package/x/components/tabs/control.js.map +0 -1
  183. package/x/components/tabs/showcase.d.ts +0 -1
  184. package/x/components/tabs/showcase.js +0 -167
  185. package/x/components/tabs/showcase.js.map +0 -1
  186. package/x/components/tabs/style.css.js.map +0 -1
  187. package/x/demo/demo.bundle.js +0 -42
  188. package/x/demo/demo.bundle.js.map +0 -1
  189. package/x/demo/demo.bundle.min.js +0 -893
  190. package/x/demo/demo.bundle.min.js.map +0 -7
  191. package/x/demo/lipsum.d.ts +0 -2
  192. package/x/demo/lipsum.js +0 -4
  193. package/x/demo/lipsum.js.map +0 -1
  194. package/x/demo/views/exhibit/style.css.d.ts +0 -2
  195. package/x/demo/views/exhibit/style.css.js +0 -84
  196. package/x/demo/views/exhibit/style.css.js.map +0 -1
  197. package/x/demo/views/exhibit/view.d.ts +0 -29
  198. package/x/demo/views/exhibit/view.js +0 -40
  199. package/x/demo/views/exhibit/view.js.map +0 -1
  200. package/x/demo/viewsets.d.ts +0 -17
  201. package/x/demo/viewsets.js +0 -9
  202. package/x/demo/viewsets.js.map +0 -1
  203. package/x/install/aura.bundle.js +0 -5
  204. package/x/install/aura.bundle.js.map +0 -1
  205. package/x/install/aura.bundle.min.js +0 -471
  206. package/x/install/aura.bundle.min.js.map +0 -7
  207. package/x/install/plain.bundle.d.ts +0 -1
  208. package/x/install/plain.bundle.js +0 -5
  209. package/x/install/plain.bundle.js.map +0 -1
  210. package/x/install/plain.bundle.min.js +0 -398
  211. package/x/install/plain.bundle.min.js.map +0 -7
  212. package/x/shiny.d.ts +0 -47
  213. package/x/shiny.js +0 -8
  214. package/x/shiny.js.map +0 -1
  215. package/x/tests.test.d.ts +0 -1
  216. package/x/tests.test.js +0 -3
  217. package/x/tests.test.js.map +0 -1
  218. package/x/themes/aura.css.d.ts +0 -1
  219. package/x/themes/aura.css.js +0 -85
  220. package/x/themes/aura.css.js.map +0 -1
  221. package/x/themes/index.barrel.d.ts +0 -2
  222. package/x/themes/index.barrel.js +0 -3
  223. package/x/themes/index.barrel.js.map +0 -1
  224. package/x/themes/index.d.ts +0 -2
  225. package/x/themes/index.js +0 -2
  226. package/x/themes/index.js.map +0 -1
  227. package/x/themes/infra/css-vars.d.ts +0 -15
  228. package/x/themes/infra/css-vars.js +0 -22
  229. package/x/themes/infra/css-vars.js.map +0 -1
  230. package/x/themes/plain.css.d.ts +0 -1
  231. package/x/themes/plain.css.js +0 -10
  232. package/x/themes/plain.css.js.map +0 -1
  233. /package/s/{components → _archive/components}/button/component.ts +0 -0
  234. /package/s/{components → _archive/components}/button/showcase.ts +0 -0
  235. /package/s/{components → _archive/components}/button/style.css.ts +0 -0
  236. /package/s/{components → _archive/components}/copy/component.ts +0 -0
  237. /package/s/{components → _archive/components}/copy/showcase.ts +0 -0
  238. /package/s/{components → _archive/components}/copy/style.css.ts +0 -0
  239. /package/s/{components → _archive/components}/drawer/component.ts +0 -0
  240. /package/s/{components → _archive/components}/drawer/control.ts +0 -0
  241. /package/s/{components → _archive/components}/drawer/showcase.ts +0 -0
  242. /package/s/{components → _archive/components}/drawer/style.css.ts +0 -0
  243. /package/s/{components → _archive/components}/example/component.ts +0 -0
  244. /package/s/{components → _archive/components}/example/showcase.ts +0 -0
  245. /package/s/{components → _archive/components}/example/style.css.ts +0 -0
  246. /package/s/{components → _archive/components}/foundation.css.ts +0 -0
  247. /package/s/{components → _archive/components}/framework.ts +0 -0
  248. /package/s/{components → _archive/components}/raw-components.ts +0 -0
  249. /package/s/{components → _archive/components}/tabs/component.ts +0 -0
  250. /package/s/{components → _archive/components}/tabs/control.ts +0 -0
  251. /package/s/{components → _archive/components}/tabs/showcase.ts +0 -0
  252. /package/s/{components → _archive/components}/tabs/style.css.ts +0 -0
  253. /package/s/{demo → _archive/demo}/demo.bundle.ts +0 -0
  254. /package/s/{demo → _archive/demo}/demo.css +0 -0
  255. /package/s/{demo → _archive/demo}/lipsum.ts +0 -0
  256. /package/s/{demo → _archive/demo}/views/exhibit/style.css.ts +0 -0
  257. /package/s/{demo → _archive/demo}/views/exhibit/view.ts +0 -0
  258. /package/s/{demo → _archive/demo}/viewsets.ts +0 -0
  259. /package/s/{install → _archive/install}/aura.bundle.ts +0 -0
  260. /package/s/{install → _archive/install}/plain.bundle.ts +0 -0
  261. /package/s/{shiny.ts → _archive/shiny.ts} +0 -0
  262. /package/s/{tests.test.ts → _archive/tests.test.ts} +0 -0
  263. /package/s/{themes → _archive/themes}/aura.css.ts +0 -0
  264. /package/s/{themes → _archive/themes}/index.barrel.ts +0 -0
  265. /package/s/{themes → _archive/themes}/index.ts +0 -0
  266. /package/s/{themes → _archive/themes}/infra/css-vars.ts +0 -0
  267. /package/s/{themes → _archive/themes}/plain.css.ts +0 -0
  268. /package/x/{demo → _archive/demo}/demo.css +0 -0
  269. /package/x/demo/{demo.bundle.d.ts → main.bundle.d.ts} +0 -0
  270. /package/x/{components/button → demo/views/codebox}/style.css.d.ts +0 -0
  271. /package/x/{install/aura.bundle.d.ts → test.d.ts} +0 -0
  272. /package/x/{components/copy → views/button}/style.css.d.ts +0 -0
  273. /package/x/{components/drawer → views/copy}/style.css.d.ts +0 -0
  274. /package/x/{components → views}/copy/style.css.js +0 -0
  275. /package/x/{components → views}/drawer/control.js +0 -0
  276. /package/x/{components/example → views/drawer}/style.css.d.ts +0 -0
  277. /package/x/{components → views}/tabs/style.css.d.ts +0 -0
@@ -0,0 +1,109 @@
1
+ import { css } from "lit";
2
+ export default css `@layer view {
3
+
4
+ :host {
5
+ display: inline-flex;
6
+ width: max-content;
7
+ height: max-content;
8
+
9
+ cursor: pointer;
10
+ background: transparent;
11
+ user-select: none;
12
+
13
+ --button-padding: 0.3em 0.7em;
14
+ --button-color: var(--calm);
15
+ }
16
+
17
+ slot {
18
+ z-index: 1;
19
+ position: relative;
20
+ display: block;
21
+ }
22
+
23
+ button {
24
+ opacity: 0.8;
25
+ position: relative;
26
+
27
+ font: inherit;
28
+ cursor: inherit;
29
+ text-shadow: inherit;
30
+ font-weight: medium;
31
+
32
+ display: inline-flex;
33
+ justify-content: center;
34
+ align-items: center;
35
+
36
+ width: 100%;
37
+ height: 100%;
38
+ padding: var(--button-padding);
39
+
40
+ border-radius: 2em;
41
+ background: var(--button-color);
42
+ text-shadow: 0.1em 0.1em 0.1em #0004;
43
+ box-shadow: 0.1em 0.2em 0.3em #0002;
44
+
45
+ color: white;
46
+ border: none;
47
+ background: linear-gradient(
48
+ to bottom right,
49
+ color-mix(in oklab, var(--button-color), white 40%),
50
+ color-mix(in oklab, var(--button-color), black 20%)
51
+ );
52
+
53
+ &::before {
54
+ content: "";
55
+ display: block;
56
+ position: absolute;
57
+ z-index: 0;
58
+ inset: 0.15em;
59
+ border-radius: inherit;
60
+ background: color-mix(in oklab, var(--button-color), #0004 50%);
61
+ }
62
+
63
+ &:not([disabled]):is(:hover, :focus-visible) { opacity: 1; }
64
+ &:not([disabled]):active { opacity: 0.6; }
65
+
66
+ &[data-vibe="lame"] { --button-color: var(--lame); }
67
+ &[data-vibe="angry"] { --button-color: var(--angry); }
68
+ &[data-vibe="zesty"] { --button-color: var(--zesty); }
69
+ &[data-vibe="happy"] { --button-color: var(--happy); }
70
+ &[data-vibe="calm"] { --button-color: var(--calm); }
71
+ &[data-vibe="sad"] { --button-color: var(--sad); }
72
+ &[data-vibe="quirky"] { --button-color: var(--quirky); }
73
+ &[data-vibe="tabbed"] { --button-color: var(--tabbed); }
74
+
75
+ > * {
76
+ position: relative;
77
+ z-index: 1;
78
+ }
79
+
80
+ &[disabled] {
81
+ cursor: default;
82
+ }
83
+
84
+ &[hidden] {
85
+ display: none !important;
86
+ }
87
+ }
88
+
89
+ :host([data-tabbed]) > button {
90
+ opacity: 1;
91
+ filter: brightness(120%);
92
+ }
93
+
94
+ :host(:not([data-tabbed])) > button[disabled] {
95
+ --button-color: var(--lame);
96
+ }
97
+
98
+ :host([data-snug]:not([data-last])) > button {
99
+ border-top-right-radius: 0;
100
+ border-bottom-right-radius: 0;
101
+ }
102
+
103
+ :host([data-snug]:not([data-first])) > button {
104
+ border-top-left-radius: 0;
105
+ border-bottom-left-radius: 0;
106
+ }
107
+
108
+ }`;
109
+ //# sourceMappingURL=style.css.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"style.css.js","sourceRoot":"","sources":["../../../s/views/button/style.css.ts"],"names":[],"mappings":"AACA,OAAO,EAAC,GAAG,EAAC,MAAM,KAAK,CAAA;AACvB,eAAe,GAAG,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EA0GhB,CAAA"}
@@ -0,0 +1,4 @@
1
+ import { Content } from "@e280/sly";
2
+ export declare const ShinyButton: import("@e280/sly").ShadowView<[content?: Content, options?: {
3
+ vibe?: "calm" | "lame" | "happy" | "sad" | "angry" | "zesty" | "quirky";
4
+ } | undefined]>;
@@ -0,0 +1,22 @@
1
+ import { html } from "lit";
2
+ import { shadow, useCss, useName, useAttrs } from "@e280/sly";
3
+ import styleCss from "./style.css.js";
4
+ import { themeCss } from "../../theme/theme.css.js";
5
+ export const ShinyButton = shadow((content, options = {}) => {
6
+ useName("shiny-button");
7
+ useCss(themeCss, styleCss);
8
+ const attrs = useAttrs({
9
+ hidden: Boolean,
10
+ disabled: Boolean,
11
+ });
12
+ return html `
13
+ <button
14
+ part=button
15
+ data-vibe="${options.vibe ?? "calm"}"
16
+ ?disabled="${attrs.disabled}"
17
+ ?hidden="${attrs.hidden}">
18
+ <slot>${content}</slot>
19
+ </button>
20
+ `;
21
+ });
22
+ //# sourceMappingURL=view.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"view.js","sourceRoot":"","sources":["../../../s/views/button/view.ts"],"names":[],"mappings":"AACA,OAAO,EAAC,IAAI,EAAC,MAAM,KAAK,CAAA;AACxB,OAAO,EAAU,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,QAAQ,EAAC,MAAM,WAAW,CAAA;AAEpE,OAAO,QAAQ,MAAM,gBAAgB,CAAA;AACrC,OAAO,EAAC,QAAQ,EAAC,MAAM,0BAA0B,CAAA;AAEjD,MAAM,CAAC,MAAM,WAAW,GAAG,MAAM,CAAC,CAAC,OAAiB,EAAE,UAEjD,EAAE,EAAE,EAAE;IAEV,OAAO,CAAC,cAAc,CAAC,CAAA;IACvB,MAAM,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAA;IAE1B,MAAM,KAAK,GAAG,QAAQ,CAAC;QACtB,MAAM,EAAE,OAAO;QACf,QAAQ,EAAE,OAAO;KACjB,CAAC,CAAA;IAEF,OAAO,IAAI,CAAA;;;gBAGI,OAAO,CAAC,IAAI,IAAI,MAAM;gBACtB,KAAK,CAAC,QAAQ;cAChB,KAAK,CAAC,MAAM;WACf,OAAO;;EAEhB,CAAA;AACF,CAAC,CAAC,CAAA"}
@@ -0,0 +1 @@
1
+ export type CopyStatus = "neutral" | "good" | "bad" | "invalid";
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=copy-status.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"copy-status.js","sourceRoot":"","sources":["../../../../s/views/copy/parts/copy-status.ts"],"names":[],"mappings":""}
@@ -0,0 +1 @@
1
+ export declare function determineBaseStatus(text: string | undefined): "neutral" | "invalid";
@@ -0,0 +1,6 @@
1
+ export function determineBaseStatus(text) {
2
+ return text === undefined
3
+ ? "invalid"
4
+ : "neutral";
5
+ }
6
+ //# sourceMappingURL=determine-base-status.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"determine-base-status.js","sourceRoot":"","sources":["../../../../s/views/copy/parts/determine-base-status.ts"],"names":[],"mappings":"AACA,MAAM,UAAU,mBAAmB,CAAC,IAAwB;IAC3D,OAAO,IAAI,KAAK,SAAS;QACxB,CAAC,CAAC,SAAS;QACX,CAAC,CAAC,SAAS,CAAA;AACb,CAAC"}
@@ -0,0 +1,6 @@
1
+ import { CopyStatus } from "./copy-status.js";
2
+ export declare function useCopier(text: string | undefined, ms: number): {
3
+ reset: import("@e280/stz").DebounceReturn<() => Promise<CopyStatus>>;
4
+ flash: (status: CopyStatus) => Promise<void>;
5
+ status: CopyStatus;
6
+ };
@@ -0,0 +1,13 @@
1
+ import { debounce } from "@e280/stz";
2
+ import { useOnce, useSignal } from "@e280/sly";
3
+ import { determineBaseStatus } from "./determine-base-status.js";
4
+ export function useCopier(text, ms) {
5
+ const $status = useSignal(determineBaseStatus(text));
6
+ const reset = useOnce(() => debounce(ms, () => $status.set(determineBaseStatus(text))));
7
+ const flash = useOnce(() => async (status) => {
8
+ await $status.set(status);
9
+ await reset();
10
+ });
11
+ return { reset, flash, status: $status() };
12
+ }
13
+ //# sourceMappingURL=use-copier.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"use-copier.js","sourceRoot":"","sources":["../../../../s/views/copy/parts/use-copier.ts"],"names":[],"mappings":"AACA,OAAO,EAAC,QAAQ,EAAC,MAAM,WAAW,CAAA;AAClC,OAAO,EAAC,OAAO,EAAE,SAAS,EAAC,MAAM,WAAW,CAAA;AAG5C,OAAO,EAAC,mBAAmB,EAAC,MAAM,4BAA4B,CAAA;AAE9D,MAAM,UAAU,SAAS,CAAC,IAAwB,EAAE,EAAU;IAC7D,MAAM,OAAO,GAAG,SAAS,CAAa,mBAAmB,CAAC,IAAI,CAAC,CAAC,CAAA;IAEhE,MAAM,KAAK,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC,QAAQ,CAAC,EAAE,EAAE,GAAG,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,mBAAmB,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAA;IAEvF,MAAM,KAAK,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC,KAAK,EAAC,MAAkB,EAAE,EAAE;QACvD,MAAM,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,CAAA;QACzB,MAAM,KAAK,EAAE,CAAA;IACd,CAAC,CAAC,CAAA;IAEF,OAAO,EAAC,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,EAAC,CAAA;AACzC,CAAC"}
@@ -0,0 +1 @@
1
+ export declare const copyShowcase: () => import("@e280/sly").Content;
@@ -0,0 +1,51 @@
1
+ import { css, html } from "lit";
2
+ import { ShinyCopy } from "./view.js";
3
+ import { exhibit } from "../../demo/parts/exhibit.js";
4
+ import { Showcase } from "../../demo/views/showcase/view.js";
5
+ export const copyShowcase = () => Showcase("ShinyCopy", [
6
+ exhibit({
7
+ name: "normal",
8
+ explain: "click-to-copy button.",
9
+ render: () => ShinyCopy("hello world"),
10
+ styleboxCss: css `
11
+ :host {
12
+ font-size: 5em;
13
+ }
14
+ `,
15
+ js: `
16
+ ShinyCopy("hello world")
17
+ `,
18
+ css: css `
19
+ [view="shiny-copy"] {
20
+ --shiny-happy: #0fa;
21
+ --shiny-angry: #f50;
22
+ --shiny-lame: #8888;
23
+ --shiny-inactive-opacity: 0.5;
24
+ }
25
+ `,
26
+ }),
27
+ exhibit({
28
+ name: "fail",
29
+ explain: html `
30
+ <p>click-to-copy button. <em>deliberately fails so you can see.</em></p>
31
+ `,
32
+ render: () => ShinyCopy("hello world", { fail: true }),
33
+ styleboxCss: css `
34
+ :host {
35
+ font-size: 4em;
36
+ }
37
+ `,
38
+ js: `
39
+ ShinyCopy("hello world", {fail: true})
40
+ `,
41
+ css: css `
42
+ [view="shiny-copy"] {
43
+ --shiny-happy: #0fa;
44
+ --shiny-angry: #f50;
45
+ --shiny-lame: #8888;
46
+ --shiny-inactive-opacity: 0.5;
47
+ }
48
+ `,
49
+ }),
50
+ ]);
51
+ //# sourceMappingURL=showcase.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"showcase.js","sourceRoot":"","sources":["../../../s/views/copy/showcase.ts"],"names":[],"mappings":"AACA,OAAO,EAAC,GAAG,EAAE,IAAI,EAAC,MAAM,KAAK,CAAA;AAC7B,OAAO,EAAC,SAAS,EAAC,MAAM,WAAW,CAAA;AACnC,OAAO,EAAC,OAAO,EAAC,MAAM,6BAA6B,CAAA;AACnD,OAAO,EAAC,QAAQ,EAAC,MAAM,mCAAmC,CAAA;AAE1D,MAAM,CAAC,MAAM,YAAY,GAAG,GAAG,EAAE,CAAC,QAAQ,CAAC,WAAW,EAAE;IACvD,OAAO,CAAC;QACP,IAAI,EAAE,QAAQ;QACd,OAAO,EAAE,uBAAuB;QAChC,MAAM,EAAE,GAAG,EAAE,CAAC,SAAS,CAAC,aAAa,CAAC;QACtC,WAAW,EAAE,GAAG,CAAA;;;;GAIf;QACD,EAAE,EAAE;;GAEH;QACD,GAAG,EAAE,GAAG,CAAA;;;;;;;GAOP;KACD,CAAC;IAEF,OAAO,CAAC;QACP,IAAI,EAAE,MAAM;QACZ,OAAO,EAAE,IAAI,CAAA;;GAEZ;QACD,MAAM,EAAE,GAAG,EAAE,CAAC,SAAS,CAAC,aAAa,EAAE,EAAC,IAAI,EAAE,IAAI,EAAC,CAAC;QACpD,WAAW,EAAE,GAAG,CAAA;;;;GAIf;QACD,EAAE,EAAE;;GAEH;QACD,GAAG,EAAE,GAAG,CAAA;;;;;;;GAOP;KACD,CAAC;CACF,CAAC,CAAA"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"style.css.js","sourceRoot":"","sources":["../../../s/views/copy/style.css.ts"],"names":[],"mappings":"AACA,OAAO,EAAC,GAAG,EAAC,MAAM,KAAK,CAAA;AACvB,eAAe,GAAG,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EA0ChB,CAAA"}
@@ -0,0 +1,4 @@
1
+ export declare const ShinyCopy: import("@e280/sly").ShadowView<[text: string | undefined, options?: {
2
+ ms?: number;
3
+ fail?: boolean;
4
+ } | undefined]>;
@@ -0,0 +1,47 @@
1
+ import { html } from "lit";
2
+ import { shadow, useCss, useName } from "@e280/sly";
3
+ import styleCss from "./style.css.js";
4
+ import clipboardSvg from "../../icons/tabler/clipboard.svg.js";
5
+ import clipboardXFilledSvg from "../../icons/tabler/clipboard-x-filled.svg.js";
6
+ import clipboardCheckFilledSvg from "../../icons/tabler/clipboard-check-filled.svg.js";
7
+ import { useCopier } from "./parts/use-copier.js";
8
+ import { themeCss } from "../../theme/theme.css.js";
9
+ export const ShinyCopy = shadow((text, options = {}) => {
10
+ useName("shiny-copy");
11
+ useCss(themeCss, styleCss);
12
+ const copier = useCopier(text, options.ms ?? 1000);
13
+ async function click() {
14
+ if (text === undefined)
15
+ return;
16
+ try {
17
+ if (options.fail)
18
+ throw new Error("copy failed on purpose for testing purposes");
19
+ await navigator.clipboard.writeText(text);
20
+ await copier.flash("good");
21
+ }
22
+ catch (error) {
23
+ console.error(error);
24
+ await copier.flash("bad");
25
+ }
26
+ }
27
+ return html `
28
+ <button data-status="${copier.status}" @click="${click}">
29
+ ${(() => {
30
+ switch (copier.status) {
31
+ case "neutral":
32
+ return clipboardSvg;
33
+ case "invalid":
34
+ return clipboardSvg;
35
+ case "good":
36
+ return clipboardCheckFilledSvg;
37
+ case "bad":
38
+ return clipboardXFilledSvg;
39
+ default:
40
+ throw new Error(`unknown copy status`);
41
+ }
42
+ })()}
43
+ <slot></slot>
44
+ </button>
45
+ `;
46
+ });
47
+ //# sourceMappingURL=view.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"view.js","sourceRoot":"","sources":["../../../s/views/copy/view.ts"],"names":[],"mappings":"AACA,OAAO,EAAC,IAAI,EAAC,MAAM,KAAK,CAAA;AACxB,OAAO,EAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAC,MAAM,WAAW,CAAA;AAEjD,OAAO,QAAQ,MAAM,gBAAgB,CAAA;AACrC,OAAO,YAAY,MAAM,qCAAqC,CAAA;AAC9D,OAAO,mBAAmB,MAAM,8CAA8C,CAAA;AAC9E,OAAO,uBAAuB,MAAM,kDAAkD,CAAA;AAEtF,OAAO,EAAC,SAAS,EAAC,MAAM,uBAAuB,CAAA;AAC/C,OAAO,EAAC,QAAQ,EAAC,MAAM,0BAA0B,CAAA;AAEjD,MAAM,CAAC,MAAM,SAAS,GAAG,MAAM,CAAC,CAC9B,IAAwB,EACxB,UAAyC,EAAE,EAC1C,EAAE;IAEJ,OAAO,CAAC,YAAY,CAAC,CAAA;IACrB,MAAM,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAA;IAC1B,MAAM,MAAM,GAAG,SAAS,CAAC,IAAI,EAAE,OAAO,CAAC,EAAE,IAAI,IAAI,CAAC,CAAA;IAElD,KAAK,UAAU,KAAK;QACnB,IAAI,IAAI,KAAK,SAAS;YAAE,OAAM;QAC9B,IAAI,CAAC;YACJ,IAAI,OAAO,CAAC,IAAI;gBACf,MAAM,IAAI,KAAK,CAAC,6CAA6C,CAAC,CAAA;YAC/D,MAAM,SAAS,CAAC,SAAS,CAAC,SAAS,CAAC,IAAI,CAAC,CAAA;YACzC,MAAM,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,CAAA;QAC3B,CAAC;QACD,OAAO,KAAK,EAAE,CAAC;YACd,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,CAAA;YACpB,MAAM,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,CAAA;QAC1B,CAAC;IACF,CAAC;IAED,OAAO,IAAI,CAAA;yBACa,MAAM,CAAC,MAAM,aAAa,KAAK;KACnD,CAAC,GAAG,EAAE;QAAE,QAAQ,MAAM,CAAC,MAAM,EAAE,CAAC;YACjC,KAAK,SAAS;gBACb,OAAO,YAAY,CAAA;YAEpB,KAAK,SAAS;gBACb,OAAO,YAAY,CAAA;YAEpB,KAAK,MAAM;gBACV,OAAO,uBAAuB,CAAA;YAE/B,KAAK,KAAK;gBACT,OAAO,mBAAmB,CAAA;YAE3B;gBACC,MAAM,IAAI,KAAK,CAAC,qBAAqB,CAAC,CAAA;QACxC,CAAC;IAAA,CAAC,CAAC,EAAE;;;EAGN,CAAA;AACF,CAAC,CAAC,CAAA"}
@@ -1,5 +1,5 @@
1
1
  export declare class DrawerControl {
2
- $open: import("@e280/strata").SignalFn<boolean>;
2
+ $open: import("@e280/strata").Signal<boolean>;
3
3
  constructor(startOpen?: boolean);
4
4
  get isOpen(): boolean;
5
5
  setOpen(value: boolean): Promise<boolean>;
@@ -0,0 +1 @@
1
+ {"version":3,"file":"control.js","sourceRoot":"","sources":["../../../s/views/drawer/control.ts"],"names":[],"mappings":"AACA,OAAO,EAAC,MAAM,EAAC,MAAM,cAAc,CAAA;AAEnC,MAAM,OAAO,aAAa;IACzB,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,CAAA;IAErB,YAAY,SAAS,GAAG,KAAK;QAC5B,IAAI,SAAS;YAAE,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,CAAA;IACpC,CAAC;IAED,IAAI,MAAM;QACT,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,EAAE,CAAA;IACxB,CAAC;IAED,KAAK,CAAC,OAAO,CAAC,KAAc;QAC3B,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,CAAA;IAC7B,CAAC;IAED,IAAI,GAAG,KAAK,IAAG,EAAE;QAChB,MAAM,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAA;IACzB,CAAC,CAAA;IAED,KAAK,GAAG,KAAK,IAAG,EAAE;QACjB,MAAM,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAA;IAC1B,CAAC,CAAA;IAED,MAAM,GAAG,KAAK,IAAG,EAAE;QAClB,OAAO,IAAI,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAA;IAClC,CAAC,CAAA;CACD"}
@@ -0,0 +1 @@
1
+ export declare const drawerShowcase: () => import("@e280/sly").Content;
@@ -0,0 +1,75 @@
1
+ import { css, html } from "lit";
2
+ import { ShinyDrawer } from "./view.js";
3
+ import { lipsum } from "../../demo/utils/lipsum.js";
4
+ import { exhibit } from "../../demo/parts/exhibit.js";
5
+ import { Showcase } from "../../demo/views/showcase/view.js";
6
+ const styleboxCss = css `
7
+ :host {
8
+ font-size: 1em;
9
+ width: 100%;
10
+ min-height: 100%;
11
+ }
12
+ p + p {
13
+ margin-top: var(--padding);
14
+ }
15
+ `;
16
+ const customCss = css `
17
+ [slot=plate] { padding-top: 2em; }
18
+ [view="shiny-drawer"] {
19
+ --slate-bg: color-mix(in oklch, var(--calm), #444);
20
+ &::part(slate) { padding: 1em; }
21
+ &:state(left)::part(slate) { border-bottom-right-radius: 0.5em; }
22
+ &:state(right)::part(slate) { border-bottom-left-radius: 0.5em; }
23
+ }
24
+ `;
25
+ const render = (side) => (ShinyDrawer.with({
26
+ props: [{ button: true, side }],
27
+ children: html `
28
+ <header>${lipsum.takeFirst()}</header>
29
+ <section slot=plate>
30
+ <p>${lipsum.takeFirst()}</p>
31
+ <p>${lipsum.takeFirst()}</p>
32
+ </section>
33
+ `,
34
+ }));
35
+ export const drawerShowcase = () => Showcase("ShinyDrawer", [
36
+ exhibit({
37
+ name: "left",
38
+ explain: "slide-out panel. button optional.",
39
+ styleboxCss,
40
+ css: customCss,
41
+ render: () => render("left"),
42
+ js: `
43
+ ShinyDrawer.with({
44
+ props: [{button: true, side: "left"}],
45
+ children: html\`
46
+ <header>lorem kettlebell..</header>
47
+ <section slot=plate>
48
+ <p>lorem protein..</p>
49
+ <p>lorem caffeine..</p>
50
+ </section>
51
+ \`,
52
+ })
53
+ `,
54
+ }),
55
+ exhibit({
56
+ name: "right",
57
+ explain: "slide-out panel. button optional.",
58
+ styleboxCss,
59
+ css: customCss,
60
+ render: () => render("right"),
61
+ js: `
62
+ ShinyDrawer.with({
63
+ props: [{button: true, side: "right"}],
64
+ children: html\`
65
+ <header>lorem kettlebell..</header>
66
+ <section slot=plate>
67
+ <p>lorem protein..</p>
68
+ <p>lorem caffeine..</p>
69
+ </section>
70
+ \`,
71
+ })
72
+ `,
73
+ }),
74
+ ]);
75
+ //# sourceMappingURL=showcase.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"showcase.js","sourceRoot":"","sources":["../../../s/views/drawer/showcase.ts"],"names":[],"mappings":"AACA,OAAO,EAAC,GAAG,EAAE,IAAI,EAAC,MAAM,KAAK,CAAA;AAC7B,OAAO,EAAC,WAAW,EAAC,MAAM,WAAW,CAAA;AACrC,OAAO,EAAC,MAAM,EAAC,MAAM,4BAA4B,CAAA;AACjD,OAAO,EAAC,OAAO,EAAC,MAAM,6BAA6B,CAAA;AACnD,OAAO,EAAC,QAAQ,EAAC,MAAM,mCAAmC,CAAA;AAE1D,MAAM,WAAW,GAAG,GAAG,CAAA;;;;;;;;;CAStB,CAAA;AAED,MAAM,SAAS,GAAG,GAAG,CAAA;;;;;;;;CAQpB,CAAA;AAED,MAAM,MAAM,GAAG,CAAC,IAAsB,EAAE,EAAE,CAAC,CAC1C,WAAW,CAAC,IAAI,CAAC;IAChB,KAAK,EAAE,CAAC,EAAC,MAAM,EAAE,IAAI,EAAE,IAAI,EAAC,CAAC;IAC7B,QAAQ,EAAE,IAAI,CAAA;aACH,MAAM,CAAC,SAAS,EAAE;;SAEtB,MAAM,CAAC,SAAS,EAAE;SAClB,MAAM,CAAC,SAAS,EAAE;;GAExB;CACD,CAAC,CACF,CAAA;AAED,MAAM,CAAC,MAAM,cAAc,GAAG,GAAG,EAAE,CAAC,QAAQ,CAAC,aAAa,EAAE;IAC3D,OAAO,CAAC;QACP,IAAI,EAAE,MAAM;QACZ,OAAO,EAAE,mCAAmC;QAC5C,WAAW;QACX,GAAG,EAAE,SAAS;QACd,MAAM,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC;QAC5B,EAAE,EAAE;;;;;;;;;;;GAWH;KACD,CAAC;IAEF,OAAO,CAAC;QACP,IAAI,EAAE,OAAO;QACb,OAAO,EAAE,mCAAmC;QAC5C,WAAW;QACX,GAAG,EAAE,SAAS;QACd,MAAM,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC;QAC7B,EAAE,EAAE;;;;;;;;;;;GAWH;KACD,CAAC;CACF,CAAC,CAAA"}
@@ -5,6 +5,7 @@ export default css `@layer view {
5
5
  display: block;
6
6
  width: 100%;
7
7
  height: 100%;
8
+
8
9
  --slate-bg: transparent;
9
10
  --button-size: 2em;
10
11
  --blanket-backdrop-filter: blur(0.5em);
@@ -0,0 +1 @@
1
+ {"version":3,"file":"style.css.js","sourceRoot":"","sources":["../../../s/views/drawer/style.css.ts"],"names":[],"mappings":"AACA,OAAO,EAAC,GAAG,EAAC,MAAM,KAAK,CAAA;AACvB,eAAe,GAAG,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EA4HhB,CAAA"}
@@ -0,0 +1,6 @@
1
+ import { DrawerControl } from "./control.js";
2
+ export declare const ShinyDrawer: import("@e280/sly").ShadowView<[options?: {
3
+ button?: boolean;
4
+ side?: "left" | "right";
5
+ control?: DrawerControl;
6
+ } | undefined]>;
@@ -0,0 +1,60 @@
1
+ import { html } from "lit";
2
+ import { dom, shadow, useAttrs, useCss, useHost, useMount, useName, useOnce } from "@e280/sly";
3
+ import styleCss from "./style.css.js";
4
+ import { themeCss } from "../../theme/theme.css.js";
5
+ import { DrawerControl } from "./control.js";
6
+ import { States } from "../../utils/states.js";
7
+ import xSvg from "../../icons/tabler/x.svg.js";
8
+ import menu2Svg from "../../icons/tabler/menu-2.svg.js";
9
+ export const ShinyDrawer = shadow((options = {}) => {
10
+ useName("shiny-drawer");
11
+ useCss(themeCss, styleCss);
12
+ const host = useHost();
13
+ const states = useOnce(() => new States(host));
14
+ const control = useOnce(() => (options.control ?? new DrawerControl()));
15
+ const attrs = useAttrs({
16
+ side: String,
17
+ button: Boolean,
18
+ open: Boolean,
19
+ });
20
+ attrs.open = control.isOpen;
21
+ const button = options.button ?? attrs.button;
22
+ const side = options.side ?? (attrs.side === "right" ? "right" : "left");
23
+ states.assign(side, control.isOpen ? "opened" : "closed");
24
+ useMount(() => dom.events(window, { keydown: (event) => {
25
+ if (event.code === "Escape")
26
+ control.close();
27
+ } }));
28
+ function renderButton() {
29
+ return html `
30
+ <button part=button @click="${control.toggle}">
31
+ ${control.isOpen
32
+ ? html `
33
+ <slot name=button-x>
34
+ ${xSvg}
35
+ </slot>
36
+ `
37
+ : html `
38
+ <slot name=button>
39
+ ${menu2Svg}
40
+ </slot>
41
+ `}
42
+ </button>
43
+ `;
44
+ }
45
+ return html `
46
+ <div class=shell ?data-open="${control.isOpen}" data-side="${side}">
47
+ <slot name=plate ?inert="${control.isOpen}"></slot>
48
+
49
+ <div class=clipper>
50
+ <div part=blanket @click="${control.close}" ?inert="${!control.isOpen}"></div>
51
+
52
+ <div part=tray>
53
+ <slot part=slate ?inert="${!control.isOpen}"></slot>
54
+ ${button ? renderButton() : null}
55
+ </div>
56
+ </div>
57
+ </div>
58
+ `;
59
+ });
60
+ //# sourceMappingURL=view.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"view.js","sourceRoot":"","sources":["../../../s/views/drawer/view.ts"],"names":[],"mappings":"AACA,OAAO,EAAC,IAAI,EAAC,MAAM,KAAK,CAAA;AACxB,OAAO,EAAC,GAAG,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,OAAO,EAAC,MAAM,WAAW,CAAA;AAE5F,OAAO,QAAQ,MAAM,gBAAgB,CAAA;AAErC,OAAO,EAAC,QAAQ,EAAC,MAAM,0BAA0B,CAAA;AACjD,OAAO,EAAC,aAAa,EAAC,MAAM,cAAc,CAAA;AAC1C,OAAO,EAAC,MAAM,EAAC,MAAM,uBAAuB,CAAA;AAC5C,OAAO,IAAI,MAAM,6BAA6B,CAAA;AAC9C,OAAO,QAAQ,MAAM,kCAAkC,CAAA;AAEvD,MAAM,CAAC,MAAM,WAAW,GAAG,MAAM,CAAC,CAAC,UAI9B,EAAE,EAAE,EAAE;IAEV,OAAO,CAAC,cAAc,CAAC,CAAA;IACvB,MAAM,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAA;IAE1B,MAAM,IAAI,GAAG,OAAO,EAAE,CAAA;IACtB,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC,IAAI,MAAM,CAAC,IAAI,CAAC,CAAC,CAAA;IAC9C,MAAM,OAAO,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC,OAAO,CAAC,OAAO,IAAI,IAAI,aAAa,EAAE,CAAC,CAAC,CAAA;IAEvE,MAAM,KAAK,GAAG,QAAQ,CAAC;QACtB,IAAI,EAAE,MAAM;QACZ,MAAM,EAAE,OAAO;QACf,IAAI,EAAE,OAAO;KACb,CAAC,CAAA;IAEF,KAAK,CAAC,IAAI,GAAG,OAAO,CAAC,MAAM,CAAA;IAE3B,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,IAAI,KAAK,CAAC,MAAM,CAAA;IAC7C,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,IAAI,KAAK,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAA;IACxE,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAA;IAEzD,QAAQ,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,MAAM,CAAC,MAAM,EAAE,EAAC,OAAO,EAAE,CAAC,KAAoB,EAAE,EAAE;YACpE,IAAI,KAAK,CAAC,IAAI,KAAK,QAAQ;gBAC1B,OAAO,CAAC,KAAK,EAAE,CAAA;QACjB,CAAC,EAAC,CAAC,CAAC,CAAA;IAEJ,SAAS,YAAY;QACpB,OAAO,IAAI,CAAA;iCACoB,OAAO,CAAC,MAAM;MACzC,OAAO,CAAC,MAAM;YACf,CAAC,CAAC,IAAI,CAAA;;SAEF,IAAI;;MAEP;YACD,CAAC,CAAC,IAAI,CAAA;;SAEF,QAAQ;;MAEX;;GAEH,CAAA;IACF,CAAC;IAED,OAAO,IAAI,CAAA;iCACqB,OAAO,CAAC,MAAM,gBAAgB,IAAI;8BACrC,OAAO,CAAC,MAAM;;;gCAGZ,OAAO,CAAC,KAAK,aAAa,CAAC,OAAO,CAAC,MAAM;;;gCAGzC,CAAC,OAAO,CAAC,MAAM;OACxC,MAAM,CAAC,CAAC,CAAA,YAAY,EAAE,CAAC,CAAC,CAAA,IAAI;;;;EAIjC,CAAA;AACF,CAAC,CAAC,CAAA"}
@@ -1,6 +1,6 @@
1
- export declare class TabControl {
1
+ export declare class TabsControl {
2
2
  length: number;
3
- $index: import("@e280/strata").SignalFn<number>;
3
+ $index: import("@e280/strata").Signal<number>;
4
4
  constructor(start?: number);
5
5
  clamp(index: number): number;
6
6
  get index(): number;
@@ -1,5 +1,5 @@
1
1
  import { signal } from "@e280/strata";
2
- export class TabControl {
2
+ export class TabsControl {
3
3
  length = 1;
4
4
  $index = signal(0);
5
5
  constructor(start = 0) {
@@ -11,10 +11,10 @@ export class TabControl {
11
11
  return index;
12
12
  }
13
13
  get index() {
14
- return this.clamp(this.$index.get());
14
+ return this.clamp(this.$index());
15
15
  }
16
16
  async setIndex(index) {
17
- return this.$index.set(index);
17
+ return this.$index(index);
18
18
  }
19
19
  async shimmy(delta) {
20
20
  const index = this.clamp(this.index + delta);
@@ -0,0 +1 @@
1
+ {"version":3,"file":"control.js","sourceRoot":"","sources":["../../../s/views/tabs/control.ts"],"names":[],"mappings":"AACA,OAAO,EAAC,MAAM,EAAC,MAAM,cAAc,CAAA;AAEnC,MAAM,OAAO,WAAW;IACvB,MAAM,GAAG,CAAC,CAAA;IACV,MAAM,GAAG,MAAM,CAAC,CAAC,CAAC,CAAA;IAElB,YAAY,KAAK,GAAG,CAAC;QACpB,IAAI,CAAC,MAAM,CAAC,KAAK,GAAG,KAAK,CAAA;IAC1B,CAAC;IAED,KAAK,CAAC,KAAa;QAClB,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAA;QACxC,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC,CAAC,CAAA;QAC1B,OAAO,KAAK,CAAA;IACb,CAAC;IAED,IAAI,KAAK;QACR,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,CAAA;IACjC,CAAC;IAED,KAAK,CAAC,QAAQ,CAAC,KAAa;QAC3B,OAAO,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAA;IAC1B,CAAC;IAED,KAAK,CAAC,MAAM,CAAC,KAAa;QACzB,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC,CAAA;QAC5C,OAAO,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAA;IAC5B,CAAC;CACD"}
@@ -0,0 +1 @@
1
+ export declare const tabsShowcase: () => import("@e280/sly").Content;
@@ -0,0 +1,86 @@
1
+ import { css, html } from "lit";
2
+ import { ShinyTabs } from "./view.js";
3
+ import { ShinyButton } from "../button/view.js";
4
+ import { lipsum } from "../../demo/utils/lipsum.js";
5
+ import { exhibit } from "../../demo/parts/exhibit.js";
6
+ import { Showcase } from "../../demo/views/showcase/view.js";
7
+ export const tabsShowcase = () => Showcase("ShinyTabs", [
8
+ exhibit({
9
+ name: "shiny",
10
+ explain: "a button-bar of mutually-exclusive tabs. panels are optional.",
11
+ render: () => ShinyTabs.with({
12
+ props: [{ snug: true }],
13
+ children: html `
14
+ ${ShinyButton("alpha")}
15
+ ${ShinyButton("bravo")}
16
+ ${ShinyButton("charlie")}
17
+ <p slot=panel>${lipsum.takeFirst()}</p>
18
+ <p slot=panel>${lipsum.takeFirst()}</p>
19
+ <p slot=panel>${lipsum.takeFirst()}</p>
20
+ `,
21
+ }),
22
+ styleboxCss: css `
23
+ [view="shiny-button"] { font-size: 1.5em; }
24
+ p { margin-top: var(--padding); }
25
+ `,
26
+ js: `
27
+ ShinyTabs.with({
28
+ props: [{snug: true}],
29
+ children: html\`
30
+ \${ShinyButton("alpha")}
31
+ \${ShinyButton("bravo")}
32
+ \${ShinyButton("charlie")}
33
+ <p slot=panel>lorem kettlebell..</p>
34
+ <p slot=panel>lorem protein..</p>
35
+ <p slot=panel>lorem caffeine..</p>
36
+ \`,
37
+ })
38
+ `,
39
+ css: css `
40
+ [view="shiny-tabs"] {
41
+ --shiny-rounded: 0.5em;
42
+ }
43
+ `,
44
+ }),
45
+ exhibit({
46
+ name: "plain",
47
+ explain: "a button-bar of mutually-exclusive tabs. panels are optional.",
48
+ render: () => ShinyTabs.with({
49
+ props: [{ snug: true }],
50
+ children: html `
51
+ <button>alpha</button>
52
+ <button>bravo</button>
53
+ <button>charlie</button>
54
+ <p slot=panel>${lipsum.takeFirst()}</p>
55
+ <p slot=panel>${lipsum.takeFirst()}</p>
56
+ <p slot=panel>${lipsum.takeFirst()}</p>
57
+ `,
58
+ }),
59
+ styleboxCss: css `
60
+ p { margin-top: var(--padding); }
61
+ button {
62
+ font-size: 1.5em;
63
+ padding: calc(var(--padding) / 2);
64
+ }
65
+ `,
66
+ js: `
67
+ ShinyTabs.with({
68
+ props: [{snug: true}],
69
+ children: html\`
70
+ <button>alpha</button>
71
+ <button>bravo</button>
72
+ <button>charlie</button>
73
+ <p slot=panel>lorem kettlebell..</p>
74
+ <p slot=panel>lorem protein..</p>
75
+ <p slot=panel>lorem caffeine..</p>
76
+ \`,
77
+ })
78
+ `,
79
+ css: css `
80
+ [view="shiny-tabs"] {
81
+ --shiny-rounded: 0.5em;
82
+ }
83
+ `,
84
+ }),
85
+ ]);
86
+ //# sourceMappingURL=showcase.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"showcase.js","sourceRoot":"","sources":["../../../s/views/tabs/showcase.ts"],"names":[],"mappings":"AACA,OAAO,EAAC,GAAG,EAAE,IAAI,EAAC,MAAM,KAAK,CAAA;AAC7B,OAAO,EAAC,SAAS,EAAC,MAAM,WAAW,CAAA;AACnC,OAAO,EAAC,WAAW,EAAC,MAAM,mBAAmB,CAAA;AAC7C,OAAO,EAAC,MAAM,EAAC,MAAM,4BAA4B,CAAA;AACjD,OAAO,EAAC,OAAO,EAAC,MAAM,6BAA6B,CAAA;AACnD,OAAO,EAAC,QAAQ,EAAC,MAAM,mCAAmC,CAAA;AAE1D,MAAM,CAAC,MAAM,YAAY,GAAG,GAAG,EAAE,CAAC,QAAQ,CAAC,WAAW,EAAE;IACvD,OAAO,CAAC;QACP,IAAI,EAAE,OAAO;QACb,OAAO,EAAE,+DAA+D;QACxE,MAAM,EAAE,GAAG,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC;YAC5B,KAAK,EAAE,CAAC,EAAC,IAAI,EAAE,IAAI,EAAC,CAAC;YACrB,QAAQ,EAAE,IAAI,CAAA;MACX,WAAW,CAAC,OAAO,CAAC;MACpB,WAAW,CAAC,OAAO,CAAC;MACpB,WAAW,CAAC,SAAS,CAAC;oBACR,MAAM,CAAC,SAAS,EAAE;oBAClB,MAAM,CAAC,SAAS,EAAE;oBAClB,MAAM,CAAC,SAAS,EAAE;IAClC;SACD,CAAC;QACF,WAAW,EAAE,GAAG,CAAA;;;GAGf;QACD,EAAE,EAAE;;;;;;;;;;;;GAYH;QACD,GAAG,EAAE,GAAG,CAAA;;;;GAIP;KACD,CAAC;IAEF,OAAO,CAAC;QACP,IAAI,EAAE,OAAO;QACb,OAAO,EAAE,+DAA+D;QACxE,MAAM,EAAE,GAAG,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC;YAC5B,KAAK,EAAE,CAAC,EAAC,IAAI,EAAE,IAAI,EAAC,CAAC;YACrB,QAAQ,EAAE,IAAI,CAAA;;;;oBAIG,MAAM,CAAC,SAAS,EAAE;oBAClB,MAAM,CAAC,SAAS,EAAE;oBAClB,MAAM,CAAC,SAAS,EAAE;IAClC;SACD,CAAC;QACF,WAAW,EAAE,GAAG,CAAA;;;;;;GAMf;QACD,EAAE,EAAE;;;;;;;;;;;;GAYH;QACD,GAAG,EAAE,GAAG,CAAA;;;;GAIP;KACD,CAAC;CACF,CAAC,CAAA"}