element-vir 26.12.0 → 26.12.1
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/dist/declarative-element/custom-tag-name.js +1 -0
- package/dist/declarative-element/declarative-element-init.d.ts +56 -0
- package/dist/declarative-element/declarative-element-init.js +1 -0
- package/dist/declarative-element/declarative-element.d.ts +114 -0
- package/dist/declarative-element/declarative-element.js +36 -0
- package/dist/declarative-element/define-element.d.ts +41 -0
- package/dist/declarative-element/define-element.js +248 -0
- package/{src/declarative-element/definition-options.ts → dist/declarative-element/definition-options.d.ts} +2 -7
- package/dist/declarative-element/definition-options.js +9 -0
- package/dist/declarative-element/directives/assign.directive.d.ts +24 -0
- package/dist/declarative-element/directives/assign.directive.js +34 -0
- package/dist/declarative-element/directives/async-prop.d.ts +61 -0
- package/{src/declarative-element/directives/async-prop.ts → dist/declarative-element/directives/async-prop.js} +8 -42
- package/dist/declarative-element/directives/attributes.directive.d.ts +30 -0
- package/dist/declarative-element/directives/attributes.directive.js +35 -0
- package/dist/declarative-element/directives/create-attribute-directive.d.ts +28 -0
- package/dist/declarative-element/directives/create-attribute-directive.js +41 -0
- package/dist/declarative-element/directives/directive-helpers.d.ts +27 -0
- package/dist/declarative-element/directives/directive-helpers.js +37 -0
- package/dist/declarative-element/directives/listen-to-activate.d.ts +15 -0
- package/{src/declarative-element/directives/listen-to-activate.ts → dist/declarative-element/directives/listen-to-activate.js} +3 -8
- package/dist/declarative-element/directives/listen.directive.d.ts +92 -0
- package/dist/declarative-element/directives/listen.directive.js +48 -0
- package/dist/declarative-element/directives/mutate.directive.d.ts +38 -0
- package/dist/declarative-element/directives/mutate.directive.js +45 -0
- package/dist/declarative-element/directives/on-dom-created.directive.d.ts +44 -0
- package/dist/declarative-element/directives/on-dom-created.directive.js +51 -0
- package/dist/declarative-element/directives/on-dom-rendered.directive.d.ts +41 -0
- package/dist/declarative-element/directives/on-dom-rendered.directive.js +45 -0
- package/dist/declarative-element/directives/on-intersect.directive.d.ts +64 -0
- package/dist/declarative-element/directives/on-intersect.directive.js +89 -0
- package/dist/declarative-element/directives/on-resize.directive.d.ts +74 -0
- package/dist/declarative-element/directives/on-resize.directive.js +106 -0
- package/dist/declarative-element/directives/render-async.directive.d.ts +45 -0
- package/dist/declarative-element/directives/render-async.directive.js +33 -0
- package/dist/declarative-element/directives/render-if.directive.d.ts +32 -0
- package/{src/declarative-element/directives/render-if.directive.ts → dist/declarative-element/directives/render-if.directive.js} +3 -12
- package/dist/declarative-element/directives/test-id.directive.d.ts +52 -0
- package/{src/declarative-element/directives/test-id.directive.ts → dist/declarative-element/directives/test-id.directive.js} +2 -7
- package/dist/declarative-element/has-declarative-element-parent.d.ts +1 -0
- package/{src/declarative-element/has-declarative-element-parent.ts → dist/declarative-element/has-declarative-element-parent.js} +4 -7
- package/dist/declarative-element/is-declarative-element-definition.d.ts +17 -0
- package/{src/declarative-element/is-declarative-element-definition.ts → dist/declarative-element/is-declarative-element-definition.js} +11 -28
- package/dist/declarative-element/is-declarative-element.d.ts +15 -0
- package/{src/declarative-element/is-declarative-element.ts → dist/declarative-element/is-declarative-element.js} +5 -11
- package/dist/declarative-element/properties/assign-inputs.d.ts +1 -0
- package/dist/declarative-element/properties/assign-inputs.js +25 -0
- package/dist/declarative-element/properties/css-vars.d.ts +16 -0
- package/dist/declarative-element/properties/css-vars.js +1 -0
- package/dist/declarative-element/properties/element-events.d.ts +65 -0
- package/dist/declarative-element/properties/element-events.js +62 -0
- package/dist/declarative-element/properties/element-properties.js +1 -0
- package/dist/declarative-element/properties/host-classes.d.ts +36 -0
- package/dist/declarative-element/properties/host-classes.js +16 -0
- package/dist/declarative-element/properties/property-proxy.d.ts +22 -0
- package/{src/declarative-element/properties/property-proxy.ts → dist/declarative-element/properties/property-proxy.js} +21 -58
- package/dist/declarative-element/properties/string-names.d.ts +28 -0
- package/dist/declarative-element/properties/string-names.js +40 -0
- package/dist/declarative-element/properties/styles.d.ts +51 -0
- package/dist/declarative-element/properties/styles.js +41 -0
- package/dist/declarative-element/properties/tag-name.js +1 -0
- package/dist/declarative-element/render-callback.d.ts +56 -0
- package/dist/declarative-element/render-callback.js +27 -0
- package/dist/declarative-element/wrap-define-element.d.ts +36 -0
- package/dist/declarative-element/wrap-define-element.js +25 -0
- package/{src/index.ts → dist/index.d.ts} +0 -1
- package/dist/index.js +43 -0
- package/dist/lit-exports/all-lit-exports.js +2 -0
- package/{src/lit-exports/base-lit-exports.ts → dist/lit-exports/base-lit-exports.d.ts} +2 -10
- package/dist/lit-exports/base-lit-exports.js +24 -0
- package/{src/lit-exports/lit-repeat-fix.ts → dist/lit-exports/lit-repeat-fix.d.ts} +16 -45
- package/dist/lit-exports/lit-repeat-fix.js +37 -0
- package/dist/readme-examples/my-app.element.d.ts +1 -0
- package/{src/readme-examples/my-app.element.ts → dist/readme-examples/my-app.element.js} +4 -5
- package/dist/readme-examples/my-custom-action.event.d.ts +1 -0
- package/dist/readme-examples/my-custom-action.event.js +2 -0
- package/dist/readme-examples/my-custom-define.d.ts +4 -0
- package/{src/readme-examples/my-custom-define.ts → dist/readme-examples/my-custom-define.js} +4 -9
- package/dist/readme-examples/my-simple.element.d.ts +1 -0
- package/{src/readme-examples/my-simple.element.ts → dist/readme-examples/my-simple.element.js} +3 -4
- package/dist/readme-examples/my-with-assignment.element.d.ts +1 -0
- package/dist/readme-examples/my-with-assignment.element.js +15 -0
- package/dist/readme-examples/my-with-async-prop.element.d.ts +10 -0
- package/{src/readme-examples/my-with-async-prop.element.ts → dist/readme-examples/my-with-async-prop.element.js} +16 -24
- package/dist/readme-examples/my-with-cleanup-callback.element.d.ts +3 -0
- package/{src/readme-examples/my-with-cleanup-callback.element.ts → dist/readme-examples/my-with-cleanup-callback.element.js} +4 -5
- package/dist/readme-examples/my-with-css-vars.element.d.ts +1 -0
- package/{src/readme-examples/my-with-css-vars.element.ts → dist/readme-examples/my-with-css-vars.element.js} +4 -5
- package/dist/readme-examples/my-with-custom-events.element.d.ts +1 -0
- package/dist/readme-examples/my-with-custom-events.element.js +22 -0
- package/dist/readme-examples/my-with-event-listening.element.d.ts +3 -0
- package/{src/readme-examples/my-with-event-listening.element.ts → dist/readme-examples/my-with-event-listening.element.js} +9 -10
- package/dist/readme-examples/my-with-events.element.d.ts +4 -0
- package/dist/readme-examples/my-with-events.element.js +20 -0
- package/dist/readme-examples/my-with-host-class-definition.element.d.ts +3 -0
- package/{src/readme-examples/my-with-host-class-definition.element.ts → dist/readme-examples/my-with-host-class-definition.element.js} +6 -7
- package/dist/readme-examples/my-with-host-class-usage.element.d.ts +1 -0
- package/{src/readme-examples/my-with-host-class-usage.element.ts → dist/readme-examples/my-with-host-class-usage.element.js} +4 -5
- package/dist/readme-examples/my-with-inputs.element.d.ts +4 -0
- package/dist/readme-examples/my-with-inputs.element.js +9 -0
- package/dist/readme-examples/my-with-on-dom-created.element.d.ts +1 -0
- package/{src/readme-examples/my-with-on-dom-created.element.ts → dist/readme-examples/my-with-on-dom-created.element.js} +6 -7
- package/dist/readme-examples/my-with-on-resize.element.d.ts +1 -0
- package/dist/readme-examples/my-with-on-resize.element.js +18 -0
- package/dist/readme-examples/my-with-render-if.element.d.ts +3 -0
- package/dist/readme-examples/my-with-render-if.element.js +11 -0
- package/dist/readme-examples/my-with-styles-and-interpolated-selector.element.d.ts +1 -0
- package/{src/readme-examples/my-with-styles-and-interpolated-selector.element.ts → dist/readme-examples/my-with-styles-and-interpolated-selector.element.js} +5 -6
- package/dist/readme-examples/my-with-styles.element.d.ts +1 -0
- package/{src/readme-examples/my-with-styles.element.ts → dist/readme-examples/my-with-styles.element.js} +4 -5
- package/dist/readme-examples/my-with-update-state.element.d.ts +8 -0
- package/{src/readme-examples/my-with-update-state.element.ts → dist/readme-examples/my-with-update-state.element.js} +7 -8
- package/dist/readme-examples/require-declarative-element.d.ts +1 -0
- package/dist/readme-examples/require-declarative-element.js +2 -0
- package/dist/require-declarative-element.d.ts +14 -0
- package/{src/require-declarative-element.ts → dist/require-declarative-element.js} +0 -1
- package/{src/template-transforms/minimal-element-definition.ts → dist/template-transforms/minimal-element-definition.d.ts} +7 -19
- package/dist/template-transforms/minimal-element-definition.js +19 -0
- package/dist/template-transforms/nested-mapped-templates.d.ts +6 -0
- package/dist/template-transforms/nested-mapped-templates.js +96 -0
- package/{src/template-transforms/template-transform-type.ts → dist/template-transforms/template-transform-type.d.ts} +1 -3
- package/dist/template-transforms/template-transform-type.js +1 -0
- package/dist/template-transforms/transform-template.d.ts +14 -0
- package/{src/template-transforms/transform-template.ts → dist/template-transforms/transform-template.js} +22 -70
- package/dist/template-transforms/vir-css/css-transform.d.ts +4 -0
- package/dist/template-transforms/vir-css/css-transform.js +15 -0
- package/dist/template-transforms/vir-css/vir-css.d.ts +12 -0
- package/dist/template-transforms/vir-css/vir-css.js +21 -0
- package/dist/template-transforms/vir-html/html-interpolation.d.ts +42 -0
- package/dist/template-transforms/vir-html/html-interpolation.js +1 -0
- package/dist/template-transforms/vir-html/html-transform.d.ts +5 -0
- package/dist/template-transforms/vir-html/html-transform.js +96 -0
- package/dist/template-transforms/vir-html/tag-name-keys.d.ts +7 -0
- package/{src/template-transforms/vir-html/tag-name-keys.ts → dist/template-transforms/vir-html/tag-name-keys.js} +1 -1
- package/dist/template-transforms/vir-html/vir-html.d.ts +11 -0
- package/{src/template-transforms/vir-html/vir-html.ts → dist/template-transforms/vir-html/vir-html.js} +5 -13
- package/dist/typed-event/typed-event.d.ts +55 -0
- package/dist/typed-event/typed-event.js +50 -0
- package/dist/util/array.d.ts +5 -0
- package/{src/util/array.ts → dist/util/array.js} +5 -18
- package/{src/util/increment.ts → dist/util/increment.d.ts} +5 -24
- package/dist/util/increment.js +1 -0
- package/dist/util/lit-template.d.ts +9 -0
- package/{src/util/lit-template.ts → dist/util/lit-template.js} +10 -30
- package/dist/util/map-async-value.d.ts +7 -0
- package/{src/util/map-async-value.ts → dist/util/map-async-value.js} +10 -12
- package/dist/util/type.js +1 -0
- package/package.json +4 -4
- package/src/declarative-element/declarative-element-init.ts +0 -115
- package/src/declarative-element/declarative-element.ts +0 -372
- package/src/declarative-element/define-element.ts +0 -515
- package/src/declarative-element/directives/assign.directive.ts +0 -89
- package/src/declarative-element/directives/attributes.directive.ts +0 -63
- package/src/declarative-element/directives/create-attribute-directive.ts +0 -47
- package/src/declarative-element/directives/directive-helpers.ts +0 -67
- package/src/declarative-element/directives/listen.directive.ts +0 -206
- package/src/declarative-element/directives/mutate.directive.ts +0 -78
- package/src/declarative-element/directives/on-dom-created.directive.ts +0 -68
- package/src/declarative-element/directives/on-dom-rendered.directive.ts +0 -61
- package/src/declarative-element/directives/on-intersect.directive.ts +0 -139
- package/src/declarative-element/directives/on-resize.directive.ts +0 -142
- package/src/declarative-element/directives/render-async.directive.ts +0 -111
- package/src/declarative-element/properties/assign-inputs.ts +0 -30
- package/src/declarative-element/properties/css-vars.ts +0 -24
- package/src/declarative-element/properties/element-events.ts +0 -161
- package/src/declarative-element/properties/host-classes.ts +0 -63
- package/src/declarative-element/properties/string-names.ts +0 -83
- package/src/declarative-element/properties/styles.ts +0 -112
- package/src/declarative-element/render-callback.ts +0 -196
- package/src/declarative-element/wrap-define-element.ts +0 -127
- package/src/readme-examples/my-custom-action.event.ts +0 -3
- package/src/readme-examples/my-with-assignment.element.ts +0 -16
- package/src/readme-examples/my-with-custom-events.element.ts +0 -23
- package/src/readme-examples/my-with-events.element.ts +0 -23
- package/src/readme-examples/my-with-inputs.element.ts +0 -13
- package/src/readme-examples/my-with-on-resize.element.ts +0 -19
- package/src/readme-examples/my-with-render-if.element.ts +0 -15
- package/src/readme-examples/require-declarative-element.ts +0 -3
- package/src/template-transforms/nested-mapped-templates.ts +0 -157
- package/src/template-transforms/vir-css/css-transform.ts +0 -30
- package/src/template-transforms/vir-css/vir-css.ts +0 -30
- package/src/template-transforms/vir-html/html-interpolation.ts +0 -103
- package/src/template-transforms/vir-html/html-transform.ts +0 -149
- package/src/typed-event/typed-event.ts +0 -90
- /package/{src/declarative-element/custom-tag-name.ts → dist/declarative-element/custom-tag-name.d.ts} +0 -0
- /package/{src/declarative-element/properties/element-properties.ts → dist/declarative-element/properties/element-properties.d.ts} +0 -0
- /package/{src/declarative-element/properties/tag-name.ts → dist/declarative-element/properties/tag-name.d.ts} +0 -0
- /package/{src/lit-exports/all-lit-exports.ts → dist/lit-exports/all-lit-exports.d.ts} +0 -0
- /package/{src/util/type.ts → dist/util/type.d.ts} +0 -0
|
@@ -1,112 +0,0 @@
|
|
|
1
|
-
import {getObjectTypedKeys, mapObjectValues} from '@augment-vir/common';
|
|
2
|
-
import {type CSSResult, unsafeCSS} from '../../lit-exports/base-lit-exports.js';
|
|
3
|
-
import {type CustomElementTagName} from '../custom-tag-name.js';
|
|
4
|
-
import {type CssVars} from './css-vars.js';
|
|
5
|
-
import {type PropertyInitMapBase} from './element-properties.js';
|
|
6
|
-
import {type HostClassNamesMap, type HostClassesInitMap} from './host-classes.js';
|
|
7
|
-
import {type BaseStringName} from './string-names.js';
|
|
8
|
-
|
|
9
|
-
/**
|
|
10
|
-
* A host class instance to be referenced inside of an element definition's `styles` callback.
|
|
11
|
-
*
|
|
12
|
-
* @category Internal
|
|
13
|
-
*/
|
|
14
|
-
export type HostClass = {
|
|
15
|
-
selector: CSSResult;
|
|
16
|
-
name: CSSResult;
|
|
17
|
-
};
|
|
18
|
-
|
|
19
|
-
/**
|
|
20
|
-
* Input type for an element definition's `styles` callback.
|
|
21
|
-
*
|
|
22
|
-
* @category Internal
|
|
23
|
-
*/
|
|
24
|
-
export type StylesCallbackInput<
|
|
25
|
-
TagName extends CustomElementTagName,
|
|
26
|
-
HostClassKeys extends BaseStringName<TagName>,
|
|
27
|
-
CssVarKeys extends BaseStringName<TagName>,
|
|
28
|
-
> = {
|
|
29
|
-
hostClasses: Record<HostClassKeys, HostClass>;
|
|
30
|
-
cssVars: Readonly<CssVars<TagName, CssVarKeys>>;
|
|
31
|
-
};
|
|
32
|
-
|
|
33
|
-
/**
|
|
34
|
-
* The type for an element definition's `styles` callback.
|
|
35
|
-
*
|
|
36
|
-
* @category Internal
|
|
37
|
-
*/
|
|
38
|
-
export type StylesCallback<
|
|
39
|
-
TagName extends CustomElementTagName,
|
|
40
|
-
HostClassKeys extends BaseStringName<TagName>,
|
|
41
|
-
CssVarKeys extends BaseStringName<TagName>,
|
|
42
|
-
> = (input: StylesCallbackInput<TagName, HostClassKeys, CssVarKeys>) => CSSResult;
|
|
43
|
-
|
|
44
|
-
/**
|
|
45
|
-
* Creates the input for an element definition's `styles` callback.
|
|
46
|
-
*
|
|
47
|
-
* @category Internal
|
|
48
|
-
*/
|
|
49
|
-
export function createStylesCallbackInput<
|
|
50
|
-
TagName extends CustomElementTagName,
|
|
51
|
-
HostClassKeys extends BaseStringName<TagName>,
|
|
52
|
-
CssVarKeys extends BaseStringName<TagName>,
|
|
53
|
-
>({
|
|
54
|
-
hostClassNames,
|
|
55
|
-
cssVars,
|
|
56
|
-
}: {
|
|
57
|
-
hostClassNames: HostClassNamesMap<TagName, HostClassKeys>;
|
|
58
|
-
cssVars: Readonly<CssVars<TagName, CssVarKeys>>;
|
|
59
|
-
}): StylesCallbackInput<TagName, HostClassKeys, CssVarKeys> {
|
|
60
|
-
return {
|
|
61
|
-
hostClasses: mapObjectValues(hostClassNames, (key, name): HostClass => {
|
|
62
|
-
return {
|
|
63
|
-
name: unsafeCSS(name),
|
|
64
|
-
selector: unsafeCSS(`:host(.${name})`),
|
|
65
|
-
};
|
|
66
|
-
}),
|
|
67
|
-
cssVars,
|
|
68
|
-
};
|
|
69
|
-
}
|
|
70
|
-
|
|
71
|
-
/**
|
|
72
|
-
* Used inside of an element instance to apply host classes on each render.
|
|
73
|
-
*
|
|
74
|
-
* @category Internal
|
|
75
|
-
*/
|
|
76
|
-
export function applyHostClasses<
|
|
77
|
-
TagName extends CustomElementTagName,
|
|
78
|
-
Inputs extends PropertyInitMapBase,
|
|
79
|
-
State extends PropertyInitMapBase,
|
|
80
|
-
HostClassKeys extends BaseStringName<TagName>,
|
|
81
|
-
>({
|
|
82
|
-
host,
|
|
83
|
-
hostClassesInit,
|
|
84
|
-
hostClassNames,
|
|
85
|
-
state,
|
|
86
|
-
inputs,
|
|
87
|
-
}: {
|
|
88
|
-
host: HTMLElement;
|
|
89
|
-
hostClassesInit:
|
|
90
|
-
| Readonly<HostClassesInitMap<TagName, HostClassKeys, Inputs, State>>
|
|
91
|
-
| undefined;
|
|
92
|
-
hostClassNames: HostClassNamesMap<string, HostClassKeys>;
|
|
93
|
-
state: Readonly<State>;
|
|
94
|
-
inputs: Readonly<Inputs>;
|
|
95
|
-
}): void {
|
|
96
|
-
if (!hostClassesInit) {
|
|
97
|
-
return;
|
|
98
|
-
}
|
|
99
|
-
getObjectTypedKeys(hostClassesInit).forEach((hostClassKey) => {
|
|
100
|
-
const maybeCallback = hostClassesInit[hostClassKey];
|
|
101
|
-
const hostClassName = hostClassNames[hostClassKey];
|
|
102
|
-
|
|
103
|
-
if (typeof maybeCallback === 'function') {
|
|
104
|
-
const shouldApplyHostClass = maybeCallback({state, inputs});
|
|
105
|
-
if (shouldApplyHostClass) {
|
|
106
|
-
host.classList.add(hostClassName);
|
|
107
|
-
} else {
|
|
108
|
-
host.classList.remove(hostClassName);
|
|
109
|
-
}
|
|
110
|
-
}
|
|
111
|
-
});
|
|
112
|
-
}
|
|
@@ -1,196 +0,0 @@
|
|
|
1
|
-
import {getObjectTypedKeys, type SetRequiredAndNotNull} from '@augment-vir/common';
|
|
2
|
-
import {type HtmlInterpolation} from '../template-transforms/vir-html/html-interpolation.js';
|
|
3
|
-
import {type TypedEvent} from '../typed-event/typed-event.js';
|
|
4
|
-
import {type CustomElementTagName} from './custom-tag-name.js';
|
|
5
|
-
import {type DeclarativeElement, type DeclarativeElementHost} from './declarative-element.js';
|
|
6
|
-
import {type CssVars} from './properties/css-vars.js';
|
|
7
|
-
import {
|
|
8
|
-
type EventDescriptorMap,
|
|
9
|
-
type EventInitMapEventDetailExtractor,
|
|
10
|
-
type EventsInitMap,
|
|
11
|
-
} from './properties/element-events.js';
|
|
12
|
-
import {type PropertyInitMapBase} from './properties/element-properties.js';
|
|
13
|
-
import {type BaseStringName, type StringNameMap} from './properties/string-names.js';
|
|
14
|
-
|
|
15
|
-
/**
|
|
16
|
-
* Type for the `render` element definition method.
|
|
17
|
-
*
|
|
18
|
-
* @category Internal
|
|
19
|
-
*/
|
|
20
|
-
export type RenderCallback<
|
|
21
|
-
TagName extends CustomElementTagName = any,
|
|
22
|
-
Inputs extends PropertyInitMapBase = any,
|
|
23
|
-
State extends PropertyInitMapBase = any,
|
|
24
|
-
EventsInit extends EventsInitMap = any,
|
|
25
|
-
HostClassKeys extends BaseStringName<TagName> = any,
|
|
26
|
-
CssVarKeys extends BaseStringName<TagName> = any,
|
|
27
|
-
SlotNames extends ReadonlyArray<string> = any,
|
|
28
|
-
TestIds extends ReadonlyArray<string> = any,
|
|
29
|
-
> = (
|
|
30
|
-
params: RenderParams<
|
|
31
|
-
TagName,
|
|
32
|
-
Inputs,
|
|
33
|
-
State,
|
|
34
|
-
EventsInit,
|
|
35
|
-
HostClassKeys,
|
|
36
|
-
CssVarKeys,
|
|
37
|
-
SlotNames,
|
|
38
|
-
TestIds
|
|
39
|
-
>,
|
|
40
|
-
) => HtmlInterpolation;
|
|
41
|
-
|
|
42
|
-
/**
|
|
43
|
-
* Type for the `init` and `cleanup` element definition methods.
|
|
44
|
-
*
|
|
45
|
-
* @category Internal
|
|
46
|
-
*/
|
|
47
|
-
export type InitCallback<
|
|
48
|
-
TagName extends CustomElementTagName,
|
|
49
|
-
Inputs extends PropertyInitMapBase,
|
|
50
|
-
State extends PropertyInitMapBase,
|
|
51
|
-
EventsInit extends EventsInitMap,
|
|
52
|
-
HostClassKeys extends BaseStringName<TagName>,
|
|
53
|
-
CssVarKeys extends BaseStringName<TagName>,
|
|
54
|
-
SlotNames extends ReadonlyArray<string>,
|
|
55
|
-
TestIds extends ReadonlyArray<string>,
|
|
56
|
-
> = (
|
|
57
|
-
params: RenderParams<
|
|
58
|
-
TagName,
|
|
59
|
-
Inputs,
|
|
60
|
-
State,
|
|
61
|
-
EventsInit,
|
|
62
|
-
HostClassKeys,
|
|
63
|
-
CssVarKeys,
|
|
64
|
-
SlotNames,
|
|
65
|
-
TestIds
|
|
66
|
-
>,
|
|
67
|
-
) => undefined | void;
|
|
68
|
-
|
|
69
|
-
/**
|
|
70
|
-
* Type for the `updateState` render parameter.
|
|
71
|
-
*
|
|
72
|
-
* @category Internal
|
|
73
|
-
*/
|
|
74
|
-
export type UpdateStateCallback<State extends PropertyInitMapBase> = (
|
|
75
|
-
newState: Partial<State>,
|
|
76
|
-
) => void;
|
|
77
|
-
|
|
78
|
-
/**
|
|
79
|
-
* The full parameters object passed to `render`, `init`, and `cleanup` element definition methods.
|
|
80
|
-
*
|
|
81
|
-
* @category Internal
|
|
82
|
-
*/
|
|
83
|
-
export type RenderParams<
|
|
84
|
-
TagName extends CustomElementTagName,
|
|
85
|
-
Inputs extends PropertyInitMapBase,
|
|
86
|
-
State extends PropertyInitMapBase,
|
|
87
|
-
EventsInit extends EventsInitMap,
|
|
88
|
-
HostClassKeys extends BaseStringName<TagName>,
|
|
89
|
-
CssVarKeys extends BaseStringName<TagName>,
|
|
90
|
-
SlotNames extends ReadonlyArray<string>,
|
|
91
|
-
TestIds extends ReadonlyArray<string>,
|
|
92
|
-
> = {
|
|
93
|
-
state: Readonly<State>;
|
|
94
|
-
cssVars: Readonly<CssVars<TagName, CssVarKeys>>;
|
|
95
|
-
updateState: UpdateStateCallback<State>;
|
|
96
|
-
events: EventDescriptorMap<TagName, EventsInit>;
|
|
97
|
-
host: DeclarativeElementHost<
|
|
98
|
-
TagName,
|
|
99
|
-
Inputs,
|
|
100
|
-
State,
|
|
101
|
-
EventsInit,
|
|
102
|
-
HostClassKeys,
|
|
103
|
-
CssVarKeys,
|
|
104
|
-
SlotNames,
|
|
105
|
-
TestIds
|
|
106
|
-
>;
|
|
107
|
-
slotNames: Readonly<StringNameMap<TagName, 'slot', SlotNames>>;
|
|
108
|
-
testIds: Readonly<StringNameMap<TagName, 'test-id', TestIds>>;
|
|
109
|
-
/** Dispatch an event from the current element. */
|
|
110
|
-
dispatch: <EventTypeName extends keyof EventsInit>(
|
|
111
|
-
event:
|
|
112
|
-
| TypedEvent<
|
|
113
|
-
EventTypeName extends string ? EventTypeName : never,
|
|
114
|
-
EventInitMapEventDetailExtractor<EventTypeName, EventsInit>
|
|
115
|
-
>
|
|
116
|
-
| Event,
|
|
117
|
-
) => boolean;
|
|
118
|
-
inputs: Readonly<Inputs>;
|
|
119
|
-
};
|
|
120
|
-
|
|
121
|
-
/**
|
|
122
|
-
* This is used to create the parameters passed to the `render`, `init`, and `cleanup` element
|
|
123
|
-
* definition methods whenever they are called.
|
|
124
|
-
*
|
|
125
|
-
* @category Internal
|
|
126
|
-
*/
|
|
127
|
-
export function createRenderParams<
|
|
128
|
-
TagName extends CustomElementTagName,
|
|
129
|
-
Inputs extends PropertyInitMapBase,
|
|
130
|
-
State extends PropertyInitMapBase,
|
|
131
|
-
EventsInit extends EventsInitMap,
|
|
132
|
-
HostClassKeys extends BaseStringName<TagName>,
|
|
133
|
-
CssVarKeys extends BaseStringName<TagName>,
|
|
134
|
-
SlotNames extends ReadonlyArray<string>,
|
|
135
|
-
TestIds extends ReadonlyArray<string>,
|
|
136
|
-
>({
|
|
137
|
-
element,
|
|
138
|
-
eventsMap,
|
|
139
|
-
cssVars,
|
|
140
|
-
slotNamesMap,
|
|
141
|
-
testIdsMap,
|
|
142
|
-
}: {
|
|
143
|
-
element: DeclarativeElement<
|
|
144
|
-
TagName,
|
|
145
|
-
Inputs,
|
|
146
|
-
State,
|
|
147
|
-
EventsInit,
|
|
148
|
-
HostClassKeys,
|
|
149
|
-
CssVarKeys,
|
|
150
|
-
SlotNames,
|
|
151
|
-
TestIds
|
|
152
|
-
>;
|
|
153
|
-
eventsMap: EventDescriptorMap<TagName, EventsInit>;
|
|
154
|
-
cssVars: Readonly<CssVars<TagName, CssVarKeys>>;
|
|
155
|
-
slotNamesMap: Readonly<StringNameMap<TagName, 'slot', SlotNames>>;
|
|
156
|
-
testIdsMap: Readonly<StringNameMap<TagName, 'test-id', TestIds>>;
|
|
157
|
-
}): RenderParams<
|
|
158
|
-
TagName,
|
|
159
|
-
Inputs,
|
|
160
|
-
State,
|
|
161
|
-
EventsInit,
|
|
162
|
-
HostClassKeys,
|
|
163
|
-
CssVarKeys,
|
|
164
|
-
SlotNames,
|
|
165
|
-
TestIds
|
|
166
|
-
> {
|
|
167
|
-
function updateState(newStatePartial: Parameters<UpdateStateCallback<State>>[0]) {
|
|
168
|
-
getObjectTypedKeys(newStatePartial).forEach((stateKey) => {
|
|
169
|
-
const newValue = newStatePartial[stateKey] as State[typeof stateKey];
|
|
170
|
-
|
|
171
|
-
element.instanceState[stateKey] = newValue;
|
|
172
|
-
});
|
|
173
|
-
}
|
|
174
|
-
|
|
175
|
-
const renderParams: RenderParams<
|
|
176
|
-
TagName,
|
|
177
|
-
Inputs,
|
|
178
|
-
State,
|
|
179
|
-
EventsInit,
|
|
180
|
-
HostClassKeys,
|
|
181
|
-
CssVarKeys,
|
|
182
|
-
SlotNames,
|
|
183
|
-
TestIds
|
|
184
|
-
> = {
|
|
185
|
-
cssVars,
|
|
186
|
-
slotNames: slotNamesMap,
|
|
187
|
-
testIds: testIdsMap,
|
|
188
|
-
dispatch: (event) => element.dispatchEvent(event),
|
|
189
|
-
events: eventsMap,
|
|
190
|
-
host: element as SetRequiredAndNotNull<typeof element, 'shadowRoot'>,
|
|
191
|
-
inputs: element.instanceInputs,
|
|
192
|
-
state: element.instanceState,
|
|
193
|
-
updateState,
|
|
194
|
-
};
|
|
195
|
-
return renderParams;
|
|
196
|
-
}
|
|
@@ -1,127 +0,0 @@
|
|
|
1
|
-
/* eslint-disable @typescript-eslint/no-empty-object-type */
|
|
2
|
-
|
|
3
|
-
import {type PartialWithNullable} from '@augment-vir/common';
|
|
4
|
-
import {type CustomElementTagName} from './custom-tag-name.js';
|
|
5
|
-
import {type DeclarativeElementInit} from './declarative-element-init.js';
|
|
6
|
-
import {type DeclarativeElementInputErrorParams, defineElement} from './define-element.js';
|
|
7
|
-
import {type EventsInitMap} from './properties/element-events.js';
|
|
8
|
-
import {type PropertyInitMapBase} from './properties/element-properties.js';
|
|
9
|
-
import {type BaseStringName} from './properties/string-names.js';
|
|
10
|
-
|
|
11
|
-
/**
|
|
12
|
-
* Options for {@link wrapDefineElement}.
|
|
13
|
-
*
|
|
14
|
-
* @category Internal
|
|
15
|
-
*/
|
|
16
|
-
export type WrapDefineElementOptions<
|
|
17
|
-
TagNameRequirement extends CustomElementTagName = CustomElementTagName,
|
|
18
|
-
InputsRequirement extends PropertyInitMapBase = {},
|
|
19
|
-
StateRequirement extends PropertyInitMapBase = {},
|
|
20
|
-
EventsInitRequirement extends EventsInitMap = {},
|
|
21
|
-
> = PartialWithNullable<{
|
|
22
|
-
/**
|
|
23
|
-
* An optional callback which asserts that an element definition init object given to the
|
|
24
|
-
* wrapped element definition functions is valid.
|
|
25
|
-
*/
|
|
26
|
-
assertInputs: (
|
|
27
|
-
inputInit: DeclarativeElementInit<
|
|
28
|
-
TagNameRequirement,
|
|
29
|
-
InputsRequirement,
|
|
30
|
-
StateRequirement,
|
|
31
|
-
EventsInitRequirement,
|
|
32
|
-
BaseStringName<TagNameRequirement>,
|
|
33
|
-
BaseStringName<TagNameRequirement>,
|
|
34
|
-
ReadonlyArray<string>,
|
|
35
|
-
ReadonlyArray<string>
|
|
36
|
-
>,
|
|
37
|
-
) => void;
|
|
38
|
-
/**
|
|
39
|
-
* An optional callback which transforms a element definition init object given to the wrapped
|
|
40
|
-
* element definition.
|
|
41
|
-
*/
|
|
42
|
-
transformInputs: (
|
|
43
|
-
inputInit: DeclarativeElementInit<
|
|
44
|
-
TagNameRequirement,
|
|
45
|
-
InputsRequirement,
|
|
46
|
-
StateRequirement,
|
|
47
|
-
EventsInitRequirement,
|
|
48
|
-
BaseStringName<TagNameRequirement>,
|
|
49
|
-
BaseStringName<TagNameRequirement>,
|
|
50
|
-
ReadonlyArray<string>,
|
|
51
|
-
ReadonlyArray<string>
|
|
52
|
-
>,
|
|
53
|
-
) => DeclarativeElementInit<
|
|
54
|
-
TagNameRequirement,
|
|
55
|
-
InputsRequirement,
|
|
56
|
-
StateRequirement,
|
|
57
|
-
EventsInitRequirement,
|
|
58
|
-
BaseStringName<TagNameRequirement>,
|
|
59
|
-
BaseStringName<TagNameRequirement>,
|
|
60
|
-
ReadonlyArray<string>,
|
|
61
|
-
ReadonlyArray<string>
|
|
62
|
-
>;
|
|
63
|
-
}>;
|
|
64
|
-
|
|
65
|
-
/**
|
|
66
|
-
* Wraps {@link defineElement} in a superset of requirements. For example:
|
|
67
|
-
*
|
|
68
|
-
* - You could create element definition functions that require all elements to start with a common
|
|
69
|
-
* prefix, like `vir-`.
|
|
70
|
-
* - You could create element definition functions that require all elements to have _at least_ a
|
|
71
|
-
* specified set of input properties.
|
|
72
|
-
* - Etc.
|
|
73
|
-
*
|
|
74
|
-
* @category Element Definition
|
|
75
|
-
*/
|
|
76
|
-
export function wrapDefineElement<
|
|
77
|
-
TagNameRequirement extends CustomElementTagName = CustomElementTagName,
|
|
78
|
-
InputsRequirement extends PropertyInitMapBase = {},
|
|
79
|
-
StateRequirement extends PropertyInitMapBase = {},
|
|
80
|
-
EventsInitRequirement extends EventsInitMap = {},
|
|
81
|
-
>(options?: WrapDefineElementOptions | undefined) {
|
|
82
|
-
const {assertInputs, transformInputs}: WrapDefineElementOptions = {
|
|
83
|
-
assertInputs: options?.assertInputs ?? (() => {}),
|
|
84
|
-
transformInputs: options?.transformInputs ?? ((inputs: any) => inputs),
|
|
85
|
-
};
|
|
86
|
-
|
|
87
|
-
return <Inputs extends InputsRequirement>(
|
|
88
|
-
...errorParams: DeclarativeElementInputErrorParams<Inputs>
|
|
89
|
-
) => {
|
|
90
|
-
return <
|
|
91
|
-
const TagName extends TagNameRequirement,
|
|
92
|
-
State extends StateRequirement,
|
|
93
|
-
EventsInit extends EventsInitRequirement,
|
|
94
|
-
const HostClassKeys extends BaseStringName<TagName> = `${TagName}-`,
|
|
95
|
-
const CssVarKeys extends BaseStringName<TagName> = `${TagName}-`,
|
|
96
|
-
const SlotNames extends ReadonlyArray<string> = Readonly<[]>,
|
|
97
|
-
const TestIds extends ReadonlyArray<string> = Readonly<[]>,
|
|
98
|
-
>(
|
|
99
|
-
inputs: DeclarativeElementInit<
|
|
100
|
-
TagName,
|
|
101
|
-
Inputs,
|
|
102
|
-
State,
|
|
103
|
-
EventsInit,
|
|
104
|
-
HostClassKeys,
|
|
105
|
-
CssVarKeys,
|
|
106
|
-
SlotNames,
|
|
107
|
-
TestIds
|
|
108
|
-
>,
|
|
109
|
-
) => {
|
|
110
|
-
assertInputs(inputs as DeclarativeElementInit<any, any, any, any, any, any, any, any>);
|
|
111
|
-
return defineElement<Inputs>(...errorParams)(
|
|
112
|
-
transformInputs(
|
|
113
|
-
inputs as DeclarativeElementInit<any, any, any, any, any, any, any, any>,
|
|
114
|
-
) as unknown as DeclarativeElementInit<
|
|
115
|
-
TagName,
|
|
116
|
-
Inputs,
|
|
117
|
-
State,
|
|
118
|
-
EventsInit,
|
|
119
|
-
HostClassKeys,
|
|
120
|
-
CssVarKeys,
|
|
121
|
-
SlotNames,
|
|
122
|
-
TestIds
|
|
123
|
-
>,
|
|
124
|
-
);
|
|
125
|
-
};
|
|
126
|
-
};
|
|
127
|
-
}
|
|
@@ -1,16 +0,0 @@
|
|
|
1
|
-
import {defineElement} from 'element-vir';
|
|
2
|
-
import {html} from '../index.js';
|
|
3
|
-
import {MyWithInputs} from './my-with-inputs.element.js';
|
|
4
|
-
|
|
5
|
-
export const MyWithAssignment = defineElement()({
|
|
6
|
-
tagName: 'my-with-assignment',
|
|
7
|
-
render() {
|
|
8
|
-
return html`
|
|
9
|
-
<h1>My App</h1>
|
|
10
|
-
<${MyWithInputs.assign({
|
|
11
|
-
email: 'user@example.com',
|
|
12
|
-
username: 'user',
|
|
13
|
-
})}></${MyWithInputs}>
|
|
14
|
-
`;
|
|
15
|
-
},
|
|
16
|
-
});
|
|
@@ -1,23 +0,0 @@
|
|
|
1
|
-
import {randomInteger} from '@augment-vir/common';
|
|
2
|
-
import {defineElement} from 'element-vir';
|
|
3
|
-
import {html, listen} from '../index.js';
|
|
4
|
-
import {MyCustomActionEvent} from './my-custom-action.event.js';
|
|
5
|
-
|
|
6
|
-
export const MyWithCustomEvents = defineElement()({
|
|
7
|
-
tagName: 'my-with-custom-events',
|
|
8
|
-
render({dispatch}) {
|
|
9
|
-
return html`
|
|
10
|
-
<div
|
|
11
|
-
${listen(MyCustomActionEvent, (event) => {
|
|
12
|
-
console.info(`Got a number! ${event.detail}`);
|
|
13
|
-
})}
|
|
14
|
-
>
|
|
15
|
-
<div
|
|
16
|
-
${listen('click', () => {
|
|
17
|
-
dispatch(new MyCustomActionEvent(randomInteger({min: 0, max: 1_000_000})));
|
|
18
|
-
})}
|
|
19
|
-
></div>
|
|
20
|
-
</div>
|
|
21
|
-
`;
|
|
22
|
-
},
|
|
23
|
-
});
|
|
@@ -1,23 +0,0 @@
|
|
|
1
|
-
import {randomInteger} from '@augment-vir/common';
|
|
2
|
-
import {defineElement} from 'element-vir';
|
|
3
|
-
import {defineElementEvent, html, listen} from '../index.js';
|
|
4
|
-
|
|
5
|
-
export const MyWithEvents = defineElement()({
|
|
6
|
-
tagName: 'my-with-events',
|
|
7
|
-
events: {
|
|
8
|
-
logoutClick: defineElementEvent<void>(),
|
|
9
|
-
randomNumber: defineElementEvent<number>(),
|
|
10
|
-
},
|
|
11
|
-
render({dispatch, events}) {
|
|
12
|
-
return html`
|
|
13
|
-
<button ${listen('click', () => dispatch(new events.logoutClick()))}>log out</button>
|
|
14
|
-
<button
|
|
15
|
-
${listen('click', () =>
|
|
16
|
-
dispatch(new events.randomNumber(randomInteger({min: 0, max: 1_000_000}))),
|
|
17
|
-
)}
|
|
18
|
-
>
|
|
19
|
-
generate random number
|
|
20
|
-
</button>
|
|
21
|
-
`;
|
|
22
|
-
},
|
|
23
|
-
});
|
|
@@ -1,13 +0,0 @@
|
|
|
1
|
-
import {defineElement, html} from '../index.js';
|
|
2
|
-
|
|
3
|
-
export const MyWithInputs = defineElement<{
|
|
4
|
-
username: string;
|
|
5
|
-
email: string;
|
|
6
|
-
}>()({
|
|
7
|
-
tagName: 'my-with-inputs',
|
|
8
|
-
render({inputs}) {
|
|
9
|
-
return html`
|
|
10
|
-
<span>Hello there ${inputs.username}!</span>
|
|
11
|
-
`;
|
|
12
|
-
},
|
|
13
|
-
});
|
|
@@ -1,19 +0,0 @@
|
|
|
1
|
-
import {defineElement} from 'element-vir';
|
|
2
|
-
import {html, onResize} from '../index.js';
|
|
3
|
-
|
|
4
|
-
export const MyWithOnResize = defineElement()({
|
|
5
|
-
tagName: 'my-with-on-resize',
|
|
6
|
-
render() {
|
|
7
|
-
return html`
|
|
8
|
-
<span
|
|
9
|
-
${onResize((entry) => {
|
|
10
|
-
// this will track resizing of this span
|
|
11
|
-
// the entry parameter contains target and contentRect properties
|
|
12
|
-
console.info(entry);
|
|
13
|
-
})}
|
|
14
|
-
>
|
|
15
|
-
Hello there!
|
|
16
|
-
</span>
|
|
17
|
-
`;
|
|
18
|
-
},
|
|
19
|
-
});
|
|
@@ -1,15 +0,0 @@
|
|
|
1
|
-
import {defineElement, html, renderIf} from '../index.js';
|
|
2
|
-
|
|
3
|
-
export const MyWithRenderIf = defineElement<{shouldRender: boolean}>()({
|
|
4
|
-
tagName: 'my-with-render-if',
|
|
5
|
-
render({inputs}) {
|
|
6
|
-
return html`
|
|
7
|
-
${renderIf(
|
|
8
|
-
inputs.shouldRender,
|
|
9
|
-
html`
|
|
10
|
-
I'm conditionally rendered!
|
|
11
|
-
`,
|
|
12
|
-
)}
|
|
13
|
-
`;
|
|
14
|
-
},
|
|
15
|
-
});
|