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.
Files changed (189) hide show
  1. package/dist/declarative-element/custom-tag-name.js +1 -0
  2. package/dist/declarative-element/declarative-element-init.d.ts +56 -0
  3. package/dist/declarative-element/declarative-element-init.js +1 -0
  4. package/dist/declarative-element/declarative-element.d.ts +114 -0
  5. package/dist/declarative-element/declarative-element.js +36 -0
  6. package/dist/declarative-element/define-element.d.ts +41 -0
  7. package/dist/declarative-element/define-element.js +248 -0
  8. package/{src/declarative-element/definition-options.ts → dist/declarative-element/definition-options.d.ts} +2 -7
  9. package/dist/declarative-element/definition-options.js +9 -0
  10. package/dist/declarative-element/directives/assign.directive.d.ts +24 -0
  11. package/dist/declarative-element/directives/assign.directive.js +34 -0
  12. package/dist/declarative-element/directives/async-prop.d.ts +61 -0
  13. package/{src/declarative-element/directives/async-prop.ts → dist/declarative-element/directives/async-prop.js} +8 -42
  14. package/dist/declarative-element/directives/attributes.directive.d.ts +30 -0
  15. package/dist/declarative-element/directives/attributes.directive.js +35 -0
  16. package/dist/declarative-element/directives/create-attribute-directive.d.ts +28 -0
  17. package/dist/declarative-element/directives/create-attribute-directive.js +41 -0
  18. package/dist/declarative-element/directives/directive-helpers.d.ts +27 -0
  19. package/dist/declarative-element/directives/directive-helpers.js +37 -0
  20. package/dist/declarative-element/directives/listen-to-activate.d.ts +15 -0
  21. package/{src/declarative-element/directives/listen-to-activate.ts → dist/declarative-element/directives/listen-to-activate.js} +3 -8
  22. package/dist/declarative-element/directives/listen.directive.d.ts +92 -0
  23. package/dist/declarative-element/directives/listen.directive.js +48 -0
  24. package/dist/declarative-element/directives/mutate.directive.d.ts +38 -0
  25. package/dist/declarative-element/directives/mutate.directive.js +45 -0
  26. package/dist/declarative-element/directives/on-dom-created.directive.d.ts +44 -0
  27. package/dist/declarative-element/directives/on-dom-created.directive.js +51 -0
  28. package/dist/declarative-element/directives/on-dom-rendered.directive.d.ts +41 -0
  29. package/dist/declarative-element/directives/on-dom-rendered.directive.js +45 -0
  30. package/dist/declarative-element/directives/on-intersect.directive.d.ts +64 -0
  31. package/dist/declarative-element/directives/on-intersect.directive.js +89 -0
  32. package/dist/declarative-element/directives/on-resize.directive.d.ts +74 -0
  33. package/dist/declarative-element/directives/on-resize.directive.js +106 -0
  34. package/dist/declarative-element/directives/render-async.directive.d.ts +45 -0
  35. package/dist/declarative-element/directives/render-async.directive.js +33 -0
  36. package/dist/declarative-element/directives/render-if.directive.d.ts +32 -0
  37. package/{src/declarative-element/directives/render-if.directive.ts → dist/declarative-element/directives/render-if.directive.js} +3 -12
  38. package/dist/declarative-element/directives/test-id.directive.d.ts +52 -0
  39. package/{src/declarative-element/directives/test-id.directive.ts → dist/declarative-element/directives/test-id.directive.js} +2 -7
  40. package/dist/declarative-element/has-declarative-element-parent.d.ts +1 -0
  41. package/{src/declarative-element/has-declarative-element-parent.ts → dist/declarative-element/has-declarative-element-parent.js} +4 -7
  42. package/dist/declarative-element/is-declarative-element-definition.d.ts +17 -0
  43. package/{src/declarative-element/is-declarative-element-definition.ts → dist/declarative-element/is-declarative-element-definition.js} +11 -28
  44. package/dist/declarative-element/is-declarative-element.d.ts +15 -0
  45. package/{src/declarative-element/is-declarative-element.ts → dist/declarative-element/is-declarative-element.js} +5 -11
  46. package/dist/declarative-element/properties/assign-inputs.d.ts +1 -0
  47. package/dist/declarative-element/properties/assign-inputs.js +25 -0
  48. package/dist/declarative-element/properties/css-vars.d.ts +16 -0
  49. package/dist/declarative-element/properties/css-vars.js +1 -0
  50. package/dist/declarative-element/properties/element-events.d.ts +65 -0
  51. package/dist/declarative-element/properties/element-events.js +62 -0
  52. package/dist/declarative-element/properties/element-properties.js +1 -0
  53. package/dist/declarative-element/properties/host-classes.d.ts +36 -0
  54. package/dist/declarative-element/properties/host-classes.js +16 -0
  55. package/dist/declarative-element/properties/property-proxy.d.ts +22 -0
  56. package/{src/declarative-element/properties/property-proxy.ts → dist/declarative-element/properties/property-proxy.js} +21 -58
  57. package/dist/declarative-element/properties/string-names.d.ts +28 -0
  58. package/dist/declarative-element/properties/string-names.js +40 -0
  59. package/dist/declarative-element/properties/styles.d.ts +51 -0
  60. package/dist/declarative-element/properties/styles.js +41 -0
  61. package/dist/declarative-element/properties/tag-name.js +1 -0
  62. package/dist/declarative-element/render-callback.d.ts +56 -0
  63. package/dist/declarative-element/render-callback.js +27 -0
  64. package/dist/declarative-element/wrap-define-element.d.ts +36 -0
  65. package/dist/declarative-element/wrap-define-element.js +25 -0
  66. package/{src/index.ts → dist/index.d.ts} +0 -1
  67. package/dist/index.js +43 -0
  68. package/dist/lit-exports/all-lit-exports.js +2 -0
  69. package/{src/lit-exports/base-lit-exports.ts → dist/lit-exports/base-lit-exports.d.ts} +2 -10
  70. package/dist/lit-exports/base-lit-exports.js +24 -0
  71. package/{src/lit-exports/lit-repeat-fix.ts → dist/lit-exports/lit-repeat-fix.d.ts} +16 -45
  72. package/dist/lit-exports/lit-repeat-fix.js +37 -0
  73. package/dist/readme-examples/my-app.element.d.ts +1 -0
  74. package/{src/readme-examples/my-app.element.ts → dist/readme-examples/my-app.element.js} +4 -5
  75. package/dist/readme-examples/my-custom-action.event.d.ts +1 -0
  76. package/dist/readme-examples/my-custom-action.event.js +2 -0
  77. package/dist/readme-examples/my-custom-define.d.ts +4 -0
  78. package/{src/readme-examples/my-custom-define.ts → dist/readme-examples/my-custom-define.js} +4 -9
  79. package/dist/readme-examples/my-simple.element.d.ts +1 -0
  80. package/{src/readme-examples/my-simple.element.ts → dist/readme-examples/my-simple.element.js} +3 -4
  81. package/dist/readme-examples/my-with-assignment.element.d.ts +1 -0
  82. package/dist/readme-examples/my-with-assignment.element.js +15 -0
  83. package/dist/readme-examples/my-with-async-prop.element.d.ts +10 -0
  84. package/{src/readme-examples/my-with-async-prop.element.ts → dist/readme-examples/my-with-async-prop.element.js} +16 -24
  85. package/dist/readme-examples/my-with-cleanup-callback.element.d.ts +3 -0
  86. package/{src/readme-examples/my-with-cleanup-callback.element.ts → dist/readme-examples/my-with-cleanup-callback.element.js} +4 -5
  87. package/dist/readme-examples/my-with-css-vars.element.d.ts +1 -0
  88. package/{src/readme-examples/my-with-css-vars.element.ts → dist/readme-examples/my-with-css-vars.element.js} +4 -5
  89. package/dist/readme-examples/my-with-custom-events.element.d.ts +1 -0
  90. package/dist/readme-examples/my-with-custom-events.element.js +22 -0
  91. package/dist/readme-examples/my-with-event-listening.element.d.ts +3 -0
  92. package/{src/readme-examples/my-with-event-listening.element.ts → dist/readme-examples/my-with-event-listening.element.js} +9 -10
  93. package/dist/readme-examples/my-with-events.element.d.ts +4 -0
  94. package/dist/readme-examples/my-with-events.element.js +20 -0
  95. package/dist/readme-examples/my-with-host-class-definition.element.d.ts +3 -0
  96. package/{src/readme-examples/my-with-host-class-definition.element.ts → dist/readme-examples/my-with-host-class-definition.element.js} +6 -7
  97. package/dist/readme-examples/my-with-host-class-usage.element.d.ts +1 -0
  98. package/{src/readme-examples/my-with-host-class-usage.element.ts → dist/readme-examples/my-with-host-class-usage.element.js} +4 -5
  99. package/dist/readme-examples/my-with-inputs.element.d.ts +4 -0
  100. package/dist/readme-examples/my-with-inputs.element.js +9 -0
  101. package/dist/readme-examples/my-with-on-dom-created.element.d.ts +1 -0
  102. package/{src/readme-examples/my-with-on-dom-created.element.ts → dist/readme-examples/my-with-on-dom-created.element.js} +6 -7
  103. package/dist/readme-examples/my-with-on-resize.element.d.ts +1 -0
  104. package/dist/readme-examples/my-with-on-resize.element.js +18 -0
  105. package/dist/readme-examples/my-with-render-if.element.d.ts +3 -0
  106. package/dist/readme-examples/my-with-render-if.element.js +11 -0
  107. package/dist/readme-examples/my-with-styles-and-interpolated-selector.element.d.ts +1 -0
  108. 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
  109. package/dist/readme-examples/my-with-styles.element.d.ts +1 -0
  110. package/{src/readme-examples/my-with-styles.element.ts → dist/readme-examples/my-with-styles.element.js} +4 -5
  111. package/dist/readme-examples/my-with-update-state.element.d.ts +8 -0
  112. package/{src/readme-examples/my-with-update-state.element.ts → dist/readme-examples/my-with-update-state.element.js} +7 -8
  113. package/dist/readme-examples/require-declarative-element.d.ts +1 -0
  114. package/dist/readme-examples/require-declarative-element.js +2 -0
  115. package/dist/require-declarative-element.d.ts +14 -0
  116. package/{src/require-declarative-element.ts → dist/require-declarative-element.js} +0 -1
  117. package/{src/template-transforms/minimal-element-definition.ts → dist/template-transforms/minimal-element-definition.d.ts} +7 -19
  118. package/dist/template-transforms/minimal-element-definition.js +19 -0
  119. package/dist/template-transforms/nested-mapped-templates.d.ts +6 -0
  120. package/dist/template-transforms/nested-mapped-templates.js +96 -0
  121. package/{src/template-transforms/template-transform-type.ts → dist/template-transforms/template-transform-type.d.ts} +1 -3
  122. package/dist/template-transforms/template-transform-type.js +1 -0
  123. package/dist/template-transforms/transform-template.d.ts +14 -0
  124. package/{src/template-transforms/transform-template.ts → dist/template-transforms/transform-template.js} +22 -70
  125. package/dist/template-transforms/vir-css/css-transform.d.ts +4 -0
  126. package/dist/template-transforms/vir-css/css-transform.js +15 -0
  127. package/dist/template-transforms/vir-css/vir-css.d.ts +12 -0
  128. package/dist/template-transforms/vir-css/vir-css.js +21 -0
  129. package/dist/template-transforms/vir-html/html-interpolation.d.ts +42 -0
  130. package/dist/template-transforms/vir-html/html-interpolation.js +1 -0
  131. package/dist/template-transforms/vir-html/html-transform.d.ts +5 -0
  132. package/dist/template-transforms/vir-html/html-transform.js +96 -0
  133. package/dist/template-transforms/vir-html/tag-name-keys.d.ts +7 -0
  134. package/{src/template-transforms/vir-html/tag-name-keys.ts → dist/template-transforms/vir-html/tag-name-keys.js} +1 -1
  135. package/dist/template-transforms/vir-html/vir-html.d.ts +11 -0
  136. package/{src/template-transforms/vir-html/vir-html.ts → dist/template-transforms/vir-html/vir-html.js} +5 -13
  137. package/dist/typed-event/typed-event.d.ts +55 -0
  138. package/dist/typed-event/typed-event.js +50 -0
  139. package/dist/util/array.d.ts +5 -0
  140. package/{src/util/array.ts → dist/util/array.js} +5 -18
  141. package/{src/util/increment.ts → dist/util/increment.d.ts} +5 -24
  142. package/dist/util/increment.js +1 -0
  143. package/dist/util/lit-template.d.ts +9 -0
  144. package/{src/util/lit-template.ts → dist/util/lit-template.js} +10 -30
  145. package/dist/util/map-async-value.d.ts +7 -0
  146. package/{src/util/map-async-value.ts → dist/util/map-async-value.js} +10 -12
  147. package/dist/util/type.js +1 -0
  148. package/package.json +4 -4
  149. package/src/declarative-element/declarative-element-init.ts +0 -115
  150. package/src/declarative-element/declarative-element.ts +0 -372
  151. package/src/declarative-element/define-element.ts +0 -515
  152. package/src/declarative-element/directives/assign.directive.ts +0 -89
  153. package/src/declarative-element/directives/attributes.directive.ts +0 -63
  154. package/src/declarative-element/directives/create-attribute-directive.ts +0 -47
  155. package/src/declarative-element/directives/directive-helpers.ts +0 -67
  156. package/src/declarative-element/directives/listen.directive.ts +0 -206
  157. package/src/declarative-element/directives/mutate.directive.ts +0 -78
  158. package/src/declarative-element/directives/on-dom-created.directive.ts +0 -68
  159. package/src/declarative-element/directives/on-dom-rendered.directive.ts +0 -61
  160. package/src/declarative-element/directives/on-intersect.directive.ts +0 -139
  161. package/src/declarative-element/directives/on-resize.directive.ts +0 -142
  162. package/src/declarative-element/directives/render-async.directive.ts +0 -111
  163. package/src/declarative-element/properties/assign-inputs.ts +0 -30
  164. package/src/declarative-element/properties/css-vars.ts +0 -24
  165. package/src/declarative-element/properties/element-events.ts +0 -161
  166. package/src/declarative-element/properties/host-classes.ts +0 -63
  167. package/src/declarative-element/properties/string-names.ts +0 -83
  168. package/src/declarative-element/properties/styles.ts +0 -112
  169. package/src/declarative-element/render-callback.ts +0 -196
  170. package/src/declarative-element/wrap-define-element.ts +0 -127
  171. package/src/readme-examples/my-custom-action.event.ts +0 -3
  172. package/src/readme-examples/my-with-assignment.element.ts +0 -16
  173. package/src/readme-examples/my-with-custom-events.element.ts +0 -23
  174. package/src/readme-examples/my-with-events.element.ts +0 -23
  175. package/src/readme-examples/my-with-inputs.element.ts +0 -13
  176. package/src/readme-examples/my-with-on-resize.element.ts +0 -19
  177. package/src/readme-examples/my-with-render-if.element.ts +0 -15
  178. package/src/readme-examples/require-declarative-element.ts +0 -3
  179. package/src/template-transforms/nested-mapped-templates.ts +0 -157
  180. package/src/template-transforms/vir-css/css-transform.ts +0 -30
  181. package/src/template-transforms/vir-css/vir-css.ts +0 -30
  182. package/src/template-transforms/vir-html/html-interpolation.ts +0 -103
  183. package/src/template-transforms/vir-html/html-transform.ts +0 -149
  184. package/src/typed-event/typed-event.ts +0 -90
  185. /package/{src/declarative-element/custom-tag-name.ts → dist/declarative-element/custom-tag-name.d.ts} +0 -0
  186. /package/{src/declarative-element/properties/element-properties.ts → dist/declarative-element/properties/element-properties.d.ts} +0 -0
  187. /package/{src/declarative-element/properties/tag-name.ts → dist/declarative-element/properties/tag-name.d.ts} +0 -0
  188. /package/{src/lit-exports/all-lit-exports.ts → dist/lit-exports/all-lit-exports.d.ts} +0 -0
  189. /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,3 +0,0 @@
1
- import {defineTypedEvent} from '../index.js';
2
-
3
- export const MyCustomActionEvent = defineTypedEvent<number>()('my-custom-action');
@@ -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
- });
@@ -1,3 +0,0 @@
1
- import {requireAllCustomElementsToBeDeclarativeElements} from '../index.js';
2
-
3
- requireAllCustomElementsToBeDeclarativeElements();