@typed/ui 0.13.0 → 1.0.0-beta.0

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 (79) hide show
  1. package/README.md +96 -2
  2. package/dist/HttpRouter.d.ts +13 -0
  3. package/dist/HttpRouter.d.ts.map +1 -0
  4. package/dist/HttpRouter.js +99 -0
  5. package/dist/Link.d.ts +36 -0
  6. package/dist/Link.d.ts.map +1 -0
  7. package/dist/Link.js +45 -0
  8. package/dist/index.d.ts +3 -0
  9. package/dist/index.d.ts.map +1 -0
  10. package/dist/index.js +2 -0
  11. package/package.json +25 -79
  12. package/src/HttpRouter.test.ts +294 -0
  13. package/src/HttpRouter.ts +168 -0
  14. package/src/Link.test.ts +85 -0
  15. package/src/Link.ts +97 -90
  16. package/src/index.ts +2 -40
  17. package/tsconfig.json +6 -0
  18. package/LICENSE +0 -21
  19. package/Link/package.json +0 -6
  20. package/Props/package.json +0 -6
  21. package/dist/cjs/Link.js +0 -76
  22. package/dist/cjs/Link.js.map +0 -1
  23. package/dist/cjs/Props.js +0 -26
  24. package/dist/cjs/Props.js.map +0 -1
  25. package/dist/cjs/dom-properties.js +0 -6
  26. package/dist/cjs/dom-properties.js.map +0 -1
  27. package/dist/cjs/hyperscript.js +0 -484
  28. package/dist/cjs/hyperscript.js.map +0 -1
  29. package/dist/cjs/index.js +0 -39
  30. package/dist/cjs/index.js.map +0 -1
  31. package/dist/cjs/internal/addEventListener.js +0 -19
  32. package/dist/cjs/internal/addEventListener.js.map +0 -1
  33. package/dist/cjs/useClickAway.js +0 -43
  34. package/dist/cjs/useClickAway.js.map +0 -1
  35. package/dist/cjs/usePagination.js +0 -68
  36. package/dist/cjs/usePagination.js.map +0 -1
  37. package/dist/dts/Link.d.ts +0 -26
  38. package/dist/dts/Link.d.ts.map +0 -1
  39. package/dist/dts/Props.d.ts +0 -67
  40. package/dist/dts/Props.d.ts.map +0 -1
  41. package/dist/dts/dom-properties.d.ts +0 -928
  42. package/dist/dts/dom-properties.d.ts.map +0 -1
  43. package/dist/dts/hyperscript.d.ts +0 -461
  44. package/dist/dts/hyperscript.d.ts.map +0 -1
  45. package/dist/dts/index.d.ts +0 -16
  46. package/dist/dts/index.d.ts.map +0 -1
  47. package/dist/dts/internal/addEventListener.d.ts +0 -6
  48. package/dist/dts/internal/addEventListener.d.ts.map +0 -1
  49. package/dist/dts/useClickAway.d.ts +0 -19
  50. package/dist/dts/useClickAway.d.ts.map +0 -1
  51. package/dist/dts/usePagination.d.ts +0 -41
  52. package/dist/dts/usePagination.d.ts.map +0 -1
  53. package/dist/esm/Link.js +0 -52
  54. package/dist/esm/Link.js.map +0 -1
  55. package/dist/esm/Props.js +0 -19
  56. package/dist/esm/Props.js.map +0 -1
  57. package/dist/esm/dom-properties.js +0 -5
  58. package/dist/esm/dom-properties.js.map +0 -1
  59. package/dist/esm/hyperscript.js +0 -470
  60. package/dist/esm/hyperscript.js.map +0 -1
  61. package/dist/esm/index.js +0 -37
  62. package/dist/esm/index.js.map +0 -1
  63. package/dist/esm/internal/addEventListener.js +0 -11
  64. package/dist/esm/internal/addEventListener.js.map +0 -1
  65. package/dist/esm/package.json +0 -4
  66. package/dist/esm/useClickAway.js +0 -36
  67. package/dist/esm/useClickAway.js.map +0 -1
  68. package/dist/esm/usePagination.js +0 -59
  69. package/dist/esm/usePagination.js.map +0 -1
  70. package/dom-properties/package.json +0 -6
  71. package/hyperscript/package.json +0 -6
  72. package/src/Props.ts +0 -104
  73. package/src/dom-properties.ts +0 -1132
  74. package/src/hyperscript.ts +0 -649
  75. package/src/internal/addEventListener.ts +0 -22
  76. package/src/useClickAway.ts +0 -66
  77. package/src/usePagination.ts +0 -122
  78. package/useClickAway/package.json +0 -6
  79. package/usePagination/package.json +0 -6
@@ -1,66 +0,0 @@
1
- /**
2
- * @since 1.0.0
3
- */
4
-
5
- import { Document } from "@typed/dom/Document"
6
- import type { EventWithCurrentTarget } from "@typed/dom/EventTarget"
7
- import * as Fx from "@typed/fx/Fx"
8
- import type * as ElementRef from "@typed/template/ElementRef"
9
- import { getElements } from "@typed/template/ElementSource"
10
- import type { Rendered } from "@typed/wire"
11
- import type * as Effect from "effect/Effect"
12
- import type * as Fiber from "effect/Fiber"
13
- import * as Option from "effect/Option"
14
- import type * as Scope from "effect/Scope"
15
- import { addEventListeners } from "./internal/addEventListener.js"
16
-
17
- /**
18
- * @since 1.0.0
19
- */
20
- export function useClickAway<Refs extends ReadonlyArray<ElementRef.ElementRef<any>>, R2>(
21
- refs: Refs,
22
- f: (event: EventWithCurrentTarget<Document, MouseEvent | TouchEvent>) => Effect.Effect<unknown, never, R2>
23
- ): Effect.Effect<Fiber.RuntimeFiber<void>, never, Document | Scope.Scope | R2> {
24
- return Fx.forkScoped(onClickAway(refs, f))
25
- }
26
-
27
- /**
28
- * @since 1.0.0
29
- */
30
- export function onClickAway<Refs extends ReadonlyArray<ElementRef.ElementRef<any>>, B, E2, R2>(
31
- refs: Refs,
32
- f: (event: EventWithCurrentTarget<Document, MouseEvent | TouchEvent>) => Effect.Effect<B, E2, R2>
33
- ): Fx.Fx<B, E2, Document | R2 | Scope.Scope> {
34
- return Fx.fromFxEffect(Document.with((document) => {
35
- const events = addEventListeners(document, "click", "touchend", "contextmenu")
36
- const elements = Fx.map(
37
- Fx.tuple(refs as ReadonlyArray<Fx.Fx<Rendered, never, Scope.Scope>>),
38
- (els) => els.flatMap(getElements)
39
- )
40
-
41
- return Fx.mapEffect(
42
- Fx.compact(Fx.snapshot(events, elements, containsRefs)),
43
- f
44
- )
45
- }))
46
- }
47
-
48
- const containsRefs = (
49
- event: EventWithCurrentTarget<Document, MouseEvent | TouchEvent>,
50
- refs: ReadonlyArray<Element>
51
- ): Option.Option<EventWithCurrentTarget<Document, MouseEvent | TouchEvent>> => {
52
- const target = event.target
53
-
54
- if (
55
- target === null ||
56
- refs.some(
57
- (c) =>
58
- c === target ||
59
- c.contains(target as Node)
60
- )
61
- ) {
62
- return Option.none()
63
- } else {
64
- return Option.some(event)
65
- }
66
- }
@@ -1,122 +0,0 @@
1
- /**
2
- * @since 1.0.0
3
- */
4
-
5
- import * as RefSubject from "@typed/fx/RefSubject"
6
- import * as Effect from "effect/Effect"
7
- import type * as Scope from "effect/Scope"
8
-
9
- /**
10
- * @since 1.0.0
11
- */
12
- export type PaginationOptions = {
13
- readonly initialPage?: number // 0
14
- readonly initialPageSize?: number // 10
15
- }
16
-
17
- /**
18
- * @since 1.0.0
19
- */
20
- export interface Pagination<E, A> {
21
- readonly page: RefSubject.Computed<number>
22
- readonly pageSize: RefSubject.Computed<number>
23
- readonly canGoBack: RefSubject.Computed<boolean>
24
- readonly canGoForward: RefSubject.Computed<boolean, E>
25
- readonly paginated: RefSubject.Computed<ReadonlyArray<A>, E>
26
- readonly viewing: RefSubject.Computed<Viewing, E>
27
-
28
- readonly goBack: Effect.Effect<number>
29
- readonly goForward: Effect.Effect<number, E>
30
- readonly goToStart: Effect.Effect<number>
31
- readonly goToEnd: Effect.Effect<number, E>
32
- }
33
-
34
- /**
35
- * @since 1.0.0
36
- */
37
- export interface Viewing {
38
- readonly from: number
39
- readonly to: number
40
- readonly total: number
41
- }
42
-
43
- /**
44
- * @since 1.0.0
45
- */
46
- export function usePagination<A, E, R>(
47
- items: RefSubject.Computed<ReadonlyArray<A>, E, R>,
48
- options: PaginationOptions = {}
49
- ): Effect.Effect<Pagination<E, A>, never, R | Scope.Scope> {
50
- return Effect.gen(function*() {
51
- const ctx = yield* Effect.context<R>()
52
- const page: RefSubject.RefSubject<number> = yield* RefSubject.of(options.initialPage ?? 0)
53
- const pageSize: RefSubject.RefSubject<number> = yield* RefSubject.of(options.initialPageSize ?? 10)
54
- const canGoBack: RefSubject.Computed<boolean> = RefSubject.map(page, (x) => x > 0)
55
- const combined: RefSubject.Computed<readonly [number, number, ReadonlyArray<A>], E> = RefSubject.provide(
56
- RefSubject.tuple([page, pageSize, items] as const),
57
- ctx
58
- )
59
- const canGoForward: RefSubject.Computed<boolean, E> = RefSubject.map(
60
- combined,
61
- ([page, pageSize, results]) => page < Math.ceil(results.length / pageSize - 1)
62
- )
63
-
64
- const getTotalPages: Effect.Effect<number, E> = Effect.provide(
65
- Effect.gen(function*() {
66
- const currentPageSize = yield* pageSize
67
- const results = yield* items
68
-
69
- return Math.ceil(results.length / currentPageSize - 1)
70
- }),
71
- ctx
72
- )
73
- const goBack: Effect.Effect<number> = RefSubject.update(page, (x) => Math.max(x - 1, 0))
74
- const goForward: Effect.Effect<number, E> = RefSubject.updateEffect(
75
- page,
76
- (currentPage) =>
77
- Effect.gen(function*() {
78
- const totalPages = yield* getTotalPages
79
- const nextPage = Math.min(currentPage + 1, totalPages)
80
-
81
- return nextPage
82
- })
83
- )
84
- const goToStart: Effect.Effect<number> = RefSubject.set(page, 0)
85
- const goToEnd: Effect.Effect<number, E> = RefSubject.updateEffect(page, () => getTotalPages)
86
-
87
- const paginated: RefSubject.Computed<ReadonlyArray<A>, E> = RefSubject.map(
88
- combined,
89
- ([page, pageSize, results]) => {
90
- const start = page * pageSize
91
- const end = start + pageSize
92
-
93
- return results.slice(start, end)
94
- }
95
- )
96
-
97
- const viewing: RefSubject.Computed<Viewing, E> = RefSubject.map(combined, ([page, pageSize, results]) => {
98
- const start = page * pageSize
99
- const end = start + pageSize
100
- const total = results.length
101
-
102
- return {
103
- from: start + 1,
104
- to: Math.min(end, total),
105
- total
106
- }
107
- })
108
-
109
- return {
110
- page,
111
- pageSize,
112
- canGoBack,
113
- canGoForward,
114
- goBack,
115
- goForward,
116
- goToStart,
117
- goToEnd,
118
- paginated,
119
- viewing
120
- } as const
121
- })
122
- }
@@ -1,6 +0,0 @@
1
- {
2
- "main": "../dist/cjs/useClickAway.js",
3
- "module": "../dist/esm/useClickAway.js",
4
- "types": "../dist/dts/useClickAway.d.ts",
5
- "sideEffects": []
6
- }
@@ -1,6 +0,0 @@
1
- {
2
- "main": "../dist/cjs/usePagination.js",
3
- "module": "../dist/esm/usePagination.js",
4
- "types": "../dist/dts/usePagination.d.ts",
5
- "sideEffects": []
6
- }