@e280/sly 0.2.0-16 → 0.2.0-18

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 (226) hide show
  1. package/README.md +159 -33
  2. package/package.json +11 -4
  3. package/s/{ui/base-element.ts → base/element.ts} +5 -5
  4. package/s/base/index.ts +5 -0
  5. package/s/{ui/base → base}/use.ts +4 -5
  6. package/s/{ui/base → base}/utils/attr-watcher.ts +1 -1
  7. package/s/base/utils/use-attrs.ts +27 -0
  8. package/s/demo/views/counter.ts +3 -3
  9. package/s/demo/views/demo.ts +2 -2
  10. package/s/demo/views/fastcount.ts +2 -2
  11. package/s/demo/views/loaders.ts +7 -7
  12. package/s/dom/attrs/attrs.ts +3 -3
  13. package/s/dom/attrs/parts/attr-proxies.ts +3 -3
  14. package/s/dom/dom.ts +3 -3
  15. package/s/dom/index.ts +4 -0
  16. package/s/dom/parts/el.ts +2 -2
  17. package/s/index.ts +6 -19
  18. package/s/loaders/index.barrel.ts +9 -0
  19. package/s/loaders/index.ts +3 -0
  20. package/s/{ops/loaders/make-loader.ts → loaders/make.ts} +3 -7
  21. package/s/loaders/mock.ts +11 -0
  22. package/s/{ops/loaders → loaders}/parts/anims.ts +1 -1
  23. package/s/{ops/loaders → loaders}/parts/ascii-anim.ts +4 -3
  24. package/s/{ops/loaders → loaders}/parts/error-display.ts +2 -2
  25. package/s/loaders/types.ts +6 -0
  26. package/s/loot/index.barrel.ts +5 -0
  27. package/s/loot/index.ts +1 -3
  28. package/s/ops/index.ts +5 -0
  29. package/s/spa/index.barrel.ts +6 -0
  30. package/s/spa/index.ts +3 -0
  31. package/s/spa/plumbing/braces.ts +76 -0
  32. package/s/spa/plumbing/primitives.ts +85 -0
  33. package/s/spa/plumbing/router-core.ts +49 -0
  34. package/s/spa/plumbing/types.ts +39 -0
  35. package/s/spa/router.ts +49 -0
  36. package/s/spa/spa.test.ts +91 -0
  37. package/s/tests.test.ts +4 -1
  38. package/s/view/index.ts +6 -0
  39. package/s/{ui → view}/types.ts +3 -3
  40. package/s/{ui/view → view/utils}/make-component.ts +3 -3
  41. package/s/{ui/view → view/utils}/make-view.ts +1 -1
  42. package/s/{ui/view → view/utils}/parts/capsule.ts +3 -3
  43. package/s/{ui → view}/view.ts +3 -3
  44. package/x/base/css-reset.js.map +1 -0
  45. package/x/{ui/base-element.d.ts → base/element.d.ts} +2 -2
  46. package/x/{ui/base-element.js → base/element.js} +5 -5
  47. package/x/base/element.js.map +1 -0
  48. package/x/base/index.d.ts +3 -0
  49. package/x/base/index.js +4 -0
  50. package/x/base/index.js.map +1 -0
  51. package/x/{ui/base → base}/use.d.ts +3 -3
  52. package/x/{ui/base → base}/use.js +3 -3
  53. package/x/base/use.js.map +1 -0
  54. package/x/base/utils/apply-styles.js.map +1 -0
  55. package/x/{ui/base → base}/utils/attr-watcher.js +1 -1
  56. package/x/base/utils/attr-watcher.js.map +1 -0
  57. package/x/base/utils/mounts.js.map +1 -0
  58. package/x/base/utils/reactor.js.map +1 -0
  59. package/x/base/utils/use-attrs.d.ts +11 -0
  60. package/x/base/utils/use-attrs.js +19 -0
  61. package/x/base/utils/use-attrs.js.map +1 -0
  62. package/x/demo/demo.bundle.min.js +19 -19
  63. package/x/demo/demo.bundle.min.js.map +4 -4
  64. package/x/demo/views/counter.d.ts +4 -4
  65. package/x/demo/views/counter.js +3 -3
  66. package/x/demo/views/counter.js.map +1 -1
  67. package/x/demo/views/demo.d.ts +1 -1
  68. package/x/demo/views/demo.js +2 -2
  69. package/x/demo/views/demo.js.map +1 -1
  70. package/x/demo/views/fastcount.d.ts +2 -2
  71. package/x/demo/views/fastcount.js +1 -1
  72. package/x/demo/views/fastcount.js.map +1 -1
  73. package/x/demo/views/loaders.js +6 -6
  74. package/x/demo/views/loaders.js.map +1 -1
  75. package/x/dom/attrs/attrs.d.ts +3 -3
  76. package/x/dom/attrs/attrs.js +3 -3
  77. package/x/dom/attrs/attrs.js.map +1 -1
  78. package/x/dom/attrs/parts/attr-proxies.d.ts +3 -3
  79. package/x/dom/attrs/parts/attr-proxies.js +3 -3
  80. package/x/dom/attrs/parts/attr-proxies.js.map +1 -1
  81. package/x/dom/dom.d.ts +4 -4
  82. package/x/dom/dom.js +2 -2
  83. package/x/dom/dom.js.map +1 -1
  84. package/x/dom/index.d.ts +2 -0
  85. package/x/dom/index.js +3 -0
  86. package/x/dom/index.js.map +1 -0
  87. package/x/dom/parts/el.d.ts +1 -1
  88. package/x/dom/parts/el.js +1 -1
  89. package/x/dom/parts/el.js.map +1 -1
  90. package/x/index.d.ts +6 -16
  91. package/x/index.html +2 -2
  92. package/x/index.js +6 -16
  93. package/x/index.js.map +1 -1
  94. package/x/loaders/index.barrel.d.ts +6 -0
  95. package/x/loaders/index.barrel.js +7 -0
  96. package/x/loaders/index.barrel.js.map +1 -0
  97. package/x/loaders/index.d.ts +1 -0
  98. package/x/loaders/index.js +2 -0
  99. package/x/loaders/index.js.map +1 -0
  100. package/x/loaders/make.d.ts +3 -0
  101. package/x/loaders/make.js +6 -0
  102. package/x/loaders/make.js.map +1 -0
  103. package/x/loaders/mock.d.ts +2 -0
  104. package/x/loaders/mock.js +8 -0
  105. package/x/loaders/mock.js.map +1 -0
  106. package/x/{ops/loaders → loaders}/parts/anims.d.ts +1 -1
  107. package/x/loaders/parts/anims.js.map +1 -0
  108. package/x/{ops/loaders → loaders}/parts/ascii-anim.d.ts +2 -2
  109. package/x/{ops/loaders → loaders}/parts/ascii-anim.js +2 -2
  110. package/x/loaders/parts/ascii-anim.js.map +1 -0
  111. package/x/loaders/parts/error-display.d.ts +1 -0
  112. package/x/{ops/loaders → loaders}/parts/error-display.js +2 -2
  113. package/x/loaders/parts/error-display.js.map +1 -0
  114. package/x/loaders/types.d.ts +3 -0
  115. package/x/loaders/types.js.map +1 -0
  116. package/x/loot/index.barrel.d.ts +3 -0
  117. package/x/loot/index.barrel.js +4 -0
  118. package/x/loot/index.barrel.js.map +1 -0
  119. package/x/loot/index.d.ts +1 -3
  120. package/x/loot/index.js +1 -3
  121. package/x/loot/index.js.map +1 -1
  122. package/x/ops/index.d.ts +3 -0
  123. package/x/ops/index.js +4 -0
  124. package/x/ops/index.js.map +1 -0
  125. package/x/spa/index.barrel.d.ts +4 -0
  126. package/x/spa/index.barrel.js +3 -0
  127. package/x/spa/index.barrel.js.map +1 -0
  128. package/x/spa/index.d.ts +1 -0
  129. package/x/spa/index.js +2 -0
  130. package/x/spa/index.js.map +1 -0
  131. package/x/spa/plumbing/braces.d.ts +12 -0
  132. package/x/spa/plumbing/braces.js +55 -0
  133. package/x/spa/plumbing/braces.js.map +1 -0
  134. package/x/spa/plumbing/primitives.d.ts +22 -0
  135. package/x/spa/plumbing/primitives.js +65 -0
  136. package/x/spa/plumbing/primitives.js.map +1 -0
  137. package/x/spa/plumbing/router-core.d.ts +13 -0
  138. package/x/spa/plumbing/router-core.js +38 -0
  139. package/x/spa/plumbing/router-core.js.map +1 -0
  140. package/x/spa/plumbing/types.d.ts +34 -0
  141. package/x/spa/plumbing/types.js +2 -0
  142. package/x/spa/plumbing/types.js.map +1 -0
  143. package/x/spa/router.d.ts +16 -0
  144. package/x/spa/router.js +39 -0
  145. package/x/spa/router.js.map +1 -0
  146. package/x/spa/spa.test.d.ts +15 -0
  147. package/x/spa/spa.test.js +78 -0
  148. package/x/spa/spa.test.js.map +1 -0
  149. package/x/tests.test.js +4 -1
  150. package/x/tests.test.js.map +1 -1
  151. package/x/view/index.d.ts +4 -0
  152. package/x/view/index.js +5 -0
  153. package/x/view/index.js.map +1 -0
  154. package/x/{ui → view}/types.d.ts +3 -3
  155. package/x/view/types.js +2 -0
  156. package/x/{ui → view}/types.js.map +1 -1
  157. package/x/{ui/view → view/utils}/make-component.d.ts +1 -1
  158. package/x/{ui/view → view/utils}/make-component.js +1 -1
  159. package/x/view/utils/make-component.js.map +1 -0
  160. package/x/{ui/view → view/utils}/make-view.js +1 -1
  161. package/x/view/utils/make-view.js.map +1 -0
  162. package/x/{ui/view → view/utils}/parts/capsule.js +3 -3
  163. package/x/view/utils/parts/capsule.js.map +1 -0
  164. package/x/view/utils/parts/chain.js.map +1 -0
  165. package/x/view/utils/parts/context.js.map +1 -0
  166. package/x/view/utils/parts/directive.js.map +1 -0
  167. package/x/view/utils/parts/set-attrs.js.map +1 -0
  168. package/x/view/utils/parts/sly-view.js.map +1 -0
  169. package/x/{ui → view}/view.d.ts +2 -2
  170. package/x/{ui → view}/view.js +2 -2
  171. package/x/view/view.js.map +1 -0
  172. package/x/ops/loaders/make-loader.d.ts +0 -5
  173. package/x/ops/loaders/make-loader.js +0 -7
  174. package/x/ops/loaders/make-loader.js.map +0 -1
  175. package/x/ops/loaders/parts/anims.js.map +0 -1
  176. package/x/ops/loaders/parts/ascii-anim.js.map +0 -1
  177. package/x/ops/loaders/parts/error-display.d.ts +0 -1
  178. package/x/ops/loaders/parts/error-display.js.map +0 -1
  179. package/x/ui/base/css-reset.js.map +0 -1
  180. package/x/ui/base/use.js.map +0 -1
  181. package/x/ui/base/utils/apply-styles.js.map +0 -1
  182. package/x/ui/base/utils/attr-watcher.js.map +0 -1
  183. package/x/ui/base/utils/mounts.js.map +0 -1
  184. package/x/ui/base/utils/reactor.js.map +0 -1
  185. package/x/ui/base-element.js.map +0 -1
  186. package/x/ui/view/make-component.js.map +0 -1
  187. package/x/ui/view/make-view.js.map +0 -1
  188. package/x/ui/view/parts/capsule.js.map +0 -1
  189. package/x/ui/view/parts/chain.js.map +0 -1
  190. package/x/ui/view/parts/context.js.map +0 -1
  191. package/x/ui/view/parts/directive.js.map +0 -1
  192. package/x/ui/view/parts/set-attrs.js.map +0 -1
  193. package/x/ui/view/parts/sly-view.js.map +0 -1
  194. package/x/ui/view.js.map +0 -1
  195. /package/s/{ui/base → base}/css-reset.ts +0 -0
  196. /package/s/{ui/base → base}/utils/apply-styles.ts +0 -0
  197. /package/s/{ui/base → base}/utils/mounts.ts +0 -0
  198. /package/s/{ui/base → base}/utils/reactor.ts +0 -0
  199. /package/s/{ui/view → view/utils}/parts/chain.ts +0 -0
  200. /package/s/{ui/view → view/utils}/parts/context.ts +0 -0
  201. /package/s/{ui/view → view/utils}/parts/directive.ts +0 -0
  202. /package/s/{ui/view → view/utils}/parts/set-attrs.ts +0 -0
  203. /package/s/{ui/view → view/utils}/parts/sly-view.ts +0 -0
  204. /package/x/{ui/base → base}/css-reset.d.ts +0 -0
  205. /package/x/{ui/base → base}/css-reset.js +0 -0
  206. /package/x/{ui/base → base}/utils/apply-styles.d.ts +0 -0
  207. /package/x/{ui/base → base}/utils/apply-styles.js +0 -0
  208. /package/x/{ui/base → base}/utils/attr-watcher.d.ts +0 -0
  209. /package/x/{ui/base → base}/utils/mounts.d.ts +0 -0
  210. /package/x/{ui/base → base}/utils/mounts.js +0 -0
  211. /package/x/{ui/base → base}/utils/reactor.d.ts +0 -0
  212. /package/x/{ui/base → base}/utils/reactor.js +0 -0
  213. /package/x/{ops/loaders → loaders}/parts/anims.js +0 -0
  214. /package/x/{ui → loaders}/types.js +0 -0
  215. /package/x/{ui/view → view/utils}/make-view.d.ts +0 -0
  216. /package/x/{ui/view → view/utils}/parts/capsule.d.ts +0 -0
  217. /package/x/{ui/view → view/utils}/parts/chain.d.ts +0 -0
  218. /package/x/{ui/view → view/utils}/parts/chain.js +0 -0
  219. /package/x/{ui/view → view/utils}/parts/context.d.ts +0 -0
  220. /package/x/{ui/view → view/utils}/parts/context.js +0 -0
  221. /package/x/{ui/view → view/utils}/parts/directive.d.ts +0 -0
  222. /package/x/{ui/view → view/utils}/parts/directive.js +0 -0
  223. /package/x/{ui/view → view/utils}/parts/set-attrs.d.ts +0 -0
  224. /package/x/{ui/view → view/utils}/parts/set-attrs.js +0 -0
  225. /package/x/{ui/view → view/utils}/parts/sly-view.d.ts +0 -0
  226. /package/x/{ui/view → view/utils}/parts/sly-view.js +0 -0
@@ -2,9 +2,9 @@
2
2
  import {css} from "lit"
3
3
  import {nap, repeat} from "@e280/stz"
4
4
 
5
- import {view} from "../../../ui/view.js"
6
- import {Content} from "../../../ui/types.js"
7
- import {cssReset} from "../../../ui/base/css-reset.js"
5
+ import {view} from "../../view/view.js"
6
+ import {Content} from "../../view/types.js"
7
+ import {cssReset} from "../../base/css-reset.js"
8
8
 
9
9
  export function makeAsciiAnim(hz: number, frames: string[]): () => Content {
10
10
  return () => AsciiAnim({hz, frames})
@@ -17,6 +17,7 @@ export const AsciiAnim = view(use => ({hz, frames}: {
17
17
 
18
18
  use.name("loading")
19
19
  use.styles(cssReset, style)
20
+
20
21
  const frame = use.signal(0)
21
22
 
22
23
  use.mount(() => repeat(async() => {
@@ -1,7 +1,7 @@
1
1
 
2
2
  import {css, html} from "lit"
3
- import {view} from "../../../ui/view.js"
4
- import {cssReset} from "../../../ui/base/css-reset.js"
3
+ import {view} from "../../view/view.js"
4
+ import {cssReset} from "../../base/css-reset.js"
5
5
 
6
6
  export const ErrorDisplay = view(use => (error: any) => {
7
7
  use.name("error")
@@ -0,0 +1,6 @@
1
+
2
+ import type {Op} from "../ops/op.js"
3
+ import type {Content} from "../view/types.js"
4
+
5
+ export type Loader = <V>(op: Op<V>, ready: (value: V) => Content) => Content
6
+
@@ -0,0 +1,5 @@
1
+
2
+ export * from "./drag-and-drops.js"
3
+ export * from "./drops.js"
4
+ export * from "./helpers.js"
5
+
package/s/loot/index.ts CHANGED
@@ -1,5 +1,3 @@
1
1
 
2
- export * from "./drag-and-drops.js"
3
- export * from "./drops.js"
4
- export * from "./helpers.js"
2
+ export * as loot from "./index.barrel.js"
5
3
 
package/s/ops/index.ts ADDED
@@ -0,0 +1,5 @@
1
+
2
+ export * from "./op.js"
3
+ export * from "./podium.js"
4
+ export * from "./types.js"
5
+
@@ -0,0 +1,6 @@
1
+
2
+ export {route} from "./plumbing/braces.js"
3
+ export type {Navigable} from "./plumbing/primitives.js"
4
+ export {RouterOptions, Hasher, Route, Routes, Navigables} from "./plumbing/types.js"
5
+ export {Router} from "./router.js"
6
+
package/s/spa/index.ts ADDED
@@ -0,0 +1,3 @@
1
+
2
+ export * as spa from "./index.barrel.js"
3
+
@@ -0,0 +1,76 @@
1
+
2
+ import {Hasher, Route} from "./types.js"
3
+ import type {Content} from "../../view/types.js"
4
+
5
+ type ParamKeys<S extends string> =
6
+ S extends `${string}{${infer P}}${infer R}` ? (string & P) | ParamKeys<R> : never
7
+
8
+ type ParamsOf<S extends string> =
9
+ [ParamKeys<S>] extends [never] ? {} : { [K in ParamKeys<S>]: string }
10
+
11
+ type ParamsTuple<S extends string> =
12
+ keyof ParamsOf<S> extends never ? [] : [ParamsOf<S>]
13
+
14
+ export function hasher<S extends string>(spec: S): Hasher<ParamsTuple<S>> {
15
+ if (!spec.startsWith("#/"))
16
+ throw new Error(`hash route spec must start with "#/"`)
17
+
18
+ const specparts = spec.split("/")
19
+ const braceregex = /\{([^\}\/]+)\}/
20
+
21
+ function parse(hash: string): ParamsTuple<S> | null {
22
+ if (!hash.startsWith("#/"))
23
+ throw new Error(`hash must start with "#/"`)
24
+
25
+ const hashparts = hash.split("/")
26
+ const params: Record<string, string> = {}
27
+
28
+ if (hashparts.length !== specparts.length)
29
+ return null
30
+
31
+ for (const [index, specpart] of specparts.entries()) {
32
+ const hashpart = hashparts.at(index)
33
+ if (hashpart === undefined) return null
34
+ const bracematch = specpart.match(braceregex)
35
+ try {
36
+ if (bracematch) params[bracematch[1]] = decodeURIComponent(hashpart)
37
+ else if (hashpart !== specpart) return null
38
+ }
39
+ catch {
40
+ return null
41
+ }
42
+ }
43
+
44
+ return (Object.keys(params).length === 0)
45
+ ? ([] as ParamsTuple<S>)
46
+ : ([params as ParamsOf<S>] as ParamsTuple<S>)
47
+ }
48
+
49
+ function make(...[braces]: any[]): string {
50
+ const get = (param: string) => {
51
+ const p = param as any
52
+ if (p in braces) return braces[p]
53
+ else throw new Error(`missing param "${p}"`)
54
+ }
55
+ return specparts.map(specpart => {
56
+ const bracematch = specpart.match(braceregex)
57
+ return bracematch
58
+ ? encodeURIComponent(get(bracematch[1]))
59
+ : specpart
60
+ }).join("/")
61
+ }
62
+
63
+ return {parse, make}
64
+ }
65
+
66
+ export function route<S extends string>(
67
+ spec: S,
68
+ fn: (...params: ParamsTuple<S>) => Promise<Content>,
69
+ ): Route<ParamsTuple<S>> {
70
+
71
+ return {
72
+ hasher: hasher(spec),
73
+ fn,
74
+ }
75
+ }
76
+
@@ -0,0 +1,85 @@
1
+
2
+ import {ev, ob} from "@e280/stz"
3
+ import {Op} from "../../ops/op.js"
4
+ import {ResolvedRoute, Route, Routes} from "./types.js"
5
+
6
+ export function eraseWindowHash() {
7
+ const {pathname, search} = window.location
8
+ history.replaceState(null, "", pathname + search)
9
+ }
10
+
11
+ export function normalizeHash(hash: string) {
12
+ const homeEquivalents = [/^$/, /^#$/, /^#\/$/]
13
+ return (homeEquivalents.some(regex => regex.test(hash)))
14
+ ? "#/"
15
+ : hash
16
+ }
17
+
18
+ export class HashNormalizer {
19
+ constructor(public location: Location) {}
20
+
21
+ get hash() {
22
+ const hash = normalizeHash(this.location.hash)
23
+ if (hash === "#/") eraseWindowHash()
24
+ return hash
25
+ }
26
+
27
+ set hash(hash: string) {
28
+ this.location.hash = hash
29
+ }
30
+ }
31
+
32
+ export class Navigable<R extends Routes = any, K extends keyof R = any> {
33
+ static all<R extends Routes>(
34
+ routes: R,
35
+ getRoute: () => Route<any> | null,
36
+ navigate: (hash: string) => Promise<ResolvedRoute<R>>,
37
+ ): {[K in keyof R]: Navigable<R, K>} {
38
+
39
+ return ob(routes).map(route => new this(
40
+ route,
41
+ () => (getRoute() === route),
42
+ async(...params: any[]) => navigate(route.hasher.make(...params)),
43
+ ))
44
+ }
45
+
46
+ constructor(
47
+ public route: Route<Parameters<R[K]["hasher"]["make"]>>,
48
+ private isActive: () => boolean,
49
+ public go: (...params: Parameters<R[K]["hasher"]["make"]>) => Promise<ResolvedRoute<R>>,
50
+ ) {}
51
+
52
+ get active() {
53
+ return this.isActive()
54
+ }
55
+
56
+ hash(...params: Parameters<R[K]["hasher"]["make"]>) {
57
+ return this.route.hasher.make(...params)
58
+ }
59
+ }
60
+
61
+ export function resolveRoute<R extends Routes>(
62
+ hash: string,
63
+ routes: R,
64
+ ): ResolvedRoute<R> | null {
65
+
66
+ for (const key in routes) {
67
+ const route = routes[key]
68
+ const params = route.hasher.parse(hash)
69
+ if (params) {
70
+ return {
71
+ key,
72
+ route,
73
+ params,
74
+ op: Op.promise(route.fn(...params))
75
+ }
76
+ }
77
+ }
78
+
79
+ return null
80
+ }
81
+
82
+ export function onHashChange(fn: (event: HashChangeEvent) => void) {
83
+ return ev(window, {hashchange: fn})
84
+ }
85
+
@@ -0,0 +1,49 @@
1
+
2
+ import {signal} from "@e280/strata"
3
+ import type {Content} from "../../view/types.js"
4
+ import {Navigable, normalizeHash, resolveRoute} from "./primitives.js"
5
+ import {Hashbearer, Navigables, ResolvedRoute, Routes} from "./types.js"
6
+
7
+ export class RouterCore<R extends Routes> {
8
+ readonly nav: Navigables<R>
9
+ readonly $resolved = signal<ResolvedRoute<R> | null>(null)
10
+
11
+ constructor(
12
+ public readonly routes: R,
13
+ public readonly location: Hashbearer,
14
+ ) {
15
+
16
+ this.nav = Navigable.all(
17
+ routes,
18
+ () => this.route,
19
+ async hash => {
20
+ this.location.hash = hash
21
+ const resolved = await this.refresh()
22
+ if (!resolved) throw new Error(`route failed "${hash}"`)
23
+ return resolved
24
+ },
25
+ )
26
+ }
27
+
28
+ get hash() {
29
+ return normalizeHash(this.location.hash)
30
+ }
31
+
32
+ get content(): Content | null {
33
+ return this.$resolved.get()?.op.value ?? null
34
+ }
35
+
36
+ get route() {
37
+ return this.$resolved.get()?.route ?? null
38
+ }
39
+
40
+ async refresh(hash?: string) {
41
+ if (hash !== undefined) this.location.hash = hash
42
+ hash = this.hash
43
+ const resolved = resolveRoute(hash, this.routes)
44
+ await this.$resolved.set(resolved)
45
+ await resolved?.op
46
+ return resolved
47
+ }
48
+ }
49
+
@@ -0,0 +1,39 @@
1
+
2
+ import type {Op} from "../../ops/op.js"
3
+ import type {Navigable} from "./primitives.js"
4
+ import type {Content} from "../../view/types.js"
5
+ import type {Loader} from "../../loaders/types.js"
6
+
7
+ export type RouterOptions<R extends Routes> = {
8
+ routes: R
9
+ auto?: boolean
10
+ location?: Hashbearer
11
+ loader?: Loader
12
+ notFound?: () => Content
13
+ }
14
+
15
+ export type Hashbearer = {hash: string}
16
+
17
+ export type Hasher<Params extends any[]> = {
18
+ parse: (hash: string) => (Params | null)
19
+ make: (...params: Params) => string
20
+ }
21
+
22
+ export type Route<Params extends any[]> = {
23
+ hasher: Hasher<Params>
24
+ fn: (...params: Params) => Promise<Content>
25
+ }
26
+
27
+ export type Routes = {[key: string]: Route<any>}
28
+
29
+ export type ResolvedRoute<R extends Routes, K extends keyof R = keyof R> = {
30
+ key: K
31
+ route: R[K]
32
+ params: Parameters<R[K]["hasher"]["make"]>
33
+ op: Op<Content>
34
+ }
35
+
36
+ export type Navigables<R extends Routes> = {
37
+ [K in keyof R]: Navigable<R, K>
38
+ }
39
+
@@ -0,0 +1,49 @@
1
+
2
+ import {disposer} from "@e280/stz"
3
+ import {Content} from "../view/types.js"
4
+ import {Loader} from "../loaders/types.js"
5
+ import {loaders} from "../loaders/index.js"
6
+ import {RouterCore} from "./plumbing/router-core.js"
7
+ import {RouterOptions, Routes} from "./plumbing/types.js"
8
+ import {HashNormalizer, onHashChange} from "./plumbing/primitives.js"
9
+
10
+ export class Router<R extends Routes> extends RouterCore<R> {
11
+ loader: Loader
12
+ notFound: () => Content
13
+ readonly dispose = disposer()
14
+ #lastHash: string
15
+
16
+ constructor(options: RouterOptions<R>) {
17
+ super(
18
+ options.routes,
19
+ options.location ?? new HashNormalizer(window.location),
20
+ )
21
+ const {auto = true} = options
22
+ this.loader = options.loader ?? loaders.make()
23
+ this.notFound = options.notFound ?? (() => null)
24
+ this.#lastHash = this.hash
25
+ if (auto) {
26
+ this.listen()
27
+ this.refresh()
28
+ }
29
+ }
30
+
31
+ render() {
32
+ const resolved = this.$resolved.get()
33
+ return resolved === null
34
+ ? this.notFound()
35
+ : this.loader(resolved.op, content => content)
36
+ }
37
+
38
+ listen() {
39
+ const dispose = onHashChange(() => {
40
+ const hash = this.hash
41
+ const isChanged = hash !== this.#lastHash
42
+ this.#lastHash = hash
43
+ if (isChanged) this.refresh()
44
+ })
45
+ this.dispose.schedule(dispose)
46
+ return dispose
47
+ }
48
+ }
49
+
@@ -0,0 +1,91 @@
1
+
2
+ import {Science, test, expect} from "@e280/science"
3
+ import {route} from "./plumbing/braces.js"
4
+ import {Routes} from "./plumbing/types.js"
5
+ import {RouterCore} from "./plumbing/router-core.js"
6
+
7
+ async function setup<R extends Routes>(routes: R) {
8
+ const location = {hash: ""}
9
+ const router = new RouterCore(routes, location)
10
+ return {location, router}
11
+ }
12
+
13
+ export default Science.suite({
14
+ inits: Science.suite({
15
+ "#/": test(async() => {
16
+ const {location, router} = await setup({
17
+ home: route("#/", async() => "123"),
18
+ })
19
+ expect(router.content).is(null)
20
+ location.hash = "#/"
21
+ await router.refresh()
22
+ expect(router.content).is("123")
23
+ }),
24
+
25
+ "#/hello/world": test(async() => {
26
+ const {location, router} = await setup({
27
+ helloWorld: route("#/hello/world", async() => "123"),
28
+ })
29
+ expect(router.content).is(null)
30
+ location.hash = "#/hello/world"
31
+ await router.refresh()
32
+ expect(router.content).is("123")
33
+ }),
34
+
35
+ "#/item/a123": test(async() => {
36
+ const {location, router} = await setup({
37
+ item: route("#/item/{id}", async({id}) => `content ${id}`),
38
+ })
39
+ location.hash = "#/item/a123"
40
+ await router.refresh()
41
+ expect(router.content).is("content a123")
42
+ }),
43
+
44
+ "#/item/a123/lol should miss": test(async() => {
45
+ const {location, router} = await setup({
46
+ item: route("#/item/{id}", async({id}) => `content ${id}`),
47
+ })
48
+ location.hash = "#/item/a123/lol"
49
+ await router.refresh()
50
+ expect(router.content).is(null)
51
+ }),
52
+
53
+ "#/left/{mid}/right extraction": test(async() => {
54
+ const {location, router} = await setup({
55
+ item: route("#/left/{mid}/right", async({mid}) => `content ${mid}`),
56
+ })
57
+ location.hash = "#/left/middle/right"
58
+ await router.refresh()
59
+ expect(router.content).is("content middle")
60
+ }),
61
+
62
+ "#/not-found-lol": test(async() => {
63
+ const {location, router} = await setup({
64
+ helloWorld: route("#/hello/world", async() => "123"),
65
+ })
66
+ location.hash = "#/not-found-lol"
67
+ await router.refresh()
68
+ expect(router.content).is(null)
69
+ }),
70
+ }),
71
+
72
+ nav: Science.suite({
73
+ "home to item and back": test(async() => {
74
+ const {location, router} = await setup({
75
+ home: route("#/", async() => `home`),
76
+ item: route("#/item/{id}", async({id}) => `item ${id}`),
77
+ })
78
+ location.hash = "#/"
79
+
80
+ await router.refresh()
81
+ expect(router.content).is("home")
82
+
83
+ await router.nav.item.go({id: "x234"})
84
+ expect(router.content).is("item x234")
85
+
86
+ await router.nav.home.go()
87
+ expect(router.content).is("home")
88
+ }),
89
+ }),
90
+ })
91
+
package/s/tests.test.ts CHANGED
@@ -1,5 +1,8 @@
1
1
 
2
2
  import {Science} from "@e280/science"
3
+ import spa from "./spa/spa.test.js"
3
4
 
4
- await Science.run({})
5
+ await Science.run({
6
+ spa,
7
+ })
5
8
 
@@ -0,0 +1,6 @@
1
+
2
+ export * from "./utils/parts/chain.js"
3
+ export * from "./utils/parts/sly-view.js"
4
+ export * from "./types.js"
5
+ export * from "./view.js"
6
+
@@ -3,9 +3,9 @@ import {TemplateResult} from "lit"
3
3
  import {Constructor} from "@e280/stz"
4
4
  import {DirectiveResult} from "lit/directive.js"
5
5
 
6
- import {Use} from "./base/use.js"
7
- import {ViewChain} from "./view/parts/chain.js"
8
- import {BaseElement} from "./base-element.js"
6
+ import {Use} from "../base/use.js"
7
+ import {ViewChain} from "./utils/parts/chain.js"
8
+ import {BaseElement} from "../base/element.js"
9
9
 
10
10
  export type Content = TemplateResult | DirectiveResult | HTMLElement | string | null | undefined | void | Content[]
11
11
  export type AttrValue = string | boolean | number | undefined | null | void
@@ -1,9 +1,9 @@
1
1
 
2
2
  import {Constructor} from "@e280/stz"
3
- import {Use} from "../base/use.js"
3
+ import {Use} from "../../base/use.js"
4
4
  import {makeView} from "./make-view.js"
5
- import {BaseElement} from "../base-element.js"
6
- import {Reactor} from "../base/utils/reactor.js"
5
+ import {BaseElement} from "../../base/element.js"
6
+ import {Reactor} from "../../base/utils/reactor.js"
7
7
  import {ComponentClass, ViewFn} from "../types.js"
8
8
 
9
9
  /** make a component from a BaseElement and a view. */
@@ -3,7 +3,7 @@ import {Constructor} from "@e280/stz"
3
3
  import {DirectiveResult} from "lit/async-directive.js"
4
4
  import {View, ViewFn} from "../types.js"
5
5
  import {ViewChain} from "./parts/chain.js"
6
- import {BaseElement} from "../base-element.js"
6
+ import {BaseElement} from "../../base/element.js"
7
7
  import {ViewContext} from "./parts/context.js"
8
8
  import {makeComponent} from "./make-component.js"
9
9
  import {makeViewDirective} from "./parts/directive.js"
@@ -5,9 +5,9 @@ import {SlyView} from "./sly-view.js"
5
5
  import {dom} from "../../../dom/dom.js"
6
6
  import {setAttrs} from "./set-attrs.js"
7
7
  import {ViewContext} from "./context.js"
8
- import {Reactor} from "../../base/utils/reactor.js"
9
- import {AttrWatcher} from "../../base/utils/attr-watcher.js"
10
- import {_disconnect, _reconnect, _wrap, Use} from "../../base/use.js"
8
+ import {Reactor} from "../../../base/utils/reactor.js"
9
+ import {AttrWatcher} from "../../../base/utils/attr-watcher.js"
10
+ import {_disconnect, _reconnect, _wrap, Use} from "../../../base/use.js"
11
11
 
12
12
  /** controls the rendering of view context into an element. */
13
13
  export class ViewCapsule<Props extends any[]> {
@@ -1,8 +1,8 @@
1
1
 
2
2
  import {Content, ViewFn} from "./types.js"
3
- import {makeView} from "./view/make-view.js"
4
- import {BaseElement} from "./base-element.js"
5
- import {_disconnect, _reconnect, Use} from "./base/use.js"
3
+ import {makeView} from "./utils/make-view.js"
4
+ import {BaseElement} from "../base/element.js"
5
+ import {_disconnect, _reconnect, Use} from "../base/use.js"
6
6
 
7
7
  export function view<Props extends any[]>(fn: ViewFn<Props>) {
8
8
  return makeView(fn, {mode: "open"})
@@ -0,0 +1 @@
1
+ {"version":3,"file":"css-reset.js","sourceRoot":"","sources":["../../s/base/css-reset.ts"],"names":[],"mappings":"AACA,OAAO,EAAC,GAAG,EAAiB,MAAM,KAAK,CAAA;AAEvC,MAAM,CAAC,MAAM,QAAQ,GAAmB,GAAG,CAAA;;;;;;;;;;;;;;;;CAgB1C,CAAA"}
@@ -1,6 +1,6 @@
1
1
  import { CSSResultGroup } from "lit";
2
- import { Content } from "./types.js";
3
- import { Use } from "./base/use.js";
2
+ import { Content } from "../view/types.js";
3
+ import { Use } from "./use.js";
4
4
  export declare class BaseElement extends HTMLElement {
5
5
  #private;
6
6
  static styles: CSSResultGroup | undefined;
@@ -1,9 +1,9 @@
1
1
  import { debounce } from "@e280/stz";
2
2
  import { dom } from "../dom/dom.js";
3
- import { Reactor } from "./base/utils/reactor.js";
4
- import { AttrWatcher } from "./base/utils/attr-watcher.js";
5
- import { applyStyles } from "./base/utils/apply-styles.js";
6
- import { Use, _disconnect, _reconnect, _wrap } from "./base/use.js";
3
+ import { Reactor } from "./utils/reactor.js";
4
+ import { AttrWatcher } from "./utils/attr-watcher.js";
5
+ import { applyStyles } from "./utils/apply-styles.js";
6
+ import { Use, _disconnect, _reconnect, _wrap } from "./use.js";
7
7
  export class BaseElement extends HTMLElement {
8
8
  static styles;
9
9
  shadow;
@@ -49,4 +49,4 @@ export class BaseElement extends HTMLElement {
49
49
  this.#attrWatcher.stop();
50
50
  }
51
51
  }
52
- //# sourceMappingURL=base-element.js.map
52
+ //# sourceMappingURL=element.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"element.js","sourceRoot":"","sources":["../../s/base/element.ts"],"names":[],"mappings":"AACA,OAAO,EAAC,QAAQ,EAAC,MAAM,WAAW,CAAA;AAGlC,OAAO,EAAC,GAAG,EAAC,MAAM,eAAe,CAAA;AAEjC,OAAO,EAAC,OAAO,EAAC,MAAM,oBAAoB,CAAA;AAC1C,OAAO,EAAC,WAAW,EAAC,MAAM,yBAAyB,CAAA;AACnD,OAAO,EAAC,WAAW,EAAC,MAAM,yBAAyB,CAAA;AACnD,OAAO,EAAC,GAAG,EAAE,WAAW,EAAE,UAAU,EAAE,KAAK,EAAC,MAAM,UAAU,CAAA;AAE5D,MAAM,OAAO,WAAY,SAAQ,WAAW;IAC3C,MAAM,CAAC,MAAM,CAA4B;IAEhC,MAAM,CAAY;IAE3B,IAAI,CAAK;IACT,WAAW,GAAG,CAAC,CAAA;IACf,QAAQ,GAAG,IAAI,OAAO,EAAE,CAAA;IACxB,YAAY,GAAG,IAAI,WAAW,CAAC,IAAI,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,CAAA;IAEzD,4FAA4F;IAC5F,YAAY;QACX,OAAO,IAAI,CAAC,YAAY,CAAC,EAAC,IAAI,EAAE,MAAM,EAAC,CAAC,CAAA;IACzC,CAAC;IAED;QACC,KAAK,EAAE,CAAA;QACP,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,YAAY,EAAE,CAAA;QACjC,IAAI,CAAC,IAAI,GAAG,IAAI,GAAG,CAClB,IAAI,EACJ,IAAI,CAAC,MAAM,EACX,IAAI,CAAC,SAAS,EACd,IAAI,CAAC,MAAM,CACX,CAAA;IACF,CAAC;IAED,qCAAqC;IACrC,MAAM,CAAC,IAAS,IAAY,CAAC;IAE7B,+DAA+D;IAC/D,SAAS,GAAG,GAAG,EAAE;QAChB,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE;YACrB,GAAG,CAAC,MAAM,CACT,IAAI,CAAC,MAAM,EACX,IAAI,CAAC,QAAQ,CAAC,MAAM,CACnB,GAAG,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,EAC5B,IAAI,CAAC,MAAM,CACX,CACD,CAAA;QACF,CAAC,CAAC,CAAA;IACH,CAAC,CAAA;IAED,6DAA6D;IAC7D,MAAM,GAAG,QAAQ,CAAC,CAAC,EAAE,IAAI,CAAC,SAAS,CAAC,CAAA;IAEpC,iBAAiB;QAChB,IAAI,IAAI,CAAC,WAAW,KAAK,CAAC,EAAE,CAAC;YAC5B,MAAM,MAAM,GAAI,IAAI,CAAC,WAAmB,CAAC,MAAM,CAAA;YAC/C,IAAI,MAAM;gBAAE,WAAW,CAAC,IAAI,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;YAC5C,IAAI,CAAC,SAAS,EAAE,CAAA;QACjB,CAAC;aACI,CAAC;YACL,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE,CAAA;QACxB,CAAC;QACD,IAAI,CAAC,YAAY,CAAC,KAAK,EAAE,CAAA;QACzB,IAAI,CAAC,WAAW,EAAE,CAAA;IACnB,CAAC;IAED,oBAAoB;QACnB,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,EAAE,CAAA;QACxB,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE,CAAA;QACrB,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE,CAAA;IACzB,CAAC;CACD"}
@@ -0,0 +1,3 @@
1
+ export * from "../base/css-reset.js";
2
+ export * from "../base/element.js";
3
+ export * from "../base/use.js";
@@ -0,0 +1,4 @@
1
+ export * from "../base/css-reset.js";
2
+ export * from "../base/element.js";
3
+ export * from "../base/use.js";
4
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../s/base/index.ts"],"names":[],"mappings":"AACA,cAAc,sBAAsB,CAAA;AACpC,cAAc,oBAAoB,CAAA;AAClC,cAAc,gBAAgB,CAAA"}
@@ -1,7 +1,7 @@
1
1
  import { CSSResultGroup } from "lit";
2
2
  import { SignalOptions } from "@e280/strata/signals";
3
- import { Op } from "../../ops/op.js";
4
- import { Attrs } from "../../dom/types.js";
3
+ import { Op } from "../ops/op.js";
4
+ import { UseAttrs } from "./utils/use-attrs.js";
5
5
  export declare const _wrap: unique symbol;
6
6
  export declare const _disconnect: unique symbol;
7
7
  export declare const _reconnect: unique symbol;
@@ -11,7 +11,7 @@ export declare class Use {
11
11
  shadow: ShadowRoot;
12
12
  renderNow: () => void;
13
13
  render: () => Promise<void>;
14
- attrs: Attrs;
14
+ readonly attrs: UseAttrs;
15
15
  [_wrap]<R>(fn: () => R): R;
16
16
  [_disconnect](): void;
17
17
  [_reconnect](): void;
@@ -1,8 +1,8 @@
1
1
  import { defer, MapG } from "@e280/stz";
2
2
  import { signal } from "@e280/strata/signals";
3
- import { Op } from "../../ops/op.js";
4
- import { dom } from "../../dom/dom.js";
3
+ import { Op } from "../ops/op.js";
5
4
  import { Mounts } from "./utils/mounts.js";
5
+ import { UseAttrs } from "./utils/use-attrs.js";
6
6
  import { applyStyles } from "./utils/apply-styles.js";
7
7
  export const _wrap = Symbol();
8
8
  export const _disconnect = Symbol();
@@ -39,7 +39,7 @@ export class Use {
39
39
  this.shadow = shadow;
40
40
  this.renderNow = renderNow;
41
41
  this.render = render;
42
- this.attrs = dom.attrs(this.element);
42
+ this.attrs = new UseAttrs(this);
43
43
  }
44
44
  get renderCount() {
45
45
  return this.#runs;
@@ -0,0 +1 @@
1
+ {"version":3,"file":"use.js","sourceRoot":"","sources":["../../s/base/use.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"apply-styles.js","sourceRoot":"","sources":["../../../s/base/utils/apply-styles.ts"],"names":[],"mappings":"AACA,OAAO,EAAC,WAAW,EAAqC,kBAAkB,EAAC,MAAM,KAAK,CAAA;AAEtF,MAAM,UAAU,WAAW,CAAC,MAAkB,EAAE,MAAuB;IACtE,WAAW,CAAC,MAAM,EAAE,aAAa,CAAC,MAAM,CAAC,CAAC,CAAA;AAC3C,CAAC;AAED,SAAS,aAAa,CAAC,MAAuB;IAC7C,MAAM,aAAa,GAAG,EAAE,CAAA;IAExB,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;QAC3B,MAAM,GAAG,GAAG,IAAI,GAAG,CAAE,MAAyB,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,OAAO,EAAE,CAAC,CAAA;QACxE,KAAK,MAAM,CAAC,IAAI,GAAG;YAClB,aAAa,CAAC,OAAO,CAAC,kBAAkB,CAAC,CAAsB,CAAC,CAAC,CAAA;IACnE,CAAC;SACI,IAAI,MAAM,KAAK,SAAS;QAC5B,aAAa,CAAC,IAAI,CAAC,kBAAkB,CAAC,MAAM,CAAC,CAAC,CAAA;IAE/C,OAAO,aAAa,CAAA;AACrB,CAAC"}