@typed/ui 0.3.2 → 0.3.4

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 (50) hide show
  1. package/Component/package.json +6 -0
  2. package/Props/package.json +6 -0
  3. package/dist/cjs/Anchor.js +3 -85
  4. package/dist/cjs/Anchor.js.map +1 -1
  5. package/dist/cjs/Component.js +6 -0
  6. package/dist/cjs/Component.js.map +1 -0
  7. package/dist/cjs/Link.js +2 -3
  8. package/dist/cjs/Link.js.map +1 -1
  9. package/dist/cjs/Props.js +26 -0
  10. package/dist/cjs/Props.js.map +1 -0
  11. package/dist/cjs/dom-properties.js.map +1 -0
  12. package/dist/cjs/index.js.map +1 -1
  13. package/dist/cjs/useClickAway.js.map +1 -1
  14. package/dist/dts/Anchor.d.ts +5 -56
  15. package/dist/dts/Anchor.d.ts.map +1 -1
  16. package/dist/dts/Component.d.ts +16 -0
  17. package/dist/dts/Component.d.ts.map +1 -0
  18. package/dist/dts/Link.d.ts +1 -1
  19. package/dist/dts/Link.d.ts.map +1 -1
  20. package/dist/dts/Props.d.ts +60 -0
  21. package/dist/dts/Props.d.ts.map +1 -0
  22. package/dist/dts/{internal/dom-properties.d.ts → dom-properties.d.ts} +258 -39
  23. package/dist/dts/dom-properties.d.ts.map +1 -0
  24. package/dist/dts/index.d.ts.map +1 -1
  25. package/dist/esm/Anchor.js +1 -65
  26. package/dist/esm/Anchor.js.map +1 -1
  27. package/dist/esm/Component.js +5 -0
  28. package/dist/esm/Component.js.map +1 -0
  29. package/dist/esm/Link.js +4 -3
  30. package/dist/esm/Link.js.map +1 -1
  31. package/dist/esm/Props.js +19 -0
  32. package/dist/esm/Props.js.map +1 -0
  33. package/dist/esm/dom-properties.js +5 -0
  34. package/dist/esm/dom-properties.js.map +1 -0
  35. package/dist/esm/index.js.map +1 -1
  36. package/dist/esm/useClickAway.js.map +1 -1
  37. package/dom-properties/package.json +6 -0
  38. package/package.json +36 -12
  39. package/src/Anchor.ts +6 -190
  40. package/src/Component.ts +24 -0
  41. package/src/Link.ts +12 -39
  42. package/src/Props.ts +95 -0
  43. package/src/{internal/dom-properties.ts → dom-properties.ts} +260 -40
  44. package/src/index.ts +1 -0
  45. package/src/useClickAway.ts +1 -1
  46. package/dist/cjs/internal/dom-properties.js.map +0 -1
  47. package/dist/dts/internal/dom-properties.d.ts.map +0 -1
  48. package/dist/esm/internal/dom-properties.js +0 -2
  49. package/dist/esm/internal/dom-properties.js.map +0 -1
  50. /package/dist/cjs/{internal/dom-properties.js → dom-properties.js} +0 -0
package/src/Props.ts ADDED
@@ -0,0 +1,95 @@
1
+ /**
2
+ * @since 1.0.0
3
+ */
4
+
5
+ import type { EventWithCurrentTarget } from "@typed/dom/EventTarget"
6
+ import type { ElementRef } from "@typed/template/ElementRef"
7
+ import type { DefaultEventMap } from "@typed/template/ElementSource"
8
+ import * as EventHandler from "@typed/template/EventHandler"
9
+ import type { Placeholder } from "@typed/template/Placeholder"
10
+ import type { Rendered } from "@typed/wire"
11
+ import { Effect } from "effect"
12
+ import type { ReadonlyRecord } from "effect"
13
+
14
+ /**
15
+ * @since 1.0.0
16
+ */
17
+ export type TypedProps<Input extends Record<string, any>, Element extends Rendered> = [
18
+ & AttrsOf<Input>
19
+ & BooleanAttrsOf<Input>
20
+ & PropsOf<Input>
21
+ & EventsOf<Element>
22
+ & RefOf<Element>
23
+ & DataProps
24
+ ] extends [infer R] ? { readonly [K in keyof R]: R[K] } : never
25
+
26
+ /**
27
+ * @since 1.0.0
28
+ */
29
+ export type AttrsOf<Props extends Record<string, any>> = {
30
+ readonly [K in keyof Props]?:
31
+ | Props[K]
32
+ | Placeholder.Any<Props[K]>
33
+ }
34
+
35
+ /**
36
+ * @since 1.0.0
37
+ */
38
+ export type BooleanAttrsOf<Attrs extends Record<string, any>> = {
39
+ readonly [
40
+ K in keyof Attrs as K extends string ? boolean extends Attrs[K] ? `?${K}` : never : never
41
+ ]?:
42
+ | Attrs[K]
43
+ | Placeholder.Any<Attrs[K]>
44
+ }
45
+
46
+ /**
47
+ * @since 1.0.0
48
+ */
49
+ export type PropsOf<Attrs extends Record<string, any>> = {
50
+ readonly [K in keyof Attrs as K extends string ? `.${K}` : never]?: Attrs[K] | Placeholder.Any<Attrs[K]>
51
+ }
52
+
53
+ /**
54
+ * @since 1.0.0
55
+ */
56
+ export type EventsOf<El, EventMap extends {} = DefaultEventMap<El>> = {
57
+ readonly [K in keyof EventMap as K extends string ? `on${Capitalize<K>}` : never]?:
58
+ | EventHandler.EventHandler<
59
+ any,
60
+ any,
61
+ EventWithCurrentTarget<El, Extract<EventMap[K], Event>>
62
+ >
63
+ | Effect.Effect<any, any, unknown>
64
+ | null
65
+ | undefined
66
+ }
67
+
68
+ /**
69
+ * @since 1.0.0
70
+ */
71
+ export type RefOf<T extends Rendered> = {
72
+ readonly ref?: ElementRef<T> | undefined
73
+ }
74
+
75
+ /**
76
+ * @since 1.0.0
77
+ */
78
+ export type DataProps = {
79
+ readonly data?: Placeholder.Any<ReadonlyRecord.ReadonlyRecord<any>> | undefined
80
+ }
81
+
82
+ /**
83
+ * @since 1.0.0
84
+ */
85
+ export function getEventHandler<R, E, Ev extends Event = Event>(
86
+ handler: EventHandler.EventHandler<R, E, Ev> | Effect.Effect<R, E, unknown> | null | undefined
87
+ ): EventHandler.EventHandler<R, E, Ev> | null {
88
+ if (!handler) return null
89
+
90
+ if (Effect.isEffect(handler)) {
91
+ return EventHandler.make(() => handler)
92
+ } else {
93
+ return handler
94
+ }
95
+ }