@typed/ui 1.0.0-beta.4 → 1.0.0-beta.6
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.
- package/README.md +53 -9
- package/dist/Alert.d.ts +78 -0
- package/dist/Alert.d.ts.map +1 -0
- package/dist/Alert.js +37 -0
- package/dist/Button.d.ts +144 -0
- package/dist/Button.d.ts.map +1 -0
- package/dist/Button.js +38 -0
- package/dist/Carousel.d.ts +547 -0
- package/dist/Carousel.d.ts.map +1 -0
- package/dist/Carousel.js +387 -0
- package/dist/Checkbox.d.ts +203 -0
- package/dist/Checkbox.d.ts.map +1 -0
- package/dist/Checkbox.js +140 -0
- package/dist/Collection.d.ts +254 -0
- package/dist/Collection.d.ts.map +1 -0
- package/dist/Collection.js +218 -0
- package/dist/Combobox.d.ts +516 -0
- package/dist/Combobox.d.ts.map +1 -0
- package/dist/Combobox.js +371 -0
- package/dist/Component.d.ts +127 -0
- package/dist/Component.d.ts.map +1 -0
- package/dist/Component.js +60 -0
- package/dist/Composite.d.ts +823 -0
- package/dist/Composite.d.ts.map +1 -0
- package/dist/Composite.js +615 -0
- package/dist/Dialog.d.ts +544 -0
- package/dist/Dialog.d.ts.map +1 -0
- package/dist/Dialog.js +355 -0
- package/dist/Disclosure.d.ts +219 -0
- package/dist/Disclosure.d.ts.map +1 -0
- package/dist/Disclosure.js +128 -0
- package/dist/Dom/Events.d.ts +122 -0
- package/dist/Dom/Events.d.ts.map +1 -0
- package/dist/Dom/Events.js +192 -0
- package/dist/Dom/Props.d.ts +161 -0
- package/dist/Dom/Props.d.ts.map +1 -0
- package/dist/Dom/Props.js +110 -0
- package/dist/Dom/Refs.d.ts +58 -0
- package/dist/Dom/Refs.d.ts.map +1 -0
- package/dist/Dom/Refs.js +61 -0
- package/dist/Dom/Render.d.ts +59 -0
- package/dist/Dom/Render.d.ts.map +1 -0
- package/dist/Dom/Render.js +71 -0
- package/dist/Dom/Types.d.ts +570 -0
- package/dist/Dom/Types.d.ts.map +1 -0
- package/dist/Dom/Types.js +1 -0
- package/dist/Dom/index.d.ts +20 -0
- package/dist/Dom/index.d.ts.map +1 -0
- package/dist/Dom/index.js +8 -0
- package/dist/Dom.d.ts +14 -0
- package/dist/Dom.d.ts.map +1 -0
- package/dist/Dom.js +13 -0
- package/dist/Focusable.d.ts +85 -0
- package/dist/Focusable.d.ts.map +1 -0
- package/dist/Focusable.js +35 -0
- package/dist/Form.d.ts +1695 -0
- package/dist/Form.d.ts.map +1 -0
- package/dist/Form.js +987 -0
- package/dist/Grid.d.ts +569 -0
- package/dist/Grid.d.ts.map +1 -0
- package/dist/Grid.js +379 -0
- package/dist/Group.d.ts +147 -0
- package/dist/Group.d.ts.map +1 -0
- package/dist/Group.js +63 -0
- package/dist/Heading.d.ts +86 -0
- package/dist/Heading.d.ts.map +1 -0
- package/dist/Heading.js +48 -0
- package/dist/Hovercard.d.ts +297 -0
- package/dist/Hovercard.d.ts.map +1 -0
- package/dist/Hovercard.js +188 -0
- package/dist/HttpRouter.d.ts +129 -6
- package/dist/HttpRouter.d.ts.map +1 -1
- package/dist/HttpRouter.js +196 -53
- package/dist/Link.d.ts +67 -28
- package/dist/Link.d.ts.map +1 -1
- package/dist/Link.js +91 -37
- package/dist/Listbox.d.ts +437 -0
- package/dist/Listbox.d.ts.map +1 -0
- package/dist/Listbox.js +316 -0
- package/dist/Menu.d.ts +972 -0
- package/dist/Menu.d.ts.map +1 -0
- package/dist/Menu.js +731 -0
- package/dist/Menubar.d.ts +367 -0
- package/dist/Menubar.d.ts.map +1 -0
- package/dist/Menubar.js +265 -0
- package/dist/Meter.d.ts +217 -0
- package/dist/Meter.d.ts.map +1 -0
- package/dist/Meter.js +94 -0
- package/dist/NativeDetails.d.ts +41 -0
- package/dist/NativeDetails.d.ts.map +1 -0
- package/dist/NativeDetails.js +40 -0
- package/dist/NativeDialog.d.ts +64 -0
- package/dist/NativeDialog.d.ts.map +1 -0
- package/dist/NativeDialog.js +50 -0
- package/dist/NativePopover.d.ts +41 -0
- package/dist/NativePopover.d.ts.map +1 -0
- package/dist/NativePopover.js +46 -0
- package/dist/Popover.d.ts +241 -0
- package/dist/Popover.d.ts.map +1 -0
- package/dist/Popover.js +141 -0
- package/dist/RadioGroup.d.ts +432 -0
- package/dist/RadioGroup.d.ts.map +1 -0
- package/dist/RadioGroup.js +291 -0
- package/dist/Role.d.ts +64 -0
- package/dist/Role.d.ts.map +1 -0
- package/dist/Role.js +27 -0
- package/dist/Select.d.ts +529 -0
- package/dist/Select.d.ts.map +1 -0
- package/dist/Select.js +407 -0
- package/dist/Separator.d.ts +54 -0
- package/dist/Separator.d.ts.map +1 -0
- package/dist/Separator.js +26 -0
- package/dist/Slider.d.ts +188 -0
- package/dist/Slider.d.ts.map +1 -0
- package/dist/Slider.js +96 -0
- package/dist/SpinButton.d.ts +188 -0
- package/dist/SpinButton.d.ts.map +1 -0
- package/dist/SpinButton.js +96 -0
- package/dist/Storybook.d.ts +76 -0
- package/dist/Storybook.d.ts.map +1 -0
- package/dist/Storybook.js +102 -0
- package/dist/Switch.d.ts +187 -0
- package/dist/Switch.d.ts.map +1 -0
- package/dist/Switch.js +116 -0
- package/dist/Tab.d.ts +26 -0
- package/dist/Tab.d.ts.map +1 -0
- package/dist/Tab.js +25 -0
- package/dist/Tabs.d.ts +591 -0
- package/dist/Tabs.d.ts.map +1 -0
- package/dist/Tabs.js +346 -0
- package/dist/Toolbar.d.ts +366 -0
- package/dist/Toolbar.d.ts.map +1 -0
- package/dist/Toolbar.js +245 -0
- package/dist/Tooltip.d.ts +296 -0
- package/dist/Tooltip.d.ts.map +1 -0
- package/dist/Tooltip.js +172 -0
- package/dist/Tree.d.ts +591 -0
- package/dist/Tree.d.ts.map +1 -0
- package/dist/Tree.js +434 -0
- package/dist/TreeGrid.d.ts +645 -0
- package/dist/TreeGrid.d.ts.map +1 -0
- package/dist/TreeGrid.js +420 -0
- package/dist/VisuallyHidden.d.ts +54 -0
- package/dist/VisuallyHidden.d.ts.map +1 -0
- package/dist/VisuallyHidden.js +27 -0
- package/dist/WindowSplitter.d.ts +376 -0
- package/dist/WindowSplitter.d.ts.map +1 -0
- package/dist/WindowSplitter.js +222 -0
- package/dist/index.d.ts +49 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +49 -0
- package/package.json +45 -18
- package/src/HttpRouter.test.ts +0 -256
- package/src/HttpRouter.ts +0 -165
- package/src/Link.test.ts +0 -84
- package/src/Link.ts +0 -107
- package/src/index.ts +0 -2
package/src/Link.ts
DELETED
|
@@ -1,107 +0,0 @@
|
|
|
1
|
-
import * as Effect from "effect/Effect";
|
|
2
|
-
import type { Scope } from "effect/Scope";
|
|
3
|
-
import type { Stream } from "effect/Stream";
|
|
4
|
-
import { type Fx, gen } from "@typed/fx/Fx";
|
|
5
|
-
import { RefSubject } from "@typed/fx/RefSubject";
|
|
6
|
-
import { getUrl, type NavigationError, Navigation } from "@typed/navigation";
|
|
7
|
-
import {
|
|
8
|
-
EventHandler,
|
|
9
|
-
type Renderable,
|
|
10
|
-
type RenderEvent,
|
|
11
|
-
type RenderTemplate,
|
|
12
|
-
html,
|
|
13
|
-
} from "@typed/template";
|
|
14
|
-
|
|
15
|
-
type EventHandlerProperty = `on${string}`;
|
|
16
|
-
|
|
17
|
-
type AnchorEventHandlers = {
|
|
18
|
-
readonly [K in keyof HTMLAnchorElement as K extends EventHandlerProperty ? K : never]?:
|
|
19
|
-
| Effect.Effect<unknown, any, any>
|
|
20
|
-
| EventHandler.EventHandler<Event, any, any>;
|
|
21
|
-
};
|
|
22
|
-
|
|
23
|
-
type AnchorRef = {
|
|
24
|
-
readonly ref?: (
|
|
25
|
-
element: HTMLAnchorElement,
|
|
26
|
-
) => void | Effect.Effect<unknown, any, any> | Stream<unknown, any, any> | Fx<unknown, any, any>;
|
|
27
|
-
};
|
|
28
|
-
|
|
29
|
-
type IfEquals<X, Y, Output> =
|
|
30
|
-
(<T>() => T extends X ? 1 : 2) extends <T>() => T extends Y ? 1 : 2 ? Output : never;
|
|
31
|
-
|
|
32
|
-
type WritableKeys<T> = {
|
|
33
|
-
[P in keyof T]-?: IfEquals<{ [Q in P]: T[P] }, { -readonly [Q in P]: T[P] }, P>;
|
|
34
|
-
}[keyof T];
|
|
35
|
-
|
|
36
|
-
type AnchorProperties = {
|
|
37
|
-
readonly [K in WritableKeys<HTMLAnchorElement> as K extends EventHandlerProperty | "ref"
|
|
38
|
-
? never
|
|
39
|
-
: K]?: Renderable<HTMLAnchorElement[K], any, any>;
|
|
40
|
-
};
|
|
41
|
-
|
|
42
|
-
export interface LinkOptions extends AnchorEventHandlers, AnchorRef, AnchorProperties {
|
|
43
|
-
readonly href: Renderable<string, any, any>;
|
|
44
|
-
readonly content: Renderable<
|
|
45
|
-
string | number | boolean | null | undefined | void | RenderEvent,
|
|
46
|
-
any,
|
|
47
|
-
any
|
|
48
|
-
>;
|
|
49
|
-
readonly replace?: boolean; // false
|
|
50
|
-
}
|
|
51
|
-
|
|
52
|
-
function makeLinkClickHandler(
|
|
53
|
-
replace$: RefSubject.RefSubject<boolean>,
|
|
54
|
-
): EventHandler.EventHandler<
|
|
55
|
-
MouseEvent & { readonly currentTarget: HTMLAnchorElement },
|
|
56
|
-
NavigationError,
|
|
57
|
-
Navigation
|
|
58
|
-
> {
|
|
59
|
-
return EventHandler.make((ev: MouseEvent & { readonly currentTarget: HTMLAnchorElement }) =>
|
|
60
|
-
Effect.gen(function* () {
|
|
61
|
-
const href = ev.currentTarget.href;
|
|
62
|
-
if (ev.ctrlKey || ev.metaKey || ev.shiftKey) return;
|
|
63
|
-
const t = ev.currentTarget.target;
|
|
64
|
-
if (t && t !== "_self") return;
|
|
65
|
-
const nav = yield* Navigation;
|
|
66
|
-
const target = getUrl(nav.origin, href);
|
|
67
|
-
if (target.origin !== nav.origin) return;
|
|
68
|
-
ev.preventDefault();
|
|
69
|
-
const replace = yield* replace$;
|
|
70
|
-
yield* nav.navigate(href, { history: replace ? "replace" : "push" });
|
|
71
|
-
}),
|
|
72
|
-
);
|
|
73
|
-
}
|
|
74
|
-
|
|
75
|
-
/**
|
|
76
|
-
* Renders an `<a href="...">` that intercepts same-origin, same-document clicks
|
|
77
|
-
* and navigates via `Navigation.navigate` instead of full page load. Requires
|
|
78
|
-
* `Navigation` and `RenderTemplate` in the Effect context (e.g. `BrowserRouter`).
|
|
79
|
-
*/
|
|
80
|
-
export function Link<const Opts extends LinkOptions>(
|
|
81
|
-
options: Opts,
|
|
82
|
-
): Fx<
|
|
83
|
-
RenderEvent,
|
|
84
|
-
Renderable.ErrorFromObject<Opts>,
|
|
85
|
-
Renderable.ServicesFromObject<Opts> | Scope | RenderTemplate
|
|
86
|
-
> {
|
|
87
|
-
return gen(function* () {
|
|
88
|
-
const { replace = false, onclick, content: children, ...rest } = options;
|
|
89
|
-
const replace$ = yield* RefSubject.make(replace);
|
|
90
|
-
const navigationHandler = makeLinkClickHandler(replace$);
|
|
91
|
-
const userHandler = onclick ? EventHandler.fromEffectOrEventHandler(onclick) : undefined;
|
|
92
|
-
const clickHandler = userHandler
|
|
93
|
-
? EventHandler.make(
|
|
94
|
-
Effect.fn(function* (ev: MouseEvent & { readonly currentTarget: HTMLAnchorElement }) {
|
|
95
|
-
yield* userHandler.handler(ev);
|
|
96
|
-
if (ev.defaultPrevented) return;
|
|
97
|
-
yield* navigationHandler.handler(ev);
|
|
98
|
-
}),
|
|
99
|
-
{ ...userHandler.options, preventDefault: true },
|
|
100
|
-
)
|
|
101
|
-
: navigationHandler;
|
|
102
|
-
|
|
103
|
-
const props: Record<string, unknown> = { ...rest, onclick: clickHandler };
|
|
104
|
-
|
|
105
|
-
return html`<a ...${props}>${children}</a>`;
|
|
106
|
-
});
|
|
107
|
-
}
|
package/src/index.ts
DELETED