@fluixi/web-components 0.0.0-stage → 1.0.0-alpha.100

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 (59) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +31 -2
  3. package/dist/context.cjs +162 -0
  4. package/dist/context.d.ts +65 -0
  5. package/dist/context.d.ts.map +1 -0
  6. package/dist/context.js +192 -0
  7. package/dist/context.mjs +141 -0
  8. package/dist/element.cjs +847 -0
  9. package/dist/element.d.ts +213 -0
  10. package/dist/element.d.ts.map +1 -0
  11. package/dist/element.js +681 -0
  12. package/dist/element.mjs +835 -0
  13. package/dist/events.cjs +35 -0
  14. package/dist/events.d.ts +24 -0
  15. package/dist/events.d.ts.map +1 -0
  16. package/dist/events.js +20 -0
  17. package/dist/events.mjs +14 -0
  18. package/dist/focus.cjs +156 -0
  19. package/dist/focus.d.ts +34 -0
  20. package/dist/focus.d.ts.map +1 -0
  21. package/dist/focus.js +185 -0
  22. package/dist/focus.mjs +135 -0
  23. package/dist/form.cjs +145 -0
  24. package/dist/form.d.ts +33 -0
  25. package/dist/form.d.ts.map +1 -0
  26. package/dist/form.js +113 -0
  27. package/dist/form.mjs +125 -0
  28. package/dist/index.cjs +1202 -0
  29. package/dist/index.d.ts +41 -0
  30. package/dist/index.d.ts.map +1 -0
  31. package/dist/index.js +31 -0
  32. package/dist/index.mjs +1188 -0
  33. package/dist/props.cjs +114 -0
  34. package/dist/props.d.ts +93 -0
  35. package/dist/props.d.ts.map +1 -0
  36. package/dist/props.js +99 -0
  37. package/dist/props.mjs +93 -0
  38. package/dist/registry.cjs +77 -0
  39. package/dist/registry.d.ts +26 -0
  40. package/dist/registry.d.ts.map +1 -0
  41. package/dist/registry.js +91 -0
  42. package/dist/registry.mjs +56 -0
  43. package/dist/styles.cjs +59 -0
  44. package/dist/styles.d.ts +17 -0
  45. package/dist/styles.d.ts.map +1 -0
  46. package/dist/styles.js +53 -0
  47. package/dist/styles.mjs +38 -0
  48. package/dist/targets.cjs +42 -0
  49. package/dist/targets.d.ts +26 -0
  50. package/dist/targets.d.ts.map +1 -0
  51. package/dist/targets.js +35 -0
  52. package/dist/targets.mjs +21 -0
  53. package/dist/tsconfig.lib.tsbuildinfo +1 -0
  54. package/dist/types.cjs +18 -0
  55. package/dist/types.d.ts +78 -0
  56. package/dist/types.d.ts.map +1 -0
  57. package/dist/types.js +1 -0
  58. package/dist/types.mjs +0 -0
  59. package/package.json +53 -3
@@ -0,0 +1,213 @@
1
+ /**
2
+ * The custom element itself: lifecycle on Fluixi's existing ownership model.
3
+ *
4
+ * `HTMLReactiveElement` is a real class, authored the way the platform defines elements:
5
+ * `class X extends HTMLReactiveElement`, callbacks as methods, `customElements.define`.
6
+ * What it adds is the reactive part. Declared props are signals behind accessors, and the
7
+ * first connect runs `render()` once inside one `createRoot` scope; bindings update after
8
+ * that and `dispose` takes the whole subtree down.
9
+ *
10
+ * Visibility is deliberate. The platform callbacks are public because the browser calls
11
+ * them. `render`, `emit`, `targets`, `renderRoot`, `internals` and `authoredChildren` are
12
+ * protected: they are for the element's own code, not its consumers. The engine's state is
13
+ * in `#private` fields, private at runtime and not only to TypeScript.
14
+ *
15
+ * `insert` rather than `render`: `render` clears its container going in and again coming
16
+ * out (@fluixi/dom runtime.ts), which for a light-DOM element would delete the author's own
17
+ * children before the component ever saw them.
18
+ */
19
+ import { type Accessor } from '@fluixi/reactive/signal';
20
+ import { type PropAccessors, type PropDeclaration } from './props.js';
21
+ import { type DefineOptions } from './registry.js';
22
+ import { type Dispatch, type DispatchInit } from './events.js';
23
+ import { type Targets } from './targets.js';
24
+ import { type ElementStyles } from './styles.js';
25
+ import { type ConsumeOptions, type ElementContext } from './context.js';
26
+ /** Each element class's own server render, so the copy of this package that defined it does the work. */
27
+ declare const RENDER_ON_SERVER: unique symbol;
28
+ /** The part of a @fluixi/dom server node the renderer uses. */
29
+ interface ServerNodeLike {
30
+ localName: string;
31
+ childNodes: unknown[];
32
+ getAttribute(name: string): string | null;
33
+ setAttribute(name: string, value: string): void;
34
+ removeChild(child: unknown): unknown;
35
+ }
36
+ import type { PropValues } from './types.js';
37
+ /**
38
+ * `true`, `'open'` or `'closed'` for a plain shadow root, or the options `attachShadow` takes:
39
+ * `{ mode: 'open', delegatesFocus: true }` makes focusing the host focus the first focusable
40
+ * thing inside, which is what a custom input wants.
41
+ */
42
+ export type ShadowOption = boolean | 'open' | 'closed' | {
43
+ mode?: 'open' | 'closed';
44
+ delegatesFocus?: boolean;
45
+ slotAssignment?: 'named' | 'manual';
46
+ };
47
+ type Schema = Record<string, PropDeclaration<unknown>>;
48
+ /**
49
+ * `HTMLElement` in a browser. On a server there is none, and a module declaring
50
+ * `class X extends HTMLReactiveElement` is still imported by code that renders there, so
51
+ * the base is an inert stand-in: the class can be declared, nothing is ever defined.
52
+ */
53
+ declare const BaseElement: typeof HTMLElement;
54
+ export declare class HTMLReactiveElement extends BaseElement {
55
+ #private;
56
+ /** The declared properties, and the attributes that mirror them. Inherited and merged. */
57
+ static props?: Schema;
58
+ /**
59
+ * `false` (the default) renders into the element itself. `'open'`, `'closed'`, `true` or an
60
+ * options object attach a shadow root, which is what native `<slot>` needs. Light DOM is the default: a
61
+ * component that inherits the page's styles is usually what an app wants, and it is the
62
+ * mode that survives a server render without declarative shadow DOM.
63
+ */
64
+ static shadow?: ShadowOption;
65
+ /**
66
+ * Adopted by the shadow root, one parsed sheet shared by every instance. CSS text, a
67
+ * `CSSStyleSheet`, or a list: `[super.styles, '…']` keeps the parent's. A class meant to be
68
+ * extended declares it as `static styles: ElementStyles = …`, since a bare string narrows
69
+ * the type and a subclass's list no longer fits. Ignored in light DOM, which has no scope.
70
+ */
71
+ static styles?: ElementStyles;
72
+ /**
73
+ * The attributes of every declared prop. A mixin in between that observes its own
74
+ * extends this with `super.observedAttributes`; a subclass need not touch it.
75
+ */
76
+ static get observedAttributes(): string[];
77
+ constructor();
78
+ connectedCallback(): void;
79
+ disconnectedCallback(): void;
80
+ /** Another document, the same scope: nothing reactive depends on which document holds the node. */
81
+ adoptedCallback(): void;
82
+ attributeChangedCallback(name: string, previous: string | null, value: string | null): void;
83
+ /**
84
+ * What the element shows. Runs once, on the first connect, inside the element's reactive
85
+ * scope; bindings keep it current after that. It is never re-run, so read a prop inside a
86
+ * binding (`() => this.step`), not in the body, to follow it.
87
+ */
88
+ protected render(): unknown;
89
+ /**
90
+ * Give `context` to the elements inside this one, and to `useContext` in the components it
91
+ * renders. A value or an accessor; subscribed consumers follow the accessor. Call in `render()`.
92
+ */
93
+ protected provide<T>(context: ElementContext<T>, value: T | Accessor<T>): void;
94
+ /**
95
+ * The nearest value of `context` above this element, as an accessor: an element providing
96
+ * it, else the Fluixi app the element was rendered in, else the default. Call in `render()`.
97
+ */
98
+ protected consume<T>(context: ElementContext<T>, options?: ConsumeOptions): Accessor<T>;
99
+ /**
100
+ * Dispatch a `CustomEvent`, bubbling and composed by default. False when cancelled.
101
+ *
102
+ * The name goes out lowercased: a JSX handler listens for the name after `on`, lowercased,
103
+ * so `emit('signOut')` reaches `onSignOut`, and a listener added by hand uses `signout`.
104
+ */
105
+ protected emit<T>(type: string, detail?: T, init?: DispatchInit): boolean;
106
+ /** Elements inside this one, by `data-target`, scoped to its render root. */
107
+ protected get targets(): Targets;
108
+ /** Where `render()` output goes: the shadow root, or the element itself in light DOM. */
109
+ protected get renderRoot(): ShadowRoot | HTMLElement;
110
+ /**
111
+ * The children the author wrote between the tags, in light DOM. Empty under shadow DOM,
112
+ * where the browser projects them through `<slot>` and they were never the element's to place.
113
+ */
114
+ protected get authoredChildren(): readonly ChildNode[];
115
+ /**
116
+ * The element's `ElementInternals`, attached on first use: ARIA defaults, custom states,
117
+ * and with `static formAssociated = true`, taking part in a `<form>`.
118
+ */
119
+ protected get internals(): ElementInternals;
120
+ /**
121
+ * Render a light DOM element's content into its server node, under the page's owner so its
122
+ * context and resources are the page's. Props come from what @fluixi/dom recorded on the
123
+ * node; the ones with no attribute form ride along as JSON for the client. Shadow DOM
124
+ * elements are left to the client until declarative shadow roots are emitted.
125
+ */
126
+ static [RENDER_ON_SERVER](this: typeof HTMLReactiveElement, node: ServerNodeLike): void;
127
+ }
128
+ /**
129
+ * `HTMLReactiveElement` with the declared props typed on the instance:
130
+ * `class Counter extends typedElement(props)` gives `this.step` its type. Static props alone
131
+ * work at runtime; this is only the type.
132
+ */
133
+ export declare function typedElement<S extends Schema>(props: S): TypedElementClass<S>;
134
+ /**
135
+ * What `typedElement` returns: the base class, with the props typed on the instance and on
136
+ * the static side, so a subclass can write `static props = { ...Parent.props, extra }`.
137
+ */
138
+ export type TypedElementClass<S extends Schema> = (abstract new () => HTMLReactiveElement & PropValues<S>) & Omit<typeof HTMLReactiveElement, 'prototype' | 'props'> & {
139
+ props: S;
140
+ };
141
+ /**
142
+ * What a mixin extends: an element class, instance and statics. Constrain a mixin's base to it,
143
+ * `function Toggle<B extends ElementBase>(Base: B)`, and `super.observedAttributes` is typed.
144
+ */
145
+ export type ElementBase = (abstract new (...args: any[]) => HTMLReactiveElement) & {
146
+ readonly observedAttributes: string[];
147
+ props?: Schema;
148
+ shadow?: ShadowOption;
149
+ styles?: ElementStyles;
150
+ };
151
+ /**
152
+ * A class-to-class mixin, applied over `HTMLReactiveElement` in the function form. Generic over
153
+ * `ElementBase`, or written against `HTMLReactiveElement` itself.
154
+ */
155
+ export type ElementMixin = ((base: ElementBase) => ElementBase) | ((base: typeof HTMLReactiveElement) => typeof HTMLReactiveElement);
156
+ export interface ElementOptions<S extends Schema> {
157
+ /** Declared properties and the attributes that mirror them. */
158
+ props?: S;
159
+ /** See `HTMLReactiveElement.shadow`. */
160
+ shadow?: ShadowOption;
161
+ /** See `HTMLReactiveElement.styles`. */
162
+ styles?: ElementStyles;
163
+ /** Passed through to `customElements.define`. */
164
+ define?: DefineOptions;
165
+ /**
166
+ * Mixins applied over `HTMLReactiveElement`, in order, the way a class writes
167
+ * `extends B(A(HTMLReactiveElement))`. A mixin that implements a platform callback calls
168
+ * `super` and runs before this element's own work.
169
+ */
170
+ mixins?: ElementMixin[];
171
+ }
172
+ /**
173
+ * The constructor the function form hands back, carrying the element's properties.
174
+ *
175
+ * `new Counter().step` is a number rather than an error, and
176
+ * `HTMLElementTagNameMap['fx-counter'] = InstanceType<typeof Counter>` is the whole
177
+ * declaration a consumer writes.
178
+ */
179
+ export interface ElementConstructor<S extends Schema> extends CustomElementConstructor {
180
+ new (): HTMLReactiveElement & PropValues<S>;
181
+ readonly observedAttributes: string[];
182
+ }
183
+ /** What a setup function is handed. */
184
+ export interface Host<S extends Schema> {
185
+ /** The custom element. For focus, measurement, and anything DOM-level. */
186
+ readonly el: HTMLElement;
187
+ /** Reactive reads of the declared properties. */
188
+ readonly props: PropAccessors<S>;
189
+ /** Write a property from inside. Reflects too, when the declaration says so. */
190
+ set<K extends keyof S>(name: K, value: S[K] extends PropDeclaration<infer T> ? T : never): void;
191
+ /** Emit a `CustomEvent`. False when a listener cancelled it. */
192
+ readonly dispatch: Dispatch;
193
+ /** Elements inside this one, by `data-target`. */
194
+ readonly targets: Targets;
195
+ /** The children the author wrote between the tags, in light DOM. Empty under shadow DOM. */
196
+ children(): ChildNode[];
197
+ /** See `HTMLReactiveElement.provide`. */
198
+ provide<T>(context: ElementContext<T>, value: T | Accessor<T>): void;
199
+ /** See `HTMLReactiveElement.consume`. */
200
+ consume<T>(context: ElementContext<T>, options?: ConsumeOptions): Accessor<T>;
201
+ }
202
+ export type Setup<S extends Schema> = (host: Host<S>) => unknown;
203
+ export declare function createElementClass<S extends Schema>(setup: Setup<S>, options?: ElementOptions<S>): ElementConstructor<S>;
204
+ /**
205
+ * Define a Fluixi component as a custom element.
206
+ *
207
+ * Returns the constructor, so a caller can subclass it or hand it to a lazy loader. On a
208
+ * server it builds the class and registers nothing, which keeps the module importable from
209
+ * code that also runs during a server render.
210
+ */
211
+ export declare function defineElement<S extends Schema>(name: string, setup: Setup<S>, options?: ElementOptions<S>): ElementConstructor<S>;
212
+ export {};
213
+ //# sourceMappingURL=element.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"element.d.ts","sourceRoot":"","sources":["../src/element.ts"],"names":[],"mappings":"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"}